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,4 +1,4 @@
1
- import { C as SsfPermDock, D as SsfSubjectMapper, E as SsfSubject, S as SsfOnEvent, T as SsfReceiver, _ as SetSubject, b as SsfEventInput, f as CaepEventName, g as ReplayStore, h as PollResult, m as PollOptions, p as PollHandle, v as SsfAuditEvent, w as SsfPermDockOptions, x as SsfEventListener, y as SsfEventHandler } from "../types-C0dee0Qf.js";
2
- import { t as memoryReplayStore } from "../replay-COpmZUfx.js";
3
- import { t as createPermDock } from "../index-DgM7w96K.js";
4
- export { type CaepEventName, type PollHandle, type PollOptions, type PollResult, type ReplayStore, type SetSubject, type SsfAuditEvent, type SsfEventHandler, type SsfEventInput, type SsfEventListener, type SsfOnEvent, type SsfPermDock, type SsfPermDockOptions, type SsfReceiver, type SsfSubject, type SsfSubjectMapper, createPermDock, memoryReplayStore };
1
+ import { A as SsfSubject, C as SsfEventName, D as SsfReceiver, E as SsfPermDockOptions, M as SsfTransmitterConfiguration, N as SsfVerification, O as SsfStreamConfiguration, S as SsfEventListener, T as SsfPermDock, _ as SetSubject, a as PollHandle, b as SsfEventHandler, c as PushSetOptions, d as SetDelivery, f as SetDeliveryFailureCause, g as SetQueue, h as SetPollHandlerOptions, i as CaepReason, j as SsfSubjectResolver, k as SsfStreamStatus, l as ReplayStore, m as SetEvent, n as CaepEventName, o as PollOptions, p as SetError, r as CaepInitiatingEntity, s as PollResult, t as CaepCommon, u as RiscEventName, v as SignSetOptions, w as SsfOnEvent, x as SsfEventInput, y as SsfAuditEvent } from "../types-DiQjupG2.js";
2
+ import { t as memoryReplayStore } from "../replay-D7iKcLFe.js";
3
+ import { _ as setPollHandler, a as CaepTokenClaimsChange, c as RiscEvents, d as caepEvents, f as pushSet, g as memorySetQueue, h as streamVerificationEvent, i as CaepEvents, l as SSF_POLL_DELIVERY, m as signSet, n as CaepCredentialChange, o as RiscAccountDisabled, p as riscEvents, r as CaepDeviceComplianceChange, s as RiscCredentialCompromise, t as CaepAssuranceLevelChange, u as SSF_PUSH_DELIVERY, v as createPermDock } from "../index-D8EovfsP.js";
4
+ export { type CaepAssuranceLevelChange, type CaepCommon, type CaepCredentialChange, type CaepDeviceComplianceChange, type CaepEventName, type CaepEvents, type CaepInitiatingEntity, type CaepReason, type CaepTokenClaimsChange, type PollHandle, type PollOptions, type PollResult, type PushSetOptions, type ReplayStore, type RiscAccountDisabled, type RiscCredentialCompromise, type RiscEventName, type RiscEvents, SSF_POLL_DELIVERY, SSF_PUSH_DELIVERY, type SetDelivery, type SetDeliveryFailureCause, type SetError, type SetEvent, type SetPollHandlerOptions, type SetQueue, type SetSubject, type SignSetOptions, type SsfAuditEvent, type SsfEventHandler, type SsfEventInput, type SsfEventListener, type SsfEventName, type SsfOnEvent, type SsfPermDock, type SsfPermDockOptions, type SsfReceiver, type SsfStreamConfiguration, type SsfStreamStatus, type SsfSubject, type SsfSubjectResolver, type SsfTransmitterConfiguration, type SsfVerification, caepEvents, createPermDock, memoryReplayStore, memorySetQueue, pushSet, riscEvents, setPollHandler, signSet, streamVerificationEvent };
package/dist/ssf/index.js CHANGED
@@ -1,7 +1,9 @@
1
1
  import { r as isRecord, t as compact } from "../compact-CAf557ZB.js";
2
- import { t as cancelApprovals } from "../helpers-C9YmyBIa.js";
3
- import { i as issuerFromDiscovery, t as joseTokenVerifier } from "../verifier-DMr_Zmb_.js";
4
- import { t as memoryReplayStore } from "../replay-BsOyTrdV.js";
2
+ import { o as epochSeconds } from "../time-DkWjdL98.js";
3
+ import { n as readBodyText } from "../body-text-QcXok_SI.js";
4
+ import { t as cancelApprovals } from "../helpers-DTcZOzhF.js";
5
+ import { i as issuerFromDiscovery, t as joseTokenVerifier } from "../verifier-DHuh-okk.js";
6
+ import { t as memoryReplayStore } from "../replay-Du1tJjG7.js";
5
7
  import { t as timeoutSignal } from "../timeout-D51niuQP.js";
6
8
  //#region src/ssf/claims.ts
7
9
  function asSubject(mapped, session, issuer) {
@@ -46,18 +48,39 @@ function subjectSession(subject) {
46
48
  //#endregion
47
49
  //#region src/ssf/events.ts
48
50
  const BACKCHANNEL_LOGOUT_EVENT = "http://schemas.openid.net/event/backchannel-logout";
51
+ /** SSF 1.0 section 8.1.4.1. */
52
+ const VERIFICATION_EVENT = "https://schemas.openid.net/secevent/ssf/event-type/verification";
49
53
  const CAEP_PREFIX = "https://schemas.openid.net/secevent/caep/event-type/";
50
- const CAEP_NAMES = /* @__PURE__ */ new Set([
54
+ const RISC_PREFIX = "https://schemas.openid.net/secevent/risc/event-type/";
55
+ const CAEP_NAMES = [
51
56
  "session-revoked",
52
57
  "credential-change",
53
58
  "assurance-level-change",
54
59
  "token-claims-change",
55
- "device-compliance-change"
56
- ]);
57
- function caepName(uri) {
58
- if (!uri.startsWith(CAEP_PREFIX)) return;
59
- const name = uri.slice(52);
60
- if (CAEP_NAMES.has(name)) return name;
60
+ "device-compliance-change",
61
+ "session-established",
62
+ "session-presented",
63
+ "risk-level-change"
64
+ ];
65
+ const RISC_NAMES = [
66
+ "account-disabled",
67
+ "account-purged",
68
+ "credential-compromise"
69
+ ];
70
+ /** The CAEP or RISC name of an event URI PermDock knows, else `undefined`. */
71
+ function eventName(uri) {
72
+ if (uri.startsWith("https://schemas.openid.net/secevent/caep/event-type/")) {
73
+ const name = uri.slice(52);
74
+ return CAEP_NAMES.find((known) => known === name);
75
+ }
76
+ if (uri.startsWith("https://schemas.openid.net/secevent/risc/event-type/")) {
77
+ const name = uri.slice(52);
78
+ return RISC_NAMES.find((known) => known === name);
79
+ }
80
+ }
81
+ /** RISC events that end every session of the subject. */
82
+ function revokesAccount(name) {
83
+ return RISC_NAMES.some((known) => known === name);
61
84
  }
62
85
  //#endregion
63
86
  //#region src/ssf/poll.ts
@@ -125,6 +148,13 @@ async function pollOnce(input) {
125
148
  //#region src/ssf/wire.ts
126
149
  const SET_TYP = "secevent+jwt";
127
150
  const LOGOUT_TYP = "logout+jwt";
151
+ const SET_CONTENT = "application/secevent+jwt";
152
+ const HANDLER_FAILED = {
153
+ ok: false,
154
+ err: "invalid_request",
155
+ description: "handler failed",
156
+ retry: true
157
+ };
128
158
  function jsonResponse(status, body) {
129
159
  return new Response(JSON.stringify(body), {
130
160
  status,
@@ -178,17 +208,21 @@ function parseEvery(every) {
178
208
  }
179
209
  //#endregion
180
210
  //#region src/ssf/receiver.ts
211
+ /** Seconds a SET without `exp` stays acceptable after its `iat`. */
212
+ const DEFAULT_SET_MAX_AGE = 86400;
181
213
  const CHANGED_EVENTS = /* @__PURE__ */ new Set([
182
214
  "credential-change",
183
215
  "assurance-level-change",
184
216
  "token-claims-change"
185
217
  ]);
186
- function replayExpiresAt(claims, clockTolerance = 0) {
187
- if (typeof claims["exp"] === "number") return claims["exp"];
188
- if (typeof claims["iat"] === "number") {
189
- const until = claims["iat"] + clockTolerance;
190
- return until > Date.now() / 1e3 ? until : void 0;
191
- }
218
+ /**
219
+ * When the replay record of a SET may be dropped: its `exp`, or for a SET
220
+ * without one (RFC 8417 section 2.2) the end of its acceptance window, so
221
+ * the same `jti` cannot pass verification again once the record is gone.
222
+ */
223
+ function replayExpiresAt(claims, clockTolerance = 0, maxTokenAge = DEFAULT_SET_MAX_AGE) {
224
+ if (typeof claims["exp"] === "number") return claims["exp"] + clockTolerance;
225
+ if (typeof claims["iat"] === "number") return claims["iat"] + maxTokenAge + clockTolerance;
192
226
  }
193
227
  function replayKey(issuer, jti, event) {
194
228
  return JSON.stringify(event === void 0 ? [issuer ?? null, jti] : [
@@ -228,6 +262,12 @@ function createReceiver(config) {
228
262
  description: "missing iat",
229
263
  cause: "invalid-claims"
230
264
  };
265
+ if (typeof result.claims.exp !== "number" && result.claims.iat + (config.maxTokenAge ?? 86400) + (config.clockTolerance ?? 0) <= epochSeconds()) return {
266
+ ok: false,
267
+ err: errForCause("expired"),
268
+ description: "expired",
269
+ cause: "expired"
270
+ };
231
271
  return result;
232
272
  }
233
273
  async function resolveSubject(setSubject, session, issuer) {
@@ -256,21 +296,23 @@ function createReceiver(config) {
256
296
  async function publishRevocation(input) {
257
297
  const feed = config.revocations;
258
298
  if (feed === void 0) return;
259
- const kind = input.type === "session-revoked" ? "session-revoked" : CHANGED_EVENTS.has(input.type) ? "changed" : void 0;
299
+ const account = revokesAccount(input.type);
300
+ const kind = input.type === "session-revoked" || account ? "session-revoked" : CHANGED_EVENTS.has(input.type) ? "changed" : void 0;
260
301
  if (kind === void 0) return;
261
302
  try {
262
303
  await feed.revoke(compact({
263
304
  principal: input.subject.id,
264
- session: kind === "session-revoked" ? input.subject.session : void 0,
305
+ session: kind === "session-revoked" && !account ? input.subject.session : void 0,
265
306
  kind
266
307
  }));
267
308
  } catch {}
268
309
  }
269
310
  async function cancelSessionApprovals(input) {
270
- if (config.approvals === void 0 || input.type !== "session-revoked") return;
311
+ const account = revokesAccount(input.type);
312
+ if (config.approvals === void 0 || input.type !== "session-revoked" && !account) return;
271
313
  const count = await cancelApprovals(config.approvals, compact({
272
314
  principalId: input.subject.id,
273
- session: input.subject.session
315
+ session: account ? void 0 : input.subject.session
274
316
  }), {
275
317
  by: "ssf",
276
318
  note: input.jti
@@ -283,7 +325,7 @@ function createReceiver(config) {
283
325
  });
284
326
  }
285
327
  async function dispatch(type, input) {
286
- const named = Object.hasOwn(config.onEvent, type) ? config.onEvent[type] : void 0;
328
+ const named = Object.hasOwn(config.onEvent, type) && type !== "verification" ? config.onEvent[type] : void 0;
287
329
  const wildcard = config.onEvent["*"];
288
330
  const handler = named ?? wildcard;
289
331
  if (handler === void 0) {
@@ -301,11 +343,7 @@ function createReceiver(config) {
301
343
  try {
302
344
  await handler(input);
303
345
  } catch {
304
- return {
305
- ok: false,
306
- err: "invalid_request",
307
- description: "handler failed"
308
- };
346
+ return HANDLER_FAILED;
309
347
  }
310
348
  emit({
311
349
  type,
@@ -317,6 +355,25 @@ function createReceiver(config) {
317
355
  await cancelSessionApprovals(input);
318
356
  return { ok: true };
319
357
  }
358
+ async function verification(payload, issuer, jti) {
359
+ const state = typeof payload["state"] === "string" ? payload["state"] : void 0;
360
+ try {
361
+ await config.onEvent.verification?.(compact({
362
+ state,
363
+ jti,
364
+ issuer
365
+ }));
366
+ } catch {
367
+ return HANDLER_FAILED;
368
+ }
369
+ emit({
370
+ type: "verification",
371
+ transmitter: issuer,
372
+ jti,
373
+ state
374
+ });
375
+ return { ok: true };
376
+ }
320
377
  async function dispatchEvents(entries, run) {
321
378
  const [head, ...tail] = entries;
322
379
  if (head === void 0) return { ok: true };
@@ -325,8 +382,14 @@ function createReceiver(config) {
325
382
  const eventKey = replayKey(issuer, jti, uri);
326
383
  if (run.perEvent && await config.replay.seen(eventKey)) return dispatchEvents(tail, run);
327
384
  const payload = isRecord(raw) ? raw : {};
328
- const type = caepName(uri) ?? uri;
329
- if (caepName(uri) === void 0 && config.onEvent["*"] === void 0) {
385
+ if (uri === "https://schemas.openid.net/secevent/ssf/event-type/verification") {
386
+ const result = await verification(payload, issuer, jti);
387
+ if (!result.ok) return result;
388
+ return dispatchEvents(tail, run);
389
+ }
390
+ const named = eventName(uri);
391
+ const type = named ?? uri;
392
+ if (named === void 0 && config.onEvent["*"] === void 0) {
330
393
  emit({
331
394
  type,
332
395
  transmitter: issuer,
@@ -380,7 +443,7 @@ function createReceiver(config) {
380
443
  cause: "invalid-claims"
381
444
  };
382
445
  const key = replayKey(issuer, jti);
383
- const expiresAt = replayExpiresAt(verified.claims, config.clockTolerance);
446
+ const expiresAt = replayExpiresAt(verified.claims, config.clockTolerance, config.maxTokenAge);
384
447
  if (!await claimDelivery(key, expiresAt)) {
385
448
  emit({
386
449
  type: "replay",
@@ -391,11 +454,7 @@ function createReceiver(config) {
391
454
  return { ok: true };
392
455
  }
393
456
  const entries = Object.entries(events);
394
- let dispatched = {
395
- ok: false,
396
- err: "invalid_request",
397
- description: "handler failed"
398
- };
457
+ let dispatched = HANDLER_FAILED;
399
458
  try {
400
459
  dispatched = await dispatchEvents(entries, {
401
460
  issuer,
@@ -447,7 +506,7 @@ function createReceiver(config) {
447
506
  const jti = verified.claims["jti"];
448
507
  const issuer = typeof verified.claims.iss === "string" ? verified.claims.iss : void 0;
449
508
  const key = replayKey(issuer, jti);
450
- const expiresAt = replayExpiresAt(verified.claims, config.clockTolerance);
509
+ const expiresAt = replayExpiresAt(verified.claims, config.clockTolerance, config.maxTokenAge);
451
510
  if (!await claimDelivery(key, expiresAt)) {
452
511
  emit({
453
512
  type: "replay",
@@ -457,11 +516,7 @@ function createReceiver(config) {
457
516
  });
458
517
  return { ok: true };
459
518
  }
460
- let dispatched = {
461
- ok: false,
462
- err: "invalid_request",
463
- description: "handler failed"
464
- };
519
+ let dispatched = HANDLER_FAILED;
465
520
  try {
466
521
  dispatched = await dispatchLogout(verified.claims, {
467
522
  issuer,
@@ -505,20 +560,28 @@ function createReceiver(config) {
505
560
  }
506
561
  return {
507
562
  async push(request) {
508
- if (request.method !== "POST") return rfc8935(400, "invalid_request", "POST required");
563
+ if (request.method !== "POST") return new Response(null, {
564
+ status: 405,
565
+ headers: { allow: "POST" }
566
+ });
509
567
  if (contentType(request) !== "application/secevent+jwt") return rfc8935(400, "invalid_request", "application/secevent+jwt required");
510
- const token = (await request.text()).trim();
568
+ const read = await readBodyText(request);
569
+ if (!read.ok) return read.cause === "too-large" ? rfc8935(413, "invalid_request", "body is too large") : rfc8935(400, "invalid_request", "unreadable body");
570
+ const token = read.text.trim();
511
571
  if (token.length === 0) return rfc8935(400, "invalid_request", "empty body");
512
572
  const result = await ingestSet(token);
513
- if (!result.ok) return rfc8935(400, result.err, result.description);
573
+ if (!result.ok) return result.retry === true ? new Response(null, { status: 500 }) : rfc8935(400, result.err, result.description);
514
574
  return new Response(null, { status: 202 });
515
575
  },
516
576
  async logout(request) {
517
577
  if (request.method !== "POST") return jsonResponse(400, { error: "invalid_request" });
518
578
  if (contentType(request) !== "application/x-www-form-urlencoded") return jsonResponse(400, { error: "invalid_request" });
519
- const token = new URLSearchParams(await request.text()).get("logout_token");
579
+ const read = await readBodyText(request);
580
+ if (!read.ok) return jsonResponse(read.cause === "too-large" ? 413 : 400, { error: "invalid_request" });
581
+ const token = new URLSearchParams(read.text).get("logout_token");
520
582
  if (token === null || token.length === 0) return jsonResponse(400, { error: "invalid_request" });
521
- if (!(await ingestLogout(token)).ok) return jsonResponse(400, { error: "invalid_request" });
583
+ const result = await ingestLogout(token);
584
+ if (!result.ok) return result.retry === true ? new Response(null, { status: 500 }) : jsonResponse(400, { error: "invalid_request" });
522
585
  return new Response(null, { status: 200 });
523
586
  },
524
587
  poll(options) {
@@ -586,8 +649,282 @@ function createPermDock(policy, options) {
586
649
  replay: options.replay ?? memoryReplayStore(),
587
650
  approvals: options.approvals,
588
651
  revocations: options.revocations,
589
- clockTolerance: options.clockTolerance
652
+ clockTolerance: options.clockTolerance,
653
+ maxTokenAge: options.maxTokenAge
590
654
  })) };
591
655
  }
592
656
  //#endregion
593
- export { createPermDock, memoryReplayStore };
657
+ //#region src/ssf/set-queue.ts
658
+ /** The largest poll request body read: acknowledgements and errors for many SETs. */
659
+ const MAX_POLL_BYTES = 262144;
660
+ const DEFAULT_MAX_EVENTS = 100;
661
+ /**
662
+ * An in-process `SetQueue`: pending SETs per stream in insertion order. A
663
+ * process restart loses them; a deployment with more than one instance needs
664
+ * a shared queue.
665
+ */
666
+ function memorySetQueue() {
667
+ const streams = /* @__PURE__ */ new Map();
668
+ const of = (stream) => {
669
+ let queue = streams.get(stream);
670
+ if (queue === void 0) {
671
+ queue = /* @__PURE__ */ new Map();
672
+ streams.set(stream, queue);
673
+ }
674
+ return queue;
675
+ };
676
+ return Object.freeze({
677
+ name: "memory",
678
+ enqueue(stream, jti, set) {
679
+ of(stream).set(jti, set);
680
+ },
681
+ pending(stream, max) {
682
+ return [...of(stream)].slice(0, Math.max(0, max)).map(([jti, set]) => ({
683
+ jti,
684
+ set
685
+ }));
686
+ },
687
+ ack(stream, jti) {
688
+ of(stream).delete(jti);
689
+ },
690
+ fail(stream, jti, _error) {
691
+ of(stream).delete(jti);
692
+ }
693
+ });
694
+ }
695
+ function setErrors(value) {
696
+ if (value === void 0) return [];
697
+ if (!isRecord(value)) return;
698
+ const out = [];
699
+ for (const [jti, entry] of Object.entries(value)) {
700
+ if (!isRecord(entry) || typeof entry["err"] !== "string" || typeof entry["description"] !== "string") return;
701
+ out.push([jti, {
702
+ err: entry["err"],
703
+ description: entry["description"]
704
+ }]);
705
+ }
706
+ return out;
707
+ }
708
+ function parsePollRequest(text) {
709
+ let parsed;
710
+ try {
711
+ parsed = text.trim() === "" ? {} : JSON.parse(text);
712
+ } catch {
713
+ return;
714
+ }
715
+ if (!isRecord(parsed)) return;
716
+ const { maxEvents, acks = [] } = parsed;
717
+ const setErrs = setErrors(parsed["setErrs"]);
718
+ if (maxEvents !== void 0 && !(Number.isSafeInteger(maxEvents) && Number(maxEvents) >= 0) || !Array.isArray(acks) || !acks.every((jti) => typeof jti === "string") || setErrs === void 0) return;
719
+ return {
720
+ ...maxEvents === void 0 ? {} : { maxEvents: Number(maxEvents) },
721
+ acks: acks.map(String),
722
+ setErrs
723
+ };
724
+ }
725
+ /**
726
+ * The RFC 8936 poll endpoint over a `SetQueue`. It applies the request's
727
+ * `acks` and `setErrs`, then answers `{ sets, moreAvailable }` with up to
728
+ * `maxEvents` pending SETs. It answers at once whatever `returnImmediately`
729
+ * says, which RFC 8936 section 2.4 allows.
730
+ */
731
+ function setPollHandler(options) {
732
+ const cap = options.maxEvents ?? DEFAULT_MAX_EVENTS;
733
+ return async (request) => {
734
+ if (request.method !== "POST") return new Response(null, {
735
+ status: 405,
736
+ headers: { allow: "POST" }
737
+ });
738
+ let stream;
739
+ try {
740
+ stream = await options.authorize(request);
741
+ } catch {
742
+ stream = null;
743
+ }
744
+ if (stream === null) return rfc8935(401, "authentication_failed", "poll not authorized");
745
+ const read = await readBodyText(request, MAX_POLL_BYTES);
746
+ const body = read.ok ? parsePollRequest(read.text) : void 0;
747
+ if (body === void 0) return rfc8935(400, "invalid_request", "malformed poll request");
748
+ const { queue } = options;
749
+ for (const jti of body.acks) await queue.ack(stream, jti);
750
+ for (const [jti, error] of body.setErrs) await queue.fail(stream, jti, error);
751
+ const max = Math.min(body.maxEvents ?? cap, cap);
752
+ if (max === 0) return jsonResponse(200, { sets: {} });
753
+ const pending = await queue.pending(stream, max + 1);
754
+ const sets = {};
755
+ for (const { jti, set } of pending.slice(0, max)) sets[jti] = set;
756
+ return jsonResponse(200, {
757
+ sets,
758
+ ...pending.length > max ? { moreAvailable: true } : {}
759
+ });
760
+ };
761
+ }
762
+ //#endregion
763
+ //#region src/ssf/transmitter.ts
764
+ /** SSF 1.0 delivery method URN for RFC 8935 push. */
765
+ const SSF_PUSH_DELIVERY = "urn:ietf:rfc:8935";
766
+ /** SSF 1.0 delivery method URN for RFC 8936 poll. */
767
+ const SSF_POLL_DELIVERY = "urn:ietf:rfc:8936";
768
+ /** Milliseconds one push may take. */
769
+ const PUSH_TIMEOUT_MS = 3e4;
770
+ /** The largest error body `pushSet` reads. */
771
+ const MAX_ERROR_BYTES = 16384;
772
+ /**
773
+ * Signs one event as an RFC 8417 Security Event Token (`typ: secevent+jwt`):
774
+ * `sub_id` is the event's subject and `events` holds exactly one entry, as
775
+ * SSF 1.0 requires. `iss` is the signer's own.
776
+ */
777
+ function signSet(event, signer, options) {
778
+ return signer.sign(compact({
779
+ sub_id: event.subject,
780
+ events: { [event.type]: event.payload },
781
+ txn: options.txn
782
+ }), compact({
783
+ typ: SET_TYP,
784
+ audience: options.audience,
785
+ jti: options.jti,
786
+ issuedAt: options.issuedAt
787
+ }));
788
+ }
789
+ const ERR_CAUSES = {
790
+ invalid_request: "invalid-request",
791
+ invalid_key: "invalid-key",
792
+ invalid_issuer: "invalid-issuer",
793
+ invalid_audience: "invalid-audience",
794
+ authentication_failed: "authentication-failed",
795
+ access_denied: "access-denied"
796
+ };
797
+ async function errorBody(response) {
798
+ const read = await readBodyText(response, MAX_ERROR_BYTES);
799
+ if (!read.ok) return {};
800
+ try {
801
+ const parsed = JSON.parse(read.text);
802
+ if (!isRecord(parsed)) return {};
803
+ return compact({
804
+ err: typeof parsed["err"] === "string" ? parsed["err"] : void 0,
805
+ description: typeof parsed["description"] === "string" ? parsed["description"] : void 0
806
+ });
807
+ } catch {
808
+ return {};
809
+ }
810
+ }
811
+ /**
812
+ * Pushes one SET to a receiver (RFC 8935). A `2xx` is delivery; a `400`
813
+ * maps the receiver's `err` to a cause; `401` and `403` are
814
+ * `authentication-failed` and `access-denied`; a network failure, a timeout,
815
+ * a `429` or a `5xx` is `unavailable` with `retry: true`. Never throws.
816
+ */
817
+ async function pushSet(set, options) {
818
+ const fetchFn = options.fetch ?? globalThis.fetch;
819
+ let response;
820
+ try {
821
+ response = await fetchFn(options.endpoint, {
822
+ method: "POST",
823
+ headers: compact({
824
+ "content-type": SET_CONTENT,
825
+ accept: "application/json",
826
+ authorization: options.authorization
827
+ }),
828
+ body: set,
829
+ signal: timeoutSignal(PUSH_TIMEOUT_MS, options.signal)
830
+ });
831
+ } catch {
832
+ return {
833
+ ok: false,
834
+ cause: "unavailable",
835
+ retry: true
836
+ };
837
+ }
838
+ if (response.ok) {
839
+ await response.body?.cancel();
840
+ return { ok: true };
841
+ }
842
+ const { err, description } = await errorBody(response);
843
+ if (response.status === 429 || response.status >= 500) return compact({
844
+ ok: false,
845
+ cause: "unavailable",
846
+ description,
847
+ retry: true
848
+ });
849
+ const cause = (response.status === 401 ? "authentication-failed" : response.status === 403 ? "access-denied" : void 0) ?? (err !== void 0 && Object.hasOwn(ERR_CAUSES, err) ? ERR_CAUSES[err] : void 0) ?? "invalid-request";
850
+ return compact({
851
+ ok: false,
852
+ cause,
853
+ description,
854
+ retry: false
855
+ });
856
+ }
857
+ function reason(value) {
858
+ return typeof value === "string" ? { en: value } : value;
859
+ }
860
+ function caep(name, input, extra) {
861
+ return Object.freeze({
862
+ type: `${CAEP_PREFIX}${name}`,
863
+ subject: input.subject,
864
+ payload: Object.freeze(compact({
865
+ event_timestamp: input.eventTimestamp ?? epochSeconds(),
866
+ initiating_entity: input.initiatingEntity,
867
+ reason_admin: reason(input.reasonAdmin),
868
+ reason_user: reason(input.reasonUser),
869
+ ...extra
870
+ }))
871
+ });
872
+ }
873
+ /** CAEP 1.0 event builders; each returns a `SetEvent` for `signSet`. */
874
+ const caepEvents = Object.freeze({
875
+ sessionRevoked: (input) => caep("session-revoked", input, {}),
876
+ credentialChange: (input) => caep("credential-change", input, compact({
877
+ credential_type: input.credentialType,
878
+ change_type: input.changeType,
879
+ friendly_name: input.friendlyName,
880
+ x509_issuer: input.x509Issuer,
881
+ x509_serial: input.x509Serial,
882
+ fido2_aaguid: input.fido2Aaguid
883
+ })),
884
+ tokenClaimsChange: (input) => caep("token-claims-change", input, { claims: input.claims }),
885
+ assuranceLevelChange: (input) => caep("assurance-level-change", input, compact({
886
+ namespace: input.namespace,
887
+ current_level: input.currentLevel,
888
+ previous_level: input.previousLevel,
889
+ change_direction: input.changeDirection
890
+ })),
891
+ deviceComplianceChange: (input) => caep("device-compliance-change", input, {
892
+ previous_status: input.previousStatus,
893
+ current_status: input.currentStatus
894
+ })
895
+ });
896
+ function risc(name, subject, payload) {
897
+ return Object.freeze({
898
+ type: `${RISC_PREFIX}${name}`,
899
+ subject,
900
+ payload: Object.freeze(payload)
901
+ });
902
+ }
903
+ /** RISC 1.0 event builders for the events PermDock's receiver treats as revoking every session. */
904
+ const riscEvents = Object.freeze({
905
+ accountDisabled: (input) => risc("account-disabled", input.subject, compact({ reason: input.reason })),
906
+ accountPurged: (input) => risc("account-purged", input.subject, {}),
907
+ credentialCompromise: (input) => risc("credential-compromise", input.subject, compact({
908
+ credential_type: input.credentialType,
909
+ event_timestamp: input.eventTimestamp ?? epochSeconds(),
910
+ initiating_entity: input.initiatingEntity,
911
+ reason_admin: reason(input.reasonAdmin),
912
+ reason_user: reason(input.reasonUser)
913
+ }))
914
+ });
915
+ /**
916
+ * The SSF 1.0 section 8.1.4 verification event for `stream`, echoing the
917
+ * receiver's `state`. Its subject is the stream, never a principal.
918
+ */
919
+ function streamVerificationEvent(stream, state) {
920
+ return Object.freeze({
921
+ type: VERIFICATION_EVENT,
922
+ subject: Object.freeze({
923
+ format: "opaque",
924
+ id: stream
925
+ }),
926
+ payload: Object.freeze(compact({ state }))
927
+ });
928
+ }
929
+ //#endregion
930
+ export { SSF_POLL_DELIVERY, SSF_PUSH_DELIVERY, caepEvents, createPermDock, memoryReplayStore, memorySetQueue, pushSet, riscEvents, setPollHandler, signSet, streamVerificationEvent };
@@ -0,0 +1,88 @@
1
+ import { Rt as Instant, tr as JsonWebKeyLike } from "./policy-types-DzwivBgR.js";
2
+ import { l as ReplayStore } from "./types-DiQjupG2.js";
3
+ //#region src/server/standard-webhooks.d.ts
4
+ /** The three Standard Webhooks headers a delivery carries. */
5
+ type WebhookHeaders = {
6
+ readonly "webhook-id": string;
7
+ readonly "webhook-timestamp": string;
8
+ readonly "webhook-signature": string;
9
+ };
10
+ /** An OKP JWK; only `kty: "OKP"` with `crv: "Ed25519"` signs or verifies `v1a`. */
11
+ type WebhookJwk = JsonWebKeyLike & {
12
+ readonly kid?: string;
13
+ readonly crv?: string;
14
+ readonly x?: string;
15
+ readonly d?: string;
16
+ };
17
+ /** A Standard Webhooks signature version: `v1` HMAC-SHA256 or `v1a` Ed25519. */
18
+ type WebhookAlgorithm = "v1" | "v1a";
19
+ type WebhookSigningKey = {
20
+ readonly alg: "v1";
21
+ readonly secret: string;
22
+ } | {
23
+ readonly alg: "v1a";
24
+ readonly privateKey: WebhookJwk;
25
+ };
26
+ type WebhookSignerOptions = {
27
+ /** Every key signs each delivery, so a receiver can rotate between them. */
28
+ readonly keys: readonly WebhookSigningKey[];
29
+ };
30
+ type WebhookMessage = {
31
+ /** A unique message id, kept across retries of the same message. */
32
+ readonly id: string;
33
+ readonly body: string;
34
+ readonly now?: Instant;
35
+ };
36
+ type WebhookSigner = {
37
+ sign(message: WebhookMessage): Promise<WebhookHeaders>;
38
+ };
39
+ /** An Ed25519 public JWK set for `v1a`, or the URL that serves one. */
40
+ type WebhookJwks = {
41
+ readonly keys: readonly WebhookJwk[];
42
+ } | URL | string;
43
+ type WebhookVerifierOptions = {
44
+ /** `v1` secrets in `whsec_` form; more than one during a rotation. */
45
+ readonly secret?: string | readonly string[];
46
+ /** `v1a` public keys. */
47
+ readonly jwks?: WebhookJwks;
48
+ /** Records each `webhook-id` so a replayed delivery fails. */
49
+ readonly replay: ReplayStore;
50
+ /** Seconds a timestamp may differ from the clock. Defaults to 300. */
51
+ readonly tolerance?: number;
52
+ readonly now?: () => Instant;
53
+ /** Fetches a `jwks` URL. Defaults to the global `fetch`. */
54
+ readonly fetch?: typeof fetch;
55
+ };
56
+ type WebhookFailureCause = "missing-headers" | "malformed" | "timestamp-out-of-range" | "invalid-signature" | "keys-unavailable" | "replayed";
57
+ type WebhookInput = Request | {
58
+ readonly headers: Headers | Readonly<Record<string, string | undefined>>;
59
+ readonly body: string;
60
+ };
61
+ type VerifiedWebhookMessage = {
62
+ readonly ok: true;
63
+ readonly id: string;
64
+ /** The `webhook-timestamp` as an RFC 3339 instant. */
65
+ readonly timestamp: string;
66
+ readonly body: string;
67
+ } | {
68
+ readonly ok: false;
69
+ readonly cause: WebhookFailureCause;
70
+ };
71
+ type WebhookVerifier = {
72
+ /** Never throws; claims the `webhook-id` only after a signature verifies. */
73
+ verify(input: WebhookInput): Promise<VerifiedWebhookMessage>;
74
+ };
75
+ /**
76
+ * Signs Standard Webhooks deliveries: `v1` HMAC-SHA256 with a `whsec_`
77
+ * secret, `v1a` Ed25519 with a private JWK. Throws on an invalid key or id,
78
+ * because both come from the sender's own configuration.
79
+ */
80
+ declare function webhookSigner(options: WebhookSignerOptions): WebhookSigner;
81
+ /**
82
+ * Verifies Standard Webhooks deliveries signed `v1` with one of `secret` or
83
+ * `v1a` with a key from `jwks`, within `tolerance` seconds, and records each
84
+ * `webhook-id` in `replay`. Throws only on an invalid `secret`.
85
+ */
86
+ declare function webhookVerifier(options: WebhookVerifierOptions): WebhookVerifier;
87
+ //#endregion
88
+ export { WebhookInput as a, WebhookMessage as c, WebhookSigningKey as d, WebhookVerifier as f, webhookVerifier as h, WebhookHeaders as i, WebhookSigner as l, webhookSigner as m, WebhookAlgorithm as n, WebhookJwk as o, WebhookVerifierOptions as p, WebhookFailureCause as r, WebhookJwks as s, VerifiedWebhookMessage as t, WebhookSignerOptions as u };