permdock 0.3.1 → 0.4.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 (323) hide show
  1. package/dist/a2a/index.d.ts +7 -5
  2. package/dist/a2a/index.js +14 -21
  3. package/dist/ai-sdk/index.d.ts +18 -6
  4. package/dist/ai-sdk/index.js +8 -5
  5. package/dist/app-data-CV8pqqMi.js +59 -0
  6. package/dist/approvals/index.d.ts +2 -2
  7. package/dist/approvals/index.js +3 -3
  8. package/dist/{approvals-DbYAuNkG.js → approvals-DZL76lKW.js} +35 -19
  9. package/dist/{approvers-DT4AVyIg.js → approvers-CqPOLD-o.js} +1 -1
  10. package/dist/{arazzo-BAgw9ap6.js → arazzo-C4BcskbX.js} +6 -5
  11. package/dist/{arazzo-C9chp3ST.js → arazzo-CD8d0WLb.js} +2 -2
  12. package/dist/authzen/index.d.ts +3 -3
  13. package/dist/authzen/index.js +161 -23
  14. package/dist/better-auth/index.d.ts +2 -2
  15. package/dist/better-auth/index.js +6 -19
  16. package/dist/better-supabase/index.d.ts +112 -87
  17. package/dist/better-supabase/index.js +257 -156
  18. package/dist/{bind-C_ob3LKa.d.ts → bind-BzqG8SMb.d.ts} +16 -5
  19. package/dist/{bind-CuzGytRf.js → bind-kk-uyCwH.js} +14 -6
  20. package/dist/build-instance-DIIV9DbC.js +51 -0
  21. package/dist/{canonical-json-DemiK4Vp.js → canonical-json-CFKyFOke.js} +1 -3
  22. package/dist/{capability-2kYTMWDv.d.ts → capability-CksyCWDH.d.ts} +2 -2
  23. package/dist/{capability-4qPdO9gk.js → capability-txATtKV4.js} +3 -2
  24. package/dist/catalog/index.d.ts +1 -1
  25. package/dist/catalog/index.js +1 -1
  26. package/dist/catalog-6yWAX6Ps.js +2 -0
  27. package/dist/{catalog-CYj-mX2O.js → catalog-WHG4kBq7.js} +2 -2
  28. package/dist/{catalog-doc-DdGm82XT.js → catalog-doc-DWtg0gGR.js} +17 -10
  29. package/dist/{catalog-DWF5cYqB.js → catalog-tZUyOfOv.js} +4 -4
  30. package/dist/claude-agent/index.d.ts +4 -4
  31. package/dist/claude-agent/index.js +4 -5
  32. package/dist/clerk/index.d.ts +3 -3
  33. package/dist/clerk/index.js +8 -33
  34. package/dist/cli/bin.js +1 -1
  35. package/dist/cli/index.d.ts +3 -3
  36. package/dist/cli/index.js +3 -3
  37. package/dist/cloud/index.d.ts +4 -4
  38. package/dist/cloud/index.js +9 -15
  39. package/dist/{cloud-CfwZ39Rl.js → cloud-C7bSDgX4.js} +2 -2
  40. package/dist/{cloud-DWLXO2af.js → cloud-PeBN3IEn.js} +5 -5
  41. package/dist/{collect-DSTE3ml9.js → collect-2SrB7lfk.js} +6 -8
  42. package/dist/collect-Bw2Jdq1q.js +2 -0
  43. package/dist/{collect-CHB22Sx4.js → collect-CQx4hX4N.js} +3 -3
  44. package/dist/{commands-BeaGNj_o.js → commands-Cpip4ULx.js} +13 -13
  45. package/dist/{compact-y6vfu2_f.js → compact-CAf557ZB.js} +11 -1
  46. package/dist/compile/index.d.ts +1 -1
  47. package/dist/compile/index.js +1 -1
  48. package/dist/{compile-Ba4blROR.js → compile-CcEu2ZQ1.js} +6 -5
  49. package/dist/{compile-BkRyBDBw.d.ts → compile-CtTP7eur.d.ts} +2 -2
  50. package/dist/{config-BJiM-xAm.js → config-BIjREpyE.js} +4 -4
  51. package/dist/{config-ir40y8m0.js → config-DLt6BvV7.js} +2 -2
  52. package/dist/{config-report-CdCgbRnV.js → config-report--Xb9APJS.js} +5 -6
  53. package/dist/{connection-CU8MQxRi.js → connection-DUsczpB5.js} +3 -2
  54. package/dist/constants-DcJABbLW.js +20 -0
  55. package/dist/{context-Bcy85rGi.js → context-DieZVJXu.js} +16 -5
  56. package/dist/convex/index.d.ts +4 -4
  57. package/dist/convex/index.js +14 -16
  58. package/dist/create-BBO24vj6.js +324 -0
  59. package/dist/{credential-8P81ff4u.js → credential-kue0qpbm.js} +4 -4
  60. package/dist/deciding-columns-Sq12mEA6.js +123 -0
  61. package/dist/delegation-input-FTxMK3ji.js +19 -0
  62. package/dist/denied-text-DfRk15uw.d.ts +19 -0
  63. package/dist/{describe-DMYiCjJV.d.ts → describe-C3ldA9os.d.ts} +11 -2
  64. package/dist/{describe-B_gVZEVi.js → describe-Cgkp7eP0.js} +5 -4
  65. package/dist/{diff-C9RDjjhs.js → diff-Cnghh_Ip.js} +2 -2
  66. package/dist/{diff-2VaeChzX.js → diff-rpqoe7Ag.js} +9 -9
  67. package/dist/{doctor-Djh6JDEk.js → doctor-CuVJvhV_.js} +2 -2
  68. package/dist/doctor-owlv6ddh.js +2166 -0
  69. package/dist/drizzle/index.d.ts +2 -2
  70. package/dist/drizzle/index.js +6 -14
  71. package/dist/elysia/index.d.ts +4 -4
  72. package/dist/elysia/index.js +7 -7
  73. package/dist/{errors-DPdqI50v.d.ts → errors-OD_4c__H.d.ts} +2 -2
  74. package/dist/{errors-Cz5zn0mW.js → errors-drnfxYtm.js} +3 -3
  75. package/dist/{evaluations-tz6D9A2G.js → evaluations-C9YJsv3H.js} +45 -7
  76. package/dist/eve/index.d.ts +5 -5
  77. package/dist/eve/index.js +5 -5
  78. package/dist/express/index.d.ts +4 -4
  79. package/dist/express/index.js +8 -7
  80. package/dist/fastify/index.d.ts +15 -5
  81. package/dist/fastify/index.js +9 -29
  82. package/dist/fields-fwfXN01n.js +1016 -0
  83. package/dist/{files-DWUN9PzI.js → files-D_JIzUrP.js} +12 -3
  84. package/dist/{fixtures-ht28Cplr.js → fixtures-h2eG2OZV.js} +5 -6
  85. package/dist/{from-snapshot-CTLijvdm.js → from-snapshot-7REQZe0H.js} +32 -22
  86. package/dist/{generate-CH7ThJ14.js → generate-CNU1pIOo.js} +1 -3
  87. package/dist/grantee-CXY-0C87.js +254 -0
  88. package/dist/grantee-conditions-MQs5NIuX.js +270 -0
  89. package/dist/grantee-match-fxYp9Nmt.js +141 -0
  90. package/dist/{helpers-H_KARDVC.js → helpers-C9YmyBIa.js} +7 -6
  91. package/dist/hono/index.d.ts +4 -4
  92. package/dist/hono/index.js +8 -8
  93. package/dist/hosted-CBHgkzDl.js +655 -0
  94. package/dist/{http-SO7qGttf.js → http-BBoKefeS.js} +35 -2
  95. package/dist/{http-BIhmLfCc.js → http-BEbdMZ05.js} +2 -24
  96. package/dist/{rls-import-4lLW_pbb.js → import-BFIlhetD.js} +86 -80
  97. package/dist/{openapi-import-cmwetbzw.js → import-UHk1N7vH.js} +6 -7
  98. package/dist/{index-C8z4RjQV.d.ts → index-BwMe94Xq.d.ts} +1 -1
  99. package/dist/{index-0nNqHspG.d.ts → index-DgM7w96K.d.ts} +2 -2
  100. package/dist/{index-C7Tw7MaW.d.ts → index-Dz7didpC.d.ts} +3 -3
  101. package/dist/{index-BNc7Wer_.d.ts → index-UdVQgq48.d.ts} +105 -38
  102. package/dist/index.d.ts +15 -13
  103. package/dist/index.js +22 -22
  104. package/dist/{instance-options-jARdwfPN.d.ts → instance-options-plkrsAog.d.ts} +1 -1
  105. package/dist/{json-schema-BsAflUGW.js → json-schema-DBkdUuCO.js} +1 -3
  106. package/dist/jwt/index.d.ts +4 -4
  107. package/dist/jwt/index.js +13 -13
  108. package/dist/{kernel-_RRHmnMY.js → kernel-CB3LrIJM.js} +81 -32
  109. package/dist/kysely/index.d.ts +2 -2
  110. package/dist/kysely/index.js +6 -14
  111. package/dist/{live-options-H2eG8dfJ.js → live-options-BaAFCIiu.js} +16 -3
  112. package/dist/load-B_shHrmd.js +2 -0
  113. package/dist/{load-DhWEB9P1.js → load-C3_oTHyO.js} +11 -3
  114. package/dist/{manifest-iaoBXHKc.js → manifest-BngWKryL.js} +5 -18
  115. package/dist/{map-claims-Z4QZOiFF.js → map-claims-AVlBaJoa.js} +7 -16
  116. package/dist/{map-error-pgUWNNtG.js → map-error-BE27PYkE.js} +5 -5
  117. package/dist/{markers-B0hYLvMD.js → markers-CiwAOZtO.js} +6 -2
  118. package/dist/{may-use-DndQ5tQ-.js → may-use-BOn_dR_w.js} +4 -3
  119. package/dist/mcp/index.d.ts +26 -9
  120. package/dist/mcp/index.js +456 -446
  121. package/dist/{rls-migrate-CN4TlJTO.js → migrate-BwlB5-Wk.js} +75 -15
  122. package/dist/nest/index.d.ts +4 -4
  123. package/dist/nest/index.js +11 -12
  124. package/dist/next/index.d.ts +31 -8
  125. package/dist/next/index.js +29 -33
  126. package/dist/next/plugin.d.ts +1 -1
  127. package/dist/next/plugin.js +1 -1
  128. package/dist/node/index.d.ts +4 -4
  129. package/dist/node/index.js +4 -4
  130. package/dist/ocsf-uYFXGVw2.js +115 -0
  131. package/dist/openai/index.d.ts +5 -5
  132. package/dist/openai/index.js +4 -4
  133. package/dist/openapi/index.d.ts +3 -3
  134. package/dist/openapi/index.js +1 -1
  135. package/dist/{openapi-CqqEbHsL.js → openapi-BJdBmYDG.js} +19 -23
  136. package/dist/{openapi-BqRBvAng.js → openapi-DBzHQbov.js} +2 -5
  137. package/dist/{openapi-CQTsgKoB.js → openapi-DcQ1Kg40.js} +3 -3
  138. package/dist/orpc/index.d.ts +5 -5
  139. package/dist/orpc/index.js +9 -11
  140. package/dist/otel/index.d.ts +2 -2
  141. package/dist/otel/index.js +26 -23
  142. package/dist/output-files-CgIsvdSa.js +140 -0
  143. package/dist/{rls-ownership-DcYlZ09B.js → ownership-BgnbOJFT.js} +387 -379
  144. package/dist/{package-root-zGkxO3oN.js → package-root-DtNnpmUd.js} +3 -2
  145. package/dist/{parse-BuyjxhZV.js → parse-CVFQHk6c.js} +3 -3
  146. package/dist/{parse-local-manifest-BrMozJCo.js → parse-local-manifest-C-q02Pal.js} +2 -4
  147. package/dist/{parse-local-manifest-JLnaBH0S.d.ts → parse-local-manifest-DvYUR0QL.d.ts} +1 -1
  148. package/dist/pdp/index.d.ts +2 -2
  149. package/dist/pdp/index.js +8 -9
  150. package/dist/{permdock-CbgvLnuo.js → permdock-L26udHSk.js} +1387 -1220
  151. package/dist/{rls-fields-CZOMlwHl.js → permission-keys-B26jeyUv.js} +1268 -2053
  152. package/dist/permission-registry-BsblpB-z.js +385 -0
  153. package/dist/{permissions-DttnqqxC.d.ts → permission-types-Dg39z9Kv.d.ts} +59 -31
  154. package/dist/{permissions-RJrovw98.js → permissions-CCJ6lmxB.js} +3 -3
  155. package/dist/{permissions-CDgvKG5L.d.ts → permissions-COH-KRgT.d.ts} +2 -2
  156. package/dist/{policy-IB6yxpC3.d.ts → policy-types-sp9P1iIV.d.ts} +661 -582
  157. package/dist/{policy-D2W7uv19.d.ts → policy-ur0BBK_e.d.ts} +2 -2
  158. package/dist/{powersync-DE19b9dT.js → powersync-BFSbSElQ.js} +2 -2
  159. package/dist/powersync-DCDgZgfZ.js +2 -0
  160. package/dist/{powersync-Dv1_aWF7.js → powersync-cZe4kzhL.js} +26 -27
  161. package/dist/prisma/index.d.ts +1 -1
  162. package/dist/prisma/index.js +6 -12
  163. package/dist/{problem-B43ztKIm.js → problem-CnWraVhC.js} +8 -7
  164. package/dist/{problem-details-_AMOYz-w.js → problem-details-DECUnXAn.js} +2 -2
  165. package/dist/{problem-details-DX075l9V.d.ts → problem-details-rIIo8B2C.d.ts} +1 -1
  166. package/dist/{protected-BdnIEFkY.d.ts → protected-B3_P7xuw.d.ts} +9 -6
  167. package/dist/{protected-utU-SLuy.js → protected-BN7BUdY1.js} +20 -8
  168. package/dist/{provider-CSQd7m92.js → provider-Bi-0HNL3.js} +23 -10
  169. package/dist/{provider-DZY281jO.d.ts → provider-kwHC9CZD.d.ts} +1 -1
  170. package/dist/{provider-store-Cfbvo4DE.js → provider-store-Ctt-81Ni.js} +6 -3
  171. package/dist/react/index.d.ts +7 -7
  172. package/dist/react/index.js +5 -5
  173. package/dist/react/provider-client.d.ts +1 -1
  174. package/dist/react/provider-client.js +1 -1
  175. package/dist/react-native/index.d.ts +20 -11
  176. package/dist/react-native/index.js +33 -17
  177. package/dist/{refs-KYb4ntaz.js → refs-f3imMjNW.js} +1 -1
  178. package/dist/relation-walk-BXnlLtg2.js +186 -0
  179. package/dist/relations-CvmSpG67.js +163 -0
  180. package/dist/{replay-CYyiLiwO.d.ts → replay-COpmZUfx.d.ts} +1 -1
  181. package/dist/request-context-BVM7aWNs.js +71 -0
  182. package/dist/request-context-C2_1lchh.d.ts +5 -0
  183. package/dist/resource-relations-D1Un3pcz.js +243 -0
  184. package/dist/retire-BFcxL6un.js +240 -0
  185. package/dist/{rls-P-BeBx0n.js → rls-55DQTuf5.js} +14 -2
  186. package/dist/{rls-DiinlRML.js → rls-BEktUaqg.js} +884 -484
  187. package/dist/{policy-xyWg7QdR.js → role-builder-B4GbKM-i.js} +235 -541
  188. package/dist/{rpc-DL9Sqvb1.js → rpc-nYC3cR_u.js} +15 -5
  189. package/dist/{run-BWc9qqvE.js → run-DMcNW_8T.js} +3 -3
  190. package/dist/{runtime-CB8gQFvS.js → runtime-D_tMXnsq.js} +1 -1
  191. package/dist/{saas-DhpJjnBA.js → saas-DtaA4JuW.js} +9 -8
  192. package/dist/{openapi-schema--ARjyfQr.js → schema-Bol6gqXA.js} +3 -5
  193. package/dist/{schema-D3MnDMxa.js → schema-DjQBcAP9.js} +4 -2
  194. package/dist/scim/index.d.ts +1 -1
  195. package/dist/scim/index.js +1 -1
  196. package/dist/{scim-BFGBBAqR.js → scim-vFR1O5oG.js} +6 -12
  197. package/dist/{scopes-CVdPrWN-.js → scopes-tvpa34ep.js} +10 -2
  198. package/dist/server/index.d.ts +18 -8
  199. package/dist/server/index.js +8 -8
  200. package/dist/{server-DlZ28Oz5.js → server-ZYEHtNHS.js} +4 -4
  201. package/dist/{create-B1d519XK.d.ts → server-types-DdqBwZN_.d.ts} +69 -33
  202. package/dist/shared-1uhI-e-b.js +294 -0
  203. package/dist/{shared-DRu8VFVM.js → shared-JhMeOsDF.js} +1 -1
  204. package/dist/{sink-Bd9PSyfq.js → sink-BTtmfPnE.js} +1 -1
  205. package/dist/{sink-B1fZzIMf.d.ts → sink-CPN4zLfs.d.ts} +1 -1
  206. package/dist/{skills-Biq5uup3.js → skills-BZdRQkxs.js} +4 -3
  207. package/dist/{skills-C5CbhhpG.js → skills-Dle4ZoLF.js} +2 -2
  208. package/dist/{snapshot-Enxd0n-s.js → snapshot-Dc9CHPME.js} +116 -13
  209. package/dist/{snapshot-cache-D6jLelln.js → snapshot-cache-Cod40D-X.js} +1 -1
  210. package/dist/{snapshot-cache-B-LxUahj.d.ts → snapshot-cache-J5T7t_vD.d.ts} +1 -1
  211. package/dist/solid/index.d.ts +22 -22
  212. package/dist/solid/index.js +40 -10
  213. package/dist/{sources-4p0-4xQm.js → sources-B1-b-R0t.js} +25 -26
  214. package/dist/{sources-BdOYLw9j.d.ts → sources-Dljy06zL.d.ts} +6 -2
  215. package/dist/{sql-xdg5f4Fi.js → sql-t8teWOfo.js} +19 -3
  216. package/dist/{src-BDwEZWrZ.js → src-Bb7no-hS.js} +194 -123
  217. package/dist/ssf/index.d.ts +3 -3
  218. package/dist/ssf/index.js +58 -61
  219. package/dist/store-9KO4BlkB.d.ts +147 -0
  220. package/dist/{store-DMAWwAJV.js → store-ILkLUj_o.js} +4 -4
  221. package/dist/{store-options-ByhZq1jV.js → store-options-CbUHDoSe.js} +16 -7
  222. package/dist/{stores-BT2pSCub.js → stores-BHXdSbw9.js} +7 -3
  223. package/dist/stores-Cxz_80g-.d.ts +31 -0
  224. package/dist/{stream-DDpvynSB.js → stream-BMui98KK.js} +2 -1
  225. package/dist/{stream-D1RXubw2.d.ts → stream-Dwsg6WwE.d.ts} +2 -2
  226. package/dist/{subject-settings-BwBmCdTR.js → subject-settings-CkEwrw3W.js} +23 -5
  227. package/dist/supabase/index.d.ts +4 -4
  228. package/dist/supabase/index.js +3 -3
  229. package/dist/supabase/middleware.d.ts +11 -5
  230. package/dist/supabase/middleware.js +10 -7
  231. package/dist/{supabase-C0qESOa-.js → supabase-C1TWlnYt.js} +36 -52
  232. package/dist/{supabase-s4o9s1O1.js → supabase-Dbqr141s.js} +2 -2
  233. package/dist/supabase-hook-BULg7Ut_.js +2 -0
  234. package/dist/{supabase-hook-ntETYCQu.js → supabase-hook-Cva3ikXz.js} +730 -781
  235. package/dist/{supautils-u8jXTGrt.js → supautils-B6HYL9eL.js} +2 -2
  236. package/dist/svelte/Protected.svelte +9 -2
  237. package/dist/svelte/index.d.ts +6 -6
  238. package/dist/svelte/index.js +25 -11
  239. package/dist/svelte/runtime.d.ts +10 -3
  240. package/dist/svelte/runtime.js +4 -3
  241. package/dist/svelte/source.d.ts +6 -6
  242. package/dist/svelte/source.js +4 -4
  243. package/dist/{validity-uOp8UpYn.js → tenancy-DshjqY0n.js} +3 -39
  244. package/dist/terminal/index.d.ts +5 -5
  245. package/dist/terminal/index.js +18 -34
  246. package/dist/testing/index.d.ts +89 -77
  247. package/dist/testing/index.js +1276 -1262
  248. package/dist/testing/saas/index.d.ts +4 -4
  249. package/dist/testing/saas/index.js +2 -2
  250. package/dist/testing/saas/permissions.d.ts +1 -1
  251. package/dist/testing/saas/permissions.js +1 -1
  252. package/dist/thenable-QSmvt-vZ.js +65 -0
  253. package/dist/{token-CIWxJOCh.js → token-Bx9qy30p.js} +1 -1
  254. package/dist/tool-refusal-CQ7OEia9.js +41 -0
  255. package/dist/trpc/index.d.ts +5 -5
  256. package/dist/trpc/index.js +7 -8
  257. package/dist/{types-DbjRN55U.d.ts → types-7rJVLWe5.d.ts} +82 -4
  258. package/dist/{types-aqOHTHcp.d.ts → types-Br9IXUBG.d.ts} +1 -1
  259. package/dist/types-ByUo56un.d.ts +88 -0
  260. package/dist/{types-Cq_H8N_X.d.ts → types-C0dee0Qf.d.ts} +2 -2
  261. package/dist/{types-DxiCGmmd.d.ts → types-CIlTojhq.d.ts} +2 -2
  262. package/dist/{types-QCuYJh4q.d.ts → types-CUcFZfpU.d.ts} +1 -1
  263. package/dist/{types-C97IskBw.d.ts → types-CqrjB9o6.d.ts} +1 -1
  264. package/dist/{types-BnIEz1sU.d.ts → types-DHrmBJLH.d.ts} +24 -6
  265. package/dist/{types-Dnemwd77.d.ts → types-DpWfQdSh.d.ts} +5 -1
  266. package/dist/{types-Bvc4oWT6.d.ts → types-DvupZE0w.d.ts} +1 -1
  267. package/dist/unplugin/index.d.ts +1 -1
  268. package/dist/unplugin/index.js +1 -1
  269. package/dist/{usage-B0YuTQRO.js → usage-4G6t643F.js} +2 -2
  270. package/dist/{usage-ItS7nLcl.js → usage-CG9nOYZw.js} +7 -7
  271. package/dist/usage-iFLJ0-rr.js +2 -0
  272. package/dist/{validation-error-Ba264OaJ.d.ts → validation-error-BSSw0l_8.d.ts} +1 -1
  273. package/dist/{validation-error-CnjZ4t92.js → validation-error-ZfUHbKvf.js} +1 -1
  274. package/dist/validity-dVrUEPJt.js +62 -0
  275. package/dist/{verifier-BxBo6I44.js → verifier-DMr_Zmb_.js} +51 -15
  276. package/dist/{rls-verify-CMv9H3wV.js → verify-BztUB3GX.js} +668 -239
  277. package/dist/{version-BvacVTZR.js → version-BEogC-rB.js} +1 -1
  278. package/dist/{views-Soe7bGSC.js → views-CJsrBS1f.js} +23 -1
  279. package/dist/{vocabulary-DA8a8zif.d.ts → vocabulary-hhEFLFoL.d.ts} +15 -6
  280. package/dist/vue/index.d.ts +24 -19
  281. package/dist/vue/index.js +24 -8
  282. package/dist/watch-C8TpsAl4.js +2 -0
  283. package/dist/{watch-DVBJ9cBq.js → watch-zeucB7eF.js} +6 -6
  284. package/dist/webmcp/index.d.ts +2 -2
  285. package/dist/webmcp/index.js +13 -37
  286. package/dist/wrap-Cr93qqdP.d.ts +14 -0
  287. package/dist/wrap-DWsU_5Bd.js +26 -0
  288. package/package.json +8 -8
  289. package/schemas/catalog-v1.json +6 -0
  290. package/skills/permdock-credentials/SKILL.md +1 -1
  291. package/skills/permdock-credentials/references/tokens-keys-links.md +7 -2
  292. package/skills/permdock-data/references/queries-and-rls.md +4 -0
  293. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +1 -0
  294. package/skills/permdock-wire/SKILL.md +2 -2
  295. package/skills/permdock-wire/references/adapters.md +9 -1
  296. package/skills/permdock-wire/references/policy-options.md +10 -1
  297. package/dist/catalog-CRW5Mx_B.js +0 -2
  298. package/dist/collect-DSWOk19R.js +0 -2
  299. package/dist/create-CMwIl-w2.js +0 -253
  300. package/dist/delegation-D8pUEuce.js +0 -103
  301. package/dist/doctor-DvH0IQff.js +0 -1194
  302. package/dist/doctor-collect-CjdO0wQX.js +0 -665
  303. package/dist/evaluation-items-CfCCejQd.js +0 -40
  304. package/dist/fields-BMl1RxoX.js +0 -26
  305. package/dist/grantee-Cv5Sogfv.js +0 -602
  306. package/dist/hosted-DJQw46hn.js +0 -266
  307. package/dist/instance-options-Dhhcnm3y.js +0 -22
  308. package/dist/load-DwJUafYN.js +0 -2
  309. package/dist/map-AcxK9o_D.js +0 -147
  310. package/dist/permissions-DVoF6dMt.js +0 -662
  311. package/dist/powersync-CrBX8hY6.js +0 -2
  312. package/dist/protected-xAr24FEC.d.ts +0 -40
  313. package/dist/relations-cjOL01hZ.js +0 -505
  314. package/dist/rls-graph-CHwx0V8q.js +0 -435
  315. package/dist/rls-shared-Cewd_-zI.js +0 -495
  316. package/dist/store-jOBYpiXC.d.ts +0 -36
  317. package/dist/stores-C0IMQrGI.d.ts +0 -52
  318. package/dist/supabase-config-Bj3iDH2I.js +0 -472
  319. package/dist/supabase-hook-gd3s8bxB.js +0 -2
  320. package/dist/thenable-okc2xDsj.js +0 -10
  321. package/dist/types-CKNSyIf_.d.ts +0 -52
  322. package/dist/usage-DorAJiU_.js +0 -2
  323. package/dist/watch-BwxLTYMZ.js +0 -2
@@ -1,14 +1,16 @@
1
- import { C as Policy, Nr as Principal, Tr as AuthorizationDetail } from "../policy-IB6yxpC3.js";
2
- import { f as Permission } from "../permissions-DttnqqxC.js";
3
- import { f as ApprovalStore } from "../types-aqOHTHcp.js";
4
- import { a as ProblemDetails } from "../errors-DPdqI50v.js";
5
- import { t as InstanceOptions } from "../instance-options-jARdwfPN.js";
1
+ import { E as Policy, Or as Principal, br as AuthorizationDetail } from "../policy-types-sp9P1iIV.js";
2
+ import { d as Permission } from "../permission-types-Dg39z9Kv.js";
3
+ import { f as ApprovalStore } from "../types-Br9IXUBG.js";
4
+ import { a as ProblemDetails } from "../errors-OD_4c__H.js";
5
+ import { t as InstanceOptions } from "../instance-options-plkrsAog.js";
6
6
  //#region src/a2a/types.d.ts
7
7
  type A2aAuth = {
8
8
  readonly clientId?: string;
9
9
  readonly scopes?: readonly string[];
10
10
  readonly extra?: {
11
11
  readonly authorizationDetails?: readonly AuthorizationDetail[];
12
+ /** The RFC 9396 claim name; read when `authorizationDetails` is absent. */
13
+ readonly authorization_details?: readonly AuthorizationDetail[];
12
14
  readonly approval?: string;
13
15
  };
14
16
  };
package/dist/a2a/index.js CHANGED
@@ -1,13 +1,15 @@
1
- import { t as compact } from "../compact-y6vfu2_f.js";
2
- import { n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-Cz5zn0mW.js";
3
- import { t as canonicalJson } from "../canonical-json-DemiK4Vp.js";
1
+ import { t as compact } from "../compact-CAf557ZB.js";
2
+ import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
3
+ import { n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-drnfxYtm.js";
4
+ import { t as canonicalJson } from "../canonical-json-CFKyFOke.js";
4
5
  import { t as bytesToBase64Url } from "../sha256-BO0swRXL.js";
5
- import { i as scopesReaching, r as challengeScope } from "../permdock-CbgvLnuo.js";
6
+ import { a as scopesReaching, i as hasScope, r as challengeScope } from "../permdock-L26udHSk.js";
6
7
  import { n as resourceRef } from "../resource-ref-CaS9yVPi.js";
7
- import { t as mayUse } from "../may-use-DndQ5tQ-.js";
8
- import { d as wwwAuthenticate, n as bearerChallenge } from "../problem-B43ztKIm.js";
9
- import { t as instanceOptions } from "../instance-options-Dhhcnm3y.js";
10
- import { n as createAgentKernel } from "../kernel-_RRHmnMY.js";
8
+ import { t as mayUse } from "../may-use-BOn_dR_w.js";
9
+ import { f as wwwAuthenticate, r as bearerChallenge } from "../problem-CnWraVhC.js";
10
+ import { r as instanceOptions } from "../build-instance-DIIV9DbC.js";
11
+ import { n as createAgentKernel } from "../kernel-CB3LrIJM.js";
12
+ import { t as delegationFrom } from "../delegation-input-FTxMK3ji.js";
11
13
  //#region src/a2a/create.ts
12
14
  function firstScheme(options) {
13
15
  return Object.keys(options.securitySchemes)[0];
@@ -75,29 +77,20 @@ function cardOf(options, skills) {
75
77
  });
76
78
  }
77
79
  const DEFAULT_MODES = ["text/plain"];
78
- function delegationOf(auth) {
79
- return compact({
80
- scopes: auth.scopes,
81
- authorizationDetails: auth.extra?.authorizationDetails
82
- });
83
- }
84
80
  function actorOf(auth) {
85
81
  return typeof auth.clientId === "string" && auth.clientId !== "" ? {
86
82
  id: auth.clientId,
87
83
  kind: "oauth-client"
88
84
  } : void 0;
89
85
  }
90
- function hasScope(auth, scopes) {
91
- return scopes.some((scope) => auth.scopes?.includes(scope) === true);
92
- }
93
- const LOAD_FAILED = {
86
+ const LOAD_FAILED = freezeDeep({
94
87
  outcome: "denied",
95
88
  denials: [{
96
89
  role: null,
97
90
  reason: "validation"
98
91
  }],
99
92
  alternatives: []
100
- };
93
+ });
101
94
  const NO_SUBJECT = {
102
95
  principal: null,
103
96
  context: {}
@@ -174,7 +167,7 @@ function createPermDock(policy, options) {
174
167
  const kernel = createAgentKernel(policy, compact({
175
168
  subject: options.subject,
176
169
  actor: actorOf,
177
- delegation: delegationOf,
170
+ delegation: (auth) => delegationFrom(auth.scopes, auth.extra),
178
171
  tenant: options.tenant,
179
172
  store: options.store,
180
173
  adapter: "a2a",
@@ -207,7 +200,7 @@ function createPermDock(policy, options) {
207
200
  detail: "unknown skill"
208
201
  }
209
202
  };
210
- if (!hasScope(auth, scopesReaching(policy, config.permission))) return missingScope(config.permission, challengeScope(policy, config.permission));
203
+ if (!hasScope(auth.scopes, scopesReaching(policy, config.permission))) return missingScope(config.permission, challengeScope(policy, config.permission));
211
204
  const checked = await kernel.check(compact({
212
205
  permission: config.permission,
213
206
  data: config.data
@@ -1,8 +1,11 @@
1
- import { C as Policy, Nr as Principal, kr as Delegation } from "../policy-IB6yxpC3.js";
2
- import { f as Permission } from "../permissions-DttnqqxC.js";
3
- import { f as ApprovalStore } from "../types-aqOHTHcp.js";
4
- import { t as InstanceOptions } from "../instance-options-jARdwfPN.js";
5
- import { t as ToolMap } from "../types-Bvc4oWT6.js";
1
+ import { E as Policy, Or as Principal, wr as Delegation } from "../policy-types-sp9P1iIV.js";
2
+ import { d as Permission } from "../permission-types-Dg39z9Kv.js";
3
+ import { f as ApprovalStore } from "../types-Br9IXUBG.js";
4
+ import { t as InstanceOptions } from "../instance-options-plkrsAog.js";
5
+ import { n as OnDeniedText, t as DeniedTextEvent } from "../denied-text-DfRk15uw.js";
6
+ import { t as RequestContext } from "../request-context-C2_1lchh.js";
7
+ import { t as ToolMap } from "../types-DvupZE0w.js";
8
+ import { n as PermDockWrap } from "../wrap-Cr93qqdP.js";
6
9
  //#region src/ai-sdk/create.d.ts
7
10
  type AiSdkContext = {
8
11
  readonly runtimeContext?: unknown;
@@ -22,6 +25,15 @@ type AiSdkPermDockOptions<TUser = unknown> = InstanceOptions & {
22
25
  * pass through both, to the application's own `toolApproval`.
23
26
  */
24
27
  readonly unmapped?: "deny" | "allow";
28
+ /**
29
+ * Request values merged into `subject.context`, under `policy.context`.
30
+ * Only values the server derived belong here, never model output.
31
+ */
32
+ readonly context?: (context: AiSdkContext) => RequestContext | undefined | Promise<RequestContext | undefined>;
33
+ /** Wraps each instance; build it with `wrapPermDock` to cover derived instances. */
34
+ readonly wrap?: PermDockWrap;
35
+ /** Replaces the denial reason or approval summary text; nothing else. */
36
+ readonly onDenied?: OnDeniedText;
25
37
  };
26
38
  /** What an AI SDK tool approval function may return; `undefined` is `not-applicable`. */
27
39
  type ToolApprovalResult = ToolApprovalStatus | undefined | "not-applicable" | "denied" | "user-approval" | {
@@ -92,4 +104,4 @@ type AiSdkPermDock = {
92
104
  };
93
105
  export declare function createPermDock<TUser, TPrincipal extends Principal = Principal>(policy: Policy<TUser, TPrincipal>, options: AiSdkPermDockOptions<TUser>): AiSdkPermDock;
94
106
  //#endregion
95
- export type { AiSdkContext, AiSdkPermDock, AiSdkPermDockOptions, AppToolApproval, LanguageModelMiddleware, NeedsApprovalOptions, ToolApprovalCall, ToolApprovalResult, ToolApprovalStatus };
107
+ export type { AiSdkContext, AiSdkPermDock, AiSdkPermDockOptions, AppToolApproval, DeniedTextEvent, LanguageModelMiddleware, NeedsApprovalOptions, OnDeniedText, ToolApprovalCall, ToolApprovalResult, ToolApprovalStatus };
@@ -1,7 +1,7 @@
1
- import { t as compact } from "../compact-y6vfu2_f.js";
2
- import { n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-Cz5zn0mW.js";
3
- import { t as instanceOptions } from "../instance-options-Dhhcnm3y.js";
4
- import { n as createAgentKernel, t as approvalTokenOf } from "../kernel-_RRHmnMY.js";
1
+ import { t as compact } from "../compact-CAf557ZB.js";
2
+ import { n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-drnfxYtm.js";
3
+ import { r as instanceOptions } from "../build-instance-DIIV9DbC.js";
4
+ import { n as createAgentKernel, t as approvalTokenOf } from "../kernel-CB3LrIJM.js";
5
5
  //#region src/ai-sdk/create.ts
6
6
  const APPROVAL_STATUSES = /* @__PURE__ */ new Set([
7
7
  "approved",
@@ -67,7 +67,10 @@ function createPermDock(policy, options) {
67
67
  actor: options.actor,
68
68
  delegation: options.delegation,
69
69
  tenant: options.tenant,
70
- store: options.store
70
+ store: options.store,
71
+ context: options.context,
72
+ wrap: options.wrap,
73
+ onDenied: options.onDenied
71
74
  }),
72
75
  ...instanceOptions(options),
73
76
  subject: options.subject,
@@ -0,0 +1,59 @@
1
+ import { a as assertSafeKey, i as validateSync } from "./thenable-QSmvt-vZ.js";
2
+ //#region src/core/app-data.ts
3
+ const MAX_META_DEPTH = 8;
4
+ /** Throws unless `value` is plain, prototype-safe JSON at most eight levels deep. */
5
+ function assertMetaValue(value, label, depth = 0) {
6
+ if (depth > MAX_META_DEPTH) throw new Error(`PermDock: ${label} nests deeper than ${MAX_META_DEPTH}`);
7
+ if (value === null || typeof value === "string" || typeof value === "boolean" || typeof value === "number" && Number.isFinite(value)) return;
8
+ if (Array.isArray(value)) {
9
+ for (const item of value) assertMetaValue(item, label, depth + 1);
10
+ return;
11
+ }
12
+ if (typeof value === "object" && Object.getPrototypeOf(value) === Object.prototype) {
13
+ for (const key of Object.keys(value)) {
14
+ assertSafeKey(key, "meta.x key");
15
+ assertMetaValue(Reflect.get(value, key), label, depth + 1);
16
+ }
17
+ return;
18
+ }
19
+ throw new Error(`PermDock: ${label} must be plain JSON`);
20
+ }
21
+ /** Throws unless `value` is a plain JSON object (an `x` field). */
22
+ function assertAppData(value, label) {
23
+ assertMetaValue(value, label, 0);
24
+ if (value === null || typeof value !== "object" || Array.isArray(value)) throw new TypeError(`PermDock: ${label} must be a JSON object`);
25
+ }
26
+ function runSchema(schema, value) {
27
+ const result = validateSync(schema, value);
28
+ if (result.ok) return result;
29
+ return {
30
+ ok: false,
31
+ message: result.issues === void 0 ? "schema must validate synchronously" : result.issues.map((issue) => issue.message).join("; ")
32
+ };
33
+ }
34
+ /**
35
+ * Checks code-declared app data: plain JSON, then the schema when one is
36
+ * given. Throws on failure, because a bad definition is an author error.
37
+ */
38
+ function parseAppData(schema, value, label) {
39
+ assertAppData(value, label);
40
+ if (schema === void 0) return value;
41
+ const result = runSchema(schema, value);
42
+ if (!result.ok) throw new Error(`PermDock: ${label} is invalid: ${result.message}`);
43
+ assertAppData(result.value, label);
44
+ return result.value;
45
+ }
46
+ /**
47
+ * Checks app data read from a source (a membership, a stored custom role).
48
+ * Never throws: `undefined` means the value is dropped, and the caller
49
+ * reports it.
50
+ */
51
+ function readAppData(schema, value) {
52
+ try {
53
+ return parseAppData(schema, value, "x");
54
+ } catch {
55
+ return;
56
+ }
57
+ }
58
+ //#endregion
59
+ export { readAppData as i, assertMetaValue as n, parseAppData as r, assertAppData as t };
@@ -1,3 +1,3 @@
1
- import { _ as approverRelationKey, a as ApprovalListFilter, c as ApprovalRequest, d as ApprovalStatus, f as ApprovalStore, g as approvalQuorum, h as DEFAULT_APPROVAL_TTL_MS, i as ApprovalInspectResult, l as ApprovalResumeFailure, m as ApprovalVerdict, n as ApprovalApprovers, o as ApprovalListQuery, p as ApprovalSubjectSummary, r as ApprovalCancelMeta, s as ApprovalPage, t as APPROVAL_HEADER, u as ApprovalSignature, v as escalationOpenAt } from "../types-aqOHTHcp.js";
2
- import { C as ApproverRelationsOptions, D as ApprovalError, E as approvalsHandler, O as ApprovalErrorCode, S as vouchApproval, T as ApprovalsHandlerOptions, _ as resolveApproval, a as approverPermissions, b as storedApprovalToken, c as decodeApprovalCursor, d as pageApprovals, f as cancelApprovals, g as requestApproval, h as readApprovalHeader, i as memoryApprovalStore, k as isApprovalError, l as encodeApprovalCursor, m as inspectApproval, n as applyApprovalVerdict, o as ApprovalCursorPosition, p as consumeApproval, r as assertApprover, s as approvalPageSize, t as MemoryApprovalStore, u as listAllApprovals, v as resumeDecision, w as approverRelations, x as summariseSubject, y as resumeFromHeader } from "../index-C7Tw7MaW.js";
1
+ import { _ as approverRelationKey, a as ApprovalListFilter, c as ApprovalRequest, d as ApprovalStatus, f as ApprovalStore, g as approvalQuorum, h as DEFAULT_APPROVAL_TTL_MS, i as ApprovalInspectResult, l as ApprovalResumeFailure, m as ApprovalVerdict, n as ApprovalApprovers, o as ApprovalListQuery, p as ApprovalSubjectSummary, r as ApprovalCancelMeta, s as ApprovalPage, t as APPROVAL_HEADER, u as ApprovalSignature, v as escalationOpenAt } from "../types-Br9IXUBG.js";
2
+ import { C as ApproverRelationsOptions, D as ApprovalError, E as approvalsHandler, O as ApprovalErrorCode, S as vouchApproval, T as ApprovalsHandlerOptions, _ as resolveApproval, a as approverPermissions, b as storedApprovalToken, c as decodeApprovalCursor, d as pageApprovals, f as cancelApprovals, g as requestApproval, h as readApprovalHeader, i as memoryApprovalStore, k as isApprovalError, l as encodeApprovalCursor, m as inspectApproval, n as applyApprovalVerdict, o as ApprovalCursorPosition, p as consumeApproval, r as assertApprover, s as approvalPageSize, t as MemoryApprovalStore, u as listAllApprovals, v as resumeDecision, w as approverRelations, x as summariseSubject, y as resumeFromHeader } from "../index-Dz7didpC.js";
3
3
  export { APPROVAL_HEADER, type ApprovalApprovers, type ApprovalCancelMeta, type ApprovalCursorPosition, ApprovalError, type ApprovalErrorCode, type ApprovalInspectResult, type ApprovalListFilter, type ApprovalListQuery, type ApprovalPage, type ApprovalRequest, type ApprovalResumeFailure, type ApprovalSignature, type ApprovalStatus, type ApprovalStore, type ApprovalSubjectSummary, type ApprovalVerdict, type ApprovalsHandlerOptions, type ApproverRelationsOptions, DEFAULT_APPROVAL_TTL_MS, type MemoryApprovalStore, applyApprovalVerdict, approvalPageSize, approvalQuorum, approvalsHandler, approverPermissions, approverRelationKey, approverRelations, assertApprover, cancelApprovals, consumeApproval, decodeApprovalCursor, encodeApprovalCursor, escalationOpenAt, inspectApproval, isApprovalError, listAllApprovals, memoryApprovalStore, pageApprovals, readApprovalHeader, requestApproval, resolveApproval, resumeDecision, resumeFromHeader, storedApprovalToken, summariseSubject, vouchApproval };
@@ -1,5 +1,5 @@
1
1
  import { n as isApprovalError, t as ApprovalError } from "../errors-DRnGZHzF.js";
2
- import { a as decodeApprovalCursor, c as pageApprovals, d as approvalQuorum, f as approverRelationKey, i as approvalPageSize, l as APPROVAL_HEADER, n as assertApprover, o as encodeApprovalCursor, p as escalationOpenAt, r as memoryApprovalStore, s as listAllApprovals, t as applyApprovalVerdict, u as DEFAULT_APPROVAL_TTL_MS } from "../store-DMAWwAJV.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 summariseSubject } from "../helpers-H_KARDVC.js";
4
- import { t as approvalsHandler } from "../approvals-DbYAuNkG.js";
2
+ import { a as decodeApprovalCursor, c as pageApprovals, d as approvalQuorum, f as approverRelationKey, i as approvalPageSize, l as APPROVAL_HEADER, n as assertApprover, o as encodeApprovalCursor, p as escalationOpenAt, r as memoryApprovalStore, s as listAllApprovals, t as applyApprovalVerdict, u as DEFAULT_APPROVAL_TTL_MS } from "../store-ILkLUj_o.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 summariseSubject } from "../helpers-C9YmyBIa.js";
4
+ import { t as approvalsHandler } from "../approvals-DZL76lKW.js";
5
5
  export { APPROVAL_HEADER, ApprovalError, DEFAULT_APPROVAL_TTL_MS, applyApprovalVerdict, approvalPageSize, approvalQuorum, approvalsHandler, approverPermissions, approverRelationKey, approverRelations, assertApprover, cancelApprovals, consumeApproval, decodeApprovalCursor, encodeApprovalCursor, escalationOpenAt, inspectApproval, isApprovalError, listAllApprovals, memoryApprovalStore, pageApprovals, readApprovalHeader, requestApproval, resolveApproval, resumeDecision, resumeFromHeader, storedApprovalToken, summariseSubject, vouchApproval };
@@ -1,11 +1,11 @@
1
- import { t as compact } from "./compact-y6vfu2_f.js";
2
- import { t as PROBLEM_BASE } from "./validation-error-CnjZ4t92.js";
3
- import { s as rootMembershipId } from "./scopes-CVdPrWN-.js";
1
+ import { t as compact } from "./compact-CAf557ZB.js";
2
+ import { t as PROBLEM_BASE } from "./validation-error-ZfUHbKvf.js";
3
+ import { s as rootMembershipId } from "./scopes-tvpa34ep.js";
4
4
  import { n as isApprovalError } from "./errors-DRnGZHzF.js";
5
- import { n as hasCredentials } from "./http-SO7qGttf.js";
6
- import { l as unauthenticatedProblem } from "./problem-B43ztKIm.js";
7
- import { n as assertApprover } from "./store-DMAWwAJV.js";
8
- import { m as approverRelations, p as heldPermissions } from "./helpers-H_KARDVC.js";
5
+ import { r as hasCredentials } from "./http-BBoKefeS.js";
6
+ import { u as unauthenticatedProblem } from "./problem-CnWraVhC.js";
7
+ import { n as assertApprover } from "./store-ILkLUj_o.js";
8
+ import { m as approverRelations, p as heldPermissions } from "./helpers-C9YmyBIa.js";
9
9
  //#region src/approvals/handler.ts
10
10
  function problem(status, title, detail, slug) {
11
11
  const body = {
@@ -78,13 +78,18 @@ async function mayResolve(request, subject, requireDistinct, options) {
78
78
  return false;
79
79
  }
80
80
  }
81
- function canView(request, subject) {
81
+ /**
82
+ * The requester, a tenant member for a tenant request, and for a request
83
+ * without a tenant only who answered it or may answer it.
84
+ */
85
+ function canView(request, subject, requireDistinct, options) {
82
86
  const principal = subject.principal;
83
- if (principal === null) return false;
84
- if (request.subject.principal?.id === principal.id) return true;
87
+ if (principal === null) return Promise.resolve(false);
88
+ if (request.subject.principal?.id === principal.id) return Promise.resolve(true);
85
89
  const tenant = request.subject.principal?.tenant;
86
- if (tenant !== void 0) return belongsToTenant(subject, tenant);
87
- return true;
90
+ if (tenant !== void 0) return Promise.resolve(belongsToTenant(subject, tenant));
91
+ if (request.resolvedBy === principal.id || (request.approvals ?? []).some((item) => item.by === principal.id)) return Promise.resolve(true);
92
+ return mayResolve(request, subject, requireDistinct, options);
88
93
  }
89
94
  /**
90
95
  * The tenants whose pending requests the approver may list: the requested one,
@@ -136,16 +141,25 @@ function signedApproval(request, signer, audience) {
136
141
  expiresAt: Math.floor(Date.parse(request.expiresAt) / 1e3)
137
142
  }));
138
143
  }
144
+ const MAX_BODY_BYTES = 16384;
145
+ const MAX_NOTE_LENGTH = 2e3;
146
+ function tooLarge() {
147
+ return problem(413, "Payload too large", `request body exceeds ${String(MAX_BODY_BYTES)} bytes`, "payload-too-large");
148
+ }
149
+ /** An unreadable body is no note; an oversized body or note is refused, never truncated. */
139
150
  async function readNote(request) {
140
151
  const contentType = request.headers.get("content-type") ?? "";
141
- if (request.method !== "POST" || contentType === "") return;
142
- if (!contentType.includes("application/json")) return;
152
+ if (request.method !== "POST" || !contentType.includes("application/json")) return {};
153
+ if (Number(request.headers.get("content-length") ?? 0) > MAX_BODY_BYTES) return { refusal: tooLarge() };
143
154
  try {
144
- const body = await request.json();
145
- if (body !== null && typeof body === "object" && "note" in body && typeof body.note === "string") return body.note;
155
+ const text = await request.text();
156
+ if (text.length > MAX_BODY_BYTES) return { refusal: tooLarge() };
157
+ const body = JSON.parse(text);
158
+ if (body !== null && typeof body === "object" && "note" in body && typeof body.note === "string") return body.note.length > MAX_NOTE_LENGTH ? { refusal: problem(400, "Invalid request", `note exceeds ${String(MAX_NOTE_LENGTH)} characters`, "validation") } : { note: body.note };
146
159
  } catch {
147
- return;
160
+ return {};
148
161
  }
162
+ return {};
149
163
  }
150
164
  function mapError(error, credentials) {
151
165
  if (!isApprovalError(error)) return problem(500, "Internal error", "approval store failed", "internal");
@@ -194,7 +208,7 @@ function approvalsHandler(store, options) {
194
208
  }
195
209
  if (route.kind === "get") {
196
210
  const current = await store.get(route.token);
197
- if (current === null || !canView(current, subject)) return problem(404, "Not found", "approval was not found", "not-found");
211
+ if (current === null || !await canView(current, subject, requireDistinct, options)) return problem(404, "Not found", "approval was not found", "not-found");
198
212
  return json(200, current);
199
213
  }
200
214
  const current = await store.get(route.token);
@@ -202,7 +216,9 @@ function approvalsHandler(store, options) {
202
216
  const relations = await approverRelations(current, subject, options);
203
217
  const permissions = await heldPermissions(current, subject, options.permdockFor);
204
218
  assertApprover(current, subject, requireDistinct, /* @__PURE__ */ new Date(), relations, permissions);
205
- const note = await readNote(request);
219
+ const read = await readNote(request);
220
+ if (read.refusal !== void 0) return read.refusal;
221
+ const note = read.note;
206
222
  const resolved = await store.resolve(route.token, compact({
207
223
  status: route.kind === "approve" ? "approved" : "rejected",
208
224
  by: subject,
@@ -1,4 +1,4 @@
1
- import { n as isReadonlyArray } from "./compact-y6vfu2_f.js";
1
+ import { n as isReadonlyArray } from "./compact-CAf557ZB.js";
2
2
  //#region src/core/approvers.ts
3
3
  /** Approves when the approver holds `permission` in the request's tenant (any role, custom roles included). */
4
4
  function holder(permission) {
@@ -1,6 +1,7 @@
1
- import { u as arazzoFindings } from "./snapshot-Enxd0n-s.js";
2
- import { a as loadModule, o as pickNamed, t as asPermissionTree } from "./load-DhWEB9P1.js";
3
- import { existsSync, readFileSync } from "node:fs";
1
+ import { m as arazzoFindings } from "./snapshot-Dc9CHPME.js";
2
+ import { i as readJsonFile } from "./files-D_JIzUrP.js";
3
+ import { a as loadModule, s as pickNamed, t as asPermissionTree } from "./load-C3_oTHyO.js";
4
+ import { existsSync } from "node:fs";
4
5
  import { resolve } from "node:path";
5
6
  //#region src/cli/arazzo.ts
6
7
  async function runArazzo(input) {
@@ -23,8 +24,8 @@ async function runArazzo(input) {
23
24
  let arazzo;
24
25
  let openapi;
25
26
  try {
26
- arazzo = JSON.parse(readFileSync(arazzoFile, "utf8"));
27
- openapi = JSON.parse(readFileSync(openapiFile, "utf8"));
27
+ arazzo = readJsonFile(arazzoFile);
28
+ openapi = readJsonFile(openapiFile);
28
29
  } catch {
29
30
  return {
30
31
  code: 2,
@@ -1,4 +1,4 @@
1
- import { a as listArg, i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-BeaGNj_o.js";
1
+ import { a as listArg, i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-Cpip4ULx.js";
2
2
  import { defineCommand } from "citty";
3
3
  //#region src/cli/commands/arazzo.ts
4
4
  function arazzo(ctx) {
@@ -36,7 +36,7 @@ function arazzo(ctx) {
36
36
  }
37
37
  },
38
38
  async run({ args: parsed, rawArgs }) {
39
- const result = await (await import("./arazzo-BAgw9ap6.js")).runArazzo({
39
+ const result = await (await import("./arazzo-C4BcskbX.js")).runArazzo({
40
40
  cwd: ctx.cwd,
41
41
  config: ctx.config,
42
42
  rest: parsed._,
@@ -1,6 +1,6 @@
1
- import { C as Policy, Nr as Principal } from "../policy-IB6yxpC3.js";
2
- import { f as ApprovalStore } from "../types-aqOHTHcp.js";
3
- import { t as InstanceOptions } from "../instance-options-jARdwfPN.js";
1
+ import { E as Policy, Or as Principal } from "../policy-types-sp9P1iIV.js";
2
+ import { f as ApprovalStore } from "../types-Br9IXUBG.js";
3
+ import { t as InstanceOptions } from "../instance-options-plkrsAog.js";
4
4
  //#region src/authzen/types.d.ts
5
5
  type AuthzenResourceAdapter = {
6
6
  readonly load?: (id: string) => unknown;
@@ -1,14 +1,153 @@
1
- import { t as compact } from "../compact-y6vfu2_f.js";
2
- import { E as ownGet, _ as listPermissions, c as getResource } from "../permissions-DVoF6dMt.js";
3
- import { t as PROBLEM_BASE } from "../validation-error-CnjZ4t92.js";
4
- import { t as createPermDock$1 } from "../permdock-CbgvLnuo.js";
1
+ import { r as isRecord, t as compact } from "../compact-CAf557ZB.js";
2
+ import { s as ownGet } from "../thenable-QSmvt-vZ.js";
3
+ import { t as PROBLEM_BASE } from "../validation-error-ZfUHbKvf.js";
4
+ import { a as getResource, c as listPermissions } from "../permission-registry-BsblpB-z.js";
5
5
  import { n as resourceRef } from "../resource-ref-CaS9yVPi.js";
6
- import { n as hasCredentials } from "../http-SO7qGttf.js";
7
- import { i as methodNotAllowed, l as unauthenticatedProblem, s as problemResponse, t as batchTooLarge, u as validationProblem } from "../problem-B43ztKIm.js";
8
- import { t as applyApprovalResume } from "../evaluations-tz6D9A2G.js";
9
- import { t as instanceOptions } from "../instance-options-Dhhcnm3y.js";
10
- import { n as permissionLookup } from "../evaluation-items-CfCCejQd.js";
11
- import { a as endsWithPath, c as mergeItem, d as pathnameOf, f as permissionOf, g as userFromEntity, h as tenantOf, i as delegationOf, l as pageOf, m as resourceIdOf, n as UNKNOWN, o as evaluationRow, p as resourceData, r as actorOf, s as isRecord, t as UNAVAILABLE, u as paged } from "../map-AcxK9o_D.js";
6
+ import { r as hasCredentials } from "../http-BBoKefeS.js";
7
+ import { a as methodNotAllowed, c as problemResponse, d as validationProblem, n as batchTooLarge, u as unauthenticatedProblem } from "../problem-CnWraVhC.js";
8
+ import { n as resolveOrNull, t as buildInstance } from "../build-instance-DIIV9DbC.js";
9
+ import { c as itemResourceData, l as permissionLookup, t as applyApprovalResume } from "../evaluations-C9YJsv3H.js";
10
+ //#region src/authzen/map.ts
11
+ const UNKNOWN = {
12
+ outcome: "denied",
13
+ denials: [{
14
+ role: null,
15
+ reason: "no-grant",
16
+ detail: "unknown-permission"
17
+ }],
18
+ alternatives: []
19
+ };
20
+ const UNAVAILABLE = {
21
+ outcome: "denied",
22
+ denials: [{
23
+ role: null,
24
+ reason: "no-grant",
25
+ detail: "resource-unavailable"
26
+ }],
27
+ alternatives: []
28
+ };
29
+ function actionNameOf(item) {
30
+ if (typeof item.action?.name === "string") return item.action.name;
31
+ if (!isRecord(item.action?.properties)) return;
32
+ const scope = item.action.properties["scope"];
33
+ return typeof scope === "string" ? scope : void 0;
34
+ }
35
+ function permissionOf(lookup, item) {
36
+ return lookup(actionNameOf(item), item.resource);
37
+ }
38
+ function resourceData(item) {
39
+ return itemResourceData(item.resource);
40
+ }
41
+ function resourceIdOf(item) {
42
+ const id = item.resource?.id;
43
+ if (typeof id === "string" || typeof id === "number") return String(id);
44
+ }
45
+ function userFromEntity(entity) {
46
+ if (entity === void 0) return null;
47
+ const result = {};
48
+ if (typeof entity.id === "string" || typeof entity.id === "number") result["id"] = String(entity.id);
49
+ if (isRecord(entity.properties)) for (const [key, value] of Object.entries(entity.properties)) {
50
+ if (key === "actor" || key === "delegation") continue;
51
+ result[key] = value;
52
+ }
53
+ return Object.keys(result).length === 0 ? null : result;
54
+ }
55
+ function actorOf(item) {
56
+ const context = isRecord(item.context) ? item.context : {};
57
+ const fromSubject = isRecord(item.subject?.properties) ? item.subject.properties["actor"] : void 0;
58
+ const raw = context["actor"] ?? fromSubject;
59
+ if (!isRecord(raw) || typeof raw["id"] !== "string") return;
60
+ const kind = typeof raw["kind"] === "string" ? raw["kind"] : "oauth-client";
61
+ return {
62
+ id: raw["id"],
63
+ kind
64
+ };
65
+ }
66
+ function delegationOf(item) {
67
+ const context = isRecord(item.context) ? item.context : {};
68
+ const fromSubject = isRecord(item.subject?.properties) ? item.subject.properties["delegation"] : void 0;
69
+ const raw = context["delegation"] ?? fromSubject;
70
+ if (!isRecord(raw)) return;
71
+ const scopes = raw["scopes"];
72
+ const authorizationDetails = raw["authorizationDetails"];
73
+ return compact({
74
+ scopes: Array.isArray(scopes) ? scopes.filter((scope) => typeof scope === "string") : void 0,
75
+ authorizationDetails: Array.isArray(authorizationDetails) ? authorizationDetails : void 0
76
+ });
77
+ }
78
+ function tenantOf(item) {
79
+ if (!isRecord(item.context) || typeof item.context["tenant"] !== "string") return;
80
+ return item.context["tenant"];
81
+ }
82
+ function permdockContext(decision) {
83
+ switch (decision.outcome) {
84
+ case "granted": return { outcome: "granted" };
85
+ case "denied": {
86
+ const unknown = decision.denials.some((denial) => denial.detail === "unknown-permission");
87
+ return compact({
88
+ outcome: "denied",
89
+ denials: decision.denials.map((denial) => ({
90
+ role: denial.role,
91
+ reason: denial.reason
92
+ })),
93
+ reason: unknown ? "unknown-permission" : void 0
94
+ });
95
+ }
96
+ case "approval-required": return {
97
+ outcome: "approval-required",
98
+ token: decision.token
99
+ };
100
+ default: return decision;
101
+ }
102
+ }
103
+ function evaluationContext(decision) {
104
+ return { permdock: permdockContext(decision) };
105
+ }
106
+ function evaluationRow(decision) {
107
+ return {
108
+ decision: decision.outcome === "granted",
109
+ context: evaluationContext(decision)
110
+ };
111
+ }
112
+ function pathnameOf(request) {
113
+ return new URL(request.url).pathname;
114
+ }
115
+ function endsWithPath(pathname, suffix) {
116
+ return pathname === suffix || pathname.endsWith(suffix);
117
+ }
118
+ function mergeItem(shared, item) {
119
+ if (!isRecord(item)) return shared;
120
+ return compact({
121
+ subject: isRecord(item["subject"]) ? item["subject"] : shared.subject,
122
+ action: isRecord(item["action"]) ? item["action"] : shared.action,
123
+ resource: isRecord(item["resource"]) ? item["resource"] : shared.resource,
124
+ context: item["context"] ?? shared.context
125
+ });
126
+ }
127
+ function pageOf(body) {
128
+ const page = isRecord(body["page"]) ? body["page"] : {};
129
+ const raw = typeof page["token"] === "string" ? page["token"] : typeof page["next_token"] === "string" ? page["next_token"] : "0";
130
+ const parsed = Math.trunc(Number(raw));
131
+ const sizeRaw = page["limit"] ?? page["size"];
132
+ const size = typeof sizeRaw === "number" && sizeRaw > 0 ? Math.min(sizeRaw, 200) : 50;
133
+ return {
134
+ offset: Number.isFinite(parsed) && parsed > 0 ? parsed : 0,
135
+ size
136
+ };
137
+ }
138
+ function paged(items, offset, size) {
139
+ const slice = items.slice(offset, offset + size);
140
+ const next = offset + slice.length;
141
+ return {
142
+ results: slice,
143
+ page: {
144
+ next_token: next < items.length ? String(next) : "",
145
+ count: slice.length,
146
+ total: items.length
147
+ }
148
+ };
149
+ }
150
+ //#endregion
12
151
  //#region src/authzen/create.ts
13
152
  function notFound(detail) {
14
153
  return problemResponse({
@@ -56,24 +195,23 @@ const createPermDock = (policy, options) => {
56
195
  };
57
196
  const allowAnonymous = options.anonymous === true;
58
197
  async function authenticate(request) {
59
- let pep;
60
- try {
61
- pep = await options.subject(request);
62
- } catch {
63
- pep = null;
64
- }
198
+ const pep = await resolveOrNull(() => options.subject(request));
65
199
  if ((pep === null || pep === void 0) && !allowAnonymous) return unauthenticatedProblem(hasCredentials(request));
66
200
  return { pep: pep ?? null };
67
201
  }
68
- function instantiate(pep, item) {
202
+ async function instantiate(pep, item) {
69
203
  const trusted = trusts(pep);
70
204
  const user = (trusted ? userFromEntity(item.subject) : null) ?? pep;
71
- return createPermDock$1(policy, user, compact({
72
- actor: trusted ? actorOf(item) : void 0,
73
- delegation: trusted ? delegationOf(item) : void 0,
74
- tenant: tenantOf(item),
75
- ...instanceOptions(options)
76
- }));
205
+ return (await buildInstance({
206
+ policy,
207
+ user,
208
+ sources: options,
209
+ scope: {
210
+ actor: trusted ? actorOf(item) : void 0,
211
+ delegation: trusted ? delegationOf(item) : void 0,
212
+ tenant: tenantOf(item)
213
+ }
214
+ })).permdock;
77
215
  }
78
216
  async function resourceOf(item) {
79
217
  const properties = item.resource?.properties;
@@ -1,5 +1,5 @@
1
- import { Nr as Principal, Pr as Subject, at as DecisionSink, k as RoleBinding, xt as RoleSource } from "../policy-IB6yxpC3.js";
2
- import { m as PermissionTree } from "../permissions-DttnqqxC.js";
1
+ import { N as RoleBinding, Or as Principal, W as DecisionSink, kr as Subject, nt as RoleSource } from "../policy-types-sp9P1iIV.js";
2
+ import { p as PermissionTree } from "../permission-types-Dg39z9Kv.js";
3
3
  import { StandardSchemaV1 } from "@standard-schema/spec";
4
4
  //#region src/better-auth/types.d.ts
5
5
  type BetterAuthPrincipal = Principal & {