permdock 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (399) hide show
  1. package/README.md +1 -0
  2. package/dist/{2020-C9VN-x8c.js → 2020-CJbO8Bvz.js} +1 -3
  3. package/dist/a2a/index.d.ts +5 -5
  4. package/dist/a2a/index.js +4 -4
  5. package/dist/{adoption-scan-B4R5fnMU.js → adoption-scan-D-feE7BE.js} +1 -1
  6. package/dist/agent/index.d.ts +3 -3
  7. package/dist/agent/index.js +1 -1
  8. package/dist/ai-sdk/index.d.ts +21 -6
  9. package/dist/ai-sdk/index.js +19 -9
  10. package/dist/{approval-prompt-Djo_PyZc.d.ts → approval-prompt-K0faOLFp.d.ts} +2 -2
  11. package/dist/approvals/index.d.ts +4 -4
  12. package/dist/approvals/index.js +4 -4
  13. package/dist/{approvals-DJ6Yd5z1.js → approvals-CMRfsbBh.js} +74 -48
  14. package/dist/{arazzo-B6lebmiQ.js → arazzo-ClrF3PVb.js} +2 -2
  15. package/dist/{arazzo-BWhNF-k0.js → arazzo-rdeJ8n1J.js} +4 -4
  16. package/dist/{args-IIolxxKA.js → args-CC3OwyHW.js} +112 -2
  17. package/dist/astro/index.d.ts +6 -6
  18. package/dist/astro/index.js +2 -2
  19. package/dist/{audience-Dg8XsRaO.js → audience-BrMs8c4o.js} +1 -1
  20. package/dist/{auth-DRLEizbL.js → auth-CscUX8Sy.js} +3 -4
  21. package/dist/authzen/index.d.ts +162 -22
  22. package/dist/authzen/index.js +315 -146
  23. package/dist/{automation-BMZPIVUM.d.ts → automation-DOtAFWdy.d.ts} +3 -3
  24. package/dist/{automation-DVjOckjV.js → automation-ySsxp_Yp.js} +1 -1
  25. package/dist/base-url-BQbddZO5.js +9 -0
  26. package/dist/better-auth/index.d.ts +2 -2
  27. package/dist/better-auth/index.js +2 -2
  28. package/dist/better-supabase/index.d.ts +50 -8
  29. package/dist/better-supabase/index.js +94 -32
  30. package/dist/{bind-CZzhx-Vj.js → bind-D1nO6fiC.js} +5 -5
  31. package/dist/{bind--9EFVYWF.d.ts → bind-JDuvxjuW.d.ts} +7 -7
  32. package/dist/{build-instance-BMnAudHn.js → build-instance-DxE7czo9.js} +1 -1
  33. package/dist/{canonical-json-BC8_nMTw.js → canonical-json-DwilZ1iB.js} +6 -3
  34. package/dist/{capability-BSslw1QV.d.ts → capability-D4UC9TTW.d.ts} +2 -2
  35. package/dist/{capability-N1K9IpqS.js → capability-L7NnfhiE.js} +1 -1
  36. package/dist/{casbin-Cr7RLtA3.js → casbin-BHijLuHY.js} +2 -2
  37. package/dist/{casbin-Dyu2gnUD.js → casbin-BW9pS47J.js} +1 -1
  38. package/dist/{casl-64gpT-8x.js → casl-CmJlgziS.js} +2 -2
  39. package/dist/{casl-DjEDhTCP.js → casl-UbI8v-Wq.js} +1 -1
  40. package/dist/catalog/index.d.ts +70 -10
  41. package/dist/catalog/index.js +112 -6
  42. package/dist/catalog-BCCjSAdH.js +1 -0
  43. package/dist/{catalog-R_A__RsH.js → catalog-BaMQfQ6Y.js} +3 -3
  44. package/dist/{catalog-BECMPrwc.js → catalog-D69WhFii.js} +43 -13
  45. package/dist/{catalog-doc-C9wjsfNY.js → catalog-doc-CV9s6B1S.js} +28 -5
  46. package/dist/{catalog-fingerprint-CCP0-yQS.js → catalog-fingerprint-C144oW4M.js} +1 -1
  47. package/dist/{create-BWRSXgOF.js → challenge-nGWma08S.js} +122 -25
  48. package/dist/chat/index.d.ts +1 -1
  49. package/dist/chat/index.js +2 -2
  50. package/dist/chat-sdk/index.d.ts +3 -3
  51. package/dist/checks-BC_0mPIq.js +37 -0
  52. package/dist/claude-agent/index.d.ts +3 -3
  53. package/dist/claude-agent/index.js +2 -2
  54. package/dist/clerk/index.d.ts +3 -3
  55. package/dist/clerk/index.js +1 -1
  56. package/dist/cli/bin.js +2 -2
  57. package/dist/cli/index.d.ts +3 -3
  58. package/dist/cli/index.js +3 -3
  59. package/dist/cloud/index.d.ts +127 -11
  60. package/dist/cloud/index.js +251 -3
  61. package/dist/{cloud-CIoHNevm.js → cloud-CO8pYtwr.js} +5 -5
  62. package/dist/{codemod-Cxvvc70T.js → codemod-BP6n8N9L.js} +3 -3
  63. package/dist/{codemod-Bmj9dWMH.js → codemod-i4N2BhDc.js} +3 -3
  64. package/dist/{collect-CrZJJnEF.js → collect-BaWeMjwV.js} +17 -8
  65. package/dist/{collect-DloHbDVa.js → collect-DNm3oKOk.js} +6 -5
  66. package/dist/collect-k_Dulxr5.js +1 -0
  67. package/dist/compile/index.d.ts +1 -1
  68. package/dist/compile/index.js +1 -1
  69. package/dist/{compile-CMqMx_IN.js → compile-BAEO5bOk.js} +2 -2
  70. package/dist/{compile-Ckm2HqBZ.d.ts → compile-COM2VKuN.d.ts} +3 -3
  71. package/dist/{completion-BqhRBJD8.js → completion-BNdVf7X2.js} +3 -3
  72. package/dist/{config-bs_kZeYq.js → config-CoQHDrDi.js} +7 -3
  73. package/dist/{config-B46rm9sc.js → config-DGZzMV1B.js} +2 -2
  74. package/dist/{config-report-DUgj62Ai.js → config-report-Cm7UITNA.js} +3 -3
  75. package/dist/connector-schema-_VCSsdtD.js +433 -0
  76. package/dist/{context-bbFHR-0D.js → context--uM9V3Ui.js} +2 -2
  77. package/dist/convex/index.d.ts +5 -5
  78. package/dist/convex/index.js +2 -2
  79. package/dist/core-B5-w6Kw9.js +335 -0
  80. package/dist/core-CQkE8Esr.d.ts +179 -0
  81. package/dist/{create-0VZ7Pdiu.d.ts → create-B2-CQqCI.d.ts} +5 -5
  82. package/dist/{create-C3b4B5eF.js → create-Cb86Z8Im.js} +9 -8
  83. package/dist/{create-DnrmLnLW.js → create-DJrlhEp9.js} +5 -5
  84. package/dist/{create-BFfm17UA.d.ts → create-QHuuPw3q.d.ts} +7 -7
  85. package/dist/{create-BDS7wc3y.d.ts → create-UTnUVETj.d.ts} +30 -10
  86. package/dist/{credential-DM2um3ha.js → credential-CIM7wHwA.js} +4 -4
  87. package/dist/{credentials-DPyHmYz5.js → credentials-BpuTwd7a.js} +1 -1
  88. package/dist/{deciding-columns-Sq12mEA6.js → deciding-columns-DRo2QM6E.js} +13 -2
  89. package/dist/{delegation-DaXVdDhM.js → delegation-C5rOdTp5.js} +5 -5
  90. package/dist/delivery/index.d.ts +5 -5
  91. package/dist/delivery/index.js +4 -3
  92. package/dist/{delivery-DCAgNyCn.js → delivery-rwOKLWRm.js} +51 -2
  93. package/dist/{denied-text-D8jDHgsl.d.ts → denied-text-D4qkEtFz.d.ts} +2 -2
  94. package/dist/{describe-BybMRY7A.js → describe-DZlnEtLy.js} +1 -0
  95. package/dist/{describe-BZUsixiL.d.ts → describe-O0SwYIK8.d.ts} +2 -2
  96. package/dist/{diff-CxZo9pTq.js → diff-Btr1c1Ow.js} +2 -2
  97. package/dist/{diff-DCePiN6M.js → diff-DzT-xD13.js} +10 -10
  98. package/dist/{doctor-DFjUxf2f.js → doctor-BU1szn63.js} +241 -49
  99. package/dist/{doctor-CxiwSfqH.js → doctor-BoK_y0KO.js} +4 -4
  100. package/dist/drizzle/index.d.ts +3 -3
  101. package/dist/drizzle/index.js +1 -1
  102. package/dist/elysia/index.d.ts +5 -5
  103. package/dist/elysia/index.js +3 -3
  104. package/dist/{errors-C2PXIv4c.d.ts → errors-B_Qg9D3e.d.ts} +2 -2
  105. package/dist/{errors-CWTY6uih.js → errors-DpP_U6Bf.js} +1 -0
  106. package/dist/{evaluate-_R8QkWaf.js → evaluate-B_oqFbWC.js} +130 -34
  107. package/dist/{evaluations-16UqqQ6W.d.ts → evaluations-BCddEOfO.d.ts} +4 -4
  108. package/dist/{evaluations-DZ2CbV5k.js → evaluations-DReoiVBw.js} +4 -4
  109. package/dist/eve/index.d.ts +5 -5
  110. package/dist/eve/index.js +3 -3
  111. package/dist/express/index.d.ts +5 -5
  112. package/dist/express/index.js +3 -3
  113. package/dist/fastify/index.d.ts +5 -5
  114. package/dist/fastify/index.js +3 -3
  115. package/dist/{fetch-adapter-qKJBuRqy.d.ts → fetch-adapter-CuhyYwC1.d.ts} +4 -4
  116. package/dist/{fetch-adapter-g0ypLkID.js → fetch-adapter-De-u6vhJ.js} +3 -3
  117. package/dist/{fields-D9tPVUUS.js → fields-ClcQLrVc.js} +48 -13
  118. package/dist/{files-C5ZI27eV.js → files-acUbNwWt.js} +15 -2
  119. package/dist/{fixtures-B7XrLeY7.js → fixtures-BTMW6zgU.js} +2 -2
  120. package/dist/{flags-C3DktBDY.js → flags-aaeRAdiD.js} +2 -2
  121. package/dist/{from-snapshot-D2lZt4Dd.js → from-snapshot-Bz469dIh.js} +17 -10
  122. package/dist/generate-3FNO5P5Q.js +159 -0
  123. package/dist/{grantee-Cn1HyUsI.js → grantee-BrRANrpT.js} +14 -4
  124. package/dist/{grantee-conditions-CcXf8hMM.js → grantee-conditions-C6P1Tvol.js} +1 -1
  125. package/dist/{grantee-match-DHArqY82.js → grantee-match-0RtHWQDx.js} +3 -3
  126. package/dist/h3/index.d.ts +4 -4
  127. package/dist/h3/index.js +3 -3
  128. package/dist/{helpers-DTcZOzhF.js → helpers-DY3vXuGs.js} +3 -3
  129. package/dist/hono/index.d.ts +5 -5
  130. package/dist/hono/index.js +3 -3
  131. package/dist/{hosted-DBDX0M-P.d.ts → hosted-BmjzxQhp.d.ts} +14 -2
  132. package/dist/{hosted-BZIAYvon.js → hosted-XBgU6RGT.js} +34 -12
  133. package/dist/{http-DXJ37RDA.js → http-Ca3Sr5x1.js} +1 -1
  134. package/dist/{import-DMmOG27O.js → import-Bz0GefWg.js} +5 -5
  135. package/dist/{import-CNV7I2Dw.js → import-DB2EG_iy.js} +3 -3
  136. package/dist/{index-CxGUswIC.d.ts → index-BE8y3moU.d.ts} +50 -8
  137. package/dist/{index-Chrs5fQ-.d.ts → index-BSfRl0hZ.d.ts} +6 -6
  138. package/dist/{index-DOVf7RJv.d.ts → index-BTkwrK7v.d.ts} +155 -17
  139. package/dist/index-CMiPH2Tv.d.ts +206 -0
  140. package/dist/{index-SGdIQyzc.d.ts → index-DH9DUDEM.d.ts} +18 -3
  141. package/dist/{index-BcHcPyIo.d.ts → index-DLwcuCN_.d.ts} +86 -7
  142. package/dist/index.d.ts +18 -17
  143. package/dist/index.js +27 -25
  144. package/dist/{init-GG6Jh8HD.js → init-5TXNji88.js} +5 -5
  145. package/dist/{init-DeMYsnYJ.js → init-B-4t1NzC.js} +4 -4
  146. package/dist/{instance-options-Omfd793B.d.ts → instance-options-CU0YQCLH.d.ts} +1 -1
  147. package/dist/{instance-snapshot-Cxq4ygFc.js → instance-snapshot-CjcwnEiV.js} +20 -14
  148. package/dist/jwt/index.d.ts +83 -5
  149. package/dist/jwt/index.js +143 -5
  150. package/dist/{kernel-5JatXyND.js → kernel-DVExUwkp.js} +138 -12
  151. package/dist/kysely/index.d.ts +3 -3
  152. package/dist/kysely/index.js +1 -1
  153. package/dist/load-DrMHXzgN.js +1 -0
  154. package/dist/{load-DFS_ry0W.js → load-DxroEzH1.js} +2 -2
  155. package/dist/{login-Dfe5RlYk.js → login-ClSJh5t5.js} +4 -4
  156. package/dist/{login-imhuwvn3.js → login-WC9HPJpU.js} +6 -10
  157. package/dist/{manifest-C8IzW3Do.js → manifest-B79YuF2T.js} +6 -2
  158. package/dist/{manifest-mx5ghSFM.d.ts → manifest-BVhExYhw.d.ts} +23 -2
  159. package/dist/{manifest-CtKR3GXL.js → manifest-Dv6q4i5s.js} +54 -35
  160. package/dist/{manifest-schema-C0kK_8V0.js → manifest-schema-Cv492Qev.js} +37 -7
  161. package/dist/{map-claims-D3oRmTk0.js → map-claims-etGIS_Dv.js} +14 -11
  162. package/dist/{map-error-TCAdw-eW.js → map-error-BQGyDm_M.js} +1 -1
  163. package/dist/mcp/index.d.ts +64 -10
  164. package/dist/mcp/index.js +151 -22
  165. package/dist/{migrate-BShP7Vf4.js → migrate-Dodel0IJ.js} +77 -24
  166. package/dist/nest/index.d.ts +5 -5
  167. package/dist/nest/index.js +3 -3
  168. package/dist/next/index.d.ts +9 -9
  169. package/dist/next/index.js +5 -5
  170. package/dist/next/plugin.d.ts +1 -1
  171. package/dist/next/plugin.js +2 -2
  172. package/dist/node/index.d.ts +5 -5
  173. package/dist/node/index.js +2 -2
  174. package/dist/openai/index.d.ts +5 -5
  175. package/dist/openai/index.js +3 -3
  176. package/dist/openapi/index.d.ts +14 -4
  177. package/dist/openapi/index.js +1 -1
  178. package/dist/{openapi-ahr8rHu3.js → openapi-DMocl1bh.js} +4 -4
  179. package/dist/{openapi-B7HZ0f-r.js → openapi-Ddb4628T.js} +2 -7
  180. package/dist/{openapi-DTaEmTSW.js → openapi-ztVaux6j.js} +8 -8
  181. package/dist/{operation-findings-DgATDpvh.js → operation-findings-kRcEp8lE.js} +1 -1
  182. package/dist/{operations-CxybZErY.d.ts → operations-BNLes61x.d.ts} +1 -1
  183. package/dist/orpc/index.d.ts +6 -6
  184. package/dist/orpc/index.js +4 -4
  185. package/dist/otel/index.d.ts +3 -3
  186. package/dist/otel/index.js +1 -1
  187. package/dist/{output-Dyw8fyPF.js → output-DgSDLrta.js} +7 -3
  188. package/dist/{output-files-DhRBBE4n.js → output-files-CCMdcFWb.js} +2 -2
  189. package/dist/output-files-DPAY7-GX.js +1 -0
  190. package/dist/{ownership-BatFgAA4.js → ownership-Z2LpxsGa.js} +1349 -883
  191. package/dist/parse-Ddhz2xf4.js +148 -0
  192. package/dist/{parse-local-manifest-CVSs6J9I.js → parse-local-manifest-T1Q8X3A2.js} +24 -1
  193. package/dist/{parse-local-manifest-DgqtruPn.d.ts → parse-local-manifest-e4mdwAKd.d.ts} +1 -1
  194. package/dist/pdp/index.d.ts +3 -3
  195. package/dist/pdp/index.js +7 -3
  196. package/dist/peer-12Q5I_RH.js +976 -0
  197. package/dist/{peer-CRvC7Hg1.js → peer-DOzzMfZL.js} +1 -1
  198. package/dist/{permdock-B9JxkBwC.js → permdock-BfWEeMqk.js} +177 -49
  199. package/dist/{permdock-D7eeLJER.d.ts → permdock-Dco6dyCK.d.ts} +34 -5
  200. package/dist/{permission-registry-Br4jSNVi.js → permission-registry-DpPtSKNZ.js} +1 -1
  201. package/dist/{vocabulary-D6lPdb4Z.d.ts → permission-types-DhNEmoRG.d.ts} +4 -62
  202. package/dist/{permissions-oEWfl-kl.d.ts → permissions-CoqCOfJ3.d.ts} +2 -1
  203. package/dist/{permissions-B-wCP5ZC.js → permissions-CyH2MV_B.js} +1 -1
  204. package/dist/{permissions-CZKiUfFM.js → permissions-DArULThq.js} +4 -4
  205. package/dist/pkce-5h8NgMQJ.js +21 -0
  206. package/dist/{policies-CO1oOymN.js → policies-B2lZIurj.js} +3 -3
  207. package/dist/{policy-Czo4n3Hs.d.ts → policy-B7dg_yzu.d.ts} +2 -2
  208. package/dist/{policy-DLZJ5gAp.js → policy-DaJy4nK4.js} +17 -8
  209. package/dist/{policy-from-catalog-DzhEc3Y9.js → policy-from-catalog-DFWYkNdu.js} +9 -9
  210. package/dist/{policy-types-DzwivBgR.d.ts → policy-types-B-F-qAZk.d.ts} +109 -5
  211. package/dist/postgres-store-BL9M_CA1.js +1001 -0
  212. package/dist/{postgrest-NUqZT-RB.d.ts → postgrest-CYacM_u7.d.ts} +12 -1
  213. package/dist/{postgrest-CW0IqC-U.js → postgrest-r5faDIzD.js} +47 -5
  214. package/dist/{powersync-BHfuehf3.js → powersync-13odBwiM.js} +3 -3
  215. package/dist/powersync-53ryOZip.js +1059 -0
  216. package/dist/powersync-CExtTLyA.js +1 -0
  217. package/dist/preset/index.js +1 -1
  218. package/dist/{preset-DZdU0tne.js → preset-CHTbd-DQ.js} +2 -2
  219. package/dist/prisma/index.d.ts +2 -2
  220. package/dist/prisma/index.js +1 -1
  221. package/dist/{problem-details-DXlt-vks.d.ts → problem-details-Tcfmj3bV.d.ts} +1 -1
  222. package/dist/prompt-DwtVemER.js +935 -0
  223. package/dist/{protected-DEPHc2xV.d.ts → protected-BwZYL1X_.d.ts} +6 -5
  224. package/dist/{protected-DfjY5mLA.js → protected-DXE3cQYg.js} +2 -2
  225. package/dist/{provider-CC-u3bYP.js → provider-BQsTYYy0.js} +2 -2
  226. package/dist/{provider-DMVt6yYn.d.ts → provider-Csk-THAn.d.ts} +1 -1
  227. package/dist/{provider-store-B5Yrkhzr.js → provider-store-IgqQipCO.js} +2 -2
  228. package/dist/{pull-BgIfno6w.js → pull-CN5OLxrF.js} +7 -7
  229. package/dist/pull-Cty6Ovyu.js +1 -0
  230. package/dist/{push-CmFVBOeI.js → push-tVdG8dUL.js} +54 -14
  231. package/dist/{pushed-policy-BImMTTIM.d.ts → pushed-policy-BbcY9r_4.d.ts} +1 -1
  232. package/dist/{pushed-policy-DobP7AHI.js → pushed-policy-CmYeSQqq.js} +1 -1
  233. package/dist/react/index.d.ts +6 -6
  234. package/dist/react/index.js +3 -3
  235. package/dist/react/provider-client.d.ts +1 -1
  236. package/dist/react/provider-client.js +1 -1
  237. package/dist/react-native/index.d.ts +25 -11
  238. package/dist/react-native/index.js +214 -24
  239. package/dist/{refs-K6eWUJ0H.js → refs-CNJBiTFo.js} +15 -1
  240. package/dist/{replay-D7iKcLFe.d.ts → replay-DCDD_ZfL.d.ts} +1 -1
  241. package/dist/{request-context-BTRTG7OT.js → request-context-BykKLmyE.js} +2 -2
  242. package/dist/resend/index.d.ts +4 -4
  243. package/dist/{retire-CALjIQ7e.js → retire-Wj6dkyDE.js} +2 -2
  244. package/dist/{rls-BA8an5Ap.js → rls-Ck_PocSp.js} +32 -8
  245. package/dist/{rls-j6t43t7n.js → rls-CxBZb4rZ.js} +478 -534
  246. package/dist/{role-builder-CXbis5-X.js → role-builder-C1VJzvcr.js} +3 -3
  247. package/dist/rolldown-runtime-C3I60J0A.js +4 -0
  248. package/dist/{rpc-aPyNi6tA.js → rpc-Bk1bE-ch.js} +1 -1
  249. package/dist/run-Bz7DXGEv.js +1 -0
  250. package/dist/{run-ticket-sxFI6LAk.js → run-ticket-B5d_63Ma.js} +22 -1
  251. package/dist/{run-ticket-BjhTOi6u.d.ts → run-ticket-BpNi7BCi.d.ts} +8 -3
  252. package/dist/{run-DOfMtc9V.js → run-uLD2aWuO.js} +7 -7
  253. package/dist/{runtime-D3VTAiCA.js → runtime-Vif3_-zf.js} +1 -1
  254. package/dist/{saas-FO-Q8oj0.js → saas-Az_Kz-4D.js} +7 -7
  255. package/dist/{scan-BOI5tJ-6.js → scan-DSljDE1Y.js} +1 -1
  256. package/dist/{schema-yLuBWWsh.js → schema-gIcCx7zM.js} +1 -1
  257. package/dist/scim/index.d.ts +3 -2
  258. package/dist/scim/index.js +3 -1
  259. package/dist/scim-C7JYhySg.js +44 -0
  260. package/dist/{scim-ClHtpyV3.js → scim-YNieBO1U.js} +3 -537
  261. package/dist/{scopes-CUPSjo9q.js → scopes-BHsc-wp-.js} +1 -1
  262. package/dist/server/index.d.ts +11 -11
  263. package/dist/server/index.js +7 -7
  264. package/dist/{server-DqCT4CgZ.js → server-Bnga6I50.js} +3 -3
  265. package/dist/{server-types-BLd4MnBX.d.ts → server-types-C4gZUEZy.d.ts} +9 -9
  266. package/dist/{shared-DvvFzYXe.js → shared-C8LjUdVU.js} +1 -1
  267. package/dist/{shared-CD11nBbC.js → shared-fMKOv8hP.js} +46 -39
  268. package/dist/{sink-Bj_lDUDq.d.ts → sink-Cp_Eot9W.d.ts} +4 -4
  269. package/dist/{skills-B6lVdD_W.js → skills-Dcjw9_1C.js} +5 -5
  270. package/dist/{skills-CTYwkl44.js → skills-g_3BS9NC.js} +3 -3
  271. package/dist/{snapshot-CXUWfsNy.js → snapshot-CbGmYiJx.js} +4 -4
  272. package/dist/{snapshot-cache-DZHQ0KF6.js → snapshot-cache-DT2Kx1F8.js} +1 -1
  273. package/dist/{snapshot-cache-DqK9eDmM.d.ts → snapshot-cache-Pahd3IYJ.d.ts} +1 -1
  274. package/dist/solid/index.d.ts +6 -5
  275. package/dist/solid/index.js +4 -4
  276. package/dist/solid-start/index.d.ts +6 -6
  277. package/dist/solid-start/index.js +3 -3
  278. package/dist/{sources-vs5dGOsS.js → sources-B-zYB4GS.js} +111 -25
  279. package/dist/{sources-BV9j0DeZ.d.ts → sources-DEEuGb8S.d.ts} +63 -14
  280. package/dist/sources-qoIJQrJv.js +11 -0
  281. package/dist/{sql-B5T1IL83.js → sql-B96movIM.js} +5 -1
  282. package/dist/sql-CDEPCA0g.d.ts +10 -0
  283. package/dist/{src-DLfUWFAI.js → src-DLFrtrrC.js} +154 -53
  284. package/dist/ssf/index.d.ts +4 -4
  285. package/dist/ssf/index.js +640 -211
  286. package/dist/{standard-webhooks-6lg8v_is.d.ts → standard-webhooks-B_qRg0ws.d.ts} +2 -2
  287. package/dist/{store-4u_hxjWa.js → store-DSP9oGvh.js} +15 -7
  288. package/dist/{store-options-BqEakYRa.js → store-options-B_poyYvg.js} +6 -6
  289. package/dist/{stores-ClZUgeoP.d.ts → stores-BAZwSYZA.d.ts} +6 -5
  290. package/dist/{stores-BbsD4fAR.js → stores-BqEuHC05.js} +2 -2
  291. package/dist/{stream-7-xmnf3U.d.ts → stream-2Vwhl7Er.d.ts} +2 -2
  292. package/dist/{style-Uao76wO7.js → style-Cqo7-73x.js} +1 -0
  293. package/dist/{style-DiKWnAvn.js → style-Ds1gNm77.js} +1 -1
  294. package/dist/supabase/index.d.ts +8 -7
  295. package/dist/supabase/index.js +5 -5
  296. package/dist/supabase/middleware.d.ts +6 -6
  297. package/dist/supabase/middleware.js +6 -6
  298. package/dist/{supabase-Dxlp8A94.js → supabase--0aJdLEd.js} +9 -7
  299. package/dist/{supabase-9pqI57pW.js → supabase-Bqp7iIY2.js} +3 -3
  300. package/dist/supabase-hook-DJxC4PoP.js +1 -0
  301. package/dist/{supabase-hook-DdDQhMlw.js → supabase-hook-Dg0SrQWR.js} +1069 -123
  302. package/dist/supautils-MESd81bF.js +689 -0
  303. package/dist/{support-session-C6xJQYut.js → support-session-Cna49-3f.js} +2 -2
  304. package/dist/svelte/index.d.ts +5 -5
  305. package/dist/svelte/index.js +5 -5
  306. package/dist/svelte/runtime.d.ts +3 -3
  307. package/dist/svelte/runtime.js +3 -3
  308. package/dist/svelte/source.d.ts +5 -5
  309. package/dist/svelte/source.js +2 -2
  310. package/dist/sveltekit/index.d.ts +6 -6
  311. package/dist/sveltekit/index.js +2 -2
  312. package/dist/tanstack-start/index.d.ts +6 -6
  313. package/dist/tanstack-start/index.js +2 -2
  314. package/dist/{tenancy-DN2QAx9z.js → tenancy-CmeBQ6Nv.js} +12 -3
  315. package/dist/terminal/index.d.ts +6 -6
  316. package/dist/terminal/index.js +3 -3
  317. package/dist/testing/core.d.ts +2 -0
  318. package/dist/testing/core.js +1 -0
  319. package/dist/testing/fixtures/index.d.ts +12 -0
  320. package/dist/testing/fixtures/index.js +770 -0
  321. package/dist/testing/index.d.ts +41 -174
  322. package/dist/testing/index.js +241 -731
  323. package/dist/testing/saas/index.d.ts +5 -5
  324. package/dist/testing/saas/index.js +2 -2
  325. package/dist/testing/saas/permissions.d.ts +1 -1
  326. package/dist/testing/saas/permissions.js +1 -1
  327. package/dist/text-diff-DhITNCnD.js +444 -0
  328. package/dist/{token-BLZcjQgt.js → token-2qYDvXz2.js} +1 -1
  329. package/dist/{tool-refusal-CMLN5xhn.js → tool-refusal-reAhIzdl.js} +1 -1
  330. package/dist/trpc/index.d.ts +6 -6
  331. package/dist/trpc/index.js +3 -3
  332. package/dist/{types-5Ut_pbKy.d.ts → types-BWZybqs9.d.ts} +112 -8
  333. package/dist/{types-CZTnPFzM.d.ts → types-BXMYB7BY.d.ts} +2 -2
  334. package/dist/{types-CdlxsYQh.d.ts → types-BfVmNJO5.d.ts} +14 -3
  335. package/dist/{types-BqAKcRNW.d.ts → types-CIeZcG8v.d.ts} +2 -2
  336. package/dist/{types-BNORmDM8.d.ts → types-CKV71kKh.d.ts} +4 -4
  337. package/dist/{types-tIgIeIKJ.d.ts → types-CQVEQawv.d.ts} +4 -4
  338. package/dist/{types-BjV-fqcA.d.ts → types-CeIscIKp.d.ts} +4 -4
  339. package/dist/{types-_sHy8BQf.d.ts → types-CfiKC5aN.d.ts} +1 -1
  340. package/dist/{types-ClZaWzfb.d.ts → types-D3A19w4A.d.ts} +8 -4
  341. package/dist/{types-C8-KNsFf.d.ts → types-DBHftjgS.d.ts} +15 -8
  342. package/dist/{types-CCpc2Dcv.d.ts → types-DC44-hqb.d.ts} +2 -2
  343. package/dist/{types-fbZ7JEXr.d.ts → types-DXmwu78Z.d.ts} +4 -4
  344. package/dist/{types-DiQjupG2.d.ts → types-cTos-H7p.d.ts} +2 -2
  345. package/dist/{types-DX0LaKTb.d.ts → types-g7Oy6Zg4.d.ts} +3 -3
  346. package/dist/unplugin/index.d.ts +1 -1
  347. package/dist/unplugin/index.js +2 -2
  348. package/dist/{usage-T5mXq98v.js → usage-Bybmck7f.js} +7 -7
  349. package/dist/{usage-DHtE8j4E.js → usage-CDaLXCfL.js} +2 -2
  350. package/dist/usage-y-kBNdqs.js +1 -0
  351. package/dist/{validation-error-Bg5Tpluk.d.ts → validation-error-CQpoquwj.d.ts} +1 -1
  352. package/dist/{verify-DbCL9bnB.js → verify-pe8rL_Qw.js} +350 -83
  353. package/dist/{views-DTIIO-oQ.js → views-BB8E9dTP.js} +1 -1
  354. package/dist/vocabulary-Bg3eeT2H.d.ts +67 -0
  355. package/dist/vue/index.d.ts +6 -5
  356. package/dist/vue/index.js +4 -4
  357. package/dist/{waiter-CKy4MQSY.d.ts → waiter-DwEyouan.d.ts} +2 -2
  358. package/dist/watch-Bd9mx3rd.js +1 -0
  359. package/dist/{watch-CszoTJMq.js → watch-C-4VmFlL.js} +3 -3
  360. package/dist/webmcp/index.d.ts +2 -2
  361. package/dist/webmcp/index.js +2 -2
  362. package/dist/{where-scope-Dv-WTP-w.js → where-scope-wq2coopv.js} +41 -21
  363. package/dist/{who-can-D0QoYbEb.js → who-can-BwNsI_Js.js} +6 -6
  364. package/dist/workflow/index.d.ts +3 -3
  365. package/dist/workflow/index.js +5 -5
  366. package/dist/workflow-sdk/index.d.ts +5 -5
  367. package/dist/{wrap-Bd1Tejur.d.ts → wrap-B6R0cMRL.d.ts} +2 -2
  368. package/dist/{wrap-gX61EtpB.js → wrap-CiSc_KCq.js} +8 -2
  369. package/package.json +22 -11
  370. package/schemas/cli-result-v1.json +1 -0
  371. package/schemas/cloud-api-v1.json +152 -7
  372. package/schemas/connector-v1.json +8 -0
  373. package/schemas/supabase-claims-v1.json +5 -0
  374. package/schemas/supabase-manifest-v1.json +276 -75
  375. package/skills/permdock/SKILL.md +1 -0
  376. package/skills/permdock-agents/references/runtimes.md +3 -1
  377. package/skills/permdock-approvals/references/stores-and-resume.md +2 -1
  378. package/skills/permdock-data/references/queries-and-rls.md +5 -2
  379. package/skills/permdock-tenancy/SKILL.md +1 -1
  380. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -0
  381. package/skills/permdock-wire/references/adapters.md +14 -0
  382. package/skills/permdock-wire/references/policy-options.md +1 -0
  383. package/dist/catalog-DjhMYYCq.js +0 -1
  384. package/dist/collect-FlXJlhus.js +0 -1
  385. package/dist/index-D8EovfsP.d.ts +0 -91
  386. package/dist/load-BxEtwlBS.js +0 -1
  387. package/dist/output-files-B3IZJksC.js +0 -1
  388. package/dist/parse-Cxq0WxrA.js +0 -53
  389. package/dist/peer-C8swJ2GH.js +0 -50
  390. package/dist/powersync-CbzkqL_M.js +0 -1
  391. package/dist/powersync-bYUDLOAO.js +0 -538
  392. package/dist/prompt-DfZLJLIn.js +0 -32
  393. package/dist/pull-ByOks_Tg.js +0 -1
  394. package/dist/run-CNsApDpd.js +0 -1
  395. package/dist/supabase-hook-CXcGpHqq.js +0 -1
  396. package/dist/supautils-B6HYL9eL.js +0 -91
  397. package/dist/text-diff-BQcUapOb.js +0 -15
  398. package/dist/usage-CHOtwL19.js +0 -1
  399. package/dist/watch-Cb-NcaUw.js +0 -1
@@ -1,8 +1,9 @@
1
- import { Nn as Decision, j as PolicyVocabulary, nr as Membership } from "./policy-types-DzwivBgR.js";
2
- import { r as Role, w as Permission } from "./vocabulary-D6lPdb4Z.js";
3
- import { r as DescribeOptions, t as DecisionDescription } from "./describe-BZUsixiL.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-BNORmDM8.js";
5
- import { r as ProtectedProps } from "./types-tIgIeIKJ.js";
1
+ import { Ln as Decision, j as PolicyVocabulary, or as Membership } from "./policy-types-B-F-qAZk.js";
2
+ import { u as Permission } from "./permission-types-DhNEmoRG.js";
3
+ import { r as Role } from "./vocabulary-Bg3eeT2H.js";
4
+ import { r as DescribeOptions, t as DecisionDescription } from "./describe-O0SwYIK8.js";
5
+ 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-CKV71kKh.js";
6
+ import { r as ProtectedProps } from "./types-CQVEQawv.js";
6
7
  import { ReactNode } from "react";
7
8
  //#region src/react/hooks.d.ts
8
9
  declare function usePermDock<V extends PolicyVocabulary = PolicyVocabulary>(): ClientPermDock<V>;
@@ -1,5 +1,5 @@
1
- import { n as storeOf } from "./store-options-BqEakYRa.js";
2
- import { c as rolesView, d as subjectView, f as tenantView, i as gateView, l as scopedTenant, n as describeWith, o as permissionSet, r as filterResult, s as protectedView, t as approvalHandle, u as slotContent } from "./views-DTIIO-oQ.js";
1
+ import { n as storeOf } from "./store-options-B_poyYvg.js";
2
+ import { c as rolesView, d as subjectView, f as tenantView, i as gateView, l as scopedTenant, n as describeWith, o as permissionSet, r as filterResult, s as protectedView, t as approvalHandle, u as slotContent } from "./views-BB8E9dTP.js";
3
3
  import { a as PermDockUiContext, i as PermDockStoreContext, r as PermDockSnapshotPromiseContext } from "./live-options-BaAFCIiu.js";
4
4
  import { Suspense, use, useMemo, useSyncExternalStore } from "react";
5
5
  import { jsx } from "react/jsx-runtime";
@@ -1,6 +1,6 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
- import { t as emptySnapshot } from "./from-snapshot-D2lZt4Dd.js";
3
- import { t as adapterStore } from "./store-options-BqEakYRa.js";
2
+ import { t as emptySnapshot } from "./from-snapshot-Bz469dIh.js";
3
+ import { t as adapterStore } from "./store-options-B_poyYvg.js";
4
4
  import { a as PermDockUiContext, i as PermDockStoreContext, n as useKeyed, r as PermDockSnapshotPromiseContext, t as useLiveOptions } from "./live-options-BaAFCIiu.js";
5
5
  import { useLayoutEffect, useMemo } from "react";
6
6
  import { jsx } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- import { n as PermDockProviderProps } from "./types-tIgIeIKJ.js";
1
+ import { n as PermDockProviderProps } from "./types-CQVEQawv.js";
2
2
  import { ReactElement } from "react";
3
3
  //#region src/react/provider.d.ts
4
4
  declare function PermDockProvider(props: PermDockProviderProps): ReactElement;
@@ -1,6 +1,6 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
- import { t as emptySnapshot } from "./from-snapshot-D2lZt4Dd.js";
3
- import { i as isPromiseLike, t as adapterStore } from "./store-options-BqEakYRa.js";
2
+ import { t as emptySnapshot } from "./from-snapshot-Bz469dIh.js";
3
+ import { i as isPromiseLike, t as adapterStore } from "./store-options-B_poyYvg.js";
4
4
  //#region src/client/provider-store.ts
5
5
  /**
6
6
  * Store options that read `read()` on every request, so a rotated token, a
@@ -1,15 +1,15 @@
1
1
  import { r as isRecord } from "./compact-CAf557ZB.js";
2
- import { t as catalogFingerprint } from "./catalog-fingerprint-CCP0-yQS.js";
3
- import { a as describeError } from "./errors-CWTY6uih.js";
2
+ import { t as catalogFingerprint } from "./catalog-fingerprint-C144oW4M.js";
3
+ import { a as describeError } from "./errors-DpP_U6Bf.js";
4
4
  import { s as writeFileEnsuringDir } from "./files-D_JIzUrP.js";
5
5
  import { s as cliVersion } from "./version-CEbQ5UeM.js";
6
- import { a as formatCatalogJson } from "./catalog-doc-C9wjsfNY.js";
6
+ import { o as formatCatalogJson } from "./catalog-doc-CV9s6B1S.js";
7
7
  import { t as catalogPath } from "./catalog-path-CnI0XTFK.js";
8
- import { t as parseSupabaseManifest } from "./manifest-C8IzW3Do.js";
9
- import { t as parseCatalog } from "./parse-Cxq0WxrA.js";
8
+ import { n as parseSupabaseManifest } from "./manifest-B79YuF2T.js";
9
+ import { t as parseCatalog } from "./parse-Ddhz2xf4.js";
10
10
  import { t as POLICY_NOT_PUBLISHED } from "./problem-types-CJ2325SZ.js";
11
- import { n as httpRequest, t as authFailure } from "./http-DXJ37RDA.js";
12
- import { l as cloudUrl, n as cliRuntime, o as readAuth } from "./auth-DRLEizbL.js";
11
+ import { n as httpRequest, t as authFailure } from "./http-Ca3Sr5x1.js";
12
+ import { l as cloudUrl, n as cliRuntime, o as readAuth } from "./auth-CscUX8Sy.js";
13
13
  import { n as formatManifestJson } from "./manifest-json-CAGzls-C.js";
14
14
  import { existsSync, readFileSync, rmSync } from "node:fs";
15
15
  import { relative, resolve } from "node:path";
@@ -0,0 +1 @@
1
+ export { n as runCloudPull } from "./pull-CN5OLxrF.js";
@@ -1,13 +1,15 @@
1
- import { t as catalogFingerprint } from "./catalog-fingerprint-CCP0-yQS.js";
2
- import { a as describeError } from "./errors-CWTY6uih.js";
1
+ import { r as isRecord } from "./compact-CAf557ZB.js";
2
+ import { n as PermDockValidationError } from "./validation-error-ZfUHbKvf.js";
3
+ import { t as catalogFingerprint } from "./catalog-fingerprint-C144oW4M.js";
4
+ import { a as describeError, n as CliError } from "./errors-DpP_U6Bf.js";
3
5
  import { s as cliVersion } from "./version-CEbQ5UeM.js";
4
- import { i as loadConfiguredPolicy } from "./load-DFS_ry0W.js";
5
- import { t as parseSupabaseManifest } from "./manifest-C8IzW3Do.js";
6
- import { t as parseCatalog } from "./parse-Cxq0WxrA.js";
7
- import { r as pushedPolicy } from "./pushed-policy-DobP7AHI.js";
8
- import { n as runCatalog } from "./catalog-BECMPrwc.js";
9
- import { n as httpRequest, t as authFailure } from "./http-DXJ37RDA.js";
10
- import { a as pushAuth, l as cloudUrl, n as cliRuntime, u as firstNonEmpty } from "./auth-DRLEizbL.js";
6
+ import { i as loadConfiguredPolicy } from "./load-DxroEzH1.js";
7
+ import { n as parseSupabaseManifest } from "./manifest-B79YuF2T.js";
8
+ import { t as parseCatalog } from "./parse-Ddhz2xf4.js";
9
+ import { r as pushedPolicy } from "./pushed-policy-CmYeSQqq.js";
10
+ import { n as runCatalog } from "./catalog-D69WhFii.js";
11
+ import { n as httpRequest, t as authFailure } from "./http-Ca3Sr5x1.js";
12
+ import { a as pushAuth, l as cloudUrl, n as cliRuntime, u as firstNonEmpty } from "./auth-CscUX8Sy.js";
11
13
  import "./manifest-json-CAGzls-C.js";
12
14
  import { existsSync, readFileSync } from "node:fs";
13
15
  import { resolve } from "node:path";
@@ -34,6 +36,43 @@ function readManifest(cwd, flag) {
34
36
  };
35
37
  }
36
38
  }
39
+ /** The built catalog, or a `catalog_invalid` problem listing every issue with its path. */
40
+ function checkedCatalog(output) {
41
+ try {
42
+ return parseCatalog(output);
43
+ } catch (error) {
44
+ if (!(error instanceof PermDockValidationError)) throw error;
45
+ const issues = error.issues.map((issue) => ({
46
+ path: (issue.path ?? []).map(String).join("."),
47
+ message: issue.message
48
+ }));
49
+ throw new CliError("failed", [`permdock cloud push: the catalog has ${String(issues.length)} ${issues.length === 1 ? "issue" : "issues"}`, ...issues.map((issue) => ` ${issue.path}: ${issue.message}`)].join("\n"), {
50
+ code: "catalog_invalid",
51
+ extensions: { issues }
52
+ });
53
+ }
54
+ }
55
+ /** The environment `GET /v1/environment` names for the push credential. */
56
+ async function keyEnvironment(io, url, bearer) {
57
+ const response = await httpRequest(io, {
58
+ url: `${url}/v1/environment`,
59
+ service: "PermDock Cloud",
60
+ headers: {
61
+ authorization: `Bearer ${bearer}`,
62
+ accept: "application/json"
63
+ }
64
+ });
65
+ const body = response.ok ? await response.json().catch(() => void 0) : void 0;
66
+ const environment = isRecord(body) ? body["environment"] : void 0;
67
+ if (typeof environment === "string" && environment !== "") return environment;
68
+ throw new CliError("failed", `permdock cloud push: PermDock Cloud did not name the credential's environment (HTTP ${String(response.status)})`, { next: [{
69
+ command: "permdock cloud push --project <environment>",
70
+ when: "to name the environment"
71
+ }, {
72
+ command: "export PERMDOCK_CLOUD_ENV=<environment>",
73
+ when: "in CI"
74
+ }] });
75
+ }
37
76
  async function runCloud(input) {
38
77
  const manifest = readManifest(input.cwd, input.manifest);
39
78
  if (!manifest.ok) return {
@@ -53,7 +92,7 @@ async function runCloud(input) {
53
92
  code: built.code,
54
93
  output: built.output
55
94
  };
56
- const catalog = parseCatalog(built.output);
95
+ const catalog = checkedCatalog(built.output);
57
96
  const fingerprint = catalogFingerprint(catalog);
58
97
  const loaded = await loadConfiguredPolicy(input.cwd, input.config.policy);
59
98
  const policy = loaded === void 0 ? void 0 : pushedPolicy(loaded);
@@ -68,17 +107,18 @@ async function runCloud(input) {
68
107
  manifest: manifest.manifest !== void 0
69
108
  };
70
109
  const url = cloudUrl(input.url, input.env);
71
- const environment = firstNonEmpty(input.project, input.env["PERMDOCK_CLOUD_ENV"], input.env["VERCEL_ENV"], "production");
72
- const describe = (verb) => input.json ? JSON.stringify({
110
+ const configured = firstNonEmpty(input.project, input.env["PERMDOCK_CLOUD_ENV"]);
111
+ const describe = (verb, environment) => input.json ? JSON.stringify({
73
112
  ...summary,
74
113
  environment,
75
114
  status: verb
76
115
  }) : `${verb} catalog ${fingerprint} (${String(summary.permissions)} permissions, ${String(hostable.length)} hostable${summary.manifest ? ", with manifest" : ""}) to ${environment}`;
77
116
  if (input.dryRun) return {
78
117
  code: 0,
79
- output: describe("would push")
118
+ output: describe("would push", configured === "" ? "the key's environment" : configured)
80
119
  };
81
120
  const auth = await pushAuth(url, input.env, cliRuntime(input.io, input.env));
121
+ const environment = configured === "" ? await keyEnvironment(input.io, url, auth.bearer) : configured;
82
122
  const response = await httpRequest(input.io, {
83
123
  url: `${url}/v1/environments/${encodeURIComponent(environment)}/catalog`,
84
124
  method: "POST",
@@ -109,7 +149,7 @@ async function runCloud(input) {
109
149
  };
110
150
  return {
111
151
  code: 0,
112
- output: describe("pushed")
152
+ output: describe("pushed", environment)
113
153
  };
114
154
  }
115
155
  //#endregion
@@ -1,4 +1,4 @@
1
- import { Gt as SnapshotScope, H as WireValidity, T as Policy, _ as GrantLimit, a as ApprovalRequirement, bn as Grantee, jn as AppObligation, lr as Condition, u as BreakGlassSpec, v as GrantMeta } from "./policy-types-DzwivBgR.js";
1
+ import { Fn as AppObligation, H as WireValidity, T as Policy, Yt as SnapshotScope, _ as GrantLimit, a as ApprovalRequirement, mr as Condition, u as BreakGlassSpec, v as GrantMeta, wn as Grantee } from "./policy-types-B-F-qAZk.js";
2
2
  import { t as JsonSchemaNode } from "./json-schema-CN_iLFH2.js";
3
3
  //#region src/catalog/pushed-policy.d.ts
4
4
  /**
@@ -3,7 +3,7 @@ import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
3
  import { n as PermDockValidationError } from "./validation-error-ZfUHbKvf.js";
4
4
  import { n as RFC3339_PATTERN } from "./time-DkWjdL98.js";
5
5
  import { i as wireValidity } from "./validity-CZ7-y0Cj.js";
6
- import { n as snapshotScopes } from "./instance-snapshot-Cxq4ygFc.js";
6
+ import { n as snapshotScopes } from "./instance-snapshot-CjcwnEiV.js";
7
7
  import { n as copyJson, r as forbiddenKeyPath, t as checkSchema } from "./json-schema-B-vAwlde.js";
8
8
  //#region src/catalog/pushed-policy.ts
9
9
  const strings = {
@@ -1,8 +1,8 @@
1
- import { n as requiredPlans } from "../problem-details-DXlt-vks.js";
2
- import { i as describe } from "../describe-BZUsixiL.js";
1
+ import { n as requiredPlans } from "../problem-details-Tcfmj3bV.js";
2
+ import { i as describe } from "../describe-O0SwYIK8.js";
3
3
  import { t as approvalHeaders } from "../headers-CIbDTUTK.js";
4
- import { a as FilterResult, c as PermissionSet, f as SubjectView, i as ClientStatus, l as PermissionState, n as ApprovalState, o as GateMode, p as TenantView, r as ClientPermDock, s as GateView, t as ApprovalHandle } from "../types-BNORmDM8.js";
5
- import { n as PermDockProviderProps, r as ProtectedProps, t as PermDockDefaults } from "../types-tIgIeIKJ.js";
6
- import { a as useDescribe, c as useMemberships, d as usePermissions, f as useRoles, i as useAssignableRoles, l as usePermDock, m as useTenant, n as useApproval, o as useFilter, p as useSubject, r as useAssignablePermissions, s as useGate, t as Protected, u as usePermission } from "../protected-DEPHc2xV.js";
7
- import { t as PermDockProvider } from "../provider-DMVt6yYn.js";
4
+ import { a as FilterResult, c as PermissionSet, f as SubjectView, i as ClientStatus, l as PermissionState, n as ApprovalState, o as GateMode, p as TenantView, r as ClientPermDock, s as GateView, t as ApprovalHandle } from "../types-CKV71kKh.js";
5
+ import { n as PermDockProviderProps, r as ProtectedProps, t as PermDockDefaults } from "../types-CQVEQawv.js";
6
+ import { a as useDescribe, c as useMemberships, d as usePermissions, f as useRoles, i as useAssignableRoles, l as usePermDock, m as useTenant, n as useApproval, o as useFilter, p as useSubject, r as useAssignablePermissions, s as useGate, t as Protected, u as usePermission } from "../protected-BwZYL1X_.js";
7
+ import { t as PermDockProvider } from "../provider-Csk-THAn.js";
8
8
  export { type ApprovalHandle, type ApprovalState, type ClientPermDock, type ClientStatus, type FilterResult, type GateMode, type GateView, type PermDockDefaults, PermDockProvider, type PermDockProviderProps, type PermissionSet, type PermissionState, Protected, type ProtectedProps, type SubjectView, type TenantView, approvalHeaders, describe, requiredPlans, useApproval, useAssignablePermissions, useAssignableRoles, useDescribe, useFilter, useGate, useMemberships, usePermDock, usePermission, usePermissions, useRoles, useSubject, useTenant };
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { r as requiredPlans } from "../problem-details-cn5X30gZ.js";
3
- import { t as describe } from "../describe-BybMRY7A.js";
3
+ import { t as describe } from "../describe-DZlnEtLy.js";
4
4
  import { t as approvalHeaders } from "../headers-BIjfMaoC.js";
5
- import { a as useDescribe, c as useMemberships, d as usePermissions, f as useRoles, i as useAssignableRoles, l as usePermDock, m as useTenant, n as useApproval, o as useFilter, p as useSubject, r as useAssignablePermissions, s as useGate, t as Protected, u as usePermission } from "../protected-DfjY5mLA.js";
6
- import { t as PermDockProvider } from "../provider-CC-u3bYP.js";
5
+ import { a as useDescribe, c as useMemberships, d as usePermissions, f as useRoles, i as useAssignableRoles, l as usePermDock, m as useTenant, n as useApproval, o as useFilter, p as useSubject, r as useAssignablePermissions, s as useGate, t as Protected, u as usePermission } from "../protected-DXE3cQYg.js";
6
+ import { t as PermDockProvider } from "../provider-BQsTYYy0.js";
7
7
  export { PermDockProvider, Protected, approvalHeaders, describe, requiredPlans, useApproval, useAssignablePermissions, useAssignableRoles, useDescribe, useFilter, useGate, useMemberships, usePermDock, usePermission, usePermissions, useRoles, useSubject, useTenant };
@@ -1,2 +1,2 @@
1
- import { t as PermDockProvider } from "../provider-DMVt6yYn.js";
1
+ import { t as PermDockProvider } from "../provider-Csk-THAn.js";
2
2
  export { PermDockProvider };
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export { t as PermDockProvider } from "../provider-CC-u3bYP.js";
2
+ export { t as PermDockProvider } from "../provider-BQsTYYy0.js";
@@ -1,13 +1,13 @@
1
- import { Bt as LocalSnapshotManifest, Rt as Instant, Vt as Snapshot, Zn as CustomRole, nr as Membership, ot as SnapshotSource } from "../policy-types-DzwivBgR.js";
2
- import { w as Permission } from "../vocabulary-D6lPdb4Z.js";
3
- import { n as requiredPlans } from "../problem-details-DXlt-vks.js";
4
- import { i as describe } from "../describe-BZUsixiL.js";
5
- import { t as parseLocalSnapshotManifest } from "../parse-local-manifest-DgqtruPn.js";
1
+ import { Bt as LocalMembershipRows, Gt as Snapshot, Ht as LocalRowValue, Rt as Instant, Ut as LocalSnapshotManifest, Vt as LocalRowColumn, Wt as LocalSnapshotRows, or as Membership, ot as SnapshotSource, tr as CustomRole } from "../policy-types-B-F-qAZk.js";
2
+ import { u as Permission } from "../permission-types-DhNEmoRG.js";
3
+ import { n as requiredPlans } from "../problem-details-Tcfmj3bV.js";
4
+ import { i as describe } from "../describe-O0SwYIK8.js";
5
+ import { t as parseLocalSnapshotManifest } from "../parse-local-manifest-e4mdwAKd.js";
6
6
  import { t as approvalHeaders } from "../headers-CIbDTUTK.js";
7
- import { a as FilterResult, c as PermissionSet, f as SubjectView, i as ClientStatus, l as PermissionState, m as ClientStore, n as ApprovalState, o as GateMode, p as TenantView, r as ClientPermDock, s as GateView, t as ApprovalHandle } from "../types-BNORmDM8.js";
8
- import { r as ProtectedProps, t as PermDockDefaults } from "../types-tIgIeIKJ.js";
9
- import { a as useDescribe, c as useMemberships, d as usePermissions, f as useRoles, i as useAssignableRoles, l as usePermDock, m as useTenant, n as useApproval, o as useFilter, p as useSubject, r as useAssignablePermissions, s as useGate, t as Protected, u as usePermission } from "../protected-DEPHc2xV.js";
10
- import { a as SubscribeOnline, i as SubscribeForeground, n as ReactNativePermDockProviderProps, r as SnapshotStorage, t as NativeRevalidate } from "../types-BjV-fqcA.js";
7
+ import { a as FilterResult, c as PermissionSet, f as SubjectView, i as ClientStatus, l as PermissionState, m as ClientStore, n as ApprovalState, o as GateMode, p as TenantView, r as ClientPermDock, s as GateView, t as ApprovalHandle } from "../types-CKV71kKh.js";
8
+ import { r as ProtectedProps, t as PermDockDefaults } from "../types-CQVEQawv.js";
9
+ import { a as useDescribe, c as useMemberships, d as usePermissions, f as useRoles, i as useAssignableRoles, l as usePermDock, m as useTenant, n as useApproval, o as useFilter, p as useSubject, r as useAssignablePermissions, s as useGate, t as Protected, u as usePermission } from "../protected-BwZYL1X_.js";
10
+ import { a as SubscribeOnline, i as SubscribeForeground, n as ReactNativePermDockProviderProps, r as SnapshotStorage, t as NativeRevalidate } from "../types-CeIscIKp.js";
11
11
  import { ReactElement } from "react";
12
12
  //#region src/react-native/guards.d.ts
13
13
  /** `true` once the provider has a snapshot to answer from: storage was read or a seed was given. Hide the splash screen on it. */
@@ -77,10 +77,24 @@ type PowerSyncSourceOptions<Q extends string> = {
77
77
  readonly queries: Readonly<Record<Q, PowerSyncQuery>>;
78
78
  /** Maps the rows of each query to the signed-in user's memberships and roles. */
79
79
  readonly read: (rows: Readonly<Record<Q, readonly unknown[]>>) => LocalSnapshotData;
80
+ } | {
81
+ /** The manifest `permdock powersync generate` writes, with its `rows` section. */
82
+ readonly manifest: LocalSnapshotManifest;
83
+ /** The signed-in user's id; the source reads the rows `manifest.rows` names. */
84
+ readonly user: string;
85
+ /** The active tenant: the first scope's instance the UI shows. */
86
+ readonly tenant?: string;
87
+ /** Attributes conditions read, such as `claims` for `principal.claims.team_ids`. */
88
+ readonly attributes?: Readonly<Record<string, unknown>>;
89
+ readonly queries?: undefined;
90
+ readonly read?: undefined;
80
91
  };
81
92
  /**
82
93
  * A `localSnapshot` source over a PowerSync database: `get` runs every query
83
- * with `db.getAll`, and a `db.watch` per query reports changes. A watch
94
+ * with `db.getAll`, and a `db.watch` per query reports changes. Without
95
+ * `queries` and `read`, it reads the tables `manifest.rows` names: the
96
+ * memberships of every source with null roles dropped, the global roles and
97
+ * the custom roles with their levels. A watch
84
98
  * result with unchanged content re-renders nothing (`connectSource`). The source
85
99
  * takes the database as an argument; `permdock/react-native` never imports
86
100
  * `@powersync/*`.
@@ -156,4 +170,4 @@ type NativeStoreOptions = Omit<ReactNativePermDockProviderProps, "children" | "h
156
170
  export declare function connectSource(store: ClientStore, source: SnapshotSource, subscribeForeground?: SubscribeForeground): () => void;
157
171
  export declare function nativeStore(options: NativeStoreOptions): ClientStore;
158
172
  //#endregion
159
- export { type AppStateModule, type ApprovalHandle, type ApprovalState, type ClientPermDock, type ClientStatus, type FilterResult, type GateMode, type GateView, type LocalSnapshotData, type LocalSnapshotManifest, type LocalSnapshotOptions, type MmkvInstance, type NativeRevalidate, type NetInfoModule, type PermDockDefaults, type PermissionSet, type PermissionState, type PowerSyncQuery, type PowerSyncSourceOptions, type PowerSyncWatchable, Protected, type ProtectedProps, type ReactNativePermDockProviderProps, type SecureStoreModule, type SnapshotSource, type SnapshotStorage, type SubjectView, type SubscribeForeground, type SubscribeOnline, type TenantView, approvalHeaders, describe, parseLocalSnapshotManifest, requiredPlans, useApproval, useAssignablePermissions, useAssignableRoles, useDescribe, useFilter, useGate, useMemberships, usePermDock, usePermission, usePermissions, useRoles, useSubject, useTenant };
173
+ export { type AppStateModule, type ApprovalHandle, type ApprovalState, type ClientPermDock, type ClientStatus, type FilterResult, type GateMode, type GateView, type LocalMembershipRows, type LocalRowColumn, type LocalRowValue, type LocalSnapshotData, type LocalSnapshotManifest, type LocalSnapshotOptions, type LocalSnapshotRows, type MmkvInstance, type NativeRevalidate, type NetInfoModule, type PermDockDefaults, type PermissionSet, type PermissionState, type PowerSyncQuery, type PowerSyncSourceOptions, type PowerSyncWatchable, Protected, type ProtectedProps, type ReactNativePermDockProviderProps, type SecureStoreModule, type SnapshotSource, type SnapshotStorage, type SubjectView, type SubscribeForeground, type SubscribeOnline, type TenantView, approvalHeaders, describe, parseLocalSnapshotManifest, requiredPlans, useApproval, useAssignablePermissions, useAssignableRoles, useDescribe, useFilter, useGate, useMemberships, usePermDock, usePermission, usePermissions, useRoles, useSubject, useTenant };
@@ -1,20 +1,20 @@
1
1
  "use client";
2
- import { t as compact } from "../compact-CAf557ZB.js";
2
+ import { r as isRecord, t as compact } from "../compact-CAf557ZB.js";
3
3
  import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
4
4
  import { r as requiredPlans } from "../problem-details-cn5X30gZ.js";
5
- import { t as describe } from "../describe-BybMRY7A.js";
5
+ import { t as describe } from "../describe-DZlnEtLy.js";
6
6
  import { n as isThenable } from "../thenable-yD7SabqG.js";
7
7
  import { h as secondsAt, m as rfc3339 } from "../time-DkWjdL98.js";
8
- import { a as normalizeMemberships, d as scopeList, m as tenantOf$1, o as resolveScope } from "../scopes-CUPSjo9q.js";
9
- import { o as flattenGrantee } from "../grantee-Cn1HyUsI.js";
10
- import { d as resolveActiveTenant } from "../tenancy-DN2QAx9z.js";
11
- import { i as bindConditionRefs, n as parseSnapshot } from "../snapshot-CXUWfsNy.js";
12
- import { r as heldRoleNames, t as emptySnapshot } from "../from-snapshot-D2lZt4Dd.js";
13
- import { t as parseLocalSnapshotManifest } from "../parse-local-manifest-CVSs6J9I.js";
8
+ import { f as scopeList, h as tenantOf$1, o as normalizeMemberships, s as resolveScope } from "../scopes-BHsc-wp-.js";
9
+ import { o as flattenGrantee } from "../grantee-BrRANrpT.js";
10
+ import { d as resolveActiveTenant } from "../tenancy-CmeBQ6Nv.js";
11
+ import { i as bindConditionRefs, n as parseSnapshot } from "../snapshot-CbGmYiJx.js";
12
+ import { r as heldRoleNames, t as emptySnapshot } from "../from-snapshot-Bz469dIh.js";
13
+ import { t as parseLocalSnapshotManifest } from "../parse-local-manifest-T1Q8X3A2.js";
14
14
  import { t as approvalHeaders } from "../headers-BIjfMaoC.js";
15
- import { n as storeOf, r as isJws, t as adapterStore } from "../store-options-BqEakYRa.js";
15
+ import { n as storeOf, r as isJws, t as adapterStore } from "../store-options-B_poyYvg.js";
16
16
  import { a as PermDockUiContext, i as PermDockStoreContext, n as useKeyed, t as useLiveOptions } from "../live-options-BaAFCIiu.js";
17
- import { a as useDescribe, c as useMemberships, d as usePermissions, f as useRoles, i as useAssignableRoles, l as usePermDock, m as useTenant, n as useApproval, o as useFilter, p as useSubject, r as useAssignablePermissions, s as useGate, t as Protected, u as usePermission } from "../protected-DfjY5mLA.js";
17
+ import { a as useDescribe, c as useMemberships, d as usePermissions, f as useRoles, i as useAssignableRoles, l as usePermDock, m as useTenant, n as useApproval, o as useFilter, p as useSubject, r as useAssignablePermissions, s as useGate, t as Protected, u as usePermission } from "../protected-DXE3cQYg.js";
18
18
  import { useEffect, useMemo, useRef } from "react";
19
19
  import { jsx } from "react/jsx-runtime";
20
20
  //#region src/react-native/guards.ts
@@ -123,7 +123,7 @@ function isList(value) {
123
123
  return Array.isArray(value);
124
124
  }
125
125
  function customScope(role, scopes) {
126
- if (role.scope === "global") return "global";
126
+ if (role.scope === "global") return role.shared === true ? void 0 : "global";
127
127
  if (role.scope !== void 0) return resolveScope(scopes, role.scope);
128
128
  return role.team === void 0 ? scopes[0]?.name : scopes[1]?.name;
129
129
  }
@@ -175,7 +175,9 @@ function buildLocalSnapshot(manifest, data, at) {
175
175
  }
176
176
  for (const membership of memberships) if (scoped.every((item) => declared.has(item.role) && membership.roles.includes(item.role) && (typeof item.scope === "string" ? membership.scope === item.scope : membership.on !== void 0))) attach(grant, membership);
177
177
  }
178
- const custom = (data.customRoles ?? []).filter((role) => role !== null && typeof role === "object" && typeof role.name === "string" && !declared.has(role.name));
178
+ const formed = (data.customRoles ?? []).filter((role) => role !== null && typeof role === "object" && typeof role.name === "string" && !declared.has(role.name));
179
+ const sharedNames = new Set(formed.filter((role) => role.shared === true).map((role) => role.name));
180
+ const custom = formed.filter((role) => role.shared === true || role.scope === "global" || !sharedNames.has(role.name));
179
181
  for (const role of custom) {
180
182
  const scope = customScope(role, scopes);
181
183
  const table = scope !== void 0 && Object.hasOwn(manifest.custom, scope) ? manifest.custom[scope] : void 0;
@@ -186,7 +188,7 @@ function buildLocalSnapshot(manifest, data, at) {
186
188
  continue;
187
189
  }
188
190
  const id = role.team ?? role.id;
189
- for (const membership of memberships) if (membership.scope === scope && typeof role.tenant === "string" && tenantOf$1(membership, scopes) === role.tenant && (id === void 0 || membership.id === id) && membership.roles.includes(role.name)) for (const grant of resolved) attach(grant, membership);
191
+ for (const membership of memberships) if (membership.scope === scope && (role.shared === true ? role.tenant === void 0 && id === void 0 && tenantOf$1(membership, scopes) !== void 0 : typeof role.tenant === "string" && tenantOf$1(membership, scopes) === role.tenant) && (id === void 0 || membership.id === id) && membership.roles.includes(role.name)) for (const grant of resolved) attach(grant, membership);
190
192
  }
191
193
  const roles = subject.principal === null ? [] : heldRoleNames(subject, tenant, scopes, { rank: manifest.rank ?? [] }, now);
192
194
  return freezeDeep(compact({
@@ -214,33 +216,221 @@ function localSnapshot(options) {
214
216
  });
215
217
  }
216
218
  //#endregion
219
+ //#region src/react-native/powersync-rows.ts
220
+ function isColumns(roles) {
221
+ return Array.isArray(roles);
222
+ }
223
+ function quoted(name) {
224
+ return `"${name.replaceAll("\"", "\"\"")}"`;
225
+ }
226
+ /** The synced tables `rows` names, each read whole: the subject streams sync only the user's own rows. */
227
+ function rowTables(rows) {
228
+ const tables = /* @__PURE__ */ new Set();
229
+ const column = (item) => {
230
+ if ("through" in item) tables.add(item.through.table);
231
+ };
232
+ for (const source of rows.memberships) {
233
+ tables.add(source.table);
234
+ column(source.user);
235
+ if (isColumns(source.roles)) for (const item of source.roles) column(item);
236
+ }
237
+ if (rows.roles !== void 0) {
238
+ tables.add(rows.roles.table);
239
+ for (const item of rows.roles.roles) column(item);
240
+ }
241
+ if (rows.customRoles !== void 0) {
242
+ tables.add(rows.customRoles.permissions);
243
+ tables.add(rows.customRoles.includes);
244
+ }
245
+ return [...tables];
246
+ }
247
+ function rowQuery(table) {
248
+ return `SELECT * FROM ${quoted(table)}`;
249
+ }
250
+ function text(value) {
251
+ if (typeof value === "string") return value === "" ? void 0 : value;
252
+ return typeof value === "number" || typeof value === "bigint" ? String(value) : void 0;
253
+ }
254
+ function isSet(row, column) {
255
+ const value = column === void 0 ? void 0 : row[column];
256
+ return value !== void 0 && value !== null;
257
+ }
258
+ function rowsOf(tables, table) {
259
+ return (tables[table] ?? []).filter(isRecord);
260
+ }
261
+ /** The value a column holds, read through its referenced table or map; `undefined` for none. */
262
+ function columnValue(row, column, tables) {
263
+ const raw = text(row[column.column]);
264
+ if (raw === void 0) return;
265
+ if ("through" in column) {
266
+ const { through } = column;
267
+ const target = rowsOf(tables, through.table).find((item) => text(item[through.id]) === raw);
268
+ return target === void 0 ? void 0 : text(target[through.column]);
269
+ }
270
+ if ("map" in column) return Object.hasOwn(column.map, raw) ? column.map[raw] ?? void 0 : void 0;
271
+ return raw;
272
+ }
273
+ function membershipsOf(source, tables, user) {
274
+ const byInstance = /* @__PURE__ */ new Map();
275
+ for (const row of rowsOf(tables, source.table)) {
276
+ if (columnValue(row, source.user, tables) !== user || isSet(row, source.expiresAt) || isSet(row, source.disabledAt)) continue;
277
+ const scope = "value" in source.scope ? source.scope.value : text(row[source.scope.column]);
278
+ const id = text(row[source.id]);
279
+ const via = source.via === void 0 ? void 0 : "value" in source.via ? source.via.value : text(row[source.via.column]);
280
+ const roles = isColumns(source.roles) ? source.roles.flatMap((column) => {
281
+ const key = columnValue(row, column, tables);
282
+ return key === void 0 ? [] : [key];
283
+ }) : source.roles.value;
284
+ if (scope === void 0 || id === void 0 || roles.length === 0) continue;
285
+ const key = JSON.stringify([
286
+ scope,
287
+ id,
288
+ via ?? null
289
+ ]);
290
+ const entry = byInstance.get(key) ?? {
291
+ scope,
292
+ id,
293
+ via,
294
+ roles: /* @__PURE__ */ new Set()
295
+ };
296
+ for (const role of roles) entry.roles.add(role);
297
+ byInstance.set(key, entry);
298
+ }
299
+ return [...byInstance.values()].map((entry) => compact({
300
+ scope: entry.scope,
301
+ id: entry.id,
302
+ roles: [...entry.roles].toSorted(),
303
+ via: entry.via
304
+ }));
305
+ }
306
+ function roleKeyOf(row) {
307
+ const name = text(row["role"]);
308
+ const scope = text(row["scope"]);
309
+ return name === void 0 || scope === void 0 ? void 0 : {
310
+ tenant: text(row["tenant_id"]),
311
+ scope,
312
+ id: text(row["scope_id"]),
313
+ name
314
+ };
315
+ }
316
+ function customRoleOf({ key, grants, includes }) {
317
+ const body = {
318
+ name: key.name,
319
+ grants,
320
+ includes
321
+ };
322
+ if (key.scope === "global") return {
323
+ ...body,
324
+ scope: "global"
325
+ };
326
+ if (key.tenant === void 0) return {
327
+ ...body,
328
+ shared: true,
329
+ scope: key.scope
330
+ };
331
+ return compact({
332
+ ...body,
333
+ tenant: key.tenant,
334
+ scope: key.scope,
335
+ id: key.id
336
+ });
337
+ }
338
+ /** Custom roles from the custom-role rows: a tenant role, a shared role (no tenant) or a global role. */
339
+ function customRolesOf(permissions, includes) {
340
+ const roles = /* @__PURE__ */ new Map();
341
+ const entry = (key) => {
342
+ const id = JSON.stringify([
343
+ key.tenant ?? null,
344
+ key.scope,
345
+ key.id ?? null,
346
+ key.name
347
+ ]);
348
+ const found = roles.get(id) ?? {
349
+ key,
350
+ grants: [],
351
+ includes: []
352
+ };
353
+ roles.set(id, found);
354
+ return found;
355
+ };
356
+ for (const row of permissions) {
357
+ const key = roleKeyOf(row);
358
+ const permission = text(row["permission"]);
359
+ const effect = row["effect"] === "deny" ? "deny" : "allow";
360
+ const level = text(row["level"]);
361
+ if (key !== void 0 && permission !== void 0) entry(key).grants.push(compact({
362
+ permission,
363
+ effect,
364
+ level
365
+ }));
366
+ }
367
+ for (const row of includes) {
368
+ const key = roleKeyOf(row);
369
+ const include = text(row["include_role"]);
370
+ if (key !== void 0 && include !== void 0) entry(key).includes.push(include);
371
+ }
372
+ return [...roles.values()].map(customRoleOf);
373
+ }
374
+ /** The user's memberships, global roles and custom roles from the rows of the tables `rows` names. */
375
+ function readRows(rows, tables, principal) {
376
+ const { id: user, tenant, attributes } = principal;
377
+ const memberships = rows.memberships.flatMap((source) => membershipsOf(source, tables, user));
378
+ const global = rows.roles;
379
+ const roles = global === void 0 ? [] : rowsOf(tables, global.table).flatMap((row) => text(row[global.user]) === user ? global.roles.flatMap((column) => {
380
+ const key = columnValue(row, column, tables);
381
+ return key === void 0 ? [] : [key];
382
+ }) : []);
383
+ const custom = rows.customRoles;
384
+ return {
385
+ principal: {
386
+ id: user,
387
+ roles: [...new Set(roles)].toSorted(),
388
+ memberships,
389
+ ...tenant === void 0 ? {} : { tenant },
390
+ ...attributes === void 0 ? {} : { attributes }
391
+ },
392
+ ...custom === void 0 ? {} : { customRoles: customRolesOf(rowsOf(tables, custom.permissions), rowsOf(tables, custom.includes)) }
393
+ };
394
+ }
395
+ //#endregion
217
396
  //#region src/react-native/powersync.ts
397
+ function planOf(options) {
398
+ if (!("user" in options)) return options;
399
+ const { rows } = options.manifest;
400
+ if (rows === void 0) throw new TypeError("PermDock: powerSyncSource needs queries and read, or a manifest with rows (run permdock powersync generate with powersync.manifest)");
401
+ const principal = compact({
402
+ id: options.user,
403
+ tenant: options.tenant,
404
+ attributes: options.attributes
405
+ });
406
+ return {
407
+ queries: Object.fromEntries(rowTables(rows).map((table) => [table, { sql: rowQuery(table) }])),
408
+ read: (tables) => readRows(rows, tables, principal)
409
+ };
410
+ }
218
411
  /**
219
412
  * A `localSnapshot` source over a PowerSync database: `get` runs every query
220
- * with `db.getAll`, and a `db.watch` per query reports changes. A watch
413
+ * with `db.getAll`, and a `db.watch` per query reports changes. Without
414
+ * `queries` and `read`, it reads the tables `manifest.rows` names: the
415
+ * memberships of every source with null roles dropped, the global roles and
416
+ * the custom roles with their levels. A watch
221
417
  * result with unchanged content re-renders nothing (`connectSource`). The source
222
418
  * takes the database as an argument; `permdock/react-native` never imports
223
419
  * `@powersync/*`.
224
420
  */
225
421
  function powerSyncSource(db, options) {
226
- const names = Object.keys(options.queries);
422
+ const plan = planOf(options);
227
423
  return localSnapshot({
228
424
  manifest: options.manifest,
229
425
  read: async () => {
230
- const results = await Promise.all(names.map(async (name) => {
231
- const query = options.queries[name];
426
+ const results = await Promise.all(Object.entries(plan.queries).map(async ([name, query]) => {
232
427
  return [name, await db.getAll(query.sql, [...query.parameters ?? []])];
233
428
  }));
234
- const rows = {};
235
- for (const [name, list] of results) rows[name] = list;
236
- return options.read(rows);
429
+ return plan.read(Object.fromEntries(results));
237
430
  },
238
431
  subscribe: (listener) => {
239
432
  const controller = new AbortController();
240
- for (const name of names) {
241
- const query = options.queries[name];
242
- db.watch(query.sql, [...query.parameters ?? []], { onResult: listener }, { signal: controller.signal });
243
- }
433
+ for (const query of Object.values(plan.queries)) db.watch(query.sql, [...query.parameters ?? []], { onResult: listener }, { signal: controller.signal });
244
434
  return () => {
245
435
  controller.abort();
246
436
  };
@@ -68,6 +68,20 @@ function createRef(path) {
68
68
  }
69
69
  const principal = createRef("principal");
70
70
  const context = createRef("context");
71
+ /**
72
+ * `principal.claims.<path>` for a dot path such as `team_ids` or
73
+ * `attrs.region`, typed `SubjectRef` under `noUncheckedIndexedAccess` and
74
+ * `noPropertyAccessFromIndexSignature`.
75
+ */
76
+ function claim(path) {
77
+ const segments = splitPath(path);
78
+ if (segments.length === 0) throw new Error("PermDock: claim() needs a claim path");
79
+ return createRef([
80
+ "principal",
81
+ "claims",
82
+ ...segments
83
+ ].join("."));
84
+ }
71
85
  function isSubjectRef(value) {
72
86
  if (value === null || typeof value !== "object" || !("ref" in value) || typeof value.ref !== "string") return false;
73
87
  const ref = value.ref;
@@ -88,4 +102,4 @@ function resolveConditionRef(ref, resolved) {
88
102
  }
89
103
  }
90
104
  //#endregion
91
- export { hasConditionOp as a, isConditionRef as c, resolveConditionRef as i, isSqlFunctionField as l, isSubjectRef as n, isCondition as o, principal as r, isConditionDate as s, context as t, parentHop as u };
105
+ export { resolveConditionRef as a, isConditionDate as c, parentHop as d, principal as i, isConditionRef as l, context as n, hasConditionOp as o, isSubjectRef as r, isCondition as s, claim as t, isSqlFunctionField as u };
@@ -1,4 +1,4 @@
1
- import { l as ReplayStore } from "./types-DiQjupG2.js";
1
+ import { l as ReplayStore } from "./types-cTos-H7p.js";
2
2
  //#region src/ssf/replay.d.ts
3
3
  declare function memoryReplayStore(): ReplayStore;
4
4
  //#endregion