permdock 0.1.0 → 0.3.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 (350) 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-CKwwqFWz.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 +223 -0
  18. package/dist/better-supabase/index.js +648 -0
  19. package/dist/bind-C_ob3LKa.d.ts +25 -0
  20. package/dist/bind-CuzGytRf.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-BDG_nkxt.d.ts → capability-2kYTMWDv.d.ts} +2 -2
  25. package/dist/{capability-B68OFnZx.js → capability-4qPdO9gk.js} +7 -5
  26. package/dist/catalog/index.d.ts +1 -1
  27. package/dist/catalog/index.js +1 -1
  28. package/dist/catalog-CRW5Mx_B.js +2 -0
  29. package/dist/{catalog-H-vFGwWK.js → catalog-DWF5cYqB.js} +4 -4
  30. package/dist/{catalog-B0E6bggc.js → catalog-dFZdWCGN.js} +2 -2
  31. package/dist/{catalog-doc-BSo_Q_-6.js → catalog-doc-DdGm82XT.js} +20 -32
  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-CB_ELYuX.js} +2 -2
  44. package/dist/{cloud-Cuxr6Czw.js → cloud-DWLXO2af.js} +7 -6
  45. package/dist/collect-DClJsheJ.js +83 -0
  46. package/dist/{collect-O-tOtbnk.js → collect-DSTE3ml9.js} +194 -42
  47. package/dist/collect-DSWOk19R.js +2 -0
  48. package/dist/{commands-BMh_Etm2.js → commands-DSxCqG9A.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-BkRyBDBw.d.ts +94 -0
  53. package/dist/config-BJiM-xAm.js +157 -0
  54. package/dist/config-Dnszbv-6.js +36 -0
  55. package/dist/config-report-DMvWKUxL.js +44 -0
  56. package/dist/{connection-JvqwHODC.js → connection-CU8MQxRi.js} +1 -1
  57. package/dist/{context-CKEAabd7.js → context-Bcy85rGi.js} +36 -27
  58. package/dist/convex/index.d.ts +9 -4
  59. package/dist/convex/index.js +14 -4
  60. package/dist/create-B1d519XK.d.ts +245 -0
  61. package/dist/create-CMwIl-w2.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-DMYiCjJV.d.ts} +9 -10
  66. package/dist/{diff-x5Il8LVa.js → diff-2VaeChzX.js} +44 -11
  67. package/dist/{diff-BUzf5Poi.js → diff-DBIhz_f2.js} +2 -2
  68. package/dist/{doctor-Bqo6FwUa.js → doctor-BwCAMLx_.js} +2 -2
  69. package/dist/doctor-collect-CHk6XWOA.js +665 -0
  70. package/dist/doctor-igIiM_Hl.js +1194 -0
  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-DPdqI50v.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-CTLijvdm.js} +66 -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-0nNqHspG.d.ts +6 -0
  105. package/dist/{index-xIxJLwOQ.d.ts → index-BNc7Wer_.d.ts} +75 -7
  106. package/dist/{index-CltcQ4Bf.d.ts → index-C7Tw7MaW.d.ts} +68 -5
  107. package/dist/{index-LF_hS-yn.d.ts → index-C8z4RjQV.d.ts} +1 -1
  108. package/dist/index.d.ts +14 -9
  109. package/dist/index.js +22 -17
  110. package/dist/instance-options-Dhhcnm3y.js +22 -0
  111. package/dist/instance-options-jARdwfPN.d.ts +11 -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-_RRHmnMY.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-DcqM8nU7.js → openapi-BqRBvAng.js} +237 -5
  144. package/dist/{openapi-DWD0Uc_4.js → openapi-CqqEbHsL.js} +5 -5
  145. package/dist/{openapi-import-BWRUNNeW.js → openapi-import-cmwetbzw.js} +1 -1
  146. package/dist/{openapi-CwePaF7C.js → openapi-l0xYHkcv.js} +3 -3
  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-BrMozJCo.js +36 -0
  153. package/dist/parse-local-manifest-JLnaBH0S.d.ts +10 -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-CbgvLnuo.js} +672 -149
  157. package/dist/{permissions-B8vCg_bI.d.ts → permissions-CDgvKG5L.d.ts} +2 -2
  158. package/dist/{permissions-DC7GROPA.js → permissions-DVoF6dMt.js} +77 -15
  159. package/dist/{permissions-B4apnahQ.d.ts → permissions-DttnqqxC.d.ts} +34 -5
  160. package/dist/{permissions-CofRqesP.js → permissions-RJrovw98.js} +3 -3
  161. package/dist/{pins-CqE1jZuF.js → pins-8ILTftC9.js} +2 -2
  162. package/dist/{policy-Cq2fB8Q5.d.ts → policy-D2W7uv19.d.ts} +2 -2
  163. package/dist/{policy-CInmNGkM.d.ts → policy-IB6yxpC3.d.ts} +351 -42
  164. package/dist/{policy-ANp36PnI.js → policy-xyWg7QdR.js} +173 -22
  165. package/dist/powersync-BylawD_U.js +540 -0
  166. package/dist/powersync-DliZK_-y.js +62 -0
  167. package/dist/powersync-e_AZrKbg.js +2 -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-DX075l9V.d.ts +7 -0
  172. package/dist/problem-details-_AMOYz-w.js +144 -0
  173. package/dist/{protected-BuPAycJT.d.ts → protected-BdnIEFkY.d.ts} +5 -4
  174. package/dist/protected-utU-SLuy.js +100 -0
  175. package/dist/protected-xAr24FEC.d.ts +40 -0
  176. package/dist/provider-CSQd7m92.js +52 -0
  177. package/dist/{provider-wTAUda2v.d.ts → provider-DZY281jO.d.ts} +1 -1
  178. package/dist/provider-store-Cfbvo4DE.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-CYyiLiwO.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-BOFU3chG.js → rls-B4ur8nKQ.js} +8 -3
  192. package/dist/rls-DQtdgTHB.js +2521 -0
  193. package/dist/rls-fields-74oZPXWL.js +3582 -0
  194. package/dist/{rls-graph-DxQ39PJj.js → rls-graph-CHwx0V8q.js} +100 -36
  195. package/dist/{rls-import-CXV6LBlS.js → rls-import-BTFVk3jH.js} +7 -6
  196. package/dist/{rls-migrate-DrFPbf8p.js → rls-migrate-CN4TlJTO.js} +6 -5
  197. package/dist/rls-ownership-RuFqaqGz.js +843 -0
  198. package/dist/rls-shared-Cewd_-zI.js +495 -0
  199. package/dist/rls-verify-CVQTHTh5.js +746 -0
  200. package/dist/{row-check-BajTgQZ-.d.ts → row-check-Dt35czLy.d.ts} +12 -15
  201. package/dist/row-conditions-h2HythXQ.js +27 -0
  202. package/dist/rpc-DL9Sqvb1.js +89 -0
  203. package/dist/{run-CJ6UvS3a.js → run-DKDbM4Du.js} +31 -12
  204. package/dist/runtime-CB8gQFvS.js +11 -0
  205. package/dist/{saas-BRrZzJkM.js → saas-DhpJjnBA.js} +17 -7
  206. package/dist/{schema-P8yoma__.js → schema-D3MnDMxa.js} +8 -4
  207. package/dist/scim/index.d.ts +1 -1
  208. package/dist/scim/index.js +1 -1
  209. package/dist/{scim-9NFa0XVZ.js → scim-BFGBBAqR.js} +1 -1
  210. package/dist/{scopes-cKVp_WTw.js → scopes-CVdPrWN-.js} +35 -8
  211. package/dist/server/index.d.ts +22 -11
  212. package/dist/server/index.js +11 -8
  213. package/dist/{credentials-BgRX3WEg.js → server-DlZ28Oz5.js} +1 -1
  214. package/dist/shared-DRu8VFVM.js +123 -0
  215. package/dist/{sink-Cfr9-7YC.d.ts → sink-B1fZzIMf.d.ts} +1 -1
  216. package/dist/skills-Biq5uup3.js +192 -0
  217. package/dist/{skills-C_lpV4Jx.js → skills-Bx-U0irG.js} +10 -4
  218. package/dist/{snapshot-DE8dE_hz.js → snapshot-Enxd0n-s.js} +138 -214
  219. package/dist/snapshot-cache-B-LxUahj.d.ts +45 -0
  220. package/dist/snapshot-cache-D6jLelln.js +44 -0
  221. package/dist/solid/index.d.ts +39 -9
  222. package/dist/solid/index.js +76 -85
  223. package/dist/sources-4p0-4xQm.js +545 -0
  224. package/dist/sources-BdOYLw9j.d.ts +192 -0
  225. package/dist/{sql-Bll1d7y0.js → sql-xdg5f4Fi.js} +6 -1
  226. package/dist/{src-CTNT-PBW.js → src-BDwEZWrZ.js} +149 -11
  227. package/dist/ssf/index.d.ts +3 -2
  228. package/dist/ssf/index.js +3 -29
  229. package/dist/store-DMAWwAJV.js +371 -0
  230. package/dist/{store-Bq90395i.d.ts → store-jOBYpiXC.d.ts} +13 -4
  231. package/dist/store-options-ByhZq1jV.js +716 -0
  232. package/dist/{stores-CkG2HrSg.js → stores-BT2pSCub.js} +10 -63
  233. package/dist/{stores-CvOnu_2T.d.ts → stores-C0IMQrGI.d.ts} +20 -9
  234. package/dist/{stream-BhMfZOwr.d.ts → stream-D1RXubw2.d.ts} +2 -2
  235. package/dist/{stream-Q_xlB6Ko.js → stream-DDpvynSB.js} +16 -2
  236. package/dist/subject-settings-BwBmCdTR.js +128 -0
  237. package/dist/supabase/index.d.ts +133 -6
  238. package/dist/supabase/index.js +4 -3
  239. package/dist/supabase/middleware.d.ts +32 -27
  240. package/dist/supabase/middleware.js +56 -22
  241. package/dist/{supabase-D8UlBA7Z.js → supabase-Boqb9a_Y.js} +3 -3
  242. package/dist/{supabase-DTxGtYdi.js → supabase-C0qESOa-.js} +347 -367
  243. package/dist/supabase-config-BpPXt3x1.js +472 -0
  244. package/dist/supabase-hook-6sYLXg_u.js +2 -0
  245. package/dist/{supabase-hook-D_OqGb_V.js → supabase-hook-CSLQ4zJ3.js} +1037 -705
  246. package/dist/supautils-Cn4R4cJ4.js +91 -0
  247. package/dist/svelte/PermissionBoundary.svelte +37 -0
  248. package/dist/svelte/Protected.svelte +8 -2
  249. package/dist/svelte/index.d.ts +9 -6
  250. package/dist/svelte/index.js +61 -7
  251. package/dist/svelte/runtime.d.ts +4 -3
  252. package/dist/svelte/runtime.js +4 -3
  253. package/dist/svelte/source.d.ts +9 -6
  254. package/dist/svelte/source.js +7 -4
  255. package/dist/terminal/index.d.ts +6 -14
  256. package/dist/terminal/index.js +44 -32
  257. package/dist/testing/index.d.ts +105 -16
  258. package/dist/testing/index.js +504 -40
  259. package/dist/testing/saas/index.d.ts +4 -4
  260. package/dist/testing/saas/index.js +2 -2
  261. package/dist/testing/saas/permissions.d.ts +1 -1
  262. package/dist/testing/saas/permissions.js +1 -1
  263. package/dist/token-CIWxJOCh.js +50 -0
  264. package/dist/trpc/index.d.ts +7 -26
  265. package/dist/trpc/index.js +17 -100
  266. package/dist/types-BnIEz1sU.d.ts +48 -0
  267. package/dist/{types-CxquUByI.d.ts → types-Bvc4oWT6.d.ts} +1 -1
  268. package/dist/{sources-DOpW5Ila.d.ts → types-C97IskBw.d.ts} +86 -127
  269. package/dist/types-CKNSyIf_.d.ts +52 -0
  270. package/dist/types-Cq_H8N_X.d.ts +197 -0
  271. package/dist/{types-D6Z6-rKJ.d.ts → types-DbjRN55U.d.ts} +273 -22
  272. package/dist/{types-BBK-exvJ.d.ts → types-Dnemwd77.d.ts} +7 -1
  273. package/dist/{types-BvBk1wgn.d.ts → types-DxiCGmmd.d.ts} +5 -3
  274. package/dist/{types-B9dmiiab.d.ts → types-QCuYJh4q.d.ts} +1 -1
  275. package/dist/{types-B8w5PFtS.d.ts → types-aqOHTHcp.d.ts} +17 -1
  276. package/dist/unplugin/index.d.ts +1 -1
  277. package/dist/unplugin/index.js +10 -9
  278. package/dist/usage-DorAJiU_.js +2 -0
  279. package/dist/{usage-1ozMubLY.js → usage-GTixvDDU.js} +2 -2
  280. package/dist/{usage-CUnK6Ou9.js → usage-ItS7nLcl.js} +225 -62
  281. package/dist/validation-error-Ba264OaJ.d.ts +26 -0
  282. package/dist/validation-error-CnjZ4t92.js +33 -0
  283. package/dist/{validity-D0uRmJKJ.js → validity-uOp8UpYn.js} +57 -36
  284. package/dist/{verifier-B90agnhl.js → verifier-BxBo6I44.js} +10 -5
  285. package/dist/version-BvacVTZR.js +17 -0
  286. package/dist/views-Soe7bGSC.js +95 -0
  287. package/dist/{vocabulary-Dk0fs-Jk.d.ts → vocabulary-DA8a8zif.d.ts} +1 -1
  288. package/dist/vue/index.d.ts +35 -13
  289. package/dist/vue/index.js +86 -93
  290. package/dist/watch-BwxLTYMZ.js +2 -0
  291. package/dist/watch-DVBJ9cBq.js +128 -0
  292. package/dist/webmcp/index.d.ts +2 -2
  293. package/dist/webmcp/index.js +7 -13
  294. package/package.json +62 -36
  295. package/schemas/approval-request-v1.json +175 -0
  296. package/schemas/catalog-v1.json +29 -1
  297. package/schemas/supabase-claims-v1.json +6 -1
  298. package/schemas/supabase-manifest-v1.json +150 -6
  299. package/skills/permdock/SKILL.md +7 -7
  300. package/skills/permdock-agents/SKILL.md +5 -5
  301. package/skills/permdock-agents/references/runtimes.md +12 -10
  302. package/skills/permdock-approvals/SKILL.md +4 -4
  303. package/skills/permdock-approvals/references/stores-and-resume.md +15 -4
  304. package/skills/permdock-audit/SKILL.md +3 -3
  305. package/skills/permdock-credentials/SKILL.md +4 -4
  306. package/skills/permdock-credentials/references/tokens-keys-links.md +7 -2
  307. package/skills/permdock-data/SKILL.md +4 -4
  308. package/skills/permdock-data/references/queries-and-rls.md +14 -6
  309. package/skills/permdock-data/references/relationships.md +5 -3
  310. package/skills/permdock-tenancy/SKILL.md +9 -6
  311. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +14 -8
  312. package/skills/permdock-wire/SKILL.md +4 -4
  313. package/skills/permdock-wire/references/adapters.md +42 -30
  314. package/skills/permdock-wire/references/policy-options.md +5 -3
  315. package/dist/approvers-aH0PJkmf.js +0 -20
  316. package/dist/catalog-idsHc0vo.js +0 -2
  317. package/dist/collect-B7_TIfmg.js +0 -49
  318. package/dist/collect-fRPAQIWb.js +0 -2
  319. package/dist/compile-CQbvyIBr.d.ts +0 -30
  320. package/dist/config-BPYmjTOp.js +0 -26
  321. package/dist/context-gtAwAILx.js +0 -6
  322. package/dist/create-BKF3dgFk.d.ts +0 -162
  323. package/dist/create-CSkhDU9T.js +0 -222
  324. package/dist/doctor-BGle8Gqi.js +0 -1314
  325. package/dist/helpers-DnSOrhB9.js +0 -682
  326. package/dist/index-fG6NSXlc.d.ts +0 -9
  327. package/dist/kernel-YOGCWNLf.js +0 -211
  328. package/dist/load-QOOm1z70.js +0 -2
  329. package/dist/manifest-DDQbC6K0.d.ts +0 -118
  330. package/dist/map-error-RJ3ZsUyA.js +0 -16
  331. package/dist/may-use-CnFEjVEp.js +0 -37
  332. package/dist/pg-4GJWDUxG.js +0 -953
  333. package/dist/plugin-4gr7IxFJ.js +0 -65
  334. package/dist/protected-B4K3BKoX.js +0 -138
  335. package/dist/protected-wY7nXhY9.d.ts +0 -23
  336. package/dist/provider-_wx46HpB.js +0 -48
  337. package/dist/rls-CJVja9Ww.js +0 -2119
  338. package/dist/rls-helpers-BxRuif0l.js +0 -1346
  339. package/dist/runtime-DP9ttFh1.js +0 -27
  340. package/dist/skills-Dx3QLnMY.js +0 -110
  341. package/dist/source-DoBBYJi2.js +0 -6
  342. package/dist/sources-DVHM3Mwq.js +0 -284
  343. package/dist/store-C6hFW6ta.js +0 -508
  344. package/dist/subject-settings-xt7V845g.js +0 -82
  345. package/dist/supabase-hook-DW-xP4hU.js +0 -2
  346. package/dist/types-DbWdEfcm.d.ts +0 -87
  347. package/dist/types-bva3i4Gf.d.ts +0 -98
  348. package/dist/types-i4BAOvdb.d.ts +0 -97
  349. package/dist/usage-PyEor6GA.js +0 -2
  350. package/dist/version-CnSh33Fj.js +0 -16
@@ -0,0 +1,97 @@
1
+ import { t as compact } from "./compact-y6vfu2_f.js";
2
+ import { o as invalidSignatureResponse } from "./evaluations-tz6D9A2G.js";
3
+ import { t as instanceOptions } from "./instance-options-Dhhcnm3y.js";
4
+ import { n as tenantScope } from "./adapter-context-mlWsVGGg.js";
5
+ import { n as createServerKernel } from "./create-CMwIl-w2.js";
6
+ //#region src/server/bind.ts
7
+ /** The server kernel with the subject and actor callbacks reading the context `contextOf` maps a `Request` to. */
8
+ function adapterKernel(policy, options, adapter, contextOf) {
9
+ return createServerKernel(policy, compact({
10
+ subject: (request) => {
11
+ const context = contextOf(request);
12
+ return context === void 0 ? null : options.subject(context);
13
+ },
14
+ actor: options.actor === void 0 ? void 0 : (request) => {
15
+ const context = contextOf(request);
16
+ return context === void 0 ? void 0 : options.actor?.(context);
17
+ },
18
+ ...instanceOptions(options),
19
+ store: options.store,
20
+ pdp: options.pdp,
21
+ webBotAuth: options.webBotAuth,
22
+ revocations: options.revocations,
23
+ adapter,
24
+ wrap: options.otel
25
+ }));
26
+ }
27
+ /**
28
+ * The kernel of a framework adapter, with the subject, actor and tenant
29
+ * callbacks reading the framework context each `Request` was built from.
30
+ */
31
+ function bindKernel(policy, options, adapter, toRequest) {
32
+ const contexts = /* @__PURE__ */ new WeakMap();
33
+ const bound = /* @__PURE__ */ new WeakMap();
34
+ const kernel = adapterKernel(policy, options, adapter, (request) => contexts.get(request));
35
+ const bind = (context) => {
36
+ const hit = bound.get(context);
37
+ if (hit !== void 0) return hit;
38
+ const request = toRequest(context);
39
+ bound.set(context, request);
40
+ contexts.set(request, context);
41
+ return request;
42
+ };
43
+ const rebind = (context) => {
44
+ const request = toRequest(context);
45
+ contexts.set(request, context);
46
+ const previous = bound.get(context);
47
+ if (previous !== void 0) kernel.shareSubject(previous, request);
48
+ return request;
49
+ };
50
+ const scopeOf = (context) => tenantScope(options.tenant, context);
51
+ const handlerScope = (request) => {
52
+ const context = contexts.get(request);
53
+ return context === void 0 ? Promise.resolve({ tenant: void 0 }) : scopeOf(context);
54
+ };
55
+ const attach = (context) => attached(async () => kernel.permdock(bind(context), await scopeOf(context)));
56
+ return {
57
+ kernel,
58
+ bind,
59
+ rebind,
60
+ scopeOf,
61
+ handlerScope,
62
+ attach
63
+ };
64
+ }
65
+ /** The instance `build` resolves; an invalid Web Bot Auth signature is its `401` response. */
66
+ async function attached(build) {
67
+ try {
68
+ return {
69
+ ok: true,
70
+ permdock: await build()
71
+ };
72
+ } catch (error) {
73
+ const response = invalidSignatureResponse(error);
74
+ if (response === void 0) throw error;
75
+ return {
76
+ ok: false,
77
+ response
78
+ };
79
+ }
80
+ }
81
+ /** Sets `permdock`, and `permdockData` when a loader returned a row, on a framework request or context. */
82
+ function decorate(target, instance, data) {
83
+ Object.assign(target, data === void 0 ? { permdock: instance } : {
84
+ permdock: instance,
85
+ permdockData: data
86
+ });
87
+ }
88
+ /** One connection per socket: every handler of `socket` gets the promise the first one opened. */
89
+ function socketConnection(sockets, socket, open) {
90
+ const hit = sockets.get(socket);
91
+ if (hit !== void 0) return hit;
92
+ const opened = open();
93
+ sockets.set(socket, opened);
94
+ return opened;
95
+ }
96
+ //#endregion
97
+ export { socketConnection as a, decorate as i, attached as n, bindKernel as r, adapterKernel as t };
@@ -0,0 +1,13 @@
1
+ import { r as parsePermDockDigest } from "./digest-BI-6aa6d.js";
2
+ //#region src/client/boundary.ts
3
+ /** The digest of a PermDock error (`PermDockDeniedError`, `PermDockApprovalRequiredError`); `null` for any other error. */
4
+ function boundaryDigest(error) {
5
+ if (error === null || typeof error !== "object" || !("digest" in error)) return null;
6
+ return parsePermDockDigest(error.digest);
7
+ }
8
+ /** What a boundary renders for `digest`: `approval` for an approval request when given, otherwise `denied`. */
9
+ function boundaryFallback(digest, fallbacks) {
10
+ return digest.outcome === "approval-required" ? fallbacks.approval ?? fallbacks.denied : fallbacks.denied;
11
+ }
12
+ //#endregion
13
+ export { boundaryFallback as n, boundaryDigest as t };
@@ -0,0 +1,15 @@
1
+ import { t as PermDockDigest } from "./digest-B3kc_PgQ.js";
2
+ //#region src/client/boundary.d.ts
3
+ type PermissionBoundaryState = PermDockDigest & {
4
+ /** Renders the boundary's children again, e.g. after an approval or a role change. */
5
+ readonly retry: () => void;
6
+ };
7
+ /** The digest of a PermDock error (`PermDockDeniedError`, `PermDockApprovalRequiredError`); `null` for any other error. */
8
+ declare function boundaryDigest(error: unknown): PermDockDigest | null;
9
+ /** What a boundary renders for `digest`: `approval` for an approval request when given, otherwise `denied`. */
10
+ declare function boundaryFallback<T>(digest: PermDockDigest, fallbacks: {
11
+ readonly denied?: T | undefined;
12
+ readonly approval?: T | undefined;
13
+ }): T | undefined;
14
+ //#endregion
15
+ export { boundaryDigest as n, boundaryFallback as r, PermissionBoundaryState as t };
@@ -0,0 +1,26 @@
1
+ //#region src/core/canonical-json.ts
2
+ function isRecord(value) {
3
+ return value !== null && typeof value === "object" && !Array.isArray(value);
4
+ }
5
+ /**
6
+ * JSON with sorted keys and `undefined` members dropped, so equal values hash
7
+ * equally. Dates become ISO strings, bigints `"<n>n"`, and a repeated object
8
+ * on the current path `"[Circular]"`, so any validated row serialises.
9
+ */
10
+ function canonicalJson(value, path = /* @__PURE__ */ new Set()) {
11
+ if (typeof value === "bigint") return JSON.stringify(`${value}n`);
12
+ if (value instanceof Date) return JSON.stringify(Number.isNaN(value.getTime()) ? null : value.toISOString());
13
+ if (value !== null && typeof value === "object") {
14
+ if (path.has(value)) return "\"[Circular]\"";
15
+ path.add(value);
16
+ try {
17
+ if (Array.isArray(value)) return `[${value.map((item) => canonicalJson(item === void 0 ? null : item, path)).join(",")}]`;
18
+ if (isRecord(value)) return `{${Object.keys(value).toSorted().filter((key) => value[key] !== void 0).map((key) => `${JSON.stringify(key)}:${canonicalJson(value[key], path)}`).join(",")}}`;
19
+ } finally {
20
+ path.delete(value);
21
+ }
22
+ }
23
+ return JSON.stringify(value) ?? "null";
24
+ }
25
+ //#endregion
26
+ export { canonicalJson as t };
@@ -1,5 +1,5 @@
1
- import { Tt as TokenSigner, hr as Subject, mr as Principal } from "./policy-CInmNGkM.js";
2
- import { d as Permission, p as PermissionTree } from "./permissions-B4apnahQ.js";
1
+ import { Nr as Principal, Pr as Subject, Pt as TokenSigner } from "./policy-IB6yxpC3.js";
2
+ import { f as Permission, m as PermissionTree } from "./permissions-DttnqqxC.js";
3
3
  //#region src/core/capability.d.ts
4
4
  /**
5
5
  * Who may redeem a capability: anyone holding it, any signed-in principal,
@@ -1,6 +1,8 @@
1
1
  import { t as compact } from "./compact-y6vfu2_f.js";
2
- import { n as freezeDeep } from "./freeze-y1_jQL4v.js";
3
- import { S as isForbiddenKey, g as listPermissions } from "./permissions-DC7GROPA.js";
2
+ import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
+ import { T as isForbiddenKey, _ as listPermissions } from "./permissions-DVoF6dMt.js";
4
+ import { t as expiredAt } from "./expiry-BoBJ8Tvc.js";
5
+ import { n as sameId } from "./ids-DC4V4CFu.js";
4
6
  import { t as anonymousSubject } from "./subject-C6dLxqHU.js";
5
7
  //#region src/core/capability.ts
6
8
  function redeemerKind(redeemer) {
@@ -126,9 +128,9 @@ function signCapability(input, signer, options = {}) {
126
128
  }));
127
129
  }
128
130
  function holdsScope(membership, scope, id, now) {
129
- if (membership.expiresAt !== void 0 && membership.expiresAt <= now) return false;
130
- if (membership.scope === scope && membership.id === id) return true;
131
- return scope === "tenant" && membership.tenant === id || scope === "team" && membership.team === id;
131
+ if (expiredAt(membership, now)) return false;
132
+ if (membership.scope === scope && sameId(membership.id, id)) return true;
133
+ return scope === "tenant" && sameId(membership.tenant, id) || scope === "team" && sameId(membership.team, id);
132
134
  }
133
135
  /** Whether `viewer`, the request's own verified subject, may redeem a capability. */
134
136
  function redeemerAllows(redeemer, viewer, now = Date.now() / 1e3) {
@@ -1,4 +1,4 @@
1
- import { a as CatalogDocument, c as CatalogResource, d as CatalogSupportAccess, f as CatalogUsage, i as CatalogDelegation, l as CatalogRole, n as CatalogApproval, o as CatalogGrant, p as CatalogValidity, r as CatalogBreakGlass, s as CatalogPermission, t as CatalogActivation, u as CatalogScope } from "../types-BBK-exvJ.js";
1
+ import { a as CatalogDocument, c as CatalogResource, d as CatalogSupportAccess, f as CatalogUsage, i as CatalogDelegation, l as CatalogRole, n as CatalogApproval, o as CatalogGrant, p as CatalogValidity, r as CatalogBreakGlass, s as CatalogPermission, t as CatalogActivation, u as CatalogScope } from "../types-Dnemwd77.js";
2
2
  //#region src/catalog/parse.d.ts
3
3
  /**
4
4
  * Reads a `permissions.catalog.json` document (parsed, or the JSON text) and
@@ -1,2 +1,2 @@
1
- import { n as rowConditionKeys, t as parseCatalog } from "../parse-DPfIvFMU.js";
1
+ import { n as rowConditionKeys, t as parseCatalog } from "../parse-BuyjxhZV.js";
2
2
  export { parseCatalog, rowConditionKeys };
@@ -0,0 +1,2 @@
1
+ import { t as runCatalog } from "./catalog-DWF5cYqB.js";
2
+ export { runCatalog };
@@ -1,7 +1,7 @@
1
- import { a as formatCatalogMarkdown, i as formatCatalogJson, r as catalogSchemaDocument, t as buildCatalog } from "./catalog-doc-BSo_Q_-6.js";
2
- import { n as listSourceFiles, t as defaultSrcPath } from "./files-B_wAGYmt.js";
3
- import { a as loadModule, i as loadConfiguredPolicy, o as pickNamed, r as leavesOf, t as asPermissionTree } from "./load-BZ24CpZP.js";
4
- import { n as scanSources, t as runCollect } from "./collect-O-tOtbnk.js";
1
+ import { a as formatCatalogMarkdown, i as formatCatalogJson, r as catalogSchemaDocument, t as buildCatalog } from "./catalog-doc-DdGm82XT.js";
2
+ import { r as listSourceFiles, t as defaultSrcPath } from "./files-DWUN9PzI.js";
3
+ import { a as loadModule, i as loadConfiguredPolicy, o as pickNamed, r as leavesOf, t as asPermissionTree } from "./load-DhWEB9P1.js";
4
+ import { i as scanSources, r as runCollect } from "./collect-DSTE3ml9.js";
5
5
  import { existsSync } from "node:fs";
6
6
  import { resolve } from "node:path";
7
7
  //#region src/cli/catalog.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-DSxCqG9A.js";
2
2
  import { defineCommand } from "citty";
3
3
  //#region src/cli/commands/catalog.ts
4
4
  function catalog(ctx) {
@@ -31,7 +31,7 @@ function catalog(ctx) {
31
31
  }
32
32
  },
33
33
  async run({ args: parsed, rawArgs }) {
34
- const result = await (await import("./catalog-idsHc0vo.js")).runCatalog({
34
+ const result = await (await import("./catalog-CRW5Mx_B.js")).runCatalog({
35
35
  cwd: ctx.cwd,
36
36
  config: ctx.config,
37
37
  format: parsed.format,
@@ -1,33 +1,16 @@
1
- import { a as formerKeys, c as getResource, g as listPermissions } from "./permissions-DC7GROPA.js";
2
- import { t as catalogFingerprint } from "./src-CTNT-PBW.js";
3
- import { b as findRole } from "./grantee-Bv04_Vzf.js";
4
- import { l as canonicalJson } from "./snapshot-DE8dE_hz.js";
1
+ import { _ as listPermissions, a as formerKeys, c as getResource } from "./permissions-DVoF6dMt.js";
2
+ import { t as catalogFingerprint } from "./src-BDwEZWrZ.js";
3
+ import { S as findRole } from "./grantee-Cv5Sogfv.js";
4
+ import { t as canonicalJson } from "./canonical-json-DemiK4Vp.js";
5
5
  import { t as byCodePoint } from "./compare-pfyVnBjE.js";
6
- import { t as catalogSchema } from "./schema-P8yoma__.js";
7
- import { o as generatorBanner, t as CATALOG_SCHEMA } from "./version-CnSh33Fj.js";
6
+ import { t as catalogSchema } from "./schema-D3MnDMxa.js";
7
+ import { t as policyRowConditionKeys } from "./row-conditions-h2HythXQ.js";
8
+ import { s as generatorBanner, t as CATALOG_SCHEMA } from "./version-BvacVTZR.js";
8
9
  //#region src/cli/catalog-doc.ts
9
- const ROW_GRANTEES = /* @__PURE__ */ new Set([
10
- "relation",
11
- "plan",
12
- "actor",
13
- "assurance"
14
- ]);
15
- /**
16
- * Whether a grant depends on more than the role and the scope: a row or body
17
- * condition, a closure, a field list, a purpose, a break-glass override, a
18
- * validity window, or a relation, plan, actor or assurance grantee. The SQL helpers
19
- * (`permdock_has`, `permitted_<scope>_ids`) check only role and scope, so a
20
- * policy that calls them for such a permission would widen access.
21
- */
22
- function grantHasRowConditions(grant) {
23
- const grantees = Array.isArray(grant.to) ? grant.to : [grant.to];
24
- return grant.where !== void 0 || grant.check !== void 0 || grant.closure !== void 0 || !grant.portable || grant.fields !== void 0 || grant.purpose !== void 0 || grant.breakGlass !== void 0 || grant.validity !== void 0 || grantees.some((grantee) => ROW_GRANTEES.has(grantee.kind));
25
- }
26
- /** Per permission key, whether any code grant for it has row conditions. */
27
- function policyRowConditionKeys(policy) {
28
- const keys = /* @__PURE__ */ new Set();
29
- for (const grant of [...policy.grants, ...policy.roles.flatMap((binding) => binding.grants)]) if (grant.hosted === void 0 && grantHasRowConditions(grant)) keys.add(grant.permission.key);
30
- return keys;
10
+ function leafLevels(tree, leaf) {
11
+ if (leaf.kind !== "instance") return;
12
+ const names = Object.keys({ ...getResource(tree, leaf.resource)?.levels });
13
+ return names.length === 0 ? void 0 : names;
31
14
  }
32
15
  /** With `policy`, permissions carry `hostable` and a known `rowConditions` (without, it is `true`), and roles carry `on`, `assignable` and their ownership rules. */
33
16
  function buildCatalog(tree, scan, generatedAt, policy) {
@@ -43,14 +26,16 @@ function buildCatalog(tree, scan, generatedAt, policy) {
43
26
  schema: node === void 0 ? null : jsonSchemaOf(node),
44
27
  relations: node?.relations,
45
28
  version: node?.version,
46
- restricted: node?.restricted
29
+ restricted: node?.restricted,
30
+ restrictedStops: node?.restrictedStops
47
31
  } : {
48
32
  id: node?.id ?? "id",
49
33
  schema: node === void 0 ? null : jsonSchemaOf(node),
50
34
  definedIn,
51
35
  relations: node?.relations,
52
36
  version: node?.version,
53
- restricted: node?.restricted
37
+ restricted: node?.restricted,
38
+ restrictedStops: node?.restrictedStops
54
39
  });
55
40
  }
56
41
  const approvals = codeApprovals(policy);
@@ -66,6 +51,7 @@ function buildCatalog(tree, scan, generatedAt, policy) {
66
51
  meta: metaRecord(leaf.meta),
67
52
  usages: scan.usages[leaf.key] ?? [],
68
53
  renamedFrom: formerKeys(leaf).length === 0 ? void 0 : formerKeys(leaf),
54
+ levels: leafLevels(tree, leaf),
69
55
  hostable: hostable.has(leaf.key) ? true : void 0,
70
56
  rowConditions: rowConditions?.has(leaf.key) ?? true,
71
57
  approvals: approvals.get(leaf.key),
@@ -131,6 +117,7 @@ function catalogGrant(grant) {
131
117
  validity: grant.validity,
132
118
  name: grant.name,
133
119
  purpose: grant.purpose,
120
+ requires: grant.requires?.length === 1 ? grant.requires[0] : grant.requires,
134
121
  limit,
135
122
  portable: grant.portable ? void 0 : false
136
123
  })
@@ -252,7 +239,8 @@ function compactResource(resource) {
252
239
  definedIn: resource.definedIn,
253
240
  relations,
254
241
  version: resource.version,
255
- restricted: resource.restricted
242
+ restricted: resource.restricted,
243
+ restrictedStops: resource.restrictedStops
256
244
  })
257
245
  };
258
246
  }
@@ -295,4 +283,4 @@ function catalogSchemaDocument() {
295
283
  return catalogSchema;
296
284
  }
297
285
  //#endregion
298
- export { formatCatalogMarkdown as a, formatCatalogJson as i, catalogForCompare as n, jsonSchemaOf as o, catalogSchemaDocument as r, policyRowConditionKeys as s, buildCatalog as t };
286
+ export { formatCatalogMarkdown as a, formatCatalogJson as i, catalogForCompare as n, jsonSchemaOf as o, catalogSchemaDocument as r, buildCatalog as t };
@@ -1,6 +1,7 @@
1
- import { $ as DecisionSink, C as Policy, E as PolicyVocabulary, Zt as PermDock, at as LimitStore, ct as MembershipSource, ft as RelationSource, mr as Principal, pt as RoleSource, sn as PolicySource, tt as EntitlementSource, ur as Delegation, xt as SnapshotSource } from "../policy-CInmNGkM.js";
2
- import { f as ApprovalStore } from "../types-B8w5PFtS.js";
3
- import { t as ToolMap } from "../types-CxquUByI.js";
1
+ import { C as Policy, D as PolicyVocabulary, Nr as Principal, kr as Delegation, ln as PermDock } from "../policy-IB6yxpC3.js";
2
+ import { f as ApprovalStore } from "../types-aqOHTHcp.js";
3
+ import { t as InstanceOptions } from "../instance-options-jARdwfPN.js";
4
+ import { t as ToolMap } from "../types-Bvc4oWT6.js";
4
5
  //#region src/claude-agent/create.d.ts
5
6
  /** Structural `McpServerProvenance` from `@anthropic-ai/claude-agent-sdk`. */
6
7
  type ClaudeMcpServer = {
@@ -18,7 +19,7 @@ type ClaudeAgentContext = {
18
19
  readonly sessionId?: string;
19
20
  readonly agentId?: string;
20
21
  };
21
- type ClaudeAgentPermDockOptions<TUser = unknown> = {
22
+ type ClaudeAgentPermDockOptions<TUser = unknown> = InstanceOptions & {
22
23
  readonly subject: (context: ClaudeAgentContext) => TUser | Promise<TUser>;
23
24
  readonly actor?: (context: ClaudeAgentContext) => unknown;
24
25
  readonly delegation?: (context: ClaudeAgentContext) => Delegation | undefined | Promise<Delegation | undefined>;
@@ -26,17 +27,7 @@ type ClaudeAgentPermDockOptions<TUser = unknown> = {
26
27
  readonly tools: ToolMap;
27
28
  /** MCP server sources whose `mcp__*` tools may be decided; default `['sdk']`. */
28
29
  readonly mcpSources?: readonly string[];
29
- readonly memberships?: MembershipSource | readonly MembershipSource[];
30
- /** The object graph for relation grants that walk a parent chain; without it they deny. */
31
- readonly relations?: RelationSource;
32
- readonly entitlements?: EntitlementSource;
33
- readonly customRoles?: RoleSource;
34
- /** Hosted grants, read once per instance; see `PolicySource`. */
35
- readonly policies?: PolicySource;
36
30
  readonly store?: ApprovalStore;
37
- readonly sink?: DecisionSink;
38
- readonly limits?: LimitStore;
39
- readonly snapshots?: SnapshotSource;
40
31
  };
41
32
  type PermissionResult = {
42
33
  readonly behavior: "allow";
@@ -1,5 +1,6 @@
1
1
  import { t as compact } from "../compact-y6vfu2_f.js";
2
- import { n as createAgentKernel } from "../kernel-YOGCWNLf.js";
2
+ import { t as instanceOptions } from "../instance-options-Dhhcnm3y.js";
3
+ import { n as createAgentKernel } from "../kernel-_RRHmnMY.js";
3
4
  //#region src/claude-agent/create.ts
4
5
  const MCP_PREFIX = "mcp__";
5
6
  function asInput(input) {
@@ -34,16 +35,9 @@ function createPermDock(policy, options) {
34
35
  actor: options.actor,
35
36
  delegation: options.delegation,
36
37
  tenant: options.tenant,
37
- memberships: options.memberships,
38
- relations: options.relations,
39
- entitlements: options.entitlements,
40
- customRoles: options.customRoles,
41
- policies: options.policies,
42
- store: options.store,
43
- sink: options.sink,
44
- limits: options.limits,
45
- snapshots: options.snapshots
38
+ store: options.store
46
39
  }),
40
+ ...instanceOptions(options),
47
41
  subject: options.subject,
48
42
  tools: options.tools,
49
43
  adapter: "claude-agent"
@@ -1,5 +1,6 @@
1
- import { hr as Subject, mr as Principal, pt as RoleSource } from "../policy-CInmNGkM.js";
2
- import { d as Permission } from "../permissions-B4apnahQ.js";
1
+ import { Nr as Principal, Pr as Subject, xt as RoleSource } from "../policy-IB6yxpC3.js";
2
+ import { f as Permission } from "../permissions-DttnqqxC.js";
3
+ import { s as RemotePdpCache } from "../types-DxiCGmmd.js";
3
4
  import { StandardSchemaV1 } from "@standard-schema/spec";
4
5
  //#region src/clerk/types.d.ts
5
6
  type ClerkPrincipal = Principal & {
@@ -49,8 +50,16 @@ type ClerkAuthObject = {
49
50
  readonly sessionClaims?: Readonly<Record<string, unknown>> | null;
50
51
  readonly has?: (...args: never[]) => unknown;
51
52
  };
53
+ type ClerkSubjectResolverOptions = ClerkSubjectOptions & {
54
+ readonly cache?: RemotePdpCache;
55
+ };
52
56
  //#endregion
53
57
  //#region src/clerk/subject.d.ts
54
58
  export declare function subjectFromClerk(authObject: unknown, options?: ClerkSubjectOptions): Promise<Subject<ClerkPrincipal>>;
59
+ /**
60
+ * A resolver that keeps each user's `memberships: 'all'` list for
61
+ * `cache.ttl` (at most 30 seconds), so a removed membership grants until then.
62
+ */
63
+ export declare function createClerkSubjectResolver(options?: ClerkSubjectResolverOptions): (authObject: unknown) => Promise<Subject<ClerkPrincipal>>;
55
64
  //#endregion
56
- export type { ClerkAuthObject, ClerkBackend, ClerkGlobalRoles, ClerkMembershipListItem, ClerkPrincipal, ClerkSubjectOptions };
65
+ export type { ClerkAuthObject, ClerkBackend, ClerkGlobalRoles, ClerkMembershipListItem, ClerkPrincipal, ClerkSubjectOptions, ClerkSubjectResolverOptions };
@@ -1,7 +1,8 @@
1
1
  import { t as compact } from "../compact-y6vfu2_f.js";
2
- import { n as freezeDeep } from "../freeze-y1_jQL4v.js";
2
+ import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
3
3
  import { t as ignoreRejection } from "../thenable-okc2xDsj.js";
4
4
  import { t as anonymousSubject } from "../subject-C6dLxqHU.js";
5
+ import { c as ttlMs, s as ttlCache } from "../shared-DRu8VFVM.js";
5
6
  //#region src/clerk/subject.ts
6
7
  function isRecord(value) {
7
8
  return value !== null && typeof value === "object" && !Array.isArray(value);
@@ -197,6 +198,7 @@ function membershipRow(item, userId) {
197
198
  roles
198
199
  });
199
200
  }
201
+ /** The memberships Clerk lists for `userId`, or `undefined` when a page fails. */
200
202
  async function extraMemberships(backend, userId) {
201
203
  const list = backend?.users?.getOrganizationMembershipList;
202
204
  if (list === void 0) return [];
@@ -219,10 +221,29 @@ async function extraMemberships(backend, userId) {
219
221
  }
220
222
  return out;
221
223
  } catch {
222
- return [];
224
+ return;
223
225
  }
224
226
  }
225
- async function subjectFromClerk(authObject, options = {}) {
227
+ function subjectFromClerk(authObject, options = {}) {
228
+ return fromClerk(authObject, options, extraMemberships);
229
+ }
230
+ /**
231
+ * A resolver that keeps each user's `memberships: 'all'` list for
232
+ * `cache.ttl` (at most 30 seconds), so a removed membership grants until then.
233
+ */
234
+ function createClerkSubjectResolver(options = {}) {
235
+ const { cache, ...rest } = options;
236
+ const lists = ttlCache(ttlMs(cache));
237
+ const load = async (backend, userId) => {
238
+ const hit = lists.get(userId);
239
+ if (hit !== void 0) return hit;
240
+ const loaded = await extraMemberships(backend, userId);
241
+ if (loaded !== void 0) lists.set(userId, loaded);
242
+ return loaded;
243
+ };
244
+ return (authObject) => fromClerk(authObject, rest, load);
245
+ }
246
+ async function fromClerk(authObject, options, loadMemberships) {
226
247
  try {
227
248
  const trustedObject = isAuthObject(authObject);
228
249
  const trustedPayload = isVerifiedPayload(authObject);
@@ -244,7 +265,7 @@ async function subjectFromClerk(authObject, options = {}) {
244
265
  roles: membershipRoles,
245
266
  entitlements: plans.org.length === 0 ? void 0 : plans.org
246
267
  })] : [];
247
- const loaded = options.memberships === "all" ? await extraMemberships(options.backend, mapped.id) : [];
268
+ const loaded = options.memberships === "all" ? await loadMemberships(options.backend, mapped.id) ?? [] : [];
248
269
  const seen = new Set(sessionMembership.map((item) => item.tenant));
249
270
  const memberships = [...sessionMembership, ...loaded.filter((item) => {
250
271
  if (seen.has(item.tenant)) return false;
@@ -277,4 +298,4 @@ async function subjectFromClerk(authObject, options = {}) {
277
298
  }
278
299
  }
279
300
  //#endregion
280
- export { subjectFromClerk };
301
+ export { createClerkSubjectResolver, subjectFromClerk };
package/dist/cli/bin.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { t as run } from "../run-CJ6UvS3a.js";
2
+ import { t as run } from "../run-DKDbM4Du.js";
3
3
  import { n as streamHasColors } from "../style-CTm1AXDT.js";
4
4
  //#region src/cli/bin.ts
5
5
  const result = await run(process.argv.slice(2), {
@@ -1,5 +1,5 @@
1
- import { a as CatalogDocument, c as CatalogResource, d as CatalogSupportAccess, f as CatalogUsage, l as CatalogRole, n as CatalogApproval, r as CatalogBreakGlass, s as CatalogPermission, t as CatalogActivation, u as CatalogScope } from "../types-BBK-exvJ.js";
2
- import { c as RlsDialect, d as RlsMemberships, f as RlsSuspension, i as PermDockConfig, l as RlsFunctionMapping, m as RunResult, n as CliIo, o as RlsActiveRow, p as RlsTarget, r as CollectConfig, s as RlsConfig, t as CatalogConfig, u as RlsMembershipTable } from "../types-D6Z6-rKJ.js";
1
+ import { a as CatalogDocument, c as CatalogResource, d as CatalogSupportAccess, f as CatalogUsage, l as CatalogRole, n as CatalogApproval, r as CatalogBreakGlass, s as CatalogPermission, t as CatalogActivation, u as CatalogScope } from "../types-Dnemwd77.js";
2
+ import { _ as RunResult, c as RlsConfig, d as RlsMembershipTable, f as RlsMemberships, g as RlsTarget, h as RlsSuspension, i as PermDockConfig, l as RlsDialect, m as RlsSuspendedScope, n as CliIo, o as RlsActiveRow, p as RlsSuspendedMembership, r as CollectConfig, s as RlsApiKeys, t as CatalogConfig, u as RlsFunctionMapping } from "../types-DbjRN55U.js";
3
3
  //#region src/cli/catalog-path.d.ts
4
4
  /**
5
5
  * The absolute path `permdock collect` writes the catalog to: `collect.out`,
@@ -43,4 +43,4 @@ export declare function run(argv: readonly string[], options?: {
43
43
  readonly io?: CliIo;
44
44
  }): Promise<RunResult>;
45
45
  //#endregion
46
- export type { CatalogActivation, CatalogApproval, CatalogBreakGlass, CatalogConfig, CatalogDocument, CatalogPermission, CatalogResource, CatalogRole, CatalogScope, CatalogSupportAccess, CatalogUsage, CollectConfig, PermDockConfig, RlsActiveRow, RlsConfig, RlsDialect, RlsFunctionMapping, RlsMembershipTable, RlsMemberships, RlsSuspension, RlsTarget, RunResult, SupabaseGrantsMarker, SupabaseHookMarker };
46
+ export type { CatalogActivation, CatalogApproval, CatalogBreakGlass, CatalogConfig, CatalogDocument, CatalogPermission, CatalogResource, CatalogRole, CatalogScope, CatalogSupportAccess, CatalogUsage, CollectConfig, PermDockConfig, RlsActiveRow, RlsApiKeys, RlsConfig, RlsDialect, RlsFunctionMapping, RlsMembershipTable, RlsMemberships, RlsSuspendedMembership, RlsSuspendedScope, RlsSuspension, RlsTarget, RunResult, SupabaseGrantsMarker, SupabaseHookMarker };
package/dist/cli/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { t as catalogPath } from "../catalog-path-CnI0XTFK.js";
2
- import { t as defineConfig } from "../config-BPYmjTOp.js";
2
+ import { t as defineConfig } from "../config-BJiM-xAm.js";
3
3
  import { o as parseGrantsMarker, s as parseHookMarker } from "../markers-B0hYLvMD.js";
4
- import { t as run } from "../run-CJ6UvS3a.js";
4
+ import { t as run } from "../run-DKDbM4Du.js";
5
5
  export { catalogPath, defineConfig, parseGrantsMarker, parseHookMarker, run };
@@ -0,0 +1,12 @@
1
+ //#region src/core/clients.d.ts
2
+ /**
3
+ * Stable names for OAuth clients whose ids differ per environment or are
4
+ * assigned at dynamic registration. A record maps each name to the client
5
+ * id (or ids) it stands for; an unset id (an environment variable that is
6
+ * not defined) names nothing. A function maps a verified client id to a
7
+ * name, or `undefined`. Policy delegations name the client (`to: { kind,
8
+ * client }`), never its id.
9
+ */
10
+ type ClientNames = Readonly<Record<string, string | readonly string[] | undefined>> | ((clientId: string) => string | undefined);
11
+ //#endregion
12
+ export { ClientNames as t };
@@ -0,0 +1,23 @@
1
+ //#region src/core/clients.ts
2
+ /**
3
+ * The name `clients` gives `clientId`, or `undefined`: unknown ids, an id
4
+ * two names claim, a function that throws or returns anything but a
5
+ * non-empty string. Never throws.
6
+ */
7
+ function clientNameOf(clients, clientId) {
8
+ if (clients === void 0 || clientId === "") return;
9
+ try {
10
+ if (typeof clients === "function") {
11
+ const name = clients(clientId);
12
+ return typeof name === "string" && name !== "" ? name : void 0;
13
+ }
14
+ const names = Object.entries(clients).flatMap(([name, ids]) => {
15
+ return name !== "" && (typeof ids === "string" ? [ids] : Array.isArray(ids) ? ids : []).includes(clientId) ? [name] : [];
16
+ });
17
+ return names.length === 1 ? names[0] : void 0;
18
+ } catch {
19
+ return;
20
+ }
21
+ }
22
+ //#endregion
23
+ export { clientNameOf as t };
@@ -1,8 +1,7 @@
1
- import { $ as DecisionSink, Et as TokenVerifier, Y as CredentialEvent, Z as DecisionEvent, et as DirectoryEvent, q as AccessEvent, sn as PolicySource, st as MembershipEvent, wt as TokenFailureCause, xt as SnapshotSource } from "../policy-CInmNGkM.js";
2
- import { f as ApprovalStore } from "../types-B8w5PFtS.js";
3
- import { n as CatalogEventData, o as CloudEventType } from "../sink-Cfr9-7YC.js";
4
- import { a as JsonWebKeySet } from "../types-bva3i4Gf.js";
5
- import { a as ReplayStore } from "../types-i4BAOvdb.js";
1
+ import { $ as AccessEvent, At as SnapshotSource, Ft as TokenVerifier, Nt as TokenFailureCause, at as DecisionSink, bn as PolicySource, ht as MembershipEvent, ot as DirectoryEvent, rt as DecisionEvent, tt as CredentialEvent } from "../policy-IB6yxpC3.js";
2
+ import { f as ApprovalStore } from "../types-aqOHTHcp.js";
3
+ import { n as CatalogEventData, o as CloudEventType } from "../sink-B1fZzIMf.js";
4
+ import { a as JsonWebKeySet, g as ReplayStore } from "../types-Cq_H8N_X.js";
6
5
  //#region src/cloud/types.d.ts
7
6
  type CloudEndpointOptions = {
8
7
  readonly url?: string;
@@ -1,10 +1,10 @@
1
1
  import { t as compact } from "../compact-y6vfu2_f.js";
2
- import { n as freezeDeep } from "../freeze-y1_jQL4v.js";
3
- import { S as isForbiddenKey } from "../permissions-DC7GROPA.js";
4
- import { i as parsePolicyDocument } from "../hosted-BwKQ1BTA.js";
2
+ import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
3
+ import { T as isForbiddenKey } from "../permissions-DVoF6dMt.js";
4
+ import { i as parsePolicyDocument } from "../hosted-DJQw46hn.js";
5
5
  import { t as CLOUD_EVENT_TYPES } from "../sink-Bd9PSyfq.js";
6
- import { t as ApprovalError } from "../errors-m3u9TmDu.js";
7
- import { t as joseTokenVerifier } from "../verifier-B90agnhl.js";
6
+ import { r as isApprovalErrorCode, t as ApprovalError } from "../errors-DRnGZHzF.js";
7
+ import { t as joseTokenVerifier } from "../verifier-BxBo6I44.js";
8
8
  import { t as timeoutSignal } from "../timeout-D51niuQP.js";
9
9
  //#region src/cloud/create.ts
10
10
  /** Milliseconds a PermDock Cloud request may take; a slower one fails like an unreachable Cloud. */
@@ -30,6 +30,20 @@ function asApproval(value) {
30
30
  function isCompactJws$1(value) {
31
31
  return !value.startsWith("{") && value.split(".").length === 3;
32
32
  }
33
+ /** The refusal PermDock Cloud names in its body, else the one its status implies. */
34
+ async function approvalErrorFrom(response) {
35
+ let body;
36
+ try {
37
+ body = await response.json();
38
+ } catch {
39
+ return approvalErrorFromStatus(response.status);
40
+ }
41
+ if (body === null || typeof body !== "object" || !("code" in body)) return approvalErrorFromStatus(response.status);
42
+ const code = body.code;
43
+ if (!isApprovalErrorCode(code)) return approvalErrorFromStatus(response.status);
44
+ const detail = "detail" in body ? body.detail : void 0;
45
+ return new ApprovalError(code, typeof detail === "string" && detail.length > 0 ? detail : code);
46
+ }
33
47
  function approvalErrorFromStatus(status) {
34
48
  if (status === 409) return new ApprovalError("approval-not-pending", "approval is not pending");
35
49
  if (status === 410) return new ApprovalError("approval-expired", "approval has expired");
@@ -92,7 +106,7 @@ function cloud(options = {}) {
92
106
  method: "POST",
93
107
  body: JSON.stringify(verdict)
94
108
  });
95
- if (!response.ok) throw approvalErrorFromStatus(response.status);
109
+ if (!response.ok) throw await approvalErrorFrom(response);
96
110
  const parsed = asApproval(await response.json());
97
111
  if (parsed === null) throw new ApprovalError("approval-not-found", "PermDock Cloud returned an unknown approval shape");
98
112
  return parsed;
@@ -1,4 +1,4 @@
1
- import { i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-BMh_Etm2.js";
1
+ import { i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-DSxCqG9A.js";
2
2
  import { defineCommand } from "citty";
3
3
  //#region src/cli/commands/cloud.ts
4
4
  function cloud(ctx) {
@@ -30,7 +30,7 @@ function cloud(ctx) {
30
30
  }
31
31
  },
32
32
  async run({ args: parsed }) {
33
- const result = await (await import("./cloud-Cuxr6Czw.js")).runCloud({
33
+ const result = await (await import("./cloud-DWLXO2af.js")).runCloud({
34
34
  cwd: ctx.cwd,
35
35
  config: ctx.config,
36
36
  rest: parsed._,