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
@@ -1,10 +1,13 @@
1
- import { n as SCIM_TABLES, r as SCIM_UNIQUE } from "./postgres-store-BL9M_CA1.js";
2
- import { o as quoteSqlIdent } from "./sql-B96movIM.js";
3
- import { n as fileSummary, t as applyFiles } from "./files-acUbNwWt.js";
4
- import { r as driftOf } from "./output-files-CCMdcFWb.js";
1
+ import { n as SCIM_TABLES, r as SCIM_UNIQUE } from "./postgres-store-DcyrPS-r.js";
2
+ import { o as quoteSqlIdent } from "./sql-0WjxIp9g.js";
3
+ import { n as fileSummary, t as applyFiles } from "./files-B3AA05f1.js";
4
+ import { r as driftOf } from "./output-files-BIQ_9pIs.js";
5
5
  //#region src/cli/scim/generate.ts
6
6
  const SCIM_MARKER = "-- generated by permdock scim generate";
7
- /** The client roles each dialect's data API connects as; none may reach the directory. */
7
+ /**
8
+ * The client roles each dialect's data API connects as; none may reach the
9
+ * directory.
10
+ */
8
11
  function clientRoles(dialect) {
9
12
  switch (dialect) {
10
13
  case "supabase": return [
@@ -25,8 +28,8 @@ function clientRoles(dialect) {
25
28
  * The directory `postgresDirectoryStore` reads and writes: users, groups and
26
29
  * group members keyed on `(tenant, id)`, with `userName` and `externalId`
27
30
  * unique per tenant. Member values are SCIM `value`s, not a foreign key to
28
- * users, because a member may be a nested group. No client role may read
29
- * or write the tables.
31
+ * users, because a member may be a nested group. No client role may read or
32
+ * write the tables.
30
33
  */
31
34
  function scimSchemaSql(input) {
32
35
  const schema = quoteSqlIdent(input.schema);
@@ -93,7 +96,10 @@ alter table ${members} enable row level security;
93
96
  revoke all on table ${all} from ${clientRoles(input.dialect).join(", ")};
94
97
  `;
95
98
  }
96
- /** `supabase/schemas/<schema>/scim.sql` for Supabase, the pg-delta per-schema layout; `permdock_scim.sql` otherwise. */
99
+ /**
100
+ * `supabase/schemas/<schema>/scim.sql` for Supabase, the pg-delta per-schema
101
+ * layout; `permdock_scim.sql` otherwise.
102
+ */
97
103
  function scimOut(dialect, schema) {
98
104
  return dialect === "supabase" ? `supabase/schemas/${schema}/scim.sql` : "permdock_scim.sql";
99
105
  }
@@ -0,0 +1,275 @@
1
+ import { r as isRecord } from "./compact-CAf557ZB.js";
2
+ import { t as byCodePoint } from "./compare-DTfyUunF.js";
3
+ //#region src/cli/generate.ts
4
+ const IDENTIFIER = /^[A-Za-z_$][A-Za-z0-9_$]*$/u;
5
+ const MAX_DEPTH = 6;
6
+ function isSchemaKind(value) {
7
+ return value === "zod" || value === "valibot" || value === "arktype";
8
+ }
9
+ function schemaImport(kind) {
10
+ switch (kind) {
11
+ case "zod": return "import { z } from 'zod'";
12
+ case "valibot": return "import * as v from 'valibot'";
13
+ case "arktype": return "import { type } from 'arktype'";
14
+ default: return kind;
15
+ }
16
+ }
17
+ function emptySchema(kind) {
18
+ return schemaExpression(kind, { type: "object" });
19
+ }
20
+ function propertyKey(name) {
21
+ return IDENTIFIER.test(name) ? name : JSON.stringify(name);
22
+ }
23
+ function literalEnum(schema) {
24
+ const type = schema["type"];
25
+ const nullable = Array.isArray(type) && type.includes("null");
26
+ const all = schema["enum"];
27
+ const values = nullable && Array.isArray(all) ? all.filter((value) => value !== null) : all;
28
+ if (!Array.isArray(values) || values.length === 0 || !values.every((value) => typeof value === "string")) return;
29
+ return values;
30
+ }
31
+ function schemaType(schema) {
32
+ const type = schema["type"];
33
+ if (typeof type === "string") return type;
34
+ if (Array.isArray(type)) {
35
+ const named = type.filter((item) => item !== "null");
36
+ return named.length === 1 && typeof named[0] === "string" ? named[0] : void 0;
37
+ }
38
+ return isRecord(schema["properties"]) ? "object" : void 0;
39
+ }
40
+ function bound(node, key) {
41
+ const value = node[key];
42
+ return typeof value === "number" && Number.isFinite(value) ? value : void 0;
43
+ }
44
+ function isNullable(node, emit) {
45
+ const type = node["type"];
46
+ return emit.constraints && Array.isArray(type) && type.includes("null");
47
+ }
48
+ function formatOf(node, emit) {
49
+ const format = node["format"];
50
+ return emit.constraints && typeof format === "string" ? format : void 0;
51
+ }
52
+ /** `[method, value]` pairs for the bounds `keys` names, in order. */
53
+ function bounds(node, emit, keys) {
54
+ if (!emit.constraints) return [];
55
+ return keys.flatMap(([key, method]) => {
56
+ const value = bound(node, key);
57
+ return value === void 0 ? [] : [[method, value]];
58
+ });
59
+ }
60
+ const NUMBER_BOUNDS = [
61
+ ["minimum", "min"],
62
+ ["exclusiveMinimum", "gt"],
63
+ ["maximum", "max"],
64
+ ["exclusiveMaximum", "lt"]
65
+ ];
66
+ const LENGTH_BOUNDS = [["minLength", "min"], ["maxLength", "max"]];
67
+ const ITEM_BOUNDS = [["minItems", "min"], ["maxItems", "max"]];
68
+ const ZOD_FORMATS = {
69
+ uuid: "z.uuid()",
70
+ email: "z.email()",
71
+ uri: "z.url()",
72
+ "date-time": "z.iso.datetime({ offset: true })",
73
+ date: "z.iso.date()"
74
+ };
75
+ function zodChain(base, pairs) {
76
+ return `${base}${pairs.map(([method, value]) => `.${method}(${String(value)})`).join("")}`;
77
+ }
78
+ function zodOf(schema, emit, depth) {
79
+ const node = emit.resolve(schema);
80
+ const expression = zodNode(node, emit, depth);
81
+ return isNullable(node, emit) ? `${expression}.nullable()` : expression;
82
+ }
83
+ function zodNode(node, emit, depth) {
84
+ const values = literalEnum(node);
85
+ if (values !== void 0) return `z.enum(${JSON.stringify(values)})`;
86
+ const type = depth > MAX_DEPTH ? void 0 : schemaType(node);
87
+ if (type === void 0) return "z.unknown()";
88
+ switch (type) {
89
+ case "string": return zodChain(ZOD_FORMATS[formatOf(node, emit) ?? ""] ?? "z.string()", bounds(node, emit, LENGTH_BOUNDS));
90
+ case "number": return zodChain("z.number()", bounds(node, emit, NUMBER_BOUNDS));
91
+ case "integer": return zodChain("z.number().int()", bounds(node, emit, NUMBER_BOUNDS));
92
+ case "boolean": return "z.boolean()";
93
+ case "array": return zodChain(`z.array(${isRecord(node["items"]) ? zodOf(node["items"], emit, depth + 1) : "z.unknown()"})`, bounds(node, emit, ITEM_BOUNDS));
94
+ case "object": {
95
+ const fields = objectFields(node).map(([name, child, required]) => {
96
+ const expression = zodOf(child, emit, depth + 1);
97
+ return `${propertyKey(name)}: ${required ? expression : `${expression}.optional()`}`;
98
+ });
99
+ return `z.object({${fields.length === 0 ? "" : ` ${fields.join(", ")} `}})`;
100
+ }
101
+ default: return "z.unknown()";
102
+ }
103
+ }
104
+ /** Each property of an object schema with whether `required` names it. */
105
+ function objectFields(node) {
106
+ const required = new Set(Array.isArray(node["required"]) ? node["required"] : []);
107
+ const properties = isRecord(node["properties"]) ? node["properties"] : {};
108
+ return Object.entries(properties).filter((entry) => isRecord(entry[1])).map(([name, child]) => [
109
+ name,
110
+ child,
111
+ required.has(name)
112
+ ]);
113
+ }
114
+ const VALIBOT_FORMATS = {
115
+ uuid: "v.uuid()",
116
+ email: "v.email()",
117
+ uri: "v.url()",
118
+ "date-time": "v.isoTimestamp()",
119
+ date: "v.isoDate()"
120
+ };
121
+ const VALIBOT_NUMBER_BOUNDS = [
122
+ ["minimum", "minValue"],
123
+ ["exclusiveMinimum", "gtValue"],
124
+ ["maximum", "maxValue"],
125
+ ["exclusiveMaximum", "ltValue"]
126
+ ];
127
+ function valibotPipe(base, actions) {
128
+ return actions.length === 0 ? base : `v.pipe(${[base, ...actions].join(", ")})`;
129
+ }
130
+ function valibotLength(pairs) {
131
+ return pairs.map(([method, value]) => `v.${method === "min" ? "minLength" : "maxLength"}(${String(value)})`);
132
+ }
133
+ function valibotOf(schema, emit, depth) {
134
+ const node = emit.resolve(schema);
135
+ const expression = valibotNode(node, emit, depth);
136
+ return isNullable(node, emit) ? `v.nullable(${expression})` : expression;
137
+ }
138
+ function valibotNode(node, emit, depth) {
139
+ const values = literalEnum(node);
140
+ if (values !== void 0) return `v.picklist(${JSON.stringify(values)})`;
141
+ const type = depth > MAX_DEPTH ? void 0 : schemaType(node);
142
+ if (type === void 0) return "v.unknown()";
143
+ const numeric = bounds(node, emit, VALIBOT_NUMBER_BOUNDS).map(([method, value]) => `v.${method}(${String(value)})`);
144
+ switch (type) {
145
+ case "string": {
146
+ const format = VALIBOT_FORMATS[formatOf(node, emit) ?? ""];
147
+ return valibotPipe("v.string()", [...format === void 0 ? [] : [format], ...valibotLength(bounds(node, emit, LENGTH_BOUNDS))]);
148
+ }
149
+ case "number": return valibotPipe("v.number()", numeric);
150
+ case "integer": return valibotPipe("v.number()", ["v.integer()", ...numeric]);
151
+ case "boolean": return "v.boolean()";
152
+ case "array": return valibotPipe(`v.array(${isRecord(node["items"]) ? valibotOf(node["items"], emit, depth + 1) : "v.unknown()"})`, valibotLength(bounds(node, emit, ITEM_BOUNDS)));
153
+ case "object": {
154
+ const fields = objectFields(node).map(([name, child, required]) => {
155
+ const expression = valibotOf(child, emit, depth + 1);
156
+ return `${propertyKey(name)}: ${required ? expression : `v.optional(${expression})`}`;
157
+ });
158
+ return `v.object({${fields.length === 0 ? "" : ` ${fields.join(", ")} `}})`;
159
+ }
160
+ default: return "v.unknown()";
161
+ }
162
+ }
163
+ const ARKTYPE_FORMATS = {
164
+ uuid: "string.uuid",
165
+ email: "string.email",
166
+ uri: "string.url",
167
+ "date-time": "string.date.iso",
168
+ date: "string.date.iso"
169
+ };
170
+ /** `1 <= string <= 120`; arktype bounds apply to `string` and `number` only. */
171
+ function arktypeRange(keyword, pairs) {
172
+ const lower = pairs.find(([method]) => method === "min" || method === "gt");
173
+ const upper = pairs.find(([method]) => method === "max" || method === "lt");
174
+ const left = lower === void 0 ? "" : `${String(lower[1])} ${lower[0] === "gt" ? "<" : "<="} `;
175
+ const right = upper === void 0 ? "" : ` ${upper[0] === "lt" ? "<" : "<="} ${String(upper[1])}`;
176
+ return lower !== void 0 && upper === void 0 ? `${keyword} ${lower[0] === "gt" ? ">" : ">="} ${String(lower[1])}` : `${left}${keyword}${right}`;
177
+ }
178
+ /** An arktype definition: a string keyword or an object literal. */
179
+ function arktypeOf(schema, emit, depth) {
180
+ const node = emit.resolve(schema);
181
+ const definition = arktypeNode(node, emit, depth);
182
+ if (!isNullable(node, emit)) return definition;
183
+ return definition.startsWith("'") ? `'${definition.slice(1, -1)} | null'` : `[${definition}, '|', 'null']`;
184
+ }
185
+ function arktypeNode(node, emit, depth) {
186
+ const values = literalEnum(node);
187
+ if (values !== void 0) return JSON.stringify(values.map((value) => `'${value.replaceAll("'", "\\'")}'`).join(" | "));
188
+ const type = depth > MAX_DEPTH ? void 0 : schemaType(node);
189
+ if (type === void 0) return "'unknown'";
190
+ switch (type) {
191
+ case "string": {
192
+ const format = ARKTYPE_FORMATS[formatOf(node, emit) ?? ""];
193
+ return format === void 0 ? `'${arktypeRange("string", bounds(node, emit, LENGTH_BOUNDS))}'` : `'${format}'`;
194
+ }
195
+ case "number": return `'${arktypeRange("number", bounds(node, emit, NUMBER_BOUNDS))}'`;
196
+ case "integer": return "'number.integer'";
197
+ case "boolean": return "'boolean'";
198
+ case "array": {
199
+ if (!isRecord(node["items"])) return "'unknown[]'";
200
+ const item = arktypeOf(node["items"], emit, depth + 1);
201
+ return item.startsWith("'") && !item.includes("|") ? `'${item.slice(1, -1)}[]'` : `[${item}, '[]']`;
202
+ }
203
+ case "object": {
204
+ const fields = objectFields(node).map(([name, child, required]) => `${JSON.stringify(required ? name : `${name}?`)}: ${arktypeOf(child, emit, depth + 1)}`);
205
+ return `{${fields.length === 0 ? "" : ` ${fields.join(", ")} `}}`;
206
+ }
207
+ default: return "'unknown'";
208
+ }
209
+ }
210
+ /**
211
+ * A validator expression for a JSON Schema object. Only the portable core
212
+ * (primitives, enums of strings, arrays, objects with `required`) is
213
+ * translated, plus with `constraints` the formats, bounds and nullable types;
214
+ * anything else becomes the validator's `unknown`.
215
+ */
216
+ function schemaExpression(kind, schema, resolve = (node) => node, options = {}) {
217
+ const emit = {
218
+ resolve,
219
+ constraints: options.constraints === true
220
+ };
221
+ switch (kind) {
222
+ case "zod": return zodOf(schema, emit, 0);
223
+ case "valibot": return valibotOf(schema, emit, 0);
224
+ case "arktype": return `type(${arktypeOf(schema, emit, 0)})`;
225
+ default: return kind;
226
+ }
227
+ }
228
+ function renderList(value, indent) {
229
+ if (Array.isArray(value)) return JSON.stringify(value);
230
+ return JSON.stringify(value, null, 2).replaceAll("\n", `\n${indent}`);
231
+ }
232
+ function renderResource(resource, indent) {
233
+ const inner = `${indent} `;
234
+ const options = [
235
+ `${inner}id: '${(resource.id ?? "id").replaceAll("\\", "\\\\").replaceAll("'", "\\'")}',`,
236
+ `${inner}actions: ${renderList(resource.actions, inner)},`,
237
+ `${inner}collection: ${renderList(resource.collection, inner)},`
238
+ ].join("\n");
239
+ return `${resource.schema === void 0 ? "resource({" : `resource(${resource.schema}, {`}\n${options}\n${indent}})`;
240
+ }
241
+ function insert(trie, resource) {
242
+ let node = trie;
243
+ for (const [index, segment] of resource.path.entries()) {
244
+ if (index === resource.path.length - 1) {
245
+ node.set(segment, resource);
246
+ return;
247
+ }
248
+ const next = node.get(segment);
249
+ if (next instanceof Map) node = next;
250
+ else {
251
+ const created = /* @__PURE__ */ new Map();
252
+ node.set(segment, created);
253
+ node = created;
254
+ }
255
+ }
256
+ }
257
+ function renderTrie(trie, indent) {
258
+ return [...trie.entries()].toSorted(([a], [b]) => byCodePoint(a, b)).map(([segment, value]) => value instanceof Map ? `${indent}${propertyKey(segment)}: {\n${renderTrie(value, `${indent} `)}\n${indent}},` : `${indent}${propertyKey(segment)}: ${renderResource(value, indent)},`).join("\n");
259
+ }
260
+ /** A deterministic `definePermissions()` module with a `// @generated` header. */
261
+ function emitPermissionsModule(input) {
262
+ const trie = /* @__PURE__ */ new Map();
263
+ for (const resource of input.resources) insert(trie, resource);
264
+ const imports = ["import { definePermissions, resource } from 'permdock'", ...input.schema === void 0 ? [] : [schemaImport(input.schema)]];
265
+ const extras = Object.entries(input.exports ?? {}).map(([name, value]) => `export const ${name} = ${JSON.stringify(value, null, 2)} as const\n\n`);
266
+ return `// @generated by permdock ${input.generator}
267
+ ${imports.join("\n")}
268
+
269
+ ${extras.join("")}export const permissions = definePermissions({
270
+ ${renderTrie(trie, " ")}
271
+ })
272
+ `;
273
+ }
274
+ //#endregion
275
+ export { schemaExpression as i, emptySchema as n, isSchemaKind as r, emitPermissionsModule as t };
@@ -1,8 +1,8 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
- import { n as freezeDeep, t as freezeCopy } from "./freeze-CrU8nQeX.js";
3
- import { i as ownKeys, n as isForbiddenKey, t as assertSafeKey } from "./paths-DXSHAMIa.js";
4
- import { c as listPermissions, o as isPermission } from "./permission-registry-DpPtSKNZ.js";
5
- import { i as readAppData, r as parseAppData, t as assertAppData } from "./app-data-MuyzVqX8.js";
2
+ import { n as freezeDeep, t as freezeCopy } from "./freeze-jjan0lCv.js";
3
+ import { i as ownKeys, n as isForbiddenKey, t as assertSafeKey } from "./paths-CUvURzHp.js";
4
+ import { c as listPermissions, o as isPermission } from "./permission-registry-B8tYxPIt.js";
5
+ import { i as readAppData, r as parseAppData, t as assertAppData } from "./app-data-UNNm07jV.js";
6
6
  //#region src/core/vocabulary.ts
7
7
  const ROLE_KIND = "role";
8
8
  const PLAN_KIND = "plan";
@@ -1,11 +1,11 @@
1
1
  import { a as sole, t as compact } from "./compact-CAf557ZB.js";
2
- import { a as expandRelation, c as isEdgeRelation, d as isSelfParented, l as isFieldRelation, m as restrictedStops, p as restrictedFor, s as isComputedRelation, u as isPrincipalRelation } from "./resource-relations-D_jw0BFx.js";
3
- import { d as isoNow } from "./time-DkWjdL98.js";
4
- import { f as scopeList, l as rootScope, s as resolveScope } from "./scopes-BHsc-wp-.js";
2
+ import { a as expandRelation, c as isEdgeRelation, d as isSelfParented, l as isFieldRelation, m as restrictedStops, p as restrictedFor, s as isComputedRelation, u as isPrincipalRelation } from "./resource-relations-8-pCScBO.js";
3
+ import { d as isoNow } from "./time-nR1JesoH.js";
4
+ import { f as scopeList, l as rootScope, s as resolveScope } from "./scopes-0Up_UA2t.js";
5
5
  //#region src/core/grantee-conditions.ts
6
6
  /**
7
- * Where a graph relation starts on the row: its own id when the relation is
8
- * on the row's resource, the parent field when it is on the parent resource.
7
+ * Where a graph relation starts on the row: its own id when the relation is on
8
+ * the row's resource, the parent field when it is on the parent resource.
9
9
  * `undefined` when `through` cannot reach the relation's resource.
10
10
  */
11
11
  function relationStart(grantee, resource, target) {
@@ -25,10 +25,10 @@ function relationStart(grantee, resource, target) {
25
25
  };
26
26
  }
27
27
  /**
28
- * A resource role held on self-parented `membershipResource` instances
29
- * (`ids`) reaches rows below them: the row itself when it is of that
30
- * resource, its parent field when its parent is, walked up to the default
31
- * depth. `undefined` when the row is not on such a chain.
28
+ * A resource role held on self-parented `membershipResource` instances (`ids`)
29
+ * reaches rows below them: the row itself when it is of that resource, its
30
+ * parent field when its parent is, walked up to the default depth. `undefined`
31
+ * when the row is not on such a chain.
32
32
  */
33
33
  function resourceRoleCondition(resource, membershipResource, ids, resources) {
34
34
  if (resource === void 0 || !isSelfParented(resources.get(membershipResource))) return;
@@ -72,9 +72,9 @@ function linkStop(resource, link) {
72
72
  };
73
73
  }
74
74
  /**
75
- * The link path from the row to the grantee's resource: the row field of
76
- * the first link and each hop. `undefined` when a link is not declared or
77
- * the path ends on another resource.
75
+ * The link path from the row to the grantee's resource: the row field of the
76
+ * first link and each hop. `undefined` when a link is not declared or the path
77
+ * ends on another resource.
78
78
  */
79
79
  function relationHops(grantee, resource, resources) {
80
80
  const through = grantee.through;
@@ -1,8 +1,8 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
- import { u as isoAt } from "./time-DkWjdL98.js";
3
- import { f as scopeList, t as activeFor } from "./scopes-BHsc-wp-.js";
4
- import { o as flattenGrantee } from "./grantee-BrRANrpT.js";
5
- import { r as relationCondition, t as inheritCondition } from "./grantee-conditions-C6P1Tvol.js";
2
+ import { u as isoAt } from "./time-nR1JesoH.js";
3
+ import { f as scopeList, t as activeFor } from "./scopes-0Up_UA2t.js";
4
+ import { o as flattenGrantee } from "./grantee-Dke-9rd1.js";
5
+ import { r as relationCondition, t as inheritCondition } from "./grantee-conditions-BrYPe-w0.js";
6
6
  //#region src/core/grantee-match.ts
7
7
  function combineWhere(left, right) {
8
8
  if (left === void 0) return right;
@@ -12,7 +12,10 @@ function combineWhere(left, right) {
12
12
  conditions: [left, right]
13
13
  };
14
14
  }
15
- /** Seats (`Membership.entitlements`) held through memberships that apply under the active tenant. */
15
+ /**
16
+ * Seats (`Membership.entitlements`) held through memberships that apply under
17
+ * the active tenant.
18
+ */
16
19
  function seatsInTenant(subject, scopes) {
17
20
  const principal = subject.principal;
18
21
  if (principal === null) return [];
@@ -110,7 +113,10 @@ function matchOne(grantee, subject, now, resource, scopes, resources) {
110
113
  default: return unknownGrantee(grantee);
111
114
  }
112
115
  }
113
- /** A kind this build does not know, from a forged snapshot or a newer document, never matches. */
116
+ /**
117
+ * A kind this build does not know, from a forged snapshot or a newer document,
118
+ * never matches.
119
+ */
114
120
  function unknownGrantee(_grantee) {
115
121
  return {
116
122
  matched: false,
@@ -19,9 +19,9 @@ type RelationsMapping = {
19
19
  /** The table of each resource the graph reads; default the resource name. */
20
20
  readonly tables?: Readonly<Record<string, string>>;
21
21
  /**
22
- * A closure table (`resource`, `ancestor`, `descendant`, `depth`) such as
23
- * the one `permdock rls` keeps. Without it, parent walks are a bounded
24
- * recursive query over the resource's own table.
22
+ * A closure table (`resource`, `ancestor`, `descendant`, `depth`) such as the
23
+ * one `permdock rls` keeps. Without it, parent walks are a bounded recursive
24
+ * query over the resource's own table.
25
25
  */
26
26
  readonly closure?: string;
27
27
  };
@@ -1,11 +1,14 @@
1
- import { Gt as Snapshot, T as Policy, j as PolicyVocabulary, sr as Principal } from "../policy-types-B-F-qAZk.js";
2
- import { a as PermDock } from "../permdock-Dco6dyCK.js";
3
- import { D as ConnectionOptions, T as Connection, f as InvalidSignatureError, i as OpenApiHooks, u as SnapshotQuery, v as discoverViaSignatureAgent, x as webBotAuthVerifier } from "../server-types-C4gZUEZy.js";
4
- import { a as ProtectTarget, n as FetchAdapterOptions, r as FetchProtect, t as ContextReader } from "../fetch-adapter-CuhyYwC1.js";
1
+ import { T as Policy, Zt as Snapshot, j as PolicyVocabulary, pr as Principal } from "../policy-types-DGIO_gxq.js";
2
+ import { a as PermDock } from "../permdock-CprAPN3w.js";
3
+ import { D as ConnectionOptions, T as Connection, f as InvalidSignatureError, i as OpenApiHooks, u as SnapshotQuery, v as discoverViaSignatureAgent, x as webBotAuthVerifier } from "../server-types-CyRN0-Cd.js";
4
+ import { a as ProtectTarget, n as FetchAdapterOptions, r as FetchProtect, t as ContextReader } from "../fetch-adapter-BIbBAtPZ.js";
5
5
  import { EventHandler, H3Event, H3EventContext, Middleware } from "h3";
6
6
  //#region src/h3/create.d.ts
7
7
  type H3PermDockOptions<TUser = unknown> = FetchAdapterOptions<H3Event, TUser>;
8
- /** `event.context` once `middleware()` or `protect` ran: the instance and the loaded row. */
8
+ /**
9
+ * `event.context` once `middleware()` or `protect` ran: the instance and the
10
+ * loaded row.
11
+ */
9
12
  type H3PermDockContext<TData = unknown, V extends PolicyVocabulary = PolicyVocabulary> = H3EventContext & {
10
13
  readonly permdock: PermDock<V>;
11
14
  readonly permdockData: TData;
@@ -23,8 +26,8 @@ type H3PermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
23
26
  readonly getSnapshot: (event: H3Event, query?: SnapshotQuery) => Promise<Snapshot>;
24
27
  /**
25
28
  * Types `event.context.permdock` and `permdockData` for the handler, builds
26
- * the instance when no middleware set it, and answers a thrown PermDock
27
- * error with Problem Details.
29
+ * the instance when no middleware set it, and answers a thrown PermDock error
30
+ * with Problem Details.
28
31
  */
29
32
  readonly withPermDock: <TData = unknown>(handler: (event: H3PermDockEvent<TData, V>) => unknown) => EventHandler;
30
33
  readonly connection: (event: H3Event, connectionOptions?: ConnectionOptions) => Promise<Connection>;
package/dist/h3/index.js CHANGED
@@ -1,6 +1,6 @@
1
- import { l as InvalidSignatureError, p as webBotAuthVerifier, u as discoverViaSignatureAgent } from "../evaluations-DReoiVBw.js";
2
- import { i as decorate } from "../bind-D1nO6fiC.js";
3
- import { t as fetchAdapter } from "../fetch-adapter-De-u6vhJ.js";
1
+ import { l as InvalidSignatureError, p as webBotAuthVerifier, u as discoverViaSignatureAgent } from "../evaluations-IBceAeKT.js";
2
+ import { i as decorate } from "../bind-BNQA9JK9.js";
3
+ import { t as fetchAdapter } from "../fetch-adapter-dPTgJVHd.js";
4
4
  //#region src/h3/create.ts
5
5
  function createPermDock(policy, options) {
6
6
  const adapter = fetchAdapter(policy, options, "h3", (event) => event.req);
@@ -0,0 +1,10 @@
1
+ //#region src/client/headers.d.ts
2
+ /**
3
+ * The `PermDock-Approval` header for a resume; a `TypeError` for a token that
4
+ * is not an RFC 9651 sf-token.
5
+ */
6
+ declare function approvalHeaders(token: string): {
7
+ readonly "PermDock-Approval": string;
8
+ };
9
+ //#endregion
10
+ export { approvalHeaders as t };
@@ -1,19 +1,22 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
- import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
- import { r as approverLeaves } from "./approvers-CqPOLD-o.js";
4
- import { t as describe } from "./describe-DZlnEtLy.js";
5
- import { i as getRegistry, n as findPermission } from "./permission-registry-DpPtSKNZ.js";
6
- import { t as assertAppData } from "./app-data-MuyzVqX8.js";
7
- import { a as durationOf, i as dateAt, u as isoAt } from "./time-DkWjdL98.js";
8
- import { r as relationReader, t as pendingRelations } from "./relations-BnCWnJGI.js";
9
- import { n as resolveRelated } from "./relation-walk-3OyDBF0S.js";
2
+ import { n as freezeDeep } from "./freeze-jjan0lCv.js";
3
+ import { r as approverLeaves } from "./approvers-B4r0N_Uz.js";
4
+ import { n as describe } from "./describe-Bb4hGK5d.js";
5
+ import { i as getRegistry, n as findPermission } from "./permission-registry-B8tYxPIt.js";
6
+ import { t as assertAppData } from "./app-data-UNNm07jV.js";
7
+ import { a as durationOf, i as dateAt, u as isoAt } from "./time-nR1JesoH.js";
8
+ import { r as relationReader, t as pendingRelations } from "./relations-BxvRvDHK.js";
9
+ import { n as resolveRelated } from "./relation-walk-DK_gkgL7.js";
10
10
  import { n as toWireDelegation } from "./wire-delegation-Cv3W2eaM.js";
11
- import { i as approverRelationKey, s as ApprovalError, t as APPROVAL_HEADER } from "./types-DqzsnlSA.js";
12
- import { n as assertApprover, u as listAllApprovals } from "./store-DSP9oGvh.js";
13
- import { n as parseApprovalHeader } from "./approval-header-CJACtHkv.js";
11
+ import { i as approverRelationKey, s as ApprovalError, t as APPROVAL_HEADER } from "./types-CcUXciSj.js";
12
+ import { n as assertApprover, u as listAllApprovals } from "./store-RNFvaJJv.js";
13
+ import { n as parseApprovalHeader } from "./approval-header-8QV6MU4H.js";
14
14
  //#region src/approvals/relations.ts
15
15
  const DEFAULT_PARENT_DEPTH = 16;
16
- /** Every approver a request names: `by`, each stage and its escalation, and `escalation.to`, inside `anyOf` groups too. */
16
+ /**
17
+ * Every approver a request names: `by`, each stage and its escalation, and
18
+ * `escalation.to`, inside `anyOf` groups too.
19
+ */
17
20
  function requestApprovers(approvers) {
18
21
  return [
19
22
  ...approverLeaves(approvers.by),
@@ -31,7 +34,10 @@ async function settled(read, unread, cache) {
31
34
  await Promise.all(pending);
32
35
  }
33
36
  }
34
- /** The id of `item.resource` the walk starts from, after following `through` links. */
37
+ /**
38
+ * The id of `item.resource` the walk starts from, after following `through`
39
+ * links.
40
+ */
35
41
  async function startOf(item, resource, id, reader, cache, registry) {
36
42
  if (!Array.isArray(item.through)) return resource === item.resource ? id : void 0;
37
43
  let current = resource;
@@ -61,8 +67,8 @@ function depthOf(item) {
61
67
  /**
62
68
  * The relation approvers of `request` that `subject` holds on its resource,
63
69
  * keyed by `approverRelationKey`, for `ApprovalVerdict.relations`. Reads go
64
- * through `relations` by the request's resource id; a request without an id,
65
- * a missing source or a read that fails holds nothing.
70
+ * through `relations` by the request's resource id; a request without an id, a
71
+ * missing source or a read that fails holds nothing.
66
72
  */
67
73
  async function approverRelations(request, subject, options) {
68
74
  const approvers = request.approvers;
@@ -118,7 +124,10 @@ function approverPermissions(request, approver) {
118
124
  }
119
125
  });
120
126
  }
121
- /** The permission approvers `subject` holds on `request`, read through `permdockFor`. */
127
+ /**
128
+ * The permission approvers `subject` holds on `request`, read through
129
+ * `permdockFor`.
130
+ */
122
131
  async function heldPermissions(request, subject, permdockFor) {
123
132
  if (permdockFor === void 0 || request.approvers === void 0) return [];
124
133
  try {
@@ -156,9 +165,9 @@ function summarizeSubject(subject) {
156
165
  });
157
166
  }
158
167
  /**
159
- * The window (`meta.ttl`, else the store's `ttl`, else the default) capped by the grant's
160
- * `approval.ttl`: a grant shortens how long a request stays open, never
161
- * extends it.
168
+ * The window (`meta.ttl`, else the store's `ttl`, else the default) capped by
169
+ * the grant's `approval.ttl`: a grant shortens how long a request stays open,
170
+ * never extends it.
162
171
  */
163
172
  function approvalTtl(storeTtl, approval) {
164
173
  if (storeTtl !== void 0 && durationOf(storeTtl) === void 0) throw new RangeError(`PermDock: approval ttl must be a whole number of seconds above 0, got ${String(storeTtl)}`);
@@ -391,7 +400,10 @@ async function cancelApprovals(store, filter, meta) {
391
400
  }
392
401
  }))).filter(Boolean).length;
393
402
  }
394
- /** The token of a `PermDock-Approval` field: one RFC 9651 sf-token Item with no parameters, else `undefined`. */
403
+ /**
404
+ * The token of a `PermDock-Approval` field: one RFC 9651 sf-token Item with no
405
+ * parameters, else `undefined`.
406
+ */
395
407
  function readApprovalHeader(headers) {
396
408
  return parseApprovalHeader(headers.get(APPROVAL_HEADER));
397
409
  }
@@ -405,14 +417,14 @@ function resumeFromHeader(store, headers, now) {
405
417
  }
406
418
  /**
407
419
  * The token to resume `decision` with when the caller carries none: the
408
- * decision's own token when the store holds an approved or rejected request
409
- * for it, so `resumeDecision` resumes (or denies) the call without the
410
- * caller passing the token back. The token already binds permission,
411
- * resource (or the call's data when there is no row id), subject and actor.
412
- * A pending request counts only with `denyPending: true`, which makes the
413
- * call deny with `approval-pending` instead of asking again. `undefined` when
414
- * the decision needs no approval, there is no store, or the store has no
415
- * unexpired request for the token; a store that throws counts as none.
420
+ * decision's own token when the store holds an approved or rejected request for
421
+ * it, so `resumeDecision` resumes (or denies) the call without the caller
422
+ * passing the token back. The token already binds permission, resource (or the
423
+ * call's data when there is no row id), subject and actor. A pending request
424
+ * counts only with `denyPending: true`, which makes the call deny with
425
+ * `approval-pending` instead of asking again. `undefined` when the decision
426
+ * needs no approval, there is no store, or the store has no unexpired request
427
+ * for the token; a store that throws counts as none.
416
428
  */
417
429
  async function storedApprovalToken(store, decision, options = {}) {
418
430
  if (store === void 0 || decision.outcome !== "approval-required") return;
@@ -1,9 +1,9 @@
1
- import { T as Policy, j as PolicyVocabulary, sr as Principal } from "../policy-types-B-F-qAZk.js";
2
- import { u as Permission } from "../permission-types-DhNEmoRG.js";
3
- import { a as PermDock } from "../permdock-Dco6dyCK.js";
4
- import { n as RevocationFeed } from "../revocations-R07lFBnX.js";
5
- import { D as ConnectionOptions, T as Connection, f as InvalidSignatureError, i as OpenApiHooks, o as ProtectOptions, v as discoverViaSignatureAgent, x as webBotAuthVerifier } from "../server-types-C4gZUEZy.js";
6
- import { t as ServerAdapterOptions } from "../bind-JDuvxjuW.js";
1
+ import { T as Policy, j as PolicyVocabulary, pr as Principal } from "../policy-types-DGIO_gxq.js";
2
+ import { u as Permission } from "../permission-types-CAY-GU7e.js";
3
+ import { a as PermDock } from "../permdock-CprAPN3w.js";
4
+ import { n as RevocationFeed } from "../revocations-BaUXHM1N.js";
5
+ import { D as ConnectionOptions, T as Connection, f as InvalidSignatureError, i as OpenApiHooks, o as ProtectOptions, v as discoverViaSignatureAgent, x as webBotAuthVerifier } from "../server-types-CyRN0-Cd.js";
6
+ import { t as ServerAdapterOptions } from "../bind-YYjvfpB9.js";
7
7
  import { Context, Hono, MiddlewareHandler } from "hono";
8
8
  import { SSEMessage, SSEStreamingApi } from "hono/streaming";
9
9
  import { WSEvents } from "hono/ws";
@@ -20,19 +20,25 @@ type HonoPermDockEnv<TData = unknown, V extends PolicyVocabulary = PolicyVocabul
20
20
  };
21
21
  };
22
22
  type HonoPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
23
- /** The `PermDock` for one request, for code the middleware does not run before. */
23
+ /**
24
+ * The `PermDock` for one request, for code the middleware does not run
25
+ * before.
26
+ */
24
27
  readonly getPermDock: (c: Context) => Promise<PermDock<V>>;
25
28
  readonly middleware: () => MiddlewareHandler<HonoPermDockEnv<unknown, V>>;
26
29
  readonly protect: <TData = unknown>(permission: Permission | null, data?: (c: Context) => TData | Promise<TData>, protectOptions?: ProtectOptions) => MiddlewareHandler<HonoPermDockEnv<NonNullable<TData>, V>>;
27
30
  /** A long-lived connection for the request behind `c`. */
28
31
  readonly connection: (c: Context, connectionOptions?: ConnectionOptions) => Promise<Connection>;
29
- /** `upgradeWebSocket` events that close with `1008` when the connection aborts. */
32
+ /**
33
+ * `upgradeWebSocket` events that close with `1008` when the connection
34
+ * aborts.
35
+ */
30
36
  readonly socket: <T = unknown>(connection: Connection, events: WSEvents<T>) => WSEvents<T>;
31
37
  /**
32
38
  * Writes `source` to a `streamSSE` stream, dropping items the subscriber
33
39
  * cannot read, and resolves when it ends: after an `event: permdock` frame
34
- * when the connection aborts, when the client disconnects, or when the
35
- * source is done. Await it as the last statement of the callback.
40
+ * when the connection aborts, when the client disconnects, or when the source
41
+ * is done. Await it as the last statement of the callback.
36
42
  */
37
43
  readonly sse: <T>(connection: Connection, stream: SSEStreamingApi, source: AsyncIterable<T>, options?: SseOptions<T>) => Promise<void>;
38
44
  readonly permdockHandler: () => Hono;