permdock 0.6.0 → 0.8.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 (507) hide show
  1. package/README.md +2 -3
  2. package/dist/{2020-C9VN-x8c.js → 2020-CJbO8Bvz.js} +1 -3
  3. package/dist/a2a/index.d.ts +7 -7
  4. package/dist/a2a/index.js +9 -9
  5. package/dist/action-result-CL-QCITA.d.ts +19 -0
  6. package/dist/{adapter-context-CRhqyzCk.js → adapter-context-CIQpQxbE.js} +8 -2
  7. package/dist/{adoption-scan-DCYe60Pi.js → adoption-scan-BLs67P1l.js} +5 -5
  8. package/dist/agent/index.d.ts +3 -3
  9. package/dist/agent/index.js +1 -1
  10. package/dist/ai-sdk/index.d.ts +31 -10
  11. package/dist/ai-sdk/index.js +22 -12
  12. package/dist/{app-data-MuyzVqX8.js → app-data-UNNm07jV.js} +10 -7
  13. package/dist/{approval-header-CJACtHkv.js → approval-header-8QV6MU4H.js} +6 -3
  14. package/dist/{approval-prompt-Dg5LeAcT.js → approval-prompt-B8hQY69x.js} +5 -6
  15. package/dist/{approval-prompt-DvSSPQJX.d.ts → approval-prompt-PYagyQUj.d.ts} +13 -11
  16. package/dist/approvals/index.d.ts +5 -5
  17. package/dist/approvals/index.js +7 -7
  18. package/dist/{approvals-p1PGoVjb.js → approvals-DnIBTuXE.js} +128 -78
  19. package/dist/{approvers-CqPOLD-o.js → approvers-B4r0N_Uz.js} +8 -2
  20. package/dist/{arazzo-41WuzHou.js → arazzo-3RhGfkAK.js} +2 -2
  21. package/dist/{arazzo-CaUVBn7D.js → arazzo-B5-ulWif.js} +6 -6
  22. package/dist/{args-IIolxxKA.js → args-0FrVs5EH.js} +125 -8
  23. package/dist/astro/index.d.ts +30 -12
  24. package/dist/astro/index.js +2 -2
  25. package/dist/{audience-DabClFLQ.js → audience-BAkBDMqn.js} +8 -8
  26. package/dist/{auth-DRLEizbL.js → auth--yPyZNgr.js} +21 -10
  27. package/dist/authzen/index.d.ts +171 -25
  28. package/dist/authzen/index.js +321 -149
  29. package/dist/{automation-BNM3TtDo.d.ts → automation-DqEoWHBc.d.ts} +42 -32
  30. package/dist/{automation-DVjOckjV.js → automation-x3KEUusw.js} +22 -21
  31. package/dist/base-url-BQbddZO5.js +9 -0
  32. package/dist/better-auth/index.d.ts +2 -2
  33. package/dist/better-auth/index.js +13 -7
  34. package/dist/better-supabase/index.d.ts +392 -220
  35. package/dist/better-supabase/index.js +293 -152
  36. package/dist/{bind-DOyrv6zi.d.ts → bind-Cp2hBHzP.d.ts} +27 -12
  37. package/dist/{bind-CAvgUuKs.js → bind-D_sZSVA3.js} +22 -10
  38. package/dist/{body-CH5of8Ne.js → body-CJQwYVa8.js} +3 -3
  39. package/dist/{body-text-QcXok_SI.js → body-text-DQhcmqdY.js} +8 -4
  40. package/dist/{boundary-BM8a_P6E.js → boundary-BV3O1eud.js} +8 -2
  41. package/dist/{boundary-BmHxVH1J.d.ts → boundary-C9ck-3uK.d.ts} +13 -4
  42. package/dist/{budget-NbEtbJC_.js → budget-BELja5A9.js} +6 -3
  43. package/dist/{budget-JqcRqyhK.d.ts → budget-hYsPz_yE.d.ts} +6 -3
  44. package/dist/{build-instance-Bu_eDqYw.js → build-instance-CNWaYJyr.js} +3 -3
  45. package/dist/{canonical-json-BC8_nMTw.js → canonical-json-DwilZ1iB.js} +6 -3
  46. package/dist/{capability-N1K9IpqS.js → capability-BqX94r07.js} +31 -25
  47. package/dist/{capability-Drg-1YhL.d.ts → capability-ChuiONQU.d.ts} +41 -29
  48. package/dist/{casbin-Dyu2gnUD.js → casbin-H0rKxBx2.js} +16 -8
  49. package/dist/{casbin-Cr7RLtA3.js → casbin-cbSbhT_k.js} +2 -2
  50. package/dist/{casl-64gpT-8x.js → casl-C4OINZHI.js} +2 -2
  51. package/dist/{casl-DjEDhTCP.js → casl-CHHoCldP.js} +19 -10
  52. package/dist/catalog/index.d.ts +104 -23
  53. package/dist/catalog/index.js +117 -8
  54. package/dist/{catalog-HD2gf5mY.js → catalog-BFpz2EmT.js} +57 -26
  55. package/dist/{catalog-DZVbrF-z.js → catalog-DCspHDc8.js} +3 -3
  56. package/dist/{catalog-doc-Cdn7-0pQ.js → catalog-doc-DjMKzJp9.js} +53 -16
  57. package/dist/{catalog-fingerprint-CCP0-yQS.js → catalog-fingerprint-e6aCWosn.js} +19 -15
  58. package/dist/catalog-mRQQQhNK.js +1 -0
  59. package/dist/catalog-operations-Dadrl7Z-.js +60 -0
  60. package/dist/{create-CQWIpUG-.js → challenge-DImNcR7B.js} +157 -39
  61. package/dist/chat/index.d.ts +1 -1
  62. package/dist/chat/index.js +13 -10
  63. package/dist/chat-sdk/index.d.ts +44 -26
  64. package/dist/chat-sdk/index.js +17 -17
  65. package/dist/checks-CGkP3Z7A.js +40 -0
  66. package/dist/{claims-map-7oQ3ue4X.js → claims-map-CKkoAAYF.js} +5 -2
  67. package/dist/{claims-map-Ca-QX8C6.d.ts → claims-map-D1Pb5oRq.d.ts} +8 -5
  68. package/dist/claude-agent/index.d.ts +6 -6
  69. package/dist/claude-agent/index.js +6 -3
  70. package/dist/clerk/index.d.ts +11 -7
  71. package/dist/clerk/index.js +6 -6
  72. package/dist/cli/bin.js +4 -4
  73. package/dist/cli/index.d.ts +82 -7
  74. package/dist/cli/index.js +6 -6
  75. package/dist/{clients-C7zLFuWT.d.ts → clients-C_NOET3z.d.ts} +5 -5
  76. package/dist/{clients-DjU5ABMy.js → clients-DYr3U86j.js} +3 -3
  77. package/dist/cloud/index.d.ts +186 -38
  78. package/dist/cloud/index.js +293 -31
  79. package/dist/{cloud-ytQ3uviA.js → cloud-BFlGMaak.js} +5 -6
  80. package/dist/{codemod-5mpSpnUY.js → codemod-DLQ9Zpo4.js} +3 -4
  81. package/dist/{codemod-ua2hHy7w.js → codemod-DWSN2erG.js} +523 -201
  82. package/dist/collect-B5BL3klN.js +1 -0
  83. package/dist/{collect-mLTY4nwb.js → collect-B7ZFAJU3.js} +36 -64
  84. package/dist/{collect-Ci6akVwH.js → collect-Bzv3le0A.js} +6 -6
  85. package/dist/{compare-pfyVnBjE.js → compare-DTfyUunF.js} +2 -2
  86. package/dist/compile/index.d.ts +2 -2
  87. package/dist/compile/index.js +1 -1
  88. package/dist/{compile-1bsAezL0.d.ts → compile-BFzysW3o.d.ts} +36 -12
  89. package/dist/{compile-CMqMx_IN.js → compile-EzEMB-7v.js} +77 -33
  90. package/dist/{completion-BTFrHZhX.js → completion-saoYiRFO.js} +17 -8
  91. package/dist/config-BwPBfN0t.js +108 -0
  92. package/dist/{config-Bj2Ixq3d.js → config-DBeXXmBF.js} +2 -2
  93. package/dist/{config-report-DSpsLpCE.js → config-report-BipSWA6V.js} +9 -6
  94. package/dist/config-shape-ykV0Vm2n.js +134 -0
  95. package/dist/{connection-DjhIJSs2.js → connection-B72dg5Q2.js} +23 -22
  96. package/dist/connector-schema-CYLQNMYq.js +434 -0
  97. package/dist/{context-B_u3_bDJ.js → context-BnIzxTNE.js} +4 -3
  98. package/dist/convex/index.d.ts +13 -7
  99. package/dist/convex/index.js +9 -6
  100. package/dist/core-H-mbhpZc.js +341 -0
  101. package/dist/core-hWIARPDz.d.ts +206 -0
  102. package/dist/{create-CBMmFie-.d.ts → create-BSNrVuxh.d.ts} +87 -34
  103. package/dist/{create-B30OMUOJ.d.ts → create-BVq1lNQE.d.ts} +49 -28
  104. package/dist/{create-D_NmPOdH.d.ts → create-CM1FciYG.d.ts} +37 -29
  105. package/dist/{create-CGm28gyI.js → create-Cq4Uox0f.js} +13 -9
  106. package/dist/{create-DCF2SvoT.js → create-_noSrY1T.js} +15 -21
  107. package/dist/{credential-BcoiejpY.js → credential-CyyyvCsL.js} +42 -39
  108. package/dist/{credentials-DPyHmYz5.js → credentials-CdDxp7jN.js} +6 -6
  109. package/dist/{deciding-columns-Sq12mEA6.js → deciding-columns-NB4wcyBf.js} +13 -2
  110. package/dist/{delegation-j6-rc37o.js → delegation-CDB6_keF.js} +31 -22
  111. package/dist/delivery/index.d.ts +5 -5
  112. package/dist/delivery/index.js +6 -5
  113. package/dist/{delivery-DCAgNyCn.js → delivery-BupfvJIV.js} +81 -20
  114. package/dist/{delivery-event-xX4obB8F.js → delivery-event-JioK5YbS.js} +6 -6
  115. package/dist/denied-text-CHNlVInN.d.ts +22 -0
  116. package/dist/{describe-BybMRY7A.js → describe-Bb4hGK5d.js} +6 -5
  117. package/dist/{describe-B5qgDvEW.d.ts → describe-ByS9LgHK.d.ts} +5 -5
  118. package/dist/{device-BARQ8eYG.js → device-BwbJNmb2.js} +11 -8
  119. package/dist/{diff-CmuSD3vc.js → diff-CN8IYhC_.js} +2 -2
  120. package/dist/{diff-3jbx6Rm4.js → diff-iZWV65nC.js} +23 -14
  121. package/dist/{digest-B3kc_PgQ.d.ts → digest-8Yx2CchM.d.ts} +3 -3
  122. package/dist/{doctor-BdZw53-k.js → doctor-CHD1M9R5.js} +485 -141
  123. package/dist/{doctor-3ZqNHX_G.js → doctor-D3wo-yuz.js} +4 -4
  124. package/dist/drizzle/index.d.ts +33 -19
  125. package/dist/drizzle/index.js +17 -9
  126. package/dist/elysia/index.d.ts +17 -11
  127. package/dist/elysia/index.js +5 -5
  128. package/dist/{errors-BKy0EfhN.js → errors-B6R_lg2a.js} +13 -4
  129. package/dist/{errors-BWXBMaKK.d.ts → errors-CHwoRRpB.d.ts} +4 -1
  130. package/dist/{errors-CWTY6uih.js → errors-Vpu6rKHl.js} +14 -10
  131. package/dist/{errors-DH5QEGXh.d.ts → errors-zi_4T-rx.d.ts} +22 -6
  132. package/dist/{evaluate-CNClBvcj.js → evaluate-Dd8Ta0Ie.js} +185 -80
  133. package/dist/{evaluations-beAooV0n.js → evaluations-IBceAeKT.js} +41 -20
  134. package/dist/{evaluations-C_1vdSZc.d.ts → evaluations-z8dQFDaN.d.ts} +12 -6
  135. package/dist/eve/index.d.ts +9 -6
  136. package/dist/eve/index.js +4 -4
  137. package/dist/{event-time-CsegxXxB.js → event-time-BGy48400.js} +8 -4
  138. package/dist/{expiry-D4_YKRKD.js → expiry-6XByK0dm.js} +8 -5
  139. package/dist/express/index.d.ts +9 -6
  140. package/dist/express/index.js +9 -6
  141. package/dist/fastify/index.d.ts +16 -10
  142. package/dist/fastify/index.js +8 -5
  143. package/dist/{fetch-adapter-Dw0MTS3D.d.ts → fetch-adapter-C1DCvpqV.d.ts} +9 -6
  144. package/dist/{fetch-adapter-DD_gfmrC.js → fetch-adapter-JL43jD3E.js} +14 -11
  145. package/dist/fields-D0vUI6dq.js +498 -0
  146. package/dist/{files-C5ZI27eV.js → files-B3AA05f1.js} +21 -5
  147. package/dist/{files-D_JIzUrP.js → files-BSjrtIHw.js} +11 -4
  148. package/dist/{fixtures-B7XrLeY7.js → fixtures-A1_sp_tR.js} +15 -6
  149. package/dist/{flags-C3DktBDY.js → flags-DXjoTVbS.js} +2 -2
  150. package/dist/{freeze-CrU8nQeX.js → freeze-jjan0lCv.js} +4 -1
  151. package/dist/{from-snapshot-CTCMsFZk.js → from-snapshot-DCakWRsr.js} +26 -16
  152. package/dist/gen-B5kvbAoZ.js +58 -0
  153. package/dist/gen-DWCYcMQM.js +827 -0
  154. package/dist/generate-CRVV5V7l.js +165 -0
  155. package/dist/generate-CezbCaTI.js +275 -0
  156. package/dist/{grantee-hxrUsbpM.js → grantee-Dke-9rd1.js} +4 -4
  157. package/dist/{grantee-conditions-CcXf8hMM.js → grantee-conditions-BrYPe-w0.js} +12 -12
  158. package/dist/{grantee-match-DbENBHLB.js → grantee-match-7RZZvoT_.js} +12 -6
  159. package/dist/{graph-sql-B-dsAT6j.d.ts → graph-sql-BwFC4Qjs.d.ts} +3 -3
  160. package/dist/h3/index.d.ts +10 -7
  161. package/dist/h3/index.js +3 -3
  162. package/dist/headers-B9jQxjtW.d.ts +10 -0
  163. package/dist/{helpers-CBYVMjwh.js → helpers-DJicaG6f.js} +40 -28
  164. package/dist/hono/index.d.ts +16 -10
  165. package/dist/hono/index.js +5 -5
  166. package/dist/{hosted-BPk51-kX.d.ts → hosted-Cmtxogd0.d.ts} +44 -20
  167. package/dist/{hosted-B46-5LYE.js → hosted-D0IzESu_.js} +68 -25
  168. package/dist/{http-ujKm0JXE.js → http-DH94eh6f.js} +4 -4
  169. package/dist/{http-BBoKefeS.js → http-DKLXrFGk.js} +13 -7
  170. package/dist/{http-DXJ37RDA.js → http-DOL33cO0.js} +11 -8
  171. package/dist/{import-wyqXUyjm.js → import-CST57XLp.js} +64 -51
  172. package/dist/{import-CNV7I2Dw.js → import-_YqhhwvX.js} +6 -6
  173. package/dist/{index-B8YjkEZ4.d.ts → index-B8s204GL.d.ts} +64 -52
  174. package/dist/{index-Ch8LpNDp.d.ts → index-BT5-1VsX.d.ts} +64 -25
  175. package/dist/{index-DuWxc5dt.d.ts → index-BW_0MZOS.d.ts} +388 -149
  176. package/dist/index-BhxEUY9J.d.ts +233 -0
  177. package/dist/index-Bv5iXPqU.d.ts +210 -0
  178. package/dist/{index-C-6Letxg.d.ts → index-_9UiQIkt.d.ts} +164 -77
  179. package/dist/index.d.ts +22 -21
  180. package/dist/index.js +35 -33
  181. package/dist/{init-GG6Jh8HD.js → init-Dz_PsHdv.js} +5 -5
  182. package/dist/{init-DeMYsnYJ.js → init-cE3A8aXq.js} +10 -10
  183. package/dist/{instance-options-BsVpyGIk.d.ts → instance-options-B0KXqTrJ.d.ts} +4 -4
  184. package/dist/{instance-snapshot-BOEhcqIF.js → instance-snapshot--JWiTrvO.js} +81 -56
  185. package/dist/{instant-BluqDvyS.js → instant-DK3Iz83e.js} +2 -2
  186. package/dist/{internals-Dk8A8fX3.js → internals-B3IgHrvo.js} +6 -3
  187. package/dist/{json-schema-B-vAwlde.js → json-schema-BPGa-RjQ.js} +9 -3
  188. package/dist/{json-schema-CN_iLFH2.d.ts → json-schema-BfXgnRNT.d.ts} +4 -4
  189. package/dist/jwt/index.d.ts +125 -17
  190. package/dist/jwt/index.js +157 -16
  191. package/dist/{kernel-D0NVb1cK.js → kernel-C-fYydV2.js} +151 -16
  192. package/dist/kysely/index.d.ts +49 -33
  193. package/dist/kysely/index.js +9 -7
  194. package/dist/{live-options-BaAFCIiu.js → live-options-BBIT68le.js} +2 -2
  195. package/dist/{load-DFS_ry0W.js → load-DjSU5KXO.js} +6 -6
  196. package/dist/load-Dm0pSYH3.js +1 -0
  197. package/dist/{login-Dfe5RlYk.js → login-D-8tMqzo.js} +4 -4
  198. package/dist/{login-imhuwvn3.js → login-DplQ0s84.js} +18 -15
  199. package/dist/{manifest-dvL2XEe1.js → manifest-Cgiq5oqc.js} +67 -37
  200. package/dist/{manifest-mx5ghSFM.d.ts → manifest-CzzWtnAb.d.ts} +144 -28
  201. package/dist/{manifest-schema-C0kK_8V0.js → manifest-schema-2r37XRhD.js} +80 -9
  202. package/dist/{manifest-C8IzW3Do.js → manifest-wg8WkkpD.js} +11 -7
  203. package/dist/{map-claims-D3oRmTk0.js → map-claims-BNWCJtmP.js} +27 -18
  204. package/dist/{map-error-Dr70oA_3.js → map-error-pasIGqMT.js} +7 -7
  205. package/dist/{markers-C6joDI3o.js → markers-BeHZ4x9Q.js} +20 -5
  206. package/dist/mcp/index.d.ts +154 -47
  207. package/dist/mcp/index.js +200 -41
  208. package/dist/{migrate-CIq4-E9F.js → migrate-B7oP_sQU.js} +102 -31
  209. package/dist/module-values-BJTBdo6y.js +107 -0
  210. package/dist/nest/index.d.ts +23 -13
  211. package/dist/nest/index.js +18 -11
  212. package/dist/next/client.d.ts +5 -2
  213. package/dist/next/client.js +1 -1
  214. package/dist/next/index.d.ts +72 -26
  215. package/dist/next/index.js +110 -6
  216. package/dist/next/plugin.d.ts +1 -1
  217. package/dist/next/plugin.js +4 -3
  218. package/dist/node/index.d.ts +5 -5
  219. package/dist/node/index.js +3 -3
  220. package/dist/{ocsf-BFp-PZZA.js → ocsf-TcjRBgIs.js} +15 -5
  221. package/dist/openai/index.d.ts +13 -7
  222. package/dist/openai/index.js +3 -3
  223. package/dist/openapi/index.d.ts +61 -30
  224. package/dist/openapi/index.js +2 -2
  225. package/dist/{openapi-B7HZ0f-r.js → openapi-BOsx0xn9.js} +34 -24
  226. package/dist/{openapi-C4dDTVEd.js → openapi-CBZUhA3l.js} +4 -5
  227. package/dist/{openapi-DD1SV-5-.js → openapi-VeHHU2l9.js} +23 -14
  228. package/dist/{operation-findings-DgATDpvh.js → operation-findings-CXtFzlKJ.js} +3 -3
  229. package/dist/{operations-X0VM7F3m.d.ts → operations-Ci_rT6Uo.d.ts} +10 -7
  230. package/dist/orpc/index.d.ts +68 -14
  231. package/dist/orpc/index.js +62 -13
  232. package/dist/otel/index.d.ts +7 -4
  233. package/dist/otel/index.js +8 -5
  234. package/dist/output-files-BHOIlrfD.js +1 -0
  235. package/dist/{output-files-DhRBBE4n.js → output-files-BIQ_9pIs.js} +29 -17
  236. package/dist/{output-1im__-08.js → output-tkju6U7R.js} +15 -7
  237. package/dist/ownership-B4L59T9u.js +1054 -0
  238. package/dist/parse-1_ZheTW5.js +151 -0
  239. package/dist/parse-local-manifest-BQhTlLQS.d.ts +10 -0
  240. package/dist/parse-local-manifest-DEiCF4ah.js +69 -0
  241. package/dist/{parse-request-D_tUXG6M.js → parse-request-CwCZpyjV.js} +7 -8
  242. package/dist/{paths-DXSHAMIa.js → paths-CUvURzHp.js} +4 -1
  243. package/dist/pdp/index.d.ts +9 -6
  244. package/dist/pdp/index.js +23 -12
  245. package/dist/{peer-CRvC7Hg1.js → peer-C9LvBCcb.js} +1 -1
  246. package/dist/peer-Q0fuZ6hx.js +982 -0
  247. package/dist/{permdock-SV8ZINYT.d.ts → permdock-B6Sf4T_S.d.ts} +270 -117
  248. package/dist/{permdock-BrAscV28.js → permdock-L-_I_3zP.js} +226 -74
  249. package/dist/{permission-registry-Br4jSNVi.js → permission-registry-B8tYxPIt.js} +24 -11
  250. package/dist/{vocabulary-CN8H_9UF.d.ts → permission-types-CAY-GU7e.d.ts} +130 -104
  251. package/dist/{permissions-u_KHg-sN.d.ts → permissions-Bx6UI8n1.d.ts} +6 -2
  252. package/dist/{permissions-B-wCP5ZC.js → permissions-CVXmRILq.js} +3 -3
  253. package/dist/{permissions-BPxlwVhN.js → permissions-mDcTWoBs.js} +8 -5
  254. package/dist/pg-DQTqRrou.js +60 -0
  255. package/dist/{pins-8ILTftC9.js → pins-nqarl3oE.js} +4 -1
  256. package/dist/pkce-CnmmYqUZ.js +21 -0
  257. package/dist/{policy-77FSAq_V.d.ts → policy-Ba4bDhaj.d.ts} +5 -5
  258. package/dist/{policy-DbM5YYtV.js → policy-CLQ8__GF.js} +49 -20
  259. package/dist/{policy-from-catalog-C2gMa2Dj.js → policy-from-catalog-CJgOm6aq.js} +28 -25
  260. package/dist/{policy-module-CTlwMvLI.js → policy-module-xym9fnSq.js} +12 -6
  261. package/dist/{policy-types-n0uRTsW8.d.ts → policy-types-CCiDRZBH.d.ts} +802 -334
  262. package/dist/postgres-store-DcyrPS-r.js +1028 -0
  263. package/dist/{postgrest-DAjUkF9w.js → postgrest-D4nuPXIQ.js} +88 -36
  264. package/dist/{postgrest-CEgRbefE.d.ts → postgrest-DicQyqm-.d.ts} +60 -30
  265. package/dist/powersync-DHNQX06W.js +1117 -0
  266. package/dist/{powersync-DISt6SUe.js → powersync-DXqGuq9A.js} +3 -3
  267. package/dist/powersync-Djf-zCpB.js +1 -0
  268. package/dist/preset/index.d.ts +38 -28
  269. package/dist/preset/index.js +1 -1
  270. package/dist/{preset-DZdU0tne.js → preset-BjLzeFpp.js} +58 -34
  271. package/dist/{principal-source-pHneukrx.js → principal-source-C6N60GtM.js} +10 -10
  272. package/dist/prisma/index.d.ts +69 -41
  273. package/dist/prisma/index.js +21 -17
  274. package/dist/{problem-CTviyH5L.js → problem-BVLHFK33.js} +41 -21
  275. package/dist/{problem-details-cn5X30gZ.js → problem-details-CLDgX1KV.js} +13 -4
  276. package/dist/{problem-types-CJ2325SZ.js → problem-types-DSsRfONQ.js} +4 -1
  277. package/dist/prompt-BYc6drYW.js +938 -0
  278. package/dist/protected-action-BE7N_Luo.d.ts +58 -0
  279. package/dist/protected-action-DUYqb-Ma.js +80 -0
  280. package/dist/{protected-BlF0F6wL.js → protected-action-QEA8arRB.js} +48 -14
  281. package/dist/{provider-B1al-AZz.js → provider-C55OGXJ7.js} +5 -4
  282. package/dist/{provider-DILL9oPK.d.ts → provider-DXfq5c2d.d.ts} +1 -1
  283. package/dist/{provider-store-DM6DNcta.js → provider-store-CaTv00tr.js} +13 -9
  284. package/dist/pull-B65ndFNZ.js +1 -0
  285. package/dist/{pull-jEwbf80J.js → pull-CwpGaQSi.js} +12 -11
  286. package/dist/{push-BD4f15co.js → push-DgssgzkK.js} +62 -16
  287. package/dist/{pushed-policy-DCW91KQU.d.ts → pushed-policy-D1Eoi6NM.d.ts} +12 -6
  288. package/dist/{pushed-policy-CqtxkV4G.js → pushed-policy-ITwYKvvH.js} +10 -7
  289. package/dist/react/index.d.ts +9 -8
  290. package/dist/react/index.js +7 -6
  291. package/dist/react/provider-client.d.ts +1 -1
  292. package/dist/react/provider-client.js +1 -1
  293. package/dist/react-native/index.d.ts +104 -51
  294. package/dist/react-native/index.js +394 -67
  295. package/dist/{refs-K6eWUJ0H.js → refs-C8BKxc_e.js} +17 -3
  296. package/dist/{relation-walk-3OyDBF0S.js → relation-walk-DK_gkgL7.js} +12 -9
  297. package/dist/{relations-BnCWnJGI.js → relations-BxvRvDHK.js} +3 -3
  298. package/dist/{replay-Du1tJjG7.js → replay-BU09ad4L.js} +1 -1
  299. package/dist/{replay-Bkm-Ne4l.d.ts → replay-DNftIb_R.d.ts} +1 -1
  300. package/dist/{request-context-C81Pip9n.js → request-context-C25ilqiJ.js} +8 -8
  301. package/dist/{request-schema-CMreVuFM.js → request-schema-DhX7UbfQ.js} +4 -1
  302. package/dist/resend/index.d.ts +34 -28
  303. package/dist/resend/index.js +29 -29
  304. package/dist/resolve-names-CF7xXLSG.js +201 -0
  305. package/dist/{resource-relations-D_jw0BFx.js → resource-relations-8-pCScBO.js} +18 -9
  306. package/dist/{retire-CALjIQ7e.js → retire-B2xffQgY.js} +15 -6
  307. package/dist/{revocations-R07lFBnX.d.ts → revocations-BaUXHM1N.d.ts} +6 -3
  308. package/dist/{rls-DTvYd-lI.js → rls-CNEH2_BG.js} +743 -624
  309. package/dist/{rls-BAqP4q66.js → rls-Ca8Jz9b5.js} +41 -10
  310. package/dist/{role-builder-uWQZ4v84.js → role-builder-BK2-T6oD.js} +41 -20
  311. package/dist/rolldown-runtime-C3I60J0A.js +4 -0
  312. package/dist/{row-conditions-h2HythXQ.js → row-conditions-BAGHOmVq.js} +4 -3
  313. package/dist/{rpc-VSl5ylaQ.js → rpc-fNqAIqQk.js} +8 -5
  314. package/dist/{run-CUKuz0A8.js → run-Bz26OTfO.js} +26 -23
  315. package/dist/run-D-JE8QWb.js +1 -0
  316. package/dist/{run-ticket-DocwaTKn.d.ts → run-ticket-DbWI9f99.d.ts} +33 -13
  317. package/dist/{run-ticket-sxFI6LAk.js → run-ticket-Dv7aF7Dk.js} +29 -8
  318. package/dist/{runtime-D3VTAiCA.js → runtime-BGnrOkVH.js} +5 -2
  319. package/dist/{saas-BCXRuXca.js → saas-iWnUdwCt.js} +42 -29
  320. package/dist/{scan-qvOe0hS3.js → scan-DCj1KQfn.js} +1 -1
  321. package/dist/{schema-B4v0Qrac.js → schema-BOJjqlWL.js} +3 -2
  322. package/dist/{schema-yLuBWWsh.js → schema-Dst9I9Gs.js} +9 -5
  323. package/dist/scim/index.d.ts +3 -2
  324. package/dist/scim/index.js +3 -1
  325. package/dist/scim-D8YupzX1.js +44 -0
  326. package/dist/{scim-ClHtpyV3.js → scim-jJBJ7g1Z.js} +35 -551
  327. package/dist/{scopes-CUPSjo9q.js → scopes-0Up_UA2t.js} +42 -24
  328. package/dist/server/index.d.ts +12 -12
  329. package/dist/server/index.js +13 -13
  330. package/dist/{server-C3WXAHZj.js → server-3cVlTLde.js} +31 -31
  331. package/dist/{server-types-CKQiCnON.d.ts → server-types-CIlpSA2G.d.ts} +81 -46
  332. package/dist/{sha256-D9ihqmvd.js → sha256-C-4WXKIu.js} +4 -3
  333. package/dist/{shared-BAK8t4Uo.js → shared-Afctg7B0.js} +100 -61
  334. package/dist/{shared-DvvFzYXe.js → shared-l0oGGetg.js} +9 -6
  335. package/dist/{signals-D3NcTKUS.js → signals-B1vHR3fN.js} +2 -2
  336. package/dist/{sink-BEZSlMS_.js → sink-D9_vh372.js} +32 -21
  337. package/dist/{sink-4-eQIRWf.d.ts → sink-Dvi7YZG_.d.ts} +44 -20
  338. package/dist/{skills-B6lVdD_W.js → skills-Bjj7BNEQ.js} +16 -12
  339. package/dist/{skills-CTYwkl44.js → skills-OuoMR49L.js} +3 -3
  340. package/dist/{snapshot-B7DkYg6g.js → snapshot-CXlzi69u.js} +21 -18
  341. package/dist/{snapshot-cache-PXI-vGpY.d.ts → snapshot-cache-BAXZ0KOp.d.ts} +21 -12
  342. package/dist/{snapshot-cache-DZHQ0KF6.js → snapshot-cache-Bx_4xC_6.js} +14 -11
  343. package/dist/solid/index.d.ts +55 -15
  344. package/dist/solid/index.js +46 -12
  345. package/dist/solid-start/index.d.ts +30 -12
  346. package/dist/solid-start/index.js +3 -3
  347. package/dist/sources-B1Os_YUu.d.ts +312 -0
  348. package/dist/{sources-vs5dGOsS.js → sources-CMAM-2A3.js} +156 -51
  349. package/dist/sources-qoIJQrJv.js +11 -0
  350. package/dist/{sql-B5T1IL83.js → sql-0WjxIp9g.js} +32 -7
  351. package/dist/sql-B80DFdpG.d.ts +10 -0
  352. package/dist/{src-Cu2m75uo.js → src-DZ0l9UAg.js} +305 -123
  353. package/dist/ssf/index.d.ts +4 -4
  354. package/dist/ssf/index.js +665 -224
  355. package/dist/{standard-webhooks-rbD7LS6h.d.ts → standard-webhooks-C-qX4mJW.d.ts} +7 -7
  356. package/dist/{standard-webhooks-DgFFD-Ga.js → standard-webhooks-D67a3nzk.js} +5 -5
  357. package/dist/{store-BDutJkDL.js → store-RNFvaJJv.js} +43 -29
  358. package/dist/{store-options-u0ycEe8s.js → store-options-Dil3lraY.js} +105 -15
  359. package/dist/stores-C0Kta5Ft.d.ts +59 -0
  360. package/dist/{stores-CGhM8BN_.js → stores-DxZWDXCs.js} +42 -5
  361. package/dist/{stream-CvdUS9V1.js → stream-CDvF0sJm.js} +5 -5
  362. package/dist/{stream-CeCMJmBB.d.ts → stream-ltuLdtTG.d.ts} +4 -3
  363. package/dist/{style-DiKWnAvn.js → style-DblOtSga.js} +1 -1
  364. package/dist/{style-Uao76wO7.js → style-Ds11Hmk4.js} +3 -1
  365. package/dist/{subject-settings-CkEwrw3W.js → subject-settings-8sH5HlII.js} +8 -4
  366. package/dist/{row-check-Dt35czLy.d.ts → subject-settings-vNW8qmUH.d.ts} +30 -18
  367. package/dist/supabase/index.d.ts +48 -37
  368. package/dist/supabase/index.js +6 -6
  369. package/dist/supabase/middleware.d.ts +19 -13
  370. package/dist/supabase/middleware.js +7 -7
  371. package/dist/{supabase-x5JtR2tc.js → supabase-BL1qJzzY.js} +82 -36
  372. package/dist/{supabase-By_frk3U.js → supabase-D39cuGPt.js} +3 -3
  373. package/dist/{supabase-hook-BMoEhZir.js → supabase-hook-B-yXnzUl.js} +1206 -286
  374. package/dist/supabase-hook-H-MtE9Wd.js +1 -0
  375. package/dist/supautils-BU-pAEpf.js +808 -0
  376. package/dist/{support-session-C6xJQYut.js → support-session-BsmPCbz8.js} +22 -22
  377. package/dist/svelte/PermissionBoundary.svelte +2 -6
  378. package/dist/svelte/Protected.svelte +2 -8
  379. package/dist/svelte/index.d.ts +9 -8
  380. package/dist/svelte/index.js +10 -9
  381. package/dist/svelte/runtime.d.ts +4 -4
  382. package/dist/svelte/runtime.js +4 -4
  383. package/dist/svelte/source.d.ts +9 -8
  384. package/dist/svelte/source.js +6 -5
  385. package/dist/sveltekit/index.d.ts +30 -12
  386. package/dist/sveltekit/index.js +2 -2
  387. package/dist/{ownership-DqaJNJPn.js → tables-DeMNEy6V.js} +1025 -1085
  388. package/dist/tanstack-start/index.d.ts +22 -10
  389. package/dist/tanstack-start/index.js +2 -2
  390. package/dist/{target-Bw37TFNA.js → target-qdEAnnhU.js} +6 -6
  391. package/dist/{tenancy-DN2QAx9z.js → tenancy-5d1zVBvK.js} +36 -21
  392. package/dist/terminal/index.d.ts +23 -14
  393. package/dist/terminal/index.js +17 -20
  394. package/dist/testing/core.d.ts +2 -0
  395. package/dist/testing/core.js +1 -0
  396. package/dist/testing/fixtures/index.d.ts +15 -0
  397. package/dist/testing/fixtures/index.js +831 -0
  398. package/dist/testing/index.d.ts +235 -285
  399. package/dist/testing/index.js +502 -927
  400. package/dist/testing/saas/index.d.ts +43 -27
  401. package/dist/testing/saas/index.js +2 -2
  402. package/dist/testing/saas/permissions.d.ts +1 -1
  403. package/dist/testing/saas/permissions.js +1 -1
  404. package/dist/text-diff-BtfSmdUo.js +444 -0
  405. package/dist/{thenable-yD7SabqG.js → thenable-BNSM1U2R.js} +12 -3
  406. package/dist/{time-DkWjdL98.js → time-nR1JesoH.js} +32 -8
  407. package/dist/{token-BLZcjQgt.js → token-DC9EQiet.js} +15 -13
  408. package/dist/{tool-refusal-CMLN5xhn.js → tool-refusal-Qpjs_W6M.js} +5 -2
  409. package/dist/trpc/index.d.ts +11 -8
  410. package/dist/trpc/index.js +15 -9
  411. package/dist/type-helpers-BIPIDa6a.d.ts +50 -0
  412. package/dist/{types-8RnwUAvE.d.ts → types-AMJ5qoU_.d.ts} +49 -30
  413. package/dist/{types-C_IiEs64.d.ts → types-B2mlGuhW.d.ts} +14 -11
  414. package/dist/{types-_WhUP7ud.d.ts → types-B4uqKDnp.d.ts} +25 -12
  415. package/dist/{types-CX7AvRqP.d.ts → types-BJk0BKRX.d.ts} +24 -14
  416. package/dist/types-B_d_g7T3.d.ts +262 -0
  417. package/dist/{types-BdtSDbBO.d.ts → types-B_tiYvk8.d.ts} +59 -32
  418. package/dist/{types-DqzsnlSA.js → types-CcUXciSj.js} +17 -5
  419. package/dist/{types-Dfv0aTER.d.ts → types-DC1Loeh3.d.ts} +449 -168
  420. package/dist/{types-lUlG3TVd.d.ts → types-DHKPcqzr.d.ts} +2 -2
  421. package/dist/{types-C791HFu9.d.ts → types-DjuMBNF9.d.ts} +68 -32
  422. package/dist/{types-C863OQiR.d.ts → types-HzqOtvsJ.d.ts} +23 -12
  423. package/dist/{types-Druu9wLM.d.ts → types-ZzRGoViD.d.ts} +77 -24
  424. package/dist/{types-BzzaHxt3.d.ts → types-ah9NlU6j.d.ts} +137 -48
  425. package/dist/{types-CVZSNocA.d.ts → types-djVzLlIV.d.ts} +31 -14
  426. package/dist/{types-BtHtcKMr.d.ts → types-yUuPR5Hy.d.ts} +47 -24
  427. package/dist/unplugin/index.d.ts +1 -1
  428. package/dist/unplugin/index.js +2 -2
  429. package/dist/usage-CYeXek0p.js +1 -0
  430. package/dist/{usage-SveTRTyr.js → usage-CxEzS4ey.js} +50 -26
  431. package/dist/{usage-CRVl9V3t.js → usage-ab0PdusX.js} +2 -2
  432. package/dist/{validation-error-ZfUHbKvf.js → validation-error-CYg2kJEw.js} +4 -1
  433. package/dist/{validation-error-DHUrAkku.d.ts → validation-error-YGg2mXyH.d.ts} +5 -2
  434. package/dist/{validity-CZ7-y0Cj.js → validity-Buc7w8E9.js} +13 -10
  435. package/dist/{verifier-DHuh-okk.js → verifier-DUV6pLqZ.js} +10 -4
  436. package/dist/{verify-BaAKx7t6.js → verify-DZeqoWu5.js} +417 -489
  437. package/dist/version-DMQ0dnN5.js +48 -0
  438. package/dist/version-DizhmD72.js +1 -0
  439. package/dist/{views-DTIIO-oQ.js → views-CD8wuL4Z.js} +19 -6
  440. package/dist/vocabulary-DEJ5j4mR.d.ts +70 -0
  441. package/dist/vue/index.d.ts +71 -21
  442. package/dist/vue/index.js +50 -13
  443. package/dist/{waiter-B986w1oK.d.ts → waiter-Bu9zAlE0.d.ts} +13 -10
  444. package/dist/{waiter-BGUtGYoU.js → waiter-aBLM63_f.js} +1 -1
  445. package/dist/{watch-vea54PRw.js → watch-Cx_WciLE.js} +8 -8
  446. package/dist/watch-DB42U1ib.js +1 -0
  447. package/dist/webmcp/index.d.ts +11 -11
  448. package/dist/webmcp/index.js +8 -5
  449. package/dist/{where-scope-C9vfEphl.js → where-scope-DlCdCM_8.js} +56 -30
  450. package/dist/{who-can-DWBAcaCQ.js → who-can-rI7dCR9Q.js} +23 -20
  451. package/dist/workflow/index.d.ts +3 -3
  452. package/dist/workflow/index.js +13 -13
  453. package/dist/workflow-sdk/index.d.ts +19 -13
  454. package/dist/workflow-sdk/index.js +6 -6
  455. package/dist/{wrap-gX61EtpB.js → wrap-B2wziJI_.js} +11 -5
  456. package/dist/{wrap-C5jC6sKI.d.ts → wrap-DlJE3gS_.d.ts} +8 -5
  457. package/package.json +25 -14
  458. package/schemas/catalog-v1.json +3 -0
  459. package/schemas/cli-result-v1.json +1 -0
  460. package/schemas/cloud-api-v1.json +152 -7
  461. package/schemas/connector-v1.json +8 -0
  462. package/schemas/supabase-claims-v1.json +5 -0
  463. package/schemas/supabase-manifest-v1.json +308 -75
  464. package/skills/permdock/SKILL.md +1 -0
  465. package/skills/permdock-agents/references/runtimes.md +3 -1
  466. package/skills/permdock-approvals/references/stores-and-resume.md +2 -1
  467. package/skills/permdock-credentials/references/tokens-keys-links.md +8 -6
  468. package/skills/permdock-data/references/queries-and-rls.md +6 -2
  469. package/skills/permdock-tenancy/SKILL.md +1 -1
  470. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -1
  471. package/skills/permdock-wire/references/adapters.md +28 -22
  472. package/skills/permdock-wire/references/policy-options.md +1 -0
  473. package/dist/catalog-BoWglDPI.js +0 -1
  474. package/dist/collect-D7eQDffE.js +0 -1
  475. package/dist/config-bs_kZeYq.js +0 -162
  476. package/dist/denied-text-CiFQNuMV.d.ts +0 -19
  477. package/dist/fields-OYG_JR78.js +0 -203
  478. package/dist/generate-CNU1pIOo.js +0 -171
  479. package/dist/headers-BIjfMaoC.js +0 -8
  480. package/dist/headers-CIbDTUTK.d.ts +0 -7
  481. package/dist/index-Cp_ilKi1.d.ts +0 -91
  482. package/dist/index-CueFnxQc.d.ts +0 -110
  483. package/dist/load-BxEtwlBS.js +0 -1
  484. package/dist/output-files-B3IZJksC.js +0 -1
  485. package/dist/package-root-Dk_ETdkp.js +0 -31
  486. package/dist/parse-Cxq0WxrA.js +0 -53
  487. package/dist/parse-local-manifest-5ODwqu8b.d.ts +0 -10
  488. package/dist/parse-local-manifest-CVSs6J9I.js +0 -34
  489. package/dist/peer-C8swJ2GH.js +0 -50
  490. package/dist/policies-DP2nqRoF.js +0 -295
  491. package/dist/powersync-BkWWCS1K.js +0 -538
  492. package/dist/powersync-MMJ2mI2q.js +0 -1
  493. package/dist/problem-details-B45V5d2b.d.ts +0 -7
  494. package/dist/prompt-DfZLJLIn.js +0 -32
  495. package/dist/protected-RFGpakN9.d.ts +0 -38
  496. package/dist/pull-CvpINcMK.js +0 -1
  497. package/dist/run-DDwUaJDU.js +0 -1
  498. package/dist/sources-Xc4zkszI.d.ts +0 -190
  499. package/dist/stores-BUGNbJTt.d.ts +0 -30
  500. package/dist/supabase-hook-CCw5m35C.js +0 -1
  501. package/dist/supautils-B6HYL9eL.js +0 -91
  502. package/dist/text-diff-BQcUapOb.js +0 -15
  503. package/dist/types-B3_ooZgZ.d.ts +0 -172
  504. package/dist/usage-CZpSQP6L.js +0 -1
  505. package/dist/version-CEbQ5UeM.js +0 -18
  506. package/dist/version-DXkYUISx.js +0 -1
  507. package/dist/watch--ovlPOc0.js +0 -1
@@ -1,538 +0,0 @@
1
- import { c as isConditionRef, s as isConditionDate } from "./refs-K6eWUJ0H.js";
2
- import { E as memoryCustomRoleSource, f as localSnapshotManifest } from "./src-Cu2m75uo.js";
3
- import { n as findPermission } from "./permission-registry-Br4jSNVi.js";
4
- import { d as scopeList, o as resolveScope } from "./scopes-CUPSjo9q.js";
5
- import { t as requiresApproval } from "./approval-required-TzNB9oQA.js";
6
- import { t as getPermDock } from "./permdock-BrAscV28.js";
7
- import { u as usageResult } from "./errors-CWTY6uih.js";
8
- import { c as requirePolicy } from "./load-DFS_ry0W.js";
9
- import { i as scopeMembershipTable, r as scopeColumn } from "./compile-CMqMx_IN.js";
10
- import { s as quoteSqlLiteral, t as SQL_IDENT } from "./sql-B5T1IL83.js";
11
- import "./sources-vs5dGOsS.js";
12
- import { t as applyFiles } from "./files-C5ZI27eV.js";
13
- import { i as fileDrift } from "./output-files-DhRBBE4n.js";
14
- import { n as fixtureSubject, r as loadFixtures, t as fixtureRow } from "./fixtures-B7XrLeY7.js";
15
- import { N as quoteIdent, a as customRolesOn, t as CUSTOM_ROLES } from "./shared-BAK8t4Uo.js";
16
- import { f as pgConnector } from "./policies-DP2nqRoF.js";
17
- import { A as collectGrants, N as contextRefs, t as ownershipRules } from "./ownership-DqaJNJPn.js";
18
- import { m as tableFor, t as canFixture } from "./verify-BaAKx7t6.js";
19
- import { resolve } from "node:path";
20
- //#region src/cli/powersync/streams.ts
21
- function ident(name) {
22
- if (!SQL_IDENT.test(name)) throw new TypeError(`PermDock CLI: '${name}' is not a plain identifier, which Sync Streams need`);
23
- return name;
24
- }
25
- const POWERSYNC = {
26
- user: "auth.user_id()",
27
- claim: (name) => `auth.parameter(${quoteSqlLiteral(name)})`,
28
- claims: (name) => `(SELECT value FROM json_each(auth.parameter(${quoteSqlLiteral(name)})))`,
29
- column: (table, name) => `${table}.${ident(name)}`,
30
- literal: (value) => typeof value === "string" ? quoteSqlLiteral(value) : String(value)
31
- };
32
- const POSTGRES = {
33
- user: "$1::text",
34
- claim: (name) => `($2::jsonb ->> ${quoteSqlLiteral(name)})`,
35
- claims: (name) => `(select jsonb_array_elements_text(case jsonb_typeof($2::jsonb -> ${quoteSqlLiteral(name)}) when 'array' then $2::jsonb -> ${quoteSqlLiteral(name)} else '[]'::jsonb end))`,
36
- column: (table, name, numeric) => `${table}.${ident(name)}${numeric === true ? "" : "::text"}`,
37
- literal: (value) => typeof value === "number" ? String(value) : quoteSqlLiteral(String(value))
38
- };
39
- /** At most this many queries per stream; a wider `or` product is left out rather than truncated. */
40
- const MAX_QUERIES = 32;
41
- /** Every combination of one clause list from each input, ANDed. */
42
- function product(lists) {
43
- let out = [[]];
44
- for (const list of lists) out = out.flatMap((left) => list.map((right) => left.concat(right)));
45
- return out;
46
- }
47
- function every(parts) {
48
- const out = [];
49
- for (const part of parts) {
50
- if (part === void 0) return;
51
- out.push(part);
52
- }
53
- return out;
54
- }
55
- /** The table as a stream query names it: unqualified in `public`, `schema.table` otherwise. */
56
- function bare(table) {
57
- return (table.startsWith("public.") ? table.slice(7) : table).split(".").map(ident).join(".");
58
- }
59
- /** A row value: a literal, or a principal ref the token carries. `undefined` when neither. */
60
- function valueSql(value, ctx) {
61
- if (isConditionRef(value)) {
62
- if (value.ref === "principal.id") return ctx.dialect.user;
63
- const claim = /^principal\.claims\.([A-Za-z_][A-Za-z0-9_]*)$/u.exec(value.ref)?.[1];
64
- return claim === void 0 ? void 0 : ctx.dialect.claim(claim);
65
- }
66
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") return ctx.dialect.literal(value);
67
- }
68
- const COMPARE = {
69
- eq: "=",
70
- ne: "!=",
71
- gt: ">",
72
- gte: ">=",
73
- lt: "<",
74
- lte: "<="
75
- };
76
- /**
77
- * A row condition as alternatives of ANDed clauses over `table`. `undefined`
78
- * when part of it has no Sync Streams form, so the grant syncs nothing.
79
- */
80
- function conditionSql(condition, table, ctx) {
81
- const column = (field) => SQL_IDENT.test(field) ? ctx.dialect.column(table, field) : void 0;
82
- switch (condition.op) {
83
- case "eq":
84
- case "ne":
85
- case "gt":
86
- case "gte":
87
- case "lt":
88
- case "lte": {
89
- const left = typeof condition.value === "number" && SQL_IDENT.test(condition.field) ? ctx.dialect.column(table, condition.field, true) : column(condition.field);
90
- if (condition.value === null && left !== void 0) return condition.op === "eq" ? [[`${left} IS NULL`]] : condition.op === "ne" ? [[`${left} IS NOT NULL`]] : void 0;
91
- const right = valueSql(condition.value, ctx);
92
- return left === void 0 || right === void 0 ? void 0 : [[`${left} ${COMPARE[condition.op]} ${right}`]];
93
- }
94
- case "isNull": {
95
- const left = column(condition.field);
96
- return left === void 0 ? void 0 : [[`${left} IS ${condition.value ? "" : "NOT "}NULL`]];
97
- }
98
- case "in":
99
- case "notIn": {
100
- const left = column(condition.field);
101
- if (left === void 0) return;
102
- const negate = condition.op === "notIn" ? "NOT " : "";
103
- if (isConditionRef(condition.value)) {
104
- const claim = /^principal\.claims\.([A-Za-z_][A-Za-z0-9_]*)$/u.exec(condition.value.ref)?.[1];
105
- return claim === void 0 || negate !== "" ? void 0 : [[`${left} IN ${ctx.dialect.claims(claim)}`]];
106
- }
107
- const values = condition.value.map((value) => isConditionRef(value) || isConditionDate(value) || Array.isArray(value) ? void 0 : value === null ? void 0 : valueSql(value, ctx));
108
- if (values.some((value) => value === void 0)) return;
109
- return values.length === 0 ? negate === "" ? [] : [[]] : [[`${left} ${negate}IN (${values.join(", ")})`]];
110
- }
111
- case "and":
112
- case "or": {
113
- const parts = every(condition.conditions.map((child) => conditionSql(child, table, ctx)));
114
- if (parts === void 0) return;
115
- return condition.op === "and" ? product(parts) : parts.flat();
116
- }
117
- case "memberOf": {
118
- if (condition.scope === "resource" || condition.parents !== void 0) return;
119
- const scope = resolveScope(ctx.scopes, condition.scope);
120
- const left = column(condition.field);
121
- if (scope === void 0 || left === void 0) return;
122
- return membershipSql(scope, left, condition.roles, ctx);
123
- }
124
- case "not":
125
- case "contains":
126
- case "related":
127
- case "opaque":
128
- case "sqlFunction":
129
- case "liveSession": return;
130
- default: return condition;
131
- }
132
- }
133
- /** One `IN (SELECT …)` per role source of the membership table: the row's `left` is an instance the user holds `roles` in. */
134
- function membershipIn(table, idColumn, left, roles, ctx) {
135
- if (table.expiresAt !== void 0 || table.disabledAt !== void 0) return;
136
- const name = bare(table.table);
137
- const sources = Array.isArray(table.role) ? table.role : [table.role];
138
- const kinds = [...new Set(roles.flatMap((role) => ctx.kinds[role] ?? []))];
139
- const restricted = roles.some((role) => ctx.kinds[role] !== void 0);
140
- if (restricted && (table.via === void 0 || roles.length !== 1)) return;
141
- const via = table.via;
142
- if (restricted && typeof via === "object" && !kinds.includes(via.value)) return [];
143
- const filters = [`${ctx.dialect.column(name, table.user)} = ${ctx.dialect.user}`, ...restricted && typeof via === "string" ? [`${ctx.dialect.column(name, via)} IN (${kinds.map((kind) => ctx.dialect.literal(kind)).join(", ")})`] : []];
144
- const list = roles.map((role) => ctx.dialect.literal(role)).join(", ");
145
- return sources.map((source) => {
146
- if (typeof source === "string") return [`${left} IN (SELECT ${ctx.dialect.column(name, idColumn)} FROM ${name} WHERE ${[...filters, `${ctx.dialect.column(name, source)} IN (${list})`].join(" AND ")})`];
147
- const [pair] = Object.entries(source.on);
148
- const keys = bare(source.through);
149
- const [ref, id] = pair ?? ["", ""];
150
- return [`${left} IN (SELECT ${ctx.dialect.column(name, idColumn)} FROM ${name} INNER JOIN ${keys} ON ${ctx.dialect.column(keys, id)} = ${ctx.dialect.column(name, ref)} WHERE ${[...filters, `${ctx.dialect.column(keys, source.column)} IN (${list})`].join(" AND ")})`];
151
- });
152
- }
153
- function membershipSql(scope, left, roles, ctx) {
154
- const table = scopeMembershipTable(ctx.config.rls?.memberships, ctx.scopes, scope);
155
- const idColumn = table === void 0 ? void 0 : scopeColumn(table, ctx.scopes, scope);
156
- return table === void 0 || idColumn === void 0 ? void 0 : membershipIn(table, idColumn, left, roles, ctx);
157
- }
158
- /** Who the grant reaches, as alternatives of clauses; `undefined` when Sync Streams cannot express it. */
159
- function accessSql(item, table, ctx) {
160
- const { access } = item;
161
- switch (access.kind) {
162
- case "anyone":
163
- case "authenticated": return [[]];
164
- case "role": {
165
- if (access.scope === "global") return `global role ${access.role} is not a row filter`;
166
- const field = ctx.policy.scopes.find((scope) => scope.name === access.scope)?.key;
167
- if (field === void 0 || !SQL_IDENT.test(field)) return `scope ${access.scope} has no row key`;
168
- return membershipSql(access.scope, ctx.dialect.column(table, field), [access.role], ctx) ?? `no rls.memberships table without an expiry or disabledAt and with the kinds of ${access.role} for scope ${access.scope}`;
169
- }
170
- case "resource": {
171
- const holder = ctx.config.rls?.memberships?.resource?.[access.resource];
172
- const node = ctx.policy.resources.get(item.grant.permission.resource);
173
- const field = node?.name === access.resource ? node.id : node?.parent?.resource === access.resource ? node.parent.field : void 0;
174
- if (holder === void 0 || field === void 0 || !SQL_IDENT.test(field)) return `no rls.memberships.resource table for ${access.resource} on the row`;
175
- return membershipIn(holder, holder.id ?? "id", ctx.dialect.column(table, field), [access.role], ctx) ?? `the ${access.resource} memberships table has an expiry or disabledAt, or lacks via`;
176
- }
177
- case "actor": return "actor grantees are not in the sync token";
178
- default: return access;
179
- }
180
- }
181
- /** `permdock_<table>`, with a schema joined by `_`; a table in the `permdock` schema keeps one prefix. */
182
- function subjectStreamName(table) {
183
- const name = table.replaceAll(".", "_");
184
- return name.startsWith("permdock_") ? name : `permdock_${name}`;
185
- }
186
- function roleThroughs(role) {
187
- return (Array.isArray(role) ? role : [role]).filter((item) => typeof item === "object" && item !== null);
188
- }
189
- /**
190
- * Streams of the rows a device builds the user's snapshot from: the user's
191
- * own membership and global-role rows, the roles tables they reference, and
192
- * the custom roles of the user's tenants. Each query starts from the user's
193
- * own rows.
194
- */
195
- function subjectStreams(ctx) {
196
- const rls = ctx.config.rls;
197
- const { dialect } = ctx;
198
- const tables = /* @__PURE__ */ new Map();
199
- const add = (table, query, user) => {
200
- const entry = tables.get(table) ?? {
201
- user: void 0,
202
- queries: /* @__PURE__ */ new Set()
203
- };
204
- if (entry.queries.size === 0) entry.user = user;
205
- else if (entry.user !== user) entry.user = void 0;
206
- entry.queries.add(query);
207
- tables.set(table, entry);
208
- };
209
- const own = (table, user, role) => {
210
- const name = bare(table);
211
- const mine = `${dialect.column(name, user)} = ${dialect.user}`;
212
- add(name, `SELECT * FROM ${name} WHERE ${mine}`, user);
213
- for (const through of roleThroughs(role)) {
214
- const keys = bare(through.through);
215
- const [pair] = Object.entries(through.on);
216
- if (pair === void 0) continue;
217
- const [ref, id] = pair;
218
- add(keys, `SELECT * FROM ${keys} WHERE ${dialect.column(keys, id)} IN (SELECT ${dialect.column(name, ref)} FROM ${name} WHERE ${mine})`);
219
- }
220
- };
221
- const memberships = rls?.memberships;
222
- for (const table of [
223
- ...Object.values(memberships?.scopes ?? {}),
224
- ...memberships?.tenant === void 0 ? [] : [memberships.tenant],
225
- ...memberships?.team === void 0 ? [] : [memberships.team],
226
- ...Object.values(memberships?.resource ?? {})
227
- ]) own(table.table, table.user, table.role);
228
- const schema = rls?.schema ?? "permdock";
229
- const database = rls?.authorize === "database";
230
- const globalRoles = rls?.roles ?? (database ? { table: `${schema}.user_roles` } : void 0);
231
- if (globalRoles !== void 0) own(globalRoles.table, globalRoles.user ?? "user_id", globalRoles.role ?? "role");
232
- if (database && customRolesOn(rls)) {
233
- const root = ctx.scopes[0]?.name;
234
- const tenants = root === void 0 ? void 0 : scopeMembershipTable(memberships, ctx.scopes, root);
235
- const column = tenants === void 0 || root === void 0 ? void 0 : scopeColumn(tenants, ctx.scopes, root);
236
- for (const name of [CUSTOM_ROLES.permissions, CUSTOM_ROLES.includes]) {
237
- const table = bare(`${schema}.${name}`);
238
- const tenant = dialect.column(table, "tenant_id");
239
- add(table, `SELECT * FROM ${table} WHERE ${tenant} IS NULL`);
240
- if (tenants !== void 0 && column !== void 0) {
241
- const members = bare(tenants.table);
242
- add(table, `SELECT * FROM ${table} WHERE ${tenant} IN (SELECT ${dialect.column(members, column)} FROM ${members} WHERE ${dialect.column(members, tenants.user)} = ${dialect.user})`);
243
- }
244
- }
245
- }
246
- const out = [];
247
- for (const [table, entry] of tables) {
248
- const name = subjectStreamName(table);
249
- const queries = [...entry.queries];
250
- out.push(entry.user === void 0 ? {
251
- name,
252
- table,
253
- queries
254
- } : {
255
- name,
256
- table,
257
- user: entry.user,
258
- queries
259
- });
260
- }
261
- return out;
262
- }
263
- /** Why a grant cannot become a stream query, before its conditions are compiled. */
264
- function unsupported(item) {
265
- const { grant } = item;
266
- if (grant.breakGlass !== void 0) return "break-glass";
267
- if (grant.closure !== void 0 || grant.portable === false) return "not portable";
268
- if (requiresApproval(grant.approval)) return "needs approval";
269
- if (grant.validity !== void 0) return "time-bounded";
270
- const context = contextRefs(item.where);
271
- return context.length > 0 ? `reads ${context.join(", ")}` : void 0;
272
- }
273
- /**
274
- * Sync Streams for each synced resource: the union of the rows its read
275
- * permission's allow grants reach. A grant with any part Sync Streams cannot
276
- * express syncs nothing, and a resource with a deny grant gets no stream, so
277
- * a stream never holds a row the policy denies.
278
- */
279
- function powersyncPlan(policy, config, dialect = POWERSYNC) {
280
- const scopes = scopeList(policy.scopes);
281
- const ctx = {
282
- policy,
283
- config,
284
- scopes,
285
- kinds: ownershipRules(policy, scopes)?.kinds ?? {},
286
- dialect
287
- };
288
- const action = config.powersync?.action ?? "read";
289
- const grants = collectGrants(policy);
290
- const resources = config.powersync?.resources ?? [...policy.resources.keys()].filter((name) => grants.some((item) => item.grant.permission.resource === name && item.grant.permission.action === action));
291
- const streams = [];
292
- const omitted = [];
293
- const warnings = [];
294
- for (const resource of resources) {
295
- const node = policy.resources.get(resource);
296
- const key = `${resource}.${action}`;
297
- const items = grants.filter((item) => item.grant.permission.key === key);
298
- if (node === void 0 || items.length === 0) {
299
- omitted.push({
300
- resource,
301
- reason: `no grant of ${key}`
302
- });
303
- continue;
304
- }
305
- if (items.some((item) => item.grant.effect === "deny")) {
306
- omitted.push({
307
- resource,
308
- reason: `${key} has a deny grant, which Sync Streams cannot subtract`
309
- });
310
- continue;
311
- }
312
- const table = bare(tableFor(resource, config.rls?.tables));
313
- const { id } = node;
314
- const queries = /* @__PURE__ */ new Set();
315
- for (const item of items) {
316
- const label = `${item.label}/${key}`;
317
- const access = unsupported(item) ?? accessSql(item, table, ctx);
318
- if (typeof access === "string") {
319
- warnings.push(`${label} does not sync: ${access}`);
320
- continue;
321
- }
322
- const where = item.where === void 0 ? [[]] : conditionSql(item.where, table, ctx);
323
- if (where === void 0) {
324
- warnings.push(`${label} does not sync: its condition has no Sync Streams form`);
325
- continue;
326
- }
327
- const columns = item.grant.fields === void 0 ? "*" : [.../* @__PURE__ */ new Set([id, ...item.grant.fields])].map((field) => ctx.dialect.column(table, field)).join(", ");
328
- for (const clauses of product([access, where])) queries.add(`SELECT ${columns} FROM ${table}${clauses.length === 0 ? "" : ` WHERE ${clauses.join(" AND ")}`}`);
329
- }
330
- if (queries.size === 0) omitted.push({
331
- resource,
332
- reason: `no grant of ${key} compiles`
333
- });
334
- else if (queries.size > MAX_QUERIES) omitted.push({
335
- resource,
336
- reason: `${String(queries.size)} queries, over the limit of ${String(MAX_QUERIES)}`
337
- });
338
- else streams.push({
339
- name: resource,
340
- resource,
341
- table,
342
- id,
343
- queries: [...queries]
344
- });
345
- }
346
- return {
347
- streams,
348
- subject: subjectStreams(ctx),
349
- omitted,
350
- warnings
351
- };
352
- }
353
- /** `sync-config.yaml`: edition 3 Sync Streams, one auto-subscribed stream per synced resource. */
354
- function powersyncYaml(plan) {
355
- const lines = [
356
- "# Generated by permdock powersync generate from the policy. Do not edit.",
357
- "config:",
358
- " edition: 3",
359
- "",
360
- "streams:"
361
- ];
362
- if (plan.streams.length === 0 && plan.subject.length === 0) lines[lines.length - 1] = "streams: {}";
363
- for (const stream of [...plan.streams, ...plan.subject]) lines.push(` ${stream.name}:`, " auto_subscribe: true", " queries:", ...stream.queries.map((query) => ` - ${JSON.stringify(query)}`));
364
- for (const item of plan.omitted) lines.push(`# ${item.resource}: not synced, ${item.reason}`);
365
- return `${lines.join("\n")}\n`;
366
- }
367
- //#endregion
368
- //#region src/cli/powersync/powersync.ts
369
- const POWERSYNC_HELP = `permdock powersync generate [--out sync-config.yaml] [--check]
370
- permdock powersync verify [--db-url-stdin] [--fixtures rls.fixtures.json]`;
371
- const DEFAULT_OUT = "sync-config.yaml";
372
- function powersyncOut(config, out) {
373
- return out ?? config.powersync?.out ?? DEFAULT_OUT;
374
- }
375
- function loadPolicy(cwd, config, from) {
376
- return requirePolicy(cwd, from ?? config.policy, "powersync needs policy in the config or --policy");
377
- }
378
- function sameJson(current, expected) {
379
- try {
380
- return JSON.stringify(JSON.parse(current)) === JSON.stringify(JSON.parse(expected));
381
- } catch {
382
- return false;
383
- }
384
- }
385
- /**
386
- * The files the policy compiles to: the Sync Streams file and, with
387
- * `powersync.manifest`, the local-snapshot manifest. `warnings` lists the
388
- * grants that do not sync.
389
- */
390
- function powersyncFiles(policy, config, out) {
391
- const plan = powersyncPlan(policy, config);
392
- const files = [{
393
- path: powersyncOut(config, out),
394
- text: powersyncYaml(plan)
395
- }];
396
- const manifest = config.powersync?.manifest;
397
- if (manifest !== void 0) files.push({
398
- path: manifest,
399
- json: true,
400
- text: `${JSON.stringify(localSnapshotManifest(policy), null, 2)}\n`
401
- });
402
- return {
403
- files,
404
- warnings: plan.warnings
405
- };
406
- }
407
- /** The files whose content on disk is not what the policy compiles to, with `missing` for an absent one. */
408
- function staleFiles(cwd, files) {
409
- const stale = [];
410
- for (const file of files) {
411
- const found = fileDrift(resolve(cwd, file.path), file.text, file.json === true ? sameJson : void 0);
412
- if (found !== void 0) stale.push({
413
- path: file.path,
414
- missing: found.kind === "missing"
415
- });
416
- }
417
- return stale;
418
- }
419
- function rowValue(row, key) {
420
- const value = key !== void 0 && row !== null && typeof row === "object" && !Array.isArray(row) ? Object.entries(row).find(([name]) => name === key)?.[1] : void 0;
421
- return value === void 0 || value === null ? void 0 : String(value);
422
- }
423
- function claimsJson(fixture) {
424
- return JSON.stringify(fixture.subject.claims ?? {});
425
- }
426
- /** Whether a stream of the user's own rows holds a row of another user. */
427
- async function leaks(query, stream, user, fixture) {
428
- for (const text of stream.queries) if ((await query(`select 1 from (${text}) q where q.${quoteIdent(user)}::text is distinct from $1::text and $2::jsonb is not null limit 1`, [fixture.subject.id, claimsJson(fixture)])).length > 0) return true;
429
- return false;
430
- }
431
- /** Whether the stream holds the fixture's row for its subject. */
432
- async function synced(query, stream, fixture) {
433
- const value = rowValue(fixture.row, stream.id);
434
- if (value === void 0) return false;
435
- for (const text of stream.queries) if ((await query(`select 1 from (${text}) q where q.${quoteIdent(stream.id)}::text = $3::text and $1::text is not null and $2::jsonb is not null limit 1`, [
436
- fixture.subject.id,
437
- claimsJson(fixture),
438
- value
439
- ])).length > 0) return true;
440
- return false;
441
- }
442
- async function verifyStreams(input) {
443
- const plan = powersyncPlan(input.policy, input.config, POSTGRES);
444
- const mismatches = [];
445
- const notes = [];
446
- const client = await input.connect(input.db);
447
- const query = async (sql, values) => (await client.query(sql, values)).rows;
448
- const root = input.policy.scopes.find((scope) => scope.within === void 0)?.key;
449
- try {
450
- const checked = /* @__PURE__ */ new Set();
451
- for (const fixture of input.fixtures) {
452
- if (checked.has(fixture.subject.id)) continue;
453
- checked.add(fixture.subject.id);
454
- for (const stream of plan.subject) if (stream.user !== void 0 && await leaks(query, stream, stream.user, fixture)) mismatches.push(`stream ${stream.name} syncs another user's ${stream.table} rows to ${fixture.subject.id}`);
455
- }
456
- for (const fixture of input.fixtures) {
457
- const permission = findPermission(input.policy.permissions, fixture.action);
458
- const stream = plan.streams.find((item) => permission !== void 0 && item.resource === permission.resource && permission.action === (input.config.powersync?.action ?? "read"));
459
- if (permission === void 0 || stream === void 0) continue;
460
- const tenant = rowValue(fixture.row, root);
461
- const permdock = await getPermDock(input.policy, fixtureSubject({
462
- ...fixture.subject,
463
- ...tenant === void 0 ? {} : { tenant }
464
- }), { customRoles: memoryCustomRoleSource(input.customRoles) });
465
- const granted = canFixture(permdock, permission, fixtureRow(fixture, permission.kind));
466
- const holds = await synced(query, stream, fixture);
467
- if (holds && !granted) mismatches.push(`${fixture.action} for ${fixture.subject.id}: stream ${stream.name} syncs a row the policy denies`);
468
- else if (granted && !holds) notes.push(`${fixture.action} for ${fixture.subject.id}: granted, not synced (the app reads it from the server)`);
469
- }
470
- } finally {
471
- await client.end();
472
- }
473
- return {
474
- mismatches,
475
- notes
476
- };
477
- }
478
- async function runPowerSync(input) {
479
- const [verb] = input.rest;
480
- if (verb !== "generate" && verb !== "verify") return {
481
- code: 2,
482
- output: POWERSYNC_HELP
483
- };
484
- let policy;
485
- let compiled;
486
- try {
487
- policy = await loadPolicy(input.cwd, input.config, input.from);
488
- compiled = powersyncFiles(policy, input.config, input.out);
489
- } catch (cause) {
490
- return usageResult(cause);
491
- }
492
- const { files, warnings } = compiled;
493
- const out = powersyncOut(input.config, input.out);
494
- const stale = staleFiles(input.cwd, files);
495
- if (verb === "generate") {
496
- if (input.check) return stale.length === 0 ? {
497
- code: 0,
498
- output: files.map((file) => `${file.path} is current`).join("\n")
499
- } : {
500
- code: 1,
501
- output: stale.map((file) => `${file.path} is stale: run permdock powersync generate`).join("\n")
502
- };
503
- applyFiles(input.cwd, files);
504
- return {
505
- code: 0,
506
- output: [...files.map((file) => `wrote ${file.path}`), ...warnings].join("\n")
507
- };
508
- }
509
- const mismatches = stale.map((file) => `${file.path} ${file.missing ? "is missing" : "differs from the policy"}: run permdock powersync generate`);
510
- const notes = [...warnings];
511
- if (input.db !== void 0) try {
512
- const fixturesPath = input.fixtures ?? input.config.rls?.fixtures ?? "rls.fixtures.json";
513
- const { fixtures, customRoles } = await loadFixtures(input.cwd, fixturesPath);
514
- const database = await verifyStreams({
515
- policy,
516
- config: input.config,
517
- fixtures,
518
- customRoles,
519
- db: input.db,
520
- connect: input.connect ?? pgConnector("permdock powersync verify --db-url-stdin", input.cwd)
521
- });
522
- mismatches.push(...database.mismatches);
523
- notes.push(...database.notes);
524
- } catch (cause) {
525
- return usageResult(cause);
526
- }
527
- if (mismatches.length > 0) return {
528
- code: 1,
529
- output: [...mismatches, ...notes].join("\n")
530
- };
531
- const verified = input.db === void 0 ? `${out} matches the policy` : `${out} matches the policy; no stream syncs a row the fixtures deny`;
532
- return {
533
- code: 0,
534
- output: notes.length === 0 ? verified : `${verified}\n${notes.join("\n")}`
535
- };
536
- }
537
- //#endregion
538
- export { runPowerSync as n, staleFiles as r, powersyncFiles as t };
@@ -1 +0,0 @@
1
- export { n as runPowerSync } from "./powersync-BkWWCS1K.js";
@@ -1,7 +0,0 @@
1
- import { Nn as Decision } from "./policy-types-n0uRTsW8.js";
2
- //#region src/core/problem-details.d.ts
3
- type Disclosure = "hide" | "reveal";
4
- /** The plans a `not-entitled` denial asks for; empty unless every denial is `not-entitled`. */
5
- declare function requiredPlans(decision: Decision): readonly string[];
6
- //#endregion
7
- export { requiredPlans as n, Disclosure as t };
@@ -1,32 +0,0 @@
1
- import { cancel, confirm, isCancel, multiselect } from "@clack/prompts";
2
- //#region src/cli/core/prompt.ts
3
- /** What a command reports when the person at the terminal cancels a prompt. */
4
- const CANCELLED = {
5
- code: 130,
6
- output: "Cancelled."
7
- };
8
- /** A yes or no question; `undefined` when cancelled. */
9
- async function ask(message) {
10
- const answer = await confirm({ message });
11
- if (isCancel(answer)) {
12
- cancel();
13
- return;
14
- }
15
- return answer;
16
- }
17
- /** Pick one or more of `options`, `initial` preselected; `undefined` when cancelled. */
18
- async function pick(message, options, initial) {
19
- const answer = await multiselect({
20
- message,
21
- options: options.map((option) => ({ ...option })),
22
- initialValues: [...initial],
23
- required: true
24
- });
25
- if (isCancel(answer)) {
26
- cancel();
27
- return;
28
- }
29
- return answer;
30
- }
31
- //#endregion
32
- export { ask as n, pick as r, CANCELLED as t };
@@ -1,38 +0,0 @@
1
- import { Nn as Decision, j as PolicyVocabulary, nr as Membership } from "./policy-types-n0uRTsW8.js";
2
- import { r as Role, w as Permission } from "./vocabulary-CN8H_9UF.js";
3
- import { r as DescribeOptions, t as DecisionDescription } from "./describe-B5qgDvEW.js";
4
- import { a as FilterResult, c as PermissionSet, d as RolesOptions, f as SubjectView, l as PermissionState, o as GateMode, p as TenantView, r as ClientPermDock, s as GateView, t as ApprovalHandle } from "./types-B3_ooZgZ.js";
5
- import { r as ProtectedProps } from "./types-CX7AvRqP.js";
6
- import { ReactNode } from "react";
7
- //#region src/react/hooks.d.ts
8
- declare function usePermDock<V extends PolicyVocabulary = PolicyVocabulary>(): ClientPermDock<V>;
9
- declare function usePermission(permission: Permission, data?: unknown): PermissionState;
10
- declare function usePermissions(permissions: readonly Permission[], data?: unknown): PermissionSet;
11
- declare function useFilter<T>(permission: Permission<string, T, "instance">, rows: readonly T[]): FilterResult<T>;
12
- declare function useTenant(): TenantView;
13
- declare function useMemberships(): readonly Membership[];
14
- declare function useRoles(options?: RolesOptions): {
15
- readonly roles: readonly Role[];
16
- };
17
- declare function useAssignableRoles(): readonly Role[];
18
- declare function useAssignablePermissions(options?: {
19
- readonly tenant?: string;
20
- }): readonly Permission[];
21
- declare function useSubject(): SubjectView;
22
- /** `describe` with the provider's `messages`; a call's own `messages` win. */
23
- declare function useDescribe(): (decision: Decision, options?: DescribeOptions) => DecisionDescription;
24
- declare function useApproval(decision: Decision): ApprovalHandle;
25
- /**
26
- * What a permission-gated control renders: `hidden`, `disabled`,
27
- * `needsApproval`, `upgrade` and a localised `reason`, from the same
28
- * snapshot as `usePermission`. React and React Native share it; a recipe
29
- * renders the fields and decides nothing.
30
- */
31
- declare function useGate(permission: Permission, data?: unknown, options?: {
32
- readonly mode?: GateMode;
33
- }): GateView;
34
- //#endregion
35
- //#region src/react/protected.d.ts
36
- declare function Protected(props: ProtectedProps): ReactNode;
37
- //#endregion
38
- export { useDescribe as a, useMemberships as c, usePermissions as d, useRoles as f, useAssignableRoles as i, usePermDock as l, useTenant as m, useApproval as n, useFilter as o, useSubject as p, useAssignablePermissions as r, useGate as s, Protected as t, usePermission as u };
@@ -1 +0,0 @@
1
- export { n as runCloudPull } from "./pull-jEwbf80J.js";
@@ -1 +0,0 @@
1
- export { t as run } from "./run-CUKuz0A8.js";