permdock 0.5.0 → 0.7.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 (399) hide show
  1. package/README.md +1 -0
  2. package/dist/{2020-C9VN-x8c.js → 2020-CJbO8Bvz.js} +1 -3
  3. package/dist/a2a/index.d.ts +5 -5
  4. package/dist/a2a/index.js +4 -4
  5. package/dist/{adoption-scan-B4R5fnMU.js → adoption-scan-D-feE7BE.js} +1 -1
  6. package/dist/agent/index.d.ts +3 -3
  7. package/dist/agent/index.js +1 -1
  8. package/dist/ai-sdk/index.d.ts +21 -6
  9. package/dist/ai-sdk/index.js +19 -9
  10. package/dist/{approval-prompt-Djo_PyZc.d.ts → approval-prompt-K0faOLFp.d.ts} +2 -2
  11. package/dist/approvals/index.d.ts +4 -4
  12. package/dist/approvals/index.js +4 -4
  13. package/dist/{approvals-DJ6Yd5z1.js → approvals-CMRfsbBh.js} +74 -48
  14. package/dist/{arazzo-B6lebmiQ.js → arazzo-ClrF3PVb.js} +2 -2
  15. package/dist/{arazzo-BWhNF-k0.js → arazzo-rdeJ8n1J.js} +4 -4
  16. package/dist/{args-IIolxxKA.js → args-CC3OwyHW.js} +112 -2
  17. package/dist/astro/index.d.ts +6 -6
  18. package/dist/astro/index.js +2 -2
  19. package/dist/{audience-Dg8XsRaO.js → audience-BrMs8c4o.js} +1 -1
  20. package/dist/{auth-DRLEizbL.js → auth-CscUX8Sy.js} +3 -4
  21. package/dist/authzen/index.d.ts +162 -22
  22. package/dist/authzen/index.js +315 -146
  23. package/dist/{automation-BMZPIVUM.d.ts → automation-DOtAFWdy.d.ts} +3 -3
  24. package/dist/{automation-DVjOckjV.js → automation-ySsxp_Yp.js} +1 -1
  25. package/dist/base-url-BQbddZO5.js +9 -0
  26. package/dist/better-auth/index.d.ts +2 -2
  27. package/dist/better-auth/index.js +2 -2
  28. package/dist/better-supabase/index.d.ts +50 -8
  29. package/dist/better-supabase/index.js +94 -32
  30. package/dist/{bind-CZzhx-Vj.js → bind-D1nO6fiC.js} +5 -5
  31. package/dist/{bind--9EFVYWF.d.ts → bind-JDuvxjuW.d.ts} +7 -7
  32. package/dist/{build-instance-BMnAudHn.js → build-instance-DxE7czo9.js} +1 -1
  33. package/dist/{canonical-json-BC8_nMTw.js → canonical-json-DwilZ1iB.js} +6 -3
  34. package/dist/{capability-BSslw1QV.d.ts → capability-D4UC9TTW.d.ts} +2 -2
  35. package/dist/{capability-N1K9IpqS.js → capability-L7NnfhiE.js} +1 -1
  36. package/dist/{casbin-Cr7RLtA3.js → casbin-BHijLuHY.js} +2 -2
  37. package/dist/{casbin-Dyu2gnUD.js → casbin-BW9pS47J.js} +1 -1
  38. package/dist/{casl-64gpT-8x.js → casl-CmJlgziS.js} +2 -2
  39. package/dist/{casl-DjEDhTCP.js → casl-UbI8v-Wq.js} +1 -1
  40. package/dist/catalog/index.d.ts +70 -10
  41. package/dist/catalog/index.js +112 -6
  42. package/dist/catalog-BCCjSAdH.js +1 -0
  43. package/dist/{catalog-R_A__RsH.js → catalog-BaMQfQ6Y.js} +3 -3
  44. package/dist/{catalog-BECMPrwc.js → catalog-D69WhFii.js} +43 -13
  45. package/dist/{catalog-doc-C9wjsfNY.js → catalog-doc-CV9s6B1S.js} +28 -5
  46. package/dist/{catalog-fingerprint-CCP0-yQS.js → catalog-fingerprint-C144oW4M.js} +1 -1
  47. package/dist/{create-BWRSXgOF.js → challenge-nGWma08S.js} +122 -25
  48. package/dist/chat/index.d.ts +1 -1
  49. package/dist/chat/index.js +2 -2
  50. package/dist/chat-sdk/index.d.ts +3 -3
  51. package/dist/checks-BC_0mPIq.js +37 -0
  52. package/dist/claude-agent/index.d.ts +3 -3
  53. package/dist/claude-agent/index.js +2 -2
  54. package/dist/clerk/index.d.ts +3 -3
  55. package/dist/clerk/index.js +1 -1
  56. package/dist/cli/bin.js +2 -2
  57. package/dist/cli/index.d.ts +3 -3
  58. package/dist/cli/index.js +3 -3
  59. package/dist/cloud/index.d.ts +127 -11
  60. package/dist/cloud/index.js +251 -3
  61. package/dist/{cloud-CIoHNevm.js → cloud-CO8pYtwr.js} +5 -5
  62. package/dist/{codemod-Cxvvc70T.js → codemod-BP6n8N9L.js} +3 -3
  63. package/dist/{codemod-Bmj9dWMH.js → codemod-i4N2BhDc.js} +3 -3
  64. package/dist/{collect-CrZJJnEF.js → collect-BaWeMjwV.js} +17 -8
  65. package/dist/{collect-DloHbDVa.js → collect-DNm3oKOk.js} +6 -5
  66. package/dist/collect-k_Dulxr5.js +1 -0
  67. package/dist/compile/index.d.ts +1 -1
  68. package/dist/compile/index.js +1 -1
  69. package/dist/{compile-CMqMx_IN.js → compile-BAEO5bOk.js} +2 -2
  70. package/dist/{compile-Ckm2HqBZ.d.ts → compile-COM2VKuN.d.ts} +3 -3
  71. package/dist/{completion-BqhRBJD8.js → completion-BNdVf7X2.js} +3 -3
  72. package/dist/{config-bs_kZeYq.js → config-CoQHDrDi.js} +7 -3
  73. package/dist/{config-B46rm9sc.js → config-DGZzMV1B.js} +2 -2
  74. package/dist/{config-report-DUgj62Ai.js → config-report-Cm7UITNA.js} +3 -3
  75. package/dist/connector-schema-_VCSsdtD.js +433 -0
  76. package/dist/{context-bbFHR-0D.js → context--uM9V3Ui.js} +2 -2
  77. package/dist/convex/index.d.ts +5 -5
  78. package/dist/convex/index.js +2 -2
  79. package/dist/core-B5-w6Kw9.js +335 -0
  80. package/dist/core-CQkE8Esr.d.ts +179 -0
  81. package/dist/{create-0VZ7Pdiu.d.ts → create-B2-CQqCI.d.ts} +5 -5
  82. package/dist/{create-C3b4B5eF.js → create-Cb86Z8Im.js} +9 -8
  83. package/dist/{create-DnrmLnLW.js → create-DJrlhEp9.js} +5 -5
  84. package/dist/{create-BFfm17UA.d.ts → create-QHuuPw3q.d.ts} +7 -7
  85. package/dist/{create-BDS7wc3y.d.ts → create-UTnUVETj.d.ts} +30 -10
  86. package/dist/{credential-DM2um3ha.js → credential-CIM7wHwA.js} +4 -4
  87. package/dist/{credentials-DPyHmYz5.js → credentials-BpuTwd7a.js} +1 -1
  88. package/dist/{deciding-columns-Sq12mEA6.js → deciding-columns-DRo2QM6E.js} +13 -2
  89. package/dist/{delegation-DaXVdDhM.js → delegation-C5rOdTp5.js} +5 -5
  90. package/dist/delivery/index.d.ts +5 -5
  91. package/dist/delivery/index.js +4 -3
  92. package/dist/{delivery-DCAgNyCn.js → delivery-rwOKLWRm.js} +51 -2
  93. package/dist/{denied-text-D8jDHgsl.d.ts → denied-text-D4qkEtFz.d.ts} +2 -2
  94. package/dist/{describe-BybMRY7A.js → describe-DZlnEtLy.js} +1 -0
  95. package/dist/{describe-BZUsixiL.d.ts → describe-O0SwYIK8.d.ts} +2 -2
  96. package/dist/{diff-CxZo9pTq.js → diff-Btr1c1Ow.js} +2 -2
  97. package/dist/{diff-DCePiN6M.js → diff-DzT-xD13.js} +10 -10
  98. package/dist/{doctor-DFjUxf2f.js → doctor-BU1szn63.js} +241 -49
  99. package/dist/{doctor-CxiwSfqH.js → doctor-BoK_y0KO.js} +4 -4
  100. package/dist/drizzle/index.d.ts +3 -3
  101. package/dist/drizzle/index.js +1 -1
  102. package/dist/elysia/index.d.ts +5 -5
  103. package/dist/elysia/index.js +3 -3
  104. package/dist/{errors-C2PXIv4c.d.ts → errors-B_Qg9D3e.d.ts} +2 -2
  105. package/dist/{errors-CWTY6uih.js → errors-DpP_U6Bf.js} +1 -0
  106. package/dist/{evaluate-_R8QkWaf.js → evaluate-B_oqFbWC.js} +130 -34
  107. package/dist/{evaluations-16UqqQ6W.d.ts → evaluations-BCddEOfO.d.ts} +4 -4
  108. package/dist/{evaluations-DZ2CbV5k.js → evaluations-DReoiVBw.js} +4 -4
  109. package/dist/eve/index.d.ts +5 -5
  110. package/dist/eve/index.js +3 -3
  111. package/dist/express/index.d.ts +5 -5
  112. package/dist/express/index.js +3 -3
  113. package/dist/fastify/index.d.ts +5 -5
  114. package/dist/fastify/index.js +3 -3
  115. package/dist/{fetch-adapter-qKJBuRqy.d.ts → fetch-adapter-CuhyYwC1.d.ts} +4 -4
  116. package/dist/{fetch-adapter-g0ypLkID.js → fetch-adapter-De-u6vhJ.js} +3 -3
  117. package/dist/{fields-D9tPVUUS.js → fields-ClcQLrVc.js} +48 -13
  118. package/dist/{files-C5ZI27eV.js → files-acUbNwWt.js} +15 -2
  119. package/dist/{fixtures-B7XrLeY7.js → fixtures-BTMW6zgU.js} +2 -2
  120. package/dist/{flags-C3DktBDY.js → flags-aaeRAdiD.js} +2 -2
  121. package/dist/{from-snapshot-D2lZt4Dd.js → from-snapshot-Bz469dIh.js} +17 -10
  122. package/dist/generate-3FNO5P5Q.js +159 -0
  123. package/dist/{grantee-Cn1HyUsI.js → grantee-BrRANrpT.js} +14 -4
  124. package/dist/{grantee-conditions-CcXf8hMM.js → grantee-conditions-C6P1Tvol.js} +1 -1
  125. package/dist/{grantee-match-DHArqY82.js → grantee-match-0RtHWQDx.js} +3 -3
  126. package/dist/h3/index.d.ts +4 -4
  127. package/dist/h3/index.js +3 -3
  128. package/dist/{helpers-DTcZOzhF.js → helpers-DY3vXuGs.js} +3 -3
  129. package/dist/hono/index.d.ts +5 -5
  130. package/dist/hono/index.js +3 -3
  131. package/dist/{hosted-DBDX0M-P.d.ts → hosted-BmjzxQhp.d.ts} +14 -2
  132. package/dist/{hosted-BZIAYvon.js → hosted-XBgU6RGT.js} +34 -12
  133. package/dist/{http-DXJ37RDA.js → http-Ca3Sr5x1.js} +1 -1
  134. package/dist/{import-DMmOG27O.js → import-Bz0GefWg.js} +5 -5
  135. package/dist/{import-CNV7I2Dw.js → import-DB2EG_iy.js} +3 -3
  136. package/dist/{index-CxGUswIC.d.ts → index-BE8y3moU.d.ts} +50 -8
  137. package/dist/{index-Chrs5fQ-.d.ts → index-BSfRl0hZ.d.ts} +6 -6
  138. package/dist/{index-DOVf7RJv.d.ts → index-BTkwrK7v.d.ts} +155 -17
  139. package/dist/index-CMiPH2Tv.d.ts +206 -0
  140. package/dist/{index-SGdIQyzc.d.ts → index-DH9DUDEM.d.ts} +18 -3
  141. package/dist/{index-BcHcPyIo.d.ts → index-DLwcuCN_.d.ts} +86 -7
  142. package/dist/index.d.ts +18 -17
  143. package/dist/index.js +27 -25
  144. package/dist/{init-GG6Jh8HD.js → init-5TXNji88.js} +5 -5
  145. package/dist/{init-DeMYsnYJ.js → init-B-4t1NzC.js} +4 -4
  146. package/dist/{instance-options-Omfd793B.d.ts → instance-options-CU0YQCLH.d.ts} +1 -1
  147. package/dist/{instance-snapshot-Cxq4ygFc.js → instance-snapshot-CjcwnEiV.js} +20 -14
  148. package/dist/jwt/index.d.ts +83 -5
  149. package/dist/jwt/index.js +143 -5
  150. package/dist/{kernel-5JatXyND.js → kernel-DVExUwkp.js} +138 -12
  151. package/dist/kysely/index.d.ts +3 -3
  152. package/dist/kysely/index.js +1 -1
  153. package/dist/load-DrMHXzgN.js +1 -0
  154. package/dist/{load-DFS_ry0W.js → load-DxroEzH1.js} +2 -2
  155. package/dist/{login-Dfe5RlYk.js → login-ClSJh5t5.js} +4 -4
  156. package/dist/{login-imhuwvn3.js → login-WC9HPJpU.js} +6 -10
  157. package/dist/{manifest-C8IzW3Do.js → manifest-B79YuF2T.js} +6 -2
  158. package/dist/{manifest-mx5ghSFM.d.ts → manifest-BVhExYhw.d.ts} +23 -2
  159. package/dist/{manifest-CtKR3GXL.js → manifest-Dv6q4i5s.js} +54 -35
  160. package/dist/{manifest-schema-C0kK_8V0.js → manifest-schema-Cv492Qev.js} +37 -7
  161. package/dist/{map-claims-D3oRmTk0.js → map-claims-etGIS_Dv.js} +14 -11
  162. package/dist/{map-error-TCAdw-eW.js → map-error-BQGyDm_M.js} +1 -1
  163. package/dist/mcp/index.d.ts +64 -10
  164. package/dist/mcp/index.js +151 -22
  165. package/dist/{migrate-BShP7Vf4.js → migrate-Dodel0IJ.js} +77 -24
  166. package/dist/nest/index.d.ts +5 -5
  167. package/dist/nest/index.js +3 -3
  168. package/dist/next/index.d.ts +9 -9
  169. package/dist/next/index.js +5 -5
  170. package/dist/next/plugin.d.ts +1 -1
  171. package/dist/next/plugin.js +2 -2
  172. package/dist/node/index.d.ts +5 -5
  173. package/dist/node/index.js +2 -2
  174. package/dist/openai/index.d.ts +5 -5
  175. package/dist/openai/index.js +3 -3
  176. package/dist/openapi/index.d.ts +14 -4
  177. package/dist/openapi/index.js +1 -1
  178. package/dist/{openapi-ahr8rHu3.js → openapi-DMocl1bh.js} +4 -4
  179. package/dist/{openapi-B7HZ0f-r.js → openapi-Ddb4628T.js} +2 -7
  180. package/dist/{openapi-DTaEmTSW.js → openapi-ztVaux6j.js} +8 -8
  181. package/dist/{operation-findings-DgATDpvh.js → operation-findings-kRcEp8lE.js} +1 -1
  182. package/dist/{operations-CxybZErY.d.ts → operations-BNLes61x.d.ts} +1 -1
  183. package/dist/orpc/index.d.ts +6 -6
  184. package/dist/orpc/index.js +4 -4
  185. package/dist/otel/index.d.ts +3 -3
  186. package/dist/otel/index.js +1 -1
  187. package/dist/{output-Dyw8fyPF.js → output-DgSDLrta.js} +7 -3
  188. package/dist/{output-files-DhRBBE4n.js → output-files-CCMdcFWb.js} +2 -2
  189. package/dist/output-files-DPAY7-GX.js +1 -0
  190. package/dist/{ownership-BatFgAA4.js → ownership-Z2LpxsGa.js} +1349 -883
  191. package/dist/parse-Ddhz2xf4.js +148 -0
  192. package/dist/{parse-local-manifest-CVSs6J9I.js → parse-local-manifest-T1Q8X3A2.js} +24 -1
  193. package/dist/{parse-local-manifest-DgqtruPn.d.ts → parse-local-manifest-e4mdwAKd.d.ts} +1 -1
  194. package/dist/pdp/index.d.ts +3 -3
  195. package/dist/pdp/index.js +7 -3
  196. package/dist/peer-12Q5I_RH.js +976 -0
  197. package/dist/{peer-CRvC7Hg1.js → peer-DOzzMfZL.js} +1 -1
  198. package/dist/{permdock-B9JxkBwC.js → permdock-BfWEeMqk.js} +177 -49
  199. package/dist/{permdock-D7eeLJER.d.ts → permdock-Dco6dyCK.d.ts} +34 -5
  200. package/dist/{permission-registry-Br4jSNVi.js → permission-registry-DpPtSKNZ.js} +1 -1
  201. package/dist/{vocabulary-D6lPdb4Z.d.ts → permission-types-DhNEmoRG.d.ts} +4 -62
  202. package/dist/{permissions-oEWfl-kl.d.ts → permissions-CoqCOfJ3.d.ts} +2 -1
  203. package/dist/{permissions-B-wCP5ZC.js → permissions-CyH2MV_B.js} +1 -1
  204. package/dist/{permissions-CZKiUfFM.js → permissions-DArULThq.js} +4 -4
  205. package/dist/pkce-5h8NgMQJ.js +21 -0
  206. package/dist/{policies-CO1oOymN.js → policies-B2lZIurj.js} +3 -3
  207. package/dist/{policy-Czo4n3Hs.d.ts → policy-B7dg_yzu.d.ts} +2 -2
  208. package/dist/{policy-DLZJ5gAp.js → policy-DaJy4nK4.js} +17 -8
  209. package/dist/{policy-from-catalog-DzhEc3Y9.js → policy-from-catalog-DFWYkNdu.js} +9 -9
  210. package/dist/{policy-types-DzwivBgR.d.ts → policy-types-B-F-qAZk.d.ts} +109 -5
  211. package/dist/postgres-store-BL9M_CA1.js +1001 -0
  212. package/dist/{postgrest-NUqZT-RB.d.ts → postgrest-CYacM_u7.d.ts} +12 -1
  213. package/dist/{postgrest-CW0IqC-U.js → postgrest-r5faDIzD.js} +47 -5
  214. package/dist/{powersync-BHfuehf3.js → powersync-13odBwiM.js} +3 -3
  215. package/dist/powersync-53ryOZip.js +1059 -0
  216. package/dist/powersync-CExtTLyA.js +1 -0
  217. package/dist/preset/index.js +1 -1
  218. package/dist/{preset-DZdU0tne.js → preset-CHTbd-DQ.js} +2 -2
  219. package/dist/prisma/index.d.ts +2 -2
  220. package/dist/prisma/index.js +1 -1
  221. package/dist/{problem-details-DXlt-vks.d.ts → problem-details-Tcfmj3bV.d.ts} +1 -1
  222. package/dist/prompt-DwtVemER.js +935 -0
  223. package/dist/{protected-DEPHc2xV.d.ts → protected-BwZYL1X_.d.ts} +6 -5
  224. package/dist/{protected-DfjY5mLA.js → protected-DXE3cQYg.js} +2 -2
  225. package/dist/{provider-CC-u3bYP.js → provider-BQsTYYy0.js} +2 -2
  226. package/dist/{provider-DMVt6yYn.d.ts → provider-Csk-THAn.d.ts} +1 -1
  227. package/dist/{provider-store-B5Yrkhzr.js → provider-store-IgqQipCO.js} +2 -2
  228. package/dist/{pull-BgIfno6w.js → pull-CN5OLxrF.js} +7 -7
  229. package/dist/pull-Cty6Ovyu.js +1 -0
  230. package/dist/{push-CmFVBOeI.js → push-tVdG8dUL.js} +54 -14
  231. package/dist/{pushed-policy-BImMTTIM.d.ts → pushed-policy-BbcY9r_4.d.ts} +1 -1
  232. package/dist/{pushed-policy-DobP7AHI.js → pushed-policy-CmYeSQqq.js} +1 -1
  233. package/dist/react/index.d.ts +6 -6
  234. package/dist/react/index.js +3 -3
  235. package/dist/react/provider-client.d.ts +1 -1
  236. package/dist/react/provider-client.js +1 -1
  237. package/dist/react-native/index.d.ts +25 -11
  238. package/dist/react-native/index.js +214 -24
  239. package/dist/{refs-K6eWUJ0H.js → refs-CNJBiTFo.js} +15 -1
  240. package/dist/{replay-D7iKcLFe.d.ts → replay-DCDD_ZfL.d.ts} +1 -1
  241. package/dist/{request-context-BTRTG7OT.js → request-context-BykKLmyE.js} +2 -2
  242. package/dist/resend/index.d.ts +4 -4
  243. package/dist/{retire-CALjIQ7e.js → retire-Wj6dkyDE.js} +2 -2
  244. package/dist/{rls-BA8an5Ap.js → rls-Ck_PocSp.js} +32 -8
  245. package/dist/{rls-j6t43t7n.js → rls-CxBZb4rZ.js} +478 -534
  246. package/dist/{role-builder-CXbis5-X.js → role-builder-C1VJzvcr.js} +3 -3
  247. package/dist/rolldown-runtime-C3I60J0A.js +4 -0
  248. package/dist/{rpc-aPyNi6tA.js → rpc-Bk1bE-ch.js} +1 -1
  249. package/dist/run-Bz7DXGEv.js +1 -0
  250. package/dist/{run-ticket-sxFI6LAk.js → run-ticket-B5d_63Ma.js} +22 -1
  251. package/dist/{run-ticket-BjhTOi6u.d.ts → run-ticket-BpNi7BCi.d.ts} +8 -3
  252. package/dist/{run-DOfMtc9V.js → run-uLD2aWuO.js} +7 -7
  253. package/dist/{runtime-D3VTAiCA.js → runtime-Vif3_-zf.js} +1 -1
  254. package/dist/{saas-FO-Q8oj0.js → saas-Az_Kz-4D.js} +7 -7
  255. package/dist/{scan-BOI5tJ-6.js → scan-DSljDE1Y.js} +1 -1
  256. package/dist/{schema-yLuBWWsh.js → schema-gIcCx7zM.js} +1 -1
  257. package/dist/scim/index.d.ts +3 -2
  258. package/dist/scim/index.js +3 -1
  259. package/dist/scim-C7JYhySg.js +44 -0
  260. package/dist/{scim-ClHtpyV3.js → scim-YNieBO1U.js} +3 -537
  261. package/dist/{scopes-CUPSjo9q.js → scopes-BHsc-wp-.js} +1 -1
  262. package/dist/server/index.d.ts +11 -11
  263. package/dist/server/index.js +7 -7
  264. package/dist/{server-DqCT4CgZ.js → server-Bnga6I50.js} +3 -3
  265. package/dist/{server-types-BLd4MnBX.d.ts → server-types-C4gZUEZy.d.ts} +9 -9
  266. package/dist/{shared-DvvFzYXe.js → shared-C8LjUdVU.js} +1 -1
  267. package/dist/{shared-CD11nBbC.js → shared-fMKOv8hP.js} +46 -39
  268. package/dist/{sink-Bj_lDUDq.d.ts → sink-Cp_Eot9W.d.ts} +4 -4
  269. package/dist/{skills-B6lVdD_W.js → skills-Dcjw9_1C.js} +5 -5
  270. package/dist/{skills-CTYwkl44.js → skills-g_3BS9NC.js} +3 -3
  271. package/dist/{snapshot-CXUWfsNy.js → snapshot-CbGmYiJx.js} +4 -4
  272. package/dist/{snapshot-cache-DZHQ0KF6.js → snapshot-cache-DT2Kx1F8.js} +1 -1
  273. package/dist/{snapshot-cache-DqK9eDmM.d.ts → snapshot-cache-Pahd3IYJ.d.ts} +1 -1
  274. package/dist/solid/index.d.ts +6 -5
  275. package/dist/solid/index.js +4 -4
  276. package/dist/solid-start/index.d.ts +6 -6
  277. package/dist/solid-start/index.js +3 -3
  278. package/dist/{sources-vs5dGOsS.js → sources-B-zYB4GS.js} +111 -25
  279. package/dist/{sources-BV9j0DeZ.d.ts → sources-DEEuGb8S.d.ts} +63 -14
  280. package/dist/sources-qoIJQrJv.js +11 -0
  281. package/dist/{sql-B5T1IL83.js → sql-B96movIM.js} +5 -1
  282. package/dist/sql-CDEPCA0g.d.ts +10 -0
  283. package/dist/{src-DLfUWFAI.js → src-DLFrtrrC.js} +154 -53
  284. package/dist/ssf/index.d.ts +4 -4
  285. package/dist/ssf/index.js +640 -211
  286. package/dist/{standard-webhooks-6lg8v_is.d.ts → standard-webhooks-B_qRg0ws.d.ts} +2 -2
  287. package/dist/{store-4u_hxjWa.js → store-DSP9oGvh.js} +15 -7
  288. package/dist/{store-options-BqEakYRa.js → store-options-B_poyYvg.js} +6 -6
  289. package/dist/{stores-ClZUgeoP.d.ts → stores-BAZwSYZA.d.ts} +6 -5
  290. package/dist/{stores-BbsD4fAR.js → stores-BqEuHC05.js} +2 -2
  291. package/dist/{stream-7-xmnf3U.d.ts → stream-2Vwhl7Er.d.ts} +2 -2
  292. package/dist/{style-Uao76wO7.js → style-Cqo7-73x.js} +1 -0
  293. package/dist/{style-DiKWnAvn.js → style-Ds1gNm77.js} +1 -1
  294. package/dist/supabase/index.d.ts +8 -7
  295. package/dist/supabase/index.js +5 -5
  296. package/dist/supabase/middleware.d.ts +6 -6
  297. package/dist/supabase/middleware.js +6 -6
  298. package/dist/{supabase-Dxlp8A94.js → supabase--0aJdLEd.js} +9 -7
  299. package/dist/{supabase-9pqI57pW.js → supabase-Bqp7iIY2.js} +3 -3
  300. package/dist/supabase-hook-DJxC4PoP.js +1 -0
  301. package/dist/{supabase-hook-DdDQhMlw.js → supabase-hook-Dg0SrQWR.js} +1069 -123
  302. package/dist/supautils-MESd81bF.js +689 -0
  303. package/dist/{support-session-C6xJQYut.js → support-session-Cna49-3f.js} +2 -2
  304. package/dist/svelte/index.d.ts +5 -5
  305. package/dist/svelte/index.js +5 -5
  306. package/dist/svelte/runtime.d.ts +3 -3
  307. package/dist/svelte/runtime.js +3 -3
  308. package/dist/svelte/source.d.ts +5 -5
  309. package/dist/svelte/source.js +2 -2
  310. package/dist/sveltekit/index.d.ts +6 -6
  311. package/dist/sveltekit/index.js +2 -2
  312. package/dist/tanstack-start/index.d.ts +6 -6
  313. package/dist/tanstack-start/index.js +2 -2
  314. package/dist/{tenancy-DN2QAx9z.js → tenancy-CmeBQ6Nv.js} +12 -3
  315. package/dist/terminal/index.d.ts +6 -6
  316. package/dist/terminal/index.js +3 -3
  317. package/dist/testing/core.d.ts +2 -0
  318. package/dist/testing/core.js +1 -0
  319. package/dist/testing/fixtures/index.d.ts +12 -0
  320. package/dist/testing/fixtures/index.js +770 -0
  321. package/dist/testing/index.d.ts +41 -174
  322. package/dist/testing/index.js +241 -731
  323. package/dist/testing/saas/index.d.ts +5 -5
  324. package/dist/testing/saas/index.js +2 -2
  325. package/dist/testing/saas/permissions.d.ts +1 -1
  326. package/dist/testing/saas/permissions.js +1 -1
  327. package/dist/text-diff-DhITNCnD.js +444 -0
  328. package/dist/{token-BLZcjQgt.js → token-2qYDvXz2.js} +1 -1
  329. package/dist/{tool-refusal-CMLN5xhn.js → tool-refusal-reAhIzdl.js} +1 -1
  330. package/dist/trpc/index.d.ts +6 -6
  331. package/dist/trpc/index.js +3 -3
  332. package/dist/{types-5Ut_pbKy.d.ts → types-BWZybqs9.d.ts} +112 -8
  333. package/dist/{types-CZTnPFzM.d.ts → types-BXMYB7BY.d.ts} +2 -2
  334. package/dist/{types-CdlxsYQh.d.ts → types-BfVmNJO5.d.ts} +14 -3
  335. package/dist/{types-BqAKcRNW.d.ts → types-CIeZcG8v.d.ts} +2 -2
  336. package/dist/{types-BNORmDM8.d.ts → types-CKV71kKh.d.ts} +4 -4
  337. package/dist/{types-tIgIeIKJ.d.ts → types-CQVEQawv.d.ts} +4 -4
  338. package/dist/{types-BjV-fqcA.d.ts → types-CeIscIKp.d.ts} +4 -4
  339. package/dist/{types-_sHy8BQf.d.ts → types-CfiKC5aN.d.ts} +1 -1
  340. package/dist/{types-ClZaWzfb.d.ts → types-D3A19w4A.d.ts} +8 -4
  341. package/dist/{types-C8-KNsFf.d.ts → types-DBHftjgS.d.ts} +15 -8
  342. package/dist/{types-CCpc2Dcv.d.ts → types-DC44-hqb.d.ts} +2 -2
  343. package/dist/{types-fbZ7JEXr.d.ts → types-DXmwu78Z.d.ts} +4 -4
  344. package/dist/{types-DiQjupG2.d.ts → types-cTos-H7p.d.ts} +2 -2
  345. package/dist/{types-DX0LaKTb.d.ts → types-g7Oy6Zg4.d.ts} +3 -3
  346. package/dist/unplugin/index.d.ts +1 -1
  347. package/dist/unplugin/index.js +2 -2
  348. package/dist/{usage-T5mXq98v.js → usage-Bybmck7f.js} +7 -7
  349. package/dist/{usage-DHtE8j4E.js → usage-CDaLXCfL.js} +2 -2
  350. package/dist/usage-y-kBNdqs.js +1 -0
  351. package/dist/{validation-error-Bg5Tpluk.d.ts → validation-error-CQpoquwj.d.ts} +1 -1
  352. package/dist/{verify-DbCL9bnB.js → verify-pe8rL_Qw.js} +350 -83
  353. package/dist/{views-DTIIO-oQ.js → views-BB8E9dTP.js} +1 -1
  354. package/dist/vocabulary-Bg3eeT2H.d.ts +67 -0
  355. package/dist/vue/index.d.ts +6 -5
  356. package/dist/vue/index.js +4 -4
  357. package/dist/{waiter-CKy4MQSY.d.ts → waiter-DwEyouan.d.ts} +2 -2
  358. package/dist/watch-Bd9mx3rd.js +1 -0
  359. package/dist/{watch-CszoTJMq.js → watch-C-4VmFlL.js} +3 -3
  360. package/dist/webmcp/index.d.ts +2 -2
  361. package/dist/webmcp/index.js +2 -2
  362. package/dist/{where-scope-Dv-WTP-w.js → where-scope-wq2coopv.js} +41 -21
  363. package/dist/{who-can-D0QoYbEb.js → who-can-BwNsI_Js.js} +6 -6
  364. package/dist/workflow/index.d.ts +3 -3
  365. package/dist/workflow/index.js +5 -5
  366. package/dist/workflow-sdk/index.d.ts +5 -5
  367. package/dist/{wrap-Bd1Tejur.d.ts → wrap-B6R0cMRL.d.ts} +2 -2
  368. package/dist/{wrap-gX61EtpB.js → wrap-CiSc_KCq.js} +8 -2
  369. package/package.json +22 -11
  370. package/schemas/cli-result-v1.json +1 -0
  371. package/schemas/cloud-api-v1.json +152 -7
  372. package/schemas/connector-v1.json +8 -0
  373. package/schemas/supabase-claims-v1.json +5 -0
  374. package/schemas/supabase-manifest-v1.json +276 -75
  375. package/skills/permdock/SKILL.md +1 -0
  376. package/skills/permdock-agents/references/runtimes.md +3 -1
  377. package/skills/permdock-approvals/references/stores-and-resume.md +2 -1
  378. package/skills/permdock-data/references/queries-and-rls.md +5 -2
  379. package/skills/permdock-tenancy/SKILL.md +1 -1
  380. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -0
  381. package/skills/permdock-wire/references/adapters.md +14 -0
  382. package/skills/permdock-wire/references/policy-options.md +1 -0
  383. package/dist/catalog-DjhMYYCq.js +0 -1
  384. package/dist/collect-FlXJlhus.js +0 -1
  385. package/dist/index-D8EovfsP.d.ts +0 -91
  386. package/dist/load-BxEtwlBS.js +0 -1
  387. package/dist/output-files-B3IZJksC.js +0 -1
  388. package/dist/parse-Cxq0WxrA.js +0 -53
  389. package/dist/peer-C8swJ2GH.js +0 -50
  390. package/dist/powersync-CbzkqL_M.js +0 -1
  391. package/dist/powersync-bYUDLOAO.js +0 -538
  392. package/dist/prompt-DfZLJLIn.js +0 -32
  393. package/dist/pull-ByOks_Tg.js +0 -1
  394. package/dist/run-CNsApDpd.js +0 -1
  395. package/dist/supabase-hook-CXcGpHqq.js +0 -1
  396. package/dist/supautils-B6HYL9eL.js +0 -91
  397. package/dist/text-diff-BQcUapOb.js +0 -15
  398. package/dist/usage-CHOtwL19.js +0 -1
  399. package/dist/watch-Cb-NcaUw.js +0 -1
package/dist/jwt/index.js CHANGED
@@ -3,10 +3,10 @@ import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
3
3
  import { o as epochSeconds, p as nowSeconds } from "../time-DkWjdL98.js";
4
4
  import { n as sha256, t as bytesToBase64Url } from "../sha256-D9ihqmvd.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";
6
+ import { i as linkPolicyViolation, r as capabilitySubject, s as redeemerAllows, t as capabilityFromClaims } from "../capability-L7NnfhiE.js";
7
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";
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";
9
+ import { i as validateCustomClaims, n as idTokenMismatch, r as mapClaimsToSubject, t as acceptMismatch } from "../map-claims-etGIS_Dv.js";
10
10
  import { t as memoryReplayStore } from "../replay-Du1tJjG7.js";
11
11
  //#region src/jwt/dpop.ts
12
12
  const DPOP_WINDOW_SECONDS = 60;
@@ -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 {
@@ -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,
325
+ * `azp` and, when `nonce` is given, `nonce`. It does not check `at_hash`,
326
+ * `c_hash`, `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;
@@ -608,4 +668,82 @@ 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
+ /** Causes a verifier for another issuer answers; a different cause names the token's real fault. */
674
+ const OTHER_ISSUER = /* @__PURE__ */ new Set(["wrong-issuer", "unknown-kid"]);
675
+ async function firstAccepted(token, options) {
676
+ const causes = [];
677
+ for (const verifier of options.verifiers) {
678
+ let verified;
679
+ try {
680
+ verified = await verifier.verify(token, {
681
+ typ: "at+jwt",
682
+ audience: options.audience,
683
+ ...options.clockTolerance === void 0 ? {} : { clockTolerance: options.clockTolerance }
684
+ });
685
+ } catch {
686
+ causes.push("invalid-signature");
687
+ continue;
688
+ }
689
+ if (verified.ok) return verified;
690
+ causes.push(verified.cause);
691
+ }
692
+ return { cause: causes.find((cause) => !OTHER_ISSUER.has(cause)) ?? causes[0] ?? "invalid-signature" };
693
+ }
694
+ async function claimOnce(replay, key, expiresAt) {
695
+ try {
696
+ if (replay.claim !== void 0) return await replay.claim(key, expiresAt);
697
+ if (await replay.seen(key)) return false;
698
+ await replay.remember(key, expiresAt);
699
+ return true;
700
+ } catch {
701
+ return false;
702
+ }
703
+ }
704
+ /**
705
+ * 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.
710
+ */
711
+ async function verifySubjectToken(token, options) {
712
+ const verified = await firstAccepted(token, options);
713
+ if (!("ok" in verified)) return {
714
+ ok: false,
715
+ cause: verified.cause
716
+ };
717
+ if (normalizeTyp(verified.header.typ)?.toLowerCase() !== "at+jwt") return {
718
+ ok: false,
719
+ cause: "wrong-token-type"
720
+ };
721
+ const { claims } = verified;
722
+ const { sub, jti, iat, exp } = claims;
723
+ if (typeof sub !== "string" || sub === "" || typeof jti !== "string" || jti === "" || typeof iat !== "number" || typeof exp !== "number") return {
724
+ ok: false,
725
+ cause: "malformed"
726
+ };
727
+ if (exp - iat > (options.maxLifetime ?? DEFAULT_MAX_LIFETIME)) return {
728
+ ok: false,
729
+ cause: "lifetime-exceeded"
730
+ };
731
+ const key = `subject-token\n${claims.iss ?? ""}\n${jti}`;
732
+ if (!await claimOnce(options.replay, key, exp + (options.clockTolerance ?? 0))) return {
733
+ ok: false,
734
+ cause: "replayed"
735
+ };
736
+ return {
737
+ ok: true,
738
+ claims: {
739
+ ...claims,
740
+ sub,
741
+ jti,
742
+ iat,
743
+ exp
744
+ },
745
+ header: verified.header
746
+ };
747
+ }
748
+ //#endregion
749
+ export { joseTokenSigner, joseTokenVerifier, jwtSubjectResolver, memoryReplayStore, subjectFromCapability, subjectFromCiOidc, subjectFromIntrospection, subjectFromJwt, verifyDpopProof, verifyIdToken, verifySubjectToken };
@@ -1,13 +1,17 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
- import { t as describe } from "./describe-BybMRY7A.js";
2
+ import { i as stepUpOf } from "./problem-details-cn5X30gZ.js";
3
+ import { t as describe } from "./describe-DZlnEtLy.js";
3
4
  import { a as deniedMessage } from "./errors-BKy0EfhN.js";
4
- import { t as actorMayCallTool } from "./delegation-DaXVdDhM.js";
5
+ import { t as actorMayCallTool } from "./delegation-C5rOdTp5.js";
6
+ import { c as nowSeconds, r as isMembershipExpired } from "./tenancy-CmeBQ6Nv.js";
7
+ import { k as activate } from "./evaluate-B_oqFbWC.js";
5
8
  import { n as resourceRef } from "./resource-ref-CaS9yVPi.js";
6
- import { c as withApp } from "./permdock-B9JxkBwC.js";
7
- import { l as storedApprovalToken, s as resumeDecision } from "./helpers-DTcZOzhF.js";
8
- import { n as resolveOrNull } from "./build-instance-BMnAudHn.js";
9
+ import { n as delegationAllows } from "./where-scope-wq2coopv.js";
10
+ import { l as withApp } from "./permdock-BfWEeMqk.js";
11
+ import { l as storedApprovalToken, s as resumeDecision } from "./helpers-DY3vXuGs.js";
12
+ import { n as resolveOrNull } from "./build-instance-DxE7czo9.js";
9
13
  import { n as tenantScope, t as actorFrom } from "./adapter-context-CRhqyzCk.js";
10
- import { n as requestContext, t as buildReportingInstance } from "./request-context-BTRTG7OT.js";
14
+ import { n as requestContext, t as buildReportingInstance } from "./request-context-BykKLmyE.js";
11
15
  //#region src/agent/denied-text.ts
12
16
  /** The hook's text, or `event.text` when there is no hook or it throws or returns no string. */
13
17
  function refusalText(hook, event, report) {
@@ -35,6 +39,126 @@ function thrownReason(toolName) {
35
39
  return `Denied: ${toolName} failed closed.`;
36
40
  }
37
41
  //#endregion
42
+ //#region src/agent/step-up.ts
43
+ /** Denials neither a fresh sign-in nor an activation can lift. */
44
+ const FINAL = /* @__PURE__ */ new Set([
45
+ "deny",
46
+ "validation",
47
+ "anonymous",
48
+ "not-delegated",
49
+ "no-delegation",
50
+ "agent-tool-not-delegated",
51
+ "approval",
52
+ "stale-approval"
53
+ ]);
54
+ /** Activation denials the activation flow itself asks the user to fix. */
55
+ const ACTIVATION_ASKS = /* @__PURE__ */ new Set(["reason-required", "insufficient-user-authentication"]);
56
+ function elevated(membership, role) {
57
+ return compact({
58
+ scope: membership.scope,
59
+ id: membership.id,
60
+ within: membership.within,
61
+ roles: [role],
62
+ via: "elevated"
63
+ });
64
+ }
65
+ function activationFor(permdock, permission, data) {
66
+ const held = permdock.subject.principal?.memberships ?? [];
67
+ const now = nowSeconds();
68
+ for (const membership of held) {
69
+ const { scope, id } = membership;
70
+ if (scope === void 0 || id === void 0 || isMembershipExpired(membership, now)) continue;
71
+ for (const role of membership.eligible ?? []) {
72
+ const offered = activate(permdock, compact({
73
+ role,
74
+ scope,
75
+ id,
76
+ within: membership.within
77
+ }));
78
+ if (offered.outcome === "denied" && !offered.denials.every((denial) => ACTIVATION_ASKS.has(denial.reason))) continue;
79
+ const [decision] = permdock.simulate({ memberships: [...held, elevated({
80
+ ...membership,
81
+ scope,
82
+ id
83
+ }, role)] }).simulate([[permission, data]]);
84
+ if (decision !== void 0 && decision.outcome !== "denied") return compact({
85
+ kind: "activation",
86
+ role,
87
+ scope,
88
+ id,
89
+ within: membership.within
90
+ });
91
+ }
92
+ }
93
+ }
94
+ /**
95
+ * The step-up that could lift `decision`, or `undefined`. A denial with
96
+ * `insufficient-user-authentication` asks for a fresh sign-in when the
97
+ * delegation and the actor still cover the permission; any other
98
+ * denial asks for the first eligible role whose activation the simulated
99
+ * decision grants. A matched deny, a validation failure, an anonymous
100
+ * subject, a delegation that does not cover the call, an undelegated tool
101
+ * and a failed approval resume never step up.
102
+ */
103
+ function stepUpFor(permdock, permission, data, decision) {
104
+ if (decision.outcome !== "denied" || decision.denials.length === 0 || decision.denials.some((denial) => FINAL.has(denial.reason))) return;
105
+ try {
106
+ if (decision.denials.some((denial) => denial.reason === "insufficient-user-authentication")) return delegationAllows(permdock, permission) ? {
107
+ kind: "authentication",
108
+ ...stepUpOf(decision)
109
+ } : void 0;
110
+ return activationFor(permdock, permission, data);
111
+ } catch {
112
+ return;
113
+ }
114
+ }
115
+ /**
116
+ * The subject's instance with every eligible role activated, for a tool
117
+ * listing that keeps tools an activation would open. `undefined` when the
118
+ * subject is eligible for nothing.
119
+ */
120
+ function eligiblePreview(permdock) {
121
+ const held = permdock.subject.principal?.memberships ?? [];
122
+ const now = nowSeconds();
123
+ const activations = held.flatMap((membership) => {
124
+ const { scope, id } = membership;
125
+ return scope === void 0 || id === void 0 || isMembershipExpired(membership, now) ? [] : (membership.eligible ?? []).map((role) => elevated({
126
+ ...membership,
127
+ scope,
128
+ id
129
+ }, role));
130
+ });
131
+ if (activations.length === 0) return;
132
+ try {
133
+ return permdock.simulate({ memberships: [...held, ...activations] });
134
+ } catch {
135
+ return;
136
+ }
137
+ }
138
+ /** The URL the user signs in again at, with the RFC 9470 `acr_values` and `max_age` added. */
139
+ function signInUrl(at, stepUp) {
140
+ let url;
141
+ try {
142
+ url = new URL(at);
143
+ } catch {
144
+ return;
145
+ }
146
+ if (stepUp.acrValues !== void 0 && stepUp.acrValues.length > 0) url.searchParams.set("acr_values", stepUp.acrValues.join(" "));
147
+ if (stepUp.maxAge !== void 0) url.searchParams.set("max_age", String(stepUp.maxAge));
148
+ return url.href;
149
+ }
150
+ /** The sentence the user reads on the step-up prompt. */
151
+ function stepUpText(stepUp, permission, at) {
152
+ switch (stepUp.kind) {
153
+ case "authentication": {
154
+ const url = at === void 0 ? void 0 : signInUrl(at, stepUp);
155
+ return url === void 0 ? `Sign in again to use ${permission.key}.` : `Sign in again to use ${permission.key}: ${url}`;
156
+ }
157
+ case "activation": return `Activate the ${stepUp.role} role on ${stepUp.scope} ${stepUp.id} to use ${permission.key}.`;
158
+ default: return stepUp;
159
+ }
160
+ }
161
+ //#endregion
38
162
  //#region src/agent/kernel.ts
39
163
  /** The resume token an agent run carries under the namespaced `permdockApproval` key. */
40
164
  function approvalTokenOf(context) {
@@ -210,12 +334,13 @@ function createAgentKernel(policy, given) {
210
334
  token: decision.token,
211
335
  summary: modelReason(decision, binding.permission, permdock.subject.principal?.id)
212
336
  };
213
- return {
337
+ return compact({
214
338
  outcome: "denied",
215
339
  decision,
216
340
  permission: binding.permission,
217
- reason: modelReason(decision, binding.permission, permdock.subject.principal?.id)
218
- };
341
+ reason: modelReason(decision, binding.permission, permdock.subject.principal?.id),
342
+ stepUp: options.stepUp === true ? stepUpFor(permdock, binding.permission, data, decision) : void 0
343
+ });
219
344
  };
220
345
  const evaluate = async (binding, toolName, args, context, decideOptions = {}) => {
221
346
  const checked = await check(binding, args, context, {
@@ -265,10 +390,11 @@ function createAgentKernel(policy, given) {
265
390
  }, void 0));
266
391
  return evaluate(binding, toolName, args, context, decideOptions);
267
392
  };
268
- const allowedToolNames = async (context) => {
393
+ const allowedToolNames = async (context, listOptions = {}) => {
269
394
  const permdock = await instance(context);
395
+ const preview = listOptions.eligible === true ? eligiblePreview(permdock) : void 0;
270
396
  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);
397
+ 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
398
  return allowed;
273
399
  };
274
400
  return {
@@ -282,4 +408,4 @@ function createAgentKernel(policy, given) {
282
408
  };
283
409
  }
284
410
  //#endregion
285
- export { createAgentKernel as n, refusalText as r, approvalTokenOf as t };
411
+ export { refusalText as i, createAgentKernel as n, stepUpText as r, approvalTokenOf as t };
@@ -1,7 +1,7 @@
1
- import { Rt as Instant, ir as Subject, lr as Condition } from "../policy-types-DzwivBgR.js";
2
- import { c as WhereResult } from "../permdock-D7eeLJER.js";
1
+ import { Rt as Instant, lr as Subject, mr as Condition } from "../policy-types-B-F-qAZk.js";
2
+ import { u as WhereResult } from "../permdock-Dco6dyCK.js";
3
3
  import { r as RelationsMapping } from "../graph-sql-B-dsAT6j.js";
4
- import { s as MembershipsMapping } from "../compile-Ckm2HqBZ.js";
4
+ import { s as MembershipsMapping } from "../compile-COM2VKuN.js";
5
5
  import { n as WithSubjectOptions, t as RowCheck } from "../row-check-Dt35czLy.js";
6
6
  //#region src/kysely/types.d.ts
7
7
  type KyselySelectQuery = {
@@ -1,6 +1,6 @@
1
1
  import { t as compact } from "../compact-CAf557ZB.js";
2
2
  import { t as assertSafeKey } from "../paths-DXSHAMIa.js";
3
- import { n as escapeLike, t as compileWhere } from "../compile-CMqMx_IN.js";
3
+ import { n as escapeLike, t as compileWhere } from "../compile-BAEO5bOk.js";
4
4
  import { a as rowCheckFrom, i as templateOf, r as subjectStatements, s as loadPeer, t as statementTemplate } from "../subject-settings-CkEwrw3W.js";
5
5
  //#region src/kysely/to-where.ts
6
6
  function ident(name) {
@@ -0,0 +1 @@
1
+ export { a as loadModule, s as pickNamed } from "./load-DxroEzH1.js";
@@ -1,5 +1,5 @@
1
- import { c as listPermissions } from "./permission-registry-Br4jSNVi.js";
2
- import { a as describeError, n as CliError } from "./errors-CWTY6uih.js";
1
+ import { c as listPermissions } from "./permission-registry-DpPtSKNZ.js";
2
+ import { a as describeError, n as CliError } from "./errors-DpP_U6Bf.js";
3
3
  import { dirname, resolve } from "node:path";
4
4
  import { pathToFileURL } from "node:url";
5
5
  import { createJiti } from "jiti";
@@ -1,5 +1,5 @@
1
1
  import { t as defineLeaf } from "./command-L8EstFNm.js";
2
- import { c as given } from "./flags-C3DktBDY.js";
2
+ import { c as given } from "./flags-aaeRAdiD.js";
3
3
  //#region src/cli/commands/login.ts
4
4
  const urlFlag = { url: {
5
5
  type: "string",
@@ -27,7 +27,7 @@ const login = defineLeaf({
27
27
  }
28
28
  },
29
29
  async run(ctx, { flags }) {
30
- const { runLogin } = await import("./login-imhuwvn3.js");
30
+ const { runLogin } = await import("./login-WC9HPJpU.js");
31
31
  return runLogin({
32
32
  cwd: ctx.cwd,
33
33
  url: given(flags.url),
@@ -43,7 +43,7 @@ const login = defineLeaf({
43
43
  const logout = defineLeaf({
44
44
  flags: { ...urlFlag },
45
45
  async run(ctx, { flags }) {
46
- const { runLogout } = await import("./login-imhuwvn3.js");
46
+ const { runLogout } = await import("./login-WC9HPJpU.js");
47
47
  return runLogout({
48
48
  url: given(flags.url),
49
49
  json: ctx.json,
@@ -55,7 +55,7 @@ const logout = defineLeaf({
55
55
  const whoami = defineLeaf({
56
56
  flags: { ...urlFlag },
57
57
  async run(ctx, { flags }) {
58
- const { runWhoami } = await import("./login-imhuwvn3.js");
58
+ const { runWhoami } = await import("./login-WC9HPJpU.js");
59
59
  return runWhoami({
60
60
  url: given(flags.url),
61
61
  json: ctx.json,
@@ -1,18 +1,15 @@
1
1
  import { h as secondsAt, i as dateAt, s as instantAt } from "./time-DkWjdL98.js";
2
- import { n as CliError } from "./errors-CWTY6uih.js";
2
+ import { n as CliError } from "./errors-DpP_U6Bf.js";
3
3
  import { i as postForm, r as parseToken, s as runDeviceFlow } from "./device-BARQ8eYG.js";
4
4
  import { i as writeCredentials, n as deleteCredentials, r as readCredentials, t as credentialsPath } from "./storage-C2bWdvJH.js";
5
- import { n as httpRequest } from "./http-DXJ37RDA.js";
6
- import { c as READ_SCOPES, d as issuerMetadata, i as credentialsInsideRepository, l as cloudUrl, n as cliRuntime, r as credentialStorage, s as CLI_CLIENT_ID, t as CREDENTIAL_SERVICE } from "./auth-DRLEizbL.js";
7
- import { createHash, randomBytes } from "node:crypto";
5
+ import { n as randomToken, t as pkce } from "./pkce-5h8NgMQJ.js";
6
+ import { n as httpRequest } from "./http-Ca3Sr5x1.js";
7
+ import { c as READ_SCOPES, d as issuerMetadata, i as credentialsInsideRepository, l as cloudUrl, n as cliRuntime, r as credentialStorage, s as CLI_CLIENT_ID, t as CREDENTIAL_SERVICE } from "./auth-CscUX8Sy.js";
8
8
  import { spawn } from "node:child_process";
9
9
  import { createServer } from "node:http";
10
10
  //#region src/cli/cloud/loopback.ts
11
11
  /** How long the loopback listener waits for the browser to come back. */
12
12
  const LOOPBACK_TIMEOUT_MS = 3e5;
13
- function base64url(bytes) {
14
- return bytes.toString("base64url");
15
- }
16
13
  function listen(server) {
17
14
  return new Promise((resolve, reject) => {
18
15
  server.once("error", reject);
@@ -28,9 +25,8 @@ function listen(server) {
28
25
  * `state` that the callback must echo.
29
26
  */
30
27
  async function runLoopbackFlow(options, runtime) {
31
- const verifier = base64url(randomBytes(32));
32
- const challenge = base64url(createHash("sha256").update(verifier).digest());
33
- const state = base64url(randomBytes(16));
28
+ const { verifier, challenge } = await pkce();
29
+ const state = randomToken(16);
34
30
  const { promise: callback, resolve: settle } = Promise.withResolvers();
35
31
  const server = createServer((request, response) => {
36
32
  const url = new URL(request.url ?? "/", "http://127.0.0.1");
@@ -1,8 +1,12 @@
1
1
  import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
2
2
  import { n as PermDockValidationError } from "./validation-error-ZfUHbKvf.js";
3
3
  import { n as copyJson, t as checkSchema } from "./json-schema-B-vAwlde.js";
4
- import { t as supabaseManifestSchema } from "./manifest-schema-C0kK_8V0.js";
4
+ import { t as supabaseManifestSchema } from "./manifest-schema-Cv492Qev.js";
5
5
  //#region src/supabase/manifest.ts
6
+ /** Whether the manifest describes a token hook. */
7
+ function hasTokenHook(manifest) {
8
+ return "hook" in manifest;
9
+ }
6
10
  /**
7
11
  * Reads a `permdock.manifest.json` document (parsed, or the JSON text) and
8
12
  * validates it against `schemas/supabase-manifest-v1.json`. Returns a
@@ -39,4 +43,4 @@ function invalidManifest(issues) {
39
43
  });
40
44
  }
41
45
  //#endregion
42
- export { parseSupabaseManifest as t };
46
+ export { parseSupabaseManifest as n, hasTokenHook as t };
@@ -48,6 +48,12 @@ type SupabaseHookManifest = {
48
48
  readonly function: "permdock_bump_authz_version_for";
49
49
  readonly args: "p_users uuid[]";
50
50
  };
51
+ /** The Management API fields that make a hosted project call the hook; `permdock supabase inspect` adds them. */
52
+ readonly managementApi?: {
53
+ readonly hook_custom_access_token_enabled: true;
54
+ readonly hook_custom_access_token_uri: string;
55
+ readonly jwt_exp: number;
56
+ };
51
57
  /** The `supabase.hook.memberships` sources, in the order the hook reads them. */
52
58
  readonly memberships: readonly SupabaseManifestMembership[];
53
59
  readonly rls: SupabaseManifestRls;
@@ -97,6 +103,9 @@ type SupabaseManifestThrough = {
97
103
  /** A role column (with `through` when it references a roles table), or the fixed roles every row holds. */
98
104
  type SupabaseManifestRole = SupabaseManifestValue | (SupabaseManifestColumn & {
99
105
  readonly through: SupabaseManifestThrough;
106
+ }) | (SupabaseManifestColumn & {
107
+ /** Each column value to the role key it stands for, or `null` for no role; an unlisted value is no role. */
108
+ readonly map: Readonly<Record<string, string | null>>;
100
109
  });
101
110
  /** One `tableMembershipSource` or `junctionMembershipSource` source. */
102
111
  type SupabaseManifestMembership = {
@@ -194,6 +203,8 @@ type SupabaseManifestRls = {
194
203
  readonly assignments?: {
195
204
  readonly tables: readonly string[];
196
205
  };
206
+ /** `rls.tokenScopes`: the helpers narrow a delegated token by its `scope` claim through `permdock_token_scope_allows`. */
207
+ readonly tokenScopes?: boolean;
197
208
  readonly apiKeys?: {
198
209
  readonly claim: string;
199
210
  readonly scopes: string;
@@ -202,12 +213,22 @@ type SupabaseManifestRls = {
202
213
  readonly serviceRoles: readonly string[];
203
214
  };
204
215
  };
216
+ /**
217
+ * The manifest of a project in `rls.authorize: 'database'` mode without
218
+ * `supabase.hook`: no token hook, so no `hook`, `budget`, `claims`,
219
+ * `authzVersion` or hook `memberships`.
220
+ */
221
+ type SupabaseDatabaseManifest = Omit<SupabaseHookManifest, "authzVersion" | "authzVersionBump" | "budget" | "claims" | "hook" | "managementApi" | "memberships">;
222
+ /** What `parseSupabaseManifest` returns: a manifest with or without the token hook. */
223
+ type SupabaseManifest = SupabaseDatabaseManifest | SupabaseHookManifest;
224
+ /** Whether the manifest describes a token hook. */
225
+ declare function hasTokenHook(manifest: SupabaseManifest): manifest is SupabaseHookManifest;
205
226
  /**
206
227
  * Reads a `permdock.manifest.json` document (parsed, or the JSON text) and
207
228
  * validates it against `schemas/supabase-manifest-v1.json`. Returns a
208
229
  * deep-frozen copy built from own keys; throws `PermDockValidationError`
209
230
  * with every issue, so a manifest of another major is refused.
210
231
  */
211
- declare function parseSupabaseManifest(json: unknown): SupabaseHookManifest;
232
+ declare function parseSupabaseManifest(json: unknown): SupabaseManifest;
212
233
  //#endregion
213
- export { SupabaseManifestHelper as a, SupabaseManifestRls as c, SupabaseManifestValue as d, parseSupabaseManifest as f, SupabaseManifestColumn as i, SupabaseManifestRole as l, SupabaseHookManifest as n, SupabaseManifestMembership as o, SupabaseManifestActiveRow as r, SupabaseManifestRequires as s, SupabaseHookClaim as t, SupabaseManifestThrough as u };
234
+ export { SupabaseManifestActiveRow as a, SupabaseManifestMembership as c, SupabaseManifestRole as d, SupabaseManifestThrough as f, parseSupabaseManifest as h, SupabaseManifest as i, SupabaseManifestRequires as l, hasTokenHook as m, SupabaseHookClaim as n, SupabaseManifestColumn as o, SupabaseManifestValue as p, SupabaseHookManifest as r, SupabaseManifestHelper as s, SupabaseDatabaseManifest as t, SupabaseManifestRls as u };