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

Sign up to get free protection for your applications and to get access to all the features.
Files changed (467) 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 -1176
  8. package/lib/client.d.ts.map +1 -1
  9. package/lib/client.js +346 -2717
  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/package.json +1 -3
  62. package/src/@types/global.d.ts +0 -3
  63. package/src/browser-index.ts +0 -11
  64. package/src/client.ts +57 -2732
  65. package/src/embedded.ts +3 -130
  66. package/src/event-mapper.ts +0 -4
  67. package/src/matrix.ts +0 -28
  68. package/src/models/MSC3089Branch.ts +0 -3
  69. package/src/models/event.ts +0 -289
  70. package/src/models/poll.ts +0 -6
  71. package/src/models/relations-container.ts +1 -8
  72. package/src/models/relations.ts +0 -8
  73. package/src/models/room-state.ts +2 -8
  74. package/src/models/room.ts +0 -62
  75. package/src/models/thread.ts +0 -1
  76. package/src/sliding-sync-sdk.ts +2 -72
  77. package/src/sync.ts +1 -98
  78. package/src/testing.ts +0 -108
  79. package/lib/@types/crypto.d.ts +0 -47
  80. package/lib/@types/crypto.d.ts.map +0 -1
  81. package/lib/@types/crypto.js +0 -1
  82. package/lib/@types/crypto.js.map +0 -1
  83. package/lib/@types/matrix-sdk-crypto-wasm.d.js +0 -1
  84. package/lib/@types/matrix-sdk-crypto-wasm.d.js.map +0 -1
  85. package/lib/common-crypto/CryptoBackend.d.ts +0 -240
  86. package/lib/common-crypto/CryptoBackend.d.ts.map +0 -1
  87. package/lib/common-crypto/CryptoBackend.js +0 -73
  88. package/lib/common-crypto/CryptoBackend.js.map +0 -1
  89. package/lib/common-crypto/key-passphrase.d.ts +0 -14
  90. package/lib/common-crypto/key-passphrase.d.ts.map +0 -1
  91. package/lib/common-crypto/key-passphrase.js +0 -33
  92. package/lib/common-crypto/key-passphrase.js.map +0 -1
  93. package/lib/crypto/CrossSigning.d.ts +0 -184
  94. package/lib/crypto/CrossSigning.d.ts.map +0 -1
  95. package/lib/crypto/CrossSigning.js +0 -718
  96. package/lib/crypto/CrossSigning.js.map +0 -1
  97. package/lib/crypto/DeviceList.d.ts +0 -216
  98. package/lib/crypto/DeviceList.d.ts.map +0 -1
  99. package/lib/crypto/DeviceList.js +0 -892
  100. package/lib/crypto/DeviceList.js.map +0 -1
  101. package/lib/crypto/EncryptionSetup.d.ts +0 -152
  102. package/lib/crypto/EncryptionSetup.d.ts.map +0 -1
  103. package/lib/crypto/EncryptionSetup.js +0 -356
  104. package/lib/crypto/EncryptionSetup.js.map +0 -1
  105. package/lib/crypto/OlmDevice.d.ts +0 -457
  106. package/lib/crypto/OlmDevice.d.ts.map +0 -1
  107. package/lib/crypto/OlmDevice.js +0 -1241
  108. package/lib/crypto/OlmDevice.js.map +0 -1
  109. package/lib/crypto/OutgoingRoomKeyRequestManager.d.ts +0 -109
  110. package/lib/crypto/OutgoingRoomKeyRequestManager.d.ts.map +0 -1
  111. package/lib/crypto/OutgoingRoomKeyRequestManager.js +0 -415
  112. package/lib/crypto/OutgoingRoomKeyRequestManager.js.map +0 -1
  113. package/lib/crypto/RoomList.d.ts +0 -26
  114. package/lib/crypto/RoomList.d.ts.map +0 -1
  115. package/lib/crypto/RoomList.js +0 -71
  116. package/lib/crypto/RoomList.js.map +0 -1
  117. package/lib/crypto/SecretSharing.d.ts +0 -24
  118. package/lib/crypto/SecretSharing.d.ts.map +0 -1
  119. package/lib/crypto/SecretSharing.js +0 -194
  120. package/lib/crypto/SecretSharing.js.map +0 -1
  121. package/lib/crypto/SecretStorage.d.ts +0 -55
  122. package/lib/crypto/SecretStorage.d.ts.map +0 -1
  123. package/lib/crypto/SecretStorage.js +0 -118
  124. package/lib/crypto/SecretStorage.js.map +0 -1
  125. package/lib/crypto/aes.d.ts +0 -6
  126. package/lib/crypto/aes.d.ts.map +0 -1
  127. package/lib/crypto/aes.js +0 -24
  128. package/lib/crypto/aes.js.map +0 -1
  129. package/lib/crypto/algorithms/base.d.ts +0 -156
  130. package/lib/crypto/algorithms/base.d.ts.map +0 -1
  131. package/lib/crypto/algorithms/base.js +0 -187
  132. package/lib/crypto/algorithms/base.js.map +0 -1
  133. package/lib/crypto/algorithms/index.d.ts +0 -4
  134. package/lib/crypto/algorithms/index.d.ts.map +0 -1
  135. package/lib/crypto/algorithms/index.js +0 -20
  136. package/lib/crypto/algorithms/index.js.map +0 -1
  137. package/lib/crypto/algorithms/megolm.d.ts +0 -385
  138. package/lib/crypto/algorithms/megolm.d.ts.map +0 -1
  139. package/lib/crypto/algorithms/megolm.js +0 -1822
  140. package/lib/crypto/algorithms/megolm.js.map +0 -1
  141. package/lib/crypto/algorithms/olm.d.ts +0 -5
  142. package/lib/crypto/algorithms/olm.d.ts.map +0 -1
  143. package/lib/crypto/algorithms/olm.js +0 -299
  144. package/lib/crypto/algorithms/olm.js.map +0 -1
  145. package/lib/crypto/api.d.ts +0 -32
  146. package/lib/crypto/api.d.ts.map +0 -1
  147. package/lib/crypto/api.js +0 -22
  148. package/lib/crypto/api.js.map +0 -1
  149. package/lib/crypto/backup.d.ts +0 -227
  150. package/lib/crypto/backup.d.ts.map +0 -1
  151. package/lib/crypto/backup.js +0 -824
  152. package/lib/crypto/backup.js.map +0 -1
  153. package/lib/crypto/crypto.d.ts +0 -3
  154. package/lib/crypto/crypto.d.ts.map +0 -1
  155. package/lib/crypto/crypto.js +0 -19
  156. package/lib/crypto/crypto.js.map +0 -1
  157. package/lib/crypto/dehydration.d.ts +0 -34
  158. package/lib/crypto/dehydration.d.ts.map +0 -1
  159. package/lib/crypto/dehydration.js +0 -252
  160. package/lib/crypto/dehydration.js.map +0 -1
  161. package/lib/crypto/device-converter.d.ts +0 -9
  162. package/lib/crypto/device-converter.d.ts.map +0 -1
  163. package/lib/crypto/device-converter.js +0 -42
  164. package/lib/crypto/device-converter.js.map +0 -1
  165. package/lib/crypto/deviceinfo.d.ts +0 -99
  166. package/lib/crypto/deviceinfo.d.ts.map +0 -1
  167. package/lib/crypto/deviceinfo.js +0 -148
  168. package/lib/crypto/deviceinfo.js.map +0 -1
  169. package/lib/crypto/index.d.ts +0 -1209
  170. package/lib/crypto/index.d.ts.map +0 -1
  171. package/lib/crypto/index.js +0 -4097
  172. package/lib/crypto/index.js.map +0 -1
  173. package/lib/crypto/key_passphrase.d.ts +0 -14
  174. package/lib/crypto/key_passphrase.d.ts.map +0 -1
  175. package/lib/crypto/key_passphrase.js +0 -44
  176. package/lib/crypto/key_passphrase.js.map +0 -1
  177. package/lib/crypto/keybackup.d.ts +0 -18
  178. package/lib/crypto/keybackup.d.ts.map +0 -1
  179. package/lib/crypto/keybackup.js +0 -1
  180. package/lib/crypto/keybackup.js.map +0 -1
  181. package/lib/crypto/olmlib.d.ts +0 -129
  182. package/lib/crypto/olmlib.d.ts.map +0 -1
  183. package/lib/crypto/olmlib.js +0 -492
  184. package/lib/crypto/olmlib.js.map +0 -1
  185. package/lib/crypto/recoverykey.d.ts +0 -2
  186. package/lib/crypto/recoverykey.d.ts.map +0 -1
  187. package/lib/crypto/recoverykey.js +0 -19
  188. package/lib/crypto/recoverykey.js.map +0 -1
  189. package/lib/crypto/store/base.d.ts +0 -252
  190. package/lib/crypto/store/base.d.ts.map +0 -1
  191. package/lib/crypto/store/base.js +0 -64
  192. package/lib/crypto/store/base.js.map +0 -1
  193. package/lib/crypto/store/indexeddb-crypto-store-backend.d.ts +0 -187
  194. package/lib/crypto/store/indexeddb-crypto-store-backend.d.ts.map +0 -1
  195. package/lib/crypto/store/indexeddb-crypto-store-backend.js +0 -1145
  196. package/lib/crypto/store/indexeddb-crypto-store-backend.js.map +0 -1
  197. package/lib/crypto/store/indexeddb-crypto-store.d.ts +0 -432
  198. package/lib/crypto/store/indexeddb-crypto-store.d.ts.map +0 -1
  199. package/lib/crypto/store/indexeddb-crypto-store.js +0 -728
  200. package/lib/crypto/store/indexeddb-crypto-store.js.map +0 -1
  201. package/lib/crypto/store/localStorage-crypto-store.d.ts +0 -119
  202. package/lib/crypto/store/localStorage-crypto-store.d.ts.map +0 -1
  203. package/lib/crypto/store/localStorage-crypto-store.js +0 -531
  204. package/lib/crypto/store/localStorage-crypto-store.js.map +0 -1
  205. package/lib/crypto/store/memory-crypto-store.d.ts +0 -215
  206. package/lib/crypto/store/memory-crypto-store.d.ts.map +0 -1
  207. package/lib/crypto/store/memory-crypto-store.js +0 -622
  208. package/lib/crypto/store/memory-crypto-store.js.map +0 -1
  209. package/lib/crypto/verification/Base.d.ts +0 -105
  210. package/lib/crypto/verification/Base.d.ts.map +0 -1
  211. package/lib/crypto/verification/Base.js +0 -372
  212. package/lib/crypto/verification/Base.js.map +0 -1
  213. package/lib/crypto/verification/Error.d.ts +0 -35
  214. package/lib/crypto/verification/Error.d.ts.map +0 -1
  215. package/lib/crypto/verification/Error.js +0 -86
  216. package/lib/crypto/verification/Error.js.map +0 -1
  217. package/lib/crypto/verification/IllegalMethod.d.ts +0 -15
  218. package/lib/crypto/verification/IllegalMethod.d.ts.map +0 -1
  219. package/lib/crypto/verification/IllegalMethod.js +0 -43
  220. package/lib/crypto/verification/IllegalMethod.js.map +0 -1
  221. package/lib/crypto/verification/QRCode.d.ts +0 -51
  222. package/lib/crypto/verification/QRCode.d.ts.map +0 -1
  223. package/lib/crypto/verification/QRCode.js +0 -277
  224. package/lib/crypto/verification/QRCode.js.map +0 -1
  225. package/lib/crypto/verification/SAS.d.ts +0 -27
  226. package/lib/crypto/verification/SAS.d.ts.map +0 -1
  227. package/lib/crypto/verification/SAS.js +0 -485
  228. package/lib/crypto/verification/SAS.js.map +0 -1
  229. package/lib/crypto/verification/SASDecimal.d.ts +0 -8
  230. package/lib/crypto/verification/SASDecimal.d.ts.map +0 -1
  231. package/lib/crypto/verification/SASDecimal.js +0 -34
  232. package/lib/crypto/verification/SASDecimal.js.map +0 -1
  233. package/lib/crypto/verification/request/Channel.d.ts +0 -18
  234. package/lib/crypto/verification/request/Channel.d.ts.map +0 -1
  235. package/lib/crypto/verification/request/Channel.js +0 -1
  236. package/lib/crypto/verification/request/Channel.js.map +0 -1
  237. package/lib/crypto/verification/request/InRoomChannel.d.ts +0 -113
  238. package/lib/crypto/verification/request/InRoomChannel.d.ts.map +0 -1
  239. package/lib/crypto/verification/request/InRoomChannel.js +0 -351
  240. package/lib/crypto/verification/request/InRoomChannel.js.map +0 -1
  241. package/lib/crypto/verification/request/ToDeviceChannel.d.ts +0 -105
  242. package/lib/crypto/verification/request/ToDeviceChannel.d.ts.map +0 -1
  243. package/lib/crypto/verification/request/ToDeviceChannel.js +0 -328
  244. package/lib/crypto/verification/request/ToDeviceChannel.js.map +0 -1
  245. package/lib/crypto/verification/request/VerificationRequest.d.ts +0 -227
  246. package/lib/crypto/verification/request/VerificationRequest.d.ts.map +0 -1
  247. package/lib/crypto/verification/request/VerificationRequest.js +0 -937
  248. package/lib/crypto/verification/request/VerificationRequest.js.map +0 -1
  249. package/lib/crypto-api/CryptoEvent.d.ts +0 -69
  250. package/lib/crypto-api/CryptoEvent.d.ts.map +0 -1
  251. package/lib/crypto-api/CryptoEvent.js +0 -33
  252. package/lib/crypto-api/CryptoEvent.js.map +0 -1
  253. package/lib/crypto-api/CryptoEventHandlerMap.d.ts +0 -16
  254. package/lib/crypto-api/CryptoEventHandlerMap.d.ts.map +0 -1
  255. package/lib/crypto-api/CryptoEventHandlerMap.js +0 -22
  256. package/lib/crypto-api/CryptoEventHandlerMap.js.map +0 -1
  257. package/lib/crypto-api/index.d.ts +0 -978
  258. package/lib/crypto-api/index.d.ts.map +0 -1
  259. package/lib/crypto-api/index.js +0 -304
  260. package/lib/crypto-api/index.js.map +0 -1
  261. package/lib/crypto-api/key-passphrase.d.ts +0 -11
  262. package/lib/crypto-api/key-passphrase.d.ts.map +0 -1
  263. package/lib/crypto-api/key-passphrase.js +0 -51
  264. package/lib/crypto-api/key-passphrase.js.map +0 -1
  265. package/lib/crypto-api/keybackup.d.ts +0 -88
  266. package/lib/crypto-api/keybackup.d.ts.map +0 -1
  267. package/lib/crypto-api/keybackup.js +0 -1
  268. package/lib/crypto-api/keybackup.js.map +0 -1
  269. package/lib/crypto-api/recovery-key.d.ts +0 -11
  270. package/lib/crypto-api/recovery-key.d.ts.map +0 -1
  271. package/lib/crypto-api/recovery-key.js +0 -65
  272. package/lib/crypto-api/recovery-key.js.map +0 -1
  273. package/lib/crypto-api/verification.d.ts +0 -344
  274. package/lib/crypto-api/verification.d.ts.map +0 -1
  275. package/lib/crypto-api/verification.js +0 -91
  276. package/lib/crypto-api/verification.js.map +0 -1
  277. package/lib/rendezvous/MSC4108SignInWithQR.d.ts +0 -112
  278. package/lib/rendezvous/MSC4108SignInWithQR.d.ts.map +0 -1
  279. package/lib/rendezvous/MSC4108SignInWithQR.js +0 -392
  280. package/lib/rendezvous/MSC4108SignInWithQR.js.map +0 -1
  281. package/lib/rendezvous/RendezvousChannel.d.ts +0 -27
  282. package/lib/rendezvous/RendezvousChannel.d.ts.map +0 -1
  283. package/lib/rendezvous/RendezvousChannel.js +0 -1
  284. package/lib/rendezvous/RendezvousChannel.js.map +0 -1
  285. package/lib/rendezvous/RendezvousCode.d.ts +0 -9
  286. package/lib/rendezvous/RendezvousCode.d.ts.map +0 -1
  287. package/lib/rendezvous/RendezvousCode.js +0 -1
  288. package/lib/rendezvous/RendezvousCode.js.map +0 -1
  289. package/lib/rendezvous/RendezvousError.d.ts +0 -6
  290. package/lib/rendezvous/RendezvousError.d.ts.map +0 -1
  291. package/lib/rendezvous/RendezvousError.js +0 -23
  292. package/lib/rendezvous/RendezvousError.js.map +0 -1
  293. package/lib/rendezvous/RendezvousFailureReason.d.ts +0 -31
  294. package/lib/rendezvous/RendezvousFailureReason.d.ts.map +0 -1
  295. package/lib/rendezvous/RendezvousFailureReason.js +0 -38
  296. package/lib/rendezvous/RendezvousFailureReason.js.map +0 -1
  297. package/lib/rendezvous/RendezvousIntent.d.ts +0 -5
  298. package/lib/rendezvous/RendezvousIntent.d.ts.map +0 -1
  299. package/lib/rendezvous/RendezvousIntent.js +0 -22
  300. package/lib/rendezvous/RendezvousIntent.js.map +0 -1
  301. package/lib/rendezvous/RendezvousTransport.d.ts +0 -36
  302. package/lib/rendezvous/RendezvousTransport.d.ts.map +0 -1
  303. package/lib/rendezvous/RendezvousTransport.js +0 -1
  304. package/lib/rendezvous/RendezvousTransport.js.map +0 -1
  305. package/lib/rendezvous/channels/MSC4108SecureChannel.d.ts +0 -58
  306. package/lib/rendezvous/channels/MSC4108SecureChannel.d.ts.map +0 -1
  307. package/lib/rendezvous/channels/MSC4108SecureChannel.js +0 -246
  308. package/lib/rendezvous/channels/MSC4108SecureChannel.js.map +0 -1
  309. package/lib/rendezvous/channels/index.d.ts +0 -2
  310. package/lib/rendezvous/channels/index.d.ts.map +0 -1
  311. package/lib/rendezvous/channels/index.js +0 -18
  312. package/lib/rendezvous/channels/index.js.map +0 -1
  313. package/lib/rendezvous/index.d.ts +0 -10
  314. package/lib/rendezvous/index.d.ts.map +0 -1
  315. package/lib/rendezvous/index.js +0 -23
  316. package/lib/rendezvous/index.js.map +0 -1
  317. package/lib/rendezvous/transports/MSC4108RendezvousSession.d.ts +0 -61
  318. package/lib/rendezvous/transports/MSC4108RendezvousSession.d.ts.map +0 -1
  319. package/lib/rendezvous/transports/MSC4108RendezvousSession.js +0 -253
  320. package/lib/rendezvous/transports/MSC4108RendezvousSession.js.map +0 -1
  321. package/lib/rendezvous/transports/index.d.ts +0 -2
  322. package/lib/rendezvous/transports/index.d.ts.map +0 -1
  323. package/lib/rendezvous/transports/index.js +0 -18
  324. package/lib/rendezvous/transports/index.js.map +0 -1
  325. package/lib/rust-crypto/CrossSigningIdentity.d.ts +0 -33
  326. package/lib/rust-crypto/CrossSigningIdentity.d.ts.map +0 -1
  327. package/lib/rust-crypto/CrossSigningIdentity.js +0 -157
  328. package/lib/rust-crypto/CrossSigningIdentity.js.map +0 -1
  329. package/lib/rust-crypto/DehydratedDeviceManager.d.ts +0 -98
  330. package/lib/rust-crypto/DehydratedDeviceManager.d.ts.map +0 -1
  331. package/lib/rust-crypto/DehydratedDeviceManager.js +0 -285
  332. package/lib/rust-crypto/DehydratedDeviceManager.js.map +0 -1
  333. package/lib/rust-crypto/KeyClaimManager.d.ts +0 -33
  334. package/lib/rust-crypto/KeyClaimManager.d.ts.map +0 -1
  335. package/lib/rust-crypto/KeyClaimManager.js +0 -82
  336. package/lib/rust-crypto/KeyClaimManager.js.map +0 -1
  337. package/lib/rust-crypto/OutgoingRequestProcessor.d.ts +0 -43
  338. package/lib/rust-crypto/OutgoingRequestProcessor.d.ts.map +0 -1
  339. package/lib/rust-crypto/OutgoingRequestProcessor.js +0 -195
  340. package/lib/rust-crypto/OutgoingRequestProcessor.js.map +0 -1
  341. package/lib/rust-crypto/OutgoingRequestsManager.d.ts +0 -47
  342. package/lib/rust-crypto/OutgoingRequestsManager.d.ts.map +0 -1
  343. package/lib/rust-crypto/OutgoingRequestsManager.js +0 -148
  344. package/lib/rust-crypto/OutgoingRequestsManager.js.map +0 -1
  345. package/lib/rust-crypto/PerSessionKeyBackupDownloader.d.ts +0 -120
  346. package/lib/rust-crypto/PerSessionKeyBackupDownloader.d.ts.map +0 -1
  347. package/lib/rust-crypto/PerSessionKeyBackupDownloader.js +0 -467
  348. package/lib/rust-crypto/PerSessionKeyBackupDownloader.js.map +0 -1
  349. package/lib/rust-crypto/RoomEncryptor.d.ts +0 -98
  350. package/lib/rust-crypto/RoomEncryptor.d.ts.map +0 -1
  351. package/lib/rust-crypto/RoomEncryptor.js +0 -299
  352. package/lib/rust-crypto/RoomEncryptor.js.map +0 -1
  353. package/lib/rust-crypto/backup.d.ts +0 -254
  354. package/lib/rust-crypto/backup.d.ts.map +0 -1
  355. package/lib/rust-crypto/backup.js +0 -837
  356. package/lib/rust-crypto/backup.js.map +0 -1
  357. package/lib/rust-crypto/constants.d.ts +0 -3
  358. package/lib/rust-crypto/constants.d.ts.map +0 -1
  359. package/lib/rust-crypto/constants.js +0 -19
  360. package/lib/rust-crypto/constants.js.map +0 -1
  361. package/lib/rust-crypto/device-converter.d.ts +0 -28
  362. package/lib/rust-crypto/device-converter.d.ts.map +0 -1
  363. package/lib/rust-crypto/device-converter.js +0 -123
  364. package/lib/rust-crypto/device-converter.js.map +0 -1
  365. package/lib/rust-crypto/index.d.ts +0 -61
  366. package/lib/rust-crypto/index.d.ts.map +0 -1
  367. package/lib/rust-crypto/index.js +0 -152
  368. package/lib/rust-crypto/index.js.map +0 -1
  369. package/lib/rust-crypto/libolm_migration.d.ts +0 -81
  370. package/lib/rust-crypto/libolm_migration.d.ts.map +0 -1
  371. package/lib/rust-crypto/libolm_migration.js +0 -459
  372. package/lib/rust-crypto/libolm_migration.js.map +0 -1
  373. package/lib/rust-crypto/rust-crypto.d.ts +0 -556
  374. package/lib/rust-crypto/rust-crypto.d.ts.map +0 -1
  375. package/lib/rust-crypto/rust-crypto.js +0 -2016
  376. package/lib/rust-crypto/rust-crypto.js.map +0 -1
  377. package/lib/rust-crypto/secret-storage.d.ts +0 -22
  378. package/lib/rust-crypto/secret-storage.d.ts.map +0 -1
  379. package/lib/rust-crypto/secret-storage.js +0 -63
  380. package/lib/rust-crypto/secret-storage.js.map +0 -1
  381. package/lib/rust-crypto/verification.d.ts +0 -319
  382. package/lib/rust-crypto/verification.d.ts.map +0 -1
  383. package/lib/rust-crypto/verification.js +0 -816
  384. package/lib/rust-crypto/verification.js.map +0 -1
  385. package/lib/secret-storage.d.ts +0 -370
  386. package/lib/secret-storage.d.ts.map +0 -1
  387. package/lib/secret-storage.js +0 -466
  388. package/lib/secret-storage.js.map +0 -1
  389. package/src/@types/crypto.ts +0 -73
  390. package/src/@types/matrix-sdk-crypto-wasm.d.ts +0 -44
  391. package/src/common-crypto/CryptoBackend.ts +0 -302
  392. package/src/common-crypto/README.md +0 -4
  393. package/src/common-crypto/key-passphrase.ts +0 -43
  394. package/src/crypto/CrossSigning.ts +0 -773
  395. package/src/crypto/DeviceList.ts +0 -989
  396. package/src/crypto/EncryptionSetup.ts +0 -351
  397. package/src/crypto/OlmDevice.ts +0 -1500
  398. package/src/crypto/OutgoingRoomKeyRequestManager.ts +0 -485
  399. package/src/crypto/RoomList.ts +0 -70
  400. package/src/crypto/SecretSharing.ts +0 -240
  401. package/src/crypto/SecretStorage.ts +0 -136
  402. package/src/crypto/aes.ts +0 -23
  403. package/src/crypto/algorithms/base.ts +0 -236
  404. package/src/crypto/algorithms/index.ts +0 -20
  405. package/src/crypto/algorithms/megolm.ts +0 -2216
  406. package/src/crypto/algorithms/olm.ts +0 -381
  407. package/src/crypto/api.ts +0 -70
  408. package/src/crypto/backup.ts +0 -922
  409. package/src/crypto/crypto.ts +0 -18
  410. package/src/crypto/dehydration.ts +0 -272
  411. package/src/crypto/device-converter.ts +0 -45
  412. package/src/crypto/deviceinfo.ts +0 -158
  413. package/src/crypto/index.ts +0 -4414
  414. package/src/crypto/key_passphrase.ts +0 -42
  415. package/src/crypto/keybackup.ts +0 -47
  416. package/src/crypto/olmlib.ts +0 -539
  417. package/src/crypto/recoverykey.ts +0 -18
  418. package/src/crypto/store/base.ts +0 -348
  419. package/src/crypto/store/indexeddb-crypto-store-backend.ts +0 -1250
  420. package/src/crypto/store/indexeddb-crypto-store.ts +0 -845
  421. package/src/crypto/store/localStorage-crypto-store.ts +0 -579
  422. package/src/crypto/store/memory-crypto-store.ts +0 -680
  423. package/src/crypto/verification/Base.ts +0 -409
  424. package/src/crypto/verification/Error.ts +0 -76
  425. package/src/crypto/verification/IllegalMethod.ts +0 -50
  426. package/src/crypto/verification/QRCode.ts +0 -310
  427. package/src/crypto/verification/SAS.ts +0 -494
  428. package/src/crypto/verification/SASDecimal.ts +0 -37
  429. package/src/crypto/verification/request/Channel.ts +0 -34
  430. package/src/crypto/verification/request/InRoomChannel.ts +0 -371
  431. package/src/crypto/verification/request/ToDeviceChannel.ts +0 -354
  432. package/src/crypto/verification/request/VerificationRequest.ts +0 -976
  433. package/src/crypto-api/CryptoEvent.ts +0 -93
  434. package/src/crypto-api/CryptoEventHandlerMap.ts +0 -32
  435. package/src/crypto-api/index.ts +0 -1175
  436. package/src/crypto-api/key-passphrase.ts +0 -58
  437. package/src/crypto-api/keybackup.ts +0 -115
  438. package/src/crypto-api/recovery-key.ts +0 -69
  439. package/src/crypto-api/verification.ts +0 -408
  440. package/src/rendezvous/MSC4108SignInWithQR.ts +0 -444
  441. package/src/rendezvous/RendezvousChannel.ts +0 -48
  442. package/src/rendezvous/RendezvousCode.ts +0 -25
  443. package/src/rendezvous/RendezvousError.ts +0 -26
  444. package/src/rendezvous/RendezvousFailureReason.ts +0 -49
  445. package/src/rendezvous/RendezvousIntent.ts +0 -20
  446. package/src/rendezvous/RendezvousTransport.ts +0 -58
  447. package/src/rendezvous/channels/MSC4108SecureChannel.ts +0 -270
  448. package/src/rendezvous/channels/index.ts +0 -17
  449. package/src/rendezvous/index.ts +0 -25
  450. package/src/rendezvous/transports/MSC4108RendezvousSession.ts +0 -270
  451. package/src/rendezvous/transports/index.ts +0 -17
  452. package/src/rust-crypto/CrossSigningIdentity.ts +0 -183
  453. package/src/rust-crypto/DehydratedDeviceManager.ts +0 -306
  454. package/src/rust-crypto/KeyClaimManager.ts +0 -86
  455. package/src/rust-crypto/OutgoingRequestProcessor.ts +0 -236
  456. package/src/rust-crypto/OutgoingRequestsManager.ts +0 -143
  457. package/src/rust-crypto/PerSessionKeyBackupDownloader.ts +0 -501
  458. package/src/rust-crypto/RoomEncryptor.ts +0 -352
  459. package/src/rust-crypto/backup.ts +0 -881
  460. package/src/rust-crypto/constants.ts +0 -18
  461. package/src/rust-crypto/device-converter.ts +0 -128
  462. package/src/rust-crypto/index.ts +0 -237
  463. package/src/rust-crypto/libolm_migration.ts +0 -530
  464. package/src/rust-crypto/rust-crypto.ts +0 -2205
  465. package/src/rust-crypto/secret-storage.ts +0 -60
  466. package/src/rust-crypto/verification.ts +0 -830
  467. package/src/secret-storage.ts +0 -693
@@ -1,976 +0,0 @@
1
- /*
2
- Copyright 2018 - 2021 The Matrix.org Foundation C.I.C.
3
-
4
- Licensed under the Apache License, Version 2.0 (the "License");
5
- you may not use this file except in compliance with the License.
6
- You may obtain a copy of the License at
7
-
8
- http://www.apache.org/licenses/LICENSE-2.0
9
-
10
- Unless required by applicable law or agreed to in writing, software
11
- distributed under the License is distributed on an "AS IS" BASIS,
12
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- See the License for the specific language governing permissions and
14
- limitations under the License.
15
- */
16
-
17
- import { logger } from "../../../logger.ts";
18
- import { errorFactory, errorFromEvent, newUnexpectedMessageError, newUnknownMethodError } from "../Error.ts";
19
- import { QRCodeData, SCAN_QR_CODE_METHOD } from "../QRCode.ts";
20
- import { IVerificationChannel } from "./Channel.ts";
21
- import { MatrixClient } from "../../../client.ts";
22
- import { MatrixEvent } from "../../../models/event.ts";
23
- import { EventType } from "../../../@types/event.ts";
24
- import { VerificationBase } from "../Base.ts";
25
- import { VerificationMethod } from "../../index.ts";
26
- import { TypedEventEmitter } from "../../../models/typed-event-emitter.ts";
27
- import {
28
- canAcceptVerificationRequest,
29
- VerificationPhase as Phase,
30
- VerificationRequest as IVerificationRequest,
31
- VerificationRequestEvent,
32
- VerificationRequestEventHandlerMap,
33
- Verifier,
34
- } from "../../../crypto-api/verification.ts";
35
-
36
- // backwards-compatibility exports
37
- export { VerificationPhase as Phase, VerificationRequestEvent } from "../../../crypto-api/verification.ts";
38
-
39
- // How long after the event's timestamp that the request times out
40
- const TIMEOUT_FROM_EVENT_TS = 10 * 60 * 1000; // 10 minutes
41
-
42
- // How long after we receive the event that the request times out
43
- const TIMEOUT_FROM_EVENT_RECEIPT = 2 * 60 * 1000; // 2 minutes
44
-
45
- // to avoid almost expired verification notifications
46
- // from showing a notification and almost immediately
47
- // disappearing, also ignore verification requests that
48
- // are this amount of time away from expiring.
49
- const VERIFICATION_REQUEST_MARGIN = 3 * 1000; // 3 seconds
50
-
51
- export const EVENT_PREFIX = "m.key.verification.";
52
- export const REQUEST_TYPE = EVENT_PREFIX + "request";
53
- export const START_TYPE = EVENT_PREFIX + "start";
54
- export const CANCEL_TYPE = EVENT_PREFIX + "cancel";
55
- export const DONE_TYPE = EVENT_PREFIX + "done";
56
- export const READY_TYPE = EVENT_PREFIX + "ready";
57
-
58
- // Legacy export fields
59
- export const PHASE_UNSENT = Phase.Unsent;
60
- export const PHASE_REQUESTED = Phase.Requested;
61
- export const PHASE_READY = Phase.Ready;
62
- export const PHASE_STARTED = Phase.Started;
63
- export const PHASE_CANCELLED = Phase.Cancelled;
64
- export const PHASE_DONE = Phase.Done;
65
-
66
- interface ITargetDevice {
67
- userId?: string;
68
- deviceId?: string;
69
- }
70
-
71
- interface ITransition {
72
- phase: Phase;
73
- event?: MatrixEvent;
74
- }
75
-
76
- /**
77
- * State machine for verification requests.
78
- * Things that differ based on what channel is used to
79
- * send and receive verification events are put in `InRoomChannel` or `ToDeviceChannel`.
80
- *
81
- * @deprecated Avoid direct references: instead prefer {@link Crypto.VerificationRequest}.
82
- */
83
- export class VerificationRequest<C extends IVerificationChannel = IVerificationChannel>
84
- extends TypedEventEmitter<VerificationRequestEvent, VerificationRequestEventHandlerMap>
85
- implements IVerificationRequest
86
- {
87
- private eventsByUs = new Map<string, MatrixEvent>();
88
- private eventsByThem = new Map<string, MatrixEvent>();
89
- private _observeOnly = false;
90
- private timeoutTimer: ReturnType<typeof setTimeout> | null = null;
91
- private _accepting = false;
92
- private _declining = false;
93
- private verifierHasFinished = false;
94
- private _cancelled = false;
95
- private _chosenMethod: VerificationMethod | null = null;
96
- // we keep a copy of the QR Code data (including other user master key) around
97
- // for QR reciprocate verification, to protect against
98
- // cross-signing identity reset between the .ready and .start event
99
- // and signing the wrong key after .start
100
- private _qrCodeData: QRCodeData | null = null;
101
-
102
- // The timestamp when we received the request event from the other side
103
- private requestReceivedAt: number | null = null;
104
-
105
- private commonMethods: VerificationMethod[] = [];
106
- private _phase!: Phase;
107
- public _cancellingUserId?: string; // Used in tests only
108
- private _verifier?: VerificationBase<any, any>;
109
-
110
- public constructor(
111
- public readonly channel: C,
112
- private readonly verificationMethods: Map<VerificationMethod, typeof VerificationBase>,
113
- private readonly client: MatrixClient,
114
- ) {
115
- super();
116
- this.channel.request = this;
117
- this.setPhase(PHASE_UNSENT, false);
118
- }
119
-
120
- /**
121
- * Stateless validation logic not specific to the channel.
122
- * Invoked by the same static method in either channel.
123
- * @param type - the "symbolic" event type, as returned by the `getEventType` function on the channel.
124
- * @param event - the event to validate. Don't call getType() on it but use the `type` parameter instead.
125
- * @param client - the client to get the current user and device id from
126
- * @returns whether the event is valid and should be passed to handleEvent
127
- */
128
- public static validateEvent(type: string, event: MatrixEvent, client: MatrixClient): boolean {
129
- const content = event.getContent();
130
-
131
- if (!type || !type.startsWith(EVENT_PREFIX)) {
132
- return false;
133
- }
134
-
135
- // from here on we're fairly sure that this is supposed to be
136
- // part of a verification request, so be noisy when rejecting something
137
- if (!content) {
138
- logger.log("VerificationRequest: validateEvent: no content");
139
- return false;
140
- }
141
-
142
- if (type === REQUEST_TYPE || type === READY_TYPE) {
143
- if (!Array.isArray(content.methods)) {
144
- logger.log("VerificationRequest: validateEvent: " + "fail because methods");
145
- return false;
146
- }
147
- }
148
-
149
- if (type === REQUEST_TYPE || type === READY_TYPE || type === START_TYPE) {
150
- if (typeof content.from_device !== "string" || content.from_device.length === 0) {
151
- logger.log("VerificationRequest: validateEvent: " + "fail because from_device");
152
- return false;
153
- }
154
- }
155
-
156
- return true;
157
- }
158
-
159
- /**
160
- * Unique ID for this verification request.
161
- *
162
- * An ID isn't assigned until the first message is sent, so this may be `undefined` in the early phases.
163
- */
164
- public get transactionId(): string | undefined {
165
- return this.channel.transactionId;
166
- }
167
-
168
- /**
169
- * For an in-room verification, the ID of the room.
170
- */
171
- public get roomId(): string | undefined {
172
- return this.channel.roomId;
173
- }
174
-
175
- public get invalid(): boolean {
176
- return this.phase === PHASE_UNSENT;
177
- }
178
-
179
- /** returns whether the phase is PHASE_REQUESTED */
180
- public get requested(): boolean {
181
- return this.phase === PHASE_REQUESTED;
182
- }
183
-
184
- /** returns whether the phase is PHASE_CANCELLED */
185
- public get cancelled(): boolean {
186
- return this.phase === PHASE_CANCELLED;
187
- }
188
-
189
- /** returns whether the phase is PHASE_READY */
190
- public get ready(): boolean {
191
- return this.phase === PHASE_READY;
192
- }
193
-
194
- /** returns whether the phase is PHASE_STARTED */
195
- public get started(): boolean {
196
- return this.phase === PHASE_STARTED;
197
- }
198
-
199
- /** returns whether the phase is PHASE_DONE */
200
- public get done(): boolean {
201
- return this.phase === PHASE_DONE;
202
- }
203
-
204
- /** once the phase is PHASE_STARTED (and !initiatedByMe) or PHASE_READY: common methods supported by both sides */
205
- public get methods(): VerificationMethod[] {
206
- return this.commonMethods;
207
- }
208
-
209
- /** the method picked in the .start event */
210
- public get chosenMethod(): VerificationMethod | null {
211
- return this._chosenMethod;
212
- }
213
-
214
- public calculateEventTimeout(event: MatrixEvent): number {
215
- let effectiveExpiresAt = this.channel.getTimestamp(event) + TIMEOUT_FROM_EVENT_TS;
216
-
217
- if (this.requestReceivedAt && !this.initiatedByMe && this.phase <= PHASE_REQUESTED) {
218
- const expiresAtByReceipt = this.requestReceivedAt + TIMEOUT_FROM_EVENT_RECEIPT;
219
- effectiveExpiresAt = Math.min(effectiveExpiresAt, expiresAtByReceipt);
220
- }
221
-
222
- return Math.max(0, effectiveExpiresAt - Date.now());
223
- }
224
-
225
- /** The current remaining amount of ms before the request should be automatically cancelled */
226
- public get timeout(): number {
227
- const requestEvent = this.getEventByEither(REQUEST_TYPE);
228
- if (requestEvent) {
229
- return this.calculateEventTimeout(requestEvent);
230
- }
231
- return 0;
232
- }
233
-
234
- /**
235
- * The key verification request event.
236
- * @returns The request event, or falsey if not found.
237
- */
238
- public get requestEvent(): MatrixEvent | undefined {
239
- return this.getEventByEither(REQUEST_TYPE);
240
- }
241
-
242
- /** current phase of the request. Some properties might only be defined in a current phase. */
243
- public get phase(): Phase {
244
- return this._phase;
245
- }
246
-
247
- /** The verifier to do the actual verification, once the method has been established. Only defined when the `phase` is PHASE_STARTED. */
248
- public get verifier(): VerificationBase<any, any> | undefined {
249
- return this._verifier;
250
- }
251
-
252
- public get canAccept(): boolean {
253
- return canAcceptVerificationRequest(this);
254
- }
255
-
256
- public get accepting(): boolean {
257
- return this._accepting;
258
- }
259
-
260
- public get declining(): boolean {
261
- return this._declining;
262
- }
263
-
264
- /** whether this request has sent it's initial event and needs more events to complete */
265
- public get pending(): boolean {
266
- return !this.observeOnly && this._phase !== PHASE_DONE && this._phase !== PHASE_CANCELLED;
267
- }
268
-
269
- /** Only set after a .ready if the other party can scan a QR code
270
- *
271
- * @deprecated Prefer `generateQRCode`.
272
- */
273
- public get qrCodeData(): QRCodeData | null {
274
- return this._qrCodeData;
275
- }
276
-
277
- /**
278
- * Get the data for a QR code allowing the other device to verify this one, if it supports it.
279
- *
280
- * Only set after a .ready if the other party can scan a QR code, otherwise undefined.
281
- *
282
- * @deprecated Prefer `generateQRCode`.
283
- */
284
- public getQRCodeBytes(): Buffer | undefined {
285
- return this._qrCodeData?.getBuffer();
286
- }
287
-
288
- /**
289
- * Generate the data for a QR code allowing the other device to verify this one, if it supports it.
290
- *
291
- * Only returns data once `phase` is `Ready` and the other party can scan a QR code;
292
- * otherwise returns `undefined`.
293
- */
294
- public async generateQRCode(): Promise<Buffer | undefined> {
295
- return this.getQRCodeBytes();
296
- }
297
-
298
- /** Checks whether the other party supports a given verification method.
299
- * This is useful when setting up the QR code UI, as it is somewhat asymmetrical:
300
- * if the other party supports SCAN_QR, we should show a QR code in the UI, and vice versa.
301
- * For methods that need to be supported by both ends, use the `methods` property.
302
- * @param method - the method to check
303
- * @param force - to check even if the phase is not ready or started yet, internal usage
304
- * @returns whether or not the other party said the supported the method */
305
- public otherPartySupportsMethod(method: string, force = false): boolean {
306
- if (!force && !this.ready && !this.started) {
307
- return false;
308
- }
309
- const theirMethodEvent = this.eventsByThem.get(REQUEST_TYPE) || this.eventsByThem.get(READY_TYPE);
310
- if (!theirMethodEvent) {
311
- // if we started straight away with .start event,
312
- // we are assuming that the other side will support the
313
- // chosen method, so return true for that.
314
- if (this.started && this.initiatedByMe) {
315
- const myStartEvent = this.eventsByUs.get(START_TYPE);
316
- const content = myStartEvent && myStartEvent.getContent();
317
- const myStartMethod = content && content.method;
318
- return method == myStartMethod;
319
- }
320
- return false;
321
- }
322
- const content = theirMethodEvent.getContent();
323
- if (!content) {
324
- return false;
325
- }
326
- const { methods } = content;
327
- if (!Array.isArray(methods)) {
328
- return false;
329
- }
330
-
331
- return methods.includes(method);
332
- }
333
-
334
- /** Whether this request was initiated by the syncing user.
335
- * For InRoomChannel, this is who sent the .request event.
336
- * For ToDeviceChannel, this is who sent the .start event
337
- */
338
- public get initiatedByMe(): boolean {
339
- // event created by us but no remote echo has been received yet
340
- const noEventsYet = this.eventsByUs.size + this.eventsByThem.size === 0;
341
- if (this._phase === PHASE_UNSENT && noEventsYet) {
342
- return true;
343
- }
344
- const hasMyRequest = this.eventsByUs.has(REQUEST_TYPE);
345
- const hasTheirRequest = this.eventsByThem.has(REQUEST_TYPE);
346
- if (hasMyRequest && !hasTheirRequest) {
347
- return true;
348
- }
349
- if (!hasMyRequest && hasTheirRequest) {
350
- return false;
351
- }
352
- const hasMyStart = this.eventsByUs.has(START_TYPE);
353
- const hasTheirStart = this.eventsByThem.has(START_TYPE);
354
- if (hasMyStart && !hasTheirStart) {
355
- return true;
356
- }
357
- return false;
358
- }
359
-
360
- /** The id of the user that initiated the request */
361
- public get requestingUserId(): string {
362
- if (this.initiatedByMe) {
363
- return this.client.getUserId()!;
364
- } else {
365
- return this.otherUserId;
366
- }
367
- }
368
-
369
- /** The id of the user that (will) receive(d) the request */
370
- public get receivingUserId(): string {
371
- if (this.initiatedByMe) {
372
- return this.otherUserId;
373
- } else {
374
- return this.client.getUserId()!;
375
- }
376
- }
377
-
378
- /** The user id of the other party in this request */
379
- public get otherUserId(): string {
380
- return this.channel.userId!;
381
- }
382
-
383
- /** The device id of the other party in this request, for requests happening over to-device messages only. */
384
- public get otherDeviceId(): string | undefined {
385
- return this.channel.deviceId;
386
- }
387
-
388
- public get isSelfVerification(): boolean {
389
- return this.client.getUserId() === this.otherUserId;
390
- }
391
-
392
- /**
393
- * The id of the user that cancelled the request,
394
- * only defined when phase is PHASE_CANCELLED
395
- */
396
- public get cancellingUserId(): string | undefined {
397
- const myCancel = this.eventsByUs.get(CANCEL_TYPE);
398
- const theirCancel = this.eventsByThem.get(CANCEL_TYPE);
399
-
400
- if (myCancel && (!theirCancel || myCancel.getId()! < theirCancel.getId()!)) {
401
- return myCancel.getSender();
402
- }
403
- if (theirCancel) {
404
- return theirCancel.getSender();
405
- }
406
- return undefined;
407
- }
408
-
409
- /**
410
- * The cancellation code e.g m.user which is responsible for cancelling this verification
411
- */
412
- public get cancellationCode(): string {
413
- const ev = this.getEventByEither(CANCEL_TYPE);
414
- return ev ? ev.getContent().code : null;
415
- }
416
-
417
- public get observeOnly(): boolean {
418
- return this._observeOnly;
419
- }
420
-
421
- /**
422
- * Gets which device the verification should be started with
423
- * given the events sent so far in the verification. This is the
424
- * same algorithm used to determine which device to send the
425
- * verification to when no specific device is specified.
426
- * @returns The device information
427
- */
428
- public get targetDevice(): ITargetDevice {
429
- const theirFirstEvent =
430
- this.eventsByThem.get(REQUEST_TYPE) ||
431
- this.eventsByThem.get(READY_TYPE) ||
432
- this.eventsByThem.get(START_TYPE);
433
- const theirFirstContent = theirFirstEvent?.getContent();
434
- const fromDevice = theirFirstContent?.from_device;
435
- return {
436
- userId: this.otherUserId,
437
- deviceId: fromDevice,
438
- };
439
- }
440
-
441
- /* Start the key verification, creating a verifier and sending a .start event.
442
- * If no previous events have been sent, pass in `targetDevice` to set who to direct this request to.
443
- * @param method - the name of the verification method to use.
444
- * @param targetDevice.userId the id of the user to direct this request to
445
- * @param targetDevice.deviceId the id of the device to direct this request to
446
- * @returns the verifier of the given method
447
- */
448
- public beginKeyVerification(
449
- method: VerificationMethod,
450
- targetDevice: ITargetDevice | null = null,
451
- ): VerificationBase<any, any> {
452
- // need to allow also when unsent in case of to_device
453
- if (!this.observeOnly && !this._verifier) {
454
- const validStartPhase =
455
- this.phase === PHASE_REQUESTED ||
456
- this.phase === PHASE_READY ||
457
- (this.phase === PHASE_UNSENT && this.channel.canCreateRequest(START_TYPE));
458
- if (validStartPhase) {
459
- // when called on a request that was initiated with .request event
460
- // check the method is supported by both sides
461
- if (this.commonMethods.length && !this.commonMethods.includes(method)) {
462
- throw newUnknownMethodError();
463
- }
464
- this._verifier = this.createVerifier(method, null, targetDevice);
465
- if (!this._verifier) {
466
- throw newUnknownMethodError();
467
- }
468
- this._chosenMethod = method;
469
- }
470
- }
471
- return this._verifier!;
472
- }
473
-
474
- public async startVerification(method: string): Promise<Verifier> {
475
- const verifier = this.beginKeyVerification(method);
476
- // kick off the verification in the background, but *don't* wait for to complete: we need to return the `Verifier`.
477
- verifier.verify();
478
- return verifier;
479
- }
480
-
481
- public scanQRCode(qrCodeData: Uint8Array): Promise<Verifier> {
482
- throw new Error("QR code scanning not supported by legacy crypto");
483
- }
484
-
485
- /**
486
- * sends the initial .request event.
487
- * @returns resolves when the event has been sent.
488
- */
489
- public async sendRequest(): Promise<void> {
490
- if (!this.observeOnly && this._phase === PHASE_UNSENT) {
491
- const methods = [...this.verificationMethods.keys()];
492
- await this.channel.send(REQUEST_TYPE, { methods });
493
- }
494
- }
495
-
496
- /**
497
- * Cancels the request, sending a cancellation to the other party
498
- * @param params
499
- * @param params.reason - the error reason to send the cancellation with
500
- * @param params.code - the error code to send the cancellation with
501
- * @returns resolves when the event has been sent.
502
- */
503
- public async cancel({ reason = "User declined", code = "m.user" } = {}): Promise<void> {
504
- if (!this.observeOnly && this._phase !== PHASE_CANCELLED) {
505
- this._declining = true;
506
- this.emit(VerificationRequestEvent.Change);
507
- if (this._verifier) {
508
- return this._verifier.cancel(errorFactory(code, reason)());
509
- } else {
510
- this._cancellingUserId = this.client.getUserId()!;
511
- await this.channel.send(CANCEL_TYPE, { code, reason });
512
- }
513
- }
514
- }
515
-
516
- /**
517
- * Accepts the request, sending a .ready event to the other party
518
- * @returns resolves when the event has been sent.
519
- */
520
- public async accept(): Promise<void> {
521
- if (!this.observeOnly && this.phase === PHASE_REQUESTED && !this.initiatedByMe) {
522
- const methods = [...this.verificationMethods.keys()];
523
- this._accepting = true;
524
- this.emit(VerificationRequestEvent.Change);
525
- await this.channel.send(READY_TYPE, { methods });
526
- }
527
- }
528
-
529
- /**
530
- * Can be used to listen for state changes until the callback returns true.
531
- * @param fn - callback to evaluate whether the request is in the desired state.
532
- * Takes the request as an argument.
533
- * @returns that resolves once the callback returns true
534
- * @throws Error when the request is cancelled
535
- */
536
- public waitFor(fn: (request: VerificationRequest) => boolean): Promise<VerificationRequest> {
537
- return new Promise((resolve, reject) => {
538
- const check = (): boolean => {
539
- let handled = false;
540
- if (fn(this)) {
541
- resolve(this);
542
- handled = true;
543
- } else if (this.cancelled) {
544
- reject(new Error("cancelled"));
545
- handled = true;
546
- }
547
- if (handled) {
548
- this.off(VerificationRequestEvent.Change, check);
549
- }
550
- return handled;
551
- };
552
- if (!check()) {
553
- this.on(VerificationRequestEvent.Change, check);
554
- }
555
- });
556
- }
557
-
558
- private setPhase(phase: Phase, notify = true): void {
559
- this._phase = phase;
560
- if (notify) {
561
- this.emit(VerificationRequestEvent.Change);
562
- }
563
- }
564
-
565
- private getEventByEither(type: string): MatrixEvent | undefined {
566
- return this.eventsByThem.get(type) || this.eventsByUs.get(type);
567
- }
568
-
569
- private getEventBy(type: string, byThem = false): MatrixEvent | undefined {
570
- if (byThem) {
571
- return this.eventsByThem.get(type);
572
- } else {
573
- return this.eventsByUs.get(type);
574
- }
575
- }
576
-
577
- private calculatePhaseTransitions(): ITransition[] {
578
- const transitions: ITransition[] = [{ phase: PHASE_UNSENT }];
579
- const phase = (): Phase => transitions[transitions.length - 1].phase;
580
-
581
- // always pass by .request first to be sure channel.userId has been set
582
- const hasRequestByThem = this.eventsByThem.has(REQUEST_TYPE);
583
- const requestEvent = this.getEventBy(REQUEST_TYPE, hasRequestByThem);
584
- if (requestEvent) {
585
- transitions.push({ phase: PHASE_REQUESTED, event: requestEvent });
586
- }
587
-
588
- const readyEvent = requestEvent && this.getEventBy(READY_TYPE, !hasRequestByThem);
589
- if (readyEvent && phase() === PHASE_REQUESTED) {
590
- transitions.push({ phase: PHASE_READY, event: readyEvent });
591
- }
592
-
593
- let startEvent: MatrixEvent | undefined;
594
- if (readyEvent || !requestEvent) {
595
- const theirStartEvent = this.eventsByThem.get(START_TYPE);
596
- const ourStartEvent = this.eventsByUs.get(START_TYPE);
597
- // any party can send .start after a .ready or unsent
598
- if (theirStartEvent && ourStartEvent) {
599
- startEvent =
600
- theirStartEvent.getSender()! < ourStartEvent.getSender()! ? theirStartEvent : ourStartEvent;
601
- } else {
602
- startEvent = theirStartEvent ? theirStartEvent : ourStartEvent;
603
- }
604
- } else {
605
- startEvent = this.getEventBy(START_TYPE, !hasRequestByThem);
606
- }
607
- if (startEvent) {
608
- const fromRequestPhase =
609
- phase() === PHASE_REQUESTED && requestEvent?.getSender() !== startEvent.getSender();
610
- const fromUnsentPhase = phase() === PHASE_UNSENT && this.channel.canCreateRequest(START_TYPE);
611
- if (fromRequestPhase || phase() === PHASE_READY || fromUnsentPhase) {
612
- transitions.push({ phase: PHASE_STARTED, event: startEvent });
613
- }
614
- }
615
-
616
- const ourDoneEvent = this.eventsByUs.get(DONE_TYPE);
617
- if (this.verifierHasFinished || (ourDoneEvent && phase() === PHASE_STARTED)) {
618
- transitions.push({ phase: PHASE_DONE });
619
- }
620
-
621
- const cancelEvent = this.getEventByEither(CANCEL_TYPE);
622
- if ((this._cancelled || cancelEvent) && phase() !== PHASE_DONE) {
623
- transitions.push({ phase: PHASE_CANCELLED, event: cancelEvent });
624
- return transitions;
625
- }
626
-
627
- return transitions;
628
- }
629
-
630
- private transitionToPhase(transition: ITransition): void {
631
- const { phase, event } = transition;
632
- // get common methods
633
- if (phase === PHASE_REQUESTED || phase === PHASE_READY) {
634
- if (!this.wasSentByOwnDevice(event)) {
635
- const content = event!.getContent<{
636
- methods: string[];
637
- }>();
638
- this.commonMethods = content.methods.filter((m) => this.verificationMethods.has(m));
639
- }
640
- }
641
- // detect if we're not a party in the request, and we should just observe
642
- if (!this.observeOnly) {
643
- // if requested or accepted by one of my other devices
644
- if (phase === PHASE_REQUESTED || phase === PHASE_STARTED || phase === PHASE_READY) {
645
- if (
646
- this.channel.receiveStartFromOtherDevices &&
647
- this.wasSentByOwnUser(event) &&
648
- !this.wasSentByOwnDevice(event)
649
- ) {
650
- this._observeOnly = true;
651
- }
652
- }
653
- }
654
- // create verifier
655
- if (phase === PHASE_STARTED) {
656
- const { method } = event!.getContent();
657
- if (!this._verifier && !this.observeOnly) {
658
- this._verifier = this.createVerifier(method, event);
659
- if (!this._verifier) {
660
- this.cancel({
661
- code: "m.unknown_method",
662
- reason: `Unknown method: ${method}`,
663
- });
664
- } else {
665
- this._chosenMethod = method;
666
- }
667
- }
668
- }
669
- }
670
-
671
- private applyPhaseTransitions(): ITransition[] {
672
- const transitions = this.calculatePhaseTransitions();
673
- const existingIdx = transitions.findIndex((t) => t.phase === this.phase);
674
- // trim off phases we already went through, if any
675
- const newTransitions = transitions.slice(existingIdx + 1);
676
- // transition to all new phases
677
- for (const transition of newTransitions) {
678
- this.transitionToPhase(transition);
679
- }
680
- return newTransitions;
681
- }
682
-
683
- private isWinningStartRace(newEvent: MatrixEvent): boolean {
684
- if (newEvent.getType() !== START_TYPE) {
685
- return false;
686
- }
687
- const oldEvent = this._verifier!.startEvent;
688
-
689
- let oldRaceIdentifier;
690
- if (this.isSelfVerification) {
691
- // if the verifier does not have a startEvent,
692
- // it is because it's still sending and we are on the initator side
693
- // we know we are sending a .start event because we already
694
- // have a verifier (checked in calling method)
695
- if (oldEvent) {
696
- const oldContent = oldEvent.getContent();
697
- oldRaceIdentifier = oldContent && oldContent.from_device;
698
- } else {
699
- oldRaceIdentifier = this.client.getDeviceId();
700
- }
701
- } else {
702
- if (oldEvent) {
703
- oldRaceIdentifier = oldEvent.getSender();
704
- } else {
705
- oldRaceIdentifier = this.client.getUserId();
706
- }
707
- }
708
-
709
- let newRaceIdentifier;
710
- if (this.isSelfVerification) {
711
- const newContent = newEvent.getContent();
712
- newRaceIdentifier = newContent && newContent.from_device;
713
- } else {
714
- newRaceIdentifier = newEvent.getSender();
715
- }
716
- return newRaceIdentifier < oldRaceIdentifier;
717
- }
718
-
719
- public hasEventId(eventId: string): boolean {
720
- for (const event of this.eventsByUs.values()) {
721
- if (event.getId() === eventId) {
722
- return true;
723
- }
724
- }
725
- for (const event of this.eventsByThem.values()) {
726
- if (event.getId() === eventId) {
727
- return true;
728
- }
729
- }
730
- return false;
731
- }
732
-
733
- /**
734
- * Changes the state of the request and verifier in response to a key verification event.
735
- * @param type - the "symbolic" event type, as returned by the `getEventType` function on the channel.
736
- * @param event - the event to handle. Don't call getType() on it but use the `type` parameter instead.
737
- * @param isLiveEvent - whether this is an even received through sync or not
738
- * @param isRemoteEcho - whether this is the remote echo of an event sent by the same device
739
- * @param isSentByUs - whether this event is sent by a party that can accept and/or observe the request like one of our peers.
740
- * For InRoomChannel this means any device for the syncing user. For ToDeviceChannel, just the syncing device.
741
- * @returns a promise that resolves when any requests as an answer to the passed-in event are sent.
742
- */
743
- public async handleEvent(
744
- type: string,
745
- event: MatrixEvent,
746
- isLiveEvent: boolean,
747
- isRemoteEcho: boolean,
748
- isSentByUs: boolean,
749
- ): Promise<void> {
750
- // if reached phase cancelled or done, ignore anything else that comes
751
- if (this.done || this.cancelled) {
752
- return;
753
- }
754
- const wasObserveOnly = this._observeOnly;
755
-
756
- this.adjustObserveOnly(event, isLiveEvent);
757
-
758
- if (!this.observeOnly && !isRemoteEcho) {
759
- if (await this.cancelOnError(type, event)) {
760
- return;
761
- }
762
- }
763
-
764
- // This assumes verification won't need to send an event with
765
- // the same type for the same party twice.
766
- // This is true for QR and SAS verification, and was
767
- // added here to prevent verification getting cancelled
768
- // when the server duplicates an event (https://github.com/matrix-org/synapse/issues/3365)
769
- const isDuplicateEvent = isSentByUs ? this.eventsByUs.has(type) : this.eventsByThem.has(type);
770
- if (isDuplicateEvent) {
771
- return;
772
- }
773
-
774
- const oldPhase = this.phase;
775
- this.addEvent(type, event, isSentByUs);
776
-
777
- // this will create if needed the verifier so needs to happen before calling it
778
- const newTransitions = this.applyPhaseTransitions();
779
- try {
780
- // only pass events from the other side to the verifier,
781
- // no remote echos of our own events
782
- if (this._verifier && !this.observeOnly) {
783
- const newEventWinsRace = this.isWinningStartRace(event);
784
- if (this._verifier.canSwitchStartEvent(event) && newEventWinsRace) {
785
- this._verifier.switchStartEvent(event);
786
- } else if (!isRemoteEcho) {
787
- if (type === CANCEL_TYPE || this._verifier.events?.includes(type)) {
788
- this._verifier.handleEvent(event);
789
- }
790
- }
791
- }
792
-
793
- if (newTransitions.length) {
794
- // create QRCodeData if the other side can scan
795
- // important this happens before emitting a phase change,
796
- // so listeners can rely on it being there already
797
- // We only do this for live events because it is important that
798
- // we sign the keys that were in the QR code, and not the keys
799
- // we happen to have at some later point in time.
800
- if (isLiveEvent && newTransitions.some((t) => t.phase === PHASE_READY)) {
801
- const shouldGenerateQrCode = this.otherPartySupportsMethod(SCAN_QR_CODE_METHOD, true);
802
- if (shouldGenerateQrCode) {
803
- this._qrCodeData = await QRCodeData.create(this, this.client);
804
- }
805
- }
806
-
807
- const lastTransition = newTransitions[newTransitions.length - 1];
808
- const { phase } = lastTransition;
809
-
810
- this.setupTimeout(phase);
811
- // set phase as last thing as this emits the "change" event
812
- this.setPhase(phase);
813
- } else if (this._observeOnly !== wasObserveOnly) {
814
- this.emit(VerificationRequestEvent.Change);
815
- }
816
- } finally {
817
- // log events we processed so we can see from rageshakes what events were added to a request
818
- logger.log(
819
- `Verification request ${this.channel.transactionId}: ` +
820
- `${type} event with id:${event.getId()}, ` +
821
- `content:${JSON.stringify(event.getContent())} ` +
822
- `deviceId:${this.channel.deviceId}, ` +
823
- `sender:${event.getSender()}, isSentByUs:${isSentByUs}, ` +
824
- `isLiveEvent:${isLiveEvent}, isRemoteEcho:${isRemoteEcho}, ` +
825
- `phase:${oldPhase}=>${this.phase}, ` +
826
- `observeOnly:${wasObserveOnly}=>${this._observeOnly}`,
827
- );
828
- }
829
- }
830
-
831
- private setupTimeout(phase: Phase): void {
832
- const shouldTimeout = !this.timeoutTimer && !this.observeOnly && phase === PHASE_REQUESTED;
833
-
834
- if (shouldTimeout) {
835
- this.timeoutTimer = setTimeout(this.cancelOnTimeout, this.timeout);
836
- }
837
- if (this.timeoutTimer) {
838
- const shouldClear =
839
- phase === PHASE_STARTED || phase === PHASE_READY || phase === PHASE_DONE || phase === PHASE_CANCELLED;
840
- if (shouldClear) {
841
- clearTimeout(this.timeoutTimer);
842
- this.timeoutTimer = null;
843
- }
844
- }
845
- }
846
-
847
- private cancelOnTimeout = async (): Promise<void> => {
848
- try {
849
- if (this.initiatedByMe) {
850
- await this.cancel({
851
- reason: "Other party didn't accept in time",
852
- code: "m.timeout",
853
- });
854
- } else {
855
- await this.cancel({
856
- reason: "User didn't accept in time",
857
- code: "m.timeout",
858
- });
859
- }
860
- } catch (err) {
861
- logger.error("Error while cancelling verification request", err);
862
- }
863
- };
864
-
865
- private async cancelOnError(type: string, event: MatrixEvent): Promise<boolean> {
866
- if (type === START_TYPE) {
867
- const method = event.getContent().method;
868
- if (!this.verificationMethods.has(method)) {
869
- await this.cancel(errorFromEvent(newUnknownMethodError()));
870
- return true;
871
- }
872
- }
873
-
874
- const isUnexpectedRequest = type === REQUEST_TYPE && this.phase !== PHASE_UNSENT;
875
- const isUnexpectedReady = type === READY_TYPE && this.phase !== PHASE_REQUESTED && this.phase !== PHASE_STARTED;
876
- // only if phase has passed from PHASE_UNSENT should we cancel, because events
877
- // are allowed to come in in any order (at least with InRoomChannel). So we only know
878
- // we're dealing with a valid request we should participate in once we've moved to PHASE_REQUESTED.
879
- // Before that, we could be looking at somebody else's verification request and we just
880
- // happen to be in the room
881
- if (this.phase !== PHASE_UNSENT && (isUnexpectedRequest || isUnexpectedReady)) {
882
- logger.warn(`Cancelling, unexpected ${type} verification ` + `event from ${event.getSender()}`);
883
- const reason = `Unexpected ${type} event in phase ${this.phase}`;
884
- await this.cancel(errorFromEvent(newUnexpectedMessageError({ reason })));
885
- return true;
886
- }
887
- return false;
888
- }
889
-
890
- private adjustObserveOnly(event: MatrixEvent, isLiveEvent = false): void {
891
- // don't send out events for historical requests
892
- if (!isLiveEvent) {
893
- this._observeOnly = true;
894
- }
895
- if (this.calculateEventTimeout(event) < VERIFICATION_REQUEST_MARGIN) {
896
- this._observeOnly = true;
897
- }
898
- }
899
-
900
- private addEvent(type: string, event: MatrixEvent, isSentByUs = false): void {
901
- if (isSentByUs) {
902
- this.eventsByUs.set(type, event);
903
- } else {
904
- this.eventsByThem.set(type, event);
905
- }
906
-
907
- // once we know the userId of the other party (from the .request event)
908
- // see if any event by anyone else crept into this.eventsByThem
909
- if (type === REQUEST_TYPE) {
910
- for (const [type, event] of this.eventsByThem.entries()) {
911
- if (event.getSender() !== this.otherUserId) {
912
- this.eventsByThem.delete(type);
913
- }
914
- }
915
- // also remember when we received the request event
916
- this.requestReceivedAt = Date.now();
917
- }
918
- }
919
-
920
- private createVerifier(
921
- method: VerificationMethod,
922
- startEvent: MatrixEvent | null = null,
923
- targetDevice: ITargetDevice | null = null,
924
- ): VerificationBase<any, any> | undefined {
925
- if (!targetDevice) {
926
- targetDevice = this.targetDevice;
927
- }
928
- const { userId, deviceId } = targetDevice;
929
-
930
- const VerifierCtor = this.verificationMethods.get(method);
931
- if (!VerifierCtor) {
932
- logger.warn("could not find verifier constructor for method", method);
933
- return;
934
- }
935
- return new VerifierCtor(this.channel, this.client, userId!, deviceId!, startEvent, this);
936
- }
937
-
938
- private wasSentByOwnUser(event?: MatrixEvent): boolean {
939
- return event?.getSender() === this.client.getUserId();
940
- }
941
-
942
- // only for .request, .ready or .start
943
- private wasSentByOwnDevice(event?: MatrixEvent): boolean {
944
- if (!this.wasSentByOwnUser(event)) {
945
- return false;
946
- }
947
- const content = event!.getContent();
948
- if (!content || content.from_device !== this.client.getDeviceId()) {
949
- return false;
950
- }
951
- return true;
952
- }
953
-
954
- public onVerifierCancelled(): void {
955
- this._cancelled = true;
956
- // move to cancelled phase
957
- const newTransitions = this.applyPhaseTransitions();
958
- if (newTransitions.length) {
959
- this.setPhase(newTransitions[newTransitions.length - 1].phase);
960
- }
961
- }
962
-
963
- public onVerifierFinished(): void {
964
- this.channel.send(EventType.KeyVerificationDone, {});
965
- this.verifierHasFinished = true;
966
- // move to .done phase
967
- const newTransitions = this.applyPhaseTransitions();
968
- if (newTransitions.length) {
969
- this.setPhase(newTransitions[newTransitions.length - 1].phase);
970
- }
971
- }
972
-
973
- public getEventFromOtherParty(type: string): MatrixEvent | undefined {
974
- return this.eventsByThem.get(type);
975
- }
976
- }