@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,62 @@
1
+ /**
2
+ * A client specifically designed to interact with Pantalaimon instead of
3
+ * a Matrix homeserver. The key part of this is managing the access token
4
+ * and username/password for interacting with Pantalaimon.
5
+ *
6
+ * If the storage provider given claims to have an access token for
7
+ * this client, it will be used even if Pantalaimon considers it invalid.
8
+ *
9
+ * Expected usage:
10
+ * <code>
11
+ * const storage = new SimpleFsStorageProvider("storage/bot.json");
12
+ * const pantalaimon = new PantalaimonClient("http://localhost:8008", storage);
13
+ *
14
+ * // Note that the credentials will only be used if there is no available access token.
15
+ * const client = await pantalaimon.createClientWithCredentials("username", "password");
16
+ * </code>
17
+ */
18
+ import { IStorageProvider } from "./storage/IStorageProvider";
19
+ import { MatrixClient } from "./MatrixClient";
20
+ import { MatrixAuth } from "./MatrixAuth";
21
+
22
+ const ACCESS_TOKEN_STORAGE_KEY = "pantalaimon_access_token";
23
+
24
+ // TODO: Write a test for this (it's hard because of the many interactions with different parts)
25
+
26
+ /**
27
+ * Supporting functions for interacting with a Pantalaimon instance.
28
+ * @category Encryption
29
+ */
30
+ export class PantalaimonClient {
31
+ /**
32
+ * Creates a new PantalaimonClient class for interacting with Pantalaimon. The storage
33
+ * provider given will also be used in the client.
34
+ * @param {string} homeserverUrl The homeserver (Pantalaimon) URL to interact with.
35
+ * @param {IStorageProvider} storageProvider The storage provider to back the client with.
36
+ */
37
+ public constructor(private homeserverUrl: string, private storageProvider: IStorageProvider) {
38
+ // nothing to do
39
+ }
40
+
41
+ /**
42
+ * Authenticates and creates the Pantalaimon-capable client. The username and password given
43
+ * are only used if the storage provider does not reveal an access token.
44
+ * @param {string} username The username to log in with, if needed.
45
+ * @param {string} password The password to log in with, if needed.
46
+ * @returns {Promise<MatrixClient>} Resolves to a MatrixClient ready for interacting with Pantalaimon.
47
+ */
48
+ public async createClientWithCredentials(username: string, password: string): Promise<MatrixClient> {
49
+ const accessToken = await Promise.resolve(this.storageProvider.readValue(ACCESS_TOKEN_STORAGE_KEY));
50
+ if (accessToken) {
51
+ return new MatrixClient(this.homeserverUrl, accessToken, this.storageProvider);
52
+ }
53
+
54
+ const auth = new MatrixAuth(this.homeserverUrl);
55
+ const authedClient = await auth.passwordLogin(username, password);
56
+
57
+ await Promise.resolve(this.storageProvider.storeValue(ACCESS_TOKEN_STORAGE_KEY, authedClient.accessToken));
58
+
59
+ // We recreate the client to ensure we set it up with the right storage provider.
60
+ return new MatrixClient(this.homeserverUrl, authedClient.accessToken, this.storageProvider);
61
+ }
62
+ }
@@ -0,0 +1,482 @@
1
+ import { MatrixClient } from "./MatrixClient";
2
+ import { MatrixError } from "./models/MatrixError";
3
+
4
+ /**
5
+ * Information about a user on Synapse.
6
+ * @category Admin APIs
7
+ */
8
+ export interface SynapseUser {
9
+ /***
10
+ * The display name of the user, if set.
11
+ */
12
+ displayname?: string;
13
+
14
+ /**
15
+ * External IDs for the user.
16
+ */
17
+ external_ids?: {
18
+ auth_provider: string;
19
+ external_id: string;
20
+ }[];
21
+
22
+ /**
23
+ * A set of 3PIDs for the user.
24
+ */
25
+ threepids?: {
26
+ medium: string;
27
+ address: string;
28
+ }[];
29
+
30
+ /**
31
+ * The avatar URL (usually MXC URI) for the user, if set.
32
+ */
33
+ avatar_url?: string;
34
+
35
+ /**
36
+ * Whether or not the user is a Synapse administrator.
37
+ */
38
+ admin?: boolean;
39
+
40
+ /**
41
+ * Whether or not the user is deactivated.
42
+ */
43
+ deactivated?: boolean;
44
+ }
45
+
46
+ /**
47
+ * Added information to include when updating/creating a user.
48
+ * @category Admin APIs
49
+ */
50
+ export interface SynapseUserProperties extends SynapseUser {
51
+ /**
52
+ * The password for the user. Leave undefined to leave unchanged.
53
+ */
54
+ password?: string;
55
+ }
56
+
57
+ /**
58
+ * Information about a user on Synapse.
59
+ * @category Admin APIs
60
+ */
61
+ export interface SynapseUserListing {
62
+ /**
63
+ * User ID.
64
+ */
65
+ name: string;
66
+
67
+ /**
68
+ * Whether or not the user is a guest. 1 is true, 0 is false.
69
+ */
70
+ is_guest: number;
71
+
72
+ /**
73
+ * Whether or not the user is an admin. 1 is true, 0 is false.
74
+ */
75
+ admin: number;
76
+
77
+ /**
78
+ * Whether or not the user is deactivated. 1 is true, 0 is false.
79
+ */
80
+ deactivated: number;
81
+
82
+ /**
83
+ * The type of user, if relevant.
84
+ */
85
+ user_type: string | null;
86
+
87
+ /**
88
+ * The hash of the user's password, if relevant.
89
+ */
90
+ password_hash: string | null;
91
+
92
+ /**
93
+ * The display name of the user, if set.
94
+ */
95
+ displayname: string | null;
96
+
97
+ /**
98
+ * The avatar for the user, if set.
99
+ */
100
+ avatar_url: string | null;
101
+ }
102
+
103
+ /**
104
+ * A resulting list of users on Synapse.
105
+ * @category Admin APIs
106
+ */
107
+ export interface SynapseUserList {
108
+ /**
109
+ * A set of users matching the criteria.
110
+ */
111
+ users: SynapseUserListing[];
112
+
113
+ /**
114
+ * The token to use to get the next set of users.
115
+ */
116
+ next_token: string;
117
+
118
+ /**
119
+ * The total number of users on the Synapse instance.
120
+ */
121
+ total: number;
122
+ }
123
+
124
+ /**
125
+ * A registration token on Synapse
126
+ * @category Admin APIs
127
+ */
128
+ export interface SynapseRegistrationToken {
129
+ token: string;
130
+ uses_allowed: null | number;
131
+ pending: number;
132
+ completed: number;
133
+ expiry_time: null | number;
134
+ }
135
+
136
+ export interface SynapseRegistrationTokenUpdateOptions {
137
+ /**
138
+ * The integer number of times the token can be used to complete a registration before it becomes invalid.
139
+ * If null the token will have an unlimited number of uses.
140
+ * Default: unlimited uses.
141
+ */
142
+ uses_allowed?: number | null;
143
+
144
+ /**
145
+ * The latest time the token is valid. Given as the number of milliseconds since 1970-01-01 00:00:00 UTC (the start of the Unix epoch).
146
+ * If null the token will not expire.
147
+ * Default: token does not expire.
148
+ */
149
+ expiry_time?: number | null;
150
+
151
+ }
152
+
153
+ export interface SynapseRegistrationTokenOptions extends SynapseRegistrationTokenUpdateOptions {
154
+ /**
155
+ * The registration token. A string of no more than 64 characters that consists only of characters matched by the regex [A-Za-z0-9._~-].
156
+ * Default: randomly generated.
157
+ */
158
+ token?: string;
159
+
160
+ /**
161
+ * The length of the token randomly generated if token is not specified. Must be between 1 and 64 inclusive.
162
+ * Default: 16.
163
+ */
164
+ length?: number;
165
+ }
166
+
167
+ /**
168
+ * Information about a room on Synapse.
169
+ * @category Admin APIs
170
+ */
171
+ export interface SynapseRoomListing {
172
+ room_id: string;
173
+ name: string;
174
+ canonical_alias: string;
175
+ joined_members: number;
176
+ joined_local_members: number;
177
+ version: string;
178
+ creator: string;
179
+ encryption: string; // algorithm
180
+ federatable: boolean;
181
+ public: boolean;
182
+ join_rules: string;
183
+ guest_access: string;
184
+ history_visibility: string;
185
+ state_events: number;
186
+ }
187
+
188
+ /**
189
+ * A resulting list of rooms on Synapse.
190
+ * @category Admin APIs
191
+ */
192
+ export interface SynapseRoomList {
193
+ rooms: SynapseRoomListing[];
194
+
195
+ offset: string;
196
+ total_rooms: number;
197
+ next_batch: string;
198
+ prev_batch: string;
199
+ }
200
+
201
+ /**
202
+ * Available properties on a Synapse room listing to order by.
203
+ * @category Admin APIs
204
+ */
205
+ export enum SynapseRoomProperty {
206
+ Name = "name",
207
+ CanonicalAlias = "canonical_alias",
208
+ JoinedMembers = "joined_members",
209
+ JoinedLocalMembers = "joined_local_members",
210
+ Version = "version",
211
+ Creator = "creator",
212
+ Encryption = "encryption",
213
+ CanFederate = "federatable",
214
+ IsPublic = "public",
215
+ JoinRules = "join_rules",
216
+ GuestAccess = "guest_access",
217
+ HistoryVisibility = "history_visibility",
218
+ NumStateEvents = "state_events",
219
+ }
220
+
221
+ export interface SynapseListUserOptions {
222
+ /**
223
+ * Filters to only return users with user IDs that contain this value. This parameter is ignored when using the name parameter.
224
+ */
225
+ user_id?: string;
226
+
227
+ /**
228
+ * Filters to only return users with user ID localparts or displaynames that contain this value.
229
+ */
230
+ name?: string;
231
+
232
+ /**
233
+ * If false will exclude guest users. Defaults to true to include guest users.
234
+ */
235
+ guests?: boolean;
236
+
237
+ /**
238
+ * If true will include deactivated users. Defaults to false to exclude deactivated users.
239
+ */
240
+ deactivated?: boolean;
241
+
242
+ /**
243
+ * The method by which to sort the returned list of users. If the ordered field has duplicates, the
244
+ * second order is always by ascending name, which guarantees a stable ordering.
245
+ * **Caution**: The database only has indexes on the columns `name` and `creation_ts`. This means
246
+ * that if a different sort order is used, it can cause a large load on the database.
247
+ */
248
+ order_by?: "name" | "is_guest" | "admin" | "user_type" | "deactivated" | "shadow_banned" | "displayname" | "avatar_url" | "creation_ts";
249
+
250
+ /**
251
+ * The number of results to return at a time.
252
+ */
253
+ limit?: number;
254
+ }
255
+
256
+ /**
257
+ * Access to various administrative APIs specifically available in Synapse.
258
+ * @category Admin APIs
259
+ */
260
+ export class SynapseAdminApis {
261
+ constructor(private client: MatrixClient) {
262
+ }
263
+
264
+ /**
265
+ * Get information about a user. The client making the request must be an admin user.
266
+ * @param {string} userId The user ID to check.
267
+ * @returns {Promise<SynapseUser>} The resulting Synapse user record
268
+ */
269
+ public async getUser(userId: string): Promise<SynapseUser> {
270
+ return this.client.doRequest(
271
+ "GET", "/_synapse/admin/v2/users/" + encodeURIComponent(userId),
272
+ );
273
+ }
274
+
275
+ /**
276
+ * Create or update a given user on a Synapse server. The
277
+ * client making the request must be an admin user.
278
+ * @param {string} userId The user ID to check.
279
+ * @param {SynapseUserProperties} opts Options to set when creating or updating the user.
280
+ * @returns {Promise<SynapseUser>} The resulting Synapse user record
281
+ */
282
+ public async upsertUser(userId: string, opts: SynapseUserProperties = {}): Promise<SynapseUser> {
283
+ return this.client.doRequest(
284
+ "PUT", "/_synapse/admin/v2/users/" + encodeURIComponent(userId), undefined, opts,
285
+ );
286
+ }
287
+
288
+ /**
289
+ * Get a list of users registered with Synapse, optionally filtered by some criteria. The
290
+ * client making the request must be an admin user.
291
+ * @param {string} from The token to continue listing users from.
292
+ * @param {number} limit The maximum number of users to request.
293
+ * @param {string} name Optional localpart or display name filter for results.
294
+ * @param {boolean} guests Whether or not to include guest accounts. Default true.
295
+ * @param {boolean} deactivated Whether or not to include deactivated accounts. Default false.
296
+ * @returns {Promise<SynapseUserList>} A batch of user results.
297
+ */
298
+ public async listUsers(from?: string, limit?: number, name?: string, guests = true, deactivated = false): Promise<SynapseUserList> {
299
+ const qs = { guests, deactivated };
300
+ if (from) qs['from'] = from;
301
+ if (limit) qs['limit'] = limit;
302
+ if (name) qs['name'] = name;
303
+ return this.client.doRequest("GET", "/_synapse/admin/v2/users", qs);
304
+ }
305
+
306
+ /**
307
+ * Get a list of all users registered with Synapse, optionally filtered by some criteria. The
308
+ * client making the request must be an admin user.
309
+ *
310
+ * This method returns an async generator that can be used to filter results.
311
+ * @param options Options to pass to the user listing function
312
+ * @example
313
+ * for await (const user of synapseAdminApis.listAllUsers()) {
314
+ * if (user.name === '@alice:example.com') {
315
+ * return user;
316
+ * }
317
+ * }
318
+ */
319
+ public async* listAllUsers(options: SynapseListUserOptions = {}): AsyncGenerator<SynapseUserListing> {
320
+ let from: string | undefined = undefined;
321
+ let response: SynapseUserList;
322
+ do {
323
+ const qs = {
324
+ ...options,
325
+ ...(from && { from }),
326
+ };
327
+ response = await this.client.doRequest("GET", "/_synapse/admin/v2/users", qs);
328
+ for (const user of response.users) {
329
+ yield user;
330
+ }
331
+ from = response.next_token;
332
+ } while (from);
333
+ }
334
+
335
+ /**
336
+ * Determines if the given user is a Synapse server administrator for this homeserver. The
337
+ * client making the request must be an admin user themselves (check with `isSelfAdmin`)
338
+ * @param {string} userId The user ID to check.
339
+ * @returns {Promise<boolean>} Resolves to true if the user is an admin, false otherwise.
340
+ * Throws if there's an error.
341
+ */
342
+ public async isAdmin(userId: string): Promise<boolean> {
343
+ const response = await this.client.doRequest("GET", `/_synapse/admin/v1/users/${encodeURIComponent(userId)}/admin`);
344
+ return response['admin'] || false;
345
+ }
346
+
347
+ /**
348
+ * Determines if the current user is an admin for the Synapse homeserver.
349
+ * @returns {Promise<boolean>} Resolve to true if the user is an admin, false otherwise.
350
+ * Throws if there's an error.
351
+ */
352
+ public async isSelfAdmin(): Promise<boolean> {
353
+ try {
354
+ return await this.isAdmin(await this.client.getUserId());
355
+ } catch (err) {
356
+ if (err instanceof MatrixError && err.errcode === 'M_FORBIDDEN') {
357
+ return false;
358
+ }
359
+ throw err;
360
+ }
361
+ }
362
+
363
+ /**
364
+ * Lists the rooms on the server.
365
+ * @param {string} searchTerm A term to search for in the room names
366
+ * @param {string} from A previous batch token to search from
367
+ * @param {number} limit The maximum number of rooms to return
368
+ * @param {SynapseRoomProperty} orderBy A property of rooms to order by
369
+ * @param {boolean} reverseOrder True to reverse the orderBy direction.
370
+ * @returns {Promise<SynapseRoomList>} Resolves to the server's rooms, ordered and filtered.
371
+ */
372
+ public async listRooms(searchTerm?: string, from?: string, limit?: number, orderBy?: SynapseRoomProperty, reverseOrder = false): Promise<SynapseRoomList> {
373
+ const params = {};
374
+ if (from) params['from'] = from;
375
+ if (limit) params['limit'] = limit;
376
+ if (searchTerm) params['search_term'] = searchTerm;
377
+ if (orderBy) params['order_by'] = orderBy;
378
+ if (reverseOrder) {
379
+ params['dir'] = 'b';
380
+ } else {
381
+ params['dir'] = 'f';
382
+ }
383
+ return this.client.doRequest("GET", "/_synapse/admin/v1/rooms", params);
384
+ }
385
+
386
+ /**
387
+ * Gets a list of state events in a room.
388
+ * @param {string} roomId The room ID to get state for.
389
+ * @returns {Promise<any[]>} Resolves to the room's state events.
390
+ */
391
+ public async getRoomState(roomId: string): Promise<any[]> {
392
+ const r = await this.client.doRequest("GET", `/_synapse/admin/v1/rooms/${encodeURIComponent(roomId)}/state`);
393
+ return r?.['state'] || [];
394
+ }
395
+
396
+ /**
397
+ * Deletes a room from the server, purging all record of it.
398
+ * @param {string} roomId The room to delete.
399
+ * @returns {Promise} Resolves when complete.
400
+ */
401
+ public async deleteRoom(roomId: string): Promise<void> {
402
+ return this.client.doRequest("DELETE", `/_synapse/admin/v2/rooms/${encodeURIComponent(roomId)}`, {}, { purge: true });
403
+ }
404
+
405
+ /**
406
+ * Gets the status of all active deletion tasks, and all those completed in the last 24h, for the given room_id.
407
+ * @param {string} roomId The room ID to get deletion state for.
408
+ * @returns {Promise<any[]>} Resolves to the room's deletion status results.
409
+ */
410
+ public async getDeleteRoomState(roomId: string): Promise<any[]> {
411
+ const r = await this.client.doRequest("GET", `/_synapse/admin/v2/rooms/${encodeURIComponent(roomId)}/delete_status`);
412
+ return r?.['results'] || [];
413
+ }
414
+
415
+ /**
416
+ * List all registration tokens on the homeserver.
417
+ * @param valid If true, only valid tokens are returned.
418
+ * If false, only tokens that have expired or have had all uses exhausted are returned.
419
+ * If omitted, all tokens are returned regardless of validity.
420
+
421
+ * @returns An array of registration tokens.
422
+ */
423
+ public async listRegistrationTokens(valid?: boolean): Promise<SynapseRegistrationToken[]> {
424
+ const res = await this.client.doRequest("GET", `/_synapse/admin/v1/registration_tokens`, { valid });
425
+ return res.registration_tokens;
426
+ }
427
+
428
+ /**
429
+ * Get details about a single token.
430
+ * @param token The token to fetch.
431
+ * @returns A registration tokens, or null if not found.
432
+ */
433
+ public async getRegistrationToken(token: string): Promise<SynapseRegistrationToken | null> {
434
+ try {
435
+ return await this.client.doRequest("GET", `/_synapse/admin/v1/registration_tokens/${encodeURIComponent(token)}`);
436
+ } catch (e) {
437
+ if (e?.statusCode === 404) {
438
+ return null;
439
+ }
440
+ throw e;
441
+ }
442
+ }
443
+
444
+ /**
445
+ * Create a new registration token.
446
+ * @param options Options to pass to the request.
447
+ * @returns The newly created token.
448
+ */
449
+ public async createRegistrationToken(options: SynapseRegistrationTokenOptions = {}): Promise<SynapseRegistrationToken> {
450
+ return this.client.doRequest("POST", `/_synapse/admin/v1/registration_tokens/new`, undefined, options);
451
+ }
452
+
453
+ /**
454
+ * Update an existing registration token.
455
+ * @param token The token to update.
456
+ * @param options Options to pass to the request.
457
+ * @returns The newly created token.
458
+ */
459
+ public async updateRegistrationToken(token: string, options: SynapseRegistrationTokenUpdateOptions): Promise<SynapseRegistrationToken> {
460
+ return this.client.doRequest("PUT", `/_synapse/admin/v1/registration_tokens/${encodeURIComponent(token)}`, undefined, options);
461
+ }
462
+
463
+ /**
464
+ * Delete a registration token
465
+ * @param token The token to update.
466
+ * @returns A promise that resolves upon success.
467
+ */
468
+ public async deleteRegistrationToken(token: string): Promise<void> {
469
+ return this.client.doRequest("DELETE", `/_synapse/admin/v1/registration_tokens/${encodeURIComponent(token)}`, undefined, {});
470
+ }
471
+
472
+ /**
473
+ * Grants another user the highest power available to a local user who is in the room.
474
+ * If the user is not in the room, and it is not publicly joinable, then invite the user.
475
+ * @param roomId The room to make the user admin in.
476
+ * @param userId The user to make admin in the room. If undefined, it uses the authenticated user.
477
+ * @returns Resolves when complete.
478
+ */
479
+ public async makeRoomAdmin(roomId: string, userId?: string): Promise<void> {
480
+ return this.client.doRequest("POST", `/_synapse/admin/v1/rooms/${encodeURIComponent(roomId)}/make_room_admin`, {}, { user_id: userId });
481
+ }
482
+ }
@@ -0,0 +1,129 @@
1
+ import { MatrixClient } from "./MatrixClient";
2
+
3
+ /**
4
+ * A MatrixClient class that handles events in sync for the /sync loop, instead
5
+ * of trying to push its way through the /sync loop as fast as possible. It is
6
+ * intended that the consumer extend this class and override the onWhatever()
7
+ * functions it needs. All of the onWhatever() functions have a default behaviour
8
+ * of doing nothing.
9
+ */
10
+ export abstract class SynchronousMatrixClient extends MatrixClient {
11
+ /**
12
+ * Creates a new SynchronousMatrixClient. Note that this accepts a MatrixClient, though
13
+ * much of the class's properties are not brought over. Always convert your MatrixClient
14
+ * instance to a SynchronousMatrixClient as soon as possible to avoid diversion in which
15
+ * properties are proxied over.
16
+ * @param {MatrixClient} baseClient The client to wrap.
17
+ */
18
+ protected constructor(baseClient: MatrixClient) {
19
+ super(baseClient.homeserverUrl, baseClient.accessToken, baseClient.storageProvider);
20
+ }
21
+
22
+ private async handleEvent(emitType: string, arg1: any, arg2: any): Promise<any> {
23
+ if (emitType === 'account_data') await this.onAccountData(arg1);
24
+ if (emitType === 'room.account_data') await this.onRoomAccountData(arg1, arg2);
25
+ if (emitType === 'room.leave') await this.onRoomLeave(arg1, arg2);
26
+ if (emitType === 'room.invite') await this.onRoomInvite(arg1, arg2);
27
+ if (emitType === 'room.join') await this.onRoomJoin(arg1, arg2);
28
+ if (emitType === 'room.archived') await this.onRoomArchived(arg1, arg2);
29
+ if (emitType === 'room.upgraded') await this.onRoomUpgraded(arg1, arg2);
30
+ if (emitType === 'room.message') await this.onRoomMessage(arg1, arg2);
31
+ if (emitType === 'room.event') await this.onRoomEvent(arg1, arg2);
32
+
33
+ // Still emit though for easier support of plugins.
34
+ this.emit(emitType, arg1, arg2);
35
+ }
36
+
37
+ protected startSyncInternal(): Promise<any> {
38
+ return this.startSync(this.handleEvent.bind(this));
39
+ }
40
+
41
+ /**
42
+ * Handles the `account_data` event raised by the client.
43
+ * @param {any} event The account data event.
44
+ * @returns {Promise<any>} Resolves when complete.
45
+ */
46
+ protected onAccountData(event: any): Promise<any> {
47
+ return;
48
+ }
49
+
50
+ /**
51
+ * Handles the `room.account_data` event raised by the client.
52
+ * @param {string} roomId The Room ID the account data applies to.
53
+ * @param {any} event The room account data event.
54
+ * @returns {Promise<any>} Resolves when complete.
55
+ */
56
+ protected onRoomAccountData(roomId: string, event: any): Promise<any> {
57
+ return;
58
+ }
59
+
60
+ /**
61
+ * Handles the `room.leave` event raised by the client.
62
+ * @param {string} roomId The Room ID the event happened in.
63
+ * @param {any} event The event.
64
+ * @returns {Promise<any>} Resolves when complete.
65
+ */
66
+ protected onRoomLeave(roomId: string, event: any): Promise<any> {
67
+ return;
68
+ }
69
+
70
+ /**
71
+ * Handles the `room.invite` event raised by the client.
72
+ * @param {string} roomId The Room ID the event happened in.
73
+ * @param {any} event The event.
74
+ * @returns {Promise<any>} Resolves when complete.
75
+ */
76
+ protected onRoomInvite(roomId: string, event: any): Promise<any> {
77
+ return;
78
+ }
79
+
80
+ /**
81
+ * Handles the `room.join` event raised by the client.
82
+ * @param {string} roomId The Room ID the event happened in.
83
+ * @param {any} event The event.
84
+ * @returns {Promise<any>} Resolves when complete.
85
+ */
86
+ protected onRoomJoin(roomId: string, event: any): Promise<any> {
87
+ return;
88
+ }
89
+
90
+ /**
91
+ * Handles the `room.message` event raised by the client.
92
+ * @param {string} roomId The Room ID the event happened in.
93
+ * @param {any} event The event.
94
+ * @returns {Promise<any>} Resolves when complete.
95
+ */
96
+ protected onRoomMessage(roomId: string, event: any): Promise<any> {
97
+ return;
98
+ }
99
+
100
+ /**
101
+ * Handles the `room.archived` event raised by the client.
102
+ * @param {string} roomId The Room ID the event happened in.
103
+ * @param {any} event The event.
104
+ * @returns {Promise<any>} Resolves when complete.
105
+ */
106
+ protected onRoomArchived(roomId: string, event: any): Promise<any> {
107
+ return;
108
+ }
109
+
110
+ /**
111
+ * Handles the `room.upgraded` event raised by the client.
112
+ * @param {string} roomId The Room ID the event happened in.
113
+ * @param {any} event The event.
114
+ * @returns {Promise<any>} Resolves when complete.
115
+ */
116
+ protected onRoomUpgraded(roomId: string, event: any): Promise<any> {
117
+ return;
118
+ }
119
+
120
+ /**
121
+ * Handles the `room.event` event raised by the client.
122
+ * @param {string} roomId The Room ID the event happened in.
123
+ * @param {any} event The event.
124
+ * @returns {Promise<any>} Resolves when complete.
125
+ */
126
+ protected onRoomEvent(roomId: string, event: any): Promise<any> {
127
+ return;
128
+ }
129
+ }