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,21 +1,21 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
- import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
- import { o as hasConditionOp } from "./refs-CNJBiTFo.js";
4
- import { o as sameId } from "./expiry-D4_YKRKD.js";
5
- import { a as getResource, c as listPermissions } from "./permission-registry-DpPtSKNZ.js";
6
- import { n as isThenable } from "./thenable-yD7SabqG.js";
7
- import { u as isPrincipalRelation } from "./resource-relations-D_jw0BFx.js";
8
- import { p as nowSeconds, s as instantAt } from "./time-DkWjdL98.js";
2
+ import { n as freezeDeep } from "./freeze-jjan0lCv.js";
3
+ import { o as hasConditionOp } from "./refs-C8BKxc_e.js";
4
+ import { o as sameId } from "./expiry-6XByK0dm.js";
5
+ import { a as getResource, c as listPermissions } from "./permission-registry-B8tYxPIt.js";
6
+ import { n as isThenable } from "./thenable-BNSM1U2R.js";
7
+ import { u as isPrincipalRelation } from "./resource-relations-8-pCScBO.js";
8
+ import { p as nowSeconds, s as instantAt } from "./time-nR1JesoH.js";
9
9
  import { t as canonicalJson } from "./canonical-json-DwilZ1iB.js";
10
- import { f as scopeList, h as tenantOf, i as keepsPermission, l as rootScope, s as resolveScope } from "./scopes-BHsc-wp-.js";
11
- import { a as readOnlyActorRefuses, i as delegatedPermissions, r as coversRequirements } from "./delegation-C5rOdTp5.js";
12
- import { b as synthesiseRole, m as findRole, o as flattenGrantee, v as listRoles, x as treeXSchema, y as sourceRoleMeta } from "./grantee-BrRANrpT.js";
13
- import { c as nowSeconds$1, d as resolveActiveTenant, l as partitionsOf, p as scopeField, r as isMembershipExpired } from "./tenancy-CmeBQ6Nv.js";
14
- import { o as levelCondition, r as grantList, s as levelNames, t as declaredRoleNames } from "./policy-DaJy4nK4.js";
15
- import { t as byCodePoint } from "./compare-pfyVnBjE.js";
16
- import { C as tenantCustomRoles, D as emptyListeners, M as contactMayUse, S as roleAllowKeys, _ as isSharedCustomRole, a as expandRoleNames, g as holdsGlobalCustomRole, h as holdsCustomRole, l as ceilingGrants, m as customRoleScope, n as requirementCondition, p as customRoleOf, t as evaluate, u as customGrantsFor, x as resolveCustomRole } from "./evaluate-B_oqFbWC.js";
17
- import { n as matchGrantee, t as combineWhere } from "./grantee-match-0RtHWQDx.js";
18
- import { t as buildSnapshot } from "./snapshot-CbGmYiJx.js";
10
+ import { f as scopeList, h as tenantOf, i as keepsPermission, l as rootScope, s as resolveScope } from "./scopes-0Up_UA2t.js";
11
+ import { a as readOnlyActorRefuses, i as delegatedPermissions, r as coversRequirements } from "./delegation-CDB6_keF.js";
12
+ import { b as synthesiseRole, m as findRole, o as flattenGrantee, v as listRoles, x as treeXSchema, y as sourceRoleMeta } from "./grantee-Dke-9rd1.js";
13
+ import { t as byCodePoint } from "./compare-DTfyUunF.js";
14
+ import { c as nowSeconds$1, d as resolveActiveTenant, l as partitionsOf, p as scopeField, r as isMembershipExpired } from "./tenancy-5d1zVBvK.js";
15
+ import { c as levelNames, i as grantList, n as declaredRoleNames, s as levelCondition, t as coveredLevels } from "./policy-CLQ8__GF.js";
16
+ import { C as tenantCustomRoles, D as emptyListeners, M as contactMayUse, S as roleAllowKeys, _ as isSharedCustomRole, a as expandRoleNames, g as holdsGlobalCustomRole, h as holdsCustomRole, l as ceilingGrants, m as customRoleScope, n as requirementCondition, p as customRoleOf, t as evaluate, u as customGrantsFor, x as resolveCustomRole } from "./evaluate-BAmf_AQd.js";
17
+ import { n as matchGrantee, t as combineWhere } from "./grantee-match-7RZZvoT_.js";
18
+ import { t as buildSnapshot } from "./snapshot-CXlzi69u.js";
19
19
  //#region src/core/memberships.ts
20
20
  /** Two memberships are the same row when everything but `roles` matches. */
21
21
  function identity(membership) {
@@ -41,8 +41,8 @@ function identity(membership) {
41
41
  /**
42
42
  * Merges memberships from several sources: entries naming the same instance
43
43
  * with the same `via`, expiry, owner and seats become one entry with the union
44
- * of their roles. Entries that differ in any of those stay separate, so a
45
- * staff role and a contact role in one instance keep their own `via`.
44
+ * of their roles. Entries that differ in any of those stay separate, so a staff
45
+ * role and a contact role in one instance keep their own `via`.
46
46
  */
47
47
  function mergeMemberships(lists) {
48
48
  const merged = /* @__PURE__ */ new Map();
@@ -59,8 +59,8 @@ function mergeMemberships(lists) {
59
59
  function all(values) {
60
60
  return values.some((value) => isThenable(value)) ? Promise.all(values) : values;
61
61
  }
62
- function then(value, next) {
63
- return isThenable(value) ? Promise.resolve(value).then(next) : next(value);
62
+ function then(value, map) {
63
+ return isThenable(value) ? Promise.resolve(value).then(map) : map(value);
64
64
  }
65
65
  /**
66
66
  * One `MembershipSource` over several: memberships are merged and
@@ -73,8 +73,8 @@ function composeMemberships(sources) {
73
73
  const versioned = sources.filter((source) => source.version !== void 0);
74
74
  const rolesReaders = sources.filter((source) => source.globalRolesFor !== void 0);
75
75
  return {
76
- ...rolesReaders.length === 0 ? {} : { globalRolesFor(principal) {
77
- return then(all(rolesReaders.map((source) => source.globalRolesFor?.(principal) ?? [])), (lists) => [...new Set(lists.flat())]);
76
+ ...rolesReaders.length === 0 ? {} : { globalRolesFor(principal, context) {
77
+ return then(all(rolesReaders.map((source) => source.globalRolesFor?.(principal, context) ?? [])), (lists) => [...new Set(lists.flat())]);
78
78
  } },
79
79
  membershipsFor(principal, options) {
80
80
  return then(all(sources.map((source) => source.membershipsFor(principal, options))), (lists) => mergeMemberships(lists));
@@ -96,8 +96,8 @@ function composeMemberships(sources) {
96
96
  return [...seen.values()];
97
97
  });
98
98
  } },
99
- ...versioned.length === 0 ? {} : { version(principal) {
100
- return then(all(versioned.map((source) => source.version?.(principal))), (versions) => {
99
+ ...versioned.length === 0 ? {} : { version(principal, context) {
100
+ return then(all(versioned.map((source) => source.version?.(principal, context))), (versions) => {
101
101
  const known = versions.filter((value) => typeof value === "number" && Number.isFinite(value));
102
102
  return known.length === 0 ? void 0 : Math.max(...known);
103
103
  });
@@ -109,33 +109,41 @@ function asMembershipSource(input) {
109
109
  return Array.isArray(input) ? composeMemberships(input) : input;
110
110
  }
111
111
  /**
112
- * Trust the memberships the verified token carries, and read `source` only
113
- * when the token marks them truncated. With `version`, a token minted before
114
- * the latest membership change is stale for the policy's `fresh` permissions,
115
- * or with `onStale: 'reread'` has its memberships read from `source` instead.
112
+ * Trust the memberships the verified token carries, and read `source` only when
113
+ * the token marks them truncated. With `version`, a token minted before the
114
+ * latest membership change is stale for the policy's `fresh` permissions, or
115
+ * with `onStale: 'reread'` has its memberships read from `source` instead. With
116
+ * `versions`, an instance with intent `read` takes the version from that
117
+ * process-wide cache, so concurrent instances share one read and a token issued
118
+ * within its `maxStaleMs` needs none; intent `write` always reads.
116
119
  */
117
120
  function claimsFirst(source, options = {}) {
118
121
  const inner = asMembershipSource(source);
119
- const version = options.version ?? (inner.version === void 0 ? void 0 : (principal) => inner.version?.(principal));
122
+ const read = options.version ?? inner.version?.bind(inner);
123
+ const versions = options.versions;
124
+ const version = read === void 0 ? void 0 : versions === void 0 ? (principal, context) => read(principal, context) : (principal, context) => versions.current(principal, () => read(principal, context), { live: context?.intent !== "read" });
120
125
  return {
121
126
  membershipsFor: (principal, query) => inner.membershipsFor(principal, query),
122
127
  ...inner.list === void 0 ? {} : { list: (query) => inner.list?.(query) ?? [] },
123
128
  ...version === void 0 ? {} : { version },
124
- ...inner.globalRolesFor === void 0 ? {} : { globalRolesFor: (principal) => inner.globalRolesFor?.(principal) ?? [] },
129
+ ...inner.globalRolesFor === void 0 ? {} : { globalRolesFor: (principal, context) => inner.globalRolesFor?.(principal, context) ?? [] },
125
130
  ...options.onStale === "reread" ? { onStale: "reread" } : {},
126
131
  claimsFirst: true
127
132
  };
128
133
  }
129
- /** Whether the identity provider owns `membership`: the application must not add, change or remove it. */
134
+ /**
135
+ * Whether the identity provider owns `membership`: the application must not
136
+ * add, change or remove it.
137
+ */
130
138
  function isExternallyManaged(membership) {
131
139
  return membership.managedBy === "idp";
132
140
  }
133
141
  /**
134
- * How many principals hold `role` in one scope instance now, from the
135
- * source's member list (`MembershipSource.list`): live memberships of exactly
136
- * that scope and instance, each principal counted once. The `holders` a
137
- * `decideRoleChange` with `min`, `max` or `transferOnly` needs. `undefined`
138
- * when the source cannot list or the read fails, which that check denies.
142
+ * How many principals hold `role` in one scope instance now, from the source's
143
+ * member list (`MembershipSource.list`): live memberships of exactly that scope
144
+ * and instance, each principal counted once. The `holders` a `decideRoleChange`
145
+ * with `min`, `max` or `transferOnly` needs. `undefined` when the source cannot
146
+ * list or the read fails, which that check denies.
139
147
  */
140
148
  async function countHolders(source, query) {
141
149
  const composed = asMembershipSource(source);
@@ -185,8 +193,8 @@ function mayHoldManaged(policy, role, membership) {
185
193
  /**
186
194
  * Drops every role a membership's kind may not hold (fail-closed: a missing
187
195
  * `via` is no kind) and every non-assignable role on an identity-provider
188
- * membership. Global roles have no kind, so a role with `for` held globally
189
- * is dropped too.
196
+ * membership. Global roles have no kind, so a role with `for` held globally is
197
+ * dropped too.
190
198
  */
191
199
  function applyRoleKinds(policy, roles, memberships) {
192
200
  const kinds = policy.roles.some((binding) => binding.for !== void 0);
@@ -208,7 +216,10 @@ function applyRoleKinds(policy, roles, memberships) {
208
216
  function usesAssigns(policy) {
209
217
  return policy.roles.some((binding) => binding.assigns !== void 0);
210
218
  }
211
- /** Declared role names in declaration order: bindings first, then vocabulary-only leaves. */
219
+ /**
220
+ * Declared role names in declaration order: bindings first, then
221
+ * vocabulary-only leaves.
222
+ */
212
223
  function declarationOrder(policy) {
213
224
  const names = policy.roles.map((binding) => binding.name);
214
225
  const seen = new Set(names);
@@ -219,9 +230,9 @@ function declarationOrder(policy) {
219
230
  return names;
220
231
  }
221
232
  /**
222
- * Each role's depth in the `assigns` graph: a role nobody else assigns is 0,
223
- * a role another assigns sits one below its deepest assigner. Cycles stop
224
- * after one pass per role.
233
+ * Each role's depth in the `assigns` graph: a role nobody else assigns is 0, a
234
+ * role another assigns sits one below its deepest assigner. Cycles stop after
235
+ * one pass per role.
225
236
  */
226
237
  function assignDepths(policy) {
227
238
  const names = declarationOrder(policy);
@@ -262,7 +273,10 @@ function audiencesOf(policy, names) {
262
273
  }
263
274
  return out;
264
275
  }
265
- /** Whether `membership` is the instance itself or one of its ancestors named in `within`. */
276
+ /**
277
+ * Whether `membership` is the instance itself or one of its ancestors named in
278
+ * `within`.
279
+ */
266
280
  //#endregion
267
281
  //#region src/core/held-roles.ts
268
282
  /**
@@ -293,7 +307,10 @@ function roleLeaf(policy, name) {
293
307
  }
294
308
  //#endregion
295
309
  //#region src/core/snapshot-grants.ts
296
- /** A grant on a relation with a `period` is decided on the server, where the clock is. */
310
+ /**
311
+ * A grant on a relation with a `period` is decided on the server, where the
312
+ * clock is.
313
+ */
297
314
  function periodBound(policy, grant) {
298
315
  const relations = policy.resources.get(grant.permission.resource)?.relations;
299
316
  return flattenGrantee(grant.to).some((item) => {
@@ -330,8 +347,8 @@ function graphAware(grant, where) {
330
347
  }));
331
348
  }
332
349
  /**
333
- * `where()` keeps a grant that is server-only because it reads the graph:
334
- * its `related` nodes compile to subqueries given relation mappings.
350
+ * `where()` keeps a grant that is server-only because it reads the graph: its
351
+ * `related` nodes compile to subqueries given relation mappings.
335
352
  */
336
353
  function whereGrant(grant) {
337
354
  return grant.graph === true ? freezeDeep({
@@ -340,8 +357,8 @@ function whereGrant(grant) {
340
357
  }) : grant;
341
358
  }
342
359
  /**
343
- * Every grant the subject may reach, once per membership that holds all of
344
- * its scoped roles, so a client can check that membership's tenant, team or
360
+ * Every grant the subject may reach, once per membership that holds all of its
361
+ * scoped roles, so a client can check that membership's tenant, team or
345
362
  * resource. A scoped role held only globally reaches nothing.
346
363
  */
347
364
  function collectSnapshotGrants(policy, subject, customRoles, now = nowSeconds$1(), customGrants = customGrantsFor(policy, customRoles), mode = "held") {
@@ -407,24 +424,26 @@ function assignableCandidates(policy) {
407
424
  return rankRoles(policy, [...new Set(names)]).map((name) => roleLeaf(policy, name));
408
425
  }
409
426
  /**
410
- * The levels a held allow of a permission covers: its own `level`, every
411
- * level when it has no row condition, or the levels whose condition equals
412
- * its condition.
427
+ * The levels a held allow of a permission covers: its own `level`, every level
428
+ * when it has no row condition, or the levels whose condition equals its
429
+ * condition; with `orderedLevels`, also every narrower level.
413
430
  */
414
431
  function heldLevels(policy, grant, names) {
415
- if (grant.level !== void 0) return [grant.level];
432
+ const resource = grant.permission.resource;
433
+ if (grant.level !== void 0) return coveredLevels(policy, resource, [grant.level]);
416
434
  if (grant.where === void 0) return names;
417
435
  const held = canonicalJson(grant.where);
418
- return names.filter((name) => {
419
- const condition = levelCondition(policy, grant.permission.resource, name);
436
+ return coveredLevels(policy, resource, names.filter((name) => {
437
+ const condition = levelCondition(policy, resource, name);
420
438
  return condition !== void 0 && canonicalJson(condition) === held;
421
- });
439
+ }));
422
440
  }
423
441
  /**
424
442
  * What the subject may hand out in `tenant`: declared assignable roles and the
425
- * tenant custom-role ceiling, narrowed by `allowed` (`CustomRoleSource.assignable`),
426
- * then intersected with the permissions the subject holds there. Holding a
427
- * role or a granted permission with `meta.manageRoles` lifts the intersection.
443
+ * tenant custom-role ceiling, narrowed by `allowed`
444
+ * (`CustomRoleSource.assignable`), then intersected with the permissions the
445
+ * subject holds there. Holding a role or a granted permission with
446
+ * `meta.manageRoles` lifts the intersection.
428
447
  */
429
448
  function assignableIn(policy, subject, customRoles, customGrants, tenant, allowed, now = nowSeconds$1(), global = false) {
430
449
  const principal = subject.principal;
@@ -547,7 +566,10 @@ function assignableCustomRoles(policy, customRoles, tenant, declared, mayHandOut
547
566
  }
548
567
  //#endregion
549
568
  //#region src/core/instance-snapshot.ts
550
- /** The one path from a resolved subject to a `Snapshot`; pure apart from the default clock. */
569
+ /**
570
+ * The one path from a resolved subject to a `Snapshot`; pure apart from the
571
+ * default clock.
572
+ */
551
573
  function snapshotOf(policy, subject, options) {
552
574
  const now = options.now ?? nowSeconds$1();
553
575
  const customGrants = options.customGrants ?? customGrantsFor(policy, options.customRoles);
@@ -582,7 +604,10 @@ function snapshotOf(policy, subject, options) {
582
604
  }
583
605
  }));
584
606
  }
585
- /** The policy's scopes as snapshots and `permdock cloud push` carry them, with the resources each partitions. */
607
+ /**
608
+ * The policy's scopes as snapshots and `permdock cloud push` carry them, with
609
+ * the resources each partitions.
610
+ */
586
611
  function snapshotScopes(policy) {
587
612
  if (policy.scopes.length === 0) return;
588
613
  const resources = [...policy.resources.values()];
@@ -603,4 +628,4 @@ function snapshotScopes(policy) {
603
628
  });
604
629
  }
605
630
  //#endregion
606
- export { isExternallyManaged as _, whereGrant as a, applyRoleKinds as c, rankRoles as d, usesAssigns as f, countHolders as g, composeMemberships as h, collectSnapshotGrants as i, audiencesOf as l, claimsFirst as m, snapshotScopes as n, heldRoleNames as o, asMembershipSource as p, assignableIn as r, roleLeaf as s, snapshotOf as t, bindingOf as u };
631
+ export { claimsFirst as _, heldLevels as a, isExternallyManaged as b, heldRoleNames as c, audiencesOf as d, bindingOf as f, asMembershipSource as g, usesAssigns as h, assignableIn as i, roleLeaf as l, roleMeta as m, snapshotScopes as n, collectSnapshotGrants as o, rankRoles as p, assignableCandidates as r, whereGrant as s, snapshotOf as t, applyRoleKinds as u, composeMemberships as v, countHolders as y };
@@ -2,8 +2,8 @@
2
2
  const ISO_INSTANT = /^(\d{4}-\d{2}-\d{2})(?:[T ](\d{2}:\d{2}(?::\d{2}(?:\.\d{1,9})?)?)(Z|[+-]\d{2}(?::?\d{2})?)?)?$/u;
3
3
  /**
4
4
  * Milliseconds since the epoch for an ISO 8601 date or date-time, or
5
- * `undefined`. A date-time without a zone and a bare date are UTC, the same
6
- * in memory, in the ORM compilers and in generated SQL.
5
+ * `undefined`. A date-time without a zone and a bare date are UTC, the same in
6
+ * memory, in the ORM compilers and in generated SQL.
7
7
  */
8
8
  function isoInstant(value) {
9
9
  const match = ISO_INSTANT.exec(value);
@@ -1,12 +1,15 @@
1
1
  //#region src/core/internals.ts
2
2
  const INTERNALS = Symbol.for("permdock.internals");
3
- /** Attaches `internals` to `instance` as a non-enumerable member; call before freezing. */
3
+ /**
4
+ * Attaches `internals` to `instance` as a non-enumerable member; call before
5
+ * freezing.
6
+ */
4
7
  function attachInternals(instance, internals) {
5
8
  Object.defineProperty(instance, INTERNALS, { value: internals });
6
9
  }
7
10
  /**
8
- * The internals of a server instance, or `undefined` for an instance built
9
- * from a snapshot or one that is not PermDock's. A feature function treats
11
+ * The internals of a server instance, or `undefined` for an instance built from
12
+ * a snapshot or one that is not PermDock's. A feature function treats
10
13
  * `undefined` as a check it cannot answer and denies with `unsupported`.
11
14
  */
12
15
  function internalsOf(permdock) {
@@ -1,5 +1,5 @@
1
1
  import { r as isRecord } from "./compact-CAf557ZB.js";
2
- import { n as isForbiddenKey } from "./paths-DXSHAMIa.js";
2
+ import { n as isForbiddenKey } from "./paths-CUvURzHp.js";
3
3
  //#region src/core/json-schema.ts
4
4
  function issue(issues, path, message) {
5
5
  issues.push({
@@ -64,7 +64,10 @@ function resolveRef(root, ref) {
64
64
  if (target === void 0) throw new TypeError(`Unsupported or unknown $ref ${ref}`);
65
65
  return target;
66
66
  }
67
- /** Validates a `copyJson` result against `node`, reading `$ref` targets from `root`. */
67
+ /**
68
+ * Validates a `copyJson` result against `node`, reading `$ref` targets from
69
+ * `root`.
70
+ */
68
71
  function checkSchema(node, value, path, issues, root = node) {
69
72
  if (node.$ref !== void 0) {
70
73
  checkSchema(resolveRef(root, node.$ref), value, path, issues, root);
@@ -130,7 +133,10 @@ function checkSchema(node, value, path, issues, root = node) {
130
133
  else if (node.additionalProperties !== void 0) checkSchema(node.additionalProperties, value[key], [...path, key], issues, root);
131
134
  }
132
135
  }
133
- /** The path of the first `__proto__`, `constructor` or `prototype` key in `value`, if any. */
136
+ /**
137
+ * The path of the first `__proto__`, `constructor` or `prototype` key in
138
+ * `value`, if any.
139
+ */
134
140
  function forbiddenKeyPath(value, path = []) {
135
141
  if (value === null || typeof value !== "object") return;
136
142
  for (const [key, child] of Object.entries(value)) {
@@ -1,10 +1,10 @@
1
1
  import { StandardSchemaV1 } from "@standard-schema/spec";
2
2
  //#region src/core/json-schema.d.ts
3
3
  /**
4
- * The JSON Schema 2020-12 keywords the package's own schemas use;
5
- * `checkSchema` interprets exactly these. `$ref` resolves only `#/$defs/<name>`
6
- * against the root node. Annotations (`title`, `description`, `format`) are
7
- * ignored, so a `format` always sits next to a `pattern` that enforces it.
4
+ * The JSON Schema 2020-12 keywords the package's own schemas use; `checkSchema`
5
+ * interprets exactly these. `$ref` resolves only `#/$defs/<name>` against the
6
+ * root node. Annotations (`title`, `description`, `format`) are ignored, so a
7
+ * `format` always sits next to a `pattern` that enforces it.
8
8
  */
9
9
  type JsonSchemaNode = {
10
10
  readonly $schema?: string;
@@ -1,10 +1,13 @@
1
- import { Y as JwtClaims, Zt as AuthEvent, dt as TokenVerifier, lr as Subject, lt as TokenFailureCause, pt as VerifiedToken, sr as Principal, ut as TokenSigner } from "../policy-types-B-F-qAZk.js";
2
- import { c as LinkPolicy, o as CapabilityPrincipal, t as Capability } from "../capability-D4UC9TTW.js";
3
- import { B as JwtAlgorithm, F as DpopProofResult, H as JwtPrincipal, I as IntrospectionPrincipal, L as JoseTokenSignerOptions, P as DiscoveryInput, R as JoseTokenVerifierOptions, U as JwtSubjectOptions, V as JwtJwks, W as MappedSubject, l as ReplayStore, z as JsonWebKeySet } from "../types-cTos-H7p.js";
4
- import { t as memoryReplayStore } from "../replay-DCDD_ZfL.js";
1
+ import { Z as JwtClaims, _t as VerifiedToken, hr as Subject, ht as TokenVerifier, mt as TokenSigner, pr as Principal, pt as TokenFailureCause, rn as AuthEvent } from "../policy-types-DGIO_gxq.js";
2
+ import { c as LinkPolicy, o as CapabilityPrincipal, t as Capability } from "../capability-Di9tiUvi.js";
3
+ import { B as JwtAlgorithm, F as DpopProofResult, H as JwtPrincipal, I as IntrospectionPrincipal, L as JoseTokenSignerOptions, P as DiscoveryInput, R as JoseTokenVerifierOptions, U as JwtSubjectOptions, V as JwtJwks, W as MappedSubject, l as ReplayStore, z as JsonWebKeySet } from "../types-DsHGPtkR.js";
4
+ import { t as memoryReplayStore } from "../replay-Bs9Df2fQ.js";
5
5
  import { StandardSchemaV1 } from "@standard-schema/spec";
6
6
  //#region src/jwt/capability.d.ts
7
- /** `on('auth')` causes: a verification failure, or one of the three capability checks. */
7
+ /**
8
+ * `on('auth')` causes: a verification failure, or one of the three capability
9
+ * checks.
10
+ */
8
11
  type CapabilityFailureCause = TokenFailureCause | "capability-revoked" | "capability-replayed" | "redeemer-mismatch" | "link-policy";
9
12
  type CapabilitySubjectOptions = Omit<JoseTokenVerifierOptions, "typ" | "issuer" | "audience" | "profile"> & {
10
13
  /** The issuer the capability was signed by (`iss`); required. */
@@ -13,20 +16,26 @@ type CapabilitySubjectOptions = Omit<JoseTokenVerifierOptions, "typ" | "issuer"
13
16
  readonly audience: string | readonly string[];
14
17
  readonly verifier?: TokenVerifier;
15
18
  /**
16
- * The link policies of the scope instances the linked resource sits in
17
- * (its tenant, its customer); every one must hold. A throw denies.
19
+ * The link policies of the scope instances the linked resource sits in (its
20
+ * tenant, its customer); every one must hold. A throw denies.
18
21
  */
19
22
  readonly linkPolicy?: (capability: Capability) => LinkPolicy | readonly LinkPolicy[] | undefined | Promise<LinkPolicy | readonly LinkPolicy[] | undefined>;
20
23
  /** `true` when the application revoked the link id (`sub`); a throw denies. */
21
24
  readonly revoked?: (id: string) => boolean | Promise<boolean>;
22
- /** Claims the `jti` of a one-time capability; a one-time capability without it is refused. */
25
+ /**
26
+ * Claims the `jti` of a one-time capability; a one-time capability without it
27
+ * is refused.
28
+ */
23
29
  readonly replay?: ReplayStore;
24
- /** The request's own verified subject, checked against the capability's `redeemer`. */
30
+ /**
31
+ * The request's own verified subject, checked against the capability's
32
+ * `redeemer`.
33
+ */
25
34
  readonly viewer?: Subject;
26
35
  /**
27
36
  * The incoming request. A capability with `cnf` resolves only when the
28
- * request carries a DPoP proof (RFC 9449) signed by the bound key;
29
- * without one it is refused.
37
+ * request carries a DPoP proof (RFC 9449) signed by the bound key; without
38
+ * one it is refused.
30
39
  */
31
40
  readonly request?: Request;
32
41
  readonly onAuth?: (event: AuthEvent) => void;
@@ -34,8 +43,8 @@ type CapabilitySubjectOptions = Omit<JoseTokenVerifierOptions, "typ" | "issuer"
34
43
  };
35
44
  /**
36
45
  * Resolves a `vnd.permdock.capability+jwt` into the `link` subject it acts as.
37
- * Every failure (signature, `typ`, `iss`, `aud`, expiry, a malformed claim,
38
- * a revoked link, a replayed one-time token, a redeemer the viewer does not
46
+ * Every failure (signature, `typ`, `iss`, `aud`, expiry, a malformed claim, a
47
+ * revoked link, a replayed one-time token, a redeemer the viewer does not
39
48
  * satisfy, a `cnf` without a matching DPoP proof, a throwing store) is the
40
49
  * anonymous subject, never a throw.
41
50
  */
@@ -52,13 +61,19 @@ type CiOidcSubjectOptions = Omit<JoseTokenVerifierOptions, "typ" | "issuer" | "a
52
61
  * from OpenID discovery unless `jwks` is set.
53
62
  */
54
63
  readonly issuer?: string;
55
- /** Validates the verified claims; a failure or a Promise is the anonymous subject. */
64
+ /**
65
+ * Validates the verified claims; a failure or a Promise is the anonymous
66
+ * subject.
67
+ */
56
68
  readonly schema?: StandardSchemaV1;
57
69
  readonly verifier?: TokenVerifier;
58
70
  readonly onAuth?: (event: AuthEvent) => void;
59
71
  readonly requestId?: string;
60
72
  };
61
- /** A CI job: never a user. `ref` is a full ref (`refs/heads/main`, `refs/tags/v1`). */
73
+ /**
74
+ * A CI job: never a user. `ref` is a full ref (`refs/heads/main`,
75
+ * `refs/tags/v1`).
76
+ */
62
77
  type CiOidcPrincipal = Principal & {
63
78
  readonly kind: "workload";
64
79
  readonly issuer: string;
@@ -77,18 +92,27 @@ export declare function subjectFromCiOidc(token: string | undefined | null, opti
77
92
  //#endregion
78
93
  //#region src/jwt/dpop.d.ts
79
94
  type DpopProofOptions = {
80
- /** Rejects a proof whose `jti` this key already used within the 60-second window. */
95
+ /**
96
+ * Rejects a proof whose `jti` this key already used within the 60-second
97
+ * window.
98
+ */
81
99
  readonly replay?: ReplayStore;
82
100
  };
83
101
  export declare function verifyDpopProof(request: Request, claims: JwtClaims, accessToken?: string, options?: DpopProofOptions): Promise<DpopProofResult>;
84
102
  //#endregion
85
103
  //#region src/jwt/id-token.d.ts
86
- /** `TokenFailureCause` plus `nonce-mismatch`; a `TokenVerifier` never returns it. */
104
+ /**
105
+ * `TokenFailureCause` plus `nonce-mismatch`; a `TokenVerifier` never returns
106
+ * it.
107
+ */
87
108
  type IdTokenFailureCause = TokenFailureCause | "nonce-mismatch";
88
109
  type VerifyIdTokenOptions = {
89
110
  /** The OpenID Provider's issuer; `iss` must equal it. */
90
111
  readonly issuer: string;
91
- /** The relying party's `client_id`; `aud` must contain it and `azp`, when present, must equal it. */
112
+ /**
113
+ * The relying party's `client_id`; `aud` must contain it and `azp`, when
114
+ * present, must equal it.
115
+ */
92
116
  readonly clientId: string;
93
117
  /** The `nonce` sent in the authentication request; the token's must equal it. */
94
118
  readonly nonce?: string;
@@ -118,9 +142,9 @@ type VerifyIdTokenResult = {
118
142
  };
119
143
  /**
120
144
  * Verifies an OpenID Connect ID token for a relying party (Core section
121
- * 3.1.3.7): signature, `iss`, `aud`, `exp`, `iat`, `typ` `JWT` or absent,
122
- * `azp` and, when `nonce` is given, `nonce`. It does not check `at_hash`,
123
- * `c_hash`, `auth_time` or `acr`. Never throws.
145
+ * 3.1.3.7): signature, `iss`, `aud`, `exp`, `iat`, `typ` `JWT` or absent, `azp`
146
+ * and, when `nonce` is given, `nonce`. It does not check `at_hash`, `c_hash`,
147
+ * `auth_time` or `acr`. Never throws.
124
148
  */
125
149
  export declare function verifyIdToken(token: string, options: VerifyIdTokenOptions): Promise<VerifyIdTokenResult>;
126
150
  //#endregion
@@ -135,13 +159,19 @@ export declare function subjectFromJwt(token: string | undefined | null, options
135
159
  export declare function jwtSubjectResolver(options: JwtSubjectOptions): (token: string | undefined | null, request?: Request) => Promise<MappedSubject>;
136
160
  //#endregion
137
161
  //#region src/jwt/subject-token.d.ts
138
- /** `TokenFailureCause` plus the two checks `verifySubjectToken` adds; a `TokenVerifier` never returns them. */
162
+ /**
163
+ * `TokenFailureCause` plus the two checks `verifySubjectToken` adds; a
164
+ * `TokenVerifier` never returns them.
165
+ */
139
166
  type SubjectTokenFailureCause = TokenFailureCause | "replayed" | "lifetime-exceeded";
140
167
  type VerifySubjectTokenOptions = {
141
168
  /** Tried in order; the first that accepts the token wins. */
142
169
  readonly verifiers: readonly TokenVerifier[];
143
170
  readonly audience: string | readonly string[];
144
- /** Records each `jti` once; `claim` when the store has it, else `seen` and `remember`. */
171
+ /**
172
+ * Records each `jti` once; `claim` when the store has it, else `seen` and
173
+ * `remember`.
174
+ */
145
175
  readonly replay: ReplayStore;
146
176
  /** The largest `exp - iat`, in seconds; default 300. */
147
177
  readonly maxLifetime?: number;
@@ -163,10 +193,10 @@ type VerifySubjectTokenResult = {
163
193
  };
164
194
  /**
165
195
  * Verifies a subject token: an RFC 9068 `at+jwt` naming one subject for one
166
- * request, such as the `PermDock-Subject` header. The first of `verifiers`
167
- * that accepts it wins. The token must carry `sub`, `jti`, `iat` and `exp`,
168
- * live at most `maxLifetime` seconds, and present its `jti` once. A replay
169
- * store that throws refuses the token as `replayed`. Never throws.
196
+ * request, such as the `PermDock-Subject` header. The first of `verifiers` that
197
+ * accepts it wins. The token must carry `sub`, `jti`, `iat` and `exp`, live at
198
+ * most `maxLifetime` seconds, and present its `jti` once. A replay store that
199
+ * throws refuses the token as `replayed`. Never throws.
170
200
  */
171
201
  export declare function verifySubjectToken(token: string, options: VerifySubjectTokenOptions): Promise<VerifySubjectTokenResult>;
172
202
  //#endregion
package/dist/jwt/index.js CHANGED
@@ -1,13 +1,13 @@
1
1
  import { r as isRecord, t as compact } from "../compact-CAf557ZB.js";
2
- import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
3
- import { o as epochSeconds, p as nowSeconds } from "../time-DkWjdL98.js";
4
- import { n as sha256, t as bytesToBase64Url } from "../sha256-D9ihqmvd.js";
2
+ import { n as freezeDeep } from "../freeze-jjan0lCv.js";
3
+ import { o as epochSeconds, p as nowSeconds } from "../time-nR1JesoH.js";
4
+ import { n as sha256, t as bytesToBase64Url } from "../sha256-C-4WXKIu.js";
5
5
  import { t as anonymousSubject } from "../subject-BGoM5o8B.js";
6
- import { i as linkPolicyViolation, r as capabilitySubject, s as redeemerAllows, t as capabilityFromClaims } from "../capability-L7NnfhiE.js";
7
- import { a as verifierOptions, i as issuerFromDiscovery, n as assertSubjectConfig, o as decodeHeader, r as fail, s as normalizeTyp, t as joseTokenVerifier } from "../verifier-DHuh-okk.js";
6
+ import { i as linkPolicyViolation, r as capabilitySubject, s as redeemerAllows, t as capabilityFromClaims } from "../capability-BqX94r07.js";
7
+ import { a as verifierOptions, i as issuerFromDiscovery, n as assertSubjectConfig, o as decodeHeader, r as fail, s as normalizeTyp, t as joseTokenVerifier } from "../verifier-DUV6pLqZ.js";
8
8
  import { t as loadJose } from "../load-jose-DZ4dnjri.js";
9
- import { i as validateCustomClaims, n as idTokenMismatch, r as mapClaimsToSubject, t as acceptMismatch } from "../map-claims-etGIS_Dv.js";
10
- import { t as memoryReplayStore } from "../replay-Du1tJjG7.js";
9
+ import { i as validateCustomClaims, n as idTokenMismatch, r as mapClaimsToSubject, t as acceptMismatch } from "../map-claims-C-nv08_n.js";
10
+ import { t as memoryReplayStore } from "../replay-BU09ad4L.js";
11
11
  //#region src/jwt/dpop.ts
12
12
  const DPOP_WINDOW_SECONDS = 60;
13
13
  const PROOF_ALGS = /* @__PURE__ */ new Set([
@@ -147,8 +147,8 @@ async function stores(options, capability, issuedAt, once) {
147
147
  }
148
148
  /**
149
149
  * Resolves a `vnd.permdock.capability+jwt` into the `link` subject it acts as.
150
- * Every failure (signature, `typ`, `iss`, `aud`, expiry, a malformed claim,
151
- * a revoked link, a replayed one-time token, a redeemer the viewer does not
150
+ * Every failure (signature, `typ`, `iss`, `aud`, expiry, a malformed claim, a
151
+ * revoked link, a replayed one-time token, a redeemer the viewer does not
152
152
  * satisfy, a `cnf` without a matching DPoP proof, a throwing store) is the
153
153
  * anonymous subject, never a throw.
154
154
  */
@@ -321,9 +321,9 @@ async function subjectFromCiOidc(token, options) {
321
321
  //#region src/jwt/id-token.ts
322
322
  /**
323
323
  * Verifies an OpenID Connect ID token for a relying party (Core section
324
- * 3.1.3.7): signature, `iss`, `aud`, `exp`, `iat`, `typ` `JWT` or absent,
325
- * `azp` and, when `nonce` is given, `nonce`. It does not check `at_hash`,
326
- * `c_hash`, `auth_time` or `acr`. Never throws.
324
+ * 3.1.3.7): signature, `iss`, `aud`, `exp`, `iat`, `typ` `JWT` or absent, `azp`
325
+ * and, when `nonce` is given, `nonce`. It does not check `at_hash`, `c_hash`,
326
+ * `auth_time` or `acr`. Never throws.
327
327
  */
328
328
  async function verifyIdToken(token, options) {
329
329
  const verifier = options.verifier ?? joseTokenVerifier(compact({
@@ -552,10 +552,10 @@ function mtlsThumbprint(claims) {
552
552
  }
553
553
  /**
554
554
  * The sender constraint to enforce. Without a configured `sender`, a token
555
- * whose `cnf` binds it to a key or a certificate is held to that binding,
556
- * never accepted as a bearer token (RFC 9449 section 7.1, RFC 8705
557
- * section 3). An explicit `sender: "none"` is the opt-out for a gateway
558
- * that verified the binding upstream.
555
+ * whose `cnf` binds it to a key or a certificate is held to that binding, never
556
+ * accepted as a bearer token (RFC 9449 section 7.1, RFC 8705 section 3). An
557
+ * explicit `sender: "none"` is the opt-out for a gateway that verified the
558
+ * binding upstream.
559
559
  */
560
560
  function senderFor(options, cnf) {
561
561
  if (options.sender !== void 0) return options.sender;
@@ -670,7 +670,10 @@ async function resolveSubject(token, options, request) {
670
670
  //#endregion
671
671
  //#region src/jwt/subject-token.ts
672
672
  const DEFAULT_MAX_LIFETIME = 300;
673
- /** Causes a verifier for another issuer answers; a different cause names the token's real fault. */
673
+ /**
674
+ * Causes a verifier for another issuer answers; a different cause names the
675
+ * token's real fault.
676
+ */
674
677
  const OTHER_ISSUER = /* @__PURE__ */ new Set(["wrong-issuer", "unknown-kid"]);
675
678
  async function firstAccepted(token, options) {
676
679
  const causes = [];
@@ -703,10 +706,10 @@ async function claimOnce(replay, key, expiresAt) {
703
706
  }
704
707
  /**
705
708
  * Verifies a subject token: an RFC 9068 `at+jwt` naming one subject for one
706
- * request, such as the `PermDock-Subject` header. The first of `verifiers`
707
- * that accepts it wins. The token must carry `sub`, `jti`, `iat` and `exp`,
708
- * live at most `maxLifetime` seconds, and present its `jti` once. A replay
709
- * store that throws refuses the token as `replayed`. Never throws.
709
+ * request, such as the `PermDock-Subject` header. The first of `verifiers` that
710
+ * accepts it wins. The token must carry `sub`, `jti`, `iat` and `exp`, live at
711
+ * most `maxLifetime` seconds, and present its `jti` once. A replay store that
712
+ * throws refuses the token as `replayed`. Never throws.
710
713
  */
711
714
  async function verifySubjectToken(token, options) {
712
715
  const verified = await firstAccepted(token, options);