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
@@ -1,7 +1,7 @@
1
- import { t as packageRoot } from "./package-root-zGkxO3oN.js";
1
+ import { t as packageRoot } from "./package-root-Dk_ETdkp.js";
2
2
  import { readFileSync } from "node:fs";
3
3
  import { join } from "node:path";
4
- //#region src/cli/version.ts
4
+ //#region src/cli/core/version.ts
5
5
  function cliVersion() {
6
6
  return JSON.parse(readFileSync(join(packageRoot(), "package.json"), "utf8")).version;
7
7
  }
@@ -13,5 +13,6 @@ const SUPABASE_MANIFEST_SCHEMA = "https://permdock.com/schemas/supabase-manifest
13
13
  const USAGE_REPORT_SCHEMA = "https://permdock.com/schemas/usage-report-v1.json";
14
14
  const DOCTOR_REPORT_SCHEMA = "https://permdock.com/schemas/doctor-report-v1.json";
15
15
  const CONFIG_REPORT_SCHEMA = "https://permdock.com/schemas/config-report-v1.json";
16
+ const ARAZZO_REPORT_SCHEMA = "https://permdock.com/schemas/arazzo-report-v1.json";
16
17
  //#endregion
17
- export { USAGE_REPORT_SCHEMA as a, SUPABASE_MANIFEST_SCHEMA as i, CONFIG_REPORT_SCHEMA as n, cliVersion as o, DOCTOR_REPORT_SCHEMA as r, generatorBanner as s, CATALOG_SCHEMA as t };
18
+ export { SUPABASE_MANIFEST_SCHEMA as a, generatorBanner as c, DOCTOR_REPORT_SCHEMA as i, CATALOG_SCHEMA as n, USAGE_REPORT_SCHEMA as o, CONFIG_REPORT_SCHEMA as r, cliVersion as s, ARAZZO_REPORT_SCHEMA as t };
@@ -0,0 +1 @@
1
+ export { s as cliVersion } from "./version-CEbQ5UeM.js";
@@ -1,3 +1,5 @@
1
+ import { r as requiredPlans } from "./problem-details-cn5X30gZ.js";
2
+ import { t as describe } from "./describe-BybMRY7A.js";
1
3
  //#region src/client/views.ts
2
4
  function permissionSet(store, permissions, data) {
3
5
  const granted = [];
@@ -64,9 +66,15 @@ function protectedView(local, root, permission, data, scoped) {
64
66
  slot: "pending"
65
67
  };
66
68
  const decision = state.decision;
69
+ if (decision.outcome === "approval-required") return {
70
+ allowed: false,
71
+ status: state.status,
72
+ decision,
73
+ slot: "approval"
74
+ };
67
75
  if (!state.allowed || decision.outcome !== "granted") return {
68
76
  ...state,
69
- slot: "fallback"
77
+ slot: "denied"
70
78
  };
71
79
  return {
72
80
  allowed: true,
@@ -91,5 +99,36 @@ function approvalHandle(store, decision) {
91
99
  request: (note) => store.requestApproval(decision, note)
92
100
  };
93
101
  }
102
+ function slotContent(slot, own, defaults) {
103
+ switch (slot) {
104
+ case "pending": return own.pending ?? defaults?.pending;
105
+ case "denied": return own.denied ?? defaults?.denied;
106
+ case "approval": return own.approval ?? own.denied ?? defaults?.approval ?? defaults?.denied;
107
+ default: return slot;
108
+ }
109
+ }
110
+ /** `describe` with the provider's `messages`; a call's own `messages` win. */
111
+ function describeWith(messages) {
112
+ return (decision, options) => describe(decision, messages === void 0 || options?.messages !== void 0 ? options : {
113
+ ...options,
114
+ messages
115
+ });
116
+ }
117
+ /** The `GateView` of a permission state; `describeDecision` localises the reason. */
118
+ function gateView(state, describeDecision, mode = "disable") {
119
+ const pending = state.status === "pending";
120
+ const needsApproval = state.decision.outcome === "approval-required";
121
+ const allowed = state.allowed && !pending;
122
+ return {
123
+ allowed,
124
+ pending,
125
+ hidden: mode === "hide" && !allowed && !pending && !needsApproval,
126
+ disabled: !allowed,
127
+ needsApproval,
128
+ upgrade: requiredPlans(state.decision),
129
+ reason: describeDecision(state.decision),
130
+ decision: state.decision
131
+ };
132
+ }
94
133
  //#endregion
95
- export { protectedView as a, subjectView as c, permissionSet as i, tenantView as l, filterResult as n, rolesView as o, livePermDock as r, scopedTenant as s, approvalHandle as t };
134
+ export { livePermDock as a, rolesView as c, subjectView as d, tenantView as f, gateView as i, scopedTenant as l, describeWith as n, permissionSet as o, filterResult as r, protectedView as s, approvalHandle as t, slotContent as u };
@@ -1,8 +1,34 @@
1
1
  import { StandardSchemaV1 } from "@standard-schema/spec";
2
- //#region src/core/permissions.d.ts
2
+ //#region src/core/app-data.d.ts
3
+ /** A JSON value in an app `x` field. */
4
+ type MetaValue = string | number | boolean | null | readonly MetaValue[] | {
5
+ readonly [key: string]: MetaValue;
6
+ };
7
+ /** The default shape of an app `x` field: a plain JSON object. */
8
+ type AppData = Readonly<Record<string, MetaValue>>;
9
+ /**
10
+ * A Standard Schema for one kind of app data. It must validate synchronously;
11
+ * its output is the type PermDock gives the `x` field it checks.
12
+ */
13
+ type AppDataSchema<X = AppData> = StandardSchemaV1<unknown, X>;
14
+ /** A leaf whose `meta.x` is typed by a schema; intersected so it stays assignable to the untyped leaf. */
15
+ type WithX<L, X> = [X] extends [never] ? L : L & {
16
+ readonly meta: {
17
+ readonly x?: Readonly<X>;
18
+ };
19
+ };
20
+ //#endregion
21
+ //#region src/core/brands.d.ts
3
22
  declare const RESOURCE_BRAND: unique symbol;
23
+ /**
24
+ * Phantom key carrying a tree's resource `x` type for `getResource`. Exported
25
+ * as a type only, so a consumer's declaration emit can name it; it has no value.
26
+ */
27
+ declare const RESOURCE_X: unique symbol;
28
+ //#endregion
29
+ //#region src/core/permission-types.d.ts
4
30
  /** `definePermissions` options. */
5
- type DefinePermissionsOptions = {
31
+ type PermissionsOptions<PX = never, RX = never> = {
6
32
  /**
7
33
  * Keys a permission used to have, mapped to its current key. Old keys are
8
34
  * accepted wherever a key arrives as a string (stored custom roles, OAuth
@@ -10,6 +36,27 @@ type DefinePermissionsOptions = {
10
36
  * the current leaf; code, decisions and audit only ever see the current key.
11
37
  */
12
38
  readonly renamed?: Readonly<Record<string, string>>;
39
+ /**
40
+ * Standard Schemas for app data. `permission` checks every action's
41
+ * `meta.x` and types it on the leaves; `resource` checks every resource's
42
+ * `meta.x` and types it on `getResource`. Both validate synchronously at
43
+ * definition time and throw on invalid data.
44
+ */
45
+ readonly x?: {
46
+ readonly permission?: AppDataSchema<PX>;
47
+ readonly resource?: AppDataSchema<RX>;
48
+ };
49
+ };
50
+ /** A resource's metadata. PermDock carries it to the catalog and never reads `x`. */
51
+ type ResourceMeta<X = AppData> = {
52
+ readonly title?: string;
53
+ readonly description?: string;
54
+ /** Data the application owns. Plain JSON, typed by `definePermissions(…, { x: { resource } })`. */
55
+ readonly x?: X;
56
+ };
57
+ /** A tree whose resources carry `meta.x` of type `X`, read through `getResource`. */
58
+ type ResourceXTree<X> = {
59
+ readonly [RESOURCE_X]?: X;
13
60
  };
14
61
  type ActionMeta = {
15
62
  readonly title?: string;
@@ -30,13 +77,9 @@ type ActionMeta = {
30
77
  /**
31
78
  * Data the application owns, such as a risk level or an undo window. Plain
32
79
  * JSON; PermDock carries it on the leaf, the catalog and snapshots and
33
- * never reads it.
80
+ * never reads it. `definePermissions(…, { x: { permission } })` types it.
34
81
  */
35
- readonly x?: Readonly<Record<string, MetaValue>>;
36
- };
37
- /** A JSON value in `ActionMeta.x`. */
38
- type MetaValue = string | number | boolean | null | readonly MetaValue[] | {
39
- readonly [key: string]: MetaValue;
82
+ readonly x?: AppData;
40
83
  };
41
84
  type PermissionKind = "instance" | "collection";
42
85
  type Permission<K extends string = string, T = unknown, Kind extends PermissionKind = PermissionKind> = {
@@ -159,6 +202,8 @@ type ResourceOptions<A extends ActionList | undefined = ActionList | undefined,
159
202
  * it; it reaches only instance actions. Names match `^[a-z][a-z0-9_]*$`.
160
203
  */
161
204
  readonly levels?: Readonly<Record<string, ResourceLevel>>;
205
+ /** Display text and app data for the resource; carried to the catalog, never read in evaluation. */
206
+ readonly meta?: ResourceMeta;
162
207
  };
163
208
  /** A level's row condition: `where` shorthand or a normalised `Condition`, checked by `definePolicy`. */
164
209
  type ResourceLevel = Readonly<Record<string, unknown>>;
@@ -183,32 +228,78 @@ type ResourceNode<T = unknown> = {
183
228
  readonly collectionActions: ReadonlySet<string>;
184
229
  /** Declared level names to their raw condition; `definePolicy` normalises them. */
185
230
  readonly levels?: Readonly<Record<string, ResourceLevel>>;
231
+ /** The resource's `meta`, when it declares one. */
232
+ readonly meta?: ResourceMeta;
186
233
  };
187
234
  type PermissionTree = {
188
235
  readonly [key: string]: PermissionTree | Permission;
189
236
  };
190
237
  type ActionNames<A extends ActionList | undefined> = A extends readonly string[] ? A[number] : A extends Record<string, ActionMeta> ? keyof A & string : never;
191
- type LeavesFrom<Prefix extends string, Names extends string, T, Kind extends PermissionKind> = [Names] extends [never] ? object : { readonly [K in Names]: Permission<Prefix extends "" ? K : `${Prefix}.${K}`, T, Kind>; };
192
- type InferResourceLeaves<R extends ResourceInit, Prefix extends string> = R extends ResourceInit<infer T, infer A, infer C> ? LeavesFrom<Prefix, ActionNames<A>, T, "instance"> & LeavesFrom<Prefix, ActionNames<C>, T, "collection"> : object;
193
- type InferPermissionTree<Input, Prefix extends string = ""> = Input extends ResourceInit ? InferResourceLeaves<Input, Prefix> : Input extends Record<string, unknown> ? { readonly [K in keyof Input & string]: InferPermissionTree<Input[K], Prefix extends "" ? K : `${Prefix}.${K}`>; } : never;
194
- /**
195
- * The keys `permission` was renamed from, sorted. Empty for a leaf without
196
- * renames and for one that crossed a serialisation boundary.
197
- */
198
- declare function formerKeys(permission: object): readonly string[];
199
- declare function resource<T, const A extends ActionList = readonly [], const C extends ActionList = readonly []>(schema: StandardSchemaV1<unknown, T>, options?: ResourceOptions<A, C>): ResourceInit<T, A, C>;
200
- declare function resource<const A extends ActionList = readonly [], const C extends ActionList = readonly []>(options: ResourceOptions<A, C>): ResourceInit<unknown, A, C>;
201
- declare function getResource(tree: PermissionTree, name: string): ResourceNode | undefined;
202
- declare function definePermissions<const Input>(input: Input, options?: DefinePermissionsOptions): InferPermissionTree<Input>;
203
- declare function listPermissions(tree: PermissionTree | Permission): readonly Permission[];
204
- declare function findPermission(tree: PermissionTree, keyOrScope: string): Permission | undefined;
238
+ type LeavesFrom<Prefix extends string, Names extends string, T, Kind extends PermissionKind, X = never> = [Names] extends [never] ? object : { readonly [K in Names]: WithX<Permission<Prefix extends "" ? K : `${Prefix}.${K}`, T, Kind>, X>; };
239
+ type InferResourceLeaves<R extends ResourceInit, Prefix extends string, X = never> = R extends ResourceInit<infer T, infer A, infer C> ? LeavesFrom<Prefix, ActionNames<A>, T, "instance", X> & LeavesFrom<Prefix, ActionNames<C>, T, "collection", X> : object;
240
+ type InferPermissionTree<Input, Prefix extends string = "", X = never> = Input extends ResourceInit ? InferResourceLeaves<Input, Prefix, X> : Input extends Record<string, unknown> ? { readonly [K in keyof Input & string]: InferPermissionTree<Input[K], Prefix extends "" ? K : `${Prefix}.${K}`, X>; } : never;
241
+ //#endregion
242
+ //#region src/core/vocabulary.d.ts
243
+ declare const ROLE_KIND: "role";
244
+ declare const PLAN_KIND: "plan";
245
+ /** `defineRoles` and `definePlans` options. */
246
+ type VocabularyOptions<X = never> = {
247
+ /**
248
+ * A Standard Schema for every leaf's `meta.x`, validated synchronously at
249
+ * definition time. On a role tree it also checks the `meta.x` of custom
250
+ * roles a `CustomRoleSource` returns; an invalid one is dropped, not the role.
251
+ */
252
+ readonly x?: AppDataSchema<X>;
253
+ };
205
254
  /**
206
- * A permission leaf: string `key`, `scope`, `resource` and `action` plus an
207
- * object `meta`. `kind` is non-enumerable and does not survive
208
- * `JSON.stringify`, so a leaf that crossed a serialisation boundary passes
209
- * without it; when present it must be `instance` or `collection`.
255
+ * A role's metadata. `audience` names the surface its holders use (`'staff'`,
256
+ * `'portal'`, `'platform'`); `permdock.audiences()` lists the distinct
257
+ * audiences of the roles held in the active scope.
210
258
  */
211
- declare function isPermission(value: unknown): value is Permission;
212
- declare function mergePermissions<const Trees extends readonly PermissionTree[]>(...trees: Trees): PermissionTree;
259
+ type RoleMeta = ActionMeta & {
260
+ readonly audience?: string;
261
+ };
262
+ type Role<K extends string = string> = {
263
+ readonly key: K;
264
+ /** A declared scope name, or the `tenant` / `team` alias. */
265
+ readonly on?: string;
266
+ readonly assignable: boolean;
267
+ readonly meta: RoleMeta;
268
+ readonly kind: typeof ROLE_KIND;
269
+ };
270
+ type Plan<K extends string = string> = {
271
+ readonly key: K;
272
+ readonly meta: ActionMeta;
273
+ readonly kind: typeof PLAN_KIND;
274
+ };
275
+ type RoleInit = {
276
+ /** A declared scope name, or the `tenant` / `team` alias. */
277
+ readonly on?: string;
278
+ readonly assignable?: boolean;
279
+ readonly meta?: RoleMeta;
280
+ };
281
+ type PlanInit = {
282
+ readonly meta?: ActionMeta;
283
+ };
284
+ type RoleTree = {
285
+ readonly [key: string]: Role;
286
+ };
287
+ type PlanTree = {
288
+ readonly [key: string]: Plan;
289
+ };
290
+ type Vocabulary = {
291
+ readonly permissions?: unknown;
292
+ readonly roles?: RoleTree;
293
+ readonly plans?: PlanTree;
294
+ };
295
+ type InferRoleTree<Input, X = never> = { readonly [K in keyof Input & string]: WithX<Role<K>, X>; };
296
+ type InferPlanTree<Input, X = never> = { readonly [K in keyof Input & string]: WithX<Plan<K>, X>; };
297
+ declare function isRole(value: unknown): value is Role;
298
+ declare function isPlan(value: unknown): value is Plan;
299
+ declare function defineRoles<const Input extends Record<string, RoleInit>, X = never>(input: Input, options?: VocabularyOptions<X>): InferRoleTree<Input, X>;
300
+ declare function definePlans<const Input extends Record<string, PlanInit>, X = never>(input: Input, options?: VocabularyOptions<X>): InferPlanTree<Input, X>;
301
+ declare function listRoles(tree: RoleTree | undefined): readonly Role[];
302
+ declare function listPlans(tree: PlanTree | undefined): readonly Plan[];
303
+ declare function findRole(tree: RoleTree | undefined, key: string): Role | undefined;
213
304
  //#endregion
214
- export { listPermissions as A, ResourceRelationInput as C, formerKeys as D, findPermission as E, resource as M, getResource as O, ResourceRelation as S, definePermissions as T, ResourceLevel as _, EdgeGroup as a, ResourceOptions as b, EdgeRelation as c, MetaValue as d, Permission as f, ResourceInit as g, PrincipalRelation as h, DefinePermissionsOptions as i, mergePermissions as j, isPermission as k, FieldRelation as l, PermissionTree as m, ActionMeta as n, EdgeGroups as o, PermissionKind as p, ComputedRelation as r, EdgeMatch as s, ActionList as t, InferPermissionTree as u, ResourceLink as v, ResourceRestricted as w, ResourceParent as x, ResourceNode as y };
305
+ export { ResourceLevel as A, RESOURCE_X as B, InferPermissionTree as C, PermissionsOptions as D, PermissionTree as E, ResourceParent as F, AppDataSchema as H, ResourceRelation as I, ResourceRelationInput as L, ResourceMeta as M, ResourceNode as N, PrincipalRelation as O, ResourceOptions as P, ResourceRestricted as R, FieldRelation as S, PermissionKind as T, MetaValue as U, AppData as V, ComputedRelation as _, RoleTree as a, EdgeMatch as b, definePlans as c, isPlan as d, isRole as f, ActionMeta as g, ActionList as h, RoleMeta as i, ResourceLink as j, ResourceInit as k, defineRoles as l, listRoles as m, PlanTree as n, Vocabulary as o, listPlans as p, Role as r, VocabularyOptions as s, Plan as t, findRole as u, EdgeGroup as v, Permission as w, EdgeRelation as x, EdgeGroups as y, ResourceXTree as z };
@@ -1,36 +1,38 @@
1
- import { Ft as TokenVerifier, Mr as Membership, Tt as Snapshot, Yn as Decision } from "../policy-IB6yxpC3.js";
2
- import { f as Permission } from "../permissions-DttnqqxC.js";
3
- import { r as Role } from "../vocabulary-DA8a8zif.js";
4
- import { n as requiredPlans } from "../problem-details-DX075l9V.js";
5
- import { i as describe } from "../describe-DMYiCjJV.js";
1
+ import { Mn as ApprovalRequiredDecision, Nn as Decision, Vt as Snapshot, dt as TokenVerifier, nr as Membership } from "../policy-types-DzwivBgR.js";
2
+ import { r as Role, w as Permission } from "../vocabulary-D6lPdb4Z.js";
3
+ import { n as requiredPlans } from "../problem-details-DXlt-vks.js";
4
+ import { i as describe, r as DescribeOptions, t as DecisionDescription } from "../describe-BZUsixiL.js";
6
5
  import { t as PermissionBoundaryState } from "../boundary-BmHxVH1J.js";
7
- import { t as approvalHeaders } from "../headers-Cf-zWvsO.js";
8
- import { a as FilterResult, c as SubjectView, i as ClientStatus, l as TenantView, n as ApprovalState, o as PermissionSet, r as ClientPermDock, s as PermissionState, t as ApprovalHandle, u as UseRolesOptions } from "../types-CKNSyIf_.js";
9
- import { ComputedRef, DefineComponent, MaybeRefOrGetter, Plugin } from "vue";
6
+ import { t as approvalHeaders } from "../headers-CIbDTUTK.js";
7
+ import { a as FilterResult, c as PermissionSet, d as RolesOptions, f as SubjectView, i as ClientStatus, l as PermissionState, n as ApprovalState, p as TenantView, r as ClientPermDock, t as ApprovalHandle, u as ProviderOptionsBase } from "../types-BNORmDM8.js";
8
+ import { ComputedRef, DefineComponent, MaybeRefOrGetter, Plugin, VNode } from "vue";
10
9
  //#region src/vue/types.d.ts
11
- type PermDockPluginOptions = {
10
+ type PermDockPluginOptions = ProviderOptionsBase & {
12
11
  /**
13
12
  * A ref or getter re-hydrates the store when it changes; a promise keeps
14
13
  * the store `pending` until it settles (await the same promise in an async
15
14
  * `setup` under `<Suspense>`).
16
15
  */
17
16
  readonly snapshot: MaybeRefOrGetter<Snapshot | string> | PromiseLike<Snapshot | string>;
18
- /**
19
- * The AuthZEN evaluations endpoint for checks the snapshot cannot answer.
20
- * `false` never calls one: such a check is denied with reason `server-only`.
21
- */
22
- readonly endpoint?: string | false;
23
- /** Where `refresh()` fetches a fresh snapshot. Defaults to `endpoint`. */
24
- readonly snapshotUrl?: string;
25
- readonly approvals?: string;
26
17
  /** A ref or getter switches the active tenant (`refresh({ tenant })`) when it changes. */
27
18
  readonly tenant?: MaybeRefOrGetter<string | undefined>;
28
- readonly fetch?: typeof fetch;
29
19
  /** Read on every request: a ref or getter carries a rotated token without rebuilding the store. */
30
20
  readonly headers?: MaybeRefOrGetter<Readonly<Record<string, string>> | undefined>;
31
- readonly maxAge?: number;
32
21
  /** Read on every verification; set it at install to verify signed snapshots. */
33
22
  readonly verifier?: MaybeRefOrGetter<TokenVerifier | undefined>;
23
+ /** What every `<Protected>` renders for a slot it leaves out. */
24
+ readonly defaults?: PermDockDefaults;
25
+ };
26
+ type SlotOutput = VNode | VNode[] | string | null;
27
+ /** Render functions for the `<Protected>` slots a component leaves out; they get the slot props. */
28
+ type PermDockDefaults = {
29
+ readonly pending?: () => SlotOutput;
30
+ readonly denied?: (props: {
31
+ readonly decision: Decision;
32
+ }) => SlotOutput;
33
+ readonly approval?: (props: {
34
+ readonly decision: ApprovalRequiredDecision;
35
+ }) => SlotOutput;
34
36
  };
35
37
  //#endregion
36
38
  //#region src/vue/composables.d.ts
@@ -44,7 +46,7 @@ export declare function usePermissions(permissions: MaybeRefOrGetter<readonly Pe
44
46
  export declare function useFilter<T>(permission: Permission<string, T, "instance">, rows: MaybeRefOrGetter<readonly T[]>): ComputedRef<FilterResult<T>>;
45
47
  export declare function useTenant(): ComputedRef<TenantView>;
46
48
  export declare function useMemberships(): ComputedRef<readonly Membership[]>;
47
- export declare function useRoles(options?: MaybeRefOrGetter<UseRolesOptions>): ComputedRef<{
49
+ export declare function useRoles(options?: MaybeRefOrGetter<RolesOptions>): ComputedRef<{
48
50
  readonly roles: readonly Role[];
49
51
  }>;
50
52
  export declare function useAssignableRoles(): ComputedRef<readonly Role[]>;
@@ -53,6 +55,8 @@ export declare function useAssignablePermissions(options?: MaybeRefOrGetter<{
53
55
  }>): ComputedRef<readonly Permission[]>;
54
56
  export declare function useSubject(): ComputedRef<SubjectView>;
55
57
  export declare function useApproval(decision: MaybeRefOrGetter<Decision>): ComputedRef<ApprovalHandle>;
58
+ /** `describe` with the plugin's `messages`; a call's own `messages` win. */
59
+ export declare function useDescribe(): (decision: Decision, options?: DescribeOptions) => DecisionDescription;
56
60
  //#endregion
57
61
  //#region src/vue/boundary.d.ts
58
62
  /**
@@ -76,4 +80,4 @@ type ProtectedProps = {
76
80
  };
77
81
  export declare const Protected: DefineComponent<ProtectedProps>;
78
82
  //#endregion
79
- export { type ApprovalHandle, type ApprovalState, type ClientPermDock, type ClientStatus, type FilterResult, type PermDockPluginOptions, type PermissionBoundaryState, type PermissionSet, type PermissionState, type ProtectedProps, type SubjectView, type TenantView, type UseRolesOptions, approvalHeaders, describe, requiredPlans };
83
+ export { type ApprovalHandle, type ApprovalState, type ClientPermDock, type ClientStatus, type FilterResult, type PermDockDefaults, type PermDockPluginOptions, type PermissionBoundaryState, type PermissionSet, type PermissionState, type ProtectedProps, type RolesOptions, type SubjectView, type TenantView, approvalHeaders, describe, requiredPlans };
package/dist/vue/index.js CHANGED
@@ -1,13 +1,14 @@
1
- import { r as requiredPlans } from "../problem-details-_AMOYz-w.js";
2
- import { t as describe } from "../describe-B_gVZEVi.js";
3
- import { t as approvalHeaders } from "../headers-BZSDieNT.js";
4
- import { i as isPromiseLike } from "../store-options-ByhZq1jV.js";
5
- import { a as protectedView, c as subjectView, i as permissionSet, l as tenantView, n as filterResult, o as rolesView, r as livePermDock, s as scopedTenant, t as approvalHandle } from "../views-Soe7bGSC.js";
1
+ import { r as requiredPlans } from "../problem-details-cn5X30gZ.js";
2
+ import { t as describe } from "../describe-BybMRY7A.js";
6
3
  import { n as boundaryFallback, t as boundaryDigest } from "../boundary-BM8a_P6E.js";
7
- import { n as switchTenant, t as providerStore } from "../provider-store-Cfbvo4DE.js";
4
+ import { t as approvalHeaders } from "../headers-BIjfMaoC.js";
5
+ import { i as isPromiseLike } from "../store-options-BqEakYRa.js";
6
+ import { n as switchTenant, t as providerStore } from "../provider-store-B5Yrkhzr.js";
7
+ import { a as livePermDock, c as rolesView, d as subjectView, f as tenantView, l as scopedTenant, n as describeWith, o as permissionSet, r as filterResult, s as protectedView, t as approvalHandle, u as slotContent } from "../views-DTIIO-oQ.js";
8
8
  import { computed, defineComponent, effectScope, getCurrentScope, inject, isRef, onErrorCaptured, onScopeDispose, provide, shallowRef, toValue, watch } from "vue";
9
9
  //#region src/vue/context.ts
10
10
  const permDockKey = Symbol("permdock");
11
+ const permDockUiKey = Symbol("permdock-ui");
11
12
  //#endregion
12
13
  //#region src/vue/composables.ts
13
14
  function useStore() {
@@ -87,6 +88,10 @@ function useApproval(decision) {
87
88
  return approvalHandle(store, toValue(decision));
88
89
  });
89
90
  }
91
+ /** `describe` with the plugin's `messages`; a call's own `messages` win. */
92
+ function useDescribe() {
93
+ return describeWith(inject(permDockUiKey, {}).messages);
94
+ }
90
95
  //#endregion
91
96
  //#region src/vue/boundary.ts
92
97
  const boundaryKey = Symbol("permdock-boundary");
@@ -154,6 +159,10 @@ const permdockPlugin = { install(app, options) {
154
159
  store.dispose();
155
160
  });
156
161
  app.provide(permDockKey, store);
162
+ app.provide(permDockUiKey, {
163
+ defaults: options.defaults,
164
+ messages: options.messages
165
+ });
157
166
  } };
158
167
  //#endregion
159
168
  //#region src/vue/protected.ts
@@ -176,6 +185,7 @@ const Protected = defineComponent({
176
185
  setup(props, { slots }) {
177
186
  const local = usePermission(() => props.permission, () => props.data);
178
187
  const root = usePermDock();
188
+ const { defaults } = inject(permDockUiKey, {});
179
189
  const scoped = computed(() => scopedTenant(root, props.tenant));
180
190
  return () => {
181
191
  const view = protectedView({
@@ -183,9 +193,15 @@ const Protected = defineComponent({
183
193
  status: local.status.value,
184
194
  decision: local.decision.value
185
195
  }, root, props.permission, props.data, scoped.value);
196
+ const own = {
197
+ pending: slots["pending"],
198
+ denied: slots["denied"],
199
+ approval: slots["approval"]
200
+ };
186
201
  switch (view.slot) {
187
- case "pending": return slots["pending"]?.() ?? null;
188
- case "fallback": return slots["fallback"]?.({ decision: view.decision }) ?? null;
202
+ case "pending": return slotContent("pending", own, defaults)?.() ?? null;
203
+ case "denied": return slotContent("denied", own, defaults)?.({ decision: view.decision }) ?? null;
204
+ case "approval": return slotContent("approval", own, defaults)?.({ decision: view.decision }) ?? null;
189
205
  case "default": return slots["default"]?.({ decision: view.decision }) ?? null;
190
206
  default: return view;
191
207
  }
@@ -193,4 +209,4 @@ const Protected = defineComponent({
193
209
  }
194
210
  });
195
211
  //#endregion
196
- export { PermissionBoundary, Protected, approvalHeaders, describe, permdockPlugin, requiredPlans, useApproval, useAssignablePermissions, useAssignableRoles, useFilter, useMemberships, usePermDock, usePermission, usePermissionBoundary, usePermissions, useRoles, useSubject, useTenant };
212
+ export { PermissionBoundary, Protected, approvalHeaders, describe, permdockPlugin, requiredPlans, useApproval, useAssignablePermissions, useAssignableRoles, useDescribe, useFilter, useMemberships, usePermDock, usePermission, usePermissionBoundary, usePermissions, useRoles, useSubject, useTenant };
@@ -0,0 +1,67 @@
1
+ import { f as nowMillis } from "./time-DkWjdL98.js";
2
+ //#region src/workflow/waiter.ts
3
+ const DEFAULT_INTERVAL = 5e3;
4
+ /**
5
+ * An in-process `ApprovalWaiter` that reads `store` every `interval`
6
+ * milliseconds. `wake` ends a wait in the same process at once. A store read
7
+ * that throws counts as still pending until the request expires.
8
+ */
9
+ function pollingApprovalWaiter(options) {
10
+ const interval = options.interval ?? DEFAULT_INTERVAL;
11
+ if (!Number.isFinite(interval) || interval <= 0) throw new RangeError("PermDock: pollingApprovalWaiter interval must be a positive number");
12
+ const woken = /* @__PURE__ */ new Map();
13
+ const decided = async (token) => {
14
+ try {
15
+ return (await options.store.get(token))?.status !== "pending";
16
+ } catch {
17
+ return false;
18
+ }
19
+ };
20
+ return Object.freeze({
21
+ wait(token, waitOptions = {}) {
22
+ const { signal, expiresAt } = waitOptions;
23
+ return new Promise((resolve, reject) => {
24
+ let timer;
25
+ const listeners = woken.get(token) ?? /* @__PURE__ */ new Set();
26
+ woken.set(token, listeners);
27
+ const finish = (error) => {
28
+ if (timer !== void 0) clearTimeout(timer);
29
+ listeners.delete(done);
30
+ if (listeners.size === 0) woken.delete(token);
31
+ signal?.removeEventListener("abort", aborted);
32
+ if (error === void 0) resolve();
33
+ else reject(error);
34
+ };
35
+ const done = () => {
36
+ finish();
37
+ };
38
+ const aborted = () => {
39
+ const reason = signal?.reason;
40
+ finish(reason instanceof Error ? reason : new Error("PermDock: approval wait aborted", { cause: reason }));
41
+ };
42
+ if (signal?.aborted === true) {
43
+ aborted();
44
+ return;
45
+ }
46
+ listeners.add(done);
47
+ signal?.addEventListener("abort", aborted, { once: true });
48
+ const poll = async () => {
49
+ if (!listeners.has(done)) return;
50
+ if (expiresAt !== void 0 && expiresAt.epochMilliseconds <= nowMillis() || await decided(token)) {
51
+ finish();
52
+ return;
53
+ }
54
+ if (listeners.has(done)) timer = setTimeout(() => {
55
+ poll();
56
+ }, interval);
57
+ };
58
+ poll();
59
+ });
60
+ },
61
+ wake(token) {
62
+ for (const listener of woken.get(token) ?? []) listener();
63
+ }
64
+ });
65
+ }
66
+ //#endregion
67
+ export { pollingApprovalWaiter as t };
@@ -0,0 +1,36 @@
1
+ import { Rt as Instant } from "./policy-types-DzwivBgR.js";
2
+ import { m as ApprovalStore } from "./types-CCpc2Dcv.js";
3
+ //#region src/workflow/waiter.d.ts
4
+ type ApprovalWaitOptions = {
5
+ /** When the approval request expires; the wait ends then whatever the store says. */
6
+ readonly expiresAt?: Instant;
7
+ /** Aborting rejects the wait with the signal's reason. */
8
+ readonly signal?: AbortSignal;
9
+ };
10
+ /**
11
+ * Suspends a run until an approval request is decided. `wait` resolves once
12
+ * the request is no longer pending, `wake` is called for its token, or it
13
+ * expires; it never says how the request was decided, so the caller always
14
+ * decides again with the token. A durable runner implements it with its own
15
+ * suspension primitive.
16
+ */
17
+ type ApprovalWaiter = {
18
+ /** Names the implementation in errors and events. */
19
+ readonly name?: string;
20
+ wait(token: string, options?: ApprovalWaitOptions): Promise<void>;
21
+ /** Called after an approver resolves the request for `token`. */
22
+ wake(token: string): void | Promise<void>;
23
+ };
24
+ type PollingApprovalWaiterOptions = {
25
+ readonly store: ApprovalStore;
26
+ /** Milliseconds between reads of the store. Defaults to 5000. */
27
+ readonly interval?: number;
28
+ };
29
+ /**
30
+ * An in-process `ApprovalWaiter` that reads `store` every `interval`
31
+ * milliseconds. `wake` ends a wait in the same process at once. A store read
32
+ * that throws counts as still pending until the request expires.
33
+ */
34
+ declare function pollingApprovalWaiter(options: PollingApprovalWaiterOptions): ApprovalWaiter;
35
+ //#endregion
36
+ export { pollingApprovalWaiter as i, ApprovalWaiter as n, PollingApprovalWaiterOptions as r, ApprovalWaitOptions as t };
@@ -0,0 +1 @@
1
+ export { i as watchCollect } from "./watch-CszoTJMq.js";
@@ -1,7 +1,8 @@
1
- import { i as describeError } from "./errors-CWfoNg9N.js";
2
- import { t as defaultSrcPath } from "./files-DWUN9PzI.js";
3
- import { r as runCollect } from "./collect-DSTE3ml9.js";
4
- import { n as isConfigFile, r as loadConfig } from "./config-BJiM-xAm.js";
1
+ import { i as dateAt } from "./time-DkWjdL98.js";
2
+ import { a as describeError } from "./errors-CWTY6uih.js";
3
+ import { t as defaultSrcPath } from "./files-D_JIzUrP.js";
4
+ import { r as runCollect } from "./collect-CrZJJnEF.js";
5
+ import { n as isConfigFile, r as loadConfig } from "./config-bs_kZeYq.js";
5
6
  import { watch } from "node:fs";
6
7
  import { basename, dirname, relative, resolve, sep } from "node:path";
7
8
  //#region src/cli/watch.ts
@@ -19,7 +20,7 @@ function within(dirs, file) {
19
20
  return path !== "" && !path.startsWith("..") && !path.startsWith(sep);
20
21
  });
21
22
  }
22
- async function collectOnce(cwd, options, check, fresh, configFile) {
23
+ async function collectOnce(cwd, options, check, fresh, configFile, now = () => dateAt()) {
23
24
  const config = await loadConfig(cwd, configFile, { fresh });
24
25
  const collect = {
25
26
  ...config.collect,
@@ -30,7 +31,7 @@ async function collectOnce(cwd, options, check, fresh, configFile) {
30
31
  config,
31
32
  collect,
32
33
  check,
33
- now: /* @__PURE__ */ new Date(),
34
+ now: now(),
34
35
  fresh
35
36
  });
36
37
  const inputs = [
@@ -67,7 +68,7 @@ function createCollectScheduler(cwd, options, settings) {
67
68
  async function run(check) {
68
69
  const fresh = loaded;
69
70
  loaded = true;
70
- const result = await collectOnce(cwd, options, check, fresh, settings?.configFile);
71
+ const result = await collectOnce(cwd, options, check, fresh, settings?.configFile, settings?.now);
71
72
  ignored = new Set(result.written);
72
73
  inputs = result.inputs;
73
74
  sources = result.sources;
@@ -124,5 +125,43 @@ function createCollectScheduler(cwd, options, settings) {
124
125
  close
125
126
  };
126
127
  }
128
+ /**
129
+ * `collect --watch`: one collect now, then one per change until Ctrl-C.
130
+ * Under `--json` each collect is an NDJSON event on stdout; otherwise a
131
+ * line on stderr.
132
+ */
133
+ async function watchCollect(ctx, overrides) {
134
+ const emit = (status, message) => {
135
+ if (ctx.json) ctx.io.stdout(`${JSON.stringify({
136
+ event: "collect",
137
+ status,
138
+ message,
139
+ at: dateAt().toISOString()
140
+ })}\n`);
141
+ else ctx.log(message);
142
+ };
143
+ const scheduler = createCollectScheduler(ctx.cwd, { collect: overrides }, {
144
+ ...ctx.configFile === void 0 ? {} : { configFile: ctx.configFile },
145
+ report: (message) => {
146
+ emit(message === void 0 ? "success" : "error", message ?? "catalog updated");
147
+ }
148
+ });
149
+ try {
150
+ const message = await scheduler.run(false);
151
+ emit(message === void 0 ? "success" : "error", message ?? "catalog written");
152
+ } catch (error) {
153
+ emit("error", describeError(error));
154
+ }
155
+ scheduler.watch();
156
+ ctx.signal.addEventListener("abort", () => {
157
+ scheduler.close();
158
+ });
159
+ ctx.log("watching for changes; Ctrl-C to stop");
160
+ return {
161
+ code: 0,
162
+ output: "",
163
+ streamed: true
164
+ };
165
+ }
127
166
  //#endregion
128
- export { createCollectScheduler as n, report as r, collectOnce as t };
167
+ export { watchCollect as i, createCollectScheduler as n, report as r, collectOnce as t };
@@ -1,5 +1,5 @@
1
- import { Tt as Snapshot, Yn as Decision } from "../policy-IB6yxpC3.js";
2
- import { f as Permission, m as PermissionTree } from "../permissions-DttnqqxC.js";
1
+ import { Nn as Decision, Vt as Snapshot } from "../policy-types-DzwivBgR.js";
2
+ import { E as PermissionTree, w as Permission } from "../vocabulary-D6lPdb4Z.js";
3
3
  import { StandardSchemaV1 } from "@standard-schema/spec";
4
4
  //#region src/webmcp/types.d.ts
5
5
  type WebMcpClientStatus = "ready" | "pending" | "stale" | "server-only";