permdock 0.6.0 → 0.8.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 (507) hide show
  1. package/README.md +2 -3
  2. package/dist/{2020-C9VN-x8c.js → 2020-CJbO8Bvz.js} +1 -3
  3. package/dist/a2a/index.d.ts +7 -7
  4. package/dist/a2a/index.js +9 -9
  5. package/dist/action-result-CL-QCITA.d.ts +19 -0
  6. package/dist/{adapter-context-CRhqyzCk.js → adapter-context-CIQpQxbE.js} +8 -2
  7. package/dist/{adoption-scan-DCYe60Pi.js → adoption-scan-BLs67P1l.js} +5 -5
  8. package/dist/agent/index.d.ts +3 -3
  9. package/dist/agent/index.js +1 -1
  10. package/dist/ai-sdk/index.d.ts +31 -10
  11. package/dist/ai-sdk/index.js +22 -12
  12. package/dist/{app-data-MuyzVqX8.js → app-data-UNNm07jV.js} +10 -7
  13. package/dist/{approval-header-CJACtHkv.js → approval-header-8QV6MU4H.js} +6 -3
  14. package/dist/{approval-prompt-Dg5LeAcT.js → approval-prompt-B8hQY69x.js} +5 -6
  15. package/dist/{approval-prompt-DvSSPQJX.d.ts → approval-prompt-PYagyQUj.d.ts} +13 -11
  16. package/dist/approvals/index.d.ts +5 -5
  17. package/dist/approvals/index.js +7 -7
  18. package/dist/{approvals-p1PGoVjb.js → approvals-DnIBTuXE.js} +128 -78
  19. package/dist/{approvers-CqPOLD-o.js → approvers-B4r0N_Uz.js} +8 -2
  20. package/dist/{arazzo-41WuzHou.js → arazzo-3RhGfkAK.js} +2 -2
  21. package/dist/{arazzo-CaUVBn7D.js → arazzo-B5-ulWif.js} +6 -6
  22. package/dist/{args-IIolxxKA.js → args-0FrVs5EH.js} +125 -8
  23. package/dist/astro/index.d.ts +30 -12
  24. package/dist/astro/index.js +2 -2
  25. package/dist/{audience-DabClFLQ.js → audience-BAkBDMqn.js} +8 -8
  26. package/dist/{auth-DRLEizbL.js → auth--yPyZNgr.js} +21 -10
  27. package/dist/authzen/index.d.ts +171 -25
  28. package/dist/authzen/index.js +321 -149
  29. package/dist/{automation-BNM3TtDo.d.ts → automation-DqEoWHBc.d.ts} +42 -32
  30. package/dist/{automation-DVjOckjV.js → automation-x3KEUusw.js} +22 -21
  31. package/dist/base-url-BQbddZO5.js +9 -0
  32. package/dist/better-auth/index.d.ts +2 -2
  33. package/dist/better-auth/index.js +13 -7
  34. package/dist/better-supabase/index.d.ts +392 -220
  35. package/dist/better-supabase/index.js +293 -152
  36. package/dist/{bind-DOyrv6zi.d.ts → bind-Cp2hBHzP.d.ts} +27 -12
  37. package/dist/{bind-CAvgUuKs.js → bind-D_sZSVA3.js} +22 -10
  38. package/dist/{body-CH5of8Ne.js → body-CJQwYVa8.js} +3 -3
  39. package/dist/{body-text-QcXok_SI.js → body-text-DQhcmqdY.js} +8 -4
  40. package/dist/{boundary-BM8a_P6E.js → boundary-BV3O1eud.js} +8 -2
  41. package/dist/{boundary-BmHxVH1J.d.ts → boundary-C9ck-3uK.d.ts} +13 -4
  42. package/dist/{budget-NbEtbJC_.js → budget-BELja5A9.js} +6 -3
  43. package/dist/{budget-JqcRqyhK.d.ts → budget-hYsPz_yE.d.ts} +6 -3
  44. package/dist/{build-instance-Bu_eDqYw.js → build-instance-CNWaYJyr.js} +3 -3
  45. package/dist/{canonical-json-BC8_nMTw.js → canonical-json-DwilZ1iB.js} +6 -3
  46. package/dist/{capability-N1K9IpqS.js → capability-BqX94r07.js} +31 -25
  47. package/dist/{capability-Drg-1YhL.d.ts → capability-ChuiONQU.d.ts} +41 -29
  48. package/dist/{casbin-Dyu2gnUD.js → casbin-H0rKxBx2.js} +16 -8
  49. package/dist/{casbin-Cr7RLtA3.js → casbin-cbSbhT_k.js} +2 -2
  50. package/dist/{casl-64gpT-8x.js → casl-C4OINZHI.js} +2 -2
  51. package/dist/{casl-DjEDhTCP.js → casl-CHHoCldP.js} +19 -10
  52. package/dist/catalog/index.d.ts +104 -23
  53. package/dist/catalog/index.js +117 -8
  54. package/dist/{catalog-HD2gf5mY.js → catalog-BFpz2EmT.js} +57 -26
  55. package/dist/{catalog-DZVbrF-z.js → catalog-DCspHDc8.js} +3 -3
  56. package/dist/{catalog-doc-Cdn7-0pQ.js → catalog-doc-DjMKzJp9.js} +53 -16
  57. package/dist/{catalog-fingerprint-CCP0-yQS.js → catalog-fingerprint-e6aCWosn.js} +19 -15
  58. package/dist/catalog-mRQQQhNK.js +1 -0
  59. package/dist/catalog-operations-Dadrl7Z-.js +60 -0
  60. package/dist/{create-CQWIpUG-.js → challenge-DImNcR7B.js} +157 -39
  61. package/dist/chat/index.d.ts +1 -1
  62. package/dist/chat/index.js +13 -10
  63. package/dist/chat-sdk/index.d.ts +44 -26
  64. package/dist/chat-sdk/index.js +17 -17
  65. package/dist/checks-CGkP3Z7A.js +40 -0
  66. package/dist/{claims-map-7oQ3ue4X.js → claims-map-CKkoAAYF.js} +5 -2
  67. package/dist/{claims-map-Ca-QX8C6.d.ts → claims-map-D1Pb5oRq.d.ts} +8 -5
  68. package/dist/claude-agent/index.d.ts +6 -6
  69. package/dist/claude-agent/index.js +6 -3
  70. package/dist/clerk/index.d.ts +11 -7
  71. package/dist/clerk/index.js +6 -6
  72. package/dist/cli/bin.js +4 -4
  73. package/dist/cli/index.d.ts +82 -7
  74. package/dist/cli/index.js +6 -6
  75. package/dist/{clients-C7zLFuWT.d.ts → clients-C_NOET3z.d.ts} +5 -5
  76. package/dist/{clients-DjU5ABMy.js → clients-DYr3U86j.js} +3 -3
  77. package/dist/cloud/index.d.ts +186 -38
  78. package/dist/cloud/index.js +293 -31
  79. package/dist/{cloud-ytQ3uviA.js → cloud-BFlGMaak.js} +5 -6
  80. package/dist/{codemod-5mpSpnUY.js → codemod-DLQ9Zpo4.js} +3 -4
  81. package/dist/{codemod-ua2hHy7w.js → codemod-DWSN2erG.js} +523 -201
  82. package/dist/collect-B5BL3klN.js +1 -0
  83. package/dist/{collect-mLTY4nwb.js → collect-B7ZFAJU3.js} +36 -64
  84. package/dist/{collect-Ci6akVwH.js → collect-Bzv3le0A.js} +6 -6
  85. package/dist/{compare-pfyVnBjE.js → compare-DTfyUunF.js} +2 -2
  86. package/dist/compile/index.d.ts +2 -2
  87. package/dist/compile/index.js +1 -1
  88. package/dist/{compile-1bsAezL0.d.ts → compile-BFzysW3o.d.ts} +36 -12
  89. package/dist/{compile-CMqMx_IN.js → compile-EzEMB-7v.js} +77 -33
  90. package/dist/{completion-BTFrHZhX.js → completion-saoYiRFO.js} +17 -8
  91. package/dist/config-BwPBfN0t.js +108 -0
  92. package/dist/{config-Bj2Ixq3d.js → config-DBeXXmBF.js} +2 -2
  93. package/dist/{config-report-DSpsLpCE.js → config-report-BipSWA6V.js} +9 -6
  94. package/dist/config-shape-ykV0Vm2n.js +134 -0
  95. package/dist/{connection-DjhIJSs2.js → connection-B72dg5Q2.js} +23 -22
  96. package/dist/connector-schema-CYLQNMYq.js +434 -0
  97. package/dist/{context-B_u3_bDJ.js → context-BnIzxTNE.js} +4 -3
  98. package/dist/convex/index.d.ts +13 -7
  99. package/dist/convex/index.js +9 -6
  100. package/dist/core-H-mbhpZc.js +341 -0
  101. package/dist/core-hWIARPDz.d.ts +206 -0
  102. package/dist/{create-CBMmFie-.d.ts → create-BSNrVuxh.d.ts} +87 -34
  103. package/dist/{create-B30OMUOJ.d.ts → create-BVq1lNQE.d.ts} +49 -28
  104. package/dist/{create-D_NmPOdH.d.ts → create-CM1FciYG.d.ts} +37 -29
  105. package/dist/{create-CGm28gyI.js → create-Cq4Uox0f.js} +13 -9
  106. package/dist/{create-DCF2SvoT.js → create-_noSrY1T.js} +15 -21
  107. package/dist/{credential-BcoiejpY.js → credential-CyyyvCsL.js} +42 -39
  108. package/dist/{credentials-DPyHmYz5.js → credentials-CdDxp7jN.js} +6 -6
  109. package/dist/{deciding-columns-Sq12mEA6.js → deciding-columns-NB4wcyBf.js} +13 -2
  110. package/dist/{delegation-j6-rc37o.js → delegation-CDB6_keF.js} +31 -22
  111. package/dist/delivery/index.d.ts +5 -5
  112. package/dist/delivery/index.js +6 -5
  113. package/dist/{delivery-DCAgNyCn.js → delivery-BupfvJIV.js} +81 -20
  114. package/dist/{delivery-event-xX4obB8F.js → delivery-event-JioK5YbS.js} +6 -6
  115. package/dist/denied-text-CHNlVInN.d.ts +22 -0
  116. package/dist/{describe-BybMRY7A.js → describe-Bb4hGK5d.js} +6 -5
  117. package/dist/{describe-B5qgDvEW.d.ts → describe-ByS9LgHK.d.ts} +5 -5
  118. package/dist/{device-BARQ8eYG.js → device-BwbJNmb2.js} +11 -8
  119. package/dist/{diff-CmuSD3vc.js → diff-CN8IYhC_.js} +2 -2
  120. package/dist/{diff-3jbx6Rm4.js → diff-iZWV65nC.js} +23 -14
  121. package/dist/{digest-B3kc_PgQ.d.ts → digest-8Yx2CchM.d.ts} +3 -3
  122. package/dist/{doctor-BdZw53-k.js → doctor-CHD1M9R5.js} +485 -141
  123. package/dist/{doctor-3ZqNHX_G.js → doctor-D3wo-yuz.js} +4 -4
  124. package/dist/drizzle/index.d.ts +33 -19
  125. package/dist/drizzle/index.js +17 -9
  126. package/dist/elysia/index.d.ts +17 -11
  127. package/dist/elysia/index.js +5 -5
  128. package/dist/{errors-BKy0EfhN.js → errors-B6R_lg2a.js} +13 -4
  129. package/dist/{errors-BWXBMaKK.d.ts → errors-CHwoRRpB.d.ts} +4 -1
  130. package/dist/{errors-CWTY6uih.js → errors-Vpu6rKHl.js} +14 -10
  131. package/dist/{errors-DH5QEGXh.d.ts → errors-zi_4T-rx.d.ts} +22 -6
  132. package/dist/{evaluate-CNClBvcj.js → evaluate-Dd8Ta0Ie.js} +185 -80
  133. package/dist/{evaluations-beAooV0n.js → evaluations-IBceAeKT.js} +41 -20
  134. package/dist/{evaluations-C_1vdSZc.d.ts → evaluations-z8dQFDaN.d.ts} +12 -6
  135. package/dist/eve/index.d.ts +9 -6
  136. package/dist/eve/index.js +4 -4
  137. package/dist/{event-time-CsegxXxB.js → event-time-BGy48400.js} +8 -4
  138. package/dist/{expiry-D4_YKRKD.js → expiry-6XByK0dm.js} +8 -5
  139. package/dist/express/index.d.ts +9 -6
  140. package/dist/express/index.js +9 -6
  141. package/dist/fastify/index.d.ts +16 -10
  142. package/dist/fastify/index.js +8 -5
  143. package/dist/{fetch-adapter-Dw0MTS3D.d.ts → fetch-adapter-C1DCvpqV.d.ts} +9 -6
  144. package/dist/{fetch-adapter-DD_gfmrC.js → fetch-adapter-JL43jD3E.js} +14 -11
  145. package/dist/fields-D0vUI6dq.js +498 -0
  146. package/dist/{files-C5ZI27eV.js → files-B3AA05f1.js} +21 -5
  147. package/dist/{files-D_JIzUrP.js → files-BSjrtIHw.js} +11 -4
  148. package/dist/{fixtures-B7XrLeY7.js → fixtures-A1_sp_tR.js} +15 -6
  149. package/dist/{flags-C3DktBDY.js → flags-DXjoTVbS.js} +2 -2
  150. package/dist/{freeze-CrU8nQeX.js → freeze-jjan0lCv.js} +4 -1
  151. package/dist/{from-snapshot-CTCMsFZk.js → from-snapshot-DCakWRsr.js} +26 -16
  152. package/dist/gen-B5kvbAoZ.js +58 -0
  153. package/dist/gen-DWCYcMQM.js +827 -0
  154. package/dist/generate-CRVV5V7l.js +165 -0
  155. package/dist/generate-CezbCaTI.js +275 -0
  156. package/dist/{grantee-hxrUsbpM.js → grantee-Dke-9rd1.js} +4 -4
  157. package/dist/{grantee-conditions-CcXf8hMM.js → grantee-conditions-BrYPe-w0.js} +12 -12
  158. package/dist/{grantee-match-DbENBHLB.js → grantee-match-7RZZvoT_.js} +12 -6
  159. package/dist/{graph-sql-B-dsAT6j.d.ts → graph-sql-BwFC4Qjs.d.ts} +3 -3
  160. package/dist/h3/index.d.ts +10 -7
  161. package/dist/h3/index.js +3 -3
  162. package/dist/headers-B9jQxjtW.d.ts +10 -0
  163. package/dist/{helpers-CBYVMjwh.js → helpers-DJicaG6f.js} +40 -28
  164. package/dist/hono/index.d.ts +16 -10
  165. package/dist/hono/index.js +5 -5
  166. package/dist/{hosted-BPk51-kX.d.ts → hosted-Cmtxogd0.d.ts} +44 -20
  167. package/dist/{hosted-B46-5LYE.js → hosted-D0IzESu_.js} +68 -25
  168. package/dist/{http-ujKm0JXE.js → http-DH94eh6f.js} +4 -4
  169. package/dist/{http-BBoKefeS.js → http-DKLXrFGk.js} +13 -7
  170. package/dist/{http-DXJ37RDA.js → http-DOL33cO0.js} +11 -8
  171. package/dist/{import-wyqXUyjm.js → import-CST57XLp.js} +64 -51
  172. package/dist/{import-CNV7I2Dw.js → import-_YqhhwvX.js} +6 -6
  173. package/dist/{index-B8YjkEZ4.d.ts → index-B8s204GL.d.ts} +64 -52
  174. package/dist/{index-Ch8LpNDp.d.ts → index-BT5-1VsX.d.ts} +64 -25
  175. package/dist/{index-DuWxc5dt.d.ts → index-BW_0MZOS.d.ts} +388 -149
  176. package/dist/index-BhxEUY9J.d.ts +233 -0
  177. package/dist/index-Bv5iXPqU.d.ts +210 -0
  178. package/dist/{index-C-6Letxg.d.ts → index-_9UiQIkt.d.ts} +164 -77
  179. package/dist/index.d.ts +22 -21
  180. package/dist/index.js +35 -33
  181. package/dist/{init-GG6Jh8HD.js → init-Dz_PsHdv.js} +5 -5
  182. package/dist/{init-DeMYsnYJ.js → init-cE3A8aXq.js} +10 -10
  183. package/dist/{instance-options-BsVpyGIk.d.ts → instance-options-B0KXqTrJ.d.ts} +4 -4
  184. package/dist/{instance-snapshot-BOEhcqIF.js → instance-snapshot--JWiTrvO.js} +81 -56
  185. package/dist/{instant-BluqDvyS.js → instant-DK3Iz83e.js} +2 -2
  186. package/dist/{internals-Dk8A8fX3.js → internals-B3IgHrvo.js} +6 -3
  187. package/dist/{json-schema-B-vAwlde.js → json-schema-BPGa-RjQ.js} +9 -3
  188. package/dist/{json-schema-CN_iLFH2.d.ts → json-schema-BfXgnRNT.d.ts} +4 -4
  189. package/dist/jwt/index.d.ts +125 -17
  190. package/dist/jwt/index.js +157 -16
  191. package/dist/{kernel-D0NVb1cK.js → kernel-C-fYydV2.js} +151 -16
  192. package/dist/kysely/index.d.ts +49 -33
  193. package/dist/kysely/index.js +9 -7
  194. package/dist/{live-options-BaAFCIiu.js → live-options-BBIT68le.js} +2 -2
  195. package/dist/{load-DFS_ry0W.js → load-DjSU5KXO.js} +6 -6
  196. package/dist/load-Dm0pSYH3.js +1 -0
  197. package/dist/{login-Dfe5RlYk.js → login-D-8tMqzo.js} +4 -4
  198. package/dist/{login-imhuwvn3.js → login-DplQ0s84.js} +18 -15
  199. package/dist/{manifest-dvL2XEe1.js → manifest-Cgiq5oqc.js} +67 -37
  200. package/dist/{manifest-mx5ghSFM.d.ts → manifest-CzzWtnAb.d.ts} +144 -28
  201. package/dist/{manifest-schema-C0kK_8V0.js → manifest-schema-2r37XRhD.js} +80 -9
  202. package/dist/{manifest-C8IzW3Do.js → manifest-wg8WkkpD.js} +11 -7
  203. package/dist/{map-claims-D3oRmTk0.js → map-claims-BNWCJtmP.js} +27 -18
  204. package/dist/{map-error-Dr70oA_3.js → map-error-pasIGqMT.js} +7 -7
  205. package/dist/{markers-C6joDI3o.js → markers-BeHZ4x9Q.js} +20 -5
  206. package/dist/mcp/index.d.ts +154 -47
  207. package/dist/mcp/index.js +200 -41
  208. package/dist/{migrate-CIq4-E9F.js → migrate-B7oP_sQU.js} +102 -31
  209. package/dist/module-values-BJTBdo6y.js +107 -0
  210. package/dist/nest/index.d.ts +23 -13
  211. package/dist/nest/index.js +18 -11
  212. package/dist/next/client.d.ts +5 -2
  213. package/dist/next/client.js +1 -1
  214. package/dist/next/index.d.ts +72 -26
  215. package/dist/next/index.js +110 -6
  216. package/dist/next/plugin.d.ts +1 -1
  217. package/dist/next/plugin.js +4 -3
  218. package/dist/node/index.d.ts +5 -5
  219. package/dist/node/index.js +3 -3
  220. package/dist/{ocsf-BFp-PZZA.js → ocsf-TcjRBgIs.js} +15 -5
  221. package/dist/openai/index.d.ts +13 -7
  222. package/dist/openai/index.js +3 -3
  223. package/dist/openapi/index.d.ts +61 -30
  224. package/dist/openapi/index.js +2 -2
  225. package/dist/{openapi-B7HZ0f-r.js → openapi-BOsx0xn9.js} +34 -24
  226. package/dist/{openapi-C4dDTVEd.js → openapi-CBZUhA3l.js} +4 -5
  227. package/dist/{openapi-DD1SV-5-.js → openapi-VeHHU2l9.js} +23 -14
  228. package/dist/{operation-findings-DgATDpvh.js → operation-findings-CXtFzlKJ.js} +3 -3
  229. package/dist/{operations-X0VM7F3m.d.ts → operations-Ci_rT6Uo.d.ts} +10 -7
  230. package/dist/orpc/index.d.ts +68 -14
  231. package/dist/orpc/index.js +62 -13
  232. package/dist/otel/index.d.ts +7 -4
  233. package/dist/otel/index.js +8 -5
  234. package/dist/output-files-BHOIlrfD.js +1 -0
  235. package/dist/{output-files-DhRBBE4n.js → output-files-BIQ_9pIs.js} +29 -17
  236. package/dist/{output-1im__-08.js → output-tkju6U7R.js} +15 -7
  237. package/dist/ownership-B4L59T9u.js +1054 -0
  238. package/dist/parse-1_ZheTW5.js +151 -0
  239. package/dist/parse-local-manifest-BQhTlLQS.d.ts +10 -0
  240. package/dist/parse-local-manifest-DEiCF4ah.js +69 -0
  241. package/dist/{parse-request-D_tUXG6M.js → parse-request-CwCZpyjV.js} +7 -8
  242. package/dist/{paths-DXSHAMIa.js → paths-CUvURzHp.js} +4 -1
  243. package/dist/pdp/index.d.ts +9 -6
  244. package/dist/pdp/index.js +23 -12
  245. package/dist/{peer-CRvC7Hg1.js → peer-C9LvBCcb.js} +1 -1
  246. package/dist/peer-Q0fuZ6hx.js +982 -0
  247. package/dist/{permdock-SV8ZINYT.d.ts → permdock-B6Sf4T_S.d.ts} +270 -117
  248. package/dist/{permdock-BrAscV28.js → permdock-L-_I_3zP.js} +226 -74
  249. package/dist/{permission-registry-Br4jSNVi.js → permission-registry-B8tYxPIt.js} +24 -11
  250. package/dist/{vocabulary-CN8H_9UF.d.ts → permission-types-CAY-GU7e.d.ts} +130 -104
  251. package/dist/{permissions-u_KHg-sN.d.ts → permissions-Bx6UI8n1.d.ts} +6 -2
  252. package/dist/{permissions-B-wCP5ZC.js → permissions-CVXmRILq.js} +3 -3
  253. package/dist/{permissions-BPxlwVhN.js → permissions-mDcTWoBs.js} +8 -5
  254. package/dist/pg-DQTqRrou.js +60 -0
  255. package/dist/{pins-8ILTftC9.js → pins-nqarl3oE.js} +4 -1
  256. package/dist/pkce-CnmmYqUZ.js +21 -0
  257. package/dist/{policy-77FSAq_V.d.ts → policy-Ba4bDhaj.d.ts} +5 -5
  258. package/dist/{policy-DbM5YYtV.js → policy-CLQ8__GF.js} +49 -20
  259. package/dist/{policy-from-catalog-C2gMa2Dj.js → policy-from-catalog-CJgOm6aq.js} +28 -25
  260. package/dist/{policy-module-CTlwMvLI.js → policy-module-xym9fnSq.js} +12 -6
  261. package/dist/{policy-types-n0uRTsW8.d.ts → policy-types-CCiDRZBH.d.ts} +802 -334
  262. package/dist/postgres-store-DcyrPS-r.js +1028 -0
  263. package/dist/{postgrest-DAjUkF9w.js → postgrest-D4nuPXIQ.js} +88 -36
  264. package/dist/{postgrest-CEgRbefE.d.ts → postgrest-DicQyqm-.d.ts} +60 -30
  265. package/dist/powersync-DHNQX06W.js +1117 -0
  266. package/dist/{powersync-DISt6SUe.js → powersync-DXqGuq9A.js} +3 -3
  267. package/dist/powersync-Djf-zCpB.js +1 -0
  268. package/dist/preset/index.d.ts +38 -28
  269. package/dist/preset/index.js +1 -1
  270. package/dist/{preset-DZdU0tne.js → preset-BjLzeFpp.js} +58 -34
  271. package/dist/{principal-source-pHneukrx.js → principal-source-C6N60GtM.js} +10 -10
  272. package/dist/prisma/index.d.ts +69 -41
  273. package/dist/prisma/index.js +21 -17
  274. package/dist/{problem-CTviyH5L.js → problem-BVLHFK33.js} +41 -21
  275. package/dist/{problem-details-cn5X30gZ.js → problem-details-CLDgX1KV.js} +13 -4
  276. package/dist/{problem-types-CJ2325SZ.js → problem-types-DSsRfONQ.js} +4 -1
  277. package/dist/prompt-BYc6drYW.js +938 -0
  278. package/dist/protected-action-BE7N_Luo.d.ts +58 -0
  279. package/dist/protected-action-DUYqb-Ma.js +80 -0
  280. package/dist/{protected-BlF0F6wL.js → protected-action-QEA8arRB.js} +48 -14
  281. package/dist/{provider-B1al-AZz.js → provider-C55OGXJ7.js} +5 -4
  282. package/dist/{provider-DILL9oPK.d.ts → provider-DXfq5c2d.d.ts} +1 -1
  283. package/dist/{provider-store-DM6DNcta.js → provider-store-CaTv00tr.js} +13 -9
  284. package/dist/pull-B65ndFNZ.js +1 -0
  285. package/dist/{pull-jEwbf80J.js → pull-CwpGaQSi.js} +12 -11
  286. package/dist/{push-BD4f15co.js → push-DgssgzkK.js} +62 -16
  287. package/dist/{pushed-policy-DCW91KQU.d.ts → pushed-policy-D1Eoi6NM.d.ts} +12 -6
  288. package/dist/{pushed-policy-CqtxkV4G.js → pushed-policy-ITwYKvvH.js} +10 -7
  289. package/dist/react/index.d.ts +9 -8
  290. package/dist/react/index.js +7 -6
  291. package/dist/react/provider-client.d.ts +1 -1
  292. package/dist/react/provider-client.js +1 -1
  293. package/dist/react-native/index.d.ts +104 -51
  294. package/dist/react-native/index.js +394 -67
  295. package/dist/{refs-K6eWUJ0H.js → refs-C8BKxc_e.js} +17 -3
  296. package/dist/{relation-walk-3OyDBF0S.js → relation-walk-DK_gkgL7.js} +12 -9
  297. package/dist/{relations-BnCWnJGI.js → relations-BxvRvDHK.js} +3 -3
  298. package/dist/{replay-Du1tJjG7.js → replay-BU09ad4L.js} +1 -1
  299. package/dist/{replay-Bkm-Ne4l.d.ts → replay-DNftIb_R.d.ts} +1 -1
  300. package/dist/{request-context-C81Pip9n.js → request-context-C25ilqiJ.js} +8 -8
  301. package/dist/{request-schema-CMreVuFM.js → request-schema-DhX7UbfQ.js} +4 -1
  302. package/dist/resend/index.d.ts +34 -28
  303. package/dist/resend/index.js +29 -29
  304. package/dist/resolve-names-CF7xXLSG.js +201 -0
  305. package/dist/{resource-relations-D_jw0BFx.js → resource-relations-8-pCScBO.js} +18 -9
  306. package/dist/{retire-CALjIQ7e.js → retire-B2xffQgY.js} +15 -6
  307. package/dist/{revocations-R07lFBnX.d.ts → revocations-BaUXHM1N.d.ts} +6 -3
  308. package/dist/{rls-DTvYd-lI.js → rls-CNEH2_BG.js} +743 -624
  309. package/dist/{rls-BAqP4q66.js → rls-Ca8Jz9b5.js} +41 -10
  310. package/dist/{role-builder-uWQZ4v84.js → role-builder-BK2-T6oD.js} +41 -20
  311. package/dist/rolldown-runtime-C3I60J0A.js +4 -0
  312. package/dist/{row-conditions-h2HythXQ.js → row-conditions-BAGHOmVq.js} +4 -3
  313. package/dist/{rpc-VSl5ylaQ.js → rpc-fNqAIqQk.js} +8 -5
  314. package/dist/{run-CUKuz0A8.js → run-Bz26OTfO.js} +26 -23
  315. package/dist/run-D-JE8QWb.js +1 -0
  316. package/dist/{run-ticket-DocwaTKn.d.ts → run-ticket-DbWI9f99.d.ts} +33 -13
  317. package/dist/{run-ticket-sxFI6LAk.js → run-ticket-Dv7aF7Dk.js} +29 -8
  318. package/dist/{runtime-D3VTAiCA.js → runtime-BGnrOkVH.js} +5 -2
  319. package/dist/{saas-BCXRuXca.js → saas-iWnUdwCt.js} +42 -29
  320. package/dist/{scan-qvOe0hS3.js → scan-DCj1KQfn.js} +1 -1
  321. package/dist/{schema-B4v0Qrac.js → schema-BOJjqlWL.js} +3 -2
  322. package/dist/{schema-yLuBWWsh.js → schema-Dst9I9Gs.js} +9 -5
  323. package/dist/scim/index.d.ts +3 -2
  324. package/dist/scim/index.js +3 -1
  325. package/dist/scim-D8YupzX1.js +44 -0
  326. package/dist/{scim-ClHtpyV3.js → scim-jJBJ7g1Z.js} +35 -551
  327. package/dist/{scopes-CUPSjo9q.js → scopes-0Up_UA2t.js} +42 -24
  328. package/dist/server/index.d.ts +12 -12
  329. package/dist/server/index.js +13 -13
  330. package/dist/{server-C3WXAHZj.js → server-3cVlTLde.js} +31 -31
  331. package/dist/{server-types-CKQiCnON.d.ts → server-types-CIlpSA2G.d.ts} +81 -46
  332. package/dist/{sha256-D9ihqmvd.js → sha256-C-4WXKIu.js} +4 -3
  333. package/dist/{shared-BAK8t4Uo.js → shared-Afctg7B0.js} +100 -61
  334. package/dist/{shared-DvvFzYXe.js → shared-l0oGGetg.js} +9 -6
  335. package/dist/{signals-D3NcTKUS.js → signals-B1vHR3fN.js} +2 -2
  336. package/dist/{sink-BEZSlMS_.js → sink-D9_vh372.js} +32 -21
  337. package/dist/{sink-4-eQIRWf.d.ts → sink-Dvi7YZG_.d.ts} +44 -20
  338. package/dist/{skills-B6lVdD_W.js → skills-Bjj7BNEQ.js} +16 -12
  339. package/dist/{skills-CTYwkl44.js → skills-OuoMR49L.js} +3 -3
  340. package/dist/{snapshot-B7DkYg6g.js → snapshot-CXlzi69u.js} +21 -18
  341. package/dist/{snapshot-cache-PXI-vGpY.d.ts → snapshot-cache-BAXZ0KOp.d.ts} +21 -12
  342. package/dist/{snapshot-cache-DZHQ0KF6.js → snapshot-cache-Bx_4xC_6.js} +14 -11
  343. package/dist/solid/index.d.ts +55 -15
  344. package/dist/solid/index.js +46 -12
  345. package/dist/solid-start/index.d.ts +30 -12
  346. package/dist/solid-start/index.js +3 -3
  347. package/dist/sources-B1Os_YUu.d.ts +312 -0
  348. package/dist/{sources-vs5dGOsS.js → sources-CMAM-2A3.js} +156 -51
  349. package/dist/sources-qoIJQrJv.js +11 -0
  350. package/dist/{sql-B5T1IL83.js → sql-0WjxIp9g.js} +32 -7
  351. package/dist/sql-B80DFdpG.d.ts +10 -0
  352. package/dist/{src-Cu2m75uo.js → src-DZ0l9UAg.js} +305 -123
  353. package/dist/ssf/index.d.ts +4 -4
  354. package/dist/ssf/index.js +665 -224
  355. package/dist/{standard-webhooks-rbD7LS6h.d.ts → standard-webhooks-C-qX4mJW.d.ts} +7 -7
  356. package/dist/{standard-webhooks-DgFFD-Ga.js → standard-webhooks-D67a3nzk.js} +5 -5
  357. package/dist/{store-BDutJkDL.js → store-RNFvaJJv.js} +43 -29
  358. package/dist/{store-options-u0ycEe8s.js → store-options-Dil3lraY.js} +105 -15
  359. package/dist/stores-C0Kta5Ft.d.ts +59 -0
  360. package/dist/{stores-CGhM8BN_.js → stores-DxZWDXCs.js} +42 -5
  361. package/dist/{stream-CvdUS9V1.js → stream-CDvF0sJm.js} +5 -5
  362. package/dist/{stream-CeCMJmBB.d.ts → stream-ltuLdtTG.d.ts} +4 -3
  363. package/dist/{style-DiKWnAvn.js → style-DblOtSga.js} +1 -1
  364. package/dist/{style-Uao76wO7.js → style-Ds11Hmk4.js} +3 -1
  365. package/dist/{subject-settings-CkEwrw3W.js → subject-settings-8sH5HlII.js} +8 -4
  366. package/dist/{row-check-Dt35czLy.d.ts → subject-settings-vNW8qmUH.d.ts} +30 -18
  367. package/dist/supabase/index.d.ts +48 -37
  368. package/dist/supabase/index.js +6 -6
  369. package/dist/supabase/middleware.d.ts +19 -13
  370. package/dist/supabase/middleware.js +7 -7
  371. package/dist/{supabase-x5JtR2tc.js → supabase-BL1qJzzY.js} +82 -36
  372. package/dist/{supabase-By_frk3U.js → supabase-D39cuGPt.js} +3 -3
  373. package/dist/{supabase-hook-BMoEhZir.js → supabase-hook-B-yXnzUl.js} +1206 -286
  374. package/dist/supabase-hook-H-MtE9Wd.js +1 -0
  375. package/dist/supautils-BU-pAEpf.js +808 -0
  376. package/dist/{support-session-C6xJQYut.js → support-session-BsmPCbz8.js} +22 -22
  377. package/dist/svelte/PermissionBoundary.svelte +2 -6
  378. package/dist/svelte/Protected.svelte +2 -8
  379. package/dist/svelte/index.d.ts +9 -8
  380. package/dist/svelte/index.js +10 -9
  381. package/dist/svelte/runtime.d.ts +4 -4
  382. package/dist/svelte/runtime.js +4 -4
  383. package/dist/svelte/source.d.ts +9 -8
  384. package/dist/svelte/source.js +6 -5
  385. package/dist/sveltekit/index.d.ts +30 -12
  386. package/dist/sveltekit/index.js +2 -2
  387. package/dist/{ownership-DqaJNJPn.js → tables-DeMNEy6V.js} +1025 -1085
  388. package/dist/tanstack-start/index.d.ts +22 -10
  389. package/dist/tanstack-start/index.js +2 -2
  390. package/dist/{target-Bw37TFNA.js → target-qdEAnnhU.js} +6 -6
  391. package/dist/{tenancy-DN2QAx9z.js → tenancy-5d1zVBvK.js} +36 -21
  392. package/dist/terminal/index.d.ts +23 -14
  393. package/dist/terminal/index.js +17 -20
  394. package/dist/testing/core.d.ts +2 -0
  395. package/dist/testing/core.js +1 -0
  396. package/dist/testing/fixtures/index.d.ts +15 -0
  397. package/dist/testing/fixtures/index.js +831 -0
  398. package/dist/testing/index.d.ts +235 -285
  399. package/dist/testing/index.js +502 -927
  400. package/dist/testing/saas/index.d.ts +43 -27
  401. package/dist/testing/saas/index.js +2 -2
  402. package/dist/testing/saas/permissions.d.ts +1 -1
  403. package/dist/testing/saas/permissions.js +1 -1
  404. package/dist/text-diff-BtfSmdUo.js +444 -0
  405. package/dist/{thenable-yD7SabqG.js → thenable-BNSM1U2R.js} +12 -3
  406. package/dist/{time-DkWjdL98.js → time-nR1JesoH.js} +32 -8
  407. package/dist/{token-BLZcjQgt.js → token-DC9EQiet.js} +15 -13
  408. package/dist/{tool-refusal-CMLN5xhn.js → tool-refusal-Qpjs_W6M.js} +5 -2
  409. package/dist/trpc/index.d.ts +11 -8
  410. package/dist/trpc/index.js +15 -9
  411. package/dist/type-helpers-BIPIDa6a.d.ts +50 -0
  412. package/dist/{types-8RnwUAvE.d.ts → types-AMJ5qoU_.d.ts} +49 -30
  413. package/dist/{types-C_IiEs64.d.ts → types-B2mlGuhW.d.ts} +14 -11
  414. package/dist/{types-_WhUP7ud.d.ts → types-B4uqKDnp.d.ts} +25 -12
  415. package/dist/{types-CX7AvRqP.d.ts → types-BJk0BKRX.d.ts} +24 -14
  416. package/dist/types-B_d_g7T3.d.ts +262 -0
  417. package/dist/{types-BdtSDbBO.d.ts → types-B_tiYvk8.d.ts} +59 -32
  418. package/dist/{types-DqzsnlSA.js → types-CcUXciSj.js} +17 -5
  419. package/dist/{types-Dfv0aTER.d.ts → types-DC1Loeh3.d.ts} +449 -168
  420. package/dist/{types-lUlG3TVd.d.ts → types-DHKPcqzr.d.ts} +2 -2
  421. package/dist/{types-C791HFu9.d.ts → types-DjuMBNF9.d.ts} +68 -32
  422. package/dist/{types-C863OQiR.d.ts → types-HzqOtvsJ.d.ts} +23 -12
  423. package/dist/{types-Druu9wLM.d.ts → types-ZzRGoViD.d.ts} +77 -24
  424. package/dist/{types-BzzaHxt3.d.ts → types-ah9NlU6j.d.ts} +137 -48
  425. package/dist/{types-CVZSNocA.d.ts → types-djVzLlIV.d.ts} +31 -14
  426. package/dist/{types-BtHtcKMr.d.ts → types-yUuPR5Hy.d.ts} +47 -24
  427. package/dist/unplugin/index.d.ts +1 -1
  428. package/dist/unplugin/index.js +2 -2
  429. package/dist/usage-CYeXek0p.js +1 -0
  430. package/dist/{usage-SveTRTyr.js → usage-CxEzS4ey.js} +50 -26
  431. package/dist/{usage-CRVl9V3t.js → usage-ab0PdusX.js} +2 -2
  432. package/dist/{validation-error-ZfUHbKvf.js → validation-error-CYg2kJEw.js} +4 -1
  433. package/dist/{validation-error-DHUrAkku.d.ts → validation-error-YGg2mXyH.d.ts} +5 -2
  434. package/dist/{validity-CZ7-y0Cj.js → validity-Buc7w8E9.js} +13 -10
  435. package/dist/{verifier-DHuh-okk.js → verifier-DUV6pLqZ.js} +10 -4
  436. package/dist/{verify-BaAKx7t6.js → verify-DZeqoWu5.js} +417 -489
  437. package/dist/version-DMQ0dnN5.js +48 -0
  438. package/dist/version-DizhmD72.js +1 -0
  439. package/dist/{views-DTIIO-oQ.js → views-CD8wuL4Z.js} +19 -6
  440. package/dist/vocabulary-DEJ5j4mR.d.ts +70 -0
  441. package/dist/vue/index.d.ts +71 -21
  442. package/dist/vue/index.js +50 -13
  443. package/dist/{waiter-B986w1oK.d.ts → waiter-Bu9zAlE0.d.ts} +13 -10
  444. package/dist/{waiter-BGUtGYoU.js → waiter-aBLM63_f.js} +1 -1
  445. package/dist/{watch-vea54PRw.js → watch-Cx_WciLE.js} +8 -8
  446. package/dist/watch-DB42U1ib.js +1 -0
  447. package/dist/webmcp/index.d.ts +11 -11
  448. package/dist/webmcp/index.js +8 -5
  449. package/dist/{where-scope-C9vfEphl.js → where-scope-DlCdCM_8.js} +56 -30
  450. package/dist/{who-can-DWBAcaCQ.js → who-can-rI7dCR9Q.js} +23 -20
  451. package/dist/workflow/index.d.ts +3 -3
  452. package/dist/workflow/index.js +13 -13
  453. package/dist/workflow-sdk/index.d.ts +19 -13
  454. package/dist/workflow-sdk/index.js +6 -6
  455. package/dist/{wrap-gX61EtpB.js → wrap-B2wziJI_.js} +11 -5
  456. package/dist/{wrap-C5jC6sKI.d.ts → wrap-DlJE3gS_.d.ts} +8 -5
  457. package/package.json +25 -14
  458. package/schemas/catalog-v1.json +3 -0
  459. package/schemas/cli-result-v1.json +1 -0
  460. package/schemas/cloud-api-v1.json +152 -7
  461. package/schemas/connector-v1.json +8 -0
  462. package/schemas/supabase-claims-v1.json +5 -0
  463. package/schemas/supabase-manifest-v1.json +308 -75
  464. package/skills/permdock/SKILL.md +1 -0
  465. package/skills/permdock-agents/references/runtimes.md +3 -1
  466. package/skills/permdock-approvals/references/stores-and-resume.md +2 -1
  467. package/skills/permdock-credentials/references/tokens-keys-links.md +8 -6
  468. package/skills/permdock-data/references/queries-and-rls.md +6 -2
  469. package/skills/permdock-tenancy/SKILL.md +1 -1
  470. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -1
  471. package/skills/permdock-wire/references/adapters.md +28 -22
  472. package/skills/permdock-wire/references/policy-options.md +1 -0
  473. package/dist/catalog-BoWglDPI.js +0 -1
  474. package/dist/collect-D7eQDffE.js +0 -1
  475. package/dist/config-bs_kZeYq.js +0 -162
  476. package/dist/denied-text-CiFQNuMV.d.ts +0 -19
  477. package/dist/fields-OYG_JR78.js +0 -203
  478. package/dist/generate-CNU1pIOo.js +0 -171
  479. package/dist/headers-BIjfMaoC.js +0 -8
  480. package/dist/headers-CIbDTUTK.d.ts +0 -7
  481. package/dist/index-Cp_ilKi1.d.ts +0 -91
  482. package/dist/index-CueFnxQc.d.ts +0 -110
  483. package/dist/load-BxEtwlBS.js +0 -1
  484. package/dist/output-files-B3IZJksC.js +0 -1
  485. package/dist/package-root-Dk_ETdkp.js +0 -31
  486. package/dist/parse-Cxq0WxrA.js +0 -53
  487. package/dist/parse-local-manifest-5ODwqu8b.d.ts +0 -10
  488. package/dist/parse-local-manifest-CVSs6J9I.js +0 -34
  489. package/dist/peer-C8swJ2GH.js +0 -50
  490. package/dist/policies-DP2nqRoF.js +0 -295
  491. package/dist/powersync-BkWWCS1K.js +0 -538
  492. package/dist/powersync-MMJ2mI2q.js +0 -1
  493. package/dist/problem-details-B45V5d2b.d.ts +0 -7
  494. package/dist/prompt-DfZLJLIn.js +0 -32
  495. package/dist/protected-RFGpakN9.d.ts +0 -38
  496. package/dist/pull-CvpINcMK.js +0 -1
  497. package/dist/run-DDwUaJDU.js +0 -1
  498. package/dist/sources-Xc4zkszI.d.ts +0 -190
  499. package/dist/stores-BUGNbJTt.d.ts +0 -30
  500. package/dist/supabase-hook-CCw5m35C.js +0 -1
  501. package/dist/supautils-B6HYL9eL.js +0 -91
  502. package/dist/text-diff-BQcUapOb.js +0 -15
  503. package/dist/types-B3_ooZgZ.d.ts +0 -172
  504. package/dist/usage-CZpSQP6L.js +0 -1
  505. package/dist/version-CEbQ5UeM.js +0 -18
  506. package/dist/version-DXkYUISx.js +0 -1
  507. package/dist/watch--ovlPOc0.js +0 -1
@@ -1,10 +1,13 @@
1
- import { Y as JwtClaims, ar as Subject, dt as TokenVerifier, lt as TokenFailureCause, qt as AuthEvent, rr as Principal, ut as TokenSigner } from "../policy-types-n0uRTsW8.js";
2
- import { c as LinkPolicy, o as CapabilityPrincipal, t as Capability } from "../capability-Drg-1YhL.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-C791HFu9.js";
4
- import { t as memoryReplayStore } from "../replay-Bkm-Ne4l.js";
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-CCiDRZBH.js";
2
+ import { c as LinkPolicy, o as CapabilityPrincipal, t as Capability } from "../capability-ChuiONQU.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-DjuMBNF9.js";
4
+ import { t as memoryReplayStore } from "../replay-DNftIb_R.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,11 +92,62 @@ 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
103
+ //#region src/jwt/id-token.d.ts
104
+ /**
105
+ * `TokenFailureCause` plus `nonce-mismatch`; a `TokenVerifier` never returns
106
+ * it.
107
+ */
108
+ type IdTokenFailureCause = TokenFailureCause | "nonce-mismatch";
109
+ type VerifyIdTokenOptions = {
110
+ /** The OpenID Provider's issuer; `iss` must equal it. */
111
+ readonly issuer: string;
112
+ /**
113
+ * The relying party's `client_id`; `aud` must contain it and `azp`, when
114
+ * present, must equal it.
115
+ */
116
+ readonly clientId: string;
117
+ /** The `nonce` sent in the authentication request; the token's must equal it. */
118
+ readonly nonce?: string;
119
+ readonly clockTolerance?: number;
120
+ } & ({
121
+ /** A verifier the caller keeps, so its JWKS cache outlives one call. */
122
+ readonly verifier: TokenVerifier;
123
+ readonly jwks?: never;
124
+ readonly algorithms?: never;
125
+ } | {
126
+ readonly jwks: JsonWebKeySet;
127
+ readonly algorithms?: readonly JwtAlgorithm[];
128
+ readonly verifier?: never;
129
+ });
130
+ type IdTokenClaims = JwtClaims & {
131
+ readonly iss: string;
132
+ readonly sub: string;
133
+ readonly iat: number;
134
+ };
135
+ type VerifyIdTokenResult = {
136
+ readonly ok: true;
137
+ readonly claims: IdTokenClaims;
138
+ readonly header: VerifiedToken["header"];
139
+ } | {
140
+ readonly ok: false;
141
+ readonly cause: IdTokenFailureCause;
142
+ };
143
+ /**
144
+ * Verifies an OpenID Connect ID token for a relying party (Core section
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.
148
+ */
149
+ export declare function verifyIdToken(token: string, options: VerifyIdTokenOptions): Promise<VerifyIdTokenResult>;
150
+ //#endregion
85
151
  //#region src/jwt/introspection.d.ts
86
152
  export declare function subjectFromIntrospection(response: unknown, options?: JwtSubjectOptions): Subject<IntrospectionPrincipal>;
87
153
  //#endregion
@@ -92,7 +158,49 @@ export declare function joseTokenSigner(options: JoseTokenSignerOptions): TokenS
92
158
  export declare function subjectFromJwt(token: string | undefined | null, options: JwtSubjectOptions, request?: Request): Promise<Subject<JwtPrincipal>>;
93
159
  export declare function jwtSubjectResolver(options: JwtSubjectOptions): (token: string | undefined | null, request?: Request) => Promise<MappedSubject>;
94
160
  //#endregion
161
+ //#region src/jwt/subject-token.d.ts
162
+ /**
163
+ * `TokenFailureCause` plus the two checks `verifySubjectToken` adds; a
164
+ * `TokenVerifier` never returns them.
165
+ */
166
+ type SubjectTokenFailureCause = TokenFailureCause | "replayed" | "lifetime-exceeded";
167
+ type VerifySubjectTokenOptions = {
168
+ /** Tried in order; the first that accepts the token wins. */
169
+ readonly verifiers: readonly TokenVerifier[];
170
+ readonly audience: string | readonly string[];
171
+ /**
172
+ * Records each `jti` once; `claim` when the store has it, else `seen` and
173
+ * `remember`.
174
+ */
175
+ readonly replay: ReplayStore;
176
+ /** The largest `exp - iat`, in seconds; default 300. */
177
+ readonly maxLifetime?: number;
178
+ readonly clockTolerance?: number;
179
+ };
180
+ type SubjectTokenClaims = JwtClaims & {
181
+ readonly sub: string;
182
+ readonly jti: string;
183
+ readonly iat: number;
184
+ readonly exp: number;
185
+ };
186
+ type VerifySubjectTokenResult = {
187
+ readonly ok: true;
188
+ readonly claims: SubjectTokenClaims;
189
+ readonly header: VerifiedToken["header"];
190
+ } | {
191
+ readonly ok: false;
192
+ readonly cause: SubjectTokenFailureCause;
193
+ };
194
+ /**
195
+ * Verifies a subject token: an RFC 9068 `at+jwt` naming one subject for one
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.
200
+ */
201
+ export declare function verifySubjectToken(token: string, options: VerifySubjectTokenOptions): Promise<VerifySubjectTokenResult>;
202
+ //#endregion
95
203
  //#region src/jwt/verifier.d.ts
96
204
  export declare function joseTokenVerifier(options: JoseTokenVerifierOptions): TokenVerifier;
97
205
  //#endregion
98
- export { type CapabilityFailureCause, type CapabilitySubjectOptions, type CiOidcPrincipal, type CiOidcProvider, type CiOidcSubjectOptions, type DiscoveryInput, type DpopProofOptions, type DpopProofResult, type IntrospectionPrincipal, type JoseTokenSignerOptions, type JoseTokenVerifierOptions, type JsonWebKeySet, type JwtAlgorithm, type JwtJwks, type JwtPrincipal, type JwtSubjectOptions, type ReplayStore, memoryReplayStore };
206
+ export { type CapabilityFailureCause, type CapabilitySubjectOptions, type CiOidcPrincipal, type CiOidcProvider, type CiOidcSubjectOptions, type DiscoveryInput, type DpopProofOptions, type DpopProofResult, type IdTokenClaims, type IdTokenFailureCause, type IntrospectionPrincipal, type JoseTokenSignerOptions, type JoseTokenVerifierOptions, type JsonWebKeySet, type JwtAlgorithm, type JwtJwks, type JwtPrincipal, type JwtSubjectOptions, type ReplayStore, type SubjectTokenClaims, type SubjectTokenFailureCause, type VerifyIdTokenOptions, type VerifyIdTokenResult, type VerifySubjectTokenOptions, type VerifySubjectTokenResult, memoryReplayStore };
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-N1K9IpqS.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 { n as mapClaimsToSubject, r as validateCustomClaims, t as acceptMismatch } from "../map-claims-D3oRmTk0.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-BNWCJtmP.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([
@@ -124,7 +124,7 @@ function emit(options, reason, cause, token) {
124
124
  requestId: options.requestId
125
125
  }));
126
126
  }
127
- async function claimOnce(replay, key, expiresAt) {
127
+ async function claimOnce$1(replay, key, expiresAt) {
128
128
  if (replay.claim !== void 0) return replay.claim(key, expiresAt);
129
129
  if (await replay.seen(key)) return false;
130
130
  await replay.remember(key, expiresAt);
@@ -136,7 +136,7 @@ async function stores(options, capability, issuedAt, once) {
136
136
  if (policy !== void 0 && linkPolicyViolation(capability, policy, issuedAt) !== void 0) return "link-policy";
137
137
  if (options.revoked !== void 0 && await options.revoked(capability.id)) return "capability-revoked";
138
138
  const replay = options.replay;
139
- if (once !== void 0 && (replay === void 0 || !await claimOnce(replay, once.key, once.expiresAt))) return "capability-replayed";
139
+ if (once !== void 0 && (replay === void 0 || !await claimOnce$1(replay, once.key, once.expiresAt))) return "capability-replayed";
140
140
  return { ok: true };
141
141
  } catch {
142
142
  return {
@@ -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
  */
@@ -318,6 +318,66 @@ async function subjectFromCiOidc(token, options) {
318
318
  });
319
319
  }
320
320
  //#endregion
321
+ //#region src/jwt/id-token.ts
322
+ /**
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, `azp`
325
+ * and, when `nonce` is given, `nonce`. It does not check `at_hash`, `c_hash`,
326
+ * `auth_time` or `acr`. Never throws.
327
+ */
328
+ async function verifyIdToken(token, options) {
329
+ const verifier = options.verifier ?? joseTokenVerifier(compact({
330
+ jwks: options.jwks,
331
+ issuer: options.issuer,
332
+ algorithms: options.algorithms
333
+ }));
334
+ let verified;
335
+ try {
336
+ verified = await verifier.verify(token, compact({
337
+ issuer: options.issuer,
338
+ audience: options.clientId,
339
+ clockTolerance: options.clockTolerance
340
+ }));
341
+ } catch {
342
+ return {
343
+ ok: false,
344
+ cause: "invalid-signature"
345
+ };
346
+ }
347
+ if (!verified.ok) return {
348
+ ok: false,
349
+ cause: verified.cause
350
+ };
351
+ const { claims, header } = verified;
352
+ if (idTokenMismatch(claims, header.typ, options.clientId)) return {
353
+ ok: false,
354
+ cause: "wrong-token-type"
355
+ };
356
+ const { iss, sub, iat } = claims;
357
+ if (iss !== options.issuer) return {
358
+ ok: false,
359
+ cause: "wrong-issuer"
360
+ };
361
+ if (typeof sub !== "string" || sub === "" || typeof iat !== "number") return {
362
+ ok: false,
363
+ cause: "malformed"
364
+ };
365
+ if (options.nonce !== void 0 && claims["nonce"] !== options.nonce) return {
366
+ ok: false,
367
+ cause: "nonce-mismatch"
368
+ };
369
+ return {
370
+ ok: true,
371
+ claims: {
372
+ ...claims,
373
+ iss,
374
+ sub,
375
+ iat
376
+ },
377
+ header
378
+ };
379
+ }
380
+ //#endregion
321
381
  //#region src/jwt/introspection.ts
322
382
  function emitAuth$1(options, cause) {
323
383
  if (options.onAuth === void 0) return;
@@ -492,10 +552,10 @@ function mtlsThumbprint(claims) {
492
552
  }
493
553
  /**
494
554
  * The sender constraint to enforce. Without a configured `sender`, a token
495
- * whose `cnf` binds it to a key or a certificate is held to that binding,
496
- * never accepted as a bearer token (RFC 9449 section 7.1, RFC 8705
497
- * section 3). An explicit `sender: "none"` is the opt-out for a gateway
498
- * 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.
499
559
  */
500
560
  function senderFor(options, cnf) {
501
561
  if (options.sender !== void 0) return options.sender;
@@ -608,4 +668,85 @@ async function resolveSubject(token, options, request) {
608
668
  return extraMemberships(options, mapped.subject, mapped.subject.principal.tenant);
609
669
  }
610
670
  //#endregion
611
- export { joseTokenSigner, joseTokenVerifier, jwtSubjectResolver, memoryReplayStore, subjectFromCapability, subjectFromCiOidc, subjectFromIntrospection, subjectFromJwt, verifyDpopProof };
671
+ //#region src/jwt/subject-token.ts
672
+ const DEFAULT_MAX_LIFETIME = 300;
673
+ /**
674
+ * Causes a verifier for another issuer answers; a different cause names the
675
+ * token's real fault.
676
+ */
677
+ const OTHER_ISSUER = /* @__PURE__ */ new Set(["wrong-issuer", "unknown-kid"]);
678
+ async function firstAccepted(token, options) {
679
+ const causes = [];
680
+ for (const verifier of options.verifiers) {
681
+ let verified;
682
+ try {
683
+ verified = await verifier.verify(token, {
684
+ typ: "at+jwt",
685
+ audience: options.audience,
686
+ ...options.clockTolerance === void 0 ? {} : { clockTolerance: options.clockTolerance }
687
+ });
688
+ } catch {
689
+ causes.push("invalid-signature");
690
+ continue;
691
+ }
692
+ if (verified.ok) return verified;
693
+ causes.push(verified.cause);
694
+ }
695
+ return { cause: causes.find((cause) => !OTHER_ISSUER.has(cause)) ?? causes[0] ?? "invalid-signature" };
696
+ }
697
+ async function claimOnce(replay, key, expiresAt) {
698
+ try {
699
+ if (replay.claim !== void 0) return await replay.claim(key, expiresAt);
700
+ if (await replay.seen(key)) return false;
701
+ await replay.remember(key, expiresAt);
702
+ return true;
703
+ } catch {
704
+ return false;
705
+ }
706
+ }
707
+ /**
708
+ * Verifies a subject token: an RFC 9068 `at+jwt` naming one subject for one
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.
713
+ */
714
+ async function verifySubjectToken(token, options) {
715
+ const verified = await firstAccepted(token, options);
716
+ if (!("ok" in verified)) return {
717
+ ok: false,
718
+ cause: verified.cause
719
+ };
720
+ if (normalizeTyp(verified.header.typ)?.toLowerCase() !== "at+jwt") return {
721
+ ok: false,
722
+ cause: "wrong-token-type"
723
+ };
724
+ const { claims } = verified;
725
+ const { sub, jti, iat, exp } = claims;
726
+ if (typeof sub !== "string" || sub === "" || typeof jti !== "string" || jti === "" || typeof iat !== "number" || typeof exp !== "number") return {
727
+ ok: false,
728
+ cause: "malformed"
729
+ };
730
+ if (exp - iat > (options.maxLifetime ?? DEFAULT_MAX_LIFETIME)) return {
731
+ ok: false,
732
+ cause: "lifetime-exceeded"
733
+ };
734
+ const key = `subject-token\n${claims.iss ?? ""}\n${jti}`;
735
+ if (!await claimOnce(options.replay, key, exp + (options.clockTolerance ?? 0))) return {
736
+ ok: false,
737
+ cause: "replayed"
738
+ };
739
+ return {
740
+ ok: true,
741
+ claims: {
742
+ ...claims,
743
+ sub,
744
+ jti,
745
+ iat,
746
+ exp
747
+ },
748
+ header: verified.header
749
+ };
750
+ }
751
+ //#endregion
752
+ export { joseTokenSigner, joseTokenVerifier, jwtSubjectResolver, memoryReplayStore, subjectFromCapability, subjectFromCiOidc, subjectFromIntrospection, subjectFromJwt, verifyDpopProof, verifyIdToken, verifySubjectToken };
@@ -1,15 +1,22 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
- import { t as describe } from "./describe-BybMRY7A.js";
3
- import { a as deniedMessage } from "./errors-BKy0EfhN.js";
4
- import { t as actorMayCallTool } from "./delegation-j6-rc37o.js";
2
+ import { i as stepUpOf } from "./problem-details-CLDgX1KV.js";
3
+ import { n as describe } from "./describe-Bb4hGK5d.js";
4
+ import { a as deniedMessage } from "./errors-B6R_lg2a.js";
5
+ import { t as actorMayCallTool } from "./delegation-CDB6_keF.js";
6
+ import { c as nowSeconds, r as isMembershipExpired } from "./tenancy-5d1zVBvK.js";
7
+ import { k as activate } from "./evaluate-Dd8Ta0Ie.js";
5
8
  import { n as resourceRef } from "./resource-ref-CaS9yVPi.js";
6
- import { c as withApp } from "./permdock-BrAscV28.js";
7
- import { l as storedApprovalToken, s as resumeDecision } from "./helpers-CBYVMjwh.js";
8
- import { n as resolveOrNull } from "./build-instance-Bu_eDqYw.js";
9
- import { n as tenantScope, t as actorFrom } from "./adapter-context-CRhqyzCk.js";
10
- import { n as requestContext, t as buildReportingInstance } from "./request-context-C81Pip9n.js";
9
+ import { n as delegationAllows } from "./where-scope-DlCdCM_8.js";
10
+ import { l as withApp } from "./permdock-L-_I_3zP.js";
11
+ import { l as storedApprovalToken, s as resumeDecision } from "./helpers-DJicaG6f.js";
12
+ import { n as resolveOrNull } from "./build-instance-CNWaYJyr.js";
13
+ import { n as tenantScope, t as actorFrom } from "./adapter-context-CIQpQxbE.js";
14
+ import { n as requestContext, t as buildReportingInstance } from "./request-context-C25ilqiJ.js";
11
15
  //#region src/agent/denied-text.ts
12
- /** The hook's text, or `event.text` when there is no hook or it throws or returns no string. */
16
+ /**
17
+ * The hook's text, or `event.text` when there is no hook or it throws or
18
+ * returns no string.
19
+ */
13
20
  function refusalText(hook, event, report) {
14
21
  if (hook === void 0) return event.text;
15
22
  try {
@@ -35,8 +42,134 @@ function thrownReason(toolName) {
35
42
  return `Denied: ${toolName} failed closed.`;
36
43
  }
37
44
  //#endregion
45
+ //#region src/agent/step-up.ts
46
+ /** Denials neither a fresh sign-in nor an activation can lift. */
47
+ const FINAL = /* @__PURE__ */ new Set([
48
+ "deny",
49
+ "validation",
50
+ "anonymous",
51
+ "not-delegated",
52
+ "no-delegation",
53
+ "agent-tool-not-delegated",
54
+ "approval",
55
+ "stale-approval"
56
+ ]);
57
+ /** Activation denials the activation flow itself asks the user to fix. */
58
+ const ACTIVATION_ASKS = /* @__PURE__ */ new Set(["reason-required", "insufficient-user-authentication"]);
59
+ function elevated(membership, role) {
60
+ return compact({
61
+ scope: membership.scope,
62
+ id: membership.id,
63
+ within: membership.within,
64
+ roles: [role],
65
+ via: "elevated"
66
+ });
67
+ }
68
+ function activationFor(permdock, permission, data) {
69
+ const held = permdock.subject.principal?.memberships ?? [];
70
+ const now = nowSeconds();
71
+ for (const membership of held) {
72
+ const { scope, id } = membership;
73
+ if (scope === void 0 || id === void 0 || isMembershipExpired(membership, now)) continue;
74
+ for (const role of membership.eligible ?? []) {
75
+ const offered = activate(permdock, compact({
76
+ role,
77
+ scope,
78
+ id,
79
+ within: membership.within
80
+ }));
81
+ if (offered.outcome === "denied" && !offered.denials.every((denial) => ACTIVATION_ASKS.has(denial.reason))) continue;
82
+ const [decision] = permdock.simulate({ memberships: [...held, elevated({
83
+ ...membership,
84
+ scope,
85
+ id
86
+ }, role)] }).simulate([[permission, data]]);
87
+ if (decision !== void 0 && decision.outcome !== "denied") return compact({
88
+ kind: "activation",
89
+ role,
90
+ scope,
91
+ id,
92
+ within: membership.within
93
+ });
94
+ }
95
+ }
96
+ }
97
+ /**
98
+ * The step-up that could lift `decision`, or `undefined`. A denial with
99
+ * `insufficient-user-authentication` asks for a fresh sign-in when the
100
+ * delegation and the actor still cover the permission; any other denial asks
101
+ * for the first eligible role whose activation the simulated decision grants. A
102
+ * matched deny, a validation failure, an anonymous subject, a delegation that
103
+ * does not cover the call, an undelegated tool and a failed approval resume
104
+ * never step up.
105
+ */
106
+ function stepUpFor(permdock, permission, data, decision) {
107
+ if (decision.outcome !== "denied" || decision.denials.length === 0 || decision.denials.some((denial) => FINAL.has(denial.reason))) return;
108
+ try {
109
+ if (decision.denials.some((denial) => denial.reason === "insufficient-user-authentication")) return delegationAllows(permdock, permission) ? {
110
+ kind: "authentication",
111
+ ...stepUpOf(decision)
112
+ } : void 0;
113
+ return activationFor(permdock, permission, data);
114
+ } catch {
115
+ return;
116
+ }
117
+ }
118
+ /**
119
+ * The subject's instance with every eligible role activated, for a tool listing
120
+ * that keeps tools an activation would open. `undefined` when the subject is
121
+ * eligible for nothing.
122
+ */
123
+ function eligiblePreview(permdock) {
124
+ const held = permdock.subject.principal?.memberships ?? [];
125
+ const now = nowSeconds();
126
+ const activations = held.flatMap((membership) => {
127
+ const { scope, id } = membership;
128
+ return scope === void 0 || id === void 0 || isMembershipExpired(membership, now) ? [] : (membership.eligible ?? []).map((role) => elevated({
129
+ ...membership,
130
+ scope,
131
+ id
132
+ }, role));
133
+ });
134
+ if (activations.length === 0) return;
135
+ try {
136
+ return permdock.simulate({ memberships: [...held, ...activations] });
137
+ } catch {
138
+ return;
139
+ }
140
+ }
141
+ /**
142
+ * The URL the user signs in again at, with the RFC 9470 `acr_values` and
143
+ * `max_age` added.
144
+ */
145
+ function signInUrl(at, stepUp) {
146
+ let url;
147
+ try {
148
+ url = new URL(at);
149
+ } catch {
150
+ return;
151
+ }
152
+ if (stepUp.acrValues !== void 0 && stepUp.acrValues.length > 0) url.searchParams.set("acr_values", stepUp.acrValues.join(" "));
153
+ if (stepUp.maxAge !== void 0) url.searchParams.set("max_age", String(stepUp.maxAge));
154
+ return url.href;
155
+ }
156
+ /** The sentence the user reads on the step-up prompt. */
157
+ function stepUpText(stepUp, permission, at) {
158
+ switch (stepUp.kind) {
159
+ case "authentication": {
160
+ const url = at === void 0 ? void 0 : signInUrl(at, stepUp);
161
+ return url === void 0 ? `Sign in again to use ${permission.key}.` : `Sign in again to use ${permission.key}: ${url}`;
162
+ }
163
+ case "activation": return `Activate the ${stepUp.role} role on ${stepUp.scope} ${stepUp.id} to use ${permission.key}.`;
164
+ default: return stepUp;
165
+ }
166
+ }
167
+ //#endregion
38
168
  //#region src/agent/kernel.ts
39
- /** The resume token an agent run carries under the namespaced `permdockApproval` key. */
169
+ /**
170
+ * The resume token an agent run carries under the namespaced `permdockApproval`
171
+ * key.
172
+ */
40
173
  function approvalTokenOf(context) {
41
174
  if (context === null || typeof context !== "object") return;
42
175
  const token = context.permdockApproval;
@@ -210,12 +343,13 @@ function createAgentKernel(policy, given) {
210
343
  token: decision.token,
211
344
  summary: modelReason(decision, binding.permission, permdock.subject.principal?.id)
212
345
  };
213
- return {
346
+ return compact({
214
347
  outcome: "denied",
215
348
  decision,
216
349
  permission: binding.permission,
217
- reason: modelReason(decision, binding.permission, permdock.subject.principal?.id)
218
- };
350
+ reason: modelReason(decision, binding.permission, permdock.subject.principal?.id),
351
+ stepUp: options.stepUp === true ? stepUpFor(permdock, binding.permission, data, decision) : void 0
352
+ });
219
353
  };
220
354
  const evaluate = async (binding, toolName, args, context, decideOptions = {}) => {
221
355
  const checked = await check(binding, args, context, {
@@ -265,10 +399,11 @@ function createAgentKernel(policy, given) {
265
399
  }, void 0));
266
400
  return evaluate(binding, toolName, args, context, decideOptions);
267
401
  };
268
- const allowedToolNames = async (context) => {
402
+ const allowedToolNames = async (context, listOptions = {}) => {
269
403
  const permdock = await instance(context);
404
+ const preview = listOptions.eligible === true ? eligiblePreview(permdock) : void 0;
270
405
  const allowed = /* @__PURE__ */ new Set();
271
- for (const [name, binding] of Object.entries(tools)) if (actorMayCallTool(permdock.subject.actor, name) && permdock.mayUse(binding.permission)) allowed.add(name);
406
+ for (const [name, binding] of Object.entries(tools)) if (actorMayCallTool(permdock.subject.actor, name) && (permdock.mayUse(binding.permission) || preview?.mayUse(binding.permission) === true)) allowed.add(name);
272
407
  return allowed;
273
408
  };
274
409
  return {
@@ -282,4 +417,4 @@ function createAgentKernel(policy, given) {
282
417
  };
283
418
  }
284
419
  //#endregion
285
- export { createAgentKernel as n, refusalText as r, approvalTokenOf as t };
420
+ export { refusalText as i, createAgentKernel as n, stepUpText as r, approvalTokenOf as t };