@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,942 @@
1
+ /*
2
+ Copyright 2023 - 2024 The Matrix.org Foundation C.I.C.
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ */
16
+
17
+ import { type OlmMachine, type SignatureVerification } from "@matrix-org/matrix-sdk-crypto-wasm";
18
+ import * as RustSdkCryptoJs from "@matrix-org/matrix-sdk-crypto-wasm";
19
+
20
+ import {
21
+ type BackupTrustInfo,
22
+ type Curve25519AuthData,
23
+ type KeyBackupCheck,
24
+ type KeyBackupInfo,
25
+ type KeyBackupSession,
26
+ type Curve25519SessionData,
27
+ type KeyBackupRestoreOpts,
28
+ type KeyBackupRestoreResult,
29
+ type KeyBackupRoomSessions,
30
+ } from "../crypto-api/keybackup.ts";
31
+ import { type Logger } from "../logger.ts";
32
+ import { ClientPrefix, type IHttpOpts, BriijError, type BriijHttpApi, Method } from "../http-api/index.ts";
33
+ import { TypedEventEmitter } from "../models/typed-event-emitter.ts";
34
+ import { encodeUri, logDuration } from "../utils.ts";
35
+ import { type OutgoingRequestProcessor } from "./OutgoingRequestProcessor.ts";
36
+ import { sleep } from "../utils.ts";
37
+ import { type BackupDecryptor } from "../common-crypto/CryptoBackend.ts";
38
+ import {
39
+ type ImportRoomKeyProgressData,
40
+ type ImportRoomKeysOpts,
41
+ CryptoEvent,
42
+ ImportRoomKeyStage,
43
+ } from "../crypto-api/index.ts";
44
+ import { type AESEncryptedSecretStoragePayload } from "../@types/AESEncryptedSecretStoragePayload.ts";
45
+ import { type IMegolmSessionData } from "../@types/crypto.ts";
46
+
47
+ /** Authentification of the backup info, depends on algorithm */
48
+ type AuthData = KeyBackupInfo["auth_data"];
49
+
50
+ /**
51
+ * Holds information of a created keybackup.
52
+ * Useful to get the generated private key material and save it securely somewhere.
53
+ */
54
+ interface KeyBackupCreationInfo {
55
+ version: string;
56
+ algorithm: string;
57
+ authData: AuthData;
58
+ decryptionKey: RustSdkCryptoJs.BackupDecryptionKey;
59
+ }
60
+
61
+ /**
62
+ * @internal
63
+ */
64
+ export class RustBackupManager extends TypedEventEmitter<RustBackupCryptoEvents, RustBackupCryptoEventMap> {
65
+ /** Have we checked if there is a backup on the server which we can use */
66
+ private checkedForBackup = false;
67
+
68
+ /**
69
+ * The latest backup version on the server, when we last checked.
70
+ *
71
+ * If there was no backup on the server, `null`. If our attempt to check resulted in an error, `undefined`.
72
+ *
73
+ * Note that the backup was not necessarily verified.
74
+ */
75
+ private serverBackupInfo: KeyBackupInfo | null | undefined = undefined;
76
+
77
+ private activeBackupVersion: string | null = null;
78
+ private stopped = false;
79
+
80
+ /** whether {@link backupKeysLoop} is currently running */
81
+ private backupKeysLoopRunning = false;
82
+
83
+ public constructor(
84
+ private readonly logger: Logger,
85
+ private readonly olmMachine: OlmMachine,
86
+ private readonly http: BriijHttpApi<IHttpOpts & { onlyData: true }>,
87
+ private readonly outgoingRequestProcessor: OutgoingRequestProcessor,
88
+ ) {
89
+ super();
90
+ }
91
+
92
+ /**
93
+ * Tells the RustBackupManager to stop.
94
+ * The RustBackupManager is scheduling background uploads of keys to the backup, this
95
+ * call allows to cancel the process when the client is stoppped.
96
+ */
97
+ public stop(): void {
98
+ this.stopped = true;
99
+ }
100
+
101
+ /**
102
+ * Get the backup version we are currently backing up to, if any
103
+ */
104
+ public async getActiveBackupVersion(): Promise<string | null> {
105
+ if (!(await this.olmMachine.isBackupEnabled())) return null;
106
+ return this.activeBackupVersion;
107
+ }
108
+
109
+ /**
110
+ * Return the details of the latest backup on the server, when we last checked.
111
+ *
112
+ * This normally returns a cached value, but if we haven't yet made a request to the server, it will fire one off.
113
+ * It will always return the details of the active backup if key backup is enabled.
114
+ *
115
+ * If there was no backup on the server, `null`. If our attempt to check resulted in an error, `undefined`.
116
+ */
117
+ public async getServerBackupInfo(): Promise<KeyBackupInfo | null | undefined> {
118
+ // Do a validity check if we haven't already done one. The check is likely to fail if we don't yet have the
119
+ // backup keys -- but as a side-effect, it will populate `serverBackupInfo`.
120
+ await this.checkKeyBackupAndEnable(false);
121
+ return this.serverBackupInfo;
122
+ }
123
+
124
+ /**
125
+ * Determine if a key backup can be trusted.
126
+ *
127
+ * @param info - key backup info dict from {@link CryptoApi.getKeyBackupInfo}.
128
+ */
129
+ public async isKeyBackupTrusted(info: KeyBackupInfo): Promise<BackupTrustInfo> {
130
+ const signatureVerification: SignatureVerification = await this.olmMachine.verifyBackup(info);
131
+
132
+ const backupKeys: RustSdkCryptoJs.BackupKeys = await this.olmMachine.getBackupKeys();
133
+ const decryptionKey = backupKeys?.decryptionKey;
134
+ const backupMatchesSavedPrivateKey =
135
+ !!decryptionKey && this.backupInfoMatchesBackupDecryptionKey(info, decryptionKey);
136
+ return {
137
+ matchesDecryptionKey: backupMatchesSavedPrivateKey,
138
+ trusted: signatureVerification.trusted(),
139
+ };
140
+ }
141
+
142
+ /**
143
+ * Re-check the key backup and enable/disable it as appropriate.
144
+ *
145
+ * @param force - whether we should force a re-check even if one has already happened.
146
+ */
147
+ public checkKeyBackupAndEnable(force: boolean): Promise<KeyBackupCheck | null> {
148
+ if (!force && this.checkedForBackup) {
149
+ return Promise.resolve(null);
150
+ }
151
+
152
+ // make sure there is only one check going on at a time
153
+ if (!this.keyBackupCheckInProgress) {
154
+ this.keyBackupCheckInProgress = this.doCheckKeyBackup().finally(() => {
155
+ this.keyBackupCheckInProgress = null;
156
+ });
157
+ }
158
+ return this.keyBackupCheckInProgress;
159
+ }
160
+
161
+ /**
162
+ * Handles a backup secret received event and store it if it matches the current backup version.
163
+ *
164
+ * @param secret - The secret as received from a `m.secret.send` event for secret `m.megolm_backup.v1`.
165
+ * @returns true if the secret is valid and has been stored, false otherwise.
166
+ */
167
+ public async handleBackupSecretReceived(secret: string): Promise<boolean> {
168
+ // Currently we only receive the decryption key without any key backup version. It is important to
169
+ // check that the secret is valid for the current version before storing it.
170
+ // We force a check to ensure to have the latest version.
171
+ let latestBackupInfo: KeyBackupInfo | null;
172
+ try {
173
+ latestBackupInfo = await this.requestKeyBackupVersion();
174
+ } catch (e) {
175
+ this.logger.warn("handleBackupSecretReceived: Error checking for latest key backup", e);
176
+ return false;
177
+ }
178
+
179
+ if (!latestBackupInfo?.version) {
180
+ // There is no server-side key backup.
181
+ // This decryption key is useless to us.
182
+ this.logger.warn(
183
+ "handleBackupSecretReceived: Received a backup decryption key, but there is no trusted server-side key backup",
184
+ );
185
+ return false;
186
+ }
187
+
188
+ try {
189
+ const backupDecryptionKey = RustSdkCryptoJs.BackupDecryptionKey.fromBase64(secret);
190
+ const privateKeyMatches = this.backupInfoMatchesBackupDecryptionKey(latestBackupInfo, backupDecryptionKey);
191
+ if (!privateKeyMatches) {
192
+ this.logger.warn(
193
+ `handleBackupSecretReceived: Private decryption key does not match the public key of the current remote backup.`,
194
+ );
195
+ // just ignore the secret
196
+ return false;
197
+ }
198
+ this.logger.info(
199
+ `handleBackupSecretReceived: A valid backup decryption key has been received and stored in cache.`,
200
+ );
201
+ await this.saveBackupDecryptionKey(backupDecryptionKey, latestBackupInfo.version);
202
+ return true;
203
+ } catch (e) {
204
+ this.logger.warn("handleBackupSecretReceived: Invalid backup decryption key", e);
205
+ }
206
+
207
+ return false;
208
+ }
209
+
210
+ public async saveBackupDecryptionKey(
211
+ backupDecryptionKey: RustSdkCryptoJs.BackupDecryptionKey,
212
+ version: string,
213
+ ): Promise<void> {
214
+ await this.olmMachine.saveBackupDecryptionKey(backupDecryptionKey, version);
215
+ // Emit an event that we have a new backup decryption key, so that the sdk can start
216
+ // importing keys from backup if needed.
217
+ this.emit(CryptoEvent.KeyBackupDecryptionKeyCached, version);
218
+ }
219
+
220
+ /**
221
+ * Import a list of room keys previously exported by exportRoomKeys
222
+ *
223
+ * @param keys - a list of session export objects
224
+ * @param opts - options object
225
+ * @returns a promise which resolves once the keys have been imported
226
+ */
227
+ public async importRoomKeys(keys: IMegolmSessionData[], opts?: ImportRoomKeysOpts): Promise<void> {
228
+ await this.importRoomKeysAsJson(JSON.stringify(keys), opts);
229
+ }
230
+
231
+ /**
232
+ * Import a list of room keys previously exported by exportRoomKeysAsJson
233
+ *
234
+ * @param jsonKeys - a JSON string encoding a list of session export objects,
235
+ * each of which is an IMegolmSessionData
236
+ * @param opts - options object
237
+ * @returns a promise which resolves once the keys have been imported
238
+ */
239
+ public async importRoomKeysAsJson(jsonKeys: string, opts?: ImportRoomKeysOpts): Promise<void> {
240
+ await this.olmMachine.importExportedRoomKeys(jsonKeys, (progress: bigint, total: bigint): void => {
241
+ const importOpt: ImportRoomKeyProgressData = {
242
+ total: Number(total),
243
+ successes: Number(progress),
244
+ stage: ImportRoomKeyStage.LoadKeys,
245
+ failures: 0,
246
+ };
247
+ opts?.progressCallback?.(importOpt);
248
+ });
249
+ }
250
+
251
+ /**
252
+ * Implementation of {@link CryptoBackend#importBackedUpRoomKeys}.
253
+ */
254
+ public async importBackedUpRoomKeys(
255
+ keys: IMegolmSessionData[],
256
+ backupVersion: string,
257
+ opts?: ImportRoomKeysOpts,
258
+ ): Promise<void> {
259
+ const keysByRoom: Map<RustSdkCryptoJs.RoomId, Map<string, IMegolmSessionData>> = new Map();
260
+ for (const key of keys) {
261
+ const roomId = new RustSdkCryptoJs.RoomId(key.room_id);
262
+ if (!keysByRoom.has(roomId)) {
263
+ keysByRoom.set(roomId, new Map());
264
+ }
265
+ keysByRoom.get(roomId)!.set(key.session_id, key);
266
+ }
267
+ await this.olmMachine.importBackedUpRoomKeys(
268
+ keysByRoom,
269
+ (progress: bigint, total: bigint, failures: bigint): void => {
270
+ const importOpt: ImportRoomKeyProgressData = {
271
+ total: Number(total),
272
+ successes: Number(progress),
273
+ stage: ImportRoomKeyStage.LoadKeys,
274
+ failures: Number(failures),
275
+ };
276
+ opts?.progressCallback?.(importOpt);
277
+ },
278
+ backupVersion,
279
+ );
280
+ }
281
+
282
+ private keyBackupCheckInProgress: Promise<KeyBackupCheck | null> | null = null;
283
+
284
+ /** Helper for `checkKeyBackup` */
285
+ private async doCheckKeyBackup(): Promise<KeyBackupCheck | null> {
286
+ this.logger.debug("Checking key backup status...");
287
+ let backupInfo: KeyBackupInfo | null | undefined;
288
+ try {
289
+ backupInfo = await this.requestKeyBackupVersion();
290
+ } catch (e) {
291
+ this.logger.warn("Error checking for active key backup", e);
292
+ this.serverBackupInfo = undefined;
293
+ return null;
294
+ }
295
+ this.checkedForBackup = true;
296
+
297
+ if (backupInfo && !backupInfo.version) {
298
+ this.logger.warn("active backup lacks a useful 'version'; ignoring it");
299
+ backupInfo = undefined;
300
+ }
301
+ this.serverBackupInfo = backupInfo;
302
+
303
+ const activeVersion = await this.getActiveBackupVersion();
304
+
305
+ if (!backupInfo) {
306
+ if (activeVersion !== null) {
307
+ this.logger.debug("No key backup present on server: disabling key backup");
308
+ await this.disableKeyBackup();
309
+ } else {
310
+ this.logger.debug("No key backup present on server: not enabling key backup");
311
+ }
312
+ return null;
313
+ }
314
+
315
+ const trustInfo = await this.isKeyBackupTrusted(backupInfo);
316
+
317
+ // Per the spec, we should enable key upload if either (a) the backup is signed by a trusted key, or
318
+ // (b) the public key matches the private decryption key that we have received from 4S.
319
+ if (!trustInfo.matchesDecryptionKey && !trustInfo.trusted) {
320
+ if (activeVersion !== null) {
321
+ this.logger.debug("Key backup present on server but not trusted: disabling key backup");
322
+ await this.disableKeyBackup();
323
+ } else {
324
+ this.logger.debug("Key backup present on server but not trusted: not enabling key backup");
325
+ }
326
+ } else {
327
+ if (activeVersion === null) {
328
+ this.logger.debug(`Found usable key backup v${backupInfo.version}: enabling key backups`);
329
+ await this.enableKeyBackup(backupInfo);
330
+ } else if (activeVersion !== backupInfo.version) {
331
+ this.logger.debug(
332
+ `On backup version ${activeVersion} but found version ${backupInfo.version}: switching.`,
333
+ );
334
+ // This will remove any pending backup request, remove the backup key and reset the backup state of each room key we have.
335
+ await this.disableKeyBackup();
336
+ // Enabling will now trigger re-upload of all the keys
337
+ await this.enableKeyBackup(backupInfo);
338
+ } else {
339
+ this.logger.debug(`Backup version ${backupInfo.version} still current`);
340
+ }
341
+ }
342
+ return { backupInfo, trustInfo };
343
+ }
344
+
345
+ private async enableKeyBackup(backupInfo: KeyBackupInfo): Promise<void> {
346
+ // we know for certain it must be a Curve25519 key, because we have verified it and only Curve25519
347
+ // keys can be verified.
348
+ //
349
+ // we also checked it has a valid `version`.
350
+ await this.olmMachine.enableBackupV1(
351
+ (backupInfo.auth_data as Curve25519AuthData).public_key,
352
+ backupInfo.version!,
353
+ );
354
+ this.activeBackupVersion = backupInfo.version!;
355
+
356
+ this.emit(CryptoEvent.KeyBackupStatus, true);
357
+
358
+ this.backupKeysLoop();
359
+ }
360
+
361
+ /**
362
+ * Restart the backup key loop if there is an active trusted backup.
363
+ * Doesn't try to check the backup server side. To be called when a new
364
+ * megolm key is known locally.
365
+ */
366
+ public async maybeUploadKey(): Promise<void> {
367
+ if (this.activeBackupVersion != null) {
368
+ this.backupKeysLoop();
369
+ }
370
+ }
371
+
372
+ private async disableKeyBackup(): Promise<void> {
373
+ await this.olmMachine.disableBackup();
374
+ this.activeBackupVersion = null;
375
+ this.emit(CryptoEvent.KeyBackupStatus, false);
376
+ }
377
+
378
+ private async backupKeysLoop(maxDelay = 10000): Promise<void> {
379
+ if (this.backupKeysLoopRunning) {
380
+ this.logger.debug(`Backup loop already running`);
381
+ return;
382
+ }
383
+ this.backupKeysLoopRunning = true;
384
+
385
+ this.logger.debug(`Backup: Starting keys upload loop for backup version:${this.activeBackupVersion}.`);
386
+
387
+ // wait between 0 and `maxDelay` seconds, to avoid backup
388
+ // requests from different clients hitting the server all at
389
+ // the same time when a new key is sent
390
+ const delay = Math.random() * maxDelay;
391
+ await sleep(delay);
392
+
393
+ try {
394
+ // number of consecutive network failures for exponential backoff
395
+ let numFailures = 0;
396
+ // The number of keys left to back up. (Populated lazily: see more comments below.)
397
+ let remainingToUploadCount: number | null = null;
398
+ // To avoid computing the key when only a few keys were added (after a sync for example),
399
+ // we compute the count only when at least two iterations are needed.
400
+ let isFirstIteration = true;
401
+
402
+ while (!this.stopped) {
403
+ // Get a batch of room keys to upload
404
+ let request: RustSdkCryptoJs.KeysBackupRequest | undefined = undefined;
405
+ try {
406
+ request = await logDuration(
407
+ this.logger,
408
+ "BackupRoomKeys: Get keys to backup from rust crypto-sdk",
409
+ async () => {
410
+ return await this.olmMachine.backupRoomKeys();
411
+ },
412
+ );
413
+ } catch (err) {
414
+ this.logger.error("Backup: Failed to get keys to backup from rust crypto-sdk", err);
415
+ }
416
+
417
+ if (!request || this.stopped || !this.activeBackupVersion) {
418
+ this.logger.debug(`Backup: Ending loop for version ${this.activeBackupVersion}.`);
419
+ if (!request) {
420
+ // nothing more to upload
421
+ this.emit(CryptoEvent.KeyBackupSessionsRemaining, 0);
422
+ }
423
+ return;
424
+ }
425
+
426
+ try {
427
+ await this.outgoingRequestProcessor.makeOutgoingRequest(request);
428
+ numFailures = 0;
429
+ if (this.stopped) break;
430
+
431
+ // Key count performance (`olmMachine.roomKeyCounts()`) can be pretty bad on some configurations.
432
+ // In particular, we detected on some M1 macs that when the object store reaches a threshold, the count
433
+ // performance stops growing in O(n) and suddenly becomes very slow (40s, 60s or more).
434
+ // For reference, the performance drop occurs around 300-400k keys on the platforms where this issue is observed.
435
+ // Even on other configurations, the count can take several seconds.
436
+ // This will block other operations on the database, like sending messages.
437
+ //
438
+ // This is a workaround to avoid calling `olmMachine.roomKeyCounts()` too often, and only when necessary.
439
+ // We don't call it on the first loop because there could be only a few keys to upload, and we don't want to wait for the count.
440
+ if (!isFirstIteration && remainingToUploadCount === null) {
441
+ try {
442
+ const keyCount = await this.olmMachine.roomKeyCounts();
443
+ remainingToUploadCount = keyCount.total - keyCount.backedUp;
444
+ } catch (err) {
445
+ this.logger.error("Backup: Failed to get key counts from rust crypto-sdk", err);
446
+ }
447
+ }
448
+
449
+ if (remainingToUploadCount !== null) {
450
+ this.emit(CryptoEvent.KeyBackupSessionsRemaining, remainingToUploadCount);
451
+ const keysCountInBatch = this.keysCountInBatch(request);
452
+ // `OlmMachine.roomKeyCounts` is called only once for the current backupKeysLoop. But new
453
+ // keys could be added during the current loop (after a sync for example).
454
+ // So the count can get out of sync with the real number of remaining keys to upload.
455
+ // Depending on the number of new keys imported and the time to complete the loop,
456
+ // this could result in multiple events being emitted with a remaining key count of 0.
457
+ remainingToUploadCount = Math.max(remainingToUploadCount - keysCountInBatch, 0);
458
+ }
459
+ } catch (err) {
460
+ numFailures++;
461
+ this.logger.error("Backup: Error processing backup request for rust crypto-sdk", err);
462
+ if (err instanceof BriijError) {
463
+ const errCode = err.data.errcode;
464
+ if (errCode == "M_NOT_FOUND" || errCode == "M_WRONG_ROOM_KEYS_VERSION") {
465
+ this.logger.debug(`Backup: Failed to upload keys to current vesion: ${errCode}.`);
466
+ try {
467
+ await this.disableKeyBackup();
468
+ } catch (error) {
469
+ this.logger.error("Backup: An error occurred while disabling key backup:", error);
470
+ }
471
+ this.emit(CryptoEvent.KeyBackupFailed, err.data.errcode!);
472
+ // There was an active backup and we are out of sync with the server
473
+ // force a check server side
474
+ this.backupKeysLoopRunning = false;
475
+ this.checkKeyBackupAndEnable(true);
476
+ return;
477
+ } else if (err.isRateLimitError()) {
478
+ // wait for that and then continue?
479
+ try {
480
+ const waitTime = err.getRetryAfterMs();
481
+ if (waitTime && waitTime > 0) {
482
+ await sleep(waitTime);
483
+ continue;
484
+ }
485
+ } catch (error) {
486
+ this.logger.warn(
487
+ "Backup: An error occurred while retrieving a rate-limit retry delay",
488
+ error,
489
+ );
490
+ } // else go to the normal backoff
491
+ }
492
+ }
493
+
494
+ // Some other errors (mx, network, or CORS or invalid urls?) anyhow backoff
495
+ // exponential backoff if we have failures
496
+ await sleep(1000 * Math.pow(2, Math.min(numFailures - 1, 4)));
497
+ }
498
+ isFirstIteration = false;
499
+ }
500
+ } finally {
501
+ this.backupKeysLoopRunning = false;
502
+ }
503
+ }
504
+
505
+ /**
506
+ * Utility method to count the number of keys in a backup request, in order to update the remaining keys count.
507
+ * This should be the chunk size of the backup request for all requests but the last, but we don't have access to it
508
+ * (it's static in the Rust SDK).
509
+ * @param batch - The backup request to count the keys from.
510
+ *
511
+ * @returns The number of keys in the backup request.
512
+ */
513
+ private keysCountInBatch(batch: RustSdkCryptoJs.KeysBackupRequest): number {
514
+ const parsedBody: KeyBackup = JSON.parse(batch.body);
515
+ return countKeysInBackup(parsedBody);
516
+ }
517
+
518
+ /**
519
+ * Get information about a key backup from the server
520
+ * - If version is provided, get information about that backup version.
521
+ * - If no version is provided, get information about the latest backup.
522
+ *
523
+ * @param version - The version of the backup to get information about.
524
+ * @returns Information object from API or null if there is no active backup.
525
+ */
526
+ public async requestKeyBackupVersion(version?: string): Promise<KeyBackupInfo | null> {
527
+ return await requestKeyBackupVersion(this.http, version);
528
+ }
529
+
530
+ /**
531
+ * Creates a new key backup by generating a new random private key.
532
+ *
533
+ * If there is an existing backup server side it will be deleted and replaced
534
+ * by the new one.
535
+ *
536
+ * @param signObject - Method that should sign the backup with existing device and
537
+ * existing identity.
538
+ * @returns a KeyBackupCreationInfo - All information related to the backup.
539
+ */
540
+ public async setupKeyBackup(signObject: (authData: AuthData) => Promise<void>): Promise<KeyBackupCreationInfo> {
541
+ // Clean up any existing backup
542
+ await this.deleteAllKeyBackupVersions();
543
+
544
+ const randomKey = RustSdkCryptoJs.BackupDecryptionKey.createRandomKey();
545
+ const pubKey = randomKey.megolmV1PublicKey;
546
+
547
+ const authData = { public_key: pubKey.publicKeyBase64 };
548
+
549
+ await signObject(authData);
550
+
551
+ const res = await this.http.authedRequest<{ version: string }>(
552
+ Method.Post,
553
+ "/room_keys/version",
554
+ undefined,
555
+ {
556
+ algorithm: pubKey.algorithm,
557
+ auth_data: authData,
558
+ },
559
+ {
560
+ prefix: ClientPrefix.V3,
561
+ },
562
+ );
563
+
564
+ await this.saveBackupDecryptionKey(randomKey, res.version);
565
+
566
+ return {
567
+ version: res.version,
568
+ algorithm: pubKey.algorithm,
569
+ authData: authData,
570
+ decryptionKey: randomKey,
571
+ };
572
+ }
573
+
574
+ /**
575
+ * Deletes all key backups.
576
+ *
577
+ * Will call the API to delete active backup until there is no more present.
578
+ */
579
+ public async deleteAllKeyBackupVersions(): Promise<void> {
580
+ // there could be several backup versions. Delete all to be safe.
581
+ let current = (await this.requestKeyBackupVersion())?.version ?? null;
582
+ while (current != null) {
583
+ await this.deleteKeyBackupVersion(current);
584
+ current = (await this.requestKeyBackupVersion())?.version ?? null;
585
+ }
586
+
587
+ // XXX: Should this also update Secret Storage and delete any existing keys?
588
+ }
589
+
590
+ /**
591
+ * Deletes the given key backup.
592
+ *
593
+ * @param version - The backup version to delete.
594
+ */
595
+ public async deleteKeyBackupVersion(version: string): Promise<void> {
596
+ this.logger.debug(`deleteKeyBackupVersion v:${version}`);
597
+ const path = encodeUri("/room_keys/version/$version", { $version: version });
598
+ await this.http.authedRequest<void>(Method.Delete, path, undefined, undefined, {
599
+ prefix: ClientPrefix.V3,
600
+ });
601
+ // If the backup we are deleting is the active one, we need to disable the key backup and to have the local properties reset
602
+ if (this.activeBackupVersion === version) {
603
+ this.serverBackupInfo = null;
604
+ await this.disableKeyBackup();
605
+ }
606
+ }
607
+
608
+ /**
609
+ * Creates a new backup decryptor for the given private key.
610
+ * @param decryptionKey - The private key to use for decryption.
611
+ */
612
+ public createBackupDecryptor(decryptionKey: RustSdkCryptoJs.BackupDecryptionKey): BackupDecryptor {
613
+ return new RustBackupDecryptor(this.logger, decryptionKey);
614
+ }
615
+
616
+ /**
617
+ * Restore a key backup.
618
+ *
619
+ * @param backupVersion - The version of the backup to restore.
620
+ * @param backupDecryptor - The backup decryptor to use to decrypt the keys.
621
+ * @param opts - Options for the restore.
622
+ * @returns The total number of keys and the total imported.
623
+ */
624
+ public async restoreKeyBackup(
625
+ backupVersion: string,
626
+ backupDecryptor: BackupDecryptor,
627
+ opts?: KeyBackupRestoreOpts,
628
+ ): Promise<KeyBackupRestoreResult> {
629
+ const keyBackup = await this.downloadKeyBackup(backupVersion);
630
+
631
+ return this.importKeyBackup(keyBackup, backupVersion, backupDecryptor, opts);
632
+ }
633
+
634
+ /**
635
+ * Download and import the keys for a given room from the current backup version.
636
+ *
637
+ * @param roomId - The room in question.
638
+ */
639
+ public async downloadLatestRoomKeyBackup(roomId: string): Promise<void> {
640
+ const { backupVersion, decryptionKey } = await this.olmMachine.getBackupKeys();
641
+ if (!backupVersion || !decryptionKey) {
642
+ this.logger.warn(
643
+ `downloadLatestRoomKeyBackup: Could not download backup (backupVersion=${backupVersion}, hasDecryptionKey=${!!decryptionKey})`,
644
+ );
645
+ return;
646
+ }
647
+ const sessions = await this.downloadRoomKeyBackup(backupVersion, roomId);
648
+ const backupDecryptor = this.createBackupDecryptor(decryptionKey);
649
+ this.importKeyBackup({ rooms: { [roomId]: { sessions } } }, backupVersion, backupDecryptor);
650
+ }
651
+
652
+ /**
653
+ * Call `/room_keys/keys` to download the key backup (room keys) for the given backup version.
654
+ * https://spec.matrix.org/v1.12/client-server-api/#get_matrixclientv3room_keyskeys
655
+ *
656
+ * @param backupVersion
657
+ * @returns The key backup response.
658
+ */
659
+ private downloadKeyBackup(backupVersion: string): Promise<KeyBackup> {
660
+ return this.http.authedRequest<KeyBackup>(
661
+ Method.Get,
662
+ "/room_keys/keys",
663
+ { version: backupVersion },
664
+ undefined,
665
+ {
666
+ prefix: ClientPrefix.V3,
667
+ },
668
+ );
669
+ }
670
+
671
+ /**
672
+ * Call `/room/keys/keys/{roomId}` to download the key backup (room keys) for a given backup version and room ID.
673
+ * @param backupVersion - The version to download.
674
+ * @param roomId - The ID of the room.
675
+ * @returns The key backup response.
676
+ */
677
+ private downloadRoomKeyBackup(backupVersion: string, roomId: string): Promise<KeyBackupRoomSessions> {
678
+ const path = encodeUri("/room_keys/keys/$roomId", {
679
+ $roomId: roomId,
680
+ });
681
+ return this.http.authedRequest<KeyBackupRoomSessions>(Method.Get, path, { version: backupVersion }, undefined, {
682
+ prefix: ClientPrefix.V3,
683
+ });
684
+ }
685
+
686
+ /**
687
+ * Import the room keys from a `/room_keys/keys` call.
688
+ * Calls `opts.progressCallback` with the progress of the import.
689
+ *
690
+ * @param keyBackup - The response from the server containing the keys to import.
691
+ * @param backupVersion - The version of the backup info.
692
+ * @param backupDecryptor - The backup decryptor to use to decrypt the keys.
693
+ * @param opts - Options for the import.
694
+ *
695
+ * @returns The total number of keys and the total imported.
696
+ *
697
+ * @private
698
+ */
699
+ private async importKeyBackup(
700
+ keyBackup: KeyBackup,
701
+ backupVersion: string,
702
+ backupDecryptor: BackupDecryptor,
703
+ opts?: KeyBackupRestoreOpts,
704
+ ): Promise<KeyBackupRestoreResult> {
705
+ // We have a full backup here, it can get quite big, so we need to decrypt and import it in chunks.
706
+
707
+ const CHUNK_SIZE = 200;
708
+ // Get the total count as a first pass
709
+ const totalKeyCount = countKeysInBackup(keyBackup);
710
+ let totalImported = 0;
711
+ let totalFailures = 0;
712
+
713
+ opts?.progressCallback?.({
714
+ total: totalKeyCount,
715
+ successes: totalImported,
716
+ stage: ImportRoomKeyStage.LoadKeys,
717
+ failures: totalFailures,
718
+ });
719
+
720
+ /**
721
+ * This method is called when we have enough chunks to decrypt.
722
+ * It will decrypt the chunks and try to import the room keys.
723
+ * @param roomChunks
724
+ */
725
+ const handleChunkCallback = async (roomChunks: Map<string, KeyBackupRoomSessions>): Promise<void> => {
726
+ const currentChunk: IMegolmSessionData[] = [];
727
+ for (const roomId of roomChunks.keys()) {
728
+ // Decrypt the sessions for the given room
729
+ const decryptedSessions = await backupDecryptor.decryptSessions(roomChunks.get(roomId)!);
730
+ // Add the decrypted sessions to the current chunk
731
+ decryptedSessions.forEach((session) => {
732
+ // We set the room_id for each session
733
+ session.room_id = roomId;
734
+ currentChunk.push(session);
735
+ });
736
+ }
737
+
738
+ // We have a chunk of decrypted keys: import them
739
+ try {
740
+ await this.importBackedUpRoomKeys(currentChunk, backupVersion);
741
+ totalImported += currentChunk.length;
742
+ } catch (e) {
743
+ totalFailures += currentChunk.length;
744
+ // We failed to import some keys, but we should still try to import the rest?
745
+ // Log the error and continue
746
+ this.logger.error("Error importing keys from backup", e);
747
+ }
748
+
749
+ opts?.progressCallback?.({
750
+ total: totalKeyCount,
751
+ successes: totalImported,
752
+ stage: ImportRoomKeyStage.LoadKeys,
753
+ failures: totalFailures,
754
+ });
755
+ };
756
+
757
+ let groupChunkCount = 0;
758
+ let chunkGroupByRoom: Map<string, KeyBackupRoomSessions> = new Map();
759
+
760
+ // Iterate over the rooms and sessions to group them in chunks
761
+ // And we call the handleChunkCallback when we have enough chunks to decrypt
762
+ for (const [roomId, roomData] of Object.entries(keyBackup.rooms)) {
763
+ // If there are no sessions for the room, skip it
764
+ if (!roomData.sessions) continue;
765
+
766
+ // Initialize a new chunk group for the current room
767
+ chunkGroupByRoom.set(roomId, {});
768
+
769
+ for (const [sessionId, session] of Object.entries(roomData.sessions)) {
770
+ // We set previously the chunk group for the current room, so we can safely get it
771
+ const sessionsForRoom = chunkGroupByRoom.get(roomId)!;
772
+ sessionsForRoom[sessionId] = session;
773
+ groupChunkCount += 1;
774
+ // If we have enough chunks to decrypt, call the block callback
775
+ if (groupChunkCount >= CHUNK_SIZE) {
776
+ // We have enough chunks to decrypt
777
+ await handleChunkCallback(chunkGroupByRoom);
778
+ // Reset the chunk group
779
+ chunkGroupByRoom = new Map();
780
+ // There might be remaining keys for that room, so add back an entry for the current room.
781
+ chunkGroupByRoom.set(roomId, {});
782
+ groupChunkCount = 0;
783
+ }
784
+ }
785
+ }
786
+
787
+ // Handle remaining chunk if needed
788
+ if (groupChunkCount > 0) {
789
+ await handleChunkCallback(chunkGroupByRoom);
790
+ }
791
+
792
+ return { total: totalKeyCount, imported: totalImported };
793
+ }
794
+
795
+ /**
796
+ * Checks if the provided backup info matches the given private key.
797
+ *
798
+ * @param info - The backup info to check.
799
+ * @param backupDecryptionKey - The `BackupDecryptionKey` private key to check against.
800
+ * @returns `true` if the private key can decrypt the backup, `false` otherwise.
801
+ */
802
+ private backupInfoMatchesBackupDecryptionKey(
803
+ info: KeyBackupInfo,
804
+ backupDecryptionKey: RustSdkCryptoJs.BackupDecryptionKey,
805
+ ): boolean {
806
+ if (info.algorithm !== "m.megolm_backup.v1.curve25519-aes-sha2") {
807
+ this.logger.warn("backupMatchesPrivateKey: Unsupported backup algorithm", info.algorithm);
808
+ return false;
809
+ }
810
+
811
+ return (
812
+ (info.auth_data as Curve25519AuthData)?.public_key === backupDecryptionKey.megolmV1PublicKey.publicKeyBase64
813
+ );
814
+ }
815
+ }
816
+ /**
817
+ * Implementation of {@link BackupDecryptor} for the rust crypto backend.
818
+ */
819
+ export class RustBackupDecryptor implements BackupDecryptor {
820
+ private decryptionKey: RustSdkCryptoJs.BackupDecryptionKey;
821
+ public sourceTrusted: boolean;
822
+
823
+ public constructor(
824
+ private readonly logger: Logger,
825
+ decryptionKey: RustSdkCryptoJs.BackupDecryptionKey,
826
+ ) {
827
+ this.decryptionKey = decryptionKey;
828
+ this.sourceTrusted = false;
829
+ }
830
+
831
+ /**
832
+ * Implements {@link BackupDecryptor#decryptSessions}
833
+ */
834
+ public async decryptSessions(
835
+ ciphertexts: Record<string, KeyBackupSession<Curve25519SessionData | AESEncryptedSecretStoragePayload>>,
836
+ ): Promise<IMegolmSessionData[]> {
837
+ const keys: IMegolmSessionData[] = [];
838
+ for (const [sessionId, sessionData] of Object.entries(ciphertexts)) {
839
+ try {
840
+ const decrypted = JSON.parse(
841
+ this.decryptionKey.decryptV1(
842
+ sessionData.session_data.ephemeral,
843
+ sessionData.session_data.mac,
844
+ sessionData.session_data.ciphertext,
845
+ ),
846
+ );
847
+ decrypted.session_id = sessionId;
848
+ keys.push(decrypted);
849
+ } catch (e) {
850
+ this.logger.debug("Failed to decrypt megolm session from backup", e, sessionData);
851
+ }
852
+ }
853
+ return keys;
854
+ }
855
+
856
+ /**
857
+ * Implements {@link BackupDecryptor#free}
858
+ */
859
+ public free(): void {
860
+ this.decryptionKey.free();
861
+ }
862
+ }
863
+
864
+ /**
865
+ * Fetch a key backup info from the server.
866
+ *
867
+ * If `version` is provided, calls `GET /room_keys/version/$version` and gets the backup info for that version.
868
+ * See https://spec.matrix.org/v1.12/client-server-api/#get_matrixclientv3room_keysversionversion.
869
+ *
870
+ * If not, calls `GET /room_keys/version` and gets the latest backup info.
871
+ * See https://spec.matrix.org/v1.12/client-server-api/#get_matrixclientv3room_keysversion
872
+ *
873
+ * @param http
874
+ * @param version - the specific version of the backup info to fetch
875
+ * @returns The key backup info or null if there is no backup.
876
+ */
877
+ export async function requestKeyBackupVersion(
878
+ http: BriijHttpApi<IHttpOpts & { onlyData: true }>,
879
+ version?: string,
880
+ ): Promise<KeyBackupInfo | null> {
881
+ try {
882
+ const path = version ? encodeUri("/room_keys/version/$version", { $version: version }) : "/room_keys/version";
883
+ return await http.authedRequest<KeyBackupInfo>(Method.Get, path, undefined, undefined, {
884
+ prefix: ClientPrefix.V3,
885
+ });
886
+ } catch (e) {
887
+ if ((<BriijError>e).errcode === "M_NOT_FOUND") {
888
+ return null;
889
+ } else {
890
+ throw e;
891
+ }
892
+ }
893
+ }
894
+
895
+ /**
896
+ * Checks if the provided decryption key matches the public key of the key backup info.
897
+ *
898
+ * @param decryptionKey - The decryption key to check.
899
+ * @param keyBackupInfo - The key backup info to check against.
900
+ * @returns `true` if the decryption key matches the key backup info, `false` otherwise.
901
+ */
902
+ export function decryptionKeyMatchesKeyBackupInfo(
903
+ decryptionKey: RustSdkCryptoJs.BackupDecryptionKey,
904
+ keyBackupInfo: KeyBackupInfo,
905
+ ): boolean {
906
+ const authData = <Curve25519AuthData>keyBackupInfo.auth_data;
907
+ return authData.public_key === decryptionKey.megolmV1PublicKey.publicKeyBase64;
908
+ }
909
+
910
+ /**
911
+ * Counts the total number of keys present in a key backup.
912
+ * @param keyBackup - The key backup to count the keys from.
913
+ * @returns The total number of keys in the backup.
914
+ */
915
+ function countKeysInBackup(keyBackup: KeyBackup): number {
916
+ let count = 0;
917
+ for (const { sessions } of Object.values(keyBackup.rooms)) {
918
+ count += Object.keys(sessions).length;
919
+ }
920
+ return count;
921
+ }
922
+
923
+ export type RustBackupCryptoEvents =
924
+ | CryptoEvent.KeyBackupStatus
925
+ | CryptoEvent.KeyBackupSessionsRemaining
926
+ | CryptoEvent.KeyBackupFailed
927
+ | CryptoEvent.KeyBackupDecryptionKeyCached;
928
+
929
+ export type RustBackupCryptoEventMap = {
930
+ [CryptoEvent.KeyBackupStatus]: (enabled: boolean) => void;
931
+ [CryptoEvent.KeyBackupSessionsRemaining]: (remaining: number) => void;
932
+ [CryptoEvent.KeyBackupFailed]: (errCode: string) => void;
933
+ [CryptoEvent.KeyBackupDecryptionKeyCached]: (version: string) => void;
934
+ };
935
+
936
+ /**
937
+ * Response from GET `/room_keys/keys` endpoint.
938
+ * See https://spec.matrix.org/latest/client-server-api/#get_matrixclientv3room_keyskeys
939
+ */
940
+ export interface KeyBackup {
941
+ rooms: Record<string, { sessions: KeyBackupRoomSessions }>;
942
+ }