permdock 0.4.0 → 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 (514) 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-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 -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-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/arazzo-B6lebmiQ.js +36 -0
  19. package/dist/{arazzo-C4BcskbX.js → arazzo-BWhNF-k0.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-Dg8XsRaO.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-BMZPIVUM.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-BzqG8SMb.d.ts → bind--9EFVYWF.d.ts} +12 -10
  34. package/dist/{bind-kk-uyCwH.js → bind-CZzhx-Vj.js} +14 -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-BMnAudHn.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-BSslw1QV.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-tZUyOfOv.js → catalog-BECMPrwc.js} +51 -6
  48. package/dist/catalog-DjhMYYCq.js +1 -0
  49. package/dist/catalog-R_A__RsH.js +52 -0
  50. package/dist/{catalog-doc-DWtg0gGR.js → catalog-doc-C9wjsfNY.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-CIoHNevm.js +87 -0
  68. package/dist/codemod-Bmj9dWMH.js +37 -0
  69. package/dist/codemod-Cxvvc70T.js +2084 -0
  70. package/dist/{collect-2SrB7lfk.js → collect-CrZJJnEF.js} +75 -11
  71. package/dist/collect-DloHbDVa.js +55 -0
  72. package/dist/collect-FlXJlhus.js +1 -0
  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-CcEu2ZQ1.js → compile-CMqMx_IN.js} +11 -8
  77. package/dist/{compile-CtTP7eur.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
  78. package/dist/completion-BqhRBJD8.js +143 -0
  79. package/dist/config-B46rm9sc.js +26 -0
  80. package/dist/{config-BIjREpyE.js → config-bs_kZeYq.js} +12 -7
  81. package/dist/{config-report--Xb9APJS.js → config-report-DUgj62Ai.js} +15 -5
  82. package/dist/{connection-DUsczpB5.js → connection-DjhIJSs2.js} +6 -5
  83. package/dist/{context-DieZVJXu.js → context-bbFHR-0D.js} +2 -2
  84. package/dist/convex/index.d.ts +11 -10
  85. package/dist/convex/index.js +6 -4
  86. package/dist/create-0VZ7Pdiu.d.ts +107 -0
  87. package/dist/create-BDS7wc3y.d.ts +138 -0
  88. package/dist/create-BFfm17UA.d.ts +110 -0
  89. package/dist/create-BWRSXgOF.js +403 -0
  90. package/dist/create-C3b4B5eF.js +130 -0
  91. package/dist/{create-BBO24vj6.js → create-DnrmLnLW.js} +31 -32
  92. package/dist/{credential-kue0qpbm.js → credential-DM2um3ha.js} +152 -31
  93. package/dist/credentials-DPyHmYz5.js +74 -0
  94. package/dist/delegation-DaXVdDhM.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-D8jDHgsl.d.ts} +5 -5
  100. package/dist/{describe-C3ldA9os.d.ts → describe-BZUsixiL.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-CxZo9pTq.js +37 -0
  104. package/dist/{diff-rpqoe7Ag.js → diff-DCePiN6M.js} +60 -54
  105. package/dist/doctor-CxiwSfqH.js +44 -0
  106. package/dist/{doctor-owlv6ddh.js → doctor-DFjUxf2f.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-OD_4c__H.d.ts → errors-C2PXIv4c.d.ts} +2 -2
  116. package/dist/errors-CWTY6uih.js +143 -0
  117. package/dist/evaluate-_R8QkWaf.js +1732 -0
  118. package/dist/evaluations-16UqqQ6W.d.ts +32 -0
  119. package/dist/{evaluations-C9YJsv3H.js → evaluations-DZ2CbV5k.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-g0ypLkID.js +120 -0
  129. package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
  130. package/dist/fields-D9tPVUUS.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-D2lZt4Dd.js} +55 -52
  135. package/dist/{grantee-CXY-0C87.js → grantee-Cn1HyUsI.js} +3 -3
  136. package/dist/{grantee-conditions-MQs5NIuX.js → grantee-conditions-CcXf8hMM.js} +4 -3
  137. package/dist/{grantee-match-fxYp9Nmt.js → grantee-match-DHArqY82.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-DTcZOzhF.js} +45 -38
  143. package/dist/hono/index.d.ts +12 -9
  144. package/dist/hono/index.js +13 -12
  145. package/dist/hosted-BZIAYvon.js +315 -0
  146. package/dist/hosted-DBDX0M-P.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-DMmOG27O.js} +190 -53
  152. package/dist/index-BcHcPyIo.d.ts +110 -0
  153. package/dist/index-CaxrMD1A.d.ts +1 -0
  154. package/dist/index-Chrs5fQ-.d.ts +210 -0
  155. package/dist/index-CxGUswIC.d.ts +431 -0
  156. package/dist/index-D8EovfsP.d.ts +91 -0
  157. package/dist/{index-UdVQgq48.d.ts → index-DOVf7RJv.d.ts} +431 -81
  158. package/dist/{index-BwMe94Xq.d.ts → index-SGdIQyzc.d.ts} +34 -16
  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-Omfd793B.d.ts} +2 -2
  164. package/dist/instance-snapshot-Cxq4ygFc.js +600 -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-5JatXyND.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-CtKR3GXL.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-TCAdw-eW.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-BShP7Vf4.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-BJdBmYDG.js → openapi-DTaEmTSW.js} +10 -9
  205. package/dist/openapi-ahr8rHu3.js +138 -0
  206. package/dist/operation-findings-DgATDpvh.js +36 -0
  207. package/dist/operations-CxybZErY.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-Dyw8fyPF.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-BatFgAA4.js} +1698 -869
  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-C-q02Pal.js → parse-local-manifest-CVSs6J9I.js} +1 -1
  219. package/dist/{parse-local-manifest-DvYUR0QL.d.ts → parse-local-manifest-DgqtruPn.d.ts} +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-B9JxkBwC.js +868 -0
  227. package/dist/permdock-D7eeLJER.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-CZKiUfFM.js} +4 -3
  231. package/dist/{permissions-COH-KRgT.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
  232. package/dist/policies-CO1oOymN.js +295 -0
  233. package/dist/{policy-ur0BBK_e.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
  234. package/dist/{hosted-CBHgkzDl.js → policy-DLZJ5gAp.js} +17 -273
  235. package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
  236. package/dist/policy-module-CTlwMvLI.js +89 -0
  237. package/dist/{policy-types-sp9P1iIV.d.ts → policy-types-DzwivBgR.d.ts} +434 -631
  238. package/dist/postgrest-CW0IqC-U.js +566 -0
  239. package/dist/postgrest-NUqZT-RB.d.ts +100 -0
  240. package/dist/powersync-BHfuehf3.js +62 -0
  241. package/dist/powersync-CbzkqL_M.js +1 -0
  242. package/dist/{powersync-cZe4kzhL.js → powersync-bYUDLOAO.js} +23 -24
  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-DXlt-vks.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-B3_P7xuw.d.ts → protected-DEPHc2xV.d.ts} +16 -8
  255. package/dist/{protected-BN7BUdY1.js → protected-DfjY5mLA.js} +21 -4
  256. package/dist/{provider-Bi-0HNL3.js → provider-CC-u3bYP.js} +2 -2
  257. package/dist/{provider-kwHC9CZD.d.ts → provider-DMVt6yYn.d.ts} +1 -1
  258. package/dist/{provider-store-Ctt-81Ni.js → provider-store-B5Yrkhzr.js} +2 -2
  259. package/dist/pull-BgIfno6w.js +256 -0
  260. package/dist/pull-ByOks_Tg.js +1 -0
  261. package/dist/push-CmFVBOeI.js +116 -0
  262. package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
  263. package/dist/pushed-policy-DobP7AHI.js +238 -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 +24 -22
  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-D7iKcLFe.d.ts} +1 -1
  275. package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
  276. package/dist/{request-context-BVM7aWNs.js → request-context-BTRTG7OT.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-BA8an5Ap.js +336 -0
  284. package/dist/{rls-BEktUaqg.js → rls-j6t43t7n.js} +287 -689
  285. package/dist/{role-builder-B4GbKM-i.js → role-builder-CXbis5-X.js} +14 -207
  286. package/dist/{rpc-nYC3cR_u.js → rpc-aPyNi6tA.js} +7 -7
  287. package/dist/run-CNsApDpd.js +1 -0
  288. package/dist/run-DOfMtc9V.js +723 -0
  289. package/dist/run-ticket-BjhTOi6u.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-FO-Q8oj0.js} +16 -14
  293. package/dist/scan-BOI5tJ-6.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-DqCT4CgZ.js +453 -0
  303. package/dist/{server-types-DdqBwZN_.d.ts → server-types-BLd4MnBX.d.ts} +51 -68
  304. package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
  305. package/dist/{shared-1uhI-e-b.js → shared-CD11nBbC.js} +18 -8
  306. package/dist/{shared-JhMeOsDF.js → shared-DvvFzYXe.js} +8 -9
  307. package/dist/signals-D3NcTKUS.js +32 -0
  308. package/dist/sink-BEZSlMS_.js +957 -0
  309. package/dist/sink-Bj_lDUDq.d.ts +225 -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-CXUWfsNy.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-DqK9eDmM.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-BV9j0DeZ.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-DLfUWFAI.js +1851 -0
  323. package/dist/ssf/index.d.ts +4 -4
  324. package/dist/ssf/index.js +384 -47
  325. package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
  326. package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
  327. package/dist/storage-C2bWdvJH.js +132 -0
  328. package/dist/{store-ILkLUj_o.js → store-4u_hxjWa.js} +40 -53
  329. package/dist/{store-options-CbUHDoSe.js → store-options-BqEakYRa.js} +26 -21
  330. package/dist/{stores-BHXdSbw9.js → stores-BbsD4fAR.js} +2 -2
  331. package/dist/{stores-Cxz_80g-.d.ts → stores-ClZUgeoP.d.ts} +7 -8
  332. package/dist/{stream-Dwsg6WwE.d.ts → stream-7-xmnf3U.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-9pqI57pW.js +92 -0
  342. package/dist/{supabase-C1TWlnYt.js → supabase-Dxlp8A94.js} +98 -205
  343. package/dist/supabase-hook-CXcGpHqq.js +1 -0
  344. package/dist/{supabase-hook-Cva3ikXz.js → supabase-hook-DdDQhMlw.js} +951 -60
  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-7rJVLWe5.d.ts → types-5Ut_pbKy.d.ts} +61 -11
  376. package/dist/{store-9KO4BlkB.d.ts → types-BNORmDM8.d.ts} +100 -75
  377. package/dist/types-BjV-fqcA.d.ts +57 -0
  378. package/dist/{types-CUcFZfpU.d.ts → types-BqAKcRNW.d.ts} +2 -1
  379. package/dist/types-C8-KNsFf.d.ts +107 -0
  380. package/dist/{types-Br9IXUBG.d.ts → types-CCpc2Dcv.d.ts} +77 -17
  381. package/dist/{types-DpWfQdSh.d.ts → types-CZTnPFzM.d.ts} +46 -11
  382. package/dist/{types-CqrjB9o6.d.ts → types-CdlxsYQh.d.ts} +23 -11
  383. package/dist/{types-CIlTojhq.d.ts → types-ClZaWzfb.d.ts} +9 -6
  384. package/dist/types-DX0LaKTb.d.ts +157 -0
  385. package/dist/types-DiQjupG2.d.ts +332 -0
  386. package/dist/types-DqzsnlSA.js +67 -0
  387. package/dist/types-_sHy8BQf.d.ts +65 -0
  388. package/dist/{types-ByUo56un.d.ts → types-fbZ7JEXr.d.ts} +23 -22
  389. package/dist/{types-DHrmBJLH.d.ts → types-tIgIeIKJ.d.ts} +7 -7
  390. package/dist/unplugin/index.d.ts +1 -1
  391. package/dist/unplugin/index.js +2 -2
  392. package/dist/usage-CHOtwL19.js +1 -0
  393. package/dist/usage-DHtE8j4E.js +32 -0
  394. package/dist/{usage-CG9nOYZw.js → usage-T5mXq98v.js} +54 -11
  395. package/dist/{validation-error-BSSw0l_8.d.ts → validation-error-Bg5Tpluk.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-DbCL9bnB.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-D6lPdb4Z.d.ts} +65 -2
  403. package/dist/vue/index.d.ts +9 -10
  404. package/dist/vue/index.js +8 -8
  405. package/dist/waiter-BGUtGYoU.js +67 -0
  406. package/dist/waiter-CKy4MQSY.d.ts +36 -0
  407. package/dist/watch-Cb-NcaUw.js +1 -0
  408. package/dist/{watch-zeucB7eF.js → watch-CszoTJMq.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-Dv-WTP-w.js +306 -0
  412. package/dist/who-can-D0QoYbEb.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-Bd1Tejur.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 +9 -8
  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 +5 -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/load-B_shHrmd.js +0 -2
  490. package/dist/manifest-BngWKryL.js +0 -770
  491. package/dist/may-use-BOn_dR_w.js +0 -78
  492. package/dist/openapi-DcQ1Kg40.js +0 -164
  493. package/dist/ownership-BgnbOJFT.js +0 -851
  494. package/dist/permdock-L26udHSk.js +0 -3646
  495. package/dist/powersync-BFSbSElQ.js +0 -62
  496. package/dist/powersync-DCDgZgfZ.js +0 -2
  497. package/dist/rls-55DQTuf5.js +0 -250
  498. package/dist/run-DMcNW_8T.js +0 -174
  499. package/dist/server-ZYEHtNHS.js +0 -268
  500. package/dist/sink-BTtmfPnE.js +0 -141
  501. package/dist/sink-CPN4zLfs.d.ts +0 -104
  502. package/dist/skills-Dle4ZoLF.js +0 -56
  503. package/dist/snapshot-Dc9CHPME.js +0 -1078
  504. package/dist/src-Bb7no-hS.js +0 -639
  505. package/dist/subject-C6dLxqHU.js +0 -24
  506. package/dist/supabase-Dbqr141s.js +0 -83
  507. package/dist/supabase-hook-BULg7Ut_.js +0 -2
  508. package/dist/thenable-QSmvt-vZ.js +0 -65
  509. package/dist/types-C0dee0Qf.d.ts +0 -197
  510. package/dist/types-DvupZE0w.d.ts +0 -9
  511. package/dist/usage-4G6t643F.js +0 -42
  512. package/dist/usage-iFLJ0-rr.js +0 -2
  513. package/dist/vocabulary-hhEFLFoL.d.ts +0 -65
  514. package/dist/watch-C8TpsAl4.js +0 -2
@@ -0,0 +1,210 @@
1
+ import { Ct as Credential, Nn as Decision, St as ApiKeyPrincipal, T as Policy, Tt as CredentialKind, U as CredentialVerifier, at as SettingsSource, dt as TokenVerifier, gt as SupportSession, ir as Subject, j as PolicyVocabulary, lt as TokenFailureCause, q as DecisionSink, qt as AuthEvent, rr as Principal, ut as TokenSigner } from "./policy-types-DzwivBgR.js";
2
+ import { E as PermissionTree, w as Permission } from "./vocabulary-D6lPdb4Z.js";
3
+ import { p as PrincipalSource } from "./permdock-D7eeLJER.js";
4
+ import { t as Disclosure } from "./problem-details-DXlt-vks.js";
5
+ import { a as ProblemDetails, t as ApprovalHint } from "./errors-C2PXIv4c.js";
6
+ import { c as ServerPermDock, l as ServerPermDockOptions } from "./server-types-BLd4MnBX.js";
7
+ //#region src/server/create.d.ts
8
+ /**
9
+ * The Fetch factory behind every HTTP adapter. The subject and actor are
10
+ * resolved once per `Request`; one instance is cached per `(Request, tenant)`,
11
+ * so a global middleware and a later tenant-scoped `protect` never share a
12
+ * tenant.
13
+ */
14
+ declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, given: ServerPermDockOptions<TUser>): ServerPermDock<V>;
15
+ //#endregion
16
+ //#region src/server/map-error.d.ts
17
+ type ProblemFromErrorOptions = {
18
+ readonly instance?: string;
19
+ /** Whether the request carried credentials, which picks the `401` challenge. */
20
+ readonly credentials?: boolean;
21
+ };
22
+ /**
23
+ * Turns a thrown PermDock error into its Problem Details response, with the
24
+ * status, `WWW-Authenticate` and rate-limit fields `protect` sends for the
25
+ * same decision. Returns `undefined` for anything else so the framework's own
26
+ * error path takes over.
27
+ */
28
+ declare function problemFromError(error: unknown, options?: ProblemFromErrorOptions): Response | undefined;
29
+ //#endregion
30
+ //#region src/server/credentials.d.ts
31
+ /** `on('auth')` causes for an API key that resolves to the anonymous subject. */
32
+ type ApiKeyFailureCause = "malformed" | "unknown-credential" | "invalid-claims" | "expired" | "credential-policy" | "credential-revoked" | "owner-unavailable";
33
+ /** An opaque key split at its last `_`: `pdk_<id>_<secret><checksum>`. */
34
+ type ApiKeyParts = {
35
+ readonly id: string;
36
+ readonly secret: string;
37
+ };
38
+ /** What an application stores per key: the credential and the key's hash, never the key. */
39
+ type StoredCredential = {
40
+ readonly credential: Credential;
41
+ readonly hash: string;
42
+ };
43
+ /**
44
+ * Splits `pdk_<id>_<secret><checksum>`: `id` is 1 to 128 of `A-Z a-z 0-9 _ -`,
45
+ * the secret 43 base62 characters and the checksum the 6 base62 characters of
46
+ * the CRC-32 of everything before it. Anything else, including a checksum
47
+ * that does not match, is `undefined`.
48
+ */
49
+ declare function parseApiKey(key: unknown): ApiKeyParts | undefined;
50
+ /**
51
+ * Splits `pdfeed_<id>_<secret><checksum>`. `id` is `isFeedId`, the secret is
52
+ * 26 lowercase base32 characters and the checksum is 6 more. A checksum that
53
+ * does not match is `undefined`.
54
+ */
55
+ declare function parseFeedKey(key: unknown): ApiKeyParts | undefined;
56
+ /**
57
+ * A fresh `pdfeed_<id>_<secret><checksum>`: 26 lowercase base32 characters
58
+ * (130 bits) and a 6-character CRC-32 checksum. The whole key is lowercase.
59
+ */
60
+ declare function generateFeedKey(id: string): string;
61
+ /**
62
+ * A fresh `pdk_<id>_<secret><checksum>`: a 43-character base62 secret (about
63
+ * 256 bits) and a 6-character CRC-32 checksum, so a secret scanner can tell a
64
+ * real key from a lookalike without calling the issuer.
65
+ */
66
+ declare function generateApiKey(id: string): string;
67
+ /** base64url SHA-256 of the whole key, the value to store and compare. */
68
+ declare function hashApiKey(key: string): Promise<string>;
69
+ /**
70
+ * A `CredentialVerifier` over the application's own table: `find` looks a
71
+ * key up by the id in it, and the key's hash is compared in constant time.
72
+ * A record that is not a valid v1 credential, or whose id is not the key's,
73
+ * verifies to `null`. A throwing `find` propagates, so the resolver denies
74
+ * with `source-threw`.
75
+ */
76
+ declare function apiKeyVerifier(options: {
77
+ readonly find: (id: string) => StoredCredential | null | undefined | Promise<StoredCredential | null | undefined>;
78
+ /** Passed through as the verifier's `touch`, for a `lastUsedAt` column. */
79
+ readonly touch?: CredentialVerifier["touch"];
80
+ }): CredentialVerifier;
81
+ type MemoryCredentialStore = CredentialVerifier & {
82
+ /** Stores `credential` and returns its key; the key is never stored. */
83
+ issue(credential: Credential): Promise<string>;
84
+ /** A new secret for the same id; the old key stops verifying at once. */
85
+ rotate(id: string): Promise<string | undefined>;
86
+ /** `true` when a credential was removed. */
87
+ revoke(id: string): boolean;
88
+ list(): readonly Credential[];
89
+ /** When `touch` last recorded a use of `id`, as RFC 3339. */
90
+ lastUsedAt(id: string): string | undefined;
91
+ };
92
+ /**
93
+ * In-process credentials for tests and single-replica apps. `issue`, `rotate`
94
+ * and `revoke` write `credential` events to `sink` when one is given.
95
+ */
96
+ declare function memoryCredentialStore(options?: {
97
+ readonly sink?: DecisionSink;
98
+ readonly source?: string;
99
+ }): MemoryCredentialStore;
100
+ type ApiKeySubjectOptions = {
101
+ readonly verifier: CredentialVerifier;
102
+ /** The definitions, to turn the credential's permission keys into its delegation. */
103
+ readonly permissions: PermissionTree;
104
+ /**
105
+ * Loads the live owner of a user-bound key: roles and memberships as of
106
+ * this request, asked with the key's tenant. `null` (a deleted or
107
+ * suspended user) is anonymous with `owner-unavailable`, and a throw is
108
+ * `source-threw`. Without it the owner is `{ id, kind: 'user' }` and its
109
+ * rights come from the `memberships` source passed to `createPermDock`.
110
+ */
111
+ readonly principals?: PrincipalSource;
112
+ /** The tenant the request acts in: a user key is held to its owner's memberships there. */
113
+ readonly tenant?: string;
114
+ /** `true` when the application revoked the credential id; a throw denies. */
115
+ readonly revoked?: (id: string) => boolean | Promise<boolean>;
116
+ /**
117
+ * The tenant `credentials` policy, checked on every use so a tightened
118
+ * policy reaches existing keys: a service key's own tenant, a user key's
119
+ * the `tenant` the resolver is called with. A throw denies.
120
+ */
121
+ readonly settings?: SettingsSource;
122
+ /** Receives a `credential` event with operation `used` for sampled uses. */
123
+ readonly sink?: DecisionSink;
124
+ /** Fraction of uses reported to `sink`, in `(0, 1]`; defaults to 1. */
125
+ readonly sample?: number;
126
+ /** The `source` of `used` events; defaults to `permdock`. */
127
+ readonly source?: string;
128
+ readonly onAuth?: (event: AuthEvent) => void;
129
+ readonly requestId?: string;
130
+ /** Accept only these credential kinds. A key of another kind is anonymous. */
131
+ readonly kinds?: readonly CredentialKind[];
132
+ };
133
+ /**
134
+ * Resolves an opaque API key (`pdk_<id>_<secret>`) into the subject its
135
+ * credential acts as. Every failure (a malformed or unknown key, a record
136
+ * that is not a valid credential, expiry, a tenant policy the key breaks, a
137
+ * revoked id, a missing owner, a throwing verifier, source or callback) is
138
+ * the anonymous subject, never a throw.
139
+ */
140
+ declare function subjectFromApiKey(key: string | undefined | null, options: ApiKeySubjectOptions): Promise<Subject<ApiKeyPrincipal>>;
141
+ //#endregion
142
+ //#region src/server/support-session.d.ts
143
+ /** `on('auth')` causes: a verification failure, or one of the session checks. */
144
+ type SupportSessionFailureCause = TokenFailureCause | "invalid-claims" | "session-ended" | "principal-unavailable" | "actor-unavailable";
145
+ /** The live state of each support session, so one can end before it expires. */
146
+ type SupportSessionSource = {
147
+ /** The session as of now, or `null` for an unknown one. A throw ends it. */
148
+ session(id: string): {
149
+ readonly id: string;
150
+ readonly ended?: boolean;
151
+ } | null | Promise<{
152
+ readonly id: string;
153
+ readonly ended?: boolean;
154
+ } | null>;
155
+ };
156
+ type SupportSessionSubjectOptions = {
157
+ readonly verifier: TokenVerifier;
158
+ /** Loads the viewed principal and the support actor, live, on every request. */
159
+ readonly principals: PrincipalSource;
160
+ /** The permission tree the session's keys name. */
161
+ readonly permissions: PermissionTree;
162
+ /** Checked on every request when set; an unknown or ended session denies. */
163
+ readonly sessions?: SupportSessionSource;
164
+ readonly audience?: string | readonly string[];
165
+ readonly issuer?: string;
166
+ readonly clockTolerance?: number;
167
+ readonly onAuth?: (event: AuthEvent) => void;
168
+ readonly requestId?: string;
169
+ };
170
+ /** `subject.context.supportSession` of a subject resolved from a session token. */
171
+ type SupportSessionContext = {
172
+ readonly id: string;
173
+ readonly reason: string;
174
+ readonly approvedBy?: string;
175
+ readonly reference?: string;
176
+ };
177
+ /**
178
+ * Signs a granted `SupportSession` as a `vnd.permdock.support-session+jwt`
179
+ * (`sub` the viewed principal, `act` the support actor, `jti` the session
180
+ * id) that expires with the session. Throws a `TypeError` for a record
181
+ * `parseSupportSession` refuses.
182
+ */
183
+ declare function signSupportSession(session: SupportSession, signer: TokenSigner, options?: {
184
+ readonly audience?: string | readonly string[];
185
+ }): Promise<string>;
186
+ /**
187
+ * Resolves a `vnd.permdock.support-session+jwt` into the subject each
188
+ * request of the session acts as: the viewed principal loaded live, a
189
+ * `support` actor, the session's permissions as the delegation and
190
+ * `context.supportSession`. The actor must still exist. Every failure is the
191
+ * anonymous subject, never a throw.
192
+ */
193
+ declare function subjectFromSupportSession(token: string | undefined | null, options: SupportSessionSubjectOptions): Promise<Subject>;
194
+ //#endregion
195
+ //#region src/server/problem.d.ts
196
+ declare function wwwAuthenticate(decision: Decision, permission: Permission | undefined, credentials?: boolean): string | undefined;
197
+ declare function problemResponse(details: ProblemDetails, permission?: Permission, decision?: Decision, extra?: Readonly<Record<string, string>>, credentials?: boolean): Response;
198
+ declare function validationProblem(detail: string): Response;
199
+ declare function problemFromDecision(decision: Decision, permission: Permission, subject: Subject | undefined, options?: {
200
+ readonly instance?: string;
201
+ readonly approval?: ApprovalHint;
202
+ /** `'hide'` on a loaded row: a denial answers as `404` `/not-found`. */
203
+ readonly disclosure?: Disclosure;
204
+ /** Whether the request carried credentials, which picks the `401` challenge. */
205
+ readonly credentials?: boolean;
206
+ /** The scope an `insufficient_scope` challenge names; the permission's own scope when absent. */
207
+ readonly scope?: string;
208
+ }): Response;
209
+ //#endregion
210
+ export { subjectFromApiKey as C, createPermDock as E, parseFeedKey as S, problemFromError as T, generateApiKey as _, SupportSessionContext as a, memoryCredentialStore as b, SupportSessionSubjectOptions as c, ApiKeyFailureCause as d, ApiKeyParts as f, apiKeyVerifier as g, StoredCredential as h, wwwAuthenticate as i, signSupportSession as l, MemoryCredentialStore as m, problemResponse as n, SupportSessionFailureCause as o, ApiKeySubjectOptions as p, validationProblem as r, SupportSessionSource as s, problemFromDecision as t, subjectFromSupportSession as u, generateFeedKey as v, ProblemFromErrorOptions as w, parseApiKey as x, hashApiKey as y };
@@ -0,0 +1,431 @@
1
+ import { Nn as Decision, Rt as Instant, T as Policy, Yn as AuthorizationDetail, et as MembershipSource, fn as Approver, ir as Subject, it as RelationSource, nr as Membership, ut as TokenSigner } from "./policy-types-DzwivBgR.js";
2
+ import { E as PermissionTree, V as AppData, w as Permission } from "./vocabulary-D6lPdb4Z.js";
3
+ import { r as PermDock } from "./permdock-D7eeLJER.js";
4
+ import { a as ApprovalDelegationSource, c as ApprovalListQuery, g as ApprovalVerdict, i as ApprovalDelegation, l as ApprovalPage, m as ApprovalStore, o as ApprovalInspectResult, r as ApprovalCancelMeta, s as ApprovalListFilter, u as ApprovalRequest } from "./types-CCpc2Dcv.js";
5
+ import { a as AccessReviewItemQuery, c as AccessReviewStore, i as AccessReviewItemPage, n as AccessReviewDecision, r as AccessReviewItem, t as AccessReview } from "./types-_sHy8BQf.js";
6
+ import { t as JsonSchemaNode } from "./json-schema-CN_iLFH2.js";
7
+ //#region src/approvals/access-reviews/handler.d.ts
8
+ type AccessReviewsHandlerOptions = {
9
+ readonly subject: (request: Request) => Subject | null | undefined | Promise<Subject | null | undefined>;
10
+ /**
11
+ * The reviewer's own instance, for `holder()` reviewers. Without it they
12
+ * match nobody.
13
+ */
14
+ readonly permdockFor?: (reviewer: Subject, tenant: string) => PermDock | Promise<PermDock>;
15
+ };
16
+ /**
17
+ * HTTP for one access-review store: `GET` a review and its items, `POST`
18
+ * `.../keep`, `.../revoke`, `.../applied` and `.../close`. A caller who is
19
+ * not a reviewer and did not open the review gets 404.
20
+ */
21
+ declare function accessReviewsHandler(store: AccessReviewStore, options: AccessReviewsHandlerOptions): (request: Request) => Promise<Response>;
22
+ //#endregion
23
+ //#region src/approvals/access-reviews/decide.d.ts
24
+ type AccessReviewVerdict = {
25
+ readonly status: "kept" | "revoked";
26
+ readonly by: Subject;
27
+ readonly note?: string;
28
+ /**
29
+ * The `holder(permission)` reviewers `by` holds, read from `by`'s own
30
+ * instance. Server-side input. Absent means none.
31
+ */
32
+ readonly permissions?: readonly string[];
33
+ };
34
+ /** Whether `by` is named as a reviewer. A link, a feed or a contact is never a reviewer. */
35
+ declare function accessReviewerEligible(review: AccessReview, by: Subject, permissions?: readonly string[], now?: Instant): boolean;
36
+ /**
37
+ * The decision to persist, or throws. A reviewer cannot decide a holding
38
+ * of their own principal. `holder()` matches only through `permissions`.
39
+ */
40
+ declare function decideAccessReviewItem(review: AccessReview, item: AccessReviewItem, verdict: AccessReviewVerdict, at?: Instant): AccessReviewDecision;
41
+ //#endregion
42
+ //#region src/approvals/access-reviews/errors.d.ts
43
+ type AccessReviewErrorCode = "review-not-found" | "review-closed" | "item-not-found" | "item-not-pending" | "reviewer-unauthenticated" | "reviewer-not-eligible" | "reviewer-is-holder" | "not-revoked" | "already-applied";
44
+ declare class AccessReviewError extends Error {
45
+ override readonly name: "AccessReviewError";
46
+ readonly code: AccessReviewErrorCode;
47
+ constructor(code: AccessReviewErrorCode, message: string);
48
+ }
49
+ declare function isAccessReviewError(value: unknown): value is AccessReviewError;
50
+ //#endregion
51
+ //#region src/approvals/access-reviews/start.d.ts
52
+ type AccessReviewHolder = {
53
+ readonly principal: string;
54
+ readonly permission: string;
55
+ readonly via: readonly string[];
56
+ };
57
+ type StartAccessReviewInput = {
58
+ readonly id: string;
59
+ readonly permissions: readonly Permission[];
60
+ readonly reviewers: Approver | readonly Approver[];
61
+ readonly dueAt: string;
62
+ };
63
+ type AccessReviewOptions = {
64
+ readonly reviews: AccessReviewStore;
65
+ /**
66
+ * Replaces the membership listing. The Supabase recipe passes the rows of
67
+ * `permitted_<scope>_users`. `complete` defaults to `true` for this path.
68
+ */
69
+ readonly holders?: readonly AccessReviewHolder[];
70
+ readonly complete?: boolean;
71
+ readonly memberships?: MembershipSource;
72
+ /** Scope name passed to `memberships.list`. Defaults to `tenant`. */
73
+ readonly scope?: string;
74
+ /**
75
+ * An instance for one member, used to confirm each holding with a rowless
76
+ * `decide`. Required when `holders` is omitted.
77
+ */
78
+ readonly permdockFor?: (principalId: string) => PermDock | Promise<PermDock>;
79
+ /**
80
+ * When set, a global role, a plan, a relation or an inherit grant on a
81
+ * reviewed permission makes `complete` false. Without it the membership
82
+ * path is incomplete, because those holders cannot be listed from a tenant.
83
+ */
84
+ readonly policy?: Policy;
85
+ readonly now?: Instant;
86
+ };
87
+ /**
88
+ * Opens a review of who holds `permissions` in the caller's active tenant.
89
+ * The caller must be signed in. PermDock stores the population and does not
90
+ * revoke anything: the application changes the source, then `markApplied`.
91
+ */
92
+ declare function startAccessReview(permdock: PermDock, input: StartAccessReviewInput, options: AccessReviewOptions): Promise<AccessReview>;
93
+ //#endregion
94
+ //#region src/approvals/access-reviews/store.d.ts
95
+ /** Pages items in `(principal, id)` order with the approval cursor codec. */
96
+ declare function pageAccessReviewItems(matching: readonly AccessReviewItem[], query: AccessReviewItemQuery): AccessReviewItemPage;
97
+ type MemoryAccessReviewStore = AccessReviewStore & {
98
+ readonly reviews: () => readonly AccessReview[];
99
+ };
100
+ /** In-process access reviews for tests and single-replica apps. */
101
+ declare function memoryAccessReviewStore(): MemoryAccessReviewStore;
102
+ //#endregion
103
+ //#region src/approvals/delegation.d.ts
104
+ /**
105
+ * A frozen copy of a delegation with only the known fields, or `undefined`
106
+ * when a known field has the wrong type, `until` is not after `from`, or
107
+ * the delegate and the delegator are the same principal.
108
+ */
109
+ declare function parseApprovalDelegation(input: unknown): ApprovalDelegation | undefined;
110
+ /** In-process delegations. An entry that does not parse is dropped. */
111
+ declare function memoryApprovalDelegationSource(entries: readonly unknown[]): ApprovalDelegationSource;
112
+ type ApprovalDelegationMatch = {
113
+ readonly delegation: ApprovalDelegation;
114
+ readonly delegator: Subject;
115
+ readonly relations: readonly string[];
116
+ readonly permissions: readonly string[];
117
+ };
118
+ type MatchDelegationOptions = {
119
+ readonly approvalDelegations?: ApprovalDelegationSource;
120
+ readonly subjectFor?: (principalId: string, request: ApprovalRequest) => Subject | null | undefined | Promise<Subject | null | undefined>;
121
+ readonly now?: Instant;
122
+ readonly requireDistinct: boolean;
123
+ readonly factsFor: (subject: Subject) => Promise<{
124
+ readonly relations: readonly string[];
125
+ readonly permissions: readonly string[];
126
+ }>;
127
+ };
128
+ /**
129
+ * The first active delegation under which `delegate` may approve `request`,
130
+ * or `undefined`. The delegator is resolved by `subjectFor` and checked with
131
+ * `assertApprover`, so relation and permission approvers use the delegator's
132
+ * facts. A throw, a missing option or a delegator the source does not name
133
+ * matches nobody. The delegator's own delegations are never read.
134
+ */
135
+ declare function matchDelegation(request: ApprovalRequest, delegate: Subject, options: MatchDelegationOptions): Promise<ApprovalDelegationMatch | undefined>;
136
+ //#endregion
137
+ //#region src/approvals/idempotency.d.ts
138
+ /** A response the approvals handler replays for a repeated `Idempotency-Key`. */
139
+ type IdempotentResponse = {
140
+ /** Which request produced it: a reused key with another fingerprint is refused with `422`. */
141
+ readonly fingerprint: string;
142
+ readonly status: number;
143
+ readonly headers: readonly (readonly [name: string, value: string])[];
144
+ readonly body: string;
145
+ };
146
+ /**
147
+ * Where `approvalsHandler` keeps `Idempotency-Key` responses
148
+ * (draft-ietf-httpapi-idempotency-key-header). Keys arrive scoped to the
149
+ * approver. Share one store across instances so a retry that lands on another
150
+ * instance replays the first response.
151
+ */
152
+ type IdempotencyStore = {
153
+ /** Names the implementation in errors and events. */
154
+ readonly name?: string;
155
+ get(key: string): IdempotentResponse | undefined | Promise<IdempotentResponse | undefined>;
156
+ /** `expiresAt` is epoch milliseconds; the store may drop the entry after it. */
157
+ set(key: string, response: IdempotentResponse, expiresAt: number): void | Promise<void>;
158
+ };
159
+ /** An in-process `IdempotencyStore`, for one instance and for tests. */
160
+ declare function memoryIdempotencyStore(): IdempotencyStore;
161
+ //#endregion
162
+ //#region src/approvals/handler.d.ts
163
+ type ApprovalsHandlerOptions = {
164
+ readonly subject: (request: Request) => Subject | null | undefined | Promise<Subject | null | undefined>;
165
+ /** Refuse the principal even on grants that set `approval: { distinct: false }`. */
166
+ readonly requireDistinctApprover?: boolean;
167
+ readonly signer?: TokenSigner;
168
+ readonly audience?: string | readonly string[];
169
+ /** Where `relation()` approvers are read, by the request's resource id; without it they match nobody. */
170
+ readonly relations?: RelationSource;
171
+ /** The policy's permission tree, for `through` links and `includes` on relation approvers. */
172
+ readonly permissions?: PermissionTree;
173
+ /**
174
+ * The approver's own instance in the request's tenant, for
175
+ * `holder(permission)` approvers (custom roles included when the instance
176
+ * reads a `CustomRoleSource`). Without it, or when it throws, they match nobody.
177
+ */
178
+ readonly permdockFor?: (approver: Subject, request: ApprovalRequest) => PermDock | Promise<PermDock>;
179
+ /**
180
+ * Out-of-office delegations. With `subjectFor`, a caller who is not an
181
+ * approver may approve as someone who delegated to them. Without either,
182
+ * delegation matches nobody.
183
+ */
184
+ readonly approvalDelegations?: ApprovalDelegationSource;
185
+ /**
186
+ * Resolves a delegator's subject from their principal id. Server-side:
187
+ * never from the request body. A throw matches nobody.
188
+ */
189
+ readonly subjectFor?: (principalId: string, request: ApprovalRequest) => Subject | null | undefined | Promise<Subject | null | undefined>;
190
+ /**
191
+ * Where `Idempotency-Key` responses on approve and reject are kept for 24
192
+ * hours; a `memoryIdempotencyStore()` per handler when absent.
193
+ */
194
+ readonly idempotency?: IdempotencyStore;
195
+ };
196
+ /** An approval as the approvals API shows it: never the resume `token`. */
197
+ type ApprovalView = Omit<ApprovalRequest, "token">;
198
+ declare function approvalsHandler(store: ApprovalStore, options: ApprovalsHandlerOptions): (request: Request) => Promise<Response>;
199
+ //#endregion
200
+ //#region src/approvals/parse-request.d.ts
201
+ /**
202
+ * Reads an `ApprovalRequest` (parsed, or the JSON text) as an approval store
203
+ * or the Cloud returns it, validated against
204
+ * `schemas/approval-request-v1.json`. Returns a deep-frozen copy, or `null`
205
+ * for anything that does not match, including a `__proto__`, `constructor`
206
+ * or `prototype` key.
207
+ */
208
+ declare function parseApprovalRequest(value: unknown): ApprovalRequest | null;
209
+ //#endregion
210
+ //#region src/approvals/request-schema.d.ts
211
+ /**
212
+ * `schemas/approval-request-v1.json`: the `ApprovalRequest` an approval store
213
+ * holds. Self-contained (`$defs`, no remote `$ref`) so `rls.jsonSchema` can
214
+ * inline it into a pg_jsonschema check constraint.
215
+ */
216
+ declare const APPROVAL_REQUEST_SCHEMA: JsonSchemaNode;
217
+ //#endregion
218
+ //#region src/approvals/signature.d.ts
219
+ /** One recorded approval as the `approvals` claim of a `vnd.permdock.approval+jwt` carries it. */
220
+ type ApprovalSignatureEntry = {
221
+ readonly by: string;
222
+ /** RFC 3339. */
223
+ readonly at: string;
224
+ readonly stage?: number;
225
+ readonly vouched?: string;
226
+ readonly on_behalf_of?: string;
227
+ readonly delegation?: string;
228
+ };
229
+ /**
230
+ * The claims of a `vnd.permdock.approval+jwt` other than `iss`, `aud`,
231
+ * `iat`, `exp` and `jti`, which the signer sets: `jti` is the request `id`,
232
+ * `iat` its `resolvedAt` and `exp` its `expiresAt`.
233
+ */
234
+ type ApprovalSignatureClaims = {
235
+ readonly sub?: string;
236
+ /** RFC 8693: the actor that asked for the approval. */
237
+ readonly act?: {
238
+ readonly sub: string;
239
+ };
240
+ /** The `PermDock-Approval` token the signature approves. */
241
+ readonly token: string;
242
+ readonly resolved_by?: string;
243
+ readonly approvals: readonly ApprovalSignatureEntry[];
244
+ /** RFC 9396: one entry, the approved action on the approved resource. */
245
+ readonly authorization_details: readonly [AuthorizationDetail];
246
+ };
247
+ declare function approvalSignatureClaims(request: ApprovalRequest): ApprovalSignatureClaims;
248
+ type SignApprovalOptions = {
249
+ /** `aud`: the resource server that verifies the signature. */
250
+ readonly audience?: string | readonly string[];
251
+ };
252
+ /**
253
+ * Signs an approved request as a `vnd.permdock.approval+jwt`: `jti` is the
254
+ * request id, `iat` its `resolvedAt` and `exp` its `expiresAt`. `undefined`
255
+ * without a signer or for any status but `approved`.
256
+ */
257
+ declare function signApproval(request: ApprovalRequest, signer: TokenSigner | undefined, options?: SignApprovalOptions): Promise<string | undefined>;
258
+ //#endregion
259
+ //#region src/approvals/relations.d.ts
260
+ type ApproverRelationsOptions = {
261
+ /** The object graph relation approvers are read from; without it they match nobody. */
262
+ readonly relations?: RelationSource;
263
+ /** The permission tree the policy declares; needed to follow `through` links and `includes`. */
264
+ readonly permissions?: PermissionTree;
265
+ /** The clock relation expiry is read at; defaults to the current time. */
266
+ readonly now?: Instant;
267
+ };
268
+ /**
269
+ * The relation approvers of `request` that `subject` holds on its resource,
270
+ * keyed by `approverRelationKey`, for `ApprovalVerdict.relations`. Reads go
271
+ * through `relations` by the request's resource id; a request without an id,
272
+ * a missing source or a read that fails holds nothing.
273
+ */
274
+ declare function approverRelations(request: ApprovalRequest, subject: Subject, options: ApproverRelationsOptions): Promise<readonly string[]>;
275
+ //#endregion
276
+ //#region src/approvals/helpers.d.ts
277
+ declare function summarizeSubject(subject: Subject): ApprovalRequest["subject"];
278
+ declare function requestApproval(store: ApprovalStore, decision: Extract<Decision, {
279
+ readonly outcome: "approval-required";
280
+ }>, meta: {
281
+ readonly permission: Permission | {
282
+ readonly key: string;
283
+ readonly scope: string;
284
+ readonly resource: string;
285
+ };
286
+ readonly resource?: {
287
+ readonly type: string;
288
+ readonly id?: string;
289
+ };
290
+ readonly subject: Subject;
291
+ readonly membership?: Membership;
292
+ readonly adapter?: string;
293
+ readonly ttl?: number;
294
+ readonly now?: Instant;
295
+ readonly detail?: string;
296
+ /** The application's own data for the request; plain JSON, checked here. */
297
+ readonly x?: AppData;
298
+ }): Promise<ApprovalRequest>;
299
+ /**
300
+ * Checks `verdict.by` and resolves the request. Relation approvers are read
301
+ * through `options.relations` unless `verdict.relations` is already set.
302
+ */
303
+ declare function resolveApproval(store: ApprovalStore, token: string, verdict: ApprovalVerdict, options?: ApproverRelationsOptions & {
304
+ readonly requireDistinctApprover?: boolean;
305
+ readonly permdockFor?: ApprovalsHandlerOptions["permdockFor"];
306
+ }): Promise<ApprovalRequest>;
307
+ declare function vouchApproval(store: ApprovalStore, token: string, verdict: {
308
+ readonly status: "approved" | "rejected";
309
+ readonly by: Subject;
310
+ readonly rule: string;
311
+ readonly note?: string;
312
+ }): Promise<ApprovalRequest>;
313
+ declare function inspectApproval(store: ApprovalStore, token: string, at?: Instant): Promise<ApprovalInspectResult>;
314
+ /** Inspects `token` and, when it is approved, consumes it so it resumes once. */
315
+ declare function consumeApproval(store: ApprovalStore, token: string, at?: Instant): Promise<ApprovalInspectResult>;
316
+ /**
317
+ * Applies a resume token to a decision. The token only matters when the
318
+ * decision is `approval-required` and the token is the one this call was
319
+ * issued; otherwise a new approval is requested. A matching token is consumed
320
+ * unless `consume` is `false`, so an approval resumes exactly one call. Under
321
+ * `staleOn: 'resource-change'`, a token issued for an earlier version of the
322
+ * same row denies with `stale-approval`; the next call without it asks again.
323
+ */
324
+ declare function resumeDecision(input: {
325
+ readonly decision: Decision;
326
+ readonly permission: Permission | {
327
+ readonly key: string;
328
+ readonly scope: string;
329
+ readonly resource: string;
330
+ };
331
+ readonly subject: Subject;
332
+ readonly store: ApprovalStore | undefined;
333
+ readonly resource: {
334
+ readonly type: string;
335
+ readonly id?: string;
336
+ };
337
+ readonly adapter: string;
338
+ readonly token: string | undefined;
339
+ /** `false` for checks that do not run the action, such as the decision endpoint. */
340
+ readonly consume?: boolean;
341
+ readonly now?: Instant;
342
+ /**
343
+ * Seconds a request this call opens stays open; absent means the
344
+ * store's `ttl`, else `DEFAULT_APPROVAL_TTL`. The grant's `approval.ttl`
345
+ * still caps it.
346
+ */
347
+ readonly ttl?: number;
348
+ }): Promise<Decision>;
349
+ declare function cancelApprovals(store: ApprovalStore, filter: ApprovalListFilter, meta: ApprovalCancelMeta): Promise<number>;
350
+ /** The token of a `PermDock-Approval` field: one RFC 9651 sf-token Item with no parameters, else `undefined`. */
351
+ declare function readApprovalHeader(headers: Headers | {
352
+ readonly get: (name: string) => string | null;
353
+ }): string | undefined;
354
+ declare function resumeFromHeader(store: ApprovalStore, headers: Headers | {
355
+ readonly get: (name: string) => string | null;
356
+ }, now?: Instant): Promise<ApprovalInspectResult>;
357
+ /**
358
+ * The token to resume `decision` with when the caller carries none: the
359
+ * decision's own token when the store holds an approved or rejected request
360
+ * for it, so `resumeDecision` resumes (or denies) the call without the
361
+ * caller passing the token back. The token already binds permission,
362
+ * resource (or the call's data when there is no row id), subject and actor.
363
+ * A pending request counts only with `denyPending: true`, which makes the
364
+ * call deny with `approval-pending` instead of asking again. `undefined` when
365
+ * the decision needs no approval, there is no store, or the store has no
366
+ * unexpired request for the token; a store that throws counts as none.
367
+ */
368
+ declare function storedApprovalToken(store: ApprovalStore | undefined, decision: Decision, options?: {
369
+ readonly denyPending?: boolean;
370
+ readonly now?: Instant;
371
+ }): Promise<string | undefined>;
372
+ //#endregion
373
+ //#region src/approvals/page.d.ts
374
+ /** The page size of a query: `limit` within 1 to 200, 50 when absent. */
375
+ declare function approvalPageSize(limit: number | undefined): number;
376
+ /** Where a page starts: the `(createdAt, token)` of the last request before it. */
377
+ type ApprovalCursorPosition = readonly [createdAt: string, token: string];
378
+ /** The `next` cursor after `request`, for a store that pages in its own query. */
379
+ declare function encodeApprovalCursor(request: ApprovalRequest): string;
380
+ /** The `(createdAt, token)` position a `next` cursor names, or `null` for one that does not parse. */
381
+ declare function decodeApprovalCursor(cursor: string): ApprovalCursorPosition | null;
382
+ /**
383
+ * Pages already-filtered requests in `(createdAt, token)` order, as the
384
+ * built-in stores do: `limit` within 1 to 200 (50 when absent), `cursor` from
385
+ * the previous page's `next`, and no items for a cursor that does not parse.
386
+ * A custom `ApprovalStore` that filters in memory returns it from `list`.
387
+ */
388
+ declare function pageApprovals(matching: readonly ApprovalRequest[], query: ApprovalListQuery): ApprovalPage;
389
+ /** Every matching request of `store`, following `next` until the last page (at most 1000 pages of 200). */
390
+ declare function listAllApprovals(store: ApprovalStore, filter: ApprovalListFilter): Promise<ApprovalRequest[]>;
391
+ //#endregion
392
+ //#region src/approvals/permissions.d.ts
393
+ /**
394
+ * The `holder(permission)` approvers of `request` that `approver` holds, for
395
+ * `ApprovalVerdict.permissions`: each permission key the approver's own
396
+ * instance grants without a row. `approver` must be an instance for the
397
+ * approving principal in the request's tenant; for any other tenant, or an
398
+ * anonymous instance, it holds nothing. A check that throws holds nothing.
399
+ */
400
+ declare function approverPermissions(request: ApprovalRequest, approver: PermDock): readonly string[];
401
+ //#endregion
402
+ //#region src/approvals/store.d.ts
403
+ /**
404
+ * Refuses `by` as an approver of `request`, or returns the index of the
405
+ * stage the approval counts for (`undefined` without `stages`). Eligibility
406
+ * is `approvers.by` or, under `stages`, the first incomplete stage
407
+ * (`sequential`) or any incomplete stage (`all`); `approvers.escalation.to`
408
+ * is eligible too once the request has waited `escalation.after`. A
409
+ * principal who already approved is refused, so one person never completes
410
+ * two stages. `relations` are the relation approvers `by` holds on the
411
+ * request's resource (see `ApprovalVerdict.relations`).
412
+ */
413
+ declare function assertApprover(request: ApprovalRequest, by: Subject, requireDistinctApprover: boolean, at?: Instant, relations?: readonly string[], permissions?: readonly string[]): number | undefined;
414
+ /**
415
+ * The request after `verdict`, for a store to persist: a rejection resolves
416
+ * it; an approval is appended to `approvals` and resolves it once there are
417
+ * `approvers.quorum` (default 1). Throws an `ApprovalError` when the request
418
+ * is not pending, has expired or `verdict.by` may not approve it. Stores
419
+ * should write the result only when the stored row is still pending with the
420
+ * same number of approvals, so two approvers racing both count.
421
+ */
422
+ declare function applyApprovalVerdict(request: ApprovalRequest, verdict: ApprovalVerdict, at?: Instant): ApprovalRequest;
423
+ type MemoryApprovalStore = ApprovalStore & {
424
+ readonly ttl: number;
425
+ };
426
+ declare function memoryApprovalStore(options?: {
427
+ readonly ttl?: number;
428
+ readonly now?: () => Instant;
429
+ }): MemoryApprovalStore;
430
+ //#endregion
431
+ export { AccessReviewVerdict as $, APPROVAL_REQUEST_SCHEMA as A, matchDelegation as B, ApproverRelationsOptions as C, SignApprovalOptions as D, ApprovalSignatureEntry as E, IdempotencyStore as F, pageAccessReviewItems as G, parseApprovalDelegation as H, IdempotentResponse as I, StartAccessReviewInput as J, AccessReviewHolder as K, memoryIdempotencyStore as L, ApprovalView as M, ApprovalsHandlerOptions as N, approvalSignatureClaims as O, approvalsHandler as P, isAccessReviewError as Q, ApprovalDelegationMatch as R, vouchApproval as S, ApprovalSignatureClaims as T, MemoryAccessReviewStore as U, memoryApprovalDelegationSource as V, memoryAccessReviewStore as W, AccessReviewError as X, startAccessReview as Y, AccessReviewErrorCode as Z, resolveApproval as _, approverPermissions as a, storedApprovalToken as b, decodeApprovalCursor as c, pageApprovals as d, accessReviewerEligible as et, cancelApprovals as f, requestApproval as g, readApprovalHeader as h, memoryApprovalStore as i, parseApprovalRequest as j, signApproval as k, encodeApprovalCursor as l, inspectApproval as m, applyApprovalVerdict as n, AccessReviewsHandlerOptions as nt, ApprovalCursorPosition as o, consumeApproval as p, AccessReviewOptions as q, assertApprover as r, accessReviewsHandler as rt, approvalPageSize as s, MemoryApprovalStore as t, decideAccessReviewItem as tt, listAllApprovals as u, resumeDecision as v, approverRelations as w, summarizeSubject as x, resumeFromHeader as y, MatchDelegationOptions as z };