@textrp/briij-js-sdk 41.0.0 → 42.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 +47 -46
- 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 +19 -1
- package/lib/@types/auth.d.ts.map +1 -1
- package/lib/@types/auth.js +55 -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 +27 -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 +3 -0
- package/lib/briij.d.ts.map +1 -1
- package/lib/briij.js +3 -0
- package/lib/briij.js.map +1 -1
- package/lib/client.d.ts +18 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +166 -103
- 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/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 +128 -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 +280 -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 +476 -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 +3 -0
- package/src/client.ts +90 -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/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
package/src/thread-utils.ts
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
/*
|
|
2
|
-
Copyright 2023 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 { THREAD_RELATION_TYPE } from "./models/thread.ts";
|
|
18
|
-
import { type IEvent } from "./models/event.ts";
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Returns a filter function for the /relations endpoint to filter out relations directly
|
|
22
|
-
* to the thread root event that should not live in the thread timeline
|
|
23
|
-
*
|
|
24
|
-
* @param threadId - the thread ID (ie. the event ID of the root event of the thread)
|
|
25
|
-
* @returns the filtered list of events
|
|
26
|
-
*/
|
|
27
|
-
export function getRelationsThreadFilter(threadId: string): (e: Partial<IEvent>) => boolean {
|
|
28
|
-
return (e: Partial<IEvent>) =>
|
|
29
|
-
e.content?.["m.relates_to"]?.event_id !== threadId ||
|
|
30
|
-
e.content?.["m.relates_to"]?.rel_type === THREAD_RELATION_TYPE.name;
|
|
31
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2023 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 { THREAD_RELATION_TYPE } from "./models/thread.ts";
|
|
18
|
+
import { type IEvent } from "./models/event.ts";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Returns a filter function for the /relations endpoint to filter out relations directly
|
|
22
|
+
* to the thread root event that should not live in the thread timeline
|
|
23
|
+
*
|
|
24
|
+
* @param threadId - the thread ID (ie. the event ID of the root event of the thread)
|
|
25
|
+
* @returns the filtered list of events
|
|
26
|
+
*/
|
|
27
|
+
export function getRelationsThreadFilter(threadId: string): (e: Partial<IEvent>) => boolean {
|
|
28
|
+
return (e: Partial<IEvent>) =>
|
|
29
|
+
e.content?.["m.relates_to"]?.event_id !== threadId ||
|
|
30
|
+
e.content?.["m.relates_to"]?.rel_type === THREAD_RELATION_TYPE.name;
|
|
31
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -1,59 +1,59 @@
|
|
|
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
|
-
/*
|
|
18
|
-
* This file is a secondary entrypoint for the js-sdk library, for use by Typescript projects.
|
|
19
|
-
* It exposes low-level types and interfaces reflecting structures defined in the Matrix specification.
|
|
20
|
-
*
|
|
21
|
-
* Remember to only export *public* types from this file.
|
|
22
|
-
*/
|
|
23
|
-
|
|
24
|
-
export type * from "./@types/media.ts";
|
|
25
|
-
export * from "./@types/membership.ts";
|
|
26
|
-
export type * from "./@types/event.ts";
|
|
27
|
-
export type * from "./@types/events.ts";
|
|
28
|
-
export type * from "./@types/state_events.ts";
|
|
29
|
-
export type * from "./@types/AESEncryptedSecretStoragePayload.ts";
|
|
30
|
-
|
|
31
|
-
/** The different methods for device and user verification */
|
|
32
|
-
export enum VerificationMethod {
|
|
33
|
-
/** Short authentication string (emoji or decimals).
|
|
34
|
-
*
|
|
35
|
-
* @see https://spec.matrix.org/v1.9/client-server-api/#short-authentication-string-sas-verification
|
|
36
|
-
*/
|
|
37
|
-
Sas = "m.sas.v1",
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Verification by showing a QR code which is scanned by the other device.
|
|
41
|
-
*
|
|
42
|
-
* @see https://spec.matrix.org/v1.9/client-server-api/#qr-codes
|
|
43
|
-
*/
|
|
44
|
-
ShowQrCode = "m.qr_code.show.v1",
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Verification by scanning a QR code that is shown by the other device.
|
|
48
|
-
*
|
|
49
|
-
* @see https://spec.matrix.org/v1.9/client-server-api/#qr-codes
|
|
50
|
-
*/
|
|
51
|
-
ScanQrCode = "m.qr_code.scan.v1",
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Verification by confirming that we have scanned a QR code.
|
|
55
|
-
*
|
|
56
|
-
* @see https://spec.matrix.org/v1.9/client-server-api/#qr-codes
|
|
57
|
-
*/
|
|
58
|
-
Reciprocate = "m.reciprocate.v1",
|
|
59
|
-
}
|
|
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
|
+
/*
|
|
18
|
+
* This file is a secondary entrypoint for the js-sdk library, for use by Typescript projects.
|
|
19
|
+
* It exposes low-level types and interfaces reflecting structures defined in the Matrix specification.
|
|
20
|
+
*
|
|
21
|
+
* Remember to only export *public* types from this file.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
export type * from "./@types/media.ts";
|
|
25
|
+
export * from "./@types/membership.ts";
|
|
26
|
+
export type * from "./@types/event.ts";
|
|
27
|
+
export type * from "./@types/events.ts";
|
|
28
|
+
export type * from "./@types/state_events.ts";
|
|
29
|
+
export type * from "./@types/AESEncryptedSecretStoragePayload.ts";
|
|
30
|
+
|
|
31
|
+
/** The different methods for device and user verification */
|
|
32
|
+
export enum VerificationMethod {
|
|
33
|
+
/** Short authentication string (emoji or decimals).
|
|
34
|
+
*
|
|
35
|
+
* @see https://spec.matrix.org/v1.9/client-server-api/#short-authentication-string-sas-verification
|
|
36
|
+
*/
|
|
37
|
+
Sas = "m.sas.v1",
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Verification by showing a QR code which is scanned by the other device.
|
|
41
|
+
*
|
|
42
|
+
* @see https://spec.matrix.org/v1.9/client-server-api/#qr-codes
|
|
43
|
+
*/
|
|
44
|
+
ShowQrCode = "m.qr_code.show.v1",
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Verification by scanning a QR code that is shown by the other device.
|
|
48
|
+
*
|
|
49
|
+
* @see https://spec.matrix.org/v1.9/client-server-api/#qr-codes
|
|
50
|
+
*/
|
|
51
|
+
ScanQrCode = "m.qr_code.scan.v1",
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Verification by confirming that we have scanned a QR code.
|
|
55
|
+
*
|
|
56
|
+
* @see https://spec.matrix.org/v1.9/client-server-api/#qr-codes
|
|
57
|
+
*/
|
|
58
|
+
Reciprocate = "m.reciprocate.v1",
|
|
59
|
+
}
|
|
@@ -1,54 +1,54 @@
|
|
|
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
|
-
import { decodeBase64 } from "../base64.ts";
|
|
18
|
-
import { deriveKeys } from "./internal/deriveKeys.ts";
|
|
19
|
-
import { type AESEncryptedSecretStoragePayload } from "../@types/AESEncryptedSecretStoragePayload.ts";
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Decrypt an AES-encrypted Secret Storage item.
|
|
23
|
-
*
|
|
24
|
-
* @param data - the encrypted data, returned by {@link utils/encryptAESSecretStorageItem.default | encryptAESSecretStorageItem}.
|
|
25
|
-
* @param key - the encryption key to use as an input to the HKDF function which is used to derive the AES key. Must
|
|
26
|
-
* be the same as provided to {@link utils/encryptAESSecretStorageItem.default | encryptAESSecretStorageItem}.
|
|
27
|
-
* @param name - the name of the secret. Also used as an input to the HKDF operation which is used to derive the AES
|
|
28
|
-
* key, so again must be the same as provided to {@link utils/encryptAESSecretStorageItem.default | encryptAESSecretStorageItem}.
|
|
29
|
-
*/
|
|
30
|
-
export default async function decryptAESSecretStorageItem(
|
|
31
|
-
data: AESEncryptedSecretStoragePayload,
|
|
32
|
-
key: Uint8Array<ArrayBuffer>,
|
|
33
|
-
name: string,
|
|
34
|
-
): Promise<string> {
|
|
35
|
-
const [aesKey, hmacKey] = await deriveKeys(key, name);
|
|
36
|
-
|
|
37
|
-
const ciphertext = decodeBase64(data.ciphertext);
|
|
38
|
-
|
|
39
|
-
if (!(await globalThis.crypto.subtle.verify({ name: "HMAC" }, hmacKey, decodeBase64(data.mac), ciphertext))) {
|
|
40
|
-
throw new Error(`Error decrypting secret ${name}: bad MAC`);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const plaintext = await globalThis.crypto.subtle.decrypt(
|
|
44
|
-
{
|
|
45
|
-
name: "AES-CTR",
|
|
46
|
-
counter: decodeBase64(data.iv),
|
|
47
|
-
length: 64,
|
|
48
|
-
},
|
|
49
|
-
aesKey,
|
|
50
|
-
ciphertext,
|
|
51
|
-
);
|
|
52
|
-
|
|
53
|
-
return new TextDecoder().decode(new Uint8Array(plaintext));
|
|
54
|
-
}
|
|
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
|
+
import { decodeBase64 } from "../base64.ts";
|
|
18
|
+
import { deriveKeys } from "./internal/deriveKeys.ts";
|
|
19
|
+
import { type AESEncryptedSecretStoragePayload } from "../@types/AESEncryptedSecretStoragePayload.ts";
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Decrypt an AES-encrypted Secret Storage item.
|
|
23
|
+
*
|
|
24
|
+
* @param data - the encrypted data, returned by {@link utils/encryptAESSecretStorageItem.default | encryptAESSecretStorageItem}.
|
|
25
|
+
* @param key - the encryption key to use as an input to the HKDF function which is used to derive the AES key. Must
|
|
26
|
+
* be the same as provided to {@link utils/encryptAESSecretStorageItem.default | encryptAESSecretStorageItem}.
|
|
27
|
+
* @param name - the name of the secret. Also used as an input to the HKDF operation which is used to derive the AES
|
|
28
|
+
* key, so again must be the same as provided to {@link utils/encryptAESSecretStorageItem.default | encryptAESSecretStorageItem}.
|
|
29
|
+
*/
|
|
30
|
+
export default async function decryptAESSecretStorageItem(
|
|
31
|
+
data: AESEncryptedSecretStoragePayload,
|
|
32
|
+
key: Uint8Array<ArrayBuffer>,
|
|
33
|
+
name: string,
|
|
34
|
+
): Promise<string> {
|
|
35
|
+
const [aesKey, hmacKey] = await deriveKeys(key, name);
|
|
36
|
+
|
|
37
|
+
const ciphertext = decodeBase64(data.ciphertext);
|
|
38
|
+
|
|
39
|
+
if (!(await globalThis.crypto.subtle.verify({ name: "HMAC" }, hmacKey, decodeBase64(data.mac), ciphertext))) {
|
|
40
|
+
throw new Error(`Error decrypting secret ${name}: bad MAC`);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const plaintext = await globalThis.crypto.subtle.decrypt(
|
|
44
|
+
{
|
|
45
|
+
name: "AES-CTR",
|
|
46
|
+
counter: decodeBase64(data.iv),
|
|
47
|
+
length: 64,
|
|
48
|
+
},
|
|
49
|
+
aesKey,
|
|
50
|
+
ciphertext,
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
return new TextDecoder().decode(new Uint8Array(plaintext));
|
|
54
|
+
}
|
|
@@ -1,73 +1,73 @@
|
|
|
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
|
-
import { decodeBase64, encodeBase64 } from "../base64.ts";
|
|
18
|
-
import { deriveKeys } from "./internal/deriveKeys.ts";
|
|
19
|
-
import { type AESEncryptedSecretStoragePayload } from "../@types/AESEncryptedSecretStoragePayload.ts";
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Encrypt a string as a secret storage item, using AES-CTR.
|
|
23
|
-
*
|
|
24
|
-
* @param data - the plaintext to encrypt
|
|
25
|
-
* @param key - the encryption key to use as an input to the HKDF function which is used to derive the AES key for
|
|
26
|
-
* encryption. Obviously, the same key must be provided when decrypting.
|
|
27
|
-
* @param name - the name of the secret. Used as an input to the HKDF operation which is used to derive the AES key,
|
|
28
|
-
* so again the same value must be provided when decrypting.
|
|
29
|
-
* @param ivStr - the base64-encoded initialization vector to use. If not supplied, a random one will be generated.
|
|
30
|
-
*
|
|
31
|
-
* @returns The encrypted result, including the ciphertext itself, the initialization vector (as supplied in `ivStr`,
|
|
32
|
-
* or generated), and an HMAC on the ciphertext — all base64-encoded.
|
|
33
|
-
*/
|
|
34
|
-
export default async function encryptAESSecretStorageItem(
|
|
35
|
-
data: string,
|
|
36
|
-
key: Uint8Array<ArrayBuffer>,
|
|
37
|
-
name: string,
|
|
38
|
-
ivStr?: string,
|
|
39
|
-
): Promise<AESEncryptedSecretStoragePayload> {
|
|
40
|
-
let iv: Uint8Array<ArrayBuffer>;
|
|
41
|
-
if (ivStr) {
|
|
42
|
-
iv = decodeBase64(ivStr);
|
|
43
|
-
} else {
|
|
44
|
-
iv = new Uint8Array(16);
|
|
45
|
-
globalThis.crypto.getRandomValues(iv);
|
|
46
|
-
|
|
47
|
-
// clear bit 63 of the IV to stop us hitting the 64-bit counter boundary
|
|
48
|
-
// (which would mean we wouldn't be able to decrypt on Android). The loss
|
|
49
|
-
// of a single bit of iv is a price we have to pay.
|
|
50
|
-
iv[8] &= 0x7f;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
const [aesKey, hmacKey] = await deriveKeys(key, name);
|
|
54
|
-
const encodedData = new TextEncoder().encode(data);
|
|
55
|
-
|
|
56
|
-
const ciphertext = await globalThis.crypto.subtle.encrypt(
|
|
57
|
-
{
|
|
58
|
-
name: "AES-CTR",
|
|
59
|
-
counter: iv,
|
|
60
|
-
length: 64,
|
|
61
|
-
},
|
|
62
|
-
aesKey,
|
|
63
|
-
encodedData,
|
|
64
|
-
);
|
|
65
|
-
|
|
66
|
-
const hmac = await globalThis.crypto.subtle.sign({ name: "HMAC" }, hmacKey, ciphertext);
|
|
67
|
-
|
|
68
|
-
return {
|
|
69
|
-
iv: encodeBase64(iv),
|
|
70
|
-
ciphertext: encodeBase64(new Uint8Array(ciphertext)),
|
|
71
|
-
mac: encodeBase64(new Uint8Array(hmac)),
|
|
72
|
-
};
|
|
73
|
-
}
|
|
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
|
+
import { decodeBase64, encodeBase64 } from "../base64.ts";
|
|
18
|
+
import { deriveKeys } from "./internal/deriveKeys.ts";
|
|
19
|
+
import { type AESEncryptedSecretStoragePayload } from "../@types/AESEncryptedSecretStoragePayload.ts";
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Encrypt a string as a secret storage item, using AES-CTR.
|
|
23
|
+
*
|
|
24
|
+
* @param data - the plaintext to encrypt
|
|
25
|
+
* @param key - the encryption key to use as an input to the HKDF function which is used to derive the AES key for
|
|
26
|
+
* encryption. Obviously, the same key must be provided when decrypting.
|
|
27
|
+
* @param name - the name of the secret. Used as an input to the HKDF operation which is used to derive the AES key,
|
|
28
|
+
* so again the same value must be provided when decrypting.
|
|
29
|
+
* @param ivStr - the base64-encoded initialization vector to use. If not supplied, a random one will be generated.
|
|
30
|
+
*
|
|
31
|
+
* @returns The encrypted result, including the ciphertext itself, the initialization vector (as supplied in `ivStr`,
|
|
32
|
+
* or generated), and an HMAC on the ciphertext — all base64-encoded.
|
|
33
|
+
*/
|
|
34
|
+
export default async function encryptAESSecretStorageItem(
|
|
35
|
+
data: string,
|
|
36
|
+
key: Uint8Array<ArrayBuffer>,
|
|
37
|
+
name: string,
|
|
38
|
+
ivStr?: string,
|
|
39
|
+
): Promise<AESEncryptedSecretStoragePayload> {
|
|
40
|
+
let iv: Uint8Array<ArrayBuffer>;
|
|
41
|
+
if (ivStr) {
|
|
42
|
+
iv = decodeBase64(ivStr);
|
|
43
|
+
} else {
|
|
44
|
+
iv = new Uint8Array(16);
|
|
45
|
+
globalThis.crypto.getRandomValues(iv);
|
|
46
|
+
|
|
47
|
+
// clear bit 63 of the IV to stop us hitting the 64-bit counter boundary
|
|
48
|
+
// (which would mean we wouldn't be able to decrypt on Android). The loss
|
|
49
|
+
// of a single bit of iv is a price we have to pay.
|
|
50
|
+
iv[8] &= 0x7f;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const [aesKey, hmacKey] = await deriveKeys(key, name);
|
|
54
|
+
const encodedData = new TextEncoder().encode(data);
|
|
55
|
+
|
|
56
|
+
const ciphertext = await globalThis.crypto.subtle.encrypt(
|
|
57
|
+
{
|
|
58
|
+
name: "AES-CTR",
|
|
59
|
+
counter: iv,
|
|
60
|
+
length: 64,
|
|
61
|
+
},
|
|
62
|
+
aesKey,
|
|
63
|
+
encodedData,
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
const hmac = await globalThis.crypto.subtle.sign({ name: "HMAC" }, hmacKey, ciphertext);
|
|
67
|
+
|
|
68
|
+
return {
|
|
69
|
+
iv: encodeBase64(iv),
|
|
70
|
+
ciphertext: encodeBase64(new Uint8Array(ciphertext)),
|
|
71
|
+
mac: encodeBase64(new Uint8Array(hmac)),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
@@ -1,63 +1,63 @@
|
|
|
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
|
-
// salt for HKDF, with 8 bytes of zeros
|
|
18
|
-
const zeroSalt = new Uint8Array(8);
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Derive AES and HMAC keys from a master key.
|
|
22
|
-
*
|
|
23
|
-
* This is used for deriving secret storage keys: see https://spec.matrix.org/v1.11/client-server-api/#msecret_storagev1aes-hmac-sha2 (step 1).
|
|
24
|
-
*
|
|
25
|
-
* @param key
|
|
26
|
-
* @param name
|
|
27
|
-
*/
|
|
28
|
-
export async function deriveKeys(key: Uint8Array<ArrayBuffer>, name: string): Promise<[CryptoKey, CryptoKey]> {
|
|
29
|
-
const hkdfkey = await globalThis.crypto.subtle.importKey("raw", key, { name: "HKDF" }, false, ["deriveBits"]);
|
|
30
|
-
const keybits = await globalThis.crypto.subtle.deriveBits(
|
|
31
|
-
{
|
|
32
|
-
name: "HKDF",
|
|
33
|
-
salt: zeroSalt,
|
|
34
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
35
|
-
// @ts-ignore: https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/879
|
|
36
|
-
info: new TextEncoder().encode(name),
|
|
37
|
-
hash: "SHA-256",
|
|
38
|
-
},
|
|
39
|
-
hkdfkey,
|
|
40
|
-
512,
|
|
41
|
-
);
|
|
42
|
-
|
|
43
|
-
const aesKey = keybits.slice(0, 32);
|
|
44
|
-
const hmacKey = keybits.slice(32);
|
|
45
|
-
|
|
46
|
-
const aesProm = globalThis.crypto.subtle.importKey("raw", aesKey, { name: "AES-CTR" }, false, [
|
|
47
|
-
"encrypt",
|
|
48
|
-
"decrypt",
|
|
49
|
-
]);
|
|
50
|
-
|
|
51
|
-
const hmacProm = globalThis.crypto.subtle.importKey(
|
|
52
|
-
"raw",
|
|
53
|
-
hmacKey,
|
|
54
|
-
{
|
|
55
|
-
name: "HMAC",
|
|
56
|
-
hash: { name: "SHA-256" },
|
|
57
|
-
},
|
|
58
|
-
false,
|
|
59
|
-
["sign", "verify"],
|
|
60
|
-
);
|
|
61
|
-
|
|
62
|
-
return Promise.all([aesProm, hmacProm]);
|
|
63
|
-
}
|
|
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
|
+
// salt for HKDF, with 8 bytes of zeros
|
|
18
|
+
const zeroSalt = new Uint8Array(8);
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Derive AES and HMAC keys from a master key.
|
|
22
|
+
*
|
|
23
|
+
* This is used for deriving secret storage keys: see https://spec.matrix.org/v1.11/client-server-api/#msecret_storagev1aes-hmac-sha2 (step 1).
|
|
24
|
+
*
|
|
25
|
+
* @param key
|
|
26
|
+
* @param name
|
|
27
|
+
*/
|
|
28
|
+
export async function deriveKeys(key: Uint8Array<ArrayBuffer>, name: string): Promise<[CryptoKey, CryptoKey]> {
|
|
29
|
+
const hkdfkey = await globalThis.crypto.subtle.importKey("raw", key, { name: "HKDF" }, false, ["deriveBits"]);
|
|
30
|
+
const keybits = await globalThis.crypto.subtle.deriveBits(
|
|
31
|
+
{
|
|
32
|
+
name: "HKDF",
|
|
33
|
+
salt: zeroSalt,
|
|
34
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
35
|
+
// @ts-ignore: https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/879
|
|
36
|
+
info: new TextEncoder().encode(name),
|
|
37
|
+
hash: "SHA-256",
|
|
38
|
+
},
|
|
39
|
+
hkdfkey,
|
|
40
|
+
512,
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
const aesKey = keybits.slice(0, 32);
|
|
44
|
+
const hmacKey = keybits.slice(32);
|
|
45
|
+
|
|
46
|
+
const aesProm = globalThis.crypto.subtle.importKey("raw", aesKey, { name: "AES-CTR" }, false, [
|
|
47
|
+
"encrypt",
|
|
48
|
+
"decrypt",
|
|
49
|
+
]);
|
|
50
|
+
|
|
51
|
+
const hmacProm = globalThis.crypto.subtle.importKey(
|
|
52
|
+
"raw",
|
|
53
|
+
hmacKey,
|
|
54
|
+
{
|
|
55
|
+
name: "HMAC",
|
|
56
|
+
hash: { name: "SHA-256" },
|
|
57
|
+
},
|
|
58
|
+
false,
|
|
59
|
+
["sign", "verify"],
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
return Promise.all([aesProm, hmacProm]);
|
|
63
|
+
}
|
package/src/utils/roomVersion.ts
CHANGED
|
@@ -1,35 +1,35 @@
|
|
|
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
|
-
/**
|
|
18
|
-
* Room versions strings that we know about and do not use hydra semantics.
|
|
19
|
-
*/
|
|
20
|
-
const PRE_HYDRA_ROOM_VERSIONS = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"];
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Checks if the given room version is one where new "hydra" power level
|
|
24
|
-
* semantics (ie. room version 12 or later) should be used
|
|
25
|
-
* (see https://github.com/matrix-org/matrix-spec-proposals/pull/4289).
|
|
26
|
-
* This will return `false` for versions that are known to the js-sdk and
|
|
27
|
-
* do not use hydra: any room versions unknown to the js-sdk (experimental or
|
|
28
|
-
* otherwise) will cause the function to return true.
|
|
29
|
-
*
|
|
30
|
-
* @param roomVersion - The version of the room to check.
|
|
31
|
-
* @returns `true` if hydra semantics should be used for the room version, `false` otherwise.
|
|
32
|
-
*/
|
|
33
|
-
export function shouldUseHydraForRoomVersion(roomVersion: string): boolean {
|
|
34
|
-
return !PRE_HYDRA_ROOM_VERSIONS.includes(roomVersion);
|
|
35
|
-
}
|
|
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
|
+
/**
|
|
18
|
+
* Room versions strings that we know about and do not use hydra semantics.
|
|
19
|
+
*/
|
|
20
|
+
const PRE_HYDRA_ROOM_VERSIONS = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"];
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Checks if the given room version is one where new "hydra" power level
|
|
24
|
+
* semantics (ie. room version 12 or later) should be used
|
|
25
|
+
* (see https://github.com/matrix-org/matrix-spec-proposals/pull/4289).
|
|
26
|
+
* This will return `false` for versions that are known to the js-sdk and
|
|
27
|
+
* do not use hydra: any room versions unknown to the js-sdk (experimental or
|
|
28
|
+
* otherwise) will cause the function to return true.
|
|
29
|
+
*
|
|
30
|
+
* @param roomVersion - The version of the room to check.
|
|
31
|
+
* @returns `true` if hydra semantics should be used for the room version, `false` otherwise.
|
|
32
|
+
*/
|
|
33
|
+
export function shouldUseHydraForRoomVersion(roomVersion: string): boolean {
|
|
34
|
+
return !PRE_HYDRA_ROOM_VERSIONS.includes(roomVersion);
|
|
35
|
+
}
|