permdock 0.3.1 → 0.4.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 (323) hide show
  1. package/dist/a2a/index.d.ts +7 -5
  2. package/dist/a2a/index.js +14 -21
  3. package/dist/ai-sdk/index.d.ts +18 -6
  4. package/dist/ai-sdk/index.js +8 -5
  5. package/dist/app-data-CV8pqqMi.js +59 -0
  6. package/dist/approvals/index.d.ts +2 -2
  7. package/dist/approvals/index.js +3 -3
  8. package/dist/{approvals-DbYAuNkG.js → approvals-DZL76lKW.js} +35 -19
  9. package/dist/{approvers-DT4AVyIg.js → approvers-CqPOLD-o.js} +1 -1
  10. package/dist/{arazzo-BAgw9ap6.js → arazzo-C4BcskbX.js} +6 -5
  11. package/dist/{arazzo-C9chp3ST.js → arazzo-CD8d0WLb.js} +2 -2
  12. package/dist/authzen/index.d.ts +3 -3
  13. package/dist/authzen/index.js +161 -23
  14. package/dist/better-auth/index.d.ts +2 -2
  15. package/dist/better-auth/index.js +6 -19
  16. package/dist/better-supabase/index.d.ts +112 -87
  17. package/dist/better-supabase/index.js +257 -156
  18. package/dist/{bind-C_ob3LKa.d.ts → bind-BzqG8SMb.d.ts} +16 -5
  19. package/dist/{bind-CuzGytRf.js → bind-kk-uyCwH.js} +14 -6
  20. package/dist/build-instance-DIIV9DbC.js +51 -0
  21. package/dist/{canonical-json-DemiK4Vp.js → canonical-json-CFKyFOke.js} +1 -3
  22. package/dist/{capability-2kYTMWDv.d.ts → capability-CksyCWDH.d.ts} +2 -2
  23. package/dist/{capability-4qPdO9gk.js → capability-txATtKV4.js} +3 -2
  24. package/dist/catalog/index.d.ts +1 -1
  25. package/dist/catalog/index.js +1 -1
  26. package/dist/catalog-6yWAX6Ps.js +2 -0
  27. package/dist/{catalog-CYj-mX2O.js → catalog-WHG4kBq7.js} +2 -2
  28. package/dist/{catalog-doc-DdGm82XT.js → catalog-doc-DWtg0gGR.js} +17 -10
  29. package/dist/{catalog-DWF5cYqB.js → catalog-tZUyOfOv.js} +4 -4
  30. package/dist/claude-agent/index.d.ts +4 -4
  31. package/dist/claude-agent/index.js +4 -5
  32. package/dist/clerk/index.d.ts +3 -3
  33. package/dist/clerk/index.js +8 -33
  34. package/dist/cli/bin.js +1 -1
  35. package/dist/cli/index.d.ts +3 -3
  36. package/dist/cli/index.js +3 -3
  37. package/dist/cloud/index.d.ts +4 -4
  38. package/dist/cloud/index.js +9 -15
  39. package/dist/{cloud-CfwZ39Rl.js → cloud-C7bSDgX4.js} +2 -2
  40. package/dist/{cloud-DWLXO2af.js → cloud-PeBN3IEn.js} +5 -5
  41. package/dist/{collect-DSTE3ml9.js → collect-2SrB7lfk.js} +6 -8
  42. package/dist/collect-Bw2Jdq1q.js +2 -0
  43. package/dist/{collect-CHB22Sx4.js → collect-CQx4hX4N.js} +3 -3
  44. package/dist/{commands-BeaGNj_o.js → commands-Cpip4ULx.js} +13 -13
  45. package/dist/{compact-y6vfu2_f.js → compact-CAf557ZB.js} +11 -1
  46. package/dist/compile/index.d.ts +1 -1
  47. package/dist/compile/index.js +1 -1
  48. package/dist/{compile-Ba4blROR.js → compile-CcEu2ZQ1.js} +6 -5
  49. package/dist/{compile-BkRyBDBw.d.ts → compile-CtTP7eur.d.ts} +2 -2
  50. package/dist/{config-BJiM-xAm.js → config-BIjREpyE.js} +4 -4
  51. package/dist/{config-ir40y8m0.js → config-DLt6BvV7.js} +2 -2
  52. package/dist/{config-report-CdCgbRnV.js → config-report--Xb9APJS.js} +5 -6
  53. package/dist/{connection-CU8MQxRi.js → connection-DUsczpB5.js} +3 -2
  54. package/dist/constants-DcJABbLW.js +20 -0
  55. package/dist/{context-Bcy85rGi.js → context-DieZVJXu.js} +16 -5
  56. package/dist/convex/index.d.ts +4 -4
  57. package/dist/convex/index.js +14 -16
  58. package/dist/create-BBO24vj6.js +324 -0
  59. package/dist/{credential-8P81ff4u.js → credential-kue0qpbm.js} +4 -4
  60. package/dist/deciding-columns-Sq12mEA6.js +123 -0
  61. package/dist/delegation-input-FTxMK3ji.js +19 -0
  62. package/dist/denied-text-DfRk15uw.d.ts +19 -0
  63. package/dist/{describe-DMYiCjJV.d.ts → describe-C3ldA9os.d.ts} +11 -2
  64. package/dist/{describe-B_gVZEVi.js → describe-Cgkp7eP0.js} +5 -4
  65. package/dist/{diff-C9RDjjhs.js → diff-Cnghh_Ip.js} +2 -2
  66. package/dist/{diff-2VaeChzX.js → diff-rpqoe7Ag.js} +9 -9
  67. package/dist/{doctor-Djh6JDEk.js → doctor-CuVJvhV_.js} +2 -2
  68. package/dist/doctor-owlv6ddh.js +2166 -0
  69. package/dist/drizzle/index.d.ts +2 -2
  70. package/dist/drizzle/index.js +6 -14
  71. package/dist/elysia/index.d.ts +4 -4
  72. package/dist/elysia/index.js +7 -7
  73. package/dist/{errors-DPdqI50v.d.ts → errors-OD_4c__H.d.ts} +2 -2
  74. package/dist/{errors-Cz5zn0mW.js → errors-drnfxYtm.js} +3 -3
  75. package/dist/{evaluations-tz6D9A2G.js → evaluations-C9YJsv3H.js} +45 -7
  76. package/dist/eve/index.d.ts +5 -5
  77. package/dist/eve/index.js +5 -5
  78. package/dist/express/index.d.ts +4 -4
  79. package/dist/express/index.js +8 -7
  80. package/dist/fastify/index.d.ts +15 -5
  81. package/dist/fastify/index.js +9 -29
  82. package/dist/fields-fwfXN01n.js +1016 -0
  83. package/dist/{files-DWUN9PzI.js → files-D_JIzUrP.js} +12 -3
  84. package/dist/{fixtures-ht28Cplr.js → fixtures-h2eG2OZV.js} +5 -6
  85. package/dist/{from-snapshot-CTLijvdm.js → from-snapshot-7REQZe0H.js} +32 -22
  86. package/dist/{generate-CH7ThJ14.js → generate-CNU1pIOo.js} +1 -3
  87. package/dist/grantee-CXY-0C87.js +254 -0
  88. package/dist/grantee-conditions-MQs5NIuX.js +270 -0
  89. package/dist/grantee-match-fxYp9Nmt.js +141 -0
  90. package/dist/{helpers-H_KARDVC.js → helpers-C9YmyBIa.js} +7 -6
  91. package/dist/hono/index.d.ts +4 -4
  92. package/dist/hono/index.js +8 -8
  93. package/dist/hosted-CBHgkzDl.js +655 -0
  94. package/dist/{http-SO7qGttf.js → http-BBoKefeS.js} +35 -2
  95. package/dist/{http-BIhmLfCc.js → http-BEbdMZ05.js} +2 -24
  96. package/dist/{rls-import-4lLW_pbb.js → import-BFIlhetD.js} +86 -80
  97. package/dist/{openapi-import-cmwetbzw.js → import-UHk1N7vH.js} +6 -7
  98. package/dist/{index-C8z4RjQV.d.ts → index-BwMe94Xq.d.ts} +1 -1
  99. package/dist/{index-0nNqHspG.d.ts → index-DgM7w96K.d.ts} +2 -2
  100. package/dist/{index-C7Tw7MaW.d.ts → index-Dz7didpC.d.ts} +3 -3
  101. package/dist/{index-BNc7Wer_.d.ts → index-UdVQgq48.d.ts} +105 -38
  102. package/dist/index.d.ts +15 -13
  103. package/dist/index.js +22 -22
  104. package/dist/{instance-options-jARdwfPN.d.ts → instance-options-plkrsAog.d.ts} +1 -1
  105. package/dist/{json-schema-BsAflUGW.js → json-schema-DBkdUuCO.js} +1 -3
  106. package/dist/jwt/index.d.ts +4 -4
  107. package/dist/jwt/index.js +13 -13
  108. package/dist/{kernel-_RRHmnMY.js → kernel-CB3LrIJM.js} +81 -32
  109. package/dist/kysely/index.d.ts +2 -2
  110. package/dist/kysely/index.js +6 -14
  111. package/dist/{live-options-H2eG8dfJ.js → live-options-BaAFCIiu.js} +16 -3
  112. package/dist/load-B_shHrmd.js +2 -0
  113. package/dist/{load-DhWEB9P1.js → load-C3_oTHyO.js} +11 -3
  114. package/dist/{manifest-iaoBXHKc.js → manifest-BngWKryL.js} +5 -18
  115. package/dist/{map-claims-Z4QZOiFF.js → map-claims-AVlBaJoa.js} +7 -16
  116. package/dist/{map-error-pgUWNNtG.js → map-error-BE27PYkE.js} +5 -5
  117. package/dist/{markers-B0hYLvMD.js → markers-CiwAOZtO.js} +6 -2
  118. package/dist/{may-use-DndQ5tQ-.js → may-use-BOn_dR_w.js} +4 -3
  119. package/dist/mcp/index.d.ts +26 -9
  120. package/dist/mcp/index.js +456 -446
  121. package/dist/{rls-migrate-CN4TlJTO.js → migrate-BwlB5-Wk.js} +75 -15
  122. package/dist/nest/index.d.ts +4 -4
  123. package/dist/nest/index.js +11 -12
  124. package/dist/next/index.d.ts +31 -8
  125. package/dist/next/index.js +29 -33
  126. package/dist/next/plugin.d.ts +1 -1
  127. package/dist/next/plugin.js +1 -1
  128. package/dist/node/index.d.ts +4 -4
  129. package/dist/node/index.js +4 -4
  130. package/dist/ocsf-uYFXGVw2.js +115 -0
  131. package/dist/openai/index.d.ts +5 -5
  132. package/dist/openai/index.js +4 -4
  133. package/dist/openapi/index.d.ts +3 -3
  134. package/dist/openapi/index.js +1 -1
  135. package/dist/{openapi-CqqEbHsL.js → openapi-BJdBmYDG.js} +19 -23
  136. package/dist/{openapi-BqRBvAng.js → openapi-DBzHQbov.js} +2 -5
  137. package/dist/{openapi-CQTsgKoB.js → openapi-DcQ1Kg40.js} +3 -3
  138. package/dist/orpc/index.d.ts +5 -5
  139. package/dist/orpc/index.js +9 -11
  140. package/dist/otel/index.d.ts +2 -2
  141. package/dist/otel/index.js +26 -23
  142. package/dist/output-files-CgIsvdSa.js +140 -0
  143. package/dist/{rls-ownership-DcYlZ09B.js → ownership-BgnbOJFT.js} +387 -379
  144. package/dist/{package-root-zGkxO3oN.js → package-root-DtNnpmUd.js} +3 -2
  145. package/dist/{parse-BuyjxhZV.js → parse-CVFQHk6c.js} +3 -3
  146. package/dist/{parse-local-manifest-BrMozJCo.js → parse-local-manifest-C-q02Pal.js} +2 -4
  147. package/dist/{parse-local-manifest-JLnaBH0S.d.ts → parse-local-manifest-DvYUR0QL.d.ts} +1 -1
  148. package/dist/pdp/index.d.ts +2 -2
  149. package/dist/pdp/index.js +8 -9
  150. package/dist/{permdock-CbgvLnuo.js → permdock-L26udHSk.js} +1387 -1220
  151. package/dist/{rls-fields-CZOMlwHl.js → permission-keys-B26jeyUv.js} +1268 -2053
  152. package/dist/permission-registry-BsblpB-z.js +385 -0
  153. package/dist/{permissions-DttnqqxC.d.ts → permission-types-Dg39z9Kv.d.ts} +59 -31
  154. package/dist/{permissions-RJrovw98.js → permissions-CCJ6lmxB.js} +3 -3
  155. package/dist/{permissions-CDgvKG5L.d.ts → permissions-COH-KRgT.d.ts} +2 -2
  156. package/dist/{policy-IB6yxpC3.d.ts → policy-types-sp9P1iIV.d.ts} +661 -582
  157. package/dist/{policy-D2W7uv19.d.ts → policy-ur0BBK_e.d.ts} +2 -2
  158. package/dist/{powersync-DE19b9dT.js → powersync-BFSbSElQ.js} +2 -2
  159. package/dist/powersync-DCDgZgfZ.js +2 -0
  160. package/dist/{powersync-Dv1_aWF7.js → powersync-cZe4kzhL.js} +26 -27
  161. package/dist/prisma/index.d.ts +1 -1
  162. package/dist/prisma/index.js +6 -12
  163. package/dist/{problem-B43ztKIm.js → problem-CnWraVhC.js} +8 -7
  164. package/dist/{problem-details-_AMOYz-w.js → problem-details-DECUnXAn.js} +2 -2
  165. package/dist/{problem-details-DX075l9V.d.ts → problem-details-rIIo8B2C.d.ts} +1 -1
  166. package/dist/{protected-BdnIEFkY.d.ts → protected-B3_P7xuw.d.ts} +9 -6
  167. package/dist/{protected-utU-SLuy.js → protected-BN7BUdY1.js} +20 -8
  168. package/dist/{provider-CSQd7m92.js → provider-Bi-0HNL3.js} +23 -10
  169. package/dist/{provider-DZY281jO.d.ts → provider-kwHC9CZD.d.ts} +1 -1
  170. package/dist/{provider-store-Cfbvo4DE.js → provider-store-Ctt-81Ni.js} +6 -3
  171. package/dist/react/index.d.ts +7 -7
  172. package/dist/react/index.js +5 -5
  173. package/dist/react/provider-client.d.ts +1 -1
  174. package/dist/react/provider-client.js +1 -1
  175. package/dist/react-native/index.d.ts +20 -11
  176. package/dist/react-native/index.js +33 -17
  177. package/dist/{refs-KYb4ntaz.js → refs-f3imMjNW.js} +1 -1
  178. package/dist/relation-walk-BXnlLtg2.js +186 -0
  179. package/dist/relations-CvmSpG67.js +163 -0
  180. package/dist/{replay-CYyiLiwO.d.ts → replay-COpmZUfx.d.ts} +1 -1
  181. package/dist/request-context-BVM7aWNs.js +71 -0
  182. package/dist/request-context-C2_1lchh.d.ts +5 -0
  183. package/dist/resource-relations-D1Un3pcz.js +243 -0
  184. package/dist/retire-BFcxL6un.js +240 -0
  185. package/dist/{rls-P-BeBx0n.js → rls-55DQTuf5.js} +14 -2
  186. package/dist/{rls-DiinlRML.js → rls-BEktUaqg.js} +884 -484
  187. package/dist/{policy-xyWg7QdR.js → role-builder-B4GbKM-i.js} +235 -541
  188. package/dist/{rpc-DL9Sqvb1.js → rpc-nYC3cR_u.js} +15 -5
  189. package/dist/{run-BWc9qqvE.js → run-DMcNW_8T.js} +3 -3
  190. package/dist/{runtime-CB8gQFvS.js → runtime-D_tMXnsq.js} +1 -1
  191. package/dist/{saas-DhpJjnBA.js → saas-DtaA4JuW.js} +9 -8
  192. package/dist/{openapi-schema--ARjyfQr.js → schema-Bol6gqXA.js} +3 -5
  193. package/dist/{schema-D3MnDMxa.js → schema-DjQBcAP9.js} +4 -2
  194. package/dist/scim/index.d.ts +1 -1
  195. package/dist/scim/index.js +1 -1
  196. package/dist/{scim-BFGBBAqR.js → scim-vFR1O5oG.js} +6 -12
  197. package/dist/{scopes-CVdPrWN-.js → scopes-tvpa34ep.js} +10 -2
  198. package/dist/server/index.d.ts +18 -8
  199. package/dist/server/index.js +8 -8
  200. package/dist/{server-DlZ28Oz5.js → server-ZYEHtNHS.js} +4 -4
  201. package/dist/{create-B1d519XK.d.ts → server-types-DdqBwZN_.d.ts} +69 -33
  202. package/dist/shared-1uhI-e-b.js +294 -0
  203. package/dist/{shared-DRu8VFVM.js → shared-JhMeOsDF.js} +1 -1
  204. package/dist/{sink-Bd9PSyfq.js → sink-BTtmfPnE.js} +1 -1
  205. package/dist/{sink-B1fZzIMf.d.ts → sink-CPN4zLfs.d.ts} +1 -1
  206. package/dist/{skills-Biq5uup3.js → skills-BZdRQkxs.js} +4 -3
  207. package/dist/{skills-C5CbhhpG.js → skills-Dle4ZoLF.js} +2 -2
  208. package/dist/{snapshot-Enxd0n-s.js → snapshot-Dc9CHPME.js} +116 -13
  209. package/dist/{snapshot-cache-D6jLelln.js → snapshot-cache-Cod40D-X.js} +1 -1
  210. package/dist/{snapshot-cache-B-LxUahj.d.ts → snapshot-cache-J5T7t_vD.d.ts} +1 -1
  211. package/dist/solid/index.d.ts +22 -22
  212. package/dist/solid/index.js +40 -10
  213. package/dist/{sources-4p0-4xQm.js → sources-B1-b-R0t.js} +25 -26
  214. package/dist/{sources-BdOYLw9j.d.ts → sources-Dljy06zL.d.ts} +6 -2
  215. package/dist/{sql-xdg5f4Fi.js → sql-t8teWOfo.js} +19 -3
  216. package/dist/{src-BDwEZWrZ.js → src-Bb7no-hS.js} +194 -123
  217. package/dist/ssf/index.d.ts +3 -3
  218. package/dist/ssf/index.js +58 -61
  219. package/dist/store-9KO4BlkB.d.ts +147 -0
  220. package/dist/{store-DMAWwAJV.js → store-ILkLUj_o.js} +4 -4
  221. package/dist/{store-options-ByhZq1jV.js → store-options-CbUHDoSe.js} +16 -7
  222. package/dist/{stores-BT2pSCub.js → stores-BHXdSbw9.js} +7 -3
  223. package/dist/stores-Cxz_80g-.d.ts +31 -0
  224. package/dist/{stream-DDpvynSB.js → stream-BMui98KK.js} +2 -1
  225. package/dist/{stream-D1RXubw2.d.ts → stream-Dwsg6WwE.d.ts} +2 -2
  226. package/dist/{subject-settings-BwBmCdTR.js → subject-settings-CkEwrw3W.js} +23 -5
  227. package/dist/supabase/index.d.ts +4 -4
  228. package/dist/supabase/index.js +3 -3
  229. package/dist/supabase/middleware.d.ts +11 -5
  230. package/dist/supabase/middleware.js +10 -7
  231. package/dist/{supabase-C0qESOa-.js → supabase-C1TWlnYt.js} +36 -52
  232. package/dist/{supabase-s4o9s1O1.js → supabase-Dbqr141s.js} +2 -2
  233. package/dist/supabase-hook-BULg7Ut_.js +2 -0
  234. package/dist/{supabase-hook-ntETYCQu.js → supabase-hook-Cva3ikXz.js} +730 -781
  235. package/dist/{supautils-u8jXTGrt.js → supautils-B6HYL9eL.js} +2 -2
  236. package/dist/svelte/Protected.svelte +9 -2
  237. package/dist/svelte/index.d.ts +6 -6
  238. package/dist/svelte/index.js +25 -11
  239. package/dist/svelte/runtime.d.ts +10 -3
  240. package/dist/svelte/runtime.js +4 -3
  241. package/dist/svelte/source.d.ts +6 -6
  242. package/dist/svelte/source.js +4 -4
  243. package/dist/{validity-uOp8UpYn.js → tenancy-DshjqY0n.js} +3 -39
  244. package/dist/terminal/index.d.ts +5 -5
  245. package/dist/terminal/index.js +18 -34
  246. package/dist/testing/index.d.ts +89 -77
  247. package/dist/testing/index.js +1276 -1262
  248. package/dist/testing/saas/index.d.ts +4 -4
  249. package/dist/testing/saas/index.js +2 -2
  250. package/dist/testing/saas/permissions.d.ts +1 -1
  251. package/dist/testing/saas/permissions.js +1 -1
  252. package/dist/thenable-QSmvt-vZ.js +65 -0
  253. package/dist/{token-CIWxJOCh.js → token-Bx9qy30p.js} +1 -1
  254. package/dist/tool-refusal-CQ7OEia9.js +41 -0
  255. package/dist/trpc/index.d.ts +5 -5
  256. package/dist/trpc/index.js +7 -8
  257. package/dist/{types-DbjRN55U.d.ts → types-7rJVLWe5.d.ts} +82 -4
  258. package/dist/{types-aqOHTHcp.d.ts → types-Br9IXUBG.d.ts} +1 -1
  259. package/dist/types-ByUo56un.d.ts +88 -0
  260. package/dist/{types-Cq_H8N_X.d.ts → types-C0dee0Qf.d.ts} +2 -2
  261. package/dist/{types-DxiCGmmd.d.ts → types-CIlTojhq.d.ts} +2 -2
  262. package/dist/{types-QCuYJh4q.d.ts → types-CUcFZfpU.d.ts} +1 -1
  263. package/dist/{types-C97IskBw.d.ts → types-CqrjB9o6.d.ts} +1 -1
  264. package/dist/{types-BnIEz1sU.d.ts → types-DHrmBJLH.d.ts} +24 -6
  265. package/dist/{types-Dnemwd77.d.ts → types-DpWfQdSh.d.ts} +5 -1
  266. package/dist/{types-Bvc4oWT6.d.ts → types-DvupZE0w.d.ts} +1 -1
  267. package/dist/unplugin/index.d.ts +1 -1
  268. package/dist/unplugin/index.js +1 -1
  269. package/dist/{usage-B0YuTQRO.js → usage-4G6t643F.js} +2 -2
  270. package/dist/{usage-ItS7nLcl.js → usage-CG9nOYZw.js} +7 -7
  271. package/dist/usage-iFLJ0-rr.js +2 -0
  272. package/dist/{validation-error-Ba264OaJ.d.ts → validation-error-BSSw0l_8.d.ts} +1 -1
  273. package/dist/{validation-error-CnjZ4t92.js → validation-error-ZfUHbKvf.js} +1 -1
  274. package/dist/validity-dVrUEPJt.js +62 -0
  275. package/dist/{verifier-BxBo6I44.js → verifier-DMr_Zmb_.js} +51 -15
  276. package/dist/{rls-verify-CMv9H3wV.js → verify-BztUB3GX.js} +668 -239
  277. package/dist/{version-BvacVTZR.js → version-BEogC-rB.js} +1 -1
  278. package/dist/{views-Soe7bGSC.js → views-CJsrBS1f.js} +23 -1
  279. package/dist/{vocabulary-DA8a8zif.d.ts → vocabulary-hhEFLFoL.d.ts} +15 -6
  280. package/dist/vue/index.d.ts +24 -19
  281. package/dist/vue/index.js +24 -8
  282. package/dist/watch-C8TpsAl4.js +2 -0
  283. package/dist/{watch-DVBJ9cBq.js → watch-zeucB7eF.js} +6 -6
  284. package/dist/webmcp/index.d.ts +2 -2
  285. package/dist/webmcp/index.js +13 -37
  286. package/dist/wrap-Cr93qqdP.d.ts +14 -0
  287. package/dist/wrap-DWsU_5Bd.js +26 -0
  288. package/package.json +8 -8
  289. package/schemas/catalog-v1.json +6 -0
  290. package/skills/permdock-credentials/SKILL.md +1 -1
  291. package/skills/permdock-credentials/references/tokens-keys-links.md +7 -2
  292. package/skills/permdock-data/references/queries-and-rls.md +4 -0
  293. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +1 -0
  294. package/skills/permdock-wire/SKILL.md +2 -2
  295. package/skills/permdock-wire/references/adapters.md +9 -1
  296. package/skills/permdock-wire/references/policy-options.md +10 -1
  297. package/dist/catalog-CRW5Mx_B.js +0 -2
  298. package/dist/collect-DSWOk19R.js +0 -2
  299. package/dist/create-CMwIl-w2.js +0 -253
  300. package/dist/delegation-D8pUEuce.js +0 -103
  301. package/dist/doctor-DvH0IQff.js +0 -1194
  302. package/dist/doctor-collect-CjdO0wQX.js +0 -665
  303. package/dist/evaluation-items-CfCCejQd.js +0 -40
  304. package/dist/fields-BMl1RxoX.js +0 -26
  305. package/dist/grantee-Cv5Sogfv.js +0 -602
  306. package/dist/hosted-DJQw46hn.js +0 -266
  307. package/dist/instance-options-Dhhcnm3y.js +0 -22
  308. package/dist/load-DwJUafYN.js +0 -2
  309. package/dist/map-AcxK9o_D.js +0 -147
  310. package/dist/permissions-DVoF6dMt.js +0 -662
  311. package/dist/powersync-CrBX8hY6.js +0 -2
  312. package/dist/protected-xAr24FEC.d.ts +0 -40
  313. package/dist/relations-cjOL01hZ.js +0 -505
  314. package/dist/rls-graph-CHwx0V8q.js +0 -435
  315. package/dist/rls-shared-Cewd_-zI.js +0 -495
  316. package/dist/store-jOBYpiXC.d.ts +0 -36
  317. package/dist/stores-C0IMQrGI.d.ts +0 -52
  318. package/dist/supabase-config-Bj3iDH2I.js +0 -472
  319. package/dist/supabase-hook-gd3s8bxB.js +0 -2
  320. package/dist/thenable-okc2xDsj.js +0 -10
  321. package/dist/types-CKNSyIf_.d.ts +0 -52
  322. package/dist/usage-DorAJiU_.js +0 -2
  323. package/dist/watch-BwxLTYMZ.js +0 -2
@@ -1,7 +1,7 @@
1
- import { Cr as Actor, Dr as CustomRole, Mr as Membership, Nr as Principal, Pr as Subject, bt as RelationSource, dt as LimitStore, kr as Delegation, un as PermDockOptions } from "../../policy-IB6yxpC3.js";
2
- import { f as Permission } from "../../permissions-DttnqqxC.js";
3
- import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-CDgvKG5L.js";
4
- import { n as saasPolicy, t as SAAS_API_KEY_LIMIT } from "../../policy-D2W7uv19.js";
1
+ import { Dr as Membership, Mt as PermDockOptions, Or as Principal, Sr as CustomRole, Y as LimitStore, kr as Subject, tt as RelationSource, vr as Actor, wr as Delegation } from "../../policy-types-sp9P1iIV.js";
2
+ import { d as Permission } from "../../permission-types-Dg39z9Kv.js";
3
+ import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-COH-KRgT.js";
4
+ import { n as saasPolicy, t as SAAS_API_KEY_LIMIT } from "../../policy-ur0BBK_e.js";
5
5
  import { StandardSchemaV1 } from "@standard-schema/spec";
6
6
  //#region src/testing/saas/schema.d.ts
7
7
  type FieldKind = "string" | "boolean" | "nullable-string";
@@ -1,3 +1,3 @@
1
- import { a as saasPlans, c as rowSchema, i as saasPermissions, n as SaasFolderSchema, o as saasRoles, r as SaasProjectSchema, s as saasTenantRoleNames, t as SaasDocSchema } from "../../permissions-RJrovw98.js";
2
- import { C as saasOrg, D as saasUsers, E as saasSeed, O as SAAS_API_KEY_LIMIT, S as saasMemberships, T as saasRelations, _ as verifySaasToken, a as saasProject, b as SAAS_EXPIRED_AT, c as saasUser, d as saasIssuer, f as saasJwks, g as verifySaasSession, h as signSaasToken, i as saasLimitStore, k as saasPolicy, l as SAAS_TOKEN_TTL_SECONDS, m as saasPublicJwk, n as saasFolder, o as saasScenarioOptions, p as saasPrivateJwk, r as saasFolderScenarios, s as saasScenarios, t as saasDoc, u as saasAudience, v as saasSchemaSql, w as saasPrincipal, x as saasCustomRoles, y as saasSeedSql } from "../../saas-DhpJjnBA.js";
1
+ import { a as saasPlans, c as rowSchema, i as saasPermissions, n as SaasFolderSchema, o as saasRoles, r as SaasProjectSchema, s as saasTenantRoleNames, t as SaasDocSchema } from "../../permissions-CCJ6lmxB.js";
2
+ import { C as saasOrg, D as saasUsers, E as saasSeed, O as SAAS_API_KEY_LIMIT, S as saasMemberships, T as saasRelations, _ as verifySaasToken, a as saasProject, b as SAAS_EXPIRED_AT, c as saasUser, d as saasIssuer, f as saasJwks, g as verifySaasSession, h as signSaasToken, i as saasLimitStore, k as saasPolicy, l as SAAS_TOKEN_TTL_SECONDS, m as saasPublicJwk, n as saasFolder, o as saasScenarioOptions, p as saasPrivateJwk, r as saasFolderScenarios, s as saasScenarios, t as saasDoc, u as saasAudience, v as saasSchemaSql, w as saasPrincipal, x as saasCustomRoles, y as saasSeedSql } from "../../saas-DtaA4JuW.js";
3
3
  export { SAAS_API_KEY_LIMIT, SAAS_EXPIRED_AT, SAAS_TOKEN_TTL_SECONDS, SaasDocSchema, SaasFolderSchema, SaasProjectSchema, rowSchema, saasAudience, saasCustomRoles, saasDoc, saasFolder, saasFolderScenarios, saasIssuer, saasJwks, saasLimitStore, saasMemberships, saasOrg, saasPermissions, saasPlans, saasPolicy, saasPrincipal, saasPrivateJwk, saasProject, saasPublicJwk, saasRelations, saasRoles, saasScenarioOptions, saasScenarios, saasSchemaSql, saasSeed, saasSeedSql, saasTenantRoleNames, saasUser, saasUsers, signSaasToken, verifySaasSession, verifySaasToken };
@@ -1,2 +1,2 @@
1
- import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-CDgvKG5L.js";
1
+ import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-COH-KRgT.js";
2
2
  export { SaasDoc, SaasDocSchema, SaasFolder, SaasFolderSchema, SaasProject, SaasProjectSchema, saasPermissions, saasPlans, saasRoles, saasTenantRoleNames };
@@ -1,2 +1,2 @@
1
- import { a as saasPlans, i as saasPermissions, n as SaasFolderSchema, o as saasRoles, r as SaasProjectSchema, s as saasTenantRoleNames, t as SaasDocSchema } from "../../permissions-RJrovw98.js";
1
+ import { a as saasPlans, i as saasPermissions, n as SaasFolderSchema, o as saasRoles, r as SaasProjectSchema, s as saasTenantRoleNames, t as SaasDocSchema } from "../../permissions-CCJ6lmxB.js";
2
2
  export { SaasDocSchema, SaasFolderSchema, SaasProjectSchema, saasPermissions, saasPlans, saasRoles, saasTenantRoleNames };
@@ -0,0 +1,65 @@
1
+ import { r as isRecord } from "./compact-CAf557ZB.js";
2
+ //#region src/core/paths.ts
3
+ const FORBIDDEN_KEYS = /* @__PURE__ */ new Set([
4
+ "__proto__",
5
+ "constructor",
6
+ "prototype"
7
+ ]);
8
+ function isForbiddenKey(key) {
9
+ return FORBIDDEN_KEYS.has(key);
10
+ }
11
+ function assertSafeKey(key, context) {
12
+ if (key.length === 0 || key.split(".").some(isForbiddenKey)) throw new Error(`PermDock: forbidden ${context} key '${key}'`);
13
+ }
14
+ function ownGet(object, key) {
15
+ if (isForbiddenKey(key)) return;
16
+ if (!Object.hasOwn(object, key)) return;
17
+ return object[key];
18
+ }
19
+ function ownKeys(object) {
20
+ return Object.keys(object).filter((key) => !isForbiddenKey(key));
21
+ }
22
+ function splitPath(path) {
23
+ return path.split(".").filter((segment) => segment.length > 0);
24
+ }
25
+ function readPath(root, path) {
26
+ const segments = splitPath(path);
27
+ let current = root;
28
+ for (const segment of segments) {
29
+ if (isForbiddenKey(segment)) return;
30
+ if (current === null || current === void 0 || typeof current !== "object") return;
31
+ current = ownGet(current, segment);
32
+ }
33
+ return current;
34
+ }
35
+ //#endregion
36
+ //#region src/core/thenable.ts
37
+ function isThenable(value) {
38
+ return value !== null && typeof value === "object" && "then" in value && typeof value.then === "function";
39
+ }
40
+ /** Settles a promise nobody awaits, so its rejection is not reported as unhandled. */
41
+ function ignoreRejection(value) {
42
+ Promise.resolve(value).then(void 0, () => void 0);
43
+ }
44
+ /** Runs a Standard Schema that must answer synchronously; an asynchronous answer fails. */
45
+ function validateSync(schema, value) {
46
+ const result = schema["~standard"].validate(value);
47
+ if (isThenable(result)) {
48
+ ignoreRejection(result);
49
+ return { ok: false };
50
+ }
51
+ return result.issues === void 0 ? {
52
+ ok: true,
53
+ value: result.value
54
+ } : {
55
+ ok: false,
56
+ issues: result.issues
57
+ };
58
+ }
59
+ /** `validateSync` for a schema whose output must be an object; anything else is `undefined`. */
60
+ function validateRecord(schema, value) {
61
+ const validated = validateSync(schema, value);
62
+ return validated.ok && isRecord(validated.value) ? validated.value : void 0;
63
+ }
64
+ //#endregion
65
+ export { assertSafeKey as a, ownKeys as c, validateSync as i, readPath as l, isThenable as n, isForbiddenKey as o, validateRecord as r, ownGet as s, ignoreRejection as t, splitPath as u };
@@ -1,4 +1,4 @@
1
- import { t as canonicalJson } from "./canonical-json-DemiK4Vp.js";
1
+ import { t as canonicalJson } from "./canonical-json-CFKyFOke.js";
2
2
  import { n as sha256, t as bytesToBase64Url } from "./sha256-BO0swRXL.js";
3
3
  //#region src/core/token.ts
4
4
  /**
@@ -0,0 +1,41 @@
1
+ import { a as wireDenials } from "./problem-details-DECUnXAn.js";
2
+ import { t as describe } from "./describe-Cgkp7eP0.js";
3
+ //#region src/core/tool-refusal.ts
4
+ function deniedToolRefusal(decision, permission, resource) {
5
+ const alternatives = decision.alternatives.map((leaf) => leaf.key);
6
+ return {
7
+ text: `Denied: ${resource.id === void 0 ? permission.key : `${permission.key} on ${resource.id}`}.${alternatives.length === 0 ? "" : ` You may: ${alternatives.join(", ")}.`}`,
8
+ structured: {
9
+ outcome: "denied",
10
+ permission: permission.key,
11
+ resource,
12
+ denials: wireDenials(decision.denials),
13
+ alternatives,
14
+ detail: describe(decision).detail
15
+ }
16
+ };
17
+ }
18
+ function approvalToolRefusal(decision, permission, resource) {
19
+ return {
20
+ text: describe(decision).detail,
21
+ structured: {
22
+ outcome: "approval-required",
23
+ permission: permission.key,
24
+ resource,
25
+ token: decision.token
26
+ }
27
+ };
28
+ }
29
+ /** An MCP `CallToolResult` with `isError` set, as MCP and WebMCP clients read it. */
30
+ function toolErrorResult(refusal) {
31
+ return {
32
+ isError: true,
33
+ content: [{
34
+ type: "text",
35
+ text: refusal.text
36
+ }],
37
+ structuredContent: refusal.structured
38
+ };
39
+ }
40
+ //#endregion
41
+ export { deniedToolRefusal as n, toolErrorResult as r, approvalToolRefusal as t };
@@ -1,9 +1,9 @@
1
- import { C as Policy, Nr as Principal } from "../policy-IB6yxpC3.js";
2
- import { f as Permission } from "../permissions-DttnqqxC.js";
1
+ import { E as Policy, Or as Principal } from "../policy-types-sp9P1iIV.js";
2
+ import { d as Permission } from "../permission-types-Dg39z9Kv.js";
3
3
  import { n as RevocationFeed } from "../revocations-Cy06JNx2.js";
4
- import { A as ConnectionOptions, O as Connection, n as OpenApiHooks } from "../create-B1d519XK.js";
5
- import { t as ServerAdapterOptions } from "../bind-C_ob3LKa.js";
6
- import { t as StreamProtectOptions } from "../stream-D1RXubw2.js";
4
+ import { A as ConnectionOptions, O as Connection, i as OpenApiHooks } from "../server-types-DdqBwZN_.js";
5
+ import { t as ServerAdapterOptions } from "../bind-BzqG8SMb.js";
6
+ import { t as StreamProtectOptions } from "../stream-Dwsg6WwE.js";
7
7
  import { AnyTRPCMiddlewareFunction } from "@trpc/server";
8
8
  //#region src/trpc/create.d.ts
9
9
  type TrpcMiddlewareOpts<TCtx = object, TInput = unknown> = {
@@ -1,8 +1,8 @@
1
- import { a as problemMessage } from "../http-SO7qGttf.js";
2
- import { t as problemFromError } from "../map-error-pgUWNNtG.js";
3
- import { n as attached } from "../bind-CuzGytRf.js";
4
- import { a as reloadAfter, r as isAsyncIterable } from "../stream-DDpvynSB.js";
5
- import { i as rpcCode, n as guardStream, r as problemBody, t as bindRpcKernel } from "../rpc-DL9Sqvb1.js";
1
+ import { o as problemMessage } from "../http-BBoKefeS.js";
2
+ import { t as problemFromError } from "../map-error-BE27PYkE.js";
3
+ import { n as attached } from "../bind-kk-uyCwH.js";
4
+ import { a as reloadAfter, r as isAsyncIterable } from "../stream-BMui98KK.js";
5
+ import { i as rpcCode, n as guardStream, r as problemBody, t as bindRpcKernel } from "../rpc-nYC3cR_u.js";
6
6
  import { TRPCError, isTrackedEnvelope } from "@trpc/server";
7
7
  //#region src/trpc/create.ts
8
8
  const PROBLEM = Symbol.for("permdock.problem");
@@ -57,7 +57,7 @@ function errorFormatter(opts) {
57
57
  };
58
58
  }
59
59
  function createPermDock(policy, options) {
60
- const { kernel, bind, attach, scopeOf, connection, evaluate } = bindRpcKernel(policy, options, "trpc", (opts) => opts.ctx, (opts) => opts.path);
60
+ const { kernel, bind, attach, scopeOf, connection, evaluate, guard: runGuard } = bindRpcKernel(policy, options, "trpc", (opts) => opts.ctx, (opts) => opts.path);
61
61
  const permdock = () => (async (opts) => {
62
62
  const request = bind(opts);
63
63
  const instance = await attached(async () => kernel.permdock(request, await scopeOf(opts)));
@@ -81,8 +81,7 @@ function createPermDock(policy, options) {
81
81
  };
82
82
  };
83
83
  const protect = (permission, loadData, protectOptions) => (async (opts) => {
84
- const request = bind(opts);
85
- const guard = await kernel.protect(permission, loadData === void 0 ? void 0 : () => loadData(opts), protectOptions)(request, await scopeOf(opts));
84
+ const { request, guard } = await runGuard(permission, loadData, opts, protectOptions);
86
85
  if (guard.ok) {
87
86
  const nextCtx = {
88
87
  ...opts.ctx,
@@ -1,5 +1,5 @@
1
- import { n as RoleThrough } from "./types-C97IskBw.js";
2
- import { o as SqlMembershipSource } from "./sources-BdOYLw9j.js";
1
+ import { n as RoleThrough } from "./types-CqrjB9o6.js";
2
+ import { o as SqlMembershipSource } from "./sources-Dljy06zL.js";
3
3
  //#region src/cli/types.d.ts
4
4
  type CollectConfig = {
5
5
  readonly srcPath?: readonly string[];
@@ -140,9 +140,19 @@ type RlsConfig = {
140
140
  /**
141
141
  * Resolve tenant-defined custom roles in the helpers: `custom_role_permissions` and
142
142
  * `custom_role_includes` in `database` mode, the `memberships[].grants` claim in `jwt` mode,
143
- * always intersected with the `permdock_ceiling` view. Off by default.
143
+ * always intersected with the `permdock_ceiling` view. Off by default. An
144
+ * object turns them on and names the application's existing role tables
145
+ * that `--backfill-out` copies from.
144
146
  */
145
- readonly customRoles?: boolean;
147
+ readonly customRoles?: boolean | RlsCustomRolesConfig;
148
+ /**
149
+ * Triggers the application owns on tables `generate` creates, by table
150
+ * name without the schema (`custom_role_permissions`): written after the
151
+ * tables, each as `drop trigger if exists` and `create trigger`.
152
+ */
153
+ readonly triggers?: Readonly<Record<string, readonly RlsTrigger[]>>;
154
+ /** Register generated tables with an audit function, such as `better_supabase.audit`. */
155
+ readonly audit?: RlsAudit;
146
156
  /** How the generated custom-role write functions check the caller (`database` mode with `customRoles`). */
147
157
  readonly customRoleWrites?: {
148
158
  /**
@@ -350,6 +360,63 @@ type RlsCustomRoleTable = {
350
360
  /** A boolean column marking rows that are not custom roles (declared or system roles); those rows are skipped. */
351
361
  readonly skip?: string;
352
362
  };
363
+ /** `rls.customRoles` as an object: custom roles on, plus where existing ones live. */
364
+ type RlsCustomRolesConfig = {
365
+ /** The application's role tables `--backfill-out` copies into `custom_role_permissions` and `custom_role_includes`. */
366
+ readonly from?: RlsCustomRolesFrom;
367
+ };
368
+ /**
369
+ * Existing custom-role data. Each row's role is a row of
370
+ * `rls.customRoleWrites.roles`, which supplies its name, tenant, scope,
371
+ * instance and `skip` flag.
372
+ */
373
+ type RlsCustomRolesFrom = {
374
+ readonly permissions: {
375
+ /** `table` or `schema.table`: one row per permission a role holds. */
376
+ readonly table: string;
377
+ /** The reference to the roles table: `{ through: 'roles', on: { role_id: 'id' }, column: 'key' }`. */
378
+ readonly role: RoleThrough;
379
+ /** The permission key column, or a reference to a permissions table that holds the key. */
380
+ readonly permission: string | RoleThrough;
381
+ /** A text column holding `allow` or `deny`. Without it every row allows. */
382
+ readonly effect?: string;
383
+ /** A text column holding the level of a leveled allow. */
384
+ readonly level?: string;
385
+ };
386
+ readonly includes?: {
387
+ readonly table: string;
388
+ /** The reference to the including role's row in the roles table. */
389
+ readonly role: RoleThrough;
390
+ /** The included role's key column, or a reference to the roles table. */
391
+ readonly include: string | RoleThrough;
392
+ };
393
+ };
394
+ /** One trigger the application owns on a generated table (`rls.triggers`). */
395
+ type RlsTrigger = {
396
+ /** The trigger name; `permdock_` is reserved for generated triggers. */
397
+ readonly name: string;
398
+ readonly when: "before" | "after";
399
+ readonly events: readonly ("insert" | "update" | "delete" | "truncate")[];
400
+ /** Default `row`. */
401
+ readonly level?: "row" | "statement";
402
+ /** `schema.function`, a trigger function that already exists. */
403
+ readonly function: string;
404
+ /** String arguments passed to the trigger function. */
405
+ readonly args?: readonly string[];
406
+ };
407
+ /**
408
+ * `rls.audit`: one `select <function>('<schema>.<table>'::regclass, <args>)`
409
+ * per generated table, for an audit module that registers a table by
410
+ * creating its own trigger.
411
+ */
412
+ type RlsAudit = {
413
+ /** `schema.function` taking the table as its first argument. */
414
+ readonly function: string;
415
+ /** Generated tables, without the schema. Default the custom-role tables and `user_roles`, those this run creates. */
416
+ readonly tables?: readonly string[];
417
+ /** Named text arguments: `{ tenant_column: 'tenant_id' }` passes `tenant_column => 'tenant_id'`. */
418
+ readonly args?: Readonly<Record<string, string>>;
419
+ };
353
420
  /** `rls.shims`: where the legacy-named wrappers go. */
354
421
  type RlsShimsConfig = {
355
422
  /** Schema of the legacy helpers. Default `public`. */
@@ -381,6 +448,17 @@ type RlsMigrateConfig = {
381
448
  readonly globalScopes?: readonly string[];
382
449
  /** For `scoped` helpers, a scope literal's PermDock scope when the names differ. */
383
450
  readonly scopes?: Readonly<Record<string, string>>;
451
+ /**
452
+ * Materialised permission tables to retire, by `schema.table`: a table the
453
+ * application keeps in step with triggers and reads instead of the grants.
454
+ * `rls migrate --retire-out` drops it with its refresh triggers once
455
+ * nothing else reads it.
456
+ */
457
+ readonly tables?: Readonly<Record<string, RlsMigrateTable>>;
458
+ };
459
+ type RlsMigrateTable = {
460
+ /** The functions that keep the table in step. Default: every function in `--sql` whose body writes it, and every function that calls one. */
461
+ readonly refresh?: readonly string[];
384
462
  };
385
463
  /** Where global roles live: `table (user, role)`. Defaults `user_id` and `role`. */
386
464
  type GlobalRoles = {
@@ -1,4 +1,4 @@
1
- import { G as Approver, Mr as Membership, Pr as Subject, dr as RelationGrantee, o as ApprovalStage, r as ApprovalMode } from "./policy-IB6yxpC3.js";
1
+ import { Dr as Membership, Jn as RelationGrantee, Ln as Approver, kr as Subject, o as ApprovalStage, r as ApprovalMode } from "./policy-types-sp9P1iIV.js";
2
2
  //#region src/approvals/types.d.ts
3
3
  type ApprovalStatus = "pending" | "approved" | "rejected" | "expired";
4
4
  type ApprovalApprovers = {
@@ -0,0 +1,88 @@
1
+ import { an as Snapshot, ir as Decision, jt as PermDock, rr as ApprovalRequiredDecision, ur as GrantedDecision, ut as TokenVerifier } from "./policy-types-sp9P1iIV.js";
2
+ import { d as Permission } from "./permission-types-Dg39z9Kv.js";
3
+ import { t as PermissionBoundaryState } from "./boundary-BmHxVH1J.js";
4
+ import { l as PermissionState, t as ClientStore, u as ProviderOptionsBase } from "./store-9KO4BlkB.js";
5
+ import { Snippet } from "svelte";
6
+ import { Readable } from "svelte/store";
7
+ //#region src/svelte/boundary.d.ts
8
+ type PermissionBoundaryProps = {
9
+ readonly children?: Snippet;
10
+ /** Rendered in place of the children when one throws `PermDockDeniedError`. */
11
+ readonly denied?: Snippet<[PermissionBoundaryState]>;
12
+ /** Rendered for `PermDockApprovalRequiredError`; defaults to `denied`. */
13
+ readonly approval?: Snippet<[PermissionBoundaryState]>;
14
+ };
15
+ //#endregion
16
+ //#region src/client/views.d.ts
17
+ /**
18
+ * What `Protected` renders: `pending` while an endpoint answer is in flight,
19
+ * `approval` for an approval-required decision, `fallback` for any other
20
+ * denial.
21
+ */
22
+ type ProtectedView = (PermissionState & {
23
+ readonly slot: "pending" | "fallback";
24
+ }) | {
25
+ readonly allowed: false;
26
+ readonly status: PermissionState["status"];
27
+ readonly decision: ApprovalRequiredDecision;
28
+ readonly slot: "approval";
29
+ } | {
30
+ readonly allowed: true;
31
+ readonly status: PermissionState["status"];
32
+ readonly decision: GrantedDecision;
33
+ readonly slot: "default";
34
+ };
35
+ /** Provider-wide content for the `Protected` slots a component leaves out. */
36
+ type SlotDefaults<P, F, A = F> = {
37
+ readonly pending?: P;
38
+ readonly fallback?: F;
39
+ readonly approval?: A;
40
+ };
41
+ /**
42
+ * The content `Protected` renders for a non-default slot. Its own prop wins
43
+ * over the provider default; `approval` falls back to `fallback`, first the
44
+ * component's, then the provider's.
45
+ */
46
+ declare function slotContent<P, F, A>(slot: "pending", own: SlotDefaults<P, F, A>, defaults: SlotDefaults<P, F, A> | undefined): P | undefined;
47
+ declare function slotContent<P, F, A>(slot: "fallback", own: SlotDefaults<P, F, A>, defaults: SlotDefaults<P, F, A> | undefined): F | undefined;
48
+ declare function slotContent<P, F, A>(slot: "approval", own: SlotDefaults<P, F, A>, defaults: SlotDefaults<P, F, A> | undefined): F | A | undefined;
49
+ //#endregion
50
+ //#region src/svelte/protected.d.ts
51
+ type ProtectedProps = {
52
+ readonly permission: Permission;
53
+ readonly data?: unknown;
54
+ readonly tenant?: string;
55
+ readonly children?: Snippet<[GrantedDecision]>;
56
+ readonly pending?: Snippet;
57
+ readonly fallback?: Snippet<[Decision]>;
58
+ /** Rendered for an approval-required decision; defaults to `fallback`. */
59
+ readonly approval?: Snippet<[ApprovalRequiredDecision]>;
60
+ };
61
+ /** The instance for `tenant`, built once per store change rather than once per check. */
62
+ declare function scopedFor(store: ClientStore, tenant: string | undefined, _generation?: number): PermDock | undefined;
63
+ declare function viewFor(store: ClientStore, reference: Permission, data: unknown, scoped: PermDock | undefined, _generation?: number): ProtectedView;
64
+ //#endregion
65
+ //#region src/svelte/types.d.ts
66
+ type PermDockSvelteOptions = ProviderOptionsBase & {
67
+ /**
68
+ * A getter (`() => data.snapshot`) or a readable store re-hydrates the
69
+ * store when it changes; a promise keeps the store `pending` until it
70
+ * settles (render the same promise with `{#await}`).
71
+ */
72
+ readonly snapshot: Snapshot | string | (() => Snapshot | string) | Readable<Snapshot | string> | PromiseLike<Snapshot | string>;
73
+ /** A getter (`() => page.params.org`) switches the active tenant (`refresh({ tenant })`) when it changes. */
74
+ readonly tenant?: string | (() => string | undefined);
75
+ /** A getter is read on every request, so a rotated token applies without a new store. */
76
+ readonly headers?: Readonly<Record<string, string>> | (() => Readonly<Record<string, string>> | undefined);
77
+ readonly verifier?: TokenVerifier;
78
+ /** What every `<Protected>` renders for a snippet it leaves out. */
79
+ readonly defaults?: PermDockDefaults;
80
+ };
81
+ /** Snippets for the `<Protected>` slots a component leaves out. */
82
+ type PermDockDefaults = {
83
+ readonly pending?: Snippet;
84
+ readonly fallback?: Snippet<[Decision]>;
85
+ readonly approval?: Snippet<[ApprovalRequiredDecision]>;
86
+ };
87
+ //#endregion
88
+ export { viewFor as a, scopedFor as i, PermDockSvelteOptions as n, slotContent as o, ProtectedProps as r, PermissionBoundaryProps as s, PermDockDefaults as t };
@@ -1,5 +1,5 @@
1
- import { Cr as Actor, Ft as TokenVerifier, Nr as Principal, Nt as TokenFailureCause, Pr as Subject, ct as JwtClaims, et as AuthEvent, gt as MembershipSource } from "./policy-IB6yxpC3.js";
2
- import { f as ApprovalStore } from "./types-aqOHTHcp.js";
1
+ import { K as JwtClaims, Or as Principal, Z as MembershipSource, ct as TokenFailureCause, kr as Subject, ut as TokenVerifier, vr as Actor, yn as AuthEvent } from "./policy-types-sp9P1iIV.js";
2
+ import { f as ApprovalStore } from "./types-Br9IXUBG.js";
3
3
  import { t as ClientNames } from "./clients-C7zLFuWT.js";
4
4
  import { n as RevocationFeed } from "./revocations-Cy06JNx2.js";
5
5
  import { StandardSchemaV1 } from "@standard-schema/spec";
@@ -1,5 +1,5 @@
1
- import { $n as ExplainedDecision, C as Policy, D as PolicyVocabulary, In as ArazzoPlan, Ln as ArazzoSimulateInput, Mr as Membership, Nr as Principal, Pr as Subject, Yn as Decision, cn as DeriveOptions, fn as SimulateOptions, ln as PermDock, mn as WhereResult, sn as DecideOptions, un as PermDockOptions } from "./policy-IB6yxpC3.js";
2
- import { f as Permission, m as PermissionTree } from "./permissions-DttnqqxC.js";
1
+ import { At as DeriveOptions, Dr as Membership, E as Policy, It as WhereResult, Mn as ArazzoSimulateInput, Mt as PermDockOptions, Or as Principal, Pt as SimulateOptions, ir as Decision, j as PolicyVocabulary, jn as ArazzoPlan, jt as PermDock, kr as Subject, kt as DecideOptions, lr as ExplainedDecision } from "./policy-types-sp9P1iIV.js";
2
+ import { d as Permission, p as PermissionTree } from "./permission-types-Dg39z9Kv.js";
3
3
  //#region src/pdp/types.d.ts
4
4
  type RemotePdpAuth = {
5
5
  readonly bearer: string | (() => string | Promise<string>);
@@ -1,4 +1,4 @@
1
- import { D as PolicyVocabulary, ln as PermDock, rt as DecisionEvent } from "./policy-IB6yxpC3.js";
1
+ import { j as PolicyVocabulary, jt as PermDock, xn as DecisionEvent } from "./policy-types-sp9P1iIV.js";
2
2
  //#region src/otel/types.d.ts
3
3
  declare const GENAI_SEMCONV_PIN = "1.37.0";
4
4
  declare const GEN_AI_TOOL_NAME = "gen_ai.tool.name";
@@ -1,4 +1,4 @@
1
- import { Nr as Principal, et as AuthEvent } from "./policy-IB6yxpC3.js";
1
+ import { Or as Principal, yn as AuthEvent } from "./policy-types-sp9P1iIV.js";
2
2
  import { t as ClientNames } from "./clients-C7zLFuWT.js";
3
3
  import { StandardSchemaV1 } from "@standard-schema/spec";
4
4
  //#region src/supabase/claims.d.ts
@@ -1,5 +1,7 @@
1
- import { Ft as TokenVerifier, Tt as Snapshot, Yn as Decision } from "./policy-IB6yxpC3.js";
2
- import { f as Permission } from "./permissions-DttnqqxC.js";
1
+ import { an as Snapshot, ir as Decision, rr as ApprovalRequiredDecision, ur as GrantedDecision, ut as TokenVerifier } from "./policy-types-sp9P1iIV.js";
2
+ import { d as Permission } from "./permission-types-Dg39z9Kv.js";
3
+ import { n as DescribeMessages } from "./describe-C3ldA9os.js";
4
+ import { n as ClientStoreOptions } from "./store-9KO4BlkB.js";
3
5
  import { ReactNode } from "react";
4
6
  //#region src/react/types.d.ts
5
7
  type PermDockProviderProps = ({
@@ -32,17 +34,33 @@ type PermDockProviderProps = ({
32
34
  readonly headers?: Readonly<Record<string, string>>;
33
35
  readonly maxAge?: number;
34
36
  readonly verifier?: TokenVerifier;
37
+ /** What every `<Protected>` below renders for a slot it leaves out. */
38
+ readonly defaults?: PermDockDefaults;
39
+ /** Localised text for `useDescribe()`. */
40
+ readonly messages?: DescribeMessages;
41
+ /** Called with each snapshot the store accepts; the latest prop is called. */
42
+ readonly onSnapshot?: NonNullable<ClientStoreOptions["onSnapshot"]>;
43
+ /** Called when the store drops its snapshot; the latest prop is called. */
44
+ readonly onClear?: () => void;
45
+ /** Milliseconds between approval status polls. Defaults to 2000. */
46
+ readonly approvalInterval?: number;
35
47
  readonly children: ReactNode;
36
48
  };
49
+ /** Provider-wide content for the `<Protected>` slots a component leaves out. */
50
+ type PermDockDefaults = {
51
+ readonly pending?: ReactNode;
52
+ readonly fallback?: ReactNode | ((decision: Decision) => ReactNode);
53
+ readonly approval?: ReactNode | ((decision: ApprovalRequiredDecision) => ReactNode);
54
+ };
37
55
  type ProtectedProps = {
38
56
  readonly permission: Permission;
39
57
  readonly data?: unknown;
40
58
  readonly tenant?: string;
41
59
  readonly pending?: ReactNode;
42
60
  readonly fallback?: ReactNode | ((decision: Decision) => ReactNode);
43
- readonly children: ReactNode | ((decision: Extract<Decision, {
44
- readonly outcome: "granted";
45
- }>) => ReactNode);
61
+ /** Rendered for an approval-required decision; defaults to `fallback`. */
62
+ readonly approval?: ReactNode | ((decision: ApprovalRequiredDecision) => ReactNode);
63
+ readonly children: ReactNode | ((decision: GrantedDecision) => ReactNode);
46
64
  };
47
65
  //#endregion
48
- export { ProtectedProps as n, PermDockProviderProps as t };
66
+ export { PermDockProviderProps as n, ProtectedProps as r, PermDockDefaults as t };
@@ -1,4 +1,4 @@
1
- import { S as ResourceRelation } from "./permissions-DttnqqxC.js";
1
+ import { S as ResourceRelation } from "./permission-types-Dg39z9Kv.js";
2
2
  //#region src/catalog/types.d.ts
3
3
  type CatalogUsage = {
4
4
  readonly file: string;
@@ -64,6 +64,8 @@ type CatalogResource = {
64
64
  /** The boolean column that keeps ancestor grants out of a row. */
65
65
  readonly restricted?: string;
66
66
  readonly restrictedStops?: readonly string[];
67
+ /** `resource(…, { meta })`: titles plus the app's own `x`; absent when empty. */
68
+ readonly meta?: Readonly<Record<string, unknown>>;
67
69
  };
68
70
  type CatalogRole = {
69
71
  readonly key: string;
@@ -146,6 +148,8 @@ type CatalogGrant = {
146
148
  };
147
149
  /** Present when the grant is a closure, reads the relation graph or is opaque; `where` and `check` are then omitted. */
148
150
  readonly portable?: false;
151
+ /** The grant's `meta`: a description plus the app's own `x`; absent when empty. */
152
+ readonly meta?: Readonly<Record<string, unknown>>;
149
153
  };
150
154
  /** `permissions.catalog.json`, validated by `schemas/catalog-v1.json`. */
151
155
  type CatalogDocument = {
@@ -1,4 +1,4 @@
1
- import { f as Permission } from "./permissions-DttnqqxC.js";
1
+ import { d as Permission } from "./permission-types-Dg39z9Kv.js";
2
2
  //#region src/agent/types.d.ts
3
3
  type ToolBinding = {
4
4
  readonly permission: Permission;
@@ -1,4 +1,4 @@
1
- import { a as PermDockPluginOptions } from "../types-DbjRN55U.js";
1
+ import { a as PermDockPluginOptions } from "../types-7rJVLWe5.js";
2
2
  import { createUnplugin } from "unplugin";
3
3
  //#region src/unplugin/index.d.ts
4
4
  type CreateUnplugin = typeof createUnplugin<PermDockPluginOptions | undefined>;
@@ -1,4 +1,4 @@
1
- import { n as createCollectScheduler, r as report } from "../watch-DVBJ9cBq.js";
1
+ import { n as createCollectScheduler, r as report } from "../watch-zeucB7eF.js";
2
2
  import { t as peerHint } from "../peer-BOr_kJE1.js";
3
3
  import { createRequire } from "node:module";
4
4
  //#region src/unplugin/index.ts
@@ -1,4 +1,4 @@
1
- import { a as listArg, i as globalArgs, t as COMMAND_DESCRIPTIONS } from "./commands-BeaGNj_o.js";
1
+ import { a as listArg, i as globalArgs, t as COMMAND_DESCRIPTIONS } from "./commands-Cpip4ULx.js";
2
2
  import { defineCommand } from "citty";
3
3
  //#region src/cli/commands/usage.ts
4
4
  function usage(ctx) {
@@ -24,7 +24,7 @@ function usage(ctx) {
24
24
  }
25
25
  },
26
26
  async run({ args: parsed, rawArgs }) {
27
- const result = await (await import("./usage-DorAJiU_.js")).runUsage({
27
+ const result = await (await import("./usage-iFLJ0-rr.js")).runUsage({
28
28
  cwd: ctx.cwd,
29
29
  config: ctx.config,
30
30
  ignore: listArg(rawArgs, "ignore"),
@@ -1,17 +1,17 @@
1
- import { c as getResource } from "./permissions-DVoF6dMt.js";
1
+ import { a as getResource } from "./permission-registry-BsblpB-z.js";
2
2
  import { o as usageResult } from "./errors-CWfoNg9N.js";
3
- import { a as USAGE_REPORT_SCHEMA } from "./version-BvacVTZR.js";
4
- import { o as jsonSchemaOf } from "./catalog-doc-DdGm82XT.js";
5
- import { i as rel, r as listSourceFiles } from "./files-DWUN9PzI.js";
6
- import { a as loadModule, n as asPolicy, o as pickNamed } from "./load-DhWEB9P1.js";
7
- import { r as runCollect } from "./collect-DSTE3ml9.js";
3
+ import { a as rel, r as listSourceFiles } from "./files-D_JIzUrP.js";
4
+ import { a as USAGE_REPORT_SCHEMA } from "./version-BEogC-rB.js";
5
+ import { o as jsonSchemaOf } from "./catalog-doc-DWtg0gGR.js";
6
+ import { a as loadModule, n as asPolicy, s as pickNamed } from "./load-C3_oTHyO.js";
7
+ import { r as runCollect } from "./collect-2SrB7lfk.js";
8
8
  import { existsSync, readFileSync, realpathSync } from "node:fs";
9
9
  import { dirname, resolve } from "node:path";
10
10
  import { fileURLToPath, pathToFileURL } from "node:url";
11
11
  import { createJiti } from "jiti";
12
12
  import { Visitor, parseSync } from "oxc-parser";
13
13
  import { isBuiltin } from "node:module";
14
- //#region src/cli/doctor-source.ts
14
+ //#region src/cli/doctor/source.ts
15
15
  /** Entries a client file must not import; `tests/cli/doctor-entries.test.ts` keeps it in step with `exports`. */
16
16
  const SERVER_SPECIFIERS = [
17
17
  "permdock/a2a",
@@ -0,0 +1,2 @@
1
+ import { t as runUsage } from "./usage-CG9nOYZw.js";
2
+ export { runUsage };
@@ -1,4 +1,4 @@
1
- import { a as ProblemDetails } from "./errors-DPdqI50v.js";
1
+ import { a as ProblemDetails } from "./errors-OD_4c__H.js";
2
2
  import { StandardSchemaV1 } from "@standard-schema/spec";
3
3
  //#region src/core/validation-error.d.ts
4
4
  /** The base of every Problem Details `type` URI; defined here so a validation error does not pull in the Problem Details builders. */
@@ -1,4 +1,4 @@
1
- import { t as compact } from "./compact-y6vfu2_f.js";
1
+ import { t as compact } from "./compact-CAf557ZB.js";
2
2
  //#region src/core/validation-error.ts
3
3
  /** The base of every Problem Details `type` URI; defined here so a validation error does not pull in the Problem Details builders. */
4
4
  const PROBLEM_BASE = "https://permdock.com/problems";