permdock 0.7.0 → 0.9.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 (483) hide show
  1. package/README.md +1 -3
  2. package/dist/a2a/index.d.ts +7 -7
  3. package/dist/a2a/index.js +8 -8
  4. package/dist/action-result-BcudBQOF.d.ts +19 -0
  5. package/dist/{adapter-context-CRhqyzCk.js → adapter-context-CIQpQxbE.js} +8 -2
  6. package/dist/{adoption-scan-D-feE7BE.js → adoption-scan-Ch07MdxN.js} +5 -5
  7. package/dist/agent/index.d.ts +2 -2
  8. package/dist/agent/index.js +1 -1
  9. package/dist/ai-sdk/index.d.ts +19 -13
  10. package/dist/ai-sdk/index.js +6 -6
  11. package/dist/{app-data-MuyzVqX8.js → app-data-UNNm07jV.js} +10 -7
  12. package/dist/{approval-header-CJACtHkv.js → approval-header-8QV6MU4H.js} +6 -3
  13. package/dist/{approval-prompt-K0faOLFp.d.ts → approval-prompt-3BqWczTt.d.ts} +13 -11
  14. package/dist/{approval-prompt-Dg5LeAcT.js → approval-prompt-B8hQY69x.js} +5 -6
  15. package/dist/approvals/index.d.ts +4 -4
  16. package/dist/approvals/index.js +6 -6
  17. package/dist/{approvals-CMRfsbBh.js → approvals-DnIBTuXE.js} +66 -42
  18. package/dist/{approvers-CqPOLD-o.js → approvers-B4r0N_Uz.js} +8 -2
  19. package/dist/{arazzo-ClrF3PVb.js → arazzo-BpS7LnV0.js} +2 -2
  20. package/dist/{arazzo-rdeJ8n1J.js → arazzo-CmQaGPkM.js} +6 -6
  21. package/dist/{args-CC3OwyHW.js → args-0FrVs5EH.js} +14 -7
  22. package/dist/astro/index.d.ts +30 -12
  23. package/dist/astro/index.js +2 -2
  24. package/dist/{audience-BrMs8c4o.js → audience-DTjR8xet.js} +8 -8
  25. package/dist/{auth-CscUX8Sy.js → auth--yPyZNgr.js} +19 -7
  26. package/dist/authzen/index.d.ts +34 -28
  27. package/dist/authzen/index.js +23 -20
  28. package/dist/{automation-DOtAFWdy.d.ts → automation-C6Jg75xq.d.ts} +42 -32
  29. package/dist/{automation-ySsxp_Yp.js → automation-x3KEUusw.js} +22 -21
  30. package/dist/better-auth/index.d.ts +2 -2
  31. package/dist/better-auth/index.js +13 -7
  32. package/dist/better-supabase/index.d.ts +357 -227
  33. package/dist/better-supabase/index.js +219 -140
  34. package/dist/{bind-D1nO6fiC.js → bind-BNQA9JK9.js} +26 -10
  35. package/dist/{bind-JDuvxjuW.d.ts → bind-YYjvfpB9.d.ts} +32 -12
  36. package/dist/{body-CH5of8Ne.js → body-CJQwYVa8.js} +3 -3
  37. package/dist/{body-text-QcXok_SI.js → body-text-DQhcmqdY.js} +8 -4
  38. package/dist/{boundary-BM8a_P6E.js → boundary-BV3O1eud.js} +8 -2
  39. package/dist/{boundary-BmHxVH1J.d.ts → boundary-C9ck-3uK.d.ts} +13 -4
  40. package/dist/{budget-NbEtbJC_.js → budget-BELja5A9.js} +6 -3
  41. package/dist/{budget-JqcRqyhK.d.ts → budget-hYsPz_yE.d.ts} +6 -3
  42. package/dist/{build-instance-DxE7czo9.js → build-instance-BWXqwQYU.js} +3 -3
  43. package/dist/{capability-L7NnfhiE.js → capability-BqX94r07.js} +31 -25
  44. package/dist/{capability-D4UC9TTW.d.ts → capability-Di9tiUvi.d.ts} +41 -29
  45. package/dist/{casbin-BHijLuHY.js → casbin-B7_yS-oo.js} +2 -2
  46. package/dist/{casbin-BW9pS47J.js → casbin-bHyIxTNQ.js} +16 -8
  47. package/dist/{casl-CmJlgziS.js → casl-C4OINZHI.js} +2 -2
  48. package/dist/{casl-UbI8v-Wq.js → casl-CHHoCldP.js} +19 -10
  49. package/dist/catalog/index.d.ts +51 -30
  50. package/dist/catalog/index.js +18 -15
  51. package/dist/{catalog-D69WhFii.js → catalog-CGlSwU6j.js} +20 -19
  52. package/dist/catalog-D3oS2GH3.js +1 -0
  53. package/dist/{catalog-BaMQfQ6Y.js → catalog-amPDr0JQ.js} +3 -3
  54. package/dist/{catalog-doc-CV9s6B1S.js → catalog-doc-DjMKzJp9.js} +28 -14
  55. package/dist/{catalog-fingerprint-C144oW4M.js → catalog-fingerprint-e6aCWosn.js} +18 -14
  56. package/dist/catalog-operations-DeHTrJSV.js +60 -0
  57. package/dist/{challenge-nGWma08S.js → challenge-DImNcR7B.js} +48 -27
  58. package/dist/chat/index.d.ts +1 -1
  59. package/dist/chat/index.js +13 -10
  60. package/dist/chat-sdk/index.d.ts +44 -26
  61. package/dist/chat-sdk/index.js +17 -17
  62. package/dist/{checks-BC_0mPIq.js → checks-CGkP3Z7A.js} +4 -1
  63. package/dist/{claims-map-7oQ3ue4X.js → claims-map-CKkoAAYF.js} +5 -2
  64. package/dist/{claims-map-Ca-QX8C6.d.ts → claims-map-D1Pb5oRq.d.ts} +8 -5
  65. package/dist/claude-agent/index.d.ts +6 -6
  66. package/dist/claude-agent/index.js +6 -3
  67. package/dist/clerk/index.d.ts +11 -7
  68. package/dist/clerk/index.js +6 -6
  69. package/dist/cli/bin.js +4 -4
  70. package/dist/cli/index.d.ts +82 -7
  71. package/dist/cli/index.js +6 -6
  72. package/dist/{clients-C7zLFuWT.d.ts → clients-C_NOET3z.d.ts} +5 -5
  73. package/dist/{clients-DjU5ABMy.js → clients-DYr3U86j.js} +3 -3
  74. package/dist/cloud/index.d.ts +84 -52
  75. package/dist/cloud/index.js +53 -39
  76. package/dist/{cloud-CO8pYtwr.js → cloud-3kWfjnYy.js} +4 -5
  77. package/dist/{codemod-BP6n8N9L.js → codemod-Bv5i-Mzo.js} +523 -201
  78. package/dist/{codemod-i4N2BhDc.js → codemod-D9Aiii1r.js} +3 -4
  79. package/dist/{collect-DNm3oKOk.js → collect-B80GYEot.js} +4 -5
  80. package/dist/collect-D-eroIfV.js +1 -0
  81. package/dist/{collect-BaWeMjwV.js → collect-WCl8cJQV.js} +26 -63
  82. package/dist/{compare-pfyVnBjE.js → compare-DTfyUunF.js} +2 -2
  83. package/dist/compile/index.d.ts +2 -2
  84. package/dist/compile/index.js +1 -1
  85. package/dist/{compile-COM2VKuN.d.ts → compile-BEklRUYo.d.ts} +36 -12
  86. package/dist/{compile-BAEO5bOk.js → compile-EzEMB-7v.js} +77 -33
  87. package/dist/{completion-BNdVf7X2.js → completion-_bc0OUQ-.js} +17 -8
  88. package/dist/config-BwPBfN0t.js +108 -0
  89. package/dist/{config-DGZzMV1B.js → config-D5XrLWpk.js} +2 -2
  90. package/dist/{config-report-Cm7UITNA.js → config-report-BmWIskD7.js} +9 -6
  91. package/dist/config-shape-ykV0Vm2n.js +134 -0
  92. package/dist/{connection-DjhIJSs2.js → connection-B72dg5Q2.js} +23 -22
  93. package/dist/{connector-schema-_VCSsdtD.js → connector-schema-CYLQNMYq.js} +3 -2
  94. package/dist/{context--uM9V3Ui.js → context-BnIzxTNE.js} +4 -3
  95. package/dist/convex/index.d.ts +13 -7
  96. package/dist/convex/index.js +9 -6
  97. package/dist/{core-CQkE8Esr.d.ts → core-CFepFiDP.d.ts} +49 -22
  98. package/dist/{core-B5-w6Kw9.js → core-DzVINFbU.js} +26 -20
  99. package/dist/{create-Cb86Z8Im.js → create-6EwRQlig.js} +10 -7
  100. package/dist/{create-DJrlhEp9.js → create-BLPKnJKa.js} +35 -25
  101. package/dist/{create-UTnUVETj.d.ts → create-BPUopdfL.d.ts} +70 -37
  102. package/dist/{create-QHuuPw3q.d.ts → create-BamXmeob.d.ts} +37 -29
  103. package/dist/{create-B2-CQqCI.d.ts → create-DBvUsgzK.d.ts} +49 -28
  104. package/dist/{credential-CIM7wHwA.js → credential-CyyyvCsL.js} +41 -38
  105. package/dist/{credentials-BpuTwd7a.js → credentials-CdDxp7jN.js} +6 -6
  106. package/dist/{deciding-columns-DRo2QM6E.js → deciding-columns-NB4wcyBf.js} +2 -2
  107. package/dist/{delegation-C5rOdTp5.js → delegation-CDB6_keF.js} +31 -22
  108. package/dist/delivery/index.d.ts +4 -4
  109. package/dist/delivery/index.js +5 -5
  110. package/dist/{delivery-rwOKLWRm.js → delivery-BupfvJIV.js} +34 -22
  111. package/dist/{delivery-event-xX4obB8F.js → delivery-event-JioK5YbS.js} +6 -6
  112. package/dist/denied-text-DHldhVUv.d.ts +22 -0
  113. package/dist/{describe-DZlnEtLy.js → describe-Bb4hGK5d.js} +5 -5
  114. package/dist/{describe-O0SwYIK8.d.ts → describe-BbFPBSms.d.ts} +5 -5
  115. package/dist/{device-BARQ8eYG.js → device-BwbJNmb2.js} +11 -8
  116. package/dist/{diff-Btr1c1Ow.js → diff-BwR1JdP2.js} +2 -2
  117. package/dist/{diff-DzT-xD13.js → diff-CQegtBAo.js} +22 -13
  118. package/dist/{digest-B3kc_PgQ.d.ts → digest-8Yx2CchM.d.ts} +3 -3
  119. package/dist/{doctor-BU1szn63.js → doctor-ClRVAtXQ.js} +287 -135
  120. package/dist/{doctor-BoK_y0KO.js → doctor-LPMYjSqO.js} +4 -4
  121. package/dist/drizzle/index.d.ts +33 -19
  122. package/dist/drizzle/index.js +17 -9
  123. package/dist/elysia/index.d.ts +17 -11
  124. package/dist/elysia/index.js +5 -5
  125. package/dist/{errors-BKy0EfhN.js → errors-B6R_lg2a.js} +13 -4
  126. package/dist/{errors-B_Qg9D3e.d.ts → errors-BIM4MFsJ.d.ts} +22 -6
  127. package/dist/{errors-BWXBMaKK.d.ts → errors-CHwoRRpB.d.ts} +4 -1
  128. package/dist/{errors-DpP_U6Bf.js → errors-Vpu6rKHl.js} +13 -10
  129. package/dist/{evaluate-B_oqFbWC.js → evaluate-BAmf_AQd.js} +153 -82
  130. package/dist/{evaluations-BCddEOfO.d.ts → evaluations-DOWuBpWv.d.ts} +11 -5
  131. package/dist/{evaluations-DReoiVBw.js → evaluations-IBceAeKT.js} +40 -19
  132. package/dist/eve/index.d.ts +9 -6
  133. package/dist/eve/index.js +4 -4
  134. package/dist/{event-time-CsegxXxB.js → event-time-BGy48400.js} +8 -4
  135. package/dist/{expiry-D4_YKRKD.js → expiry-6XByK0dm.js} +8 -5
  136. package/dist/express/index.d.ts +9 -6
  137. package/dist/express/index.js +9 -6
  138. package/dist/fastify/index.d.ts +16 -10
  139. package/dist/fastify/index.js +8 -5
  140. package/dist/{fetch-adapter-CuhyYwC1.d.ts → fetch-adapter-BIbBAtPZ.d.ts} +9 -6
  141. package/dist/{fetch-adapter-De-u6vhJ.js → fetch-adapter-dPTgJVHd.js} +14 -11
  142. package/dist/fields-D0vUI6dq.js +498 -0
  143. package/dist/{files-acUbNwWt.js → files-B3AA05f1.js} +8 -5
  144. package/dist/{files-D_JIzUrP.js → files-BSjrtIHw.js} +11 -4
  145. package/dist/{fixtures-BTMW6zgU.js → fixtures-A1_sp_tR.js} +15 -6
  146. package/dist/{flags-aaeRAdiD.js → flags-DXjoTVbS.js} +2 -2
  147. package/dist/{freeze-CrU8nQeX.js → freeze-jjan0lCv.js} +4 -1
  148. package/dist/{from-snapshot-Bz469dIh.js → from-snapshot-DCakWRsr.js} +18 -15
  149. package/dist/gen-BFfzZSLH.js +58 -0
  150. package/dist/gen-BtfFWGbz.js +827 -0
  151. package/dist/{generate-3FNO5P5Q.js → generate-CRVV5V7l.js} +14 -8
  152. package/dist/generate-CezbCaTI.js +275 -0
  153. package/dist/{grantee-BrRANrpT.js → grantee-Dke-9rd1.js} +4 -4
  154. package/dist/{grantee-conditions-C6P1Tvol.js → grantee-conditions-BrYPe-w0.js} +12 -12
  155. package/dist/{grantee-match-0RtHWQDx.js → grantee-match-7RZZvoT_.js} +12 -6
  156. package/dist/{graph-sql-B-dsAT6j.d.ts → graph-sql-BwFC4Qjs.d.ts} +3 -3
  157. package/dist/h3/index.d.ts +10 -7
  158. package/dist/h3/index.js +3 -3
  159. package/dist/headers-B9jQxjtW.d.ts +10 -0
  160. package/dist/{helpers-DY3vXuGs.js → helpers-DJicaG6f.js} +40 -28
  161. package/dist/hono/index.d.ts +16 -10
  162. package/dist/hono/index.js +5 -5
  163. package/dist/{hosted-XBgU6RGT.js → hosted-D0IzESu_.js} +42 -21
  164. package/dist/{hosted-BmjzxQhp.d.ts → hosted-DVxlLZMe.d.ts} +33 -21
  165. package/dist/{http-ujKm0JXE.js → http-DH94eh6f.js} +4 -4
  166. package/dist/{http-BBoKefeS.js → http-DKLXrFGk.js} +13 -7
  167. package/dist/{http-Ca3Sr5x1.js → http-DOL33cO0.js} +11 -8
  168. package/dist/{import-DB2EG_iy.js → import-ACkOrv6g.js} +6 -6
  169. package/dist/{import-Bz0GefWg.js → import-CST57XLp.js} +64 -51
  170. package/dist/{index-CMiPH2Tv.d.ts → index-BinlXeU-.d.ts} +64 -37
  171. package/dist/{index-BSfRl0hZ.d.ts → index-CV-7DWeD.d.ts} +64 -52
  172. package/dist/{index-BE8y3moU.d.ts → index-DJwEgYzA.d.ts} +127 -82
  173. package/dist/{index-DH9DUDEM.d.ts → index-Dj2qF9VC.d.ts} +54 -30
  174. package/dist/{index-BTkwrK7v.d.ts → index-vYjMrXyK.d.ts} +336 -173
  175. package/dist/{index-DLwcuCN_.d.ts → index-ymept53A.d.ts} +51 -30
  176. package/dist/index.d.ts +22 -22
  177. package/dist/index.js +34 -34
  178. package/dist/{init-B-4t1NzC.js → init-BjuFDYT1.js} +10 -10
  179. package/dist/{init-5TXNji88.js → init-txYTuW9u.js} +5 -5
  180. package/dist/{instance-options-CU0YQCLH.d.ts → instance-options-CoHn-0e8.d.ts} +4 -4
  181. package/dist/{instance-snapshot-CjcwnEiV.js → instance-snapshot-DuWf1cT3.js} +86 -61
  182. package/dist/{instant-BluqDvyS.js → instant-DK3Iz83e.js} +2 -2
  183. package/dist/{internals-Dk8A8fX3.js → internals-B3IgHrvo.js} +6 -3
  184. package/dist/{json-schema-B-vAwlde.js → json-schema-BPGa-RjQ.js} +9 -3
  185. package/dist/{json-schema-CN_iLFH2.d.ts → json-schema-BfXgnRNT.d.ts} +4 -4
  186. package/dist/jwt/index.d.ts +57 -27
  187. package/dist/jwt/index.js +24 -21
  188. package/dist/{kernel-DVExUwkp.js → kernel-qv4cr9w8.js} +32 -23
  189. package/dist/kysely/index.d.ts +49 -33
  190. package/dist/kysely/index.js +9 -7
  191. package/dist/{live-options-BaAFCIiu.js → live-options-BBIT68le.js} +2 -2
  192. package/dist/{load-DxroEzH1.js → load-DjSU5KXO.js} +6 -6
  193. package/dist/load-Dm0pSYH3.js +1 -0
  194. package/dist/{login-ClSJh5t5.js → login-CfImTJGb.js} +4 -4
  195. package/dist/{login-WC9HPJpU.js → login-CgfCTO3F.js} +16 -9
  196. package/dist/{manifest-Dv6q4i5s.js → manifest-B2QPh19C.js} +49 -38
  197. package/dist/{manifest-BVhExYhw.d.ts → manifest-CzzWtnAb.d.ts} +126 -31
  198. package/dist/{manifest-schema-Cv492Qev.js → manifest-schema-2r37XRhD.js} +44 -3
  199. package/dist/{manifest-B79YuF2T.js → manifest-wg8WkkpD.js} +6 -6
  200. package/dist/{map-claims-etGIS_Dv.js → map-claims-C-nv08_n.js} +16 -9
  201. package/dist/{map-error-BQGyDm_M.js → map-error-pasIGqMT.js} +7 -7
  202. package/dist/{markers-C6joDI3o.js → markers-BeHZ4x9Q.js} +20 -5
  203. package/dist/mcp/index.d.ts +114 -61
  204. package/dist/mcp/index.js +70 -40
  205. package/dist/{migrate-Dodel0IJ.js → migrate-B7oP_sQU.js} +35 -17
  206. package/dist/module-values-BJTBdo6y.js +107 -0
  207. package/dist/nest/index.d.ts +23 -13
  208. package/dist/nest/index.js +18 -11
  209. package/dist/next/client.d.ts +5 -2
  210. package/dist/next/client.js +1 -1
  211. package/dist/next/index.d.ts +79 -26
  212. package/dist/next/index.js +121 -10
  213. package/dist/next/plugin.d.ts +1 -1
  214. package/dist/next/plugin.js +4 -3
  215. package/dist/node/index.d.ts +5 -5
  216. package/dist/node/index.js +3 -3
  217. package/dist/{ocsf-BFp-PZZA.js → ocsf-TcjRBgIs.js} +15 -5
  218. package/dist/openai/index.d.ts +13 -7
  219. package/dist/openai/index.js +3 -3
  220. package/dist/openapi/index.d.ts +51 -30
  221. package/dist/openapi/index.js +2 -2
  222. package/dist/{openapi-ztVaux6j.js → openapi-BGeuunWC.js} +23 -14
  223. package/dist/{openapi-DMocl1bh.js → openapi-BIpw3Mb7.js} +4 -5
  224. package/dist/{openapi-Ddb4628T.js → openapi-BOsx0xn9.js} +33 -18
  225. package/dist/{operation-findings-kRcEp8lE.js → operation-findings-CXtFzlKJ.js} +3 -3
  226. package/dist/{operations-BNLes61x.d.ts → operations-Ci_rT6Uo.d.ts} +10 -7
  227. package/dist/orpc/index.d.ts +68 -14
  228. package/dist/orpc/index.js +62 -13
  229. package/dist/otel/index.d.ts +7 -4
  230. package/dist/otel/index.js +8 -5
  231. package/dist/{output-DgSDLrta.js → output-DV5dwOTs.js} +9 -5
  232. package/dist/output-files-BHOIlrfD.js +1 -0
  233. package/dist/{output-files-CCMdcFWb.js → output-files-BIQ_9pIs.js} +29 -17
  234. package/dist/ownership-DA5YdYTm.js +1059 -0
  235. package/dist/{parse-Ddhz2xf4.js → parse-1_ZheTW5.js} +16 -13
  236. package/dist/parse-local-manifest-CCmbhnxP.d.ts +10 -0
  237. package/dist/{parse-local-manifest-T1Q8X3A2.js → parse-local-manifest-DEiCF4ah.js} +19 -7
  238. package/dist/{parse-request-D_tUXG6M.js → parse-request-CwCZpyjV.js} +7 -8
  239. package/dist/{paths-DXSHAMIa.js → paths-CUvURzHp.js} +4 -1
  240. package/dist/pdp/index.d.ts +9 -6
  241. package/dist/pdp/index.js +20 -13
  242. package/dist/{peer-DOzzMfZL.js → peer-C9LvBCcb.js} +1 -1
  243. package/dist/{peer-12Q5I_RH.js → peer-Q0fuZ6hx.js} +9 -3
  244. package/dist/{permdock-BfWEeMqk.js → permdock-BvjivVb9.js} +200 -140
  245. package/dist/{permdock-Dco6dyCK.d.ts → permdock-CprAPN3w.d.ts} +260 -129
  246. package/dist/{permission-registry-DpPtSKNZ.js → permission-registry-B8tYxPIt.js} +23 -10
  247. package/dist/{permission-types-DhNEmoRG.d.ts → permission-types-CAY-GU7e.d.ts} +127 -41
  248. package/dist/{permissions-CoqCOfJ3.d.ts → permissions-Bx6UI8n1.d.ts} +6 -3
  249. package/dist/{permissions-CyH2MV_B.js → permissions-CVXmRILq.js} +3 -3
  250. package/dist/{permissions-DArULThq.js → permissions-CYcHj_w7.js} +8 -5
  251. package/dist/pg-DQTqRrou.js +60 -0
  252. package/dist/{pins-8ILTftC9.js → pins-nqarl3oE.js} +4 -1
  253. package/dist/{pkce-5h8NgMQJ.js → pkce-CnmmYqUZ.js} +1 -1
  254. package/dist/{policy-B7dg_yzu.d.ts → policy-BycVKnXv.d.ts} +5 -5
  255. package/dist/{policy-DaJy4nK4.js → policy-CLQ8__GF.js} +43 -23
  256. package/dist/{policy-from-catalog-DFWYkNdu.js → policy-from-catalog-CU3An8uP.js} +28 -25
  257. package/dist/{policy-module-CTlwMvLI.js → policy-module-xym9fnSq.js} +12 -6
  258. package/dist/{policy-types-B-F-qAZk.d.ts → policy-types-DGIO_gxq.d.ts} +782 -357
  259. package/dist/{postgres-store-BL9M_CA1.js → postgres-store-DcyrPS-r.js} +43 -16
  260. package/dist/{postgrest-r5faDIzD.js → postgrest-5Dr3W64L.js} +84 -86
  261. package/dist/{postgrest-CYacM_u7.d.ts → postgrest-D5nUGm-c.d.ts} +55 -35
  262. package/dist/powersync-B701tvhE.js +1 -0
  263. package/dist/{powersync-13odBwiM.js → powersync-Bg8u-JcR.js} +3 -3
  264. package/dist/{powersync-53ryOZip.js → powersync-CJrT1DSc.js} +127 -69
  265. package/dist/preset/index.d.ts +38 -28
  266. package/dist/preset/index.js +1 -1
  267. package/dist/{preset-CHTbd-DQ.js → preset-BjLzeFpp.js} +56 -32
  268. package/dist/{principal-source-pHneukrx.js → principal-source-C6N60GtM.js} +10 -10
  269. package/dist/prisma/index.d.ts +69 -41
  270. package/dist/prisma/index.js +21 -17
  271. package/dist/{problem-CTviyH5L.js → problem-BVLHFK33.js} +41 -21
  272. package/dist/{problem-details-cn5X30gZ.js → problem-details-CLDgX1KV.js} +13 -4
  273. package/dist/{problem-types-CJ2325SZ.js → problem-types-DSsRfONQ.js} +4 -1
  274. package/dist/{prompt-DwtVemER.js → prompt-BYc6drYW.js} +4 -1
  275. package/dist/protected-action-D8x73IGm.d.ts +58 -0
  276. package/dist/protected-action-DUYqb-Ma.js +80 -0
  277. package/dist/{protected-DXE3cQYg.js → protected-action-QEA8arRB.js} +48 -14
  278. package/dist/{provider-BQsTYYy0.js → provider-C55OGXJ7.js} +5 -4
  279. package/dist/{provider-Csk-THAn.d.ts → provider-DfLeek9O.d.ts} +1 -1
  280. package/dist/{provider-store-IgqQipCO.js → provider-store-CaTv00tr.js} +13 -9
  281. package/dist/{pull-CN5OLxrF.js → pull-2nJr0qg_.js} +12 -11
  282. package/dist/pull-C3EEGzSw.js +1 -0
  283. package/dist/{push-tVdG8dUL.js → push-Bn-lMEmI.js} +19 -13
  284. package/dist/{pushed-policy-CmYeSQqq.js → pushed-policy-CDuOL2de.js} +10 -7
  285. package/dist/{pushed-policy-BbcY9r_4.d.ts → pushed-policy-CryQheKq.d.ts} +12 -6
  286. package/dist/react/index.d.ts +9 -8
  287. package/dist/react/index.js +7 -6
  288. package/dist/react/provider-client.d.ts +1 -1
  289. package/dist/react/provider-client.js +1 -1
  290. package/dist/react-native/index.d.ts +94 -55
  291. package/dist/react-native/index.js +200 -61
  292. package/dist/{refs-CNJBiTFo.js → refs-C8BKxc_e.js} +2 -2
  293. package/dist/{relation-walk-3OyDBF0S.js → relation-walk-DK_gkgL7.js} +12 -9
  294. package/dist/{relations-BnCWnJGI.js → relations-BxvRvDHK.js} +3 -3
  295. package/dist/{replay-Du1tJjG7.js → replay-BU09ad4L.js} +1 -1
  296. package/dist/{replay-DCDD_ZfL.d.ts → replay-Bs9Df2fQ.d.ts} +1 -1
  297. package/dist/{request-context-BykKLmyE.js → request-context-Duzdf0cd.js} +8 -8
  298. package/dist/{request-schema-CMreVuFM.js → request-schema-DhX7UbfQ.js} +4 -1
  299. package/dist/resend/index.d.ts +34 -28
  300. package/dist/resend/index.js +29 -29
  301. package/dist/resolve-names-ConCSj1y.js +201 -0
  302. package/dist/{resource-relations-D_jw0BFx.js → resource-relations-8-pCScBO.js} +18 -9
  303. package/dist/{retire-Wj6dkyDE.js → retire-B2xffQgY.js} +15 -6
  304. package/dist/{revocations-R07lFBnX.d.ts → revocations-BaUXHM1N.d.ts} +6 -3
  305. package/dist/{rls-Ck_PocSp.js → rls-Ba9wN0SP.js} +13 -6
  306. package/dist/{rls-CxBZb4rZ.js → rls-Cx0dtsB7.js} +310 -128
  307. package/dist/{role-builder-C1VJzvcr.js → role-builder-BK2-T6oD.js} +41 -20
  308. package/dist/{row-conditions-h2HythXQ.js → row-conditions-BAGHOmVq.js} +4 -3
  309. package/dist/{rpc-Bk1bE-ch.js → rpc-vHIwyXCp.js} +8 -5
  310. package/dist/run-Ck22anC2.js +1 -0
  311. package/dist/{run-uLD2aWuO.js → run-PbRlXTfh.js} +26 -23
  312. package/dist/{run-ticket-BpNi7BCi.d.ts → run-ticket-B2o2Kxz8.d.ts} +29 -14
  313. package/dist/{run-ticket-B5d_63Ma.js → run-ticket-Dv7aF7Dk.js} +9 -9
  314. package/dist/{runtime-Vif3_-zf.js → runtime-BGnrOkVH.js} +5 -2
  315. package/dist/{saas-Az_Kz-4D.js → saas-DK4V-3Is.js} +42 -29
  316. package/dist/{scan-DSljDE1Y.js → scan-CRTj6fke.js} +1 -1
  317. package/dist/{schema-B4v0Qrac.js → schema-BOJjqlWL.js} +3 -2
  318. package/dist/{schema-gIcCx7zM.js → schema-BTsE1WRT.js} +8 -4
  319. package/dist/scim/index.d.ts +2 -2
  320. package/dist/scim/index.js +2 -2
  321. package/dist/{scim-C7JYhySg.js → scim-D8YupzX1.js} +2 -2
  322. package/dist/{scim-YNieBO1U.js → scim-jJBJ7g1Z.js} +33 -15
  323. package/dist/{scopes-BHsc-wp-.js → scopes-0Up_UA2t.js} +41 -23
  324. package/dist/server/index.d.ts +11 -11
  325. package/dist/server/index.js +12 -12
  326. package/dist/{server-Bnga6I50.js → server-3cVlTLde.js} +31 -31
  327. package/dist/{server-types-C4gZUEZy.d.ts → server-types-CyRN0-Cd.d.ts} +88 -46
  328. package/dist/{sha256-D9ihqmvd.js → sha256-C-4WXKIu.js} +4 -3
  329. package/dist/{shared-fMKOv8hP.js → shared-Afctg7B0.js} +65 -32
  330. package/dist/{shared-C8LjUdVU.js → shared-l0oGGetg.js} +9 -6
  331. package/dist/{signals-D3NcTKUS.js → signals-B1vHR3fN.js} +2 -2
  332. package/dist/{sink-Cp_Eot9W.d.ts → sink-B5zoUW_O.d.ts} +44 -20
  333. package/dist/{sink-BEZSlMS_.js → sink-D9_vh372.js} +32 -21
  334. package/dist/{skills-g_3BS9NC.js → skills-C9uKfSF5.js} +3 -3
  335. package/dist/{skills-Dcjw9_1C.js → skills-CQQcuGBi.js} +12 -8
  336. package/dist/{snapshot-CbGmYiJx.js → snapshot-CXlzi69u.js} +21 -18
  337. package/dist/{snapshot-cache-Pahd3IYJ.d.ts → snapshot-cache-BjAWkchD.d.ts} +21 -12
  338. package/dist/{snapshot-cache-DT2Kx1F8.js → snapshot-cache-Bx_4xC_6.js} +14 -11
  339. package/dist/solid/index.d.ts +55 -16
  340. package/dist/solid/index.js +46 -12
  341. package/dist/solid-start/index.d.ts +30 -12
  342. package/dist/solid-start/index.js +3 -3
  343. package/dist/{sources-B-zYB4GS.js → sources-CMAM-2A3.js} +46 -27
  344. package/dist/{sources-DEEuGb8S.d.ts → sources-CWG32C0G.d.ts} +126 -53
  345. package/dist/{sql-B96movIM.js → sql-0WjxIp9g.js} +28 -7
  346. package/dist/{sql-CDEPCA0g.d.ts → sql-B80DFdpG.d.ts} +2 -2
  347. package/dist/{src-DLFrtrrC.js → src-C_pi2Rnh.js} +292 -101
  348. package/dist/ssf/index.d.ts +3 -3
  349. package/dist/ssf/index.js +47 -35
  350. package/dist/{standard-webhooks-DgFFD-Ga.js → standard-webhooks-D67a3nzk.js} +5 -5
  351. package/dist/{standard-webhooks-B_qRg0ws.d.ts → standard-webhooks-DOYEuOLx.d.ts} +7 -7
  352. package/dist/{store-DSP9oGvh.js → store-RNFvaJJv.js} +32 -26
  353. package/dist/{store-options-B_poyYvg.js → store-options-Dil3lraY.js} +105 -15
  354. package/dist/stores-DZJvxFIZ.d.ts +59 -0
  355. package/dist/{stores-BqEuHC05.js → stores-DxZWDXCs.js} +42 -5
  356. package/dist/{stream-2Vwhl7Er.d.ts → stream-9y9qw51m.d.ts} +4 -3
  357. package/dist/{stream-CvdUS9V1.js → stream-CDvF0sJm.js} +5 -5
  358. package/dist/{style-Ds1gNm77.js → style-DblOtSga.js} +1 -1
  359. package/dist/{style-Cqo7-73x.js → style-Ds11Hmk4.js} +2 -1
  360. package/dist/{subject-settings-CkEwrw3W.js → subject-settings-8sH5HlII.js} +8 -4
  361. package/dist/{row-check-Dt35czLy.d.ts → subject-settings-vNW8qmUH.d.ts} +30 -18
  362. package/dist/supabase/index.d.ts +48 -38
  363. package/dist/supabase/index.js +5 -5
  364. package/dist/supabase/middleware.d.ts +19 -13
  365. package/dist/supabase/middleware.js +7 -7
  366. package/dist/{supabase--0aJdLEd.js → supabase-DnMMg5Fn.js} +79 -35
  367. package/dist/{supabase-Bqp7iIY2.js → supabase-SBs3MYUE.js} +3 -3
  368. package/dist/supabase-hook-C0FyEACZ.js +1 -0
  369. package/dist/{supabase-hook-Dg0SrQWR.js → supabase-hook-CrgU06WH.js} +175 -196
  370. package/dist/{supautils-MESd81bF.js → supautils-ByezN3b8.js} +385 -219
  371. package/dist/{support-session-Cna49-3f.js → support-session-BsmPCbz8.js} +21 -21
  372. package/dist/svelte/PermissionBoundary.svelte +2 -6
  373. package/dist/svelte/Protected.svelte +2 -8
  374. package/dist/svelte/index.d.ts +9 -8
  375. package/dist/svelte/index.js +10 -9
  376. package/dist/svelte/runtime.d.ts +4 -4
  377. package/dist/svelte/runtime.js +4 -4
  378. package/dist/svelte/source.d.ts +9 -8
  379. package/dist/svelte/source.js +6 -5
  380. package/dist/sveltekit/index.d.ts +30 -12
  381. package/dist/sveltekit/index.js +2 -2
  382. package/dist/{ownership-Z2LpxsGa.js → tables-BqrxBCir.js} +641 -1104
  383. package/dist/tanstack-start/index.d.ts +22 -10
  384. package/dist/tanstack-start/index.js +2 -2
  385. package/dist/{target-Bw37TFNA.js → target-qdEAnnhU.js} +6 -6
  386. package/dist/{tenancy-CmeBQ6Nv.js → tenancy-5d1zVBvK.js} +25 -19
  387. package/dist/terminal/index.d.ts +23 -14
  388. package/dist/terminal/index.js +17 -20
  389. package/dist/testing/core.d.ts +1 -1
  390. package/dist/testing/core.js +1 -1
  391. package/dist/testing/fixtures/index.d.ts +8 -5
  392. package/dist/testing/fixtures/index.js +78 -17
  393. package/dist/testing/index.d.ts +225 -141
  394. package/dist/testing/index.js +352 -234
  395. package/dist/testing/saas/index.d.ts +43 -27
  396. package/dist/testing/saas/index.js +2 -2
  397. package/dist/testing/saas/permissions.d.ts +1 -1
  398. package/dist/testing/saas/permissions.js +1 -1
  399. package/dist/{text-diff-DhITNCnD.js → text-diff-BtfSmdUo.js} +2 -2
  400. package/dist/{thenable-yD7SabqG.js → thenable-BNSM1U2R.js} +12 -3
  401. package/dist/{time-DkWjdL98.js → time-nR1JesoH.js} +32 -8
  402. package/dist/{token-2qYDvXz2.js → token-DC9EQiet.js} +14 -12
  403. package/dist/{tool-refusal-reAhIzdl.js → tool-refusal-Qpjs_W6M.js} +5 -2
  404. package/dist/trpc/index.d.ts +11 -8
  405. package/dist/trpc/index.js +15 -9
  406. package/dist/type-helpers-c7Xo_2Cu.d.ts +50 -0
  407. package/dist/{types-CfiKC5aN.d.ts → types-B2efzoSX.d.ts} +14 -11
  408. package/dist/{types-CIeZcG8v.d.ts → types-B6ExllNo.d.ts} +2 -2
  409. package/dist/{types-DBHftjgS.d.ts → types-BB-zWDcR.d.ts} +45 -33
  410. package/dist/{types-BfVmNJO5.d.ts → types-BMVDHvI0.d.ts} +128 -50
  411. package/dist/{types-DXmwu78Z.d.ts → types-CEinc15V.d.ts} +31 -14
  412. package/dist/{types-g7Oy6Zg4.d.ts → types-CN0LsqbK.d.ts} +47 -24
  413. package/dist/{types-CeIscIKp.d.ts → types-CWBsAwqn.d.ts} +23 -12
  414. package/dist/{types-DqzsnlSA.js → types-CcUXciSj.js} +17 -5
  415. package/dist/{types-BWZybqs9.d.ts → types-CzOeVvcC.d.ts} +384 -203
  416. package/dist/{types-DC44-hqb.d.ts → types-DLvhVm1r.d.ts} +59 -32
  417. package/dist/{types-D3A19w4A.d.ts → types-DlelvQk4.d.ts} +22 -13
  418. package/dist/{types-cTos-H7p.d.ts → types-DsHGPtkR.d.ts} +68 -32
  419. package/dist/{types-BXMYB7BY.d.ts → types-ZzRGoViD.d.ts} +77 -24
  420. package/dist/{types-CQVEQawv.d.ts → types-rCRV4Ge-.d.ts} +24 -14
  421. package/dist/types-tQB2CEnY.d.ts +262 -0
  422. package/dist/unplugin/index.d.ts +1 -1
  423. package/dist/unplugin/index.js +2 -2
  424. package/dist/usage-0hjZPIRX.js +1 -0
  425. package/dist/{usage-Bybmck7f.js → usage-B9EtHWLa.js} +50 -26
  426. package/dist/{usage-CDaLXCfL.js → usage-CBzgwfIs.js} +2 -2
  427. package/dist/{validation-error-ZfUHbKvf.js → validation-error-CYg2kJEw.js} +4 -1
  428. package/dist/{validation-error-CQpoquwj.d.ts → validation-error-uvp-kyfO.d.ts} +5 -2
  429. package/dist/{validity-CZ7-y0Cj.js → validity-Buc7w8E9.js} +13 -10
  430. package/dist/{verifier-DHuh-okk.js → verifier-DUV6pLqZ.js} +10 -4
  431. package/dist/{verify-pe8rL_Qw.js → verify-DlUcTDBz.js} +148 -487
  432. package/dist/version-DMQ0dnN5.js +48 -0
  433. package/dist/version-DizhmD72.js +1 -0
  434. package/dist/{views-BB8E9dTP.js → views-CD8wuL4Z.js} +19 -6
  435. package/dist/{vocabulary-Bg3eeT2H.d.ts → vocabulary-DEJ5j4mR.d.ts} +7 -4
  436. package/dist/vue/index.d.ts +71 -22
  437. package/dist/vue/index.js +50 -13
  438. package/dist/{waiter-DwEyouan.d.ts → waiter-CqUKX6CY.d.ts} +13 -10
  439. package/dist/{waiter-BGUtGYoU.js → waiter-aBLM63_f.js} +1 -1
  440. package/dist/{watch-C-4VmFlL.js → watch-BFDKqmUa.js} +8 -8
  441. package/dist/watch-ClLuO2TL.js +1 -0
  442. package/dist/webmcp/index.d.ts +11 -11
  443. package/dist/webmcp/index.js +8 -5
  444. package/dist/{where-scope-wq2coopv.js → where-scope-DlCdCM_8.js} +24 -18
  445. package/dist/{who-can-BwNsI_Js.js → who-can-BoDJm0Nc.js} +23 -20
  446. package/dist/workflow/index.d.ts +3 -3
  447. package/dist/workflow/index.js +13 -13
  448. package/dist/workflow-sdk/index.d.ts +19 -13
  449. package/dist/workflow-sdk/index.js +6 -6
  450. package/dist/{wrap-CiSc_KCq.js → wrap-B2wziJI_.js} +4 -4
  451. package/dist/{wrap-B6R0cMRL.d.ts → wrap-DxXB54Wu.d.ts} +8 -5
  452. package/package.json +8 -8
  453. package/schemas/catalog-v1.json +3 -0
  454. package/schemas/supabase-manifest-v1.json +33 -1
  455. package/skills/permdock-credentials/references/tokens-keys-links.md +8 -6
  456. package/skills/permdock-data/references/queries-and-rls.md +2 -1
  457. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -2
  458. package/skills/permdock-wire/references/adapters.md +16 -23
  459. package/dist/catalog-BCCjSAdH.js +0 -1
  460. package/dist/collect-k_Dulxr5.js +0 -1
  461. package/dist/config-CoQHDrDi.js +0 -166
  462. package/dist/denied-text-D4qkEtFz.d.ts +0 -19
  463. package/dist/fields-ClcQLrVc.js +0 -238
  464. package/dist/generate-CNU1pIOo.js +0 -171
  465. package/dist/headers-BIjfMaoC.js +0 -8
  466. package/dist/headers-CIbDTUTK.d.ts +0 -7
  467. package/dist/load-DrMHXzgN.js +0 -1
  468. package/dist/output-files-DPAY7-GX.js +0 -1
  469. package/dist/package-root-Dk_ETdkp.js +0 -31
  470. package/dist/parse-local-manifest-e4mdwAKd.d.ts +0 -10
  471. package/dist/policies-B2lZIurj.js +0 -295
  472. package/dist/powersync-CExtTLyA.js +0 -1
  473. package/dist/problem-details-Tcfmj3bV.d.ts +0 -7
  474. package/dist/protected-BwZYL1X_.d.ts +0 -39
  475. package/dist/pull-Cty6Ovyu.js +0 -1
  476. package/dist/run-Bz7DXGEv.js +0 -1
  477. package/dist/stores-BAZwSYZA.d.ts +0 -31
  478. package/dist/supabase-hook-DJxC4PoP.js +0 -1
  479. package/dist/types-CKV71kKh.d.ts +0 -172
  480. package/dist/usage-y-kBNdqs.js +0 -1
  481. package/dist/version-CEbQ5UeM.js +0 -18
  482. package/dist/version-DXkYUISx.js +0 -1
  483. package/dist/watch-Bd9mx3rd.js +0 -1
@@ -1,33 +1,36 @@
1
1
  import { n as isReadonlyArray, r as isRecord, t as compact } from "./compact-CAf557ZB.js";
2
- import { n as freezeDeep, t as freezeCopy } from "./freeze-CrU8nQeX.js";
3
- import { n as PermDockValidationError } from "./validation-error-ZfUHbKvf.js";
4
- import { a as deniedMessage, i as approvalMessage, n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "./errors-BKy0EfhN.js";
5
- import { t as attachInternals } from "./internals-Dk8A8fX3.js";
6
- import { _ as keyToScope, a as getResource, c as listPermissions, g as formerScopes } from "./permission-registry-DpPtSKNZ.js";
7
- import { n as isThenable } from "./thenable-yD7SabqG.js";
8
- import { i as readAppData } from "./app-data-MuyzVqX8.js";
9
- import { f as scopeList, h as tenantOf, o as normalizeMemberships } from "./scopes-BHsc-wp-.js";
10
- import { o as pickVisible, s as sanitizeContext } from "./validity-CZ7-y0Cj.js";
11
- import { c as nowSeconds, d as resolveActiveTenant, m as tenantsOf, p as scopeField, t as heldRoleNamesIn, u as relatesTo } from "./tenancy-CmeBQ6Nv.js";
12
- import { u as policyX } from "./policy-DaJy4nK4.js";
13
- import { t as byCodePoint } from "./compare-pfyVnBjE.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-B_oqFbWC.js";
15
- import { a as whereGrant, c as applyRoleKinds, i as collectSnapshotGrants, l as audiencesOf, o as heldRoleNames, p as asMembershipSource, r as assignableIn, s as roleLeaf, t as snapshotOf } from "./instance-snapshot-CjcwnEiV.js";
16
- import { r as relationReader, t as pendingRelations } from "./relations-BnCWnJGI.js";
17
- import { r as snapshotGrant } from "./snapshot-CbGmYiJx.js";
18
- import { a as decideForTarget, i as permittedIds, o as deniedFor, r as mayUse, s as signSnapshot, t as whereFromGrants } from "./where-scope-wq2coopv.js";
19
- import { i as decideAllWith, n as canAllWith } from "./checks-BC_0mPIq.js";
2
+ import { n as freezeDeep, t as freezeCopy } from "./freeze-jjan0lCv.js";
3
+ import { n as PermDockValidationError } from "./validation-error-CYg2kJEw.js";
4
+ import { a as deniedMessage, i as approvalMessage, n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "./errors-B6R_lg2a.js";
5
+ import { t as attachInternals } from "./internals-B3IgHrvo.js";
6
+ import { _ as keyToScope, a as getResource, c as listPermissions, g as formerScopes } from "./permission-registry-B8tYxPIt.js";
7
+ import { n as isThenable } from "./thenable-BNSM1U2R.js";
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";
10
+ import { o as pickVisible, s as sanitizeContext } from "./validity-Buc7w8E9.js";
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";
16
+ 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
20
  import { r as isSubject, t as anonymousSubject } from "./subject-BGoM5o8B.js";
21
21
  //#region src/core/app.ts
22
22
  const APP = Symbol.for("permdock.app");
23
- /** The app definition bound to `policy` by `defineApp`, or `undefined` for a plain policy. */
23
+ /**
24
+ * The app definition bound to `policy` by `defineApp`, or `undefined` for a
25
+ * plain policy.
26
+ */
24
27
  function appOf(policy) {
25
28
  const value = Reflect.get(policy, APP);
26
29
  return value === void 0 ? void 0 : value;
27
30
  }
28
31
  /**
29
- * `options` with the app's values under it, key by key, for an adapter
30
- * factory to call first: `options = withApp(policy, options)`.
32
+ * `options` with the app's values under it, key by key, for an adapter factory
33
+ * to call first: `options = withApp(policy, options)`.
31
34
  */
32
35
  function withApp(policy, options) {
33
36
  const app = appOf(policy);
@@ -39,7 +42,10 @@ function withApp(policy, options) {
39
42
  }
40
43
  //#endregion
41
44
  //#region src/core/assert-decision.ts
42
- /** `assert`'s outcome: the granted decision, or the error a refusal throws after `onDenied` runs. */
45
+ /**
46
+ * `assert`'s outcome: the granted decision, or the error a refusal throws after
47
+ * `onDenied` runs.
48
+ */
43
49
  function assertDecision(policy, subject, permission, data, decision, onDenied) {
44
50
  if (decision.outcome === "granted") return decision;
45
51
  if (onDenied !== void 0) onDenied(decision);
@@ -72,7 +78,10 @@ function assertDecision(policy, subject, permission, data, decision, onDenied) {
72
78
  }
73
79
  //#endregion
74
80
  //#region src/core/instance-env.ts
75
- /** The environment `derive(options)` builds on: `base` with the sources `options` replaces loaded again. */
81
+ /**
82
+ * The environment `derive(options)` builds on: `base` with the sources
83
+ * `options` replaces loaded again.
84
+ */
76
85
  function deriveEnv(policy, subject, base, relationCache, options) {
77
86
  const scopes = scopeList(policy.scopes);
78
87
  const tenants = tenantsOf(subject.principal, scopes);
@@ -140,7 +149,10 @@ function simulateEvent(policy, subject, env, evaluated) {
140
149
  }
141
150
  //#endregion
142
151
  //#region src/core/instance.ts
143
- /** Each round reads one more layer: link hops, then the chain, then nested groups. */
152
+ /**
153
+ * Each round reads one more layer: link hops, then the chain, then nested
154
+ * groups.
155
+ */
144
156
  const LOAD_ROUNDS = 48;
145
157
  function buildInstance(policy, subject, envBase, team) {
146
158
  const listeners = emptyListeners();
@@ -500,6 +512,96 @@ function buildInstance(policy, subject, envBase, team) {
500
512
  return Object.freeze(instance);
501
513
  }
502
514
  //#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
503
605
  //#region src/core/oauth-scopes.ts
504
606
  /**
505
607
  * Every OAuth scope a token may carry to the permission keys it reaches: each
@@ -542,11 +644,17 @@ function expandOAuthScopes(policy, delegation) {
542
644
  scopes: [...out]
543
645
  };
544
646
  }
545
- /** The coarse scopes the policy declares that cover `permission`, in declaration order. */
647
+ /**
648
+ * The coarse scopes the policy declares that cover `permission`, in declaration
649
+ * order.
650
+ */
546
651
  function coarseScopesFor(policy, permission) {
547
652
  return (policy.oauthScopes ?? []).filter((entry) => entry.permissions.includes(permission.key)).map((entry) => entry.scope);
548
653
  }
549
- /** Every token scope that reaches `permission`: its own, any it was renamed from, and the coarse scopes covering it. */
654
+ /**
655
+ * Every token scope that reaches `permission`: its own, any it was renamed
656
+ * from, and the coarse scopes covering it.
657
+ */
550
658
  function scopesReaching(policy, permission) {
551
659
  return [
552
660
  permission.scope,
@@ -555,9 +663,9 @@ function scopesReaching(policy, permission) {
555
663
  ];
556
664
  }
557
665
  /**
558
- * The scope an `insufficient_scope` challenge names for `permission`: the
559
- * first coarse scope that covers it, which the authorization server issues,
560
- * else the permission's own scope.
666
+ * The scope an `insufficient_scope` challenge names for `permission`: the first
667
+ * coarse scope that covers it, which the authorization server issues, else the
668
+ * permission's own scope.
561
669
  */
562
670
  function challengeScope(policy, permission) {
563
671
  return coarseScopesFor(policy, permission)[0] ?? permission.scope;
@@ -567,10 +675,25 @@ function hasScope(granted, scopes) {
567
675
  return scopes.some((scope) => granted?.includes(scope) === true);
568
676
  }
569
677
  //#endregion
678
+ //#region src/core/source-memo.ts
679
+ /**
680
+ * One memo per `getPermDock` call. A read that throws is not kept, so the next
681
+ * caller tries again.
682
+ */
683
+ function sourceMemo() {
684
+ const answers = /* @__PURE__ */ new Map();
685
+ return (key, read) => {
686
+ if (answers.has(key)) return answers.get(key);
687
+ const answer = read();
688
+ answers.set(key, answer);
689
+ return answer;
690
+ };
691
+ }
692
+ //#endregion
570
693
  //#region src/core/resolve-subject.ts
571
694
  /**
572
- * The tenant a user API key holds its owner to (`Credential.tenant`): only
573
- * the memberships inside it count, and no global role.
695
+ * The tenant a user API key holds its owner to (`Credential.tenant`): only the
696
+ * memberships inside it count, and no global role.
574
697
  */
575
698
  function heldTenantOf(principal) {
576
699
  const credential = principal["credential"];
@@ -581,13 +704,14 @@ function heldTenantOf(principal) {
581
704
  function outsideHeld(held, options) {
582
705
  return held !== void 0 && options.tenant !== void 0 && options.tenant !== held;
583
706
  }
584
- function assemblePrincipal(policy, user, options, auth) {
707
+ function assemblePrincipal(policy, user, options, auth, memo) {
585
708
  let principal;
586
709
  let context = {};
587
710
  let actor = options.actor;
588
711
  let delegation = options.delegation;
589
712
  let session = options.session;
590
713
  let expiresAt = options.expiresAt;
714
+ let issuedAt;
591
715
  let liveSession;
592
716
  try {
593
717
  if (user === null || user === void 0) principal = policy.subject(user);
@@ -598,6 +722,7 @@ function assemblePrincipal(policy, user, options, auth) {
598
722
  delegation = user.delegation ?? delegation;
599
723
  session = user.session ?? session;
600
724
  expiresAt = user.expiresAt ?? expiresAt;
725
+ issuedAt = typeof user.issuedAt === "number" && Number.isFinite(user.issuedAt) ? user.issuedAt : void 0;
601
726
  liveSession = user.liveSession === true ? true : void 0;
602
727
  } else principal = policy.subject(user);
603
728
  } catch {
@@ -613,7 +738,10 @@ function assemblePrincipal(policy, user, options, auth) {
613
738
  return from.membershipsFor(compact({
614
739
  id: of.id,
615
740
  kind: of.kind
616
- }), compact({ tenant: options.tenant }));
741
+ }), compact({
742
+ tenant: options.tenant,
743
+ memo
744
+ }));
617
745
  } catch {
618
746
  auth.push({
619
747
  reason: "source-threw",
@@ -629,10 +757,13 @@ function assemblePrincipal(policy, user, options, auth) {
629
757
  live = true;
630
758
  memberships = read(source, principal);
631
759
  } else if (principal?.memberships !== void 0 && fromClaims && source.onStale === "reread" && source.version !== void 0) {
632
- const reread = rereadStale(source, principal, principal.memberships, () => read(source, principal), auth, source.globalRolesFor === void 0 ? void 0 : () => source.globalRolesFor?.(compact({
760
+ const reread = rereadStale(source, principal, issuedAt, {
761
+ memo,
762
+ intent: options.intent ?? "write"
763
+ }, () => read(source, principal), auth, source.globalRolesFor === void 0 ? void 0 : () => source.globalRolesFor?.(compact({
633
764
  id: principal.id,
634
765
  kind: principal.kind
635
- })) ?? []);
766
+ }), { memo }) ?? []);
636
767
  memberships = reread.memberships;
637
768
  stale = reread.stale;
638
769
  roles = reread.roles;
@@ -645,78 +776,21 @@ function assemblePrincipal(policy, user, options, auth) {
645
776
  delegation: expandOAuthScopes(policy, delegation),
646
777
  session,
647
778
  expiresAt,
779
+ issuedAt,
648
780
  memberships,
649
781
  live,
650
782
  stale,
651
783
  liveSession: principal === null ? void 0 : liveSession
652
784
  });
653
785
  }
654
- function versionQuery(principal) {
655
- return compact({
656
- id: principal.id,
657
- roles: principal.roles,
658
- memberships: principal.memberships
659
- });
660
- }
661
- function rereadStale(source, principal, claims, read, auth, readRoles) {
662
- const claimed = principal.authzVersion;
663
- const judge = (current) => typeof claimed === "number" && current !== void 0 && claimed >= current ? "fresh" : "reread";
664
- const unknown = () => {
665
- auth.push({
666
- reason: "source-threw",
667
- source: "memberships",
668
- ...sourceName(source)
669
- });
670
- return "unknown";
671
- };
672
- let freshness;
673
- try {
674
- const current = source.version?.(versionQuery(principal));
675
- freshness = isThenable(current) ? Promise.resolve(current).then(judge, unknown) : judge(current);
676
- } catch {
677
- freshness = unknown();
678
- }
679
- const failed = () => {
680
- auth.push({
681
- reason: "source-threw",
682
- source: "memberships",
683
- ...sourceName(source)
684
- });
685
- return [];
686
- };
687
- const rolesOf = (found) => {
688
- if (found !== "reread" || readRoles === void 0) return;
689
- try {
690
- const roles = readRoles();
691
- return isThenable(roles) ? Promise.resolve(roles).catch(failed) : roles;
692
- } catch {
693
- return failed();
694
- }
695
- };
696
- if (isThenable(freshness)) {
697
- const settled = freshness.then((found) => ({
698
- found,
699
- roles: rolesOf(found)
700
- }));
701
- return {
702
- memberships: settled.then(({ found }) => found === "reread" ? read() : claims),
703
- stale: settled.then(({ found }) => found === "unknown"),
704
- roles: settled.then(({ roles }) => roles)
705
- };
706
- }
707
- return compact({
708
- memberships: freshness === "reread" ? read() : claims,
709
- stale: freshness === "unknown",
710
- roles: rolesOf(freshness)
711
- });
712
- }
713
786
  function finishSubject(policy, assembled, context, input, options, extra) {
714
787
  if (assembled.principal === null) return freezeCopy(compact({
715
788
  ...anonymousSubject(context),
716
789
  actor: assembled.actor,
717
790
  delegation: assembled.delegation,
718
791
  session: assembled.session,
719
- expiresAt: assembled.expiresAt
792
+ expiresAt: assembled.expiresAt,
793
+ issuedAt: assembled.issuedAt
720
794
  }));
721
795
  const scopes = scopeList(policy.scopes);
722
796
  const held = heldTenantOf(assembled.principal);
@@ -742,11 +816,15 @@ function finishSubject(policy, assembled, context, input, options, extra) {
742
816
  context: freezeCopy(context),
743
817
  session: assembled.session,
744
818
  expiresAt: assembled.expiresAt,
819
+ issuedAt: assembled.issuedAt,
745
820
  stale: extra.stale ? true : void 0,
746
821
  liveSession: assembled.liveSession
747
822
  }));
748
823
  }
749
- /** Runs the policy's membership schema over each `x`; an invalid one is dropped and reported, never the membership. */
824
+ /**
825
+ * Runs the policy's membership schema over each `x`; an invalid one is dropped
826
+ * and reported, never the membership.
827
+ */
750
828
  function checkMembershipX(memberships, schema, auth) {
751
829
  if (schema === void 0) return memberships;
752
830
  let dropped = false;
@@ -786,37 +864,6 @@ function settle(value, fallback, onError) {
786
864
  });
787
865
  return value;
788
866
  }
789
- /**
790
- * Whether the token's memberships are behind the source for `fresh`
791
- * permissions. Live memberships are never stale; token memberships are stale
792
- * unless a source reports a version the token's `authzVersion` has reached.
793
- */
794
- function staleness(policy, assembled, options, auth) {
795
- const principal = assembled.principal;
796
- if ((policy.fresh ?? []).length === 0 || principal === null || assembled.live) return false;
797
- if (assembled.stale !== void 0) return assembled.stale;
798
- const source = options.memberships === void 0 ? void 0 : asMembershipSource(options.memberships);
799
- const claimed = principal.authzVersion;
800
- if (source?.version === void 0 || typeof claimed !== "number") return true;
801
- const compare = (current) => current === void 0 || claimed < current;
802
- try {
803
- const current = source.version(versionQuery(principal));
804
- return isThenable(current) ? settle(Promise.resolve(current).then(compare), true, () => {
805
- auth.push({
806
- reason: "source-threw",
807
- source: "memberships",
808
- ...sourceName(source)
809
- });
810
- }) : compare(current);
811
- } catch {
812
- auth.push({
813
- reason: "source-threw",
814
- source: "memberships",
815
- ...sourceName(source)
816
- });
817
- return true;
818
- }
819
- }
820
867
  function cleanNames(list) {
821
868
  return Array.isArray(list) ? list.filter((item) => typeof item === "string" && item !== "") : [];
822
869
  }
@@ -870,25 +917,33 @@ function withRequestContext(request, resolved) {
870
917
  ...resolved
871
918
  };
872
919
  }
873
- function resolveSubject(policy, user, options, auth) {
874
- const first = assemblePrincipal(policy, user, options, auth);
920
+ function resolveSubject(policy, user, options, auth, memo = sourceMemo()) {
921
+ const first = assemblePrincipal(policy, user, options, auth, memo);
875
922
  const apply = (roles) => resolveAssembled(policy, roles === void 0 || first.principal === null ? first : {
876
923
  ...first,
877
924
  principal: {
878
925
  ...first.principal,
879
926
  roles
880
927
  }
881
- }, options, auth);
928
+ }, options, auth, memo);
882
929
  return isThenable(first.roles) ? Promise.resolve(first.roles).then(apply) : apply(first.roles);
883
930
  }
884
- function resolveAssembled(policy, assembled, options, auth) {
931
+ function resolveAssembled(policy, assembled, options, auth, memo) {
885
932
  const memberships = settle(assembled.memberships, [], () => {
886
933
  auth.push({
887
934
  reason: "source-threw",
888
935
  source: "memberships"
889
936
  });
890
937
  });
891
- const stale = staleness(policy, assembled, options, auth);
938
+ const stale = staleness(policy, assembled.principal, options.memberships === void 0 ? void 0 : asMembershipSource(options.memberships), {
939
+ live: assembled.live,
940
+ stale: assembled.stale,
941
+ issuedAt: assembled.issuedAt,
942
+ context: {
943
+ memo,
944
+ intent: options.intent ?? "write"
945
+ }
946
+ }, auth);
892
947
  const withPlans = (resolved) => entitlementsOf(assembled, activeTenantOf(policy, assembled, applyRoleKinds(policy, assembled.principal?.roles, normalizeMemberships(resolved, scopeList(policy.scopes))).memberships, options), options, auth);
893
948
  if (isThenable(assembled.context) || isThenable(memberships) || isThenable(stale)) return Promise.all([
894
949
  Promise.resolve(assembled.context),
@@ -913,7 +968,7 @@ function resolveAssembled(policy, assembled, options, auth) {
913
968
  }
914
969
  //#endregion
915
970
  //#region src/core/permdock.ts
916
- function instantiate(codePolicy, subject, options, auth) {
971
+ function instantiate(codePolicy, subject, options, auth, memo) {
917
972
  const { policy, errors } = options.policies?.apply(codePolicy) ?? {
918
973
  policy: codePolicy,
919
974
  errors: []
@@ -921,7 +976,7 @@ function instantiate(codePolicy, subject, options, auth) {
921
976
  const scopes = scopeList(policy.scopes);
922
977
  const tenants = tenantsOf(subject.principal, scopes);
923
978
  const roleSource = roleSourceFor(options.customRoles, subject, auth);
924
- const customRoles = customRolesFor(roleSource, tenants, auth, subject.principal === null ? void 0 : subject.principal.roles ?? [], (tenant) => heldRoleNamesIn(subject.principal, scopes, tenant));
979
+ const customRoles = customRolesFor(roleSource, tenants, auth, subject.principal === null ? void 0 : subject.principal.roles ?? [], (tenant) => heldRoleNamesIn(subject.principal, scopes, tenant), memo);
925
980
  const assignable = assignableNamesFor(roleSource, tenants, auth);
926
981
  const approvals = options.approvalPolicies?.load(policy, tenants, auth);
927
982
  const build = (roles, names, approvalPolicies) => {
@@ -950,6 +1005,7 @@ function instantiate(codePolicy, subject, options, auth) {
950
1005
  context: {}
951
1006
  }, compact({
952
1007
  tenant,
1008
+ intent: options.intent,
953
1009
  memberships: options.memberships,
954
1010
  customRoles: options.customRoles,
955
1011
  entitlements: options.entitlements,
@@ -970,15 +1026,16 @@ function instantiate(codePolicy, subject, options, auth) {
970
1026
  function create(policy, user, given) {
971
1027
  const options = withApp(policy, given);
972
1028
  const auth = [];
973
- const subject = resolveSubject(policy, user, options, auth);
974
- if (isThenable(subject)) return subject.then((resolved) => instantiate(policy, resolved, options, auth));
975
- return instantiate(policy, subject, options, auth);
1029
+ const memo = sourceMemo();
1030
+ const subject = resolveSubject(policy, user, options, auth, memo);
1031
+ if (isThenable(subject)) return subject.then((resolved) => instantiate(policy, resolved, options, auth, memo));
1032
+ return instantiate(policy, subject, options, auth, memo);
976
1033
  }
977
1034
  /**
978
1035
  * The instance for `user`, built synchronously. Every input must answer
979
1036
  * synchronously: the subject mapper, `memberships`, `customRoles`,
980
- * `entitlements`, `approvalPolicies` and the freshness check. One that
981
- * answers with a Promise throws here; use `getPermDock` for those.
1037
+ * `entitlements`, `approvalPolicies` and the freshness check. One that answers
1038
+ * with a Promise throws here; use `getPermDock` for those.
982
1039
  */
983
1040
  function getPermDockSync(policy, user, options = {}) {
984
1041
  const created = create(policy, user, options);
@@ -988,7 +1045,10 @@ function getPermDockSync(policy, user, options = {}) {
988
1045
  }
989
1046
  return created;
990
1047
  }
991
- /** The instance for `user`: waits for every source, then builds it. `getPermDockSync` is the synchronous twin. */
1048
+ /**
1049
+ * The instance for `user`: waits for every source, then builds it.
1050
+ * `getPermDockSync` is the synchronous twin.
1051
+ */
992
1052
  function getPermDock(policy, user, options = {}) {
993
1053
  return Promise.resolve().then(() => create(policy, user, options));
994
1054
  }