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,124 @@
1
+ import { n as CliError } from "./errors-CWTY6uih.js";
2
+ import { existsSync, mkdirSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync } from "node:fs";
3
+ import { dirname, relative, resolve } from "node:path";
4
+ import { execFileSync } from "node:child_process";
5
+ //#region src/cli/core/files.ts
6
+ function outcomeOf(abs, text) {
7
+ if (!existsSync(abs)) return "created";
8
+ return readFileSync(abs, "utf8") === text ? "unchanged" : "updated";
9
+ }
10
+ /** What writing `files` would do, without writing. */
11
+ function planFiles(cwd, files) {
12
+ return files.map((file) => ({
13
+ path: file.path,
14
+ outcome: outcomeOf(resolve(cwd, file.path), file.text)
15
+ }));
16
+ }
17
+ /**
18
+ * Writes every created or updated file, all or nothing: each one is staged
19
+ * beside its target first, and a failed stage removes the others before
20
+ * anything is replaced. `dryRun` only plans.
21
+ */
22
+ function applyFiles(cwd, files, options = {}) {
23
+ const planned = planFiles(cwd, files);
24
+ if (options.dryRun === true) return planned;
25
+ const staged = [];
26
+ try {
27
+ for (const [index, file] of files.entries()) {
28
+ if (planned[index]?.outcome === "unchanged") continue;
29
+ const target = resolve(cwd, file.path);
30
+ const temp = `${target}.permdock-${String(process.pid)}.tmp`;
31
+ mkdirSync(dirname(target), { recursive: true });
32
+ writeFileSync(temp, file.text);
33
+ staged.push({
34
+ temp,
35
+ target
36
+ });
37
+ }
38
+ } catch (error) {
39
+ for (const { temp } of staged) rmSync(temp, { force: true });
40
+ throw new CliError("failed", `could not write ${describe(error)}; wrote nothing`, {
41
+ code: "write_failed",
42
+ cause: error
43
+ });
44
+ }
45
+ for (const { temp, target } of staged) renameSync(temp, target);
46
+ return planned;
47
+ }
48
+ function describe(error) {
49
+ return error instanceof Error ? error.message : String(error);
50
+ }
51
+ const VERBS = {
52
+ created: ["Created", "Would create"],
53
+ updated: ["Updated", "Would update"],
54
+ unchanged: ["Unchanged", "Unchanged"]
55
+ };
56
+ /** One line per file: `Created x`, or `Would create x` under `--dry-run`. */
57
+ function fileSummary(applied, dryRun) {
58
+ return applied.map((file) => `${VERBS[file.outcome][dryRun ? 1 : 0]} ${file.path}`).join("\n");
59
+ }
60
+ /**
61
+ * The files among `paths` with uncommitted changes in git. Outside a git
62
+ * work tree, or without git, nothing counts as dirty.
63
+ */
64
+ function dirtyFiles(cwd, paths) {
65
+ if (paths.length === 0) return [];
66
+ let status;
67
+ try {
68
+ status = execFileSync("git", [
69
+ "status",
70
+ "--porcelain",
71
+ "-z",
72
+ "--",
73
+ ...paths.map((path) => resolve(cwd, path))
74
+ ], {
75
+ cwd,
76
+ encoding: "utf8",
77
+ stdio: [
78
+ "ignore",
79
+ "pipe",
80
+ "ignore"
81
+ ]
82
+ });
83
+ } catch {
84
+ return [];
85
+ }
86
+ let root;
87
+ try {
88
+ root = execFileSync("git", ["rev-parse", "--show-toplevel"], {
89
+ cwd,
90
+ encoding: "utf8",
91
+ stdio: [
92
+ "ignore",
93
+ "pipe",
94
+ "ignore"
95
+ ]
96
+ }).trim();
97
+ } catch {
98
+ return [];
99
+ }
100
+ return status.split("\0").filter((entry) => entry.length > 3).map((entry) => relative(realpathSync(cwd), resolve(root, entry.slice(3))));
101
+ }
102
+ /**
103
+ * A rewrite of hand-written files stops when one of them has uncommitted
104
+ * changes, so `git diff` shows only what the command changed. `--force`
105
+ * rewrites anyway.
106
+ */
107
+ function refuseDirty(input) {
108
+ if (input.force) return;
109
+ const dirty = dirtyFiles(input.cwd, input.paths);
110
+ if (dirty.length === 0) return;
111
+ throw new CliError("action", `${input.command} rewrites files with uncommitted changes: ${dirty.join(", ")}. Commit or stash them first, so git diff shows only the rewrite.`, {
112
+ code: "dirty_worktree",
113
+ extensions: { files: dirty },
114
+ next: [{
115
+ when: "to see the changes first",
116
+ command: `permdock ${input.invocation} --dry-run`
117
+ }, {
118
+ when: "to rewrite anyway",
119
+ command: `permdock ${input.invocation} --force`
120
+ }]
121
+ });
122
+ }
123
+ //#endregion
124
+ export { fileSummary as n, refuseDirty as r, applyFiles as t };
@@ -1,5 +1,5 @@
1
- import { existsSync, globSync, readdirSync, realpathSync, statSync } from "node:fs";
2
- import { basename, extname, join, relative, resolve } from "node:path";
1
+ import { existsSync, globSync, mkdirSync, readFileSync, readdirSync, realpathSync, statSync, writeFileSync } from "node:fs";
2
+ import { basename, dirname, extname, join, relative, resolve } from "node:path";
3
3
  //#region src/cli/files.ts
4
4
  const SOURCE_EXT = /* @__PURE__ */ new Set([
5
5
  ".ts",
@@ -121,5 +121,14 @@ function defaultSrcPath() {
121
121
  function doctorSrcPath(config) {
122
122
  return config.doctor?.srcPath ?? config.collect?.srcPath ?? defaultSrcPath();
123
123
  }
124
+ /** The parsed JSON at `path`; throws when it is unreadable or not JSON. */
125
+ function readJsonFile(path) {
126
+ return JSON.parse(readFileSync(path, "utf8"));
127
+ }
128
+ /** Writes `text` to `path`, creating its directory first. */
129
+ function writeFileEnsuringDir(path, text) {
130
+ mkdirSync(dirname(path), { recursive: true });
131
+ writeFileSync(path, text);
132
+ }
124
133
  //#endregion
125
- export { sqlFiles as a, rel as i, doctorSrcPath as n, listSourceFiles as r, defaultSrcPath as t };
134
+ export { rel as a, readJsonFile as i, doctorSrcPath as n, sqlFiles as o, listSourceFiles as r, writeFileEnsuringDir as s, defaultSrcPath as t };
@@ -1,23 +1,23 @@
1
- import { a as loadModule, o as pickNamed } from "./load-DhWEB9P1.js";
2
- import { existsSync, readFileSync } from "node:fs";
1
+ import { r as isRecord } from "./compact-CAf557ZB.js";
2
+ import { i as configError } from "./errors-CWTY6uih.js";
3
+ import { i as readJsonFile } from "./files-D_JIzUrP.js";
4
+ import { a as loadModule, s as pickNamed } from "./load-DFS_ry0W.js";
5
+ import { existsSync } from "node:fs";
3
6
  import { resolve } from "node:path";
4
7
  //#region src/cli/fixtures.ts
5
- function isRecord(value) {
6
- return value !== null && typeof value === "object" && !Array.isArray(value);
7
- }
8
8
  function asFixtures(value) {
9
9
  const list = Array.isArray(value) ? value : isRecord(value) && Array.isArray(value["fixtures"]) ? value["fixtures"] : void 0;
10
- if (list === void 0) throw new Error("PermDock CLI: fixtures must be an array or { fixtures }");
10
+ if (list === void 0) throw configError("PermDock CLI: fixtures must be an array or { fixtures }");
11
11
  return list.map((item, index) => {
12
- if (!isRecord(item) || !isRecord(item["subject"]) || item["row"] === void 0) throw new Error(`PermDock CLI: fixture ${index} needs subject and row`);
12
+ if (!isRecord(item) || !isRecord(item["subject"]) || item["row"] === void 0) throw configError(`PermDock CLI: fixture ${index} needs subject and row`);
13
13
  if (typeof item["action"] !== "string") throw new TypeError(`PermDock CLI: fixture ${index} needs action`);
14
14
  if (typeof item["subject"]["id"] !== "string") throw new TypeError(`PermDock CLI: fixture ${index} subject needs id`);
15
15
  const memberships = item["subject"]["memberships"];
16
- if (memberships !== void 0 && !Array.isArray(memberships)) throw new Error(`PermDock CLI: fixture ${index} subject.memberships must be an array`);
16
+ if (memberships !== void 0 && !Array.isArray(memberships)) throw configError(`PermDock CLI: fixture ${index} subject.memberships must be an array`);
17
17
  const tenant = item["subject"]["tenant"];
18
- if (tenant !== void 0 && typeof tenant !== "string") throw new Error(`PermDock CLI: fixture ${index} subject.tenant must be a string`);
18
+ if (tenant !== void 0 && typeof tenant !== "string") throw configError(`PermDock CLI: fixture ${index} subject.tenant must be a string`);
19
19
  const claims = item["subject"]["claims"];
20
- if (claims !== void 0 && !isRecord(claims)) throw new Error(`PermDock CLI: fixture ${index} subject.claims must be an object`);
20
+ if (claims !== void 0 && !isRecord(claims)) throw configError(`PermDock CLI: fixture ${index} subject.claims must be an object`);
21
21
  return item;
22
22
  });
23
23
  }
@@ -29,9 +29,9 @@ function asCustomRoles(value) {
29
29
  /** A `.json` file or a module exporting `fixtures` (or default) and optionally `customRoles`. */
30
30
  async function loadFixtures(cwd, path) {
31
31
  const abs = resolve(cwd, path);
32
- if (!existsSync(abs)) throw new Error(`PermDock CLI: fixtures not found: ${path}`);
32
+ if (!existsSync(abs)) throw configError(`PermDock CLI: fixtures not found: ${path}`);
33
33
  if (abs.endsWith(".json")) {
34
- const parsed = JSON.parse(readFileSync(abs, "utf8"));
34
+ const parsed = readJsonFile(abs);
35
35
  return {
36
36
  fixtures: asFixtures(parsed),
37
37
  customRoles: asCustomRoles(parsed)
@@ -0,0 +1,86 @@
1
+ import { n as CliError } from "./errors-CWTY6uih.js";
2
+ import { n as secretInput } from "./credentials-DPyHmYz5.js";
3
+ //#region src/cli/core/flags.ts
4
+ /** The flag vocabulary shared with better-supabase: one spelling per meaning. */
5
+ const dbUrlFlags = { "db-url-stdin": {
6
+ type: "boolean",
7
+ description: "Read the Postgres connection string from stdin (default $DATABASE_URL, then $SUPABASE_DB_URL)"
8
+ } };
9
+ const outFlag = { out: {
10
+ type: "string",
11
+ description: "File to write",
12
+ valueHint: "file"
13
+ } };
14
+ const checkFlag = { check: {
15
+ type: "boolean",
16
+ description: "Exit 1 when a file on disk is stale; write nothing"
17
+ } };
18
+ const dryRunFlag = { "dry-run": {
19
+ type: "boolean",
20
+ description: "Print what would change; write nothing"
21
+ } };
22
+ const forceFlag = { force: {
23
+ type: "boolean",
24
+ description: "Overwrite files PermDock did not write or that changed by hand"
25
+ } };
26
+ const policyFlag = { policy: {
27
+ type: "string",
28
+ description: "Module exporting the policy (default policy in the config)",
29
+ valueHint: "module"
30
+ } };
31
+ const permissionsFlag = { permissions: {
32
+ type: "string",
33
+ description: "Module exporting the permissions (default permissions in the config)",
34
+ valueHint: "module"
35
+ } };
36
+ const failOnFlag = { "fail-on": {
37
+ type: "enum",
38
+ options: ["error", "warning"],
39
+ default: "error",
40
+ description: "Lowest finding severity that exits 1"
41
+ } };
42
+ const validatorFlag = { validator: {
43
+ type: "enum",
44
+ options: [
45
+ "zod",
46
+ "valibot",
47
+ "arktype"
48
+ ],
49
+ description: "Schema library for the generated resources (default zod)"
50
+ } };
51
+ /**
52
+ * The connection string from `--db-url-stdin`, or, when the leaf needs one,
53
+ * `DATABASE_URL` then `SUPABASE_DB_URL`: the order better-supabase reads them.
54
+ */
55
+ async function dbUrl(ctx, flags, options) {
56
+ const piped = await secretInput(ctx, {
57
+ flag: "db-url",
58
+ stdin: flags["db-url-stdin"]
59
+ });
60
+ if (piped !== void 0 || options?.required !== true) return piped;
61
+ for (const name of DB_URL_ENV) {
62
+ const value = ctx.env[name];
63
+ if (value !== void 0 && value !== "") {
64
+ ctx.addSecret(value);
65
+ return value;
66
+ }
67
+ }
68
+ }
69
+ const DB_URL_ENV = ["DATABASE_URL", "SUPABASE_DB_URL"];
70
+ /** A string flag given with a value; a bare flag reads as `""`. */
71
+ function given(value) {
72
+ return value === void 0 || value === "" ? void 0 : value;
73
+ }
74
+ /**
75
+ * `--out` for a command that only writes a file: `-` is refused instead of
76
+ * creating a file named `-`.
77
+ */
78
+ function fileOut(command, value) {
79
+ if (value === "-") throw new CliError("usage", `${command}: --out - is not supported; name a file.`, {
80
+ code: "invalid_value",
81
+ extensions: { flag: "--out" }
82
+ });
83
+ return given(value);
84
+ }
85
+ //#endregion
86
+ export { failOnFlag as a, given as c, policyFlag as d, validatorFlag as f, dryRunFlag as i, outFlag as l, dbUrl as n, fileOut as o, dbUrlFlags as r, forceFlag as s, checkFlag as t, permissionsFlag as u };
@@ -1,17 +1,20 @@
1
- import { t as compact } from "./compact-y6vfu2_f.js";
1
+ import { t as compact } from "./compact-CAf557ZB.js";
2
2
  import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
- import { _ as listPermissions } from "./permissions-DVoF6dMt.js";
4
- import { a as deniedMessage, i as approvalMessage, n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "./errors-Cz5zn0mW.js";
5
- import { n as sameId } from "./ids-DC4V4CFu.js";
6
- import { a as normalizeMemberships, d as scopeList, m as tenantOf, o as resolveScope, t as activeFor } from "./scopes-CVdPrWN-.js";
7
- import { a as whereFromGrants, c as rowIdOf, d as isArazzoSimulateInput, f as simulateArazzo, i as signSnapshot, l as rowValues, p as evaluateCondition } from "./snapshot-Enxd0n-s.js";
8
- import { D as synthesiseRole, E as listRoles, S as findRole, d as matchGrantee } from "./grantee-Cv5Sogfv.js";
9
- import { n as pickVisible, t as grantCoversField } from "./fields-BMl1RxoX.js";
10
- import { a as isMembershipExpired, i as inTeam, l as nestedAppliesWithoutRow, m as rowInScope, p as resolveActiveTenant, t as isActive, u as nowSeconds } from "./validity-uOp8UpYn.js";
3
+ import { a as deniedMessage, i as approvalMessage, n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "./errors-BKy0EfhN.js";
4
+ import { o as sameId } from "./expiry-D4_YKRKD.js";
5
+ import { c as listPermissions } from "./permission-registry-Br4jSNVi.js";
6
+ import { g as secondsOf, o as epochSeconds, t as INVALID_NOW } from "./time-DkWjdL98.js";
7
+ import { a as normalizeMemberships, d as scopeList, m as tenantOf, o as resolveScope, t as activeFor } from "./scopes-CUPSjo9q.js";
8
+ import { a as readOnlyActorRefuses, c as rowIdOf, l as rowValues, n as coveredByDelegation, u as evaluateCondition } from "./delegation-DaXVdDhM.js";
9
+ import { b as synthesiseRole, m as findRole, v as listRoles } from "./grantee-Cn1HyUsI.js";
10
+ import { a as grantCoversField, o as pickVisible, r as readWireValidity, t as isActive } from "./validity-CZ7-y0Cj.js";
11
+ import { c as nowSeconds, d as resolveActiveTenant, f as rowInScope, n as inTeam, r as isMembershipExpired, s as nestedAppliesWithoutRow } from "./tenancy-DN2QAx9z.js";
11
12
  import { t as requiresApproval } from "./approval-required-TzNB9oQA.js";
12
- import { t as coveredByDelegation } from "./delegation-D8pUEuce.js";
13
+ import { r as tokenPayload, t as decisionToken } from "./token-BLZcjQgt.js";
14
+ import { t as fromWireDelegation } from "./wire-delegation-Cv3W2eaM.js";
15
+ import { n as matchGrantee } from "./grantee-match-DHArqY82.js";
13
16
  import { t as resourceIdOf } from "./resource-ref-CaS9yVPi.js";
14
- import { n as payloadDigest, t as decisionToken } from "./token-CIWxJOCh.js";
17
+ import { a as deniedFor, n as mayUse, o as signSnapshot, r as permittedIds, t as whereFromGrants } from "./where-scope-Dv-WTP-w.js";
15
18
  //#region src/core/snapshot-evaluate.ts
16
19
  function coveredByInclude(snapshot, permission) {
17
20
  const include = snapshot.include;
@@ -81,6 +84,8 @@ function conditionOk(grant, permission, current, next, subject, now, scopes) {
81
84
  matched: false,
82
85
  reason: "opaque-condition"
83
86
  };
87
+ const deny = grant.effect === "deny";
88
+ let whereMatched;
84
89
  if (grant.where !== void 0) {
85
90
  if (permission.kind === "collection" || current === void 0) return {
86
91
  matched: false,
@@ -90,17 +95,22 @@ function conditionOk(grant, permission, current, next, subject, now, scopes) {
90
95
  matched: false,
91
96
  reason: "opaque-condition"
92
97
  };
93
- const matched = evaluateCondition(grant.where, current, subject, now, scopes, void 0, onOpaque);
98
+ whereMatched = evaluateCondition(grant.where, current, subject, now, scopes, void 0, onOpaque);
94
99
  if (opaqueReached) return {
95
100
  matched: false,
96
101
  reason: "opaque-condition"
97
102
  };
98
- if (!matched) return {
103
+ if (whereMatched && deny) return { matched: true };
104
+ if (!whereMatched && !deny) return {
99
105
  matched: false,
100
106
  reason: "condition"
101
107
  };
102
108
  }
103
- const check = grant.check;
109
+ const check = grant.check ?? (permission.action === "update" ? grant.where : void 0);
110
+ if (check === void 0 && whereMatched === false) return {
111
+ matched: false,
112
+ reason: "condition"
113
+ };
104
114
  if (check !== void 0) {
105
115
  if (check.op === "opaque") return {
106
116
  matched: false,
@@ -126,6 +136,8 @@ function matchedOf(grant) {
126
136
  return compact({
127
137
  role: grant.role,
128
138
  permission: grant.permission,
139
+ name: grant.name,
140
+ meta: grant.meta,
129
141
  to: grant.to,
130
142
  where: grant.where,
131
143
  check: grant.check,
@@ -133,7 +145,7 @@ function matchedOf(grant) {
133
145
  });
134
146
  }
135
147
  function evaluateSnapshot(snapshot, subject, permission, data, team, options, outcomeOnly = false) {
136
- let clock = options.now;
148
+ let clock = options.now === void 0 ? void 0 : epochSeconds(options.now);
137
149
  const now = () => clock ??= nowSeconds();
138
150
  const tracer = options.explain === true ? {
139
151
  evaluated: 0,
@@ -141,15 +153,22 @@ function evaluateSnapshot(snapshot, subject, permission, data, team, options, ou
141
153
  denies: [],
142
154
  skipped: []
143
155
  } : void 0;
144
- const done = (decision) => outcomeOnly ? decision : freezeDeep(tracer === void 0 ? decision : {
145
- ...decision,
146
- trace: {
147
- evaluated: tracer.evaluated,
148
- allows: tracer.allows,
149
- denies: tracer.denies,
150
- skipped: tracer.skipped
151
- }
152
- });
156
+ const done = (raw) => {
157
+ if (outcomeOnly) return raw;
158
+ const decision = raw.outcome === "denied" ? {
159
+ ...raw,
160
+ permission: permission.key
161
+ } : raw;
162
+ return freezeDeep(tracer === void 0 ? decision : {
163
+ ...decision,
164
+ trace: {
165
+ evaluated: tracer.evaluated,
166
+ allows: tracer.allows,
167
+ denies: tracer.denies,
168
+ skipped: tracer.skipped
169
+ }
170
+ });
171
+ };
153
172
  const skip = (grant, why) => {
154
173
  tracer?.skipped.push({
155
174
  role: grant.role,
@@ -166,6 +185,15 @@ function evaluateSnapshot(snapshot, subject, permission, data, team, options, ou
166
185
  }],
167
186
  alternatives: []
168
187
  });
188
+ if (clock !== void 0 && !Number.isFinite(clock)) return done({
189
+ outcome: "denied",
190
+ denials: [{
191
+ role: null,
192
+ reason: "validation",
193
+ detail: INVALID_NOW
194
+ }],
195
+ alternatives: []
196
+ });
169
197
  const { current, next } = rowValues(permission, data);
170
198
  const scopes = scopeList(snapshot.scopes);
171
199
  const denials = [];
@@ -183,7 +211,7 @@ function evaluateSnapshot(snapshot, subject, permission, data, team, options, ou
183
211
  continue;
184
212
  }
185
213
  let scoped = scopeOk(snapshot, grant, permission, subject, permission.kind === "instance" ? current : next, team, now(), options.scope);
186
- if (scoped.ok && permission.kind === "instance" && next !== current) scoped = scopeOk(snapshot, grant, permission, subject, next, team, now(), options.scope);
214
+ if (scoped.ok !== (grant.effect === "deny") && permission.kind === "instance" && next !== current) scoped = scopeOk(snapshot, grant, permission, subject, next, team, now(), options.scope);
187
215
  if (!scoped.ok) {
188
216
  denials.push(compact({
189
217
  role: grant.role,
@@ -192,7 +220,7 @@ function evaluateSnapshot(snapshot, subject, permission, data, team, options, ou
192
220
  }));
193
221
  continue;
194
222
  }
195
- if (!isActive(grant.validity, now())) {
223
+ if (!isActive(readWireValidity(grant.validity, grant.effect), now())) {
196
224
  if (grant.effect === "allow") denials.push({
197
225
  role: grant.role,
198
226
  reason: "inactive-grant",
@@ -269,7 +297,7 @@ function evaluateSnapshot(snapshot, subject, permission, data, team, options, ou
269
297
  alternatives: []
270
298
  });
271
299
  }
272
- if (snapshot.delegated !== void 0 && !snapshot.delegated.includes(permission.key)) return done({
300
+ if (snapshot.delegated !== void 0 && !snapshot.delegated.includes(permission.key) || readOnlyActorRefuses(subject.actor, permission)) return done({
273
301
  outcome: "denied",
274
302
  denials: [{
275
303
  role: null,
@@ -292,8 +320,8 @@ function evaluateSnapshot(snapshot, subject, permission, data, team, options, ou
292
320
  resourceId,
293
321
  principal: subject.principal,
294
322
  actor: subject.actor,
295
- fingerprint: `snapshot:${String(snapshot.issuedAt)}`,
296
- payload: resourceId === "*" && (next ?? current) !== void 0 ? payloadDigest(next ?? current) : void 0
323
+ fingerprint: `snapshot:${snapshot.issuedAt}`,
324
+ payload: tokenPayload(resourceId, next ?? current, options.args)
297
325
  });
298
326
  const grant = matchedOf(matched);
299
327
  if (requiresApproval(matched.approval)) return done({
@@ -302,12 +330,13 @@ function evaluateSnapshot(snapshot, subject, permission, data, team, options, ou
302
330
  reason: "human",
303
331
  token
304
332
  });
305
- return done({
333
+ return done(compact({
306
334
  outcome: "granted",
307
335
  subject,
308
336
  matched: grant,
309
- token
310
- });
337
+ token,
338
+ obligations: matched.obligations
339
+ }));
311
340
  }
312
341
  function whereFromSnapshot(snapshot, subject, permission, team) {
313
342
  return whereFromGrants(snapshot.grants.filter((grant) => grant.permission === permission.key), {
@@ -334,9 +363,9 @@ function subjectFromSnapshot(snapshot, tenant) {
334
363
  ...principal,
335
364
  tenant: nextTenant
336
365
  }),
337
- delegation: snapshot.subject.delegation,
366
+ delegation: fromWireDelegation(snapshot.subject.delegation),
338
367
  context: snapshot.subject.context,
339
- expiresAt: snapshot.expiresAt
368
+ expiresAt: secondsOf(snapshot.expiresAt)
340
369
  }));
341
370
  }
342
371
  /**
@@ -405,12 +434,18 @@ function fromSnapshot(snapshot, options = {}) {
405
434
  });
406
435
  const explain = ((permission, data, decideOptions) => run(permission, data, {
407
436
  ...decideOptions,
408
- source: decideOptions?.source ?? "explain",
437
+ call: decideOptions?.call ?? "explain",
409
438
  explain: true
410
439
  }));
411
440
  const instance = {
412
441
  can,
413
442
  decide,
443
+ decideEach(permission, rows, decideOptions) {
444
+ return Object.freeze(rows.map((row) => run(permission, row, decideOptions)));
445
+ },
446
+ decideFor(_principalId, permission) {
447
+ return Promise.resolve(deniedFor(permission, "unsupported"));
448
+ },
414
449
  assert,
415
450
  explain,
416
451
  permissions: {},
@@ -438,7 +473,6 @@ function fromSnapshot(snapshot, options = {}) {
438
473
  },
439
474
  simulate: ((input, simulateOptions) => {
440
475
  if (Array.isArray(input)) return input.map(([permission, data]) => run(permission, data, compact({ now: simulateOptions?.now })));
441
- if (isArazzoSimulateInput(input)) return simulateArazzo(input, input.permissions, (permission, data) => run(permission, data));
442
476
  const preview = input;
443
477
  const previewRoles = preview.roles?.map((item) => typeof item === "string" ? item : item.key);
444
478
  return fromSnapshot(freezeDeep({
@@ -455,7 +489,7 @@ function fromSnapshot(snapshot, options = {}) {
455
489
  }
456
490
  }), options);
457
491
  }),
458
- snapshot: ((signing) => signing?.signer === void 0 ? snapshot : signSnapshot(snapshot, signing.signer, signing.audience)),
492
+ snapshot: ((signing) => signing?.signer === void 0 ? snapshot : signSnapshot(snapshot, signing.signer, compact({ audience: signing.audience }))),
459
493
  on() {
460
494
  return () => void 0;
461
495
  },
@@ -497,38 +531,17 @@ function fromSnapshot(snapshot, options = {}) {
497
531
  }
498
532
  return out;
499
533
  },
500
- loadRelations() {
534
+ prefetchRelations() {
501
535
  return Promise.resolve();
502
536
  },
503
- whoCan(permission) {
504
- return Promise.resolve(freezeDeep({
505
- permission: permission.key,
506
- holders: [],
507
- complete: false
508
- }));
537
+ mayUse(permission) {
538
+ return mayUse(instance, permission);
509
539
  },
510
- decideRoleChange(change) {
511
- return freezeDeep({
512
- outcome: "denied",
513
- change,
514
- denials: [{
515
- role: null,
516
- reason: "unsupported"
517
- }]
518
- });
540
+ permittedIds(permission, scope, query) {
541
+ return permittedIds(instance, permission, scope, query);
519
542
  },
520
543
  derive() {
521
- return instance;
522
- },
523
- activate() {
524
- return freezeDeep({
525
- outcome: "denied",
526
- denials: [{
527
- role: null,
528
- reason: "unsupported"
529
- }],
530
- alternatives: []
531
- });
544
+ return Promise.resolve(instance);
532
545
  },
533
546
  assignableRoles(query) {
534
547
  if (query?.scope === "global") return [];
@@ -556,7 +569,7 @@ function fromSnapshot(snapshot, options = {}) {
556
569
  function emptySnapshot() {
557
570
  return freezeDeep({
558
571
  v: 1,
559
- issuedAt: 0,
572
+ issuedAt: "1970-01-01T00:00:00.000Z",
560
573
  subject: {
561
574
  principal: null,
562
575
  context: {}
@@ -1,3 +1,4 @@
1
+ import { r as isRecord } from "./compact-CAf557ZB.js";
1
2
  import { t as byCodePoint } from "./compare-pfyVnBjE.js";
2
3
  //#region src/cli/generate.ts
3
4
  const IDENTIFIER = /^[A-Za-z_$][A-Za-z0-9_$]*$/u;
@@ -19,9 +20,6 @@ function emptySchema(kind) {
19
20
  function propertyKey(name) {
20
21
  return IDENTIFIER.test(name) ? name : JSON.stringify(name);
21
22
  }
22
- function isRecord(value) {
23
- return value !== null && typeof value === "object" && !Array.isArray(value);
24
- }
25
23
  function literalEnum(schema) {
26
24
  const values = schema["enum"];
27
25
  if (!Array.isArray(values) || values.length === 0 || !values.every((value) => typeof value === "string")) return;