permdock 0.3.1 → 0.5.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 (552) hide show
  1. package/README.md +37 -35
  2. package/dist/{openapi-schema--ARjyfQr.js → 2020-C9VN-x8c.js} +5 -132
  3. package/dist/a2a/index.d.ts +8 -6
  4. package/dist/a2a/index.js +21 -31
  5. package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
  6. package/dist/adoption-scan-B4R5fnMU.js +107 -0
  7. package/dist/agent/index.d.ts +3 -0
  8. package/dist/agent/index.js +1 -0
  9. package/dist/ai-sdk/index.d.ts +18 -23
  10. package/dist/ai-sdk/index.js +38 -21
  11. package/dist/app-data-MuyzVqX8.js +60 -0
  12. package/dist/approval-header-CJACtHkv.js +23 -0
  13. package/dist/approval-prompt-Dg5LeAcT.js +62 -0
  14. package/dist/approval-prompt-Djo_PyZc.d.ts +57 -0
  15. package/dist/approvals/index.d.ts +5 -3
  16. package/dist/approvals/index.js +8 -5
  17. package/dist/approvals-DJ6Yd5z1.js +995 -0
  18. package/dist/{approvers-DT4AVyIg.js → approvers-CqPOLD-o.js} +1 -1
  19. package/dist/arazzo-B6lebmiQ.js +36 -0
  20. package/dist/{arazzo-BAgw9ap6.js → arazzo-BWhNF-k0.js} +24 -17
  21. package/dist/args-IIolxxKA.js +197 -0
  22. package/dist/astro/index.d.ts +43 -0
  23. package/dist/astro/index.js +27 -0
  24. package/dist/audience-Dg8XsRaO.js +55 -0
  25. package/dist/auth-DRLEizbL.js +178 -0
  26. package/dist/authzen/index.d.ts +26 -6
  27. package/dist/authzen/index.js +228 -75
  28. package/dist/automation-BMZPIVUM.d.ts +114 -0
  29. package/dist/automation-DVjOckjV.js +157 -0
  30. package/dist/better-auth/index.d.ts +8 -6
  31. package/dist/better-auth/index.js +11 -23
  32. package/dist/better-supabase/index.d.ts +438 -86
  33. package/dist/better-supabase/index.js +1027 -184
  34. package/dist/bind--9EFVYWF.d.ts +38 -0
  35. package/dist/{bind-CuzGytRf.js → bind-CZzhx-Vj.js} +22 -10
  36. package/dist/body-CH5of8Ne.js +10 -0
  37. package/dist/body-text-QcXok_SI.js +52 -0
  38. package/dist/build-instance-BMnAudHn.js +52 -0
  39. package/dist/{canonical-json-DemiK4Vp.js → canonical-json-BC8_nMTw.js} +6 -6
  40. package/dist/{capability-2kYTMWDv.d.ts → capability-BSslw1QV.d.ts} +44 -25
  41. package/dist/{capability-4qPdO9gk.js → capability-N1K9IpqS.js} +69 -42
  42. package/dist/casbin-Cr7RLtA3.js +30 -0
  43. package/dist/casbin-Dyu2gnUD.js +234 -0
  44. package/dist/casl-64gpT-8x.js +24 -0
  45. package/dist/casl-DjEDhTCP.js +299 -0
  46. package/dist/catalog/index.d.ts +74 -2
  47. package/dist/catalog/index.js +51 -2
  48. package/dist/catalog-BECMPrwc.js +100 -0
  49. package/dist/catalog-DjhMYYCq.js +1 -0
  50. package/dist/catalog-R_A__RsH.js +52 -0
  51. package/dist/{catalog-doc-DdGm82XT.js → catalog-doc-C9wjsfNY.js} +54 -25
  52. package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
  53. package/dist/chat/index.d.ts +2 -0
  54. package/dist/chat/index.js +224 -0
  55. package/dist/chat-sdk/index.d.ts +87 -0
  56. package/dist/chat-sdk/index.js +197 -0
  57. package/dist/claims-map-7oQ3ue4X.js +13 -0
  58. package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
  59. package/dist/claude-agent/index.d.ts +7 -14
  60. package/dist/claude-agent/index.js +26 -30
  61. package/dist/clerk/index.d.ts +9 -8
  62. package/dist/clerk/index.js +15 -45
  63. package/dist/cli/bin.js +36 -17
  64. package/dist/cli/index.d.ts +20 -6
  65. package/dist/cli/index.js +164 -4
  66. package/dist/cloud/index.d.ts +102 -63
  67. package/dist/cloud/index.js +240 -347
  68. package/dist/cloud-CIoHNevm.js +87 -0
  69. package/dist/codemod-Bmj9dWMH.js +37 -0
  70. package/dist/codemod-Cxvvc70T.js +2084 -0
  71. package/dist/{collect-DSTE3ml9.js → collect-CrZJJnEF.js} +79 -17
  72. package/dist/collect-DloHbDVa.js +55 -0
  73. package/dist/collect-FlXJlhus.js +1 -0
  74. package/dist/command-L8EstFNm.js +6 -0
  75. package/dist/{compact-y6vfu2_f.js → compact-CAf557ZB.js} +11 -1
  76. package/dist/compile/index.d.ts +1 -1
  77. package/dist/compile/index.js +1 -2
  78. package/dist/{compile-Ba4blROR.js → compile-CMqMx_IN.js} +13 -9
  79. package/dist/{compile-BkRyBDBw.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
  80. package/dist/completion-BqhRBJD8.js +143 -0
  81. package/dist/config-B46rm9sc.js +26 -0
  82. package/dist/{config-BJiM-xAm.js → config-bs_kZeYq.js} +15 -10
  83. package/dist/{config-report-CdCgbRnV.js → config-report-DUgj62Ai.js} +17 -8
  84. package/dist/{connection-CU8MQxRi.js → connection-DjhIJSs2.js} +8 -6
  85. package/dist/constants-DcJABbLW.js +20 -0
  86. package/dist/{context-Bcy85rGi.js → context-bbFHR-0D.js} +16 -5
  87. package/dist/convex/index.d.ts +11 -10
  88. package/dist/convex/index.js +18 -18
  89. package/dist/create-0VZ7Pdiu.d.ts +107 -0
  90. package/dist/create-BDS7wc3y.d.ts +138 -0
  91. package/dist/create-BFfm17UA.d.ts +110 -0
  92. package/dist/create-BWRSXgOF.js +403 -0
  93. package/dist/create-C3b4B5eF.js +130 -0
  94. package/dist/create-DnrmLnLW.js +323 -0
  95. package/dist/{credential-8P81ff4u.js → credential-DM2um3ha.js} +153 -32
  96. package/dist/credentials-DPyHmYz5.js +74 -0
  97. package/dist/deciding-columns-Sq12mEA6.js +123 -0
  98. package/dist/delegation-DaXVdDhM.js +286 -0
  99. package/dist/delegation-input-FTxMK3ji.js +19 -0
  100. package/dist/delivery/index.d.ts +5 -0
  101. package/dist/delivery/index.js +5 -0
  102. package/dist/delivery-DCAgNyCn.js +499 -0
  103. package/dist/delivery-event-xX4obB8F.js +40 -0
  104. package/dist/denied-text-D8jDHgsl.d.ts +19 -0
  105. package/dist/{describe-DMYiCjJV.d.ts → describe-BZUsixiL.d.ts} +11 -2
  106. package/dist/{describe-B_gVZEVi.js → describe-BybMRY7A.js} +10 -5
  107. package/dist/device-BARQ8eYG.js +193 -0
  108. package/dist/diff-CxZo9pTq.js +37 -0
  109. package/dist/{diff-2VaeChzX.js → diff-DCePiN6M.js} +61 -55
  110. package/dist/doctor-CxiwSfqH.js +44 -0
  111. package/dist/doctor-DFjUxf2f.js +2361 -0
  112. package/dist/drizzle/index.d.ts +5 -3
  113. package/dist/drizzle/index.js +6 -14
  114. package/dist/elysia/index.d.ts +16 -13
  115. package/dist/elysia/index.js +14 -13
  116. package/dist/env-DJZrPjRi.js +8 -0
  117. package/dist/errors-BDUwg2qC.js +27 -0
  118. package/dist/{errors-Cz5zn0mW.js → errors-BKy0EfhN.js} +6 -10
  119. package/dist/errors-BWXBMaKK.d.ts +11 -0
  120. package/dist/{errors-DPdqI50v.d.ts → errors-C2PXIv4c.d.ts} +2 -2
  121. package/dist/errors-CWTY6uih.js +143 -0
  122. package/dist/evaluate-_R8QkWaf.js +1732 -0
  123. package/dist/evaluations-16UqqQ6W.d.ts +32 -0
  124. package/dist/{evaluations-tz6D9A2G.js → evaluations-DZ2CbV5k.js} +181 -32
  125. package/dist/eve/index.d.ts +12 -16
  126. package/dist/eve/index.js +23 -29
  127. package/dist/event-time-CsegxXxB.js +23 -0
  128. package/dist/expiry-D4_YKRKD.js +52 -0
  129. package/dist/express/index.d.ts +13 -10
  130. package/dist/express/index.js +14 -12
  131. package/dist/fastify/index.d.ts +26 -13
  132. package/dist/fastify/index.js +17 -36
  133. package/dist/fetch-adapter-g0ypLkID.js +120 -0
  134. package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
  135. package/dist/fields-D9tPVUUS.js +203 -0
  136. package/dist/files-C5ZI27eV.js +124 -0
  137. package/dist/{files-DWUN9PzI.js → files-D_JIzUrP.js} +12 -3
  138. package/dist/{fixtures-ht28Cplr.js → fixtures-B7XrLeY7.js} +12 -12
  139. package/dist/flags-C3DktBDY.js +86 -0
  140. package/dist/{from-snapshot-CTLijvdm.js → from-snapshot-D2lZt4Dd.js} +78 -65
  141. package/dist/{generate-CH7ThJ14.js → generate-CNU1pIOo.js} +1 -3
  142. package/dist/grantee-Cn1HyUsI.js +254 -0
  143. package/dist/grantee-conditions-CcXf8hMM.js +271 -0
  144. package/dist/grantee-match-DHArqY82.js +142 -0
  145. package/dist/h3/index.d.ts +37 -0
  146. package/dist/h3/index.js +35 -0
  147. package/dist/headers-BIjfMaoC.js +8 -0
  148. package/dist/headers-CIbDTUTK.d.ts +7 -0
  149. package/dist/{helpers-H_KARDVC.js → helpers-DTcZOzhF.js} +47 -39
  150. package/dist/hono/index.d.ts +12 -9
  151. package/dist/hono/index.js +14 -13
  152. package/dist/{hosted-DJQw46hn.js → hosted-BZIAYvon.js} +64 -15
  153. package/dist/hosted-DBDX0M-P.d.ts +78 -0
  154. package/dist/{http-SO7qGttf.js → http-BBoKefeS.js} +35 -2
  155. package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
  156. package/dist/http-DXJ37RDA.js +46 -0
  157. package/dist/{http-BIhmLfCc.js → http-ujKm0JXE.js} +3 -26
  158. package/dist/{openapi-import-cmwetbzw.js → import-CNV7I2Dw.js} +30 -26
  159. package/dist/{rls-import-4lLW_pbb.js → import-DMmOG27O.js} +271 -128
  160. package/dist/index-BcHcPyIo.d.ts +110 -0
  161. package/dist/index-CaxrMD1A.d.ts +1 -0
  162. package/dist/index-Chrs5fQ-.d.ts +210 -0
  163. package/dist/index-CxGUswIC.d.ts +431 -0
  164. package/dist/index-D8EovfsP.d.ts +91 -0
  165. package/dist/index-DOVf7RJv.d.ts +900 -0
  166. package/dist/{index-C8z4RjQV.d.ts → index-SGdIQyzc.d.ts} +34 -16
  167. package/dist/index.d.ts +20 -14
  168. package/dist/index.js +33 -23
  169. package/dist/init-DeMYsnYJ.js +96 -0
  170. package/dist/init-GG6Jh8HD.js +95 -0
  171. package/dist/{instance-options-jARdwfPN.d.ts → instance-options-Omfd793B.d.ts} +2 -2
  172. package/dist/instance-snapshot-Cxq4ygFc.js +600 -0
  173. package/dist/instant-BluqDvyS.js +19 -0
  174. package/dist/internals-Dk8A8fX3.js +17 -0
  175. package/dist/{json-schema-BsAflUGW.js → json-schema-B-vAwlde.js} +46 -9
  176. package/dist/json-schema-CN_iLFH2.d.ts +40 -0
  177. package/dist/jwt/index.d.ts +18 -11
  178. package/dist/jwt/index.js +166 -145
  179. package/dist/{kernel-_RRHmnMY.js → kernel-5JatXyND.js} +120 -43
  180. package/dist/kysely/index.d.ts +5 -3
  181. package/dist/kysely/index.js +6 -14
  182. package/dist/{live-options-H2eG8dfJ.js → live-options-BaAFCIiu.js} +16 -3
  183. package/dist/load-BxEtwlBS.js +1 -0
  184. package/dist/{load-DhWEB9P1.js → load-DFS_ry0W.js} +31 -7
  185. package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
  186. package/dist/login-Dfe5RlYk.js +68 -0
  187. package/dist/login-imhuwvn3.js +254 -0
  188. package/dist/manifest-C8IzW3Do.js +42 -0
  189. package/dist/manifest-CtKR3GXL.js +370 -0
  190. package/dist/manifest-json-CAGzls-C.js +9 -0
  191. package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
  192. package/dist/manifest-schema-C0kK_8V0.js +399 -0
  193. package/dist/{map-claims-Z4QZOiFF.js → map-claims-D3oRmTk0.js} +19 -25
  194. package/dist/{map-error-pgUWNNtG.js → map-error-TCAdw-eW.js} +5 -5
  195. package/dist/{markers-B0hYLvMD.js → markers-C6joDI3o.js} +8 -3
  196. package/dist/mcp/index.d.ts +36 -9
  197. package/dist/mcp/index.js +476 -448
  198. package/dist/{rls-migrate-CN4TlJTO.js → migrate-BShP7Vf4.js} +119 -20
  199. package/dist/nest/index.d.ts +12 -9
  200. package/dist/nest/index.js +20 -20
  201. package/dist/next/index.d.ts +40 -20
  202. package/dist/next/index.js +37 -39
  203. package/dist/next/plugin.d.ts +1 -1
  204. package/dist/next/plugin.js +2 -2
  205. package/dist/node/index.d.ts +10 -10
  206. package/dist/node/index.js +7 -9
  207. package/dist/ocsf-BFp-PZZA.js +126 -0
  208. package/dist/openai/index.d.ts +9 -16
  209. package/dist/openai/index.js +18 -25
  210. package/dist/openapi/index.d.ts +3 -3
  211. package/dist/openapi/index.js +1 -1
  212. package/dist/{openapi-BqRBvAng.js → openapi-B7HZ0f-r.js} +9 -12
  213. package/dist/{openapi-CqqEbHsL.js → openapi-DTaEmTSW.js} +23 -26
  214. package/dist/openapi-ahr8rHu3.js +138 -0
  215. package/dist/operation-findings-DgATDpvh.js +36 -0
  216. package/dist/operations-CxybZErY.d.ts +59 -0
  217. package/dist/orpc/index.d.ts +13 -10
  218. package/dist/orpc/index.js +23 -20
  219. package/dist/otel/index.d.ts +3 -2
  220. package/dist/otel/index.js +53 -27
  221. package/dist/output-Dyw8fyPF.js +88 -0
  222. package/dist/output-files-B3IZJksC.js +1 -0
  223. package/dist/output-files-DhRBBE4n.js +138 -0
  224. package/dist/{rls-fields-CZOMlwHl.js → ownership-BatFgAA4.js} +2393 -2349
  225. package/dist/{package-root-zGkxO3oN.js → package-root-Dk_ETdkp.js} +4 -3
  226. package/dist/{parse-BuyjxhZV.js → parse-Cxq0WxrA.js} +3 -3
  227. package/dist/{parse-local-manifest-BrMozJCo.js → parse-local-manifest-CVSs6J9I.js} +2 -4
  228. package/dist/{parse-local-manifest-JLnaBH0S.d.ts → parse-local-manifest-DgqtruPn.d.ts} +1 -1
  229. package/dist/parse-request-D_tUXG6M.js +26 -0
  230. package/dist/paths-DXSHAMIa.js +42 -0
  231. package/dist/pdp/index.d.ts +7 -3
  232. package/dist/pdp/index.js +47 -29
  233. package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
  234. package/dist/peer-CRvC7Hg1.js +1 -0
  235. package/dist/permdock-B9JxkBwC.js +868 -0
  236. package/dist/permdock-D7eeLJER.d.ts +502 -0
  237. package/dist/permission-registry-Br4jSNVi.js +385 -0
  238. package/dist/permissions-B-wCP5ZC.js +30 -0
  239. package/dist/{permissions-RJrovw98.js → permissions-CZKiUfFM.js} +4 -3
  240. package/dist/{permissions-CDgvKG5L.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
  241. package/dist/policies-CO1oOymN.js +295 -0
  242. package/dist/{policy-D2W7uv19.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
  243. package/dist/policy-DLZJ5gAp.js +399 -0
  244. package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
  245. package/dist/policy-module-CTlwMvLI.js +89 -0
  246. package/dist/{policy-IB6yxpC3.d.ts → policy-types-DzwivBgR.d.ts} +939 -1057
  247. package/dist/postgrest-CW0IqC-U.js +566 -0
  248. package/dist/postgrest-NUqZT-RB.d.ts +100 -0
  249. package/dist/powersync-BHfuehf3.js +62 -0
  250. package/dist/powersync-CbzkqL_M.js +1 -0
  251. package/dist/{powersync-Dv1_aWF7.js → powersync-bYUDLOAO.js} +30 -32
  252. package/dist/preset/index.d.ts +146 -0
  253. package/dist/preset/index.js +1 -0
  254. package/dist/preset-DZdU0tne.js +1768 -0
  255. package/dist/principal-source-pHneukrx.js +103 -0
  256. package/dist/prisma/index.d.ts +6 -3
  257. package/dist/prisma/index.js +6 -12
  258. package/dist/{problem-B43ztKIm.js → problem-CTviyH5L.js} +18 -27
  259. package/dist/{problem-details-DX075l9V.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
  260. package/dist/{problem-details-_AMOYz-w.js → problem-details-cn5X30gZ.js} +45 -42
  261. package/dist/problem-types-CJ2325SZ.js +5 -0
  262. package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
  263. package/dist/protected-DEPHc2xV.d.ts +38 -0
  264. package/dist/{protected-utU-SLuy.js → protected-DfjY5mLA.js} +37 -8
  265. package/dist/{provider-CSQd7m92.js → provider-CC-u3bYP.js} +23 -10
  266. package/dist/{provider-DZY281jO.d.ts → provider-DMVt6yYn.d.ts} +1 -1
  267. package/dist/{provider-store-Cfbvo4DE.js → provider-store-B5Yrkhzr.js} +6 -3
  268. package/dist/pull-BgIfno6w.js +256 -0
  269. package/dist/pull-ByOks_Tg.js +1 -0
  270. package/dist/push-CmFVBOeI.js +116 -0
  271. package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
  272. package/dist/pushed-policy-DobP7AHI.js +238 -0
  273. package/dist/react/index.d.ts +8 -8
  274. package/dist/react/index.js +6 -6
  275. package/dist/react/provider-client.d.ts +1 -1
  276. package/dist/react/provider-client.js +1 -2
  277. package/dist/react-native/index.d.ts +24 -63
  278. package/dist/react-native/index.js +45 -27
  279. package/dist/{refs-KYb4ntaz.js → refs-K6eWUJ0H.js} +1 -1
  280. package/dist/relation-walk-3OyDBF0S.js +186 -0
  281. package/dist/relations-BnCWnJGI.js +163 -0
  282. package/dist/renames-CGj7YwcQ.js +175 -0
  283. package/dist/{replay-CYyiLiwO.d.ts → replay-D7iKcLFe.d.ts} +1 -1
  284. package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
  285. package/dist/request-context-BTRTG7OT.js +71 -0
  286. package/dist/request-context-C2_1lchh.d.ts +5 -0
  287. package/dist/request-schema-CMreVuFM.js +148 -0
  288. package/dist/resend/index.d.ts +126 -0
  289. package/dist/resend/index.js +379 -0
  290. package/dist/resource-relations-D_jw0BFx.js +243 -0
  291. package/dist/retire-CALjIQ7e.js +240 -0
  292. package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
  293. package/dist/rls-BA8an5Ap.js +336 -0
  294. package/dist/{rls-DiinlRML.js → rls-j6t43t7n.js} +1066 -1068
  295. package/dist/role-builder-CXbis5-X.js +623 -0
  296. package/dist/{rpc-DL9Sqvb1.js → rpc-aPyNi6tA.js} +18 -8
  297. package/dist/run-CNsApDpd.js +1 -0
  298. package/dist/run-DOfMtc9V.js +723 -0
  299. package/dist/run-ticket-BjhTOi6u.d.ts +124 -0
  300. package/dist/run-ticket-sxFI6LAk.js +337 -0
  301. package/dist/{runtime-CB8gQFvS.js → runtime-D3VTAiCA.js} +1 -1
  302. package/dist/{saas-DhpJjnBA.js → saas-FO-Q8oj0.js} +18 -15
  303. package/dist/scan-BOI5tJ-6.js +29 -0
  304. package/dist/{schema-D3MnDMxa.js → schema-B4v0Qrac.js} +106 -10
  305. package/dist/schema-yLuBWWsh.js +130 -0
  306. package/dist/scim/index.d.ts +2 -2
  307. package/dist/scim/index.js +1 -2
  308. package/dist/{scim-BFGBBAqR.js → scim-ClHtpyV3.js} +213 -87
  309. package/dist/{scopes-CVdPrWN-.js → scopes-CUPSjo9q.js} +20 -7
  310. package/dist/server/index.d.ts +13 -134
  311. package/dist/server/index.js +13 -10
  312. package/dist/server-DqCT4CgZ.js +453 -0
  313. package/dist/{create-B1d519XK.d.ts → server-types-BLd4MnBX.d.ts} +89 -70
  314. package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
  315. package/dist/shared-CD11nBbC.js +304 -0
  316. package/dist/{shared-DRu8VFVM.js → shared-DvvFzYXe.js} +8 -9
  317. package/dist/signals-D3NcTKUS.js +32 -0
  318. package/dist/sink-BEZSlMS_.js +957 -0
  319. package/dist/sink-Bj_lDUDq.d.ts +225 -0
  320. package/dist/{skills-Biq5uup3.js → skills-B6lVdD_W.js} +16 -8
  321. package/dist/skills-CTYwkl44.js +51 -0
  322. package/dist/snapshot-CXUWfsNy.js +269 -0
  323. package/dist/{snapshot-cache-D6jLelln.js → snapshot-cache-DZHQ0KF6.js} +11 -5
  324. package/dist/{snapshot-cache-B-LxUahj.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
  325. package/dist/solid/index.d.ts +24 -25
  326. package/dist/solid/index.js +41 -11
  327. package/dist/solid-start/index.d.ts +52 -0
  328. package/dist/solid-start/index.js +49 -0
  329. package/dist/{sources-BdOYLw9j.d.ts → sources-BV9j0DeZ.d.ts} +11 -13
  330. package/dist/{sources-4p0-4xQm.js → sources-vs5dGOsS.js} +147 -142
  331. package/dist/sql-B5T1IL83.js +55 -0
  332. package/dist/src-DLfUWFAI.js +1851 -0
  333. package/dist/ssf/index.d.ts +4 -4
  334. package/dist/ssf/index.js +440 -106
  335. package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
  336. package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
  337. package/dist/storage-C2bWdvJH.js +132 -0
  338. package/dist/{store-DMAWwAJV.js → store-4u_hxjWa.js} +42 -55
  339. package/dist/{store-options-ByhZq1jV.js → store-options-BqEakYRa.js} +38 -24
  340. package/dist/{stores-BT2pSCub.js → stores-BbsD4fAR.js} +7 -3
  341. package/dist/stores-ClZUgeoP.d.ts +30 -0
  342. package/dist/{stream-D1RXubw2.d.ts → stream-7-xmnf3U.d.ts} +2 -2
  343. package/dist/{stream-DDpvynSB.js → stream-CvdUS9V1.js} +10 -2
  344. package/dist/style-DiKWnAvn.js +1 -0
  345. package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
  346. package/dist/subject-BGoM5o8B.js +17 -0
  347. package/dist/{subject-settings-BwBmCdTR.js → subject-settings-CkEwrw3W.js} +23 -5
  348. package/dist/supabase/index.d.ts +23 -106
  349. package/dist/supabase/index.js +5 -4
  350. package/dist/supabase/middleware.d.ts +13 -6
  351. package/dist/supabase/middleware.js +16 -11
  352. package/dist/supabase-9pqI57pW.js +92 -0
  353. package/dist/{supabase-C0qESOa-.js → supabase-Dxlp8A94.js} +124 -247
  354. package/dist/supabase-hook-CXcGpHqq.js +1 -0
  355. package/dist/{supabase-hook-ntETYCQu.js → supabase-hook-DdDQhMlw.js} +1659 -819
  356. package/dist/{supautils-u8jXTGrt.js → supautils-B6HYL9eL.js} +2 -2
  357. package/dist/support-session-C6xJQYut.js +158 -0
  358. package/dist/svelte/Protected.svelte +11 -4
  359. package/dist/svelte/index.d.ts +7 -7
  360. package/dist/svelte/index.js +26 -12
  361. package/dist/svelte/runtime.d.ts +10 -3
  362. package/dist/svelte/runtime.js +4 -3
  363. package/dist/svelte/source.d.ts +7 -7
  364. package/dist/svelte/source.js +5 -5
  365. package/dist/sveltekit/index.d.ts +51 -0
  366. package/dist/sveltekit/index.js +27 -0
  367. package/dist/tanstack-start/index.d.ts +51 -0
  368. package/dist/tanstack-start/index.js +40 -0
  369. package/dist/target-Bw37TFNA.js +51 -0
  370. package/dist/{validity-uOp8UpYn.js → tenancy-DN2QAx9z.js} +6 -42
  371. package/dist/terminal/index.d.ts +11 -9
  372. package/dist/terminal/index.js +36 -316
  373. package/dist/testing/index.d.ts +391 -106
  374. package/dist/testing/index.js +4574 -1286
  375. package/dist/testing/saas/index.d.ts +9 -8
  376. package/dist/testing/saas/index.js +2 -2
  377. package/dist/testing/saas/permissions.d.ts +1 -1
  378. package/dist/testing/saas/permissions.js +1 -2
  379. package/dist/text-BMFRfBqc.js +8 -0
  380. package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
  381. package/dist/thenable-yD7SabqG.js +31 -0
  382. package/dist/time-DkWjdL98.js +71 -0
  383. package/dist/{token-CIWxJOCh.js → token-BLZcjQgt.js} +15 -6
  384. package/dist/tool-refusal-CMLN5xhn.js +41 -0
  385. package/dist/trpc/index.d.ts +12 -9
  386. package/dist/trpc/index.js +18 -17
  387. package/dist/{types-DbjRN55U.d.ts → types-5Ut_pbKy.d.ts} +141 -13
  388. package/dist/types-BNORmDM8.d.ts +172 -0
  389. package/dist/types-BjV-fqcA.d.ts +57 -0
  390. package/dist/{types-QCuYJh4q.d.ts → types-BqAKcRNW.d.ts} +2 -1
  391. package/dist/types-C8-KNsFf.d.ts +107 -0
  392. package/dist/{types-aqOHTHcp.d.ts → types-CCpc2Dcv.d.ts} +77 -17
  393. package/dist/{types-Dnemwd77.d.ts → types-CZTnPFzM.d.ts} +50 -11
  394. package/dist/{types-C97IskBw.d.ts → types-CdlxsYQh.d.ts} +23 -11
  395. package/dist/{types-DxiCGmmd.d.ts → types-ClZaWzfb.d.ts} +9 -6
  396. package/dist/types-DX0LaKTb.d.ts +157 -0
  397. package/dist/types-DiQjupG2.d.ts +332 -0
  398. package/dist/types-DqzsnlSA.js +67 -0
  399. package/dist/types-_sHy8BQf.d.ts +65 -0
  400. package/dist/types-fbZ7JEXr.d.ts +89 -0
  401. package/dist/types-tIgIeIKJ.d.ts +66 -0
  402. package/dist/unplugin/index.d.ts +1 -1
  403. package/dist/unplugin/index.js +2 -2
  404. package/dist/usage-CHOtwL19.js +1 -0
  405. package/dist/usage-DHtE8j4E.js +32 -0
  406. package/dist/{usage-ItS7nLcl.js → usage-T5mXq98v.js} +56 -13
  407. package/dist/{validation-error-Ba264OaJ.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
  408. package/dist/{validation-error-CnjZ4t92.js → validation-error-ZfUHbKvf.js} +1 -1
  409. package/dist/validity-CZ7-y0Cj.js +79 -0
  410. package/dist/{verifier-BxBo6I44.js → verifier-DHuh-okk.js} +68 -21
  411. package/dist/verify-DbCL9bnB.js +1770 -0
  412. package/dist/{version-BvacVTZR.js → version-CEbQ5UeM.js} +4 -3
  413. package/dist/version-DXkYUISx.js +1 -0
  414. package/dist/{views-Soe7bGSC.js → views-DTIIO-oQ.js} +41 -2
  415. package/dist/{permissions-DttnqqxC.d.ts → vocabulary-D6lPdb4Z.d.ts} +120 -29
  416. package/dist/vue/index.d.ts +25 -21
  417. package/dist/vue/index.js +25 -9
  418. package/dist/waiter-BGUtGYoU.js +67 -0
  419. package/dist/waiter-CKy4MQSY.d.ts +36 -0
  420. package/dist/watch-Cb-NcaUw.js +1 -0
  421. package/dist/{watch-DVBJ9cBq.js → watch-CszoTJMq.js} +47 -8
  422. package/dist/webmcp/index.d.ts +2 -2
  423. package/dist/webmcp/index.js +13 -37
  424. package/dist/where-scope-Dv-WTP-w.js +306 -0
  425. package/dist/who-can-D0QoYbEb.js +364 -0
  426. package/dist/wire-delegation-Cv3W2eaM.js +36 -0
  427. package/dist/wire-denial-C7PaVYEM.js +27 -0
  428. package/dist/workflow/index.d.ts +5 -0
  429. package/dist/workflow/index.js +223 -0
  430. package/dist/workflow-sdk/index.d.ts +56 -0
  431. package/dist/workflow-sdk/index.js +78 -0
  432. package/dist/wrap-Bd1Tejur.d.ts +15 -0
  433. package/dist/wrap-gX61EtpB.js +27 -0
  434. package/package.json +140 -41
  435. package/schemas/access-event-v1.json +118 -0
  436. package/schemas/approval-request-v1.json +34 -1
  437. package/schemas/approval-signature-v1.json +94 -0
  438. package/schemas/automation-event-v1.json +113 -0
  439. package/schemas/capability-v1.json +84 -0
  440. package/schemas/catalog-event-v1.json +87 -0
  441. package/schemas/catalog-v1.json +129 -12
  442. package/schemas/cli-commands-v1.json +164 -0
  443. package/schemas/cli-result-v1.json +96 -0
  444. package/schemas/cloud-api-v1.json +5407 -0
  445. package/schemas/connector-v1.json +408 -0
  446. package/schemas/credential-event-v1.json +81 -0
  447. package/schemas/credential-v1.json +134 -0
  448. package/schemas/decision-event-v1.json +288 -0
  449. package/schemas/delivery-event-v1.json +117 -0
  450. package/schemas/directory-event-v1.json +85 -0
  451. package/schemas/evidence-export-v1.json +54 -0
  452. package/schemas/membership-event-v1.json +93 -0
  453. package/schemas/policy-v1.json +68 -0
  454. package/schemas/pushed-policy-v1.json +236 -0
  455. package/schemas/run-v1.json +162 -0
  456. package/schemas/snapshot-v1.json +138 -0
  457. package/schemas/supabase-claims-v1.json +4 -4
  458. package/schemas/supabase-manifest-v1.json +5 -1
  459. package/schemas/support-session-v1.json +111 -0
  460. package/skills/permdock/SKILL.md +16 -12
  461. package/skills/permdock-agents/SKILL.md +40 -23
  462. package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
  463. package/skills/permdock-agents/references/runtimes.md +22 -18
  464. package/skills/permdock-approvals/SKILL.md +29 -13
  465. package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
  466. package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
  467. package/skills/permdock-audit/SKILL.md +3 -3
  468. package/skills/permdock-credentials/SKILL.md +5 -5
  469. package/skills/permdock-credentials/references/tokens-keys-links.md +19 -10
  470. package/skills/permdock-data/SKILL.md +6 -6
  471. package/skills/permdock-data/references/queries-and-rls.md +13 -8
  472. package/skills/permdock-data/references/relationships.md +3 -3
  473. package/skills/permdock-tenancy/SKILL.md +20 -7
  474. package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
  475. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
  476. package/skills/permdock-wire/SKILL.md +18 -12
  477. package/skills/permdock-wire/references/adapters.md +146 -50
  478. package/skills/permdock-wire/references/policy-options.md +15 -6
  479. package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
  480. package/dist/approvals-DbYAuNkG.js +0 -224
  481. package/dist/arazzo-C9chp3ST.js +0 -54
  482. package/dist/bind-C_ob3LKa.d.ts +0 -25
  483. package/dist/catalog-CRW5Mx_B.js +0 -2
  484. package/dist/catalog-CYj-mX2O.js +0 -48
  485. package/dist/catalog-DWF5cYqB.js +0 -55
  486. package/dist/cloud-CfwZ39Rl.js +0 -50
  487. package/dist/cloud-DWLXO2af.js +0 -118
  488. package/dist/collect-CHB22Sx4.js +0 -83
  489. package/dist/collect-DSWOk19R.js +0 -2
  490. package/dist/commands-BeaGNj_o.js +0 -97
  491. package/dist/config-ir40y8m0.js +0 -36
  492. package/dist/create-CMwIl-w2.js +0 -253
  493. package/dist/delegation-D8pUEuce.js +0 -103
  494. package/dist/diff-C9RDjjhs.js +0 -48
  495. package/dist/doctor-Djh6JDEk.js +0 -53
  496. package/dist/doctor-DvH0IQff.js +0 -1194
  497. package/dist/doctor-collect-CjdO0wQX.js +0 -665
  498. package/dist/duration-xK2jGFVc.js +0 -25
  499. package/dist/errors-CWfoNg9N.js +0 -47
  500. package/dist/errors-DRnGZHzF.js +0 -30
  501. package/dist/evaluation-items-CfCCejQd.js +0 -40
  502. package/dist/expiry-BoBJ8Tvc.js +0 -7
  503. package/dist/fields-BMl1RxoX.js +0 -26
  504. package/dist/grantee-Cv5Sogfv.js +0 -602
  505. package/dist/headers-BZSDieNT.js +0 -6
  506. package/dist/headers-Cf-zWvsO.d.ts +0 -6
  507. package/dist/ids-DC4V4CFu.js +0 -18
  508. package/dist/index-0nNqHspG.d.ts +0 -6
  509. package/dist/index-BNc7Wer_.d.ts +0 -483
  510. package/dist/index-C7Tw7MaW.d.ts +0 -201
  511. package/dist/instance-options-Dhhcnm3y.js +0 -22
  512. package/dist/load-DwJUafYN.js +0 -2
  513. package/dist/manifest-iaoBXHKc.js +0 -783
  514. package/dist/map-AcxK9o_D.js +0 -147
  515. package/dist/may-use-DndQ5tQ-.js +0 -77
  516. package/dist/openapi-CQTsgKoB.js +0 -164
  517. package/dist/permdock-CbgvLnuo.js +0 -3479
  518. package/dist/permissions-DVoF6dMt.js +0 -662
  519. package/dist/policy-xyWg7QdR.js +0 -1122
  520. package/dist/powersync-CrBX8hY6.js +0 -2
  521. package/dist/powersync-DE19b9dT.js +0 -62
  522. package/dist/protected-BdnIEFkY.d.ts +0 -27
  523. package/dist/protected-xAr24FEC.d.ts +0 -40
  524. package/dist/relations-cjOL01hZ.js +0 -505
  525. package/dist/rls-P-BeBx0n.js +0 -238
  526. package/dist/rls-graph-CHwx0V8q.js +0 -435
  527. package/dist/rls-ownership-DcYlZ09B.js +0 -843
  528. package/dist/rls-shared-Cewd_-zI.js +0 -495
  529. package/dist/rls-verify-CMv9H3wV.js +0 -746
  530. package/dist/run-BWc9qqvE.js +0 -174
  531. package/dist/server-DlZ28Oz5.js +0 -268
  532. package/dist/sink-B1fZzIMf.d.ts +0 -104
  533. package/dist/sink-Bd9PSyfq.js +0 -141
  534. package/dist/skills-C5CbhhpG.js +0 -56
  535. package/dist/snapshot-Enxd0n-s.js +0 -975
  536. package/dist/sql-xdg5f4Fi.js +0 -27
  537. package/dist/src-BDwEZWrZ.js +0 -568
  538. package/dist/store-jOBYpiXC.d.ts +0 -36
  539. package/dist/stores-C0IMQrGI.d.ts +0 -52
  540. package/dist/subject-C6dLxqHU.js +0 -24
  541. package/dist/supabase-config-Bj3iDH2I.js +0 -472
  542. package/dist/supabase-hook-gd3s8bxB.js +0 -2
  543. package/dist/supabase-s4o9s1O1.js +0 -83
  544. package/dist/thenable-okc2xDsj.js +0 -10
  545. package/dist/types-BnIEz1sU.d.ts +0 -48
  546. package/dist/types-Bvc4oWT6.d.ts +0 -9
  547. package/dist/types-CKNSyIf_.d.ts +0 -52
  548. package/dist/types-Cq_H8N_X.d.ts +0 -197
  549. package/dist/usage-B0YuTQRO.js +0 -42
  550. package/dist/usage-DorAJiU_.js +0 -2
  551. package/dist/vocabulary-DA8a8zif.d.ts +0 -56
  552. package/dist/watch-BwxLTYMZ.js +0 -2
@@ -0,0 +1,868 @@
1
+ import { n as isReadonlyArray, 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 { a as getResource, c as listPermissions, g as formerScopes } from "./permission-registry-Br4jSNVi.js";
7
+ import { n as isThenable } from "./thenable-yD7SabqG.js";
8
+ import { i as readAppData } from "./app-data-MuyzVqX8.js";
9
+ import { a as normalizeMemberships, d as scopeList, m as tenantOf } from "./scopes-CUPSjo9q.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-DN2QAx9z.js";
12
+ import { l as policyX } from "./policy-DLZJ5gAp.js";
13
+ import { A as isContact, C as emptyListeners, S as emitSafe, i as customRolesFor, k as contactMemberships, o as roleSourceFor, r as assignableNamesFor, s as sourceName, t as evaluate, u as customGrantsFor, w as finish } from "./evaluate-_R8QkWaf.js";
14
+ 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-Cxq4ygFc.js";
15
+ import { r as relationReader, t as pendingRelations } from "./relations-BnCWnJGI.js";
16
+ import { r as snapshotGrant } from "./snapshot-CXUWfsNy.js";
17
+ import { i as decideForTarget, n as mayUse, o as signSnapshot, r as permittedIds, t as whereFromGrants } from "./where-scope-Dv-WTP-w.js";
18
+ import { r as isSubject, t as anonymousSubject } from "./subject-BGoM5o8B.js";
19
+ //#region src/core/app.ts
20
+ const APP = Symbol.for("permdock.app");
21
+ /** The app definition bound to `policy` by `defineApp`, or `undefined` for a plain policy. */
22
+ function appOf(policy) {
23
+ const value = Reflect.get(policy, APP);
24
+ return value === void 0 ? void 0 : value;
25
+ }
26
+ /**
27
+ * `options` with the app's values under it, key by key, for an adapter
28
+ * factory to call first: `options = withApp(policy, options)`.
29
+ */
30
+ function withApp(policy, options) {
31
+ const app = appOf(policy);
32
+ if (app === void 0) return options;
33
+ const { profile: _profile, ...values } = app;
34
+ const merged = { ...values };
35
+ for (const [key, value] of Object.entries(options)) if (value !== void 0) merged[key] = value;
36
+ return merged;
37
+ }
38
+ //#endregion
39
+ //#region src/core/assert-decision.ts
40
+ /** `assert`'s outcome: the granted decision, or the error a refusal throws after `onDenied` runs. */
41
+ function assertDecision(policy, subject, permission, data, decision, onDenied) {
42
+ if (decision.outcome === "granted") return decision;
43
+ if (onDenied !== void 0) onDenied(decision);
44
+ const resource = getResource(policy.permissions, permission.resource);
45
+ const resourceId = data !== null && typeof data === "object" ? data[resource?.id ?? "id"] : void 0;
46
+ const resourceRef = compact({
47
+ type: permission.resource,
48
+ id: resourceId === void 0 ? void 0 : String(resourceId)
49
+ });
50
+ if (decision.outcome === "approval-required") throw new PermDockApprovalRequiredError({
51
+ decision,
52
+ permission: permission.key,
53
+ scope: permission.scope,
54
+ resource: resourceRef,
55
+ message: approvalMessage(permission.key, decision.reason, decision.token)
56
+ });
57
+ if (decision.denials.some((denial) => denial.reason === "validation")) {
58
+ const detail = decision.denials[0]?.detail;
59
+ if (detail instanceof PermDockValidationError) throw detail;
60
+ }
61
+ throw new PermDockDeniedError({
62
+ decision,
63
+ permission: permission.key,
64
+ scope: permission.scope,
65
+ resource: resourceRef,
66
+ subject,
67
+ message: deniedMessage(permission.key, subject.principal?.id, decision.denials, decision.alternatives.map((leaf) => leaf.key)),
68
+ ...data === void 0 || resource === void 0 ? {} : { disclosure: resource.disclosure }
69
+ });
70
+ }
71
+ //#endregion
72
+ //#region src/core/instance-env.ts
73
+ /** The environment `derive(options)` builds on: `base` with the sources `options` replaces loaded again. */
74
+ function deriveEnv(policy, subject, base, relationCache, options) {
75
+ const scopes = scopeList(policy.scopes);
76
+ const tenants = tenantsOf(subject.principal, scopes);
77
+ const auth = [];
78
+ const named = options.customRoles === void 0 ? void 0 : roleSourceFor(options.customRoles, subject, auth);
79
+ const roleSource = options.customRoles === void 0 ? base.roleSource : named;
80
+ const roles = options.customRoles === void 0 ? base.customRoles : customRolesFor(named, tenants, auth, subject.principal === null ? void 0 : subject.principal.roles ?? [], (tenant) => heldRoleNamesIn(subject.principal, scopes, tenant));
81
+ const names = options.customRoles === void 0 ? base.assignable : assignableNamesFor(named, tenants, auth);
82
+ const approvals = options.approvalPolicies === void 0 ? base.approvalPolicies : options.approvalPolicies.load(policy, tenants, auth);
83
+ const envWith = (loadedRoles, loadedNames, loadedApprovals) => compact({
84
+ ...base,
85
+ customRoles: loadedRoles,
86
+ roleSource,
87
+ assignable: loadedNames,
88
+ approvalPolicies: loadedApprovals,
89
+ relations: options.relations ?? base.relations,
90
+ principals: options.principals ?? base.principals,
91
+ relationCache: options.relations === void 0 ? relationCache : void 0,
92
+ queuedAuth: auth,
93
+ queuedErrors: []
94
+ });
95
+ if (isThenable(roles) || isThenable(names) || isThenable(approvals)) return Promise.all([
96
+ roles,
97
+ names,
98
+ approvals
99
+ ]).then(([loadedRoles, loadedNames, loadedApprovals]) => envWith(loadedRoles, loadedNames, loadedApprovals));
100
+ return envWith(roles, names, approvals);
101
+ }
102
+ //#endregion
103
+ //#region src/core/simulate-preview.ts
104
+ function previewSubject(policy, subject, preview) {
105
+ const previewRoles = preview.roles?.map((item) => typeof item === "string" ? item : item.key);
106
+ const kinds = subject.principal === null ? void 0 : applyRoleKinds(policy, previewRoles ?? subject.principal.roles, preview.memberships === void 0 ? subject.principal.memberships ?? [] : normalizeMemberships(preview.memberships, scopeList(policy.scopes)));
107
+ const principal = subject.principal === null || kinds === void 0 ? null : freezeDeep(compact({
108
+ ...subject.principal,
109
+ roles: kinds.roles,
110
+ memberships: preview.memberships === void 0 && subject.principal.memberships === void 0 ? void 0 : kinds.memberships,
111
+ tenant: preview.tenant ?? subject.principal.tenant
112
+ }));
113
+ return freezeDeep({
114
+ ...subject,
115
+ principal
116
+ });
117
+ }
118
+ /** The one `simulate` event for a batch: the worst decision, with the counts. */
119
+ function simulateEvent(policy, subject, env, evaluated) {
120
+ const counts = {
121
+ granted: 0,
122
+ denied: 0,
123
+ approvalRequired: 0
124
+ };
125
+ for (const [, , decision] of evaluated) if (decision.outcome === "granted") counts.granted += 1;
126
+ else if (decision.outcome === "approval-required") counts.approvalRequired += 1;
127
+ else counts.denied += 1;
128
+ const worst = evaluated.find(([, , decision]) => decision.outcome === "denied") ?? evaluated.find(([, , decision]) => decision.outcome === "approval-required") ?? evaluated[0];
129
+ if (worst === void 0) return;
130
+ const [permission, data, decision] = worst;
131
+ finish(policy, subject, permission, data, decision, {
132
+ call: "simulate",
133
+ trusted: true
134
+ }, {
135
+ ...env,
136
+ emit: true
137
+ }, true, void 0, counts);
138
+ }
139
+ //#endregion
140
+ //#region src/core/instance.ts
141
+ /** Each round reads one more layer: link hops, then the chain, then nested groups. */
142
+ const LOAD_ROUNDS = 48;
143
+ function buildInstance(policy, subject, envBase, team) {
144
+ const listeners = emptyListeners();
145
+ const queuedAuth = [...envBase.queuedAuth];
146
+ const queuedErrors = [...envBase.queuedErrors ?? []];
147
+ const customGrants = customGrantsFor(policy, envBase.customRoles);
148
+ const relationCache = envBase.relationCache ?? /* @__PURE__ */ new Map();
149
+ const relations = relationReader(envBase.relations, relationCache, policy.resources);
150
+ const assignableAt = (tenant) => assignableIn(policy, subject, envBase.customRoles, customGrants, tenant, tenant === void 0 ? void 0 : envBase.assignable?.get(tenant));
151
+ const assignableGlobal = () => assignableIn(policy, subject, envBase.customRoles, customGrants, void 0, void 0, nowSeconds(), true);
152
+ const envFor = (emit, skipAlternatives = false) => ({
153
+ emit,
154
+ simulated: envBase.simulated,
155
+ skipAlternatives,
156
+ customRoles: envBase.customRoles,
157
+ customGrants,
158
+ listeners,
159
+ sink: envBase.sink,
160
+ limits: envBase.limits,
161
+ limitCache: envBase.limitCache,
162
+ team,
163
+ relations,
164
+ ...envBase.approvalPolicies === void 0 ? {} : { approvalPolicies: envBase.approvalPolicies }
165
+ });
166
+ const decideImpl = (permission, data, options) => evaluate(policy, subject, permission, data, options ?? {}, envFor(options?.call !== "simulate", options?.call === "can"));
167
+ const explainImpl = (permission, data, options) => {
168
+ return decideImpl(permission, data, {
169
+ ...options,
170
+ call: options?.call ?? "explain",
171
+ explain: true
172
+ });
173
+ };
174
+ const canImpl = (permission, data, options) => {
175
+ try {
176
+ return decideImpl(permission, data, {
177
+ ...options,
178
+ call: options?.call ?? "can"
179
+ }).outcome === "granted";
180
+ } catch {
181
+ return false;
182
+ }
183
+ };
184
+ const assertImpl = (permission, data, options) => {
185
+ return assertDecision(policy, subject, permission, data, decideImpl(permission, data, {
186
+ ...options,
187
+ call: options?.call ?? "assert"
188
+ }), options?.onDenied ?? policy.onDenied);
189
+ };
190
+ const instance = {
191
+ can: canImpl,
192
+ decide: decideImpl,
193
+ decideEach(permission, rows, options) {
194
+ return Object.freeze(rows.map((row) => decideImpl(permission, row, options)));
195
+ },
196
+ decideFor(principalId, permission, row) {
197
+ return decideForTarget(subject, envBase.principals, envBase.targets, principalId, permission, row);
198
+ },
199
+ assert: assertImpl,
200
+ explain: explainImpl,
201
+ permissions: policy.permissions,
202
+ roles: policy.vocabulary?.roles ?? {},
203
+ plans: policy.vocabulary?.plans ?? {},
204
+ filter(permission, rows, options) {
205
+ const allowed = [];
206
+ let granted = 0;
207
+ let denied = 0;
208
+ let approvalRequired = 0;
209
+ const quiet = {
210
+ ...envFor(false, true),
211
+ outcomeOnly: true
212
+ };
213
+ const trusted = options?.trusted ?? true;
214
+ const decideOptions = {
215
+ ...options,
216
+ call: "filter",
217
+ trusted
218
+ };
219
+ for (const row of rows) {
220
+ const decision = evaluate(policy, subject, permission, row, decideOptions, quiet);
221
+ if (decision.outcome === "granted") {
222
+ allowed.push(row);
223
+ granted += 1;
224
+ } else if (decision.outcome === "approval-required") approvalRequired += 1;
225
+ else denied += 1;
226
+ }
227
+ const summary = granted > 0 ? freezeDeep({
228
+ outcome: "granted",
229
+ subject,
230
+ matched: {
231
+ role: "*",
232
+ permission: permission.key
233
+ },
234
+ token: "pd1.filter"
235
+ }) : freezeDeep({
236
+ outcome: "denied",
237
+ permission: permission.key,
238
+ denials: [{
239
+ role: null,
240
+ reason: "no-grant"
241
+ }],
242
+ alternatives: []
243
+ });
244
+ finish(policy, subject, permission, rows[0], summary, decideOptions, {
245
+ ...quiet,
246
+ emit: true
247
+ }, trusted, void 0, {
248
+ granted,
249
+ denied,
250
+ approvalRequired
251
+ });
252
+ return allowed;
253
+ },
254
+ pick(permission, row, options) {
255
+ if (row === null || typeof row !== "object") return {};
256
+ if (canImpl(permission, row, options) !== true) return {};
257
+ return pickVisible(row, (field) => {
258
+ const next = compact({
259
+ ...options,
260
+ field
261
+ });
262
+ return canImpl(permission, row, next) === true;
263
+ });
264
+ },
265
+ where(permission) {
266
+ const grants = collectSnapshotGrants(policy, subject, envBase.customRoles, nowSeconds(), customGrants).filter((item) => item.grant.permission.key === permission.key).map((item) => snapshotGrant(whereGrant(item.grant), item.membership));
267
+ return whereFromGrants(grants, compact({
268
+ resource: permission.resource,
269
+ resources: policy.resources,
270
+ graph: envBase.relations !== void 0,
271
+ scopes: scopeList(policy.scopes),
272
+ partitioned: (name, key) => relatesTo(getResource(policy.permissions, permission.resource), key, name, scopeList(policy.scopes)),
273
+ fieldOf: (name) => scopeField(getResource(policy.permissions, permission.resource), name, scopeList(policy.scopes)),
274
+ tenant: subject.principal?.tenant,
275
+ team,
276
+ now: nowSeconds(),
277
+ subject
278
+ }));
279
+ },
280
+ actions(resource, data, options) {
281
+ const fromTree = listPermissions(resource);
282
+ return (fromTree.length > 0 ? fromTree : "resource" in resource && typeof resource.resource === "string" ? listPermissions(policy.permissions).filter((item) => item.resource === resource.resource) : []).filter((item) => canImpl(item, data, options) === true);
283
+ },
284
+ async prefetchRelations(permission, rows) {
285
+ if (envBase.relations === void 0) return;
286
+ const quiet = {
287
+ ...envFor(false),
288
+ simulated: true,
289
+ skipAlternatives: true
290
+ };
291
+ for (let round = 0; round < LOAD_ROUNDS; round += 1) {
292
+ for (const row of rows) evaluate(policy, subject, permission, row, {
293
+ call: "simulate",
294
+ trusted: true
295
+ }, quiet);
296
+ const pending = pendingRelations(relationCache);
297
+ if (pending.length === 0) return;
298
+ await Promise.all(pending);
299
+ }
300
+ },
301
+ simulate: ((input, options) => {
302
+ const evaluated = [];
303
+ const quietly = (permission, data) => {
304
+ const decision = evaluate(policy, subject, permission, data, compact({
305
+ call: "simulate",
306
+ trusted: true,
307
+ now: options?.now
308
+ }), envFor(false));
309
+ evaluated.push([
310
+ permission,
311
+ data,
312
+ decision
313
+ ]);
314
+ return decision;
315
+ };
316
+ if (isReadonlyArray(input)) {
317
+ const decisions = input.map(([permission, data]) => quietly(permission, data));
318
+ simulateEvent(policy, subject, envFor(false), evaluated);
319
+ return decisions;
320
+ }
321
+ return buildInstance(policy, previewSubject(policy, subject, input), {
322
+ ...envBase,
323
+ simulated: true,
324
+ relationCache
325
+ }, team);
326
+ }),
327
+ snapshot: ((options) => {
328
+ const snapshot = snapshotOf(policy, subject, compact({
329
+ customRoles: envBase.customRoles,
330
+ customGrants,
331
+ assignable: envBase.assignable,
332
+ include: options?.include,
333
+ tenants: options?.tenants,
334
+ simulated: envBase.simulated
335
+ }));
336
+ if (options?.signer !== void 0) return signSnapshot(snapshot, options.signer, compact({ audience: options.audience }));
337
+ return snapshot;
338
+ }),
339
+ on(event, handler) {
340
+ const set = listeners[event];
341
+ set.add(handler);
342
+ if (event === "auth") for (const queued of queuedAuth) try {
343
+ handler(queued);
344
+ } catch (error) {
345
+ emitSafe(listeners.error, error, listeners);
346
+ }
347
+ if (event === "error") for (const queued of queuedErrors) try {
348
+ handler(queued);
349
+ } catch {}
350
+ return () => {
351
+ set.delete(handler);
352
+ };
353
+ },
354
+ tenant(id) {
355
+ if (subject.principal === null) return buildInstance(policy, subject, {
356
+ ...envBase,
357
+ relationCache
358
+ }, team);
359
+ return buildInstance(policy, freezeDeep(compact({
360
+ ...subject,
361
+ principal: compact({
362
+ ...subject.principal,
363
+ tenant: resolveActiveTenant(subject.principal, id, scopeList(policy.scopes))
364
+ })
365
+ })), {
366
+ ...envBase,
367
+ relationCache
368
+ }, team);
369
+ },
370
+ team(id) {
371
+ return buildInstance(policy, subject, {
372
+ ...envBase,
373
+ relationCache
374
+ }, id);
375
+ },
376
+ memberships() {
377
+ return subject.principal?.memberships ?? [];
378
+ },
379
+ tenants() {
380
+ return tenantsOf(subject.principal, scopeList(policy.scopes));
381
+ },
382
+ heldRoles(options) {
383
+ return heldRoleNames(policy, subject, options?.tenant ?? subject.principal?.tenant, options?.scope === void 0 ? void 0 : compact({
384
+ scope: options.scope,
385
+ id: options.id
386
+ })).map((name) => roleLeaf(policy, name));
387
+ },
388
+ audiences() {
389
+ return audiencesOf(policy, heldRoleNames(policy, subject, subject.principal?.tenant));
390
+ },
391
+ assignableRoles(options) {
392
+ if (options?.scope === "global") return assignableGlobal().roles.filter((leaf) => leaf.on === void 0);
393
+ return assignableAt(options?.tenant ?? subject.principal?.tenant).roles;
394
+ },
395
+ assignablePermissions(options) {
396
+ if (options?.scope === "global") return assignableGlobal().permissions;
397
+ const tenant = options?.tenant ?? subject.principal?.tenant;
398
+ return tenant === void 0 ? [] : assignableAt(tenant).permissions;
399
+ },
400
+ assignableLevels(permission, options) {
401
+ const of = (found) => (Object.hasOwn(found.levels, permission.key) ? found.levels[permission.key] : void 0) ?? [];
402
+ if (options?.scope === "global") return of(assignableGlobal());
403
+ const tenant = options?.tenant ?? subject.principal?.tenant;
404
+ return tenant === void 0 ? [] : of(assignableAt(tenant));
405
+ },
406
+ mayUse(permission) {
407
+ return mayUse(instance, permission);
408
+ },
409
+ permittedIds(permission, scope, options) {
410
+ return permittedIds(instance, permission, scope, options);
411
+ },
412
+ async derive(options) {
413
+ return buildInstance(policy, subject, await deriveEnv(policy, subject, envBase, relationCache, options), team);
414
+ },
415
+ subject
416
+ };
417
+ attachInternals(instance, {
418
+ instance,
419
+ policy,
420
+ subject,
421
+ env: envBase,
422
+ team,
423
+ customGrants,
424
+ relations,
425
+ relationCache,
426
+ assignable: (tenant) => tenant === void 0 ? assignableGlobal() : assignableAt(tenant),
427
+ now: () => nowSeconds(),
428
+ simulateWith: (run) => {
429
+ const evaluated = [];
430
+ const result = run((permission, data) => {
431
+ const decision = evaluate(policy, subject, permission, data, {
432
+ call: "simulate",
433
+ trusted: true
434
+ }, envFor(false));
435
+ evaluated.push([
436
+ permission,
437
+ data,
438
+ decision
439
+ ]);
440
+ return decision;
441
+ });
442
+ simulateEvent(policy, subject, envFor(false), evaluated);
443
+ return result;
444
+ }
445
+ });
446
+ return Object.freeze(instance);
447
+ }
448
+ //#endregion
449
+ //#region src/core/oauth-scopes.ts
450
+ /**
451
+ * `delegation` with every coarse OAuth scope the policy declares in
452
+ * `oauthScopes` followed by the scopes of the permissions it covers, so the
453
+ * delegation checks downstream match them. The token's scopes stay first and
454
+ * unchanged; an undeclared scope expands to nothing.
455
+ */
456
+ function expandOAuthScopes(policy, delegation) {
457
+ const declared = policy.oauthScopes;
458
+ const scopes = delegation?.scopes;
459
+ if (declared === void 0 || delegation === void 0 || scopes === void 0) return delegation;
460
+ const out = new Set(scopes);
461
+ for (const entry of declared) if (scopes.includes(entry.scope)) for (const scope of entry.scopes) out.add(scope);
462
+ return out.size === scopes.length ? delegation : {
463
+ ...delegation,
464
+ scopes: [...out]
465
+ };
466
+ }
467
+ /** The coarse scopes the policy declares that cover `permission`, in declaration order. */
468
+ function coarseScopesFor(policy, permission) {
469
+ return (policy.oauthScopes ?? []).filter((entry) => entry.permissions.includes(permission.key)).map((entry) => entry.scope);
470
+ }
471
+ /** Every token scope that reaches `permission`: its own, any it was renamed from, and the coarse scopes covering it. */
472
+ function scopesReaching(policy, permission) {
473
+ return [
474
+ permission.scope,
475
+ ...formerScopes(permission),
476
+ ...coarseScopesFor(policy, permission)
477
+ ];
478
+ }
479
+ /**
480
+ * The scope an `insufficient_scope` challenge names for `permission`: the
481
+ * first coarse scope that covers it, which the authorization server issues,
482
+ * else the permission's own scope.
483
+ */
484
+ function challengeScope(policy, permission) {
485
+ return coarseScopesFor(policy, permission)[0] ?? permission.scope;
486
+ }
487
+ /** Whether a token holding `granted` carries any of `scopes`. */
488
+ function hasScope(granted, scopes) {
489
+ return scopes.some((scope) => granted?.includes(scope) === true);
490
+ }
491
+ //#endregion
492
+ //#region src/core/resolve-subject.ts
493
+ /**
494
+ * The tenant a user API key holds its owner to (`Credential.tenant`): only
495
+ * the memberships inside it count, and no global role.
496
+ */
497
+ function heldTenantOf(principal) {
498
+ const credential = principal["credential"];
499
+ if (credential === null || typeof credential !== "object" || !Object.hasOwn(credential, "tenant") || !Object.hasOwn(credential, "kind")) return;
500
+ const record = credential;
501
+ return record.kind === "user" && typeof record.tenant === "string" && record.tenant !== "" ? record.tenant : void 0;
502
+ }
503
+ function outsideHeld(held, options) {
504
+ return held !== void 0 && options.tenant !== void 0 && options.tenant !== held;
505
+ }
506
+ function assemblePrincipal(policy, user, options, auth) {
507
+ let principal;
508
+ let context = {};
509
+ let actor = options.actor;
510
+ let delegation = options.delegation;
511
+ let session = options.session;
512
+ let expiresAt = options.expiresAt;
513
+ let liveSession;
514
+ try {
515
+ if (user === null || user === void 0) principal = policy.subject(user);
516
+ else if (isSubject(user)) {
517
+ principal = user.principal;
518
+ context = user.context;
519
+ actor = user.actor ?? actor;
520
+ delegation = user.delegation ?? delegation;
521
+ session = user.session ?? session;
522
+ expiresAt = user.expiresAt ?? expiresAt;
523
+ liveSession = user.liveSession === true ? true : void 0;
524
+ } else principal = policy.subject(user);
525
+ } catch {
526
+ principal = null;
527
+ }
528
+ const contextResult = withRequestContext(options.context, resolveContext(policy, user, context, auth));
529
+ let memberships = principal?.memberships ?? [];
530
+ let live = false;
531
+ const source = options.memberships === void 0 ? void 0 : asMembershipSource(options.memberships);
532
+ const fromClaims = source?.claimsFirst === true && principal?.memberships !== void 0 && principal.membershipsTruncated !== true;
533
+ const read = (from, of) => {
534
+ try {
535
+ return from.membershipsFor(compact({
536
+ id: of.id,
537
+ kind: of.kind
538
+ }), compact({ tenant: options.tenant }));
539
+ } catch {
540
+ auth.push({
541
+ reason: "source-threw",
542
+ source: "memberships",
543
+ ...sourceName(source)
544
+ });
545
+ return [];
546
+ }
547
+ };
548
+ let stale;
549
+ if (principal !== null && source !== void 0 && !fromClaims) {
550
+ live = true;
551
+ memberships = read(source, principal);
552
+ } else if (principal?.memberships !== void 0 && fromClaims && source.onStale === "reread" && source.version !== void 0) {
553
+ const reread = rereadStale(source, principal, principal.memberships, () => read(source, principal), auth);
554
+ memberships = reread.memberships;
555
+ stale = reread.stale;
556
+ }
557
+ return compact({
558
+ principal,
559
+ context: contextResult,
560
+ actor,
561
+ delegation: expandOAuthScopes(policy, delegation),
562
+ session,
563
+ expiresAt,
564
+ memberships,
565
+ live,
566
+ stale,
567
+ liveSession: principal === null ? void 0 : liveSession
568
+ });
569
+ }
570
+ function versionQuery(principal) {
571
+ return compact({
572
+ id: principal.id,
573
+ roles: principal.roles,
574
+ memberships: principal.memberships
575
+ });
576
+ }
577
+ function rereadStale(source, principal, claims, read, auth) {
578
+ const claimed = principal.authzVersion;
579
+ const judge = (current) => typeof claimed === "number" && current !== void 0 && claimed >= current ? "fresh" : "reread";
580
+ const unknown = () => {
581
+ auth.push({
582
+ reason: "source-threw",
583
+ source: "memberships",
584
+ ...sourceName(source)
585
+ });
586
+ return "unknown";
587
+ };
588
+ let freshness;
589
+ try {
590
+ const current = source.version?.(versionQuery(principal));
591
+ freshness = isThenable(current) ? Promise.resolve(current).then(judge, unknown) : judge(current);
592
+ } catch {
593
+ freshness = unknown();
594
+ }
595
+ if (isThenable(freshness)) return {
596
+ memberships: freshness.then((found) => found === "reread" ? read() : claims),
597
+ stale: freshness.then((found) => found === "unknown")
598
+ };
599
+ return {
600
+ memberships: freshness === "reread" ? read() : claims,
601
+ stale: freshness === "unknown"
602
+ };
603
+ }
604
+ function finishSubject(policy, assembled, context, input, options, extra) {
605
+ if (assembled.principal === null) return freezeCopy(compact({
606
+ ...anonymousSubject(context),
607
+ actor: assembled.actor,
608
+ delegation: assembled.delegation,
609
+ session: assembled.session,
610
+ expiresAt: assembled.expiresAt
611
+ }));
612
+ const scopes = scopeList(policy.scopes);
613
+ const held = heldTenantOf(assembled.principal);
614
+ const contact = isContact(assembled.principal);
615
+ const normalized = checkMembershipX(normalizeMemberships(input, scopes), policyX(policy)?.membership, extra.auth);
616
+ const kinds = applyRoleKinds(policy, contact ? [] : assembled.principal.roles, contact ? contactMemberships(normalized) : normalized);
617
+ const roles = held === void 0 ? kinds.roles : [];
618
+ const memberships = held === void 0 ? kinds.memberships : outsideHeld(held, options) ? [] : kinds.memberships.filter((membership) => tenantOf(membership, scopes) === held);
619
+ const plans = contact ? [] : [.../* @__PURE__ */ new Set([...assembled.principal.plans ?? [], ...extra.plans])];
620
+ const withMemberships = freezeCopy(compact({
621
+ ...assembled.principal,
622
+ roles,
623
+ memberships,
624
+ plans: plans.length > 0 ? plans : contact ? void 0 : assembled.principal.plans,
625
+ tenant: contact ? void 0 : activeTenantOf(policy, assembled, memberships, options)
626
+ }));
627
+ return freezeCopy(compact({
628
+ principal: withMemberships,
629
+ actor: assembled.actor,
630
+ delegation: assembled.delegation,
631
+ context: freezeCopy(context),
632
+ session: assembled.session,
633
+ expiresAt: assembled.expiresAt,
634
+ stale: extra.stale ? true : void 0,
635
+ liveSession: assembled.liveSession
636
+ }));
637
+ }
638
+ /** Runs the policy's membership schema over each `x`; an invalid one is dropped and reported, never the membership. */
639
+ function checkMembershipX(memberships, schema, auth) {
640
+ if (schema === void 0) return memberships;
641
+ let dropped = false;
642
+ const checked = memberships.map((membership) => {
643
+ if (membership.x === void 0) return membership;
644
+ const x = readAppData(schema, membership.x);
645
+ if (x === void 0) {
646
+ dropped = true;
647
+ const { x: _dropped, ...rest } = membership;
648
+ return Object.freeze(rest);
649
+ }
650
+ return Object.freeze({
651
+ ...membership,
652
+ x: freezeCopy(x)
653
+ });
654
+ });
655
+ if (dropped) auth.push({
656
+ reason: "schema",
657
+ source: "memberships",
658
+ cause: "x"
659
+ });
660
+ return checked;
661
+ }
662
+ function activeTenantOf(policy, assembled, memberships, options) {
663
+ if (assembled.principal === null) return;
664
+ const held = heldTenantOf(assembled.principal);
665
+ if (held !== void 0) return outsideHeld(held, options) ? void 0 : held;
666
+ return resolveActiveTenant({
667
+ ...assembled.principal,
668
+ memberships
669
+ }, options.tenant ?? assembled.principal.tenant, scopeList(policy.scopes));
670
+ }
671
+ function settle(value, fallback, onError) {
672
+ if (isThenable(value)) return Promise.resolve(value).catch(() => {
673
+ onError();
674
+ return fallback;
675
+ });
676
+ return value;
677
+ }
678
+ /**
679
+ * Whether the token's memberships are behind the source for `fresh`
680
+ * permissions. Live memberships are never stale; token memberships are stale
681
+ * unless a source reports a version the token's `authzVersion` has reached.
682
+ */
683
+ function staleness(policy, assembled, options, auth) {
684
+ const principal = assembled.principal;
685
+ if ((policy.fresh ?? []).length === 0 || principal === null || assembled.live) return false;
686
+ if (assembled.stale !== void 0) return assembled.stale;
687
+ const source = options.memberships === void 0 ? void 0 : asMembershipSource(options.memberships);
688
+ const claimed = principal.authzVersion;
689
+ if (source?.version === void 0 || typeof claimed !== "number") return true;
690
+ const compare = (current) => current === void 0 || claimed < current;
691
+ try {
692
+ const current = source.version(versionQuery(principal));
693
+ return isThenable(current) ? settle(Promise.resolve(current).then(compare), true, () => {
694
+ auth.push({
695
+ reason: "source-threw",
696
+ source: "memberships",
697
+ ...sourceName(source)
698
+ });
699
+ }) : compare(current);
700
+ } catch {
701
+ auth.push({
702
+ reason: "source-threw",
703
+ source: "memberships",
704
+ ...sourceName(source)
705
+ });
706
+ return true;
707
+ }
708
+ }
709
+ function cleanNames(list) {
710
+ return Array.isArray(list) ? list.filter((item) => typeof item === "string" && item !== "") : [];
711
+ }
712
+ function entitlementsOf(assembled, tenant, options, auth) {
713
+ const source = options.entitlements;
714
+ if (source === void 0 || assembled.principal === null || outsideHeld(heldTenantOf(assembled.principal), options)) return [];
715
+ try {
716
+ const found = source.entitlementsFor({ id: assembled.principal.id }, compact({ tenant }));
717
+ return isThenable(found) ? settle(Promise.resolve(found).then(cleanNames), [], () => {
718
+ auth.push({
719
+ reason: "source-threw",
720
+ source: "entitlements"
721
+ });
722
+ }) : cleanNames(found);
723
+ } catch {
724
+ auth.push({
725
+ reason: "source-threw",
726
+ source: "entitlements"
727
+ });
728
+ return [];
729
+ }
730
+ }
731
+ function resolveContext(policy, user, fallback, auth) {
732
+ if (policy.context === void 0) return sanitizeContext(fallback);
733
+ try {
734
+ const loaded = policy.context(user);
735
+ if (isThenable(loaded)) return loaded.then((value) => sanitizeContext(value), () => {
736
+ auth.push({
737
+ reason: "source-threw",
738
+ source: "context"
739
+ });
740
+ return {};
741
+ });
742
+ return sanitizeContext(loaded);
743
+ } catch {
744
+ auth.push({
745
+ reason: "source-threw",
746
+ source: "context"
747
+ });
748
+ return {};
749
+ }
750
+ }
751
+ function withRequestContext(request, resolved) {
752
+ if (request === void 0) return resolved;
753
+ const base = sanitizeContext(request);
754
+ return isThenable(resolved) ? resolved.then((value) => ({
755
+ ...base,
756
+ ...value
757
+ })) : {
758
+ ...base,
759
+ ...resolved
760
+ };
761
+ }
762
+ function resolveSubject(policy, user, options, auth) {
763
+ const assembled = assemblePrincipal(policy, user, options, auth);
764
+ const memberships = settle(assembled.memberships, [], () => {
765
+ auth.push({
766
+ reason: "source-threw",
767
+ source: "memberships"
768
+ });
769
+ });
770
+ const stale = staleness(policy, assembled, options, auth);
771
+ const withPlans = (resolved) => entitlementsOf(assembled, activeTenantOf(policy, assembled, applyRoleKinds(policy, assembled.principal?.roles, normalizeMemberships(resolved, scopeList(policy.scopes))).memberships, options), options, auth);
772
+ if (isThenable(assembled.context) || isThenable(memberships) || isThenable(stale)) return Promise.all([
773
+ Promise.resolve(assembled.context),
774
+ Promise.resolve(memberships),
775
+ Promise.resolve(stale)
776
+ ]).then(async ([context, resolved, isStale]) => finishSubject(policy, assembled, context, resolved, options, {
777
+ stale: isStale,
778
+ plans: await withPlans(resolved),
779
+ auth
780
+ }));
781
+ const plans = withPlans(memberships);
782
+ if (isThenable(plans)) return Promise.resolve(plans).then((resolved) => finishSubject(policy, assembled, assembled.context, memberships, options, {
783
+ stale,
784
+ plans: resolved,
785
+ auth
786
+ }));
787
+ return finishSubject(policy, assembled, assembled.context, memberships, options, {
788
+ stale,
789
+ plans,
790
+ auth
791
+ });
792
+ }
793
+ //#endregion
794
+ //#region src/core/permdock.ts
795
+ function instantiate(codePolicy, subject, options, auth) {
796
+ const { policy, errors } = options.policies?.apply(codePolicy) ?? {
797
+ policy: codePolicy,
798
+ errors: []
799
+ };
800
+ const scopes = scopeList(policy.scopes);
801
+ const tenants = tenantsOf(subject.principal, scopes);
802
+ const roleSource = roleSourceFor(options.customRoles, subject, auth);
803
+ const customRoles = customRolesFor(roleSource, tenants, auth, subject.principal === null ? void 0 : subject.principal.roles ?? [], (tenant) => heldRoleNamesIn(subject.principal, scopes, tenant));
804
+ const assignable = assignableNamesFor(roleSource, tenants, auth);
805
+ const approvals = options.approvalPolicies?.load(policy, tenants, auth);
806
+ const build = (roles, names, approvalPolicies) => buildInstance(policy, subject, compact({
807
+ customRoles: roles,
808
+ sink: options.sink,
809
+ limits: options.limits,
810
+ limitCache: /* @__PURE__ */ new Map(),
811
+ simulated: false,
812
+ roleSource,
813
+ assignable: names,
814
+ queuedAuth: auth,
815
+ queuedErrors: errors,
816
+ relations: options.relations,
817
+ approvalPolicies,
818
+ memberships: options.memberships === void 0 ? void 0 : asMembershipSource(options.memberships),
819
+ principals: options.principals,
820
+ settings: options.settings,
821
+ targets: (principal, tenant) => getPermDock(codePolicy, {
822
+ principal,
823
+ context: {}
824
+ }, compact({
825
+ tenant,
826
+ memberships: options.memberships,
827
+ customRoles: options.customRoles,
828
+ entitlements: options.entitlements,
829
+ limits: options.limits,
830
+ policies: options.policies,
831
+ relations: options.relations,
832
+ approvalPolicies: options.approvalPolicies
833
+ }))
834
+ }));
835
+ if (isThenable(customRoles) || isThenable(assignable) || isThenable(approvals)) return Promise.all([
836
+ customRoles,
837
+ assignable,
838
+ approvals
839
+ ]).then(([roles, names, loaded]) => build(roles, names, loaded));
840
+ return build(customRoles, assignable, approvals);
841
+ }
842
+ function create(policy, user, given) {
843
+ const options = withApp(policy, given);
844
+ const auth = [];
845
+ const subject = resolveSubject(policy, user, options, auth);
846
+ if (isThenable(subject)) return subject.then((resolved) => instantiate(policy, resolved, options, auth));
847
+ return instantiate(policy, subject, options, auth);
848
+ }
849
+ /**
850
+ * The instance for `user`, built synchronously. Every input must answer
851
+ * synchronously: the subject mapper, `memberships`, `customRoles`,
852
+ * `entitlements`, `approvalPolicies` and the freshness check. One that
853
+ * answers with a Promise throws here; use `getPermDock` for those.
854
+ */
855
+ function getPermDockSync(policy, user, options = {}) {
856
+ const created = create(policy, user, options);
857
+ if (isThenable(created)) {
858
+ created.then(void 0, () => void 0);
859
+ throw new Error("PermDock: getPermDockSync got a Promise from the subject mapper or a source (memberships, customRoles, entitlements, approvalPolicies); use getPermDock for asynchronous inputs");
860
+ }
861
+ return created;
862
+ }
863
+ /** The instance for `user`: waits for every source, then builds it. `getPermDockSync` is the synchronous twin. */
864
+ function getPermDock(policy, user, options = {}) {
865
+ return Promise.resolve().then(() => create(policy, user, options));
866
+ }
867
+ //#endregion
868
+ export { hasScope as a, withApp as c, challengeScope as i, getPermDockSync as n, scopesReaching as o, resolveSubject as r, APP as s, getPermDock as t };