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 +1 @@
1
- {"version":3,"file":"summaryStatsReportGatherer.js","names":["SummaryStatsReportGatherer","constructor","emitter","build","allSummary","summary","filter","s","isFirstCollection","summaryTotalCount","length","peerConnectionsCount","summaryCounter","receivedAudio","receivedVideo","receivedMedia","concealedAudio","totalAudio","maxJitter","maxPacketLoss","forEach","stats","countTrackListReceivedMedia","countConcealedAudio","buildMaxJitter","buildMaxPacketLoss","decimalPlaces","report","percentageReceivedMedia","Number","toFixed","percentageReceivedVideoMedia","percentageReceivedAudioMedia","percentageConcealedAudio","peerConnections","emitSummaryStatsReport","extendSummaryReport","callParticipants","devices","users","userEntry","push","device","opponentDevicesInCall","Math","max","opponentUsersInCall","diffDevicesToPeerConnections","ratioPeerConnectionToDevices","counter","hasReceivedAudio","hasReceivedVideo","receivedAudioMedia","audioTrackSummary","count","receivedVideoMedia","videoTrackSummary","muted"],"sources":["../../../src/webrtc/stats/summaryStatsReportGatherer.ts"],"sourcesContent":["/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\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 http://www.apache.org/licenses/LICENSE-2.0\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*/\nimport { type StatsReportEmitter } from \"./statsReportEmitter.ts\";\nimport { type CallStatsReportSummary } from \"./callStatsReportSummary.ts\";\nimport { type SummaryStatsReport } from \"./statsReport.ts\";\nimport { type ParticipantState } from \"../groupCall.ts\";\nimport { type RoomMember } from \"../../matrix.ts\";\n\ninterface CallStatsReportSummaryCounter {\n receivedAudio: number;\n receivedVideo: number;\n receivedMedia: number;\n concealedAudio: number;\n totalAudio: number;\n}\n\nexport class SummaryStatsReportGatherer {\n public constructor(private emitter: StatsReportEmitter) {}\n\n public build(allSummary: CallStatsReportSummary[]): void {\n // Filter all stats which collect the first time webrtc stats.\n // Because stats based on time interval and the first collection of a summery stats has no previous\n // webrtcStats as basement all the calculation are 0. We don't want track the 0 stats.\n const summary = allSummary.filter((s) => !s.isFirstCollection);\n const summaryTotalCount = summary.length;\n // For counting the peer connections we also want to consider the ignored summaries\n const peerConnectionsCount = allSummary.length;\n if (summaryTotalCount === 0) {\n return;\n }\n\n const summaryCounter: CallStatsReportSummaryCounter = {\n receivedAudio: 0,\n receivedVideo: 0,\n receivedMedia: 0,\n concealedAudio: 0,\n totalAudio: 0,\n };\n let maxJitter = 0;\n let maxPacketLoss = 0;\n summary.forEach((stats) => {\n this.countTrackListReceivedMedia(summaryCounter, stats);\n this.countConcealedAudio(summaryCounter, stats);\n maxJitter = this.buildMaxJitter(maxJitter, stats);\n maxPacketLoss = this.buildMaxPacketLoss(maxPacketLoss, stats);\n });\n const decimalPlaces = 5;\n const report = {\n percentageReceivedMedia: Number((summaryCounter.receivedMedia / summaryTotalCount).toFixed(decimalPlaces)),\n percentageReceivedVideoMedia: Number(\n (summaryCounter.receivedVideo / summaryTotalCount).toFixed(decimalPlaces),\n ),\n percentageReceivedAudioMedia: Number(\n (summaryCounter.receivedAudio / summaryTotalCount).toFixed(decimalPlaces),\n ),\n maxJitter,\n maxPacketLoss,\n percentageConcealedAudio: Number(\n summaryCounter.totalAudio > 0\n ? (summaryCounter.concealedAudio / summaryCounter.totalAudio).toFixed(decimalPlaces)\n : 0,\n ),\n peerConnections: peerConnectionsCount,\n } as SummaryStatsReport;\n this.emitter.emitSummaryStatsReport(report);\n }\n\n public static extendSummaryReport(\n report: SummaryStatsReport,\n callParticipants: Map<RoomMember, Map<string, ParticipantState>>,\n ): void {\n // Calculate the actual number of devices based on the participants state event\n // (this is used, to compare the expected participant count from the room state with the acutal peer connections)\n // const devices = callParticipants.()\n const devices: [string, ParticipantState][] = [];\n const users: [RoomMember, Map<string, ParticipantState>][] = [];\n for (const userEntry of callParticipants) {\n users.push(userEntry);\n for (const device of userEntry[1]) {\n devices.push(device);\n }\n }\n report.opponentDevicesInCall = Math.max(0, devices.length - 1);\n report.opponentUsersInCall = Math.max(0, users.length - 1);\n report.diffDevicesToPeerConnections = Math.max(0, devices.length - 1) - report.peerConnections;\n report.ratioPeerConnectionToDevices =\n Math.max(0, devices.length - 1) == 0 ? 0 : report.peerConnections / (devices.length - 1);\n }\n\n private countTrackListReceivedMedia(counter: CallStatsReportSummaryCounter, stats: CallStatsReportSummary): void {\n let hasReceivedAudio = false;\n let hasReceivedVideo = false;\n if (stats.receivedAudioMedia > 0 || stats.audioTrackSummary.count === 0) {\n counter.receivedAudio++;\n hasReceivedAudio = true;\n }\n if (stats.receivedVideoMedia > 0 || stats.videoTrackSummary.count === 0) {\n counter.receivedVideo++;\n hasReceivedVideo = true;\n } else {\n if (stats.videoTrackSummary.muted > 0 && stats.videoTrackSummary.muted === stats.videoTrackSummary.count) {\n counter.receivedVideo++;\n hasReceivedVideo = true;\n }\n }\n\n if (hasReceivedVideo && hasReceivedAudio) {\n counter.receivedMedia++;\n }\n }\n\n private buildMaxJitter(maxJitter: number, stats: CallStatsReportSummary): number {\n if (maxJitter < stats.videoTrackSummary.maxJitter) {\n maxJitter = stats.videoTrackSummary.maxJitter;\n }\n\n if (maxJitter < stats.audioTrackSummary.maxJitter) {\n maxJitter = stats.audioTrackSummary.maxJitter;\n }\n return maxJitter;\n }\n\n private buildMaxPacketLoss(maxPacketLoss: number, stats: CallStatsReportSummary): number {\n if (maxPacketLoss < stats.videoTrackSummary.maxPacketLoss) {\n maxPacketLoss = stats.videoTrackSummary.maxPacketLoss;\n }\n\n if (maxPacketLoss < stats.audioTrackSummary.maxPacketLoss) {\n maxPacketLoss = stats.audioTrackSummary.maxPacketLoss;\n }\n return maxPacketLoss;\n }\n\n private countConcealedAudio(summaryCounter: CallStatsReportSummaryCounter, stats: CallStatsReportSummary): void {\n summaryCounter.concealedAudio += stats.audioTrackSummary.concealedAudio;\n summaryCounter.totalAudio += stats.audioTrackSummary.totalAudio;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"summaryStatsReportGatherer.js","names":[],"sources":["../../../src/webrtc/stats/summaryStatsReportGatherer.ts"],"sourcesContent":["/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\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 http://www.apache.org/licenses/LICENSE-2.0\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*/\nimport { type StatsReportEmitter } from \"./statsReportEmitter.ts\";\nimport { type CallStatsReportSummary } from \"./callStatsReportSummary.ts\";\nimport { type SummaryStatsReport } from \"./statsReport.ts\";\nimport { type ParticipantState } from \"../groupCall.ts\";\nimport { type RoomMember } from \"../../matrix.ts\";\n\ninterface CallStatsReportSummaryCounter {\n receivedAudio: number;\n receivedVideo: number;\n receivedMedia: number;\n concealedAudio: number;\n totalAudio: number;\n}\n\nexport class SummaryStatsReportGatherer {\n public constructor(private emitter: StatsReportEmitter) {}\n\n public build(allSummary: CallStatsReportSummary[]): void {\n // Filter all stats which collect the first time webrtc stats.\n // Because stats based on time interval and the first collection of a summery stats has no previous\n // webrtcStats as basement all the calculation are 0. We don't want track the 0 stats.\n const summary = allSummary.filter((s) => !s.isFirstCollection);\n const summaryTotalCount = summary.length;\n // For counting the peer connections we also want to consider the ignored summaries\n const peerConnectionsCount = allSummary.length;\n if (summaryTotalCount === 0) {\n return;\n }\n\n const summaryCounter: CallStatsReportSummaryCounter = {\n receivedAudio: 0,\n receivedVideo: 0,\n receivedMedia: 0,\n concealedAudio: 0,\n totalAudio: 0,\n };\n let maxJitter = 0;\n let maxPacketLoss = 0;\n summary.forEach((stats) => {\n this.countTrackListReceivedMedia(summaryCounter, stats);\n this.countConcealedAudio(summaryCounter, stats);\n maxJitter = this.buildMaxJitter(maxJitter, stats);\n maxPacketLoss = this.buildMaxPacketLoss(maxPacketLoss, stats);\n });\n const decimalPlaces = 5;\n const report = {\n percentageReceivedMedia: Number((summaryCounter.receivedMedia / summaryTotalCount).toFixed(decimalPlaces)),\n percentageReceivedVideoMedia: Number(\n (summaryCounter.receivedVideo / summaryTotalCount).toFixed(decimalPlaces),\n ),\n percentageReceivedAudioMedia: Number(\n (summaryCounter.receivedAudio / summaryTotalCount).toFixed(decimalPlaces),\n ),\n maxJitter,\n maxPacketLoss,\n percentageConcealedAudio: Number(\n summaryCounter.totalAudio > 0\n ? (summaryCounter.concealedAudio / summaryCounter.totalAudio).toFixed(decimalPlaces)\n : 0,\n ),\n peerConnections: peerConnectionsCount,\n } as SummaryStatsReport;\n this.emitter.emitSummaryStatsReport(report);\n }\n\n public static extendSummaryReport(\n report: SummaryStatsReport,\n callParticipants: Map<RoomMember, Map<string, ParticipantState>>,\n ): void {\n // Calculate the actual number of devices based on the participants state event\n // (this is used, to compare the expected participant count from the room state with the acutal peer connections)\n // const devices = callParticipants.()\n const devices: [string, ParticipantState][] = [];\n const users: [RoomMember, Map<string, ParticipantState>][] = [];\n for (const userEntry of callParticipants) {\n users.push(userEntry);\n for (const device of userEntry[1]) {\n devices.push(device);\n }\n }\n report.opponentDevicesInCall = Math.max(0, devices.length - 1);\n report.opponentUsersInCall = Math.max(0, users.length - 1);\n report.diffDevicesToPeerConnections = Math.max(0, devices.length - 1) - report.peerConnections;\n report.ratioPeerConnectionToDevices =\n Math.max(0, devices.length - 1) == 0 ? 0 : report.peerConnections / (devices.length - 1);\n }\n\n private countTrackListReceivedMedia(counter: CallStatsReportSummaryCounter, stats: CallStatsReportSummary): void {\n let hasReceivedAudio = false;\n let hasReceivedVideo = false;\n if (stats.receivedAudioMedia > 0 || stats.audioTrackSummary.count === 0) {\n counter.receivedAudio++;\n hasReceivedAudio = true;\n }\n if (stats.receivedVideoMedia > 0 || stats.videoTrackSummary.count === 0) {\n counter.receivedVideo++;\n hasReceivedVideo = true;\n } else {\n if (stats.videoTrackSummary.muted > 0 && stats.videoTrackSummary.muted === stats.videoTrackSummary.count) {\n counter.receivedVideo++;\n hasReceivedVideo = true;\n }\n }\n\n if (hasReceivedVideo && hasReceivedAudio) {\n counter.receivedMedia++;\n }\n }\n\n private buildMaxJitter(maxJitter: number, stats: CallStatsReportSummary): number {\n if (maxJitter < stats.videoTrackSummary.maxJitter) {\n maxJitter = stats.videoTrackSummary.maxJitter;\n }\n\n if (maxJitter < stats.audioTrackSummary.maxJitter) {\n maxJitter = stats.audioTrackSummary.maxJitter;\n }\n return maxJitter;\n }\n\n private buildMaxPacketLoss(maxPacketLoss: number, stats: CallStatsReportSummary): number {\n if (maxPacketLoss < stats.videoTrackSummary.maxPacketLoss) {\n maxPacketLoss = stats.videoTrackSummary.maxPacketLoss;\n }\n\n if (maxPacketLoss < stats.audioTrackSummary.maxPacketLoss) {\n maxPacketLoss = stats.audioTrackSummary.maxPacketLoss;\n }\n return maxPacketLoss;\n }\n\n private countConcealedAudio(summaryCounter: CallStatsReportSummaryCounter, stats: CallStatsReportSummary): void {\n summaryCounter.concealedAudio += stats.audioTrackSummary.concealedAudio;\n summaryCounter.totalAudio += stats.audioTrackSummary.totalAudio;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,23 +1,23 @@
1
1
  import { ValueFormatter } from "./valueFormatter.js";
2
2
  export class TrackStatsBuilder {
3
3
  static buildFramerateResolution(trackStats, now) {
4
- var resolution = {
4
+ const resolution = {
5
5
  height: now.frameHeight,
6
6
  width: now.frameWidth
7
7
  };
8
- var frameRate = now.framesPerSecond;
8
+ const frameRate = now.framesPerSecond;
9
9
  if (resolution.height && resolution.width) {
10
10
  trackStats.setResolution(resolution);
11
11
  }
12
12
  trackStats.setFramerate(Math.round(frameRate || 0));
13
13
  }
14
14
  static calculateSimulcastFramerate(trackStats, now, before, layer) {
15
- var frameRate = trackStats.getFramerate();
15
+ let frameRate = trackStats.getFramerate();
16
16
  if (!frameRate) {
17
17
  if (before) {
18
- var timeMs = now.timestamp - before.timestamp;
18
+ const timeMs = now.timestamp - before.timestamp;
19
19
  if (timeMs > 0 && now.framesSent) {
20
- var numberOfFramesSinceBefore = now.framesSent - before.framesSent;
20
+ const numberOfFramesSinceBefore = now.framesSent - before.framesSent;
21
21
  frameRate = numberOfFramesSinceBefore / timeMs * 1000;
22
22
  }
23
23
  }
@@ -31,14 +31,14 @@ export class TrackStatsBuilder {
31
31
  trackStats.setFramerate(frameRate);
32
32
  }
33
33
  static buildCodec(report, trackStats, now) {
34
- var codec = report === null || report === void 0 ? void 0 : report.get(now.codecId);
34
+ const codec = report?.get(now.codecId);
35
35
  if (codec) {
36
36
  /**
37
37
  * The mime type has the following form: video/VP8 or audio/ISAC,
38
38
  * so we what to keep just the type after the '/', audio and video
39
39
  * keys will be added on the processing side.
40
40
  */
41
- var codecShortType = codec.mimeType.split("/")[1];
41
+ const codecShortType = codec.mimeType.split("/")[1];
42
42
  if (codecShortType) trackStats.setCodec(codecShortType);
43
43
  }
44
44
  }
@@ -55,16 +55,16 @@ export class TrackStatsBuilder {
55
55
  });
56
56
  }
57
57
  static buildPacketsLost(trackStats, now, before) {
58
- var key = now.type === "outbound-rtp" ? "packetsSent" : "packetsReceived";
59
- var packetsNow = now[key];
58
+ const key = now.type === "outbound-rtp" ? "packetsSent" : "packetsReceived";
59
+ let packetsNow = now[key];
60
60
  if (!packetsNow || packetsNow < 0) {
61
61
  packetsNow = 0;
62
62
  }
63
- var packetsBefore = ValueFormatter.getNonNegativeValue(before[key]);
64
- var packetsDiff = Math.max(0, packetsNow - packetsBefore);
65
- var packetsLostNow = ValueFormatter.getNonNegativeValue(now.packetsLost);
66
- var packetsLostBefore = ValueFormatter.getNonNegativeValue(before.packetsLost);
67
- var packetsLostDiff = Math.max(0, packetsLostNow - packetsLostBefore);
63
+ const packetsBefore = ValueFormatter.getNonNegativeValue(before[key]);
64
+ const packetsDiff = Math.max(0, packetsNow - packetsBefore);
65
+ const packetsLostNow = ValueFormatter.getNonNegativeValue(now.packetsLost);
66
+ const packetsLostBefore = ValueFormatter.getNonNegativeValue(before.packetsLost);
67
+ const packetsLostDiff = Math.max(0, packetsLostNow - packetsLostBefore);
68
68
  trackStats.setLoss({
69
69
  packetsTotal: packetsDiff + packetsLostDiff,
70
70
  packetsLost: packetsLostDiff,
@@ -72,23 +72,22 @@ export class TrackStatsBuilder {
72
72
  });
73
73
  }
74
74
  static calculateBitrate(bytesNowAny, bytesBeforeAny, nowTimestamp, beforeTimestamp) {
75
- var bytesNow = ValueFormatter.getNonNegativeValue(bytesNowAny);
76
- var bytesBefore = ValueFormatter.getNonNegativeValue(bytesBeforeAny);
77
- var bytesProcessed = Math.max(0, bytesNow - bytesBefore);
78
- var timeMs = nowTimestamp - beforeTimestamp;
79
- var bitrateKbps = 0;
75
+ const bytesNow = ValueFormatter.getNonNegativeValue(bytesNowAny);
76
+ const bytesBefore = ValueFormatter.getNonNegativeValue(bytesBeforeAny);
77
+ const bytesProcessed = Math.max(0, bytesNow - bytesBefore);
78
+ const timeMs = nowTimestamp - beforeTimestamp;
79
+ let bitrateKbps = 0;
80
80
  if (timeMs > 0) {
81
81
  bitrateKbps = Math.round(bytesProcessed * 8 / timeMs);
82
82
  }
83
83
  return bitrateKbps;
84
84
  }
85
85
  static setTrackStatsState(trackStats, transceiver) {
86
- var _transceiver$sender;
87
86
  if (transceiver === undefined) {
88
87
  trackStats.alive = false;
89
88
  return;
90
89
  }
91
- var track = trackStats.getType() === "remote" ? transceiver.receiver.track : transceiver === null || transceiver === void 0 || (_transceiver$sender = transceiver.sender) === null || _transceiver$sender === void 0 ? void 0 : _transceiver$sender.track;
90
+ const track = trackStats.getType() === "remote" ? transceiver.receiver.track : transceiver?.sender?.track;
92
91
  if (track === undefined || track === null) {
93
92
  trackStats.alive = false;
94
93
  return;
@@ -102,7 +101,7 @@ export class TrackStatsBuilder {
102
101
  trackStats.alive = true;
103
102
  }
104
103
  static buildTrackSummary(trackStatsList) {
105
- var videoTrackSummary = {
104
+ const videoTrackSummary = {
106
105
  count: 0,
107
106
  muted: 0,
108
107
  maxJitter: 0,
@@ -110,7 +109,7 @@ export class TrackStatsBuilder {
110
109
  concealedAudio: 0,
111
110
  totalAudio: 0
112
111
  };
113
- var audioTrackSummary = {
112
+ const audioTrackSummary = {
114
113
  count: 0,
115
114
  muted: 0,
116
115
  maxJitter: 0,
@@ -118,10 +117,10 @@ export class TrackStatsBuilder {
118
117
  concealedAudio: 0,
119
118
  totalAudio: 0
120
119
  };
121
- var remoteTrackList = trackStatsList.filter(t => t.getType() === "remote");
122
- var audioTrackList = remoteTrackList.filter(t => t.kind === "audio");
120
+ const remoteTrackList = trackStatsList.filter(t => t.getType() === "remote");
121
+ const audioTrackList = remoteTrackList.filter(t => t.kind === "audio");
123
122
  remoteTrackList.forEach(stats => {
124
- var trackSummary = stats.kind === "video" ? videoTrackSummary : audioTrackSummary;
123
+ const trackSummary = stats.kind === "video" ? videoTrackSummary : audioTrackSummary;
125
124
  trackSummary.count++;
126
125
  if (stats.alive && stats.muted) {
127
126
  trackSummary.muted++;
@@ -133,9 +132,8 @@ export class TrackStatsBuilder {
133
132
  trackSummary.maxPacketLoss = stats.getLoss().packetsLost;
134
133
  }
135
134
  if (audioTrackList.length > 0) {
136
- var _stats$getAudioConcea, _stats$getAudioConcea2;
137
- trackSummary.concealedAudio += (_stats$getAudioConcea = stats.getAudioConcealment()) === null || _stats$getAudioConcea === void 0 ? void 0 : _stats$getAudioConcea.concealedAudio;
138
- trackSummary.totalAudio += (_stats$getAudioConcea2 = stats.getAudioConcealment()) === null || _stats$getAudioConcea2 === void 0 ? void 0 : _stats$getAudioConcea2.totalAudioDuration;
135
+ trackSummary.concealedAudio += stats.getAudioConcealment()?.concealedAudio;
136
+ trackSummary.totalAudio += stats.getAudioConcealment()?.totalAudioDuration;
139
137
  }
140
138
  });
141
139
  return {
@@ -147,9 +145,9 @@ export class TrackStatsBuilder {
147
145
  if (statsReport.type !== "inbound-rtp") {
148
146
  return;
149
147
  }
150
- var jitterStr = statsReport === null || statsReport === void 0 ? void 0 : statsReport.jitter;
148
+ const jitterStr = statsReport?.jitter;
151
149
  if (jitterStr !== undefined) {
152
- var jitter = ValueFormatter.getNonNegativeValue(jitterStr);
150
+ const jitter = ValueFormatter.getNonNegativeValue(jitterStr);
153
151
  trackStats.setJitter(Math.round(jitter * 1000));
154
152
  } else {
155
153
  trackStats.setJitter(-1);
@@ -159,9 +157,9 @@ export class TrackStatsBuilder {
159
157
  if (statsReport.type !== "inbound-rtp") {
160
158
  return;
161
159
  }
162
- var msPerSample = 1000 * (statsReport === null || statsReport === void 0 ? void 0 : statsReport.totalSamplesDuration) / (statsReport === null || statsReport === void 0 ? void 0 : statsReport.totalSamplesReceived);
163
- var concealedAudioDuration = msPerSample * (statsReport === null || statsReport === void 0 ? void 0 : statsReport.concealedSamples);
164
- var totalAudioDuration = 1000 * (statsReport === null || statsReport === void 0 ? void 0 : statsReport.totalSamplesDuration);
160
+ const msPerSample = 1000 * statsReport?.totalSamplesDuration / statsReport?.totalSamplesReceived;
161
+ const concealedAudioDuration = msPerSample * statsReport?.concealedSamples;
162
+ const totalAudioDuration = 1000 * statsReport?.totalSamplesDuration;
165
163
  trackStats.setAudioConcealment(concealedAudioDuration, totalAudioDuration);
166
164
  }
167
165
  }
@@ -1 +1 @@
1
- {"version":3,"file":"trackStatsBuilder.js","names":["ValueFormatter","TrackStatsBuilder","buildFramerateResolution","trackStats","now","resolution","height","frameHeight","width","frameWidth","frameRate","framesPerSecond","setResolution","setFramerate","Math","round","calculateSimulcastFramerate","before","layer","getFramerate","timeMs","timestamp","framesSent","numberOfFramesSinceBefore","buildCodec","report","codec","get","codecId","codecShortType","mimeType","split","setCodec","buildBitrateReceived","setBitrate","download","calculateBitrate","bytesReceived","upload","buildBitrateSend","bytesSent","buildPacketsLost","key","type","packetsNow","packetsBefore","getNonNegativeValue","packetsDiff","max","packetsLostNow","packetsLost","packetsLostBefore","packetsLostDiff","setLoss","packetsTotal","isDownloadStream","bytesNowAny","bytesBeforeAny","nowTimestamp","beforeTimestamp","bytesNow","bytesBefore","bytesProcessed","bitrateKbps","setTrackStatsState","transceiver","_transceiver$sender","undefined","alive","track","getType","receiver","sender","readyState","muted","enabled","buildTrackSummary","trackStatsList","videoTrackSummary","count","maxJitter","maxPacketLoss","concealedAudio","totalAudio","audioTrackSummary","remoteTrackList","filter","t","audioTrackList","kind","forEach","stats","trackSummary","getJitter","getLoss","length","_stats$getAudioConcea","_stats$getAudioConcea2","getAudioConcealment","totalAudioDuration","buildJitter","statsReport","jitterStr","jitter","setJitter","buildAudioConcealment","msPerSample","totalSamplesDuration","totalSamplesReceived","concealedAudioDuration","concealedSamples","setAudioConcealment"],"sources":["../../../src/webrtc/stats/trackStatsBuilder.ts"],"sourcesContent":["import { type MediaTrackStats } from \"./media/mediaTrackStats.ts\";\nimport { ValueFormatter } from \"./valueFormatter.ts\";\nimport { type TrackSummary } from \"./callStatsReportSummary.ts\";\n\nexport class TrackStatsBuilder {\n public static buildFramerateResolution(trackStats: MediaTrackStats, now: any): void {\n const resolution = {\n height: now.frameHeight,\n width: now.frameWidth,\n };\n const frameRate = now.framesPerSecond;\n\n if (resolution.height && resolution.width) {\n trackStats.setResolution(resolution);\n }\n trackStats.setFramerate(Math.round(frameRate || 0));\n }\n\n public static calculateSimulcastFramerate(trackStats: MediaTrackStats, now: any, before: any, layer: number): void {\n let frameRate = trackStats.getFramerate();\n if (!frameRate) {\n if (before) {\n const timeMs = now.timestamp - before.timestamp;\n\n if (timeMs > 0 && now.framesSent) {\n const numberOfFramesSinceBefore = now.framesSent - before.framesSent;\n\n frameRate = (numberOfFramesSinceBefore / timeMs) * 1000;\n }\n }\n\n if (!frameRate) {\n return;\n }\n }\n\n // Reset frame rate to 0 when video is suspended as a result of endpoint falling out of last-n.\n frameRate = layer ? Math.round(frameRate / layer) : 0;\n trackStats.setFramerate(frameRate);\n }\n\n public static buildCodec(report: RTCStatsReport | undefined, trackStats: MediaTrackStats, now: any): void {\n const codec = report?.get(now.codecId);\n\n if (codec) {\n /**\n * The mime type has the following form: video/VP8 or audio/ISAC,\n * so we what to keep just the type after the '/', audio and video\n * keys will be added on the processing side.\n */\n const codecShortType = codec.mimeType.split(\"/\")[1];\n\n if (codecShortType) trackStats.setCodec(codecShortType);\n }\n }\n\n public static buildBitrateReceived(trackStats: MediaTrackStats, now: any, before: any): void {\n trackStats.setBitrate({\n download: TrackStatsBuilder.calculateBitrate(\n now.bytesReceived,\n before.bytesReceived,\n now.timestamp,\n before.timestamp,\n ),\n upload: 0,\n });\n }\n\n public static buildBitrateSend(trackStats: MediaTrackStats, now: any, before: any): void {\n trackStats.setBitrate({\n download: 0,\n upload: this.calculateBitrate(now.bytesSent, before.bytesSent, now.timestamp, before.timestamp),\n });\n }\n\n public static buildPacketsLost(trackStats: MediaTrackStats, now: any, before: any): void {\n const key = now.type === \"outbound-rtp\" ? \"packetsSent\" : \"packetsReceived\";\n\n let packetsNow = now[key];\n if (!packetsNow || packetsNow < 0) {\n packetsNow = 0;\n }\n\n const packetsBefore = ValueFormatter.getNonNegativeValue(before[key]);\n const packetsDiff = Math.max(0, packetsNow - packetsBefore);\n\n const packetsLostNow = ValueFormatter.getNonNegativeValue(now.packetsLost);\n const packetsLostBefore = ValueFormatter.getNonNegativeValue(before.packetsLost);\n const packetsLostDiff = Math.max(0, packetsLostNow - packetsLostBefore);\n\n trackStats.setLoss({\n packetsTotal: packetsDiff + packetsLostDiff,\n packetsLost: packetsLostDiff,\n isDownloadStream: now.type !== \"outbound-rtp\",\n });\n }\n\n private static calculateBitrate(\n bytesNowAny: any,\n bytesBeforeAny: any,\n nowTimestamp: number,\n beforeTimestamp: number,\n ): number {\n const bytesNow = ValueFormatter.getNonNegativeValue(bytesNowAny);\n const bytesBefore = ValueFormatter.getNonNegativeValue(bytesBeforeAny);\n const bytesProcessed = Math.max(0, bytesNow - bytesBefore);\n\n const timeMs = nowTimestamp - beforeTimestamp;\n let bitrateKbps = 0;\n\n if (timeMs > 0) {\n bitrateKbps = Math.round((bytesProcessed * 8) / timeMs);\n }\n\n return bitrateKbps;\n }\n\n public static setTrackStatsState(trackStats: MediaTrackStats, transceiver: RTCRtpTransceiver | undefined): void {\n if (transceiver === undefined) {\n trackStats.alive = false;\n return;\n }\n\n const track = trackStats.getType() === \"remote\" ? transceiver.receiver.track : transceiver?.sender?.track;\n if (track === undefined || track === null) {\n trackStats.alive = false;\n return;\n }\n\n if (track.readyState === \"ended\") {\n trackStats.alive = false;\n return;\n }\n trackStats.muted = track.muted;\n trackStats.enabled = track.enabled;\n trackStats.alive = true;\n }\n\n public static buildTrackSummary(trackStatsList: MediaTrackStats[]): {\n audioTrackSummary: TrackSummary;\n videoTrackSummary: TrackSummary;\n } {\n const videoTrackSummary: TrackSummary = {\n count: 0,\n muted: 0,\n maxJitter: 0,\n maxPacketLoss: 0,\n concealedAudio: 0,\n totalAudio: 0,\n };\n const audioTrackSummary: TrackSummary = {\n count: 0,\n muted: 0,\n maxJitter: 0,\n maxPacketLoss: 0,\n concealedAudio: 0,\n totalAudio: 0,\n };\n\n const remoteTrackList = trackStatsList.filter((t) => t.getType() === \"remote\");\n const audioTrackList = remoteTrackList.filter((t) => t.kind === \"audio\");\n\n remoteTrackList.forEach((stats) => {\n const trackSummary = stats.kind === \"video\" ? videoTrackSummary : audioTrackSummary;\n trackSummary.count++;\n if (stats.alive && stats.muted) {\n trackSummary.muted++;\n }\n if (trackSummary.maxJitter < stats.getJitter()) {\n trackSummary.maxJitter = stats.getJitter();\n }\n if (trackSummary.maxPacketLoss < stats.getLoss().packetsLost) {\n trackSummary.maxPacketLoss = stats.getLoss().packetsLost;\n }\n if (audioTrackList.length > 0) {\n trackSummary.concealedAudio += stats.getAudioConcealment()?.concealedAudio;\n trackSummary.totalAudio += stats.getAudioConcealment()?.totalAudioDuration;\n }\n });\n\n return { audioTrackSummary, videoTrackSummary };\n }\n\n public static buildJitter(trackStats: MediaTrackStats, statsReport: any): void {\n if (statsReport.type !== \"inbound-rtp\") {\n return;\n }\n\n const jitterStr = statsReport?.jitter;\n if (jitterStr !== undefined) {\n const jitter = ValueFormatter.getNonNegativeValue(jitterStr);\n trackStats.setJitter(Math.round(jitter * 1000));\n } else {\n trackStats.setJitter(-1);\n }\n }\n\n public static buildAudioConcealment(trackStats: MediaTrackStats, statsReport: any): void {\n if (statsReport.type !== \"inbound-rtp\") {\n return;\n }\n const msPerSample = (1000 * statsReport?.totalSamplesDuration) / statsReport?.totalSamplesReceived;\n const concealedAudioDuration = msPerSample * statsReport?.concealedSamples;\n const totalAudioDuration = 1000 * statsReport?.totalSamplesDuration;\n trackStats.setAudioConcealment(concealedAudioDuration, totalAudioDuration);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"trackStatsBuilder.js","names":[],"sources":["../../../src/webrtc/stats/trackStatsBuilder.ts"],"sourcesContent":["import { type MediaTrackStats } from \"./media/mediaTrackStats.ts\";\nimport { ValueFormatter } from \"./valueFormatter.ts\";\nimport { type TrackSummary } from \"./callStatsReportSummary.ts\";\n\nexport class TrackStatsBuilder {\n public static buildFramerateResolution(trackStats: MediaTrackStats, now: any): void {\n const resolution = {\n height: now.frameHeight,\n width: now.frameWidth,\n };\n const frameRate = now.framesPerSecond;\n\n if (resolution.height && resolution.width) {\n trackStats.setResolution(resolution);\n }\n trackStats.setFramerate(Math.round(frameRate || 0));\n }\n\n public static calculateSimulcastFramerate(trackStats: MediaTrackStats, now: any, before: any, layer: number): void {\n let frameRate = trackStats.getFramerate();\n if (!frameRate) {\n if (before) {\n const timeMs = now.timestamp - before.timestamp;\n\n if (timeMs > 0 && now.framesSent) {\n const numberOfFramesSinceBefore = now.framesSent - before.framesSent;\n\n frameRate = (numberOfFramesSinceBefore / timeMs) * 1000;\n }\n }\n\n if (!frameRate) {\n return;\n }\n }\n\n // Reset frame rate to 0 when video is suspended as a result of endpoint falling out of last-n.\n frameRate = layer ? Math.round(frameRate / layer) : 0;\n trackStats.setFramerate(frameRate);\n }\n\n public static buildCodec(report: RTCStatsReport | undefined, trackStats: MediaTrackStats, now: any): void {\n const codec = report?.get(now.codecId);\n\n if (codec) {\n /**\n * The mime type has the following form: video/VP8 or audio/ISAC,\n * so we what to keep just the type after the '/', audio and video\n * keys will be added on the processing side.\n */\n const codecShortType = codec.mimeType.split(\"/\")[1];\n\n if (codecShortType) trackStats.setCodec(codecShortType);\n }\n }\n\n public static buildBitrateReceived(trackStats: MediaTrackStats, now: any, before: any): void {\n trackStats.setBitrate({\n download: TrackStatsBuilder.calculateBitrate(\n now.bytesReceived,\n before.bytesReceived,\n now.timestamp,\n before.timestamp,\n ),\n upload: 0,\n });\n }\n\n public static buildBitrateSend(trackStats: MediaTrackStats, now: any, before: any): void {\n trackStats.setBitrate({\n download: 0,\n upload: this.calculateBitrate(now.bytesSent, before.bytesSent, now.timestamp, before.timestamp),\n });\n }\n\n public static buildPacketsLost(trackStats: MediaTrackStats, now: any, before: any): void {\n const key = now.type === \"outbound-rtp\" ? \"packetsSent\" : \"packetsReceived\";\n\n let packetsNow = now[key];\n if (!packetsNow || packetsNow < 0) {\n packetsNow = 0;\n }\n\n const packetsBefore = ValueFormatter.getNonNegativeValue(before[key]);\n const packetsDiff = Math.max(0, packetsNow - packetsBefore);\n\n const packetsLostNow = ValueFormatter.getNonNegativeValue(now.packetsLost);\n const packetsLostBefore = ValueFormatter.getNonNegativeValue(before.packetsLost);\n const packetsLostDiff = Math.max(0, packetsLostNow - packetsLostBefore);\n\n trackStats.setLoss({\n packetsTotal: packetsDiff + packetsLostDiff,\n packetsLost: packetsLostDiff,\n isDownloadStream: now.type !== \"outbound-rtp\",\n });\n }\n\n private static calculateBitrate(\n bytesNowAny: any,\n bytesBeforeAny: any,\n nowTimestamp: number,\n beforeTimestamp: number,\n ): number {\n const bytesNow = ValueFormatter.getNonNegativeValue(bytesNowAny);\n const bytesBefore = ValueFormatter.getNonNegativeValue(bytesBeforeAny);\n const bytesProcessed = Math.max(0, bytesNow - bytesBefore);\n\n const timeMs = nowTimestamp - beforeTimestamp;\n let bitrateKbps = 0;\n\n if (timeMs > 0) {\n bitrateKbps = Math.round((bytesProcessed * 8) / timeMs);\n }\n\n return bitrateKbps;\n }\n\n public static setTrackStatsState(trackStats: MediaTrackStats, transceiver: RTCRtpTransceiver | undefined): void {\n if (transceiver === undefined) {\n trackStats.alive = false;\n return;\n }\n\n const track = trackStats.getType() === \"remote\" ? transceiver.receiver.track : transceiver?.sender?.track;\n if (track === undefined || track === null) {\n trackStats.alive = false;\n return;\n }\n\n if (track.readyState === \"ended\") {\n trackStats.alive = false;\n return;\n }\n trackStats.muted = track.muted;\n trackStats.enabled = track.enabled;\n trackStats.alive = true;\n }\n\n public static buildTrackSummary(trackStatsList: MediaTrackStats[]): {\n audioTrackSummary: TrackSummary;\n videoTrackSummary: TrackSummary;\n } {\n const videoTrackSummary: TrackSummary = {\n count: 0,\n muted: 0,\n maxJitter: 0,\n maxPacketLoss: 0,\n concealedAudio: 0,\n totalAudio: 0,\n };\n const audioTrackSummary: TrackSummary = {\n count: 0,\n muted: 0,\n maxJitter: 0,\n maxPacketLoss: 0,\n concealedAudio: 0,\n totalAudio: 0,\n };\n\n const remoteTrackList = trackStatsList.filter((t) => t.getType() === \"remote\");\n const audioTrackList = remoteTrackList.filter((t) => t.kind === \"audio\");\n\n remoteTrackList.forEach((stats) => {\n const trackSummary = stats.kind === \"video\" ? videoTrackSummary : audioTrackSummary;\n trackSummary.count++;\n if (stats.alive && stats.muted) {\n trackSummary.muted++;\n }\n if (trackSummary.maxJitter < stats.getJitter()) {\n trackSummary.maxJitter = stats.getJitter();\n }\n if (trackSummary.maxPacketLoss < stats.getLoss().packetsLost) {\n trackSummary.maxPacketLoss = stats.getLoss().packetsLost;\n }\n if (audioTrackList.length > 0) {\n trackSummary.concealedAudio += stats.getAudioConcealment()?.concealedAudio;\n trackSummary.totalAudio += stats.getAudioConcealment()?.totalAudioDuration;\n }\n });\n\n return { audioTrackSummary, videoTrackSummary };\n }\n\n public static buildJitter(trackStats: MediaTrackStats, statsReport: any): void {\n if (statsReport.type !== \"inbound-rtp\") {\n return;\n }\n\n const jitterStr = statsReport?.jitter;\n if (jitterStr !== undefined) {\n const jitter = ValueFormatter.getNonNegativeValue(jitterStr);\n trackStats.setJitter(Math.round(jitter * 1000));\n } else {\n trackStats.setJitter(-1);\n }\n }\n\n public static buildAudioConcealment(trackStats: MediaTrackStats, statsReport: any): void {\n if (statsReport.type !== \"inbound-rtp\") {\n return;\n }\n const msPerSample = (1000 * statsReport?.totalSamplesDuration) / statsReport?.totalSamplesReceived;\n const concealedAudioDuration = msPerSample * statsReport?.concealedSamples;\n const totalAudioDuration = 1000 * statsReport?.totalSamplesDuration;\n trackStats.setAudioConcealment(concealedAudioDuration, totalAudioDuration);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1,3 @@
1
- export {};
1
+ export {};
2
+ export {};
3
+ //# sourceMappingURL=transportStats.js.map
@@ -1,18 +1,18 @@
1
1
  export class TransportStatsBuilder {
2
2
  static buildReport(report, now, conferenceStatsTransport, isFocus) {
3
- var localUsedCandidate = report === null || report === void 0 ? void 0 : report.get(now.localCandidateId);
4
- var remoteUsedCandidate = report === null || report === void 0 ? void 0 : report.get(now.remoteCandidateId);
3
+ const localUsedCandidate = report?.get(now.localCandidateId);
4
+ const remoteUsedCandidate = report?.get(now.remoteCandidateId);
5
5
 
6
6
  // RTCIceCandidateStats
7
7
  // https://w3c.github.io/webrtc-stats/#icecandidate-dict*
8
8
  if (remoteUsedCandidate && localUsedCandidate) {
9
- var remoteIpAddress = remoteUsedCandidate.ip !== undefined ? remoteUsedCandidate.ip : remoteUsedCandidate.address;
10
- var remotePort = remoteUsedCandidate.port;
11
- var ip = "".concat(remoteIpAddress, ":").concat(remotePort);
12
- var localIpAddress = localUsedCandidate.ip !== undefined ? localUsedCandidate.ip : localUsedCandidate.address;
13
- var localPort = localUsedCandidate.port;
14
- var localIp = "".concat(localIpAddress, ":").concat(localPort);
15
- var type = remoteUsedCandidate.protocol;
9
+ const remoteIpAddress = remoteUsedCandidate.ip !== undefined ? remoteUsedCandidate.ip : remoteUsedCandidate.address;
10
+ const remotePort = remoteUsedCandidate.port;
11
+ const ip = `${remoteIpAddress}:${remotePort}`;
12
+ const localIpAddress = localUsedCandidate.ip !== undefined ? localUsedCandidate.ip : localUsedCandidate.address;
13
+ const localPort = localUsedCandidate.port;
14
+ const localIp = `${localIpAddress}:${localPort}`;
15
+ const type = remoteUsedCandidate.protocol;
16
16
 
17
17
  // Save the address unless it has been saved already.
18
18
  if (!conferenceStatsTransport.some(t => t.ip === ip && t.type === type && t.localIp === localIp)) {
@@ -1 +1 @@
1
- {"version":3,"file":"transportStatsBuilder.js","names":["TransportStatsBuilder","buildReport","report","now","conferenceStatsTransport","isFocus","localUsedCandidate","get","localCandidateId","remoteUsedCandidate","remoteCandidateId","remoteIpAddress","ip","undefined","address","remotePort","port","concat","localIpAddress","localPort","localIp","type","protocol","some","t","push","localCandidateType","candidateType","remoteCandidateType","networkType","rtt","currentRoundTripTime","NaN"],"sources":["../../../src/webrtc/stats/transportStatsBuilder.ts"],"sourcesContent":["import { type TransportStats } from \"./transportStats.ts\";\n\nexport class TransportStatsBuilder {\n public static buildReport(\n report: RTCStatsReport | undefined,\n now: RTCIceCandidatePairStats,\n conferenceStatsTransport: TransportStats[],\n isFocus: boolean,\n ): TransportStats[] {\n const localUsedCandidate = report?.get(now.localCandidateId);\n const remoteUsedCandidate = report?.get(now.remoteCandidateId);\n\n // RTCIceCandidateStats\n // https://w3c.github.io/webrtc-stats/#icecandidate-dict*\n if (remoteUsedCandidate && localUsedCandidate) {\n const remoteIpAddress =\n remoteUsedCandidate.ip !== undefined ? remoteUsedCandidate.ip : remoteUsedCandidate.address;\n const remotePort = remoteUsedCandidate.port;\n const ip = `${remoteIpAddress}:${remotePort}`;\n\n const localIpAddress =\n localUsedCandidate.ip !== undefined ? localUsedCandidate.ip : localUsedCandidate.address;\n const localPort = localUsedCandidate.port;\n const localIp = `${localIpAddress}:${localPort}`;\n\n const type = remoteUsedCandidate.protocol;\n\n // Save the address unless it has been saved already.\n if (\n !conferenceStatsTransport.some(\n (t: TransportStats) => t.ip === ip && t.type === type && t.localIp === localIp,\n )\n ) {\n conferenceStatsTransport.push({\n ip,\n type,\n localIp,\n isFocus,\n localCandidateType: localUsedCandidate.candidateType,\n remoteCandidateType: remoteUsedCandidate.candidateType,\n networkType: localUsedCandidate.networkType,\n rtt: now.currentRoundTripTime ? now.currentRoundTripTime * 1000 : NaN,\n } as TransportStats);\n }\n }\n return conferenceStatsTransport;\n }\n}\n"],"mappings":"AAEA,OAAO,MAAMA,qBAAqB,CAAC;EAC/B,OAAcC,WAAWA,CACrBC,MAAkC,EAClCC,GAA6B,EAC7BC,wBAA0C,EAC1CC,OAAgB,EACA;IAChB,IAAMC,kBAAkB,GAAGJ,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEK,GAAG,CAACJ,GAAG,CAACK,gBAAgB,CAAC;IAC5D,IAAMC,mBAAmB,GAAGP,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEK,GAAG,CAACJ,GAAG,CAACO,iBAAiB,CAAC;;IAE9D;IACA;IACA,IAAID,mBAAmB,IAAIH,kBAAkB,EAAE;MAC3C,IAAMK,eAAe,GACjBF,mBAAmB,CAACG,EAAE,KAAKC,SAAS,GAAGJ,mBAAmB,CAACG,EAAE,GAAGH,mBAAmB,CAACK,OAAO;MAC/F,IAAMC,UAAU,GAAGN,mBAAmB,CAACO,IAAI;MAC3C,IAAMJ,EAAE,MAAAK,MAAA,CAAMN,eAAe,OAAAM,MAAA,CAAIF,UAAU,CAAE;MAE7C,IAAMG,cAAc,GAChBZ,kBAAkB,CAACM,EAAE,KAAKC,SAAS,GAAGP,kBAAkB,CAACM,EAAE,GAAGN,kBAAkB,CAACQ,OAAO;MAC5F,IAAMK,SAAS,GAAGb,kBAAkB,CAACU,IAAI;MACzC,IAAMI,OAAO,MAAAH,MAAA,CAAMC,cAAc,OAAAD,MAAA,CAAIE,SAAS,CAAE;MAEhD,IAAME,IAAI,GAAGZ,mBAAmB,CAACa,QAAQ;;MAEzC;MACA,IACI,CAAClB,wBAAwB,CAACmB,IAAI,CACzBC,CAAiB,IAAKA,CAAC,CAACZ,EAAE,KAAKA,EAAE,IAAIY,CAAC,CAACH,IAAI,KAAKA,IAAI,IAAIG,CAAC,CAACJ,OAAO,KAAKA,OAC3E,CAAC,EACH;QACEhB,wBAAwB,CAACqB,IAAI,CAAC;UAC1Bb,EAAE;UACFS,IAAI;UACJD,OAAO;UACPf,OAAO;UACPqB,kBAAkB,EAAEpB,kBAAkB,CAACqB,aAAa;UACpDC,mBAAmB,EAAEnB,mBAAmB,CAACkB,aAAa;UACtDE,WAAW,EAAEvB,kBAAkB,CAACuB,WAAW;UAC3CC,GAAG,EAAE3B,GAAG,CAAC4B,oBAAoB,GAAG5B,GAAG,CAAC4B,oBAAoB,GAAG,IAAI,GAAGC;QACtE,CAAmB,CAAC;MACxB;IACJ;IACA,OAAO5B,wBAAwB;EACnC;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"transportStatsBuilder.js","names":[],"sources":["../../../src/webrtc/stats/transportStatsBuilder.ts"],"sourcesContent":["import { type TransportStats } from \"./transportStats.ts\";\n\nexport class TransportStatsBuilder {\n public static buildReport(\n report: RTCStatsReport | undefined,\n now: RTCIceCandidatePairStats,\n conferenceStatsTransport: TransportStats[],\n isFocus: boolean,\n ): TransportStats[] {\n const localUsedCandidate = report?.get(now.localCandidateId);\n const remoteUsedCandidate = report?.get(now.remoteCandidateId);\n\n // RTCIceCandidateStats\n // https://w3c.github.io/webrtc-stats/#icecandidate-dict*\n if (remoteUsedCandidate && localUsedCandidate) {\n const remoteIpAddress =\n remoteUsedCandidate.ip !== undefined ? remoteUsedCandidate.ip : remoteUsedCandidate.address;\n const remotePort = remoteUsedCandidate.port;\n const ip = `${remoteIpAddress}:${remotePort}`;\n\n const localIpAddress =\n localUsedCandidate.ip !== undefined ? localUsedCandidate.ip : localUsedCandidate.address;\n const localPort = localUsedCandidate.port;\n const localIp = `${localIpAddress}:${localPort}`;\n\n const type = remoteUsedCandidate.protocol;\n\n // Save the address unless it has been saved already.\n if (\n !conferenceStatsTransport.some(\n (t: TransportStats) => t.ip === ip && t.type === type && t.localIp === localIp,\n )\n ) {\n conferenceStatsTransport.push({\n ip,\n type,\n localIp,\n isFocus,\n localCandidateType: localUsedCandidate.candidateType,\n remoteCandidateType: remoteUsedCandidate.candidateType,\n networkType: localUsedCandidate.networkType,\n rtt: now.currentRoundTripTime ? now.currentRoundTripTime * 1000 : NaN,\n } as TransportStats);\n }\n }\n return conferenceStatsTransport;\n }\n}\n"],"mappings":"AAEA,OAAO,MAAM,qBAAqB,CAAC;EAC/B,OAAc,WAAW,CACrB,MAAkC,EAClC,GAA6B,EAC7B,wBAA0C,EAC1C,OAAgB,EACA;IAChB,MAAM,kBAAkB,GAAG,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAC5D,MAAM,mBAAmB,GAAG,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC;;IAE9D;IACA;IACA,IAAI,mBAAmB,IAAI,kBAAkB,EAAE;MAC3C,MAAM,eAAe,GACjB,mBAAmB,CAAC,EAAE,KAAK,SAAS,GAAG,mBAAmB,CAAC,EAAE,GAAG,mBAAmB,CAAC,OAAO;MAC/F,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI;MAC3C,MAAM,EAAE,GAAG,GAAG,eAAe,IAAI,UAAU,EAAE;MAE7C,MAAM,cAAc,GAChB,kBAAkB,CAAC,EAAE,KAAK,SAAS,GAAG,kBAAkB,CAAC,EAAE,GAAG,kBAAkB,CAAC,OAAO;MAC5F,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI;MACzC,MAAM,OAAO,GAAG,GAAG,cAAc,IAAI,SAAS,EAAE;MAEhD,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAQ;;MAEzC;MACA,IACI,CAAC,wBAAwB,CAAC,IAAI,CACzB,CAAiB,IAAK,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,KAAK,OAC3E,CAAC,EACH;QACE,wBAAwB,CAAC,IAAI,CAAC;UAC1B,EAAE;UACF,IAAI;UACJ,OAAO;UACP,OAAO;UACP,kBAAkB,EAAE,kBAAkB,CAAC,aAAa;UACpD,mBAAmB,EAAE,mBAAmB,CAAC,aAAa;UACtD,WAAW,EAAE,kBAAkB,CAAC,WAAW;UAC3C,GAAG,EAAE,GAAG,CAAC,oBAAoB,GAAG,GAAG,CAAC,oBAAoB,GAAG,IAAI,GAAG;QACtE,CAAmB,CAAC;MACxB;IACJ;IACA,OAAO,wBAAwB;EACnC;AACJ","ignoreList":[]}
@@ -12,7 +12,7 @@ limitations under the License.
12
12
  */
13
13
  export class ValueFormatter {
14
14
  static getNonNegativeValue(imput) {
15
- var value = imput;
15
+ let value = imput;
16
16
  if (typeof value !== "number") {
17
17
  value = Number(value);
18
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"valueFormatter.js","names":["ValueFormatter","getNonNegativeValue","imput","value","Number","isNaN","Math","max"],"sources":["../../../src/webrtc/stats/valueFormatter.ts"],"sourcesContent":["/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\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 http://www.apache.org/licenses/LICENSE-2.0\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*/\nexport class ValueFormatter {\n public static getNonNegativeValue(imput: any): number {\n let value = imput;\n\n if (typeof value !== \"number\") {\n value = Number(value);\n }\n\n if (isNaN(value)) {\n return 0;\n }\n\n return Math.max(0, value);\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,cAAc,CAAC;EACxB,OAAcC,mBAAmBA,CAACC,KAAU,EAAU;IAClD,IAAIC,KAAK,GAAGD,KAAK;IAEjB,IAAI,OAAOC,KAAK,KAAK,QAAQ,EAAE;MAC3BA,KAAK,GAAGC,MAAM,CAACD,KAAK,CAAC;IACzB;IAEA,IAAIE,KAAK,CAACF,KAAK,CAAC,EAAE;MACd,OAAO,CAAC;IACZ;IAEA,OAAOG,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEJ,KAAK,CAAC;EAC7B;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"valueFormatter.js","names":[],"sources":["../../../src/webrtc/stats/valueFormatter.ts"],"sourcesContent":["/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\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 http://www.apache.org/licenses/LICENSE-2.0\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*/\nexport class ValueFormatter {\n public static getNonNegativeValue(imput: any): number {\n let value = imput;\n\n if (typeof value !== \"number\") {\n value = Number(value);\n }\n\n if (isNaN(value)) {\n return 0;\n }\n\n return Math.max(0, value);\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM,cAAc,CAAC;EACxB,OAAc,mBAAmB,CAAC,KAAU,EAAU;IAClD,IAAI,KAAK,GAAG,KAAK;IAEjB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;MAC3B,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IACzB;IAEA,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;MACd,OAAO,CAAC;IACZ;IAEA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;EAC7B;AACJ","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "matrix-js-sdk",
3
- "version": "41.8.0",
3
+ "version": "41.9.0",
4
4
  "description": "Matrix Client-Server SDK for Javascript",
5
5
  "engines": {
6
6
  "node": ">=22.0.0"
@@ -37,7 +37,7 @@
37
37
  "release.sh"
38
38
  ],
39
39
  "dependencies": {
40
- "@babel/runtime": "^7.12.5",
40
+ "@babel/runtime": "^8.0.0",
41
41
  "@matrix-org/matrix-sdk-crypto-wasm": "^18.3.1",
42
42
  "another-json": "^0.2.0",
43
43
  "bs58": "^6.0.0",
@@ -54,43 +54,26 @@
54
54
  "devDependencies": {
55
55
  "@action-validator/cli": "^0.6.0",
56
56
  "@action-validator/core": "^0.6.0",
57
- "@babel/cli": "^7.12.10",
58
- "@babel/core": "^7.12.10",
59
- "@babel/eslint-parser": "^7.12.10",
60
- "@babel/eslint-plugin": "^7.12.10",
61
- "@babel/plugin-proposal-decorators": "^7.25.9",
62
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
63
- "@babel/plugin-transform-class-properties": "^7.12.1",
64
- "@babel/plugin-transform-numeric-separator": "^7.12.7",
65
- "@babel/plugin-transform-object-rest-spread": "^7.12.1",
66
- "@babel/plugin-transform-runtime": "^7.12.10",
67
- "@babel/preset-env": "^7.12.11",
68
- "@babel/preset-typescript": "^7.12.7",
57
+ "@babel/cli": "^8.0.0",
58
+ "@babel/core": "^8.0.0",
59
+ "@babel/plugin-proposal-decorators": "^8.0.0",
60
+ "@babel/plugin-transform-class-properties": "^8.0.0",
61
+ "@babel/plugin-transform-numeric-separator": "^8.0.0",
62
+ "@babel/plugin-transform-object-rest-spread": "^8.0.0",
63
+ "@babel/plugin-transform-runtime": "^8.0.0",
64
+ "@babel/plugin-transform-typescript": "^8.0.0",
65
+ "@babel/preset-env": "^8.0.0",
66
+ "@babel/preset-typescript": "^8.0.0",
69
67
  "@fetch-mock/vitest": "^0.2.18",
70
68
  "@matrix-org/olm": "3.2.15",
71
69
  "@peculiar/webcrypto": "^1.4.5",
72
- "@stylistic/eslint-plugin": "^5.0.0",
73
70
  "@types/debug": "^4.1.7",
74
71
  "@types/node": "22",
75
72
  "@types/sdp-transform": "^3.0.0",
76
- "@typescript-eslint/eslint-plugin": "^8.0.0",
77
- "@typescript-eslint/parser": "^8.0.0",
78
73
  "@vitest/coverage-v8": "^4.0.17",
79
- "@vitest/eslint-plugin": "^1.6.6",
80
74
  "@vitest/ui": "^4.0.17",
81
- "babel-plugin-search-and-replace": "^1.1.1",
82
75
  "concurrently": "^10.0.0",
83
76
  "debug": "^4.3.4",
84
- "eslint": "8.57.1",
85
- "eslint-config-google": "^0.14.0",
86
- "eslint-config-prettier": "^10.0.0",
87
- "eslint-import-resolver-typescript": "^4.0.0",
88
- "eslint-plugin-import": "^2.26.0",
89
- "eslint-plugin-jsdoc": "^63.0.0",
90
- "eslint-plugin-matrix-org": "^3.0.0",
91
- "eslint-plugin-n": "^14.0.0",
92
- "eslint-plugin-tsdoc": "^0.5.0",
93
- "eslint-plugin-unicorn": "^56.0.0",
94
77
  "fake-indexeddb": "^5.0.2",
95
78
  "fetch-mock": "^12.6.0",
96
79
  "happy-dom": "^20.1.0",
@@ -98,7 +81,9 @@
98
81
  "knip": "^6.0.0",
99
82
  "lint-staged": "^17.0.0",
100
83
  "matrix-mock-request": "^2.5.0",
101
- "prettier": "3.8.3",
84
+ "oxfmt": "^0.55.0",
85
+ "oxlint": "^1.70.0",
86
+ "oxlint-tsgolint": "^0.23.0",
102
87
  "typedoc": "^0.28.1",
103
88
  "typedoc-plugin-coverage": "^4.0.0",
104
89
  "typedoc-plugin-mdn-links": "^5.0.0",
@@ -113,11 +98,11 @@
113
98
  "build:compile": "babel --delete-dir-on-start -d lib --verbose --extensions \".ts,.js\" src",
114
99
  "gendoc": "typedoc",
115
100
  "lint": "pnpm lint:types && pnpm lint:js && pnpm lint:workflows",
116
- "lint:js": "eslint --max-warnings 0 src spec && prettier --check .",
117
- "lint:js-fix": "prettier --log-level=warn --write . && eslint --fix src spec",
101
+ "lint:js": "oxlint && oxfmt --check",
102
+ "lint:js-fix": "oxfmt --write . && oxlint --fix src spec",
118
103
  "lint:types": "tsc --noEmit",
119
104
  "lint:workflows": "find .github/workflows -type f \\( -iname '*.yaml' -o -iname '*.yml' \\) | xargs -I {} sh -c 'echo \"Linting {}\"; action-validator \"{}\"'",
120
- "lint:knip": "knip",
105
+ "lint:knip": "knip && knip --strict --exclude unlisted,dependencies,binaries",
121
106
  "test": "vitest run",
122
107
  "test:watch": "vitest watch",
123
108
  "coverage": "pnpm test --coverage",
@@ -21,8 +21,8 @@ declare global {
21
21
  // so we don't accidentally use the methods on NodeJS.Timeout - they only exist in a subset of environments.
22
22
  // The overload for clear{Interval,Timeout} is resolved as expected.
23
23
  // We use `ReturnType<typeof setTimeout>` in the code to be agnostic of if this definition gets loaded.
24
- function setInterval(handler: TimerHandler, timeout: number, ...arguments: any[]): number;
25
- function setTimeout(handler: TimerHandler, timeout: number, ...arguments: any[]): number;
24
+ function setInterval(handler: TimerHandler, timeout: number, ...args: any[]): number;
25
+ function setTimeout(handler: TimerHandler, timeout: number, ...args: any[]): number;
26
26
 
27
27
  namespace NodeJS {
28
28
  interface Global {
@@ -77,7 +77,7 @@ export class ToDeviceMessageQueue {
77
77
  }
78
78
 
79
79
  await this.client.store.saveToDeviceBatches(batches);
80
- this.sendQueue();
80
+ void this.sendQueue();
81
81
  }
82
82
 
83
83
  public sendQueue = async (): Promise<void> => {
@@ -150,7 +150,7 @@ export class ToDeviceMessageQueue {
150
150
  private onResumedSync = (state: SyncState | null, oldState: SyncState | null): void => {
151
151
  if (state === SyncState.Syncing && oldState !== SyncState.Syncing) {
152
152
  this.logger.info(`Resuming queue after resumed sync`);
153
- this.sendQueue();
153
+ void this.sendQueue();
154
154
  }
155
155
  };
156
156
  }
@@ -14,9 +14,9 @@ See the License for the specific language governing permissions and
14
14
  limitations under the License.
15
15
  */
16
16
 
17
- import * as matrixcs from "./matrix.ts";
17
+ import * as sdk from "./matrix.ts";
18
18
 
19
- type BrowserMatrix = typeof matrixcs;
19
+ type BrowserMatrix = typeof sdk;
20
20
  declare global {
21
21
  /* eslint-disable no-var, camelcase */
22
22
  var __js_sdk_entrypoint: boolean;
@@ -37,8 +37,8 @@ try {
37
37
 
38
38
  // if our browser (appears to) support indexeddb, use an indexeddb crypto store.
39
39
  if (indexedDB) {
40
- matrixcs.setCryptoStoreFactory(() => new matrixcs.IndexedDBCryptoStore(indexedDB!, "matrix-js-sdk:crypto"));
40
+ sdk.setCryptoStoreFactory(() => new sdk.IndexedDBCryptoStore(indexedDB!, "matrix-js-sdk:crypto"));
41
41
  }
42
42
 
43
43
  export * from "./matrix.ts";
44
- globalThis.matrixcs = matrixcs;
44
+ globalThis.matrixcs = sdk;