permdock 0.7.0 → 0.9.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 (483) hide show
  1. package/README.md +1 -3
  2. package/dist/a2a/index.d.ts +7 -7
  3. package/dist/a2a/index.js +8 -8
  4. package/dist/action-result-BcudBQOF.d.ts +19 -0
  5. package/dist/{adapter-context-CRhqyzCk.js → adapter-context-CIQpQxbE.js} +8 -2
  6. package/dist/{adoption-scan-D-feE7BE.js → adoption-scan-Ch07MdxN.js} +5 -5
  7. package/dist/agent/index.d.ts +2 -2
  8. package/dist/agent/index.js +1 -1
  9. package/dist/ai-sdk/index.d.ts +19 -13
  10. package/dist/ai-sdk/index.js +6 -6
  11. package/dist/{app-data-MuyzVqX8.js → app-data-UNNm07jV.js} +10 -7
  12. package/dist/{approval-header-CJACtHkv.js → approval-header-8QV6MU4H.js} +6 -3
  13. package/dist/{approval-prompt-K0faOLFp.d.ts → approval-prompt-3BqWczTt.d.ts} +13 -11
  14. package/dist/{approval-prompt-Dg5LeAcT.js → approval-prompt-B8hQY69x.js} +5 -6
  15. package/dist/approvals/index.d.ts +4 -4
  16. package/dist/approvals/index.js +6 -6
  17. package/dist/{approvals-CMRfsbBh.js → approvals-DnIBTuXE.js} +66 -42
  18. package/dist/{approvers-CqPOLD-o.js → approvers-B4r0N_Uz.js} +8 -2
  19. package/dist/{arazzo-ClrF3PVb.js → arazzo-BpS7LnV0.js} +2 -2
  20. package/dist/{arazzo-rdeJ8n1J.js → arazzo-CmQaGPkM.js} +6 -6
  21. package/dist/{args-CC3OwyHW.js → args-0FrVs5EH.js} +14 -7
  22. package/dist/astro/index.d.ts +30 -12
  23. package/dist/astro/index.js +2 -2
  24. package/dist/{audience-BrMs8c4o.js → audience-DTjR8xet.js} +8 -8
  25. package/dist/{auth-CscUX8Sy.js → auth--yPyZNgr.js} +19 -7
  26. package/dist/authzen/index.d.ts +34 -28
  27. package/dist/authzen/index.js +23 -20
  28. package/dist/{automation-DOtAFWdy.d.ts → automation-C6Jg75xq.d.ts} +42 -32
  29. package/dist/{automation-ySsxp_Yp.js → automation-x3KEUusw.js} +22 -21
  30. package/dist/better-auth/index.d.ts +2 -2
  31. package/dist/better-auth/index.js +13 -7
  32. package/dist/better-supabase/index.d.ts +357 -227
  33. package/dist/better-supabase/index.js +219 -140
  34. package/dist/{bind-D1nO6fiC.js → bind-BNQA9JK9.js} +26 -10
  35. package/dist/{bind-JDuvxjuW.d.ts → bind-YYjvfpB9.d.ts} +32 -12
  36. package/dist/{body-CH5of8Ne.js → body-CJQwYVa8.js} +3 -3
  37. package/dist/{body-text-QcXok_SI.js → body-text-DQhcmqdY.js} +8 -4
  38. package/dist/{boundary-BM8a_P6E.js → boundary-BV3O1eud.js} +8 -2
  39. package/dist/{boundary-BmHxVH1J.d.ts → boundary-C9ck-3uK.d.ts} +13 -4
  40. package/dist/{budget-NbEtbJC_.js → budget-BELja5A9.js} +6 -3
  41. package/dist/{budget-JqcRqyhK.d.ts → budget-hYsPz_yE.d.ts} +6 -3
  42. package/dist/{build-instance-DxE7czo9.js → build-instance-BWXqwQYU.js} +3 -3
  43. package/dist/{capability-L7NnfhiE.js → capability-BqX94r07.js} +31 -25
  44. package/dist/{capability-D4UC9TTW.d.ts → capability-Di9tiUvi.d.ts} +41 -29
  45. package/dist/{casbin-BHijLuHY.js → casbin-B7_yS-oo.js} +2 -2
  46. package/dist/{casbin-BW9pS47J.js → casbin-bHyIxTNQ.js} +16 -8
  47. package/dist/{casl-CmJlgziS.js → casl-C4OINZHI.js} +2 -2
  48. package/dist/{casl-UbI8v-Wq.js → casl-CHHoCldP.js} +19 -10
  49. package/dist/catalog/index.d.ts +51 -30
  50. package/dist/catalog/index.js +18 -15
  51. package/dist/{catalog-D69WhFii.js → catalog-CGlSwU6j.js} +20 -19
  52. package/dist/catalog-D3oS2GH3.js +1 -0
  53. package/dist/{catalog-BaMQfQ6Y.js → catalog-amPDr0JQ.js} +3 -3
  54. package/dist/{catalog-doc-CV9s6B1S.js → catalog-doc-DjMKzJp9.js} +28 -14
  55. package/dist/{catalog-fingerprint-C144oW4M.js → catalog-fingerprint-e6aCWosn.js} +18 -14
  56. package/dist/catalog-operations-DeHTrJSV.js +60 -0
  57. package/dist/{challenge-nGWma08S.js → challenge-DImNcR7B.js} +48 -27
  58. package/dist/chat/index.d.ts +1 -1
  59. package/dist/chat/index.js +13 -10
  60. package/dist/chat-sdk/index.d.ts +44 -26
  61. package/dist/chat-sdk/index.js +17 -17
  62. package/dist/{checks-BC_0mPIq.js → checks-CGkP3Z7A.js} +4 -1
  63. package/dist/{claims-map-7oQ3ue4X.js → claims-map-CKkoAAYF.js} +5 -2
  64. package/dist/{claims-map-Ca-QX8C6.d.ts → claims-map-D1Pb5oRq.d.ts} +8 -5
  65. package/dist/claude-agent/index.d.ts +6 -6
  66. package/dist/claude-agent/index.js +6 -3
  67. package/dist/clerk/index.d.ts +11 -7
  68. package/dist/clerk/index.js +6 -6
  69. package/dist/cli/bin.js +4 -4
  70. package/dist/cli/index.d.ts +82 -7
  71. package/dist/cli/index.js +6 -6
  72. package/dist/{clients-C7zLFuWT.d.ts → clients-C_NOET3z.d.ts} +5 -5
  73. package/dist/{clients-DjU5ABMy.js → clients-DYr3U86j.js} +3 -3
  74. package/dist/cloud/index.d.ts +84 -52
  75. package/dist/cloud/index.js +53 -39
  76. package/dist/{cloud-CO8pYtwr.js → cloud-3kWfjnYy.js} +4 -5
  77. package/dist/{codemod-BP6n8N9L.js → codemod-Bv5i-Mzo.js} +523 -201
  78. package/dist/{codemod-i4N2BhDc.js → codemod-D9Aiii1r.js} +3 -4
  79. package/dist/{collect-DNm3oKOk.js → collect-B80GYEot.js} +4 -5
  80. package/dist/collect-D-eroIfV.js +1 -0
  81. package/dist/{collect-BaWeMjwV.js → collect-WCl8cJQV.js} +26 -63
  82. package/dist/{compare-pfyVnBjE.js → compare-DTfyUunF.js} +2 -2
  83. package/dist/compile/index.d.ts +2 -2
  84. package/dist/compile/index.js +1 -1
  85. package/dist/{compile-COM2VKuN.d.ts → compile-BEklRUYo.d.ts} +36 -12
  86. package/dist/{compile-BAEO5bOk.js → compile-EzEMB-7v.js} +77 -33
  87. package/dist/{completion-BNdVf7X2.js → completion-_bc0OUQ-.js} +17 -8
  88. package/dist/config-BwPBfN0t.js +108 -0
  89. package/dist/{config-DGZzMV1B.js → config-D5XrLWpk.js} +2 -2
  90. package/dist/{config-report-Cm7UITNA.js → config-report-BmWIskD7.js} +9 -6
  91. package/dist/config-shape-ykV0Vm2n.js +134 -0
  92. package/dist/{connection-DjhIJSs2.js → connection-B72dg5Q2.js} +23 -22
  93. package/dist/{connector-schema-_VCSsdtD.js → connector-schema-CYLQNMYq.js} +3 -2
  94. package/dist/{context--uM9V3Ui.js → context-BnIzxTNE.js} +4 -3
  95. package/dist/convex/index.d.ts +13 -7
  96. package/dist/convex/index.js +9 -6
  97. package/dist/{core-CQkE8Esr.d.ts → core-CFepFiDP.d.ts} +49 -22
  98. package/dist/{core-B5-w6Kw9.js → core-DzVINFbU.js} +26 -20
  99. package/dist/{create-Cb86Z8Im.js → create-6EwRQlig.js} +10 -7
  100. package/dist/{create-DJrlhEp9.js → create-BLPKnJKa.js} +35 -25
  101. package/dist/{create-UTnUVETj.d.ts → create-BPUopdfL.d.ts} +70 -37
  102. package/dist/{create-QHuuPw3q.d.ts → create-BamXmeob.d.ts} +37 -29
  103. package/dist/{create-B2-CQqCI.d.ts → create-DBvUsgzK.d.ts} +49 -28
  104. package/dist/{credential-CIM7wHwA.js → credential-CyyyvCsL.js} +41 -38
  105. package/dist/{credentials-BpuTwd7a.js → credentials-CdDxp7jN.js} +6 -6
  106. package/dist/{deciding-columns-DRo2QM6E.js → deciding-columns-NB4wcyBf.js} +2 -2
  107. package/dist/{delegation-C5rOdTp5.js → delegation-CDB6_keF.js} +31 -22
  108. package/dist/delivery/index.d.ts +4 -4
  109. package/dist/delivery/index.js +5 -5
  110. package/dist/{delivery-rwOKLWRm.js → delivery-BupfvJIV.js} +34 -22
  111. package/dist/{delivery-event-xX4obB8F.js → delivery-event-JioK5YbS.js} +6 -6
  112. package/dist/denied-text-DHldhVUv.d.ts +22 -0
  113. package/dist/{describe-DZlnEtLy.js → describe-Bb4hGK5d.js} +5 -5
  114. package/dist/{describe-O0SwYIK8.d.ts → describe-BbFPBSms.d.ts} +5 -5
  115. package/dist/{device-BARQ8eYG.js → device-BwbJNmb2.js} +11 -8
  116. package/dist/{diff-Btr1c1Ow.js → diff-BwR1JdP2.js} +2 -2
  117. package/dist/{diff-DzT-xD13.js → diff-CQegtBAo.js} +22 -13
  118. package/dist/{digest-B3kc_PgQ.d.ts → digest-8Yx2CchM.d.ts} +3 -3
  119. package/dist/{doctor-BU1szn63.js → doctor-ClRVAtXQ.js} +287 -135
  120. package/dist/{doctor-BoK_y0KO.js → doctor-LPMYjSqO.js} +4 -4
  121. package/dist/drizzle/index.d.ts +33 -19
  122. package/dist/drizzle/index.js +17 -9
  123. package/dist/elysia/index.d.ts +17 -11
  124. package/dist/elysia/index.js +5 -5
  125. package/dist/{errors-BKy0EfhN.js → errors-B6R_lg2a.js} +13 -4
  126. package/dist/{errors-B_Qg9D3e.d.ts → errors-BIM4MFsJ.d.ts} +22 -6
  127. package/dist/{errors-BWXBMaKK.d.ts → errors-CHwoRRpB.d.ts} +4 -1
  128. package/dist/{errors-DpP_U6Bf.js → errors-Vpu6rKHl.js} +13 -10
  129. package/dist/{evaluate-B_oqFbWC.js → evaluate-BAmf_AQd.js} +153 -82
  130. package/dist/{evaluations-BCddEOfO.d.ts → evaluations-DOWuBpWv.d.ts} +11 -5
  131. package/dist/{evaluations-DReoiVBw.js → evaluations-IBceAeKT.js} +40 -19
  132. package/dist/eve/index.d.ts +9 -6
  133. package/dist/eve/index.js +4 -4
  134. package/dist/{event-time-CsegxXxB.js → event-time-BGy48400.js} +8 -4
  135. package/dist/{expiry-D4_YKRKD.js → expiry-6XByK0dm.js} +8 -5
  136. package/dist/express/index.d.ts +9 -6
  137. package/dist/express/index.js +9 -6
  138. package/dist/fastify/index.d.ts +16 -10
  139. package/dist/fastify/index.js +8 -5
  140. package/dist/{fetch-adapter-CuhyYwC1.d.ts → fetch-adapter-BIbBAtPZ.d.ts} +9 -6
  141. package/dist/{fetch-adapter-De-u6vhJ.js → fetch-adapter-dPTgJVHd.js} +14 -11
  142. package/dist/fields-D0vUI6dq.js +498 -0
  143. package/dist/{files-acUbNwWt.js → files-B3AA05f1.js} +8 -5
  144. package/dist/{files-D_JIzUrP.js → files-BSjrtIHw.js} +11 -4
  145. package/dist/{fixtures-BTMW6zgU.js → fixtures-A1_sp_tR.js} +15 -6
  146. package/dist/{flags-aaeRAdiD.js → flags-DXjoTVbS.js} +2 -2
  147. package/dist/{freeze-CrU8nQeX.js → freeze-jjan0lCv.js} +4 -1
  148. package/dist/{from-snapshot-Bz469dIh.js → from-snapshot-DCakWRsr.js} +18 -15
  149. package/dist/gen-BFfzZSLH.js +58 -0
  150. package/dist/gen-BtfFWGbz.js +827 -0
  151. package/dist/{generate-3FNO5P5Q.js → generate-CRVV5V7l.js} +14 -8
  152. package/dist/generate-CezbCaTI.js +275 -0
  153. package/dist/{grantee-BrRANrpT.js → grantee-Dke-9rd1.js} +4 -4
  154. package/dist/{grantee-conditions-C6P1Tvol.js → grantee-conditions-BrYPe-w0.js} +12 -12
  155. package/dist/{grantee-match-0RtHWQDx.js → grantee-match-7RZZvoT_.js} +12 -6
  156. package/dist/{graph-sql-B-dsAT6j.d.ts → graph-sql-BwFC4Qjs.d.ts} +3 -3
  157. package/dist/h3/index.d.ts +10 -7
  158. package/dist/h3/index.js +3 -3
  159. package/dist/headers-B9jQxjtW.d.ts +10 -0
  160. package/dist/{helpers-DY3vXuGs.js → helpers-DJicaG6f.js} +40 -28
  161. package/dist/hono/index.d.ts +16 -10
  162. package/dist/hono/index.js +5 -5
  163. package/dist/{hosted-XBgU6RGT.js → hosted-D0IzESu_.js} +42 -21
  164. package/dist/{hosted-BmjzxQhp.d.ts → hosted-DVxlLZMe.d.ts} +33 -21
  165. package/dist/{http-ujKm0JXE.js → http-DH94eh6f.js} +4 -4
  166. package/dist/{http-BBoKefeS.js → http-DKLXrFGk.js} +13 -7
  167. package/dist/{http-Ca3Sr5x1.js → http-DOL33cO0.js} +11 -8
  168. package/dist/{import-DB2EG_iy.js → import-ACkOrv6g.js} +6 -6
  169. package/dist/{import-Bz0GefWg.js → import-CST57XLp.js} +64 -51
  170. package/dist/{index-CMiPH2Tv.d.ts → index-BinlXeU-.d.ts} +64 -37
  171. package/dist/{index-BSfRl0hZ.d.ts → index-CV-7DWeD.d.ts} +64 -52
  172. package/dist/{index-BE8y3moU.d.ts → index-DJwEgYzA.d.ts} +127 -82
  173. package/dist/{index-DH9DUDEM.d.ts → index-Dj2qF9VC.d.ts} +54 -30
  174. package/dist/{index-BTkwrK7v.d.ts → index-vYjMrXyK.d.ts} +336 -173
  175. package/dist/{index-DLwcuCN_.d.ts → index-ymept53A.d.ts} +51 -30
  176. package/dist/index.d.ts +22 -22
  177. package/dist/index.js +34 -34
  178. package/dist/{init-B-4t1NzC.js → init-BjuFDYT1.js} +10 -10
  179. package/dist/{init-5TXNji88.js → init-txYTuW9u.js} +5 -5
  180. package/dist/{instance-options-CU0YQCLH.d.ts → instance-options-CoHn-0e8.d.ts} +4 -4
  181. package/dist/{instance-snapshot-CjcwnEiV.js → instance-snapshot-DuWf1cT3.js} +86 -61
  182. package/dist/{instant-BluqDvyS.js → instant-DK3Iz83e.js} +2 -2
  183. package/dist/{internals-Dk8A8fX3.js → internals-B3IgHrvo.js} +6 -3
  184. package/dist/{json-schema-B-vAwlde.js → json-schema-BPGa-RjQ.js} +9 -3
  185. package/dist/{json-schema-CN_iLFH2.d.ts → json-schema-BfXgnRNT.d.ts} +4 -4
  186. package/dist/jwt/index.d.ts +57 -27
  187. package/dist/jwt/index.js +24 -21
  188. package/dist/{kernel-DVExUwkp.js → kernel-qv4cr9w8.js} +32 -23
  189. package/dist/kysely/index.d.ts +49 -33
  190. package/dist/kysely/index.js +9 -7
  191. package/dist/{live-options-BaAFCIiu.js → live-options-BBIT68le.js} +2 -2
  192. package/dist/{load-DxroEzH1.js → load-DjSU5KXO.js} +6 -6
  193. package/dist/load-Dm0pSYH3.js +1 -0
  194. package/dist/{login-ClSJh5t5.js → login-CfImTJGb.js} +4 -4
  195. package/dist/{login-WC9HPJpU.js → login-CgfCTO3F.js} +16 -9
  196. package/dist/{manifest-Dv6q4i5s.js → manifest-B2QPh19C.js} +49 -38
  197. package/dist/{manifest-BVhExYhw.d.ts → manifest-CzzWtnAb.d.ts} +126 -31
  198. package/dist/{manifest-schema-Cv492Qev.js → manifest-schema-2r37XRhD.js} +44 -3
  199. package/dist/{manifest-B79YuF2T.js → manifest-wg8WkkpD.js} +6 -6
  200. package/dist/{map-claims-etGIS_Dv.js → map-claims-C-nv08_n.js} +16 -9
  201. package/dist/{map-error-BQGyDm_M.js → map-error-pasIGqMT.js} +7 -7
  202. package/dist/{markers-C6joDI3o.js → markers-BeHZ4x9Q.js} +20 -5
  203. package/dist/mcp/index.d.ts +114 -61
  204. package/dist/mcp/index.js +70 -40
  205. package/dist/{migrate-Dodel0IJ.js → migrate-B7oP_sQU.js} +35 -17
  206. package/dist/module-values-BJTBdo6y.js +107 -0
  207. package/dist/nest/index.d.ts +23 -13
  208. package/dist/nest/index.js +18 -11
  209. package/dist/next/client.d.ts +5 -2
  210. package/dist/next/client.js +1 -1
  211. package/dist/next/index.d.ts +79 -26
  212. package/dist/next/index.js +121 -10
  213. package/dist/next/plugin.d.ts +1 -1
  214. package/dist/next/plugin.js +4 -3
  215. package/dist/node/index.d.ts +5 -5
  216. package/dist/node/index.js +3 -3
  217. package/dist/{ocsf-BFp-PZZA.js → ocsf-TcjRBgIs.js} +15 -5
  218. package/dist/openai/index.d.ts +13 -7
  219. package/dist/openai/index.js +3 -3
  220. package/dist/openapi/index.d.ts +51 -30
  221. package/dist/openapi/index.js +2 -2
  222. package/dist/{openapi-ztVaux6j.js → openapi-BGeuunWC.js} +23 -14
  223. package/dist/{openapi-DMocl1bh.js → openapi-BIpw3Mb7.js} +4 -5
  224. package/dist/{openapi-Ddb4628T.js → openapi-BOsx0xn9.js} +33 -18
  225. package/dist/{operation-findings-kRcEp8lE.js → operation-findings-CXtFzlKJ.js} +3 -3
  226. package/dist/{operations-BNLes61x.d.ts → operations-Ci_rT6Uo.d.ts} +10 -7
  227. package/dist/orpc/index.d.ts +68 -14
  228. package/dist/orpc/index.js +62 -13
  229. package/dist/otel/index.d.ts +7 -4
  230. package/dist/otel/index.js +8 -5
  231. package/dist/{output-DgSDLrta.js → output-DV5dwOTs.js} +9 -5
  232. package/dist/output-files-BHOIlrfD.js +1 -0
  233. package/dist/{output-files-CCMdcFWb.js → output-files-BIQ_9pIs.js} +29 -17
  234. package/dist/ownership-DA5YdYTm.js +1059 -0
  235. package/dist/{parse-Ddhz2xf4.js → parse-1_ZheTW5.js} +16 -13
  236. package/dist/parse-local-manifest-CCmbhnxP.d.ts +10 -0
  237. package/dist/{parse-local-manifest-T1Q8X3A2.js → parse-local-manifest-DEiCF4ah.js} +19 -7
  238. package/dist/{parse-request-D_tUXG6M.js → parse-request-CwCZpyjV.js} +7 -8
  239. package/dist/{paths-DXSHAMIa.js → paths-CUvURzHp.js} +4 -1
  240. package/dist/pdp/index.d.ts +9 -6
  241. package/dist/pdp/index.js +20 -13
  242. package/dist/{peer-DOzzMfZL.js → peer-C9LvBCcb.js} +1 -1
  243. package/dist/{peer-12Q5I_RH.js → peer-Q0fuZ6hx.js} +9 -3
  244. package/dist/{permdock-BfWEeMqk.js → permdock-BvjivVb9.js} +200 -140
  245. package/dist/{permdock-Dco6dyCK.d.ts → permdock-CprAPN3w.d.ts} +260 -129
  246. package/dist/{permission-registry-DpPtSKNZ.js → permission-registry-B8tYxPIt.js} +23 -10
  247. package/dist/{permission-types-DhNEmoRG.d.ts → permission-types-CAY-GU7e.d.ts} +127 -41
  248. package/dist/{permissions-CoqCOfJ3.d.ts → permissions-Bx6UI8n1.d.ts} +6 -3
  249. package/dist/{permissions-CyH2MV_B.js → permissions-CVXmRILq.js} +3 -3
  250. package/dist/{permissions-DArULThq.js → permissions-CYcHj_w7.js} +8 -5
  251. package/dist/pg-DQTqRrou.js +60 -0
  252. package/dist/{pins-8ILTftC9.js → pins-nqarl3oE.js} +4 -1
  253. package/dist/{pkce-5h8NgMQJ.js → pkce-CnmmYqUZ.js} +1 -1
  254. package/dist/{policy-B7dg_yzu.d.ts → policy-BycVKnXv.d.ts} +5 -5
  255. package/dist/{policy-DaJy4nK4.js → policy-CLQ8__GF.js} +43 -23
  256. package/dist/{policy-from-catalog-DFWYkNdu.js → policy-from-catalog-CU3An8uP.js} +28 -25
  257. package/dist/{policy-module-CTlwMvLI.js → policy-module-xym9fnSq.js} +12 -6
  258. package/dist/{policy-types-B-F-qAZk.d.ts → policy-types-DGIO_gxq.d.ts} +782 -357
  259. package/dist/{postgres-store-BL9M_CA1.js → postgres-store-DcyrPS-r.js} +43 -16
  260. package/dist/{postgrest-r5faDIzD.js → postgrest-5Dr3W64L.js} +84 -86
  261. package/dist/{postgrest-CYacM_u7.d.ts → postgrest-D5nUGm-c.d.ts} +55 -35
  262. package/dist/powersync-B701tvhE.js +1 -0
  263. package/dist/{powersync-13odBwiM.js → powersync-Bg8u-JcR.js} +3 -3
  264. package/dist/{powersync-53ryOZip.js → powersync-CJrT1DSc.js} +127 -69
  265. package/dist/preset/index.d.ts +38 -28
  266. package/dist/preset/index.js +1 -1
  267. package/dist/{preset-CHTbd-DQ.js → preset-BjLzeFpp.js} +56 -32
  268. package/dist/{principal-source-pHneukrx.js → principal-source-C6N60GtM.js} +10 -10
  269. package/dist/prisma/index.d.ts +69 -41
  270. package/dist/prisma/index.js +21 -17
  271. package/dist/{problem-CTviyH5L.js → problem-BVLHFK33.js} +41 -21
  272. package/dist/{problem-details-cn5X30gZ.js → problem-details-CLDgX1KV.js} +13 -4
  273. package/dist/{problem-types-CJ2325SZ.js → problem-types-DSsRfONQ.js} +4 -1
  274. package/dist/{prompt-DwtVemER.js → prompt-BYc6drYW.js} +4 -1
  275. package/dist/protected-action-D8x73IGm.d.ts +58 -0
  276. package/dist/protected-action-DUYqb-Ma.js +80 -0
  277. package/dist/{protected-DXE3cQYg.js → protected-action-QEA8arRB.js} +48 -14
  278. package/dist/{provider-BQsTYYy0.js → provider-C55OGXJ7.js} +5 -4
  279. package/dist/{provider-Csk-THAn.d.ts → provider-DfLeek9O.d.ts} +1 -1
  280. package/dist/{provider-store-IgqQipCO.js → provider-store-CaTv00tr.js} +13 -9
  281. package/dist/{pull-CN5OLxrF.js → pull-2nJr0qg_.js} +12 -11
  282. package/dist/pull-C3EEGzSw.js +1 -0
  283. package/dist/{push-tVdG8dUL.js → push-Bn-lMEmI.js} +19 -13
  284. package/dist/{pushed-policy-CmYeSQqq.js → pushed-policy-CDuOL2de.js} +10 -7
  285. package/dist/{pushed-policy-BbcY9r_4.d.ts → pushed-policy-CryQheKq.d.ts} +12 -6
  286. package/dist/react/index.d.ts +9 -8
  287. package/dist/react/index.js +7 -6
  288. package/dist/react/provider-client.d.ts +1 -1
  289. package/dist/react/provider-client.js +1 -1
  290. package/dist/react-native/index.d.ts +94 -55
  291. package/dist/react-native/index.js +200 -61
  292. package/dist/{refs-CNJBiTFo.js → refs-C8BKxc_e.js} +2 -2
  293. package/dist/{relation-walk-3OyDBF0S.js → relation-walk-DK_gkgL7.js} +12 -9
  294. package/dist/{relations-BnCWnJGI.js → relations-BxvRvDHK.js} +3 -3
  295. package/dist/{replay-Du1tJjG7.js → replay-BU09ad4L.js} +1 -1
  296. package/dist/{replay-DCDD_ZfL.d.ts → replay-Bs9Df2fQ.d.ts} +1 -1
  297. package/dist/{request-context-BykKLmyE.js → request-context-Duzdf0cd.js} +8 -8
  298. package/dist/{request-schema-CMreVuFM.js → request-schema-DhX7UbfQ.js} +4 -1
  299. package/dist/resend/index.d.ts +34 -28
  300. package/dist/resend/index.js +29 -29
  301. package/dist/resolve-names-ConCSj1y.js +201 -0
  302. package/dist/{resource-relations-D_jw0BFx.js → resource-relations-8-pCScBO.js} +18 -9
  303. package/dist/{retire-Wj6dkyDE.js → retire-B2xffQgY.js} +15 -6
  304. package/dist/{revocations-R07lFBnX.d.ts → revocations-BaUXHM1N.d.ts} +6 -3
  305. package/dist/{rls-Ck_PocSp.js → rls-Ba9wN0SP.js} +13 -6
  306. package/dist/{rls-CxBZb4rZ.js → rls-Cx0dtsB7.js} +310 -128
  307. package/dist/{role-builder-C1VJzvcr.js → role-builder-BK2-T6oD.js} +41 -20
  308. package/dist/{row-conditions-h2HythXQ.js → row-conditions-BAGHOmVq.js} +4 -3
  309. package/dist/{rpc-Bk1bE-ch.js → rpc-vHIwyXCp.js} +8 -5
  310. package/dist/run-Ck22anC2.js +1 -0
  311. package/dist/{run-uLD2aWuO.js → run-PbRlXTfh.js} +26 -23
  312. package/dist/{run-ticket-BpNi7BCi.d.ts → run-ticket-B2o2Kxz8.d.ts} +29 -14
  313. package/dist/{run-ticket-B5d_63Ma.js → run-ticket-Dv7aF7Dk.js} +9 -9
  314. package/dist/{runtime-Vif3_-zf.js → runtime-BGnrOkVH.js} +5 -2
  315. package/dist/{saas-Az_Kz-4D.js → saas-DK4V-3Is.js} +42 -29
  316. package/dist/{scan-DSljDE1Y.js → scan-CRTj6fke.js} +1 -1
  317. package/dist/{schema-B4v0Qrac.js → schema-BOJjqlWL.js} +3 -2
  318. package/dist/{schema-gIcCx7zM.js → schema-BTsE1WRT.js} +8 -4
  319. package/dist/scim/index.d.ts +2 -2
  320. package/dist/scim/index.js +2 -2
  321. package/dist/{scim-C7JYhySg.js → scim-D8YupzX1.js} +2 -2
  322. package/dist/{scim-YNieBO1U.js → scim-jJBJ7g1Z.js} +33 -15
  323. package/dist/{scopes-BHsc-wp-.js → scopes-0Up_UA2t.js} +41 -23
  324. package/dist/server/index.d.ts +11 -11
  325. package/dist/server/index.js +12 -12
  326. package/dist/{server-Bnga6I50.js → server-3cVlTLde.js} +31 -31
  327. package/dist/{server-types-C4gZUEZy.d.ts → server-types-CyRN0-Cd.d.ts} +88 -46
  328. package/dist/{sha256-D9ihqmvd.js → sha256-C-4WXKIu.js} +4 -3
  329. package/dist/{shared-fMKOv8hP.js → shared-Afctg7B0.js} +65 -32
  330. package/dist/{shared-C8LjUdVU.js → shared-l0oGGetg.js} +9 -6
  331. package/dist/{signals-D3NcTKUS.js → signals-B1vHR3fN.js} +2 -2
  332. package/dist/{sink-Cp_Eot9W.d.ts → sink-B5zoUW_O.d.ts} +44 -20
  333. package/dist/{sink-BEZSlMS_.js → sink-D9_vh372.js} +32 -21
  334. package/dist/{skills-g_3BS9NC.js → skills-C9uKfSF5.js} +3 -3
  335. package/dist/{skills-Dcjw9_1C.js → skills-CQQcuGBi.js} +12 -8
  336. package/dist/{snapshot-CbGmYiJx.js → snapshot-CXlzi69u.js} +21 -18
  337. package/dist/{snapshot-cache-Pahd3IYJ.d.ts → snapshot-cache-BjAWkchD.d.ts} +21 -12
  338. package/dist/{snapshot-cache-DT2Kx1F8.js → snapshot-cache-Bx_4xC_6.js} +14 -11
  339. package/dist/solid/index.d.ts +55 -16
  340. package/dist/solid/index.js +46 -12
  341. package/dist/solid-start/index.d.ts +30 -12
  342. package/dist/solid-start/index.js +3 -3
  343. package/dist/{sources-B-zYB4GS.js → sources-CMAM-2A3.js} +46 -27
  344. package/dist/{sources-DEEuGb8S.d.ts → sources-CWG32C0G.d.ts} +126 -53
  345. package/dist/{sql-B96movIM.js → sql-0WjxIp9g.js} +28 -7
  346. package/dist/{sql-CDEPCA0g.d.ts → sql-B80DFdpG.d.ts} +2 -2
  347. package/dist/{src-DLFrtrrC.js → src-C_pi2Rnh.js} +292 -101
  348. package/dist/ssf/index.d.ts +3 -3
  349. package/dist/ssf/index.js +47 -35
  350. package/dist/{standard-webhooks-DgFFD-Ga.js → standard-webhooks-D67a3nzk.js} +5 -5
  351. package/dist/{standard-webhooks-B_qRg0ws.d.ts → standard-webhooks-DOYEuOLx.d.ts} +7 -7
  352. package/dist/{store-DSP9oGvh.js → store-RNFvaJJv.js} +32 -26
  353. package/dist/{store-options-B_poyYvg.js → store-options-Dil3lraY.js} +105 -15
  354. package/dist/stores-DZJvxFIZ.d.ts +59 -0
  355. package/dist/{stores-BqEuHC05.js → stores-DxZWDXCs.js} +42 -5
  356. package/dist/{stream-2Vwhl7Er.d.ts → stream-9y9qw51m.d.ts} +4 -3
  357. package/dist/{stream-CvdUS9V1.js → stream-CDvF0sJm.js} +5 -5
  358. package/dist/{style-Ds1gNm77.js → style-DblOtSga.js} +1 -1
  359. package/dist/{style-Cqo7-73x.js → style-Ds11Hmk4.js} +2 -1
  360. package/dist/{subject-settings-CkEwrw3W.js → subject-settings-8sH5HlII.js} +8 -4
  361. package/dist/{row-check-Dt35czLy.d.ts → subject-settings-vNW8qmUH.d.ts} +30 -18
  362. package/dist/supabase/index.d.ts +48 -38
  363. package/dist/supabase/index.js +5 -5
  364. package/dist/supabase/middleware.d.ts +19 -13
  365. package/dist/supabase/middleware.js +7 -7
  366. package/dist/{supabase--0aJdLEd.js → supabase-DnMMg5Fn.js} +79 -35
  367. package/dist/{supabase-Bqp7iIY2.js → supabase-SBs3MYUE.js} +3 -3
  368. package/dist/supabase-hook-C0FyEACZ.js +1 -0
  369. package/dist/{supabase-hook-Dg0SrQWR.js → supabase-hook-CrgU06WH.js} +175 -196
  370. package/dist/{supautils-MESd81bF.js → supautils-ByezN3b8.js} +385 -219
  371. package/dist/{support-session-Cna49-3f.js → support-session-BsmPCbz8.js} +21 -21
  372. package/dist/svelte/PermissionBoundary.svelte +2 -6
  373. package/dist/svelte/Protected.svelte +2 -8
  374. package/dist/svelte/index.d.ts +9 -8
  375. package/dist/svelte/index.js +10 -9
  376. package/dist/svelte/runtime.d.ts +4 -4
  377. package/dist/svelte/runtime.js +4 -4
  378. package/dist/svelte/source.d.ts +9 -8
  379. package/dist/svelte/source.js +6 -5
  380. package/dist/sveltekit/index.d.ts +30 -12
  381. package/dist/sveltekit/index.js +2 -2
  382. package/dist/{ownership-Z2LpxsGa.js → tables-BqrxBCir.js} +641 -1104
  383. package/dist/tanstack-start/index.d.ts +22 -10
  384. package/dist/tanstack-start/index.js +2 -2
  385. package/dist/{target-Bw37TFNA.js → target-qdEAnnhU.js} +6 -6
  386. package/dist/{tenancy-CmeBQ6Nv.js → tenancy-5d1zVBvK.js} +25 -19
  387. package/dist/terminal/index.d.ts +23 -14
  388. package/dist/terminal/index.js +17 -20
  389. package/dist/testing/core.d.ts +1 -1
  390. package/dist/testing/core.js +1 -1
  391. package/dist/testing/fixtures/index.d.ts +8 -5
  392. package/dist/testing/fixtures/index.js +78 -17
  393. package/dist/testing/index.d.ts +225 -141
  394. package/dist/testing/index.js +352 -234
  395. package/dist/testing/saas/index.d.ts +43 -27
  396. package/dist/testing/saas/index.js +2 -2
  397. package/dist/testing/saas/permissions.d.ts +1 -1
  398. package/dist/testing/saas/permissions.js +1 -1
  399. package/dist/{text-diff-DhITNCnD.js → text-diff-BtfSmdUo.js} +2 -2
  400. package/dist/{thenable-yD7SabqG.js → thenable-BNSM1U2R.js} +12 -3
  401. package/dist/{time-DkWjdL98.js → time-nR1JesoH.js} +32 -8
  402. package/dist/{token-2qYDvXz2.js → token-DC9EQiet.js} +14 -12
  403. package/dist/{tool-refusal-reAhIzdl.js → tool-refusal-Qpjs_W6M.js} +5 -2
  404. package/dist/trpc/index.d.ts +11 -8
  405. package/dist/trpc/index.js +15 -9
  406. package/dist/type-helpers-c7Xo_2Cu.d.ts +50 -0
  407. package/dist/{types-CfiKC5aN.d.ts → types-B2efzoSX.d.ts} +14 -11
  408. package/dist/{types-CIeZcG8v.d.ts → types-B6ExllNo.d.ts} +2 -2
  409. package/dist/{types-DBHftjgS.d.ts → types-BB-zWDcR.d.ts} +45 -33
  410. package/dist/{types-BfVmNJO5.d.ts → types-BMVDHvI0.d.ts} +128 -50
  411. package/dist/{types-DXmwu78Z.d.ts → types-CEinc15V.d.ts} +31 -14
  412. package/dist/{types-g7Oy6Zg4.d.ts → types-CN0LsqbK.d.ts} +47 -24
  413. package/dist/{types-CeIscIKp.d.ts → types-CWBsAwqn.d.ts} +23 -12
  414. package/dist/{types-DqzsnlSA.js → types-CcUXciSj.js} +17 -5
  415. package/dist/{types-BWZybqs9.d.ts → types-CzOeVvcC.d.ts} +384 -203
  416. package/dist/{types-DC44-hqb.d.ts → types-DLvhVm1r.d.ts} +59 -32
  417. package/dist/{types-D3A19w4A.d.ts → types-DlelvQk4.d.ts} +22 -13
  418. package/dist/{types-cTos-H7p.d.ts → types-DsHGPtkR.d.ts} +68 -32
  419. package/dist/{types-BXMYB7BY.d.ts → types-ZzRGoViD.d.ts} +77 -24
  420. package/dist/{types-CQVEQawv.d.ts → types-rCRV4Ge-.d.ts} +24 -14
  421. package/dist/types-tQB2CEnY.d.ts +262 -0
  422. package/dist/unplugin/index.d.ts +1 -1
  423. package/dist/unplugin/index.js +2 -2
  424. package/dist/usage-0hjZPIRX.js +1 -0
  425. package/dist/{usage-Bybmck7f.js → usage-B9EtHWLa.js} +50 -26
  426. package/dist/{usage-CDaLXCfL.js → usage-CBzgwfIs.js} +2 -2
  427. package/dist/{validation-error-ZfUHbKvf.js → validation-error-CYg2kJEw.js} +4 -1
  428. package/dist/{validation-error-CQpoquwj.d.ts → validation-error-uvp-kyfO.d.ts} +5 -2
  429. package/dist/{validity-CZ7-y0Cj.js → validity-Buc7w8E9.js} +13 -10
  430. package/dist/{verifier-DHuh-okk.js → verifier-DUV6pLqZ.js} +10 -4
  431. package/dist/{verify-pe8rL_Qw.js → verify-DlUcTDBz.js} +148 -487
  432. package/dist/version-DMQ0dnN5.js +48 -0
  433. package/dist/version-DizhmD72.js +1 -0
  434. package/dist/{views-BB8E9dTP.js → views-CD8wuL4Z.js} +19 -6
  435. package/dist/{vocabulary-Bg3eeT2H.d.ts → vocabulary-DEJ5j4mR.d.ts} +7 -4
  436. package/dist/vue/index.d.ts +71 -22
  437. package/dist/vue/index.js +50 -13
  438. package/dist/{waiter-DwEyouan.d.ts → waiter-CqUKX6CY.d.ts} +13 -10
  439. package/dist/{waiter-BGUtGYoU.js → waiter-aBLM63_f.js} +1 -1
  440. package/dist/{watch-C-4VmFlL.js → watch-BFDKqmUa.js} +8 -8
  441. package/dist/watch-ClLuO2TL.js +1 -0
  442. package/dist/webmcp/index.d.ts +11 -11
  443. package/dist/webmcp/index.js +8 -5
  444. package/dist/{where-scope-wq2coopv.js → where-scope-DlCdCM_8.js} +24 -18
  445. package/dist/{who-can-BwNsI_Js.js → who-can-BoDJm0Nc.js} +23 -20
  446. package/dist/workflow/index.d.ts +3 -3
  447. package/dist/workflow/index.js +13 -13
  448. package/dist/workflow-sdk/index.d.ts +19 -13
  449. package/dist/workflow-sdk/index.js +6 -6
  450. package/dist/{wrap-CiSc_KCq.js → wrap-B2wziJI_.js} +4 -4
  451. package/dist/{wrap-B6R0cMRL.d.ts → wrap-DxXB54Wu.d.ts} +8 -5
  452. package/package.json +8 -8
  453. package/schemas/catalog-v1.json +3 -0
  454. package/schemas/supabase-manifest-v1.json +33 -1
  455. package/skills/permdock-credentials/references/tokens-keys-links.md +8 -6
  456. package/skills/permdock-data/references/queries-and-rls.md +2 -1
  457. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -2
  458. package/skills/permdock-wire/references/adapters.md +16 -23
  459. package/dist/catalog-BCCjSAdH.js +0 -1
  460. package/dist/collect-k_Dulxr5.js +0 -1
  461. package/dist/config-CoQHDrDi.js +0 -166
  462. package/dist/denied-text-D4qkEtFz.d.ts +0 -19
  463. package/dist/fields-ClcQLrVc.js +0 -238
  464. package/dist/generate-CNU1pIOo.js +0 -171
  465. package/dist/headers-BIjfMaoC.js +0 -8
  466. package/dist/headers-CIbDTUTK.d.ts +0 -7
  467. package/dist/load-DrMHXzgN.js +0 -1
  468. package/dist/output-files-DPAY7-GX.js +0 -1
  469. package/dist/package-root-Dk_ETdkp.js +0 -31
  470. package/dist/parse-local-manifest-e4mdwAKd.d.ts +0 -10
  471. package/dist/policies-B2lZIurj.js +0 -295
  472. package/dist/powersync-CExtTLyA.js +0 -1
  473. package/dist/problem-details-Tcfmj3bV.d.ts +0 -7
  474. package/dist/protected-BwZYL1X_.d.ts +0 -39
  475. package/dist/pull-Cty6Ovyu.js +0 -1
  476. package/dist/run-Bz7DXGEv.js +0 -1
  477. package/dist/stores-BAZwSYZA.d.ts +0 -31
  478. package/dist/supabase-hook-DJxC4PoP.js +0 -1
  479. package/dist/types-CKV71kKh.d.ts +0 -172
  480. package/dist/usage-y-kBNdqs.js +0 -1
  481. package/dist/version-CEbQ5UeM.js +0 -18
  482. package/dist/version-DXkYUISx.js +0 -1
  483. package/dist/watch-Bd9mx3rd.js +0 -1
package/dist/ssf/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import { r as isRecord, t as compact } from "../compact-CAf557ZB.js";
2
- import { o as statusProblem } from "../problem-details-cn5X30gZ.js";
3
- import { o as epochSeconds } from "../time-DkWjdL98.js";
4
- import { n as readBodyText } from "../body-text-QcXok_SI.js";
5
- import { a as methodNotAllowed, c as problemResponse, d as validationProblem, o as notFoundProblem } from "../problem-CTviyH5L.js";
6
- import { t as cancelApprovals } from "../helpers-DY3vXuGs.js";
7
- import { i as issuerFromDiscovery, t as joseTokenVerifier } from "../verifier-DHuh-okk.js";
8
- import { t as memoryReplayStore } from "../replay-Du1tJjG7.js";
2
+ import { o as statusProblem } from "../problem-details-CLDgX1KV.js";
3
+ import { o as epochSeconds } from "../time-nR1JesoH.js";
4
+ import { n as readBodyText } from "../body-text-DQhcmqdY.js";
5
+ import { f as validationProblem, l as problemResponse, o as methodNotAllowed, s as notFoundProblem } from "../problem-BVLHFK33.js";
6
+ import { t as cancelApprovals } from "../helpers-DJicaG6f.js";
7
+ import { i as issuerFromDiscovery, t as joseTokenVerifier } from "../verifier-DUV6pLqZ.js";
8
+ import { t as memoryReplayStore } from "../replay-BU09ad4L.js";
9
9
  import { t as timeoutSignal } from "../timeout-D51niuQP.js";
10
10
  //#region src/ssf/claims.ts
11
11
  function asSubject(mapped, session, issuer) {
@@ -162,8 +162,8 @@ const PUSH_TIMEOUT_MS = 3e4;
162
162
  const MAX_ERROR_BYTES = 16384;
163
163
  /**
164
164
  * Signs one event as an RFC 8417 Security Event Token (`typ: secevent+jwt`):
165
- * `sub_id` is the event's subject and `events` holds exactly one entry, as
166
- * SSF 1.0 requires. `iss` is the signer's own.
165
+ * `sub_id` is the event's subject and `events` holds exactly one entry, as SSF
166
+ * 1.0 requires. `iss` is the signer's own.
167
167
  */
168
168
  function signSet(event, signer, options) {
169
169
  return signer.sign(compact({
@@ -200,10 +200,10 @@ async function errorBody(response) {
200
200
  }
201
201
  }
202
202
  /**
203
- * Pushes one SET to a receiver (RFC 8935). A `2xx` is delivery; a `400`
204
- * maps the receiver's `err` to a cause; `401` and `403` are
205
- * `authentication-failed` and `access-denied`; a network failure, a timeout,
206
- * a `429` or a `5xx` is `unavailable` with `retry: true`. Never throws.
203
+ * Pushes one SET to a receiver (RFC 8935). A `2xx` is delivery; a `400` maps
204
+ * the receiver's `err` to a cause; `401` and `403` are `authentication-failed`
205
+ * and `access-denied`; a network failure, a timeout, a `429` or a `5xx` is
206
+ * `unavailable` with `retry: true`. Never throws.
207
207
  */
208
208
  async function pushSet(set, options) {
209
209
  const fetchFn = options.fetch ?? globalThis.fetch;
@@ -295,7 +295,10 @@ function risc(name, subject, payload) {
295
295
  payload: Object.freeze(payload)
296
296
  });
297
297
  }
298
- /** RISC 1.0 event builders for the events PermDock's receiver treats as revoking every session. */
298
+ /**
299
+ * RISC 1.0 event builders for the events PermDock's receiver treats as revoking
300
+ * every session.
301
+ */
299
302
  const riscEvents = Object.freeze({
300
303
  accountDisabled: (input) => risc("account-disabled", input.subject, compact({ reason: input.reason })),
301
304
  accountPurged: (input) => risc("account-purged", input.subject, {}),
@@ -437,8 +440,8 @@ const CHANGED_EVENTS = /* @__PURE__ */ new Set([
437
440
  ]);
438
441
  /**
439
442
  * When the replay record of a SET may be dropped: its `exp`, or for a SET
440
- * without one (RFC 8417 section 2.2) the end of its acceptance window, so
441
- * the same `jti` cannot pass verification again once the record is gone.
443
+ * without one (RFC 8417 section 2.2) the end of its acceptance window, so the
444
+ * same `jti` cannot pass verification again once the record is gone.
442
445
  */
443
446
  function replayExpiresAt(claims, clockTolerance = 0, maxTokenAge = DEFAULT_SET_MAX_AGE) {
444
447
  if (typeof claims["exp"] === "number") return claims["exp"] + clockTolerance;
@@ -875,13 +878,16 @@ function createPermDock(policy, options) {
875
878
  }
876
879
  //#endregion
877
880
  //#region src/ssf/set-queue.ts
878
- /** The largest poll request body read: acknowledgements and errors for many SETs. */
881
+ /**
882
+ * The largest poll request body read: acknowledgements and errors for many
883
+ * SETs.
884
+ */
879
885
  const MAX_POLL_BYTES = 262144;
880
886
  const DEFAULT_MAX_EVENTS = 100;
881
887
  /**
882
888
  * An in-process `SetQueue`: pending SETs per stream in insertion order. A
883
- * process restart loses them; a deployment with more than one instance needs
884
- * a shared queue.
889
+ * process restart loses them; a deployment with more than one instance needs a
890
+ * shared queue.
885
891
  */
886
892
  function memorySetQueue() {
887
893
  const streams = /* @__PURE__ */ new Map();
@@ -943,10 +949,10 @@ function parsePollRequest(text) {
943
949
  };
944
950
  }
945
951
  /**
946
- * The RFC 8936 poll endpoint over a `SetQueue`. It applies the request's
947
- * `acks` and `setErrs`, then answers `{ sets, moreAvailable }` with up to
948
- * `maxEvents` pending SETs. It answers at once whatever `returnImmediately`
949
- * says, which RFC 8936 section 2.4 allows.
952
+ * The RFC 8936 poll endpoint over a `SetQueue`. It applies the request's `acks`
953
+ * and `setErrs`, then answers `{ sets, moreAvailable }` with up to `maxEvents`
954
+ * pending SETs. It answers at once whatever `returnImmediately` says, which RFC
955
+ * 8936 section 2.4 allows.
950
956
  */
951
957
  function setPollHandler(options) {
952
958
  const cap = options.maxEvents ?? DEFAULT_MAX_EVENTS;
@@ -1066,9 +1072,9 @@ function readDelivery(value) {
1066
1072
  });
1067
1073
  }
1068
1074
  /**
1069
- * The receiver-supplied properties of a stream request (SSF 1.0 section
1070
- * 8.1.1). `previous` keeps the properties a PATCH leaves out; without it an
1071
- * absent property takes its default. Transmitter-supplied properties are ignored.
1075
+ * The receiver-supplied properties of a stream request (SSF 1.0 section 8.1.1).
1076
+ * `previous` keeps the properties a PATCH leaves out; without it an absent
1077
+ * property takes its default. Transmitter-supplied properties are ignored.
1072
1078
  */
1073
1079
  function readProperties(body, previous) {
1074
1080
  let delivery = previous?.delivery ?? { method: "urn:ietf:rfc:8936" };
@@ -1110,7 +1116,10 @@ async function owned(streams, id, owner) {
1110
1116
  const stream = await streams.get(id);
1111
1117
  return stream?.owner === owner ? stream : notFoundProblem();
1112
1118
  }
1113
- /** Acknowledges every pending SET of `stream`; a queue that never empties is read at most until it repeats. */
1119
+ /**
1120
+ * Acknowledges every pending SET of `stream`; a queue that never empties is
1121
+ * read at most until it repeats.
1122
+ */
1114
1123
  async function drain(queue, stream) {
1115
1124
  let previous;
1116
1125
  for (;;) {
@@ -1121,7 +1130,10 @@ async function drain(queue, stream) {
1121
1130
  await Promise.all(pending.map(({ jti }) => Promise.resolve(queue.ack(stream, jti))));
1122
1131
  }
1123
1132
  }
1124
- /** Pushes the SETs a paused push stream held, oldest first, until one may be retried. */
1133
+ /**
1134
+ * Pushes the SETs a paused push stream held, oldest first, until one may be
1135
+ * retried.
1136
+ */
1125
1137
  async function flush(queue, configuration, fetchFn) {
1126
1138
  const { stream_id: stream, delivery } = configuration;
1127
1139
  if (delivery.endpoint_url === void 0) return;
@@ -1170,9 +1182,9 @@ async function deliver(stream, status, jti, set, options) {
1170
1182
  }
1171
1183
  /**
1172
1184
  * Signs `event` once per distinct stream audience and delivers it to every
1173
- * stream that is not disabled and has the event in `events_delivered`: a
1174
- * push stream through `pushSet`, a poll stream or a paused stream into the
1175
- * queue. Answers one row per stream that took the event.
1185
+ * stream that is not disabled and has the event in `events_delivered`: a push
1186
+ * stream through `pushSet`, a poll stream or a paused stream into the queue.
1187
+ * Answers one row per stream that took the event.
1176
1188
  */
1177
1189
  async function fanOutSet(event, options) {
1178
1190
  const groups = /* @__PURE__ */ new Map();
@@ -1203,10 +1215,10 @@ async function fanOutSet(event, options) {
1203
1215
  }
1204
1216
  /**
1205
1217
  * An SSF 1.0 transmitter as one Fetch handler, routed by path suffix:
1206
- * `/.well-known/ssf-configuration` (section 7.1), `/stream` (8.1.1),
1207
- * `/status` (8.1.2), `/verify` (8.1.4) and `/poll` (RFC 8936). Each receiver
1208
- * sees only the streams it created. Disabling or deleting a stream drops its
1209
- * pending SETs; a paused stream holds them until it is enabled again.
1218
+ * `/.well-known/ssf-configuration` (section 7.1), `/stream` (8.1.1), `/status`
1219
+ * (8.1.2), `/verify` (8.1.4) and `/poll` (RFC 8936). Each receiver sees only
1220
+ * the streams it created. Disabling or deleting a stream drops its pending
1221
+ * SETs; a paused stream holds them until it is enabled again.
1210
1222
  */
1211
1223
  function ssfTransmitter(options) {
1212
1224
  const base = (options.endpoint ?? options.issuer).replace(/\/+$/u, "");
@@ -1,5 +1,5 @@
1
- import { m as rfc3339, p as nowSeconds } from "./time-DkWjdL98.js";
2
- import { n as readBodyText } from "./body-text-QcXok_SI.js";
1
+ import { m as rfc3339, p as nowSeconds } from "./time-nR1JesoH.js";
2
+ import { n as readBodyText } from "./body-text-DQhcmqdY.js";
3
3
  //#region src/server/standard-webhooks.ts
4
4
  const DEFAULT_TOLERANCE = 300;
5
5
  const JWKS_TTL_SECONDS = 300;
@@ -41,9 +41,9 @@ function validId(id) {
41
41
  return id.length > 0 && id.length <= 256 && !/\s/u.test(id);
42
42
  }
43
43
  /**
44
- * Signs Standard Webhooks deliveries: `v1` HMAC-SHA256 with a `whsec_`
45
- * secret, `v1a` Ed25519 with a private JWK. Throws on an invalid key or id,
46
- * because both come from the sender's own configuration.
44
+ * Signs Standard Webhooks deliveries: `v1` HMAC-SHA256 with a `whsec_` secret,
45
+ * `v1a` Ed25519 with a private JWK. Throws on an invalid key or id, because
46
+ * both come from the sender's own configuration.
47
47
  */
48
48
  function webhookSigner(options) {
49
49
  if (options.keys.length === 0) throw new TypeError("PermDock: webhookSigner() needs at least one key");
@@ -1,5 +1,5 @@
1
- import { Rt as Instant, ar as JsonWebKeyLike } from "./policy-types-B-F-qAZk.js";
2
- import { l as ReplayStore } from "./types-cTos-H7p.js";
1
+ import { Wt as Instant, dr as JsonWebKeyLike } from "./policy-types-DGIO_gxq.js";
2
+ import { l as ReplayStore } from "./types-DsHGPtkR.js";
3
3
  //#region src/server/standard-webhooks.d.ts
4
4
  /** The three Standard Webhooks headers a delivery carries. */
5
5
  type WebhookHeaders = {
@@ -34,7 +34,7 @@ type WebhookMessage = {
34
34
  readonly now?: Instant;
35
35
  };
36
36
  type WebhookSigner = {
37
- sign(message: WebhookMessage): Promise<WebhookHeaders>;
37
+ sign: (message: WebhookMessage) => Promise<WebhookHeaders>;
38
38
  };
39
39
  /** An Ed25519 public JWK set for `v1a`, or the URL that serves one. */
40
40
  type WebhookJwks = {
@@ -70,12 +70,12 @@ type VerifiedWebhookMessage = {
70
70
  };
71
71
  type WebhookVerifier = {
72
72
  /** Never throws; claims the `webhook-id` only after a signature verifies. */
73
- verify(input: WebhookInput): Promise<VerifiedWebhookMessage>;
73
+ verify: (input: WebhookInput) => Promise<VerifiedWebhookMessage>;
74
74
  };
75
75
  /**
76
- * Signs Standard Webhooks deliveries: `v1` HMAC-SHA256 with a `whsec_`
77
- * secret, `v1a` Ed25519 with a private JWK. Throws on an invalid key or id,
78
- * because both come from the sender's own configuration.
76
+ * Signs Standard Webhooks deliveries: `v1` HMAC-SHA256 with a `whsec_` secret,
77
+ * `v1a` Ed25519 with a private JWK. Throws on an invalid key or id, because
78
+ * both come from the sender's own configuration.
79
79
  */
80
80
  declare function webhookSigner(options: WebhookSignerOptions): WebhookSigner;
81
81
  /**
@@ -1,10 +1,10 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
- import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
- import { i as flattenApprovers } from "./approvers-CqPOLD-o.js";
4
- import { a as durationOf, i as dateAt } from "./time-DkWjdL98.js";
5
- import { c as rootMembershipId } from "./scopes-BHsc-wp-.js";
6
- import { n as matchGrantee } from "./grantee-match-0RtHWQDx.js";
7
- import { a as escalationOpenAt, i as approverRelationKey, o as stageEscalationOpenAt, r as approvalQuorum, s as ApprovalError } from "./types-DqzsnlSA.js";
2
+ import { n as freezeDeep } from "./freeze-jjan0lCv.js";
3
+ import { i as flattenApprovers } from "./approvers-B4r0N_Uz.js";
4
+ import { a as durationOf, i as dateAt } from "./time-nR1JesoH.js";
5
+ import { c as rootMembershipId } from "./scopes-0Up_UA2t.js";
6
+ import { n as matchGrantee } from "./grantee-match-7RZZvoT_.js";
7
+ import { a as escalationOpenAt, i as approverRelationKey, o as stageEscalationOpenAt, r as approvalQuorum, s as ApprovalError } from "./types-CcUXciSj.js";
8
8
  //#region src/approvals/page.ts
9
9
  const DEFAULT_PAGE_SIZE = 50;
10
10
  const MAX_PAGE_SIZE = 200;
@@ -26,7 +26,10 @@ function compare(a, b) {
26
26
  function encodeApprovalCursor(request) {
27
27
  return JSON.stringify(positionOf(request));
28
28
  }
29
- /** The `(createdAt, token)` position a `next` cursor names, or `null` for one that does not parse. */
29
+ /**
30
+ * The `(createdAt, token)` position a `next` cursor names, or `null` for one
31
+ * that does not parse.
32
+ */
30
33
  function decodeApprovalCursor(cursor) {
31
34
  try {
32
35
  const parsed = JSON.parse(cursor);
@@ -38,8 +41,8 @@ function decodeApprovalCursor(cursor) {
38
41
  /**
39
42
  * Pages already-filtered requests in `(createdAt, token)` order, as the
40
43
  * built-in stores do: `limit` within 1 to 200 (50 when absent), `cursor` from
41
- * the previous page's `next`, and no items for a cursor that does not parse.
42
- * A custom `ApprovalStore` that filters in memory returns it from `list`.
44
+ * the previous page's `next`, and no items for a cursor that does not parse. A
45
+ * custom `ApprovalStore` that filters in memory returns it from `list`.
43
46
  */
44
47
  function pageApprovals(matching, query) {
45
48
  const after = query.cursor === void 0 ? void 0 : decodeApprovalCursor(query.cursor);
@@ -53,7 +56,10 @@ function pageApprovals(matching, query) {
53
56
  next: encodeApprovalCursor(last)
54
57
  } : { items };
55
58
  }
56
- /** Every matching request of `store`, following `next` until the last page (at most 1000 pages of 200). */
59
+ /**
60
+ * Every matching request of `store`, following `next` until the last page (at
61
+ * most 1000 pages of 200).
62
+ */
57
63
  function listAllApprovals(store, filter) {
58
64
  const collect = async (cursor, pages, items) => {
59
65
  const page = await store.list(cursor === void 0 ? {
@@ -74,8 +80,8 @@ function listAllApprovals(store, filter) {
74
80
  /**
75
81
  * The tenants a subject acts in for approvals: `principal.tenant` and the
76
82
  * instance of every membership at the first scope. A membership at a nested
77
- * scope (a team, or one with `within`) names no tenant, even when its parent
78
- * is the request's tenant.
83
+ * scope (a team, or one with `within`) names no tenant, even when its parent is
84
+ * the request's tenant.
79
85
  */
80
86
  function membershipTenants(subject) {
81
87
  const principal = subject.principal;
@@ -172,14 +178,14 @@ function vouchedRule(verdict) {
172
178
  return typeof verdict.vouched === "string" && verdict.vouched !== "" ? verdict.vouched : void 0;
173
179
  }
174
180
  /**
175
- * Refuses `by` as an approver of `request`, or returns the index of the
176
- * stage the approval counts for (`undefined` without `stages`). Eligibility
177
- * is `approvers.by` or, under `stages`, the first incomplete stage
178
- * (`sequential`) or any incomplete stage (`all`); `approvers.escalation.to`
179
- * is eligible too once the request has waited `escalation.after`. A
180
- * principal who already approved is refused, so one person never completes
181
- * two stages. `relations` are the relation approvers `by` holds on the
182
- * request's resource (see `ApprovalVerdict.relations`).
181
+ * Refuses `by` as an approver of `request`, or returns the index of the stage
182
+ * the approval counts for (`undefined` without `stages`). Eligibility is
183
+ * `approvers.by` or, under `stages`, the first incomplete stage (`sequential`)
184
+ * or any incomplete stage (`all`); `approvers.escalation.to` is eligible too
185
+ * once the request has waited `escalation.after`. A principal who already
186
+ * approved is refused, so one person never completes two stages. `relations`
187
+ * are the relation approvers `by` holds on the request's resource (see
188
+ * `ApprovalVerdict.relations`).
183
189
  */
184
190
  function assertApprover(request, by, requireDistinctApprover, at, relations = [], permissions = []) {
185
191
  const now = dateAt(at);
@@ -219,12 +225,12 @@ function isSystemSubject(by) {
219
225
  return by.actor?.kind === "system";
220
226
  }
221
227
  /**
222
- * The request after `verdict`, for a store to persist: a rejection resolves
223
- * it; an approval is appended to `approvals` and resolves it once there are
224
- * `approvers.quorum` (default 1). Throws an `ApprovalError` when the request
225
- * is not pending, has expired or `verdict.by` may not approve it. Stores
226
- * should write the result only when the stored row is still pending with the
227
- * same number of approvals, so two approvers racing both count.
228
+ * The request after `verdict`, for a store to persist: a rejection resolves it;
229
+ * an approval is appended to `approvals` and resolves it once there are
230
+ * `approvers.quorum` (default 1). Throws an `ApprovalError` when the request is
231
+ * not pending, has expired or `verdict.by` may not approve it. Stores should
232
+ * write the result only when the stored row is still pending with the same
233
+ * number of approvals, so two approvers racing both count.
228
234
  */
229
235
  function applyApprovalVerdict(request, verdict, at) {
230
236
  const now = dateAt(at);
@@ -1,11 +1,11 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
- import { g as secondsOf } from "./time-DkWjdL98.js";
3
- import { c as rowIdOf } from "./delegation-C5rOdTp5.js";
4
- import { c as nowSeconds } from "./tenancy-CmeBQ6Nv.js";
5
- import { n as payloadDigest } from "./token-2qYDvXz2.js";
6
- import { n as parseSnapshot } from "./snapshot-CbGmYiJx.js";
7
- import { c as snapshotClaim } from "./where-scope-wq2coopv.js";
8
- import { n as fromSnapshot, t as emptySnapshot } from "./from-snapshot-Bz469dIh.js";
2
+ import { g as secondsOf } from "./time-nR1JesoH.js";
3
+ import { c as rowIdOf } from "./delegation-CDB6_keF.js";
4
+ import { c as nowSeconds } from "./tenancy-5d1zVBvK.js";
5
+ import { n as payloadDigest } from "./token-DC9EQiet.js";
6
+ import { n as parseSnapshot } from "./snapshot-CXlzi69u.js";
7
+ import { c as snapshotClaim } from "./where-scope-DlCdCM_8.js";
8
+ import { n as fromSnapshot, t as emptySnapshot } from "./from-snapshot-DCakWRsr.js";
9
9
  import { t as timeoutSignal } from "./timeout-D51niuQP.js";
10
10
  //#region src/client/source.ts
11
11
  /** A compact JWS: three non-empty dot-separated parts. */
@@ -131,7 +131,10 @@ const NO_ENDPOINT = {
131
131
  }],
132
132
  alternatives: []
133
133
  };
134
- /** The row's id under the snapshot's id field, or `undefined` for a row without one. */
134
+ /**
135
+ * The row's id under the snapshot's id field, or `undefined` for a row without
136
+ * one.
137
+ */
135
138
  function rowId(snapshot, permission, data) {
136
139
  const id = rowIdOf(data, snapshot.ids?.[permission.resource]);
137
140
  return id === "*" ? void 0 : id;
@@ -140,7 +143,10 @@ function cacheKey(snapshot, permission, data) {
140
143
  if (data === void 0) return `${permission.key}:*`;
141
144
  return `${permission.key}:${rowId(snapshot, permission, data) ?? `#${payloadDigest(data)}`}`;
142
145
  }
143
- /** Collects the checks the snapshot cannot answer and posts them as one AuthZEN batch per microtask. */
146
+ /**
147
+ * Collects the checks the snapshot cannot answer and posts them as one AuthZEN
148
+ * batch per microtask.
149
+ */
144
150
  function createBatch(options) {
145
151
  const { answers, endpoint } = options;
146
152
  let queued = [];
@@ -230,8 +236,75 @@ function createBatch(options) {
230
236
  };
231
237
  }
232
238
  //#endregion
239
+ //#region src/client/refresh-on.ts
240
+ const DEFAULT_TYPES = ["com.permdock.membership.*", "com.permdock.catalog.*"];
241
+ const REFRESH_DELAY = 250;
242
+ function matches(type, patterns) {
243
+ return patterns.some((pattern) => pattern.endsWith("*") ? type.startsWith(pattern.slice(0, -1)) : type === pattern);
244
+ }
245
+ function eventType(data) {
246
+ if (typeof data !== "string") return;
247
+ try {
248
+ const parsed = JSON.parse(data);
249
+ if (typeof parsed === "object" && parsed !== null && "type" in parsed && typeof parsed.type === "string") return parsed.type;
250
+ } catch {
251
+ return;
252
+ }
253
+ }
254
+ /**
255
+ * A `refreshOn` trigger over Server-Sent Events: each `message` whose data is a
256
+ * structured CloudEvent with a matching `type` refreshes the snapshot. Without
257
+ * a global `EventSource` it never fires.
258
+ */
259
+ function eventSourceRefresh(url, options = {}) {
260
+ const types = options.types ?? DEFAULT_TYPES;
261
+ return (refresh) => {
262
+ if (typeof globalThis.EventSource !== "function") return () => void 0;
263
+ const source = new globalThis.EventSource(url, { withCredentials: options.withCredentials === true });
264
+ source.addEventListener("message", (event) => {
265
+ const type = eventType(event.data);
266
+ if (type !== void 0 && matches(type, types)) refresh();
267
+ });
268
+ return () => {
269
+ source.close();
270
+ };
271
+ };
272
+ }
273
+ /**
274
+ * Runs `triggers` while `start()` holds, folding calls within 250 ms into one
275
+ * `refresh`. `skip()` answering `true` drops a call: after `clear()` or
276
+ * `dispose()` nothing refetches.
277
+ */
278
+ function refreshTriggers(triggers, refresh, skip) {
279
+ let offs = [];
280
+ let timer;
281
+ const fire = () => {
282
+ if (skip() || timer !== void 0) return;
283
+ timer = setTimeout(() => {
284
+ timer = void 0;
285
+ if (!skip()) refresh();
286
+ }, REFRESH_DELAY);
287
+ };
288
+ return {
289
+ start() {
290
+ if (offs.length === 0) offs = triggers.map((trigger) => trigger(fire));
291
+ },
292
+ stop() {
293
+ for (const off of offs) off();
294
+ offs = [];
295
+ if (timer !== void 0) {
296
+ clearTimeout(timer);
297
+ timer = void 0;
298
+ }
299
+ }
300
+ };
301
+ }
302
+ //#endregion
233
303
  //#region src/client/request.ts
234
- /** Milliseconds a decision, refresh or approval request may take; a slower one is an error like a failed request. */
304
+ /**
305
+ * Milliseconds a decision, refresh or approval request may take; a slower one
306
+ * is an error like a failed request.
307
+ */
235
308
  const STORE_TIMEOUT_MS = 1e4;
236
309
  function storeRequest(fetchImpl, headers) {
237
310
  return (url, body) => fetchImpl(url, {
@@ -313,6 +386,7 @@ function createClientStore(options) {
313
386
  let generation = 0;
314
387
  let disposed = false;
315
388
  let staleNext = options.stale === true;
389
+ let cleared = false;
316
390
  let rawJws;
317
391
  const request = storeRequest(fetchImpl, () => typeof options.headers === "function" ? options.headers() : options.headers);
318
392
  const emit = () => {
@@ -364,6 +438,7 @@ function createClientStore(options) {
364
438
  reset();
365
439
  if ((snapshot.subject.principal?.id ?? null) !== (next.subject.principal?.id ?? null)) approvals.forget();
366
440
  snapshot = next;
441
+ cleared = false;
367
442
  instance = fromSnapshot(snapshot, compact({ tenant }));
368
443
  base = "ready";
369
444
  if (staleNext && next.subject.principal !== null) {
@@ -511,12 +586,21 @@ function createClientStore(options) {
511
586
  decision
512
587
  };
513
588
  };
589
+ const triggers = refreshTriggers(server ? [] : options.refreshOn ?? [], () => {
590
+ cached.refresh().catch(() => void 0);
591
+ }, () => disposed || cleared);
514
592
  const subscribe = (listener) => {
515
593
  listeners.add(listener);
516
- if (listeners.size === 1) approvals.resume();
594
+ if (listeners.size === 1) {
595
+ approvals.resume();
596
+ triggers.start();
597
+ }
517
598
  return () => {
518
599
  listeners.delete(listener);
519
- if (listeners.size === 0) approvals.stop();
600
+ if (listeners.size === 0) {
601
+ approvals.stop();
602
+ triggers.stop();
603
+ }
520
604
  };
521
605
  };
522
606
  const wrap = (permdock) => {
@@ -596,6 +680,7 @@ function createClientStore(options) {
596
680
  reset();
597
681
  tenant = options.tenant;
598
682
  snapshot = emptySnapshot();
683
+ cleared = true;
599
684
  instance = fromSnapshot(snapshot, compact({ tenant }));
600
685
  base = "server-only";
601
686
  approvals.forget();
@@ -679,6 +764,7 @@ function createClientStore(options) {
679
764
  generation += 1;
680
765
  batch.clear();
681
766
  approvals.forget();
767
+ triggers.stop();
682
768
  listeners.clear();
683
769
  },
684
770
  requestApproval: approvals.request
@@ -688,7 +774,10 @@ function createClientStore(options) {
688
774
  }
689
775
  //#endregion
690
776
  //#region src/client/store-options.ts
691
- /** One hint per store: the first check `endpoint: false` turns into a `server-only` denial. */
777
+ /**
778
+ * One hint per store: the first check `endpoint: false` turns into a
779
+ * `server-only` denial.
780
+ */
692
781
  function hintOnce() {
693
782
  let shown = false;
694
783
  return (permission) => {
@@ -723,8 +812,9 @@ function adapterStore(options, snapshot, native) {
723
812
  stale: native?.stale,
724
813
  onSnapshot: both(native?.onSnapshot, options.onSnapshot),
725
814
  onClear: both(native?.onClear, options.onClear),
726
- approvalInterval: options.approvalInterval
815
+ approvalInterval: options.approvalInterval,
816
+ refreshOn: options.refreshOn
727
817
  }));
728
818
  }
729
819
  //#endregion
730
- export { isPromiseLike as i, storeOf as n, isJws as r, adapterStore as t };
820
+ export { isPromiseLike as a, isJws as i, storeOf as n, eventSourceRefresh as r, adapterStore as t };
@@ -0,0 +1,59 @@
1
+ import { Un as Decision, fr as Membership, j as PolicyVocabulary } from "./policy-types-DGIO_gxq.js";
2
+ import { u as Permission } from "./permission-types-CAY-GU7e.js";
3
+ import { r as Role } from "./vocabulary-DEJ5j4mR.js";
4
+ import { d as UncheckedData, s as RowData } from "./permdock-CprAPN3w.js";
5
+ import { r as DescribeOptions, t as DecisionDescription } from "./describe-BbFPBSms.js";
6
+ import { n as ProtectedAction } from "./action-result-BcudBQOF.js";
7
+ import { a as FilterResult, c as PermissionSet, h as TenantView, l as PermissionState, m as SubjectView, o as GateMode, p as RolesOptions, r as ClientPermDock, s as GateView, t as ApprovalHandle } from "./types-tQB2CEnY.js";
8
+ import { n as ProtectedActionReadable, r as SveltePermDockOptions } from "./types-CEinc15V.js";
9
+ import { Readable } from "svelte/store";
10
+ //#region src/svelte/stores.d.ts
11
+ declare function setPermDock(options: SveltePermDockOptions): ClientPermDock;
12
+ declare function getPermDock<V extends PolicyVocabulary = PolicyVocabulary>(): ClientPermDock<V>;
13
+ /**
14
+ * `describe` with the provider's `messages`; a call's own `messages` win. Call
15
+ * it during component init.
16
+ */
17
+ declare function getDescribe(): (decision: Decision, options?: DescribeOptions) => DecisionDescription;
18
+ declare function permission<D>(reference: Permission, data?: () => UncheckedData<D>): Readable<PermissionState>;
19
+ declare function permission<P extends Permission>(reference: P, data?: () => RowData<P>): Readable<PermissionState>;
20
+ /**
21
+ * What a permission-gated control renders, as `useGate` in React: `hidden`,
22
+ * `disabled`, `needsApproval`, `upgrade` and a `reason` in the provider's
23
+ * `messages`. Call it during component initialisation.
24
+ */
25
+ declare function gate<D>(reference: Permission, data?: () => UncheckedData<D>, options?: {
26
+ readonly mode?: GateMode;
27
+ }): Readable<GateView>;
28
+ declare function gate<P extends Permission>(reference: P, data?: () => RowData<P>, options?: {
29
+ readonly mode?: GateMode;
30
+ }): Readable<GateView>;
31
+ declare function permissions(references: () => readonly Permission[], data?: () => unknown): Readable<PermissionSet>;
32
+ declare function filtered<T>(reference: Permission<string, NoInfer<T>, "instance">, rows: () => readonly T[]): Readable<FilterResult<T>>;
33
+ declare function tenant(): Readable<TenantView>;
34
+ declare function memberships(): Readable<readonly Membership[]>;
35
+ declare function roles(options?: () => RolesOptions): Readable<{
36
+ readonly roles: readonly Role[];
37
+ }>;
38
+ declare function assignable(): Readable<readonly Role[]>;
39
+ type AssignableOptions = {
40
+ readonly tenant?: string;
41
+ } | (() => {
42
+ readonly tenant?: string;
43
+ });
44
+ declare function assignablePermissions(options?: AssignableOptions): Readable<readonly Permission[]>;
45
+ declare function subject(): Readable<SubjectView>;
46
+ declare function approval(decision: () => Decision): Readable<ApprovalHandle>;
47
+ /**
48
+ * A `protectAction` server action wired to a control, as `useProtectedAction`
49
+ * in React: a readable store of `gate`, `result`, `pending` and `approval`,
50
+ * with `run` and `retry`. Call it during component initialisation.
51
+ */
52
+ declare function protectedAction<T, D>(action: ProtectedAction<T>, reference: Permission, data?: () => UncheckedData<D>, options?: {
53
+ readonly mode?: GateMode;
54
+ }): ProtectedActionReadable<T>;
55
+ declare function protectedAction<T, P extends Permission>(action: ProtectedAction<T>, reference: P, data?: () => RowData<P>, options?: {
56
+ readonly mode?: GateMode;
57
+ }): ProtectedActionReadable<T>;
58
+ //#endregion
59
+ export { gate as a, memberships as c, protectedAction as d, roles as f, tenant as h, filtered as i, permission as l, subject as m, assignable as n, getDescribe as o, setPermDock as p, assignablePermissions as r, getPermDock as s, approval as t, permissions as u };
@@ -1,6 +1,7 @@
1
- import { a as livePermDock, c as rolesView, d as subjectView, f as tenantView, n as describeWith, o as permissionSet, r as filterResult, t as approvalHandle } from "./views-BB8E9dTP.js";
2
- import { n as getUi, r as providePermDock, t as getStore } from "./context--uM9V3Ui.js";
3
- import { readable, toStore } from "svelte/store";
1
+ import { n as actionRunner, t as actionApproval } from "./protected-action-DUYqb-Ma.js";
2
+ import { a as livePermDock, c as rolesView, d as subjectView, f as tenantView, i as gateView, n as describeWith, o as permissionSet, r as filterResult, t as approvalHandle } from "./views-CD8wuL4Z.js";
3
+ import { n as getUi, r as providePermDock, t as getStore } from "./context-BnIzxTNE.js";
4
+ import { derived, readable, toStore, writable } from "svelte/store";
4
5
  //#region src/svelte/stores.ts
5
6
  function fromStore(store, compute) {
6
7
  return readable(compute(), (set) => {
@@ -23,7 +24,10 @@ function setPermDock(options) {
23
24
  function getPermDock() {
24
25
  return sveltePermDock(getStore());
25
26
  }
26
- /** `describe` with the provider's `messages`; a call's own `messages` win. Call it during component init. */
27
+ /**
28
+ * `describe` with the provider's `messages`; a call's own `messages` win. Call
29
+ * it during component init.
30
+ */
27
31
  function getDescribe() {
28
32
  return describeWith(getUi().messages);
29
33
  }
@@ -33,6 +37,16 @@ function permission(reference, data) {
33
37
  function permissionFor(store, reference, data) {
34
38
  return fromStore(store, () => store.permissionState(reference, data?.()));
35
39
  }
40
+ function gate(reference, data, options = {}) {
41
+ return gateFor(getStore(), reference, data, {
42
+ ...options,
43
+ describe: getDescribe()
44
+ });
45
+ }
46
+ function gateFor(store, reference, data, options = {}) {
47
+ const describeDecision = options.describe ?? describeWith(void 0);
48
+ return fromStore(store, () => gateView(store.permissionState(reference, data?.()), (decision) => describeDecision(decision, { permission: reference }), options.mode));
49
+ }
36
50
  function permissions(references, data) {
37
51
  return permissionsFor(getStore(), references, data);
38
52
  }
@@ -87,5 +101,28 @@ function approval(decision) {
87
101
  function approvalFor(store, decision) {
88
102
  return fromStore(store, () => approvalHandle(store, decision()));
89
103
  }
104
+ function protectedAction(action, reference, data, options = {}) {
105
+ return protectedActionFor(getStore(), action, reference, data, {
106
+ ...options,
107
+ describe: getDescribe()
108
+ });
109
+ }
110
+ function protectedActionFor(store, action, reference, data, options = {}) {
111
+ const state = writable({
112
+ result: void 0,
113
+ pending: false
114
+ });
115
+ const runner = actionRunner(() => action, state.set);
116
+ return {
117
+ subscribe: derived([gateFor(store, reference, data, options), state], ([gated, current]) => ({
118
+ gate: gated,
119
+ result: current.result,
120
+ pending: current.pending,
121
+ approval: actionApproval(store, current.result)
122
+ })).subscribe,
123
+ run: runner.run,
124
+ retry: runner.retry
125
+ };
126
+ }
90
127
  //#endregion
91
- export { getDescribe as a, permission as c, setPermDock as d, subject as f, filtered as i, permissions as l, assignable as n, getPermDock as o, tenant as p, assignablePermissions as r, memberships as s, approval as t, roles as u };
128
+ export { gate as a, memberships as c, protectedAction as d, roles as f, tenant as h, filtered as i, permission as l, subject as m, assignable as n, getDescribe as o, setPermDock as p, assignablePermissions as r, getPermDock as s, approval as t, permissions as u };