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
package/README.md CHANGED
@@ -70,6 +70,7 @@ Server-only. Roles are data; conditions are a portable JSON tree.
70
70
  ```ts
71
71
  // src/policy.ts
72
72
  import { allow, definePolicy, principal, relation, role } from "permdock";
73
+
73
74
  import { permissions, roles } from "./permissions";
74
75
 
75
76
  const member = role(roles.member, [
@@ -93,7 +94,7 @@ export const policy = definePolicy(
93
94
  {
94
95
  roles: [member, admin],
95
96
  scopes: { tenant: { key: "orgId" } },
96
- principal: (user: User | null) =>
97
+ subject: (user: User | null) =>
97
98
  user && {
98
99
  id: user.id,
99
100
  roles: user.roles,
@@ -110,9 +111,9 @@ export const policy = definePolicy(
110
111
  ### 3. Decide
111
112
 
112
113
  ```ts
113
- import { createPermDock } from "permdock";
114
+ import { getPermDock } from "permdock";
114
115
 
115
- const permdock = await createPermDock(policy, user); // frozen, request-scoped, never throws
116
+ const permdock = await getPermDock(policy, user); // frozen, request-scoped; getPermDockSync when every input is synchronous
116
117
  permdock.can(permissions.post.update, post); // boolean
117
118
  permdock.decide(permissions.post.delete, post); // { outcome: 'granted' | 'denied' | 'approval-required', ... }
118
119
  permdock.explain(permissions.post.delete, post); // the decision plus a trace naming the deny that won
@@ -132,7 +133,7 @@ import { PermDockProvider, Protected, usePermission } from "permdock/react";
132
133
  <Protected
133
134
  permission={permissions.post.update}
134
135
  data={post}
135
- fallback={<Locked />}
136
+ denied={<Locked />}
136
137
  >
137
138
  <EditButton />
138
139
  </Protected>
@@ -149,15 +150,13 @@ The same hook names exist in React Native, Vue, Svelte and Solid. Read [building
149
150
  // src/permdock/server.ts
150
151
  import { createPermDock } from "permdock/next";
151
152
 
152
- export const { getPermDock, requireAccess, permdockHandler } = createPermDock(
153
- policy,
154
- {
153
+ export const { getPermDock, requirePermission, permdockHandler } =
154
+ createPermDock(policy, {
155
155
  subject: async () => getUser(await cookies()),
156
- },
157
- );
156
+ });
158
157
 
159
158
  // in a page or Server Action
160
- await requireAccess({ permission: permissions.post.update, data: post }); // forbidden() / unauthorized() on a denial
159
+ await requirePermission(permissions.post.update, post); // forbidden() / unauthorized() on a denial
161
160
  ```
162
161
 
163
162
  ### Hono
@@ -167,10 +166,10 @@ Express, Fastify, Elysia, Nest, Node, tRPC and oRPC have the same shape.
167
166
  ```ts
168
167
  import { createPermDock } from "permdock/hono";
169
168
 
170
- export const { permdock, protect } = createPermDock(policy, {
169
+ export const { middleware, protect } = createPermDock(policy, {
171
170
  subject: (c) => c.get("user"),
172
171
  });
173
- app.use(permdock());
172
+ app.use(middleware());
174
173
  app.delete(
175
174
  "/posts/:id",
176
175
  protect(permissions.post.delete, (c) => loadPost(c.req.param("id"))),
@@ -204,6 +203,7 @@ protectServer(server).registerTool(
204
203
  The Claude Agent SDK, Eve, the OpenAI Agents SDK, WebMCP and A2A have their own entries with the same tool map.
205
204
 
206
205
  ```ts
206
+ import { defineOperations } from "permdock";
207
207
  import { createPermDock } from "permdock/ai-sdk";
208
208
 
209
209
  const { toolApproval } = createPermDock(policy, {
@@ -212,12 +212,12 @@ const { toolApproval } = createPermDock(policy, {
212
212
  id: runtimeContext.agentId,
213
213
  kind: "ai-sdk",
214
214
  }),
215
- tools: {
215
+ operations: defineOperations(permissions, {
216
216
  delete_post: {
217
217
  permission: permissions.post.delete,
218
218
  data: (args) => loadPost(args.id),
219
219
  },
220
- },
220
+ }),
221
221
  });
222
222
  generateText({ model, tools, toolApproval }); // granted → approved, denied → denied, approval-required → user-approval
223
223
  ```
@@ -226,7 +226,7 @@ generateText({ model, tools, toolApproval }); // granted → approved, denied
226
226
 
227
227
  ```bash
228
228
  permdock rls generate --target drizzle --dialect supabase # roles × grants → policies
229
- permdock rls verify --db $DATABASE_URL # can() vs database parity
229
+ printf %s "$DATABASE_URL" | permdock rls verify --db-url-stdin # can() vs database parity
230
230
  ```
231
231
 
232
232
  ## Agents and approvals
@@ -253,8 +253,8 @@ allow(permissions.payout.release, {
253
253
  approval: {
254
254
  by: roles.finance,
255
255
  quorum: 2, // two distinct finance approvers
256
- ttl: "30m",
257
- escalation: { after: "10m", to: roles.cfo },
256
+ ttl: 1800, // seconds: 30 minutes
257
+ escalation: { after: 600, to: roles.cfo },
258
258
  },
259
259
  });
260
260
  ```
@@ -284,28 +284,30 @@ PermDock adopts the permission keys, SQL helpers, tokens and stored custom roles
284
284
 
285
285
  Any Standard Schema validator: Zod, Valibot, ArkType, Effect Schema. One import path per target:
286
286
 
287
- | Group | Entries |
288
- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
289
- | UI | `permdock/react` · `permdock/react-native` · `permdock/vue` · `permdock/svelte` · `permdock/solid` |
290
- | Full-stack | `permdock/next` |
291
- | HTTP | `permdock/server` · `permdock/hono` · `permdock/express` · `permdock/fastify` · `permdock/elysia` · `permdock/nest` · `permdock/node` |
292
- | Terminal | `permdock/terminal` for your own CLI (not the `permdock` binary) |
293
- | RPC | `permdock/trpc` · `permdock/orpc` |
294
- | Agents | `permdock/mcp` · `permdock/ai-sdk` · `permdock/claude-agent` · `permdock/eve` · `permdock/openai` · `permdock/webmcp` · `permdock/a2a` |
295
- | Decision plane | `permdock/authzen` · `permdock/approvals` · `permdock/cloud` · `permdock/scim` · `permdock/ssf` · `permdock/openapi` · `permdock/otel` · `permdock/pdp` |
296
- | Data | `permdock/drizzle` · `permdock/prisma` · `permdock/kysely` · `permdock rls` · `permdock powersync` |
297
- | Auth and providers | `permdock/jwt` · `permdock/supabase` · `permdock/supabase/middleware` · `permdock/better-supabase` · `permdock/better-auth` · `permdock/clerk` · `permdock/convex` |
298
- | Build | `permdock/next/plugin` · `permdock/unplugin` |
299
- | Testing | `permdock/testing` |
300
-
301
- React Router, TanStack Start, SvelteKit and Nuxt loaders call `getSnapshot(request)` from `permdock/server` and send `snapshotHeaders(snapshot)`. Astro and Effect use these entries plus `permdock/unplugin`. The full matrix with example apps and related standards is on the [adapters page](https://permdock.com/docs/adapters).
287
+ | Group | Entries |
288
+ | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
289
+ | UI | `permdock/react` · `permdock/react-native` · `permdock/vue` · `permdock/svelte` · `permdock/solid` |
290
+ | Full-stack | `permdock/next` · `permdock/sveltekit` · `permdock/astro` · `permdock/solid-start` · `permdock/tanstack-start` |
291
+ | HTTP | `permdock/server` · `permdock/hono` · `permdock/h3` · `permdock/express` · `permdock/fastify` · `permdock/elysia` · `permdock/nest` · `permdock/node` |
292
+ | Terminal | `permdock/terminal` for your own CLI (not the `permdock` binary) |
293
+ | RPC | `permdock/trpc` · `permdock/orpc` |
294
+ | Agents | `permdock/agent` · `permdock/mcp` · `permdock/ai-sdk` · `permdock/claude-agent` · `permdock/eve` · `permdock/openai` · `permdock/webmcp` · `permdock/a2a` |
295
+ | Messaging | `permdock/delivery` · `permdock/resend` · `permdock/chat` · `permdock/chat-sdk` |
296
+ | Decision plane | `permdock/authzen` · `permdock/approvals` · `permdock/workflow` · `permdock/workflow-sdk` · `permdock/cloud` · `permdock/scim` · `permdock/ssf` · `permdock/openapi` · `permdock/otel` · `permdock/pdp` |
297
+ | Data | `permdock/drizzle` · `permdock/prisma` · `permdock/kysely` · `permdock rls` · `permdock powersync` |
298
+ | Auth and providers | `permdock/jwt` · `permdock/supabase` · `permdock/supabase/middleware` · `permdock/better-supabase` · `permdock/better-auth` · `permdock/clerk` · `permdock/convex` |
299
+ | Build | `permdock/next/plugin` · `permdock/unplugin` |
300
+ | Testing | `permdock/testing` |
301
+
302
+ React Router loaders call `getSnapshot(request)` from `permdock/server` and send `snapshotHeaders(snapshot)`; Nitro and Nuxt server routes use `permdock/h3`. Effect uses these entries plus `permdock/unplugin`. The full matrix with example apps and related standards is on the [adapters page](https://permdock.com/docs/adapters).
302
303
 
303
304
  ## Secure by default
304
305
 
305
306
  - Fail-closed: an unknown, invalid or thrown check denies, and `can()` never throws.
306
307
  - Deny overrides allow, an unknown reference is a type error, and evaluation is prototype-safe with no eval.
307
308
  - `service_role` is never emitted, a model-supplied subject is never trusted, and an agent with no delegation is denied.
308
- - No one approves their own request by default, there is never a default tenant, and data is validated against the resource schema unless the caller marks a row it loaded `trusted: true`.
309
+ - No one approves their own request by default, a delegate is held to the same rule as the person they cover, there is never a default tenant, and data is validated against the resource schema unless the caller marks a row it loaded `trusted: true`.
310
+ - A user or service API key expires unless the tenant sets `allowNoExpiry`. A feed key (`pdfeed_`) does not expire; rotation replaces the secret and keeps the id, and the key is bound to one resource.
309
311
  - Authentication stays upstream: PermDock consumes verified sessions, JWKS-verified JWTs (`permdock/jwt`, with `jose` as an optional peer), provider claims and MCP `authInfo`. Core never verifies a token. User-editable fields never become claims: `subjectFromBetterAuth` copies `additionalFields` only through a `schema`. Read [authentication](https://permdock.com/docs/concepts/authentication).
310
312
  - Every decision runs in-process. [PermDock Cloud](https://permdock.com/docs/adapters/cloud) adds a decision log, an approval inbox, a hosted AuthZEN endpoint and a SCIM relay, behind interfaces this package ships with in-process defaults.
311
313
 
@@ -319,10 +321,10 @@ Other TypeScript permission libraries (CASL, permix, Kilpi, `@zap-studio/permit`
319
321
 
320
322
  ```bash
321
323
  npx skills add ScaleDockHQ/PermDock # the permdock, permdock-wire, permdock-audit and topic skills
322
- permdock skills # the same skills, offline, from node_modules/permdock/skills
324
+ permdock skills install # the same skills, offline, from node_modules/permdock/skills
323
325
  ```
324
326
 
325
- Claude Code users can add the plugin marketplace instead: `/plugin marketplace add ScaleDockHQ/permdock`. Every docs page is served as Markdown, with `llms.txt`, `llms-full.txt` and a docs MCP server at `https://permdock.com/mcp`. Read [for AI agents](https://permdock.com/docs/for-ai-agents).
327
+ Claude Code users can add the plugin marketplace instead: `/plugin marketplace add ScaleDockHQ/permdock`. Every docs page is served as Markdown, with `llms.txt`, `llms-full.txt` and a docs MCP server at `https://permdock.com/docs/mcp`. Read [for AI agents](https://permdock.com/docs/for-ai-agents).
326
328
 
327
329
  ## License
328
330
 
@@ -1,9 +1,5 @@
1
- import { t as packageRoot } from "./package-root-zGkxO3oN.js";
2
- import { t as DRAFT_PINS } from "./pins-8ILTftC9.js";
3
- import { readFileSync } from "node:fs";
4
- import { join } from "node:path";
5
1
  //#region \0rolldown/runtime.js
6
- var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
2
+ var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod, mod.exports), cb = null), mod.exports);
7
3
  //#endregion
8
4
  //#region ../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/code.js
9
5
  var require_code$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
@@ -6677,8 +6673,8 @@ var require_json_schema_2020_12 = /* @__PURE__ */ __commonJSMin(((exports) => {
6677
6673
  exports.default = addMetaSchema2020;
6678
6674
  }));
6679
6675
  //#endregion
6680
- //#region src/cli/openapi-schema.ts
6681
- var import__2020 = (/* @__PURE__ */ __commonJSMin(((exports, module) => {
6676
+ //#region ../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/2020.js
6677
+ var require__2020 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
6682
6678
  Object.defineProperty(exports, "__esModule", { value: true });
6683
6679
  exports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = exports.Ajv2020 = void 0;
6684
6680
  const core_1 = require_core$2();
@@ -6774,129 +6770,6 @@ var import__2020 = (/* @__PURE__ */ __commonJSMin(((exports, module) => {
6774
6770
  return ref_error_1.default;
6775
6771
  }
6776
6772
  });
6777
- })))();
6778
- function schemaDir() {
6779
- return join(packageRoot(), "schemas", "openapi");
6780
- }
6781
- function isRecord(value) {
6782
- return value !== null && typeof value === "object" && !Array.isArray(value);
6783
- }
6784
- const validators = /* @__PURE__ */ new Map();
6785
- /** Parses a bundled schema file; throws on anything but a JSON object. */
6786
- function parseSchema(text, file) {
6787
- const parsed = JSON.parse(text.replaceAll("\"$dynamicRef\": \"#meta\"", "\"$ref\": \"#/$defs/schema\""));
6788
- if (!isRecord(parsed)) throw new TypeError(`PermDock CLI: ${file} is not a JSON Schema`);
6789
- return parsed;
6790
- }
6791
- function schemaFile(file) {
6792
- return parseSchema(readFileSync(join(schemaDir(), file), "utf8"), file);
6793
- }
6794
- function child(parent, ...path) {
6795
- let node = parent;
6796
- for (const key of path) {
6797
- const next = node[key];
6798
- if (!isRecord(next)) throw new TypeError(`PermDock CLI: OpenAPI schema has no ${path.join(".")}`);
6799
- node = next;
6800
- }
6801
- return node;
6802
- }
6803
- const STRINGS = {
6804
- type: "array",
6805
- items: { type: "string" }
6806
- };
6807
- /**
6808
- * No official 3.3 schema exists: the 3.2 schema plus the pinned draft's
6809
- * Security Profiles (a `profile` scheme type and
6810
- * `components.securityProfileRequirements`). Mutates and returns `schema`.
6811
- */
6812
- function patchOas33(schema) {
6813
- schema["$id"] = `https://permdock.com/schemas/openapi/oas-3.3/${DRAFT_PINS.oas}`;
6814
- child(schema, "properties", "openapi")["pattern"] = String.raw`^3\.3\.\d+(-.+)?$`;
6815
- const defs = child(schema, "$defs");
6816
- const scheme = child(defs, "security-scheme");
6817
- const type = child(scheme, "properties", "type");
6818
- type["enum"] = [...Array.isArray(type["enum"]) ? type["enum"] : [], "profile"];
6819
- scheme["allOf"] = [...Array.isArray(scheme["allOf"]) ? scheme["allOf"] : [], {
6820
- if: { properties: { type: { const: "profile" } } },
6821
- then: {
6822
- properties: { profileMetadata: {
6823
- type: "object",
6824
- required: ["name"],
6825
- properties: {
6826
- name: { type: "string" },
6827
- supportedParametersSchema: { type: ["string", "object"] },
6828
- supportedOperations: {},
6829
- servers: {
6830
- type: "array",
6831
- items: {
6832
- type: "object",
6833
- required: ["url"],
6834
- properties: {
6835
- name: { type: "string" },
6836
- url: { type: "string" }
6837
- }
6838
- }
6839
- }
6840
- }
6841
- } },
6842
- required: ["profileMetadata"]
6843
- }
6844
- }];
6845
- child(defs, "components", "properties")["securityProfileRequirements"] = {
6846
- type: "object",
6847
- additionalProperties: {
6848
- type: "object",
6849
- required: ["securityScheme", "scopes"],
6850
- properties: {
6851
- securityScheme: { $ref: "#/$defs/reference" },
6852
- token_endpoint_auth_methods: STRINGS,
6853
- grant_types: STRINGS,
6854
- scopes: STRINGS
6855
- }
6856
- }
6857
- };
6858
- return schema;
6859
- }
6860
- function validatorFor(file) {
6861
- const cached = validators.get(file);
6862
- if (cached !== void 0) return cached;
6863
- const compiled = new import__2020.Ajv2020({
6864
- strict: false,
6865
- allErrors: false,
6866
- validateFormats: false
6867
- }).compile(file === "oas-3.3.json" ? patchOas33(schemaFile("oas-3.2.json")) : schemaFile(file));
6868
- validators.set(file, compiled);
6869
- return compiled;
6870
- }
6871
- function describeErrors(errors) {
6872
- return (errors ?? []).slice(0, 5).map((error) => ` ${error.instancePath || "/"} ${error.message ?? ""}`).join("\n");
6873
- }
6874
- /** Validates an OpenAPI 3.1 or 3.2 document against the official JSON Schema, and 3.3 against the pinned patch of 3.2. */
6875
- function validateOpenapi(document) {
6876
- const version = isRecord(document) ? document["openapi"] : void 0;
6877
- const match = typeof version === "string" ? /^3\.([123])\.\d+$/u.exec(version) : null;
6878
- if (match === null) return {
6879
- ok: false,
6880
- error: "expected an OpenAPI 3.1, 3.2 or 3.3 document"
6881
- };
6882
- const minor = match[1] === "1" ? "3.1" : match[1] === "2" ? "3.2" : "3.3";
6883
- const validate = validatorFor(`oas-${minor}.json`);
6884
- if (!validate(document)) return {
6885
- ok: false,
6886
- error: `document is not valid OpenAPI ${minor}:\n${describeErrors(validate.errors)}`
6887
- };
6888
- return {
6889
- ok: true,
6890
- version: minor
6891
- };
6892
- }
6893
- /** Validates an Overlay 1.1 document against the official JSON Schema. */
6894
- function validateOverlay(document) {
6895
- const validate = validatorFor("overlay-1.1.json");
6896
- return validate(document) ? { ok: true } : {
6897
- ok: false,
6898
- error: `document is not a valid Overlay 1.1:\n${describeErrors(validate.errors)}`
6899
- };
6900
- }
6773
+ }));
6901
6774
  //#endregion
6902
- export { validateOverlay as n, validateOpenapi as t };
6775
+ export { require__2020 as t };
@@ -1,14 +1,16 @@
1
- import { C as Policy, Nr as Principal, Tr as AuthorizationDetail } from "../policy-IB6yxpC3.js";
2
- import { f as Permission } from "../permissions-DttnqqxC.js";
3
- import { f as ApprovalStore } from "../types-aqOHTHcp.js";
4
- import { a as ProblemDetails } from "../errors-DPdqI50v.js";
5
- import { t as InstanceOptions } from "../instance-options-jARdwfPN.js";
1
+ import { T as Policy, Yn as AuthorizationDetail, rr as Principal } from "../policy-types-DzwivBgR.js";
2
+ import { w as Permission } from "../vocabulary-D6lPdb4Z.js";
3
+ import { m as ApprovalStore } from "../types-CCpc2Dcv.js";
4
+ import { a as ProblemDetails } from "../errors-C2PXIv4c.js";
5
+ import { t as InstanceOptions } from "../instance-options-Omfd793B.js";
6
6
  //#region src/a2a/types.d.ts
7
7
  type A2aAuth = {
8
8
  readonly clientId?: string;
9
9
  readonly scopes?: readonly string[];
10
10
  readonly extra?: {
11
11
  readonly authorizationDetails?: readonly AuthorizationDetail[];
12
+ /** The RFC 9396 claim name; read when `authorizationDetails` is absent. */
13
+ readonly authorization_details?: readonly AuthorizationDetail[];
12
14
  readonly approval?: string;
13
15
  };
14
16
  };
@@ -164,6 +166,6 @@ type A2aPermDock = {
164
166
  };
165
167
  //#endregion
166
168
  //#region src/a2a/create.d.ts
167
- export declare function createPermDock<TUser, TPrincipal extends Principal = Principal>(policy: Policy<TUser, TPrincipal>, options: A2aPermDockOptions<TUser>): A2aPermDock;
169
+ export declare function createPermDock<TUser, TPrincipal extends Principal = Principal>(policy: Policy<TUser, TPrincipal>, given: A2aPermDockOptions<TUser>): A2aPermDock;
168
170
  //#endregion
169
171
  export type { A2aAgentCard, A2aAgentCardSignature, A2aAuth, A2aCardInfo, A2aPermDock, A2aPermDockOptions, A2aSecurityRequirement, A2aSecurityScheme, A2aSkill, A2aSkillConfig, A2aTaskOutcome, A2aWireSecurityScheme };
package/dist/a2a/index.js CHANGED
@@ -1,13 +1,15 @@
1
- import { t as compact } from "../compact-y6vfu2_f.js";
2
- import { n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-Cz5zn0mW.js";
3
- import { t as canonicalJson } from "../canonical-json-DemiK4Vp.js";
4
- import { t as bytesToBase64Url } from "../sha256-BO0swRXL.js";
5
- import { i as scopesReaching, r as challengeScope } from "../permdock-CbgvLnuo.js";
1
+ import { t as compact } from "../compact-CAf557ZB.js";
2
+ import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
3
+ import { o as statusProblem } from "../problem-details-cn5X30gZ.js";
4
+ import { n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-BKy0EfhN.js";
5
+ import { t as canonicalJson } from "../canonical-json-BC8_nMTw.js";
6
+ import { t as bytesToBase64Url } from "../sha256-D9ihqmvd.js";
6
7
  import { n as resourceRef } from "../resource-ref-CaS9yVPi.js";
7
- import { t as mayUse } from "../may-use-DndQ5tQ-.js";
8
- import { d as wwwAuthenticate, n as bearerChallenge } from "../problem-B43ztKIm.js";
9
- import { t as instanceOptions } from "../instance-options-Dhhcnm3y.js";
10
- import { n as createAgentKernel } from "../kernel-_RRHmnMY.js";
8
+ import { a as hasScope, c as withApp, i as challengeScope, o as scopesReaching } from "../permdock-B9JxkBwC.js";
9
+ import { f as wwwAuthenticate, r as bearerChallenge } from "../problem-CTviyH5L.js";
10
+ import { r as instanceOptions } from "../build-instance-BMnAudHn.js";
11
+ import { n as createAgentKernel } from "../kernel-5JatXyND.js";
12
+ import { t as delegationFrom } from "../delegation-input-FTxMK3ji.js";
11
13
  //#region src/a2a/create.ts
12
14
  function firstScheme(options) {
13
15
  return Object.keys(options.securitySchemes)[0];
@@ -75,29 +77,20 @@ function cardOf(options, skills) {
75
77
  });
76
78
  }
77
79
  const DEFAULT_MODES = ["text/plain"];
78
- function delegationOf(auth) {
79
- return compact({
80
- scopes: auth.scopes,
81
- authorizationDetails: auth.extra?.authorizationDetails
82
- });
83
- }
84
80
  function actorOf(auth) {
85
81
  return typeof auth.clientId === "string" && auth.clientId !== "" ? {
86
82
  id: auth.clientId,
87
83
  kind: "oauth-client"
88
84
  } : void 0;
89
85
  }
90
- function hasScope(auth, scopes) {
91
- return scopes.some((scope) => auth.scopes?.includes(scope) === true);
92
- }
93
- const LOAD_FAILED = {
86
+ const LOAD_FAILED = freezeDeep({
94
87
  outcome: "denied",
95
88
  denials: [{
96
89
  role: null,
97
90
  reason: "validation"
98
91
  }],
99
92
  alternatives: []
100
- };
93
+ });
101
94
  const NO_SUBJECT = {
102
95
  principal: null,
103
96
  context: {}
@@ -153,28 +146,25 @@ async function signCard(card, signPayload) {
153
146
  function missingScope(permission, scope) {
154
147
  return {
155
148
  ok: false,
156
- status: 401,
149
+ status: 403,
157
150
  state: "failed",
158
- problem: {
159
- type: "https://permdock.com/problems/unauthenticated",
160
- title: "Insufficient scope",
161
- status: 401,
162
- detail: `insufficient_scope: ${scope}`,
151
+ problem: statusProblem(403, `insufficient_scope: ${scope}`, {
163
152
  permission: permission.key,
164
153
  scope
165
- },
154
+ }),
166
155
  wwwAuthenticate: bearerChallenge({
167
156
  error: "insufficient_scope",
168
157
  scopes: [scope]
169
158
  })
170
159
  };
171
160
  }
172
- function createPermDock(policy, options) {
161
+ function createPermDock(policy, given) {
162
+ const options = withApp(policy, given);
173
163
  for (const [id, config] of Object.entries(options.skills)) if (config.permission.kind === "instance" && config.data === void 0) throw new TypeError(`PermDock: A2A skill '${id}' checks ${config.permission.key} on a row and needs a data loader; the task body is never used as the row`);
174
164
  const kernel = createAgentKernel(policy, compact({
175
165
  subject: options.subject,
176
166
  actor: actorOf,
177
- delegation: delegationOf,
167
+ delegation: (auth) => delegationFrom(auth.scopes, auth.extra),
178
168
  tenant: options.tenant,
179
169
  store: options.store,
180
170
  adapter: "a2a",
@@ -190,7 +180,7 @@ function createPermDock(policy, options) {
190
180
  }
191
181
  const scheme = firstScheme(options);
192
182
  const skills = [];
193
- for (const [id, config] of Object.entries(options.skills)) if (mayUse(permdock, config.permission)) skills.push(skillOf(id, config, scheme));
183
+ for (const [id, config] of Object.entries(options.skills)) if (permdock.mayUse(config.permission)) skills.push(skillOf(id, config, scheme));
194
184
  return cardOf(options, skills);
195
185
  };
196
186
  const protectSkill = (selector) => async (task, auth) => {
@@ -207,7 +197,7 @@ function createPermDock(policy, options) {
207
197
  detail: "unknown skill"
208
198
  }
209
199
  };
210
- if (!hasScope(auth, scopesReaching(policy, config.permission))) return missingScope(config.permission, challengeScope(policy, config.permission));
200
+ if (!hasScope(auth.scopes, scopesReaching(policy, config.permission))) return missingScope(config.permission, challengeScope(policy, config.permission));
211
201
  const checked = await kernel.check(compact({
212
202
  permission: config.permission,
213
203
  data: config.data
@@ -1,4 +1,4 @@
1
- import { n as isActor } from "./subject-C6dLxqHU.js";
1
+ import { n as isActor } from "./subject-BGoM5o8B.js";
2
2
  //#region src/core/adapter-context.ts
3
3
  /** Resolves an adapter `tenant` option against its framework context; a throw is no tenant. */
4
4
  async function tenantScope(option, context) {
@@ -0,0 +1,107 @@
1
+ import { r as listSourceFiles } from "./files-D_JIzUrP.js";
2
+ import { t as DOCS_BASE } from "./manifest-CtKR3GXL.js";
3
+ import { readFileSync } from "node:fs";
4
+ import { relative } from "node:path";
5
+ //#region src/cli/adoption-scan.ts
6
+ /** Authorization checks written before PermDock, by the shape they usually take. */
7
+ const LEGACY_PATTERNS = [
8
+ {
9
+ name: "role comparison",
10
+ pattern: /\brole\s*[!=]==?\s*['"`]/u
11
+ },
12
+ {
13
+ name: "roles.includes",
14
+ pattern: /\broles?\.(?:includes|some|has)\(/u
15
+ },
16
+ {
17
+ name: "isAdmin flag",
18
+ pattern: /\bis(?:Admin|Owner|SuperUser|Staff)\b/u
19
+ },
20
+ {
21
+ name: "hasRole / hasPermission",
22
+ pattern: /\b(?:has|check|require)(?:Role|Permission|Access)s?\(/u
23
+ },
24
+ {
25
+ name: "CASL ability",
26
+ pattern: /\bability\.(?:can|cannot)\(/u
27
+ },
28
+ {
29
+ name: "Clerk has()",
30
+ pattern: /\bhas\(\s*\{\s*(?:role|permission)\s*:/u
31
+ },
32
+ {
33
+ name: "JWT role claim",
34
+ pattern: /\[['"](?:role|roles|user_role)['"]\]/u
35
+ }
36
+ ];
37
+ /**
38
+ * Lines that look like an authorization check written without PermDock:
39
+ * the work left before a permission can be enforced. It reads source text
40
+ * only and runs nothing; a finding is a place to look, not a verdict.
41
+ */
42
+ function scanLegacy(options) {
43
+ const custom = (options.patterns ?? []).map((source) => ({
44
+ name: "custom",
45
+ pattern: new RegExp(source, "u")
46
+ }));
47
+ const patterns = [...LEGACY_PATTERNS, ...custom];
48
+ const findings = [];
49
+ for (const file of listSourceFiles(options.cwd, options.srcPath)) {
50
+ const lines = readFileSync(file, "utf8").split("\n");
51
+ for (const [index, line] of lines.entries()) {
52
+ if (/permdock/iu.test(line)) continue;
53
+ const hit = patterns.find((item) => item.pattern.test(line));
54
+ if (hit !== void 0) findings.push({
55
+ file: relative(options.cwd, file),
56
+ line: index + 1,
57
+ kind: hit.name,
58
+ text: line.trim().slice(0, 160)
59
+ });
60
+ }
61
+ }
62
+ return findings;
63
+ }
64
+ function runAdoptionScan(options) {
65
+ let findings;
66
+ try {
67
+ findings = scanLegacy(options);
68
+ } catch (error) {
69
+ return {
70
+ code: 2,
71
+ output: `permdock scan: ${error instanceof Error ? error.message : String(error)}\n`
72
+ };
73
+ }
74
+ const located = findings.map((finding) => ({
75
+ code: "legacy-check",
76
+ severity: "info",
77
+ message: `${finding.kind}: ${finding.text}`,
78
+ file: finding.file,
79
+ line: finding.line,
80
+ docs: `${DOCS_BASE}/scan`
81
+ }));
82
+ if (options.json === true) return {
83
+ code: 0,
84
+ output: `${JSON.stringify(findings, null, 2)}\n`,
85
+ findings: located
86
+ };
87
+ if (findings.length === 0) return {
88
+ code: 0,
89
+ output: "No legacy authorization checks found.\n",
90
+ findings: []
91
+ };
92
+ const byKind = /* @__PURE__ */ new Map();
93
+ for (const finding of findings) byKind.set(finding.kind, (byKind.get(finding.kind) ?? 0) + 1);
94
+ return {
95
+ code: 0,
96
+ output: `${[
97
+ ...findings.map((finding) => `${finding.file}:${finding.line} ${finding.kind} ${finding.text}`),
98
+ "",
99
+ `${findings.length} checks to move to PermDock: ${[...byKind].map(([kind, count]) => `${count} ${kind}`).join(", ")}.`,
100
+ "Run them beside PermDock with shadowMode before enforcing (https://permdock.com/docs/getting-started/existing-apps).",
101
+ ...byKind.has("CASL ability") ? ["CASL rules import as roles: permdock casl import --rules <file> --out <file> (https://permdock.com/docs/cli/casl)."] : []
102
+ ].join("\n")}\n`,
103
+ findings: located
104
+ };
105
+ }
106
+ //#endregion
107
+ export { runAdoptionScan };
@@ -0,0 +1,3 @@
1
+ import { n as DeniedTextEvent, t as DeniedText } from "../denied-text-D8jDHgsl.js";
2
+ import { a as createPermDock, c as ModelMap, i as OperationVerdict, l as ToolBinding, n as AgentPermDockOptions, o as AgentAdapterOptions, r as GatewayOptions, s as DecideToolOptions, t as AgentPermDock, u as ToolMap } from "../create-BDS7wc3y.js";
3
+ export { type AgentAdapterOptions, type AgentPermDock, type AgentPermDockOptions, type DecideToolOptions, type DeniedText, type DeniedTextEvent, type GatewayOptions, type ModelMap, type OperationVerdict, type ToolBinding, type ToolMap, createPermDock };
@@ -0,0 +1 @@
1
+ export { n as createPermDock } from "../create-C3b4B5eF.js";