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
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { r as requiredPlans } from "../problem-details-_AMOYz-w.js";
3
- import { t as describe } from "../describe-B_gVZEVi.js";
4
- import { t as approvalHeaders } from "../headers-BZSDieNT.js";
5
- import { a as useFilter, c as usePermission, d as useSubject, f as useTenant, i as useAssignableRoles, l as usePermissions, n as useApproval, o as useMemberships, r as useAssignablePermissions, s as usePermDock, t as Protected, u as useRoles } from "../protected-utU-SLuy.js";
6
- import { t as PermDockProvider } from "../provider-CSQd7m92.js";
7
- export { PermDockProvider, Protected, approvalHeaders, describe, requiredPlans, useApproval, useAssignablePermissions, useAssignableRoles, useFilter, useMemberships, usePermDock, usePermission, usePermissions, useRoles, useSubject, useTenant };
2
+ import { r as requiredPlans } from "../problem-details-cn5X30gZ.js";
3
+ import { t as describe } from "../describe-BybMRY7A.js";
4
+ import { t as approvalHeaders } from "../headers-BIjfMaoC.js";
5
+ import { a as useDescribe, c as useMemberships, d as usePermissions, f as useRoles, i as useAssignableRoles, l as usePermDock, m as useTenant, n as useApproval, o as useFilter, p as useSubject, r as useAssignablePermissions, s as useGate, t as Protected, u as usePermission } from "../protected-DfjY5mLA.js";
6
+ import { t as PermDockProvider } from "../provider-CC-u3bYP.js";
7
+ export { PermDockProvider, Protected, approvalHeaders, describe, requiredPlans, useApproval, useAssignablePermissions, useAssignableRoles, useDescribe, useFilter, useGate, useMemberships, usePermDock, usePermission, usePermissions, useRoles, useSubject, useTenant };
@@ -1,2 +1,2 @@
1
- import { t as PermDockProvider } from "../provider-DZY281jO.js";
1
+ import { t as PermDockProvider } from "../provider-DMVt6yYn.js";
2
2
  export { PermDockProvider };
@@ -1,3 +1,2 @@
1
1
  "use client";
2
- import { t as PermDockProvider } from "../provider-CSQd7m92.js";
3
- export { PermDockProvider };
2
+ export { t as PermDockProvider } from "../provider-CC-u3bYP.js";
@@ -1,14 +1,14 @@
1
- import { At as SnapshotSource, Dr as CustomRole, Ft as TokenVerifier, Mr as Membership, Tt as Snapshot, pt as LocalSnapshotManifest } from "../policy-IB6yxpC3.js";
2
- import { f as Permission } from "../permissions-DttnqqxC.js";
3
- import { n as requiredPlans } from "../problem-details-DX075l9V.js";
4
- import { i as describe } from "../describe-DMYiCjJV.js";
5
- import { t as parseLocalSnapshotManifest } from "../parse-local-manifest-JLnaBH0S.js";
6
- import { t as approvalHeaders } from "../headers-Cf-zWvsO.js";
7
- import { a as FilterResult, c as SubjectView, i as ClientStatus, l as TenantView, n as ApprovalState, o as PermissionSet, r as ClientPermDock, s as PermissionState, t as ApprovalHandle } from "../types-CKNSyIf_.js";
8
- import { n as ProtectedProps } from "../types-BnIEz1sU.js";
9
- import { a as useFilter, c as usePermission, d as useSubject, f as useTenant, i as useAssignableRoles, l as usePermissions, n as useApproval, o as useMemberships, r as useAssignablePermissions, s as usePermDock, t as Protected, u as useRoles } from "../protected-BdnIEFkY.js";
10
- import { t as ClientStore } from "../store-jOBYpiXC.js";
11
- import { ReactElement, ReactNode } from "react";
1
+ import { Bt as LocalSnapshotManifest, Rt as Instant, Vt as Snapshot, Zn as CustomRole, nr as Membership, ot as SnapshotSource } from "../policy-types-DzwivBgR.js";
2
+ import { w as Permission } from "../vocabulary-D6lPdb4Z.js";
3
+ import { n as requiredPlans } from "../problem-details-DXlt-vks.js";
4
+ import { i as describe } from "../describe-BZUsixiL.js";
5
+ import { t as parseLocalSnapshotManifest } from "../parse-local-manifest-DgqtruPn.js";
6
+ import { t as approvalHeaders } from "../headers-CIbDTUTK.js";
7
+ import { a as FilterResult, c as PermissionSet, f as SubjectView, i as ClientStatus, l as PermissionState, m as ClientStore, n as ApprovalState, o as GateMode, p as TenantView, r as ClientPermDock, s as GateView, t as ApprovalHandle } from "../types-BNORmDM8.js";
8
+ import { r as ProtectedProps, t as PermDockDefaults } from "../types-tIgIeIKJ.js";
9
+ import { a as useDescribe, c as useMemberships, d as usePermissions, f as useRoles, i as useAssignableRoles, l as usePermDock, m as useTenant, n as useApproval, o as useFilter, p as useSubject, r as useAssignablePermissions, s as useGate, t as Protected, u as usePermission } from "../protected-DEPHc2xV.js";
10
+ import { a as SubscribeOnline, i as SubscribeForeground, n as ReactNativePermDockProviderProps, r as SnapshotStorage, t as NativeRevalidate } from "../types-BjV-fqcA.js";
11
+ import { ReactElement } from "react";
12
12
  //#region src/react-native/guards.d.ts
13
13
  /** `true` once the provider has a snapshot to answer from: storage was read or a seed was given. Hide the splash screen on it. */
14
14
  export declare function useSnapshotReady(): boolean;
@@ -33,7 +33,7 @@ type LocalSnapshotData = {
33
33
  /** Attributes conditions read, such as `claims` for `principal.claims.team_ids`. */
34
34
  readonly attributes?: Readonly<Record<string, unknown>>;
35
35
  } | null;
36
- /** The tenant's custom roles, in the shape a `RoleSource` returns. */
36
+ /** The tenant's custom roles, in the shape a `CustomRoleSource` returns. */
37
37
  readonly customRoles?: readonly CustomRole[];
38
38
  };
39
39
  type LocalSnapshotOptions = {
@@ -47,7 +47,7 @@ type LocalSnapshotOptions = {
47
47
  * The snapshot a server would send for `data`, built from the manifest. It
48
48
  * drives UI guards only: the server still decides every request.
49
49
  */
50
- export declare function buildLocalSnapshot(manifest: LocalSnapshotManifest, data: LocalSnapshotData, now?: number): Snapshot;
50
+ export declare function buildLocalSnapshot(manifest: LocalSnapshotManifest, data: LocalSnapshotData, at?: Instant): Snapshot;
51
51
  /**
52
52
  * A snapshot source over the device's own membership rows (SQLite, a
53
53
  * PowerSync or Electric replica): offline, the UI guards answer from them.
@@ -55,7 +55,7 @@ export declare function buildLocalSnapshot(manifest: LocalSnapshotManifest, data
55
55
  export declare function localSnapshot(options: LocalSnapshotOptions): SnapshotSource;
56
56
  //#endregion
57
57
  //#region src/react-native/powersync.d.ts
58
- /** The `PowerSyncDatabase` methods `powersyncSource` calls. */
58
+ /** The `PowerSyncDatabase` methods `powerSyncSource` calls. */
59
59
  type PowerSyncWatchable = {
60
60
  getAll(sql: string, parameters?: unknown[]): Promise<unknown[]>;
61
61
  watch(sql: string, parameters: unknown[] | undefined, handler: {
@@ -85,52 +85,13 @@ type PowerSyncSourceOptions<Q extends string> = {
85
85
  * takes the database as an argument; `permdock/react-native` never imports
86
86
  * `@powersync/*`.
87
87
  */
88
- export declare function powersyncSource<Q extends string>(db: PowerSyncWatchable, options: PowerSyncSourceOptions<Q>): SnapshotSource;
89
- //#endregion
90
- //#region src/react-native/types.d.ts
91
- type PermDockStorage = {
92
- getItem(key: string): string | null | Promise<string | null>;
93
- setItem(key: string, value: string): void | Promise<void>;
94
- removeItem(key: string): void | Promise<void>;
95
- };
96
- type NativeRevalidate = "launch" | "focus" | number;
97
- /**
98
- * Calls `listener` when the app changes state; `active` is `false` when it
99
- * goes to the background. A listener called without an argument counts as
100
- * a return to the foreground.
101
- */
102
- type SubscribeForeground = (listener: (active?: boolean) => void) => () => void;
103
- /** Calls `listener` with `false` when the device loses connectivity and `true` when it returns. */
104
- type SubscribeOnline = (listener: (online: boolean) => void) => () => void;
105
- type NativePermDockProviderProps = {
106
- readonly storage: PermDockStorage;
107
- /**
108
- * The signed-in principal's id, or `null` when nobody is signed in. Only a
109
- * persisted snapshot for this id is read or written; `null` clears storage.
110
- */
111
- readonly subjectId: string | null;
112
- readonly snapshot?: Snapshot | string;
113
- readonly snapshotUrl?: string;
114
- /** Hydrates from the device's own rows (`localSnapshot`); with `snapshotUrl` too, the latest answer wins. */
115
- readonly source?: SnapshotSource;
116
- readonly endpoint?: string;
117
- readonly approvals?: string;
118
- readonly tenant?: string;
119
- readonly revalidate?: NativeRevalidate;
120
- readonly subscribeForeground?: SubscribeForeground;
121
- readonly subscribeOnline?: SubscribeOnline;
122
- readonly fetch?: typeof fetch;
123
- readonly headers?: Readonly<Record<string, string>>;
124
- readonly maxAge?: number;
125
- readonly verifier?: TokenVerifier;
126
- readonly children: ReactNode;
127
- };
88
+ export declare function powerSyncSource<Q extends string>(db: PowerSyncWatchable, options: PowerSyncSourceOptions<Q>): SnapshotSource;
128
89
  //#endregion
129
90
  //#region src/react-native/provider.d.ts
130
- export declare function PermDockProvider(props: NativePermDockProviderProps): ReactElement;
91
+ export declare function PermDockProvider(props: ReactNativePermDockProviderProps): ReactElement;
131
92
  //#endregion
132
93
  //#region src/react-native/storage.d.ts
133
- export declare function memoryStorage(initial?: Readonly<Record<string, string>>): PermDockStorage;
94
+ export declare function memorySnapshotStorage(initial?: Readonly<Record<string, string>>): SnapshotStorage;
134
95
  //#endregion
135
96
  //#region src/react-native/storage-adapters.d.ts
136
97
  /** The `expo-secure-store` functions `secureStoreStorage` calls. */
@@ -149,13 +110,13 @@ type MmkvInstance = {
149
110
  delete(key: string): unknown;
150
111
  });
151
112
  /**
152
- * A `PermDockStorage` over `expo-secure-store`. Values are split into chunks
113
+ * A `SnapshotStorage` over `expo-secure-store`. Values are split into chunks
153
114
  * of at most 2048 bytes under `<key>.<n>`; `<key>` holds the chunk count and
154
115
  * is written last, so an interrupted write reads as absent.
155
116
  */
156
- export declare function secureStoreStorage(store: SecureStoreModule, options?: object): PermDockStorage;
157
- /** A synchronous `PermDockStorage` over a `react-native-mmkv` instance: the first frame already has the snapshot. */
158
- export declare function mmkvStorage(mmkv: MmkvInstance): PermDockStorage;
117
+ export declare function secureStoreStorage(store: SecureStoreModule, options?: object): SnapshotStorage;
118
+ /** A synchronous `SnapshotStorage` over a `react-native-mmkv` instance: the first frame already has the snapshot. */
119
+ export declare function mmkvStorage(mmkv: MmkvInstance): SnapshotStorage;
159
120
  //#endregion
160
121
  //#region src/react-native/subscriptions.d.ts
161
122
  /** The `AppState` export of `react-native`, as `appStateForeground` calls it. */
@@ -181,7 +142,7 @@ export declare function appStateForeground(appState: AppStateModule): SubscribeF
181
142
  export declare function netInfoOnline(netInfo: NetInfoModule): SubscribeOnline;
182
143
  //#endregion
183
144
  //#region src/react-native/store.d.ts
184
- type NativeStoreOptions = Omit<NativePermDockProviderProps, "children" | "headers"> & {
145
+ type NativeStoreOptions = Omit<ReactNativePermDockProviderProps, "children" | "headers" | "defaults" | "messages"> & {
185
146
  readonly headers?: Readonly<Record<string, string>> | (() => Readonly<Record<string, string>> | undefined);
186
147
  /** A store this one replaces: its snapshot and tenant seed this store, so guards do not flip while it boots. */
187
148
  readonly previous?: ClientStore;
@@ -193,6 +154,6 @@ type NativeStoreOptions = Omit<NativePermDockProviderProps, "children" | "header
193
154
  * snapshot. Returns the unsubscribe.
194
155
  */
195
156
  export declare function connectSource(store: ClientStore, source: SnapshotSource, subscribeForeground?: SubscribeForeground): () => void;
196
- export declare function createNativeStore(options: NativeStoreOptions): ClientStore;
157
+ export declare function nativeStore(options: NativeStoreOptions): ClientStore;
197
158
  //#endregion
198
- export { type AppStateModule, type ApprovalHandle, type ApprovalState, type ClientPermDock, type ClientStatus, type FilterResult, type LocalSnapshotData, type LocalSnapshotManifest, type LocalSnapshotOptions, type MmkvInstance, type NativePermDockProviderProps, type NativeRevalidate, type NetInfoModule, type PermDockStorage, type PermissionSet, type PermissionState, type PowerSyncQuery, type PowerSyncSourceOptions, type PowerSyncWatchable, Protected, type ProtectedProps, type SecureStoreModule, type SnapshotSource, type SubjectView, type SubscribeForeground, type SubscribeOnline, type TenantView, approvalHeaders, describe, parseLocalSnapshotManifest, requiredPlans, useApproval, useAssignablePermissions, useAssignableRoles, useFilter, useMemberships, usePermDock, usePermission, usePermissions, useRoles, useSubject, useTenant };
159
+ export { type AppStateModule, type ApprovalHandle, type ApprovalState, type ClientPermDock, type ClientStatus, type FilterResult, type GateMode, type GateView, type LocalSnapshotData, type LocalSnapshotManifest, type LocalSnapshotOptions, type MmkvInstance, type NativeRevalidate, type NetInfoModule, type PermDockDefaults, type PermissionSet, type PermissionState, type PowerSyncQuery, type PowerSyncSourceOptions, type PowerSyncWatchable, Protected, type ProtectedProps, type ReactNativePermDockProviderProps, type SecureStoreModule, type SnapshotSource, type SnapshotStorage, type SubjectView, type SubscribeForeground, type SubscribeOnline, type TenantView, approvalHeaders, describe, parseLocalSnapshotManifest, requiredPlans, useApproval, useAssignablePermissions, useAssignableRoles, useDescribe, useFilter, useGate, useMemberships, usePermDock, usePermission, usePermissions, useRoles, useSubject, useTenant };
@@ -1,19 +1,20 @@
1
1
  "use client";
2
- import { t as compact } from "../compact-y6vfu2_f.js";
2
+ import { t as compact } from "../compact-CAf557ZB.js";
3
3
  import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
4
- import { r as requiredPlans } from "../problem-details-_AMOYz-w.js";
5
- import { t as describe } from "../describe-B_gVZEVi.js";
6
- import { a as normalizeMemberships, d as scopeList, m as tenantOf$1, o as resolveScope } from "../scopes-CVdPrWN-.js";
7
- import { n as parseSnapshot, o as bindConditionRefs } from "../snapshot-Enxd0n-s.js";
8
- import { s as flattenGrantee } from "../grantee-Cv5Sogfv.js";
9
- import { p as resolveActiveTenant, u as nowSeconds } from "../validity-uOp8UpYn.js";
10
- import { n as isThenable } from "../thenable-okc2xDsj.js";
11
- import { r as heldRoleNames, t as emptySnapshot } from "../from-snapshot-CTLijvdm.js";
12
- import { t as parseLocalSnapshotManifest } from "../parse-local-manifest-BrMozJCo.js";
13
- import { t as approvalHeaders } from "../headers-BZSDieNT.js";
14
- import { n as storeOf, r as isJws, t as adapterStore } from "../store-options-ByhZq1jV.js";
15
- import { i as PermDockStoreContext, n as useKeyed, t as useLiveOptions } from "../live-options-H2eG8dfJ.js";
16
- import { a as useFilter, c as usePermission, d as useSubject, f as useTenant, i as useAssignableRoles, l as usePermissions, n as useApproval, o as useMemberships, r as useAssignablePermissions, s as usePermDock, t as Protected, u as useRoles } from "../protected-utU-SLuy.js";
4
+ import { r as requiredPlans } from "../problem-details-cn5X30gZ.js";
5
+ import { t as describe } from "../describe-BybMRY7A.js";
6
+ import { n as isThenable } from "../thenable-yD7SabqG.js";
7
+ import { h as secondsAt, m as rfc3339 } from "../time-DkWjdL98.js";
8
+ import { a as normalizeMemberships, d as scopeList, m as tenantOf$1, o as resolveScope } from "../scopes-CUPSjo9q.js";
9
+ import { o as flattenGrantee } from "../grantee-Cn1HyUsI.js";
10
+ import { d as resolveActiveTenant } from "../tenancy-DN2QAx9z.js";
11
+ import { i as bindConditionRefs, n as parseSnapshot } from "../snapshot-CXUWfsNy.js";
12
+ import { r as heldRoleNames, t as emptySnapshot } from "../from-snapshot-D2lZt4Dd.js";
13
+ import { t as parseLocalSnapshotManifest } from "../parse-local-manifest-CVSs6J9I.js";
14
+ import { t as approvalHeaders } from "../headers-BIjfMaoC.js";
15
+ import { n as storeOf, r as isJws, t as adapterStore } from "../store-options-BqEakYRa.js";
16
+ import { a as PermDockUiContext, i as PermDockStoreContext, n as useKeyed, t as useLiveOptions } from "../live-options-BaAFCIiu.js";
17
+ import { a as useDescribe, c as useMemberships, d as usePermissions, f as useRoles, i as useAssignableRoles, l as usePermDock, m as useTenant, n as useApproval, o as useFilter, p as useSubject, r as useAssignablePermissions, s as useGate, t as Protected, u as usePermission } from "../protected-DfjY5mLA.js";
17
18
  import { useEffect, useMemo, useRef } from "react";
18
19
  import { jsx } from "react/jsx-runtime";
19
20
  //#region src/react-native/guards.ts
@@ -130,7 +131,8 @@ function customScope(role, scopes) {
130
131
  * The snapshot a server would send for `data`, built from the manifest. It
131
132
  * drives UI guards only: the server still decides every request.
132
133
  */
133
- function buildLocalSnapshot(manifest, data, now = Math.floor(nowSeconds())) {
134
+ function buildLocalSnapshot(manifest, data, at) {
135
+ const now = secondsAt(at);
134
136
  if (manifest === null || typeof manifest !== "object" || manifest.v !== 1 || !isList(manifest.grants)) throw new Error("PermDock: unsupported local snapshot manifest");
135
137
  const scopes = scopeList(manifest.scopes);
136
138
  const input = data.principal;
@@ -189,7 +191,7 @@ function buildLocalSnapshot(manifest, data, now = Math.floor(nowSeconds())) {
189
191
  const roles = subject.principal === null ? [] : heldRoleNames(subject, tenant, scopes, { rank: manifest.rank ?? [] }, now);
190
192
  return freezeDeep(compact({
191
193
  v: 1,
192
- issuedAt: now,
194
+ issuedAt: rfc3339(now),
193
195
  subject: {
194
196
  principal,
195
197
  context: {}
@@ -220,7 +222,7 @@ function localSnapshot(options) {
220
222
  * takes the database as an argument; `permdock/react-native` never imports
221
223
  * `@powersync/*`.
222
224
  */
223
- function powersyncSource(db, options) {
225
+ function powerSyncSource(db, options) {
224
226
  const names = Object.keys(options.queries);
225
227
  return localSnapshot({
226
228
  manifest: options.manifest,
@@ -249,7 +251,7 @@ function powersyncSource(db, options) {
249
251
  //#region src/react-native/storage.ts
250
252
  const SNAPSHOT_KEY = "permdock.snapshot";
251
253
  const TENANT_KEY = "permdock.tenant";
252
- function memoryStorage(initial = {}) {
254
+ function memorySnapshotStorage(initial = {}) {
253
255
  const map = new Map(Object.entries(initial));
254
256
  return {
255
257
  getItem(key) {
@@ -366,7 +368,7 @@ function clearStorage(storage) {
366
368
  function contentKey(snapshot) {
367
369
  return JSON.stringify({
368
370
  ...snapshot,
369
- issuedAt: 0
371
+ issuedAt: ""
370
372
  });
371
373
  }
372
374
  /**
@@ -425,7 +427,7 @@ function parseSeed(given) {
425
427
  return;
426
428
  }
427
429
  }
428
- function createNativeStore(options) {
430
+ function nativeStore(options) {
429
431
  const storage = guardStorage(options.storage);
430
432
  const signed = options.verifier !== void 0;
431
433
  const revalidates = options.snapshotUrl !== void 0 || options.source !== void 0;
@@ -447,7 +449,10 @@ function createNativeStore(options) {
447
449
  maxAge: options.maxAge,
448
450
  verifier: options.verifier,
449
451
  awaiting: waiting,
450
- passCache: true
452
+ passCache: true,
453
+ onSnapshot: options.onSnapshot,
454
+ onClear: options.onClear,
455
+ approvalInterval: options.approvalInterval
451
456
  }), snapshot, {
452
457
  server: false,
453
458
  stale: revalidates && (fromStorage !== void 0 || waiting),
@@ -485,7 +490,7 @@ function createNativeStore(options) {
485
490
  function PermDockProvider(props) {
486
491
  const live = useLiveOptions(props, false);
487
492
  const shown = useRef(null);
488
- const store = useKeyed(() => createNativeStore(compact({
493
+ const store = useKeyed(() => nativeStore(compact({
489
494
  storage: props.storage,
490
495
  subjectId: props.subjectId,
491
496
  snapshot: props.snapshot,
@@ -498,6 +503,9 @@ function PermDockProvider(props) {
498
503
  headers: live.readHeaders,
499
504
  maxAge: props.maxAge,
500
505
  verifier: live.verifier,
506
+ onSnapshot: live.onSnapshot,
507
+ onClear: live.onClear,
508
+ approvalInterval: props.approvalInterval,
501
509
  previous: shown.current ?? void 0
502
510
  })), [
503
511
  props.storage,
@@ -510,8 +518,15 @@ function PermDockProvider(props) {
510
518
  props.tenant,
511
519
  live.fetch,
512
520
  props.maxAge,
513
- live.verifier
521
+ live.verifier,
522
+ live.onSnapshot,
523
+ live.onClear,
524
+ props.approvalInterval
514
525
  ]);
526
+ const ui = useMemo(() => ({
527
+ defaults: props.defaults,
528
+ messages: props.messages
529
+ }), [props.defaults, props.messages]);
515
530
  useEffect(() => {
516
531
  const previous = shown.current;
517
532
  shown.current = store;
@@ -580,7 +595,10 @@ function PermDockProvider(props) {
580
595
  ]);
581
596
  return /* @__PURE__ */ jsx(PermDockStoreContext, {
582
597
  value: store,
583
- children: props.children
598
+ children: /* @__PURE__ */ jsx(PermDockUiContext, {
599
+ value: ui,
600
+ children: props.children
601
+ })
584
602
  });
585
603
  }
586
604
  //#endregion
@@ -620,7 +638,7 @@ function chunkKey(key, index) {
620
638
  return `${key}.${index}`;
621
639
  }
622
640
  /**
623
- * A `PermDockStorage` over `expo-secure-store`. Values are split into chunks
641
+ * A `SnapshotStorage` over `expo-secure-store`. Values are split into chunks
624
642
  * of at most 2048 bytes under `<key>.<n>`; `<key>` holds the chunk count and
625
643
  * is written last, so an interrupted write reads as absent.
626
644
  */
@@ -655,7 +673,7 @@ function secureStoreStorage(store, options) {
655
673
  }
656
674
  };
657
675
  }
658
- /** A synchronous `PermDockStorage` over a `react-native-mmkv` instance: the first frame already has the snapshot. */
676
+ /** A synchronous `SnapshotStorage` over a `react-native-mmkv` instance: the first frame already has the snapshot. */
659
677
  function mmkvStorage(mmkv) {
660
678
  return {
661
679
  getItem: (key) => mmkv.getString(key) ?? null,
@@ -693,4 +711,4 @@ function netInfoOnline(netInfo) {
693
711
  });
694
712
  }
695
713
  //#endregion
696
- export { PermDockProvider, Protected, appStateForeground, approvalHeaders, buildLocalSnapshot, connectSource, createNativeStore, describe, localSnapshot, memoryStorage, mmkvStorage, netInfoOnline, parseLocalSnapshotManifest, powersyncSource, requiredPlans, secureStoreStorage, useApproval, useAssignablePermissions, useAssignableRoles, useFilter, useMemberships, usePermDock, usePermission, usePermissionGuard, usePermissions, useRoles, useSnapshotReady, useSubject, useTenant };
714
+ export { PermDockProvider, Protected, appStateForeground, approvalHeaders, buildLocalSnapshot, connectSource, describe, localSnapshot, memorySnapshotStorage, mmkvStorage, nativeStore, netInfoOnline, parseLocalSnapshotManifest, powerSyncSource, requiredPlans, secureStoreStorage, useApproval, useAssignablePermissions, useAssignableRoles, useDescribe, useFilter, useGate, useMemberships, usePermDock, usePermission, usePermissionGuard, usePermissions, useRoles, useSnapshotReady, useSubject, useTenant };
@@ -1,5 +1,5 @@
1
1
  import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
2
- import { O as readPath, k as splitPath, w as assertSafeKey } from "./permissions-DVoF6dMt.js";
2
+ import { o as readPath, s as splitPath, t as assertSafeKey } from "./paths-DXSHAMIa.js";
3
3
  //#region src/conditions/ast.ts
4
4
  function parentHop(parent) {
5
5
  return typeof parent === "string" ? { field: parent } : parent;
@@ -0,0 +1,186 @@
1
+ import { r as isRecord } from "./compact-CAf557ZB.js";
2
+ import { r as ownGet } from "./paths-DXSHAMIa.js";
3
+ import { n as relationId } from "./relations-BnCWnJGI.js";
4
+ //#region src/core/relation-walk.ts
5
+ /** Whether the holder's period covers `now`. */
6
+ function activeNow(holder, now) {
7
+ return (holder.startsAt === void 0 || holder.startsAt <= now) && (holder.expiresAt === void 0 || holder.expiresAt > now);
8
+ }
9
+ function holdsNow(holder, principalId, now) {
10
+ return "principal" in holder && holder.principal.id === principalId && activeNow(holder, now);
11
+ }
12
+ /** Where the walk starts after following `hops`, or why it cannot. */
13
+ function followHops(condition, first, reader) {
14
+ const hops = condition.hops ?? [];
15
+ let id = first;
16
+ for (let index = 1; index < hops.length; index += 1) {
17
+ const from = hops[index - 1];
18
+ const hop = hops[index];
19
+ if (from === void 0 || hop === void 0)
20
+ /* v8 ignore next */
21
+ return;
22
+ const chain = reader.chain({
23
+ resource: from.resource,
24
+ id,
25
+ depth: 1,
26
+ through: hop.link
27
+ });
28
+ if (chain === "pending" || chain === "failed") return "relation-unavailable";
29
+ const next = chain.ancestors[0]?.id;
30
+ if (next === void 0) return;
31
+ id = next;
32
+ }
33
+ return { id };
34
+ }
35
+ function restrictedAbove(condition, row, reader) {
36
+ const above = condition.restrictedAncestors;
37
+ if (above === void 0) return false;
38
+ const parent = relationId(ownGet(row, above.parent));
39
+ if (parent === void 0) return false;
40
+ const chain = reader.chain({
41
+ resource: above.resource,
42
+ id: parent,
43
+ depth: above.depth - 1
44
+ });
45
+ if (chain === "pending" || chain === "failed") return "relation-unavailable";
46
+ if (chain.restricted === true || chain.ancestors.some((ancestor) => ancestor.restricted === true)) return;
47
+ const own = relationId(ownGet(row, above.id));
48
+ const ids = [
49
+ ...own === void 0 ? [] : [own],
50
+ parent,
51
+ ...chain.ancestors.map((ancestor) => ancestor.id)
52
+ ];
53
+ if (new Set(ids).size !== ids.length || chain.truncated === true || chain.ancestors.length > above.depth - 1) return "relation-depth";
54
+ return false;
55
+ }
56
+ /** The instances a graph relation reads: the start, then ancestors until a restricted one or `depth`. */
57
+ function relationWalk(condition, row, reader) {
58
+ if (!isRecord(row)) return;
59
+ const first = relationId(ownGet(row, condition.field));
60
+ if (first === void 0) return;
61
+ const rowRestricted = condition.restricted !== void 0 && ownGet(row, condition.restricted) === true;
62
+ const hopped = condition.hops !== void 0 && condition.hops.length > 0;
63
+ if ((condition.parent === true || hopped) && rowRestricted) return;
64
+ const above = restrictedAbove(condition, row, reader);
65
+ if (above !== false) return above;
66
+ const start = hopped ? followHops(condition, first, reader) : { id: first };
67
+ if (start === void 0 || start === "relation-unavailable") return start;
68
+ const id = start.id;
69
+ if (condition.depth === 0 || rowRestricted) return {
70
+ ids: [id],
71
+ truncated: false
72
+ };
73
+ const chain = reader.chain({
74
+ resource: condition.resource,
75
+ id,
76
+ depth: condition.depth
77
+ });
78
+ if (chain === "pending" || chain === "failed") return "relation-unavailable";
79
+ const ids = [id];
80
+ const stops = condition.passRestricted !== true;
81
+ let stopped = stops && chain.restricted === true;
82
+ if (!stopped) for (const ancestor of chain.ancestors.slice(0, condition.depth)) {
83
+ ids.push(ancestor.id);
84
+ if (stops && ancestor.restricted === true) {
85
+ stopped = true;
86
+ break;
87
+ }
88
+ }
89
+ if (new Set(ids).size !== ids.length) return "relation-depth";
90
+ return {
91
+ ids,
92
+ truncated: !stopped && (chain.ancestors.length > condition.depth || chain.truncated === true)
93
+ };
94
+ }
95
+ /**
96
+ * Whether the subject holds the relation on the row's instance or an
97
+ * ancestor within `depth`. A cycle is `relation-depth`; so is a chain that
98
+ * goes on past `depth` with no holder below it. Any read the instance could
99
+ * not answer is `relation-unavailable` unless a holder was found elsewhere.
100
+ */
101
+ function resolveRelated(condition, row, subject, now, reader, permitted) {
102
+ if (condition.permission !== void 0) return resolveInherited(condition, condition.permission, row, reader, permitted);
103
+ const principal = subject.principal;
104
+ if (principal === null) return false;
105
+ const walk = relationWalk(condition, row, reader);
106
+ if (walk === void 0) return false;
107
+ if (walk === "relation-depth" || walk === "relation-unavailable") return walk;
108
+ if (condition.ids !== void 0) {
109
+ const held = new Set(condition.ids);
110
+ if (walk.ids.some((id) => held.has(id))) return true;
111
+ return walk.truncated ? "relation-depth" : false;
112
+ }
113
+ let unavailable = false;
114
+ let deep = false;
115
+ const explored = /* @__PURE__ */ new Map();
116
+ for (const id of walk.ids) {
117
+ const verdict = holdsRelation({
118
+ resource: condition.resource,
119
+ id,
120
+ relation: condition.relation
121
+ }, principal.id, now, reader, 16, /* @__PURE__ */ new Set(), explored);
122
+ if (verdict === true) return true;
123
+ if (verdict === "relation-unavailable") unavailable = true;
124
+ else if (verdict === "relation-depth") deep = true;
125
+ }
126
+ if (unavailable) return "relation-unavailable";
127
+ return walk.truncated || deep ? "relation-depth" : false;
128
+ }
129
+ function resolveInherited(condition, permission, row, reader, permitted) {
130
+ const walk = relationWalk(condition, row, reader);
131
+ if (walk === void 0) return false;
132
+ if (walk === "relation-depth" || walk === "relation-unavailable") return walk;
133
+ if (permitted === void 0) return "relation-unavailable";
134
+ let unknown = false;
135
+ for (const id of walk.ids) {
136
+ const verdict = permitted(condition.resource, id, permission);
137
+ if (verdict === true) return true;
138
+ if (verdict !== false && unknown === false) unknown = verdict;
139
+ }
140
+ return unknown;
141
+ }
142
+ function groupKey(group) {
143
+ return JSON.stringify([
144
+ group.resource,
145
+ group.id,
146
+ group.relation
147
+ ]);
148
+ }
149
+ /**
150
+ * Whether the principal holds `at.relation` on one instance, directly or
151
+ * through a group whose members hold it. Groups of `at`'s own resource nest
152
+ * at most `budget` deep; a group of another resource gets a fresh budget
153
+ * (declarations rule out cycles across resources). A group met twice on one
154
+ * path, or one past the budget, is `relation-depth`. `explored` holds the
155
+ * budget each group was walked with across the whole walk: a group already
156
+ * walked with as much budget adds nothing, since its verdict already reached
157
+ * the caller, so shared sub-groups cost one walk rather than one per path.
158
+ */
159
+ function holdsRelation(at, principalId, now, reader, budget, seen, explored) {
160
+ const key = groupKey(at);
161
+ const walked = explored.get(key);
162
+ if (walked !== void 0 && walked >= budget) return false;
163
+ explored.set(key, budget);
164
+ const holders = reader.holders(at);
165
+ if (holders === "pending" || holders === "failed") return "relation-unavailable";
166
+ if (holders.some((holder) => holdsNow(holder, principalId, now))) return true;
167
+ const path = new Set(seen).add(key);
168
+ let unavailable = false;
169
+ let deep = false;
170
+ for (const holder of holders) {
171
+ if (!("group" in holder) || !activeNow(holder, now)) continue;
172
+ const nested = holder.group.resource === at.resource;
173
+ if (nested && budget <= 0 || path.has(groupKey(holder.group))) {
174
+ deep = true;
175
+ continue;
176
+ }
177
+ const verdict = holdsRelation(holder.group, principalId, now, reader, nested ? budget - 1 : 16, path, explored);
178
+ if (verdict === true) return true;
179
+ if (verdict === "relation-unavailable") unavailable = true;
180
+ else if (verdict === "relation-depth") deep = true;
181
+ }
182
+ if (unavailable) return "relation-unavailable";
183
+ return deep ? "relation-depth" : false;
184
+ }
185
+ //#endregion
186
+ export { resolveRelated as n, relationWalk as t };