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 +1 @@
1
- {"version":3,"file":"MSC4108RendezvousSession.js","names":["logger","sleep","ClientRendezvousFailureReason","MSC4108FailureReason","Method","ClientPrefix","MSC4108RendezvousSession","constructor","_ref","fetchFn","onFailure","url","client","fallbackRzServer","_defineProperty","ready","_ready","cancelled","_cancelled","fetch","resource","options","globalThis","getPostEndpoint","_this","_asyncToGenerator","doesServerSupportUnstableFeature","http","getUrl","undefined","Unstable","toString","err","warn","send","data","_this2","_this2$url","_res$headers$get","method","Put","Post","uri","Error","headers","etag","receive","info","concat","res","body","redirect","status","cancel","Unknown","get","expires","expiresTimer","clearTimeout","expiresAt","Date","setTimeout","Expired","getTime","now","json","_this3","_poll$headers$get","poll","Get","ETagMissing","text","reason","_this4","_this4$onFailure","call","UserDeclined","UserCancelled","close","_this5","Delete","e"],"sources":["../../../src/rendezvous/transports/MSC4108RendezvousSession.ts"],"sourcesContent":["/*\nCopyright 2024 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 { logger } from \"../../logger.ts\";\nimport { sleep } from \"../../utils.ts\";\nimport { ClientRendezvousFailureReason, MSC4108FailureReason, type RendezvousFailureListener } from \"../index.ts\";\nimport { type MatrixClient, Method } from \"../../matrix.ts\";\nimport { ClientPrefix } from \"../../http-api/index.ts\";\n\n/**\n * Prototype of the unstable [MSC4108](https://github.com/matrix-org/matrix-spec-proposals/pull/4108)\n * insecure rendezvous session protocol.\n * @experimental Note that this is UNSTABLE and may have breaking changes without notice.\n */\nexport class MSC4108RendezvousSession {\n public url?: string;\n private readonly client?: MatrixClient;\n private readonly fallbackRzServer?: string;\n private readonly fetchFn?: typeof globalThis.fetch;\n public onFailure?: RendezvousFailureListener;\n private etag?: string;\n private expiresAt?: Date;\n private expiresTimer?: ReturnType<typeof setTimeout>;\n private _cancelled = false;\n private _ready = false;\n\n public constructor({\n onFailure,\n url,\n fetchFn,\n }: {\n fetchFn?: typeof globalThis.fetch;\n onFailure?: RendezvousFailureListener;\n url: string;\n });\n public constructor({\n onFailure,\n client,\n fallbackRzServer,\n fetchFn,\n }: {\n fetchFn?: typeof globalThis.fetch;\n onFailure?: RendezvousFailureListener;\n client?: MatrixClient;\n fallbackRzServer?: string;\n });\n public constructor({\n fetchFn,\n onFailure,\n url,\n client,\n fallbackRzServer,\n }: {\n fetchFn?: typeof globalThis.fetch;\n onFailure?: RendezvousFailureListener;\n url?: string;\n client?: MatrixClient;\n fallbackRzServer?: string;\n }) {\n this.fetchFn = fetchFn;\n this.onFailure = onFailure;\n this.client = client;\n this.fallbackRzServer = fallbackRzServer;\n this.url = url;\n }\n\n /**\n * Returns whether the channel is ready to be used.\n */\n public get ready(): boolean {\n return this._ready;\n }\n\n /**\n * Returns whether the channel has been cancelled.\n */\n public get cancelled(): boolean {\n return this._cancelled;\n }\n\n private fetch(resource: URL | string, options?: RequestInit): ReturnType<typeof globalThis.fetch> {\n if (this.fetchFn) {\n return this.fetchFn(resource, options);\n }\n return globalThis.fetch(resource, options);\n }\n\n private async getPostEndpoint(): Promise<string | undefined> {\n if (this.client) {\n try {\n if (await this.client.doesServerSupportUnstableFeature(\"org.matrix.msc4108\")) {\n return this.client.http\n .getUrl(\"/org.matrix.msc4108/rendezvous\", undefined, ClientPrefix.Unstable)\n .toString();\n }\n } catch (err) {\n logger.warn(\"Failed to get unstable features\", err);\n }\n }\n\n return this.fallbackRzServer;\n }\n\n /**\n * Sends data via the rendezvous channel.\n * @param data the payload to send\n */\n public async send(data: string): Promise<void> {\n if (this._cancelled) {\n return;\n }\n const method = this.url ? Method.Put : Method.Post;\n const uri = this.url ?? (await this.getPostEndpoint());\n\n if (!uri) {\n throw new Error(\"Invalid rendezvous URI\");\n }\n\n const headers: Record<string, string> = { \"content-type\": \"text/plain\" };\n\n // if we didn't create the rendezvous channel, we need to fetch the first etag if needed\n if (!this.etag && this.url) {\n await this.receive();\n }\n\n if (this.etag) {\n headers[\"if-match\"] = this.etag;\n }\n\n logger.info(`=> ${method} ${uri} with ${data} if-match: ${this.etag}`);\n\n const res = await this.fetch(uri, { method, headers, body: data, redirect: \"follow\" });\n if (res.status === 404) {\n return this.cancel(ClientRendezvousFailureReason.Unknown);\n }\n this.etag = res.headers.get(\"etag\") ?? undefined;\n\n logger.info(`Received etag: ${this.etag}`);\n\n if (method === Method.Post) {\n const expires = res.headers.get(\"expires\");\n if (expires) {\n if (this.expiresTimer) {\n clearTimeout(this.expiresTimer);\n this.expiresTimer = undefined;\n }\n this.expiresAt = new Date(expires);\n this.expiresTimer = setTimeout(() => {\n this.expiresTimer = undefined;\n this.cancel(ClientRendezvousFailureReason.Expired);\n }, this.expiresAt.getTime() - Date.now());\n }\n // MSC4108: we expect a JSON response with a rendezvous URL\n const json = await res.json();\n if (typeof json.url !== \"string\") {\n throw new Error(\"No rendezvous URL given\");\n }\n this.url = json.url;\n this._ready = true;\n }\n }\n\n /**\n * Receives data from the rendezvous channel.\n * @return the returned promise won't resolve until new data is acquired or the channel is closed either by the server or the other party.\n */\n public async receive(): Promise<string | undefined> {\n if (!this.url) {\n throw new Error(\"Rendezvous not set up\");\n }\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (this._cancelled) {\n return undefined;\n }\n\n const headers: Record<string, string> = {};\n if (this.etag) {\n headers[\"if-none-match\"] = this.etag;\n }\n\n logger.info(`=> GET ${this.url} if-none-match: ${this.etag}`);\n const poll = await this.fetch(this.url, { method: Method.Get, headers });\n\n if (poll.status === 404) {\n await this.cancel(ClientRendezvousFailureReason.Unknown);\n return undefined;\n }\n\n // rely on server expiring the channel rather than checking ourselves\n\n const etag = poll.headers.get(\"etag\") ?? undefined;\n if (poll.headers.get(\"content-type\") !== \"text/plain\") {\n this.etag = etag;\n } else if (poll.status === 200) {\n if (!etag) {\n // Some browsers & extensions block the ETag header for anti-tracking purposes\n // We try and detect this so the client can give the user a somewhat helpful message\n await this.cancel(ClientRendezvousFailureReason.ETagMissing);\n return undefined;\n }\n\n this.etag = etag;\n const text = await poll.text();\n logger.info(`Received: ${text} with etag ${this.etag}`);\n return text;\n }\n await sleep(1000);\n }\n }\n\n /**\n * Cancels the rendezvous channel.\n * If the reason is user_declined or user_cancelled then the channel will also be closed.\n * @param reason the reason to cancel with\n */\n public async cancel(reason: MSC4108FailureReason | ClientRendezvousFailureReason): Promise<void> {\n if (this._cancelled) return;\n if (this.expiresTimer) {\n clearTimeout(this.expiresTimer);\n this.expiresTimer = undefined;\n }\n\n if (\n reason === ClientRendezvousFailureReason.Unknown &&\n this.expiresAt &&\n this.expiresAt.getTime() < Date.now()\n ) {\n reason = ClientRendezvousFailureReason.Expired;\n }\n\n this._cancelled = true;\n this._ready = false;\n this.onFailure?.(reason);\n\n if (reason === ClientRendezvousFailureReason.UserDeclined || reason === MSC4108FailureReason.UserCancelled) {\n await this.close();\n }\n }\n\n /**\n * Closes the rendezvous channel.\n */\n public async close(): Promise<void> {\n if (this.expiresTimer) {\n clearTimeout(this.expiresTimer);\n this.expiresTimer = undefined;\n }\n\n if (!this.url) return;\n try {\n const method = Method.Delete;\n logger.info(`=> ${method} ${this.url}`);\n await this.fetch(this.url, { method });\n } catch (e) {\n logger.warn(e);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"MSC4108RendezvousSession.js","names":[],"sources":["../../../src/rendezvous/transports/MSC4108RendezvousSession.ts"],"sourcesContent":["/*\nCopyright 2024 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 { logger } from \"../../logger.ts\";\nimport { sleep } from \"../../utils.ts\";\nimport { ClientRendezvousFailureReason, MSC4108FailureReason, type RendezvousFailureListener } from \"../index.ts\";\nimport { type MatrixClient, Method } from \"../../matrix.ts\";\nimport { ClientPrefix } from \"../../http-api/index.ts\";\n\n/**\n * Prototype of the unstable [MSC4108](https://github.com/matrix-org/matrix-spec-proposals/pull/4108)\n * insecure rendezvous session protocol.\n * @experimental Note that this is UNSTABLE and may have breaking changes without notice.\n */\nexport class MSC4108RendezvousSession {\n public url?: string;\n private readonly client?: MatrixClient;\n private readonly fallbackRzServer?: string;\n private readonly fetchFn?: typeof globalThis.fetch;\n public onFailure?: RendezvousFailureListener;\n private etag?: string;\n private expiresAt?: Date;\n private expiresTimer?: ReturnType<typeof setTimeout>;\n private _cancelled = false;\n private _ready = false;\n\n public constructor({\n onFailure,\n url,\n fetchFn,\n }: {\n fetchFn?: typeof globalThis.fetch;\n onFailure?: RendezvousFailureListener;\n url: string;\n });\n public constructor({\n onFailure,\n client,\n fallbackRzServer,\n fetchFn,\n }: {\n fetchFn?: typeof globalThis.fetch;\n onFailure?: RendezvousFailureListener;\n client?: MatrixClient;\n fallbackRzServer?: string;\n });\n public constructor({\n fetchFn,\n onFailure,\n url,\n client,\n fallbackRzServer,\n }: {\n fetchFn?: typeof globalThis.fetch;\n onFailure?: RendezvousFailureListener;\n url?: string;\n client?: MatrixClient;\n fallbackRzServer?: string;\n }) {\n this.fetchFn = fetchFn;\n this.onFailure = onFailure;\n this.client = client;\n this.fallbackRzServer = fallbackRzServer;\n this.url = url;\n }\n\n /**\n * Returns whether the channel is ready to be used.\n */\n public get ready(): boolean {\n return this._ready;\n }\n\n /**\n * Returns whether the channel has been cancelled.\n */\n public get cancelled(): boolean {\n return this._cancelled;\n }\n\n private fetch(resource: URL | string, options?: RequestInit): ReturnType<typeof globalThis.fetch> {\n if (this.fetchFn) {\n return this.fetchFn(resource, options);\n }\n return globalThis.fetch(resource, options);\n }\n\n private async getPostEndpoint(): Promise<string | undefined> {\n if (this.client) {\n try {\n if (await this.client.doesServerSupportUnstableFeature(\"org.matrix.msc4108\")) {\n return this.client.http\n .getUrl(\"/org.matrix.msc4108/rendezvous\", undefined, ClientPrefix.Unstable)\n .toString();\n }\n } catch (err) {\n logger.warn(\"Failed to get unstable features\", err);\n }\n }\n\n return this.fallbackRzServer;\n }\n\n /**\n * Sends data via the rendezvous channel.\n * @param data the payload to send\n */\n public async send(data: string): Promise<void> {\n if (this._cancelled) {\n return;\n }\n const method = this.url ? Method.Put : Method.Post;\n const uri = this.url ?? (await this.getPostEndpoint());\n\n if (!uri) {\n throw new Error(\"Invalid rendezvous URI\");\n }\n\n const headers: Record<string, string> = { \"content-type\": \"text/plain\" };\n\n // if we didn't create the rendezvous channel, we need to fetch the first etag if needed\n if (!this.etag && this.url) {\n await this.receive();\n }\n\n if (this.etag) {\n headers[\"if-match\"] = this.etag;\n }\n\n logger.info(`=> ${method} ${uri} with ${data} if-match: ${this.etag}`);\n\n const res = await this.fetch(uri, { method, headers, body: data, redirect: \"follow\" });\n if (res.status === 404) {\n return this.cancel(ClientRendezvousFailureReason.Unknown);\n }\n this.etag = res.headers.get(\"etag\") ?? undefined;\n\n logger.info(`Received etag: ${this.etag}`);\n\n if (method === Method.Post) {\n const expires = res.headers.get(\"expires\");\n if (expires) {\n if (this.expiresTimer) {\n clearTimeout(this.expiresTimer);\n this.expiresTimer = undefined;\n }\n this.expiresAt = new Date(expires);\n this.expiresTimer = setTimeout(() => {\n this.expiresTimer = undefined;\n void this.cancel(ClientRendezvousFailureReason.Expired);\n }, this.expiresAt.getTime() - Date.now());\n }\n // MSC4108: we expect a JSON response with a rendezvous URL\n const json = await res.json();\n if (typeof json.url !== \"string\") {\n throw new Error(\"No rendezvous URL given\");\n }\n this.url = json.url;\n this._ready = true;\n }\n }\n\n /**\n * Receives data from the rendezvous channel.\n * @returns the returned promise won't resolve until new data is acquired or the channel is closed either by the server or the other party.\n */\n public async receive(): Promise<string | undefined> {\n if (!this.url) {\n throw new Error(\"Rendezvous not set up\");\n }\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (this._cancelled) {\n return undefined;\n }\n\n const headers: Record<string, string> = {};\n if (this.etag) {\n headers[\"if-none-match\"] = this.etag;\n }\n\n logger.info(`=> GET ${this.url} if-none-match: ${this.etag}`);\n const poll = await this.fetch(this.url, { method: Method.Get, headers });\n\n if (poll.status === 404) {\n await this.cancel(ClientRendezvousFailureReason.Unknown);\n return undefined;\n }\n\n // rely on server expiring the channel rather than checking ourselves\n\n const etag = poll.headers.get(\"etag\") ?? undefined;\n if (poll.headers.get(\"content-type\") !== \"text/plain\") {\n this.etag = etag;\n } else if (poll.status === 200) {\n if (!etag) {\n // Some browsers & extensions block the ETag header for anti-tracking purposes\n // We try and detect this so the client can give the user a somewhat helpful message\n await this.cancel(ClientRendezvousFailureReason.ETagMissing);\n return undefined;\n }\n\n this.etag = etag;\n const text = await poll.text();\n logger.info(`Received: ${text} with etag ${this.etag}`);\n return text;\n }\n await sleep(1000);\n }\n }\n\n /**\n * Cancels the rendezvous channel.\n * If the reason is user_declined or user_cancelled then the channel will also be closed.\n * @param reason the reason to cancel with\n */\n public async cancel(reason: MSC4108FailureReason | ClientRendezvousFailureReason): Promise<void> {\n if (this._cancelled) return;\n if (this.expiresTimer) {\n clearTimeout(this.expiresTimer);\n this.expiresTimer = undefined;\n }\n\n if (\n reason === ClientRendezvousFailureReason.Unknown &&\n this.expiresAt &&\n this.expiresAt.getTime() < Date.now()\n ) {\n reason = ClientRendezvousFailureReason.Expired;\n }\n\n this._cancelled = true;\n this._ready = false;\n this.onFailure?.(reason);\n\n if (reason === ClientRendezvousFailureReason.UserDeclined || reason === MSC4108FailureReason.UserCancelled) {\n await this.close();\n }\n }\n\n /**\n * Closes the rendezvous channel.\n */\n public async close(): Promise<void> {\n if (this.expiresTimer) {\n clearTimeout(this.expiresTimer);\n this.expiresTimer = undefined;\n }\n\n if (!this.url) return;\n try {\n const method = Method.Delete;\n logger.info(`=> ${method} ${this.url}`);\n await this.fetch(this.url, { method });\n } catch (e) {\n logger.warn(e);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,3 @@
1
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
2
  /*
4
3
  Copyright 2024 The Matrix.org Foundation C.I.C.
@@ -23,20 +22,18 @@ import { ClientPrefix, Method } from "./http-api/index.js";
23
22
  */
24
23
  export class RetentionPolicyService extends CapabilityPoller {
25
24
  constructor(logger, http) {
26
- var _this;
27
25
  super(logger, http, "retention policy");
28
- _this = this;
29
26
  /**
30
27
  * Fetches the latest server capabilities from the homeserver and returns them, or rejects
31
28
  * on failure.
32
29
  */
33
- _defineProperty(this, "fetch", /*#__PURE__*/_asyncToGenerator(function* () {
34
- var resp = yield _this.http.authedRequest(Method.Get, "/retention/configuration", undefined, undefined, {
35
- prefix: "".concat(ClientPrefix.Unstable, "/org.matrix.msc1763")
30
+ _defineProperty(this, "fetch", async () => {
31
+ const resp = await this.http.authedRequest(Method.Get, "/retention/configuration", undefined, undefined, {
32
+ prefix: `${ClientPrefix.Unstable}/org.matrix.msc1763`
36
33
  });
37
- _this.cached = resp;
38
- return _this.cached;
39
- }));
34
+ this.cached = resp;
35
+ return this.cached;
36
+ });
40
37
  }
41
38
  }
42
39
  //# sourceMappingURL=retentionPolicy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"retentionPolicy.js","names":["CapabilityPoller","ClientPrefix","Method","RetentionPolicyService","constructor","logger","http","_this","this","_defineProperty","_asyncToGenerator","resp","authedRequest","Get","undefined","prefix","concat","Unstable","cached"],"sources":["../src/retentionPolicy.ts"],"sourcesContent":["/*\nCopyright 2024 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 { CapabilityPoller } from \"./capabilityPoller.ts\";\nimport { ClientPrefix, type IHttpOpts, type MatrixHttpApi, Method } from \"./http-api/index.ts\";\nimport type { Logger } from \"./logger.ts\";\n\nexport interface RetentionConfigurationResponse {\n policies?: Record<\n string,\n {\n max_lifetime?: number;\n min_lifetime?: number;\n }\n >;\n limits?: {\n min_lifetime?: {\n min?: number;\n max?: number;\n };\n max_lifetime?: {\n min?: number;\n max?: number;\n };\n };\n}\n\n/**\n * Manages storing and periodically refreshing the server capabilities.\n */\nexport class RetentionPolicyService extends CapabilityPoller<RetentionConfigurationResponse> {\n public constructor(logger: Logger, http: MatrixHttpApi<IHttpOpts & { onlyData: true }>) {\n super(logger, http, \"retention policy\");\n }\n /**\n * Fetches the latest server capabilities from the homeserver and returns them, or rejects\n * on failure.\n */\n public fetch = async (): Promise<RetentionConfigurationResponse> => {\n const resp = await this.http.authedRequest<RetentionConfigurationResponse>(\n Method.Get,\n \"/retention/configuration\",\n undefined,\n undefined,\n {\n prefix: `${ClientPrefix.Unstable}/org.matrix.msc1763`,\n },\n );\n this.cached = resp;\n return this.cached;\n };\n}\n"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,gBAAgB,QAAQ,uBAAuB;AACxD,SAASC,YAAY,EAAsCC,MAAM,QAAQ,qBAAqB;AAuB9F;AACA;AACA;AACA,OAAO,MAAMC,sBAAsB,SAASH,gBAAgB,CAAiC;EAClFI,WAAWA,CAACC,MAAc,EAAEC,IAAmD,EAAE;IAAA,IAAAC,KAAA;IACpF,KAAK,CAACF,MAAM,EAAEC,IAAI,EAAE,kBAAkB,CAAC;IAAAC,KAAA,GAAAC,IAAA;IAE3C;AACJ;AACA;AACA;IAHIC,eAAA,6BAAAC,iBAAA,CAIe,aAAqD;MAChE,IAAMC,IAAI,SAASJ,KAAI,CAACD,IAAI,CAACM,aAAa,CACtCV,MAAM,CAACW,GAAG,EACV,0BAA0B,EAC1BC,SAAS,EACTA,SAAS,EACT;QACIC,MAAM,KAAAC,MAAA,CAAKf,YAAY,CAACgB,QAAQ;MACpC,CACJ,CAAC;MACDV,KAAI,CAACW,MAAM,GAAGP,IAAI;MAClB,OAAOJ,KAAI,CAACW,MAAM;IACtB,CAAC;EAjBD;AAkBJ","ignoreList":[]}
1
+ {"version":3,"file":"retentionPolicy.js","names":[],"sources":["../src/retentionPolicy.ts"],"sourcesContent":["/*\nCopyright 2024 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 { CapabilityPoller } from \"./capabilityPoller.ts\";\nimport { ClientPrefix, type IHttpOpts, type MatrixHttpApi, Method } from \"./http-api/index.ts\";\nimport type { Logger } from \"./logger.ts\";\n\nexport interface RetentionConfigurationResponse {\n policies?: Record<\n string,\n {\n max_lifetime?: number;\n min_lifetime?: number;\n }\n >;\n limits?: {\n min_lifetime?: {\n min?: number;\n max?: number;\n };\n max_lifetime?: {\n min?: number;\n max?: number;\n };\n };\n}\n\n/**\n * Manages storing and periodically refreshing the server capabilities.\n */\nexport class RetentionPolicyService extends CapabilityPoller<RetentionConfigurationResponse> {\n public constructor(logger: Logger, http: MatrixHttpApi<IHttpOpts & { onlyData: true }>) {\n super(logger, http, \"retention policy\");\n }\n /**\n * Fetches the latest server capabilities from the homeserver and returns them, or rejects\n * on failure.\n */\n public fetch = async (): Promise<RetentionConfigurationResponse> => {\n const resp = await this.http.authedRequest<RetentionConfigurationResponse>(\n Method.Get,\n \"/retention/configuration\",\n undefined,\n undefined,\n {\n prefix: `${ClientPrefix.Unstable}/org.matrix.msc1763`,\n },\n );\n this.cached = resp;\n return this.cached;\n };\n}\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS,gBAAgB,QAAQ,uBAAuB;AACxD,SAAS,YAAY,EAAsC,MAAM,QAAQ,qBAAqB;AAuB9F;AACA;AACA;AACA,OAAO,MAAM,sBAAsB,SAAS,gBAAgB,CAAiC;EAClF,WAAW,CAAC,MAAc,EAAE,IAAmD,EAAE;IACpF,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,kBAAkB,CAAC;IAE3C;AACJ;AACA;AACA;IAHI,+BAIe,YAAqD;MAChE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CACtC,MAAM,CAAC,GAAG,EACV,0BAA0B,EAC1B,SAAS,EACT,SAAS,EACT;QACI,MAAM,EAAE,GAAG,YAAY,CAAC,QAAQ;MACpC,CACJ,CAAC;MACD,IAAI,CAAC,MAAM,GAAG,IAAI;MAClB,OAAO,IAAI,CAAC,MAAM;IACtB,CAAC;EAjBD;AAkBJ","ignoreList":[]}
@@ -1,4 +1,3 @@
1
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
2
  /*
4
3
  Copyright 2021 The Matrix.org Foundation C.I.C.
@@ -28,12 +27,7 @@ export class RoomHierarchy {
28
27
  * @param maxDepth - the maximum depth to traverse the hierarchy to
29
28
  * @param suggestedOnly - whether to only return rooms with suggested=true.
30
29
  */
31
- constructor(root, pageSize, maxDepth) {
32
- var suggestedOnly = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
33
- this.root = root;
34
- this.pageSize = pageSize;
35
- this.maxDepth = maxDepth;
36
- this.suggestedOnly = suggestedOnly;
30
+ constructor(root, pageSize, maxDepth, suggestedOnly = false) {
37
31
  // Map from room id to list of servers which are listed as a via somewhere in the loaded hierarchy
38
32
  _defineProperty(this, "viaMap", new Map());
39
33
  // Map from room id to list of rooms which claim this room as their child
@@ -44,6 +38,10 @@ export class RoomHierarchy {
44
38
  _defineProperty(this, "nextBatch", void 0);
45
39
  _defineProperty(this, "_rooms", void 0);
46
40
  _defineProperty(this, "serverSupportError", void 0);
41
+ this.root = root;
42
+ this.pageSize = pageSize;
43
+ this.maxDepth = maxDepth;
44
+ this.suggestedOnly = suggestedOnly;
47
45
  }
48
46
  get noSupport() {
49
47
  return !!this.serverSupportError;
@@ -57,76 +55,70 @@ export class RoomHierarchy {
57
55
  get rooms() {
58
56
  return this._rooms;
59
57
  }
60
- load() {
61
- var _arguments = arguments,
62
- _this = this;
63
- return _asyncToGenerator(function* () {
64
- var pageSize = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : _this.pageSize;
65
- if (_this.loadRequest) return _this.loadRequest.then(r => r.rooms);
66
- _this.loadRequest = _this.root.client.getRoomHierarchy(_this.root.roomId, pageSize, _this.maxDepth, _this.suggestedOnly, _this.nextBatch);
67
- var rooms;
68
- try {
69
- var _yield$_this$loadRequ = yield _this.loadRequest;
70
- rooms = _yield$_this$loadRequ.rooms;
71
- _this.nextBatch = _yield$_this$loadRequ.next_batch;
72
- } catch (e) {
73
- if (e.errcode === "M_UNRECOGNIZED") {
74
- _this.serverSupportError = e;
75
- } else {
76
- throw e;
77
- }
78
- return [];
79
- } finally {
80
- _this.loadRequest = undefined;
81
- }
82
- if (_this._rooms) {
83
- _this._rooms = _this._rooms.concat(rooms);
58
+ async load(pageSize = this.pageSize) {
59
+ if (this.loadRequest) return this.loadRequest.then(r => r.rooms);
60
+ this.loadRequest = this.root.client.getRoomHierarchy(this.root.roomId, pageSize, this.maxDepth, this.suggestedOnly, this.nextBatch);
61
+ let rooms;
62
+ try {
63
+ ({
64
+ rooms,
65
+ next_batch: this.nextBatch
66
+ } = await this.loadRequest);
67
+ } catch (e) {
68
+ if (e.errcode === "M_UNRECOGNIZED") {
69
+ this.serverSupportError = e;
84
70
  } else {
85
- _this._rooms = rooms;
71
+ throw e;
86
72
  }
87
- rooms.forEach(room => {
88
- _this.roomMap.set(room.room_id, room);
89
- room.children_state.forEach(ev => {
90
- if (ev.type !== EventType.SpaceChild) return;
91
- var childRoomId = ev.state_key;
73
+ return [];
74
+ } finally {
75
+ this.loadRequest = undefined;
76
+ }
77
+ if (this._rooms) {
78
+ this._rooms = this._rooms.concat(rooms);
79
+ } else {
80
+ this._rooms = rooms;
81
+ }
82
+ rooms.forEach(room => {
83
+ this.roomMap.set(room.room_id, room);
84
+ room.children_state.forEach(ev => {
85
+ if (ev.type !== EventType.SpaceChild) return;
86
+ const childRoomId = ev.state_key;
92
87
 
93
- // track backrefs for quicker hierarchy navigation
94
- if (!_this.backRefs.has(childRoomId)) {
95
- _this.backRefs.set(childRoomId, []);
96
- }
97
- _this.backRefs.get(childRoomId).push(room.room_id);
88
+ // track backrefs for quicker hierarchy navigation
89
+ if (!this.backRefs.has(childRoomId)) {
90
+ this.backRefs.set(childRoomId, []);
91
+ }
92
+ this.backRefs.get(childRoomId).push(room.room_id);
98
93
 
99
- // fill viaMap
100
- if (Array.isArray(ev.content.via)) {
101
- if (!_this.viaMap.has(childRoomId)) {
102
- _this.viaMap.set(childRoomId, new Set());
103
- }
104
- var vias = _this.viaMap.get(childRoomId);
105
- ev.content.via.forEach(via => vias.add(via));
94
+ // fill viaMap
95
+ if (Array.isArray(ev.content.via)) {
96
+ if (!this.viaMap.has(childRoomId)) {
97
+ this.viaMap.set(childRoomId, new Set());
106
98
  }
107
- });
99
+ const vias = this.viaMap.get(childRoomId);
100
+ ev.content.via.forEach(via => vias.add(via));
101
+ }
108
102
  });
109
- return rooms;
110
- })();
103
+ });
104
+ return rooms;
111
105
  }
112
106
  getRelation(parentId, childId) {
113
- var _this$roomMap$get;
114
- return (_this$roomMap$get = this.roomMap.get(parentId)) === null || _this$roomMap$get === void 0 ? void 0 : _this$roomMap$get.children_state.find(e => e.state_key === childId);
107
+ return this.roomMap.get(parentId)?.children_state.find(e => e.state_key === childId);
115
108
  }
116
109
  isSuggested(parentId, childId) {
117
- var _this$getRelation;
118
- return (_this$getRelation = this.getRelation(parentId, childId)) === null || _this$getRelation === void 0 ? void 0 : _this$getRelation.content.suggested;
110
+ return this.getRelation(parentId, childId)?.content.suggested;
119
111
  }
120
112
 
121
113
  // locally remove a relation as a form of local echo
122
114
  removeRelation(parentId, childId) {
123
- var backRefs = this.backRefs.get(childId);
124
- if ((backRefs === null || backRefs === void 0 ? void 0 : backRefs.length) === 1) {
115
+ const backRefs = this.backRefs.get(childId);
116
+ if (backRefs?.length === 1) {
125
117
  this.backRefs.delete(childId);
126
- } else if (backRefs !== null && backRefs !== void 0 && backRefs.length) {
118
+ } else if (backRefs?.length) {
127
119
  this.backRefs.set(childId, backRefs.filter(ref => ref !== parentId));
128
120
  }
129
- var room = this.roomMap.get(parentId);
121
+ const room = this.roomMap.get(parentId);
130
122
  if (room) {
131
123
  room.children_state = room.children_state.filter(ev => ev.state_key !== childId);
132
124
  }
@@ -1 +1 @@
1
- {"version":3,"file":"room-hierarchy.js","names":["EventType","RoomHierarchy","constructor","root","pageSize","maxDepth","suggestedOnly","arguments","length","undefined","_defineProperty","Map","noSupport","serverSupportError","canLoadMore","nextBatch","_rooms","loading","loadRequest","rooms","load","_arguments","_this","_asyncToGenerator","then","r","client","getRoomHierarchy","roomId","_yield$_this$loadRequ","next_batch","e","errcode","concat","forEach","room","roomMap","set","room_id","children_state","ev","type","SpaceChild","childRoomId","state_key","backRefs","has","get","push","Array","isArray","content","via","viaMap","Set","vias","add","getRelation","parentId","childId","_this$roomMap$get","find","isSuggested","_this$getRelation","suggested","removeRelation","delete","filter","ref"],"sources":["../src/room-hierarchy.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 Room } from \"./models/room.ts\";\nimport { type IHierarchyRoom, type IHierarchyRelation } from \"./@types/spaces.ts\";\nimport { type MatrixClient } from \"./client.ts\";\nimport { EventType } from \"./@types/event.ts\";\nimport { type MatrixError } from \"./http-api/index.ts\";\n\nexport class RoomHierarchy {\n // Map from room id to list of servers which are listed as a via somewhere in the loaded hierarchy\n public readonly viaMap = new Map<string, Set<string>>();\n // Map from room id to list of rooms which claim this room as their child\n public readonly backRefs = new Map<string, string[]>();\n // Map from room id to object\n public readonly roomMap = new Map<string, IHierarchyRoom>();\n private loadRequest?: ReturnType<MatrixClient[\"getRoomHierarchy\"]>;\n private nextBatch?: string;\n private _rooms?: IHierarchyRoom[];\n private serverSupportError?: Error;\n\n /**\n * Construct a new RoomHierarchy\n *\n * A RoomHierarchy instance allows you to easily make use of the /hierarchy API and paginate it.\n *\n * @param root - the root of this hierarchy\n * @param pageSize - the maximum number of rooms to return per page, can be overridden per load request.\n * @param maxDepth - the maximum depth to traverse the hierarchy to\n * @param suggestedOnly - whether to only return rooms with suggested=true.\n */\n public constructor(\n public readonly root: Room,\n private readonly pageSize?: number,\n private readonly maxDepth?: number,\n private readonly suggestedOnly = false,\n ) {}\n\n public get noSupport(): boolean {\n return !!this.serverSupportError;\n }\n\n public get canLoadMore(): boolean {\n return !!this.serverSupportError || !!this.nextBatch || !this._rooms;\n }\n\n public get loading(): boolean {\n return !!this.loadRequest;\n }\n\n public get rooms(): IHierarchyRoom[] | undefined {\n return this._rooms;\n }\n\n public async load(pageSize = this.pageSize): Promise<IHierarchyRoom[]> {\n if (this.loadRequest) return this.loadRequest.then((r) => r.rooms);\n\n this.loadRequest = this.root.client.getRoomHierarchy(\n this.root.roomId,\n pageSize,\n this.maxDepth,\n this.suggestedOnly,\n this.nextBatch,\n );\n\n let rooms: IHierarchyRoom[];\n try {\n ({ rooms, next_batch: this.nextBatch } = await this.loadRequest);\n } catch (e) {\n if ((<MatrixError>e).errcode === \"M_UNRECOGNIZED\") {\n this.serverSupportError = <MatrixError>e;\n } else {\n throw e;\n }\n\n return [];\n } finally {\n this.loadRequest = undefined;\n }\n\n if (this._rooms) {\n this._rooms = this._rooms.concat(rooms);\n } else {\n this._rooms = rooms;\n }\n\n rooms.forEach((room) => {\n this.roomMap.set(room.room_id, room);\n\n room.children_state.forEach((ev) => {\n if (ev.type !== EventType.SpaceChild) return;\n const childRoomId = ev.state_key;\n\n // track backrefs for quicker hierarchy navigation\n if (!this.backRefs.has(childRoomId)) {\n this.backRefs.set(childRoomId, []);\n }\n this.backRefs.get(childRoomId)!.push(room.room_id);\n\n // fill viaMap\n if (Array.isArray(ev.content.via)) {\n if (!this.viaMap.has(childRoomId)) {\n this.viaMap.set(childRoomId, new Set());\n }\n const vias = this.viaMap.get(childRoomId)!;\n ev.content.via.forEach((via) => vias.add(via));\n }\n });\n });\n\n return rooms;\n }\n\n public getRelation(parentId: string, childId: string): IHierarchyRelation | undefined {\n return this.roomMap.get(parentId)?.children_state.find((e) => e.state_key === childId);\n }\n\n public isSuggested(parentId: string, childId: string): boolean | undefined {\n return this.getRelation(parentId, childId)?.content.suggested;\n }\n\n // locally remove a relation as a form of local echo\n public removeRelation(parentId: string, childId: string): void {\n const backRefs = this.backRefs.get(childId);\n if (backRefs?.length === 1) {\n this.backRefs.delete(childId);\n } else if (backRefs?.length) {\n this.backRefs.set(\n childId,\n backRefs.filter((ref) => ref !== parentId),\n );\n }\n\n const room = this.roomMap.get(parentId);\n if (room) {\n room.children_state = room.children_state.filter((ev) => ev.state_key !== childId);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"room-hierarchy.js","names":[],"sources":["../src/room-hierarchy.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 Room } from \"./models/room.ts\";\nimport { type IHierarchyRoom, type IHierarchyRelation } from \"./@types/spaces.ts\";\nimport { type MatrixClient } from \"./client.ts\";\nimport { EventType } from \"./@types/event.ts\";\nimport { type MatrixError } from \"./http-api/index.ts\";\n\nexport class RoomHierarchy {\n // Map from room id to list of servers which are listed as a via somewhere in the loaded hierarchy\n public readonly viaMap = new Map<string, Set<string>>();\n // Map from room id to list of rooms which claim this room as their child\n public readonly backRefs = new Map<string, string[]>();\n // Map from room id to object\n public readonly roomMap = new Map<string, IHierarchyRoom>();\n private loadRequest?: ReturnType<MatrixClient[\"getRoomHierarchy\"]>;\n private nextBatch?: string;\n private _rooms?: IHierarchyRoom[];\n private serverSupportError?: Error;\n\n /**\n * Construct a new RoomHierarchy\n *\n * A RoomHierarchy instance allows you to easily make use of the /hierarchy API and paginate it.\n *\n * @param root - the root of this hierarchy\n * @param pageSize - the maximum number of rooms to return per page, can be overridden per load request.\n * @param maxDepth - the maximum depth to traverse the hierarchy to\n * @param suggestedOnly - whether to only return rooms with suggested=true.\n */\n public constructor(\n public readonly root: Room,\n private readonly pageSize?: number,\n private readonly maxDepth?: number,\n private readonly suggestedOnly = false,\n ) {}\n\n public get noSupport(): boolean {\n return !!this.serverSupportError;\n }\n\n public get canLoadMore(): boolean {\n return !!this.serverSupportError || !!this.nextBatch || !this._rooms;\n }\n\n public get loading(): boolean {\n return !!this.loadRequest;\n }\n\n public get rooms(): IHierarchyRoom[] | undefined {\n return this._rooms;\n }\n\n public async load(pageSize = this.pageSize): Promise<IHierarchyRoom[]> {\n if (this.loadRequest) return this.loadRequest.then((r) => r.rooms);\n\n this.loadRequest = this.root.client.getRoomHierarchy(\n this.root.roomId,\n pageSize,\n this.maxDepth,\n this.suggestedOnly,\n this.nextBatch,\n );\n\n let rooms: IHierarchyRoom[];\n try {\n ({ rooms, next_batch: this.nextBatch } = await this.loadRequest);\n } catch (e) {\n if ((<MatrixError>e).errcode === \"M_UNRECOGNIZED\") {\n this.serverSupportError = <MatrixError>e;\n } else {\n throw e;\n }\n\n return [];\n } finally {\n this.loadRequest = undefined;\n }\n\n if (this._rooms) {\n this._rooms = this._rooms.concat(rooms);\n } else {\n this._rooms = rooms;\n }\n\n rooms.forEach((room) => {\n this.roomMap.set(room.room_id, room);\n\n room.children_state.forEach((ev) => {\n if (ev.type !== EventType.SpaceChild) return;\n const childRoomId = ev.state_key;\n\n // track backrefs for quicker hierarchy navigation\n if (!this.backRefs.has(childRoomId)) {\n this.backRefs.set(childRoomId, []);\n }\n this.backRefs.get(childRoomId)!.push(room.room_id);\n\n // fill viaMap\n if (Array.isArray(ev.content.via)) {\n if (!this.viaMap.has(childRoomId)) {\n this.viaMap.set(childRoomId, new Set());\n }\n const vias = this.viaMap.get(childRoomId)!;\n ev.content.via.forEach((via) => vias.add(via));\n }\n });\n });\n\n return rooms;\n }\n\n public getRelation(parentId: string, childId: string): IHierarchyRelation | undefined {\n return this.roomMap.get(parentId)?.children_state.find((e) => e.state_key === childId);\n }\n\n public isSuggested(parentId: string, childId: string): boolean | undefined {\n return this.getRelation(parentId, childId)?.content.suggested;\n }\n\n // locally remove a relation as a form of local echo\n public removeRelation(parentId: string, childId: string): void {\n const backRefs = this.backRefs.get(childId);\n if (backRefs?.length === 1) {\n this.backRefs.delete(childId);\n } else if (backRefs?.length) {\n this.backRefs.set(\n childId,\n backRefs.filter((ref) => ref !== parentId),\n );\n }\n\n const room = this.roomMap.get(parentId);\n if (room) {\n room.children_state = room.children_state.filter((ev) => ev.state_key !== childId);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,3 @@
1
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
1
  /*
3
2
  Copyright 2023 The Matrix.org Foundation C.I.C.
4
3
 
@@ -30,72 +29,69 @@ export class CrossSigningIdentity {
30
29
  /**
31
30
  * Initialise our cross-signing keys by creating new keys if they do not exist, and uploading to the server
32
31
  */
33
- bootstrapCrossSigning(opts) {
34
- var _this = this;
35
- return _asyncToGenerator(function* () {
36
- if (opts.setupNewCrossSigning) {
37
- yield _this.resetCrossSigning(opts.authUploadDeviceSigningKeys);
38
- return;
39
- }
40
- var olmDeviceStatus = yield _this.olmMachine.crossSigningStatus();
32
+ async bootstrapCrossSigning(opts) {
33
+ if (opts.setupNewCrossSigning) {
34
+ await this.resetCrossSigning(opts.authUploadDeviceSigningKeys);
35
+ return;
36
+ }
37
+ const olmDeviceStatus = await this.olmMachine.crossSigningStatus();
41
38
 
42
- // Try to fetch cross signing keys from the secret storage
43
- var masterKeyFromSecretStorage = yield _this.secretStorage.get("m.cross_signing.master");
44
- var selfSigningKeyFromSecretStorage = yield _this.secretStorage.get("m.cross_signing.self_signing");
45
- var userSigningKeyFromSecretStorage = yield _this.secretStorage.get("m.cross_signing.user_signing");
46
- var privateKeysInSecretStorage = Boolean(masterKeyFromSecretStorage && selfSigningKeyFromSecretStorage && userSigningKeyFromSecretStorage);
47
- var olmDeviceHasKeys = olmDeviceStatus.hasMaster && olmDeviceStatus.hasUserSigning && olmDeviceStatus.hasSelfSigning;
39
+ // Try to fetch cross signing keys from the secret storage
40
+ const masterKeyFromSecretStorage = await this.secretStorage.get("m.cross_signing.master");
41
+ const selfSigningKeyFromSecretStorage = await this.secretStorage.get("m.cross_signing.self_signing");
42
+ const userSigningKeyFromSecretStorage = await this.secretStorage.get("m.cross_signing.user_signing");
43
+ const privateKeysInSecretStorage = Boolean(masterKeyFromSecretStorage && selfSigningKeyFromSecretStorage && userSigningKeyFromSecretStorage);
44
+ const olmDeviceHasKeys = olmDeviceStatus.hasMaster && olmDeviceStatus.hasUserSigning && olmDeviceStatus.hasSelfSigning;
48
45
 
49
- // Log all relevant state for easier parsing of debug logs.
50
- _this.logger.debug("bootstrapCrossSigning: starting", {
51
- setupNewCrossSigning: opts.setupNewCrossSigning,
52
- olmDeviceHasMaster: olmDeviceStatus.hasMaster,
53
- olmDeviceHasUserSigning: olmDeviceStatus.hasUserSigning,
54
- olmDeviceHasSelfSigning: olmDeviceStatus.hasSelfSigning,
55
- privateKeysInSecretStorage
56
- });
57
- if (olmDeviceHasKeys) {
58
- if (!(yield _this.secretStorage.hasKey())) {
59
- _this.logger.warn("bootstrapCrossSigning: Olm device has private keys, but secret storage is not yet set up; doing nothing for now.");
60
- // the keys should get uploaded to 4S once that is set up.
61
- } else if (!privateKeysInSecretStorage) {
62
- // the device has the keys but they are not in 4S, so update it
63
- _this.logger.debug("bootstrapCrossSigning: Olm device has private keys: exporting to secret storage");
64
- yield _this.exportCrossSigningKeysToStorage();
65
- } else {
66
- _this.logger.debug("bootstrapCrossSigning: Olm device has private keys and they are saved in secret storage; doing nothing");
67
- }
68
- } /* (!olmDeviceHasKeys) */else {
69
- if (privateKeysInSecretStorage) {
70
- // they are in 4S, so import from there
71
- _this.logger.debug("bootstrapCrossSigning: Cross-signing private keys not found locally, but they are available " + "in secret storage, reading storage and caching locally");
72
- var status = yield _this.olmMachine.importCrossSigningKeys(masterKeyFromSecretStorage, selfSigningKeyFromSecretStorage, userSigningKeyFromSecretStorage);
46
+ // Log all relevant state for easier parsing of debug logs.
47
+ this.logger.debug("bootstrapCrossSigning: starting", {
48
+ setupNewCrossSigning: opts.setupNewCrossSigning,
49
+ olmDeviceHasMaster: olmDeviceStatus.hasMaster,
50
+ olmDeviceHasUserSigning: olmDeviceStatus.hasUserSigning,
51
+ olmDeviceHasSelfSigning: olmDeviceStatus.hasSelfSigning,
52
+ privateKeysInSecretStorage
53
+ });
54
+ if (olmDeviceHasKeys) {
55
+ if (!(await this.secretStorage.hasKey())) {
56
+ this.logger.warn("bootstrapCrossSigning: Olm device has private keys, but secret storage is not yet set up; doing nothing for now.");
57
+ // the keys should get uploaded to 4S once that is set up.
58
+ } else if (!privateKeysInSecretStorage) {
59
+ // the device has the keys but they are not in 4S, so update it
60
+ this.logger.debug("bootstrapCrossSigning: Olm device has private keys: exporting to secret storage");
61
+ await this.exportCrossSigningKeysToStorage();
62
+ } else {
63
+ this.logger.debug("bootstrapCrossSigning: Olm device has private keys and they are saved in secret storage; doing nothing");
64
+ }
65
+ } /* (!olmDeviceHasKeys) */else {
66
+ if (privateKeysInSecretStorage) {
67
+ // they are in 4S, so import from there
68
+ this.logger.debug("bootstrapCrossSigning: Cross-signing private keys not found locally, but they are available " + "in secret storage, reading storage and caching locally");
69
+ const status = await this.olmMachine.importCrossSigningKeys(masterKeyFromSecretStorage, selfSigningKeyFromSecretStorage, userSigningKeyFromSecretStorage);
73
70
 
74
- // Check that `importCrossSigningKeys` worked correctly (for example, it will fail silently if the
75
- // public keys are not available).
76
- if (!status.hasMaster || !status.hasSelfSigning || !status.hasUserSigning) {
77
- throw new Error("importCrossSigningKeys failed to import the keys");
78
- }
71
+ // Check that `importCrossSigningKeys` worked correctly (for example, it will fail silently if the
72
+ // public keys are not available).
73
+ if (!status.hasMaster || !status.hasSelfSigning || !status.hasUserSigning) {
74
+ throw new Error("importCrossSigningKeys failed to import the keys");
75
+ }
79
76
 
80
- // Get the current device
81
- var device = yield _this.olmMachine.getDevice(_this.olmMachine.userId, _this.olmMachine.deviceId);
82
- try {
83
- // Sign the device with our cross-signing key and upload the signature
84
- var request = yield device.verify();
85
- yield _this.outgoingRequestProcessor.makeOutgoingRequest(request);
86
- } finally {
87
- device.free();
88
- }
89
- } else {
90
- _this.logger.debug("bootstrapCrossSigning: Cross-signing private keys not found locally or in secret storage, creating new keys");
91
- yield _this.resetCrossSigning(opts.authUploadDeviceSigningKeys);
77
+ // Get the current device
78
+ const device = await this.olmMachine.getDevice(this.olmMachine.userId, this.olmMachine.deviceId);
79
+ try {
80
+ // Sign the device with our cross-signing key and upload the signature
81
+ const request = await device.verify();
82
+ await this.outgoingRequestProcessor.makeOutgoingRequest(request);
83
+ } finally {
84
+ device.free();
92
85
  }
86
+ } else {
87
+ this.logger.debug("bootstrapCrossSigning: Cross-signing private keys not found locally or in secret storage, creating new keys");
88
+ await this.resetCrossSigning(opts.authUploadDeviceSigningKeys);
93
89
  }
90
+ }
94
91
 
95
- // TODO: we might previously have bootstrapped cross-signing but not completed uploading the keys to the
96
- // server -- in which case we should call OlmDevice.bootstrap_cross_signing. How do we know?
97
- _this.logger.debug("bootstrapCrossSigning: complete");
98
- })();
92
+ // TODO: we might previously have bootstrapped cross-signing but not completed uploading the keys to the
93
+ // server -- in which case we should call OlmDevice.bootstrap_cross_signing. How do we know?
94
+ this.logger.debug("bootstrapCrossSigning: complete");
99
95
  }
100
96
 
101
97
  /** Reset our cross-signing keys
@@ -105,31 +101,28 @@ export class CrossSigningIdentity {
105
101
  * * Upload the new public keys and the device signature to the server
106
102
  * * Upload the private keys to SSSS, if it is set up
107
103
  */
108
- resetCrossSigning(authUploadDeviceSigningKeys) {
109
- var _this2 = this;
110
- return _asyncToGenerator(function* () {
111
- // XXX: We must find a way to make this atomic, currently if the user does not remember his account password
112
- // or 4S passphrase/key the process will fail in a bad state, with keys rotated but not uploaded or saved in 4S.
113
- var outgoingRequests = yield _this2.olmMachine.bootstrapCrossSigning(true);
104
+ async resetCrossSigning(authUploadDeviceSigningKeys) {
105
+ // XXX: We must find a way to make this atomic, currently if the user does not remember his account password
106
+ // or 4S passphrase/key the process will fail in a bad state, with keys rotated but not uploaded or saved in 4S.
107
+ const outgoingRequests = await this.olmMachine.bootstrapCrossSigning(true);
114
108
 
115
- // If 4S is configured we need to update it.
116
- if (!(yield _this2.secretStorage.hasKey())) {
117
- _this2.logger.warn("resetCrossSigning: Secret storage is not yet set up; not exporting keys to secret storage yet.");
118
- // the keys should get uploaded to 4S once that is set up.
119
- } else {
120
- // Update 4S before uploading cross-signing keys, to stay consistent with legacy that asks
121
- // 4S passphrase before asking for account password.
122
- // Ultimately should be made atomic and resistant to forgotten password/passphrase.
123
- _this2.logger.debug("resetCrossSigning: exporting private keys to secret storage");
124
- yield _this2.exportCrossSigningKeysToStorage();
109
+ // If 4S is configured we need to update it.
110
+ if (!(await this.secretStorage.hasKey())) {
111
+ this.logger.warn("resetCrossSigning: Secret storage is not yet set up; not exporting keys to secret storage yet.");
112
+ // the keys should get uploaded to 4S once that is set up.
113
+ } else {
114
+ // Update 4S before uploading cross-signing keys, to stay consistent with legacy that asks
115
+ // 4S passphrase before asking for account password.
116
+ // Ultimately should be made atomic and resistant to forgotten password/passphrase.
117
+ this.logger.debug("resetCrossSigning: exporting private keys to secret storage");
118
+ await this.exportCrossSigningKeysToStorage();
119
+ }
120
+ this.logger.debug("resetCrossSigning: publishing public keys to server");
121
+ for (const req of [outgoingRequests.uploadKeysRequest, outgoingRequests.uploadSigningKeysRequest, outgoingRequests.uploadSignaturesRequest]) {
122
+ if (req) {
123
+ await this.outgoingRequestProcessor.makeOutgoingRequest(req, authUploadDeviceSigningKeys);
125
124
  }
126
- _this2.logger.debug("resetCrossSigning: publishing public keys to server");
127
- for (var req of [outgoingRequests.uploadKeysRequest, outgoingRequests.uploadSigningKeysRequest, outgoingRequests.uploadSignaturesRequest]) {
128
- if (req) {
129
- yield _this2.outgoingRequestProcessor.makeOutgoingRequest(req, authUploadDeviceSigningKeys);
130
- }
131
- }
132
- })();
125
+ }
133
126
  }
134
127
 
135
128
  /**
@@ -137,27 +130,24 @@ export class CrossSigningIdentity {
137
130
  *
138
131
  * (If secret storage is *not* configured, we assume that the export will happen when it is set up)
139
132
  */
140
- exportCrossSigningKeysToStorage() {
141
- var _this3 = this;
142
- return _asyncToGenerator(function* () {
143
- var exported = yield _this3.olmMachine.exportCrossSigningKeys();
144
- /* istanbul ignore else (this function is only called when we know the olm machine has keys) */
145
- if (exported !== null && exported !== void 0 && exported.masterKey) {
146
- yield _this3.secretStorage.store("m.cross_signing.master", exported.masterKey);
147
- } else {
148
- _this3.logger.error("Cannot export MSK to secret storage, private key unknown");
149
- }
150
- if (exported !== null && exported !== void 0 && exported.self_signing_key) {
151
- yield _this3.secretStorage.store("m.cross_signing.self_signing", exported.self_signing_key);
152
- } else {
153
- _this3.logger.error("Cannot export SSK to secret storage, private key unknown");
154
- }
155
- if (exported !== null && exported !== void 0 && exported.userSigningKey) {
156
- yield _this3.secretStorage.store("m.cross_signing.user_signing", exported.userSigningKey);
157
- } else {
158
- _this3.logger.error("Cannot export USK to secret storage, private key unknown");
159
- }
160
- })();
133
+ async exportCrossSigningKeysToStorage() {
134
+ const exported = await this.olmMachine.exportCrossSigningKeys();
135
+ /* istanbul ignore else (this function is only called when we know the olm machine has keys) */
136
+ if (exported?.masterKey) {
137
+ await this.secretStorage.store("m.cross_signing.master", exported.masterKey);
138
+ } else {
139
+ this.logger.error(`Cannot export MSK to secret storage, private key unknown`);
140
+ }
141
+ if (exported?.self_signing_key) {
142
+ await this.secretStorage.store("m.cross_signing.self_signing", exported.self_signing_key);
143
+ } else {
144
+ this.logger.error(`Cannot export SSK to secret storage, private key unknown`);
145
+ }
146
+ if (exported?.userSigningKey) {
147
+ await this.secretStorage.store("m.cross_signing.user_signing", exported.userSigningKey);
148
+ } else {
149
+ this.logger.error(`Cannot export USK to secret storage, private key unknown`);
150
+ }
161
151
  }
162
152
  }
163
153
  //# sourceMappingURL=CrossSigningIdentity.js.map