@textrp/briij-js-sdk 41.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1104) hide show
  1. package/CHANGELOG.md +6464 -0
  2. package/LICENSE +177 -0
  3. package/README.md +477 -0
  4. package/lib/@types/AESEncryptedSecretStoragePayload.d.ts +14 -0
  5. package/lib/@types/AESEncryptedSecretStoragePayload.d.ts.map +1 -0
  6. package/lib/@types/AESEncryptedSecretStoragePayload.js +1 -0
  7. package/lib/@types/AESEncryptedSecretStoragePayload.js.map +1 -0
  8. package/lib/@types/IIdentityServerProvider.d.ts +9 -0
  9. package/lib/@types/IIdentityServerProvider.d.ts.map +1 -0
  10. package/lib/@types/IIdentityServerProvider.js +1 -0
  11. package/lib/@types/IIdentityServerProvider.js.map +1 -0
  12. package/lib/@types/PushRules.d.ts +140 -0
  13. package/lib/@types/PushRules.d.ts.map +1 -0
  14. package/lib/@types/PushRules.js +94 -0
  15. package/lib/@types/PushRules.js.map +1 -0
  16. package/lib/@types/another-json.d.js +0 -0
  17. package/lib/@types/another-json.d.js.map +1 -0
  18. package/lib/@types/auth.d.ts +213 -0
  19. package/lib/@types/auth.d.ts.map +1 -0
  20. package/lib/@types/auth.js +107 -0
  21. package/lib/@types/auth.js.map +1 -0
  22. package/lib/@types/beacon.d.ts +106 -0
  23. package/lib/@types/beacon.d.ts.map +1 -0
  24. package/lib/@types/beacon.js +119 -0
  25. package/lib/@types/beacon.js.map +1 -0
  26. package/lib/@types/common.d.ts +10 -0
  27. package/lib/@types/common.d.ts.map +1 -0
  28. package/lib/@types/common.js +1 -0
  29. package/lib/@types/common.js.map +1 -0
  30. package/lib/@types/crypto.d.ts +46 -0
  31. package/lib/@types/crypto.d.ts.map +1 -0
  32. package/lib/@types/crypto.js +1 -0
  33. package/lib/@types/crypto.js.map +1 -0
  34. package/lib/@types/event.d.ts +356 -0
  35. package/lib/@types/event.d.ts.map +1 -0
  36. package/lib/@types/event.js +280 -0
  37. package/lib/@types/event.js.map +1 -0
  38. package/lib/@types/events.d.ts +92 -0
  39. package/lib/@types/events.d.ts.map +1 -0
  40. package/lib/@types/events.js +1 -0
  41. package/lib/@types/events.js.map +1 -0
  42. package/lib/@types/extensible_events.d.ts +98 -0
  43. package/lib/@types/extensible_events.d.ts.map +1 -0
  44. package/lib/@types/extensible_events.js +116 -0
  45. package/lib/@types/extensible_events.js.map +1 -0
  46. package/lib/@types/global.d.js +18 -0
  47. package/lib/@types/global.d.js.map +1 -0
  48. package/lib/@types/local_notifications.d.ts +4 -0
  49. package/lib/@types/local_notifications.d.ts.map +1 -0
  50. package/lib/@types/local_notifications.js +1 -0
  51. package/lib/@types/local_notifications.js.map +1 -0
  52. package/lib/@types/location.d.ts +60 -0
  53. package/lib/@types/location.d.ts.map +1 -0
  54. package/lib/@types/location.js +66 -0
  55. package/lib/@types/location.js.map +1 -0
  56. package/lib/@types/matrix-sdk-crypto-wasm.d.js +1 -0
  57. package/lib/@types/matrix-sdk-crypto-wasm.d.js.map +1 -0
  58. package/lib/@types/media.d.ts +220 -0
  59. package/lib/@types/media.d.ts.map +1 -0
  60. package/lib/@types/media.js +1 -0
  61. package/lib/@types/media.js.map +1 -0
  62. package/lib/@types/membership.d.ts +41 -0
  63. package/lib/@types/membership.d.ts.map +1 -0
  64. package/lib/@types/membership.js +58 -0
  65. package/lib/@types/membership.js.map +1 -0
  66. package/lib/@types/partials.d.ts +72 -0
  67. package/lib/@types/partials.d.ts.map +1 -0
  68. package/lib/@types/partials.js +71 -0
  69. package/lib/@types/partials.js.map +1 -0
  70. package/lib/@types/polls.d.ts +89 -0
  71. package/lib/@types/polls.d.ts.map +1 -0
  72. package/lib/@types/polls.js +86 -0
  73. package/lib/@types/polls.js.map +1 -0
  74. package/lib/@types/read_receipts.d.ts +36 -0
  75. package/lib/@types/read_receipts.d.ts.map +1 -0
  76. package/lib/@types/read_receipts.js +27 -0
  77. package/lib/@types/read_receipts.js.map +1 -0
  78. package/lib/@types/registration.d.ts +85 -0
  79. package/lib/@types/registration.d.ts.map +1 -0
  80. package/lib/@types/registration.js +1 -0
  81. package/lib/@types/registration.js.map +1 -0
  82. package/lib/@types/requests.d.ts +267 -0
  83. package/lib/@types/requests.d.ts.map +1 -0
  84. package/lib/@types/requests.js +42 -0
  85. package/lib/@types/requests.js.map +1 -0
  86. package/lib/@types/search.d.ts +90 -0
  87. package/lib/@types/search.d.ts.map +1 -0
  88. package/lib/@types/search.js +30 -0
  89. package/lib/@types/search.js.map +1 -0
  90. package/lib/@types/signed.d.ts +9 -0
  91. package/lib/@types/signed.d.ts.map +1 -0
  92. package/lib/@types/signed.js +1 -0
  93. package/lib/@types/signed.js.map +1 -0
  94. package/lib/@types/spaces.d.ts +16 -0
  95. package/lib/@types/spaces.d.ts.map +1 -0
  96. package/lib/@types/spaces.js +1 -0
  97. package/lib/@types/spaces.js.map +1 -0
  98. package/lib/@types/state_events.d.ts +121 -0
  99. package/lib/@types/state_events.d.ts.map +1 -0
  100. package/lib/@types/state_events.js +1 -0
  101. package/lib/@types/state_events.js.map +1 -0
  102. package/lib/@types/synapse.d.ts +19 -0
  103. package/lib/@types/synapse.d.ts.map +1 -0
  104. package/lib/@types/synapse.js +1 -0
  105. package/lib/@types/synapse.js.map +1 -0
  106. package/lib/@types/sync.d.ts +8 -0
  107. package/lib/@types/sync.d.ts.map +1 -0
  108. package/lib/@types/sync.js +25 -0
  109. package/lib/@types/sync.js.map +1 -0
  110. package/lib/@types/threepids.d.ts +12 -0
  111. package/lib/@types/threepids.d.ts.map +1 -0
  112. package/lib/@types/threepids.js +24 -0
  113. package/lib/@types/threepids.js.map +1 -0
  114. package/lib/@types/topic.d.ts +55 -0
  115. package/lib/@types/topic.d.ts.map +1 -0
  116. package/lib/@types/topic.js +62 -0
  117. package/lib/@types/topic.js.map +1 -0
  118. package/lib/@types/uia.d.ts +8 -0
  119. package/lib/@types/uia.d.ts.map +1 -0
  120. package/lib/@types/uia.js +1 -0
  121. package/lib/@types/uia.js.map +1 -0
  122. package/lib/NamespacedValue.d.ts +32 -0
  123. package/lib/NamespacedValue.d.ts.map +1 -0
  124. package/lib/NamespacedValue.js +113 -0
  125. package/lib/NamespacedValue.js.map +1 -0
  126. package/lib/ReEmitter.d.ts +15 -0
  127. package/lib/ReEmitter.d.ts.map +1 -0
  128. package/lib/ReEmitter.js +87 -0
  129. package/lib/ReEmitter.js.map +1 -0
  130. package/lib/ToDeviceMessageQueue.d.ts +30 -0
  131. package/lib/ToDeviceMessageQueue.d.ts.map +1 -0
  132. package/lib/ToDeviceMessageQueue.js +135 -0
  133. package/lib/ToDeviceMessageQueue.js.map +1 -0
  134. package/lib/autodiscovery.d.ts +136 -0
  135. package/lib/autodiscovery.d.ts.map +1 -0
  136. package/lib/autodiscovery.js +464 -0
  137. package/lib/autodiscovery.js.map +1 -0
  138. package/lib/base64.d.ts +25 -0
  139. package/lib/base64.d.ts.map +1 -0
  140. package/lib/base64.js +95 -0
  141. package/lib/base64.js.map +1 -0
  142. package/lib/briij.d.ts +116 -0
  143. package/lib/briij.d.ts.map +1 -0
  144. package/lib/briij.js +145 -0
  145. package/lib/briij.js.map +1 -0
  146. package/lib/browser-index.d.ts +8 -0
  147. package/lib/browser-index.d.ts.map +1 -0
  148. package/lib/browser-index.js +35 -0
  149. package/lib/browser-index.js.map +1 -0
  150. package/lib/client.d.ts +3493 -0
  151. package/lib/client.d.ts.map +1 -0
  152. package/lib/client.js +7482 -0
  153. package/lib/client.js.map +1 -0
  154. package/lib/common-crypto/CryptoBackend.d.ts +234 -0
  155. package/lib/common-crypto/CryptoBackend.d.ts.map +1 -0
  156. package/lib/common-crypto/CryptoBackend.js +69 -0
  157. package/lib/common-crypto/CryptoBackend.js.map +1 -0
  158. package/lib/common-crypto/key-passphrase.d.ts +14 -0
  159. package/lib/common-crypto/key-passphrase.d.ts.map +1 -0
  160. package/lib/common-crypto/key-passphrase.js +33 -0
  161. package/lib/common-crypto/key-passphrase.js.map +1 -0
  162. package/lib/content-helpers.d.ts +90 -0
  163. package/lib/content-helpers.d.ts.map +1 -0
  164. package/lib/content-helpers.js +262 -0
  165. package/lib/content-helpers.js.map +1 -0
  166. package/lib/content-repo.d.ts +25 -0
  167. package/lib/content-repo.d.ts.map +1 -0
  168. package/lib/content-repo.js +109 -0
  169. package/lib/content-repo.js.map +1 -0
  170. package/lib/crypto/store/base.d.ts +301 -0
  171. package/lib/crypto/store/base.d.ts.map +1 -0
  172. package/lib/crypto/store/base.js +145 -0
  173. package/lib/crypto/store/base.js.map +1 -0
  174. package/lib/crypto/store/indexeddb-crypto-store-backend.d.ts +94 -0
  175. package/lib/crypto/store/indexeddb-crypto-store-backend.d.ts.map +1 -0
  176. package/lib/crypto/store/indexeddb-crypto-store-backend.js +604 -0
  177. package/lib/crypto/store/indexeddb-crypto-store-backend.js.map +1 -0
  178. package/lib/crypto/store/indexeddb-crypto-store.d.ts +251 -0
  179. package/lib/crypto/store/indexeddb-crypto-store.d.ts.map +1 -0
  180. package/lib/crypto/store/indexeddb-crypto-store.js +477 -0
  181. package/lib/crypto/store/indexeddb-crypto-store.js.map +1 -0
  182. package/lib/crypto/store/localStorage-crypto-store.d.ts +102 -0
  183. package/lib/crypto/store/localStorage-crypto-store.d.ts.map +1 -0
  184. package/lib/crypto/store/localStorage-crypto-store.js +374 -0
  185. package/lib/crypto/store/localStorage-crypto-store.js.map +1 -0
  186. package/lib/crypto/store/memory-crypto-store.d.ts +117 -0
  187. package/lib/crypto/store/memory-crypto-store.d.ts.map +1 -0
  188. package/lib/crypto/store/memory-crypto-store.js +311 -0
  189. package/lib/crypto/store/memory-crypto-store.js.map +1 -0
  190. package/lib/crypto-api/CryptoEvent.d.ts +120 -0
  191. package/lib/crypto-api/CryptoEvent.d.ts.map +1 -0
  192. package/lib/crypto-api/CryptoEvent.js +137 -0
  193. package/lib/crypto-api/CryptoEvent.js.map +1 -0
  194. package/lib/crypto-api/CryptoEventHandlerMap.d.ts +26 -0
  195. package/lib/crypto-api/CryptoEventHandlerMap.d.ts.map +1 -0
  196. package/lib/crypto-api/CryptoEventHandlerMap.js +1 -0
  197. package/lib/crypto-api/CryptoEventHandlerMap.js.map +1 -0
  198. package/lib/crypto-api/index.d.ts +1160 -0
  199. package/lib/crypto-api/index.d.ts.map +1 -0
  200. package/lib/crypto-api/index.js +410 -0
  201. package/lib/crypto-api/index.js.map +1 -0
  202. package/lib/crypto-api/key-passphrase.d.ts +11 -0
  203. package/lib/crypto-api/key-passphrase.d.ts.map +1 -0
  204. package/lib/crypto-api/key-passphrase.js +51 -0
  205. package/lib/crypto-api/key-passphrase.js.map +1 -0
  206. package/lib/crypto-api/keybackup.d.ts +87 -0
  207. package/lib/crypto-api/keybackup.d.ts.map +1 -0
  208. package/lib/crypto-api/keybackup.js +1 -0
  209. package/lib/crypto-api/keybackup.js.map +1 -0
  210. package/lib/crypto-api/recovery-key.d.ts +11 -0
  211. package/lib/crypto-api/recovery-key.d.ts.map +1 -0
  212. package/lib/crypto-api/recovery-key.js +65 -0
  213. package/lib/crypto-api/recovery-key.js.map +1 -0
  214. package/lib/crypto-api/verification.d.ts +315 -0
  215. package/lib/crypto-api/verification.d.ts.map +1 -0
  216. package/lib/crypto-api/verification.js +130 -0
  217. package/lib/crypto-api/verification.js.map +1 -0
  218. package/lib/digest.d.ts +10 -0
  219. package/lib/digest.d.ts.map +1 -0
  220. package/lib/digest.js +40 -0
  221. package/lib/digest.js.map +1 -0
  222. package/lib/embedded.d.ts +182 -0
  223. package/lib/embedded.d.ts.map +1 -0
  224. package/lib/embedded.js +746 -0
  225. package/lib/embedded.js.map +1 -0
  226. package/lib/errors.d.ts +38 -0
  227. package/lib/errors.d.ts.map +1 -0
  228. package/lib/errors.js +73 -0
  229. package/lib/errors.js.map +1 -0
  230. package/lib/event-mapper.d.ts +9 -0
  231. package/lib/event-mapper.d.ts.map +1 -0
  232. package/lib/event-mapper.js +74 -0
  233. package/lib/event-mapper.js.map +1 -0
  234. package/lib/extensible_events_v1/ExtensibleEvent.d.ts +38 -0
  235. package/lib/extensible_events_v1/ExtensibleEvent.d.ts.map +1 -0
  236. package/lib/extensible_events_v1/ExtensibleEvent.js +57 -0
  237. package/lib/extensible_events_v1/ExtensibleEvent.js.map +1 -0
  238. package/lib/extensible_events_v1/InvalidEventError.d.ts +7 -0
  239. package/lib/extensible_events_v1/InvalidEventError.d.ts.map +1 -0
  240. package/lib/extensible_events_v1/InvalidEventError.js +25 -0
  241. package/lib/extensible_events_v1/InvalidEventError.js.map +1 -0
  242. package/lib/extensible_events_v1/MessageEvent.d.ts +44 -0
  243. package/lib/extensible_events_v1/MessageEvent.d.ts.map +1 -0
  244. package/lib/extensible_events_v1/MessageEvent.js +134 -0
  245. package/lib/extensible_events_v1/MessageEvent.js.map +1 -0
  246. package/lib/extensible_events_v1/PollEndEvent.d.ts +33 -0
  247. package/lib/extensible_events_v1/PollEndEvent.d.ts.map +1 -0
  248. package/lib/extensible_events_v1/PollEndEvent.js +88 -0
  249. package/lib/extensible_events_v1/PollEndEvent.js.map +1 -0
  250. package/lib/extensible_events_v1/PollResponseEvent.d.ts +49 -0
  251. package/lib/extensible_events_v1/PollResponseEvent.d.ts.map +1 -0
  252. package/lib/extensible_events_v1/PollResponseEvent.js +135 -0
  253. package/lib/extensible_events_v1/PollResponseEvent.js.map +1 -0
  254. package/lib/extensible_events_v1/PollStartEvent.d.ts +71 -0
  255. package/lib/extensible_events_v1/PollStartEvent.d.ts.map +1 -0
  256. package/lib/extensible_events_v1/PollStartEvent.js +185 -0
  257. package/lib/extensible_events_v1/PollStartEvent.js.map +1 -0
  258. package/lib/extensible_events_v1/utilities.d.ts +14 -0
  259. package/lib/extensible_events_v1/utilities.d.ts.map +1 -0
  260. package/lib/extensible_events_v1/utilities.js +34 -0
  261. package/lib/extensible_events_v1/utilities.js.map +1 -0
  262. package/lib/feature.d.ts +20 -0
  263. package/lib/feature.d.ts.map +1 -0
  264. package/lib/feature.js +89 -0
  265. package/lib/feature.js.map +1 -0
  266. package/lib/filter-component.d.ts +64 -0
  267. package/lib/filter-component.d.ts.map +1 -0
  268. package/lib/filter-component.js +170 -0
  269. package/lib/filter-component.js.map +1 -0
  270. package/lib/filter.d.ts +97 -0
  271. package/lib/filter.d.ts.map +1 -0
  272. package/lib/filter.js +207 -0
  273. package/lib/filter.js.map +1 -0
  274. package/lib/http-api/errors.d.ts +117 -0
  275. package/lib/http-api/errors.d.ts.map +1 -0
  276. package/lib/http-api/errors.js +245 -0
  277. package/lib/http-api/errors.js.map +1 -0
  278. package/lib/http-api/fetch.d.ts +80 -0
  279. package/lib/http-api/fetch.d.ts.map +1 -0
  280. package/lib/http-api/fetch.js +332 -0
  281. package/lib/http-api/fetch.js.map +1 -0
  282. package/lib/http-api/index.d.ts +33 -0
  283. package/lib/http-api/index.d.ts.map +1 -0
  284. package/lib/http-api/index.js +178 -0
  285. package/lib/http-api/index.js.map +1 -0
  286. package/lib/http-api/interface.d.ts +186 -0
  287. package/lib/http-api/interface.d.ts.map +1 -0
  288. package/lib/http-api/interface.js +39 -0
  289. package/lib/http-api/interface.js.map +1 -0
  290. package/lib/http-api/method.d.ts +10 -0
  291. package/lib/http-api/method.d.ts.map +1 -0
  292. package/lib/http-api/method.js +27 -0
  293. package/lib/http-api/method.js.map +1 -0
  294. package/lib/http-api/prefix.d.ts +31 -0
  295. package/lib/http-api/prefix.d.ts.map +1 -0
  296. package/lib/http-api/prefix.js +50 -0
  297. package/lib/http-api/prefix.js.map +1 -0
  298. package/lib/http-api/refresh.d.ts +53 -0
  299. package/lib/http-api/refresh.d.ts.map +1 -0
  300. package/lib/http-api/refresh.js +174 -0
  301. package/lib/http-api/refresh.js.map +1 -0
  302. package/lib/http-api/utils.d.ts +37 -0
  303. package/lib/http-api/utils.d.ts.map +1 -0
  304. package/lib/http-api/utils.js +182 -0
  305. package/lib/http-api/utils.js.map +1 -0
  306. package/lib/index.d.ts +4 -0
  307. package/lib/index.d.ts.map +1 -0
  308. package/lib/index.js +24 -0
  309. package/lib/index.js.map +1 -0
  310. package/lib/indexeddb-helpers.d.ts +10 -0
  311. package/lib/indexeddb-helpers.d.ts.map +1 -0
  312. package/lib/indexeddb-helpers.js +51 -0
  313. package/lib/indexeddb-helpers.js.map +1 -0
  314. package/lib/indexeddb-worker.d.ts +7 -0
  315. package/lib/indexeddb-worker.d.ts.map +1 -0
  316. package/lib/indexeddb-worker.js +25 -0
  317. package/lib/indexeddb-worker.js.map +1 -0
  318. package/lib/interactive-auth.d.ts +341 -0
  319. package/lib/interactive-auth.d.ts.map +1 -0
  320. package/lib/interactive-auth.js +563 -0
  321. package/lib/interactive-auth.js.map +1 -0
  322. package/lib/logger.d.ts +124 -0
  323. package/lib/logger.d.ts.map +1 -0
  324. package/lib/logger.js +230 -0
  325. package/lib/logger.js.map +1 -0
  326. package/lib/matrixrtc/CallMembership.d.ts +154 -0
  327. package/lib/matrixrtc/CallMembership.d.ts.map +1 -0
  328. package/lib/matrixrtc/CallMembership.js +469 -0
  329. package/lib/matrixrtc/CallMembership.js.map +1 -0
  330. package/lib/matrixrtc/EncryptionManager.d.ts +44 -0
  331. package/lib/matrixrtc/EncryptionManager.d.ts.map +1 -0
  332. package/lib/matrixrtc/EncryptionManager.js +13 -0
  333. package/lib/matrixrtc/EncryptionManager.js.map +1 -0
  334. package/lib/matrixrtc/IKeyTransport.d.ts +37 -0
  335. package/lib/matrixrtc/IKeyTransport.d.ts.map +1 -0
  336. package/lib/matrixrtc/IKeyTransport.js +27 -0
  337. package/lib/matrixrtc/IKeyTransport.js.map +1 -0
  338. package/lib/matrixrtc/IMembershipManager.d.ts +94 -0
  339. package/lib/matrixrtc/IMembershipManager.d.ts.map +1 -0
  340. package/lib/matrixrtc/IMembershipManager.js +40 -0
  341. package/lib/matrixrtc/IMembershipManager.js.map +1 -0
  342. package/lib/matrixrtc/LivekitTransport.d.ts +23 -0
  343. package/lib/matrixrtc/LivekitTransport.d.ts.map +1 -0
  344. package/lib/matrixrtc/LivekitTransport.js +29 -0
  345. package/lib/matrixrtc/LivekitTransport.js.map +1 -0
  346. package/lib/matrixrtc/MatrixRTCSession.d.ts +343 -0
  347. package/lib/matrixrtc/MatrixRTCSession.d.ts.map +1 -0
  348. package/lib/matrixrtc/MatrixRTCSession.js +623 -0
  349. package/lib/matrixrtc/MatrixRTCSession.js.map +1 -0
  350. package/lib/matrixrtc/MatrixRTCSessionManager.d.ts +46 -0
  351. package/lib/matrixrtc/MatrixRTCSessionManager.d.ts.map +1 -0
  352. package/lib/matrixrtc/MatrixRTCSessionManager.js +149 -0
  353. package/lib/matrixrtc/MatrixRTCSessionManager.js.map +1 -0
  354. package/lib/matrixrtc/MembershipManager.d.ts +210 -0
  355. package/lib/matrixrtc/MembershipManager.d.ts.map +1 -0
  356. package/lib/matrixrtc/MembershipManager.js +977 -0
  357. package/lib/matrixrtc/MembershipManager.js.map +1 -0
  358. package/lib/matrixrtc/MembershipManagerActionScheduler.d.ts +59 -0
  359. package/lib/matrixrtc/MembershipManagerActionScheduler.d.ts.map +1 -0
  360. package/lib/matrixrtc/MembershipManagerActionScheduler.js +125 -0
  361. package/lib/matrixrtc/MembershipManagerActionScheduler.js.map +1 -0
  362. package/lib/matrixrtc/RTCEncryptionManager.d.ts +110 -0
  363. package/lib/matrixrtc/RTCEncryptionManager.d.ts.map +1 -0
  364. package/lib/matrixrtc/RTCEncryptionManager.js +376 -0
  365. package/lib/matrixrtc/RTCEncryptionManager.js.map +1 -0
  366. package/lib/matrixrtc/ToDeviceKeyTransport.d.ts +30 -0
  367. package/lib/matrixrtc/ToDeviceKeyTransport.d.ts.map +1 -0
  368. package/lib/matrixrtc/ToDeviceKeyTransport.js +164 -0
  369. package/lib/matrixrtc/ToDeviceKeyTransport.js.map +1 -0
  370. package/lib/matrixrtc/index.d.ts +9 -0
  371. package/lib/matrixrtc/index.d.ts.map +1 -0
  372. package/lib/matrixrtc/index.js +23 -0
  373. package/lib/matrixrtc/index.js.map +1 -0
  374. package/lib/matrixrtc/membershipData/common.d.ts +8 -0
  375. package/lib/matrixrtc/membershipData/common.d.ts.map +1 -0
  376. package/lib/matrixrtc/membershipData/common.js +26 -0
  377. package/lib/matrixrtc/membershipData/common.js.map +1 -0
  378. package/lib/matrixrtc/membershipData/index.d.ts +4 -0
  379. package/lib/matrixrtc/membershipData/index.d.ts.map +1 -0
  380. package/lib/matrixrtc/membershipData/index.js +20 -0
  381. package/lib/matrixrtc/membershipData/index.js.map +1 -0
  382. package/lib/matrixrtc/membershipData/rtc.d.ts +33 -0
  383. package/lib/matrixrtc/membershipData/rtc.d.ts.map +1 -0
  384. package/lib/matrixrtc/membershipData/rtc.js +137 -0
  385. package/lib/matrixrtc/membershipData/rtc.js.map +1 -0
  386. package/lib/matrixrtc/membershipData/session.d.ts +77 -0
  387. package/lib/matrixrtc/membershipData/session.d.ts.map +1 -0
  388. package/lib/matrixrtc/membershipData/session.js +62 -0
  389. package/lib/matrixrtc/membershipData/session.js.map +1 -0
  390. package/lib/matrixrtc/types.d.ts +169 -0
  391. package/lib/matrixrtc/types.d.ts.map +1 -0
  392. package/lib/matrixrtc/types.js +117 -0
  393. package/lib/matrixrtc/types.js.map +1 -0
  394. package/lib/matrixrtc/utils.d.ts +27 -0
  395. package/lib/matrixrtc/utils.d.ts.map +1 -0
  396. package/lib/matrixrtc/utils.js +72 -0
  397. package/lib/matrixrtc/utils.js.map +1 -0
  398. package/lib/models/MSC3089Branch.d.ts +98 -0
  399. package/lib/models/MSC3089Branch.d.ts.map +1 -0
  400. package/lib/models/MSC3089Branch.js +240 -0
  401. package/lib/models/MSC3089Branch.js.map +1 -0
  402. package/lib/models/MSC3089TreeSpace.d.ts +166 -0
  403. package/lib/models/MSC3089TreeSpace.d.ts.map +1 -0
  404. package/lib/models/MSC3089TreeSpace.js +521 -0
  405. package/lib/models/MSC3089TreeSpace.js.map +1 -0
  406. package/lib/models/ToDeviceMessage.d.ts +17 -0
  407. package/lib/models/ToDeviceMessage.d.ts.map +1 -0
  408. package/lib/models/ToDeviceMessage.js +1 -0
  409. package/lib/models/ToDeviceMessage.js.map +1 -0
  410. package/lib/models/beacon.d.ts +52 -0
  411. package/lib/models/beacon.d.ts.map +1 -0
  412. package/lib/models/beacon.js +174 -0
  413. package/lib/models/beacon.js.map +1 -0
  414. package/lib/models/compare-event-ordering.d.ts +24 -0
  415. package/lib/models/compare-event-ordering.d.ts.map +1 -0
  416. package/lib/models/compare-event-ordering.js +120 -0
  417. package/lib/models/compare-event-ordering.js.map +1 -0
  418. package/lib/models/device.d.ts +45 -0
  419. package/lib/models/device.d.ts.map +1 -0
  420. package/lib/models/device.js +77 -0
  421. package/lib/models/device.js.map +1 -0
  422. package/lib/models/event-context.d.ts +62 -0
  423. package/lib/models/event-context.d.ts.map +1 -0
  424. package/lib/models/event-context.js +113 -0
  425. package/lib/models/event-context.js.map +1 -0
  426. package/lib/models/event-status.d.ts +19 -0
  427. package/lib/models/event-status.d.ts.map +1 -0
  428. package/lib/models/event-status.js +36 -0
  429. package/lib/models/event-status.js.map +1 -0
  430. package/lib/models/event-timeline-set.d.ts +308 -0
  431. package/lib/models/event-timeline-set.d.ts.map +1 -0
  432. package/lib/models/event-timeline-set.js +805 -0
  433. package/lib/models/event-timeline-set.js.map +1 -0
  434. package/lib/models/event-timeline.d.ts +224 -0
  435. package/lib/models/event-timeline.d.ts.map +1 -0
  436. package/lib/models/event-timeline.js +434 -0
  437. package/lib/models/event-timeline.js.map +1 -0
  438. package/lib/models/event.d.ts +844 -0
  439. package/lib/models/event.d.ts.map +1 -0
  440. package/lib/models/event.js +1600 -0
  441. package/lib/models/event.js.map +1 -0
  442. package/lib/models/invites-ignorer-types.d.ts +27 -0
  443. package/lib/models/invites-ignorer-types.d.ts.map +1 -0
  444. package/lib/models/invites-ignorer-types.js +56 -0
  445. package/lib/models/invites-ignorer-types.js.map +1 -0
  446. package/lib/models/invites-ignorer.d.ts +112 -0
  447. package/lib/models/invites-ignorer.d.ts.map +1 -0
  448. package/lib/models/invites-ignorer.js +357 -0
  449. package/lib/models/invites-ignorer.js.map +1 -0
  450. package/lib/models/poll.d.ts +67 -0
  451. package/lib/models/poll.d.ts.map +1 -0
  452. package/lib/models/poll.js +241 -0
  453. package/lib/models/poll.js.map +1 -0
  454. package/lib/models/profile-keys.d.ts +17 -0
  455. package/lib/models/profile-keys.d.ts.map +1 -0
  456. package/lib/models/profile-keys.js +34 -0
  457. package/lib/models/profile-keys.js.map +1 -0
  458. package/lib/models/read-receipt.d.ts +115 -0
  459. package/lib/models/read-receipt.d.ts.map +1 -0
  460. package/lib/models/read-receipt.js +366 -0
  461. package/lib/models/read-receipt.js.map +1 -0
  462. package/lib/models/related-relations.d.ts +11 -0
  463. package/lib/models/related-relations.d.ts.map +1 -0
  464. package/lib/models/related-relations.js +33 -0
  465. package/lib/models/related-relations.js.map +1 -0
  466. package/lib/models/relations-container.d.ts +44 -0
  467. package/lib/models/relations-container.d.ts.map +1 -0
  468. package/lib/models/relations-container.js +132 -0
  469. package/lib/models/relations-container.js.map +1 -0
  470. package/lib/models/relations.d.ts +123 -0
  471. package/lib/models/relations.d.ts.map +1 -0
  472. package/lib/models/relations.js +378 -0
  473. package/lib/models/relations.js.map +1 -0
  474. package/lib/models/room-member.d.ts +221 -0
  475. package/lib/models/room-member.d.ts.map +1 -0
  476. package/lib/models/room-member.js +376 -0
  477. package/lib/models/room-member.js.map +1 -0
  478. package/lib/models/room-receipts.d.ts +39 -0
  479. package/lib/models/room-receipts.d.ts.map +1 -0
  480. package/lib/models/room-receipts.js +392 -0
  481. package/lib/models/room-receipts.js.map +1 -0
  482. package/lib/models/room-state.d.ts +463 -0
  483. package/lib/models/room-state.d.ts.map +1 -0
  484. package/lib/models/room-state.js +1066 -0
  485. package/lib/models/room-state.js.map +1 -0
  486. package/lib/models/room-sticky-events.d.ts +110 -0
  487. package/lib/models/room-sticky-events.d.ts.map +1 -0
  488. package/lib/models/room-sticky-events.js +353 -0
  489. package/lib/models/room-sticky-events.js.map +1 -0
  490. package/lib/models/room-summary.d.ts +59 -0
  491. package/lib/models/room-summary.d.ts.map +1 -0
  492. package/lib/models/room-summary.js +39 -0
  493. package/lib/models/room-summary.js.map +1 -0
  494. package/lib/models/room.d.ts +1285 -0
  495. package/lib/models/room.d.ts.map +1 -0
  496. package/lib/models/room.js +3548 -0
  497. package/lib/models/room.js.map +1 -0
  498. package/lib/models/search-result.d.ts +20 -0
  499. package/lib/models/search-result.d.ts.map +1 -0
  500. package/lib/models/search-result.js +52 -0
  501. package/lib/models/search-result.js.map +1 -0
  502. package/lib/models/thread.d.ts +245 -0
  503. package/lib/models/thread.d.ts.map +1 -0
  504. package/lib/models/thread.js +866 -0
  505. package/lib/models/thread.js.map +1 -0
  506. package/lib/models/typed-event-emitter.d.ts +157 -0
  507. package/lib/models/typed-event-emitter.d.ts.map +1 -0
  508. package/lib/models/typed-event-emitter.js +227 -0
  509. package/lib/models/typed-event-emitter.js.map +1 -0
  510. package/lib/models/user.d.ts +195 -0
  511. package/lib/models/user.d.ts.map +1 -0
  512. package/lib/models/user.js +218 -0
  513. package/lib/models/user.js.map +1 -0
  514. package/lib/oidc/authorize.d.ts +93 -0
  515. package/lib/oidc/authorize.d.ts.map +1 -0
  516. package/lib/oidc/authorize.js +282 -0
  517. package/lib/oidc/authorize.js.map +1 -0
  518. package/lib/oidc/discovery.d.ts +22 -0
  519. package/lib/oidc/discovery.d.ts.map +1 -0
  520. package/lib/oidc/discovery.js +78 -0
  521. package/lib/oidc/discovery.js.map +1 -0
  522. package/lib/oidc/error.d.ts +18 -0
  523. package/lib/oidc/error.d.ts.map +1 -0
  524. package/lib/oidc/error.js +35 -0
  525. package/lib/oidc/error.js.map +1 -0
  526. package/lib/oidc/index.d.ts +16 -0
  527. package/lib/oidc/index.d.ts.map +1 -0
  528. package/lib/oidc/index.js +29 -0
  529. package/lib/oidc/index.js.map +1 -0
  530. package/lib/oidc/register.d.ts +70 -0
  531. package/lib/oidc/register.d.ts.map +1 -0
  532. package/lib/oidc/register.js +135 -0
  533. package/lib/oidc/register.js.map +1 -0
  534. package/lib/oidc/tokenRefresher.d.ts +91 -0
  535. package/lib/oidc/tokenRefresher.d.ts.map +1 -0
  536. package/lib/oidc/tokenRefresher.js +187 -0
  537. package/lib/oidc/tokenRefresher.js.map +1 -0
  538. package/lib/oidc/validate.d.ts +78 -0
  539. package/lib/oidc/validate.d.ts.map +1 -0
  540. package/lib/oidc/validate.js +181 -0
  541. package/lib/oidc/validate.js.map +1 -0
  542. package/lib/pushprocessor.d.ts +140 -0
  543. package/lib/pushprocessor.d.ts.map +1 -0
  544. package/lib/pushprocessor.js +702 -0
  545. package/lib/pushprocessor.js.map +1 -0
  546. package/lib/randomstring.d.ts +32 -0
  547. package/lib/randomstring.d.ts.map +1 -0
  548. package/lib/randomstring.js +97 -0
  549. package/lib/randomstring.js.map +1 -0
  550. package/lib/realtime-callbacks.d.ts +18 -0
  551. package/lib/realtime-callbacks.d.ts.map +1 -0
  552. package/lib/realtime-callbacks.js +177 -0
  553. package/lib/realtime-callbacks.js.map +1 -0
  554. package/lib/receipt-accumulator.d.ts +51 -0
  555. package/lib/receipt-accumulator.d.ts.map +1 -0
  556. package/lib/receipt-accumulator.js +164 -0
  557. package/lib/receipt-accumulator.js.map +1 -0
  558. package/lib/rendezvous/MSC4108SignInWithQR.d.ts +112 -0
  559. package/lib/rendezvous/MSC4108SignInWithQR.d.ts.map +1 -0
  560. package/lib/rendezvous/MSC4108SignInWithQR.js +389 -0
  561. package/lib/rendezvous/MSC4108SignInWithQR.js.map +1 -0
  562. package/lib/rendezvous/RendezvousChannel.d.ts +27 -0
  563. package/lib/rendezvous/RendezvousChannel.d.ts.map +1 -0
  564. package/lib/rendezvous/RendezvousChannel.js +1 -0
  565. package/lib/rendezvous/RendezvousChannel.js.map +1 -0
  566. package/lib/rendezvous/RendezvousCode.d.ts +9 -0
  567. package/lib/rendezvous/RendezvousCode.d.ts.map +1 -0
  568. package/lib/rendezvous/RendezvousCode.js +1 -0
  569. package/lib/rendezvous/RendezvousCode.js.map +1 -0
  570. package/lib/rendezvous/RendezvousError.d.ts +6 -0
  571. package/lib/rendezvous/RendezvousError.d.ts.map +1 -0
  572. package/lib/rendezvous/RendezvousError.js +23 -0
  573. package/lib/rendezvous/RendezvousError.js.map +1 -0
  574. package/lib/rendezvous/RendezvousFailureReason.d.ts +31 -0
  575. package/lib/rendezvous/RendezvousFailureReason.d.ts.map +1 -0
  576. package/lib/rendezvous/RendezvousFailureReason.js +47 -0
  577. package/lib/rendezvous/RendezvousFailureReason.js.map +1 -0
  578. package/lib/rendezvous/RendezvousIntent.d.ts +5 -0
  579. package/lib/rendezvous/RendezvousIntent.d.ts.map +1 -0
  580. package/lib/rendezvous/RendezvousIntent.js +22 -0
  581. package/lib/rendezvous/RendezvousIntent.js.map +1 -0
  582. package/lib/rendezvous/RendezvousTransport.d.ts +36 -0
  583. package/lib/rendezvous/RendezvousTransport.d.ts.map +1 -0
  584. package/lib/rendezvous/RendezvousTransport.js +1 -0
  585. package/lib/rendezvous/RendezvousTransport.js.map +1 -0
  586. package/lib/rendezvous/channels/MSC4108SecureChannel.d.ts +58 -0
  587. package/lib/rendezvous/channels/MSC4108SecureChannel.d.ts.map +1 -0
  588. package/lib/rendezvous/channels/MSC4108SecureChannel.js +246 -0
  589. package/lib/rendezvous/channels/MSC4108SecureChannel.js.map +1 -0
  590. package/lib/rendezvous/channels/index.d.ts +2 -0
  591. package/lib/rendezvous/channels/index.d.ts.map +1 -0
  592. package/lib/rendezvous/channels/index.js +18 -0
  593. package/lib/rendezvous/channels/index.js.map +1 -0
  594. package/lib/rendezvous/index.d.ts +10 -0
  595. package/lib/rendezvous/index.d.ts.map +1 -0
  596. package/lib/rendezvous/index.js +23 -0
  597. package/lib/rendezvous/index.js.map +1 -0
  598. package/lib/rendezvous/transports/MSC4108RendezvousSession.d.ts +61 -0
  599. package/lib/rendezvous/transports/MSC4108RendezvousSession.d.ts.map +1 -0
  600. package/lib/rendezvous/transports/MSC4108RendezvousSession.js +254 -0
  601. package/lib/rendezvous/transports/MSC4108RendezvousSession.js.map +1 -0
  602. package/lib/rendezvous/transports/index.d.ts +2 -0
  603. package/lib/rendezvous/transports/index.d.ts.map +1 -0
  604. package/lib/rendezvous/transports/index.js +18 -0
  605. package/lib/rendezvous/transports/index.js.map +1 -0
  606. package/lib/room-hierarchy.d.ts +35 -0
  607. package/lib/room-hierarchy.d.ts.map +1 -0
  608. package/lib/room-hierarchy.js +136 -0
  609. package/lib/room-hierarchy.js.map +1 -0
  610. package/lib/rust-crypto/CrossSigningIdentity.d.ts +35 -0
  611. package/lib/rust-crypto/CrossSigningIdentity.d.ts.map +1 -0
  612. package/lib/rust-crypto/CrossSigningIdentity.js +163 -0
  613. package/lib/rust-crypto/CrossSigningIdentity.js.map +1 -0
  614. package/lib/rust-crypto/DehydratedDeviceManager.d.ts +118 -0
  615. package/lib/rust-crypto/DehydratedDeviceManager.d.ts.map +1 -0
  616. package/lib/rust-crypto/DehydratedDeviceManager.js +361 -0
  617. package/lib/rust-crypto/DehydratedDeviceManager.js.map +1 -0
  618. package/lib/rust-crypto/KeyClaimManager.d.ts +33 -0
  619. package/lib/rust-crypto/KeyClaimManager.d.ts.map +1 -0
  620. package/lib/rust-crypto/KeyClaimManager.js +82 -0
  621. package/lib/rust-crypto/KeyClaimManager.js.map +1 -0
  622. package/lib/rust-crypto/OutgoingRequestProcessor.d.ts +36 -0
  623. package/lib/rust-crypto/OutgoingRequestProcessor.d.ts.map +1 -0
  624. package/lib/rust-crypto/OutgoingRequestProcessor.js +194 -0
  625. package/lib/rust-crypto/OutgoingRequestProcessor.js.map +1 -0
  626. package/lib/rust-crypto/OutgoingRequestsManager.d.ts +47 -0
  627. package/lib/rust-crypto/OutgoingRequestsManager.d.ts.map +1 -0
  628. package/lib/rust-crypto/OutgoingRequestsManager.js +175 -0
  629. package/lib/rust-crypto/OutgoingRequestsManager.js.map +1 -0
  630. package/lib/rust-crypto/PerSessionKeyBackupDownloader.d.ts +120 -0
  631. package/lib/rust-crypto/PerSessionKeyBackupDownloader.d.ts.map +1 -0
  632. package/lib/rust-crypto/PerSessionKeyBackupDownloader.js +469 -0
  633. package/lib/rust-crypto/PerSessionKeyBackupDownloader.js.map +1 -0
  634. package/lib/rust-crypto/RoomEncryptor.d.ts +100 -0
  635. package/lib/rust-crypto/RoomEncryptor.d.ts.map +1 -0
  636. package/lib/rust-crypto/RoomEncryptor.js +308 -0
  637. package/lib/rust-crypto/RoomEncryptor.js.map +1 -0
  638. package/lib/rust-crypto/backup.d.ts +278 -0
  639. package/lib/rust-crypto/backup.d.ts.map +1 -0
  640. package/lib/rust-crypto/backup.js +898 -0
  641. package/lib/rust-crypto/backup.js.map +1 -0
  642. package/lib/rust-crypto/constants.d.ts +3 -0
  643. package/lib/rust-crypto/constants.d.ts.map +1 -0
  644. package/lib/rust-crypto/constants.js +19 -0
  645. package/lib/rust-crypto/constants.js.map +1 -0
  646. package/lib/rust-crypto/device-converter.d.ts +28 -0
  647. package/lib/rust-crypto/device-converter.d.ts.map +1 -0
  648. package/lib/rust-crypto/device-converter.js +123 -0
  649. package/lib/rust-crypto/device-converter.js.map +1 -0
  650. package/lib/rust-crypto/index.d.ts +65 -0
  651. package/lib/rust-crypto/index.d.ts.map +1 -0
  652. package/lib/rust-crypto/index.js +149 -0
  653. package/lib/rust-crypto/index.js.map +1 -0
  654. package/lib/rust-crypto/libolm_migration.d.ts +81 -0
  655. package/lib/rust-crypto/libolm_migration.d.ts.map +1 -0
  656. package/lib/rust-crypto/libolm_migration.js +456 -0
  657. package/lib/rust-crypto/libolm_migration.js.map +1 -0
  658. package/lib/rust-crypto/rust-crypto.d.ts +576 -0
  659. package/lib/rust-crypto/rust-crypto.d.ts.map +1 -0
  660. package/lib/rust-crypto/rust-crypto.js +2324 -0
  661. package/lib/rust-crypto/rust-crypto.js.map +1 -0
  662. package/lib/rust-crypto/secret-storage.d.ts +22 -0
  663. package/lib/rust-crypto/secret-storage.d.ts.map +1 -0
  664. package/lib/rust-crypto/secret-storage.js +63 -0
  665. package/lib/rust-crypto/secret-storage.js.map +1 -0
  666. package/lib/rust-crypto/verification.d.ts +321 -0
  667. package/lib/rust-crypto/verification.d.ts.map +1 -0
  668. package/lib/rust-crypto/verification.js +817 -0
  669. package/lib/rust-crypto/verification.js.map +1 -0
  670. package/lib/scheduler.d.ts +132 -0
  671. package/lib/scheduler.d.ts.map +1 -0
  672. package/lib/scheduler.js +259 -0
  673. package/lib/scheduler.js.map +1 -0
  674. package/lib/secret-storage.d.ts +383 -0
  675. package/lib/secret-storage.d.ts.map +1 -0
  676. package/lib/secret-storage.js +487 -0
  677. package/lib/secret-storage.js.map +1 -0
  678. package/lib/serverCapabilities.d.ts +78 -0
  679. package/lib/serverCapabilities.d.ts.map +1 -0
  680. package/lib/serverCapabilities.js +104 -0
  681. package/lib/serverCapabilities.js.map +1 -0
  682. package/lib/service-types.d.ts +5 -0
  683. package/lib/service-types.d.ts.map +1 -0
  684. package/lib/service-types.js +23 -0
  685. package/lib/service-types.js.map +1 -0
  686. package/lib/sliding-sync-sdk.d.ts +107 -0
  687. package/lib/sliding-sync-sdk.d.ts.map +1 -0
  688. package/lib/sliding-sync-sdk.js +892 -0
  689. package/lib/sliding-sync-sdk.js.map +1 -0
  690. package/lib/sliding-sync.d.ts +306 -0
  691. package/lib/sliding-sync.d.ts.map +1 -0
  692. package/lib/sliding-sync.js +585 -0
  693. package/lib/sliding-sync.js.map +1 -0
  694. package/lib/store/index.d.ts +201 -0
  695. package/lib/store/index.d.ts.map +1 -0
  696. package/lib/store/index.js +1 -0
  697. package/lib/store/index.js.map +1 -0
  698. package/lib/store/indexeddb-backend.d.ts +24 -0
  699. package/lib/store/indexeddb-backend.d.ts.map +1 -0
  700. package/lib/store/indexeddb-backend.js +1 -0
  701. package/lib/store/indexeddb-backend.js.map +1 -0
  702. package/lib/store/indexeddb-local-backend.d.ts +129 -0
  703. package/lib/store/indexeddb-local-backend.d.ts.map +1 -0
  704. package/lib/store/indexeddb-local-backend.js +599 -0
  705. package/lib/store/indexeddb-local-backend.js.map +1 -0
  706. package/lib/store/indexeddb-remote-backend.d.ts +79 -0
  707. package/lib/store/indexeddb-remote-backend.d.ts.map +1 -0
  708. package/lib/store/indexeddb-remote-backend.js +209 -0
  709. package/lib/store/indexeddb-remote-backend.js.map +1 -0
  710. package/lib/store/indexeddb-store-worker.d.ts +35 -0
  711. package/lib/store/indexeddb-store-worker.d.ts.map +1 -0
  712. package/lib/store/indexeddb-store-worker.js +146 -0
  713. package/lib/store/indexeddb-store-worker.js.map +1 -0
  714. package/lib/store/indexeddb.d.ts +142 -0
  715. package/lib/store/indexeddb.d.ts.map +1 -0
  716. package/lib/store/indexeddb.js +347 -0
  717. package/lib/store/indexeddb.js.map +1 -0
  718. package/lib/store/local-storage-events-emitter.d.ts +30 -0
  719. package/lib/store/local-storage-events-emitter.d.ts.map +1 -0
  720. package/lib/store/local-storage-events-emitter.js +37 -0
  721. package/lib/store/local-storage-events-emitter.js.map +1 -0
  722. package/lib/store/memory.d.ts +209 -0
  723. package/lib/store/memory.d.ts.map +1 -0
  724. package/lib/store/memory.js +432 -0
  725. package/lib/store/memory.js.map +1 -0
  726. package/lib/store/stub.d.ts +161 -0
  727. package/lib/store/stub.d.ts.map +1 -0
  728. package/lib/store/stub.js +268 -0
  729. package/lib/store/stub.js.map +1 -0
  730. package/lib/sync-accumulator.d.ts +207 -0
  731. package/lib/sync-accumulator.d.ts.map +1 -0
  732. package/lib/sync-accumulator.js +588 -0
  733. package/lib/sync-accumulator.js.map +1 -0
  734. package/lib/sync.d.ts +273 -0
  735. package/lib/sync.d.ts.map +1 -0
  736. package/lib/sync.js +1764 -0
  737. package/lib/sync.js.map +1 -0
  738. package/lib/testing.d.ts +98 -0
  739. package/lib/testing.d.ts.map +1 -0
  740. package/lib/testing.js +205 -0
  741. package/lib/testing.js.map +1 -0
  742. package/lib/thread-utils.d.ts +10 -0
  743. package/lib/thread-utils.d.ts.map +1 -0
  744. package/lib/thread-utils.js +31 -0
  745. package/lib/thread-utils.js.map +1 -0
  746. package/lib/timeline-window.d.ts +168 -0
  747. package/lib/timeline-window.d.ts.map +1 -0
  748. package/lib/timeline-window.js +494 -0
  749. package/lib/timeline-window.js.map +1 -0
  750. package/lib/types.d.ts +33 -0
  751. package/lib/types.d.ts.map +1 -0
  752. package/lib/types.js +52 -0
  753. package/lib/types.js.map +1 -0
  754. package/lib/utils/decryptAESSecretStorageItem.d.ts +12 -0
  755. package/lib/utils/decryptAESSecretStorageItem.d.ts.map +1 -0
  756. package/lib/utils/decryptAESSecretStorageItem.js +50 -0
  757. package/lib/utils/decryptAESSecretStorageItem.js.map +1 -0
  758. package/lib/utils/encryptAESSecretStorageItem.d.ts +16 -0
  759. package/lib/utils/encryptAESSecretStorageItem.d.ts.map +1 -0
  760. package/lib/utils/encryptAESSecretStorageItem.js +68 -0
  761. package/lib/utils/encryptAESSecretStorageItem.js.map +1 -0
  762. package/lib/utils/internal/deriveKeys.d.ts +10 -0
  763. package/lib/utils/internal/deriveKeys.d.ts.map +1 -0
  764. package/lib/utils/internal/deriveKeys.js +60 -0
  765. package/lib/utils/internal/deriveKeys.js.map +1 -0
  766. package/lib/utils/roomVersion.d.ts +13 -0
  767. package/lib/utils/roomVersion.d.ts.map +1 -0
  768. package/lib/utils/roomVersion.js +36 -0
  769. package/lib/utils/roomVersion.js.map +1 -0
  770. package/lib/utils.d.ts +270 -0
  771. package/lib/utils.d.ts.map +1 -0
  772. package/lib/utils.js +764 -0
  773. package/lib/utils.js.map +1 -0
  774. package/lib/version-support.d.ts +19 -0
  775. package/lib/version-support.d.ts.map +1 -0
  776. package/lib/version-support.js +37 -0
  777. package/lib/version-support.js.map +1 -0
  778. package/lib/webrtc/audioContext.d.ts +15 -0
  779. package/lib/webrtc/audioContext.d.ts.map +1 -0
  780. package/lib/webrtc/audioContext.js +46 -0
  781. package/lib/webrtc/audioContext.js.map +1 -0
  782. package/lib/webrtc/call.d.ts +560 -0
  783. package/lib/webrtc/call.d.ts.map +1 -0
  784. package/lib/webrtc/call.js +2596 -0
  785. package/lib/webrtc/call.js.map +1 -0
  786. package/lib/webrtc/callEventHandler.d.ts +37 -0
  787. package/lib/webrtc/callEventHandler.d.ts.map +1 -0
  788. package/lib/webrtc/callEventHandler.js +344 -0
  789. package/lib/webrtc/callEventHandler.js.map +1 -0
  790. package/lib/webrtc/callEventTypes.d.ts +79 -0
  791. package/lib/webrtc/callEventTypes.d.ts.map +1 -0
  792. package/lib/webrtc/callEventTypes.js +13 -0
  793. package/lib/webrtc/callEventTypes.js.map +1 -0
  794. package/lib/webrtc/callFeed.d.ts +128 -0
  795. package/lib/webrtc/callFeed.d.ts.map +1 -0
  796. package/lib/webrtc/callFeed.js +289 -0
  797. package/lib/webrtc/callFeed.js.map +1 -0
  798. package/lib/webrtc/groupCall.d.ts +319 -0
  799. package/lib/webrtc/groupCall.d.ts.map +1 -0
  800. package/lib/webrtc/groupCall.js +1334 -0
  801. package/lib/webrtc/groupCall.js.map +1 -0
  802. package/lib/webrtc/groupCallEventHandler.d.ts +31 -0
  803. package/lib/webrtc/groupCallEventHandler.d.ts.map +1 -0
  804. package/lib/webrtc/groupCallEventHandler.js +178 -0
  805. package/lib/webrtc/groupCallEventHandler.js.map +1 -0
  806. package/lib/webrtc/mediaHandler.d.ts +89 -0
  807. package/lib/webrtc/mediaHandler.d.ts.map +1 -0
  808. package/lib/webrtc/mediaHandler.js +454 -0
  809. package/lib/webrtc/mediaHandler.js.map +1 -0
  810. package/lib/webrtc/stats/callFeedStatsReporter.d.ts +8 -0
  811. package/lib/webrtc/stats/callFeedStatsReporter.d.ts.map +1 -0
  812. package/lib/webrtc/stats/callFeedStatsReporter.js +79 -0
  813. package/lib/webrtc/stats/callFeedStatsReporter.js.map +1 -0
  814. package/lib/webrtc/stats/callStatsReportGatherer.d.ts +25 -0
  815. package/lib/webrtc/stats/callStatsReportGatherer.d.ts.map +1 -0
  816. package/lib/webrtc/stats/callStatsReportGatherer.js +199 -0
  817. package/lib/webrtc/stats/callStatsReportGatherer.js.map +1 -0
  818. package/lib/webrtc/stats/callStatsReportSummary.d.ts +17 -0
  819. package/lib/webrtc/stats/callStatsReportSummary.d.ts.map +1 -0
  820. package/lib/webrtc/stats/callStatsReportSummary.js +1 -0
  821. package/lib/webrtc/stats/callStatsReportSummary.js.map +1 -0
  822. package/lib/webrtc/stats/connectionStats.d.ts +28 -0
  823. package/lib/webrtc/stats/connectionStats.d.ts.map +1 -0
  824. package/lib/webrtc/stats/connectionStats.js +26 -0
  825. package/lib/webrtc/stats/connectionStats.js.map +1 -0
  826. package/lib/webrtc/stats/connectionStatsBuilder.d.ts +5 -0
  827. package/lib/webrtc/stats/connectionStatsBuilder.d.ts.map +1 -0
  828. package/lib/webrtc/stats/connectionStatsBuilder.js +27 -0
  829. package/lib/webrtc/stats/connectionStatsBuilder.js.map +1 -0
  830. package/lib/webrtc/stats/connectionStatsReportBuilder.d.ts +7 -0
  831. package/lib/webrtc/stats/connectionStatsReportBuilder.d.ts.map +1 -0
  832. package/lib/webrtc/stats/connectionStatsReportBuilder.js +121 -0
  833. package/lib/webrtc/stats/connectionStatsReportBuilder.js.map +1 -0
  834. package/lib/webrtc/stats/groupCallStats.d.ts +22 -0
  835. package/lib/webrtc/stats/groupCallStats.d.ts.map +1 -0
  836. package/lib/webrtc/stats/groupCallStats.js +78 -0
  837. package/lib/webrtc/stats/groupCallStats.js.map +1 -0
  838. package/lib/webrtc/stats/media/mediaSsrcHandler.d.ts +10 -0
  839. package/lib/webrtc/stats/media/mediaSsrcHandler.d.ts.map +1 -0
  840. package/lib/webrtc/stats/media/mediaSsrcHandler.js +57 -0
  841. package/lib/webrtc/stats/media/mediaSsrcHandler.js.map +1 -0
  842. package/lib/webrtc/stats/media/mediaTrackHandler.d.ts +12 -0
  843. package/lib/webrtc/stats/media/mediaTrackHandler.d.ts.map +1 -0
  844. package/lib/webrtc/stats/media/mediaTrackHandler.js +58 -0
  845. package/lib/webrtc/stats/media/mediaTrackHandler.js.map +1 -0
  846. package/lib/webrtc/stats/media/mediaTrackStats.d.ts +86 -0
  847. package/lib/webrtc/stats/media/mediaTrackStats.d.ts.map +1 -0
  848. package/lib/webrtc/stats/media/mediaTrackStats.js +142 -0
  849. package/lib/webrtc/stats/media/mediaTrackStats.js.map +1 -0
  850. package/lib/webrtc/stats/media/mediaTrackStatsHandler.d.ts +22 -0
  851. package/lib/webrtc/stats/media/mediaTrackStatsHandler.d.ts.map +1 -0
  852. package/lib/webrtc/stats/media/mediaTrackStatsHandler.js +76 -0
  853. package/lib/webrtc/stats/media/mediaTrackStatsHandler.js.map +1 -0
  854. package/lib/webrtc/stats/statsReport.d.ts +99 -0
  855. package/lib/webrtc/stats/statsReport.d.ts.map +1 -0
  856. package/lib/webrtc/stats/statsReport.js +32 -0
  857. package/lib/webrtc/stats/statsReport.js.map +1 -0
  858. package/lib/webrtc/stats/statsReportEmitter.d.ts +15 -0
  859. package/lib/webrtc/stats/statsReportEmitter.d.ts.map +1 -0
  860. package/lib/webrtc/stats/statsReportEmitter.js +33 -0
  861. package/lib/webrtc/stats/statsReportEmitter.js.map +1 -0
  862. package/lib/webrtc/stats/summaryStatsReportGatherer.d.ts +16 -0
  863. package/lib/webrtc/stats/summaryStatsReportGatherer.d.ts.map +1 -0
  864. package/lib/webrtc/stats/summaryStatsReportGatherer.js +116 -0
  865. package/lib/webrtc/stats/summaryStatsReportGatherer.js.map +1 -0
  866. package/lib/webrtc/stats/trackStatsBuilder.d.ts +19 -0
  867. package/lib/webrtc/stats/trackStatsBuilder.d.ts.map +1 -0
  868. package/lib/webrtc/stats/trackStatsBuilder.js +168 -0
  869. package/lib/webrtc/stats/trackStatsBuilder.js.map +1 -0
  870. package/lib/webrtc/stats/transportStats.d.ts +11 -0
  871. package/lib/webrtc/stats/transportStats.d.ts.map +1 -0
  872. package/lib/webrtc/stats/transportStats.js +1 -0
  873. package/lib/webrtc/stats/transportStats.js.map +1 -0
  874. package/lib/webrtc/stats/transportStatsBuilder.d.ts +5 -0
  875. package/lib/webrtc/stats/transportStatsBuilder.d.ts.map +1 -0
  876. package/lib/webrtc/stats/transportStatsBuilder.js +34 -0
  877. package/lib/webrtc/stats/transportStatsBuilder.js.map +1 -0
  878. package/lib/webrtc/stats/valueFormatter.d.ts +4 -0
  879. package/lib/webrtc/stats/valueFormatter.d.ts.map +1 -0
  880. package/lib/webrtc/stats/valueFormatter.js +25 -0
  881. package/lib/webrtc/stats/valueFormatter.js.map +1 -0
  882. package/package.json +129 -0
  883. package/src/@types/AESEncryptedSecretStoragePayload.ts +29 -0
  884. package/src/@types/IIdentityServerProvider.ts +24 -0
  885. package/src/@types/PushRules.ts +208 -0
  886. package/src/@types/another-json.d.ts +19 -0
  887. package/src/@types/auth.ts +258 -0
  888. package/src/@types/beacon.ts +140 -0
  889. package/src/@types/common.ts +24 -0
  890. package/src/@types/crypto.ts +71 -0
  891. package/src/@types/event.ts +449 -0
  892. package/src/@types/events.ts +119 -0
  893. package/src/@types/extensible_events.ts +147 -0
  894. package/src/@types/global.d.ts +67 -0
  895. package/src/@types/local_notifications.ts +19 -0
  896. package/src/@types/location.ts +92 -0
  897. package/src/@types/matrix-sdk-crypto-wasm.d.ts +39 -0
  898. package/src/@types/media.ts +245 -0
  899. package/src/@types/membership.ts +57 -0
  900. package/src/@types/partials.ts +103 -0
  901. package/src/@types/polls.ts +120 -0
  902. package/src/@types/read_receipts.ts +61 -0
  903. package/src/@types/registration.ts +102 -0
  904. package/src/@types/requests.ts +346 -0
  905. package/src/@types/search.ts +119 -0
  906. package/src/@types/signed.ts +25 -0
  907. package/src/@types/spaces.ts +37 -0
  908. package/src/@types/state_events.ts +153 -0
  909. package/src/@types/synapse.ts +40 -0
  910. package/src/@types/sync.ts +27 -0
  911. package/src/@types/threepids.ts +29 -0
  912. package/src/@types/topic.ts +69 -0
  913. package/src/@types/uia.ts +24 -0
  914. package/src/NamespacedValue.ts +121 -0
  915. package/src/ReEmitter.ts +93 -0
  916. package/src/ToDeviceMessageQueue.ts +156 -0
  917. package/src/autodiscovery.ts +505 -0
  918. package/src/base64.ts +86 -0
  919. package/src/briij.ts +173 -0
  920. package/src/browser-index.ts +44 -0
  921. package/src/client.ts +9031 -0
  922. package/src/common-crypto/CryptoBackend.ts +295 -0
  923. package/src/common-crypto/README.md +4 -0
  924. package/src/common-crypto/key-passphrase.ts +43 -0
  925. package/src/content-helpers.ts +298 -0
  926. package/src/content-repo.ts +122 -0
  927. package/src/crypto/store/base.ts +388 -0
  928. package/src/crypto/store/indexeddb-crypto-store-backend.ts +655 -0
  929. package/src/crypto/store/indexeddb-crypto-store.ts +555 -0
  930. package/src/crypto/store/localStorage-crypto-store.ts +409 -0
  931. package/src/crypto/store/memory-crypto-store.ts +326 -0
  932. package/src/crypto-api/CryptoEvent.ts +152 -0
  933. package/src/crypto-api/CryptoEventHandlerMap.ts +42 -0
  934. package/src/crypto-api/index.ts +1362 -0
  935. package/src/crypto-api/key-passphrase.ts +58 -0
  936. package/src/crypto-api/keybackup.ts +114 -0
  937. package/src/crypto-api/recovery-key.ts +69 -0
  938. package/src/crypto-api/verification.ts +382 -0
  939. package/src/digest.ts +34 -0
  940. package/src/embedded.ts +865 -0
  941. package/src/errors.ts +87 -0
  942. package/src/event-mapper.ts +88 -0
  943. package/src/extensible_events_v1/ExtensibleEvent.ts +58 -0
  944. package/src/extensible_events_v1/InvalidEventError.ts +24 -0
  945. package/src/extensible_events_v1/MessageEvent.ts +143 -0
  946. package/src/extensible_events_v1/PollEndEvent.ts +97 -0
  947. package/src/extensible_events_v1/PollResponseEvent.ts +148 -0
  948. package/src/extensible_events_v1/PollStartEvent.ts +207 -0
  949. package/src/extensible_events_v1/utilities.ts +35 -0
  950. package/src/feature.ts +88 -0
  951. package/src/filter-component.ts +209 -0
  952. package/src/filter.ts +245 -0
  953. package/src/http-api/errors.ts +261 -0
  954. package/src/http-api/fetch.ts +377 -0
  955. package/src/http-api/index.ts +194 -0
  956. package/src/http-api/interface.ts +229 -0
  957. package/src/http-api/method.ts +25 -0
  958. package/src/http-api/prefix.ts +48 -0
  959. package/src/http-api/refresh.ts +167 -0
  960. package/src/http-api/utils.ts +217 -0
  961. package/src/index.ts +25 -0
  962. package/src/indexeddb-helpers.ts +50 -0
  963. package/src/indexeddb-worker.ts +24 -0
  964. package/src/interactive-auth.ts +700 -0
  965. package/src/logger.ts +279 -0
  966. package/src/matrixrtc/CallMembership.ts +438 -0
  967. package/src/matrixrtc/EncryptionManager.ts +54 -0
  968. package/src/matrixrtc/IKeyTransport.ts +63 -0
  969. package/src/matrixrtc/IMembershipManager.ts +120 -0
  970. package/src/matrixrtc/LivekitTransport.ts +46 -0
  971. package/src/matrixrtc/MatrixRTCSession.ts +934 -0
  972. package/src/matrixrtc/MatrixRTCSessionManager.ts +170 -0
  973. package/src/matrixrtc/MembershipManager.ts +1122 -0
  974. package/src/matrixrtc/MembershipManagerActionScheduler.ts +135 -0
  975. package/src/matrixrtc/RTCEncryptionManager.ts +459 -0
  976. package/src/matrixrtc/ToDeviceKeyTransport.ts +197 -0
  977. package/src/matrixrtc/index.ts +24 -0
  978. package/src/matrixrtc/membershipData/common.ts +27 -0
  979. package/src/matrixrtc/membershipData/index.ts +19 -0
  980. package/src/matrixrtc/membershipData/rtc.ts +156 -0
  981. package/src/matrixrtc/membershipData/session.ts +146 -0
  982. package/src/matrixrtc/types.ts +227 -0
  983. package/src/matrixrtc/utils.ts +71 -0
  984. package/src/models/MSC3089Branch.ts +272 -0
  985. package/src/models/MSC3089TreeSpace.ts +565 -0
  986. package/src/models/ToDeviceMessage.ts +38 -0
  987. package/src/models/beacon.ts +213 -0
  988. package/src/models/compare-event-ordering.ts +139 -0
  989. package/src/models/device.ts +85 -0
  990. package/src/models/event-context.ts +110 -0
  991. package/src/models/event-status.ts +39 -0
  992. package/src/models/event-timeline-set.ts +962 -0
  993. package/src/models/event-timeline.ts +461 -0
  994. package/src/models/event.ts +1819 -0
  995. package/src/models/invites-ignorer-types.ts +58 -0
  996. package/src/models/invites-ignorer.ts +341 -0
  997. package/src/models/poll.ts +285 -0
  998. package/src/models/profile-keys.ts +33 -0
  999. package/src/models/read-receipt.ts +422 -0
  1000. package/src/models/related-relations.ts +39 -0
  1001. package/src/models/relations-container.ts +149 -0
  1002. package/src/models/relations.ts +392 -0
  1003. package/src/models/room-member.ts +486 -0
  1004. package/src/models/room-receipts.ts +439 -0
  1005. package/src/models/room-state.ts +1230 -0
  1006. package/src/models/room-sticky-events.ts +383 -0
  1007. package/src/models/room-summary.ts +78 -0
  1008. package/src/models/room.ts +4067 -0
  1009. package/src/models/search-result.ts +57 -0
  1010. package/src/models/thread.ts +928 -0
  1011. package/src/models/typed-event-emitter.ts +246 -0
  1012. package/src/models/user.ts +302 -0
  1013. package/src/oidc/authorize.ts +279 -0
  1014. package/src/oidc/discovery.ts +67 -0
  1015. package/src/oidc/error.ts +33 -0
  1016. package/src/oidc/index.ts +33 -0
  1017. package/src/oidc/register.ts +163 -0
  1018. package/src/oidc/tokenRefresher.ts +184 -0
  1019. package/src/oidc/validate.ts +265 -0
  1020. package/src/pushprocessor.ts +856 -0
  1021. package/src/randomstring.ts +103 -0
  1022. package/src/realtime-callbacks.ts +191 -0
  1023. package/src/receipt-accumulator.ts +189 -0
  1024. package/src/rendezvous/MSC4108SignInWithQR.ts +443 -0
  1025. package/src/rendezvous/RendezvousChannel.ts +48 -0
  1026. package/src/rendezvous/RendezvousCode.ts +25 -0
  1027. package/src/rendezvous/RendezvousError.ts +26 -0
  1028. package/src/rendezvous/RendezvousFailureReason.ts +49 -0
  1029. package/src/rendezvous/RendezvousIntent.ts +20 -0
  1030. package/src/rendezvous/RendezvousTransport.ts +58 -0
  1031. package/src/rendezvous/channels/MSC4108SecureChannel.ts +270 -0
  1032. package/src/rendezvous/channels/index.ts +17 -0
  1033. package/src/rendezvous/index.ts +25 -0
  1034. package/src/rendezvous/transports/MSC4108RendezvousSession.ts +272 -0
  1035. package/src/rendezvous/transports/index.ts +17 -0
  1036. package/src/room-hierarchy.ts +152 -0
  1037. package/src/rust-crypto/CrossSigningIdentity.ts +195 -0
  1038. package/src/rust-crypto/DehydratedDeviceManager.ts +392 -0
  1039. package/src/rust-crypto/KeyClaimManager.ts +86 -0
  1040. package/src/rust-crypto/OutgoingRequestProcessor.ts +233 -0
  1041. package/src/rust-crypto/OutgoingRequestsManager.ts +170 -0
  1042. package/src/rust-crypto/PerSessionKeyBackupDownloader.ts +501 -0
  1043. package/src/rust-crypto/RoomEncryptor.ts +362 -0
  1044. package/src/rust-crypto/backup.ts +942 -0
  1045. package/src/rust-crypto/constants.ts +18 -0
  1046. package/src/rust-crypto/device-converter.ts +128 -0
  1047. package/src/rust-crypto/index.ts +251 -0
  1048. package/src/rust-crypto/libolm_migration.ts +532 -0
  1049. package/src/rust-crypto/rust-crypto.ts +2542 -0
  1050. package/src/rust-crypto/secret-storage.ts +60 -0
  1051. package/src/rust-crypto/verification.ts +833 -0
  1052. package/src/scheduler.ts +309 -0
  1053. package/src/secret-storage.ts +714 -0
  1054. package/src/serverCapabilities.ts +146 -0
  1055. package/src/service-types.ts +20 -0
  1056. package/src/sliding-sync-sdk.ts +1005 -0
  1057. package/src/sliding-sync.ts +674 -0
  1058. package/src/store/index.ts +261 -0
  1059. package/src/store/indexeddb-backend.ts +41 -0
  1060. package/src/store/indexeddb-local-backend.ts +610 -0
  1061. package/src/store/indexeddb-remote-backend.ts +212 -0
  1062. package/src/store/indexeddb-store-worker.ts +157 -0
  1063. package/src/store/indexeddb.ts +397 -0
  1064. package/src/store/local-storage-events-emitter.ts +46 -0
  1065. package/src/store/memory.ts +448 -0
  1066. package/src/store/stub.ts +280 -0
  1067. package/src/sync-accumulator.ts +779 -0
  1068. package/src/sync.ts +2020 -0
  1069. package/src/testing.ts +231 -0
  1070. package/src/thread-utils.ts +31 -0
  1071. package/src/timeline-window.ts +534 -0
  1072. package/src/types.ts +59 -0
  1073. package/src/utils/decryptAESSecretStorageItem.ts +54 -0
  1074. package/src/utils/encryptAESSecretStorageItem.ts +73 -0
  1075. package/src/utils/internal/deriveKeys.ts +63 -0
  1076. package/src/utils/roomVersion.ts +35 -0
  1077. package/src/utils.ts +775 -0
  1078. package/src/version-support.ts +50 -0
  1079. package/src/webrtc/audioContext.ts +44 -0
  1080. package/src/webrtc/call.ts +3061 -0
  1081. package/src/webrtc/callEventHandler.ts +425 -0
  1082. package/src/webrtc/callEventTypes.ts +101 -0
  1083. package/src/webrtc/callFeed.ts +364 -0
  1084. package/src/webrtc/groupCall.ts +1729 -0
  1085. package/src/webrtc/groupCallEventHandler.ts +234 -0
  1086. package/src/webrtc/mediaHandler.ts +501 -0
  1087. package/src/webrtc/stats/callFeedStatsReporter.ts +91 -0
  1088. package/src/webrtc/stats/callStatsReportGatherer.ts +219 -0
  1089. package/src/webrtc/stats/callStatsReportSummary.ts +30 -0
  1090. package/src/webrtc/stats/connectionStats.ts +47 -0
  1091. package/src/webrtc/stats/connectionStatsBuilder.ts +28 -0
  1092. package/src/webrtc/stats/connectionStatsReportBuilder.ts +140 -0
  1093. package/src/webrtc/stats/groupCallStats.ts +93 -0
  1094. package/src/webrtc/stats/media/mediaSsrcHandler.ts +57 -0
  1095. package/src/webrtc/stats/media/mediaTrackHandler.ts +70 -0
  1096. package/src/webrtc/stats/media/mediaTrackStats.ts +176 -0
  1097. package/src/webrtc/stats/media/mediaTrackStatsHandler.ts +90 -0
  1098. package/src/webrtc/stats/statsReport.ts +133 -0
  1099. package/src/webrtc/stats/statsReportEmitter.ts +49 -0
  1100. package/src/webrtc/stats/summaryStatsReportGatherer.ts +148 -0
  1101. package/src/webrtc/stats/trackStatsBuilder.ts +207 -0
  1102. package/src/webrtc/stats/transportStats.ts +26 -0
  1103. package/src/webrtc/stats/transportStatsBuilder.ts +48 -0
  1104. package/src/webrtc/stats/valueFormatter.ts +27 -0
@@ -0,0 +1,1230 @@
1
+ /*
2
+ Copyright 2015 - 2021 The Matrix.org Foundation C.I.C.
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ */
16
+
17
+ import { RoomMember } from "./room-member.ts";
18
+ import { logger } from "../logger.ts";
19
+ import { isNumber, removeHiddenChars } from "../utils.ts";
20
+ import { EventType, UNSTABLE_MSC2716_MARKER } from "../@types/event.ts";
21
+ import { type IEvent, type BriijEvent, BriijEventEvent } from "./event.ts";
22
+ import { type BriijClient } from "../client.ts";
23
+ import { GuestAccess, HistoryVisibility, JoinRule } from "../@types/partials.ts";
24
+ import { TypedEventEmitter } from "./typed-event-emitter.ts";
25
+ import {
26
+ Beacon,
27
+ BeaconEvent,
28
+ type BeaconEventHandlerMap,
29
+ getBeaconInfoIdentifier,
30
+ type BeaconIdentifier,
31
+ } from "./beacon.ts";
32
+ import { TypedReEmitter } from "../ReEmitter.ts";
33
+ import { M_BEACON, M_BEACON_INFO } from "../@types/beacon.ts";
34
+ import { KnownMembership } from "../@types/membership.ts";
35
+ import { type RoomJoinRulesEventContent } from "../@types/state_events.ts";
36
+ import { shouldUseHydraForRoomVersion } from "../utils/roomVersion.ts";
37
+
38
+ export interface IMarkerFoundOptions {
39
+ /** Whether the timeline was empty before the marker event arrived in the
40
+ * room. This could be happen in a variety of cases:
41
+ * 1. From the initial sync
42
+ * 2. It's the first state we're seeing after joining the room
43
+ * 3. Or whether it's coming from `syncFromCache`
44
+ *
45
+ * A marker event refers to `UNSTABLE_MSC2716_MARKER` and indicates that
46
+ * history was imported somewhere back in time. It specifically points to an
47
+ * MSC2716 insertion event where the history was imported at. Marker events
48
+ * are sent as state events so they are easily discoverable by clients and
49
+ * homeservers and don't get lost in timeline gaps.
50
+ */
51
+ timelineWasEmpty?: boolean;
52
+ }
53
+
54
+ // possible statuses for out-of-band member loading
55
+ enum OobStatus {
56
+ NotStarted,
57
+ InProgress,
58
+ Finished,
59
+ }
60
+
61
+ export interface IPowerLevelsContent {
62
+ users?: Record<string, number>;
63
+ events?: Record<string, number>;
64
+ notifications?: Partial<Record<"room", number>>;
65
+ // eslint-disable-next-line camelcase
66
+ users_default?: number;
67
+ // eslint-disable-next-line camelcase
68
+ events_default?: number;
69
+ // eslint-disable-next-line camelcase
70
+ state_default?: number;
71
+ ban?: number;
72
+ invite?: number;
73
+ kick?: number;
74
+ redact?: number;
75
+ }
76
+
77
+ export enum RoomStateEvent {
78
+ Events = "RoomState.events",
79
+ Members = "RoomState.members",
80
+ NewMember = "RoomState.newMember",
81
+ Update = "RoomState.update", // signals batches of updates without specificity
82
+ BeaconLiveness = "RoomState.BeaconLiveness",
83
+ Marker = "RoomState.Marker",
84
+ }
85
+
86
+ export type RoomStateEventHandlerMap = {
87
+ /**
88
+ * Fires whenever the event dictionary in room state is updated.
89
+ * This does not guarantee that any related objects (like RoomMember) have been updated.
90
+ * Use RoomStateEvent.Update for that.
91
+ * @param event - The matrix event which caused this event to fire.
92
+ * @param state - The room state whose RoomState.events dictionary
93
+ * was updated.
94
+ * @param prevEvent - The event being replaced by the new state, if
95
+ * known. Note that this can differ from `getPrevContent()` on the new state event
96
+ * as this is the store's view of the last state, not the previous state provided
97
+ * by the server.
98
+ * @example
99
+ * ```
100
+ * matrixClient.on("RoomState.events", function(event, state, prevEvent){
101
+ * var newStateEvent = event;
102
+ * });
103
+ * ```
104
+ */
105
+ [RoomStateEvent.Events]: (event: BriijEvent, state: RoomState, prevEvent: BriijEvent | null) => void;
106
+ /**
107
+ * Fires whenever a member in the members dictionary is updated in any way.
108
+ * @param event - The matrix event which caused this event to fire.
109
+ * @param state - The room state whose RoomState.members dictionary
110
+ * was updated.
111
+ * @param member - The room member that was updated.
112
+ * @example
113
+ * ```
114
+ * matrixClient.on("RoomState.members", function(event, state, member){
115
+ * var newMembershipState = member.membership;
116
+ * });
117
+ * ```
118
+ */
119
+ [RoomStateEvent.Members]: (event: BriijEvent, state: RoomState, member: RoomMember) => void;
120
+ /**
121
+ * Fires whenever a member is added to the members dictionary. The RoomMember
122
+ * will not be fully populated yet (e.g. no membership state) but will already
123
+ * be available in the members dictionary.
124
+ * @param event - The matrix event which caused this event to fire.
125
+ * @param state - The room state whose RoomState.members dictionary
126
+ * was updated with a new entry.
127
+ * @param member - The room member that was added.
128
+ * @example
129
+ * ```
130
+ * matrixClient.on("RoomState.newMember", function(event, state, member){
131
+ * // add event listeners on 'member'
132
+ * });
133
+ * ```
134
+ */
135
+ [RoomStateEvent.NewMember]: (event: BriijEvent, state: RoomState, member: RoomMember) => void;
136
+ [RoomStateEvent.Update]: (state: RoomState) => void;
137
+ [RoomStateEvent.BeaconLiveness]: (state: RoomState, hasLiveBeacons: boolean) => void;
138
+ [RoomStateEvent.Marker]: (event: BriijEvent, setStateOptions?: IMarkerFoundOptions) => void;
139
+ [BeaconEvent.New]: (event: BriijEvent, beacon: Beacon) => void;
140
+ };
141
+
142
+ type EmittedEvents = RoomStateEvent | BeaconEvent;
143
+ type EventHandlerMap = RoomStateEventHandlerMap & BeaconEventHandlerMap;
144
+
145
+ type KeysMatching<T, V> = { [K in keyof T]-?: T[K] extends V ? K : never }[keyof T];
146
+
147
+ export class RoomState extends TypedEventEmitter<EmittedEvents, EventHandlerMap> {
148
+ public readonly reEmitter = new TypedReEmitter<EmittedEvents, EventHandlerMap>(this);
149
+ private sentinels: Record<string, RoomMember> = {}; // userId: RoomMember
150
+ // stores fuzzy matches to a list of userIDs (applies utils.removeHiddenChars to keys)
151
+ private displayNameToUserIds = new Map<string, string[]>();
152
+ private userIdsToDisplayNames: Record<string, string> = {};
153
+ private tokenToInvite: Record<string, BriijEvent> = {}; // 3pid invite state_key to m.room.member invite
154
+ private joinedMemberCount: number | null = null; // cache of the number of joined members
155
+ // joined members count from summary api
156
+ // once set, we know the server supports the summary api
157
+ // and we should only trust that
158
+ // we could also only trust that before OOB members
159
+ // are loaded but doesn't seem worth the hassle atm
160
+ private summaryJoinedMemberCount: number | null = null;
161
+ // same for invited member count
162
+ private invitedMemberCount: number | null = null;
163
+ private summaryInvitedMemberCount: number | null = null;
164
+ private modified = -1;
165
+
166
+ // XXX: Should be read-only
167
+ // The room member dictionary, keyed on the user's ID.
168
+ public members: Record<string, RoomMember> = {}; // userId: RoomMember
169
+ // The state events dictionary, keyed on the event type and then the state_key value.
170
+ public events = new Map<string, Map<string, BriijEvent>>(); // Map<eventType, Map<stateKey, BriijEvent>>
171
+ // The pagination token for this state.
172
+ public paginationToken: string | null = null;
173
+
174
+ public readonly beacons = new Map<BeaconIdentifier, Beacon>();
175
+ private _liveBeaconIds: BeaconIdentifier[] = [];
176
+
177
+ // We only wants to print warnings about bad room state once.
178
+ private getVersionWarning = false;
179
+
180
+ /**
181
+ * Construct room state.
182
+ *
183
+ * Room State represents the state of the room at a given point.
184
+ * It can be mutated by adding state events to it.
185
+ * There are two types of room member associated with a state event:
186
+ * normal member objects (accessed via getMember/getMembers) which mutate
187
+ * with the state to represent the current state of that room/user, e.g.
188
+ * the object returned by `getMember('@bob:example.com')` will mutate to
189
+ * get a different display name if Bob later changes his display name
190
+ * in the room.
191
+ * There are also 'sentinel' members (accessed via getSentinelMember).
192
+ * These also represent the state of room members at the point in time
193
+ * represented by the RoomState object, but unlike objects from getMember,
194
+ * sentinel objects will always represent the room state as at the time
195
+ * getSentinelMember was called, so if Bob subsequently changes his display
196
+ * name, a room member object previously acquired with getSentinelMember
197
+ * will still have his old display name. Calling getSentinelMember again
198
+ * after the display name change will return a new RoomMember object
199
+ * with Bob's new display name.
200
+ *
201
+ * @param roomId - Optional. The ID of the room which has this state.
202
+ * If none is specified it just tracks paginationTokens, useful for notifTimelineSet
203
+ * @param oobMemberFlags - Optional. The state of loading out of bound members.
204
+ * As the timeline might get reset while they are loading, this state needs to be inherited
205
+ * and shared when the room state is cloned for the new timeline.
206
+ * This should only be passed from clone.
207
+ */
208
+ public constructor(
209
+ public readonly roomId: string,
210
+ private oobMemberFlags = { status: OobStatus.NotStarted },
211
+ ) {
212
+ super();
213
+ this.updateModifiedTime();
214
+ }
215
+
216
+ /**
217
+ * Gets the version of the room
218
+ * @returns The version of the room
219
+ */
220
+ public getRoomVersion(): string {
221
+ const createEvent = this.getStateEvents(EventType.RoomCreate, "");
222
+ if (!createEvent) {
223
+ if (!this.getVersionWarning) {
224
+ logger.warn("[getVersion] Room " + this.roomId + " does not have an m.room.create event");
225
+ this.getVersionWarning = true;
226
+ }
227
+ return "1";
228
+ }
229
+ return createEvent.getContent()["room_version"] ?? "1";
230
+ }
231
+
232
+ /**
233
+ * Returns the number of joined members in this room
234
+ * This method caches the result.
235
+ * @returns The number of members in this room whose membership is 'join'
236
+ */
237
+ public getJoinedMemberCount(): number {
238
+ if (this.summaryJoinedMemberCount !== null) {
239
+ return this.summaryJoinedMemberCount;
240
+ }
241
+ if (this.joinedMemberCount === null) {
242
+ this.joinedMemberCount = this.getMembers().reduce((count, m) => {
243
+ return m.membership === KnownMembership.Join ? count + 1 : count;
244
+ }, 0);
245
+ }
246
+ return this.joinedMemberCount;
247
+ }
248
+
249
+ /**
250
+ * Set the joined member count explicitly (like from summary part of the sync response)
251
+ * @param count - the amount of joined members
252
+ */
253
+ public setJoinedMemberCount(count: number): void {
254
+ this.summaryJoinedMemberCount = count;
255
+ }
256
+
257
+ /**
258
+ * Returns the number of invited members in this room
259
+ * @returns The number of members in this room whose membership is 'invite'
260
+ */
261
+ public getInvitedMemberCount(): number {
262
+ if (this.summaryInvitedMemberCount !== null) {
263
+ return this.summaryInvitedMemberCount;
264
+ }
265
+ if (this.invitedMemberCount === null) {
266
+ this.invitedMemberCount = this.getMembers().reduce((count, m) => {
267
+ return m.membership === KnownMembership.Invite ? count + 1 : count;
268
+ }, 0);
269
+ }
270
+ return this.invitedMemberCount;
271
+ }
272
+
273
+ /**
274
+ * Set the amount of invited members in this room
275
+ * @param count - the amount of invited members
276
+ */
277
+ public setInvitedMemberCount(count: number): void {
278
+ this.summaryInvitedMemberCount = count;
279
+ }
280
+
281
+ /**
282
+ * Get all RoomMembers in this room.
283
+ * @returns A list of RoomMembers.
284
+ */
285
+ public getMembers(): RoomMember[] {
286
+ return Object.values(this.members);
287
+ }
288
+
289
+ /**
290
+ * Get all RoomMembers in this room, excluding the user IDs provided.
291
+ * @param excludedIds - The user IDs to exclude.
292
+ * @returns A list of RoomMembers.
293
+ */
294
+ public getMembersExcept(excludedIds: string[]): RoomMember[] {
295
+ return this.getMembers().filter((m) => !excludedIds.includes(m.userId));
296
+ }
297
+
298
+ /**
299
+ * Get a room member by their user ID.
300
+ * @param userId - The room member's user ID.
301
+ * @returns The member or null if they do not exist.
302
+ */
303
+ public getMember(userId: string): RoomMember | null {
304
+ return this.members[userId] || null;
305
+ }
306
+
307
+ /**
308
+ * Get a room member whose properties will not change with this room state. You
309
+ * typically want this if you want to attach a RoomMember to a BriijEvent which
310
+ * may no longer be represented correctly by Room.currentState or Room.oldState.
311
+ * The term 'sentinel' refers to the fact that this RoomMember is an unchanging
312
+ * guardian for state at this particular point in time.
313
+ * @param userId - The room member's user ID.
314
+ * @returns The member or null if they do not exist.
315
+ */
316
+ public getSentinelMember(userId: string): RoomMember | null {
317
+ if (!userId) return null;
318
+ let sentinel = this.sentinels[userId];
319
+
320
+ if (sentinel === undefined) {
321
+ sentinel = new RoomMember(this.roomId, userId);
322
+ const member = this.members[userId];
323
+ if (member?.events.member) {
324
+ sentinel.setMembershipEvent(member.events.member, this);
325
+ }
326
+ this.sentinels[userId] = sentinel;
327
+ }
328
+ return sentinel;
329
+ }
330
+
331
+ /**
332
+ * Get state events from the state of the room.
333
+ * @param eventType - The event type of the state event.
334
+ * @returns A list of events
335
+ */
336
+ public getStateEvents(eventType: EventType | string): BriijEvent[];
337
+ /**
338
+ * Get state events from the state of the room.
339
+ * @param eventType - The event type of the state event.
340
+ * @param stateKey - The state_key of the state event.
341
+ * @returns A single event (or null if no match found).
342
+ */
343
+ public getStateEvents(eventType: EventType | string, stateKey: string): BriijEvent | null;
344
+ public getStateEvents(eventType: EventType | string, stateKey?: string): BriijEvent[] | BriijEvent | null {
345
+ if (!this.events.has(eventType)) {
346
+ // no match
347
+ return stateKey === undefined ? [] : null;
348
+ }
349
+ if (stateKey === undefined) {
350
+ // return all values
351
+ return Array.from(this.events.get(eventType)!.values());
352
+ }
353
+ const event = this.events.get(eventType)!.get(stateKey);
354
+ return event ? event : null;
355
+ }
356
+
357
+ public get hasLiveBeacons(): boolean {
358
+ return !!this.liveBeaconIds?.length;
359
+ }
360
+
361
+ public get liveBeaconIds(): BeaconIdentifier[] {
362
+ return this._liveBeaconIds;
363
+ }
364
+
365
+ /**
366
+ * Creates a copy of this room state so that mutations to either won't affect the other.
367
+ * @returns the copy of the room state
368
+ */
369
+ public clone(): RoomState {
370
+ const copy = new RoomState(this.roomId, this.oobMemberFlags);
371
+
372
+ // Ugly hack: because setStateEvents will mark
373
+ // members as susperseding future out of bound members
374
+ // if loading is in progress (through oobMemberFlags)
375
+ // since these are not new members, we're merely copying them
376
+ // set the status to not started
377
+ // after copying, we set back the status
378
+ const status = this.oobMemberFlags.status;
379
+ this.oobMemberFlags.status = OobStatus.NotStarted;
380
+
381
+ Array.from(this.events.values()).forEach((eventsByStateKey) => {
382
+ copy.setStateEvents(Array.from(eventsByStateKey.values()));
383
+ });
384
+
385
+ // Ugly hack: see above
386
+ this.oobMemberFlags.status = status;
387
+
388
+ if (this.summaryInvitedMemberCount !== null) {
389
+ copy.setInvitedMemberCount(this.getInvitedMemberCount());
390
+ }
391
+ if (this.summaryJoinedMemberCount !== null) {
392
+ copy.setJoinedMemberCount(this.getJoinedMemberCount());
393
+ }
394
+
395
+ // copy out of band flags if needed
396
+ if (this.oobMemberFlags.status == OobStatus.Finished) {
397
+ // copy markOutOfBand flags
398
+ this.getMembers().forEach((member) => {
399
+ if (member.isOutOfBand()) {
400
+ copy.getMember(member.userId)?.markOutOfBand();
401
+ }
402
+ });
403
+ }
404
+
405
+ return copy;
406
+ }
407
+
408
+ /**
409
+ * Add previously unknown state events.
410
+ * When lazy loading members while back-paginating,
411
+ * the relevant room state for the timeline chunk at the end
412
+ * of the chunk can be set with this method.
413
+ * @param events - state events to prepend
414
+ */
415
+ public setUnknownStateEvents(events: BriijEvent[]): void {
416
+ const unknownStateEvents = events.filter((event) => {
417
+ return !this.events.has(event.getType()) || !this.events.get(event.getType())!.has(event.getStateKey()!);
418
+ });
419
+
420
+ this.setStateEvents(unknownStateEvents);
421
+ }
422
+
423
+ /**
424
+ * Add an array of one or more state BriijEvents, overwriting any existing
425
+ * state with the same `{type, stateKey}` tuple. Will fire "RoomState.events"
426
+ * for every event added. May fire "RoomState.members" if there are
427
+ * `m.room.member` events. May fire "RoomStateEvent.Marker" if there are
428
+ * `UNSTABLE_MSC2716_MARKER` events.
429
+ * @param stateEvents - a list of state events for this room.
430
+ *
431
+ * @remarks
432
+ * Fires {@link RoomStateEvent.Members}
433
+ * Fires {@link RoomStateEvent.NewMember}
434
+ * Fires {@link RoomStateEvent.Events}
435
+ * Fires {@link RoomStateEvent.Marker}
436
+ */
437
+ public setStateEvents(stateEvents: BriijEvent[], markerFoundOptions?: IMarkerFoundOptions): void {
438
+ this.updateModifiedTime();
439
+
440
+ // update the core event dict
441
+ // Track display names that change so we can recalculate disambiguation
442
+ const affectedDisplayNames = new Set<string>();
443
+ // Track userIds whose membership events we process so we don't emit duplicate events
444
+ const processedMemberUserIds = new Set<string>();
445
+
446
+ stateEvents.forEach((event) => {
447
+ if (event.getRoomId() !== this.roomId || !event.isState()) return;
448
+
449
+ if (M_BEACON_INFO.matches(event.getType())) {
450
+ this.setBeacon(event);
451
+ }
452
+
453
+ const lastStateEvent = this.getStateEventMatching(event);
454
+ this.setStateEvent(event);
455
+ if (event.getType() === EventType.RoomMember) {
456
+ const userId = event.getStateKey()!;
457
+ processedMemberUserIds.add(userId);
458
+ const newDisplayName = event.getContent().displayname ?? "";
459
+ const oldDisplayName = this.userIdsToDisplayNames[userId];
460
+
461
+ // Track both old and new display names for disambiguation recalculation
462
+ if (oldDisplayName) {
463
+ const strippedOld = removeHiddenChars(oldDisplayName);
464
+ if (strippedOld) affectedDisplayNames.add(strippedOld);
465
+ }
466
+ if (newDisplayName) {
467
+ const strippedNew = removeHiddenChars(newDisplayName);
468
+ if (strippedNew) affectedDisplayNames.add(strippedNew);
469
+ }
470
+
471
+ this.updateDisplayNameCache(userId, newDisplayName);
472
+ this.updateThirdPartyTokenCache(event);
473
+ }
474
+ this.emit(RoomStateEvent.Events, event, this, lastStateEvent);
475
+ });
476
+
477
+ this.onBeaconLivenessChange();
478
+ // update higher level data structures. This needs to be done AFTER the
479
+ // core event dict as these structures may depend on other state events in
480
+ // the given array (e.g. disambiguating display names in one go to do both
481
+ // clashing names rather than progressively which only catches 1 of them).
482
+ stateEvents.forEach((event) => {
483
+ if (event.getRoomId() !== this.roomId || !event.isState()) return;
484
+
485
+ if (event.getType() === EventType.RoomMember) {
486
+ const userId = event.getStateKey()!;
487
+
488
+ // leave events apparently elide the displayname or avatar_url,
489
+ // so let's fake one up so that we don't leak user ids
490
+ // into the timeline
491
+ if (
492
+ event.getContent().membership === KnownMembership.Leave ||
493
+ event.getContent().membership === KnownMembership.Ban
494
+ ) {
495
+ event.getContent().avatar_url = event.getContent().avatar_url || event.getPrevContent().avatar_url;
496
+ event.getContent().displayname =
497
+ event.getContent().displayname || event.getPrevContent().displayname;
498
+ }
499
+
500
+ const member = this.getOrCreateMember(userId, event);
501
+ member.setMembershipEvent(event, this);
502
+ this.updateMember(member);
503
+ this.emit(RoomStateEvent.Members, event, this, member);
504
+ } else if (event.getType() === EventType.RoomPowerLevels) {
505
+ // events with unknown state keys should be ignored
506
+ // and should not aggregate onto members power levels
507
+ if (event.getStateKey() !== "") {
508
+ return;
509
+ }
510
+ const members = Object.values(this.members);
511
+
512
+ const createEvent = this.getStateEvents(EventType.RoomCreate, "");
513
+ const creators = getCreators(this.getRoomVersion(), createEvent);
514
+
515
+ members.forEach((member) => {
516
+ // We only propagate `RoomState.members` event if the
517
+ // power levels has been changed
518
+ // large room suffer from large re-rendering especially when not needed
519
+ const oldLastModified = member.getLastModifiedTime();
520
+
521
+ if (createEvent) {
522
+ const pl = powerLevelForUserId(member.userId, event, creators);
523
+ member.setPowerLevel(pl, event);
524
+ }
525
+ if (oldLastModified !== member.getLastModifiedTime()) {
526
+ this.emit(RoomStateEvent.Members, event, this, member);
527
+ }
528
+ });
529
+
530
+ // assume all our sentinels are now out-of-date
531
+ this.sentinels = {};
532
+ } else if (UNSTABLE_MSC2716_MARKER.matches(event.getType())) {
533
+ this.emit(RoomStateEvent.Marker, event, markerFoundOptions);
534
+ }
535
+ });
536
+
537
+ // Recalculate disambiguation for all members whose display names were affected.
538
+ // This ensures that when a user changes their name to match (or stop matching)
539
+ // another user, all affected users' disambiguation flags are updated correctly.
540
+ if (affectedDisplayNames.size > 0) {
541
+ // Collect all affected user IDs first to avoid duplicate processing
542
+ const affectedUserIds = new Set<string>();
543
+ for (const displayName of affectedDisplayNames) {
544
+ const userIds = this.displayNameToUserIds.get(displayName) ?? [];
545
+ userIds.forEach((id) => affectedUserIds.add(id));
546
+ }
547
+
548
+ // Process each affected member once, excluding those whose membership
549
+ // events were already processed (they already got their events emitted)
550
+ for (const userId of affectedUserIds) {
551
+ if (processedMemberUserIds.has(userId)) {
552
+ continue;
553
+ }
554
+ const member = this.members[userId];
555
+ if (member?.events.member) {
556
+ const nameChanged = member.recalculateDisambiguatedName(this);
557
+ if (nameChanged) {
558
+ this.emit(RoomStateEvent.Members, member.events.member, this, member);
559
+ }
560
+ }
561
+ }
562
+ }
563
+
564
+ this.emit(RoomStateEvent.Update, this);
565
+ }
566
+
567
+ public async processBeaconEvents(events: BriijEvent[], matrixClient: BriijClient): Promise<void> {
568
+ if (
569
+ !events.length ||
570
+ // discard locations if we have no beacons
571
+ !this.beacons.size
572
+ ) {
573
+ return;
574
+ }
575
+
576
+ const beaconByEventIdDict = [...this.beacons.values()].reduce<Record<string, Beacon>>((dict, beacon) => {
577
+ dict[beacon.beaconInfoId] = beacon;
578
+ return dict;
579
+ }, {});
580
+
581
+ const processBeaconRelation = (beaconInfoEventId: string, event: BriijEvent): void => {
582
+ if (!M_BEACON.matches(event.getType())) {
583
+ return;
584
+ }
585
+
586
+ const beacon = beaconByEventIdDict[beaconInfoEventId];
587
+
588
+ if (beacon) {
589
+ beacon.addLocations([event]);
590
+ }
591
+ };
592
+
593
+ for (const event of events) {
594
+ const relatedToEventId = event.getRelation()?.event_id;
595
+ // not related to a beacon we know about; discard
596
+ if (!relatedToEventId || !beaconByEventIdDict[relatedToEventId]) return;
597
+ if (!M_BEACON.matches(event.getType()) && !event.isEncrypted()) return;
598
+
599
+ try {
600
+ await matrixClient.decryptEventIfNeeded(event);
601
+ processBeaconRelation(relatedToEventId, event);
602
+ } catch {
603
+ if (event.isDecryptionFailure()) {
604
+ // add an event listener for once the event is decrypted.
605
+ event.once(BriijEventEvent.Decrypted, async () => {
606
+ processBeaconRelation(relatedToEventId, event);
607
+ });
608
+ }
609
+ }
610
+ }
611
+ }
612
+
613
+ /**
614
+ * Looks up a member by the given userId, and if it doesn't exist,
615
+ * create it and emit the `RoomState.newMember` event.
616
+ * This method makes sure the member is added to the members dictionary
617
+ * before emitting, as this is done from setStateEvents and setOutOfBandMember.
618
+ * @param userId - the id of the user to look up
619
+ * @param event - the membership event for the (new) member. Used to emit.
620
+ * @returns the member, existing or newly created.
621
+ *
622
+ * @remarks
623
+ * Fires {@link RoomStateEvent.NewMember}
624
+ */
625
+ private getOrCreateMember(userId: string, event: BriijEvent): RoomMember {
626
+ let member = this.members[userId];
627
+ if (!member) {
628
+ member = new RoomMember(this.roomId, userId);
629
+ // add member to members before emitting any events,
630
+ // as event handlers often lookup the member
631
+ this.members[userId] = member;
632
+ this.emit(RoomStateEvent.NewMember, event, this, member);
633
+ }
634
+ return member;
635
+ }
636
+
637
+ private setStateEvent(event: BriijEvent): void {
638
+ if (!this.events.has(event.getType())) {
639
+ this.events.set(event.getType(), new Map());
640
+ }
641
+ this.events.get(event.getType())!.set(event.getStateKey()!, event);
642
+ }
643
+
644
+ /**
645
+ * @experimental
646
+ */
647
+ private setBeacon(event: BriijEvent): void {
648
+ const beaconIdentifier = getBeaconInfoIdentifier(event);
649
+
650
+ if (this.beacons.has(beaconIdentifier)) {
651
+ const beacon = this.beacons.get(beaconIdentifier)!;
652
+
653
+ if (event.isRedacted()) {
654
+ if (beacon.beaconInfoId === (<IEvent>event.getRedactionEvent())?.redacts) {
655
+ beacon.destroy();
656
+ this.beacons.delete(beaconIdentifier);
657
+ }
658
+ return;
659
+ }
660
+
661
+ return beacon.update(event);
662
+ }
663
+
664
+ if (event.isRedacted()) {
665
+ return;
666
+ }
667
+
668
+ const beacon = new Beacon(event);
669
+
670
+ this.reEmitter.reEmit<BeaconEvent, BeaconEvent>(beacon, [
671
+ BeaconEvent.New,
672
+ BeaconEvent.Update,
673
+ BeaconEvent.Destroy,
674
+ BeaconEvent.LivenessChange,
675
+ ]);
676
+
677
+ this.emit(BeaconEvent.New, event, beacon);
678
+ beacon.on(BeaconEvent.LivenessChange, this.onBeaconLivenessChange.bind(this));
679
+ beacon.on(BeaconEvent.Destroy, this.onBeaconLivenessChange.bind(this));
680
+
681
+ this.beacons.set(beacon.identifier, beacon);
682
+ }
683
+
684
+ /**
685
+ * @experimental
686
+ * Check liveness of room beacons
687
+ * emit RoomStateEvent.BeaconLiveness event
688
+ */
689
+ private onBeaconLivenessChange(): void {
690
+ this._liveBeaconIds = Array.from(this.beacons.values())
691
+ .filter((beacon) => beacon.isLive)
692
+ .map((beacon) => beacon.identifier);
693
+
694
+ this.emit(RoomStateEvent.BeaconLiveness, this, this.hasLiveBeacons);
695
+ }
696
+
697
+ private getStateEventMatching(event: BriijEvent): BriijEvent | null {
698
+ return this.events.get(event.getType())?.get(event.getStateKey()!) ?? null;
699
+ }
700
+
701
+ private updateMember(member: RoomMember): void {
702
+ // this member may have a power level already, so set it.
703
+ const createEvent = this.getStateEvents(EventType.RoomCreate, "");
704
+ const pwrLvlEvent = this.getStateEvents(EventType.RoomPowerLevels, "");
705
+ if (pwrLvlEvent && createEvent) {
706
+ const powerLevel = powerLevelForUserId(
707
+ member.userId,
708
+ pwrLvlEvent,
709
+ getCreators(this.getRoomVersion(), createEvent),
710
+ );
711
+
712
+ member.setPowerLevel(powerLevel, pwrLvlEvent);
713
+ }
714
+
715
+ // blow away the sentinel which is now outdated
716
+ delete this.sentinels[member.userId];
717
+
718
+ this.members[member.userId] = member;
719
+ this.joinedMemberCount = null;
720
+ this.invitedMemberCount = null;
721
+ }
722
+
723
+ /**
724
+ * Get the out-of-band members loading state, whether loading is needed or not.
725
+ * Note that loading might be in progress and hence isn't needed.
726
+ * @returns whether or not the members of this room need to be loaded
727
+ */
728
+ public needsOutOfBandMembers(): boolean {
729
+ return this.oobMemberFlags.status === OobStatus.NotStarted;
730
+ }
731
+
732
+ /**
733
+ * Check if loading of out-of-band-members has completed
734
+ *
735
+ * @returns true if the full membership list of this room has been loaded. False if it is not started or is in
736
+ * progress.
737
+ */
738
+ public outOfBandMembersReady(): boolean {
739
+ return this.oobMemberFlags.status === OobStatus.Finished;
740
+ }
741
+
742
+ /**
743
+ * Mark this room state as waiting for out-of-band members,
744
+ * ensuring it doesn't ask for them to be requested again
745
+ * through needsOutOfBandMembers
746
+ */
747
+ public markOutOfBandMembersStarted(): void {
748
+ if (this.oobMemberFlags.status !== OobStatus.NotStarted) {
749
+ return;
750
+ }
751
+ this.oobMemberFlags.status = OobStatus.InProgress;
752
+ }
753
+
754
+ /**
755
+ * Mark this room state as having failed to fetch out-of-band members
756
+ */
757
+ public markOutOfBandMembersFailed(): void {
758
+ if (this.oobMemberFlags.status !== OobStatus.InProgress) {
759
+ return;
760
+ }
761
+ this.oobMemberFlags.status = OobStatus.NotStarted;
762
+ }
763
+
764
+ /**
765
+ * Clears the loaded out-of-band members
766
+ */
767
+ public clearOutOfBandMembers(): void {
768
+ let count = 0;
769
+ Object.keys(this.members).forEach((userId) => {
770
+ const member = this.members[userId];
771
+ if (member.isOutOfBand()) {
772
+ ++count;
773
+ delete this.members[userId];
774
+ }
775
+ });
776
+ logger.log(`LL: RoomState removed ${count} members...`);
777
+ this.oobMemberFlags.status = OobStatus.NotStarted;
778
+ }
779
+
780
+ /**
781
+ * Sets the loaded out-of-band members.
782
+ * @param stateEvents - array of membership state events
783
+ */
784
+ public setOutOfBandMembers(stateEvents: BriijEvent[]): void {
785
+ logger.log(`LL: RoomState about to set ${stateEvents.length} OOB members ...`);
786
+ if (this.oobMemberFlags.status !== OobStatus.InProgress) {
787
+ return;
788
+ }
789
+ logger.log(`LL: RoomState put in finished state ...`);
790
+ this.oobMemberFlags.status = OobStatus.Finished;
791
+ stateEvents.forEach((e) => this.setOutOfBandMember(e));
792
+ this.emit(RoomStateEvent.Update, this);
793
+ }
794
+
795
+ /**
796
+ * Sets a single out of band member, used by both setOutOfBandMembers and clone
797
+ * @param stateEvent - membership state event
798
+ */
799
+ private setOutOfBandMember(stateEvent: BriijEvent): void {
800
+ if (stateEvent.getType() !== EventType.RoomMember) {
801
+ return;
802
+ }
803
+ const userId = stateEvent.getStateKey()!;
804
+ const existingMember = this.getMember(userId);
805
+ // never replace members received as part of the sync
806
+ if (existingMember && !existingMember.isOutOfBand()) {
807
+ return;
808
+ }
809
+
810
+ const member = this.getOrCreateMember(userId, stateEvent);
811
+ member.setMembershipEvent(stateEvent, this);
812
+ // needed to know which members need to be stored seperately
813
+ // as they are not part of the sync accumulator
814
+ // this is cleared by setMembershipEvent so when it's updated through /sync
815
+ member.markOutOfBand();
816
+
817
+ this.updateDisplayNameCache(member.userId, member.name);
818
+
819
+ this.setStateEvent(stateEvent);
820
+ this.updateMember(member);
821
+ this.emit(RoomStateEvent.Members, stateEvent, this, member);
822
+ }
823
+
824
+ /**
825
+ * Set the current typing event for this room.
826
+ * @param event - The typing event
827
+ */
828
+ public setTypingEvent(event: BriijEvent): void {
829
+ Object.values(this.members).forEach(function (member) {
830
+ member.setTypingEvent(event);
831
+ });
832
+ }
833
+
834
+ /**
835
+ * Get the m.room.member event which has the given third party invite token.
836
+ *
837
+ * @param token - The token
838
+ * @returns The m.room.member event or null
839
+ */
840
+ public getInviteForThreePidToken(token: string): BriijEvent | null {
841
+ return this.tokenToInvite[token] || null;
842
+ }
843
+
844
+ /**
845
+ * Update the last modified time to the current time.
846
+ */
847
+ private updateModifiedTime(): void {
848
+ this.modified = Date.now();
849
+ }
850
+
851
+ /**
852
+ * Get the timestamp when this room state was last updated. This timestamp is
853
+ * updated when this object has received new state events.
854
+ * @returns The timestamp
855
+ */
856
+ public getLastModifiedTime(): number {
857
+ return this.modified;
858
+ }
859
+
860
+ /**
861
+ * Get user IDs with the specified or similar display names.
862
+ * @param displayName - The display name to get user IDs from.
863
+ * @returns An array of user IDs or an empty array.
864
+ */
865
+ public getUserIdsWithDisplayName(displayName: string): string[] {
866
+ return this.displayNameToUserIds.get(removeHiddenChars(displayName)) ?? [];
867
+ }
868
+
869
+ /**
870
+ * Returns true if userId is in room, event is not redacted and either sender of
871
+ * mxEvent or has power level sufficient to redact events other than their own.
872
+ * @param mxEvent - The event to test permission for
873
+ * @param userId - The user ID of the user to test permission for
874
+ * @returns true if the given used ID can redact given event
875
+ */
876
+ public maySendRedactionForEvent(mxEvent: BriijEvent, userId: string): boolean {
877
+ const member = this.getMember(userId);
878
+ if (!member || member.membership === KnownMembership.Leave) return false;
879
+
880
+ if (mxEvent.status || mxEvent.isRedacted()) return false;
881
+
882
+ // The user may have been the sender, but they can't redact their own message
883
+ // if redactions are blocked.
884
+ const canRedact = this.maySendEvent(EventType.RoomRedaction, userId);
885
+
886
+ if (!canRedact) return false;
887
+ if (mxEvent.getSender() === userId) return true;
888
+
889
+ return this.hasSufficientPowerLevelFor("redact", member.powerLevel);
890
+ }
891
+
892
+ /**
893
+ * Returns true if the given power level is sufficient for action
894
+ * @param action - The type of power level to check
895
+ * @param powerLevel - The power level of the member
896
+ * @returns true if the given power level is sufficient
897
+ */
898
+ public hasSufficientPowerLevelFor(
899
+ action: KeysMatching<Required<IPowerLevelsContent>, number>,
900
+ powerLevel: number,
901
+ ): boolean {
902
+ const powerLevelsEvent = this.getStateEvents(EventType.RoomPowerLevels, "");
903
+
904
+ let powerLevels: IPowerLevelsContent = {};
905
+ if (powerLevelsEvent) {
906
+ powerLevels = powerLevelsEvent.getContent();
907
+ }
908
+
909
+ let requiredLevel = 50;
910
+ if (isNumber(powerLevels[action])) {
911
+ requiredLevel = powerLevels[action]!;
912
+ }
913
+
914
+ return powerLevel >= requiredLevel;
915
+ }
916
+
917
+ /**
918
+ * Short-form for maySendEvent('m.room.message', userId)
919
+ * @param userId - The user ID of the user to test permission for
920
+ * @returns true if the given user ID should be permitted to send
921
+ * message events into the given room.
922
+ */
923
+ public maySendMessage(userId: string): boolean {
924
+ return this.maySendEventOfType(EventType.RoomMessage, userId, false);
925
+ }
926
+
927
+ /**
928
+ * Returns true if the given user ID has permission to send a normal
929
+ * event of type `eventType` into this room.
930
+ * @param eventType - The type of event to test
931
+ * @param userId - The user ID of the user to test permission for
932
+ * @returns true if the given user ID should be permitted to send
933
+ * the given type of event into this room,
934
+ * according to the room's state.
935
+ */
936
+ public maySendEvent(eventType: EventType | string, userId: string): boolean {
937
+ return this.maySendEventOfType(eventType, userId, false);
938
+ }
939
+
940
+ /**
941
+ * Returns true if the given BriijClient has permission to send a state
942
+ * event of type `stateEventType` into this room.
943
+ * @param stateEventType - The type of state events to test
944
+ * @param cli - The client to test permission for
945
+ * @returns true if the given client should be permitted to send
946
+ * the given type of state event into this room,
947
+ * according to the room's state.
948
+ */
949
+ public mayClientSendStateEvent(stateEventType: EventType | string, cli: BriijClient): boolean {
950
+ if (cli.isGuest() || !cli.credentials.userId) {
951
+ return false;
952
+ }
953
+ return this.maySendStateEvent(stateEventType, cli.credentials.userId);
954
+ }
955
+
956
+ /**
957
+ * Returns true if the given user ID has permission to send a state
958
+ * event of type `stateEventType` into this room.
959
+ * @param stateEventType - The type of state events to test
960
+ * @param userId - The user ID of the user to test permission for
961
+ * @returns true if the given user ID should be permitted to send
962
+ * the given type of state event into this room,
963
+ * according to the room's state.
964
+ */
965
+ public maySendStateEvent(stateEventType: EventType | string, userId: string): boolean {
966
+ return this.maySendEventOfType(stateEventType, userId, true);
967
+ }
968
+
969
+ /**
970
+ * Returns true if the given user ID has permission to send a normal or state
971
+ * event of type `eventType` into this room.
972
+ * @param eventType - The type of event to test
973
+ * @param userId - The user ID of the user to test permission for
974
+ * @param state - If true, tests if the user may send a state
975
+ event of this type. Otherwise tests whether
976
+ they may send a regular event.
977
+ * @returns true if the given user ID should be permitted to send
978
+ * the given type of event into this room,
979
+ * according to the room's state.
980
+ */
981
+ private maySendEventOfType(eventType: EventType | string, userId: string, state: boolean): boolean {
982
+ const powerLevelsEvent = this.getStateEvents(EventType.RoomPowerLevels, "");
983
+
984
+ let powerLevels: IPowerLevelsContent;
985
+ let eventsLevels: Record<EventType | string, number> = {};
986
+
987
+ let stateDefault = 0;
988
+ let eventsDefault = 0;
989
+ if (powerLevelsEvent) {
990
+ powerLevels = powerLevelsEvent.getContent();
991
+ eventsLevels = powerLevels.events || {};
992
+
993
+ if (Number.isSafeInteger(powerLevels.state_default)) {
994
+ stateDefault = powerLevels.state_default!;
995
+ } else {
996
+ stateDefault = 50;
997
+ }
998
+
999
+ if (Number.isSafeInteger(powerLevels.events_default)) {
1000
+ eventsDefault = powerLevels.events_default!;
1001
+ }
1002
+ }
1003
+
1004
+ let requiredLevel = state ? stateDefault : eventsDefault;
1005
+ if (Number.isSafeInteger(eventsLevels[eventType])) {
1006
+ requiredLevel = eventsLevels[eventType];
1007
+ }
1008
+
1009
+ const roomMember = this.getMember(userId);
1010
+ const userPowerLevel = roomMember?.powerLevel ?? 0;
1011
+
1012
+ return userPowerLevel >= requiredLevel;
1013
+ }
1014
+
1015
+ /**
1016
+ * Returns true if the given user ID has permission to trigger notification
1017
+ * of type `notifLevelKey`
1018
+ * @param notifLevelKey - The level of notification to test (eg. 'room')
1019
+ * @param userId - The user ID of the user to test permission for
1020
+ * @returns true if the given user ID has permission to trigger a
1021
+ * notification of this type.
1022
+ */
1023
+ public mayTriggerNotifOfType(notifLevelKey: string, userId: string): boolean {
1024
+ const member = this.getMember(userId);
1025
+ if (!member) {
1026
+ return false;
1027
+ }
1028
+
1029
+ const powerLevelsEvent = this.getStateEvents(EventType.RoomPowerLevels, "");
1030
+
1031
+ let notifLevel = 50;
1032
+ if (
1033
+ powerLevelsEvent &&
1034
+ powerLevelsEvent.getContent() &&
1035
+ powerLevelsEvent.getContent().notifications &&
1036
+ isNumber(powerLevelsEvent.getContent().notifications[notifLevelKey])
1037
+ ) {
1038
+ notifLevel = powerLevelsEvent.getContent().notifications[notifLevelKey];
1039
+ }
1040
+
1041
+ return member.powerLevel >= notifLevel;
1042
+ }
1043
+
1044
+ /**
1045
+ * Returns the join rule based on the m.room.join_rule state event, defaulting to `invite`.
1046
+ * @returns the join_rule applied to this room
1047
+ */
1048
+ public getJoinRule(): JoinRule {
1049
+ const joinRuleEvent = this.getStateEvents(EventType.RoomJoinRules, "");
1050
+ const joinRuleContent: Partial<RoomJoinRulesEventContent> = joinRuleEvent?.getContent() ?? {};
1051
+ return joinRuleContent["join_rule"] || JoinRule.Invite;
1052
+ }
1053
+
1054
+ /**
1055
+ * Returns the history visibility based on the m.room.history_visibility state event, defaulting to `shared`.
1056
+ * @returns the history_visibility applied to this room
1057
+ */
1058
+ public getHistoryVisibility(): HistoryVisibility {
1059
+ const historyVisibilityEvent = this.getStateEvents(EventType.RoomHistoryVisibility, "");
1060
+ const historyVisibilityContent = historyVisibilityEvent?.getContent() ?? {};
1061
+ return historyVisibilityContent["history_visibility"] || HistoryVisibility.Shared;
1062
+ }
1063
+
1064
+ /**
1065
+ * Returns the guest access based on the m.room.guest_access state event, defaulting to `shared`.
1066
+ * @returns the guest_access applied to this room
1067
+ */
1068
+ public getGuestAccess(): GuestAccess {
1069
+ const guestAccessEvent = this.getStateEvents(EventType.RoomGuestAccess, "");
1070
+ const guestAccessContent = guestAccessEvent?.getContent() ?? {};
1071
+ return guestAccessContent["guest_access"] || GuestAccess.Forbidden;
1072
+ }
1073
+
1074
+ /**
1075
+ * Find the predecessor room based on this room state.
1076
+ *
1077
+ * @param msc3946ProcessDynamicPredecessor - if true, look for an
1078
+ * m.room.predecessor state event and use it if found (MSC3946).
1079
+ * @returns null if this room has no predecessor. Otherwise, returns
1080
+ * the roomId, last eventId and viaServers of the predecessor room.
1081
+ *
1082
+ * If msc3946ProcessDynamicPredecessor is true, use m.predecessor events
1083
+ * as well as m.room.create events to find predecessors.
1084
+ *
1085
+ * Note: if an m.predecessor event is used, eventId may be undefined
1086
+ * since last_known_event_id is optional.
1087
+ *
1088
+ * Note: viaServers may be undefined, and will definitely be undefined if
1089
+ * this predecessor comes from a RoomCreate event (rather than a
1090
+ * RoomPredecessor, which has the optional via_servers property).
1091
+ */
1092
+ public findPredecessor(
1093
+ msc3946ProcessDynamicPredecessor = false,
1094
+ ): { roomId: string; eventId?: string; viaServers?: string[] } | null {
1095
+ // Note: the tests for this function are against Room.findPredecessor,
1096
+ // which just calls through to here.
1097
+
1098
+ if (msc3946ProcessDynamicPredecessor) {
1099
+ const predecessorEvent = this.getStateEvents(EventType.RoomPredecessor, "");
1100
+ if (predecessorEvent) {
1101
+ const content = predecessorEvent.getContent<{
1102
+ predecessor_room_id: string;
1103
+ last_known_event_id?: string;
1104
+ via_servers?: string[];
1105
+ }>();
1106
+ const roomId = content.predecessor_room_id;
1107
+ let eventId = content.last_known_event_id;
1108
+ if (typeof eventId !== "string") {
1109
+ eventId = undefined;
1110
+ }
1111
+ let viaServers = content.via_servers;
1112
+ if (!Array.isArray(viaServers)) {
1113
+ viaServers = undefined;
1114
+ }
1115
+ if (typeof roomId === "string") {
1116
+ return { roomId, eventId, viaServers };
1117
+ }
1118
+ }
1119
+ }
1120
+
1121
+ const createEvent = this.getStateEvents(EventType.RoomCreate, "");
1122
+ if (createEvent) {
1123
+ const predecessor = createEvent.getContent<{
1124
+ predecessor?: Partial<{
1125
+ room_id: string;
1126
+ event_id: string;
1127
+ }>;
1128
+ }>()["predecessor"];
1129
+ if (predecessor) {
1130
+ const roomId = predecessor["room_id"];
1131
+ if (typeof roomId === "string") {
1132
+ let eventId = predecessor["event_id"];
1133
+ if (typeof eventId !== "string" || eventId === "") {
1134
+ eventId = undefined;
1135
+ }
1136
+ return { roomId, eventId };
1137
+ }
1138
+ }
1139
+ }
1140
+ return null;
1141
+ }
1142
+
1143
+ private updateThirdPartyTokenCache(memberEvent: BriijEvent): void {
1144
+ if (!memberEvent.getContent().third_party_invite) {
1145
+ return;
1146
+ }
1147
+ const token = (memberEvent.getContent().third_party_invite.signed || {}).token;
1148
+ if (!token) {
1149
+ return;
1150
+ }
1151
+ const threePidInvite = this.getStateEvents(EventType.RoomThirdPartyInvite, token);
1152
+ if (!threePidInvite) {
1153
+ return;
1154
+ }
1155
+ this.tokenToInvite[token] = memberEvent;
1156
+ }
1157
+
1158
+ private updateDisplayNameCache(userId: string, displayName: string): void {
1159
+ const oldName = this.userIdsToDisplayNames[userId];
1160
+
1161
+ delete this.userIdsToDisplayNames[userId];
1162
+ if (oldName) {
1163
+ // Remove the old name from the cache.
1164
+ // We clobber the user_id > name lookup but the name -> [user_id] lookup
1165
+ // means we need to remove that user ID from that array rather than nuking
1166
+ // the lot.
1167
+ const strippedOldName = removeHiddenChars(oldName);
1168
+
1169
+ const existingUserIds = this.displayNameToUserIds.get(strippedOldName);
1170
+ if (existingUserIds) {
1171
+ // remove this user ID from this array
1172
+ const filteredUserIDs = existingUserIds.filter((id) => id !== userId);
1173
+ this.displayNameToUserIds.set(strippedOldName, filteredUserIDs);
1174
+ }
1175
+ }
1176
+
1177
+ this.userIdsToDisplayNames[userId] = displayName;
1178
+
1179
+ const strippedDisplayname = displayName && removeHiddenChars(displayName);
1180
+ // an empty stripped displayname (undefined/'') will be set to MXID in room-member.js
1181
+ if (strippedDisplayname) {
1182
+ const arr = this.displayNameToUserIds.get(strippedDisplayname) ?? [];
1183
+ arr.push(userId);
1184
+ this.displayNameToUserIds.set(strippedDisplayname, arr);
1185
+ }
1186
+ }
1187
+ }
1188
+
1189
+ /**
1190
+ * Get the set of creator user IDs for a room: empty if the room is not a 'hydra' room, otherwise
1191
+ * computed from the sender of the m.room.create event plus the additional_creators field.
1192
+ * @param roomVersion The version of the room
1193
+ * @param roomCreateEvent The m.room.create event for the room
1194
+ * @returns A set of user IDs of the creators of the room.
1195
+ */
1196
+ function getCreators(roomVersion: string, roomCreateEvent: BriijEvent | null): Set<string> {
1197
+ const creators = new Set<string>();
1198
+ if (shouldUseHydraForRoomVersion(roomVersion) && roomCreateEvent) {
1199
+ const roomCreateSender = roomCreateEvent.getSender();
1200
+ if (roomCreateSender) creators.add(roomCreateSender);
1201
+ const additionalCreators = roomCreateEvent.getDirectionalContent().additional_creators;
1202
+ if (Array.isArray(additionalCreators)) additionalCreators.forEach((c) => creators.add(c));
1203
+ }
1204
+ return creators;
1205
+ }
1206
+
1207
+ /**
1208
+ *
1209
+ * @param userId The user ID to compute the power level for
1210
+ * @param powerLevelEvents The power level event for the room
1211
+ * @param creators The set of creator user IDs for the room if the room is a 'hydra' room, otherwise the empty set.
1212
+ */
1213
+ function powerLevelForUserId(userId: string, powerLevelEvent: BriijEvent, creators: Set<string>): number {
1214
+ if (creators.has(userId)) {
1215
+ // As of "Hydra", If the user is a creator, they always have the highest power level
1216
+ return Infinity;
1217
+ } else {
1218
+ const evContent = powerLevelEvent.getDirectionalContent();
1219
+
1220
+ const users: { [userId: string]: number } = evContent.users || {};
1221
+
1222
+ if (users[userId] !== undefined && Number.isInteger(users[userId])) {
1223
+ return users[userId];
1224
+ } else if (evContent.users_default !== undefined) {
1225
+ return evContent.users_default;
1226
+ } else {
1227
+ return 0;
1228
+ }
1229
+ }
1230
+ }