permdock 0.3.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (552) hide show
  1. package/README.md +37 -35
  2. package/dist/{openapi-schema--ARjyfQr.js → 2020-C9VN-x8c.js} +5 -132
  3. package/dist/a2a/index.d.ts +8 -6
  4. package/dist/a2a/index.js +21 -31
  5. package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
  6. package/dist/adoption-scan-B4R5fnMU.js +107 -0
  7. package/dist/agent/index.d.ts +3 -0
  8. package/dist/agent/index.js +1 -0
  9. package/dist/ai-sdk/index.d.ts +18 -23
  10. package/dist/ai-sdk/index.js +38 -21
  11. package/dist/app-data-MuyzVqX8.js +60 -0
  12. package/dist/approval-header-CJACtHkv.js +23 -0
  13. package/dist/approval-prompt-Dg5LeAcT.js +62 -0
  14. package/dist/approval-prompt-Djo_PyZc.d.ts +57 -0
  15. package/dist/approvals/index.d.ts +5 -3
  16. package/dist/approvals/index.js +8 -5
  17. package/dist/approvals-DJ6Yd5z1.js +995 -0
  18. package/dist/{approvers-DT4AVyIg.js → approvers-CqPOLD-o.js} +1 -1
  19. package/dist/arazzo-B6lebmiQ.js +36 -0
  20. package/dist/{arazzo-BAgw9ap6.js → arazzo-BWhNF-k0.js} +24 -17
  21. package/dist/args-IIolxxKA.js +197 -0
  22. package/dist/astro/index.d.ts +43 -0
  23. package/dist/astro/index.js +27 -0
  24. package/dist/audience-Dg8XsRaO.js +55 -0
  25. package/dist/auth-DRLEizbL.js +178 -0
  26. package/dist/authzen/index.d.ts +26 -6
  27. package/dist/authzen/index.js +228 -75
  28. package/dist/automation-BMZPIVUM.d.ts +114 -0
  29. package/dist/automation-DVjOckjV.js +157 -0
  30. package/dist/better-auth/index.d.ts +8 -6
  31. package/dist/better-auth/index.js +11 -23
  32. package/dist/better-supabase/index.d.ts +438 -86
  33. package/dist/better-supabase/index.js +1027 -184
  34. package/dist/bind--9EFVYWF.d.ts +38 -0
  35. package/dist/{bind-CuzGytRf.js → bind-CZzhx-Vj.js} +22 -10
  36. package/dist/body-CH5of8Ne.js +10 -0
  37. package/dist/body-text-QcXok_SI.js +52 -0
  38. package/dist/build-instance-BMnAudHn.js +52 -0
  39. package/dist/{canonical-json-DemiK4Vp.js → canonical-json-BC8_nMTw.js} +6 -6
  40. package/dist/{capability-2kYTMWDv.d.ts → capability-BSslw1QV.d.ts} +44 -25
  41. package/dist/{capability-4qPdO9gk.js → capability-N1K9IpqS.js} +69 -42
  42. package/dist/casbin-Cr7RLtA3.js +30 -0
  43. package/dist/casbin-Dyu2gnUD.js +234 -0
  44. package/dist/casl-64gpT-8x.js +24 -0
  45. package/dist/casl-DjEDhTCP.js +299 -0
  46. package/dist/catalog/index.d.ts +74 -2
  47. package/dist/catalog/index.js +51 -2
  48. package/dist/catalog-BECMPrwc.js +100 -0
  49. package/dist/catalog-DjhMYYCq.js +1 -0
  50. package/dist/catalog-R_A__RsH.js +52 -0
  51. package/dist/{catalog-doc-DdGm82XT.js → catalog-doc-C9wjsfNY.js} +54 -25
  52. package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
  53. package/dist/chat/index.d.ts +2 -0
  54. package/dist/chat/index.js +224 -0
  55. package/dist/chat-sdk/index.d.ts +87 -0
  56. package/dist/chat-sdk/index.js +197 -0
  57. package/dist/claims-map-7oQ3ue4X.js +13 -0
  58. package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
  59. package/dist/claude-agent/index.d.ts +7 -14
  60. package/dist/claude-agent/index.js +26 -30
  61. package/dist/clerk/index.d.ts +9 -8
  62. package/dist/clerk/index.js +15 -45
  63. package/dist/cli/bin.js +36 -17
  64. package/dist/cli/index.d.ts +20 -6
  65. package/dist/cli/index.js +164 -4
  66. package/dist/cloud/index.d.ts +102 -63
  67. package/dist/cloud/index.js +240 -347
  68. package/dist/cloud-CIoHNevm.js +87 -0
  69. package/dist/codemod-Bmj9dWMH.js +37 -0
  70. package/dist/codemod-Cxvvc70T.js +2084 -0
  71. package/dist/{collect-DSTE3ml9.js → collect-CrZJJnEF.js} +79 -17
  72. package/dist/collect-DloHbDVa.js +55 -0
  73. package/dist/collect-FlXJlhus.js +1 -0
  74. package/dist/command-L8EstFNm.js +6 -0
  75. package/dist/{compact-y6vfu2_f.js → compact-CAf557ZB.js} +11 -1
  76. package/dist/compile/index.d.ts +1 -1
  77. package/dist/compile/index.js +1 -2
  78. package/dist/{compile-Ba4blROR.js → compile-CMqMx_IN.js} +13 -9
  79. package/dist/{compile-BkRyBDBw.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
  80. package/dist/completion-BqhRBJD8.js +143 -0
  81. package/dist/config-B46rm9sc.js +26 -0
  82. package/dist/{config-BJiM-xAm.js → config-bs_kZeYq.js} +15 -10
  83. package/dist/{config-report-CdCgbRnV.js → config-report-DUgj62Ai.js} +17 -8
  84. package/dist/{connection-CU8MQxRi.js → connection-DjhIJSs2.js} +8 -6
  85. package/dist/constants-DcJABbLW.js +20 -0
  86. package/dist/{context-Bcy85rGi.js → context-bbFHR-0D.js} +16 -5
  87. package/dist/convex/index.d.ts +11 -10
  88. package/dist/convex/index.js +18 -18
  89. package/dist/create-0VZ7Pdiu.d.ts +107 -0
  90. package/dist/create-BDS7wc3y.d.ts +138 -0
  91. package/dist/create-BFfm17UA.d.ts +110 -0
  92. package/dist/create-BWRSXgOF.js +403 -0
  93. package/dist/create-C3b4B5eF.js +130 -0
  94. package/dist/create-DnrmLnLW.js +323 -0
  95. package/dist/{credential-8P81ff4u.js → credential-DM2um3ha.js} +153 -32
  96. package/dist/credentials-DPyHmYz5.js +74 -0
  97. package/dist/deciding-columns-Sq12mEA6.js +123 -0
  98. package/dist/delegation-DaXVdDhM.js +286 -0
  99. package/dist/delegation-input-FTxMK3ji.js +19 -0
  100. package/dist/delivery/index.d.ts +5 -0
  101. package/dist/delivery/index.js +5 -0
  102. package/dist/delivery-DCAgNyCn.js +499 -0
  103. package/dist/delivery-event-xX4obB8F.js +40 -0
  104. package/dist/denied-text-D8jDHgsl.d.ts +19 -0
  105. package/dist/{describe-DMYiCjJV.d.ts → describe-BZUsixiL.d.ts} +11 -2
  106. package/dist/{describe-B_gVZEVi.js → describe-BybMRY7A.js} +10 -5
  107. package/dist/device-BARQ8eYG.js +193 -0
  108. package/dist/diff-CxZo9pTq.js +37 -0
  109. package/dist/{diff-2VaeChzX.js → diff-DCePiN6M.js} +61 -55
  110. package/dist/doctor-CxiwSfqH.js +44 -0
  111. package/dist/doctor-DFjUxf2f.js +2361 -0
  112. package/dist/drizzle/index.d.ts +5 -3
  113. package/dist/drizzle/index.js +6 -14
  114. package/dist/elysia/index.d.ts +16 -13
  115. package/dist/elysia/index.js +14 -13
  116. package/dist/env-DJZrPjRi.js +8 -0
  117. package/dist/errors-BDUwg2qC.js +27 -0
  118. package/dist/{errors-Cz5zn0mW.js → errors-BKy0EfhN.js} +6 -10
  119. package/dist/errors-BWXBMaKK.d.ts +11 -0
  120. package/dist/{errors-DPdqI50v.d.ts → errors-C2PXIv4c.d.ts} +2 -2
  121. package/dist/errors-CWTY6uih.js +143 -0
  122. package/dist/evaluate-_R8QkWaf.js +1732 -0
  123. package/dist/evaluations-16UqqQ6W.d.ts +32 -0
  124. package/dist/{evaluations-tz6D9A2G.js → evaluations-DZ2CbV5k.js} +181 -32
  125. package/dist/eve/index.d.ts +12 -16
  126. package/dist/eve/index.js +23 -29
  127. package/dist/event-time-CsegxXxB.js +23 -0
  128. package/dist/expiry-D4_YKRKD.js +52 -0
  129. package/dist/express/index.d.ts +13 -10
  130. package/dist/express/index.js +14 -12
  131. package/dist/fastify/index.d.ts +26 -13
  132. package/dist/fastify/index.js +17 -36
  133. package/dist/fetch-adapter-g0ypLkID.js +120 -0
  134. package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
  135. package/dist/fields-D9tPVUUS.js +203 -0
  136. package/dist/files-C5ZI27eV.js +124 -0
  137. package/dist/{files-DWUN9PzI.js → files-D_JIzUrP.js} +12 -3
  138. package/dist/{fixtures-ht28Cplr.js → fixtures-B7XrLeY7.js} +12 -12
  139. package/dist/flags-C3DktBDY.js +86 -0
  140. package/dist/{from-snapshot-CTLijvdm.js → from-snapshot-D2lZt4Dd.js} +78 -65
  141. package/dist/{generate-CH7ThJ14.js → generate-CNU1pIOo.js} +1 -3
  142. package/dist/grantee-Cn1HyUsI.js +254 -0
  143. package/dist/grantee-conditions-CcXf8hMM.js +271 -0
  144. package/dist/grantee-match-DHArqY82.js +142 -0
  145. package/dist/h3/index.d.ts +37 -0
  146. package/dist/h3/index.js +35 -0
  147. package/dist/headers-BIjfMaoC.js +8 -0
  148. package/dist/headers-CIbDTUTK.d.ts +7 -0
  149. package/dist/{helpers-H_KARDVC.js → helpers-DTcZOzhF.js} +47 -39
  150. package/dist/hono/index.d.ts +12 -9
  151. package/dist/hono/index.js +14 -13
  152. package/dist/{hosted-DJQw46hn.js → hosted-BZIAYvon.js} +64 -15
  153. package/dist/hosted-DBDX0M-P.d.ts +78 -0
  154. package/dist/{http-SO7qGttf.js → http-BBoKefeS.js} +35 -2
  155. package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
  156. package/dist/http-DXJ37RDA.js +46 -0
  157. package/dist/{http-BIhmLfCc.js → http-ujKm0JXE.js} +3 -26
  158. package/dist/{openapi-import-cmwetbzw.js → import-CNV7I2Dw.js} +30 -26
  159. package/dist/{rls-import-4lLW_pbb.js → import-DMmOG27O.js} +271 -128
  160. package/dist/index-BcHcPyIo.d.ts +110 -0
  161. package/dist/index-CaxrMD1A.d.ts +1 -0
  162. package/dist/index-Chrs5fQ-.d.ts +210 -0
  163. package/dist/index-CxGUswIC.d.ts +431 -0
  164. package/dist/index-D8EovfsP.d.ts +91 -0
  165. package/dist/index-DOVf7RJv.d.ts +900 -0
  166. package/dist/{index-C8z4RjQV.d.ts → index-SGdIQyzc.d.ts} +34 -16
  167. package/dist/index.d.ts +20 -14
  168. package/dist/index.js +33 -23
  169. package/dist/init-DeMYsnYJ.js +96 -0
  170. package/dist/init-GG6Jh8HD.js +95 -0
  171. package/dist/{instance-options-jARdwfPN.d.ts → instance-options-Omfd793B.d.ts} +2 -2
  172. package/dist/instance-snapshot-Cxq4ygFc.js +600 -0
  173. package/dist/instant-BluqDvyS.js +19 -0
  174. package/dist/internals-Dk8A8fX3.js +17 -0
  175. package/dist/{json-schema-BsAflUGW.js → json-schema-B-vAwlde.js} +46 -9
  176. package/dist/json-schema-CN_iLFH2.d.ts +40 -0
  177. package/dist/jwt/index.d.ts +18 -11
  178. package/dist/jwt/index.js +166 -145
  179. package/dist/{kernel-_RRHmnMY.js → kernel-5JatXyND.js} +120 -43
  180. package/dist/kysely/index.d.ts +5 -3
  181. package/dist/kysely/index.js +6 -14
  182. package/dist/{live-options-H2eG8dfJ.js → live-options-BaAFCIiu.js} +16 -3
  183. package/dist/load-BxEtwlBS.js +1 -0
  184. package/dist/{load-DhWEB9P1.js → load-DFS_ry0W.js} +31 -7
  185. package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
  186. package/dist/login-Dfe5RlYk.js +68 -0
  187. package/dist/login-imhuwvn3.js +254 -0
  188. package/dist/manifest-C8IzW3Do.js +42 -0
  189. package/dist/manifest-CtKR3GXL.js +370 -0
  190. package/dist/manifest-json-CAGzls-C.js +9 -0
  191. package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
  192. package/dist/manifest-schema-C0kK_8V0.js +399 -0
  193. package/dist/{map-claims-Z4QZOiFF.js → map-claims-D3oRmTk0.js} +19 -25
  194. package/dist/{map-error-pgUWNNtG.js → map-error-TCAdw-eW.js} +5 -5
  195. package/dist/{markers-B0hYLvMD.js → markers-C6joDI3o.js} +8 -3
  196. package/dist/mcp/index.d.ts +36 -9
  197. package/dist/mcp/index.js +476 -448
  198. package/dist/{rls-migrate-CN4TlJTO.js → migrate-BShP7Vf4.js} +119 -20
  199. package/dist/nest/index.d.ts +12 -9
  200. package/dist/nest/index.js +20 -20
  201. package/dist/next/index.d.ts +40 -20
  202. package/dist/next/index.js +37 -39
  203. package/dist/next/plugin.d.ts +1 -1
  204. package/dist/next/plugin.js +2 -2
  205. package/dist/node/index.d.ts +10 -10
  206. package/dist/node/index.js +7 -9
  207. package/dist/ocsf-BFp-PZZA.js +126 -0
  208. package/dist/openai/index.d.ts +9 -16
  209. package/dist/openai/index.js +18 -25
  210. package/dist/openapi/index.d.ts +3 -3
  211. package/dist/openapi/index.js +1 -1
  212. package/dist/{openapi-BqRBvAng.js → openapi-B7HZ0f-r.js} +9 -12
  213. package/dist/{openapi-CqqEbHsL.js → openapi-DTaEmTSW.js} +23 -26
  214. package/dist/openapi-ahr8rHu3.js +138 -0
  215. package/dist/operation-findings-DgATDpvh.js +36 -0
  216. package/dist/operations-CxybZErY.d.ts +59 -0
  217. package/dist/orpc/index.d.ts +13 -10
  218. package/dist/orpc/index.js +23 -20
  219. package/dist/otel/index.d.ts +3 -2
  220. package/dist/otel/index.js +53 -27
  221. package/dist/output-Dyw8fyPF.js +88 -0
  222. package/dist/output-files-B3IZJksC.js +1 -0
  223. package/dist/output-files-DhRBBE4n.js +138 -0
  224. package/dist/{rls-fields-CZOMlwHl.js → ownership-BatFgAA4.js} +2393 -2349
  225. package/dist/{package-root-zGkxO3oN.js → package-root-Dk_ETdkp.js} +4 -3
  226. package/dist/{parse-BuyjxhZV.js → parse-Cxq0WxrA.js} +3 -3
  227. package/dist/{parse-local-manifest-BrMozJCo.js → parse-local-manifest-CVSs6J9I.js} +2 -4
  228. package/dist/{parse-local-manifest-JLnaBH0S.d.ts → parse-local-manifest-DgqtruPn.d.ts} +1 -1
  229. package/dist/parse-request-D_tUXG6M.js +26 -0
  230. package/dist/paths-DXSHAMIa.js +42 -0
  231. package/dist/pdp/index.d.ts +7 -3
  232. package/dist/pdp/index.js +47 -29
  233. package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
  234. package/dist/peer-CRvC7Hg1.js +1 -0
  235. package/dist/permdock-B9JxkBwC.js +868 -0
  236. package/dist/permdock-D7eeLJER.d.ts +502 -0
  237. package/dist/permission-registry-Br4jSNVi.js +385 -0
  238. package/dist/permissions-B-wCP5ZC.js +30 -0
  239. package/dist/{permissions-RJrovw98.js → permissions-CZKiUfFM.js} +4 -3
  240. package/dist/{permissions-CDgvKG5L.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
  241. package/dist/policies-CO1oOymN.js +295 -0
  242. package/dist/{policy-D2W7uv19.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
  243. package/dist/policy-DLZJ5gAp.js +399 -0
  244. package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
  245. package/dist/policy-module-CTlwMvLI.js +89 -0
  246. package/dist/{policy-IB6yxpC3.d.ts → policy-types-DzwivBgR.d.ts} +939 -1057
  247. package/dist/postgrest-CW0IqC-U.js +566 -0
  248. package/dist/postgrest-NUqZT-RB.d.ts +100 -0
  249. package/dist/powersync-BHfuehf3.js +62 -0
  250. package/dist/powersync-CbzkqL_M.js +1 -0
  251. package/dist/{powersync-Dv1_aWF7.js → powersync-bYUDLOAO.js} +30 -32
  252. package/dist/preset/index.d.ts +146 -0
  253. package/dist/preset/index.js +1 -0
  254. package/dist/preset-DZdU0tne.js +1768 -0
  255. package/dist/principal-source-pHneukrx.js +103 -0
  256. package/dist/prisma/index.d.ts +6 -3
  257. package/dist/prisma/index.js +6 -12
  258. package/dist/{problem-B43ztKIm.js → problem-CTviyH5L.js} +18 -27
  259. package/dist/{problem-details-DX075l9V.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
  260. package/dist/{problem-details-_AMOYz-w.js → problem-details-cn5X30gZ.js} +45 -42
  261. package/dist/problem-types-CJ2325SZ.js +5 -0
  262. package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
  263. package/dist/protected-DEPHc2xV.d.ts +38 -0
  264. package/dist/{protected-utU-SLuy.js → protected-DfjY5mLA.js} +37 -8
  265. package/dist/{provider-CSQd7m92.js → provider-CC-u3bYP.js} +23 -10
  266. package/dist/{provider-DZY281jO.d.ts → provider-DMVt6yYn.d.ts} +1 -1
  267. package/dist/{provider-store-Cfbvo4DE.js → provider-store-B5Yrkhzr.js} +6 -3
  268. package/dist/pull-BgIfno6w.js +256 -0
  269. package/dist/pull-ByOks_Tg.js +1 -0
  270. package/dist/push-CmFVBOeI.js +116 -0
  271. package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
  272. package/dist/pushed-policy-DobP7AHI.js +238 -0
  273. package/dist/react/index.d.ts +8 -8
  274. package/dist/react/index.js +6 -6
  275. package/dist/react/provider-client.d.ts +1 -1
  276. package/dist/react/provider-client.js +1 -2
  277. package/dist/react-native/index.d.ts +24 -63
  278. package/dist/react-native/index.js +45 -27
  279. package/dist/{refs-KYb4ntaz.js → refs-K6eWUJ0H.js} +1 -1
  280. package/dist/relation-walk-3OyDBF0S.js +186 -0
  281. package/dist/relations-BnCWnJGI.js +163 -0
  282. package/dist/renames-CGj7YwcQ.js +175 -0
  283. package/dist/{replay-CYyiLiwO.d.ts → replay-D7iKcLFe.d.ts} +1 -1
  284. package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
  285. package/dist/request-context-BTRTG7OT.js +71 -0
  286. package/dist/request-context-C2_1lchh.d.ts +5 -0
  287. package/dist/request-schema-CMreVuFM.js +148 -0
  288. package/dist/resend/index.d.ts +126 -0
  289. package/dist/resend/index.js +379 -0
  290. package/dist/resource-relations-D_jw0BFx.js +243 -0
  291. package/dist/retire-CALjIQ7e.js +240 -0
  292. package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
  293. package/dist/rls-BA8an5Ap.js +336 -0
  294. package/dist/{rls-DiinlRML.js → rls-j6t43t7n.js} +1066 -1068
  295. package/dist/role-builder-CXbis5-X.js +623 -0
  296. package/dist/{rpc-DL9Sqvb1.js → rpc-aPyNi6tA.js} +18 -8
  297. package/dist/run-CNsApDpd.js +1 -0
  298. package/dist/run-DOfMtc9V.js +723 -0
  299. package/dist/run-ticket-BjhTOi6u.d.ts +124 -0
  300. package/dist/run-ticket-sxFI6LAk.js +337 -0
  301. package/dist/{runtime-CB8gQFvS.js → runtime-D3VTAiCA.js} +1 -1
  302. package/dist/{saas-DhpJjnBA.js → saas-FO-Q8oj0.js} +18 -15
  303. package/dist/scan-BOI5tJ-6.js +29 -0
  304. package/dist/{schema-D3MnDMxa.js → schema-B4v0Qrac.js} +106 -10
  305. package/dist/schema-yLuBWWsh.js +130 -0
  306. package/dist/scim/index.d.ts +2 -2
  307. package/dist/scim/index.js +1 -2
  308. package/dist/{scim-BFGBBAqR.js → scim-ClHtpyV3.js} +213 -87
  309. package/dist/{scopes-CVdPrWN-.js → scopes-CUPSjo9q.js} +20 -7
  310. package/dist/server/index.d.ts +13 -134
  311. package/dist/server/index.js +13 -10
  312. package/dist/server-DqCT4CgZ.js +453 -0
  313. package/dist/{create-B1d519XK.d.ts → server-types-BLd4MnBX.d.ts} +89 -70
  314. package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
  315. package/dist/shared-CD11nBbC.js +304 -0
  316. package/dist/{shared-DRu8VFVM.js → shared-DvvFzYXe.js} +8 -9
  317. package/dist/signals-D3NcTKUS.js +32 -0
  318. package/dist/sink-BEZSlMS_.js +957 -0
  319. package/dist/sink-Bj_lDUDq.d.ts +225 -0
  320. package/dist/{skills-Biq5uup3.js → skills-B6lVdD_W.js} +16 -8
  321. package/dist/skills-CTYwkl44.js +51 -0
  322. package/dist/snapshot-CXUWfsNy.js +269 -0
  323. package/dist/{snapshot-cache-D6jLelln.js → snapshot-cache-DZHQ0KF6.js} +11 -5
  324. package/dist/{snapshot-cache-B-LxUahj.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
  325. package/dist/solid/index.d.ts +24 -25
  326. package/dist/solid/index.js +41 -11
  327. package/dist/solid-start/index.d.ts +52 -0
  328. package/dist/solid-start/index.js +49 -0
  329. package/dist/{sources-BdOYLw9j.d.ts → sources-BV9j0DeZ.d.ts} +11 -13
  330. package/dist/{sources-4p0-4xQm.js → sources-vs5dGOsS.js} +147 -142
  331. package/dist/sql-B5T1IL83.js +55 -0
  332. package/dist/src-DLfUWFAI.js +1851 -0
  333. package/dist/ssf/index.d.ts +4 -4
  334. package/dist/ssf/index.js +440 -106
  335. package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
  336. package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
  337. package/dist/storage-C2bWdvJH.js +132 -0
  338. package/dist/{store-DMAWwAJV.js → store-4u_hxjWa.js} +42 -55
  339. package/dist/{store-options-ByhZq1jV.js → store-options-BqEakYRa.js} +38 -24
  340. package/dist/{stores-BT2pSCub.js → stores-BbsD4fAR.js} +7 -3
  341. package/dist/stores-ClZUgeoP.d.ts +30 -0
  342. package/dist/{stream-D1RXubw2.d.ts → stream-7-xmnf3U.d.ts} +2 -2
  343. package/dist/{stream-DDpvynSB.js → stream-CvdUS9V1.js} +10 -2
  344. package/dist/style-DiKWnAvn.js +1 -0
  345. package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
  346. package/dist/subject-BGoM5o8B.js +17 -0
  347. package/dist/{subject-settings-BwBmCdTR.js → subject-settings-CkEwrw3W.js} +23 -5
  348. package/dist/supabase/index.d.ts +23 -106
  349. package/dist/supabase/index.js +5 -4
  350. package/dist/supabase/middleware.d.ts +13 -6
  351. package/dist/supabase/middleware.js +16 -11
  352. package/dist/supabase-9pqI57pW.js +92 -0
  353. package/dist/{supabase-C0qESOa-.js → supabase-Dxlp8A94.js} +124 -247
  354. package/dist/supabase-hook-CXcGpHqq.js +1 -0
  355. package/dist/{supabase-hook-ntETYCQu.js → supabase-hook-DdDQhMlw.js} +1659 -819
  356. package/dist/{supautils-u8jXTGrt.js → supautils-B6HYL9eL.js} +2 -2
  357. package/dist/support-session-C6xJQYut.js +158 -0
  358. package/dist/svelte/Protected.svelte +11 -4
  359. package/dist/svelte/index.d.ts +7 -7
  360. package/dist/svelte/index.js +26 -12
  361. package/dist/svelte/runtime.d.ts +10 -3
  362. package/dist/svelte/runtime.js +4 -3
  363. package/dist/svelte/source.d.ts +7 -7
  364. package/dist/svelte/source.js +5 -5
  365. package/dist/sveltekit/index.d.ts +51 -0
  366. package/dist/sveltekit/index.js +27 -0
  367. package/dist/tanstack-start/index.d.ts +51 -0
  368. package/dist/tanstack-start/index.js +40 -0
  369. package/dist/target-Bw37TFNA.js +51 -0
  370. package/dist/{validity-uOp8UpYn.js → tenancy-DN2QAx9z.js} +6 -42
  371. package/dist/terminal/index.d.ts +11 -9
  372. package/dist/terminal/index.js +36 -316
  373. package/dist/testing/index.d.ts +391 -106
  374. package/dist/testing/index.js +4574 -1286
  375. package/dist/testing/saas/index.d.ts +9 -8
  376. package/dist/testing/saas/index.js +2 -2
  377. package/dist/testing/saas/permissions.d.ts +1 -1
  378. package/dist/testing/saas/permissions.js +1 -2
  379. package/dist/text-BMFRfBqc.js +8 -0
  380. package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
  381. package/dist/thenable-yD7SabqG.js +31 -0
  382. package/dist/time-DkWjdL98.js +71 -0
  383. package/dist/{token-CIWxJOCh.js → token-BLZcjQgt.js} +15 -6
  384. package/dist/tool-refusal-CMLN5xhn.js +41 -0
  385. package/dist/trpc/index.d.ts +12 -9
  386. package/dist/trpc/index.js +18 -17
  387. package/dist/{types-DbjRN55U.d.ts → types-5Ut_pbKy.d.ts} +141 -13
  388. package/dist/types-BNORmDM8.d.ts +172 -0
  389. package/dist/types-BjV-fqcA.d.ts +57 -0
  390. package/dist/{types-QCuYJh4q.d.ts → types-BqAKcRNW.d.ts} +2 -1
  391. package/dist/types-C8-KNsFf.d.ts +107 -0
  392. package/dist/{types-aqOHTHcp.d.ts → types-CCpc2Dcv.d.ts} +77 -17
  393. package/dist/{types-Dnemwd77.d.ts → types-CZTnPFzM.d.ts} +50 -11
  394. package/dist/{types-C97IskBw.d.ts → types-CdlxsYQh.d.ts} +23 -11
  395. package/dist/{types-DxiCGmmd.d.ts → types-ClZaWzfb.d.ts} +9 -6
  396. package/dist/types-DX0LaKTb.d.ts +157 -0
  397. package/dist/types-DiQjupG2.d.ts +332 -0
  398. package/dist/types-DqzsnlSA.js +67 -0
  399. package/dist/types-_sHy8BQf.d.ts +65 -0
  400. package/dist/types-fbZ7JEXr.d.ts +89 -0
  401. package/dist/types-tIgIeIKJ.d.ts +66 -0
  402. package/dist/unplugin/index.d.ts +1 -1
  403. package/dist/unplugin/index.js +2 -2
  404. package/dist/usage-CHOtwL19.js +1 -0
  405. package/dist/usage-DHtE8j4E.js +32 -0
  406. package/dist/{usage-ItS7nLcl.js → usage-T5mXq98v.js} +56 -13
  407. package/dist/{validation-error-Ba264OaJ.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
  408. package/dist/{validation-error-CnjZ4t92.js → validation-error-ZfUHbKvf.js} +1 -1
  409. package/dist/validity-CZ7-y0Cj.js +79 -0
  410. package/dist/{verifier-BxBo6I44.js → verifier-DHuh-okk.js} +68 -21
  411. package/dist/verify-DbCL9bnB.js +1770 -0
  412. package/dist/{version-BvacVTZR.js → version-CEbQ5UeM.js} +4 -3
  413. package/dist/version-DXkYUISx.js +1 -0
  414. package/dist/{views-Soe7bGSC.js → views-DTIIO-oQ.js} +41 -2
  415. package/dist/{permissions-DttnqqxC.d.ts → vocabulary-D6lPdb4Z.d.ts} +120 -29
  416. package/dist/vue/index.d.ts +25 -21
  417. package/dist/vue/index.js +25 -9
  418. package/dist/waiter-BGUtGYoU.js +67 -0
  419. package/dist/waiter-CKy4MQSY.d.ts +36 -0
  420. package/dist/watch-Cb-NcaUw.js +1 -0
  421. package/dist/{watch-DVBJ9cBq.js → watch-CszoTJMq.js} +47 -8
  422. package/dist/webmcp/index.d.ts +2 -2
  423. package/dist/webmcp/index.js +13 -37
  424. package/dist/where-scope-Dv-WTP-w.js +306 -0
  425. package/dist/who-can-D0QoYbEb.js +364 -0
  426. package/dist/wire-delegation-Cv3W2eaM.js +36 -0
  427. package/dist/wire-denial-C7PaVYEM.js +27 -0
  428. package/dist/workflow/index.d.ts +5 -0
  429. package/dist/workflow/index.js +223 -0
  430. package/dist/workflow-sdk/index.d.ts +56 -0
  431. package/dist/workflow-sdk/index.js +78 -0
  432. package/dist/wrap-Bd1Tejur.d.ts +15 -0
  433. package/dist/wrap-gX61EtpB.js +27 -0
  434. package/package.json +140 -41
  435. package/schemas/access-event-v1.json +118 -0
  436. package/schemas/approval-request-v1.json +34 -1
  437. package/schemas/approval-signature-v1.json +94 -0
  438. package/schemas/automation-event-v1.json +113 -0
  439. package/schemas/capability-v1.json +84 -0
  440. package/schemas/catalog-event-v1.json +87 -0
  441. package/schemas/catalog-v1.json +129 -12
  442. package/schemas/cli-commands-v1.json +164 -0
  443. package/schemas/cli-result-v1.json +96 -0
  444. package/schemas/cloud-api-v1.json +5407 -0
  445. package/schemas/connector-v1.json +408 -0
  446. package/schemas/credential-event-v1.json +81 -0
  447. package/schemas/credential-v1.json +134 -0
  448. package/schemas/decision-event-v1.json +288 -0
  449. package/schemas/delivery-event-v1.json +117 -0
  450. package/schemas/directory-event-v1.json +85 -0
  451. package/schemas/evidence-export-v1.json +54 -0
  452. package/schemas/membership-event-v1.json +93 -0
  453. package/schemas/policy-v1.json +68 -0
  454. package/schemas/pushed-policy-v1.json +236 -0
  455. package/schemas/run-v1.json +162 -0
  456. package/schemas/snapshot-v1.json +138 -0
  457. package/schemas/supabase-claims-v1.json +4 -4
  458. package/schemas/supabase-manifest-v1.json +5 -1
  459. package/schemas/support-session-v1.json +111 -0
  460. package/skills/permdock/SKILL.md +16 -12
  461. package/skills/permdock-agents/SKILL.md +40 -23
  462. package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
  463. package/skills/permdock-agents/references/runtimes.md +22 -18
  464. package/skills/permdock-approvals/SKILL.md +29 -13
  465. package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
  466. package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
  467. package/skills/permdock-audit/SKILL.md +3 -3
  468. package/skills/permdock-credentials/SKILL.md +5 -5
  469. package/skills/permdock-credentials/references/tokens-keys-links.md +19 -10
  470. package/skills/permdock-data/SKILL.md +6 -6
  471. package/skills/permdock-data/references/queries-and-rls.md +13 -8
  472. package/skills/permdock-data/references/relationships.md +3 -3
  473. package/skills/permdock-tenancy/SKILL.md +20 -7
  474. package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
  475. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
  476. package/skills/permdock-wire/SKILL.md +18 -12
  477. package/skills/permdock-wire/references/adapters.md +146 -50
  478. package/skills/permdock-wire/references/policy-options.md +15 -6
  479. package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
  480. package/dist/approvals-DbYAuNkG.js +0 -224
  481. package/dist/arazzo-C9chp3ST.js +0 -54
  482. package/dist/bind-C_ob3LKa.d.ts +0 -25
  483. package/dist/catalog-CRW5Mx_B.js +0 -2
  484. package/dist/catalog-CYj-mX2O.js +0 -48
  485. package/dist/catalog-DWF5cYqB.js +0 -55
  486. package/dist/cloud-CfwZ39Rl.js +0 -50
  487. package/dist/cloud-DWLXO2af.js +0 -118
  488. package/dist/collect-CHB22Sx4.js +0 -83
  489. package/dist/collect-DSWOk19R.js +0 -2
  490. package/dist/commands-BeaGNj_o.js +0 -97
  491. package/dist/config-ir40y8m0.js +0 -36
  492. package/dist/create-CMwIl-w2.js +0 -253
  493. package/dist/delegation-D8pUEuce.js +0 -103
  494. package/dist/diff-C9RDjjhs.js +0 -48
  495. package/dist/doctor-Djh6JDEk.js +0 -53
  496. package/dist/doctor-DvH0IQff.js +0 -1194
  497. package/dist/doctor-collect-CjdO0wQX.js +0 -665
  498. package/dist/duration-xK2jGFVc.js +0 -25
  499. package/dist/errors-CWfoNg9N.js +0 -47
  500. package/dist/errors-DRnGZHzF.js +0 -30
  501. package/dist/evaluation-items-CfCCejQd.js +0 -40
  502. package/dist/expiry-BoBJ8Tvc.js +0 -7
  503. package/dist/fields-BMl1RxoX.js +0 -26
  504. package/dist/grantee-Cv5Sogfv.js +0 -602
  505. package/dist/headers-BZSDieNT.js +0 -6
  506. package/dist/headers-Cf-zWvsO.d.ts +0 -6
  507. package/dist/ids-DC4V4CFu.js +0 -18
  508. package/dist/index-0nNqHspG.d.ts +0 -6
  509. package/dist/index-BNc7Wer_.d.ts +0 -483
  510. package/dist/index-C7Tw7MaW.d.ts +0 -201
  511. package/dist/instance-options-Dhhcnm3y.js +0 -22
  512. package/dist/load-DwJUafYN.js +0 -2
  513. package/dist/manifest-iaoBXHKc.js +0 -783
  514. package/dist/map-AcxK9o_D.js +0 -147
  515. package/dist/may-use-DndQ5tQ-.js +0 -77
  516. package/dist/openapi-CQTsgKoB.js +0 -164
  517. package/dist/permdock-CbgvLnuo.js +0 -3479
  518. package/dist/permissions-DVoF6dMt.js +0 -662
  519. package/dist/policy-xyWg7QdR.js +0 -1122
  520. package/dist/powersync-CrBX8hY6.js +0 -2
  521. package/dist/powersync-DE19b9dT.js +0 -62
  522. package/dist/protected-BdnIEFkY.d.ts +0 -27
  523. package/dist/protected-xAr24FEC.d.ts +0 -40
  524. package/dist/relations-cjOL01hZ.js +0 -505
  525. package/dist/rls-P-BeBx0n.js +0 -238
  526. package/dist/rls-graph-CHwx0V8q.js +0 -435
  527. package/dist/rls-ownership-DcYlZ09B.js +0 -843
  528. package/dist/rls-shared-Cewd_-zI.js +0 -495
  529. package/dist/rls-verify-CMv9H3wV.js +0 -746
  530. package/dist/run-BWc9qqvE.js +0 -174
  531. package/dist/server-DlZ28Oz5.js +0 -268
  532. package/dist/sink-B1fZzIMf.d.ts +0 -104
  533. package/dist/sink-Bd9PSyfq.js +0 -141
  534. package/dist/skills-C5CbhhpG.js +0 -56
  535. package/dist/snapshot-Enxd0n-s.js +0 -975
  536. package/dist/sql-xdg5f4Fi.js +0 -27
  537. package/dist/src-BDwEZWrZ.js +0 -568
  538. package/dist/store-jOBYpiXC.d.ts +0 -36
  539. package/dist/stores-C0IMQrGI.d.ts +0 -52
  540. package/dist/subject-C6dLxqHU.js +0 -24
  541. package/dist/supabase-config-Bj3iDH2I.js +0 -472
  542. package/dist/supabase-hook-gd3s8bxB.js +0 -2
  543. package/dist/supabase-s4o9s1O1.js +0 -83
  544. package/dist/thenable-okc2xDsj.js +0 -10
  545. package/dist/types-BnIEz1sU.d.ts +0 -48
  546. package/dist/types-Bvc4oWT6.d.ts +0 -9
  547. package/dist/types-CKNSyIf_.d.ts +0 -52
  548. package/dist/types-Cq_H8N_X.d.ts +0 -197
  549. package/dist/usage-B0YuTQRO.js +0 -42
  550. package/dist/usage-DorAJiU_.js +0 -2
  551. package/dist/vocabulary-DA8a8zif.d.ts +0 -56
  552. package/dist/watch-BwxLTYMZ.js +0 -2
@@ -1,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-Cq_H8N_X.js";
2
- import { t as memoryReplayStore } from "../replay-CYyiLiwO.js";
3
- import { t as createPermDock } from "../index-0nNqHspG.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,66 +1,10 @@
1
- import { t as compact } from "../compact-y6vfu2_f.js";
2
- import { t as cancelApprovals } from "../helpers-H_KARDVC.js";
3
- import { i as issuerFromDiscovery, t as joseTokenVerifier } from "../verifier-BxBo6I44.js";
4
- import { t as memoryReplayStore } from "../replay-BsOyTrdV.js";
1
+ import { r as isRecord, t as compact } from "../compact-CAf557ZB.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
- //#region src/ssf/wire.ts
7
- const SET_TYP = "secevent+jwt";
8
- const LOGOUT_TYP = "logout+jwt";
9
- function jsonResponse(status, body) {
10
- return new Response(JSON.stringify(body), {
11
- status,
12
- headers: { "content-type": "application/json" }
13
- });
14
- }
15
- function rfc8935(status, err, description) {
16
- return jsonResponse(status, {
17
- err,
18
- description
19
- });
20
- }
21
- function errForCause(cause) {
22
- switch (cause) {
23
- case "invalid-signature":
24
- case "unknown-kid":
25
- case "alg-not-allowed":
26
- case "alg-none": return "invalid_key";
27
- case "wrong-issuer": return "invalid_issuer";
28
- case "wrong-audience": return "invalid_audience";
29
- case "expired":
30
- case "not-yet-valid":
31
- case "wrong-token-type":
32
- case "malformed":
33
- case "encrypted-token":
34
- case "dpop-proof-invalid":
35
- case "mtls-binding-mismatch":
36
- case "sender-constraint-required":
37
- case "token-in-query":
38
- case "invalid-claims":
39
- case "invalid-chain":
40
- case "jwks-unavailable":
41
- case "discovery-unavailable":
42
- case "discovery-mismatch": return "invalid_request";
43
- default: return cause;
44
- }
45
- }
46
- function isRecord(value) {
47
- return value !== null && typeof value === "object" && !Array.isArray(value);
48
- }
49
- function contentType(request) {
50
- return (request.headers.get("content-type") ?? "").split(";", 1)[0]?.trim().toLowerCase() ?? "";
51
- }
52
- function parseEvery(every) {
53
- if (typeof every === "number") {
54
- if (!Number.isFinite(every) || every <= 0) throw new TypeError("PermDock: poll every must be a positive interval.");
55
- return every;
56
- }
57
- const match = /^(\d+)(ms|s|m)$/u.exec(every);
58
- if (match?.[2] === void 0) throw new TypeError(`PermDock: invalid poll interval '${every}'.`);
59
- const unit = match[2];
60
- const scale = unit === "ms" ? 1 : unit === "s" ? 1e3 : 6e4;
61
- return Number(match[1]) * scale;
62
- }
63
- //#endregion
64
8
  //#region src/ssf/claims.ts
65
9
  function asSubject(mapped, session, issuer) {
66
10
  if (typeof mapped === "string") return compact({
@@ -104,18 +48,39 @@ function subjectSession(subject) {
104
48
  //#endregion
105
49
  //#region src/ssf/events.ts
106
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";
107
53
  const CAEP_PREFIX = "https://schemas.openid.net/secevent/caep/event-type/";
108
- const CAEP_NAMES = /* @__PURE__ */ new Set([
54
+ const RISC_PREFIX = "https://schemas.openid.net/secevent/risc/event-type/";
55
+ const CAEP_NAMES = [
109
56
  "session-revoked",
110
57
  "credential-change",
111
58
  "assurance-level-change",
112
59
  "token-claims-change",
113
- "device-compliance-change"
114
- ]);
115
- function caepName(uri) {
116
- if (!uri.startsWith(CAEP_PREFIX)) return;
117
- const name = uri.slice(52);
118
- 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);
119
84
  }
120
85
  //#endregion
121
86
  //#region src/ssf/poll.ts
@@ -180,18 +145,84 @@ async function pollOnce(input) {
180
145
  return processed;
181
146
  }
182
147
  //#endregion
148
+ //#region src/ssf/wire.ts
149
+ const SET_TYP = "secevent+jwt";
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
+ };
158
+ function jsonResponse(status, body) {
159
+ return new Response(JSON.stringify(body), {
160
+ status,
161
+ headers: { "content-type": "application/json" }
162
+ });
163
+ }
164
+ function rfc8935(status, err, description) {
165
+ return jsonResponse(status, {
166
+ err,
167
+ description
168
+ });
169
+ }
170
+ function errForCause(cause) {
171
+ switch (cause) {
172
+ case "invalid-signature":
173
+ case "unknown-kid":
174
+ case "alg-not-allowed":
175
+ case "alg-none": return "invalid_key";
176
+ case "wrong-issuer": return "invalid_issuer";
177
+ case "wrong-audience": return "invalid_audience";
178
+ case "expired":
179
+ case "not-yet-valid":
180
+ case "wrong-token-type":
181
+ case "malformed":
182
+ case "encrypted-token":
183
+ case "dpop-proof-invalid":
184
+ case "mtls-binding-mismatch":
185
+ case "sender-constraint-required":
186
+ case "token-in-query":
187
+ case "invalid-claims":
188
+ case "invalid-chain":
189
+ case "jwks-unavailable":
190
+ case "discovery-unavailable":
191
+ case "discovery-mismatch": return "invalid_request";
192
+ default: return cause;
193
+ }
194
+ }
195
+ function contentType(request) {
196
+ return (request.headers.get("content-type") ?? "").split(";", 1)[0]?.trim().toLowerCase() ?? "";
197
+ }
198
+ function parseEvery(every) {
199
+ if (typeof every === "number") {
200
+ if (!Number.isFinite(every) || every <= 0) throw new TypeError("PermDock: poll every must be a positive interval.");
201
+ return every;
202
+ }
203
+ const match = /^(\d+)(ms|s|m)$/u.exec(every);
204
+ if (match?.[2] === void 0) throw new TypeError(`PermDock: invalid poll interval '${every}'.`);
205
+ const unit = match[2];
206
+ const scale = unit === "ms" ? 1 : unit === "s" ? 1e3 : 6e4;
207
+ return Number(match[1]) * scale;
208
+ }
209
+ //#endregion
183
210
  //#region src/ssf/receiver.ts
211
+ /** Seconds a SET without `exp` stays acceptable after its `iat`. */
212
+ const DEFAULT_SET_MAX_AGE = 86400;
184
213
  const CHANGED_EVENTS = /* @__PURE__ */ new Set([
185
214
  "credential-change",
186
215
  "assurance-level-change",
187
216
  "token-claims-change"
188
217
  ]);
189
- function replayExpiresAt(claims, clockTolerance = 0) {
190
- if (typeof claims["exp"] === "number") return claims["exp"];
191
- if (typeof claims["iat"] === "number") {
192
- const until = claims["iat"] + clockTolerance;
193
- return until > Date.now() / 1e3 ? until : void 0;
194
- }
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;
195
226
  }
196
227
  function replayKey(issuer, jti, event) {
197
228
  return JSON.stringify(event === void 0 ? [issuer ?? null, jti] : [
@@ -231,6 +262,12 @@ function createReceiver(config) {
231
262
  description: "missing iat",
232
263
  cause: "invalid-claims"
233
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
+ };
234
271
  return result;
235
272
  }
236
273
  async function resolveSubject(setSubject, session, issuer) {
@@ -259,21 +296,23 @@ function createReceiver(config) {
259
296
  async function publishRevocation(input) {
260
297
  const feed = config.revocations;
261
298
  if (feed === void 0) return;
262
- 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;
263
301
  if (kind === void 0) return;
264
302
  try {
265
303
  await feed.revoke(compact({
266
304
  principal: input.subject.id,
267
- session: kind === "session-revoked" ? input.subject.session : void 0,
305
+ session: kind === "session-revoked" && !account ? input.subject.session : void 0,
268
306
  kind
269
307
  }));
270
308
  } catch {}
271
309
  }
272
310
  async function cancelSessionApprovals(input) {
273
- 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;
274
313
  const count = await cancelApprovals(config.approvals, compact({
275
314
  principalId: input.subject.id,
276
- session: input.subject.session
315
+ session: account ? void 0 : input.subject.session
277
316
  }), {
278
317
  by: "ssf",
279
318
  note: input.jti
@@ -286,7 +325,7 @@ function createReceiver(config) {
286
325
  });
287
326
  }
288
327
  async function dispatch(type, input) {
289
- 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;
290
329
  const wildcard = config.onEvent["*"];
291
330
  const handler = named ?? wildcard;
292
331
  if (handler === void 0) {
@@ -304,11 +343,7 @@ function createReceiver(config) {
304
343
  try {
305
344
  await handler(input);
306
345
  } catch {
307
- return {
308
- ok: false,
309
- err: "invalid_request",
310
- description: "handler failed"
311
- };
346
+ return HANDLER_FAILED;
312
347
  }
313
348
  emit({
314
349
  type,
@@ -320,6 +355,25 @@ function createReceiver(config) {
320
355
  await cancelSessionApprovals(input);
321
356
  return { ok: true };
322
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
+ }
323
377
  async function dispatchEvents(entries, run) {
324
378
  const [head, ...tail] = entries;
325
379
  if (head === void 0) return { ok: true };
@@ -328,8 +382,14 @@ function createReceiver(config) {
328
382
  const eventKey = replayKey(issuer, jti, uri);
329
383
  if (run.perEvent && await config.replay.seen(eventKey)) return dispatchEvents(tail, run);
330
384
  const payload = isRecord(raw) ? raw : {};
331
- const type = caepName(uri) ?? uri;
332
- 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) {
333
393
  emit({
334
394
  type,
335
395
  transmitter: issuer,
@@ -383,7 +443,7 @@ function createReceiver(config) {
383
443
  cause: "invalid-claims"
384
444
  };
385
445
  const key = replayKey(issuer, jti);
386
- const expiresAt = replayExpiresAt(verified.claims, config.clockTolerance);
446
+ const expiresAt = replayExpiresAt(verified.claims, config.clockTolerance, config.maxTokenAge);
387
447
  if (!await claimDelivery(key, expiresAt)) {
388
448
  emit({
389
449
  type: "replay",
@@ -394,11 +454,7 @@ function createReceiver(config) {
394
454
  return { ok: true };
395
455
  }
396
456
  const entries = Object.entries(events);
397
- let dispatched = {
398
- ok: false,
399
- err: "invalid_request",
400
- description: "handler failed"
401
- };
457
+ let dispatched = HANDLER_FAILED;
402
458
  try {
403
459
  dispatched = await dispatchEvents(entries, {
404
460
  issuer,
@@ -450,7 +506,7 @@ function createReceiver(config) {
450
506
  const jti = verified.claims["jti"];
451
507
  const issuer = typeof verified.claims.iss === "string" ? verified.claims.iss : void 0;
452
508
  const key = replayKey(issuer, jti);
453
- const expiresAt = replayExpiresAt(verified.claims, config.clockTolerance);
509
+ const expiresAt = replayExpiresAt(verified.claims, config.clockTolerance, config.maxTokenAge);
454
510
  if (!await claimDelivery(key, expiresAt)) {
455
511
  emit({
456
512
  type: "replay",
@@ -460,11 +516,7 @@ function createReceiver(config) {
460
516
  });
461
517
  return { ok: true };
462
518
  }
463
- let dispatched = {
464
- ok: false,
465
- err: "invalid_request",
466
- description: "handler failed"
467
- };
519
+ let dispatched = HANDLER_FAILED;
468
520
  try {
469
521
  dispatched = await dispatchLogout(verified.claims, {
470
522
  issuer,
@@ -508,20 +560,28 @@ function createReceiver(config) {
508
560
  }
509
561
  return {
510
562
  async push(request) {
511
- 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
+ });
512
567
  if (contentType(request) !== "application/secevent+jwt") return rfc8935(400, "invalid_request", "application/secevent+jwt required");
513
- 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();
514
571
  if (token.length === 0) return rfc8935(400, "invalid_request", "empty body");
515
572
  const result = await ingestSet(token);
516
- 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);
517
574
  return new Response(null, { status: 202 });
518
575
  },
519
576
  async logout(request) {
520
577
  if (request.method !== "POST") return jsonResponse(400, { error: "invalid_request" });
521
578
  if (contentType(request) !== "application/x-www-form-urlencoded") return jsonResponse(400, { error: "invalid_request" });
522
- 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");
523
582
  if (token === null || token.length === 0) return jsonResponse(400, { error: "invalid_request" });
524
- 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" });
525
585
  return new Response(null, { status: 200 });
526
586
  },
527
587
  poll(options) {
@@ -589,8 +649,282 @@ function createPermDock(policy, options) {
589
649
  replay: options.replay ?? memoryReplayStore(),
590
650
  approvals: options.approvals,
591
651
  revocations: options.revocations,
592
- clockTolerance: options.clockTolerance
652
+ clockTolerance: options.clockTolerance,
653
+ maxTokenAge: options.maxTokenAge
593
654
  })) };
594
655
  }
595
656
  //#endregion
596
- 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 };