@unwanted/matrix-sdk-mini 34.12.0 → 34.13.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.
Files changed (698) hide show
  1. package/git-revision.txt +1 -1
  2. package/lib/@types/event.d.ts +0 -19
  3. package/lib/@types/event.d.ts.map +1 -1
  4. package/lib/@types/event.js.map +1 -1
  5. package/lib/@types/global.d.js +0 -2
  6. package/lib/@types/global.d.js.map +1 -1
  7. package/lib/autodiscovery.d.ts +1 -1
  8. package/lib/autodiscovery.d.ts.map +1 -1
  9. package/lib/autodiscovery.js.map +1 -1
  10. package/lib/base64.d.ts +3 -6
  11. package/lib/base64.d.ts.map +1 -1
  12. package/lib/base64.js +43 -36
  13. package/lib/base64.js.map +1 -1
  14. package/lib/browser-index.d.ts.map +1 -1
  15. package/lib/browser-index.js +0 -11
  16. package/lib/browser-index.js.map +1 -1
  17. package/lib/client.d.ts +2 -1298
  18. package/lib/client.d.ts.map +1 -1
  19. package/lib/client.js +348 -2967
  20. package/lib/client.js.map +1 -1
  21. package/lib/digest.d.ts +2 -2
  22. package/lib/digest.d.ts.map +1 -1
  23. package/lib/digest.js +2 -2
  24. package/lib/digest.js.map +1 -1
  25. package/lib/embedded.d.ts +0 -22
  26. package/lib/embedded.d.ts.map +1 -1
  27. package/lib/embedded.js +58 -168
  28. package/lib/embedded.js.map +1 -1
  29. package/lib/event-mapper.d.ts.map +1 -1
  30. package/lib/event-mapper.js +0 -4
  31. package/lib/event-mapper.js.map +1 -1
  32. package/lib/matrix.d.ts +0 -25
  33. package/lib/matrix.d.ts.map +1 -1
  34. package/lib/matrix.js +1 -30
  35. package/lib/matrix.js.map +1 -1
  36. package/lib/models/MSC3089Branch.d.ts.map +1 -1
  37. package/lib/models/MSC3089Branch.js +0 -3
  38. package/lib/models/MSC3089Branch.js.map +1 -1
  39. package/lib/models/event-timeline-set.d.ts +6 -10
  40. package/lib/models/event-timeline-set.d.ts.map +1 -1
  41. package/lib/models/event-timeline-set.js +28 -36
  42. package/lib/models/event-timeline-set.js.map +1 -1
  43. package/lib/models/event-timeline.d.ts +7 -2
  44. package/lib/models/event-timeline.d.ts.map +1 -1
  45. package/lib/models/event-timeline.js +8 -9
  46. package/lib/models/event-timeline.js.map +1 -1
  47. package/lib/models/event.d.ts +1 -95
  48. package/lib/models/event.d.ts.map +1 -1
  49. package/lib/models/event.js +11 -281
  50. package/lib/models/event.js.map +1 -1
  51. package/lib/models/poll.d.ts.map +1 -1
  52. package/lib/models/poll.js +1 -5
  53. package/lib/models/poll.js.map +1 -1
  54. package/lib/models/relations-container.d.ts.map +1 -1
  55. package/lib/models/relations-container.js +1 -7
  56. package/lib/models/relations-container.js.map +1 -1
  57. package/lib/models/relations.d.ts +0 -1
  58. package/lib/models/relations.d.ts.map +1 -1
  59. package/lib/models/relations.js +0 -8
  60. package/lib/models/relations.js.map +1 -1
  61. package/lib/models/room-state.d.ts +2 -13
  62. package/lib/models/room-state.d.ts.map +1 -1
  63. package/lib/models/room-state.js +12 -56
  64. package/lib/models/room-state.js.map +1 -1
  65. package/lib/models/room.d.ts +2 -20
  66. package/lib/models/room.d.ts.map +1 -1
  67. package/lib/models/room.js +121 -162
  68. package/lib/models/room.js.map +1 -1
  69. package/lib/models/thread.d.ts.map +1 -1
  70. package/lib/models/thread.js +5 -4
  71. package/lib/models/thread.js.map +1 -1
  72. package/lib/sliding-sync-sdk.d.ts +3 -4
  73. package/lib/sliding-sync-sdk.d.ts.map +1 -1
  74. package/lib/sliding-sync-sdk.js +55 -102
  75. package/lib/sliding-sync-sdk.js.map +1 -1
  76. package/lib/sliding-sync.js +9 -6
  77. package/lib/sliding-sync.js.map +1 -1
  78. package/lib/store/indexeddb.d.ts +1 -1
  79. package/lib/store/indexeddb.d.ts.map +1 -1
  80. package/lib/store/indexeddb.js.map +1 -1
  81. package/lib/sync-accumulator.d.ts +6 -4
  82. package/lib/sync-accumulator.d.ts.map +1 -1
  83. package/lib/sync-accumulator.js +23 -12
  84. package/lib/sync-accumulator.js.map +1 -1
  85. package/lib/sync.d.ts +10 -13
  86. package/lib/sync.d.ts.map +1 -1
  87. package/lib/sync.js +94 -115
  88. package/lib/sync.js.map +1 -1
  89. package/lib/testing.d.ts +0 -48
  90. package/lib/testing.d.ts.map +1 -1
  91. package/lib/testing.js +0 -105
  92. package/lib/testing.js.map +1 -1
  93. package/lib/types.d.ts +0 -1
  94. package/lib/types.d.ts.map +1 -1
  95. package/lib/types.js.map +1 -1
  96. package/package.json +10 -11
  97. package/src/@types/event.ts +2 -36
  98. package/src/@types/global.d.ts +21 -4
  99. package/src/autodiscovery.ts +1 -1
  100. package/src/base64.ts +38 -40
  101. package/src/browser-index.ts +0 -11
  102. package/src/client.ts +68 -3087
  103. package/src/digest.ts +3 -3
  104. package/src/embedded.ts +38 -134
  105. package/src/event-mapper.ts +0 -4
  106. package/src/matrix.ts +0 -41
  107. package/src/models/MSC3089Branch.ts +0 -3
  108. package/src/models/event-timeline-set.ts +17 -38
  109. package/src/models/event-timeline.ts +10 -5
  110. package/src/models/event.ts +8 -295
  111. package/src/models/poll.ts +0 -6
  112. package/src/models/relations-container.ts +1 -8
  113. package/src/models/relations.ts +0 -8
  114. package/src/models/room-state.ts +4 -37
  115. package/src/models/room.ts +18 -68
  116. package/src/models/thread.ts +4 -3
  117. package/src/sliding-sync-sdk.ts +10 -83
  118. package/src/sliding-sync.ts +6 -6
  119. package/src/store/indexeddb.ts +1 -1
  120. package/src/sync-accumulator.ts +33 -16
  121. package/src/sync.ts +112 -143
  122. package/src/testing.ts +0 -108
  123. package/src/types.ts +0 -1
  124. package/CHANGELOG.md +0 -5910
  125. package/lib/@types/AESEncryptedSecretStoragePayload.d.ts +0 -14
  126. package/lib/@types/AESEncryptedSecretStoragePayload.d.ts.map +0 -1
  127. package/lib/@types/AESEncryptedSecretStoragePayload.js +0 -1
  128. package/lib/@types/AESEncryptedSecretStoragePayload.js.map +0 -1
  129. package/lib/@types/crypto.d.ts +0 -47
  130. package/lib/@types/crypto.d.ts.map +0 -1
  131. package/lib/@types/crypto.js +0 -1
  132. package/lib/@types/crypto.js.map +0 -1
  133. package/lib/@types/matrix-sdk-crypto-wasm.d.js +0 -1
  134. package/lib/@types/matrix-sdk-crypto-wasm.d.js.map +0 -1
  135. package/lib/common-crypto/CryptoBackend.d.ts +0 -240
  136. package/lib/common-crypto/CryptoBackend.d.ts.map +0 -1
  137. package/lib/common-crypto/CryptoBackend.js +0 -73
  138. package/lib/common-crypto/CryptoBackend.js.map +0 -1
  139. package/lib/common-crypto/key-passphrase.d.ts +0 -14
  140. package/lib/common-crypto/key-passphrase.d.ts.map +0 -1
  141. package/lib/common-crypto/key-passphrase.js +0 -33
  142. package/lib/common-crypto/key-passphrase.js.map +0 -1
  143. package/lib/crypto/CrossSigning.d.ts +0 -184
  144. package/lib/crypto/CrossSigning.d.ts.map +0 -1
  145. package/lib/crypto/CrossSigning.js +0 -718
  146. package/lib/crypto/CrossSigning.js.map +0 -1
  147. package/lib/crypto/DeviceList.d.ts +0 -216
  148. package/lib/crypto/DeviceList.d.ts.map +0 -1
  149. package/lib/crypto/DeviceList.js +0 -892
  150. package/lib/crypto/DeviceList.js.map +0 -1
  151. package/lib/crypto/EncryptionSetup.d.ts +0 -152
  152. package/lib/crypto/EncryptionSetup.d.ts.map +0 -1
  153. package/lib/crypto/EncryptionSetup.js +0 -356
  154. package/lib/crypto/EncryptionSetup.js.map +0 -1
  155. package/lib/crypto/OlmDevice.d.ts +0 -457
  156. package/lib/crypto/OlmDevice.d.ts.map +0 -1
  157. package/lib/crypto/OlmDevice.js +0 -1241
  158. package/lib/crypto/OlmDevice.js.map +0 -1
  159. package/lib/crypto/OutgoingRoomKeyRequestManager.d.ts +0 -109
  160. package/lib/crypto/OutgoingRoomKeyRequestManager.d.ts.map +0 -1
  161. package/lib/crypto/OutgoingRoomKeyRequestManager.js +0 -415
  162. package/lib/crypto/OutgoingRoomKeyRequestManager.js.map +0 -1
  163. package/lib/crypto/RoomList.d.ts +0 -26
  164. package/lib/crypto/RoomList.d.ts.map +0 -1
  165. package/lib/crypto/RoomList.js +0 -71
  166. package/lib/crypto/RoomList.js.map +0 -1
  167. package/lib/crypto/SecretSharing.d.ts +0 -24
  168. package/lib/crypto/SecretSharing.d.ts.map +0 -1
  169. package/lib/crypto/SecretSharing.js +0 -194
  170. package/lib/crypto/SecretSharing.js.map +0 -1
  171. package/lib/crypto/SecretStorage.d.ts +0 -55
  172. package/lib/crypto/SecretStorage.d.ts.map +0 -1
  173. package/lib/crypto/SecretStorage.js +0 -118
  174. package/lib/crypto/SecretStorage.js.map +0 -1
  175. package/lib/crypto/aes.d.ts +0 -6
  176. package/lib/crypto/aes.d.ts.map +0 -1
  177. package/lib/crypto/aes.js +0 -24
  178. package/lib/crypto/aes.js.map +0 -1
  179. package/lib/crypto/algorithms/base.d.ts +0 -156
  180. package/lib/crypto/algorithms/base.d.ts.map +0 -1
  181. package/lib/crypto/algorithms/base.js +0 -187
  182. package/lib/crypto/algorithms/base.js.map +0 -1
  183. package/lib/crypto/algorithms/index.d.ts +0 -4
  184. package/lib/crypto/algorithms/index.d.ts.map +0 -1
  185. package/lib/crypto/algorithms/index.js +0 -20
  186. package/lib/crypto/algorithms/index.js.map +0 -1
  187. package/lib/crypto/algorithms/megolm.d.ts +0 -385
  188. package/lib/crypto/algorithms/megolm.d.ts.map +0 -1
  189. package/lib/crypto/algorithms/megolm.js +0 -1822
  190. package/lib/crypto/algorithms/megolm.js.map +0 -1
  191. package/lib/crypto/algorithms/olm.d.ts +0 -5
  192. package/lib/crypto/algorithms/olm.d.ts.map +0 -1
  193. package/lib/crypto/algorithms/olm.js +0 -299
  194. package/lib/crypto/algorithms/olm.js.map +0 -1
  195. package/lib/crypto/api.d.ts +0 -32
  196. package/lib/crypto/api.d.ts.map +0 -1
  197. package/lib/crypto/api.js +0 -22
  198. package/lib/crypto/api.js.map +0 -1
  199. package/lib/crypto/backup.d.ts +0 -227
  200. package/lib/crypto/backup.d.ts.map +0 -1
  201. package/lib/crypto/backup.js +0 -824
  202. package/lib/crypto/backup.js.map +0 -1
  203. package/lib/crypto/crypto.d.ts +0 -3
  204. package/lib/crypto/crypto.d.ts.map +0 -1
  205. package/lib/crypto/crypto.js +0 -19
  206. package/lib/crypto/crypto.js.map +0 -1
  207. package/lib/crypto/dehydration.d.ts +0 -34
  208. package/lib/crypto/dehydration.d.ts.map +0 -1
  209. package/lib/crypto/dehydration.js +0 -252
  210. package/lib/crypto/dehydration.js.map +0 -1
  211. package/lib/crypto/device-converter.d.ts +0 -9
  212. package/lib/crypto/device-converter.d.ts.map +0 -1
  213. package/lib/crypto/device-converter.js +0 -42
  214. package/lib/crypto/device-converter.js.map +0 -1
  215. package/lib/crypto/deviceinfo.d.ts +0 -99
  216. package/lib/crypto/deviceinfo.d.ts.map +0 -1
  217. package/lib/crypto/deviceinfo.js +0 -148
  218. package/lib/crypto/deviceinfo.js.map +0 -1
  219. package/lib/crypto/index.d.ts +0 -1210
  220. package/lib/crypto/index.d.ts.map +0 -1
  221. package/lib/crypto/index.js +0 -4101
  222. package/lib/crypto/index.js.map +0 -1
  223. package/lib/crypto/key_passphrase.d.ts +0 -14
  224. package/lib/crypto/key_passphrase.d.ts.map +0 -1
  225. package/lib/crypto/key_passphrase.js +0 -44
  226. package/lib/crypto/key_passphrase.js.map +0 -1
  227. package/lib/crypto/keybackup.d.ts +0 -18
  228. package/lib/crypto/keybackup.d.ts.map +0 -1
  229. package/lib/crypto/keybackup.js +0 -1
  230. package/lib/crypto/keybackup.js.map +0 -1
  231. package/lib/crypto/olmlib.d.ts +0 -129
  232. package/lib/crypto/olmlib.d.ts.map +0 -1
  233. package/lib/crypto/olmlib.js +0 -492
  234. package/lib/crypto/olmlib.js.map +0 -1
  235. package/lib/crypto/recoverykey.d.ts +0 -2
  236. package/lib/crypto/recoverykey.d.ts.map +0 -1
  237. package/lib/crypto/recoverykey.js +0 -19
  238. package/lib/crypto/recoverykey.js.map +0 -1
  239. package/lib/crypto/store/base.d.ts +0 -252
  240. package/lib/crypto/store/base.d.ts.map +0 -1
  241. package/lib/crypto/store/base.js +0 -64
  242. package/lib/crypto/store/base.js.map +0 -1
  243. package/lib/crypto/store/indexeddb-crypto-store-backend.d.ts +0 -187
  244. package/lib/crypto/store/indexeddb-crypto-store-backend.d.ts.map +0 -1
  245. package/lib/crypto/store/indexeddb-crypto-store-backend.js +0 -1145
  246. package/lib/crypto/store/indexeddb-crypto-store-backend.js.map +0 -1
  247. package/lib/crypto/store/indexeddb-crypto-store.d.ts +0 -432
  248. package/lib/crypto/store/indexeddb-crypto-store.d.ts.map +0 -1
  249. package/lib/crypto/store/indexeddb-crypto-store.js +0 -728
  250. package/lib/crypto/store/indexeddb-crypto-store.js.map +0 -1
  251. package/lib/crypto/store/localStorage-crypto-store.d.ts +0 -119
  252. package/lib/crypto/store/localStorage-crypto-store.d.ts.map +0 -1
  253. package/lib/crypto/store/localStorage-crypto-store.js +0 -531
  254. package/lib/crypto/store/localStorage-crypto-store.js.map +0 -1
  255. package/lib/crypto/store/memory-crypto-store.d.ts +0 -215
  256. package/lib/crypto/store/memory-crypto-store.d.ts.map +0 -1
  257. package/lib/crypto/store/memory-crypto-store.js +0 -622
  258. package/lib/crypto/store/memory-crypto-store.js.map +0 -1
  259. package/lib/crypto/verification/Base.d.ts +0 -105
  260. package/lib/crypto/verification/Base.d.ts.map +0 -1
  261. package/lib/crypto/verification/Base.js +0 -372
  262. package/lib/crypto/verification/Base.js.map +0 -1
  263. package/lib/crypto/verification/Error.d.ts +0 -35
  264. package/lib/crypto/verification/Error.d.ts.map +0 -1
  265. package/lib/crypto/verification/Error.js +0 -86
  266. package/lib/crypto/verification/Error.js.map +0 -1
  267. package/lib/crypto/verification/IllegalMethod.d.ts +0 -15
  268. package/lib/crypto/verification/IllegalMethod.d.ts.map +0 -1
  269. package/lib/crypto/verification/IllegalMethod.js +0 -43
  270. package/lib/crypto/verification/IllegalMethod.js.map +0 -1
  271. package/lib/crypto/verification/QRCode.d.ts +0 -51
  272. package/lib/crypto/verification/QRCode.d.ts.map +0 -1
  273. package/lib/crypto/verification/QRCode.js +0 -277
  274. package/lib/crypto/verification/QRCode.js.map +0 -1
  275. package/lib/crypto/verification/SAS.d.ts +0 -27
  276. package/lib/crypto/verification/SAS.d.ts.map +0 -1
  277. package/lib/crypto/verification/SAS.js +0 -485
  278. package/lib/crypto/verification/SAS.js.map +0 -1
  279. package/lib/crypto/verification/SASDecimal.d.ts +0 -8
  280. package/lib/crypto/verification/SASDecimal.d.ts.map +0 -1
  281. package/lib/crypto/verification/SASDecimal.js +0 -34
  282. package/lib/crypto/verification/SASDecimal.js.map +0 -1
  283. package/lib/crypto/verification/request/Channel.d.ts +0 -18
  284. package/lib/crypto/verification/request/Channel.d.ts.map +0 -1
  285. package/lib/crypto/verification/request/Channel.js +0 -1
  286. package/lib/crypto/verification/request/Channel.js.map +0 -1
  287. package/lib/crypto/verification/request/InRoomChannel.d.ts +0 -113
  288. package/lib/crypto/verification/request/InRoomChannel.d.ts.map +0 -1
  289. package/lib/crypto/verification/request/InRoomChannel.js +0 -351
  290. package/lib/crypto/verification/request/InRoomChannel.js.map +0 -1
  291. package/lib/crypto/verification/request/ToDeviceChannel.d.ts +0 -105
  292. package/lib/crypto/verification/request/ToDeviceChannel.d.ts.map +0 -1
  293. package/lib/crypto/verification/request/ToDeviceChannel.js +0 -328
  294. package/lib/crypto/verification/request/ToDeviceChannel.js.map +0 -1
  295. package/lib/crypto/verification/request/VerificationRequest.d.ts +0 -227
  296. package/lib/crypto/verification/request/VerificationRequest.d.ts.map +0 -1
  297. package/lib/crypto/verification/request/VerificationRequest.js +0 -937
  298. package/lib/crypto/verification/request/VerificationRequest.js.map +0 -1
  299. package/lib/crypto-api/CryptoEvent.d.ts +0 -69
  300. package/lib/crypto-api/CryptoEvent.d.ts.map +0 -1
  301. package/lib/crypto-api/CryptoEvent.js +0 -33
  302. package/lib/crypto-api/CryptoEvent.js.map +0 -1
  303. package/lib/crypto-api/CryptoEventHandlerMap.d.ts +0 -16
  304. package/lib/crypto-api/CryptoEventHandlerMap.d.ts.map +0 -1
  305. package/lib/crypto-api/CryptoEventHandlerMap.js +0 -22
  306. package/lib/crypto-api/CryptoEventHandlerMap.js.map +0 -1
  307. package/lib/crypto-api/index.d.ts +0 -978
  308. package/lib/crypto-api/index.d.ts.map +0 -1
  309. package/lib/crypto-api/index.js +0 -304
  310. package/lib/crypto-api/index.js.map +0 -1
  311. package/lib/crypto-api/key-passphrase.d.ts +0 -11
  312. package/lib/crypto-api/key-passphrase.d.ts.map +0 -1
  313. package/lib/crypto-api/key-passphrase.js +0 -51
  314. package/lib/crypto-api/key-passphrase.js.map +0 -1
  315. package/lib/crypto-api/keybackup.d.ts +0 -88
  316. package/lib/crypto-api/keybackup.d.ts.map +0 -1
  317. package/lib/crypto-api/keybackup.js +0 -1
  318. package/lib/crypto-api/keybackup.js.map +0 -1
  319. package/lib/crypto-api/recovery-key.d.ts +0 -11
  320. package/lib/crypto-api/recovery-key.d.ts.map +0 -1
  321. package/lib/crypto-api/recovery-key.js +0 -65
  322. package/lib/crypto-api/recovery-key.js.map +0 -1
  323. package/lib/crypto-api/verification.d.ts +0 -344
  324. package/lib/crypto-api/verification.d.ts.map +0 -1
  325. package/lib/crypto-api/verification.js +0 -91
  326. package/lib/crypto-api/verification.js.map +0 -1
  327. package/lib/matrixrtc/CallMembership.d.ts +0 -66
  328. package/lib/matrixrtc/CallMembership.d.ts.map +0 -1
  329. package/lib/matrixrtc/CallMembership.js +0 -197
  330. package/lib/matrixrtc/CallMembership.js.map +0 -1
  331. package/lib/matrixrtc/LivekitFocus.d.ts +0 -16
  332. package/lib/matrixrtc/LivekitFocus.d.ts.map +0 -1
  333. package/lib/matrixrtc/LivekitFocus.js +0 -20
  334. package/lib/matrixrtc/LivekitFocus.js.map +0 -1
  335. package/lib/matrixrtc/MatrixRTCSession.d.ts +0 -295
  336. package/lib/matrixrtc/MatrixRTCSession.d.ts.map +0 -1
  337. package/lib/matrixrtc/MatrixRTCSession.js +0 -1043
  338. package/lib/matrixrtc/MatrixRTCSession.js.map +0 -1
  339. package/lib/matrixrtc/MatrixRTCSessionManager.d.ts +0 -40
  340. package/lib/matrixrtc/MatrixRTCSessionManager.d.ts.map +0 -1
  341. package/lib/matrixrtc/MatrixRTCSessionManager.js +0 -146
  342. package/lib/matrixrtc/MatrixRTCSessionManager.js.map +0 -1
  343. package/lib/matrixrtc/focus.d.ts +0 -10
  344. package/lib/matrixrtc/focus.d.ts.map +0 -1
  345. package/lib/matrixrtc/focus.js +0 -1
  346. package/lib/matrixrtc/focus.js.map +0 -1
  347. package/lib/matrixrtc/index.d.ts +0 -7
  348. package/lib/matrixrtc/index.d.ts.map +0 -1
  349. package/lib/matrixrtc/index.js +0 -21
  350. package/lib/matrixrtc/index.js.map +0 -1
  351. package/lib/matrixrtc/types.d.ts +0 -19
  352. package/lib/matrixrtc/types.d.ts.map +0 -1
  353. package/lib/matrixrtc/types.js +0 -1
  354. package/lib/matrixrtc/types.js.map +0 -1
  355. package/lib/rendezvous/MSC4108SignInWithQR.d.ts +0 -112
  356. package/lib/rendezvous/MSC4108SignInWithQR.d.ts.map +0 -1
  357. package/lib/rendezvous/MSC4108SignInWithQR.js +0 -392
  358. package/lib/rendezvous/MSC4108SignInWithQR.js.map +0 -1
  359. package/lib/rendezvous/RendezvousChannel.d.ts +0 -27
  360. package/lib/rendezvous/RendezvousChannel.d.ts.map +0 -1
  361. package/lib/rendezvous/RendezvousChannel.js +0 -1
  362. package/lib/rendezvous/RendezvousChannel.js.map +0 -1
  363. package/lib/rendezvous/RendezvousCode.d.ts +0 -9
  364. package/lib/rendezvous/RendezvousCode.d.ts.map +0 -1
  365. package/lib/rendezvous/RendezvousCode.js +0 -1
  366. package/lib/rendezvous/RendezvousCode.js.map +0 -1
  367. package/lib/rendezvous/RendezvousError.d.ts +0 -6
  368. package/lib/rendezvous/RendezvousError.d.ts.map +0 -1
  369. package/lib/rendezvous/RendezvousError.js +0 -23
  370. package/lib/rendezvous/RendezvousError.js.map +0 -1
  371. package/lib/rendezvous/RendezvousFailureReason.d.ts +0 -31
  372. package/lib/rendezvous/RendezvousFailureReason.d.ts.map +0 -1
  373. package/lib/rendezvous/RendezvousFailureReason.js +0 -38
  374. package/lib/rendezvous/RendezvousFailureReason.js.map +0 -1
  375. package/lib/rendezvous/RendezvousIntent.d.ts +0 -5
  376. package/lib/rendezvous/RendezvousIntent.d.ts.map +0 -1
  377. package/lib/rendezvous/RendezvousIntent.js +0 -22
  378. package/lib/rendezvous/RendezvousIntent.js.map +0 -1
  379. package/lib/rendezvous/RendezvousTransport.d.ts +0 -36
  380. package/lib/rendezvous/RendezvousTransport.d.ts.map +0 -1
  381. package/lib/rendezvous/RendezvousTransport.js +0 -1
  382. package/lib/rendezvous/RendezvousTransport.js.map +0 -1
  383. package/lib/rendezvous/channels/MSC4108SecureChannel.d.ts +0 -58
  384. package/lib/rendezvous/channels/MSC4108SecureChannel.d.ts.map +0 -1
  385. package/lib/rendezvous/channels/MSC4108SecureChannel.js +0 -246
  386. package/lib/rendezvous/channels/MSC4108SecureChannel.js.map +0 -1
  387. package/lib/rendezvous/channels/index.d.ts +0 -2
  388. package/lib/rendezvous/channels/index.d.ts.map +0 -1
  389. package/lib/rendezvous/channels/index.js +0 -18
  390. package/lib/rendezvous/channels/index.js.map +0 -1
  391. package/lib/rendezvous/index.d.ts +0 -10
  392. package/lib/rendezvous/index.d.ts.map +0 -1
  393. package/lib/rendezvous/index.js +0 -23
  394. package/lib/rendezvous/index.js.map +0 -1
  395. package/lib/rendezvous/transports/MSC4108RendezvousSession.d.ts +0 -61
  396. package/lib/rendezvous/transports/MSC4108RendezvousSession.d.ts.map +0 -1
  397. package/lib/rendezvous/transports/MSC4108RendezvousSession.js +0 -253
  398. package/lib/rendezvous/transports/MSC4108RendezvousSession.js.map +0 -1
  399. package/lib/rendezvous/transports/index.d.ts +0 -2
  400. package/lib/rendezvous/transports/index.d.ts.map +0 -1
  401. package/lib/rendezvous/transports/index.js +0 -18
  402. package/lib/rendezvous/transports/index.js.map +0 -1
  403. package/lib/rust-crypto/CrossSigningIdentity.d.ts +0 -33
  404. package/lib/rust-crypto/CrossSigningIdentity.d.ts.map +0 -1
  405. package/lib/rust-crypto/CrossSigningIdentity.js +0 -157
  406. package/lib/rust-crypto/CrossSigningIdentity.js.map +0 -1
  407. package/lib/rust-crypto/DehydratedDeviceManager.d.ts +0 -98
  408. package/lib/rust-crypto/DehydratedDeviceManager.d.ts.map +0 -1
  409. package/lib/rust-crypto/DehydratedDeviceManager.js +0 -285
  410. package/lib/rust-crypto/DehydratedDeviceManager.js.map +0 -1
  411. package/lib/rust-crypto/KeyClaimManager.d.ts +0 -33
  412. package/lib/rust-crypto/KeyClaimManager.d.ts.map +0 -1
  413. package/lib/rust-crypto/KeyClaimManager.js +0 -82
  414. package/lib/rust-crypto/KeyClaimManager.js.map +0 -1
  415. package/lib/rust-crypto/OutgoingRequestProcessor.d.ts +0 -43
  416. package/lib/rust-crypto/OutgoingRequestProcessor.d.ts.map +0 -1
  417. package/lib/rust-crypto/OutgoingRequestProcessor.js +0 -195
  418. package/lib/rust-crypto/OutgoingRequestProcessor.js.map +0 -1
  419. package/lib/rust-crypto/OutgoingRequestsManager.d.ts +0 -47
  420. package/lib/rust-crypto/OutgoingRequestsManager.d.ts.map +0 -1
  421. package/lib/rust-crypto/OutgoingRequestsManager.js +0 -148
  422. package/lib/rust-crypto/OutgoingRequestsManager.js.map +0 -1
  423. package/lib/rust-crypto/PerSessionKeyBackupDownloader.d.ts +0 -120
  424. package/lib/rust-crypto/PerSessionKeyBackupDownloader.d.ts.map +0 -1
  425. package/lib/rust-crypto/PerSessionKeyBackupDownloader.js +0 -467
  426. package/lib/rust-crypto/PerSessionKeyBackupDownloader.js.map +0 -1
  427. package/lib/rust-crypto/RoomEncryptor.d.ts +0 -98
  428. package/lib/rust-crypto/RoomEncryptor.d.ts.map +0 -1
  429. package/lib/rust-crypto/RoomEncryptor.js +0 -299
  430. package/lib/rust-crypto/RoomEncryptor.js.map +0 -1
  431. package/lib/rust-crypto/backup.d.ts +0 -254
  432. package/lib/rust-crypto/backup.d.ts.map +0 -1
  433. package/lib/rust-crypto/backup.js +0 -837
  434. package/lib/rust-crypto/backup.js.map +0 -1
  435. package/lib/rust-crypto/constants.d.ts +0 -3
  436. package/lib/rust-crypto/constants.d.ts.map +0 -1
  437. package/lib/rust-crypto/constants.js +0 -19
  438. package/lib/rust-crypto/constants.js.map +0 -1
  439. package/lib/rust-crypto/device-converter.d.ts +0 -28
  440. package/lib/rust-crypto/device-converter.d.ts.map +0 -1
  441. package/lib/rust-crypto/device-converter.js +0 -123
  442. package/lib/rust-crypto/device-converter.js.map +0 -1
  443. package/lib/rust-crypto/index.d.ts +0 -61
  444. package/lib/rust-crypto/index.d.ts.map +0 -1
  445. package/lib/rust-crypto/index.js +0 -152
  446. package/lib/rust-crypto/index.js.map +0 -1
  447. package/lib/rust-crypto/libolm_migration.d.ts +0 -81
  448. package/lib/rust-crypto/libolm_migration.d.ts.map +0 -1
  449. package/lib/rust-crypto/libolm_migration.js +0 -459
  450. package/lib/rust-crypto/libolm_migration.js.map +0 -1
  451. package/lib/rust-crypto/rust-crypto.d.ts +0 -556
  452. package/lib/rust-crypto/rust-crypto.d.ts.map +0 -1
  453. package/lib/rust-crypto/rust-crypto.js +0 -2016
  454. package/lib/rust-crypto/rust-crypto.js.map +0 -1
  455. package/lib/rust-crypto/secret-storage.d.ts +0 -22
  456. package/lib/rust-crypto/secret-storage.d.ts.map +0 -1
  457. package/lib/rust-crypto/secret-storage.js +0 -63
  458. package/lib/rust-crypto/secret-storage.js.map +0 -1
  459. package/lib/rust-crypto/verification.d.ts +0 -319
  460. package/lib/rust-crypto/verification.d.ts.map +0 -1
  461. package/lib/rust-crypto/verification.js +0 -816
  462. package/lib/rust-crypto/verification.js.map +0 -1
  463. package/lib/secret-storage.d.ts +0 -370
  464. package/lib/secret-storage.d.ts.map +0 -1
  465. package/lib/secret-storage.js +0 -466
  466. package/lib/secret-storage.js.map +0 -1
  467. package/lib/utils/decryptAESSecretStorageItem.d.ts +0 -12
  468. package/lib/utils/decryptAESSecretStorageItem.d.ts.map +0 -1
  469. package/lib/utils/decryptAESSecretStorageItem.js +0 -50
  470. package/lib/utils/decryptAESSecretStorageItem.js.map +0 -1
  471. package/lib/utils/encryptAESSecretStorageItem.d.ts +0 -16
  472. package/lib/utils/encryptAESSecretStorageItem.d.ts.map +0 -1
  473. package/lib/utils/encryptAESSecretStorageItem.js +0 -68
  474. package/lib/utils/encryptAESSecretStorageItem.js.map +0 -1
  475. package/lib/utils/internal/deriveKeys.d.ts +0 -10
  476. package/lib/utils/internal/deriveKeys.d.ts.map +0 -1
  477. package/lib/utils/internal/deriveKeys.js +0 -60
  478. package/lib/utils/internal/deriveKeys.js.map +0 -1
  479. package/lib/webrtc/audioContext.d.ts +0 -15
  480. package/lib/webrtc/audioContext.d.ts.map +0 -1
  481. package/lib/webrtc/audioContext.js +0 -46
  482. package/lib/webrtc/audioContext.js.map +0 -1
  483. package/lib/webrtc/call.d.ts +0 -560
  484. package/lib/webrtc/call.d.ts.map +0 -1
  485. package/lib/webrtc/call.js +0 -2541
  486. package/lib/webrtc/call.js.map +0 -1
  487. package/lib/webrtc/callEventHandler.d.ts +0 -37
  488. package/lib/webrtc/callEventHandler.d.ts.map +0 -1
  489. package/lib/webrtc/callEventHandler.js +0 -344
  490. package/lib/webrtc/callEventHandler.js.map +0 -1
  491. package/lib/webrtc/callEventTypes.d.ts +0 -73
  492. package/lib/webrtc/callEventTypes.d.ts.map +0 -1
  493. package/lib/webrtc/callEventTypes.js +0 -13
  494. package/lib/webrtc/callEventTypes.js.map +0 -1
  495. package/lib/webrtc/callFeed.d.ts +0 -128
  496. package/lib/webrtc/callFeed.d.ts.map +0 -1
  497. package/lib/webrtc/callFeed.js +0 -289
  498. package/lib/webrtc/callFeed.js.map +0 -1
  499. package/lib/webrtc/groupCall.d.ts +0 -323
  500. package/lib/webrtc/groupCall.d.ts.map +0 -1
  501. package/lib/webrtc/groupCall.js +0 -1337
  502. package/lib/webrtc/groupCall.js.map +0 -1
  503. package/lib/webrtc/groupCallEventHandler.d.ts +0 -31
  504. package/lib/webrtc/groupCallEventHandler.d.ts.map +0 -1
  505. package/lib/webrtc/groupCallEventHandler.js +0 -178
  506. package/lib/webrtc/groupCallEventHandler.js.map +0 -1
  507. package/lib/webrtc/mediaHandler.d.ts +0 -89
  508. package/lib/webrtc/mediaHandler.d.ts.map +0 -1
  509. package/lib/webrtc/mediaHandler.js +0 -437
  510. package/lib/webrtc/mediaHandler.js.map +0 -1
  511. package/lib/webrtc/stats/callFeedStatsReporter.d.ts +0 -8
  512. package/lib/webrtc/stats/callFeedStatsReporter.d.ts.map +0 -1
  513. package/lib/webrtc/stats/callFeedStatsReporter.js +0 -82
  514. package/lib/webrtc/stats/callFeedStatsReporter.js.map +0 -1
  515. package/lib/webrtc/stats/callStatsReportGatherer.d.ts +0 -25
  516. package/lib/webrtc/stats/callStatsReportGatherer.d.ts.map +0 -1
  517. package/lib/webrtc/stats/callStatsReportGatherer.js +0 -199
  518. package/lib/webrtc/stats/callStatsReportGatherer.js.map +0 -1
  519. package/lib/webrtc/stats/callStatsReportSummary.d.ts +0 -17
  520. package/lib/webrtc/stats/callStatsReportSummary.d.ts.map +0 -1
  521. package/lib/webrtc/stats/callStatsReportSummary.js +0 -1
  522. package/lib/webrtc/stats/callStatsReportSummary.js.map +0 -1
  523. package/lib/webrtc/stats/connectionStats.d.ts +0 -28
  524. package/lib/webrtc/stats/connectionStats.d.ts.map +0 -1
  525. package/lib/webrtc/stats/connectionStats.js +0 -26
  526. package/lib/webrtc/stats/connectionStats.js.map +0 -1
  527. package/lib/webrtc/stats/connectionStatsBuilder.d.ts +0 -5
  528. package/lib/webrtc/stats/connectionStatsBuilder.d.ts.map +0 -1
  529. package/lib/webrtc/stats/connectionStatsBuilder.js +0 -27
  530. package/lib/webrtc/stats/connectionStatsBuilder.js.map +0 -1
  531. package/lib/webrtc/stats/connectionStatsReportBuilder.d.ts +0 -7
  532. package/lib/webrtc/stats/connectionStatsReportBuilder.d.ts.map +0 -1
  533. package/lib/webrtc/stats/connectionStatsReportBuilder.js +0 -121
  534. package/lib/webrtc/stats/connectionStatsReportBuilder.js.map +0 -1
  535. package/lib/webrtc/stats/groupCallStats.d.ts +0 -22
  536. package/lib/webrtc/stats/groupCallStats.d.ts.map +0 -1
  537. package/lib/webrtc/stats/groupCallStats.js +0 -78
  538. package/lib/webrtc/stats/groupCallStats.js.map +0 -1
  539. package/lib/webrtc/stats/media/mediaSsrcHandler.d.ts +0 -10
  540. package/lib/webrtc/stats/media/mediaSsrcHandler.d.ts.map +0 -1
  541. package/lib/webrtc/stats/media/mediaSsrcHandler.js +0 -57
  542. package/lib/webrtc/stats/media/mediaSsrcHandler.js.map +0 -1
  543. package/lib/webrtc/stats/media/mediaTrackHandler.d.ts +0 -12
  544. package/lib/webrtc/stats/media/mediaTrackHandler.d.ts.map +0 -1
  545. package/lib/webrtc/stats/media/mediaTrackHandler.js +0 -62
  546. package/lib/webrtc/stats/media/mediaTrackHandler.js.map +0 -1
  547. package/lib/webrtc/stats/media/mediaTrackStats.d.ts +0 -86
  548. package/lib/webrtc/stats/media/mediaTrackStats.d.ts.map +0 -1
  549. package/lib/webrtc/stats/media/mediaTrackStats.js +0 -142
  550. package/lib/webrtc/stats/media/mediaTrackStats.js.map +0 -1
  551. package/lib/webrtc/stats/media/mediaTrackStatsHandler.d.ts +0 -22
  552. package/lib/webrtc/stats/media/mediaTrackStatsHandler.d.ts.map +0 -1
  553. package/lib/webrtc/stats/media/mediaTrackStatsHandler.js +0 -76
  554. package/lib/webrtc/stats/media/mediaTrackStatsHandler.js.map +0 -1
  555. package/lib/webrtc/stats/statsReport.d.ts +0 -99
  556. package/lib/webrtc/stats/statsReport.d.ts.map +0 -1
  557. package/lib/webrtc/stats/statsReport.js +0 -32
  558. package/lib/webrtc/stats/statsReport.js.map +0 -1
  559. package/lib/webrtc/stats/statsReportEmitter.d.ts +0 -15
  560. package/lib/webrtc/stats/statsReportEmitter.d.ts.map +0 -1
  561. package/lib/webrtc/stats/statsReportEmitter.js +0 -33
  562. package/lib/webrtc/stats/statsReportEmitter.js.map +0 -1
  563. package/lib/webrtc/stats/summaryStatsReportGatherer.d.ts +0 -16
  564. package/lib/webrtc/stats/summaryStatsReportGatherer.d.ts.map +0 -1
  565. package/lib/webrtc/stats/summaryStatsReportGatherer.js +0 -116
  566. package/lib/webrtc/stats/summaryStatsReportGatherer.js.map +0 -1
  567. package/lib/webrtc/stats/trackStatsBuilder.d.ts +0 -19
  568. package/lib/webrtc/stats/trackStatsBuilder.d.ts.map +0 -1
  569. package/lib/webrtc/stats/trackStatsBuilder.js +0 -168
  570. package/lib/webrtc/stats/trackStatsBuilder.js.map +0 -1
  571. package/lib/webrtc/stats/transportStats.d.ts +0 -11
  572. package/lib/webrtc/stats/transportStats.d.ts.map +0 -1
  573. package/lib/webrtc/stats/transportStats.js +0 -1
  574. package/lib/webrtc/stats/transportStats.js.map +0 -1
  575. package/lib/webrtc/stats/transportStatsBuilder.d.ts +0 -5
  576. package/lib/webrtc/stats/transportStatsBuilder.d.ts.map +0 -1
  577. package/lib/webrtc/stats/transportStatsBuilder.js +0 -34
  578. package/lib/webrtc/stats/transportStatsBuilder.js.map +0 -1
  579. package/lib/webrtc/stats/valueFormatter.d.ts +0 -4
  580. package/lib/webrtc/stats/valueFormatter.d.ts.map +0 -1
  581. package/lib/webrtc/stats/valueFormatter.js +0 -25
  582. package/lib/webrtc/stats/valueFormatter.js.map +0 -1
  583. package/src/@types/AESEncryptedSecretStoragePayload.ts +0 -29
  584. package/src/@types/crypto.ts +0 -73
  585. package/src/@types/matrix-sdk-crypto-wasm.d.ts +0 -44
  586. package/src/common-crypto/CryptoBackend.ts +0 -302
  587. package/src/common-crypto/README.md +0 -4
  588. package/src/common-crypto/key-passphrase.ts +0 -43
  589. package/src/crypto/CrossSigning.ts +0 -773
  590. package/src/crypto/DeviceList.ts +0 -989
  591. package/src/crypto/EncryptionSetup.ts +0 -351
  592. package/src/crypto/OlmDevice.ts +0 -1500
  593. package/src/crypto/OutgoingRoomKeyRequestManager.ts +0 -485
  594. package/src/crypto/RoomList.ts +0 -70
  595. package/src/crypto/SecretSharing.ts +0 -240
  596. package/src/crypto/SecretStorage.ts +0 -136
  597. package/src/crypto/aes.ts +0 -23
  598. package/src/crypto/algorithms/base.ts +0 -236
  599. package/src/crypto/algorithms/index.ts +0 -20
  600. package/src/crypto/algorithms/megolm.ts +0 -2216
  601. package/src/crypto/algorithms/olm.ts +0 -381
  602. package/src/crypto/api.ts +0 -70
  603. package/src/crypto/backup.ts +0 -922
  604. package/src/crypto/crypto.ts +0 -18
  605. package/src/crypto/dehydration.ts +0 -272
  606. package/src/crypto/device-converter.ts +0 -45
  607. package/src/crypto/deviceinfo.ts +0 -158
  608. package/src/crypto/index.ts +0 -4418
  609. package/src/crypto/key_passphrase.ts +0 -42
  610. package/src/crypto/keybackup.ts +0 -47
  611. package/src/crypto/olmlib.ts +0 -539
  612. package/src/crypto/recoverykey.ts +0 -18
  613. package/src/crypto/store/base.ts +0 -348
  614. package/src/crypto/store/indexeddb-crypto-store-backend.ts +0 -1250
  615. package/src/crypto/store/indexeddb-crypto-store.ts +0 -845
  616. package/src/crypto/store/localStorage-crypto-store.ts +0 -579
  617. package/src/crypto/store/memory-crypto-store.ts +0 -680
  618. package/src/crypto/verification/Base.ts +0 -409
  619. package/src/crypto/verification/Error.ts +0 -76
  620. package/src/crypto/verification/IllegalMethod.ts +0 -50
  621. package/src/crypto/verification/QRCode.ts +0 -310
  622. package/src/crypto/verification/SAS.ts +0 -494
  623. package/src/crypto/verification/SASDecimal.ts +0 -37
  624. package/src/crypto/verification/request/Channel.ts +0 -34
  625. package/src/crypto/verification/request/InRoomChannel.ts +0 -371
  626. package/src/crypto/verification/request/ToDeviceChannel.ts +0 -354
  627. package/src/crypto/verification/request/VerificationRequest.ts +0 -976
  628. package/src/crypto-api/CryptoEvent.ts +0 -93
  629. package/src/crypto-api/CryptoEventHandlerMap.ts +0 -32
  630. package/src/crypto-api/index.ts +0 -1175
  631. package/src/crypto-api/key-passphrase.ts +0 -58
  632. package/src/crypto-api/keybackup.ts +0 -115
  633. package/src/crypto-api/recovery-key.ts +0 -69
  634. package/src/crypto-api/verification.ts +0 -408
  635. package/src/matrixrtc/CallMembership.ts +0 -247
  636. package/src/matrixrtc/LivekitFocus.ts +0 -39
  637. package/src/matrixrtc/MatrixRTCSession.ts +0 -1319
  638. package/src/matrixrtc/MatrixRTCSessionManager.ts +0 -166
  639. package/src/matrixrtc/focus.ts +0 -25
  640. package/src/matrixrtc/index.ts +0 -22
  641. package/src/matrixrtc/types.ts +0 -36
  642. package/src/rendezvous/MSC4108SignInWithQR.ts +0 -444
  643. package/src/rendezvous/RendezvousChannel.ts +0 -48
  644. package/src/rendezvous/RendezvousCode.ts +0 -25
  645. package/src/rendezvous/RendezvousError.ts +0 -26
  646. package/src/rendezvous/RendezvousFailureReason.ts +0 -49
  647. package/src/rendezvous/RendezvousIntent.ts +0 -20
  648. package/src/rendezvous/RendezvousTransport.ts +0 -58
  649. package/src/rendezvous/channels/MSC4108SecureChannel.ts +0 -270
  650. package/src/rendezvous/channels/index.ts +0 -17
  651. package/src/rendezvous/index.ts +0 -25
  652. package/src/rendezvous/transports/MSC4108RendezvousSession.ts +0 -270
  653. package/src/rendezvous/transports/index.ts +0 -17
  654. package/src/rust-crypto/CrossSigningIdentity.ts +0 -183
  655. package/src/rust-crypto/DehydratedDeviceManager.ts +0 -306
  656. package/src/rust-crypto/KeyClaimManager.ts +0 -86
  657. package/src/rust-crypto/OutgoingRequestProcessor.ts +0 -236
  658. package/src/rust-crypto/OutgoingRequestsManager.ts +0 -143
  659. package/src/rust-crypto/PerSessionKeyBackupDownloader.ts +0 -501
  660. package/src/rust-crypto/RoomEncryptor.ts +0 -352
  661. package/src/rust-crypto/backup.ts +0 -881
  662. package/src/rust-crypto/constants.ts +0 -18
  663. package/src/rust-crypto/device-converter.ts +0 -128
  664. package/src/rust-crypto/index.ts +0 -237
  665. package/src/rust-crypto/libolm_migration.ts +0 -530
  666. package/src/rust-crypto/rust-crypto.ts +0 -2205
  667. package/src/rust-crypto/secret-storage.ts +0 -60
  668. package/src/rust-crypto/verification.ts +0 -830
  669. package/src/secret-storage.ts +0 -693
  670. package/src/utils/decryptAESSecretStorageItem.ts +0 -54
  671. package/src/utils/encryptAESSecretStorageItem.ts +0 -73
  672. package/src/utils/internal/deriveKeys.ts +0 -63
  673. package/src/webrtc/audioContext.ts +0 -44
  674. package/src/webrtc/call.ts +0 -3074
  675. package/src/webrtc/callEventHandler.ts +0 -425
  676. package/src/webrtc/callEventTypes.ts +0 -93
  677. package/src/webrtc/callFeed.ts +0 -364
  678. package/src/webrtc/groupCall.ts +0 -1735
  679. package/src/webrtc/groupCallEventHandler.ts +0 -234
  680. package/src/webrtc/mediaHandler.ts +0 -484
  681. package/src/webrtc/stats/callFeedStatsReporter.ts +0 -94
  682. package/src/webrtc/stats/callStatsReportGatherer.ts +0 -219
  683. package/src/webrtc/stats/callStatsReportSummary.ts +0 -30
  684. package/src/webrtc/stats/connectionStats.ts +0 -47
  685. package/src/webrtc/stats/connectionStatsBuilder.ts +0 -28
  686. package/src/webrtc/stats/connectionStatsReportBuilder.ts +0 -140
  687. package/src/webrtc/stats/groupCallStats.ts +0 -93
  688. package/src/webrtc/stats/media/mediaSsrcHandler.ts +0 -57
  689. package/src/webrtc/stats/media/mediaTrackHandler.ts +0 -76
  690. package/src/webrtc/stats/media/mediaTrackStats.ts +0 -176
  691. package/src/webrtc/stats/media/mediaTrackStatsHandler.ts +0 -90
  692. package/src/webrtc/stats/statsReport.ts +0 -133
  693. package/src/webrtc/stats/statsReportEmitter.ts +0 -49
  694. package/src/webrtc/stats/summaryStatsReportGatherer.ts +0 -148
  695. package/src/webrtc/stats/trackStatsBuilder.ts +0 -207
  696. package/src/webrtc/stats/transportStats.ts +0 -26
  697. package/src/webrtc/stats/transportStatsBuilder.ts +0 -48
  698. package/src/webrtc/stats/valueFormatter.ts +0 -27
@@ -1 +0,0 @@
1
- {"version":3,"file":"backup.js","names":["RustSdkCryptoJs","logger","ClientPrefix","MatrixError","Method","TypedEventEmitter","encodeUri","logDuration","sleep","CryptoEvent","RustBackupManager","constructor","olmMachine","http","outgoingRequestProcessor","_defineProperty","undefined","stop","stopped","getActiveBackupVersion","_this","_asyncToGenerator","isBackupEnabled","activeBackupVersion","getServerBackupInfo","_this2","checkKeyBackupAndEnable","serverBackupInfo","isKeyBackupTrusted","info","_this3","signatureVerification","verifyBackup","backupKeys","getBackupKeys","decryptionKey","backupMatchesSavedPrivateKey","backupInfoMatchesBackupDecryptionKey","matchesDecryptionKey","trusted","force","checkedForBackup","Promise","resolve","keyBackupCheckInProgress","doCheckKeyBackup","finally","handleBackupSecretReceived","secret","_this4","_backupCheck$backupIn","backupCheck","backupInfo","version","trustInfo","warn","backupDecryptionKey","BackupDecryptionKey","fromBase64","privateKeyMatches","saveBackupDecryptionKey","e","_this5","emit","KeyBackupDecryptionKeyCached","importRoomKeys","keys","opts","_this6","importRoomKeysAsJson","JSON","stringify","jsonKeys","_this7","importExportedRoomKeys","progress","total","_opts$progressCallbac","importOpt","Number","successes","stage","failures","progressCallback","call","importBackedUpRoomKeys","backupVersion","_this8","keysByRoom","Map","key","roomId","RoomId","room_id","has","set","get","session_id","_opts$progressCallbac2","_this9","log","requestKeyBackupVersion","activeVersion","disableKeyBackup","concat","enableKeyBackup","_this10","enableBackupV1","auth_data","public_key","KeyBackupStatus","backupKeysLoop","maybeUploadKey","_this11","_this12","disableBackup","_arguments","arguments","_this13","maxDelay","length","backupKeysLoopRunning","delay","Math","random","numFailures","remainingToUploadCount","isFirstIteration","request","backupRoomKeys","err","error","KeyBackupSessionsRemaining","makeOutgoingRequest","keyCount","roomKeyCounts","backedUp","keysCountInBatch","max","errCode","data","errcode","KeyBackupFailed","isRateLimitError","waitTime","getRetryAfterMs","pow","min","batch","parsedBody","parse","body","countKeysInBackup","_this14","setupKeyBackup","signObject","_this15","deleteAllKeyBackupVersions","randomKey","createRandomKey","pubKey","megolmV1PublicKey","authData","publicKeyBase64","res","authedRequest","Post","algorithm","prefix","V3","_this16","_yield$_this16$reques","_yield$_this16$reques2","current","_yield$_this16$reques3","_yield$_this16$reques4","deleteKeyBackupVersion","_this17","debug","path","$version","Delete","createBackupDecryptor","RustBackupDecryptor","restoreKeyBackup","backupDecryptor","_this18","_opts$progressCallbac3","keyBackup","downloadKeyBackup","importKeyBackup","Get","_this19","CHUNK_SIZE","totalKeyCount","totalImported","totalFailures","handleChunkCallback","_ref2","roomChunks","_opts$progressCallbac4","currentChunk","_loop","decryptedSessions","decryptSessions","forEach","session","push","_x","apply","groupChunkCount","chunkGroupByRoom","roomData","Object","entries","rooms","sessions","sessionId","sessionsForRoom","imported","_info$auth_data","sourceTrusted","ciphertexts","_this20","sessionData","decrypted","decryptV1","session_data","ephemeral","mac","ciphertext","free","_x2","_x3","_requestKeyBackupVersion","decryptionKeyMatchesKeyBackupInfo","keyBackupInfo","count","values"],"sources":["../../src/rust-crypto/backup.ts"],"sourcesContent":["/*\nCopyright 2023 - 2024 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { OlmMachine, SignatureVerification } from \"@matrix-org/matrix-sdk-crypto-wasm\";\nimport * as RustSdkCryptoJs from \"@matrix-org/matrix-sdk-crypto-wasm\";\n\nimport {\n BackupTrustInfo,\n Curve25519AuthData,\n KeyBackupCheck,\n KeyBackupInfo,\n KeyBackupSession,\n Curve25519SessionData,\n KeyBackupRestoreOpts,\n KeyBackupRestoreResult,\n KeyBackupRoomSessions,\n} from \"../crypto-api/keybackup.ts\";\nimport { logger } from \"../logger.ts\";\nimport { ClientPrefix, IHttpOpts, MatrixError, MatrixHttpApi, Method } from \"../http-api/index.ts\";\nimport { IMegolmSessionData } from \"../crypto/index.ts\";\nimport { TypedEventEmitter } from \"../models/typed-event-emitter.ts\";\nimport { encodeUri, logDuration } from \"../utils.ts\";\nimport { OutgoingRequestProcessor } from \"./OutgoingRequestProcessor.ts\";\nimport { sleep } from \"../utils.ts\";\nimport { BackupDecryptor } from \"../common-crypto/CryptoBackend.ts\";\nimport { ImportRoomKeyProgressData, ImportRoomKeysOpts, CryptoEvent } from \"../crypto-api/index.ts\";\nimport { AESEncryptedSecretStoragePayload } from \"../@types/AESEncryptedSecretStoragePayload.ts\";\n\n/** Authentification of the backup info, depends on algorithm */\ntype AuthData = KeyBackupInfo[\"auth_data\"];\n\n/**\n * Holds information of a created keybackup.\n * Useful to get the generated private key material and save it securely somewhere.\n */\ninterface KeyBackupCreationInfo {\n version: string;\n algorithm: string;\n authData: AuthData;\n decryptionKey: RustSdkCryptoJs.BackupDecryptionKey;\n}\n\n/**\n * @internal\n */\nexport class RustBackupManager extends TypedEventEmitter<RustBackupCryptoEvents, RustBackupCryptoEventMap> {\n /** Have we checked if there is a backup on the server which we can use */\n private checkedForBackup = false;\n\n /**\n * The latest backup version on the server, when we last checked.\n *\n * If there was no backup on the server, `null`. If our attempt to check resulted in an error, `undefined`.\n *\n * Note that the backup was not necessarily verified.\n */\n private serverBackupInfo: KeyBackupInfo | null | undefined = undefined;\n\n private activeBackupVersion: string | null = null;\n private stopped = false;\n\n /** whether {@link backupKeysLoop} is currently running */\n private backupKeysLoopRunning = false;\n\n public constructor(\n private readonly olmMachine: OlmMachine,\n private readonly http: MatrixHttpApi<IHttpOpts & { onlyData: true }>,\n private readonly outgoingRequestProcessor: OutgoingRequestProcessor,\n ) {\n super();\n }\n\n /**\n * Tells the RustBackupManager to stop.\n * The RustBackupManager is scheduling background uploads of keys to the backup, this\n * call allows to cancel the process when the client is stoppped.\n */\n public stop(): void {\n this.stopped = true;\n }\n\n /**\n * Get the backup version we are currently backing up to, if any\n */\n public async getActiveBackupVersion(): Promise<string | null> {\n if (!(await this.olmMachine.isBackupEnabled())) return null;\n return this.activeBackupVersion;\n }\n\n /**\n * Return the details of the latest backup on the server, when we last checked.\n *\n * This normally returns a cached value, but if we haven't yet made a request to the server, it will fire one off.\n * It will always return the details of the active backup if key backup is enabled.\n *\n * If there was no backup on the server, `null`. If our attempt to check resulted in an error, `undefined`.\n */\n public async getServerBackupInfo(): Promise<KeyBackupInfo | null | undefined> {\n // Do a validity check if we haven't already done one. The check is likely to fail if we don't yet have the\n // backup keys -- but as a side-effect, it will populate `serverBackupInfo`.\n await this.checkKeyBackupAndEnable(false);\n return this.serverBackupInfo;\n }\n\n /**\n * Determine if a key backup can be trusted.\n *\n * @param info - key backup info dict from {@link MatrixClient#getKeyBackupVersion}.\n */\n public async isKeyBackupTrusted(info: KeyBackupInfo): Promise<BackupTrustInfo> {\n const signatureVerification: SignatureVerification = await this.olmMachine.verifyBackup(info);\n\n const backupKeys: RustSdkCryptoJs.BackupKeys = await this.olmMachine.getBackupKeys();\n const decryptionKey = backupKeys?.decryptionKey;\n const backupMatchesSavedPrivateKey =\n !!decryptionKey && backupInfoMatchesBackupDecryptionKey(info, decryptionKey);\n return {\n matchesDecryptionKey: backupMatchesSavedPrivateKey,\n trusted: signatureVerification.trusted(),\n };\n }\n\n /**\n * Re-check the key backup and enable/disable it as appropriate.\n *\n * @param force - whether we should force a re-check even if one has already happened.\n */\n public checkKeyBackupAndEnable(force: boolean): Promise<KeyBackupCheck | null> {\n if (!force && this.checkedForBackup) {\n return Promise.resolve(null);\n }\n\n // make sure there is only one check going on at a time\n if (!this.keyBackupCheckInProgress) {\n this.keyBackupCheckInProgress = this.doCheckKeyBackup().finally(() => {\n this.keyBackupCheckInProgress = null;\n });\n }\n return this.keyBackupCheckInProgress;\n }\n\n /**\n * Handles a backup secret received event and store it if it matches the current backup version.\n *\n * @param secret - The secret as received from a `m.secret.send` event for secret `m.megolm_backup.v1`.\n * @returns true if the secret is valid and has been stored, false otherwise.\n */\n public async handleBackupSecretReceived(secret: string): Promise<boolean> {\n // Currently we only receive the decryption key without any key backup version. It is important to\n // check that the secret is valid for the current version before storing it.\n // We force a check to ensure to have the latest version. We also want to check that the backup is trusted\n // as we don't want to store the secret if the backup is not trusted, and eventually import megolm keys later from an untrusted backup.\n const backupCheck = await this.checkKeyBackupAndEnable(true);\n\n if (!backupCheck?.backupInfo?.version || !backupCheck.trustInfo.trusted) {\n // There is no server-side key backup, or the backup is not signed by a trusted cross-signing key or trusted own device.\n // This decryption key is useless to us.\n logger.warn(\n \"handleBackupSecretReceived: Received a backup decryption key, but there is no trusted server-side key backup\",\n );\n return false;\n }\n\n try {\n const backupDecryptionKey = RustSdkCryptoJs.BackupDecryptionKey.fromBase64(secret);\n const privateKeyMatches = backupInfoMatchesBackupDecryptionKey(backupCheck.backupInfo, backupDecryptionKey);\n if (!privateKeyMatches) {\n logger.warn(\n `handleBackupSecretReceived: Private decryption key does not match the public key of the current remote backup.`,\n );\n // just ignore the secret\n return false;\n }\n logger.info(\n `handleBackupSecretReceived: A valid backup decryption key has been received and stored in cache.`,\n );\n await this.saveBackupDecryptionKey(backupDecryptionKey, backupCheck.backupInfo.version);\n return true;\n } catch (e) {\n logger.warn(\"handleBackupSecretReceived: Invalid backup decryption key\", e);\n }\n\n return false;\n }\n\n public async saveBackupDecryptionKey(\n backupDecryptionKey: RustSdkCryptoJs.BackupDecryptionKey,\n version: string,\n ): Promise<void> {\n await this.olmMachine.saveBackupDecryptionKey(backupDecryptionKey, version);\n // Emit an event that we have a new backup decryption key, so that the sdk can start\n // importing keys from backup if needed.\n this.emit(CryptoEvent.KeyBackupDecryptionKeyCached, version);\n }\n\n /**\n * Import a list of room keys previously exported by exportRoomKeys\n *\n * @param keys - a list of session export objects\n * @param opts - options object\n * @returns a promise which resolves once the keys have been imported\n */\n public async importRoomKeys(keys: IMegolmSessionData[], opts?: ImportRoomKeysOpts): Promise<void> {\n await this.importRoomKeysAsJson(JSON.stringify(keys), opts);\n }\n\n /**\n * Import a list of room keys previously exported by exportRoomKeysAsJson\n *\n * @param jsonKeys - a JSON string encoding a list of session export objects,\n * each of which is an IMegolmSessionData\n * @param opts - options object\n * @returns a promise which resolves once the keys have been imported\n */\n public async importRoomKeysAsJson(jsonKeys: string, opts?: ImportRoomKeysOpts): Promise<void> {\n await this.olmMachine.importExportedRoomKeys(jsonKeys, (progress: bigint, total: bigint): void => {\n const importOpt: ImportRoomKeyProgressData = {\n total: Number(total),\n successes: Number(progress),\n stage: \"load_keys\",\n failures: 0,\n };\n opts?.progressCallback?.(importOpt);\n });\n }\n\n /**\n * Implementation of {@link CryptoBackend#importBackedUpRoomKeys}.\n */\n public async importBackedUpRoomKeys(\n keys: IMegolmSessionData[],\n backupVersion: string,\n opts?: ImportRoomKeysOpts,\n ): Promise<void> {\n const keysByRoom: Map<RustSdkCryptoJs.RoomId, Map<string, IMegolmSessionData>> = new Map();\n for (const key of keys) {\n const roomId = new RustSdkCryptoJs.RoomId(key.room_id);\n if (!keysByRoom.has(roomId)) {\n keysByRoom.set(roomId, new Map());\n }\n keysByRoom.get(roomId)!.set(key.session_id, key);\n }\n await this.olmMachine.importBackedUpRoomKeys(\n keysByRoom,\n (progress: bigint, total: bigint, failures: bigint): void => {\n const importOpt: ImportRoomKeyProgressData = {\n total: Number(total),\n successes: Number(progress),\n stage: \"load_keys\",\n failures: Number(failures),\n };\n opts?.progressCallback?.(importOpt);\n },\n backupVersion,\n );\n }\n\n private keyBackupCheckInProgress: Promise<KeyBackupCheck | null> | null = null;\n\n /** Helper for `checkKeyBackup` */\n private async doCheckKeyBackup(): Promise<KeyBackupCheck | null> {\n logger.log(\"Checking key backup status...\");\n let backupInfo: KeyBackupInfo | null | undefined;\n try {\n backupInfo = await this.requestKeyBackupVersion();\n } catch (e) {\n logger.warn(\"Error checking for active key backup\", e);\n this.serverBackupInfo = undefined;\n return null;\n }\n this.checkedForBackup = true;\n\n if (backupInfo && !backupInfo.version) {\n logger.warn(\"active backup lacks a useful 'version'; ignoring it\");\n backupInfo = undefined;\n }\n this.serverBackupInfo = backupInfo;\n\n const activeVersion = await this.getActiveBackupVersion();\n\n if (!backupInfo) {\n if (activeVersion !== null) {\n logger.log(\"No key backup present on server: disabling key backup\");\n await this.disableKeyBackup();\n } else {\n logger.log(\"No key backup present on server: not enabling key backup\");\n }\n return null;\n }\n\n const trustInfo = await this.isKeyBackupTrusted(backupInfo);\n\n if (!trustInfo.trusted) {\n if (activeVersion !== null) {\n logger.log(\"Key backup present on server but not trusted: disabling key backup\");\n await this.disableKeyBackup();\n } else {\n logger.log(\"Key backup present on server but not trusted: not enabling key backup\");\n }\n } else {\n if (activeVersion === null) {\n logger.log(`Found usable key backup v${backupInfo.version}: enabling key backups`);\n await this.enableKeyBackup(backupInfo);\n } else if (activeVersion !== backupInfo.version) {\n logger.log(`On backup version ${activeVersion} but found version ${backupInfo.version}: switching.`);\n // This will remove any pending backup request, remove the backup key and reset the backup state of each room key we have.\n await this.disableKeyBackup();\n // Enabling will now trigger re-upload of all the keys\n await this.enableKeyBackup(backupInfo);\n } else {\n logger.log(`Backup version ${backupInfo.version} still current`);\n }\n }\n return { backupInfo, trustInfo };\n }\n\n private async enableKeyBackup(backupInfo: KeyBackupInfo): Promise<void> {\n // we know for certain it must be a Curve25519 key, because we have verified it and only Curve25519\n // keys can be verified.\n //\n // we also checked it has a valid `version`.\n await this.olmMachine.enableBackupV1(\n (backupInfo.auth_data as Curve25519AuthData).public_key,\n backupInfo.version!,\n );\n this.activeBackupVersion = backupInfo.version!;\n\n this.emit(CryptoEvent.KeyBackupStatus, true);\n\n this.backupKeysLoop();\n }\n\n /**\n * Restart the backup key loop if there is an active trusted backup.\n * Doesn't try to check the backup server side. To be called when a new\n * megolm key is known locally.\n */\n public async maybeUploadKey(): Promise<void> {\n if (this.activeBackupVersion != null) {\n this.backupKeysLoop();\n }\n }\n\n private async disableKeyBackup(): Promise<void> {\n await this.olmMachine.disableBackup();\n this.activeBackupVersion = null;\n this.emit(CryptoEvent.KeyBackupStatus, false);\n }\n\n private async backupKeysLoop(maxDelay = 10000): Promise<void> {\n if (this.backupKeysLoopRunning) {\n logger.log(`Backup loop already running`);\n return;\n }\n this.backupKeysLoopRunning = true;\n\n logger.log(`Backup: Starting keys upload loop for backup version:${this.activeBackupVersion}.`);\n\n // wait between 0 and `maxDelay` seconds, to avoid backup\n // requests from different clients hitting the server all at\n // the same time when a new key is sent\n const delay = Math.random() * maxDelay;\n await sleep(delay);\n\n try {\n // number of consecutive network failures for exponential backoff\n let numFailures = 0;\n // The number of keys left to back up. (Populated lazily: see more comments below.)\n let remainingToUploadCount: number | null = null;\n // To avoid computing the key when only a few keys were added (after a sync for example),\n // we compute the count only when at least two iterations are needed.\n let isFirstIteration = true;\n\n while (!this.stopped) {\n // Get a batch of room keys to upload\n let request: RustSdkCryptoJs.KeysBackupRequest | null = null;\n try {\n request = await logDuration(\n logger,\n \"BackupRoomKeys: Get keys to backup from rust crypto-sdk\",\n async () => {\n return await this.olmMachine.backupRoomKeys();\n },\n );\n } catch (err) {\n logger.error(\"Backup: Failed to get keys to backup from rust crypto-sdk\", err);\n }\n\n if (!request || this.stopped || !this.activeBackupVersion) {\n logger.log(`Backup: Ending loop for version ${this.activeBackupVersion}.`);\n if (!request) {\n // nothing more to upload\n this.emit(CryptoEvent.KeyBackupSessionsRemaining, 0);\n }\n return;\n }\n\n try {\n await this.outgoingRequestProcessor.makeOutgoingRequest(request);\n numFailures = 0;\n if (this.stopped) break;\n\n // Key count performance (`olmMachine.roomKeyCounts()`) can be pretty bad on some configurations.\n // In particular, we detected on some M1 macs that when the object store reaches a threshold, the count\n // performance stops growing in O(n) and suddenly becomes very slow (40s, 60s or more).\n // For reference, the performance drop occurs around 300-400k keys on the platforms where this issue is observed.\n // Even on other configurations, the count can take several seconds.\n // This will block other operations on the database, like sending messages.\n //\n // This is a workaround to avoid calling `olmMachine.roomKeyCounts()` too often, and only when necessary.\n // We don't call it on the first loop because there could be only a few keys to upload, and we don't want to wait for the count.\n if (!isFirstIteration && remainingToUploadCount === null) {\n try {\n const keyCount = await this.olmMachine.roomKeyCounts();\n remainingToUploadCount = keyCount.total - keyCount.backedUp;\n } catch (err) {\n logger.error(\"Backup: Failed to get key counts from rust crypto-sdk\", err);\n }\n }\n\n if (remainingToUploadCount !== null) {\n this.emit(CryptoEvent.KeyBackupSessionsRemaining, remainingToUploadCount);\n const keysCountInBatch = this.keysCountInBatch(request);\n // `OlmMachine.roomKeyCounts` is called only once for the current backupKeysLoop. But new\n // keys could be added during the current loop (after a sync for example).\n // So the count can get out of sync with the real number of remaining keys to upload.\n // Depending on the number of new keys imported and the time to complete the loop,\n // this could result in multiple events being emitted with a remaining key count of 0.\n remainingToUploadCount = Math.max(remainingToUploadCount - keysCountInBatch, 0);\n }\n } catch (err) {\n numFailures++;\n logger.error(\"Backup: Error processing backup request for rust crypto-sdk\", err);\n if (err instanceof MatrixError) {\n const errCode = err.data.errcode;\n if (errCode == \"M_NOT_FOUND\" || errCode == \"M_WRONG_ROOM_KEYS_VERSION\") {\n logger.log(`Backup: Failed to upload keys to current vesion: ${errCode}.`);\n try {\n await this.disableKeyBackup();\n } catch (error) {\n logger.error(\"Backup: An error occurred while disabling key backup:\", error);\n }\n this.emit(CryptoEvent.KeyBackupFailed, err.data.errcode!);\n // There was an active backup and we are out of sync with the server\n // force a check server side\n this.backupKeysLoopRunning = false;\n this.checkKeyBackupAndEnable(true);\n return;\n } else if (err.isRateLimitError()) {\n // wait for that and then continue?\n try {\n const waitTime = err.getRetryAfterMs();\n if (waitTime && waitTime > 0) {\n await sleep(waitTime);\n continue;\n }\n } catch (error) {\n logger.warn(\n \"Backup: An error occurred while retrieving a rate-limit retry delay\",\n error,\n );\n } // else go to the normal backoff\n }\n }\n\n // Some other errors (mx, network, or CORS or invalid urls?) anyhow backoff\n // exponential backoff if we have failures\n await sleep(1000 * Math.pow(2, Math.min(numFailures - 1, 4)));\n }\n isFirstIteration = false;\n }\n } finally {\n this.backupKeysLoopRunning = false;\n }\n }\n\n /**\n * Utility method to count the number of keys in a backup request, in order to update the remaining keys count.\n * This should be the chunk size of the backup request for all requests but the last, but we don't have access to it\n * (it's static in the Rust SDK).\n * @param batch - The backup request to count the keys from.\n *\n * @returns The number of keys in the backup request.\n */\n private keysCountInBatch(batch: RustSdkCryptoJs.KeysBackupRequest): number {\n const parsedBody: KeyBackup = JSON.parse(batch.body);\n return countKeysInBackup(parsedBody);\n }\n\n /**\n * Get information about a key backup from the server\n * - If version is provided, get information about that backup version.\n * - If no version is provided, get information about the latest backup.\n *\n * @param version - The version of the backup to get information about.\n * @returns Information object from API or null if there is no active backup.\n */\n public async requestKeyBackupVersion(version?: string): Promise<KeyBackupInfo | null> {\n return await requestKeyBackupVersion(this.http, version);\n }\n\n /**\n * Creates a new key backup by generating a new random private key.\n *\n * If there is an existing backup server side it will be deleted and replaced\n * by the new one.\n *\n * @param signObject - Method that should sign the backup with existing device and\n * existing identity.\n * @returns a KeyBackupCreationInfo - All information related to the backup.\n */\n public async setupKeyBackup(signObject: (authData: AuthData) => Promise<void>): Promise<KeyBackupCreationInfo> {\n // Clean up any existing backup\n await this.deleteAllKeyBackupVersions();\n\n const randomKey = RustSdkCryptoJs.BackupDecryptionKey.createRandomKey();\n const pubKey = randomKey.megolmV1PublicKey;\n\n const authData = { public_key: pubKey.publicKeyBase64 };\n\n await signObject(authData);\n\n const res = await this.http.authedRequest<{ version: string }>(\n Method.Post,\n \"/room_keys/version\",\n undefined,\n {\n algorithm: pubKey.algorithm,\n auth_data: authData,\n },\n {\n prefix: ClientPrefix.V3,\n },\n );\n\n await this.saveBackupDecryptionKey(randomKey, res.version);\n\n return {\n version: res.version,\n algorithm: pubKey.algorithm,\n authData: authData,\n decryptionKey: randomKey,\n };\n }\n\n /**\n * Deletes all key backups.\n *\n * Will call the API to delete active backup until there is no more present.\n */\n public async deleteAllKeyBackupVersions(): Promise<void> {\n // there could be several backup versions. Delete all to be safe.\n let current = (await this.requestKeyBackupVersion())?.version ?? null;\n while (current != null) {\n await this.deleteKeyBackupVersion(current);\n current = (await this.requestKeyBackupVersion())?.version ?? null;\n }\n\n // XXX: Should this also update Secret Storage and delete any existing keys?\n }\n\n /**\n * Deletes the given key backup.\n *\n * @param version - The backup version to delete.\n */\n public async deleteKeyBackupVersion(version: string): Promise<void> {\n logger.debug(`deleteKeyBackupVersion v:${version}`);\n const path = encodeUri(\"/room_keys/version/$version\", { $version: version });\n await this.http.authedRequest<void>(Method.Delete, path, undefined, undefined, {\n prefix: ClientPrefix.V3,\n });\n }\n\n /**\n * Creates a new backup decryptor for the given private key.\n * @param decryptionKey - The private key to use for decryption.\n */\n public createBackupDecryptor(decryptionKey: RustSdkCryptoJs.BackupDecryptionKey): BackupDecryptor {\n return new RustBackupDecryptor(decryptionKey);\n }\n\n /**\n * Restore a key backup.\n *\n * @param backupVersion - The version of the backup to restore.\n * @param backupDecryptor - The backup decryptor to use to decrypt the keys.\n * @param opts - Options for the restore.\n * @returns The total number of keys and the total imported.\n */\n public async restoreKeyBackup(\n backupVersion: string,\n backupDecryptor: BackupDecryptor,\n opts?: KeyBackupRestoreOpts,\n ): Promise<KeyBackupRestoreResult> {\n const keyBackup = await this.downloadKeyBackup(backupVersion);\n opts?.progressCallback?.({\n stage: \"load_keys\",\n });\n\n return this.importKeyBackup(keyBackup, backupVersion, backupDecryptor, opts);\n }\n\n /**\n * Call `/room_keys/keys` to download the key backup (room keys) for the given backup version.\n * https://spec.matrix.org/v1.12/client-server-api/#get_matrixclientv3room_keyskeys\n *\n * @param backupVersion\n * @returns The key backup response.\n */\n private downloadKeyBackup(backupVersion: string): Promise<KeyBackup> {\n return this.http.authedRequest<KeyBackup>(\n Method.Get,\n \"/room_keys/keys\",\n { version: backupVersion },\n undefined,\n {\n prefix: ClientPrefix.V3,\n },\n );\n }\n\n /**\n * Import the room keys from a `/room_keys/keys` call.\n * Calls `opts.progressCallback` with the progress of the import.\n *\n * @param keyBackup - The response from the server containing the keys to import.\n * @param backupVersion - The version of the backup info.\n * @param backupDecryptor - The backup decryptor to use to decrypt the keys.\n * @param opts - Options for the import.\n *\n * @returns The total number of keys and the total imported.\n *\n * @private\n */\n private async importKeyBackup(\n keyBackup: KeyBackup,\n backupVersion: string,\n backupDecryptor: BackupDecryptor,\n opts?: KeyBackupRestoreOpts,\n ): Promise<KeyBackupRestoreResult> {\n // We have a full backup here, it can get quite big, so we need to decrypt and import it in chunks.\n\n const CHUNK_SIZE = 200;\n // Get the total count as a first pass\n const totalKeyCount = countKeysInBackup(keyBackup);\n let totalImported = 0;\n let totalFailures = 0;\n\n /**\n * This method is called when we have enough chunks to decrypt.\n * It will decrypt the chunks and try to import the room keys.\n * @param roomChunks\n */\n const handleChunkCallback = async (roomChunks: Map<string, KeyBackupRoomSessions>): Promise<void> => {\n const currentChunk: IMegolmSessionData[] = [];\n for (const roomId of roomChunks.keys()) {\n // Decrypt the sessions for the given room\n const decryptedSessions = await backupDecryptor.decryptSessions(roomChunks.get(roomId)!);\n // Add the decrypted sessions to the current chunk\n decryptedSessions.forEach((session) => {\n // We set the room_id for each session\n session.room_id = roomId;\n currentChunk.push(session);\n });\n }\n\n // We have a chunk of decrypted keys: import them\n try {\n await this.importBackedUpRoomKeys(currentChunk, backupVersion);\n totalImported += currentChunk.length;\n } catch (e) {\n totalFailures += currentChunk.length;\n // We failed to import some keys, but we should still try to import the rest?\n // Log the error and continue\n logger.error(\"Error importing keys from backup\", e);\n }\n\n opts?.progressCallback?.({\n total: totalKeyCount,\n successes: totalImported,\n stage: \"load_keys\",\n failures: totalFailures,\n });\n };\n\n let groupChunkCount = 0;\n let chunkGroupByRoom: Map<string, KeyBackupRoomSessions> = new Map();\n\n // Iterate over the rooms and sessions to group them in chunks\n // And we call the handleChunkCallback when we have enough chunks to decrypt\n for (const [roomId, roomData] of Object.entries(keyBackup.rooms)) {\n // If there are no sessions for the room, skip it\n if (!roomData.sessions) continue;\n\n // Initialize a new chunk group for the current room\n chunkGroupByRoom.set(roomId, {});\n\n for (const [sessionId, session] of Object.entries(roomData.sessions)) {\n // We set previously the chunk group for the current room, so we can safely get it\n const sessionsForRoom = chunkGroupByRoom.get(roomId)!;\n sessionsForRoom[sessionId] = session;\n groupChunkCount += 1;\n // If we have enough chunks to decrypt, call the block callback\n if (groupChunkCount >= CHUNK_SIZE) {\n // We have enough chunks to decrypt\n await handleChunkCallback(chunkGroupByRoom);\n // Reset the chunk group\n chunkGroupByRoom = new Map();\n // There might be remaining keys for that room, so add back an entry for the current room.\n chunkGroupByRoom.set(roomId, {});\n groupChunkCount = 0;\n }\n }\n }\n\n // Handle remaining chunk if needed\n if (groupChunkCount > 0) {\n await handleChunkCallback(chunkGroupByRoom);\n }\n\n return { total: totalKeyCount, imported: totalImported };\n }\n}\n\n/**\n * Checks if the provided backup info matches the given private key.\n *\n * @param info - The backup info to check.\n * @param backupDecryptionKey - The `BackupDecryptionKey` private key to check against.\n * @returns `true` if the private key can decrypt the backup, `false` otherwise.\n */\nfunction backupInfoMatchesBackupDecryptionKey(\n info: KeyBackupInfo,\n backupDecryptionKey: RustSdkCryptoJs.BackupDecryptionKey,\n): boolean {\n if (info.algorithm !== \"m.megolm_backup.v1.curve25519-aes-sha2\") {\n logger.warn(\"backupMatchesPrivateKey: Unsupported backup algorithm\", info.algorithm);\n return false;\n }\n\n return (info.auth_data as Curve25519AuthData)?.public_key === backupDecryptionKey.megolmV1PublicKey.publicKeyBase64;\n}\n\n/**\n * Implementation of {@link BackupDecryptor} for the rust crypto backend.\n */\nexport class RustBackupDecryptor implements BackupDecryptor {\n private decryptionKey: RustSdkCryptoJs.BackupDecryptionKey;\n public sourceTrusted: boolean;\n\n public constructor(decryptionKey: RustSdkCryptoJs.BackupDecryptionKey) {\n this.decryptionKey = decryptionKey;\n this.sourceTrusted = false;\n }\n\n /**\n * Implements {@link BackupDecryptor#decryptSessions}\n */\n public async decryptSessions(\n ciphertexts: Record<string, KeyBackupSession<Curve25519SessionData | AESEncryptedSecretStoragePayload>>,\n ): Promise<IMegolmSessionData[]> {\n const keys: IMegolmSessionData[] = [];\n for (const [sessionId, sessionData] of Object.entries(ciphertexts)) {\n try {\n const decrypted = JSON.parse(\n this.decryptionKey.decryptV1(\n sessionData.session_data.ephemeral,\n sessionData.session_data.mac,\n sessionData.session_data.ciphertext,\n ),\n );\n decrypted.session_id = sessionId;\n keys.push(decrypted);\n } catch (e) {\n logger.log(\"Failed to decrypt megolm session from backup\", e, sessionData);\n }\n }\n return keys;\n }\n\n /**\n * Implements {@link BackupDecryptor#free}\n */\n public free(): void {\n this.decryptionKey.free();\n }\n}\n\n/**\n * Fetch a key backup info from the server.\n *\n * If `version` is provided, calls `GET /room_keys/version/$version` and gets the backup info for that version.\n * See https://spec.matrix.org/v1.12/client-server-api/#get_matrixclientv3room_keysversionversion.\n *\n * If not, calls `GET /room_keys/version` and gets the latest backup info.\n * See https://spec.matrix.org/v1.12/client-server-api/#get_matrixclientv3room_keysversion\n *\n * @param http\n * @param version - the specific version of the backup info to fetch\n * @returns The key backup info or null if there is no backup.\n */\nexport async function requestKeyBackupVersion(\n http: MatrixHttpApi<IHttpOpts & { onlyData: true }>,\n version?: string,\n): Promise<KeyBackupInfo | null> {\n try {\n const path = version ? encodeUri(\"/room_keys/version/$version\", { $version: version }) : \"/room_keys/version\";\n return await http.authedRequest<KeyBackupInfo>(Method.Get, path, undefined, undefined, {\n prefix: ClientPrefix.V3,\n });\n } catch (e) {\n if ((<MatrixError>e).errcode === \"M_NOT_FOUND\") {\n return null;\n } else {\n throw e;\n }\n }\n}\n\n/**\n * Checks if the provided decryption key matches the public key of the key backup info.\n *\n * @param decryptionKey - The decryption key to check.\n * @param keyBackupInfo - The key backup info to check against.\n * @returns `true` if the decryption key matches the key backup info, `false` otherwise.\n */\nexport function decryptionKeyMatchesKeyBackupInfo(\n decryptionKey: RustSdkCryptoJs.BackupDecryptionKey,\n keyBackupInfo: KeyBackupInfo,\n): boolean {\n const authData = <Curve25519AuthData>keyBackupInfo.auth_data;\n return authData.public_key === decryptionKey.megolmV1PublicKey.publicKeyBase64;\n}\n\n/**\n * Counts the total number of keys present in a key backup.\n * @param keyBackup - The key backup to count the keys from.\n * @returns The total number of keys in the backup.\n */\nfunction countKeysInBackup(keyBackup: KeyBackup): number {\n let count = 0;\n for (const { sessions } of Object.values(keyBackup.rooms)) {\n count += Object.keys(sessions).length;\n }\n return count;\n}\n\nexport type RustBackupCryptoEvents =\n | CryptoEvent.KeyBackupStatus\n | CryptoEvent.KeyBackupSessionsRemaining\n | CryptoEvent.KeyBackupFailed\n | CryptoEvent.KeyBackupDecryptionKeyCached;\n\nexport type RustBackupCryptoEventMap = {\n [CryptoEvent.KeyBackupStatus]: (enabled: boolean) => void;\n [CryptoEvent.KeyBackupSessionsRemaining]: (remaining: number) => void;\n [CryptoEvent.KeyBackupFailed]: (errCode: string) => void;\n [CryptoEvent.KeyBackupDecryptionKeyCached]: (version: string) => void;\n};\n\n/**\n * Response from GET `/room_keys/keys` endpoint.\n * See https://spec.matrix.org/latest/client-server-api/#get_matrixclientv3room_keyskeys\n */\nexport interface KeyBackup {\n rooms: Record<string, { sessions: KeyBackupRoomSessions }>;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,3 +0,0 @@
1
- /** The prefix used on indexeddbs created by rust-crypto */
2
- export declare const RUST_SDK_STORE_PREFIX = "matrix-js-sdk";
3
- //# sourceMappingURL=constants.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/rust-crypto/constants.ts"],"names":[],"mappings":"AAgBA,2DAA2D;AAC3D,eAAO,MAAM,qBAAqB,kBAAkB,CAAC"}
@@ -1,19 +0,0 @@
1
- /*
2
- Copyright 2022 The Matrix.org Foundation C.I.C.
3
-
4
- Licensed under the Apache License, Version 2.0 (the "License");
5
- you may not use this file except in compliance with the License.
6
- You may obtain a copy of the License at
7
-
8
- http://www.apache.org/licenses/LICENSE-2.0
9
-
10
- Unless required by applicable law or agreed to in writing, software
11
- distributed under the License is distributed on an "AS IS" BASIS,
12
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- See the License for the specific language governing permissions and
14
- limitations under the License.
15
- */
16
-
17
- /** The prefix used on indexeddbs created by rust-crypto */
18
- export var RUST_SDK_STORE_PREFIX = "matrix-js-sdk";
19
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","names":["RUST_SDK_STORE_PREFIX"],"sources":["../../src/rust-crypto/constants.ts"],"sourcesContent":["/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/** The prefix used on indexeddbs created by rust-crypto */\nexport const RUST_SDK_STORE_PREFIX = \"matrix-js-sdk\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO,IAAMA,qBAAqB,GAAG,eAAe","ignoreList":[]}
@@ -1,28 +0,0 @@
1
- import * as RustSdkCryptoJs from "@matrix-org/matrix-sdk-crypto-wasm";
2
- import { Device } from "../models/device.ts";
3
- import { DeviceKeys } from "../client.ts";
4
- /**
5
- * Convert a {@link RustSdkCryptoJs.Device} to a {@link Device}
6
- * @param device - Rust Sdk device
7
- * @param userId - owner of the device
8
- *
9
- * @internal
10
- */
11
- export declare function rustDeviceToJsDevice(device: RustSdkCryptoJs.Device, userId: RustSdkCryptoJs.UserId): Device;
12
- /**
13
- * Convert {@link DeviceKeys} from `/keys/query` request to a `Map<string, Device>`
14
- * @param deviceKeys - Device keys object to convert
15
- *
16
- * @internal
17
- */
18
- export declare function deviceKeysToDeviceMap(deviceKeys: DeviceKeys): Map<string, Device>;
19
- type QueryDevice = DeviceKeys[keyof DeviceKeys];
20
- /**
21
- * Convert `/keys/query` {@link QueryDevice} device to {@link Device}
22
- * @param device - Device from `/keys/query` request
23
- *
24
- * @internal
25
- */
26
- export declare function downloadDeviceToJsDevice(device: QueryDevice): Device;
27
- export {};
28
- //# sourceMappingURL=device-converter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"device-converter.d.ts","sourceRoot":"","sources":["../../src/rust-crypto/device-converter.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,eAAe,MAAM,oCAAoC,CAAC;AAEtE,OAAO,EAAE,MAAM,EAAsB,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,GAAG,MAAM,CAwD3G;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAIjF;AAGD,KAAK,WAAW,GAAG,UAAU,CAAC,MAAM,UAAU,CAAC,CAAC;AAEhD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAoBpE"}
@@ -1,123 +0,0 @@
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 * as RustSdkCryptoJs from "@matrix-org/matrix-sdk-crypto-wasm";
18
- import { Device, DeviceVerification } from "../models/device.js";
19
- /**
20
- * Convert a {@link RustSdkCryptoJs.Device} to a {@link Device}
21
- * @param device - Rust Sdk device
22
- * @param userId - owner of the device
23
- *
24
- * @internal
25
- */
26
- export function rustDeviceToJsDevice(device, userId) {
27
- // Copy rust device keys to Device.keys
28
- var keys = new Map();
29
- for (var [keyId, key] of device.keys.entries()) {
30
- keys.set(keyId.toString(), key.toBase64());
31
- }
32
-
33
- // Compute verified from device state
34
- var verified = DeviceVerification.Unverified;
35
- if (device.isBlacklisted()) {
36
- verified = DeviceVerification.Blocked;
37
- } else if (device.isVerified()) {
38
- verified = DeviceVerification.Verified;
39
- }
40
-
41
- // Convert rust signatures to Device.signatures
42
- var signatures = new Map();
43
- var mayBeSignatureMap = device.signatures.get(userId);
44
- if (mayBeSignatureMap) {
45
- var convertedSignatures = new Map();
46
- // Convert maybeSignatures map to a Map<string, string>
47
- for (var [_key, value] of mayBeSignatureMap.entries()) {
48
- if (value.isValid() && value.signature) {
49
- convertedSignatures.set(_key, value.signature.toBase64());
50
- }
51
- }
52
- signatures.set(userId.toString(), convertedSignatures);
53
- }
54
-
55
- // Convert rust algorithms to algorithms
56
- var rustAlgorithms = device.algorithms;
57
- // Use set to ensure that algorithms are not duplicated
58
- var algorithms = new Set();
59
- rustAlgorithms.forEach(algorithm => {
60
- switch (algorithm) {
61
- case RustSdkCryptoJs.EncryptionAlgorithm.MegolmV1AesSha2:
62
- algorithms.add("m.megolm.v1.aes-sha2");
63
- break;
64
- case RustSdkCryptoJs.EncryptionAlgorithm.OlmV1Curve25519AesSha2:
65
- default:
66
- algorithms.add("m.olm.v1.curve25519-aes-sha2");
67
- break;
68
- }
69
- });
70
- return new Device({
71
- deviceId: device.deviceId.toString(),
72
- userId: userId.toString(),
73
- keys,
74
- algorithms: Array.from(algorithms),
75
- verified,
76
- signatures,
77
- displayName: device.displayName,
78
- dehydrated: device.isDehydrated
79
- });
80
- }
81
-
82
- /**
83
- * Convert {@link DeviceKeys} from `/keys/query` request to a `Map<string, Device>`
84
- * @param deviceKeys - Device keys object to convert
85
- *
86
- * @internal
87
- */
88
- export function deviceKeysToDeviceMap(deviceKeys) {
89
- return new Map(Object.entries(deviceKeys).map(_ref => {
90
- var [deviceId, device] = _ref;
91
- return [deviceId, downloadDeviceToJsDevice(device)];
92
- }));
93
- }
94
-
95
- // Device from `/keys/query` request
96
-
97
- /**
98
- * Convert `/keys/query` {@link QueryDevice} device to {@link Device}
99
- * @param device - Device from `/keys/query` request
100
- *
101
- * @internal
102
- */
103
- export function downloadDeviceToJsDevice(device) {
104
- var _device$unsigned;
105
- var keys = new Map(Object.entries(device.keys));
106
- var displayName = (_device$unsigned = device.unsigned) === null || _device$unsigned === void 0 ? void 0 : _device$unsigned.device_display_name;
107
- var signatures = new Map();
108
- if (device.signatures) {
109
- for (var userId in device.signatures) {
110
- signatures.set(userId, new Map(Object.entries(device.signatures[userId])));
111
- }
112
- }
113
- return new Device({
114
- deviceId: device.device_id,
115
- userId: device.user_id,
116
- keys,
117
- algorithms: device.algorithms,
118
- verified: DeviceVerification.Unverified,
119
- signatures,
120
- displayName
121
- });
122
- }
123
- //# sourceMappingURL=device-converter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"device-converter.js","names":["RustSdkCryptoJs","Device","DeviceVerification","rustDeviceToJsDevice","device","userId","keys","Map","keyId","key","entries","set","toString","toBase64","verified","Unverified","isBlacklisted","Blocked","isVerified","Verified","signatures","mayBeSignatureMap","get","convertedSignatures","value","isValid","signature","rustAlgorithms","algorithms","Set","forEach","algorithm","EncryptionAlgorithm","MegolmV1AesSha2","add","OlmV1Curve25519AesSha2","deviceId","Array","from","displayName","dehydrated","isDehydrated","deviceKeysToDeviceMap","deviceKeys","Object","map","_ref","downloadDeviceToJsDevice","_device$unsigned","unsigned","device_display_name","device_id","user_id"],"sources":["../../src/rust-crypto/device-converter.ts"],"sourcesContent":["/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport * as RustSdkCryptoJs from \"@matrix-org/matrix-sdk-crypto-wasm\";\n\nimport { Device, DeviceVerification } from \"../models/device.ts\";\nimport { DeviceKeys } from \"../client.ts\";\n\n/**\n * Convert a {@link RustSdkCryptoJs.Device} to a {@link Device}\n * @param device - Rust Sdk device\n * @param userId - owner of the device\n *\n * @internal\n */\nexport function rustDeviceToJsDevice(device: RustSdkCryptoJs.Device, userId: RustSdkCryptoJs.UserId): Device {\n // Copy rust device keys to Device.keys\n const keys = new Map<string, string>();\n for (const [keyId, key] of device.keys.entries()) {\n keys.set(keyId.toString(), key.toBase64());\n }\n\n // Compute verified from device state\n let verified: DeviceVerification = DeviceVerification.Unverified;\n if (device.isBlacklisted()) {\n verified = DeviceVerification.Blocked;\n } else if (device.isVerified()) {\n verified = DeviceVerification.Verified;\n }\n\n // Convert rust signatures to Device.signatures\n const signatures = new Map<string, Map<string, string>>();\n const mayBeSignatureMap: Map<string, RustSdkCryptoJs.MaybeSignature> | undefined = device.signatures.get(userId);\n if (mayBeSignatureMap) {\n const convertedSignatures = new Map<string, string>();\n // Convert maybeSignatures map to a Map<string, string>\n for (const [key, value] of mayBeSignatureMap.entries()) {\n if (value.isValid() && value.signature) {\n convertedSignatures.set(key, value.signature.toBase64());\n }\n }\n\n signatures.set(userId.toString(), convertedSignatures);\n }\n\n // Convert rust algorithms to algorithms\n const rustAlgorithms: RustSdkCryptoJs.EncryptionAlgorithm[] = device.algorithms;\n // Use set to ensure that algorithms are not duplicated\n const algorithms = new Set<string>();\n rustAlgorithms.forEach((algorithm) => {\n switch (algorithm) {\n case RustSdkCryptoJs.EncryptionAlgorithm.MegolmV1AesSha2:\n algorithms.add(\"m.megolm.v1.aes-sha2\");\n break;\n case RustSdkCryptoJs.EncryptionAlgorithm.OlmV1Curve25519AesSha2:\n default:\n algorithms.add(\"m.olm.v1.curve25519-aes-sha2\");\n break;\n }\n });\n\n return new Device({\n deviceId: device.deviceId.toString(),\n userId: userId.toString(),\n keys,\n algorithms: Array.from(algorithms),\n verified,\n signatures,\n displayName: device.displayName,\n dehydrated: device.isDehydrated,\n });\n}\n\n/**\n * Convert {@link DeviceKeys} from `/keys/query` request to a `Map<string, Device>`\n * @param deviceKeys - Device keys object to convert\n *\n * @internal\n */\nexport function deviceKeysToDeviceMap(deviceKeys: DeviceKeys): Map<string, Device> {\n return new Map(\n Object.entries(deviceKeys).map(([deviceId, device]) => [deviceId, downloadDeviceToJsDevice(device)]),\n );\n}\n\n// Device from `/keys/query` request\ntype QueryDevice = DeviceKeys[keyof DeviceKeys];\n\n/**\n * Convert `/keys/query` {@link QueryDevice} device to {@link Device}\n * @param device - Device from `/keys/query` request\n *\n * @internal\n */\nexport function downloadDeviceToJsDevice(device: QueryDevice): Device {\n const keys = new Map(Object.entries(device.keys));\n const displayName = device.unsigned?.device_display_name;\n\n const signatures = new Map<string, Map<string, string>>();\n if (device.signatures) {\n for (const userId in device.signatures) {\n signatures.set(userId, new Map(Object.entries(device.signatures[userId])));\n }\n }\n\n return new Device({\n deviceId: device.device_id,\n userId: device.user_id,\n keys,\n algorithms: device.algorithms,\n verified: DeviceVerification.Unverified,\n signatures,\n displayName,\n });\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,61 +0,0 @@
1
- import { RustCrypto } from "./rust-crypto.ts";
2
- import { IHttpOpts, MatrixHttpApi } from "../http-api/index.ts";
3
- import { ServerSideSecretStorage } from "../secret-storage.ts";
4
- import { Logger } from "../logger.ts";
5
- import { CryptoStore } from "../crypto/store/base.ts";
6
- import { CryptoCallbacks } from "../crypto-api/index.ts";
7
- /**
8
- * Create a new `RustCrypto` implementation
9
- *
10
- * @param args - Parameter object
11
- * @internal
12
- */
13
- export declare function initRustCrypto(args: {
14
- /** A `Logger` instance that will be used for debug output. */
15
- logger: Logger;
16
- /**
17
- * Low-level HTTP interface: used to make outgoing requests required by the rust SDK.
18
- * We expect it to set the access token, etc.
19
- */
20
- http: MatrixHttpApi<IHttpOpts & {
21
- onlyData: true;
22
- }>;
23
- /** The local user's User ID. */
24
- userId: string;
25
- /** The local user's Device ID. */
26
- deviceId: string;
27
- /** Interface to server-side secret storage. */
28
- secretStorage: ServerSideSecretStorage;
29
- /** Crypto callbacks provided by the application. */
30
- cryptoCallbacks: CryptoCallbacks;
31
- /**
32
- * The prefix to use on the indexeddbs created by rust-crypto.
33
- * If `null`, a memory store will be used.
34
- */
35
- storePrefix: string | null;
36
- /**
37
- * A passphrase to use to encrypt the indexeddb created by rust-crypto.
38
- *
39
- * Ignored if `storePrefix` is null, or `storeKey` is set. If neither this nor `storeKey` is set
40
- * (and `storePrefix` is not null), the indexeddb will be unencrypted.
41
- */
42
- storePassphrase?: string;
43
- /**
44
- * A key to use to encrypt the indexeddb created by rust-crypto.
45
- *
46
- * Ignored if `storePrefix` is null. Otherwise, if it is set, it must be a 32-byte cryptographic key, which
47
- * will be used to encrypt the indexeddb. See also `storePassphrase`.
48
- */
49
- storeKey?: Uint8Array;
50
- /** If defined, we will check if any data needs migrating from this store to the rust store. */
51
- legacyCryptoStore?: CryptoStore;
52
- /** The pickle key for `legacyCryptoStore` */
53
- legacyPickleKey?: string;
54
- /**
55
- * A callback which will receive progress updates on migration from `legacyCryptoStore`.
56
- *
57
- * Called with (-1, -1) to mark the end of migration.
58
- */
59
- legacyMigrationProgressListener?: (progress: number, total: number) => void;
60
- }): Promise<RustCrypto>;
61
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rust-crypto/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAkB,MAAM,yBAAyB,CAAC;AAMtE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACvC,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,IAAI,EAAE,aAAa,CAAC,SAAS,GAAG;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IAEpD,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IAEf,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IAEjB,+CAA+C;IAC/C,aAAa,EAAE,uBAAuB,CAAC;IAEvC,oDAAoD;IACpD,eAAe,EAAE,eAAe,CAAC;IAEjC;;;OAGG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,UAAU,CAAC;IAEtB,+FAA+F;IAC/F,iBAAiB,CAAC,EAAE,WAAW,CAAC;IAEhC,6CAA6C;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,+BAA+B,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/E,GAAG,OAAO,CAAC,UAAU,CAAC,CA8CtB"}
@@ -1,152 +0,0 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
- /*
6
- Copyright 2022 The Matrix.org Foundation C.I.C.
7
-
8
- Licensed under the Apache License, Version 2.0 (the "License");
9
- you may not use this file except in compliance with the License.
10
- You may obtain a copy of the License at
11
-
12
- http://www.apache.org/licenses/LICENSE-2.0
13
-
14
- Unless required by applicable law or agreed to in writing, software
15
- distributed under the License is distributed on an "AS IS" BASIS,
16
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
- See the License for the specific language governing permissions and
18
- limitations under the License.
19
- */
20
-
21
- import * as RustSdkCryptoJs from "@matrix-org/matrix-sdk-crypto-wasm";
22
- import { StoreHandle } from "@matrix-org/matrix-sdk-crypto-wasm";
23
- import { RustCrypto } from "./rust-crypto.js";
24
- import { MigrationState } from "../crypto/store/base.js";
25
- import { migrateFromLegacyCrypto, migrateLegacyLocalTrustIfNeeded, migrateRoomSettingsFromLegacyCrypto } from "./libolm_migration.js";
26
- /**
27
- * Create a new `RustCrypto` implementation
28
- *
29
- * @param args - Parameter object
30
- * @internal
31
- */
32
- export function initRustCrypto(_x) {
33
- return _initRustCrypto.apply(this, arguments);
34
- }
35
- function _initRustCrypto() {
36
- _initRustCrypto = _asyncToGenerator(function* (args) {
37
- var {
38
- logger
39
- } = args;
40
-
41
- // initialise the rust matrix-sdk-crypto-wasm, if it hasn't already been done
42
- logger.debug("Initialising Rust crypto-sdk WASM artifact");
43
- yield RustSdkCryptoJs.initAsync();
44
-
45
- // enable tracing in the rust-sdk
46
- new RustSdkCryptoJs.Tracing(RustSdkCryptoJs.LoggerLevel.Debug).turnOn();
47
- logger.debug("Opening Rust CryptoStore");
48
- var storeHandle;
49
- if (args.storePrefix) {
50
- if (args.storeKey) {
51
- storeHandle = yield StoreHandle.openWithKey(args.storePrefix, args.storeKey);
52
- } else {
53
- storeHandle = yield StoreHandle.open(args.storePrefix, args.storePassphrase);
54
- }
55
- } else {
56
- storeHandle = yield StoreHandle.open();
57
- }
58
- if (args.legacyCryptoStore) {
59
- // We have a legacy crypto store, which we may need to migrate from.
60
- yield migrateFromLegacyCrypto(_objectSpread({
61
- legacyStore: args.legacyCryptoStore,
62
- storeHandle
63
- }, args));
64
- }
65
- var rustCrypto = yield initOlmMachine(logger, args.http, args.userId, args.deviceId, args.secretStorage, args.cryptoCallbacks, storeHandle, args.legacyCryptoStore);
66
- storeHandle.free();
67
- logger.debug("Completed rust crypto-sdk setup");
68
- return rustCrypto;
69
- });
70
- return _initRustCrypto.apply(this, arguments);
71
- }
72
- function initOlmMachine(_x2, _x3, _x4, _x5, _x6, _x7, _x8, _x9) {
73
- return _initOlmMachine.apply(this, arguments);
74
- }
75
- function _initOlmMachine() {
76
- _initOlmMachine = _asyncToGenerator(function* (logger, http, userId, deviceId, secretStorage, cryptoCallbacks, storeHandle, legacyCryptoStore) {
77
- logger.debug("Init OlmMachine");
78
- var olmMachine = yield RustSdkCryptoJs.OlmMachine.initFromStore(new RustSdkCryptoJs.UserId(userId), new RustSdkCryptoJs.DeviceId(deviceId), storeHandle);
79
-
80
- // A final migration step, now that we have an OlmMachine.
81
- if (legacyCryptoStore) {
82
- yield migrateRoomSettingsFromLegacyCrypto({
83
- logger,
84
- legacyStore: legacyCryptoStore,
85
- olmMachine
86
- });
87
- }
88
-
89
- // Disable room key requests, per https://github.com/vector-im/element-web/issues/26524.
90
- olmMachine.roomKeyRequestsEnabled = false;
91
- var rustCrypto = new RustCrypto(logger, olmMachine, http, userId, deviceId, secretStorage, cryptoCallbacks);
92
- yield olmMachine.registerRoomKeyUpdatedCallback(sessions => rustCrypto.onRoomKeysUpdated(sessions));
93
- yield olmMachine.registerRoomKeysWithheldCallback(withheld => rustCrypto.onRoomKeysWithheld(withheld));
94
- yield olmMachine.registerUserIdentityUpdatedCallback(userId => rustCrypto.onUserIdentityUpdated(userId));
95
- yield olmMachine.registerDevicesUpdatedCallback(userIds => rustCrypto.onDevicesUpdated(userIds));
96
-
97
- // Check if there are any key backup secrets pending processing. There may be multiple secrets to process if several devices have gossiped them.
98
- // The `registerReceiveSecretCallback` function will only be triggered for new secrets. If the client is restarted before processing them, the secrets will need to be manually handled.
99
- rustCrypto.checkSecrets("m.megolm_backup.v1");
100
-
101
- // Register a callback to be notified when a new secret is received, as for now only the key backup secret is supported (the cross signing secrets are handled automatically by the OlmMachine)
102
- yield olmMachine.registerReceiveSecretCallback((name, _value) =>
103
- // Instead of directly checking the secret value, we poll the inbox to get all values for that secret type.
104
- // Once we have all the values, we can safely clear the secret inbox.
105
- rustCrypto.checkSecrets(name));
106
-
107
- // Tell the OlmMachine to think about its outgoing requests before we hand control back to the application.
108
- //
109
- // This is primarily a fudge to get it to correctly populate the `users_for_key_query` list, so that future
110
- // calls to getIdentity (etc) block until the key queries are performed.
111
- //
112
- // Note that we don't actually need to *make* any requests here; it is sufficient to tell the Rust side to think
113
- // about them.
114
- //
115
- // XXX: find a less hacky way to do this.
116
- yield olmMachine.outgoingRequests();
117
- if (legacyCryptoStore && (yield legacyCryptoStore.containsData())) {
118
- var migrationState = yield legacyCryptoStore.getMigrationState();
119
- if (migrationState < MigrationState.INITIAL_OWN_KEY_QUERY_DONE) {
120
- logger.debug("Performing initial key query after migration");
121
- // We need to do an initial keys query so that the rust stack can properly update trust of
122
- // the user device and identity from the migrated private keys.
123
- // If not done, there is a short period where the own device/identity trust will be undefined after migration.
124
- var initialKeyQueryDone = false;
125
- while (!initialKeyQueryDone) {
126
- try {
127
- yield rustCrypto.userHasCrossSigningKeys(userId);
128
- initialKeyQueryDone = true;
129
- } catch (e) {
130
- // If the initial key query fails, we retry until it succeeds.
131
- logger.error("Failed to check for cross-signing keys after migration, retrying", e);
132
- }
133
- }
134
-
135
- // If the private master cross-signing key was not cached in the legacy store, the rust session
136
- // will not be able to establish the trust of the user identity.
137
- // That means that after migration the session could revert to unverified.
138
- // In order to avoid asking the users to re-verify their sessions, we need to migrate the legacy local trust
139
- // (if the legacy session was already verified) to the new session.
140
- yield migrateLegacyLocalTrustIfNeeded({
141
- legacyCryptoStore,
142
- rustCrypto,
143
- logger
144
- });
145
- yield legacyCryptoStore.setMigrationState(MigrationState.INITIAL_OWN_KEY_QUERY_DONE);
146
- }
147
- }
148
- return rustCrypto;
149
- });
150
- return _initOlmMachine.apply(this, arguments);
151
- }
152
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["RustSdkCryptoJs","StoreHandle","RustCrypto","MigrationState","migrateFromLegacyCrypto","migrateLegacyLocalTrustIfNeeded","migrateRoomSettingsFromLegacyCrypto","initRustCrypto","_x","_initRustCrypto","apply","arguments","_asyncToGenerator","args","logger","debug","initAsync","Tracing","LoggerLevel","Debug","turnOn","storeHandle","storePrefix","storeKey","openWithKey","open","storePassphrase","legacyCryptoStore","_objectSpread","legacyStore","rustCrypto","initOlmMachine","http","userId","deviceId","secretStorage","cryptoCallbacks","free","_x2","_x3","_x4","_x5","_x6","_x7","_x8","_x9","_initOlmMachine","olmMachine","OlmMachine","initFromStore","UserId","DeviceId","roomKeyRequestsEnabled","registerRoomKeyUpdatedCallback","sessions","onRoomKeysUpdated","registerRoomKeysWithheldCallback","withheld","onRoomKeysWithheld","registerUserIdentityUpdatedCallback","onUserIdentityUpdated","registerDevicesUpdatedCallback","userIds","onDevicesUpdated","checkSecrets","registerReceiveSecretCallback","name","_value","outgoingRequests","containsData","migrationState","getMigrationState","INITIAL_OWN_KEY_QUERY_DONE","initialKeyQueryDone","userHasCrossSigningKeys","e","error","setMigrationState"],"sources":["../../src/rust-crypto/index.ts"],"sourcesContent":["/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport * as RustSdkCryptoJs from \"@matrix-org/matrix-sdk-crypto-wasm\";\nimport { StoreHandle } from \"@matrix-org/matrix-sdk-crypto-wasm\";\n\nimport { RustCrypto } from \"./rust-crypto.ts\";\nimport { IHttpOpts, MatrixHttpApi } from \"../http-api/index.ts\";\nimport { ServerSideSecretStorage } from \"../secret-storage.ts\";\nimport { Logger } from \"../logger.ts\";\nimport { CryptoStore, MigrationState } from \"../crypto/store/base.ts\";\nimport {\n migrateFromLegacyCrypto,\n migrateLegacyLocalTrustIfNeeded,\n migrateRoomSettingsFromLegacyCrypto,\n} from \"./libolm_migration.ts\";\nimport { CryptoCallbacks } from \"../crypto-api/index.ts\";\n\n/**\n * Create a new `RustCrypto` implementation\n *\n * @param args - Parameter object\n * @internal\n */\nexport async function initRustCrypto(args: {\n /** A `Logger` instance that will be used for debug output. */\n logger: Logger;\n\n /**\n * Low-level HTTP interface: used to make outgoing requests required by the rust SDK.\n * We expect it to set the access token, etc.\n */\n http: MatrixHttpApi<IHttpOpts & { onlyData: true }>;\n\n /** The local user's User ID. */\n userId: string;\n\n /** The local user's Device ID. */\n deviceId: string;\n\n /** Interface to server-side secret storage. */\n secretStorage: ServerSideSecretStorage;\n\n /** Crypto callbacks provided by the application. */\n cryptoCallbacks: CryptoCallbacks;\n\n /**\n * The prefix to use on the indexeddbs created by rust-crypto.\n * If `null`, a memory store will be used.\n */\n storePrefix: string | null;\n\n /**\n * A passphrase to use to encrypt the indexeddb created by rust-crypto.\n *\n * Ignored if `storePrefix` is null, or `storeKey` is set. If neither this nor `storeKey` is set\n * (and `storePrefix` is not null), the indexeddb will be unencrypted.\n */\n storePassphrase?: string;\n\n /**\n * A key to use to encrypt the indexeddb created by rust-crypto.\n *\n * Ignored if `storePrefix` is null. Otherwise, if it is set, it must be a 32-byte cryptographic key, which\n * will be used to encrypt the indexeddb. See also `storePassphrase`.\n */\n storeKey?: Uint8Array;\n\n /** If defined, we will check if any data needs migrating from this store to the rust store. */\n legacyCryptoStore?: CryptoStore;\n\n /** The pickle key for `legacyCryptoStore` */\n legacyPickleKey?: string;\n\n /**\n * A callback which will receive progress updates on migration from `legacyCryptoStore`.\n *\n * Called with (-1, -1) to mark the end of migration.\n */\n legacyMigrationProgressListener?: (progress: number, total: number) => void;\n}): Promise<RustCrypto> {\n const { logger } = args;\n\n // initialise the rust matrix-sdk-crypto-wasm, if it hasn't already been done\n logger.debug(\"Initialising Rust crypto-sdk WASM artifact\");\n await RustSdkCryptoJs.initAsync();\n\n // enable tracing in the rust-sdk\n new RustSdkCryptoJs.Tracing(RustSdkCryptoJs.LoggerLevel.Debug).turnOn();\n\n logger.debug(\"Opening Rust CryptoStore\");\n let storeHandle;\n if (args.storePrefix) {\n if (args.storeKey) {\n storeHandle = await StoreHandle.openWithKey(args.storePrefix, args.storeKey);\n } else {\n storeHandle = await StoreHandle.open(args.storePrefix, args.storePassphrase);\n }\n } else {\n storeHandle = await StoreHandle.open();\n }\n\n if (args.legacyCryptoStore) {\n // We have a legacy crypto store, which we may need to migrate from.\n await migrateFromLegacyCrypto({\n legacyStore: args.legacyCryptoStore,\n storeHandle,\n ...args,\n });\n }\n\n const rustCrypto = await initOlmMachine(\n logger,\n args.http,\n args.userId,\n args.deviceId,\n args.secretStorage,\n args.cryptoCallbacks,\n storeHandle,\n args.legacyCryptoStore,\n );\n\n storeHandle.free();\n\n logger.debug(\"Completed rust crypto-sdk setup\");\n return rustCrypto;\n}\n\nasync function initOlmMachine(\n logger: Logger,\n http: MatrixHttpApi<IHttpOpts & { onlyData: true }>,\n userId: string,\n deviceId: string,\n secretStorage: ServerSideSecretStorage,\n cryptoCallbacks: CryptoCallbacks,\n storeHandle: StoreHandle,\n legacyCryptoStore?: CryptoStore,\n): Promise<RustCrypto> {\n logger.debug(\"Init OlmMachine\");\n\n const olmMachine = await RustSdkCryptoJs.OlmMachine.initFromStore(\n new RustSdkCryptoJs.UserId(userId),\n new RustSdkCryptoJs.DeviceId(deviceId),\n storeHandle,\n );\n\n // A final migration step, now that we have an OlmMachine.\n if (legacyCryptoStore) {\n await migrateRoomSettingsFromLegacyCrypto({\n logger,\n legacyStore: legacyCryptoStore,\n olmMachine,\n });\n }\n\n // Disable room key requests, per https://github.com/vector-im/element-web/issues/26524.\n olmMachine.roomKeyRequestsEnabled = false;\n\n const rustCrypto = new RustCrypto(logger, olmMachine, http, userId, deviceId, secretStorage, cryptoCallbacks);\n\n await olmMachine.registerRoomKeyUpdatedCallback((sessions: RustSdkCryptoJs.RoomKeyInfo[]) =>\n rustCrypto.onRoomKeysUpdated(sessions),\n );\n await olmMachine.registerRoomKeysWithheldCallback((withheld: RustSdkCryptoJs.RoomKeyWithheldInfo[]) =>\n rustCrypto.onRoomKeysWithheld(withheld),\n );\n await olmMachine.registerUserIdentityUpdatedCallback((userId: RustSdkCryptoJs.UserId) =>\n rustCrypto.onUserIdentityUpdated(userId),\n );\n await olmMachine.registerDevicesUpdatedCallback((userIds: string[]) => rustCrypto.onDevicesUpdated(userIds));\n\n // Check if there are any key backup secrets pending processing. There may be multiple secrets to process if several devices have gossiped them.\n // The `registerReceiveSecretCallback` function will only be triggered for new secrets. If the client is restarted before processing them, the secrets will need to be manually handled.\n rustCrypto.checkSecrets(\"m.megolm_backup.v1\");\n\n // Register a callback to be notified when a new secret is received, as for now only the key backup secret is supported (the cross signing secrets are handled automatically by the OlmMachine)\n await olmMachine.registerReceiveSecretCallback((name: string, _value: string) =>\n // Instead of directly checking the secret value, we poll the inbox to get all values for that secret type.\n // Once we have all the values, we can safely clear the secret inbox.\n rustCrypto.checkSecrets(name),\n );\n\n // Tell the OlmMachine to think about its outgoing requests before we hand control back to the application.\n //\n // This is primarily a fudge to get it to correctly populate the `users_for_key_query` list, so that future\n // calls to getIdentity (etc) block until the key queries are performed.\n //\n // Note that we don't actually need to *make* any requests here; it is sufficient to tell the Rust side to think\n // about them.\n //\n // XXX: find a less hacky way to do this.\n await olmMachine.outgoingRequests();\n\n if (legacyCryptoStore && (await legacyCryptoStore.containsData())) {\n const migrationState = await legacyCryptoStore.getMigrationState();\n if (migrationState < MigrationState.INITIAL_OWN_KEY_QUERY_DONE) {\n logger.debug(`Performing initial key query after migration`);\n // We need to do an initial keys query so that the rust stack can properly update trust of\n // the user device and identity from the migrated private keys.\n // If not done, there is a short period where the own device/identity trust will be undefined after migration.\n let initialKeyQueryDone = false;\n while (!initialKeyQueryDone) {\n try {\n await rustCrypto.userHasCrossSigningKeys(userId);\n initialKeyQueryDone = true;\n } catch (e) {\n // If the initial key query fails, we retry until it succeeds.\n logger.error(\"Failed to check for cross-signing keys after migration, retrying\", e);\n }\n }\n\n // If the private master cross-signing key was not cached in the legacy store, the rust session\n // will not be able to establish the trust of the user identity.\n // That means that after migration the session could revert to unverified.\n // In order to avoid asking the users to re-verify their sessions, we need to migrate the legacy local trust\n // (if the legacy session was already verified) to the new session.\n await migrateLegacyLocalTrustIfNeeded({ legacyCryptoStore, rustCrypto, logger });\n\n await legacyCryptoStore.setMigrationState(MigrationState.INITIAL_OWN_KEY_QUERY_DONE);\n }\n }\n\n return rustCrypto;\n}\n"],"mappings":"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","ignoreList":[]}