@textrp/briij-js-sdk 41.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1104) hide show
  1. package/CHANGELOG.md +6464 -0
  2. package/LICENSE +177 -0
  3. package/README.md +477 -0
  4. package/lib/@types/AESEncryptedSecretStoragePayload.d.ts +14 -0
  5. package/lib/@types/AESEncryptedSecretStoragePayload.d.ts.map +1 -0
  6. package/lib/@types/AESEncryptedSecretStoragePayload.js +1 -0
  7. package/lib/@types/AESEncryptedSecretStoragePayload.js.map +1 -0
  8. package/lib/@types/IIdentityServerProvider.d.ts +9 -0
  9. package/lib/@types/IIdentityServerProvider.d.ts.map +1 -0
  10. package/lib/@types/IIdentityServerProvider.js +1 -0
  11. package/lib/@types/IIdentityServerProvider.js.map +1 -0
  12. package/lib/@types/PushRules.d.ts +140 -0
  13. package/lib/@types/PushRules.d.ts.map +1 -0
  14. package/lib/@types/PushRules.js +94 -0
  15. package/lib/@types/PushRules.js.map +1 -0
  16. package/lib/@types/another-json.d.js +0 -0
  17. package/lib/@types/another-json.d.js.map +1 -0
  18. package/lib/@types/auth.d.ts +213 -0
  19. package/lib/@types/auth.d.ts.map +1 -0
  20. package/lib/@types/auth.js +107 -0
  21. package/lib/@types/auth.js.map +1 -0
  22. package/lib/@types/beacon.d.ts +106 -0
  23. package/lib/@types/beacon.d.ts.map +1 -0
  24. package/lib/@types/beacon.js +119 -0
  25. package/lib/@types/beacon.js.map +1 -0
  26. package/lib/@types/common.d.ts +10 -0
  27. package/lib/@types/common.d.ts.map +1 -0
  28. package/lib/@types/common.js +1 -0
  29. package/lib/@types/common.js.map +1 -0
  30. package/lib/@types/crypto.d.ts +46 -0
  31. package/lib/@types/crypto.d.ts.map +1 -0
  32. package/lib/@types/crypto.js +1 -0
  33. package/lib/@types/crypto.js.map +1 -0
  34. package/lib/@types/event.d.ts +356 -0
  35. package/lib/@types/event.d.ts.map +1 -0
  36. package/lib/@types/event.js +280 -0
  37. package/lib/@types/event.js.map +1 -0
  38. package/lib/@types/events.d.ts +92 -0
  39. package/lib/@types/events.d.ts.map +1 -0
  40. package/lib/@types/events.js +1 -0
  41. package/lib/@types/events.js.map +1 -0
  42. package/lib/@types/extensible_events.d.ts +98 -0
  43. package/lib/@types/extensible_events.d.ts.map +1 -0
  44. package/lib/@types/extensible_events.js +116 -0
  45. package/lib/@types/extensible_events.js.map +1 -0
  46. package/lib/@types/global.d.js +18 -0
  47. package/lib/@types/global.d.js.map +1 -0
  48. package/lib/@types/local_notifications.d.ts +4 -0
  49. package/lib/@types/local_notifications.d.ts.map +1 -0
  50. package/lib/@types/local_notifications.js +1 -0
  51. package/lib/@types/local_notifications.js.map +1 -0
  52. package/lib/@types/location.d.ts +60 -0
  53. package/lib/@types/location.d.ts.map +1 -0
  54. package/lib/@types/location.js +66 -0
  55. package/lib/@types/location.js.map +1 -0
  56. package/lib/@types/matrix-sdk-crypto-wasm.d.js +1 -0
  57. package/lib/@types/matrix-sdk-crypto-wasm.d.js.map +1 -0
  58. package/lib/@types/media.d.ts +220 -0
  59. package/lib/@types/media.d.ts.map +1 -0
  60. package/lib/@types/media.js +1 -0
  61. package/lib/@types/media.js.map +1 -0
  62. package/lib/@types/membership.d.ts +41 -0
  63. package/lib/@types/membership.d.ts.map +1 -0
  64. package/lib/@types/membership.js +58 -0
  65. package/lib/@types/membership.js.map +1 -0
  66. package/lib/@types/partials.d.ts +72 -0
  67. package/lib/@types/partials.d.ts.map +1 -0
  68. package/lib/@types/partials.js +71 -0
  69. package/lib/@types/partials.js.map +1 -0
  70. package/lib/@types/polls.d.ts +89 -0
  71. package/lib/@types/polls.d.ts.map +1 -0
  72. package/lib/@types/polls.js +86 -0
  73. package/lib/@types/polls.js.map +1 -0
  74. package/lib/@types/read_receipts.d.ts +36 -0
  75. package/lib/@types/read_receipts.d.ts.map +1 -0
  76. package/lib/@types/read_receipts.js +27 -0
  77. package/lib/@types/read_receipts.js.map +1 -0
  78. package/lib/@types/registration.d.ts +85 -0
  79. package/lib/@types/registration.d.ts.map +1 -0
  80. package/lib/@types/registration.js +1 -0
  81. package/lib/@types/registration.js.map +1 -0
  82. package/lib/@types/requests.d.ts +267 -0
  83. package/lib/@types/requests.d.ts.map +1 -0
  84. package/lib/@types/requests.js +42 -0
  85. package/lib/@types/requests.js.map +1 -0
  86. package/lib/@types/search.d.ts +90 -0
  87. package/lib/@types/search.d.ts.map +1 -0
  88. package/lib/@types/search.js +30 -0
  89. package/lib/@types/search.js.map +1 -0
  90. package/lib/@types/signed.d.ts +9 -0
  91. package/lib/@types/signed.d.ts.map +1 -0
  92. package/lib/@types/signed.js +1 -0
  93. package/lib/@types/signed.js.map +1 -0
  94. package/lib/@types/spaces.d.ts +16 -0
  95. package/lib/@types/spaces.d.ts.map +1 -0
  96. package/lib/@types/spaces.js +1 -0
  97. package/lib/@types/spaces.js.map +1 -0
  98. package/lib/@types/state_events.d.ts +121 -0
  99. package/lib/@types/state_events.d.ts.map +1 -0
  100. package/lib/@types/state_events.js +1 -0
  101. package/lib/@types/state_events.js.map +1 -0
  102. package/lib/@types/synapse.d.ts +19 -0
  103. package/lib/@types/synapse.d.ts.map +1 -0
  104. package/lib/@types/synapse.js +1 -0
  105. package/lib/@types/synapse.js.map +1 -0
  106. package/lib/@types/sync.d.ts +8 -0
  107. package/lib/@types/sync.d.ts.map +1 -0
  108. package/lib/@types/sync.js +25 -0
  109. package/lib/@types/sync.js.map +1 -0
  110. package/lib/@types/threepids.d.ts +12 -0
  111. package/lib/@types/threepids.d.ts.map +1 -0
  112. package/lib/@types/threepids.js +24 -0
  113. package/lib/@types/threepids.js.map +1 -0
  114. package/lib/@types/topic.d.ts +55 -0
  115. package/lib/@types/topic.d.ts.map +1 -0
  116. package/lib/@types/topic.js +62 -0
  117. package/lib/@types/topic.js.map +1 -0
  118. package/lib/@types/uia.d.ts +8 -0
  119. package/lib/@types/uia.d.ts.map +1 -0
  120. package/lib/@types/uia.js +1 -0
  121. package/lib/@types/uia.js.map +1 -0
  122. package/lib/NamespacedValue.d.ts +32 -0
  123. package/lib/NamespacedValue.d.ts.map +1 -0
  124. package/lib/NamespacedValue.js +113 -0
  125. package/lib/NamespacedValue.js.map +1 -0
  126. package/lib/ReEmitter.d.ts +15 -0
  127. package/lib/ReEmitter.d.ts.map +1 -0
  128. package/lib/ReEmitter.js +87 -0
  129. package/lib/ReEmitter.js.map +1 -0
  130. package/lib/ToDeviceMessageQueue.d.ts +30 -0
  131. package/lib/ToDeviceMessageQueue.d.ts.map +1 -0
  132. package/lib/ToDeviceMessageQueue.js +135 -0
  133. package/lib/ToDeviceMessageQueue.js.map +1 -0
  134. package/lib/autodiscovery.d.ts +136 -0
  135. package/lib/autodiscovery.d.ts.map +1 -0
  136. package/lib/autodiscovery.js +464 -0
  137. package/lib/autodiscovery.js.map +1 -0
  138. package/lib/base64.d.ts +25 -0
  139. package/lib/base64.d.ts.map +1 -0
  140. package/lib/base64.js +95 -0
  141. package/lib/base64.js.map +1 -0
  142. package/lib/briij.d.ts +116 -0
  143. package/lib/briij.d.ts.map +1 -0
  144. package/lib/briij.js +145 -0
  145. package/lib/briij.js.map +1 -0
  146. package/lib/browser-index.d.ts +8 -0
  147. package/lib/browser-index.d.ts.map +1 -0
  148. package/lib/browser-index.js +35 -0
  149. package/lib/browser-index.js.map +1 -0
  150. package/lib/client.d.ts +3493 -0
  151. package/lib/client.d.ts.map +1 -0
  152. package/lib/client.js +7482 -0
  153. package/lib/client.js.map +1 -0
  154. package/lib/common-crypto/CryptoBackend.d.ts +234 -0
  155. package/lib/common-crypto/CryptoBackend.d.ts.map +1 -0
  156. package/lib/common-crypto/CryptoBackend.js +69 -0
  157. package/lib/common-crypto/CryptoBackend.js.map +1 -0
  158. package/lib/common-crypto/key-passphrase.d.ts +14 -0
  159. package/lib/common-crypto/key-passphrase.d.ts.map +1 -0
  160. package/lib/common-crypto/key-passphrase.js +33 -0
  161. package/lib/common-crypto/key-passphrase.js.map +1 -0
  162. package/lib/content-helpers.d.ts +90 -0
  163. package/lib/content-helpers.d.ts.map +1 -0
  164. package/lib/content-helpers.js +262 -0
  165. package/lib/content-helpers.js.map +1 -0
  166. package/lib/content-repo.d.ts +25 -0
  167. package/lib/content-repo.d.ts.map +1 -0
  168. package/lib/content-repo.js +109 -0
  169. package/lib/content-repo.js.map +1 -0
  170. package/lib/crypto/store/base.d.ts +301 -0
  171. package/lib/crypto/store/base.d.ts.map +1 -0
  172. package/lib/crypto/store/base.js +145 -0
  173. package/lib/crypto/store/base.js.map +1 -0
  174. package/lib/crypto/store/indexeddb-crypto-store-backend.d.ts +94 -0
  175. package/lib/crypto/store/indexeddb-crypto-store-backend.d.ts.map +1 -0
  176. package/lib/crypto/store/indexeddb-crypto-store-backend.js +604 -0
  177. package/lib/crypto/store/indexeddb-crypto-store-backend.js.map +1 -0
  178. package/lib/crypto/store/indexeddb-crypto-store.d.ts +251 -0
  179. package/lib/crypto/store/indexeddb-crypto-store.d.ts.map +1 -0
  180. package/lib/crypto/store/indexeddb-crypto-store.js +477 -0
  181. package/lib/crypto/store/indexeddb-crypto-store.js.map +1 -0
  182. package/lib/crypto/store/localStorage-crypto-store.d.ts +102 -0
  183. package/lib/crypto/store/localStorage-crypto-store.d.ts.map +1 -0
  184. package/lib/crypto/store/localStorage-crypto-store.js +374 -0
  185. package/lib/crypto/store/localStorage-crypto-store.js.map +1 -0
  186. package/lib/crypto/store/memory-crypto-store.d.ts +117 -0
  187. package/lib/crypto/store/memory-crypto-store.d.ts.map +1 -0
  188. package/lib/crypto/store/memory-crypto-store.js +311 -0
  189. package/lib/crypto/store/memory-crypto-store.js.map +1 -0
  190. package/lib/crypto-api/CryptoEvent.d.ts +120 -0
  191. package/lib/crypto-api/CryptoEvent.d.ts.map +1 -0
  192. package/lib/crypto-api/CryptoEvent.js +137 -0
  193. package/lib/crypto-api/CryptoEvent.js.map +1 -0
  194. package/lib/crypto-api/CryptoEventHandlerMap.d.ts +26 -0
  195. package/lib/crypto-api/CryptoEventHandlerMap.d.ts.map +1 -0
  196. package/lib/crypto-api/CryptoEventHandlerMap.js +1 -0
  197. package/lib/crypto-api/CryptoEventHandlerMap.js.map +1 -0
  198. package/lib/crypto-api/index.d.ts +1160 -0
  199. package/lib/crypto-api/index.d.ts.map +1 -0
  200. package/lib/crypto-api/index.js +410 -0
  201. package/lib/crypto-api/index.js.map +1 -0
  202. package/lib/crypto-api/key-passphrase.d.ts +11 -0
  203. package/lib/crypto-api/key-passphrase.d.ts.map +1 -0
  204. package/lib/crypto-api/key-passphrase.js +51 -0
  205. package/lib/crypto-api/key-passphrase.js.map +1 -0
  206. package/lib/crypto-api/keybackup.d.ts +87 -0
  207. package/lib/crypto-api/keybackup.d.ts.map +1 -0
  208. package/lib/crypto-api/keybackup.js +1 -0
  209. package/lib/crypto-api/keybackup.js.map +1 -0
  210. package/lib/crypto-api/recovery-key.d.ts +11 -0
  211. package/lib/crypto-api/recovery-key.d.ts.map +1 -0
  212. package/lib/crypto-api/recovery-key.js +65 -0
  213. package/lib/crypto-api/recovery-key.js.map +1 -0
  214. package/lib/crypto-api/verification.d.ts +315 -0
  215. package/lib/crypto-api/verification.d.ts.map +1 -0
  216. package/lib/crypto-api/verification.js +130 -0
  217. package/lib/crypto-api/verification.js.map +1 -0
  218. package/lib/digest.d.ts +10 -0
  219. package/lib/digest.d.ts.map +1 -0
  220. package/lib/digest.js +40 -0
  221. package/lib/digest.js.map +1 -0
  222. package/lib/embedded.d.ts +182 -0
  223. package/lib/embedded.d.ts.map +1 -0
  224. package/lib/embedded.js +746 -0
  225. package/lib/embedded.js.map +1 -0
  226. package/lib/errors.d.ts +38 -0
  227. package/lib/errors.d.ts.map +1 -0
  228. package/lib/errors.js +73 -0
  229. package/lib/errors.js.map +1 -0
  230. package/lib/event-mapper.d.ts +9 -0
  231. package/lib/event-mapper.d.ts.map +1 -0
  232. package/lib/event-mapper.js +74 -0
  233. package/lib/event-mapper.js.map +1 -0
  234. package/lib/extensible_events_v1/ExtensibleEvent.d.ts +38 -0
  235. package/lib/extensible_events_v1/ExtensibleEvent.d.ts.map +1 -0
  236. package/lib/extensible_events_v1/ExtensibleEvent.js +57 -0
  237. package/lib/extensible_events_v1/ExtensibleEvent.js.map +1 -0
  238. package/lib/extensible_events_v1/InvalidEventError.d.ts +7 -0
  239. package/lib/extensible_events_v1/InvalidEventError.d.ts.map +1 -0
  240. package/lib/extensible_events_v1/InvalidEventError.js +25 -0
  241. package/lib/extensible_events_v1/InvalidEventError.js.map +1 -0
  242. package/lib/extensible_events_v1/MessageEvent.d.ts +44 -0
  243. package/lib/extensible_events_v1/MessageEvent.d.ts.map +1 -0
  244. package/lib/extensible_events_v1/MessageEvent.js +134 -0
  245. package/lib/extensible_events_v1/MessageEvent.js.map +1 -0
  246. package/lib/extensible_events_v1/PollEndEvent.d.ts +33 -0
  247. package/lib/extensible_events_v1/PollEndEvent.d.ts.map +1 -0
  248. package/lib/extensible_events_v1/PollEndEvent.js +88 -0
  249. package/lib/extensible_events_v1/PollEndEvent.js.map +1 -0
  250. package/lib/extensible_events_v1/PollResponseEvent.d.ts +49 -0
  251. package/lib/extensible_events_v1/PollResponseEvent.d.ts.map +1 -0
  252. package/lib/extensible_events_v1/PollResponseEvent.js +135 -0
  253. package/lib/extensible_events_v1/PollResponseEvent.js.map +1 -0
  254. package/lib/extensible_events_v1/PollStartEvent.d.ts +71 -0
  255. package/lib/extensible_events_v1/PollStartEvent.d.ts.map +1 -0
  256. package/lib/extensible_events_v1/PollStartEvent.js +185 -0
  257. package/lib/extensible_events_v1/PollStartEvent.js.map +1 -0
  258. package/lib/extensible_events_v1/utilities.d.ts +14 -0
  259. package/lib/extensible_events_v1/utilities.d.ts.map +1 -0
  260. package/lib/extensible_events_v1/utilities.js +34 -0
  261. package/lib/extensible_events_v1/utilities.js.map +1 -0
  262. package/lib/feature.d.ts +20 -0
  263. package/lib/feature.d.ts.map +1 -0
  264. package/lib/feature.js +89 -0
  265. package/lib/feature.js.map +1 -0
  266. package/lib/filter-component.d.ts +64 -0
  267. package/lib/filter-component.d.ts.map +1 -0
  268. package/lib/filter-component.js +170 -0
  269. package/lib/filter-component.js.map +1 -0
  270. package/lib/filter.d.ts +97 -0
  271. package/lib/filter.d.ts.map +1 -0
  272. package/lib/filter.js +207 -0
  273. package/lib/filter.js.map +1 -0
  274. package/lib/http-api/errors.d.ts +117 -0
  275. package/lib/http-api/errors.d.ts.map +1 -0
  276. package/lib/http-api/errors.js +245 -0
  277. package/lib/http-api/errors.js.map +1 -0
  278. package/lib/http-api/fetch.d.ts +80 -0
  279. package/lib/http-api/fetch.d.ts.map +1 -0
  280. package/lib/http-api/fetch.js +332 -0
  281. package/lib/http-api/fetch.js.map +1 -0
  282. package/lib/http-api/index.d.ts +33 -0
  283. package/lib/http-api/index.d.ts.map +1 -0
  284. package/lib/http-api/index.js +178 -0
  285. package/lib/http-api/index.js.map +1 -0
  286. package/lib/http-api/interface.d.ts +186 -0
  287. package/lib/http-api/interface.d.ts.map +1 -0
  288. package/lib/http-api/interface.js +39 -0
  289. package/lib/http-api/interface.js.map +1 -0
  290. package/lib/http-api/method.d.ts +10 -0
  291. package/lib/http-api/method.d.ts.map +1 -0
  292. package/lib/http-api/method.js +27 -0
  293. package/lib/http-api/method.js.map +1 -0
  294. package/lib/http-api/prefix.d.ts +31 -0
  295. package/lib/http-api/prefix.d.ts.map +1 -0
  296. package/lib/http-api/prefix.js +50 -0
  297. package/lib/http-api/prefix.js.map +1 -0
  298. package/lib/http-api/refresh.d.ts +53 -0
  299. package/lib/http-api/refresh.d.ts.map +1 -0
  300. package/lib/http-api/refresh.js +174 -0
  301. package/lib/http-api/refresh.js.map +1 -0
  302. package/lib/http-api/utils.d.ts +37 -0
  303. package/lib/http-api/utils.d.ts.map +1 -0
  304. package/lib/http-api/utils.js +182 -0
  305. package/lib/http-api/utils.js.map +1 -0
  306. package/lib/index.d.ts +4 -0
  307. package/lib/index.d.ts.map +1 -0
  308. package/lib/index.js +24 -0
  309. package/lib/index.js.map +1 -0
  310. package/lib/indexeddb-helpers.d.ts +10 -0
  311. package/lib/indexeddb-helpers.d.ts.map +1 -0
  312. package/lib/indexeddb-helpers.js +51 -0
  313. package/lib/indexeddb-helpers.js.map +1 -0
  314. package/lib/indexeddb-worker.d.ts +7 -0
  315. package/lib/indexeddb-worker.d.ts.map +1 -0
  316. package/lib/indexeddb-worker.js +25 -0
  317. package/lib/indexeddb-worker.js.map +1 -0
  318. package/lib/interactive-auth.d.ts +341 -0
  319. package/lib/interactive-auth.d.ts.map +1 -0
  320. package/lib/interactive-auth.js +563 -0
  321. package/lib/interactive-auth.js.map +1 -0
  322. package/lib/logger.d.ts +124 -0
  323. package/lib/logger.d.ts.map +1 -0
  324. package/lib/logger.js +230 -0
  325. package/lib/logger.js.map +1 -0
  326. package/lib/matrixrtc/CallMembership.d.ts +154 -0
  327. package/lib/matrixrtc/CallMembership.d.ts.map +1 -0
  328. package/lib/matrixrtc/CallMembership.js +469 -0
  329. package/lib/matrixrtc/CallMembership.js.map +1 -0
  330. package/lib/matrixrtc/EncryptionManager.d.ts +44 -0
  331. package/lib/matrixrtc/EncryptionManager.d.ts.map +1 -0
  332. package/lib/matrixrtc/EncryptionManager.js +13 -0
  333. package/lib/matrixrtc/EncryptionManager.js.map +1 -0
  334. package/lib/matrixrtc/IKeyTransport.d.ts +37 -0
  335. package/lib/matrixrtc/IKeyTransport.d.ts.map +1 -0
  336. package/lib/matrixrtc/IKeyTransport.js +27 -0
  337. package/lib/matrixrtc/IKeyTransport.js.map +1 -0
  338. package/lib/matrixrtc/IMembershipManager.d.ts +94 -0
  339. package/lib/matrixrtc/IMembershipManager.d.ts.map +1 -0
  340. package/lib/matrixrtc/IMembershipManager.js +40 -0
  341. package/lib/matrixrtc/IMembershipManager.js.map +1 -0
  342. package/lib/matrixrtc/LivekitTransport.d.ts +23 -0
  343. package/lib/matrixrtc/LivekitTransport.d.ts.map +1 -0
  344. package/lib/matrixrtc/LivekitTransport.js +29 -0
  345. package/lib/matrixrtc/LivekitTransport.js.map +1 -0
  346. package/lib/matrixrtc/MatrixRTCSession.d.ts +343 -0
  347. package/lib/matrixrtc/MatrixRTCSession.d.ts.map +1 -0
  348. package/lib/matrixrtc/MatrixRTCSession.js +623 -0
  349. package/lib/matrixrtc/MatrixRTCSession.js.map +1 -0
  350. package/lib/matrixrtc/MatrixRTCSessionManager.d.ts +46 -0
  351. package/lib/matrixrtc/MatrixRTCSessionManager.d.ts.map +1 -0
  352. package/lib/matrixrtc/MatrixRTCSessionManager.js +149 -0
  353. package/lib/matrixrtc/MatrixRTCSessionManager.js.map +1 -0
  354. package/lib/matrixrtc/MembershipManager.d.ts +210 -0
  355. package/lib/matrixrtc/MembershipManager.d.ts.map +1 -0
  356. package/lib/matrixrtc/MembershipManager.js +977 -0
  357. package/lib/matrixrtc/MembershipManager.js.map +1 -0
  358. package/lib/matrixrtc/MembershipManagerActionScheduler.d.ts +59 -0
  359. package/lib/matrixrtc/MembershipManagerActionScheduler.d.ts.map +1 -0
  360. package/lib/matrixrtc/MembershipManagerActionScheduler.js +125 -0
  361. package/lib/matrixrtc/MembershipManagerActionScheduler.js.map +1 -0
  362. package/lib/matrixrtc/RTCEncryptionManager.d.ts +110 -0
  363. package/lib/matrixrtc/RTCEncryptionManager.d.ts.map +1 -0
  364. package/lib/matrixrtc/RTCEncryptionManager.js +376 -0
  365. package/lib/matrixrtc/RTCEncryptionManager.js.map +1 -0
  366. package/lib/matrixrtc/ToDeviceKeyTransport.d.ts +30 -0
  367. package/lib/matrixrtc/ToDeviceKeyTransport.d.ts.map +1 -0
  368. package/lib/matrixrtc/ToDeviceKeyTransport.js +164 -0
  369. package/lib/matrixrtc/ToDeviceKeyTransport.js.map +1 -0
  370. package/lib/matrixrtc/index.d.ts +9 -0
  371. package/lib/matrixrtc/index.d.ts.map +1 -0
  372. package/lib/matrixrtc/index.js +23 -0
  373. package/lib/matrixrtc/index.js.map +1 -0
  374. package/lib/matrixrtc/membershipData/common.d.ts +8 -0
  375. package/lib/matrixrtc/membershipData/common.d.ts.map +1 -0
  376. package/lib/matrixrtc/membershipData/common.js +26 -0
  377. package/lib/matrixrtc/membershipData/common.js.map +1 -0
  378. package/lib/matrixrtc/membershipData/index.d.ts +4 -0
  379. package/lib/matrixrtc/membershipData/index.d.ts.map +1 -0
  380. package/lib/matrixrtc/membershipData/index.js +20 -0
  381. package/lib/matrixrtc/membershipData/index.js.map +1 -0
  382. package/lib/matrixrtc/membershipData/rtc.d.ts +33 -0
  383. package/lib/matrixrtc/membershipData/rtc.d.ts.map +1 -0
  384. package/lib/matrixrtc/membershipData/rtc.js +137 -0
  385. package/lib/matrixrtc/membershipData/rtc.js.map +1 -0
  386. package/lib/matrixrtc/membershipData/session.d.ts +77 -0
  387. package/lib/matrixrtc/membershipData/session.d.ts.map +1 -0
  388. package/lib/matrixrtc/membershipData/session.js +62 -0
  389. package/lib/matrixrtc/membershipData/session.js.map +1 -0
  390. package/lib/matrixrtc/types.d.ts +169 -0
  391. package/lib/matrixrtc/types.d.ts.map +1 -0
  392. package/lib/matrixrtc/types.js +117 -0
  393. package/lib/matrixrtc/types.js.map +1 -0
  394. package/lib/matrixrtc/utils.d.ts +27 -0
  395. package/lib/matrixrtc/utils.d.ts.map +1 -0
  396. package/lib/matrixrtc/utils.js +72 -0
  397. package/lib/matrixrtc/utils.js.map +1 -0
  398. package/lib/models/MSC3089Branch.d.ts +98 -0
  399. package/lib/models/MSC3089Branch.d.ts.map +1 -0
  400. package/lib/models/MSC3089Branch.js +240 -0
  401. package/lib/models/MSC3089Branch.js.map +1 -0
  402. package/lib/models/MSC3089TreeSpace.d.ts +166 -0
  403. package/lib/models/MSC3089TreeSpace.d.ts.map +1 -0
  404. package/lib/models/MSC3089TreeSpace.js +521 -0
  405. package/lib/models/MSC3089TreeSpace.js.map +1 -0
  406. package/lib/models/ToDeviceMessage.d.ts +17 -0
  407. package/lib/models/ToDeviceMessage.d.ts.map +1 -0
  408. package/lib/models/ToDeviceMessage.js +1 -0
  409. package/lib/models/ToDeviceMessage.js.map +1 -0
  410. package/lib/models/beacon.d.ts +52 -0
  411. package/lib/models/beacon.d.ts.map +1 -0
  412. package/lib/models/beacon.js +174 -0
  413. package/lib/models/beacon.js.map +1 -0
  414. package/lib/models/compare-event-ordering.d.ts +24 -0
  415. package/lib/models/compare-event-ordering.d.ts.map +1 -0
  416. package/lib/models/compare-event-ordering.js +120 -0
  417. package/lib/models/compare-event-ordering.js.map +1 -0
  418. package/lib/models/device.d.ts +45 -0
  419. package/lib/models/device.d.ts.map +1 -0
  420. package/lib/models/device.js +77 -0
  421. package/lib/models/device.js.map +1 -0
  422. package/lib/models/event-context.d.ts +62 -0
  423. package/lib/models/event-context.d.ts.map +1 -0
  424. package/lib/models/event-context.js +113 -0
  425. package/lib/models/event-context.js.map +1 -0
  426. package/lib/models/event-status.d.ts +19 -0
  427. package/lib/models/event-status.d.ts.map +1 -0
  428. package/lib/models/event-status.js +36 -0
  429. package/lib/models/event-status.js.map +1 -0
  430. package/lib/models/event-timeline-set.d.ts +308 -0
  431. package/lib/models/event-timeline-set.d.ts.map +1 -0
  432. package/lib/models/event-timeline-set.js +805 -0
  433. package/lib/models/event-timeline-set.js.map +1 -0
  434. package/lib/models/event-timeline.d.ts +224 -0
  435. package/lib/models/event-timeline.d.ts.map +1 -0
  436. package/lib/models/event-timeline.js +434 -0
  437. package/lib/models/event-timeline.js.map +1 -0
  438. package/lib/models/event.d.ts +844 -0
  439. package/lib/models/event.d.ts.map +1 -0
  440. package/lib/models/event.js +1600 -0
  441. package/lib/models/event.js.map +1 -0
  442. package/lib/models/invites-ignorer-types.d.ts +27 -0
  443. package/lib/models/invites-ignorer-types.d.ts.map +1 -0
  444. package/lib/models/invites-ignorer-types.js +56 -0
  445. package/lib/models/invites-ignorer-types.js.map +1 -0
  446. package/lib/models/invites-ignorer.d.ts +112 -0
  447. package/lib/models/invites-ignorer.d.ts.map +1 -0
  448. package/lib/models/invites-ignorer.js +357 -0
  449. package/lib/models/invites-ignorer.js.map +1 -0
  450. package/lib/models/poll.d.ts +67 -0
  451. package/lib/models/poll.d.ts.map +1 -0
  452. package/lib/models/poll.js +241 -0
  453. package/lib/models/poll.js.map +1 -0
  454. package/lib/models/profile-keys.d.ts +17 -0
  455. package/lib/models/profile-keys.d.ts.map +1 -0
  456. package/lib/models/profile-keys.js +34 -0
  457. package/lib/models/profile-keys.js.map +1 -0
  458. package/lib/models/read-receipt.d.ts +115 -0
  459. package/lib/models/read-receipt.d.ts.map +1 -0
  460. package/lib/models/read-receipt.js +366 -0
  461. package/lib/models/read-receipt.js.map +1 -0
  462. package/lib/models/related-relations.d.ts +11 -0
  463. package/lib/models/related-relations.d.ts.map +1 -0
  464. package/lib/models/related-relations.js +33 -0
  465. package/lib/models/related-relations.js.map +1 -0
  466. package/lib/models/relations-container.d.ts +44 -0
  467. package/lib/models/relations-container.d.ts.map +1 -0
  468. package/lib/models/relations-container.js +132 -0
  469. package/lib/models/relations-container.js.map +1 -0
  470. package/lib/models/relations.d.ts +123 -0
  471. package/lib/models/relations.d.ts.map +1 -0
  472. package/lib/models/relations.js +378 -0
  473. package/lib/models/relations.js.map +1 -0
  474. package/lib/models/room-member.d.ts +221 -0
  475. package/lib/models/room-member.d.ts.map +1 -0
  476. package/lib/models/room-member.js +376 -0
  477. package/lib/models/room-member.js.map +1 -0
  478. package/lib/models/room-receipts.d.ts +39 -0
  479. package/lib/models/room-receipts.d.ts.map +1 -0
  480. package/lib/models/room-receipts.js +392 -0
  481. package/lib/models/room-receipts.js.map +1 -0
  482. package/lib/models/room-state.d.ts +463 -0
  483. package/lib/models/room-state.d.ts.map +1 -0
  484. package/lib/models/room-state.js +1066 -0
  485. package/lib/models/room-state.js.map +1 -0
  486. package/lib/models/room-sticky-events.d.ts +110 -0
  487. package/lib/models/room-sticky-events.d.ts.map +1 -0
  488. package/lib/models/room-sticky-events.js +353 -0
  489. package/lib/models/room-sticky-events.js.map +1 -0
  490. package/lib/models/room-summary.d.ts +59 -0
  491. package/lib/models/room-summary.d.ts.map +1 -0
  492. package/lib/models/room-summary.js +39 -0
  493. package/lib/models/room-summary.js.map +1 -0
  494. package/lib/models/room.d.ts +1285 -0
  495. package/lib/models/room.d.ts.map +1 -0
  496. package/lib/models/room.js +3548 -0
  497. package/lib/models/room.js.map +1 -0
  498. package/lib/models/search-result.d.ts +20 -0
  499. package/lib/models/search-result.d.ts.map +1 -0
  500. package/lib/models/search-result.js +52 -0
  501. package/lib/models/search-result.js.map +1 -0
  502. package/lib/models/thread.d.ts +245 -0
  503. package/lib/models/thread.d.ts.map +1 -0
  504. package/lib/models/thread.js +866 -0
  505. package/lib/models/thread.js.map +1 -0
  506. package/lib/models/typed-event-emitter.d.ts +157 -0
  507. package/lib/models/typed-event-emitter.d.ts.map +1 -0
  508. package/lib/models/typed-event-emitter.js +227 -0
  509. package/lib/models/typed-event-emitter.js.map +1 -0
  510. package/lib/models/user.d.ts +195 -0
  511. package/lib/models/user.d.ts.map +1 -0
  512. package/lib/models/user.js +218 -0
  513. package/lib/models/user.js.map +1 -0
  514. package/lib/oidc/authorize.d.ts +93 -0
  515. package/lib/oidc/authorize.d.ts.map +1 -0
  516. package/lib/oidc/authorize.js +282 -0
  517. package/lib/oidc/authorize.js.map +1 -0
  518. package/lib/oidc/discovery.d.ts +22 -0
  519. package/lib/oidc/discovery.d.ts.map +1 -0
  520. package/lib/oidc/discovery.js +78 -0
  521. package/lib/oidc/discovery.js.map +1 -0
  522. package/lib/oidc/error.d.ts +18 -0
  523. package/lib/oidc/error.d.ts.map +1 -0
  524. package/lib/oidc/error.js +35 -0
  525. package/lib/oidc/error.js.map +1 -0
  526. package/lib/oidc/index.d.ts +16 -0
  527. package/lib/oidc/index.d.ts.map +1 -0
  528. package/lib/oidc/index.js +29 -0
  529. package/lib/oidc/index.js.map +1 -0
  530. package/lib/oidc/register.d.ts +70 -0
  531. package/lib/oidc/register.d.ts.map +1 -0
  532. package/lib/oidc/register.js +135 -0
  533. package/lib/oidc/register.js.map +1 -0
  534. package/lib/oidc/tokenRefresher.d.ts +91 -0
  535. package/lib/oidc/tokenRefresher.d.ts.map +1 -0
  536. package/lib/oidc/tokenRefresher.js +187 -0
  537. package/lib/oidc/tokenRefresher.js.map +1 -0
  538. package/lib/oidc/validate.d.ts +78 -0
  539. package/lib/oidc/validate.d.ts.map +1 -0
  540. package/lib/oidc/validate.js +181 -0
  541. package/lib/oidc/validate.js.map +1 -0
  542. package/lib/pushprocessor.d.ts +140 -0
  543. package/lib/pushprocessor.d.ts.map +1 -0
  544. package/lib/pushprocessor.js +702 -0
  545. package/lib/pushprocessor.js.map +1 -0
  546. package/lib/randomstring.d.ts +32 -0
  547. package/lib/randomstring.d.ts.map +1 -0
  548. package/lib/randomstring.js +97 -0
  549. package/lib/randomstring.js.map +1 -0
  550. package/lib/realtime-callbacks.d.ts +18 -0
  551. package/lib/realtime-callbacks.d.ts.map +1 -0
  552. package/lib/realtime-callbacks.js +177 -0
  553. package/lib/realtime-callbacks.js.map +1 -0
  554. package/lib/receipt-accumulator.d.ts +51 -0
  555. package/lib/receipt-accumulator.d.ts.map +1 -0
  556. package/lib/receipt-accumulator.js +164 -0
  557. package/lib/receipt-accumulator.js.map +1 -0
  558. package/lib/rendezvous/MSC4108SignInWithQR.d.ts +112 -0
  559. package/lib/rendezvous/MSC4108SignInWithQR.d.ts.map +1 -0
  560. package/lib/rendezvous/MSC4108SignInWithQR.js +389 -0
  561. package/lib/rendezvous/MSC4108SignInWithQR.js.map +1 -0
  562. package/lib/rendezvous/RendezvousChannel.d.ts +27 -0
  563. package/lib/rendezvous/RendezvousChannel.d.ts.map +1 -0
  564. package/lib/rendezvous/RendezvousChannel.js +1 -0
  565. package/lib/rendezvous/RendezvousChannel.js.map +1 -0
  566. package/lib/rendezvous/RendezvousCode.d.ts +9 -0
  567. package/lib/rendezvous/RendezvousCode.d.ts.map +1 -0
  568. package/lib/rendezvous/RendezvousCode.js +1 -0
  569. package/lib/rendezvous/RendezvousCode.js.map +1 -0
  570. package/lib/rendezvous/RendezvousError.d.ts +6 -0
  571. package/lib/rendezvous/RendezvousError.d.ts.map +1 -0
  572. package/lib/rendezvous/RendezvousError.js +23 -0
  573. package/lib/rendezvous/RendezvousError.js.map +1 -0
  574. package/lib/rendezvous/RendezvousFailureReason.d.ts +31 -0
  575. package/lib/rendezvous/RendezvousFailureReason.d.ts.map +1 -0
  576. package/lib/rendezvous/RendezvousFailureReason.js +47 -0
  577. package/lib/rendezvous/RendezvousFailureReason.js.map +1 -0
  578. package/lib/rendezvous/RendezvousIntent.d.ts +5 -0
  579. package/lib/rendezvous/RendezvousIntent.d.ts.map +1 -0
  580. package/lib/rendezvous/RendezvousIntent.js +22 -0
  581. package/lib/rendezvous/RendezvousIntent.js.map +1 -0
  582. package/lib/rendezvous/RendezvousTransport.d.ts +36 -0
  583. package/lib/rendezvous/RendezvousTransport.d.ts.map +1 -0
  584. package/lib/rendezvous/RendezvousTransport.js +1 -0
  585. package/lib/rendezvous/RendezvousTransport.js.map +1 -0
  586. package/lib/rendezvous/channels/MSC4108SecureChannel.d.ts +58 -0
  587. package/lib/rendezvous/channels/MSC4108SecureChannel.d.ts.map +1 -0
  588. package/lib/rendezvous/channels/MSC4108SecureChannel.js +246 -0
  589. package/lib/rendezvous/channels/MSC4108SecureChannel.js.map +1 -0
  590. package/lib/rendezvous/channels/index.d.ts +2 -0
  591. package/lib/rendezvous/channels/index.d.ts.map +1 -0
  592. package/lib/rendezvous/channels/index.js +18 -0
  593. package/lib/rendezvous/channels/index.js.map +1 -0
  594. package/lib/rendezvous/index.d.ts +10 -0
  595. package/lib/rendezvous/index.d.ts.map +1 -0
  596. package/lib/rendezvous/index.js +23 -0
  597. package/lib/rendezvous/index.js.map +1 -0
  598. package/lib/rendezvous/transports/MSC4108RendezvousSession.d.ts +61 -0
  599. package/lib/rendezvous/transports/MSC4108RendezvousSession.d.ts.map +1 -0
  600. package/lib/rendezvous/transports/MSC4108RendezvousSession.js +254 -0
  601. package/lib/rendezvous/transports/MSC4108RendezvousSession.js.map +1 -0
  602. package/lib/rendezvous/transports/index.d.ts +2 -0
  603. package/lib/rendezvous/transports/index.d.ts.map +1 -0
  604. package/lib/rendezvous/transports/index.js +18 -0
  605. package/lib/rendezvous/transports/index.js.map +1 -0
  606. package/lib/room-hierarchy.d.ts +35 -0
  607. package/lib/room-hierarchy.d.ts.map +1 -0
  608. package/lib/room-hierarchy.js +136 -0
  609. package/lib/room-hierarchy.js.map +1 -0
  610. package/lib/rust-crypto/CrossSigningIdentity.d.ts +35 -0
  611. package/lib/rust-crypto/CrossSigningIdentity.d.ts.map +1 -0
  612. package/lib/rust-crypto/CrossSigningIdentity.js +163 -0
  613. package/lib/rust-crypto/CrossSigningIdentity.js.map +1 -0
  614. package/lib/rust-crypto/DehydratedDeviceManager.d.ts +118 -0
  615. package/lib/rust-crypto/DehydratedDeviceManager.d.ts.map +1 -0
  616. package/lib/rust-crypto/DehydratedDeviceManager.js +361 -0
  617. package/lib/rust-crypto/DehydratedDeviceManager.js.map +1 -0
  618. package/lib/rust-crypto/KeyClaimManager.d.ts +33 -0
  619. package/lib/rust-crypto/KeyClaimManager.d.ts.map +1 -0
  620. package/lib/rust-crypto/KeyClaimManager.js +82 -0
  621. package/lib/rust-crypto/KeyClaimManager.js.map +1 -0
  622. package/lib/rust-crypto/OutgoingRequestProcessor.d.ts +36 -0
  623. package/lib/rust-crypto/OutgoingRequestProcessor.d.ts.map +1 -0
  624. package/lib/rust-crypto/OutgoingRequestProcessor.js +194 -0
  625. package/lib/rust-crypto/OutgoingRequestProcessor.js.map +1 -0
  626. package/lib/rust-crypto/OutgoingRequestsManager.d.ts +47 -0
  627. package/lib/rust-crypto/OutgoingRequestsManager.d.ts.map +1 -0
  628. package/lib/rust-crypto/OutgoingRequestsManager.js +175 -0
  629. package/lib/rust-crypto/OutgoingRequestsManager.js.map +1 -0
  630. package/lib/rust-crypto/PerSessionKeyBackupDownloader.d.ts +120 -0
  631. package/lib/rust-crypto/PerSessionKeyBackupDownloader.d.ts.map +1 -0
  632. package/lib/rust-crypto/PerSessionKeyBackupDownloader.js +469 -0
  633. package/lib/rust-crypto/PerSessionKeyBackupDownloader.js.map +1 -0
  634. package/lib/rust-crypto/RoomEncryptor.d.ts +100 -0
  635. package/lib/rust-crypto/RoomEncryptor.d.ts.map +1 -0
  636. package/lib/rust-crypto/RoomEncryptor.js +308 -0
  637. package/lib/rust-crypto/RoomEncryptor.js.map +1 -0
  638. package/lib/rust-crypto/backup.d.ts +278 -0
  639. package/lib/rust-crypto/backup.d.ts.map +1 -0
  640. package/lib/rust-crypto/backup.js +898 -0
  641. package/lib/rust-crypto/backup.js.map +1 -0
  642. package/lib/rust-crypto/constants.d.ts +3 -0
  643. package/lib/rust-crypto/constants.d.ts.map +1 -0
  644. package/lib/rust-crypto/constants.js +19 -0
  645. package/lib/rust-crypto/constants.js.map +1 -0
  646. package/lib/rust-crypto/device-converter.d.ts +28 -0
  647. package/lib/rust-crypto/device-converter.d.ts.map +1 -0
  648. package/lib/rust-crypto/device-converter.js +123 -0
  649. package/lib/rust-crypto/device-converter.js.map +1 -0
  650. package/lib/rust-crypto/index.d.ts +65 -0
  651. package/lib/rust-crypto/index.d.ts.map +1 -0
  652. package/lib/rust-crypto/index.js +149 -0
  653. package/lib/rust-crypto/index.js.map +1 -0
  654. package/lib/rust-crypto/libolm_migration.d.ts +81 -0
  655. package/lib/rust-crypto/libolm_migration.d.ts.map +1 -0
  656. package/lib/rust-crypto/libolm_migration.js +456 -0
  657. package/lib/rust-crypto/libolm_migration.js.map +1 -0
  658. package/lib/rust-crypto/rust-crypto.d.ts +576 -0
  659. package/lib/rust-crypto/rust-crypto.d.ts.map +1 -0
  660. package/lib/rust-crypto/rust-crypto.js +2324 -0
  661. package/lib/rust-crypto/rust-crypto.js.map +1 -0
  662. package/lib/rust-crypto/secret-storage.d.ts +22 -0
  663. package/lib/rust-crypto/secret-storage.d.ts.map +1 -0
  664. package/lib/rust-crypto/secret-storage.js +63 -0
  665. package/lib/rust-crypto/secret-storage.js.map +1 -0
  666. package/lib/rust-crypto/verification.d.ts +321 -0
  667. package/lib/rust-crypto/verification.d.ts.map +1 -0
  668. package/lib/rust-crypto/verification.js +817 -0
  669. package/lib/rust-crypto/verification.js.map +1 -0
  670. package/lib/scheduler.d.ts +132 -0
  671. package/lib/scheduler.d.ts.map +1 -0
  672. package/lib/scheduler.js +259 -0
  673. package/lib/scheduler.js.map +1 -0
  674. package/lib/secret-storage.d.ts +383 -0
  675. package/lib/secret-storage.d.ts.map +1 -0
  676. package/lib/secret-storage.js +487 -0
  677. package/lib/secret-storage.js.map +1 -0
  678. package/lib/serverCapabilities.d.ts +78 -0
  679. package/lib/serverCapabilities.d.ts.map +1 -0
  680. package/lib/serverCapabilities.js +104 -0
  681. package/lib/serverCapabilities.js.map +1 -0
  682. package/lib/service-types.d.ts +5 -0
  683. package/lib/service-types.d.ts.map +1 -0
  684. package/lib/service-types.js +23 -0
  685. package/lib/service-types.js.map +1 -0
  686. package/lib/sliding-sync-sdk.d.ts +107 -0
  687. package/lib/sliding-sync-sdk.d.ts.map +1 -0
  688. package/lib/sliding-sync-sdk.js +892 -0
  689. package/lib/sliding-sync-sdk.js.map +1 -0
  690. package/lib/sliding-sync.d.ts +306 -0
  691. package/lib/sliding-sync.d.ts.map +1 -0
  692. package/lib/sliding-sync.js +585 -0
  693. package/lib/sliding-sync.js.map +1 -0
  694. package/lib/store/index.d.ts +201 -0
  695. package/lib/store/index.d.ts.map +1 -0
  696. package/lib/store/index.js +1 -0
  697. package/lib/store/index.js.map +1 -0
  698. package/lib/store/indexeddb-backend.d.ts +24 -0
  699. package/lib/store/indexeddb-backend.d.ts.map +1 -0
  700. package/lib/store/indexeddb-backend.js +1 -0
  701. package/lib/store/indexeddb-backend.js.map +1 -0
  702. package/lib/store/indexeddb-local-backend.d.ts +129 -0
  703. package/lib/store/indexeddb-local-backend.d.ts.map +1 -0
  704. package/lib/store/indexeddb-local-backend.js +599 -0
  705. package/lib/store/indexeddb-local-backend.js.map +1 -0
  706. package/lib/store/indexeddb-remote-backend.d.ts +79 -0
  707. package/lib/store/indexeddb-remote-backend.d.ts.map +1 -0
  708. package/lib/store/indexeddb-remote-backend.js +209 -0
  709. package/lib/store/indexeddb-remote-backend.js.map +1 -0
  710. package/lib/store/indexeddb-store-worker.d.ts +35 -0
  711. package/lib/store/indexeddb-store-worker.d.ts.map +1 -0
  712. package/lib/store/indexeddb-store-worker.js +146 -0
  713. package/lib/store/indexeddb-store-worker.js.map +1 -0
  714. package/lib/store/indexeddb.d.ts +142 -0
  715. package/lib/store/indexeddb.d.ts.map +1 -0
  716. package/lib/store/indexeddb.js +347 -0
  717. package/lib/store/indexeddb.js.map +1 -0
  718. package/lib/store/local-storage-events-emitter.d.ts +30 -0
  719. package/lib/store/local-storage-events-emitter.d.ts.map +1 -0
  720. package/lib/store/local-storage-events-emitter.js +37 -0
  721. package/lib/store/local-storage-events-emitter.js.map +1 -0
  722. package/lib/store/memory.d.ts +209 -0
  723. package/lib/store/memory.d.ts.map +1 -0
  724. package/lib/store/memory.js +432 -0
  725. package/lib/store/memory.js.map +1 -0
  726. package/lib/store/stub.d.ts +161 -0
  727. package/lib/store/stub.d.ts.map +1 -0
  728. package/lib/store/stub.js +268 -0
  729. package/lib/store/stub.js.map +1 -0
  730. package/lib/sync-accumulator.d.ts +207 -0
  731. package/lib/sync-accumulator.d.ts.map +1 -0
  732. package/lib/sync-accumulator.js +588 -0
  733. package/lib/sync-accumulator.js.map +1 -0
  734. package/lib/sync.d.ts +273 -0
  735. package/lib/sync.d.ts.map +1 -0
  736. package/lib/sync.js +1764 -0
  737. package/lib/sync.js.map +1 -0
  738. package/lib/testing.d.ts +98 -0
  739. package/lib/testing.d.ts.map +1 -0
  740. package/lib/testing.js +205 -0
  741. package/lib/testing.js.map +1 -0
  742. package/lib/thread-utils.d.ts +10 -0
  743. package/lib/thread-utils.d.ts.map +1 -0
  744. package/lib/thread-utils.js +31 -0
  745. package/lib/thread-utils.js.map +1 -0
  746. package/lib/timeline-window.d.ts +168 -0
  747. package/lib/timeline-window.d.ts.map +1 -0
  748. package/lib/timeline-window.js +494 -0
  749. package/lib/timeline-window.js.map +1 -0
  750. package/lib/types.d.ts +33 -0
  751. package/lib/types.d.ts.map +1 -0
  752. package/lib/types.js +52 -0
  753. package/lib/types.js.map +1 -0
  754. package/lib/utils/decryptAESSecretStorageItem.d.ts +12 -0
  755. package/lib/utils/decryptAESSecretStorageItem.d.ts.map +1 -0
  756. package/lib/utils/decryptAESSecretStorageItem.js +50 -0
  757. package/lib/utils/decryptAESSecretStorageItem.js.map +1 -0
  758. package/lib/utils/encryptAESSecretStorageItem.d.ts +16 -0
  759. package/lib/utils/encryptAESSecretStorageItem.d.ts.map +1 -0
  760. package/lib/utils/encryptAESSecretStorageItem.js +68 -0
  761. package/lib/utils/encryptAESSecretStorageItem.js.map +1 -0
  762. package/lib/utils/internal/deriveKeys.d.ts +10 -0
  763. package/lib/utils/internal/deriveKeys.d.ts.map +1 -0
  764. package/lib/utils/internal/deriveKeys.js +60 -0
  765. package/lib/utils/internal/deriveKeys.js.map +1 -0
  766. package/lib/utils/roomVersion.d.ts +13 -0
  767. package/lib/utils/roomVersion.d.ts.map +1 -0
  768. package/lib/utils/roomVersion.js +36 -0
  769. package/lib/utils/roomVersion.js.map +1 -0
  770. package/lib/utils.d.ts +270 -0
  771. package/lib/utils.d.ts.map +1 -0
  772. package/lib/utils.js +764 -0
  773. package/lib/utils.js.map +1 -0
  774. package/lib/version-support.d.ts +19 -0
  775. package/lib/version-support.d.ts.map +1 -0
  776. package/lib/version-support.js +37 -0
  777. package/lib/version-support.js.map +1 -0
  778. package/lib/webrtc/audioContext.d.ts +15 -0
  779. package/lib/webrtc/audioContext.d.ts.map +1 -0
  780. package/lib/webrtc/audioContext.js +46 -0
  781. package/lib/webrtc/audioContext.js.map +1 -0
  782. package/lib/webrtc/call.d.ts +560 -0
  783. package/lib/webrtc/call.d.ts.map +1 -0
  784. package/lib/webrtc/call.js +2596 -0
  785. package/lib/webrtc/call.js.map +1 -0
  786. package/lib/webrtc/callEventHandler.d.ts +37 -0
  787. package/lib/webrtc/callEventHandler.d.ts.map +1 -0
  788. package/lib/webrtc/callEventHandler.js +344 -0
  789. package/lib/webrtc/callEventHandler.js.map +1 -0
  790. package/lib/webrtc/callEventTypes.d.ts +79 -0
  791. package/lib/webrtc/callEventTypes.d.ts.map +1 -0
  792. package/lib/webrtc/callEventTypes.js +13 -0
  793. package/lib/webrtc/callEventTypes.js.map +1 -0
  794. package/lib/webrtc/callFeed.d.ts +128 -0
  795. package/lib/webrtc/callFeed.d.ts.map +1 -0
  796. package/lib/webrtc/callFeed.js +289 -0
  797. package/lib/webrtc/callFeed.js.map +1 -0
  798. package/lib/webrtc/groupCall.d.ts +319 -0
  799. package/lib/webrtc/groupCall.d.ts.map +1 -0
  800. package/lib/webrtc/groupCall.js +1334 -0
  801. package/lib/webrtc/groupCall.js.map +1 -0
  802. package/lib/webrtc/groupCallEventHandler.d.ts +31 -0
  803. package/lib/webrtc/groupCallEventHandler.d.ts.map +1 -0
  804. package/lib/webrtc/groupCallEventHandler.js +178 -0
  805. package/lib/webrtc/groupCallEventHandler.js.map +1 -0
  806. package/lib/webrtc/mediaHandler.d.ts +89 -0
  807. package/lib/webrtc/mediaHandler.d.ts.map +1 -0
  808. package/lib/webrtc/mediaHandler.js +454 -0
  809. package/lib/webrtc/mediaHandler.js.map +1 -0
  810. package/lib/webrtc/stats/callFeedStatsReporter.d.ts +8 -0
  811. package/lib/webrtc/stats/callFeedStatsReporter.d.ts.map +1 -0
  812. package/lib/webrtc/stats/callFeedStatsReporter.js +79 -0
  813. package/lib/webrtc/stats/callFeedStatsReporter.js.map +1 -0
  814. package/lib/webrtc/stats/callStatsReportGatherer.d.ts +25 -0
  815. package/lib/webrtc/stats/callStatsReportGatherer.d.ts.map +1 -0
  816. package/lib/webrtc/stats/callStatsReportGatherer.js +199 -0
  817. package/lib/webrtc/stats/callStatsReportGatherer.js.map +1 -0
  818. package/lib/webrtc/stats/callStatsReportSummary.d.ts +17 -0
  819. package/lib/webrtc/stats/callStatsReportSummary.d.ts.map +1 -0
  820. package/lib/webrtc/stats/callStatsReportSummary.js +1 -0
  821. package/lib/webrtc/stats/callStatsReportSummary.js.map +1 -0
  822. package/lib/webrtc/stats/connectionStats.d.ts +28 -0
  823. package/lib/webrtc/stats/connectionStats.d.ts.map +1 -0
  824. package/lib/webrtc/stats/connectionStats.js +26 -0
  825. package/lib/webrtc/stats/connectionStats.js.map +1 -0
  826. package/lib/webrtc/stats/connectionStatsBuilder.d.ts +5 -0
  827. package/lib/webrtc/stats/connectionStatsBuilder.d.ts.map +1 -0
  828. package/lib/webrtc/stats/connectionStatsBuilder.js +27 -0
  829. package/lib/webrtc/stats/connectionStatsBuilder.js.map +1 -0
  830. package/lib/webrtc/stats/connectionStatsReportBuilder.d.ts +7 -0
  831. package/lib/webrtc/stats/connectionStatsReportBuilder.d.ts.map +1 -0
  832. package/lib/webrtc/stats/connectionStatsReportBuilder.js +121 -0
  833. package/lib/webrtc/stats/connectionStatsReportBuilder.js.map +1 -0
  834. package/lib/webrtc/stats/groupCallStats.d.ts +22 -0
  835. package/lib/webrtc/stats/groupCallStats.d.ts.map +1 -0
  836. package/lib/webrtc/stats/groupCallStats.js +78 -0
  837. package/lib/webrtc/stats/groupCallStats.js.map +1 -0
  838. package/lib/webrtc/stats/media/mediaSsrcHandler.d.ts +10 -0
  839. package/lib/webrtc/stats/media/mediaSsrcHandler.d.ts.map +1 -0
  840. package/lib/webrtc/stats/media/mediaSsrcHandler.js +57 -0
  841. package/lib/webrtc/stats/media/mediaSsrcHandler.js.map +1 -0
  842. package/lib/webrtc/stats/media/mediaTrackHandler.d.ts +12 -0
  843. package/lib/webrtc/stats/media/mediaTrackHandler.d.ts.map +1 -0
  844. package/lib/webrtc/stats/media/mediaTrackHandler.js +58 -0
  845. package/lib/webrtc/stats/media/mediaTrackHandler.js.map +1 -0
  846. package/lib/webrtc/stats/media/mediaTrackStats.d.ts +86 -0
  847. package/lib/webrtc/stats/media/mediaTrackStats.d.ts.map +1 -0
  848. package/lib/webrtc/stats/media/mediaTrackStats.js +142 -0
  849. package/lib/webrtc/stats/media/mediaTrackStats.js.map +1 -0
  850. package/lib/webrtc/stats/media/mediaTrackStatsHandler.d.ts +22 -0
  851. package/lib/webrtc/stats/media/mediaTrackStatsHandler.d.ts.map +1 -0
  852. package/lib/webrtc/stats/media/mediaTrackStatsHandler.js +76 -0
  853. package/lib/webrtc/stats/media/mediaTrackStatsHandler.js.map +1 -0
  854. package/lib/webrtc/stats/statsReport.d.ts +99 -0
  855. package/lib/webrtc/stats/statsReport.d.ts.map +1 -0
  856. package/lib/webrtc/stats/statsReport.js +32 -0
  857. package/lib/webrtc/stats/statsReport.js.map +1 -0
  858. package/lib/webrtc/stats/statsReportEmitter.d.ts +15 -0
  859. package/lib/webrtc/stats/statsReportEmitter.d.ts.map +1 -0
  860. package/lib/webrtc/stats/statsReportEmitter.js +33 -0
  861. package/lib/webrtc/stats/statsReportEmitter.js.map +1 -0
  862. package/lib/webrtc/stats/summaryStatsReportGatherer.d.ts +16 -0
  863. package/lib/webrtc/stats/summaryStatsReportGatherer.d.ts.map +1 -0
  864. package/lib/webrtc/stats/summaryStatsReportGatherer.js +116 -0
  865. package/lib/webrtc/stats/summaryStatsReportGatherer.js.map +1 -0
  866. package/lib/webrtc/stats/trackStatsBuilder.d.ts +19 -0
  867. package/lib/webrtc/stats/trackStatsBuilder.d.ts.map +1 -0
  868. package/lib/webrtc/stats/trackStatsBuilder.js +168 -0
  869. package/lib/webrtc/stats/trackStatsBuilder.js.map +1 -0
  870. package/lib/webrtc/stats/transportStats.d.ts +11 -0
  871. package/lib/webrtc/stats/transportStats.d.ts.map +1 -0
  872. package/lib/webrtc/stats/transportStats.js +1 -0
  873. package/lib/webrtc/stats/transportStats.js.map +1 -0
  874. package/lib/webrtc/stats/transportStatsBuilder.d.ts +5 -0
  875. package/lib/webrtc/stats/transportStatsBuilder.d.ts.map +1 -0
  876. package/lib/webrtc/stats/transportStatsBuilder.js +34 -0
  877. package/lib/webrtc/stats/transportStatsBuilder.js.map +1 -0
  878. package/lib/webrtc/stats/valueFormatter.d.ts +4 -0
  879. package/lib/webrtc/stats/valueFormatter.d.ts.map +1 -0
  880. package/lib/webrtc/stats/valueFormatter.js +25 -0
  881. package/lib/webrtc/stats/valueFormatter.js.map +1 -0
  882. package/package.json +129 -0
  883. package/src/@types/AESEncryptedSecretStoragePayload.ts +29 -0
  884. package/src/@types/IIdentityServerProvider.ts +24 -0
  885. package/src/@types/PushRules.ts +208 -0
  886. package/src/@types/another-json.d.ts +19 -0
  887. package/src/@types/auth.ts +258 -0
  888. package/src/@types/beacon.ts +140 -0
  889. package/src/@types/common.ts +24 -0
  890. package/src/@types/crypto.ts +71 -0
  891. package/src/@types/event.ts +449 -0
  892. package/src/@types/events.ts +119 -0
  893. package/src/@types/extensible_events.ts +147 -0
  894. package/src/@types/global.d.ts +67 -0
  895. package/src/@types/local_notifications.ts +19 -0
  896. package/src/@types/location.ts +92 -0
  897. package/src/@types/matrix-sdk-crypto-wasm.d.ts +39 -0
  898. package/src/@types/media.ts +245 -0
  899. package/src/@types/membership.ts +57 -0
  900. package/src/@types/partials.ts +103 -0
  901. package/src/@types/polls.ts +120 -0
  902. package/src/@types/read_receipts.ts +61 -0
  903. package/src/@types/registration.ts +102 -0
  904. package/src/@types/requests.ts +346 -0
  905. package/src/@types/search.ts +119 -0
  906. package/src/@types/signed.ts +25 -0
  907. package/src/@types/spaces.ts +37 -0
  908. package/src/@types/state_events.ts +153 -0
  909. package/src/@types/synapse.ts +40 -0
  910. package/src/@types/sync.ts +27 -0
  911. package/src/@types/threepids.ts +29 -0
  912. package/src/@types/topic.ts +69 -0
  913. package/src/@types/uia.ts +24 -0
  914. package/src/NamespacedValue.ts +121 -0
  915. package/src/ReEmitter.ts +93 -0
  916. package/src/ToDeviceMessageQueue.ts +156 -0
  917. package/src/autodiscovery.ts +505 -0
  918. package/src/base64.ts +86 -0
  919. package/src/briij.ts +173 -0
  920. package/src/browser-index.ts +44 -0
  921. package/src/client.ts +9031 -0
  922. package/src/common-crypto/CryptoBackend.ts +295 -0
  923. package/src/common-crypto/README.md +4 -0
  924. package/src/common-crypto/key-passphrase.ts +43 -0
  925. package/src/content-helpers.ts +298 -0
  926. package/src/content-repo.ts +122 -0
  927. package/src/crypto/store/base.ts +388 -0
  928. package/src/crypto/store/indexeddb-crypto-store-backend.ts +655 -0
  929. package/src/crypto/store/indexeddb-crypto-store.ts +555 -0
  930. package/src/crypto/store/localStorage-crypto-store.ts +409 -0
  931. package/src/crypto/store/memory-crypto-store.ts +326 -0
  932. package/src/crypto-api/CryptoEvent.ts +152 -0
  933. package/src/crypto-api/CryptoEventHandlerMap.ts +42 -0
  934. package/src/crypto-api/index.ts +1362 -0
  935. package/src/crypto-api/key-passphrase.ts +58 -0
  936. package/src/crypto-api/keybackup.ts +114 -0
  937. package/src/crypto-api/recovery-key.ts +69 -0
  938. package/src/crypto-api/verification.ts +382 -0
  939. package/src/digest.ts +34 -0
  940. package/src/embedded.ts +865 -0
  941. package/src/errors.ts +87 -0
  942. package/src/event-mapper.ts +88 -0
  943. package/src/extensible_events_v1/ExtensibleEvent.ts +58 -0
  944. package/src/extensible_events_v1/InvalidEventError.ts +24 -0
  945. package/src/extensible_events_v1/MessageEvent.ts +143 -0
  946. package/src/extensible_events_v1/PollEndEvent.ts +97 -0
  947. package/src/extensible_events_v1/PollResponseEvent.ts +148 -0
  948. package/src/extensible_events_v1/PollStartEvent.ts +207 -0
  949. package/src/extensible_events_v1/utilities.ts +35 -0
  950. package/src/feature.ts +88 -0
  951. package/src/filter-component.ts +209 -0
  952. package/src/filter.ts +245 -0
  953. package/src/http-api/errors.ts +261 -0
  954. package/src/http-api/fetch.ts +377 -0
  955. package/src/http-api/index.ts +194 -0
  956. package/src/http-api/interface.ts +229 -0
  957. package/src/http-api/method.ts +25 -0
  958. package/src/http-api/prefix.ts +48 -0
  959. package/src/http-api/refresh.ts +167 -0
  960. package/src/http-api/utils.ts +217 -0
  961. package/src/index.ts +25 -0
  962. package/src/indexeddb-helpers.ts +50 -0
  963. package/src/indexeddb-worker.ts +24 -0
  964. package/src/interactive-auth.ts +700 -0
  965. package/src/logger.ts +279 -0
  966. package/src/matrixrtc/CallMembership.ts +438 -0
  967. package/src/matrixrtc/EncryptionManager.ts +54 -0
  968. package/src/matrixrtc/IKeyTransport.ts +63 -0
  969. package/src/matrixrtc/IMembershipManager.ts +120 -0
  970. package/src/matrixrtc/LivekitTransport.ts +46 -0
  971. package/src/matrixrtc/MatrixRTCSession.ts +934 -0
  972. package/src/matrixrtc/MatrixRTCSessionManager.ts +170 -0
  973. package/src/matrixrtc/MembershipManager.ts +1122 -0
  974. package/src/matrixrtc/MembershipManagerActionScheduler.ts +135 -0
  975. package/src/matrixrtc/RTCEncryptionManager.ts +459 -0
  976. package/src/matrixrtc/ToDeviceKeyTransport.ts +197 -0
  977. package/src/matrixrtc/index.ts +24 -0
  978. package/src/matrixrtc/membershipData/common.ts +27 -0
  979. package/src/matrixrtc/membershipData/index.ts +19 -0
  980. package/src/matrixrtc/membershipData/rtc.ts +156 -0
  981. package/src/matrixrtc/membershipData/session.ts +146 -0
  982. package/src/matrixrtc/types.ts +227 -0
  983. package/src/matrixrtc/utils.ts +71 -0
  984. package/src/models/MSC3089Branch.ts +272 -0
  985. package/src/models/MSC3089TreeSpace.ts +565 -0
  986. package/src/models/ToDeviceMessage.ts +38 -0
  987. package/src/models/beacon.ts +213 -0
  988. package/src/models/compare-event-ordering.ts +139 -0
  989. package/src/models/device.ts +85 -0
  990. package/src/models/event-context.ts +110 -0
  991. package/src/models/event-status.ts +39 -0
  992. package/src/models/event-timeline-set.ts +962 -0
  993. package/src/models/event-timeline.ts +461 -0
  994. package/src/models/event.ts +1819 -0
  995. package/src/models/invites-ignorer-types.ts +58 -0
  996. package/src/models/invites-ignorer.ts +341 -0
  997. package/src/models/poll.ts +285 -0
  998. package/src/models/profile-keys.ts +33 -0
  999. package/src/models/read-receipt.ts +422 -0
  1000. package/src/models/related-relations.ts +39 -0
  1001. package/src/models/relations-container.ts +149 -0
  1002. package/src/models/relations.ts +392 -0
  1003. package/src/models/room-member.ts +486 -0
  1004. package/src/models/room-receipts.ts +439 -0
  1005. package/src/models/room-state.ts +1230 -0
  1006. package/src/models/room-sticky-events.ts +383 -0
  1007. package/src/models/room-summary.ts +78 -0
  1008. package/src/models/room.ts +4067 -0
  1009. package/src/models/search-result.ts +57 -0
  1010. package/src/models/thread.ts +928 -0
  1011. package/src/models/typed-event-emitter.ts +246 -0
  1012. package/src/models/user.ts +302 -0
  1013. package/src/oidc/authorize.ts +279 -0
  1014. package/src/oidc/discovery.ts +67 -0
  1015. package/src/oidc/error.ts +33 -0
  1016. package/src/oidc/index.ts +33 -0
  1017. package/src/oidc/register.ts +163 -0
  1018. package/src/oidc/tokenRefresher.ts +184 -0
  1019. package/src/oidc/validate.ts +265 -0
  1020. package/src/pushprocessor.ts +856 -0
  1021. package/src/randomstring.ts +103 -0
  1022. package/src/realtime-callbacks.ts +191 -0
  1023. package/src/receipt-accumulator.ts +189 -0
  1024. package/src/rendezvous/MSC4108SignInWithQR.ts +443 -0
  1025. package/src/rendezvous/RendezvousChannel.ts +48 -0
  1026. package/src/rendezvous/RendezvousCode.ts +25 -0
  1027. package/src/rendezvous/RendezvousError.ts +26 -0
  1028. package/src/rendezvous/RendezvousFailureReason.ts +49 -0
  1029. package/src/rendezvous/RendezvousIntent.ts +20 -0
  1030. package/src/rendezvous/RendezvousTransport.ts +58 -0
  1031. package/src/rendezvous/channels/MSC4108SecureChannel.ts +270 -0
  1032. package/src/rendezvous/channels/index.ts +17 -0
  1033. package/src/rendezvous/index.ts +25 -0
  1034. package/src/rendezvous/transports/MSC4108RendezvousSession.ts +272 -0
  1035. package/src/rendezvous/transports/index.ts +17 -0
  1036. package/src/room-hierarchy.ts +152 -0
  1037. package/src/rust-crypto/CrossSigningIdentity.ts +195 -0
  1038. package/src/rust-crypto/DehydratedDeviceManager.ts +392 -0
  1039. package/src/rust-crypto/KeyClaimManager.ts +86 -0
  1040. package/src/rust-crypto/OutgoingRequestProcessor.ts +233 -0
  1041. package/src/rust-crypto/OutgoingRequestsManager.ts +170 -0
  1042. package/src/rust-crypto/PerSessionKeyBackupDownloader.ts +501 -0
  1043. package/src/rust-crypto/RoomEncryptor.ts +362 -0
  1044. package/src/rust-crypto/backup.ts +942 -0
  1045. package/src/rust-crypto/constants.ts +18 -0
  1046. package/src/rust-crypto/device-converter.ts +128 -0
  1047. package/src/rust-crypto/index.ts +251 -0
  1048. package/src/rust-crypto/libolm_migration.ts +532 -0
  1049. package/src/rust-crypto/rust-crypto.ts +2542 -0
  1050. package/src/rust-crypto/secret-storage.ts +60 -0
  1051. package/src/rust-crypto/verification.ts +833 -0
  1052. package/src/scheduler.ts +309 -0
  1053. package/src/secret-storage.ts +714 -0
  1054. package/src/serverCapabilities.ts +146 -0
  1055. package/src/service-types.ts +20 -0
  1056. package/src/sliding-sync-sdk.ts +1005 -0
  1057. package/src/sliding-sync.ts +674 -0
  1058. package/src/store/index.ts +261 -0
  1059. package/src/store/indexeddb-backend.ts +41 -0
  1060. package/src/store/indexeddb-local-backend.ts +610 -0
  1061. package/src/store/indexeddb-remote-backend.ts +212 -0
  1062. package/src/store/indexeddb-store-worker.ts +157 -0
  1063. package/src/store/indexeddb.ts +397 -0
  1064. package/src/store/local-storage-events-emitter.ts +46 -0
  1065. package/src/store/memory.ts +448 -0
  1066. package/src/store/stub.ts +280 -0
  1067. package/src/sync-accumulator.ts +779 -0
  1068. package/src/sync.ts +2020 -0
  1069. package/src/testing.ts +231 -0
  1070. package/src/thread-utils.ts +31 -0
  1071. package/src/timeline-window.ts +534 -0
  1072. package/src/types.ts +59 -0
  1073. package/src/utils/decryptAESSecretStorageItem.ts +54 -0
  1074. package/src/utils/encryptAESSecretStorageItem.ts +73 -0
  1075. package/src/utils/internal/deriveKeys.ts +63 -0
  1076. package/src/utils/roomVersion.ts +35 -0
  1077. package/src/utils.ts +775 -0
  1078. package/src/version-support.ts +50 -0
  1079. package/src/webrtc/audioContext.ts +44 -0
  1080. package/src/webrtc/call.ts +3061 -0
  1081. package/src/webrtc/callEventHandler.ts +425 -0
  1082. package/src/webrtc/callEventTypes.ts +101 -0
  1083. package/src/webrtc/callFeed.ts +364 -0
  1084. package/src/webrtc/groupCall.ts +1729 -0
  1085. package/src/webrtc/groupCallEventHandler.ts +234 -0
  1086. package/src/webrtc/mediaHandler.ts +501 -0
  1087. package/src/webrtc/stats/callFeedStatsReporter.ts +91 -0
  1088. package/src/webrtc/stats/callStatsReportGatherer.ts +219 -0
  1089. package/src/webrtc/stats/callStatsReportSummary.ts +30 -0
  1090. package/src/webrtc/stats/connectionStats.ts +47 -0
  1091. package/src/webrtc/stats/connectionStatsBuilder.ts +28 -0
  1092. package/src/webrtc/stats/connectionStatsReportBuilder.ts +140 -0
  1093. package/src/webrtc/stats/groupCallStats.ts +93 -0
  1094. package/src/webrtc/stats/media/mediaSsrcHandler.ts +57 -0
  1095. package/src/webrtc/stats/media/mediaTrackHandler.ts +70 -0
  1096. package/src/webrtc/stats/media/mediaTrackStats.ts +176 -0
  1097. package/src/webrtc/stats/media/mediaTrackStatsHandler.ts +90 -0
  1098. package/src/webrtc/stats/statsReport.ts +133 -0
  1099. package/src/webrtc/stats/statsReportEmitter.ts +49 -0
  1100. package/src/webrtc/stats/summaryStatsReportGatherer.ts +148 -0
  1101. package/src/webrtc/stats/trackStatsBuilder.ts +207 -0
  1102. package/src/webrtc/stats/transportStats.ts +26 -0
  1103. package/src/webrtc/stats/transportStatsBuilder.ts +48 -0
  1104. package/src/webrtc/stats/valueFormatter.ts +27 -0
@@ -0,0 +1,2324 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
+ /*
6
+ Copyright 2022-2023 The Matrix.org Foundation C.I.C.
7
+
8
+ Licensed under the Apache License, Version 2.0 (the "License");
9
+ you may not use this file except in compliance with the License.
10
+ You may obtain a copy of the License at
11
+
12
+ http://www.apache.org/licenses/LICENSE-2.0
13
+
14
+ Unless required by applicable law or agreed to in writing, software
15
+ distributed under the License is distributed on an "AS IS" BASIS,
16
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ See the License for the specific language governing permissions and
18
+ limitations under the License.
19
+ */
20
+
21
+ import anotherjson from "another-json";
22
+ import * as RustSdkCryptoJs from "@matrix-org/matrix-sdk-crypto-wasm";
23
+ import { KnownMembership } from "../@types/membership.js";
24
+ import { BriijEventEvent } from "../models/event.js";
25
+ import { DecryptionError } from "../common-crypto/CryptoBackend.js";
26
+ import { LogSpan } from "../logger.js";
27
+ import { Method } from "../http-api/index.js";
28
+ import { RoomEncryptor } from "./RoomEncryptor.js";
29
+ import { OutgoingRequestProcessor } from "./OutgoingRequestProcessor.js";
30
+ import { KeyClaimManager } from "./KeyClaimManager.js";
31
+ import { MapWithDefault } from "../utils.js";
32
+ import { AllDevicesIsolationMode, CrossSigningKey, CryptoEvent, DecryptionFailureCode, DecryptionKeyDoesNotMatchError, deriveRecoveryKeyFromPassphrase, DeviceIsolationModeKind, DeviceVerificationStatus, encodeRecoveryKey, EventShieldColour, EventShieldReason, ImportRoomKeyStage, UserVerificationStatus } from "../crypto-api/index.js";
33
+ import { deviceKeysToDeviceMap, rustDeviceToJsDevice } from "./device-converter.js";
34
+ import { SECRET_STORAGE_ALGORITHM_V1_AES } from "../secret-storage.js";
35
+ import { CrossSigningIdentity } from "./CrossSigningIdentity.js";
36
+ import { secretStorageContainsCrossSigningKeys } from "./secret-storage.js";
37
+ import { isVerificationEvent, RustVerificationRequest, verificationMethodIdentifierToMethod } from "./verification.js";
38
+ import { EventType, MsgType } from "../@types/event.js";
39
+ import { TypedEventEmitter } from "../models/typed-event-emitter.js";
40
+ import { decryptionKeyMatchesKeyBackupInfo, RustBackupManager } from "./backup.js";
41
+ import { TypedReEmitter } from "../ReEmitter.js";
42
+ import { secureRandomString } from "../randomstring.js";
43
+ import { ClientStoppedError } from "../errors.js";
44
+ import { decodeBase64, encodeBase64 } from "../base64.js";
45
+ import { OutgoingRequestsManager } from "./OutgoingRequestsManager.js";
46
+ import { PerSessionKeyBackupDownloader } from "./PerSessionKeyBackupDownloader.js";
47
+ import { DehydratedDeviceManager } from "./DehydratedDeviceManager.js";
48
+ import { VerificationMethod } from "../types.js";
49
+ import { keyFromAuthData } from "../common-crypto/key-passphrase.js";
50
+ import { getHttpUriForMxc } from "../content-repo.js";
51
+ var ALL_VERIFICATION_METHODS = [VerificationMethod.Sas, VerificationMethod.ScanQrCode, VerificationMethod.ShowQrCode, VerificationMethod.Reciprocate];
52
+ /**
53
+ * An implementation of {@link CryptoBackend} using the Rust matrix-sdk-crypto.
54
+ *
55
+ * @internal
56
+ */
57
+ export class RustCrypto extends TypedEventEmitter {
58
+ constructor(logger, /** The `OlmMachine` from the underlying rust crypto sdk. */
59
+ olmMachine,
60
+ /**
61
+ * Low-level HTTP interface: used to make outgoing requests required by the rust SDK.
62
+ *
63
+ * We expect it to set the access token, etc.
64
+ */
65
+ http, /** The local user's User ID. */
66
+ userId, /** The local user's Device ID. */
67
+ _deviceId, /** Interface to server-side secret storage */
68
+ secretStorage, /** Crypto callbacks provided by the application */
69
+ cryptoCallbacks) {
70
+ var enableEncryptedStateEvents = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : false;
71
+ super();
72
+ this.logger = logger;
73
+ this.olmMachine = olmMachine;
74
+ this.http = http;
75
+ this.userId = userId;
76
+ this.secretStorage = secretStorage;
77
+ this.cryptoCallbacks = cryptoCallbacks;
78
+ this.enableEncryptedStateEvents = enableEncryptedStateEvents;
79
+ /**
80
+ * The number of iterations to use when deriving a recovery key from a passphrase.
81
+ */
82
+ _defineProperty(this, "RECOVERY_KEY_DERIVATION_ITERATIONS", 500000);
83
+ _defineProperty(this, "_trustCrossSignedDevices", true);
84
+ _defineProperty(this, "deviceIsolationMode", new AllDevicesIsolationMode(false));
85
+ /** whether {@link stop} has been called */
86
+ _defineProperty(this, "stopped", false);
87
+ /** mapping of roomId → encryptor class */
88
+ _defineProperty(this, "roomEncryptors", {});
89
+ /** mapping of room ID -> inviter ID for rooms pending MSC4268 key bundles */
90
+ _defineProperty(this, "roomsPendingKeyBundles", new Map());
91
+ _defineProperty(this, "eventDecryptor", void 0);
92
+ _defineProperty(this, "keyClaimManager", void 0);
93
+ _defineProperty(this, "outgoingRequestProcessor", void 0);
94
+ _defineProperty(this, "crossSigningIdentity", void 0);
95
+ _defineProperty(this, "backupManager", void 0);
96
+ _defineProperty(this, "outgoingRequestsManager", void 0);
97
+ _defineProperty(this, "perSessionBackupDownloader", void 0);
98
+ _defineProperty(this, "dehydratedDeviceManager", void 0);
99
+ _defineProperty(this, "reemitter", new TypedReEmitter(this));
100
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
101
+ //
102
+ // CryptoApi implementation
103
+ //
104
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
105
+ _defineProperty(this, "globalBlacklistUnverifiedDevices", false);
106
+ /**
107
+ * The verification methods we offer to the other side during an interactive verification.
108
+ */
109
+ _defineProperty(this, "_supportedVerificationMethods", ALL_VERIFICATION_METHODS);
110
+ this.outgoingRequestProcessor = new OutgoingRequestProcessor(logger, olmMachine, http);
111
+ this.outgoingRequestsManager = new OutgoingRequestsManager(this.logger, olmMachine, this.outgoingRequestProcessor);
112
+ this.keyClaimManager = new KeyClaimManager(olmMachine, this.outgoingRequestProcessor);
113
+ this.backupManager = new RustBackupManager(logger, olmMachine, http, this.outgoingRequestProcessor);
114
+ this.perSessionBackupDownloader = new PerSessionKeyBackupDownloader(this.logger, this.olmMachine, this.http, this.backupManager);
115
+ this.dehydratedDeviceManager = new DehydratedDeviceManager(this.logger, olmMachine, http, this.outgoingRequestProcessor, secretStorage);
116
+ this.eventDecryptor = new EventDecryptor(this.logger, olmMachine, this.perSessionBackupDownloader);
117
+
118
+ // re-emit the events emitted by managers
119
+ this.reemitter.reEmit(this.backupManager, [CryptoEvent.KeyBackupStatus, CryptoEvent.KeyBackupSessionsRemaining, CryptoEvent.KeyBackupFailed, CryptoEvent.KeyBackupDecryptionKeyCached]);
120
+ this.reemitter.reEmit(this.dehydratedDeviceManager, [CryptoEvent.DehydratedDeviceCreated, CryptoEvent.DehydratedDeviceUploaded, CryptoEvent.RehydrationStarted, CryptoEvent.RehydrationProgress, CryptoEvent.RehydrationCompleted, CryptoEvent.RehydrationError, CryptoEvent.DehydrationKeyCached, CryptoEvent.DehydratedDeviceRotationError]);
121
+ this.crossSigningIdentity = new CrossSigningIdentity(logger, olmMachine, this.outgoingRequestProcessor, secretStorage);
122
+
123
+ // Check and start in background the key backup connection
124
+ this.checkKeyBackupAndEnable();
125
+ }
126
+
127
+ /**
128
+ * Return the OlmMachine only if {@link RustCrypto#stop} has not been called.
129
+ *
130
+ * This allows us to better handle race conditions where the client is stopped before or during a crypto API call.
131
+ *
132
+ * @throws ClientStoppedError if {@link RustCrypto#stop} has been called.
133
+ */
134
+ getOlmMachineOrThrow() {
135
+ if (this.stopped) {
136
+ throw new ClientStoppedError();
137
+ }
138
+ return this.olmMachine;
139
+ }
140
+
141
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
142
+ //
143
+ // CryptoBackend implementation
144
+ //
145
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
146
+
147
+ set globalErrorOnUnknownDevices(_v) {
148
+ // Not implemented for rust crypto.
149
+ }
150
+ get globalErrorOnUnknownDevices() {
151
+ // Not implemented for rust crypto.
152
+ return false;
153
+ }
154
+ stop() {
155
+ // stop() may be called multiple times, but attempting to close() the OlmMachine twice
156
+ // will cause an error.
157
+ if (this.stopped) {
158
+ return;
159
+ }
160
+ this.stopped = true;
161
+ this.keyClaimManager.stop();
162
+ this.backupManager.stop();
163
+ this.outgoingRequestsManager.stop();
164
+ this.perSessionBackupDownloader.stop();
165
+ this.dehydratedDeviceManager.stop();
166
+
167
+ // make sure we close() the OlmMachine; doing so means that all the Rust objects will be
168
+ // cleaned up; in particular, the indexeddb connections will be closed, which means they
169
+ // can then be deleted.
170
+ this.olmMachine.close();
171
+ }
172
+ encryptEvent(event, _room) {
173
+ var _this = this;
174
+ return _asyncToGenerator(function* () {
175
+ var roomId = event.getRoomId();
176
+ var encryptor = _this.roomEncryptors[roomId];
177
+ if (!encryptor) {
178
+ throw new Error("Cannot encrypt event in unconfigured room ".concat(roomId));
179
+ }
180
+ yield encryptor.encryptEvent(event, _this.globalBlacklistUnverifiedDevices, _this.deviceIsolationMode);
181
+ })();
182
+ }
183
+ decryptEvent(event) {
184
+ var _this2 = this;
185
+ return _asyncToGenerator(function* () {
186
+ var roomId = event.getRoomId();
187
+ if (!roomId) {
188
+ // presumably, a to-device message. These are normally decrypted in preprocessToDeviceMessages
189
+ // so the fact it has come back here suggests that decryption failed.
190
+ //
191
+ // once we drop support for the libolm crypto implementation, we can stop passing to-device messages
192
+ // through decryptEvent and hence get rid of this case.
193
+ throw new Error("to-device event was not decrypted in preprocessToDeviceMessages");
194
+ }
195
+ return yield _this2.eventDecryptor.attemptEventDecryption(event, _this2.deviceIsolationMode);
196
+ })();
197
+ }
198
+
199
+ /**
200
+ * Implementation of {@link CryptoBackend#getBackupDecryptor}.
201
+ */
202
+ getBackupDecryptor(backupInfo, privKey) {
203
+ var _this3 = this;
204
+ return _asyncToGenerator(function* () {
205
+ if (!(privKey instanceof Uint8Array)) {
206
+ throw new Error("getBackupDecryptor: expects Uint8Array");
207
+ }
208
+ if (backupInfo.algorithm != "m.megolm_backup.v1.curve25519-aes-sha2") {
209
+ throw new Error("getBackupDecryptor: Unsupported algorithm ".concat(backupInfo.algorithm));
210
+ }
211
+ var backupDecryptionKey = RustSdkCryptoJs.BackupDecryptionKey.fromBase64(encodeBase64(privKey));
212
+ if (!decryptionKeyMatchesKeyBackupInfo(backupDecryptionKey, backupInfo)) {
213
+ throw new Error("getBackupDecryptor: key backup on server does not match the decryption key");
214
+ }
215
+ return _this3.backupManager.createBackupDecryptor(backupDecryptionKey);
216
+ })();
217
+ }
218
+
219
+ /**
220
+ * Implementation of {@link CryptoBackend#importBackedUpRoomKeys}.
221
+ */
222
+ importBackedUpRoomKeys(keys, backupVersion, opts) {
223
+ var _this4 = this;
224
+ return _asyncToGenerator(function* () {
225
+ return yield _this4.backupManager.importBackedUpRoomKeys(keys, backupVersion, opts);
226
+ })();
227
+ }
228
+
229
+ /**
230
+ * Implementation of {@link CryptoBackend.maybeAcceptKeyBundle}.
231
+ */
232
+ maybeAcceptKeyBundle(roomId, inviter) {
233
+ var _this5 = this;
234
+ return _asyncToGenerator(function* () {
235
+ // TODO: retry this if it gets interrupted or it fails. (https://github.com/matrix-org/matrix-rust-sdk/issues/5112)
236
+ // TODO: do this in the background.
237
+
238
+ var logger = new LogSpan(_this5.logger, "maybeAcceptKeyBundle(".concat(roomId, ", ").concat(inviter, ")"));
239
+
240
+ // Make sure we have an up-to-date idea of the inviter's cross-signing keys, so that we can check if the
241
+ // device that sent us the bundle data was correctly cross-signed.
242
+ //
243
+ // TODO: it would be nice to skip this step if we have an up-to-date copy of the inviter's cross-signing keys,
244
+ // but we don't have an easy way to check that. Possibly the rust side could trigger a key request and then
245
+ // block until it happens.
246
+ logger.info("Checking inviter cross-signing keys");
247
+ var request = _this5.olmMachine.queryKeysForUsers([new RustSdkCryptoJs.UserId(inviter)]);
248
+ yield _this5.outgoingRequestProcessor.makeOutgoingRequest(request);
249
+ var bundleData = yield _this5.olmMachine.getReceivedRoomKeyBundleData(new RustSdkCryptoJs.RoomId(roomId), new RustSdkCryptoJs.UserId(inviter));
250
+ if (!bundleData) {
251
+ logger.info("No key bundle found for user");
252
+ return false;
253
+ }
254
+ logger.info("Fetching key bundle ".concat(bundleData.url));
255
+ var url = getHttpUriForMxc(_this5.http.opts.baseUrl, bundleData.url, undefined, undefined, undefined, /* allowDirectLinks */false, /* allowRedirects */true, /* useAuthentication */true);
256
+ var encryptedBundle;
257
+ try {
258
+ var bundleUrl = new URL(url);
259
+ encryptedBundle = yield _this5.http.authedRequest(Method.Get, bundleUrl.pathname + bundleUrl.search, {}, undefined, {
260
+ rawResponseBody: true,
261
+ prefix: ""
262
+ });
263
+ } catch (err) {
264
+ logger.warn("Error downloading encrypted bundle from ".concat(url, ":"), err);
265
+ throw err;
266
+ }
267
+ logger.info("Received blob of length ".concat(encryptedBundle.size));
268
+ try {
269
+ yield _this5.olmMachine.receiveRoomKeyBundle(bundleData, new Uint8Array(yield encryptedBundle.arrayBuffer()));
270
+ } catch (err) {
271
+ logger.warn("Error receiving encrypted bundle:", err);
272
+ throw err;
273
+ }
274
+ return true;
275
+ })();
276
+ }
277
+
278
+ /**
279
+ * Implementation of {@link CryptoBackend.markRoomAsPendingKeyBundle}.
280
+ */
281
+ markRoomAsPendingKeyBundle(roomId, inviter) {
282
+ this.roomsPendingKeyBundles.set(roomId, inviter);
283
+ }
284
+ /**
285
+ * Implementation of {@link CryptoApi#getVersion}.
286
+ */
287
+ getVersion() {
288
+ var versions = RustSdkCryptoJs.getVersions();
289
+ return "Rust SDK ".concat(versions.matrix_sdk_crypto, " (").concat(versions.git_sha, "), Vodozemac ").concat(versions.vodozemac);
290
+ }
291
+
292
+ /**
293
+ * Implementation of {@link CryptoApi#setDeviceIsolationMode}.
294
+ */
295
+ setDeviceIsolationMode(isolationMode) {
296
+ this.deviceIsolationMode = isolationMode;
297
+ }
298
+
299
+ /**
300
+ * Implementation of {@link CryptoApi#isEncryptionEnabledInRoom}.
301
+ */
302
+ isEncryptionEnabledInRoom(roomId) {
303
+ var _this6 = this;
304
+ return _asyncToGenerator(function* () {
305
+ var roomSettings = yield _this6.olmMachine.getRoomSettings(new RustSdkCryptoJs.RoomId(roomId));
306
+ return Boolean(roomSettings === null || roomSettings === void 0 ? void 0 : roomSettings.algorithm);
307
+ })();
308
+ }
309
+
310
+ /**
311
+ * Implementation of {@link CryptoApi#isStateEncryptionEnabledInRoom}.
312
+ */
313
+ isStateEncryptionEnabledInRoom(roomId) {
314
+ var _this7 = this;
315
+ return _asyncToGenerator(function* () {
316
+ var roomSettings = yield _this7.olmMachine.getRoomSettings(new RustSdkCryptoJs.RoomId(roomId));
317
+ return Boolean(roomSettings === null || roomSettings === void 0 ? void 0 : roomSettings.encryptStateEvents);
318
+ })();
319
+ }
320
+
321
+ /**
322
+ * Implementation of {@link CryptoApi#getOwnDeviceKeys}.
323
+ */
324
+ getOwnDeviceKeys() {
325
+ var _this8 = this;
326
+ return _asyncToGenerator(function* () {
327
+ var keys = _this8.olmMachine.identityKeys;
328
+ return {
329
+ ed25519: keys.ed25519.toBase64(),
330
+ curve25519: keys.curve25519.toBase64()
331
+ };
332
+ })();
333
+ }
334
+ prepareToEncrypt(room) {
335
+ var encryptor = this.roomEncryptors[room.roomId];
336
+ if (encryptor) {
337
+ encryptor.prepareForEncryption(this.globalBlacklistUnverifiedDevices, this.deviceIsolationMode);
338
+ }
339
+ }
340
+ forceDiscardSession(roomId) {
341
+ var _this$roomEncryptors$;
342
+ return (_this$roomEncryptors$ = this.roomEncryptors[roomId]) === null || _this$roomEncryptors$ === void 0 ? void 0 : _this$roomEncryptors$.forceDiscardSession();
343
+ }
344
+ exportRoomKeys() {
345
+ var _this9 = this;
346
+ return _asyncToGenerator(function* () {
347
+ var raw = yield _this9.olmMachine.exportRoomKeys(() => true);
348
+ return JSON.parse(raw);
349
+ })();
350
+ }
351
+ exportRoomKeysAsJson() {
352
+ var _this0 = this;
353
+ return _asyncToGenerator(function* () {
354
+ return yield _this0.olmMachine.exportRoomKeys(() => true);
355
+ })();
356
+ }
357
+ importRoomKeys(keys, opts) {
358
+ var _this1 = this;
359
+ return _asyncToGenerator(function* () {
360
+ return yield _this1.backupManager.importRoomKeys(keys, opts);
361
+ })();
362
+ }
363
+ importRoomKeysAsJson(keys, opts) {
364
+ var _this10 = this;
365
+ return _asyncToGenerator(function* () {
366
+ return yield _this10.backupManager.importRoomKeysAsJson(keys, opts);
367
+ })();
368
+ }
369
+
370
+ /**
371
+ * Implementation of {@link CryptoApi.userHasCrossSigningKeys}.
372
+ */
373
+ userHasCrossSigningKeys() {
374
+ var _arguments = arguments,
375
+ _this11 = this;
376
+ return _asyncToGenerator(function* () {
377
+ var userId = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : _this11.userId;
378
+ var downloadUncached = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : false;
379
+ // TODO: could probably do with a more efficient way of doing this than returning the whole set and searching
380
+ var rustTrackedUsers = yield _this11.olmMachine.trackedUsers();
381
+ var rustTrackedUser;
382
+ for (var u of rustTrackedUsers) {
383
+ if (userId === u.toString()) {
384
+ rustTrackedUser = u;
385
+ break;
386
+ }
387
+ }
388
+ if (rustTrackedUser !== undefined) {
389
+ if (userId === _this11.userId) {
390
+ /* make sure we have an *up-to-date* idea of the user's cross-signing keys. This is important, because if we
391
+ * return "false" here, we will end up generating new cross-signing keys and replacing the existing ones.
392
+ */
393
+ var request = _this11.olmMachine.queryKeysForUsers(
394
+ // clone as rust layer will take ownership and it's reused later
395
+ [rustTrackedUser.clone()]);
396
+ yield _this11.outgoingRequestProcessor.makeOutgoingRequest(request);
397
+ }
398
+ var userIdentity = yield _this11.olmMachine.getIdentity(rustTrackedUser);
399
+ userIdentity === null || userIdentity === void 0 || userIdentity.free();
400
+ return userIdentity !== undefined;
401
+ } else if (downloadUncached) {
402
+ var _keyResult$master_key;
403
+ // Download the cross signing keys and check if the master key is available
404
+ var keyResult = yield _this11.downloadDeviceList(new Set([userId]));
405
+ var keys = (_keyResult$master_key = keyResult.master_keys) === null || _keyResult$master_key === void 0 ? void 0 : _keyResult$master_key[userId];
406
+
407
+ // No master key
408
+ if (!keys) return false;
409
+
410
+ // `keys` is an object with { [`ed25519:${pubKey}`]: pubKey }
411
+ // We assume only a single key, and we want the bare form without type
412
+ // prefix, so we select the values.
413
+ return Boolean(Object.values(keys.keys)[0]);
414
+ } else {
415
+ return false;
416
+ }
417
+ })();
418
+ }
419
+
420
+ /**
421
+ * Get the device information for the given list of users.
422
+ *
423
+ * @param userIds - The users to fetch.
424
+ * @param downloadUncached - If true, download the device list for users whose device list we are not
425
+ * currently tracking. Defaults to false, in which case such users will not appear at all in the result map.
426
+ *
427
+ * @returns A map `{@link DeviceMap}`.
428
+ */
429
+ getUserDeviceInfo(userIds) {
430
+ var _arguments2 = arguments,
431
+ _this12 = this;
432
+ return _asyncToGenerator(function* () {
433
+ var downloadUncached = _arguments2.length > 1 && _arguments2[1] !== undefined ? _arguments2[1] : false;
434
+ var deviceMapByUserId = new Map();
435
+ var rustTrackedUsers = yield _this12.getOlmMachineOrThrow().trackedUsers();
436
+
437
+ // Convert RustSdkCryptoJs.UserId to a `Set<string>`
438
+ var trackedUsers = new Set();
439
+ rustTrackedUsers.forEach(rustUserId => trackedUsers.add(rustUserId.toString()));
440
+
441
+ // Keep untracked user to download their keys after
442
+ var untrackedUsers = new Set();
443
+ for (var _userId of userIds) {
444
+ // if this is a tracked user, we can just fetch the device list from the rust-sdk
445
+ // (NB: this is probably ok even if we race with a leave event such that we stop tracking the user's
446
+ // devices: the rust-sdk will return the last-known device list, which will be good enough.)
447
+ if (trackedUsers.has(_userId)) {
448
+ deviceMapByUserId.set(_userId, yield _this12.getUserDevices(_userId));
449
+ } else {
450
+ untrackedUsers.add(_userId);
451
+ }
452
+ }
453
+
454
+ // for any users whose device lists we are not tracking, fall back to downloading the device list
455
+ // over HTTP.
456
+ if (downloadUncached && untrackedUsers.size >= 1) {
457
+ var queryResult = yield _this12.downloadDeviceList(untrackedUsers);
458
+ Object.entries(queryResult.device_keys).forEach(_ref => {
459
+ var [userId, deviceKeys] = _ref;
460
+ return deviceMapByUserId.set(userId, deviceKeysToDeviceMap(deviceKeys));
461
+ });
462
+ }
463
+ return deviceMapByUserId;
464
+ })();
465
+ }
466
+
467
+ /**
468
+ * Get the device list for the given user from the olm machine
469
+ * @param userId - Rust SDK UserId
470
+ */
471
+ getUserDevices(userId) {
472
+ var _this13 = this;
473
+ return _asyncToGenerator(function* () {
474
+ var rustUserId = new RustSdkCryptoJs.UserId(userId);
475
+
476
+ // For reasons I don't really understand, the Javascript FinalizationRegistry doesn't seem to run the
477
+ // registered callbacks when `userDevices` goes out of scope, nor when the individual devices in the array
478
+ // returned by `userDevices.devices` do so.
479
+ //
480
+ // This is particularly problematic, because each of those structures holds a reference to the
481
+ // VerificationMachine, which in turn holds a reference to the IndexeddbCryptoStore. Hence, we end up leaking
482
+ // open connections to the crypto store, which means the store can't be deleted on logout.
483
+ //
484
+ // To fix this, we explicitly call `.free` on each of the objects, which tells the rust code to drop the
485
+ // allocated memory and decrement the refcounts for the crypto store.
486
+
487
+ // Wait for up to a second for any in-flight device list requests to complete.
488
+ // The reason for this isn't so much to avoid races (some level of raciness is
489
+ // inevitable for this method) but to make testing easier.
490
+ var userDevices = yield _this13.olmMachine.getUserDevices(rustUserId, 1);
491
+ try {
492
+ var deviceArray = userDevices.devices();
493
+ try {
494
+ return new Map(deviceArray.map(device => [device.deviceId.toString(), rustDeviceToJsDevice(device, rustUserId)]));
495
+ } finally {
496
+ deviceArray.forEach(d => d.free());
497
+ }
498
+ } finally {
499
+ userDevices.free();
500
+ }
501
+ })();
502
+ }
503
+
504
+ /**
505
+ * Download the given user keys by calling `/keys/query` request
506
+ * @param untrackedUsers - download keys of these users
507
+ */
508
+ downloadDeviceList(untrackedUsers) {
509
+ var _this14 = this;
510
+ return _asyncToGenerator(function* () {
511
+ var queryBody = {
512
+ device_keys: {}
513
+ };
514
+ untrackedUsers.forEach(user => queryBody.device_keys[user] = []);
515
+ return yield _this14.http.authedRequest(Method.Post, "/_matrix/client/v3/keys/query", undefined, queryBody, {
516
+ prefix: ""
517
+ });
518
+ })();
519
+ }
520
+
521
+ /**
522
+ * Implementation of {@link CryptoApi#getTrustCrossSignedDevices}.
523
+ */
524
+ getTrustCrossSignedDevices() {
525
+ return this._trustCrossSignedDevices;
526
+ }
527
+
528
+ /**
529
+ * Implementation of {@link CryptoApi#setTrustCrossSignedDevices}.
530
+ */
531
+ setTrustCrossSignedDevices(val) {
532
+ this._trustCrossSignedDevices = val;
533
+ // TODO: legacy crypto goes through the list of known devices and emits DeviceVerificationChanged
534
+ // events. Maybe we need to do the same?
535
+ }
536
+
537
+ /**
538
+ * Mark the given device as locally verified.
539
+ *
540
+ * Implementation of {@link CryptoApi#setDeviceVerified}.
541
+ */
542
+ setDeviceVerified(userId, deviceId) {
543
+ var _arguments3 = arguments,
544
+ _this15 = this;
545
+ return _asyncToGenerator(function* () {
546
+ var verified = _arguments3.length > 2 && _arguments3[2] !== undefined ? _arguments3[2] : true;
547
+ var device = yield _this15.olmMachine.getDevice(new RustSdkCryptoJs.UserId(userId), new RustSdkCryptoJs.DeviceId(deviceId));
548
+ if (!device) {
549
+ throw new Error("Unknown device ".concat(userId, "|").concat(deviceId));
550
+ }
551
+ try {
552
+ yield device.setLocalTrust(verified ? RustSdkCryptoJs.LocalTrust.Verified : RustSdkCryptoJs.LocalTrust.Unset);
553
+ } finally {
554
+ device.free();
555
+ }
556
+ })();
557
+ }
558
+
559
+ /**
560
+ * Blindly cross-sign one of our other devices.
561
+ *
562
+ * Implementation of {@link CryptoApi#crossSignDevice}.
563
+ */
564
+ crossSignDevice(deviceId) {
565
+ var _this16 = this;
566
+ return _asyncToGenerator(function* () {
567
+ var device = yield _this16.olmMachine.getDevice(new RustSdkCryptoJs.UserId(_this16.userId), new RustSdkCryptoJs.DeviceId(deviceId));
568
+ if (!device) {
569
+ throw new Error("Unknown device ".concat(deviceId));
570
+ }
571
+ try {
572
+ var outgoingRequest = yield device.verify();
573
+ yield _this16.outgoingRequestProcessor.makeOutgoingRequest(outgoingRequest);
574
+ } finally {
575
+ device.free();
576
+ }
577
+ })();
578
+ }
579
+
580
+ /**
581
+ * Implementation of {@link CryptoApi#getDeviceVerificationStatus}.
582
+ */
583
+ getDeviceVerificationStatus(userId, deviceId) {
584
+ var _this17 = this;
585
+ return _asyncToGenerator(function* () {
586
+ var device = yield _this17.olmMachine.getDevice(new RustSdkCryptoJs.UserId(userId), new RustSdkCryptoJs.DeviceId(deviceId));
587
+ if (!device) return null;
588
+ try {
589
+ return new DeviceVerificationStatus({
590
+ signedByOwner: device.isCrossSignedByOwner(),
591
+ crossSigningVerified: device.isCrossSigningTrusted(),
592
+ localVerified: device.isLocallyTrusted(),
593
+ trustCrossSignedDevices: _this17._trustCrossSignedDevices
594
+ });
595
+ } finally {
596
+ device.free();
597
+ }
598
+ })();
599
+ }
600
+
601
+ /**
602
+ * Implementation of {@link CryptoApi#getUserVerificationStatus}.
603
+ */
604
+ getUserVerificationStatus(userId) {
605
+ var _this18 = this;
606
+ return _asyncToGenerator(function* () {
607
+ var userIdentity = yield _this18.getOlmMachineOrThrow().getIdentity(new RustSdkCryptoJs.UserId(userId));
608
+ if (userIdentity === undefined) {
609
+ return new UserVerificationStatus(false, false, false);
610
+ }
611
+ var verified = userIdentity.isVerified();
612
+ var wasVerified = userIdentity.wasPreviouslyVerified();
613
+ var needsUserApproval = userIdentity instanceof RustSdkCryptoJs.OtherUserIdentity ? userIdentity.identityNeedsUserApproval() : false;
614
+ userIdentity.free();
615
+ return new UserVerificationStatus(verified, wasVerified, false, needsUserApproval);
616
+ })();
617
+ }
618
+
619
+ /**
620
+ * Implementation of {@link CryptoApi#pinCurrentUserIdentity}.
621
+ */
622
+ pinCurrentUserIdentity(userId) {
623
+ var _this19 = this;
624
+ return _asyncToGenerator(function* () {
625
+ var userIdentity = yield _this19.getOlmMachineOrThrow().getIdentity(new RustSdkCryptoJs.UserId(userId));
626
+ if (userIdentity === undefined) {
627
+ throw new Error("Cannot pin identity of unknown user");
628
+ }
629
+ if (userIdentity instanceof RustSdkCryptoJs.OwnUserIdentity) {
630
+ throw new Error("Cannot pin identity of own user");
631
+ }
632
+ yield userIdentity.pinCurrentMasterKey();
633
+ })();
634
+ }
635
+
636
+ /**
637
+ * Implementation of {@link CryptoApi#withdrawVerificationRequirement}.
638
+ */
639
+ withdrawVerificationRequirement(userId) {
640
+ var _this20 = this;
641
+ return _asyncToGenerator(function* () {
642
+ var userIdentity = yield _this20.getOlmMachineOrThrow().getIdentity(new RustSdkCryptoJs.UserId(userId));
643
+ if (userIdentity === undefined) {
644
+ throw new Error("Cannot withdraw verification of unknown user");
645
+ }
646
+ yield userIdentity.withdrawVerification();
647
+ })();
648
+ }
649
+
650
+ /**
651
+ * Implementation of {@link CryptoApi#isCrossSigningReady}
652
+ */
653
+ isCrossSigningReady() {
654
+ var _this21 = this;
655
+ return _asyncToGenerator(function* () {
656
+ var {
657
+ privateKeysInSecretStorage,
658
+ privateKeysCachedLocally
659
+ } = yield _this21.getCrossSigningStatus();
660
+ var hasKeysInCache = Boolean(privateKeysCachedLocally.masterKey) && Boolean(privateKeysCachedLocally.selfSigningKey) && Boolean(privateKeysCachedLocally.userSigningKey);
661
+ var identity = yield _this21.getOwnIdentity();
662
+
663
+ // Cross-signing is ready if the public identity is trusted, and the private keys
664
+ // are either cached, or accessible via secret-storage.
665
+ return !!(identity !== null && identity !== void 0 && identity.isVerified()) && (hasKeysInCache || privateKeysInSecretStorage);
666
+ })();
667
+ }
668
+
669
+ /**
670
+ * Implementation of {@link CryptoApi#getCrossSigningKeyId}
671
+ */
672
+ getCrossSigningKeyId() {
673
+ var _arguments4 = arguments,
674
+ _this22 = this;
675
+ return _asyncToGenerator(function* () {
676
+ var type = _arguments4.length > 0 && _arguments4[0] !== undefined ? _arguments4[0] : CrossSigningKey.Master;
677
+ var userIdentity = yield _this22.olmMachine.getIdentity(new RustSdkCryptoJs.UserId(_this22.userId));
678
+ if (!userIdentity) {
679
+ // The public keys are not available on this device
680
+ return null;
681
+ }
682
+ try {
683
+ var crossSigningStatus = yield _this22.olmMachine.crossSigningStatus();
684
+ var privateKeysOnDevice = crossSigningStatus.hasMaster && crossSigningStatus.hasUserSigning && crossSigningStatus.hasSelfSigning;
685
+ if (!privateKeysOnDevice) {
686
+ // The private keys are not available on this device
687
+ return null;
688
+ }
689
+ if (!userIdentity.isVerified()) {
690
+ // We have both public and private keys, but they don't match!
691
+ return null;
692
+ }
693
+ var key;
694
+ switch (type) {
695
+ case CrossSigningKey.Master:
696
+ key = userIdentity.masterKey;
697
+ break;
698
+ case CrossSigningKey.SelfSigning:
699
+ key = userIdentity.selfSigningKey;
700
+ break;
701
+ case CrossSigningKey.UserSigning:
702
+ key = userIdentity.userSigningKey;
703
+ break;
704
+ default:
705
+ // Unknown type
706
+ return null;
707
+ }
708
+ var parsedKey = JSON.parse(key);
709
+ // `keys` is an object with { [`ed25519:${pubKey}`]: pubKey }
710
+ // We assume only a single key, and we want the bare form without type
711
+ // prefix, so we select the values.
712
+ return Object.values(parsedKey.keys)[0];
713
+ } finally {
714
+ userIdentity.free();
715
+ }
716
+ })();
717
+ }
718
+
719
+ /**
720
+ * Implementation of {@link CryptoApi#bootstrapCrossSigning}
721
+ */
722
+ bootstrapCrossSigning(opts) {
723
+ var _this23 = this;
724
+ return _asyncToGenerator(function* () {
725
+ yield _this23.crossSigningIdentity.bootstrapCrossSigning(opts);
726
+ })();
727
+ }
728
+
729
+ /**
730
+ * Implementation of {@link CryptoApi#isSecretStorageReady}
731
+ */
732
+ isSecretStorageReady() {
733
+ var _this24 = this;
734
+ return _asyncToGenerator(function* () {
735
+ return (yield _this24.getSecretStorageStatus()).ready;
736
+ })();
737
+ }
738
+
739
+ /**
740
+ * Implementation of {@link CryptoApi#getSecretStorageStatus}
741
+ */
742
+ getSecretStorageStatus() {
743
+ var _this25 = this;
744
+ return _asyncToGenerator(function* () {
745
+ // make sure that the cross-signing keys are stored
746
+ var secretsToCheck = ["m.cross_signing.master", "m.cross_signing.user_signing", "m.cross_signing.self_signing"];
747
+
748
+ // If key backup is active, we also need to check that the backup decryption key is stored
749
+ var keyBackupEnabled = (yield _this25.backupManager.getActiveBackupVersion()) != null;
750
+ if (keyBackupEnabled) {
751
+ secretsToCheck.push("m.megolm_backup.v1");
752
+ }
753
+ var defaultKeyId = yield _this25.secretStorage.getDefaultKeyId();
754
+ var result = {
755
+ // Assume we have all secrets until proven otherwise
756
+ ready: true,
757
+ defaultKeyId,
758
+ secretStorageKeyValidityMap: {}
759
+ };
760
+ for (var secretName of secretsToCheck) {
761
+ // Check which keys this particular secret is encrypted with
762
+ var record = (yield _this25.secretStorage.isStored(secretName)) || {};
763
+
764
+ // If it's encrypted with the right key, it is valid
765
+ var secretStored = !!defaultKeyId && defaultKeyId in record;
766
+ result.secretStorageKeyValidityMap[secretName] = secretStored;
767
+ result.ready = result.ready && secretStored;
768
+ }
769
+ return result;
770
+ })();
771
+ }
772
+
773
+ /**
774
+ * Implementation of {@link CryptoApi#bootstrapSecretStorage}
775
+ */
776
+ bootstrapSecretStorage() {
777
+ var _arguments5 = arguments,
778
+ _this26 = this;
779
+ return _asyncToGenerator(function* () {
780
+ var {
781
+ createSecretStorageKey,
782
+ setupNewSecretStorage,
783
+ setupNewKeyBackup
784
+ } = _arguments5.length > 0 && _arguments5[0] !== undefined ? _arguments5[0] : {};
785
+ // If an AES Key is already stored in the secret storage and setupNewSecretStorage is not set
786
+ // we don't want to create a new key
787
+ var isNewSecretStorageKeyNeeded = setupNewSecretStorage || !(yield _this26.secretStorageHasAESKey());
788
+ if (isNewSecretStorageKeyNeeded) {
789
+ if (!createSecretStorageKey) {
790
+ throw new Error("unable to create a new secret storage key, createSecretStorageKey is not set");
791
+ }
792
+
793
+ // Create a new storage key and add it to secret storage
794
+ _this26.logger.info("bootstrapSecretStorage: creating new secret storage key");
795
+ var recoveryKey = yield createSecretStorageKey();
796
+ if (!recoveryKey) {
797
+ throw new Error("createSecretStorageKey() callback did not return a secret storage key");
798
+ }
799
+ yield _this26.addSecretStorageKeyToSecretStorage(recoveryKey);
800
+ }
801
+ var crossSigningPrivateKeys = yield _this26.olmMachine.exportCrossSigningKeys();
802
+ var hasPrivateKeys = crossSigningPrivateKeys && crossSigningPrivateKeys.masterKey !== undefined && crossSigningPrivateKeys.self_signing_key !== undefined && crossSigningPrivateKeys.userSigningKey !== undefined;
803
+
804
+ // If we have cross-signing private keys cached, store them in secret
805
+ // storage if they are not there already.
806
+ if (hasPrivateKeys && (isNewSecretStorageKeyNeeded || !(yield secretStorageContainsCrossSigningKeys(_this26.secretStorage)))) {
807
+ _this26.logger.info("bootstrapSecretStorage: cross-signing keys not yet exported; doing so now.");
808
+ yield _this26.secretStorage.store("m.cross_signing.master", crossSigningPrivateKeys.masterKey);
809
+ yield _this26.secretStorage.store("m.cross_signing.user_signing", crossSigningPrivateKeys.userSigningKey);
810
+ yield _this26.secretStorage.store("m.cross_signing.self_signing", crossSigningPrivateKeys.self_signing_key);
811
+ }
812
+
813
+ // likewise with the key backup key: if we have one, store it in secret storage (if it's not already there)
814
+ // also don't bother storing it if we're about to set up a new backup
815
+ if (!setupNewKeyBackup) {
816
+ yield _this26.saveBackupKeyToStorage();
817
+ } else {
818
+ yield _this26.resetKeyBackup();
819
+ }
820
+ })();
821
+ }
822
+
823
+ /**
824
+ * If we have a backup key for the current, trusted backup in cache,
825
+ * save it to secret storage.
826
+ */
827
+ saveBackupKeyToStorage() {
828
+ var _this27 = this;
829
+ return _asyncToGenerator(function* () {
830
+ var keyBackupInfo = yield _this27.backupManager.getServerBackupInfo();
831
+ if (!keyBackupInfo || !keyBackupInfo.version) {
832
+ _this27.logger.info("Not saving backup key to secret storage: no backup info");
833
+ return;
834
+ }
835
+ var backupKeys = yield _this27.olmMachine.getBackupKeys();
836
+ if (!backupKeys.decryptionKey) {
837
+ _this27.logger.info("Not saving backup key to secret storage: no backup key");
838
+ return;
839
+ }
840
+ if (!decryptionKeyMatchesKeyBackupInfo(backupKeys.decryptionKey, keyBackupInfo)) {
841
+ _this27.logger.info("Not saving backup key to secret storage: decryption key does not match backup info");
842
+ return;
843
+ }
844
+ var backupKeyBase64 = backupKeys.decryptionKey.toBase64();
845
+ yield _this27.secretStorage.store("m.megolm_backup.v1", backupKeyBase64);
846
+ })();
847
+ }
848
+
849
+ /**
850
+ * Add the secretStorage key to the secret storage
851
+ * - The secret storage key must have the `keyInfo` field filled
852
+ * - The secret storage key is set as the default key of the secret storage
853
+ * - Call `cryptoCallbacks.cacheSecretStorageKey` when done
854
+ *
855
+ * @param secretStorageKey - The secret storage key to add in the secret storage.
856
+ */
857
+ addSecretStorageKeyToSecretStorage(secretStorageKey) {
858
+ var _this28 = this;
859
+ return _asyncToGenerator(function* () {
860
+ var _secretStorageKey$key, _secretStorageKey$key2, _this28$cryptoCallbac, _this28$cryptoCallbac2;
861
+ var secretStorageKeyObject = yield _this28.secretStorage.addKey(SECRET_STORAGE_ALGORITHM_V1_AES, {
862
+ passphrase: (_secretStorageKey$key = secretStorageKey.keyInfo) === null || _secretStorageKey$key === void 0 ? void 0 : _secretStorageKey$key.passphrase,
863
+ name: (_secretStorageKey$key2 = secretStorageKey.keyInfo) === null || _secretStorageKey$key2 === void 0 ? void 0 : _secretStorageKey$key2.name,
864
+ key: secretStorageKey.privateKey
865
+ });
866
+ yield _this28.secretStorage.setDefaultKeyId(secretStorageKeyObject.keyId);
867
+ (_this28$cryptoCallbac = (_this28$cryptoCallbac2 = _this28.cryptoCallbacks).cacheSecretStorageKey) === null || _this28$cryptoCallbac === void 0 || _this28$cryptoCallbac.call(_this28$cryptoCallbac2, secretStorageKeyObject.keyId, secretStorageKeyObject.keyInfo, secretStorageKey.privateKey);
868
+ })();
869
+ }
870
+
871
+ /**
872
+ * Check if a secret storage AES Key is already added in secret storage
873
+ *
874
+ * @returns True if an AES key is in the secret storage
875
+ */
876
+ secretStorageHasAESKey() {
877
+ var _this29 = this;
878
+ return _asyncToGenerator(function* () {
879
+ // See if we already have an AES secret-storage key.
880
+ var secretStorageKeyTuple = yield _this29.secretStorage.getKey();
881
+ if (!secretStorageKeyTuple) return false;
882
+ var [, keyInfo] = secretStorageKeyTuple;
883
+
884
+ // Check if the key is an AES key
885
+ return keyInfo.algorithm === SECRET_STORAGE_ALGORITHM_V1_AES;
886
+ })();
887
+ }
888
+
889
+ /**
890
+ * Implementation of {@link CryptoApi#getCrossSigningStatus}
891
+ */
892
+ getCrossSigningStatus() {
893
+ var _this30 = this;
894
+ return _asyncToGenerator(function* () {
895
+ var userIdentity = yield _this30.getOlmMachineOrThrow().getIdentity(new RustSdkCryptoJs.UserId(_this30.userId));
896
+ var publicKeysOnDevice = Boolean(userIdentity === null || userIdentity === void 0 ? void 0 : userIdentity.masterKey) && Boolean(userIdentity === null || userIdentity === void 0 ? void 0 : userIdentity.selfSigningKey) && Boolean(userIdentity === null || userIdentity === void 0 ? void 0 : userIdentity.userSigningKey);
897
+ userIdentity === null || userIdentity === void 0 || userIdentity.free();
898
+ var privateKeysInSecretStorage = yield secretStorageContainsCrossSigningKeys(_this30.secretStorage);
899
+ var crossSigningStatus = yield _this30.getOlmMachineOrThrow().crossSigningStatus();
900
+ return {
901
+ publicKeysOnDevice,
902
+ privateKeysInSecretStorage,
903
+ privateKeysCachedLocally: {
904
+ masterKey: Boolean(crossSigningStatus === null || crossSigningStatus === void 0 ? void 0 : crossSigningStatus.hasMaster),
905
+ userSigningKey: Boolean(crossSigningStatus === null || crossSigningStatus === void 0 ? void 0 : crossSigningStatus.hasUserSigning),
906
+ selfSigningKey: Boolean(crossSigningStatus === null || crossSigningStatus === void 0 ? void 0 : crossSigningStatus.hasSelfSigning)
907
+ }
908
+ };
909
+ })();
910
+ }
911
+
912
+ /**
913
+ * Implementation of {@link CryptoApi#createRecoveryKeyFromPassphrase}
914
+ */
915
+ createRecoveryKeyFromPassphrase(password) {
916
+ var _this31 = this;
917
+ return _asyncToGenerator(function* () {
918
+ if (password) {
919
+ // Generate the key from the passphrase
920
+ // first we generate a random salt
921
+ var salt = secureRandomString(32);
922
+ // then we derive the key from the passphrase
923
+ var recoveryKey = yield deriveRecoveryKeyFromPassphrase(password, salt, _this31.RECOVERY_KEY_DERIVATION_ITERATIONS);
924
+ return {
925
+ keyInfo: {
926
+ passphrase: {
927
+ algorithm: "m.pbkdf2",
928
+ iterations: _this31.RECOVERY_KEY_DERIVATION_ITERATIONS,
929
+ salt
930
+ }
931
+ },
932
+ privateKey: recoveryKey,
933
+ encodedPrivateKey: encodeRecoveryKey(recoveryKey)
934
+ };
935
+ } else {
936
+ // Using the navigator crypto API to generate the private key
937
+ var key = new Uint8Array(32);
938
+ globalThis.crypto.getRandomValues(key);
939
+ return {
940
+ privateKey: key,
941
+ encodedPrivateKey: encodeRecoveryKey(key)
942
+ };
943
+ }
944
+ })();
945
+ }
946
+
947
+ /**
948
+ * Implementation of {@link CryptoApi#getEncryptionInfoForEvent}.
949
+ */
950
+ getEncryptionInfoForEvent(event) {
951
+ var _this32 = this;
952
+ return _asyncToGenerator(function* () {
953
+ return _this32.eventDecryptor.getEncryptionInfoForEvent(event);
954
+ })();
955
+ }
956
+
957
+ /**
958
+ * Returns to-device verification requests that are already in progress for the given user id.
959
+ *
960
+ * Implementation of {@link CryptoApi#getVerificationRequestsToDeviceInProgress}
961
+ *
962
+ * @param userId - the ID of the user to query
963
+ *
964
+ * @returns the VerificationRequests that are in progress
965
+ */
966
+ getVerificationRequestsToDeviceInProgress(userId) {
967
+ var requests = this.olmMachine.getVerificationRequests(new RustSdkCryptoJs.UserId(userId));
968
+ return requests.filter(request => request.roomId === undefined && !request.isCancelled()).map(request => this.makeVerificationRequest(request));
969
+ }
970
+
971
+ /**
972
+ * Finds a DM verification request that is already in progress for the given room id
973
+ *
974
+ * Implementation of {@link CryptoApi#findVerificationRequestDMInProgress}
975
+ *
976
+ * @param roomId - the room to use for verification
977
+ * @param userId - search the verification request for the given user
978
+ *
979
+ * @returns the VerificationRequest that is in progress, if any
980
+ *
981
+ */
982
+ findVerificationRequestDMInProgress(roomId, userId) {
983
+ if (!userId) throw new Error("missing userId");
984
+ var requests = this.olmMachine.getVerificationRequests(new RustSdkCryptoJs.UserId(userId));
985
+
986
+ // Search for the verification request for the given room id
987
+ var request = requests.find(request => {
988
+ var _request$roomId;
989
+ return ((_request$roomId = request.roomId) === null || _request$roomId === void 0 ? void 0 : _request$roomId.toString()) === roomId && !request.isCancelled();
990
+ });
991
+ if (request) {
992
+ return this.makeVerificationRequest(request);
993
+ }
994
+ }
995
+
996
+ /**
997
+ * Implementation of {@link CryptoApi#requestVerificationDM}
998
+ */
999
+ requestVerificationDM(userId, roomId) {
1000
+ var _this33 = this;
1001
+ return _asyncToGenerator(function* () {
1002
+ var userIdentity = yield _this33.olmMachine.getIdentity(new RustSdkCryptoJs.UserId(userId));
1003
+ if (!userIdentity) throw new Error("unknown userId ".concat(userId));
1004
+ try {
1005
+ // Transform the verification methods into rust objects
1006
+ var methods = _this33._supportedVerificationMethods.map(method => verificationMethodIdentifierToMethod(method));
1007
+ // Get the request content to send to the DM room
1008
+ var verCont = yield userIdentity.verificationRequestContent(methods);
1009
+
1010
+ // TODO: due to https://github.com/matrix-org/matrix-rust-sdk/issues/5643, we need to fix up the verification request content to include `msgtype`.
1011
+ var verContObj = JSON.parse(verCont);
1012
+ verContObj["msgtype"] = "m.key.verification.request";
1013
+ var verificationEventContent = JSON.stringify(verContObj);
1014
+
1015
+ // Send the request content to send to the DM room
1016
+ var eventId = yield _this33.sendVerificationRequestContent(roomId, verificationEventContent);
1017
+
1018
+ // Get a verification request
1019
+ var request = yield userIdentity.requestVerification(new RustSdkCryptoJs.RoomId(roomId), new RustSdkCryptoJs.EventId(eventId), methods);
1020
+ return _this33.makeVerificationRequest(request);
1021
+ } finally {
1022
+ userIdentity.free();
1023
+ }
1024
+ })();
1025
+ }
1026
+
1027
+ /**
1028
+ * Send the verification content to a room
1029
+ * See https://spec.matrix.org/v1.7/client-server-api/#put_matrixclientv3roomsroomidsendeventtypetxnid
1030
+ *
1031
+ * Prefer to use {@link OutgoingRequestProcessor.makeOutgoingRequest} when dealing with {@link RustSdkCryptoJs.RoomMessageRequest}
1032
+ *
1033
+ * @param roomId - the targeted room
1034
+ * @param verificationEventContent - the request body.
1035
+ *
1036
+ * @returns the event id
1037
+ */
1038
+ sendVerificationRequestContent(roomId, verificationEventContent) {
1039
+ var _this34 = this;
1040
+ return _asyncToGenerator(function* () {
1041
+ var txId = secureRandomString(32);
1042
+ // Send the verification request content to the DM room
1043
+ var {
1044
+ event_id: eventId
1045
+ } = yield _this34.http.authedRequest(Method.Put, "/_matrix/client/v3/rooms/".concat(encodeURIComponent(roomId), "/send/m.room.message/").concat(encodeURIComponent(txId)), undefined, verificationEventContent, {
1046
+ prefix: ""
1047
+ });
1048
+ return eventId;
1049
+ })();
1050
+ }
1051
+ /**
1052
+ * Set the verification methods we offer to the other side during an interactive verification.
1053
+ *
1054
+ * If `undefined`, we will offer all the methods supported by the Rust SDK.
1055
+ */
1056
+ setSupportedVerificationMethods(methods) {
1057
+ // by default, the Rust SDK does not offer `m.qr_code.scan.v1`, but we do want to offer that.
1058
+ this._supportedVerificationMethods = methods !== null && methods !== void 0 ? methods : ALL_VERIFICATION_METHODS;
1059
+ }
1060
+
1061
+ /**
1062
+ * Send a verification request to our other devices.
1063
+ *
1064
+ * If a verification is already in flight, returns it. Otherwise, initiates a new one.
1065
+ *
1066
+ * Implementation of {@link CryptoApi#requestOwnUserVerification}.
1067
+ *
1068
+ * @returns a VerificationRequest when the request has been sent to the other party.
1069
+ */
1070
+ requestOwnUserVerification() {
1071
+ var _this35 = this;
1072
+ return _asyncToGenerator(function* () {
1073
+ var userIdentity = yield _this35.olmMachine.getIdentity(new RustSdkCryptoJs.UserId(_this35.userId));
1074
+ if (userIdentity === undefined) {
1075
+ throw new Error("cannot request verification for this device when there is no existing cross-signing key");
1076
+ }
1077
+ try {
1078
+ var [request, outgoingRequest] = yield userIdentity.requestVerification(_this35._supportedVerificationMethods.map(verificationMethodIdentifierToMethod));
1079
+ yield _this35.outgoingRequestProcessor.makeOutgoingRequest(outgoingRequest);
1080
+ return _this35.makeVerificationRequest(request);
1081
+ } finally {
1082
+ userIdentity.free();
1083
+ }
1084
+ })();
1085
+ }
1086
+
1087
+ /**
1088
+ * Request an interactive verification with the given device.
1089
+ *
1090
+ * If a verification is already in flight, returns it. Otherwise, initiates a new one.
1091
+ *
1092
+ * Implementation of {@link CryptoApi#requestDeviceVerification}.
1093
+ *
1094
+ * @param userId - ID of the owner of the device to verify
1095
+ * @param deviceId - ID of the device to verify
1096
+ *
1097
+ * @returns a VerificationRequest when the request has been sent to the other party.
1098
+ */
1099
+ requestDeviceVerification(userId, deviceId) {
1100
+ var _this36 = this;
1101
+ return _asyncToGenerator(function* () {
1102
+ var device = yield _this36.olmMachine.getDevice(new RustSdkCryptoJs.UserId(userId), new RustSdkCryptoJs.DeviceId(deviceId));
1103
+ if (!device) {
1104
+ throw new Error("Not a known device");
1105
+ }
1106
+ try {
1107
+ var [request, outgoingRequest] = device.requestVerification(_this36._supportedVerificationMethods.map(verificationMethodIdentifierToMethod));
1108
+ yield _this36.outgoingRequestProcessor.makeOutgoingRequest(outgoingRequest);
1109
+ return _this36.makeVerificationRequest(request);
1110
+ } finally {
1111
+ device.free();
1112
+ }
1113
+ })();
1114
+ }
1115
+
1116
+ /**
1117
+ * Fetch the backup decryption key we have saved in our store.
1118
+ *
1119
+ * Implementation of {@link CryptoApi#getSessionBackupPrivateKey}.
1120
+ *
1121
+ * @returns the key, if any, or null
1122
+ */
1123
+ getSessionBackupPrivateKey() {
1124
+ var _this37 = this;
1125
+ return _asyncToGenerator(function* () {
1126
+ var backupKeys = yield _this37.olmMachine.getBackupKeys();
1127
+ if (!backupKeys.decryptionKey) return null;
1128
+ return decodeBase64(backupKeys.decryptionKey.toBase64());
1129
+ })();
1130
+ }
1131
+
1132
+ /**
1133
+ * Store the backup decryption key.
1134
+ *
1135
+ * Implementation of {@link CryptoApi#storeSessionBackupPrivateKey}.
1136
+ *
1137
+ * @param key - the backup decryption key
1138
+ * @param version - the backup version for this key.
1139
+ */
1140
+ storeSessionBackupPrivateKey(key, version) {
1141
+ var _this38 = this;
1142
+ return _asyncToGenerator(function* () {
1143
+ var base64Key = encodeBase64(key);
1144
+ if (!version) {
1145
+ throw new Error("storeSessionBackupPrivateKey: version is required");
1146
+ }
1147
+ yield _this38.backupManager.saveBackupDecryptionKey(RustSdkCryptoJs.BackupDecryptionKey.fromBase64(base64Key), version);
1148
+ })();
1149
+ }
1150
+
1151
+ /**
1152
+ * Implementation of {@link CryptoApi#loadSessionBackupPrivateKeyFromSecretStorage}.
1153
+ */
1154
+ loadSessionBackupPrivateKeyFromSecretStorage() {
1155
+ var _this39 = this;
1156
+ return _asyncToGenerator(function* () {
1157
+ var backupKey = yield _this39.secretStorage.get("m.megolm_backup.v1");
1158
+ if (!backupKey) {
1159
+ throw new Error("loadSessionBackupPrivateKeyFromSecretStorage: missing decryption key in secret storage");
1160
+ }
1161
+ var keyBackupInfo = yield _this39.backupManager.getServerBackupInfo();
1162
+ if (!keyBackupInfo || !keyBackupInfo.version) {
1163
+ throw new Error("loadSessionBackupPrivateKeyFromSecretStorage: unable to get backup version");
1164
+ }
1165
+ var backupDecryptionKey = RustSdkCryptoJs.BackupDecryptionKey.fromBase64(backupKey);
1166
+ if (!decryptionKeyMatchesKeyBackupInfo(backupDecryptionKey, keyBackupInfo)) {
1167
+ throw new DecryptionKeyDoesNotMatchError("loadSessionBackupPrivateKeyFromSecretStorage: decryption key does not match backup info");
1168
+ }
1169
+ yield _this39.backupManager.saveBackupDecryptionKey(backupDecryptionKey, keyBackupInfo.version);
1170
+ })();
1171
+ }
1172
+
1173
+ /**
1174
+ * Get the current status of key backup.
1175
+ *
1176
+ * Implementation of {@link CryptoApi#getActiveSessionBackupVersion}.
1177
+ */
1178
+ getActiveSessionBackupVersion() {
1179
+ var _this40 = this;
1180
+ return _asyncToGenerator(function* () {
1181
+ return yield _this40.backupManager.getActiveBackupVersion();
1182
+ })();
1183
+ }
1184
+
1185
+ /**
1186
+ * Implementation of {@link CryptoApi#getKeyBackupInfo}.
1187
+ */
1188
+ getKeyBackupInfo() {
1189
+ var _this41 = this;
1190
+ return _asyncToGenerator(function* () {
1191
+ return (yield _this41.backupManager.getServerBackupInfo()) || null;
1192
+ })();
1193
+ }
1194
+
1195
+ /**
1196
+ * Determine if a key backup can be trusted.
1197
+ *
1198
+ * Implementation of {@link CryptoApi#isKeyBackupTrusted}.
1199
+ */
1200
+ isKeyBackupTrusted(info) {
1201
+ var _this42 = this;
1202
+ return _asyncToGenerator(function* () {
1203
+ return yield _this42.backupManager.isKeyBackupTrusted(info);
1204
+ })();
1205
+ }
1206
+
1207
+ /**
1208
+ * Force a re-check of the key backup and enable/disable it as appropriate.
1209
+ *
1210
+ * Implementation of {@link CryptoApi#checkKeyBackupAndEnable}.
1211
+ */
1212
+ checkKeyBackupAndEnable() {
1213
+ var _this43 = this;
1214
+ return _asyncToGenerator(function* () {
1215
+ return yield _this43.backupManager.checkKeyBackupAndEnable(true);
1216
+ })();
1217
+ }
1218
+
1219
+ /**
1220
+ * Implementation of {@link CryptoApi#deleteKeyBackupVersion}.
1221
+ */
1222
+ deleteKeyBackupVersion(version) {
1223
+ var _this44 = this;
1224
+ return _asyncToGenerator(function* () {
1225
+ yield _this44.backupManager.deleteKeyBackupVersion(version);
1226
+ })();
1227
+ }
1228
+
1229
+ /**
1230
+ * Implementation of {@link CryptoApi#resetKeyBackup}.
1231
+ */
1232
+ resetKeyBackup() {
1233
+ var _this45 = this;
1234
+ return _asyncToGenerator(function* () {
1235
+ var backupInfo = yield _this45.backupManager.setupKeyBackup(o => _this45.signObject(o));
1236
+
1237
+ // we want to store the private key in 4S
1238
+ // need to check if 4S is set up?
1239
+ if (yield _this45.secretStorageHasAESKey()) {
1240
+ yield _this45.secretStorage.store("m.megolm_backup.v1", backupInfo.decryptionKey.toBase64());
1241
+ }
1242
+
1243
+ // we can check and start async
1244
+ _this45.checkKeyBackupAndEnable();
1245
+ })();
1246
+ }
1247
+
1248
+ /**
1249
+ * Implementation of {@link CryptoApi#disableKeyStorage}.
1250
+ */
1251
+ disableKeyStorage() {
1252
+ var _this46 = this;
1253
+ return _asyncToGenerator(function* () {
1254
+ // Get the key backup version we're using
1255
+ var info = yield _this46.getKeyBackupInfo();
1256
+ if (info !== null && info !== void 0 && info.version) {
1257
+ yield _this46.deleteKeyBackupVersion(info.version);
1258
+ } else {
1259
+ _this46.logger.error("Can't delete key backup version: no version available");
1260
+ }
1261
+
1262
+ // also turn off 4S, since this is also storing keys on the server.
1263
+ yield _this46.deleteSecretStorage();
1264
+ yield _this46.dehydratedDeviceManager.delete();
1265
+ })();
1266
+ }
1267
+
1268
+ /**
1269
+ * Signs the given object with the current device and current identity (if available).
1270
+ * As defined in {@link https://spec.matrix.org/v1.8/appendices/#signing-json | Signing JSON}.
1271
+ *
1272
+ * Helper for {@link RustCrypto#resetKeyBackup}.
1273
+ *
1274
+ * @param obj - The object to sign
1275
+ */
1276
+ signObject(obj) {
1277
+ var _this47 = this;
1278
+ return _asyncToGenerator(function* () {
1279
+ var sigs = new Map(Object.entries(obj.signatures || {}));
1280
+ var unsigned = obj.unsigned;
1281
+ delete obj.signatures;
1282
+ delete obj.unsigned;
1283
+ var userSignatures = sigs.get(_this47.userId) || {};
1284
+ var canonalizedJson = anotherjson.stringify(obj);
1285
+ var signatures = yield _this47.olmMachine.sign(canonalizedJson);
1286
+ var map = JSON.parse(signatures.asJSON());
1287
+ sigs.set(_this47.userId, _objectSpread(_objectSpread({}, userSignatures), map[_this47.userId]));
1288
+ if (unsigned !== undefined) obj.unsigned = unsigned;
1289
+ obj.signatures = Object.fromEntries(sigs.entries());
1290
+ })();
1291
+ }
1292
+
1293
+ /**
1294
+ * Implementation of {@link CryptoApi#restoreKeyBackupWithPassphrase}.
1295
+ */
1296
+ restoreKeyBackupWithPassphrase(passphrase, opts) {
1297
+ var _this48 = this;
1298
+ return _asyncToGenerator(function* () {
1299
+ var backupInfo = yield _this48.backupManager.getServerBackupInfo();
1300
+ if (!(backupInfo !== null && backupInfo !== void 0 && backupInfo.version)) {
1301
+ throw new Error("No backup info available");
1302
+ }
1303
+ var privateKey = yield keyFromAuthData(backupInfo.auth_data, passphrase);
1304
+
1305
+ // Cache the key
1306
+ yield _this48.storeSessionBackupPrivateKey(privateKey, backupInfo.version);
1307
+ return _this48.restoreKeyBackup(opts);
1308
+ })();
1309
+ }
1310
+
1311
+ /**
1312
+ * Implementation of {@link CryptoApi#restoreKeyBackup}.
1313
+ */
1314
+ restoreKeyBackup(opts) {
1315
+ var _this49 = this;
1316
+ return _asyncToGenerator(function* () {
1317
+ // Get the decryption key from the crypto store
1318
+ var backupKeys = yield _this49.olmMachine.getBackupKeys();
1319
+ var {
1320
+ decryptionKey,
1321
+ backupVersion
1322
+ } = backupKeys;
1323
+ if (!decryptionKey || !backupVersion) throw new Error("No decryption key found in crypto store");
1324
+ var decodedDecryptionKey = decodeBase64(decryptionKey.toBase64());
1325
+ var backupInfo = yield _this49.backupManager.requestKeyBackupVersion(backupVersion);
1326
+ if (!backupInfo) throw new Error("Backup version to restore ".concat(backupVersion, " not found on server"));
1327
+ var backupDecryptor = yield _this49.getBackupDecryptor(backupInfo, decodedDecryptionKey);
1328
+ try {
1329
+ var _opts$progressCallbac;
1330
+ opts === null || opts === void 0 || (_opts$progressCallbac = opts.progressCallback) === null || _opts$progressCallbac === void 0 || _opts$progressCallbac.call(opts, {
1331
+ stage: ImportRoomKeyStage.Fetch
1332
+ });
1333
+ return yield _this49.backupManager.restoreKeyBackup(backupVersion, backupDecryptor, opts);
1334
+ } finally {
1335
+ // Free to avoid to keep in memory the decryption key stored in it. To avoid to exposing it to an attacker.
1336
+ backupDecryptor.free();
1337
+ }
1338
+ })();
1339
+ }
1340
+
1341
+ /**
1342
+ * Implementation of {@link CryptoApi#isDehydrationSupported}.
1343
+ */
1344
+ isDehydrationSupported() {
1345
+ var _this50 = this;
1346
+ return _asyncToGenerator(function* () {
1347
+ return yield _this50.dehydratedDeviceManager.isSupported();
1348
+ })();
1349
+ }
1350
+
1351
+ /**
1352
+ * Implementation of {@link CryptoApi#startDehydration}.
1353
+ */
1354
+ startDehydration() {
1355
+ var _arguments6 = arguments,
1356
+ _this51 = this;
1357
+ return _asyncToGenerator(function* () {
1358
+ var opts = _arguments6.length > 0 && _arguments6[0] !== undefined ? _arguments6[0] : {};
1359
+ if (!(yield _this51.isCrossSigningReady()) || !(yield _this51.isSecretStorageReady())) {
1360
+ throw new Error("Device dehydration requires cross-signing and secret storage to be set up");
1361
+ }
1362
+ return yield _this51.dehydratedDeviceManager.start(opts || {});
1363
+ })();
1364
+ }
1365
+
1366
+ /**
1367
+ * Implementation of {@link CryptoApi#importSecretsBundle}.
1368
+ */
1369
+ importSecretsBundle(secrets) {
1370
+ var _this52 = this;
1371
+ return _asyncToGenerator(function* () {
1372
+ var secretsBundle = RustSdkCryptoJs.SecretsBundle.from_json(secrets);
1373
+ yield _this52.getOlmMachineOrThrow().importSecretsBundle(secretsBundle); // this method frees the SecretsBundle
1374
+ })();
1375
+ }
1376
+
1377
+ /**
1378
+ * Implementation of {@link CryptoApi#exportSecretsBundle}.
1379
+ */
1380
+ exportSecretsBundle() {
1381
+ var _this53 = this;
1382
+ return _asyncToGenerator(function* () {
1383
+ var secretsBundle = yield _this53.getOlmMachineOrThrow().exportSecretsBundle();
1384
+ var secrets = secretsBundle.to_json();
1385
+ secretsBundle.free();
1386
+ return secrets;
1387
+ })();
1388
+ }
1389
+
1390
+ /**
1391
+ * Implementation of {@link CryptoApi#encryptToDeviceMessages}.
1392
+ */
1393
+ encryptToDeviceMessages(eventType, devices, payload) {
1394
+ var _this54 = this;
1395
+ return _asyncToGenerator(function* () {
1396
+ var logger = new LogSpan(_this54.logger, "encryptToDeviceMessages");
1397
+ var uniqueUsers = new Set(devices.map(_ref2 => {
1398
+ var {
1399
+ userId
1400
+ } = _ref2;
1401
+ return userId;
1402
+ }));
1403
+
1404
+ // This will ensure we have Olm sessions for all of the users' devices.
1405
+ // However, we only care about some of the devices.
1406
+ // So, perhaps we can optimise this later on.
1407
+ yield _this54.keyClaimManager.ensureSessionsForUsers(logger, Array.from(uniqueUsers).map(userId => new RustSdkCryptoJs.UserId(userId)));
1408
+ var batch = {
1409
+ batch: [],
1410
+ eventType: EventType.RoomMessageEncrypted
1411
+ };
1412
+ yield Promise.all(devices.map(/*#__PURE__*/function () {
1413
+ var _ref4 = _asyncToGenerator(function* (_ref3) {
1414
+ var {
1415
+ userId,
1416
+ deviceId
1417
+ } = _ref3;
1418
+ var device = yield _this54.olmMachine.getDevice(new RustSdkCryptoJs.UserId(userId), new RustSdkCryptoJs.DeviceId(deviceId));
1419
+ if (device) {
1420
+ var encryptedPayload = JSON.parse(yield device.encryptToDeviceEvent(eventType, payload));
1421
+ batch.batch.push({
1422
+ deviceId,
1423
+ userId,
1424
+ payload: encryptedPayload
1425
+ });
1426
+ } else {
1427
+ _this54.logger.warn("encryptToDeviceMessages: unknown device ".concat(userId, ":").concat(deviceId));
1428
+ }
1429
+ });
1430
+ return function (_x) {
1431
+ return _ref4.apply(this, arguments);
1432
+ };
1433
+ }()));
1434
+ return batch;
1435
+ })();
1436
+ }
1437
+
1438
+ /**
1439
+ * Implementation of {@link CryptoApi#resetEncryption}.
1440
+ */
1441
+ resetEncryption(authUploadDeviceSigningKeys) {
1442
+ var _this55 = this;
1443
+ return _asyncToGenerator(function* () {
1444
+ _this55.logger.debug("resetEncryption: resetting encryption");
1445
+
1446
+ // Delete the dehydrated device, since any existing one will be signed
1447
+ // by the wrong cross-signing key
1448
+ _this55.dehydratedDeviceManager.delete();
1449
+
1450
+ // Disable backup, and delete all the backups from the server
1451
+ yield _this55.backupManager.deleteAllKeyBackupVersions();
1452
+ yield _this55.deleteSecretStorage();
1453
+
1454
+ // Reset the cross-signing keys
1455
+ yield _this55.crossSigningIdentity.bootstrapCrossSigning({
1456
+ setupNewCrossSigning: true,
1457
+ authUploadDeviceSigningKeys
1458
+ });
1459
+
1460
+ // Create a new key backup
1461
+ yield _this55.resetKeyBackup();
1462
+ _this55.logger.debug("resetEncryption: ended");
1463
+ })();
1464
+ }
1465
+
1466
+ /**
1467
+ * Removes the secret storage key, default key pointer and all (known) secret storage data
1468
+ * from the user's account data
1469
+ */
1470
+ deleteSecretStorage() {
1471
+ var _this56 = this;
1472
+ return _asyncToGenerator(function* () {
1473
+ // Remove the stored secrets in the secret storage
1474
+ yield _this56.secretStorage.store("m.cross_signing.master", null);
1475
+ yield _this56.secretStorage.store("m.cross_signing.self_signing", null);
1476
+ yield _this56.secretStorage.store("m.cross_signing.user_signing", null);
1477
+ yield _this56.secretStorage.store("m.megolm_backup.v1", null);
1478
+
1479
+ // Remove the recovery key
1480
+ var defaultKeyId = yield _this56.secretStorage.getDefaultKeyId();
1481
+ if (defaultKeyId) yield _this56.secretStorage.store("m.secret_storage.key.".concat(defaultKeyId), null);
1482
+ // Disable the recovery key and the secret storage
1483
+ yield _this56.secretStorage.setDefaultKeyId(null);
1484
+ })();
1485
+ }
1486
+
1487
+ /**
1488
+ * Implementation of {@link CryptoApi#shareRoomHistoryWithUser}.
1489
+ */
1490
+ shareRoomHistoryWithUser(roomId, userId) {
1491
+ var _this57 = this;
1492
+ return _asyncToGenerator(function* () {
1493
+ var logger = new LogSpan(_this57.logger, "shareRoomHistoryWithUser(".concat(roomId, ", ").concat(userId, ")"));
1494
+
1495
+ // 0. We can only share room history if our user has set up cross-signing.
1496
+ var identity = yield _this57.getOwnIdentity();
1497
+ if (!(identity !== null && identity !== void 0 && identity.isVerified())) {
1498
+ logger.warn("Not sharing message history as the current device is not verified by our cross-signing identity");
1499
+ return;
1500
+ }
1501
+ logger.info("Sharing message history");
1502
+
1503
+ // 1. Download keys from backup.
1504
+ if (!(yield _this57.getOlmMachineOrThrow().hasDownloadedAllRoomKeys(new RustSdkCryptoJs.RoomId(roomId)))) {
1505
+ yield _this57.backupManager.downloadLatestRoomKeyBackup(roomId);
1506
+ yield _this57.getOlmMachineOrThrow().setHasDownloadedAllRoomKeys(new RustSdkCryptoJs.RoomId(roomId));
1507
+ }
1508
+
1509
+ // 2. Construct the key bundle
1510
+ var bundle = yield _this57.getOlmMachineOrThrow().buildRoomKeyBundle(new RustSdkCryptoJs.RoomId(roomId));
1511
+ if (!bundle) {
1512
+ logger.info("No keys to share");
1513
+ return;
1514
+ }
1515
+
1516
+ // 3. Upload the encrypted bundle to the server
1517
+ var uploadResponse = yield _this57.http.uploadContent(bundle.encryptedData);
1518
+ logger.info("Uploaded encrypted key blob: ".concat(JSON.stringify(uploadResponse)));
1519
+
1520
+ // 4. We may not share a room with the user, so get a fresh list of devices for the invited user.
1521
+ var req = _this57.getOlmMachineOrThrow().queryKeysForUsers([new RustSdkCryptoJs.UserId(userId)]);
1522
+ yield _this57.outgoingRequestProcessor.makeOutgoingRequest(req);
1523
+
1524
+ // 5. Establish Olm sessions with all of the recipient's devices.
1525
+ yield _this57.keyClaimManager.ensureSessionsForUsers(logger, [new RustSdkCryptoJs.UserId(userId)]);
1526
+
1527
+ // 6. Send to-device messages to the recipient to share the keys.
1528
+ var requests = yield _this57.getOlmMachineOrThrow().shareRoomKeyBundleData(new RustSdkCryptoJs.UserId(userId), new RustSdkCryptoJs.RoomId(roomId), uploadResponse.content_uri, bundle.mediaEncryptionInfo, RustSdkCryptoJs.CollectStrategy.identityBasedStrategy());
1529
+ for (var _req of requests) {
1530
+ yield _this57.outgoingRequestProcessor.makeOutgoingRequest(_req);
1531
+ }
1532
+ })();
1533
+ }
1534
+
1535
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1536
+ //
1537
+ // SyncCryptoCallbacks implementation
1538
+ //
1539
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1540
+
1541
+ /**
1542
+ * Apply sync changes to the olm machine
1543
+ * @param events - the received to-device messages
1544
+ * @param oneTimeKeysCounts - the received one time key counts
1545
+ * @param unusedFallbackKeys - the received unused fallback keys
1546
+ * @param devices - the received device list updates
1547
+ * @returns A list of processed to-device messages.
1548
+ */
1549
+ receiveSyncChanges(_ref5) {
1550
+ var _this58 = this;
1551
+ return _asyncToGenerator(function* () {
1552
+ var {
1553
+ events,
1554
+ oneTimeKeysCounts = new Map(),
1555
+ unusedFallbackKeys,
1556
+ devices = new RustSdkCryptoJs.DeviceLists()
1557
+ } = _ref5;
1558
+ return yield _this58.olmMachine.receiveSyncChanges(events ? JSON.stringify(events) : "[]", devices, oneTimeKeysCounts, unusedFallbackKeys);
1559
+ })();
1560
+ }
1561
+
1562
+ /** called by the sync loop to preprocess incoming to-device messages
1563
+ *
1564
+ * @param events - the received to-device messages
1565
+ * @returns A list of preprocessed to-device messages.
1566
+ */
1567
+ preprocessToDeviceMessages(events) {
1568
+ var _this59 = this;
1569
+ return _asyncToGenerator(function* () {
1570
+ // send the received to-device messages into receiveSyncChanges. We have no info on device-list changes,
1571
+ // one-time-keys, or fallback keys, so just pass empty data.
1572
+ var processed = yield _this59.receiveSyncChanges({
1573
+ events
1574
+ });
1575
+ var received = [];
1576
+ var _loop = function* _loop() {
1577
+ var parsedMessage = JSON.parse(message.rawEvent);
1578
+
1579
+ // look for interesting to-device messages
1580
+ if (parsedMessage.type === EventType.KeyVerificationRequest) {
1581
+ var sender = parsedMessage.sender;
1582
+ var transactionId = parsedMessage.content.transaction_id;
1583
+ if (transactionId && sender) {
1584
+ _this59.onIncomingKeyVerificationRequest(sender, transactionId);
1585
+ }
1586
+ }
1587
+ switch (message.type) {
1588
+ case RustSdkCryptoJs.ProcessedToDeviceEventType.Decrypted:
1589
+ {
1590
+ var _encryptionInfo$sende;
1591
+ var encryptionInfo = message.encryptionInfo;
1592
+ received.push({
1593
+ message: parsedMessage,
1594
+ encryptionInfo: {
1595
+ sender: encryptionInfo.sender.toString(),
1596
+ senderDevice: (_encryptionInfo$sende = encryptionInfo.senderDevice) === null || _encryptionInfo$sende === void 0 ? void 0 : _encryptionInfo$sende.toString(),
1597
+ senderCurve25519KeyBase64: encryptionInfo.senderCurve25519Key,
1598
+ senderVerified: encryptionInfo.isSenderVerified()
1599
+ }
1600
+ });
1601
+
1602
+ // If we have received a room key bundle message, and have previously marked the room
1603
+ // IDs it references as pending key bundles, tell the Rust SDK to try and accept it,
1604
+ // just in case it was received after invite.
1605
+ //
1606
+ // We don't actually need to validate the contents of the bundle message, or do
1607
+ // anything with its contents at all. We simply want to inform the Rust SDK we have
1608
+ // received a new room key bundle that we might be able to download.
1609
+ if (isRoomKeyBundleMessage(parsedMessage) && _this59.roomsPendingKeyBundles.has(parsedMessage.content.room_id)) {
1610
+ // No `await`-ing here, as this is called from inside the `/sync` loop.
1611
+ _this59.maybeAcceptKeyBundle(parsedMessage.content.room_id, _this59.roomsPendingKeyBundles.get(parsedMessage.content.room_id)).then(success => {
1612
+ if (success) {
1613
+ _this59.roomsPendingKeyBundles.delete(parsedMessage.content.room_id);
1614
+ }
1615
+ }, err => {
1616
+ _this59.logger.error("Error attempting to download key bundle for room ".concat(parsedMessage.content.room_id));
1617
+ _this59.logger.error(err);
1618
+ });
1619
+ }
1620
+ break;
1621
+ }
1622
+ case RustSdkCryptoJs.ProcessedToDeviceEventType.PlainText:
1623
+ {
1624
+ received.push({
1625
+ message: parsedMessage,
1626
+ encryptionInfo: null
1627
+ });
1628
+ break;
1629
+ }
1630
+ case RustSdkCryptoJs.ProcessedToDeviceEventType.UnableToDecrypt:
1631
+ // ignore messages we cannot decrypt
1632
+ break;
1633
+ case RustSdkCryptoJs.ProcessedToDeviceEventType.Invalid:
1634
+ // ignore invalid messages
1635
+ break;
1636
+ }
1637
+ };
1638
+ for (var message of processed) {
1639
+ yield* _loop();
1640
+ }
1641
+ return received;
1642
+ })();
1643
+ }
1644
+
1645
+ /** called by the sync loop to process one time key counts and unused fallback keys
1646
+ *
1647
+ * @param oneTimeKeysCounts - the received one time key counts
1648
+ * @param unusedFallbackKeys - the received unused fallback keys
1649
+ */
1650
+ processKeyCounts(oneTimeKeysCounts, unusedFallbackKeys) {
1651
+ var _this60 = this;
1652
+ return _asyncToGenerator(function* () {
1653
+ var mapOneTimeKeysCount = oneTimeKeysCounts && new Map(Object.entries(oneTimeKeysCounts));
1654
+ var setUnusedFallbackKeys = unusedFallbackKeys && new Set(unusedFallbackKeys);
1655
+ if (mapOneTimeKeysCount !== undefined || setUnusedFallbackKeys !== undefined) {
1656
+ yield _this60.receiveSyncChanges({
1657
+ oneTimeKeysCounts: mapOneTimeKeysCount,
1658
+ unusedFallbackKeys: setUnusedFallbackKeys
1659
+ });
1660
+ }
1661
+ })();
1662
+ }
1663
+
1664
+ /** called by the sync loop to process the notification that device lists have
1665
+ * been changed.
1666
+ *
1667
+ * @param deviceLists - device_lists field from /sync
1668
+ */
1669
+ processDeviceLists(deviceLists) {
1670
+ var _this61 = this;
1671
+ return _asyncToGenerator(function* () {
1672
+ var _deviceLists$changed, _deviceLists$left;
1673
+ var devices = new RustSdkCryptoJs.DeviceLists((_deviceLists$changed = deviceLists.changed) === null || _deviceLists$changed === void 0 ? void 0 : _deviceLists$changed.map(userId => new RustSdkCryptoJs.UserId(userId)), (_deviceLists$left = deviceLists.left) === null || _deviceLists$left === void 0 ? void 0 : _deviceLists$left.map(userId => new RustSdkCryptoJs.UserId(userId)));
1674
+ yield _this61.receiveSyncChanges({
1675
+ devices
1676
+ });
1677
+ })();
1678
+ }
1679
+
1680
+ /** called by the sync loop on m.room.encryption events
1681
+ *
1682
+ * @param room - in which the event was received
1683
+ * @param event - encryption event to be processed
1684
+ */
1685
+ onCryptoEvent(room, event) {
1686
+ var _this62 = this;
1687
+ return _asyncToGenerator(function* () {
1688
+ var config = event.getContent();
1689
+ var settings = new RustSdkCryptoJs.RoomSettings();
1690
+ if (config.algorithm === "m.megolm.v1.aes-sha2") {
1691
+ settings.algorithm = RustSdkCryptoJs.EncryptionAlgorithm.MegolmV1AesSha2;
1692
+ } else {
1693
+ // Among other situations, this happens if the crypto state event is redacted.
1694
+ _this62.logger.warn("Room ".concat(room.roomId, ": ignoring crypto event with invalid algorithm ").concat(config.algorithm));
1695
+ return;
1696
+ }
1697
+ if (config["io.element.msc4362.encrypt_state_events"] && _this62.enableEncryptedStateEvents) {
1698
+ _this62.logger.info("crypto Enabling state event encryption...");
1699
+ settings.encryptStateEvents = true;
1700
+ }
1701
+ try {
1702
+ settings.sessionRotationPeriodMs = config.rotation_period_ms;
1703
+ settings.sessionRotationPeriodMessages = config.rotation_period_msgs;
1704
+ yield _this62.olmMachine.setRoomSettings(new RustSdkCryptoJs.RoomId(room.roomId), settings);
1705
+ } catch (e) {
1706
+ _this62.logger.warn("Room ".concat(room.roomId, ": ignoring crypto event which caused error: ").concat(e));
1707
+ return;
1708
+ }
1709
+
1710
+ // If we got this far, the SDK found the event acceptable.
1711
+ // We need to either create or update the active RoomEncryptor.
1712
+ var existingEncryptor = _this62.roomEncryptors[room.roomId];
1713
+ if (existingEncryptor) {
1714
+ existingEncryptor.onCryptoEvent(config);
1715
+ } else {
1716
+ _this62.roomEncryptors[room.roomId] = new RoomEncryptor(_this62.logger.getChild("[".concat(room.roomId, " encryption]")), _this62.olmMachine, _this62.keyClaimManager, _this62.outgoingRequestsManager, room, config);
1717
+ }
1718
+ })();
1719
+ }
1720
+
1721
+ /** called by the sync loop after processing each sync.
1722
+ *
1723
+ *
1724
+ * @param syncState - information on the completed sync.
1725
+ */
1726
+ onSyncCompleted(syncState) {
1727
+ // Processing the /sync may have produced new outgoing requests which need sending, so kick off the outgoing
1728
+ // request loop, if it's not already running.
1729
+ this.outgoingRequestsManager.doProcessOutgoingRequests().catch(e => {
1730
+ this.logger.warn("onSyncCompleted: Error processing outgoing requests", e);
1731
+ });
1732
+ }
1733
+
1734
+ /**
1735
+ * Implementation of {@link CryptoApi#markAllTrackedUsersAsDirty}.
1736
+ */
1737
+ markAllTrackedUsersAsDirty() {
1738
+ var _this63 = this;
1739
+ return _asyncToGenerator(function* () {
1740
+ yield _this63.olmMachine.markAllTrackedUsersAsDirty();
1741
+ })();
1742
+ }
1743
+
1744
+ /**
1745
+ * Handle an incoming m.key.verification.request event, received either in-room or in a to-device message.
1746
+ *
1747
+ * @param sender - the sender of the event
1748
+ * @param transactionId - the transaction ID for the verification. For to-device messages, this comes from the
1749
+ * content of the message; for in-room messages it is the event ID.
1750
+ */
1751
+ onIncomingKeyVerificationRequest(sender, transactionId) {
1752
+ var request = this.olmMachine.getVerificationRequest(new RustSdkCryptoJs.UserId(sender), transactionId);
1753
+ if (request) {
1754
+ this.emit(CryptoEvent.VerificationRequestReceived, this.makeVerificationRequest(request));
1755
+ } else {
1756
+ // There are multiple reasons this can happen; probably the most likely is that the event is an
1757
+ // in-room event which is too old.
1758
+ this.logger.info("Ignoring just-received verification request ".concat(transactionId, " which did not start a rust-side verification"));
1759
+ }
1760
+ }
1761
+
1762
+ /** Utility function to wrap a rust `VerificationRequest` with our own {@link VerificationRequest}. */
1763
+ makeVerificationRequest(request) {
1764
+ return new RustVerificationRequest(this.logger, this.olmMachine, request, this.outgoingRequestProcessor, this._supportedVerificationMethods);
1765
+ }
1766
+
1767
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1768
+ //
1769
+ // Other public functions
1770
+ //
1771
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1772
+
1773
+ /** called by the BriijClient on a room membership event
1774
+ *
1775
+ * @param event - The matrix event which caused this event to fire.
1776
+ * @param member - The member whose RoomMember.membership changed.
1777
+ * @param oldMembership - The previous membership state. Null if it's a new member.
1778
+ */
1779
+ onRoomMembership(event, member, oldMembership) {
1780
+ var enc = this.roomEncryptors[event.getRoomId()];
1781
+ if (!enc) {
1782
+ // not encrypting in this room
1783
+ return;
1784
+ }
1785
+ enc.onRoomMembership(member);
1786
+ }
1787
+
1788
+ /** Callback for OlmMachine.registerRoomKeyUpdatedCallback
1789
+ *
1790
+ * Called by the rust-sdk whenever there is an update to (megolm) room keys. We
1791
+ * check if we have any events waiting for the given keys, and schedule them for
1792
+ * a decryption retry if so.
1793
+ *
1794
+ * @param keys - details of the updated keys
1795
+ */
1796
+ onRoomKeysUpdated(keys) {
1797
+ var _this64 = this;
1798
+ return _asyncToGenerator(function* () {
1799
+ for (var key of keys) {
1800
+ _this64.onRoomKeyUpdated(key);
1801
+ }
1802
+ _this64.backupManager.maybeUploadKey();
1803
+ })();
1804
+ }
1805
+ onRoomKeyUpdated(key) {
1806
+ var _this65 = this;
1807
+ if (this.stopped) return;
1808
+ this.logger.debug("Got update for session ".concat(key.sessionId, " from sender ").concat(key.senderKey.toBase64(), " in ").concat(key.roomId.toString()));
1809
+ var pendingList = this.eventDecryptor.getEventsPendingRoomKey(key.roomId.toString(), key.sessionId);
1810
+ if (pendingList.length === 0) return;
1811
+ this.logger.debug("Retrying decryption on events:", pendingList.map(e => "".concat(e.getId())));
1812
+
1813
+ // Have another go at decrypting events with this key.
1814
+ //
1815
+ // We don't want to end up blocking the callback from Rust, which could otherwise end up dropping updates,
1816
+ // so we don't wait for the decryption to complete. In any case, there is no need to wait:
1817
+ // BriijEvent.attemptDecryption ensures that there is only one decryption attempt happening at once,
1818
+ // and deduplicates repeated attempts for the same event.
1819
+ var _loop2 = function _loop2(ev) {
1820
+ ev.attemptDecryption(_this65, {
1821
+ isRetry: true
1822
+ }).catch(_e => {
1823
+ _this65.logger.info("Still unable to decrypt event ".concat(ev.getId(), " after receiving key"));
1824
+ });
1825
+ };
1826
+ for (var ev of pendingList) {
1827
+ _loop2(ev);
1828
+ }
1829
+ }
1830
+
1831
+ /**
1832
+ * Callback for `OlmMachine.registerRoomKeyWithheldCallback`.
1833
+ *
1834
+ * Called by the rust sdk whenever we are told that a key has been withheld. We see if we had any events that
1835
+ * failed to decrypt for the given session, and update their status if so.
1836
+ *
1837
+ * @param withheld - Details of the withheld sessions.
1838
+ */
1839
+ onRoomKeysWithheld(withheld) {
1840
+ var _this66 = this;
1841
+ return _asyncToGenerator(function* () {
1842
+ for (var session of withheld) {
1843
+ _this66.logger.debug("Got withheld message for session ".concat(session.sessionId, " in ").concat(session.roomId.toString()));
1844
+ var pendingList = _this66.eventDecryptor.getEventsPendingRoomKey(session.roomId.toString(), session.sessionId);
1845
+ if (pendingList.length === 0) return;
1846
+
1847
+ // The easiest way to update the status of the event is to have another go at decrypting it.
1848
+ _this66.logger.debug("Retrying decryption on events:", pendingList.map(e => "".concat(e.getId())));
1849
+ for (var ev of pendingList) {
1850
+ ev.attemptDecryption(_this66, {
1851
+ isRetry: true
1852
+ }).catch(_e => {
1853
+ // It's somewhat expected that we still can't decrypt here.
1854
+ });
1855
+ }
1856
+ }
1857
+ })();
1858
+ }
1859
+
1860
+ /**
1861
+ * Callback for `OlmMachine.registerUserIdentityUpdatedCallback`
1862
+ *
1863
+ * Called by the rust-sdk whenever there is an update to any user's cross-signing status. We re-check their trust
1864
+ * status and emit a `UserTrustStatusChanged` event, as well as a `KeysChanged` if it is our own identity that changed.
1865
+ *
1866
+ * @param userId - the user with the updated identity
1867
+ */
1868
+ onUserIdentityUpdated(userId) {
1869
+ var _this67 = this;
1870
+ return _asyncToGenerator(function* () {
1871
+ var newVerification = yield _this67.getUserVerificationStatus(userId.toString());
1872
+ _this67.emit(CryptoEvent.UserTrustStatusChanged, userId.toString(), newVerification);
1873
+
1874
+ // If our own user identity has changed, we may now trust the key backup where we did not before.
1875
+ // So, re-check the key backup status and enable it if available.
1876
+ if (userId.toString() === _this67.userId) {
1877
+ _this67.emit(CryptoEvent.KeysChanged, {});
1878
+ yield _this67.checkKeyBackupAndEnable();
1879
+ }
1880
+ })();
1881
+ }
1882
+
1883
+ /**
1884
+ * Callback for `OlmMachine.registerDevicesUpdatedCallback`
1885
+ *
1886
+ * Called when users' devices have updated. Emits `WillUpdateDevices` and `DevicesUpdated`. In the JavaScript
1887
+ * crypto backend, these events are called at separate times, with `WillUpdateDevices` being emitted just before
1888
+ * the devices are saved, and `DevicesUpdated` being emitted just after. But the OlmMachine only gives us
1889
+ * one event, so we emit both events here.
1890
+ *
1891
+ * @param userIds - an array of user IDs of users whose devices have updated.
1892
+ */
1893
+ onDevicesUpdated(userIds) {
1894
+ var _this68 = this;
1895
+ return _asyncToGenerator(function* () {
1896
+ _this68.emit(CryptoEvent.WillUpdateDevices, userIds, false);
1897
+ _this68.emit(CryptoEvent.DevicesUpdated, userIds, false);
1898
+ })();
1899
+ }
1900
+
1901
+ /**
1902
+ * Handles secret received from the rust secret inbox.
1903
+ *
1904
+ * The gossipped secrets are received using the `m.secret.send` event type
1905
+ * and are guaranteed to have been received over a 1-to-1 Olm
1906
+ * Session from a verified device.
1907
+ *
1908
+ * The only secret currently handled in this way is `m.megolm_backup.v1`.
1909
+ *
1910
+ * @param name - the secret name
1911
+ * @param value - the secret value
1912
+ */
1913
+ handleSecretReceived(name, value) {
1914
+ var _this69 = this;
1915
+ return _asyncToGenerator(function* () {
1916
+ _this69.logger.debug("onReceiveSecret: Received secret ".concat(name));
1917
+ if (name === "m.megolm_backup.v1") {
1918
+ return yield _this69.backupManager.handleBackupSecretReceived(value);
1919
+ // XXX at this point we should probably try to download the backup and import the keys,
1920
+ // or at least retry for the current decryption failures?
1921
+ // Maybe add some signaling when a new secret is received, and let clients handle it?
1922
+ // as it's where the restore from backup APIs are exposed.
1923
+ }
1924
+ return false;
1925
+ })();
1926
+ }
1927
+
1928
+ /**
1929
+ * Called when a new secret is received in the rust secret inbox.
1930
+ *
1931
+ * Will poll the secret inbox and handle the secrets received.
1932
+ *
1933
+ * @param name - The name of the secret received.
1934
+ */
1935
+ checkSecrets(name) {
1936
+ var _this70 = this;
1937
+ return _asyncToGenerator(function* () {
1938
+ var pendingValues = yield _this70.olmMachine.getSecretsFromInbox(name);
1939
+ for (var value of pendingValues) {
1940
+ if (yield _this70.handleSecretReceived(name, value)) {
1941
+ // If we have a valid secret for that name there is no point of processing the other secrets values.
1942
+ // It's probably the same secret shared by another device.
1943
+ break;
1944
+ }
1945
+ }
1946
+
1947
+ // Important to call this after handling the secrets as good hygiene.
1948
+ yield _this70.olmMachine.deleteSecretsFromInbox(name);
1949
+ })();
1950
+ }
1951
+
1952
+ /**
1953
+ * Handle a live event received via /sync.
1954
+ * See {@link ClientEventHandlerMap#event}
1955
+ *
1956
+ * @param event - live event
1957
+ */
1958
+ onLiveEventFromSync(event) {
1959
+ var _this71 = this;
1960
+ return _asyncToGenerator(function* () {
1961
+ // Ignore state event or remote echo
1962
+ // transaction_id is provided in case of remote echo {@link https://spec.matrix.org/v1.7/client-server-api/#local-echo}
1963
+ if (event.isState() || !!event.getUnsigned().transaction_id) return;
1964
+ var processEvent = /*#__PURE__*/function () {
1965
+ var _ref6 = _asyncToGenerator(function* (evt) {
1966
+ // Process only verification event
1967
+ if (isVerificationEvent(event)) {
1968
+ yield _this71.onKeyVerificationEvent(evt);
1969
+ }
1970
+ });
1971
+ return function processEvent(_x2) {
1972
+ return _ref6.apply(this, arguments);
1973
+ };
1974
+ }();
1975
+
1976
+ // If the event is encrypted of in failure, we wait for decryption
1977
+ if (event.isDecryptionFailure() || event.isEncrypted()) {
1978
+ // 5 mins
1979
+ var TIMEOUT_DELAY = 5 * 60 * 1000;
1980
+
1981
+ // After 5mins, we are not expecting the event to be decrypted
1982
+ var timeoutId = setTimeout(() => event.off(BriijEventEvent.Decrypted, onDecrypted), TIMEOUT_DELAY);
1983
+ var onDecrypted = (decryptedEvent, error) => {
1984
+ if (error) return;
1985
+ clearTimeout(timeoutId);
1986
+ event.off(BriijEventEvent.Decrypted, onDecrypted);
1987
+ processEvent(decryptedEvent);
1988
+ };
1989
+ event.on(BriijEventEvent.Decrypted, onDecrypted);
1990
+ } else {
1991
+ yield processEvent(event);
1992
+ }
1993
+ })();
1994
+ }
1995
+
1996
+ /**
1997
+ * Handle an in-room key verification event.
1998
+ *
1999
+ * @param event - a key validation request event.
2000
+ */
2001
+ onKeyVerificationEvent(event) {
2002
+ var _this72 = this;
2003
+ return _asyncToGenerator(function* () {
2004
+ var roomId = event.getRoomId();
2005
+ var senderId = event.getSender();
2006
+ if (!roomId) {
2007
+ throw new Error("missing roomId in the event");
2008
+ }
2009
+ if (!senderId) {
2010
+ throw new Error("missing sender in the event");
2011
+ }
2012
+ _this72.logger.debug("Incoming verification event ".concat(event.getId(), " type ").concat(event.getType(), " from ").concat(event.getSender()));
2013
+ var isRoomVerificationRequest = event.getType() === EventType.RoomMessage && event.getContent().msgtype === MsgType.KeyVerificationRequest;
2014
+ if (isRoomVerificationRequest) {
2015
+ // Before processing an in-room verification request, we need to
2016
+ // make sure we have the sender's device information - otherwise we
2017
+ // will immediately abort verification. So we explicitly fetch it
2018
+ // from /keys/query and wait for that request to complete before we
2019
+ // call receiveVerificationEvent.
2020
+ var req = _this72.getOlmMachineOrThrow().queryKeysForUsers([new RustSdkCryptoJs.UserId(senderId)]);
2021
+ yield _this72.outgoingRequestProcessor.makeOutgoingRequest(req);
2022
+ }
2023
+ yield _this72.getOlmMachineOrThrow().receiveVerificationEvent(JSON.stringify({
2024
+ event_id: event.getId(),
2025
+ type: event.getType(),
2026
+ sender: senderId,
2027
+ state_key: event.getStateKey(),
2028
+ content: event.getContent(),
2029
+ origin_server_ts: event.getTs()
2030
+ }), new RustSdkCryptoJs.RoomId(roomId));
2031
+ if (isRoomVerificationRequest) {
2032
+ _this72.onIncomingKeyVerificationRequest(senderId, event.getId());
2033
+ }
2034
+
2035
+ // that may have caused us to queue up outgoing requests, so make sure we send them.
2036
+ _this72.outgoingRequestsManager.doProcessOutgoingRequests().catch(e => {
2037
+ _this72.logger.warn("onKeyVerificationRequest: Error processing outgoing requests", e);
2038
+ });
2039
+ })();
2040
+ }
2041
+
2042
+ /**
2043
+ * Returns the cross-signing user identity of the current user.
2044
+ *
2045
+ * Not part of the public crypto-api interface.
2046
+ * Used during migration from legacy js-crypto to update local trust if needed.
2047
+ */
2048
+ getOwnIdentity() {
2049
+ var _this73 = this;
2050
+ return _asyncToGenerator(function* () {
2051
+ return yield _this73.olmMachine.getIdentity(new RustSdkCryptoJs.UserId(_this73.userId));
2052
+ })();
2053
+ }
2054
+ }
2055
+ class EventDecryptor {
2056
+ constructor(logger, olmMachine, perSessionBackupDownloader) {
2057
+ this.logger = logger;
2058
+ this.olmMachine = olmMachine;
2059
+ this.perSessionBackupDownloader = perSessionBackupDownloader;
2060
+ /**
2061
+ * Events which we couldn't decrypt due to unknown sessions / indexes.
2062
+ *
2063
+ * Map from roomId to sessionId to Set of BriijEvents
2064
+ */
2065
+ _defineProperty(this, "eventsPendingKey", new MapWithDefault(() => new MapWithDefault(() => new Set())));
2066
+ }
2067
+ attemptEventDecryption(event, isolationMode) {
2068
+ var _this74 = this;
2069
+ return _asyncToGenerator(function* () {
2070
+ // add the event to the pending list *before* attempting to decrypt.
2071
+ // then, if the key turns up while decryption is in progress (and
2072
+ // decryption fails), we will schedule a retry.
2073
+ // (fixes https://github.com/vector-im/element-web/issues/5001)
2074
+ _this74.addEventToPendingList(event);
2075
+ var trustRequirement;
2076
+ switch (isolationMode.kind) {
2077
+ case DeviceIsolationModeKind.AllDevicesIsolationMode:
2078
+ trustRequirement = RustSdkCryptoJs.TrustRequirement.Untrusted;
2079
+ break;
2080
+ case DeviceIsolationModeKind.OnlySignedDevicesIsolationMode:
2081
+ trustRequirement = RustSdkCryptoJs.TrustRequirement.CrossSignedOrLegacy;
2082
+ break;
2083
+ }
2084
+ try {
2085
+ var _res$forwarder;
2086
+ var res = yield _this74.olmMachine.decryptRoomEvent(stringifyEvent(event), new RustSdkCryptoJs.RoomId(event.getRoomId()), new RustSdkCryptoJs.DecryptionSettings(trustRequirement));
2087
+
2088
+ // Success. We can remove the event from the pending list, if
2089
+ // that hasn't already happened.
2090
+ _this74.removeEventFromPendingList(event);
2091
+ return {
2092
+ clearEvent: JSON.parse(res.event),
2093
+ claimedEd25519Key: res.senderClaimedEd25519Key,
2094
+ senderCurve25519Key: res.senderCurve25519Key,
2095
+ keyForwardedBy: (_res$forwarder = res.forwarder) === null || _res$forwarder === void 0 ? void 0 : _res$forwarder.toString()
2096
+ };
2097
+ } catch (err) {
2098
+ if (err instanceof RustSdkCryptoJs.MegolmDecryptionError) {
2099
+ _this74.onMegolmDecryptionError(event, err, yield _this74.perSessionBackupDownloader.getServerBackupInfo());
2100
+ } else {
2101
+ throw new DecryptionError(DecryptionFailureCode.UNKNOWN_ERROR, "Unknown error");
2102
+ }
2103
+ }
2104
+ })();
2105
+ }
2106
+
2107
+ /**
2108
+ * Handle a `MegolmDecryptionError` returned by the rust SDK.
2109
+ *
2110
+ * Fires off a request to the `perSessionBackupDownloader`, if appropriate, and then throws a `DecryptionError`.
2111
+ *
2112
+ * @param event - The event which could not be decrypted.
2113
+ * @param err - The error from the Rust SDK.
2114
+ * @param serverBackupInfo - Details about the current backup from the server. `null` if there is no backup.
2115
+ * `undefined` if our attempt to check failed.
2116
+ */
2117
+ onMegolmDecryptionError(event, err, serverBackupInfo) {
2118
+ var content = event.getWireContent();
2119
+ var errorDetails = {
2120
+ sender_key: content.sender_key,
2121
+ session_id: content.session_id
2122
+ };
2123
+
2124
+ // If the error looks like it might be recoverable from backup, queue up a request to try that.
2125
+ if (err.code === RustSdkCryptoJs.DecryptionErrorCode.MissingRoomKey || err.code === RustSdkCryptoJs.DecryptionErrorCode.UnknownMessageIndex) {
2126
+ this.perSessionBackupDownloader.onDecryptionKeyMissingError(event.getRoomId(), content.session_id);
2127
+
2128
+ // If the server is telling us our membership at the time the event
2129
+ // was sent, and it isn't "join", we use a different error code.
2130
+ var membership = event.getMembershipAtEvent();
2131
+ if (membership && membership !== KnownMembership.Join && membership !== KnownMembership.Invite) {
2132
+ throw new DecryptionError(DecryptionFailureCode.HISTORICAL_MESSAGE_USER_NOT_JOINED, "This message was sent when we were not a member of the room.", errorDetails);
2133
+ }
2134
+
2135
+ // If the event was sent before this device was created, we use some different error codes.
2136
+ if (event.getTs() <= this.olmMachine.deviceCreationTimeMs) {
2137
+ if (serverBackupInfo === null) {
2138
+ throw new DecryptionError(DecryptionFailureCode.HISTORICAL_MESSAGE_NO_KEY_BACKUP, "This message was sent before this device logged in, and there is no key backup on the server.", errorDetails);
2139
+ } else if (!this.perSessionBackupDownloader.isKeyBackupDownloadConfigured()) {
2140
+ throw new DecryptionError(DecryptionFailureCode.HISTORICAL_MESSAGE_BACKUP_UNCONFIGURED, "This message was sent before this device logged in, and key backup is not working.", errorDetails);
2141
+ } else {
2142
+ throw new DecryptionError(DecryptionFailureCode.HISTORICAL_MESSAGE_WORKING_BACKUP, "This message was sent before this device logged in. Key backup is working, but we still do not (yet) have the key.", errorDetails);
2143
+ }
2144
+ }
2145
+ }
2146
+
2147
+ // If we got a withheld code, expose that.
2148
+ if (err.maybe_withheld) {
2149
+ // Unfortunately the Rust SDK API doesn't let us distinguish between different withheld cases, other than
2150
+ // by string-matching.
2151
+ var failureCode = err.maybe_withheld === "The sender has disabled encrypting to unverified devices." ? DecryptionFailureCode.MEGOLM_KEY_WITHHELD_FOR_UNVERIFIED_DEVICE : DecryptionFailureCode.MEGOLM_KEY_WITHHELD;
2152
+ throw new DecryptionError(failureCode, err.maybe_withheld, errorDetails);
2153
+ }
2154
+ switch (err.code) {
2155
+ case RustSdkCryptoJs.DecryptionErrorCode.MissingRoomKey:
2156
+ throw new DecryptionError(DecryptionFailureCode.MEGOLM_UNKNOWN_INBOUND_SESSION_ID, "The sender's device has not sent us the keys for this message.", errorDetails);
2157
+ case RustSdkCryptoJs.DecryptionErrorCode.UnknownMessageIndex:
2158
+ throw new DecryptionError(DecryptionFailureCode.OLM_UNKNOWN_MESSAGE_INDEX, "The sender's device has not sent us the keys for this message at this index.", errorDetails);
2159
+ case RustSdkCryptoJs.DecryptionErrorCode.SenderIdentityVerificationViolation:
2160
+ // We're refusing to decrypt due to not trusting the sender,
2161
+ // rather than failing to decrypt due to lack of keys, so we
2162
+ // don't need to keep it on the pending list.
2163
+ this.removeEventFromPendingList(event);
2164
+ throw new DecryptionError(DecryptionFailureCode.SENDER_IDENTITY_PREVIOUSLY_VERIFIED, "The sender identity is unverified, but was previously verified.");
2165
+ case RustSdkCryptoJs.DecryptionErrorCode.UnknownSenderDevice:
2166
+ // We're refusing to decrypt due to not trusting the sender,
2167
+ // rather than failing to decrypt due to lack of keys, so we
2168
+ // don't need to keep it on the pending list.
2169
+ this.removeEventFromPendingList(event);
2170
+ throw new DecryptionError(DecryptionFailureCode.UNKNOWN_SENDER_DEVICE, "The sender device is not known.");
2171
+ case RustSdkCryptoJs.DecryptionErrorCode.UnsignedSenderDevice:
2172
+ // We're refusing to decrypt due to not trusting the sender,
2173
+ // rather than failing to decrypt due to lack of keys, so we
2174
+ // don't need to keep it on the pending list.
2175
+ this.removeEventFromPendingList(event);
2176
+ throw new DecryptionError(DecryptionFailureCode.UNSIGNED_SENDER_DEVICE, "The sender identity is not cross-signed.");
2177
+
2178
+ // We don't map MismatchedIdentityKeys for now, as there is no equivalent in legacy.
2179
+ // Just put it on the `UNKNOWN_ERROR` bucket.
2180
+ default:
2181
+ throw new DecryptionError(DecryptionFailureCode.UNKNOWN_ERROR, err.description, errorDetails);
2182
+ }
2183
+ }
2184
+ getEncryptionInfoForEvent(event) {
2185
+ var _this75 = this;
2186
+ return _asyncToGenerator(function* () {
2187
+ if (!event.getClearContent() || event.isDecryptionFailure()) {
2188
+ // not successfully decrypted
2189
+ return null;
2190
+ }
2191
+
2192
+ // special-case outgoing events, which the rust crypto-sdk will barf on
2193
+ if (event.status !== null) {
2194
+ return {
2195
+ shieldColour: EventShieldColour.NONE,
2196
+ shieldReason: null
2197
+ };
2198
+ }
2199
+ var encryptionInfo = yield _this75.olmMachine.getRoomEventEncryptionInfo(stringifyEvent(event), new RustSdkCryptoJs.RoomId(event.getRoomId()));
2200
+ return rustEncryptionInfoToJsEncryptionInfo(_this75.logger, encryptionInfo);
2201
+ })();
2202
+ }
2203
+
2204
+ /**
2205
+ * Look for events which are waiting for a given megolm session
2206
+ *
2207
+ * Returns a list of events which were encrypted by `session` and could not be decrypted
2208
+ */
2209
+ getEventsPendingRoomKey(roomId, sessionId) {
2210
+ var roomPendingEvents = this.eventsPendingKey.get(roomId);
2211
+ if (!roomPendingEvents) return [];
2212
+ var sessionPendingEvents = roomPendingEvents.get(sessionId);
2213
+ if (!sessionPendingEvents) return [];
2214
+ return [...sessionPendingEvents];
2215
+ }
2216
+
2217
+ /**
2218
+ * Add an event to the list of those awaiting their session keys.
2219
+ */
2220
+ addEventToPendingList(event) {
2221
+ var roomId = event.getRoomId();
2222
+ // We shouldn't have events without a room id here.
2223
+ if (!roomId) return;
2224
+ var roomPendingEvents = this.eventsPendingKey.getOrCreate(roomId);
2225
+ var sessionPendingEvents = roomPendingEvents.getOrCreate(event.getWireContent().session_id);
2226
+ sessionPendingEvents.add(event);
2227
+ }
2228
+
2229
+ /**
2230
+ * Remove an event from the list of those awaiting their session keys.
2231
+ */
2232
+ removeEventFromPendingList(event) {
2233
+ var roomId = event.getRoomId();
2234
+ if (!roomId) return;
2235
+ var roomPendingEvents = this.eventsPendingKey.getOrCreate(roomId);
2236
+ if (!roomPendingEvents) return;
2237
+ var sessionPendingEvents = roomPendingEvents.get(event.getWireContent().session_id);
2238
+ if (!sessionPendingEvents) return;
2239
+ sessionPendingEvents.delete(event);
2240
+
2241
+ // also clean up the higher-level maps if they are now empty
2242
+ if (sessionPendingEvents.size === 0) {
2243
+ roomPendingEvents.delete(event.getWireContent().session_id);
2244
+ if (roomPendingEvents.size === 0) {
2245
+ this.eventsPendingKey.delete(roomId);
2246
+ }
2247
+ }
2248
+ }
2249
+ }
2250
+ function stringifyEvent(event) {
2251
+ return JSON.stringify({
2252
+ event_id: event.getId(),
2253
+ type: event.getWireType(),
2254
+ sender: event.getSender(),
2255
+ state_key: event.getStateKey(),
2256
+ content: event.getWireContent(),
2257
+ origin_server_ts: event.getTs()
2258
+ });
2259
+ }
2260
+ function rustEncryptionInfoToJsEncryptionInfo(logger, encryptionInfo) {
2261
+ if (encryptionInfo === undefined) {
2262
+ // not decrypted here
2263
+ return null;
2264
+ }
2265
+
2266
+ // TODO: use strict shield semantics.
2267
+ var shieldState = encryptionInfo.shieldState(false);
2268
+ var shieldColour;
2269
+ switch (shieldState.color) {
2270
+ case RustSdkCryptoJs.ShieldColor.Grey:
2271
+ shieldColour = EventShieldColour.GREY;
2272
+ break;
2273
+ case RustSdkCryptoJs.ShieldColor.None:
2274
+ shieldColour = EventShieldColour.NONE;
2275
+ break;
2276
+ default:
2277
+ shieldColour = EventShieldColour.RED;
2278
+ }
2279
+ var shieldReason;
2280
+ switch (shieldState.code) {
2281
+ case undefined:
2282
+ case null:
2283
+ shieldReason = null;
2284
+ break;
2285
+ case RustSdkCryptoJs.ShieldStateCode.AuthenticityNotGuaranteed:
2286
+ shieldReason = EventShieldReason.AUTHENTICITY_NOT_GUARANTEED;
2287
+ break;
2288
+ case RustSdkCryptoJs.ShieldStateCode.UnknownDevice:
2289
+ shieldReason = EventShieldReason.UNKNOWN_DEVICE;
2290
+ break;
2291
+ case RustSdkCryptoJs.ShieldStateCode.UnsignedDevice:
2292
+ shieldReason = EventShieldReason.UNSIGNED_DEVICE;
2293
+ break;
2294
+ case RustSdkCryptoJs.ShieldStateCode.UnverifiedIdentity:
2295
+ shieldReason = EventShieldReason.UNVERIFIED_IDENTITY;
2296
+ break;
2297
+ case RustSdkCryptoJs.ShieldStateCode.VerificationViolation:
2298
+ shieldReason = EventShieldReason.VERIFICATION_VIOLATION;
2299
+ break;
2300
+ case RustSdkCryptoJs.ShieldStateCode.MismatchedSender:
2301
+ shieldReason = EventShieldReason.MISMATCHED_SENDER;
2302
+ break;
2303
+ default:
2304
+ shieldReason = EventShieldReason.UNKNOWN;
2305
+ break;
2306
+ }
2307
+ return {
2308
+ shieldColour,
2309
+ shieldReason
2310
+ };
2311
+ }
2312
+ /**
2313
+ * Determines if the given payload is a RoomKeyBundleMessage.
2314
+ *
2315
+ * A RoomKeyBundleMessage is identified by having a specific message type
2316
+ * ("io.element.msc4268.room_key_bundle") and a valid room_id in its content.
2317
+ *
2318
+ * @param message - The received to-device message to check.
2319
+ * @returns True if the payload matches the RoomKeyBundleMessage structure, false otherwise.
2320
+ */
2321
+ function isRoomKeyBundleMessage(message) {
2322
+ return message.type === "io.element.msc4268.room_key_bundle" && typeof message.content.room_id === "string";
2323
+ }
2324
+ //# sourceMappingURL=rust-crypto.js.map