@jeongsu816/matrix-bot-sdk 0.0.0-stage → 0.8.1

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 (377) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +50 -2
  3. package/lib/AdminApis.d.ts +52 -0
  4. package/lib/AdminApis.js +29 -0
  5. package/lib/AdminApis.js.map +1 -0
  6. package/lib/DMs.d.ts +48 -0
  7. package/lib/DMs.js +160 -0
  8. package/lib/DMs.js.map +1 -0
  9. package/lib/IFilter.d.ts +7 -0
  10. package/lib/IFilter.js +3 -0
  11. package/lib/IFilter.js.map +1 -0
  12. package/lib/MatrixAuth.d.ts +45 -0
  13. package/lib/MatrixAuth.js +125 -0
  14. package/lib/MatrixAuth.js.map +1 -0
  15. package/lib/MatrixClient.d.ts +834 -0
  16. package/lib/MatrixClient.js +2268 -0
  17. package/lib/MatrixClient.js.map +1 -0
  18. package/lib/PantalaimonClient.d.ts +42 -0
  19. package/lib/PantalaimonClient.js +44 -0
  20. package/lib/PantalaimonClient.js.map +1 -0
  21. package/lib/SynapseAdminApis.d.ts +350 -0
  22. package/lib/SynapseAdminApis.js +244 -0
  23. package/lib/SynapseAdminApis.js.map +1 -0
  24. package/lib/SynchronousMatrixClient.d.ts +82 -0
  25. package/lib/SynchronousMatrixClient.js +130 -0
  26. package/lib/SynchronousMatrixClient.js.map +1 -0
  27. package/lib/UnstableApis.d.ts +43 -0
  28. package/lib/UnstableApis.js +74 -0
  29. package/lib/UnstableApis.js.map +1 -0
  30. package/lib/appservice/Appservice.d.ts +328 -0
  31. package/lib/appservice/Appservice.js +803 -0
  32. package/lib/appservice/Appservice.js.map +1 -0
  33. package/lib/appservice/Intent.d.ts +113 -0
  34. package/lib/appservice/Intent.js +363 -0
  35. package/lib/appservice/Intent.js.map +1 -0
  36. package/lib/appservice/MatrixBridge.d.ts +85 -0
  37. package/lib/appservice/MatrixBridge.js +111 -0
  38. package/lib/appservice/MatrixBridge.js.map +1 -0
  39. package/lib/appservice/UnstableAppserviceApis.d.ts +41 -0
  40. package/lib/appservice/UnstableAppserviceApis.js +62 -0
  41. package/lib/appservice/UnstableAppserviceApis.js.map +1 -0
  42. package/lib/appservice/http_responses.d.ts +77 -0
  43. package/lib/appservice/http_responses.js +3 -0
  44. package/lib/appservice/http_responses.js.map +1 -0
  45. package/lib/b64.d.ts +42 -0
  46. package/lib/b64.js +68 -0
  47. package/lib/b64.js.map +1 -0
  48. package/lib/e2ee/CrossSigningBootstrap.d.ts +73 -0
  49. package/lib/e2ee/CrossSigningBootstrap.js +86 -0
  50. package/lib/e2ee/CrossSigningBootstrap.js.map +1 -0
  51. package/lib/e2ee/CryptoClient.d.ts +163 -0
  52. package/lib/e2ee/CryptoClient.js +382 -0
  53. package/lib/e2ee/CryptoClient.js.map +1 -0
  54. package/lib/e2ee/ICryptoRoomInformation.d.ts +8 -0
  55. package/lib/e2ee/ICryptoRoomInformation.js +3 -0
  56. package/lib/e2ee/ICryptoRoomInformation.js.map +1 -0
  57. package/lib/e2ee/RoomTracker.d.ts +41 -0
  58. package/lib/e2ee/RoomTracker.js +96 -0
  59. package/lib/e2ee/RoomTracker.js.map +1 -0
  60. package/lib/e2ee/RustEngine.d.ts +149 -0
  61. package/lib/e2ee/RustEngine.js +467 -0
  62. package/lib/e2ee/RustEngine.js.map +1 -0
  63. package/lib/e2ee/decorators.d.ts +10 -0
  64. package/lib/e2ee/decorators.js +37 -0
  65. package/lib/e2ee/decorators.js.map +1 -0
  66. package/lib/helpers/MatrixEntity.d.ts +37 -0
  67. package/lib/helpers/MatrixEntity.js +67 -0
  68. package/lib/helpers/MatrixEntity.js.map +1 -0
  69. package/lib/helpers/MatrixGlob.d.ts +22 -0
  70. package/lib/helpers/MatrixGlob.js +35 -0
  71. package/lib/helpers/MatrixGlob.js.map +1 -0
  72. package/lib/helpers/MentionPill.d.ts +40 -0
  73. package/lib/helpers/MentionPill.js +91 -0
  74. package/lib/helpers/MentionPill.js.map +1 -0
  75. package/lib/helpers/Permalinks.d.ts +58 -0
  76. package/lib/helpers/Permalinks.js +73 -0
  77. package/lib/helpers/Permalinks.js.map +1 -0
  78. package/lib/helpers/ProfileCache.d.ts +48 -0
  79. package/lib/helpers/ProfileCache.js +114 -0
  80. package/lib/helpers/ProfileCache.js.map +1 -0
  81. package/lib/helpers/RichReply.d.ts +17 -0
  82. package/lib/helpers/RichReply.js +47 -0
  83. package/lib/helpers/RichReply.js.map +1 -0
  84. package/lib/helpers/UnpaddedBase64.d.ts +31 -0
  85. package/lib/helpers/UnpaddedBase64.js +45 -0
  86. package/lib/helpers/UnpaddedBase64.js.map +1 -0
  87. package/lib/http.d.ts +17 -0
  88. package/lib/http.js +147 -0
  89. package/lib/http.js.map +1 -0
  90. package/lib/identity/IdentityClient.d.ts +93 -0
  91. package/lib/identity/IdentityClient.js +248 -0
  92. package/lib/identity/IdentityClient.js.map +1 -0
  93. package/lib/index.d.ts +91 -0
  94. package/lib/index.js +125 -0
  95. package/lib/index.js.map +1 -0
  96. package/lib/logging/ConsoleLogger.d.ts +12 -0
  97. package/lib/logging/ConsoleLogger.js +28 -0
  98. package/lib/logging/ConsoleLogger.js.map +1 -0
  99. package/lib/logging/ILogger.d.ts +36 -0
  100. package/lib/logging/ILogger.js +3 -0
  101. package/lib/logging/ILogger.js.map +1 -0
  102. package/lib/logging/LogService.d.ts +100 -0
  103. package/lib/logging/LogService.js +169 -0
  104. package/lib/logging/LogService.js.map +1 -0
  105. package/lib/logging/RichConsoleLogger.d.ts +20 -0
  106. package/lib/logging/RichConsoleLogger.js +41 -0
  107. package/lib/logging/RichConsoleLogger.js.map +1 -0
  108. package/lib/metrics/IMetricListener.d.ts +52 -0
  109. package/lib/metrics/IMetricListener.js +3 -0
  110. package/lib/metrics/IMetricListener.js.map +1 -0
  111. package/lib/metrics/Metrics.d.ts +66 -0
  112. package/lib/metrics/Metrics.js +128 -0
  113. package/lib/metrics/Metrics.js.map +1 -0
  114. package/lib/metrics/contexts.d.ts +51 -0
  115. package/lib/metrics/contexts.js +3 -0
  116. package/lib/metrics/contexts.js.map +1 -0
  117. package/lib/metrics/decorators.d.ts +15 -0
  118. package/lib/metrics/decorators.js +92 -0
  119. package/lib/metrics/decorators.js.map +1 -0
  120. package/lib/metrics/names.d.ts +45 -0
  121. package/lib/metrics/names.js +49 -0
  122. package/lib/metrics/names.js.map +1 -0
  123. package/lib/mixins/AutojoinRoomsMixin.d.ts +10 -0
  124. package/lib/mixins/AutojoinRoomsMixin.js +25 -0
  125. package/lib/mixins/AutojoinRoomsMixin.js.map +1 -0
  126. package/lib/mixins/AutojoinUpgradedRoomsMixin.d.ts +10 -0
  127. package/lib/mixins/AutojoinUpgradedRoomsMixin.js +40 -0
  128. package/lib/mixins/AutojoinUpgradedRoomsMixin.js.map +1 -0
  129. package/lib/models/Account.d.ts +8 -0
  130. package/lib/models/Account.js +3 -0
  131. package/lib/models/Account.js.map +1 -0
  132. package/lib/models/CreateRoom.d.ts +125 -0
  133. package/lib/models/CreateRoom.js +3 -0
  134. package/lib/models/CreateRoom.js.map +1 -0
  135. package/lib/models/Crypto.d.ts +167 -0
  136. package/lib/models/Crypto.js +31 -0
  137. package/lib/models/Crypto.js.map +1 -0
  138. package/lib/models/EventContext.d.ts +19 -0
  139. package/lib/models/EventContext.js +3 -0
  140. package/lib/models/EventContext.js.map +1 -0
  141. package/lib/models/IdentityServerModels.d.ts +20 -0
  142. package/lib/models/IdentityServerModels.js +3 -0
  143. package/lib/models/IdentityServerModels.js.map +1 -0
  144. package/lib/models/MSC2176.d.ts +42 -0
  145. package/lib/models/MSC2176.js +3 -0
  146. package/lib/models/MSC2176.js.map +1 -0
  147. package/lib/models/MatrixError.d.ts +38 -0
  148. package/lib/models/MatrixError.js +30 -0
  149. package/lib/models/MatrixError.js.map +1 -0
  150. package/lib/models/MatrixProfile.d.ts +43 -0
  151. package/lib/models/MatrixProfile.js +43 -0
  152. package/lib/models/MatrixProfile.js.map +1 -0
  153. package/lib/models/OpenIDConnect.d.ts +10 -0
  154. package/lib/models/OpenIDConnect.js +3 -0
  155. package/lib/models/OpenIDConnect.js.map +1 -0
  156. package/lib/models/Policies.d.ts +25 -0
  157. package/lib/models/Policies.js +3 -0
  158. package/lib/models/Policies.js.map +1 -0
  159. package/lib/models/PowerLevelAction.d.ts +27 -0
  160. package/lib/models/PowerLevelAction.js +32 -0
  161. package/lib/models/PowerLevelAction.js.map +1 -0
  162. package/lib/models/PowerLevelBounds.d.ts +15 -0
  163. package/lib/models/PowerLevelBounds.js +3 -0
  164. package/lib/models/PowerLevelBounds.js.map +1 -0
  165. package/lib/models/Presence.d.ts +25 -0
  166. package/lib/models/Presence.js +38 -0
  167. package/lib/models/Presence.js.map +1 -0
  168. package/lib/models/ServerVersions.d.ts +8 -0
  169. package/lib/models/ServerVersions.js +3 -0
  170. package/lib/models/ServerVersions.js.map +1 -0
  171. package/lib/models/Spaces.d.ts +116 -0
  172. package/lib/models/Spaces.js +91 -0
  173. package/lib/models/Spaces.js.map +1 -0
  174. package/lib/models/Threepid.d.ts +8 -0
  175. package/lib/models/Threepid.js +3 -0
  176. package/lib/models/Threepid.js.map +1 -0
  177. package/lib/models/events/AliasesEvent.d.ts +27 -0
  178. package/lib/models/events/AliasesEvent.js +27 -0
  179. package/lib/models/events/AliasesEvent.js.map +1 -0
  180. package/lib/models/events/CanonicalAliasEvent.d.ts +23 -0
  181. package/lib/models/events/CanonicalAliasEvent.js +21 -0
  182. package/lib/models/events/CanonicalAliasEvent.js.map +1 -0
  183. package/lib/models/events/CreateEvent.d.ts +63 -0
  184. package/lib/models/events/CreateEvent.js +33 -0
  185. package/lib/models/events/CreateEvent.js.map +1 -0
  186. package/lib/models/events/EncryptedRoomEvent.d.ts +42 -0
  187. package/lib/models/events/EncryptedRoomEvent.js +28 -0
  188. package/lib/models/events/EncryptedRoomEvent.js.map +1 -0
  189. package/lib/models/events/EncryptionEvent.d.ts +47 -0
  190. package/lib/models/events/EncryptionEvent.js +42 -0
  191. package/lib/models/events/EncryptionEvent.js.map +1 -0
  192. package/lib/models/events/Event.d.ts +26 -0
  193. package/lib/models/events/Event.js +40 -0
  194. package/lib/models/events/Event.js.map +1 -0
  195. package/lib/models/events/EventKind.d.ts +15 -0
  196. package/lib/models/events/EventKind.js +20 -0
  197. package/lib/models/events/EventKind.js.map +1 -0
  198. package/lib/models/events/InvalidEventError.d.ts +14 -0
  199. package/lib/models/events/InvalidEventError.js +24 -0
  200. package/lib/models/events/InvalidEventError.js.map +1 -0
  201. package/lib/models/events/JoinRulesEvent.d.ts +29 -0
  202. package/lib/models/events/JoinRulesEvent.js +21 -0
  203. package/lib/models/events/JoinRulesEvent.js.map +1 -0
  204. package/lib/models/events/MembershipEvent.d.ts +54 -0
  205. package/lib/models/events/MembershipEvent.js +49 -0
  206. package/lib/models/events/MembershipEvent.js.map +1 -0
  207. package/lib/models/events/MessageEvent.d.ts +233 -0
  208. package/lib/models/events/MessageEvent.js +49 -0
  209. package/lib/models/events/MessageEvent.js.map +1 -0
  210. package/lib/models/events/PinnedEventsEvent.d.ts +23 -0
  211. package/lib/models/events/PinnedEventsEvent.js +21 -0
  212. package/lib/models/events/PinnedEventsEvent.js.map +1 -0
  213. package/lib/models/events/PowerLevelsEvent.d.ts +96 -0
  214. package/lib/models/events/PowerLevelsEvent.js +70 -0
  215. package/lib/models/events/PowerLevelsEvent.js.map +1 -0
  216. package/lib/models/events/PresenceEvent.d.ts +56 -0
  217. package/lib/models/events/PresenceEvent.js +21 -0
  218. package/lib/models/events/PresenceEvent.js.map +1 -0
  219. package/lib/models/events/RedactionEvent.d.ts +28 -0
  220. package/lib/models/events/RedactionEvent.js +36 -0
  221. package/lib/models/events/RedactionEvent.js.map +1 -0
  222. package/lib/models/events/RoomAvatarEvent.d.ts +28 -0
  223. package/lib/models/events/RoomAvatarEvent.js +21 -0
  224. package/lib/models/events/RoomAvatarEvent.js.map +1 -0
  225. package/lib/models/events/RoomEvent.d.ts +58 -0
  226. package/lib/models/events/RoomEvent.js +57 -0
  227. package/lib/models/events/RoomEvent.js.map +1 -0
  228. package/lib/models/events/RoomNameEvent.d.ts +20 -0
  229. package/lib/models/events/RoomNameEvent.js +21 -0
  230. package/lib/models/events/RoomNameEvent.js.map +1 -0
  231. package/lib/models/events/RoomTopicEvent.d.ts +20 -0
  232. package/lib/models/events/RoomTopicEvent.js +21 -0
  233. package/lib/models/events/RoomTopicEvent.js.map +1 -0
  234. package/lib/models/events/SpaceChildEvent.d.ts +53 -0
  235. package/lib/models/events/SpaceChildEvent.js +49 -0
  236. package/lib/models/events/SpaceChildEvent.js.map +1 -0
  237. package/lib/models/events/converter.d.ts +8 -0
  238. package/lib/models/events/converter.js +50 -0
  239. package/lib/models/events/converter.js.map +1 -0
  240. package/lib/models/unstable/MediaInfo.d.ts +16 -0
  241. package/lib/models/unstable/MediaInfo.js +3 -0
  242. package/lib/models/unstable/MediaInfo.js.map +1 -0
  243. package/lib/preprocessors/IPreprocessor.d.ts +22 -0
  244. package/lib/preprocessors/IPreprocessor.js +3 -0
  245. package/lib/preprocessors/IPreprocessor.js.map +1 -0
  246. package/lib/preprocessors/RichRepliesPreprocessor.d.ts +67 -0
  247. package/lib/preprocessors/RichRepliesPreprocessor.js +112 -0
  248. package/lib/preprocessors/RichRepliesPreprocessor.js.map +1 -0
  249. package/lib/request.d.ts +13 -0
  250. package/lib/request.js +23 -0
  251. package/lib/request.js.map +1 -0
  252. package/lib/simple-validation.d.ts +10 -0
  253. package/lib/simple-validation.js +30 -0
  254. package/lib/simple-validation.js.map +1 -0
  255. package/lib/storage/IAppserviceStorageProvider.d.ts +48 -0
  256. package/lib/storage/IAppserviceStorageProvider.js +3 -0
  257. package/lib/storage/IAppserviceStorageProvider.js.map +1 -0
  258. package/lib/storage/ICryptoStorageProvider.d.ts +32 -0
  259. package/lib/storage/ICryptoStorageProvider.js +3 -0
  260. package/lib/storage/ICryptoStorageProvider.js.map +1 -0
  261. package/lib/storage/IStorageProvider.d.ts +47 -0
  262. package/lib/storage/IStorageProvider.js +3 -0
  263. package/lib/storage/IStorageProvider.js.map +1 -0
  264. package/lib/storage/MemoryStorageProvider.d.ts +26 -0
  265. package/lib/storage/MemoryStorageProvider.js +55 -0
  266. package/lib/storage/MemoryStorageProvider.js.map +1 -0
  267. package/lib/storage/RustSdkCryptoStorageProvider.d.ts +38 -0
  268. package/lib/storage/RustSdkCryptoStorageProvider.js +69 -0
  269. package/lib/storage/RustSdkCryptoStorageProvider.js.map +1 -0
  270. package/lib/storage/SimpleFsStorageProvider.d.ts +31 -0
  271. package/lib/storage/SimpleFsStorageProvider.js +122 -0
  272. package/lib/storage/SimpleFsStorageProvider.js.map +1 -0
  273. package/lib/storage/SimplePostgresStorageProvider.d.ts +32 -0
  274. package/lib/storage/SimplePostgresStorageProvider.js +148 -0
  275. package/lib/storage/SimplePostgresStorageProvider.js.map +1 -0
  276. package/lib/strategies/AppserviceJoinRoomStrategy.d.ts +14 -0
  277. package/lib/strategies/AppserviceJoinRoomStrategy.js +54 -0
  278. package/lib/strategies/AppserviceJoinRoomStrategy.js.map +1 -0
  279. package/lib/strategies/JoinRoomStrategy.d.ts +11 -0
  280. package/lib/strategies/JoinRoomStrategy.js +44 -0
  281. package/lib/strategies/JoinRoomStrategy.js.map +1 -0
  282. package/package.json +136 -4
  283. package/src/AdminApis.ts +60 -0
  284. package/src/DMs.ts +164 -0
  285. package/src/IFilter.ts +7 -0
  286. package/src/MatrixAuth.ts +129 -0
  287. package/src/MatrixClient.ts +2046 -0
  288. package/src/PantalaimonClient.ts +62 -0
  289. package/src/SynapseAdminApis.ts +482 -0
  290. package/src/SynchronousMatrixClient.ts +129 -0
  291. package/src/UnstableApis.ts +75 -0
  292. package/src/appservice/Appservice.ts +1089 -0
  293. package/src/appservice/Intent.ts +342 -0
  294. package/src/appservice/MatrixBridge.ts +139 -0
  295. package/src/appservice/UnstableAppserviceApis.ts +63 -0
  296. package/src/appservice/http_responses.ts +77 -0
  297. package/src/b64.ts +63 -0
  298. package/src/e2ee/CrossSigningBootstrap.ts +141 -0
  299. package/src/e2ee/CryptoClient.ts +378 -0
  300. package/src/e2ee/ICryptoRoomInformation.ts +9 -0
  301. package/src/e2ee/RoomTracker.ts +99 -0
  302. package/src/e2ee/RustEngine.ts +580 -0
  303. package/src/e2ee/decorators.ts +38 -0
  304. package/src/helpers/MatrixEntity.ts +65 -0
  305. package/src/helpers/MatrixGlob.ts +38 -0
  306. package/src/helpers/MentionPill.ts +95 -0
  307. package/src/helpers/Permalinks.ts +101 -0
  308. package/src/helpers/ProfileCache.ts +119 -0
  309. package/src/helpers/RichReply.ts +46 -0
  310. package/src/helpers/UnpaddedBase64.ts +44 -0
  311. package/src/http.ts +166 -0
  312. package/src/identity/IdentityClient.ts +225 -0
  313. package/src/index.ts +125 -0
  314. package/src/logging/ConsoleLogger.ts +31 -0
  315. package/src/logging/ILogger.ts +40 -0
  316. package/src/logging/LogService.ts +167 -0
  317. package/src/logging/RichConsoleLogger.ts +70 -0
  318. package/src/metrics/IMetricListener.ts +57 -0
  319. package/src/metrics/Metrics.ts +134 -0
  320. package/src/metrics/contexts.ts +56 -0
  321. package/src/metrics/decorators.ts +94 -0
  322. package/src/metrics/names.ts +53 -0
  323. package/src/mixins/AutojoinRoomsMixin.ts +24 -0
  324. package/src/mixins/AutojoinUpgradedRoomsMixin.ts +37 -0
  325. package/src/models/Account.ts +8 -0
  326. package/src/models/CreateRoom.ts +144 -0
  327. package/src/models/Crypto.ts +188 -0
  328. package/src/models/EventContext.ts +23 -0
  329. package/src/models/IdentityServerModels.ts +18 -0
  330. package/src/models/MSC2176.ts +47 -0
  331. package/src/models/MatrixError.ts +39 -0
  332. package/src/models/MatrixProfile.ts +55 -0
  333. package/src/models/OpenIDConnect.ts +10 -0
  334. package/src/models/Policies.ts +28 -0
  335. package/src/models/PowerLevelAction.ts +31 -0
  336. package/src/models/PowerLevelBounds.ts +16 -0
  337. package/src/models/Presence.ts +38 -0
  338. package/src/models/ServerVersions.ts +8 -0
  339. package/src/models/Spaces.ts +167 -0
  340. package/src/models/Threepid.ts +8 -0
  341. package/src/models/events/AliasesEvent.ts +37 -0
  342. package/src/models/events/CanonicalAliasEvent.ts +30 -0
  343. package/src/models/events/CreateEvent.ts +82 -0
  344. package/src/models/events/EncryptedRoomEvent.ts +58 -0
  345. package/src/models/events/EncryptionEvent.ts +63 -0
  346. package/src/models/events/Event.ts +38 -0
  347. package/src/models/events/EventKind.ts +16 -0
  348. package/src/models/events/InvalidEventError.ts +19 -0
  349. package/src/models/events/JoinRulesEvent.ts +37 -0
  350. package/src/models/events/MembershipEvent.ts +77 -0
  351. package/src/models/events/MessageEvent.ts +292 -0
  352. package/src/models/events/PinnedEventsEvent.ts +30 -0
  353. package/src/models/events/PowerLevelsEvent.ts +135 -0
  354. package/src/models/events/PresenceEvent.ts +69 -0
  355. package/src/models/events/RedactionEvent.ts +44 -0
  356. package/src/models/events/RoomAvatarEvent.ts +36 -0
  357. package/src/models/events/RoomEvent.ts +83 -0
  358. package/src/models/events/RoomNameEvent.ts +27 -0
  359. package/src/models/events/RoomTopicEvent.ts +27 -0
  360. package/src/models/events/SpaceChildEvent.ts +74 -0
  361. package/src/models/events/_MissingEvents.md +35 -0
  362. package/src/models/events/converter.ts +47 -0
  363. package/src/models/unstable/MediaInfo.ts +16 -0
  364. package/src/preprocessors/IPreprocessor.ts +24 -0
  365. package/src/preprocessors/RichRepliesPreprocessor.ts +159 -0
  366. package/src/request.ts +21 -0
  367. package/src/simple-validation.ts +30 -0
  368. package/src/storage/IAppserviceStorageProvider.ts +54 -0
  369. package/src/storage/ICryptoStorageProvider.ts +36 -0
  370. package/src/storage/IStorageProvider.ts +53 -0
  371. package/src/storage/MemoryStorageProvider.ts +65 -0
  372. package/src/storage/RustSdkCryptoStorageProvider.ts +81 -0
  373. package/src/storage/SimpleFsStorageProvider.ts +142 -0
  374. package/src/storage/SimplePostgresStorageProvider.ts +168 -0
  375. package/src/strategies/AppserviceJoinRoomStrategy.ts +47 -0
  376. package/src/strategies/JoinRoomStrategy.ts +45 -0
  377. package/tsconfig.json +22 -0
@@ -0,0 +1,57 @@
1
+ import { IMetricContext } from "./contexts";
2
+
3
+ /**
4
+ * A simple interface for listening for Metric updates. Should be plugged into
5
+ * something like Prometheus for recording.
6
+ *
7
+ * Metric names are defined in metric_names.ts - see documentation on the name
8
+ * for what the context object contains. All metrics have a context object,
9
+ * with applicable interface. See the IMetricContext interface for more
10
+ * information.
11
+ * @category Metrics
12
+ */
13
+ export interface IMetricListener {
14
+ /**
15
+ * Called when the given metric should start being tracked. Will be
16
+ * paired with a matching onEndMetric() call.
17
+ * @param {string} metricName The metric being called.
18
+ * @param {IMetricContext} context Context for the metric. Never null.
19
+ */
20
+ onStartMetric(metricName: string, context: IMetricContext): void;
21
+
22
+ /**
23
+ * Called when the given metric should stop being tracked. Will have
24
+ * started with a matching onStartMetric() call.
25
+ * @param {string} metricName The metric being called.
26
+ * @param {any} context Context for the metric. Never null.
27
+ * @param {number} timeMs The measured time in milliseconds between
28
+ * the start and end.
29
+ */
30
+ onEndMetric(metricName: string, context: IMetricContext, timeMs: number): void;
31
+
32
+ /**
33
+ * Called when a linear metric (increasing/decreasing number) should
34
+ * be incremented.
35
+ * @param {string} metricName The metric being called.
36
+ * @param {IMetricContext} context Context for the metric. Never null.
37
+ * @param {number} amount The amount to add. Never negative or zero.
38
+ */
39
+ onIncrement(metricName: string, context: IMetricContext, amount: number);
40
+
41
+ /**
42
+ * Called when a linear metric (increasing/decreasing number) should
43
+ * be decremented.
44
+ * @param {string} metricName The metric being called.
45
+ * @param {IMetricContext} context Context for the metric. Never null.
46
+ * @param {number} amount The amount to subtract. Never negative or zero.
47
+ */
48
+ onDecrement(metricName: string, context: IMetricContext, amount: number);
49
+
50
+ /**
51
+ * Called when a linear metric (increasing/decreasing number) should
52
+ * be reset to zero.
53
+ * @param {string} metricName The metric being called.
54
+ * @param {IMetricContext} context Context for the metric. Never null.
55
+ */
56
+ onReset(metricName: string, context: IMetricContext);
57
+ }
@@ -0,0 +1,134 @@
1
+ import { IMetricListener } from "./IMetricListener";
2
+ import { IMetricContext } from "./contexts";
3
+ import { LogService } from "..";
4
+
5
+ /**
6
+ * Tracks metrics.
7
+ * @category Metrics
8
+ */
9
+ export class Metrics {
10
+ private listeners: IMetricListener[] = [];
11
+ private requestStartTimes: { [contextId: string]: number } = {};
12
+ private uid = 0;
13
+
14
+ /**
15
+ * Creates a new Metrics handler with optional parent handler. When
16
+ * a parent handler is defined, metrics will be automatically published
17
+ * upwards to the parent.
18
+ * @param {Metrics} parent Optional parent for upstream metrics.
19
+ */
20
+ constructor(parent: Metrics = null) {
21
+ if (parent !== null) {
22
+ this.registerListener({
23
+ onIncrement(metricName: string, context: IMetricContext, amount: number) {
24
+ parent.listeners.forEach(h => h.onIncrement(metricName, context, amount));
25
+ },
26
+ onDecrement(metricName: string, context: IMetricContext, amount: number) {
27
+ parent.listeners.forEach(h => h.onDecrement(metricName, context, amount));
28
+ },
29
+ onReset(metricName: string, context: IMetricContext) {
30
+ parent.listeners.forEach(h => h.onReset(metricName, context));
31
+ },
32
+ onStartMetric(metricName: string, context: IMetricContext): void {
33
+ parent.listeners.forEach(h => h.onStartMetric(metricName, context));
34
+ },
35
+ onEndMetric(metricName: string, context: IMetricContext, timeMs: number): void {
36
+ parent.listeners.forEach(h => h.onEndMetric(metricName, context, timeMs));
37
+ },
38
+ });
39
+ }
40
+ }
41
+
42
+ /**
43
+ * Registers a metric listener.
44
+ * @param {IMetricListener} listener The listener.
45
+ */
46
+ public registerListener(listener: IMetricListener) {
47
+ this.listeners.push(listener);
48
+ }
49
+
50
+ /**
51
+ * De-registers a metric listener.
52
+ * @param {IMetricListener} listener The listener.
53
+ */
54
+ public unregisterListener(listener: IMetricListener) {
55
+ const idx = this.listeners.indexOf(listener);
56
+ if (idx !== -1) this.listeners.splice(idx, 1);
57
+ }
58
+
59
+ /**
60
+ * Starts a timer on a metric.
61
+ * @param {string} metricName The metric name.
62
+ * @param {IMetricContext} context The metric context. Expected to have a unique ID.
63
+ */
64
+ public start(metricName: string, context: IMetricContext) {
65
+ this.requestStartTimes[context.uniqueId] = new Date().getTime();
66
+ this.listeners.forEach(h => h.onStartMetric(metricName, context));
67
+ }
68
+
69
+ /**
70
+ * Ends a timer on a metric.
71
+ * @param {string} metricName The metric name.
72
+ * @param {IMetricContext} context The metric context. Expected to have a unique ID.
73
+ */
74
+ public end(metricName: string, context: IMetricContext) {
75
+ const timeMs = (new Date().getTime()) - this.requestStartTimes[context.uniqueId];
76
+ delete this.requestStartTimes[context.uniqueId];
77
+ this.listeners.forEach(h => h.onEndMetric(metricName, context, timeMs));
78
+
79
+ // Trim the context for logging
80
+ const trimmedContext = {};
81
+ for (const key of Object.keys(context)) {
82
+ if (key === 'client') {
83
+ const client = context[key];
84
+ trimmedContext[key] = `<MatrixClient ${client['userId'] || 'NoCachedUserID'}>`;
85
+ } else if (key === 'intent') {
86
+ const intent = context[key];
87
+ trimmedContext[key] = `<Intent ${intent['userId'] || 'NoImpersonatedUserID'}>`;
88
+ } else {
89
+ trimmedContext[key] = context[key];
90
+ }
91
+ }
92
+
93
+ LogService.trace("Metrics", metricName, trimmedContext, timeMs);
94
+ }
95
+
96
+ /**
97
+ * Increments a metric.
98
+ * @param {string} metricName The metric name.
99
+ * @param {IMetricContext} context The metric context. Expected to have a unique ID.
100
+ * @param {number} amount The amount.
101
+ */
102
+ public increment(metricName: string, context: IMetricContext, amount: number) {
103
+ this.listeners.forEach(h => h.onIncrement(metricName, context, amount));
104
+ }
105
+
106
+ /**
107
+ * Decrements a metric.
108
+ * @param {string} metricName The metric name.
109
+ * @param {IMetricContext} context The metric context. Expected to have a unique ID.
110
+ * @param {number} amount The amount.
111
+ */
112
+ public decrement(metricName: string, context: IMetricContext, amount: number) {
113
+ this.listeners.forEach(h => h.onDecrement(metricName, context, amount));
114
+ }
115
+
116
+ /**
117
+ * Resets a metric.
118
+ * @param {string} metricName The metric name.
119
+ * @param {IMetricContext} context The metric context. Expected to have a unique ID.
120
+ */
121
+ public reset(metricName: string, context: IMetricContext) {
122
+ this.listeners.forEach(h => h.onReset(metricName, context));
123
+ }
124
+
125
+ /**
126
+ * Assigns a unique ID to the context object, returning it back.
127
+ * @param {IMetricContext} context The context to modify.
128
+ * @returns {IMetricContext} The provided context.
129
+ */
130
+ public assignUniqueContextId(context: IMetricContext): IMetricContext {
131
+ context.uniqueId = `${new Date().getTime()}-${this.uid++}`;
132
+ return context;
133
+ }
134
+ }
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Default context for all metrics.
3
+ * @category Metrics
4
+ */
5
+ import { MatrixClient } from "../MatrixClient";
6
+ import { Intent } from "../appservice/Intent";
7
+ import { IdentityClient } from "../identity/IdentityClient";
8
+
9
+ export interface IMetricContext {
10
+ /**
11
+ * Unique identifier for the context object. Used to differentiate
12
+ * contexts over a start/end event.
13
+ */
14
+ uniqueId: string;
15
+ }
16
+
17
+ /**
18
+ * Metric context for function call metrics.
19
+ * @category Metrics
20
+ */
21
+ export interface FunctionCallContext extends IMetricContext {
22
+ /**
23
+ * The function name being called
24
+ */
25
+ functionName: string;
26
+ }
27
+
28
+ /**
29
+ * Metric context for metrics from a MatrixClient
30
+ * @category Metrics
31
+ */
32
+ export interface MatrixClientCallContext extends FunctionCallContext {
33
+ /**
34
+ * The client that raised the metric.
35
+ */
36
+ client: MatrixClient;
37
+ }
38
+
39
+ /**
40
+ * Metric context for metrics from an IdentityClient
41
+ * @category Metrics
42
+ */
43
+ export interface IdentityClientCallContext extends FunctionCallContext {
44
+ client: IdentityClient;
45
+ }
46
+
47
+ /**
48
+ * Metric context for metrics from an Intent
49
+ * @category Metrics
50
+ */
51
+ export interface IntentCallContext extends MatrixClientCallContext {
52
+ /**
53
+ * The intent that is raising the metric.
54
+ */
55
+ intent: Intent;
56
+ }
@@ -0,0 +1,94 @@
1
+ import {
2
+ METRIC_IDENTITY_CLIENT_FAILED_FUNCTION_CALL,
3
+ METRIC_IDENTITY_CLIENT_FUNCTION_CALL,
4
+ METRIC_IDENTITY_CLIENT_SUCCESSFUL_FUNCTION_CALL,
5
+ METRIC_INTENT_FAILED_FUNCTION_CALL,
6
+ METRIC_INTENT_FUNCTION_CALL,
7
+ METRIC_INTENT_SUCCESSFUL_FUNCTION_CALL,
8
+ METRIC_MATRIX_CLIENT_FAILED_FUNCTION_CALL,
9
+ METRIC_MATRIX_CLIENT_FUNCTION_CALL,
10
+ METRIC_MATRIX_CLIENT_SUCCESSFUL_FUNCTION_CALL,
11
+ } from "./names";
12
+ import { IdentityClientCallContext, IntentCallContext, MatrixClientCallContext } from "./contexts";
13
+
14
+ /**
15
+ * Times a MatrixClient function call for metrics.
16
+ * @category Metrics
17
+ */
18
+ export function timedMatrixClientFunctionCall() {
19
+ return function(_target: unknown, functionName: string, descriptor: PropertyDescriptor) {
20
+ const originalMethod = descriptor.value;
21
+ descriptor.value = async function(...args) {
22
+ const context = this.metrics.assignUniqueContextId(<MatrixClientCallContext>{
23
+ functionName,
24
+ client: this,
25
+ });
26
+ this.metrics.start(METRIC_MATRIX_CLIENT_FUNCTION_CALL, context);
27
+ try {
28
+ const result = await originalMethod.apply(this, args);
29
+ this.metrics.increment(METRIC_MATRIX_CLIENT_SUCCESSFUL_FUNCTION_CALL, context, 1);
30
+ return result;
31
+ } catch (e) {
32
+ this.metrics.increment(METRIC_MATRIX_CLIENT_FAILED_FUNCTION_CALL, context, 1);
33
+ throw e;
34
+ } finally {
35
+ this.metrics.end(METRIC_MATRIX_CLIENT_FUNCTION_CALL, context);
36
+ }
37
+ };
38
+ };
39
+ }
40
+
41
+ /**
42
+ * Times an IdentityClient function call for metrics.
43
+ * @category Metrics
44
+ */
45
+ export function timedIdentityClientFunctionCall() {
46
+ return function(_target: unknown, functionName: string, descriptor: PropertyDescriptor) {
47
+ const originalMethod = descriptor.value;
48
+ descriptor.value = async function(...args: any[]) {
49
+ const context = this.metrics.assignUniqueContextId(<IdentityClientCallContext>{
50
+ functionName,
51
+ client: this,
52
+ });
53
+ this.metrics.start(METRIC_IDENTITY_CLIENT_FUNCTION_CALL, context);
54
+ try {
55
+ const result = await originalMethod.apply(this, args);
56
+ this.metrics.increment(METRIC_IDENTITY_CLIENT_SUCCESSFUL_FUNCTION_CALL, context, 1);
57
+ return result;
58
+ } catch (e) {
59
+ this.metrics.increment(METRIC_IDENTITY_CLIENT_FAILED_FUNCTION_CALL, context, 1);
60
+ throw e;
61
+ } finally {
62
+ this.metrics.end(METRIC_IDENTITY_CLIENT_FUNCTION_CALL, context);
63
+ }
64
+ };
65
+ };
66
+ }
67
+
68
+ /**
69
+ * Times an Intent function call for metrics.
70
+ * @category Metrics
71
+ */
72
+ export function timedIntentFunctionCall() {
73
+ return function(_target: unknown, functionName: string, descriptor: PropertyDescriptor) {
74
+ const originalMethod = descriptor.value;
75
+ descriptor.value = async function(...args: any[]) {
76
+ const context = this.metrics.assignUniqueContextId(<IntentCallContext>{
77
+ functionName,
78
+ client: this.client,
79
+ intent: this,
80
+ });
81
+ this.metrics.start(METRIC_INTENT_FUNCTION_CALL, context);
82
+ try {
83
+ const result = await originalMethod.apply(this, args);
84
+ this.metrics.increment(METRIC_INTENT_SUCCESSFUL_FUNCTION_CALL, context, 1);
85
+ return result;
86
+ } catch (e) {
87
+ this.metrics.increment(METRIC_INTENT_FAILED_FUNCTION_CALL, context, 1);
88
+ throw e;
89
+ } finally {
90
+ this.metrics.end(METRIC_INTENT_FUNCTION_CALL, context);
91
+ }
92
+ };
93
+ };
94
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Time-series metric for how long a function call takes on MatrixClient. Uses a MatrixClientCallContext.
3
+ * @category Metrics
4
+ */
5
+ export const METRIC_MATRIX_CLIENT_FUNCTION_CALL = "matrix_client_function_call";
6
+
7
+ /**
8
+ * Counter metric for failed function calls on a MatrixClient. Uses a MatrixClientCallContext.
9
+ * @category Metrics
10
+ */
11
+ export const METRIC_MATRIX_CLIENT_FAILED_FUNCTION_CALL = "matrix_client_failed_function_call";
12
+
13
+ /**
14
+ * Counter metric for successful function calls on a MatrixClient. Uses a MatrixClientCallContext.
15
+ * @category Metrics
16
+ */
17
+ export const METRIC_MATRIX_CLIENT_SUCCESSFUL_FUNCTION_CALL = "matrix_client_successful_function_call";
18
+
19
+ /**
20
+ * Time-series metric for how long a function call takes on an IdentityClient. Uses an IdentityClientCallContext.
21
+ * @category Metrics
22
+ */
23
+ export const METRIC_IDENTITY_CLIENT_FUNCTION_CALL = "identity_client_function_call";
24
+
25
+ /**
26
+ * Counter metric for failed function calls on an IdentityClient. Uses an IdentityClientCallContext.
27
+ * @category Metrics
28
+ */
29
+ export const METRIC_IDENTITY_CLIENT_FAILED_FUNCTION_CALL = "identity_client_failed_function_call";
30
+
31
+ /**
32
+ * Counter metric for successful function calls on an IdentityClient. Uses an IdentityClientCallContext.
33
+ * @category Metrics
34
+ */
35
+ export const METRIC_IDENTITY_CLIENT_SUCCESSFUL_FUNCTION_CALL = "identity_client_successful_function_call";
36
+
37
+ /**
38
+ * Time-series metric for how long a function call takes on an Intent. Uses a IntentCallContext.
39
+ * @category Metrics
40
+ */
41
+ export const METRIC_INTENT_FUNCTION_CALL = "intent_function_call";
42
+
43
+ /**
44
+ * Counter metric for failed function calls on an Intent. Uses a IntentCallContext.
45
+ * @category Metrics
46
+ */
47
+ export const METRIC_INTENT_FAILED_FUNCTION_CALL = "intent_failed_function_call";
48
+
49
+ /**
50
+ * Counter metric for successful function calls on an Intent. Uses a IntentCallContext.
51
+ * @category Metrics
52
+ */
53
+ export const METRIC_INTENT_SUCCESSFUL_FUNCTION_CALL = "intent_successful_function_call";
@@ -0,0 +1,24 @@
1
+ import { MatrixClient } from "../MatrixClient";
2
+ import { Appservice } from "../appservice/Appservice";
3
+
4
+ /**
5
+ * Automatically accepts invites for rooms
6
+ * @category Mixins
7
+ */
8
+ export class AutojoinRoomsMixin {
9
+ public static setupOnClient(client: MatrixClient): void {
10
+ client.on("room.invite", (roomId: string, inviteEvent: any) => {
11
+ return client.joinRoom(roomId);
12
+ });
13
+ }
14
+
15
+ public static setupOnAppservice(appservice: Appservice, conditional: (inviteEvent: any) => boolean = null): void {
16
+ appservice.on("room.invite", (roomId: string, inviteEvent: any) => {
17
+ const isFromBot = appservice.botUserId === inviteEvent["sender"];
18
+ if (!isFromBot && conditional && !conditional(inviteEvent)) return;
19
+
20
+ const intent = appservice.getIntentForUserId(inviteEvent["state_key"]);
21
+ return intent.joinRoom(roomId);
22
+ });
23
+ }
24
+ }
@@ -0,0 +1,37 @@
1
+ import { MatrixClient } from "../MatrixClient";
2
+ import { Appservice } from "../appservice/Appservice";
3
+
4
+ /**
5
+ * Automatically tries to join upgraded rooms
6
+ * @category Mixins
7
+ */
8
+ export class AutojoinUpgradedRoomsMixin {
9
+ public static setupOnClient(client: MatrixClient): void {
10
+ client.on("room.archived", (roomId: string, tombstoneEvent: any) => {
11
+ if (!tombstoneEvent['content']) return;
12
+ if (!tombstoneEvent['sender']) return;
13
+ if (!tombstoneEvent['content']['replacement_room']) return;
14
+
15
+ const serverName = tombstoneEvent['sender'].split(':').splice(1).join(':');
16
+ return client.joinRoom(tombstoneEvent['content']['replacement_room'], [serverName]);
17
+ });
18
+ }
19
+
20
+ public static setupOnAppservice(appservice: Appservice): void {
21
+ appservice.on("room.archived", async (roomId: string, tombstoneEvent: any) => {
22
+ if (!tombstoneEvent['content']) return;
23
+ if (!tombstoneEvent['sender']) return;
24
+ if (!tombstoneEvent['content']['replacement_room']) return;
25
+
26
+ const newRoomId = tombstoneEvent['content']['replacement_room'];
27
+ const serverName = tombstoneEvent['sender'].split(':').splice(1).join(':');
28
+ const botClient = appservice.botIntent.underlyingClient;
29
+
30
+ await botClient.joinRoom(newRoomId, [serverName]);
31
+ const userIds = await botClient.getJoinedRoomMembers(roomId);
32
+ const joinUserIds = userIds.filter(u => u !== appservice.botUserId && appservice.isNamespacedUser(u));
33
+
34
+ return await Promise.all(joinUserIds.map(u => appservice.getIntentForUserId(u).joinRoom(newRoomId)));
35
+ });
36
+ }
37
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Response to a `/whoami` request.
3
+ * @category Models
4
+ */
5
+ export interface IWhoAmI {
6
+ user_id: string;
7
+ device_id?: string;
8
+ }
@@ -0,0 +1,144 @@
1
+ import { PowerLevelsEventContent } from "./events/PowerLevelsEvent";
2
+ import { CreateEventContent } from "./events/CreateEvent";
3
+
4
+ /**
5
+ * "private_chat" sets:
6
+ * - join_rules to `invite`
7
+ * - history_visibility to `shared`
8
+ * - guest_access to `can_join`
9
+ *
10
+ * "trusted_private_chat" sets:
11
+ * - join_rules to `invite`
12
+ * - history_visibility to `shared`
13
+ * - guest_access to `can_join`
14
+ * - All invitees are given the same power level as the room creator.
15
+ *
16
+ * "public_chat" sets:
17
+ * - join_rules to `public`
18
+ * - history_visibility to `shared`
19
+ * - guest_access to `forbidden`
20
+ * @category Models
21
+ */
22
+ export type RoomPreset = "private_chat" | "trusted_private_chat" | "public_chat";
23
+
24
+ /**
25
+ * "public" visibility indicates that the room will be shown in the published room list.
26
+ *
27
+ * "private" visibility indicates that the room will not be included in published room list.
28
+ * @category Models
29
+ */
30
+ export type RoomVisibility = "public" | "private";
31
+
32
+ /**
33
+ * The options available when creating a room.
34
+ * @category Models
35
+ */
36
+ export interface RoomCreateOptions {
37
+ /**
38
+ * Extra keys, such as m.federate, to be added to the content of the m.room.create event.
39
+ * The server will overwrite the following keys: `creator`, `room_version`.
40
+ * Future versions of the specification may allow the server to overwrite other keys.
41
+ */
42
+ creation_content?: Omit<CreateEventContent, "creator">;
43
+
44
+ /**
45
+ * A list of state events to set in the new room.
46
+ * This allows the user to override the default state events set in the new room.
47
+ * The expected format of the state events are an object with `type`, `state_key` and `content` keys set.
48
+ * Takes precedence over events set by `preset`, but gets overridden by `name` and `topic` keys.
49
+ */
50
+ initial_state?: {
51
+ /**
52
+ * The content of the event.
53
+ */
54
+ content: any;
55
+
56
+ /**
57
+ * The state_key of the state event. Defaults to an empty string.
58
+ */
59
+ state_key?: string;
60
+
61
+ /**
62
+ * The type of event to send.
63
+ */
64
+ type: string;
65
+ }[];
66
+
67
+ /**
68
+ * A list of user IDs to invite to the room. This will tell the server to invite everyone in the list to the newly created room.
69
+ */
70
+ invite?: string[];
71
+
72
+ invite_3pid?: {
73
+ /**
74
+ * The invitee’s third party identifier.
75
+ */
76
+ address: string;
77
+
78
+ /**
79
+ * An access token previously registered with the identity server.
80
+ * Servers can treat this as optional to distinguish between r0.5-compatible clients and this specification version.
81
+ */
82
+ id_access_token: string;
83
+
84
+ /**
85
+ * The hostname+port of the identity server which should be used for third party identifier lookups.
86
+ */
87
+ id_server: string;
88
+
89
+ /**
90
+ * The kind of address being passed in the address field, for example `email`.
91
+ */
92
+ medium: string;
93
+ }[];
94
+
95
+ /**
96
+ * This flag makes the server set the `is_direct` flag on the `m.room.member` events sent to the users in `invite` and `invite_3pid`.
97
+ */
98
+ is_direct?: boolean;
99
+
100
+ /**
101
+ * If this is included, an `m.room.name` event will be sent into the room to indicate the name of the room.
102
+ */
103
+ name?: string;
104
+
105
+ /**
106
+ * The power level content to override in the default power level event.
107
+ * This object is applied on top of the generated `m.room.power_levels` event content prior to it being sent to the room.
108
+ * Defaults to overriding nothing.
109
+ */
110
+ power_level_content_override?: PowerLevelsEventContent;
111
+
112
+ /**
113
+ * Convenience parameter for setting various default state events based on a preset.
114
+ *
115
+ * If unspecified, the server should use the `visibility` to determine which preset to use.
116
+ * A visbility of `public` equates to a preset of `public_chat` and `private` visibility equates to a preset of `private_chat`.
117
+ */
118
+ preset?: RoomPreset;
119
+
120
+ /**
121
+ * The desired room alias local part.
122
+ * If this is included, a room alias will be created and mapped to the newly created room.
123
+ * The alias will belong on the same homeserver which created the room.
124
+ */
125
+ room_alias_name?: string;
126
+
127
+ /**
128
+ * The room version to set for the room.
129
+ * If not provided, the homeserver is to use its configured default.
130
+ * If provided, the homeserver will return a `400` error with the errcode `M_UNSUPPORTED_ROOM_VERSION` if it does not support the room version.
131
+ */
132
+ room_version?: string;
133
+
134
+ /**
135
+ * If this is included, an `m.room.topic` event will be sent into the room to indicate the topic for the room.
136
+ */
137
+ topic?: string;
138
+
139
+ /**
140
+ * Sets the visibility of the room
141
+ * Rooms default to private visibility if this key is not included.
142
+ */
143
+ visibility?: RoomVisibility;
144
+ }