permdock 0.4.0 → 0.6.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 (515) hide show
  1. package/README.md +37 -35
  2. package/dist/{schema-Bol6gqXA.js → 2020-C9VN-x8c.js} +5 -130
  3. package/dist/a2a/index.d.ts +6 -6
  4. package/dist/a2a/index.js +14 -17
  5. package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
  6. package/dist/adoption-scan-DCYe60Pi.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 -35
  10. package/dist/ai-sdk/index.js +37 -23
  11. package/dist/{app-data-CV8pqqMi.js → app-data-MuyzVqX8.js} +2 -1
  12. package/dist/approval-header-CJACtHkv.js +23 -0
  13. package/dist/approval-prompt-Dg5LeAcT.js +62 -0
  14. package/dist/approval-prompt-DvSSPQJX.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-p1PGoVjb.js +995 -0
  18. package/dist/arazzo-41WuzHou.js +36 -0
  19. package/dist/{arazzo-C4BcskbX.js → arazzo-CaUVBn7D.js} +20 -14
  20. package/dist/args-IIolxxKA.js +197 -0
  21. package/dist/astro/index.d.ts +43 -0
  22. package/dist/astro/index.js +27 -0
  23. package/dist/audience-DabClFLQ.js +55 -0
  24. package/dist/auth-DRLEizbL.js +178 -0
  25. package/dist/authzen/index.d.ts +26 -6
  26. package/dist/authzen/index.js +94 -79
  27. package/dist/automation-BNM3TtDo.d.ts +114 -0
  28. package/dist/automation-DVjOckjV.js +157 -0
  29. package/dist/better-auth/index.d.ts +8 -6
  30. package/dist/better-auth/index.js +9 -8
  31. package/dist/better-supabase/index.d.ts +357 -30
  32. package/dist/better-supabase/index.js +936 -194
  33. package/dist/{bind-kk-uyCwH.js → bind-CAvgUuKs.js} +14 -10
  34. package/dist/{bind-BzqG8SMb.d.ts → bind-DOyrv6zi.d.ts} +12 -10
  35. package/dist/body-CH5of8Ne.js +10 -0
  36. package/dist/body-text-QcXok_SI.js +52 -0
  37. package/dist/{build-instance-DIIV9DbC.js → build-instance-Bu_eDqYw.js} +4 -3
  38. package/dist/{canonical-json-CFKyFOke.js → canonical-json-BC8_nMTw.js} +5 -3
  39. package/dist/{capability-CksyCWDH.d.ts → capability-Drg-1YhL.d.ts} +44 -25
  40. package/dist/{capability-txATtKV4.js → capability-N1K9IpqS.js} +68 -42
  41. package/dist/casbin-Cr7RLtA3.js +30 -0
  42. package/dist/casbin-Dyu2gnUD.js +234 -0
  43. package/dist/casl-64gpT-8x.js +24 -0
  44. package/dist/casl-DjEDhTCP.js +299 -0
  45. package/dist/catalog/index.d.ts +74 -2
  46. package/dist/catalog/index.js +51 -2
  47. package/dist/catalog-BoWglDPI.js +1 -0
  48. package/dist/catalog-DZVbrF-z.js +52 -0
  49. package/dist/{catalog-tZUyOfOv.js → catalog-HD2gf5mY.js} +51 -6
  50. package/dist/{catalog-doc-DWtg0gGR.js → catalog-doc-Cdn7-0pQ.js} +45 -23
  51. package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
  52. package/dist/chat/index.d.ts +2 -0
  53. package/dist/chat/index.js +224 -0
  54. package/dist/chat-sdk/index.d.ts +87 -0
  55. package/dist/chat-sdk/index.js +197 -0
  56. package/dist/claims-map-7oQ3ue4X.js +13 -0
  57. package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
  58. package/dist/claude-agent/index.d.ts +7 -14
  59. package/dist/claude-agent/index.js +24 -27
  60. package/dist/clerk/index.d.ts +9 -8
  61. package/dist/clerk/index.js +9 -14
  62. package/dist/cli/bin.js +36 -17
  63. package/dist/cli/index.d.ts +19 -5
  64. package/dist/cli/index.js +164 -4
  65. package/dist/cloud/index.d.ts +102 -63
  66. package/dist/cloud/index.js +239 -340
  67. package/dist/cloud-ytQ3uviA.js +87 -0
  68. package/dist/codemod-5mpSpnUY.js +37 -0
  69. package/dist/codemod-ua2hHy7w.js +2084 -0
  70. package/dist/collect-Ci6akVwH.js +55 -0
  71. package/dist/collect-D7eQDffE.js +1 -0
  72. package/dist/{collect-2SrB7lfk.js → collect-mLTY4nwb.js} +75 -11
  73. package/dist/command-L8EstFNm.js +6 -0
  74. package/dist/compile/index.d.ts +1 -1
  75. package/dist/compile/index.js +1 -2
  76. package/dist/{compile-CtTP7eur.d.ts → compile-1bsAezL0.d.ts} +5 -3
  77. package/dist/{compile-CcEu2ZQ1.js → compile-CMqMx_IN.js} +11 -8
  78. package/dist/completion-BTFrHZhX.js +143 -0
  79. package/dist/config-Bj2Ixq3d.js +26 -0
  80. package/dist/{config-BIjREpyE.js → config-bs_kZeYq.js} +12 -7
  81. package/dist/{config-report--Xb9APJS.js → config-report-DSpsLpCE.js} +15 -5
  82. package/dist/{connection-DUsczpB5.js → connection-DjhIJSs2.js} +6 -5
  83. package/dist/{context-DieZVJXu.js → context-B_u3_bDJ.js} +2 -2
  84. package/dist/convex/index.d.ts +11 -10
  85. package/dist/convex/index.js +6 -4
  86. package/dist/create-B30OMUOJ.d.ts +107 -0
  87. package/dist/create-CBMmFie-.d.ts +138 -0
  88. package/dist/create-CGm28gyI.js +130 -0
  89. package/dist/create-CQWIpUG-.js +403 -0
  90. package/dist/{create-BBO24vj6.js → create-DCF2SvoT.js} +31 -32
  91. package/dist/create-D_NmPOdH.d.ts +110 -0
  92. package/dist/{credential-kue0qpbm.js → credential-BcoiejpY.js} +152 -31
  93. package/dist/credentials-DPyHmYz5.js +74 -0
  94. package/dist/delegation-j6-rc37o.js +286 -0
  95. package/dist/delivery/index.d.ts +5 -0
  96. package/dist/delivery/index.js +5 -0
  97. package/dist/delivery-DCAgNyCn.js +499 -0
  98. package/dist/delivery-event-xX4obB8F.js +40 -0
  99. package/dist/{denied-text-DfRk15uw.d.ts → denied-text-CiFQNuMV.d.ts} +5 -5
  100. package/dist/{describe-C3ldA9os.d.ts → describe-B5qgDvEW.d.ts} +2 -2
  101. package/dist/{describe-Cgkp7eP0.js → describe-BybMRY7A.js} +6 -2
  102. package/dist/device-BARQ8eYG.js +193 -0
  103. package/dist/{diff-rpqoe7Ag.js → diff-3jbx6Rm4.js} +60 -54
  104. package/dist/diff-CmuSD3vc.js +37 -0
  105. package/dist/doctor-3ZqNHX_G.js +44 -0
  106. package/dist/{doctor-owlv6ddh.js → doctor-BdZw53-k.js} +245 -50
  107. package/dist/drizzle/index.d.ts +5 -3
  108. package/dist/drizzle/index.js +2 -2
  109. package/dist/elysia/index.d.ts +16 -13
  110. package/dist/elysia/index.js +13 -12
  111. package/dist/env-DJZrPjRi.js +8 -0
  112. package/dist/errors-BDUwg2qC.js +27 -0
  113. package/dist/{errors-drnfxYtm.js → errors-BKy0EfhN.js} +5 -9
  114. package/dist/errors-BWXBMaKK.d.ts +11 -0
  115. package/dist/errors-CWTY6uih.js +143 -0
  116. package/dist/{errors-OD_4c__H.d.ts → errors-DH5QEGXh.d.ts} +2 -2
  117. package/dist/evaluate-CNClBvcj.js +1785 -0
  118. package/dist/evaluations-C_1vdSZc.d.ts +32 -0
  119. package/dist/{evaluations-C9YJsv3H.js → evaluations-beAooV0n.js} +145 -34
  120. package/dist/eve/index.d.ts +12 -16
  121. package/dist/eve/index.js +22 -28
  122. package/dist/event-time-CsegxXxB.js +23 -0
  123. package/dist/expiry-D4_YKRKD.js +52 -0
  124. package/dist/express/index.d.ts +13 -10
  125. package/dist/express/index.js +12 -11
  126. package/dist/fastify/index.d.ts +25 -22
  127. package/dist/fastify/index.js +13 -12
  128. package/dist/fetch-adapter-DD_gfmrC.js +120 -0
  129. package/dist/fetch-adapter-Dw0MTS3D.d.ts +31 -0
  130. package/dist/fields-OYG_JR78.js +203 -0
  131. package/dist/files-C5ZI27eV.js +124 -0
  132. package/dist/{fixtures-h2eG2OZV.js → fixtures-B7XrLeY7.js} +8 -7
  133. package/dist/flags-C3DktBDY.js +86 -0
  134. package/dist/{from-snapshot-7REQZe0H.js → from-snapshot-CTCMsFZk.js} +55 -52
  135. package/dist/{grantee-conditions-MQs5NIuX.js → grantee-conditions-CcXf8hMM.js} +4 -3
  136. package/dist/{grantee-CXY-0C87.js → grantee-hxrUsbpM.js} +16 -6
  137. package/dist/{grantee-match-fxYp9Nmt.js → grantee-match-DbENBHLB.js} +5 -4
  138. package/dist/h3/index.d.ts +37 -0
  139. package/dist/h3/index.js +35 -0
  140. package/dist/headers-BIjfMaoC.js +8 -0
  141. package/dist/headers-CIbDTUTK.d.ts +7 -0
  142. package/dist/{helpers-C9YmyBIa.js → helpers-CBYVMjwh.js} +45 -38
  143. package/dist/hono/index.d.ts +12 -9
  144. package/dist/hono/index.js +13 -12
  145. package/dist/hosted-B46-5LYE.js +315 -0
  146. package/dist/hosted-BPk51-kX.d.ts +78 -0
  147. package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
  148. package/dist/http-DXJ37RDA.js +46 -0
  149. package/dist/{http-BEbdMZ05.js → http-ujKm0JXE.js} +1 -2
  150. package/dist/{import-UHk1N7vH.js → import-CNV7I2Dw.js} +25 -20
  151. package/dist/{import-BFIlhetD.js → import-wyqXUyjm.js} +190 -53
  152. package/dist/index-B8YjkEZ4.d.ts +210 -0
  153. package/dist/index-C-6Letxg.d.ts +431 -0
  154. package/dist/index-CaxrMD1A.d.ts +1 -0
  155. package/dist/{index-BwMe94Xq.d.ts → index-Ch8LpNDp.d.ts} +34 -16
  156. package/dist/index-Cp_ilKi1.d.ts +91 -0
  157. package/dist/index-CueFnxQc.d.ts +110 -0
  158. package/dist/index-DuWxc5dt.d.ts +909 -0
  159. package/dist/index.d.ts +19 -15
  160. package/dist/index.js +31 -21
  161. package/dist/init-DeMYsnYJ.js +96 -0
  162. package/dist/init-GG6Jh8HD.js +95 -0
  163. package/dist/{instance-options-plkrsAog.d.ts → instance-options-BsVpyGIk.d.ts} +2 -2
  164. package/dist/instance-snapshot-BOEhcqIF.js +601 -0
  165. package/dist/instant-BluqDvyS.js +19 -0
  166. package/dist/internals-Dk8A8fX3.js +17 -0
  167. package/dist/{json-schema-DBkdUuCO.js → json-schema-B-vAwlde.js} +45 -6
  168. package/dist/json-schema-CN_iLFH2.d.ts +40 -0
  169. package/dist/jwt/index.d.ts +18 -11
  170. package/dist/jwt/index.js +156 -135
  171. package/dist/{kernel-CB3LrIJM.js → kernel-D0NVb1cK.js} +52 -24
  172. package/dist/kysely/index.d.ts +5 -3
  173. package/dist/kysely/index.js +2 -2
  174. package/dist/load-BxEtwlBS.js +1 -0
  175. package/dist/{load-C3_oTHyO.js → load-DFS_ry0W.js} +22 -6
  176. package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
  177. package/dist/login-Dfe5RlYk.js +68 -0
  178. package/dist/login-imhuwvn3.js +254 -0
  179. package/dist/manifest-C8IzW3Do.js +42 -0
  180. package/dist/manifest-dvL2XEe1.js +370 -0
  181. package/dist/manifest-json-CAGzls-C.js +9 -0
  182. package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
  183. package/dist/manifest-schema-C0kK_8V0.js +399 -0
  184. package/dist/{map-claims-AVlBaJoa.js → map-claims-D3oRmTk0.js} +13 -10
  185. package/dist/{map-error-BE27PYkE.js → map-error-Dr70oA_3.js} +3 -3
  186. package/dist/{markers-CiwAOZtO.js → markers-C6joDI3o.js} +2 -1
  187. package/dist/mcp/index.d.ts +22 -12
  188. package/dist/mcp/index.js +57 -39
  189. package/dist/{migrate-BwlB5-Wk.js → migrate-CIq4-E9F.js} +53 -14
  190. package/dist/nest/index.d.ts +12 -9
  191. package/dist/nest/index.js +15 -14
  192. package/dist/next/index.d.ts +18 -21
  193. package/dist/next/index.js +13 -11
  194. package/dist/next/plugin.d.ts +1 -1
  195. package/dist/next/plugin.js +2 -2
  196. package/dist/node/index.d.ts +10 -10
  197. package/dist/node/index.js +7 -9
  198. package/dist/{ocsf-uYFXGVw2.js → ocsf-BFp-PZZA.js} +22 -11
  199. package/dist/openai/index.d.ts +9 -16
  200. package/dist/openai/index.js +17 -24
  201. package/dist/openapi/index.d.ts +3 -3
  202. package/dist/openapi/index.js +1 -1
  203. package/dist/{openapi-DBzHQbov.js → openapi-B7HZ0f-r.js} +8 -8
  204. package/dist/openapi-C4dDTVEd.js +138 -0
  205. package/dist/{openapi-BJdBmYDG.js → openapi-DD1SV-5-.js} +10 -9
  206. package/dist/operation-findings-DgATDpvh.js +36 -0
  207. package/dist/operations-X0VM7F3m.d.ts +59 -0
  208. package/dist/orpc/index.d.ts +13 -10
  209. package/dist/orpc/index.js +20 -15
  210. package/dist/otel/index.d.ts +3 -2
  211. package/dist/otel/index.js +30 -7
  212. package/dist/output-1im__-08.js +88 -0
  213. package/dist/output-files-B3IZJksC.js +1 -0
  214. package/dist/{output-files-CgIsvdSa.js → output-files-DhRBBE4n.js} +24 -26
  215. package/dist/{permission-keys-B26jeyUv.js → ownership-DqaJNJPn.js} +1045 -153
  216. package/dist/{package-root-DtNnpmUd.js → package-root-Dk_ETdkp.js} +1 -1
  217. package/dist/{parse-CVFQHk6c.js → parse-Cxq0WxrA.js} +2 -2
  218. package/dist/{parse-local-manifest-DvYUR0QL.d.ts → parse-local-manifest-5ODwqu8b.d.ts} +1 -1
  219. package/dist/{parse-local-manifest-C-q02Pal.js → parse-local-manifest-CVSs6J9I.js} +1 -1
  220. package/dist/parse-request-D_tUXG6M.js +26 -0
  221. package/dist/paths-DXSHAMIa.js +42 -0
  222. package/dist/pdp/index.d.ts +7 -3
  223. package/dist/pdp/index.js +45 -26
  224. package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
  225. package/dist/peer-CRvC7Hg1.js +1 -0
  226. package/dist/permdock-BrAscV28.js +868 -0
  227. package/dist/permdock-SV8ZINYT.d.ts +502 -0
  228. package/dist/{permission-registry-BsblpB-z.js → permission-registry-Br4jSNVi.js} +3 -3
  229. package/dist/permissions-B-wCP5ZC.js +30 -0
  230. package/dist/{permissions-CCJ6lmxB.js → permissions-BPxlwVhN.js} +4 -3
  231. package/dist/{permissions-COH-KRgT.d.ts → permissions-u_KHg-sN.d.ts} +1 -2
  232. package/dist/policies-DP2nqRoF.js +295 -0
  233. package/dist/{policy-ur0BBK_e.d.ts → policy-77FSAq_V.d.ts} +2 -2
  234. package/dist/{hosted-CBHgkzDl.js → policy-DbM5YYtV.js} +17 -273
  235. package/dist/policy-from-catalog-C2gMa2Dj.js +450 -0
  236. package/dist/policy-module-CTlwMvLI.js +89 -0
  237. package/dist/{policy-types-sp9P1iIV.d.ts → policy-types-n0uRTsW8.d.ts} +460 -632
  238. package/dist/postgrest-CEgRbefE.d.ts +100 -0
  239. package/dist/postgrest-DAjUkF9w.js +575 -0
  240. package/dist/{powersync-cZe4kzhL.js → powersync-BkWWCS1K.js} +23 -24
  241. package/dist/powersync-DISt6SUe.js +62 -0
  242. package/dist/powersync-MMJ2mI2q.js +1 -0
  243. package/dist/preset/index.d.ts +146 -0
  244. package/dist/preset/index.js +1 -0
  245. package/dist/preset-DZdU0tne.js +1768 -0
  246. package/dist/principal-source-pHneukrx.js +103 -0
  247. package/dist/prisma/index.d.ts +6 -3
  248. package/dist/prisma/index.js +2 -2
  249. package/dist/{problem-CnWraVhC.js → problem-CTviyH5L.js} +13 -23
  250. package/dist/{problem-details-rIIo8B2C.d.ts → problem-details-B45V5d2b.d.ts} +1 -1
  251. package/dist/{problem-details-DECUnXAn.js → problem-details-cn5X30gZ.js} +43 -40
  252. package/dist/problem-types-CJ2325SZ.js +5 -0
  253. package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
  254. package/dist/{protected-BN7BUdY1.js → protected-BlF0F6wL.js} +21 -4
  255. package/dist/{protected-B3_P7xuw.d.ts → protected-RFGpakN9.d.ts} +16 -8
  256. package/dist/{provider-Bi-0HNL3.js → provider-B1al-AZz.js} +2 -2
  257. package/dist/{provider-kwHC9CZD.d.ts → provider-DILL9oPK.d.ts} +1 -1
  258. package/dist/{provider-store-Ctt-81Ni.js → provider-store-DM6DNcta.js} +2 -2
  259. package/dist/pull-CvpINcMK.js +1 -0
  260. package/dist/pull-jEwbf80J.js +256 -0
  261. package/dist/push-BD4f15co.js +116 -0
  262. package/dist/pushed-policy-CqtxkV4G.js +238 -0
  263. package/dist/pushed-policy-DCW91KQU.d.ts +57 -0
  264. package/dist/react/index.d.ts +8 -8
  265. package/dist/react/index.js +6 -6
  266. package/dist/react/provider-client.d.ts +1 -1
  267. package/dist/react/provider-client.js +1 -2
  268. package/dist/react-native/index.d.ts +24 -72
  269. package/dist/react-native/index.js +29 -25
  270. package/dist/{refs-f3imMjNW.js → refs-K6eWUJ0H.js} +1 -1
  271. package/dist/{relation-walk-BXnlLtg2.js → relation-walk-3OyDBF0S.js} +2 -2
  272. package/dist/{relations-CvmSpG67.js → relations-BnCWnJGI.js} +3 -3
  273. package/dist/renames-CGj7YwcQ.js +175 -0
  274. package/dist/{replay-COpmZUfx.d.ts → replay-Bkm-Ne4l.d.ts} +1 -1
  275. package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
  276. package/dist/{request-context-BVM7aWNs.js → request-context-C81Pip9n.js} +3 -3
  277. package/dist/request-schema-CMreVuFM.js +148 -0
  278. package/dist/resend/index.d.ts +126 -0
  279. package/dist/resend/index.js +379 -0
  280. package/dist/{resource-relations-D1Un3pcz.js → resource-relations-D_jw0BFx.js} +1 -1
  281. package/dist/{retire-BFcxL6un.js → retire-CALjIQ7e.js} +2 -2
  282. package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
  283. package/dist/rls-BAqP4q66.js +336 -0
  284. package/dist/{rls-BEktUaqg.js → rls-DTvYd-lI.js} +288 -690
  285. package/dist/{role-builder-B4GbKM-i.js → role-builder-uWQZ4v84.js} +14 -207
  286. package/dist/{rpc-nYC3cR_u.js → rpc-VSl5ylaQ.js} +7 -7
  287. package/dist/run-CUKuz0A8.js +723 -0
  288. package/dist/run-DDwUaJDU.js +1 -0
  289. package/dist/run-ticket-DocwaTKn.d.ts +124 -0
  290. package/dist/run-ticket-sxFI6LAk.js +337 -0
  291. package/dist/{runtime-D_tMXnsq.js → runtime-D3VTAiCA.js} +1 -1
  292. package/dist/{saas-DtaA4JuW.js → saas-BCXRuXca.js} +16 -14
  293. package/dist/scan-qvOe0hS3.js +29 -0
  294. package/dist/{schema-DjQBcAP9.js → schema-B4v0Qrac.js} +102 -8
  295. package/dist/schema-yLuBWWsh.js +130 -0
  296. package/dist/scim/index.d.ts +2 -2
  297. package/dist/scim/index.js +1 -2
  298. package/dist/{scim-vFR1O5oG.js → scim-ClHtpyV3.js} +208 -76
  299. package/dist/{scopes-tvpa34ep.js → scopes-CUPSjo9q.js} +12 -7
  300. package/dist/server/index.d.ts +12 -143
  301. package/dist/server/index.js +12 -9
  302. package/dist/server-C3WXAHZj.js +453 -0
  303. package/dist/{server-types-DdqBwZN_.d.ts → server-types-CKQiCnON.d.ts} +51 -68
  304. package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
  305. package/dist/{shared-1uhI-e-b.js → shared-BAK8t4Uo.js} +20 -9
  306. package/dist/{shared-JhMeOsDF.js → shared-DvvFzYXe.js} +8 -9
  307. package/dist/signals-D3NcTKUS.js +32 -0
  308. package/dist/sink-4-eQIRWf.d.ts +225 -0
  309. package/dist/sink-BEZSlMS_.js +957 -0
  310. package/dist/{skills-BZdRQkxs.js → skills-B6lVdD_W.js} +13 -6
  311. package/dist/skills-CTYwkl44.js +51 -0
  312. package/dist/snapshot-B7DkYg6g.js +269 -0
  313. package/dist/{snapshot-cache-Cod40D-X.js → snapshot-cache-DZHQ0KF6.js} +11 -5
  314. package/dist/{snapshot-cache-J5T7t_vD.d.ts → snapshot-cache-PXI-vGpY.d.ts} +7 -5
  315. package/dist/solid/index.d.ts +11 -12
  316. package/dist/solid/index.js +7 -7
  317. package/dist/solid-start/index.d.ts +52 -0
  318. package/dist/solid-start/index.js +49 -0
  319. package/dist/{sources-Dljy06zL.d.ts → sources-Xc4zkszI.d.ts} +7 -13
  320. package/dist/{sources-B1-b-R0t.js → sources-vs5dGOsS.js} +125 -119
  321. package/dist/{sql-t8teWOfo.js → sql-B5T1IL83.js} +13 -1
  322. package/dist/src-Cu2m75uo.js +1860 -0
  323. package/dist/ssf/index.d.ts +4 -4
  324. package/dist/ssf/index.js +384 -47
  325. package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
  326. package/dist/standard-webhooks-rbD7LS6h.d.ts +88 -0
  327. package/dist/storage-C2bWdvJH.js +132 -0
  328. package/dist/{store-ILkLUj_o.js → store-BDutJkDL.js} +40 -53
  329. package/dist/{store-options-CbUHDoSe.js → store-options-u0ycEe8s.js} +26 -21
  330. package/dist/{stores-Cxz_80g-.d.ts → stores-BUGNbJTt.d.ts} +7 -8
  331. package/dist/{stores-BHXdSbw9.js → stores-CGhM8BN_.js} +2 -2
  332. package/dist/{stream-Dwsg6WwE.d.ts → stream-CeCMJmBB.d.ts} +2 -2
  333. package/dist/{stream-BMui98KK.js → stream-CvdUS9V1.js} +9 -2
  334. package/dist/style-DiKWnAvn.js +1 -0
  335. package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
  336. package/dist/subject-BGoM5o8B.js +17 -0
  337. package/dist/supabase/index.d.ts +23 -106
  338. package/dist/supabase/index.js +5 -4
  339. package/dist/supabase/middleware.d.ts +7 -6
  340. package/dist/supabase/middleware.js +13 -11
  341. package/dist/supabase-By_frk3U.js +92 -0
  342. package/dist/{supabase-hook-Cva3ikXz.js → supabase-hook-BMoEhZir.js} +960 -64
  343. package/dist/supabase-hook-CCw5m35C.js +1 -0
  344. package/dist/{supabase-C1TWlnYt.js → supabase-x5JtR2tc.js} +99 -206
  345. package/dist/support-session-C6xJQYut.js +158 -0
  346. package/dist/svelte/Protected.svelte +4 -4
  347. package/dist/svelte/index.d.ts +7 -7
  348. package/dist/svelte/index.js +10 -10
  349. package/dist/svelte/runtime.d.ts +3 -3
  350. package/dist/svelte/runtime.js +3 -3
  351. package/dist/svelte/source.d.ts +7 -7
  352. package/dist/svelte/source.js +4 -4
  353. package/dist/sveltekit/index.d.ts +51 -0
  354. package/dist/sveltekit/index.js +27 -0
  355. package/dist/tanstack-start/index.d.ts +51 -0
  356. package/dist/tanstack-start/index.js +40 -0
  357. package/dist/target-Bw37TFNA.js +51 -0
  358. package/dist/{tenancy-DshjqY0n.js → tenancy-DN2QAx9z.js} +5 -5
  359. package/dist/terminal/index.d.ts +11 -9
  360. package/dist/terminal/index.js +23 -287
  361. package/dist/testing/index.d.ts +311 -38
  362. package/dist/testing/index.js +3475 -201
  363. package/dist/testing/saas/index.d.ts +9 -8
  364. package/dist/testing/saas/index.js +2 -2
  365. package/dist/testing/saas/permissions.d.ts +1 -1
  366. package/dist/testing/saas/permissions.js +1 -2
  367. package/dist/text-BMFRfBqc.js +8 -0
  368. package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
  369. package/dist/thenable-yD7SabqG.js +31 -0
  370. package/dist/time-DkWjdL98.js +71 -0
  371. package/dist/{token-Bx9qy30p.js → token-BLZcjQgt.js} +15 -6
  372. package/dist/{tool-refusal-CQ7OEia9.js → tool-refusal-CMLN5xhn.js} +2 -2
  373. package/dist/trpc/index.d.ts +12 -9
  374. package/dist/trpc/index.js +16 -14
  375. package/dist/types-8RnwUAvE.d.ts +107 -0
  376. package/dist/{store-9KO4BlkB.d.ts → types-B3_ooZgZ.d.ts} +100 -75
  377. package/dist/{types-Br9IXUBG.d.ts → types-BdtSDbBO.d.ts} +77 -17
  378. package/dist/types-BtHtcKMr.d.ts +157 -0
  379. package/dist/{types-CqrjB9o6.d.ts → types-BzzaHxt3.d.ts} +23 -11
  380. package/dist/types-C791HFu9.d.ts +332 -0
  381. package/dist/types-C863OQiR.d.ts +57 -0
  382. package/dist/{types-ByUo56un.d.ts → types-CVZSNocA.d.ts} +23 -22
  383. package/dist/{types-DHrmBJLH.d.ts → types-CX7AvRqP.d.ts} +7 -7
  384. package/dist/types-C_IiEs64.d.ts +65 -0
  385. package/dist/{types-7rJVLWe5.d.ts → types-Dfv0aTER.d.ts} +63 -11
  386. package/dist/types-DqzsnlSA.js +67 -0
  387. package/dist/{types-DpWfQdSh.d.ts → types-Druu9wLM.d.ts} +46 -11
  388. package/dist/{types-CIlTojhq.d.ts → types-_WhUP7ud.d.ts} +9 -6
  389. package/dist/{types-CUcFZfpU.d.ts → types-lUlG3TVd.d.ts} +2 -1
  390. package/dist/unplugin/index.d.ts +1 -1
  391. package/dist/unplugin/index.js +2 -2
  392. package/dist/usage-CRVl9V3t.js +32 -0
  393. package/dist/usage-CZpSQP6L.js +1 -0
  394. package/dist/{usage-CG9nOYZw.js → usage-SveTRTyr.js} +54 -11
  395. package/dist/{validation-error-BSSw0l_8.d.ts → validation-error-DHUrAkku.d.ts} +1 -1
  396. package/dist/{validity-dVrUEPJt.js → validity-CZ7-y0Cj.js} +32 -15
  397. package/dist/{verifier-DMr_Zmb_.js → verifier-DHuh-okk.js} +18 -7
  398. package/dist/{verify-BztUB3GX.js → verify-BaAKx7t6.js} +645 -50
  399. package/dist/{version-BEogC-rB.js → version-CEbQ5UeM.js} +4 -3
  400. package/dist/version-DXkYUISx.js +1 -0
  401. package/dist/{views-CJsrBS1f.js → views-DTIIO-oQ.js} +22 -5
  402. package/dist/{permission-types-Dg39z9Kv.d.ts → vocabulary-CN8H_9UF.d.ts} +67 -2
  403. package/dist/vue/index.d.ts +9 -10
  404. package/dist/vue/index.js +8 -8
  405. package/dist/waiter-B986w1oK.d.ts +36 -0
  406. package/dist/waiter-BGUtGYoU.js +67 -0
  407. package/dist/watch--ovlPOc0.js +1 -0
  408. package/dist/{watch-zeucB7eF.js → watch-vea54PRw.js} +44 -5
  409. package/dist/webmcp/index.d.ts +2 -2
  410. package/dist/webmcp/index.js +3 -3
  411. package/dist/where-scope-C9vfEphl.js +306 -0
  412. package/dist/who-can-DWBAcaCQ.js +364 -0
  413. package/dist/wire-delegation-Cv3W2eaM.js +36 -0
  414. package/dist/wire-denial-C7PaVYEM.js +27 -0
  415. package/dist/workflow/index.d.ts +5 -0
  416. package/dist/workflow/index.js +223 -0
  417. package/dist/workflow-sdk/index.d.ts +56 -0
  418. package/dist/workflow-sdk/index.js +78 -0
  419. package/dist/{wrap-Cr93qqdP.d.ts → wrap-C5jC6sKI.d.ts} +2 -1
  420. package/dist/{wrap-DWsU_5Bd.js → wrap-gX61EtpB.js} +7 -6
  421. package/package.json +136 -37
  422. package/schemas/access-event-v1.json +118 -0
  423. package/schemas/approval-request-v1.json +34 -1
  424. package/schemas/approval-signature-v1.json +94 -0
  425. package/schemas/automation-event-v1.json +113 -0
  426. package/schemas/capability-v1.json +84 -0
  427. package/schemas/catalog-event-v1.json +87 -0
  428. package/schemas/catalog-v1.json +123 -12
  429. package/schemas/cli-commands-v1.json +164 -0
  430. package/schemas/cli-result-v1.json +96 -0
  431. package/schemas/cloud-api-v1.json +5407 -0
  432. package/schemas/connector-v1.json +408 -0
  433. package/schemas/credential-event-v1.json +81 -0
  434. package/schemas/credential-v1.json +134 -0
  435. package/schemas/decision-event-v1.json +288 -0
  436. package/schemas/delivery-event-v1.json +117 -0
  437. package/schemas/directory-event-v1.json +85 -0
  438. package/schemas/evidence-export-v1.json +54 -0
  439. package/schemas/membership-event-v1.json +93 -0
  440. package/schemas/policy-v1.json +68 -0
  441. package/schemas/pushed-policy-v1.json +236 -0
  442. package/schemas/run-v1.json +162 -0
  443. package/schemas/snapshot-v1.json +138 -0
  444. package/schemas/supabase-claims-v1.json +4 -4
  445. package/schemas/supabase-manifest-v1.json +5 -1
  446. package/schemas/support-session-v1.json +111 -0
  447. package/skills/permdock/SKILL.md +16 -12
  448. package/skills/permdock-agents/SKILL.md +40 -23
  449. package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
  450. package/skills/permdock-agents/references/runtimes.md +22 -18
  451. package/skills/permdock-approvals/SKILL.md +29 -13
  452. package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
  453. package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
  454. package/skills/permdock-audit/SKILL.md +3 -3
  455. package/skills/permdock-credentials/SKILL.md +5 -5
  456. package/skills/permdock-credentials/references/tokens-keys-links.md +14 -10
  457. package/skills/permdock-data/SKILL.md +6 -6
  458. package/skills/permdock-data/references/queries-and-rls.md +10 -9
  459. package/skills/permdock-data/references/relationships.md +3 -3
  460. package/skills/permdock-tenancy/SKILL.md +20 -7
  461. package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
  462. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
  463. package/skills/permdock-wire/SKILL.md +17 -11
  464. package/skills/permdock-wire/references/adapters.md +139 -51
  465. package/skills/permdock-wire/references/policy-options.md +5 -5
  466. package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
  467. package/dist/approvals-DZL76lKW.js +0 -240
  468. package/dist/arazzo-CD8d0WLb.js +0 -54
  469. package/dist/catalog-6yWAX6Ps.js +0 -2
  470. package/dist/catalog-WHG4kBq7.js +0 -48
  471. package/dist/cloud-C7bSDgX4.js +0 -50
  472. package/dist/cloud-PeBN3IEn.js +0 -118
  473. package/dist/collect-Bw2Jdq1q.js +0 -2
  474. package/dist/collect-CQx4hX4N.js +0 -83
  475. package/dist/commands-Cpip4ULx.js +0 -97
  476. package/dist/config-DLt6BvV7.js +0 -36
  477. package/dist/diff-Cnghh_Ip.js +0 -48
  478. package/dist/doctor-CuVJvhV_.js +0 -53
  479. package/dist/duration-xK2jGFVc.js +0 -25
  480. package/dist/errors-CWfoNg9N.js +0 -47
  481. package/dist/errors-DRnGZHzF.js +0 -30
  482. package/dist/expiry-BoBJ8Tvc.js +0 -7
  483. package/dist/fields-fwfXN01n.js +0 -1016
  484. package/dist/headers-BZSDieNT.js +0 -6
  485. package/dist/headers-Cf-zWvsO.d.ts +0 -6
  486. package/dist/ids-DC4V4CFu.js +0 -18
  487. package/dist/index-DgM7w96K.d.ts +0 -6
  488. package/dist/index-Dz7didpC.d.ts +0 -201
  489. package/dist/index-UdVQgq48.d.ts +0 -550
  490. package/dist/load-B_shHrmd.js +0 -2
  491. package/dist/manifest-BngWKryL.js +0 -770
  492. package/dist/may-use-BOn_dR_w.js +0 -78
  493. package/dist/openapi-DcQ1Kg40.js +0 -164
  494. package/dist/ownership-BgnbOJFT.js +0 -851
  495. package/dist/permdock-L26udHSk.js +0 -3646
  496. package/dist/powersync-BFSbSElQ.js +0 -62
  497. package/dist/powersync-DCDgZgfZ.js +0 -2
  498. package/dist/rls-55DQTuf5.js +0 -250
  499. package/dist/run-DMcNW_8T.js +0 -174
  500. package/dist/server-ZYEHtNHS.js +0 -268
  501. package/dist/sink-BTtmfPnE.js +0 -141
  502. package/dist/sink-CPN4zLfs.d.ts +0 -104
  503. package/dist/skills-Dle4ZoLF.js +0 -56
  504. package/dist/snapshot-Dc9CHPME.js +0 -1078
  505. package/dist/src-Bb7no-hS.js +0 -639
  506. package/dist/subject-C6dLxqHU.js +0 -24
  507. package/dist/supabase-Dbqr141s.js +0 -83
  508. package/dist/supabase-hook-BULg7Ut_.js +0 -2
  509. package/dist/thenable-QSmvt-vZ.js +0 -65
  510. package/dist/types-C0dee0Qf.d.ts +0 -197
  511. package/dist/types-DvupZE0w.d.ts +0 -9
  512. package/dist/usage-4G6t643F.js +0 -42
  513. package/dist/usage-iFLJ0-rr.js +0 -2
  514. package/dist/vocabulary-hhEFLFoL.d.ts +0 -65
  515. package/dist/watch-C8TpsAl4.js +0 -2
@@ -1,7 +1,8 @@
1
- import { Dr as Membership, Mt as PermDockOptions, Or as Principal, Sr as CustomRole, Y as LimitStore, kr as Subject, tt as RelationSource, vr as Actor, wr as Delegation } from "../../policy-types-sp9P1iIV.js";
2
- import { d as Permission } from "../../permission-types-Dg39z9Kv.js";
3
- import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-COH-KRgT.js";
4
- import { n as saasPolicy, t as SAAS_API_KEY_LIMIT } from "../../policy-ur0BBK_e.js";
1
+ import { $n as Delegation, Q as LimitStore, Rt as Instant, Zn as CustomRole, ar as Subject, it as RelationSource, nr as Membership, qn as Actor, rr as Principal } from "../../policy-types-n0uRTsW8.js";
2
+ import { w as Permission } from "../../vocabulary-CN8H_9UF.js";
3
+ import { i as PermDockOptions } from "../../permdock-SV8ZINYT.js";
4
+ import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-u_KHg-sN.js";
5
+ import { n as saasPolicy, t as SAAS_API_KEY_LIMIT } from "../../policy-77FSAq_V.js";
5
6
  import { StandardSchemaV1 } from "@standard-schema/spec";
6
7
  //#region src/testing/saas/schema.d.ts
7
8
  type FieldKind = "string" | "boolean" | "nullable-string";
@@ -121,8 +122,8 @@ type SaasTokenOptions = {
121
122
  /** Claim memberships; `false` omits the claim (database mode). Defaults to the seed. */
122
123
  readonly memberships?: readonly Membership[] | false;
123
124
  readonly ttl?: number;
124
- /** Epoch seconds used for `iat`. */
125
- readonly now?: number;
125
+ /** The instant used for `iat`; defaults to the current time. */
126
+ readonly now?: Instant;
126
127
  readonly issuer?: string;
127
128
  readonly audience?: string;
128
129
  readonly claims?: Readonly<Record<string, unknown>>;
@@ -134,9 +135,9 @@ export declare function signSaasToken(sub: string, options?: SaasTokenOptions):
134
135
  * and returns its `sub`, or `null`; never throws. Identity only: memberships
135
136
  * and plans come from the seed, never from the token.
136
137
  */
137
- export declare function verifySaasToken(token: string | null | undefined, now?: number): Promise<string | null>;
138
+ export declare function verifySaasToken(token: string | null | undefined, now?: Instant): Promise<string | null>;
138
139
  /** `verifySaasToken` plus the token's `exp` as `expiresAt` (epoch seconds). */
139
- export declare function verifySaasSession(token: string | null | undefined, now?: number): Promise<{
140
+ export declare function verifySaasSession(token: string | null | undefined, at?: Instant): Promise<{
140
141
  readonly sub: string;
141
142
  readonly expiresAt: number;
142
143
  } | null>;
@@ -1,3 +1,3 @@
1
- import { a as saasPlans, c as rowSchema, i as saasPermissions, n as SaasFolderSchema, o as saasRoles, r as SaasProjectSchema, s as saasTenantRoleNames, t as SaasDocSchema } from "../../permissions-CCJ6lmxB.js";
2
- import { C as saasOrg, D as saasUsers, E as saasSeed, O as SAAS_API_KEY_LIMIT, S as saasMemberships, T as saasRelations, _ as verifySaasToken, a as saasProject, b as SAAS_EXPIRED_AT, c as saasUser, d as saasIssuer, f as saasJwks, g as verifySaasSession, h as signSaasToken, i as saasLimitStore, k as saasPolicy, l as SAAS_TOKEN_TTL_SECONDS, m as saasPublicJwk, n as saasFolder, o as saasScenarioOptions, p as saasPrivateJwk, r as saasFolderScenarios, s as saasScenarios, t as saasDoc, u as saasAudience, v as saasSchemaSql, w as saasPrincipal, x as saasCustomRoles, y as saasSeedSql } from "../../saas-DtaA4JuW.js";
1
+ import { a as saasPlans, c as rowSchema, i as saasPermissions, n as SaasFolderSchema, o as saasRoles, r as SaasProjectSchema, s as saasTenantRoleNames, t as SaasDocSchema } from "../../permissions-BPxlwVhN.js";
2
+ import { C as saasOrg, D as saasUsers, E as saasSeed, O as SAAS_API_KEY_LIMIT, S as saasMemberships, T as saasRelations, _ as verifySaasToken, a as saasProject, b as SAAS_EXPIRED_AT, c as saasUser, d as saasIssuer, f as saasJwks, g as verifySaasSession, h as signSaasToken, i as saasLimitStore, k as saasPolicy, l as SAAS_TOKEN_TTL_SECONDS, m as saasPublicJwk, n as saasFolder, o as saasScenarioOptions, p as saasPrivateJwk, r as saasFolderScenarios, s as saasScenarios, t as saasDoc, u as saasAudience, v as saasSchemaSql, w as saasPrincipal, x as saasCustomRoles, y as saasSeedSql } from "../../saas-BCXRuXca.js";
3
3
  export { SAAS_API_KEY_LIMIT, SAAS_EXPIRED_AT, SAAS_TOKEN_TTL_SECONDS, SaasDocSchema, SaasFolderSchema, SaasProjectSchema, rowSchema, saasAudience, saasCustomRoles, saasDoc, saasFolder, saasFolderScenarios, saasIssuer, saasJwks, saasLimitStore, saasMemberships, saasOrg, saasPermissions, saasPlans, saasPolicy, saasPrincipal, saasPrivateJwk, saasProject, saasPublicJwk, saasRelations, saasRoles, saasScenarioOptions, saasScenarios, saasSchemaSql, saasSeed, saasSeedSql, saasTenantRoleNames, saasUser, saasUsers, signSaasToken, verifySaasSession, verifySaasToken };
@@ -1,2 +1,2 @@
1
- import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-COH-KRgT.js";
1
+ import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-u_KHg-sN.js";
2
2
  export { SaasDoc, SaasDocSchema, SaasFolder, SaasFolderSchema, SaasProject, SaasProjectSchema, saasPermissions, saasPlans, saasRoles, saasTenantRoleNames };
@@ -1,2 +1 @@
1
- import { a as saasPlans, i as saasPermissions, n as SaasFolderSchema, o as saasRoles, r as SaasProjectSchema, s as saasTenantRoleNames, t as SaasDocSchema } from "../../permissions-CCJ6lmxB.js";
2
- export { SaasDocSchema, SaasFolderSchema, SaasProjectSchema, saasPermissions, saasPlans, saasRoles, saasTenantRoleNames };
1
+ export { t as SaasDocSchema, n as SaasFolderSchema, r as SaasProjectSchema, i as saasPermissions, a as saasPlans, o as saasRoles, s as saasTenantRoleNames } from "../../permissions-BPxlwVhN.js";
@@ -0,0 +1,8 @@
1
+ //#region src/cli/shared/text.ts
2
+ /** The text before the first `separator`, or all of it when there is none. */
3
+ function beforeFirst(text, separator) {
4
+ const at = text.indexOf(separator);
5
+ return at === -1 ? text : text.slice(0, at);
6
+ }
7
+ //#endregion
8
+ export { beforeFirst as t };
@@ -1,5 +1,5 @@
1
1
  import { createTwoFilesPatch } from "diff";
2
- //#region src/cli/text-diff.ts
2
+ //#region src/cli/core/text-diff.ts
3
3
  const MAX_LINES = 40;
4
4
  /**
5
5
  * A unified diff from the file on disk to what the command would write,
@@ -0,0 +1,31 @@
1
+ import { r as isRecord } from "./compact-CAf557ZB.js";
2
+ //#region src/core/thenable.ts
3
+ function isThenable(value) {
4
+ return value !== null && typeof value === "object" && "then" in value && typeof value.then === "function";
5
+ }
6
+ /** Settles a promise nobody awaits, so its rejection is not reported as unhandled. */
7
+ function ignoreRejection(value) {
8
+ Promise.resolve(value).then(void 0, () => void 0);
9
+ }
10
+ /** Runs a Standard Schema that must answer synchronously; an asynchronous answer fails. */
11
+ function validateSync(schema, value) {
12
+ const result = schema["~standard"].validate(value);
13
+ if (isThenable(result)) {
14
+ ignoreRejection(result);
15
+ return { ok: false };
16
+ }
17
+ return result.issues === void 0 ? {
18
+ ok: true,
19
+ value: result.value
20
+ } : {
21
+ ok: false,
22
+ issues: result.issues
23
+ };
24
+ }
25
+ /** `validateSync` for a schema whose output must be an object; anything else is `undefined`. */
26
+ function validateRecord(schema, value) {
27
+ const validated = validateSync(schema, value);
28
+ return validated.ok && isRecord(validated.value) ? validated.value : void 0;
29
+ }
30
+ //#endregion
31
+ export { validateSync as i, isThenable as n, validateRecord as r, ignoreRejection as t };
@@ -0,0 +1,71 @@
1
+ //#region src/core/time.ts
2
+ /** RFC 3339 `date-time` in UTC or with an offset; fractional seconds optional. */
3
+ const RFC3339_PATTERN = "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$";
4
+ const RFC3339 = /* @__PURE__ */ new RegExp(RFC3339_PATTERN, "u");
5
+ function isRfc3339(value) {
6
+ return typeof value === "string" && RFC3339.test(value) && Number.isFinite(Date.parse(value));
7
+ }
8
+ /** Seconds since the epoch as RFC 3339 in UTC. */
9
+ function rfc3339(seconds) {
10
+ return (/* @__PURE__ */ new Date(seconds * 1e3)).toISOString();
11
+ }
12
+ /** Milliseconds since the epoch as RFC 3339 in UTC, milliseconds kept; throws a `RangeError` for a value outside the `Date` range. */
13
+ function isoAt(millis) {
14
+ return new Date(millis).toISOString();
15
+ }
16
+ /** RFC 3339 in UTC of `now`, or of the clock when absent; throws a `RangeError` for a `now` that is not an `Instant`. */
17
+ function isoNow(now) {
18
+ return dateAt(now).toISOString();
19
+ }
20
+ /** Whole seconds since the epoch of an RFC 3339 instant; `undefined` for anything else. */
21
+ function secondsOf(value) {
22
+ return isRfc3339(value) ? Math.floor(Date.parse(value) / 1e3) : void 0;
23
+ }
24
+ /** Whole seconds since the epoch of an RFC 3339 string or an `Instant`; `undefined` for anything else, Unix seconds included. */
25
+ function instantOf(value) {
26
+ if (typeof value === "string") return secondsOf(value);
27
+ if (typeof value === "object" && value !== null && "epochMilliseconds" in value && typeof value.epochMilliseconds === "number" && Number.isFinite(value.epochMilliseconds)) return Math.floor(value.epochMilliseconds / 1e3);
28
+ }
29
+ /** A duration: a whole number of seconds above zero, else `undefined`. */
30
+ function durationOf(value) {
31
+ return typeof value === "number" && Number.isSafeInteger(value) && value > 0 ? value : void 0;
32
+ }
33
+ /** Throws at definition time unless `value` is a whole number of seconds above zero. */
34
+ function assertDuration(value, label) {
35
+ if (durationOf(value) === void 0) throw new Error(`PermDock: ${label} must be a whole number of seconds above 0, got ${JSON.stringify(value) ?? String(value)}`);
36
+ }
37
+ /** Whole seconds since the epoch of `now`, or of the clock when absent. */
38
+ function nowSeconds(now) {
39
+ return Math.floor(nowMillis(now) / 1e3);
40
+ }
41
+ /** The `validation` denial detail for a `now` option that is not an `Instant`. */
42
+ const INVALID_NOW = Object.freeze({
43
+ field: "now",
44
+ message: "now must be an Instant ({ epochMilliseconds }), such as a Temporal.Instant"
45
+ });
46
+ /** The `Date` of `now`, or of the clock when absent; throws a `RangeError` for a `now` that is not an `Instant`. */
47
+ function dateAt(now) {
48
+ const millis = nowMillis(now);
49
+ if (!Number.isFinite(millis)) throw new RangeError(`PermDock: ${INVALID_NOW.message}`);
50
+ return new Date(millis);
51
+ }
52
+ /** Whole seconds since the epoch of `now`, or of the clock when absent; throws a `RangeError` for a `now` that is not an `Instant`. */
53
+ function secondsAt(now) {
54
+ return Math.floor(dateAt(now).getTime() / 1e3);
55
+ }
56
+ /** The instant `seconds` after the epoch. */
57
+ function instantAt(seconds) {
58
+ return { epochMilliseconds: seconds * 1e3 };
59
+ }
60
+ /** Seconds since the epoch of `now`, fraction kept, or of the clock when absent. */
61
+ function epochSeconds(now) {
62
+ return nowMillis(now) / 1e3;
63
+ }
64
+ /** Milliseconds since the epoch of `now`, or of the clock when absent; `NaN` for a `now` that is not an `Instant`. */
65
+ function nowMillis(now) {
66
+ if (now === void 0) return Date.now();
67
+ const millis = typeof now === "object" && now !== null ? now.epochMilliseconds : void 0;
68
+ return typeof millis === "number" ? millis : NaN;
69
+ }
70
+ //#endregion
71
+ export { durationOf as a, instantOf as c, isoNow as d, nowMillis as f, secondsOf as g, secondsAt as h, dateAt as i, isRfc3339 as l, rfc3339 as m, RFC3339_PATTERN as n, epochSeconds as o, nowSeconds as p, assertDuration as r, instantAt as s, INVALID_NOW as t, isoAt as u };
@@ -1,5 +1,5 @@
1
- import { t as canonicalJson } from "./canonical-json-CFKyFOke.js";
2
- import { n as sha256, t as bytesToBase64Url } from "./sha256-BO0swRXL.js";
1
+ import { t as canonicalJson } from "./canonical-json-BC8_nMTw.js";
2
+ import { r as sha256Digest } from "./sha256-D9ihqmvd.js";
3
3
  //#region src/core/token.ts
4
4
  /**
5
5
  * Only stable identity goes into the token, so refreshing a session (new
@@ -22,7 +22,16 @@ function versionOf(row, field) {
22
22
  }
23
23
  /** The digest that binds a token to the call's data when no row id does. */
24
24
  function payloadDigest(data) {
25
- return bytesToBase64Url(sha256(canonicalJson(data)));
25
+ return sha256Digest(canonicalJson(data));
26
+ }
27
+ /**
28
+ * The payload a decision token binds: the call's `args` when the caller
29
+ * passes them (an agent or MCP tool call, row or not), otherwise the data of
30
+ * a call without a row id. `undefined` binds nothing beyond the row id.
31
+ */
32
+ function tokenPayload(resourceId, data, args) {
33
+ if (args !== void 0) return payloadDigest(args);
34
+ return resourceId === "*" && data !== void 0 ? payloadDigest(data) : void 0;
26
35
  }
27
36
  /**
28
37
  * `version` is set only for an approval that goes stale on a resource
@@ -32,7 +41,7 @@ function payloadDigest(data) {
32
41
  * others.
33
42
  */
34
43
  function decisionToken(input) {
35
- const payload = JSON.stringify({
44
+ const payload = canonicalJson({
36
45
  key: input.key,
37
46
  resourceId: input.resourceId,
38
47
  principal: principalIdentity(input.principal),
@@ -44,7 +53,7 @@ function decisionToken(input) {
44
53
  ...input.version === void 0 ? {} : { version: input.version },
45
54
  ...input.payload === void 0 ? {} : { payload: input.payload }
46
55
  });
47
- return `pd1.${bytesToBase64Url(sha256(payload))}`;
56
+ return sha256Digest(payload);
48
57
  }
49
58
  //#endregion
50
- export { payloadDigest as n, versionOf as r, decisionToken as t };
59
+ export { versionOf as i, payloadDigest as n, tokenPayload as r, decisionToken as t };
@@ -1,5 +1,5 @@
1
- import { a as wireDenials } from "./problem-details-DECUnXAn.js";
2
- import { t as describe } from "./describe-Cgkp7eP0.js";
1
+ import { t as wireDenials } from "./wire-denial-C7PaVYEM.js";
2
+ import { t as describe } from "./describe-BybMRY7A.js";
3
3
  //#region src/core/tool-refusal.ts
4
4
  function deniedToolRefusal(decision, permission, resource) {
5
5
  const alternatives = decision.alternatives.map((leaf) => leaf.key);
@@ -1,9 +1,10 @@
1
- import { E as Policy, Or as Principal } from "../policy-types-sp9P1iIV.js";
2
- import { d as Permission } from "../permission-types-Dg39z9Kv.js";
3
- import { n as RevocationFeed } from "../revocations-Cy06JNx2.js";
4
- import { A as ConnectionOptions, O as Connection, i as OpenApiHooks } from "../server-types-DdqBwZN_.js";
5
- import { t as ServerAdapterOptions } from "../bind-BzqG8SMb.js";
6
- import { t as StreamProtectOptions } from "../stream-Dwsg6WwE.js";
1
+ import { T as Policy, rr as Principal } from "../policy-types-n0uRTsW8.js";
2
+ import { w as Permission } from "../vocabulary-CN8H_9UF.js";
3
+ import { r as PermDock } from "../permdock-SV8ZINYT.js";
4
+ import { n as RevocationFeed } from "../revocations-R07lFBnX.js";
5
+ import { D as ConnectionOptions, T as Connection, i as OpenApiHooks } from "../server-types-CKQiCnON.js";
6
+ import { t as ServerAdapterOptions } from "../bind-DOyrv6zi.js";
7
+ import { t as StreamProtectOptions } from "../stream-CeCMJmBB.js";
7
8
  import { AnyTRPCMiddlewareFunction } from "@trpc/server";
8
9
  //#region src/trpc/create.d.ts
9
10
  type TrpcMiddlewareOpts<TCtx = object, TInput = unknown> = {
@@ -33,11 +34,13 @@ type TrpcOpenApiHooks = {
33
34
  readonly securitySchemes: OpenApiHooks["securitySchemes"];
34
35
  };
35
36
  type TrpcPermDock<TCtx = object> = {
36
- readonly permdock: () => TrpcMiddleware;
37
- readonly protect: (permission: Permission | null, loadData?: (opts: TrpcMiddlewareOpts<TCtx>) => unknown, protectOptions?: StreamProtectOptions) => TrpcMiddleware;
37
+ /** The `PermDock` for one procedure call, for code the middleware does not run before. */
38
+ readonly getPermDock: (opts: TrpcMiddlewareOpts<TCtx>) => Promise<PermDock>;
39
+ readonly middleware: () => TrpcMiddleware;
40
+ readonly protect: (permission: Permission | null, data?: (opts: TrpcMiddlewareOpts<TCtx>) => unknown, protectOptions?: StreamProtectOptions) => TrpcMiddleware;
38
41
  /** A long-lived connection for the request behind `ctx`. */
39
42
  readonly connection: (opts: TrpcMiddlewareOpts<TCtx>, connectionOptions?: ConnectionOptions) => Promise<Connection>;
40
- readonly permdockHandler: (request: Request) => Promise<Response>;
43
+ readonly permdockHandler: () => (request: Request) => Promise<Response>;
41
44
  readonly openapi: TrpcOpenApiHooks;
42
45
  readonly errorFormatter: <TShape extends {
43
46
  readonly data: object;
@@ -1,8 +1,8 @@
1
1
  import { o as problemMessage } from "../http-BBoKefeS.js";
2
- import { t as problemFromError } from "../map-error-BE27PYkE.js";
3
- import { n as attached } from "../bind-kk-uyCwH.js";
4
- import { a as reloadAfter, r as isAsyncIterable } from "../stream-BMui98KK.js";
5
- import { i as rpcCode, n as guardStream, r as problemBody, t as bindRpcKernel } from "../rpc-nYC3cR_u.js";
2
+ import { t as problemFromError } from "../map-error-Dr70oA_3.js";
3
+ import { n as attached } from "../bind-CAvgUuKs.js";
4
+ import { i as isAsyncIterable, o as reloadAfter } from "../stream-CvdUS9V1.js";
5
+ import { i as rpcCode, n as guardStream, r as problemBody, t as bindRpcKernel } from "../rpc-VSl5ylaQ.js";
6
6
  import { TRPCError, isTrackedEnvelope } from "@trpc/server";
7
7
  //#region src/trpc/create.ts
8
8
  const PROBLEM = Symbol.for("permdock.problem");
@@ -58,9 +58,10 @@ function errorFormatter(opts) {
58
58
  }
59
59
  function createPermDock(policy, options) {
60
60
  const { kernel, bind, attach, scopeOf, connection, evaluate, guard: runGuard } = bindRpcKernel(policy, options, "trpc", (opts) => opts.ctx, (opts) => opts.path);
61
- const permdock = () => (async (opts) => {
61
+ const getPermDock = async (opts) => kernel.getPermDock(bind(opts), await scopeOf(opts));
62
+ const middleware = () => (async (opts) => {
62
63
  const request = bind(opts);
63
- const instance = await attached(async () => kernel.permdock(request, await scopeOf(opts)));
64
+ const instance = await attached(async () => kernel.getPermDock(request, await scopeOf(opts)));
64
65
  if (!instance.ok) return throwTrpcError(instance.response);
65
66
  const nextCtx = {
66
67
  ...opts.ctx,
@@ -70,18 +71,18 @@ function createPermDock(policy, options) {
70
71
  return mapDownstream(await opts.next({ ctx: nextCtx }));
71
72
  });
72
73
  /** Wraps a subscription's iterable so revocation ends it and unreadable items drop. */
73
- const guardSubscription = async (result, opts, permission, loadData, protectOptions) => {
74
+ const guardSubscription = async (result, opts, permission, data, protectOptions) => {
74
75
  if (result === null || typeof result !== "object" || result.ok !== true || !isAsyncIterable(result.data)) return result;
75
76
  return {
76
77
  ...result,
77
- data: await guardStream(result.data, (connectionOptions) => connection(opts, connectionOptions), permission, loadData, protectOptions, {
78
+ data: await guardStream(result.data, (connectionOptions) => connection(opts, connectionOptions), permission, data, protectOptions, {
78
79
  unwrap: (item) => isTrackedEnvelope(item) ? item[1] : item,
79
80
  onRevoked: trpcErrorFrom
80
81
  })
81
82
  };
82
83
  };
83
- const protect = (permission, loadData, protectOptions) => (async (opts) => {
84
- const { request, guard } = await runGuard(permission, loadData, opts, protectOptions);
84
+ const protect = (permission, data, protectOptions) => (async (opts) => {
85
+ const { request, guard } = await runGuard(permission, data, opts, protectOptions);
85
86
  if (guard.ok) {
86
87
  const nextCtx = {
87
88
  ...opts.ctx,
@@ -89,11 +90,11 @@ function createPermDock(policy, options) {
89
90
  permdockData: guard.data
90
91
  };
91
92
  attach(nextCtx, request);
92
- return guardSubscription(await mapDownstream(await opts.next({ ctx: nextCtx })), opts, permission, loadData === void 0 ? void 0 : reloadAfter(guard.data, () => loadData(opts)), protectOptions);
93
+ return guardSubscription(await mapDownstream(await opts.next({ ctx: nextCtx })), opts, permission, data === void 0 ? void 0 : reloadAfter(guard.data, () => data(opts)), protectOptions);
93
94
  }
94
95
  return throwTrpcError(guard.response);
95
96
  });
96
- const permdockHandler = (request) => {
97
+ const handler = (request) => {
97
98
  return evaluate(request, {
98
99
  ctx: { req: request },
99
100
  path: "permdock",
@@ -103,10 +104,11 @@ function createPermDock(policy, options) {
103
104
  };
104
105
  const kernelOpenApi = kernel.openapi;
105
106
  return {
106
- permdock,
107
+ getPermDock,
108
+ middleware,
107
109
  protect,
108
110
  connection,
109
- permdockHandler,
111
+ permdockHandler: () => handler,
110
112
  openapi: {
111
113
  security: (permission) => ({ openapi: {
112
114
  protect: true,
@@ -0,0 +1,107 @@
1
+ import { ar as Subject, dt as TokenVerifier, ot as SnapshotSource, q as DecisionSink, ut as TokenSigner } from "./policy-types-n0uRTsW8.js";
2
+ import { o as PolicySource } from "./hosted-BPk51-kX.js";
3
+ import { m as ApprovalStore, u as ApprovalRequest } from "./types-BdtSDbBO.js";
4
+ import { a as CatalogDocument } from "./types-Druu9wLM.js";
5
+ import { a as CatalogFinding } from "./sink-4-eQIRWf.js";
6
+ //#region src/cloud/types.d.ts
7
+ type CloudEndpointOptions = {
8
+ readonly url?: string;
9
+ readonly environment?: string;
10
+ };
11
+ type CloudEndpoints = {
12
+ /** The environment URL, `<url>/v1/environments/<env>`: `iss` and `aud` of the policy document. */
13
+ readonly issuer: string;
14
+ /** The environment's JWK Set URL, for `joseTokenVerifier({ jwks })`. */
15
+ readonly jwks: string;
16
+ };
17
+ /** What every `permdock/cloud` client needs to reach one environment. */
18
+ type CloudConnectionOptions = CloudEndpointOptions & {
19
+ /** The environment key; defaults to `PERMDOCK_CLOUD_KEY`. */
20
+ readonly key?: string;
21
+ readonly fetch?: typeof fetch;
22
+ };
23
+ /** Who signs the `PermDock-Approver` token `approvals.resolve` sends. */
24
+ type CloudApproverOptions = {
25
+ /**
26
+ * Signs the token with a key the environment trusts as an issuer, such as
27
+ * `joseTokenSigner` over your own key. Never `cloudSigner`: a client key
28
+ * that could mint approver tokens could forge any approver.
29
+ */
30
+ readonly signer: TokenSigner;
31
+ /** `aud` of the token; defaults to `<issuer>/approvals`, the environment URL plus `/approvals`. */
32
+ readonly audience?: string | readonly string[];
33
+ /**
34
+ * The `holder(permission)` approvers of `request` that `approver` holds,
35
+ * typically `approverPermissions(request, permdockFor(approver))`. Signed
36
+ * into the token as `permissions`; without it the verdict's own
37
+ * `permissions` are signed. A throw signs none.
38
+ */
39
+ readonly permissions?: (request: ApprovalRequest, approver: Subject) => readonly string[] | Promise<readonly string[]>;
40
+ /**
41
+ * The relation approvers of `request` that `approver` holds, typically
42
+ * `approverRelations(request, approver, { relations, permissions })`.
43
+ * Signed into the token as `relations`; without it the verdict's own
44
+ * `relations` are signed. A throw signs none.
45
+ */
46
+ readonly relations?: (request: ApprovalRequest, approver: Subject) => readonly string[] | Promise<readonly string[]>;
47
+ };
48
+ type CloudOptions = CloudConnectionOptions & {
49
+ /**
50
+ * Proves the approver on `approvals.resolve`. Without it, every resolve but
51
+ * a `system` rejection throws `approver-unauthenticated` and sends nothing.
52
+ */
53
+ readonly approver?: CloudApproverOptions;
54
+ readonly flushAt?: number;
55
+ /** Most events the sink holds while the Cloud is unreachable (default 10 000); the oldest are dropped first. */
56
+ readonly capacity?: number;
57
+ readonly waitUntil?: (task: Promise<void>) => void;
58
+ /** The CloudEvents `source` of every event the sink sends, an absolute URI; defaults to the environment URL. */
59
+ readonly source?: string;
60
+ /**
61
+ * Verifies the environment's signed policy document, typically
62
+ * `joseTokenVerifier({ jwks: cloudEndpoints().jwks })`. Without one,
63
+ * `policies.current()` stays `null`: an unverifiable document is never applied.
64
+ */
65
+ readonly verifier?: TokenVerifier;
66
+ };
67
+ /**
68
+ * What `POST /catalog` answers: `201` with the new version and the drift
69
+ * findings against the previous one, or `200` with `unchanged: true` when
70
+ * the fingerprint is already published.
71
+ */
72
+ type CloudCatalogPush = {
73
+ readonly version: number;
74
+ readonly fingerprint: string;
75
+ readonly findings: readonly CatalogFinding[];
76
+ } | {
77
+ readonly version: number;
78
+ readonly fingerprint: string;
79
+ readonly unchanged: true;
80
+ };
81
+ type CloudCatalog = {
82
+ /**
83
+ * Posts the catalog, its `operations` included, to the environment.
84
+ * Throws when the Cloud refuses it or answers another shape. The Cloud
85
+ * shows and diffs it; it never decides with it.
86
+ */
87
+ push(catalog: CatalogDocument): Promise<CloudCatalogPush>;
88
+ };
89
+ type CloudClient = CloudEndpoints & {
90
+ readonly approvals: ApprovalStore;
91
+ readonly sink: DecisionSink;
92
+ /**
93
+ * A `SnapshotSource` for the subject `token` proves: an `at+jwt` the
94
+ * environment issued, or one a trusted issuer registered for `subject`
95
+ * signed. Sent as `PermDock-Subject`; the Cloud never takes a subject from
96
+ * anything else.
97
+ */
98
+ snapshotsFor(token: string): SnapshotSource;
99
+ readonly policies: PolicySource;
100
+ readonly catalog: CloudCatalog;
101
+ };
102
+ type CloudSignerOptions = CloudConnectionOptions & {
103
+ /** `aud` when a `sign` call names none; signing without either throws. */
104
+ readonly audience?: string | readonly string[];
105
+ };
106
+ //#endregion
107
+ export { CloudConnectionOptions as a, CloudOptions as c, CloudClient as i, CloudSignerOptions as l, CloudCatalog as n, CloudEndpointOptions as o, CloudCatalogPush as r, CloudEndpoints as s, CloudApproverOptions as t };
@@ -1,77 +1,7 @@
1
- import { Or as Principal, an as Snapshot, ir as Decision, j as PolicyVocabulary, jt as PermDock, ut as TokenVerifier, vr as Actor, wr as Delegation } from "./policy-types-sp9P1iIV.js";
2
- import { d as Permission } from "./permission-types-Dg39z9Kv.js";
3
- import { n as DescribeMessages } from "./describe-C3ldA9os.js";
4
- //#region src/client/types.d.ts
5
- type ClientStatus = "ready" | "pending" | "stale" | "server-only";
6
- type PermissionState = {
7
- readonly allowed: boolean;
8
- readonly status: ClientStatus;
9
- readonly decision: Decision;
10
- };
11
- type PermissionSet = {
12
- readonly granted: readonly Permission[];
13
- get(permission: Permission): PermissionState | undefined;
14
- };
15
- type ClientPermDock<V extends PolicyVocabulary = PolicyVocabulary> = PermDock<V> & {
16
- status(permission?: Permission, data?: unknown): ClientStatus;
17
- invalidate(ref: Permission | {
18
- readonly [key: string]: unknown;
19
- }): void;
20
- refresh(options?: {
21
- readonly tenant?: string;
22
- }): Promise<void>;
23
- clear(): void;
24
- subscribe(listener: () => void): () => void;
25
- };
26
- type ApprovalState = "not-needed" | "required" | "pending" | "approved" | "rejected" | "expired";
27
- type ApprovalHandle = {
28
- readonly state: ApprovalState;
29
- readonly token: string | undefined;
30
- readonly request: (note?: string) => Promise<void>;
31
- };
32
- type SubjectView = {
33
- readonly principal: Principal | null;
34
- readonly actor: Actor | undefined;
35
- readonly delegation: Delegation | undefined;
36
- readonly expiresAt: number | undefined;
37
- readonly simulated: boolean;
38
- };
39
- type TenantView = {
40
- readonly tenant: string | null;
41
- readonly tenants: readonly string[];
42
- readonly switchTo: (id: string) => Promise<void>;
43
- readonly status: ClientStatus;
44
- };
45
- type FilterResult<T> = readonly T[] & {
46
- readonly partial: boolean;
47
- };
48
- type UseRolesOptions = {
49
- readonly tenant?: string;
50
- readonly team?: string;
51
- };
52
- /** The provider options Vue, Svelte and Solid share; each adds its own reactive `snapshot`, `tenant`, `headers`, `verifier` and `defaults`. */
53
- type ProviderOptionsBase = {
54
- /**
55
- * The AuthZEN evaluations endpoint for checks the snapshot cannot answer.
56
- * `false` never calls one: such a check is denied with reason `server-only`.
57
- */
58
- readonly endpoint?: string | false;
59
- /** Where `refresh()` fetches a fresh snapshot. Defaults to `endpoint`. */
60
- readonly snapshotUrl?: string;
61
- readonly approvals?: string;
62
- /** Read on every request, so a new `fetch` applies without a new store. */
63
- readonly fetch?: typeof fetch;
64
- readonly maxAge?: number;
65
- /** Localised text for the describe helper. */
66
- readonly messages?: DescribeMessages;
67
- /** Called with each snapshot the store accepts. */
68
- readonly onSnapshot?: NonNullable<ClientStoreOptions["onSnapshot"]>;
69
- /** Called when the store drops its snapshot. */
70
- readonly onClear?: () => void;
71
- /** Milliseconds between approval status polls. Defaults to 2000. */
72
- readonly approvalInterval?: number;
73
- };
74
- //#endregion
1
+ import { $n as Delegation, Nn as Decision, Vt as Snapshot, dt as TokenVerifier, j as PolicyVocabulary, qn as Actor, rr as Principal } from "./policy-types-n0uRTsW8.js";
2
+ import { w as Permission } from "./vocabulary-CN8H_9UF.js";
3
+ import { r as PermDock } from "./permdock-SV8ZINYT.js";
4
+ import { n as DescribeMessages, t as DecisionDescription } from "./describe-B5qgDvEW.js";
75
5
  //#region src/client/request.d.ts
76
6
  type StoreHeaders = Readonly<Record<string, string>>;
77
7
  //#endregion
@@ -144,4 +74,99 @@ type ClientStore = {
144
74
  dispose(): void;
145
75
  };
146
76
  //#endregion
147
- export { ClientPermDock as a, PermissionSet as c, SubjectView as d, TenantView as f, ApprovalState as i, PermissionState as l, ClientStoreOptions as n, ClientStatus as o, UseRolesOptions as p, ApprovalHandle as r, FilterResult as s, ClientStore as t, ProviderOptionsBase as u };
77
+ //#region src/client/types.d.ts
78
+ type ClientStatus = "ready" | "pending" | "stale" | "server-only";
79
+ type PermissionState = {
80
+ readonly allowed: boolean;
81
+ readonly status: ClientStatus;
82
+ readonly decision: Decision;
83
+ };
84
+ type PermissionSet = {
85
+ readonly granted: readonly Permission[];
86
+ get(permission: Permission): PermissionState | undefined;
87
+ };
88
+ type ClientPermDock<V extends PolicyVocabulary = PolicyVocabulary> = PermDock<V> & {
89
+ status(permission?: Permission, data?: unknown): ClientStatus;
90
+ invalidate(ref: Permission | {
91
+ readonly [key: string]: unknown;
92
+ }): void;
93
+ refresh(options?: {
94
+ readonly tenant?: string;
95
+ }): Promise<void>;
96
+ clear(): void;
97
+ subscribe(listener: () => void): () => void;
98
+ };
99
+ type ApprovalState = "not-needed" | "required" | "pending" | "approved" | "rejected" | "expired";
100
+ type ApprovalHandle = {
101
+ readonly state: ApprovalState;
102
+ readonly token: string | undefined;
103
+ readonly request: (note?: string) => Promise<void>;
104
+ };
105
+ type SubjectView = {
106
+ readonly principal: Principal | null;
107
+ readonly actor: Actor | undefined;
108
+ readonly delegation: Delegation | undefined;
109
+ readonly expiresAt: number | undefined;
110
+ readonly simulated: boolean;
111
+ };
112
+ type TenantView = {
113
+ readonly tenant: string | null;
114
+ readonly tenants: readonly string[];
115
+ readonly switchTo: (id: string) => Promise<void>;
116
+ readonly status: ClientStatus;
117
+ };
118
+ type FilterResult<T> = readonly T[] & {
119
+ readonly partial: boolean;
120
+ };
121
+ type RolesOptions = {
122
+ readonly tenant?: string;
123
+ readonly team?: string;
124
+ };
125
+ /** The provider options Vue, Svelte and Solid share; each adds its own reactive `snapshot`, `tenant`, `headers`, `verifier` and `defaults`. */
126
+ type ProviderOptionsBase = {
127
+ /**
128
+ * The AuthZEN evaluations endpoint for checks the snapshot cannot answer.
129
+ * `false` never calls one: such a check is denied with reason `server-only`.
130
+ */
131
+ readonly endpoint?: string | false;
132
+ /** Where `refresh()` fetches a fresh snapshot. Defaults to `endpoint`. */
133
+ readonly snapshotUrl?: string;
134
+ readonly approvals?: string;
135
+ /** Read on every request, so a new `fetch` applies without a new store. */
136
+ readonly fetch?: typeof fetch;
137
+ readonly maxAge?: number;
138
+ /** Localised text for the describe helper. */
139
+ readonly messages?: DescribeMessages;
140
+ /** Called with each snapshot the store accepts. */
141
+ readonly onSnapshot?: NonNullable<ClientStoreOptions["onSnapshot"]>;
142
+ /** Called when the store drops its snapshot. */
143
+ readonly onClear?: () => void;
144
+ /** Milliseconds between approval status polls. Defaults to 2000. */
145
+ readonly approvalInterval?: number;
146
+ };
147
+ /** How a control shows a permission it cannot use: hidden, or disabled with a reason. */
148
+ type GateMode = "hide" | "disable";
149
+ /**
150
+ * Everything a permission-gated control renders from, in one value: a
151
+ * button, a menu item or a link reads these fields and decides nothing
152
+ * itself. The client is a hint; the server checks again.
153
+ */
154
+ type GateView = {
155
+ /** The decision granted the action. */
156
+ readonly allowed: boolean;
157
+ /** The snapshot is loading; render the control disabled, not hidden. */
158
+ readonly pending: boolean;
159
+ /** `mode: "hide"` and the action is not available: render nothing. */
160
+ readonly hidden: boolean;
161
+ /** The control cannot run the action now (denied, pending or awaiting approval). */
162
+ readonly disabled: boolean;
163
+ /** The decision needs a person's approval first; offer to request it. */
164
+ readonly needsApproval: boolean;
165
+ /** The plans that would grant the action, for an upgrade prompt; empty otherwise. */
166
+ readonly upgrade: readonly string[];
167
+ /** Title and detail for a tooltip or an accessible description. */
168
+ readonly reason: DecisionDescription;
169
+ readonly decision: Decision;
170
+ };
171
+ //#endregion
172
+ export { FilterResult as a, PermissionSet as c, RolesOptions as d, SubjectView as f, ClientStoreOptions as h, ClientStatus as i, PermissionState as l, ClientStore as m, ApprovalState as n, GateMode as o, TenantView as p, ClientPermDock as r, GateView as s, ApprovalHandle as t, ProviderOptionsBase as u };