permdock 0.16.0 → 0.18.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 (384) hide show
  1. package/dist/a2a/index.d.ts +4 -4
  2. package/dist/a2a/index.js +3 -3
  3. package/dist/{adapter-context-CIQpQxbE.js → adapter-context-OHikyRqV.js} +1 -1
  4. package/dist/{adoption-scan-C2BCiUEG.js → adoption-scan-CxExBYSJ.js} +1 -1
  5. package/dist/agent/index.d.ts +2 -2
  6. package/dist/agent/index.js +1 -1
  7. package/dist/ai-sdk/index.d.ts +3 -3
  8. package/dist/ai-sdk/index.js +3 -3
  9. package/dist/approval-normalize-CUjgSsOl.js +189 -0
  10. package/dist/approval-policies-oNnckT12.d.ts +138 -0
  11. package/dist/{approval-prompt-3BqWczTt.d.ts → approval-prompt-Bg7gDSqd.d.ts} +1 -1
  12. package/dist/approvals/index.d.ts +5 -4
  13. package/dist/approvals/index.js +7 -6
  14. package/dist/{approvals-DnIBTuXE.js → approvals-DGId_hgJ.js} +3 -3
  15. package/dist/{approvers-B4r0N_Uz.js → approvers-BaNwKYgd.js} +20 -1
  16. package/dist/{arazzo-ClYz2Z0W.js → arazzo--riLuGY0.js} +4 -4
  17. package/dist/{arazzo-CHoYnQXO.js → arazzo-CEDbb-uM.js} +2 -2
  18. package/dist/{args-0FrVs5EH.js → args-iafbHiXn.js} +2 -5
  19. package/dist/astro/index.d.ts +4 -4
  20. package/dist/astro/index.js +2 -2
  21. package/dist/{audience-DTjR8xet.js → audience-B4YR9UpV.js} +1 -1
  22. package/dist/{auth--yPyZNgr.js → auth-j3Eu-j4h.js} +1 -1
  23. package/dist/authz-topic-Dbc-HDOS.js +15 -0
  24. package/dist/authzen/index.d.ts +5 -5
  25. package/dist/authzen/index.js +2 -2
  26. package/dist/{automation-C6Jg75xq.d.ts → automation-Bfa_wD1h.d.ts} +1 -1
  27. package/dist/better-auth/index.d.ts +1 -1
  28. package/dist/better-auth/index.js +10 -8
  29. package/dist/better-supabase/index.d.ts +335 -38
  30. package/dist/better-supabase/index.js +778 -117
  31. package/dist/{better-supabase-Dirf_8Ec.js → better-supabase-BJtQ-kNf.js} +26 -10
  32. package/dist/{bind-BNQA9JK9.js → bind-B4pMH9bm.js} +6 -6
  33. package/dist/{bind-YYjvfpB9.d.ts → bind-DR6ku3A9.d.ts} +7 -7
  34. package/dist/{budget-BELja5A9.js → budget-BBCPDOGP.js} +1 -1
  35. package/dist/{budget-hYsPz_yE.d.ts → budget-CNLsV2SL.d.ts} +1 -1
  36. package/dist/{build-instance-BWXqwQYU.js → build-instance-BFMFQdE_.js} +3 -2
  37. package/dist/{capability-Di9tiUvi.d.ts → capability-BZ_veK9o.d.ts} +1 -1
  38. package/dist/{capability-BqX94r07.js → capability-zN6T9fxe.js} +2 -3
  39. package/dist/{casbin-D_rVQ31U.js → casbin-DCQHkkyj.js} +2 -2
  40. package/dist/{casbin-C9EvElBb.js → casbin-bKC1FpEx.js} +2 -2
  41. package/dist/{casl-C4OINZHI.js → casl-CjBVJj8R.js} +2 -2
  42. package/dist/{casl-CHHoCldP.js → casl-CkBssiB1.js} +1 -1
  43. package/dist/catalog/index.d.ts +5 -5
  44. package/dist/catalog/index.js +7 -7
  45. package/dist/catalog-Caqhbdix.js +1 -0
  46. package/dist/{catalog-CGlSwU6j.js → catalog-D1fw8qif.js} +5 -5
  47. package/dist/{catalog-doc-DjMKzJp9.js → catalog-doc-C4DGfJCO.js} +3 -3
  48. package/dist/{catalog-operations-DeHTrJSV.js → catalog-operations-BD22drQf.js} +4 -4
  49. package/dist/{catalog-amPDr0JQ.js → catalog-zzNuR3sY.js} +3 -3
  50. package/dist/{challenge-DImNcR7B.js → challenge-B2O2OLEk.js} +2 -2
  51. package/dist/chat/index.d.ts +1 -1
  52. package/dist/chat/index.js +2 -2
  53. package/dist/chat-sdk/index.d.ts +3 -3
  54. package/dist/{checks-CGkP3Z7A.js → checks-fyDOhcz0.js} +33 -1
  55. package/dist/claude-agent/index.d.ts +3 -3
  56. package/dist/claude-agent/index.js +2 -2
  57. package/dist/clerk/index.d.ts +2 -2
  58. package/dist/clerk/index.js +10 -7
  59. package/dist/cli/bin.js +1 -1
  60. package/dist/cli/index.d.ts +5 -5
  61. package/dist/cli/index.js +3 -3
  62. package/dist/client-CH7vzSAY.d.ts +32 -0
  63. package/dist/cloud/index.d.ts +8 -8
  64. package/dist/cloud/index.js +1 -1
  65. package/dist/{cloud-DdaJ7ILM.js → cloud-C0vXBmLG.js} +4 -4
  66. package/dist/{codemod-B1USJS7a.js → codemod-C-L0w-u7.js} +3 -3
  67. package/dist/{codemod-ammy6wv4.js → codemod-eYI1FbeJ.js} +395 -8
  68. package/dist/{collect-DnXL4B8c.js → collect-CU85z6Ta.js} +4 -4
  69. package/dist/{collect-WCl8cJQV.js → collect-D878zLDP.js} +4 -4
  70. package/dist/collect-KCtOigxx.js +1 -0
  71. package/dist/compile/index.d.ts +1 -1
  72. package/dist/compile/index.js +1 -1
  73. package/dist/{compile-EzEMB-7v.js → compile-B_oJqmIg.js} +4 -4
  74. package/dist/{compile-BEklRUYo.d.ts → compile-DBm0ub4p.d.ts} +2 -2
  75. package/dist/{completion--Y4YItFZ.js → completion-Dauc6pVT.js} +3 -3
  76. package/dist/{config-CcLlvEYW.js → config-COHmivz9.js} +4 -4
  77. package/dist/{config-BQ77xMZk.js → config-DWp2PucY.js} +2 -2
  78. package/dist/{config-report-DVMOLJ7F.js → config-report-DKpFm5ID.js} +2 -2
  79. package/dist/{context-BnIzxTNE.js → context-DeammvFl.js} +2 -2
  80. package/dist/convex/index.d.ts +4 -4
  81. package/dist/convex/index.js +3 -3
  82. package/dist/{core-lxoANyai.js → core-B8sLve3z.js} +7 -7
  83. package/dist/{core-CFepFiDP.d.ts → core-D87h2kpR.d.ts} +2 -2
  84. package/dist/{create-BLPKnJKa.js → create-3A7J9KRR.js} +6 -5
  85. package/dist/{create-CDd9c22W.d.ts → create-BrQXL-Wt.d.ts} +6 -6
  86. package/dist/{create-BPUopdfL.d.ts → create-BzwjZuRS.d.ts} +7 -7
  87. package/dist/{create-Coq5fIrq.js → create-C-tm3KIF.js} +5 -5
  88. package/dist/{create-DBvUsgzK.d.ts → create-CtoT1lIQ.d.ts} +4 -4
  89. package/dist/{credential-CyyyvCsL.js → credential-B3Hj4puZ.js} +4 -3
  90. package/dist/{credentials-CdDxp7jN.js → credentials-dkycUsY3.js} +1 -1
  91. package/dist/decision-CaG5_eNJ.js +21 -0
  92. package/dist/{delegation-CDB6_keF.js → delegation-aK4T_5WU.js} +3 -3
  93. package/dist/delivery/index.d.ts +4 -4
  94. package/dist/delivery/index.js +1 -1
  95. package/dist/{denied-text-DHldhVUv.d.ts → denied-text-DlIxt8fh.d.ts} +1 -1
  96. package/dist/{describe-BbFPBSms.d.ts → describe-BKtC_8PG.d.ts} +1 -1
  97. package/dist/{describe-Bb4hGK5d.js → describe-BZAlPHxT.js} +2 -1
  98. package/dist/{diff-DfmYaIhB.js → diff-BnNHqtHj.js} +8 -8
  99. package/dist/{diff-CxtbOi2l.js → diff-CBCzOTWM.js} +2 -2
  100. package/dist/{doctor-D1Xnmy6u.js → doctor-CkYKCuX7.js} +233 -30
  101. package/dist/{doctor-CwYc2lJb.js → doctor-xUpR5rXg.js} +3 -3
  102. package/dist/drizzle/index.d.ts +3 -3
  103. package/dist/drizzle/index.js +1 -1
  104. package/dist/elysia/index.d.ts +4 -4
  105. package/dist/elysia/index.js +3 -3
  106. package/dist/{errors-Vpu6rKHl.js → errors-BhRkoNS7.js} +0 -2
  107. package/dist/{errors-BIM4MFsJ.d.ts → errors-TpzkEKgJ.d.ts} +1 -1
  108. package/dist/{evaluate-BAmf_AQd.js → evaluate-Czbj7thS.js} +18 -15
  109. package/dist/{evaluations-DOWuBpWv.d.ts → evaluations-CisTTURl.d.ts} +3 -3
  110. package/dist/{evaluations-IBceAeKT.js → evaluations-h3KoJAPa.js} +3 -22
  111. package/dist/eve/index.d.ts +4 -4
  112. package/dist/eve/index.js +3 -3
  113. package/dist/express/index.d.ts +4 -4
  114. package/dist/express/index.js +3 -3
  115. package/dist/fastify/index.d.ts +4 -4
  116. package/dist/fastify/index.js +3 -3
  117. package/dist/{fetch-adapter-BIbBAtPZ.d.ts → fetch-adapter-BdmfnbJM.d.ts} +2 -2
  118. package/dist/{fetch-adapter-dPTgJVHd.js → fetch-adapter-DH-NJPbL.js} +2 -2
  119. package/dist/{fields-DI8s3cPl.js → fields-CrjL6A49.js} +3 -3
  120. package/dist/{files-B3AA05f1.js → files-CfiRtQ-m.js} +1 -1
  121. package/dist/{fixtures-Bm4_K1ke.js → fixtures-Cemqurt8.js} +10 -4
  122. package/dist/{flags-DXjoTVbS.js → flags-BlmpmXoY.js} +2 -2
  123. package/dist/{from-snapshot-DCakWRsr.js → from-snapshot-DMlSSo9b.js} +14 -12
  124. package/dist/{gen-DwgCSC6V.js → gen-BEIN-DRM.js} +2 -2
  125. package/dist/{gen-DuAhghDw.js → gen-mf-MRwVr.js} +9 -9
  126. package/dist/{generate-CRVV5V7l.js → generate-BqkZq8Dr.js} +2 -2
  127. package/dist/{grantee-conditions-BrYPe-w0.js → grantee-conditions-DX4K_gGI.js} +1 -1
  128. package/dist/{grantee-match-7RZZvoT_.js → grantee-match-BP-k4vRJ.js} +2 -2
  129. package/dist/h3/index.d.ts +4 -4
  130. package/dist/h3/index.js +3 -3
  131. package/dist/{helpers-DJicaG6f.js → helpers-DmqGy63f.js} +85 -13
  132. package/dist/hono/index.d.ts +4 -4
  133. package/dist/hono/index.js +3 -3
  134. package/dist/{hosted-DVxlLZMe.d.ts → hosted-BFNXwcjd.d.ts} +1 -1
  135. package/dist/{hosted-D0IzESu_.js → hosted-waouw2V-.js} +12 -10
  136. package/dist/{http-DOL33cO0.js → http-DhMWeB_h.js} +1 -1
  137. package/dist/{import-CNBF96hB.js → import-C1XXpG_m.js} +4 -4
  138. package/dist/{import-Dfe2unKO.js → import-DObwEota.js} +3 -3
  139. package/dist/{index-BinlXeU-.d.ts → index-BhnOOnp9.d.ts} +2 -2
  140. package/dist/{index-ymept53A.d.ts → index-CVGio3cH.d.ts} +4 -4
  141. package/dist/{index-DJwEgYzA.d.ts → index-CdMOd-GY.d.ts} +17 -11
  142. package/dist/{index-Cay5-Kvx.d.ts → index-CdUTE6qd.d.ts} +11 -10
  143. package/dist/{index-Dj2qF9VC.d.ts → index-Dfv9Toct.d.ts} +1 -1
  144. package/dist/{index-CV-7DWeD.d.ts → index-rFp6X_QP.d.ts} +4 -4
  145. package/dist/index.d.ts +18 -16
  146. package/dist/index.js +24 -20
  147. package/dist/{init-BUo2G-FI.js → init-CNJ8lLjo.js} +5 -5
  148. package/dist/{init-C6cWP3xW.js → init-DS3PEsCG.js} +5 -5
  149. package/dist/{instance-options-CoHn-0e8.d.ts → instance-options-2sFGSdsf.d.ts} +2 -2
  150. package/dist/{instance-snapshot-DuWf1cT3.js → instance-snapshot-BWa71my8.js} +15 -12
  151. package/dist/jwt/index.d.ts +4 -4
  152. package/dist/jwt/index.js +3 -3
  153. package/dist/{kernel-BD8QuMnv.js → kernel-30Z2zM_d.js} +10 -10
  154. package/dist/kysely/index.d.ts +3 -3
  155. package/dist/kysely/index.js +1 -1
  156. package/dist/{load-DjSU5KXO.js → load-BaEamml-.js} +1 -1
  157. package/dist/load-CjnlPxpL.js +1 -0
  158. package/dist/{login-D1MHOomI.js → login-BgK5Jloo.js} +4 -4
  159. package/dist/{login-DCKE5pVy.js → login-DUVzBLh7.js} +4 -4
  160. package/dist/{manifest-BXTbHNIV.js → manifest-BdzBobNK.js} +1 -1
  161. package/dist/{manifest-schema-DQkBK2Mr.js → manifest-schema-CsFsYLF-.js} +1 -1
  162. package/dist/{manifest-Cft51TLK.js → manifest-wclLWBVH.js} +37 -37
  163. package/dist/{map-claims-C-nv08_n.js → map-claims-PQwHynxV.js} +25 -11
  164. package/dist/{map-error-pasIGqMT.js → map-error-BH16Ah8P.js} +1 -1
  165. package/dist/mcp/index.d.ts +8 -8
  166. package/dist/mcp/index.js +9 -9
  167. package/dist/{migrate-BJHxQqT5.js → migrate-BbY5-Khy.js} +4 -4
  168. package/dist/{module-values-B1EVTkHP.js → module-values-B8tNIxdd.js} +2 -2
  169. package/dist/nest/index.d.ts +4 -4
  170. package/dist/nest/index.js +3 -3
  171. package/dist/next/index.d.ts +45 -13
  172. package/dist/next/index.js +68 -30
  173. package/dist/next/plugin.d.ts +1 -1
  174. package/dist/next/plugin.js +2 -2
  175. package/dist/node/index.d.ts +4 -4
  176. package/dist/node/index.js +2 -2
  177. package/dist/openai/index.d.ts +4 -4
  178. package/dist/openai/index.js +3 -3
  179. package/dist/openapi/index.d.ts +2 -2
  180. package/dist/{openapi-BwWkHxvW.js → openapi-C4gFqeRz.js} +4 -4
  181. package/dist/{openapi-DSzQN7Zu.js → openapi-zMEB9qxn.js} +5 -5
  182. package/dist/{operation-findings-CXtFzlKJ.js → operation-findings-CVwJHEu_.js} +1 -1
  183. package/dist/operation-risks-BKOcTv8J.js +13 -0
  184. package/dist/operations-Bm9HFecz.js +89 -0
  185. package/dist/orpc/index.d.ts +5 -5
  186. package/dist/orpc/index.js +3 -3
  187. package/dist/otel/index.d.ts +3 -3
  188. package/dist/otel/index.js +1 -1
  189. package/dist/{output-DlICTjBh.js → output-BFWLER4r.js} +1 -1
  190. package/dist/output-files-BYscrQl-.js +1 -0
  191. package/dist/{output-files-BIQ_9pIs.js → output-files-CM0BnH05.js} +1 -1
  192. package/dist/{ownership-qqBuGJXr.js → ownership-D-mIt-w0.js} +6 -6
  193. package/dist/{parse-1_ZheTW5.js → parse-UTC-sDrt.js} +2 -2
  194. package/dist/{parse-local-manifest-DEiCF4ah.js → parse-local-manifest-CxcSMQgl.js} +2 -2
  195. package/dist/{parse-local-manifest-CCmbhnxP.d.ts → parse-local-manifest-DvjTQNuO.d.ts} +1 -1
  196. package/dist/{parse-request-CwCZpyjV.js → parse-request-DOBVaeiQ.js} +1 -1
  197. package/dist/pdp/index.d.ts +3 -3
  198. package/dist/pdp/index.js +3 -3
  199. package/dist/{peer-Q0fuZ6hx.js → peer-BuK9F53f.js} +1 -1
  200. package/dist/{peer-C9LvBCcb.js → peer-n-swIV4H.js} +1 -1
  201. package/dist/{permdock-BvjivVb9.js → permdock-D-_WrdKu.js} +205 -102
  202. package/dist/{permdock-CprAPN3w.d.ts → permdock-ffY4CMd9.d.ts} +101 -131
  203. package/dist/{permissions-CYcHj_w7.js → permissions-B3ggI88M.js} +2 -2
  204. package/dist/{permissions-CVXmRILq.js → permissions-BaoLxy66.js} +1 -13
  205. package/dist/{pg-DQTqRrou.js → pg-Ddxsd5ZB.js} +2 -2
  206. package/dist/{policy-BycVKnXv.d.ts → policy-BtKSApSt.d.ts} +1 -1
  207. package/dist/{policy-CLQ8__GF.js → policy-cV_wwPb8.js} +5 -4
  208. package/dist/{policy-from-catalog-CU3An8uP.js → policy-from-catalog-B68hGC0S.js} +9 -8
  209. package/dist/{policy-types-DGIO_gxq.d.ts → policy-types-D-GwfQTc.d.ts} +72 -19
  210. package/dist/{postgrest-DAxFltvO.js → postgrest-BrjrckDG.js} +74 -19
  211. package/dist/{postgrest-D5nUGm-c.d.ts → postgrest-D84p5dbA.d.ts} +12 -7
  212. package/dist/{powersync-CBhTBhG2.js → powersync-9PYOE1wt.js} +158 -21
  213. package/dist/{powersync-DAfo0EL5.js → powersync-DStC_g0B.js} +3 -3
  214. package/dist/powersync-xNRlC4jN.js +1 -0
  215. package/dist/preset/index.js +1 -1
  216. package/dist/{preset-BjLzeFpp.js → preset-pPrVyGU5.js} +74 -7
  217. package/dist/prisma/index.d.ts +2 -2
  218. package/dist/prisma/index.js +1 -1
  219. package/dist/{protected-action-QEA8arRB.js → protected-action-B40tU3yP.js} +15 -5
  220. package/dist/{protected-action-D8x73IGm.d.ts → protected-action-Ds_EUY8B.d.ts} +14 -7
  221. package/dist/{protected-action-DUYqb-Ma.js → protected-action-OpOxtTsN.js} +1 -1
  222. package/dist/{provider-C55OGXJ7.js → provider-CY4TSSJo.js} +2 -2
  223. package/dist/{provider-DfLeek9O.d.ts → provider-OtnIiFWm.d.ts} +1 -1
  224. package/dist/{provider-store-CaTv00tr.js → provider-store-BQP_pp8s.js} +2 -2
  225. package/dist/{pull-CQCGy1gv.js → pull-DLP4I1Kl.js} +7 -7
  226. package/dist/pull-UBjDnf4b.js +1 -0
  227. package/dist/{push-Dq_ca4-j.js → push-BSb8j1EW.js} +8 -8
  228. package/dist/{pushed-policy-CDuOL2de.js → pushed-policy-BecMsTtM.js} +1 -1
  229. package/dist/{pushed-policy-CryQheKq.d.ts → pushed-policy-Ck3FZcoy.d.ts} +1 -1
  230. package/dist/react/index.d.ts +8 -8
  231. package/dist/react/index.js +6 -6
  232. package/dist/react/provider-client.d.ts +1 -1
  233. package/dist/react/provider-client.js +1 -1
  234. package/dist/react-native/index.d.ts +104 -39
  235. package/dist/react-native/index.js +199 -40
  236. package/dist/refresh-on-L9UOwATg.d.ts +49 -0
  237. package/dist/{replay-Bs9Df2fQ.d.ts → replay-E5X9E1lC.d.ts} +1 -1
  238. package/dist/{request-context-Duzdf0cd.js → request-context-DM6_jY1n.js} +2 -2
  239. package/dist/{request-schema-DhX7UbfQ.js → request-schema-CMP8Cmxd.js} +5 -0
  240. package/dist/resend/index.d.ts +4 -4
  241. package/dist/{resolve-names-Y1Cb22cp.js → resolve-names-CBl4r4_r.js} +6 -6
  242. package/dist/{rls-tHu7N_Pe.js → rls-DGBL-jDY.js} +20 -20
  243. package/dist/{rls-C5ZGzR_B.js → rls-pAHGYgTb.js} +4 -4
  244. package/dist/{role-builder-BK2-T6oD.js → role-builder-CMW4wWzn.js} +3 -157
  245. package/dist/{rpc-vHIwyXCp.js → rpc-KwX_Jcxz.js} +2 -2
  246. package/dist/{run-DUq1xU4K.js → run-B7lv3NuK.js} +8 -40
  247. package/dist/run-UPbacxPg.js +1 -0
  248. package/dist/{run-ticket-DfnZCh-u.js → run-ticket-CjvXr6wj.js} +1 -1
  249. package/dist/{run-ticket-ylovhyFQ.d.ts → run-ticket-DPaD27_r.d.ts} +2 -2
  250. package/dist/{runtime-BGnrOkVH.js → runtime-rf0ZuyF3.js} +1 -1
  251. package/dist/{saas-DK4V-3Is.js → saas-B8H1MsQ3.js} +13 -10
  252. package/dist/{scan-C3HRH9Fs.js → scan-0r3OZqqK.js} +1 -1
  253. package/dist/{schema-DvXvxPhQ.js → schema-B_9tXrbG.js} +1 -1
  254. package/dist/{schema-BOJjqlWL.js → schema-CuX70xgH.js} +15 -2
  255. package/dist/scim/index.d.ts +1 -1
  256. package/dist/scim/index.js +1 -1
  257. package/dist/{scim-jJBJ7g1Z.js → scim-C30QBBoF.js} +2 -1
  258. package/dist/{scim-D8YupzX1.js → scim-CovliQUg.js} +2 -2
  259. package/dist/{scopes-0Up_UA2t.js → scopes-BSdYaGHs.js} +9 -40
  260. package/dist/server/index.d.ts +11 -11
  261. package/dist/server/index.js +8 -8
  262. package/dist/{server-3cVlTLde.js → server-D0PW6ZCw.js} +2 -2
  263. package/dist/{server-types-CyRN0-Cd.d.ts → server-types-3OnXjZ2D.d.ts} +8 -8
  264. package/dist/{shared-l0oGGetg.js → shared-BRmCJxDK.js} +2 -2
  265. package/dist/{shared-DrGLwM3s.js → shared-DyYVEjKC.js} +2 -2
  266. package/dist/{sink-B5zoUW_O.d.ts → sink-ogbVkyeo.d.ts} +2 -2
  267. package/dist/{skills-Celu2W6v.js → skills-B4MPRxQd.js} +2 -2
  268. package/dist/{skills-B2qTbaQa.js → skills-C9sTD70r.js} +2 -2
  269. package/dist/{snapshot-CXlzi69u.js → snapshot-DN_8J27z.js} +6 -2
  270. package/dist/{snapshot-cache-BjAWkchD.d.ts → snapshot-cache-B4YvlGG_.d.ts} +20 -6
  271. package/dist/{snapshot-cache-Bx_4xC_6.js → snapshot-cache-B66h7FBK.js} +25 -8
  272. package/dist/solid/index.d.ts +7 -7
  273. package/dist/solid/index.js +6 -6
  274. package/dist/solid-start/index.d.ts +4 -4
  275. package/dist/solid-start/index.js +3 -3
  276. package/dist/{sources-oB1Hg1Fm.d.ts → sources-xdQShLDU.d.ts} +1 -1
  277. package/dist/{src-C_pi2Rnh.js → src-Brzq_0in.js} +193 -128
  278. package/dist/ssf/index.d.ts +3 -3
  279. package/dist/ssf/index.js +1 -1
  280. package/dist/{standard-webhooks-DOYEuOLx.d.ts → standard-webhooks-BfPaZ6T1.d.ts} +2 -2
  281. package/dist/{types-tQB2CEnY.d.ts → store-DYeB-_U3.d.ts} +114 -113
  282. package/dist/{store-RNFvaJJv.js → store-DmVqy74I.js} +13 -7
  283. package/dist/{store-options-Dil3lraY.js → store-options--zWn48PK.js} +76 -7
  284. package/dist/{stores-DxZWDXCs.js → stores-BYFopOm1.js} +3 -3
  285. package/dist/{stores-DZJvxFIZ.d.ts → stores-EPul_8MN.d.ts} +5 -6
  286. package/dist/{stream-9y9qw51m.d.ts → stream-W2RuUYly.d.ts} +1 -1
  287. package/dist/{subject-BGoM5o8B.js → subject-C7RddW0G.js} +8 -1
  288. package/dist/supabase/client.d.ts +2 -0
  289. package/dist/supabase/client.js +21 -0
  290. package/dist/supabase/index.d.ts +37 -6
  291. package/dist/supabase/index.js +6 -5
  292. package/dist/supabase/middleware.d.ts +8 -7
  293. package/dist/supabase/middleware.js +6 -6
  294. package/dist/{supabase-CDHMsDD0.js → supabase-BiViJpQ4.js} +31 -8
  295. package/dist/{supabase-DYWnT800.js → supabase-CogTyJH2.js} +3 -3
  296. package/dist/supabase-hook-BN46IrVI.js +1 -0
  297. package/dist/{supabase-hook-HPgwYb9V.js → supabase-hook-DX38Hj8h.js} +393 -32
  298. package/dist/{supautils-SwE642N1.js → supautils-BGf6zRvM.js} +12 -12
  299. package/dist/svelte/index.d.ts +7 -7
  300. package/dist/svelte/index.js +8 -8
  301. package/dist/svelte/runtime.d.ts +3 -3
  302. package/dist/svelte/runtime.js +3 -3
  303. package/dist/svelte/source.d.ts +7 -7
  304. package/dist/svelte/source.js +5 -5
  305. package/dist/sveltekit/index.d.ts +4 -4
  306. package/dist/sveltekit/index.js +2 -2
  307. package/dist/{tables-DimBcVWY.js → tables-BfOk0ymL.js} +7 -7
  308. package/dist/tanstack-start/index.d.ts +4 -4
  309. package/dist/tanstack-start/index.js +2 -2
  310. package/dist/{tenancy-5d1zVBvK.js → tenancy-DvOHHk3-.js} +1 -1
  311. package/dist/terminal/index.d.ts +5 -5
  312. package/dist/terminal/index.js +6 -6
  313. package/dist/testing/core.d.ts +1 -1
  314. package/dist/testing/core.js +1 -1
  315. package/dist/testing/fixtures/index.d.ts +1 -1
  316. package/dist/testing/fixtures/index.js +2 -2
  317. package/dist/testing/index.d.ts +29 -22
  318. package/dist/testing/index.js +120 -48
  319. package/dist/testing/saas/index.d.ts +3 -3
  320. package/dist/testing/saas/index.js +2 -2
  321. package/dist/testing/saas/permissions.js +1 -1
  322. package/dist/token-D6pWn8Uj.d.ts +11 -0
  323. package/dist/{token-DC9EQiet.js → token-DaMnIU9O.js} +24 -8
  324. package/dist/{tool-refusal-Qpjs_W6M.js → tool-refusal-D4spOJ7I.js} +1 -1
  325. package/dist/trpc/index.d.ts +5 -5
  326. package/dist/trpc/index.js +3 -3
  327. package/dist/{type-helpers-c7Xo_2Cu.d.ts → type-helpers-i1EJ3Eb1.d.ts} +1 -1
  328. package/dist/{types-Cklw5hJo.d.ts → types-3Y8UpFkF.d.ts} +40 -1
  329. package/dist/{types-DlelvQk4.d.ts → types-B8qUkGja.d.ts} +2 -2
  330. package/dist/{types-CN0LsqbK.d.ts → types-CCEeSCMB.d.ts} +3 -3
  331. package/dist/{types-B2efzoSX.d.ts → types-CDVXR6YD.d.ts} +1 -1
  332. package/dist/{types-DsHGPtkR.d.ts → types-Ck1KOfug.d.ts} +2 -2
  333. package/dist/{types-DLvhVm1r.d.ts → types-CqcsNCaN.d.ts} +16 -7
  334. package/dist/{types-BB-zWDcR.d.ts → types-D-JO7lh8.d.ts} +5 -5
  335. package/dist/{types-CEinc15V.d.ts → types-D19MK4t-.d.ts} +3 -4
  336. package/dist/{types-B6ExllNo.d.ts → types-DGf_cpKF.d.ts} +2 -2
  337. package/dist/{types-rCRV4Ge-.d.ts → types-DmbfLu2p.d.ts} +4 -4
  338. package/dist/{types-ZzRGoViD.d.ts → types-NYoj8JBm.d.ts} +2 -2
  339. package/dist/{types-CWBsAwqn.d.ts → types-o1vu6Ks3.d.ts} +4 -4
  340. package/dist/unplugin/index.d.ts +1 -1
  341. package/dist/unplugin/index.js +2 -2
  342. package/dist/usage-Cl5eb-e1.js +1 -0
  343. package/dist/{usage-CPXeuAdT.js → usage-DC0UKe6C.js} +6 -6
  344. package/dist/{usage-CfZCQd0F.js → usage-DYtRVkcN.js} +2 -2
  345. package/dist/{validation-error-uvp-kyfO.d.ts → validation-error-Dx8PipbO.d.ts} +1 -1
  346. package/dist/{verify-DfT0QYNh.js → verify-Bpj0hauG.js} +19 -19
  347. package/dist/{version-cache-Df11C2Qp.d.ts → version-cache-DzNKWiI6.d.ts} +9 -3
  348. package/dist/{views-CD8wuL4Z.js → views-MWmJ6Y4P.js} +1 -1
  349. package/dist/vue/index.d.ts +7 -7
  350. package/dist/vue/index.js +6 -6
  351. package/dist/{waiter-CqUKX6CY.d.ts → waiter-NK_UuZbb.d.ts} +2 -2
  352. package/dist/{watch-DAkjm75Y.js → watch-CBHADqBH.js} +3 -3
  353. package/dist/watch-OYwAPCzx.js +1 -0
  354. package/dist/webmcp/index.d.ts +1 -1
  355. package/dist/webmcp/index.js +1 -1
  356. package/dist/{where-scope-DlCdCM_8.js → where-scope-BKrqUDVk.js} +5 -5
  357. package/dist/{who-can-BoDJm0Nc.js → who-can-KhVWMxtf.js} +4 -4
  358. package/dist/workflow/index.d.ts +3 -3
  359. package/dist/workflow/index.js +5 -4
  360. package/dist/workflow-sdk/index.d.ts +4 -4
  361. package/dist/{wrap-DxXB54Wu.d.ts → wrap-BHGA-SMM.d.ts} +2 -2
  362. package/dist/{wrap-B2wziJI_.js → wrap-C5PWzgkq.js} +1 -1
  363. package/package.json +8 -5
  364. package/schemas/approval-request-v1.json +5 -0
  365. package/schemas/catalog-v1.json +18 -2
  366. package/schemas/cli-result-v1.json +0 -2
  367. package/schemas/snapshot-v1.json +9 -0
  368. package/schemas/supabase-manifest-v1.json +1 -1
  369. package/skills/permdock-approvals/SKILL.md +8 -8
  370. package/skills/permdock-approvals/references/stores-and-resume.md +7 -3
  371. package/skills/permdock-audit/SKILL.md +1 -1
  372. package/skills/permdock-wire/references/adapters.md +3 -1
  373. package/dist/action-result-BcudBQOF.d.ts +0 -19
  374. package/dist/catalog-D3oS2GH3.js +0 -1
  375. package/dist/collect-D-eroIfV.js +0 -1
  376. package/dist/load-Dm0pSYH3.js +0 -1
  377. package/dist/output-files-BHOIlrfD.js +0 -1
  378. package/dist/powersync-0QVP_DuR.js +0 -1
  379. package/dist/pull-CCAChKuy.js +0 -1
  380. package/dist/renames-CGj7YwcQ.js +0 -175
  381. package/dist/run-C5P3x1EI.js +0 -1
  382. package/dist/supabase-hook-qsewAVZY.js +0 -1
  383. package/dist/usage-DmmO_xjJ.js +0 -1
  384. package/dist/watch-CuPz0D2M.js +0 -1
@@ -54,8 +54,8 @@ function isMembershipRows(value) {
54
54
  }
55
55
  function isRows(value) {
56
56
  if (!isRecord(value)) return false;
57
- const { memberships, roles, customRoles } = value;
58
- return Array.isArray(memberships) && memberships.every(isMembershipRows) && (roles === void 0 || isRecord(roles) && isText(roles["table"]) && isText(roles["user"]) && Array.isArray(roles["roles"]) && roles["roles"].length > 0 && roles["roles"].every(isColumn)) && (customRoles === void 0 || isRecord(customRoles) && isText(customRoles["permissions"]) && isText(customRoles["includes"]));
57
+ const { memberships, roles, customRoles, version } = value;
58
+ return Array.isArray(memberships) && memberships.every(isMembershipRows) && (roles === void 0 || isRecord(roles) && isText(roles["table"]) && isText(roles["user"]) && Array.isArray(roles["roles"]) && roles["roles"].length > 0 && roles["roles"].every(isColumn)) && (customRoles === void 0 || isRecord(customRoles) && isText(customRoles["permissions"]) && isText(customRoles["includes"])) && (version === void 0 || isRecord(version) && isText(version["table"]) && isText(version["user"]) && isText(version["version"]));
59
59
  }
60
60
  /**
61
61
  * Whether `value` has the shape `localSnapshotManifest(policy)` writes, with no
@@ -1,4 +1,4 @@
1
- import { Yt as LocalSnapshotManifest } from "./policy-types-DGIO_gxq.js";
1
+ import { Zt as LocalSnapshotManifest } from "./policy-types-D-GwfQTc.js";
2
2
  //#region src/core/parse-local-manifest.d.ts
3
3
  /**
4
4
  * Whether `value` has the shape `localSnapshotManifest(policy)` writes, with no
@@ -1,6 +1,6 @@
1
1
  import { n as freezeDeep } from "./freeze-jjan0lCv.js";
2
2
  import { n as copyJson, r as forbiddenKeyPath, t as checkSchema } from "./json-schema-BPGa-RjQ.js";
3
- import { t as APPROVAL_REQUEST_SCHEMA } from "./request-schema-DhX7UbfQ.js";
3
+ import { t as APPROVAL_REQUEST_SCHEMA } from "./request-schema-CMP8Cmxd.js";
4
4
  //#region src/approvals/parse-request.ts
5
5
  /**
6
6
  * Reads an `ApprovalRequest` (parsed, or the JSON text) as an approval store or
@@ -1,6 +1,6 @@
1
- import { T as Policy, j as PolicyVocabulary, pr as Principal, q as DecisionProvider } from "../policy-types-DGIO_gxq.js";
2
- import { o as PermDockOptions } from "../permdock-CprAPN3w.js";
3
- import { a as RelationMap, c as RemotePdpEndpoints, d as SpiceDbCheck, f as SpiceDbOptions, i as PdpPermDock, l as RemotePdpMapping, n as OpenFgaTuple, o as RemotePdpAuth, r as PdpFactory, s as RemotePdpCache, t as OpenFgaOptions, u as RemotePdpOptions } from "../types-DlelvQk4.js";
1
+ import { E as Policy, J as DecisionProvider, M as PolicyVocabulary, _r as Principal } from "../policy-types-D-GwfQTc.js";
2
+ import { o as PermDockOptions } from "../permdock-ffY4CMd9.js";
3
+ import { a as RelationMap, c as RemotePdpEndpoints, d as SpiceDbCheck, f as SpiceDbOptions, i as PdpPermDock, l as RemotePdpMapping, n as OpenFgaTuple, o as RemotePdpAuth, r as PdpFactory, s as RemotePdpCache, t as OpenFgaOptions, u as RemotePdpOptions } from "../types-B8qUkGja.js";
4
4
  //#region src/pdp/create.d.ts
5
5
  /**
6
6
  * The PDP-aware instance, built synchronously like core `getPermDockSync`; use
package/dist/pdp/index.js CHANGED
@@ -5,9 +5,9 @@ import { a as deniedMessage, i as approvalMessage, n as PermDockDeniedError, t a
5
5
  import { n as internalsOf, t as attachInternals } from "../internals-B3IgHrvo.js";
6
6
  import { a as getResource, c as listPermissions } from "../permission-registry-B8tYxPIt.js";
7
7
  import { n as toWireDelegation } from "../wire-delegation-Cv3W2eaM.js";
8
- import { r as decideAllAsync, t as canAllAsync } from "../checks-CGkP3Z7A.js";
9
- import { n as getPermDockSync$1, t as getPermDock$1 } from "../permdock-BvjivVb9.js";
10
- import { a as postJson, c as ttlMs, i as joinUrl, n as denied, o as resourceIdOf, r as granted, s as ttlCache, t as cacheKey } from "../shared-l0oGGetg.js";
8
+ import { r as decideAllAsync, t as canAllAsync } from "../checks-fyDOhcz0.js";
9
+ import { n as getPermDockSync$1, t as getPermDock$1 } from "../permdock-D-_WrdKu.js";
10
+ import { a as postJson, c as ttlMs, i as joinUrl, n as denied, o as resourceIdOf, r as granted, s as ttlCache, t as cacheKey } from "../shared-BRmCJxDK.js";
11
11
  //#region src/pdp/create.ts
12
12
  function withoutProviders(policy) {
13
13
  if (policy.providers === void 0 || policy.providers.length === 0) return policy;
@@ -1,4 +1,4 @@
1
- import { n as CliError } from "./errors-Vpu6rKHl.js";
1
+ import { n as CliError } from "./errors-BhRkoNS7.js";
2
2
  import { readFileSync } from "node:fs";
3
3
  import path from "node:path";
4
4
  import { createRequire } from "node:module";
@@ -1 +1 @@
1
- export { t as addLine, n as packageManagerOf, r as peerHint, i as requirePeer } from "./peer-Q0fuZ6hx.js";
1
+ export { t as addLine, n as packageManagerOf, r as peerHint, i as requirePeer } from "./peer-BuK9F53f.js";
@@ -6,18 +6,18 @@ import { t as attachInternals } from "./internals-B3IgHrvo.js";
6
6
  import { _ as keyToScope, a as getResource, c as listPermissions, g as formerScopes } from "./permission-registry-B8tYxPIt.js";
7
7
  import { n as isThenable } from "./thenable-BNSM1U2R.js";
8
8
  import { i as readAppData } from "./app-data-UNNm07jV.js";
9
- import { f as scopeList, h as tenantOf, o as normalizeMemberships } from "./scopes-0Up_UA2t.js";
9
+ import { d as scopeList, o as normalizeMemberships, p as tenantOf } from "./scopes-BSdYaGHs.js";
10
10
  import { o as pickVisible, s as sanitizeContext } from "./validity-Buc7w8E9.js";
11
11
  import { t as byCodePoint } from "./compare-DTfyUunF.js";
12
- import { c as nowSeconds, d as resolveActiveTenant, m as tenantsOf, p as scopeField, t as heldRoleNamesIn, u as relatesTo } from "./tenancy-5d1zVBvK.js";
13
- import { d as policyX } from "./policy-CLQ8__GF.js";
14
- import { D as emptyListeners, E as emitSafe, N as contactMemberships, O as finish, P as isContact, i as customRolesFor, o as roleSourceFor, r as assignableNamesFor, s as sourceName, t as evaluate, u as customGrantsFor, w as unknownLevelsFor } from "./evaluate-BAmf_AQd.js";
15
- import { c as heldRoleNames, d as audiencesOf, g as asMembershipSource, i as assignableIn, l as roleLeaf, o as collectSnapshotGrants, s as whereGrant, t as snapshotOf, u as applyRoleKinds } from "./instance-snapshot-DuWf1cT3.js";
12
+ import { c as nowSeconds, d as resolveActiveTenant, m as tenantsOf, p as scopeField, t as heldRoleNamesIn, u as relatesTo } from "./tenancy-DvOHHk3-.js";
13
+ import { d as policyX } from "./policy-cV_wwPb8.js";
14
+ import { r as isSubject, t as anonymousSubject } from "./subject-C7RddW0G.js";
15
+ import { D as emptyListeners, E as emitSafe, N as contactMemberships, O as finish, P as isContact, i as customRolesFor, o as roleSourceFor, r as assignableNamesFor, s as sourceName, t as evaluate, u as customGrantsFor, w as unknownLevelsFor } from "./evaluate-Czbj7thS.js";
16
+ import { c as heldRoleNames, d as audiencesOf, g as asMembershipSource, i as assignableIn, l as roleLeaf, o as collectSnapshotGrants, s as whereGrant, t as snapshotOf, u as applyRoleKinds } from "./instance-snapshot-BWa71my8.js";
16
17
  import { r as relationReader, t as pendingRelations } from "./relations-BxvRvDHK.js";
17
- import { i as snapshotGrant } from "./snapshot-CXlzi69u.js";
18
- import { a as decideForTarget, i as permittedIds, o as deniedFor, r as mayUse, s as signSnapshot, t as whereFromGrants } from "./where-scope-DlCdCM_8.js";
19
- import { i as decideAllWith, n as canAllWith } from "./checks-CGkP3Z7A.js";
20
- import { r as isSubject, t as anonymousSubject } from "./subject-BGoM5o8B.js";
18
+ import { i as snapshotGrant } from "./snapshot-DN_8J27z.js";
19
+ import { a as decideForTarget, i as permittedIds, o as deniedFor, r as mayUse, s as signSnapshot, t as whereFromGrants } from "./where-scope-BKrqUDVk.js";
20
+ import { i as decideAllWith, n as canAllWith } from "./checks-fyDOhcz0.js";
21
21
  //#region src/core/app.ts
22
22
  const APP = Symbol.for("permdock.app");
23
23
  /**
@@ -41,6 +41,197 @@ function withApp(policy, options) {
41
41
  return merged;
42
42
  }
43
43
  //#endregion
44
+ //#region src/core/freshness.ts
45
+ function versionQuery(principal, issuedAt) {
46
+ return compact({
47
+ id: principal.id,
48
+ roles: principal.roles,
49
+ memberships: principal.memberships,
50
+ authzVersion: principal.authzVersion,
51
+ issuedAt
52
+ });
53
+ }
54
+ /** `known` when it is a version, otherwise the source's answer. */
55
+ function currentVersion(source, query, context, known) {
56
+ return known !== void 0 && Number.isSafeInteger(known) && known >= 0 ? known : source.version?.(query, context);
57
+ }
58
+ function threw(source, auth) {
59
+ auth.push({
60
+ reason: "source-threw",
61
+ source: "memberships",
62
+ ...sourceName(source)
63
+ });
64
+ }
65
+ /**
66
+ * `onStale: 'reread'`: a token behind the source's version has its memberships
67
+ * (and global roles, with `readRoles`) read live; a version that cannot be read
68
+ * keeps the claims and marks the subject stale.
69
+ */
70
+ function rereadStale(source, principal, issuedAt, context, read, auth, readRoles, known) {
71
+ const claims = principal.memberships ?? [];
72
+ const claimed = principal.authzVersion;
73
+ const judge = (current) => typeof claimed === "number" && current !== void 0 && claimed >= current ? "fresh" : "reread";
74
+ const unknown = () => {
75
+ threw(source, auth);
76
+ return "unknown";
77
+ };
78
+ let freshness;
79
+ try {
80
+ const current = currentVersion(source, versionQuery(principal, issuedAt), context, known);
81
+ freshness = isThenable(current) ? Promise.resolve(current).then(judge, unknown) : judge(current);
82
+ } catch {
83
+ freshness = unknown();
84
+ }
85
+ const failed = () => {
86
+ threw(source, auth);
87
+ return [];
88
+ };
89
+ const rolesOf = (found) => {
90
+ if (found !== "reread" || readRoles === void 0) return;
91
+ try {
92
+ const roles = readRoles();
93
+ return isThenable(roles) ? Promise.resolve(roles).catch(failed) : roles;
94
+ } catch {
95
+ return failed();
96
+ }
97
+ };
98
+ if (isThenable(freshness)) {
99
+ const settled = freshness.then((found) => ({
100
+ found,
101
+ roles: rolesOf(found)
102
+ }));
103
+ return {
104
+ memberships: settled.then(({ found }) => found === "reread" ? read() : claims),
105
+ stale: settled.then(({ found }) => found === "unknown"),
106
+ roles: settled.then(({ roles }) => roles)
107
+ };
108
+ }
109
+ return compact({
110
+ memberships: freshness === "reread" ? read() : claims,
111
+ stale: freshness === "unknown",
112
+ roles: rolesOf(freshness)
113
+ });
114
+ }
115
+ /**
116
+ * Whether the token's memberships are behind the source for `fresh`
117
+ * permissions. Live memberships are never stale; token memberships are stale
118
+ * unless a source reports a version the token's `authzVersion` has reached.
119
+ */
120
+ function staleness(policy, principal, source, given, auth) {
121
+ if ((policy.fresh ?? []).length === 0 || principal === null || given.live) return false;
122
+ if (given.stale !== void 0) return given.stale;
123
+ const claimed = principal.authzVersion;
124
+ if (source?.version === void 0 || typeof claimed !== "number") return true;
125
+ const compare = (current) => current === void 0 || claimed < current;
126
+ try {
127
+ const current = currentVersion(source, versionQuery(principal, given.issuedAt), given.context, given.known);
128
+ return isThenable(current) ? Promise.resolve(current).then(compare, () => {
129
+ threw(source, auth);
130
+ return true;
131
+ }) : compare(current);
132
+ } catch {
133
+ threw(source, auth);
134
+ return true;
135
+ }
136
+ }
137
+ //#endregion
138
+ //#region src/core/cached-instance.ts
139
+ /** Options that shape an instance by value; the rest by identity. */
140
+ const DATA_KEYS = /* @__PURE__ */ new Set([
141
+ "tenant",
142
+ "actor",
143
+ "delegation",
144
+ "session",
145
+ "expiresAt",
146
+ "context"
147
+ ]);
148
+ function principalOf(policy, user) {
149
+ if (user === null || user === void 0) return null;
150
+ if (isSubject(user)) return user.principal === null ? null : compact({
151
+ principal: user.principal,
152
+ issuedAt: user.issuedAt
153
+ });
154
+ try {
155
+ const principal = policy.subject(user);
156
+ return principal === null ? null : { principal };
157
+ } catch {
158
+ return null;
159
+ }
160
+ }
161
+ function isVersion(value) {
162
+ return typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
163
+ }
164
+ /**
165
+ * The cache key of an instance, with the options to build it with: the version
166
+ * read for the key is passed on as `version.known`, so the build reads none.
167
+ * `undefined` when the subject or its version is unknown.
168
+ */
169
+ async function cacheKey(policy, user, options) {
170
+ const resolved = principalOf(policy, user);
171
+ if (resolved === null) return;
172
+ const intent = options.intent ?? "write";
173
+ let version = options.version?.known;
174
+ if (!isVersion(version) && options.memberships !== void 0) try {
175
+ version = await asMembershipSource(options.memberships).version?.(versionQuery(resolved.principal, resolved.issuedAt), { intent });
176
+ } catch {
177
+ return;
178
+ }
179
+ if (!isVersion(version)) return;
180
+ const data = { intent };
181
+ const owners = [policy];
182
+ for (const name of Object.keys(options).toSorted()) {
183
+ const value = Reflect.get(options, name);
184
+ if (DATA_KEYS.has(name)) data[name] = value;
185
+ else if (name !== "version" && name !== "intent") owners.push(value);
186
+ }
187
+ return {
188
+ key: compact({
189
+ principal: resolved.principal.id,
190
+ version,
191
+ tenant: options.tenant,
192
+ intent,
193
+ parts: {
194
+ user,
195
+ data
196
+ }
197
+ }),
198
+ owners,
199
+ options: {
200
+ ...options,
201
+ version: { known: version }
202
+ }
203
+ };
204
+ }
205
+ function cachedFactory(factory, instances) {
206
+ return (subject) => {
207
+ const source = factory(subject);
208
+ const principal = subject.principal?.id;
209
+ return source === void 0 || principal === void 0 ? source : instances.customRoles(source, {
210
+ owner: factory,
211
+ principal
212
+ });
213
+ };
214
+ }
215
+ function cachedSources(options, instances) {
216
+ const { customRoles, entitlements } = options;
217
+ return {
218
+ ...options,
219
+ ...customRoles === void 0 ? {} : { customRoles: typeof customRoles === "function" ? cachedFactory(customRoles, instances) : instances.customRoles(customRoles) },
220
+ ...entitlements === void 0 ? {} : { entitlements: instances.entitlements(entitlements) }
221
+ };
222
+ }
223
+ /**
224
+ * `create` through `instances`: a subject whose authorization version is known
225
+ * gets the instance built for it at that version, with the cache's custom-role
226
+ * and entitlement memos; a custom-role factory's answers are kept per factory
227
+ * and principal. Any other subject gets a new one.
228
+ */
229
+ async function cachedInstance(policy, user, options, instances, create) {
230
+ const cached = await cacheKey(policy, user, options);
231
+ if (cached === void 0) return create(options);
232
+ return instances.instance(cached.key, cached.owners, () => Promise.resolve(create(cachedSources(cached.options, instances))));
233
+ }
234
+ //#endregion
44
235
  //#region src/core/assert-decision.ts
45
236
  /**
46
237
  * `assert`'s outcome: the granted decision, or the error a refusal throws after
@@ -512,96 +703,6 @@ function buildInstance(policy, subject, envBase, team) {
512
703
  return Object.freeze(instance);
513
704
  }
514
705
  //#endregion
515
- //#region src/core/freshness.ts
516
- function versionQuery(principal, issuedAt) {
517
- return compact({
518
- id: principal.id,
519
- roles: principal.roles,
520
- memberships: principal.memberships,
521
- authzVersion: principal.authzVersion,
522
- issuedAt
523
- });
524
- }
525
- function threw(source, auth) {
526
- auth.push({
527
- reason: "source-threw",
528
- source: "memberships",
529
- ...sourceName(source)
530
- });
531
- }
532
- /**
533
- * `onStale: 'reread'`: a token behind the source's version has its memberships
534
- * (and global roles, with `readRoles`) read live; a version that cannot be read
535
- * keeps the claims and marks the subject stale.
536
- */
537
- function rereadStale(source, principal, issuedAt, context, read, auth, readRoles) {
538
- const claims = principal.memberships ?? [];
539
- const claimed = principal.authzVersion;
540
- const judge = (current) => typeof claimed === "number" && current !== void 0 && claimed >= current ? "fresh" : "reread";
541
- const unknown = () => {
542
- threw(source, auth);
543
- return "unknown";
544
- };
545
- let freshness;
546
- try {
547
- const current = source.version?.(versionQuery(principal, issuedAt), context);
548
- freshness = isThenable(current) ? Promise.resolve(current).then(judge, unknown) : judge(current);
549
- } catch {
550
- freshness = unknown();
551
- }
552
- const failed = () => {
553
- threw(source, auth);
554
- return [];
555
- };
556
- const rolesOf = (found) => {
557
- if (found !== "reread" || readRoles === void 0) return;
558
- try {
559
- const roles = readRoles();
560
- return isThenable(roles) ? Promise.resolve(roles).catch(failed) : roles;
561
- } catch {
562
- return failed();
563
- }
564
- };
565
- if (isThenable(freshness)) {
566
- const settled = freshness.then((found) => ({
567
- found,
568
- roles: rolesOf(found)
569
- }));
570
- return {
571
- memberships: settled.then(({ found }) => found === "reread" ? read() : claims),
572
- stale: settled.then(({ found }) => found === "unknown"),
573
- roles: settled.then(({ roles }) => roles)
574
- };
575
- }
576
- return compact({
577
- memberships: freshness === "reread" ? read() : claims,
578
- stale: freshness === "unknown",
579
- roles: rolesOf(freshness)
580
- });
581
- }
582
- /**
583
- * Whether the token's memberships are behind the source for `fresh`
584
- * permissions. Live memberships are never stale; token memberships are stale
585
- * unless a source reports a version the token's `authzVersion` has reached.
586
- */
587
- function staleness(policy, principal, source, given, auth) {
588
- if ((policy.fresh ?? []).length === 0 || principal === null || given.live) return false;
589
- if (given.stale !== void 0) return given.stale;
590
- const claimed = principal.authzVersion;
591
- if (source?.version === void 0 || typeof claimed !== "number") return true;
592
- const compare = (current) => current === void 0 || claimed < current;
593
- try {
594
- const current = source.version(versionQuery(principal, given.issuedAt), given.context);
595
- return isThenable(current) ? Promise.resolve(current).then(compare, () => {
596
- threw(source, auth);
597
- return true;
598
- }) : compare(current);
599
- } catch {
600
- threw(source, auth);
601
- return true;
602
- }
603
- }
604
- //#endregion
605
706
  //#region src/core/oauth-scopes.ts
606
707
  /**
607
708
  * Every OAuth scope a token may carry to the permission keys it reaches: each
@@ -763,7 +864,7 @@ function assemblePrincipal(policy, user, options, auth, memo) {
763
864
  }, () => read(source, principal), auth, source.globalRolesFor === void 0 ? void 0 : () => source.globalRolesFor?.(compact({
764
865
  id: principal.id,
765
866
  kind: principal.kind
766
- }), { memo }) ?? []);
867
+ }), { memo }) ?? [], options.version?.known);
767
868
  memberships = reread.memberships;
768
869
  stale = reread.stale;
769
870
  roles = reread.roles;
@@ -942,7 +1043,8 @@ function resolveAssembled(policy, assembled, options, auth, memo) {
942
1043
  context: {
943
1044
  memo,
944
1045
  intent: options.intent ?? "write"
945
- }
1046
+ },
1047
+ known: options.version?.known
946
1048
  }, auth);
947
1049
  const withPlans = (resolved) => entitlementsOf(assembled, activeTenantOf(policy, assembled, applyRoleKinds(policy, assembled.principal?.roles, normalizeMemberships(resolved, scopeList(policy.scopes))).memberships, options), options, auth);
948
1050
  if (isThenable(assembled.context) || isThenable(memberships) || isThenable(stale)) return Promise.all([
@@ -1050,7 +1152,8 @@ function getPermDockSync(policy, user, options = {}) {
1050
1152
  * `getPermDockSync` is the synchronous twin.
1051
1153
  */
1052
1154
  function getPermDock(policy, user, options = {}) {
1053
- return Promise.resolve().then(() => create(policy, user, options));
1155
+ const { instances, ...rest } = options;
1156
+ return Promise.resolve().then(() => instances === void 0 ? create(policy, user, rest) : cachedInstance(policy, user, rest, instances, (cached) => create(policy, user, cached)));
1054
1157
  }
1055
1158
  //#endregion
1056
1159
  export { delegatedScopeMap as a, APP as c, challengeScope as i, withApp as l, getPermDockSync as n, hasScope as o, resolveSubject as r, scopesReaching as s, getPermDock as t };