permdock 0.6.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-DCYe60Pi.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-DvSSPQJX.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-p1PGoVjb.js → approvals-CMRfsbBh.js} +74 -48
  14. package/dist/{arazzo-41WuzHou.js → arazzo-ClrF3PVb.js} +2 -2
  15. package/dist/{arazzo-CaUVBn7D.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-DabClFLQ.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-BNM3TtDo.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-CAvgUuKs.js → bind-D1nO6fiC.js} +5 -5
  31. package/dist/{bind-DOyrv6zi.d.ts → bind-JDuvxjuW.d.ts} +7 -7
  32. package/dist/{build-instance-Bu_eDqYw.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-Drg-1YhL.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-DZVbrF-z.js → catalog-BaMQfQ6Y.js} +3 -3
  44. package/dist/{catalog-HD2gf5mY.js → catalog-D69WhFii.js} +43 -13
  45. package/dist/{catalog-doc-Cdn7-0pQ.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-CQWIpUG-.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-ytQ3uviA.js → cloud-CO8pYtwr.js} +5 -5
  62. package/dist/{codemod-ua2hHy7w.js → codemod-BP6n8N9L.js} +3 -3
  63. package/dist/{codemod-5mpSpnUY.js → codemod-i4N2BhDc.js} +3 -3
  64. package/dist/{collect-mLTY4nwb.js → collect-BaWeMjwV.js} +17 -8
  65. package/dist/{collect-Ci6akVwH.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-1bsAezL0.d.ts → compile-COM2VKuN.d.ts} +3 -3
  71. package/dist/{completion-BTFrHZhX.js → completion-BNdVf7X2.js} +3 -3
  72. package/dist/{config-bs_kZeYq.js → config-CoQHDrDi.js} +7 -3
  73. package/dist/{config-Bj2Ixq3d.js → config-DGZzMV1B.js} +2 -2
  74. package/dist/{config-report-DSpsLpCE.js → config-report-Cm7UITNA.js} +3 -3
  75. package/dist/connector-schema-_VCSsdtD.js +433 -0
  76. package/dist/{context-B_u3_bDJ.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-B30OMUOJ.d.ts → create-B2-CQqCI.d.ts} +5 -5
  82. package/dist/{create-CGm28gyI.js → create-Cb86Z8Im.js} +9 -8
  83. package/dist/{create-DCF2SvoT.js → create-DJrlhEp9.js} +5 -5
  84. package/dist/{create-D_NmPOdH.d.ts → create-QHuuPw3q.d.ts} +7 -7
  85. package/dist/{create-CBMmFie-.d.ts → create-UTnUVETj.d.ts} +30 -10
  86. package/dist/{credential-BcoiejpY.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-j6-rc37o.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-CiFQNuMV.d.ts → denied-text-D4qkEtFz.d.ts} +2 -2
  94. package/dist/{describe-BybMRY7A.js → describe-DZlnEtLy.js} +1 -0
  95. package/dist/{describe-B5qgDvEW.d.ts → describe-O0SwYIK8.d.ts} +2 -2
  96. package/dist/{diff-CmuSD3vc.js → diff-Btr1c1Ow.js} +2 -2
  97. package/dist/{diff-3jbx6Rm4.js → diff-DzT-xD13.js} +10 -10
  98. package/dist/{doctor-BdZw53-k.js → doctor-BU1szn63.js} +241 -49
  99. package/dist/{doctor-3ZqNHX_G.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-DH5QEGXh.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-CNClBvcj.js → evaluate-B_oqFbWC.js} +55 -12
  107. package/dist/{evaluations-C_1vdSZc.d.ts → evaluations-BCddEOfO.d.ts} +4 -4
  108. package/dist/{evaluations-beAooV0n.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-Dw0MTS3D.d.ts → fetch-adapter-CuhyYwC1.d.ts} +4 -4
  116. package/dist/{fetch-adapter-DD_gfmrC.js → fetch-adapter-De-u6vhJ.js} +3 -3
  117. package/dist/{fields-OYG_JR78.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-CTCMsFZk.js → from-snapshot-Bz469dIh.js} +17 -10
  122. package/dist/generate-3FNO5P5Q.js +159 -0
  123. package/dist/{grantee-hxrUsbpM.js → grantee-BrRANrpT.js} +1 -1
  124. package/dist/{grantee-conditions-CcXf8hMM.js → grantee-conditions-C6P1Tvol.js} +1 -1
  125. package/dist/{grantee-match-DbENBHLB.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-CBYVMjwh.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-BPk51-kX.d.ts → hosted-BmjzxQhp.d.ts} +14 -2
  132. package/dist/{hosted-B46-5LYE.js → hosted-XBgU6RGT.js} +34 -12
  133. package/dist/{http-DXJ37RDA.js → http-Ca3Sr5x1.js} +1 -1
  134. package/dist/{import-wyqXUyjm.js → import-Bz0GefWg.js} +5 -5
  135. package/dist/{import-CNV7I2Dw.js → import-DB2EG_iy.js} +3 -3
  136. package/dist/{index-C-6Letxg.d.ts → index-BE8y3moU.d.ts} +50 -8
  137. package/dist/{index-B8YjkEZ4.d.ts → index-BSfRl0hZ.d.ts} +6 -6
  138. package/dist/{index-DuWxc5dt.d.ts → index-BTkwrK7v.d.ts} +143 -14
  139. package/dist/index-CMiPH2Tv.d.ts +206 -0
  140. package/dist/{index-Ch8LpNDp.d.ts → index-DH9DUDEM.d.ts} +18 -3
  141. package/dist/{index-CueFnxQc.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-BsVpyGIk.d.ts → instance-options-CU0YQCLH.d.ts} +1 -1
  147. package/dist/{instance-snapshot-BOEhcqIF.js → instance-snapshot-CjcwnEiV.js} +16 -11
  148. package/dist/jwt/index.d.ts +83 -5
  149. package/dist/jwt/index.js +143 -5
  150. package/dist/{kernel-D0NVb1cK.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-dvL2XEe1.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-Dr70oA_3.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-CIq4-E9F.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-C4dDTVEd.js → openapi-DMocl1bh.js} +4 -4
  179. package/dist/{openapi-B7HZ0f-r.js → openapi-Ddb4628T.js} +2 -7
  180. package/dist/{openapi-DD1SV-5-.js → openapi-ztVaux6j.js} +8 -8
  181. package/dist/{operation-findings-DgATDpvh.js → operation-findings-kRcEp8lE.js} +1 -1
  182. package/dist/{operations-X0VM7F3m.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-1im__-08.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-DqaJNJPn.js → ownership-Z2LpxsGa.js} +443 -40
  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-5ODwqu8b.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-BrAscV28.js → permdock-BfWEeMqk.js} +177 -49
  199. package/dist/{permdock-SV8ZINYT.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-CN8H_9UF.d.ts → permission-types-DhNEmoRG.d.ts} +4 -64
  202. package/dist/{permissions-u_KHg-sN.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-BPxlwVhN.js → permissions-DArULThq.js} +4 -4
  205. package/dist/pkce-5h8NgMQJ.js +21 -0
  206. package/dist/{policies-DP2nqRoF.js → policies-B2lZIurj.js} +3 -3
  207. package/dist/{policy-77FSAq_V.d.ts → policy-B7dg_yzu.d.ts} +2 -2
  208. package/dist/{policy-DbM5YYtV.js → policy-DaJy4nK4.js} +17 -8
  209. package/dist/{policy-from-catalog-C2gMa2Dj.js → policy-from-catalog-DFWYkNdu.js} +9 -9
  210. package/dist/{policy-types-n0uRTsW8.d.ts → policy-types-B-F-qAZk.d.ts} +83 -4
  211. package/dist/postgres-store-BL9M_CA1.js +1001 -0
  212. package/dist/{postgrest-CEgRbefE.d.ts → postgrest-CYacM_u7.d.ts} +12 -1
  213. package/dist/{postgrest-DAjUkF9w.js → postgrest-r5faDIzD.js} +37 -4
  214. package/dist/{powersync-DISt6SUe.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-B45V5d2b.d.ts → problem-details-Tcfmj3bV.d.ts} +1 -1
  222. package/dist/prompt-DwtVemER.js +935 -0
  223. package/dist/{protected-RFGpakN9.d.ts → protected-BwZYL1X_.d.ts} +6 -5
  224. package/dist/{protected-BlF0F6wL.js → protected-DXE3cQYg.js} +2 -2
  225. package/dist/{provider-B1al-AZz.js → provider-BQsTYYy0.js} +2 -2
  226. package/dist/{provider-DILL9oPK.d.ts → provider-Csk-THAn.d.ts} +1 -1
  227. package/dist/{provider-store-DM6DNcta.js → provider-store-IgqQipCO.js} +2 -2
  228. package/dist/{pull-jEwbf80J.js → pull-CN5OLxrF.js} +7 -7
  229. package/dist/pull-Cty6Ovyu.js +1 -0
  230. package/dist/{push-BD4f15co.js → push-tVdG8dUL.js} +54 -14
  231. package/dist/{pushed-policy-DCW91KQU.d.ts → pushed-policy-BbcY9r_4.d.ts} +1 -1
  232. package/dist/{pushed-policy-CqtxkV4G.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 +209 -21
  239. package/dist/{refs-K6eWUJ0H.js → refs-CNJBiTFo.js} +15 -1
  240. package/dist/{replay-Bkm-Ne4l.d.ts → replay-DCDD_ZfL.d.ts} +1 -1
  241. package/dist/{request-context-C81Pip9n.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-BAqP4q66.js → rls-Ck_PocSp.js} +32 -8
  245. package/dist/{rls-DTvYd-lI.js → rls-CxBZb4rZ.js} +478 -534
  246. package/dist/{role-builder-uWQZ4v84.js → role-builder-C1VJzvcr.js} +3 -3
  247. package/dist/rolldown-runtime-C3I60J0A.js +4 -0
  248. package/dist/{rpc-VSl5ylaQ.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-DocwaTKn.d.ts → run-ticket-BpNi7BCi.d.ts} +8 -3
  252. package/dist/{run-CUKuz0A8.js → run-uLD2aWuO.js} +7 -7
  253. package/dist/{runtime-D3VTAiCA.js → runtime-Vif3_-zf.js} +1 -1
  254. package/dist/{saas-BCXRuXca.js → saas-Az_Kz-4D.js} +7 -7
  255. package/dist/{scan-qvOe0hS3.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-C3WXAHZj.js → server-Bnga6I50.js} +3 -3
  265. package/dist/{server-types-CKQiCnON.d.ts → server-types-C4gZUEZy.d.ts} +9 -9
  266. package/dist/{shared-DvvFzYXe.js → shared-C8LjUdVU.js} +1 -1
  267. package/dist/{shared-BAK8t4Uo.js → shared-fMKOv8hP.js} +44 -38
  268. package/dist/{sink-4-eQIRWf.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-B7DkYg6g.js → snapshot-CbGmYiJx.js} +4 -4
  272. package/dist/{snapshot-cache-DZHQ0KF6.js → snapshot-cache-DT2Kx1F8.js} +1 -1
  273. package/dist/{snapshot-cache-PXI-vGpY.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-Xc4zkszI.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-Cu2m75uo.js → src-DLFrtrrC.js} +140 -48
  284. package/dist/ssf/index.d.ts +4 -4
  285. package/dist/ssf/index.js +640 -211
  286. package/dist/{standard-webhooks-rbD7LS6h.d.ts → standard-webhooks-B_qRg0ws.d.ts} +2 -2
  287. package/dist/{store-BDutJkDL.js → store-DSP9oGvh.js} +15 -7
  288. package/dist/{store-options-u0ycEe8s.js → store-options-B_poyYvg.js} +6 -6
  289. package/dist/{stores-BUGNbJTt.d.ts → stores-BAZwSYZA.d.ts} +6 -5
  290. package/dist/{stores-CGhM8BN_.js → stores-BqEuHC05.js} +2 -2
  291. package/dist/{stream-CeCMJmBB.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-x5JtR2tc.js → supabase--0aJdLEd.js} +8 -6
  299. package/dist/{supabase-By_frk3U.js → supabase-Bqp7iIY2.js} +3 -3
  300. package/dist/supabase-hook-DJxC4PoP.js +1 -0
  301. package/dist/{supabase-hook-BMoEhZir.js → supabase-hook-Dg0SrQWR.js} +1060 -119
  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-Dfv0aTER.d.ts → types-BWZybqs9.d.ts} +110 -8
  333. package/dist/{types-Druu9wLM.d.ts → types-BXMYB7BY.d.ts} +2 -2
  334. package/dist/{types-BzzaHxt3.d.ts → types-BfVmNJO5.d.ts} +14 -3
  335. package/dist/{types-lUlG3TVd.d.ts → types-CIeZcG8v.d.ts} +2 -2
  336. package/dist/{types-B3_ooZgZ.d.ts → types-CKV71kKh.d.ts} +4 -4
  337. package/dist/{types-CX7AvRqP.d.ts → types-CQVEQawv.d.ts} +4 -4
  338. package/dist/{types-C863OQiR.d.ts → types-CeIscIKp.d.ts} +4 -4
  339. package/dist/{types-C_IiEs64.d.ts → types-CfiKC5aN.d.ts} +1 -1
  340. package/dist/{types-_WhUP7ud.d.ts → types-D3A19w4A.d.ts} +8 -4
  341. package/dist/{types-8RnwUAvE.d.ts → types-DBHftjgS.d.ts} +15 -8
  342. package/dist/{types-BdtSDbBO.d.ts → types-DC44-hqb.d.ts} +2 -2
  343. package/dist/{types-CVZSNocA.d.ts → types-DXmwu78Z.d.ts} +4 -4
  344. package/dist/{types-C791HFu9.d.ts → types-cTos-H7p.d.ts} +2 -2
  345. package/dist/{types-BtHtcKMr.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-SveTRTyr.js → usage-Bybmck7f.js} +7 -7
  349. package/dist/{usage-CRVl9V3t.js → usage-CDaLXCfL.js} +2 -2
  350. package/dist/usage-y-kBNdqs.js +1 -0
  351. package/dist/{validation-error-DHUrAkku.d.ts → validation-error-CQpoquwj.d.ts} +1 -1
  352. package/dist/{verify-BaAKx7t6.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-B986w1oK.d.ts → waiter-DwEyouan.d.ts} +2 -2
  358. package/dist/watch-Bd9mx3rd.js +1 -0
  359. package/dist/{watch-vea54PRw.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-C9vfEphl.js → where-scope-wq2coopv.js} +41 -21
  363. package/dist/{who-can-DWBAcaCQ.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-C5jC6sKI.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 +4 -1
  379. package/skills/permdock-tenancy/SKILL.md +1 -1
  380. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +1 -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-BoWglDPI.js +0 -1
  384. package/dist/collect-D7eQDffE.js +0 -1
  385. package/dist/index-Cp_ilKi1.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-BkWWCS1K.js +0 -538
  391. package/dist/powersync-MMJ2mI2q.js +0 -1
  392. package/dist/prompt-DfZLJLIn.js +0 -32
  393. package/dist/pull-CvpINcMK.js +0 -1
  394. package/dist/run-DDwUaJDU.js +0 -1
  395. package/dist/supabase-hook-CCw5m35C.js +0 -1
  396. package/dist/supautils-B6HYL9eL.js +0 -91
  397. package/dist/text-diff-BQcUapOb.js +0 -15
  398. package/dist/usage-CZpSQP6L.js +0 -1
  399. package/dist/watch--ovlPOc0.js +0 -1
package/README.md CHANGED
@@ -306,6 +306,7 @@ React Router loaders call `getSnapshot(request)` from `permdock/server` and send
306
306
  - Fail-closed: an unknown, invalid or thrown check denies, and `can()` never throws.
307
307
  - Deny overrides allow, an unknown reference is a type error, and evaluation is prototype-safe with no eval.
308
308
  - `service_role` is never emitted, a model-supplied subject is never trusted, and an agent with no delegation is denied.
309
+ - The generated Supabase token hook and the functions it calls for `supabase.hook.claims` and `supabase.hook.before` are revoked from `public`, `anon` and `authenticated`, so no client reads another user's claims.
309
310
  - No one approves their own request by default, a delegate is held to the same rule as the person they cover, there is never a default tenant, and data is validated against the resource schema unless the caller marks a row it loaded `trusted: true`.
310
311
  - A user or service API key expires unless the tenant sets `allowNoExpiry`. A feed key (`pdfeed_`) does not expire; rotation replaces the secret and keeps the id, and the key is bound to one resource.
311
312
  - Authentication stays upstream: PermDock consumes verified sessions, JWKS-verified JWTs (`permdock/jwt`, with `jose` as an optional peer), provider claims and MCP `authInfo`. Core never verifies a token. User-editable fields never become claims: `subjectFromBetterAuth` copies `additionalFields` only through a `schema`. Read [authentication](https://permdock.com/docs/concepts/authentication).
@@ -1,6 +1,4 @@
1
- //#region \0rolldown/runtime.js
2
- var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod, mod.exports), cb = null), mod.exports);
3
- //#endregion
1
+ import { t as __commonJSMin } from "./rolldown-runtime-C3I60J0A.js";
4
2
  //#region ../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/code.js
5
3
  var require_code$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
6
4
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,8 +1,8 @@
1
- import { T as Policy, Yn as AuthorizationDetail, rr as Principal } from "../policy-types-n0uRTsW8.js";
2
- import { w as Permission } from "../vocabulary-CN8H_9UF.js";
3
- import { m as ApprovalStore } from "../types-BdtSDbBO.js";
4
- import { a as ProblemDetails } from "../errors-DH5QEGXh.js";
5
- import { t as InstanceOptions } from "../instance-options-BsVpyGIk.js";
1
+ import { $n as AuthorizationDetail, T as Policy, sr as Principal } from "../policy-types-B-F-qAZk.js";
2
+ import { u as Permission } from "../permission-types-DhNEmoRG.js";
3
+ import { m as ApprovalStore } from "../types-DC44-hqb.js";
4
+ import { a as ProblemDetails } from "../errors-B_Qg9D3e.js";
5
+ import { t as InstanceOptions } from "../instance-options-CU0YQCLH.js";
6
6
  //#region src/a2a/types.d.ts
7
7
  type A2aAuth = {
8
8
  readonly clientId?: string;
package/dist/a2a/index.js CHANGED
@@ -2,13 +2,13 @@ import { t as compact } from "../compact-CAf557ZB.js";
2
2
  import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
3
3
  import { o as statusProblem } from "../problem-details-cn5X30gZ.js";
4
4
  import { n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-BKy0EfhN.js";
5
- import { t as canonicalJson } from "../canonical-json-BC8_nMTw.js";
5
+ import { t as canonicalJson } from "../canonical-json-DwilZ1iB.js";
6
6
  import { t as bytesToBase64Url } from "../sha256-D9ihqmvd.js";
7
7
  import { n as resourceRef } from "../resource-ref-CaS9yVPi.js";
8
- import { a as hasScope, c as withApp, i as challengeScope, o as scopesReaching } from "../permdock-BrAscV28.js";
8
+ import { i as challengeScope, l as withApp, o as hasScope, s as scopesReaching } from "../permdock-BfWEeMqk.js";
9
9
  import { f as wwwAuthenticate, r as bearerChallenge } from "../problem-CTviyH5L.js";
10
- import { r as instanceOptions } from "../build-instance-Bu_eDqYw.js";
11
- import { n as createAgentKernel } from "../kernel-D0NVb1cK.js";
10
+ import { r as instanceOptions } from "../build-instance-DxE7czo9.js";
11
+ import { n as createAgentKernel } from "../kernel-DVExUwkp.js";
12
12
  import { t as delegationFrom } from "../delegation-input-FTxMK3ji.js";
13
13
  //#region src/a2a/create.ts
14
14
  function firstScheme(options) {
@@ -1,5 +1,5 @@
1
1
  import { r as listSourceFiles } from "./files-D_JIzUrP.js";
2
- import { t as DOCS_BASE } from "./manifest-dvL2XEe1.js";
2
+ import { t as DOCS_BASE } from "./manifest-Dv6q4i5s.js";
3
3
  import { readFileSync } from "node:fs";
4
4
  import { relative } from "node:path";
5
5
  //#region src/cli/adoption-scan.ts
@@ -1,3 +1,3 @@
1
- import { n as DeniedTextEvent, t as DeniedText } from "../denied-text-CiFQNuMV.js";
2
- import { a as createPermDock, c as ModelMap, i as OperationVerdict, l as ToolBinding, n as AgentPermDockOptions, o as AgentAdapterOptions, r as GatewayOptions, s as DecideToolOptions, t as AgentPermDock, u as ToolMap } from "../create-CBMmFie-.js";
3
- export { type AgentAdapterOptions, type AgentPermDock, type AgentPermDockOptions, type DecideToolOptions, type DeniedText, type DeniedTextEvent, type GatewayOptions, type ModelMap, type OperationVerdict, type ToolBinding, type ToolMap, createPermDock };
1
+ import { n as DeniedTextEvent, t as DeniedText } from "../denied-text-D4qkEtFz.js";
2
+ import { a as createPermDock, c as ModelMap, d as StepUp, i as OperationVerdict, l as ToolBinding, n as AgentPermDockOptions, o as AgentAdapterOptions, r as GatewayOptions, s as DecideToolOptions, t as AgentPermDock, u as ToolMap } from "../create-UTnUVETj.js";
3
+ export { type AgentAdapterOptions, type AgentPermDock, type AgentPermDockOptions, type DecideToolOptions, type DeniedText, type DeniedTextEvent, type GatewayOptions, type ModelMap, type OperationVerdict, type StepUp, type ToolBinding, type ToolMap, createPermDock };
@@ -1 +1 @@
1
- export { n as createPermDock } from "../create-CGm28gyI.js";
1
+ export { n as createPermDock } from "../create-Cb86Z8Im.js";
@@ -1,14 +1,24 @@
1
- import { T as Policy, j as PolicyVocabulary, rr as Principal } from "../policy-types-n0uRTsW8.js";
2
- import { w as Permission } from "../vocabulary-CN8H_9UF.js";
3
- import { n as DeniedTextEvent, t as DeniedText } from "../denied-text-CiFQNuMV.js";
4
- import { o as AgentAdapterOptions, t as AgentPermDock } from "../create-CBMmFie-.js";
1
+ import { T as Policy, j as PolicyVocabulary, sr as Principal } from "../policy-types-B-F-qAZk.js";
2
+ import { u as Permission } from "../permission-types-DhNEmoRG.js";
3
+ import { n as DeniedTextEvent, t as DeniedText } from "../denied-text-D4qkEtFz.js";
4
+ import { d as StepUp, o as AgentAdapterOptions, t as AgentPermDock } from "../create-UTnUVETj.js";
5
5
  //#region src/ai-sdk/create.d.ts
6
6
  type AiSdkContext = {
7
7
  readonly runtimeContext?: unknown;
8
8
  readonly permdockApproval?: string;
9
9
  readonly [key: string]: unknown;
10
10
  };
11
- type AiSdkPermDockOptions<TUser = unknown> = AgentAdapterOptions<AiSdkContext, TUser>;
11
+ type AiSdkPermDockOptions<TUser = unknown> = AgentAdapterOptions<AiSdkContext, TUser> & {
12
+ /**
13
+ * Turns a denial the user can lift into `user-approval`: a missing
14
+ * step-up authentication, or a role the user is eligible to activate.
15
+ * The re-check decides again and runs the tool only when granted. `at` is
16
+ * the page the user signs in again at; `acr_values` and `max_age` are added.
17
+ */
18
+ readonly stepUp?: {
19
+ readonly at?: string;
20
+ };
21
+ };
12
22
  /** What an AI SDK tool approval function may return; `undefined` is `not-applicable`. */
13
23
  type ToolApprovalResult = ToolApprovalStatus | undefined | "not-applicable" | "denied" | "user-approval" | {
14
24
  readonly type: "not-applicable";
@@ -31,6 +41,11 @@ type ToolApprovalStatus = "approved" | {
31
41
  readonly type: "user-approval";
32
42
  readonly reason: string;
33
43
  readonly token: string;
44
+ } | {
45
+ readonly type: "user-approval";
46
+ readonly reason: string;
47
+ /** What the user does before approving; there is no approval request in the store. */
48
+ readonly stepUp: StepUp;
34
49
  };
35
50
  /** Structural `GenericToolApprovalFunction` options from `ai`. */
36
51
  type ToolApprovalCall = {
@@ -87,4 +102,4 @@ type AiSdkPermDock<V extends PolicyVocabulary = PolicyVocabulary> = AgentPermDoc
87
102
  };
88
103
  export declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, given: AiSdkPermDockOptions<TUser>): AiSdkPermDock<V>;
89
104
  //#endregion
90
- export type { AiSdkContext, AiSdkPermDock, AiSdkPermDockOptions, AppToolApproval, DeniedText, DeniedTextEvent, LanguageModelMiddleware, NeedsApprovalOptions, ToolApprovalCall, ToolApprovalResult, ToolApprovalStatus };
105
+ export type { AiSdkContext, AiSdkPermDock, AiSdkPermDockOptions, AppToolApproval, DeniedText, DeniedTextEvent, LanguageModelMiddleware, NeedsApprovalOptions, StepUp, ToolApprovalCall, ToolApprovalResult, ToolApprovalStatus };
@@ -1,8 +1,8 @@
1
1
  import { t as compact } from "../compact-CAf557ZB.js";
2
2
  import { n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-BKy0EfhN.js";
3
- import { c as withApp } from "../permdock-BrAscV28.js";
4
- import { t as approvalTokenOf } from "../kernel-D0NVb1cK.js";
5
- import { t as agentRuntime } from "../create-CGm28gyI.js";
3
+ import { l as withApp } from "../permdock-BfWEeMqk.js";
4
+ import { r as stepUpText, t as approvalTokenOf } from "../kernel-DVExUwkp.js";
5
+ import { t as agentRuntime } from "../create-Cb86Z8Im.js";
6
6
  //#region src/ai-sdk/create.ts
7
7
  const APPROVAL_STATUSES = /* @__PURE__ */ new Set([
8
8
  "approved",
@@ -77,7 +77,8 @@ function modelDenied(decision, modelId, permission, permdock) {
77
77
  }
78
78
  function createPermDock(policy, given) {
79
79
  const options = withApp(policy, given);
80
- const { agent, kernel } = agentRuntime(policy, options, "ai-sdk");
80
+ const stepUp = options.stepUp;
81
+ const { agent, kernel } = agentRuntime(policy, options, "ai-sdk", { stepUp: stepUp !== void 0 });
81
82
  const byPermission = /* @__PURE__ */ new Map();
82
83
  for (const [name, binding] of Object.entries(options.operations)) byPermission.set(binding.permission.key, name);
83
84
  const passes = (toolName) => options.unmapped === "allow" && !Object.hasOwn(options.operations, toolName);
@@ -87,11 +88,16 @@ function createPermDock(policy, given) {
87
88
  const context = contextOf(call);
88
89
  const verdict = await decide(call.toolCall.toolName, call.toolCall.input, context);
89
90
  if (verdict.outcome === "granted") return "approved";
90
- if (verdict.outcome === "denied") return {
91
+ const recheck = isRecheck(call.messages, call.toolCall.toolCallId);
92
+ if (verdict.outcome === "denied") return verdict.stepUp !== void 0 && verdict.permission !== void 0 && !recheck ? {
93
+ type: "user-approval",
94
+ reason: stepUpText(verdict.stepUp, verdict.permission, stepUp?.at),
95
+ stepUp: verdict.stepUp
96
+ } : {
91
97
  type: "denied",
92
98
  reason: verdict.reason
93
99
  };
94
- if (isRecheck(call.messages, call.toolCall.toolCallId)) return {
100
+ if (recheck) return {
95
101
  type: "denied",
96
102
  reason: `${verdict.summary} No approval is recorded for this call.`
97
103
  };
@@ -117,7 +123,7 @@ function createPermDock(policy, given) {
117
123
  }, modelId, Object.hasOwn(options.models, modelId) ? options.models[modelId] : void 0, await kernel.instance(context));
118
124
  }
119
125
  if (params.tools === void 0) return params;
120
- const allowed = await kernel.allowedToolNames(context);
126
+ const allowed = await kernel.allowedToolNames(context, { eligible: stepUp !== void 0 });
121
127
  const keeps = (name) => typeof name === "string" && (allowed.has(name) || passes(name));
122
128
  const tools = params.tools.filter((tool) => keeps(tool.name));
123
129
  const choice = params.toolChoice;
@@ -140,8 +146,12 @@ function createPermDock(policy, given) {
140
146
  }, permission, await kernel.instance(context));
141
147
  const verdict = await decide(toolName, input, context);
142
148
  if (verdict.outcome === "granted") return false;
143
- if (verdict.outcome === "denied") throw deniedError(verdict, permission, await kernel.instance(context));
144
- if (isRecheck(needsOptions.messages, needsOptions.toolCallId)) throw new PermDockApprovalRequiredError({
149
+ const recheck = isRecheck(needsOptions.messages, needsOptions.toolCallId);
150
+ if (verdict.outcome === "denied") {
151
+ if (verdict.stepUp !== void 0 && !recheck) return true;
152
+ throw deniedError(verdict, permission, await kernel.instance(context));
153
+ }
154
+ if (recheck) throw new PermDockApprovalRequiredError({
145
155
  decision: verdict.decision,
146
156
  permission: permission.key,
147
157
  scope: permission.scope,
@@ -1,5 +1,5 @@
1
- import { s as OperationMeta, t as Operation } from "./operations-X0VM7F3m.js";
2
- import { u as ApprovalRequest } from "./types-BdtSDbBO.js";
1
+ import { s as OperationMeta, t as Operation } from "./operations-BNLes61x.js";
2
+ import { u as ApprovalRequest } from "./types-DC44-hqb.js";
3
3
  //#region src/delivery/approval-prompt.d.ts
4
4
  /**
5
5
  * What an email or chat prompt shows an approver, wire format v1. It carries
@@ -1,5 +1,5 @@
1
- import { _ as DEFAULT_APPROVAL_TTL, a as ApprovalDelegationSource, b as escalationOpenAt, c as ApprovalListQuery, d as ApprovalResumeFailureCause, f as ApprovalSignature, g as ApprovalVerdict, h as ApprovalSubjectSummary, i as ApprovalDelegation, l as ApprovalPage, m as ApprovalStore, n as ApprovalApprovers, o as ApprovalInspectResult, p as ApprovalStatus, r as ApprovalCancelMeta, s as ApprovalListFilter, t as APPROVAL_HEADER, u as ApprovalRequest, v as approvalQuorum, y as approverRelationKey } from "../types-BdtSDbBO.js";
1
+ import { _ as DEFAULT_APPROVAL_TTL, a as ApprovalDelegationSource, b as escalationOpenAt, c as ApprovalListQuery, d as ApprovalResumeFailureCause, f as ApprovalSignature, g as ApprovalVerdict, h as ApprovalSubjectSummary, i as ApprovalDelegation, l as ApprovalPage, m as ApprovalStore, n as ApprovalApprovers, o as ApprovalInspectResult, p as ApprovalStatus, r as ApprovalCancelMeta, s as ApprovalListFilter, t as APPROVAL_HEADER, u as ApprovalRequest, v as approvalQuorum, y as approverRelationKey } from "../types-DC44-hqb.js";
2
2
  import { n as ApprovalErrorCode, r as isApprovalError, t as ApprovalError } from "../errors-BWXBMaKK.js";
3
- import { a as AccessReviewItemQuery, c as AccessReviewStore, i as AccessReviewItemPage, n as AccessReviewDecision, o as AccessReviewItemStatus, r as AccessReviewItem, s as AccessReviewStatus, t as AccessReview } from "../types-C_IiEs64.js";
4
- import { $ as AccessReviewVerdict, A as APPROVAL_REQUEST_SCHEMA, B as matchDelegation, C as ApproverRelationsOptions, D as SignApprovalOptions, E as ApprovalSignatureEntry, F as IdempotencyStore, G as pageAccessReviewItems, H as parseApprovalDelegation, I as IdempotentResponse, J as StartAccessReviewInput, K as AccessReviewHolder, L as memoryIdempotencyStore, M as ApprovalView, N as ApprovalsHandlerOptions, O as approvalSignatureClaims, P as approvalsHandler, Q as isAccessReviewError, R as ApprovalDelegationMatch, S as vouchApproval, T as ApprovalSignatureClaims, U as MemoryAccessReviewStore, V as memoryApprovalDelegationSource, W as memoryAccessReviewStore, X as AccessReviewError, Y as startAccessReview, Z as AccessReviewErrorCode, _ as resolveApproval, a as approverPermissions, b as storedApprovalToken, c as decodeApprovalCursor, d as pageApprovals, et as accessReviewerEligible, f as cancelApprovals, g as requestApproval, h as readApprovalHeader, i as memoryApprovalStore, j as parseApprovalRequest, k as signApproval, l as encodeApprovalCursor, m as inspectApproval, n as applyApprovalVerdict, nt as AccessReviewsHandlerOptions, o as ApprovalCursorPosition, p as consumeApproval, q as AccessReviewOptions, r as assertApprover, rt as accessReviewsHandler, s as approvalPageSize, t as MemoryApprovalStore, tt as decideAccessReviewItem, u as listAllApprovals, v as resumeDecision, w as approverRelations, x as summarizeSubject, y as resumeFromHeader, z as MatchDelegationOptions } from "../index-C-6Letxg.js";
5
- export { APPROVAL_HEADER, APPROVAL_REQUEST_SCHEMA, type AccessReview, type AccessReviewDecision, AccessReviewError, type AccessReviewErrorCode, type AccessReviewHolder, type AccessReviewItem, type AccessReviewItemPage, type AccessReviewItemQuery, type AccessReviewItemStatus, type AccessReviewOptions, type AccessReviewStatus, type AccessReviewStore, type AccessReviewVerdict, type AccessReviewsHandlerOptions, type ApprovalApprovers, type ApprovalCancelMeta, type ApprovalCursorPosition, type ApprovalDelegation, type ApprovalDelegationMatch, type ApprovalDelegationSource, ApprovalError, type ApprovalErrorCode, type ApprovalInspectResult, type ApprovalListFilter, type ApprovalListQuery, type ApprovalPage, type ApprovalRequest, type ApprovalResumeFailureCause, type ApprovalSignature, type ApprovalSignatureClaims, type ApprovalSignatureEntry, type ApprovalStatus, type ApprovalStore, type ApprovalSubjectSummary, type ApprovalVerdict, type ApprovalView, type ApprovalsHandlerOptions, type ApproverRelationsOptions, DEFAULT_APPROVAL_TTL, type IdempotencyStore, type IdempotentResponse, type MatchDelegationOptions, type MemoryAccessReviewStore, type MemoryApprovalStore, type SignApprovalOptions, type StartAccessReviewInput, accessReviewerEligible, accessReviewsHandler, applyApprovalVerdict, approvalPageSize, approvalQuorum, approvalSignatureClaims, approvalsHandler, approverPermissions, approverRelationKey, approverRelations, assertApprover, cancelApprovals, consumeApproval, decideAccessReviewItem, decodeApprovalCursor, encodeApprovalCursor, escalationOpenAt, inspectApproval, isAccessReviewError, isApprovalError, listAllApprovals, matchDelegation, memoryAccessReviewStore, memoryApprovalDelegationSource, memoryApprovalStore, memoryIdempotencyStore, pageAccessReviewItems, pageApprovals, parseApprovalDelegation, parseApprovalRequest, readApprovalHeader, requestApproval, resolveApproval, resumeDecision, resumeFromHeader, signApproval, startAccessReview, storedApprovalToken, summarizeSubject, vouchApproval };
3
+ import { a as AccessReviewItemQuery, c as AccessReviewStore, i as AccessReviewItemPage, n as AccessReviewDecision, o as AccessReviewItemStatus, r as AccessReviewItem, s as AccessReviewStatus, t as AccessReview } from "../types-CfiKC5aN.js";
4
+ import { $ as AccessReviewHolder, A as SignApprovalOptions, B as IdempotentResponse, C as ApproverRelationsOptions, D as approvalView, E as approvalEntityTag, F as ApprovalsHandlerOptions, G as ApprovalDelegationMatch, H as idempotencyRecordKey, I as approvalsHandler, J as memoryApprovalDelegationSource, K as MatchDelegationOptions, L as IdempotencyRecord, M as signApproval, N as APPROVAL_REQUEST_SCHEMA, O as ApprovalSignatureClaims, P as parseApprovalRequest, Q as pageAccessReviewItems, R as IdempotencyStore, S as vouchApproval, T as ApprovalView, U as matchesIdempotencyRecord, V as idempotencyRecord, W as memoryIdempotencyStore, X as MemoryAccessReviewStore, Y as parseApprovalDelegation, Z as memoryAccessReviewStore, _ as resolveApproval, a as approverPermissions, at as isAccessReviewError, b as storedApprovalToken, c as decodeApprovalCursor, ct as decideAccessReviewItem, d as pageApprovals, et as AccessReviewOptions, f as cancelApprovals, g as requestApproval, h as readApprovalHeader, i as memoryApprovalStore, it as AccessReviewErrorCode, j as approvalSignatureClaims, k as ApprovalSignatureEntry, l as encodeApprovalCursor, lt as AccessReviewsHandlerOptions, m as inspectApproval, n as applyApprovalVerdict, nt as startAccessReview, o as ApprovalCursorPosition, ot as AccessReviewVerdict, p as consumeApproval, q as matchDelegation, r as assertApprover, rt as AccessReviewError, s as approvalPageSize, st as accessReviewerEligible, t as MemoryApprovalStore, tt as StartAccessReviewInput, u as listAllApprovals, ut as accessReviewsHandler, v as resumeDecision, w as approverRelations, x as summarizeSubject, y as resumeFromHeader, z as IdempotentCall } from "../index-BE8y3moU.js";
5
+ export { APPROVAL_HEADER, APPROVAL_REQUEST_SCHEMA, type AccessReview, type AccessReviewDecision, AccessReviewError, type AccessReviewErrorCode, type AccessReviewHolder, type AccessReviewItem, type AccessReviewItemPage, type AccessReviewItemQuery, type AccessReviewItemStatus, type AccessReviewOptions, type AccessReviewStatus, type AccessReviewStore, type AccessReviewVerdict, type AccessReviewsHandlerOptions, type ApprovalApprovers, type ApprovalCancelMeta, type ApprovalCursorPosition, type ApprovalDelegation, type ApprovalDelegationMatch, type ApprovalDelegationSource, ApprovalError, type ApprovalErrorCode, type ApprovalInspectResult, type ApprovalListFilter, type ApprovalListQuery, type ApprovalPage, type ApprovalRequest, type ApprovalResumeFailureCause, type ApprovalSignature, type ApprovalSignatureClaims, type ApprovalSignatureEntry, type ApprovalStatus, type ApprovalStore, type ApprovalSubjectSummary, type ApprovalVerdict, type ApprovalView, type ApprovalsHandlerOptions, type ApproverRelationsOptions, DEFAULT_APPROVAL_TTL, type IdempotencyRecord, type IdempotencyStore, type IdempotentCall, type IdempotentResponse, type MatchDelegationOptions, type MemoryAccessReviewStore, type MemoryApprovalStore, type SignApprovalOptions, type StartAccessReviewInput, accessReviewerEligible, accessReviewsHandler, applyApprovalVerdict, approvalEntityTag, approvalPageSize, approvalQuorum, approvalSignatureClaims, approvalView, approvalsHandler, approverPermissions, approverRelationKey, approverRelations, assertApprover, cancelApprovals, consumeApproval, decideAccessReviewItem, decodeApprovalCursor, encodeApprovalCursor, escalationOpenAt, idempotencyRecord, idempotencyRecordKey, inspectApproval, isAccessReviewError, isApprovalError, listAllApprovals, matchDelegation, matchesIdempotencyRecord, memoryAccessReviewStore, memoryApprovalDelegationSource, memoryApprovalStore, memoryIdempotencyStore, pageAccessReviewItems, pageApprovals, parseApprovalDelegation, parseApprovalRequest, readApprovalHeader, requestApproval, resolveApproval, resumeDecision, resumeFromHeader, signApproval, startAccessReview, storedApprovalToken, summarizeSubject, vouchApproval };
@@ -1,8 +1,8 @@
1
1
  import { a as escalationOpenAt, c as isApprovalError, i as approverRelationKey, n as DEFAULT_APPROVAL_TTL, r as approvalQuorum, s as ApprovalError, t as APPROVAL_HEADER } from "../types-DqzsnlSA.js";
2
- import { a as approvalPageSize, c as listAllApprovals, i as memoryApprovalStore, l as pageApprovals, n as assertApprover, o as decodeApprovalCursor, s as encodeApprovalCursor, t as applyApprovalVerdict } from "../store-BDutJkDL.js";
3
- import { a as requestApproval, c as resumeFromHeader, d as vouchApproval, f as approverPermissions, i as readApprovalHeader, l as storedApprovalToken, m as approverRelations, n as consumeApproval, o as resolveApproval, r as inspectApproval, s as resumeDecision, t as cancelApprovals, u as summarizeSubject } from "../helpers-CBYVMjwh.js";
2
+ import { c as decodeApprovalCursor, d as pageApprovals, i as memoryApprovalStore, l as encodeApprovalCursor, n as assertApprover, s as approvalPageSize, t as applyApprovalVerdict, u as listAllApprovals } from "../store-DSP9oGvh.js";
3
+ import { a as requestApproval, c as resumeFromHeader, d as vouchApproval, f as approverPermissions, i as readApprovalHeader, l as storedApprovalToken, m as approverRelations, n as consumeApproval, o as resolveApproval, r as inspectApproval, s as resumeDecision, t as cancelApprovals, u as summarizeSubject } from "../helpers-DY3vXuGs.js";
4
4
  import { n as isAccessReviewError, t as AccessReviewError } from "../errors-BDUwg2qC.js";
5
- import { a as matchDelegation, c as memoryAccessReviewStore, d as accessReviewsHandler, f as accessReviewerEligible, i as memoryIdempotencyStore, l as pageAccessReviewItems, n as approvalSignatureClaims, o as memoryApprovalDelegationSource, p as decideAccessReviewItem, r as signApproval, s as parseApprovalDelegation, t as approvalsHandler, u as startAccessReview } from "../approvals-p1PGoVjb.js";
5
+ import { _ as accessReviewerEligible, a as idempotencyRecordKey, c as approvalEntityTag, d as memoryApprovalDelegationSource, f as parseApprovalDelegation, g as accessReviewsHandler, h as startAccessReview, i as idempotencyRecord, l as approvalView, m as pageAccessReviewItems, n as approvalSignatureClaims, o as matchesIdempotencyRecord, p as memoryAccessReviewStore, r as signApproval, s as memoryIdempotencyStore, t as approvalsHandler, u as matchDelegation, v as decideAccessReviewItem } from "../approvals-CMRfsbBh.js";
6
6
  import { t as APPROVAL_REQUEST_SCHEMA } from "../request-schema-CMreVuFM.js";
7
7
  import { t as parseApprovalRequest } from "../parse-request-D_tUXG6M.js";
8
- export { APPROVAL_HEADER, APPROVAL_REQUEST_SCHEMA, AccessReviewError, ApprovalError, DEFAULT_APPROVAL_TTL, accessReviewerEligible, accessReviewsHandler, applyApprovalVerdict, approvalPageSize, approvalQuorum, approvalSignatureClaims, approvalsHandler, approverPermissions, approverRelationKey, approverRelations, assertApprover, cancelApprovals, consumeApproval, decideAccessReviewItem, decodeApprovalCursor, encodeApprovalCursor, escalationOpenAt, inspectApproval, isAccessReviewError, isApprovalError, listAllApprovals, matchDelegation, memoryAccessReviewStore, memoryApprovalDelegationSource, memoryApprovalStore, memoryIdempotencyStore, pageAccessReviewItems, pageApprovals, parseApprovalDelegation, parseApprovalRequest, readApprovalHeader, requestApproval, resolveApproval, resumeDecision, resumeFromHeader, signApproval, startAccessReview, storedApprovalToken, summarizeSubject, vouchApproval };
8
+ export { APPROVAL_HEADER, APPROVAL_REQUEST_SCHEMA, AccessReviewError, ApprovalError, DEFAULT_APPROVAL_TTL, accessReviewerEligible, accessReviewsHandler, applyApprovalVerdict, approvalEntityTag, approvalPageSize, approvalQuorum, approvalSignatureClaims, approvalView, approvalsHandler, approverPermissions, approverRelationKey, approverRelations, assertApprover, cancelApprovals, consumeApproval, decideAccessReviewItem, decodeApprovalCursor, encodeApprovalCursor, escalationOpenAt, idempotencyRecord, idempotencyRecordKey, inspectApproval, isAccessReviewError, isApprovalError, listAllApprovals, matchDelegation, matchesIdempotencyRecord, memoryAccessReviewStore, memoryApprovalDelegationSource, memoryApprovalStore, memoryIdempotencyStore, pageAccessReviewItems, pageApprovals, parseApprovalDelegation, parseApprovalRequest, readApprovalHeader, requestApproval, resolveApproval, resumeDecision, resumeFromHeader, signApproval, startAccessReview, storedApprovalToken, summarizeSubject, vouchApproval };
@@ -4,16 +4,16 @@ import { a as ownRecord } from "./paths-DXSHAMIa.js";
4
4
  import { a as problemType, o as statusProblem } from "./problem-details-cn5X30gZ.js";
5
5
  import { a as isId } from "./expiry-D4_YKRKD.js";
6
6
  import { d as isoNow, f as nowMillis, g as secondsOf, i as dateAt } from "./time-DkWjdL98.js";
7
- import { t as canonicalJson } from "./canonical-json-BC8_nMTw.js";
7
+ import { t as canonicalJson } from "./canonical-json-DwilZ1iB.js";
8
8
  import { r as sha256Digest } from "./sha256-D9ihqmvd.js";
9
- import { s as rootMembershipId } from "./scopes-CUPSjo9q.js";
10
- import { o as flattenGrantee } from "./grantee-hxrUsbpM.js";
9
+ import { c as rootMembershipId } from "./scopes-BHsc-wp-.js";
10
+ import { o as flattenGrantee } from "./grantee-BrRANrpT.js";
11
11
  import { c as isApprovalError, s as ApprovalError } from "./types-DqzsnlSA.js";
12
- import { a as approvalPageSize, c as listAllApprovals, n as assertApprover, o as decodeApprovalCursor, r as matchesApprovers } from "./store-BDutJkDL.js";
12
+ import { a as belongsToTenant, c as decodeApprovalCursor, n as assertApprover, o as membershipTenants, r as matchesApprovers, s as approvalPageSize, u as listAllApprovals } from "./store-DSP9oGvh.js";
13
13
  import { n as readBodyText } from "./body-text-QcXok_SI.js";
14
14
  import { r as hasCredentials } from "./http-BBoKefeS.js";
15
15
  import { a as methodNotAllowed, c as problemResponse, d as validationProblem, u as unauthenticatedProblem } from "./problem-CTviyH5L.js";
16
- import { f as approverPermissions, m as approverRelations, p as heldPermissions } from "./helpers-CBYVMjwh.js";
16
+ import { f as approverPermissions, m as approverRelations, p as heldPermissions } from "./helpers-DY3vXuGs.js";
17
17
  import { n as isAccessReviewError, t as AccessReviewError } from "./errors-BDUwg2qC.js";
18
18
  import { t as bodyTooLarge } from "./body-CH5of8Ne.js";
19
19
  //#region src/approvals/access-reviews/decide.ts
@@ -521,7 +521,52 @@ async function matchDelegation(request, delegate, options) {
521
521
  }))).find((match) => match !== void 0);
522
522
  }
523
523
  //#endregion
524
+ //#region src/approvals/entity-tag.ts
525
+ /** The request without its resume `token`; every other field stays. */
526
+ function approvalView(request) {
527
+ const { token: _token, ...view } = request;
528
+ return view;
529
+ }
530
+ /**
531
+ * A strong RFC 9110 entity tag: the quoted `sha-256:` digest of
532
+ * `approvalView(request)` as RFC 8785 JSON. A field outside
533
+ * `ApprovalRequest` changes the tag, so hash the stored request as is.
534
+ */
535
+ function approvalEntityTag(request) {
536
+ return `"${sha256Digest(canonicalJson(approvalView(request)))}"`;
537
+ }
538
+ //#endregion
524
539
  //#region src/approvals/idempotency.ts
540
+ /** How long `approvalsHandler` keeps a response for a repeated `Idempotency-Key`. */
541
+ const IDEMPOTENCY_TTL_MS = 864e5;
542
+ /** The `IdempotencyStore` key for one approver's `Idempotency-Key`: keys never cross approvers. */
543
+ function idempotencyRecordKey(principalId, key) {
544
+ return `${principalId}\n${key}`;
545
+ }
546
+ function fingerprintOf(call) {
547
+ return `${call.action} ${call.id} ${sha256Digest(call.body)}`;
548
+ }
549
+ /**
550
+ * The record `approvalsHandler` stores after `call` answered `response`:
551
+ * the status, headers and body text, the call's fingerprint, and an expiry
552
+ * 24 hours after `now` (epoch milliseconds, default the clock).
553
+ */
554
+ async function idempotencyRecord(input) {
555
+ return {
556
+ key: idempotencyRecordKey(input.principalId, input.key),
557
+ response: {
558
+ fingerprint: fingerprintOf(input.call),
559
+ status: input.response.status,
560
+ headers: [...input.response.headers.entries()],
561
+ body: await input.response.clone().text()
562
+ },
563
+ expiresAt: (input.now ?? nowMillis()) + IDEMPOTENCY_TTL_MS
564
+ };
565
+ }
566
+ /** Whether a stored response came from the same call: a reused key with another call is refused with `422`. */
567
+ function matchesIdempotencyRecord(response, call) {
568
+ return response.fingerprint === fingerprintOf(call);
569
+ }
525
570
  /** An in-process `IdempotencyStore`, for one instance and for tests. */
526
571
  function memoryIdempotencyStore() {
527
572
  const entries = /* @__PURE__ */ new Map();
@@ -588,7 +633,6 @@ function signApproval(request, signer, options = {}) {
588
633
  }
589
634
  //#endregion
590
635
  //#region src/approvals/handler.ts
591
- const IDEMPOTENCY_TTL_MS = 864e5;
592
636
  const MAX_IDEMPOTENCY_KEY_LENGTH = 256;
593
637
  function problem(status, detail) {
594
638
  return problemResponse(statusProblem(status, detail));
@@ -602,14 +646,6 @@ function json(status, body, headers = {}) {
602
646
  }
603
647
  });
604
648
  }
605
- function viewOf(request) {
606
- const { token: _token, ...view } = request;
607
- return view;
608
- }
609
- /** A strong RFC 9110 entity tag: the `sha-256:` digest of the view's RFC 8785 JSON. */
610
- function entityTag(request) {
611
- return `"${sha256Digest(canonicalJson(viewOf(request)))}"`;
612
- }
613
649
  function entityTags(field) {
614
650
  return field.split(",").map((tag) => tag.trim()).filter((tag) => tag !== "");
615
651
  }
@@ -619,7 +655,7 @@ function ifMatchFails(request, current) {
619
655
  if (field === null) return false;
620
656
  const tags = entityTags(field);
621
657
  if (tags.includes("*")) return false;
622
- return !tags.includes(entityTag(current));
658
+ return !tags.includes(approvalEntityTag(current));
623
659
  }
624
660
  /** RFC 9110 section 13.1.2: weak comparison. */
625
661
  function ifNoneMatchHolds(request, etag) {
@@ -702,20 +738,6 @@ async function resolveSubject(request, resolve) {
702
738
  return null;
703
739
  }
704
740
  }
705
- function membershipTenants(subject) {
706
- const principal = subject.principal;
707
- if (principal === null) return [];
708
- const tenants = /* @__PURE__ */ new Set();
709
- if (principal.tenant !== void 0) tenants.add(principal.tenant);
710
- for (const membership of principal.memberships ?? []) {
711
- const tenant = rootMembershipId(membership);
712
- if (tenant !== void 0) tenants.add(tenant);
713
- }
714
- return [...tenants];
715
- }
716
- function belongsToTenant(subject, tenant) {
717
- return membershipTenants(subject).includes(tenant);
718
- }
719
741
  async function factsFor(request, subject, options) {
720
742
  return {
721
743
  relations: await approverRelations(request, subject, options),
@@ -865,14 +887,6 @@ function idempotencyKey(request) {
865
887
  if (key === void 0 || key === "" || key.length > MAX_IDEMPOTENCY_KEY_LENGTH || /["\\]/u.test(key)) return { refusal: validationProblem("Idempotency-Key must be a quoted string of 1 to 256 characters") };
866
888
  return { key };
867
889
  }
868
- async function stored(response, fingerprint) {
869
- return {
870
- fingerprint,
871
- status: response.status,
872
- headers: [...response.headers.entries()],
873
- body: await response.clone().text()
874
- };
875
- }
876
890
  function approvalsHandler(store, options) {
877
891
  const requireDistinct = options.requireDistinctApprover === true;
878
892
  const idempotency = options.idempotency ?? memoryIdempotencyStore();
@@ -898,8 +912,8 @@ function approvalsHandler(store, options) {
898
912
  permissions: acting.permissions
899
913
  } : void 0
900
914
  }));
901
- return json(200, viewOf(resolved), {
902
- ETag: entityTag(resolved),
915
+ return json(200, approvalView(resolved), {
916
+ ETag: approvalEntityTag(resolved),
903
917
  ...options.signer !== void 0 && resolved.status === "approved" ? signatureLink(url) : {}
904
918
  });
905
919
  };
@@ -933,7 +947,7 @@ function approvalsHandler(store, options) {
933
947
  return (tenant === void 0 ? scoped.tenantless : tenants.has(tenant)) && await mayResolve(item, subject, requireDistinct, options);
934
948
  }));
935
949
  return json(200, compact({
936
- items: page.items.filter((_, index) => eligible[index] === true).map(viewOf),
950
+ items: page.items.filter((_, index) => eligible[index] === true).map(approvalView),
937
951
  next: page.next
938
952
  }), nextLink(url, page.next));
939
953
  }
@@ -943,19 +957,19 @@ function approvalsHandler(store, options) {
943
957
  principalId: principal.id
944
958
  });
945
959
  return json(200, compact({
946
- items: page.items.map(viewOf),
960
+ items: page.items.map(approvalView),
947
961
  next: page.next
948
962
  }), nextLink(url, page.next));
949
963
  }
950
964
  case "get": {
951
965
  const current = await visible(route.id, subject);
952
966
  if (current === null) return problem(404, "approval was not found");
953
- const etag = entityTag(current);
967
+ const etag = approvalEntityTag(current);
954
968
  if (ifNoneMatchHolds(request, etag)) return new Response(null, {
955
969
  status: 304,
956
970
  headers: { ETag: etag }
957
971
  });
958
- return json(200, viewOf(current), { ETag: etag });
972
+ return json(200, approvalView(current), { ETag: etag });
959
973
  }
960
974
  case "signature": {
961
975
  const current = await findById(store, route.id);
@@ -973,15 +987,27 @@ function approvalsHandler(store, options) {
973
987
  const read = await readNote(request);
974
988
  if (read.refusal !== void 0) return read.refusal;
975
989
  if (keyed.key === void 0) return await resolve(request, url, route, subject, read);
976
- const key = `${principal.id}\n${keyed.key}`;
977
- const fingerprint = `${route.kind} ${route.id} ${sha256Digest(read.text)}`;
990
+ const call = {
991
+ action: route.kind,
992
+ id: route.id,
993
+ body: read.text
994
+ };
995
+ const key = idempotencyRecordKey(principal.id, keyed.key);
978
996
  const replay = await idempotency.get(key);
979
- if (replay !== void 0) return replay.fingerprint === fingerprint ? new Response(replay.body, {
997
+ if (replay !== void 0) return matchesIdempotencyRecord(replay, call) ? new Response(replay.body, {
980
998
  status: replay.status,
981
999
  headers: replay.headers.map(([name, value]) => [name, value])
982
1000
  }) : problem(422, "Idempotency-Key was used for another request");
983
1001
  const response = await resolve(request, url, route, subject, read);
984
- if (response.ok) await idempotency.set(key, await stored(response, fingerprint), nowMillis() + IDEMPOTENCY_TTL_MS);
1002
+ if (response.ok) {
1003
+ const record = await idempotencyRecord({
1004
+ principalId: principal.id,
1005
+ key: keyed.key,
1006
+ call,
1007
+ response
1008
+ });
1009
+ await idempotency.set(record.key, record.response, record.expiresAt);
1010
+ }
985
1011
  return response;
986
1012
  }
987
1013
  default: return problem(404, `unknown approvals route ${String(route)}`);
@@ -992,4 +1018,4 @@ function approvalsHandler(store, options) {
992
1018
  };
993
1019
  }
994
1020
  //#endregion
995
- export { matchDelegation as a, memoryAccessReviewStore as c, accessReviewsHandler as d, accessReviewerEligible as f, memoryIdempotencyStore as i, pageAccessReviewItems as l, approvalSignatureClaims as n, memoryApprovalDelegationSource as o, decideAccessReviewItem as p, signApproval as r, parseApprovalDelegation as s, approvalsHandler as t, startAccessReview as u };
1021
+ export { accessReviewerEligible as _, idempotencyRecordKey as a, approvalEntityTag as c, memoryApprovalDelegationSource as d, parseApprovalDelegation as f, accessReviewsHandler as g, startAccessReview as h, idempotencyRecord as i, approvalView as l, pageAccessReviewItems as m, approvalSignatureClaims as n, matchesIdempotencyRecord as o, memoryAccessReviewStore as p, signApproval as r, memoryIdempotencyStore as s, approvalsHandler as t, matchDelegation as u, decideAccessReviewItem as v };
@@ -1,5 +1,5 @@
1
1
  import { t as defineLeaf } from "./command-L8EstFNm.js";
2
- import { c as given, u as permissionsFlag } from "./flags-C3DktBDY.js";
2
+ import { c as given, u as permissionsFlag } from "./flags-aaeRAdiD.js";
3
3
  //#region src/cli/commands/arazzo.ts
4
4
  const check = defineLeaf({
5
5
  flags: {
@@ -21,7 +21,7 @@ const check = defineLeaf({
21
21
  ...permissionsFlag
22
22
  },
23
23
  async run(ctx, { flags }) {
24
- return (await import("./arazzo-CaUVBn7D.js")).runArazzo({
24
+ return (await import("./arazzo-rdeJ8n1J.js")).runArazzo({
25
25
  cwd: ctx.cwd,
26
26
  config: ctx.config,
27
27
  doc: given(flags.doc),
@@ -1,9 +1,9 @@
1
- import { p as arazzoFindings } from "./src-Cu2m75uo.js";
2
- import { c as missingInput } from "./errors-CWTY6uih.js";
1
+ import { _ as arazzoFindings } from "./src-DLFrtrrC.js";
2
+ import { c as missingInput } from "./errors-DpP_U6Bf.js";
3
3
  import { i as readJsonFile } from "./files-D_JIzUrP.js";
4
4
  import { t as ARAZZO_REPORT_SCHEMA } from "./version-CEbQ5UeM.js";
5
- import { a as loadModule, s as pickNamed, t as asPermissionTree } from "./load-DFS_ry0W.js";
6
- import { t as DOCS_BASE } from "./manifest-dvL2XEe1.js";
5
+ import { a as loadModule, s as pickNamed, t as asPermissionTree } from "./load-DxroEzH1.js";
6
+ import { t as DOCS_BASE } from "./manifest-Dv6q4i5s.js";
7
7
  import { existsSync } from "node:fs";
8
8
  import { resolve } from "node:path";
9
9
  //#region src/cli/arazzo.ts
@@ -1,5 +1,115 @@
1
- import { n as CliError } from "./errors-CWTY6uih.js";
2
- import { closest, distance } from "fastest-levenshtein";
1
+ import { n as CliError } from "./errors-DpP_U6Bf.js";
2
+ //#region ../../node_modules/.pnpm/fastest-levenshtein@1.0.16/node_modules/fastest-levenshtein/esm/mod.js
3
+ const peq = /* @__PURE__ */ new Uint32Array(65536);
4
+ const myers_32 = (a, b) => {
5
+ const n = a.length;
6
+ const m = b.length;
7
+ const lst = 1 << n - 1;
8
+ let pv = -1;
9
+ let mv = 0;
10
+ let sc = n;
11
+ let i = n;
12
+ while (i--) peq[a.charCodeAt(i)] |= 1 << i;
13
+ for (i = 0; i < m; i++) {
14
+ let eq = peq[b.charCodeAt(i)];
15
+ const xv = eq | mv;
16
+ eq |= (eq & pv) + pv ^ pv;
17
+ mv |= ~(eq | pv);
18
+ pv &= eq;
19
+ if (mv & lst) sc++;
20
+ if (pv & lst) sc--;
21
+ mv = mv << 1 | 1;
22
+ pv = pv << 1 | ~(xv | mv);
23
+ mv &= xv;
24
+ }
25
+ i = n;
26
+ while (i--) peq[a.charCodeAt(i)] = 0;
27
+ return sc;
28
+ };
29
+ const myers_x = (b, a) => {
30
+ const n = a.length;
31
+ const m = b.length;
32
+ const mhc = [];
33
+ const phc = [];
34
+ const hsize = Math.ceil(n / 32);
35
+ const vsize = Math.ceil(m / 32);
36
+ for (let i = 0; i < hsize; i++) {
37
+ phc[i] = -1;
38
+ mhc[i] = 0;
39
+ }
40
+ let j = 0;
41
+ for (; j < vsize - 1; j++) {
42
+ let mv = 0;
43
+ let pv = -1;
44
+ const start = j * 32;
45
+ const vlen = Math.min(32, m) + start;
46
+ for (let k = start; k < vlen; k++) peq[b.charCodeAt(k)] |= 1 << k;
47
+ for (let i = 0; i < n; i++) {
48
+ const eq = peq[a.charCodeAt(i)];
49
+ const pb = phc[i / 32 | 0] >>> i & 1;
50
+ const mb = mhc[i / 32 | 0] >>> i & 1;
51
+ const xv = eq | mv;
52
+ const xh = ((eq | mb) & pv) + pv ^ pv | eq | mb;
53
+ let ph = mv | ~(xh | pv);
54
+ let mh = pv & xh;
55
+ if (ph >>> 31 ^ pb) phc[i / 32 | 0] ^= 1 << i;
56
+ if (mh >>> 31 ^ mb) mhc[i / 32 | 0] ^= 1 << i;
57
+ ph = ph << 1 | pb;
58
+ mh = mh << 1 | mb;
59
+ pv = mh | ~(xv | ph);
60
+ mv = ph & xv;
61
+ }
62
+ for (let k = start; k < vlen; k++) peq[b.charCodeAt(k)] = 0;
63
+ }
64
+ let mv = 0;
65
+ let pv = -1;
66
+ const start = j * 32;
67
+ const vlen = Math.min(32, m - start) + start;
68
+ for (let k = start; k < vlen; k++) peq[b.charCodeAt(k)] |= 1 << k;
69
+ let score = m;
70
+ for (let i = 0; i < n; i++) {
71
+ const eq = peq[a.charCodeAt(i)];
72
+ const pb = phc[i / 32 | 0] >>> i & 1;
73
+ const mb = mhc[i / 32 | 0] >>> i & 1;
74
+ const xv = eq | mv;
75
+ const xh = ((eq | mb) & pv) + pv ^ pv | eq | mb;
76
+ let ph = mv | ~(xh | pv);
77
+ let mh = pv & xh;
78
+ score += ph >>> m - 1 & 1;
79
+ score -= mh >>> m - 1 & 1;
80
+ if (ph >>> 31 ^ pb) phc[i / 32 | 0] ^= 1 << i;
81
+ if (mh >>> 31 ^ mb) mhc[i / 32 | 0] ^= 1 << i;
82
+ ph = ph << 1 | pb;
83
+ mh = mh << 1 | mb;
84
+ pv = mh | ~(xv | ph);
85
+ mv = ph & xv;
86
+ }
87
+ for (let k = start; k < vlen; k++) peq[b.charCodeAt(k)] = 0;
88
+ return score;
89
+ };
90
+ const distance = (a, b) => {
91
+ if (a.length < b.length) {
92
+ const tmp = b;
93
+ b = a;
94
+ a = tmp;
95
+ }
96
+ if (b.length === 0) return a.length;
97
+ if (a.length <= 32) return myers_32(a, b);
98
+ return myers_x(a, b);
99
+ };
100
+ const closest = (str, arr) => {
101
+ let min_distance = Infinity;
102
+ let min_index = 0;
103
+ for (let i = 0; i < arr.length; i++) {
104
+ const dist = distance(str, arr[i]);
105
+ if (dist < min_distance) {
106
+ min_distance = dist;
107
+ min_index = i;
108
+ }
109
+ }
110
+ return arr[min_index];
111
+ };
112
+ //#endregion
3
113
  //#region src/cli/core/context.ts
4
114
  /** Flags every command accepts, read from anywhere before `--`. */
5
115
  const GLOBAL_FLAGS = {
@@ -1,9 +1,9 @@
1
- import { T as Policy, Vt as Snapshot, j as PolicyVocabulary, rr as Principal } from "../policy-types-n0uRTsW8.js";
2
- import { w as Permission } from "../vocabulary-CN8H_9UF.js";
3
- import { a as OperationInput, t as Operation } from "../operations-X0VM7F3m.js";
4
- import { r as PermDock } from "../permdock-SV8ZINYT.js";
5
- import { D as ConnectionOptions, T as Connection, f as InvalidSignatureError, i as OpenApiHooks, o as ProtectOptions, u as SnapshotQuery, v as discoverViaSignatureAgent, x as webBotAuthVerifier } from "../server-types-CKQiCnON.js";
6
- import { a as ProtectTarget, i as PermDockHandlers, n as FetchAdapterOptions, t as ContextReader } from "../fetch-adapter-Dw0MTS3D.js";
1
+ import { Gt as Snapshot, T as Policy, j as PolicyVocabulary, sr as Principal } from "../policy-types-B-F-qAZk.js";
2
+ import { u as Permission } from "../permission-types-DhNEmoRG.js";
3
+ import { a as OperationInput, t as Operation } from "../operations-BNLes61x.js";
4
+ import { a as PermDock } from "../permdock-Dco6dyCK.js";
5
+ import { D as ConnectionOptions, T as Connection, f as InvalidSignatureError, i as OpenApiHooks, o as ProtectOptions, u as SnapshotQuery, v as discoverViaSignatureAgent, x as webBotAuthVerifier } from "../server-types-C4gZUEZy.js";
6
+ import { a as ProtectTarget, i as PermDockHandlers, n as FetchAdapterOptions, t as ContextReader } from "../fetch-adapter-CuhyYwC1.js";
7
7
  import { APIContext, MiddlewareHandler } from "astro";
8
8
  //#region src/astro/create.d.ts
9
9
  type AstroPermDockOptions<TUser = unknown> = FetchAdapterOptions<APIContext, TUser>;