matrix-js-sdk 41.8.0 → 41.9.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 (458) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +1 -1
  3. package/lib/@types/AESEncryptedSecretStoragePayload.js +3 -1
  4. package/lib/@types/IIdentityServerProvider.js +3 -1
  5. package/lib/@types/PushRules.js +7 -7
  6. package/lib/@types/PushRules.js.map +1 -1
  7. package/lib/@types/auth.js +4 -4
  8. package/lib/@types/auth.js.map +1 -1
  9. package/lib/@types/beacon.js +2 -2
  10. package/lib/@types/beacon.js.map +1 -1
  11. package/lib/@types/common.js +3 -1
  12. package/lib/@types/crypto.js +3 -1
  13. package/lib/@types/event.js +20 -20
  14. package/lib/@types/event.js.map +1 -1
  15. package/lib/@types/events.js +3 -1
  16. package/lib/@types/extensible_events.js +6 -6
  17. package/lib/@types/extensible_events.js.map +1 -1
  18. package/lib/@types/global.d.js.map +1 -1
  19. package/lib/@types/json.js +3 -1
  20. package/lib/@types/local_notifications.js +3 -1
  21. package/lib/@types/location.js +4 -4
  22. package/lib/@types/location.js.map +1 -1
  23. package/lib/@types/matrix-sdk-crypto-wasm.d.js +3 -1
  24. package/lib/@types/media.js +3 -1
  25. package/lib/@types/membership.js +1 -1
  26. package/lib/@types/membership.js.map +1 -1
  27. package/lib/@types/partials.js +6 -6
  28. package/lib/@types/partials.js.map +1 -1
  29. package/lib/@types/polls.js +5 -5
  30. package/lib/@types/polls.js.map +1 -1
  31. package/lib/@types/read_receipts.js +2 -2
  32. package/lib/@types/read_receipts.js.map +1 -1
  33. package/lib/@types/registration.js +3 -1
  34. package/lib/@types/requests.js +1 -1
  35. package/lib/@types/requests.js.map +1 -1
  36. package/lib/@types/retention.js +1 -1
  37. package/lib/@types/retention.js.map +1 -1
  38. package/lib/@types/search.js +1 -1
  39. package/lib/@types/search.js.map +1 -1
  40. package/lib/@types/signed.js +3 -1
  41. package/lib/@types/spaces.js +3 -1
  42. package/lib/@types/state_events.js +3 -1
  43. package/lib/@types/synapse.js +3 -1
  44. package/lib/@types/sync.js +1 -1
  45. package/lib/@types/sync.js.map +1 -1
  46. package/lib/@types/threepids.js +1 -1
  47. package/lib/@types/threepids.js.map +1 -1
  48. package/lib/@types/topic.js +1 -1
  49. package/lib/@types/topic.js.map +1 -1
  50. package/lib/@types/uia.js +3 -1
  51. package/lib/NamespacedValue.js +8 -8
  52. package/lib/NamespacedValue.js.map +1 -1
  53. package/lib/ReEmitter.js +9 -16
  54. package/lib/ReEmitter.js.map +1 -1
  55. package/lib/ToDeviceMessageQueue.js +49 -57
  56. package/lib/ToDeviceMessageQueue.js.map +1 -1
  57. package/lib/autodiscovery.js +232 -247
  58. package/lib/autodiscovery.js.map +1 -1
  59. package/lib/base64.js +1 -1
  60. package/lib/base64.js.map +1 -1
  61. package/lib/browser-index.d.ts +2 -2
  62. package/lib/browser-index.d.ts.map +1 -1
  63. package/lib/browser-index.js +5 -5
  64. package/lib/browser-index.js.map +1 -1
  65. package/lib/capabilityPoller.js +19 -22
  66. package/lib/capabilityPoller.js.map +1 -1
  67. package/lib/client.d.ts +2 -8
  68. package/lib/client.d.ts.map +1 -1
  69. package/lib/client.js +2043 -2487
  70. package/lib/client.js.map +1 -1
  71. package/lib/common-crypto/CryptoBackend.js +2 -2
  72. package/lib/common-crypto/CryptoBackend.js.map +1 -1
  73. package/lib/common-crypto/key-passphrase.js.map +1 -1
  74. package/lib/content-helpers.js +43 -48
  75. package/lib/content-helpers.js.map +1 -1
  76. package/lib/content-repo.js +14 -24
  77. package/lib/content-repo.js.map +1 -1
  78. package/lib/crypto/store/base.js +6 -6
  79. package/lib/crypto/store/base.js.map +1 -1
  80. package/lib/crypto/store/indexeddb-crypto-store-backend.js +190 -238
  81. package/lib/crypto/store/indexeddb-crypto-store-backend.js.map +1 -1
  82. package/lib/crypto/store/indexeddb-crypto-store.js +25 -30
  83. package/lib/crypto/store/indexeddb-crypto-store.js.map +1 -1
  84. package/lib/crypto/store/localStorage-crypto-store.js +113 -145
  85. package/lib/crypto/store/localStorage-crypto-store.js.map +1 -1
  86. package/lib/crypto/store/memory-crypto-store.js +74 -105
  87. package/lib/crypto/store/memory-crypto-store.js.map +1 -1
  88. package/lib/crypto-api/CryptoEvent.js +1 -1
  89. package/lib/crypto-api/CryptoEvent.js.map +1 -1
  90. package/lib/crypto-api/CryptoEventHandlerMap.js +3 -1
  91. package/lib/crypto-api/index.d.ts +15 -6
  92. package/lib/crypto-api/index.d.ts.map +1 -1
  93. package/lib/crypto-api/index.js +22 -22
  94. package/lib/crypto-api/index.js.map +1 -1
  95. package/lib/crypto-api/key-passphrase.js +15 -23
  96. package/lib/crypto-api/key-passphrase.js.map +1 -1
  97. package/lib/crypto-api/keybackup.js +3 -1
  98. package/lib/crypto-api/recovery-key.js +11 -12
  99. package/lib/crypto-api/recovery-key.js.map +1 -1
  100. package/lib/crypto-api/verification.js +3 -3
  101. package/lib/crypto-api/verification.js.map +1 -1
  102. package/lib/digest.js +7 -14
  103. package/lib/digest.js.map +1 -1
  104. package/lib/embedded.d.ts.map +1 -1
  105. package/lib/embedded.js +380 -505
  106. package/lib/embedded.js.map +1 -1
  107. package/lib/errors.js +2 -2
  108. package/lib/errors.js.map +1 -1
  109. package/lib/event-mapper.js +10 -12
  110. package/lib/event-mapper.js.map +1 -1
  111. package/lib/extensible_events_v1/ExtensibleEvent.js.map +1 -1
  112. package/lib/extensible_events_v1/InvalidEventError.js.map +1 -1
  113. package/lib/extensible_events_v1/MessageEvent.js +11 -13
  114. package/lib/extensible_events_v1/MessageEvent.js.map +1 -1
  115. package/lib/extensible_events_v1/PollEndEvent.js +3 -4
  116. package/lib/extensible_events_v1/PollEndEvent.js.map +1 -1
  117. package/lib/extensible_events_v1/PollResponseEvent.js +5 -6
  118. package/lib/extensible_events_v1/PollResponseEvent.js.map +1 -1
  119. package/lib/extensible_events_v1/PollStartEvent.js +8 -10
  120. package/lib/extensible_events_v1/PollStartEvent.js.map +1 -1
  121. package/lib/extensible_events_v1/utilities.js.map +1 -1
  122. package/lib/feature.js +18 -31
  123. package/lib/feature.js.map +1 -1
  124. package/lib/filter-component.d.ts.map +1 -1
  125. package/lib/filter-component.js +20 -26
  126. package/lib/filter-component.js.map +1 -1
  127. package/lib/filter.js +14 -17
  128. package/lib/filter.js.map +1 -1
  129. package/lib/http-api/errors.js +28 -43
  130. package/lib/http-api/errors.js.map +1 -1
  131. package/lib/http-api/fetch.js +141 -159
  132. package/lib/http-api/fetch.js.map +1 -1
  133. package/lib/http-api/index.js +17 -20
  134. package/lib/http-api/index.js.map +1 -1
  135. package/lib/http-api/interface.js +1 -1
  136. package/lib/http-api/interface.js.map +1 -1
  137. package/lib/http-api/method.js +1 -1
  138. package/lib/http-api/method.js.map +1 -1
  139. package/lib/http-api/prefix.js +3 -3
  140. package/lib/http-api/prefix.js.map +1 -1
  141. package/lib/http-api/refresh.js +74 -94
  142. package/lib/http-api/refresh.js.map +1 -1
  143. package/lib/http-api/utils.d.ts +1 -1
  144. package/lib/http-api/utils.d.ts.map +1 -1
  145. package/lib/http-api/utils.js +34 -42
  146. package/lib/http-api/utils.js.map +1 -1
  147. package/lib/index.js.map +1 -1
  148. package/lib/indexeddb-helpers.js +3 -3
  149. package/lib/indexeddb-helpers.js.map +1 -1
  150. package/lib/indexeddb-worker.js.map +1 -1
  151. package/lib/interactive-auth.d.ts +5 -5
  152. package/lib/interactive-auth.d.ts.map +1 -1
  153. package/lib/interactive-auth.js +172 -204
  154. package/lib/interactive-auth.js.map +1 -1
  155. package/lib/logger.js +21 -57
  156. package/lib/logger.js.map +1 -1
  157. package/lib/matrix.js +7 -11
  158. package/lib/matrix.js.map +1 -1
  159. package/lib/matrixrtc/CallMembership.js +80 -74
  160. package/lib/matrixrtc/CallMembership.js.map +1 -1
  161. package/lib/matrixrtc/EncryptionManager.js +1 -1
  162. package/lib/matrixrtc/EncryptionManager.js.map +1 -1
  163. package/lib/matrixrtc/IKeyTransport.js +1 -1
  164. package/lib/matrixrtc/IKeyTransport.js.map +1 -1
  165. package/lib/matrixrtc/IMembershipManager.js +1 -1
  166. package/lib/matrixrtc/IMembershipManager.js.map +1 -1
  167. package/lib/matrixrtc/LivekitTransport.d.ts +1 -1
  168. package/lib/matrixrtc/LivekitTransport.js +4 -4
  169. package/lib/matrixrtc/LivekitTransport.js.map +1 -1
  170. package/lib/matrixrtc/MatrixRTCSession.js +137 -187
  171. package/lib/matrixrtc/MatrixRTCSession.js.map +1 -1
  172. package/lib/matrixrtc/MatrixRTCSessionManager.js +36 -41
  173. package/lib/matrixrtc/MatrixRTCSessionManager.js.map +1 -1
  174. package/lib/matrixrtc/MembershipManager.js +332 -378
  175. package/lib/matrixrtc/MembershipManager.js.map +1 -1
  176. package/lib/matrixrtc/MembershipManagerActionScheduler.js +54 -63
  177. package/lib/matrixrtc/MembershipManagerActionScheduler.js.map +1 -1
  178. package/lib/matrixrtc/RTCEncryptionManager.js +119 -143
  179. package/lib/matrixrtc/RTCEncryptionManager.js.map +1 -1
  180. package/lib/matrixrtc/ToDeviceKeyTransport.js +53 -58
  181. package/lib/matrixrtc/ToDeviceKeyTransport.js.map +1 -1
  182. package/lib/matrixrtc/index.js.map +1 -1
  183. package/lib/matrixrtc/membershipData/common.js +1 -1
  184. package/lib/matrixrtc/membershipData/common.js.map +1 -1
  185. package/lib/matrixrtc/membershipData/index.js.map +1 -1
  186. package/lib/matrixrtc/membershipData/rtc.js +15 -23
  187. package/lib/matrixrtc/membershipData/rtc.js.map +1 -1
  188. package/lib/matrixrtc/membershipData/session.js +4 -5
  189. package/lib/matrixrtc/membershipData/session.js.map +1 -1
  190. package/lib/matrixrtc/types.js +4 -6
  191. package/lib/matrixrtc/types.js.map +1 -1
  192. package/lib/matrixrtc/utils.js +4 -11
  193. package/lib/matrixrtc/utils.js.map +1 -1
  194. package/lib/models/MSC3089Branch.js +91 -116
  195. package/lib/models/MSC3089Branch.js.map +1 -1
  196. package/lib/models/MSC3089TreeSpace.js +209 -245
  197. package/lib/models/MSC3089TreeSpace.js.map +1 -1
  198. package/lib/models/ToDeviceMessage.js +3 -1
  199. package/lib/models/beacon.js +14 -13
  200. package/lib/models/beacon.js.map +1 -1
  201. package/lib/models/compare-event-ordering.js +13 -13
  202. package/lib/models/compare-event-ordering.js.map +1 -1
  203. package/lib/models/device.js +3 -3
  204. package/lib/models/device.js.map +1 -1
  205. package/lib/models/event-context.js +5 -8
  206. package/lib/models/event-context.js.map +1 -1
  207. package/lib/models/event-status.js +1 -1
  208. package/lib/models/event-status.js.map +1 -1
  209. package/lib/models/event-timeline-set.js +88 -94
  210. package/lib/models/event-timeline-set.js.map +1 -1
  211. package/lib/models/event-timeline.js +28 -30
  212. package/lib/models/event-timeline.js.map +1 -1
  213. package/lib/models/event.js +182 -226
  214. package/lib/models/event.js.map +1 -1
  215. package/lib/models/invites-ignorer-types.js +4 -4
  216. package/lib/models/invites-ignorer-types.js.map +1 -1
  217. package/lib/models/invites-ignorer.js +159 -179
  218. package/lib/models/invites-ignorer.js.map +1 -1
  219. package/lib/models/poll.js +71 -81
  220. package/lib/models/poll.js.map +1 -1
  221. package/lib/models/profile-keys.js +2 -2
  222. package/lib/models/profile-keys.js.map +1 -1
  223. package/lib/models/read-receipt.js +40 -56
  224. package/lib/models/read-receipt.js.map +1 -1
  225. package/lib/models/related-relations.js.map +1 -1
  226. package/lib/models/relations-container.js +22 -23
  227. package/lib/models/relations-container.js.map +1 -1
  228. package/lib/models/relations.js +133 -159
  229. package/lib/models/relations.js.map +1 -1
  230. package/lib/models/room-member.js +24 -29
  231. package/lib/models/room-member.js.map +1 -1
  232. package/lib/models/room-receipts.js +29 -43
  233. package/lib/models/room-receipts.js.map +1 -1
  234. package/lib/models/room-retention.js +74 -83
  235. package/lib/models/room-retention.js.map +1 -1
  236. package/lib/models/room-state.js +143 -172
  237. package/lib/models/room-state.js.map +1 -1
  238. package/lib/models/room-sticky-events.d.ts +1 -0
  239. package/lib/models/room-sticky-events.d.ts.map +1 -1
  240. package/lib/models/room-sticky-events.js +45 -65
  241. package/lib/models/room-sticky-events.js.map +1 -1
  242. package/lib/models/room-summary.js.map +1 -1
  243. package/lib/models/room.d.ts.map +1 -1
  244. package/lib/models/room.js +765 -909
  245. package/lib/models/room.js.map +1 -1
  246. package/lib/models/search-result.js +5 -5
  247. package/lib/models/search-result.js.map +1 -1
  248. package/lib/models/thread.js +225 -285
  249. package/lib/models/thread.js.map +1 -1
  250. package/lib/models/typed-event-emitter.js +7 -18
  251. package/lib/models/typed-event-emitter.js.map +1 -1
  252. package/lib/models/user.js +8 -8
  253. package/lib/models/user.js.map +1 -1
  254. package/lib/oidc/authorize.js +208 -241
  255. package/lib/oidc/authorize.js.map +1 -1
  256. package/lib/oidc/discovery.js +23 -36
  257. package/lib/oidc/discovery.js.map +1 -1
  258. package/lib/oidc/error.js +1 -1
  259. package/lib/oidc/error.js.map +1 -1
  260. package/lib/oidc/index.js +1 -0
  261. package/lib/oidc/index.js.map +1 -1
  262. package/lib/oidc/register.js +60 -66
  263. package/lib/oidc/register.js.map +1 -1
  264. package/lib/oidc/tokenRefresher.js +77 -91
  265. package/lib/oidc/tokenRefresher.js.map +1 -1
  266. package/lib/oidc/validate.js +18 -18
  267. package/lib/oidc/validate.js.map +1 -1
  268. package/lib/pushprocessor.js +71 -82
  269. package/lib/pushprocessor.js.map +1 -1
  270. package/lib/randomstring.js +9 -9
  271. package/lib/randomstring.js.map +1 -1
  272. package/lib/realtime-callbacks.js +25 -28
  273. package/lib/realtime-callbacks.js.map +1 -1
  274. package/lib/receipt-accumulator.d.ts +2 -0
  275. package/lib/receipt-accumulator.d.ts.map +1 -1
  276. package/lib/receipt-accumulator.js +14 -22
  277. package/lib/receipt-accumulator.js.map +1 -1
  278. package/lib/rendezvous/MSC4108SignInWithQR.js +271 -302
  279. package/lib/rendezvous/MSC4108SignInWithQR.js.map +1 -1
  280. package/lib/rendezvous/RendezvousChannel.js +3 -1
  281. package/lib/rendezvous/RendezvousCode.js +3 -1
  282. package/lib/rendezvous/RendezvousError.js.map +1 -1
  283. package/lib/rendezvous/RendezvousFailureReason.js +2 -2
  284. package/lib/rendezvous/RendezvousFailureReason.js.map +1 -1
  285. package/lib/rendezvous/RendezvousIntent.js +1 -1
  286. package/lib/rendezvous/RendezvousIntent.js.map +1 -1
  287. package/lib/rendezvous/RendezvousTransport.js +3 -1
  288. package/lib/rendezvous/channels/MSC4108SecureChannel.js +123 -147
  289. package/lib/rendezvous/channels/MSC4108SecureChannel.js.map +1 -1
  290. package/lib/rendezvous/index.js +44 -69
  291. package/lib/rendezvous/index.js.map +1 -1
  292. package/lib/rendezvous/transports/MSC4108RendezvousSession.d.ts +1 -1
  293. package/lib/rendezvous/transports/MSC4108RendezvousSession.js +134 -152
  294. package/lib/rendezvous/transports/MSC4108RendezvousSession.js.map +1 -1
  295. package/lib/retentionPolicy.js +6 -9
  296. package/lib/retentionPolicy.js.map +1 -1
  297. package/lib/room-hierarchy.js +52 -60
  298. package/lib/room-hierarchy.js.map +1 -1
  299. package/lib/rust-crypto/CrossSigningIdentity.js +94 -104
  300. package/lib/rust-crypto/CrossSigningIdentity.js.map +1 -1
  301. package/lib/rust-crypto/DehydratedDeviceManager.js +157 -190
  302. package/lib/rust-crypto/DehydratedDeviceManager.js.map +1 -1
  303. package/lib/rust-crypto/KeyClaimManager.js +18 -22
  304. package/lib/rust-crypto/KeyClaimManager.js.map +1 -1
  305. package/lib/rust-crypto/OutgoingRequestProcessor.js +109 -139
  306. package/lib/rust-crypto/OutgoingRequestProcessor.js.map +1 -1
  307. package/lib/rust-crypto/OutgoingRequestsManager.js +66 -80
  308. package/lib/rust-crypto/OutgoingRequestsManager.js.map +1 -1
  309. package/lib/rust-crypto/PerSessionKeyBackupDownloader.d.ts +1 -1
  310. package/lib/rust-crypto/PerSessionKeyBackupDownloader.js +196 -224
  311. package/lib/rust-crypto/PerSessionKeyBackupDownloader.js.map +1 -1
  312. package/lib/rust-crypto/RoomEncryptor.js +127 -143
  313. package/lib/rust-crypto/RoomEncryptor.js.map +1 -1
  314. package/lib/rust-crypto/backup.js +453 -549
  315. package/lib/rust-crypto/backup.js.map +1 -1
  316. package/lib/rust-crypto/constants.js +1 -1
  317. package/lib/rust-crypto/constants.js.map +1 -1
  318. package/lib/rust-crypto/device-converter.js +15 -28
  319. package/lib/rust-crypto/device-converter.js.map +1 -1
  320. package/lib/rust-crypto/index.js +103 -116
  321. package/lib/rust-crypto/index.js.map +1 -1
  322. package/lib/rust-crypto/libolm_migration.js +303 -365
  323. package/lib/rust-crypto/libolm_migration.js.map +1 -1
  324. package/lib/rust-crypto/rust-crypto.d.ts +5 -1
  325. package/lib/rust-crypto/rust-crypto.d.ts.map +1 -1
  326. package/lib/rust-crypto/rust-crypto.js +1067 -1332
  327. package/lib/rust-crypto/rust-crypto.js.map +1 -1
  328. package/lib/rust-crypto/secret-storage.js +12 -25
  329. package/lib/rust-crypto/secret-storage.js.map +1 -1
  330. package/lib/rust-crypto/verification.js +137 -189
  331. package/lib/rust-crypto/verification.js.map +1 -1
  332. package/lib/scheduler.js +44 -19
  333. package/lib/scheduler.js.map +1 -1
  334. package/lib/secret-storage.js +179 -213
  335. package/lib/secret-storage.js.map +1 -1
  336. package/lib/serverCapabilities.js +6 -9
  337. package/lib/serverCapabilities.js.map +1 -1
  338. package/lib/service-types.js +1 -1
  339. package/lib/service-types.js.map +1 -1
  340. package/lib/sliding-sync-sdk.d.ts.map +1 -1
  341. package/lib/sliding-sync-sdk.js +368 -424
  342. package/lib/sliding-sync-sdk.js.map +1 -1
  343. package/lib/sliding-sync.js +135 -171
  344. package/lib/sliding-sync.js.map +1 -1
  345. package/lib/store/index.js +3 -1
  346. package/lib/store/indexeddb-backend.js +3 -1
  347. package/lib/store/indexeddb-local-backend.js +194 -253
  348. package/lib/store/indexeddb-local-backend.js.map +1 -1
  349. package/lib/store/indexeddb-remote-backend.js +33 -63
  350. package/lib/store/indexeddb-remote-backend.js.map +1 -1
  351. package/lib/store/indexeddb-store-worker.js +22 -23
  352. package/lib/store/indexeddb-store-worker.js.map +1 -1
  353. package/lib/store/indexeddb.js +44 -71
  354. package/lib/store/indexeddb.js.map +1 -1
  355. package/lib/store/local-storage-events-emitter.js +2 -2
  356. package/lib/store/local-storage-events-emitter.js.map +1 -1
  357. package/lib/store/memory.js +34 -57
  358. package/lib/store/memory.js.map +1 -1
  359. package/lib/store/stub.js +22 -35
  360. package/lib/store/stub.js.map +1 -1
  361. package/lib/sync-accumulator.js +54 -66
  362. package/lib/sync-accumulator.js.map +1 -1
  363. package/lib/sync.d.ts.map +1 -1
  364. package/lib/sync.js +905 -998
  365. package/lib/sync.js.map +1 -1
  366. package/lib/testing.js +63 -105
  367. package/lib/testing.js.map +1 -1
  368. package/lib/thread-utils.js +1 -4
  369. package/lib/thread-utils.js.map +1 -1
  370. package/lib/timeline-window.js +89 -102
  371. package/lib/timeline-window.js.map +1 -1
  372. package/lib/types.js +1 -1
  373. package/lib/types.js.map +1 -1
  374. package/lib/utils/decryptAESSecretStorageItem.js +14 -25
  375. package/lib/utils/decryptAESSecretStorageItem.js.map +1 -1
  376. package/lib/utils/encryptAESSecretStorageItem.js +27 -38
  377. package/lib/utils/encryptAESSecretStorageItem.js.map +1 -1
  378. package/lib/utils/internal/deriveKeys.js +25 -32
  379. package/lib/utils/internal/deriveKeys.js.map +1 -1
  380. package/lib/utils/roomVersion.js +1 -1
  381. package/lib/utils/roomVersion.js.map +1 -1
  382. package/lib/utils.js +83 -135
  383. package/lib/utils.js.map +1 -1
  384. package/lib/version-support.js +3 -3
  385. package/lib/version-support.js.map +1 -1
  386. package/lib/webrtc/audioContext.js +5 -6
  387. package/lib/webrtc/audioContext.js.map +1 -1
  388. package/lib/webrtc/call.js +1081 -1250
  389. package/lib/webrtc/call.js.map +1 -1
  390. package/lib/webrtc/callEventHandler.js +202 -214
  391. package/lib/webrtc/callEventHandler.js.map +1 -1
  392. package/lib/webrtc/callEventTypes.js +2 -2
  393. package/lib/webrtc/callEventTypes.js.map +1 -1
  394. package/lib/webrtc/callFeed.js +18 -20
  395. package/lib/webrtc/callFeed.js.map +1 -1
  396. package/lib/webrtc/groupCall.js +513 -602
  397. package/lib/webrtc/groupCall.js.map +1 -1
  398. package/lib/webrtc/groupCallEventHandler.js +59 -62
  399. package/lib/webrtc/groupCallEventHandler.js.map +1 -1
  400. package/lib/webrtc/mediaHandler.js +198 -232
  401. package/lib/webrtc/mediaHandler.js.map +1 -1
  402. package/lib/webrtc/stats/callFeedStatsReporter.js +16 -20
  403. package/lib/webrtc/stats/callFeedStatsReporter.js.map +1 -1
  404. package/lib/webrtc/stats/callStatsReportGatherer.js +67 -75
  405. package/lib/webrtc/stats/callStatsReportGatherer.js.map +1 -1
  406. package/lib/webrtc/stats/callStatsReportSummary.js +3 -1
  407. package/lib/webrtc/stats/connectionStats.js.map +1 -1
  408. package/lib/webrtc/stats/connectionStatsBuilder.js +2 -2
  409. package/lib/webrtc/stats/connectionStatsBuilder.js.map +1 -1
  410. package/lib/webrtc/stats/connectionStatsReportBuilder.js +20 -24
  411. package/lib/webrtc/stats/connectionStatsReportBuilder.js.map +1 -1
  412. package/lib/webrtc/stats/groupCallStats.js +6 -8
  413. package/lib/webrtc/stats/groupCallStats.js.map +1 -1
  414. package/lib/webrtc/stats/media/mediaSsrcHandler.js +7 -8
  415. package/lib/webrtc/stats/media/mediaSsrcHandler.js.map +1 -1
  416. package/lib/webrtc/stats/media/mediaTrackHandler.js +7 -9
  417. package/lib/webrtc/stats/media/mediaTrackHandler.js.map +1 -1
  418. package/lib/webrtc/stats/media/mediaTrackStats.js +3 -3
  419. package/lib/webrtc/stats/media/mediaTrackStats.js.map +1 -1
  420. package/lib/webrtc/stats/media/mediaTrackStatsHandler.js +7 -7
  421. package/lib/webrtc/stats/media/mediaTrackStatsHandler.js.map +1 -1
  422. package/lib/webrtc/stats/statsReport.js +1 -1
  423. package/lib/webrtc/stats/statsReport.js.map +1 -1
  424. package/lib/webrtc/stats/statsReportEmitter.js.map +1 -1
  425. package/lib/webrtc/stats/summaryStatsReportGatherer.js +14 -14
  426. package/lib/webrtc/stats/summaryStatsReportGatherer.js.map +1 -1
  427. package/lib/webrtc/stats/trackStatsBuilder.js +32 -34
  428. package/lib/webrtc/stats/trackStatsBuilder.js.map +1 -1
  429. package/lib/webrtc/stats/transportStats.js +3 -1
  430. package/lib/webrtc/stats/transportStatsBuilder.js +9 -9
  431. package/lib/webrtc/stats/transportStatsBuilder.js.map +1 -1
  432. package/lib/webrtc/stats/valueFormatter.js +1 -1
  433. package/lib/webrtc/stats/valueFormatter.js.map +1 -1
  434. package/package.json +18 -33
  435. package/src/@types/global.d.ts +2 -2
  436. package/src/ToDeviceMessageQueue.ts +2 -2
  437. package/src/browser-index.ts +4 -4
  438. package/src/client.ts +15 -20
  439. package/src/crypto-api/index.ts +17 -6
  440. package/src/embedded.ts +4 -6
  441. package/src/filter-component.ts +1 -0
  442. package/src/http-api/utils.ts +1 -1
  443. package/src/interactive-auth.ts +11 -5
  444. package/src/matrixrtc/LivekitTransport.ts +1 -1
  445. package/src/matrixrtc/MatrixRTCSession.ts +1 -1
  446. package/src/models/MSC3089Branch.ts +1 -1
  447. package/src/models/room-sticky-events.ts +1 -0
  448. package/src/models/room.ts +9 -11
  449. package/src/receipt-accumulator.ts +2 -0
  450. package/src/rendezvous/index.ts +1 -1
  451. package/src/rendezvous/transports/MSC4108RendezvousSession.ts +2 -2
  452. package/src/rust-crypto/PerSessionKeyBackupDownloader.ts +1 -1
  453. package/src/rust-crypto/index.ts +6 -6
  454. package/src/rust-crypto/rust-crypto.ts +31 -7
  455. package/src/rust-crypto/verification.ts +1 -1
  456. package/src/sliding-sync-sdk.ts +5 -7
  457. package/src/store/indexeddb-local-backend.ts +3 -3
  458. package/src/sync.ts +6 -8
@@ -1,5 +1,4 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
2
  /*
4
3
  Copyright 2022 The Matrix.org Foundation C.I.C.
5
4
 
@@ -32,7 +31,7 @@ import { KnownMembership } from "./@types/membership.js";
32
31
  // Number of consecutive failed syncs that will lead to a syncState of ERROR as opposed
33
32
  // to RECONNECTING. This is needed to inform the client of server issues when the
34
33
  // keepAlive is successful but the server /sync fails.
35
- var FAILED_SYNC_ERROR_THRESHOLD = 3;
34
+ const FAILED_SYNC_ERROR_THRESHOLD = 3;
36
35
  class ExtensionE2EE {
37
36
  constructor(crypto) {
38
37
  this.crypto = crypto;
@@ -43,43 +42,37 @@ class ExtensionE2EE {
43
42
  when() {
44
43
  return ExtensionState.PreProcess;
45
44
  }
46
- onRequest(isInitial) {
47
- var _this = this;
48
- return _asyncToGenerator(function* () {
49
- if (isInitial) {
50
- // In SSS, the `?pos=` contains the stream position for device list updates.
51
- // If we do not have a `?pos=` (e.g because we forgot it, or because the server
52
- // invalidated our connection) then we MUST invlaidate all device lists because
53
- // the server will not tell us the delta. This will then cause UTDs as we will fail
54
- // to encrypt for new devices. This is an expensive call, so we should
55
- // really really remember `?pos=` wherever possible.
56
- logger.log("ExtensionE2EE: invalidating all device lists due to missing 'pos'");
57
- yield _this.crypto.markAllTrackedUsersAsDirty();
58
- }
59
- return {
60
- enabled: true // this is sticky so only send it on the initial request
61
- };
62
- })();
63
- }
64
- onResponse(data) {
65
- var _this2 = this;
66
- return _asyncToGenerator(function* () {
67
- // Handle device list updates
68
- if (data.device_lists) {
69
- yield _this2.crypto.processDeviceLists(data.device_lists);
70
- }
45
+ async onRequest(isInitial) {
46
+ if (isInitial) {
47
+ // In SSS, the `?pos=` contains the stream position for device list updates.
48
+ // If we do not have a `?pos=` (e.g because we forgot it, or because the server
49
+ // invalidated our connection) then we MUST invlaidate all device lists because
50
+ // the server will not tell us the delta. This will then cause UTDs as we will fail
51
+ // to encrypt for new devices. This is an expensive call, so we should
52
+ // really really remember `?pos=` wherever possible.
53
+ logger.log("ExtensionE2EE: invalidating all device lists due to missing 'pos'");
54
+ await this.crypto.markAllTrackedUsersAsDirty();
55
+ }
56
+ return {
57
+ enabled: true // this is sticky so only send it on the initial request
58
+ };
59
+ }
60
+ async onResponse(data) {
61
+ // Handle device list updates
62
+ if (data.device_lists) {
63
+ await this.crypto.processDeviceLists(data.device_lists);
64
+ }
71
65
 
72
- // Handle one_time_keys_count and unused_fallback_key_types
73
- yield _this2.crypto.processKeyCounts(data.device_one_time_keys_count, data["device_unused_fallback_key_types"] || data["org.matrix.msc2732.device_unused_fallback_key_types"]);
74
- _this2.crypto.onSyncCompleted({});
75
- })();
66
+ // Handle one_time_keys_count and unused_fallback_key_types
67
+ await this.crypto.processKeyCounts(data.device_one_time_keys_count, data["device_unused_fallback_key_types"] || data["org.matrix.msc2732.device_unused_fallback_key_types"]);
68
+ this.crypto.onSyncCompleted({});
76
69
  }
77
70
  }
78
71
  class ExtensionToDevice {
79
72
  constructor(client, cryptoCallbacks) {
73
+ _defineProperty(this, "nextBatch", null);
80
74
  this.client = client;
81
75
  this.cryptoCallbacks = cryptoCallbacks;
82
- _defineProperty(this, "nextBatch", null);
83
76
  }
84
77
  name() {
85
78
  return "to_device";
@@ -87,34 +80,27 @@ class ExtensionToDevice {
87
80
  when() {
88
81
  return ExtensionState.PreProcess;
89
82
  }
90
- onRequest(isInitial) {
91
- var _this3 = this;
92
- return _asyncToGenerator(function* () {
93
- return {
94
- since: _this3.nextBatch !== null ? _this3.nextBatch : undefined,
95
- limit: 100,
96
- enabled: true
97
- };
98
- })();
99
- }
100
- onResponse(data) {
101
- var _this4 = this;
102
- return _asyncToGenerator(function* () {
103
- var events = data["events"] || [];
104
- var receivedToDeviceMessages;
105
- if (_this4.cryptoCallbacks) {
106
- receivedToDeviceMessages = yield _this4.cryptoCallbacks.preprocessToDeviceMessages(events);
107
- } else {
108
- receivedToDeviceMessages = events.map(rawEvent => (
109
- // Crypto is not enabled, so we just return the events.
110
- {
111
- message: rawEvent,
112
- encryptionInfo: null
113
- }));
114
- }
115
- processToDeviceMessages(receivedToDeviceMessages, _this4.client);
116
- _this4.nextBatch = data.next_batch;
117
- })();
83
+ async onRequest(isInitial) {
84
+ return {
85
+ since: this.nextBatch !== null ? this.nextBatch : undefined,
86
+ limit: 100,
87
+ enabled: true
88
+ };
89
+ }
90
+ async onResponse(data) {
91
+ const events = data["events"] || [];
92
+ let receivedToDeviceMessages;
93
+ if (this.cryptoCallbacks) {
94
+ receivedToDeviceMessages = await this.cryptoCallbacks.preprocessToDeviceMessages(events);
95
+ } else {
96
+ // Crypto is not enabled, so we just return the events.
97
+ receivedToDeviceMessages = events.map(rawEvent => ({
98
+ message: rawEvent,
99
+ encryptionInfo: null
100
+ }));
101
+ }
102
+ processToDeviceMessages(receivedToDeviceMessages, this.client);
103
+ this.nextBatch = data.next_batch;
118
104
  }
119
105
  }
120
106
  class ExtensionAccountData {
@@ -127,36 +113,31 @@ class ExtensionAccountData {
127
113
  when() {
128
114
  return ExtensionState.PostProcess;
129
115
  }
130
- onRequest(isInitial) {
131
- return _asyncToGenerator(function* () {
132
- return {
133
- enabled: true
134
- };
135
- })();
116
+ async onRequest(isInitial) {
117
+ return {
118
+ enabled: true
119
+ };
136
120
  }
137
- onResponse(data) {
138
- var _this5 = this;
139
- return _asyncToGenerator(function* () {
140
- if (data.global && data.global.length > 0) {
141
- _this5.processGlobalAccountData(data.global);
142
- }
143
- for (var roomId in data.rooms) {
144
- var accountDataEvents = mapEvents(_this5.client, roomId, data.rooms[roomId]);
145
- var room = _this5.client.getRoom(roomId);
146
- if (!room) {
147
- logger.warn("got account data for room but room doesn't exist on client:", roomId);
148
- continue;
149
- }
150
- room.addAccountData(accountDataEvents);
151
- accountDataEvents.forEach(e => {
152
- _this5.client.emit(ClientEvent.Event, e);
153
- });
121
+ async onResponse(data) {
122
+ if (data.global && data.global.length > 0) {
123
+ this.processGlobalAccountData(data.global);
124
+ }
125
+ for (const roomId in data.rooms) {
126
+ const accountDataEvents = mapEvents(this.client, roomId, data.rooms[roomId]);
127
+ const room = this.client.getRoom(roomId);
128
+ if (!room) {
129
+ logger.warn("got account data for room but room doesn't exist on client:", roomId);
130
+ continue;
154
131
  }
155
- })();
132
+ room.addAccountData(accountDataEvents);
133
+ accountDataEvents.forEach(e => {
134
+ this.client.emit(ClientEvent.Event, e);
135
+ });
136
+ }
156
137
  }
157
138
  processGlobalAccountData(globalAccountData) {
158
- var events = mapEvents(this.client, undefined, globalAccountData);
159
- var prevEventsMap = events.reduce((m, c) => {
139
+ const events = mapEvents(this.client, undefined, globalAccountData);
140
+ const prevEventsMap = events.reduce((m, c) => {
160
141
  m[c.getType()] = this.client.store.getAccountData(c.getType());
161
142
  return m;
162
143
  }, {});
@@ -167,10 +148,10 @@ class ExtensionAccountData {
167
148
  // will be updated when we receive push rules via getPushRules
168
149
  // (see sync) before syncing over the network.
169
150
  if (accountDataEvent.getType() === EventType.PushRules) {
170
- var rules = accountDataEvent.getContent();
151
+ const rules = accountDataEvent.getContent();
171
152
  this.client.setPushRules(rules);
172
153
  }
173
- var prevEvent = prevEventsMap[accountDataEvent.getType()];
154
+ const prevEvent = prevEventsMap[accountDataEvent.getType()];
174
155
  this.client.emit(ClientEvent.AccountData, accountDataEvent, prevEvent);
175
156
  return accountDataEvent;
176
157
  });
@@ -186,23 +167,18 @@ class ExtensionTyping {
186
167
  when() {
187
168
  return ExtensionState.PostProcess;
188
169
  }
189
- onRequest(isInitial) {
190
- return _asyncToGenerator(function* () {
191
- return {
192
- enabled: true
193
- };
194
- })();
170
+ async onRequest(isInitial) {
171
+ return {
172
+ enabled: true
173
+ };
195
174
  }
196
- onResponse(data) {
197
- var _this6 = this;
198
- return _asyncToGenerator(function* () {
199
- if (!(data !== null && data !== void 0 && data.rooms)) {
200
- return;
201
- }
202
- for (var roomId in data.rooms) {
203
- processEphemeralEvents(_this6.client, roomId, [data.rooms[roomId]]);
204
- }
205
- })();
175
+ async onResponse(data) {
176
+ if (!data?.rooms) {
177
+ return;
178
+ }
179
+ for (const roomId in data.rooms) {
180
+ processEphemeralEvents(this.client, roomId, [data.rooms[roomId]]);
181
+ }
206
182
  }
207
183
  }
208
184
  class ExtensionReceipts {
@@ -215,23 +191,18 @@ class ExtensionReceipts {
215
191
  when() {
216
192
  return ExtensionState.PostProcess;
217
193
  }
218
- onRequest(isInitial) {
219
- return _asyncToGenerator(function* () {
220
- return {
221
- enabled: true
222
- };
223
- })();
194
+ async onRequest(isInitial) {
195
+ return {
196
+ enabled: true
197
+ };
224
198
  }
225
- onResponse(data) {
226
- var _this7 = this;
227
- return _asyncToGenerator(function* () {
228
- if (!(data !== null && data !== void 0 && data.rooms)) {
229
- return;
230
- }
231
- for (var roomId in data.rooms) {
232
- processEphemeralEvents(_this7.client, roomId, [data.rooms[roomId]]);
233
- }
234
- })();
199
+ async onResponse(data) {
200
+ if (!data?.rooms) {
201
+ return;
202
+ }
203
+ for (const roomId in data.rooms) {
204
+ processEphemeralEvents(this.client, roomId, [data.rooms[roomId]]);
205
+ }
235
206
  }
236
207
  }
237
208
 
@@ -243,8 +214,6 @@ export class SlidingSyncSdk {
243
214
  // accumulator of sync events in the current sync response
244
215
 
245
216
  constructor(slidingSync, client, opts, syncOpts) {
246
- this.slidingSync = slidingSync;
247
- this.client = client;
248
217
  _defineProperty(this, "opts", void 0);
249
218
  _defineProperty(this, "syncOpts", void 0);
250
219
  _defineProperty(this, "syncState", null);
@@ -252,6 +221,8 @@ export class SlidingSyncSdk {
252
221
  _defineProperty(this, "lastPos", null);
253
222
  _defineProperty(this, "failCount", 0);
254
223
  _defineProperty(this, "notifEvents", []);
224
+ this.slidingSync = slidingSync;
225
+ this.client = client;
255
226
  this.opts = defaultClientOpts(opts);
256
227
  this.syncOpts = defaultSyncApiOpts(syncOpts);
257
228
  if (client.getNotifTimelineSet()) {
@@ -259,7 +230,7 @@ export class SlidingSyncSdk {
259
230
  }
260
231
  this.slidingSync.on(SlidingSyncEvent.Lifecycle, this.onLifecycle.bind(this));
261
232
  this.slidingSync.on(SlidingSyncEvent.RoomData, this.onRoomData.bind(this));
262
- var extensions = [new ExtensionToDevice(this.client, this.syncOpts.cryptoCallbacks), new ExtensionAccountData(this.client), new ExtensionTyping(this.client), new ExtensionReceipts(this.client)];
233
+ const extensions = [new ExtensionToDevice(this.client, this.syncOpts.cryptoCallbacks), new ExtensionAccountData(this.client), new ExtensionTyping(this.client), new ExtensionReceipts(this.client)];
263
234
  if (this.syncOpts.cryptoCallbacks) {
264
235
  extensions.push(new ExtensionE2EE(this.syncOpts.cryptoCallbacks));
265
236
  }
@@ -267,19 +238,16 @@ export class SlidingSyncSdk {
267
238
  this.slidingSync.registerExtension(ext);
268
239
  });
269
240
  }
270
- onRoomData(roomId, roomData) {
271
- var _this8 = this;
272
- return _asyncToGenerator(function* () {
273
- var room = _this8.client.store.getRoom(roomId);
274
- if (!room) {
275
- if (!roomData.initial) {
276
- _this8.syncOpts.logger.debug("initial flag not set but no stored room exists for room ", roomId, roomData);
277
- return;
278
- }
279
- room = _createAndReEmitRoom(_this8.client, roomId, _this8.opts);
241
+ async onRoomData(roomId, roomData) {
242
+ let room = this.client.store.getRoom(roomId);
243
+ if (!room) {
244
+ if (!roomData.initial) {
245
+ this.syncOpts.logger.debug("initial flag not set but no stored room exists for room ", roomId, roomData);
246
+ return;
280
247
  }
281
- yield _this8.processRoomData(_this8.client, room, roomData);
282
- })();
248
+ room = _createAndReEmitRoom(this.client, roomId, this.opts);
249
+ }
250
+ await this.processRoomData(this.client, room, roomData);
283
251
  }
284
252
  onLifecycle(state, resp, err) {
285
253
  if (err) {
@@ -321,7 +289,7 @@ export class SlidingSyncSdk {
321
289
  }
322
290
  } else {
323
291
  this.failCount = 0;
324
- this.syncOpts.logger.debug("SlidingSyncState.RequestFinished with ".concat(Object.keys((resp === null || resp === void 0 ? void 0 : resp.rooms) || []).length, " rooms"));
292
+ this.syncOpts.logger.debug(`SlidingSyncState.RequestFinished with ${Object.keys(resp?.rooms || []).length} rooms`);
325
293
  }
326
294
  break;
327
295
  }
@@ -331,10 +299,8 @@ export class SlidingSyncSdk {
331
299
  * Sync rooms the user has left.
332
300
  * @returns Resolved when they've been added to the store.
333
301
  */
334
- syncLeftRooms() {
335
- return _asyncToGenerator(function* () {
336
- return []; // TODO
337
- })();
302
+ async syncLeftRooms() {
303
+ return []; // TODO
338
304
  }
339
305
 
340
306
  /**
@@ -344,10 +310,8 @@ export class SlidingSyncSdk {
344
310
  * @returns A promise which resolves once the room has been added to the
345
311
  * store.
346
312
  */
347
- peek(roomId) {
348
- return _asyncToGenerator(function* () {
349
- return null; // TODO
350
- })();
313
+ async peek(roomId) {
314
+ return null; // TODO
351
315
  }
352
316
 
353
317
  /**
@@ -382,16 +346,17 @@ export class SlidingSyncSdk {
382
346
  * this object.
383
347
  */
384
348
  getSyncStateData() {
385
- var _this$syncStateData;
386
- return (_this$syncStateData = this.syncStateData) !== null && _this$syncStateData !== void 0 ? _this$syncStateData : null;
349
+ return this.syncStateData ?? null;
387
350
  }
388
351
 
389
352
  // Helper functions which set up JS SDK structs are below and are identical to the sync v2 counterparts
390
353
 
391
354
  createRoom(roomId) {
392
355
  // XXX cargoculted from sync.ts
393
- var timelineSupport = this.client.timelineSupport;
394
- var room = new Room(roomId, this.client, this.client.getUserId(), {
356
+ const {
357
+ timelineSupport
358
+ } = this.client;
359
+ const room = new Room(roomId, this.client, this.client.getUserId(), {
395
360
  lazyLoadMembers: this.opts.lazyLoadMembers,
396
361
  pendingEventOrdering: this.opts.pendingEventOrdering,
397
362
  timelineSupport
@@ -407,8 +372,7 @@ export class SlidingSyncSdk {
407
372
  // order to hook them correctly.
408
373
  this.client.reEmitter.reEmit(room.currentState, [RoomStateEvent.Events, RoomStateEvent.Members, RoomStateEvent.NewMember, RoomStateEvent.Update]);
409
374
  room.currentState.on(RoomStateEvent.NewMember, (event, state, member) => {
410
- var _this$client$getUser;
411
- member.user = (_this$client$getUser = this.client.getUser(member.userId)) !== null && _this$client$getUser !== void 0 ? _this$client$getUser : undefined;
375
+ member.user = this.client.getUser(member.userId) ?? undefined;
412
376
  this.client.reEmitter.reEmit(member, [RoomMemberEvent.Name, RoomMemberEvent.Typing, RoomMemberEvent.PowerLevel, RoomMemberEvent.Membership]);
413
377
  });
414
378
  }
@@ -433,189 +397,180 @@ export class SlidingSyncSdk {
433
397
  }
434
398
  return false;
435
399
  }
436
- processRoomData(client, room, roomData) {
437
- var _this9 = this;
438
- return _asyncToGenerator(function* () {
439
- roomData = ensureNameEvent(client, room.roomId, roomData);
440
- var stateEvents = mapEvents(_this9.client, room.roomId, roomData.required_state);
441
- // Prevent events from being decrypted ahead of time
442
- // this helps large account to speed up faster
443
- // room::decryptCriticalEvent is in charge of decrypting all the events
444
- // required for a client to function properly
445
- var timelineEvents = mapEvents(_this9.client, room.roomId, roomData.timeline, false);
446
- var ephemeralEvents = []; // TODO this.mapSyncEventsFormat(joinObj.ephemeral);
447
-
448
- // TODO: handle threaded / beacon events
449
-
450
- if (roomData.limited || roomData.initial) {
451
- // we should not know about any of these timeline entries if this is a genuinely new room.
452
- // If we do, then we've effectively done scrollback (e.g requesting timeline_limit: 1 for
453
- // this room, then timeline_limit: 50).
454
- var knownEvents = new Set();
455
- room.getLiveTimeline().getEvents().forEach(e => {
456
- knownEvents.add(e.getId());
457
- });
458
- // all unknown events BEFORE a known event must be scrollback e.g:
459
- // D E <-- what we know
460
- // A B C D E F <-- what we just received
461
- // means:
462
- // A B C <-- scrollback
463
- // D E <-- dupes
464
- // F <-- new event
465
- // We bucket events based on if we have seen a known event yet.
466
- var oldEvents = [];
467
- var newEvents = [];
468
- var seenKnownEvent = false;
469
- for (var i = timelineEvents.length - 1; i >= 0; i--) {
470
- var recvEvent = timelineEvents[i];
471
- if (knownEvents.has(recvEvent.getId())) {
472
- seenKnownEvent = true;
473
- continue; // don't include this event, it's a dupe
474
- }
475
- if (seenKnownEvent) {
476
- // old -> new
477
- oldEvents.push(recvEvent);
478
- } else {
479
- // old -> new
480
- newEvents.unshift(recvEvent);
481
- }
482
- }
483
- timelineEvents = newEvents;
484
- if (oldEvents.length > 0) {
485
- // old events are scrollback, insert them now
486
- room.addEventsToTimeline(oldEvents, true, false, room.getLiveTimeline(), roomData.prev_batch);
400
+ async processRoomData(client, room, roomData) {
401
+ roomData = ensureNameEvent(client, room.roomId, roomData);
402
+ const stateEvents = mapEvents(this.client, room.roomId, roomData.required_state);
403
+ // Prevent events from being decrypted ahead of time
404
+ // this helps large account to speed up faster
405
+ // room::decryptCriticalEvent is in charge of decrypting all the events
406
+ // required for a client to function properly
407
+ let timelineEvents = mapEvents(this.client, room.roomId, roomData.timeline, false);
408
+ const ephemeralEvents = []; // TODO this.mapSyncEventsFormat(joinObj.ephemeral);
409
+
410
+ // TODO: handle threaded / beacon events
411
+
412
+ if (roomData.limited || roomData.initial) {
413
+ // we should not know about any of these timeline entries if this is a genuinely new room.
414
+ // If we do, then we've effectively done scrollback (e.g requesting timeline_limit: 1 for
415
+ // this room, then timeline_limit: 50).
416
+ const knownEvents = new Set();
417
+ room.getLiveTimeline().getEvents().forEach(e => {
418
+ knownEvents.add(e.getId());
419
+ });
420
+ // all unknown events BEFORE a known event must be scrollback e.g:
421
+ // D E <-- what we know
422
+ // A B C D E F <-- what we just received
423
+ // means:
424
+ // A B C <-- scrollback
425
+ // D E <-- dupes
426
+ // F <-- new event
427
+ // We bucket events based on if we have seen a known event yet.
428
+ const oldEvents = [];
429
+ const newEvents = [];
430
+ let seenKnownEvent = false;
431
+ for (let i = timelineEvents.length - 1; i >= 0; i--) {
432
+ const recvEvent = timelineEvents[i];
433
+ if (knownEvents.has(recvEvent.getId())) {
434
+ seenKnownEvent = true;
435
+ continue; // don't include this event, it's a dupe
487
436
  }
488
- }
489
- var encrypted = room.hasEncryptionStateEvent();
490
- // we do this first so it's correct when any of the events fire
491
- if (roomData.notification_count != null) {
492
- room.setUnreadNotificationCount(NotificationCountType.Total, roomData.notification_count);
493
- }
494
- if (roomData.highlight_count != null) {
495
- // We track unread notifications ourselves in encrypted rooms, so don't
496
- // bother setting it here. We trust our calculations better than the
497
- // server's for this case, and therefore will assume that our non-zero
498
- // count is accurate.
499
- if (!encrypted || encrypted && room.getUnreadNotificationCount(NotificationCountType.Highlight) <= 0) {
500
- room.setUnreadNotificationCount(NotificationCountType.Highlight, roomData.highlight_count);
437
+ if (seenKnownEvent) {
438
+ // old -> new
439
+ oldEvents.push(recvEvent);
440
+ } else {
441
+ // old -> new
442
+ newEvents.unshift(recvEvent);
501
443
  }
502
444
  }
503
- if (roomData.bump_stamp) {
504
- room.setBumpStamp(roomData.bump_stamp);
445
+ timelineEvents = newEvents;
446
+ if (oldEvents.length > 0) {
447
+ // old events are scrollback, insert them now
448
+ room.addEventsToTimeline(oldEvents, true, false, room.getLiveTimeline(), roomData.prev_batch);
505
449
  }
506
- if (Number.isInteger(roomData.invited_count)) {
507
- room.currentState.setInvitedMemberCount(roomData.invited_count);
450
+ }
451
+ const encrypted = room.hasEncryptionStateEvent();
452
+ // we do this first so it's correct when any of the events fire
453
+ if (roomData.notification_count != null) {
454
+ room.setUnreadNotificationCount(NotificationCountType.Total, roomData.notification_count);
455
+ }
456
+ if (roomData.highlight_count != null) {
457
+ // We track unread notifications ourselves in encrypted rooms, so don't
458
+ // bother setting it here. We trust our calculations better than the
459
+ // server's for this case, and therefore will assume that our non-zero
460
+ // count is accurate.
461
+ if (!encrypted || encrypted && room.getUnreadNotificationCount(NotificationCountType.Highlight) <= 0) {
462
+ room.setUnreadNotificationCount(NotificationCountType.Highlight, roomData.highlight_count);
508
463
  }
509
- if (Number.isInteger(roomData.joined_count)) {
510
- room.currentState.setJoinedMemberCount(roomData.joined_count);
464
+ }
465
+ if (roomData.bump_stamp) {
466
+ room.setBumpStamp(roomData.bump_stamp);
467
+ }
468
+ if (Number.isInteger(roomData.invited_count)) {
469
+ room.currentState.setInvitedMemberCount(roomData.invited_count);
470
+ }
471
+ if (Number.isInteger(roomData.joined_count)) {
472
+ room.currentState.setJoinedMemberCount(roomData.joined_count);
473
+ }
474
+ if (roomData.invite_state) {
475
+ const inviteStateEvents = mapEvents(this.client, room.roomId, roomData.invite_state);
476
+ await this.injectRoomEvents(room, inviteStateEvents);
477
+ if (roomData.initial) {
478
+ room.recalculate();
479
+ this.client.store.storeRoom(room);
480
+ this.client.emit(ClientEvent.Room, room);
511
481
  }
512
- if (roomData.invite_state) {
513
- var inviteStateEvents = mapEvents(_this9.client, room.roomId, roomData.invite_state);
514
- yield _this9.injectRoomEvents(room, inviteStateEvents);
515
- if (roomData.initial) {
516
- room.recalculate();
517
- _this9.client.store.storeRoom(room);
518
- _this9.client.emit(ClientEvent.Room, room);
482
+ inviteStateEvents.forEach(e => {
483
+ this.client.emit(ClientEvent.Event, e);
484
+ });
485
+ return;
486
+ }
487
+ if (roomData.limited) {
488
+ // set the back-pagination token. Do this *before* adding any
489
+ // events so that clients can start back-paginating.
490
+ room.getLiveTimeline().setPaginationToken(roomData.prev_batch ?? null, EventTimeline.BACKWARDS);
491
+ }
492
+
493
+ /* TODO
494
+ else if (roomData.limited) {
495
+ let limited = true;
496
+ // we've got a limited sync, so we *probably* have a gap in the
497
+ // timeline, so should reset. But we might have been peeking or
498
+ // paginating and already have some of the events, in which
499
+ // case we just want to append any subsequent events to the end
500
+ // of the existing timeline.
501
+ //
502
+ // This is particularly important in the case that we already have
503
+ // *all* of the events in the timeline - in that case, if we reset
504
+ // the timeline, we'll end up with an entirely empty timeline,
505
+ // which we'll try to paginate but not get any new events (which
506
+ // will stop us linking the empty timeline into the chain).
507
+ //
508
+ for (let i = timelineEvents.length - 1; i >= 0; i--) {
509
+ const eventId = timelineEvents[i].getId();
510
+ if (room.getTimelineForEvent(eventId)) {
511
+ this.syncOpts.logger.debug("Already have event " + eventId + " in limited " +
512
+ "sync - not resetting");
513
+ limited = false;
514
+ // we might still be missing some of the events before i;
515
+ // we don't want to be adding them to the end of the
516
+ // timeline because that would put them out of order.
517
+ timelineEvents.splice(0, i);
518
+ // XXX: there's a problem here if the skipped part of the
519
+ // timeline modifies the state set in stateEvents, because
520
+ // we'll end up using the state from stateEvents rather
521
+ // than the later state from timelineEvents. We probably
522
+ // need to wind stateEvents forward over the events we're
523
+ // skipping.
524
+ break;
525
+ }
519
526
  }
520
- inviteStateEvents.forEach(e => {
521
- _this9.client.emit(ClientEvent.Event, e);
522
- });
523
- return;
524
- }
525
- if (roomData.limited) {
526
- var _roomData$prev_batch;
527
- // set the back-pagination token. Do this *before* adding any
528
- // events so that clients can start back-paginating.
529
- room.getLiveTimeline().setPaginationToken((_roomData$prev_batch = roomData.prev_batch) !== null && _roomData$prev_batch !== void 0 ? _roomData$prev_batch : null, EventTimeline.BACKWARDS);
530
- }
527
+ if (limited) {
528
+ room.resetLiveTimeline(
529
+ roomData.prev_batch,
530
+ null, // TODO this.syncOpts.canResetEntireTimeline(room.roomId) ? null : syncEventData.oldSyncToken,
531
+ );
532
+ // We have to assume any gap in any timeline is
533
+ // reason to stop incrementally tracking notifications and
534
+ // reset the timeline.
535
+ this.client.resetNotifTimelineSet();
536
+ this.registerStateListeners(room);
537
+ }
538
+ } */
531
539
 
532
- /* TODO
533
- else if (roomData.limited) {
534
- let limited = true;
535
- // we've got a limited sync, so we *probably* have a gap in the
536
- // timeline, so should reset. But we might have been peeking or
537
- // paginating and already have some of the events, in which
538
- // case we just want to append any subsequent events to the end
539
- // of the existing timeline.
540
- //
541
- // This is particularly important in the case that we already have
542
- // *all* of the events in the timeline - in that case, if we reset
543
- // the timeline, we'll end up with an entirely empty timeline,
544
- // which we'll try to paginate but not get any new events (which
545
- // will stop us linking the empty timeline into the chain).
546
- //
547
- for (let i = timelineEvents.length - 1; i >= 0; i--) {
548
- const eventId = timelineEvents[i].getId();
549
- if (room.getTimelineForEvent(eventId)) {
550
- this.syncOpts.logger.debug("Already have event " + eventId + " in limited " +
551
- "sync - not resetting");
552
- limited = false;
553
- // we might still be missing some of the events before i;
554
- // we don't want to be adding them to the end of the
555
- // timeline because that would put them out of order.
556
- timelineEvents.splice(0, i);
557
- // XXX: there's a problem here if the skipped part of the
558
- // timeline modifies the state set in stateEvents, because
559
- // we'll end up using the state from stateEvents rather
560
- // than the later state from timelineEvents. We probably
561
- // need to wind stateEvents forward over the events we're
562
- // skipping.
563
- break;
564
- }
565
- }
566
- if (limited) {
567
- room.resetLiveTimeline(
568
- roomData.prev_batch,
569
- null, // TODO this.syncOpts.canResetEntireTimeline(room.roomId) ? null : syncEventData.oldSyncToken,
570
- );
571
- // We have to assume any gap in any timeline is
572
- // reason to stop incrementally tracking notifications and
573
- // reset the timeline.
574
- this.client.resetNotifTimelineSet();
575
- this.registerStateListeners(room);
576
- }
577
- } */
540
+ await this.injectRoomEvents(room, stateEvents, timelineEvents, roomData.num_live);
578
541
 
579
- yield _this9.injectRoomEvents(room, stateEvents, timelineEvents, roomData.num_live);
542
+ // we deliberately don't add ephemeral events to the timeline
543
+ room.addEphemeralEvents(ephemeralEvents);
580
544
 
581
- // we deliberately don't add ephemeral events to the timeline
582
- room.addEphemeralEvents(ephemeralEvents);
545
+ // local fields must be set before any async calls because call site assumes
546
+ // synchronous execution prior to emitting SlidingSyncState.Complete
547
+ room.updateMyMembership(KnownMembership.Join);
548
+ room.setMSC4186SummaryData(roomData.heroes, roomData.joined_count, roomData.invited_count);
549
+ room.recalculate();
550
+ if (roomData.initial) {
551
+ client.store.storeRoom(room);
552
+ client.emit(ClientEvent.Room, room);
553
+ }
583
554
 
584
- // local fields must be set before any async calls because call site assumes
585
- // synchronous execution prior to emitting SlidingSyncState.Complete
586
- room.updateMyMembership(KnownMembership.Join);
587
- room.setMSC4186SummaryData(roomData.heroes, roomData.joined_count, roomData.invited_count);
588
- room.recalculate();
589
- if (roomData.initial) {
590
- client.store.storeRoom(room);
591
- client.emit(ClientEvent.Room, room);
555
+ // check if any timeline events should bing and add them to the notifEvents array:
556
+ // we'll purge this once we've fully processed the sync response
557
+ this.addNotifications(timelineEvents);
558
+ const processRoomEvent = async e => {
559
+ client.emit(ClientEvent.Event, e);
560
+ if (e.isState() && e.getType() == EventType.RoomEncryption && this.syncOpts.cryptoCallbacks) {
561
+ await this.syncOpts.cryptoCallbacks.onCryptoEvent(room, e);
592
562
  }
563
+ };
564
+ await promiseMapSeries(stateEvents, processRoomEvent);
565
+ await promiseMapSeries(timelineEvents, processRoomEvent);
566
+ ephemeralEvents.forEach(function (e) {
567
+ client.emit(ClientEvent.Event, e);
568
+ });
593
569
 
594
- // check if any timeline events should bing and add them to the notifEvents array:
595
- // we'll purge this once we've fully processed the sync response
596
- _this9.addNotifications(timelineEvents);
597
- var processRoomEvent = /*#__PURE__*/function () {
598
- var _ref = _asyncToGenerator(function* (e) {
599
- client.emit(ClientEvent.Event, e);
600
- if (e.isState() && e.getType() == EventType.RoomEncryption && _this9.syncOpts.cryptoCallbacks) {
601
- yield _this9.syncOpts.cryptoCallbacks.onCryptoEvent(room, e);
602
- }
603
- });
604
- return function processRoomEvent(_x) {
605
- return _ref.apply(this, arguments);
606
- };
607
- }();
608
- yield promiseMapSeries(stateEvents, processRoomEvent);
609
- yield promiseMapSeries(timelineEvents, processRoomEvent);
610
- ephemeralEvents.forEach(function (e) {
611
- client.emit(ClientEvent.Event, e);
612
- });
613
-
614
- // Decrypt only the last message in all rooms to make sure we can generate a preview
615
- // And decrypt all events after the recorded read receipt to ensure an accurate
616
- // notification count
617
- room.decryptCriticalEvents();
618
- })();
570
+ // Decrypt only the last message in all rooms to make sure we can generate a preview
571
+ // And decrypt all events after the recorded read receipt to ensure an accurate
572
+ // notification count
573
+ room.decryptCriticalEvents();
619
574
  }
620
575
 
621
576
  /**
@@ -627,94 +582,88 @@ export class SlidingSyncSdk {
627
582
  * @param numLive - the number of events in timelineEventList which just happened,
628
583
  * supplied from the server.
629
584
  */
630
- injectRoomEvents(room, stateEventList) {
631
- var _arguments = arguments,
632
- _this0 = this;
633
- return _asyncToGenerator(function* () {
634
- var timelineEventList = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : [];
635
- var numLive = _arguments.length > 3 && _arguments[3] !== undefined ? _arguments[3] : 0;
636
- // If there are no events in the timeline yet, initialise it with
637
- // the given state events
638
- var liveTimeline = room.getLiveTimeline();
639
- var timelineWasEmpty = liveTimeline.getEvents().length == 0;
640
- if (timelineWasEmpty) {
641
- // Passing these events into initialiseState will freeze them, so we need
642
- // to compute and cache the push actions for them now, otherwise sync dies
643
- // with an attempt to assign to read only property.
644
- // XXX: This is pretty horrible and is assuming all sorts of behaviour from
645
- // these functions that it shouldn't be. We should probably either store the
646
- // push actions cache elsewhere so we can freeze MatrixEvents, or otherwise
647
- // find some solution where MatrixEvents are immutable but allow for a cache
648
- // field.
649
- for (var ev of stateEventList) {
650
- _this0.client.getPushActionsForEvent(ev);
651
- }
652
- liveTimeline.initialiseState(stateEventList);
585
+ async injectRoomEvents(room, stateEventList, timelineEventList = [], numLive = 0) {
586
+ // If there are no events in the timeline yet, initialise it with
587
+ // the given state events
588
+ const liveTimeline = room.getLiveTimeline();
589
+ const timelineWasEmpty = liveTimeline.getEvents().length == 0;
590
+ if (timelineWasEmpty) {
591
+ // Passing these events into initialiseState will freeze them, so we need
592
+ // to compute and cache the push actions for them now, otherwise sync dies
593
+ // with an attempt to assign to read only property.
594
+ // XXX: This is pretty horrible and is assuming all sorts of behaviour from
595
+ // these functions that it shouldn't be. We should probably either store the
596
+ // push actions cache elsewhere so we can freeze MatrixEvents, or otherwise
597
+ // find some solution where MatrixEvents are immutable but allow for a cache
598
+ // field.
599
+ for (const ev of stateEventList) {
600
+ this.client.getPushActionsForEvent(ev);
653
601
  }
602
+ liveTimeline.initialiseState(stateEventList);
603
+ }
654
604
 
655
- // If the timeline wasn't empty, we process the state events here: they're
656
- // defined as updates to the state before the start of the timeline, so this
657
- // starts to roll the state forward.
658
- // XXX: That's what we *should* do, but this can happen if we were previously
659
- // peeking in a room, in which case we obviously do *not* want to add the
660
- // state events here onto the end of the timeline. Historically, the js-sdk
661
- // has just set these new state events on the old and new state. This seems
662
- // very wrong because there could be events in the timeline that diverge the
663
- // state, in which case this is going to leave things out of sync. However,
664
- // for now I think it;s best to behave the same as the code has done previously.
665
- if (!timelineWasEmpty) {
666
- // XXX: As above, don't do this...
667
- //room.addLiveEvents(stateEventList || []);
668
- // Do this instead...
669
- room.oldState.setStateEvents(stateEventList);
670
- room.currentState.setStateEvents(stateEventList);
671
- }
605
+ // If the timeline wasn't empty, we process the state events here: they're
606
+ // defined as updates to the state before the start of the timeline, so this
607
+ // starts to roll the state forward.
608
+ // XXX: That's what we *should* do, but this can happen if we were previously
609
+ // peeking in a room, in which case we obviously do *not* want to add the
610
+ // state events here onto the end of the timeline. Historically, the js-sdk
611
+ // has just set these new state events on the old and new state. This seems
612
+ // very wrong because there could be events in the timeline that diverge the
613
+ // state, in which case this is going to leave things out of sync. However,
614
+ // for now I think it;s best to behave the same as the code has done previously.
615
+ if (!timelineWasEmpty) {
616
+ // XXX: As above, don't do this...
617
+ //room.addLiveEvents(stateEventList || []);
618
+ // Do this instead...
619
+ room.oldState.setStateEvents(stateEventList);
620
+ room.currentState.setStateEvents(stateEventList);
621
+ }
672
622
 
673
- // the timeline is broken into 'live' events which just happened and normal timeline events
674
- // which are still to be appended to the end of the live timeline but happened a while ago.
675
- // The live events are marked as fromCache=false to ensure that downstream components know
676
- // this is a live event, not historical (from a remote server cache).
677
-
678
- var liveTimelineEvents = [];
679
- if (numLive > 0) {
680
- // last numLive events are live
681
- liveTimelineEvents = timelineEventList.slice(-1 * numLive);
682
- // everything else is not live
683
- timelineEventList = timelineEventList.slice(0, -1 * liveTimelineEvents.length);
684
- }
623
+ // the timeline is broken into 'live' events which just happened and normal timeline events
624
+ // which are still to be appended to the end of the live timeline but happened a while ago.
625
+ // The live events are marked as fromCache=false to ensure that downstream components know
626
+ // this is a live event, not historical (from a remote server cache).
627
+
628
+ let liveTimelineEvents = [];
629
+ if (numLive > 0) {
630
+ // last numLive events are live
631
+ liveTimelineEvents = timelineEventList.slice(-1 * numLive);
632
+ // everything else is not live
633
+ timelineEventList = timelineEventList.slice(0, -1 * liveTimelineEvents.length);
634
+ }
685
635
 
686
- // Execute the timeline events.
687
- // This also needs to be done before running push rules on the events as they need
688
- // to be decorated with sender etc.
689
- yield room.addLiveEvents(timelineEventList, {
690
- fromCache: true,
636
+ // Execute the timeline events.
637
+ // This also needs to be done before running push rules on the events as they need
638
+ // to be decorated with sender etc.
639
+ await room.addLiveEvents(timelineEventList, {
640
+ fromCache: true,
641
+ addToState: false
642
+ });
643
+ if (liveTimelineEvents.length > 0) {
644
+ await room.addLiveEvents(liveTimelineEvents, {
645
+ fromCache: false,
691
646
  addToState: false
692
647
  });
693
- if (liveTimelineEvents.length > 0) {
694
- yield room.addLiveEvents(liveTimelineEvents, {
695
- fromCache: false,
696
- addToState: false
697
- });
698
- }
699
- room.recalculate();
648
+ }
649
+ room.recalculate();
700
650
 
701
- // resolve invites now we have set the latest state
702
- _this0.resolveInvites(room);
703
- })();
651
+ // resolve invites now we have set the latest state
652
+ this.resolveInvites(room);
704
653
  }
705
654
  resolveInvites(room) {
706
655
  if (!room || !this.opts.resolveInvitesToProfiles) {
707
656
  return;
708
657
  }
709
- var client = this.client;
658
+ const client = this.client;
710
659
  // For each invited room member we want to give them a displayname/avatar url
711
660
  // if they have one (the m.room.member invites don't contain this).
712
661
  room.getMembersWithMembership(KnownMembership.Invite).forEach(function (member) {
713
662
  if (member.requestedProfileInfo) return;
714
663
  member.requestedProfileInfo = true;
715
664
  // try to get a cached copy first.
716
- var user = client.getUser(member.userId);
717
- var promise;
665
+ const user = client.getUser(member.userId);
666
+ let promise;
718
667
  if (user) {
719
668
  promise = Promise.resolve({
720
669
  avatar_url: user.avatarUrl,
@@ -727,7 +676,7 @@ export class SlidingSyncSdk {
727
676
  // slightly naughty by doctoring the invite event but this means all
728
677
  // the code paths remain the same between invite/join display name stuff
729
678
  // which is a worthy trade-off for some minor pollution.
730
- var inviteEvent = member.events.member;
679
+ const inviteEvent = member.events.member;
731
680
  if (inviteEvent.getContent().membership !== KnownMembership.Invite) {
732
681
  // between resolving and now they have since joined, so don't clobber
733
682
  return;
@@ -748,31 +697,28 @@ export class SlidingSyncSdk {
748
697
  /**
749
698
  * Main entry point. Blocks until stop() is called.
750
699
  */
751
- sync() {
752
- var _this1 = this;
753
- return _asyncToGenerator(function* () {
754
- _this1.syncOpts.logger.debug("Sliding sync init loop");
755
-
756
- // 1) We need to get push rules so we can check if events should bing as we get
757
- // them from /sync.
758
- while (!_this1.client.isGuest()) {
759
- try {
760
- _this1.syncOpts.logger.debug("Getting push rules...");
761
- var result = yield _this1.client.getPushRules();
762
- _this1.syncOpts.logger.debug("Got push rules");
763
- _this1.client.pushRules = result;
764
- break;
765
- } catch (err) {
766
- _this1.syncOpts.logger.error("Getting push rules failed", err);
767
- if (_this1.shouldAbortSync(err)) {
768
- return;
769
- }
700
+ async sync() {
701
+ this.syncOpts.logger.debug("Sliding sync init loop");
702
+
703
+ // 1) We need to get push rules so we can check if events should bing as we get
704
+ // them from /sync.
705
+ while (!this.client.isGuest()) {
706
+ try {
707
+ this.syncOpts.logger.debug("Getting push rules...");
708
+ const result = await this.client.getPushRules();
709
+ this.syncOpts.logger.debug("Got push rules");
710
+ this.client.pushRules = result;
711
+ break;
712
+ } catch (err) {
713
+ this.syncOpts.logger.error("Getting push rules failed", err);
714
+ if (this.shouldAbortSync(err)) {
715
+ return;
770
716
  }
771
717
  }
718
+ }
772
719
 
773
- // start syncing
774
- yield _this1.slidingSync.start();
775
- })();
720
+ // start syncing
721
+ await this.slidingSync.start();
776
722
  }
777
723
 
778
724
  /**
@@ -789,7 +735,7 @@ export class SlidingSyncSdk {
789
735
  * @param data - Object of additional data to emit in the event
790
736
  */
791
737
  updateSyncState(newState, data) {
792
- var old = this.syncState;
738
+ const old = this.syncState;
793
739
  this.syncState = newState;
794
740
  this.syncStateData = data;
795
741
  this.client.emit(ClientEvent.Sync, this.syncState, old, data);
@@ -808,8 +754,8 @@ export class SlidingSyncSdk {
808
754
  if (!this.client.getNotifTimelineSet()) {
809
755
  return;
810
756
  }
811
- for (var timelineEvent of timelineEventList) {
812
- var pushActions = this.client.getPushActionsForEvent(timelineEvent);
757
+ for (const timelineEvent of timelineEventList) {
758
+ const pushActions = this.client.getPushActionsForEvent(timelineEvent);
813
759
  if (pushActions && pushActions.notify && pushActions.tweaks && pushActions.tweaks.highlight) {
814
760
  this.notifEvents.push(timelineEvent);
815
761
  }
@@ -828,8 +774,7 @@ export class SlidingSyncSdk {
828
774
  return a.getTs() - b.getTs();
829
775
  });
830
776
  this.notifEvents.forEach(event => {
831
- var _this$client$getNotif;
832
- (_this$client$getNotif = this.client.getNotifTimelineSet()) === null || _this$client$getNotif === void 0 || _this$client$getNotif.addLiveEvent(event, {
777
+ this.client.getNotifTimelineSet()?.addLiveEvent(event, {
833
778
  addToState: false
834
779
  });
835
780
  });
@@ -843,7 +788,7 @@ function ensureNameEvent(client, roomId, roomData) {
843
788
  if (!roomData.name) {
844
789
  return roomData;
845
790
  }
846
- for (var stateEvent of roomData.required_state) {
791
+ for (const stateEvent of roomData.required_state) {
847
792
  if (stateEvent.type === EventType.RoomName && stateEvent.state_key === "") {
848
793
  stateEvent.content = {
849
794
  name: roomData.name
@@ -865,9 +810,8 @@ function ensureNameEvent(client, roomId, roomData) {
865
810
  }
866
811
  // Helper functions which set up JS SDK structs are below and are identical to the sync v2 counterparts,
867
812
  // just outside the class.
868
- function mapEvents(client, roomId, events) {
869
- var decrypt = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
870
- var mapper = client.getEventMapper({
813
+ function mapEvents(client, roomId, events, decrypt = true) {
814
+ const mapper = client.getEventMapper({
871
815
  decrypt
872
816
  });
873
817
  return events.map(function (e) {
@@ -876,8 +820,8 @@ function mapEvents(client, roomId, events) {
876
820
  });
877
821
  }
878
822
  function processEphemeralEvents(client, roomId, ephEvents) {
879
- var ephemeralEvents = mapEvents(client, roomId, ephEvents);
880
- var room = client.getRoom(roomId);
823
+ const ephemeralEvents = mapEvents(client, roomId, ephEvents);
824
+ const room = client.getRoom(roomId);
881
825
  if (!room) {
882
826
  logger.warn("got ephemeral events for room but room doesn't exist on client:", roomId);
883
827
  return;