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,4 +1,3 @@
1
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
2
  /*
4
3
  Copyright 2021 Šimon Brandner <simon.bra.ag@gmail.com>
@@ -22,7 +21,7 @@ import { RoomStateEvent } from "../models/room-state.js";
22
21
  import { logger } from "../logger.js";
23
22
  import { EventType } from "../@types/event.js";
24
23
  import { SyncState } from "../sync.js";
25
- export var GroupCallEventHandlerEvent = /*#__PURE__*/function (GroupCallEventHandlerEvent) {
24
+ export let GroupCallEventHandlerEvent = /*#__PURE__*/function (GroupCallEventHandlerEvent) {
26
25
  GroupCallEventHandlerEvent["Incoming"] = "GroupCall.incoming";
27
26
  GroupCallEventHandlerEvent["Outgoing"] = "GroupCall.outgoing";
28
27
  GroupCallEventHandlerEvent["Ended"] = "GroupCall.ended";
@@ -31,7 +30,6 @@ export var GroupCallEventHandlerEvent = /*#__PURE__*/function (GroupCallEventHan
31
30
  }({});
32
31
  export class GroupCallEventHandler {
33
32
  constructor(client) {
34
- this.client = client;
35
33
  _defineProperty(this, "groupCalls", new Map());
36
34
  // roomId -> GroupCall
37
35
  // All rooms we know about and whether we've seen a 'Room' event
@@ -43,11 +41,11 @@ export class GroupCallEventHandler {
43
41
  this.createGroupCallForRoom(room);
44
42
  });
45
43
  _defineProperty(this, "onRoomStateChanged", (event, state) => {
46
- var eventType = event.getType();
44
+ const eventType = event.getType();
47
45
  if (eventType === EventType.GroupCallPrefix) {
48
- var groupCallId = event.getStateKey();
49
- var content = event.getContent();
50
- var currentGroupCall = this.groupCalls.get(state.roomId);
46
+ const groupCallId = event.getStateKey();
47
+ const content = event.getContent();
48
+ const currentGroupCall = this.groupCalls.get(state.roomId);
51
49
  if (!currentGroupCall && !content["m.terminated"] && !event.isRedacted()) {
52
50
  this.createGroupCallFromRoomStateEvent(event);
53
51
  } else if (currentGroupCall && currentGroupCall.groupCallId === groupCallId) {
@@ -55,51 +53,49 @@ export class GroupCallEventHandler {
55
53
  currentGroupCall.terminate(false);
56
54
  } else if (content["m.type"] !== currentGroupCall.type) {
57
55
  // TODO: Handle the callType changing when the room state changes
58
- logger.warn("GroupCallEventHandler onRoomStateChanged() currently does not support changing type (roomId=".concat(state.roomId, ")"));
56
+ logger.warn(`GroupCallEventHandler onRoomStateChanged() currently does not support changing type (roomId=${state.roomId})`);
59
57
  }
60
58
  } else if (currentGroupCall && currentGroupCall.groupCallId !== groupCallId) {
61
59
  // TODO: Handle new group calls and multiple group calls
62
- logger.warn("GroupCallEventHandler onRoomStateChanged() currently does not support multiple calls (roomId=".concat(state.roomId, ")"));
60
+ logger.warn(`GroupCallEventHandler onRoomStateChanged() currently does not support multiple calls (roomId=${state.roomId})`);
63
61
  }
64
62
  }
65
63
  });
64
+ this.client = client;
66
65
  }
67
- start() {
68
- var _this = this;
69
- return _asyncToGenerator(function* () {
70
- // We wait until the client has started syncing for real.
71
- // This is because we only support one call at a time, and want
72
- // the latest. We therefore want the latest state of the room before
73
- // we create a group call for the room so we can be fairly sure that
74
- // the group call we create is really the latest one.
75
- if (_this.client.getSyncState() !== SyncState.Syncing) {
76
- logger.debug("GroupCallEventHandler start() waiting for client to start syncing");
77
- yield new Promise(resolve => {
78
- var onSync = () => {
79
- if (_this.client.getSyncState() === SyncState.Syncing) {
80
- _this.client.off(ClientEvent.Sync, onSync);
81
- return resolve();
82
- }
83
- };
84
- _this.client.on(ClientEvent.Sync, onSync);
85
- });
86
- }
87
- var rooms = _this.client.getRooms();
88
- for (var room of rooms) {
89
- _this.createGroupCallForRoom(room);
90
- }
91
- _this.client.on(ClientEvent.Room, _this.onRoomsChanged);
92
- _this.client.on(RoomStateEvent.Events, _this.onRoomStateChanged);
93
- })();
66
+ async start() {
67
+ // We wait until the client has started syncing for real.
68
+ // This is because we only support one call at a time, and want
69
+ // the latest. We therefore want the latest state of the room before
70
+ // we create a group call for the room so we can be fairly sure that
71
+ // the group call we create is really the latest one.
72
+ if (this.client.getSyncState() !== SyncState.Syncing) {
73
+ logger.debug("GroupCallEventHandler start() waiting for client to start syncing");
74
+ await new Promise(resolve => {
75
+ const onSync = () => {
76
+ if (this.client.getSyncState() === SyncState.Syncing) {
77
+ this.client.off(ClientEvent.Sync, onSync);
78
+ return resolve();
79
+ }
80
+ };
81
+ this.client.on(ClientEvent.Sync, onSync);
82
+ });
83
+ }
84
+ const rooms = this.client.getRooms();
85
+ for (const room of rooms) {
86
+ this.createGroupCallForRoom(room);
87
+ }
88
+ this.client.on(ClientEvent.Room, this.onRoomsChanged);
89
+ this.client.on(RoomStateEvent.Events, this.onRoomStateChanged);
94
90
  }
95
91
  stop() {
96
92
  this.client.removeListener(ClientEvent.Room, this.onRoomsChanged);
97
93
  this.client.removeListener(RoomStateEvent.Events, this.onRoomStateChanged);
98
94
  }
99
95
  getRoomDeferred(roomId) {
100
- var deferred = this.roomDeferreds.get(roomId);
96
+ let deferred = this.roomDeferreds.get(roomId);
101
97
  if (deferred === undefined) {
102
- var resolveFunc;
98
+ let resolveFunc;
103
99
  deferred = {
104
100
  prom: new Promise(resolve => {
105
101
  resolveFunc = resolve;
@@ -117,47 +113,48 @@ export class GroupCallEventHandler {
117
113
  return [...this.groupCalls.values()].find(groupCall => groupCall.groupCallId === groupCallId);
118
114
  }
119
115
  createGroupCallForRoom(room) {
120
- var callEvents = room.currentState.getStateEvents(EventType.GroupCallPrefix);
121
- var sortedCallEvents = callEvents.sort((a, b) => b.getTs() - a.getTs());
122
- for (var callEvent of sortedCallEvents) {
123
- var content = callEvent.getContent();
116
+ const callEvents = room.currentState.getStateEvents(EventType.GroupCallPrefix);
117
+ const sortedCallEvents = callEvents.sort((a, b) => b.getTs() - a.getTs());
118
+ for (const callEvent of sortedCallEvents) {
119
+ const content = callEvent.getContent();
124
120
  if (content["m.terminated"] || callEvent.isRedacted()) {
125
121
  continue;
126
122
  }
127
- logger.debug("GroupCallEventHandler createGroupCallForRoom() choosing group call from possible calls (stateKey=".concat(callEvent.getStateKey(), ", ts=").concat(callEvent.getTs(), ", roomId=").concat(room.roomId, ", numOfPossibleCalls=").concat(callEvents.length, ")"));
123
+ logger.debug(`GroupCallEventHandler createGroupCallForRoom() choosing group call from possible calls (stateKey=${callEvent.getStateKey()}, ts=${callEvent.getTs()}, roomId=${room.roomId}, numOfPossibleCalls=${callEvents.length})`);
128
124
  this.createGroupCallFromRoomStateEvent(callEvent);
129
125
  break;
130
126
  }
131
127
  this.getRoomDeferred(room.roomId).resolve();
132
128
  }
133
129
  createGroupCallFromRoomStateEvent(event) {
134
- var roomId = event.getRoomId();
135
- var content = event.getContent();
136
- var room = this.client.getRoom(roomId);
130
+ const roomId = event.getRoomId();
131
+ const content = event.getContent();
132
+ const room = this.client.getRoom(roomId);
137
133
  if (!room) {
138
- logger.warn("GroupCallEventHandler createGroupCallFromRoomStateEvent() couldn't find room for call (roomId=".concat(roomId, ")"));
134
+ logger.warn(`GroupCallEventHandler createGroupCallFromRoomStateEvent() couldn't find room for call (roomId=${roomId})`);
139
135
  return;
140
136
  }
141
- var groupCallId = event.getStateKey();
142
- var callType = content["m.type"];
137
+ const groupCallId = event.getStateKey();
138
+ const callType = content["m.type"];
143
139
  if (!Object.values(GroupCallType).includes(callType)) {
144
- logger.warn("GroupCallEventHandler createGroupCallFromRoomStateEvent() received invalid call type (type=".concat(callType, ", roomId=").concat(roomId, ")"));
140
+ logger.warn(`GroupCallEventHandler createGroupCallFromRoomStateEvent() received invalid call type (type=${callType}, roomId=${roomId})`);
145
141
  return;
146
142
  }
147
- var callIntent = content["m.intent"];
143
+ const callIntent = content["m.intent"];
148
144
  if (!Object.values(GroupCallIntent).includes(callIntent)) {
149
- logger.warn("Received invalid group call intent (type=".concat(callType, ", roomId=").concat(roomId, ")"));
145
+ logger.warn(`Received invalid group call intent (type=${callType}, roomId=${roomId})`);
150
146
  return;
151
147
  }
152
- var isPtt = Boolean(content["io.element.ptt"]);
153
- var dataChannelOptions;
154
- if (content !== null && content !== void 0 && content.dataChannelsEnabled && content !== null && content !== void 0 && content.dataChannelOptions) {
148
+ const isPtt = Boolean(content["io.element.ptt"]);
149
+ let dataChannelOptions;
150
+ if (content?.dataChannelsEnabled && content?.dataChannelOptions) {
155
151
  // Pull out just the dataChannelOptions we want to support.
156
- var _content$dataChannelO = content.dataChannelOptions,
157
- ordered = _content$dataChannelO.ordered,
158
- maxPacketLifeTime = _content$dataChannelO.maxPacketLifeTime,
159
- maxRetransmits = _content$dataChannelO.maxRetransmits,
160
- protocol = _content$dataChannelO.protocol;
152
+ const {
153
+ ordered,
154
+ maxPacketLifeTime,
155
+ maxRetransmits,
156
+ protocol
157
+ } = content.dataChannelOptions;
161
158
  dataChannelOptions = {
162
159
  ordered,
163
160
  maxPacketLifeTime,
@@ -165,10 +162,10 @@ export class GroupCallEventHandler {
165
162
  protocol
166
163
  };
167
164
  }
168
- var groupCall = new GroupCall(this.client, room, callType, isPtt, callIntent, groupCallId,
165
+ const groupCall = new GroupCall(this.client, room, callType, isPtt, callIntent, groupCallId,
169
166
  // Because without Media section a WebRTC connection is not possible, so need a RTCDataChannel to set up a
170
167
  // no media WebRTC connection anyway.
171
- (content === null || content === void 0 ? void 0 : content.dataChannelsEnabled) || this.client.isVoipWithNoMediaAllowed, dataChannelOptions, this.client.isVoipWithNoMediaAllowed, this.client.useLivekitForGroupCalls, content["io.element.livekit_service_url"]);
168
+ content?.dataChannelsEnabled || this.client.isVoipWithNoMediaAllowed, dataChannelOptions, this.client.isVoipWithNoMediaAllowed, this.client.useLivekitForGroupCalls, content["io.element.livekit_service_url"]);
172
169
  this.groupCalls.set(room.roomId, groupCall);
173
170
  this.client.emit(GroupCallEventHandlerEvent.Incoming, groupCall);
174
171
  return groupCall;
@@ -1 +1 @@
1
- {"version":3,"file":"groupCallEventHandler.js","names":["ClientEvent","GroupCall","GroupCallIntent","GroupCallType","RoomStateEvent","logger","EventType","SyncState","GroupCallEventHandlerEvent","GroupCallEventHandler","constructor","client","_defineProperty","Map","room","createGroupCallForRoom","event","state","eventType","getType","GroupCallPrefix","groupCallId","getStateKey","content","getContent","currentGroupCall","groupCalls","get","roomId","isRedacted","createGroupCallFromRoomStateEvent","terminate","type","warn","concat","start","_this","_asyncToGenerator","getSyncState","Syncing","debug","Promise","resolve","onSync","off","Sync","on","rooms","getRooms","Room","onRoomsChanged","Events","onRoomStateChanged","stop","removeListener","getRoomDeferred","deferred","roomDeferreds","undefined","resolveFunc","prom","set","waitUntilRoomReadyForGroupCalls","getGroupCallById","values","find","groupCall","callEvents","currentState","getStateEvents","sortedCallEvents","sort","a","b","getTs","callEvent","length","getRoomId","getRoom","callType","Object","includes","callIntent","isPtt","Boolean","dataChannelOptions","dataChannelsEnabled","_content$dataChannelO","ordered","maxPacketLifeTime","maxRetransmits","protocol","isVoipWithNoMediaAllowed","useLivekitForGroupCalls","emit","Incoming"],"sources":["../../src/webrtc/groupCallEventHandler.ts"],"sourcesContent":["/*\nCopyright 2021 Šimon Brandner <simon.bra.ag@gmail.com>\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { type MatrixEvent } from \"../models/event.ts\";\nimport { type MatrixClient, ClientEvent } from \"../client.ts\";\nimport { GroupCall, GroupCallIntent, GroupCallType, type IGroupCallDataChannelOptions } from \"./groupCall.ts\";\nimport { type Room } from \"../models/room.ts\";\nimport { type RoomState, RoomStateEvent } from \"../models/room-state.ts\";\nimport { type RoomMember } from \"../models/room-member.ts\";\nimport { logger } from \"../logger.ts\";\nimport { EventType } from \"../@types/event.ts\";\nimport { SyncState } from \"../sync.ts\";\n\nexport enum GroupCallEventHandlerEvent {\n Incoming = \"GroupCall.incoming\",\n Outgoing = \"GroupCall.outgoing\",\n Ended = \"GroupCall.ended\",\n Participants = \"GroupCall.participants\",\n}\n\nexport type GroupCallEventHandlerEventHandlerMap = {\n [GroupCallEventHandlerEvent.Incoming]: (call: GroupCall) => void;\n [GroupCallEventHandlerEvent.Outgoing]: (call: GroupCall) => void;\n [GroupCallEventHandlerEvent.Ended]: (call: GroupCall) => void;\n [GroupCallEventHandlerEvent.Participants]: (participants: RoomMember[], call: GroupCall) => void;\n};\n\ninterface RoomDeferred {\n prom: Promise<void>;\n resolve?: () => void;\n}\n\nexport class GroupCallEventHandler {\n public groupCalls = new Map<string, GroupCall>(); // roomId -> GroupCall\n\n // All rooms we know about and whether we've seen a 'Room' event\n // for them. The promise will be fulfilled once we've processed that\n // event which means we're \"up to date\" on what calls are in a room\n // and get\n private roomDeferreds = new Map<string, RoomDeferred>();\n\n public constructor(private client: MatrixClient) {}\n\n public async start(): Promise<void> {\n // We wait until the client has started syncing for real.\n // This is because we only support one call at a time, and want\n // the latest. We therefore want the latest state of the room before\n // we create a group call for the room so we can be fairly sure that\n // the group call we create is really the latest one.\n if (this.client.getSyncState() !== SyncState.Syncing) {\n logger.debug(\"GroupCallEventHandler start() waiting for client to start syncing\");\n await new Promise<void>((resolve) => {\n const onSync = (): void => {\n if (this.client.getSyncState() === SyncState.Syncing) {\n this.client.off(ClientEvent.Sync, onSync);\n return resolve();\n }\n };\n this.client.on(ClientEvent.Sync, onSync);\n });\n }\n\n const rooms = this.client.getRooms();\n\n for (const room of rooms) {\n this.createGroupCallForRoom(room);\n }\n\n this.client.on(ClientEvent.Room, this.onRoomsChanged);\n this.client.on(RoomStateEvent.Events, this.onRoomStateChanged);\n }\n\n public stop(): void {\n this.client.removeListener(ClientEvent.Room, this.onRoomsChanged);\n this.client.removeListener(RoomStateEvent.Events, this.onRoomStateChanged);\n }\n\n private getRoomDeferred(roomId: string): RoomDeferred {\n let deferred = this.roomDeferreds.get(roomId);\n if (deferred === undefined) {\n let resolveFunc: () => void;\n deferred = {\n prom: new Promise<void>((resolve) => {\n resolveFunc = resolve;\n }),\n };\n deferred.resolve = resolveFunc!;\n this.roomDeferreds.set(roomId, deferred);\n }\n\n return deferred;\n }\n\n public waitUntilRoomReadyForGroupCalls(roomId: string): Promise<void> {\n return this.getRoomDeferred(roomId).prom;\n }\n\n public getGroupCallById(groupCallId: string): GroupCall | undefined {\n return [...this.groupCalls.values()].find((groupCall) => groupCall.groupCallId === groupCallId);\n }\n\n private createGroupCallForRoom(room: Room): void {\n const callEvents = room.currentState.getStateEvents(EventType.GroupCallPrefix);\n const sortedCallEvents = callEvents.sort((a, b) => b.getTs() - a.getTs());\n\n for (const callEvent of sortedCallEvents) {\n const content = callEvent.getContent();\n\n if (content[\"m.terminated\"] || callEvent.isRedacted()) {\n continue;\n }\n\n logger.debug(\n `GroupCallEventHandler createGroupCallForRoom() choosing group call from possible calls (stateKey=${callEvent.getStateKey()}, ts=${callEvent.getTs()}, roomId=${\n room.roomId\n }, numOfPossibleCalls=${callEvents.length})`,\n );\n\n this.createGroupCallFromRoomStateEvent(callEvent);\n break;\n }\n\n this.getRoomDeferred(room.roomId).resolve!();\n }\n\n private createGroupCallFromRoomStateEvent(event: MatrixEvent): GroupCall | undefined {\n const roomId = event.getRoomId();\n const content = event.getContent();\n\n const room = this.client.getRoom(roomId);\n\n if (!room) {\n logger.warn(\n `GroupCallEventHandler createGroupCallFromRoomStateEvent() couldn't find room for call (roomId=${roomId})`,\n );\n return;\n }\n\n const groupCallId = event.getStateKey();\n\n const callType = content[\"m.type\"];\n\n if (!Object.values(GroupCallType).includes(callType)) {\n logger.warn(\n `GroupCallEventHandler createGroupCallFromRoomStateEvent() received invalid call type (type=${callType}, roomId=${roomId})`,\n );\n return;\n }\n\n const callIntent = content[\"m.intent\"];\n\n if (!Object.values(GroupCallIntent).includes(callIntent)) {\n logger.warn(`Received invalid group call intent (type=${callType}, roomId=${roomId})`);\n return;\n }\n\n const isPtt = Boolean(content[\"io.element.ptt\"]);\n\n let dataChannelOptions: IGroupCallDataChannelOptions | undefined;\n\n if (content?.dataChannelsEnabled && content?.dataChannelOptions) {\n // Pull out just the dataChannelOptions we want to support.\n const { ordered, maxPacketLifeTime, maxRetransmits, protocol } = content.dataChannelOptions;\n dataChannelOptions = { ordered, maxPacketLifeTime, maxRetransmits, protocol };\n }\n\n const groupCall = new GroupCall(\n this.client,\n room,\n callType,\n isPtt,\n callIntent,\n groupCallId,\n // Because without Media section a WebRTC connection is not possible, so need a RTCDataChannel to set up a\n // no media WebRTC connection anyway.\n content?.dataChannelsEnabled || this.client.isVoipWithNoMediaAllowed,\n dataChannelOptions,\n this.client.isVoipWithNoMediaAllowed,\n this.client.useLivekitForGroupCalls,\n content[\"io.element.livekit_service_url\"],\n );\n\n this.groupCalls.set(room.roomId, groupCall);\n this.client.emit(GroupCallEventHandlerEvent.Incoming, groupCall);\n\n return groupCall;\n }\n\n private onRoomsChanged = (room: Room): void => {\n this.createGroupCallForRoom(room);\n };\n\n private onRoomStateChanged = (event: MatrixEvent, state: RoomState): void => {\n const eventType = event.getType();\n\n if (eventType === EventType.GroupCallPrefix) {\n const groupCallId = event.getStateKey();\n const content = event.getContent();\n\n const currentGroupCall = this.groupCalls.get(state.roomId);\n\n if (!currentGroupCall && !content[\"m.terminated\"] && !event.isRedacted()) {\n this.createGroupCallFromRoomStateEvent(event);\n } else if (currentGroupCall && currentGroupCall.groupCallId === groupCallId) {\n if (content[\"m.terminated\"] || event.isRedacted()) {\n currentGroupCall.terminate(false);\n } else if (content[\"m.type\"] !== currentGroupCall.type) {\n // TODO: Handle the callType changing when the room state changes\n logger.warn(\n `GroupCallEventHandler onRoomStateChanged() currently does not support changing type (roomId=${state.roomId})`,\n );\n }\n } else if (currentGroupCall && currentGroupCall.groupCallId !== groupCallId) {\n // TODO: Handle new group calls and multiple group calls\n logger.warn(\n `GroupCallEventHandler onRoomStateChanged() currently does not support multiple calls (roomId=${state.roomId})`,\n );\n }\n }\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"groupCallEventHandler.js","names":[],"sources":["../../src/webrtc/groupCallEventHandler.ts"],"sourcesContent":["/*\nCopyright 2021 Šimon Brandner <simon.bra.ag@gmail.com>\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { type MatrixEvent } from \"../models/event.ts\";\nimport { type MatrixClient, ClientEvent } from \"../client.ts\";\nimport { GroupCall, GroupCallIntent, GroupCallType, type IGroupCallDataChannelOptions } from \"./groupCall.ts\";\nimport { type Room } from \"../models/room.ts\";\nimport { type RoomState, RoomStateEvent } from \"../models/room-state.ts\";\nimport { type RoomMember } from \"../models/room-member.ts\";\nimport { logger } from \"../logger.ts\";\nimport { EventType } from \"../@types/event.ts\";\nimport { SyncState } from \"../sync.ts\";\n\nexport enum GroupCallEventHandlerEvent {\n Incoming = \"GroupCall.incoming\",\n Outgoing = \"GroupCall.outgoing\",\n Ended = \"GroupCall.ended\",\n Participants = \"GroupCall.participants\",\n}\n\nexport type GroupCallEventHandlerEventHandlerMap = {\n [GroupCallEventHandlerEvent.Incoming]: (call: GroupCall) => void;\n [GroupCallEventHandlerEvent.Outgoing]: (call: GroupCall) => void;\n [GroupCallEventHandlerEvent.Ended]: (call: GroupCall) => void;\n [GroupCallEventHandlerEvent.Participants]: (participants: RoomMember[], call: GroupCall) => void;\n};\n\ninterface RoomDeferred {\n prom: Promise<void>;\n resolve?: () => void;\n}\n\nexport class GroupCallEventHandler {\n public groupCalls = new Map<string, GroupCall>(); // roomId -> GroupCall\n\n // All rooms we know about and whether we've seen a 'Room' event\n // for them. The promise will be fulfilled once we've processed that\n // event which means we're \"up to date\" on what calls are in a room\n // and get\n private roomDeferreds = new Map<string, RoomDeferred>();\n\n public constructor(private client: MatrixClient) {}\n\n public async start(): Promise<void> {\n // We wait until the client has started syncing for real.\n // This is because we only support one call at a time, and want\n // the latest. We therefore want the latest state of the room before\n // we create a group call for the room so we can be fairly sure that\n // the group call we create is really the latest one.\n if (this.client.getSyncState() !== SyncState.Syncing) {\n logger.debug(\"GroupCallEventHandler start() waiting for client to start syncing\");\n await new Promise<void>((resolve) => {\n const onSync = (): void => {\n if (this.client.getSyncState() === SyncState.Syncing) {\n this.client.off(ClientEvent.Sync, onSync);\n return resolve();\n }\n };\n this.client.on(ClientEvent.Sync, onSync);\n });\n }\n\n const rooms = this.client.getRooms();\n\n for (const room of rooms) {\n this.createGroupCallForRoom(room);\n }\n\n this.client.on(ClientEvent.Room, this.onRoomsChanged);\n this.client.on(RoomStateEvent.Events, this.onRoomStateChanged);\n }\n\n public stop(): void {\n this.client.removeListener(ClientEvent.Room, this.onRoomsChanged);\n this.client.removeListener(RoomStateEvent.Events, this.onRoomStateChanged);\n }\n\n private getRoomDeferred(roomId: string): RoomDeferred {\n let deferred = this.roomDeferreds.get(roomId);\n if (deferred === undefined) {\n let resolveFunc: () => void;\n deferred = {\n prom: new Promise<void>((resolve) => {\n resolveFunc = resolve;\n }),\n };\n deferred.resolve = resolveFunc!;\n this.roomDeferreds.set(roomId, deferred);\n }\n\n return deferred;\n }\n\n public waitUntilRoomReadyForGroupCalls(roomId: string): Promise<void> {\n return this.getRoomDeferred(roomId).prom;\n }\n\n public getGroupCallById(groupCallId: string): GroupCall | undefined {\n return [...this.groupCalls.values()].find((groupCall) => groupCall.groupCallId === groupCallId);\n }\n\n private createGroupCallForRoom(room: Room): void {\n const callEvents = room.currentState.getStateEvents(EventType.GroupCallPrefix);\n const sortedCallEvents = callEvents.sort((a, b) => b.getTs() - a.getTs());\n\n for (const callEvent of sortedCallEvents) {\n const content = callEvent.getContent();\n\n if (content[\"m.terminated\"] || callEvent.isRedacted()) {\n continue;\n }\n\n logger.debug(\n `GroupCallEventHandler createGroupCallForRoom() choosing group call from possible calls (stateKey=${callEvent.getStateKey()}, ts=${callEvent.getTs()}, roomId=${\n room.roomId\n }, numOfPossibleCalls=${callEvents.length})`,\n );\n\n this.createGroupCallFromRoomStateEvent(callEvent);\n break;\n }\n\n this.getRoomDeferred(room.roomId).resolve!();\n }\n\n private createGroupCallFromRoomStateEvent(event: MatrixEvent): GroupCall | undefined {\n const roomId = event.getRoomId();\n const content = event.getContent();\n\n const room = this.client.getRoom(roomId);\n\n if (!room) {\n logger.warn(\n `GroupCallEventHandler createGroupCallFromRoomStateEvent() couldn't find room for call (roomId=${roomId})`,\n );\n return;\n }\n\n const groupCallId = event.getStateKey();\n\n const callType = content[\"m.type\"];\n\n if (!Object.values(GroupCallType).includes(callType)) {\n logger.warn(\n `GroupCallEventHandler createGroupCallFromRoomStateEvent() received invalid call type (type=${callType}, roomId=${roomId})`,\n );\n return;\n }\n\n const callIntent = content[\"m.intent\"];\n\n if (!Object.values(GroupCallIntent).includes(callIntent)) {\n logger.warn(`Received invalid group call intent (type=${callType}, roomId=${roomId})`);\n return;\n }\n\n const isPtt = Boolean(content[\"io.element.ptt\"]);\n\n let dataChannelOptions: IGroupCallDataChannelOptions | undefined;\n\n if (content?.dataChannelsEnabled && content?.dataChannelOptions) {\n // Pull out just the dataChannelOptions we want to support.\n const { ordered, maxPacketLifeTime, maxRetransmits, protocol } = content.dataChannelOptions;\n dataChannelOptions = { ordered, maxPacketLifeTime, maxRetransmits, protocol };\n }\n\n const groupCall = new GroupCall(\n this.client,\n room,\n callType,\n isPtt,\n callIntent,\n groupCallId,\n // Because without Media section a WebRTC connection is not possible, so need a RTCDataChannel to set up a\n // no media WebRTC connection anyway.\n content?.dataChannelsEnabled || this.client.isVoipWithNoMediaAllowed,\n dataChannelOptions,\n this.client.isVoipWithNoMediaAllowed,\n this.client.useLivekitForGroupCalls,\n content[\"io.element.livekit_service_url\"],\n );\n\n this.groupCalls.set(room.roomId, groupCall);\n this.client.emit(GroupCallEventHandlerEvent.Incoming, groupCall);\n\n return groupCall;\n }\n\n private onRoomsChanged = (room: Room): void => {\n this.createGroupCallForRoom(room);\n };\n\n private onRoomStateChanged = (event: MatrixEvent, state: RoomState): void => {\n const eventType = event.getType();\n\n if (eventType === EventType.GroupCallPrefix) {\n const groupCallId = event.getStateKey();\n const content = event.getContent();\n\n const currentGroupCall = this.groupCalls.get(state.roomId);\n\n if (!currentGroupCall && !content[\"m.terminated\"] && !event.isRedacted()) {\n this.createGroupCallFromRoomStateEvent(event);\n } else if (currentGroupCall && currentGroupCall.groupCallId === groupCallId) {\n if (content[\"m.terminated\"] || event.isRedacted()) {\n currentGroupCall.terminate(false);\n } else if (content[\"m.type\"] !== currentGroupCall.type) {\n // TODO: Handle the callType changing when the room state changes\n logger.warn(\n `GroupCallEventHandler onRoomStateChanged() currently does not support changing type (roomId=${state.roomId})`,\n );\n }\n } else if (currentGroupCall && currentGroupCall.groupCallId !== groupCallId) {\n // TODO: Handle new group calls and multiple group calls\n logger.warn(\n `GroupCallEventHandler onRoomStateChanged() currently does not support multiple calls (roomId=${state.roomId})`,\n );\n }\n }\n };\n}\n"],"mappings":"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","ignoreList":[]}