permdock 0.1.0 → 0.2.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 (349) hide show
  1. package/README.md +106 -47
  2. package/dist/a2a/index.d.ts +7 -16
  3. package/dist/a2a/index.js +59 -98
  4. package/dist/adapter-context-mlWsVGGg.js +23 -0
  5. package/dist/ai-sdk/index.d.ts +37 -16
  6. package/dist/ai-sdk/index.js +30 -13
  7. package/dist/approvals/index.d.ts +3 -3
  8. package/dist/approvals/index.js +5 -4
  9. package/dist/{approvals-DaxY-Bdg.js → approvals-DbYAuNkG.js} +17 -11
  10. package/dist/approvers-DT4AVyIg.js +52 -0
  11. package/dist/{arazzo-CTeVuXr5.js → arazzo-BAgw9ap6.js} +2 -2
  12. package/dist/{arazzo-aoTkqYsJ.js → arazzo-cmvX2jDe.js} +2 -2
  13. package/dist/authzen/index.d.ts +4 -13
  14. package/dist/authzen/index.js +16 -50
  15. package/dist/better-auth/index.d.ts +20 -3
  16. package/dist/better-auth/index.js +27 -7
  17. package/dist/better-supabase/index.d.ts +206 -0
  18. package/dist/better-supabase/index.js +620 -0
  19. package/dist/bind-CVy3Espv.d.ts +25 -0
  20. package/dist/bind-VnYn2HKq.js +97 -0
  21. package/dist/boundary-BM8a_P6E.js +13 -0
  22. package/dist/boundary-BmHxVH1J.d.ts +15 -0
  23. package/dist/canonical-json-DemiK4Vp.js +26 -0
  24. package/dist/{capability-B68OFnZx.js → capability-4qPdO9gk.js} +7 -5
  25. package/dist/{capability-BDG_nkxt.d.ts → capability-Dq43tT1u.d.ts} +2 -2
  26. package/dist/catalog/index.d.ts +1 -1
  27. package/dist/catalog/index.js +1 -1
  28. package/dist/catalog-BjZSovXQ.js +2 -0
  29. package/dist/{catalog-doc-BSo_Q_-6.js → catalog-doc-Dsc9y7sd.js} +23 -12
  30. package/dist/{catalog-B0E6bggc.js → catalog-h2tlKFkq.js} +2 -2
  31. package/dist/{catalog-H-vFGwWK.js → catalog-z8q6bi_r.js} +4 -4
  32. package/dist/claude-agent/index.d.ts +5 -14
  33. package/dist/claude-agent/index.js +4 -10
  34. package/dist/clerk/index.d.ts +12 -3
  35. package/dist/clerk/index.js +26 -5
  36. package/dist/cli/bin.js +1 -1
  37. package/dist/cli/index.d.ts +3 -3
  38. package/dist/cli/index.js +2 -2
  39. package/dist/clients-C7zLFuWT.d.ts +12 -0
  40. package/dist/clients-DjU5ABMy.js +23 -0
  41. package/dist/cloud/index.d.ts +4 -5
  42. package/dist/cloud/index.js +20 -6
  43. package/dist/{cloud-BNQTrmrr.js → cloud-BGhHS-lY.js} +2 -2
  44. package/dist/{cloud-Cuxr6Czw.js → cloud-Bo3e9Ak3.js} +7 -6
  45. package/dist/{collect-O-tOtbnk.js → collect-DDDv_ESs.js} +194 -42
  46. package/dist/collect-DLlujdHC.js +83 -0
  47. package/dist/collect-rG2IQ3t0.js +2 -0
  48. package/dist/{commands-BMh_Etm2.js → commands-DWOrSQic.js} +16 -12
  49. package/dist/compile/index.d.ts +3 -0
  50. package/dist/compile/index.js +2 -0
  51. package/dist/{compile-D22iwvuV.js → compile-Ba4blROR.js} +85 -30
  52. package/dist/compile-CNnl6uIt.d.ts +94 -0
  53. package/dist/config-BJiM-xAm.js +157 -0
  54. package/dist/config-Bn00Z3ks.js +36 -0
  55. package/dist/config-report-Dw_JcUqT.js +44 -0
  56. package/dist/{connection-JvqwHODC.js → connection-CU8MQxRi.js} +1 -1
  57. package/dist/{context-CKEAabd7.js → context-Ttp0ekMT.js} +36 -27
  58. package/dist/convex/index.d.ts +9 -4
  59. package/dist/convex/index.js +14 -4
  60. package/dist/create-BWyx3jua.d.ts +245 -0
  61. package/dist/create-CPhDL6qx.js +253 -0
  62. package/dist/{credential-B_rkUNlY.js → credential-8P81ff4u.js} +26 -46
  63. package/dist/delegation-D8pUEuce.js +103 -0
  64. package/dist/{describe-Bt1YD5uS.js → describe-B_gVZEVi.js} +10 -15
  65. package/dist/{describe-DernyItf.d.ts → describe-PdoqESvg.d.ts} +9 -10
  66. package/dist/{diff-x5Il8LVa.js → diff-B8Tunc3o.js} +44 -11
  67. package/dist/{diff-BUzf5Poi.js → diff-CzqLxZ77.js} +2 -2
  68. package/dist/doctor-WpvG6p4k.js +1194 -0
  69. package/dist/doctor-collect-ByfYlNv1.js +664 -0
  70. package/dist/{doctor-Bqo6FwUa.js → doctor-rOr-4ZfS.js} +2 -2
  71. package/dist/drizzle/index.d.ts +4 -3
  72. package/dist/drizzle/index.js +3 -3
  73. package/dist/elysia/index.d.ts +6 -28
  74. package/dist/elysia/index.js +16 -60
  75. package/dist/{errors-DSMnAVNa.js → errors-CWfoNg9N.js} +8 -4
  76. package/dist/{errors-Iy71s7Oj.js → errors-Cz5zn0mW.js} +17 -71
  77. package/dist/{errors-DbZ1YOnb.d.ts → errors-DAqevpNk.d.ts} +8 -21
  78. package/dist/{errors-m3u9TmDu.js → errors-DRnGZHzF.js} +4 -1
  79. package/dist/evaluation-items-CfCCejQd.js +40 -0
  80. package/dist/{evaluations-DsAU9ppl.js → evaluations-tz6D9A2G.js} +28 -46
  81. package/dist/eve/index.d.ts +6 -15
  82. package/dist/eve/index.js +7 -12
  83. package/dist/expiry-BoBJ8Tvc.js +7 -0
  84. package/dist/express/index.d.ts +6 -29
  85. package/dist/express/index.js +28 -58
  86. package/dist/fastify/index.d.ts +6 -29
  87. package/dist/fastify/index.js +16 -65
  88. package/dist/fields-BMl1RxoX.js +26 -0
  89. package/dist/{files-B_wAGYmt.js → files-DWUN9PzI.js} +5 -1
  90. package/dist/{fixtures-Cvaw0gDG.js → fixtures-ht28Cplr.js} +5 -2
  91. package/dist/{freeze-y1_jQL4v.js → freeze-CrU8nQeX.js} +31 -2
  92. package/dist/{from-snapshot-BMGnhmgv.js → from-snapshot-C3sHpZNS.js} +65 -48
  93. package/dist/{grantee-Bv04_Vzf.js → grantee-Cv5Sogfv.js} +88 -7
  94. package/dist/graph-sql-B-dsAT6j.d.ts +29 -0
  95. package/dist/{headers-B5RRv3Xm.js → headers-BZSDieNT.js} +1 -1
  96. package/dist/{headers-C8SHQccD.d.ts → headers-Cf-zWvsO.d.ts} +1 -1
  97. package/dist/helpers-H_KARDVC.js +421 -0
  98. package/dist/hono/index.d.ts +6 -28
  99. package/dist/hono/index.js +11 -43
  100. package/dist/{hosted-BwKQ1BTA.js → hosted-DJQw46hn.js} +6 -5
  101. package/dist/{http-GgVApX1k.js → http-BIhmLfCc.js} +4 -20
  102. package/dist/http-SO7qGttf.js +44 -0
  103. package/dist/ids-DC4V4CFu.js +18 -0
  104. package/dist/{index-LF_hS-yn.d.ts → index-A0YNL8jZ.d.ts} +1 -1
  105. package/dist/index-CtE07CBF.d.ts +6 -0
  106. package/dist/{index-xIxJLwOQ.d.ts → index-D3vbkoSI.d.ts} +75 -7
  107. package/dist/{index-CltcQ4Bf.d.ts → index-D6_cSa1z.d.ts} +68 -5
  108. package/dist/index.d.ts +14 -9
  109. package/dist/index.js +22 -17
  110. package/dist/instance-options-BK_rNOSC.d.ts +11 -0
  111. package/dist/instance-options-Dhhcnm3y.js +22 -0
  112. package/dist/{parse-DPfIvFMU.js → json-schema-BsAflUGW.js} +28 -57
  113. package/dist/jwt/index.d.ts +10 -6
  114. package/dist/jwt/index.js +32 -13
  115. package/dist/kernel-GSQnMz3O.js +208 -0
  116. package/dist/kysely/index.d.ts +4 -3
  117. package/dist/kysely/index.js +3 -3
  118. package/dist/live-options-H2eG8dfJ.js +60 -0
  119. package/dist/{load-BZ24CpZP.js → load-DhWEB9P1.js} +16 -10
  120. package/dist/load-DwJUafYN.js +2 -0
  121. package/dist/manifest-iaoBXHKc.js +783 -0
  122. package/dist/manifest-uDS9y5de.d.ts +206 -0
  123. package/dist/{map-DowSO96j.js → map-AcxK9o_D.js} +4 -15
  124. package/dist/{map-claims-B_6I1Rn-.js → map-claims-Z4QZOiFF.js} +13 -4
  125. package/dist/map-error-pgUWNNtG.js +23 -0
  126. package/dist/may-use-DndQ5tQ-.js +77 -0
  127. package/dist/mcp/index.d.ts +54 -22
  128. package/dist/mcp/index.js +218 -178
  129. package/dist/nest/index.d.ts +26 -31
  130. package/dist/nest/index.js +75 -84
  131. package/dist/next/client.d.ts +7 -8
  132. package/dist/next/client.js +11 -9
  133. package/dist/next/index.d.ts +30 -47
  134. package/dist/next/index.js +45 -60
  135. package/dist/next/plugin.d.ts +1 -1
  136. package/dist/next/plugin.js +32 -1
  137. package/dist/node/index.d.ts +9 -28
  138. package/dist/node/index.js +11 -43
  139. package/dist/openai/index.d.ts +6 -15
  140. package/dist/openai/index.js +7 -20
  141. package/dist/openapi/index.d.ts +87 -4
  142. package/dist/openapi/index.js +3 -3
  143. package/dist/{openapi-CwePaF7C.js → openapi-Bbg4wGVL.js} +3 -3
  144. package/dist/{openapi-DcqM8nU7.js → openapi-BqRBvAng.js} +237 -5
  145. package/dist/{openapi-DWD0Uc_4.js → openapi-CqqEbHsL.js} +5 -5
  146. package/dist/{openapi-import-BWRUNNeW.js → openapi-import-cmwetbzw.js} +1 -1
  147. package/dist/{openapi-schema-D8j_T9tO.js → openapi-schema--ARjyfQr.js} +2 -2
  148. package/dist/orpc/index.d.ts +15 -28
  149. package/dist/orpc/index.js +74 -117
  150. package/dist/otel/index.d.ts +2 -2
  151. package/dist/parse-BuyjxhZV.js +53 -0
  152. package/dist/parse-local-manifest-BkGQNzAh.d.ts +10 -0
  153. package/dist/parse-local-manifest-BrMozJCo.js +36 -0
  154. package/dist/pdp/index.d.ts +2 -2
  155. package/dist/pdp/index.js +14 -127
  156. package/dist/{permdock-yoZ7EjxX.js → permdock-CzqXjCpU.js} +641 -126
  157. package/dist/{permissions-B8vCg_bI.d.ts → permissions-CDgvKG5L.d.ts} +2 -2
  158. package/dist/{permissions-CofRqesP.js → permissions-CpZrivYv.js} +3 -3
  159. package/dist/{permissions-DC7GROPA.js → permissions-DVoF6dMt.js} +77 -15
  160. package/dist/{permissions-B4apnahQ.d.ts → permissions-DttnqqxC.d.ts} +34 -5
  161. package/dist/{pins-CqE1jZuF.js → pins-8ILTftC9.js} +2 -2
  162. package/dist/{policy-CInmNGkM.d.ts → policy-CFZAr_Al.d.ts} +330 -37
  163. package/dist/{policy-Cq2fB8Q5.d.ts → policy-D8UFyERw.d.ts} +2 -2
  164. package/dist/{policy-ANp36PnI.js → policy-xyWg7QdR.js} +173 -22
  165. package/dist/powersync-A8x_Yyvh.js +2 -0
  166. package/dist/powersync-C7kLglqX.js +540 -0
  167. package/dist/powersync-yW1UUFzp.js +62 -0
  168. package/dist/prisma/index.d.ts +3 -2
  169. package/dist/prisma/index.js +45 -20
  170. package/dist/{problem-Cgp9-KZA.js → problem-B43ztKIm.js} +74 -109
  171. package/dist/problem-details-CkL50EEf.d.ts +7 -0
  172. package/dist/problem-details-_AMOYz-w.js +144 -0
  173. package/dist/{protected-BuPAycJT.d.ts → protected-CNsMzrVd.d.ts} +5 -4
  174. package/dist/protected-Cs6kTaHo.js +100 -0
  175. package/dist/protected-bZs6rbT1.d.ts +40 -0
  176. package/dist/{provider-wTAUda2v.d.ts → provider-Cjr62YMV.d.ts} +1 -1
  177. package/dist/provider-DLzpb2Xz.js +52 -0
  178. package/dist/provider-store-DNyC1y48.js +43 -0
  179. package/dist/react/index.d.ts +7 -5
  180. package/dist/react/index.js +5 -4
  181. package/dist/react/provider-client.d.ts +1 -1
  182. package/dist/react/provider-client.js +1 -1
  183. package/dist/react-native/index.d.ts +166 -10
  184. package/dist/react-native/index.js +607 -85
  185. package/dist/{refs-ChLSxbST.js → refs-KYb4ntaz.js} +4 -3
  186. package/dist/{relations-r4soIFZB.js → relations-cjOL01hZ.js} +110 -31
  187. package/dist/replay-BsOyTrdV.js +28 -0
  188. package/dist/replay-sqBGMnNs.d.ts +5 -0
  189. package/dist/resource-ref-CaS9yVPi.js +20 -0
  190. package/dist/revocations-Bhr0aMIC.js +27 -0
  191. package/dist/rls-BMNydpHk.js +2521 -0
  192. package/dist/{rls-BOFU3chG.js → rls-CEvs64Kj.js} +8 -3
  193. package/dist/rls-fields-BMasREhR.js +3502 -0
  194. package/dist/{rls-graph-DxQ39PJj.js → rls-graph-pc9fuXYm.js} +100 -36
  195. package/dist/{rls-import-CXV6LBlS.js → rls-import-D8F7j35Q.js} +7 -6
  196. package/dist/{rls-migrate-DrFPbf8p.js → rls-migrate-7wikfrVI.js} +6 -5
  197. package/dist/rls-ownership-B5Lkq62W.js +843 -0
  198. package/dist/rls-shared-aOQ4hGTO.js +493 -0
  199. package/dist/rls-verify-D8B7dOTh.js +745 -0
  200. package/dist/{row-check-BajTgQZ-.d.ts → row-check-Dt35czLy.d.ts} +12 -15
  201. package/dist/rpc-DOK54_CS.js +89 -0
  202. package/dist/{run-CJ6UvS3a.js → run-YXCJDNYk.js} +31 -12
  203. package/dist/runtime-CB8gQFvS.js +11 -0
  204. package/dist/{saas-BRrZzJkM.js → saas-Bj_FFkjN.js} +17 -7
  205. package/dist/{schema-P8yoma__.js → schema-D3MnDMxa.js} +8 -4
  206. package/dist/scim/index.d.ts +1 -1
  207. package/dist/scim/index.js +1 -1
  208. package/dist/{scim-9NFa0XVZ.js → scim-BFGBBAqR.js} +1 -1
  209. package/dist/{scopes-cKVp_WTw.js → scopes-CVdPrWN-.js} +35 -8
  210. package/dist/server/index.d.ts +22 -11
  211. package/dist/server/index.js +11 -8
  212. package/dist/{credentials-BgRX3WEg.js → server-DlZ28Oz5.js} +1 -1
  213. package/dist/shared-DRu8VFVM.js +123 -0
  214. package/dist/{sink-Cfr9-7YC.d.ts → sink-Gs6TTVa-.d.ts} +1 -1
  215. package/dist/skills-Biq5uup3.js +192 -0
  216. package/dist/{skills-C_lpV4Jx.js → skills-JaymNCdK.js} +10 -4
  217. package/dist/{snapshot-DE8dE_hz.js → snapshot-Enxd0n-s.js} +138 -214
  218. package/dist/snapshot-cache-D6jLelln.js +44 -0
  219. package/dist/snapshot-cache-DwQH8ufx.d.ts +45 -0
  220. package/dist/solid/index.d.ts +39 -9
  221. package/dist/solid/index.js +76 -85
  222. package/dist/sources-B0UvrJ21.js +534 -0
  223. package/dist/sources-BcJgw0lt.d.ts +192 -0
  224. package/dist/{sql-Bll1d7y0.js → sql-xdg5f4Fi.js} +6 -1
  225. package/dist/{src-CTNT-PBW.js → src-CSbUiozF.js} +149 -11
  226. package/dist/ssf/index.d.ts +3 -2
  227. package/dist/ssf/index.js +3 -29
  228. package/dist/store-DMAWwAJV.js +371 -0
  229. package/dist/{store-Bq90395i.d.ts → store-D_pjn91-.d.ts} +13 -4
  230. package/dist/store-options-yO0V6gRn.js +716 -0
  231. package/dist/{stores-CkG2HrSg.js → stores-4_sqiOA1.js} +10 -63
  232. package/dist/{stores-CvOnu_2T.d.ts → stores-DVR5NHLE.d.ts} +20 -9
  233. package/dist/{stream-Q_xlB6Ko.js → stream-DDpvynSB.js} +16 -2
  234. package/dist/{stream-BhMfZOwr.d.ts → stream-DlvG2hs-.d.ts} +2 -2
  235. package/dist/subject-settings-BwBmCdTR.js +128 -0
  236. package/dist/supabase/index.d.ts +122 -6
  237. package/dist/supabase/index.js +4 -3
  238. package/dist/supabase/middleware.d.ts +32 -27
  239. package/dist/supabase/middleware.js +56 -22
  240. package/dist/{supabase-D8UlBA7Z.js → supabase-CwafwxxF.js} +3 -3
  241. package/dist/{supabase-DTxGtYdi.js → supabase-DTBaC20O.js} +345 -367
  242. package/dist/supabase-config-Bs44dare.js +472 -0
  243. package/dist/{supabase-hook-D_OqGb_V.js → supabase-hook-BuxLQLpU.js} +994 -708
  244. package/dist/supabase-hook-D5qVd_D8.js +2 -0
  245. package/dist/supautils-DYZnzRWV.js +91 -0
  246. package/dist/svelte/PermissionBoundary.svelte +37 -0
  247. package/dist/svelte/Protected.svelte +8 -2
  248. package/dist/svelte/index.d.ts +9 -6
  249. package/dist/svelte/index.js +61 -7
  250. package/dist/svelte/runtime.d.ts +4 -3
  251. package/dist/svelte/runtime.js +4 -3
  252. package/dist/svelte/source.d.ts +9 -6
  253. package/dist/svelte/source.js +7 -4
  254. package/dist/terminal/index.d.ts +6 -14
  255. package/dist/terminal/index.js +44 -32
  256. package/dist/testing/index.d.ts +105 -16
  257. package/dist/testing/index.js +504 -40
  258. package/dist/testing/saas/index.d.ts +4 -4
  259. package/dist/testing/saas/index.js +2 -2
  260. package/dist/testing/saas/permissions.d.ts +1 -1
  261. package/dist/testing/saas/permissions.js +1 -1
  262. package/dist/token-CIWxJOCh.js +50 -0
  263. package/dist/trpc/index.d.ts +7 -26
  264. package/dist/trpc/index.js +17 -100
  265. package/dist/types-9AWO9EGt.d.ts +197 -0
  266. package/dist/{types-D6Z6-rKJ.d.ts → types-BPxgszlT.d.ts} +260 -22
  267. package/dist/{types-BvBk1wgn.d.ts → types-BVyImy5I.d.ts} +5 -3
  268. package/dist/{types-CxquUByI.d.ts → types-Bvc4oWT6.d.ts} +1 -1
  269. package/dist/types-C3s9xVJG.d.ts +48 -0
  270. package/dist/{types-BBK-exvJ.d.ts → types-Dnemwd77.d.ts} +7 -1
  271. package/dist/types-kxznc7cn.d.ts +52 -0
  272. package/dist/{types-B8w5PFtS.d.ts → types-vKyAMtcX.d.ts} +17 -1
  273. package/dist/{types-B9dmiiab.d.ts → types-vNSDF7Dq.d.ts} +1 -1
  274. package/dist/{sources-DOpW5Ila.d.ts → types-yF5LmQVD.d.ts} +86 -127
  275. package/dist/unplugin/index.d.ts +1 -1
  276. package/dist/unplugin/index.js +10 -9
  277. package/dist/{usage-1ozMubLY.js → usage-D07N9QJ3.js} +2 -2
  278. package/dist/usage-D82l1CwK.js +2 -0
  279. package/dist/{usage-CUnK6Ou9.js → usage-DG1oeCca.js} +225 -62
  280. package/dist/validation-error-CnjZ4t92.js +33 -0
  281. package/dist/validation-error-CtF23SrC.d.ts +26 -0
  282. package/dist/{validity-D0uRmJKJ.js → validity-uOp8UpYn.js} +57 -36
  283. package/dist/{verifier-B90agnhl.js → verifier-BxBo6I44.js} +10 -5
  284. package/dist/version-BvacVTZR.js +17 -0
  285. package/dist/views-Soe7bGSC.js +95 -0
  286. package/dist/{vocabulary-Dk0fs-Jk.d.ts → vocabulary-DA8a8zif.d.ts} +1 -1
  287. package/dist/vue/index.d.ts +35 -13
  288. package/dist/vue/index.js +86 -93
  289. package/dist/watch-Etoa_Mvr.js +2 -0
  290. package/dist/watch-UihESpsJ.js +128 -0
  291. package/dist/webmcp/index.d.ts +2 -2
  292. package/dist/webmcp/index.js +7 -13
  293. package/package.json +62 -36
  294. package/schemas/approval-request-v1.json +175 -0
  295. package/schemas/catalog-v1.json +29 -1
  296. package/schemas/supabase-claims-v1.json +6 -1
  297. package/schemas/supabase-manifest-v1.json +150 -6
  298. package/skills/permdock/SKILL.md +7 -7
  299. package/skills/permdock-agents/SKILL.md +5 -5
  300. package/skills/permdock-agents/references/runtimes.md +12 -10
  301. package/skills/permdock-approvals/SKILL.md +4 -4
  302. package/skills/permdock-approvals/references/stores-and-resume.md +15 -4
  303. package/skills/permdock-audit/SKILL.md +3 -3
  304. package/skills/permdock-credentials/SKILL.md +4 -4
  305. package/skills/permdock-credentials/references/tokens-keys-links.md +7 -2
  306. package/skills/permdock-data/SKILL.md +4 -4
  307. package/skills/permdock-data/references/queries-and-rls.md +14 -6
  308. package/skills/permdock-data/references/relationships.md +5 -3
  309. package/skills/permdock-tenancy/SKILL.md +9 -6
  310. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +14 -8
  311. package/skills/permdock-wire/SKILL.md +4 -4
  312. package/skills/permdock-wire/references/adapters.md +42 -30
  313. package/skills/permdock-wire/references/policy-options.md +5 -3
  314. package/dist/approvers-aH0PJkmf.js +0 -20
  315. package/dist/catalog-idsHc0vo.js +0 -2
  316. package/dist/collect-B7_TIfmg.js +0 -49
  317. package/dist/collect-fRPAQIWb.js +0 -2
  318. package/dist/compile-CQbvyIBr.d.ts +0 -30
  319. package/dist/config-BPYmjTOp.js +0 -26
  320. package/dist/context-gtAwAILx.js +0 -6
  321. package/dist/create-BKF3dgFk.d.ts +0 -162
  322. package/dist/create-CSkhDU9T.js +0 -222
  323. package/dist/doctor-BGle8Gqi.js +0 -1314
  324. package/dist/helpers-DnSOrhB9.js +0 -682
  325. package/dist/index-fG6NSXlc.d.ts +0 -9
  326. package/dist/kernel-YOGCWNLf.js +0 -211
  327. package/dist/load-QOOm1z70.js +0 -2
  328. package/dist/manifest-DDQbC6K0.d.ts +0 -118
  329. package/dist/map-error-RJ3ZsUyA.js +0 -16
  330. package/dist/may-use-CnFEjVEp.js +0 -37
  331. package/dist/pg-4GJWDUxG.js +0 -953
  332. package/dist/plugin-4gr7IxFJ.js +0 -65
  333. package/dist/protected-B4K3BKoX.js +0 -138
  334. package/dist/protected-wY7nXhY9.d.ts +0 -23
  335. package/dist/provider-_wx46HpB.js +0 -48
  336. package/dist/rls-CJVja9Ww.js +0 -2119
  337. package/dist/rls-helpers-BxRuif0l.js +0 -1346
  338. package/dist/runtime-DP9ttFh1.js +0 -27
  339. package/dist/skills-Dx3QLnMY.js +0 -110
  340. package/dist/source-DoBBYJi2.js +0 -6
  341. package/dist/sources-DVHM3Mwq.js +0 -284
  342. package/dist/store-C6hFW6ta.js +0 -508
  343. package/dist/subject-settings-xt7V845g.js +0 -82
  344. package/dist/supabase-hook-DW-xP4hU.js +0 -2
  345. package/dist/types-DbWdEfcm.d.ts +0 -87
  346. package/dist/types-bva3i4Gf.d.ts +0 -98
  347. package/dist/types-i4BAOvdb.d.ts +0 -97
  348. package/dist/usage-PyEor6GA.js +0 -2
  349. package/dist/version-CnSh33Fj.js +0 -16
@@ -1,7 +1,18 @@
1
1
  import { t as compact } from "../compact-y6vfu2_f.js";
2
- import { n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-Iy71s7Oj.js";
3
- import { n as createAgentKernel, t as approvalTokenOf } from "../kernel-YOGCWNLf.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-GSQnMz3O.js";
4
5
  //#region src/ai-sdk/create.ts
6
+ const APPROVAL_STATUSES = /* @__PURE__ */ new Set([
7
+ "approved",
8
+ "not-applicable",
9
+ "denied",
10
+ "user-approval"
11
+ ]);
12
+ function isToolApprovalResult(value) {
13
+ if (value === void 0 || APPROVAL_STATUSES.has(value)) return true;
14
+ return typeof value === "object" && value !== null && "type" in value && APPROVAL_STATUSES.has(value.type) && (!("reason" in value) || value.reason === void 0 || typeof value.reason === "string");
15
+ }
5
16
  function contextOf(call) {
6
17
  const runtime = call.runtimeContext !== null && typeof call.runtimeContext === "object" ? call.runtimeContext : {};
7
18
  return compact({
@@ -56,24 +67,19 @@ function createPermDock(policy, options) {
56
67
  actor: options.actor,
57
68
  delegation: options.delegation,
58
69
  tenant: options.tenant,
59
- memberships: options.memberships,
60
- relations: options.relations,
61
- entitlements: options.entitlements,
62
- customRoles: options.customRoles,
63
- policies: options.policies,
64
- store: options.store,
65
- sink: options.sink,
66
- limits: options.limits,
67
- snapshots: options.snapshots
70
+ store: options.store
68
71
  }),
72
+ ...instanceOptions(options),
69
73
  subject: options.subject,
70
74
  tools: options.tools,
71
75
  adapter: "ai-sdk"
72
76
  });
73
77
  const byPermission = /* @__PURE__ */ new Map();
74
78
  for (const [name, binding] of Object.entries(options.tools)) byPermission.set(binding.permission.key, name);
79
+ const passes = (toolName) => options.unmapped === "allow" && !Object.hasOwn(options.tools, toolName);
75
80
  const decide = (toolName, args, context) => kernel.decideTool(toolName, args, context, compact({ resumeToken: approvalTokenOf(context) }));
76
81
  const toolApproval = async (call) => {
82
+ if (passes(call.toolCall.toolName)) return "approved";
77
83
  const context = contextOf(call);
78
84
  const verdict = await decide(call.toolCall.toolName, call.toolCall.input, context);
79
85
  if (verdict.outcome === "granted") return "approved";
@@ -96,9 +102,10 @@ function createPermDock(policy, options) {
96
102
  transformParams: async ({ params }) => {
97
103
  if (params.tools === void 0) return params;
98
104
  const allowed = await kernel.allowedToolNames(context);
99
- const tools = params.tools.filter((tool) => typeof tool.name === "string" && allowed.has(tool.name));
105
+ const keeps = (name) => typeof name === "string" && (allowed.has(name) || passes(name));
106
+ const tools = params.tools.filter((tool) => keeps(tool.name));
100
107
  const choice = params.toolChoice;
101
- const forcedAway = choice?.type === "tool" && !(typeof choice.toolName === "string" && allowed.has(choice.toolName));
108
+ const forcedAway = choice?.type === "tool" && !keeps(choice.toolName);
102
109
  return {
103
110
  ...params,
104
111
  tools,
@@ -127,8 +134,18 @@ function createPermDock(policy, options) {
127
134
  });
128
135
  return true;
129
136
  };
137
+ const composeToolApproval = (app) => async (call) => {
138
+ const verdict = await toolApproval(call);
139
+ if (verdict !== "approved") return verdict;
140
+ const answer = await app(call);
141
+ return isToolApprovalResult(answer) ? answer : {
142
+ type: "denied",
143
+ reason: "The tool approval answer was not valid."
144
+ };
145
+ };
130
146
  return {
131
147
  toolApproval,
148
+ composeToolApproval,
132
149
  capabilityMiddleware,
133
150
  needsApproval
134
151
  };
@@ -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-B8w5PFtS.js";
2
- import { _ as approvalsHandler, a as cancelApprovals, b as isApprovalError, c as readApprovalHeader, d as resumeDecision, f as resumeFromHeader, g as ApprovalsHandlerOptions, h as approverRelations, i as memoryApprovalStore, l as requestApproval, m as ApproverRelationsOptions, n as applyApprovalVerdict, o as consumeApproval, p as summariseSubject, r as assertApprover, s as inspectApproval, t as MemoryApprovalStore, u as resolveApproval, v as ApprovalError, y as ApprovalErrorCode } from "../index-CltcQ4Bf.js";
3
- export { APPROVAL_HEADER, type ApprovalApprovers, type ApprovalCancelMeta, 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, approvalQuorum, approvalsHandler, approverRelationKey, approverRelations, assertApprover, cancelApprovals, consumeApproval, escalationOpenAt, inspectApproval, isApprovalError, memoryApprovalStore, readApprovalHeader, requestApproval, resolveApproval, resumeDecision, resumeFromHeader, summariseSubject };
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-vKyAMtcX.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-D6_cSa1z.js";
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,4 +1,5 @@
1
- import { n as isApprovalError, t as ApprovalError } from "../errors-m3u9TmDu.js";
2
- import { _ as approvalQuorum, a as requestApproval, c as resumeFromHeader, d as applyApprovalVerdict, f as assertApprover, g as DEFAULT_APPROVAL_TTL_MS, h as APPROVAL_HEADER, i as readApprovalHeader, m as approverRelations, n as consumeApproval, o as resolveApproval, p as memoryApprovalStore, r as inspectApproval, s as resumeDecision, t as cancelApprovals, u as summariseSubject, v as approverRelationKey, y as escalationOpenAt } from "../helpers-DnSOrhB9.js";
3
- import { t as approvalsHandler } from "../approvals-DaxY-Bdg.js";
4
- export { APPROVAL_HEADER, ApprovalError, DEFAULT_APPROVAL_TTL_MS, applyApprovalVerdict, approvalQuorum, approvalsHandler, approverRelationKey, approverRelations, assertApprover, cancelApprovals, consumeApproval, escalationOpenAt, inspectApproval, isApprovalError, memoryApprovalStore, readApprovalHeader, requestApproval, resolveApproval, resumeDecision, resumeFromHeader, summariseSubject };
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";
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,9 +1,12 @@
1
1
  import { t as compact } from "./compact-y6vfu2_f.js";
2
- import { o as rootMembershipId } from "./scopes-cKVp_WTw.js";
3
- import { n as isApprovalError } from "./errors-m3u9TmDu.js";
4
- import { f as assertApprover, m as approverRelations } from "./helpers-DnSOrhB9.js";
2
+ import { t as PROBLEM_BASE } from "./validation-error-CnjZ4t92.js";
3
+ import { s as rootMembershipId } from "./scopes-CVdPrWN-.js";
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
9
  //#region src/approvals/handler.ts
6
- const PROBLEM_BASE = "https://permdock.dev/problems";
7
10
  function problem(status, title, detail, slug) {
8
11
  const body = {
9
12
  type: `${PROBLEM_BASE}/${slug}`,
@@ -68,7 +71,8 @@ function belongsToTenant(subject, tenant) {
68
71
  async function mayResolve(request, subject, requireDistinct, options) {
69
72
  try {
70
73
  const relations = await approverRelations(request, subject, options);
71
- assertApprover(request, subject, requireDistinct, /* @__PURE__ */ new Date(), relations);
74
+ const permissions = await heldPermissions(request, subject, options.permdockFor);
75
+ assertApprover(request, subject, requireDistinct, /* @__PURE__ */ new Date(), relations, permissions);
72
76
  return true;
73
77
  } catch {
74
78
  return false;
@@ -143,11 +147,11 @@ async function readNote(request) {
143
147
  return;
144
148
  }
145
149
  }
146
- function mapError(error) {
150
+ function mapError(error, credentials) {
147
151
  if (!isApprovalError(error)) return problem(500, "Internal error", "approval store failed", "internal");
148
152
  if (error.code === "approval-not-found") return problem(404, "Not found", error.message, "not-found");
149
153
  if (error.code === "approval-not-pending" || error.code === "approval-expired" || error.code === "approver-repeated") return problem(409, "Conflict", error.message, "conflict");
150
- if (error.code === "approver-unauthenticated") return problem(401, "Unauthenticated", error.message, "unauthenticated");
154
+ if (error.code === "approver-unauthenticated") return unauthenticatedProblem(credentials);
151
155
  return problem(403, "Permission denied", error.message, "denied");
152
156
  }
153
157
  function approvalsHandler(store, options) {
@@ -159,7 +163,7 @@ function approvalsHandler(store, options) {
159
163
  await store.expire();
160
164
  const subject = await resolveSubject(request, options.subject);
161
165
  const principal = subject?.principal ?? null;
162
- if (subject === null || principal === null) return problem(401, "Unauthenticated", "approver must be authenticated", "unauthenticated");
166
+ if (subject === null || principal === null) return unauthenticatedProblem(hasCredentials(request));
163
167
  try {
164
168
  if (route.kind === "pending") {
165
169
  const scoped = inboxScope(url, subject);
@@ -196,13 +200,15 @@ function approvalsHandler(store, options) {
196
200
  const current = await store.get(route.token);
197
201
  if (current === null) return problem(404, "Not found", "approval was not found", "not-found");
198
202
  const relations = await approverRelations(current, subject, options);
199
- assertApprover(current, subject, requireDistinct, /* @__PURE__ */ new Date(), relations);
203
+ const permissions = await heldPermissions(current, subject, options.permdockFor);
204
+ assertApprover(current, subject, requireDistinct, /* @__PURE__ */ new Date(), relations, permissions);
200
205
  const note = await readNote(request);
201
206
  const resolved = await store.resolve(route.token, compact({
202
207
  status: route.kind === "approve" ? "approved" : "rejected",
203
208
  by: subject,
204
209
  note,
205
- relations
210
+ relations,
211
+ permissions
206
212
  }));
207
213
  const signed = await signedApproval(resolved, options.signer, options.audience);
208
214
  return json(200, compact({
@@ -210,7 +216,7 @@ function approvalsHandler(store, options) {
210
216
  signed
211
217
  }));
212
218
  } catch (error) {
213
- return mapError(error);
219
+ return mapError(error, hasCredentials(request));
214
220
  }
215
221
  };
216
222
  }
@@ -0,0 +1,52 @@
1
+ import { n as isReadonlyArray } from "./compact-y6vfu2_f.js";
2
+ //#region src/core/approvers.ts
3
+ /** Approves when the approver holds `permission` in the request's tenant (any role, custom roles included). */
4
+ function holder(permission) {
5
+ const key = permission?.key;
6
+ if (typeof key !== "string" || key === "") throw new Error("PermDock: holder() needs a permission");
7
+ return Object.freeze({
8
+ kind: "permission",
9
+ permission: key
10
+ });
11
+ }
12
+ /** Approves when the approver matches any one of `items`. */
13
+ function anyOf(...items) {
14
+ if (items.length === 0) throw new Error("PermDock: anyOf() needs at least one approver");
15
+ return Object.freeze({
16
+ kind: "any-of",
17
+ of: Object.freeze([...items])
18
+ });
19
+ }
20
+ /** Approves when the approver matches every one of `items`; the same as a list. */
21
+ function allOf(...items) {
22
+ if (items.length === 0) throw new Error("PermDock: allOf() needs at least one approver");
23
+ return Object.freeze([...items]);
24
+ }
25
+ /** A named approver for `approval.by`, matched on the approver's principal id. */
26
+ function user(id) {
27
+ if (typeof id !== "string" || id === "") throw new Error("PermDock: user() needs a non-empty principal id");
28
+ return Object.freeze({
29
+ kind: "user",
30
+ id
31
+ });
32
+ }
33
+ function isUserApprover(value) {
34
+ return value !== null && typeof value === "object" && "kind" in value && value.kind === "user";
35
+ }
36
+ function flattenApprovers(input) {
37
+ if (input === void 0) return [];
38
+ if (isReadonlyArray(input)) return input;
39
+ return [input];
40
+ }
41
+ /** Every approver `input` names, inside `anyOf` groups too, for reading facts and labels. */
42
+ function approverLeaves(input) {
43
+ return flattenApprovers(input).flatMap((item) => item.kind === "any-of" ? item.of.flatMap((entry) => approverLeaves(entry)) : [item]);
44
+ }
45
+ function isPermissionApprover(value) {
46
+ return value !== null && typeof value === "object" && "kind" in value && value.kind === "permission";
47
+ }
48
+ function isAnyOfInput(value) {
49
+ return value !== null && typeof value === "object" && "kind" in value && value.kind === "any-of";
50
+ }
51
+ //#endregion
52
+ export { holder as a, isUserApprover as c, flattenApprovers as i, user as l, anyOf as n, isAnyOfInput as o, approverLeaves as r, isPermissionApprover as s, allOf as t };
@@ -1,5 +1,5 @@
1
- import { p as arazzoFindings } from "./snapshot-DE8dE_hz.js";
2
- import { a as loadModule, o as pickNamed, t as asPermissionTree } from "./load-BZ24CpZP.js";
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
3
  import { existsSync, readFileSync } from "node:fs";
4
4
  import { resolve } from "node:path";
5
5
  //#region src/cli/arazzo.ts
@@ -1,4 +1,4 @@
1
- import { a as listArg, i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-BMh_Etm2.js";
1
+ import { a as listArg, i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-DWOrSQic.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-CTeVuXr5.js")).runArazzo({
39
+ const result = await (await import("./arazzo-BAgw9ap6.js")).runArazzo({
40
40
  cwd: ctx.cwd,
41
41
  config: ctx.config,
42
42
  rest: parsed._,
@@ -1,5 +1,6 @@
1
- import { $ as DecisionSink, C as Policy, at as LimitStore, ct as MembershipSource, ft as RelationSource, mr as Principal, pt as RoleSource, sn as PolicySource, tt as EntitlementSource, xt as SnapshotSource } from "../policy-CInmNGkM.js";
2
- import { f as ApprovalStore } from "../types-B8w5PFtS.js";
1
+ import { C as Policy, Nr as Principal } from "../policy-CFZAr_Al.js";
2
+ import { f as ApprovalStore } from "../types-vKyAMtcX.js";
3
+ import { t as InstanceOptions } from "../instance-options-BK_rNOSC.js";
3
4
  //#region src/authzen/types.d.ts
4
5
  type AuthzenResourceAdapter = {
5
6
  readonly load?: (id: string) => unknown;
@@ -11,7 +12,7 @@ type AuthzenSubjectRecord = {
11
12
  readonly id: string;
12
13
  readonly [key: string]: unknown;
13
14
  };
14
- type AuthzenPermDockOptions<TUser = unknown> = {
15
+ type AuthzenPermDockOptions<TUser = unknown> = InstanceOptions & {
15
16
  readonly subject: (request: Request) => TUser | Promise<TUser>;
16
17
  readonly anonymous?: boolean;
17
18
  /**
@@ -24,17 +25,7 @@ type AuthzenPermDockOptions<TUser = unknown> = {
24
25
  readonly subjects?: {
25
26
  readonly list?: () => readonly AuthzenSubjectRecord[] | Promise<readonly AuthzenSubjectRecord[]>;
26
27
  };
27
- readonly memberships?: MembershipSource | readonly MembershipSource[];
28
- /** The object graph for relation grants that walk a parent chain; without it they deny. */
29
- readonly relations?: RelationSource;
30
- readonly entitlements?: EntitlementSource;
31
- readonly customRoles?: RoleSource;
32
- /** Hosted grants, read once per instance; see `PolicySource`. */
33
- readonly policies?: PolicySource;
34
28
  readonly store?: ApprovalStore;
35
- readonly sink?: DecisionSink;
36
- readonly limits?: LimitStore;
37
- readonly snapshots?: SnapshotSource;
38
29
  readonly maxEvaluations?: number;
39
30
  };
40
31
  type AuthzenPermDock = {
@@ -1,35 +1,15 @@
1
1
  import { t as compact } from "../compact-y6vfu2_f.js";
2
- import { C as ownGet, c as getResource, g as listPermissions } from "../permissions-DC7GROPA.js";
3
- import { t as createPermDock$1 } from "../permdock-yoZ7EjxX.js";
4
- import { l as validationProblem, n as batchTooLarge, o as problemResponse, t as PROBLEM_BASE } from "../problem-Cgp9-KZA.js";
5
- import { t as applyApprovalResume } from "../evaluations-DsAU9ppl.js";
6
- 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-DowSO96j.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-CzqXjCpU.js";
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";
7
12
  //#region src/authzen/create.ts
8
- function unauthorized() {
9
- return problemResponse({
10
- type: `${PROBLEM_BASE}/unauthenticated`,
11
- title: "Unauthenticated",
12
- status: 401,
13
- detail: "AuthZEN decision endpoint requires authentication"
14
- }, void 0, {
15
- outcome: "denied",
16
- denials: [{
17
- role: null,
18
- reason: "anonymous"
19
- }],
20
- alternatives: []
21
- });
22
- }
23
- function methodNotAllowed(allow) {
24
- const response = problemResponse({
25
- type: `${PROBLEM_BASE}/method-not-allowed`,
26
- title: "Method not allowed",
27
- status: 405,
28
- detail: `use ${allow}`
29
- });
30
- response.headers.set("Allow", allow);
31
- return response;
32
- }
33
13
  function notFound(detail) {
34
14
  return problemResponse({
35
15
  type: `${PROBLEM_BASE}/not-found`,
@@ -62,17 +42,9 @@ function withRequestId(request, response) {
62
42
  if (id !== null && id !== "") response.headers.set("X-Request-ID", id);
63
43
  return response;
64
44
  }
65
- function resourceRef(permission, data, item) {
66
- const fromRow = data !== null && typeof data === "object" && "id" in data ? data.id : void 0;
67
- const fromWire = item.resource?.id;
68
- const id = typeof fromRow === "string" || typeof fromRow === "number" ? String(fromRow) : typeof fromWire === "string" || typeof fromWire === "number" ? String(fromWire) : void 0;
69
- return compact({
70
- type: permission.resource,
71
- id
72
- });
73
- }
74
45
  const createPermDock = (policy, options) => {
75
46
  const maxEvaluations = options.maxEvaluations ?? 256;
47
+ const lookup = permissionLookup(policy.permissions);
76
48
  const trusts = (pep) => {
77
49
  const allow = options.trustedPep;
78
50
  if (typeof allow !== "function" || pep === null) return false;
@@ -90,7 +62,7 @@ const createPermDock = (policy, options) => {
90
62
  } catch {
91
63
  pep = null;
92
64
  }
93
- if ((pep === null || pep === void 0) && !allowAnonymous) return unauthorized();
65
+ if ((pep === null || pep === void 0) && !allowAnonymous) return unauthenticatedProblem(hasCredentials(request));
94
66
  return { pep: pep ?? null };
95
67
  }
96
68
  function instantiate(pep, item) {
@@ -100,13 +72,7 @@ const createPermDock = (policy, options) => {
100
72
  actor: trusted ? actorOf(item) : void 0,
101
73
  delegation: trusted ? delegationOf(item) : void 0,
102
74
  tenant: tenantOf(item),
103
- memberships: options.memberships,
104
- relations: options.relations,
105
- entitlements: options.entitlements,
106
- customRoles: options.customRoles,
107
- policies: options.policies,
108
- sink: options.sink,
109
- limits: options.limits
75
+ ...instanceOptions(options)
110
76
  }));
111
77
  }
112
78
  async function resourceOf(item) {
@@ -132,7 +98,7 @@ const createPermDock = (policy, options) => {
132
98
  };
133
99
  }
134
100
  async function decideItem(request, pep, item) {
135
- const permission = permissionOf(policy.permissions, item);
101
+ const permission = permissionOf(lookup, item);
136
102
  if (permission === void 0) return UNKNOWN;
137
103
  const resolved = await resourceOf(item);
138
104
  if (resolved === void 0) return UNAVAILABLE;
@@ -149,7 +115,7 @@ const createPermDock = (policy, options) => {
149
115
  trusted: false,
150
116
  boundary: "decision-endpoint"
151
117
  });
152
- return applyApprovalResume(decision, permission, permdock, options.store, request, resourceRef(permission, data, item), "authzen");
118
+ return applyApprovalResume(decision, permission, permdock, options.store, request, resourceRef(permission, data, item.resource?.id), "authzen");
153
119
  }
154
120
  async function evaluation(request, pep) {
155
121
  const body = await readJson(request);
@@ -220,7 +186,7 @@ const createPermDock = (policy, options) => {
220
186
  if (!isRecord(body)) return validationProblem("search/resource body must be an object");
221
187
  const item = body;
222
188
  const type = typeof item.resource?.type === "string" ? item.resource.type : void 0;
223
- const permission = permissionOf(policy.permissions, item);
189
+ const permission = permissionOf(lookup, item);
224
190
  if (type === void 0 || permission === void 0) return Response.json(paged([], 0, 1));
225
191
  const rows = await listRows(type, isRecord(item.resource?.properties) ? item.resource.properties : void 0);
226
192
  const permdock = await instantiate(pep, item);
@@ -1,5 +1,5 @@
1
- import { $ as DecisionSink, O as RoleBinding, hr as Subject, mr as Principal, pt as RoleSource } from "../policy-CInmNGkM.js";
2
- import { p as PermissionTree } from "../permissions-B4apnahQ.js";
1
+ import { Nr as Principal, Pr as Subject, at as DecisionSink, k as RoleBinding, xt as RoleSource } from "../policy-CFZAr_Al.js";
2
+ import { m as PermissionTree } from "../permissions-DttnqqxC.js";
3
3
  import { StandardSchemaV1 } from "@standard-schema/spec";
4
4
  //#region src/better-auth/types.d.ts
5
5
  type BetterAuthPrincipal = Principal & {
@@ -19,7 +19,20 @@ type BetterAuthAssignableRole = {
19
19
  readonly name: string;
20
20
  readonly statements: BetterAuthStatements;
21
21
  };
22
+ type BetterAuthMemberQuery = {
23
+ readonly model: string;
24
+ where: {
25
+ readonly field: string;
26
+ readonly value: string;
27
+ }[];
28
+ readonly limit?: number;
29
+ };
22
30
  type BetterAuthLike = {
31
+ readonly $context?: Promise<{
32
+ readonly adapter?: {
33
+ readonly findMany?: (query: BetterAuthMemberQuery) => Promise<unknown>;
34
+ };
35
+ }>;
23
36
  readonly api?: {
24
37
  readonly listOrganizations?: (args?: {
25
38
  readonly headers?: unknown;
@@ -49,6 +62,10 @@ type BetterAuthLike = {
49
62
  };
50
63
  type BetterAuthSubjectOptions = {
51
64
  readonly memberships?: "all" | "active";
65
+ /**
66
+ * Parses the user's additional fields into `principal.claims`. Without it no
67
+ * field reaches claims, because a user may edit their own additional fields.
68
+ */
52
69
  readonly schema?: StandardSchemaV1;
53
70
  readonly headers?: unknown;
54
71
  readonly declared?: readonly string[];
@@ -89,4 +106,4 @@ export declare function onRoleChange(refresh: (event: BetterAuthRoleChangeEvent)
89
106
  //#region src/better-auth/subject.d.ts
90
107
  export declare function subjectFromBetterAuth(auth: BetterAuthLike, session: unknown, options?: BetterAuthSubjectOptions): Promise<Subject<BetterAuthPrincipal>>;
91
108
  //#endregion
92
- export type { BetterAuthAccessControl, BetterAuthAccessRole, BetterAuthAssignableRole, BetterAuthLike, BetterAuthPrincipal, BetterAuthRoleChangeEvent, BetterAuthRoleSourceOptions, BetterAuthStatements, BetterAuthSubjectOptions, BetterAuthUnmatchedStatement, SeededRoles };
109
+ export type { BetterAuthAccessControl, BetterAuthAccessRole, BetterAuthAssignableRole, BetterAuthLike, BetterAuthMemberQuery, BetterAuthPrincipal, BetterAuthRoleChangeEvent, BetterAuthRoleSourceOptions, BetterAuthStatements, BetterAuthSubjectOptions, BetterAuthUnmatchedStatement, SeededRoles };
@@ -1,7 +1,7 @@
1
1
  import { n as isReadonlyArray, t as compact } from "../compact-y6vfu2_f.js";
2
- import { n as freezeDeep } from "../freeze-y1_jQL4v.js";
3
- import { g as listPermissions } from "../permissions-DC7GROPA.js";
4
- import { d as role, t as allow } from "../policy-ANp36PnI.js";
2
+ import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
3
+ import { _ as listPermissions } from "../permissions-DVoF6dMt.js";
4
+ import { m as role, t as allow } from "../policy-xyWg7QdR.js";
5
5
  import { t as ignoreRejection } from "../thenable-okc2xDsj.js";
6
6
  import { t as anonymousSubject } from "../subject-C6dLxqHU.js";
7
7
  import { i as membershipEvent } from "../sink-Bd9PSyfq.js";
@@ -255,6 +255,24 @@ async function organizationIds(auth, tenant, options) {
255
255
  }, [])).map((row) => isRecord(row) && typeof row["id"] === "string" ? row["id"] : void 0).filter((id) => id !== void 0 && id !== "");
256
256
  return [...new Set(ids)];
257
257
  }
258
+ const MEMBER_LIMIT = 5e3;
259
+ /** Every member row of the user in one adapter query, or `undefined` without an adapter. */
260
+ async function memberRows(auth, userId) {
261
+ try {
262
+ const findMany = (await auth.$context)?.adapter?.findMany;
263
+ if (findMany === void 0) return;
264
+ return parseMemberRows(await findMany({
265
+ model: "member",
266
+ where: [{
267
+ field: "userId",
268
+ value: userId
269
+ }],
270
+ limit: MEMBER_LIMIT
271
+ }), userId);
272
+ } catch {
273
+ return;
274
+ }
275
+ }
258
276
  function memberIn(auth, userId, organizationId, tenant, headers) {
259
277
  const active = auth.api?.getActiveMember;
260
278
  if (organizationId === tenant && active !== void 0) return settle(async () => parseMemberRows(await active({ headers }), userId), []);
@@ -275,8 +293,11 @@ async function loadMemberships(auth, session, user, userId, tenant, options) {
275
293
  let teams = parseTeamRows(session["teamMembers"] ?? session["teams"] ?? user["teamMembers"], userId);
276
294
  const headers = options.headers;
277
295
  if (members.length === 0) {
278
- const ids = await organizationIds(auth, tenant, options);
279
- members = (await Promise.all(ids.map((id) => memberIn(auth, userId, id, tenant, headers)))).flat();
296
+ const rows = options.memberships === "active" ? void 0 : await memberRows(auth, userId);
297
+ if (rows === void 0) {
298
+ const ids = await organizationIds(auth, tenant, options);
299
+ members = (await Promise.all(ids.map((id) => memberIn(auth, userId, id, tenant, headers)))).flat();
300
+ } else members = rows;
280
301
  }
281
302
  const listUserTeams = auth.api?.listUserTeams;
282
303
  if (teams.length === 0 && listUserTeams !== void 0) teams = await settle(async () => parseTeamRows(await listUserTeams({ headers }), userId), []);
@@ -298,8 +319,7 @@ async function subjectFromBetterAuth(auth, session, options = {}) {
298
319
  const roles = asRoles(user["role"] ?? user["roles"]);
299
320
  const declared = options.declared;
300
321
  const globalRoles = declared === void 0 ? roles : roles.filter((role) => declared.includes(role));
301
- let extra = extraFields(user);
302
- if (options.schema !== void 0) extra = validateClaims(extra, options.schema) ?? {};
322
+ const extra = options.schema === void 0 ? {} : validateClaims(extraFields(user), options.schema) ?? {};
303
323
  const memberships = await loadMemberships(auth, session, user, id, tenant, options);
304
324
  const principal = compact({
305
325
  id,