permdock 0.6.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-DCYe60Pi.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-DvSSPQJX.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-p1PGoVjb.js → approvals-CMRfsbBh.js} +74 -48
  14. package/dist/{arazzo-41WuzHou.js → arazzo-ClrF3PVb.js} +2 -2
  15. package/dist/{arazzo-CaUVBn7D.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-DabClFLQ.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-BNM3TtDo.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-CAvgUuKs.js → bind-D1nO6fiC.js} +5 -5
  31. package/dist/{bind-DOyrv6zi.d.ts → bind-JDuvxjuW.d.ts} +7 -7
  32. package/dist/{build-instance-Bu_eDqYw.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-Drg-1YhL.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-DZVbrF-z.js → catalog-BaMQfQ6Y.js} +3 -3
  44. package/dist/{catalog-HD2gf5mY.js → catalog-D69WhFii.js} +43 -13
  45. package/dist/{catalog-doc-Cdn7-0pQ.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-CQWIpUG-.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-ytQ3uviA.js → cloud-CO8pYtwr.js} +5 -5
  62. package/dist/{codemod-ua2hHy7w.js → codemod-BP6n8N9L.js} +3 -3
  63. package/dist/{codemod-5mpSpnUY.js → codemod-i4N2BhDc.js} +3 -3
  64. package/dist/{collect-mLTY4nwb.js → collect-BaWeMjwV.js} +17 -8
  65. package/dist/{collect-Ci6akVwH.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-1bsAezL0.d.ts → compile-COM2VKuN.d.ts} +3 -3
  71. package/dist/{completion-BTFrHZhX.js → completion-BNdVf7X2.js} +3 -3
  72. package/dist/{config-bs_kZeYq.js → config-CoQHDrDi.js} +7 -3
  73. package/dist/{config-Bj2Ixq3d.js → config-DGZzMV1B.js} +2 -2
  74. package/dist/{config-report-DSpsLpCE.js → config-report-Cm7UITNA.js} +3 -3
  75. package/dist/connector-schema-_VCSsdtD.js +433 -0
  76. package/dist/{context-B_u3_bDJ.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-B30OMUOJ.d.ts → create-B2-CQqCI.d.ts} +5 -5
  82. package/dist/{create-CGm28gyI.js → create-Cb86Z8Im.js} +9 -8
  83. package/dist/{create-DCF2SvoT.js → create-DJrlhEp9.js} +5 -5
  84. package/dist/{create-D_NmPOdH.d.ts → create-QHuuPw3q.d.ts} +7 -7
  85. package/dist/{create-CBMmFie-.d.ts → create-UTnUVETj.d.ts} +30 -10
  86. package/dist/{credential-BcoiejpY.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-j6-rc37o.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-CiFQNuMV.d.ts → denied-text-D4qkEtFz.d.ts} +2 -2
  94. package/dist/{describe-BybMRY7A.js → describe-DZlnEtLy.js} +1 -0
  95. package/dist/{describe-B5qgDvEW.d.ts → describe-O0SwYIK8.d.ts} +2 -2
  96. package/dist/{diff-CmuSD3vc.js → diff-Btr1c1Ow.js} +2 -2
  97. package/dist/{diff-3jbx6Rm4.js → diff-DzT-xD13.js} +10 -10
  98. package/dist/{doctor-BdZw53-k.js → doctor-BU1szn63.js} +241 -49
  99. package/dist/{doctor-3ZqNHX_G.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-DH5QEGXh.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-CNClBvcj.js → evaluate-B_oqFbWC.js} +55 -12
  107. package/dist/{evaluations-C_1vdSZc.d.ts → evaluations-BCddEOfO.d.ts} +4 -4
  108. package/dist/{evaluations-beAooV0n.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-Dw0MTS3D.d.ts → fetch-adapter-CuhyYwC1.d.ts} +4 -4
  116. package/dist/{fetch-adapter-DD_gfmrC.js → fetch-adapter-De-u6vhJ.js} +3 -3
  117. package/dist/{fields-OYG_JR78.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-CTCMsFZk.js → from-snapshot-Bz469dIh.js} +17 -10
  122. package/dist/generate-3FNO5P5Q.js +159 -0
  123. package/dist/{grantee-hxrUsbpM.js → grantee-BrRANrpT.js} +1 -1
  124. package/dist/{grantee-conditions-CcXf8hMM.js → grantee-conditions-C6P1Tvol.js} +1 -1
  125. package/dist/{grantee-match-DbENBHLB.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-CBYVMjwh.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-BPk51-kX.d.ts → hosted-BmjzxQhp.d.ts} +14 -2
  132. package/dist/{hosted-B46-5LYE.js → hosted-XBgU6RGT.js} +34 -12
  133. package/dist/{http-DXJ37RDA.js → http-Ca3Sr5x1.js} +1 -1
  134. package/dist/{import-wyqXUyjm.js → import-Bz0GefWg.js} +5 -5
  135. package/dist/{import-CNV7I2Dw.js → import-DB2EG_iy.js} +3 -3
  136. package/dist/{index-C-6Letxg.d.ts → index-BE8y3moU.d.ts} +50 -8
  137. package/dist/{index-B8YjkEZ4.d.ts → index-BSfRl0hZ.d.ts} +6 -6
  138. package/dist/{index-DuWxc5dt.d.ts → index-BTkwrK7v.d.ts} +143 -14
  139. package/dist/index-CMiPH2Tv.d.ts +206 -0
  140. package/dist/{index-Ch8LpNDp.d.ts → index-DH9DUDEM.d.ts} +18 -3
  141. package/dist/{index-CueFnxQc.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-BsVpyGIk.d.ts → instance-options-CU0YQCLH.d.ts} +1 -1
  147. package/dist/{instance-snapshot-BOEhcqIF.js → instance-snapshot-CjcwnEiV.js} +16 -11
  148. package/dist/jwt/index.d.ts +83 -5
  149. package/dist/jwt/index.js +143 -5
  150. package/dist/{kernel-D0NVb1cK.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-dvL2XEe1.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-Dr70oA_3.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-CIq4-E9F.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-C4dDTVEd.js → openapi-DMocl1bh.js} +4 -4
  179. package/dist/{openapi-B7HZ0f-r.js → openapi-Ddb4628T.js} +2 -7
  180. package/dist/{openapi-DD1SV-5-.js → openapi-ztVaux6j.js} +8 -8
  181. package/dist/{operation-findings-DgATDpvh.js → operation-findings-kRcEp8lE.js} +1 -1
  182. package/dist/{operations-X0VM7F3m.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-1im__-08.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-DqaJNJPn.js → ownership-Z2LpxsGa.js} +443 -40
  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-5ODwqu8b.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-BrAscV28.js → permdock-BfWEeMqk.js} +177 -49
  199. package/dist/{permdock-SV8ZINYT.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-CN8H_9UF.d.ts → permission-types-DhNEmoRG.d.ts} +4 -64
  202. package/dist/{permissions-u_KHg-sN.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-BPxlwVhN.js → permissions-DArULThq.js} +4 -4
  205. package/dist/pkce-5h8NgMQJ.js +21 -0
  206. package/dist/{policies-DP2nqRoF.js → policies-B2lZIurj.js} +3 -3
  207. package/dist/{policy-77FSAq_V.d.ts → policy-B7dg_yzu.d.ts} +2 -2
  208. package/dist/{policy-DbM5YYtV.js → policy-DaJy4nK4.js} +17 -8
  209. package/dist/{policy-from-catalog-C2gMa2Dj.js → policy-from-catalog-DFWYkNdu.js} +9 -9
  210. package/dist/{policy-types-n0uRTsW8.d.ts → policy-types-B-F-qAZk.d.ts} +83 -4
  211. package/dist/postgres-store-BL9M_CA1.js +1001 -0
  212. package/dist/{postgrest-CEgRbefE.d.ts → postgrest-CYacM_u7.d.ts} +12 -1
  213. package/dist/{postgrest-DAjUkF9w.js → postgrest-r5faDIzD.js} +37 -4
  214. package/dist/{powersync-DISt6SUe.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-B45V5d2b.d.ts → problem-details-Tcfmj3bV.d.ts} +1 -1
  222. package/dist/prompt-DwtVemER.js +935 -0
  223. package/dist/{protected-RFGpakN9.d.ts → protected-BwZYL1X_.d.ts} +6 -5
  224. package/dist/{protected-BlF0F6wL.js → protected-DXE3cQYg.js} +2 -2
  225. package/dist/{provider-B1al-AZz.js → provider-BQsTYYy0.js} +2 -2
  226. package/dist/{provider-DILL9oPK.d.ts → provider-Csk-THAn.d.ts} +1 -1
  227. package/dist/{provider-store-DM6DNcta.js → provider-store-IgqQipCO.js} +2 -2
  228. package/dist/{pull-jEwbf80J.js → pull-CN5OLxrF.js} +7 -7
  229. package/dist/pull-Cty6Ovyu.js +1 -0
  230. package/dist/{push-BD4f15co.js → push-tVdG8dUL.js} +54 -14
  231. package/dist/{pushed-policy-DCW91KQU.d.ts → pushed-policy-BbcY9r_4.d.ts} +1 -1
  232. package/dist/{pushed-policy-CqtxkV4G.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 +209 -21
  239. package/dist/{refs-K6eWUJ0H.js → refs-CNJBiTFo.js} +15 -1
  240. package/dist/{replay-Bkm-Ne4l.d.ts → replay-DCDD_ZfL.d.ts} +1 -1
  241. package/dist/{request-context-C81Pip9n.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-BAqP4q66.js → rls-Ck_PocSp.js} +32 -8
  245. package/dist/{rls-DTvYd-lI.js → rls-CxBZb4rZ.js} +478 -534
  246. package/dist/{role-builder-uWQZ4v84.js → role-builder-C1VJzvcr.js} +3 -3
  247. package/dist/rolldown-runtime-C3I60J0A.js +4 -0
  248. package/dist/{rpc-VSl5ylaQ.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-DocwaTKn.d.ts → run-ticket-BpNi7BCi.d.ts} +8 -3
  252. package/dist/{run-CUKuz0A8.js → run-uLD2aWuO.js} +7 -7
  253. package/dist/{runtime-D3VTAiCA.js → runtime-Vif3_-zf.js} +1 -1
  254. package/dist/{saas-BCXRuXca.js → saas-Az_Kz-4D.js} +7 -7
  255. package/dist/{scan-qvOe0hS3.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-C3WXAHZj.js → server-Bnga6I50.js} +3 -3
  265. package/dist/{server-types-CKQiCnON.d.ts → server-types-C4gZUEZy.d.ts} +9 -9
  266. package/dist/{shared-DvvFzYXe.js → shared-C8LjUdVU.js} +1 -1
  267. package/dist/{shared-BAK8t4Uo.js → shared-fMKOv8hP.js} +44 -38
  268. package/dist/{sink-4-eQIRWf.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-B7DkYg6g.js → snapshot-CbGmYiJx.js} +4 -4
  272. package/dist/{snapshot-cache-DZHQ0KF6.js → snapshot-cache-DT2Kx1F8.js} +1 -1
  273. package/dist/{snapshot-cache-PXI-vGpY.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-Xc4zkszI.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-Cu2m75uo.js → src-DLFrtrrC.js} +140 -48
  284. package/dist/ssf/index.d.ts +4 -4
  285. package/dist/ssf/index.js +640 -211
  286. package/dist/{standard-webhooks-rbD7LS6h.d.ts → standard-webhooks-B_qRg0ws.d.ts} +2 -2
  287. package/dist/{store-BDutJkDL.js → store-DSP9oGvh.js} +15 -7
  288. package/dist/{store-options-u0ycEe8s.js → store-options-B_poyYvg.js} +6 -6
  289. package/dist/{stores-BUGNbJTt.d.ts → stores-BAZwSYZA.d.ts} +6 -5
  290. package/dist/{stores-CGhM8BN_.js → stores-BqEuHC05.js} +2 -2
  291. package/dist/{stream-CeCMJmBB.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-x5JtR2tc.js → supabase--0aJdLEd.js} +8 -6
  299. package/dist/{supabase-By_frk3U.js → supabase-Bqp7iIY2.js} +3 -3
  300. package/dist/supabase-hook-DJxC4PoP.js +1 -0
  301. package/dist/{supabase-hook-BMoEhZir.js → supabase-hook-Dg0SrQWR.js} +1060 -119
  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-Dfv0aTER.d.ts → types-BWZybqs9.d.ts} +110 -8
  333. package/dist/{types-Druu9wLM.d.ts → types-BXMYB7BY.d.ts} +2 -2
  334. package/dist/{types-BzzaHxt3.d.ts → types-BfVmNJO5.d.ts} +14 -3
  335. package/dist/{types-lUlG3TVd.d.ts → types-CIeZcG8v.d.ts} +2 -2
  336. package/dist/{types-B3_ooZgZ.d.ts → types-CKV71kKh.d.ts} +4 -4
  337. package/dist/{types-CX7AvRqP.d.ts → types-CQVEQawv.d.ts} +4 -4
  338. package/dist/{types-C863OQiR.d.ts → types-CeIscIKp.d.ts} +4 -4
  339. package/dist/{types-C_IiEs64.d.ts → types-CfiKC5aN.d.ts} +1 -1
  340. package/dist/{types-_WhUP7ud.d.ts → types-D3A19w4A.d.ts} +8 -4
  341. package/dist/{types-8RnwUAvE.d.ts → types-DBHftjgS.d.ts} +15 -8
  342. package/dist/{types-BdtSDbBO.d.ts → types-DC44-hqb.d.ts} +2 -2
  343. package/dist/{types-CVZSNocA.d.ts → types-DXmwu78Z.d.ts} +4 -4
  344. package/dist/{types-C791HFu9.d.ts → types-cTos-H7p.d.ts} +2 -2
  345. package/dist/{types-BtHtcKMr.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-SveTRTyr.js → usage-Bybmck7f.js} +7 -7
  349. package/dist/{usage-CRVl9V3t.js → usage-CDaLXCfL.js} +2 -2
  350. package/dist/usage-y-kBNdqs.js +1 -0
  351. package/dist/{validation-error-DHUrAkku.d.ts → validation-error-CQpoquwj.d.ts} +1 -1
  352. package/dist/{verify-BaAKx7t6.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-B986w1oK.d.ts → waiter-DwEyouan.d.ts} +2 -2
  358. package/dist/watch-Bd9mx3rd.js +1 -0
  359. package/dist/{watch-vea54PRw.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-C9vfEphl.js → where-scope-wq2coopv.js} +41 -21
  363. package/dist/{who-can-DWBAcaCQ.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-C5jC6sKI.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 +4 -1
  379. package/skills/permdock-tenancy/SKILL.md +1 -1
  380. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +1 -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-BoWglDPI.js +0 -1
  384. package/dist/collect-D7eQDffE.js +0 -1
  385. package/dist/index-Cp_ilKi1.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-BkWWCS1K.js +0 -538
  391. package/dist/powersync-MMJ2mI2q.js +0 -1
  392. package/dist/prompt-DfZLJLIn.js +0 -32
  393. package/dist/pull-CvpINcMK.js +0 -1
  394. package/dist/run-DDwUaJDU.js +0 -1
  395. package/dist/supabase-hook-CCw5m35C.js +0 -1
  396. package/dist/supautils-B6HYL9eL.js +0 -91
  397. package/dist/text-diff-BQcUapOb.js +0 -15
  398. package/dist/usage-CZpSQP6L.js +0 -1
  399. package/dist/watch--ovlPOc0.js +0 -1
@@ -1,6 +1,7 @@
1
- import { et as MembershipSource } from "./policy-types-n0uRTsW8.js";
2
- import { n as RoleThrough, y as SupabaseSuspension } from "./types-BzzaHxt3.js";
3
- import { o as SupabaseManifestMembership } from "./manifest-mx5ghSFM.js";
1
+ import { et as MembershipSource } from "./policy-types-B-F-qAZk.js";
2
+ import { b as SupabaseSuspension, n as RoleMap, r as RoleThrough } from "./types-BfVmNJO5.js";
3
+ import { t as SqlQuery } from "./sql-CDEPCA0g.js";
4
+ import { c as SupabaseManifestMembership } from "./manifest-BVhExYhw.js";
4
5
  //#region src/supabase/roles.d.ts
5
6
  /** A roles table a role column references, by `schema.table`. */
6
7
  type RoleKeys = {
@@ -12,15 +13,26 @@ type RoleKeys = {
12
13
  /** The referencing table's column. */
13
14
  readonly ref: string;
14
15
  };
15
- //#endregion
16
- //#region src/supabase/sources.d.ts
16
+ /** One role source of a membership row: a key column, or a reference to a roles table. */
17
+ type RoleSource = string | RoleThrough | RoleMap;
18
+ /** A role source, or several the row holds at once. */
19
+ type RoleSpec = RoleSource | readonly RoleSource[];
17
20
  /**
18
- * Runs one parameterised statement: `pg`'s `client.query` (which resolves
19
- * `{ rows }`) and `postgres`'s `sql.unsafe` (which resolves the rows) both fit.
21
+ * A roles table whose tenant rows are written by tenants. A role key read
22
+ * through it from a tenant row that is one of `declared` reads as null, so a
23
+ * tenant cannot claim the grants of a declared role by naming a role after it.
20
24
  */
21
- type SqlQuery = (text: string, values: readonly unknown[]) => Promise<readonly Record<string, unknown>[] | {
22
- readonly rows: readonly Record<string, unknown>[];
23
- }>;
25
+ type RoleGuard = {
26
+ /** `schema.table`, or `public`. */
27
+ readonly table: string;
28
+ /** The tenant column of the roles table. */
29
+ readonly tenant: string;
30
+ /** A tenant row with this column true is the application's own copy of a declared role. */
31
+ readonly skip?: string | undefined;
32
+ readonly declared: readonly string[];
33
+ };
34
+ //#endregion
35
+ //#region src/supabase/sources.d.ts
24
36
  type Common = {
25
37
  readonly table: string;
26
38
  /** Runs the lookups; without it the source only describes SQL (for `permdock supabase hook generate`). */
@@ -41,7 +53,7 @@ type MembershipTableOptions = Common & {
41
53
  * The role key column, a reference to a roles table that holds the key,
42
54
  * or several of them: the row holds every non-null key.
43
55
  */
44
- readonly role?: string | RoleThrough | readonly (string | RoleThrough)[];
56
+ readonly role?: RoleSpec;
45
57
  readonly via?: string;
46
58
  readonly expiresAt?: string;
47
59
  readonly disabledAt?: string;
@@ -73,8 +85,8 @@ type MembershipJunctionOptions = Common & {
73
85
  * roles every row holds (a contact table with no role column), or
74
86
  * `{ sources }`: several role columns whose non-null keys the row holds.
75
87
  */
76
- readonly roles: string | RoleThrough | readonly string[] | {
77
- readonly sources: readonly (string | RoleThrough)[];
88
+ readonly roles: string | RoleThrough | RoleMap | readonly string[] | {
89
+ readonly sources: readonly RoleSource[];
78
90
  };
79
91
  /** The membership kind every row has (`contact`, `staff`, `partner`). */
80
92
  readonly via?: string;
@@ -135,6 +147,41 @@ type MembershipSql = {
135
147
  readonly manifest: SupabaseManifestMembership;
136
148
  /** What the ownership triggers count; absent on a source that is not a table. */
137
149
  readonly holders?: MembershipHolders;
150
+ /** The rows as plain columns, for Sync Streams and `powerSyncSource`; a source without it does not sync. */
151
+ readonly stream?: MembershipStream;
152
+ };
153
+ /**
154
+ * One membership source as columns a Sync Streams query can filter on.
155
+ * Tables are `schema.table`; a `through` table is qualified in the source's
156
+ * schema when it names none.
157
+ */
158
+ type MembershipStream = {
159
+ readonly table: string;
160
+ /** The user id column, or the reference to the table that holds the user id. */
161
+ readonly user: string | RoleThrough;
162
+ /** The scope column, or the scope every row is a membership of. */
163
+ readonly scope: {
164
+ readonly column: string;
165
+ } | {
166
+ readonly value: string;
167
+ };
168
+ readonly id: string;
169
+ /** The role sources (the row holds every non-null key), or the fixed roles every row holds. */
170
+ readonly roles: RoleSpec | {
171
+ readonly value: readonly string[];
172
+ };
173
+ /** The membership kind column, or the kind every row has. */
174
+ readonly via?: {
175
+ readonly column: string;
176
+ } | {
177
+ readonly value: string;
178
+ };
179
+ readonly expiresAt?: string;
180
+ readonly disabledAt?: string;
181
+ /** A row may hold no role key: such a row is no membership, and a reader drops it. */
182
+ readonly nullableRoles: boolean;
183
+ /** The guard the source reads its roles table with: a tenant row named like a declared role is no role. */
184
+ readonly guard?: RoleGuard;
138
185
  };
139
186
  /**
140
187
  * The rows of a membership table, for the holder-count and transfer-only
@@ -158,6 +205,8 @@ type MembershipHolders = {
158
205
  };
159
206
  type SqlMembershipSource = MembershipSource & {
160
207
  readonly sql: MembershipSql;
208
+ /** The same source with the role keys of tenant rows of `guard.table` named like a declared role read as null. */
209
+ readonly guarded?: (guard: RoleGuard) => SqlMembershipSource;
161
210
  };
162
211
  /** The part of `@supabase/server`'s `PostgresApi` a `SqlQuery` needs. */
163
212
  type SupabasePostgres = {
@@ -187,4 +236,4 @@ declare function authzVersion(options: {
187
236
  readonly schema?: string;
188
237
  }): NonNullable<MembershipSource["version"]>;
189
238
  //#endregion
190
- export { MembershipTableOptions as a, SupabasePostgres as c, supabasePostgresQuery as d, tableMembershipSource as f, MembershipSql as i, authzVersion as l, MembershipHolders as n, SqlMembershipSource as o, MembershipJunctionOptions as r, SqlQuery as s, AUTHZ_VERSION_TABLE as t, junctionMembershipSource as u };
239
+ export { MembershipStream as a, SupabasePostgres as c, supabasePostgresQuery as d, tableMembershipSource as f, MembershipSql as i, authzVersion as l, MembershipHolders as n, MembershipTableOptions as o, MembershipJunctionOptions as r, SqlMembershipSource as s, AUTHZ_VERSION_TABLE as t, junctionMembershipSource as u };
@@ -0,0 +1,11 @@
1
+ //#region src/cli/sql/sources.ts
2
+ /**
3
+ * The membership sources a project reads: `rls.membershipSources`, else
4
+ * `supabase.hook.memberships`. Every generator, doctor check and verifier
5
+ * resolves them here, so they all read the same tables.
6
+ */
7
+ function membershipSourcesOf(config) {
8
+ return config.rls?.membershipSources ?? config.supabase?.hook?.memberships ?? [];
9
+ }
10
+ //#endregion
11
+ export { membershipSourcesOf as t };
@@ -1,4 +1,8 @@
1
1
  //#region src/core/sql.ts
2
+ /** The rows of a `SqlQuery` result, whichever of its two shapes the driver resolved. */
3
+ function sqlRows(result) {
4
+ return Array.isArray(result) ? result : result.rows;
5
+ }
2
6
  /** A bare Postgres identifier PermDock emits unquoted-safe: letters, digits and `_`, not starting with a digit. */
3
7
  const SQL_IDENT = /^[A-Za-z_][A-Za-z0-9_]*$/u;
4
8
  /** A validated, double-quoted identifier; anything outside `SQL_IDENT` throws. */
@@ -52,4 +56,4 @@ function defaultSqlCommand(action) {
52
56
  }
53
57
  }
54
58
  //#endregion
55
- export { quoteQualifiedTable as a, quoteSqlTable as c, qualifySqlTable as i, sqlIdent as l, defaultSqlCommand as n, quoteSqlIdent as o, escapeSqlIdent as r, quoteSqlLiteral as s, SQL_IDENT as t, sqlTextArray as u };
59
+ export { quoteQualifiedTable as a, quoteSqlTable as c, sqlTextArray as d, qualifySqlTable as i, sqlIdent as l, defaultSqlCommand as n, quoteSqlIdent as o, escapeSqlIdent as r, quoteSqlLiteral as s, SQL_IDENT as t, sqlRows as u };
@@ -0,0 +1,10 @@
1
+ //#region src/core/sql.d.ts
2
+ /**
3
+ * Runs one parameterised statement: `pg`'s `client.query` (which resolves
4
+ * `{ rows }`) and `postgres`'s `sql.unsafe` (which resolves the rows) both fit.
5
+ */
6
+ type SqlQuery = (text: string, values: readonly unknown[]) => Promise<readonly Record<string, unknown>[] | {
7
+ readonly rows: readonly Record<string, unknown>[];
8
+ }>;
9
+ //#endregion
10
+ export { SqlQuery as t };
@@ -1,29 +1,29 @@
1
1
  import { n as isReadonlyArray, r as isRecord, t as compact } from "./compact-CAf557ZB.js";
2
2
  import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
3
  import { n as isForbiddenKey, r as ownGet } from "./paths-DXSHAMIa.js";
4
- import { f as normalizeApproval, g as assertSqlFunctionName, h as assertSqlFunctionArg, m as assertPortableTwin, p as normalizeWhere, u as assertApprovalRelations } from "./role-builder-uWQZ4v84.js";
4
+ import { f as normalizeApproval, g as assertSqlFunctionName, h as assertSqlFunctionArg, m as assertPortableTwin, p as normalizeWhere, u as assertApprovalRelations } from "./role-builder-C1VJzvcr.js";
5
5
  import { n as PermDockDeniedError } from "./errors-BKy0EfhN.js";
6
6
  import { o as sameId } from "./expiry-D4_YKRKD.js";
7
7
  import { n as internalsOf } from "./internals-Dk8A8fX3.js";
8
- import { c as listPermissions, i as getRegistry, n as findPermission, o as isPermission } from "./permission-registry-Br4jSNVi.js";
8
+ import { c as listPermissions, i as getRegistry, n as findPermission, o as isPermission } from "./permission-registry-DpPtSKNZ.js";
9
9
  import { n as isThenable$1 } from "./thenable-yD7SabqG.js";
10
10
  import { c as isEdgeRelation, m as restrictedStops, o as groupEntries, s as isComputedRelation, u as isPrincipalRelation } from "./resource-relations-D_jw0BFx.js";
11
11
  import { a as durationOf, g as secondsOf, m as rfc3339, p as nowSeconds } from "./time-DkWjdL98.js";
12
- import { d as scopeList, l as scopeChain, m as tenantOf, o as resolveScope, u as scopeIdOf } from "./scopes-CUPSjo9q.js";
13
- import { u as evaluateCondition } from "./delegation-j6-rc37o.js";
14
- import { _ as listPlans, a as authenticated, m as findRole, o as flattenGrantee } from "./grantee-hxrUsbpM.js";
15
- import { m as tenantsOf, r as isMembershipExpired } from "./tenancy-DN2QAx9z.js";
16
- import { o as levelNames, r as grantList, t as declaredRoleNames } from "./policy-DbM5YYtV.js";
17
- import { r as isPortableCondition } from "./hosted-B46-5LYE.js";
18
- import { n as OPERATION_RISKS, r as isOperationRisk } from "./permissions-B-wCP5ZC.js";
19
- import { S as tenantCustomRoles, b as resolveCustomRole, f as customRoleId, l as ceilingGrants, m as customRoleScope, p as customRoleOf } from "./evaluate-CNClBvcj.js";
20
- import { d as rankRoles, f as usesAssigns, i as collectSnapshotGrants, n as snapshotScopes, t as snapshotOf, u as bindingOf } from "./instance-snapshot-BOEhcqIF.js";
12
+ import { a as normalizeMembership$1, d as scopeIdOf, f as scopeList, h as tenantOf, o as normalizeMemberships$1, s as resolveScope$1, u as scopeChain } from "./scopes-BHsc-wp-.js";
13
+ import { u as evaluateCondition } from "./delegation-C5rOdTp5.js";
14
+ import { _ as listPlans, a as authenticated, m as findRole, o as flattenGrantee } from "./grantee-BrRANrpT.js";
15
+ import { m as tenantsOf, r as isMembershipExpired } from "./tenancy-CmeBQ6Nv.js";
16
+ import { r as grantList, s as levelNames, t as declaredRoleNames } from "./policy-DaJy4nK4.js";
17
+ import { o as isPortableCondition } from "./hosted-XBgU6RGT.js";
18
+ import { n as OPERATION_RISKS, r as isOperationRisk } from "./permissions-CyH2MV_B.js";
19
+ import { C as tenantCustomRoles, f as customRoleId, l as ceilingGrants, m as customRoleScope, p as customRoleOf, x as resolveCustomRole } from "./evaluate-B_oqFbWC.js";
20
+ import { d as rankRoles, f as usesAssigns, i as collectSnapshotGrants, n as snapshotScopes, t as snapshotOf, u as bindingOf } from "./instance-snapshot-CjcwnEiV.js";
21
21
  import { n as relationId } from "./relations-BnCWnJGI.js";
22
- import { r as snapshotGrant, t as buildSnapshot } from "./snapshot-B7DkYg6g.js";
23
- import { n as LOCAL_CUSTOM_ROLE } from "./parse-local-manifest-CVSs6J9I.js";
24
- import { r as resolveSubject, s as APP } from "./permdock-BrAscV28.js";
25
- import { i as memoryApprovalStore } from "./store-BDutJkDL.js";
26
- import { n as wrapPermDock } from "./wrap-gX61EtpB.js";
22
+ import { r as snapshotGrant, t as buildSnapshot } from "./snapshot-CbGmYiJx.js";
23
+ import { n as LOCAL_CUSTOM_ROLE } from "./parse-local-manifest-T1Q8X3A2.js";
24
+ import { c as APP, r as resolveSubject } from "./permdock-BfWEeMqk.js";
25
+ import { i as memoryApprovalStore } from "./store-DSP9oGvh.js";
26
+ import { n as wrapPermDock } from "./wrap-CiSc_KCq.js";
27
27
  //#region src/conditions/sql-function.ts
28
28
  function sqlFunction(name, options) {
29
29
  assertSqlFunctionName(name);
@@ -1599,12 +1599,34 @@ function writable(options) {
1599
1599
  return finishPreset(WRITABLE_ACTIONS, WRITABLE_COLLECTION, options);
1600
1600
  }
1601
1601
  //#endregion
1602
+ //#region src/core/scope-helpers.ts
1603
+ /**
1604
+ * The canonical form PermDock evaluates one membership in, or `undefined`
1605
+ * when it is malformed and grants nothing. `scopes` is the policy's or the
1606
+ * catalog's scope list; absent or empty means the implicit `tenant` and
1607
+ * `team` pair.
1608
+ */
1609
+ function normalizeMembership(input, scopes) {
1610
+ return normalizeMembership$1(input, scopeList(scopes));
1611
+ }
1612
+ /** Every well-formed membership of `input` in canonical form; malformed entries are dropped. */
1613
+ function normalizeMemberships(input, scopes) {
1614
+ return normalizeMemberships$1(input, scopeList(scopes));
1615
+ }
1616
+ /**
1617
+ * The declared scope `name` stands for: the name itself, or the scope the
1618
+ * `tenant` (first) or `team` (second) alias names. `undefined` otherwise.
1619
+ */
1620
+ function resolveScope(scopes, name) {
1621
+ return resolveScope$1(scopeList(scopes), name);
1622
+ }
1623
+ //#endregion
1602
1624
  //#region src/core/ownership.ts
1603
1625
  function coversInstance(membership, scopes, scope, id, within) {
1604
1626
  if (membership.scope === void 0 || membership.id === void 0) return false;
1605
1627
  if (membership.scope === scope) return sameId(membership.id, id);
1606
1628
  if (!scopeChain(scopes, scope).slice(1).includes(membership.scope)) return false;
1607
- const wanted = within === void 0 ? void 0 : Object.entries(within).find(([key]) => resolveScope(scopes, key) === membership.scope)?.[1] ?? void 0;
1629
+ const wanted = within === void 0 ? void 0 : Object.entries(within).find(([key]) => resolveScope$1(scopes, key) === membership.scope)?.[1] ?? void 0;
1608
1630
  return wanted !== void 0 && scopeIdOf(membership, membership.scope) === wanted;
1609
1631
  }
1610
1632
  /** Roles the principal holds at the instance, at an ancestor named in `within`, or globally. */
@@ -1639,12 +1661,13 @@ function conflictsWith(policy, role) {
1639
1661
  return out;
1640
1662
  }
1641
1663
  /** What the change does to the instance's holder count. */
1642
- function countRules(binding, role, holders, delta, deny) {
1643
- if (binding === void 0 || delta === 0) return;
1644
- const min = binding.min ?? 0;
1645
- if (!(min > 0 || binding.max !== void 0 || binding.transferOnly === true)) return;
1664
+ function countRules(rules, holders, delta, deny) {
1665
+ const role = rules.key;
1666
+ if (delta === 0) return;
1667
+ const min = rules.min ?? 0;
1668
+ if (!(min > 0 || rules.max !== void 0 || rules.transferOnly === true)) return;
1646
1669
  if (!(holders !== void 0 && Number.isInteger(holders) && holders >= 0)) {
1647
- deny(delta < 0 && min > 0 ? "last-holder" : delta > 0 && binding.max !== void 0 ? "max-holders" : "transfer-only", {
1670
+ deny(delta < 0 && min > 0 ? "last-holder" : delta > 0 && rules.max !== void 0 ? "max-holders" : "transfer-only", {
1648
1671
  role,
1649
1672
  holders: null
1650
1673
  });
@@ -1656,17 +1679,85 @@ function countRules(binding, role, holders, delta, deny) {
1656
1679
  min,
1657
1680
  holders
1658
1681
  });
1659
- if (delta > 0 && binding.max !== void 0 && after > binding.max) deny("max-holders", {
1682
+ if (delta > 0 && rules.max !== void 0 && after > rules.max) deny("max-holders", {
1660
1683
  role,
1661
- max: binding.max,
1684
+ max: rules.max,
1662
1685
  holders
1663
1686
  });
1664
- if (binding.transferOnly === true && holders > 0 && after > 0) deny("transfer-only", {
1687
+ if (rules.transferOnly === true && holders > 0 && after > 0) deny("transfer-only", {
1665
1688
  role,
1666
1689
  holders
1667
1690
  });
1668
1691
  }
1669
1692
  /**
1693
+ * The rules of a role change that need no subject: `assigns`, `for`,
1694
+ * `exclusiveWith`, `min`, `max` and `transferOnly`, from holder counts and
1695
+ * the target's roles alone. `decideRoleChange` runs the same function after
1696
+ * its actor, tenant and ceiling checks; a service that holds only the
1697
+ * catalog calls it with the `CatalogRole` entries.
1698
+ */
1699
+ function checkRoleChange(role, input) {
1700
+ const name = role.key;
1701
+ const denials = [];
1702
+ const deny = (reason, detail) => {
1703
+ denials.push(compact({
1704
+ role: name,
1705
+ reason,
1706
+ detail
1707
+ }));
1708
+ };
1709
+ const kind = input.change?.kind;
1710
+ const target = input.change?.target;
1711
+ if (kind !== "assign" && kind !== "revoke" && kind !== "transfer" || target === null || typeof target !== "object") {
1712
+ deny("validation");
1713
+ return freezeDeep({
1714
+ ok: false,
1715
+ denials
1716
+ });
1717
+ }
1718
+ const roles = input.roles ?? [];
1719
+ const targetRoles = isReadonlyArray(target.roles) ? target.roles : [];
1720
+ const already = targetRoles.includes(name);
1721
+ let by = null;
1722
+ if (kind !== "transfer" && input.actorRoles !== void 0 && roles.some((rules) => rules.assigns !== void 0)) {
1723
+ const held = input.actorRoles;
1724
+ by = held.find((actorRole) => roles.find((rules) => rules.key === actorRole)?.assigns?.includes(name) === true) ?? null;
1725
+ if (by === null) deny("not-assignable-by", { held });
1726
+ }
1727
+ if (kind !== "revoke" && !already) {
1728
+ const kinds = role.for;
1729
+ if (kinds !== void 0 && (target.via === void 0 || !kinds.includes(target.via))) deny("not-allowed-for-membership", {
1730
+ via: target.via ?? null,
1731
+ for: kinds
1732
+ });
1733
+ const conflicts = new Set(role.exclusiveWith ?? []);
1734
+ for (const rules of roles) if (rules.exclusiveWith?.includes(name) === true) conflicts.add(rules.key);
1735
+ const clash = targetRoles.filter((held) => conflicts.has(held));
1736
+ if (clash.length > 0) deny("conflicting-role", { with: clash });
1737
+ }
1738
+ const delta = kind === "assign" ? already ? 0 : 1 : kind === "revoke" ? targetRoles.length > 0 && !already ? 0 : -1 : already ? -1 : 0;
1739
+ countRules(role, input.holders, delta, deny);
1740
+ return freezeDeep(denials.length === 0 ? {
1741
+ ok: true,
1742
+ by
1743
+ } : {
1744
+ ok: false,
1745
+ denials
1746
+ });
1747
+ }
1748
+ /** A declared binding's rules, by the name `checkRoleChange` reads. */
1749
+ function rulesOf(binding) {
1750
+ return compact({
1751
+ key: binding.name,
1752
+ min: binding.min,
1753
+ max: binding.max,
1754
+ transferOnly: binding.transferOnly,
1755
+ assigns: binding.assigns,
1756
+ for: binding.for,
1757
+ exclusiveWith: binding.exclusiveWith
1758
+ });
1759
+ }
1760
+ /**
1670
1761
  * A live membership of the principal on the instance or on an instance under
1671
1762
  * it: the one in-band fact that ties a nested instance to a tenant.
1672
1763
  */
@@ -1745,10 +1836,10 @@ function decideRoleChangeWith(policy, principal, scopes, change, customRoles, au
1745
1836
  deny("unknown-role");
1746
1837
  return done(null);
1747
1838
  }
1748
- const scope = global ? "global" : resolveScope(scopes, change.scope);
1839
+ const scope = global ? "global" : resolveScope$1(scopes, change.scope);
1749
1840
  const customAt = named.map((role) => customRoleScope(role, scopes));
1750
1841
  const on = declared ? binding?.on ?? findRole(policy.vocabulary?.roles, name)?.on : customAt.includes(scope) ? scope : customAt[0];
1751
- const heldAt = typeof on === "string" ? resolveScope(scopes, on) : global ? "global" : void 0;
1842
+ const heldAt = typeof on === "string" ? resolveScope$1(scopes, on) : global ? "global" : void 0;
1752
1843
  if (scope === void 0 || heldAt === void 0 || heldAt !== scope) {
1753
1844
  deny("scope", { expected: heldAt ?? null });
1754
1845
  return done(null);
@@ -1758,7 +1849,7 @@ function decideRoleChangeWith(policy, principal, scopes, change, customRoles, au
1758
1849
  let custom;
1759
1850
  if (!global) {
1760
1851
  const root = scopes[0]?.name;
1761
- const supplied = change.within === void 0 ? void 0 : Object.entries(change.within).find(([key]) => resolveScope(scopes, key) === root)?.[1];
1852
+ const supplied = change.within === void 0 ? void 0 : Object.entries(change.within).find(([key]) => resolveScope$1(scopes, key) === root)?.[1];
1762
1853
  if (scope === root) tenant = id;
1763
1854
  else {
1764
1855
  const anchor = heldAnchor(principal, scopes, scope, id, now);
@@ -1787,9 +1878,8 @@ function decideRoleChangeWith(policy, principal, scopes, change, customRoles, au
1787
1878
  return done(null);
1788
1879
  }
1789
1880
  const self = target.id === principal.id;
1790
- const targetRoles = isReadonlyArray(target.roles) ? target.roles : [];
1791
- const already = targetRoles.includes(name);
1792
1881
  let by = null;
1882
+ let actorRoles;
1793
1883
  if (kind === "transfer") {
1794
1884
  if (self) deny("self-demotion");
1795
1885
  if (global ? (principal.roles ?? []).includes(name) : holdsAt(principal, name, scope, id, now)) by = name;
@@ -1799,24 +1889,26 @@ function decideRoleChangeWith(policy, principal, scopes, change, customRoles, au
1799
1889
  const allowed = authority(tenant);
1800
1890
  const revocable = kind === "revoke" && custom !== void 0 && allowed.inert?.has(name);
1801
1891
  if (!allowed.assignable.has(name) && revocable !== true) deny("not-assignable-by");
1802
- else if (custom === void 0 && usesAssigns(policy) && !allowed.manage) {
1803
- const held = global ? rankRoles(policy, (principal.roles ?? []).filter((role) => declaredRoleNames(policy).has(role))) : rolesAtInstance(policy, principal, scopes, scope, id, within, now);
1804
- by = held.find((role) => bindingOf(policy, role)?.assigns?.includes(name) === true) ?? null;
1805
- if (by === null) deny("not-assignable-by", { held });
1806
- }
1807
- }
1808
- if (kind !== "revoke" && !already) {
1809
- const kinds = custom === void 0 ? binding?.for : customForKinds(policy, custom);
1810
- if (kinds !== void 0 && (target.via === void 0 || !kinds.includes(target.via))) deny("not-allowed-for-membership", {
1811
- via: target.via ?? null,
1812
- for: kinds
1813
- });
1814
- const conflicts = custom === void 0 ? conflictsWith(policy, name) : new Set(includedRoles(custom).flatMap((include) => Array.from(conflictsWith(policy, include))));
1815
- const clash = targetRoles.filter((role) => conflicts.has(role));
1816
- if (clash.length > 0) deny("conflicting-role", { with: clash });
1892
+ else if (custom === void 0 && usesAssigns(policy) && !allowed.manage) actorRoles = global ? rankRoles(policy, (principal.roles ?? []).filter((role) => declaredRoleNames(policy).has(role))) : rolesAtInstance(policy, principal, scopes, scope, id, within, now);
1817
1893
  }
1818
- const delta = kind === "assign" ? already ? 0 : 1 : kind === "revoke" ? targetRoles.length > 0 && !already ? 0 : -1 : already ? -1 : 0;
1819
- countRules(binding, name, change.holders, delta, deny);
1894
+ const conflicts = custom === void 0 ? conflictsWith(policy, name) : new Set(includedRoles(custom).flatMap((include) => Array.from(conflictsWith(policy, include))));
1895
+ const checked = checkRoleChange(compact({
1896
+ ...binding === void 0 ? {} : rulesOf(binding),
1897
+ key: name,
1898
+ for: custom === void 0 ? binding?.for : customForKinds(policy, custom),
1899
+ exclusiveWith: [...conflicts],
1900
+ assigns: void 0
1901
+ }), compact({
1902
+ change: {
1903
+ kind,
1904
+ target
1905
+ },
1906
+ holders: change.holders,
1907
+ roles: actorRoles === void 0 ? void 0 : policy.roles.map(rulesOf),
1908
+ actorRoles
1909
+ }));
1910
+ if (checked.ok) by = actorRoles === void 0 ? by : checked.by;
1911
+ else denials.push(...checked.denials);
1820
1912
  return done(by);
1821
1913
  }
1822
1914
  //#endregion
@@ -1857,4 +1949,4 @@ function toCsvRow(event) {
1857
1949
  ].map(field).join(",");
1858
1950
  }
1859
1951
  //#endregion
1860
- export { memorySnapshotSource as A, validateApprovalPolicy as C, memoryEntitlementSource as D, memoryCustomRoleSource as E, memoryMembershipSource as O, memoryApprovalPolicySource as S, isOperationEffect as T, limits as _, readable as a, approvalPolicies as b, customRoleSource as c, defineApp as d, localSnapshotManifest as f, memoryRelationSource as g, signPolicyDocument as h, crud as i, sqlFunction as j, memorySettingsSource as k, mayAccess as l, simulateArazzo as m, toCsvRow as n, writable as o, arazzoFindings as p, decideRoleChange as r, snapshotFor as s, CSV_COLUMNS as t, shadowMode as u, memoryLimitStore as v, defineOperations as w, approvalPoliciesFor as x, stripeEntitlementSource as y };
1952
+ export { memoryCustomRoleSource as A, stripeEntitlementSource as C, validateApprovalPolicy as D, memoryApprovalPolicySource as E, sqlFunction as F, memoryMembershipSource as M, memorySettingsSource as N, defineOperations as O, memorySnapshotSource as P, memoryLimitStore as S, approvalPoliciesFor as T, arazzoFindings as _, normalizeMembership as a, memoryRelationSource as b, crud as c, snapshotFor as d, customRoleSource as f, localSnapshotManifest as g, defineApp as h, decideRoleChange as i, memoryEntitlementSource as j, isOperationEffect as k, readable as l, shadowMode as m, toCsvRow as n, normalizeMemberships as o, mayAccess as p, checkRoleChange as r, resolveScope as s, CSV_COLUMNS as t, writable as u, simulateArazzo as v, approvalPolicies as w, limits as x, signPolicyDocument as y };
@@ -1,4 +1,4 @@
1
- import { A as SsfSubject, C as SsfEventName, D as SsfReceiver, E as SsfPermDockOptions, M as SsfTransmitterConfiguration, N as SsfVerification, O as SsfStreamConfiguration, S as SsfEventListener, T as SsfPermDock, _ as SetSubject, a as PollHandle, b as SsfEventHandler, c as PushSetOptions, d as SetDelivery, f as SetDeliveryFailureCause, g as SetQueue, h as SetPollHandlerOptions, i as CaepReason, j as SsfSubjectResolver, k as SsfStreamStatus, l as ReplayStore, m as SetEvent, n as CaepEventName, o as PollOptions, p as SetError, r as CaepInitiatingEntity, s as PollResult, t as CaepCommon, u as RiscEventName, v as SignSetOptions, w as SsfOnEvent, x as SsfEventInput, y as SsfAuditEvent } from "../types-C791HFu9.js";
2
- import { t as memoryReplayStore } from "../replay-Bkm-Ne4l.js";
3
- import { _ as setPollHandler, a as CaepTokenClaimsChange, c as RiscEvents, d as caepEvents, f as pushSet, g as memorySetQueue, h as streamVerificationEvent, i as CaepEvents, l as SSF_POLL_DELIVERY, m as signSet, n as CaepCredentialChange, o as RiscAccountDisabled, p as riscEvents, r as CaepDeviceComplianceChange, s as RiscCredentialCompromise, t as CaepAssuranceLevelChange, u as SSF_PUSH_DELIVERY, v as createPermDock } from "../index-Cp_ilKi1.js";
4
- export { type CaepAssuranceLevelChange, type CaepCommon, type CaepCredentialChange, type CaepDeviceComplianceChange, type CaepEventName, type CaepEvents, type CaepInitiatingEntity, type CaepReason, type CaepTokenClaimsChange, type PollHandle, type PollOptions, type PollResult, type PushSetOptions, type ReplayStore, type RiscAccountDisabled, type RiscCredentialCompromise, type RiscEventName, type RiscEvents, SSF_POLL_DELIVERY, SSF_PUSH_DELIVERY, type SetDelivery, type SetDeliveryFailureCause, type SetError, type SetEvent, type SetPollHandlerOptions, type SetQueue, type SetSubject, type SignSetOptions, type SsfAuditEvent, type SsfEventHandler, type SsfEventInput, type SsfEventListener, type SsfEventName, type SsfOnEvent, type SsfPermDock, type SsfPermDockOptions, type SsfReceiver, type SsfStreamConfiguration, type SsfStreamStatus, type SsfSubject, type SsfSubjectResolver, type SsfTransmitterConfiguration, type SsfVerification, caepEvents, createPermDock, memoryReplayStore, memorySetQueue, pushSet, riscEvents, setPollHandler, signSet, streamVerificationEvent };
1
+ import { A as SsfSubject, C as SsfEventName, D as SsfReceiver, E as SsfPermDockOptions, M as SsfTransmitterConfiguration, N as SsfVerification, O as SsfStreamConfiguration, S as SsfEventListener, T as SsfPermDock, _ as SetSubject, a as PollHandle, b as SsfEventHandler, c as PushSetOptions, d as SetDelivery, f as SetDeliveryFailureCause, g as SetQueue, h as SetPollHandlerOptions, i as CaepReason, j as SsfSubjectResolver, k as SsfStreamStatus, l as ReplayStore, m as SetEvent, n as CaepEventName, o as PollOptions, p as SetError, r as CaepInitiatingEntity, s as PollResult, t as CaepCommon, u as RiscEventName, v as SignSetOptions, w as SsfOnEvent, x as SsfEventInput, y as SsfAuditEvent } from "../types-cTos-H7p.js";
2
+ import { t as memoryReplayStore } from "../replay-DCDD_ZfL.js";
3
+ import { A as createPermDock, C as memorySsfStreamStore, D as PollSetsResult, E as PollSetsOptions, O as PolledSet, S as SsfStreamStore, T as setPollHandler, _ as SsfFanOut, a as CaepTokenClaimsChange, b as ssfTransmitter, c as RiscEvents, d as caepEvents, f as pushSet, g as FanOutSetOptions, h as streamVerificationEvent, i as CaepEvents, k as pollSets, l as SSF_POLL_DELIVERY, m as signSet, n as CaepCredentialChange, o as RiscAccountDisabled, p as riscEvents, r as CaepDeviceComplianceChange, s as RiscCredentialCompromise, t as CaepAssuranceLevelChange, u as SSF_PUSH_DELIVERY, v as SsfTransmitterOptions, w as memorySetQueue, x as SsfStream, y as fanOutSet } from "../index-CMiPH2Tv.js";
4
+ export { type CaepAssuranceLevelChange, type CaepCommon, type CaepCredentialChange, type CaepDeviceComplianceChange, type CaepEventName, type CaepEvents, type CaepInitiatingEntity, type CaepReason, type CaepTokenClaimsChange, type FanOutSetOptions, type PollHandle, type PollOptions, type PollResult, type PollSetsOptions, type PollSetsResult, type PolledSet, type PushSetOptions, type ReplayStore, type RiscAccountDisabled, type RiscCredentialCompromise, type RiscEventName, type RiscEvents, SSF_POLL_DELIVERY, SSF_PUSH_DELIVERY, type SetDelivery, type SetDeliveryFailureCause, type SetError, type SetEvent, type SetPollHandlerOptions, type SetQueue, type SetSubject, type SignSetOptions, type SsfAuditEvent, type SsfEventHandler, type SsfEventInput, type SsfEventListener, type SsfEventName, type SsfFanOut, type SsfOnEvent, type SsfPermDock, type SsfPermDockOptions, type SsfReceiver, type SsfStream, type SsfStreamConfiguration, type SsfStreamStatus, type SsfStreamStore, type SsfSubject, type SsfSubjectResolver, type SsfTransmitterConfiguration, type SsfTransmitterOptions, type SsfVerification, caepEvents, createPermDock, fanOutSet, memoryReplayStore, memorySetQueue, memorySsfStreamStore, pollSets, pushSet, riscEvents, setPollHandler, signSet, ssfTransmitter, streamVerificationEvent };