@textrp/briij-js-sdk 41.0.1 → 43.0.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 +14 -1
- package/LICENSE +177 -177
- package/README.md +85 -3
- package/lib/@types/AESEncryptedSecretStoragePayload.js.map +1 -1
- package/lib/@types/IIdentityServerProvider.js.map +1 -1
- package/lib/@types/PushRules.js +14 -14
- package/lib/@types/PushRules.js.map +1 -1
- package/lib/@types/another-json.d.js.map +1 -1
- package/lib/@types/auth.d.ts +72 -1
- package/lib/@types/auth.d.ts.map +1 -1
- package/lib/@types/auth.js +57 -54
- package/lib/@types/auth.js.map +1 -1
- package/lib/@types/beacon.js +100 -100
- package/lib/@types/beacon.js.map +1 -1
- package/lib/@types/common.js.map +1 -1
- package/lib/@types/crypto.js.map +1 -1
- package/lib/@types/event.d.ts +59 -0
- package/lib/@types/event.d.ts.map +1 -1
- package/lib/@types/event.js +105 -102
- package/lib/@types/event.js.map +1 -1
- package/lib/@types/events.js.map +1 -1
- package/lib/@types/extensible_events.js +53 -53
- package/lib/@types/extensible_events.js.map +1 -1
- package/lib/@types/local_notifications.js.map +1 -1
- package/lib/@types/location.js +41 -41
- package/lib/@types/location.js.map +1 -1
- package/lib/@types/matrix-sdk-crypto-wasm.d.js.map +1 -1
- package/lib/@types/media.js.map +1 -1
- package/lib/@types/membership.js +39 -39
- package/lib/@types/membership.js.map +1 -1
- package/lib/@types/partials.js +25 -25
- package/lib/@types/partials.js.map +1 -1
- package/lib/@types/polls.js +46 -46
- package/lib/@types/polls.js.map +1 -1
- package/lib/@types/read_receipts.js +14 -14
- package/lib/@types/read_receipts.js.map +1 -1
- package/lib/@types/registration.js.map +1 -1
- package/lib/@types/search.js +14 -14
- package/lib/@types/search.js.map +1 -1
- package/lib/@types/signed.js.map +1 -1
- package/lib/@types/spaces.js.map +1 -1
- package/lib/@types/state_events.js.map +1 -1
- package/lib/@types/synapse.js.map +1 -1
- package/lib/@types/sync.js +18 -18
- package/lib/@types/sync.js.map +1 -1
- package/lib/@types/threepids.js +14 -14
- package/lib/@types/threepids.js.map +1 -1
- package/lib/@types/topic.js +47 -47
- package/lib/@types/topic.js.map +1 -1
- package/lib/@types/uia.js.map +1 -1
- package/lib/NamespacedValue.js +20 -20
- package/lib/NamespacedValue.js.map +1 -1
- package/lib/ReEmitter.js +16 -16
- package/lib/ReEmitter.js.map +1 -1
- package/lib/base64.js +32 -32
- package/lib/base64.js.map +1 -1
- package/lib/briij.d.ts +4 -0
- package/lib/briij.d.ts.map +1 -1
- package/lib/briij.js +4 -0
- package/lib/briij.js.map +1 -1
- package/lib/client.d.ts +48 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +262 -108
- package/lib/client.js.map +1 -1
- package/lib/common-crypto/key-passphrase.js +19 -19
- package/lib/common-crypto/key-passphrase.js.map +1 -1
- package/lib/content-helpers.js +57 -57
- package/lib/content-helpers.js.map +1 -1
- package/lib/content-repo.js +36 -36
- package/lib/content-repo.js.map +1 -1
- package/lib/crypto/store/base.js +69 -69
- package/lib/crypto/store/base.js.map +1 -1
- package/lib/crypto/store/indexeddb-crypto-store-backend.js +58 -58
- package/lib/crypto/store/indexeddb-crypto-store-backend.js.map +1 -1
- package/lib/crypto/store/indexeddb-crypto-store.js +193 -193
- package/lib/crypto/store/indexeddb-crypto-store.js.map +1 -1
- package/lib/crypto/store/localStorage-crypto-store.js +72 -72
- package/lib/crypto/store/localStorage-crypto-store.js.map +1 -1
- package/lib/crypto/store/memory-crypto-store.js +74 -74
- package/lib/crypto/store/memory-crypto-store.js.map +1 -1
- package/lib/crypto-api/CryptoEventHandlerMap.js.map +1 -1
- package/lib/crypto-api/key-passphrase.js +22 -22
- package/lib/crypto-api/key-passphrase.js.map +1 -1
- package/lib/crypto-api/keybackup.js.map +1 -1
- package/lib/crypto-api/recovery-key.js +20 -20
- package/lib/crypto-api/recovery-key.js.map +1 -1
- package/lib/digest.js +21 -21
- package/lib/digest.js.map +1 -1
- package/lib/extensible_events_v1/ExtensibleEvent.js +39 -39
- package/lib/extensible_events_v1/ExtensibleEvent.js.map +1 -1
- package/lib/extensible_events_v1/InvalidEventError.js +16 -16
- package/lib/extensible_events_v1/InvalidEventError.js.map +1 -1
- package/lib/extensible_events_v1/MessageEvent.js +39 -39
- package/lib/extensible_events_v1/MessageEvent.js.map +1 -1
- package/lib/extensible_events_v1/PollEndEvent.js +29 -29
- package/lib/extensible_events_v1/PollEndEvent.js.map +1 -1
- package/lib/extensible_events_v1/PollResponseEvent.js +39 -39
- package/lib/extensible_events_v1/PollResponseEvent.js.map +1 -1
- package/lib/extensible_events_v1/PollStartEvent.js +52 -52
- package/lib/extensible_events_v1/PollStartEvent.js.map +1 -1
- package/lib/extensible_events_v1/utilities.js +22 -22
- package/lib/extensible_events_v1/utilities.js.map +1 -1
- package/lib/feature.js +16 -16
- package/lib/feature.js.map +1 -1
- package/lib/http-api/method.js +14 -14
- package/lib/http-api/method.js.map +1 -1
- package/lib/http-api/prefix.js +26 -26
- package/lib/http-api/prefix.js.map +1 -1
- package/lib/indexeddb-helpers.js +21 -21
- package/lib/indexeddb-helpers.js.map +1 -1
- package/lib/indexeddb-worker.js +18 -18
- package/lib/indexeddb-worker.js.map +1 -1
- package/lib/matrixrtc/IKeyTransport.js +17 -17
- package/lib/matrixrtc/IKeyTransport.js.map +1 -1
- package/lib/matrixrtc/IMembershipManager.js +27 -27
- package/lib/matrixrtc/IMembershipManager.js.map +1 -1
- package/lib/matrixrtc/LivekitTransport.js +19 -19
- package/lib/matrixrtc/LivekitTransport.js.map +1 -1
- package/lib/matrixrtc/index.js +14 -14
- package/lib/matrixrtc/index.js.map +1 -1
- package/lib/matrixrtc/utils.js +27 -27
- package/lib/matrixrtc/utils.js.map +1 -1
- package/lib/models/ToDeviceMessage.js.map +1 -1
- package/lib/models/device.js +24 -24
- package/lib/models/device.js.map +1 -1
- package/lib/models/event-status.js +17 -17
- package/lib/models/event-status.js.map +1 -1
- package/lib/models/invites-ignorer-types.js +25 -25
- package/lib/models/invites-ignorer-types.js.map +1 -1
- package/lib/models/profile-keys.js +26 -26
- package/lib/models/profile-keys.js.map +1 -1
- package/lib/models/room-summary.js +26 -26
- package/lib/models/room-summary.js.map +1 -1
- package/lib/models/search-result.js +22 -22
- package/lib/models/search-result.js.map +1 -1
- package/lib/models/typed-event-emitter.js +122 -122
- package/lib/models/typed-event-emitter.js.map +1 -1
- package/lib/oidc/authorize.js +76 -76
- package/lib/oidc/authorize.js.map +1 -1
- package/lib/oidc/error.js +17 -17
- package/lib/oidc/error.js.map +1 -1
- package/lib/oidc/index.js +17 -17
- package/lib/oidc/index.js.map +1 -1
- package/lib/oidc/register.js +41 -41
- package/lib/oidc/register.js.map +1 -1
- package/lib/oidc/tokenRefresher.js +51 -51
- package/lib/oidc/tokenRefresher.js.map +1 -1
- package/lib/oidc/validate.js +59 -59
- package/lib/oidc/validate.js.map +1 -1
- package/lib/randomstring.js +35 -35
- package/lib/randomstring.js.map +1 -1
- package/lib/realtime-callbacks.js +39 -39
- package/lib/realtime-callbacks.js.map +1 -1
- package/lib/receipt-accumulator.js +44 -44
- package/lib/receipt-accumulator.js.map +1 -1
- package/lib/rendezvous/RendezvousChannel.js.map +1 -1
- package/lib/rendezvous/RendezvousCode.js.map +1 -1
- package/lib/rendezvous/RendezvousError.js +14 -14
- package/lib/rendezvous/RendezvousError.js.map +1 -1
- package/lib/rendezvous/RendezvousFailureReason.js +14 -14
- package/lib/rendezvous/RendezvousFailureReason.js.map +1 -1
- package/lib/rendezvous/RendezvousIntent.js +14 -14
- package/lib/rendezvous/RendezvousIntent.js.map +1 -1
- package/lib/rendezvous/RendezvousTransport.js.map +1 -1
- package/lib/rendezvous/channels/MSC4108SecureChannel.js +63 -63
- package/lib/rendezvous/channels/MSC4108SecureChannel.js.map +1 -1
- package/lib/rendezvous/channels/index.js +14 -14
- package/lib/rendezvous/channels/index.js.map +1 -1
- package/lib/rendezvous/index.js +14 -14
- package/lib/rendezvous/index.js.map +1 -1
- package/lib/rendezvous/transports/index.js +14 -14
- package/lib/rendezvous/transports/index.js.map +1 -1
- package/lib/rust-crypto/CrossSigningIdentity.js +29 -29
- package/lib/rust-crypto/CrossSigningIdentity.js.map +1 -1
- package/lib/rust-crypto/OutgoingRequestsManager.js +37 -37
- package/lib/rust-crypto/OutgoingRequestsManager.js.map +1 -1
- package/lib/rust-crypto/device-converter.js +30 -30
- package/lib/rust-crypto/device-converter.js.map +1 -1
- package/lib/rust-crypto/secret-storage.js +30 -30
- package/lib/rust-crypto/secret-storage.js.map +1 -1
- package/lib/service-types.js +14 -14
- package/lib/service-types.js.map +1 -1
- package/lib/store/local-storage-events-emitter.js +21 -21
- package/lib/store/local-storage-events-emitter.js.map +1 -1
- package/lib/sync-accumulator.js +50 -50
- package/lib/sync-accumulator.js.map +1 -1
- package/lib/thread-utils.js +20 -20
- package/lib/thread-utils.js.map +1 -1
- package/lib/types.js +34 -34
- package/lib/types.js.map +1 -1
- package/lib/utils/decryptAESSecretStorageItem.js +22 -22
- package/lib/utils/decryptAESSecretStorageItem.js.map +1 -1
- package/lib/utils/encryptAESSecretStorageItem.js +26 -26
- package/lib/utils/encryptAESSecretStorageItem.js.map +1 -1
- package/lib/utils/internal/deriveKeys.js +21 -21
- package/lib/utils/internal/deriveKeys.js.map +1 -1
- package/lib/utils/roomVersion.js +26 -26
- package/lib/utils/roomVersion.js.map +1 -1
- package/lib/version-support.js +26 -26
- package/lib/version-support.js.map +1 -1
- package/lib/wallet-recovery.d.ts +24 -0
- package/lib/wallet-recovery.d.ts.map +1 -0
- package/lib/wallet-recovery.js +232 -0
- package/lib/wallet-recovery.js.map +1 -0
- package/lib/webrtc/audioContext.js +24 -24
- package/lib/webrtc/audioContext.js.map +1 -1
- package/lib/webrtc/callEventTypes.js.map +1 -1
- package/lib/webrtc/stats/callFeedStatsReporter.js +14 -14
- package/lib/webrtc/stats/callFeedStatsReporter.js.map +1 -1
- package/lib/webrtc/stats/callStatsReportGatherer.js +14 -14
- package/lib/webrtc/stats/callStatsReportGatherer.js.map +1 -1
- package/lib/webrtc/stats/callStatsReportSummary.js.map +1 -1
- package/lib/webrtc/stats/connectionStats.js +14 -14
- package/lib/webrtc/stats/connectionStats.js.map +1 -1
- package/lib/webrtc/stats/connectionStatsBuilder.js +14 -14
- package/lib/webrtc/stats/connectionStatsBuilder.js.map +1 -1
- package/lib/webrtc/stats/connectionStatsReportBuilder.js +14 -14
- package/lib/webrtc/stats/connectionStatsReportBuilder.js.map +1 -1
- package/lib/webrtc/stats/groupCallStats.js +14 -14
- package/lib/webrtc/stats/groupCallStats.js.map +1 -1
- package/lib/webrtc/stats/media/mediaSsrcHandler.js +14 -14
- package/lib/webrtc/stats/media/mediaSsrcHandler.js.map +1 -1
- package/lib/webrtc/stats/media/mediaTrackHandler.js +14 -14
- package/lib/webrtc/stats/media/mediaTrackHandler.js.map +1 -1
- package/lib/webrtc/stats/media/mediaTrackStats.js +27 -27
- package/lib/webrtc/stats/media/mediaTrackStats.js.map +1 -1
- package/lib/webrtc/stats/media/mediaTrackStatsHandler.js +20 -20
- package/lib/webrtc/stats/media/mediaTrackStatsHandler.js.map +1 -1
- package/lib/webrtc/stats/statsReport.js +14 -14
- package/lib/webrtc/stats/statsReport.js.map +1 -1
- package/lib/webrtc/stats/statsReportEmitter.js +14 -14
- package/lib/webrtc/stats/statsReportEmitter.js.map +1 -1
- package/lib/webrtc/stats/trackStatsBuilder.js +4 -4
- package/lib/webrtc/stats/trackStatsBuilder.js.map +1 -1
- package/lib/webrtc/stats/transportStats.js.map +1 -1
- package/lib/webrtc/stats/transportStatsBuilder.js.map +1 -1
- package/lib/webrtc/stats/valueFormatter.js +11 -11
- package/lib/webrtc/stats/valueFormatter.js.map +1 -1
- package/lib/xrpl/identity.d.ts +28 -0
- package/lib/xrpl/identity.d.ts.map +1 -0
- package/lib/xrpl/identity.js +213 -0
- package/lib/xrpl/identity.js.map +1 -0
- package/lib/xrpl/trust.d.ts +8 -0
- package/lib/xrpl/trust.d.ts.map +1 -0
- package/lib/xrpl/trust.js +61 -0
- package/lib/xrpl/trust.js.map +1 -0
- package/lib/xrpl/verification.d.ts +26 -0
- package/lib/xrpl/verification.d.ts.map +1 -0
- package/lib/xrpl/verification.js +295 -0
- package/lib/xrpl/verification.js.map +1 -0
- package/package.json +130 -129
- package/src/@types/AESEncryptedSecretStoragePayload.ts +29 -29
- package/src/@types/IIdentityServerProvider.ts +24 -24
- package/src/@types/PushRules.ts +208 -208
- package/src/@types/another-json.d.ts +19 -19
- package/src/@types/auth.ts +340 -258
- package/src/@types/beacon.ts +140 -140
- package/src/@types/common.ts +24 -24
- package/src/@types/crypto.ts +71 -71
- package/src/@types/event.ts +508 -449
- package/src/@types/events.ts +119 -119
- package/src/@types/extensible_events.ts +147 -147
- package/src/@types/local_notifications.ts +19 -19
- package/src/@types/location.ts +92 -92
- package/src/@types/matrix-sdk-crypto-wasm.d.ts +39 -39
- package/src/@types/media.ts +245 -245
- package/src/@types/membership.ts +57 -57
- package/src/@types/partials.ts +103 -103
- package/src/@types/polls.ts +120 -120
- package/src/@types/read_receipts.ts +61 -61
- package/src/@types/registration.ts +102 -102
- package/src/@types/search.ts +119 -119
- package/src/@types/signed.ts +25 -25
- package/src/@types/spaces.ts +37 -37
- package/src/@types/state_events.ts +153 -153
- package/src/@types/synapse.ts +40 -40
- package/src/@types/sync.ts +27 -27
- package/src/@types/threepids.ts +29 -29
- package/src/@types/topic.ts +69 -69
- package/src/@types/uia.ts +24 -24
- package/src/NamespacedValue.ts +121 -121
- package/src/ReEmitter.ts +93 -93
- package/src/base64.ts +86 -86
- package/src/briij.ts +4 -0
- package/src/client.ts +183 -10
- package/src/common-crypto/README.md +4 -4
- package/src/common-crypto/key-passphrase.ts +43 -43
- package/src/content-helpers.ts +298 -298
- package/src/content-repo.ts +122 -122
- package/src/crypto/store/base.ts +388 -388
- package/src/crypto/store/indexeddb-crypto-store-backend.ts +655 -655
- package/src/crypto/store/indexeddb-crypto-store.ts +555 -555
- package/src/crypto/store/localStorage-crypto-store.ts +409 -409
- package/src/crypto/store/memory-crypto-store.ts +326 -326
- package/src/crypto-api/CryptoEventHandlerMap.ts +42 -42
- package/src/crypto-api/key-passphrase.ts +58 -58
- package/src/crypto-api/keybackup.ts +114 -114
- package/src/crypto-api/recovery-key.ts +69 -69
- package/src/digest.ts +34 -34
- package/src/extensible_events_v1/ExtensibleEvent.ts +58 -58
- package/src/extensible_events_v1/InvalidEventError.ts +24 -24
- package/src/extensible_events_v1/MessageEvent.ts +143 -143
- package/src/extensible_events_v1/PollEndEvent.ts +97 -97
- package/src/extensible_events_v1/PollResponseEvent.ts +148 -148
- package/src/extensible_events_v1/PollStartEvent.ts +207 -207
- package/src/extensible_events_v1/utilities.ts +35 -35
- package/src/feature.ts +88 -88
- package/src/http-api/method.ts +25 -25
- package/src/http-api/prefix.ts +48 -48
- package/src/indexeddb-helpers.ts +50 -50
- package/src/indexeddb-worker.ts +24 -24
- package/src/matrixrtc/IKeyTransport.ts +63 -63
- package/src/matrixrtc/IMembershipManager.ts +120 -120
- package/src/matrixrtc/LivekitTransport.ts +46 -46
- package/src/matrixrtc/index.ts +24 -24
- package/src/matrixrtc/utils.ts +71 -71
- package/src/models/ToDeviceMessage.ts +38 -38
- package/src/models/device.ts +85 -85
- package/src/models/event-status.ts +39 -39
- package/src/models/invites-ignorer-types.ts +58 -58
- package/src/models/profile-keys.ts +33 -33
- package/src/models/room-summary.ts +78 -78
- package/src/models/search-result.ts +57 -57
- package/src/models/typed-event-emitter.ts +246 -246
- package/src/oidc/authorize.ts +279 -279
- package/src/oidc/error.ts +33 -33
- package/src/oidc/index.ts +33 -33
- package/src/oidc/register.ts +163 -163
- package/src/oidc/tokenRefresher.ts +184 -184
- package/src/oidc/validate.ts +265 -265
- package/src/randomstring.ts +103 -103
- package/src/realtime-callbacks.ts +191 -191
- package/src/receipt-accumulator.ts +189 -189
- package/src/rendezvous/RendezvousChannel.ts +48 -48
- package/src/rendezvous/RendezvousCode.ts +25 -25
- package/src/rendezvous/RendezvousError.ts +26 -26
- package/src/rendezvous/RendezvousFailureReason.ts +49 -49
- package/src/rendezvous/RendezvousIntent.ts +20 -20
- package/src/rendezvous/RendezvousTransport.ts +58 -58
- package/src/rendezvous/channels/MSC4108SecureChannel.ts +270 -270
- package/src/rendezvous/channels/index.ts +17 -17
- package/src/rendezvous/index.ts +25 -25
- package/src/rendezvous/transports/index.ts +17 -17
- package/src/rust-crypto/CrossSigningIdentity.ts +195 -195
- package/src/rust-crypto/OutgoingRequestsManager.ts +170 -170
- package/src/rust-crypto/device-converter.ts +128 -128
- package/src/rust-crypto/secret-storage.ts +60 -60
- package/src/service-types.ts +20 -20
- package/src/store/local-storage-events-emitter.ts +46 -46
- package/src/sync-accumulator.ts +779 -779
- package/src/thread-utils.ts +31 -31
- package/src/types.ts +59 -59
- package/src/utils/decryptAESSecretStorageItem.ts +54 -54
- package/src/utils/encryptAESSecretStorageItem.ts +73 -73
- package/src/utils/internal/deriveKeys.ts +63 -63
- package/src/utils/roomVersion.ts +35 -35
- package/src/version-support.ts +50 -50
- package/src/wallet-recovery.ts +252 -0
- package/src/webrtc/audioContext.ts +44 -44
- package/src/webrtc/callEventTypes.ts +101 -101
- package/src/webrtc/stats/callFeedStatsReporter.ts +91 -91
- package/src/webrtc/stats/callStatsReportGatherer.ts +219 -219
- package/src/webrtc/stats/callStatsReportSummary.ts +30 -30
- package/src/webrtc/stats/connectionStats.ts +47 -47
- package/src/webrtc/stats/connectionStatsBuilder.ts +28 -28
- package/src/webrtc/stats/connectionStatsReportBuilder.ts +140 -140
- package/src/webrtc/stats/groupCallStats.ts +93 -93
- package/src/webrtc/stats/media/mediaSsrcHandler.ts +57 -57
- package/src/webrtc/stats/media/mediaTrackHandler.ts +70 -70
- package/src/webrtc/stats/media/mediaTrackStats.ts +176 -176
- package/src/webrtc/stats/media/mediaTrackStatsHandler.ts +90 -90
- package/src/webrtc/stats/statsReport.ts +133 -133
- package/src/webrtc/stats/statsReportEmitter.ts +49 -49
- package/src/webrtc/stats/trackStatsBuilder.ts +207 -207
- package/src/webrtc/stats/transportStats.ts +26 -26
- package/src/webrtc/stats/transportStatsBuilder.ts +48 -48
- package/src/webrtc/stats/valueFormatter.ts +27 -27
- package/src/xrpl/identity.ts +245 -0
- package/src/xrpl/trust.ts +64 -0
- package/src/xrpl/verification.ts +284 -0
|
@@ -1,120 +1,120 @@
|
|
|
1
|
-
/*
|
|
2
|
-
Copyright 2025 The Matrix.org Foundation C.I.C.
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
import type { CallMembership } from "./CallMembership.ts";
|
|
18
|
-
import type { RTCCallIntent, Status, Transport } from "./types.ts";
|
|
19
|
-
import { type TypedEventEmitter } from "../models/typed-event-emitter.ts";
|
|
20
|
-
|
|
21
|
-
export enum MembershipManagerEvent {
|
|
22
|
-
StatusChanged = "StatusChanged",
|
|
23
|
-
/**
|
|
24
|
-
* Emitted when the membership manager has not heard back from the server for the duration
|
|
25
|
-
* of the delayed event and hence failed to restart the delayed event.
|
|
26
|
-
* This means that the user is probably not joined anymore and the leave event was distributed to other session members.
|
|
27
|
-
*/
|
|
28
|
-
ProbablyLeft = "ProbablyLeft",
|
|
29
|
-
/**
|
|
30
|
-
* Once the membershipManger has aquired the a delay id (after sending the state event)
|
|
31
|
-
* It will emit and share the delay id.
|
|
32
|
-
*/
|
|
33
|
-
DelayIdChanged = "DelayIdChanged",
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export type MembershipManagerEventHandlerMap = {
|
|
37
|
-
[MembershipManagerEvent.StatusChanged]: (prefStatus: Status, newStatus: Status) => void;
|
|
38
|
-
[MembershipManagerEvent.ProbablyLeft]: (probablyLeft: boolean) => void;
|
|
39
|
-
[MembershipManagerEvent.DelayIdChanged]: (delayId: string | undefined) => void;
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* This interface defines what a MembershipManager uses and exposes.
|
|
44
|
-
* This interface is what we use to write tests and allows changing the actual implementation
|
|
45
|
-
* without breaking tests because of some internal method renaming.
|
|
46
|
-
*
|
|
47
|
-
* @internal
|
|
48
|
-
*/
|
|
49
|
-
export interface IMembershipManager extends TypedEventEmitter<
|
|
50
|
-
MembershipManagerEvent,
|
|
51
|
-
MembershipManagerEventHandlerMap
|
|
52
|
-
> {
|
|
53
|
-
/**
|
|
54
|
-
* If we are trying to join, or have successfully joined the session.
|
|
55
|
-
* It does not reflect if the room state is already configured to represent us being joined.
|
|
56
|
-
* It only means that the Manager should be trying to connect or to disconnect running.
|
|
57
|
-
* The Manager is still running right after isJoined becomes false to send the disconnect events.
|
|
58
|
-
* @returns true if we intend to be participating in the MatrixRTC session
|
|
59
|
-
* @deprecated This name is confusing and replaced by `isActivated()`. (Returns the same as `isActivated()`)
|
|
60
|
-
*/
|
|
61
|
-
isJoined(): boolean;
|
|
62
|
-
/**
|
|
63
|
-
* If the manager is activated. This means it tries to do its job to join the call, resend state events...
|
|
64
|
-
* It does not imply that the room state is already configured to represent being joined.
|
|
65
|
-
* It means that the Manager tries to connect or is connected. ("the manager is still active")
|
|
66
|
-
* Once `leave()` is called the manager is not activated anymore but still running until `leave()` resolves.
|
|
67
|
-
* @returns `true` if we intend to be participating in the MatrixRTC session
|
|
68
|
-
*/
|
|
69
|
-
isActivated(): boolean;
|
|
70
|
-
/**
|
|
71
|
-
* Get the actual connection status of the manager.
|
|
72
|
-
*/
|
|
73
|
-
get status(): Status;
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* The Current own state event if the manger is connected.
|
|
77
|
-
* `undefined` if not connected.
|
|
78
|
-
*/
|
|
79
|
-
get ownMembership(): CallMembership | undefined;
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* If the membership manager has reason to believe that the hs sent a leave event
|
|
83
|
-
* and as a consequence the current user is perceived as left for other session participants.
|
|
84
|
-
*/
|
|
85
|
-
get probablyLeft(): boolean;
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* If the membership manager has reason to believe that the hs sent a leave event
|
|
89
|
-
* and as a consequence the current user is perceived as left for other session participants.
|
|
90
|
-
*/
|
|
91
|
-
get delayId(): string | undefined;
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Start sending all necessary events to make this user participate in the RTC session.
|
|
95
|
-
* @param fociPreferred the list of preferred foci to use in the joined RTC membership event.
|
|
96
|
-
* If multiSfuFocus is set, this is only needed if this client wants to publish to multiple transports simultaneously.
|
|
97
|
-
* @param multiSfuFocus the active focus to use in the joined RTC membership event. Setting this implies the
|
|
98
|
-
* membership manager will operate in a multi-SFU connection mode. If `undefined`, an `oldest_membership`
|
|
99
|
-
* transport selection will be used instead.
|
|
100
|
-
* @throws can throw if it exceeds a configured maximum retry.
|
|
101
|
-
*/
|
|
102
|
-
join(fociPreferred: Transport[], multiSfuFocus?: Transport, onError?: (error: unknown) => void): void;
|
|
103
|
-
/**
|
|
104
|
-
* Send all necessary events to make this user leave the RTC session.
|
|
105
|
-
* @param timeout the maximum duration in ms until the promise is forced to resolve.
|
|
106
|
-
* @returns It resolves with true in case the leave was sent successfully.
|
|
107
|
-
* It resolves with false in case we hit the timeout before sending successfully.
|
|
108
|
-
*/
|
|
109
|
-
leave(timeout?: number): Promise<boolean>;
|
|
110
|
-
/**
|
|
111
|
-
* Call this if the MatrixRTC session members have changed.
|
|
112
|
-
*/
|
|
113
|
-
onRTCSessionMemberUpdate(memberships: CallMembership[]): Promise<void>;
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Update the intent of a membership on the call (e.g. user is now providing a video feed)
|
|
117
|
-
* @param callIntent The new intent to set.
|
|
118
|
-
*/
|
|
119
|
-
updateCallIntent(callIntent: RTCCallIntent): Promise<void>;
|
|
120
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2025 The Matrix.org Foundation C.I.C.
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import type { CallMembership } from "./CallMembership.ts";
|
|
18
|
+
import type { RTCCallIntent, Status, Transport } from "./types.ts";
|
|
19
|
+
import { type TypedEventEmitter } from "../models/typed-event-emitter.ts";
|
|
20
|
+
|
|
21
|
+
export enum MembershipManagerEvent {
|
|
22
|
+
StatusChanged = "StatusChanged",
|
|
23
|
+
/**
|
|
24
|
+
* Emitted when the membership manager has not heard back from the server for the duration
|
|
25
|
+
* of the delayed event and hence failed to restart the delayed event.
|
|
26
|
+
* This means that the user is probably not joined anymore and the leave event was distributed to other session members.
|
|
27
|
+
*/
|
|
28
|
+
ProbablyLeft = "ProbablyLeft",
|
|
29
|
+
/**
|
|
30
|
+
* Once the membershipManger has aquired the a delay id (after sending the state event)
|
|
31
|
+
* It will emit and share the delay id.
|
|
32
|
+
*/
|
|
33
|
+
DelayIdChanged = "DelayIdChanged",
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export type MembershipManagerEventHandlerMap = {
|
|
37
|
+
[MembershipManagerEvent.StatusChanged]: (prefStatus: Status, newStatus: Status) => void;
|
|
38
|
+
[MembershipManagerEvent.ProbablyLeft]: (probablyLeft: boolean) => void;
|
|
39
|
+
[MembershipManagerEvent.DelayIdChanged]: (delayId: string | undefined) => void;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* This interface defines what a MembershipManager uses and exposes.
|
|
44
|
+
* This interface is what we use to write tests and allows changing the actual implementation
|
|
45
|
+
* without breaking tests because of some internal method renaming.
|
|
46
|
+
*
|
|
47
|
+
* @internal
|
|
48
|
+
*/
|
|
49
|
+
export interface IMembershipManager extends TypedEventEmitter<
|
|
50
|
+
MembershipManagerEvent,
|
|
51
|
+
MembershipManagerEventHandlerMap
|
|
52
|
+
> {
|
|
53
|
+
/**
|
|
54
|
+
* If we are trying to join, or have successfully joined the session.
|
|
55
|
+
* It does not reflect if the room state is already configured to represent us being joined.
|
|
56
|
+
* It only means that the Manager should be trying to connect or to disconnect running.
|
|
57
|
+
* The Manager is still running right after isJoined becomes false to send the disconnect events.
|
|
58
|
+
* @returns true if we intend to be participating in the MatrixRTC session
|
|
59
|
+
* @deprecated This name is confusing and replaced by `isActivated()`. (Returns the same as `isActivated()`)
|
|
60
|
+
*/
|
|
61
|
+
isJoined(): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* If the manager is activated. This means it tries to do its job to join the call, resend state events...
|
|
64
|
+
* It does not imply that the room state is already configured to represent being joined.
|
|
65
|
+
* It means that the Manager tries to connect or is connected. ("the manager is still active")
|
|
66
|
+
* Once `leave()` is called the manager is not activated anymore but still running until `leave()` resolves.
|
|
67
|
+
* @returns `true` if we intend to be participating in the MatrixRTC session
|
|
68
|
+
*/
|
|
69
|
+
isActivated(): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Get the actual connection status of the manager.
|
|
72
|
+
*/
|
|
73
|
+
get status(): Status;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* The Current own state event if the manger is connected.
|
|
77
|
+
* `undefined` if not connected.
|
|
78
|
+
*/
|
|
79
|
+
get ownMembership(): CallMembership | undefined;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* If the membership manager has reason to believe that the hs sent a leave event
|
|
83
|
+
* and as a consequence the current user is perceived as left for other session participants.
|
|
84
|
+
*/
|
|
85
|
+
get probablyLeft(): boolean;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* If the membership manager has reason to believe that the hs sent a leave event
|
|
89
|
+
* and as a consequence the current user is perceived as left for other session participants.
|
|
90
|
+
*/
|
|
91
|
+
get delayId(): string | undefined;
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Start sending all necessary events to make this user participate in the RTC session.
|
|
95
|
+
* @param fociPreferred the list of preferred foci to use in the joined RTC membership event.
|
|
96
|
+
* If multiSfuFocus is set, this is only needed if this client wants to publish to multiple transports simultaneously.
|
|
97
|
+
* @param multiSfuFocus the active focus to use in the joined RTC membership event. Setting this implies the
|
|
98
|
+
* membership manager will operate in a multi-SFU connection mode. If `undefined`, an `oldest_membership`
|
|
99
|
+
* transport selection will be used instead.
|
|
100
|
+
* @throws can throw if it exceeds a configured maximum retry.
|
|
101
|
+
*/
|
|
102
|
+
join(fociPreferred: Transport[], multiSfuFocus?: Transport, onError?: (error: unknown) => void): void;
|
|
103
|
+
/**
|
|
104
|
+
* Send all necessary events to make this user leave the RTC session.
|
|
105
|
+
* @param timeout the maximum duration in ms until the promise is forced to resolve.
|
|
106
|
+
* @returns It resolves with true in case the leave was sent successfully.
|
|
107
|
+
* It resolves with false in case we hit the timeout before sending successfully.
|
|
108
|
+
*/
|
|
109
|
+
leave(timeout?: number): Promise<boolean>;
|
|
110
|
+
/**
|
|
111
|
+
* Call this if the MatrixRTC session members have changed.
|
|
112
|
+
*/
|
|
113
|
+
onRTCSessionMemberUpdate(memberships: CallMembership[]): Promise<void>;
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Update the intent of a membership on the call (e.g. user is now providing a video feed)
|
|
117
|
+
* @param callIntent The new intent to set.
|
|
118
|
+
*/
|
|
119
|
+
updateCallIntent(callIntent: RTCCallIntent): Promise<void>;
|
|
120
|
+
}
|
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
/*
|
|
2
|
-
Copyright 2025 New Vector Ltd
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
import { type Transport } from "./types.ts";
|
|
18
|
-
|
|
19
|
-
export interface LivekitTransportConfig extends Transport {
|
|
20
|
-
type: "livekit";
|
|
21
|
-
livekit_service_url: string;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export const isLivekitTransportConfig = (object: any): object is LivekitTransportConfig =>
|
|
25
|
-
object.type === "livekit" && "livekit_service_url" in object;
|
|
26
|
-
|
|
27
|
-
export interface LivekitTransport extends LivekitTransportConfig {
|
|
28
|
-
livekit_alias: string;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export const isLivekitTransport = (object: any): object is LivekitTransport =>
|
|
32
|
-
isLivekitTransportConfig(object) && "livekit_alias" in object;
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* @deprecated, this is just needed for the old focus active / focus fields of a call membership.
|
|
36
|
-
* Not needed for new implementations.
|
|
37
|
-
*/
|
|
38
|
-
export interface LivekitFocusSelection extends Transport {
|
|
39
|
-
type: "livekit";
|
|
40
|
-
focus_selection: "oldest_membership" | "multi_sfu";
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* @deprecated see LivekitFocusSelection
|
|
44
|
-
*/
|
|
45
|
-
export const isLivekitFocusSelection = (object: any): object is LivekitFocusSelection =>
|
|
46
|
-
object.type === "livekit" && "focus_selection" in object;
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2025 New Vector Ltd
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { type Transport } from "./types.ts";
|
|
18
|
+
|
|
19
|
+
export interface LivekitTransportConfig extends Transport {
|
|
20
|
+
type: "livekit";
|
|
21
|
+
livekit_service_url: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export const isLivekitTransportConfig = (object: any): object is LivekitTransportConfig =>
|
|
25
|
+
object.type === "livekit" && "livekit_service_url" in object;
|
|
26
|
+
|
|
27
|
+
export interface LivekitTransport extends LivekitTransportConfig {
|
|
28
|
+
livekit_alias: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export const isLivekitTransport = (object: any): object is LivekitTransport =>
|
|
32
|
+
isLivekitTransportConfig(object) && "livekit_alias" in object;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @deprecated, this is just needed for the old focus active / focus fields of a call membership.
|
|
36
|
+
* Not needed for new implementations.
|
|
37
|
+
*/
|
|
38
|
+
export interface LivekitFocusSelection extends Transport {
|
|
39
|
+
type: "livekit";
|
|
40
|
+
focus_selection: "oldest_membership" | "multi_sfu";
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* @deprecated see LivekitFocusSelection
|
|
44
|
+
*/
|
|
45
|
+
export const isLivekitFocusSelection = (object: any): object is LivekitFocusSelection =>
|
|
46
|
+
object.type === "livekit" && "focus_selection" in object;
|
package/src/matrixrtc/index.ts
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
/*
|
|
2
|
-
Copyright 2024 The Matrix.org Foundation C.I.C.
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
export * from "./CallMembership.ts";
|
|
18
|
-
export * from "./LivekitTransport.ts";
|
|
19
|
-
export * from "./MatrixRTCSession.ts";
|
|
20
|
-
export * from "./MatrixRTCSessionManager.ts";
|
|
21
|
-
export type * from "./types.ts";
|
|
22
|
-
export { type SessionMembershipData, type RtcMembershipData } from "./membershipData/index.ts";
|
|
23
|
-
export { Status, parseCallNotificationContent, isMyMembership } from "./types.ts";
|
|
24
|
-
export { MembershipManagerEvent } from "./IMembershipManager.ts";
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2024 The Matrix.org Foundation C.I.C.
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
export * from "./CallMembership.ts";
|
|
18
|
+
export * from "./LivekitTransport.ts";
|
|
19
|
+
export * from "./MatrixRTCSession.ts";
|
|
20
|
+
export * from "./MatrixRTCSessionManager.ts";
|
|
21
|
+
export type * from "./types.ts";
|
|
22
|
+
export { type SessionMembershipData, type RtcMembershipData } from "./membershipData/index.ts";
|
|
23
|
+
export { Status, parseCallNotificationContent, isMyMembership } from "./types.ts";
|
|
24
|
+
export { MembershipManagerEvent } from "./IMembershipManager.ts";
|
package/src/matrixrtc/utils.ts
CHANGED
|
@@ -1,71 +1,71 @@
|
|
|
1
|
-
/*
|
|
2
|
-
Copyright 2025-2026 The Matrix.org Foundation C.I.C.
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
import { getEncryptionKeyMapKey, type CallMembershipIdentityParts } from "./EncryptionManager.ts";
|
|
18
|
-
import type { InboundEncryptionSession, EncryptionKeyMapKey, SlotDescription } from "./types.ts";
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Detects when a key for a given index is outdated.
|
|
22
|
-
*/
|
|
23
|
-
export class OutdatedKeyFilter {
|
|
24
|
-
// Map of participantId -> keyIndex -> timestamp
|
|
25
|
-
private tsBuffer: Map<EncryptionKeyMapKey, Map<number, number>> = new Map();
|
|
26
|
-
|
|
27
|
-
public constructor() {}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Check if there is a recent key with the same keyId (index) and then use the creationTS to decide what to
|
|
31
|
-
* do with the key. If the key received is older than the one already in the buffer, it is ignored.
|
|
32
|
-
* @param participantId
|
|
33
|
-
* @param item
|
|
34
|
-
*/
|
|
35
|
-
public isOutdated(membership: CallMembershipIdentityParts, item: InboundEncryptionSession): boolean {
|
|
36
|
-
const mapKey = getEncryptionKeyMapKey(membership);
|
|
37
|
-
if (!this.tsBuffer.has(mapKey)) {
|
|
38
|
-
this.tsBuffer.set(mapKey, new Map<number, number>());
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const latestTimestamp = this.tsBuffer.get(mapKey)?.get(item.keyIndex);
|
|
42
|
-
if (latestTimestamp && latestTimestamp > item.creationTS) {
|
|
43
|
-
// The existing key is more recent, ignore this one
|
|
44
|
-
return true;
|
|
45
|
-
}
|
|
46
|
-
this.tsBuffer.get(mapKey)!.set(item.keyIndex, item.creationTS);
|
|
47
|
-
return false;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Converts a slot ID into it's component application and ID portions.
|
|
53
|
-
* @param slotId e.g. `m.call#call_id`
|
|
54
|
-
* @throws If the format of `slotId` is invalid.
|
|
55
|
-
*/
|
|
56
|
-
export function slotIdToDescription(slotId: string): SlotDescription {
|
|
57
|
-
const [application, id, ...unexpectedAdditionalValues] = slotId.split("#");
|
|
58
|
-
if (unexpectedAdditionalValues.length) {
|
|
59
|
-
throw Error(
|
|
60
|
-
"MatrixRTC Slot IDs *must* only contain two components seperated by one '#'. Additional '#' characters detected.",
|
|
61
|
-
);
|
|
62
|
-
}
|
|
63
|
-
return { application, id };
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Converts a SlotDescription into it's slot ID format.
|
|
68
|
-
*/
|
|
69
|
-
export function computeSlotId(slotDescription: SlotDescription): string {
|
|
70
|
-
return `${slotDescription.application}#${slotDescription.id}`;
|
|
71
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2025-2026 The Matrix.org Foundation C.I.C.
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { getEncryptionKeyMapKey, type CallMembershipIdentityParts } from "./EncryptionManager.ts";
|
|
18
|
+
import type { InboundEncryptionSession, EncryptionKeyMapKey, SlotDescription } from "./types.ts";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Detects when a key for a given index is outdated.
|
|
22
|
+
*/
|
|
23
|
+
export class OutdatedKeyFilter {
|
|
24
|
+
// Map of participantId -> keyIndex -> timestamp
|
|
25
|
+
private tsBuffer: Map<EncryptionKeyMapKey, Map<number, number>> = new Map();
|
|
26
|
+
|
|
27
|
+
public constructor() {}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Check if there is a recent key with the same keyId (index) and then use the creationTS to decide what to
|
|
31
|
+
* do with the key. If the key received is older than the one already in the buffer, it is ignored.
|
|
32
|
+
* @param participantId
|
|
33
|
+
* @param item
|
|
34
|
+
*/
|
|
35
|
+
public isOutdated(membership: CallMembershipIdentityParts, item: InboundEncryptionSession): boolean {
|
|
36
|
+
const mapKey = getEncryptionKeyMapKey(membership);
|
|
37
|
+
if (!this.tsBuffer.has(mapKey)) {
|
|
38
|
+
this.tsBuffer.set(mapKey, new Map<number, number>());
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const latestTimestamp = this.tsBuffer.get(mapKey)?.get(item.keyIndex);
|
|
42
|
+
if (latestTimestamp && latestTimestamp > item.creationTS) {
|
|
43
|
+
// The existing key is more recent, ignore this one
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
this.tsBuffer.get(mapKey)!.set(item.keyIndex, item.creationTS);
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Converts a slot ID into it's component application and ID portions.
|
|
53
|
+
* @param slotId e.g. `m.call#call_id`
|
|
54
|
+
* @throws If the format of `slotId` is invalid.
|
|
55
|
+
*/
|
|
56
|
+
export function slotIdToDescription(slotId: string): SlotDescription {
|
|
57
|
+
const [application, id, ...unexpectedAdditionalValues] = slotId.split("#");
|
|
58
|
+
if (unexpectedAdditionalValues.length) {
|
|
59
|
+
throw Error(
|
|
60
|
+
"MatrixRTC Slot IDs *must* only contain two components seperated by one '#'. Additional '#' characters detected.",
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
return { application, id };
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Converts a SlotDescription into it's slot ID format.
|
|
68
|
+
*/
|
|
69
|
+
export function computeSlotId(slotDescription: SlotDescription): string {
|
|
70
|
+
return `${slotDescription.application}#${slotDescription.id}`;
|
|
71
|
+
}
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
/*
|
|
2
|
-
Copyright 2022 The Matrix.org Foundation C.I.C.
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
export type ToDevicePayload = Record<string, any>;
|
|
18
|
-
|
|
19
|
-
export interface ToDeviceMessage {
|
|
20
|
-
userId: string;
|
|
21
|
-
deviceId: string;
|
|
22
|
-
payload: ToDevicePayload;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export interface ToDeviceBatch {
|
|
26
|
-
eventType: string;
|
|
27
|
-
batch: ToDeviceMessage[];
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
// Only used internally
|
|
31
|
-
export interface ToDeviceBatchWithTxnId extends ToDeviceBatch {
|
|
32
|
-
txnId: string;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// Only used internally
|
|
36
|
-
export interface IndexedToDeviceBatch extends ToDeviceBatchWithTxnId {
|
|
37
|
-
id: number;
|
|
38
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2022 The Matrix.org Foundation C.I.C.
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
export type ToDevicePayload = Record<string, any>;
|
|
18
|
+
|
|
19
|
+
export interface ToDeviceMessage {
|
|
20
|
+
userId: string;
|
|
21
|
+
deviceId: string;
|
|
22
|
+
payload: ToDevicePayload;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface ToDeviceBatch {
|
|
26
|
+
eventType: string;
|
|
27
|
+
batch: ToDeviceMessage[];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Only used internally
|
|
31
|
+
export interface ToDeviceBatchWithTxnId extends ToDeviceBatch {
|
|
32
|
+
txnId: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Only used internally
|
|
36
|
+
export interface IndexedToDeviceBatch extends ToDeviceBatchWithTxnId {
|
|
37
|
+
id: number;
|
|
38
|
+
}
|