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 2015, 2016 OpenMarket Ltd
@@ -22,14 +21,13 @@ limitations under the License.
22
21
  import { TypedEventEmitter } from "../models/typed-event-emitter.js";
23
22
  import { GroupCallType, GroupCallState } from "../webrtc/groupCall.js";
24
23
  import { logger } from "../logger.js";
25
- export var MediaHandlerEvent = /*#__PURE__*/function (MediaHandlerEvent) {
24
+ export let MediaHandlerEvent = /*#__PURE__*/function (MediaHandlerEvent) {
26
25
  MediaHandlerEvent["LocalStreamsChanged"] = "local_streams_changed";
27
26
  return MediaHandlerEvent;
28
27
  }({});
29
28
  export class MediaHandler extends TypedEventEmitter {
30
29
  constructor(client) {
31
30
  super();
32
- this.client = client;
33
31
  _defineProperty(this, "audioInput", void 0);
34
32
  _defineProperty(this, "audioSettings", void 0);
35
33
  _defineProperty(this, "videoInput", void 0);
@@ -38,6 +36,7 @@ export class MediaHandler extends TypedEventEmitter {
38
36
  _defineProperty(this, "screensharingStreams", []);
39
37
  // Promise chain to serialise calls to getMediaStream
40
38
  _defineProperty(this, "getMediaStreamPromise", void 0);
39
+ this.client = client;
41
40
  }
42
41
  restoreMediaSettings(audioInput, videoInput) {
43
42
  this.audioInput = audioInput;
@@ -49,27 +48,21 @@ export class MediaHandler extends TypedEventEmitter {
49
48
  * @param deviceId - the identifier for the device
50
49
  * undefined treated as unset
51
50
  */
52
- setAudioInput(deviceId) {
53
- var _this = this;
54
- return _asyncToGenerator(function* () {
55
- logger.info("MediaHandler setAudioInput() running (deviceId=".concat(deviceId, ")"));
56
- if (_this.audioInput === deviceId) return;
57
- _this.audioInput = deviceId;
58
- yield _this.updateLocalUsermediaStreams();
59
- })();
51
+ async setAudioInput(deviceId) {
52
+ logger.info(`MediaHandler setAudioInput() running (deviceId=${deviceId})`);
53
+ if (this.audioInput === deviceId) return;
54
+ this.audioInput = deviceId;
55
+ await this.updateLocalUsermediaStreams();
60
56
  }
61
57
 
62
58
  /**
63
59
  * Set audio settings for MatrixCalls
64
60
  * @param opts - audio options to set
65
61
  */
66
- setAudioSettings(opts) {
67
- var _this2 = this;
68
- return _asyncToGenerator(function* () {
69
- logger.info("MediaHandler setAudioSettings() running (opts=".concat(JSON.stringify(opts), ")"));
70
- _this2.audioSettings = Object.assign({}, opts);
71
- yield _this2.updateLocalUsermediaStreams();
72
- })();
62
+ async setAudioSettings(opts) {
63
+ logger.info(`MediaHandler setAudioSettings() running (opts=${JSON.stringify(opts)})`);
64
+ this.audioSettings = Object.assign({}, opts);
65
+ await this.updateLocalUsermediaStreams();
73
66
  }
74
67
 
75
68
  /**
@@ -77,14 +70,11 @@ export class MediaHandler extends TypedEventEmitter {
77
70
  * @param deviceId - the identifier for the device
78
71
  * undefined treated as unset
79
72
  */
80
- setVideoInput(deviceId) {
81
- var _this3 = this;
82
- return _asyncToGenerator(function* () {
83
- logger.info("MediaHandler setVideoInput() running (deviceId=".concat(deviceId, ")"));
84
- if (_this3.videoInput === deviceId) return;
85
- _this3.videoInput = deviceId;
86
- yield _this3.updateLocalUsermediaStreams();
87
- })();
73
+ async setVideoInput(deviceId) {
74
+ logger.info(`MediaHandler setVideoInput() running (deviceId=${deviceId})`);
75
+ if (this.videoInput === deviceId) return;
76
+ this.videoInput = deviceId;
77
+ await this.updateLocalUsermediaStreams();
88
78
  }
89
79
 
90
80
  /**
@@ -93,87 +83,78 @@ export class MediaHandler extends TypedEventEmitter {
93
83
  * @param videoInput - the identifier for the video device
94
84
  * undefined treated as unset
95
85
  */
96
- setMediaInputs(audioInput, videoInput) {
97
- var _this4 = this;
98
- return _asyncToGenerator(function* () {
99
- logger.log("MediaHandler setMediaInputs() running (audioInput: ".concat(audioInput, " videoInput: ").concat(videoInput, ")"));
100
- _this4.audioInput = audioInput;
101
- _this4.videoInput = videoInput;
102
- yield _this4.updateLocalUsermediaStreams();
103
- })();
86
+ async setMediaInputs(audioInput, videoInput) {
87
+ logger.log(`MediaHandler setMediaInputs() running (audioInput: ${audioInput} videoInput: ${videoInput})`);
88
+ this.audioInput = audioInput;
89
+ this.videoInput = videoInput;
90
+ await this.updateLocalUsermediaStreams();
104
91
  }
105
92
 
106
93
  /*
107
94
  * Requests new usermedia streams and replace the old ones
108
95
  */
109
- updateLocalUsermediaStreams() {
110
- var _this5 = this;
111
- return _asyncToGenerator(function* () {
112
- if (_this5.userMediaStreams.length === 0) return;
113
- var callMediaStreamParams = new Map();
114
- for (var call of _this5.client.callEventHandler.calls.values()) {
115
- callMediaStreamParams.set(call.callId, {
116
- audio: call.hasLocalUserMediaAudioTrack,
117
- video: call.hasLocalUserMediaVideoTrack
118
- });
96
+ async updateLocalUsermediaStreams() {
97
+ if (this.userMediaStreams.length === 0) return;
98
+ const callMediaStreamParams = new Map();
99
+ for (const call of this.client.callEventHandler.calls.values()) {
100
+ callMediaStreamParams.set(call.callId, {
101
+ audio: call.hasLocalUserMediaAudioTrack,
102
+ video: call.hasLocalUserMediaVideoTrack
103
+ });
104
+ }
105
+ for (const stream of this.userMediaStreams) {
106
+ logger.log(`MediaHandler updateLocalUsermediaStreams() stopping all tracks (streamId=${stream.id})`);
107
+ for (const track of stream.getTracks()) {
108
+ track.stop();
119
109
  }
120
- for (var stream of _this5.userMediaStreams) {
121
- logger.log("MediaHandler updateLocalUsermediaStreams() stopping all tracks (streamId=".concat(stream.id, ")"));
122
- for (var track of stream.getTracks()) {
123
- track.stop();
124
- }
110
+ }
111
+ this.userMediaStreams = [];
112
+ this.localUserMediaStream = undefined;
113
+ for (const call of this.client.callEventHandler.calls.values()) {
114
+ if (call.callHasEnded() || !callMediaStreamParams.has(call.callId)) {
115
+ continue;
125
116
  }
126
- _this5.userMediaStreams = [];
127
- _this5.localUserMediaStream = undefined;
128
- for (var _call of _this5.client.callEventHandler.calls.values()) {
129
- if (_call.callHasEnded() || !callMediaStreamParams.has(_call.callId)) {
130
- continue;
131
- }
132
- var _ref = callMediaStreamParams.get(_call.callId),
133
- audio = _ref.audio,
134
- video = _ref.video;
135
- logger.log("MediaHandler updateLocalUsermediaStreams() calling getUserMediaStream() (callId=".concat(_call.callId, ")"));
136
- var _stream = yield _this5.getUserMediaStream(audio, video);
137
- if (_call.callHasEnded()) {
138
- continue;
139
- }
140
- yield _call.updateLocalUsermediaStream(_stream);
117
+ const {
118
+ audio,
119
+ video
120
+ } = callMediaStreamParams.get(call.callId);
121
+ logger.log(`MediaHandler updateLocalUsermediaStreams() calling getUserMediaStream() (callId=${call.callId})`);
122
+ const stream = await this.getUserMediaStream(audio, video);
123
+ if (call.callHasEnded()) {
124
+ continue;
141
125
  }
142
- for (var groupCall of _this5.client.groupCallEventHandler.groupCalls.values()) {
143
- if (!groupCall.localCallFeed) {
144
- continue;
145
- }
146
- logger.log("MediaHandler updateLocalUsermediaStreams() calling getUserMediaStream() (groupCallId=".concat(groupCall.groupCallId, ")"));
147
- var _stream2 = yield _this5.getUserMediaStream(true, groupCall.type === GroupCallType.Video);
148
- if (groupCall.state === GroupCallState.Ended) {
149
- continue;
150
- }
151
- yield groupCall.updateLocalUsermediaStream(_stream2);
126
+ await call.updateLocalUsermediaStream(stream);
127
+ }
128
+ for (const groupCall of this.client.groupCallEventHandler.groupCalls.values()) {
129
+ if (!groupCall.localCallFeed) {
130
+ continue;
152
131
  }
153
- _this5.emit(MediaHandlerEvent.LocalStreamsChanged);
154
- })();
155
- }
156
- hasAudioDevice() {
157
- return _asyncToGenerator(function* () {
158
- try {
159
- var devices = yield navigator.mediaDevices.enumerateDevices();
160
- return devices.filter(device => device.kind === "audioinput").length > 0;
161
- } catch (err) {
162
- logger.log("MediaHandler hasAudioDevice() calling navigator.mediaDevices.enumerateDevices with error", err);
163
- return false;
132
+ logger.log(`MediaHandler updateLocalUsermediaStreams() calling getUserMediaStream() (groupCallId=${groupCall.groupCallId})`);
133
+ const stream = await this.getUserMediaStream(true, groupCall.type === GroupCallType.Video);
134
+ if (groupCall.state === GroupCallState.Ended) {
135
+ continue;
164
136
  }
165
- })();
137
+ await groupCall.updateLocalUsermediaStream(stream);
138
+ }
139
+ this.emit(MediaHandlerEvent.LocalStreamsChanged);
166
140
  }
167
- hasVideoDevice() {
168
- return _asyncToGenerator(function* () {
169
- try {
170
- var devices = yield navigator.mediaDevices.enumerateDevices();
171
- return devices.filter(device => device.kind === "videoinput").length > 0;
172
- } catch (err) {
173
- logger.log("MediaHandler hasVideoDevice() calling navigator.mediaDevices.enumerateDevices with error", err);
174
- return false;
175
- }
176
- })();
141
+ async hasAudioDevice() {
142
+ try {
143
+ const devices = await navigator.mediaDevices.enumerateDevices();
144
+ return devices.filter(device => device.kind === "audioinput").length > 0;
145
+ } catch (err) {
146
+ logger.log(`MediaHandler hasAudioDevice() calling navigator.mediaDevices.enumerateDevices with error`, err);
147
+ return false;
148
+ }
149
+ }
150
+ async hasVideoDevice() {
151
+ try {
152
+ const devices = await navigator.mediaDevices.enumerateDevices();
153
+ return devices.filter(device => device.kind === "videoinput").length > 0;
154
+ } catch (err) {
155
+ logger.log(`MediaHandler hasVideoDevice() calling navigator.mediaDevices.enumerateDevices with error`, err);
156
+ return false;
157
+ }
177
158
  }
178
159
 
179
160
  /**
@@ -182,111 +163,101 @@ export class MediaHandler extends TypedEventEmitter {
182
163
  * @param reusable - is allowed to be reused by the MediaHandler
183
164
  * @returns based on passed parameters
184
165
  */
185
- getUserMediaStream(audio, video) {
186
- var _arguments = arguments,
187
- _this6 = this;
188
- return _asyncToGenerator(function* () {
189
- var reusable = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : true;
190
- // Serialise calls, othertwise we can't sensibly re-use the stream
191
- if (_this6.getMediaStreamPromise) {
192
- _this6.getMediaStreamPromise = _this6.getMediaStreamPromise.then(() => {
193
- return _this6.getUserMediaStreamInternal(audio, video, reusable);
194
- });
195
- } else {
196
- _this6.getMediaStreamPromise = _this6.getUserMediaStreamInternal(audio, video, reusable);
197
- }
198
- return _this6.getMediaStreamPromise;
199
- })();
166
+ async getUserMediaStream(audio, video, reusable = true) {
167
+ // Serialise calls, othertwise we can't sensibly re-use the stream
168
+ if (this.getMediaStreamPromise) {
169
+ this.getMediaStreamPromise = this.getMediaStreamPromise.then(() => {
170
+ return this.getUserMediaStreamInternal(audio, video, reusable);
171
+ });
172
+ } else {
173
+ this.getMediaStreamPromise = this.getUserMediaStreamInternal(audio, video, reusable);
174
+ }
175
+ return this.getMediaStreamPromise;
200
176
  }
201
- getUserMediaStreamInternal(audio, video, reusable) {
202
- var _this7 = this;
203
- return _asyncToGenerator(function* () {
204
- var shouldRequestAudio = audio && (yield _this7.hasAudioDevice());
205
- var shouldRequestVideo = video && (yield _this7.hasVideoDevice());
206
- var stream;
207
- var canReuseStream = true;
208
- if (_this7.localUserMediaStream) {
209
- var _this7$localUserMedia, _this7$localUserMedia2;
210
- // This figures out if we can reuse the current localUsermediaStream
211
- // based on whether or not the "mute state" (presence of tracks of a
212
- // given kind) matches what is being requested
213
- if (shouldRequestAudio !== _this7.localUserMediaStream.getAudioTracks().length > 0) {
214
- canReuseStream = false;
215
- }
216
- if (shouldRequestVideo !== _this7.localUserMediaStream.getVideoTracks().length > 0) {
217
- canReuseStream = false;
218
- }
177
+ async getUserMediaStreamInternal(audio, video, reusable) {
178
+ const shouldRequestAudio = audio && (await this.hasAudioDevice());
179
+ const shouldRequestVideo = video && (await this.hasVideoDevice());
180
+ let stream;
181
+ let canReuseStream = true;
182
+ if (this.localUserMediaStream) {
183
+ // This figures out if we can reuse the current localUsermediaStream
184
+ // based on whether or not the "mute state" (presence of tracks of a
185
+ // given kind) matches what is being requested
186
+ if (shouldRequestAudio !== this.localUserMediaStream.getAudioTracks().length > 0) {
187
+ canReuseStream = false;
188
+ }
189
+ if (shouldRequestVideo !== this.localUserMediaStream.getVideoTracks().length > 0) {
190
+ canReuseStream = false;
191
+ }
219
192
 
220
- // This code checks that the device ID is the same as the localUserMediaStream stream, but we update
221
- // the localUserMediaStream whenever the device ID changes (apart from when restoring) so it's not
222
- // clear why this would ever be different, unless there's a race.
223
- if (shouldRequestAudio && ((_this7$localUserMedia = _this7.localUserMediaStream.getAudioTracks()[0]) === null || _this7$localUserMedia === void 0 || (_this7$localUserMedia = _this7$localUserMedia.getSettings()) === null || _this7$localUserMedia === void 0 ? void 0 : _this7$localUserMedia.deviceId) !== _this7.audioInput) {
224
- canReuseStream = false;
225
- }
226
- if (shouldRequestVideo && ((_this7$localUserMedia2 = _this7.localUserMediaStream.getVideoTracks()[0]) === null || _this7$localUserMedia2 === void 0 || (_this7$localUserMedia2 = _this7$localUserMedia2.getSettings()) === null || _this7$localUserMedia2 === void 0 ? void 0 : _this7$localUserMedia2.deviceId) !== _this7.videoInput) {
227
- canReuseStream = false;
228
- }
229
- } else {
193
+ // This code checks that the device ID is the same as the localUserMediaStream stream, but we update
194
+ // the localUserMediaStream whenever the device ID changes (apart from when restoring) so it's not
195
+ // clear why this would ever be different, unless there's a race.
196
+ if (shouldRequestAudio && this.localUserMediaStream.getAudioTracks()[0]?.getSettings()?.deviceId !== this.audioInput) {
230
197
  canReuseStream = false;
231
198
  }
232
- if (!canReuseStream) {
233
- var constraints;
234
- try {
235
- // Not specifying exact for deviceId means switching devices does not always work,
236
- // try with exact and fallback to ideal if it fails
237
- constraints = _this7.getUserMediaContraints(shouldRequestAudio, shouldRequestVideo, true);
238
- stream = yield navigator.mediaDevices.getUserMedia(constraints);
239
- } catch (e) {
240
- logger.warn("MediaHandler getUserMediaStreamInternal() error (e=".concat(e, "), retrying without exact deviceId"));
241
- constraints = _this7.getUserMediaContraints(shouldRequestAudio, shouldRequestVideo, false);
242
- stream = yield navigator.mediaDevices.getUserMedia(constraints);
243
- }
244
- logger.log("MediaHandler getUserMediaStreamInternal() calling getUserMediaStream (streamId=".concat(stream.id, ", shouldRequestAudio=").concat(shouldRequestAudio, ", shouldRequestVideo=").concat(shouldRequestVideo, ", constraints=").concat(JSON.stringify(constraints), ")"));
245
- for (var track of stream.getTracks()) {
246
- var settings = track.getSettings();
247
- if (track.kind === "audio") {
248
- _this7.audioInput = settings.deviceId;
249
- } else if (track.kind === "video") {
250
- _this7.videoInput = settings.deviceId;
251
- }
252
- }
253
- if (reusable) {
254
- _this7.localUserMediaStream = stream;
255
- }
256
- } else {
257
- var _this7$localUserMedia3;
258
- stream = _this7.localUserMediaStream.clone();
259
- logger.log("MediaHandler getUserMediaStreamInternal() cloning (oldStreamId=".concat((_this7$localUserMedia3 = _this7.localUserMediaStream) === null || _this7$localUserMedia3 === void 0 ? void 0 : _this7$localUserMedia3.id, " newStreamId=").concat(stream.id, " shouldRequestAudio=").concat(shouldRequestAudio, " shouldRequestVideo=").concat(shouldRequestVideo, ")"));
260
- if (!shouldRequestAudio) {
261
- for (var _track of stream.getAudioTracks()) {
262
- stream.removeTrack(_track);
263
- }
264
- }
265
- if (!shouldRequestVideo) {
266
- for (var _track2 of stream.getVideoTracks()) {
267
- stream.removeTrack(_track2);
268
- }
199
+ if (shouldRequestVideo && this.localUserMediaStream.getVideoTracks()[0]?.getSettings()?.deviceId !== this.videoInput) {
200
+ canReuseStream = false;
201
+ }
202
+ } else {
203
+ canReuseStream = false;
204
+ }
205
+ if (!canReuseStream) {
206
+ let constraints;
207
+ try {
208
+ // Not specifying exact for deviceId means switching devices does not always work,
209
+ // try with exact and fallback to ideal if it fails
210
+ constraints = this.getUserMediaContraints(shouldRequestAudio, shouldRequestVideo, true);
211
+ stream = await navigator.mediaDevices.getUserMedia(constraints);
212
+ } catch (e) {
213
+ logger.warn(`MediaHandler getUserMediaStreamInternal() error (e=${e}), retrying without exact deviceId`);
214
+ constraints = this.getUserMediaContraints(shouldRequestAudio, shouldRequestVideo, false);
215
+ stream = await navigator.mediaDevices.getUserMedia(constraints);
216
+ }
217
+ logger.log(`MediaHandler getUserMediaStreamInternal() calling getUserMediaStream (streamId=${stream.id}, shouldRequestAudio=${shouldRequestAudio}, shouldRequestVideo=${shouldRequestVideo}, constraints=${JSON.stringify(constraints)})`);
218
+ for (const track of stream.getTracks()) {
219
+ const settings = track.getSettings();
220
+ if (track.kind === "audio") {
221
+ this.audioInput = settings.deviceId;
222
+ } else if (track.kind === "video") {
223
+ this.videoInput = settings.deviceId;
269
224
  }
270
225
  }
271
226
  if (reusable) {
272
- _this7.userMediaStreams.push(stream);
227
+ this.localUserMediaStream = stream;
273
228
  }
274
- _this7.emit(MediaHandlerEvent.LocalStreamsChanged);
275
- return stream;
276
- })();
229
+ } else {
230
+ stream = this.localUserMediaStream.clone();
231
+ logger.log(`MediaHandler getUserMediaStreamInternal() cloning (oldStreamId=${this.localUserMediaStream?.id} newStreamId=${stream.id} shouldRequestAudio=${shouldRequestAudio} shouldRequestVideo=${shouldRequestVideo})`);
232
+ if (!shouldRequestAudio) {
233
+ for (const track of stream.getAudioTracks()) {
234
+ stream.removeTrack(track);
235
+ }
236
+ }
237
+ if (!shouldRequestVideo) {
238
+ for (const track of stream.getVideoTracks()) {
239
+ stream.removeTrack(track);
240
+ }
241
+ }
242
+ }
243
+ if (reusable) {
244
+ this.userMediaStreams.push(stream);
245
+ }
246
+ this.emit(MediaHandlerEvent.LocalStreamsChanged);
247
+ return stream;
277
248
  }
278
249
 
279
250
  /**
280
251
  * Stops all tracks on the provided usermedia stream
281
252
  */
282
253
  stopUserMediaStream(mediaStream) {
283
- logger.log("MediaHandler stopUserMediaStream() stopping (streamId=".concat(mediaStream.id, ")"));
284
- for (var track of mediaStream.getTracks()) {
254
+ logger.log(`MediaHandler stopUserMediaStream() stopping (streamId=${mediaStream.id})`);
255
+ for (const track of mediaStream.getTracks()) {
285
256
  track.stop();
286
257
  }
287
- var index = this.userMediaStreams.indexOf(mediaStream);
258
+ const index = this.userMediaStreams.indexOf(mediaStream);
288
259
  if (index !== -1) {
289
- logger.debug("MediaHandler stopUserMediaStream() splicing usermedia stream out stream array (streamId=".concat(mediaStream.id, ")"), mediaStream.id);
260
+ logger.debug(`MediaHandler stopUserMediaStream() splicing usermedia stream out stream array (streamId=${mediaStream.id})`, mediaStream.id);
290
261
  this.userMediaStreams.splice(index, 1);
291
262
  }
292
263
  this.emit(MediaHandlerEvent.LocalStreamsChanged);
@@ -298,9 +269,8 @@ export class MediaHandler extends TypedEventEmitter {
298
269
  // we have just stopped, and if we do stop any, call the same method on the
299
270
  // cached stream too in order to stop all its tracks (in case they are different)
300
271
  // and un-cache it.
301
- for (var _track3 of mediaStream.getTracks()) {
302
- var _this$localUserMediaS;
303
- if ((_this$localUserMediaS = this.localUserMediaStream) !== null && _this$localUserMediaS !== void 0 && _this$localUserMediaS.getTrackById(_track3.id)) {
272
+ for (const track of mediaStream.getTracks()) {
273
+ if (this.localUserMediaStream?.getTrackById(track.id)) {
304
274
  this.stopUserMediaStream(this.localUserMediaStream);
305
275
  break;
306
276
  }
@@ -313,48 +283,42 @@ export class MediaHandler extends TypedEventEmitter {
313
283
  * @param reusable - is allowed to be reused by the MediaHandler
314
284
  * @returns based on passed parameters
315
285
  */
316
- getScreensharingStream() {
317
- var _arguments2 = arguments,
318
- _this8 = this;
319
- return _asyncToGenerator(function* () {
320
- var opts = _arguments2.length > 0 && _arguments2[0] !== undefined ? _arguments2[0] : {};
321
- var reusable = _arguments2.length > 1 && _arguments2[1] !== undefined ? _arguments2[1] : true;
322
- var stream;
323
- if (_this8.screensharingStreams.length === 0) {
324
- var screenshareConstraints = _this8.getScreenshareContraints(opts);
325
- if (opts.desktopCapturerSourceId) {
326
- // We are using Electron
327
- logger.debug("MediaHandler getScreensharingStream() calling getUserMedia() (opts=".concat(JSON.stringify(opts), ")"));
328
- stream = yield navigator.mediaDevices.getUserMedia(screenshareConstraints);
329
- } else {
330
- // We are not using Electron
331
- logger.debug("MediaHandler getScreensharingStream() calling getDisplayMedia() (opts=".concat(JSON.stringify(opts), ")"));
332
- stream = yield navigator.mediaDevices.getDisplayMedia(screenshareConstraints);
333
- }
286
+ async getScreensharingStream(opts = {}, reusable = true) {
287
+ let stream;
288
+ if (this.screensharingStreams.length === 0) {
289
+ const screenshareConstraints = this.getScreenshareContraints(opts);
290
+ if (opts.desktopCapturerSourceId) {
291
+ // We are using Electron
292
+ logger.debug(`MediaHandler getScreensharingStream() calling getUserMedia() (opts=${JSON.stringify(opts)})`);
293
+ stream = await navigator.mediaDevices.getUserMedia(screenshareConstraints);
334
294
  } else {
335
- var matchingStream = _this8.screensharingStreams[_this8.screensharingStreams.length - 1];
336
- logger.log("MediaHandler getScreensharingStream() cloning (streamId=".concat(matchingStream.id, ")"));
337
- stream = matchingStream.clone();
338
- }
339
- if (reusable) {
340
- _this8.screensharingStreams.push(stream);
295
+ // We are not using Electron
296
+ logger.debug(`MediaHandler getScreensharingStream() calling getDisplayMedia() (opts=${JSON.stringify(opts)})`);
297
+ stream = await navigator.mediaDevices.getDisplayMedia(screenshareConstraints);
341
298
  }
342
- _this8.emit(MediaHandlerEvent.LocalStreamsChanged);
343
- return stream;
344
- })();
299
+ } else {
300
+ const matchingStream = this.screensharingStreams[this.screensharingStreams.length - 1];
301
+ logger.log(`MediaHandler getScreensharingStream() cloning (streamId=${matchingStream.id})`);
302
+ stream = matchingStream.clone();
303
+ }
304
+ if (reusable) {
305
+ this.screensharingStreams.push(stream);
306
+ }
307
+ this.emit(MediaHandlerEvent.LocalStreamsChanged);
308
+ return stream;
345
309
  }
346
310
 
347
311
  /**
348
312
  * Stops all tracks on the provided screensharing stream
349
313
  */
350
314
  stopScreensharingStream(mediaStream) {
351
- logger.debug("MediaHandler stopScreensharingStream() stopping stream (streamId=".concat(mediaStream.id, ")"));
352
- for (var track of mediaStream.getTracks()) {
315
+ logger.debug(`MediaHandler stopScreensharingStream() stopping stream (streamId=${mediaStream.id})`);
316
+ for (const track of mediaStream.getTracks()) {
353
317
  track.stop();
354
318
  }
355
- var index = this.screensharingStreams.indexOf(mediaStream);
319
+ const index = this.screensharingStreams.indexOf(mediaStream);
356
320
  if (index !== -1) {
357
- logger.debug("MediaHandler stopScreensharingStream() splicing stream out (streamId=".concat(mediaStream.id, ")"));
321
+ logger.debug(`MediaHandler stopScreensharingStream() splicing stream out (streamId=${mediaStream.id})`);
358
322
  this.screensharingStreams.splice(index, 1);
359
323
  }
360
324
  this.emit(MediaHandlerEvent.LocalStreamsChanged);
@@ -364,15 +328,15 @@ export class MediaHandler extends TypedEventEmitter {
364
328
  * Stops all local media tracks
365
329
  */
366
330
  stopAllStreams() {
367
- for (var stream of this.userMediaStreams) {
368
- logger.log("MediaHandler stopAllStreams() stopping (streamId=".concat(stream.id, ")"));
369
- for (var track of stream.getTracks()) {
331
+ for (const stream of this.userMediaStreams) {
332
+ logger.log(`MediaHandler stopAllStreams() stopping (streamId=${stream.id})`);
333
+ for (const track of stream.getTracks()) {
370
334
  track.stop();
371
335
  }
372
336
  }
373
- for (var _stream3 of this.screensharingStreams) {
374
- for (var _track4 of _stream3.getTracks()) {
375
- _track4.stop();
337
+ for (const stream of this.screensharingStreams) {
338
+ for (const track of stream.getTracks()) {
339
+ track.stop();
376
340
  }
377
341
  }
378
342
  this.userMediaStreams = [];
@@ -381,9 +345,9 @@ export class MediaHandler extends TypedEventEmitter {
381
345
  this.emit(MediaHandlerEvent.LocalStreamsChanged);
382
346
  }
383
347
  getUserMediaContraints(audio, video, exactDeviceId) {
384
- var isWebkit = !!navigator.webkitGetUserMedia;
385
- var deviceIdKey = exactDeviceId ? "exact" : "ideal";
386
- var audioConstraints = {};
348
+ const isWebkit = !!navigator.webkitGetUserMedia;
349
+ const deviceIdKey = exactDeviceId ? "exact" : "ideal";
350
+ const audioConstraints = {};
387
351
  if (this.audioInput) {
388
352
  audioConstraints.deviceId = {
389
353
  [deviceIdKey]: this.audioInput
@@ -400,7 +364,7 @@ export class MediaHandler extends TypedEventEmitter {
400
364
  ideal: this.audioSettings.noiseSuppression
401
365
  };
402
366
  }
403
- var videoConstraints = {
367
+ const videoConstraints = {
404
368
  /* We want 640x360. Chrome will give it only if we ask exactly,
405
369
  FF refuses entirely if we ask exactly, so have to ask for ideal
406
370
  instead
@@ -428,11 +392,13 @@ export class MediaHandler extends TypedEventEmitter {
428
392
  };
429
393
  }
430
394
  getScreenshareContraints(opts) {
431
- var desktopCapturerSourceId = opts.desktopCapturerSourceId,
432
- audio = opts.audio;
395
+ const {
396
+ desktopCapturerSourceId,
397
+ audio
398
+ } = opts;
433
399
  if (desktopCapturerSourceId) {
434
400
  return {
435
- audio: audio !== null && audio !== void 0 ? audio : false,
401
+ audio: audio ?? false,
436
402
  video: {
437
403
  mandatory: {
438
404
  chromeMediaSource: "desktop",
@@ -442,7 +408,7 @@ export class MediaHandler extends TypedEventEmitter {
442
408
  };
443
409
  } else {
444
410
  return {
445
- audio: audio !== null && audio !== void 0 ? audio : false,
411
+ audio: audio ?? false,
446
412
  video: true
447
413
  };
448
414
  }