@unwanted/matrix-sdk-mini 34.12.0-2 → 34.12.0-4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (492) hide show
  1. package/git-revision.txt +1 -1
  2. package/lib/@types/global.d.js +0 -2
  3. package/lib/@types/global.d.js.map +1 -1
  4. package/lib/browser-index.d.ts.map +1 -1
  5. package/lib/browser-index.js +0 -11
  6. package/lib/browser-index.js.map +1 -1
  7. package/lib/client.d.ts +2 -1221
  8. package/lib/client.d.ts.map +1 -1
  9. package/lib/client.js +331 -2821
  10. package/lib/client.js.map +1 -1
  11. package/lib/embedded.d.ts +0 -22
  12. package/lib/embedded.d.ts.map +1 -1
  13. package/lib/embedded.js +24 -166
  14. package/lib/embedded.js.map +1 -1
  15. package/lib/event-mapper.d.ts.map +1 -1
  16. package/lib/event-mapper.js +0 -4
  17. package/lib/event-mapper.js.map +1 -1
  18. package/lib/matrix.d.ts +0 -19
  19. package/lib/matrix.d.ts.map +1 -1
  20. package/lib/matrix.js +1 -26
  21. package/lib/matrix.js.map +1 -1
  22. package/lib/models/MSC3089Branch.d.ts.map +1 -1
  23. package/lib/models/MSC3089Branch.js +0 -3
  24. package/lib/models/MSC3089Branch.js.map +1 -1
  25. package/lib/models/event.d.ts +0 -94
  26. package/lib/models/event.d.ts.map +1 -1
  27. package/lib/models/event.js +0 -274
  28. package/lib/models/event.js.map +1 -1
  29. package/lib/models/poll.d.ts.map +1 -1
  30. package/lib/models/poll.js +1 -5
  31. package/lib/models/poll.js.map +1 -1
  32. package/lib/models/relations-container.d.ts.map +1 -1
  33. package/lib/models/relations-container.js +1 -7
  34. package/lib/models/relations-container.js.map +1 -1
  35. package/lib/models/relations.d.ts +0 -1
  36. package/lib/models/relations.d.ts.map +1 -1
  37. package/lib/models/relations.js +0 -8
  38. package/lib/models/relations.js.map +1 -1
  39. package/lib/models/room-state.d.ts.map +1 -1
  40. package/lib/models/room-state.js +10 -26
  41. package/lib/models/room-state.js.map +1 -1
  42. package/lib/models/room.d.ts +0 -18
  43. package/lib/models/room.d.ts.map +1 -1
  44. package/lib/models/room.js +94 -148
  45. package/lib/models/room.js.map +1 -1
  46. package/lib/models/thread.d.ts.map +1 -1
  47. package/lib/models/thread.js +0 -1
  48. package/lib/models/thread.js.map +1 -1
  49. package/lib/sliding-sync-sdk.d.ts +2 -3
  50. package/lib/sliding-sync-sdk.d.ts.map +1 -1
  51. package/lib/sliding-sync-sdk.js +41 -90
  52. package/lib/sliding-sync-sdk.js.map +1 -1
  53. package/lib/sync.d.ts +0 -12
  54. package/lib/sync.d.ts.map +1 -1
  55. package/lib/sync.js +1 -73
  56. package/lib/sync.js.map +1 -1
  57. package/lib/testing.d.ts +0 -48
  58. package/lib/testing.d.ts.map +1 -1
  59. package/lib/testing.js +0 -105
  60. package/lib/testing.js.map +1 -1
  61. package/lib/types.d.ts +0 -1
  62. package/lib/types.d.ts.map +1 -1
  63. package/lib/types.js.map +1 -1
  64. package/package.json +1 -3
  65. package/src/@types/global.d.ts +0 -3
  66. package/src/browser-index.ts +0 -11
  67. package/src/client.ts +60 -2882
  68. package/src/embedded.ts +3 -130
  69. package/src/event-mapper.ts +0 -4
  70. package/src/matrix.ts +0 -28
  71. package/src/models/MSC3089Branch.ts +0 -3
  72. package/src/models/event.ts +0 -289
  73. package/src/models/poll.ts +0 -6
  74. package/src/models/relations-container.ts +1 -8
  75. package/src/models/relations.ts +0 -8
  76. package/src/models/room-state.ts +2 -8
  77. package/src/models/room.ts +0 -62
  78. package/src/models/thread.ts +0 -1
  79. package/src/sliding-sync-sdk.ts +2 -72
  80. package/src/sync.ts +1 -98
  81. package/src/testing.ts +0 -108
  82. package/src/types.ts +0 -1
  83. package/CHANGELOG.md +0 -5910
  84. package/lib/@types/AESEncryptedSecretStoragePayload.d.ts +0 -14
  85. package/lib/@types/AESEncryptedSecretStoragePayload.d.ts.map +0 -1
  86. package/lib/@types/AESEncryptedSecretStoragePayload.js +0 -1
  87. package/lib/@types/AESEncryptedSecretStoragePayload.js.map +0 -1
  88. package/lib/@types/crypto.d.ts +0 -47
  89. package/lib/@types/crypto.d.ts.map +0 -1
  90. package/lib/@types/crypto.js +0 -1
  91. package/lib/@types/crypto.js.map +0 -1
  92. package/lib/@types/matrix-sdk-crypto-wasm.d.js +0 -1
  93. package/lib/@types/matrix-sdk-crypto-wasm.d.js.map +0 -1
  94. package/lib/common-crypto/CryptoBackend.d.ts +0 -240
  95. package/lib/common-crypto/CryptoBackend.d.ts.map +0 -1
  96. package/lib/common-crypto/CryptoBackend.js +0 -73
  97. package/lib/common-crypto/CryptoBackend.js.map +0 -1
  98. package/lib/common-crypto/key-passphrase.d.ts +0 -14
  99. package/lib/common-crypto/key-passphrase.d.ts.map +0 -1
  100. package/lib/common-crypto/key-passphrase.js +0 -33
  101. package/lib/common-crypto/key-passphrase.js.map +0 -1
  102. package/lib/crypto/CrossSigning.d.ts +0 -184
  103. package/lib/crypto/CrossSigning.d.ts.map +0 -1
  104. package/lib/crypto/CrossSigning.js +0 -718
  105. package/lib/crypto/CrossSigning.js.map +0 -1
  106. package/lib/crypto/DeviceList.d.ts +0 -216
  107. package/lib/crypto/DeviceList.d.ts.map +0 -1
  108. package/lib/crypto/DeviceList.js +0 -892
  109. package/lib/crypto/DeviceList.js.map +0 -1
  110. package/lib/crypto/EncryptionSetup.d.ts +0 -152
  111. package/lib/crypto/EncryptionSetup.d.ts.map +0 -1
  112. package/lib/crypto/EncryptionSetup.js +0 -356
  113. package/lib/crypto/EncryptionSetup.js.map +0 -1
  114. package/lib/crypto/OlmDevice.d.ts +0 -457
  115. package/lib/crypto/OlmDevice.d.ts.map +0 -1
  116. package/lib/crypto/OlmDevice.js +0 -1241
  117. package/lib/crypto/OlmDevice.js.map +0 -1
  118. package/lib/crypto/OutgoingRoomKeyRequestManager.d.ts +0 -109
  119. package/lib/crypto/OutgoingRoomKeyRequestManager.d.ts.map +0 -1
  120. package/lib/crypto/OutgoingRoomKeyRequestManager.js +0 -415
  121. package/lib/crypto/OutgoingRoomKeyRequestManager.js.map +0 -1
  122. package/lib/crypto/RoomList.d.ts +0 -26
  123. package/lib/crypto/RoomList.d.ts.map +0 -1
  124. package/lib/crypto/RoomList.js +0 -71
  125. package/lib/crypto/RoomList.js.map +0 -1
  126. package/lib/crypto/SecretSharing.d.ts +0 -24
  127. package/lib/crypto/SecretSharing.d.ts.map +0 -1
  128. package/lib/crypto/SecretSharing.js +0 -194
  129. package/lib/crypto/SecretSharing.js.map +0 -1
  130. package/lib/crypto/SecretStorage.d.ts +0 -55
  131. package/lib/crypto/SecretStorage.d.ts.map +0 -1
  132. package/lib/crypto/SecretStorage.js +0 -118
  133. package/lib/crypto/SecretStorage.js.map +0 -1
  134. package/lib/crypto/aes.d.ts +0 -6
  135. package/lib/crypto/aes.d.ts.map +0 -1
  136. package/lib/crypto/aes.js +0 -24
  137. package/lib/crypto/aes.js.map +0 -1
  138. package/lib/crypto/algorithms/base.d.ts +0 -156
  139. package/lib/crypto/algorithms/base.d.ts.map +0 -1
  140. package/lib/crypto/algorithms/base.js +0 -187
  141. package/lib/crypto/algorithms/base.js.map +0 -1
  142. package/lib/crypto/algorithms/index.d.ts +0 -4
  143. package/lib/crypto/algorithms/index.d.ts.map +0 -1
  144. package/lib/crypto/algorithms/index.js +0 -20
  145. package/lib/crypto/algorithms/index.js.map +0 -1
  146. package/lib/crypto/algorithms/megolm.d.ts +0 -385
  147. package/lib/crypto/algorithms/megolm.d.ts.map +0 -1
  148. package/lib/crypto/algorithms/megolm.js +0 -1822
  149. package/lib/crypto/algorithms/megolm.js.map +0 -1
  150. package/lib/crypto/algorithms/olm.d.ts +0 -5
  151. package/lib/crypto/algorithms/olm.d.ts.map +0 -1
  152. package/lib/crypto/algorithms/olm.js +0 -299
  153. package/lib/crypto/algorithms/olm.js.map +0 -1
  154. package/lib/crypto/api.d.ts +0 -32
  155. package/lib/crypto/api.d.ts.map +0 -1
  156. package/lib/crypto/api.js +0 -22
  157. package/lib/crypto/api.js.map +0 -1
  158. package/lib/crypto/backup.d.ts +0 -227
  159. package/lib/crypto/backup.d.ts.map +0 -1
  160. package/lib/crypto/backup.js +0 -824
  161. package/lib/crypto/backup.js.map +0 -1
  162. package/lib/crypto/crypto.d.ts +0 -3
  163. package/lib/crypto/crypto.d.ts.map +0 -1
  164. package/lib/crypto/crypto.js +0 -19
  165. package/lib/crypto/crypto.js.map +0 -1
  166. package/lib/crypto/dehydration.d.ts +0 -34
  167. package/lib/crypto/dehydration.d.ts.map +0 -1
  168. package/lib/crypto/dehydration.js +0 -252
  169. package/lib/crypto/dehydration.js.map +0 -1
  170. package/lib/crypto/device-converter.d.ts +0 -9
  171. package/lib/crypto/device-converter.d.ts.map +0 -1
  172. package/lib/crypto/device-converter.js +0 -42
  173. package/lib/crypto/device-converter.js.map +0 -1
  174. package/lib/crypto/deviceinfo.d.ts +0 -99
  175. package/lib/crypto/deviceinfo.d.ts.map +0 -1
  176. package/lib/crypto/deviceinfo.js +0 -148
  177. package/lib/crypto/deviceinfo.js.map +0 -1
  178. package/lib/crypto/index.d.ts +0 -1209
  179. package/lib/crypto/index.d.ts.map +0 -1
  180. package/lib/crypto/index.js +0 -4097
  181. package/lib/crypto/index.js.map +0 -1
  182. package/lib/crypto/key_passphrase.d.ts +0 -14
  183. package/lib/crypto/key_passphrase.d.ts.map +0 -1
  184. package/lib/crypto/key_passphrase.js +0 -44
  185. package/lib/crypto/key_passphrase.js.map +0 -1
  186. package/lib/crypto/keybackup.d.ts +0 -18
  187. package/lib/crypto/keybackup.d.ts.map +0 -1
  188. package/lib/crypto/keybackup.js +0 -1
  189. package/lib/crypto/keybackup.js.map +0 -1
  190. package/lib/crypto/olmlib.d.ts +0 -129
  191. package/lib/crypto/olmlib.d.ts.map +0 -1
  192. package/lib/crypto/olmlib.js +0 -492
  193. package/lib/crypto/olmlib.js.map +0 -1
  194. package/lib/crypto/recoverykey.d.ts +0 -2
  195. package/lib/crypto/recoverykey.d.ts.map +0 -1
  196. package/lib/crypto/recoverykey.js +0 -19
  197. package/lib/crypto/recoverykey.js.map +0 -1
  198. package/lib/crypto/store/base.d.ts +0 -252
  199. package/lib/crypto/store/base.d.ts.map +0 -1
  200. package/lib/crypto/store/base.js +0 -64
  201. package/lib/crypto/store/base.js.map +0 -1
  202. package/lib/crypto/store/indexeddb-crypto-store-backend.d.ts +0 -187
  203. package/lib/crypto/store/indexeddb-crypto-store-backend.d.ts.map +0 -1
  204. package/lib/crypto/store/indexeddb-crypto-store-backend.js +0 -1145
  205. package/lib/crypto/store/indexeddb-crypto-store-backend.js.map +0 -1
  206. package/lib/crypto/store/indexeddb-crypto-store.d.ts +0 -432
  207. package/lib/crypto/store/indexeddb-crypto-store.d.ts.map +0 -1
  208. package/lib/crypto/store/indexeddb-crypto-store.js +0 -728
  209. package/lib/crypto/store/indexeddb-crypto-store.js.map +0 -1
  210. package/lib/crypto/store/localStorage-crypto-store.d.ts +0 -119
  211. package/lib/crypto/store/localStorage-crypto-store.d.ts.map +0 -1
  212. package/lib/crypto/store/localStorage-crypto-store.js +0 -531
  213. package/lib/crypto/store/localStorage-crypto-store.js.map +0 -1
  214. package/lib/crypto/store/memory-crypto-store.d.ts +0 -215
  215. package/lib/crypto/store/memory-crypto-store.d.ts.map +0 -1
  216. package/lib/crypto/store/memory-crypto-store.js +0 -622
  217. package/lib/crypto/store/memory-crypto-store.js.map +0 -1
  218. package/lib/crypto/verification/Base.d.ts +0 -105
  219. package/lib/crypto/verification/Base.d.ts.map +0 -1
  220. package/lib/crypto/verification/Base.js +0 -372
  221. package/lib/crypto/verification/Base.js.map +0 -1
  222. package/lib/crypto/verification/Error.d.ts +0 -35
  223. package/lib/crypto/verification/Error.d.ts.map +0 -1
  224. package/lib/crypto/verification/Error.js +0 -86
  225. package/lib/crypto/verification/Error.js.map +0 -1
  226. package/lib/crypto/verification/IllegalMethod.d.ts +0 -15
  227. package/lib/crypto/verification/IllegalMethod.d.ts.map +0 -1
  228. package/lib/crypto/verification/IllegalMethod.js +0 -43
  229. package/lib/crypto/verification/IllegalMethod.js.map +0 -1
  230. package/lib/crypto/verification/QRCode.d.ts +0 -51
  231. package/lib/crypto/verification/QRCode.d.ts.map +0 -1
  232. package/lib/crypto/verification/QRCode.js +0 -277
  233. package/lib/crypto/verification/QRCode.js.map +0 -1
  234. package/lib/crypto/verification/SAS.d.ts +0 -27
  235. package/lib/crypto/verification/SAS.d.ts.map +0 -1
  236. package/lib/crypto/verification/SAS.js +0 -485
  237. package/lib/crypto/verification/SAS.js.map +0 -1
  238. package/lib/crypto/verification/SASDecimal.d.ts +0 -8
  239. package/lib/crypto/verification/SASDecimal.d.ts.map +0 -1
  240. package/lib/crypto/verification/SASDecimal.js +0 -34
  241. package/lib/crypto/verification/SASDecimal.js.map +0 -1
  242. package/lib/crypto/verification/request/Channel.d.ts +0 -18
  243. package/lib/crypto/verification/request/Channel.d.ts.map +0 -1
  244. package/lib/crypto/verification/request/Channel.js +0 -1
  245. package/lib/crypto/verification/request/Channel.js.map +0 -1
  246. package/lib/crypto/verification/request/InRoomChannel.d.ts +0 -113
  247. package/lib/crypto/verification/request/InRoomChannel.d.ts.map +0 -1
  248. package/lib/crypto/verification/request/InRoomChannel.js +0 -351
  249. package/lib/crypto/verification/request/InRoomChannel.js.map +0 -1
  250. package/lib/crypto/verification/request/ToDeviceChannel.d.ts +0 -105
  251. package/lib/crypto/verification/request/ToDeviceChannel.d.ts.map +0 -1
  252. package/lib/crypto/verification/request/ToDeviceChannel.js +0 -328
  253. package/lib/crypto/verification/request/ToDeviceChannel.js.map +0 -1
  254. package/lib/crypto/verification/request/VerificationRequest.d.ts +0 -227
  255. package/lib/crypto/verification/request/VerificationRequest.d.ts.map +0 -1
  256. package/lib/crypto/verification/request/VerificationRequest.js +0 -937
  257. package/lib/crypto/verification/request/VerificationRequest.js.map +0 -1
  258. package/lib/crypto-api/CryptoEvent.d.ts +0 -69
  259. package/lib/crypto-api/CryptoEvent.d.ts.map +0 -1
  260. package/lib/crypto-api/CryptoEvent.js +0 -33
  261. package/lib/crypto-api/CryptoEvent.js.map +0 -1
  262. package/lib/crypto-api/CryptoEventHandlerMap.d.ts +0 -16
  263. package/lib/crypto-api/CryptoEventHandlerMap.d.ts.map +0 -1
  264. package/lib/crypto-api/CryptoEventHandlerMap.js +0 -22
  265. package/lib/crypto-api/CryptoEventHandlerMap.js.map +0 -1
  266. package/lib/crypto-api/index.d.ts +0 -978
  267. package/lib/crypto-api/index.d.ts.map +0 -1
  268. package/lib/crypto-api/index.js +0 -304
  269. package/lib/crypto-api/index.js.map +0 -1
  270. package/lib/crypto-api/key-passphrase.d.ts +0 -11
  271. package/lib/crypto-api/key-passphrase.d.ts.map +0 -1
  272. package/lib/crypto-api/key-passphrase.js +0 -51
  273. package/lib/crypto-api/key-passphrase.js.map +0 -1
  274. package/lib/crypto-api/keybackup.d.ts +0 -88
  275. package/lib/crypto-api/keybackup.d.ts.map +0 -1
  276. package/lib/crypto-api/keybackup.js +0 -1
  277. package/lib/crypto-api/keybackup.js.map +0 -1
  278. package/lib/crypto-api/recovery-key.d.ts +0 -11
  279. package/lib/crypto-api/recovery-key.d.ts.map +0 -1
  280. package/lib/crypto-api/recovery-key.js +0 -65
  281. package/lib/crypto-api/recovery-key.js.map +0 -1
  282. package/lib/crypto-api/verification.d.ts +0 -344
  283. package/lib/crypto-api/verification.d.ts.map +0 -1
  284. package/lib/crypto-api/verification.js +0 -91
  285. package/lib/crypto-api/verification.js.map +0 -1
  286. package/lib/rendezvous/MSC4108SignInWithQR.d.ts +0 -112
  287. package/lib/rendezvous/MSC4108SignInWithQR.d.ts.map +0 -1
  288. package/lib/rendezvous/MSC4108SignInWithQR.js +0 -392
  289. package/lib/rendezvous/MSC4108SignInWithQR.js.map +0 -1
  290. package/lib/rendezvous/RendezvousChannel.d.ts +0 -27
  291. package/lib/rendezvous/RendezvousChannel.d.ts.map +0 -1
  292. package/lib/rendezvous/RendezvousChannel.js +0 -1
  293. package/lib/rendezvous/RendezvousChannel.js.map +0 -1
  294. package/lib/rendezvous/RendezvousCode.d.ts +0 -9
  295. package/lib/rendezvous/RendezvousCode.d.ts.map +0 -1
  296. package/lib/rendezvous/RendezvousCode.js +0 -1
  297. package/lib/rendezvous/RendezvousCode.js.map +0 -1
  298. package/lib/rendezvous/RendezvousError.d.ts +0 -6
  299. package/lib/rendezvous/RendezvousError.d.ts.map +0 -1
  300. package/lib/rendezvous/RendezvousError.js +0 -23
  301. package/lib/rendezvous/RendezvousError.js.map +0 -1
  302. package/lib/rendezvous/RendezvousFailureReason.d.ts +0 -31
  303. package/lib/rendezvous/RendezvousFailureReason.d.ts.map +0 -1
  304. package/lib/rendezvous/RendezvousFailureReason.js +0 -38
  305. package/lib/rendezvous/RendezvousFailureReason.js.map +0 -1
  306. package/lib/rendezvous/RendezvousIntent.d.ts +0 -5
  307. package/lib/rendezvous/RendezvousIntent.d.ts.map +0 -1
  308. package/lib/rendezvous/RendezvousIntent.js +0 -22
  309. package/lib/rendezvous/RendezvousIntent.js.map +0 -1
  310. package/lib/rendezvous/RendezvousTransport.d.ts +0 -36
  311. package/lib/rendezvous/RendezvousTransport.d.ts.map +0 -1
  312. package/lib/rendezvous/RendezvousTransport.js +0 -1
  313. package/lib/rendezvous/RendezvousTransport.js.map +0 -1
  314. package/lib/rendezvous/channels/MSC4108SecureChannel.d.ts +0 -58
  315. package/lib/rendezvous/channels/MSC4108SecureChannel.d.ts.map +0 -1
  316. package/lib/rendezvous/channels/MSC4108SecureChannel.js +0 -246
  317. package/lib/rendezvous/channels/MSC4108SecureChannel.js.map +0 -1
  318. package/lib/rendezvous/channels/index.d.ts +0 -2
  319. package/lib/rendezvous/channels/index.d.ts.map +0 -1
  320. package/lib/rendezvous/channels/index.js +0 -18
  321. package/lib/rendezvous/channels/index.js.map +0 -1
  322. package/lib/rendezvous/index.d.ts +0 -10
  323. package/lib/rendezvous/index.d.ts.map +0 -1
  324. package/lib/rendezvous/index.js +0 -23
  325. package/lib/rendezvous/index.js.map +0 -1
  326. package/lib/rendezvous/transports/MSC4108RendezvousSession.d.ts +0 -61
  327. package/lib/rendezvous/transports/MSC4108RendezvousSession.d.ts.map +0 -1
  328. package/lib/rendezvous/transports/MSC4108RendezvousSession.js +0 -253
  329. package/lib/rendezvous/transports/MSC4108RendezvousSession.js.map +0 -1
  330. package/lib/rendezvous/transports/index.d.ts +0 -2
  331. package/lib/rendezvous/transports/index.d.ts.map +0 -1
  332. package/lib/rendezvous/transports/index.js +0 -18
  333. package/lib/rendezvous/transports/index.js.map +0 -1
  334. package/lib/rust-crypto/CrossSigningIdentity.d.ts +0 -33
  335. package/lib/rust-crypto/CrossSigningIdentity.d.ts.map +0 -1
  336. package/lib/rust-crypto/CrossSigningIdentity.js +0 -157
  337. package/lib/rust-crypto/CrossSigningIdentity.js.map +0 -1
  338. package/lib/rust-crypto/DehydratedDeviceManager.d.ts +0 -98
  339. package/lib/rust-crypto/DehydratedDeviceManager.d.ts.map +0 -1
  340. package/lib/rust-crypto/DehydratedDeviceManager.js +0 -285
  341. package/lib/rust-crypto/DehydratedDeviceManager.js.map +0 -1
  342. package/lib/rust-crypto/KeyClaimManager.d.ts +0 -33
  343. package/lib/rust-crypto/KeyClaimManager.d.ts.map +0 -1
  344. package/lib/rust-crypto/KeyClaimManager.js +0 -82
  345. package/lib/rust-crypto/KeyClaimManager.js.map +0 -1
  346. package/lib/rust-crypto/OutgoingRequestProcessor.d.ts +0 -43
  347. package/lib/rust-crypto/OutgoingRequestProcessor.d.ts.map +0 -1
  348. package/lib/rust-crypto/OutgoingRequestProcessor.js +0 -195
  349. package/lib/rust-crypto/OutgoingRequestProcessor.js.map +0 -1
  350. package/lib/rust-crypto/OutgoingRequestsManager.d.ts +0 -47
  351. package/lib/rust-crypto/OutgoingRequestsManager.d.ts.map +0 -1
  352. package/lib/rust-crypto/OutgoingRequestsManager.js +0 -148
  353. package/lib/rust-crypto/OutgoingRequestsManager.js.map +0 -1
  354. package/lib/rust-crypto/PerSessionKeyBackupDownloader.d.ts +0 -120
  355. package/lib/rust-crypto/PerSessionKeyBackupDownloader.d.ts.map +0 -1
  356. package/lib/rust-crypto/PerSessionKeyBackupDownloader.js +0 -467
  357. package/lib/rust-crypto/PerSessionKeyBackupDownloader.js.map +0 -1
  358. package/lib/rust-crypto/RoomEncryptor.d.ts +0 -98
  359. package/lib/rust-crypto/RoomEncryptor.d.ts.map +0 -1
  360. package/lib/rust-crypto/RoomEncryptor.js +0 -299
  361. package/lib/rust-crypto/RoomEncryptor.js.map +0 -1
  362. package/lib/rust-crypto/backup.d.ts +0 -254
  363. package/lib/rust-crypto/backup.d.ts.map +0 -1
  364. package/lib/rust-crypto/backup.js +0 -837
  365. package/lib/rust-crypto/backup.js.map +0 -1
  366. package/lib/rust-crypto/constants.d.ts +0 -3
  367. package/lib/rust-crypto/constants.d.ts.map +0 -1
  368. package/lib/rust-crypto/constants.js +0 -19
  369. package/lib/rust-crypto/constants.js.map +0 -1
  370. package/lib/rust-crypto/device-converter.d.ts +0 -28
  371. package/lib/rust-crypto/device-converter.d.ts.map +0 -1
  372. package/lib/rust-crypto/device-converter.js +0 -123
  373. package/lib/rust-crypto/device-converter.js.map +0 -1
  374. package/lib/rust-crypto/index.d.ts +0 -61
  375. package/lib/rust-crypto/index.d.ts.map +0 -1
  376. package/lib/rust-crypto/index.js +0 -152
  377. package/lib/rust-crypto/index.js.map +0 -1
  378. package/lib/rust-crypto/libolm_migration.d.ts +0 -81
  379. package/lib/rust-crypto/libolm_migration.d.ts.map +0 -1
  380. package/lib/rust-crypto/libolm_migration.js +0 -459
  381. package/lib/rust-crypto/libolm_migration.js.map +0 -1
  382. package/lib/rust-crypto/rust-crypto.d.ts +0 -556
  383. package/lib/rust-crypto/rust-crypto.d.ts.map +0 -1
  384. package/lib/rust-crypto/rust-crypto.js +0 -2016
  385. package/lib/rust-crypto/rust-crypto.js.map +0 -1
  386. package/lib/rust-crypto/secret-storage.d.ts +0 -22
  387. package/lib/rust-crypto/secret-storage.d.ts.map +0 -1
  388. package/lib/rust-crypto/secret-storage.js +0 -63
  389. package/lib/rust-crypto/secret-storage.js.map +0 -1
  390. package/lib/rust-crypto/verification.d.ts +0 -319
  391. package/lib/rust-crypto/verification.d.ts.map +0 -1
  392. package/lib/rust-crypto/verification.js +0 -816
  393. package/lib/rust-crypto/verification.js.map +0 -1
  394. package/lib/secret-storage.d.ts +0 -370
  395. package/lib/secret-storage.d.ts.map +0 -1
  396. package/lib/secret-storage.js +0 -466
  397. package/lib/secret-storage.js.map +0 -1
  398. package/lib/utils/decryptAESSecretStorageItem.d.ts +0 -12
  399. package/lib/utils/decryptAESSecretStorageItem.d.ts.map +0 -1
  400. package/lib/utils/decryptAESSecretStorageItem.js +0 -50
  401. package/lib/utils/decryptAESSecretStorageItem.js.map +0 -1
  402. package/lib/utils/encryptAESSecretStorageItem.d.ts +0 -16
  403. package/lib/utils/encryptAESSecretStorageItem.d.ts.map +0 -1
  404. package/lib/utils/encryptAESSecretStorageItem.js +0 -68
  405. package/lib/utils/encryptAESSecretStorageItem.js.map +0 -1
  406. package/lib/utils/internal/deriveKeys.d.ts +0 -10
  407. package/lib/utils/internal/deriveKeys.d.ts.map +0 -1
  408. package/lib/utils/internal/deriveKeys.js +0 -60
  409. package/lib/utils/internal/deriveKeys.js.map +0 -1
  410. package/src/@types/AESEncryptedSecretStoragePayload.ts +0 -29
  411. package/src/@types/crypto.ts +0 -73
  412. package/src/@types/matrix-sdk-crypto-wasm.d.ts +0 -44
  413. package/src/common-crypto/CryptoBackend.ts +0 -302
  414. package/src/common-crypto/README.md +0 -4
  415. package/src/common-crypto/key-passphrase.ts +0 -43
  416. package/src/crypto/CrossSigning.ts +0 -773
  417. package/src/crypto/DeviceList.ts +0 -989
  418. package/src/crypto/EncryptionSetup.ts +0 -351
  419. package/src/crypto/OlmDevice.ts +0 -1500
  420. package/src/crypto/OutgoingRoomKeyRequestManager.ts +0 -485
  421. package/src/crypto/RoomList.ts +0 -70
  422. package/src/crypto/SecretSharing.ts +0 -240
  423. package/src/crypto/SecretStorage.ts +0 -136
  424. package/src/crypto/aes.ts +0 -23
  425. package/src/crypto/algorithms/base.ts +0 -236
  426. package/src/crypto/algorithms/index.ts +0 -20
  427. package/src/crypto/algorithms/megolm.ts +0 -2216
  428. package/src/crypto/algorithms/olm.ts +0 -381
  429. package/src/crypto/api.ts +0 -70
  430. package/src/crypto/backup.ts +0 -922
  431. package/src/crypto/crypto.ts +0 -18
  432. package/src/crypto/dehydration.ts +0 -272
  433. package/src/crypto/device-converter.ts +0 -45
  434. package/src/crypto/deviceinfo.ts +0 -158
  435. package/src/crypto/index.ts +0 -4414
  436. package/src/crypto/key_passphrase.ts +0 -42
  437. package/src/crypto/keybackup.ts +0 -47
  438. package/src/crypto/olmlib.ts +0 -539
  439. package/src/crypto/recoverykey.ts +0 -18
  440. package/src/crypto/store/base.ts +0 -348
  441. package/src/crypto/store/indexeddb-crypto-store-backend.ts +0 -1250
  442. package/src/crypto/store/indexeddb-crypto-store.ts +0 -845
  443. package/src/crypto/store/localStorage-crypto-store.ts +0 -579
  444. package/src/crypto/store/memory-crypto-store.ts +0 -680
  445. package/src/crypto/verification/Base.ts +0 -409
  446. package/src/crypto/verification/Error.ts +0 -76
  447. package/src/crypto/verification/IllegalMethod.ts +0 -50
  448. package/src/crypto/verification/QRCode.ts +0 -310
  449. package/src/crypto/verification/SAS.ts +0 -494
  450. package/src/crypto/verification/SASDecimal.ts +0 -37
  451. package/src/crypto/verification/request/Channel.ts +0 -34
  452. package/src/crypto/verification/request/InRoomChannel.ts +0 -371
  453. package/src/crypto/verification/request/ToDeviceChannel.ts +0 -354
  454. package/src/crypto/verification/request/VerificationRequest.ts +0 -976
  455. package/src/crypto-api/CryptoEvent.ts +0 -93
  456. package/src/crypto-api/CryptoEventHandlerMap.ts +0 -32
  457. package/src/crypto-api/index.ts +0 -1175
  458. package/src/crypto-api/key-passphrase.ts +0 -58
  459. package/src/crypto-api/keybackup.ts +0 -115
  460. package/src/crypto-api/recovery-key.ts +0 -69
  461. package/src/crypto-api/verification.ts +0 -408
  462. package/src/rendezvous/MSC4108SignInWithQR.ts +0 -444
  463. package/src/rendezvous/RendezvousChannel.ts +0 -48
  464. package/src/rendezvous/RendezvousCode.ts +0 -25
  465. package/src/rendezvous/RendezvousError.ts +0 -26
  466. package/src/rendezvous/RendezvousFailureReason.ts +0 -49
  467. package/src/rendezvous/RendezvousIntent.ts +0 -20
  468. package/src/rendezvous/RendezvousTransport.ts +0 -58
  469. package/src/rendezvous/channels/MSC4108SecureChannel.ts +0 -270
  470. package/src/rendezvous/channels/index.ts +0 -17
  471. package/src/rendezvous/index.ts +0 -25
  472. package/src/rendezvous/transports/MSC4108RendezvousSession.ts +0 -270
  473. package/src/rendezvous/transports/index.ts +0 -17
  474. package/src/rust-crypto/CrossSigningIdentity.ts +0 -183
  475. package/src/rust-crypto/DehydratedDeviceManager.ts +0 -306
  476. package/src/rust-crypto/KeyClaimManager.ts +0 -86
  477. package/src/rust-crypto/OutgoingRequestProcessor.ts +0 -236
  478. package/src/rust-crypto/OutgoingRequestsManager.ts +0 -143
  479. package/src/rust-crypto/PerSessionKeyBackupDownloader.ts +0 -501
  480. package/src/rust-crypto/RoomEncryptor.ts +0 -352
  481. package/src/rust-crypto/backup.ts +0 -881
  482. package/src/rust-crypto/constants.ts +0 -18
  483. package/src/rust-crypto/device-converter.ts +0 -128
  484. package/src/rust-crypto/index.ts +0 -237
  485. package/src/rust-crypto/libolm_migration.ts +0 -530
  486. package/src/rust-crypto/rust-crypto.ts +0 -2205
  487. package/src/rust-crypto/secret-storage.ts +0 -60
  488. package/src/rust-crypto/verification.ts +0 -830
  489. package/src/secret-storage.ts +0 -693
  490. package/src/utils/decryptAESSecretStorageItem.ts +0 -54
  491. package/src/utils/encryptAESSecretStorageItem.ts +0 -73
  492. package/src/utils/internal/deriveKeys.ts +0 -63
@@ -1,892 +0,0 @@
1
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
- /*
4
- Copyright 2017 - 2021 The Matrix.org Foundation C.I.C.
5
-
6
- Licensed under the Apache License, Version 2.0 (the "License");
7
- you may not use this file except in compliance with the License.
8
- You may obtain a copy of the License at
9
-
10
- http://www.apache.org/licenses/LICENSE-2.0
11
-
12
- Unless required by applicable law or agreed to in writing, software
13
- distributed under the License is distributed on an "AS IS" BASIS,
14
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- See the License for the specific language governing permissions and
16
- limitations under the License.
17
- */
18
-
19
- /**
20
- * Manages the list of other users' devices
21
- */
22
-
23
- import { logger } from "../logger.js";
24
- import { DeviceInfo } from "./deviceinfo.js";
25
- import { CrossSigningInfo } from "./CrossSigning.js";
26
- import * as olmlib from "./olmlib.js";
27
- import { IndexedDBCryptoStore } from "./store/indexeddb-crypto-store.js";
28
- import { chunkPromises, defer, sleep } from "../utils.js";
29
- import { TypedEventEmitter } from "../models/typed-event-emitter.js";
30
- import { CryptoEvent } from "./index.js";
31
-
32
- /* State transition diagram for DeviceList.deviceTrackingStatus
33
- *
34
- * |
35
- * stopTrackingDeviceList V
36
- * +---------------------> NOT_TRACKED
37
- * | |
38
- * +<--------------------+ | startTrackingDeviceList
39
- * | | V
40
- * | +-------------> PENDING_DOWNLOAD <--------------------+-+
41
- * | | ^ | | |
42
- * | | restart download | | start download | | invalidateUserDeviceList
43
- * | | client failed | | | |
44
- * | | | V | |
45
- * | +------------ DOWNLOAD_IN_PROGRESS -------------------+ |
46
- * | | | |
47
- * +<-------------------+ | download successful |
48
- * ^ V |
49
- * +----------------------- UP_TO_DATE ------------------------+
50
- */
51
-
52
- // constants for DeviceList.deviceTrackingStatus
53
- export var TrackingStatus = /*#__PURE__*/function (TrackingStatus) {
54
- TrackingStatus[TrackingStatus["NotTracked"] = 0] = "NotTracked";
55
- TrackingStatus[TrackingStatus["PendingDownload"] = 1] = "PendingDownload";
56
- TrackingStatus[TrackingStatus["DownloadInProgress"] = 2] = "DownloadInProgress";
57
- TrackingStatus[TrackingStatus["UpToDate"] = 3] = "UpToDate";
58
- return TrackingStatus;
59
- }({});
60
-
61
- // user-Id → device-Id → DeviceInfo
62
-
63
- export class DeviceList extends TypedEventEmitter {
64
- constructor(baseApis, cryptoStore, olmDevice) {
65
- var keyDownloadChunkSize = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 250;
66
- super();
67
- this.cryptoStore = cryptoStore;
68
- this.keyDownloadChunkSize = keyDownloadChunkSize;
69
- _defineProperty(this, "devices", {});
70
- _defineProperty(this, "crossSigningInfo", {});
71
- // map of identity keys to the user who owns it
72
- _defineProperty(this, "userByIdentityKey", {});
73
- // which users we are tracking device status for.
74
- _defineProperty(this, "deviceTrackingStatus", {});
75
- // loaded from storage in load()
76
- // The 'next_batch' sync token at the point the data was written,
77
- // ie. a token representing the point immediately after the
78
- // moment represented by the snapshot in the db.
79
- _defineProperty(this, "syncToken", null);
80
- _defineProperty(this, "keyDownloadsInProgressByUser", new Map());
81
- // Set whenever changes are made other than setting the sync token
82
- _defineProperty(this, "dirty", false);
83
- // Promise resolved when device data is saved
84
- _defineProperty(this, "savePromise", null);
85
- // Function that resolves the save promise
86
- _defineProperty(this, "resolveSavePromise", null);
87
- // The time the save is scheduled for
88
- _defineProperty(this, "savePromiseTime", null);
89
- // The timer used to delay the save
90
- _defineProperty(this, "saveTimer", null);
91
- // True if we have fetched data from the server or loaded a non-empty
92
- // set of device data from the store
93
- _defineProperty(this, "hasFetched", null);
94
- _defineProperty(this, "serialiser", void 0);
95
- this.serialiser = new DeviceListUpdateSerialiser(baseApis, olmDevice, this);
96
- }
97
-
98
- /**
99
- * Load the device tracking state from storage
100
- */
101
- load() {
102
- var _this = this;
103
- return _asyncToGenerator(function* () {
104
- yield _this.cryptoStore.doTxn("readonly", [IndexedDBCryptoStore.STORE_DEVICE_DATA], txn => {
105
- _this.cryptoStore.getEndToEndDeviceData(txn, deviceData => {
106
- var _deviceData$syncToken;
107
- _this.hasFetched = Boolean(deviceData === null || deviceData === void 0 ? void 0 : deviceData.devices);
108
- _this.devices = deviceData ? deviceData.devices : {};
109
- _this.crossSigningInfo = deviceData ? deviceData.crossSigningInfo || {} : {};
110
- _this.deviceTrackingStatus = deviceData ? deviceData.trackingStatus : {};
111
- _this.syncToken = (_deviceData$syncToken = deviceData === null || deviceData === void 0 ? void 0 : deviceData.syncToken) !== null && _deviceData$syncToken !== void 0 ? _deviceData$syncToken : null;
112
- _this.userByIdentityKey = {};
113
- for (var user of Object.keys(_this.devices)) {
114
- var userDevices = _this.devices[user];
115
- for (var device of Object.keys(userDevices)) {
116
- var idKey = userDevices[device].keys["curve25519:" + device];
117
- if (idKey !== undefined) {
118
- _this.userByIdentityKey[idKey] = user;
119
- }
120
- }
121
- }
122
- });
123
- });
124
- for (var u of Object.keys(_this.deviceTrackingStatus)) {
125
- // if a download was in progress when we got shut down, it isn't any more.
126
- if (_this.deviceTrackingStatus[u] == TrackingStatus.DownloadInProgress) {
127
- _this.deviceTrackingStatus[u] = TrackingStatus.PendingDownload;
128
- }
129
- }
130
- })();
131
- }
132
- stop() {
133
- if (this.saveTimer !== null) {
134
- clearTimeout(this.saveTimer);
135
- }
136
- }
137
-
138
- /**
139
- * Save the device tracking state to storage, if any changes are
140
- * pending other than updating the sync token
141
- *
142
- * The actual save will be delayed by a short amount of time to
143
- * aggregate multiple writes to the database.
144
- *
145
- * @param delay - Time in ms before which the save actually happens.
146
- * By default, the save is delayed for a short period in order to batch
147
- * multiple writes, but this behaviour can be disabled by passing 0.
148
- *
149
- * @returns true if the data was saved, false if
150
- * it was not (eg. because no changes were pending). The promise
151
- * will only resolve once the data is saved, so may take some time
152
- * to resolve.
153
- */
154
- saveIfDirty() {
155
- var _arguments = arguments,
156
- _this2 = this;
157
- return _asyncToGenerator(function* () {
158
- var delay = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : 500;
159
- if (!_this2.dirty) return Promise.resolve(false);
160
- // Delay saves for a bit so we can aggregate multiple saves that happen
161
- // in quick succession (eg. when a whole room's devices are marked as known)
162
-
163
- var targetTime = Date.now() + delay;
164
- if (_this2.savePromiseTime && targetTime < _this2.savePromiseTime) {
165
- // There's a save scheduled but for after we would like: cancel
166
- // it & schedule one for the time we want
167
- clearTimeout(_this2.saveTimer);
168
- _this2.saveTimer = null;
169
- _this2.savePromiseTime = null;
170
- // (but keep the save promise since whatever called save before
171
- // will still want to know when the save is done)
172
- }
173
- var savePromise = _this2.savePromise;
174
- if (savePromise === null) {
175
- savePromise = new Promise(resolve => {
176
- _this2.resolveSavePromise = resolve;
177
- });
178
- _this2.savePromise = savePromise;
179
- }
180
- if (_this2.saveTimer === null) {
181
- var resolveSavePromise = _this2.resolveSavePromise;
182
- _this2.savePromiseTime = targetTime;
183
- _this2.saveTimer = setTimeout(() => {
184
- logger.log("Saving device tracking data", _this2.syncToken);
185
-
186
- // null out savePromise now (after the delay but before the write),
187
- // otherwise we could return the existing promise when the save has
188
- // actually already happened.
189
- _this2.savePromiseTime = null;
190
- _this2.saveTimer = null;
191
- _this2.savePromise = null;
192
- _this2.resolveSavePromise = null;
193
- _this2.cryptoStore.doTxn("readwrite", [IndexedDBCryptoStore.STORE_DEVICE_DATA], txn => {
194
- var _this2$syncToken;
195
- _this2.cryptoStore.storeEndToEndDeviceData({
196
- devices: _this2.devices,
197
- crossSigningInfo: _this2.crossSigningInfo,
198
- trackingStatus: _this2.deviceTrackingStatus,
199
- syncToken: (_this2$syncToken = _this2.syncToken) !== null && _this2$syncToken !== void 0 ? _this2$syncToken : undefined
200
- }, txn);
201
- }).then(() => {
202
- // The device list is considered dirty until the write completes.
203
- _this2.dirty = false;
204
- resolveSavePromise === null || resolveSavePromise === void 0 || resolveSavePromise(true);
205
- }, err => {
206
- logger.error("Failed to save device tracking data", _this2.syncToken);
207
- logger.error(err);
208
- });
209
- }, delay);
210
- }
211
- return savePromise;
212
- })();
213
- }
214
-
215
- /**
216
- * Gets the sync token last set with setSyncToken
217
- *
218
- * @returns The sync token
219
- */
220
- getSyncToken() {
221
- return this.syncToken;
222
- }
223
-
224
- /**
225
- * Sets the sync token that the app will pass as the 'since' to the /sync
226
- * endpoint next time it syncs.
227
- * The sync token must always be set after any changes made as a result of
228
- * data in that sync since setting the sync token to a newer one will mean
229
- * those changed will not be synced from the server if a new client starts
230
- * up with that data.
231
- *
232
- * @param st - The sync token
233
- */
234
- setSyncToken(st) {
235
- this.syncToken = st;
236
- }
237
-
238
- /**
239
- * Ensures up to date keys for a list of users are stored in the session store,
240
- * downloading and storing them if they're not (or if forceDownload is
241
- * true).
242
- * @param userIds - The users to fetch.
243
- * @param forceDownload - Always download the keys even if cached.
244
- *
245
- * @returns A promise which resolves to a map userId-\>deviceId-\>{@link DeviceInfo}.
246
- */
247
- downloadKeys(userIds, forceDownload) {
248
- var usersToDownload = [];
249
- var promises = [];
250
- userIds.forEach(u => {
251
- var trackingStatus = this.deviceTrackingStatus[u];
252
- if (this.keyDownloadsInProgressByUser.has(u)) {
253
- // already a key download in progress/queued for this user; its results
254
- // will be good enough for us.
255
- logger.log("downloadKeys: already have a download in progress for " + "".concat(u, ": awaiting its result"));
256
- promises.push(this.keyDownloadsInProgressByUser.get(u));
257
- } else if (forceDownload || trackingStatus != TrackingStatus.UpToDate) {
258
- usersToDownload.push(u);
259
- }
260
- });
261
- if (usersToDownload.length != 0) {
262
- logger.log("downloadKeys: downloading for", usersToDownload);
263
- var downloadPromise = this.doKeyDownload(usersToDownload);
264
- promises.push(downloadPromise);
265
- }
266
- if (promises.length === 0) {
267
- logger.log("downloadKeys: already have all necessary keys");
268
- }
269
- return Promise.all(promises).then(() => {
270
- return this.getDevicesFromStore(userIds);
271
- });
272
- }
273
-
274
- /**
275
- * Get the stored device keys for a list of user ids
276
- *
277
- * @param userIds - the list of users to list keys for.
278
- *
279
- * @returns userId-\>deviceId-\>{@link DeviceInfo}.
280
- */
281
- getDevicesFromStore(userIds) {
282
- var stored = new Map();
283
- userIds.forEach(userId => {
284
- var _this$getStoredDevice;
285
- var deviceMap = new Map();
286
- (_this$getStoredDevice = this.getStoredDevicesForUser(userId)) === null || _this$getStoredDevice === void 0 || _this$getStoredDevice.forEach(function (device) {
287
- deviceMap.set(device.deviceId, device);
288
- });
289
- stored.set(userId, deviceMap);
290
- });
291
- return stored;
292
- }
293
-
294
- /**
295
- * Returns a list of all user IDs the DeviceList knows about
296
- *
297
- * @returns All known user IDs
298
- */
299
- getKnownUserIds() {
300
- return Object.keys(this.devices);
301
- }
302
-
303
- /**
304
- * Get the stored device keys for a user id
305
- *
306
- * @param userId - the user to list keys for.
307
- *
308
- * @returns list of devices, or null if we haven't
309
- * managed to get a list of devices for this user yet.
310
- */
311
- getStoredDevicesForUser(userId) {
312
- var devs = this.devices[userId];
313
- if (!devs) {
314
- return null;
315
- }
316
- var res = [];
317
- for (var deviceId in devs) {
318
- if (devs.hasOwnProperty(deviceId)) {
319
- res.push(DeviceInfo.fromStorage(devs[deviceId], deviceId));
320
- }
321
- }
322
- return res;
323
- }
324
-
325
- /**
326
- * Get the stored device data for a user, in raw object form
327
- *
328
- * @param userId - the user to get data for
329
- *
330
- * @returns `deviceId->{object}` devices, or undefined if
331
- * there is no data for this user.
332
- */
333
- getRawStoredDevicesForUser(userId) {
334
- return this.devices[userId];
335
- }
336
- getStoredCrossSigningForUser(userId) {
337
- if (!this.crossSigningInfo[userId]) return null;
338
- return CrossSigningInfo.fromStorage(this.crossSigningInfo[userId], userId);
339
- }
340
- storeCrossSigningForUser(userId, info) {
341
- this.crossSigningInfo[userId] = info;
342
- this.dirty = true;
343
- }
344
-
345
- /**
346
- * Get the stored keys for a single device
347
- *
348
- *
349
- * @returns device, or undefined
350
- * if we don't know about this device
351
- */
352
- getStoredDevice(userId, deviceId) {
353
- var devs = this.devices[userId];
354
- if (!(devs !== null && devs !== void 0 && devs[deviceId])) {
355
- return undefined;
356
- }
357
- return DeviceInfo.fromStorage(devs[deviceId], deviceId);
358
- }
359
-
360
- /**
361
- * Get a user ID by one of their device's curve25519 identity key
362
- *
363
- * @param algorithm - encryption algorithm
364
- * @param senderKey - curve25519 key to match
365
- *
366
- * @returns user ID
367
- */
368
- getUserByIdentityKey(algorithm, senderKey) {
369
- if (algorithm !== olmlib.OLM_ALGORITHM && algorithm !== olmlib.MEGOLM_ALGORITHM) {
370
- // we only deal in olm keys
371
- return null;
372
- }
373
- return this.userByIdentityKey[senderKey];
374
- }
375
-
376
- /**
377
- * Find a device by curve25519 identity key
378
- *
379
- * @param algorithm - encryption algorithm
380
- * @param senderKey - curve25519 key to match
381
- */
382
- getDeviceByIdentityKey(algorithm, senderKey) {
383
- var userId = this.getUserByIdentityKey(algorithm, senderKey);
384
- if (!userId) {
385
- return null;
386
- }
387
- var devices = this.devices[userId];
388
- if (!devices) {
389
- return null;
390
- }
391
- for (var deviceId in devices) {
392
- if (!devices.hasOwnProperty(deviceId)) {
393
- continue;
394
- }
395
- var device = devices[deviceId];
396
- for (var keyId in device.keys) {
397
- if (!device.keys.hasOwnProperty(keyId)) {
398
- continue;
399
- }
400
- if (keyId.indexOf("curve25519:") !== 0) {
401
- continue;
402
- }
403
- var deviceKey = device.keys[keyId];
404
- if (deviceKey == senderKey) {
405
- return DeviceInfo.fromStorage(device, deviceId);
406
- }
407
- }
408
- }
409
-
410
- // doesn't match a known device
411
- return null;
412
- }
413
-
414
- /**
415
- * Replaces the list of devices for a user with the given device list
416
- *
417
- * @param userId - The user ID
418
- * @param devices - New device info for user
419
- */
420
- storeDevicesForUser(userId, devices) {
421
- this.setRawStoredDevicesForUser(userId, devices);
422
- this.dirty = true;
423
- }
424
-
425
- /**
426
- * flag the given user for device-list tracking, if they are not already.
427
- *
428
- * This will mean that a subsequent call to refreshOutdatedDeviceLists()
429
- * will download the device list for the user, and that subsequent calls to
430
- * invalidateUserDeviceList will trigger more updates.
431
- *
432
- */
433
- startTrackingDeviceList(userId) {
434
- // sanity-check the userId. This is mostly paranoia, but if synapse
435
- // can't parse the userId we give it as an mxid, it 500s the whole
436
- // request and we can never update the device lists again (because
437
- // the broken userId is always 'invalid' and always included in any
438
- // refresh request).
439
- // By checking it is at least a string, we can eliminate a class of
440
- // silly errors.
441
- if (typeof userId !== "string") {
442
- throw new Error("userId must be a string; was " + userId);
443
- }
444
- if (!this.deviceTrackingStatus[userId]) {
445
- logger.log("Now tracking device list for " + userId);
446
- this.deviceTrackingStatus[userId] = TrackingStatus.PendingDownload;
447
- // we don't yet persist the tracking status, since there may be a lot
448
- // of calls; we save all data together once the sync is done
449
- this.dirty = true;
450
- }
451
- }
452
-
453
- /**
454
- * Mark the given user as no longer being tracked for device-list updates.
455
- *
456
- * This won't affect any in-progress downloads, which will still go on to
457
- * complete; it will just mean that we don't think that we have an up-to-date
458
- * list for future calls to downloadKeys.
459
- *
460
- */
461
- stopTrackingDeviceList(userId) {
462
- if (this.deviceTrackingStatus[userId]) {
463
- logger.log("No longer tracking device list for " + userId);
464
- this.deviceTrackingStatus[userId] = TrackingStatus.NotTracked;
465
-
466
- // we don't yet persist the tracking status, since there may be a lot
467
- // of calls; we save all data together once the sync is done
468
- this.dirty = true;
469
- }
470
- }
471
-
472
- /**
473
- * Set all users we're currently tracking to untracked
474
- *
475
- * This will flag each user whose devices we are tracking as in need of an
476
- * update.
477
- */
478
- stopTrackingAllDeviceLists() {
479
- for (var userId of Object.keys(this.deviceTrackingStatus)) {
480
- this.deviceTrackingStatus[userId] = TrackingStatus.NotTracked;
481
- }
482
- this.dirty = true;
483
- }
484
-
485
- /**
486
- * Mark the cached device list for the given user outdated.
487
- *
488
- * If we are not tracking this user's devices, we'll do nothing. Otherwise
489
- * we flag the user as needing an update.
490
- *
491
- * This doesn't actually set off an update, so that several users can be
492
- * batched together. Call refreshOutdatedDeviceLists() for that.
493
- *
494
- */
495
- invalidateUserDeviceList(userId) {
496
- if (this.deviceTrackingStatus[userId]) {
497
- logger.log("Marking device list outdated for", userId);
498
- this.deviceTrackingStatus[userId] = TrackingStatus.PendingDownload;
499
-
500
- // we don't yet persist the tracking status, since there may be a lot
501
- // of calls; we save all data together once the sync is done
502
- this.dirty = true;
503
- }
504
- }
505
-
506
- /**
507
- * If we have users who have outdated device lists, start key downloads for them
508
- *
509
- * @returns which completes when the download completes; normally there
510
- * is no need to wait for this (it's mostly for the unit tests).
511
- */
512
- refreshOutdatedDeviceLists() {
513
- this.saveIfDirty();
514
- var usersToDownload = [];
515
- for (var userId of Object.keys(this.deviceTrackingStatus)) {
516
- var stat = this.deviceTrackingStatus[userId];
517
- if (stat == TrackingStatus.PendingDownload) {
518
- usersToDownload.push(userId);
519
- }
520
- }
521
- return this.doKeyDownload(usersToDownload);
522
- }
523
-
524
- /**
525
- * Set the stored device data for a user, in raw object form
526
- * Used only by internal class DeviceListUpdateSerialiser
527
- *
528
- * @param userId - the user to get data for
529
- *
530
- * @param devices - `deviceId->{object}` the new devices
531
- */
532
- setRawStoredDevicesForUser(userId, devices) {
533
- // remove old devices from userByIdentityKey
534
- if (this.devices[userId] !== undefined) {
535
- for (var [deviceId, dev] of Object.entries(this.devices[userId])) {
536
- var identityKey = dev.keys["curve25519:" + deviceId];
537
- delete this.userByIdentityKey[identityKey];
538
- }
539
- }
540
- this.devices[userId] = devices;
541
-
542
- // add new devices into userByIdentityKey
543
- for (var [_deviceId, _dev] of Object.entries(devices)) {
544
- var _identityKey = _dev.keys["curve25519:" + _deviceId];
545
- this.userByIdentityKey[_identityKey] = userId;
546
- }
547
- }
548
- setRawStoredCrossSigningForUser(userId, info) {
549
- this.crossSigningInfo[userId] = info;
550
- }
551
-
552
- /**
553
- * Fire off download update requests for the given users, and update the
554
- * device list tracking status for them, and the
555
- * keyDownloadsInProgressByUser map for them.
556
- *
557
- * @param users - list of userIds
558
- *
559
- * @returns resolves when all the users listed have
560
- * been updated. rejects if there was a problem updating any of the
561
- * users.
562
- */
563
- doKeyDownload(users) {
564
- if (users.length === 0) {
565
- // nothing to do
566
- return Promise.resolve();
567
- }
568
- var prom = this.serialiser.updateDevicesForUsers(users, this.syncToken).then(() => {
569
- finished(true);
570
- }, e => {
571
- logger.error("Error downloading keys for " + users + ":", e);
572
- finished(false);
573
- throw e;
574
- });
575
- users.forEach(u => {
576
- this.keyDownloadsInProgressByUser.set(u, prom);
577
- var stat = this.deviceTrackingStatus[u];
578
- if (stat == TrackingStatus.PendingDownload) {
579
- this.deviceTrackingStatus[u] = TrackingStatus.DownloadInProgress;
580
- }
581
- });
582
- var finished = success => {
583
- this.emit(CryptoEvent.WillUpdateDevices, users, !this.hasFetched);
584
- users.forEach(u => {
585
- this.dirty = true;
586
-
587
- // we may have queued up another download request for this user
588
- // since we started this request. If that happens, we should
589
- // ignore the completion of the first one.
590
- if (this.keyDownloadsInProgressByUser.get(u) !== prom) {
591
- logger.log("Another update in the queue for", u, "- not marking up-to-date");
592
- return;
593
- }
594
- this.keyDownloadsInProgressByUser.delete(u);
595
- var stat = this.deviceTrackingStatus[u];
596
- if (stat == TrackingStatus.DownloadInProgress) {
597
- if (success) {
598
- // we didn't get any new invalidations since this download started:
599
- // this user's device list is now up to date.
600
- this.deviceTrackingStatus[u] = TrackingStatus.UpToDate;
601
- logger.log("Device list for", u, "now up to date");
602
- } else {
603
- this.deviceTrackingStatus[u] = TrackingStatus.PendingDownload;
604
- }
605
- }
606
- });
607
- this.saveIfDirty();
608
- this.emit(CryptoEvent.DevicesUpdated, users, !this.hasFetched);
609
- this.hasFetched = true;
610
- };
611
- return prom;
612
- }
613
- }
614
-
615
- /**
616
- * Serialises updates to device lists
617
- *
618
- * Ensures that results from /keys/query are not overwritten if a second call
619
- * completes *before* an earlier one.
620
- *
621
- * It currently does this by ensuring only one call to /keys/query happens at a
622
- * time (and queuing other requests up).
623
- */
624
- class DeviceListUpdateSerialiser {
625
- // The sync token we send with the requests
626
-
627
- /*
628
- * @param baseApis - Base API object
629
- * @param olmDevice - The Olm Device
630
- * @param deviceList - The device list object, the device list to be updated
631
- */
632
- constructor(baseApis, olmDevice, deviceList) {
633
- this.baseApis = baseApis;
634
- this.olmDevice = olmDevice;
635
- this.deviceList = deviceList;
636
- _defineProperty(this, "downloadInProgress", false);
637
- // users which are queued for download
638
- // userId -> true
639
- _defineProperty(this, "keyDownloadsQueuedByUser", {});
640
- // deferred which is resolved when the queued users are downloaded.
641
- // non-null indicates that we have users queued for download.
642
- _defineProperty(this, "queuedQueryDeferred", void 0);
643
- _defineProperty(this, "syncToken", void 0);
644
- }
645
-
646
- /**
647
- * Make a key query request for the given users
648
- *
649
- * @param users - list of user ids
650
- *
651
- * @param syncToken - sync token to pass in the query request, to
652
- * help the HS give the most recent results
653
- *
654
- * @returns resolves when all the users listed have
655
- * been updated. rejects if there was a problem updating any of the
656
- * users.
657
- */
658
- updateDevicesForUsers(users, syncToken) {
659
- users.forEach(u => {
660
- this.keyDownloadsQueuedByUser[u] = true;
661
- });
662
- if (!this.queuedQueryDeferred) {
663
- this.queuedQueryDeferred = defer();
664
- }
665
-
666
- // We always take the new sync token and just use the latest one we've
667
- // been given, since it just needs to be at least as recent as the
668
- // sync response the device invalidation message arrived in
669
- this.syncToken = syncToken;
670
- if (this.downloadInProgress) {
671
- // just queue up these users
672
- logger.log("Queued key download for", users);
673
- return this.queuedQueryDeferred.promise;
674
- }
675
-
676
- // start a new download.
677
- return this.doQueuedQueries();
678
- }
679
- doQueuedQueries() {
680
- var _this3 = this;
681
- if (this.downloadInProgress) {
682
- throw new Error("DeviceListUpdateSerialiser.doQueuedQueries called with request active");
683
- }
684
- var downloadUsers = Object.keys(this.keyDownloadsQueuedByUser);
685
- this.keyDownloadsQueuedByUser = {};
686
- var deferred = this.queuedQueryDeferred;
687
- this.queuedQueryDeferred = undefined;
688
- logger.log("Starting key download for", downloadUsers);
689
- this.downloadInProgress = true;
690
- var opts = {};
691
- if (this.syncToken) {
692
- opts.token = this.syncToken;
693
- }
694
- var factories = [];
695
- var _loop = function _loop() {
696
- var userSlice = downloadUsers.slice(i, i + _this3.deviceList.keyDownloadChunkSize);
697
- factories.push(() => _this3.baseApis.downloadKeysForUsers(userSlice, opts));
698
- };
699
- for (var i = 0; i < downloadUsers.length; i += this.deviceList.keyDownloadChunkSize) {
700
- _loop();
701
- }
702
- chunkPromises(factories, 3).then(/*#__PURE__*/function () {
703
- var _ref = _asyncToGenerator(function* (responses) {
704
- var dk = Object.assign({}, ...responses.map(res => res.device_keys || {}));
705
- var masterKeys = Object.assign({}, ...responses.map(res => res.master_keys || {}));
706
- var ssks = Object.assign({}, ...responses.map(res => res.self_signing_keys || {}));
707
- var usks = Object.assign({}, ...responses.map(res => res.user_signing_keys || {}));
708
-
709
- // yield to other things that want to execute in between users, to
710
- // avoid wedging the CPU
711
- // (https://github.com/vector-im/element-web/issues/3158)
712
- //
713
- // of course we ought to do this in a web worker or similar, but
714
- // this serves as an easy solution for now.
715
- for (var userId of downloadUsers) {
716
- yield sleep(5);
717
- try {
718
- yield _this3.processQueryResponseForUser(userId, dk[userId], {
719
- master: masterKeys === null || masterKeys === void 0 ? void 0 : masterKeys[userId],
720
- self_signing: ssks === null || ssks === void 0 ? void 0 : ssks[userId],
721
- user_signing: usks === null || usks === void 0 ? void 0 : usks[userId]
722
- });
723
- } catch (e) {
724
- // log the error but continue, so that one bad key
725
- // doesn't kill the whole process
726
- logger.error("Error processing keys for ".concat(userId, ":"), e);
727
- }
728
- }
729
- });
730
- return function (_x) {
731
- return _ref.apply(this, arguments);
732
- };
733
- }()).then(() => {
734
- logger.log("Completed key download for " + downloadUsers);
735
- this.downloadInProgress = false;
736
- deferred === null || deferred === void 0 || deferred.resolve();
737
-
738
- // if we have queued users, fire off another request.
739
- if (this.queuedQueryDeferred) {
740
- this.doQueuedQueries();
741
- }
742
- }, e => {
743
- logger.warn("Error downloading keys for " + downloadUsers + ":", e);
744
- this.downloadInProgress = false;
745
- deferred === null || deferred === void 0 || deferred.reject(e);
746
- });
747
- return deferred.promise;
748
- }
749
- processQueryResponseForUser(userId, dkResponse, crossSigningResponse) {
750
- var _this4 = this;
751
- return _asyncToGenerator(function* () {
752
- logger.log("got device keys for " + userId + ":", dkResponse);
753
- logger.log("got cross-signing keys for " + userId + ":", crossSigningResponse);
754
- {
755
- // map from deviceid -> deviceinfo for this user
756
- var userStore = {};
757
- var devs = _this4.deviceList.getRawStoredDevicesForUser(userId);
758
- if (devs) {
759
- Object.keys(devs).forEach(deviceId => {
760
- var d = DeviceInfo.fromStorage(devs[deviceId], deviceId);
761
- userStore[deviceId] = d;
762
- });
763
- }
764
- yield updateStoredDeviceKeysForUser(_this4.olmDevice, userId, userStore, dkResponse || {}, _this4.baseApis.getUserId(), _this4.baseApis.deviceId);
765
-
766
- // put the updates into the object that will be returned as our results
767
- var storage = {};
768
- Object.keys(userStore).forEach(deviceId => {
769
- storage[deviceId] = userStore[deviceId].toStorage();
770
- });
771
- _this4.deviceList.setRawStoredDevicesForUser(userId, storage);
772
- }
773
-
774
- // now do the same for the cross-signing keys
775
- {
776
- // FIXME: should we be ignoring empty cross-signing responses, or
777
- // should we be dropping the keys?
778
- if (crossSigningResponse && (crossSigningResponse.master || crossSigningResponse.self_signing || crossSigningResponse.user_signing)) {
779
- var crossSigning = _this4.deviceList.getStoredCrossSigningForUser(userId) || new CrossSigningInfo(userId);
780
- crossSigning.setKeys(crossSigningResponse);
781
- _this4.deviceList.setRawStoredCrossSigningForUser(userId, crossSigning.toStorage());
782
-
783
- // NB. Unlike most events in the js-sdk, this one is internal to the
784
- // js-sdk and is not re-emitted
785
- _this4.deviceList.emit(CryptoEvent.UserCrossSigningUpdated, userId);
786
- }
787
- }
788
- })();
789
- }
790
- }
791
- function updateStoredDeviceKeysForUser(_x2, _x3, _x4, _x5, _x6, _x7) {
792
- return _updateStoredDeviceKeysForUser.apply(this, arguments);
793
- }
794
- /*
795
- * Process a device in a /query response, and add it to the userStore
796
- *
797
- * returns (a promise for) true if a change was made, else false
798
- */
799
- function _updateStoredDeviceKeysForUser() {
800
- _updateStoredDeviceKeysForUser = _asyncToGenerator(function* (olmDevice, userId, userStore, userResult, localUserId, localDeviceId) {
801
- var updated = false;
802
-
803
- // remove any devices in the store which aren't in the response
804
- for (var deviceId in userStore) {
805
- if (!userStore.hasOwnProperty(deviceId)) {
806
- continue;
807
- }
808
- if (!(deviceId in userResult)) {
809
- if (userId === localUserId && deviceId === localDeviceId) {
810
- logger.warn("Local device ".concat(deviceId, " missing from sync, skipping removal"));
811
- continue;
812
- }
813
- logger.log("Device " + userId + ":" + deviceId + " has been removed");
814
- delete userStore[deviceId];
815
- updated = true;
816
- }
817
- }
818
- for (var _deviceId2 in userResult) {
819
- if (!userResult.hasOwnProperty(_deviceId2)) {
820
- continue;
821
- }
822
- var deviceResult = userResult[_deviceId2];
823
-
824
- // check that the user_id and device_id in the response object are
825
- // correct
826
- if (deviceResult.user_id !== userId) {
827
- logger.warn("Mismatched user_id " + deviceResult.user_id + " in keys from " + userId + ":" + _deviceId2);
828
- continue;
829
- }
830
- if (deviceResult.device_id !== _deviceId2) {
831
- logger.warn("Mismatched device_id " + deviceResult.device_id + " in keys from " + userId + ":" + _deviceId2);
832
- continue;
833
- }
834
- if (yield storeDeviceKeys(olmDevice, userStore, deviceResult)) {
835
- updated = true;
836
- }
837
- }
838
- return updated;
839
- });
840
- return _updateStoredDeviceKeysForUser.apply(this, arguments);
841
- }
842
- function storeDeviceKeys(_x8, _x9, _x10) {
843
- return _storeDeviceKeys.apply(this, arguments);
844
- }
845
- function _storeDeviceKeys() {
846
- _storeDeviceKeys = _asyncToGenerator(function* (olmDevice, userStore, deviceResult) {
847
- if (!deviceResult.keys) {
848
- // no keys?
849
- return false;
850
- }
851
- var deviceId = deviceResult.device_id;
852
- var userId = deviceResult.user_id;
853
- var signKeyId = "ed25519:" + deviceId;
854
- var signKey = deviceResult.keys[signKeyId];
855
- if (!signKey) {
856
- logger.warn("Device " + userId + ":" + deviceId + " has no ed25519 key");
857
- return false;
858
- }
859
- var unsigned = deviceResult.unsigned || {};
860
- var signatures = deviceResult.signatures || {};
861
- try {
862
- yield olmlib.verifySignature(olmDevice, deviceResult, userId, deviceId, signKey);
863
- } catch (e) {
864
- logger.warn("Unable to verify signature on device " + userId + ":" + deviceId + ":" + e);
865
- return false;
866
- }
867
-
868
- // DeviceInfo
869
- var deviceStore;
870
- if (deviceId in userStore) {
871
- // already have this device.
872
- deviceStore = userStore[deviceId];
873
- if (deviceStore.getFingerprint() != signKey) {
874
- // this should only happen if the list has been MITMed; we are
875
- // best off sticking with the original keys.
876
- //
877
- // Should we warn the user about it somehow?
878
- logger.warn("Ed25519 key for device " + userId + ":" + deviceId + " has changed");
879
- return false;
880
- }
881
- } else {
882
- userStore[deviceId] = deviceStore = new DeviceInfo(deviceId);
883
- }
884
- deviceStore.keys = deviceResult.keys || {};
885
- deviceStore.algorithms = deviceResult.algorithms || [];
886
- deviceStore.unsigned = unsigned;
887
- deviceStore.signatures = signatures;
888
- return true;
889
- });
890
- return _storeDeviceKeys.apply(this, arguments);
891
- }
892
- //# sourceMappingURL=DeviceList.js.map