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.
- package/CHANGELOG.md +11 -0
- package/README.md +1 -1
- package/lib/@types/AESEncryptedSecretStoragePayload.js +3 -1
- package/lib/@types/IIdentityServerProvider.js +3 -1
- package/lib/@types/PushRules.js +7 -7
- package/lib/@types/PushRules.js.map +1 -1
- package/lib/@types/auth.js +4 -4
- package/lib/@types/auth.js.map +1 -1
- package/lib/@types/beacon.js +2 -2
- package/lib/@types/beacon.js.map +1 -1
- package/lib/@types/common.js +3 -1
- package/lib/@types/crypto.js +3 -1
- package/lib/@types/event.js +20 -20
- package/lib/@types/event.js.map +1 -1
- package/lib/@types/events.js +3 -1
- package/lib/@types/extensible_events.js +6 -6
- package/lib/@types/extensible_events.js.map +1 -1
- package/lib/@types/global.d.js.map +1 -1
- package/lib/@types/json.js +3 -1
- package/lib/@types/local_notifications.js +3 -1
- package/lib/@types/location.js +4 -4
- package/lib/@types/location.js.map +1 -1
- package/lib/@types/matrix-sdk-crypto-wasm.d.js +3 -1
- package/lib/@types/media.js +3 -1
- package/lib/@types/membership.js +1 -1
- package/lib/@types/membership.js.map +1 -1
- package/lib/@types/partials.js +6 -6
- package/lib/@types/partials.js.map +1 -1
- package/lib/@types/polls.js +5 -5
- package/lib/@types/polls.js.map +1 -1
- package/lib/@types/read_receipts.js +2 -2
- package/lib/@types/read_receipts.js.map +1 -1
- package/lib/@types/registration.js +3 -1
- package/lib/@types/requests.js +1 -1
- package/lib/@types/requests.js.map +1 -1
- package/lib/@types/retention.js +1 -1
- package/lib/@types/retention.js.map +1 -1
- package/lib/@types/search.js +1 -1
- package/lib/@types/search.js.map +1 -1
- package/lib/@types/signed.js +3 -1
- package/lib/@types/spaces.js +3 -1
- package/lib/@types/state_events.js +3 -1
- package/lib/@types/synapse.js +3 -1
- package/lib/@types/sync.js +1 -1
- package/lib/@types/sync.js.map +1 -1
- package/lib/@types/threepids.js +1 -1
- package/lib/@types/threepids.js.map +1 -1
- package/lib/@types/topic.js +1 -1
- package/lib/@types/topic.js.map +1 -1
- package/lib/@types/uia.js +3 -1
- package/lib/NamespacedValue.js +8 -8
- package/lib/NamespacedValue.js.map +1 -1
- package/lib/ReEmitter.js +9 -16
- package/lib/ReEmitter.js.map +1 -1
- package/lib/ToDeviceMessageQueue.js +49 -57
- package/lib/ToDeviceMessageQueue.js.map +1 -1
- package/lib/autodiscovery.js +232 -247
- package/lib/autodiscovery.js.map +1 -1
- package/lib/base64.js +1 -1
- package/lib/base64.js.map +1 -1
- package/lib/browser-index.d.ts +2 -2
- package/lib/browser-index.d.ts.map +1 -1
- package/lib/browser-index.js +5 -5
- package/lib/browser-index.js.map +1 -1
- package/lib/capabilityPoller.js +19 -22
- package/lib/capabilityPoller.js.map +1 -1
- package/lib/client.d.ts +2 -8
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +2043 -2487
- package/lib/client.js.map +1 -1
- package/lib/common-crypto/CryptoBackend.js +2 -2
- package/lib/common-crypto/CryptoBackend.js.map +1 -1
- package/lib/common-crypto/key-passphrase.js.map +1 -1
- package/lib/content-helpers.js +43 -48
- package/lib/content-helpers.js.map +1 -1
- package/lib/content-repo.js +14 -24
- package/lib/content-repo.js.map +1 -1
- package/lib/crypto/store/base.js +6 -6
- package/lib/crypto/store/base.js.map +1 -1
- package/lib/crypto/store/indexeddb-crypto-store-backend.js +190 -238
- package/lib/crypto/store/indexeddb-crypto-store-backend.js.map +1 -1
- package/lib/crypto/store/indexeddb-crypto-store.js +25 -30
- package/lib/crypto/store/indexeddb-crypto-store.js.map +1 -1
- package/lib/crypto/store/localStorage-crypto-store.js +113 -145
- package/lib/crypto/store/localStorage-crypto-store.js.map +1 -1
- package/lib/crypto/store/memory-crypto-store.js +74 -105
- package/lib/crypto/store/memory-crypto-store.js.map +1 -1
- package/lib/crypto-api/CryptoEvent.js +1 -1
- package/lib/crypto-api/CryptoEvent.js.map +1 -1
- package/lib/crypto-api/CryptoEventHandlerMap.js +3 -1
- package/lib/crypto-api/index.d.ts +15 -6
- package/lib/crypto-api/index.d.ts.map +1 -1
- package/lib/crypto-api/index.js +22 -22
- package/lib/crypto-api/index.js.map +1 -1
- package/lib/crypto-api/key-passphrase.js +15 -23
- package/lib/crypto-api/key-passphrase.js.map +1 -1
- package/lib/crypto-api/keybackup.js +3 -1
- package/lib/crypto-api/recovery-key.js +11 -12
- package/lib/crypto-api/recovery-key.js.map +1 -1
- package/lib/crypto-api/verification.js +3 -3
- package/lib/crypto-api/verification.js.map +1 -1
- package/lib/digest.js +7 -14
- package/lib/digest.js.map +1 -1
- package/lib/embedded.d.ts.map +1 -1
- package/lib/embedded.js +380 -505
- package/lib/embedded.js.map +1 -1
- package/lib/errors.js +2 -2
- package/lib/errors.js.map +1 -1
- package/lib/event-mapper.js +10 -12
- package/lib/event-mapper.js.map +1 -1
- package/lib/extensible_events_v1/ExtensibleEvent.js.map +1 -1
- package/lib/extensible_events_v1/InvalidEventError.js.map +1 -1
- package/lib/extensible_events_v1/MessageEvent.js +11 -13
- package/lib/extensible_events_v1/MessageEvent.js.map +1 -1
- package/lib/extensible_events_v1/PollEndEvent.js +3 -4
- package/lib/extensible_events_v1/PollEndEvent.js.map +1 -1
- package/lib/extensible_events_v1/PollResponseEvent.js +5 -6
- package/lib/extensible_events_v1/PollResponseEvent.js.map +1 -1
- package/lib/extensible_events_v1/PollStartEvent.js +8 -10
- package/lib/extensible_events_v1/PollStartEvent.js.map +1 -1
- package/lib/extensible_events_v1/utilities.js.map +1 -1
- package/lib/feature.js +18 -31
- package/lib/feature.js.map +1 -1
- package/lib/filter-component.d.ts.map +1 -1
- package/lib/filter-component.js +20 -26
- package/lib/filter-component.js.map +1 -1
- package/lib/filter.js +14 -17
- package/lib/filter.js.map +1 -1
- package/lib/http-api/errors.js +28 -43
- package/lib/http-api/errors.js.map +1 -1
- package/lib/http-api/fetch.js +141 -159
- package/lib/http-api/fetch.js.map +1 -1
- package/lib/http-api/index.js +17 -20
- package/lib/http-api/index.js.map +1 -1
- package/lib/http-api/interface.js +1 -1
- package/lib/http-api/interface.js.map +1 -1
- package/lib/http-api/method.js +1 -1
- package/lib/http-api/method.js.map +1 -1
- package/lib/http-api/prefix.js +3 -3
- package/lib/http-api/prefix.js.map +1 -1
- package/lib/http-api/refresh.js +74 -94
- package/lib/http-api/refresh.js.map +1 -1
- package/lib/http-api/utils.d.ts +1 -1
- package/lib/http-api/utils.d.ts.map +1 -1
- package/lib/http-api/utils.js +34 -42
- package/lib/http-api/utils.js.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/indexeddb-helpers.js +3 -3
- package/lib/indexeddb-helpers.js.map +1 -1
- package/lib/indexeddb-worker.js.map +1 -1
- package/lib/interactive-auth.d.ts +5 -5
- package/lib/interactive-auth.d.ts.map +1 -1
- package/lib/interactive-auth.js +172 -204
- package/lib/interactive-auth.js.map +1 -1
- package/lib/logger.js +21 -57
- package/lib/logger.js.map +1 -1
- package/lib/matrix.js +7 -11
- package/lib/matrix.js.map +1 -1
- package/lib/matrixrtc/CallMembership.js +80 -74
- package/lib/matrixrtc/CallMembership.js.map +1 -1
- package/lib/matrixrtc/EncryptionManager.js +1 -1
- package/lib/matrixrtc/EncryptionManager.js.map +1 -1
- package/lib/matrixrtc/IKeyTransport.js +1 -1
- package/lib/matrixrtc/IKeyTransport.js.map +1 -1
- package/lib/matrixrtc/IMembershipManager.js +1 -1
- package/lib/matrixrtc/IMembershipManager.js.map +1 -1
- package/lib/matrixrtc/LivekitTransport.d.ts +1 -1
- package/lib/matrixrtc/LivekitTransport.js +4 -4
- package/lib/matrixrtc/LivekitTransport.js.map +1 -1
- package/lib/matrixrtc/MatrixRTCSession.js +137 -187
- package/lib/matrixrtc/MatrixRTCSession.js.map +1 -1
- package/lib/matrixrtc/MatrixRTCSessionManager.js +36 -41
- package/lib/matrixrtc/MatrixRTCSessionManager.js.map +1 -1
- package/lib/matrixrtc/MembershipManager.js +332 -378
- package/lib/matrixrtc/MembershipManager.js.map +1 -1
- package/lib/matrixrtc/MembershipManagerActionScheduler.js +54 -63
- package/lib/matrixrtc/MembershipManagerActionScheduler.js.map +1 -1
- package/lib/matrixrtc/RTCEncryptionManager.js +119 -143
- package/lib/matrixrtc/RTCEncryptionManager.js.map +1 -1
- package/lib/matrixrtc/ToDeviceKeyTransport.js +53 -58
- package/lib/matrixrtc/ToDeviceKeyTransport.js.map +1 -1
- package/lib/matrixrtc/index.js.map +1 -1
- package/lib/matrixrtc/membershipData/common.js +1 -1
- package/lib/matrixrtc/membershipData/common.js.map +1 -1
- package/lib/matrixrtc/membershipData/index.js.map +1 -1
- package/lib/matrixrtc/membershipData/rtc.js +15 -23
- package/lib/matrixrtc/membershipData/rtc.js.map +1 -1
- package/lib/matrixrtc/membershipData/session.js +4 -5
- package/lib/matrixrtc/membershipData/session.js.map +1 -1
- package/lib/matrixrtc/types.js +4 -6
- package/lib/matrixrtc/types.js.map +1 -1
- package/lib/matrixrtc/utils.js +4 -11
- package/lib/matrixrtc/utils.js.map +1 -1
- package/lib/models/MSC3089Branch.js +91 -116
- package/lib/models/MSC3089Branch.js.map +1 -1
- package/lib/models/MSC3089TreeSpace.js +209 -245
- package/lib/models/MSC3089TreeSpace.js.map +1 -1
- package/lib/models/ToDeviceMessage.js +3 -1
- package/lib/models/beacon.js +14 -13
- package/lib/models/beacon.js.map +1 -1
- package/lib/models/compare-event-ordering.js +13 -13
- package/lib/models/compare-event-ordering.js.map +1 -1
- package/lib/models/device.js +3 -3
- package/lib/models/device.js.map +1 -1
- package/lib/models/event-context.js +5 -8
- package/lib/models/event-context.js.map +1 -1
- package/lib/models/event-status.js +1 -1
- package/lib/models/event-status.js.map +1 -1
- package/lib/models/event-timeline-set.js +88 -94
- package/lib/models/event-timeline-set.js.map +1 -1
- package/lib/models/event-timeline.js +28 -30
- package/lib/models/event-timeline.js.map +1 -1
- package/lib/models/event.js +182 -226
- package/lib/models/event.js.map +1 -1
- package/lib/models/invites-ignorer-types.js +4 -4
- package/lib/models/invites-ignorer-types.js.map +1 -1
- package/lib/models/invites-ignorer.js +159 -179
- package/lib/models/invites-ignorer.js.map +1 -1
- package/lib/models/poll.js +71 -81
- package/lib/models/poll.js.map +1 -1
- package/lib/models/profile-keys.js +2 -2
- package/lib/models/profile-keys.js.map +1 -1
- package/lib/models/read-receipt.js +40 -56
- package/lib/models/read-receipt.js.map +1 -1
- package/lib/models/related-relations.js.map +1 -1
- package/lib/models/relations-container.js +22 -23
- package/lib/models/relations-container.js.map +1 -1
- package/lib/models/relations.js +133 -159
- package/lib/models/relations.js.map +1 -1
- package/lib/models/room-member.js +24 -29
- package/lib/models/room-member.js.map +1 -1
- package/lib/models/room-receipts.js +29 -43
- package/lib/models/room-receipts.js.map +1 -1
- package/lib/models/room-retention.js +74 -83
- package/lib/models/room-retention.js.map +1 -1
- package/lib/models/room-state.js +143 -172
- package/lib/models/room-state.js.map +1 -1
- package/lib/models/room-sticky-events.d.ts +1 -0
- package/lib/models/room-sticky-events.d.ts.map +1 -1
- package/lib/models/room-sticky-events.js +45 -65
- package/lib/models/room-sticky-events.js.map +1 -1
- package/lib/models/room-summary.js.map +1 -1
- package/lib/models/room.d.ts.map +1 -1
- package/lib/models/room.js +765 -909
- package/lib/models/room.js.map +1 -1
- package/lib/models/search-result.js +5 -5
- package/lib/models/search-result.js.map +1 -1
- package/lib/models/thread.js +225 -285
- package/lib/models/thread.js.map +1 -1
- package/lib/models/typed-event-emitter.js +7 -18
- package/lib/models/typed-event-emitter.js.map +1 -1
- package/lib/models/user.js +8 -8
- package/lib/models/user.js.map +1 -1
- package/lib/oidc/authorize.js +208 -241
- package/lib/oidc/authorize.js.map +1 -1
- package/lib/oidc/discovery.js +23 -36
- package/lib/oidc/discovery.js.map +1 -1
- package/lib/oidc/error.js +1 -1
- package/lib/oidc/error.js.map +1 -1
- package/lib/oidc/index.js +1 -0
- package/lib/oidc/index.js.map +1 -1
- package/lib/oidc/register.js +60 -66
- package/lib/oidc/register.js.map +1 -1
- package/lib/oidc/tokenRefresher.js +77 -91
- package/lib/oidc/tokenRefresher.js.map +1 -1
- package/lib/oidc/validate.js +18 -18
- package/lib/oidc/validate.js.map +1 -1
- package/lib/pushprocessor.js +71 -82
- package/lib/pushprocessor.js.map +1 -1
- package/lib/randomstring.js +9 -9
- package/lib/randomstring.js.map +1 -1
- package/lib/realtime-callbacks.js +25 -28
- package/lib/realtime-callbacks.js.map +1 -1
- package/lib/receipt-accumulator.d.ts +2 -0
- package/lib/receipt-accumulator.d.ts.map +1 -1
- package/lib/receipt-accumulator.js +14 -22
- package/lib/receipt-accumulator.js.map +1 -1
- package/lib/rendezvous/MSC4108SignInWithQR.js +271 -302
- package/lib/rendezvous/MSC4108SignInWithQR.js.map +1 -1
- package/lib/rendezvous/RendezvousChannel.js +3 -1
- package/lib/rendezvous/RendezvousCode.js +3 -1
- package/lib/rendezvous/RendezvousError.js.map +1 -1
- package/lib/rendezvous/RendezvousFailureReason.js +2 -2
- package/lib/rendezvous/RendezvousFailureReason.js.map +1 -1
- package/lib/rendezvous/RendezvousIntent.js +1 -1
- package/lib/rendezvous/RendezvousIntent.js.map +1 -1
- package/lib/rendezvous/RendezvousTransport.js +3 -1
- package/lib/rendezvous/channels/MSC4108SecureChannel.js +123 -147
- package/lib/rendezvous/channels/MSC4108SecureChannel.js.map +1 -1
- package/lib/rendezvous/index.js +44 -69
- package/lib/rendezvous/index.js.map +1 -1
- package/lib/rendezvous/transports/MSC4108RendezvousSession.d.ts +1 -1
- package/lib/rendezvous/transports/MSC4108RendezvousSession.js +134 -152
- package/lib/rendezvous/transports/MSC4108RendezvousSession.js.map +1 -1
- package/lib/retentionPolicy.js +6 -9
- package/lib/retentionPolicy.js.map +1 -1
- package/lib/room-hierarchy.js +52 -60
- package/lib/room-hierarchy.js.map +1 -1
- package/lib/rust-crypto/CrossSigningIdentity.js +94 -104
- package/lib/rust-crypto/CrossSigningIdentity.js.map +1 -1
- package/lib/rust-crypto/DehydratedDeviceManager.js +157 -190
- package/lib/rust-crypto/DehydratedDeviceManager.js.map +1 -1
- package/lib/rust-crypto/KeyClaimManager.js +18 -22
- package/lib/rust-crypto/KeyClaimManager.js.map +1 -1
- package/lib/rust-crypto/OutgoingRequestProcessor.js +109 -139
- package/lib/rust-crypto/OutgoingRequestProcessor.js.map +1 -1
- package/lib/rust-crypto/OutgoingRequestsManager.js +66 -80
- package/lib/rust-crypto/OutgoingRequestsManager.js.map +1 -1
- package/lib/rust-crypto/PerSessionKeyBackupDownloader.d.ts +1 -1
- package/lib/rust-crypto/PerSessionKeyBackupDownloader.js +196 -224
- package/lib/rust-crypto/PerSessionKeyBackupDownloader.js.map +1 -1
- package/lib/rust-crypto/RoomEncryptor.js +127 -143
- package/lib/rust-crypto/RoomEncryptor.js.map +1 -1
- package/lib/rust-crypto/backup.js +453 -549
- package/lib/rust-crypto/backup.js.map +1 -1
- package/lib/rust-crypto/constants.js +1 -1
- package/lib/rust-crypto/constants.js.map +1 -1
- package/lib/rust-crypto/device-converter.js +15 -28
- package/lib/rust-crypto/device-converter.js.map +1 -1
- package/lib/rust-crypto/index.js +103 -116
- package/lib/rust-crypto/index.js.map +1 -1
- package/lib/rust-crypto/libolm_migration.js +303 -365
- package/lib/rust-crypto/libolm_migration.js.map +1 -1
- package/lib/rust-crypto/rust-crypto.d.ts +5 -1
- package/lib/rust-crypto/rust-crypto.d.ts.map +1 -1
- package/lib/rust-crypto/rust-crypto.js +1067 -1332
- package/lib/rust-crypto/rust-crypto.js.map +1 -1
- package/lib/rust-crypto/secret-storage.js +12 -25
- package/lib/rust-crypto/secret-storage.js.map +1 -1
- package/lib/rust-crypto/verification.js +137 -189
- package/lib/rust-crypto/verification.js.map +1 -1
- package/lib/scheduler.js +44 -19
- package/lib/scheduler.js.map +1 -1
- package/lib/secret-storage.js +179 -213
- package/lib/secret-storage.js.map +1 -1
- package/lib/serverCapabilities.js +6 -9
- package/lib/serverCapabilities.js.map +1 -1
- package/lib/service-types.js +1 -1
- package/lib/service-types.js.map +1 -1
- package/lib/sliding-sync-sdk.d.ts.map +1 -1
- package/lib/sliding-sync-sdk.js +368 -424
- package/lib/sliding-sync-sdk.js.map +1 -1
- package/lib/sliding-sync.js +135 -171
- package/lib/sliding-sync.js.map +1 -1
- package/lib/store/index.js +3 -1
- package/lib/store/indexeddb-backend.js +3 -1
- package/lib/store/indexeddb-local-backend.js +194 -253
- package/lib/store/indexeddb-local-backend.js.map +1 -1
- package/lib/store/indexeddb-remote-backend.js +33 -63
- package/lib/store/indexeddb-remote-backend.js.map +1 -1
- package/lib/store/indexeddb-store-worker.js +22 -23
- package/lib/store/indexeddb-store-worker.js.map +1 -1
- package/lib/store/indexeddb.js +44 -71
- package/lib/store/indexeddb.js.map +1 -1
- package/lib/store/local-storage-events-emitter.js +2 -2
- package/lib/store/local-storage-events-emitter.js.map +1 -1
- package/lib/store/memory.js +34 -57
- package/lib/store/memory.js.map +1 -1
- package/lib/store/stub.js +22 -35
- package/lib/store/stub.js.map +1 -1
- package/lib/sync-accumulator.js +54 -66
- package/lib/sync-accumulator.js.map +1 -1
- package/lib/sync.d.ts.map +1 -1
- package/lib/sync.js +905 -998
- package/lib/sync.js.map +1 -1
- package/lib/testing.js +63 -105
- package/lib/testing.js.map +1 -1
- package/lib/thread-utils.js +1 -4
- package/lib/thread-utils.js.map +1 -1
- package/lib/timeline-window.js +89 -102
- package/lib/timeline-window.js.map +1 -1
- package/lib/types.js +1 -1
- package/lib/types.js.map +1 -1
- package/lib/utils/decryptAESSecretStorageItem.js +14 -25
- package/lib/utils/decryptAESSecretStorageItem.js.map +1 -1
- package/lib/utils/encryptAESSecretStorageItem.js +27 -38
- package/lib/utils/encryptAESSecretStorageItem.js.map +1 -1
- package/lib/utils/internal/deriveKeys.js +25 -32
- package/lib/utils/internal/deriveKeys.js.map +1 -1
- package/lib/utils/roomVersion.js +1 -1
- package/lib/utils/roomVersion.js.map +1 -1
- package/lib/utils.js +83 -135
- package/lib/utils.js.map +1 -1
- package/lib/version-support.js +3 -3
- package/lib/version-support.js.map +1 -1
- package/lib/webrtc/audioContext.js +5 -6
- package/lib/webrtc/audioContext.js.map +1 -1
- package/lib/webrtc/call.js +1081 -1250
- package/lib/webrtc/call.js.map +1 -1
- package/lib/webrtc/callEventHandler.js +202 -214
- package/lib/webrtc/callEventHandler.js.map +1 -1
- package/lib/webrtc/callEventTypes.js +2 -2
- package/lib/webrtc/callEventTypes.js.map +1 -1
- package/lib/webrtc/callFeed.js +18 -20
- package/lib/webrtc/callFeed.js.map +1 -1
- package/lib/webrtc/groupCall.js +513 -602
- package/lib/webrtc/groupCall.js.map +1 -1
- package/lib/webrtc/groupCallEventHandler.js +59 -62
- package/lib/webrtc/groupCallEventHandler.js.map +1 -1
- package/lib/webrtc/mediaHandler.js +198 -232
- package/lib/webrtc/mediaHandler.js.map +1 -1
- package/lib/webrtc/stats/callFeedStatsReporter.js +16 -20
- package/lib/webrtc/stats/callFeedStatsReporter.js.map +1 -1
- package/lib/webrtc/stats/callStatsReportGatherer.js +67 -75
- package/lib/webrtc/stats/callStatsReportGatherer.js.map +1 -1
- package/lib/webrtc/stats/callStatsReportSummary.js +3 -1
- package/lib/webrtc/stats/connectionStats.js.map +1 -1
- package/lib/webrtc/stats/connectionStatsBuilder.js +2 -2
- package/lib/webrtc/stats/connectionStatsBuilder.js.map +1 -1
- package/lib/webrtc/stats/connectionStatsReportBuilder.js +20 -24
- package/lib/webrtc/stats/connectionStatsReportBuilder.js.map +1 -1
- package/lib/webrtc/stats/groupCallStats.js +6 -8
- package/lib/webrtc/stats/groupCallStats.js.map +1 -1
- package/lib/webrtc/stats/media/mediaSsrcHandler.js +7 -8
- package/lib/webrtc/stats/media/mediaSsrcHandler.js.map +1 -1
- package/lib/webrtc/stats/media/mediaTrackHandler.js +7 -9
- package/lib/webrtc/stats/media/mediaTrackHandler.js.map +1 -1
- package/lib/webrtc/stats/media/mediaTrackStats.js +3 -3
- package/lib/webrtc/stats/media/mediaTrackStats.js.map +1 -1
- package/lib/webrtc/stats/media/mediaTrackStatsHandler.js +7 -7
- package/lib/webrtc/stats/media/mediaTrackStatsHandler.js.map +1 -1
- package/lib/webrtc/stats/statsReport.js +1 -1
- package/lib/webrtc/stats/statsReport.js.map +1 -1
- package/lib/webrtc/stats/statsReportEmitter.js.map +1 -1
- package/lib/webrtc/stats/summaryStatsReportGatherer.js +14 -14
- package/lib/webrtc/stats/summaryStatsReportGatherer.js.map +1 -1
- package/lib/webrtc/stats/trackStatsBuilder.js +32 -34
- package/lib/webrtc/stats/trackStatsBuilder.js.map +1 -1
- package/lib/webrtc/stats/transportStats.js +3 -1
- package/lib/webrtc/stats/transportStatsBuilder.js +9 -9
- package/lib/webrtc/stats/transportStatsBuilder.js.map +1 -1
- package/lib/webrtc/stats/valueFormatter.js +1 -1
- package/lib/webrtc/stats/valueFormatter.js.map +1 -1
- package/package.json +18 -33
- package/src/@types/global.d.ts +2 -2
- package/src/ToDeviceMessageQueue.ts +2 -2
- package/src/browser-index.ts +4 -4
- package/src/client.ts +15 -20
- package/src/crypto-api/index.ts +17 -6
- package/src/embedded.ts +4 -6
- package/src/filter-component.ts +1 -0
- package/src/http-api/utils.ts +1 -1
- package/src/interactive-auth.ts +11 -5
- package/src/matrixrtc/LivekitTransport.ts +1 -1
- package/src/matrixrtc/MatrixRTCSession.ts +1 -1
- package/src/models/MSC3089Branch.ts +1 -1
- package/src/models/room-sticky-events.ts +1 -0
- package/src/models/room.ts +9 -11
- package/src/receipt-accumulator.ts +2 -0
- package/src/rendezvous/index.ts +1 -1
- package/src/rendezvous/transports/MSC4108RendezvousSession.ts +2 -2
- package/src/rust-crypto/PerSessionKeyBackupDownloader.ts +1 -1
- package/src/rust-crypto/index.ts +6 -6
- package/src/rust-crypto/rust-crypto.ts +31 -7
- package/src/rust-crypto/verification.ts +1 -1
- package/src/sliding-sync-sdk.ts +5 -7
- package/src/store/indexeddb-local-backend.ts +3 -3
- 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
|
-
|
|
4
|
+
const resolution = {
|
|
5
5
|
height: now.frameHeight,
|
|
6
6
|
width: now.frameWidth
|
|
7
7
|
};
|
|
8
|
-
|
|
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
|
-
|
|
15
|
+
let frameRate = trackStats.getFramerate();
|
|
16
16
|
if (!frameRate) {
|
|
17
17
|
if (before) {
|
|
18
|
-
|
|
18
|
+
const timeMs = now.timestamp - before.timestamp;
|
|
19
19
|
if (timeMs > 0 && now.framesSent) {
|
|
20
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
59
|
-
|
|
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
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
122
|
-
|
|
120
|
+
const remoteTrackList = trackStatsList.filter(t => t.getType() === "remote");
|
|
121
|
+
const audioTrackList = remoteTrackList.filter(t => t.kind === "audio");
|
|
123
122
|
remoteTrackList.forEach(stats => {
|
|
124
|
-
|
|
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
|
-
|
|
137
|
-
trackSummary.
|
|
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
|
-
|
|
148
|
+
const jitterStr = statsReport?.jitter;
|
|
151
149
|
if (jitterStr !== undefined) {
|
|
152
|
-
|
|
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
|
-
|
|
163
|
-
|
|
164
|
-
|
|
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":"AACA,SAAS,cAAc,QAAQ,qBAAqB;AAGpD,OAAO,MAAM,iBAAiB,CAAC;EAC3B,OAAc,wBAAwB,CAAC,UAA2B,EAAE,GAAQ,EAAQ;IAChF,MAAM,UAAU,GAAG;MACf,MAAM,EAAE,GAAG,CAAC,WAAW;MACvB,KAAK,EAAE,GAAG,CAAC;IACf,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe;IAErC,IAAI,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,KAAK,EAAE;MACvC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC;IACxC;IACA,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;EACvD;EAEA,OAAc,2BAA2B,CAAC,UAA2B,EAAE,GAAQ,EAAE,MAAW,EAAE,KAAa,EAAQ;IAC/G,IAAI,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACzC,IAAI,CAAC,SAAS,EAAE;MACZ,IAAI,MAAM,EAAE;QACR,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS;QAE/C,IAAI,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE;UAC9B,MAAM,yBAAyB,GAAG,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU;UAEpE,SAAS,GAAI,yBAAyB,GAAG,MAAM,GAAI,IAAI;QAC3D;MACJ;MAEA,IAAI,CAAC,SAAS,EAAE;QACZ;MACJ;IACJ;;IAEA;IACA,SAAS,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC;IACrD,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC;EACtC;EAEA,OAAc,UAAU,CAAC,MAAkC,EAAE,UAA2B,EAAE,GAAQ,EAAQ;IACtG,MAAM,KAAK,GAAG,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;IAEtC,IAAI,KAAK,EAAE;MACP;AACZ;AACA;AACA;AACA;MACY,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;MAEnD,IAAI,cAAc,EAAE,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC;IAC3D;EACJ;EAEA,OAAc,oBAAoB,CAAC,UAA2B,EAAE,GAAQ,EAAE,MAAW,EAAQ;IACzF,UAAU,CAAC,UAAU,CAAC;MAClB,QAAQ,EAAE,iBAAiB,CAAC,gBAAgB,CACxC,GAAG,CAAC,aAAa,EACjB,MAAM,CAAC,aAAa,EACpB,GAAG,CAAC,SAAS,EACb,MAAM,CAAC,SACX,CAAC;MACD,MAAM,EAAE;IACZ,CAAC,CAAC;EACN;EAEA,OAAc,gBAAgB,CAAC,UAA2B,EAAE,GAAQ,EAAE,MAAW,EAAQ;IACrF,UAAU,CAAC,UAAU,CAAC;MAClB,QAAQ,EAAE,CAAC;MACX,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS;IAClG,CAAC,CAAC;EACN;EAEA,OAAc,gBAAgB,CAAC,UAA2B,EAAE,GAAQ,EAAE,MAAW,EAAQ;IACrF,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,KAAK,cAAc,GAAG,aAAa,GAAG,iBAAiB;IAE3E,IAAI,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC;IACzB,IAAI,CAAC,UAAU,IAAI,UAAU,GAAG,CAAC,EAAE;MAC/B,UAAU,GAAG,CAAC;IAClB;IAEA,MAAM,aAAa,GAAG,cAAc,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,aAAa,CAAC;IAE3D,MAAM,cAAc,GAAG,cAAc,CAAC,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC;IAC1E,MAAM,iBAAiB,GAAG,cAAc,CAAC,mBAAmB,CAAC,MAAM,CAAC,WAAW,CAAC;IAChF,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,iBAAiB,CAAC;IAEvE,UAAU,CAAC,OAAO,CAAC;MACf,YAAY,EAAE,WAAW,GAAG,eAAe;MAC3C,WAAW,EAAE,eAAe;MAC5B,gBAAgB,EAAE,GAAG,CAAC,IAAI,KAAK;IACnC,CAAC,CAAC;EACN;EAEA,OAAe,gBAAgB,CAC3B,WAAgB,EAChB,cAAmB,EACnB,YAAoB,EACpB,eAAuB,EACjB;IACN,MAAM,QAAQ,GAAG,cAAc,CAAC,mBAAmB,CAAC,WAAW,CAAC;IAChE,MAAM,WAAW,GAAG,cAAc,CAAC,mBAAmB,CAAC,cAAc,CAAC;IACtE,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IAE1D,MAAM,MAAM,GAAG,YAAY,GAAG,eAAe;IAC7C,IAAI,WAAW,GAAG,CAAC;IAEnB,IAAI,MAAM,GAAG,CAAC,EAAE;MACZ,WAAW,GAAG,IAAI,CAAC,KAAK,CAAE,cAAc,GAAG,CAAC,GAAI,MAAM,CAAC;IAC3D;IAEA,OAAO,WAAW;EACtB;EAEA,OAAc,kBAAkB,CAAC,UAA2B,EAAE,WAA0C,EAAQ;IAC5G,IAAI,WAAW,KAAK,SAAS,EAAE;MAC3B,UAAU,CAAC,KAAK,GAAG,KAAK;MACxB;IACJ;IAEA,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,GAAG,WAAW,EAAE,MAAM,EAAE,KAAK;IACzG,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;MACvC,UAAU,CAAC,KAAK,GAAG,KAAK;MACxB;IACJ;IAEA,IAAI,KAAK,CAAC,UAAU,KAAK,OAAO,EAAE;MAC9B,UAAU,CAAC,KAAK,GAAG,KAAK;MACxB;IACJ;IACA,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;IAC9B,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;IAClC,UAAU,CAAC,KAAK,GAAG,IAAI;EAC3B;EAEA,OAAc,iBAAiB,CAAC,cAAiC,EAG/D;IACE,MAAM,iBAA+B,GAAG;MACpC,KAAK,EAAE,CAAC;MACR,KAAK,EAAE,CAAC;MACR,SAAS,EAAE,CAAC;MACZ,aAAa,EAAE,CAAC;MAChB,cAAc,EAAE,CAAC;MACjB,UAAU,EAAE;IAChB,CAAC;IACD,MAAM,iBAA+B,GAAG;MACpC,KAAK,EAAE,CAAC;MACR,KAAK,EAAE,CAAC;MACR,SAAS,EAAE,CAAC;MACZ,aAAa,EAAE,CAAC;MAChB,cAAc,EAAE,CAAC;MACjB,UAAU,EAAE;IAChB,CAAC;IAED,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,CAAE,CAAC,IAAK,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,QAAQ,CAAC;IAC9E,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAAE,CAAC,IAAK,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;IAExE,eAAe,CAAC,OAAO,CAAE,KAAK,IAAK;MAC/B,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,KAAK,OAAO,GAAG,iBAAiB,GAAG,iBAAiB;MACnF,YAAY,CAAC,KAAK,EAAE;MACpB,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE;QAC5B,YAAY,CAAC,KAAK,EAAE;MACxB;MACA,IAAI,YAAY,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE;QAC5C,YAAY,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;MAC9C;MACA,IAAI,YAAY,CAAC,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE;QAC1D,YAAY,CAAC,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW;MAC5D;MACA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;QAC3B,YAAY,CAAC,cAAc,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,EAAE,cAAc;QAC1E,YAAY,CAAC,UAAU,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,EAAE,kBAAkB;MAC9E;IACJ,CAAC,CAAC;IAEF,OAAO;MAAE,iBAAiB;MAAE;IAAkB,CAAC;EACnD;EAEA,OAAc,WAAW,CAAC,UAA2B,EAAE,WAAgB,EAAQ;IAC3E,IAAI,WAAW,CAAC,IAAI,KAAK,aAAa,EAAE;MACpC;IACJ;IAEA,MAAM,SAAS,GAAG,WAAW,EAAE,MAAM;IACrC,IAAI,SAAS,KAAK,SAAS,EAAE;MACzB,MAAM,MAAM,GAAG,cAAc,CAAC,mBAAmB,CAAC,SAAS,CAAC;MAC5D,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACnD,CAAC,MAAM;MACH,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5B;EACJ;EAEA,OAAc,qBAAqB,CAAC,UAA2B,EAAE,WAAgB,EAAQ;IACrF,IAAI,WAAW,CAAC,IAAI,KAAK,aAAa,EAAE;MACpC;IACJ;IACA,MAAM,WAAW,GAAI,IAAI,GAAG,WAAW,EAAE,oBAAoB,GAAI,WAAW,EAAE,oBAAoB;IAClG,MAAM,sBAAsB,GAAG,WAAW,GAAG,WAAW,EAAE,gBAAgB;IAC1E,MAAM,kBAAkB,GAAG,IAAI,GAAG,WAAW,EAAE,oBAAoB;IACnE,UAAU,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,kBAAkB,CAAC;EAC9E;AACJ","ignoreList":[]}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
export class TransportStatsBuilder {
|
|
2
2
|
static buildReport(report, now, conferenceStatsTransport, isFocus) {
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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":[
|
|
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":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valueFormatter.js","names":[
|
|
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.
|
|
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": "^
|
|
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": "^
|
|
58
|
-
"@babel/core": "^
|
|
59
|
-
"@babel/
|
|
60
|
-
"@babel/
|
|
61
|
-
"@babel/plugin-
|
|
62
|
-
"@babel/plugin-
|
|
63
|
-
"@babel/plugin-transform-
|
|
64
|
-
"@babel/plugin-transform-
|
|
65
|
-
"@babel/
|
|
66
|
-
"@babel/
|
|
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
|
-
"
|
|
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": "
|
|
117
|
-
"lint:js-fix": "
|
|
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",
|
package/src/@types/global.d.ts
CHANGED
|
@@ -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, ...
|
|
25
|
-
function setTimeout(handler: TimerHandler, timeout: 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
|
}
|
package/src/browser-index.ts
CHANGED
|
@@ -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
|
|
17
|
+
import * as sdk from "./matrix.ts";
|
|
18
18
|
|
|
19
|
-
type BrowserMatrix = typeof
|
|
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
|
-
|
|
40
|
+
sdk.setCryptoStoreFactory(() => new sdk.IndexedDBCryptoStore(indexedDB!, "matrix-js-sdk:crypto"));
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
export * from "./matrix.ts";
|
|
44
|
-
globalThis.matrixcs =
|
|
44
|
+
globalThis.matrixcs = sdk;
|