@openclaw/matrix 2026.9.5 → 2026.9.6

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 (423) hide show
  1. package/dist/.setup/{account-selection-5koohRSQ.mjs → account-selection-BHkfU1eC.mjs} +10 -1
  2. package/dist/.setup/{accounts-BF5hyc-1.mjs → accounts-iThMol10.mjs} +38 -37
  3. package/dist/.setup/{approval-handler.runtime-CoZCYGUH.mjs → approval-handler.runtime-9W7R2ZMq.mjs} +6 -6
  4. package/dist/.setup/{approval-ids-CZOcdJ-5.mjs → approval-ids-j08q8LEG.mjs} +1 -1
  5. package/dist/.setup/{approval-reaction-auth-B51E4ZDa.mjs → approval-reaction-auth-DMVE7VSp.mjs} +7 -3
  6. package/dist/.setup/{channel-q6TBKEiG.mjs → channel-ConuJfxT.mjs} +43 -30
  7. package/dist/.setup/{channel.runtime-DcDBdxe6.mjs → channel.runtime-CnxR2JUK.mjs} +6 -6
  8. package/dist/.setup/{channel.setup-DZQ5rf9k.mjs → channel.setup-C6KvBV8l.mjs} +3 -3
  9. package/dist/.setup/{cli-Cx_cNaXN.mjs → cli-O196sg8g.mjs} +11 -11
  10. package/dist/.setup/{cli-metadata-DHU1H-Vr.mjs → cli-metadata-DFHQj5XR.mjs} +1 -1
  11. package/dist/.setup/{client-By2B3Wz4.mjs → client-C2yVkVdw.mjs} +2 -2
  12. package/dist/.setup/{client-DsJUnWlV.mjs → client-ChrXpxos.mjs} +84 -25
  13. package/dist/.setup/{client-bootstrap-DGX0f-4x.mjs → client-bootstrap-BSnUAoz1.mjs} +1 -1
  14. package/dist/.setup/{create-client-DQXAZjTw.mjs → create-client-CHxcron_.mjs} +13 -7
  15. package/dist/.setup/{credentials-CeRipapZ.mjs → credentials-BGKfiaJW.mjs} +1 -1
  16. package/dist/.setup/{credentials-read-Dp7BoEdm.mjs → credentials-read-Q5sHkkHv.mjs} +9 -1
  17. package/dist/.setup/{credentials-write.runtime-M_bUf3rL.mjs → credentials-write.runtime-DxbXh-pK.mjs} +1 -1
  18. package/dist/.setup/{crypto-runtime-9oxuU30y.mjs → crypto-runtime-D9qn_Pbj.mjs} +3 -3
  19. package/dist/.setup/{crypto-snapshot-doctor.runtime-DXpLbQ7y.mjs → crypto-snapshot-doctor.runtime-CMWa1d9Y.mjs} +2 -2
  20. package/dist/.setup/{directory-live-CatwztQc.mjs → directory-live-CxqkcYbT.mjs} +2 -2
  21. package/dist/.setup/{draft-stream-DIFZDNrb.mjs → draft-stream-y0Vq5f38.mjs} +21 -5
  22. package/dist/.setup/{encryption-guidance-DYEbeYj-.mjs → encryption-guidance-CMWXiBzJ.mjs} +1 -1
  23. package/dist/.setup/file-sync-store-CsalA4yI.mjs +213 -0
  24. package/dist/.setup/{http-client-BJjo-iw5.mjs → http-client-Bi6uKmzh.mjs} +17 -2
  25. package/dist/.setup/{idb-persistence-CIfFUjP3.mjs → idb-persistence-c8uxcofH.mjs} +1 -1
  26. package/dist/.setup/{messages-SW0NPYnR.mjs → messages-COuAcrz-.mjs} +10 -3
  27. package/dist/.setup/{monitor-DQfYX5rA.mjs → monitor-CzE3myC_.mjs} +127 -233
  28. package/dist/.setup/{outbound-DRWtSUe-.mjs → outbound-B508VPBM.mjs} +1 -1
  29. package/dist/.setup/probe.runtime-C-NMeYk2.mjs +2 -0
  30. package/dist/.setup/{profile-update-DPttQz3-.mjs → profile-update-DrblJttE.mjs} +1 -1
  31. package/dist/.setup/{reaction-events-CdAk_rh_.mjs → reaction-events-BvZmhjLC.mjs} +4 -3
  32. package/dist/.setup/{resolve-targets-drjgAdIe.mjs → resolve-targets-BLz748lX.mjs} +1 -1
  33. package/dist/.setup/{resolver.runtime-Ci6ddcPh.mjs → resolver.runtime-CuLQ2uHe.mjs} +1 -1
  34. package/dist/.setup/{room-info-DHd1j3qM.mjs → room-info-DTyP1k5g.mjs} +3 -3
  35. package/dist/.setup/{sdk-BkKE4ANj.mjs → sdk-rqFjgltR.mjs} +6 -225
  36. package/dist/.setup/{send-h0gZ_-qk.mjs → send-aVdC5NJO.mjs} +23 -26
  37. package/dist/.setup/{setup-bootstrap-BYgBD504.mjs → setup-bootstrap-A_WGFq1Y.mjs} +2 -2
  38. package/dist/.setup/{setup-core-BUcDAM7q.mjs → setup-core-D2hMbIi3.mjs} +3 -3
  39. package/dist/.setup/{setup-plugin-api-DoTm4v2q.mjs → setup-plugin-api-JiRgm8s6.mjs} +1 -1
  40. package/dist/.setup/{setup-surface-V_Q-enq-.mjs → setup-surface-BL3ha1l-.mjs} +6 -6
  41. package/dist/.setup/{startup-verification-Bq5qeEGn.mjs → startup-verification-Cp1Gf7pM.mjs} +7 -7
  42. package/dist/.setup/{storage-DJ-oUgmX.mjs → storage-BXaFc0S4.mjs} +75 -86
  43. package/dist/.setup/{storage-metadata-BQJjHC_i.mjs → storage-metadata-fHN6Df2m.mjs} +29 -45
  44. package/dist/.setup/{sync-cache-state-CFiZIPhA.mjs → sync-cache-state-BMtGMxU1.mjs} +30 -43
  45. package/dist/.setup/{thread-bindings-Hy96ujd3.mjs → thread-bindings-JlnLDfPM.mjs} +5 -5
  46. package/dist/.setup/{tool-actions.runtime-Dckttu43.mjs → tool-actions.runtime-REzYTNxm.mjs} +16 -8
  47. package/dist/.setup/{verification-CKqBZ9mI.mjs → verification-0o8MOW9T.mjs} +2 -2
  48. package/dist/api.js +5 -5
  49. package/dist/channel-plugin-api.js +1 -1
  50. package/dist/cli-metadata.js +1 -1
  51. package/dist/contract-api.js +2 -2
  52. package/dist/doctor-contract-api.js +6 -6
  53. package/dist/helper-api.js +2 -2
  54. package/dist/index.js +1 -1
  55. package/dist/plugin-entry.handlers.runtime.js +1 -1
  56. package/dist/runtime-api.js +1 -1
  57. package/dist/session-binding-contract-api.js +1 -1
  58. package/dist/setup-entry.js +1 -1
  59. package/dist/setup-plugin-api.js +1 -1
  60. package/node_modules/markdown-it/node_modules/argparse/lib/argparse.js +18 -2
  61. package/node_modules/markdown-it/node_modules/argparse/package.json +1 -1
  62. package/node_modules/matrix-js-sdk/node_modules/@babel/runtime/package.json +1 -1
  63. package/node_modules/music-metadata/node_modules/file-type/package.json +3 -2
  64. package/node_modules/music-metadata/node_modules/file-type/readme.md +3 -0
  65. package/node_modules/music-metadata/node_modules/file-type/source/index.js +28 -1
  66. package/node_modules/music-metadata/node_modules/file-type/source/supported.js +2 -0
  67. package/node_modules/zod/README.md +2 -2
  68. package/node_modules/zod/compile.cjs +19 -0
  69. package/node_modules/zod/index.cjs +19 -0
  70. package/node_modules/zod/locales/index.cjs +19 -0
  71. package/node_modules/zod/mini/index.cjs +19 -0
  72. package/node_modules/zod/package.json +8 -7
  73. package/node_modules/zod/src/v3/helpers/errorUtil.ts +1 -1
  74. package/node_modules/zod/src/v4/classic/external.ts +2 -0
  75. package/node_modules/zod/src/v4/classic/from-json-schema.ts +248 -25
  76. package/node_modules/zod/src/v4/classic/schemas.ts +243 -168
  77. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +60 -9
  78. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +6 -0
  79. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +2 -2
  80. package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +265 -0
  81. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +112 -6
  82. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +9 -0
  83. package/node_modules/zod/src/v4/classic/tests/error.test.ts +130 -1
  84. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +157 -0
  85. package/node_modules/zod/src/v4/classic/tests/iban.test.ts +81 -0
  86. package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +40 -2
  87. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +27 -7
  88. package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +88 -56
  89. package/node_modules/zod/src/v4/classic/tests/number.test.ts +39 -0
  90. package/node_modules/zod/src/v4/classic/tests/object.test.ts +56 -0
  91. package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +3 -2
  92. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +70 -0
  93. package/node_modules/zod/src/v4/classic/tests/properties.test.ts +141 -0
  94. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +46 -1
  95. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +19 -0
  96. package/node_modules/zod/src/v4/classic/tests/string.test.ts +95 -1
  97. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +33 -1
  98. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +234 -38
  99. package/node_modules/zod/src/v4/classic/tests/validate.test.ts +569 -0
  100. package/node_modules/zod/src/v4/core/api.ts +44 -28
  101. package/node_modules/zod/src/v4/core/checks.ts +62 -102
  102. package/node_modules/zod/src/v4/core/compile.ts +218 -93
  103. package/node_modules/zod/src/v4/core/core.ts +1 -3
  104. package/node_modules/zod/src/v4/core/doc.ts +6 -2
  105. package/node_modules/zod/src/v4/core/errors.ts +3 -6
  106. package/node_modules/zod/src/v4/core/json-schema-generator.ts +2 -2
  107. package/node_modules/zod/src/v4/core/json-schema-processors.ts +185 -81
  108. package/node_modules/zod/src/v4/core/memoizer.ts +75 -28
  109. package/node_modules/zod/src/v4/core/parse.ts +37 -16
  110. package/node_modules/zod/src/v4/core/regexes.ts +14 -4
  111. package/node_modules/zod/src/v4/core/schemas.ts +296 -132
  112. package/node_modules/zod/src/v4/core/tests/cached.test.ts +54 -0
  113. package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +35 -0
  114. package/node_modules/zod/src/v4/core/tests/compile-generative.test.ts +445 -0
  115. package/node_modules/zod/src/v4/core/tests/compile.test.ts +399 -2
  116. package/node_modules/zod/src/v4/core/tests/email-regex.test.ts +140 -0
  117. package/node_modules/zod/src/v4/core/tests/locales/tg.test.ts +85 -0
  118. package/node_modules/zod/src/v4/core/tests/polyfill-collision.test.ts +46 -0
  119. package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +118 -16
  120. package/node_modules/zod/src/v4/core/to-json-schema.ts +9 -7
  121. package/node_modules/zod/src/v4/core/util.ts +218 -147
  122. package/node_modules/zod/src/v4/core/versions.ts +2 -2
  123. package/node_modules/zod/src/v4/locales/ar.ts +2 -0
  124. package/node_modules/zod/src/v4/locales/az.ts +2 -0
  125. package/node_modules/zod/src/v4/locales/be.ts +2 -0
  126. package/node_modules/zod/src/v4/locales/bg.ts +2 -0
  127. package/node_modules/zod/src/v4/locales/bn.ts +2 -0
  128. package/node_modules/zod/src/v4/locales/ca.ts +2 -0
  129. package/node_modules/zod/src/v4/locales/ckb.ts +2 -0
  130. package/node_modules/zod/src/v4/locales/cs.ts +2 -0
  131. package/node_modules/zod/src/v4/locales/da.ts +2 -0
  132. package/node_modules/zod/src/v4/locales/de.ts +2 -0
  133. package/node_modules/zod/src/v4/locales/el.ts +2 -0
  134. package/node_modules/zod/src/v4/locales/en.ts +2 -0
  135. package/node_modules/zod/src/v4/locales/eo.ts +2 -0
  136. package/node_modules/zod/src/v4/locales/es.ts +2 -0
  137. package/node_modules/zod/src/v4/locales/fa.ts +2 -0
  138. package/node_modules/zod/src/v4/locales/fi.ts +2 -0
  139. package/node_modules/zod/src/v4/locales/fr-CA.ts +2 -0
  140. package/node_modules/zod/src/v4/locales/fr.ts +2 -0
  141. package/node_modules/zod/src/v4/locales/gu.ts +2 -0
  142. package/node_modules/zod/src/v4/locales/he.ts +2 -0
  143. package/node_modules/zod/src/v4/locales/hi.ts +2 -0
  144. package/node_modules/zod/src/v4/locales/hr.ts +2 -0
  145. package/node_modules/zod/src/v4/locales/hu.ts +2 -0
  146. package/node_modules/zod/src/v4/locales/hy.ts +2 -0
  147. package/node_modules/zod/src/v4/locales/id.ts +2 -0
  148. package/node_modules/zod/src/v4/locales/index.ts +1 -0
  149. package/node_modules/zod/src/v4/locales/is.ts +2 -0
  150. package/node_modules/zod/src/v4/locales/it.ts +2 -0
  151. package/node_modules/zod/src/v4/locales/ja.ts +2 -0
  152. package/node_modules/zod/src/v4/locales/ka.ts +2 -0
  153. package/node_modules/zod/src/v4/locales/km.ts +2 -0
  154. package/node_modules/zod/src/v4/locales/kn.ts +2 -0
  155. package/node_modules/zod/src/v4/locales/ko.ts +2 -0
  156. package/node_modules/zod/src/v4/locales/lt.ts +2 -0
  157. package/node_modules/zod/src/v4/locales/mk.ts +2 -0
  158. package/node_modules/zod/src/v4/locales/ms.ts +2 -0
  159. package/node_modules/zod/src/v4/locales/ne.ts +2 -0
  160. package/node_modules/zod/src/v4/locales/nl.ts +2 -0
  161. package/node_modules/zod/src/v4/locales/nn.ts +2 -0
  162. package/node_modules/zod/src/v4/locales/no.ts +2 -0
  163. package/node_modules/zod/src/v4/locales/ota.ts +2 -0
  164. package/node_modules/zod/src/v4/locales/pl.ts +2 -0
  165. package/node_modules/zod/src/v4/locales/ps.ts +2 -0
  166. package/node_modules/zod/src/v4/locales/pt-BR.ts +2 -0
  167. package/node_modules/zod/src/v4/locales/pt.ts +2 -0
  168. package/node_modules/zod/src/v4/locales/ro.ts +2 -0
  169. package/node_modules/zod/src/v4/locales/ru.ts +2 -0
  170. package/node_modules/zod/src/v4/locales/sk.ts +2 -0
  171. package/node_modules/zod/src/v4/locales/sl.ts +2 -0
  172. package/node_modules/zod/src/v4/locales/sv.ts +2 -0
  173. package/node_modules/zod/src/v4/locales/ta.ts +2 -0
  174. package/node_modules/zod/src/v4/locales/tg.ts +135 -0
  175. package/node_modules/zod/src/v4/locales/th.ts +2 -0
  176. package/node_modules/zod/src/v4/locales/tk.ts +2 -0
  177. package/node_modules/zod/src/v4/locales/tr.ts +2 -0
  178. package/node_modules/zod/src/v4/locales/uk.ts +2 -0
  179. package/node_modules/zod/src/v4/locales/ur.ts +2 -0
  180. package/node_modules/zod/src/v4/locales/uz.ts +2 -0
  181. package/node_modules/zod/src/v4/locales/vi.ts +2 -0
  182. package/node_modules/zod/src/v4/locales/yo.ts +2 -0
  183. package/node_modules/zod/src/v4/locales/zh-CN.ts +2 -0
  184. package/node_modules/zod/src/v4/locales/zh-TW.ts +2 -0
  185. package/node_modules/zod/src/v4/mini/external.ts +2 -0
  186. package/node_modules/zod/src/v4/mini/schemas.ts +32 -7
  187. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +1 -1
  188. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +11 -17
  189. package/node_modules/zod/src/v4/mini/tests/index.test.ts +86 -0
  190. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +16 -0
  191. package/node_modules/zod/src/v4/mini/tests/string.test.ts +23 -0
  192. package/node_modules/zod/v3/ZodError.cjs +19 -0
  193. package/node_modules/zod/v3/errors.cjs +19 -0
  194. package/node_modules/zod/v3/external.cjs +19 -0
  195. package/node_modules/zod/v3/helpers/enumUtil.cjs +19 -0
  196. package/node_modules/zod/v3/helpers/errorUtil.cjs +20 -1
  197. package/node_modules/zod/v3/helpers/errorUtil.js +1 -1
  198. package/node_modules/zod/v3/helpers/parseUtil.cjs +19 -0
  199. package/node_modules/zod/v3/helpers/partialUtil.cjs +19 -0
  200. package/node_modules/zod/v3/helpers/typeAliases.cjs +19 -0
  201. package/node_modules/zod/v3/helpers/util.cjs +19 -0
  202. package/node_modules/zod/v3/index.cjs +19 -0
  203. package/node_modules/zod/v3/standard-schema.cjs +19 -0
  204. package/node_modules/zod/v3/types.cjs +19 -0
  205. package/node_modules/zod/v4/classic/checks.cjs +19 -0
  206. package/node_modules/zod/v4/classic/coerce.cjs +19 -0
  207. package/node_modules/zod/v4/classic/compat.cjs +19 -0
  208. package/node_modules/zod/v4/classic/deep-partial.cjs +19 -0
  209. package/node_modules/zod/v4/classic/errors.cjs +19 -0
  210. package/node_modules/zod/v4/classic/external.cjs +22 -1
  211. package/node_modules/zod/v4/classic/external.d.cts +1 -1
  212. package/node_modules/zod/v4/classic/external.d.ts +1 -1
  213. package/node_modules/zod/v4/classic/external.js +1 -1
  214. package/node_modules/zod/v4/classic/from-json-schema.cjs +264 -24
  215. package/node_modules/zod/v4/classic/from-json-schema.js +245 -24
  216. package/node_modules/zod/v4/classic/in-out.cjs +19 -0
  217. package/node_modules/zod/v4/classic/index.cjs +19 -0
  218. package/node_modules/zod/v4/classic/iso.cjs +19 -0
  219. package/node_modules/zod/v4/classic/parse.cjs +19 -0
  220. package/node_modules/zod/v4/classic/schemas.cjs +100 -35
  221. package/node_modules/zod/v4/classic/schemas.d.cts +15 -1
  222. package/node_modules/zod/v4/classic/schemas.d.ts +15 -1
  223. package/node_modules/zod/v4/classic/schemas.js +77 -33
  224. package/node_modules/zod/v4/core/api.cjs +45 -22
  225. package/node_modules/zod/v4/core/api.d.cts +12 -6
  226. package/node_modules/zod/v4/core/api.d.ts +12 -6
  227. package/node_modules/zod/v4/core/api.js +25 -22
  228. package/node_modules/zod/v4/core/checks.cjs +51 -97
  229. package/node_modules/zod/v4/core/checks.d.cts +17 -1
  230. package/node_modules/zod/v4/core/checks.d.ts +17 -1
  231. package/node_modules/zod/v4/core/checks.js +31 -96
  232. package/node_modules/zod/v4/core/compile.cjs +173 -78
  233. package/node_modules/zod/v4/core/compile.d.cts +18 -4
  234. package/node_modules/zod/v4/core/compile.d.ts +18 -4
  235. package/node_modules/zod/v4/core/compile.js +154 -79
  236. package/node_modules/zod/v4/core/core.cjs +20 -1
  237. package/node_modules/zod/v4/core/core.js +1 -1
  238. package/node_modules/zod/v4/core/doc.cjs +26 -2
  239. package/node_modules/zod/v4/core/doc.js +7 -2
  240. package/node_modules/zod/v4/core/errors.cjs +21 -5
  241. package/node_modules/zod/v4/core/errors.js +2 -5
  242. package/node_modules/zod/v4/core/index.cjs +19 -0
  243. package/node_modules/zod/v4/core/json-schema-generator.cjs +20 -1
  244. package/node_modules/zod/v4/core/json-schema-generator.js +2 -2
  245. package/node_modules/zod/v4/core/json-schema-processors.cjs +188 -72
  246. package/node_modules/zod/v4/core/json-schema-processors.d.cts +16 -0
  247. package/node_modules/zod/v4/core/json-schema-processors.d.ts +16 -0
  248. package/node_modules/zod/v4/core/json-schema-processors.js +170 -74
  249. package/node_modules/zod/v4/core/json-schema.cjs +19 -0
  250. package/node_modules/zod/v4/core/memoizer.cjs +111 -23
  251. package/node_modules/zod/v4/core/memoizer.js +69 -23
  252. package/node_modules/zod/v4/core/parse.cjs +56 -16
  253. package/node_modules/zod/v4/core/parse.js +37 -16
  254. package/node_modules/zod/v4/core/regexes.cjs +31 -6
  255. package/node_modules/zod/v4/core/regexes.d.cts +3 -0
  256. package/node_modules/zod/v4/core/regexes.d.ts +3 -0
  257. package/node_modules/zod/v4/core/regexes.js +10 -4
  258. package/node_modules/zod/v4/core/registries.cjs +19 -0
  259. package/node_modules/zod/v4/core/schemas.cjs +302 -114
  260. package/node_modules/zod/v4/core/schemas.d.cts +28 -8
  261. package/node_modules/zod/v4/core/schemas.d.ts +28 -8
  262. package/node_modules/zod/v4/core/schemas.js +279 -113
  263. package/node_modules/zod/v4/core/standard-schema.cjs +19 -0
  264. package/node_modules/zod/v4/core/to-json-schema.cjs +28 -7
  265. package/node_modules/zod/v4/core/to-json-schema.d.cts +4 -3
  266. package/node_modules/zod/v4/core/to-json-schema.d.ts +4 -3
  267. package/node_modules/zod/v4/core/to-json-schema.js +7 -6
  268. package/node_modules/zod/v4/core/util.cjs +177 -143
  269. package/node_modules/zod/v4/core/util.d.cts +25 -4
  270. package/node_modules/zod/v4/core/util.d.ts +25 -4
  271. package/node_modules/zod/v4/core/util.js +156 -143
  272. package/node_modules/zod/v4/core/versions.cjs +21 -2
  273. package/node_modules/zod/v4/core/versions.d.cts +1 -1
  274. package/node_modules/zod/v4/core/versions.d.ts +1 -1
  275. package/node_modules/zod/v4/core/versions.js +2 -2
  276. package/node_modules/zod/v4/core/visit.cjs +19 -0
  277. package/node_modules/zod/v4/index.cjs +19 -0
  278. package/node_modules/zod/v4/locales/ar.cjs +2 -0
  279. package/node_modules/zod/v4/locales/ar.js +2 -0
  280. package/node_modules/zod/v4/locales/az.cjs +2 -0
  281. package/node_modules/zod/v4/locales/az.js +2 -0
  282. package/node_modules/zod/v4/locales/be.cjs +2 -0
  283. package/node_modules/zod/v4/locales/be.js +2 -0
  284. package/node_modules/zod/v4/locales/bg.cjs +2 -0
  285. package/node_modules/zod/v4/locales/bg.js +2 -0
  286. package/node_modules/zod/v4/locales/bn.cjs +2 -0
  287. package/node_modules/zod/v4/locales/bn.js +2 -0
  288. package/node_modules/zod/v4/locales/ca.cjs +2 -0
  289. package/node_modules/zod/v4/locales/ca.js +2 -0
  290. package/node_modules/zod/v4/locales/ckb.cjs +2 -0
  291. package/node_modules/zod/v4/locales/ckb.js +2 -0
  292. package/node_modules/zod/v4/locales/cs.cjs +2 -0
  293. package/node_modules/zod/v4/locales/cs.js +2 -0
  294. package/node_modules/zod/v4/locales/da.cjs +2 -0
  295. package/node_modules/zod/v4/locales/da.js +2 -0
  296. package/node_modules/zod/v4/locales/de.cjs +2 -0
  297. package/node_modules/zod/v4/locales/de.js +2 -0
  298. package/node_modules/zod/v4/locales/el.cjs +2 -0
  299. package/node_modules/zod/v4/locales/el.js +2 -0
  300. package/node_modules/zod/v4/locales/en.cjs +2 -0
  301. package/node_modules/zod/v4/locales/en.js +2 -0
  302. package/node_modules/zod/v4/locales/eo.cjs +2 -0
  303. package/node_modules/zod/v4/locales/eo.js +2 -0
  304. package/node_modules/zod/v4/locales/es.cjs +2 -0
  305. package/node_modules/zod/v4/locales/es.js +2 -0
  306. package/node_modules/zod/v4/locales/fa.cjs +2 -0
  307. package/node_modules/zod/v4/locales/fa.js +2 -0
  308. package/node_modules/zod/v4/locales/fi.cjs +2 -0
  309. package/node_modules/zod/v4/locales/fi.js +2 -0
  310. package/node_modules/zod/v4/locales/fr-CA.cjs +2 -0
  311. package/node_modules/zod/v4/locales/fr-CA.js +2 -0
  312. package/node_modules/zod/v4/locales/fr.cjs +2 -0
  313. package/node_modules/zod/v4/locales/fr.js +2 -0
  314. package/node_modules/zod/v4/locales/gu.cjs +2 -0
  315. package/node_modules/zod/v4/locales/gu.js +2 -0
  316. package/node_modules/zod/v4/locales/he.cjs +2 -0
  317. package/node_modules/zod/v4/locales/he.js +2 -0
  318. package/node_modules/zod/v4/locales/hi.cjs +2 -0
  319. package/node_modules/zod/v4/locales/hi.js +2 -0
  320. package/node_modules/zod/v4/locales/hr.cjs +2 -0
  321. package/node_modules/zod/v4/locales/hr.js +2 -0
  322. package/node_modules/zod/v4/locales/hu.cjs +2 -0
  323. package/node_modules/zod/v4/locales/hu.js +2 -0
  324. package/node_modules/zod/v4/locales/hy.cjs +2 -0
  325. package/node_modules/zod/v4/locales/hy.js +2 -0
  326. package/node_modules/zod/v4/locales/id.cjs +2 -0
  327. package/node_modules/zod/v4/locales/id.js +2 -0
  328. package/node_modules/zod/v4/locales/index.cjs +22 -1
  329. package/node_modules/zod/v4/locales/index.d.cts +1 -0
  330. package/node_modules/zod/v4/locales/index.d.ts +1 -0
  331. package/node_modules/zod/v4/locales/index.js +1 -0
  332. package/node_modules/zod/v4/locales/is.cjs +2 -0
  333. package/node_modules/zod/v4/locales/is.js +2 -0
  334. package/node_modules/zod/v4/locales/it.cjs +2 -0
  335. package/node_modules/zod/v4/locales/it.js +2 -0
  336. package/node_modules/zod/v4/locales/ja.cjs +2 -0
  337. package/node_modules/zod/v4/locales/ja.js +2 -0
  338. package/node_modules/zod/v4/locales/ka.cjs +2 -0
  339. package/node_modules/zod/v4/locales/ka.js +2 -0
  340. package/node_modules/zod/v4/locales/km.cjs +2 -0
  341. package/node_modules/zod/v4/locales/km.js +2 -0
  342. package/node_modules/zod/v4/locales/kn.cjs +2 -0
  343. package/node_modules/zod/v4/locales/kn.js +2 -0
  344. package/node_modules/zod/v4/locales/ko.cjs +2 -0
  345. package/node_modules/zod/v4/locales/ko.js +2 -0
  346. package/node_modules/zod/v4/locales/lt.cjs +2 -0
  347. package/node_modules/zod/v4/locales/lt.js +2 -0
  348. package/node_modules/zod/v4/locales/mk.cjs +2 -0
  349. package/node_modules/zod/v4/locales/mk.js +2 -0
  350. package/node_modules/zod/v4/locales/ms.cjs +2 -0
  351. package/node_modules/zod/v4/locales/ms.js +2 -0
  352. package/node_modules/zod/v4/locales/ne.cjs +2 -0
  353. package/node_modules/zod/v4/locales/ne.js +2 -0
  354. package/node_modules/zod/v4/locales/nl.cjs +2 -0
  355. package/node_modules/zod/v4/locales/nl.js +2 -0
  356. package/node_modules/zod/v4/locales/nn.cjs +2 -0
  357. package/node_modules/zod/v4/locales/nn.js +2 -0
  358. package/node_modules/zod/v4/locales/no.cjs +2 -0
  359. package/node_modules/zod/v4/locales/no.js +2 -0
  360. package/node_modules/zod/v4/locales/ota.cjs +2 -0
  361. package/node_modules/zod/v4/locales/ota.js +2 -0
  362. package/node_modules/zod/v4/locales/pl.cjs +2 -0
  363. package/node_modules/zod/v4/locales/pl.js +2 -0
  364. package/node_modules/zod/v4/locales/ps.cjs +2 -0
  365. package/node_modules/zod/v4/locales/ps.js +2 -0
  366. package/node_modules/zod/v4/locales/pt-BR.cjs +2 -0
  367. package/node_modules/zod/v4/locales/pt-BR.js +2 -0
  368. package/node_modules/zod/v4/locales/pt.cjs +2 -0
  369. package/node_modules/zod/v4/locales/pt.js +2 -0
  370. package/node_modules/zod/v4/locales/ro.cjs +2 -0
  371. package/node_modules/zod/v4/locales/ro.js +2 -0
  372. package/node_modules/zod/v4/locales/ru.cjs +2 -0
  373. package/node_modules/zod/v4/locales/ru.js +2 -0
  374. package/node_modules/zod/v4/locales/sk.cjs +2 -0
  375. package/node_modules/zod/v4/locales/sk.js +2 -0
  376. package/node_modules/zod/v4/locales/sl.cjs +2 -0
  377. package/node_modules/zod/v4/locales/sl.js +2 -0
  378. package/node_modules/zod/v4/locales/sv.cjs +2 -0
  379. package/node_modules/zod/v4/locales/sv.js +2 -0
  380. package/node_modules/zod/v4/locales/ta.cjs +2 -0
  381. package/node_modules/zod/v4/locales/ta.js +2 -0
  382. package/node_modules/zod/v4/locales/tg.cjs +144 -0
  383. package/node_modules/zod/v4/locales/tg.d.cts +5 -0
  384. package/node_modules/zod/v4/locales/tg.d.ts +4 -0
  385. package/node_modules/zod/v4/locales/tg.js +117 -0
  386. package/node_modules/zod/v4/locales/th.cjs +2 -0
  387. package/node_modules/zod/v4/locales/th.js +2 -0
  388. package/node_modules/zod/v4/locales/tk.cjs +2 -0
  389. package/node_modules/zod/v4/locales/tk.js +2 -0
  390. package/node_modules/zod/v4/locales/tr.cjs +2 -0
  391. package/node_modules/zod/v4/locales/tr.js +2 -0
  392. package/node_modules/zod/v4/locales/uk.cjs +2 -0
  393. package/node_modules/zod/v4/locales/uk.js +2 -0
  394. package/node_modules/zod/v4/locales/ur.cjs +2 -0
  395. package/node_modules/zod/v4/locales/ur.js +2 -0
  396. package/node_modules/zod/v4/locales/uz.cjs +2 -0
  397. package/node_modules/zod/v4/locales/uz.js +2 -0
  398. package/node_modules/zod/v4/locales/vi.cjs +2 -0
  399. package/node_modules/zod/v4/locales/vi.js +2 -0
  400. package/node_modules/zod/v4/locales/yo.cjs +2 -0
  401. package/node_modules/zod/v4/locales/yo.js +2 -0
  402. package/node_modules/zod/v4/locales/zh-CN.cjs +2 -0
  403. package/node_modules/zod/v4/locales/zh-CN.js +2 -0
  404. package/node_modules/zod/v4/locales/zh-TW.cjs +2 -0
  405. package/node_modules/zod/v4/locales/zh-TW.js +2 -0
  406. package/node_modules/zod/v4/mini/checks.cjs +19 -0
  407. package/node_modules/zod/v4/mini/coerce.cjs +19 -0
  408. package/node_modules/zod/v4/mini/deep-partial.cjs +19 -0
  409. package/node_modules/zod/v4/mini/external.cjs +22 -1
  410. package/node_modules/zod/v4/mini/external.d.cts +1 -1
  411. package/node_modules/zod/v4/mini/external.d.ts +1 -1
  412. package/node_modules/zod/v4/mini/external.js +1 -1
  413. package/node_modules/zod/v4/mini/in-out.cjs +19 -0
  414. package/node_modules/zod/v4/mini/index.cjs +19 -0
  415. package/node_modules/zod/v4/mini/iso.cjs +19 -0
  416. package/node_modules/zod/v4/mini/parse.cjs +19 -0
  417. package/node_modules/zod/v4/mini/schemas.cjs +44 -8
  418. package/node_modules/zod/v4/mini/schemas.d.cts +6 -1
  419. package/node_modules/zod/v4/mini/schemas.d.ts +6 -1
  420. package/node_modules/zod/v4/mini/schemas.js +21 -6
  421. package/node_modules/zod/v4-mini/index.cjs +19 -0
  422. package/package.json +7 -6
  423. package/dist/.setup/probe.runtime-qPRZE3Yf.mjs +0 -2
@@ -1,12 +1,13 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.mjs";
2
2
  import { n as getMatrixRuntimeLifecycle } from "./runtime-1kn1P6io.mjs";
3
- import { l as resolveScopedMatrixEnvConfig, o as resolveMatrixDefaultOrOnlyAccountId, r as requiresExplicitMatrixDefaultAccount, s as resolveGlobalMatrixEnvConfig, u as resolveMatrixAccountStringValues } from "./account-selection-5koohRSQ.mjs";
3
+ import { c as resolveGlobalMatrixEnvConfig, d as resolveMatrixAccountStringValues, i as requiresExplicitMatrixDefaultAccount, s as resolveMatrixDefaultOrOnlyAccountId, u as resolveScopedMatrixEnvConfig } from "./account-selection-BHkfU1eC.mjs";
4
4
  import { t as getMatrixScopedEnvVarNames } from "./env-vars-dGqak9dN.mjs";
5
5
  import { o as resolveMatrixBaseConfig, r as listNormalizedMatrixAccountIds, t as findMatrixAccountConfig } from "./account-config-CRsKoMqJ.mjs";
6
6
  import { t as resolveMatrixConfigFieldPath } from "./config-paths-CnREYb1Y.mjs";
7
7
  import { t as resolveValidatedMatrixHomeserverUrl } from "./url-validation-GRHde6lq.mjs";
8
- import { i as repairCurrentTokenStorageMetaDeviceId } from "./storage-DJ-oUgmX.mjs";
8
+ import { i as repairCurrentTokenStorageMetaDeviceId } from "./storage-BXaFc0S4.mjs";
9
9
  import { createLazyRuntimeMethod, createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
10
+ import { isRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
10
11
  import { DEFAULT_ACCOUNT_ID, normalizeAccountId, normalizeOptionalAccountId } from "openclaw/plugin-sdk/account-id";
11
12
  import { coerceSecretRef, isBuiltInDefaultSecretProviderRef, normalizeResolvedSecretInputString } from "openclaw/plugin-sdk/secret-input";
12
13
  import { formatErrorMessage, toErrorObject, toStringifiedError } from "openclaw/plugin-sdk/error-runtime";
@@ -17,25 +18,15 @@ import { AsyncLocalStorage } from "node:async_hooks";
17
18
  import { retryAsync } from "openclaw/plugin-sdk/retry-runtime";
18
19
  import { sleepWithAbort } from "openclaw/plugin-sdk/runtime-env";
19
20
  import { createDeferred } from "openclaw/plugin-sdk/extension-shared";
20
- //#region extensions/matrix/src/matrix/client/config.ts
21
- const loadMatrixAuthClientDeps = createLazyRuntimeModule(() => Promise.all([import("./sdk-BkKE4ANj.mjs").then((n) => n.t), import("./logging-rgm8ep9H.mjs").then((n) => n.n)]).then(([sdkModule, loggingModule]) => ({
21
+ //#region extensions/matrix/src/matrix/client/auth-request.ts
22
+ const loadMatrixAuthClientDeps = createLazyRuntimeModule(() => Promise.all([import("./sdk-rqFjgltR.mjs").then((n) => n.t), import("./logging-rgm8ep9H.mjs").then((n) => n.n)]).then(([sdkModule, loggingModule]) => ({
22
23
  MatrixClient: sdkModule.MatrixClient,
23
24
  ensureMatrixSdkLoggingConfigured: loggingModule.ensureMatrixSdkLoggingConfigured
24
25
  })));
25
26
  const MATRIX_AUTH_REQUEST_RETRY_RE = /\b(fetch failed|econnreset|econnrefused|enotfound|etimedout|ehostunreach|enetunreach|eai_again|und_err_|socket hang up|network|headers timeout|body timeout|connect timeout)\b/i;
26
- const loadMatrixCredentialsReadDeps = createLazyRuntimeModule(() => import("./credentials-read-Dp7BoEdm.mjs").then((n) => n.r));
27
- const loadMatrixCredentialsWriteRuntime = createLazyRuntimeModule(() => import("./credentials-write.runtime-M_bUf3rL.mjs"));
28
- const loadMatrixSecretInputDeps = createLazyRuntimeModule(() => import("./config-secret-input.runtime-CwsP3--c.mjs"));
29
27
  function shouldRetryMatrixAuthRequest(err) {
30
28
  return MATRIX_AUTH_REQUEST_RETRY_RE.test(formatErrorMessage(err));
31
29
  }
32
- function isAbortSignalTriggered(signal) {
33
- return signal?.aborted === true;
34
- }
35
- function credentialsMatchBackfillAuthLineage(params) {
36
- if (!params.stored) return true;
37
- return params.stored.homeserver === params.auth.homeserver && params.stored.userId === params.auth.userId && params.stored.accessToken === params.auth.accessToken;
38
- }
39
30
  async function retryMatrixAuthRequest(label, run, signal) {
40
31
  return await retryAsync(run, {
41
32
  attempts: 3,
@@ -47,15 +38,68 @@ async function retryMatrixAuthRequest(label, run, signal) {
47
38
  sleep: (ms) => sleepWithAbort(ms, signal)
48
39
  });
49
40
  }
41
+ var MatrixWhoamiCleanupError = class extends AggregateError {};
50
42
  async function fetchMatrixWhoamiIdentity(params) {
51
43
  const { MatrixClient, ensureMatrixSdkLoggingConfigured } = await loadMatrixAuthClientDeps();
44
+ params.signal?.throwIfAborted();
52
45
  ensureMatrixSdkLoggingConfigured();
53
46
  const tempClient = new MatrixClient(params.homeserver, params.accessToken, {
54
47
  userId: params.userId,
55
48
  ssrfPolicy: params.ssrfPolicy,
56
49
  dispatcherPolicy: params.dispatcherPolicy
57
50
  });
58
- return await retryMatrixAuthRequest("matrix auth whoami", async () => await tempClient.doRequest("GET", "/_matrix/client/v3/account/whoami"), params.signal);
51
+ let stopping;
52
+ const stop = () => stopping ??= tempClient.stopWithoutPersist();
53
+ const onAbort = () => {
54
+ stop().catch(() => {});
55
+ };
56
+ params.signal?.addEventListener("abort", onAbort, { once: true });
57
+ let outcome;
58
+ let cleanupFailure;
59
+ try {
60
+ params.signal?.throwIfAborted();
61
+ outcome = {
62
+ ok: true,
63
+ value: await retryMatrixAuthRequest("matrix auth whoami", async () => {
64
+ const identity = await tempClient.doRequest("GET", "/_matrix/client/v3/account/whoami");
65
+ if (!isRecord(identity)) throw new Error("Matrix whoami returned an invalid identity");
66
+ const userId = identity.user_id ?? void 0;
67
+ const deviceId = identity.device_id ?? void 0;
68
+ if (userId !== void 0 && typeof userId !== "string" || deviceId !== void 0 && typeof deviceId !== "string") throw new Error("Matrix whoami returned an invalid identity");
69
+ return {
70
+ user_id: userId,
71
+ device_id: deviceId
72
+ };
73
+ }, params.signal)
74
+ };
75
+ } catch (error) {
76
+ outcome = {
77
+ ok: false,
78
+ error
79
+ };
80
+ } finally {
81
+ params.signal?.removeEventListener("abort", onAbort);
82
+ try {
83
+ await stop();
84
+ } catch (error) {
85
+ cleanupFailure = { error };
86
+ }
87
+ }
88
+ if (cleanupFailure) throw new MatrixWhoamiCleanupError(outcome.ok ? [cleanupFailure.error] : [outcome.error, cleanupFailure.error], "Matrix identity request cleanup failed", { cause: outcome.ok ? cleanupFailure.error : outcome.error });
89
+ if (!outcome.ok) throw outcome.error;
90
+ return outcome.value;
91
+ }
92
+ //#endregion
93
+ //#region extensions/matrix/src/matrix/client/config.ts
94
+ const loadMatrixCredentialsReadDeps = createLazyRuntimeModule(() => import("./credentials-read-Q5sHkkHv.mjs").then((n) => n.i));
95
+ const loadMatrixCredentialsWriteRuntime = createLazyRuntimeModule(() => import("./credentials-write.runtime-DxbXh-pK.mjs"));
96
+ const loadMatrixSecretInputDeps = createLazyRuntimeModule(() => import("./config-secret-input.runtime-CwsP3--c.mjs"));
97
+ function isAbortSignalTriggered(signal) {
98
+ return signal?.aborted === true;
99
+ }
100
+ function credentialsMatchBackfillAuthLineage(params) {
101
+ if (!params.stored) return true;
102
+ return params.stored.homeserver === params.auth.homeserver && params.stored.userId === params.auth.userId && params.stored.accessToken === params.auth.accessToken;
59
103
  }
60
104
  const MATRIX_CONFIG_STRING_FIELDS = [
61
105
  "homeserver",
@@ -383,7 +427,7 @@ async function backfillMatrixAuthDeviceIdAfterStartup(params) {
383
427
  signal: params.abortSignal
384
428
  });
385
429
  } catch (err) {
386
- if (isAbortSignalTriggered(params.abortSignal)) return;
430
+ if (isAbortSignalTriggered(params.abortSignal) && !(err instanceof MatrixWhoamiCleanupError)) return;
387
431
  throw err;
388
432
  }
389
433
  const deviceId = whoami.device_id?.trim();
@@ -396,7 +440,7 @@ async function backfillMatrixAuthDeviceIdAfterStartup(params) {
396
440
  auth: params.auth
397
441
  })) return;
398
442
  if (isAbortSignalTriggered(params.abortSignal)) return;
399
- if (!repairCurrentTokenStorageMetaDeviceId({
443
+ if (!await repairCurrentTokenStorageMetaDeviceId({
400
444
  homeserver: params.auth.homeserver,
401
445
  userId: params.auth.userId,
402
446
  accessToken: params.auth.accessToken,
@@ -405,7 +449,13 @@ async function backfillMatrixAuthDeviceIdAfterStartup(params) {
405
449
  env: params.env
406
450
  })) throw new Error("Matrix deviceId backfill failed to repair current-token storage metadata");
407
451
  if (isAbortSignalTriggered(params.abortSignal)) return;
408
- return await (await loadMatrixCredentialsWriteRuntime()).saveBackfilledMatrixDeviceId({
452
+ const credentialsWriter = await loadMatrixCredentialsWriteRuntime();
453
+ const currentCredentials = await loadMatrixCredentialsAsync(env, params.auth.accountId);
454
+ if (isAbortSignalTriggered(params.abortSignal) || !credentialsMatchBackfillAuthLineage({
455
+ stored: currentCredentials,
456
+ auth: params.auth
457
+ })) return;
458
+ return await credentialsWriter.saveBackfilledMatrixDeviceId({
409
459
  homeserver: params.auth.homeserver,
410
460
  userId: params.auth.userId,
411
461
  accessToken: params.auth.accessToken,
@@ -414,17 +464,25 @@ async function backfillMatrixAuthDeviceIdAfterStartup(params) {
414
464
  }
415
465
  //#endregion
416
466
  //#region extensions/matrix/src/matrix/monitor/task-runner.ts
417
- const monitorTaskSignal = new AsyncLocalStorage();
467
+ const monitorTaskContext = new AsyncLocalStorage();
418
468
  function getMatrixMonitorTaskSignal() {
419
- return monitorTaskSignal.getStore();
469
+ const context = monitorTaskContext.getStore();
470
+ return context?.settled ? context.runner.shutdownSignal : context?.signal;
420
471
  }
421
472
  function createMatrixMonitorTaskRunner(params) {
422
473
  const inFlight = /* @__PURE__ */ new Map();
474
+ const shutdownController = new AbortController();
475
+ const runner = { shutdownSignal: shutdownController.signal };
423
476
  let closed = false;
424
477
  const runDetachedTask = (label, task) => {
425
478
  if (closed) return Promise.resolve();
426
479
  const controller = new AbortController();
427
- const trackedTask = monitorTaskSignal.run(controller.signal, () => Promise.resolve().then(task)).catch((error) => {
480
+ const context = {
481
+ runner,
482
+ settled: false,
483
+ signal: AbortSignal.any([controller.signal, runner.shutdownSignal])
484
+ };
485
+ const trackedTask = monitorTaskContext.run(context, () => Promise.resolve().then(task)).catch((error) => {
428
486
  const message = String(error);
429
487
  params.logVerboseMessage(`matrix: ${label} failed (${message})`);
430
488
  params.logger.warn("matrix background task failed", {
@@ -432,7 +490,7 @@ function createMatrixMonitorTaskRunner(params) {
432
490
  error: message
433
491
  });
434
492
  }).finally(() => {
435
- controller.abort();
493
+ context.settled = true;
436
494
  inFlight.delete(trackedTask);
437
495
  });
438
496
  inFlight.set(trackedTask, controller);
@@ -444,6 +502,7 @@ function createMatrixMonitorTaskRunner(params) {
444
502
  return {
445
503
  close: () => {
446
504
  closed = true;
505
+ shutdownController.abort();
447
506
  for (const controller of inFlight.values()) controller.abort();
448
507
  },
449
508
  runDetachedTask,
@@ -483,7 +542,7 @@ async function awaitMatrixStartupWithAbort(promise, abortSignal) {
483
542
  }
484
543
  //#endregion
485
544
  //#region extensions/matrix/src/matrix/client/shared.ts
486
- const loadMatrixCreateClientDeps = createLazyRuntimeModule(() => import("./create-client-DQXAZjTw.mjs").then((runtime) => ({ createMatrixClient: runtime.createMatrixClient })));
545
+ const loadMatrixCreateClientDeps = createLazyRuntimeModule(() => import("./create-client-CHxcron_.mjs").then((runtime) => ({ createMatrixClient: runtime.createMatrixClient })));
487
546
  const MATRIX_RETIREMENT_DRAIN_TIMEOUT_MS = 5e3;
488
547
  const sharedClientStates = /* @__PURE__ */ new Map();
489
548
  const sharedClientPromises = /* @__PURE__ */ new Map();
@@ -857,7 +916,7 @@ var client_exports = /* @__PURE__ */ __exportAll({
857
916
  createMatrixClient: () => createMatrixClient,
858
917
  resolveMatrixAuthContext: () => resolveMatrixAuthContext
859
918
  });
860
- const loadMatrixClientRuntime = createLazyRuntimeModule(() => import("./create-client-DQXAZjTw.mjs"));
919
+ const loadMatrixClientRuntime = createLazyRuntimeModule(() => import("./create-client-CHxcron_.mjs"));
861
920
  const createMatrixClient = createLazyRuntimeMethod(loadMatrixClientRuntime, (runtime) => runtime.createMatrixClient);
862
921
  //#endregion
863
- export { createMatrixStartupAbortError as a, createMatrixMonitorTaskRunner as c, resolveMatrixAuthContext as d, awaitMatrixStartupWithAbort as i, backfillMatrixAuthDeviceIdAfterStartup as l, createMatrixClient as n, isMatrixStartupAbortError as o, acquireSharedMatrixClient as r, throwIfMatrixStartupAborted as s, client_exports as t, resolveMatrixAuth as u };
922
+ export { createMatrixStartupAbortError as a, createMatrixMonitorTaskRunner as c, resolveMatrixAuth as d, resolveMatrixAuthContext as f, awaitMatrixStartupWithAbort as i, getMatrixMonitorTaskSignal as l, createMatrixClient as n, isMatrixStartupAbortError as o, acquireSharedMatrixClient as r, throwIfMatrixStartupAborted as s, client_exports as t, backfillMatrixAuthDeviceIdAfterStartup as u };
@@ -2,7 +2,7 @@ import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
2
2
  import { requireRuntimeConfig } from "openclaw/plugin-sdk/plugin-config-runtime";
3
3
  import { captureChannelReadAuthority } from "openclaw/plugin-sdk/fetch-runtime";
4
4
  //#region extensions/matrix/src/matrix/client-bootstrap.ts
5
- const loadMatrixSharedClientRuntimeDeps = createLazyRuntimeModule(() => import("./client-DsJUnWlV.mjs").then((n) => n.t).then((clientModule) => ({
5
+ const loadMatrixSharedClientRuntimeDeps = createLazyRuntimeModule(() => import("./client-ChrXpxos.mjs").then((n) => n.t).then((clientModule) => ({
6
6
  acquireSharedMatrixClient: clientModule.acquireSharedMatrixClient,
7
7
  resolveMatrixAuthContext: clientModule.resolveMatrixAuthContext
8
8
  })));
@@ -1,23 +1,28 @@
1
1
  import { t as getMatrixRuntime } from "./runtime-1kn1P6io.mjs";
2
2
  import { t as resolveValidatedMatrixHomeserverUrl } from "./url-validation-GRHde6lq.mjs";
3
- import { n as maybeMigrateLegacyStorage, o as resolveMatrixStoragePaths, s as writeStorageMeta } from "./storage-DJ-oUgmX.mjs";
4
- import "./client-DsJUnWlV.mjs";
3
+ import { n as maybeMigrateLegacyStorage, o as resolveMatrixStoragePaths, s as writeStorageMeta } from "./storage-BXaFc0S4.mjs";
4
+ import "./client-ChrXpxos.mjs";
5
5
  import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
6
6
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
7
7
  import { ssrfPolicyFromDangerouslyAllowPrivateNetwork } from "openclaw/plugin-sdk/ssrf-runtime";
8
8
  import fs from "node:fs";
9
9
  //#region extensions/matrix/src/matrix/client/create-client.ts
10
- const loadMatrixCreateClientRuntimeDeps = createLazyRuntimeModule(() => Promise.all([import("./sdk-BkKE4ANj.mjs").then((n) => n.t), import("./logging-rgm8ep9H.mjs").then((n) => n.n)]).then(([sdkModule, loggingModule]) => ({
10
+ const loadMatrixCreateClientRuntimeDeps = createLazyRuntimeModule(() => Promise.all([
11
+ import("./sdk-rqFjgltR.mjs").then((n) => n.t),
12
+ import("./logging-rgm8ep9H.mjs").then((n) => n.n),
13
+ import("./file-sync-store-CsalA4yI.mjs")
14
+ ]).then(([sdkModule, loggingModule, syncStoreModule]) => ({
11
15
  MatrixClient: sdkModule.MatrixClient,
16
+ SqliteBackedMatrixSyncStore: syncStoreModule.SqliteBackedMatrixSyncStore,
12
17
  ensureMatrixSdkLoggingConfigured: loggingModule.ensureMatrixSdkLoggingConfigured
13
18
  })));
14
19
  async function createMatrixClient(params) {
15
- const { MatrixClient, ensureMatrixSdkLoggingConfigured } = await loadMatrixCreateClientRuntimeDeps();
20
+ const { MatrixClient, SqliteBackedMatrixSyncStore, ensureMatrixSdkLoggingConfigured } = await loadMatrixCreateClientRuntimeDeps();
16
21
  ensureMatrixSdkLoggingConfigured();
17
22
  const homeserver = await resolveValidatedMatrixHomeserverUrl(params.homeserver, { dangerouslyAllowPrivateNetwork: params.allowPrivateNetwork });
18
23
  const matrixClientUserId = normalizeOptionalString(params.userId);
19
24
  const userId = matrixClientUserId ?? "unknown";
20
- const storagePaths = params.persistStorage !== false ? resolveMatrixStoragePaths({
25
+ const storagePaths = params.persistStorage !== false ? await resolveMatrixStoragePaths({
21
26
  homeserver,
22
27
  userId,
23
28
  accessToken: params.accessToken,
@@ -31,7 +36,7 @@ async function createMatrixClient(params) {
31
36
  env: process.env
32
37
  });
33
38
  fs.mkdirSync(storagePaths.rootDir, { recursive: true });
34
- writeStorageMeta({
39
+ await writeStorageMeta({
35
40
  storagePaths,
36
41
  homeserver,
37
42
  userId,
@@ -40,6 +45,7 @@ async function createMatrixClient(params) {
40
45
  });
41
46
  }
42
47
  const cryptoDatabasePrefix = storagePaths ? `openclaw-matrix-${storagePaths.accountKey}-${storagePaths.tokenHash}` : void 0;
48
+ const syncStore = storagePaths ? await SqliteBackedMatrixSyncStore.create(storagePaths.rootDir) : void 0;
43
49
  return new MatrixClient(homeserver, params.accessToken, {
44
50
  userId: matrixClientUserId,
45
51
  password: params.password,
@@ -47,7 +53,7 @@ async function createMatrixClient(params) {
47
53
  encryption: params.encryption,
48
54
  localTimeoutMs: params.localTimeoutMs,
49
55
  initialSyncLimit: params.initialSyncLimit,
50
- storageRootDir: storagePaths?.rootDir,
56
+ syncStore,
51
57
  recoveryKeyPath: storagePaths?.recoveryKeyPath,
52
58
  idbSnapshotPath: storagePaths?.idbSnapshotPath,
53
59
  cryptoDatabasePrefix,
@@ -1,6 +1,6 @@
1
1
  import { i as normalizeMatrixStoredCredentials, n as isMatrixCredentialRevocation, r as matrixCredentialsStoreKey } from "./credentials-state-B3cuUFwZ.mjs";
2
2
  import { i as resolveMatrixCredentialsDir, o as resolveMatrixCredentialsPath } from "./storage-paths-DVCANXTc.mjs";
3
- import { a as openMatrixCredentialsAsyncStore, i as loadMatrixCredentials, n as credentialsMatchConfig, o as openMatrixCredentialsStore, t as clearMatrixCredentials } from "./credentials-read-Dp7BoEdm.mjs";
3
+ import { a as loadMatrixCredentials, c as openMatrixCredentialsStore, n as clearMatrixCredentials, r as credentialsMatchConfig, s as openMatrixCredentialsAsyncStore } from "./credentials-read-Q5sHkkHv.mjs";
4
4
  import { normalizeAccountId } from "openclaw/plugin-sdk/account-id";
5
5
  //#region extensions/matrix/src/matrix/credentials.ts
6
6
  async function saveMatrixCredentials(credentials, env = process.env, accountId) {
@@ -6,6 +6,7 @@ import { normalizeAccountId } from "openclaw/plugin-sdk/account-id";
6
6
  import { createPluginStateSyncKeyedStore } from "openclaw/plugin-sdk/plugin-state-store-runtime";
7
7
  //#region extensions/matrix/src/matrix/credentials-read.ts
8
8
  var credentials_read_exports = /* @__PURE__ */ __exportAll({
9
+ captureMatrixCredentialsEnv: () => captureMatrixCredentialsEnv,
9
10
  clearMatrixCredentials: () => clearMatrixCredentials,
10
11
  credentialsMatchConfig: () => credentialsMatchConfig,
11
12
  loadMatrixCredentials: () => loadMatrixCredentials,
@@ -34,6 +35,13 @@ function openMatrixCredentialsStore(env = process.env) {
34
35
  function openMatrixCredentialsAsyncStore(env = process.env) {
35
36
  return getMatrixRuntime().state.openKeyedStore(matrixCredentialsStoreOptions(env));
36
37
  }
38
+ function captureMatrixCredentialsEnv(env) {
39
+ return {
40
+ ...env,
41
+ OPENCLAW_STATE_DIR: getMatrixRuntime().state.resolveStateDir(env),
42
+ OPENCLAW_SUPERVISOR_MODE: env.OPENCLAW_SUPERVISOR_MODE
43
+ };
44
+ }
37
45
  async function loadMatrixCredentialsAsync(env = process.env, accountId) {
38
46
  return decodeMatrixCredentials(await openMatrixCredentialsAsyncStore(env).lookup(matrixCredentialsStoreKey(accountId)), accountId);
39
47
  }
@@ -63,4 +71,4 @@ function credentialsMatchConfig(stored, config) {
63
71
  return stored.homeserver === config.homeserver && stored.userId === config.userId;
64
72
  }
65
73
  //#endregion
66
- export { openMatrixCredentialsAsyncStore as a, loadMatrixCredentials as i, credentialsMatchConfig as n, openMatrixCredentialsStore as o, credentials_read_exports as r, clearMatrixCredentials as t };
74
+ export { loadMatrixCredentials as a, openMatrixCredentialsStore as c, credentials_read_exports as i, clearMatrixCredentials as n, loadMatrixCredentialsAsync as o, credentialsMatchConfig as r, openMatrixCredentialsAsyncStore as s, captureMatrixCredentialsEnv as t };
@@ -1,6 +1,6 @@
1
1
  import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
2
2
  //#region extensions/matrix/src/matrix/credentials-write.runtime.ts
3
- const loadMatrixCredentialsRuntime = createLazyRuntimeModule(() => import("./credentials-CeRipapZ.mjs"));
3
+ const loadMatrixCredentialsRuntime = createLazyRuntimeModule(() => import("./credentials-BGKfiaJW.mjs"));
4
4
  async function saveMatrixCredentials(...args) {
5
5
  return (await loadMatrixCredentialsRuntime()).saveMatrixCredentials(...args);
6
6
  }
@@ -1,13 +1,13 @@
1
1
  import { t as ensureMatrixCryptoRuntime } from "./deps-mtxF2mHI.mjs";
2
2
  import { n as LogService, r as noop } from "./logger-xBjiRIp1.mjs";
3
- import { i as restoreIdbFromDisk, n as persistIdbToDisk } from "./idb-persistence-CIfFUjP3.mjs";
4
- import { n as isRepairableSecretStorageAccessError } from "./sdk-BkKE4ANj.mjs";
3
+ import { i as restoreIdbFromDisk, n as persistIdbToDisk } from "./idb-persistence-c8uxcofH.mjs";
4
+ import { n as isRepairableSecretStorageAccessError } from "./sdk-rqFjgltR.mjs";
5
5
  import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
6
6
  import { formatErrorMessage, toStringifiedError } from "openclaw/plugin-sdk/error-runtime";
7
7
  import { resolveDateTimestampMs, resolveTimestampMsToIsoString } from "openclaw/plugin-sdk/number-runtime";
8
8
  import { setTimeout as setTimeout$1 } from "node:timers/promises";
9
- import { IDBDatabase } from "fake-indexeddb";
10
9
  import { MatrixEventEvent } from "matrix-js-sdk/lib/matrix.js";
10
+ import { IDBDatabase } from "fake-indexeddb";
11
11
  import { VerificationMethod } from "matrix-js-sdk/lib/types.js";
12
12
  import "fake-indexeddb/auto";
13
13
  import { CryptoEvent } from "matrix-js-sdk/lib/crypto-api/CryptoEvent.js";
@@ -1,6 +1,6 @@
1
- import { T as writeMatrixIdbSnapshotJsonToStore, m as openMatrixIdbSnapshotStoreOptions, o as MATRIX_IDB_SNAPSHOT_FILENAME, x as readMatrixIdbSnapshotJsonFromStore } from "./storage-metadata-BQJjHC_i.mjs";
1
+ import { b as readMatrixIdbSnapshotJsonFromStore, o as MATRIX_IDB_SNAPSHOT_FILENAME, p as openMatrixIdbSnapshotStoreOptions, w as writeMatrixIdbSnapshotJsonToStore } from "./storage-metadata-fHN6Df2m.mjs";
2
2
  import { n as MATRIX_IDB_SNAPSHOT_LOCK_OPTIONS } from "./idb-persistence-lock-B3fZXyF_.mjs";
3
- import { r as readLegacyMatrixIdbSnapshotStateUnlocked, t as isValidMatrixIdbSnapshotJson } from "./idb-persistence-CIfFUjP3.mjs";
3
+ import { r as readLegacyMatrixIdbSnapshotStateUnlocked, t as isValidMatrixIdbSnapshotJson } from "./idb-persistence-c8uxcofH.mjs";
4
4
  import { randomUUID } from "node:crypto";
5
5
  import path from "node:path";
6
6
  import fs from "node:fs";
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.mjs";
2
2
  import { r as normalizeMatrixMessagingTarget, t as isMatrixQualifiedUserId } from "./target-ids-Nwx7cMVE.mjs";
3
- import { u as resolveMatrixAuth } from "./client-DsJUnWlV.mjs";
4
- import { t as MatrixAuthedHttpClient } from "./http-client-BJjo-iw5.mjs";
3
+ import { d as resolveMatrixAuth } from "./client-ChrXpxos.mjs";
4
+ import { t as MatrixAuthedHttpClient } from "./http-client-Bi6uKmzh.mjs";
5
5
  import { isRecord, normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  //#region extensions/matrix/src/directory-live.ts
7
7
  var directory_live_exports = /* @__PURE__ */ __exportAll({
@@ -1,6 +1,6 @@
1
1
  import { _ as MsgType } from "./direct-management-B2Bno2xL.mjs";
2
- import { a as sendSingleTextMessageMatrix, m as prepareMatrixSingleText, t as editMessageMatrix } from "./send-h0gZ_-qk.mjs";
3
- import { createFinalizableDraftStreamControlsForState } from "openclaw/plugin-sdk/channel-outbound";
2
+ import { a as sendSingleTextMessageMatrix, m as prepareMatrixSingleText, t as editMessageMatrix } from "./send-aVdC5NJO.mjs";
3
+ import { createFinalizableDraftLifecycle } from "openclaw/plugin-sdk/channel-outbound";
4
4
  //#region extensions/matrix/src/matrix/draft-stream.ts
5
5
  const DEFAULT_THROTTLE_MS = 1e3;
6
6
  function resolveDraftPreviewOptions(mode) {
@@ -82,10 +82,22 @@ function createMatrixDraftStream(params) {
82
82
  return false;
83
83
  }
84
84
  };
85
- const { loop, update, stop: stopDraft, discardPending } = createFinalizableDraftStreamControlsForState({
85
+ const { loop, update, stop: stopDraft, discardPending, seal, clear, retire, cleanupPending } = createFinalizableDraftLifecycle({
86
86
  throttleMs: DEFAULT_THROTTLE_MS,
87
87
  state: streamState,
88
- sendOrEditStreamMessage: sendOrEdit
88
+ sendOrEditStreamMessage: sendOrEdit,
89
+ readMessageId: () => currentEventId,
90
+ clearMessageId: () => {
91
+ currentEventId = void 0;
92
+ lastSentText = "";
93
+ lastSentContent = "";
94
+ },
95
+ isValidMessageId: (id) => typeof id === "string" && id.length > 0,
96
+ deleteMessage: async (id) => {
97
+ await client.redactEvent(roomId, id);
98
+ },
99
+ warn: log,
100
+ warnPrefix: "matrix draft preview cleanup failed"
89
101
  });
90
102
  log?.(`draft-stream: ready (throttleMs=${DEFAULT_THROTTLE_MS})`);
91
103
  const finalizeLive = async () => {
@@ -134,14 +146,18 @@ function createMatrixDraftStream(params) {
134
146
  const deleteCurrentMessage = async () => {
135
147
  loop.resetPending();
136
148
  await loop.waitForInFlight();
137
- if (currentEventId) await client.redactEvent(roomId, currentEventId);
149
+ const retiredEventId = currentEventId;
138
150
  resetCurrentMessage();
151
+ if (retiredEventId) await retire(retiredEventId);
139
152
  };
140
153
  return {
141
154
  update,
142
155
  flush: loop.flush,
143
156
  stop,
144
157
  discardPending,
158
+ seal,
159
+ clear,
160
+ cleanupPending,
145
161
  deleteCurrentMessage,
146
162
  finalizeLive,
147
163
  reset,
@@ -1,4 +1,4 @@
1
- import { o as resolveMatrixDefaultOrOnlyAccountId } from "./account-selection-5koohRSQ.mjs";
1
+ import { s as resolveMatrixDefaultOrOnlyAccountId } from "./account-selection-BHkfU1eC.mjs";
2
2
  import { t as resolveMatrixConfigFieldPath } from "./config-paths-CnREYb1Y.mjs";
3
3
  import { normalizeOptionalAccountId } from "openclaw/plugin-sdk/account-id";
4
4
  //#region extensions/matrix/src/matrix/encryption-guidance.ts
@@ -0,0 +1,213 @@
1
+ import { t as getMatrixRuntime } from "./runtime-1kn1P6io.mjs";
2
+ import { t as claimCurrentTokenStorageState } from "./storage-BXaFc0S4.mjs";
3
+ import { c as writeMatrixSyncCacheStateToStore, i as openMatrixSyncCacheStoreOptions, n as deleteMatrixSyncCacheStateFromStore, o as readPersistedStoreFromStore } from "./sync-cache-state-BMtGMxU1.mjs";
4
+ import { n as LogService } from "./logger-xBjiRIp1.mjs";
5
+ import { MemoryStore, SyncAccumulator } from "matrix-js-sdk/lib/matrix.js";
6
+ //#region extensions/matrix/src/matrix/async-lock.ts
7
+ function createAsyncLock() {
8
+ let lock = Promise.resolve();
9
+ return async function withLock(fn) {
10
+ const previous = lock;
11
+ let release;
12
+ lock = new Promise((resolve) => {
13
+ release = resolve;
14
+ });
15
+ await previous;
16
+ try {
17
+ return await fn();
18
+ } finally {
19
+ release?.();
20
+ }
21
+ };
22
+ }
23
+ //#endregion
24
+ //#region extensions/matrix/src/matrix/client/file-sync-store.ts
25
+ const PERSIST_DEBOUNCE_MS = 250;
26
+ function cloneJson(value) {
27
+ return structuredClone(value);
28
+ }
29
+ function syncDataToSyncResponse(syncData) {
30
+ return {
31
+ next_batch: syncData.nextBatch,
32
+ rooms: syncData.roomsData,
33
+ account_data: { events: syncData.accountData }
34
+ };
35
+ }
36
+ var SqliteBackedMatrixSyncStore = class SqliteBackedMatrixSyncStore extends MemoryStore {
37
+ static async create(storageRootDir) {
38
+ let store;
39
+ let persisted = null;
40
+ let unavailableError;
41
+ try {
42
+ store = getMatrixRuntime().state.openKeyedStore(openMatrixSyncCacheStoreOptions(storageRootDir));
43
+ persisted = await readPersistedStoreFromStore({
44
+ storageRootDir,
45
+ store
46
+ });
47
+ } catch (error) {
48
+ unavailableError = error;
49
+ LogService.warn("MatrixSyncCacheStore", "Failed to load Matrix sync cache:", error);
50
+ }
51
+ return new SqliteBackedMatrixSyncStore(storageRootDir, store, persisted, unavailableError);
52
+ }
53
+ constructor(storageRootDir, store, persisted, storeUnavailableError) {
54
+ super();
55
+ this.storageRootDir = storageRootDir;
56
+ this.store = store;
57
+ this.storeUnavailableError = storeUnavailableError;
58
+ this.persistLock = createAsyncLock();
59
+ this.accumulator = new SyncAccumulator();
60
+ this.savedSync = null;
61
+ this.cleanShutdown = false;
62
+ this.dirty = false;
63
+ this.frozen = false;
64
+ this.persistTimer = null;
65
+ this.persistPromise = null;
66
+ const restoredSavedSync = persisted?.savedSync ?? null;
67
+ const restoredClientOptions = persisted?.clientOptions;
68
+ const restoredCleanShutdown = persisted?.cleanShutdown === true;
69
+ this.savedSync = restoredSavedSync;
70
+ this.savedClientOptions = restoredClientOptions;
71
+ this.hadSavedSyncOnLoad = restoredSavedSync !== null;
72
+ this.hadCleanShutdownOnLoad = this.hadSavedSyncOnLoad && restoredCleanShutdown;
73
+ this.cleanShutdown = this.hadCleanShutdownOnLoad;
74
+ if (this.savedSync) {
75
+ this.accumulator.accumulate(syncDataToSyncResponse(this.savedSync), true);
76
+ super.setSyncToken(this.savedSync.nextBatch);
77
+ }
78
+ if (this.savedClientOptions) super.storeClientOptions(this.savedClientOptions);
79
+ }
80
+ hasSavedSync() {
81
+ return this.hadSavedSyncOnLoad;
82
+ }
83
+ hasSavedSyncFromCleanShutdown() {
84
+ return this.hadCleanShutdownOnLoad;
85
+ }
86
+ getSavedSync() {
87
+ return Promise.resolve(this.savedSync ? cloneJson(this.savedSync) : null);
88
+ }
89
+ getSavedSyncToken() {
90
+ return Promise.resolve(this.savedSync?.nextBatch ?? null);
91
+ }
92
+ setSyncData(syncData) {
93
+ if (this.frozen) return Promise.resolve();
94
+ this.accumulator.accumulate(syncData);
95
+ this.savedSync = this.accumulator.getJSON();
96
+ this.markDirtyAndSchedulePersist();
97
+ return Promise.resolve();
98
+ }
99
+ getClientOptions() {
100
+ return Promise.resolve(this.savedClientOptions ? cloneJson(this.savedClientOptions) : void 0);
101
+ }
102
+ storeClientOptions(options) {
103
+ if (this.frozen) return Promise.resolve();
104
+ this.savedClientOptions = cloneJson(options);
105
+ super.storeClientOptions(options);
106
+ this.markDirtyAndSchedulePersist();
107
+ return Promise.resolve();
108
+ }
109
+ save(force = false) {
110
+ if (force) return this.flush();
111
+ return Promise.resolve();
112
+ }
113
+ wantsSave() {
114
+ return false;
115
+ }
116
+ async deleteAllData() {
117
+ const store = this.requireStore();
118
+ if (this.persistTimer) {
119
+ clearTimeout(this.persistTimer);
120
+ this.persistTimer = null;
121
+ }
122
+ this.dirty = false;
123
+ await this.enqueuePersistence(async () => {
124
+ await super.deleteAllData();
125
+ this.savedSync = null;
126
+ this.savedClientOptions = void 0;
127
+ this.cleanShutdown = false;
128
+ this.dirty = false;
129
+ await deleteMatrixSyncCacheStateFromStore({
130
+ storageRootDir: this.storageRootDir,
131
+ store
132
+ });
133
+ });
134
+ }
135
+ markCleanShutdown() {
136
+ this.cleanShutdown = true;
137
+ this.dirty = true;
138
+ }
139
+ async freezeSyncCursorPersistence() {
140
+ this.frozen = true;
141
+ if (this.persistTimer) {
142
+ clearTimeout(this.persistTimer);
143
+ this.persistTimer = null;
144
+ }
145
+ while (this.persistPromise) await this.persistPromise;
146
+ }
147
+ discardPendingSyncCursorPersistence() {
148
+ this.frozen = true;
149
+ if (this.persistTimer) {
150
+ clearTimeout(this.persistTimer);
151
+ this.persistTimer = null;
152
+ }
153
+ this.cleanShutdown = false;
154
+ this.dirty = false;
155
+ }
156
+ async flush() {
157
+ if (this.persistTimer) {
158
+ clearTimeout(this.persistTimer);
159
+ this.persistTimer = null;
160
+ }
161
+ while (this.dirty || this.persistPromise) {
162
+ if (this.dirty && !this.persistPromise) this.enqueuePersistence(() => this.persist());
163
+ await this.persistPromise;
164
+ }
165
+ }
166
+ markDirtyAndSchedulePersist() {
167
+ if (this.frozen) return;
168
+ this.cleanShutdown = false;
169
+ this.dirty = true;
170
+ if (this.persistTimer) return;
171
+ this.persistTimer = setTimeout(() => {
172
+ this.persistTimer = null;
173
+ this.flush().catch((err) => {
174
+ LogService.warn("MatrixSyncCacheStore", "Failed to persist Matrix sync store:", err);
175
+ });
176
+ }, PERSIST_DEBOUNCE_MS);
177
+ this.persistTimer.unref?.();
178
+ }
179
+ async persist() {
180
+ const store = this.requireStore();
181
+ this.dirty = false;
182
+ const payload = {
183
+ version: 1,
184
+ savedSync: this.savedSync ? cloneJson(this.savedSync) : null,
185
+ cleanShutdown: this.cleanShutdown,
186
+ ...this.savedClientOptions ? { clientOptions: cloneJson(this.savedClientOptions) } : {}
187
+ };
188
+ try {
189
+ await writeMatrixSyncCacheStateToStore({
190
+ storageRootDir: this.storageRootDir,
191
+ payload,
192
+ store
193
+ });
194
+ await claimCurrentTokenStorageState({ rootDir: this.storageRootDir });
195
+ } catch (err) {
196
+ this.dirty = true;
197
+ throw err;
198
+ }
199
+ }
200
+ enqueuePersistence(operation) {
201
+ const pending = this.persistLock(operation).finally(() => {
202
+ if (this.persistPromise === pending) this.persistPromise = null;
203
+ });
204
+ this.persistPromise = pending;
205
+ return pending;
206
+ }
207
+ requireStore() {
208
+ if (this.store && this.storeUnavailableError == null) return this.store;
209
+ throw new Error("Matrix sync cache SQLite store is unavailable; cannot persist sync state", { cause: this.storeUnavailableError });
210
+ }
211
+ };
212
+ //#endregion
213
+ export { SqliteBackedMatrixSyncStore };