@openclaw/mattermost 2026.2.21 → 2026.6.11-beta.2

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 (787) hide show
  1. package/README.md +13 -0
  2. package/dist/accounts-DnAHfb5f.js +438 -0
  3. package/dist/api.js +2 -0
  4. package/dist/channel-plugin-api.js +31 -0
  5. package/dist/channel-plugin-runtime-MXClEU4F.js +1160 -0
  6. package/dist/channel-plugin-runtime.js +2 -0
  7. package/dist/channel.runtime-W-pjr9zL.js +2671 -0
  8. package/dist/doctor-contract-api.js +2 -0
  9. package/dist/doctor-contract-ttH0DCuq.js +7 -0
  10. package/dist/gateway-auth-api.js +2 -0
  11. package/dist/gateway-auth-bypass-BHgOAkk8.js +37 -0
  12. package/dist/index.js +31 -0
  13. package/dist/monitor-auth-BiDuyvOc.js +183 -0
  14. package/dist/policy-api.js +2 -0
  15. package/dist/runtime-CNB4YGqJ.js +8 -0
  16. package/dist/runtime-api.js +24 -0
  17. package/dist/secret-contract-Cx0LUNXy.js +44 -0
  18. package/dist/secret-contract-api.js +2 -0
  19. package/dist/setup-entry.js +15 -0
  20. package/dist/slash-route-api.js +2 -0
  21. package/dist/slash-state-I1qleAHM.js +2251 -0
  22. package/node_modules/ws/LICENSE +20 -0
  23. package/node_modules/ws/README.md +548 -0
  24. package/node_modules/ws/browser.js +8 -0
  25. package/node_modules/ws/index.js +22 -0
  26. package/node_modules/ws/lib/buffer-util.js +131 -0
  27. package/node_modules/ws/lib/constants.js +19 -0
  28. package/node_modules/ws/lib/event-target.js +292 -0
  29. package/node_modules/ws/lib/extension.js +203 -0
  30. package/node_modules/ws/lib/limiter.js +55 -0
  31. package/node_modules/ws/lib/permessage-deflate.js +528 -0
  32. package/node_modules/ws/lib/receiver.js +760 -0
  33. package/node_modules/ws/lib/sender.js +607 -0
  34. package/node_modules/ws/lib/stream.js +161 -0
  35. package/node_modules/ws/lib/subprotocol.js +62 -0
  36. package/node_modules/ws/lib/validation.js +152 -0
  37. package/node_modules/ws/lib/websocket-server.js +562 -0
  38. package/node_modules/ws/lib/websocket.js +1407 -0
  39. package/node_modules/ws/package.json +70 -0
  40. package/node_modules/ws/wrapper.mjs +21 -0
  41. package/node_modules/zod/LICENSE +21 -0
  42. package/node_modules/zod/README.md +191 -0
  43. package/node_modules/zod/index.cjs +33 -0
  44. package/node_modules/zod/index.d.cts +4 -0
  45. package/node_modules/zod/index.d.ts +4 -0
  46. package/node_modules/zod/index.js +4 -0
  47. package/node_modules/zod/locales/index.cjs +17 -0
  48. package/node_modules/zod/locales/index.d.cts +1 -0
  49. package/node_modules/zod/locales/index.d.ts +1 -0
  50. package/node_modules/zod/locales/index.js +1 -0
  51. package/node_modules/zod/locales/package.json +7 -0
  52. package/node_modules/zod/mini/index.cjs +32 -0
  53. package/node_modules/zod/mini/index.d.cts +3 -0
  54. package/node_modules/zod/mini/index.d.ts +3 -0
  55. package/node_modules/zod/mini/index.js +3 -0
  56. package/node_modules/zod/mini/package.json +7 -0
  57. package/node_modules/zod/package.json +135 -0
  58. package/node_modules/zod/src/index.ts +4 -0
  59. package/node_modules/zod/src/locales/index.ts +1 -0
  60. package/node_modules/zod/src/mini/index.ts +3 -0
  61. package/node_modules/zod/src/v3/ZodError.ts +330 -0
  62. package/node_modules/zod/src/v3/benchmarks/datetime.ts +58 -0
  63. package/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +80 -0
  64. package/node_modules/zod/src/v3/benchmarks/index.ts +59 -0
  65. package/node_modules/zod/src/v3/benchmarks/ipv4.ts +57 -0
  66. package/node_modules/zod/src/v3/benchmarks/object.ts +69 -0
  67. package/node_modules/zod/src/v3/benchmarks/primitives.ts +162 -0
  68. package/node_modules/zod/src/v3/benchmarks/realworld.ts +63 -0
  69. package/node_modules/zod/src/v3/benchmarks/string.ts +55 -0
  70. package/node_modules/zod/src/v3/benchmarks/union.ts +80 -0
  71. package/node_modules/zod/src/v3/errors.ts +13 -0
  72. package/node_modules/zod/src/v3/external.ts +6 -0
  73. package/node_modules/zod/src/v3/helpers/enumUtil.ts +17 -0
  74. package/node_modules/zod/src/v3/helpers/errorUtil.ts +8 -0
  75. package/node_modules/zod/src/v3/helpers/parseUtil.ts +176 -0
  76. package/node_modules/zod/src/v3/helpers/partialUtil.ts +34 -0
  77. package/node_modules/zod/src/v3/helpers/typeAliases.ts +2 -0
  78. package/node_modules/zod/src/v3/helpers/util.ts +224 -0
  79. package/node_modules/zod/src/v3/index.ts +4 -0
  80. package/node_modules/zod/src/v3/locales/en.ts +124 -0
  81. package/node_modules/zod/src/v3/standard-schema.ts +113 -0
  82. package/node_modules/zod/src/v3/tests/Mocker.ts +54 -0
  83. package/node_modules/zod/src/v3/tests/all-errors.test.ts +157 -0
  84. package/node_modules/zod/src/v3/tests/anyunknown.test.ts +28 -0
  85. package/node_modules/zod/src/v3/tests/array.test.ts +71 -0
  86. package/node_modules/zod/src/v3/tests/async-parsing.test.ts +388 -0
  87. package/node_modules/zod/src/v3/tests/async-refinements.test.ts +46 -0
  88. package/node_modules/zod/src/v3/tests/base.test.ts +29 -0
  89. package/node_modules/zod/src/v3/tests/bigint.test.ts +55 -0
  90. package/node_modules/zod/src/v3/tests/branded.test.ts +53 -0
  91. package/node_modules/zod/src/v3/tests/catch.test.ts +220 -0
  92. package/node_modules/zod/src/v3/tests/coerce.test.ts +133 -0
  93. package/node_modules/zod/src/v3/tests/complex.test.ts +70 -0
  94. package/node_modules/zod/src/v3/tests/custom.test.ts +31 -0
  95. package/node_modules/zod/src/v3/tests/date.test.ts +32 -0
  96. package/node_modules/zod/src/v3/tests/deepmasking.test.ts +186 -0
  97. package/node_modules/zod/src/v3/tests/default.test.ts +112 -0
  98. package/node_modules/zod/src/v3/tests/description.test.ts +33 -0
  99. package/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +315 -0
  100. package/node_modules/zod/src/v3/tests/enum.test.ts +80 -0
  101. package/node_modules/zod/src/v3/tests/error.test.ts +551 -0
  102. package/node_modules/zod/src/v3/tests/firstparty.test.ts +87 -0
  103. package/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +21 -0
  104. package/node_modules/zod/src/v3/tests/function.test.ts +261 -0
  105. package/node_modules/zod/src/v3/tests/generics.test.ts +48 -0
  106. package/node_modules/zod/src/v3/tests/instanceof.test.ts +37 -0
  107. package/node_modules/zod/src/v3/tests/intersection.test.ts +110 -0
  108. package/node_modules/zod/src/v3/tests/language-server.source.ts +76 -0
  109. package/node_modules/zod/src/v3/tests/language-server.test.ts +207 -0
  110. package/node_modules/zod/src/v3/tests/literal.test.ts +36 -0
  111. package/node_modules/zod/src/v3/tests/map.test.ts +110 -0
  112. package/node_modules/zod/src/v3/tests/masking.test.ts +4 -0
  113. package/node_modules/zod/src/v3/tests/mocker.test.ts +19 -0
  114. package/node_modules/zod/src/v3/tests/nan.test.ts +24 -0
  115. package/node_modules/zod/src/v3/tests/nativeEnum.test.ts +87 -0
  116. package/node_modules/zod/src/v3/tests/nullable.test.ts +42 -0
  117. package/node_modules/zod/src/v3/tests/number.test.ts +176 -0
  118. package/node_modules/zod/src/v3/tests/object-augmentation.test.ts +29 -0
  119. package/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +29 -0
  120. package/node_modules/zod/src/v3/tests/object.test.ts +434 -0
  121. package/node_modules/zod/src/v3/tests/optional.test.ts +42 -0
  122. package/node_modules/zod/src/v3/tests/parseUtil.test.ts +23 -0
  123. package/node_modules/zod/src/v3/tests/parser.test.ts +41 -0
  124. package/node_modules/zod/src/v3/tests/partials.test.ts +243 -0
  125. package/node_modules/zod/src/v3/tests/pickomit.test.ts +111 -0
  126. package/node_modules/zod/src/v3/tests/pipeline.test.ts +29 -0
  127. package/node_modules/zod/src/v3/tests/preprocess.test.ts +186 -0
  128. package/node_modules/zod/src/v3/tests/primitive.test.ts +440 -0
  129. package/node_modules/zod/src/v3/tests/promise.test.ts +90 -0
  130. package/node_modules/zod/src/v3/tests/readonly.test.ts +194 -0
  131. package/node_modules/zod/src/v3/tests/record.test.ts +171 -0
  132. package/node_modules/zod/src/v3/tests/recursive.test.ts +197 -0
  133. package/node_modules/zod/src/v3/tests/refine.test.ts +313 -0
  134. package/node_modules/zod/src/v3/tests/safeparse.test.ts +27 -0
  135. package/node_modules/zod/src/v3/tests/set.test.ts +142 -0
  136. package/node_modules/zod/src/v3/tests/standard-schema.test.ts +83 -0
  137. package/node_modules/zod/src/v3/tests/string.test.ts +916 -0
  138. package/node_modules/zod/src/v3/tests/transformer.test.ts +233 -0
  139. package/node_modules/zod/src/v3/tests/tuple.test.ts +90 -0
  140. package/node_modules/zod/src/v3/tests/unions.test.ts +57 -0
  141. package/node_modules/zod/src/v3/tests/validations.test.ts +133 -0
  142. package/node_modules/zod/src/v3/tests/void.test.ts +15 -0
  143. package/node_modules/zod/src/v3/types.ts +5138 -0
  144. package/node_modules/zod/src/v4/classic/checks.ts +32 -0
  145. package/node_modules/zod/src/v4/classic/coerce.ts +27 -0
  146. package/node_modules/zod/src/v4/classic/compat.ts +70 -0
  147. package/node_modules/zod/src/v4/classic/errors.ts +82 -0
  148. package/node_modules/zod/src/v4/classic/external.ts +52 -0
  149. package/node_modules/zod/src/v4/classic/from-json-schema.ts +659 -0
  150. package/node_modules/zod/src/v4/classic/index.ts +5 -0
  151. package/node_modules/zod/src/v4/classic/iso.ts +90 -0
  152. package/node_modules/zod/src/v4/classic/parse.ts +82 -0
  153. package/node_modules/zod/src/v4/classic/schemas.ts +2672 -0
  154. package/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +26 -0
  155. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +59 -0
  156. package/node_modules/zod/src/v4/classic/tests/array.test.ts +264 -0
  157. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +216 -0
  158. package/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +381 -0
  159. package/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +68 -0
  160. package/node_modules/zod/src/v4/classic/tests/base.test.ts +7 -0
  161. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +54 -0
  162. package/node_modules/zod/src/v4/classic/tests/brand.test.ts +106 -0
  163. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +326 -0
  164. package/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +20 -0
  165. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +573 -0
  166. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +703 -0
  167. package/node_modules/zod/src/v4/classic/tests/coerce.test.ts +160 -0
  168. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +374 -0
  169. package/node_modules/zod/src/v4/classic/tests/custom.test.ts +40 -0
  170. package/node_modules/zod/src/v4/classic/tests/date.test.ts +62 -0
  171. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +302 -0
  172. package/node_modules/zod/src/v4/classic/tests/default.test.ts +409 -0
  173. package/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +27 -0
  174. package/node_modules/zod/src/v4/classic/tests/description.test.ts +32 -0
  175. package/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +197 -0
  176. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +694 -0
  177. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +285 -0
  178. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +807 -0
  179. package/node_modules/zod/src/v4/classic/tests/error.test.ts +711 -0
  180. package/node_modules/zod/src/v4/classic/tests/file.test.ts +96 -0
  181. package/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +179 -0
  182. package/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +26 -0
  183. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +895 -0
  184. package/node_modules/zod/src/v4/classic/tests/function.test.ts +360 -0
  185. package/node_modules/zod/src/v4/classic/tests/generics.test.ts +72 -0
  186. package/node_modules/zod/src/v4/classic/tests/global-config.test.ts +39 -0
  187. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +68 -0
  188. package/node_modules/zod/src/v4/classic/tests/index.test.ts +939 -0
  189. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +60 -0
  190. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +198 -0
  191. package/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +46 -0
  192. package/node_modules/zod/src/v4/classic/tests/json.test.ts +109 -0
  193. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +227 -0
  194. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +117 -0
  195. package/node_modules/zod/src/v4/classic/tests/locales_ka.test.ts +29 -0
  196. package/node_modules/zod/src/v4/classic/tests/locales_ro.test.ts +24 -0
  197. package/node_modules/zod/src/v4/classic/tests/map.test.ts +330 -0
  198. package/node_modules/zod/src/v4/classic/tests/nan.test.ts +21 -0
  199. package/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +168 -0
  200. package/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +101 -0
  201. package/node_modules/zod/src/v4/classic/tests/nullable.test.ts +22 -0
  202. package/node_modules/zod/src/v4/classic/tests/number.test.ts +325 -0
  203. package/node_modules/zod/src/v4/classic/tests/object.test.ts +717 -0
  204. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +333 -0
  205. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +450 -0
  206. package/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +211 -0
  207. package/node_modules/zod/src/v4/classic/tests/pipe.test.ts +101 -0
  208. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +74 -0
  209. package/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +26 -0
  210. package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +351 -0
  211. package/node_modules/zod/src/v4/classic/tests/primitive.test.ts +175 -0
  212. package/node_modules/zod/src/v4/classic/tests/promise.test.ts +81 -0
  213. package/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +23 -0
  214. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +252 -0
  215. package/node_modules/zod/src/v4/classic/tests/record.test.ts +717 -0
  216. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +631 -0
  217. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +633 -0
  218. package/node_modules/zod/src/v4/classic/tests/registries.test.ts +243 -0
  219. package/node_modules/zod/src/v4/classic/tests/set.test.ts +181 -0
  220. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +134 -0
  221. package/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +125 -0
  222. package/node_modules/zod/src/v4/classic/tests/string.test.ts +1224 -0
  223. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +106 -0
  224. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +771 -0
  225. package/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +438 -0
  226. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +3125 -0
  227. package/node_modules/zod/src/v4/classic/tests/transform.test.ts +378 -0
  228. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +496 -0
  229. package/node_modules/zod/src/v4/classic/tests/union.test.ts +273 -0
  230. package/node_modules/zod/src/v4/classic/tests/url.test.ts +13 -0
  231. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +283 -0
  232. package/node_modules/zod/src/v4/classic/tests/void.test.ts +12 -0
  233. package/node_modules/zod/src/v4/core/api.ts +1823 -0
  234. package/node_modules/zod/src/v4/core/checks.ts +1293 -0
  235. package/node_modules/zod/src/v4/core/config.ts +15 -0
  236. package/node_modules/zod/src/v4/core/core.ts +153 -0
  237. package/node_modules/zod/src/v4/core/doc.ts +44 -0
  238. package/node_modules/zod/src/v4/core/errors.ts +455 -0
  239. package/node_modules/zod/src/v4/core/index.ts +16 -0
  240. package/node_modules/zod/src/v4/core/json-schema-generator.ts +126 -0
  241. package/node_modules/zod/src/v4/core/json-schema-processors.ts +666 -0
  242. package/node_modules/zod/src/v4/core/json-schema.ts +147 -0
  243. package/node_modules/zod/src/v4/core/parse.ts +195 -0
  244. package/node_modules/zod/src/v4/core/regexes.ts +190 -0
  245. package/node_modules/zod/src/v4/core/registries.ts +105 -0
  246. package/node_modules/zod/src/v4/core/schemas.ts +4730 -0
  247. package/node_modules/zod/src/v4/core/standard-schema.ts +159 -0
  248. package/node_modules/zod/src/v4/core/tests/extend.test.ts +59 -0
  249. package/node_modules/zod/src/v4/core/tests/index.test.ts +46 -0
  250. package/node_modules/zod/src/v4/core/tests/locales/be.test.ts +124 -0
  251. package/node_modules/zod/src/v4/core/tests/locales/el.test.ts +215 -0
  252. package/node_modules/zod/src/v4/core/tests/locales/en.test.ts +22 -0
  253. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +181 -0
  254. package/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +72 -0
  255. package/node_modules/zod/src/v4/core/tests/locales/he.test.ts +379 -0
  256. package/node_modules/zod/src/v4/core/tests/locales/hr.test.ts +163 -0
  257. package/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +46 -0
  258. package/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +128 -0
  259. package/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +69 -0
  260. package/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +105 -0
  261. package/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +125 -0
  262. package/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +45 -0
  263. package/node_modules/zod/src/v4/core/to-json-schema.ts +622 -0
  264. package/node_modules/zod/src/v4/core/util.ts +983 -0
  265. package/node_modules/zod/src/v4/core/versions.ts +5 -0
  266. package/node_modules/zod/src/v4/core/zsf.ts +323 -0
  267. package/node_modules/zod/src/v4/index.ts +4 -0
  268. package/node_modules/zod/src/v4/locales/ar.ts +115 -0
  269. package/node_modules/zod/src/v4/locales/az.ts +111 -0
  270. package/node_modules/zod/src/v4/locales/be.ts +176 -0
  271. package/node_modules/zod/src/v4/locales/bg.ts +128 -0
  272. package/node_modules/zod/src/v4/locales/ca.ts +116 -0
  273. package/node_modules/zod/src/v4/locales/cs.ts +118 -0
  274. package/node_modules/zod/src/v4/locales/da.ts +123 -0
  275. package/node_modules/zod/src/v4/locales/de.ts +116 -0
  276. package/node_modules/zod/src/v4/locales/el.ts +121 -0
  277. package/node_modules/zod/src/v4/locales/en.ts +123 -0
  278. package/node_modules/zod/src/v4/locales/eo.ts +118 -0
  279. package/node_modules/zod/src/v4/locales/es.ts +141 -0
  280. package/node_modules/zod/src/v4/locales/fa.ts +126 -0
  281. package/node_modules/zod/src/v4/locales/fi.ts +121 -0
  282. package/node_modules/zod/src/v4/locales/fr-CA.ts +116 -0
  283. package/node_modules/zod/src/v4/locales/fr.ts +132 -0
  284. package/node_modules/zod/src/v4/locales/he.ts +246 -0
  285. package/node_modules/zod/src/v4/locales/hr.ts +131 -0
  286. package/node_modules/zod/src/v4/locales/hu.ts +117 -0
  287. package/node_modules/zod/src/v4/locales/hy.ts +164 -0
  288. package/node_modules/zod/src/v4/locales/id.ts +115 -0
  289. package/node_modules/zod/src/v4/locales/index.ts +52 -0
  290. package/node_modules/zod/src/v4/locales/is.ts +119 -0
  291. package/node_modules/zod/src/v4/locales/it.ts +116 -0
  292. package/node_modules/zod/src/v4/locales/ja.ts +114 -0
  293. package/node_modules/zod/src/v4/locales/ka.ts +123 -0
  294. package/node_modules/zod/src/v4/locales/kh.ts +7 -0
  295. package/node_modules/zod/src/v4/locales/km.ts +119 -0
  296. package/node_modules/zod/src/v4/locales/ko.ts +121 -0
  297. package/node_modules/zod/src/v4/locales/lt.ts +239 -0
  298. package/node_modules/zod/src/v4/locales/mk.ts +118 -0
  299. package/node_modules/zod/src/v4/locales/ms.ts +115 -0
  300. package/node_modules/zod/src/v4/locales/nl.ts +121 -0
  301. package/node_modules/zod/src/v4/locales/no.ts +116 -0
  302. package/node_modules/zod/src/v4/locales/ota.ts +117 -0
  303. package/node_modules/zod/src/v4/locales/pl.ts +118 -0
  304. package/node_modules/zod/src/v4/locales/ps.ts +126 -0
  305. package/node_modules/zod/src/v4/locales/pt.ts +116 -0
  306. package/node_modules/zod/src/v4/locales/ro.ts +129 -0
  307. package/node_modules/zod/src/v4/locales/ru.ts +176 -0
  308. package/node_modules/zod/src/v4/locales/sl.ts +118 -0
  309. package/node_modules/zod/src/v4/locales/sv.ts +119 -0
  310. package/node_modules/zod/src/v4/locales/ta.ts +118 -0
  311. package/node_modules/zod/src/v4/locales/th.ts +119 -0
  312. package/node_modules/zod/src/v4/locales/tr.ts +111 -0
  313. package/node_modules/zod/src/v4/locales/ua.ts +7 -0
  314. package/node_modules/zod/src/v4/locales/uk.ts +117 -0
  315. package/node_modules/zod/src/v4/locales/ur.ts +119 -0
  316. package/node_modules/zod/src/v4/locales/uz.ts +117 -0
  317. package/node_modules/zod/src/v4/locales/vi.ts +117 -0
  318. package/node_modules/zod/src/v4/locales/yo.ts +124 -0
  319. package/node_modules/zod/src/v4/locales/zh-CN.ts +116 -0
  320. package/node_modules/zod/src/v4/locales/zh-TW.ts +115 -0
  321. package/node_modules/zod/src/v4/mini/checks.ts +32 -0
  322. package/node_modules/zod/src/v4/mini/coerce.ts +27 -0
  323. package/node_modules/zod/src/v4/mini/external.ts +41 -0
  324. package/node_modules/zod/src/v4/mini/index.ts +3 -0
  325. package/node_modules/zod/src/v4/mini/iso.ts +66 -0
  326. package/node_modules/zod/src/v4/mini/parse.ts +14 -0
  327. package/node_modules/zod/src/v4/mini/schemas.ts +1947 -0
  328. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +24 -0
  329. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +129 -0
  330. package/node_modules/zod/src/v4/mini/tests/brand.test.ts +94 -0
  331. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +144 -0
  332. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +548 -0
  333. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +36 -0
  334. package/node_modules/zod/src/v4/mini/tests/error.test.ts +22 -0
  335. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +5 -0
  336. package/node_modules/zod/src/v4/mini/tests/index.test.ts +993 -0
  337. package/node_modules/zod/src/v4/mini/tests/number.test.ts +95 -0
  338. package/node_modules/zod/src/v4/mini/tests/object.test.ts +227 -0
  339. package/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +43 -0
  340. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +325 -0
  341. package/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +50 -0
  342. package/node_modules/zod/src/v4/mini/tests/string.test.ts +352 -0
  343. package/node_modules/zod/src/v4-mini/index.ts +3 -0
  344. package/node_modules/zod/v3/ZodError.cjs +138 -0
  345. package/node_modules/zod/v3/ZodError.d.cts +164 -0
  346. package/node_modules/zod/v3/ZodError.d.ts +164 -0
  347. package/node_modules/zod/v3/ZodError.js +133 -0
  348. package/node_modules/zod/v3/errors.cjs +17 -0
  349. package/node_modules/zod/v3/errors.d.cts +5 -0
  350. package/node_modules/zod/v3/errors.d.ts +5 -0
  351. package/node_modules/zod/v3/errors.js +9 -0
  352. package/node_modules/zod/v3/external.cjs +22 -0
  353. package/node_modules/zod/v3/external.d.cts +6 -0
  354. package/node_modules/zod/v3/external.d.ts +6 -0
  355. package/node_modules/zod/v3/external.js +6 -0
  356. package/node_modules/zod/v3/helpers/enumUtil.cjs +2 -0
  357. package/node_modules/zod/v3/helpers/enumUtil.d.cts +8 -0
  358. package/node_modules/zod/v3/helpers/enumUtil.d.ts +8 -0
  359. package/node_modules/zod/v3/helpers/enumUtil.js +1 -0
  360. package/node_modules/zod/v3/helpers/errorUtil.cjs +9 -0
  361. package/node_modules/zod/v3/helpers/errorUtil.d.cts +9 -0
  362. package/node_modules/zod/v3/helpers/errorUtil.d.ts +9 -0
  363. package/node_modules/zod/v3/helpers/errorUtil.js +6 -0
  364. package/node_modules/zod/v3/helpers/parseUtil.cjs +124 -0
  365. package/node_modules/zod/v3/helpers/parseUtil.d.cts +78 -0
  366. package/node_modules/zod/v3/helpers/parseUtil.d.ts +78 -0
  367. package/node_modules/zod/v3/helpers/parseUtil.js +109 -0
  368. package/node_modules/zod/v3/helpers/partialUtil.cjs +2 -0
  369. package/node_modules/zod/v3/helpers/partialUtil.d.cts +8 -0
  370. package/node_modules/zod/v3/helpers/partialUtil.d.ts +8 -0
  371. package/node_modules/zod/v3/helpers/partialUtil.js +1 -0
  372. package/node_modules/zod/v3/helpers/typeAliases.cjs +2 -0
  373. package/node_modules/zod/v3/helpers/typeAliases.d.cts +2 -0
  374. package/node_modules/zod/v3/helpers/typeAliases.d.ts +2 -0
  375. package/node_modules/zod/v3/helpers/typeAliases.js +1 -0
  376. package/node_modules/zod/v3/helpers/util.cjs +137 -0
  377. package/node_modules/zod/v3/helpers/util.d.cts +85 -0
  378. package/node_modules/zod/v3/helpers/util.d.ts +85 -0
  379. package/node_modules/zod/v3/helpers/util.js +133 -0
  380. package/node_modules/zod/v3/index.cjs +33 -0
  381. package/node_modules/zod/v3/index.d.cts +4 -0
  382. package/node_modules/zod/v3/index.d.ts +4 -0
  383. package/node_modules/zod/v3/index.js +4 -0
  384. package/node_modules/zod/v3/locales/en.cjs +112 -0
  385. package/node_modules/zod/v3/locales/en.d.cts +3 -0
  386. package/node_modules/zod/v3/locales/en.d.ts +3 -0
  387. package/node_modules/zod/v3/locales/en.js +109 -0
  388. package/node_modules/zod/v3/package.json +7 -0
  389. package/node_modules/zod/v3/standard-schema.cjs +2 -0
  390. package/node_modules/zod/v3/standard-schema.d.cts +102 -0
  391. package/node_modules/zod/v3/standard-schema.d.ts +102 -0
  392. package/node_modules/zod/v3/standard-schema.js +1 -0
  393. package/node_modules/zod/v3/types.cjs +3777 -0
  394. package/node_modules/zod/v3/types.d.cts +1034 -0
  395. package/node_modules/zod/v3/types.d.ts +1034 -0
  396. package/node_modules/zod/v3/types.js +3695 -0
  397. package/node_modules/zod/v4/classic/checks.cjs +33 -0
  398. package/node_modules/zod/v4/classic/checks.d.cts +1 -0
  399. package/node_modules/zod/v4/classic/checks.d.ts +1 -0
  400. package/node_modules/zod/v4/classic/checks.js +1 -0
  401. package/node_modules/zod/v4/classic/coerce.cjs +47 -0
  402. package/node_modules/zod/v4/classic/coerce.d.cts +17 -0
  403. package/node_modules/zod/v4/classic/coerce.d.ts +17 -0
  404. package/node_modules/zod/v4/classic/coerce.js +17 -0
  405. package/node_modules/zod/v4/classic/compat.cjs +61 -0
  406. package/node_modules/zod/v4/classic/compat.d.cts +50 -0
  407. package/node_modules/zod/v4/classic/compat.d.ts +50 -0
  408. package/node_modules/zod/v4/classic/compat.js +31 -0
  409. package/node_modules/zod/v4/classic/errors.cjs +74 -0
  410. package/node_modules/zod/v4/classic/errors.d.cts +30 -0
  411. package/node_modules/zod/v4/classic/errors.d.ts +30 -0
  412. package/node_modules/zod/v4/classic/errors.js +48 -0
  413. package/node_modules/zod/v4/classic/external.cjs +73 -0
  414. package/node_modules/zod/v4/classic/external.d.cts +16 -0
  415. package/node_modules/zod/v4/classic/external.d.ts +16 -0
  416. package/node_modules/zod/v4/classic/external.js +20 -0
  417. package/node_modules/zod/v4/classic/from-json-schema.cjs +625 -0
  418. package/node_modules/zod/v4/classic/from-json-schema.d.cts +12 -0
  419. package/node_modules/zod/v4/classic/from-json-schema.d.ts +12 -0
  420. package/node_modules/zod/v4/classic/from-json-schema.js +599 -0
  421. package/node_modules/zod/v4/classic/index.cjs +33 -0
  422. package/node_modules/zod/v4/classic/index.d.cts +4 -0
  423. package/node_modules/zod/v4/classic/index.d.ts +4 -0
  424. package/node_modules/zod/v4/classic/index.js +4 -0
  425. package/node_modules/zod/v4/classic/iso.cjs +60 -0
  426. package/node_modules/zod/v4/classic/iso.d.cts +22 -0
  427. package/node_modules/zod/v4/classic/iso.d.ts +22 -0
  428. package/node_modules/zod/v4/classic/iso.js +30 -0
  429. package/node_modules/zod/v4/classic/package.json +7 -0
  430. package/node_modules/zod/v4/classic/parse.cjs +41 -0
  431. package/node_modules/zod/v4/classic/parse.d.cts +31 -0
  432. package/node_modules/zod/v4/classic/parse.d.ts +31 -0
  433. package/node_modules/zod/v4/classic/parse.js +15 -0
  434. package/node_modules/zod/v4/classic/schemas.cjs +1511 -0
  435. package/node_modules/zod/v4/classic/schemas.d.cts +767 -0
  436. package/node_modules/zod/v4/classic/schemas.d.ts +767 -0
  437. package/node_modules/zod/v4/classic/schemas.js +1395 -0
  438. package/node_modules/zod/v4/core/api.cjs +1227 -0
  439. package/node_modules/zod/v4/core/api.d.cts +325 -0
  440. package/node_modules/zod/v4/core/api.d.ts +325 -0
  441. package/node_modules/zod/v4/core/api.js +1087 -0
  442. package/node_modules/zod/v4/core/checks.cjs +601 -0
  443. package/node_modules/zod/v4/core/checks.d.cts +278 -0
  444. package/node_modules/zod/v4/core/checks.d.ts +278 -0
  445. package/node_modules/zod/v4/core/checks.js +575 -0
  446. package/node_modules/zod/v4/core/core.cjs +85 -0
  447. package/node_modules/zod/v4/core/core.d.cts +70 -0
  448. package/node_modules/zod/v4/core/core.d.ts +70 -0
  449. package/node_modules/zod/v4/core/core.js +78 -0
  450. package/node_modules/zod/v4/core/doc.cjs +39 -0
  451. package/node_modules/zod/v4/core/doc.d.cts +14 -0
  452. package/node_modules/zod/v4/core/doc.d.ts +14 -0
  453. package/node_modules/zod/v4/core/doc.js +35 -0
  454. package/node_modules/zod/v4/core/errors.cjs +216 -0
  455. package/node_modules/zod/v4/core/errors.d.cts +221 -0
  456. package/node_modules/zod/v4/core/errors.d.ts +221 -0
  457. package/node_modules/zod/v4/core/errors.js +185 -0
  458. package/node_modules/zod/v4/core/index.cjs +47 -0
  459. package/node_modules/zod/v4/core/index.d.cts +16 -0
  460. package/node_modules/zod/v4/core/index.d.ts +16 -0
  461. package/node_modules/zod/v4/core/index.js +16 -0
  462. package/node_modules/zod/v4/core/json-schema-generator.cjs +99 -0
  463. package/node_modules/zod/v4/core/json-schema-generator.d.cts +65 -0
  464. package/node_modules/zod/v4/core/json-schema-generator.d.ts +65 -0
  465. package/node_modules/zod/v4/core/json-schema-generator.js +95 -0
  466. package/node_modules/zod/v4/core/json-schema-processors.cjs +644 -0
  467. package/node_modules/zod/v4/core/json-schema-processors.d.cts +49 -0
  468. package/node_modules/zod/v4/core/json-schema-processors.d.ts +49 -0
  469. package/node_modules/zod/v4/core/json-schema-processors.js +601 -0
  470. package/node_modules/zod/v4/core/json-schema.cjs +2 -0
  471. package/node_modules/zod/v4/core/json-schema.d.cts +88 -0
  472. package/node_modules/zod/v4/core/json-schema.d.ts +88 -0
  473. package/node_modules/zod/v4/core/json-schema.js +1 -0
  474. package/node_modules/zod/v4/core/package.json +7 -0
  475. package/node_modules/zod/v4/core/parse.cjs +131 -0
  476. package/node_modules/zod/v4/core/parse.d.cts +49 -0
  477. package/node_modules/zod/v4/core/parse.d.ts +49 -0
  478. package/node_modules/zod/v4/core/parse.js +93 -0
  479. package/node_modules/zod/v4/core/regexes.cjs +172 -0
  480. package/node_modules/zod/v4/core/regexes.d.cts +85 -0
  481. package/node_modules/zod/v4/core/regexes.d.ts +85 -0
  482. package/node_modules/zod/v4/core/regexes.js +139 -0
  483. package/node_modules/zod/v4/core/registries.cjs +56 -0
  484. package/node_modules/zod/v4/core/registries.d.cts +35 -0
  485. package/node_modules/zod/v4/core/registries.d.ts +35 -0
  486. package/node_modules/zod/v4/core/registries.js +51 -0
  487. package/node_modules/zod/v4/core/schemas.cjs +2270 -0
  488. package/node_modules/zod/v4/core/schemas.d.cts +1184 -0
  489. package/node_modules/zod/v4/core/schemas.d.ts +1184 -0
  490. package/node_modules/zod/v4/core/schemas.js +2239 -0
  491. package/node_modules/zod/v4/core/standard-schema.cjs +2 -0
  492. package/node_modules/zod/v4/core/standard-schema.d.cts +126 -0
  493. package/node_modules/zod/v4/core/standard-schema.d.ts +126 -0
  494. package/node_modules/zod/v4/core/standard-schema.js +1 -0
  495. package/node_modules/zod/v4/core/to-json-schema.cjs +457 -0
  496. package/node_modules/zod/v4/core/to-json-schema.d.cts +114 -0
  497. package/node_modules/zod/v4/core/to-json-schema.d.ts +114 -0
  498. package/node_modules/zod/v4/core/to-json-schema.js +448 -0
  499. package/node_modules/zod/v4/core/util.cjs +734 -0
  500. package/node_modules/zod/v4/core/util.d.cts +200 -0
  501. package/node_modules/zod/v4/core/util.d.ts +200 -0
  502. package/node_modules/zod/v4/core/util.js +674 -0
  503. package/node_modules/zod/v4/core/versions.cjs +8 -0
  504. package/node_modules/zod/v4/core/versions.d.cts +5 -0
  505. package/node_modules/zod/v4/core/versions.d.ts +5 -0
  506. package/node_modules/zod/v4/core/versions.js +5 -0
  507. package/node_modules/zod/v4/index.cjs +22 -0
  508. package/node_modules/zod/v4/index.d.cts +3 -0
  509. package/node_modules/zod/v4/index.d.ts +3 -0
  510. package/node_modules/zod/v4/index.js +3 -0
  511. package/node_modules/zod/v4/locales/ar.cjs +133 -0
  512. package/node_modules/zod/v4/locales/ar.d.cts +5 -0
  513. package/node_modules/zod/v4/locales/ar.d.ts +4 -0
  514. package/node_modules/zod/v4/locales/ar.js +106 -0
  515. package/node_modules/zod/v4/locales/az.cjs +132 -0
  516. package/node_modules/zod/v4/locales/az.d.cts +5 -0
  517. package/node_modules/zod/v4/locales/az.d.ts +4 -0
  518. package/node_modules/zod/v4/locales/az.js +105 -0
  519. package/node_modules/zod/v4/locales/be.cjs +183 -0
  520. package/node_modules/zod/v4/locales/be.d.cts +5 -0
  521. package/node_modules/zod/v4/locales/be.d.ts +4 -0
  522. package/node_modules/zod/v4/locales/be.js +156 -0
  523. package/node_modules/zod/v4/locales/bg.cjs +147 -0
  524. package/node_modules/zod/v4/locales/bg.d.cts +5 -0
  525. package/node_modules/zod/v4/locales/bg.d.ts +4 -0
  526. package/node_modules/zod/v4/locales/bg.js +120 -0
  527. package/node_modules/zod/v4/locales/ca.cjs +134 -0
  528. package/node_modules/zod/v4/locales/ca.d.cts +5 -0
  529. package/node_modules/zod/v4/locales/ca.d.ts +4 -0
  530. package/node_modules/zod/v4/locales/ca.js +107 -0
  531. package/node_modules/zod/v4/locales/cs.cjs +138 -0
  532. package/node_modules/zod/v4/locales/cs.d.cts +5 -0
  533. package/node_modules/zod/v4/locales/cs.d.ts +4 -0
  534. package/node_modules/zod/v4/locales/cs.js +111 -0
  535. package/node_modules/zod/v4/locales/da.cjs +142 -0
  536. package/node_modules/zod/v4/locales/da.d.cts +5 -0
  537. package/node_modules/zod/v4/locales/da.d.ts +4 -0
  538. package/node_modules/zod/v4/locales/da.js +115 -0
  539. package/node_modules/zod/v4/locales/de.cjs +135 -0
  540. package/node_modules/zod/v4/locales/de.d.cts +5 -0
  541. package/node_modules/zod/v4/locales/de.d.ts +4 -0
  542. package/node_modules/zod/v4/locales/de.js +108 -0
  543. package/node_modules/zod/v4/locales/el.cjs +136 -0
  544. package/node_modules/zod/v4/locales/el.d.cts +5 -0
  545. package/node_modules/zod/v4/locales/el.d.ts +4 -0
  546. package/node_modules/zod/v4/locales/el.js +109 -0
  547. package/node_modules/zod/v4/locales/en.cjs +140 -0
  548. package/node_modules/zod/v4/locales/en.d.cts +5 -0
  549. package/node_modules/zod/v4/locales/en.d.ts +4 -0
  550. package/node_modules/zod/v4/locales/en.js +113 -0
  551. package/node_modules/zod/v4/locales/eo.cjs +136 -0
  552. package/node_modules/zod/v4/locales/eo.d.cts +5 -0
  553. package/node_modules/zod/v4/locales/eo.d.ts +4 -0
  554. package/node_modules/zod/v4/locales/eo.js +109 -0
  555. package/node_modules/zod/v4/locales/es.cjs +159 -0
  556. package/node_modules/zod/v4/locales/es.d.cts +5 -0
  557. package/node_modules/zod/v4/locales/es.d.ts +4 -0
  558. package/node_modules/zod/v4/locales/es.js +132 -0
  559. package/node_modules/zod/v4/locales/fa.cjs +141 -0
  560. package/node_modules/zod/v4/locales/fa.d.cts +5 -0
  561. package/node_modules/zod/v4/locales/fa.d.ts +4 -0
  562. package/node_modules/zod/v4/locales/fa.js +114 -0
  563. package/node_modules/zod/v4/locales/fi.cjs +139 -0
  564. package/node_modules/zod/v4/locales/fi.d.cts +5 -0
  565. package/node_modules/zod/v4/locales/fi.d.ts +4 -0
  566. package/node_modules/zod/v4/locales/fi.js +112 -0
  567. package/node_modules/zod/v4/locales/fr-CA.cjs +134 -0
  568. package/node_modules/zod/v4/locales/fr-CA.d.cts +5 -0
  569. package/node_modules/zod/v4/locales/fr-CA.d.ts +4 -0
  570. package/node_modules/zod/v4/locales/fr-CA.js +107 -0
  571. package/node_modules/zod/v4/locales/fr.cjs +152 -0
  572. package/node_modules/zod/v4/locales/fr.d.cts +5 -0
  573. package/node_modules/zod/v4/locales/fr.d.ts +4 -0
  574. package/node_modules/zod/v4/locales/fr.js +125 -0
  575. package/node_modules/zod/v4/locales/he.cjs +241 -0
  576. package/node_modules/zod/v4/locales/he.d.cts +5 -0
  577. package/node_modules/zod/v4/locales/he.d.ts +4 -0
  578. package/node_modules/zod/v4/locales/he.js +214 -0
  579. package/node_modules/zod/v4/locales/hr.cjs +149 -0
  580. package/node_modules/zod/v4/locales/hr.d.cts +5 -0
  581. package/node_modules/zod/v4/locales/hr.d.ts +4 -0
  582. package/node_modules/zod/v4/locales/hr.js +122 -0
  583. package/node_modules/zod/v4/locales/hu.cjs +135 -0
  584. package/node_modules/zod/v4/locales/hu.d.cts +5 -0
  585. package/node_modules/zod/v4/locales/hu.d.ts +4 -0
  586. package/node_modules/zod/v4/locales/hu.js +108 -0
  587. package/node_modules/zod/v4/locales/hy.cjs +174 -0
  588. package/node_modules/zod/v4/locales/hy.d.cts +5 -0
  589. package/node_modules/zod/v4/locales/hy.d.ts +4 -0
  590. package/node_modules/zod/v4/locales/hy.js +147 -0
  591. package/node_modules/zod/v4/locales/id.cjs +133 -0
  592. package/node_modules/zod/v4/locales/id.d.cts +5 -0
  593. package/node_modules/zod/v4/locales/id.d.ts +4 -0
  594. package/node_modules/zod/v4/locales/id.js +106 -0
  595. package/node_modules/zod/v4/locales/index.cjs +111 -0
  596. package/node_modules/zod/v4/locales/index.d.cts +52 -0
  597. package/node_modules/zod/v4/locales/index.d.ts +52 -0
  598. package/node_modules/zod/v4/locales/index.js +52 -0
  599. package/node_modules/zod/v4/locales/is.cjs +136 -0
  600. package/node_modules/zod/v4/locales/is.d.cts +5 -0
  601. package/node_modules/zod/v4/locales/is.d.ts +4 -0
  602. package/node_modules/zod/v4/locales/is.js +109 -0
  603. package/node_modules/zod/v4/locales/it.cjs +135 -0
  604. package/node_modules/zod/v4/locales/it.d.cts +5 -0
  605. package/node_modules/zod/v4/locales/it.d.ts +4 -0
  606. package/node_modules/zod/v4/locales/it.js +108 -0
  607. package/node_modules/zod/v4/locales/ja.cjs +134 -0
  608. package/node_modules/zod/v4/locales/ja.d.cts +5 -0
  609. package/node_modules/zod/v4/locales/ja.d.ts +4 -0
  610. package/node_modules/zod/v4/locales/ja.js +107 -0
  611. package/node_modules/zod/v4/locales/ka.cjs +139 -0
  612. package/node_modules/zod/v4/locales/ka.d.cts +5 -0
  613. package/node_modules/zod/v4/locales/ka.d.ts +4 -0
  614. package/node_modules/zod/v4/locales/ka.js +112 -0
  615. package/node_modules/zod/v4/locales/kh.cjs +12 -0
  616. package/node_modules/zod/v4/locales/kh.d.cts +5 -0
  617. package/node_modules/zod/v4/locales/kh.d.ts +5 -0
  618. package/node_modules/zod/v4/locales/kh.js +5 -0
  619. package/node_modules/zod/v4/locales/km.cjs +137 -0
  620. package/node_modules/zod/v4/locales/km.d.cts +5 -0
  621. package/node_modules/zod/v4/locales/km.d.ts +4 -0
  622. package/node_modules/zod/v4/locales/km.js +110 -0
  623. package/node_modules/zod/v4/locales/ko.cjs +138 -0
  624. package/node_modules/zod/v4/locales/ko.d.cts +5 -0
  625. package/node_modules/zod/v4/locales/ko.d.ts +4 -0
  626. package/node_modules/zod/v4/locales/ko.js +111 -0
  627. package/node_modules/zod/v4/locales/lt.cjs +230 -0
  628. package/node_modules/zod/v4/locales/lt.d.cts +5 -0
  629. package/node_modules/zod/v4/locales/lt.d.ts +4 -0
  630. package/node_modules/zod/v4/locales/lt.js +203 -0
  631. package/node_modules/zod/v4/locales/mk.cjs +136 -0
  632. package/node_modules/zod/v4/locales/mk.d.cts +5 -0
  633. package/node_modules/zod/v4/locales/mk.d.ts +4 -0
  634. package/node_modules/zod/v4/locales/mk.js +109 -0
  635. package/node_modules/zod/v4/locales/ms.cjs +134 -0
  636. package/node_modules/zod/v4/locales/ms.d.cts +5 -0
  637. package/node_modules/zod/v4/locales/ms.d.ts +4 -0
  638. package/node_modules/zod/v4/locales/ms.js +107 -0
  639. package/node_modules/zod/v4/locales/nl.cjs +137 -0
  640. package/node_modules/zod/v4/locales/nl.d.cts +5 -0
  641. package/node_modules/zod/v4/locales/nl.d.ts +4 -0
  642. package/node_modules/zod/v4/locales/nl.js +110 -0
  643. package/node_modules/zod/v4/locales/no.cjs +135 -0
  644. package/node_modules/zod/v4/locales/no.d.cts +5 -0
  645. package/node_modules/zod/v4/locales/no.d.ts +4 -0
  646. package/node_modules/zod/v4/locales/no.js +108 -0
  647. package/node_modules/zod/v4/locales/ota.cjs +136 -0
  648. package/node_modules/zod/v4/locales/ota.d.cts +5 -0
  649. package/node_modules/zod/v4/locales/ota.d.ts +4 -0
  650. package/node_modules/zod/v4/locales/ota.js +109 -0
  651. package/node_modules/zod/v4/locales/package.json +7 -0
  652. package/node_modules/zod/v4/locales/pl.cjs +136 -0
  653. package/node_modules/zod/v4/locales/pl.d.cts +5 -0
  654. package/node_modules/zod/v4/locales/pl.d.ts +4 -0
  655. package/node_modules/zod/v4/locales/pl.js +109 -0
  656. package/node_modules/zod/v4/locales/ps.cjs +141 -0
  657. package/node_modules/zod/v4/locales/ps.d.cts +5 -0
  658. package/node_modules/zod/v4/locales/ps.d.ts +4 -0
  659. package/node_modules/zod/v4/locales/ps.js +114 -0
  660. package/node_modules/zod/v4/locales/pt.cjs +135 -0
  661. package/node_modules/zod/v4/locales/pt.d.cts +5 -0
  662. package/node_modules/zod/v4/locales/pt.d.ts +4 -0
  663. package/node_modules/zod/v4/locales/pt.js +108 -0
  664. package/node_modules/zod/v4/locales/ro.cjs +146 -0
  665. package/node_modules/zod/v4/locales/ro.d.cts +5 -0
  666. package/node_modules/zod/v4/locales/ro.d.ts +4 -0
  667. package/node_modules/zod/v4/locales/ro.js +119 -0
  668. package/node_modules/zod/v4/locales/ru.cjs +183 -0
  669. package/node_modules/zod/v4/locales/ru.d.cts +5 -0
  670. package/node_modules/zod/v4/locales/ru.d.ts +4 -0
  671. package/node_modules/zod/v4/locales/ru.js +156 -0
  672. package/node_modules/zod/v4/locales/sl.cjs +136 -0
  673. package/node_modules/zod/v4/locales/sl.d.cts +5 -0
  674. package/node_modules/zod/v4/locales/sl.d.ts +4 -0
  675. package/node_modules/zod/v4/locales/sl.js +109 -0
  676. package/node_modules/zod/v4/locales/sv.cjs +137 -0
  677. package/node_modules/zod/v4/locales/sv.d.cts +5 -0
  678. package/node_modules/zod/v4/locales/sv.d.ts +4 -0
  679. package/node_modules/zod/v4/locales/sv.js +110 -0
  680. package/node_modules/zod/v4/locales/ta.cjs +137 -0
  681. package/node_modules/zod/v4/locales/ta.d.cts +5 -0
  682. package/node_modules/zod/v4/locales/ta.d.ts +4 -0
  683. package/node_modules/zod/v4/locales/ta.js +110 -0
  684. package/node_modules/zod/v4/locales/th.cjs +137 -0
  685. package/node_modules/zod/v4/locales/th.d.cts +5 -0
  686. package/node_modules/zod/v4/locales/th.d.ts +4 -0
  687. package/node_modules/zod/v4/locales/th.js +110 -0
  688. package/node_modules/zod/v4/locales/tr.cjs +132 -0
  689. package/node_modules/zod/v4/locales/tr.d.cts +5 -0
  690. package/node_modules/zod/v4/locales/tr.d.ts +4 -0
  691. package/node_modules/zod/v4/locales/tr.js +105 -0
  692. package/node_modules/zod/v4/locales/ua.cjs +12 -0
  693. package/node_modules/zod/v4/locales/ua.d.cts +5 -0
  694. package/node_modules/zod/v4/locales/ua.d.ts +5 -0
  695. package/node_modules/zod/v4/locales/ua.js +5 -0
  696. package/node_modules/zod/v4/locales/uk.cjs +135 -0
  697. package/node_modules/zod/v4/locales/uk.d.cts +5 -0
  698. package/node_modules/zod/v4/locales/uk.d.ts +4 -0
  699. package/node_modules/zod/v4/locales/uk.js +108 -0
  700. package/node_modules/zod/v4/locales/ur.cjs +137 -0
  701. package/node_modules/zod/v4/locales/ur.d.cts +5 -0
  702. package/node_modules/zod/v4/locales/ur.d.ts +4 -0
  703. package/node_modules/zod/v4/locales/ur.js +110 -0
  704. package/node_modules/zod/v4/locales/uz.cjs +137 -0
  705. package/node_modules/zod/v4/locales/uz.d.cts +5 -0
  706. package/node_modules/zod/v4/locales/uz.d.ts +4 -0
  707. package/node_modules/zod/v4/locales/uz.js +110 -0
  708. package/node_modules/zod/v4/locales/vi.cjs +135 -0
  709. package/node_modules/zod/v4/locales/vi.d.cts +5 -0
  710. package/node_modules/zod/v4/locales/vi.d.ts +4 -0
  711. package/node_modules/zod/v4/locales/vi.js +108 -0
  712. package/node_modules/zod/v4/locales/yo.cjs +134 -0
  713. package/node_modules/zod/v4/locales/yo.d.cts +5 -0
  714. package/node_modules/zod/v4/locales/yo.d.ts +4 -0
  715. package/node_modules/zod/v4/locales/yo.js +107 -0
  716. package/node_modules/zod/v4/locales/zh-CN.cjs +136 -0
  717. package/node_modules/zod/v4/locales/zh-CN.d.cts +5 -0
  718. package/node_modules/zod/v4/locales/zh-CN.d.ts +4 -0
  719. package/node_modules/zod/v4/locales/zh-CN.js +109 -0
  720. package/node_modules/zod/v4/locales/zh-TW.cjs +134 -0
  721. package/node_modules/zod/v4/locales/zh-TW.d.cts +5 -0
  722. package/node_modules/zod/v4/locales/zh-TW.d.ts +4 -0
  723. package/node_modules/zod/v4/locales/zh-TW.js +107 -0
  724. package/node_modules/zod/v4/mini/checks.cjs +34 -0
  725. package/node_modules/zod/v4/mini/checks.d.cts +1 -0
  726. package/node_modules/zod/v4/mini/checks.d.ts +1 -0
  727. package/node_modules/zod/v4/mini/checks.js +1 -0
  728. package/node_modules/zod/v4/mini/coerce.cjs +52 -0
  729. package/node_modules/zod/v4/mini/coerce.d.cts +7 -0
  730. package/node_modules/zod/v4/mini/coerce.d.ts +7 -0
  731. package/node_modules/zod/v4/mini/coerce.js +22 -0
  732. package/node_modules/zod/v4/mini/external.cjs +63 -0
  733. package/node_modules/zod/v4/mini/external.d.cts +13 -0
  734. package/node_modules/zod/v4/mini/external.d.ts +13 -0
  735. package/node_modules/zod/v4/mini/external.js +14 -0
  736. package/node_modules/zod/v4/mini/index.cjs +32 -0
  737. package/node_modules/zod/v4/mini/index.d.cts +3 -0
  738. package/node_modules/zod/v4/mini/index.d.ts +3 -0
  739. package/node_modules/zod/v4/mini/index.js +3 -0
  740. package/node_modules/zod/v4/mini/iso.cjs +64 -0
  741. package/node_modules/zod/v4/mini/iso.d.cts +22 -0
  742. package/node_modules/zod/v4/mini/iso.d.ts +22 -0
  743. package/node_modules/zod/v4/mini/iso.js +34 -0
  744. package/node_modules/zod/v4/mini/package.json +7 -0
  745. package/node_modules/zod/v4/mini/parse.cjs +16 -0
  746. package/node_modules/zod/v4/mini/parse.d.cts +1 -0
  747. package/node_modules/zod/v4/mini/parse.d.ts +1 -0
  748. package/node_modules/zod/v4/mini/parse.js +1 -0
  749. package/node_modules/zod/v4/mini/schemas.cjs +1083 -0
  750. package/node_modules/zod/v4/mini/schemas.d.cts +445 -0
  751. package/node_modules/zod/v4/mini/schemas.d.ts +445 -0
  752. package/node_modules/zod/v4/mini/schemas.js +961 -0
  753. package/node_modules/zod/v4/package.json +7 -0
  754. package/node_modules/zod/v4-mini/index.cjs +32 -0
  755. package/node_modules/zod/v4-mini/index.d.cts +3 -0
  756. package/node_modules/zod/v4-mini/index.d.ts +3 -0
  757. package/node_modules/zod/v4-mini/index.js +3 -0
  758. package/node_modules/zod/v4-mini/package.json +7 -0
  759. package/npm-shrinkwrap.json +54 -0
  760. package/openclaw.plugin.json +997 -1
  761. package/package.json +48 -7
  762. package/index.ts +0 -17
  763. package/src/channel.test.ts +0 -235
  764. package/src/channel.ts +0 -433
  765. package/src/config-schema.ts +0 -61
  766. package/src/group-mentions.ts +0 -15
  767. package/src/mattermost/accounts.ts +0 -128
  768. package/src/mattermost/client.test.ts +0 -19
  769. package/src/mattermost/client.ts +0 -230
  770. package/src/mattermost/index.ts +0 -9
  771. package/src/mattermost/monitor-helpers.ts +0 -93
  772. package/src/mattermost/monitor-onchar.ts +0 -25
  773. package/src/mattermost/monitor-websocket.test.ts +0 -232
  774. package/src/mattermost/monitor-websocket.ts +0 -221
  775. package/src/mattermost/monitor.ts +0 -1030
  776. package/src/mattermost/probe.ts +0 -73
  777. package/src/mattermost/reactions.test-helpers.ts +0 -83
  778. package/src/mattermost/reactions.test.ts +0 -103
  779. package/src/mattermost/reactions.ts +0 -124
  780. package/src/mattermost/reconnect.test.ts +0 -192
  781. package/src/mattermost/reconnect.ts +0 -103
  782. package/src/mattermost/send.ts +0 -231
  783. package/src/normalize.ts +0 -46
  784. package/src/onboarding-helpers.ts +0 -1
  785. package/src/onboarding.ts +0 -186
  786. package/src/runtime.ts +0 -14
  787. package/src/types.ts +0 -57
@@ -1,1030 +0,0 @@
1
- import type {
2
- ChannelAccountSnapshot,
3
- ChatType,
4
- OpenClawConfig,
5
- ReplyPayload,
6
- RuntimeEnv,
7
- } from "openclaw/plugin-sdk";
8
- import {
9
- buildAgentMediaPayload,
10
- createReplyPrefixOptions,
11
- createTypingCallbacks,
12
- logInboundDrop,
13
- logTypingFailure,
14
- buildPendingHistoryContextFromMap,
15
- clearHistoryEntriesIfEnabled,
16
- DEFAULT_GROUP_HISTORY_LIMIT,
17
- recordPendingHistoryEntryIfEnabled,
18
- resolveControlCommandGate,
19
- resolveChannelMediaMaxBytes,
20
- type HistoryEntry,
21
- } from "openclaw/plugin-sdk";
22
- import { getMattermostRuntime } from "../runtime.js";
23
- import { resolveMattermostAccount } from "./accounts.js";
24
- import {
25
- createMattermostClient,
26
- fetchMattermostChannel,
27
- fetchMattermostMe,
28
- fetchMattermostUser,
29
- normalizeMattermostBaseUrl,
30
- sendMattermostTyping,
31
- type MattermostChannel,
32
- type MattermostPost,
33
- type MattermostUser,
34
- } from "./client.js";
35
- import {
36
- createDedupeCache,
37
- formatInboundFromLabel,
38
- resolveThreadSessionKeys,
39
- } from "./monitor-helpers.js";
40
- import { resolveOncharPrefixes, stripOncharPrefix } from "./monitor-onchar.js";
41
- import {
42
- createMattermostConnectOnce,
43
- type MattermostEventPayload,
44
- type MattermostWebSocketFactory,
45
- } from "./monitor-websocket.js";
46
- import { runWithReconnect } from "./reconnect.js";
47
- import { sendMessageMattermost } from "./send.js";
48
-
49
- export type MonitorMattermostOpts = {
50
- botToken?: string;
51
- baseUrl?: string;
52
- accountId?: string;
53
- config?: OpenClawConfig;
54
- runtime?: RuntimeEnv;
55
- abortSignal?: AbortSignal;
56
- statusSink?: (patch: Partial<ChannelAccountSnapshot>) => void;
57
- webSocketFactory?: MattermostWebSocketFactory;
58
- };
59
-
60
- type FetchLike = (input: URL | RequestInfo, init?: RequestInit) => Promise<Response>;
61
- type MediaKind = "image" | "audio" | "video" | "document" | "unknown";
62
-
63
- type MattermostReaction = {
64
- user_id?: string;
65
- post_id?: string;
66
- emoji_name?: string;
67
- create_at?: number;
68
- };
69
- const RECENT_MATTERMOST_MESSAGE_TTL_MS = 5 * 60_000;
70
- const RECENT_MATTERMOST_MESSAGE_MAX = 2000;
71
- const CHANNEL_CACHE_TTL_MS = 5 * 60_000;
72
- const USER_CACHE_TTL_MS = 10 * 60_000;
73
-
74
- const recentInboundMessages = createDedupeCache({
75
- ttlMs: RECENT_MATTERMOST_MESSAGE_TTL_MS,
76
- maxSize: RECENT_MATTERMOST_MESSAGE_MAX,
77
- });
78
-
79
- function resolveRuntime(opts: MonitorMattermostOpts): RuntimeEnv {
80
- return (
81
- opts.runtime ?? {
82
- log: console.log,
83
- error: console.error,
84
- exit: (code: number): never => {
85
- throw new Error(`exit ${code}`);
86
- },
87
- }
88
- );
89
- }
90
-
91
- function normalizeMention(text: string, mention: string | undefined): string {
92
- if (!mention) {
93
- return text.trim();
94
- }
95
- const escaped = mention.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
96
- const re = new RegExp(`@${escaped}\\b`, "gi");
97
- return text.replace(re, " ").replace(/\s+/g, " ").trim();
98
- }
99
-
100
- function isSystemPost(post: MattermostPost): boolean {
101
- const type = post.type?.trim();
102
- return Boolean(type);
103
- }
104
-
105
- function channelKind(channelType?: string | null): ChatType {
106
- if (!channelType) {
107
- return "channel";
108
- }
109
- const normalized = channelType.trim().toUpperCase();
110
- if (normalized === "D") {
111
- return "direct";
112
- }
113
- if (normalized === "G") {
114
- return "group";
115
- }
116
- return "channel";
117
- }
118
-
119
- function channelChatType(kind: ChatType): "direct" | "group" | "channel" {
120
- if (kind === "direct") {
121
- return "direct";
122
- }
123
- if (kind === "group") {
124
- return "group";
125
- }
126
- return "channel";
127
- }
128
-
129
- function normalizeAllowEntry(entry: string): string {
130
- const trimmed = entry.trim();
131
- if (!trimmed) {
132
- return "";
133
- }
134
- if (trimmed === "*") {
135
- return "*";
136
- }
137
- return trimmed
138
- .replace(/^(mattermost|user):/i, "")
139
- .replace(/^@/, "")
140
- .toLowerCase();
141
- }
142
-
143
- function normalizeAllowList(entries: Array<string | number>): string[] {
144
- const normalized = entries.map((entry) => normalizeAllowEntry(String(entry))).filter(Boolean);
145
- return Array.from(new Set(normalized));
146
- }
147
-
148
- function isSenderAllowed(params: {
149
- senderId: string;
150
- senderName?: string;
151
- allowFrom: string[];
152
- }): boolean {
153
- const allowFrom = params.allowFrom;
154
- if (allowFrom.length === 0) {
155
- return false;
156
- }
157
- if (allowFrom.includes("*")) {
158
- return true;
159
- }
160
- const normalizedSenderId = normalizeAllowEntry(params.senderId);
161
- const normalizedSenderName = params.senderName ? normalizeAllowEntry(params.senderName) : "";
162
- return allowFrom.some(
163
- (entry) =>
164
- entry === normalizedSenderId || (normalizedSenderName && entry === normalizedSenderName),
165
- );
166
- }
167
-
168
- type MattermostMediaInfo = {
169
- path: string;
170
- contentType?: string;
171
- kind: MediaKind;
172
- };
173
-
174
- function buildMattermostAttachmentPlaceholder(mediaList: MattermostMediaInfo[]): string {
175
- if (mediaList.length === 0) {
176
- return "";
177
- }
178
- if (mediaList.length === 1) {
179
- const kind = mediaList[0].kind === "unknown" ? "document" : mediaList[0].kind;
180
- return `<media:${kind}>`;
181
- }
182
- const allImages = mediaList.every((media) => media.kind === "image");
183
- const label = allImages ? "image" : "file";
184
- const suffix = mediaList.length === 1 ? label : `${label}s`;
185
- const tag = allImages ? "<media:image>" : "<media:document>";
186
- return `${tag} (${mediaList.length} ${suffix})`;
187
- }
188
-
189
- function buildMattermostWsUrl(baseUrl: string): string {
190
- const normalized = normalizeMattermostBaseUrl(baseUrl);
191
- if (!normalized) {
192
- throw new Error("Mattermost baseUrl is required");
193
- }
194
- const wsBase = normalized.replace(/^http/i, "ws");
195
- return `${wsBase}/api/v4/websocket`;
196
- }
197
-
198
- export async function monitorMattermostProvider(opts: MonitorMattermostOpts = {}): Promise<void> {
199
- const core = getMattermostRuntime();
200
- const runtime = resolveRuntime(opts);
201
- const cfg = opts.config ?? core.config.loadConfig();
202
- const account = resolveMattermostAccount({
203
- cfg,
204
- accountId: opts.accountId,
205
- });
206
- const botToken = opts.botToken?.trim() || account.botToken?.trim();
207
- if (!botToken) {
208
- throw new Error(
209
- `Mattermost bot token missing for account "${account.accountId}" (set channels.mattermost.accounts.${account.accountId}.botToken or MATTERMOST_BOT_TOKEN for default).`,
210
- );
211
- }
212
- const baseUrl = normalizeMattermostBaseUrl(opts.baseUrl ?? account.baseUrl);
213
- if (!baseUrl) {
214
- throw new Error(
215
- `Mattermost baseUrl missing for account "${account.accountId}" (set channels.mattermost.accounts.${account.accountId}.baseUrl or MATTERMOST_URL for default).`,
216
- );
217
- }
218
-
219
- const client = createMattermostClient({ baseUrl, botToken });
220
- const botUser = await fetchMattermostMe(client);
221
- const botUserId = botUser.id;
222
- const botUsername = botUser.username?.trim() || undefined;
223
- runtime.log?.(`mattermost connected as ${botUsername ? `@${botUsername}` : botUserId}`);
224
-
225
- const channelCache = new Map<string, { value: MattermostChannel | null; expiresAt: number }>();
226
- const userCache = new Map<string, { value: MattermostUser | null; expiresAt: number }>();
227
- const logger = core.logging.getChildLogger({ module: "mattermost" });
228
- const logVerboseMessage = (message: string) => {
229
- if (!core.logging.shouldLogVerbose()) {
230
- return;
231
- }
232
- logger.debug?.(message);
233
- };
234
- const mediaMaxBytes =
235
- resolveChannelMediaMaxBytes({
236
- cfg,
237
- resolveChannelLimitMb: () => undefined,
238
- accountId: account.accountId,
239
- }) ?? 8 * 1024 * 1024;
240
- const historyLimit = Math.max(
241
- 0,
242
- cfg.messages?.groupChat?.historyLimit ?? DEFAULT_GROUP_HISTORY_LIMIT,
243
- );
244
- const channelHistories = new Map<string, HistoryEntry[]>();
245
-
246
- const fetchWithAuth: FetchLike = (input, init) => {
247
- const headers = new Headers(init?.headers);
248
- headers.set("Authorization", `Bearer ${client.token}`);
249
- return fetch(input, { ...init, headers });
250
- };
251
-
252
- const resolveMattermostMedia = async (
253
- fileIds?: string[] | null,
254
- ): Promise<MattermostMediaInfo[]> => {
255
- const ids = (fileIds ?? []).map((id) => id?.trim()).filter(Boolean);
256
- if (ids.length === 0) {
257
- return [];
258
- }
259
- const out: MattermostMediaInfo[] = [];
260
- for (const fileId of ids) {
261
- try {
262
- const fetched = await core.channel.media.fetchRemoteMedia({
263
- url: `${client.apiBaseUrl}/files/${fileId}`,
264
- fetchImpl: fetchWithAuth,
265
- filePathHint: fileId,
266
- maxBytes: mediaMaxBytes,
267
- });
268
- const saved = await core.channel.media.saveMediaBuffer(
269
- fetched.buffer,
270
- fetched.contentType ?? undefined,
271
- "inbound",
272
- mediaMaxBytes,
273
- );
274
- const contentType = saved.contentType ?? fetched.contentType ?? undefined;
275
- out.push({
276
- path: saved.path,
277
- contentType,
278
- kind: core.media.mediaKindFromMime(contentType),
279
- });
280
- } catch (err) {
281
- logger.debug?.(`mattermost: failed to download file ${fileId}: ${String(err)}`);
282
- }
283
- }
284
- return out;
285
- };
286
-
287
- const sendTypingIndicator = async (channelId: string, parentId?: string) => {
288
- await sendMattermostTyping(client, { channelId, parentId });
289
- };
290
-
291
- const resolveChannelInfo = async (channelId: string): Promise<MattermostChannel | null> => {
292
- const cached = channelCache.get(channelId);
293
- if (cached && cached.expiresAt > Date.now()) {
294
- return cached.value;
295
- }
296
- try {
297
- const info = await fetchMattermostChannel(client, channelId);
298
- channelCache.set(channelId, {
299
- value: info,
300
- expiresAt: Date.now() + CHANNEL_CACHE_TTL_MS,
301
- });
302
- return info;
303
- } catch (err) {
304
- logger.debug?.(`mattermost: channel lookup failed: ${String(err)}`);
305
- channelCache.set(channelId, {
306
- value: null,
307
- expiresAt: Date.now() + CHANNEL_CACHE_TTL_MS,
308
- });
309
- return null;
310
- }
311
- };
312
-
313
- const resolveUserInfo = async (userId: string): Promise<MattermostUser | null> => {
314
- const cached = userCache.get(userId);
315
- if (cached && cached.expiresAt > Date.now()) {
316
- return cached.value;
317
- }
318
- try {
319
- const info = await fetchMattermostUser(client, userId);
320
- userCache.set(userId, {
321
- value: info,
322
- expiresAt: Date.now() + USER_CACHE_TTL_MS,
323
- });
324
- return info;
325
- } catch (err) {
326
- logger.debug?.(`mattermost: user lookup failed: ${String(err)}`);
327
- userCache.set(userId, {
328
- value: null,
329
- expiresAt: Date.now() + USER_CACHE_TTL_MS,
330
- });
331
- return null;
332
- }
333
- };
334
-
335
- const handlePost = async (
336
- post: MattermostPost,
337
- payload: MattermostEventPayload,
338
- messageIds?: string[],
339
- ) => {
340
- const channelId = post.channel_id ?? payload.data?.channel_id ?? payload.broadcast?.channel_id;
341
- if (!channelId) {
342
- return;
343
- }
344
-
345
- const allMessageIds = messageIds?.length ? messageIds : post.id ? [post.id] : [];
346
- if (allMessageIds.length === 0) {
347
- return;
348
- }
349
- const dedupeEntries = allMessageIds.map((id) =>
350
- recentInboundMessages.check(`${account.accountId}:${id}`),
351
- );
352
- if (dedupeEntries.length > 0 && dedupeEntries.every(Boolean)) {
353
- return;
354
- }
355
-
356
- const senderId = post.user_id ?? payload.broadcast?.user_id;
357
- if (!senderId) {
358
- return;
359
- }
360
- if (senderId === botUserId) {
361
- return;
362
- }
363
- if (isSystemPost(post)) {
364
- return;
365
- }
366
-
367
- const channelInfo = await resolveChannelInfo(channelId);
368
- const channelType = payload.data?.channel_type ?? channelInfo?.type ?? undefined;
369
- const kind = channelKind(channelType);
370
- const chatType = channelChatType(kind);
371
-
372
- const senderName =
373
- payload.data?.sender_name?.trim() ||
374
- (await resolveUserInfo(senderId))?.username?.trim() ||
375
- senderId;
376
- const rawText = post.message?.trim() || "";
377
- const dmPolicy = account.config.dmPolicy ?? "pairing";
378
- const defaultGroupPolicy = cfg.channels?.defaults?.groupPolicy;
379
- const groupPolicy = account.config.groupPolicy ?? defaultGroupPolicy ?? "allowlist";
380
- const configAllowFrom = normalizeAllowList(account.config.allowFrom ?? []);
381
- const configGroupAllowFrom = normalizeAllowList(account.config.groupAllowFrom ?? []);
382
- const storeAllowFrom = normalizeAllowList(
383
- await core.channel.pairing.readAllowFromStore("mattermost").catch(() => []),
384
- );
385
- const effectiveAllowFrom = Array.from(new Set([...configAllowFrom, ...storeAllowFrom]));
386
- const effectiveGroupAllowFrom = Array.from(
387
- new Set([
388
- ...(configGroupAllowFrom.length > 0 ? configGroupAllowFrom : configAllowFrom),
389
- ...storeAllowFrom,
390
- ]),
391
- );
392
- const allowTextCommands = core.channel.commands.shouldHandleTextCommands({
393
- cfg,
394
- surface: "mattermost",
395
- });
396
- const hasControlCommand = core.channel.text.hasControlCommand(rawText, cfg);
397
- const isControlCommand = allowTextCommands && hasControlCommand;
398
- const useAccessGroups = cfg.commands?.useAccessGroups !== false;
399
- const senderAllowedForCommands = isSenderAllowed({
400
- senderId,
401
- senderName,
402
- allowFrom: effectiveAllowFrom,
403
- });
404
- const groupAllowedForCommands = isSenderAllowed({
405
- senderId,
406
- senderName,
407
- allowFrom: effectiveGroupAllowFrom,
408
- });
409
- const commandGate = resolveControlCommandGate({
410
- useAccessGroups,
411
- authorizers: [
412
- { configured: effectiveAllowFrom.length > 0, allowed: senderAllowedForCommands },
413
- {
414
- configured: effectiveGroupAllowFrom.length > 0,
415
- allowed: groupAllowedForCommands,
416
- },
417
- ],
418
- allowTextCommands,
419
- hasControlCommand,
420
- });
421
- const commandAuthorized =
422
- kind === "direct"
423
- ? dmPolicy === "open" || senderAllowedForCommands
424
- : commandGate.commandAuthorized;
425
-
426
- if (kind === "direct") {
427
- if (dmPolicy === "disabled") {
428
- logVerboseMessage(`mattermost: drop dm (dmPolicy=disabled sender=${senderId})`);
429
- return;
430
- }
431
- if (dmPolicy !== "open" && !senderAllowedForCommands) {
432
- if (dmPolicy === "pairing") {
433
- const { code, created } = await core.channel.pairing.upsertPairingRequest({
434
- channel: "mattermost",
435
- id: senderId,
436
- meta: { name: senderName },
437
- });
438
- logVerboseMessage(`mattermost: pairing request sender=${senderId} created=${created}`);
439
- if (created) {
440
- try {
441
- await sendMessageMattermost(
442
- `user:${senderId}`,
443
- core.channel.pairing.buildPairingReply({
444
- channel: "mattermost",
445
- idLine: `Your Mattermost user id: ${senderId}`,
446
- code,
447
- }),
448
- { accountId: account.accountId },
449
- );
450
- opts.statusSink?.({ lastOutboundAt: Date.now() });
451
- } catch (err) {
452
- logVerboseMessage(`mattermost: pairing reply failed for ${senderId}: ${String(err)}`);
453
- }
454
- }
455
- } else {
456
- logVerboseMessage(`mattermost: drop dm sender=${senderId} (dmPolicy=${dmPolicy})`);
457
- }
458
- return;
459
- }
460
- } else {
461
- if (groupPolicy === "disabled") {
462
- logVerboseMessage("mattermost: drop group message (groupPolicy=disabled)");
463
- return;
464
- }
465
- if (groupPolicy === "allowlist") {
466
- if (effectiveGroupAllowFrom.length === 0) {
467
- logVerboseMessage("mattermost: drop group message (no group allowlist)");
468
- return;
469
- }
470
- if (!groupAllowedForCommands) {
471
- logVerboseMessage(`mattermost: drop group sender=${senderId} (not in groupAllowFrom)`);
472
- return;
473
- }
474
- }
475
- }
476
-
477
- if (kind !== "direct" && commandGate.shouldBlock) {
478
- logInboundDrop({
479
- log: logVerboseMessage,
480
- channel: "mattermost",
481
- reason: "control command (unauthorized)",
482
- target: senderId,
483
- });
484
- return;
485
- }
486
-
487
- const teamId = payload.data?.team_id ?? channelInfo?.team_id ?? undefined;
488
- const channelName = payload.data?.channel_name ?? channelInfo?.name ?? "";
489
- const channelDisplay =
490
- payload.data?.channel_display_name ?? channelInfo?.display_name ?? channelName;
491
- const roomLabel = channelName ? `#${channelName}` : channelDisplay || `#${channelId}`;
492
-
493
- const route = core.channel.routing.resolveAgentRoute({
494
- cfg,
495
- channel: "mattermost",
496
- accountId: account.accountId,
497
- teamId,
498
- peer: {
499
- kind,
500
- id: kind === "direct" ? senderId : channelId,
501
- },
502
- });
503
-
504
- const baseSessionKey = route.sessionKey;
505
- const threadRootId = post.root_id?.trim() || undefined;
506
- const threadKeys = resolveThreadSessionKeys({
507
- baseSessionKey,
508
- threadId: threadRootId,
509
- parentSessionKey: threadRootId ? baseSessionKey : undefined,
510
- });
511
- const sessionKey = threadKeys.sessionKey;
512
- const historyKey = kind === "direct" ? null : sessionKey;
513
-
514
- const mentionRegexes = core.channel.mentions.buildMentionRegexes(cfg, route.agentId);
515
- const wasMentioned =
516
- kind !== "direct" &&
517
- ((botUsername ? rawText.toLowerCase().includes(`@${botUsername.toLowerCase()}`) : false) ||
518
- core.channel.mentions.matchesMentionPatterns(rawText, mentionRegexes));
519
- const pendingBody =
520
- rawText ||
521
- (post.file_ids?.length
522
- ? `[Mattermost ${post.file_ids.length === 1 ? "file" : "files"}]`
523
- : "");
524
- const pendingSender = senderName;
525
- const recordPendingHistory = () => {
526
- const trimmed = pendingBody.trim();
527
- recordPendingHistoryEntryIfEnabled({
528
- historyMap: channelHistories,
529
- limit: historyLimit,
530
- historyKey: historyKey ?? "",
531
- entry:
532
- historyKey && trimmed
533
- ? {
534
- sender: pendingSender,
535
- body: trimmed,
536
- timestamp: typeof post.create_at === "number" ? post.create_at : undefined,
537
- messageId: post.id ?? undefined,
538
- }
539
- : null,
540
- });
541
- };
542
-
543
- const oncharEnabled = account.chatmode === "onchar" && kind !== "direct";
544
- const oncharPrefixes = oncharEnabled ? resolveOncharPrefixes(account.oncharPrefixes) : [];
545
- const oncharResult = oncharEnabled
546
- ? stripOncharPrefix(rawText, oncharPrefixes)
547
- : { triggered: false, stripped: rawText };
548
- const oncharTriggered = oncharResult.triggered;
549
-
550
- const shouldRequireMention =
551
- kind !== "direct" &&
552
- core.channel.groups.resolveRequireMention({
553
- cfg,
554
- channel: "mattermost",
555
- accountId: account.accountId,
556
- groupId: channelId,
557
- });
558
- const shouldBypassMention =
559
- isControlCommand && shouldRequireMention && !wasMentioned && commandAuthorized;
560
- const effectiveWasMentioned = wasMentioned || shouldBypassMention || oncharTriggered;
561
- const canDetectMention = Boolean(botUsername) || mentionRegexes.length > 0;
562
-
563
- if (oncharEnabled && !oncharTriggered && !wasMentioned && !isControlCommand) {
564
- recordPendingHistory();
565
- return;
566
- }
567
-
568
- if (kind !== "direct" && shouldRequireMention && canDetectMention) {
569
- if (!effectiveWasMentioned) {
570
- recordPendingHistory();
571
- return;
572
- }
573
- }
574
- const mediaList = await resolveMattermostMedia(post.file_ids);
575
- const mediaPlaceholder = buildMattermostAttachmentPlaceholder(mediaList);
576
- const bodySource = oncharTriggered ? oncharResult.stripped : rawText;
577
- const baseText = [bodySource, mediaPlaceholder].filter(Boolean).join("\n").trim();
578
- const bodyText = normalizeMention(baseText, botUsername);
579
- if (!bodyText) {
580
- return;
581
- }
582
-
583
- core.channel.activity.record({
584
- channel: "mattermost",
585
- accountId: account.accountId,
586
- direction: "inbound",
587
- });
588
-
589
- const fromLabel = formatInboundFromLabel({
590
- isGroup: kind !== "direct",
591
- groupLabel: channelDisplay || roomLabel,
592
- groupId: channelId,
593
- groupFallback: roomLabel || "Channel",
594
- directLabel: senderName,
595
- directId: senderId,
596
- });
597
-
598
- const preview = bodyText.replace(/\s+/g, " ").slice(0, 160);
599
- const inboundLabel =
600
- kind === "direct"
601
- ? `Mattermost DM from ${senderName}`
602
- : `Mattermost message in ${roomLabel} from ${senderName}`;
603
- core.system.enqueueSystemEvent(`${inboundLabel}: ${preview}`, {
604
- sessionKey,
605
- contextKey: `mattermost:message:${channelId}:${post.id ?? "unknown"}`,
606
- });
607
-
608
- const textWithId = `${bodyText}\n[mattermost message id: ${post.id ?? "unknown"} channel: ${channelId}]`;
609
- const body = core.channel.reply.formatInboundEnvelope({
610
- channel: "Mattermost",
611
- from: fromLabel,
612
- timestamp: typeof post.create_at === "number" ? post.create_at : undefined,
613
- body: textWithId,
614
- chatType,
615
- sender: { name: senderName, id: senderId },
616
- });
617
- let combinedBody = body;
618
- if (historyKey) {
619
- combinedBody = buildPendingHistoryContextFromMap({
620
- historyMap: channelHistories,
621
- historyKey,
622
- limit: historyLimit,
623
- currentMessage: combinedBody,
624
- formatEntry: (entry) =>
625
- core.channel.reply.formatInboundEnvelope({
626
- channel: "Mattermost",
627
- from: fromLabel,
628
- timestamp: entry.timestamp,
629
- body: `${entry.body}${
630
- entry.messageId ? ` [id:${entry.messageId} channel:${channelId}]` : ""
631
- }`,
632
- chatType,
633
- senderLabel: entry.sender,
634
- }),
635
- });
636
- }
637
-
638
- const to = kind === "direct" ? `user:${senderId}` : `channel:${channelId}`;
639
- const mediaPayload = buildAgentMediaPayload(mediaList);
640
- const inboundHistory =
641
- historyKey && historyLimit > 0
642
- ? (channelHistories.get(historyKey) ?? []).map((entry) => ({
643
- sender: entry.sender,
644
- body: entry.body,
645
- timestamp: entry.timestamp,
646
- }))
647
- : undefined;
648
- const ctxPayload = core.channel.reply.finalizeInboundContext({
649
- Body: combinedBody,
650
- BodyForAgent: bodyText,
651
- InboundHistory: inboundHistory,
652
- RawBody: bodyText,
653
- CommandBody: bodyText,
654
- From:
655
- kind === "direct"
656
- ? `mattermost:${senderId}`
657
- : kind === "group"
658
- ? `mattermost:group:${channelId}`
659
- : `mattermost:channel:${channelId}`,
660
- To: to,
661
- SessionKey: sessionKey,
662
- ParentSessionKey: threadKeys.parentSessionKey,
663
- AccountId: route.accountId,
664
- ChatType: chatType,
665
- ConversationLabel: fromLabel,
666
- GroupSubject: kind !== "direct" ? channelDisplay || roomLabel : undefined,
667
- GroupChannel: channelName ? `#${channelName}` : undefined,
668
- GroupSpace: teamId,
669
- SenderName: senderName,
670
- SenderId: senderId,
671
- Provider: "mattermost" as const,
672
- Surface: "mattermost" as const,
673
- MessageSid: post.id ?? undefined,
674
- MessageSids: allMessageIds.length > 1 ? allMessageIds : undefined,
675
- MessageSidFirst: allMessageIds.length > 1 ? allMessageIds[0] : undefined,
676
- MessageSidLast:
677
- allMessageIds.length > 1 ? allMessageIds[allMessageIds.length - 1] : undefined,
678
- ReplyToId: threadRootId,
679
- MessageThreadId: threadRootId,
680
- Timestamp: typeof post.create_at === "number" ? post.create_at : undefined,
681
- WasMentioned: kind !== "direct" ? effectiveWasMentioned : undefined,
682
- CommandAuthorized: commandAuthorized,
683
- OriginatingChannel: "mattermost" as const,
684
- OriginatingTo: to,
685
- ...mediaPayload,
686
- });
687
-
688
- if (kind === "direct") {
689
- const sessionCfg = cfg.session;
690
- const storePath = core.channel.session.resolveStorePath(sessionCfg?.store, {
691
- agentId: route.agentId,
692
- });
693
- await core.channel.session.updateLastRoute({
694
- storePath,
695
- sessionKey: route.mainSessionKey,
696
- deliveryContext: {
697
- channel: "mattermost",
698
- to,
699
- accountId: route.accountId,
700
- },
701
- });
702
- }
703
-
704
- const previewLine = bodyText.slice(0, 200).replace(/\n/g, "\\n");
705
- logVerboseMessage(
706
- `mattermost inbound: from=${ctxPayload.From} len=${bodyText.length} preview="${previewLine}"`,
707
- );
708
-
709
- const textLimit = core.channel.text.resolveTextChunkLimit(
710
- cfg,
711
- "mattermost",
712
- account.accountId,
713
- {
714
- fallbackLimit: account.textChunkLimit ?? 4000,
715
- },
716
- );
717
- const tableMode = core.channel.text.resolveMarkdownTableMode({
718
- cfg,
719
- channel: "mattermost",
720
- accountId: account.accountId,
721
- });
722
-
723
- const { onModelSelected, ...prefixOptions } = createReplyPrefixOptions({
724
- cfg,
725
- agentId: route.agentId,
726
- channel: "mattermost",
727
- accountId: account.accountId,
728
- });
729
-
730
- const typingCallbacks = createTypingCallbacks({
731
- start: () => sendTypingIndicator(channelId, threadRootId),
732
- onStartError: (err) => {
733
- logTypingFailure({
734
- log: (message) => logger.debug?.(message),
735
- channel: "mattermost",
736
- target: channelId,
737
- error: err,
738
- });
739
- },
740
- });
741
- const { dispatcher, replyOptions, markDispatchIdle } =
742
- core.channel.reply.createReplyDispatcherWithTyping({
743
- ...prefixOptions,
744
- humanDelay: core.channel.reply.resolveHumanDelayConfig(cfg, route.agentId),
745
- deliver: async (payload: ReplyPayload) => {
746
- const mediaUrls = payload.mediaUrls ?? (payload.mediaUrl ? [payload.mediaUrl] : []);
747
- const text = core.channel.text.convertMarkdownTables(payload.text ?? "", tableMode);
748
- if (mediaUrls.length === 0) {
749
- const chunkMode = core.channel.text.resolveChunkMode(
750
- cfg,
751
- "mattermost",
752
- account.accountId,
753
- );
754
- const chunks = core.channel.text.chunkMarkdownTextWithMode(text, textLimit, chunkMode);
755
- for (const chunk of chunks.length > 0 ? chunks : [text]) {
756
- if (!chunk) {
757
- continue;
758
- }
759
- await sendMessageMattermost(to, chunk, {
760
- accountId: account.accountId,
761
- replyToId: threadRootId,
762
- });
763
- }
764
- } else {
765
- let first = true;
766
- for (const mediaUrl of mediaUrls) {
767
- const caption = first ? text : "";
768
- first = false;
769
- await sendMessageMattermost(to, caption, {
770
- accountId: account.accountId,
771
- mediaUrl,
772
- replyToId: threadRootId,
773
- });
774
- }
775
- }
776
- runtime.log?.(`delivered reply to ${to}`);
777
- },
778
- onError: (err, info) => {
779
- runtime.error?.(`mattermost ${info.kind} reply failed: ${String(err)}`);
780
- },
781
- onReplyStart: typingCallbacks.onReplyStart,
782
- });
783
-
784
- await core.channel.reply.dispatchReplyFromConfig({
785
- ctx: ctxPayload,
786
- cfg,
787
- dispatcher,
788
- replyOptions: {
789
- ...replyOptions,
790
- disableBlockStreaming:
791
- typeof account.blockStreaming === "boolean" ? !account.blockStreaming : undefined,
792
- onModelSelected,
793
- },
794
- });
795
- markDispatchIdle();
796
- if (historyKey) {
797
- clearHistoryEntriesIfEnabled({
798
- historyMap: channelHistories,
799
- historyKey,
800
- limit: historyLimit,
801
- });
802
- }
803
- };
804
-
805
- const handleReactionEvent = async (payload: MattermostEventPayload) => {
806
- const reactionData = payload.data?.reaction;
807
- if (!reactionData) {
808
- return;
809
- }
810
- let reaction: MattermostReaction | null = null;
811
- if (typeof reactionData === "string") {
812
- try {
813
- reaction = JSON.parse(reactionData) as MattermostReaction;
814
- } catch {
815
- return;
816
- }
817
- } else if (typeof reactionData === "object") {
818
- reaction = reactionData as MattermostReaction;
819
- }
820
- if (!reaction) {
821
- return;
822
- }
823
-
824
- const userId = reaction.user_id?.trim();
825
- const postId = reaction.post_id?.trim();
826
- const emojiName = reaction.emoji_name?.trim();
827
- if (!userId || !postId || !emojiName) {
828
- return;
829
- }
830
-
831
- // Skip reactions from the bot itself
832
- if (userId === botUserId) {
833
- return;
834
- }
835
-
836
- const isRemoved = payload.event === "reaction_removed";
837
- const action = isRemoved ? "removed" : "added";
838
-
839
- const senderInfo = await resolveUserInfo(userId);
840
- const senderName = senderInfo?.username?.trim() || userId;
841
-
842
- // Resolve the channel from broadcast or post to route to the correct agent session
843
- const channelId = payload.broadcast?.channel_id;
844
- if (!channelId) {
845
- // Without a channel id we cannot verify DM/group policies — drop to be safe
846
- logVerboseMessage(
847
- `mattermost: drop reaction (no channel_id in broadcast, cannot enforce policy)`,
848
- );
849
- return;
850
- }
851
- const channelInfo = await resolveChannelInfo(channelId);
852
- if (!channelInfo?.type) {
853
- // Cannot determine channel type — drop to avoid policy bypass
854
- logVerboseMessage(`mattermost: drop reaction (cannot resolve channel type for ${channelId})`);
855
- return;
856
- }
857
- const kind = channelKind(channelInfo.type);
858
-
859
- // Enforce DM/group policy and allowlist checks (same as normal messages)
860
- if (kind === "direct") {
861
- const dmPolicy = account.config.dmPolicy ?? "pairing";
862
- if (dmPolicy === "disabled") {
863
- logVerboseMessage(`mattermost: drop reaction (dmPolicy=disabled sender=${userId})`);
864
- return;
865
- }
866
- // For pairing/allowlist modes, only allow reactions from approved senders
867
- if (dmPolicy !== "open") {
868
- const configAllowFrom = normalizeAllowList(account.config.allowFrom ?? []);
869
- const storeAllowFrom = normalizeAllowList(
870
- await core.channel.pairing.readAllowFromStore("mattermost").catch(() => []),
871
- );
872
- const effectiveAllowFrom = Array.from(new Set([...configAllowFrom, ...storeAllowFrom]));
873
- const allowed = isSenderAllowed({
874
- senderId: userId,
875
- senderName,
876
- allowFrom: effectiveAllowFrom,
877
- });
878
- if (!allowed) {
879
- logVerboseMessage(
880
- `mattermost: drop reaction (dmPolicy=${dmPolicy} sender=${userId} not allowed)`,
881
- );
882
- return;
883
- }
884
- }
885
- } else if (kind) {
886
- const defaultGroupPolicy = cfg.channels?.defaults?.groupPolicy;
887
- const groupPolicy = account.config.groupPolicy ?? defaultGroupPolicy ?? "allowlist";
888
- if (groupPolicy === "disabled") {
889
- logVerboseMessage(`mattermost: drop reaction (groupPolicy=disabled channel=${channelId})`);
890
- return;
891
- }
892
- if (groupPolicy === "allowlist") {
893
- const configAllowFrom = normalizeAllowList(account.config.allowFrom ?? []);
894
- const configGroupAllowFrom = normalizeAllowList(account.config.groupAllowFrom ?? []);
895
- const storeAllowFrom = normalizeAllowList(
896
- await core.channel.pairing.readAllowFromStore("mattermost").catch(() => []),
897
- );
898
- const effectiveGroupAllowFrom = Array.from(
899
- new Set([
900
- ...(configGroupAllowFrom.length > 0 ? configGroupAllowFrom : configAllowFrom),
901
- ...storeAllowFrom,
902
- ]),
903
- );
904
- // Drop when allowlist is empty (same as normal message handler)
905
- const allowed =
906
- effectiveGroupAllowFrom.length > 0 &&
907
- isSenderAllowed({
908
- senderId: userId,
909
- senderName,
910
- allowFrom: effectiveGroupAllowFrom,
911
- });
912
- if (!allowed) {
913
- logVerboseMessage(`mattermost: drop reaction (groupPolicy=allowlist sender=${userId})`);
914
- return;
915
- }
916
- }
917
- }
918
-
919
- const teamId = channelInfo?.team_id ?? undefined;
920
- const route = core.channel.routing.resolveAgentRoute({
921
- cfg,
922
- channel: "mattermost",
923
- accountId: account.accountId,
924
- teamId,
925
- peer: {
926
- kind,
927
- id: kind === "direct" ? userId : channelId,
928
- },
929
- });
930
- const sessionKey = route.sessionKey;
931
-
932
- const eventText = `Mattermost reaction ${action}: :${emojiName}: by @${senderName} on post ${postId} in channel ${channelId}`;
933
-
934
- core.system.enqueueSystemEvent(eventText, {
935
- sessionKey,
936
- contextKey: `mattermost:reaction:${postId}:${emojiName}:${userId}:${action}`,
937
- });
938
-
939
- logVerboseMessage(
940
- `mattermost reaction: ${action} :${emojiName}: by ${senderName} on ${postId}`,
941
- );
942
- };
943
-
944
- const inboundDebounceMs = core.channel.debounce.resolveInboundDebounceMs({
945
- cfg,
946
- channel: "mattermost",
947
- });
948
- const debouncer = core.channel.debounce.createInboundDebouncer<{
949
- post: MattermostPost;
950
- payload: MattermostEventPayload;
951
- }>({
952
- debounceMs: inboundDebounceMs,
953
- buildKey: (entry) => {
954
- const channelId =
955
- entry.post.channel_id ??
956
- entry.payload.data?.channel_id ??
957
- entry.payload.broadcast?.channel_id;
958
- if (!channelId) {
959
- return null;
960
- }
961
- const threadId = entry.post.root_id?.trim();
962
- const threadKey = threadId ? `thread:${threadId}` : "channel";
963
- return `mattermost:${account.accountId}:${channelId}:${threadKey}`;
964
- },
965
- shouldDebounce: (entry) => {
966
- if (entry.post.file_ids && entry.post.file_ids.length > 0) {
967
- return false;
968
- }
969
- const text = entry.post.message?.trim() ?? "";
970
- if (!text) {
971
- return false;
972
- }
973
- return !core.channel.text.hasControlCommand(text, cfg);
974
- },
975
- onFlush: async (entries) => {
976
- const last = entries.at(-1);
977
- if (!last) {
978
- return;
979
- }
980
- if (entries.length === 1) {
981
- await handlePost(last.post, last.payload);
982
- return;
983
- }
984
- const combinedText = entries
985
- .map((entry) => entry.post.message?.trim() ?? "")
986
- .filter(Boolean)
987
- .join("\n");
988
- const mergedPost: MattermostPost = {
989
- ...last.post,
990
- message: combinedText,
991
- file_ids: [],
992
- };
993
- const ids = entries.map((entry) => entry.post.id).filter(Boolean);
994
- await handlePost(mergedPost, last.payload, ids.length > 0 ? ids : undefined);
995
- },
996
- onError: (err) => {
997
- runtime.error?.(`mattermost debounce flush failed: ${String(err)}`);
998
- },
999
- });
1000
-
1001
- const wsUrl = buildMattermostWsUrl(baseUrl);
1002
- let seq = 1;
1003
- const connectOnce = createMattermostConnectOnce({
1004
- wsUrl,
1005
- botToken,
1006
- abortSignal: opts.abortSignal,
1007
- statusSink: opts.statusSink,
1008
- runtime,
1009
- webSocketFactory: opts.webSocketFactory,
1010
- nextSeq: () => seq++,
1011
- onPosted: async (post, payload) => {
1012
- await debouncer.enqueue({ post, payload });
1013
- },
1014
- onReaction: async (payload) => {
1015
- await handleReactionEvent(payload);
1016
- },
1017
- });
1018
-
1019
- await runWithReconnect(connectOnce, {
1020
- abortSignal: opts.abortSignal,
1021
- jitterRatio: 0.2,
1022
- onError: (err) => {
1023
- runtime.error?.(`mattermost connection failed: ${String(err)}`);
1024
- opts.statusSink?.({ lastError: String(err), connected: false });
1025
- },
1026
- onReconnect: (delayMs) => {
1027
- runtime.log?.(`mattermost reconnecting in ${Math.round(delayMs / 1000)}s`);
1028
- },
1029
- });
1030
- }