@unwanted/matrix-sdk-mini 34.12.0 → 36.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (759) hide show
  1. package/git-revision.txt +1 -1
  2. package/lib/@types/event.d.ts +25 -19
  3. package/lib/@types/event.d.ts.map +1 -1
  4. package/lib/@types/event.js +5 -0
  5. package/lib/@types/event.js.map +1 -1
  6. package/lib/@types/global.d.js +0 -2
  7. package/lib/@types/global.d.js.map +1 -1
  8. package/lib/autodiscovery.d.ts +1 -1
  9. package/lib/autodiscovery.d.ts.map +1 -1
  10. package/lib/autodiscovery.js.map +1 -1
  11. package/lib/base64.d.ts +3 -6
  12. package/lib/base64.d.ts.map +1 -1
  13. package/lib/base64.js +43 -36
  14. package/lib/base64.js.map +1 -1
  15. package/lib/browser-index.d.ts.map +1 -1
  16. package/lib/browser-index.js +0 -11
  17. package/lib/browser-index.js.map +1 -1
  18. package/lib/client.d.ts +45 -1306
  19. package/lib/client.d.ts.map +1 -1
  20. package/lib/client.js +406 -2963
  21. package/lib/client.js.map +1 -1
  22. package/lib/digest.d.ts +2 -2
  23. package/lib/digest.d.ts.map +1 -1
  24. package/lib/digest.js +2 -2
  25. package/lib/digest.js.map +1 -1
  26. package/lib/embedded.d.ts +2 -23
  27. package/lib/embedded.d.ts.map +1 -1
  28. package/lib/embedded.js +82 -209
  29. package/lib/embedded.js.map +1 -1
  30. package/lib/event-mapper.d.ts.map +1 -1
  31. package/lib/event-mapper.js +0 -4
  32. package/lib/event-mapper.js.map +1 -1
  33. package/lib/feature.d.ts.map +1 -1
  34. package/lib/feature.js +2 -1
  35. package/lib/feature.js.map +1 -1
  36. package/lib/http-api/errors.d.ts +3 -3
  37. package/lib/http-api/errors.js +3 -3
  38. package/lib/http-api/errors.js.map +1 -1
  39. package/lib/http-api/utils.js +2 -2
  40. package/lib/http-api/utils.js.map +1 -1
  41. package/lib/matrix.d.ts +0 -25
  42. package/lib/matrix.d.ts.map +1 -1
  43. package/lib/matrix.js +1 -30
  44. package/lib/matrix.js.map +1 -1
  45. package/lib/models/MSC3089Branch.d.ts.map +1 -1
  46. package/lib/models/MSC3089Branch.js +0 -3
  47. package/lib/models/MSC3089Branch.js.map +1 -1
  48. package/lib/models/event-timeline-set.d.ts +6 -10
  49. package/lib/models/event-timeline-set.d.ts.map +1 -1
  50. package/lib/models/event-timeline-set.js +28 -36
  51. package/lib/models/event-timeline-set.js.map +1 -1
  52. package/lib/models/event-timeline.d.ts +7 -2
  53. package/lib/models/event-timeline.d.ts.map +1 -1
  54. package/lib/models/event-timeline.js +9 -30
  55. package/lib/models/event-timeline.js.map +1 -1
  56. package/lib/models/event.d.ts +12 -96
  57. package/lib/models/event.d.ts.map +1 -1
  58. package/lib/models/event.js +59 -286
  59. package/lib/models/event.js.map +1 -1
  60. package/lib/models/invites-ignorer-types.d.ts +27 -0
  61. package/lib/models/invites-ignorer-types.d.ts.map +1 -0
  62. package/lib/models/invites-ignorer-types.js +36 -0
  63. package/lib/models/invites-ignorer-types.js.map +1 -0
  64. package/lib/models/invites-ignorer.d.ts +2 -26
  65. package/lib/models/invites-ignorer.d.ts.map +1 -1
  66. package/lib/models/invites-ignorer.js +2 -27
  67. package/lib/models/invites-ignorer.js.map +1 -1
  68. package/lib/models/poll.d.ts.map +1 -1
  69. package/lib/models/poll.js +1 -5
  70. package/lib/models/poll.js.map +1 -1
  71. package/lib/models/relations-container.d.ts.map +1 -1
  72. package/lib/models/relations-container.js +1 -7
  73. package/lib/models/relations-container.js.map +1 -1
  74. package/lib/models/relations.d.ts +0 -1
  75. package/lib/models/relations.d.ts.map +1 -1
  76. package/lib/models/relations.js +0 -8
  77. package/lib/models/relations.js.map +1 -1
  78. package/lib/models/room-member.d.ts +6 -1
  79. package/lib/models/room-member.d.ts.map +1 -1
  80. package/lib/models/room-member.js +7 -1
  81. package/lib/models/room-member.js.map +1 -1
  82. package/lib/models/room-state.d.ts +2 -13
  83. package/lib/models/room-state.d.ts.map +1 -1
  84. package/lib/models/room-state.js +12 -56
  85. package/lib/models/room-state.js.map +1 -1
  86. package/lib/models/room.d.ts +8 -21
  87. package/lib/models/room.d.ts.map +1 -1
  88. package/lib/models/room.js +128 -163
  89. package/lib/models/room.js.map +1 -1
  90. package/lib/models/thread.d.ts.map +1 -1
  91. package/lib/models/thread.js +5 -4
  92. package/lib/models/thread.js.map +1 -1
  93. package/lib/oidc/authorize.d.ts +2 -2
  94. package/lib/oidc/authorize.d.ts.map +1 -1
  95. package/lib/oidc/authorize.js +5 -5
  96. package/lib/oidc/authorize.js.map +1 -1
  97. package/lib/oidc/discovery.d.ts +8 -0
  98. package/lib/oidc/discovery.d.ts.map +1 -1
  99. package/lib/oidc/discovery.js +22 -11
  100. package/lib/oidc/discovery.js.map +1 -1
  101. package/lib/oidc/index.d.ts +3 -4
  102. package/lib/oidc/index.d.ts.map +1 -1
  103. package/lib/oidc/index.js.map +1 -1
  104. package/lib/oidc/register.js +3 -3
  105. package/lib/oidc/register.js.map +1 -1
  106. package/lib/oidc/tokenRefresher.d.ts.map +1 -1
  107. package/lib/oidc/tokenRefresher.js +6 -5
  108. package/lib/oidc/tokenRefresher.js.map +1 -1
  109. package/lib/oidc/validate.d.ts +9 -23
  110. package/lib/oidc/validate.d.ts.map +1 -1
  111. package/lib/oidc/validate.js +13 -28
  112. package/lib/oidc/validate.js.map +1 -1
  113. package/lib/randomstring.d.ts +30 -3
  114. package/lib/randomstring.d.ts.map +1 -1
  115. package/lib/randomstring.js +68 -16
  116. package/lib/randomstring.js.map +1 -1
  117. package/lib/sliding-sync-sdk.d.ts +3 -4
  118. package/lib/sliding-sync-sdk.d.ts.map +1 -1
  119. package/lib/sliding-sync-sdk.js +55 -102
  120. package/lib/sliding-sync-sdk.js.map +1 -1
  121. package/lib/sliding-sync.js +9 -6
  122. package/lib/sliding-sync.js.map +1 -1
  123. package/lib/store/indexeddb-local-backend.js +4 -2
  124. package/lib/store/indexeddb-local-backend.js.map +1 -1
  125. package/lib/store/indexeddb.d.ts +1 -1
  126. package/lib/store/indexeddb.d.ts.map +1 -1
  127. package/lib/store/indexeddb.js.map +1 -1
  128. package/lib/sync-accumulator.d.ts +6 -4
  129. package/lib/sync-accumulator.d.ts.map +1 -1
  130. package/lib/sync-accumulator.js +23 -12
  131. package/lib/sync-accumulator.js.map +1 -1
  132. package/lib/sync.d.ts +10 -13
  133. package/lib/sync.d.ts.map +1 -1
  134. package/lib/sync.js +94 -115
  135. package/lib/sync.js.map +1 -1
  136. package/lib/testing.d.ts +13 -44
  137. package/lib/testing.d.ts.map +1 -1
  138. package/lib/testing.js +36 -99
  139. package/lib/testing.js.map +1 -1
  140. package/lib/types.d.ts +0 -1
  141. package/lib/types.d.ts.map +1 -1
  142. package/lib/types.js.map +1 -1
  143. package/package.json +14 -15
  144. package/src/@types/event.ts +19 -36
  145. package/src/@types/global.d.ts +21 -4
  146. package/src/autodiscovery.ts +1 -1
  147. package/src/base64.ts +38 -40
  148. package/src/browser-index.ts +0 -11
  149. package/src/client.ts +175 -3136
  150. package/src/digest.ts +3 -3
  151. package/src/embedded.ts +43 -149
  152. package/src/event-mapper.ts +0 -4
  153. package/src/feature.ts +1 -0
  154. package/src/http-api/errors.ts +3 -3
  155. package/src/http-api/utils.ts +2 -2
  156. package/src/matrix.ts +0 -41
  157. package/src/models/MSC3089Branch.ts +0 -3
  158. package/src/models/event-timeline-set.ts +17 -38
  159. package/src/models/event-timeline.ts +11 -26
  160. package/src/models/event.ts +54 -295
  161. package/src/models/invites-ignorer-types.ts +48 -0
  162. package/src/models/invites-ignorer.ts +7 -42
  163. package/src/models/poll.ts +0 -6
  164. package/src/models/relations-container.ts +1 -8
  165. package/src/models/relations.ts +0 -8
  166. package/src/models/room-member.ts +16 -1
  167. package/src/models/room-state.ts +4 -37
  168. package/src/models/room.ts +34 -69
  169. package/src/models/thread.ts +4 -3
  170. package/src/oidc/authorize.ts +7 -7
  171. package/src/oidc/discovery.ts +16 -10
  172. package/src/oidc/index.ts +3 -4
  173. package/src/oidc/register.ts +3 -3
  174. package/src/oidc/tokenRefresher.ts +3 -2
  175. package/src/oidc/validate.ts +40 -63
  176. package/src/randomstring.ts +65 -19
  177. package/src/sliding-sync-sdk.ts +10 -83
  178. package/src/sliding-sync.ts +6 -6
  179. package/src/store/indexeddb-local-backend.ts +2 -2
  180. package/src/store/indexeddb.ts +1 -1
  181. package/src/sync-accumulator.ts +33 -16
  182. package/src/sync.ts +112 -143
  183. package/src/testing.ts +36 -103
  184. package/src/types.ts +0 -1
  185. package/CHANGELOG.md +0 -5910
  186. package/lib/@types/AESEncryptedSecretStoragePayload.d.ts +0 -14
  187. package/lib/@types/AESEncryptedSecretStoragePayload.d.ts.map +0 -1
  188. package/lib/@types/AESEncryptedSecretStoragePayload.js +0 -1
  189. package/lib/@types/AESEncryptedSecretStoragePayload.js.map +0 -1
  190. package/lib/@types/crypto.d.ts +0 -47
  191. package/lib/@types/crypto.d.ts.map +0 -1
  192. package/lib/@types/crypto.js +0 -1
  193. package/lib/@types/crypto.js.map +0 -1
  194. package/lib/@types/matrix-sdk-crypto-wasm.d.js +0 -1
  195. package/lib/@types/matrix-sdk-crypto-wasm.d.js.map +0 -1
  196. package/lib/common-crypto/CryptoBackend.d.ts +0 -240
  197. package/lib/common-crypto/CryptoBackend.d.ts.map +0 -1
  198. package/lib/common-crypto/CryptoBackend.js +0 -73
  199. package/lib/common-crypto/CryptoBackend.js.map +0 -1
  200. package/lib/common-crypto/key-passphrase.d.ts +0 -14
  201. package/lib/common-crypto/key-passphrase.d.ts.map +0 -1
  202. package/lib/common-crypto/key-passphrase.js +0 -33
  203. package/lib/common-crypto/key-passphrase.js.map +0 -1
  204. package/lib/crypto/CrossSigning.d.ts +0 -184
  205. package/lib/crypto/CrossSigning.d.ts.map +0 -1
  206. package/lib/crypto/CrossSigning.js +0 -718
  207. package/lib/crypto/CrossSigning.js.map +0 -1
  208. package/lib/crypto/DeviceList.d.ts +0 -216
  209. package/lib/crypto/DeviceList.d.ts.map +0 -1
  210. package/lib/crypto/DeviceList.js +0 -892
  211. package/lib/crypto/DeviceList.js.map +0 -1
  212. package/lib/crypto/EncryptionSetup.d.ts +0 -152
  213. package/lib/crypto/EncryptionSetup.d.ts.map +0 -1
  214. package/lib/crypto/EncryptionSetup.js +0 -356
  215. package/lib/crypto/EncryptionSetup.js.map +0 -1
  216. package/lib/crypto/OlmDevice.d.ts +0 -457
  217. package/lib/crypto/OlmDevice.d.ts.map +0 -1
  218. package/lib/crypto/OlmDevice.js +0 -1241
  219. package/lib/crypto/OlmDevice.js.map +0 -1
  220. package/lib/crypto/OutgoingRoomKeyRequestManager.d.ts +0 -109
  221. package/lib/crypto/OutgoingRoomKeyRequestManager.d.ts.map +0 -1
  222. package/lib/crypto/OutgoingRoomKeyRequestManager.js +0 -415
  223. package/lib/crypto/OutgoingRoomKeyRequestManager.js.map +0 -1
  224. package/lib/crypto/RoomList.d.ts +0 -26
  225. package/lib/crypto/RoomList.d.ts.map +0 -1
  226. package/lib/crypto/RoomList.js +0 -71
  227. package/lib/crypto/RoomList.js.map +0 -1
  228. package/lib/crypto/SecretSharing.d.ts +0 -24
  229. package/lib/crypto/SecretSharing.d.ts.map +0 -1
  230. package/lib/crypto/SecretSharing.js +0 -194
  231. package/lib/crypto/SecretSharing.js.map +0 -1
  232. package/lib/crypto/SecretStorage.d.ts +0 -55
  233. package/lib/crypto/SecretStorage.d.ts.map +0 -1
  234. package/lib/crypto/SecretStorage.js +0 -118
  235. package/lib/crypto/SecretStorage.js.map +0 -1
  236. package/lib/crypto/aes.d.ts +0 -6
  237. package/lib/crypto/aes.d.ts.map +0 -1
  238. package/lib/crypto/aes.js +0 -24
  239. package/lib/crypto/aes.js.map +0 -1
  240. package/lib/crypto/algorithms/base.d.ts +0 -156
  241. package/lib/crypto/algorithms/base.d.ts.map +0 -1
  242. package/lib/crypto/algorithms/base.js +0 -187
  243. package/lib/crypto/algorithms/base.js.map +0 -1
  244. package/lib/crypto/algorithms/index.d.ts +0 -4
  245. package/lib/crypto/algorithms/index.d.ts.map +0 -1
  246. package/lib/crypto/algorithms/index.js +0 -20
  247. package/lib/crypto/algorithms/index.js.map +0 -1
  248. package/lib/crypto/algorithms/megolm.d.ts +0 -385
  249. package/lib/crypto/algorithms/megolm.d.ts.map +0 -1
  250. package/lib/crypto/algorithms/megolm.js +0 -1822
  251. package/lib/crypto/algorithms/megolm.js.map +0 -1
  252. package/lib/crypto/algorithms/olm.d.ts +0 -5
  253. package/lib/crypto/algorithms/olm.d.ts.map +0 -1
  254. package/lib/crypto/algorithms/olm.js +0 -299
  255. package/lib/crypto/algorithms/olm.js.map +0 -1
  256. package/lib/crypto/api.d.ts +0 -32
  257. package/lib/crypto/api.d.ts.map +0 -1
  258. package/lib/crypto/api.js +0 -22
  259. package/lib/crypto/api.js.map +0 -1
  260. package/lib/crypto/backup.d.ts +0 -227
  261. package/lib/crypto/backup.d.ts.map +0 -1
  262. package/lib/crypto/backup.js +0 -824
  263. package/lib/crypto/backup.js.map +0 -1
  264. package/lib/crypto/crypto.d.ts +0 -3
  265. package/lib/crypto/crypto.d.ts.map +0 -1
  266. package/lib/crypto/crypto.js +0 -19
  267. package/lib/crypto/crypto.js.map +0 -1
  268. package/lib/crypto/dehydration.d.ts +0 -34
  269. package/lib/crypto/dehydration.d.ts.map +0 -1
  270. package/lib/crypto/dehydration.js +0 -252
  271. package/lib/crypto/dehydration.js.map +0 -1
  272. package/lib/crypto/device-converter.d.ts +0 -9
  273. package/lib/crypto/device-converter.d.ts.map +0 -1
  274. package/lib/crypto/device-converter.js +0 -42
  275. package/lib/crypto/device-converter.js.map +0 -1
  276. package/lib/crypto/deviceinfo.d.ts +0 -99
  277. package/lib/crypto/deviceinfo.d.ts.map +0 -1
  278. package/lib/crypto/deviceinfo.js +0 -148
  279. package/lib/crypto/deviceinfo.js.map +0 -1
  280. package/lib/crypto/index.d.ts +0 -1210
  281. package/lib/crypto/index.d.ts.map +0 -1
  282. package/lib/crypto/index.js +0 -4101
  283. package/lib/crypto/index.js.map +0 -1
  284. package/lib/crypto/key_passphrase.d.ts +0 -14
  285. package/lib/crypto/key_passphrase.d.ts.map +0 -1
  286. package/lib/crypto/key_passphrase.js +0 -44
  287. package/lib/crypto/key_passphrase.js.map +0 -1
  288. package/lib/crypto/keybackup.d.ts +0 -18
  289. package/lib/crypto/keybackup.d.ts.map +0 -1
  290. package/lib/crypto/keybackup.js +0 -1
  291. package/lib/crypto/keybackup.js.map +0 -1
  292. package/lib/crypto/olmlib.d.ts +0 -129
  293. package/lib/crypto/olmlib.d.ts.map +0 -1
  294. package/lib/crypto/olmlib.js +0 -492
  295. package/lib/crypto/olmlib.js.map +0 -1
  296. package/lib/crypto/recoverykey.d.ts +0 -2
  297. package/lib/crypto/recoverykey.d.ts.map +0 -1
  298. package/lib/crypto/recoverykey.js +0 -19
  299. package/lib/crypto/recoverykey.js.map +0 -1
  300. package/lib/crypto/store/base.d.ts +0 -252
  301. package/lib/crypto/store/base.d.ts.map +0 -1
  302. package/lib/crypto/store/base.js +0 -64
  303. package/lib/crypto/store/base.js.map +0 -1
  304. package/lib/crypto/store/indexeddb-crypto-store-backend.d.ts +0 -187
  305. package/lib/crypto/store/indexeddb-crypto-store-backend.d.ts.map +0 -1
  306. package/lib/crypto/store/indexeddb-crypto-store-backend.js +0 -1145
  307. package/lib/crypto/store/indexeddb-crypto-store-backend.js.map +0 -1
  308. package/lib/crypto/store/indexeddb-crypto-store.d.ts +0 -432
  309. package/lib/crypto/store/indexeddb-crypto-store.d.ts.map +0 -1
  310. package/lib/crypto/store/indexeddb-crypto-store.js +0 -728
  311. package/lib/crypto/store/indexeddb-crypto-store.js.map +0 -1
  312. package/lib/crypto/store/localStorage-crypto-store.d.ts +0 -119
  313. package/lib/crypto/store/localStorage-crypto-store.d.ts.map +0 -1
  314. package/lib/crypto/store/localStorage-crypto-store.js +0 -531
  315. package/lib/crypto/store/localStorage-crypto-store.js.map +0 -1
  316. package/lib/crypto/store/memory-crypto-store.d.ts +0 -215
  317. package/lib/crypto/store/memory-crypto-store.d.ts.map +0 -1
  318. package/lib/crypto/store/memory-crypto-store.js +0 -622
  319. package/lib/crypto/store/memory-crypto-store.js.map +0 -1
  320. package/lib/crypto/verification/Base.d.ts +0 -105
  321. package/lib/crypto/verification/Base.d.ts.map +0 -1
  322. package/lib/crypto/verification/Base.js +0 -372
  323. package/lib/crypto/verification/Base.js.map +0 -1
  324. package/lib/crypto/verification/Error.d.ts +0 -35
  325. package/lib/crypto/verification/Error.d.ts.map +0 -1
  326. package/lib/crypto/verification/Error.js +0 -86
  327. package/lib/crypto/verification/Error.js.map +0 -1
  328. package/lib/crypto/verification/IllegalMethod.d.ts +0 -15
  329. package/lib/crypto/verification/IllegalMethod.d.ts.map +0 -1
  330. package/lib/crypto/verification/IllegalMethod.js +0 -43
  331. package/lib/crypto/verification/IllegalMethod.js.map +0 -1
  332. package/lib/crypto/verification/QRCode.d.ts +0 -51
  333. package/lib/crypto/verification/QRCode.d.ts.map +0 -1
  334. package/lib/crypto/verification/QRCode.js +0 -277
  335. package/lib/crypto/verification/QRCode.js.map +0 -1
  336. package/lib/crypto/verification/SAS.d.ts +0 -27
  337. package/lib/crypto/verification/SAS.d.ts.map +0 -1
  338. package/lib/crypto/verification/SAS.js +0 -485
  339. package/lib/crypto/verification/SAS.js.map +0 -1
  340. package/lib/crypto/verification/SASDecimal.d.ts +0 -8
  341. package/lib/crypto/verification/SASDecimal.d.ts.map +0 -1
  342. package/lib/crypto/verification/SASDecimal.js +0 -34
  343. package/lib/crypto/verification/SASDecimal.js.map +0 -1
  344. package/lib/crypto/verification/request/Channel.d.ts +0 -18
  345. package/lib/crypto/verification/request/Channel.d.ts.map +0 -1
  346. package/lib/crypto/verification/request/Channel.js +0 -1
  347. package/lib/crypto/verification/request/Channel.js.map +0 -1
  348. package/lib/crypto/verification/request/InRoomChannel.d.ts +0 -113
  349. package/lib/crypto/verification/request/InRoomChannel.d.ts.map +0 -1
  350. package/lib/crypto/verification/request/InRoomChannel.js +0 -351
  351. package/lib/crypto/verification/request/InRoomChannel.js.map +0 -1
  352. package/lib/crypto/verification/request/ToDeviceChannel.d.ts +0 -105
  353. package/lib/crypto/verification/request/ToDeviceChannel.d.ts.map +0 -1
  354. package/lib/crypto/verification/request/ToDeviceChannel.js +0 -328
  355. package/lib/crypto/verification/request/ToDeviceChannel.js.map +0 -1
  356. package/lib/crypto/verification/request/VerificationRequest.d.ts +0 -227
  357. package/lib/crypto/verification/request/VerificationRequest.d.ts.map +0 -1
  358. package/lib/crypto/verification/request/VerificationRequest.js +0 -937
  359. package/lib/crypto/verification/request/VerificationRequest.js.map +0 -1
  360. package/lib/crypto-api/CryptoEvent.d.ts +0 -69
  361. package/lib/crypto-api/CryptoEvent.d.ts.map +0 -1
  362. package/lib/crypto-api/CryptoEvent.js +0 -33
  363. package/lib/crypto-api/CryptoEvent.js.map +0 -1
  364. package/lib/crypto-api/CryptoEventHandlerMap.d.ts +0 -16
  365. package/lib/crypto-api/CryptoEventHandlerMap.d.ts.map +0 -1
  366. package/lib/crypto-api/CryptoEventHandlerMap.js +0 -22
  367. package/lib/crypto-api/CryptoEventHandlerMap.js.map +0 -1
  368. package/lib/crypto-api/index.d.ts +0 -978
  369. package/lib/crypto-api/index.d.ts.map +0 -1
  370. package/lib/crypto-api/index.js +0 -304
  371. package/lib/crypto-api/index.js.map +0 -1
  372. package/lib/crypto-api/key-passphrase.d.ts +0 -11
  373. package/lib/crypto-api/key-passphrase.d.ts.map +0 -1
  374. package/lib/crypto-api/key-passphrase.js +0 -51
  375. package/lib/crypto-api/key-passphrase.js.map +0 -1
  376. package/lib/crypto-api/keybackup.d.ts +0 -88
  377. package/lib/crypto-api/keybackup.d.ts.map +0 -1
  378. package/lib/crypto-api/keybackup.js +0 -1
  379. package/lib/crypto-api/keybackup.js.map +0 -1
  380. package/lib/crypto-api/recovery-key.d.ts +0 -11
  381. package/lib/crypto-api/recovery-key.d.ts.map +0 -1
  382. package/lib/crypto-api/recovery-key.js +0 -65
  383. package/lib/crypto-api/recovery-key.js.map +0 -1
  384. package/lib/crypto-api/verification.d.ts +0 -344
  385. package/lib/crypto-api/verification.d.ts.map +0 -1
  386. package/lib/crypto-api/verification.js +0 -91
  387. package/lib/crypto-api/verification.js.map +0 -1
  388. package/lib/matrixrtc/CallMembership.d.ts +0 -66
  389. package/lib/matrixrtc/CallMembership.d.ts.map +0 -1
  390. package/lib/matrixrtc/CallMembership.js +0 -197
  391. package/lib/matrixrtc/CallMembership.js.map +0 -1
  392. package/lib/matrixrtc/LivekitFocus.d.ts +0 -16
  393. package/lib/matrixrtc/LivekitFocus.d.ts.map +0 -1
  394. package/lib/matrixrtc/LivekitFocus.js +0 -20
  395. package/lib/matrixrtc/LivekitFocus.js.map +0 -1
  396. package/lib/matrixrtc/MatrixRTCSession.d.ts +0 -295
  397. package/lib/matrixrtc/MatrixRTCSession.d.ts.map +0 -1
  398. package/lib/matrixrtc/MatrixRTCSession.js +0 -1043
  399. package/lib/matrixrtc/MatrixRTCSession.js.map +0 -1
  400. package/lib/matrixrtc/MatrixRTCSessionManager.d.ts +0 -40
  401. package/lib/matrixrtc/MatrixRTCSessionManager.d.ts.map +0 -1
  402. package/lib/matrixrtc/MatrixRTCSessionManager.js +0 -146
  403. package/lib/matrixrtc/MatrixRTCSessionManager.js.map +0 -1
  404. package/lib/matrixrtc/focus.d.ts +0 -10
  405. package/lib/matrixrtc/focus.d.ts.map +0 -1
  406. package/lib/matrixrtc/focus.js +0 -1
  407. package/lib/matrixrtc/focus.js.map +0 -1
  408. package/lib/matrixrtc/index.d.ts +0 -7
  409. package/lib/matrixrtc/index.d.ts.map +0 -1
  410. package/lib/matrixrtc/index.js +0 -21
  411. package/lib/matrixrtc/index.js.map +0 -1
  412. package/lib/matrixrtc/types.d.ts +0 -19
  413. package/lib/matrixrtc/types.d.ts.map +0 -1
  414. package/lib/matrixrtc/types.js +0 -1
  415. package/lib/matrixrtc/types.js.map +0 -1
  416. package/lib/rendezvous/MSC4108SignInWithQR.d.ts +0 -112
  417. package/lib/rendezvous/MSC4108SignInWithQR.d.ts.map +0 -1
  418. package/lib/rendezvous/MSC4108SignInWithQR.js +0 -392
  419. package/lib/rendezvous/MSC4108SignInWithQR.js.map +0 -1
  420. package/lib/rendezvous/RendezvousChannel.d.ts +0 -27
  421. package/lib/rendezvous/RendezvousChannel.d.ts.map +0 -1
  422. package/lib/rendezvous/RendezvousChannel.js +0 -1
  423. package/lib/rendezvous/RendezvousChannel.js.map +0 -1
  424. package/lib/rendezvous/RendezvousCode.d.ts +0 -9
  425. package/lib/rendezvous/RendezvousCode.d.ts.map +0 -1
  426. package/lib/rendezvous/RendezvousCode.js +0 -1
  427. package/lib/rendezvous/RendezvousCode.js.map +0 -1
  428. package/lib/rendezvous/RendezvousError.d.ts +0 -6
  429. package/lib/rendezvous/RendezvousError.d.ts.map +0 -1
  430. package/lib/rendezvous/RendezvousError.js +0 -23
  431. package/lib/rendezvous/RendezvousError.js.map +0 -1
  432. package/lib/rendezvous/RendezvousFailureReason.d.ts +0 -31
  433. package/lib/rendezvous/RendezvousFailureReason.d.ts.map +0 -1
  434. package/lib/rendezvous/RendezvousFailureReason.js +0 -38
  435. package/lib/rendezvous/RendezvousFailureReason.js.map +0 -1
  436. package/lib/rendezvous/RendezvousIntent.d.ts +0 -5
  437. package/lib/rendezvous/RendezvousIntent.d.ts.map +0 -1
  438. package/lib/rendezvous/RendezvousIntent.js +0 -22
  439. package/lib/rendezvous/RendezvousIntent.js.map +0 -1
  440. package/lib/rendezvous/RendezvousTransport.d.ts +0 -36
  441. package/lib/rendezvous/RendezvousTransport.d.ts.map +0 -1
  442. package/lib/rendezvous/RendezvousTransport.js +0 -1
  443. package/lib/rendezvous/RendezvousTransport.js.map +0 -1
  444. package/lib/rendezvous/channels/MSC4108SecureChannel.d.ts +0 -58
  445. package/lib/rendezvous/channels/MSC4108SecureChannel.d.ts.map +0 -1
  446. package/lib/rendezvous/channels/MSC4108SecureChannel.js +0 -246
  447. package/lib/rendezvous/channels/MSC4108SecureChannel.js.map +0 -1
  448. package/lib/rendezvous/channels/index.d.ts +0 -2
  449. package/lib/rendezvous/channels/index.d.ts.map +0 -1
  450. package/lib/rendezvous/channels/index.js +0 -18
  451. package/lib/rendezvous/channels/index.js.map +0 -1
  452. package/lib/rendezvous/index.d.ts +0 -10
  453. package/lib/rendezvous/index.d.ts.map +0 -1
  454. package/lib/rendezvous/index.js +0 -23
  455. package/lib/rendezvous/index.js.map +0 -1
  456. package/lib/rendezvous/transports/MSC4108RendezvousSession.d.ts +0 -61
  457. package/lib/rendezvous/transports/MSC4108RendezvousSession.d.ts.map +0 -1
  458. package/lib/rendezvous/transports/MSC4108RendezvousSession.js +0 -253
  459. package/lib/rendezvous/transports/MSC4108RendezvousSession.js.map +0 -1
  460. package/lib/rendezvous/transports/index.d.ts +0 -2
  461. package/lib/rendezvous/transports/index.d.ts.map +0 -1
  462. package/lib/rendezvous/transports/index.js +0 -18
  463. package/lib/rendezvous/transports/index.js.map +0 -1
  464. package/lib/rust-crypto/CrossSigningIdentity.d.ts +0 -33
  465. package/lib/rust-crypto/CrossSigningIdentity.d.ts.map +0 -1
  466. package/lib/rust-crypto/CrossSigningIdentity.js +0 -157
  467. package/lib/rust-crypto/CrossSigningIdentity.js.map +0 -1
  468. package/lib/rust-crypto/DehydratedDeviceManager.d.ts +0 -98
  469. package/lib/rust-crypto/DehydratedDeviceManager.d.ts.map +0 -1
  470. package/lib/rust-crypto/DehydratedDeviceManager.js +0 -285
  471. package/lib/rust-crypto/DehydratedDeviceManager.js.map +0 -1
  472. package/lib/rust-crypto/KeyClaimManager.d.ts +0 -33
  473. package/lib/rust-crypto/KeyClaimManager.d.ts.map +0 -1
  474. package/lib/rust-crypto/KeyClaimManager.js +0 -82
  475. package/lib/rust-crypto/KeyClaimManager.js.map +0 -1
  476. package/lib/rust-crypto/OutgoingRequestProcessor.d.ts +0 -43
  477. package/lib/rust-crypto/OutgoingRequestProcessor.d.ts.map +0 -1
  478. package/lib/rust-crypto/OutgoingRequestProcessor.js +0 -195
  479. package/lib/rust-crypto/OutgoingRequestProcessor.js.map +0 -1
  480. package/lib/rust-crypto/OutgoingRequestsManager.d.ts +0 -47
  481. package/lib/rust-crypto/OutgoingRequestsManager.d.ts.map +0 -1
  482. package/lib/rust-crypto/OutgoingRequestsManager.js +0 -148
  483. package/lib/rust-crypto/OutgoingRequestsManager.js.map +0 -1
  484. package/lib/rust-crypto/PerSessionKeyBackupDownloader.d.ts +0 -120
  485. package/lib/rust-crypto/PerSessionKeyBackupDownloader.d.ts.map +0 -1
  486. package/lib/rust-crypto/PerSessionKeyBackupDownloader.js +0 -467
  487. package/lib/rust-crypto/PerSessionKeyBackupDownloader.js.map +0 -1
  488. package/lib/rust-crypto/RoomEncryptor.d.ts +0 -98
  489. package/lib/rust-crypto/RoomEncryptor.d.ts.map +0 -1
  490. package/lib/rust-crypto/RoomEncryptor.js +0 -299
  491. package/lib/rust-crypto/RoomEncryptor.js.map +0 -1
  492. package/lib/rust-crypto/backup.d.ts +0 -254
  493. package/lib/rust-crypto/backup.d.ts.map +0 -1
  494. package/lib/rust-crypto/backup.js +0 -837
  495. package/lib/rust-crypto/backup.js.map +0 -1
  496. package/lib/rust-crypto/constants.d.ts +0 -3
  497. package/lib/rust-crypto/constants.d.ts.map +0 -1
  498. package/lib/rust-crypto/constants.js +0 -19
  499. package/lib/rust-crypto/constants.js.map +0 -1
  500. package/lib/rust-crypto/device-converter.d.ts +0 -28
  501. package/lib/rust-crypto/device-converter.d.ts.map +0 -1
  502. package/lib/rust-crypto/device-converter.js +0 -123
  503. package/lib/rust-crypto/device-converter.js.map +0 -1
  504. package/lib/rust-crypto/index.d.ts +0 -61
  505. package/lib/rust-crypto/index.d.ts.map +0 -1
  506. package/lib/rust-crypto/index.js +0 -152
  507. package/lib/rust-crypto/index.js.map +0 -1
  508. package/lib/rust-crypto/libolm_migration.d.ts +0 -81
  509. package/lib/rust-crypto/libolm_migration.d.ts.map +0 -1
  510. package/lib/rust-crypto/libolm_migration.js +0 -459
  511. package/lib/rust-crypto/libolm_migration.js.map +0 -1
  512. package/lib/rust-crypto/rust-crypto.d.ts +0 -556
  513. package/lib/rust-crypto/rust-crypto.d.ts.map +0 -1
  514. package/lib/rust-crypto/rust-crypto.js +0 -2016
  515. package/lib/rust-crypto/rust-crypto.js.map +0 -1
  516. package/lib/rust-crypto/secret-storage.d.ts +0 -22
  517. package/lib/rust-crypto/secret-storage.d.ts.map +0 -1
  518. package/lib/rust-crypto/secret-storage.js +0 -63
  519. package/lib/rust-crypto/secret-storage.js.map +0 -1
  520. package/lib/rust-crypto/verification.d.ts +0 -319
  521. package/lib/rust-crypto/verification.d.ts.map +0 -1
  522. package/lib/rust-crypto/verification.js +0 -816
  523. package/lib/rust-crypto/verification.js.map +0 -1
  524. package/lib/secret-storage.d.ts +0 -370
  525. package/lib/secret-storage.d.ts.map +0 -1
  526. package/lib/secret-storage.js +0 -466
  527. package/lib/secret-storage.js.map +0 -1
  528. package/lib/utils/decryptAESSecretStorageItem.d.ts +0 -12
  529. package/lib/utils/decryptAESSecretStorageItem.d.ts.map +0 -1
  530. package/lib/utils/decryptAESSecretStorageItem.js +0 -50
  531. package/lib/utils/decryptAESSecretStorageItem.js.map +0 -1
  532. package/lib/utils/encryptAESSecretStorageItem.d.ts +0 -16
  533. package/lib/utils/encryptAESSecretStorageItem.d.ts.map +0 -1
  534. package/lib/utils/encryptAESSecretStorageItem.js +0 -68
  535. package/lib/utils/encryptAESSecretStorageItem.js.map +0 -1
  536. package/lib/utils/internal/deriveKeys.d.ts +0 -10
  537. package/lib/utils/internal/deriveKeys.d.ts.map +0 -1
  538. package/lib/utils/internal/deriveKeys.js +0 -60
  539. package/lib/utils/internal/deriveKeys.js.map +0 -1
  540. package/lib/webrtc/audioContext.d.ts +0 -15
  541. package/lib/webrtc/audioContext.d.ts.map +0 -1
  542. package/lib/webrtc/audioContext.js +0 -46
  543. package/lib/webrtc/audioContext.js.map +0 -1
  544. package/lib/webrtc/call.d.ts +0 -560
  545. package/lib/webrtc/call.d.ts.map +0 -1
  546. package/lib/webrtc/call.js +0 -2541
  547. package/lib/webrtc/call.js.map +0 -1
  548. package/lib/webrtc/callEventHandler.d.ts +0 -37
  549. package/lib/webrtc/callEventHandler.d.ts.map +0 -1
  550. package/lib/webrtc/callEventHandler.js +0 -344
  551. package/lib/webrtc/callEventHandler.js.map +0 -1
  552. package/lib/webrtc/callEventTypes.d.ts +0 -73
  553. package/lib/webrtc/callEventTypes.d.ts.map +0 -1
  554. package/lib/webrtc/callEventTypes.js +0 -13
  555. package/lib/webrtc/callEventTypes.js.map +0 -1
  556. package/lib/webrtc/callFeed.d.ts +0 -128
  557. package/lib/webrtc/callFeed.d.ts.map +0 -1
  558. package/lib/webrtc/callFeed.js +0 -289
  559. package/lib/webrtc/callFeed.js.map +0 -1
  560. package/lib/webrtc/groupCall.d.ts +0 -323
  561. package/lib/webrtc/groupCall.d.ts.map +0 -1
  562. package/lib/webrtc/groupCall.js +0 -1337
  563. package/lib/webrtc/groupCall.js.map +0 -1
  564. package/lib/webrtc/groupCallEventHandler.d.ts +0 -31
  565. package/lib/webrtc/groupCallEventHandler.d.ts.map +0 -1
  566. package/lib/webrtc/groupCallEventHandler.js +0 -178
  567. package/lib/webrtc/groupCallEventHandler.js.map +0 -1
  568. package/lib/webrtc/mediaHandler.d.ts +0 -89
  569. package/lib/webrtc/mediaHandler.d.ts.map +0 -1
  570. package/lib/webrtc/mediaHandler.js +0 -437
  571. package/lib/webrtc/mediaHandler.js.map +0 -1
  572. package/lib/webrtc/stats/callFeedStatsReporter.d.ts +0 -8
  573. package/lib/webrtc/stats/callFeedStatsReporter.d.ts.map +0 -1
  574. package/lib/webrtc/stats/callFeedStatsReporter.js +0 -82
  575. package/lib/webrtc/stats/callFeedStatsReporter.js.map +0 -1
  576. package/lib/webrtc/stats/callStatsReportGatherer.d.ts +0 -25
  577. package/lib/webrtc/stats/callStatsReportGatherer.d.ts.map +0 -1
  578. package/lib/webrtc/stats/callStatsReportGatherer.js +0 -199
  579. package/lib/webrtc/stats/callStatsReportGatherer.js.map +0 -1
  580. package/lib/webrtc/stats/callStatsReportSummary.d.ts +0 -17
  581. package/lib/webrtc/stats/callStatsReportSummary.d.ts.map +0 -1
  582. package/lib/webrtc/stats/callStatsReportSummary.js +0 -1
  583. package/lib/webrtc/stats/callStatsReportSummary.js.map +0 -1
  584. package/lib/webrtc/stats/connectionStats.d.ts +0 -28
  585. package/lib/webrtc/stats/connectionStats.d.ts.map +0 -1
  586. package/lib/webrtc/stats/connectionStats.js +0 -26
  587. package/lib/webrtc/stats/connectionStats.js.map +0 -1
  588. package/lib/webrtc/stats/connectionStatsBuilder.d.ts +0 -5
  589. package/lib/webrtc/stats/connectionStatsBuilder.d.ts.map +0 -1
  590. package/lib/webrtc/stats/connectionStatsBuilder.js +0 -27
  591. package/lib/webrtc/stats/connectionStatsBuilder.js.map +0 -1
  592. package/lib/webrtc/stats/connectionStatsReportBuilder.d.ts +0 -7
  593. package/lib/webrtc/stats/connectionStatsReportBuilder.d.ts.map +0 -1
  594. package/lib/webrtc/stats/connectionStatsReportBuilder.js +0 -121
  595. package/lib/webrtc/stats/connectionStatsReportBuilder.js.map +0 -1
  596. package/lib/webrtc/stats/groupCallStats.d.ts +0 -22
  597. package/lib/webrtc/stats/groupCallStats.d.ts.map +0 -1
  598. package/lib/webrtc/stats/groupCallStats.js +0 -78
  599. package/lib/webrtc/stats/groupCallStats.js.map +0 -1
  600. package/lib/webrtc/stats/media/mediaSsrcHandler.d.ts +0 -10
  601. package/lib/webrtc/stats/media/mediaSsrcHandler.d.ts.map +0 -1
  602. package/lib/webrtc/stats/media/mediaSsrcHandler.js +0 -57
  603. package/lib/webrtc/stats/media/mediaSsrcHandler.js.map +0 -1
  604. package/lib/webrtc/stats/media/mediaTrackHandler.d.ts +0 -12
  605. package/lib/webrtc/stats/media/mediaTrackHandler.d.ts.map +0 -1
  606. package/lib/webrtc/stats/media/mediaTrackHandler.js +0 -62
  607. package/lib/webrtc/stats/media/mediaTrackHandler.js.map +0 -1
  608. package/lib/webrtc/stats/media/mediaTrackStats.d.ts +0 -86
  609. package/lib/webrtc/stats/media/mediaTrackStats.d.ts.map +0 -1
  610. package/lib/webrtc/stats/media/mediaTrackStats.js +0 -142
  611. package/lib/webrtc/stats/media/mediaTrackStats.js.map +0 -1
  612. package/lib/webrtc/stats/media/mediaTrackStatsHandler.d.ts +0 -22
  613. package/lib/webrtc/stats/media/mediaTrackStatsHandler.d.ts.map +0 -1
  614. package/lib/webrtc/stats/media/mediaTrackStatsHandler.js +0 -76
  615. package/lib/webrtc/stats/media/mediaTrackStatsHandler.js.map +0 -1
  616. package/lib/webrtc/stats/statsReport.d.ts +0 -99
  617. package/lib/webrtc/stats/statsReport.d.ts.map +0 -1
  618. package/lib/webrtc/stats/statsReport.js +0 -32
  619. package/lib/webrtc/stats/statsReport.js.map +0 -1
  620. package/lib/webrtc/stats/statsReportEmitter.d.ts +0 -15
  621. package/lib/webrtc/stats/statsReportEmitter.d.ts.map +0 -1
  622. package/lib/webrtc/stats/statsReportEmitter.js +0 -33
  623. package/lib/webrtc/stats/statsReportEmitter.js.map +0 -1
  624. package/lib/webrtc/stats/summaryStatsReportGatherer.d.ts +0 -16
  625. package/lib/webrtc/stats/summaryStatsReportGatherer.d.ts.map +0 -1
  626. package/lib/webrtc/stats/summaryStatsReportGatherer.js +0 -116
  627. package/lib/webrtc/stats/summaryStatsReportGatherer.js.map +0 -1
  628. package/lib/webrtc/stats/trackStatsBuilder.d.ts +0 -19
  629. package/lib/webrtc/stats/trackStatsBuilder.d.ts.map +0 -1
  630. package/lib/webrtc/stats/trackStatsBuilder.js +0 -168
  631. package/lib/webrtc/stats/trackStatsBuilder.js.map +0 -1
  632. package/lib/webrtc/stats/transportStats.d.ts +0 -11
  633. package/lib/webrtc/stats/transportStats.d.ts.map +0 -1
  634. package/lib/webrtc/stats/transportStats.js +0 -1
  635. package/lib/webrtc/stats/transportStats.js.map +0 -1
  636. package/lib/webrtc/stats/transportStatsBuilder.d.ts +0 -5
  637. package/lib/webrtc/stats/transportStatsBuilder.d.ts.map +0 -1
  638. package/lib/webrtc/stats/transportStatsBuilder.js +0 -34
  639. package/lib/webrtc/stats/transportStatsBuilder.js.map +0 -1
  640. package/lib/webrtc/stats/valueFormatter.d.ts +0 -4
  641. package/lib/webrtc/stats/valueFormatter.d.ts.map +0 -1
  642. package/lib/webrtc/stats/valueFormatter.js +0 -25
  643. package/lib/webrtc/stats/valueFormatter.js.map +0 -1
  644. package/src/@types/AESEncryptedSecretStoragePayload.ts +0 -29
  645. package/src/@types/crypto.ts +0 -73
  646. package/src/@types/matrix-sdk-crypto-wasm.d.ts +0 -44
  647. package/src/common-crypto/CryptoBackend.ts +0 -302
  648. package/src/common-crypto/README.md +0 -4
  649. package/src/common-crypto/key-passphrase.ts +0 -43
  650. package/src/crypto/CrossSigning.ts +0 -773
  651. package/src/crypto/DeviceList.ts +0 -989
  652. package/src/crypto/EncryptionSetup.ts +0 -351
  653. package/src/crypto/OlmDevice.ts +0 -1500
  654. package/src/crypto/OutgoingRoomKeyRequestManager.ts +0 -485
  655. package/src/crypto/RoomList.ts +0 -70
  656. package/src/crypto/SecretSharing.ts +0 -240
  657. package/src/crypto/SecretStorage.ts +0 -136
  658. package/src/crypto/aes.ts +0 -23
  659. package/src/crypto/algorithms/base.ts +0 -236
  660. package/src/crypto/algorithms/index.ts +0 -20
  661. package/src/crypto/algorithms/megolm.ts +0 -2216
  662. package/src/crypto/algorithms/olm.ts +0 -381
  663. package/src/crypto/api.ts +0 -70
  664. package/src/crypto/backup.ts +0 -922
  665. package/src/crypto/crypto.ts +0 -18
  666. package/src/crypto/dehydration.ts +0 -272
  667. package/src/crypto/device-converter.ts +0 -45
  668. package/src/crypto/deviceinfo.ts +0 -158
  669. package/src/crypto/index.ts +0 -4418
  670. package/src/crypto/key_passphrase.ts +0 -42
  671. package/src/crypto/keybackup.ts +0 -47
  672. package/src/crypto/olmlib.ts +0 -539
  673. package/src/crypto/recoverykey.ts +0 -18
  674. package/src/crypto/store/base.ts +0 -348
  675. package/src/crypto/store/indexeddb-crypto-store-backend.ts +0 -1250
  676. package/src/crypto/store/indexeddb-crypto-store.ts +0 -845
  677. package/src/crypto/store/localStorage-crypto-store.ts +0 -579
  678. package/src/crypto/store/memory-crypto-store.ts +0 -680
  679. package/src/crypto/verification/Base.ts +0 -409
  680. package/src/crypto/verification/Error.ts +0 -76
  681. package/src/crypto/verification/IllegalMethod.ts +0 -50
  682. package/src/crypto/verification/QRCode.ts +0 -310
  683. package/src/crypto/verification/SAS.ts +0 -494
  684. package/src/crypto/verification/SASDecimal.ts +0 -37
  685. package/src/crypto/verification/request/Channel.ts +0 -34
  686. package/src/crypto/verification/request/InRoomChannel.ts +0 -371
  687. package/src/crypto/verification/request/ToDeviceChannel.ts +0 -354
  688. package/src/crypto/verification/request/VerificationRequest.ts +0 -976
  689. package/src/crypto-api/CryptoEvent.ts +0 -93
  690. package/src/crypto-api/CryptoEventHandlerMap.ts +0 -32
  691. package/src/crypto-api/index.ts +0 -1175
  692. package/src/crypto-api/key-passphrase.ts +0 -58
  693. package/src/crypto-api/keybackup.ts +0 -115
  694. package/src/crypto-api/recovery-key.ts +0 -69
  695. package/src/crypto-api/verification.ts +0 -408
  696. package/src/matrixrtc/CallMembership.ts +0 -247
  697. package/src/matrixrtc/LivekitFocus.ts +0 -39
  698. package/src/matrixrtc/MatrixRTCSession.ts +0 -1319
  699. package/src/matrixrtc/MatrixRTCSessionManager.ts +0 -166
  700. package/src/matrixrtc/focus.ts +0 -25
  701. package/src/matrixrtc/index.ts +0 -22
  702. package/src/matrixrtc/types.ts +0 -36
  703. package/src/rendezvous/MSC4108SignInWithQR.ts +0 -444
  704. package/src/rendezvous/RendezvousChannel.ts +0 -48
  705. package/src/rendezvous/RendezvousCode.ts +0 -25
  706. package/src/rendezvous/RendezvousError.ts +0 -26
  707. package/src/rendezvous/RendezvousFailureReason.ts +0 -49
  708. package/src/rendezvous/RendezvousIntent.ts +0 -20
  709. package/src/rendezvous/RendezvousTransport.ts +0 -58
  710. package/src/rendezvous/channels/MSC4108SecureChannel.ts +0 -270
  711. package/src/rendezvous/channels/index.ts +0 -17
  712. package/src/rendezvous/index.ts +0 -25
  713. package/src/rendezvous/transports/MSC4108RendezvousSession.ts +0 -270
  714. package/src/rendezvous/transports/index.ts +0 -17
  715. package/src/rust-crypto/CrossSigningIdentity.ts +0 -183
  716. package/src/rust-crypto/DehydratedDeviceManager.ts +0 -306
  717. package/src/rust-crypto/KeyClaimManager.ts +0 -86
  718. package/src/rust-crypto/OutgoingRequestProcessor.ts +0 -236
  719. package/src/rust-crypto/OutgoingRequestsManager.ts +0 -143
  720. package/src/rust-crypto/PerSessionKeyBackupDownloader.ts +0 -501
  721. package/src/rust-crypto/RoomEncryptor.ts +0 -352
  722. package/src/rust-crypto/backup.ts +0 -881
  723. package/src/rust-crypto/constants.ts +0 -18
  724. package/src/rust-crypto/device-converter.ts +0 -128
  725. package/src/rust-crypto/index.ts +0 -237
  726. package/src/rust-crypto/libolm_migration.ts +0 -530
  727. package/src/rust-crypto/rust-crypto.ts +0 -2205
  728. package/src/rust-crypto/secret-storage.ts +0 -60
  729. package/src/rust-crypto/verification.ts +0 -830
  730. package/src/secret-storage.ts +0 -693
  731. package/src/utils/decryptAESSecretStorageItem.ts +0 -54
  732. package/src/utils/encryptAESSecretStorageItem.ts +0 -73
  733. package/src/utils/internal/deriveKeys.ts +0 -63
  734. package/src/webrtc/audioContext.ts +0 -44
  735. package/src/webrtc/call.ts +0 -3074
  736. package/src/webrtc/callEventHandler.ts +0 -425
  737. package/src/webrtc/callEventTypes.ts +0 -93
  738. package/src/webrtc/callFeed.ts +0 -364
  739. package/src/webrtc/groupCall.ts +0 -1735
  740. package/src/webrtc/groupCallEventHandler.ts +0 -234
  741. package/src/webrtc/mediaHandler.ts +0 -484
  742. package/src/webrtc/stats/callFeedStatsReporter.ts +0 -94
  743. package/src/webrtc/stats/callStatsReportGatherer.ts +0 -219
  744. package/src/webrtc/stats/callStatsReportSummary.ts +0 -30
  745. package/src/webrtc/stats/connectionStats.ts +0 -47
  746. package/src/webrtc/stats/connectionStatsBuilder.ts +0 -28
  747. package/src/webrtc/stats/connectionStatsReportBuilder.ts +0 -140
  748. package/src/webrtc/stats/groupCallStats.ts +0 -93
  749. package/src/webrtc/stats/media/mediaSsrcHandler.ts +0 -57
  750. package/src/webrtc/stats/media/mediaTrackHandler.ts +0 -76
  751. package/src/webrtc/stats/media/mediaTrackStats.ts +0 -176
  752. package/src/webrtc/stats/media/mediaTrackStatsHandler.ts +0 -90
  753. package/src/webrtc/stats/statsReport.ts +0 -133
  754. package/src/webrtc/stats/statsReportEmitter.ts +0 -49
  755. package/src/webrtc/stats/summaryStatsReportGatherer.ts +0 -148
  756. package/src/webrtc/stats/trackStatsBuilder.ts +0 -207
  757. package/src/webrtc/stats/transportStats.ts +0 -26
  758. package/src/webrtc/stats/transportStatsBuilder.ts +0 -48
  759. package/src/webrtc/stats/valueFormatter.ts +0 -27
@@ -1,1822 +0,0 @@
1
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
- /*
6
- Copyright 2015 - 2021, 2023 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
- /**
22
- * Defines m.olm encryption/decryption
23
- */
24
-
25
- import { v4 as uuidv4 } from "uuid";
26
- import { logger } from "../../logger.js";
27
- import * as olmlib from "../olmlib.js";
28
- import { DecryptionAlgorithm, EncryptionAlgorithm, registerAlgorithm, UnknownDeviceError } from "./base.js";
29
- import { WITHHELD_MESSAGES } from "../OlmDevice.js";
30
- import { EventType, MsgType, ToDeviceMessageId } from "../../@types/event.js";
31
- import { RoomKeyRequestState } from "../OutgoingRoomKeyRequestManager.js";
32
- import { immediate, MapWithDefault } from "../../utils.js";
33
- import { KnownMembership } from "../../@types/membership.js";
34
- import { DecryptionFailureCode } from "../../crypto-api/index.js";
35
- import { DecryptionError } from "../../common-crypto/CryptoBackend.js";
36
-
37
- // determine whether the key can be shared with invitees
38
- export function isRoomSharedHistory(room) {
39
- var _room$currentState, _visibilityEvent$getC;
40
- var visibilityEvent = room === null || room === void 0 || (_room$currentState = room.currentState) === null || _room$currentState === void 0 ? void 0 : _room$currentState.getStateEvents("m.room.history_visibility", "");
41
- // NOTE: if the room visibility is unset, it would normally default to
42
- // "world_readable".
43
- // (https://spec.matrix.org/unstable/client-server-api/#server-behaviour-5)
44
- // But we will be paranoid here, and treat it as a situation where the room
45
- // is not shared-history
46
- var visibility = visibilityEvent === null || visibilityEvent === void 0 || (_visibilityEvent$getC = visibilityEvent.getContent()) === null || _visibilityEvent$getC === void 0 ? void 0 : _visibilityEvent$getC.history_visibility;
47
- return ["world_readable", "shared"].includes(visibility);
48
- }
49
-
50
- // map user Id → device Id → IBlockedDevice
51
-
52
- /**
53
- * Tests whether an encrypted content has a ciphertext.
54
- * Ciphertext can be a string or object depending on the content type {@link IEncryptedContent}.
55
- *
56
- * @param content - Encrypted content
57
- * @returns true: has ciphertext, else false
58
- */
59
- var hasCiphertext = content => {
60
- return typeof content.ciphertext === "string" ? !!content.ciphertext.length : !!Object.keys(content.ciphertext).length;
61
- };
62
-
63
- /** The result of parsing the an `m.room_key` or `m.forwarded_room_key` to-device event */
64
-
65
- /**
66
- * @internal
67
- */
68
- class OutboundSessionInfo {
69
- /**
70
- * @param sharedHistory - whether the session can be freely shared with
71
- * other group members, according to the room history visibility settings
72
- */
73
- constructor(sessionId) {
74
- var sharedHistory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
75
- this.sessionId = sessionId;
76
- this.sharedHistory = sharedHistory;
77
- /** number of times this session has been used */
78
- _defineProperty(this, "useCount", 0);
79
- /** when the session was created (ms since the epoch) */
80
- _defineProperty(this, "creationTime", void 0);
81
- /** devices with which we have shared the session key `userId -> {deviceId -> SharedWithData}` */
82
- _defineProperty(this, "sharedWithDevices", new MapWithDefault(() => new Map()));
83
- _defineProperty(this, "blockedDevicesNotified", new MapWithDefault(() => new Map()));
84
- this.creationTime = new Date().getTime();
85
- }
86
-
87
- /**
88
- * Check if it's time to rotate the session
89
- */
90
- needsRotation(rotationPeriodMsgs, rotationPeriodMs) {
91
- var sessionLifetime = new Date().getTime() - this.creationTime;
92
- if (this.useCount >= rotationPeriodMsgs || sessionLifetime >= rotationPeriodMs) {
93
- logger.log("Rotating megolm session after " + this.useCount + " messages, " + sessionLifetime + "ms");
94
- return true;
95
- }
96
- return false;
97
- }
98
- markSharedWithDevice(userId, deviceId, deviceKey, chainIndex) {
99
- this.sharedWithDevices.getOrCreate(userId).set(deviceId, {
100
- deviceKey,
101
- messageIndex: chainIndex
102
- });
103
- }
104
- markNotifiedBlockedDevice(userId, deviceId) {
105
- this.blockedDevicesNotified.getOrCreate(userId).set(deviceId, true);
106
- }
107
-
108
- /**
109
- * Determine if this session has been shared with devices which it shouldn't
110
- * have been.
111
- *
112
- * @param devicesInRoom - `userId -> {deviceId -> object}`
113
- * devices we should shared the session with.
114
- *
115
- * @returns true if we have shared the session with devices which aren't
116
- * in devicesInRoom.
117
- */
118
- sharedWithTooManyDevices(devicesInRoom) {
119
- for (var [userId, devices] of this.sharedWithDevices) {
120
- if (!devicesInRoom.has(userId)) {
121
- logger.log("Starting new megolm session because we shared with " + userId);
122
- return true;
123
- }
124
- for (var [deviceId] of devices) {
125
- var _devicesInRoom$get;
126
- if (!((_devicesInRoom$get = devicesInRoom.get(userId)) !== null && _devicesInRoom$get !== void 0 && _devicesInRoom$get.get(deviceId))) {
127
- logger.log("Starting new megolm session because we shared with " + userId + ":" + deviceId);
128
- return true;
129
- }
130
- }
131
- }
132
- return false;
133
- }
134
- }
135
-
136
- /**
137
- * Megolm encryption implementation
138
- *
139
- * @param params - parameters, as per {@link EncryptionAlgorithm}
140
- */
141
- export class MegolmEncryption extends EncryptionAlgorithm {
142
- constructor(params) {
143
- var _params$config$rotati, _params$config, _params$config$rotati2, _params$config2;
144
- super(params);
145
- // the most recent attempt to set up a session. This is used to serialise
146
- // the session setups, so that we have a race-free view of which session we
147
- // are using, and which devices we have shared the keys with. It resolves
148
- // with an OutboundSessionInfo (or undefined, for the first message in the
149
- // room).
150
- _defineProperty(this, "setupPromise", Promise.resolve(null));
151
- // Map of outbound sessions by sessions ID. Used if we need a particular
152
- // session (the session we're currently using to send is always obtained
153
- // using setupPromise).
154
- _defineProperty(this, "outboundSessions", {});
155
- _defineProperty(this, "sessionRotationPeriodMsgs", void 0);
156
- _defineProperty(this, "sessionRotationPeriodMs", void 0);
157
- _defineProperty(this, "encryptionPreparation", void 0);
158
- _defineProperty(this, "roomId", void 0);
159
- _defineProperty(this, "prefixedLogger", void 0);
160
- this.roomId = params.roomId;
161
- this.prefixedLogger = logger.getChild("[".concat(this.roomId, " encryption]"));
162
- this.sessionRotationPeriodMsgs = (_params$config$rotati = (_params$config = params.config) === null || _params$config === void 0 ? void 0 : _params$config.rotation_period_msgs) !== null && _params$config$rotati !== void 0 ? _params$config$rotati : 100;
163
- this.sessionRotationPeriodMs = (_params$config$rotati2 = (_params$config2 = params.config) === null || _params$config2 === void 0 ? void 0 : _params$config2.rotation_period_ms) !== null && _params$config$rotati2 !== void 0 ? _params$config$rotati2 : 7 * 24 * 3600 * 1000;
164
- }
165
-
166
- /**
167
- * @internal
168
- *
169
- * @param devicesInRoom - The devices in this room, indexed by user ID
170
- * @param blocked - The devices that are blocked, indexed by user ID
171
- * @param singleOlmCreationPhase - Only perform one round of olm
172
- * session creation
173
- *
174
- * This method updates the setupPromise field of the class by chaining a new
175
- * call on top of the existing promise, and then catching and discarding any
176
- * errors that might happen while setting up the outbound group session. This
177
- * is done to ensure that `setupPromise` always resolves to `null` or the
178
- * `OutboundSessionInfo`.
179
- *
180
- * Using `>>=` to represent the promise chaining operation, it does the
181
- * following:
182
- *
183
- * ```
184
- * setupPromise = previousSetupPromise >>= setup >>= discardErrors
185
- * ```
186
- *
187
- * The initial value for the `setupPromise` is a promise that resolves to
188
- * `null`. The forceDiscardSession() resets setupPromise to this initial
189
- * promise.
190
- *
191
- * @returns Promise which resolves to the
192
- * OutboundSessionInfo when setup is complete.
193
- */
194
- ensureOutboundSession(room, devicesInRoom, blocked) {
195
- var _arguments = arguments,
196
- _this = this;
197
- return _asyncToGenerator(function* () {
198
- var singleOlmCreationPhase = _arguments.length > 3 && _arguments[3] !== undefined ? _arguments[3] : false;
199
- // takes the previous OutboundSessionInfo, and considers whether to create
200
- // a new one. Also shares the key with any (new) devices in the room.
201
- //
202
- // returns a promise which resolves once the keyshare is successful.
203
- var setup = /*#__PURE__*/function () {
204
- var _ref = _asyncToGenerator(function* (oldSession) {
205
- var sharedHistory = isRoomSharedHistory(room);
206
- var session = yield _this.prepareSession(devicesInRoom, sharedHistory, oldSession);
207
- yield _this.shareSession(devicesInRoom, sharedHistory, singleOlmCreationPhase, blocked, session);
208
- return session;
209
- });
210
- return function setup(_x) {
211
- return _ref.apply(this, arguments);
212
- };
213
- }();
214
-
215
- // first wait for the previous share to complete
216
- var fallible = _this.setupPromise.then(setup);
217
-
218
- // Ensure any failures are logged for debugging and make sure that the
219
- // promise chain remains unbroken
220
- //
221
- // setupPromise resolves to `null` or the `OutboundSessionInfo` whether
222
- // or not the share succeeds
223
- _this.setupPromise = fallible.catch(e => {
224
- _this.prefixedLogger.error("Failed to setup outbound session", e);
225
- return null;
226
- });
227
-
228
- // but we return a promise which only resolves if the share was successful.
229
- return fallible;
230
- })();
231
- }
232
- prepareSession(devicesInRoom, sharedHistory, session) {
233
- var _this2 = this;
234
- return _asyncToGenerator(function* () {
235
- var _session, _session2;
236
- // history visibility changed
237
- if (session && sharedHistory !== session.sharedHistory) {
238
- session = null;
239
- }
240
-
241
- // need to make a brand new session?
242
- if ((_session = session) !== null && _session !== void 0 && _session.needsRotation(_this2.sessionRotationPeriodMsgs, _this2.sessionRotationPeriodMs)) {
243
- _this2.prefixedLogger.debug("Starting new megolm session because we need to rotate.");
244
- session = null;
245
- }
246
-
247
- // determine if we have shared with anyone we shouldn't have
248
- if ((_session2 = session) !== null && _session2 !== void 0 && _session2.sharedWithTooManyDevices(devicesInRoom)) {
249
- session = null;
250
- }
251
- if (!session) {
252
- _this2.prefixedLogger.debug("Starting new megolm session");
253
- session = yield _this2.prepareNewSession(sharedHistory);
254
- _this2.prefixedLogger.debug("Started new megolm session ".concat(session.sessionId));
255
- _this2.outboundSessions[session.sessionId] = session;
256
- }
257
- return session;
258
- })();
259
- }
260
- shareSession(devicesInRoom, sharedHistory, singleOlmCreationPhase, blocked, session) {
261
- var _this3 = this;
262
- return _asyncToGenerator(function* () {
263
- // now check if we need to share with any devices
264
- var shareMap = {};
265
- for (var [userId, userDevices] of devicesInRoom) {
266
- for (var [deviceId, deviceInfo] of userDevices) {
267
- var _session$sharedWithDe;
268
- var _key = deviceInfo.getIdentityKey();
269
- if (_key == _this3.olmDevice.deviceCurve25519Key) {
270
- // don't bother sending to ourself
271
- continue;
272
- }
273
- if (!((_session$sharedWithDe = session.sharedWithDevices.get(userId)) !== null && _session$sharedWithDe !== void 0 && _session$sharedWithDe.get(deviceId))) {
274
- shareMap[userId] = shareMap[userId] || [];
275
- shareMap[userId].push(deviceInfo);
276
- }
277
- }
278
- }
279
- var key = _this3.olmDevice.getOutboundGroupSessionKey(session.sessionId);
280
- var payload = {
281
- type: "m.room_key",
282
- content: {
283
- "algorithm": olmlib.MEGOLM_ALGORITHM,
284
- "room_id": _this3.roomId,
285
- "session_id": session.sessionId,
286
- "session_key": key.key,
287
- "chain_index": key.chain_index,
288
- "org.matrix.msc3061.shared_history": sharedHistory
289
- }
290
- };
291
- var [devicesWithoutSession, olmSessions] = yield olmlib.getExistingOlmSessions(_this3.olmDevice, _this3.baseApis, shareMap);
292
- yield Promise.all([_asyncToGenerator(function* () {
293
- // share keys with devices that we already have a session for
294
- var olmSessionList = Array.from(olmSessions.entries()).map(_ref3 => {
295
- var [userId, sessionsByUser] = _ref3;
296
- return Array.from(sessionsByUser.entries()).map(_ref4 => {
297
- var [deviceId, session] = _ref4;
298
- return "".concat(userId, "/").concat(deviceId, ": ").concat(session.sessionId);
299
- });
300
- }).flat(1);
301
- _this3.prefixedLogger.debug("Sharing keys with devices with existing Olm sessions:", olmSessionList);
302
- yield _this3.shareKeyWithOlmSessions(session, key, payload, olmSessions);
303
- _this3.prefixedLogger.debug("Shared keys with existing Olm sessions");
304
- })(), _asyncToGenerator(function* () {
305
- var deviceList = Array.from(devicesWithoutSession.entries()).map(_ref6 => {
306
- var [userId, devicesByUser] = _ref6;
307
- return devicesByUser.map(device => "".concat(userId, "/").concat(device.deviceId));
308
- }).flat(1);
309
- _this3.prefixedLogger.debug("Sharing keys (start phase 1) with devices without existing Olm sessions:", deviceList);
310
- var errorDevices = [];
311
-
312
- // meanwhile, establish olm sessions for devices that we don't
313
- // already have a session for, and share keys with them. If
314
- // we're doing two phases of olm session creation, use a
315
- // shorter timeout when fetching one-time keys for the first
316
- // phase.
317
- var start = Date.now();
318
- var failedServers = [];
319
- yield _this3.shareKeyWithDevices(session, key, payload, devicesWithoutSession, errorDevices, singleOlmCreationPhase ? 10000 : 2000, failedServers);
320
- _this3.prefixedLogger.debug("Shared keys (end phase 1) with devices without existing Olm sessions");
321
- if (!singleOlmCreationPhase && Date.now() - start < 10000) {
322
- // perform the second phase of olm session creation if requested,
323
- // and if the first phase didn't take too long
324
- _asyncToGenerator(function* () {
325
- // Retry sending keys to devices that we were unable to establish
326
- // an olm session for. This time, we use a longer timeout, but we
327
- // do this in the background and don't block anything else while we
328
- // do this. We only need to retry users from servers that didn't
329
- // respond the first time.
330
- var retryDevices = new MapWithDefault(() => []);
331
- var failedServerMap = new Set();
332
- for (var server of failedServers) {
333
- failedServerMap.add(server);
334
- }
335
- var failedDevices = [];
336
- for (var {
337
- userId: _userId,
338
- deviceInfo: _deviceInfo2
339
- } of errorDevices) {
340
- var userHS = _userId.slice(_userId.indexOf(":") + 1);
341
- if (failedServerMap.has(userHS)) {
342
- retryDevices.getOrCreate(_userId).push(_deviceInfo2);
343
- } else {
344
- // if we aren't going to retry, then handle it
345
- // as a failed device
346
- failedDevices.push({
347
- userId: _userId,
348
- deviceInfo: _deviceInfo2
349
- });
350
- }
351
- }
352
- var retryDeviceList = Array.from(retryDevices.entries()).map(_ref8 => {
353
- var [userId, devicesByUser] = _ref8;
354
- return devicesByUser.map(device => "".concat(userId, "/").concat(device.deviceId));
355
- }).flat(1);
356
- if (retryDeviceList.length > 0) {
357
- _this3.prefixedLogger.debug("Sharing keys (start phase 2) with devices without existing Olm sessions:", retryDeviceList);
358
- yield _this3.shareKeyWithDevices(session, key, payload, retryDevices, failedDevices, 30000);
359
- _this3.prefixedLogger.debug("Shared keys (end phase 2) with devices without existing Olm sessions");
360
- }
361
- yield _this3.notifyFailedOlmDevices(session, key, failedDevices);
362
- })();
363
- } else {
364
- yield _this3.notifyFailedOlmDevices(session, key, errorDevices);
365
- }
366
- })(), _asyncToGenerator(function* () {
367
- _this3.prefixedLogger.debug("There are ".concat(blocked.size, " blocked devices:"), Array.from(blocked.entries()).map(_ref10 => {
368
- var [userId, blockedByUser] = _ref10;
369
- return Array.from(blockedByUser.entries()).map(_ref11 => {
370
- var [deviceId, _deviceInfo] = _ref11;
371
- return "".concat(userId, "/").concat(deviceId);
372
- });
373
- }).flat(1));
374
-
375
- // also, notify newly blocked devices that they're blocked
376
- var blockedMap = new MapWithDefault(() => new Map());
377
- var blockedCount = 0;
378
- for (var [_userId2, userBlockedDevices] of blocked) {
379
- for (var [_deviceId, device] of userBlockedDevices) {
380
- var _session$blockedDevic;
381
- if (((_session$blockedDevic = session.blockedDevicesNotified.get(_userId2)) === null || _session$blockedDevic === void 0 ? void 0 : _session$blockedDevic.get(_deviceId)) === undefined) {
382
- blockedMap.getOrCreate(_userId2).set(_deviceId, {
383
- device
384
- });
385
- blockedCount++;
386
- }
387
- }
388
- }
389
- if (blockedCount) {
390
- _this3.prefixedLogger.debug("Notifying ".concat(blockedCount, " newly blocked devices:"), Array.from(blockedMap.entries()).map(_ref12 => {
391
- var [userId, blockedByUser] = _ref12;
392
- return Object.entries(blockedByUser).map(_ref13 => {
393
- var [deviceId, _deviceInfo] = _ref13;
394
- return "".concat(userId, "/").concat(deviceId);
395
- });
396
- }).flat(1));
397
- yield _this3.notifyBlockedDevices(session, blockedMap);
398
- _this3.prefixedLogger.debug("Notified ".concat(blockedCount, " newly blocked devices"));
399
- }
400
- })()]);
401
- })();
402
- }
403
-
404
- /**
405
- * @internal
406
- *
407
- *
408
- * @returns session
409
- */
410
- prepareNewSession(sharedHistory) {
411
- var _this4 = this;
412
- return _asyncToGenerator(function* () {
413
- var sessionId = _this4.olmDevice.createOutboundGroupSession();
414
- var key = _this4.olmDevice.getOutboundGroupSessionKey(sessionId);
415
- yield _this4.olmDevice.addInboundGroupSession(_this4.roomId, _this4.olmDevice.deviceCurve25519Key, [], sessionId, key.key, {
416
- ed25519: _this4.olmDevice.deviceEd25519Key
417
- }, false, {
418
- sharedHistory
419
- });
420
-
421
- // don't wait for it to complete
422
- _this4.crypto.backupManager.backupGroupSession(_this4.olmDevice.deviceCurve25519Key, sessionId);
423
- return new OutboundSessionInfo(sessionId, sharedHistory);
424
- })();
425
- }
426
-
427
- /**
428
- * Determines what devices in devicesByUser don't have an olm session as given
429
- * in devicemap.
430
- *
431
- * @internal
432
- *
433
- * @param deviceMap - the devices that have olm sessions, as returned by
434
- * olmlib.ensureOlmSessionsForDevices.
435
- * @param devicesByUser - a map of user IDs to array of deviceInfo
436
- * @param noOlmDevices - an array to fill with devices that don't have
437
- * olm sessions
438
- *
439
- * @returns an array of devices that don't have olm sessions. If
440
- * noOlmDevices is specified, then noOlmDevices will be returned.
441
- */
442
- getDevicesWithoutSessions(deviceMap, devicesByUser) {
443
- var noOlmDevices = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
444
- for (var [userId, devicesToShareWith] of devicesByUser) {
445
- var sessionResults = deviceMap.get(userId);
446
- for (var deviceInfo of devicesToShareWith) {
447
- var deviceId = deviceInfo.deviceId;
448
- var sessionResult = sessionResults === null || sessionResults === void 0 ? void 0 : sessionResults.get(deviceId);
449
- if (!(sessionResult !== null && sessionResult !== void 0 && sessionResult.sessionId)) {
450
- // no session with this device, probably because there
451
- // were no one-time keys.
452
-
453
- noOlmDevices.push({
454
- userId,
455
- deviceInfo
456
- });
457
- sessionResults === null || sessionResults === void 0 || sessionResults.delete(deviceId);
458
-
459
- // ensureOlmSessionsForUsers has already done the logging,
460
- // so just skip it.
461
- continue;
462
- }
463
- }
464
- }
465
- return noOlmDevices;
466
- }
467
-
468
- /**
469
- * Splits the user device map into multiple chunks to reduce the number of
470
- * devices we encrypt to per API call.
471
- *
472
- * @internal
473
- *
474
- * @param devicesByUser - map from userid to list of devices
475
- *
476
- * @returns the blocked devices, split into chunks
477
- */
478
- splitDevices(devicesByUser) {
479
- var maxDevicesPerRequest = 20;
480
-
481
- // use an array where the slices of a content map gets stored
482
- var currentSlice = [];
483
- var mapSlices = [currentSlice];
484
- for (var [userId, userDevices] of devicesByUser) {
485
- for (var deviceInfo of userDevices.values()) {
486
- currentSlice.push({
487
- userId: userId,
488
- deviceInfo: deviceInfo.device
489
- });
490
- }
491
-
492
- // We do this in the per-user loop as we prefer that all messages to the
493
- // same user end up in the same API call to make it easier for the
494
- // server (e.g. only have to send one EDU if a remote user, etc). This
495
- // does mean that if a user has many devices we may go over the desired
496
- // limit, but its not a hard limit so that is fine.
497
- if (currentSlice.length > maxDevicesPerRequest) {
498
- // the current slice is filled up. Start inserting into the next slice
499
- currentSlice = [];
500
- mapSlices.push(currentSlice);
501
- }
502
- }
503
- if (currentSlice.length === 0) {
504
- mapSlices.pop();
505
- }
506
- return mapSlices;
507
- }
508
-
509
- /**
510
- * @internal
511
- *
512
- *
513
- * @param chainIndex - current chain index
514
- *
515
- * @param userDeviceMap - mapping from userId to deviceInfo
516
- *
517
- * @param payload - fields to include in the encrypted payload
518
- *
519
- * @returns Promise which resolves once the key sharing
520
- * for the given userDeviceMap is generated and has been sent.
521
- */
522
- encryptAndSendKeysToDevices(session, chainIndex, devices, payload) {
523
- return this.crypto.encryptAndSendToDevices(devices, payload).then(() => {
524
- // store that we successfully uploaded the keys of the current slice
525
- for (var device of devices) {
526
- session.markSharedWithDevice(device.userId, device.deviceInfo.deviceId, device.deviceInfo.getIdentityKey(), chainIndex);
527
- }
528
- }).catch(error => {
529
- this.prefixedLogger.error("failed to encryptAndSendToDevices", error);
530
- throw error;
531
- });
532
- }
533
-
534
- /**
535
- * @internal
536
- *
537
- *
538
- * @param userDeviceMap - list of blocked devices to notify
539
- *
540
- * @param payload - fields to include in the notification payload
541
- *
542
- * @returns Promise which resolves once the notifications
543
- * for the given userDeviceMap is generated and has been sent.
544
- */
545
- sendBlockedNotificationsToDevices(session, userDeviceMap, payload) {
546
- var _this5 = this;
547
- return _asyncToGenerator(function* () {
548
- var contentMap = new MapWithDefault(() => new Map());
549
- for (var val of userDeviceMap) {
550
- var userId = val.userId;
551
- var blockedInfo = val.deviceInfo;
552
- var deviceInfo = blockedInfo.deviceInfo;
553
- var deviceId = deviceInfo.deviceId;
554
- var message = _objectSpread(_objectSpread({}, payload), {}, {
555
- code: blockedInfo.code,
556
- reason: blockedInfo.reason,
557
- [ToDeviceMessageId]: uuidv4()
558
- });
559
- if (message.code === "m.no_olm") {
560
- delete message.room_id;
561
- delete message.session_id;
562
- }
563
- contentMap.getOrCreate(userId).set(deviceId, message);
564
- }
565
- yield _this5.baseApis.sendToDevice("m.room_key.withheld", contentMap);
566
-
567
- // record the fact that we notified these blocked devices
568
- for (var [_userId3, _userDeviceMap] of contentMap) {
569
- for (var _deviceId2 of _userDeviceMap.keys()) {
570
- session.markNotifiedBlockedDevice(_userId3, _deviceId2);
571
- }
572
- }
573
- })();
574
- }
575
-
576
- /**
577
- * Re-shares a megolm session key with devices if the key has already been
578
- * sent to them.
579
- *
580
- * @param senderKey - The key of the originating device for the session
581
- * @param sessionId - ID of the outbound session to share
582
- * @param userId - ID of the user who owns the target device
583
- * @param device - The target device
584
- */
585
- reshareKeyWithDevice(senderKey, sessionId, userId, device) {
586
- var _this6 = this;
587
- return _asyncToGenerator(function* () {
588
- var _obSessionInfo$shared;
589
- var obSessionInfo = _this6.outboundSessions[sessionId];
590
- if (!obSessionInfo) {
591
- _this6.prefixedLogger.debug("megolm session ".concat(senderKey, "|").concat(sessionId, " not found: not re-sharing keys"));
592
- return;
593
- }
594
-
595
- // The chain index of the key we previously sent this device
596
- if (!obSessionInfo.sharedWithDevices.has(userId)) {
597
- _this6.prefixedLogger.debug("megolm session ".concat(senderKey, "|").concat(sessionId, " never shared with user ").concat(userId));
598
- return;
599
- }
600
- var sessionSharedData = (_obSessionInfo$shared = obSessionInfo.sharedWithDevices.get(userId)) === null || _obSessionInfo$shared === void 0 ? void 0 : _obSessionInfo$shared.get(device.deviceId);
601
- if (sessionSharedData === undefined) {
602
- _this6.prefixedLogger.debug("megolm session ".concat(senderKey, "|").concat(sessionId, " never shared with device ").concat(userId, ":").concat(device.deviceId));
603
- return;
604
- }
605
- if (sessionSharedData.deviceKey !== device.getIdentityKey()) {
606
- _this6.prefixedLogger.warn("Megolm session ".concat(senderKey, "|").concat(sessionId, " has been shared with device ").concat(device.deviceId, " but ") + "with identity key ".concat(sessionSharedData.deviceKey, ". Key is now ").concat(device.getIdentityKey(), "!"));
607
- return;
608
- }
609
-
610
- // get the key from the inbound session: the outbound one will already
611
- // have been ratcheted to the next chain index.
612
- var key = yield _this6.olmDevice.getInboundGroupSessionKey(_this6.roomId, senderKey, sessionId, sessionSharedData.messageIndex);
613
- if (!key) {
614
- _this6.prefixedLogger.warn("No inbound session key found for megolm session ".concat(senderKey, "|").concat(sessionId, ": not re-sharing keys"));
615
- return;
616
- }
617
- yield olmlib.ensureOlmSessionsForDevices(_this6.olmDevice, _this6.baseApis, new Map([[userId, [device]]]));
618
- var payload = {
619
- type: "m.forwarded_room_key",
620
- content: {
621
- "algorithm": olmlib.MEGOLM_ALGORITHM,
622
- "room_id": _this6.roomId,
623
- "session_id": sessionId,
624
- "session_key": key.key,
625
- "chain_index": key.chain_index,
626
- "sender_key": senderKey,
627
- "sender_claimed_ed25519_key": key.sender_claimed_ed25519_key,
628
- "forwarding_curve25519_key_chain": key.forwarding_curve25519_key_chain,
629
- "org.matrix.msc3061.shared_history": key.shared_history || false
630
- }
631
- };
632
- var encryptedContent = {
633
- algorithm: olmlib.OLM_ALGORITHM,
634
- sender_key: _this6.olmDevice.deviceCurve25519Key,
635
- ciphertext: {},
636
- [ToDeviceMessageId]: uuidv4()
637
- };
638
- yield olmlib.encryptMessageForDevice(encryptedContent.ciphertext, _this6.userId, _this6.deviceId, _this6.olmDevice, userId, device, payload);
639
- yield _this6.baseApis.sendToDevice("m.room.encrypted", new Map([[userId, new Map([[device.deviceId, encryptedContent]])]]));
640
- _this6.prefixedLogger.debug("Re-shared key for megolm session ".concat(senderKey, "|").concat(sessionId, " with ").concat(userId, ":").concat(device.deviceId));
641
- })();
642
- }
643
-
644
- /**
645
- * @internal
646
- *
647
- *
648
- * @param key - the session key as returned by
649
- * OlmDevice.getOutboundGroupSessionKey
650
- *
651
- * @param payload - the base to-device message payload for sharing keys
652
- *
653
- * @param devicesByUser - map from userid to list of devices
654
- *
655
- * @param errorDevices - array that will be populated with the devices that we can't get an
656
- * olm session for
657
- *
658
- * @param otkTimeout - The timeout in milliseconds when requesting
659
- * one-time keys for establishing new olm sessions.
660
- *
661
- * @param failedServers - An array to fill with remote servers that
662
- * failed to respond to one-time-key requests.
663
- */
664
- shareKeyWithDevices(session, key, payload, devicesByUser, errorDevices, otkTimeout, failedServers) {
665
- var _this7 = this;
666
- return _asyncToGenerator(function* () {
667
- var devicemap = yield olmlib.ensureOlmSessionsForDevices(_this7.olmDevice, _this7.baseApis, devicesByUser, false, otkTimeout, failedServers, _this7.prefixedLogger);
668
- _this7.getDevicesWithoutSessions(devicemap, devicesByUser, errorDevices);
669
- yield _this7.shareKeyWithOlmSessions(session, key, payload, devicemap);
670
- })();
671
- }
672
- shareKeyWithOlmSessions(session, key, payload, deviceMap) {
673
- var _this8 = this;
674
- return _asyncToGenerator(function* () {
675
- var userDeviceMaps = _this8.splitDevices(deviceMap);
676
- for (var i = 0; i < userDeviceMaps.length; i++) {
677
- var taskDetail = "megolm keys for ".concat(session.sessionId, " (slice ").concat(i + 1, "/").concat(userDeviceMaps.length, ")");
678
- try {
679
- _this8.prefixedLogger.debug("Sharing ".concat(taskDetail), userDeviceMaps[i].map(d => "".concat(d.userId, "/").concat(d.deviceInfo.deviceId)));
680
- yield _this8.encryptAndSendKeysToDevices(session, key.chain_index, userDeviceMaps[i], payload);
681
- _this8.prefixedLogger.debug("Shared ".concat(taskDetail));
682
- } catch (e) {
683
- _this8.prefixedLogger.error("Failed to share ".concat(taskDetail));
684
- throw e;
685
- }
686
- }
687
- })();
688
- }
689
-
690
- /**
691
- * Notify devices that we weren't able to create olm sessions.
692
- *
693
- *
694
- *
695
- * @param failedDevices - the devices that we were unable to
696
- * create olm sessions for, as returned by shareKeyWithDevices
697
- */
698
- notifyFailedOlmDevices(session, key, failedDevices) {
699
- var _this9 = this;
700
- return _asyncToGenerator(function* () {
701
- _this9.prefixedLogger.debug("Notifying ".concat(failedDevices.length, " devices we failed to create Olm sessions"));
702
-
703
- // mark the devices that failed as "handled" because we don't want to try
704
- // to claim a one-time-key for dead devices on every message.
705
- for (var {
706
- userId,
707
- deviceInfo
708
- } of failedDevices) {
709
- var deviceId = deviceInfo.deviceId;
710
- session.markSharedWithDevice(userId, deviceId, deviceInfo.getIdentityKey(), key.chain_index);
711
- }
712
- var unnotifiedFailedDevices = yield _this9.olmDevice.filterOutNotifiedErrorDevices(failedDevices);
713
- _this9.prefixedLogger.debug("Need to notify ".concat(unnotifiedFailedDevices.length, " failed devices which haven't been notified before"));
714
- var blockedMap = new MapWithDefault(() => new Map());
715
- for (var {
716
- userId: _userId4,
717
- deviceInfo: _deviceInfo3
718
- } of unnotifiedFailedDevices) {
719
- // we use a similar format to what
720
- // olmlib.ensureOlmSessionsForDevices returns, so that
721
- // we can use the same function to split
722
- blockedMap.getOrCreate(_userId4).set(_deviceInfo3.deviceId, {
723
- device: {
724
- code: "m.no_olm",
725
- reason: WITHHELD_MESSAGES["m.no_olm"],
726
- deviceInfo: _deviceInfo3
727
- }
728
- });
729
- }
730
-
731
- // send the notifications
732
- yield _this9.notifyBlockedDevices(session, blockedMap);
733
- _this9.prefixedLogger.debug("Notified ".concat(unnotifiedFailedDevices.length, " devices we failed to create Olm sessions"));
734
- })();
735
- }
736
-
737
- /**
738
- * Notify blocked devices that they have been blocked.
739
- *
740
- *
741
- * @param devicesByUser - map from userid to device ID to blocked data
742
- */
743
- notifyBlockedDevices(session, devicesByUser) {
744
- var _this10 = this;
745
- return _asyncToGenerator(function* () {
746
- var payload = {
747
- room_id: _this10.roomId,
748
- session_id: session.sessionId,
749
- algorithm: olmlib.MEGOLM_ALGORITHM,
750
- sender_key: _this10.olmDevice.deviceCurve25519Key
751
- };
752
- var userDeviceMaps = _this10.splitDevices(devicesByUser);
753
- for (var i = 0; i < userDeviceMaps.length; i++) {
754
- try {
755
- yield _this10.sendBlockedNotificationsToDevices(session, userDeviceMaps[i], payload);
756
- _this10.prefixedLogger.debug("Completed blacklist notification for ".concat(session.sessionId, " ") + "(slice ".concat(i + 1, "/").concat(userDeviceMaps.length, ")"));
757
- } catch (e) {
758
- _this10.prefixedLogger.debug("blacklist notification for ".concat(session.sessionId, " ") + "(slice ".concat(i + 1, "/").concat(userDeviceMaps.length, ") failed"));
759
- throw e;
760
- }
761
- }
762
- })();
763
- }
764
-
765
- /**
766
- * Perform any background tasks that can be done before a message is ready to
767
- * send, in order to speed up sending of the message.
768
- *
769
- * @param room - the room the event is in
770
- * @returns A function that, when called, will stop the preparation
771
- */
772
- prepareToEncrypt(room) {
773
- var _this11 = this;
774
- if (room.roomId !== this.roomId) {
775
- throw new Error("MegolmEncryption.prepareToEncrypt called on unexpected room");
776
- }
777
- if (this.encryptionPreparation != null) {
778
- // We're already preparing something, so don't do anything else.
779
- var elapsedTime = Date.now() - this.encryptionPreparation.startTime;
780
- this.prefixedLogger.debug("Already started preparing to encrypt for this room ".concat(elapsedTime, "ms ago, skipping"));
781
- return this.encryptionPreparation.cancel;
782
- }
783
- this.prefixedLogger.debug("Preparing to encrypt events");
784
- var cancelled = false;
785
- var isCancelled = () => cancelled;
786
- this.encryptionPreparation = {
787
- startTime: Date.now(),
788
- promise: _asyncToGenerator(function* () {
789
- try {
790
- // Attempt to enumerate the devices in room, and gracefully
791
- // handle cancellation if it occurs.
792
- var getDevicesResult = yield _this11.getDevicesInRoom(room, false, isCancelled);
793
- if (getDevicesResult === null) return;
794
- var [devicesInRoom, blocked] = getDevicesResult;
795
- if (_this11.crypto.globalErrorOnUnknownDevices) {
796
- // Drop unknown devices for now. When the message gets sent, we'll
797
- // throw an error, but we'll still be prepared to send to the known
798
- // devices.
799
- _this11.removeUnknownDevices(devicesInRoom);
800
- }
801
- _this11.prefixedLogger.debug("Ensuring outbound megolm session");
802
- yield _this11.ensureOutboundSession(room, devicesInRoom, blocked, true);
803
- _this11.prefixedLogger.debug("Ready to encrypt events");
804
- } catch (e) {
805
- _this11.prefixedLogger.error("Failed to prepare to encrypt events", e);
806
- } finally {
807
- delete _this11.encryptionPreparation;
808
- }
809
- })(),
810
- cancel: () => {
811
- // The caller has indicated that the process should be cancelled,
812
- // so tell the promise that we'd like to halt, and reset the preparation state.
813
- cancelled = true;
814
- delete this.encryptionPreparation;
815
- }
816
- };
817
- return this.encryptionPreparation.cancel;
818
- }
819
-
820
- /**
821
- * @param content - plaintext event content
822
- *
823
- * @returns Promise which resolves to the new event body
824
- */
825
- encryptMessage(room, eventType, content) {
826
- var _this12 = this;
827
- return _asyncToGenerator(function* () {
828
- _this12.prefixedLogger.debug("Starting to encrypt event");
829
- if (_this12.encryptionPreparation != null) {
830
- // If we started sending keys, wait for it to be done.
831
- // FIXME: check if we need to cancel
832
- // (https://github.com/matrix-org/matrix-js-sdk/issues/1255)
833
- try {
834
- yield _this12.encryptionPreparation.promise;
835
- } catch (_unused) {
836
- // ignore any errors -- if the preparation failed, we'll just
837
- // restart everything here
838
- }
839
- }
840
-
841
- /**
842
- * When using in-room messages and the room has encryption enabled,
843
- * clients should ensure that encryption does not hinder the verification.
844
- */
845
- var forceDistributeToUnverified = _this12.isVerificationEvent(eventType, content);
846
- var [devicesInRoom, blocked] = yield _this12.getDevicesInRoom(room, forceDistributeToUnverified);
847
-
848
- // check if any of these devices are not yet known to the user.
849
- // if so, warn the user so they can verify or ignore.
850
- if (_this12.crypto.globalErrorOnUnknownDevices) {
851
- _this12.checkForUnknownDevices(devicesInRoom);
852
- }
853
- var session = yield _this12.ensureOutboundSession(room, devicesInRoom, blocked);
854
- var payloadJson = {
855
- room_id: _this12.roomId,
856
- type: eventType,
857
- content: content
858
- };
859
- var ciphertext = _this12.olmDevice.encryptGroupMessage(session.sessionId, JSON.stringify(payloadJson));
860
- var encryptedContent = {
861
- algorithm: olmlib.MEGOLM_ALGORITHM,
862
- sender_key: _this12.olmDevice.deviceCurve25519Key,
863
- ciphertext: ciphertext,
864
- session_id: session.sessionId,
865
- // Include our device ID so that recipients can send us a
866
- // m.new_device message if they don't have our session key.
867
- // XXX: Do we still need this now that m.new_device messages
868
- // no longer exist since #483?
869
- device_id: _this12.deviceId
870
- };
871
- session.useCount++;
872
- return encryptedContent;
873
- })();
874
- }
875
- isVerificationEvent(eventType, content) {
876
- switch (eventType) {
877
- case EventType.KeyVerificationCancel:
878
- case EventType.KeyVerificationDone:
879
- case EventType.KeyVerificationMac:
880
- case EventType.KeyVerificationStart:
881
- case EventType.KeyVerificationKey:
882
- case EventType.KeyVerificationReady:
883
- case EventType.KeyVerificationAccept:
884
- {
885
- return true;
886
- }
887
- case EventType.RoomMessage:
888
- {
889
- return content["msgtype"] === MsgType.KeyVerificationRequest;
890
- }
891
- default:
892
- {
893
- return false;
894
- }
895
- }
896
- }
897
-
898
- /**
899
- * Forces the current outbound group session to be discarded such
900
- * that another one will be created next time an event is sent.
901
- *
902
- * This should not normally be necessary.
903
- */
904
- forceDiscardSession() {
905
- this.setupPromise = this.setupPromise.then(() => null);
906
- }
907
-
908
- /**
909
- * Checks the devices we're about to send to and see if any are entirely
910
- * unknown to the user. If so, warn the user, and mark them as known to
911
- * give the user a chance to go verify them before re-sending this message.
912
- *
913
- * @param devicesInRoom - `userId -> {deviceId -> object}`
914
- * devices we should shared the session with.
915
- */
916
- checkForUnknownDevices(devicesInRoom) {
917
- var unknownDevices = new MapWithDefault(() => new Map());
918
- for (var [userId, userDevices] of devicesInRoom) {
919
- for (var [deviceId, device] of userDevices) {
920
- if (device.isUnverified() && !device.isKnown()) {
921
- unknownDevices.getOrCreate(userId).set(deviceId, device);
922
- }
923
- }
924
- }
925
- if (unknownDevices.size) {
926
- // it'd be kind to pass unknownDevices up to the user in this error
927
- throw new UnknownDeviceError("This room contains unknown devices which have not been verified. " + "We strongly recommend you verify them before continuing.", unknownDevices);
928
- }
929
- }
930
-
931
- /**
932
- * Remove unknown devices from a set of devices. The devicesInRoom parameter
933
- * will be modified.
934
- *
935
- * @param devicesInRoom - `userId -> {deviceId -> object}`
936
- * devices we should shared the session with.
937
- */
938
- removeUnknownDevices(devicesInRoom) {
939
- for (var [userId, userDevices] of devicesInRoom) {
940
- for (var [deviceId, device] of userDevices) {
941
- if (device.isUnverified() && !device.isKnown()) {
942
- userDevices.delete(deviceId);
943
- }
944
- }
945
- if (userDevices.size === 0) {
946
- devicesInRoom.delete(userId);
947
- }
948
- }
949
- }
950
-
951
- /**
952
- * Get the list of unblocked devices for all users in the room
953
- *
954
- * @param forceDistributeToUnverified - if set to true will include the unverified devices
955
- * even if setting is set to block them (useful for verification)
956
- * @param isCancelled - will cause the procedure to abort early if and when it starts
957
- * returning `true`. If omitted, cancellation won't happen.
958
- *
959
- * @returns Promise which resolves to `null`, or an array whose
960
- * first element is a {@link DeviceInfoMap} indicating
961
- * the devices that messages should be encrypted to, and whose second
962
- * element is a map from userId to deviceId to data indicating the devices
963
- * that are in the room but that have been blocked.
964
- * If `isCancelled` is provided and returns `true` while processing, `null`
965
- * will be returned.
966
- * If `isCancelled` is not provided, the Promise will never resolve to `null`.
967
- */
968
-
969
- getDevicesInRoom(room) {
970
- var _arguments2 = arguments,
971
- _this13 = this;
972
- return _asyncToGenerator(function* () {
973
- var forceDistributeToUnverified = _arguments2.length > 1 && _arguments2[1] !== undefined ? _arguments2[1] : false;
974
- var isCancelled = _arguments2.length > 2 ? _arguments2[2] : undefined;
975
- var members = yield room.getEncryptionTargetMembers();
976
- _this13.prefixedLogger.debug("Encrypting for users (shouldEncryptForInvitedMembers: ".concat(room.shouldEncryptForInvitedMembers(), "):"), members.map(u => "".concat(u.userId, " (").concat(u.membership, ")")));
977
- var roomMembers = members.map(function (u) {
978
- return u.userId;
979
- });
980
-
981
- // The global value is treated as a default for when rooms don't specify a value.
982
- var isBlacklisting = _this13.crypto.globalBlacklistUnverifiedDevices;
983
- var isRoomBlacklisting = room.getBlacklistUnverifiedDevices();
984
- if (typeof isRoomBlacklisting === "boolean") {
985
- isBlacklisting = isRoomBlacklisting;
986
- }
987
-
988
- // We are happy to use a cached version here: we assume that if we already
989
- // have a list of the user's devices, then we already share an e2e room
990
- // with them, which means that they will have announced any new devices via
991
- // device_lists in their /sync response. This cache should then be maintained
992
- // using all the device_lists changes and left fields.
993
- // See https://github.com/vector-im/element-web/issues/2305 for details.
994
- var devices = yield _this13.crypto.downloadKeys(roomMembers, false);
995
- if ((isCancelled === null || isCancelled === void 0 ? void 0 : isCancelled()) === true) {
996
- return null;
997
- }
998
- var blocked = new MapWithDefault(() => new Map());
999
- // remove any blocked devices
1000
- for (var [userId, userDevices] of devices) {
1001
- for (var [deviceId, userDevice] of userDevices) {
1002
- // Yield prior to checking each device so that we don't block
1003
- // updating/rendering for too long.
1004
- // See https://github.com/vector-im/element-web/issues/21612
1005
- if (isCancelled !== undefined) yield immediate();
1006
- if ((isCancelled === null || isCancelled === void 0 ? void 0 : isCancelled()) === true) return null;
1007
- var deviceTrust = _this13.crypto.checkDeviceTrust(userId, deviceId);
1008
- if (userDevice.isBlocked() || !deviceTrust.isVerified() && isBlacklisting && !forceDistributeToUnverified) {
1009
- var blockedDevices = blocked.getOrCreate(userId);
1010
- var isBlocked = userDevice.isBlocked();
1011
- blockedDevices.set(deviceId, {
1012
- code: isBlocked ? "m.blacklisted" : "m.unverified",
1013
- reason: WITHHELD_MESSAGES[isBlocked ? "m.blacklisted" : "m.unverified"],
1014
- deviceInfo: userDevice
1015
- });
1016
- userDevices.delete(deviceId);
1017
- }
1018
- }
1019
- }
1020
- return [devices, blocked];
1021
- })();
1022
- }
1023
- }
1024
-
1025
- /**
1026
- * Megolm decryption implementation
1027
- *
1028
- * @param params - parameters, as per {@link DecryptionAlgorithm}
1029
- */
1030
- export class MegolmDecryption extends DecryptionAlgorithm {
1031
- constructor(params) {
1032
- super(params);
1033
- // events which we couldn't decrypt due to unknown sessions /
1034
- // indexes, or which we could only decrypt with untrusted keys:
1035
- // map from senderKey|sessionId to Set of MatrixEvents
1036
- _defineProperty(this, "pendingEvents", new Map());
1037
- // this gets stubbed out by the unit tests.
1038
- _defineProperty(this, "olmlib", olmlib);
1039
- _defineProperty(this, "roomId", void 0);
1040
- _defineProperty(this, "prefixedLogger", void 0);
1041
- this.roomId = params.roomId;
1042
- this.prefixedLogger = logger.getChild("[".concat(this.roomId, " decryption]"));
1043
- }
1044
-
1045
- /**
1046
- * returns a promise which resolves to a
1047
- * {@link EventDecryptionResult} once we have finished
1048
- * decrypting, or rejects with an `algorithms.DecryptionError` if there is a
1049
- * problem decrypting the event.
1050
- */
1051
- decryptEvent(event) {
1052
- var _this14 = this;
1053
- return _asyncToGenerator(function* () {
1054
- var content = event.getWireContent();
1055
- if (!content.sender_key || !content.session_id || !content.ciphertext) {
1056
- throw new DecryptionError(DecryptionFailureCode.MEGOLM_MISSING_FIELDS, "Missing fields in input");
1057
- }
1058
-
1059
- // we add the event to the pending list *before* we start decryption.
1060
- //
1061
- // then, if the key turns up while decryption is in progress (and
1062
- // decryption fails), we will schedule a retry.
1063
- // (fixes https://github.com/vector-im/element-web/issues/5001)
1064
- _this14.addEventToPendingList(event);
1065
- var res;
1066
- try {
1067
- res = yield _this14.olmDevice.decryptGroupMessage(event.getRoomId(), content.sender_key, content.session_id, content.ciphertext, event.getId(), event.getTs());
1068
- } catch (e) {
1069
- if (e.name === "DecryptionError") {
1070
- // re-throw decryption errors as-is
1071
- throw e;
1072
- }
1073
- var errorCode = DecryptionFailureCode.OLM_DECRYPT_GROUP_MESSAGE_ERROR;
1074
- if ((e === null || e === void 0 ? void 0 : e.message) === "OLM.UNKNOWN_MESSAGE_INDEX") {
1075
- _this14.requestKeysForEvent(event);
1076
- errorCode = DecryptionFailureCode.OLM_UNKNOWN_MESSAGE_INDEX;
1077
- }
1078
- throw new DecryptionError(errorCode, e instanceof Error ? e.message : "Unknown Error: Error is undefined", {
1079
- session: content.sender_key + "|" + content.session_id
1080
- });
1081
- }
1082
- if (res === null) {
1083
- // We've got a message for a session we don't have.
1084
- // try and get the missing key from the backup first
1085
- _this14.crypto.backupManager.queryKeyBackupRateLimited(event.getRoomId(), content.session_id).catch(() => {});
1086
-
1087
- // (XXX: We might actually have received this key since we started
1088
- // decrypting, in which case we'll have scheduled a retry, and this
1089
- // request will be redundant. We could probably check to see if the
1090
- // event is still in the pending list; if not, a retry will have been
1091
- // scheduled, so we needn't send out the request here.)
1092
- _this14.requestKeysForEvent(event);
1093
-
1094
- // See if there was a problem with the olm session at the time the
1095
- // event was sent. Use a fuzz factor of 2 minutes.
1096
- var problem = yield _this14.olmDevice.sessionMayHaveProblems(content.sender_key, event.getTs() - 120000);
1097
- if (problem) {
1098
- _this14.prefixedLogger.info("When handling UISI from ".concat(event.getSender(), " (sender key ").concat(content.sender_key, "): ") + "recent session problem with that sender:", problem);
1099
- var problemDescription = PROBLEM_DESCRIPTIONS[problem.type] || PROBLEM_DESCRIPTIONS.unknown;
1100
- if (problem.fixed) {
1101
- problemDescription += " Trying to create a new secure channel and re-requesting the keys.";
1102
- }
1103
- throw new DecryptionError(DecryptionFailureCode.MEGOLM_UNKNOWN_INBOUND_SESSION_ID, problemDescription, {
1104
- session: content.sender_key + "|" + content.session_id
1105
- });
1106
- }
1107
- throw new DecryptionError(DecryptionFailureCode.MEGOLM_UNKNOWN_INBOUND_SESSION_ID, "The sender's device has not sent us the keys for this message.", {
1108
- session: content.sender_key + "|" + content.session_id
1109
- });
1110
- }
1111
-
1112
- // Success. We can remove the event from the pending list, if
1113
- // that hasn't already happened. However, if the event was
1114
- // decrypted with an untrusted key, leave it on the pending
1115
- // list so it will be retried if we find a trusted key later.
1116
- if (!res.untrusted) {
1117
- _this14.removeEventFromPendingList(event);
1118
- }
1119
- var payload = JSON.parse(res.result);
1120
-
1121
- // belt-and-braces check that the room id matches that indicated by the HS
1122
- // (this is somewhat redundant, since the megolm session is scoped to the
1123
- // room, so neither the sender nor a MITM can lie about the room_id).
1124
- if (payload.room_id !== event.getRoomId()) {
1125
- throw new DecryptionError(DecryptionFailureCode.MEGOLM_BAD_ROOM, "Message intended for room " + payload.room_id);
1126
- }
1127
- return {
1128
- clearEvent: payload,
1129
- senderCurve25519Key: res.senderKey,
1130
- claimedEd25519Key: res.keysClaimed.ed25519,
1131
- forwardingCurve25519KeyChain: res.forwardingCurve25519KeyChain,
1132
- untrusted: res.untrusted
1133
- };
1134
- })();
1135
- }
1136
- requestKeysForEvent(event) {
1137
- var wireContent = event.getWireContent();
1138
- var recipients = event.getKeyRequestRecipients(this.userId);
1139
- this.crypto.requestRoomKey({
1140
- room_id: event.getRoomId(),
1141
- algorithm: wireContent.algorithm,
1142
- sender_key: wireContent.sender_key,
1143
- session_id: wireContent.session_id
1144
- }, recipients);
1145
- }
1146
-
1147
- /**
1148
- * Add an event to the list of those awaiting their session keys.
1149
- *
1150
- * @internal
1151
- *
1152
- */
1153
- addEventToPendingList(event) {
1154
- var _senderPendingEvents$;
1155
- var content = event.getWireContent();
1156
- var senderKey = content.sender_key;
1157
- var sessionId = content.session_id;
1158
- if (!this.pendingEvents.has(senderKey)) {
1159
- this.pendingEvents.set(senderKey, new Map());
1160
- }
1161
- var senderPendingEvents = this.pendingEvents.get(senderKey);
1162
- if (!senderPendingEvents.has(sessionId)) {
1163
- senderPendingEvents.set(sessionId, new Set());
1164
- }
1165
- (_senderPendingEvents$ = senderPendingEvents.get(sessionId)) === null || _senderPendingEvents$ === void 0 || _senderPendingEvents$.add(event);
1166
- }
1167
-
1168
- /**
1169
- * Remove an event from the list of those awaiting their session keys.
1170
- *
1171
- * @internal
1172
- *
1173
- */
1174
- removeEventFromPendingList(event) {
1175
- var content = event.getWireContent();
1176
- var senderKey = content.sender_key;
1177
- var sessionId = content.session_id;
1178
- var senderPendingEvents = this.pendingEvents.get(senderKey);
1179
- var pendingEvents = senderPendingEvents === null || senderPendingEvents === void 0 ? void 0 : senderPendingEvents.get(sessionId);
1180
- if (!pendingEvents) {
1181
- return;
1182
- }
1183
- pendingEvents.delete(event);
1184
- if (pendingEvents.size === 0) {
1185
- senderPendingEvents.delete(sessionId);
1186
- }
1187
- if (senderPendingEvents.size === 0) {
1188
- this.pendingEvents.delete(senderKey);
1189
- }
1190
- }
1191
-
1192
- /**
1193
- * Parse a RoomKey out of an `m.room_key` event.
1194
- *
1195
- * @param event - the event containing the room key.
1196
- *
1197
- * @returns The `RoomKey` if it could be successfully parsed out of the
1198
- * event.
1199
- *
1200
- * @internal
1201
- *
1202
- */
1203
- roomKeyFromEvent(event) {
1204
- var senderKey = event.getSenderKey();
1205
- var content = event.getContent();
1206
- var extraSessionData = {};
1207
- if (!content.room_id || !content.session_key || !content.session_id || !content.algorithm) {
1208
- this.prefixedLogger.error("key event is missing fields");
1209
- return;
1210
- }
1211
- if (!olmlib.isOlmEncrypted(event)) {
1212
- this.prefixedLogger.error("key event not properly encrypted");
1213
- return;
1214
- }
1215
- if (content["org.matrix.msc3061.shared_history"]) {
1216
- extraSessionData.sharedHistory = true;
1217
- }
1218
- var roomKey = {
1219
- senderKey: senderKey,
1220
- sessionId: content.session_id,
1221
- sessionKey: content.session_key,
1222
- extraSessionData,
1223
- exportFormat: false,
1224
- roomId: content.room_id,
1225
- algorithm: content.algorithm,
1226
- forwardingKeyChain: [],
1227
- keysClaimed: event.getKeysClaimed()
1228
- };
1229
- return roomKey;
1230
- }
1231
-
1232
- /**
1233
- * Parse a RoomKey out of an `m.forwarded_room_key` event.
1234
- *
1235
- * @param event - the event containing the forwarded room key.
1236
- *
1237
- * @returns The `RoomKey` if it could be successfully parsed out of the
1238
- * event.
1239
- *
1240
- * @internal
1241
- *
1242
- */
1243
- forwardedRoomKeyFromEvent(event) {
1244
- // the properties in m.forwarded_room_key are a superset of those in m.room_key, so
1245
- // start by parsing the m.room_key fields.
1246
- var roomKey = this.roomKeyFromEvent(event);
1247
- if (!roomKey) {
1248
- return;
1249
- }
1250
- var senderKey = event.getSenderKey();
1251
- var content = event.getContent();
1252
- var senderKeyUser = this.baseApis.crypto.deviceList.getUserByIdentityKey(olmlib.OLM_ALGORITHM, senderKey);
1253
-
1254
- // We received this to-device event from event.getSenderKey(), but the original
1255
- // creator of the room key is claimed in the content.
1256
- var claimedCurve25519Key = content.sender_key;
1257
- var claimedEd25519Key = content.sender_claimed_ed25519_key;
1258
- var forwardingKeyChain = Array.isArray(content.forwarding_curve25519_key_chain) ? content.forwarding_curve25519_key_chain : [];
1259
-
1260
- // copy content before we modify it
1261
- forwardingKeyChain = forwardingKeyChain.slice();
1262
- forwardingKeyChain.push(senderKey);
1263
-
1264
- // Check if we have all the fields we need.
1265
- if (senderKeyUser !== event.getSender()) {
1266
- this.prefixedLogger.error("sending device does not belong to the user it claims to be from");
1267
- return;
1268
- }
1269
- if (!claimedCurve25519Key) {
1270
- this.prefixedLogger.error("forwarded_room_key event is missing sender_key field");
1271
- return;
1272
- }
1273
- if (!claimedEd25519Key) {
1274
- this.prefixedLogger.error("forwarded_room_key_event is missing sender_claimed_ed25519_key field");
1275
- return;
1276
- }
1277
- var keysClaimed = {
1278
- ed25519: claimedEd25519Key
1279
- };
1280
-
1281
- // FIXME: We're reusing the same field to track both:
1282
- //
1283
- // 1. The Olm identity we've received this room key from.
1284
- // 2. The Olm identity deduced (in the trusted case) or claiming (in the
1285
- // untrusted case) to be the original creator of this room key.
1286
- //
1287
- // We now overwrite the value tracking usage 1 with the value tracking usage 2.
1288
- roomKey.senderKey = claimedCurve25519Key;
1289
- // Replace our keysClaimed as well.
1290
- roomKey.keysClaimed = keysClaimed;
1291
- roomKey.exportFormat = true;
1292
- roomKey.forwardingKeyChain = forwardingKeyChain;
1293
- // forwarded keys are always untrusted
1294
- roomKey.extraSessionData.untrusted = true;
1295
- return roomKey;
1296
- }
1297
-
1298
- /**
1299
- * Determine if we should accept the forwarded room key that was found in the given
1300
- * event.
1301
- *
1302
- * @param event - An `m.forwarded_room_key` event.
1303
- * @param roomKey - The room key that was found in the event.
1304
- *
1305
- * @returns promise that will resolve to a boolean telling us if it's ok to
1306
- * accept the given forwarded room key.
1307
- *
1308
- * @internal
1309
- *
1310
- */
1311
- shouldAcceptForwardedKey(event, roomKey) {
1312
- var _this15 = this;
1313
- return _asyncToGenerator(function* () {
1314
- var _this15$crypto$device;
1315
- var senderKey = event.getSenderKey();
1316
- var sendingDevice = (_this15$crypto$device = _this15.crypto.deviceList.getDeviceByIdentityKey(olmlib.OLM_ALGORITHM, senderKey)) !== null && _this15$crypto$device !== void 0 ? _this15$crypto$device : undefined;
1317
- var deviceTrust = _this15.crypto.checkDeviceInfoTrust(event.getSender(), sendingDevice);
1318
-
1319
- // Using the plaintext sender here is fine since we checked that the
1320
- // sender matches to the user id in the device keys when this event was
1321
- // originally decrypted. This can obviously only happen if the device
1322
- // keys have been downloaded, but if they haven't the
1323
- // `deviceTrust.isVerified()` flag would be false as well.
1324
- //
1325
- // It would still be far nicer if the `sendingDevice` had a user ID
1326
- // attached to it that went through signature checks.
1327
- var fromUs = event.getSender() === _this15.baseApis.getUserId();
1328
- var keyFromOurVerifiedDevice = deviceTrust.isVerified() && fromUs;
1329
- var weRequested = yield _this15.wasRoomKeyRequested(event, roomKey);
1330
- var fromInviter = _this15.wasRoomKeyForwardedByInviter(event, roomKey);
1331
- var sharedAsHistory = _this15.wasRoomKeyForwardedAsHistory(roomKey);
1332
- return weRequested && keyFromOurVerifiedDevice || fromInviter && sharedAsHistory;
1333
- })();
1334
- }
1335
-
1336
- /**
1337
- * Did we ever request the given room key from the event sender and its
1338
- * accompanying device.
1339
- *
1340
- * @param event - An `m.forwarded_room_key` event.
1341
- * @param roomKey - The room key that was found in the event.
1342
- *
1343
- * @internal
1344
- *
1345
- */
1346
- wasRoomKeyRequested(event, roomKey) {
1347
- var _this16 = this;
1348
- return _asyncToGenerator(function* () {
1349
- // We send the `m.room_key_request` out as a wildcard to-device request,
1350
- // otherwise we would have to duplicate the same content for each
1351
- // device. This is why we need to pass in "*" as the device id here.
1352
- var outgoingRequests = yield _this16.crypto.cryptoStore.getOutgoingRoomKeyRequestsByTarget(event.getSender(), "*", [RoomKeyRequestState.Sent]);
1353
- return outgoingRequests.some(req => req.requestBody.room_id === roomKey.roomId && req.requestBody.session_id === roomKey.sessionId);
1354
- })();
1355
- }
1356
- wasRoomKeyForwardedByInviter(event, roomKey) {
1357
- var _room$getMember, _memberEvent$getUnsig, _memberEvent$getPrevC;
1358
- // TODO: This is supposed to have a time limit. We should only accept
1359
- // such keys if we happen to receive them for a recently joined room.
1360
- var room = this.baseApis.getRoom(roomKey.roomId);
1361
- var senderKey = event.getSenderKey();
1362
- if (!senderKey) {
1363
- return false;
1364
- }
1365
- var senderKeyUser = this.crypto.deviceList.getUserByIdentityKey(olmlib.OLM_ALGORITHM, senderKey);
1366
- if (!senderKeyUser) {
1367
- return false;
1368
- }
1369
- var memberEvent = room === null || room === void 0 || (_room$getMember = room.getMember(this.userId)) === null || _room$getMember === void 0 ? void 0 : _room$getMember.events.member;
1370
- var fromInviter = (memberEvent === null || memberEvent === void 0 ? void 0 : memberEvent.getSender()) === senderKeyUser || (memberEvent === null || memberEvent === void 0 || (_memberEvent$getUnsig = memberEvent.getUnsigned()) === null || _memberEvent$getUnsig === void 0 ? void 0 : _memberEvent$getUnsig.prev_sender) === senderKeyUser && (memberEvent === null || memberEvent === void 0 || (_memberEvent$getPrevC = memberEvent.getPrevContent()) === null || _memberEvent$getPrevC === void 0 ? void 0 : _memberEvent$getPrevC.membership) === KnownMembership.Invite;
1371
- if (room && fromInviter) {
1372
- return true;
1373
- } else {
1374
- return false;
1375
- }
1376
- }
1377
- wasRoomKeyForwardedAsHistory(roomKey) {
1378
- var room = this.baseApis.getRoom(roomKey.roomId);
1379
-
1380
- // If the key is not for a known room, then something fishy is going on,
1381
- // so we reject the key out of caution. In practice, this is a bit moot
1382
- // because we'll only accept shared_history forwarded by the inviter, and
1383
- // we won't know who was the inviter for an unknown room, so we'll reject
1384
- // it anyway.
1385
- if (room && roomKey.extraSessionData.sharedHistory) {
1386
- return true;
1387
- } else {
1388
- return false;
1389
- }
1390
- }
1391
-
1392
- /**
1393
- * Check if a forwarded room key should be parked.
1394
- *
1395
- * A forwarded room key should be parked if it's a key for a room we're not
1396
- * in. We park the forwarded room key in case *this sender* invites us to
1397
- * that room later.
1398
- */
1399
- shouldParkForwardedKey(roomKey) {
1400
- var room = this.baseApis.getRoom(roomKey.roomId);
1401
- if (!room && roomKey.extraSessionData.sharedHistory) {
1402
- return true;
1403
- } else {
1404
- return false;
1405
- }
1406
- }
1407
-
1408
- /**
1409
- * Park the given room key to our store.
1410
- *
1411
- * @param event - An `m.forwarded_room_key` event.
1412
- * @param roomKey - The room key that was found in the event.
1413
- *
1414
- * @internal
1415
- *
1416
- */
1417
- parkForwardedKey(event, roomKey) {
1418
- var _this17 = this;
1419
- return _asyncToGenerator(function* () {
1420
- var parkedData = {
1421
- senderId: event.getSender(),
1422
- senderKey: roomKey.senderKey,
1423
- sessionId: roomKey.sessionId,
1424
- sessionKey: roomKey.sessionKey,
1425
- keysClaimed: roomKey.keysClaimed,
1426
- forwardingCurve25519KeyChain: roomKey.forwardingKeyChain
1427
- };
1428
- yield _this17.crypto.cryptoStore.doTxn("readwrite", ["parked_shared_history"], txn => _this17.crypto.cryptoStore.addParkedSharedHistory(roomKey.roomId, parkedData, txn), logger.getChild("[addParkedSharedHistory]"));
1429
- })();
1430
- }
1431
-
1432
- /**
1433
- * Add the given room key to our store.
1434
- *
1435
- * @param roomKey - The room key that should be added to the store.
1436
- *
1437
- * @internal
1438
- *
1439
- */
1440
- addRoomKey(roomKey) {
1441
- var _this18 = this;
1442
- return _asyncToGenerator(function* () {
1443
- try {
1444
- yield _this18.olmDevice.addInboundGroupSession(roomKey.roomId, roomKey.senderKey, roomKey.forwardingKeyChain, roomKey.sessionId, roomKey.sessionKey, roomKey.keysClaimed, roomKey.exportFormat, roomKey.extraSessionData);
1445
-
1446
- // have another go at decrypting events sent with this session.
1447
- if (yield _this18.retryDecryption(roomKey.senderKey, roomKey.sessionId, !roomKey.extraSessionData.untrusted)) {
1448
- // cancel any outstanding room key requests for this session.
1449
- // Only do this if we managed to decrypt every message in the
1450
- // session, because if we didn't, we leave the other key
1451
- // requests in the hopes that someone sends us a key that
1452
- // includes an earlier index.
1453
- _this18.crypto.cancelRoomKeyRequest({
1454
- algorithm: roomKey.algorithm,
1455
- room_id: roomKey.roomId,
1456
- session_id: roomKey.sessionId,
1457
- sender_key: roomKey.senderKey
1458
- });
1459
- }
1460
-
1461
- // don't wait for the keys to be backed up for the server
1462
- yield _this18.crypto.backupManager.backupGroupSession(roomKey.senderKey, roomKey.sessionId);
1463
- } catch (e) {
1464
- _this18.prefixedLogger.error("Error handling m.room_key_event: ".concat(e));
1465
- }
1466
- })();
1467
- }
1468
-
1469
- /**
1470
- * Handle room keys that have been forwarded to us as an
1471
- * `m.forwarded_room_key` event.
1472
- *
1473
- * Forwarded room keys need special handling since we have no way of knowing
1474
- * who the original creator of the room key was. This naturally means that
1475
- * forwarded room keys are always untrusted and should only be accepted in
1476
- * some cases.
1477
- *
1478
- * @param event - An `m.forwarded_room_key` event.
1479
- *
1480
- * @internal
1481
- *
1482
- */
1483
- onForwardedRoomKey(event) {
1484
- var _this19 = this;
1485
- return _asyncToGenerator(function* () {
1486
- var roomKey = _this19.forwardedRoomKeyFromEvent(event);
1487
- if (!roomKey) {
1488
- return;
1489
- }
1490
- if (yield _this19.shouldAcceptForwardedKey(event, roomKey)) {
1491
- yield _this19.addRoomKey(roomKey);
1492
- } else if (_this19.shouldParkForwardedKey(roomKey)) {
1493
- yield _this19.parkForwardedKey(event, roomKey);
1494
- }
1495
- })();
1496
- }
1497
- onRoomKeyEvent(event) {
1498
- var _this20 = this;
1499
- return _asyncToGenerator(function* () {
1500
- if (event.getType() == "m.forwarded_room_key") {
1501
- yield _this20.onForwardedRoomKey(event);
1502
- } else {
1503
- var roomKey = _this20.roomKeyFromEvent(event);
1504
- if (!roomKey) {
1505
- return;
1506
- }
1507
- yield _this20.addRoomKey(roomKey);
1508
- }
1509
- })();
1510
- }
1511
-
1512
- /**
1513
- * @param event - key event
1514
- */
1515
- onRoomKeyWithheldEvent(event) {
1516
- var _this21 = this;
1517
- return _asyncToGenerator(function* () {
1518
- var content = event.getContent();
1519
- var senderKey = content.sender_key;
1520
- if (content.code === "m.no_olm") {
1521
- yield _this21.onNoOlmWithheldEvent(event);
1522
- } else if (content.code === "m.unavailable") {
1523
- // this simply means that the other device didn't have the key, which isn't very useful information. Don't
1524
- // record it in the storage
1525
- } else {
1526
- yield _this21.olmDevice.addInboundGroupSessionWithheld(content.room_id, senderKey, content.session_id, content.code, content.reason);
1527
- }
1528
-
1529
- // Having recorded the problem, retry decryption on any affected messages.
1530
- // It's unlikely we'll be able to decrypt sucessfully now, but this will
1531
- // update the error message.
1532
- //
1533
- if (content.session_id) {
1534
- yield _this21.retryDecryption(senderKey, content.session_id);
1535
- } else {
1536
- // no_olm messages aren't specific to a given megolm session, so
1537
- // we trigger retrying decryption for all the messages from the sender's
1538
- // key, so that we can update the error message to indicate the olm
1539
- // session problem.
1540
- yield _this21.retryDecryptionFromSender(senderKey);
1541
- }
1542
- })();
1543
- }
1544
- onNoOlmWithheldEvent(event) {
1545
- var _this22 = this;
1546
- return _asyncToGenerator(function* () {
1547
- var content = event.getContent();
1548
- var senderKey = content.sender_key;
1549
- var sender = event.getSender();
1550
- _this22.prefixedLogger.warn("".concat(sender, ":").concat(senderKey, " was unable to establish an olm session with us"));
1551
- // if the sender says that they haven't been able to establish an olm
1552
- // session, let's proactively establish one
1553
-
1554
- if (yield _this22.olmDevice.getSessionIdForDevice(senderKey)) {
1555
- // a session has already been established, so we don't need to
1556
- // create a new one.
1557
- _this22.prefixedLogger.debug("New session already created. Not creating a new one.");
1558
- yield _this22.olmDevice.recordSessionProblem(senderKey, "no_olm", true);
1559
- return;
1560
- }
1561
- var device = _this22.crypto.deviceList.getDeviceByIdentityKey(content.algorithm, senderKey);
1562
- if (!device) {
1563
- // if we don't know about the device, fetch the user's devices again
1564
- // and retry before giving up
1565
- yield _this22.crypto.downloadKeys([sender], false);
1566
- device = _this22.crypto.deviceList.getDeviceByIdentityKey(content.algorithm, senderKey);
1567
- if (!device) {
1568
- _this22.prefixedLogger.info("Couldn't find device for identity key " + senderKey + ": not establishing session");
1569
- yield _this22.olmDevice.recordSessionProblem(senderKey, "no_olm", false);
1570
- return;
1571
- }
1572
- }
1573
-
1574
- // XXX: switch this to use encryptAndSendToDevices() rather than duplicating it?
1575
-
1576
- yield olmlib.ensureOlmSessionsForDevices(_this22.olmDevice, _this22.baseApis, new Map([[sender, [device]]]), false);
1577
- var encryptedContent = {
1578
- algorithm: olmlib.OLM_ALGORITHM,
1579
- sender_key: _this22.olmDevice.deviceCurve25519Key,
1580
- ciphertext: {},
1581
- [ToDeviceMessageId]: uuidv4()
1582
- };
1583
- yield olmlib.encryptMessageForDevice(encryptedContent.ciphertext, _this22.userId, undefined, _this22.olmDevice, sender, device, {
1584
- type: "m.dummy"
1585
- });
1586
- yield _this22.olmDevice.recordSessionProblem(senderKey, "no_olm", true);
1587
- yield _this22.baseApis.sendToDevice("m.room.encrypted", new Map([[sender, new Map([[device.deviceId, encryptedContent]])]]));
1588
- })();
1589
- }
1590
- hasKeysForKeyRequest(keyRequest) {
1591
- var body = keyRequest.requestBody;
1592
- return this.olmDevice.hasInboundSessionKeys(body.room_id, body.sender_key, body.session_id
1593
- // TODO: ratchet index
1594
- );
1595
- }
1596
- shareKeysWithDevice(keyRequest) {
1597
- var userId = keyRequest.userId;
1598
- var deviceId = keyRequest.deviceId;
1599
- var deviceInfo = this.crypto.getStoredDevice(userId, deviceId);
1600
- var body = keyRequest.requestBody;
1601
-
1602
- // XXX: switch this to use encryptAndSendToDevices()?
1603
-
1604
- this.olmlib.ensureOlmSessionsForDevices(this.olmDevice, this.baseApis, new Map([[userId, [deviceInfo]]])).then(devicemap => {
1605
- var _devicemap$get;
1606
- var olmSessionResult = (_devicemap$get = devicemap.get(userId)) === null || _devicemap$get === void 0 ? void 0 : _devicemap$get.get(deviceId);
1607
- if (!(olmSessionResult !== null && olmSessionResult !== void 0 && olmSessionResult.sessionId)) {
1608
- // no session with this device, probably because there
1609
- // were no one-time keys.
1610
- //
1611
- // ensureOlmSessionsForUsers has already done the logging,
1612
- // so just skip it.
1613
- return null;
1614
- }
1615
- this.prefixedLogger.debug("sharing keys for session " + body.sender_key + "|" + body.session_id + " with device " + userId + ":" + deviceId);
1616
- return this.buildKeyForwardingMessage(body.room_id, body.sender_key, body.session_id);
1617
- }).then(payload => {
1618
- var encryptedContent = {
1619
- algorithm: olmlib.OLM_ALGORITHM,
1620
- sender_key: this.olmDevice.deviceCurve25519Key,
1621
- ciphertext: {},
1622
- [ToDeviceMessageId]: uuidv4()
1623
- };
1624
- return this.olmlib.encryptMessageForDevice(encryptedContent.ciphertext, this.userId, undefined, this.olmDevice, userId, deviceInfo, payload).then(() => {
1625
- // TODO: retries
1626
- return this.baseApis.sendToDevice("m.room.encrypted", new Map([[userId, new Map([[deviceId, encryptedContent]])]]));
1627
- });
1628
- });
1629
- }
1630
- buildKeyForwardingMessage(roomId, senderKey, sessionId) {
1631
- var _this23 = this;
1632
- return _asyncToGenerator(function* () {
1633
- var key = yield _this23.olmDevice.getInboundGroupSessionKey(roomId, senderKey, sessionId);
1634
- return {
1635
- type: "m.forwarded_room_key",
1636
- content: {
1637
- "algorithm": olmlib.MEGOLM_ALGORITHM,
1638
- "room_id": roomId,
1639
- "sender_key": senderKey,
1640
- "sender_claimed_ed25519_key": key.sender_claimed_ed25519_key,
1641
- "session_id": sessionId,
1642
- "session_key": key.key,
1643
- "chain_index": key.chain_index,
1644
- "forwarding_curve25519_key_chain": key.forwarding_curve25519_key_chain,
1645
- "org.matrix.msc3061.shared_history": key.shared_history || false
1646
- }
1647
- };
1648
- })();
1649
- }
1650
-
1651
- /**
1652
- * @param untrusted - whether the key should be considered as untrusted
1653
- * @param source - where the key came from
1654
- */
1655
- importRoomKey(session) {
1656
- var {
1657
- untrusted,
1658
- source
1659
- } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1660
- var extraSessionData = {};
1661
- if (untrusted || session.untrusted) {
1662
- extraSessionData.untrusted = true;
1663
- }
1664
- if (session["org.matrix.msc3061.shared_history"]) {
1665
- extraSessionData.sharedHistory = true;
1666
- }
1667
- return this.olmDevice.addInboundGroupSession(session.room_id, session.sender_key, session.forwarding_curve25519_key_chain, session.session_id, session.session_key, session.sender_claimed_keys, true, extraSessionData).then(() => {
1668
- if (source !== "backup") {
1669
- // don't wait for it to complete
1670
- this.crypto.backupManager.backupGroupSession(session.sender_key, session.session_id).catch(e => {
1671
- // This throws if the upload failed, but this is fine
1672
- // since it will have written it to the db and will retry.
1673
- this.prefixedLogger.debug("Failed to back up megolm session", e);
1674
- });
1675
- }
1676
- // have another go at decrypting events sent with this session.
1677
- this.retryDecryption(session.sender_key, session.session_id, !extraSessionData.untrusted);
1678
- });
1679
- }
1680
-
1681
- /**
1682
- * Have another go at decrypting events after we receive a key. Resolves once
1683
- * decryption has been re-attempted on all events.
1684
- *
1685
- * @internal
1686
- * @param forceRedecryptIfUntrusted - whether messages that were already
1687
- * successfully decrypted using untrusted keys should be re-decrypted
1688
- *
1689
- * @returns whether all messages were successfully
1690
- * decrypted with trusted keys
1691
- */
1692
- retryDecryption(senderKey, sessionId, forceRedecryptIfUntrusted) {
1693
- var _this24 = this;
1694
- return _asyncToGenerator(function* () {
1695
- var _this24$pendingEvents;
1696
- var senderPendingEvents = _this24.pendingEvents.get(senderKey);
1697
- if (!senderPendingEvents) {
1698
- return true;
1699
- }
1700
- var pending = senderPendingEvents.get(sessionId);
1701
- if (!pending) {
1702
- return true;
1703
- }
1704
- var pendingList = [...pending];
1705
- _this24.prefixedLogger.debug("Retrying decryption on events:", pendingList.map(e => "".concat(e.getId())));
1706
- yield Promise.all(pendingList.map(/*#__PURE__*/function () {
1707
- var _ref15 = _asyncToGenerator(function* (ev) {
1708
- try {
1709
- yield ev.attemptDecryption(_this24.crypto, {
1710
- isRetry: true,
1711
- forceRedecryptIfUntrusted
1712
- });
1713
- } catch (_unused2) {
1714
- // don't die if something goes wrong
1715
- }
1716
- });
1717
- return function (_x2) {
1718
- return _ref15.apply(this, arguments);
1719
- };
1720
- }()));
1721
-
1722
- // If decrypted successfully with trusted keys, they'll have
1723
- // been removed from pendingEvents
1724
- return !((_this24$pendingEvents = _this24.pendingEvents.get(senderKey)) !== null && _this24$pendingEvents !== void 0 && _this24$pendingEvents.has(sessionId));
1725
- })();
1726
- }
1727
- retryDecryptionFromSender(senderKey) {
1728
- var _this25 = this;
1729
- return _asyncToGenerator(function* () {
1730
- var senderPendingEvents = _this25.pendingEvents.get(senderKey);
1731
- if (!senderPendingEvents) {
1732
- return true;
1733
- }
1734
- _this25.pendingEvents.delete(senderKey);
1735
- yield Promise.all([...senderPendingEvents].map(/*#__PURE__*/function () {
1736
- var _ref17 = _asyncToGenerator(function* (_ref16) {
1737
- var [_sessionId, pending] = _ref16;
1738
- yield Promise.all([...pending].map(/*#__PURE__*/function () {
1739
- var _ref18 = _asyncToGenerator(function* (ev) {
1740
- try {
1741
- yield ev.attemptDecryption(_this25.crypto);
1742
- } catch (_unused3) {
1743
- // don't die if something goes wrong
1744
- }
1745
- });
1746
- return function (_x4) {
1747
- return _ref18.apply(this, arguments);
1748
- };
1749
- }()));
1750
- });
1751
- return function (_x3) {
1752
- return _ref17.apply(this, arguments);
1753
- };
1754
- }()));
1755
- return !_this25.pendingEvents.has(senderKey);
1756
- })();
1757
- }
1758
- sendSharedHistoryInboundSessions(devicesByUser) {
1759
- var _this26 = this;
1760
- return _asyncToGenerator(function* () {
1761
- yield olmlib.ensureOlmSessionsForDevices(_this26.olmDevice, _this26.baseApis, devicesByUser);
1762
- var sharedHistorySessions = yield _this26.olmDevice.getSharedHistoryInboundGroupSessions(_this26.roomId);
1763
- _this26.prefixedLogger.debug("Sharing history in with users ".concat(Array.from(devicesByUser.keys())), sharedHistorySessions.map(_ref19 => {
1764
- var [senderKey, sessionId] = _ref19;
1765
- return "".concat(senderKey, "|").concat(sessionId);
1766
- }));
1767
- for (var [senderKey, _sessionId2] of sharedHistorySessions) {
1768
- var payload = yield _this26.buildKeyForwardingMessage(_this26.roomId, senderKey, _sessionId2);
1769
-
1770
- // FIXME: use encryptAndSendToDevices() rather than duplicating it here.
1771
- var promises = [];
1772
- var contentMap = new Map();
1773
- for (var [userId, devices] of devicesByUser) {
1774
- var deviceMessages = new Map();
1775
- contentMap.set(userId, deviceMessages);
1776
- for (var deviceInfo of devices) {
1777
- var encryptedContent = {
1778
- algorithm: olmlib.OLM_ALGORITHM,
1779
- sender_key: _this26.olmDevice.deviceCurve25519Key,
1780
- ciphertext: {},
1781
- [ToDeviceMessageId]: uuidv4()
1782
- };
1783
- deviceMessages.set(deviceInfo.deviceId, encryptedContent);
1784
- promises.push(olmlib.encryptMessageForDevice(encryptedContent.ciphertext, _this26.userId, undefined, _this26.olmDevice, userId, deviceInfo, payload));
1785
- }
1786
- }
1787
- yield Promise.all(promises);
1788
-
1789
- // prune out any devices that encryptMessageForDevice could not encrypt for,
1790
- // in which case it will have just not added anything to the ciphertext object.
1791
- // There's no point sending messages to devices if we couldn't encrypt to them,
1792
- // since that's effectively a blank message.
1793
- for (var [_userId5, _deviceMessages] of contentMap) {
1794
- for (var [deviceId, content] of _deviceMessages) {
1795
- if (!hasCiphertext(content)) {
1796
- _this26.prefixedLogger.debug("No ciphertext for device " + _userId5 + ":" + deviceId + ": pruning");
1797
- _deviceMessages.delete(deviceId);
1798
- }
1799
- }
1800
- // No devices left for that user? Strip that too.
1801
- if (_deviceMessages.size === 0) {
1802
- _this26.prefixedLogger.debug("Pruned all devices for user " + _userId5);
1803
- contentMap.delete(_userId5);
1804
- }
1805
- }
1806
-
1807
- // Is there anything left?
1808
- if (contentMap.size === 0) {
1809
- _this26.prefixedLogger.debug("No users left to send to: aborting");
1810
- return;
1811
- }
1812
- yield _this26.baseApis.sendToDevice("m.room.encrypted", contentMap);
1813
- }
1814
- })();
1815
- }
1816
- }
1817
- var PROBLEM_DESCRIPTIONS = {
1818
- no_olm: "The sender was unable to establish a secure channel.",
1819
- unknown: "The secure channel with the sender was corrupted."
1820
- };
1821
- registerAlgorithm(olmlib.MEGOLM_ALGORITHM, MegolmEncryption, MegolmDecryption);
1822
- //# sourceMappingURL=megolm.js.map