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,234 @@
1
+ import { t as applyFiles } from "./files-C5ZI27eV.js";
2
+ import { n as isIdentifier, t as emitPolicyModule } from "./policy-module-CTlwMvLI.js";
3
+ import { existsSync, readFileSync } from "node:fs";
4
+ import { resolve } from "node:path";
5
+ //#region src/cli/importers/casbin.ts
6
+ const MATCHER_TERMS = /* @__PURE__ */ new Set([
7
+ "g(r.sub,p.sub)",
8
+ "g(r.sub,p.sub,r.dom)",
9
+ "r.obj==p.obj",
10
+ "r.act==p.act",
11
+ "r.dom==p.dom"
12
+ ]);
13
+ function sections(text) {
14
+ const found = /* @__PURE__ */ new Map();
15
+ let current;
16
+ for (const raw of text.split("\n")) {
17
+ const line = raw.trim();
18
+ if (line === "" || line.startsWith("#")) continue;
19
+ const header = /^\[(\w+)\]$/u.exec(line)?.[1];
20
+ if (header !== void 0) {
21
+ current = /* @__PURE__ */ new Map();
22
+ found.set(header, current);
23
+ continue;
24
+ }
25
+ const at = line.indexOf("=");
26
+ if (current !== void 0 && at > 0) current.set(line.slice(0, at).trim(), line.slice(at + 1).trim());
27
+ }
28
+ return found;
29
+ }
30
+ function fieldsOf(value) {
31
+ return (value ?? "").split(",").map((item) => item.trim());
32
+ }
33
+ /**
34
+ * The model, when it is RBAC (optionally with domains) under the standard
35
+ * matcher; otherwise the terms that are not. Deny rows need `p.eft` and an
36
+ * effect that lets a deny override an allow, as PermDock always does.
37
+ */
38
+ function readCasbinModel(text) {
39
+ const model = sections(text);
40
+ const request = fieldsOf(model.get("request_definition")?.get("r"));
41
+ const policy = fieldsOf(model.get("policy_definition")?.get("p"));
42
+ const domains = request.includes("dom");
43
+ const expected = domains ? [
44
+ "sub",
45
+ "dom",
46
+ "obj",
47
+ "act"
48
+ ] : [
49
+ "sub",
50
+ "obj",
51
+ "act"
52
+ ];
53
+ if (request.join(",") !== expected.join(",")) return { refused: `r = ${request.join(", ")}: casbin import reads r = ${expected.join(", ")}` };
54
+ const withEffect = policy.length === expected.length + 1 && policy.at(-1) === "eft";
55
+ if (policy.slice(0, expected.length).join(",") !== expected.join(",") || policy.length !== expected.length && !withEffect) return { refused: `p = ${policy.join(", ")}: casbin import reads p = ${expected.join(", ")}[, eft]` };
56
+ const terms = (model.get("matchers")?.get("m") ?? "").replaceAll(/\s+/gu, "").split("&&").filter((term) => term !== "");
57
+ const unsupported = terms.filter((term) => !MATCHER_TERMS.has(term));
58
+ if (terms.length === 0 || unsupported.length > 0) return { refused: `the matcher has terms casbin import cannot read: ${unsupported.join(" && ") || "(empty)"}; it reads g(r.sub, p.sub[, r.dom]), r.dom == p.dom, r.obj == p.obj and r.act == p.act` };
59
+ const effect = (model.get("policy_effect")?.get("e") ?? "").replaceAll(/\s+/gu, "");
60
+ const allowOnly = effect === "some(where(p.eft==allow))";
61
+ const denyOverrides = effect === "some(where(p.eft==allow))&&!some(where(p.eft==deny))";
62
+ if (!allowOnly && !denyOverrides) return { refused: `e = ${effect}: casbin import reads allow-only or deny-override effects; PermDock's deny always overrides an allow` };
63
+ return {
64
+ domains,
65
+ roles: model.get("role_definition")?.get("g") !== void 0,
66
+ denies: withEffect && denyOverrides
67
+ };
68
+ }
69
+ function policyLines(text) {
70
+ const lines = [];
71
+ for (const [index, raw] of text.split("\n").entries()) {
72
+ const line = raw.trim();
73
+ if (line !== "" && !line.startsWith("#")) lines.push({
74
+ number: index + 1,
75
+ text: line,
76
+ cells: line.split(",").map((cell) => cell.trim())
77
+ });
78
+ }
79
+ return lines;
80
+ }
81
+ /** Every grant `role` holds through `g` role-to-role lines, its own included; a cycle stops. */
82
+ function inherited(role, own, parents) {
83
+ const seen = /* @__PURE__ */ new Set();
84
+ const grants = [];
85
+ const visit = (name) => {
86
+ if (seen.has(name)) return;
87
+ seen.add(name);
88
+ grants.push(...own.get(name) ?? []);
89
+ for (const parent of parents.get(name) ?? []) visit(parent);
90
+ };
91
+ visit(role);
92
+ return grants;
93
+ }
94
+ /**
95
+ * Casbin RBAC policy lines as PermDock roles. A `p` line whose subject is a
96
+ * role becomes a grant; a role that inherits another (`g, editor, viewer`)
97
+ * holds its grants too, flattened, because code roles do not nest. A `g` line
98
+ * for a user becomes an assignment the application loads as a membership.
99
+ */
100
+ function importCasbin(model, policy) {
101
+ const lines = policyLines(policy);
102
+ const skipped = [];
103
+ const width = model.domains ? 4 : 3;
104
+ const roleNames = /* @__PURE__ */ new Set();
105
+ for (const line of lines) if (line.cells[0] === "g" && line.cells[2] !== void 0) roleNames.add(line.cells[2]);
106
+ const parents = /* @__PURE__ */ new Map();
107
+ const assignments = [];
108
+ for (const line of lines.filter((item) => item.cells[0] === "g")) {
109
+ const [, member, role, domain] = line.cells;
110
+ if (member === void 0 || role === void 0) {
111
+ skipped.push({
112
+ line: line.number,
113
+ text: line.text,
114
+ reason: "malformed",
115
+ detail: "a g line names a member and a role"
116
+ });
117
+ continue;
118
+ }
119
+ if (roleNames.has(member)) parents.set(member, [...parents.get(member) ?? [], role]);
120
+ else assignments.push({
121
+ user: member,
122
+ role,
123
+ ...domain === void 0 || domain === "" ? {} : { domain }
124
+ });
125
+ }
126
+ const own = /* @__PURE__ */ new Map();
127
+ const actions = /* @__PURE__ */ new Map();
128
+ for (const line of lines.filter((item) => item.cells[0] === "p")) {
129
+ const cells = line.cells.slice(1);
130
+ const subject = cells[0] ?? "";
131
+ const domain = model.domains ? cells[1] : void 0;
132
+ const [object, action] = cells.slice(model.domains ? 2 : 1);
133
+ const eft = cells[width];
134
+ const skip = (reason, detail) => {
135
+ skipped.push({
136
+ line: line.number,
137
+ text: line.text,
138
+ reason,
139
+ detail,
140
+ ...eft === "deny" ? { deny: true } : {}
141
+ });
142
+ };
143
+ if (object === void 0 || action === void 0) {
144
+ skip("malformed", `a p line has ${String(width)} fields`);
145
+ continue;
146
+ }
147
+ if (!roleNames.has(subject)) {
148
+ skip("user-grant", `${subject} is not a role any g line names; PermDock grants roles, never users`);
149
+ continue;
150
+ }
151
+ if (domain !== void 0 && domain !== "*") {
152
+ skip("domain-grant", `the grant holds only in domain ${domain}; a per-tenant grant is a custom role (CustomRoleSource)`);
153
+ continue;
154
+ }
155
+ if (eft === "deny" && !model.denies) {
156
+ skip("deny-without-effect", "the model's effect never applies a deny");
157
+ continue;
158
+ }
159
+ if (!isIdentifier(object) || !isIdentifier(action)) {
160
+ skip("not-an-identifier", `${object}.${action} is not a permission key; patterns and paths do not import`);
161
+ continue;
162
+ }
163
+ const set = actions.get(object) ?? /* @__PURE__ */ new Set();
164
+ actions.set(object, set);
165
+ set.add(action);
166
+ own.set(subject, [...own.get(subject) ?? [], {
167
+ effect: eft === "deny" ? "deny" : "allow",
168
+ resource: object,
169
+ action
170
+ }]);
171
+ }
172
+ return {
173
+ actions,
174
+ roles: [...roleNames].map((name) => ({
175
+ name,
176
+ grants: inherited(name, own, parents)
177
+ })),
178
+ assignments,
179
+ skipped
180
+ };
181
+ }
182
+ function readText(cwd, flag, path) {
183
+ if (path === void 0) return { error: `casbin import needs ${flag} <file>` };
184
+ const full = resolve(cwd, path);
185
+ return existsSync(full) ? readFileSync(full, "utf8") : { error: `casbin import ${flag}: ${path} does not exist` };
186
+ }
187
+ /**
188
+ * `permdock casbin import`: an RBAC model and its policy CSV into a
189
+ * `permissions` and `policy` module, with user assignments as data. Exits 1
190
+ * when a deny line did not import, because leaving one out would widen access.
191
+ */
192
+ function runCasbinImport(input) {
193
+ if (input.out === void 0) return {
194
+ code: 2,
195
+ output: "casbin import needs --out <file>"
196
+ };
197
+ const modelText = readText(input.cwd, "--model", input.model);
198
+ const policyText = readText(input.cwd, "--policy", input.policy);
199
+ for (const read of [modelText, policyText]) if (typeof read !== "string") return {
200
+ code: 2,
201
+ output: read.error
202
+ };
203
+ const model = readCasbinModel(String(modelText));
204
+ if ("refused" in model) return {
205
+ code: 2,
206
+ output: `casbin import --model: ${model.refused}`
207
+ };
208
+ const imported = importCasbin(model, String(policyText));
209
+ applyFiles(input.cwd, [{
210
+ path: input.out,
211
+ text: emitPolicyModule({
212
+ generator: "casbin import",
213
+ actions: imported.actions,
214
+ roles: imported.roles,
215
+ exports: { assignments: imported.assignments }
216
+ })
217
+ }]);
218
+ const droppedDeny = imported.skipped.some((item) => item.deny === true);
219
+ const code = droppedDeny ? 1 : 0;
220
+ if (input.json) return {
221
+ code,
222
+ output: JSON.stringify({
223
+ out: input.out,
224
+ assignments: imported.assignments.length,
225
+ skipped: imported.skipped
226
+ })
227
+ };
228
+ return {
229
+ code,
230
+ output: [...imported.skipped.map((item) => `${item.reason}: line ${String(item.line)} (${item.text}): ${item.detail}`), `casbin import: wrote ${String(imported.roles.length)} role(s) and ${String(imported.assignments.length)} assignment(s) to ${input.out}, skipped ${String(imported.skipped.length)}${droppedDeny ? "; a deny line did not import, so the policy allows more than the model: map it by hand" : ""}`].join("\n")
231
+ };
232
+ }
233
+ //#endregion
234
+ export { runCasbinImport };
@@ -0,0 +1,24 @@
1
+ import { t as defineLeaf } from "./command-L8EstFNm.js";
2
+ import { c as given, l as outFlag, o as fileOut } from "./flags-C3DktBDY.js";
3
+ //#region src/cli/commands/casl.ts
4
+ const caslImport = defineLeaf({
5
+ flags: {
6
+ rules: {
7
+ type: "string",
8
+ description: "JSON of { [role]: rules }, each role's ability.rules or packRules output",
9
+ valueHint: "file"
10
+ },
11
+ ...outFlag
12
+ },
13
+ async run(ctx, { flags }) {
14
+ const { runCaslImport } = await import("./casl-DjEDhTCP.js");
15
+ return runCaslImport({
16
+ cwd: ctx.cwd,
17
+ rules: given(flags.rules),
18
+ out: fileOut("casl import", flags.out),
19
+ json: ctx.json
20
+ });
21
+ }
22
+ });
23
+ //#endregion
24
+ export { caslImport };
@@ -0,0 +1,299 @@
1
+ import { r as isRecord } from "./compact-CAf557ZB.js";
2
+ import { t as applyFiles } from "./files-C5ZI27eV.js";
3
+ import { n as isIdentifier, t as emitPolicyModule } from "./policy-module-CTlwMvLI.js";
4
+ import { existsSync, readFileSync } from "node:fs";
5
+ import { resolve } from "node:path";
6
+ //#region src/cli/importers/casl.ts
7
+ const CRUD = [
8
+ "create",
9
+ "read",
10
+ "update",
11
+ "delete"
12
+ ];
13
+ const OPERATORS = {
14
+ $eq: "eq",
15
+ $ne: "ne",
16
+ $gt: "gt",
17
+ $gte: "gte",
18
+ $lt: "lt",
19
+ $lte: "lte",
20
+ $in: "in",
21
+ $nin: "notIn"
22
+ };
23
+ const PRINCIPAL_TEMPLATE = /^\$\{user\.([A-Za-z_$][A-Za-z0-9_$]*)\}$/u;
24
+ function list(value) {
25
+ if (value === void 0) return [];
26
+ return typeof value === "string" ? [value] : value;
27
+ }
28
+ function isStrings(value) {
29
+ return typeof value === "string" || Array.isArray(value) && value.every((item) => typeof item === "string");
30
+ }
31
+ /** `packRules` joins a list into one comma-separated string. */
32
+ function split(item) {
33
+ return typeof item === "string" && item.includes(",") ? item.split(",") : item;
34
+ }
35
+ /** A rule in either shape: the object form, or `packRules`' `[action, subject, conditions, inverted, fields]`. */
36
+ function readRule(value) {
37
+ if (Array.isArray(value)) {
38
+ const [action, subject, conditions, inverted, fields] = value;
39
+ return readRule({
40
+ action: split(action),
41
+ subject: split(subject),
42
+ ...isRecord(conditions) ? { conditions } : {},
43
+ ...inverted === 1 || inverted === true ? { inverted: true } : {},
44
+ ...fields === void 0 || fields === 0 ? {} : { fields: split(fields) }
45
+ });
46
+ }
47
+ if (!isRecord(value) || !isStrings(value["action"])) return;
48
+ const { subject, fields, conditions, inverted } = value;
49
+ if (subject !== void 0 && !isStrings(subject) || fields !== void 0 && !isStrings(fields) || conditions !== void 0 && !isRecord(conditions) || inverted !== void 0 && typeof inverted !== "boolean") return;
50
+ return {
51
+ action: value["action"],
52
+ ...subject === void 0 ? {} : { subject },
53
+ ...fields === void 0 ? {} : { fields },
54
+ ...conditions === void 0 ? {} : { conditions },
55
+ ...inverted === true ? { inverted: true } : {}
56
+ };
57
+ }
58
+ /** A CASL subject type as a resource key: `BlogPost` becomes `blogPost`. */
59
+ function resourceKey(subject) {
60
+ return `${subject.slice(0, 1).toLowerCase()}${subject.slice(1)}`;
61
+ }
62
+ function isUnsupported(read) {
63
+ return "unsupported" in read;
64
+ }
65
+ function readValue(value) {
66
+ if (typeof value === "string") {
67
+ const principal = PRINCIPAL_TEMPLATE.exec(value)?.[1];
68
+ return { value: principal === void 0 ? value : { principal } };
69
+ }
70
+ if (value === null || typeof value === "number" || typeof value === "boolean") return { value };
71
+ if (Array.isArray(value)) {
72
+ const items = [];
73
+ for (const item of value) {
74
+ const read = readValue(item);
75
+ if (isUnsupported(read)) return read;
76
+ items.push(read.value);
77
+ }
78
+ return { value: items };
79
+ }
80
+ return { unsupported: "a nested object value" };
81
+ }
82
+ /** The Mongo-query subset CASL conditions use, as a `where`; anything else is reported by name. */
83
+ function readConditions(conditions) {
84
+ const parts = [];
85
+ for (const [key, value] of Object.entries(conditions)) {
86
+ if (key === "$and" || key === "$or" || key === "$nor") {
87
+ if (!Array.isArray(value)) return { unsupported: `${key} without a list` };
88
+ const items = [];
89
+ for (const item of value) {
90
+ const read = isRecord(item) ? readConditions(item) : { unsupported: `${key} item` };
91
+ if (isUnsupported(read)) return read;
92
+ items.push(read);
93
+ }
94
+ parts.push(key === "$and" ? { and: items } : key === "$or" ? { or: items } : { not: { or: items } });
95
+ continue;
96
+ }
97
+ if (key.startsWith("$")) return { unsupported: key };
98
+ if (key.includes(".")) return { unsupported: `the nested field ${key}` };
99
+ const read = readField(key, value);
100
+ if (isUnsupported(read)) return read;
101
+ parts.push(read);
102
+ }
103
+ return parts.length === 1 && parts[0] !== void 0 ? parts[0] : { and: parts };
104
+ }
105
+ function readField(field, value) {
106
+ if (!isRecord(value)) {
107
+ const read = readValue(value);
108
+ return isUnsupported(read) ? read : {
109
+ field,
110
+ op: "eq",
111
+ value: read.value
112
+ };
113
+ }
114
+ const parts = [];
115
+ for (const [operator, operand] of Object.entries(value)) {
116
+ if (operator === "$exists") {
117
+ parts.push({
118
+ field,
119
+ op: "isNull",
120
+ value: operand !== true
121
+ });
122
+ continue;
123
+ }
124
+ const op = OPERATORS[operator];
125
+ if (op === void 0) return { unsupported: operator };
126
+ const read = readValue(operand);
127
+ if (isUnsupported(read)) return read;
128
+ parts.push({
129
+ field,
130
+ op,
131
+ value: read.value
132
+ });
133
+ }
134
+ return parts.length === 1 && parts[0] !== void 0 ? parts[0] : { and: parts };
135
+ }
136
+ /** The subjects and the actions each is named with, `all` and `manage` aside. */
137
+ function collectActions(rule, subjects, actionsBySubject) {
138
+ for (const subject of list(rule.subject).filter((item) => item !== "all")) {
139
+ subjects.add(subject);
140
+ const actions = actionsBySubject.get(subject) ?? /* @__PURE__ */ new Set();
141
+ actionsBySubject.set(subject, actions);
142
+ for (const action of list(rule.action)) if (action !== "manage") actions.add(action);
143
+ }
144
+ }
145
+ /**
146
+ * CASL rules per role, as PermDock roles: `inverted` rules are denies,
147
+ * `manage` and `all` expand to every action and subject the rules name, and
148
+ * conditions in the portable Mongo-query subset become `where`. A deny whose
149
+ * condition does not import keeps its effect without the condition, so the
150
+ * import can only deny more, never less.
151
+ */
152
+ function importCasl(rulesByRole) {
153
+ const parsed = [];
154
+ const skipped = [];
155
+ const subjects = /* @__PURE__ */ new Set();
156
+ const actionsBySubject = /* @__PURE__ */ new Map();
157
+ for (const [role, rules] of Object.entries(rulesByRole)) for (const [index, raw] of rules.entries()) {
158
+ const rule = readRule(raw);
159
+ if (rule === void 0) {
160
+ skipped.push({
161
+ role,
162
+ rule: index,
163
+ reason: "not-a-rule",
164
+ detail: "not a CASL raw rule"
165
+ });
166
+ continue;
167
+ }
168
+ parsed.push({
169
+ role,
170
+ index,
171
+ rule
172
+ });
173
+ collectActions(rule, subjects, actionsBySubject);
174
+ }
175
+ const actionsOf = (subject) => {
176
+ const named = [...actionsBySubject.get(subject) ?? []].filter(isIdentifier);
177
+ return named.length === 0 ? CRUD : named;
178
+ };
179
+ const resources = /* @__PURE__ */ new Map();
180
+ const roles = /* @__PURE__ */ new Map();
181
+ for (const { role, index, rule } of parsed) {
182
+ const grants = roles.get(role) ?? [];
183
+ roles.set(role, grants);
184
+ const named = list(rule.subject);
185
+ if (named.length === 0) {
186
+ skipped.push({
187
+ role,
188
+ rule: index,
189
+ reason: "no-subject",
190
+ detail: "a claim-only rule (no subject) has no resource to grant on"
191
+ });
192
+ continue;
193
+ }
194
+ const effect = rule.inverted === true ? "deny" : "allow";
195
+ let where;
196
+ if (rule.conditions !== void 0) {
197
+ const read = readConditions(rule.conditions);
198
+ if (isUnsupported(read)) {
199
+ if (effect === "allow") {
200
+ skipped.push({
201
+ role,
202
+ rule: index,
203
+ reason: "unsupported-condition",
204
+ detail: `${read.unsupported} has no portable condition; the allow is left out`
205
+ });
206
+ continue;
207
+ }
208
+ skipped.push({
209
+ role,
210
+ rule: index,
211
+ reason: "deny-widened",
212
+ detail: `${read.unsupported} has no portable condition; the deny applies without it`
213
+ });
214
+ } else where = read;
215
+ }
216
+ const fields = list(rule.fields);
217
+ const expanded = named.includes("all") ? [.../* @__PURE__ */ new Set([...named.filter((item) => item !== "all"), ...subjects])] : named;
218
+ for (const subject of expanded) {
219
+ const key = resourceKey(subject);
220
+ for (const action of list(rule.action).flatMap((item) => item === "manage" ? actionsOf(subject) : [item])) {
221
+ if (!isIdentifier(key) || !isIdentifier(action)) {
222
+ skipped.push({
223
+ role,
224
+ rule: index,
225
+ reason: "not-an-identifier",
226
+ detail: `${subject}.${action} is not a permission key`
227
+ });
228
+ continue;
229
+ }
230
+ const actions = resources.get(key) ?? /* @__PURE__ */ new Set();
231
+ resources.set(key, actions);
232
+ actions.add(action);
233
+ grants.push({
234
+ effect,
235
+ resource: key,
236
+ action,
237
+ ...where === void 0 ? {} : { where },
238
+ ...fields.length === 0 ? {} : { fields }
239
+ });
240
+ }
241
+ }
242
+ }
243
+ return {
244
+ actions: resources,
245
+ roles: [...roles.entries()].map(([name, grants]) => ({
246
+ name,
247
+ grants
248
+ })),
249
+ skipped
250
+ };
251
+ }
252
+ /** `permdock casl import`: CASL rules per role into a `permissions` and `policy` module. */
253
+ function runCaslImport(input) {
254
+ if (input.rules === void 0 || input.out === void 0) return {
255
+ code: 2,
256
+ output: "casl import needs --rules <file> and --out <file>"
257
+ };
258
+ const path = resolve(input.cwd, input.rules);
259
+ if (!existsSync(path)) return {
260
+ code: 2,
261
+ output: `casl import --rules: ${input.rules} does not exist`
262
+ };
263
+ let parsed;
264
+ try {
265
+ parsed = JSON.parse(readFileSync(path, "utf8"));
266
+ } catch {
267
+ return {
268
+ code: 2,
269
+ output: `casl import --rules: ${input.rules} is not JSON`
270
+ };
271
+ }
272
+ if (!isRecord(parsed) || !Object.values(parsed).every((rules) => Array.isArray(rules))) return {
273
+ code: 2,
274
+ output: "casl import --rules: expected { [role]: rules }, each role's ability.rules or packRules output"
275
+ };
276
+ const imported = importCasl(parsed);
277
+ applyFiles(input.cwd, [{
278
+ path: input.out,
279
+ text: emitPolicyModule({
280
+ generator: "casl import",
281
+ actions: imported.actions,
282
+ roles: imported.roles
283
+ })
284
+ }]);
285
+ if (input.json) return {
286
+ code: 0,
287
+ output: JSON.stringify({
288
+ out: input.out,
289
+ skipped: imported.skipped
290
+ })
291
+ };
292
+ const grants = imported.roles.reduce((total, role) => total + role.grants.length, 0);
293
+ return {
294
+ code: 0,
295
+ output: [...imported.skipped.map((item) => `${item.reason}: role ${item.role}, rule ${String(item.rule)}: ${item.detail}`), `casl import: wrote ${String(imported.roles.length)} role(s) with ${String(grants)} grant(s) to ${input.out}, skipped ${String(imported.skipped.filter((item) => item.reason !== "deny-widened").length)}`].join("\n")
296
+ };
297
+ }
298
+ //#endregion
299
+ export { runCaslImport };
@@ -1,4 +1,56 @@
1
- import { a as CatalogDocument, c as CatalogResource, d as CatalogSupportAccess, f as CatalogUsage, i as CatalogDelegation, l as CatalogRole, n as CatalogApproval, o as CatalogGrant, p as CatalogValidity, r as CatalogBreakGlass, s as CatalogPermission, t as CatalogActivation, u as CatalogScope } from "../types-Dnemwd77.js";
1
+ import { T as Policy, rr as Principal } from "../policy-types-DzwivBgR.js";
2
+ import { a as PolicyDocument } from "../hosted-DBDX0M-P.js";
3
+ import { a as CatalogDocument, c as CatalogOperation, d as CatalogRole, f as CatalogScope, h as CatalogValidity, i as CatalogDelegation, l as CatalogPermission, m as CatalogUsage, n as CatalogApproval, o as CatalogGrant, p as CatalogSupportAccess, r as CatalogBreakGlass, s as CatalogOAuthScope, t as CatalogActivation, u as CatalogResource } from "../types-CZTnPFzM.js";
4
+ import { a as CatalogFinding, i as CatalogEventData } from "../sink-Bj_lDUDq.js";
5
+ import { a as pushedPolicy, i as parsePushedPolicy, n as PushedGrant, r as PushedPolicy, t as PUSHED_POLICY_SCHEMA } from "../pushed-policy-BImMTTIM.js";
6
+ import { StandardSchemaV1 } from "@standard-schema/spec";
7
+ //#region src/catalog/drift.d.ts
8
+ /**
9
+ * The hosted grants of `document` that `policy` no longer accepts, as drift
10
+ * findings with the grant id set. A grant dropped for a reason the catalog
11
+ * cannot cause (`non-portable`, `invalid`) is not a finding.
12
+ */
13
+ export declare function hostedGrantFindings(policy: Policy, document: PolicyDocument | null): readonly CatalogFinding[];
14
+ type CatalogDriftInput = {
15
+ readonly previous: CatalogDocument;
16
+ readonly next: CatalogDocument;
17
+ /** The policy rebuilt from `next` (`policyFromCatalog`), which live hosted grants must still pass. */
18
+ readonly policy: Policy;
19
+ /** The live hosted grants; absent or `null` when the environment has none. */
20
+ readonly document?: PolicyDocument | null;
21
+ };
22
+ /**
23
+ * The `data` of a `com.permdock.catalog.drifted` event: the hosted grants
24
+ * `next` breaks, then the operations whose risk rose or whose approval was
25
+ * removed between `previous` and `next`.
26
+ */
27
+ export declare function catalogDrift(input: CatalogDriftInput): CatalogEventData;
28
+ //#endregion
29
+ //#region src/catalog/json-schema-validator.d.ts
30
+ /**
31
+ * A Standard Schema that validates against a catalog resource's JSON Schema.
32
+ * `null` (no JSON Schema in the catalog) gives `undefined`. A schema that uses
33
+ * a keyword outside the supported subset rejects every value, so a hosted
34
+ * check never validates less than the code did.
35
+ */
36
+ export declare function resourceSchemaFromJson(json: unknown): StandardSchemaV1 | undefined;
37
+ //#endregion
38
+ //#region src/catalog/operation-findings.d.ts
39
+ /** What `operationFindings` reads of a catalog: a `CatalogDocument` fits. */
40
+ type OperationCatalog = {
41
+ readonly permissions: readonly {
42
+ readonly key: string;
43
+ readonly approvals?: readonly unknown[];
44
+ }[];
45
+ readonly operations?: readonly CatalogOperation[];
46
+ };
47
+ /**
48
+ * Operations, matched by name, whose `meta.risk` rose or whose permission
49
+ * stopped requiring approval between two catalogs. A new or removed
50
+ * operation is not a finding.
51
+ */
52
+ export declare function operationFindings(previous: OperationCatalog, next: OperationCatalog): readonly CatalogFinding[];
53
+ //#endregion
2
54
  //#region src/catalog/parse.d.ts
3
55
  /**
4
56
  * Reads a `permissions.catalog.json` document (parsed, or the JSON text) and
@@ -9,4 +61,24 @@ export declare function parseCatalog(json: unknown): CatalogDocument;
9
61
  /** Keys of the permissions the catalog marks `rowConditions: true`: the SQL helpers alone cannot enforce them. */
10
62
  export declare function rowConditionKeys(catalog: CatalogDocument): ReadonlySet<string>;
11
63
  //#endregion
12
- export type { CatalogActivation, CatalogApproval, CatalogBreakGlass, CatalogDelegation, CatalogDocument, CatalogGrant, CatalogPermission, CatalogResource, CatalogRole, CatalogScope, CatalogSupportAccess, CatalogUsage, CatalogValidity };
64
+ //#region src/catalog/policy-from-catalog.d.ts
65
+ type PolicyFromCatalogOptions<TUser = unknown> = {
66
+ /** Maps the request's user to the subject; the identity function when absent. */
67
+ readonly subject?: (user: TUser) => Principal | null;
68
+ };
69
+ /**
70
+ * Rebuilds an evaluable `Policy` from a catalog (`permissions.catalog.json`)
71
+ * and the policy `permdock cloud push` sent with it, for a service that holds
72
+ * no application code: the hosted AuthZEN endpoint or a `mergeHostedGrants`
73
+ * pre-check. Throws `PermDockValidationError` when either input is malformed
74
+ * or the two disagree.
75
+ *
76
+ * What only code can answer fails closed: an allow whose condition is a
77
+ * closure never grants and such a deny always applies; a resource schema
78
+ * keyword outside the supported JSON Schema subset rejects every value; a
79
+ * support role has no one who may consent. Grant levels and OAuth scopes
80
+ * are not in a catalog, so the rebuilt policy has none.
81
+ */
82
+ export declare function policyFromCatalog<TUser = unknown>(catalogInput: unknown, pushedInput: unknown, options?: PolicyFromCatalogOptions<TUser>): Policy<TUser>;
83
+ //#endregion
84
+ export { type CatalogActivation, type CatalogApproval, type CatalogBreakGlass, type CatalogDelegation, type CatalogDocument, type CatalogDriftInput, type CatalogGrant, type CatalogOAuthScope, type CatalogOperation, type CatalogPermission, type CatalogResource, type CatalogRole, type CatalogScope, type CatalogSupportAccess, type CatalogUsage, type CatalogValidity, PUSHED_POLICY_SCHEMA, type PolicyFromCatalogOptions, type PushedGrant, type PushedPolicy, parsePushedPolicy, pushedPolicy };