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
@@ -178,9 +178,9 @@ const FRAMEWORKS = [
178
178
  }
179
179
  ];
180
180
  /**
181
- * Agent runtimes and UI recipes. The preset code keeps one bitset per
182
- * `kind`, each in this list's order, so a new entry goes after the last
183
- * one of its kind.
181
+ * Agent runtimes and UI recipes. The preset code keeps one bitset per `kind`,
182
+ * each in this list's order, so a new entry goes after the last one of its
183
+ * kind.
184
184
  */
185
185
  const INTEGRATIONS = [
186
186
  {
@@ -250,10 +250,9 @@ function requiredBy(choices, picked) {
250
250
  return choices.filter((choice) => picked.includes(choice.id)).flatMap((choice) => choice.requires ?? []);
251
251
  }
252
252
  /**
253
- * The preset `input` describes, with every feature its archetype,
254
- * integrations and other features require turned on, and lists in
255
- * catalogue order. Features are only ever added, so resolving twice is a
256
- * no-op.
253
+ * The preset `input` describes, with every feature its archetype, integrations
254
+ * and other features require turned on, and lists in catalogue order. Features
255
+ * are only ever added, so resolving twice is a no-op.
257
256
  */
258
257
  function resolvePreset(input) {
259
258
  const integrations = INTEGRATIONS.map((item) => item.id).filter((id) => (input.integrations ?? PRESET_DEFAULTS.integrations).includes(id));
@@ -282,12 +281,12 @@ function resolvePreset(input) {
282
281
  //#endregion
283
282
  //#region src/preset/codec.ts
284
283
  /**
285
- * Preset codes: `p1` followed by base64url bytes. Version 1 packs, in
286
- * order, one byte each for the archetype, auth, backend and framework
287
- * index, then a bitset per multi-select list (features, agent
288
- * integrations, UI integrations, services), each as many bytes as the list
289
- * needs. A list only grows at the end, so a code keeps its meaning as the
290
- * catalogue grows; a new layout gets a new version prefix.
284
+ * Preset codes: `p1` followed by base64url bytes. Version 1 packs, in order,
285
+ * one byte each for the archetype, auth, backend and framework index, then a
286
+ * bitset per multi-select list (features, agent integrations, UI integrations,
287
+ * services), each as many bytes as the list needs. A list only grows at the
288
+ * end, so a code keeps its meaning as the catalogue grows; a new layout gets a
289
+ * new version prefix.
291
290
  */
292
291
  const VERSION = "p1";
293
292
  const AGENT_INTEGRATIONS = INTEGRATIONS.filter((item) => item.kind === "agent");
@@ -349,8 +348,8 @@ function encodePreset(preset) {
349
348
  ]);
350
349
  }
351
350
  /**
352
- * The preset a code stands for, resolved, or `undefined` for a code that
353
- * is not a version this package reads or does not decode.
351
+ * The preset a code stands for, resolved, or `undefined` for a code that is not
352
+ * a version this package reads or does not decode.
354
353
  */
355
354
  function decodePreset(code) {
356
355
  if (!code.startsWith(VERSION)) return;
@@ -384,7 +383,10 @@ function decodePreset(code) {
384
383
  }
385
384
  //#endregion
386
385
  //#region src/preset/flags.ts
387
- /** One `permdock init` flag per preset key, with the catalogue it takes values from. */
386
+ /**
387
+ * One `permdock init` flag per preset key, with the catalogue it takes values
388
+ * from.
389
+ */
388
390
  const PRESET_FLAGS = {
389
391
  archetype: {
390
392
  flag: "archetype",
@@ -423,9 +425,9 @@ const PRESET_FLAGS = {
423
425
  }
424
426
  };
425
427
  /**
426
- * The `permdock init` flags that select `preset`, leaving out defaults and
427
- * the features its archetype and integrations already turn on, so
428
- * `permdock init <flags>` resolves to the same preset.
428
+ * The `permdock init` flags that select `preset`, leaving out defaults and the
429
+ * features its archetype and integrations already turn on, so `permdock init
430
+ * <flags>` resolves to the same preset.
429
431
  */
430
432
  function presetFlags(preset) {
431
433
  const implied = resolvePreset({
@@ -867,9 +869,9 @@ function quote(value) {
867
869
  return JSON.stringify(value);
868
870
  }
869
871
  /**
870
- * An environment read in the generated code. Built from parts so this
871
- * runtime chunk carries no `process.` token, which the WinterTC check reads
872
- * as a Node global; the generated file has it whole.
872
+ * An environment read in the generated code. Built from parts so this runtime
873
+ * chunk carries no `process.` token, which the WinterTC check reads as a Node
874
+ * global; the generated file has it whole.
873
875
  */
874
876
  function env(name) {
875
877
  return ["process", `env[${quote(name)}]`].join(".");
@@ -1224,7 +1226,10 @@ function backendFiles(ctx) {
1224
1226
  default: return ctx.preset.backend;
1225
1227
  }
1226
1228
  }
1227
- /** What `permdock.ts` adds for the backend: imports, statements before `defineApp`, and its options. */
1229
+ /**
1230
+ * What `permdock.ts` adds for the backend: imports, statements before
1231
+ * `defineApp`, and its options.
1232
+ */
1228
1233
  function backendApp(ctx) {
1229
1234
  if (ctx.preset.backend !== "supabase") return {
1230
1235
  imports: [],
@@ -1286,7 +1291,10 @@ ${entries.join("\n")}
1286
1291
  });
1287
1292
  `;
1288
1293
  }
1289
- /** What a role's grant becomes under the preset's features; the matrix and the code read the same answer. */
1294
+ /**
1295
+ * What a role's grant becomes under the preset's features; the matrix and the
1296
+ * code read the same answer.
1297
+ */
1290
1298
  function grantShape(preset, role, grant) {
1291
1299
  const has = (feature) => preset.features.includes(feature);
1292
1300
  const resource = DOMAINS[preset.archetype].resources.find((item) => item.name === grant.resource);
@@ -1607,8 +1615,21 @@ export function decideReadKey(permdock: PermDock, id: string) {
1607
1615
  }
1608
1616
  function rlsOption(ctx) {
1609
1617
  if (!ctx.has("rls")) return null;
1610
- const table = `{\n table: "org_members",\n tenant: "org_id",\n user: "user_id",\n role: "role",\n }`;
1611
- return ctx.preset.backend === "supabase" ? `supabaseRls({${ctx.has("tenancy") ? `\n memberships: ${table},\n ` : ""}})` : `{\n dialect: "guc",${ctx.has("tenancy") ? `\n memberships: { tenant: ${table} },` : ""}\n }`;
1618
+ return ctx.preset.backend === "supabase" ? `supabaseRls({${ctx.has("tenancy") ? `\n memberships: {
1619
+ table: "org_members",
1620
+ tenant: "org_id",
1621
+ user: "user_id",
1622
+ role: "role",
1623
+ },\n ` : ""}})` : `{\n dialect: "guc",${ctx.has("tenancy") ? `\n memberships: {
1624
+ scopes: {
1625
+ tenant: {
1626
+ table: "org_members",
1627
+ columns: { tenant: "org_id" },
1628
+ user: "user_id",
1629
+ role: "role",
1630
+ },
1631
+ },
1632
+ },` : ""}\n }`;
1612
1633
  }
1613
1634
  function configFile(ctx) {
1614
1635
  const rls = rlsOption(ctx);
@@ -1626,7 +1647,10 @@ ${options.join("\n")}
1626
1647
  });
1627
1648
  `);
1628
1649
  }
1629
- /** The `@permdock` registry recipes for the preset's UI; native has the gate and the upgrade prompt. */
1650
+ /**
1651
+ * The `@permdock` registry recipes for the preset's UI; native has the gate and
1652
+ * the upgrade prompt.
1653
+ */
1630
1654
  function recipesFor(ctx) {
1631
1655
  const web = ["gated-button"];
1632
1656
  if (ctx.has("approvals")) web.push("approval-request-dialog");
@@ -1675,9 +1699,9 @@ function docsFor(ctx) {
1675
1699
  return [...new Set(docs)];
1676
1700
  }
1677
1701
  /**
1678
- * The files, dependencies and recipes for `preset`. Pure: no file system
1679
- * and no network, so the same function runs in the CLI, in a registry route
1680
- * and in the browser preview on /create.
1702
+ * The files, dependencies and recipes for `preset`. Pure: no file system and no
1703
+ * network, so the same function runs in the CLI, in a registry route and in the
1704
+ * browser preview on /create.
1681
1705
  */
1682
1706
  function generatePreset(preset, options = {}) {
1683
1707
  const ctx = {
@@ -1713,8 +1737,8 @@ const NONE = {
1713
1737
  limit: false
1714
1738
  };
1715
1739
  /**
1716
- * Who may do what under `preset`, from the same model the generated policy
1717
- * is written from, for a page that shows the policy without running it.
1740
+ * Who may do what under `preset`, from the same model the generated policy is
1741
+ * written from, for a page that shows the policy without running it.
1718
1742
  */
1719
1743
  function presetMatrix(preset) {
1720
1744
  const domain = DOMAINS[preset.archetype];
@@ -1,13 +1,13 @@
1
- import { t as freezeCopy } from "./freeze-CrU8nQeX.js";
2
- import { a as ownRecord } from "./paths-DXSHAMIa.js";
1
+ import { t as freezeCopy } from "./freeze-jjan0lCv.js";
2
+ import { a as ownRecord } from "./paths-CUvURzHp.js";
3
3
  //#region src/core/principal-source.ts
4
4
  function nonEmpty(value) {
5
5
  return typeof value === "string" && value.trim() !== "";
6
6
  }
7
7
  /**
8
8
  * A `PrincipalIdentity` in the form sources compare: an email trimmed and
9
- * lower-cased with no provider or workspace, a chat identity with a
10
- * provider. Anything else, inherited fields included, is `undefined`.
9
+ * lower-cased with no provider or workspace, a chat identity with a provider.
10
+ * Anything else, inherited fields included, is `undefined`.
11
11
  */
12
12
  function normalizeIdentity(value) {
13
13
  const record = ownRecord(value);
@@ -55,9 +55,9 @@ async function loadPrincipal(source, id, tenant) {
55
55
  }
56
56
  }
57
57
  /**
58
- * `source.principalByIdentity(identity)` over the normalised identity,
59
- * failing closed: no source or method, an invalid identity, `null`, a throw
60
- * or a rejection is `null`.
58
+ * `source.principalByIdentity(identity)` over the normalised identity, failing
59
+ * closed: no source or method, an invalid identity, `null`, a throw or a
60
+ * rejection is `null`.
61
61
  */
62
62
  async function loadPrincipalByIdentity(source, identity) {
63
63
  const normalized = normalizeIdentity(identity);
@@ -69,9 +69,9 @@ async function loadPrincipalByIdentity(source, identity) {
69
69
  }
70
70
  }
71
71
  /**
72
- * In-process principals for tests and single-replica apps. `identities`
73
- * links an email or chat identity to a principal id; each answer is a fresh
74
- * frozen copy. `tenant` is not a filter, as for a database source.
72
+ * In-process principals for tests and single-replica apps. `identities` links
73
+ * an email or chat identity to a principal id; each answer is a fresh frozen
74
+ * copy. `tenant` is not a filter, as for a database source.
75
75
  */
76
76
  function memoryPrincipalSource(input) {
77
77
  const byId = /* @__PURE__ */ new Map();
@@ -1,14 +1,20 @@
1
- import { Rt as Instant, lr as Subject, mr as Condition } from "../policy-types-B-F-qAZk.js";
2
- import { u as WhereResult } from "../permdock-Dco6dyCK.js";
3
- import { r as RelationsMapping } from "../graph-sql-B-dsAT6j.js";
4
- import { n as WithSubjectOptions, t as RowCheck } from "../row-check-Dt35czLy.js";
1
+ import { Wt as Instant, br as Condition, hr as Subject } from "../policy-types-DGIO_gxq.js";
2
+ import { f as WhereResult } from "../permdock-CprAPN3w.js";
3
+ import { r as RelationsMapping } from "../graph-sql-BwFC4Qjs.js";
4
+ import { n as RowCheck, t as WithSubjectOptions } from "../subject-settings-vNW8qmUH.js";
5
5
  //#region src/prisma/model-fields.d.ts
6
- /** A model's non-nullable scalar fields and its scalar list fields, by Prisma field name. */
6
+ /**
7
+ * A model's non-nullable scalar fields and its scalar list fields, by Prisma
8
+ * field name.
9
+ */
7
10
  type PrismaModelFields = {
8
11
  readonly required: readonly string[];
9
12
  readonly lists: readonly string[];
10
13
  };
11
- /** The `datamodel` of Prisma's DMMF (`getDMMF`, or a generator's `options.dmmf.datamodel`). */
14
+ /**
15
+ * The `datamodel` of Prisma's DMMF (`getDMMF`, or a generator's
16
+ * `options.dmmf.datamodel`).
17
+ */
12
18
  type PrismaDatamodel = {
13
19
  readonly models: readonly {
14
20
  readonly name: string;
@@ -21,8 +27,9 @@ type PrismaDatamodel = {
21
27
  }[];
22
28
  };
23
29
  /**
24
- * Reads a model's required and list fields from `schema.prisma` text or a DMMF datamodel, for
25
- * the `model` option of `toWhere` and `toPredicate`. Relation fields are skipped.
30
+ * Reads a model's required and list fields from `schema.prisma` text or a DMMF
31
+ * datamodel, for the `model` option of `toWhere` and `toPredicate`. Relation
32
+ * fields are skipped.
26
33
  */
27
34
  export declare function prismaModelFields(datamodel: string | PrismaDatamodel, model: string): PrismaModelFields;
28
35
  //#endregion
@@ -30,11 +37,17 @@ export declare function prismaModelFields(datamodel: string | PrismaDatamodel, m
30
37
  type PrismaWhereOptions = {
31
38
  readonly fields?: Readonly<Record<string, string>>;
32
39
  readonly subject?: Subject;
33
- /** The clock membership expiry is read at; a `Temporal.Instant` fits. Defaults to the current time. */
40
+ /**
41
+ * The clock membership expiry is read at; a `Temporal.Instant` fits. Defaults
42
+ * to the current time.
43
+ */
34
44
  readonly now?: Instant;
35
45
  readonly listFields?: readonly string[];
36
46
  readonly requiredFields?: readonly string[];
37
- /** Required and list fields read from the schema by `prismaModelFields`; adds to `requiredFields` and `listFields`. */
47
+ /**
48
+ * Required and list fields read from the schema by `prismaModelFields`; adds
49
+ * to `requiredFields` and `listFields`.
50
+ */
38
51
  readonly model?: PrismaModelFields;
39
52
  };
40
53
  export declare function toWhere<T extends Record<string, unknown> = Record<string, unknown>>(input: Condition | WhereResult, options?: PrismaWhereOptions): T;
@@ -48,43 +61,45 @@ export declare function permdockExtension(): {
48
61
  };
49
62
  };
50
63
  type PrismaTransactionClient = {
51
- $executeRawUnsafe(query: string, ...values: unknown[]): Promise<number>;
64
+ $executeRawUnsafe: (query: string, ...values: unknown[]) => Promise<number>;
52
65
  };
53
66
  type PrismaLike<Tx> = {
54
- $transaction<T>(fn: (tx: Tx) => Promise<T>): Promise<T>;
67
+ $transaction: <T>(fn: (tx: Tx) => Promise<T>) => Promise<T>;
55
68
  };
56
69
  /**
57
- * Runs `fn` in an interactive transaction whose role and claims are `permdock.subject`'s, so
58
- * the generated RLS policies decide for the same subject as the in-process checks.
70
+ * Runs `fn` in an interactive transaction whose role and claims are
71
+ * `permdock.subject`'s, so the generated RLS policies decide for the same
72
+ * subject as the in-process checks.
59
73
  */
60
74
  export declare function withSubject<Tx extends PrismaTransactionClient, T>(prisma: PrismaLike<Tx>, permdock: {
61
75
  readonly subject: Subject;
62
76
  }, fn: (tx: Tx) => Promise<T>, options?: WithSubjectOptions): Promise<T>;
63
77
  type PrismaDelegate = {
64
- findFirst(args: {
78
+ findFirst: (args: {
65
79
  readonly where: Record<string, unknown>;
66
- }): Promise<unknown>;
80
+ }) => Promise<unknown>;
67
81
  };
68
82
  /**
69
- * Checks one row by its unique key, for `findUnique`, `update` and `delete`, which take no
70
- * filter: `{ found: false }` when `unique` matches nothing, otherwise whether the permission
71
- * filter keeps the row. One query when granted, two otherwise.
83
+ * Checks one row by its unique key, for `findUnique`, `update` and `delete`,
84
+ * which take no filter: `{ found: false }` when `unique` matches nothing,
85
+ * otherwise whether the permission filter keeps the row. One query when
86
+ * granted, two otherwise.
72
87
  */
73
88
  export declare function checkRow(delegate: PrismaDelegate, input: Condition | WhereResult, unique: Record<string, unknown>, options?: PrismaWhereOptions): Promise<RowCheck>;
74
89
  //#endregion
75
90
  //#region src/prisma/predicate.d.ts
76
91
  /** A Prisma 8 ORM field proxy: `u.email` inside `.where((u) => ...)`. */
77
92
  type PrismaFieldProxy = {
78
- eq(value: unknown): unknown;
79
- neq(value: unknown): unknown;
80
- gt(value: unknown): unknown;
81
- gte(value: unknown): unknown;
82
- lt(value: unknown): unknown;
83
- lte(value: unknown): unknown;
84
- like(pattern: string): unknown;
85
- in(values: readonly unknown[]): unknown;
86
- isNull(): unknown;
87
- isNotNull(): unknown;
93
+ eq: (value: unknown) => unknown;
94
+ neq: (value: unknown) => unknown;
95
+ gt: (value: unknown) => unknown;
96
+ gte: (value: unknown) => unknown;
97
+ lt: (value: unknown) => unknown;
98
+ lte: (value: unknown) => unknown;
99
+ like: (pattern: string) => unknown;
100
+ in: (values: readonly unknown[]) => unknown;
101
+ isNull: () => unknown;
102
+ isNotNull: () => unknown;
88
103
  };
89
104
  /** `import { and, or, not } from '@prisma/orm-postgres/orm-client'`. */
90
105
  type PrismaCombinators = {
@@ -95,12 +110,21 @@ type PrismaCombinators = {
95
110
  type PrismaPredicateOptions = {
96
111
  readonly fields?: Readonly<Record<string, string>>;
97
112
  readonly subject?: Subject;
98
- /** The clock membership expiry is read at; a `Temporal.Instant` fits. Defaults to the current time. */
113
+ /**
114
+ * The clock membership expiry is read at; a `Temporal.Instant` fits. Defaults
115
+ * to the current time.
116
+ */
99
117
  readonly now?: Instant;
100
- /** Required and list fields from `prismaModelFields`; `contains` on a list field is refused. */
118
+ /**
119
+ * Required and list fields from `prismaModelFields`; `contains` on a list
120
+ * field is refused.
121
+ */
101
122
  readonly model?: PrismaModelFields;
102
123
  readonly listFields?: readonly string[];
103
- /** A non-null column (the primary key) that spells constant true and false. Default `id`. */
124
+ /**
125
+ * A non-null column (the primary key) that spells constant true and false.
126
+ * Default `id`.
127
+ */
104
128
  readonly key?: string;
105
129
  /** Loaded from `@prisma/orm-postgres/orm-client` by default. */
106
130
  readonly combinators?: PrismaCombinators;
@@ -108,16 +132,17 @@ type PrismaPredicateOptions = {
108
132
  type Model = Readonly<Record<string, PrismaFieldProxy>>;
109
133
  /**
110
134
  * Compiles a condition into a Prisma 8 ORM predicate: pass the result to
111
- * `db.orm.<ns>.<Model>.where(...)`. No grant compiles to a predicate that matches no row.
135
+ * `db.orm.<ns>.<Model>.where(...)`. No grant compiles to a predicate that
136
+ * matches no row.
112
137
  */
113
138
  export declare function toPredicate<M = Model>(input: Condition | WhereResult, options?: PrismaPredicateOptions): (model: M) => unknown;
114
139
  //#endregion
115
140
  //#region src/conditions/resolve-related.d.ts
116
141
  type ResolveRelatedOptions = {
117
142
  /**
118
- * Runs one Postgres query with `$1`-style placeholders and returns its
119
- * rows; each row's `id` is an id the filtered field may hold. With Prisma:
120
- * `({ sql, values }) => prisma.$queryRawUnsafe(sql, ...values)`.
143
+ * Runs one Postgres query with `$1`-style placeholders and returns its rows;
144
+ * each row's `id` is an id the filtered field may hold. With Prisma: `({ sql,
145
+ * values }) => prisma.$queryRawUnsafe(sql, ...values)`.
121
146
  */
122
147
  readonly run: (query: {
123
148
  readonly sql: string;
@@ -125,14 +150,17 @@ type ResolveRelatedOptions = {
125
150
  }) => Promise<readonly Readonly<Record<string, unknown>>[]>;
126
151
  /** Where the relation graph lives. */
127
152
  readonly relations?: RelationsMapping;
128
- /** Turns an id (always text) into the field's type, e.g. `Number` for an integer key. */
153
+ /**
154
+ * Turns an id (always text) into the field's type, e.g. `Number` for an
155
+ * integer key.
156
+ */
129
157
  readonly parse?: (id: string, field: string) => unknown;
130
158
  };
131
159
  /**
132
- * `where` with every `related` node replaced by the ids it reaches, read in
133
- * one query per node, so an ORM without raw subqueries (Prisma) filters the
134
- * graph with a plain `in`. The ids are read now: run the filtered query right
135
- * after, in the same transaction when the graph may change in between.
160
+ * `where` with every `related` node replaced by the ids it reaches, read in one
161
+ * query per node, so an ORM without raw subqueries (Prisma) filters the graph
162
+ * with a plain `in`. The ids are read now: run the filtered query right after,
163
+ * in the same transaction when the graph may change in between.
136
164
  */
137
165
  export declare function resolveRelated(where: WhereResult, options: ResolveRelatedOptions): Promise<WhereResult>;
138
166
  //#endregion
@@ -1,9 +1,9 @@
1
1
  import { t as compact } from "../compact-CAf557ZB.js";
2
- import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
3
- import { t as assertSafeKey } from "../paths-DXSHAMIa.js";
4
- import { n as PermDockValidationError } from "../validation-error-ZfUHbKvf.js";
5
- import { a as relatedRowGuard, l as renderGraphSql, n as escapeLike, s as relatedTargetsSql, t as compileWhere, u as restrictedRowsSql } from "../compile-BAEO5bOk.js";
6
- import { n as statementText, o as rowCheckOf, r as subjectStatements, s as loadPeer } from "../subject-settings-CkEwrw3W.js";
2
+ import { n as freezeDeep } from "../freeze-jjan0lCv.js";
3
+ import { t as assertSafeKey } from "../paths-CUvURzHp.js";
4
+ import { n as PermDockValidationError } from "../validation-error-CYg2kJEw.js";
5
+ import { c as relatedTargetsSql, d as restrictedRowsSql, n as compileWhere, o as relatedRowGuard, r as escapeLike, u as renderGraphSql } from "../compile-EzEMB-7v.js";
6
+ import { n as statementText, o as rowCheckOf, r as subjectStatements, s as loadPeer } from "../subject-settings-8sH5HlII.js";
7
7
  //#region src/prisma/to-where.ts
8
8
  function fieldTests(options) {
9
9
  const mapped = (field) => fieldName(field, options.fields);
@@ -139,8 +139,9 @@ function permdockExtension() {
139
139
  };
140
140
  }
141
141
  /**
142
- * Runs `fn` in an interactive transaction whose role and claims are `permdock.subject`'s, so
143
- * the generated RLS policies decide for the same subject as the in-process checks.
142
+ * Runs `fn` in an interactive transaction whose role and claims are
143
+ * `permdock.subject`'s, so the generated RLS policies decide for the same
144
+ * subject as the in-process checks.
144
145
  */
145
146
  function withSubject(prisma, permdock, fn, options = {}) {
146
147
  const statements = subjectStatements(permdock, options);
@@ -150,9 +151,10 @@ function withSubject(prisma, permdock, fn, options = {}) {
150
151
  });
151
152
  }
152
153
  /**
153
- * Checks one row by its unique key, for `findUnique`, `update` and `delete`, which take no
154
- * filter: `{ found: false }` when `unique` matches nothing, otherwise whether the permission
155
- * filter keeps the row. One query when granted, two otherwise.
154
+ * Checks one row by its unique key, for `findUnique`, `update` and `delete`,
155
+ * which take no filter: `{ found: false }` when `unique` matches nothing,
156
+ * otherwise whether the permission filter keeps the row. One query when
157
+ * granted, two otherwise.
156
158
  */
157
159
  async function checkRow(delegate, input, unique, options = {}) {
158
160
  const filter = toWhere(input, options);
@@ -233,7 +235,8 @@ function render(node, model, options, ops) {
233
235
  }
234
236
  /**
235
237
  * Compiles a condition into a Prisma 8 ORM predicate: pass the result to
236
- * `db.orm.<ns>.<Model>.where(...)`. No grant compiles to a predicate that matches no row.
238
+ * `db.orm.<ns>.<Model>.where(...)`. No grant compiles to a predicate that
239
+ * matches no row.
237
240
  */
238
241
  function toPredicate(input, options = {}) {
239
242
  const compiled = compileWhere(input, compact({
@@ -292,8 +295,9 @@ function fromDatamodel(datamodel, model) {
292
295
  };
293
296
  }
294
297
  /**
295
- * Reads a model's required and list fields from `schema.prisma` text or a DMMF datamodel, for
296
- * the `model` option of `toWhere` and `toPredicate`. Relation fields are skipped.
298
+ * Reads a model's required and list fields from `schema.prisma` text or a DMMF
299
+ * datamodel, for the `model` option of `toWhere` and `toPredicate`. Relation
300
+ * fields are skipped.
297
301
  */
298
302
  function prismaModelFields(datamodel, model) {
299
303
  assertSafeKey(model, "Prisma model");
@@ -334,10 +338,10 @@ function refused(detail) {
334
338
  });
335
339
  }
336
340
  /**
337
- * `where` with every `related` node replaced by the ids it reaches, read in
338
- * one query per node, so an ORM without raw subqueries (Prisma) filters the
339
- * graph with a plain `in`. The ids are read now: run the filtered query right
340
- * after, in the same transaction when the graph may change in between.
341
+ * `where` with every `related` node replaced by the ids it reaches, read in one
342
+ * query per node, so an ORM without raw subqueries (Prisma) filters the graph
343
+ * with a plain `in`. The ids are read now: run the filtered query right after,
344
+ * in the same transaction when the graph may change in between.
341
345
  */
342
346
  async function resolveRelated(where, options) {
343
347
  const resources = where.resources;
@@ -1,9 +1,9 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
- import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
- import { n as PermDockValidationError } from "./validation-error-ZfUHbKvf.js";
4
- import { a as problemType, i as stepUpOf, n as problemDetails, o as statusProblem, t as notFoundDetails } from "./problem-details-cn5X30gZ.js";
5
- import { a as deniedMessage, i as approvalMessage } from "./errors-BKy0EfhN.js";
6
- import { a as durationOf, g as secondsOf, p as nowSeconds } from "./time-DkWjdL98.js";
2
+ import { n as freezeDeep } from "./freeze-jjan0lCv.js";
3
+ import { n as PermDockValidationError } from "./validation-error-CYg2kJEw.js";
4
+ import { a as problemType, i as stepUpOf, n as problemDetails, o as statusProblem, t as notFoundDetails } from "./problem-details-CLDgX1KV.js";
5
+ import { a as deniedMessage, i as approvalMessage } from "./errors-B6R_lg2a.js";
6
+ import { a as durationOf, g as secondsOf, p as nowSeconds } from "./time-nR1JesoH.js";
7
7
  //#region src/server/problem.ts
8
8
  function quoted(value) {
9
9
  return `"${value.replaceAll(/["\\]/gu, "")}"`;
@@ -31,7 +31,10 @@ function protectedResourceMetadataUrl(resource) {
31
31
  const path = resource.pathname === "/" ? "" : resource.pathname;
32
32
  return `${resource.origin}/.well-known/oauth-protected-resource${path}`;
33
33
  }
34
- /** The `error_description` of every `invalid_token` challenge (RFC 6750 section 3.1). */
34
+ /**
35
+ * The `error_description` of every `invalid_token` challenge (RFC 6750 section
36
+ * 3.1).
37
+ */
35
38
  const INVALID_TOKEN = "The access token is invalid";
36
39
  function wwwAuthenticate(decision, permission, credentials = true) {
37
40
  return challengeFor(decision, permission?.scope, credentials);
@@ -111,9 +114,9 @@ function rateLimitHeaders(decision, now) {
111
114
  };
112
115
  }
113
116
  /**
114
- * The response for a decision's Problem Details: `WWW-Authenticate` for a
115
- * `401` or a missing delegation, and the rate-limit fields for a `429`. A
116
- * hidden row's `404` carries neither, so it reads like a missing one.
117
+ * The response for a decision's Problem Details: `WWW-Authenticate` for a `401`
118
+ * or a missing delegation, and the rate-limit fields for a `429`. A hidden
119
+ * row's `404` carries neither, so it reads like a missing one.
117
120
  */
118
121
  function decisionResponse(details, decision, options = {}) {
119
122
  const headers = new Headers({
@@ -127,13 +130,15 @@ function decisionResponse(details, decision, options = {}) {
127
130
  headers
128
131
  });
129
132
  }
130
- function problemFromDecision(decision, permission, subject, options = {}) {
131
- if (decision.outcome === "granted") return new Response(null, { status: 204 });
132
- const validation = decision.outcome === "denied" ? decision.denials[0]?.detail : void 0;
133
- if (options.disclosure !== "hide" && validation instanceof PermDockValidationError) return problemResponse(validation.toProblemDetails(), options.scope === void 0 ? permission : {
134
- ...permission,
135
- scope: options.scope
136
- }, decision);
133
+ function validationOf(decision, disclosure) {
134
+ const detail = decision.outcome === "denied" ? decision.denials[0]?.detail : void 0;
135
+ return disclosure !== "hide" && detail instanceof PermDockValidationError ? detail : void 0;
136
+ }
137
+ /** The Problem Details body `problemFromDecision` answers with. */
138
+ function decisionProblem(decision, permission, subject, options = {}) {
139
+ return validationOf(decision, options.disclosure)?.toProblemDetails() ?? refusalDetails(decision, permission, subject, options);
140
+ }
141
+ function refusalDetails(decision, permission, subject, options) {
137
142
  const details = problemDetails(compact({
138
143
  decision,
139
144
  detail: decision.outcome === "approval-required" ? approvalMessage(permission.key, decision.reason, decision.token) : deniedMessage(permission.key, subject?.principal?.id, decision.denials, decision.alternatives.map((leaf) => leaf.key), subject !== void 0),
@@ -147,10 +152,19 @@ function problemFromDecision(decision, permission, subject, options = {}) {
147
152
  at: options.approval.at,
148
153
  hint: options.approval.hint
149
154
  });
150
- return decisionResponse(approval === void 0 ? details : {
155
+ return approval === void 0 ? details : {
151
156
  ...details,
152
157
  approval
153
- }, decision, compact({
158
+ };
159
+ }
160
+ function problemFromDecision(decision, permission, subject, options = {}) {
161
+ if (decision.outcome === "granted") return new Response(null, { status: 204 });
162
+ const validation = validationOf(decision, options.disclosure);
163
+ if (validation !== void 0) return problemResponse(validation.toProblemDetails(), options.scope === void 0 ? permission : {
164
+ ...permission,
165
+ scope: options.scope
166
+ }, decision);
167
+ return decisionResponse(refusalDetails(decision, permission, subject, options), decision, compact({
154
168
  scope: options.scope ?? permission.scope,
155
169
  credentials: options.credentials
156
170
  }));
@@ -167,16 +181,22 @@ const ANONYMOUS = freezeDeep({
167
181
  }],
168
182
  alternatives: []
169
183
  });
170
- /** The `401` for a request with no subject, with the RFC 6750 challenge its credentials call for. */
184
+ /**
185
+ * The `401` for a request with no subject, with the RFC 6750 challenge its
186
+ * credentials call for.
187
+ */
171
188
  function unauthenticatedProblem(credentials) {
172
189
  return decisionResponse(problemDetails({
173
190
  decision: ANONYMOUS,
174
191
  detail: "anonymous"
175
192
  }), ANONYMOUS, { credentials });
176
193
  }
177
- /** RFC 9110 section 15.5.6: a `405` lists the methods the resource supports in `Allow`. */
194
+ /**
195
+ * RFC 9110 section 15.5.6: a `405` lists the methods the resource supports in
196
+ * `Allow`.
197
+ */
178
198
  function methodNotAllowed(allow) {
179
199
  return problemResponse(statusProblem(405, `use ${allow}`), void 0, void 0, { Allow: allow });
180
200
  }
181
201
  //#endregion
182
- export { methodNotAllowed as a, problemResponse as c, validationProblem as d, wwwAuthenticate as f, decisionResponse as i, protectedResourceMetadataUrl as l, batchTooLarge as n, notFoundProblem as o, bearerChallenge as r, problemFromDecision as s, ANONYMOUS as t, unauthenticatedProblem as u };
202
+ export { decisionResponse as a, problemFromDecision as c, unauthenticatedProblem as d, validationProblem as f, decisionProblem as i, problemResponse as l, batchTooLarge as n, methodNotAllowed as o, wwwAuthenticate as p, bearerChallenge as r, notFoundProblem as s, ANONYMOUS as t, protectedResourceMetadataUrl as u };
@@ -1,5 +1,5 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
- import { t as PROBLEM_BASE } from "./validation-error-ZfUHbKvf.js";
2
+ import { t as PROBLEM_BASE } from "./validation-error-CYg2kJEw.js";
3
3
  import { t as wireDenials } from "./wire-denial-C7PaVYEM.js";
4
4
  //#region src/core/problem-types.ts
5
5
  /** The `type` URI of a PermDock problem type. */
@@ -38,7 +38,10 @@ function statusProblem(status, detail, extra = {}) {
38
38
  }
39
39
  //#endregion
40
40
  //#region src/core/problem-details.ts
41
- /** Reasons that only arise once a matching grant was found, so they reveal nothing hidden. */
41
+ /**
42
+ * Reasons that only arise once a matching grant was found, so they reveal
43
+ * nothing hidden.
44
+ */
42
45
  const HOLDS_GRANT = /* @__PURE__ */ new Set([
43
46
  "insufficient-user-authentication",
44
47
  "limit",
@@ -48,14 +51,20 @@ function granteesOf(to) {
48
51
  if (to === void 0) return [];
49
52
  return Array.isArray(to) ? to : [to];
50
53
  }
51
- /** The plans a `not-entitled` denial asks for; empty unless every denial is `not-entitled`. */
54
+ /**
55
+ * The plans a `not-entitled` denial asks for; empty unless every denial is
56
+ * `not-entitled`.
57
+ */
52
58
  function requiredPlans(decision) {
53
59
  if (decision.outcome !== "denied" || decision.denials.length === 0 || decision.denials.some((denial) => denial.reason !== "not-entitled")) return [];
54
60
  const plans = /* @__PURE__ */ new Set();
55
61
  for (const denial of decision.denials) for (const item of granteesOf(denial.to)) if (item.kind === "plan") plans.add(item.plan);
56
62
  return [...plans];
57
63
  }
58
- /** The `acr` values and the tightest `maxAge` the failing assurance grants ask for. */
64
+ /**
65
+ * The `acr` values and the tightest `maxAge` the failing assurance grants ask
66
+ * for.
67
+ */
59
68
  function stepUpOf(decision) {
60
69
  if (decision.outcome !== "denied") return {};
61
70
  const acr = /* @__PURE__ */ new Set();
@@ -1,5 +1,8 @@
1
1
  //#region src/cli/cloud/problem-types.ts
2
- /** The Problem `type` of `GET /v1/projects/{id}/policy` before the first `cloud push`. */
2
+ /**
3
+ * The Problem `type` of `GET /v1/projects/{id}/policy` before the first `cloud
4
+ * push`.
5
+ */
3
6
  const POLICY_NOT_PUBLISHED = "https://permdock.com/problems/policy-not-published";
4
7
  //#endregion
5
8
  export { POLICY_NOT_PUBLISHED as t };