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
@@ -1,6 +1,12 @@
1
- import { Br as SqlFunctionArg, Dr as Membership, E as Policy, G as EntitlementSource, I as SeparationConflict, Ir as OpaqueCondition, Mr as ConditionRef, N as RoleBinding, O as PolicyDelegation, Or as Principal, P as RoleOptions, Sr as CustomRole, V as VocabularyFromInput, Vr as SqlFunctionCondition, Y as LimitStore, Z as MembershipSource, _ as GrantCondition, an as Snapshot, at as SnapshotSource, g as Grant, i as ApprovalOption, in as LocalSnapshotManifest, it as SettingsSource, j as PolicyVocabulary, jt as PermDock, kr as Subject, mn as PolicyScopesInput, nt as RoleSource, p as DefinePolicyOptions, s as AssuranceRequirement, sr as DenialReason, st as TenantSettings, tt as RelationSource, vn as AccessEvent, w as MembershipFixture, wr as Delegation, xn as DecisionEvent } from "./policy-types-sp9P1iIV.js";
2
- import { C as ResourceRelationInput, T as ResourceXTree, b as ResourceOptions, d as Permission, f as PermissionKind, h as ResourceInit, i as DefinePermissionsOptions, n as ActionMeta, p as PermissionTree, t as ActionList, u as InferPermissionTree, v as ResourceMeta, w as ResourceRestricted, x as ResourceParent, y as ResourceNode } from "./permission-types-Dg39z9Kv.js";
3
- import { r as Role } from "./vocabulary-hhEFLFoL.js";
1
+ import { $n as Delegation, Bt as LocalSnapshotManifest, C as MembershipFixture, D as PolicyDelegation, I as SeparationConflict, In as DenialReason, J as EntitlementSource, Kt as AccessEvent, Lt as InstanceHandle, N as RoleBinding, Nn as Decision, P as RoleOptions, Pn as Denial, Qt as DeliveryEvent, R as SupportAccessOptions, Rt as Instant, T as Policy, V as VocabularyFromInput, Vt as Snapshot, W as CustomRoleSource, Xt as DecisionEvent, Y as JwtClaims, Zn as CustomRole, at as SettingsSource, c as BreakGlassOptions, ct as TenantSettings, et as MembershipSource, g as GrantCondition, h as Grant, i as ApprovalOption, ir as Subject, it as RelationSource, j as PolicyVocabulary, k as PolicyOptions, mr as OpaqueCondition, nr as Membership, nt as RelationGroup, ot as SnapshotSource, rn as SinkEvent, rr as Principal, s as AssuranceRequirement, sn as PolicyScopesInput, ur as ConditionRef, ut as TokenSigner, vr as SqlFunctionArg, yr as SqlFunctionCondition } from "./policy-types-DzwivBgR.js";
2
+ import { C as InferPermissionTree, D as PermissionsOptions, E as PermissionTree, F as ResourceParent, L as ResourceRelationInput, M as ResourceMeta, N as ResourceNode, P as ResourceOptions, R as ResourceRestricted, T as PermissionKind, g as ActionMeta, h as ActionList, k as ResourceInit, r as Role, w as Permission, z as ResourceXTree } from "./vocabulary-D6lPdb4Z.js";
3
+ import { i as PermDockOptions, r as PermDock } from "./permdock-D7eeLJER.js";
4
+ import { a as PolicyDocument } from "./hosted-DBDX0M-P.js";
5
+ import { m as ApprovalStore } from "./types-CCpc2Dcv.js";
6
+ import { t as InstanceOptions } from "./instance-options-Omfd793B.js";
7
+ import { n as PermDockWrap } from "./wrap-Bd1Tejur.js";
8
+ import { t as JsonSchemaNode } from "./json-schema-CN_iLFH2.js";
9
+ import { i as CatalogEventData, s as CloudEvent } from "./sink-Bj_lDUDq.js";
4
10
  import { StandardSchemaV1 } from "@standard-schema/spec";
5
11
  //#region src/conditions/refs.d.ts
6
12
  type KnownRefField = "id" | "issuer" | "kind" | "tenant" | "team" | "roles" | "plans" | "memberships" | "assurance" | "binding" | "session";
@@ -74,9 +80,24 @@ declare function emptySnapshot(): Snapshot;
74
80
  declare function requiresApproval(approval: Grant["approval"] | undefined): boolean;
75
81
  //#endregion
76
82
  //#region src/core/policy.d.ts
77
- declare function definePolicy<TUser, TPrincipal extends Principal, const Input extends PermissionTree | PolicyVocabulary, const S extends PolicyScopesInput = PolicyScopesInput>(permissions: Input, options: DefinePolicyOptions<TUser, TPrincipal, S>): Policy<TUser, TPrincipal, VocabularyFromInput<Input>>;
83
+ declare function definePolicy<TUser, TPrincipal extends Principal, const Input extends PermissionTree | PolicyVocabulary, const S extends PolicyScopesInput = PolicyScopesInput>(permissions: Input, options: PolicyOptions<TUser, TPrincipal, S>): Policy<TUser, TPrincipal, VocabularyFromInput<Input>>;
78
84
  declare function separationConflicts(policy: Policy, memberships: readonly MembershipFixture[]): readonly SeparationConflict[];
79
85
  //#endregion
86
+ //#region src/core/permission-registry.d.ts
87
+ declare function getResource<RX = never>(tree: PermissionTree & ResourceXTree<RX>, name: string): ([RX] extends [never] ? ResourceNode : ResourceNode & {
88
+ readonly meta?: ResourceMeta<Readonly<RX>>;
89
+ }) | undefined;
90
+ declare function listPermissions(tree: PermissionTree | Permission): readonly Permission[];
91
+ declare function findPermission(tree: PermissionTree, keyOrScope: string): Permission | undefined;
92
+ /**
93
+ * A permission leaf: string `key`, `scope`, `resource` and `action` plus an
94
+ * object `meta`. `kind` is non-enumerable and does not survive
95
+ * `JSON.stringify`, so a leaf that crossed a serialisation boundary passes
96
+ * without it; when present it must be `instance` or `collection`.
97
+ */
98
+ declare function isPermission(value: unknown): value is Permission;
99
+ declare function mergePermissions<const Trees extends readonly PermissionTree[]>(...trees: Trees): PermissionTree;
100
+ //#endregion
80
101
  //#region src/conditions/opaque.d.ts
81
102
  declare function opaque(input: {
82
103
  readonly sql: string;
@@ -91,14 +112,18 @@ declare function sqlFunction(name: string, options: {
91
112
  //#endregion
92
113
  //#region src/core/memory-sources.d.ts
93
114
  declare function memoryEntitlementSource(entries: Readonly<Record<string, readonly string[]>>): EntitlementSource;
94
- declare function memorySettings(settings: Readonly<Record<string, TenantSettings>>): SettingsSource;
115
+ declare function memorySettingsSource(settings: Readonly<Record<string, TenantSettings>>): SettingsSource;
95
116
  /** Memberships keyed by principal id; `tenant` is not a filter, as for a database source. */
96
117
  declare function memoryMembershipSource(entries: Readonly<Record<string, readonly Membership[]>>): MembershipSource;
97
118
  /** A snapshot held in memory; `set` replaces it and notifies every subscriber. */
98
119
  declare function memorySnapshotSource(initial: Snapshot | string): SnapshotSource & {
99
120
  set(snapshot: Snapshot | string): void;
100
121
  };
101
- declare function memoryRoleSource(customRoles: readonly CustomRole[]): RoleSource;
122
+ declare function memoryCustomRoleSource(customRoles: readonly CustomRole[]): CustomRoleSource;
123
+ //#endregion
124
+ //#region src/core/approval-state.d.ts
125
+ /** The denial detail when an `ApprovalPolicySource` threw or returned an invalid entry. */
126
+ declare const APPROVAL_POLICY_UNAVAILABLE = "approval-policy-unavailable";
102
127
  //#endregion
103
128
  //#region src/core/memberships.d.ts
104
129
  /**
@@ -160,19 +185,13 @@ type StripeEntitlementsClient = {
160
185
  * tenant to its customer id; no tenant or no customer means no entitlements.
161
186
  * Pass it as `entitlements`, and grant with `plan('<lookup_key>')`.
162
187
  */
163
- declare function fromStripeEntitlements(options: {
188
+ declare function stripeEntitlementSource(options: {
164
189
  readonly stripe: StripeEntitlementsClient;
165
190
  readonly customer: (tenant: string, principal: {
166
191
  readonly id: string;
167
192
  }) => string | undefined | PromiseLike<string | undefined>;
168
193
  }): EntitlementSource;
169
194
  //#endregion
170
- //#region src/core/limits.d.ts
171
- declare function memoryLimitStore(): LimitStore & {
172
- /** Live counters, for tests and diagnostics. */
173
- size(): number;
174
- };
175
- //#endregion
176
195
  //#region src/core/memory-relations.d.ts
177
196
  type MemoryEdge = {
178
197
  /** The object's id. */
@@ -181,7 +200,7 @@ type MemoryEdge = {
181
200
  readonly startsAt?: number;
182
201
  readonly expiresAt?: number;
183
202
  };
184
- type MemoryRelationsData = {
203
+ type MemoryRelationSourceData = {
185
204
  /** Rows per resource: parent pointers, links, restricted flags and relation columns are read from them. */
186
205
  readonly rows?: Readonly<Record<string, readonly Readonly<Record<string, unknown>>[]>>;
187
206
  /** Edge-table rows per resource and relation. */
@@ -197,7 +216,129 @@ type MemoryRelationsData = {
197
216
  * An in-process `RelationSource` over plain rows and edges, read against the
198
217
  * resource definitions in `permissions`. For tests, fixtures and small apps.
199
218
  */
200
- declare function memoryRelations(permissions: PermissionTree, data?: MemoryRelationsData): RelationSource;
219
+ declare function memoryRelationSource(permissions: PermissionTree, data?: MemoryRelationSourceData): RelationSource;
220
+ //#endregion
221
+ //#region src/core/who-can.d.ts
222
+ /** One way a principal holds a permission on an object. */
223
+ type HoldingVia = {
224
+ readonly kind: "role";
225
+ readonly role: string;
226
+ readonly membership: Membership;
227
+ } | {
228
+ readonly kind: "relation";
229
+ readonly resource: string;
230
+ readonly relation: string;
231
+ /** The instance the relation is held on: the object or one of its ancestors. */
232
+ readonly id: string;
233
+ } | {
234
+ readonly kind: "share";
235
+ readonly resource: string;
236
+ readonly relation: string;
237
+ readonly id: string;
238
+ readonly expiresAt?: number;
239
+ /** The group the share names, when the principal holds it as one of its members. */
240
+ readonly group?: RelationGroup;
241
+ };
242
+ type Holder = {
243
+ readonly principal: {
244
+ readonly id: string;
245
+ };
246
+ readonly via: readonly HoldingVia[];
247
+ };
248
+ /**
249
+ * Who holds a permission on one object, for share dialogs and access
250
+ * reviews. It lists and never grants. `complete: false` means some grantee
251
+ * could not be enumerated (a global role, a plan, a source without `list`,
252
+ * an unavailable relation): holders may be missing, so check with `decide`.
253
+ */
254
+ type WhoCan = {
255
+ readonly permission: string;
256
+ readonly holders: readonly Holder[];
257
+ readonly complete: boolean;
258
+ };
259
+ /**
260
+ * Who holds `permission` on `resource` for the instance's policy and how
261
+ * (role, relation or share), from `MembershipSource.list` and
262
+ * `RelationSource.related`. It lists and never grants; `complete: false`
263
+ * means some holders could not be listed. An instance built from a
264
+ * snapshot answers an empty, incomplete list.
265
+ */
266
+ declare function whoCan(permdock: InstanceHandle, permission: Permission<string, unknown, "instance">, resource: unknown): Promise<WhoCan>;
267
+ //#endregion
268
+ //#region src/core/policy-sign.d.ts
269
+ type SignPolicyDocumentOptions = {
270
+ /** `aud`: the environment URL `cloud().policies` checks it against. */
271
+ readonly audience: string | readonly string[];
272
+ /** `exp`, a NumericDate; the signer's default (one hour after `iat`) when absent. */
273
+ readonly expiresAt?: number;
274
+ };
275
+ /**
276
+ * Signs `document` as a `vnd.permdock.policy+jwt`: the `policy` claim holds
277
+ * every field but `id` and `issuedAt`, which become `jti` and `iat`, so
278
+ * `policyDocumentFromClaims` reads it back. `iss` is the signer's own.
279
+ */
280
+ declare function signPolicyDocument(document: PolicyDocument, signer: TokenSigner, options: SignPolicyDocumentOptions): Promise<string>;
281
+ //#endregion
282
+ //#region src/core/snapshot-sign.d.ts
283
+ type SignSnapshotOptions = {
284
+ /** `aud`; a signer with no default audience refuses to sign without one. */
285
+ readonly audience?: string | readonly string[];
286
+ };
287
+ /**
288
+ * Signs `snapshot` as a `vnd.permdock.snapshot+jwt`. `issuedAt` and
289
+ * `expiresAt` become `iat` and `exp` and leave the `snapshot` claim, so the
290
+ * registered claims are the only times a verifier reads.
291
+ */
292
+ declare function signSnapshot(snapshot: Snapshot, signer: TokenSigner, options?: SignSnapshotOptions): Promise<string>;
293
+ /**
294
+ * The snapshot a verified `vnd.permdock.snapshot+jwt` carries, parsed as
295
+ * `parseSnapshot` parses it, with `issuedAt` and `expiresAt` from `iat` and
296
+ * `exp`. `null` when the claim is missing or not a valid snapshot.
297
+ */
298
+ declare function snapshotFromClaims(claims: JwtClaims): Snapshot | null;
299
+ //#endregion
300
+ //#region src/core/delivery-event.d.ts
301
+ declare function deliveryEvent(input: Omit<DeliveryEvent, "type" | "at"> & {
302
+ /** An RFC 3339 instant; defaults to now. */
303
+ readonly at?: string;
304
+ }): DeliveryEvent;
305
+ //#endregion
306
+ //#region src/core/arazzo.d.ts
307
+ type ArazzoSimulateInput = {
308
+ readonly arazzo: unknown;
309
+ readonly openapi: unknown;
310
+ readonly workflowId?: string;
311
+ readonly permissions?: PermissionTree;
312
+ readonly inputs?: Readonly<Record<string, unknown>>;
313
+ };
314
+ type ArazzoStepResult = {
315
+ readonly stepId: string;
316
+ /** The nested workflow that owns the step, when it is not the plan's workflow. */
317
+ readonly workflowId?: string;
318
+ readonly operationId?: string;
319
+ readonly permissions: readonly Permission[];
320
+ readonly decision: Decision;
321
+ readonly provisional?: true;
322
+ };
323
+ type ArazzoPlan = {
324
+ readonly workflowId: string;
325
+ readonly outcome: Decision["outcome"];
326
+ readonly steps: readonly ArazzoStepResult[];
327
+ };
328
+ type ArazzoFinding = {
329
+ readonly stepId: string;
330
+ readonly workflowId: string;
331
+ readonly reason: "undocumented" | "unsupported" | "validation" | "unknown-key";
332
+ readonly detail: string;
333
+ };
334
+ declare function arazzoFindings(input: ArazzoSimulateInput, tree: PermissionTree | undefined): readonly ArazzoFinding[];
335
+ /**
336
+ * Walks an Arazzo workflow against `permdock`: each step's operation is
337
+ * decided as `permdock.simulate` would, and a server instance emits one
338
+ * simulate event for the whole plan. Works on an instance built from a
339
+ * snapshot too.
340
+ */
341
+ declare function simulateArazzo(permdock: PermDock, input: ArazzoSimulateInput): ArazzoPlan;
201
342
  //#endregion
202
343
  //#region src/core/local-manifest.d.ts
203
344
  /**
@@ -207,6 +348,71 @@ declare function memoryRelations(permissions: PermissionTree, data?: MemoryRelat
207
348
  */
208
349
  declare function localSnapshotManifest(policy: Policy): LocalSnapshotManifest;
209
350
  //#endregion
351
+ //#region src/core/app.d.ts
352
+ /**
353
+ * How strict `defineApp` is about the services the policy needs. `dev`
354
+ * fills in in-process defaults (a memory approval store and a memory limit
355
+ * store) so a new app runs before any infrastructure exists. `prod` throws at startup when a grant needs a
356
+ * service the app does not configure, instead of denying at run time.
357
+ */
358
+ type AppProfile = "dev" | "prod";
359
+ /**
360
+ * Everything an app wires once and every adapter reads: the data sources,
361
+ * the opt-in features and the services. An adapter's own options win over
362
+ * these, key by key.
363
+ */
364
+ type AppOptions = InstanceOptions & Pick<PermDockOptions, "settings"> & {
365
+ /** Where approval requests open and resume, for every adapter. */
366
+ readonly store?: ApprovalStore;
367
+ readonly profile?: AppProfile;
368
+ };
369
+ //#endregion
370
+ //#region src/app/define-app.d.ts
371
+ /**
372
+ * Binds the app's sources, features and services to `policy`. The result
373
+ * is a policy: pass it wherever a policy goes (`createPermDock`, every
374
+ * adapter, the CLI) and each picks up the app definition, with its own
375
+ * options taking precedence. The profile defaults to `prod`.
376
+ */
377
+ declare function defineApp<TUser, TPrincipal extends Principal, V extends PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, options?: AppOptions): Policy<TUser, TPrincipal, V>;
378
+ //#endregion
379
+ //#region src/core/shadow.d.ts
380
+ /** The application's existing check, asked the same question PermDock is. */
381
+ type LegacyCheck = (input: {
382
+ readonly permission: Permission;
383
+ readonly data: unknown;
384
+ readonly subject: Subject;
385
+ }) => boolean;
386
+ /** One check where the legacy system and PermDock disagree. */
387
+ type ShadowMismatch = {
388
+ readonly permission: string;
389
+ readonly principal: string | null;
390
+ /** What the legacy check answered; `false` when it threw. */
391
+ readonly legacy: boolean;
392
+ readonly permdock: Decision["outcome"];
393
+ /** `true` when PermDock's answer was the one returned. */
394
+ readonly enforced: boolean;
395
+ };
396
+ type ShadowOptions = {
397
+ readonly legacy: LegacyCheck;
398
+ /**
399
+ * Permissions PermDock decides; every other check returns the legacy
400
+ * answer. `"all"` once every mismatch is resolved; default none.
401
+ */
402
+ readonly enforce?: readonly Permission[] | "all";
403
+ /** Called for each disagreement; a throw here is ignored. */
404
+ readonly onMismatch?: (mismatch: ShadowMismatch) => void;
405
+ };
406
+ /**
407
+ * Runs PermDock beside the application's existing checks while adopting
408
+ * it. Each `can`, `decide`, `decideEach`, `filter` and `assert` asks both;
409
+ * the legacy answer is returned unless the permission is in `enforce`, and
410
+ * every disagreement reaches `onMismatch`. Promote permissions one by one
411
+ * as their mismatches are resolved, then remove the wrap. Pass it as an
412
+ * adapter's `wrap` option, or call it on a core instance.
413
+ */
414
+ declare function shadowMode(options: ShadowOptions): PermDockWrap;
415
+ //#endregion
210
416
  //#region src/core/may-access.d.ts
211
417
  /**
212
418
  * An optimistic routing hint for a proxy or middleware, never a decision.
@@ -219,37 +425,11 @@ declare function mayAccess(policy: Policy, user: unknown, permission: Permission
219
425
  readonly tenant?: string;
220
426
  }): boolean;
221
427
  //#endregion
222
- //#region src/core/may-use.d.ts
223
- /**
224
- * Whether `permission` could be granted to this instance's subject for some
225
- * row: the grants its snapshot carries for the active tenant, minus an
226
- * unconditional deny, within its delegation. A listing hint for tools and
227
- * skills, never a decision; the call itself is decided in full.
228
- */
229
- declare function mayUse(permdock: PermDock, permission: Permission): boolean;
230
- type PermittedIdsOptions = {
231
- readonly within?: string;
232
- readonly conditioned?: boolean;
233
- };
234
- /**
235
- * The instances of `scope` in which the subject holds `permission`, from its
236
- * live memberships of exactly that scope, within its delegation: by default
237
- * those with an allow that carries no row condition (`where`, `check`, a
238
- * validity window or a non-portable test; a `fields` limit is not a row
239
- * condition), minus the instances any deny of the permission reaches. The
240
- * in-process mirror of the SQL `permitted_<scope>_ids_by_permission`. With
241
- * `conditioned: true` it also lists the instances where a conditioned allow
242
- * applies, minus only unconditional denies, as
243
- * `permitted_<scope>_ids_by_permission(p_permission, true)` does. A listing,
244
- * never a decision: a row's own check still runs `can`.
245
- */
246
- declare function permittedIds(permdock: PermDock, permission: Permission, scope: string, options?: PermittedIdsOptions): readonly string[];
247
- //#endregion
248
428
  //#region src/core/custom-role-source.d.ts
249
429
  /** Reads custom roles from the application's store, as `customRoleSource` takes them. */
250
430
  type CustomRoleReader = {
251
431
  /** Every custom role of `tenant`, whether or not anyone in the request holds it. */
252
- rolesOf(tenant: string): CustomRole[] | Promise<CustomRole[]>;
432
+ rolesFor(tenant: string): CustomRole[] | Promise<CustomRole[]>;
253
433
  assignable?(tenant: string): string[] | Promise<string[]>;
254
434
  /** Platform custom roles (`scope: 'global'`). */
255
435
  globalRoles?(): CustomRole[] | Promise<CustomRole[]>;
@@ -263,12 +443,12 @@ type CustomRoleSourceOptions = {
263
443
  readonly policy: Policy;
264
444
  };
265
445
  /**
266
- * A `RoleSource` over a reader that returns every custom role of a tenant.
446
+ * A `CustomRoleSource` over a reader that returns every custom role of a tenant.
267
447
  * It keeps only the roles of the requested tenant. With `read: 'held'` it
268
448
  * skips a tenant's read, and `globalRoles`, when the subject holds only
269
449
  * declared roles there.
270
450
  */
271
- declare function customRoleSource(reader: CustomRoleReader, options?: CustomRoleSourceOptions): RoleSource;
451
+ declare function customRoleSource(reader: CustomRoleReader, options?: CustomRoleSourceOptions): CustomRoleSource;
272
452
  //#endregion
273
453
  //#region src/core/instance-snapshot.d.ts
274
454
  type SnapshotInclude = readonly (Permission | {
@@ -283,14 +463,14 @@ type SnapshotForOptions = {
283
463
  readonly memberships?: readonly Membership[];
284
464
  /** The tenant's custom roles, typically from a shared, tagged cache. */
285
465
  readonly customRoles?: readonly CustomRole[];
286
- /** Per tenant, the role names `RoleSource.assignable` returns; narrows `assignable`. */
466
+ /** Per tenant, the role names `CustomRoleSource.assignable` returns; narrows `assignable`. */
287
467
  readonly assignable?: Readonly<Record<string, readonly string[]>>;
288
468
  /** Plans of the active tenant; replaces `principal.plans`. */
289
469
  readonly plans?: readonly string[];
290
470
  readonly include?: SnapshotInclude;
291
471
  readonly tenants?: "all";
292
- /** Epoch seconds for `issuedAt` and membership expiry. Defaults to the clock. */
293
- readonly now?: number;
472
+ /** The instant for `issuedAt` and membership expiry. Defaults to the clock. */
473
+ readonly now?: Instant;
294
474
  };
295
475
  /**
296
476
  * Builds the serializable access snapshot for a subject without a request,
@@ -301,22 +481,7 @@ type SnapshotForOptions = {
301
481
  declare function snapshotFor<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, user: TUser | Subject | null, options?: SnapshotForOptions): Snapshot;
302
482
  //#endregion
303
483
  //#region src/core/permissions.d.ts
304
- declare function definePermissions<const Input, PX = never, RX = never>(input: Input, options?: DefinePermissionsOptions<PX, RX>): InferPermissionTree<Input, "", PX> & ResourceXTree<RX>;
305
- //#endregion
306
- //#region src/core/permission-registry.d.ts
307
- declare function getResource<RX = never>(tree: PermissionTree & ResourceXTree<RX>, name: string): ([RX] extends [never] ? ResourceNode : ResourceNode & {
308
- readonly meta?: ResourceMeta<Readonly<RX>>;
309
- }) | undefined;
310
- declare function listPermissions(tree: PermissionTree | Permission): readonly Permission[];
311
- declare function findPermission(tree: PermissionTree, keyOrScope: string): Permission | undefined;
312
- /**
313
- * A permission leaf: string `key`, `scope`, `resource` and `action` plus an
314
- * object `meta`. `kind` is non-enumerable and does not survive
315
- * `JSON.stringify`, so a leaf that crossed a serialisation boundary passes
316
- * without it; when present it must be `instance` or `collection`.
317
- */
318
- declare function isPermission(value: unknown): value is Permission;
319
- declare function mergePermissions<const Trees extends readonly PermissionTree[]>(...trees: Trees): PermissionTree;
484
+ declare function definePermissions<const Input, PX = never, RX = never>(input: Input, options?: PermissionsOptions<PX, RX>): InferPermissionTree<Input, "", PX> & ResourceXTree<RX>;
320
485
  //#endregion
321
486
  //#region src/core/permission-leaf.d.ts
322
487
  /**
@@ -405,13 +570,193 @@ declare function deny<T, K extends PermissionKind = PermissionKind>(permission:
405
570
  //#region src/core/approval-normalize.d.ts
406
571
  declare function normalizeApproval(approval: ApprovalOption | undefined, permission?: string): Grant["approval"];
407
572
  //#endregion
408
- //#region src/core/duration.d.ts
409
- declare function parseDuration(input: unknown): number | undefined;
573
+ //#region src/core/elevated.d.ts
574
+ /**
575
+ * The only deny override: a break-glass grant overrides deny grants whose
576
+ * `name` it lists, and nothing else. It is an allow that stays non-portable
577
+ * (RLS never compiles it) and grants only once its `requires` are met.
578
+ */
579
+ declare function breakGlass<T>(permission: Permission<string, T> | readonly Permission<string, T>[], options?: BreakGlassOptions): Omit<Grant, "role" | "scope"> | Omit<Grant, "role" | "scope">[];
580
+ /**
581
+ * Support access with tenant consent: a role a vendor holds only through a
582
+ * consented, time-bound `via: 'support'` membership. `actorRequired` denies
583
+ * every decision under it without an `act`; `forbid` compiles to deny grants
584
+ * scoped to `via: 'support'`.
585
+ */
586
+ declare function supportAccess<const S extends string>(options: SupportAccessOptions<S> & {
587
+ readonly on: S;
588
+ }): RoleBinding<S>;
589
+ /** Support access held in the `tenant` scope. */
590
+ declare function supportAccess(options: SupportAccessOptions<never>): RoleBinding<"tenant">;
591
+ type ActivateInput = {
592
+ readonly role: string | Role;
593
+ /** The scope the activation applies in (a declared name or the `tenant` / `team` alias). */
594
+ readonly scope: string;
595
+ readonly id: string;
596
+ /** Ancestor scope ids, keyed by scope name, for a nested-scope activation. */
597
+ readonly within?: Readonly<Record<string, string>>;
598
+ /** Seconds the elevation lasts; capped at the role's `maxDuration`. */
599
+ readonly duration?: number;
600
+ readonly reason?: string;
601
+ };
602
+ /**
603
+ * Requests a just-in-time role activation. It never writes: a granted
604
+ * decision carries the elevated membership under `elevation` for the app to
605
+ * write. `approval-required` comes back first when the role's `activation`
606
+ * sets `approval`. Fail-closed: an unknown role, an ineligible subject, a
607
+ * missing justification or stale authentication all deny.
608
+ */
609
+ /**
610
+ * Requests a just-in-time activation of an eligible role for the subject of
611
+ * `permdock`. It never writes: a granted decision carries the elevated
612
+ * membership under `elevation` for the app to write, and
613
+ * `approval-required` comes back first when the role's `activation` sets
614
+ * `approval`. An instance built from a snapshot denies with `unsupported`.
615
+ */
616
+ declare function activate(permdock: InstanceHandle, input: ActivateInput): Decision;
617
+ //#endregion
618
+ //#region src/core/ownership.d.ts
619
+ /** Who a role change is about: their principal id and their membership in the scope instance. */
620
+ type RoleChangeTarget = {
621
+ readonly id: string;
622
+ /** The kind of the target's membership in the instance (`staff`, `contact`, ...). */
623
+ readonly via?: string;
624
+ /** The roles the target holds in the instance now. */
625
+ readonly roles?: readonly string[];
626
+ /** `idp` when the identity provider owns the target's membership: the application cannot change it. */
627
+ readonly managedBy?: "idp";
628
+ };
629
+ type RoleChangeBase = {
630
+ readonly kind: "assign" | "revoke" | "transfer";
631
+ readonly role: string | Role;
632
+ /** Ids of the instance's ancestor scopes; a holder there may assign here. */
633
+ readonly within?: Readonly<Record<string, string>>;
634
+ readonly target: RoleChangeTarget;
635
+ /**
636
+ * How many principals hold `role` in the instance now, from the
637
+ * application's store. Without it a role with `min`, `max` or
638
+ * `transferOnly` is denied.
639
+ */
640
+ readonly holders?: number;
641
+ };
642
+ /**
643
+ * A role held at a named scope instance (`scope` is a declared name or alias
644
+ * and `id` the instance), or a global role: `scope: 'global'` with no `id`.
645
+ * A global change has no tenant, so `within` and `holders` do not apply to it.
646
+ */
647
+ type RoleChange = RoleChangeBase & ({
648
+ /** The scope the role is held at (a declared name or alias). */
649
+ readonly scope: string;
650
+ /** The scope instance. */
651
+ readonly id: string;
652
+ } | {
653
+ readonly scope: "global";
654
+ readonly id?: undefined;
655
+ });
656
+ /**
657
+ * `granted` names the role that authorised the change (`null` when a
658
+ * `meta.manageRoles` holder or the declared-role ceiling did); `denied` lists
659
+ * every rule the change breaks.
660
+ */
661
+ type RoleChangeDecision = {
662
+ readonly outcome: "granted";
663
+ readonly change: RoleChange;
664
+ readonly role: string | null;
665
+ } | {
666
+ readonly outcome: "denied";
667
+ readonly change: RoleChange;
668
+ readonly denials: readonly Denial[];
669
+ };
670
+ type RoleChangeOptions = {
671
+ /**
672
+ * `true` when the application loaded `change.within` from its own store
673
+ * (the instance's stored parent), not from the request. Without it, a
674
+ * nested instance's tenant comes only from a live membership the actor
675
+ * holds on that instance or under it.
676
+ */
677
+ readonly trusted?: boolean;
678
+ };
679
+ /**
680
+ * The one rule check behind `permdock.decideRoleChange`. The actor is always
681
+ * the instance's own principal; nothing in `change` can stand in for it.
682
+ */
683
+ /**
684
+ * Whether the subject of `permdock` may assign, revoke or transfer a role
685
+ * in one scope instance: `assigns`, the ceiling, `for`, `exclusiveWith`,
686
+ * `min`, `max` and `transferOnly`. It never writes; the application does,
687
+ * and generated RLS triggers re-check the holder counts at commit. A nested
688
+ * instance's tenant comes from a live membership the subject holds on it,
689
+ * or from `change.within` only with `{ trusted: true }`; otherwise
690
+ * `no-membership`. An instance built from a snapshot denies with
691
+ * `unsupported`.
692
+ */
693
+ declare function decideRoleChange(permdock: InstanceHandle, change: RoleChange, options?: RoleChangeOptions): RoleChangeDecision;
694
+ //#endregion
695
+ //#region src/core/parse-sink-events.d.ts
696
+ /**
697
+ * Validates one untrusted sink event against its family's schema and returns
698
+ * a frozen copy, or `null` for anything else. Never throws.
699
+ */
700
+ declare function parseSinkEvent(value: unknown): SinkEvent | null;
701
+ /**
702
+ * Validates an untrusted list of sink events, such as a request body a sink
703
+ * receiver read. Each event that fails its schema is dropped, and a value
704
+ * that is not an array yields no events. Never throws.
705
+ */
706
+ declare function parseSinkEvents(value: unknown): readonly SinkEvent[];
707
+ /** Validates the data of a `com.permdock.catalog.*` CloudEvent; `null` when it does not match. */
708
+ declare function parseCatalogEventData(value: unknown): CatalogEventData | null;
709
+ /**
710
+ * Validates one CloudEvent against the closed type list, its `dataschema` and
711
+ * its data shape; `null` for anything else, a reserved type included. Never
712
+ * throws.
713
+ */
714
+ declare function parseCloudEvent(value: unknown): CloudEvent | null;
715
+ /**
716
+ * Validates a CloudEvents JSON batch (`application/cloudevents-batch+json`):
717
+ * `null` unless the value is an array and every event in it is valid.
718
+ */
719
+ declare function parseCloudEventBatch(value: unknown): readonly CloudEvent[] | null;
720
+ //#endregion
721
+ //#region src/core/event-schemas.d.ts
722
+ /** The URL each event family's schema is published at, and its CloudEvents `dataschema`. */
723
+ declare const EVENT_SCHEMA_IDS: {
724
+ readonly decision: "https://permdock.com/schemas/decision-event-v1.json";
725
+ readonly directory: "https://permdock.com/schemas/directory-event-v1.json";
726
+ readonly membership: "https://permdock.com/schemas/membership-event-v1.json";
727
+ readonly credential: "https://permdock.com/schemas/credential-event-v1.json";
728
+ readonly access: "https://permdock.com/schemas/access-event-v1.json";
729
+ readonly automation: "https://permdock.com/schemas/automation-event-v1.json";
730
+ readonly catalog: "https://permdock.com/schemas/catalog-event-v1.json";
731
+ readonly delivery: "https://permdock.com/schemas/delivery-event-v1.json";
732
+ };
733
+ declare const DECISION_EVENT_SCHEMA: JsonSchemaNode;
734
+ declare const DIRECTORY_EVENT_SCHEMA: JsonSchemaNode;
735
+ declare const MEMBERSHIP_EVENT_SCHEMA: JsonSchemaNode;
736
+ declare const CREDENTIAL_EVENT_SCHEMA: JsonSchemaNode;
737
+ declare const ACCESS_EVENT_SCHEMA: JsonSchemaNode;
738
+ declare const AUTOMATION_EVENT_SCHEMA: JsonSchemaNode;
739
+ declare const CATALOG_EVENT_SCHEMA: JsonSchemaNode;
740
+ declare const DELIVERY_EVENT_SCHEMA: JsonSchemaNode;
741
+ /** Every sink event family's schema, keyed by the event's `type`. */
742
+ declare const SINK_EVENT_SCHEMAS: {
743
+ readonly decision: JsonSchemaNode;
744
+ readonly directory: JsonSchemaNode;
745
+ readonly membership: JsonSchemaNode;
746
+ readonly credential: JsonSchemaNode;
747
+ readonly access: JsonSchemaNode;
748
+ readonly automation: JsonSchemaNode;
749
+ readonly delivery: JsonSchemaNode;
750
+ };
410
751
  //#endregion
411
752
  //#region src/core/ocsf.d.ts
412
753
  /** The OCSF schema version `toOcsf` emits. */
413
- declare const OCSF_VERSION = "1.3.0";
414
- /** An OCSF Authorize Session (class 3003, category Identity and Access Management) event. */
754
+ declare const OCSF_VERSION = "1.9.0";
755
+ /**
756
+ * An OCSF Authorize Session (class 3003, category Identity and Access Management) event.
757
+ * API Activity (6003) would fit a per-request decision, but it requires `api` and
758
+ * `src_endpoint`, which a decision event does not carry.
759
+ */
415
760
  type OcsfAuthorizeSession = {
416
761
  readonly class_uid: 3003;
417
762
  readonly category_uid: 3;
@@ -420,7 +765,8 @@ type OcsfAuthorizeSession = {
420
765
  readonly severity_id: 1 | 4;
421
766
  readonly time: number;
422
767
  readonly status_id: 0 | 1 | 2 | 99;
423
- readonly status: "Unknown" | "Success" | "Failure" | "Other";
768
+ /** OCSF requires a source label for status 99: `Approval Required`. */
769
+ readonly status: "Unknown" | "Success" | "Failure" | "Approval Required";
424
770
  readonly status_detail?: string;
425
771
  readonly message: string;
426
772
  readonly privileges: readonly string[];
@@ -452,7 +798,7 @@ type OcsfAuthorizeSession = {
452
798
  readonly outcome: DecisionEvent["outcome"];
453
799
  readonly scope: string;
454
800
  readonly resource: DecisionEvent["resource"];
455
- readonly source: DecisionEvent["source"];
801
+ readonly call: DecisionEvent["call"];
456
802
  readonly phase?: DecisionEvent["phase"];
457
803
  readonly role?: string | null;
458
804
  /** The matched grant's declared `name`. */
@@ -466,19 +812,23 @@ type OcsfAuthorizeSession = {
466
812
  readonly reason?: string;
467
813
  };
468
814
  };
469
- /** Projects a decision or approval event onto OCSF Authorize Session; the event itself is unchanged. */
470
- declare function toOcsf(event: DecisionEvent): OcsfAuthorizeSession;
471
815
  /**
472
- * An OCSF Account Change (class 3001) event for a support-access lifecycle
816
+ * Projects a decision or approval event onto OCSF Authorize Session; the event itself is unchanged.
817
+ * An event whose `at` does not parse has no OCSF `time` and projects to `undefined`.
818
+ */
819
+ declare function toOcsf(event: DecisionEvent): OcsfAuthorizeSession | undefined;
820
+ /**
821
+ * An OCSF User Management (class 3007) event for a support-access lifecycle
473
822
  * event: `started` enables the session, `ended` and `revoked` disable it.
474
823
  * Support access is high severity, so a SIEM can alert on vendor access.
824
+ * OCSF 1.9.0 deprecates Account Change (3001) in favour of this class.
475
825
  */
476
- type OcsfAccountChange = {
477
- readonly class_uid: 3001;
826
+ type OcsfUserManagement = {
827
+ readonly class_uid: 3007;
478
828
  readonly category_uid: 3;
479
- /** 2 Enable for `started`, 5 Disable for `ended` and `revoked`. */
480
- readonly activity_id: 2 | 5;
481
- readonly type_uid: 300102 | 300105;
829
+ /** 4 Enable for `started`, 5 Disable for `ended` and `revoked`. */
830
+ readonly activity_id: 4 | 5;
831
+ readonly type_uid: 300704 | 300705;
482
832
  readonly severity_id: 4;
483
833
  readonly time: number;
484
834
  readonly message: string;
@@ -509,7 +859,8 @@ type OcsfAccountChange = {
509
859
  readonly reason?: string;
510
860
  };
511
861
  };
512
- declare function accessToOcsf(event: AccessEvent): OcsfAccountChange;
862
+ /** An access event whose `at` does not parse projects to `undefined`. */
863
+ declare function accessToOcsf(event: AccessEvent): OcsfUserManagement | undefined;
513
864
  //#endregion
514
865
  //#region src/core/csv.d.ts
515
866
  /** The CSV export columns, in order; the header row of every CSV file. */
@@ -522,8 +873,7 @@ declare function toCsvRow(event: DecisionEvent): string;
522
873
  //#endregion
523
874
  //#region src/core/catalog-fingerprint.d.ts
524
875
  /**
525
- * The catalog v1 fingerprint: base64url SHA-256 of canonical JSON (keys
526
- * sorted, no whitespace) without `generatedAt`, `generator`, `fingerprint`
876
+ * The catalog v1 fingerprint: the `sha-256:` digest of its RFC 8785 JSON without `generatedAt`, `generator`, `fingerprint`
527
877
  * and every `permissions[].usages`, so neither the CLI version, the clock nor
528
878
  * call sites change it.
529
879
  */
@@ -547,4 +897,4 @@ declare function coveredByDelegation(permission: DelegatedPermission, delegation
547
897
  */
548
898
  declare function delegatedPermissions(delegations: readonly PolicyDelegation[] | undefined, subject: Subject, heldRoles: ReadonlySet<string>, now: number): ReadonlySet<string> | undefined;
549
899
  //#endregion
550
- export { sqlFunction as $, CustomRoleReader as A, memoryRelations as B, getResource as C, definePermissions as D, mergePermissions as E, permittedIds as F, composeMemberships as G, StripeEntitlementsClient as H, mayAccess as I, memoryEntitlementSource as J, countHolders as K, localSnapshotManifest as L, customRoleSource as M, PermittedIdsOptions as N, SnapshotForOptions as O, mayUse as P, memorySnapshotSource as Q, MemoryEdge as R, findPermission as S, listPermissions as T, fromStripeEntitlements as U, memoryLimitStore as V, claimsFirst as W, memoryRoleSource as X, memoryMembershipSource as Y, memorySettings as Z, crud as _, toCsvRow as a, fromSnapshot as at, formerKeys as b, OcsfAuthorizeSession as c, CustomRoleDropReason as ct, parseDuration as d, ResolvedCustomRole as dt, opaque as et, normalizeApproval as f, customRoleClaim as ft, role as g, principal as gt, normalizeAssurance as h, context as ht, CSV_COLUMNS as i, emptySnapshot as it, CustomRoleSourceOptions as j, snapshotFor as k, accessToOcsf as l, CustomRoleRename as lt, deny as m, validateCustomRole as mt, delegatedPermissions as n, separationConflicts as nt, OCSF_VERSION as o, parseSnapshot as ot, allow as p, resolveCustomRole as pt, isExternallyManaged as q, catalogFingerprint as r, requiresApproval as rt, OcsfAccountChange as s, CustomRoleDrop as st, coveredByDelegation as t, definePolicy as tt, toOcsf as u, CustomRoleValidation as ut, readable as v, isPermission as w, resource as x, writable as y, MemoryRelationsData as z };
900
+ export { ShadowMismatch as $, CustomRoleValidation as $t, decideRoleChange as A, isExternallyManaged as At, crud as B, getResource as Bt, parseCloudEventBatch as C, MemoryRelationSourceData as Ct, RoleChangeDecision as D, claimsFirst as Dt, RoleChange as E, stripeEntitlementSource as Et, normalizeApproval as F, memorySettingsSource as Ft, definePermissions as G, separationConflicts as Gt, writable as H, listPermissions as Ht, allow as I, memorySnapshotSource as It, CustomRoleReader as J, fromSnapshot as Jt, SnapshotForOptions as K, requiresApproval as Kt, deny as L, sqlFunction as Lt, activate as M, memoryCustomRoleSource as Mt, breakGlass as N, memoryEntitlementSource as Nt, RoleChangeOptions as O, composeMemberships as Ot, supportAccess as P, memoryMembershipSource as Pt, LegacyCheck as Q, CustomRoleRename as Qt, normalizeAssurance as R, opaque as Rt, parseCloudEvent as S, MemoryEdge as St, parseSinkEvents as T, StripeEntitlementsClient as Tt, formerKeys as U, mergePermissions as Ut, readable as V, isPermission as Vt, resource as W, definePolicy as Wt, customRoleSource as X, CustomRoleDrop as Xt, CustomRoleSourceOptions as Y, parseSnapshot as Yt, mayAccess as Z, CustomRoleDropReason as Zt, DIRECTORY_EVENT_SCHEMA as _, signPolicyDocument as _t, toCsvRow as a, principal as an, localSnapshotManifest as at, SINK_EVENT_SCHEMAS as b, WhoCan as bt, OcsfUserManagement as c, ArazzoSimulateInput as ct, ACCESS_EVENT_SCHEMA as d, simulateArazzo as dt, ResolvedCustomRole as en, ShadowOptions as et, AUTOMATION_EVENT_SCHEMA as f, deliveryEvent as ft, DELIVERY_EVENT_SCHEMA as g, SignPolicyDocumentOptions as gt, DECISION_EVENT_SCHEMA as h, snapshotFromClaims as ht, CSV_COLUMNS as i, context as in, AppProfile as it, ActivateInput as j, APPROVAL_POLICY_UNAVAILABLE as jt, RoleChangeTarget as k, countHolders as kt, accessToOcsf as l, ArazzoStepResult as lt, CREDENTIAL_EVENT_SCHEMA as m, signSnapshot as mt, delegatedPermissions as n, resolveCustomRole as nn, defineApp as nt, OCSF_VERSION as o, ArazzoFinding as ot, CATALOG_EVENT_SCHEMA as p, SignSnapshotOptions as pt, snapshotFor as q, emptySnapshot as qt, catalogFingerprint as r, validateCustomRole as rn, AppOptions as rt, OcsfAuthorizeSession as s, ArazzoPlan as st, coveredByDelegation as t, customRoleClaim as tn, shadowMode as tt, toOcsf as u, arazzoFindings as ut, EVENT_SCHEMA_IDS as v, Holder as vt, parseSinkEvent as w, memoryRelationSource as wt, parseCatalogEventData as x, whoCan as xt, MEMBERSHIP_EVENT_SCHEMA as y, HoldingVia as yt, role as z, findPermission as zt };