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
package/lib/filter.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
1
2
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4
3
|
/*
|
|
5
4
|
Copyright 2015 - 2021 Matrix.org Foundation C.I.C.
|
|
6
5
|
|
|
@@ -20,14 +19,14 @@ limitations under the License.
|
|
|
20
19
|
import { UNREAD_THREAD_NOTIFICATIONS } from "./@types/sync.js";
|
|
21
20
|
import { FilterComponent } from "./filter-component.js";
|
|
22
21
|
import { NamespacedValue } from "./NamespacedValue.js";
|
|
23
|
-
|
|
22
|
+
const profileFieldsFilterName = new NamespacedValue("profile_fields", "org.matrix.msc4429.profile_fields");
|
|
24
23
|
|
|
25
24
|
/**
|
|
26
25
|
*/
|
|
27
26
|
function setProp(obj, keyNesting, val) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
for (
|
|
27
|
+
const nestedKeys = keyNesting.split(".");
|
|
28
|
+
let currentObj = obj;
|
|
29
|
+
for (let i = 0; i < nestedKeys.length - 1; i++) {
|
|
31
30
|
if (!currentObj[nestedKeys[i]]) {
|
|
32
31
|
currentObj[nestedKeys[i]] = {};
|
|
33
32
|
}
|
|
@@ -49,7 +48,7 @@ export class Filter {
|
|
|
49
48
|
* Create a filter from existing data.
|
|
50
49
|
*/
|
|
51
50
|
static fromJson(userId, filterId, jsonObj) {
|
|
52
|
-
|
|
51
|
+
const filter = new Filter(userId, filterId);
|
|
53
52
|
filter.setDefinition(jsonObj);
|
|
54
53
|
return filter;
|
|
55
54
|
}
|
|
@@ -59,11 +58,11 @@ export class Filter {
|
|
|
59
58
|
* @param filterId - The filter ID if known.
|
|
60
59
|
*/
|
|
61
60
|
constructor(userId, filterId) {
|
|
62
|
-
this.userId = userId;
|
|
63
|
-
this.filterId = filterId;
|
|
64
61
|
_defineProperty(this, "definition", {});
|
|
65
62
|
_defineProperty(this, "roomFilter", void 0);
|
|
66
63
|
_defineProperty(this, "roomTimelineFilter", void 0);
|
|
64
|
+
this.userId = userId;
|
|
65
|
+
this.filterId = filterId;
|
|
67
66
|
}
|
|
68
67
|
|
|
69
68
|
/**
|
|
@@ -122,10 +121,10 @@ export class Filter {
|
|
|
122
121
|
// "event_fields": ["type", "content", "sender"]
|
|
123
122
|
// }
|
|
124
123
|
|
|
125
|
-
|
|
124
|
+
const roomFilterJson = definition.room;
|
|
126
125
|
|
|
127
126
|
// consider the top level rooms/not_rooms filter
|
|
128
|
-
|
|
127
|
+
const roomFilterFields = {};
|
|
129
128
|
if (roomFilterJson) {
|
|
130
129
|
if (roomFilterJson.rooms) {
|
|
131
130
|
roomFilterFields.rooms = roomFilterJson.rooms;
|
|
@@ -135,7 +134,7 @@ export class Filter {
|
|
|
135
134
|
}
|
|
136
135
|
}
|
|
137
136
|
this.roomFilter = new FilterComponent(roomFilterFields, this.userId);
|
|
138
|
-
this.roomTimelineFilter = new FilterComponent(
|
|
137
|
+
this.roomTimelineFilter = new FilterComponent(roomFilterJson?.timeline || {}, this.userId);
|
|
139
138
|
|
|
140
139
|
// don't bother porting this from synapse yet:
|
|
141
140
|
// this._room_state_filter =
|
|
@@ -186,10 +185,9 @@ export class Filter {
|
|
|
186
185
|
* Enable threads unread notification
|
|
187
186
|
*/
|
|
188
187
|
setUnreadThreadNotifications(enabled) {
|
|
189
|
-
var _this$definition, _this$definition2;
|
|
190
188
|
this.definition = _objectSpread(_objectSpread({}, this.definition), {}, {
|
|
191
|
-
room: _objectSpread(_objectSpread({},
|
|
192
|
-
timeline: _objectSpread(_objectSpread({},
|
|
189
|
+
room: _objectSpread(_objectSpread({}, this.definition?.room), {}, {
|
|
190
|
+
timeline: _objectSpread(_objectSpread({}, this.definition?.room?.timeline), {}, {
|
|
193
191
|
[UNREAD_THREAD_NOTIFICATIONS.name]: enabled
|
|
194
192
|
})
|
|
195
193
|
})
|
|
@@ -215,8 +213,7 @@ export class Filter {
|
|
|
215
213
|
* @experimental
|
|
216
214
|
*/
|
|
217
215
|
setUnstableMSC4429SyncUserProfiles(ids, stable) {
|
|
218
|
-
|
|
219
|
-
var field = stable ? profileFieldsFilterName.name : (_profileFieldsFilterN = profileFieldsFilterName.unstable) !== null && _profileFieldsFilterN !== void 0 ? _profileFieldsFilterN : profileFieldsFilterName.name;
|
|
216
|
+
const field = stable ? profileFieldsFilterName.name : profileFieldsFilterName.unstable ?? profileFieldsFilterName.name;
|
|
220
217
|
this.definition[field] = {
|
|
221
218
|
ids
|
|
222
219
|
};
|
package/lib/filter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.js","names":["UNREAD_THREAD_NOTIFICATIONS","FilterComponent","NamespacedValue","profileFieldsFilterName","setProp","obj","keyNesting","val","nestedKeys","split","currentObj","i","length","Filter","fromJson","userId","filterId","jsonObj","filter","setDefinition","constructor","_defineProperty","getFilterId","getDefinition","definition","roomFilterJson","room","roomFilterFields","rooms","not_rooms","roomFilter","roomTimelineFilter","timeline","getRoomTimelineFilterComponent","filterRoomTimeline","events","setTimelineLimit","limit","setUnreadThreadNotifications","enabled","_this$definition","_this$definition2","_objectSpread","name","setLazyLoadMembers","setIncludeLeaveRooms","includeLeave","setUnstableMSC4429SyncUserProfiles","ids","stable","_profileFieldsFilterN","field","unstable","lazy_load_members"],"sources":["../src/filter.ts"],"sourcesContent":["/*\nCopyright 2015 - 2021 Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { type EventType, type RelationType } from \"./@types/event.ts\";\nimport { UNREAD_THREAD_NOTIFICATIONS } from \"./@types/sync.ts\";\nimport { FilterComponent, type IFilterComponent } from \"./filter-component.ts\";\nimport { type MatrixEvent } from \"./models/event.ts\";\nimport { NamespacedValue } from \"./NamespacedValue.ts\";\n\nconst profileFieldsFilterName = new NamespacedValue(\"profile_fields\", \"org.matrix.msc4429.profile_fields\");\n\n/**\n */\nfunction setProp(obj: Record<string, any>, keyNesting: string, val: any): void {\n const nestedKeys = keyNesting.split(\".\") as [keyof typeof obj];\n let currentObj = obj;\n for (let i = 0; i < nestedKeys.length - 1; i++) {\n if (!currentObj[nestedKeys[i]]) {\n currentObj[nestedKeys[i]] = {};\n }\n currentObj = currentObj[nestedKeys[i]];\n }\n currentObj[nestedKeys[nestedKeys.length - 1]] = val;\n}\n\n/* eslint-disable camelcase */\nexport interface IFilterDefinition {\n \"event_fields\"?: string[];\n \"event_format\"?: \"client\" | \"federation\";\n \"presence\"?: IFilterComponent;\n \"account_data\"?: IFilterComponent;\n \"room\"?: IRoomFilter;\n \"profile_fields\"?: ProfileFieldsFilter;\n \"org.matrix.msc4429.profile_fields\"?: ProfileFieldsFilter;\n}\n\nexport interface IRoomEventFilter extends IFilterComponent {\n \"lazy_load_members\"?: boolean;\n \"include_redundant_members\"?: boolean;\n \"types\"?: Array<EventType | string>;\n \"related_by_senders\"?: Array<RelationType | string>;\n \"related_by_rel_types\"?: string[];\n \"unread_thread_notifications\"?: boolean;\n \"org.matrix.msc3773.unread_thread_notifications\"?: boolean;\n\n // Unstable values\n \"io.element.relation_senders\"?: Array<RelationType | string>;\n \"io.element.relation_types\"?: string[];\n}\n\ninterface IStateFilter extends IRoomEventFilter {}\n\ninterface IRoomFilter {\n not_rooms?: string[];\n rooms?: string[];\n ephemeral?: IRoomEventFilter;\n include_leave?: boolean;\n state?: IStateFilter;\n timeline?: IRoomEventFilter;\n account_data?: IRoomEventFilter;\n}\n\n/**\n * Filter section used for requesting a set of extended profile fields that will be sent down the sync stream.\n */\ninterface ProfileFieldsFilter {\n ids: string[];\n}\n\n/* eslint-enable camelcase */\n\nexport class Filter {\n public static LAZY_LOADING_MESSAGES_FILTER = {\n lazy_load_members: true,\n };\n\n /**\n * Create a filter from existing data.\n */\n public static fromJson(userId: string | undefined | null, filterId: string, jsonObj: IFilterDefinition): Filter {\n const filter = new Filter(userId, filterId);\n filter.setDefinition(jsonObj);\n return filter;\n }\n\n private definition: IFilterDefinition = {};\n private roomFilter?: FilterComponent;\n private roomTimelineFilter?: FilterComponent;\n\n /**\n * Construct a new Filter.\n * @param userId - The user ID for this filter.\n * @param filterId - The filter ID if known.\n */\n public constructor(\n public readonly userId: string | undefined | null,\n public filterId?: string,\n ) {}\n\n /**\n * Get the ID of this filter on your homeserver (if known)\n * @returns The filter ID\n */\n public getFilterId(): string | undefined {\n return this.filterId;\n }\n\n /**\n * Get the JSON body of the filter.\n * @returns The filter definition\n */\n public getDefinition(): IFilterDefinition {\n return this.definition;\n }\n\n /**\n * Set the JSON body of the filter\n * @param definition - The filter definition\n */\n public setDefinition(definition: IFilterDefinition): void {\n this.definition = definition;\n\n // This is all ported from synapse's FilterCollection()\n\n // definitions look something like:\n // {\n // \"room\": {\n // \"rooms\": [\"!abcde:example.com\"],\n // \"not_rooms\": [\"!123456:example.com\"],\n // \"state\": {\n // \"types\": [\"m.room.*\"],\n // \"not_rooms\": [\"!726s6s6q:example.com\"],\n // \"lazy_load_members\": true,\n // },\n // \"timeline\": {\n // \"limit\": 10,\n // \"types\": [\"m.room.message\"],\n // \"not_rooms\": [\"!726s6s6q:example.com\"],\n // \"not_senders\": [\"@spam:example.com\"]\n // \"contains_url\": true\n // },\n // \"ephemeral\": {\n // \"types\": [\"m.receipt\", \"m.typing\"],\n // \"not_rooms\": [\"!726s6s6q:example.com\"],\n // \"not_senders\": [\"@spam:example.com\"]\n // }\n // },\n // \"presence\": {\n // \"types\": [\"m.presence\"],\n // \"not_senders\": [\"@alice:example.com\"]\n // },\n // \"event_format\": \"client\",\n // \"event_fields\": [\"type\", \"content\", \"sender\"]\n // }\n\n const roomFilterJson = definition.room;\n\n // consider the top level rooms/not_rooms filter\n const roomFilterFields: IRoomFilter = {};\n if (roomFilterJson) {\n if (roomFilterJson.rooms) {\n roomFilterFields.rooms = roomFilterJson.rooms;\n }\n if (roomFilterJson.rooms) {\n roomFilterFields.not_rooms = roomFilterJson.not_rooms;\n }\n }\n\n this.roomFilter = new FilterComponent(roomFilterFields, this.userId);\n this.roomTimelineFilter = new FilterComponent(roomFilterJson?.timeline || {}, this.userId);\n\n // don't bother porting this from synapse yet:\n // this._room_state_filter =\n // new FilterComponent(roomFilterJson.state || {});\n // this._room_ephemeral_filter =\n // new FilterComponent(roomFilterJson.ephemeral || {});\n // this._room_account_data_filter =\n // new FilterComponent(roomFilterJson.account_data || {});\n // this._presence_filter =\n // new FilterComponent(definition.presence || {});\n // this._account_data_filter =\n // new FilterComponent(definition.account_data || {});\n }\n\n /**\n * Get the room.timeline filter component of the filter\n * @returns room timeline filter component\n */\n public getRoomTimelineFilterComponent(): FilterComponent | undefined {\n return this.roomTimelineFilter;\n }\n\n /**\n * Filter the list of events based on whether they are allowed in a timeline\n * based on this filter\n * @param events - the list of events being filtered\n * @returns the list of events which match the filter\n */\n public filterRoomTimeline(events: MatrixEvent[]): MatrixEvent[] {\n if (this.roomFilter) {\n events = this.roomFilter.filter(events);\n }\n if (this.roomTimelineFilter) {\n events = this.roomTimelineFilter.filter(events);\n }\n return events;\n }\n\n /**\n * Set the max number of events to return for each room's timeline.\n * @param limit - The max number of events to return for each room.\n */\n public setTimelineLimit(limit: number): void {\n setProp(this.definition, \"room.timeline.limit\", limit);\n }\n\n /**\n * Enable threads unread notification\n */\n public setUnreadThreadNotifications(enabled: boolean): void {\n this.definition = {\n ...this.definition,\n room: {\n ...this.definition?.room,\n timeline: {\n ...this.definition?.room?.timeline,\n [UNREAD_THREAD_NOTIFICATIONS.name]: enabled,\n },\n },\n };\n }\n\n public setLazyLoadMembers(enabled: boolean): void {\n setProp(this.definition, \"room.state.lazy_load_members\", enabled);\n }\n\n /**\n * Control whether left rooms should be included in responses.\n * @param includeLeave - True to make rooms the user has left appear\n * in responses.\n */\n public setIncludeLeaveRooms(includeLeave: boolean): void {\n setProp(this.definition, \"room.include_leave\", includeLeave);\n }\n\n /**\n * Set the list of fields to be included in the profile information sent down the sync stream.\n * @param ids The field IDs to sync.\n * @param stable Whether to use the stable or unstable versions of this filter.\n * @experimental\n */\n public setUnstableMSC4429SyncUserProfiles(ids: string[], stable: boolean): void {\n const field = stable\n ? profileFieldsFilterName.name\n : (profileFieldsFilterName.unstable ?? profileFieldsFilterName.name);\n this.definition[field] = { ids };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"filter.js","names":[],"sources":["../src/filter.ts"],"sourcesContent":["/*\nCopyright 2015 - 2021 Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { type EventType, type RelationType } from \"./@types/event.ts\";\nimport { UNREAD_THREAD_NOTIFICATIONS } from \"./@types/sync.ts\";\nimport { FilterComponent, type IFilterComponent } from \"./filter-component.ts\";\nimport { type MatrixEvent } from \"./models/event.ts\";\nimport { NamespacedValue } from \"./NamespacedValue.ts\";\n\nconst profileFieldsFilterName = new NamespacedValue(\"profile_fields\", \"org.matrix.msc4429.profile_fields\");\n\n/**\n */\nfunction setProp(obj: Record<string, any>, keyNesting: string, val: any): void {\n const nestedKeys = keyNesting.split(\".\") as [keyof typeof obj];\n let currentObj = obj;\n for (let i = 0; i < nestedKeys.length - 1; i++) {\n if (!currentObj[nestedKeys[i]]) {\n currentObj[nestedKeys[i]] = {};\n }\n currentObj = currentObj[nestedKeys[i]];\n }\n currentObj[nestedKeys[nestedKeys.length - 1]] = val;\n}\n\n/* eslint-disable camelcase */\nexport interface IFilterDefinition {\n \"event_fields\"?: string[];\n \"event_format\"?: \"client\" | \"federation\";\n \"presence\"?: IFilterComponent;\n \"account_data\"?: IFilterComponent;\n \"room\"?: IRoomFilter;\n \"profile_fields\"?: ProfileFieldsFilter;\n \"org.matrix.msc4429.profile_fields\"?: ProfileFieldsFilter;\n}\n\nexport interface IRoomEventFilter extends IFilterComponent {\n \"lazy_load_members\"?: boolean;\n \"include_redundant_members\"?: boolean;\n \"types\"?: Array<EventType | string>;\n \"related_by_senders\"?: Array<RelationType | string>;\n \"related_by_rel_types\"?: string[];\n \"unread_thread_notifications\"?: boolean;\n \"org.matrix.msc3773.unread_thread_notifications\"?: boolean;\n\n // Unstable values\n \"io.element.relation_senders\"?: Array<RelationType | string>;\n \"io.element.relation_types\"?: string[];\n}\n\ninterface IStateFilter extends IRoomEventFilter {}\n\ninterface IRoomFilter {\n not_rooms?: string[];\n rooms?: string[];\n ephemeral?: IRoomEventFilter;\n include_leave?: boolean;\n state?: IStateFilter;\n timeline?: IRoomEventFilter;\n account_data?: IRoomEventFilter;\n}\n\n/**\n * Filter section used for requesting a set of extended profile fields that will be sent down the sync stream.\n */\ninterface ProfileFieldsFilter {\n ids: string[];\n}\n\n/* eslint-enable camelcase */\n\nexport class Filter {\n public static LAZY_LOADING_MESSAGES_FILTER = {\n lazy_load_members: true,\n };\n\n /**\n * Create a filter from existing data.\n */\n public static fromJson(userId: string | undefined | null, filterId: string, jsonObj: IFilterDefinition): Filter {\n const filter = new Filter(userId, filterId);\n filter.setDefinition(jsonObj);\n return filter;\n }\n\n private definition: IFilterDefinition = {};\n private roomFilter?: FilterComponent;\n private roomTimelineFilter?: FilterComponent;\n\n /**\n * Construct a new Filter.\n * @param userId - The user ID for this filter.\n * @param filterId - The filter ID if known.\n */\n public constructor(\n public readonly userId: string | undefined | null,\n public filterId?: string,\n ) {}\n\n /**\n * Get the ID of this filter on your homeserver (if known)\n * @returns The filter ID\n */\n public getFilterId(): string | undefined {\n return this.filterId;\n }\n\n /**\n * Get the JSON body of the filter.\n * @returns The filter definition\n */\n public getDefinition(): IFilterDefinition {\n return this.definition;\n }\n\n /**\n * Set the JSON body of the filter\n * @param definition - The filter definition\n */\n public setDefinition(definition: IFilterDefinition): void {\n this.definition = definition;\n\n // This is all ported from synapse's FilterCollection()\n\n // definitions look something like:\n // {\n // \"room\": {\n // \"rooms\": [\"!abcde:example.com\"],\n // \"not_rooms\": [\"!123456:example.com\"],\n // \"state\": {\n // \"types\": [\"m.room.*\"],\n // \"not_rooms\": [\"!726s6s6q:example.com\"],\n // \"lazy_load_members\": true,\n // },\n // \"timeline\": {\n // \"limit\": 10,\n // \"types\": [\"m.room.message\"],\n // \"not_rooms\": [\"!726s6s6q:example.com\"],\n // \"not_senders\": [\"@spam:example.com\"]\n // \"contains_url\": true\n // },\n // \"ephemeral\": {\n // \"types\": [\"m.receipt\", \"m.typing\"],\n // \"not_rooms\": [\"!726s6s6q:example.com\"],\n // \"not_senders\": [\"@spam:example.com\"]\n // }\n // },\n // \"presence\": {\n // \"types\": [\"m.presence\"],\n // \"not_senders\": [\"@alice:example.com\"]\n // },\n // \"event_format\": \"client\",\n // \"event_fields\": [\"type\", \"content\", \"sender\"]\n // }\n\n const roomFilterJson = definition.room;\n\n // consider the top level rooms/not_rooms filter\n const roomFilterFields: IRoomFilter = {};\n if (roomFilterJson) {\n if (roomFilterJson.rooms) {\n roomFilterFields.rooms = roomFilterJson.rooms;\n }\n if (roomFilterJson.rooms) {\n roomFilterFields.not_rooms = roomFilterJson.not_rooms;\n }\n }\n\n this.roomFilter = new FilterComponent(roomFilterFields, this.userId);\n this.roomTimelineFilter = new FilterComponent(roomFilterJson?.timeline || {}, this.userId);\n\n // don't bother porting this from synapse yet:\n // this._room_state_filter =\n // new FilterComponent(roomFilterJson.state || {});\n // this._room_ephemeral_filter =\n // new FilterComponent(roomFilterJson.ephemeral || {});\n // this._room_account_data_filter =\n // new FilterComponent(roomFilterJson.account_data || {});\n // this._presence_filter =\n // new FilterComponent(definition.presence || {});\n // this._account_data_filter =\n // new FilterComponent(definition.account_data || {});\n }\n\n /**\n * Get the room.timeline filter component of the filter\n * @returns room timeline filter component\n */\n public getRoomTimelineFilterComponent(): FilterComponent | undefined {\n return this.roomTimelineFilter;\n }\n\n /**\n * Filter the list of events based on whether they are allowed in a timeline\n * based on this filter\n * @param events - the list of events being filtered\n * @returns the list of events which match the filter\n */\n public filterRoomTimeline(events: MatrixEvent[]): MatrixEvent[] {\n if (this.roomFilter) {\n events = this.roomFilter.filter(events);\n }\n if (this.roomTimelineFilter) {\n events = this.roomTimelineFilter.filter(events);\n }\n return events;\n }\n\n /**\n * Set the max number of events to return for each room's timeline.\n * @param limit - The max number of events to return for each room.\n */\n public setTimelineLimit(limit: number): void {\n setProp(this.definition, \"room.timeline.limit\", limit);\n }\n\n /**\n * Enable threads unread notification\n */\n public setUnreadThreadNotifications(enabled: boolean): void {\n this.definition = {\n ...this.definition,\n room: {\n ...this.definition?.room,\n timeline: {\n ...this.definition?.room?.timeline,\n [UNREAD_THREAD_NOTIFICATIONS.name]: enabled,\n },\n },\n };\n }\n\n public setLazyLoadMembers(enabled: boolean): void {\n setProp(this.definition, \"room.state.lazy_load_members\", enabled);\n }\n\n /**\n * Control whether left rooms should be included in responses.\n * @param includeLeave - True to make rooms the user has left appear\n * in responses.\n */\n public setIncludeLeaveRooms(includeLeave: boolean): void {\n setProp(this.definition, \"room.include_leave\", includeLeave);\n }\n\n /**\n * Set the list of fields to be included in the profile information sent down the sync stream.\n * @param ids The field IDs to sync.\n * @param stable Whether to use the stable or unstable versions of this filter.\n * @experimental\n */\n public setUnstableMSC4429SyncUserProfiles(ids: string[], stable: boolean): void {\n const field = stable\n ? profileFieldsFilterName.name\n : (profileFieldsFilterName.unstable ?? profileFieldsFilterName.name);\n this.definition[field] = { ids };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/lib/http-api/errors.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
2
2
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5
3
|
/*
|
|
6
4
|
Copyright 2022 - 2024 The Matrix.org Foundation C.I.C.
|
|
7
5
|
|
|
@@ -52,17 +50,16 @@ export class HTTPError extends Error {
|
|
|
52
50
|
* @see {@link safeGetRetryAfterMs} for a version of this check that doesn't throw.
|
|
53
51
|
*/
|
|
54
52
|
getRetryAfterMs() {
|
|
55
|
-
|
|
56
|
-
var retryAfter = (_this$httpHeaders = this.httpHeaders) === null || _this$httpHeaders === void 0 ? void 0 : _this$httpHeaders.get("Retry-After");
|
|
53
|
+
const retryAfter = this.httpHeaders?.get("Retry-After");
|
|
57
54
|
if (retryAfter != null) {
|
|
58
55
|
if (/^\d+$/.test(retryAfter)) {
|
|
59
|
-
|
|
56
|
+
const ms = Number.parseInt(retryAfter) * 1000;
|
|
60
57
|
if (!Number.isFinite(ms)) {
|
|
61
58
|
throw new Error("Retry-After header integer value is too large");
|
|
62
59
|
}
|
|
63
60
|
return ms;
|
|
64
61
|
}
|
|
65
|
-
|
|
62
|
+
const date = new Date(retryAfter);
|
|
66
63
|
if (date.toUTCString() !== retryAfter) {
|
|
67
64
|
throw new Error("Retry-After header value is not a valid HTTP-date or non-negative decimal integer");
|
|
68
65
|
}
|
|
@@ -79,28 +76,23 @@ export class MatrixError extends HTTPError {
|
|
|
79
76
|
* @param httpStatus - The numeric HTTP status code given
|
|
80
77
|
* @param httpHeaders - The HTTP response headers given
|
|
81
78
|
*/
|
|
82
|
-
constructor() {
|
|
83
|
-
|
|
84
|
-
var httpStatus = arguments.length > 1 ? arguments[1] : undefined;
|
|
85
|
-
var url = arguments.length > 2 ? arguments[2] : undefined;
|
|
86
|
-
var event = arguments.length > 3 ? arguments[3] : undefined;
|
|
87
|
-
var httpHeaders = arguments.length > 4 ? arguments[4] : undefined;
|
|
88
|
-
var message = errorJson.error || "Unknown message";
|
|
79
|
+
constructor(errorJson = {}, httpStatus, url, event, httpHeaders) {
|
|
80
|
+
let message = errorJson.error || "Unknown message";
|
|
89
81
|
if (httpStatus) {
|
|
90
|
-
message =
|
|
82
|
+
message = `[${httpStatus}] ${message}`;
|
|
91
83
|
}
|
|
92
84
|
if (url) {
|
|
93
|
-
message =
|
|
85
|
+
message = `${message} (${url})`;
|
|
94
86
|
}
|
|
95
|
-
super(
|
|
96
|
-
this.url = url;
|
|
97
|
-
this.event = event;
|
|
87
|
+
super(`MatrixError: ${message}`, httpStatus, httpHeaders);
|
|
98
88
|
// The Matrix 'errcode' value, e.g. "M_FORBIDDEN".
|
|
99
89
|
_defineProperty(this, "errcode", void 0);
|
|
100
90
|
// The Matrix 'error' value.
|
|
101
91
|
_defineProperty(this, "error", void 0);
|
|
102
92
|
// The raw Matrix error JSON used to construct this object.
|
|
103
93
|
_defineProperty(this, "data", void 0);
|
|
94
|
+
this.url = url;
|
|
95
|
+
this.event = event;
|
|
104
96
|
this.errcode = errorJson.errcode;
|
|
105
97
|
this.error = errorJson.error;
|
|
106
98
|
this.name = errorJson.errcode || "Unknown error code";
|
|
@@ -110,7 +102,7 @@ export class MatrixError extends HTTPError {
|
|
|
110
102
|
return this.errcode === "M_LIMIT_EXCEEDED" || (this.errcode === "M_UNKNOWN" || this.errcode === undefined) && super.isRateLimitError();
|
|
111
103
|
}
|
|
112
104
|
getRetryAfterMs() {
|
|
113
|
-
|
|
105
|
+
const headerValue = super.getRetryAfterMs();
|
|
114
106
|
if (headerValue !== null) {
|
|
115
107
|
return headerValue;
|
|
116
108
|
}
|
|
@@ -129,23 +121,19 @@ export class MatrixError extends HTTPError {
|
|
|
129
121
|
* for use by Widget API error responses.
|
|
130
122
|
*/
|
|
131
123
|
asWidgetApiErrorData() {
|
|
132
|
-
|
|
133
|
-
var headers = {};
|
|
124
|
+
const headers = {};
|
|
134
125
|
if (this.httpHeaders) {
|
|
135
|
-
for (
|
|
136
|
-
var _ref2 = _slicedToArray(_ref3, 2);
|
|
137
|
-
var name = _ref2[0];
|
|
138
|
-
var value = _ref2[1];
|
|
126
|
+
for (const [name, value] of this.httpHeaders) {
|
|
139
127
|
headers[name] = value;
|
|
140
128
|
}
|
|
141
129
|
}
|
|
142
130
|
return {
|
|
143
|
-
http_status:
|
|
131
|
+
http_status: this.httpStatus ?? 400,
|
|
144
132
|
http_headers: headers,
|
|
145
|
-
url:
|
|
133
|
+
url: this.url ?? "",
|
|
146
134
|
response: _objectSpread({
|
|
147
|
-
errcode:
|
|
148
|
-
error:
|
|
135
|
+
errcode: this.errcode ?? "M_UNKNOWN",
|
|
136
|
+
error: this.data.error ?? "Unknown message"
|
|
149
137
|
}, this.data)
|
|
150
138
|
};
|
|
151
139
|
}
|
|
@@ -169,9 +157,8 @@ export function safeGetRetryAfterMs(error, defaultMs) {
|
|
|
169
157
|
return defaultMs;
|
|
170
158
|
}
|
|
171
159
|
try {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
} catch (_unused) {
|
|
160
|
+
return error.getRetryAfterMs() ?? defaultMs;
|
|
161
|
+
} catch {
|
|
175
162
|
return defaultMs;
|
|
176
163
|
}
|
|
177
164
|
}
|
|
@@ -184,7 +171,7 @@ export function safeGetRetryAfterMs(error, defaultMs) {
|
|
|
184
171
|
*/
|
|
185
172
|
export class ConnectionError extends Error {
|
|
186
173
|
constructor(message, cause) {
|
|
187
|
-
super(message + (cause ?
|
|
174
|
+
super(message + (cause ? `: ${cause.message}` : ""));
|
|
188
175
|
}
|
|
189
176
|
get name() {
|
|
190
177
|
return "ConnectionError";
|
|
@@ -198,8 +185,7 @@ export class ConnectionError extends Error {
|
|
|
198
185
|
*/
|
|
199
186
|
export class TokenRefreshError extends Error {
|
|
200
187
|
constructor(cause) {
|
|
201
|
-
|
|
202
|
-
super((_cause$message = cause === null || cause === void 0 ? void 0 : cause.message) !== null && _cause$message !== void 0 ? _cause$message : "");
|
|
188
|
+
super(cause?.message ?? "");
|
|
203
189
|
}
|
|
204
190
|
get name() {
|
|
205
191
|
return "TokenRefreshError";
|
|
@@ -212,14 +198,13 @@ export class TokenRefreshError extends Error {
|
|
|
212
198
|
*/
|
|
213
199
|
export class TokenRefreshLogoutError extends Error {
|
|
214
200
|
constructor(cause) {
|
|
215
|
-
|
|
216
|
-
super((_cause$message2 = cause === null || cause === void 0 ? void 0 : cause.message) !== null && _cause$message2 !== void 0 ? _cause$message2 : "");
|
|
201
|
+
super(cause?.message ?? "");
|
|
217
202
|
}
|
|
218
203
|
get name() {
|
|
219
204
|
return "TokenRefreshLogoutError";
|
|
220
205
|
}
|
|
221
206
|
}
|
|
222
|
-
export
|
|
207
|
+
export const MatrixSafetyErrorCode = new NamespacedValue(null, "ORG.MATRIX.MSC4387_SAFETY");
|
|
223
208
|
|
|
224
209
|
/***
|
|
225
210
|
* This error is thrown when the homeserver refuses to handle an action due to a
|
|
@@ -227,8 +212,8 @@ export var MatrixSafetyErrorCode = new NamespacedValue(null, "ORG.MATRIX.MSC4387
|
|
|
227
212
|
* @see https://github.com/matrix-org/matrix-spec-proposals/pull/4387
|
|
228
213
|
*/
|
|
229
214
|
export class MatrixSafetyError extends MatrixError {
|
|
230
|
-
constructor() {
|
|
231
|
-
super(...
|
|
215
|
+
constructor(...props) {
|
|
216
|
+
super(...props);
|
|
232
217
|
/**
|
|
233
218
|
* The kinds of harms detected by the server.
|
|
234
219
|
* @see https://github.com/matrix-org/matrix-spec-proposals/pull/4387 for a list of spec defined harms.
|
|
@@ -238,9 +223,9 @@ export class MatrixSafetyError extends MatrixError {
|
|
|
238
223
|
* The date at which a request can be reattempted.
|
|
239
224
|
*/
|
|
240
225
|
_defineProperty(this, "expiry", void 0);
|
|
241
|
-
|
|
226
|
+
const body = props[0];
|
|
242
227
|
this.harms = new Set(body && "harms" in body && Array.isArray(body.harms) ? body.harms : []);
|
|
243
|
-
this.message =
|
|
228
|
+
this.message = `${super.message} (${[...this.harms].join(", ")})`;
|
|
244
229
|
if (body && "expiry" in body && typeof body.expiry === "number") {
|
|
245
230
|
this.expiry = new Date(body.expiry);
|
|
246
231
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","names":["NamespacedValue","HTTPError","Error","constructor","msg","httpStatus","httpHeaders","isRateLimitError","getRetryAfterMs","_this$httpHeaders","retryAfter","get","test","ms","Number","parseInt","isFinite","date","Date","toUTCString","getTime","now","MatrixError","errorJson","arguments","length","undefined","url","event","message","error","concat","_defineProperty","errcode","name","data","headerValue","isInteger","retry_after_ms","asWidgetApiErrorData","_this$httpStatus","_this$url","_this$errcode","_this$data$error","headers","_ref3","_ref2","_slicedToArray","value","http_status","http_headers","response","_objectSpread","fromWidgetApiErrorData","Headers","safeGetRetryAfterMs","defaultMs","_error$getRetryAfterM","_unused","ConnectionError","cause","TokenRefreshError","_cause$message","TokenRefreshLogoutError","_cause$message2","MatrixSafetyErrorCode","MatrixSafetyError","body","harms","Set","Array","isArray","join","expiry"],"sources":["../../src/http-api/errors.ts"],"sourcesContent":["/*\nCopyright 2022 - 2024 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { type IMatrixApiError as IWidgetMatrixError } from \"matrix-widget-api\";\n\nimport { type IUsageLimit } from \"../@types/partials.ts\";\nimport { type MatrixEvent } from \"../models/event.ts\";\nimport { NamespacedValue } from \"../NamespacedValue.ts\";\n\ninterface IErrorJson extends Partial<IUsageLimit> {\n [key: string]: any; // extensible\n errcode?: string;\n error?: string;\n}\n\n/**\n * Construct a generic HTTP error. This is a JavaScript Error with additional information\n * specific to HTTP responses.\n * @param msg - The error message to include.\n * @param httpStatus - The HTTP response status code.\n * @param httpHeaders - The HTTP response headers.\n */\nexport class HTTPError extends Error {\n public constructor(\n msg: string,\n public readonly httpStatus?: number,\n public readonly httpHeaders?: Headers,\n ) {\n super(msg);\n }\n\n /**\n * Check if this error was due to rate-limiting on the server side (and should therefore be retried after a delay).\n *\n * If this returns `true`, {@link getRetryAfterMs} can be called to retrieve the server-side\n * recommendation for the retry period.\n *\n * @returns Whether this error is due to rate-limiting.\n */\n public isRateLimitError(): boolean {\n return this.httpStatus === 429;\n }\n\n /**\n * @returns The recommended delay in milliseconds to wait before retrying\n * the request that triggered this error, or null if no delay is recommended.\n * @throws Error if the recommended delay is an invalid value.\n * @see {@link safeGetRetryAfterMs} for a version of this check that doesn't throw.\n */\n public getRetryAfterMs(): number | null {\n const retryAfter = this.httpHeaders?.get(\"Retry-After\");\n if (retryAfter != null) {\n if (/^\\d+$/.test(retryAfter)) {\n const ms = Number.parseInt(retryAfter) * 1000;\n if (!Number.isFinite(ms)) {\n throw new Error(\"Retry-After header integer value is too large\");\n }\n return ms;\n }\n const date = new Date(retryAfter);\n if (date.toUTCString() !== retryAfter) {\n throw new Error(\"Retry-After header value is not a valid HTTP-date or non-negative decimal integer\");\n }\n return date.getTime() - Date.now();\n }\n return null;\n }\n}\n\nexport class MatrixError extends HTTPError {\n // The Matrix 'errcode' value, e.g. \"M_FORBIDDEN\".\n public readonly errcode?: string;\n // The Matrix 'error' value.\n public readonly error?: string;\n // The raw Matrix error JSON used to construct this object.\n public data: IErrorJson;\n\n /**\n * Construct a Matrix error. This is a JavaScript Error with additional\n * information specific to the standard Matrix error response.\n * @param errorJson - The Matrix error JSON returned from the homeserver.\n * @param httpStatus - The numeric HTTP status code given\n * @param httpHeaders - The HTTP response headers given\n */\n public constructor(\n errorJson: IErrorJson = {},\n httpStatus?: number,\n public url?: string,\n public event?: MatrixEvent,\n httpHeaders?: Headers,\n ) {\n let message = errorJson.error || \"Unknown message\";\n if (httpStatus) {\n message = `[${httpStatus}] ${message}`;\n }\n if (url) {\n message = `${message} (${url})`;\n }\n super(`MatrixError: ${message}`, httpStatus, httpHeaders);\n this.errcode = errorJson.errcode;\n this.error = errorJson.error;\n this.name = errorJson.errcode || \"Unknown error code\";\n this.data = errorJson;\n }\n\n public isRateLimitError(): boolean {\n return (\n this.errcode === \"M_LIMIT_EXCEEDED\" ||\n ((this.errcode === \"M_UNKNOWN\" || this.errcode === undefined) && super.isRateLimitError())\n );\n }\n\n public getRetryAfterMs(): number | null {\n const headerValue = super.getRetryAfterMs();\n if (headerValue !== null) {\n return headerValue;\n }\n // Note: retry_after_ms is deprecated as of spec version v1.10\n if (this.errcode === \"M_LIMIT_EXCEEDED\" && \"retry_after_ms\" in this.data) {\n if (!Number.isInteger(this.data.retry_after_ms)) {\n throw new Error(\"retry_after_ms is not an integer\");\n }\n return this.data.retry_after_ms;\n }\n return null;\n }\n\n /**\n * @returns this error expressed as a JSON payload\n * for use by Widget API error responses.\n */\n public asWidgetApiErrorData(): IWidgetMatrixError {\n const headers: Record<string, string> = {};\n if (this.httpHeaders) {\n for (const [name, value] of this.httpHeaders) {\n headers[name] = value;\n }\n }\n return {\n http_status: this.httpStatus ?? 400,\n http_headers: headers,\n url: this.url ?? \"\",\n response: {\n errcode: this.errcode ?? \"M_UNKNOWN\",\n error: this.data.error ?? \"Unknown message\",\n ...this.data,\n },\n };\n }\n\n /**\n * @returns a new {@link MatrixError} from a JSON payload\n * received from Widget API error responses.\n */\n public static fromWidgetApiErrorData(data: IWidgetMatrixError): MatrixError {\n return new MatrixError(data.response, data.http_status, data.url, undefined, new Headers(data.http_headers));\n }\n}\n\n/**\n * @returns The recommended delay in milliseconds to wait before retrying the request.\n * @param error - The error to check for a retry delay.\n * @param defaultMs - The delay to use if the error was not due to rate-limiting or if no valid delay is recommended.\n */\nexport function safeGetRetryAfterMs(error: unknown, defaultMs: number): number {\n if (!(error instanceof HTTPError) || !error.isRateLimitError()) {\n return defaultMs;\n }\n try {\n return error.getRetryAfterMs() ?? defaultMs;\n } catch {\n return defaultMs;\n }\n}\n\n/**\n * Construct a ConnectionError. This is a JavaScript Error indicating\n * that a request failed because of some error with the connection, either\n * CORS was not correctly configured on the server, the server didn't response,\n * the request timed out, or the internet connection on the client side went down.\n */\nexport class ConnectionError extends Error {\n public constructor(message: string, cause?: Error) {\n super(message + (cause ? `: ${cause.message}` : \"\"));\n }\n\n public get name(): string {\n return \"ConnectionError\";\n }\n}\n\n/**\n * Construct a TokenRefreshError. This indicates that a request failed due to the token being expired,\n * and attempting to refresh said token also failed but in a way which was not indicative of token invalidation.\n * Assumed to be a temporary failure.\n */\nexport class TokenRefreshError extends Error {\n public constructor(cause?: Error) {\n super(cause?.message ?? \"\");\n }\n\n public get name(): string {\n return \"TokenRefreshError\";\n }\n}\n\n/**\n * Construct a TokenRefreshError. This indicates that a request failed due to the token being expired,\n * and attempting to refresh said token failed in a way indicative of token invalidation.\n */\nexport class TokenRefreshLogoutError extends Error {\n public constructor(cause?: Error) {\n super(cause?.message ?? \"\");\n }\n\n public get name(): string {\n return \"TokenRefreshLogoutError\";\n }\n}\n\nexport const MatrixSafetyErrorCode = new NamespacedValue(null, \"ORG.MATRIX.MSC4387_SAFETY\");\n\n/***\n * This error is thrown when the homeserver refuses to handle an action due to a\n * safety concern.\n * @see https://github.com/matrix-org/matrix-spec-proposals/pull/4387\n */\nexport class MatrixSafetyError extends MatrixError {\n /**\n * The kinds of harms detected by the server.\n * @see https://github.com/matrix-org/matrix-spec-proposals/pull/4387 for a list of spec defined harms.\n */\n public readonly harms: Set<string>;\n /**\n * The date at which a request can be reattempted.\n */\n public readonly expiry?: Date;\n public constructor(...props: ConstructorParameters<typeof MatrixError>) {\n super(...props);\n const body = props[0];\n\n this.harms = new Set(body && \"harms\" in body && Array.isArray(body.harms) ? body.harms : []);\n this.message = `${super.message} (${[...this.harms].join(\", \")})`;\n if (body && \"expiry\" in body && typeof body.expiry === \"number\") {\n this.expiry = new Date(body.expiry);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"errors.js","names":[],"sources":["../../src/http-api/errors.ts"],"sourcesContent":["/*\nCopyright 2022 - 2024 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { type IMatrixApiError as IWidgetMatrixError } from \"matrix-widget-api\";\n\nimport { type IUsageLimit } from \"../@types/partials.ts\";\nimport { type MatrixEvent } from \"../models/event.ts\";\nimport { NamespacedValue } from \"../NamespacedValue.ts\";\n\ninterface IErrorJson extends Partial<IUsageLimit> {\n [key: string]: any; // extensible\n errcode?: string;\n error?: string;\n}\n\n/**\n * Construct a generic HTTP error. This is a JavaScript Error with additional information\n * specific to HTTP responses.\n * @param msg - The error message to include.\n * @param httpStatus - The HTTP response status code.\n * @param httpHeaders - The HTTP response headers.\n */\nexport class HTTPError extends Error {\n public constructor(\n msg: string,\n public readonly httpStatus?: number,\n public readonly httpHeaders?: Headers,\n ) {\n super(msg);\n }\n\n /**\n * Check if this error was due to rate-limiting on the server side (and should therefore be retried after a delay).\n *\n * If this returns `true`, {@link getRetryAfterMs} can be called to retrieve the server-side\n * recommendation for the retry period.\n *\n * @returns Whether this error is due to rate-limiting.\n */\n public isRateLimitError(): boolean {\n return this.httpStatus === 429;\n }\n\n /**\n * @returns The recommended delay in milliseconds to wait before retrying\n * the request that triggered this error, or null if no delay is recommended.\n * @throws Error if the recommended delay is an invalid value.\n * @see {@link safeGetRetryAfterMs} for a version of this check that doesn't throw.\n */\n public getRetryAfterMs(): number | null {\n const retryAfter = this.httpHeaders?.get(\"Retry-After\");\n if (retryAfter != null) {\n if (/^\\d+$/.test(retryAfter)) {\n const ms = Number.parseInt(retryAfter) * 1000;\n if (!Number.isFinite(ms)) {\n throw new Error(\"Retry-After header integer value is too large\");\n }\n return ms;\n }\n const date = new Date(retryAfter);\n if (date.toUTCString() !== retryAfter) {\n throw new Error(\"Retry-After header value is not a valid HTTP-date or non-negative decimal integer\");\n }\n return date.getTime() - Date.now();\n }\n return null;\n }\n}\n\nexport class MatrixError extends HTTPError {\n // The Matrix 'errcode' value, e.g. \"M_FORBIDDEN\".\n public readonly errcode?: string;\n // The Matrix 'error' value.\n public readonly error?: string;\n // The raw Matrix error JSON used to construct this object.\n public data: IErrorJson;\n\n /**\n * Construct a Matrix error. This is a JavaScript Error with additional\n * information specific to the standard Matrix error response.\n * @param errorJson - The Matrix error JSON returned from the homeserver.\n * @param httpStatus - The numeric HTTP status code given\n * @param httpHeaders - The HTTP response headers given\n */\n public constructor(\n errorJson: IErrorJson = {},\n httpStatus?: number,\n public url?: string,\n public event?: MatrixEvent,\n httpHeaders?: Headers,\n ) {\n let message = errorJson.error || \"Unknown message\";\n if (httpStatus) {\n message = `[${httpStatus}] ${message}`;\n }\n if (url) {\n message = `${message} (${url})`;\n }\n super(`MatrixError: ${message}`, httpStatus, httpHeaders);\n this.errcode = errorJson.errcode;\n this.error = errorJson.error;\n this.name = errorJson.errcode || \"Unknown error code\";\n this.data = errorJson;\n }\n\n public isRateLimitError(): boolean {\n return (\n this.errcode === \"M_LIMIT_EXCEEDED\" ||\n ((this.errcode === \"M_UNKNOWN\" || this.errcode === undefined) && super.isRateLimitError())\n );\n }\n\n public getRetryAfterMs(): number | null {\n const headerValue = super.getRetryAfterMs();\n if (headerValue !== null) {\n return headerValue;\n }\n // Note: retry_after_ms is deprecated as of spec version v1.10\n if (this.errcode === \"M_LIMIT_EXCEEDED\" && \"retry_after_ms\" in this.data) {\n if (!Number.isInteger(this.data.retry_after_ms)) {\n throw new Error(\"retry_after_ms is not an integer\");\n }\n return this.data.retry_after_ms;\n }\n return null;\n }\n\n /**\n * @returns this error expressed as a JSON payload\n * for use by Widget API error responses.\n */\n public asWidgetApiErrorData(): IWidgetMatrixError {\n const headers: Record<string, string> = {};\n if (this.httpHeaders) {\n for (const [name, value] of this.httpHeaders) {\n headers[name] = value;\n }\n }\n return {\n http_status: this.httpStatus ?? 400,\n http_headers: headers,\n url: this.url ?? \"\",\n response: {\n errcode: this.errcode ?? \"M_UNKNOWN\",\n error: this.data.error ?? \"Unknown message\",\n ...this.data,\n },\n };\n }\n\n /**\n * @returns a new {@link MatrixError} from a JSON payload\n * received from Widget API error responses.\n */\n public static fromWidgetApiErrorData(data: IWidgetMatrixError): MatrixError {\n return new MatrixError(data.response, data.http_status, data.url, undefined, new Headers(data.http_headers));\n }\n}\n\n/**\n * @returns The recommended delay in milliseconds to wait before retrying the request.\n * @param error - The error to check for a retry delay.\n * @param defaultMs - The delay to use if the error was not due to rate-limiting or if no valid delay is recommended.\n */\nexport function safeGetRetryAfterMs(error: unknown, defaultMs: number): number {\n if (!(error instanceof HTTPError) || !error.isRateLimitError()) {\n return defaultMs;\n }\n try {\n return error.getRetryAfterMs() ?? defaultMs;\n } catch {\n return defaultMs;\n }\n}\n\n/**\n * Construct a ConnectionError. This is a JavaScript Error indicating\n * that a request failed because of some error with the connection, either\n * CORS was not correctly configured on the server, the server didn't response,\n * the request timed out, or the internet connection on the client side went down.\n */\nexport class ConnectionError extends Error {\n public constructor(message: string, cause?: Error) {\n super(message + (cause ? `: ${cause.message}` : \"\"));\n }\n\n public get name(): string {\n return \"ConnectionError\";\n }\n}\n\n/**\n * Construct a TokenRefreshError. This indicates that a request failed due to the token being expired,\n * and attempting to refresh said token also failed but in a way which was not indicative of token invalidation.\n * Assumed to be a temporary failure.\n */\nexport class TokenRefreshError extends Error {\n public constructor(cause?: Error) {\n super(cause?.message ?? \"\");\n }\n\n public get name(): string {\n return \"TokenRefreshError\";\n }\n}\n\n/**\n * Construct a TokenRefreshError. This indicates that a request failed due to the token being expired,\n * and attempting to refresh said token failed in a way indicative of token invalidation.\n */\nexport class TokenRefreshLogoutError extends Error {\n public constructor(cause?: Error) {\n super(cause?.message ?? \"\");\n }\n\n public get name(): string {\n return \"TokenRefreshLogoutError\";\n }\n}\n\nexport const MatrixSafetyErrorCode = new NamespacedValue(null, \"ORG.MATRIX.MSC4387_SAFETY\");\n\n/***\n * This error is thrown when the homeserver refuses to handle an action due to a\n * safety concern.\n * @see https://github.com/matrix-org/matrix-spec-proposals/pull/4387\n */\nexport class MatrixSafetyError extends MatrixError {\n /**\n * The kinds of harms detected by the server.\n * @see https://github.com/matrix-org/matrix-spec-proposals/pull/4387 for a list of spec defined harms.\n */\n public readonly harms: Set<string>;\n /**\n * The date at which a request can be reattempted.\n */\n public readonly expiry?: Date;\n public constructor(...props: ConstructorParameters<typeof MatrixError>) {\n super(...props);\n const body = props[0];\n\n this.harms = new Set(body && \"harms\" in body && Array.isArray(body.harms) ? body.harms : []);\n this.message = `${super.message} (${[...this.harms].join(\", \")})`;\n if (body && \"expiry\" in body && typeof body.expiry === \"number\") {\n this.expiry = new Date(body.expiry);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|