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,623 @@
1
+ import { a as sole, n as isReadonlyArray, t as compact } from "./compact-CAf557ZB.js";
2
+ import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
+ import { i as ownKeys, n as isForbiddenKey, t as assertSafeKey } from "./paths-DXSHAMIa.js";
4
+ import { c as isConditionRef, l as isSqlFunctionField, n as isSubjectRef, o as isCondition, s as isConditionDate } from "./refs-K6eWUJ0H.js";
5
+ import { c as isUserApprover, i as flattenApprovers, l as user, o as isAnyOfInput, r as approverLeaves, s as isPermissionApprover } from "./approvers-CqPOLD-o.js";
6
+ import { c as listPermissions, o as isPermission } from "./permission-registry-Br4jSNVi.js";
7
+ import { n as assertMetaValue, r as parseAppData, t as assertAppData } from "./app-data-MuyzVqX8.js";
8
+ import { d as isSelfParented } from "./resource-relations-D_jw0BFx.js";
9
+ import { a as durationOf, r as assertDuration } from "./time-DkWjdL98.js";
10
+ import { a as authenticated, d as roleScopeOf, g as isRole, o as flattenGrantee, r as asGrantee, u as roleNameOf } from "./grantee-Cn1HyUsI.js";
11
+ import { c as sanitizeFields, n as normalizeValidity } from "./validity-CZ7-y0Cj.js";
12
+ //#region src/conditions/opaque.ts
13
+ function opaque(input) {
14
+ return freezeDeep({
15
+ op: "opaque",
16
+ sql: input.sql,
17
+ fingerprint: input.fingerprint
18
+ });
19
+ }
20
+ //#endregion
21
+ //#region src/conditions/sql-function-assert.ts
22
+ const IDENT = /^[A-Za-z_][A-Za-z0-9_]*$/u;
23
+ function assertSqlFunctionName(name) {
24
+ const parts = name.split(".");
25
+ if (parts.length === 0 || parts.length > 2) throw new Error(`PermDock: sqlFunction name '${name}' is not a SQL identifier`);
26
+ for (const part of parts) {
27
+ if (!IDENT.test(part)) throw new Error(`PermDock: sqlFunction name '${name}' is not a SQL identifier`);
28
+ assertSafeKey(part, "sqlFunction name");
29
+ }
30
+ }
31
+ function assertSqlFunctionArg(arg) {
32
+ if (isSqlFunctionField(arg)) assertSafeKey(arg.field, "sqlFunction argument field");
33
+ }
34
+ function assertPortableTwin(condition, depth = 0) {
35
+ /* v8 ignore next 3 */
36
+ if (depth > 32) throw new Error("PermDock: sqlFunction twin is nested too deeply");
37
+ switch (condition.op) {
38
+ case "opaque": throw new Error("PermDock: sqlFunction twin must not be opaque");
39
+ case "sqlFunction": throw new Error("PermDock: sqlFunction twin must not nest sqlFunction");
40
+ case "related": throw new Error("PermDock: sqlFunction twin must not read the relation graph");
41
+ case "and":
42
+ case "or":
43
+ for (const child of condition.conditions) assertPortableTwin(child, depth + 1);
44
+ break;
45
+ case "not": assertPortableTwin(condition.condition, depth + 1);
46
+ }
47
+ }
48
+ //#endregion
49
+ //#region src/conditions/normalize.ts
50
+ const FIELD_OPS = /* @__PURE__ */ new Set([
51
+ "eq",
52
+ "ne",
53
+ "gt",
54
+ "gte",
55
+ "lt",
56
+ "lte",
57
+ "contains",
58
+ "in",
59
+ "notIn",
60
+ "isNull"
61
+ ]);
62
+ function toValue(raw) {
63
+ if (isSubjectRef(raw) || isConditionRef(raw)) return freezeDeep({ ref: raw.ref });
64
+ if (raw instanceof Date) return freezeDeep({ date: raw.toISOString() });
65
+ if (isConditionDate(raw)) return freezeDeep({ date: raw.date });
66
+ if (Array.isArray(raw)) return raw.map((item) => toValue(item));
67
+ if (raw === null || typeof raw === "string" || typeof raw === "number" || typeof raw === "boolean") return raw;
68
+ throw new Error("PermDock: unsupported condition value");
69
+ }
70
+ function flatten(op, conditions) {
71
+ const out = [];
72
+ for (const condition of conditions) if (condition.op === op) out.push(...condition.conditions);
73
+ else out.push(condition);
74
+ return out;
75
+ }
76
+ function collapse(condition) {
77
+ if (condition.op === "and" || condition.op === "or") {
78
+ const flat = flatten(condition.op, condition.conditions).map(collapse);
79
+ if (flat.length === 0) throw new Error(`PermDock: empty ${condition.op} condition`);
80
+ const single = sole(flat);
81
+ if (single !== void 0) return single;
82
+ return freezeDeep({
83
+ op: condition.op,
84
+ conditions: flat
85
+ });
86
+ }
87
+ if (condition.op === "not") return freezeDeep({
88
+ op: "not",
89
+ condition: collapse(condition.condition)
90
+ });
91
+ if (condition.op === "sqlFunction") return freezeDeep({
92
+ op: "sqlFunction",
93
+ name: condition.name,
94
+ args: condition.args,
95
+ twin: collapse(condition.twin)
96
+ });
97
+ return freezeDeep(condition);
98
+ }
99
+ function fieldCondition(field, raw) {
100
+ assertSafeKey(field, "condition field");
101
+ if (isCondition(raw) && (raw.op === "opaque" || raw.op === "sqlFunction")) return raw.op === "sqlFunction" ? normalizeSqlFunction(raw) : raw;
102
+ if (raw !== null && typeof raw === "object" && !isSubjectRef(raw) && !isConditionRef(raw) && !isConditionDate(raw) && !Array.isArray(raw) && !(raw instanceof Date)) {
103
+ const keys = ownKeys(raw);
104
+ if (keys.length === 1 && keys[0] !== void 0 && FIELD_OPS.has(keys[0])) {
105
+ const op = keys[0];
106
+ const value = raw[op];
107
+ if (op === "isNull") {
108
+ if (typeof value !== "boolean") throw new TypeError("PermDock: isNull requires a boolean");
109
+ return collapse({
110
+ op: "isNull",
111
+ field,
112
+ value
113
+ });
114
+ }
115
+ if (op === "in" || op === "notIn") {
116
+ if (isSubjectRef(value) || isConditionRef(value)) return collapse({
117
+ op,
118
+ field,
119
+ value: { ref: value.ref }
120
+ });
121
+ if (!Array.isArray(value)) throw new TypeError(`PermDock: ${op} requires an array or subject reference`);
122
+ return collapse({
123
+ op,
124
+ field,
125
+ value: value.map((item) => toValue(item))
126
+ });
127
+ }
128
+ return collapse({
129
+ op,
130
+ field,
131
+ value: toValue(value)
132
+ });
133
+ }
134
+ }
135
+ return collapse({
136
+ op: "eq",
137
+ field,
138
+ value: toValue(raw)
139
+ });
140
+ }
141
+ function normalizeSqlFunction(input) {
142
+ assertSqlFunctionName(input.name);
143
+ const args = input.args ?? [];
144
+ for (const arg of args) assertSqlFunctionArg(arg);
145
+ if (isCondition(input.twin) && input.twin.op === "sqlFunction") throw new Error("PermDock: sqlFunction twin must not nest sqlFunction");
146
+ const twin = isCondition(input.twin) ? collapse(input.twin) : normalizeWhere(input.twin);
147
+ assertPortableTwin(twin);
148
+ return freezeDeep({
149
+ op: "sqlFunction",
150
+ name: input.name,
151
+ args,
152
+ twin
153
+ });
154
+ }
155
+ /** `{ session: … }` under `subject`; any other value is a comparison on a `subject` field. */
156
+ function isSubjectCondition(value) {
157
+ return value !== null && typeof value === "object" && !Array.isArray(value) && Object.hasOwn(value, "session");
158
+ }
159
+ function subjectCondition(value) {
160
+ const session = value["session"];
161
+ if (ownKeys(value).length !== 1 || session === null || typeof session !== "object" || ownKeys(session).length !== 1 || Reflect.get(session, "live") !== true) throw new TypeError("PermDock: a subject condition is { subject: { session: { live: true } } }");
162
+ return freezeDeep({ op: "liveSession" });
163
+ }
164
+ function normalizeWhere(input) {
165
+ if (isCondition(input)) {
166
+ if (input.op === "sqlFunction") return collapse(normalizeSqlFunction(input));
167
+ return collapse(input);
168
+ }
169
+ if (input !== null && typeof input === "object" && "sql" in input && "fingerprint" in input && typeof input.sql === "string") return opaque({
170
+ sql: input.sql,
171
+ fingerprint: input.fingerprint
172
+ });
173
+ if (input === null || typeof input !== "object" || Array.isArray(input)) throw new Error("PermDock: condition must be an object");
174
+ const parts = [];
175
+ for (const key of Object.keys(input)) {
176
+ const value = input[key];
177
+ if (key === "and") {
178
+ if (!Array.isArray(value)) throw new TypeError("PermDock: and requires an array");
179
+ parts.push(collapse({
180
+ op: "and",
181
+ conditions: value.map(normalizeWhere)
182
+ }));
183
+ continue;
184
+ }
185
+ if (key === "or") {
186
+ if (!Array.isArray(value)) throw new TypeError("PermDock: or requires an array");
187
+ parts.push(collapse({
188
+ op: "or",
189
+ conditions: value.map(normalizeWhere)
190
+ }));
191
+ continue;
192
+ }
193
+ if (key === "not") {
194
+ parts.push(collapse({
195
+ op: "not",
196
+ condition: normalizeWhere(value)
197
+ }));
198
+ continue;
199
+ }
200
+ if (key === "subject" && isSubjectCondition(value)) {
201
+ parts.push(subjectCondition(value));
202
+ continue;
203
+ }
204
+ parts.push(fieldCondition(key, value));
205
+ }
206
+ if (parts.length === 0) throw new Error("PermDock: empty condition");
207
+ const single = sole(parts);
208
+ if (single !== void 0) return single;
209
+ return collapse({
210
+ op: "and",
211
+ conditions: parts
212
+ });
213
+ }
214
+ //#endregion
215
+ //#region src/core/approval-normalize.ts
216
+ /** Every approver a requirement names: `by`, each stage and its escalation, and `escalation.to`, inside `anyOf` groups too. */
217
+ function approversOf(requirement) {
218
+ return [
219
+ ...approverLeaves(requirement.by),
220
+ ...(requirement.stages ?? []).flatMap((stage) => approverLeaves(stage.by).concat(approverLeaves(stage.escalation?.to))),
221
+ ...approverLeaves(requirement.escalation?.to)
222
+ ];
223
+ }
224
+ function asApprover(input) {
225
+ if (isPermissionApprover(input)) {
226
+ if (typeof input.permission !== "string" || input.permission === "") throw new Error("PermDock: a permission approver needs a permission key");
227
+ return Object.freeze({
228
+ kind: "permission",
229
+ permission: input.permission
230
+ });
231
+ }
232
+ if (isAnyOfInput(input)) {
233
+ if (!Array.isArray(input.of) || input.of.length === 0) throw new Error("PermDock: anyOf() needs at least one approver");
234
+ const of = input.of.map((item) => {
235
+ const normalized = asApprover(item);
236
+ const items = flattenApprovers(normalized);
237
+ if (items.length === 0) throw new Error("PermDock: an anyOf() item names no approver");
238
+ const [first] = items;
239
+ return isReadonlyArray(normalized) || first === void 0 ? items : first;
240
+ });
241
+ return Object.freeze({
242
+ kind: "any-of",
243
+ of: Object.freeze(of)
244
+ });
245
+ }
246
+ if (isReadonlyArray(input)) {
247
+ const items = [];
248
+ for (const item of input) items.push(...flattenApprovers(asApprover(item)));
249
+ return items;
250
+ }
251
+ if (isUserApprover(input)) return user(input.id);
252
+ return asGrantee(input);
253
+ }
254
+ function normalizeApproval(approval, permission) {
255
+ if (approval === void 0) return;
256
+ if (approval === "human") return "human";
257
+ if (approval.staleOn !== void 0 && approval.staleOn !== "resource-change") throw new Error(`PermDock: approval staleOn must be 'resource-change', got '${String(approval.staleOn)}'`);
258
+ const label = permission ?? "a grant";
259
+ assertQuorum(approval.quorum, "approval.quorum", label);
260
+ if (approval.ttl !== void 0) assertDuration(approval.ttl, `approval.ttl on '${label}'`);
261
+ const escalation = normalizeEscalation(approval.escalation, label);
262
+ const mode = approval.mode ?? "any";
263
+ if (mode !== "any") return compact({
264
+ mode,
265
+ stages: normalizeStages(approval, mode, label),
266
+ distinct: approval.distinct,
267
+ staleOn: approval.staleOn,
268
+ ttl: approval.ttl,
269
+ escalation
270
+ });
271
+ if (approval.stages !== void 0) throw new Error(`PermDock: approval.stages on '${label}' needs mode: 'all' or 'sequential'`);
272
+ const by = approval.by === void 0 ? void 0 : asApprover(approval.by);
273
+ if (by === void 0 && approval.distinct === void 0 && approval.staleOn === void 0 && approval.quorum === void 0 && approval.ttl === void 0 && escalation === void 0) return "human";
274
+ return compact({
275
+ by: by ?? authenticated(),
276
+ distinct: approval.distinct,
277
+ staleOn: approval.staleOn,
278
+ quorum: approval.quorum,
279
+ ttl: approval.ttl,
280
+ escalation
281
+ });
282
+ }
283
+ function assertQuorum(quorum, name, label) {
284
+ if (quorum !== void 0 && (!Number.isInteger(quorum) || quorum < 1)) throw new Error(`PermDock: ${name} on '${label}' must be an integer of at least 1, got ${String(quorum)}`);
285
+ }
286
+ function normalizeStages(approval, mode, label) {
287
+ if (mode !== "all" && mode !== "sequential") throw new Error(`PermDock: approval.mode on '${label}' must be 'any', 'all' or 'sequential', got '${mode}'`);
288
+ if (approval.by !== void 0 || approval.quorum !== void 0) throw new Error(`PermDock: approval on '${label}' sets mode '${mode}': put by and quorum on each stage`);
289
+ const stages = approval.stages ?? [];
290
+ if (stages.length === 0) throw new Error(`PermDock: approval mode '${mode}' on '${label}' needs at least one stage`);
291
+ return stages.map((stage, index) => {
292
+ assertQuorum(stage.quorum, `approval.stages[${index}].quorum`, label);
293
+ const by = asApprover(stage.by);
294
+ if (flattenApprovers(by).length === 0) throw new Error(`PermDock: approval.stages[${index}].by on '${label}' names no approver`);
295
+ return compact({
296
+ by,
297
+ quorum: stage.quorum,
298
+ escalation: normalizeEscalation(stage.escalation, label)
299
+ });
300
+ });
301
+ }
302
+ function normalizeEscalation(escalation, label) {
303
+ if (escalation === void 0) return;
304
+ assertDuration(escalation.after, `approval.escalation.after on '${label}'`);
305
+ return {
306
+ after: escalation.after,
307
+ to: asApprover(escalation.to)
308
+ };
309
+ }
310
+ /**
311
+ * A role with `activation` is eligible-only: it needs a positive `maxDuration`
312
+ * (Doctor PD033 warns without one). `justification` defaults to `'optional'`.
313
+ */
314
+ function activationApproval(option, roleName) {
315
+ const label = `activation of '${roleName}'`;
316
+ const approval = normalizeApproval(option, label);
317
+ if (approval !== void 0 && approval !== "human" && approversOf(approval).some((item) => item.kind === "relation")) throw new Error(`PermDock: approval on ${label} names a relation; an activation has no row to read it on`);
318
+ return approval;
319
+ }
320
+ /**
321
+ * A stale-on-change approval needs a row to version: an instance permission
322
+ * whose resource declares `version`.
323
+ */
324
+ function assertApprovalVersions(grants, resources) {
325
+ for (const grant of grants) {
326
+ const approval = grant.approval;
327
+ if (approval === void 0 || approval === "human" || approval.staleOn === void 0) continue;
328
+ if (grant.permission.kind !== "instance") throw new Error(`PermDock: approval staleOn on '${grant.permission.key}' needs an instance action; a collection action has no row to version`);
329
+ if (resources.get(grant.permission.resource)?.version === void 0) throw new Error(`PermDock: approval staleOn on '${grant.permission.key}' needs resource(..., { version: '<field>' }) on '${grant.permission.resource}'`);
330
+ }
331
+ }
332
+ /**
333
+ * A relation approver is checked by id, from the requested row: the
334
+ * relation lives on the permission's own resource (optionally up its parent
335
+ * chain), or at the end of a list of links from it.
336
+ */
337
+ function assertApprovalRelations(grants, resources) {
338
+ for (const grant of grants) {
339
+ const approval = grant.approval;
340
+ if (approval === void 0 || approval === "human") continue;
341
+ for (const item of approversOf(approval)) {
342
+ if (item.kind !== "relation") continue;
343
+ const label = `${grant.permission.key}: approver relation '${item.relation}'`;
344
+ if (grant.permission.kind !== "instance") throw new Error(`PermDock: ${label} needs an instance action; a collection action has no row to read it on`);
345
+ if (approverRelationResource(grant.permission.resource, item.through, resources) !== item.resource) throw new Error(`PermDock: ${label} must live on '${grant.permission.resource}' or at the end of its through links`);
346
+ if (resources.get(item.resource)?.relations[item.relation] === void 0) throw new Error(`PermDock: ${label} is not declared on '${item.resource}'`);
347
+ }
348
+ }
349
+ }
350
+ /** The resource a relation approver's `through` reaches from `start`, or `undefined`. */
351
+ function approverRelationResource(start, through, resources) {
352
+ if (through === void 0) return start;
353
+ if (through === "parent") return isSelfParented(resources.get(start)) ? start : void 0;
354
+ let current = start;
355
+ for (const name of through) {
356
+ const node = current === void 0 ? void 0 : resources.get(current);
357
+ current = node !== void 0 && Object.hasOwn(node.links, name) ? node.links[name]?.resource : void 0;
358
+ }
359
+ return current;
360
+ }
361
+ //#endregion
362
+ //#region src/core/limit-grants.ts
363
+ /** Throws at definition time for a `limit` no store could count. */
364
+ function assertLimit(limit, permissionKey) {
365
+ if (limit === void 0) return;
366
+ if (!Number.isSafeInteger(limit.count) || limit.count <= 0) throw new Error(`PermDock: limit count on '${permissionKey}' must be a positive integer`);
367
+ if (durationOf(limit.per) === void 0) throw new Error(`PermDock: limit per on '${permissionKey}' must be a whole number of seconds above 0 (3600 for an hour), got ${JSON.stringify(limit.per)}`);
368
+ if (limit.mode !== void 0 && limit.mode !== "hard" && limit.mode !== "soft") throw new Error(`PermDock: limit mode on '${permissionKey}' must be 'hard' or 'soft'`);
369
+ if (limit.alertAt !== void 0 && (typeof limit.alertAt !== "number" || !(limit.alertAt > 0 && limit.alertAt <= 1))) throw new Error(`PermDock: limit alertAt on '${permissionKey}' must be a fraction above 0 and at most 1`);
370
+ }
371
+ /** The declared fields of a validated `limit`, so extra keys never reach the grant. */
372
+ function normalizeLimit(limit) {
373
+ if (limit === void 0) return;
374
+ return {
375
+ count: limit.count,
376
+ per: limit.per,
377
+ ...limit.mode === void 0 ? {} : { mode: limit.mode },
378
+ ...limit.alertAt === void 0 ? {} : { alertAt: limit.alertAt }
379
+ };
380
+ }
381
+ //#endregion
382
+ //#region src/core/grant-builders.ts
383
+ function isClosure(value) {
384
+ return typeof value === "function";
385
+ }
386
+ function flattenPermissions(input) {
387
+ if (isPermission(input)) return [input];
388
+ if (isReadonlyArray(input)) return input.flatMap((item) => flattenPermissions(item));
389
+ return [...listPermissions(input)];
390
+ }
391
+ const GROUP = /^[a-z][a-z0-9_-]*$/u;
392
+ function grantGroup(group, key) {
393
+ if (group === void 0) return;
394
+ if (typeof group !== "string" || !GROUP.test(group) || group === "break-glass") throw new Error(`PermDock: group '${String(group)}' on ${key} must be lower case letters, digits, _ or -, start with a letter, and not be break-glass`);
395
+ return group;
396
+ }
397
+ function makeGrant(permission, effect, condition) {
398
+ const toInput = isClosure(condition) ? void 0 : condition?.to;
399
+ const to = toInput === void 0 ? {
400
+ kind: "role",
401
+ role: "",
402
+ scope: "global"
403
+ } : asGrantee(toInput);
404
+ if (isClosure(condition)) return {
405
+ permission,
406
+ effect,
407
+ to,
408
+ portable: false,
409
+ closure: condition
410
+ };
411
+ const whereInput = condition?.where;
412
+ const checkInput = condition?.check;
413
+ if (whereInput !== void 0 && permission.kind === "collection") throw new Error(`PermDock: where is not allowed on collection action '${permission.key}'`);
414
+ const where = whereInput === void 0 ? void 0 : normalizeWhere(whereInput);
415
+ const check = checkInput === void 0 ? void 0 : normalizeWhere(checkInput);
416
+ assertLimit(condition?.limit, permission.key);
417
+ const purpose = condition?.purpose === void 0 || condition.purpose.length === 0 ? void 0 : Object.freeze([...new Set(condition.purpose)]);
418
+ const portable = condition?.limit === void 0 && purpose === void 0;
419
+ const requires = requiredKey(condition?.requires, permission, effect);
420
+ return compact({
421
+ permission,
422
+ effect,
423
+ to,
424
+ where,
425
+ check,
426
+ approval: normalizeApproval(condition?.approval, permission.key),
427
+ portable,
428
+ limit: normalizeLimit(condition?.limit),
429
+ fields: sanitizeFields(condition?.fields),
430
+ name: condition?.name,
431
+ group: grantGroup(condition?.group, permission.key),
432
+ meta: grantMeta(condition?.meta, permission.key, void 0),
433
+ obligations: appObligations(condition?.obligations, permission.key, effect),
434
+ purpose,
435
+ validity: normalizeValidity(condition ?? {}, permission.key),
436
+ requires
437
+ });
438
+ }
439
+ /** Checks a grant's `meta`: plain JSON, string `description`, `x` through the schema when given. */
440
+ function grantMeta(meta, key, schema) {
441
+ if (meta === void 0) return;
442
+ assertAppData(meta, `meta of a grant on ${key}`);
443
+ const { description, x } = meta;
444
+ if (description !== void 0 && typeof description !== "string") throw new TypeError(`PermDock: meta.description of a grant on ${key} must be a string`);
445
+ return freezeDeep(compact({
446
+ description,
447
+ x: x === void 0 ? void 0 : parseAppData(schema, x, `meta.x of a grant on ${key}`)
448
+ }));
449
+ }
450
+ function appObligations(input, key, effect) {
451
+ if (input === void 0) return;
452
+ if (effect !== "allow") throw new Error(`PermDock: obligations are allowed on an allow only; '${key}' is a deny`);
453
+ const list = input;
454
+ if (!Array.isArray(list)) throw new TypeError(`PermDock: obligations on '${key}' must be a list`);
455
+ const items = list;
456
+ const seen = /* @__PURE__ */ new Set();
457
+ const out = [];
458
+ for (const item of items) {
459
+ const entry = typeof item === "object" && item !== null ? item : void 0;
460
+ const name = typeof item === "string" ? item : entry === void 0 ? void 0 : Reflect.get(entry, "name");
461
+ if (typeof name !== "string" || !GROUP.test(name)) throw new Error(`PermDock: obligation '${String(name)}' on '${key}' must be lower case letters, digits, _ or -, starting with a letter`);
462
+ if (seen.has(name)) throw new Error(`PermDock: obligation '${name}' is listed twice on '${key}'`);
463
+ seen.add(name);
464
+ const detail = entry === void 0 ? void 0 : Reflect.get(entry, "detail");
465
+ if (detail === void 0) {
466
+ out.push({
467
+ kind: "app",
468
+ name
469
+ });
470
+ continue;
471
+ }
472
+ assertMetaValue(detail, `detail of obligation '${name}' on '${key}'`);
473
+ out.push({
474
+ kind: "app",
475
+ name,
476
+ detail
477
+ });
478
+ }
479
+ return out.length === 0 ? void 0 : freezeDeep(out);
480
+ }
481
+ /** Re-checks every grant's `meta.x` with the policy's grant schema, keeping the schema output. */
482
+ function withGrantSchema(grant, schema) {
483
+ const meta = grant.meta;
484
+ if (schema === void 0 || meta?.x === void 0) return grant;
485
+ return freezeDeep({
486
+ ...grant,
487
+ meta: grantMeta(meta, grant.permission.key, schema) ?? meta
488
+ });
489
+ }
490
+ function requiredKey(input, permission, effect) {
491
+ if (input === void 0) return;
492
+ if (effect !== "allow") throw new Error(`PermDock: requires is allowed on an allow only; '${permission.key}' is a deny`);
493
+ if (permission.kind !== "instance") throw new Error(`PermDock: requires on '${permission.key}' needs an instance action; a collection action has no row whose scope it can check`);
494
+ const list = Array.isArray(input) ? input : [input];
495
+ if (list.length === 0 || !list.every(isPermission)) throw new TypeError(`PermDock: requires on '${permission.key}' must be a permission leaf or a non-empty list of them`);
496
+ return Object.freeze([...new Set(list.map((leaf) => leaf.key))]);
497
+ }
498
+ function allow(permission, condition) {
499
+ const grants = flattenPermissions(permission).map((leaf) => makeGrant(leaf, "allow", condition));
500
+ return sole(grants) ?? grants;
501
+ }
502
+ function deny(permission, condition) {
503
+ const grants = flattenPermissions(permission).map((leaf) => makeGrant(leaf, "deny", condition));
504
+ return sole(grants) ?? grants;
505
+ }
506
+ function flattenGrants(grants) {
507
+ const out = [];
508
+ for (const grant of grants) if (Array.isArray(grant)) out.push(...grant);
509
+ else out.push(grant);
510
+ return out;
511
+ }
512
+ function completeGrant(grant) {
513
+ const to = flattenGrantee(grant.to);
514
+ const first = to[0];
515
+ if (to.length === 1 && first?.kind === "role" && first.role === "") throw new Error("PermDock: grant is missing to");
516
+ return freezeDeep({
517
+ ...grant,
518
+ role: roleNameOf(grant.to),
519
+ scope: roleScopeOf(grant.to)
520
+ });
521
+ }
522
+ //#endregion
523
+ //#region src/core/role-builder.ts
524
+ function resolveRoleScope(on) {
525
+ if (on === void 0) return "global";
526
+ if (typeof on === "string") {
527
+ if (on === "global" || on === "resource") throw new Error(`PermDock: role on: '${on}' is not a scope name`);
528
+ return on;
529
+ }
530
+ const permissions = flattenPermissions(on);
531
+ const names = new Set(permissions.map((permission) => permission.resource));
532
+ const [resource] = names;
533
+ if (names.size !== 1 || resource === void 0) throw new Error("PermDock: role on: resource must name exactly one resource");
534
+ return { resource };
535
+ }
536
+ function role(name, grants, options) {
537
+ if (options !== void 0 && Object.hasOwn(options, "restricted")) throw new Error(`PermDock: role option 'restricted' is reserved`);
538
+ const leaf = isRole(name) ? name : void 0;
539
+ const roleName = leaf?.key ?? name;
540
+ const scope = resolveRoleScope(options?.on ?? leaf?.on);
541
+ const assignable = options?.assignable ?? leaf?.assignable ?? scope !== "global";
542
+ const rules = roleRules(roleName, scope, options);
543
+ const activation = normalizeActivation(roleName, options?.activation);
544
+ const roleGrantee = asGrantee(freezeDeep({
545
+ kind: "role",
546
+ role: roleName,
547
+ scope
548
+ }));
549
+ const normalised = flattenGrants(grants).map((grant) => {
550
+ const items = flattenGrantee(grant.to);
551
+ const first = items[0];
552
+ const to = items.length === 1 && first?.kind === "role" ? roleGrantee : grant.to;
553
+ return freezeDeep({
554
+ ...grant,
555
+ to,
556
+ role: roleName,
557
+ scope: roleScopeOf(to, scope)
558
+ });
559
+ });
560
+ return freezeDeep(compact({
561
+ name: roleName,
562
+ grants: normalised,
563
+ on: options?.on ?? leaf?.on,
564
+ assignable,
565
+ exclusiveWith: options?.exclusiveWith,
566
+ ...rules,
567
+ meta: options?.meta ?? leaf?.meta,
568
+ activation
569
+ }));
570
+ }
571
+ function normalizeActivation(roleName, option) {
572
+ if (option === void 0) return;
573
+ const justification = option.justification ?? "optional";
574
+ if (justification !== "required" && justification !== "optional") throw new Error(`PermDock: role '${roleName}' activation justification must be 'required' or 'optional'`);
575
+ if (option.maxDuration !== void 0) assertDuration(option.maxDuration, `activation.maxDuration on role '${roleName}'`);
576
+ return compact({
577
+ maxDuration: option.maxDuration,
578
+ justification,
579
+ approval: activationApproval(option.approval, roleName),
580
+ assurance: normalizeAssurance(option.assurance)
581
+ });
582
+ }
583
+ function normalizeAssurance(input) {
584
+ if (input === void 0) return;
585
+ const acr = input.acr === void 0 || input.acr.length === 0 ? void 0 : Object.freeze([...input.acr]);
586
+ const amr = input.amr === void 0 || input.amr.length === 0 ? void 0 : Object.freeze([...input.amr]);
587
+ const maxAge = typeof input.maxAge === "number" && input.maxAge >= 0 ? input.maxAge : void 0;
588
+ if (acr === void 0 && amr === void 0 && maxAge === void 0) return;
589
+ return compact({
590
+ maxAge,
591
+ acr,
592
+ amr
593
+ });
594
+ }
595
+ function nameList(roleName, option, value) {
596
+ if (value === void 0) return;
597
+ if (!Array.isArray(value) || value.some((item) => typeof item !== "string" || item === "" || isForbiddenKey(item))) throw new Error(`PermDock: role '${roleName}' ${option} must be a list of names`);
598
+ return [...new Set(value)];
599
+ }
600
+ function holderCount(roleName, option, value) {
601
+ if (value === void 0) return;
602
+ if (typeof value !== "number" || !Number.isInteger(value) || value < 0) throw new Error(`PermDock: role '${roleName}' ${option} must be a whole number of holders`);
603
+ return value;
604
+ }
605
+ /** Ownership rules count holders per scope instance, so they need a named-scope role. */
606
+ function roleRules(roleName, scope, options) {
607
+ const min = holderCount(roleName, "min", options?.min);
608
+ const max = holderCount(roleName, "max", options?.max);
609
+ const transferOnly = options?.transferOnly;
610
+ if (transferOnly !== void 0 && typeof transferOnly !== "boolean") throw new Error(`PermDock: role '${roleName}' transferOnly must be a boolean`);
611
+ if (max !== void 0 && max < 1) throw new Error(`PermDock: role '${roleName}' max must be at least 1`);
612
+ if (min !== void 0 && max !== void 0 && min > max) throw new Error(`PermDock: role '${roleName}' min must not exceed max`);
613
+ if ((min !== void 0 && min > 0 || max !== void 0 || transferOnly === true) && (typeof scope !== "string" || scope === "global")) throw new Error(`PermDock: role '${roleName}' min, max and transferOnly need on: '<scope>'`);
614
+ return compact({
615
+ min,
616
+ max,
617
+ transferOnly,
618
+ assigns: nameList(roleName, "assigns", options?.assigns),
619
+ for: nameList(roleName, "for", options?.for)
620
+ });
621
+ }
622
+ //#endregion
623
+ export { opaque as _, deny as a, withGrantSchema as c, assertApprovalVersions as d, normalizeApproval as f, assertSqlFunctionName as g, assertSqlFunctionArg as h, completeGrant as i, asApprover as l, assertPortableTwin as m, role as n, flattenGrants as o, normalizeWhere as p, allow as r, flattenPermissions as s, normalizeAssurance as t, assertApprovalRelations as u };
@@ -1,8 +1,8 @@
1
- import { t as compact } from "./compact-y6vfu2_f.js";
2
- import { o as requestFromContext } from "./http-SO7qGttf.js";
3
- import { n as tenantScope } from "./adapter-context-mlWsVGGg.js";
4
- import { t as adapterKernel } from "./bind-CuzGytRf.js";
5
- import { n as guardIterable } from "./stream-DDpvynSB.js";
1
+ import { t as compact } from "./compact-CAf557ZB.js";
2
+ import { s as requestFromContext } from "./http-BBoKefeS.js";
3
+ import { n as tenantScope } from "./adapter-context-CRhqyzCk.js";
4
+ import { t as adapterKernel } from "./bind-CZzhx-Vj.js";
5
+ import { r as guardIterable } from "./stream-CvdUS9V1.js";
6
6
  //#region src/server/rpc.ts
7
7
  /** The tRPC and oRPC error code for a Problem Details status. */
8
8
  function rpcCode(status) {
@@ -58,6 +58,15 @@ function bindRpcKernel(policy, options, adapter, contextOf, path) {
58
58
  const opts = optsByRequest.get(request);
59
59
  return opts === void 0 ? { tenant: void 0 } : scopeOf(opts);
60
60
  });
61
+ const guard = async (permission, data, opts, protectOptions) => {
62
+ const request = bind(opts);
63
+ const scope = await scopeOf(opts);
64
+ return {
65
+ request,
66
+ scope,
67
+ guard: await kernel.protect(permission, data === void 0 ? void 0 : () => data(opts), protectOptions)(request, scope)
68
+ };
69
+ };
61
70
  const evaluate = (request, opts) => {
62
71
  bind(opts);
63
72
  return request.method === "GET" ? evaluations.GET(request) : evaluations.POST(request);
@@ -70,14 +79,15 @@ function bindRpcKernel(policy, options, adapter, contextOf, path) {
70
79
  },
71
80
  scopeOf,
72
81
  connection,
73
- evaluate
82
+ evaluate,
83
+ guard
74
84
  };
75
85
  }
76
86
  /** Wraps a streamed result so revocation ends it and items the subscriber cannot read drop. */
77
- async function guardStream(source, open, permission, loadData, protectOptions, guard) {
87
+ async function guardStream(source, open, permission, data, protectOptions, guard) {
78
88
  const conn = await open(permission === null ? {} : compact({
79
89
  permission,
80
- data: loadData
90
+ data
81
91
  }));
82
92
  return guardIterable(source, conn, compact({
83
93
  items: protectOptions?.items,
@@ -0,0 +1 @@
1
+ export { t as run } from "./run-DOfMtc9V.js";