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,254 @@
1
+ import { t as compact } from "./compact-CAf557ZB.js";
2
+ import { n as freezeDeep, t as freezeCopy } from "./freeze-CrU8nQeX.js";
3
+ import { i as ownKeys, n as isForbiddenKey, t as assertSafeKey } from "./paths-DXSHAMIa.js";
4
+ import { c as listPermissions, o as isPermission } from "./permission-registry-Br4jSNVi.js";
5
+ import { i as readAppData, r as parseAppData, t as assertAppData } from "./app-data-MuyzVqX8.js";
6
+ //#region src/core/vocabulary.ts
7
+ const ROLE_KIND = "role";
8
+ const PLAN_KIND = "plan";
9
+ const TREE_X_SCHEMA = Symbol.for("permdock.x-schema");
10
+ function leafMeta(kind, key, meta, schema) {
11
+ if (meta === void 0) return freezeDeep({});
12
+ assertAppData(meta, `meta of ${kind} '${key}'`);
13
+ if (meta.x === void 0) return freezeDeep({ ...meta });
14
+ return freezeDeep({
15
+ ...meta,
16
+ x: parseAppData(schema, meta.x, `meta.x of ${kind} '${key}'`)
17
+ });
18
+ }
19
+ function makeRole(key, init, schema) {
20
+ assertSafeKey(key, "role");
21
+ const on = init.on;
22
+ const leaf = {
23
+ key,
24
+ assignable: init.assignable ?? on !== void 0,
25
+ meta: leafMeta("role", key, init.meta, schema)
26
+ };
27
+ if (on !== void 0) Object.assign(leaf, { on });
28
+ Object.defineProperty(leaf, "kind", {
29
+ value: ROLE_KIND,
30
+ enumerable: false,
31
+ writable: false,
32
+ configurable: false
33
+ });
34
+ return Object.freeze(leaf);
35
+ }
36
+ function makePlan(key, init, schema) {
37
+ assertSafeKey(key, "plan");
38
+ const leaf = {
39
+ key,
40
+ meta: leafMeta("plan", key, init.meta, schema)
41
+ };
42
+ Object.defineProperty(leaf, "kind", {
43
+ value: PLAN_KIND,
44
+ enumerable: false,
45
+ writable: false,
46
+ configurable: false
47
+ });
48
+ return Object.freeze(leaf);
49
+ }
50
+ function isRole(value) {
51
+ return value !== null && typeof value === "object" && "key" in value && typeof value.key === "string" && value.kind === "role";
52
+ }
53
+ function isPlan(value) {
54
+ return value !== null && typeof value === "object" && "key" in value && typeof value.key === "string" && value.kind === "plan";
55
+ }
56
+ function attachSchema(tree, schema) {
57
+ if (schema !== void 0) Object.defineProperty(tree, TREE_X_SCHEMA, {
58
+ value: schema,
59
+ enumerable: false,
60
+ writable: false,
61
+ configurable: false
62
+ });
63
+ }
64
+ /** The `x` schema a `defineRoles` or `definePlans` tree was built with. */
65
+ function treeXSchema(tree) {
66
+ if (tree === void 0 || !Object.hasOwn(tree, TREE_X_SCHEMA)) return;
67
+ return Reflect.get(tree, TREE_X_SCHEMA);
68
+ }
69
+ function defineRoles(input, options) {
70
+ const tree = {};
71
+ for (const key of Object.keys(input)) {
72
+ if (isForbiddenKey(key)) throw new Error(`PermDock: forbidden role key '${key}'`);
73
+ tree[key] = makeRole(key, input[key] ?? {}, options?.x);
74
+ }
75
+ attachSchema(tree, options?.x);
76
+ return freezeDeep(tree);
77
+ }
78
+ function definePlans(input, options) {
79
+ const tree = {};
80
+ for (const key of Object.keys(input)) {
81
+ if (isForbiddenKey(key)) throw new Error(`PermDock: forbidden plan key '${key}'`);
82
+ tree[key] = makePlan(key, input[key] ?? {}, options?.x);
83
+ }
84
+ attachSchema(tree, options?.x);
85
+ return freezeDeep(tree);
86
+ }
87
+ function listRoles(tree) {
88
+ if (tree === void 0) return [];
89
+ return ownKeys(tree).flatMap((key) => {
90
+ const leaf = tree[key];
91
+ return leaf === void 0 ? [] : [leaf];
92
+ });
93
+ }
94
+ function listPlans(tree) {
95
+ if (tree === void 0) return [];
96
+ return ownKeys(tree).flatMap((key) => {
97
+ const leaf = tree[key];
98
+ return leaf === void 0 ? [] : [leaf];
99
+ });
100
+ }
101
+ function findRole(tree, key) {
102
+ if (tree === void 0 || isForbiddenKey(key)) return;
103
+ return tree[key];
104
+ }
105
+ /**
106
+ * The meta of a role a source returned (a stored custom role): known string
107
+ * fields kept, `x` checked by the schema. Never throws; anything invalid is
108
+ * left out, and the role itself is never dropped for it.
109
+ */
110
+ function sourceRoleMeta(meta, schema) {
111
+ if (meta === null || typeof meta !== "object" || Array.isArray(meta)) return;
112
+ const text = (field) => {
113
+ const value = Object.hasOwn(meta, field) ? Reflect.get(meta, field) : void 0;
114
+ return typeof value === "string" ? value : void 0;
115
+ };
116
+ const rawX = Object.hasOwn(meta, "x") ? Reflect.get(meta, "x") : void 0;
117
+ const out = {};
118
+ for (const field of [
119
+ "title",
120
+ "description",
121
+ "audience"
122
+ ]) {
123
+ const value = text(field);
124
+ if (value !== void 0) out[field] = value;
125
+ }
126
+ if (rawX !== void 0) {
127
+ const x = readAppData(schema, rawX);
128
+ if (x !== void 0) out.x = x;
129
+ }
130
+ return Object.keys(out).length === 0 ? void 0 : freezeCopy(out);
131
+ }
132
+ function synthesiseRole(key, options) {
133
+ const on = options?.on;
134
+ const assignable = options?.assignable ?? false;
135
+ const meta = options?.meta;
136
+ if (on === void 0) return makeRole(key, meta === void 0 ? { assignable } : {
137
+ assignable,
138
+ meta
139
+ });
140
+ return makeRole(key, meta === void 0 ? {
141
+ on,
142
+ assignable
143
+ } : {
144
+ on,
145
+ assignable,
146
+ meta
147
+ });
148
+ }
149
+ function isGrantee(value) {
150
+ return value !== null && typeof value === "object" && "kind" in value && typeof value.kind === "string";
151
+ }
152
+ function anyone() {
153
+ return freezeDeep({ kind: "anyone" });
154
+ }
155
+ function authenticated() {
156
+ return freezeDeep({ kind: "authenticated" });
157
+ }
158
+ function relation(resource, name, options) {
159
+ const resourceName = listPermissions(resource)[0]?.resource;
160
+ if (resourceName === void 0) throw new Error("PermDock: relation() requires a resource tree");
161
+ const through = options?.through;
162
+ if (Array.isArray(through)) {
163
+ if (through.length === 0) throw new Error("PermDock: relation() through needs at least one link");
164
+ for (const link of through) if (typeof link !== "string" || link === "" || link === "parent") throw new Error("PermDock: relation() through lists link names; walk parents with through: 'parent' or depth");
165
+ } else if (through !== void 0 && through !== "parent") throw new Error(`PermDock: relation() through must be 'parent' or a list of link names (got '${String(through)}')`);
166
+ const depth = options?.depth;
167
+ if (depth !== void 0) {
168
+ if (through === void 0) throw new Error("PermDock: relation() depth needs through: 'parent' or a link list");
169
+ const hops = Array.isArray(through) ? through.length : 0;
170
+ if (!Number.isInteger(depth) || depth < 0 || depth + hops > 32) throw new Error(`PermDock: relation() depth must be an integer from 0 to 32, counting each link`);
171
+ }
172
+ return freezeDeep(compact({
173
+ kind: "relation",
174
+ resource: resourceName,
175
+ relation: name,
176
+ through: through === void 0 || through === "parent" ? through : [...through],
177
+ depth
178
+ }));
179
+ }
180
+ function inherit(permission, options) {
181
+ if (!isPermission(permission) || permission.kind === "collection") throw new Error("PermDock: inherit() takes an instance permission leaf");
182
+ const through = options.through;
183
+ const links = Array.isArray(through) ? through : void 0;
184
+ if (through !== "parent" && (links === void 0 || links.length === 0 || !links.every((link) => typeof link === "string" && link !== "" && link !== "parent"))) throw new Error("PermDock: inherit() through must be 'parent' or a non-empty list of link names");
185
+ return freezeDeep({
186
+ kind: "inherit",
187
+ permission: permission.key,
188
+ resource: permission.resource,
189
+ through: links === void 0 ? "parent" : links.map(String)
190
+ });
191
+ }
192
+ function plan(name) {
193
+ return freezeDeep({
194
+ kind: "plan",
195
+ plan: typeof name === "string" ? name : name.key
196
+ });
197
+ }
198
+ function actor(kind) {
199
+ return freezeDeep({
200
+ kind: "actor",
201
+ actor: kind
202
+ });
203
+ }
204
+ function assurance(options) {
205
+ const acr = options.acr === void 0 ? void 0 : typeof options.acr === "string" ? [options.acr] : options.acr;
206
+ const amr = options.amr === void 0 ? void 0 : typeof options.amr === "string" ? [options.amr] : options.amr;
207
+ return freezeDeep(compact({
208
+ kind: "assurance",
209
+ acr,
210
+ amr,
211
+ maxAge: options.maxAge
212
+ }));
213
+ }
214
+ function resolveRoleScope(on) {
215
+ return typeof on === "string" ? on : "global";
216
+ }
217
+ function asGrantee(input) {
218
+ if (Array.isArray(input)) {
219
+ const items = [];
220
+ for (const item of input) items.push(...flattenGrantee(asGrantee(item)));
221
+ return items;
222
+ }
223
+ if (typeof input === "string") return freezeDeep({
224
+ kind: "role",
225
+ role: input,
226
+ scope: "global"
227
+ });
228
+ if (isRole(input)) return freezeDeep({
229
+ kind: "role",
230
+ role: input.key,
231
+ scope: resolveRoleScope(input.on)
232
+ });
233
+ if (isPlan(input)) return freezeDeep({
234
+ kind: "plan",
235
+ plan: input.key
236
+ });
237
+ if (isGrantee(input)) return input;
238
+ throw new Error("PermDock: invalid grantee");
239
+ }
240
+ function flattenGrantee(input) {
241
+ if (input === void 0) return [];
242
+ if (Array.isArray(input)) return input;
243
+ return [input];
244
+ }
245
+ function roleNameOf(to) {
246
+ for (const item of flattenGrantee(to)) if (item.kind === "role") return item.role;
247
+ return null;
248
+ }
249
+ function roleScopeOf(to, fallback = "global") {
250
+ for (const item of flattenGrantee(to)) if (item.kind === "role") return item.scope;
251
+ return fallback;
252
+ }
253
+ //#endregion
254
+ export { listPlans as _, authenticated as a, synthesiseRole as b, plan as c, roleScopeOf as d, definePlans as f, isRole as g, isPlan as h, assurance as i, relation as l, findRole as m, anyone as n, flattenGrantee as o, defineRoles as p, asGrantee as r, inherit as s, actor as t, roleNameOf as u, listRoles as v, treeXSchema as x, sourceRoleMeta as y };
@@ -0,0 +1,271 @@
1
+ import { a as sole, t as compact } from "./compact-CAf557ZB.js";
2
+ import { a as expandRelation, c as isEdgeRelation, d as isSelfParented, l as isFieldRelation, m as restrictedStops, p as restrictedFor, s as isComputedRelation, u as isPrincipalRelation } from "./resource-relations-D_jw0BFx.js";
3
+ import { d as isoNow } from "./time-DkWjdL98.js";
4
+ import { c as rootScope, d as scopeList, o as resolveScope } from "./scopes-CUPSjo9q.js";
5
+ //#region src/core/grantee-conditions.ts
6
+ /**
7
+ * Where a graph relation starts on the row: its own id when the relation is
8
+ * on the row's resource, the parent field when it is on the parent resource.
9
+ * `undefined` when `through` cannot reach the relation's resource.
10
+ */
11
+ function relationStart(grantee, resource, target) {
12
+ if (resource === void 0 || target === void 0 || Array.isArray(grantee.through)) return;
13
+ const walks = grantee.through === "parent" && isSelfParented(target);
14
+ const requested = grantee.depth ?? 16;
15
+ const depth = walks ? Number.isInteger(requested) ? Math.min(Math.max(requested, 0), 32) : 0 : 0;
16
+ if (target.name === resource.name) return {
17
+ field: resource.id,
18
+ parent: false,
19
+ depth
20
+ };
21
+ if (grantee.through === "parent" && resource.parent?.resource === target.name) return {
22
+ field: resource.parent.field,
23
+ parent: true,
24
+ depth
25
+ };
26
+ }
27
+ /**
28
+ * A resource role held on self-parented `membershipResource` instances
29
+ * (`ids`) reaches rows below them: the row itself when it is of that
30
+ * resource, its parent field when its parent is, walked up to the default
31
+ * depth. `undefined` when the row is not on such a chain.
32
+ */
33
+ function resourceRoleCondition(resource, membershipResource, ids, resources) {
34
+ if (resource === void 0 || !isSelfParented(resources.get(membershipResource))) return;
35
+ const start = resource.name === membershipResource ? {
36
+ field: resource.id,
37
+ parent: false
38
+ } : resource.parent?.resource === membershipResource ? {
39
+ field: resource.parent.field,
40
+ parent: true
41
+ } : void 0;
42
+ if (start === void 0) return;
43
+ return compact({
44
+ op: "related",
45
+ resource: membershipResource,
46
+ relation: "",
47
+ ids: [...new Set(ids)].toSorted(),
48
+ field: start.field,
49
+ depth: 16,
50
+ parent: start.parent ? true : void 0,
51
+ restricted: restrictedFor(resource, "parent"),
52
+ passRestricted: passesRestricted(resources.get(membershipResource))
53
+ });
54
+ }
55
+ function passesRestricted(node) {
56
+ return node?.restricted !== void 0 && !restrictedStops(node, "parent") ? true : void 0;
57
+ }
58
+ function linkStop(resource, link) {
59
+ const restricted = restrictedFor(resource, link);
60
+ if (restricted === void 0) return {};
61
+ const parent = resource.parent;
62
+ if (parent === void 0 || !isSelfParented(resource)) return { restricted };
63
+ return {
64
+ restricted,
65
+ restrictedAncestors: {
66
+ resource: resource.name,
67
+ id: resource.id,
68
+ parent: parent.field,
69
+ field: restricted,
70
+ depth: 32
71
+ }
72
+ };
73
+ }
74
+ /**
75
+ * The link path from the row to the grantee's resource: the row field of
76
+ * the first link and each hop. `undefined` when a link is not declared or
77
+ * the path ends on another resource.
78
+ */
79
+ function relationHops(grantee, resource, resources) {
80
+ const through = grantee.through;
81
+ if (!Array.isArray(through) || resource === void 0) return;
82
+ const hops = [];
83
+ let current = resource;
84
+ let field;
85
+ for (const link of through) {
86
+ const spec = current !== void 0 && Object.hasOwn(current.links, link) ? current.links[link] : void 0;
87
+ if (spec === void 0) return;
88
+ field ??= spec.field;
89
+ hops.push({
90
+ link,
91
+ resource: spec.resource
92
+ });
93
+ current = resources?.get(spec.resource);
94
+ }
95
+ if (field === void 0 || current === void 0 || current.name !== grantee.resource) return;
96
+ const depth = grantee.depth ?? 0;
97
+ if (depth > 0 && !isSelfParented(current)) return;
98
+ return {
99
+ field,
100
+ hops,
101
+ depth
102
+ };
103
+ }
104
+ /**
105
+ * Whether the grantee needs the relation graph: a `through` walk, an edge
106
+ * table, or an `includes` that reaches one.
107
+ */
108
+ function isGraphRelation(grantee, resources) {
109
+ if (grantee.through !== void 0) return true;
110
+ const node = resources?.get(grantee.resource);
111
+ return expandRelation(node, grantee.relation).some((name) => isEdgeRelation(node?.relations[name]));
112
+ }
113
+ function periodConditions(spec, now) {
114
+ const out = [];
115
+ const startsAt = spec.period?.startsAt;
116
+ if (startsAt !== void 0) out.push({
117
+ op: "or",
118
+ conditions: [{
119
+ op: "isNull",
120
+ field: startsAt,
121
+ value: true
122
+ }, {
123
+ op: "lte",
124
+ field: startsAt,
125
+ value: now
126
+ }]
127
+ });
128
+ const expiresAt = spec.period?.expiresAt;
129
+ if (expiresAt !== void 0) out.push({
130
+ op: "or",
131
+ conditions: [{
132
+ op: "isNull",
133
+ field: expiresAt,
134
+ value: true
135
+ }, {
136
+ op: "gt",
137
+ field: expiresAt,
138
+ value: now
139
+ }]
140
+ });
141
+ return out;
142
+ }
143
+ function relationCondition(grantee, resource, scopes = scopeList(void 0), options = {}) {
144
+ const target = grantee.resource === resource?.name ? resource : options.resources?.get(grantee.resource);
145
+ if (isGraphRelation(grantee, options.resources ?? targetMap(target))) {
146
+ const spec = target?.relations[grantee.relation];
147
+ if (spec === void 0 || isFieldRelation(spec) && spec.memberOf !== void 0) return;
148
+ if (Array.isArray(grantee.through)) {
149
+ const path = relationHops(grantee, resource, options.resources);
150
+ if (path === void 0 || target === void 0) return;
151
+ return compact({
152
+ op: "related",
153
+ resource: target.name,
154
+ relation: grantee.relation,
155
+ field: path.field,
156
+ depth: path.depth,
157
+ hops: path.hops,
158
+ ...resource === void 0 ? {} : linkStop(resource, firstLink(path)),
159
+ passRestricted: path.depth > 0 ? passesRestricted(target) : void 0
160
+ });
161
+ }
162
+ const start = relationStart(grantee, resource, target);
163
+ if (start === void 0 || target === void 0) return;
164
+ return compact({
165
+ op: "related",
166
+ resource: target.name,
167
+ relation: grantee.relation,
168
+ field: start.field,
169
+ depth: start.depth,
170
+ parent: start.parent ? true : void 0,
171
+ restricted: start.parent || start.depth > 0 ? restrictedFor(resource, "parent") : void 0,
172
+ passRestricted: start.depth > 0 ? passesRestricted(target) : void 0
173
+ });
174
+ }
175
+ const spec = resource?.relations?.[grantee.relation];
176
+ if (spec === void 0 || isEdgeRelation(spec)) return;
177
+ if (spec.includes !== void 0 && options.includes !== false) {
178
+ const parts = expandRelation(resource, grantee.relation).flatMap((name) => {
179
+ const part = relationCondition({
180
+ ...grantee,
181
+ relation: name
182
+ }, resource, scopes, {
183
+ ...options,
184
+ includes: false
185
+ });
186
+ return part === void 0 ? [] : [part];
187
+ });
188
+ return sole(parts) ?? {
189
+ op: "or",
190
+ conditions: parts
191
+ };
192
+ }
193
+ if (isComputedRelation(spec)) return;
194
+ if (isPrincipalRelation(spec)) {
195
+ const owner = {
196
+ op: "eq",
197
+ field: spec.principal,
198
+ value: { ref: "principal.id" }
199
+ };
200
+ const period = periodConditions(spec, options.now ?? { date: isoNow() });
201
+ return period.length === 0 ? owner : {
202
+ op: "and",
203
+ conditions: [owner, ...period]
204
+ };
205
+ }
206
+ if (spec.memberOf !== void 0) {
207
+ const scope = resolveScope(scopes, spec.memberOf);
208
+ if (scope === void 0) return {
209
+ op: "or",
210
+ conditions: []
211
+ };
212
+ if (scope === rootScope(scopes)) return {
213
+ op: "eq",
214
+ field: spec.field,
215
+ value: { ref: "principal.tenant" }
216
+ };
217
+ return {
218
+ op: "memberOf",
219
+ scope,
220
+ field: spec.field,
221
+ roles: []
222
+ };
223
+ }
224
+ return {
225
+ op: "eq",
226
+ field: spec.field,
227
+ value: { ref: "principal.id" }
228
+ };
229
+ }
230
+ function inheritCondition(grantee, resource, resources) {
231
+ if (resource === void 0) return;
232
+ if (grantee.through === "parent") {
233
+ const parent = resource.parent;
234
+ if (parent === void 0 || parent.resource !== grantee.resource) return;
235
+ return compact({
236
+ op: "related",
237
+ resource: grantee.resource,
238
+ relation: "",
239
+ permission: grantee.permission,
240
+ field: parent.field,
241
+ depth: 0,
242
+ parent: true,
243
+ restricted: restrictedFor(resource, "parent")
244
+ });
245
+ }
246
+ const path = relationHops({
247
+ kind: "relation",
248
+ resource: grantee.resource,
249
+ relation: "",
250
+ through: grantee.through
251
+ }, resource, resources);
252
+ if (path === void 0) return;
253
+ return compact({
254
+ op: "related",
255
+ resource: grantee.resource,
256
+ relation: "",
257
+ permission: grantee.permission,
258
+ field: path.field,
259
+ depth: 0,
260
+ hops: path.hops,
261
+ ...linkStop(resource, firstLink(path))
262
+ });
263
+ }
264
+ function firstLink(path) {
265
+ return path.hops[0]?.link ?? "";
266
+ }
267
+ function targetMap(target) {
268
+ return target === void 0 ? void 0 : /* @__PURE__ */ new Map([[target.name, target]]);
269
+ }
270
+ //#endregion
271
+ export { relationStart as a, relationHops as i, isGraphRelation as n, resourceRoleCondition as o, relationCondition as r, inheritCondition as t };
@@ -0,0 +1,142 @@
1
+ import { t as compact } from "./compact-CAf557ZB.js";
2
+ import { u as isoAt } from "./time-DkWjdL98.js";
3
+ import { d as scopeList, t as activeFor } from "./scopes-CUPSjo9q.js";
4
+ import { o as flattenGrantee } from "./grantee-Cn1HyUsI.js";
5
+ import { r as relationCondition, t as inheritCondition } from "./grantee-conditions-CcXf8hMM.js";
6
+ //#region src/core/grantee-match.ts
7
+ function combineWhere(left, right) {
8
+ if (left === void 0) return right;
9
+ if (right === void 0) return left;
10
+ return {
11
+ op: "and",
12
+ conditions: [left, right]
13
+ };
14
+ }
15
+ /** Seats (`Membership.entitlements`) held through memberships that apply under the active tenant. */
16
+ function seatsInTenant(subject, scopes) {
17
+ const principal = subject.principal;
18
+ if (principal === null) return [];
19
+ const list = scopeList(scopes);
20
+ return (principal.memberships ?? []).flatMap((membership) => membership.entitlements !== void 0 && activeFor(membership, list, principal.tenant) ? membership.entitlements : []);
21
+ }
22
+ function matchOne(grantee, subject, now, resource, scopes, resources) {
23
+ switch (grantee.kind) {
24
+ case "anyone": return { matched: true };
25
+ case "authenticated": return subject.principal === null ? {
26
+ matched: false,
27
+ reason: "anonymous"
28
+ } : { matched: true };
29
+ case "plan":
30
+ if (subject.principal === null) return {
31
+ matched: false,
32
+ reason: "anonymous"
33
+ };
34
+ return (subject.principal.plans ?? []).includes(grantee.plan) || seatsInTenant(subject, scopes).includes(grantee.plan) ? { matched: true } : {
35
+ matched: false,
36
+ reason: "not-entitled"
37
+ };
38
+ case "actor":
39
+ if (subject.actor === void 0) return {
40
+ matched: false,
41
+ reason: "no-grant"
42
+ };
43
+ return subject.actor.kind === grantee.actor ? { matched: true } : {
44
+ matched: false,
45
+ reason: "no-grant"
46
+ };
47
+ case "assurance": {
48
+ if (subject.principal === null) return {
49
+ matched: false,
50
+ reason: "anonymous"
51
+ };
52
+ const principalAssurance = subject.principal.assurance;
53
+ if (grantee.acr !== void 0 && grantee.acr.length > 0) {
54
+ const acr = principalAssurance?.acr;
55
+ if (acr === void 0 || !grantee.acr.includes(acr)) return {
56
+ matched: false,
57
+ reason: "insufficient-user-authentication"
58
+ };
59
+ }
60
+ if (grantee.amr !== void 0 && grantee.amr.length > 0) {
61
+ const amr = principalAssurance?.amr ?? [];
62
+ if (!grantee.amr.every((method) => amr.includes(method))) return {
63
+ matched: false,
64
+ reason: "insufficient-user-authentication"
65
+ };
66
+ }
67
+ if (grantee.maxAge !== void 0) {
68
+ const authTime = principalAssurance?.authTime;
69
+ if (authTime === void 0 || now - authTime > grantee.maxAge) return {
70
+ matched: false,
71
+ reason: "insufficient-user-authentication"
72
+ };
73
+ }
74
+ return { matched: true };
75
+ }
76
+ case "relation": {
77
+ if (subject.principal === null) return {
78
+ matched: false,
79
+ reason: "anonymous"
80
+ };
81
+ const where = relationCondition(grantee, resource, scopes, {
82
+ resources,
83
+ now: { date: isoAt(now * 1e3) }
84
+ });
85
+ if (where === void 0 && resource !== void 0) return {
86
+ matched: false,
87
+ reason: "condition"
88
+ };
89
+ return compact({
90
+ matched: true,
91
+ where
92
+ });
93
+ }
94
+ case "inherit": {
95
+ const where = inheritCondition(grantee, resource, resources);
96
+ return where === void 0 ? {
97
+ matched: false,
98
+ reason: "condition"
99
+ } : {
100
+ matched: true,
101
+ where
102
+ };
103
+ }
104
+ case "role":
105
+ if (subject.principal === null) return {
106
+ matched: false,
107
+ reason: "anonymous"
108
+ };
109
+ return { matched: true };
110
+ default: return unknownGrantee(grantee);
111
+ }
112
+ }
113
+ /** A kind this build does not know, from a forged snapshot or a newer document, never matches. */
114
+ function unknownGrantee(_grantee) {
115
+ return {
116
+ matched: false,
117
+ reason: "no-grant",
118
+ unknown: true
119
+ };
120
+ }
121
+ function matchGrantee(to, subject, now, resource, scopes, resources, unknownMatches = false) {
122
+ const items = flattenGrantee(to);
123
+ if (items.length === 0) return {
124
+ matched: false,
125
+ reason: "no-grant"
126
+ };
127
+ let where;
128
+ for (const item of items) {
129
+ const result = matchOne(item, subject, now, resource, scopes, resources);
130
+ if (!result.matched) {
131
+ if (unknownMatches && result.unknown === true) continue;
132
+ return result;
133
+ }
134
+ where = combineWhere(where, result.where);
135
+ }
136
+ return compact({
137
+ matched: true,
138
+ where
139
+ });
140
+ }
141
+ //#endregion
142
+ export { matchGrantee as n, combineWhere as t };
@@ -0,0 +1,37 @@
1
+ import { T as Policy, Vt as Snapshot, j as PolicyVocabulary, rr as Principal } from "../policy-types-DzwivBgR.js";
2
+ import { r as PermDock } from "../permdock-D7eeLJER.js";
3
+ import { D as ConnectionOptions, T as Connection, f as InvalidSignatureError, i as OpenApiHooks, u as SnapshotQuery, v as discoverViaSignatureAgent, x as webBotAuthVerifier } from "../server-types-BLd4MnBX.js";
4
+ import { a as ProtectTarget, n as FetchAdapterOptions, r as FetchProtect, t as ContextReader } from "../fetch-adapter-qKJBuRqy.js";
5
+ import { EventHandler, H3Event, H3EventContext, Middleware } from "h3";
6
+ //#region src/h3/create.d.ts
7
+ type H3PermDockOptions<TUser = unknown> = FetchAdapterOptions<H3Event, TUser>;
8
+ /** `event.context` once `middleware()` or `protect` ran: the instance and the loaded row. */
9
+ type H3PermDockContext<TData = unknown, V extends PolicyVocabulary = PolicyVocabulary> = H3EventContext & {
10
+ readonly permdock: PermDock<V>;
11
+ readonly permdockData: TData;
12
+ };
13
+ /** The event `withPermDock` hands its handler. */
14
+ type H3PermDockEvent<TData = unknown, V extends PolicyVocabulary = PolicyVocabulary> = H3Event & {
15
+ readonly context: H3PermDockContext<TData, V>;
16
+ };
17
+ type H3PermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
18
+ /** Global or route middleware that sets `event.context.permdock`. */
19
+ readonly middleware: () => Middleware;
20
+ /** Route middleware: a refusal short-circuits with Problem Details. */
21
+ readonly protect: FetchProtect<H3Event, Middleware>;
22
+ readonly getPermDock: (event: H3Event) => Promise<PermDock<V>>;
23
+ readonly getSnapshot: (event: H3Event, query?: SnapshotQuery) => Promise<Snapshot>;
24
+ /**
25
+ * Types `event.context.permdock` and `permdockData` for the handler, builds
26
+ * the instance when no middleware set it, and answers a thrown PermDock
27
+ * error with Problem Details.
28
+ */
29
+ readonly withPermDock: <TData = unknown>(handler: (event: H3PermDockEvent<TData, V>) => unknown) => EventHandler;
30
+ readonly connection: (event: H3Event, connectionOptions?: ConnectionOptions) => Promise<Connection>;
31
+ /** The decision endpoint: `app.all('/api/permdock', permdockHandler())`. */
32
+ readonly permdockHandler: () => EventHandler;
33
+ readonly openapi: OpenApiHooks;
34
+ };
35
+ export declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, options: H3PermDockOptions<TUser>): H3PermDock<V>;
36
+ //#endregion
37
+ export { type ContextReader, type H3PermDock, type H3PermDockContext, type H3PermDockEvent, type H3PermDockOptions, InvalidSignatureError, type ProtectTarget, discoverViaSignatureAgent, webBotAuthVerifier };