@jeongsu816/matrix-bot-sdk 0.0.0-stage → 0.8.1
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/LICENSE +21 -0
- package/README.md +50 -2
- package/lib/AdminApis.d.ts +52 -0
- package/lib/AdminApis.js +29 -0
- package/lib/AdminApis.js.map +1 -0
- package/lib/DMs.d.ts +48 -0
- package/lib/DMs.js +160 -0
- package/lib/DMs.js.map +1 -0
- package/lib/IFilter.d.ts +7 -0
- package/lib/IFilter.js +3 -0
- package/lib/IFilter.js.map +1 -0
- package/lib/MatrixAuth.d.ts +45 -0
- package/lib/MatrixAuth.js +125 -0
- package/lib/MatrixAuth.js.map +1 -0
- package/lib/MatrixClient.d.ts +834 -0
- package/lib/MatrixClient.js +2268 -0
- package/lib/MatrixClient.js.map +1 -0
- package/lib/PantalaimonClient.d.ts +42 -0
- package/lib/PantalaimonClient.js +44 -0
- package/lib/PantalaimonClient.js.map +1 -0
- package/lib/SynapseAdminApis.d.ts +350 -0
- package/lib/SynapseAdminApis.js +244 -0
- package/lib/SynapseAdminApis.js.map +1 -0
- package/lib/SynchronousMatrixClient.d.ts +82 -0
- package/lib/SynchronousMatrixClient.js +130 -0
- package/lib/SynchronousMatrixClient.js.map +1 -0
- package/lib/UnstableApis.d.ts +43 -0
- package/lib/UnstableApis.js +74 -0
- package/lib/UnstableApis.js.map +1 -0
- package/lib/appservice/Appservice.d.ts +328 -0
- package/lib/appservice/Appservice.js +803 -0
- package/lib/appservice/Appservice.js.map +1 -0
- package/lib/appservice/Intent.d.ts +113 -0
- package/lib/appservice/Intent.js +363 -0
- package/lib/appservice/Intent.js.map +1 -0
- package/lib/appservice/MatrixBridge.d.ts +85 -0
- package/lib/appservice/MatrixBridge.js +111 -0
- package/lib/appservice/MatrixBridge.js.map +1 -0
- package/lib/appservice/UnstableAppserviceApis.d.ts +41 -0
- package/lib/appservice/UnstableAppserviceApis.js +62 -0
- package/lib/appservice/UnstableAppserviceApis.js.map +1 -0
- package/lib/appservice/http_responses.d.ts +77 -0
- package/lib/appservice/http_responses.js +3 -0
- package/lib/appservice/http_responses.js.map +1 -0
- package/lib/b64.d.ts +42 -0
- package/lib/b64.js +68 -0
- package/lib/b64.js.map +1 -0
- package/lib/e2ee/CrossSigningBootstrap.d.ts +73 -0
- package/lib/e2ee/CrossSigningBootstrap.js +86 -0
- package/lib/e2ee/CrossSigningBootstrap.js.map +1 -0
- package/lib/e2ee/CryptoClient.d.ts +163 -0
- package/lib/e2ee/CryptoClient.js +382 -0
- package/lib/e2ee/CryptoClient.js.map +1 -0
- package/lib/e2ee/ICryptoRoomInformation.d.ts +8 -0
- package/lib/e2ee/ICryptoRoomInformation.js +3 -0
- package/lib/e2ee/ICryptoRoomInformation.js.map +1 -0
- package/lib/e2ee/RoomTracker.d.ts +41 -0
- package/lib/e2ee/RoomTracker.js +96 -0
- package/lib/e2ee/RoomTracker.js.map +1 -0
- package/lib/e2ee/RustEngine.d.ts +149 -0
- package/lib/e2ee/RustEngine.js +467 -0
- package/lib/e2ee/RustEngine.js.map +1 -0
- package/lib/e2ee/decorators.d.ts +10 -0
- package/lib/e2ee/decorators.js +37 -0
- package/lib/e2ee/decorators.js.map +1 -0
- package/lib/helpers/MatrixEntity.d.ts +37 -0
- package/lib/helpers/MatrixEntity.js +67 -0
- package/lib/helpers/MatrixEntity.js.map +1 -0
- package/lib/helpers/MatrixGlob.d.ts +22 -0
- package/lib/helpers/MatrixGlob.js +35 -0
- package/lib/helpers/MatrixGlob.js.map +1 -0
- package/lib/helpers/MentionPill.d.ts +40 -0
- package/lib/helpers/MentionPill.js +91 -0
- package/lib/helpers/MentionPill.js.map +1 -0
- package/lib/helpers/Permalinks.d.ts +58 -0
- package/lib/helpers/Permalinks.js +73 -0
- package/lib/helpers/Permalinks.js.map +1 -0
- package/lib/helpers/ProfileCache.d.ts +48 -0
- package/lib/helpers/ProfileCache.js +114 -0
- package/lib/helpers/ProfileCache.js.map +1 -0
- package/lib/helpers/RichReply.d.ts +17 -0
- package/lib/helpers/RichReply.js +47 -0
- package/lib/helpers/RichReply.js.map +1 -0
- package/lib/helpers/UnpaddedBase64.d.ts +31 -0
- package/lib/helpers/UnpaddedBase64.js +45 -0
- package/lib/helpers/UnpaddedBase64.js.map +1 -0
- package/lib/http.d.ts +17 -0
- package/lib/http.js +147 -0
- package/lib/http.js.map +1 -0
- package/lib/identity/IdentityClient.d.ts +93 -0
- package/lib/identity/IdentityClient.js +248 -0
- package/lib/identity/IdentityClient.js.map +1 -0
- package/lib/index.d.ts +91 -0
- package/lib/index.js +125 -0
- package/lib/index.js.map +1 -0
- package/lib/logging/ConsoleLogger.d.ts +12 -0
- package/lib/logging/ConsoleLogger.js +28 -0
- package/lib/logging/ConsoleLogger.js.map +1 -0
- package/lib/logging/ILogger.d.ts +36 -0
- package/lib/logging/ILogger.js +3 -0
- package/lib/logging/ILogger.js.map +1 -0
- package/lib/logging/LogService.d.ts +100 -0
- package/lib/logging/LogService.js +169 -0
- package/lib/logging/LogService.js.map +1 -0
- package/lib/logging/RichConsoleLogger.d.ts +20 -0
- package/lib/logging/RichConsoleLogger.js +41 -0
- package/lib/logging/RichConsoleLogger.js.map +1 -0
- package/lib/metrics/IMetricListener.d.ts +52 -0
- package/lib/metrics/IMetricListener.js +3 -0
- package/lib/metrics/IMetricListener.js.map +1 -0
- package/lib/metrics/Metrics.d.ts +66 -0
- package/lib/metrics/Metrics.js +128 -0
- package/lib/metrics/Metrics.js.map +1 -0
- package/lib/metrics/contexts.d.ts +51 -0
- package/lib/metrics/contexts.js +3 -0
- package/lib/metrics/contexts.js.map +1 -0
- package/lib/metrics/decorators.d.ts +15 -0
- package/lib/metrics/decorators.js +92 -0
- package/lib/metrics/decorators.js.map +1 -0
- package/lib/metrics/names.d.ts +45 -0
- package/lib/metrics/names.js +49 -0
- package/lib/metrics/names.js.map +1 -0
- package/lib/mixins/AutojoinRoomsMixin.d.ts +10 -0
- package/lib/mixins/AutojoinRoomsMixin.js +25 -0
- package/lib/mixins/AutojoinRoomsMixin.js.map +1 -0
- package/lib/mixins/AutojoinUpgradedRoomsMixin.d.ts +10 -0
- package/lib/mixins/AutojoinUpgradedRoomsMixin.js +40 -0
- package/lib/mixins/AutojoinUpgradedRoomsMixin.js.map +1 -0
- package/lib/models/Account.d.ts +8 -0
- package/lib/models/Account.js +3 -0
- package/lib/models/Account.js.map +1 -0
- package/lib/models/CreateRoom.d.ts +125 -0
- package/lib/models/CreateRoom.js +3 -0
- package/lib/models/CreateRoom.js.map +1 -0
- package/lib/models/Crypto.d.ts +167 -0
- package/lib/models/Crypto.js +31 -0
- package/lib/models/Crypto.js.map +1 -0
- package/lib/models/EventContext.d.ts +19 -0
- package/lib/models/EventContext.js +3 -0
- package/lib/models/EventContext.js.map +1 -0
- package/lib/models/IdentityServerModels.d.ts +20 -0
- package/lib/models/IdentityServerModels.js +3 -0
- package/lib/models/IdentityServerModels.js.map +1 -0
- package/lib/models/MSC2176.d.ts +42 -0
- package/lib/models/MSC2176.js +3 -0
- package/lib/models/MSC2176.js.map +1 -0
- package/lib/models/MatrixError.d.ts +38 -0
- package/lib/models/MatrixError.js +30 -0
- package/lib/models/MatrixError.js.map +1 -0
- package/lib/models/MatrixProfile.d.ts +43 -0
- package/lib/models/MatrixProfile.js +43 -0
- package/lib/models/MatrixProfile.js.map +1 -0
- package/lib/models/OpenIDConnect.d.ts +10 -0
- package/lib/models/OpenIDConnect.js +3 -0
- package/lib/models/OpenIDConnect.js.map +1 -0
- package/lib/models/Policies.d.ts +25 -0
- package/lib/models/Policies.js +3 -0
- package/lib/models/Policies.js.map +1 -0
- package/lib/models/PowerLevelAction.d.ts +27 -0
- package/lib/models/PowerLevelAction.js +32 -0
- package/lib/models/PowerLevelAction.js.map +1 -0
- package/lib/models/PowerLevelBounds.d.ts +15 -0
- package/lib/models/PowerLevelBounds.js +3 -0
- package/lib/models/PowerLevelBounds.js.map +1 -0
- package/lib/models/Presence.d.ts +25 -0
- package/lib/models/Presence.js +38 -0
- package/lib/models/Presence.js.map +1 -0
- package/lib/models/ServerVersions.d.ts +8 -0
- package/lib/models/ServerVersions.js +3 -0
- package/lib/models/ServerVersions.js.map +1 -0
- package/lib/models/Spaces.d.ts +116 -0
- package/lib/models/Spaces.js +91 -0
- package/lib/models/Spaces.js.map +1 -0
- package/lib/models/Threepid.d.ts +8 -0
- package/lib/models/Threepid.js +3 -0
- package/lib/models/Threepid.js.map +1 -0
- package/lib/models/events/AliasesEvent.d.ts +27 -0
- package/lib/models/events/AliasesEvent.js +27 -0
- package/lib/models/events/AliasesEvent.js.map +1 -0
- package/lib/models/events/CanonicalAliasEvent.d.ts +23 -0
- package/lib/models/events/CanonicalAliasEvent.js +21 -0
- package/lib/models/events/CanonicalAliasEvent.js.map +1 -0
- package/lib/models/events/CreateEvent.d.ts +63 -0
- package/lib/models/events/CreateEvent.js +33 -0
- package/lib/models/events/CreateEvent.js.map +1 -0
- package/lib/models/events/EncryptedRoomEvent.d.ts +42 -0
- package/lib/models/events/EncryptedRoomEvent.js +28 -0
- package/lib/models/events/EncryptedRoomEvent.js.map +1 -0
- package/lib/models/events/EncryptionEvent.d.ts +47 -0
- package/lib/models/events/EncryptionEvent.js +42 -0
- package/lib/models/events/EncryptionEvent.js.map +1 -0
- package/lib/models/events/Event.d.ts +26 -0
- package/lib/models/events/Event.js +40 -0
- package/lib/models/events/Event.js.map +1 -0
- package/lib/models/events/EventKind.d.ts +15 -0
- package/lib/models/events/EventKind.js +20 -0
- package/lib/models/events/EventKind.js.map +1 -0
- package/lib/models/events/InvalidEventError.d.ts +14 -0
- package/lib/models/events/InvalidEventError.js +24 -0
- package/lib/models/events/InvalidEventError.js.map +1 -0
- package/lib/models/events/JoinRulesEvent.d.ts +29 -0
- package/lib/models/events/JoinRulesEvent.js +21 -0
- package/lib/models/events/JoinRulesEvent.js.map +1 -0
- package/lib/models/events/MembershipEvent.d.ts +54 -0
- package/lib/models/events/MembershipEvent.js +49 -0
- package/lib/models/events/MembershipEvent.js.map +1 -0
- package/lib/models/events/MessageEvent.d.ts +233 -0
- package/lib/models/events/MessageEvent.js +49 -0
- package/lib/models/events/MessageEvent.js.map +1 -0
- package/lib/models/events/PinnedEventsEvent.d.ts +23 -0
- package/lib/models/events/PinnedEventsEvent.js +21 -0
- package/lib/models/events/PinnedEventsEvent.js.map +1 -0
- package/lib/models/events/PowerLevelsEvent.d.ts +96 -0
- package/lib/models/events/PowerLevelsEvent.js +70 -0
- package/lib/models/events/PowerLevelsEvent.js.map +1 -0
- package/lib/models/events/PresenceEvent.d.ts +56 -0
- package/lib/models/events/PresenceEvent.js +21 -0
- package/lib/models/events/PresenceEvent.js.map +1 -0
- package/lib/models/events/RedactionEvent.d.ts +28 -0
- package/lib/models/events/RedactionEvent.js +36 -0
- package/lib/models/events/RedactionEvent.js.map +1 -0
- package/lib/models/events/RoomAvatarEvent.d.ts +28 -0
- package/lib/models/events/RoomAvatarEvent.js +21 -0
- package/lib/models/events/RoomAvatarEvent.js.map +1 -0
- package/lib/models/events/RoomEvent.d.ts +58 -0
- package/lib/models/events/RoomEvent.js +57 -0
- package/lib/models/events/RoomEvent.js.map +1 -0
- package/lib/models/events/RoomNameEvent.d.ts +20 -0
- package/lib/models/events/RoomNameEvent.js +21 -0
- package/lib/models/events/RoomNameEvent.js.map +1 -0
- package/lib/models/events/RoomTopicEvent.d.ts +20 -0
- package/lib/models/events/RoomTopicEvent.js +21 -0
- package/lib/models/events/RoomTopicEvent.js.map +1 -0
- package/lib/models/events/SpaceChildEvent.d.ts +53 -0
- package/lib/models/events/SpaceChildEvent.js +49 -0
- package/lib/models/events/SpaceChildEvent.js.map +1 -0
- package/lib/models/events/converter.d.ts +8 -0
- package/lib/models/events/converter.js +50 -0
- package/lib/models/events/converter.js.map +1 -0
- package/lib/models/unstable/MediaInfo.d.ts +16 -0
- package/lib/models/unstable/MediaInfo.js +3 -0
- package/lib/models/unstable/MediaInfo.js.map +1 -0
- package/lib/preprocessors/IPreprocessor.d.ts +22 -0
- package/lib/preprocessors/IPreprocessor.js +3 -0
- package/lib/preprocessors/IPreprocessor.js.map +1 -0
- package/lib/preprocessors/RichRepliesPreprocessor.d.ts +67 -0
- package/lib/preprocessors/RichRepliesPreprocessor.js +112 -0
- package/lib/preprocessors/RichRepliesPreprocessor.js.map +1 -0
- package/lib/request.d.ts +13 -0
- package/lib/request.js +23 -0
- package/lib/request.js.map +1 -0
- package/lib/simple-validation.d.ts +10 -0
- package/lib/simple-validation.js +30 -0
- package/lib/simple-validation.js.map +1 -0
- package/lib/storage/IAppserviceStorageProvider.d.ts +48 -0
- package/lib/storage/IAppserviceStorageProvider.js +3 -0
- package/lib/storage/IAppserviceStorageProvider.js.map +1 -0
- package/lib/storage/ICryptoStorageProvider.d.ts +32 -0
- package/lib/storage/ICryptoStorageProvider.js +3 -0
- package/lib/storage/ICryptoStorageProvider.js.map +1 -0
- package/lib/storage/IStorageProvider.d.ts +47 -0
- package/lib/storage/IStorageProvider.js +3 -0
- package/lib/storage/IStorageProvider.js.map +1 -0
- package/lib/storage/MemoryStorageProvider.d.ts +26 -0
- package/lib/storage/MemoryStorageProvider.js +55 -0
- package/lib/storage/MemoryStorageProvider.js.map +1 -0
- package/lib/storage/RustSdkCryptoStorageProvider.d.ts +38 -0
- package/lib/storage/RustSdkCryptoStorageProvider.js +69 -0
- package/lib/storage/RustSdkCryptoStorageProvider.js.map +1 -0
- package/lib/storage/SimpleFsStorageProvider.d.ts +31 -0
- package/lib/storage/SimpleFsStorageProvider.js +122 -0
- package/lib/storage/SimpleFsStorageProvider.js.map +1 -0
- package/lib/storage/SimplePostgresStorageProvider.d.ts +32 -0
- package/lib/storage/SimplePostgresStorageProvider.js +148 -0
- package/lib/storage/SimplePostgresStorageProvider.js.map +1 -0
- package/lib/strategies/AppserviceJoinRoomStrategy.d.ts +14 -0
- package/lib/strategies/AppserviceJoinRoomStrategy.js +54 -0
- package/lib/strategies/AppserviceJoinRoomStrategy.js.map +1 -0
- package/lib/strategies/JoinRoomStrategy.d.ts +11 -0
- package/lib/strategies/JoinRoomStrategy.js +44 -0
- package/lib/strategies/JoinRoomStrategy.js.map +1 -0
- package/package.json +136 -4
- package/src/AdminApis.ts +60 -0
- package/src/DMs.ts +164 -0
- package/src/IFilter.ts +7 -0
- package/src/MatrixAuth.ts +129 -0
- package/src/MatrixClient.ts +2046 -0
- package/src/PantalaimonClient.ts +62 -0
- package/src/SynapseAdminApis.ts +482 -0
- package/src/SynchronousMatrixClient.ts +129 -0
- package/src/UnstableApis.ts +75 -0
- package/src/appservice/Appservice.ts +1089 -0
- package/src/appservice/Intent.ts +342 -0
- package/src/appservice/MatrixBridge.ts +139 -0
- package/src/appservice/UnstableAppserviceApis.ts +63 -0
- package/src/appservice/http_responses.ts +77 -0
- package/src/b64.ts +63 -0
- package/src/e2ee/CrossSigningBootstrap.ts +141 -0
- package/src/e2ee/CryptoClient.ts +378 -0
- package/src/e2ee/ICryptoRoomInformation.ts +9 -0
- package/src/e2ee/RoomTracker.ts +99 -0
- package/src/e2ee/RustEngine.ts +580 -0
- package/src/e2ee/decorators.ts +38 -0
- package/src/helpers/MatrixEntity.ts +65 -0
- package/src/helpers/MatrixGlob.ts +38 -0
- package/src/helpers/MentionPill.ts +95 -0
- package/src/helpers/Permalinks.ts +101 -0
- package/src/helpers/ProfileCache.ts +119 -0
- package/src/helpers/RichReply.ts +46 -0
- package/src/helpers/UnpaddedBase64.ts +44 -0
- package/src/http.ts +166 -0
- package/src/identity/IdentityClient.ts +225 -0
- package/src/index.ts +125 -0
- package/src/logging/ConsoleLogger.ts +31 -0
- package/src/logging/ILogger.ts +40 -0
- package/src/logging/LogService.ts +167 -0
- package/src/logging/RichConsoleLogger.ts +70 -0
- package/src/metrics/IMetricListener.ts +57 -0
- package/src/metrics/Metrics.ts +134 -0
- package/src/metrics/contexts.ts +56 -0
- package/src/metrics/decorators.ts +94 -0
- package/src/metrics/names.ts +53 -0
- package/src/mixins/AutojoinRoomsMixin.ts +24 -0
- package/src/mixins/AutojoinUpgradedRoomsMixin.ts +37 -0
- package/src/models/Account.ts +8 -0
- package/src/models/CreateRoom.ts +144 -0
- package/src/models/Crypto.ts +188 -0
- package/src/models/EventContext.ts +23 -0
- package/src/models/IdentityServerModels.ts +18 -0
- package/src/models/MSC2176.ts +47 -0
- package/src/models/MatrixError.ts +39 -0
- package/src/models/MatrixProfile.ts +55 -0
- package/src/models/OpenIDConnect.ts +10 -0
- package/src/models/Policies.ts +28 -0
- package/src/models/PowerLevelAction.ts +31 -0
- package/src/models/PowerLevelBounds.ts +16 -0
- package/src/models/Presence.ts +38 -0
- package/src/models/ServerVersions.ts +8 -0
- package/src/models/Spaces.ts +167 -0
- package/src/models/Threepid.ts +8 -0
- package/src/models/events/AliasesEvent.ts +37 -0
- package/src/models/events/CanonicalAliasEvent.ts +30 -0
- package/src/models/events/CreateEvent.ts +82 -0
- package/src/models/events/EncryptedRoomEvent.ts +58 -0
- package/src/models/events/EncryptionEvent.ts +63 -0
- package/src/models/events/Event.ts +38 -0
- package/src/models/events/EventKind.ts +16 -0
- package/src/models/events/InvalidEventError.ts +19 -0
- package/src/models/events/JoinRulesEvent.ts +37 -0
- package/src/models/events/MembershipEvent.ts +77 -0
- package/src/models/events/MessageEvent.ts +292 -0
- package/src/models/events/PinnedEventsEvent.ts +30 -0
- package/src/models/events/PowerLevelsEvent.ts +135 -0
- package/src/models/events/PresenceEvent.ts +69 -0
- package/src/models/events/RedactionEvent.ts +44 -0
- package/src/models/events/RoomAvatarEvent.ts +36 -0
- package/src/models/events/RoomEvent.ts +83 -0
- package/src/models/events/RoomNameEvent.ts +27 -0
- package/src/models/events/RoomTopicEvent.ts +27 -0
- package/src/models/events/SpaceChildEvent.ts +74 -0
- package/src/models/events/_MissingEvents.md +35 -0
- package/src/models/events/converter.ts +47 -0
- package/src/models/unstable/MediaInfo.ts +16 -0
- package/src/preprocessors/IPreprocessor.ts +24 -0
- package/src/preprocessors/RichRepliesPreprocessor.ts +159 -0
- package/src/request.ts +21 -0
- package/src/simple-validation.ts +30 -0
- package/src/storage/IAppserviceStorageProvider.ts +54 -0
- package/src/storage/ICryptoStorageProvider.ts +36 -0
- package/src/storage/IStorageProvider.ts +53 -0
- package/src/storage/MemoryStorageProvider.ts +65 -0
- package/src/storage/RustSdkCryptoStorageProvider.ts +81 -0
- package/src/storage/SimpleFsStorageProvider.ts +142 -0
- package/src/storage/SimplePostgresStorageProvider.ts +168 -0
- package/src/strategies/AppserviceJoinRoomStrategy.ts +47 -0
- package/src/strategies/JoinRoomStrategy.ts +45 -0
- package/tsconfig.json +22 -0
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RustEngine = exports.SYNC_LOCK_NAME = void 0;
|
|
4
|
+
exports.extractUIA = extractUIA;
|
|
5
|
+
exports.hasFailedUIA = hasFailedUIA;
|
|
6
|
+
const matrix_sdk_crypto_nodejs_1 = require("@matrix-org/matrix-sdk-crypto-nodejs");
|
|
7
|
+
const AsyncLock = require("async-lock");
|
|
8
|
+
const Crypto_1 = require("../models/Crypto");
|
|
9
|
+
const EncryptionEvent_1 = require("../models/events/EncryptionEvent");
|
|
10
|
+
/**
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
exports.SYNC_LOCK_NAME = "sync";
|
|
14
|
+
/**
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
class RustEngine {
|
|
18
|
+
constructor(machine, client) {
|
|
19
|
+
this.machine = machine;
|
|
20
|
+
this.client = client;
|
|
21
|
+
this.lock = new AsyncLock();
|
|
22
|
+
}
|
|
23
|
+
async run() {
|
|
24
|
+
await this.runOnly(); // run everything, but with syntactic sugar
|
|
25
|
+
}
|
|
26
|
+
async runOnly(...types) {
|
|
27
|
+
// Note: we should not be running this until it runs out, so cache the value into a variable
|
|
28
|
+
const requests = await this.machine.outgoingRequests();
|
|
29
|
+
for (const request of requests) {
|
|
30
|
+
if (types.length && !types.includes(request.type))
|
|
31
|
+
continue;
|
|
32
|
+
switch (request.type) {
|
|
33
|
+
case 0 /* RequestType.KeysUpload */:
|
|
34
|
+
await this.processKeysUploadRequest(request);
|
|
35
|
+
break;
|
|
36
|
+
case 1 /* RequestType.KeysQuery */:
|
|
37
|
+
await this.processKeysQueryRequest(request);
|
|
38
|
+
break;
|
|
39
|
+
case 2 /* RequestType.KeysClaim */:
|
|
40
|
+
await this.processKeysClaimRequest(request);
|
|
41
|
+
break;
|
|
42
|
+
case 3 /* RequestType.ToDevice */:
|
|
43
|
+
await this.processToDeviceRequest(request);
|
|
44
|
+
break;
|
|
45
|
+
case 5 /* RequestType.RoomMessage */:
|
|
46
|
+
throw new Error("Bindings error: Sending room messages is not supported");
|
|
47
|
+
case 4 /* RequestType.SignatureUpload */:
|
|
48
|
+
await this.processSignatureUploadRequest(request);
|
|
49
|
+
break;
|
|
50
|
+
case 6 /* RequestType.KeysBackup */:
|
|
51
|
+
await this.processKeysBackupRequest(request);
|
|
52
|
+
break;
|
|
53
|
+
default:
|
|
54
|
+
throw new Error("Bindings error: Unrecognized request type: " + request.type);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async addTrackedUsers(userIds) {
|
|
59
|
+
await this.lock.acquire(exports.SYNC_LOCK_NAME, async () => {
|
|
60
|
+
const uids = userIds.map(u => new matrix_sdk_crypto_nodejs_1.UserId(u));
|
|
61
|
+
await this.machine.updateTrackedUsers(uids);
|
|
62
|
+
const keysClaim = await this.machine.getMissingSessions(uids);
|
|
63
|
+
if (keysClaim) {
|
|
64
|
+
await this.processKeysClaimRequest(keysClaim);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
async prepareEncrypt(roomId, roomInfo) {
|
|
69
|
+
// TODO: Handle pre-shared invite keys too
|
|
70
|
+
const members = (await this.client.getJoinedRoomMembers(roomId)).map(u => new matrix_sdk_crypto_nodejs_1.UserId(u));
|
|
71
|
+
let historyVis = 1 /* HistoryVisibility.Joined */;
|
|
72
|
+
switch (roomInfo.historyVisibility) {
|
|
73
|
+
case "world_readable":
|
|
74
|
+
historyVis = 3 /* HistoryVisibility.WorldReadable */;
|
|
75
|
+
break;
|
|
76
|
+
case "invited":
|
|
77
|
+
historyVis = 0 /* HistoryVisibility.Invited */;
|
|
78
|
+
break;
|
|
79
|
+
case "shared":
|
|
80
|
+
historyVis = 2 /* HistoryVisibility.Shared */;
|
|
81
|
+
break;
|
|
82
|
+
case "joined":
|
|
83
|
+
default:
|
|
84
|
+
// Default and other cases handled by assignment before switch
|
|
85
|
+
}
|
|
86
|
+
const encEv = new EncryptionEvent_1.EncryptionEvent({
|
|
87
|
+
type: "m.room.encryption",
|
|
88
|
+
content: roomInfo,
|
|
89
|
+
});
|
|
90
|
+
const settings = new matrix_sdk_crypto_nodejs_1.EncryptionSettings();
|
|
91
|
+
settings.algorithm = roomInfo.algorithm === Crypto_1.EncryptionAlgorithm.MegolmV1AesSha2
|
|
92
|
+
? 1 /* RustEncryptionAlgorithm.MegolmV1AesSha2 */
|
|
93
|
+
: undefined;
|
|
94
|
+
settings.historyVisibility = historyVis;
|
|
95
|
+
settings.rotationPeriod = BigInt(encEv.rotationPeriodMs);
|
|
96
|
+
settings.rotationPeriodMessages = BigInt(encEv.rotationPeriodMessages);
|
|
97
|
+
await this.lock.acquire(exports.SYNC_LOCK_NAME, async () => {
|
|
98
|
+
await this.machine.updateTrackedUsers(members); // just in case we missed some
|
|
99
|
+
await this.runOnly(1 /* RequestType.KeysQuery */);
|
|
100
|
+
const keysClaim = await this.machine.getMissingSessions(members);
|
|
101
|
+
if (keysClaim) {
|
|
102
|
+
await this.processKeysClaimRequest(keysClaim);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
await this.lock.acquire(roomId, async () => {
|
|
106
|
+
const requests = await this.machine.shareRoomKey(new matrix_sdk_crypto_nodejs_1.RoomId(roomId), members, settings);
|
|
107
|
+
for (const req of requests) {
|
|
108
|
+
await this.actuallyProcessToDeviceRequest(req.txnId, req.eventType, JSON.parse(req.body)["messages"]);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
async processKeysClaimRequest(request) {
|
|
113
|
+
const resp = await this.client.doRequest("POST", "/_matrix/client/v3/keys/claim", null, JSON.parse(request.body));
|
|
114
|
+
await this.machine.markRequestAsSent(request.id, request.type, JSON.stringify(resp));
|
|
115
|
+
}
|
|
116
|
+
async processKeysUploadRequest(request) {
|
|
117
|
+
const body = JSON.parse(request.body);
|
|
118
|
+
// delete body["one_time_keys"]; // use this to test MSC3983
|
|
119
|
+
const resp = await this.client.doRequest("POST", "/_matrix/client/v3/keys/upload", null, body);
|
|
120
|
+
await this.machine.markRequestAsSent(request.id, request.type, JSON.stringify(resp));
|
|
121
|
+
}
|
|
122
|
+
async processKeysQueryRequest(request) {
|
|
123
|
+
const resp = await this.client.doRequest("POST", "/_matrix/client/v3/keys/query", null, JSON.parse(request.body));
|
|
124
|
+
await this.machine.markRequestAsSent(request.id, request.type, JSON.stringify(resp));
|
|
125
|
+
}
|
|
126
|
+
async processToDeviceRequest(request) {
|
|
127
|
+
const req = JSON.parse(request.body);
|
|
128
|
+
await this.actuallyProcessToDeviceRequest(req.txn_id, req.event_type, req.messages);
|
|
129
|
+
}
|
|
130
|
+
async actuallyProcessToDeviceRequest(id, type, messages) {
|
|
131
|
+
const resp = await this.client.sendToDevices(type, messages);
|
|
132
|
+
await this.machine.markRequestAsSent(id, 3 /* RequestType.ToDevice */, JSON.stringify(resp));
|
|
133
|
+
}
|
|
134
|
+
async processSignatureUploadRequest(request) {
|
|
135
|
+
// The binding serializes the body as { "signed_keys": {<user_id>: {...}} },
|
|
136
|
+
// but POST /keys/signatures/upload expects that inner map directly (its
|
|
137
|
+
// top-level keys are user IDs). Unwrap the `signed_keys` envelope —
|
|
138
|
+
// otherwise the server rejects "signed_keys" as a user id (M_INVALID_PARAM)
|
|
139
|
+
// and the failure response breaks markRequestAsSent's deserialization.
|
|
140
|
+
const parsed = JSON.parse(request.body);
|
|
141
|
+
const httpBody = parsed && parsed.signed_keys ? parsed.signed_keys : parsed;
|
|
142
|
+
const resp = await this.client.doRequest("POST", "/_matrix/client/v3/keys/signatures/upload", null, httpBody);
|
|
143
|
+
// The bootstrap-driven signature request carries no request id; only
|
|
144
|
+
// mark queue-driven requests as sent.
|
|
145
|
+
if (request.id) {
|
|
146
|
+
await this.machine.markRequestAsSent(request.id, request.type, JSON.stringify(resp));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
async processKeysBackupRequest(request) {
|
|
150
|
+
// Backing up room keys requires an existing server-side backup version
|
|
151
|
+
// to write into. The version is created out-of-band by
|
|
152
|
+
// `enableKeyBackup()`; here we just write the encrypted room keys to the
|
|
153
|
+
// active version. If no backup version exists the server returns
|
|
154
|
+
// M_NOT_FOUND — we surface that rather than silently dropping keys.
|
|
155
|
+
const version = await this.activeKeyBackupVersion();
|
|
156
|
+
if (!version) {
|
|
157
|
+
throw new Error("Bindings error: a KeysBackup request was produced but no server-side backup version " +
|
|
158
|
+
"exists. Call enableKeyBackup() to create/activate one before backing up room keys.");
|
|
159
|
+
}
|
|
160
|
+
const resp = await this.client.doRequest("PUT", "/_matrix/client/v3/room_keys/keys", { version }, JSON.parse(request.body));
|
|
161
|
+
await this.machine.markRequestAsSent(request.id, request.type, JSON.stringify(resp));
|
|
162
|
+
}
|
|
163
|
+
/** The currently-active server-side key-backup version, or null if none. */
|
|
164
|
+
async activeKeyBackupVersion() {
|
|
165
|
+
try {
|
|
166
|
+
const resp = await this.client.doRequest("GET", "/_matrix/client/v3/room_keys/version");
|
|
167
|
+
return resp?.version ?? null;
|
|
168
|
+
}
|
|
169
|
+
catch (e) {
|
|
170
|
+
// M_NOT_FOUND => no backup exists yet.
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Publish a cross-signing identity for this account so the device becomes
|
|
176
|
+
* cross-signed (self-verified). This is the piece matrix-bot-sdk historically
|
|
177
|
+
* could not drive: `runOnly` threw on the request types it produces, and the
|
|
178
|
+
* cross-signing public-key upload is not an outgoing-queue request at all —
|
|
179
|
+
* it is returned by `OlmMachine.bootstrapCrossSigning()`.
|
|
180
|
+
*
|
|
181
|
+
* Flow:
|
|
182
|
+
* 1. `machine.bootstrapCrossSigning(reset)` creates the identity locally
|
|
183
|
+
* and (on matrix-sdk-crypto-nodejs >= 0.5.0) returns the three upload
|
|
184
|
+
* requests.
|
|
185
|
+
* 2. Upload device keys (`uploadKeysReq`) if present.
|
|
186
|
+
* 3. POST the cross-signing public keys to `/keys/device_signing/upload`,
|
|
187
|
+
* completing the User-Interactive Auth challenge via `uiaCallback`.
|
|
188
|
+
* 4. POST the self-signature to `/keys/signatures/upload`.
|
|
189
|
+
*
|
|
190
|
+
* On bindings <= 0.4.0, `bootstrapCrossSigning` returns `void` and gives no
|
|
191
|
+
* way to retrieve the upload requests, so this method throws a clear,
|
|
192
|
+
* actionable error (callers are expected to treat that as non-fatal).
|
|
193
|
+
*
|
|
194
|
+
* @param uiaCallback Resolves the UIA challenge for the device-signing upload.
|
|
195
|
+
* @param reset Pass `false` (default) to reuse an existing local identity;
|
|
196
|
+
* the same request can be re-sent across UIA stages. `true`
|
|
197
|
+
* wipes any existing identity and resets device trust.
|
|
198
|
+
*/
|
|
199
|
+
async bootstrapCrossSigning(uiaCallback, reset = false) {
|
|
200
|
+
await this.lock.acquire(exports.SYNC_LOCK_NAME, async () => {
|
|
201
|
+
const requests = (await this.machine.bootstrapCrossSigning(reset));
|
|
202
|
+
if (!requests || typeof requests.uploadSigningKeysReq !== "string") {
|
|
203
|
+
throw new Error("Bindings error: OlmMachine.bootstrapCrossSigning() did not return the upload requests. " +
|
|
204
|
+
"Cross-signing cannot be published with this version of " +
|
|
205
|
+
"@matrix-org/matrix-sdk-crypto-nodejs (need >= 0.5.0).");
|
|
206
|
+
}
|
|
207
|
+
// 1. Device keys (may be absent if already uploaded).
|
|
208
|
+
if (requests.uploadKeysReq) {
|
|
209
|
+
await this.processKeysUploadRequest(requests.uploadKeysReq);
|
|
210
|
+
}
|
|
211
|
+
// 2. Cross-signing public keys -> /keys/device_signing/upload (UIA).
|
|
212
|
+
await this.uploadDeviceSigningKeys(JSON.parse(requests.uploadSigningKeysReq), uiaCallback);
|
|
213
|
+
// 3. Self-signature upload. This one IS a normal SignatureUpload
|
|
214
|
+
// request, so reuse the same code path (and mark it as sent).
|
|
215
|
+
await this.processSignatureUploadRequest(requests.uploadSignaturesReq);
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* POST the cross-signing public keys to `/keys/device_signing/upload`,
|
|
220
|
+
* driving the UIA challenge. The first attempt is sent without `auth`; the
|
|
221
|
+
* server replies 401 with the available flows, which `uiaCallback` resolves
|
|
222
|
+
* (typically an `m.login.password` stage). We then resubmit the SAME key
|
|
223
|
+
* body with the returned `auth` dict (including the `session` id).
|
|
224
|
+
*/
|
|
225
|
+
async uploadDeviceSigningKeys(keysBody, uiaCallback) {
|
|
226
|
+
const path = "/_matrix/client/v3/keys/device_signing/upload";
|
|
227
|
+
try {
|
|
228
|
+
await this.client.doRequest("POST", path, null, keysBody);
|
|
229
|
+
return; // Server accepted without UIA (rare, but allowed).
|
|
230
|
+
}
|
|
231
|
+
catch (e) {
|
|
232
|
+
const uia = extractUIA(e);
|
|
233
|
+
if (!uia)
|
|
234
|
+
throw e; // Not a UIA challenge — a real error.
|
|
235
|
+
// Resolve the challenge, then resubmit the same keys with `auth`.
|
|
236
|
+
// Loop in case the server stacks multiple stages.
|
|
237
|
+
let session = uia.session;
|
|
238
|
+
for (let attempt = 0; attempt < 10; attempt++) {
|
|
239
|
+
const auth = await uiaCallback(uia);
|
|
240
|
+
if (!auth) {
|
|
241
|
+
throw new Error("UIA for /keys/device_signing/upload was not satisfied (callback returned null)");
|
|
242
|
+
}
|
|
243
|
+
if (session && auth.session === undefined)
|
|
244
|
+
auth.session = session;
|
|
245
|
+
try {
|
|
246
|
+
await this.client.doRequest("POST", path, null, { ...keysBody, auth });
|
|
247
|
+
return; // Success.
|
|
248
|
+
}
|
|
249
|
+
catch (e2) {
|
|
250
|
+
const next = extractUIA(e2);
|
|
251
|
+
if (!next)
|
|
252
|
+
throw e2; // Either success-shaped error or a hard failure.
|
|
253
|
+
// 401 again: if it carries completed stages we progress; otherwise
|
|
254
|
+
// the credentials were rejected. Surface the error body either way.
|
|
255
|
+
if (next.session)
|
|
256
|
+
session = next.session;
|
|
257
|
+
if (hasFailedUIA(e2)) {
|
|
258
|
+
throw new Error("UIA for /keys/device_signing/upload failed: credentials rejected");
|
|
259
|
+
}
|
|
260
|
+
// Continue to next stage.
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
throw new Error("UIA for /keys/device_signing/upload did not complete after multiple attempts");
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Create + activate a server-side key-backup version derived from the given
|
|
268
|
+
* recovery/backup public key, and tell the OlmMachine to use it. After this,
|
|
269
|
+
* `KeysBackup` requests produced by `backupRoomKeys()` will have a version to
|
|
270
|
+
* write into (handled in `processKeysBackupRequest`).
|
|
271
|
+
*
|
|
272
|
+
* NOTE: key backup is secondary to cross-signing. This wires the version
|
|
273
|
+
* plumbing; the caller is responsible for generating the backup key and for
|
|
274
|
+
* calling `machine.enableBackupV1()` / `backupRoomKeys()`. It is intentionally
|
|
275
|
+
* conservative — see the adapter docs.
|
|
276
|
+
*/
|
|
277
|
+
async enableKeyBackup(authData, algorithm = "m.megolm_backup.v1.curve25519-aes-sha2") {
|
|
278
|
+
const resp = await this.client.doRequest("POST", "/_matrix/client/v3/room_keys/version", null, { algorithm, auth_data: authData });
|
|
279
|
+
return resp.version;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Restore cross-signing private keys (and optionally the megolm backup decryption
|
|
283
|
+
* key) from Secure Secret Storage (4S/SSSS) into the local crypto store.
|
|
284
|
+
*
|
|
285
|
+
* This is the recovery path when the local crypto store has been lost: the
|
|
286
|
+
* cross-signing keys were previously uploaded encrypted to account data by
|
|
287
|
+
* `bootstrapSecretStorage*`, and this method fetches and decrypts them using
|
|
288
|
+
* the same passphrase. After a successful restore:
|
|
289
|
+
*
|
|
290
|
+
* - The OlmMachine has the master / self-signing / user-signing private keys.
|
|
291
|
+
* - The device re-signs itself, so it continues to appear verified without
|
|
292
|
+
* needing UIA or a fresh cross-signing bootstrap.
|
|
293
|
+
* - If the megolm backup decryption key is in account data, it is also
|
|
294
|
+
* restored so room-key backup requests work with the existing backup version.
|
|
295
|
+
*
|
|
296
|
+
* Requires `@matrix-org/matrix-sdk-crypto-nodejs >= 0.6.0` (for
|
|
297
|
+
* `importSecretsFromSecretStorage`). Throws if the passphrase does not match
|
|
298
|
+
* the SSSS key on the server, or if account data is missing.
|
|
299
|
+
*
|
|
300
|
+
* @param passphrase The same passphrase that was used to bootstrap 4S.
|
|
301
|
+
*/
|
|
302
|
+
async restoreSecretsFromSecretStorage(passphrase) {
|
|
303
|
+
const machine4s = this.machine;
|
|
304
|
+
if (typeof machine4s.importSecretsFromSecretStorage !== "function") {
|
|
305
|
+
throw new Error("Bindings error: OlmMachine.importSecretsFromSecretStorage() is not available. " +
|
|
306
|
+
"Secret Storage restore requires @matrix-org/matrix-sdk-crypto-nodejs >= 0.6.0.");
|
|
307
|
+
}
|
|
308
|
+
// 1. Resolve the default SSSS key from account data.
|
|
309
|
+
const defaultKey = await this.client.getAccountData("m.secret_storage.default_key");
|
|
310
|
+
if (!defaultKey?.key) {
|
|
311
|
+
throw new Error("No default SSSS key found in account data (m.secret_storage.default_key missing or empty).");
|
|
312
|
+
}
|
|
313
|
+
const keyEventType = `m.secret_storage.key.${defaultKey.key}`;
|
|
314
|
+
const keyContent = await this.client.getAccountData(keyEventType);
|
|
315
|
+
if (!keyContent) {
|
|
316
|
+
throw new Error(`SSSS key descriptor not found in account data (${keyEventType} missing).`);
|
|
317
|
+
}
|
|
318
|
+
// 2. Reconstruct the SecretStorageKey from the passphrase + server metadata.
|
|
319
|
+
// fromAccountData verifies the passphrase against the stored MAC; it throws
|
|
320
|
+
// if the passphrase is wrong.
|
|
321
|
+
const ssssKey = matrix_sdk_crypto_nodejs_1.SecretStorageKey.fromAccountData(passphrase, keyEventType, JSON.stringify(keyContent));
|
|
322
|
+
// 3. Fetch the three encrypted cross-signing key blobs from account data.
|
|
323
|
+
const [masterRaw, selfSigningRaw, userSigningRaw] = await Promise.all([
|
|
324
|
+
this.client.getAccountData("m.cross_signing.master"),
|
|
325
|
+
this.client.getAccountData("m.cross_signing.self_signing"),
|
|
326
|
+
this.client.getAccountData("m.cross_signing.user_signing"),
|
|
327
|
+
]);
|
|
328
|
+
if (!masterRaw || !selfSigningRaw || !userSigningRaw) {
|
|
329
|
+
throw new Error("One or more cross-signing key blobs are missing from account data. " +
|
|
330
|
+
"4S may not have been bootstrapped yet — run bootstrapSecretStorage first.");
|
|
331
|
+
}
|
|
332
|
+
// 4. Import: the binding decrypts each blob using ssssKey, imports the
|
|
333
|
+
// private keys into the local OlmMachine, and returns a SignatureUpload
|
|
334
|
+
// request to re-sign the current device with the self-signing key.
|
|
335
|
+
const items = new matrix_sdk_crypto_nodejs_1.SecretStorageItems({
|
|
336
|
+
masterKey: JSON.stringify(masterRaw),
|
|
337
|
+
selfSigningKey: JSON.stringify(selfSigningRaw),
|
|
338
|
+
userSigningKey: JSON.stringify(userSigningRaw),
|
|
339
|
+
});
|
|
340
|
+
const sigReq = await machine4s.importSecretsFromSecretStorage(ssssKey, items);
|
|
341
|
+
await this.processSignatureUploadRequest(sigReq);
|
|
342
|
+
// 5. Restore the megolm backup decryption key if present, so room-key
|
|
343
|
+
// backup requests are directed to the existing backup version.
|
|
344
|
+
try {
|
|
345
|
+
const backupKeyRaw = await this.client.getAccountData("m.megolm_backup.v1");
|
|
346
|
+
if (backupKeyRaw) {
|
|
347
|
+
const decryptedBase64 = ssssKey.decrypt(JSON.stringify(backupKeyRaw), "m.megolm_backup.v1");
|
|
348
|
+
const decryptionKey = matrix_sdk_crypto_nodejs_1.BackupDecryptionKey.fromBase64(decryptedBase64);
|
|
349
|
+
const backupInfo = await this.activeKeyBackupVersion();
|
|
350
|
+
if (backupInfo) {
|
|
351
|
+
await this.machine.enableBackupV1(decryptionKey.megolmV1PublicKey.publicKeyBase64, backupInfo);
|
|
352
|
+
await this.machine.saveBackupDecryptionKey(decryptionKey, backupInfo);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
catch (e) {
|
|
357
|
+
// Non-fatal: cross-signing keys are restored; only room-key backup is affected.
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
async bootstrapSecretStorage(ssssKey, opts = {}) {
|
|
361
|
+
const machine4s = this.machine;
|
|
362
|
+
if (typeof machine4s.exportSecretsForSecretStorage !== "function") {
|
|
363
|
+
throw new Error("Bindings error: OlmMachine.exportSecretsForSecretStorage() is not available. " +
|
|
364
|
+
"Secret Storage (4S) requires @matrix-org/matrix-sdk-crypto-nodejs >= 0.6.0.");
|
|
365
|
+
}
|
|
366
|
+
const { withKeyBackup = true, reset = false } = opts;
|
|
367
|
+
const userId = this.machine.userId.toString();
|
|
368
|
+
await this.putAccountData(userId, ssssKey.eventType(), JSON.parse(ssssKey.accountDataContent()));
|
|
369
|
+
await this.putAccountData(userId, "m.secret_storage.default_key", { key: ssssKey.keyId() });
|
|
370
|
+
const items = await machine4s.exportSecretsForSecretStorage(ssssKey);
|
|
371
|
+
await this.putAccountData(userId, "m.cross_signing.master", JSON.parse(items.masterKey));
|
|
372
|
+
await this.putAccountData(userId, "m.cross_signing.self_signing", JSON.parse(items.selfSigningKey));
|
|
373
|
+
await this.putAccountData(userId, "m.cross_signing.user_signing", JSON.parse(items.userSigningKey));
|
|
374
|
+
if (withKeyBackup) {
|
|
375
|
+
await this.bootstrapKeyBackupIntoSecretStorage(ssssKey, userId, reset);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
async bootstrapSecretStorageFromPassphrase(passphrase, opts = {}) {
|
|
379
|
+
const ssssKey = matrix_sdk_crypto_nodejs_1.SecretStorageKey.createFromPassphrase(passphrase);
|
|
380
|
+
await this.bootstrapSecretStorage(ssssKey, opts);
|
|
381
|
+
}
|
|
382
|
+
async bootstrapSecretStorageFromKey(ssssKey, opts = {}) {
|
|
383
|
+
await this.bootstrapSecretStorage(ssssKey, opts);
|
|
384
|
+
}
|
|
385
|
+
async bootstrapKeyBackupIntoSecretStorage(ssssKey, userId, reset) {
|
|
386
|
+
const existingVersion = await this.activeKeyBackupVersion();
|
|
387
|
+
if (existingVersion && !reset) {
|
|
388
|
+
// Server has a backup. Check whether the local OlmMachine already knows about it.
|
|
389
|
+
const localKeys = await this.machine.getBackupKeys();
|
|
390
|
+
if (localKeys.backupVersion === existingVersion)
|
|
391
|
+
return; // In sync — nothing to do.
|
|
392
|
+
// Local store is out of sync (e.g. crypto-store wiped and bootstrap retried with
|
|
393
|
+
// a new SSSS key, or interrupted before saveBackupDecryptionKey). Try to reconnect
|
|
394
|
+
// by decrypting the existing backup key from account data using the current SSSS key.
|
|
395
|
+
try {
|
|
396
|
+
const backupKeyRaw = await this.client.getAccountData("m.megolm_backup.v1");
|
|
397
|
+
if (backupKeyRaw) {
|
|
398
|
+
const decryptedBase64 = ssssKey.decrypt(JSON.stringify(backupKeyRaw), "m.megolm_backup.v1");
|
|
399
|
+
const decryptionKey = matrix_sdk_crypto_nodejs_1.BackupDecryptionKey.fromBase64(decryptedBase64);
|
|
400
|
+
await this.machine.enableBackupV1(decryptionKey.megolmV1PublicKey.publicKeyBase64, existingVersion);
|
|
401
|
+
await this.machine.saveBackupDecryptionKey(decryptionKey, existingVersion);
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
catch {
|
|
406
|
+
// Account data is missing, encrypted with a different SSSS key, or corrupted.
|
|
407
|
+
// Fall through to create a new backup version under the current SSSS key.
|
|
408
|
+
}
|
|
409
|
+
// Could not reuse the existing backup — delete it and create a fresh one.
|
|
410
|
+
await this.client.doRequest("DELETE", `/_matrix/client/v3/room_keys/version/${existingVersion}`);
|
|
411
|
+
}
|
|
412
|
+
if (existingVersion && reset) {
|
|
413
|
+
await this.client.doRequest("DELETE", `/_matrix/client/v3/room_keys/version/${existingVersion}`);
|
|
414
|
+
}
|
|
415
|
+
const decryptionKey = matrix_sdk_crypto_nodejs_1.BackupDecryptionKey.createRandomKey();
|
|
416
|
+
const publicKey = decryptionKey.megolmV1PublicKey;
|
|
417
|
+
const authDataBase = { public_key: publicKey.publicKeyBase64 };
|
|
418
|
+
const canonicalBase = JSON.stringify(authDataBase, Object.keys(authDataBase).sort());
|
|
419
|
+
const sigs = await this.machine.sign(canonicalBase);
|
|
420
|
+
const authData = { ...authDataBase, signatures: JSON.parse(sigs.asJSON()) };
|
|
421
|
+
const version = await this.enableKeyBackup(authData, publicKey.algorithm);
|
|
422
|
+
await this.machine.enableBackupV1(publicKey.publicKeyBase64, version);
|
|
423
|
+
await this.machine.saveBackupDecryptionKey(decryptionKey, version);
|
|
424
|
+
const encryptedKey = ssssKey.encrypt(decryptionKey.toBase64(), "m.megolm_backup.v1");
|
|
425
|
+
await this.putAccountData(userId, "m.megolm_backup.v1", JSON.parse(encryptedKey));
|
|
426
|
+
}
|
|
427
|
+
async putAccountData(userId, eventType, content) {
|
|
428
|
+
await this.client.doRequest("PUT", `/_matrix/client/v3/user/${encodeURIComponent(userId)}/account_data/${encodeURIComponent(eventType)}`, null, content);
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
exports.RustEngine = RustEngine;
|
|
432
|
+
/**
|
|
433
|
+
* Extract a UIA challenge from a thrown matrix-bot-sdk request error. A 401 UIA
|
|
434
|
+
* body has `flows`/`session` and no `errcode`, so matrix-bot-sdk throws the raw
|
|
435
|
+
* response object (`throw response`) rather than a `MatrixError`. We also accept
|
|
436
|
+
* a `MatrixError`-like shape defensively. Returns null if it is not a UIA 401.
|
|
437
|
+
*
|
|
438
|
+
* @internal
|
|
439
|
+
*/
|
|
440
|
+
function extractUIA(err) {
|
|
441
|
+
if (!err || typeof err !== "object")
|
|
442
|
+
return null;
|
|
443
|
+
const e = err;
|
|
444
|
+
const status = e.statusCode;
|
|
445
|
+
const body = (e.body ?? err);
|
|
446
|
+
if (status !== undefined && status !== 401)
|
|
447
|
+
return null;
|
|
448
|
+
if (!body || !Array.isArray(body.flows))
|
|
449
|
+
return null;
|
|
450
|
+
return { flows: body.flows, params: body.params, session: body.session };
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* A second 401 whose body reports `completed: []` (or an unchanged stage list)
|
|
454
|
+
* after we supplied credentials indicates the credentials were rejected, not a
|
|
455
|
+
* stacked second stage. We treat the presence of an `error`/`errcode` in the
|
|
456
|
+
* body as a hard rejection.
|
|
457
|
+
*
|
|
458
|
+
* @internal
|
|
459
|
+
*/
|
|
460
|
+
function hasFailedUIA(err) {
|
|
461
|
+
if (!err || typeof err !== "object")
|
|
462
|
+
return false;
|
|
463
|
+
const e = err;
|
|
464
|
+
const body = e.body ?? err;
|
|
465
|
+
return Boolean(body && body.errcode);
|
|
466
|
+
}
|
|
467
|
+
//# sourceMappingURL=RustEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RustEngine.js","sourceRoot":"","sources":["../../src/e2ee/RustEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flags a MatrixClient function as needing end-to-end encryption enabled.
|
|
3
|
+
* @category Encryption
|
|
4
|
+
*/
|
|
5
|
+
export declare function requiresCrypto(): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
|
|
6
|
+
/**
|
|
7
|
+
* Flags a CryptoClient function as needing the CryptoClient to be ready.
|
|
8
|
+
* @category Encryption
|
|
9
|
+
*/
|
|
10
|
+
export declare function requiresReady(): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.requiresCrypto = requiresCrypto;
|
|
4
|
+
exports.requiresReady = requiresReady;
|
|
5
|
+
/**
|
|
6
|
+
* Flags a MatrixClient function as needing end-to-end encryption enabled.
|
|
7
|
+
* @category Encryption
|
|
8
|
+
*/
|
|
9
|
+
function requiresCrypto() {
|
|
10
|
+
return function (target, propertyKey, descriptor) {
|
|
11
|
+
const originalMethod = descriptor.value;
|
|
12
|
+
descriptor.value = function (...args) {
|
|
13
|
+
const client = this; // eslint-disable-line @typescript-eslint/no-this-alias
|
|
14
|
+
if (!client.crypto) {
|
|
15
|
+
throw new Error("End-to-end encryption is not enabled");
|
|
16
|
+
}
|
|
17
|
+
return originalMethod.apply(this, args);
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Flags a CryptoClient function as needing the CryptoClient to be ready.
|
|
23
|
+
* @category Encryption
|
|
24
|
+
*/
|
|
25
|
+
function requiresReady() {
|
|
26
|
+
return function (target, propertyKey, descriptor) {
|
|
27
|
+
const originalMethod = descriptor.value;
|
|
28
|
+
descriptor.value = function (...args) {
|
|
29
|
+
const crypto = this; // eslint-disable-line @typescript-eslint/no-this-alias
|
|
30
|
+
if (!crypto.isReady) {
|
|
31
|
+
throw new Error("End-to-end encryption has not initialized");
|
|
32
|
+
}
|
|
33
|
+
return originalMethod.apply(this, args);
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=decorators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/e2ee/decorators.ts"],"names":[],"mappings":";;AAOA,wCAYC;AAMD,sCAYC;AAlCD;;;GAGG;AACH,SAAgB,cAAc;IAC1B,OAAO,UAAS,MAAW,EAAE,WAAmB,EAAE,UAA8B;QAC5E,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;QACxC,UAAU,CAAC,KAAK,GAAG,UAAS,GAAG,IAAW;YACtC,MAAM,MAAM,GAAiB,IAAI,CAAC,CAAC,uDAAuD;YAC1F,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC5D,CAAC;YAED,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC,CAAC;IACN,CAAC,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,SAAgB,aAAa;IACzB,OAAO,UAAS,MAAW,EAAE,WAAmB,EAAE,UAA8B;QAC5E,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;QACxC,UAAU,CAAC,KAAK,GAAG,UAAS,GAAG,IAAW;YACtC,MAAM,MAAM,GAAiB,IAAI,CAAC,CAAC,uDAAuD;YAC1F,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YACjE,CAAC;YAED,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC,CAAC;IACN,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents a Matrix entity
|
|
3
|
+
* @category Utilities
|
|
4
|
+
*/
|
|
5
|
+
export declare class MatrixEntity {
|
|
6
|
+
private fullId;
|
|
7
|
+
private entityLocalpart;
|
|
8
|
+
private entityDomain;
|
|
9
|
+
/**
|
|
10
|
+
* Creates a new Matrix entity
|
|
11
|
+
* @param {string} fullId The full ID of the entity
|
|
12
|
+
*/
|
|
13
|
+
constructor(fullId: string);
|
|
14
|
+
/**
|
|
15
|
+
* The localpart for the entity
|
|
16
|
+
*/
|
|
17
|
+
get localpart(): string;
|
|
18
|
+
/**
|
|
19
|
+
* The domain for the entity
|
|
20
|
+
*/
|
|
21
|
+
get domain(): string;
|
|
22
|
+
toString(): string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Represents a Matrix user ID
|
|
26
|
+
* @category Utilities
|
|
27
|
+
*/
|
|
28
|
+
export declare class UserID extends MatrixEntity {
|
|
29
|
+
constructor(userId: string);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Represents a Matrix room alias
|
|
33
|
+
* @category Utilities
|
|
34
|
+
*/
|
|
35
|
+
export declare class RoomAlias extends MatrixEntity {
|
|
36
|
+
constructor(alias: string);
|
|
37
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RoomAlias = exports.UserID = exports.MatrixEntity = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Represents a Matrix entity
|
|
6
|
+
* @category Utilities
|
|
7
|
+
*/
|
|
8
|
+
class MatrixEntity {
|
|
9
|
+
/**
|
|
10
|
+
* Creates a new Matrix entity
|
|
11
|
+
* @param {string} fullId The full ID of the entity
|
|
12
|
+
*/
|
|
13
|
+
constructor(fullId) {
|
|
14
|
+
this.fullId = fullId;
|
|
15
|
+
if (!fullId)
|
|
16
|
+
throw new Error("No entity ID provided");
|
|
17
|
+
if (fullId.length < 2)
|
|
18
|
+
throw new Error("ID too short");
|
|
19
|
+
const parts = fullId.split(/:/g);
|
|
20
|
+
this.entityLocalpart = parts[0].substring(1);
|
|
21
|
+
this.entityDomain = parts.splice(1).join(':');
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The localpart for the entity
|
|
25
|
+
*/
|
|
26
|
+
get localpart() {
|
|
27
|
+
return this.entityLocalpart;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The domain for the entity
|
|
31
|
+
*/
|
|
32
|
+
get domain() {
|
|
33
|
+
return this.entityDomain;
|
|
34
|
+
}
|
|
35
|
+
// override
|
|
36
|
+
toString() {
|
|
37
|
+
return this.fullId;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.MatrixEntity = MatrixEntity;
|
|
41
|
+
/**
|
|
42
|
+
* Represents a Matrix user ID
|
|
43
|
+
* @category Utilities
|
|
44
|
+
*/
|
|
45
|
+
class UserID extends MatrixEntity {
|
|
46
|
+
constructor(userId) {
|
|
47
|
+
super(userId);
|
|
48
|
+
if (!userId.startsWith("@")) {
|
|
49
|
+
throw new Error("Not a valid user ID");
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.UserID = UserID;
|
|
54
|
+
/**
|
|
55
|
+
* Represents a Matrix room alias
|
|
56
|
+
* @category Utilities
|
|
57
|
+
*/
|
|
58
|
+
class RoomAlias extends MatrixEntity {
|
|
59
|
+
constructor(alias) {
|
|
60
|
+
super(alias);
|
|
61
|
+
if (!alias.startsWith("#")) {
|
|
62
|
+
throw new Error("Not a valid room alias");
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.RoomAlias = RoomAlias;
|
|
67
|
+
//# sourceMappingURL=MatrixEntity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MatrixEntity.js","sourceRoot":"","sources":["../../src/helpers/MatrixEntity.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,MAAa,YAAY;IAIrB;;;OAGG;IACH,YAAoB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QAC9B,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACtD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,WAAW;IACJ,QAAQ;QACX,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;CACJ;AAlCD,oCAkCC;AAED;;;GAGG;AACH,MAAa,MAAO,SAAQ,YAAY;IACpC,YAAY,MAAc;QACtB,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC3C,CAAC;IACL,CAAC;CACJ;AAPD,wBAOC;AAED;;;GAGG;AACH,MAAa,SAAU,SAAQ,YAAY;IACvC,YAAY,KAAa;QACrB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC;CACJ;AAPD,8BAOC"}
|