matrix-js-sdk 41.8.0 → 41.9.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 (458) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +1 -1
  3. package/lib/@types/AESEncryptedSecretStoragePayload.js +3 -1
  4. package/lib/@types/IIdentityServerProvider.js +3 -1
  5. package/lib/@types/PushRules.js +7 -7
  6. package/lib/@types/PushRules.js.map +1 -1
  7. package/lib/@types/auth.js +4 -4
  8. package/lib/@types/auth.js.map +1 -1
  9. package/lib/@types/beacon.js +2 -2
  10. package/lib/@types/beacon.js.map +1 -1
  11. package/lib/@types/common.js +3 -1
  12. package/lib/@types/crypto.js +3 -1
  13. package/lib/@types/event.js +20 -20
  14. package/lib/@types/event.js.map +1 -1
  15. package/lib/@types/events.js +3 -1
  16. package/lib/@types/extensible_events.js +6 -6
  17. package/lib/@types/extensible_events.js.map +1 -1
  18. package/lib/@types/global.d.js.map +1 -1
  19. package/lib/@types/json.js +3 -1
  20. package/lib/@types/local_notifications.js +3 -1
  21. package/lib/@types/location.js +4 -4
  22. package/lib/@types/location.js.map +1 -1
  23. package/lib/@types/matrix-sdk-crypto-wasm.d.js +3 -1
  24. package/lib/@types/media.js +3 -1
  25. package/lib/@types/membership.js +1 -1
  26. package/lib/@types/membership.js.map +1 -1
  27. package/lib/@types/partials.js +6 -6
  28. package/lib/@types/partials.js.map +1 -1
  29. package/lib/@types/polls.js +5 -5
  30. package/lib/@types/polls.js.map +1 -1
  31. package/lib/@types/read_receipts.js +2 -2
  32. package/lib/@types/read_receipts.js.map +1 -1
  33. package/lib/@types/registration.js +3 -1
  34. package/lib/@types/requests.js +1 -1
  35. package/lib/@types/requests.js.map +1 -1
  36. package/lib/@types/retention.js +1 -1
  37. package/lib/@types/retention.js.map +1 -1
  38. package/lib/@types/search.js +1 -1
  39. package/lib/@types/search.js.map +1 -1
  40. package/lib/@types/signed.js +3 -1
  41. package/lib/@types/spaces.js +3 -1
  42. package/lib/@types/state_events.js +3 -1
  43. package/lib/@types/synapse.js +3 -1
  44. package/lib/@types/sync.js +1 -1
  45. package/lib/@types/sync.js.map +1 -1
  46. package/lib/@types/threepids.js +1 -1
  47. package/lib/@types/threepids.js.map +1 -1
  48. package/lib/@types/topic.js +1 -1
  49. package/lib/@types/topic.js.map +1 -1
  50. package/lib/@types/uia.js +3 -1
  51. package/lib/NamespacedValue.js +8 -8
  52. package/lib/NamespacedValue.js.map +1 -1
  53. package/lib/ReEmitter.js +9 -16
  54. package/lib/ReEmitter.js.map +1 -1
  55. package/lib/ToDeviceMessageQueue.js +49 -57
  56. package/lib/ToDeviceMessageQueue.js.map +1 -1
  57. package/lib/autodiscovery.js +232 -247
  58. package/lib/autodiscovery.js.map +1 -1
  59. package/lib/base64.js +1 -1
  60. package/lib/base64.js.map +1 -1
  61. package/lib/browser-index.d.ts +2 -2
  62. package/lib/browser-index.d.ts.map +1 -1
  63. package/lib/browser-index.js +5 -5
  64. package/lib/browser-index.js.map +1 -1
  65. package/lib/capabilityPoller.js +19 -22
  66. package/lib/capabilityPoller.js.map +1 -1
  67. package/lib/client.d.ts +2 -8
  68. package/lib/client.d.ts.map +1 -1
  69. package/lib/client.js +2043 -2487
  70. package/lib/client.js.map +1 -1
  71. package/lib/common-crypto/CryptoBackend.js +2 -2
  72. package/lib/common-crypto/CryptoBackend.js.map +1 -1
  73. package/lib/common-crypto/key-passphrase.js.map +1 -1
  74. package/lib/content-helpers.js +43 -48
  75. package/lib/content-helpers.js.map +1 -1
  76. package/lib/content-repo.js +14 -24
  77. package/lib/content-repo.js.map +1 -1
  78. package/lib/crypto/store/base.js +6 -6
  79. package/lib/crypto/store/base.js.map +1 -1
  80. package/lib/crypto/store/indexeddb-crypto-store-backend.js +190 -238
  81. package/lib/crypto/store/indexeddb-crypto-store-backend.js.map +1 -1
  82. package/lib/crypto/store/indexeddb-crypto-store.js +25 -30
  83. package/lib/crypto/store/indexeddb-crypto-store.js.map +1 -1
  84. package/lib/crypto/store/localStorage-crypto-store.js +113 -145
  85. package/lib/crypto/store/localStorage-crypto-store.js.map +1 -1
  86. package/lib/crypto/store/memory-crypto-store.js +74 -105
  87. package/lib/crypto/store/memory-crypto-store.js.map +1 -1
  88. package/lib/crypto-api/CryptoEvent.js +1 -1
  89. package/lib/crypto-api/CryptoEvent.js.map +1 -1
  90. package/lib/crypto-api/CryptoEventHandlerMap.js +3 -1
  91. package/lib/crypto-api/index.d.ts +15 -6
  92. package/lib/crypto-api/index.d.ts.map +1 -1
  93. package/lib/crypto-api/index.js +22 -22
  94. package/lib/crypto-api/index.js.map +1 -1
  95. package/lib/crypto-api/key-passphrase.js +15 -23
  96. package/lib/crypto-api/key-passphrase.js.map +1 -1
  97. package/lib/crypto-api/keybackup.js +3 -1
  98. package/lib/crypto-api/recovery-key.js +11 -12
  99. package/lib/crypto-api/recovery-key.js.map +1 -1
  100. package/lib/crypto-api/verification.js +3 -3
  101. package/lib/crypto-api/verification.js.map +1 -1
  102. package/lib/digest.js +7 -14
  103. package/lib/digest.js.map +1 -1
  104. package/lib/embedded.d.ts.map +1 -1
  105. package/lib/embedded.js +380 -505
  106. package/lib/embedded.js.map +1 -1
  107. package/lib/errors.js +2 -2
  108. package/lib/errors.js.map +1 -1
  109. package/lib/event-mapper.js +10 -12
  110. package/lib/event-mapper.js.map +1 -1
  111. package/lib/extensible_events_v1/ExtensibleEvent.js.map +1 -1
  112. package/lib/extensible_events_v1/InvalidEventError.js.map +1 -1
  113. package/lib/extensible_events_v1/MessageEvent.js +11 -13
  114. package/lib/extensible_events_v1/MessageEvent.js.map +1 -1
  115. package/lib/extensible_events_v1/PollEndEvent.js +3 -4
  116. package/lib/extensible_events_v1/PollEndEvent.js.map +1 -1
  117. package/lib/extensible_events_v1/PollResponseEvent.js +5 -6
  118. package/lib/extensible_events_v1/PollResponseEvent.js.map +1 -1
  119. package/lib/extensible_events_v1/PollStartEvent.js +8 -10
  120. package/lib/extensible_events_v1/PollStartEvent.js.map +1 -1
  121. package/lib/extensible_events_v1/utilities.js.map +1 -1
  122. package/lib/feature.js +18 -31
  123. package/lib/feature.js.map +1 -1
  124. package/lib/filter-component.d.ts.map +1 -1
  125. package/lib/filter-component.js +20 -26
  126. package/lib/filter-component.js.map +1 -1
  127. package/lib/filter.js +14 -17
  128. package/lib/filter.js.map +1 -1
  129. package/lib/http-api/errors.js +28 -43
  130. package/lib/http-api/errors.js.map +1 -1
  131. package/lib/http-api/fetch.js +141 -159
  132. package/lib/http-api/fetch.js.map +1 -1
  133. package/lib/http-api/index.js +17 -20
  134. package/lib/http-api/index.js.map +1 -1
  135. package/lib/http-api/interface.js +1 -1
  136. package/lib/http-api/interface.js.map +1 -1
  137. package/lib/http-api/method.js +1 -1
  138. package/lib/http-api/method.js.map +1 -1
  139. package/lib/http-api/prefix.js +3 -3
  140. package/lib/http-api/prefix.js.map +1 -1
  141. package/lib/http-api/refresh.js +74 -94
  142. package/lib/http-api/refresh.js.map +1 -1
  143. package/lib/http-api/utils.d.ts +1 -1
  144. package/lib/http-api/utils.d.ts.map +1 -1
  145. package/lib/http-api/utils.js +34 -42
  146. package/lib/http-api/utils.js.map +1 -1
  147. package/lib/index.js.map +1 -1
  148. package/lib/indexeddb-helpers.js +3 -3
  149. package/lib/indexeddb-helpers.js.map +1 -1
  150. package/lib/indexeddb-worker.js.map +1 -1
  151. package/lib/interactive-auth.d.ts +5 -5
  152. package/lib/interactive-auth.d.ts.map +1 -1
  153. package/lib/interactive-auth.js +172 -204
  154. package/lib/interactive-auth.js.map +1 -1
  155. package/lib/logger.js +21 -57
  156. package/lib/logger.js.map +1 -1
  157. package/lib/matrix.js +7 -11
  158. package/lib/matrix.js.map +1 -1
  159. package/lib/matrixrtc/CallMembership.js +80 -74
  160. package/lib/matrixrtc/CallMembership.js.map +1 -1
  161. package/lib/matrixrtc/EncryptionManager.js +1 -1
  162. package/lib/matrixrtc/EncryptionManager.js.map +1 -1
  163. package/lib/matrixrtc/IKeyTransport.js +1 -1
  164. package/lib/matrixrtc/IKeyTransport.js.map +1 -1
  165. package/lib/matrixrtc/IMembershipManager.js +1 -1
  166. package/lib/matrixrtc/IMembershipManager.js.map +1 -1
  167. package/lib/matrixrtc/LivekitTransport.d.ts +1 -1
  168. package/lib/matrixrtc/LivekitTransport.js +4 -4
  169. package/lib/matrixrtc/LivekitTransport.js.map +1 -1
  170. package/lib/matrixrtc/MatrixRTCSession.js +137 -187
  171. package/lib/matrixrtc/MatrixRTCSession.js.map +1 -1
  172. package/lib/matrixrtc/MatrixRTCSessionManager.js +36 -41
  173. package/lib/matrixrtc/MatrixRTCSessionManager.js.map +1 -1
  174. package/lib/matrixrtc/MembershipManager.js +332 -378
  175. package/lib/matrixrtc/MembershipManager.js.map +1 -1
  176. package/lib/matrixrtc/MembershipManagerActionScheduler.js +54 -63
  177. package/lib/matrixrtc/MembershipManagerActionScheduler.js.map +1 -1
  178. package/lib/matrixrtc/RTCEncryptionManager.js +119 -143
  179. package/lib/matrixrtc/RTCEncryptionManager.js.map +1 -1
  180. package/lib/matrixrtc/ToDeviceKeyTransport.js +53 -58
  181. package/lib/matrixrtc/ToDeviceKeyTransport.js.map +1 -1
  182. package/lib/matrixrtc/index.js.map +1 -1
  183. package/lib/matrixrtc/membershipData/common.js +1 -1
  184. package/lib/matrixrtc/membershipData/common.js.map +1 -1
  185. package/lib/matrixrtc/membershipData/index.js.map +1 -1
  186. package/lib/matrixrtc/membershipData/rtc.js +15 -23
  187. package/lib/matrixrtc/membershipData/rtc.js.map +1 -1
  188. package/lib/matrixrtc/membershipData/session.js +4 -5
  189. package/lib/matrixrtc/membershipData/session.js.map +1 -1
  190. package/lib/matrixrtc/types.js +4 -6
  191. package/lib/matrixrtc/types.js.map +1 -1
  192. package/lib/matrixrtc/utils.js +4 -11
  193. package/lib/matrixrtc/utils.js.map +1 -1
  194. package/lib/models/MSC3089Branch.js +91 -116
  195. package/lib/models/MSC3089Branch.js.map +1 -1
  196. package/lib/models/MSC3089TreeSpace.js +209 -245
  197. package/lib/models/MSC3089TreeSpace.js.map +1 -1
  198. package/lib/models/ToDeviceMessage.js +3 -1
  199. package/lib/models/beacon.js +14 -13
  200. package/lib/models/beacon.js.map +1 -1
  201. package/lib/models/compare-event-ordering.js +13 -13
  202. package/lib/models/compare-event-ordering.js.map +1 -1
  203. package/lib/models/device.js +3 -3
  204. package/lib/models/device.js.map +1 -1
  205. package/lib/models/event-context.js +5 -8
  206. package/lib/models/event-context.js.map +1 -1
  207. package/lib/models/event-status.js +1 -1
  208. package/lib/models/event-status.js.map +1 -1
  209. package/lib/models/event-timeline-set.js +88 -94
  210. package/lib/models/event-timeline-set.js.map +1 -1
  211. package/lib/models/event-timeline.js +28 -30
  212. package/lib/models/event-timeline.js.map +1 -1
  213. package/lib/models/event.js +182 -226
  214. package/lib/models/event.js.map +1 -1
  215. package/lib/models/invites-ignorer-types.js +4 -4
  216. package/lib/models/invites-ignorer-types.js.map +1 -1
  217. package/lib/models/invites-ignorer.js +159 -179
  218. package/lib/models/invites-ignorer.js.map +1 -1
  219. package/lib/models/poll.js +71 -81
  220. package/lib/models/poll.js.map +1 -1
  221. package/lib/models/profile-keys.js +2 -2
  222. package/lib/models/profile-keys.js.map +1 -1
  223. package/lib/models/read-receipt.js +40 -56
  224. package/lib/models/read-receipt.js.map +1 -1
  225. package/lib/models/related-relations.js.map +1 -1
  226. package/lib/models/relations-container.js +22 -23
  227. package/lib/models/relations-container.js.map +1 -1
  228. package/lib/models/relations.js +133 -159
  229. package/lib/models/relations.js.map +1 -1
  230. package/lib/models/room-member.js +24 -29
  231. package/lib/models/room-member.js.map +1 -1
  232. package/lib/models/room-receipts.js +29 -43
  233. package/lib/models/room-receipts.js.map +1 -1
  234. package/lib/models/room-retention.js +74 -83
  235. package/lib/models/room-retention.js.map +1 -1
  236. package/lib/models/room-state.js +143 -172
  237. package/lib/models/room-state.js.map +1 -1
  238. package/lib/models/room-sticky-events.d.ts +1 -0
  239. package/lib/models/room-sticky-events.d.ts.map +1 -1
  240. package/lib/models/room-sticky-events.js +45 -65
  241. package/lib/models/room-sticky-events.js.map +1 -1
  242. package/lib/models/room-summary.js.map +1 -1
  243. package/lib/models/room.d.ts.map +1 -1
  244. package/lib/models/room.js +765 -909
  245. package/lib/models/room.js.map +1 -1
  246. package/lib/models/search-result.js +5 -5
  247. package/lib/models/search-result.js.map +1 -1
  248. package/lib/models/thread.js +225 -285
  249. package/lib/models/thread.js.map +1 -1
  250. package/lib/models/typed-event-emitter.js +7 -18
  251. package/lib/models/typed-event-emitter.js.map +1 -1
  252. package/lib/models/user.js +8 -8
  253. package/lib/models/user.js.map +1 -1
  254. package/lib/oidc/authorize.js +208 -241
  255. package/lib/oidc/authorize.js.map +1 -1
  256. package/lib/oidc/discovery.js +23 -36
  257. package/lib/oidc/discovery.js.map +1 -1
  258. package/lib/oidc/error.js +1 -1
  259. package/lib/oidc/error.js.map +1 -1
  260. package/lib/oidc/index.js +1 -0
  261. package/lib/oidc/index.js.map +1 -1
  262. package/lib/oidc/register.js +60 -66
  263. package/lib/oidc/register.js.map +1 -1
  264. package/lib/oidc/tokenRefresher.js +77 -91
  265. package/lib/oidc/tokenRefresher.js.map +1 -1
  266. package/lib/oidc/validate.js +18 -18
  267. package/lib/oidc/validate.js.map +1 -1
  268. package/lib/pushprocessor.js +71 -82
  269. package/lib/pushprocessor.js.map +1 -1
  270. package/lib/randomstring.js +9 -9
  271. package/lib/randomstring.js.map +1 -1
  272. package/lib/realtime-callbacks.js +25 -28
  273. package/lib/realtime-callbacks.js.map +1 -1
  274. package/lib/receipt-accumulator.d.ts +2 -0
  275. package/lib/receipt-accumulator.d.ts.map +1 -1
  276. package/lib/receipt-accumulator.js +14 -22
  277. package/lib/receipt-accumulator.js.map +1 -1
  278. package/lib/rendezvous/MSC4108SignInWithQR.js +271 -302
  279. package/lib/rendezvous/MSC4108SignInWithQR.js.map +1 -1
  280. package/lib/rendezvous/RendezvousChannel.js +3 -1
  281. package/lib/rendezvous/RendezvousCode.js +3 -1
  282. package/lib/rendezvous/RendezvousError.js.map +1 -1
  283. package/lib/rendezvous/RendezvousFailureReason.js +2 -2
  284. package/lib/rendezvous/RendezvousFailureReason.js.map +1 -1
  285. package/lib/rendezvous/RendezvousIntent.js +1 -1
  286. package/lib/rendezvous/RendezvousIntent.js.map +1 -1
  287. package/lib/rendezvous/RendezvousTransport.js +3 -1
  288. package/lib/rendezvous/channels/MSC4108SecureChannel.js +123 -147
  289. package/lib/rendezvous/channels/MSC4108SecureChannel.js.map +1 -1
  290. package/lib/rendezvous/index.js +44 -69
  291. package/lib/rendezvous/index.js.map +1 -1
  292. package/lib/rendezvous/transports/MSC4108RendezvousSession.d.ts +1 -1
  293. package/lib/rendezvous/transports/MSC4108RendezvousSession.js +134 -152
  294. package/lib/rendezvous/transports/MSC4108RendezvousSession.js.map +1 -1
  295. package/lib/retentionPolicy.js +6 -9
  296. package/lib/retentionPolicy.js.map +1 -1
  297. package/lib/room-hierarchy.js +52 -60
  298. package/lib/room-hierarchy.js.map +1 -1
  299. package/lib/rust-crypto/CrossSigningIdentity.js +94 -104
  300. package/lib/rust-crypto/CrossSigningIdentity.js.map +1 -1
  301. package/lib/rust-crypto/DehydratedDeviceManager.js +157 -190
  302. package/lib/rust-crypto/DehydratedDeviceManager.js.map +1 -1
  303. package/lib/rust-crypto/KeyClaimManager.js +18 -22
  304. package/lib/rust-crypto/KeyClaimManager.js.map +1 -1
  305. package/lib/rust-crypto/OutgoingRequestProcessor.js +109 -139
  306. package/lib/rust-crypto/OutgoingRequestProcessor.js.map +1 -1
  307. package/lib/rust-crypto/OutgoingRequestsManager.js +66 -80
  308. package/lib/rust-crypto/OutgoingRequestsManager.js.map +1 -1
  309. package/lib/rust-crypto/PerSessionKeyBackupDownloader.d.ts +1 -1
  310. package/lib/rust-crypto/PerSessionKeyBackupDownloader.js +196 -224
  311. package/lib/rust-crypto/PerSessionKeyBackupDownloader.js.map +1 -1
  312. package/lib/rust-crypto/RoomEncryptor.js +127 -143
  313. package/lib/rust-crypto/RoomEncryptor.js.map +1 -1
  314. package/lib/rust-crypto/backup.js +453 -549
  315. package/lib/rust-crypto/backup.js.map +1 -1
  316. package/lib/rust-crypto/constants.js +1 -1
  317. package/lib/rust-crypto/constants.js.map +1 -1
  318. package/lib/rust-crypto/device-converter.js +15 -28
  319. package/lib/rust-crypto/device-converter.js.map +1 -1
  320. package/lib/rust-crypto/index.js +103 -116
  321. package/lib/rust-crypto/index.js.map +1 -1
  322. package/lib/rust-crypto/libolm_migration.js +303 -365
  323. package/lib/rust-crypto/libolm_migration.js.map +1 -1
  324. package/lib/rust-crypto/rust-crypto.d.ts +5 -1
  325. package/lib/rust-crypto/rust-crypto.d.ts.map +1 -1
  326. package/lib/rust-crypto/rust-crypto.js +1067 -1332
  327. package/lib/rust-crypto/rust-crypto.js.map +1 -1
  328. package/lib/rust-crypto/secret-storage.js +12 -25
  329. package/lib/rust-crypto/secret-storage.js.map +1 -1
  330. package/lib/rust-crypto/verification.js +137 -189
  331. package/lib/rust-crypto/verification.js.map +1 -1
  332. package/lib/scheduler.js +44 -19
  333. package/lib/scheduler.js.map +1 -1
  334. package/lib/secret-storage.js +179 -213
  335. package/lib/secret-storage.js.map +1 -1
  336. package/lib/serverCapabilities.js +6 -9
  337. package/lib/serverCapabilities.js.map +1 -1
  338. package/lib/service-types.js +1 -1
  339. package/lib/service-types.js.map +1 -1
  340. package/lib/sliding-sync-sdk.d.ts.map +1 -1
  341. package/lib/sliding-sync-sdk.js +368 -424
  342. package/lib/sliding-sync-sdk.js.map +1 -1
  343. package/lib/sliding-sync.js +135 -171
  344. package/lib/sliding-sync.js.map +1 -1
  345. package/lib/store/index.js +3 -1
  346. package/lib/store/indexeddb-backend.js +3 -1
  347. package/lib/store/indexeddb-local-backend.js +194 -253
  348. package/lib/store/indexeddb-local-backend.js.map +1 -1
  349. package/lib/store/indexeddb-remote-backend.js +33 -63
  350. package/lib/store/indexeddb-remote-backend.js.map +1 -1
  351. package/lib/store/indexeddb-store-worker.js +22 -23
  352. package/lib/store/indexeddb-store-worker.js.map +1 -1
  353. package/lib/store/indexeddb.js +44 -71
  354. package/lib/store/indexeddb.js.map +1 -1
  355. package/lib/store/local-storage-events-emitter.js +2 -2
  356. package/lib/store/local-storage-events-emitter.js.map +1 -1
  357. package/lib/store/memory.js +34 -57
  358. package/lib/store/memory.js.map +1 -1
  359. package/lib/store/stub.js +22 -35
  360. package/lib/store/stub.js.map +1 -1
  361. package/lib/sync-accumulator.js +54 -66
  362. package/lib/sync-accumulator.js.map +1 -1
  363. package/lib/sync.d.ts.map +1 -1
  364. package/lib/sync.js +905 -998
  365. package/lib/sync.js.map +1 -1
  366. package/lib/testing.js +63 -105
  367. package/lib/testing.js.map +1 -1
  368. package/lib/thread-utils.js +1 -4
  369. package/lib/thread-utils.js.map +1 -1
  370. package/lib/timeline-window.js +89 -102
  371. package/lib/timeline-window.js.map +1 -1
  372. package/lib/types.js +1 -1
  373. package/lib/types.js.map +1 -1
  374. package/lib/utils/decryptAESSecretStorageItem.js +14 -25
  375. package/lib/utils/decryptAESSecretStorageItem.js.map +1 -1
  376. package/lib/utils/encryptAESSecretStorageItem.js +27 -38
  377. package/lib/utils/encryptAESSecretStorageItem.js.map +1 -1
  378. package/lib/utils/internal/deriveKeys.js +25 -32
  379. package/lib/utils/internal/deriveKeys.js.map +1 -1
  380. package/lib/utils/roomVersion.js +1 -1
  381. package/lib/utils/roomVersion.js.map +1 -1
  382. package/lib/utils.js +83 -135
  383. package/lib/utils.js.map +1 -1
  384. package/lib/version-support.js +3 -3
  385. package/lib/version-support.js.map +1 -1
  386. package/lib/webrtc/audioContext.js +5 -6
  387. package/lib/webrtc/audioContext.js.map +1 -1
  388. package/lib/webrtc/call.js +1081 -1250
  389. package/lib/webrtc/call.js.map +1 -1
  390. package/lib/webrtc/callEventHandler.js +202 -214
  391. package/lib/webrtc/callEventHandler.js.map +1 -1
  392. package/lib/webrtc/callEventTypes.js +2 -2
  393. package/lib/webrtc/callEventTypes.js.map +1 -1
  394. package/lib/webrtc/callFeed.js +18 -20
  395. package/lib/webrtc/callFeed.js.map +1 -1
  396. package/lib/webrtc/groupCall.js +513 -602
  397. package/lib/webrtc/groupCall.js.map +1 -1
  398. package/lib/webrtc/groupCallEventHandler.js +59 -62
  399. package/lib/webrtc/groupCallEventHandler.js.map +1 -1
  400. package/lib/webrtc/mediaHandler.js +198 -232
  401. package/lib/webrtc/mediaHandler.js.map +1 -1
  402. package/lib/webrtc/stats/callFeedStatsReporter.js +16 -20
  403. package/lib/webrtc/stats/callFeedStatsReporter.js.map +1 -1
  404. package/lib/webrtc/stats/callStatsReportGatherer.js +67 -75
  405. package/lib/webrtc/stats/callStatsReportGatherer.js.map +1 -1
  406. package/lib/webrtc/stats/callStatsReportSummary.js +3 -1
  407. package/lib/webrtc/stats/connectionStats.js.map +1 -1
  408. package/lib/webrtc/stats/connectionStatsBuilder.js +2 -2
  409. package/lib/webrtc/stats/connectionStatsBuilder.js.map +1 -1
  410. package/lib/webrtc/stats/connectionStatsReportBuilder.js +20 -24
  411. package/lib/webrtc/stats/connectionStatsReportBuilder.js.map +1 -1
  412. package/lib/webrtc/stats/groupCallStats.js +6 -8
  413. package/lib/webrtc/stats/groupCallStats.js.map +1 -1
  414. package/lib/webrtc/stats/media/mediaSsrcHandler.js +7 -8
  415. package/lib/webrtc/stats/media/mediaSsrcHandler.js.map +1 -1
  416. package/lib/webrtc/stats/media/mediaTrackHandler.js +7 -9
  417. package/lib/webrtc/stats/media/mediaTrackHandler.js.map +1 -1
  418. package/lib/webrtc/stats/media/mediaTrackStats.js +3 -3
  419. package/lib/webrtc/stats/media/mediaTrackStats.js.map +1 -1
  420. package/lib/webrtc/stats/media/mediaTrackStatsHandler.js +7 -7
  421. package/lib/webrtc/stats/media/mediaTrackStatsHandler.js.map +1 -1
  422. package/lib/webrtc/stats/statsReport.js +1 -1
  423. package/lib/webrtc/stats/statsReport.js.map +1 -1
  424. package/lib/webrtc/stats/statsReportEmitter.js.map +1 -1
  425. package/lib/webrtc/stats/summaryStatsReportGatherer.js +14 -14
  426. package/lib/webrtc/stats/summaryStatsReportGatherer.js.map +1 -1
  427. package/lib/webrtc/stats/trackStatsBuilder.js +32 -34
  428. package/lib/webrtc/stats/trackStatsBuilder.js.map +1 -1
  429. package/lib/webrtc/stats/transportStats.js +3 -1
  430. package/lib/webrtc/stats/transportStatsBuilder.js +9 -9
  431. package/lib/webrtc/stats/transportStatsBuilder.js.map +1 -1
  432. package/lib/webrtc/stats/valueFormatter.js +1 -1
  433. package/lib/webrtc/stats/valueFormatter.js.map +1 -1
  434. package/package.json +18 -33
  435. package/src/@types/global.d.ts +2 -2
  436. package/src/ToDeviceMessageQueue.ts +2 -2
  437. package/src/browser-index.ts +4 -4
  438. package/src/client.ts +15 -20
  439. package/src/crypto-api/index.ts +17 -6
  440. package/src/embedded.ts +4 -6
  441. package/src/filter-component.ts +1 -0
  442. package/src/http-api/utils.ts +1 -1
  443. package/src/interactive-auth.ts +11 -5
  444. package/src/matrixrtc/LivekitTransport.ts +1 -1
  445. package/src/matrixrtc/MatrixRTCSession.ts +1 -1
  446. package/src/models/MSC3089Branch.ts +1 -1
  447. package/src/models/room-sticky-events.ts +1 -0
  448. package/src/models/room.ts +9 -11
  449. package/src/receipt-accumulator.ts +2 -0
  450. package/src/rendezvous/index.ts +1 -1
  451. package/src/rendezvous/transports/MSC4108RendezvousSession.ts +2 -2
  452. package/src/rust-crypto/PerSessionKeyBackupDownloader.ts +1 -1
  453. package/src/rust-crypto/index.ts +6 -6
  454. package/src/rust-crypto/rust-crypto.ts +31 -7
  455. package/src/rust-crypto/verification.ts +1 -1
  456. package/src/sliding-sync-sdk.ts +5 -7
  457. package/src/store/indexeddb-local-backend.ts +3 -3
  458. package/src/sync.ts +6 -8
@@ -1,6 +1,4 @@
1
- import _toArray from "@babel/runtime/helpers/toArray";
2
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
4
2
  /*
5
3
  Copyright 2025-2026 The Matrix.org Foundation C.I.C.
6
4
 
@@ -34,12 +32,11 @@ export class OutdatedKeyFilter {
34
32
  * @param item
35
33
  */
36
34
  isOutdated(membership, item) {
37
- var _this$tsBuffer$get;
38
- var mapKey = getEncryptionKeyMapKey(membership);
35
+ const mapKey = getEncryptionKeyMapKey(membership);
39
36
  if (!this.tsBuffer.has(mapKey)) {
40
37
  this.tsBuffer.set(mapKey, new Map());
41
38
  }
42
- var latestTimestamp = (_this$tsBuffer$get = this.tsBuffer.get(mapKey)) === null || _this$tsBuffer$get === void 0 ? void 0 : _this$tsBuffer$get.get(item.keyIndex);
39
+ const latestTimestamp = this.tsBuffer.get(mapKey)?.get(item.keyIndex);
43
40
  if (latestTimestamp && latestTimestamp > item.creationTS) {
44
41
  // The existing key is more recent, ignore this one
45
42
  return true;
@@ -55,11 +52,7 @@ export class OutdatedKeyFilter {
55
52
  * @throws If the format of `slotId` is invalid.
56
53
  */
57
54
  export function slotIdToDescription(slotId) {
58
- var _slotId$split = slotId.split("#"),
59
- _slotId$split2 = _toArray(_slotId$split),
60
- application = _slotId$split2[0],
61
- id = _slotId$split2[1],
62
- unexpectedAdditionalValues = _arrayLikeToArray(_slotId$split2).slice(2);
55
+ const [application, id, ...unexpectedAdditionalValues] = slotId.split("#");
63
56
  if (unexpectedAdditionalValues.length) {
64
57
  throw Error("MatrixRTC Slot IDs *must* only contain two components seperated by one '#'. Additional '#' characters detected.");
65
58
  }
@@ -73,6 +66,6 @@ export function slotIdToDescription(slotId) {
73
66
  * Converts a SlotDescription into it's slot ID format.
74
67
  */
75
68
  export function computeSlotId(slotDescription) {
76
- return "".concat(slotDescription.application, "#").concat(slotDescription.id);
69
+ return `${slotDescription.application}#${slotDescription.id}`;
77
70
  }
78
71
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["getEncryptionKeyMapKey","OutdatedKeyFilter","constructor","_defineProperty","Map","isOutdated","membership","item","_this$tsBuffer$get","mapKey","tsBuffer","has","set","latestTimestamp","get","keyIndex","creationTS","slotIdToDescription","slotId","_slotId$split","split","_slotId$split2","_toArray","application","id","unexpectedAdditionalValues","_arrayLikeToArray","slice","length","Error","computeSlotId","slotDescription","concat"],"sources":["../../src/matrixrtc/utils.ts"],"sourcesContent":["/*\nCopyright 2025-2026 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { getEncryptionKeyMapKey, type CallMembershipIdentityParts } from \"./EncryptionManager.ts\";\nimport type { InboundEncryptionSession, EncryptionKeyMapKey, SlotDescription } from \"./types.ts\";\n\n/**\n * Detects when a key for a given index is outdated.\n */\nexport class OutdatedKeyFilter {\n // Map of participantId -> keyIndex -> timestamp\n private tsBuffer: Map<EncryptionKeyMapKey, Map<number, number>> = new Map();\n\n public constructor() {}\n\n /**\n * Check if there is a recent key with the same keyId (index) and then use the creationTS to decide what to\n * do with the key. If the key received is older than the one already in the buffer, it is ignored.\n * @param participantId\n * @param item\n */\n public isOutdated(membership: CallMembershipIdentityParts, item: InboundEncryptionSession): boolean {\n const mapKey = getEncryptionKeyMapKey(membership);\n if (!this.tsBuffer.has(mapKey)) {\n this.tsBuffer.set(mapKey, new Map<number, number>());\n }\n\n const latestTimestamp = this.tsBuffer.get(mapKey)?.get(item.keyIndex);\n if (latestTimestamp && latestTimestamp > item.creationTS) {\n // The existing key is more recent, ignore this one\n return true;\n }\n this.tsBuffer.get(mapKey)!.set(item.keyIndex, item.creationTS);\n return false;\n }\n}\n\n/**\n * Converts a slot ID into it's component application and ID portions.\n * @param slotId e.g. `m.call#call_id`\n * @throws If the format of `slotId` is invalid.\n */\nexport function slotIdToDescription(slotId: string): SlotDescription {\n const [application, id, ...unexpectedAdditionalValues] = slotId.split(\"#\");\n if (unexpectedAdditionalValues.length) {\n throw Error(\n \"MatrixRTC Slot IDs *must* only contain two components seperated by one '#'. Additional '#' characters detected.\",\n );\n }\n return { application, id };\n}\n\n/**\n * Converts a SlotDescription into it's slot ID format.\n */\nexport function computeSlotId(slotDescription: SlotDescription): string {\n return `${slotDescription.application}#${slotDescription.id}`;\n}\n"],"mappings":";;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,sBAAsB,QAA0C,wBAAwB;AAGjG;AACA;AACA;AACA,OAAO,MAAMC,iBAAiB,CAAC;EAIpBC,WAAWA,CAAA,EAAG;IAHrB;IAAAC,eAAA,mBACkE,IAAIC,GAAG,CAAC,CAAC;EAErD;;EAEtB;AACJ;AACA;AACA;AACA;AACA;EACWC,UAAUA,CAACC,UAAuC,EAAEC,IAA8B,EAAW;IAAA,IAAAC,kBAAA;IAChG,IAAMC,MAAM,GAAGT,sBAAsB,CAACM,UAAU,CAAC;IACjD,IAAI,CAAC,IAAI,CAACI,QAAQ,CAACC,GAAG,CAACF,MAAM,CAAC,EAAE;MAC5B,IAAI,CAACC,QAAQ,CAACE,GAAG,CAACH,MAAM,EAAE,IAAIL,GAAG,CAAiB,CAAC,CAAC;IACxD;IAEA,IAAMS,eAAe,IAAAL,kBAAA,GAAG,IAAI,CAACE,QAAQ,CAACI,GAAG,CAACL,MAAM,CAAC,cAAAD,kBAAA,uBAAzBA,kBAAA,CAA2BM,GAAG,CAACP,IAAI,CAACQ,QAAQ,CAAC;IACrE,IAAIF,eAAe,IAAIA,eAAe,GAAGN,IAAI,CAACS,UAAU,EAAE;MACtD;MACA,OAAO,IAAI;IACf;IACA,IAAI,CAACN,QAAQ,CAACI,GAAG,CAACL,MAAM,CAAC,CAAEG,GAAG,CAACL,IAAI,CAACQ,QAAQ,EAAER,IAAI,CAACS,UAAU,CAAC;IAC9D,OAAO,KAAK;EAChB;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,mBAAmBA,CAACC,MAAc,EAAmB;EACjE,IAAAC,aAAA,GAAyDD,MAAM,CAACE,KAAK,CAAC,GAAG,CAAC;IAAAC,cAAA,GAAAC,QAAA,CAAAH,aAAA;IAAnEI,WAAW,GAAAF,cAAA;IAAEG,EAAE,GAAAH,cAAA;IAAKI,0BAA0B,GAAAC,iBAAA,CAAAL,cAAA,EAAAM,KAAA;EACrD,IAAIF,0BAA0B,CAACG,MAAM,EAAE;IACnC,MAAMC,KAAK,CACP,iHACJ,CAAC;EACL;EACA,OAAO;IAAEN,WAAW;IAAEC;EAAG,CAAC;AAC9B;;AAEA;AACA;AACA;AACA,OAAO,SAASM,aAAaA,CAACC,eAAgC,EAAU;EACpE,UAAAC,MAAA,CAAUD,eAAe,CAACR,WAAW,OAAAS,MAAA,CAAID,eAAe,CAACP,EAAE;AAC/D","ignoreList":[]}
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../../src/matrixrtc/utils.ts"],"sourcesContent":["/*\nCopyright 2025-2026 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { getEncryptionKeyMapKey, type CallMembershipIdentityParts } from \"./EncryptionManager.ts\";\nimport type { InboundEncryptionSession, EncryptionKeyMapKey, SlotDescription } from \"./types.ts\";\n\n/**\n * Detects when a key for a given index is outdated.\n */\nexport class OutdatedKeyFilter {\n // Map of participantId -> keyIndex -> timestamp\n private tsBuffer: Map<EncryptionKeyMapKey, Map<number, number>> = new Map();\n\n public constructor() {}\n\n /**\n * Check if there is a recent key with the same keyId (index) and then use the creationTS to decide what to\n * do with the key. If the key received is older than the one already in the buffer, it is ignored.\n * @param participantId\n * @param item\n */\n public isOutdated(membership: CallMembershipIdentityParts, item: InboundEncryptionSession): boolean {\n const mapKey = getEncryptionKeyMapKey(membership);\n if (!this.tsBuffer.has(mapKey)) {\n this.tsBuffer.set(mapKey, new Map<number, number>());\n }\n\n const latestTimestamp = this.tsBuffer.get(mapKey)?.get(item.keyIndex);\n if (latestTimestamp && latestTimestamp > item.creationTS) {\n // The existing key is more recent, ignore this one\n return true;\n }\n this.tsBuffer.get(mapKey)!.set(item.keyIndex, item.creationTS);\n return false;\n }\n}\n\n/**\n * Converts a slot ID into it's component application and ID portions.\n * @param slotId e.g. `m.call#call_id`\n * @throws If the format of `slotId` is invalid.\n */\nexport function slotIdToDescription(slotId: string): SlotDescription {\n const [application, id, ...unexpectedAdditionalValues] = slotId.split(\"#\");\n if (unexpectedAdditionalValues.length) {\n throw Error(\n \"MatrixRTC Slot IDs *must* only contain two components seperated by one '#'. Additional '#' characters detected.\",\n );\n }\n return { application, id };\n}\n\n/**\n * Converts a SlotDescription into it's slot ID format.\n */\nexport function computeSlotId(slotDescription: SlotDescription): string {\n return `${slotDescription.application}#${slotDescription.id}`;\n}\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS,sBAAsB,QAA0C,wBAAwB;AAGjG;AACA;AACA;AACA,OAAO,MAAM,iBAAiB,CAAC;EAIpB,WAAW,GAAG;IAHrB;IAAA,kCACkE,IAAI,GAAG,CAAC,CAAC;EAErD;;EAEtB;AACJ;AACA;AACA;AACA;AACA;EACW,UAAU,CAAC,UAAuC,EAAE,IAA8B,EAAW;IAChG,MAAM,MAAM,GAAG,sBAAsB,CAAC,UAAU,CAAC;IACjD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;MAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,CAAiB,CAAC,CAAC;IACxD;IAEA,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;IACrE,IAAI,eAAe,IAAI,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE;MACtD;MACA,OAAO,IAAI;IACf;IACA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC;IAC9D,OAAO,KAAK;EAChB;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAAS,mBAAmB,CAAC,MAAc,EAAmB;EACjE,MAAM,CAAC,WAAW,EAAE,EAAE,EAAE,GAAG,0BAA0B,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;EAC1E,IAAI,0BAA0B,CAAC,MAAM,EAAE;IACnC,MAAM,KAAK,CACP,iHACJ,CAAC;EACL;EACA,OAAO;IAAE,WAAW;IAAE;EAAG,CAAC;AAC9B;;AAEA;AACA;AACA;AACA,OAAO,SAAS,aAAa,CAAC,eAAgC,EAAU;EACpE,OAAO,GAAG,eAAe,CAAC,WAAW,IAAI,eAAe,CAAC,EAAE,EAAE;AACjE","ignoreList":[]}
@@ -1,7 +1,4 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1
+ import _objectSpread from "@babel/runtime/helpers/objectSpread2";
5
2
  /*
6
3
  Copyright 2021 The Matrix.org Foundation C.I.C.
7
4
 
@@ -36,7 +33,7 @@ export class MSC3089Branch {
36
33
  * The file ID.
37
34
  */
38
35
  get id() {
39
- var stateKey = this.indexEvent.getStateKey();
36
+ const stateKey = this.indexEvent.getStateKey();
40
37
  if (!stateKey) {
41
38
  throw new Error("State key not found for branch");
42
39
  }
@@ -54,8 +51,7 @@ export class MSC3089Branch {
54
51
  * Version for the file, one-indexed.
55
52
  */
56
53
  get version() {
57
- var _this$indexEvent$getC;
58
- return (_this$indexEvent$getC = this.indexEvent.getContent()["version"]) !== null && _this$indexEvent$getC !== void 0 ? _this$indexEvent$getC : 1;
54
+ return this.indexEvent.getContent()["version"] ?? 1;
59
55
  }
60
56
  get roomId() {
61
57
  return this.indexEvent.getRoomId();
@@ -65,14 +61,11 @@ export class MSC3089Branch {
65
61
  * Deletes the file from the tree, including all prior edits/versions.
66
62
  * @returns Promise which resolves when complete.
67
63
  */
68
- delete() {
69
- var _this = this;
70
- return _asyncToGenerator(function* () {
71
- yield _this.client.sendStateEvent(_this.roomId, UNSTABLE_MSC3089_BRANCH.name, {}, _this.id);
72
- yield _this.client.redactEvent(_this.roomId, _this.id);
73
- var nextVersion = (yield _this.getVersionHistory())[1]; // [0] will be us
74
- if (nextVersion) yield nextVersion.delete(); // implicit recursion
75
- })();
64
+ async delete() {
65
+ await this.client.sendStateEvent(this.roomId, UNSTABLE_MSC3089_BRANCH.name, {}, this.id);
66
+ await this.client.redactEvent(this.roomId, this.id);
67
+ const nextVersion = (await this.getVersionHistory())[1]; // [0] will be us
68
+ if (nextVersion) await nextVersion.delete(); // implicit recursion
76
69
  }
77
70
 
78
71
  /**
@@ -88,13 +81,10 @@ export class MSC3089Branch {
88
81
  * @param name - The new name for this file.
89
82
  * @returns Promise which resolves when complete.
90
83
  */
91
- setName(name) {
92
- var _this2 = this;
93
- return _asyncToGenerator(function* () {
94
- yield _this2.client.sendStateEvent(_this2.roomId, UNSTABLE_MSC3089_BRANCH.name, _objectSpread(_objectSpread({}, _this2.indexEvent.getContent()), {}, {
95
- name: name
96
- }), _this2.id);
97
- })();
84
+ async setName(name) {
85
+ await this.client.sendStateEvent(this.roomId, UNSTABLE_MSC3089_BRANCH.name, _objectSpread(_objectSpread({}, this.indexEvent.getContent()), {}, {
86
+ name: name
87
+ }), this.id);
98
88
  }
99
89
 
100
90
  /**
@@ -110,57 +100,48 @@ export class MSC3089Branch {
110
100
  * @param locked - True to lock the file, false otherwise.
111
101
  * @returns Promise which resolves when complete.
112
102
  */
113
- setLocked(locked) {
114
- var _this3 = this;
115
- return _asyncToGenerator(function* () {
116
- yield _this3.client.sendStateEvent(_this3.roomId, UNSTABLE_MSC3089_BRANCH.name, _objectSpread(_objectSpread({}, _this3.indexEvent.getContent()), {}, {
117
- locked: locked
118
- }), _this3.id);
119
- })();
103
+ async setLocked(locked) {
104
+ await this.client.sendStateEvent(this.roomId, UNSTABLE_MSC3089_BRANCH.name, _objectSpread(_objectSpread({}, this.indexEvent.getContent()), {}, {
105
+ locked: locked
106
+ }), this.id);
120
107
  }
121
108
 
122
109
  /**
123
110
  * Gets information about the file needed to download it.
124
111
  * @returns Information about the file.
125
112
  */
126
- getFileInfo() {
127
- var _this4 = this;
128
- return _asyncToGenerator(function* () {
129
- var event = yield _this4.getFileEvent();
130
- var file = event.getOriginalContent()["file"];
131
- var httpUrl = _this4.client.mxcUrlToHttp(file["url"]);
132
- if (!httpUrl) {
133
- throw new Error("No HTTP URL available for ".concat(file["url"]));
134
- }
135
- return {
136
- info: file,
137
- httpUrl: httpUrl
138
- };
139
- })();
113
+ async getFileInfo() {
114
+ const event = await this.getFileEvent();
115
+ const file = event.getOriginalContent()["file"];
116
+ const httpUrl = this.client.mxcUrlToHttp(file["url"]);
117
+ if (!httpUrl) {
118
+ throw new Error(`No HTTP URL available for ${file["url"]}`);
119
+ }
120
+ return {
121
+ info: file,
122
+ httpUrl: httpUrl
123
+ };
140
124
  }
141
125
 
142
126
  /**
143
127
  * Gets the event the file points to.
144
128
  * @returns Promise which resolves to the file's event.
145
129
  */
146
- getFileEvent() {
147
- var _this5 = this;
148
- return _asyncToGenerator(function* () {
149
- var room = _this5.client.getRoom(_this5.roomId);
150
- if (!room) throw new Error("Unknown room");
151
- var event = room.getUnfilteredTimelineSet().findEventById(_this5.id);
152
-
153
- // keep scrolling back if needed until we find the event or reach the start of the room:
154
- while (!event && room.getLiveTimeline().getState(EventTimeline.BACKWARDS).paginationToken) {
155
- yield _this5.client.scrollback(room, 100);
156
- event = room.getUnfilteredTimelineSet().findEventById(_this5.id);
157
- }
158
- if (!event) throw new Error("Failed to find event");
130
+ async getFileEvent() {
131
+ const room = this.client.getRoom(this.roomId);
132
+ if (!room) throw new Error("Unknown room");
133
+ let event = room.getUnfilteredTimelineSet().findEventById(this.id);
134
+
135
+ // keep scrolling back if needed until we find the event or reach the start of the room:
136
+ while (!event && room.getLiveTimeline().getState(EventTimeline.BACKWARDS).paginationToken) {
137
+ await this.client.scrollback(room, 100);
138
+ event = room.getUnfilteredTimelineSet().findEventById(this.id);
139
+ }
140
+ if (!event) throw new Error("Failed to find event");
159
141
 
160
- // Sometimes the event isn't decrypted for us, so do that.
161
- yield _this5.client.decryptEventIfNeeded(event);
162
- return event;
163
- })();
142
+ // Sometimes the event isn't decrypted for us, so do that.
143
+ await this.client.decryptEventIfNeeded(event);
144
+ return event;
164
145
  }
165
146
 
166
147
  /**
@@ -171,30 +152,27 @@ export class MSC3089Branch {
171
152
  * @param additionalContent - Optional event content fields to include in the message.
172
153
  * @returns Promise which resolves to the file event's sent response.
173
154
  */
174
- createNewVersion(name, encryptedContents, info, additionalContent) {
175
- var _this6 = this;
176
- return _asyncToGenerator(function* () {
177
- var fileEventResponse = yield _this6.directory.createFile(name, encryptedContents, info, _objectSpread(_objectSpread({}, additionalContent !== null && additionalContent !== void 0 ? additionalContent : {}), {}, {
178
- "m.new_content": true,
179
- "m.relates_to": {
180
- rel_type: RelationType.Replace,
181
- event_id: _this6.id
182
- }
183
- }));
184
-
185
- // Update the version of the new event
186
- yield _this6.client.sendStateEvent(_this6.roomId, UNSTABLE_MSC3089_BRANCH.name, {
187
- active: true,
188
- name: name,
189
- version: _this6.version + 1
190
- }, fileEventResponse["event_id"]);
191
-
192
- // Deprecate ourselves
193
- yield _this6.client.sendStateEvent(_this6.roomId, UNSTABLE_MSC3089_BRANCH.name, _objectSpread(_objectSpread({}, _this6.indexEvent.getContent()), {}, {
194
- active: false
195
- }), _this6.id);
196
- return fileEventResponse;
197
- })();
155
+ async createNewVersion(name, encryptedContents, info, additionalContent) {
156
+ const fileEventResponse = await this.directory.createFile(name, encryptedContents, info, _objectSpread(_objectSpread({}, additionalContent), {}, {
157
+ "m.new_content": true,
158
+ "m.relates_to": {
159
+ rel_type: RelationType.Replace,
160
+ event_id: this.id
161
+ }
162
+ }));
163
+
164
+ // Update the version of the new event
165
+ await this.client.sendStateEvent(this.roomId, UNSTABLE_MSC3089_BRANCH.name, {
166
+ active: true,
167
+ name: name,
168
+ version: this.version + 1
169
+ }, fileEventResponse["event_id"]);
170
+
171
+ // Deprecate ourselves
172
+ await this.client.sendStateEvent(this.roomId, UNSTABLE_MSC3089_BRANCH.name, _objectSpread(_objectSpread({}, this.indexEvent.getContent()), {}, {
173
+ active: false
174
+ }), this.id);
175
+ return fileEventResponse;
198
176
  }
199
177
 
200
178
  /**
@@ -202,39 +180,36 @@ export class MSC3089Branch {
202
180
  * @returns Promise which resolves to the file's version history, with the
203
181
  * first element being the current version and the last element being the first version.
204
182
  */
205
- getVersionHistory() {
206
- var _this7 = this;
207
- return _asyncToGenerator(function* () {
208
- var fileHistory = [];
209
- fileHistory.push(_this7); // start with ourselves
210
-
211
- var room = _this7.client.getRoom(_this7.roomId);
212
- if (!room) throw new Error("Invalid or unknown room");
213
-
214
- // Clone the timeline to reverse it, getting most-recent-first ordering, hopefully
215
- // shortening the awful loop below. Without the clone, we can unintentionally mutate
216
- // the timeline.
217
- var timelineEvents = [...room.getLiveTimeline().getEvents()].reverse();
218
-
219
- // XXX: This is a very inefficient search, but it's the best we can do with the
220
- // relations structure we have in the SDK. As of writing, it is not worth the
221
- // investment in improving the structure.
222
- var childEvent;
223
- var parentEvent = yield _this7.getFileEvent();
224
- do {
225
- childEvent = timelineEvents.find(e => e.replacingEventId() === parentEvent.getId());
226
- if (childEvent) {
227
- var branch = _this7.directory.getFile(childEvent.getId());
228
- if (branch) {
229
- fileHistory.push(branch);
230
- parentEvent = childEvent;
231
- } else {
232
- break; // prevent infinite loop
233
- }
183
+ async getVersionHistory() {
184
+ const fileHistory = [];
185
+ fileHistory.push(this); // start with ourselves
186
+
187
+ const room = this.client.getRoom(this.roomId);
188
+ if (!room) throw new Error("Invalid or unknown room");
189
+
190
+ // Clone the timeline to reverse it, getting most-recent-first ordering, hopefully
191
+ // shortening the awful loop below. Without the clone, we can unintentionally mutate
192
+ // the timeline.
193
+ const timelineEvents = [...room.getLiveTimeline().getEvents()].reverse();
194
+
195
+ // XXX: This is a very inefficient search, but it's the best we can do with the
196
+ // relations structure we have in the SDK. As of writing, it is not worth the
197
+ // investment in improving the structure.
198
+ let childEvent;
199
+ let parentEvent = await this.getFileEvent();
200
+ do {
201
+ childEvent = timelineEvents.find(e => e.replacingEventId() === parentEvent.getId());
202
+ if (childEvent) {
203
+ const branch = this.directory.getFile(childEvent.getId());
204
+ if (branch) {
205
+ fileHistory.push(branch);
206
+ parentEvent = childEvent;
207
+ } else {
208
+ break; // prevent infinite loop
234
209
  }
235
- } while (childEvent);
236
- return fileHistory;
237
- })();
210
+ }
211
+ } while (childEvent);
212
+ return fileHistory;
238
213
  }
239
214
  }
240
215
  //# sourceMappingURL=MSC3089Branch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MSC3089Branch.js","names":["RelationType","UNSTABLE_MSC3089_BRANCH","EventTimeline","MSC3089Branch","constructor","client","indexEvent","directory","id","stateKey","getStateKey","Error","isActive","getContent","version","_this$indexEvent$getC","roomId","getRoomId","delete","_this","_asyncToGenerator","sendStateEvent","name","redactEvent","nextVersion","getVersionHistory","getName","setName","_this2","_objectSpread","isLocked","setLocked","locked","_this3","getFileInfo","_this4","event","getFileEvent","file","getOriginalContent","httpUrl","mxcUrlToHttp","concat","info","_this5","room","getRoom","getUnfilteredTimelineSet","findEventById","getLiveTimeline","getState","BACKWARDS","paginationToken","scrollback","decryptEventIfNeeded","createNewVersion","encryptedContents","additionalContent","_this6","fileEventResponse","createFile","rel_type","Replace","event_id","active","_this7","fileHistory","push","timelineEvents","getEvents","reverse","childEvent","parentEvent","find","e","replacingEventId","getId","branch","getFile"],"sources":["../../src/models/MSC3089Branch.ts"],"sourcesContent":["/*\nCopyright 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { type MatrixClient } from \"../client.ts\";\nimport { RelationType, UNSTABLE_MSC3089_BRANCH } from \"../@types/event.ts\";\nimport { type IContent, type MatrixEvent } from \"./event.ts\";\nimport { type MSC3089TreeSpace } from \"./MSC3089TreeSpace.ts\";\nimport { EventTimeline } from \"./event-timeline.ts\";\nimport { type FileType } from \"../http-api/index.ts\";\nimport type { ISendEventResponse } from \"../@types/requests.ts\";\nimport { type EncryptedFile } from \"../@types/media.ts\";\n\nexport interface MSC3089EventContent {\n active?: boolean;\n name?: string;\n locked?: boolean;\n version?: number;\n}\n\nexport interface MSC3089EventContent {\n active?: boolean;\n name?: string;\n locked?: boolean;\n version?: number;\n}\n\n/**\n * Represents a [MSC3089](https://github.com/matrix-org/matrix-doc/pull/3089) branch - a reference\n * to a file (leaf) in the tree. Note that this is UNSTABLE and subject to breaking changes\n * without notice.\n */\nexport class MSC3089Branch {\n public constructor(\n private client: MatrixClient,\n public readonly indexEvent: MatrixEvent,\n public readonly directory: MSC3089TreeSpace,\n ) {\n // Nothing to do\n }\n\n /**\n * The file ID.\n */\n public get id(): string {\n const stateKey = this.indexEvent.getStateKey();\n if (!stateKey) {\n throw new Error(\"State key not found for branch\");\n }\n return stateKey;\n }\n\n /**\n * Whether this branch is active/valid.\n */\n public get isActive(): boolean {\n return this.indexEvent.getContent()[\"active\"] === true;\n }\n\n /**\n * Version for the file, one-indexed.\n */\n public get version(): number {\n return this.indexEvent.getContent()[\"version\"] ?? 1;\n }\n\n private get roomId(): string {\n return this.indexEvent.getRoomId()!;\n }\n\n /**\n * Deletes the file from the tree, including all prior edits/versions.\n * @returns Promise which resolves when complete.\n */\n public async delete(): Promise<void> {\n await this.client.sendStateEvent(this.roomId, UNSTABLE_MSC3089_BRANCH.name, {}, this.id);\n await this.client.redactEvent(this.roomId, this.id);\n\n const nextVersion = (await this.getVersionHistory())[1]; // [0] will be us\n if (nextVersion) await nextVersion.delete(); // implicit recursion\n }\n\n /**\n * Gets the name for this file.\n * @returns The name, or \"Unnamed File\" if unknown.\n */\n public getName(): string {\n return this.indexEvent.getContent()[\"name\"] || \"Unnamed File\";\n }\n\n /**\n * Sets the name for this file.\n * @param name - The new name for this file.\n * @returns Promise which resolves when complete.\n */\n public async setName(name: string): Promise<void> {\n await this.client.sendStateEvent(\n this.roomId,\n UNSTABLE_MSC3089_BRANCH.name,\n {\n ...this.indexEvent.getContent(),\n name: name,\n },\n this.id,\n );\n }\n\n /**\n * Gets whether or not a file is locked.\n * @returns True if locked, false otherwise.\n */\n public isLocked(): boolean {\n return this.indexEvent.getContent()[\"locked\"] || false;\n }\n\n /**\n * Sets a file as locked or unlocked.\n * @param locked - True to lock the file, false otherwise.\n * @returns Promise which resolves when complete.\n */\n public async setLocked(locked: boolean): Promise<void> {\n await this.client.sendStateEvent(\n this.roomId,\n UNSTABLE_MSC3089_BRANCH.name,\n {\n ...this.indexEvent.getContent(),\n locked: locked,\n },\n this.id,\n );\n }\n\n /**\n * Gets information about the file needed to download it.\n * @returns Information about the file.\n */\n public async getFileInfo(): Promise<{ info: EncryptedFile; httpUrl: string }> {\n const event = await this.getFileEvent();\n\n const file = event.getOriginalContent()[\"file\"];\n const httpUrl = this.client.mxcUrlToHttp(file[\"url\"]);\n\n if (!httpUrl) {\n throw new Error(`No HTTP URL available for ${file[\"url\"]}`);\n }\n\n return { info: file, httpUrl: httpUrl };\n }\n\n /**\n * Gets the event the file points to.\n * @returns Promise which resolves to the file's event.\n */\n public async getFileEvent(): Promise<MatrixEvent> {\n const room = this.client.getRoom(this.roomId);\n if (!room) throw new Error(\"Unknown room\");\n\n let event: MatrixEvent | undefined = room.getUnfilteredTimelineSet().findEventById(this.id);\n\n // keep scrolling back if needed until we find the event or reach the start of the room:\n while (!event && room.getLiveTimeline().getState(EventTimeline.BACKWARDS)!.paginationToken) {\n await this.client.scrollback(room, 100);\n event = room.getUnfilteredTimelineSet().findEventById(this.id);\n }\n\n if (!event) throw new Error(\"Failed to find event\");\n\n // Sometimes the event isn't decrypted for us, so do that.\n await this.client.decryptEventIfNeeded(event);\n\n return event;\n }\n\n /**\n * Creates a new version of this file with contents in a type that is compatible with MatrixClient.uploadContent().\n * @param name - The name of the file.\n * @param encryptedContents - The encrypted contents.\n * @param info - The encrypted file information.\n * @param additionalContent - Optional event content fields to include in the message.\n * @returns Promise which resolves to the file event's sent response.\n */\n public async createNewVersion(\n name: string,\n encryptedContents: FileType,\n info: EncryptedFile,\n additionalContent?: IContent,\n ): Promise<ISendEventResponse> {\n const fileEventResponse = await this.directory.createFile(name, encryptedContents, info, {\n ...(additionalContent ?? {}),\n \"m.new_content\": true,\n \"m.relates_to\": {\n rel_type: RelationType.Replace,\n event_id: this.id,\n },\n });\n\n // Update the version of the new event\n await this.client.sendStateEvent(\n this.roomId,\n UNSTABLE_MSC3089_BRANCH.name,\n {\n active: true,\n name: name,\n version: this.version + 1,\n },\n fileEventResponse[\"event_id\"],\n );\n\n // Deprecate ourselves\n await this.client.sendStateEvent(\n this.roomId,\n UNSTABLE_MSC3089_BRANCH.name,\n {\n ...this.indexEvent.getContent(),\n active: false,\n },\n this.id,\n );\n\n return fileEventResponse;\n }\n\n /**\n * Gets the file's version history, starting at this file.\n * @returns Promise which resolves to the file's version history, with the\n * first element being the current version and the last element being the first version.\n */\n public async getVersionHistory(): Promise<MSC3089Branch[]> {\n const fileHistory: MSC3089Branch[] = [];\n fileHistory.push(this); // start with ourselves\n\n const room = this.client.getRoom(this.roomId);\n if (!room) throw new Error(\"Invalid or unknown room\");\n\n // Clone the timeline to reverse it, getting most-recent-first ordering, hopefully\n // shortening the awful loop below. Without the clone, we can unintentionally mutate\n // the timeline.\n const timelineEvents = [...room.getLiveTimeline().getEvents()].reverse();\n\n // XXX: This is a very inefficient search, but it's the best we can do with the\n // relations structure we have in the SDK. As of writing, it is not worth the\n // investment in improving the structure.\n let childEvent: MatrixEvent | undefined;\n let parentEvent = await this.getFileEvent();\n do {\n childEvent = timelineEvents.find((e) => e.replacingEventId() === parentEvent.getId());\n if (childEvent) {\n const branch = this.directory.getFile(childEvent.getId()!);\n if (branch) {\n fileHistory.push(branch);\n parentEvent = childEvent;\n } else {\n break; // prevent infinite loop\n }\n }\n } while (childEvent);\n\n return fileHistory;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"MSC3089Branch.js","names":[],"sources":["../../src/models/MSC3089Branch.ts"],"sourcesContent":["/*\nCopyright 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { type MatrixClient } from \"../client.ts\";\nimport { RelationType, UNSTABLE_MSC3089_BRANCH } from \"../@types/event.ts\";\nimport { type IContent, type MatrixEvent } from \"./event.ts\";\nimport { type MSC3089TreeSpace } from \"./MSC3089TreeSpace.ts\";\nimport { EventTimeline } from \"./event-timeline.ts\";\nimport { type FileType } from \"../http-api/index.ts\";\nimport type { ISendEventResponse } from \"../@types/requests.ts\";\nimport { type EncryptedFile } from \"../@types/media.ts\";\n\nexport interface MSC3089EventContent {\n active?: boolean;\n name?: string;\n locked?: boolean;\n version?: number;\n}\n\nexport interface MSC3089EventContent {\n active?: boolean;\n name?: string;\n locked?: boolean;\n version?: number;\n}\n\n/**\n * Represents a [MSC3089](https://github.com/matrix-org/matrix-doc/pull/3089) branch - a reference\n * to a file (leaf) in the tree. Note that this is UNSTABLE and subject to breaking changes\n * without notice.\n */\nexport class MSC3089Branch {\n public constructor(\n private client: MatrixClient,\n public readonly indexEvent: MatrixEvent,\n public readonly directory: MSC3089TreeSpace,\n ) {\n // Nothing to do\n }\n\n /**\n * The file ID.\n */\n public get id(): string {\n const stateKey = this.indexEvent.getStateKey();\n if (!stateKey) {\n throw new Error(\"State key not found for branch\");\n }\n return stateKey;\n }\n\n /**\n * Whether this branch is active/valid.\n */\n public get isActive(): boolean {\n return this.indexEvent.getContent()[\"active\"] === true;\n }\n\n /**\n * Version for the file, one-indexed.\n */\n public get version(): number {\n return this.indexEvent.getContent()[\"version\"] ?? 1;\n }\n\n private get roomId(): string {\n return this.indexEvent.getRoomId()!;\n }\n\n /**\n * Deletes the file from the tree, including all prior edits/versions.\n * @returns Promise which resolves when complete.\n */\n public async delete(): Promise<void> {\n await this.client.sendStateEvent(this.roomId, UNSTABLE_MSC3089_BRANCH.name, {}, this.id);\n await this.client.redactEvent(this.roomId, this.id);\n\n const nextVersion = (await this.getVersionHistory())[1]; // [0] will be us\n if (nextVersion) await nextVersion.delete(); // implicit recursion\n }\n\n /**\n * Gets the name for this file.\n * @returns The name, or \"Unnamed File\" if unknown.\n */\n public getName(): string {\n return this.indexEvent.getContent()[\"name\"] || \"Unnamed File\";\n }\n\n /**\n * Sets the name for this file.\n * @param name - The new name for this file.\n * @returns Promise which resolves when complete.\n */\n public async setName(name: string): Promise<void> {\n await this.client.sendStateEvent(\n this.roomId,\n UNSTABLE_MSC3089_BRANCH.name,\n {\n ...this.indexEvent.getContent(),\n name: name,\n },\n this.id,\n );\n }\n\n /**\n * Gets whether or not a file is locked.\n * @returns True if locked, false otherwise.\n */\n public isLocked(): boolean {\n return this.indexEvent.getContent()[\"locked\"] || false;\n }\n\n /**\n * Sets a file as locked or unlocked.\n * @param locked - True to lock the file, false otherwise.\n * @returns Promise which resolves when complete.\n */\n public async setLocked(locked: boolean): Promise<void> {\n await this.client.sendStateEvent(\n this.roomId,\n UNSTABLE_MSC3089_BRANCH.name,\n {\n ...this.indexEvent.getContent(),\n locked: locked,\n },\n this.id,\n );\n }\n\n /**\n * Gets information about the file needed to download it.\n * @returns Information about the file.\n */\n public async getFileInfo(): Promise<{ info: EncryptedFile; httpUrl: string }> {\n const event = await this.getFileEvent();\n\n const file = event.getOriginalContent()[\"file\"];\n const httpUrl = this.client.mxcUrlToHttp(file[\"url\"]);\n\n if (!httpUrl) {\n throw new Error(`No HTTP URL available for ${file[\"url\"]}`);\n }\n\n return { info: file, httpUrl: httpUrl };\n }\n\n /**\n * Gets the event the file points to.\n * @returns Promise which resolves to the file's event.\n */\n public async getFileEvent(): Promise<MatrixEvent> {\n const room = this.client.getRoom(this.roomId);\n if (!room) throw new Error(\"Unknown room\");\n\n let event: MatrixEvent | undefined = room.getUnfilteredTimelineSet().findEventById(this.id);\n\n // keep scrolling back if needed until we find the event or reach the start of the room:\n while (!event && room.getLiveTimeline().getState(EventTimeline.BACKWARDS)!.paginationToken) {\n await this.client.scrollback(room, 100);\n event = room.getUnfilteredTimelineSet().findEventById(this.id);\n }\n\n if (!event) throw new Error(\"Failed to find event\");\n\n // Sometimes the event isn't decrypted for us, so do that.\n await this.client.decryptEventIfNeeded(event);\n\n return event;\n }\n\n /**\n * Creates a new version of this file with contents in a type that is compatible with MatrixClient.uploadContent().\n * @param name - The name of the file.\n * @param encryptedContents - The encrypted contents.\n * @param info - The encrypted file information.\n * @param additionalContent - Optional event content fields to include in the message.\n * @returns Promise which resolves to the file event's sent response.\n */\n public async createNewVersion(\n name: string,\n encryptedContents: FileType,\n info: EncryptedFile,\n additionalContent?: IContent,\n ): Promise<ISendEventResponse> {\n const fileEventResponse = await this.directory.createFile(name, encryptedContents, info, {\n ...additionalContent,\n \"m.new_content\": true,\n \"m.relates_to\": {\n rel_type: RelationType.Replace,\n event_id: this.id,\n },\n });\n\n // Update the version of the new event\n await this.client.sendStateEvent(\n this.roomId,\n UNSTABLE_MSC3089_BRANCH.name,\n {\n active: true,\n name: name,\n version: this.version + 1,\n },\n fileEventResponse[\"event_id\"],\n );\n\n // Deprecate ourselves\n await this.client.sendStateEvent(\n this.roomId,\n UNSTABLE_MSC3089_BRANCH.name,\n {\n ...this.indexEvent.getContent(),\n active: false,\n },\n this.id,\n );\n\n return fileEventResponse;\n }\n\n /**\n * Gets the file's version history, starting at this file.\n * @returns Promise which resolves to the file's version history, with the\n * first element being the current version and the last element being the first version.\n */\n public async getVersionHistory(): Promise<MSC3089Branch[]> {\n const fileHistory: MSC3089Branch[] = [];\n fileHistory.push(this); // start with ourselves\n\n const room = this.client.getRoom(this.roomId);\n if (!room) throw new Error(\"Invalid or unknown room\");\n\n // Clone the timeline to reverse it, getting most-recent-first ordering, hopefully\n // shortening the awful loop below. Without the clone, we can unintentionally mutate\n // the timeline.\n const timelineEvents = [...room.getLiveTimeline().getEvents()].reverse();\n\n // XXX: This is a very inefficient search, but it's the best we can do with the\n // relations structure we have in the SDK. As of writing, it is not worth the\n // investment in improving the structure.\n let childEvent: MatrixEvent | undefined;\n let parentEvent = await this.getFileEvent();\n do {\n childEvent = timelineEvents.find((e) => e.replacingEventId() === parentEvent.getId());\n if (childEvent) {\n const branch = this.directory.getFile(childEvent.getId()!);\n if (branch) {\n fileHistory.push(branch);\n parentEvent = childEvent;\n } else {\n break; // prevent infinite loop\n }\n }\n } while (childEvent);\n\n return fileHistory;\n }\n}\n"],"mappings":"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","ignoreList":[]}