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":"autodiscovery.js","names":["logger","Method","timeoutSignal","SUPPORTED_MATRIX_VERSIONS","AutoDiscoveryAction","AutoDiscoveryError","AutoDiscovery","fromDiscoveryConfig","wellknown","_this","_asyncToGenerator","_hsVersions$raw","clientConfig","state","FAIL_ERROR","error","ERROR_INVALID","base_url","PROMPT","FAIL_PROMPT","Promise","resolve","ERROR_INVALID_HS_BASE_URL","hsUrl","sanitizeWellKnownUrl","hsVersions","fetchWellKnownObject","concat","Array","isArray","raw","ERROR_INVALID_HOMESERVER","hsVersionSet","Set","supportedVersionFound","version","has","ERROR_UNSUPPORTED_HOMESERVER_SPEC_VERSION","SUCCESS","isUrl","failingClientConfig","ERROR_INVALID_IS","ERROR_INVALID_IS_BASE_URL","isResponse","action","ERROR_INVALID_IDENTITY_SERVER","toString","length","Object","keys","forEach","k","notProps","prop","includes","findClientConfig","domain","_this2","Error","domainWithProtocol","reason","IGNORE","getRawClientConfig","_this3","_response$raw","response","url","_parsed","parsed","URL","e","hostname","protocol","port","path","pathname","saferUrl","endsWith","substring","fetch","resource","options","fetchFn","globalThis","setFetchFn","method","Get","signal","status","ERROR_MISSING_WELLKNOWN","err","message","json","name","ERROR_INVALID_JSON","_defineProperty","Invalid","GenericFailure","InvalidHsBaseUrl","InvalidHomeserver","InvalidIsBaseUrl","InvalidIdentityServer","InvalidIs","MissingWellknown","InvalidJson","UnsupportedHomeserverSpecVersion"],"sources":["../src/autodiscovery.ts"],"sourcesContent":["/*\nCopyright 2018 New Vector Ltd\nCopyright 2019 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 IClientWellKnown, type IWellKnownConfig, type IServerVersions } from \"./client.ts\";\nimport { logger } from \"./logger.ts\";\nimport { type MatrixError, Method, timeoutSignal } from \"./http-api/index.ts\";\nimport { SUPPORTED_MATRIX_VERSIONS } from \"./version-support.ts\";\n\n// Dev note: Auto discovery is part of the spec.\n// See: https://matrix.org/docs/spec/client_server/r0.4.0.html#server-discovery\n\nexport enum AutoDiscoveryAction {\n SUCCESS = \"SUCCESS\",\n IGNORE = \"IGNORE\",\n PROMPT = \"PROMPT\",\n FAIL_PROMPT = \"FAIL_PROMPT\",\n FAIL_ERROR = \"FAIL_ERROR\",\n}\n\nexport enum AutoDiscoveryError {\n Invalid = \"Invalid homeserver discovery response\",\n GenericFailure = \"Failed to get autodiscovery configuration from server\",\n InvalidHsBaseUrl = \"Invalid base_url for m.homeserver\",\n InvalidHomeserver = \"Homeserver URL does not appear to be a valid Matrix homeserver\",\n InvalidIsBaseUrl = \"Invalid base_url for m.identity_server\",\n InvalidIdentityServer = \"Identity server URL does not appear to be a valid identity server\",\n InvalidIs = \"Invalid identity server discovery response\",\n MissingWellknown = \"No .well-known JSON file found\",\n InvalidJson = \"Invalid JSON\",\n UnsupportedHomeserverSpecVersion = \"The homeserver does not meet the version requirements\",\n\n // TODO: Implement when Sydent supports the `/versions` endpoint - https://github.com/matrix-org/sydent/issues/424\n //IdentityServerTooOld = \"The identity server does not meet the minimum version requirements\",\n}\n\ninterface AutoDiscoveryState {\n state: AutoDiscoveryAction;\n error?: IWellKnownConfig[\"error\"] | null;\n}\ninterface WellKnownConfig extends Omit<IWellKnownConfig, \"error\">, AutoDiscoveryState {}\n\nexport interface ClientConfig extends Omit<IClientWellKnown, \"m.homeserver\" | \"m.identity_server\"> {\n \"m.homeserver\": WellKnownConfig;\n \"m.identity_server\": WellKnownConfig;\n}\n\n/**\n * Utilities for automatically discovery resources, such as homeservers\n * for users to log in to.\n */\nexport class AutoDiscovery {\n // Dev note: the constants defined here are related to but not\n // exactly the same as those in the spec. This is to hopefully\n // translate the meaning of the states in the spec, but also\n // support our own if needed.\n\n public static readonly ERROR_INVALID = AutoDiscoveryError.Invalid;\n\n public static readonly ERROR_GENERIC_FAILURE = AutoDiscoveryError.GenericFailure;\n\n public static readonly ERROR_INVALID_HS_BASE_URL = AutoDiscoveryError.InvalidHsBaseUrl;\n\n public static readonly ERROR_INVALID_HOMESERVER = AutoDiscoveryError.InvalidHomeserver;\n\n public static readonly ERROR_INVALID_IS_BASE_URL = AutoDiscoveryError.InvalidIsBaseUrl;\n\n public static readonly ERROR_INVALID_IDENTITY_SERVER = AutoDiscoveryError.InvalidIdentityServer;\n\n public static readonly ERROR_INVALID_IS = AutoDiscoveryError.InvalidIs;\n\n public static readonly ERROR_MISSING_WELLKNOWN = AutoDiscoveryError.MissingWellknown;\n\n public static readonly ERROR_INVALID_JSON = AutoDiscoveryError.InvalidJson;\n\n public static readonly ERROR_UNSUPPORTED_HOMESERVER_SPEC_VERSION =\n AutoDiscoveryError.UnsupportedHomeserverSpecVersion;\n\n public static readonly ALL_ERRORS = Object.keys(AutoDiscoveryError) as AutoDiscoveryError[];\n\n /**\n * The auto discovery failed. The client is expected to communicate\n * the error to the user and refuse logging in.\n */\n public static readonly FAIL_ERROR = AutoDiscoveryAction.FAIL_ERROR;\n\n /**\n * The auto discovery failed, however the client may still recover\n * from the problem. The client is recommended to that the same\n * action it would for PROMPT while also warning the user about\n * what went wrong. The client may also treat this the same as\n * a FAIL_ERROR state.\n */\n public static readonly FAIL_PROMPT = AutoDiscoveryAction.FAIL_PROMPT;\n\n /**\n * The auto discovery didn't fail but did not find anything of\n * interest. The client is expected to prompt the user for more\n * information, or fail if it prefers.\n */\n public static readonly PROMPT = AutoDiscoveryAction.PROMPT;\n\n /**\n * The auto discovery was successful.\n */\n public static readonly SUCCESS = AutoDiscoveryAction.SUCCESS;\n\n /**\n * Validates and verifies client configuration information for purposes\n * of logging in. Such information includes the homeserver URL\n * and identity server URL the client would want. Additional details\n * may also be included, and will be transparently brought into the\n * response object unaltered.\n * @param wellknown - The configuration object itself, as returned\n * by the .well-known auto-discovery endpoint.\n * @returns Promise which resolves to the verified\n * configuration, which may include error states. Rejects on unexpected\n * failure, not when verification fails.\n */\n public static async fromDiscoveryConfig(wellknown?: IClientWellKnown): Promise<ClientConfig> {\n // Step 1 is to get the config, which is provided to us here.\n\n // We default to an error state to make the first few checks easier to\n // write. We'll update the properties of this object over the duration\n // of this function.\n const clientConfig: ClientConfig = {\n \"m.homeserver\": {\n state: AutoDiscovery.FAIL_ERROR,\n error: AutoDiscovery.ERROR_INVALID,\n base_url: null,\n },\n \"m.identity_server\": {\n // Technically, we don't have a problem with the identity server\n // config at this point.\n state: AutoDiscovery.PROMPT,\n error: null,\n base_url: null,\n },\n };\n\n if (!wellknown?.[\"m.homeserver\"]) {\n logger.error(\"No m.homeserver key in config\");\n\n clientConfig[\"m.homeserver\"].state = AutoDiscovery.FAIL_PROMPT;\n clientConfig[\"m.homeserver\"].error = AutoDiscovery.ERROR_INVALID;\n\n return Promise.resolve(clientConfig);\n }\n\n if (!wellknown[\"m.homeserver\"][\"base_url\"]) {\n logger.error(\"No m.homeserver base_url in config\");\n\n clientConfig[\"m.homeserver\"].state = AutoDiscovery.FAIL_PROMPT;\n clientConfig[\"m.homeserver\"].error = AutoDiscovery.ERROR_INVALID_HS_BASE_URL;\n\n return Promise.resolve(clientConfig);\n }\n\n // Step 2: Make sure the homeserver URL is valid *looking*. We'll make\n // sure it points to a homeserver in Step 3.\n const hsUrl = this.sanitizeWellKnownUrl(wellknown[\"m.homeserver\"][\"base_url\"]);\n if (!hsUrl) {\n logger.error(\"Invalid base_url for m.homeserver\");\n clientConfig[\"m.homeserver\"].error = AutoDiscovery.ERROR_INVALID_HS_BASE_URL;\n return Promise.resolve(clientConfig);\n }\n\n // Step 3: Make sure the homeserver URL points to a homeserver.\n const hsVersions = await this.fetchWellKnownObject<IServerVersions>(`${hsUrl}/_matrix/client/versions`);\n if (!hsVersions || !Array.isArray(hsVersions.raw?.[\"versions\"])) {\n logger.error(\"Invalid /versions response\");\n clientConfig[\"m.homeserver\"].error = AutoDiscovery.ERROR_INVALID_HOMESERVER;\n\n // Supply the base_url to the caller because they may be ignoring liveliness\n // errors, like this one.\n clientConfig[\"m.homeserver\"].base_url = hsUrl;\n\n return Promise.resolve(clientConfig);\n }\n\n // Step 3.1: Non-spec check to ensure the server will actually work for us. We need to check if\n // any of the versions in `SUPPORTED_MATRIX_VERSIONS` are listed in the /versions response.\n const hsVersionSet = new Set(hsVersions.raw![\"versions\"]);\n let supportedVersionFound = false;\n for (const version of SUPPORTED_MATRIX_VERSIONS) {\n if (hsVersionSet.has(version)) {\n supportedVersionFound = true;\n break;\n }\n }\n if (!supportedVersionFound) {\n logger.error(\"Homeserver does not meet version requirements\");\n clientConfig[\"m.homeserver\"].error = AutoDiscovery.ERROR_UNSUPPORTED_HOMESERVER_SPEC_VERSION;\n\n // Supply the base_url to the caller because they may be ignoring liveliness\n // errors, like this one.\n clientConfig[\"m.homeserver\"].base_url = hsUrl;\n\n return Promise.resolve(clientConfig);\n }\n\n // Step 4: Now that the homeserver looks valid, update our client config.\n clientConfig[\"m.homeserver\"] = {\n state: AutoDiscovery.SUCCESS,\n error: null,\n base_url: hsUrl,\n };\n\n // Step 5: Try to pull out the identity server configuration\n let isUrl: string | boolean = \"\";\n if (wellknown[\"m.identity_server\"]) {\n // We prepare a failing identity server response to save lines later\n // in this branch.\n const failingClientConfig: ClientConfig = {\n \"m.homeserver\": clientConfig[\"m.homeserver\"],\n \"m.identity_server\": {\n state: AutoDiscovery.FAIL_PROMPT,\n error: AutoDiscovery.ERROR_INVALID_IS,\n base_url: null,\n },\n };\n\n // Step 5a: Make sure the URL is valid *looking*. We'll make sure it\n // points to an identity server in Step 5b.\n isUrl = this.sanitizeWellKnownUrl(wellknown[\"m.identity_server\"][\"base_url\"]);\n if (!isUrl) {\n logger.error(\"Invalid base_url for m.identity_server\");\n failingClientConfig[\"m.identity_server\"].error = AutoDiscovery.ERROR_INVALID_IS_BASE_URL;\n return Promise.resolve(failingClientConfig);\n }\n\n // Step 5b: Verify there is an identity server listening on the provided\n // URL.\n const isResponse = await this.fetchWellKnownObject(`${isUrl}/_matrix/identity/v2`);\n if (!isResponse?.raw || isResponse.action !== AutoDiscoveryAction.SUCCESS) {\n logger.error(\"Invalid /v2 response\");\n failingClientConfig[\"m.identity_server\"].error = AutoDiscovery.ERROR_INVALID_IDENTITY_SERVER;\n\n // Supply the base_url to the caller because they may be ignoring\n // liveliness errors, like this one.\n failingClientConfig[\"m.identity_server\"].base_url = isUrl;\n\n return Promise.resolve(failingClientConfig);\n }\n }\n\n // Step 6: Now that the identity server is valid, or never existed,\n // populate the IS section.\n if (isUrl && isUrl.toString().length > 0) {\n clientConfig[\"m.identity_server\"] = {\n state: AutoDiscovery.SUCCESS,\n error: null,\n base_url: isUrl,\n };\n }\n\n // Step 7: Copy any other keys directly into the clientConfig. This is for\n // things like custom configuration of services.\n Object.keys(wellknown).forEach((k: keyof IClientWellKnown) => {\n if (k === \"m.homeserver\" || k === \"m.identity_server\") {\n // Only copy selected parts of the config to avoid overwriting\n // properties computed by the validation logic above.\n const notProps = [\"error\", \"state\", \"base_url\"];\n for (const prop of Object.keys(wellknown[k]!)) {\n if (notProps.includes(prop)) continue;\n type Prop = Exclude<keyof IWellKnownConfig, \"error\" | \"state\" | \"base_url\">;\n // @ts-ignore - ts gets unhappy as we're mixing types here\n clientConfig[k][prop as Prop] = wellknown[k]![prop as Prop];\n }\n } else {\n // Just copy the whole thing over otherwise\n clientConfig[k] = wellknown[k];\n }\n });\n\n // Step 8: Give the config to the caller (finally)\n return Promise.resolve(clientConfig);\n }\n\n /**\n * Attempts to automatically discover client configuration information\n * prior to logging in. Such information includes the homeserver URL\n * and identity server URL the client would want. Additional details\n * may also be discovered, and will be transparently included in the\n * response object unaltered.\n * @param domain - The homeserver domain to perform discovery\n * on. For example, \"matrix.org\".\n * @returns Promise which resolves to the discovered\n * configuration, which may include error states. Rejects on unexpected\n * failure, not when discovery fails.\n */\n public static async findClientConfig(domain: string): Promise<ClientConfig> {\n if (!domain || typeof domain !== \"string\" || domain.length === 0) {\n throw new Error(\"'domain' must be a string of non-zero length\");\n }\n\n // We use a .well-known lookup for all cases. According to the spec, we\n // can do other discovery mechanisms if we want such as custom lookups\n // however we won't bother with that here (mostly because the spec only\n // supports .well-known right now).\n //\n // By using .well-known, we need to ensure we at least pull out a URL\n // for the homeserver. We don't really need an identity server configuration\n // but will return one anyways (with state PROMPT) to make development\n // easier for clients. If we can't get a homeserver URL, all bets are\n // off on the rest of the config and we'll assume it is invalid too.\n\n // We default to an error state to make the first few checks easier to\n // write. We'll update the properties of this object over the duration\n // of this function.\n const clientConfig: ClientConfig = {\n \"m.homeserver\": {\n state: AutoDiscovery.FAIL_ERROR,\n error: AutoDiscovery.ERROR_INVALID,\n base_url: null,\n },\n \"m.identity_server\": {\n // Technically, we don't have a problem with the identity server\n // config at this point.\n state: AutoDiscovery.PROMPT,\n error: null,\n base_url: null,\n },\n };\n\n // Step 1: Actually request the .well-known JSON file and make sure it\n // at least has a homeserver definition.\n const domainWithProtocol = domain.includes(\"://\") ? domain : `https://${domain}`;\n const wellknown = await this.fetchWellKnownObject(`${domainWithProtocol}/.well-known/matrix/client`);\n if (!wellknown || wellknown.action !== AutoDiscoveryAction.SUCCESS) {\n logger.error(\"No response or error when parsing .well-known\");\n if (wellknown.reason) logger.error(wellknown.reason);\n if (wellknown.action === AutoDiscoveryAction.IGNORE) {\n clientConfig[\"m.homeserver\"] = {\n state: AutoDiscovery.PROMPT,\n error: null,\n base_url: null,\n };\n } else {\n // this can only ever be FAIL_PROMPT at this point.\n clientConfig[\"m.homeserver\"].state = AutoDiscovery.FAIL_PROMPT;\n clientConfig[\"m.homeserver\"].error = AutoDiscovery.ERROR_INVALID;\n }\n return Promise.resolve(clientConfig);\n }\n\n // Step 2: Validate and parse the config\n return AutoDiscovery.fromDiscoveryConfig(wellknown.raw!);\n }\n\n /**\n * Gets the raw discovery client configuration for the given domain name.\n * Should only be used if there's no validation to be done on the resulting\n * object, otherwise use findClientConfig().\n * @param domain - The domain to get the client config for.\n * @returns Promise which resolves to the domain's client config. Can\n * be an empty object.\n */\n public static async getRawClientConfig(domain?: string): Promise<IClientWellKnown> {\n if (!domain || typeof domain !== \"string\" || domain.length === 0) {\n throw new Error(\"'domain' must be a string of non-zero length\");\n }\n\n const response = await this.fetchWellKnownObject(`https://${domain}/.well-known/matrix/client`);\n if (!response) return {};\n return response.raw ?? {};\n }\n\n /**\n * Sanitizes a given URL to ensure it is either an HTTP or HTTP URL and\n * is suitable for the requirements laid out by .well-known auto discovery.\n * If valid, the URL will also be stripped of any trailing slashes.\n * @param url - The potentially invalid URL to sanitize.\n * @returns The sanitized URL or a falsey value if the URL is invalid.\n * @internal\n */\n private static sanitizeWellKnownUrl(url?: string | null): string | false {\n if (!url) return false;\n\n try {\n let parsed: URL | undefined;\n try {\n parsed = new URL(url);\n } catch (e) {\n logger.error(\"Could not parse url\", e);\n }\n\n if (!parsed?.hostname) return false;\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") return false;\n\n const port = parsed.port ? `:${parsed.port}` : \"\";\n const path = parsed.pathname ? parsed.pathname : \"\";\n let saferUrl = `${parsed.protocol}//${parsed.hostname}${port}${path}`;\n if (saferUrl.endsWith(\"/\")) {\n saferUrl = saferUrl.substring(0, saferUrl.length - 1);\n }\n return saferUrl;\n } catch (e) {\n logger.error(e);\n return false;\n }\n }\n\n private static 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 static fetchFn?: typeof globalThis.fetch;\n\n public static setFetchFn(fetchFn: typeof globalThis.fetch): void {\n AutoDiscovery.fetchFn = fetchFn;\n }\n\n /**\n * Fetches a JSON object from a given URL, as expected by all .well-known\n * related lookups. If the server gives a 404 then the `action` will be\n * IGNORE. If the server returns something that isn't JSON, the `action`\n * will be FAIL_PROMPT. For any other failure the `action` will be FAIL_PROMPT.\n *\n * The returned object will be a result of the call in object form with\n * the following properties:\n * raw: The JSON object returned by the server.\n * action: One of SUCCESS, IGNORE, or FAIL_PROMPT.\n * reason: Relatively human-readable description of what went wrong.\n * error: The actual Error, if one exists.\n * @param url - The URL to fetch a JSON object from.\n * @returns Promise which resolves to the returned state.\n * @internal\n */\n private static async fetchWellKnownObject<T = IWellKnownConfig>(\n url: string,\n ): Promise<IWellKnownConfig<Partial<T>>> {\n let response: Response;\n\n try {\n response = await AutoDiscovery.fetch(url, {\n method: Method.Get,\n signal: timeoutSignal(5000),\n });\n\n if (response.status === 404) {\n return {\n raw: {},\n action: AutoDiscoveryAction.IGNORE,\n reason: AutoDiscovery.ERROR_MISSING_WELLKNOWN,\n };\n }\n\n if (response.status !== 200) {\n return {\n raw: {},\n action: AutoDiscoveryAction.FAIL_PROMPT,\n reason: \"General failure\",\n };\n }\n } catch (err) {\n const error = err as AutoDiscoveryError | string | undefined;\n let reason = \"\";\n if (typeof error === \"object\") {\n reason = (<Error>error)?.message;\n }\n\n return {\n error,\n raw: {},\n action: AutoDiscoveryAction.FAIL_PROMPT,\n reason: reason || \"General failure\",\n };\n }\n\n try {\n return {\n raw: await response.json(),\n action: AutoDiscoveryAction.SUCCESS,\n };\n } catch (err) {\n const error = err as Error;\n return {\n error,\n raw: {},\n action: AutoDiscoveryAction.FAIL_PROMPT,\n reason:\n (error as MatrixError)?.name === \"SyntaxError\"\n ? AutoDiscovery.ERROR_INVALID_JSON\n : AutoDiscovery.ERROR_INVALID,\n };\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"autodiscovery.js","names":[],"sources":["../src/autodiscovery.ts"],"sourcesContent":["/*\nCopyright 2018 New Vector Ltd\nCopyright 2019 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 IClientWellKnown, type IWellKnownConfig, type IServerVersions } from \"./client.ts\";\nimport { logger } from \"./logger.ts\";\nimport { type MatrixError, Method, timeoutSignal } from \"./http-api/index.ts\";\nimport { SUPPORTED_MATRIX_VERSIONS } from \"./version-support.ts\";\n\n// Dev note: Auto discovery is part of the spec.\n// See: https://matrix.org/docs/spec/client_server/r0.4.0.html#server-discovery\n\nexport enum AutoDiscoveryAction {\n SUCCESS = \"SUCCESS\",\n IGNORE = \"IGNORE\",\n PROMPT = \"PROMPT\",\n FAIL_PROMPT = \"FAIL_PROMPT\",\n FAIL_ERROR = \"FAIL_ERROR\",\n}\n\nexport enum AutoDiscoveryError {\n Invalid = \"Invalid homeserver discovery response\",\n GenericFailure = \"Failed to get autodiscovery configuration from server\",\n InvalidHsBaseUrl = \"Invalid base_url for m.homeserver\",\n InvalidHomeserver = \"Homeserver URL does not appear to be a valid Matrix homeserver\",\n InvalidIsBaseUrl = \"Invalid base_url for m.identity_server\",\n InvalidIdentityServer = \"Identity server URL does not appear to be a valid identity server\",\n InvalidIs = \"Invalid identity server discovery response\",\n MissingWellknown = \"No .well-known JSON file found\",\n InvalidJson = \"Invalid JSON\",\n UnsupportedHomeserverSpecVersion = \"The homeserver does not meet the version requirements\",\n\n // TODO: Implement when Sydent supports the `/versions` endpoint - https://github.com/matrix-org/sydent/issues/424\n //IdentityServerTooOld = \"The identity server does not meet the minimum version requirements\",\n}\n\ninterface AutoDiscoveryState {\n state: AutoDiscoveryAction;\n error?: IWellKnownConfig[\"error\"] | null;\n}\ninterface WellKnownConfig extends Omit<IWellKnownConfig, \"error\">, AutoDiscoveryState {}\n\nexport interface ClientConfig extends Omit<IClientWellKnown, \"m.homeserver\" | \"m.identity_server\"> {\n \"m.homeserver\": WellKnownConfig;\n \"m.identity_server\": WellKnownConfig;\n}\n\n/**\n * Utilities for automatically discovery resources, such as homeservers\n * for users to log in to.\n */\nexport class AutoDiscovery {\n // Dev note: the constants defined here are related to but not\n // exactly the same as those in the spec. This is to hopefully\n // translate the meaning of the states in the spec, but also\n // support our own if needed.\n\n public static readonly ERROR_INVALID = AutoDiscoveryError.Invalid;\n\n public static readonly ERROR_GENERIC_FAILURE = AutoDiscoveryError.GenericFailure;\n\n public static readonly ERROR_INVALID_HS_BASE_URL = AutoDiscoveryError.InvalidHsBaseUrl;\n\n public static readonly ERROR_INVALID_HOMESERVER = AutoDiscoveryError.InvalidHomeserver;\n\n public static readonly ERROR_INVALID_IS_BASE_URL = AutoDiscoveryError.InvalidIsBaseUrl;\n\n public static readonly ERROR_INVALID_IDENTITY_SERVER = AutoDiscoveryError.InvalidIdentityServer;\n\n public static readonly ERROR_INVALID_IS = AutoDiscoveryError.InvalidIs;\n\n public static readonly ERROR_MISSING_WELLKNOWN = AutoDiscoveryError.MissingWellknown;\n\n public static readonly ERROR_INVALID_JSON = AutoDiscoveryError.InvalidJson;\n\n public static readonly ERROR_UNSUPPORTED_HOMESERVER_SPEC_VERSION =\n AutoDiscoveryError.UnsupportedHomeserverSpecVersion;\n\n public static readonly ALL_ERRORS = Object.keys(AutoDiscoveryError) as AutoDiscoveryError[];\n\n /**\n * The auto discovery failed. The client is expected to communicate\n * the error to the user and refuse logging in.\n */\n public static readonly FAIL_ERROR = AutoDiscoveryAction.FAIL_ERROR;\n\n /**\n * The auto discovery failed, however the client may still recover\n * from the problem. The client is recommended to that the same\n * action it would for PROMPT while also warning the user about\n * what went wrong. The client may also treat this the same as\n * a FAIL_ERROR state.\n */\n public static readonly FAIL_PROMPT = AutoDiscoveryAction.FAIL_PROMPT;\n\n /**\n * The auto discovery didn't fail but did not find anything of\n * interest. The client is expected to prompt the user for more\n * information, or fail if it prefers.\n */\n public static readonly PROMPT = AutoDiscoveryAction.PROMPT;\n\n /**\n * The auto discovery was successful.\n */\n public static readonly SUCCESS = AutoDiscoveryAction.SUCCESS;\n\n /**\n * Validates and verifies client configuration information for purposes\n * of logging in. Such information includes the homeserver URL\n * and identity server URL the client would want. Additional details\n * may also be included, and will be transparently brought into the\n * response object unaltered.\n * @param wellknown - The configuration object itself, as returned\n * by the .well-known auto-discovery endpoint.\n * @returns Promise which resolves to the verified\n * configuration, which may include error states. Rejects on unexpected\n * failure, not when verification fails.\n */\n public static async fromDiscoveryConfig(wellknown?: IClientWellKnown): Promise<ClientConfig> {\n // Step 1 is to get the config, which is provided to us here.\n\n // We default to an error state to make the first few checks easier to\n // write. We'll update the properties of this object over the duration\n // of this function.\n const clientConfig: ClientConfig = {\n \"m.homeserver\": {\n state: AutoDiscovery.FAIL_ERROR,\n error: AutoDiscovery.ERROR_INVALID,\n base_url: null,\n },\n \"m.identity_server\": {\n // Technically, we don't have a problem with the identity server\n // config at this point.\n state: AutoDiscovery.PROMPT,\n error: null,\n base_url: null,\n },\n };\n\n if (!wellknown?.[\"m.homeserver\"]) {\n logger.error(\"No m.homeserver key in config\");\n\n clientConfig[\"m.homeserver\"].state = AutoDiscovery.FAIL_PROMPT;\n clientConfig[\"m.homeserver\"].error = AutoDiscovery.ERROR_INVALID;\n\n return Promise.resolve(clientConfig);\n }\n\n if (!wellknown[\"m.homeserver\"][\"base_url\"]) {\n logger.error(\"No m.homeserver base_url in config\");\n\n clientConfig[\"m.homeserver\"].state = AutoDiscovery.FAIL_PROMPT;\n clientConfig[\"m.homeserver\"].error = AutoDiscovery.ERROR_INVALID_HS_BASE_URL;\n\n return Promise.resolve(clientConfig);\n }\n\n // Step 2: Make sure the homeserver URL is valid *looking*. We'll make\n // sure it points to a homeserver in Step 3.\n const hsUrl = this.sanitizeWellKnownUrl(wellknown[\"m.homeserver\"][\"base_url\"]);\n if (!hsUrl) {\n logger.error(\"Invalid base_url for m.homeserver\");\n clientConfig[\"m.homeserver\"].error = AutoDiscovery.ERROR_INVALID_HS_BASE_URL;\n return Promise.resolve(clientConfig);\n }\n\n // Step 3: Make sure the homeserver URL points to a homeserver.\n const hsVersions = await this.fetchWellKnownObject<IServerVersions>(`${hsUrl}/_matrix/client/versions`);\n if (!hsVersions || !Array.isArray(hsVersions.raw?.[\"versions\"])) {\n logger.error(\"Invalid /versions response\");\n clientConfig[\"m.homeserver\"].error = AutoDiscovery.ERROR_INVALID_HOMESERVER;\n\n // Supply the base_url to the caller because they may be ignoring liveliness\n // errors, like this one.\n clientConfig[\"m.homeserver\"].base_url = hsUrl;\n\n return Promise.resolve(clientConfig);\n }\n\n // Step 3.1: Non-spec check to ensure the server will actually work for us. We need to check if\n // any of the versions in `SUPPORTED_MATRIX_VERSIONS` are listed in the /versions response.\n const hsVersionSet = new Set(hsVersions.raw![\"versions\"]);\n let supportedVersionFound = false;\n for (const version of SUPPORTED_MATRIX_VERSIONS) {\n if (hsVersionSet.has(version)) {\n supportedVersionFound = true;\n break;\n }\n }\n if (!supportedVersionFound) {\n logger.error(\"Homeserver does not meet version requirements\");\n clientConfig[\"m.homeserver\"].error = AutoDiscovery.ERROR_UNSUPPORTED_HOMESERVER_SPEC_VERSION;\n\n // Supply the base_url to the caller because they may be ignoring liveliness\n // errors, like this one.\n clientConfig[\"m.homeserver\"].base_url = hsUrl;\n\n return Promise.resolve(clientConfig);\n }\n\n // Step 4: Now that the homeserver looks valid, update our client config.\n clientConfig[\"m.homeserver\"] = {\n state: AutoDiscovery.SUCCESS,\n error: null,\n base_url: hsUrl,\n };\n\n // Step 5: Try to pull out the identity server configuration\n let isUrl: string | boolean = \"\";\n if (wellknown[\"m.identity_server\"]) {\n // We prepare a failing identity server response to save lines later\n // in this branch.\n const failingClientConfig: ClientConfig = {\n \"m.homeserver\": clientConfig[\"m.homeserver\"],\n \"m.identity_server\": {\n state: AutoDiscovery.FAIL_PROMPT,\n error: AutoDiscovery.ERROR_INVALID_IS,\n base_url: null,\n },\n };\n\n // Step 5a: Make sure the URL is valid *looking*. We'll make sure it\n // points to an identity server in Step 5b.\n isUrl = this.sanitizeWellKnownUrl(wellknown[\"m.identity_server\"][\"base_url\"]);\n if (!isUrl) {\n logger.error(\"Invalid base_url for m.identity_server\");\n failingClientConfig[\"m.identity_server\"].error = AutoDiscovery.ERROR_INVALID_IS_BASE_URL;\n return Promise.resolve(failingClientConfig);\n }\n\n // Step 5b: Verify there is an identity server listening on the provided\n // URL.\n const isResponse = await this.fetchWellKnownObject(`${isUrl}/_matrix/identity/v2`);\n if (!isResponse?.raw || isResponse.action !== AutoDiscoveryAction.SUCCESS) {\n logger.error(\"Invalid /v2 response\");\n failingClientConfig[\"m.identity_server\"].error = AutoDiscovery.ERROR_INVALID_IDENTITY_SERVER;\n\n // Supply the base_url to the caller because they may be ignoring\n // liveliness errors, like this one.\n failingClientConfig[\"m.identity_server\"].base_url = isUrl;\n\n return Promise.resolve(failingClientConfig);\n }\n }\n\n // Step 6: Now that the identity server is valid, or never existed,\n // populate the IS section.\n if (isUrl && isUrl.toString().length > 0) {\n clientConfig[\"m.identity_server\"] = {\n state: AutoDiscovery.SUCCESS,\n error: null,\n base_url: isUrl,\n };\n }\n\n // Step 7: Copy any other keys directly into the clientConfig. This is for\n // things like custom configuration of services.\n Object.keys(wellknown).forEach((k: keyof IClientWellKnown) => {\n if (k === \"m.homeserver\" || k === \"m.identity_server\") {\n // Only copy selected parts of the config to avoid overwriting\n // properties computed by the validation logic above.\n const notProps = [\"error\", \"state\", \"base_url\"];\n for (const prop of Object.keys(wellknown[k]!)) {\n if (notProps.includes(prop)) continue;\n type Prop = Exclude<keyof IWellKnownConfig, \"error\" | \"state\" | \"base_url\">;\n // @ts-ignore - ts gets unhappy as we're mixing types here\n clientConfig[k][prop as Prop] = wellknown[k]![prop as Prop];\n }\n } else {\n // Just copy the whole thing over otherwise\n clientConfig[k] = wellknown[k];\n }\n });\n\n // Step 8: Give the config to the caller (finally)\n return Promise.resolve(clientConfig);\n }\n\n /**\n * Attempts to automatically discover client configuration information\n * prior to logging in. Such information includes the homeserver URL\n * and identity server URL the client would want. Additional details\n * may also be discovered, and will be transparently included in the\n * response object unaltered.\n * @param domain - The homeserver domain to perform discovery\n * on. For example, \"matrix.org\".\n * @returns Promise which resolves to the discovered\n * configuration, which may include error states. Rejects on unexpected\n * failure, not when discovery fails.\n */\n public static async findClientConfig(domain: string): Promise<ClientConfig> {\n if (!domain || typeof domain !== \"string\" || domain.length === 0) {\n throw new Error(\"'domain' must be a string of non-zero length\");\n }\n\n // We use a .well-known lookup for all cases. According to the spec, we\n // can do other discovery mechanisms if we want such as custom lookups\n // however we won't bother with that here (mostly because the spec only\n // supports .well-known right now).\n //\n // By using .well-known, we need to ensure we at least pull out a URL\n // for the homeserver. We don't really need an identity server configuration\n // but will return one anyways (with state PROMPT) to make development\n // easier for clients. If we can't get a homeserver URL, all bets are\n // off on the rest of the config and we'll assume it is invalid too.\n\n // We default to an error state to make the first few checks easier to\n // write. We'll update the properties of this object over the duration\n // of this function.\n const clientConfig: ClientConfig = {\n \"m.homeserver\": {\n state: AutoDiscovery.FAIL_ERROR,\n error: AutoDiscovery.ERROR_INVALID,\n base_url: null,\n },\n \"m.identity_server\": {\n // Technically, we don't have a problem with the identity server\n // config at this point.\n state: AutoDiscovery.PROMPT,\n error: null,\n base_url: null,\n },\n };\n\n // Step 1: Actually request the .well-known JSON file and make sure it\n // at least has a homeserver definition.\n const domainWithProtocol = domain.includes(\"://\") ? domain : `https://${domain}`;\n const wellknown = await this.fetchWellKnownObject(`${domainWithProtocol}/.well-known/matrix/client`);\n if (!wellknown || wellknown.action !== AutoDiscoveryAction.SUCCESS) {\n logger.error(\"No response or error when parsing .well-known\");\n if (wellknown.reason) logger.error(wellknown.reason);\n if (wellknown.action === AutoDiscoveryAction.IGNORE) {\n clientConfig[\"m.homeserver\"] = {\n state: AutoDiscovery.PROMPT,\n error: null,\n base_url: null,\n };\n } else {\n // this can only ever be FAIL_PROMPT at this point.\n clientConfig[\"m.homeserver\"].state = AutoDiscovery.FAIL_PROMPT;\n clientConfig[\"m.homeserver\"].error = AutoDiscovery.ERROR_INVALID;\n }\n return Promise.resolve(clientConfig);\n }\n\n // Step 2: Validate and parse the config\n return AutoDiscovery.fromDiscoveryConfig(wellknown.raw!);\n }\n\n /**\n * Gets the raw discovery client configuration for the given domain name.\n * Should only be used if there's no validation to be done on the resulting\n * object, otherwise use findClientConfig().\n * @param domain - The domain to get the client config for.\n * @returns Promise which resolves to the domain's client config. Can\n * be an empty object.\n */\n public static async getRawClientConfig(domain?: string): Promise<IClientWellKnown> {\n if (!domain || typeof domain !== \"string\" || domain.length === 0) {\n throw new Error(\"'domain' must be a string of non-zero length\");\n }\n\n const response = await this.fetchWellKnownObject(`https://${domain}/.well-known/matrix/client`);\n if (!response) return {};\n return response.raw ?? {};\n }\n\n /**\n * Sanitizes a given URL to ensure it is either an HTTP or HTTP URL and\n * is suitable for the requirements laid out by .well-known auto discovery.\n * If valid, the URL will also be stripped of any trailing slashes.\n * @param url - The potentially invalid URL to sanitize.\n * @returns The sanitized URL or a falsey value if the URL is invalid.\n * @internal\n */\n private static sanitizeWellKnownUrl(url?: string | null): string | false {\n if (!url) return false;\n\n try {\n let parsed: URL | undefined;\n try {\n parsed = new URL(url);\n } catch (e) {\n logger.error(\"Could not parse url\", e);\n }\n\n if (!parsed?.hostname) return false;\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") return false;\n\n const port = parsed.port ? `:${parsed.port}` : \"\";\n const path = parsed.pathname ? parsed.pathname : \"\";\n let saferUrl = `${parsed.protocol}//${parsed.hostname}${port}${path}`;\n if (saferUrl.endsWith(\"/\")) {\n saferUrl = saferUrl.substring(0, saferUrl.length - 1);\n }\n return saferUrl;\n } catch (e) {\n logger.error(e);\n return false;\n }\n }\n\n private static 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 static fetchFn?: typeof globalThis.fetch;\n\n public static setFetchFn(fetchFn: typeof globalThis.fetch): void {\n AutoDiscovery.fetchFn = fetchFn;\n }\n\n /**\n * Fetches a JSON object from a given URL, as expected by all .well-known\n * related lookups. If the server gives a 404 then the `action` will be\n * IGNORE. If the server returns something that isn't JSON, the `action`\n * will be FAIL_PROMPT. For any other failure the `action` will be FAIL_PROMPT.\n *\n * The returned object will be a result of the call in object form with\n * the following properties:\n * raw: The JSON object returned by the server.\n * action: One of SUCCESS, IGNORE, or FAIL_PROMPT.\n * reason: Relatively human-readable description of what went wrong.\n * error: The actual Error, if one exists.\n * @param url - The URL to fetch a JSON object from.\n * @returns Promise which resolves to the returned state.\n * @internal\n */\n private static async fetchWellKnownObject<T = IWellKnownConfig>(\n url: string,\n ): Promise<IWellKnownConfig<Partial<T>>> {\n let response: Response;\n\n try {\n response = await AutoDiscovery.fetch(url, {\n method: Method.Get,\n signal: timeoutSignal(5000),\n });\n\n if (response.status === 404) {\n return {\n raw: {},\n action: AutoDiscoveryAction.IGNORE,\n reason: AutoDiscovery.ERROR_MISSING_WELLKNOWN,\n };\n }\n\n if (response.status !== 200) {\n return {\n raw: {},\n action: AutoDiscoveryAction.FAIL_PROMPT,\n reason: \"General failure\",\n };\n }\n } catch (err) {\n const error = err as AutoDiscoveryError | string | undefined;\n let reason = \"\";\n if (typeof error === \"object\") {\n reason = (<Error>error)?.message;\n }\n\n return {\n error,\n raw: {},\n action: AutoDiscoveryAction.FAIL_PROMPT,\n reason: reason || \"General failure\",\n };\n }\n\n try {\n return {\n raw: await response.json(),\n action: AutoDiscoveryAction.SUCCESS,\n };\n } catch (err) {\n const error = err as Error;\n return {\n error,\n raw: {},\n action: AutoDiscoveryAction.FAIL_PROMPT,\n reason:\n (error as MatrixError)?.name === \"SyntaxError\"\n ? AutoDiscovery.ERROR_INVALID_JSON\n : AutoDiscovery.ERROR_INVALID,\n };\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/lib/base64.js CHANGED
@@ -25,7 +25,7 @@ function toBase64(uint8Array, options) {
25
25
  // https://tc39.es/proposal-arraybuffer-base64/spec/#sec-uint8array.prototype.tobase64
26
26
  return uint8Array.toBase64(options);
27
27
  }
28
- var base64 = btoa(uint8Array.reduce((acc, current) => acc + String.fromCharCode(current), ""));
28
+ let base64 = btoa(uint8Array.reduce((acc, current) => acc + String.fromCharCode(current), ""));
29
29
  if (options.omitPadding) {
30
30
  base64 = base64.replace(/={1,2}$/, "");
31
31
  }
package/lib/base64.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"base64.js","names":["toBase64","uint8Array","options","base64","btoa","reduce","acc","current","String","fromCharCode","omitPadding","replace","alphabet","encodeBase64","encodeUnpaddedBase64","encodeUnpaddedBase64Url","fromBase64","Uint8Array","from","atob","c","charCodeAt","decodeBase64","lastChunkHandling"],"sources":["../src/base64.ts"],"sourcesContent":["/*\nCopyright 2023 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\n/**\n * Base64 encoding and decoding utilities\n */\n\nfunction toBase64(uint8Array: Uint8Array, options: Uint8ArrayToBase64Options): string {\n if (typeof uint8Array.toBase64 === \"function\") {\n // Currently this is only supported in Firefox,\n // but we match the options in the hope in the future we can rely on it for all environments.\n // https://tc39.es/proposal-arraybuffer-base64/spec/#sec-uint8array.prototype.tobase64\n return uint8Array.toBase64(options);\n }\n\n let base64 = btoa(uint8Array.reduce((acc, current) => acc + String.fromCharCode(current), \"\"));\n if (options.omitPadding) {\n base64 = base64.replace(/={1,2}$/, \"\");\n }\n if (options.alphabet === \"base64url\") {\n base64 = base64.replace(/\\+/g, \"-\").replace(/\\//g, \"_\");\n }\n\n return base64;\n}\n\n/**\n * Encode a typed array of uint8 as base64.\n * @param uint8Array - The data to encode.\n * @returns The base64.\n */\nexport function encodeBase64(uint8Array: Uint8Array): string {\n return toBase64(uint8Array, { alphabet: \"base64\", omitPadding: false });\n}\n\n/**\n * Encode a typed array of uint8 as unpadded base64.\n * @param uint8Array - The data to encode.\n * @returns The unpadded base64.\n */\nexport function encodeUnpaddedBase64(uint8Array: Uint8Array): string {\n return toBase64(uint8Array, { alphabet: \"base64\", omitPadding: true });\n}\n\n/**\n * Encode a typed array of uint8 as unpadded base64 using the URL-safe encoding.\n * @param uint8Array - The data to encode.\n * @returns The unpadded base64.\n */\nexport function encodeUnpaddedBase64Url(uint8Array: Uint8Array): string {\n return toBase64(uint8Array, { alphabet: \"base64url\", omitPadding: true });\n}\n\nfunction fromBase64(base64: string, options: Uint8ArrayFromBase64Options): Uint8Array<ArrayBuffer> {\n if (typeof Uint8Array.fromBase64 === \"function\") {\n // Currently this is only supported in Firefox,\n // but we match the options in the hope in the future we can rely on it for all environments.\n // https://tc39.es/proposal-arraybuffer-base64/spec/#sec-uint8array.frombase64\n return Uint8Array.fromBase64(base64, options);\n }\n\n return Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));\n}\n\n/**\n * Decode a base64 (or base64url) string to a typed array of uint8.\n * @param base64 - The base64 to decode.\n * @returns The decoded data.\n */\nexport function decodeBase64(base64: string): Uint8Array<ArrayBuffer> {\n // The function requires us to select an alphabet, but we don't know if base64url was used so we convert.\n return fromBase64(base64.replace(/-/g, \"+\").replace(/_/g, \"/\"), { alphabet: \"base64\", lastChunkHandling: \"loose\" });\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,SAASA,QAAQA,CAACC,UAAsB,EAAEC,OAAkC,EAAU;EAClF,IAAI,OAAOD,UAAU,CAACD,QAAQ,KAAK,UAAU,EAAE;IAC3C;IACA;IACA;IACA,OAAOC,UAAU,CAACD,QAAQ,CAACE,OAAO,CAAC;EACvC;EAEA,IAAIC,MAAM,GAAGC,IAAI,CAACH,UAAU,CAACI,MAAM,CAAC,CAACC,GAAG,EAAEC,OAAO,KAAKD,GAAG,GAAGE,MAAM,CAACC,YAAY,CAACF,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;EAC9F,IAAIL,OAAO,CAACQ,WAAW,EAAE;IACrBP,MAAM,GAAGA,MAAM,CAACQ,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;EAC1C;EACA,IAAIT,OAAO,CAACU,QAAQ,KAAK,WAAW,EAAE;IAClCT,MAAM,GAAGA,MAAM,CAACQ,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAACA,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;EAC3D;EAEA,OAAOR,MAAM;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASU,YAAYA,CAACZ,UAAsB,EAAU;EACzD,OAAOD,QAAQ,CAACC,UAAU,EAAE;IAAEW,QAAQ,EAAE,QAAQ;IAAEF,WAAW,EAAE;EAAM,CAAC,CAAC;AAC3E;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,oBAAoBA,CAACb,UAAsB,EAAU;EACjE,OAAOD,QAAQ,CAACC,UAAU,EAAE;IAAEW,QAAQ,EAAE,QAAQ;IAAEF,WAAW,EAAE;EAAK,CAAC,CAAC;AAC1E;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASK,uBAAuBA,CAACd,UAAsB,EAAU;EACpE,OAAOD,QAAQ,CAACC,UAAU,EAAE;IAAEW,QAAQ,EAAE,WAAW;IAAEF,WAAW,EAAE;EAAK,CAAC,CAAC;AAC7E;AAEA,SAASM,UAAUA,CAACb,MAAc,EAAED,OAAoC,EAA2B;EAC/F,IAAI,OAAOe,UAAU,CAACD,UAAU,KAAK,UAAU,EAAE;IAC7C;IACA;IACA;IACA,OAAOC,UAAU,CAACD,UAAU,CAACb,MAAM,EAAED,OAAO,CAAC;EACjD;EAEA,OAAOe,UAAU,CAACC,IAAI,CAACC,IAAI,CAAChB,MAAM,CAAC,EAAGiB,CAAC,IAAKA,CAAC,CAACC,UAAU,CAAC,CAAC,CAAC,CAAC;AAChE;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CAACnB,MAAc,EAA2B;EAClE;EACA,OAAOa,UAAU,CAACb,MAAM,CAACQ,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;IAAEC,QAAQ,EAAE,QAAQ;IAAEW,iBAAiB,EAAE;EAAQ,CAAC,CAAC;AACvH","ignoreList":[]}
1
+ {"version":3,"file":"base64.js","names":[],"sources":["../src/base64.ts"],"sourcesContent":["/*\nCopyright 2023 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\n/**\n * Base64 encoding and decoding utilities\n */\n\nfunction toBase64(uint8Array: Uint8Array, options: Uint8ArrayToBase64Options): string {\n if (typeof uint8Array.toBase64 === \"function\") {\n // Currently this is only supported in Firefox,\n // but we match the options in the hope in the future we can rely on it for all environments.\n // https://tc39.es/proposal-arraybuffer-base64/spec/#sec-uint8array.prototype.tobase64\n return uint8Array.toBase64(options);\n }\n\n let base64 = btoa(uint8Array.reduce((acc, current) => acc + String.fromCharCode(current), \"\"));\n if (options.omitPadding) {\n base64 = base64.replace(/={1,2}$/, \"\");\n }\n if (options.alphabet === \"base64url\") {\n base64 = base64.replace(/\\+/g, \"-\").replace(/\\//g, \"_\");\n }\n\n return base64;\n}\n\n/**\n * Encode a typed array of uint8 as base64.\n * @param uint8Array - The data to encode.\n * @returns The base64.\n */\nexport function encodeBase64(uint8Array: Uint8Array): string {\n return toBase64(uint8Array, { alphabet: \"base64\", omitPadding: false });\n}\n\n/**\n * Encode a typed array of uint8 as unpadded base64.\n * @param uint8Array - The data to encode.\n * @returns The unpadded base64.\n */\nexport function encodeUnpaddedBase64(uint8Array: Uint8Array): string {\n return toBase64(uint8Array, { alphabet: \"base64\", omitPadding: true });\n}\n\n/**\n * Encode a typed array of uint8 as unpadded base64 using the URL-safe encoding.\n * @param uint8Array - The data to encode.\n * @returns The unpadded base64.\n */\nexport function encodeUnpaddedBase64Url(uint8Array: Uint8Array): string {\n return toBase64(uint8Array, { alphabet: \"base64url\", omitPadding: true });\n}\n\nfunction fromBase64(base64: string, options: Uint8ArrayFromBase64Options): Uint8Array<ArrayBuffer> {\n if (typeof Uint8Array.fromBase64 === \"function\") {\n // Currently this is only supported in Firefox,\n // but we match the options in the hope in the future we can rely on it for all environments.\n // https://tc39.es/proposal-arraybuffer-base64/spec/#sec-uint8array.frombase64\n return Uint8Array.fromBase64(base64, options);\n }\n\n return Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));\n}\n\n/**\n * Decode a base64 (or base64url) string to a typed array of uint8.\n * @param base64 - The base64 to decode.\n * @returns The decoded data.\n */\nexport function decodeBase64(base64: string): Uint8Array<ArrayBuffer> {\n // The function requires us to select an alphabet, but we don't know if base64url was used so we convert.\n return fromBase64(base64.replace(/-/g, \"+\").replace(/_/g, \"/\"), { alphabet: \"base64\", lastChunkHandling: \"loose\" });\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,SAAS,QAAQ,CAAC,UAAsB,EAAE,OAAkC,EAAU;EAClF,IAAI,OAAO,UAAU,CAAC,QAAQ,KAAK,UAAU,EAAE;IAC3C;IACA;IACA;IACA,OAAO,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC;EACvC;EAEA,IAAI,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;EAC9F,IAAI,OAAO,CAAC,WAAW,EAAE;IACrB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;EAC1C;EACA,IAAI,OAAO,CAAC,QAAQ,KAAK,WAAW,EAAE;IAClC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;EAC3D;EAEA,OAAO,MAAM;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAAS,YAAY,CAAC,UAAsB,EAAU;EACzD,OAAO,QAAQ,CAAC,UAAU,EAAE;IAAE,QAAQ,EAAE,QAAQ;IAAE,WAAW,EAAE;EAAM,CAAC,CAAC;AAC3E;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAAS,oBAAoB,CAAC,UAAsB,EAAU;EACjE,OAAO,QAAQ,CAAC,UAAU,EAAE;IAAE,QAAQ,EAAE,QAAQ;IAAE,WAAW,EAAE;EAAK,CAAC,CAAC;AAC1E;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAAS,uBAAuB,CAAC,UAAsB,EAAU;EACpE,OAAO,QAAQ,CAAC,UAAU,EAAE;IAAE,QAAQ,EAAE,WAAW;IAAE,WAAW,EAAE;EAAK,CAAC,CAAC;AAC7E;AAEA,SAAS,UAAU,CAAC,MAAc,EAAE,OAAoC,EAA2B;EAC/F,IAAI,OAAO,UAAU,CAAC,UAAU,KAAK,UAAU,EAAE;IAC7C;IACA;IACA;IACA,OAAO,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC;EACjD;EAEA,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAG,CAAC,IAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAChE;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAAS,YAAY,CAAC,MAAc,EAA2B;EAClE;EACA,OAAO,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;IAAE,QAAQ,EAAE,QAAQ;IAAE,iBAAiB,EAAE;EAAQ,CAAC,CAAC;AACvH","ignoreList":[]}
@@ -1,5 +1,5 @@
1
- import * as matrixcs from "./matrix.ts";
2
- type BrowserMatrix = typeof matrixcs;
1
+ import * as sdk from "./matrix.ts";
2
+ type BrowserMatrix = typeof sdk;
3
3
  declare global {
4
4
  var __js_sdk_entrypoint: boolean;
5
5
  var matrixcs: BrowserMatrix;
@@ -1 +1 @@
1
- {"version":3,"file":"browser-index.d.ts","sourceRoot":"","sources":["../src/browser-index.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAC;AAExC,KAAK,aAAa,GAAG,OAAO,QAAQ,CAAC;AACrC,OAAO,CAAC,MAAM,CAAC;IAEX,IAAI,mBAAmB,EAAE,OAAO,CAAC;IACjC,IAAI,QAAQ,EAAE,aAAa,CAAC;CAE/B;AAkBD,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"browser-index.d.ts","sourceRoot":"","sources":["../src/browser-index.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AAEnC,KAAK,aAAa,GAAG,OAAO,GAAG,CAAC;AAChC,OAAO,CAAC,MAAM,CAAC;IAEX,IAAI,mBAAmB,EAAE,OAAO,CAAC;IACjC,IAAI,QAAQ,EAAE,aAAa,CAAC;CAE/B;AAkBD,cAAc,aAAa,CAAC"}
@@ -14,22 +14,22 @@ See the License for the specific language governing permissions and
14
14
  limitations under the License.
15
15
  */
16
16
 
17
- import * as matrixcs from "./matrix.js";
17
+ import * as sdk from "./matrix.js";
18
18
  if (globalThis.__js_sdk_entrypoint) {
19
19
  throw new Error("Multiple matrix-js-sdk entrypoints detected!");
20
20
  }
21
21
  globalThis.__js_sdk_entrypoint = true;
22
22
 
23
23
  // just *accessing* indexedDB throws an exception in firefox with indexeddb disabled.
24
- var indexedDB;
24
+ let indexedDB;
25
25
  try {
26
26
  indexedDB = globalThis.indexedDB;
27
- } catch (_unused) {}
27
+ } catch {}
28
28
 
29
29
  // if our browser (appears to) support indexeddb, use an indexeddb crypto store.
30
30
  if (indexedDB) {
31
- matrixcs.setCryptoStoreFactory(() => new matrixcs.IndexedDBCryptoStore(indexedDB, "matrix-js-sdk:crypto"));
31
+ sdk.setCryptoStoreFactory(() => new sdk.IndexedDBCryptoStore(indexedDB, "matrix-js-sdk:crypto"));
32
32
  }
33
33
  export * from "./matrix.js";
34
- globalThis.matrixcs = matrixcs;
34
+ globalThis.matrixcs = sdk;
35
35
  //# sourceMappingURL=browser-index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser-index.js","names":["matrixcs","globalThis","__js_sdk_entrypoint","Error","indexedDB","_unused","setCryptoStoreFactory","IndexedDBCryptoStore"],"sources":["../src/browser-index.ts"],"sourcesContent":["/*\nCopyright 2019 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 * as matrixcs from \"./matrix.ts\";\n\ntype BrowserMatrix = typeof matrixcs;\ndeclare global {\n /* eslint-disable no-var, camelcase */\n var __js_sdk_entrypoint: boolean;\n var matrixcs: BrowserMatrix;\n /* eslint-enable no-var */\n}\n\nif (globalThis.__js_sdk_entrypoint) {\n throw new Error(\"Multiple matrix-js-sdk entrypoints detected!\");\n}\nglobalThis.__js_sdk_entrypoint = true;\n\n// just *accessing* indexedDB throws an exception in firefox with indexeddb disabled.\nlet indexedDB: IDBFactory | undefined;\ntry {\n indexedDB = globalThis.indexedDB;\n} catch {}\n\n// if our browser (appears to) support indexeddb, use an indexeddb crypto store.\nif (indexedDB) {\n matrixcs.setCryptoStoreFactory(() => new matrixcs.IndexedDBCryptoStore(indexedDB!, \"matrix-js-sdk:crypto\"));\n}\n\nexport * from \"./matrix.ts\";\nglobalThis.matrixcs = matrixcs;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,KAAKA,QAAQ,MAAM,aAAa;AAUvC,IAAIC,UAAU,CAACC,mBAAmB,EAAE;EAChC,MAAM,IAAIC,KAAK,CAAC,8CAA8C,CAAC;AACnE;AACAF,UAAU,CAACC,mBAAmB,GAAG,IAAI;;AAErC;AACA,IAAIE,SAAiC;AACrC,IAAI;EACAA,SAAS,GAAGH,UAAU,CAACG,SAAS;AACpC,CAAC,CAAC,OAAAC,OAAA,EAAM,CAAC;;AAET;AACA,IAAID,SAAS,EAAE;EACXJ,QAAQ,CAACM,qBAAqB,CAAC,MAAM,IAAIN,QAAQ,CAACO,oBAAoB,CAACH,SAAS,EAAG,sBAAsB,CAAC,CAAC;AAC/G;AAEA,cAAc,aAAa;AAC3BH,UAAU,CAACD,QAAQ,GAAGA,QAAQ","ignoreList":[]}
1
+ {"version":3,"file":"browser-index.js","names":[],"sources":["../src/browser-index.ts"],"sourcesContent":["/*\nCopyright 2019 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 * as sdk from \"./matrix.ts\";\n\ntype BrowserMatrix = typeof sdk;\ndeclare global {\n /* eslint-disable no-var, camelcase */\n var __js_sdk_entrypoint: boolean;\n var matrixcs: BrowserMatrix;\n /* eslint-enable no-var */\n}\n\nif (globalThis.__js_sdk_entrypoint) {\n throw new Error(\"Multiple matrix-js-sdk entrypoints detected!\");\n}\nglobalThis.__js_sdk_entrypoint = true;\n\n// just *accessing* indexedDB throws an exception in firefox with indexeddb disabled.\nlet indexedDB: IDBFactory | undefined;\ntry {\n indexedDB = globalThis.indexedDB;\n} catch {}\n\n// if our browser (appears to) support indexeddb, use an indexeddb crypto store.\nif (indexedDB) {\n sdk.setCryptoStoreFactory(() => new sdk.IndexedDBCryptoStore(indexedDB!, \"matrix-js-sdk:crypto\"));\n}\n\nexport * from \"./matrix.ts\";\nglobalThis.matrixcs = sdk;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,KAAK,GAAG,MAAM,aAAa;AAUlC,IAAI,UAAU,CAAC,mBAAmB,EAAE;EAChC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC;AACnE;AACA,UAAU,CAAC,mBAAmB,GAAG,IAAI;;AAErC;AACA,IAAI,SAAiC;AACrC,IAAI;EACA,SAAS,GAAG,UAAU,CAAC,SAAS;AACpC,CAAC,CAAC,MAAM,CAAC;;AAET;AACA,IAAI,SAAS,EAAE;EACX,GAAG,CAAC,qBAAqB,CAAC,MAAM,IAAI,GAAG,CAAC,oBAAoB,CAAC,SAAS,EAAG,sBAAsB,CAAC,CAAC;AACrG;AAEA,cAAc,aAAa;AAC3B,UAAU,CAAC,QAAQ,GAAG,GAAG","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 2026 Element Creations Ltd.
@@ -22,43 +21,41 @@ import { deepCompare } from "./utils.js";
22
21
 
23
22
  // How often we update the server capabilities.
24
23
  // 6 hours - an arbitrary value, but they should change very infrequently.
25
- var CAPABILITIES_CACHE_MS = 6 * 60 * 60 * 1000;
24
+ const CAPABILITIES_CACHE_MS = 6 * 60 * 60 * 1000;
26
25
 
27
26
  // How long we want before retrying if we couldn't fetch
28
- var CAPABILITIES_RETRY_MS = 30 * 1000;
27
+ const CAPABILITIES_RETRY_MS = 30 * 1000;
29
28
 
30
29
  /**
31
30
  * Manages storing and periodically refreshing the server capabilities.
32
31
  */
33
32
  export class CapabilityPoller extends TypedEventEmitter {
34
33
  constructor(logger, http, name) {
35
- var _this;
36
34
  super();
37
- _this = this;
38
- this.logger = logger;
39
- this.http = http;
40
- this.name = name;
41
35
  _defineProperty(this, "cached", void 0);
42
36
  _defineProperty(this, "retryTimeout", void 0);
43
37
  _defineProperty(this, "refreshTimeout", void 0);
44
- _defineProperty(this, "poll", /*#__PURE__*/_asyncToGenerator(function* () {
45
- _this.logger.debug("Checking capabilites");
38
+ _defineProperty(this, "poll", async () => {
39
+ this.logger.debug("Checking capabilites");
46
40
  try {
47
- var current = _this.cached;
48
- yield _this.fetch();
49
- _this.clearTimeouts();
50
- _this.refreshTimeout = globalThis.setTimeout(_this.poll, CAPABILITIES_CACHE_MS);
51
- _this.logger.debug("Fetched new server ".concat(_this.name));
52
- if (_this.cached && !deepCompare(current, _this.cached)) {
53
- _this.emit("update", _this.cached);
41
+ const current = this.cached;
42
+ await this.fetch();
43
+ this.clearTimeouts();
44
+ this.refreshTimeout = globalThis.setTimeout(this.poll, CAPABILITIES_CACHE_MS);
45
+ this.logger.debug(`Fetched new server ${this.name}`);
46
+ if (this.cached && !deepCompare(current, this.cached)) {
47
+ this.emit("update", this.cached);
54
48
  }
55
49
  } catch (e) {
56
- _this.clearTimeouts();
57
- var howLong = Math.floor(CAPABILITIES_RETRY_MS + Math.random() * 5000);
58
- _this.retryTimeout = globalThis.setTimeout(_this.poll, howLong);
59
- _this.logger.warn("Failed to refresh ".concat(_this.name, ": retrying in ").concat(howLong, "ms"), e);
50
+ this.clearTimeouts();
51
+ const howLong = Math.floor(CAPABILITIES_RETRY_MS + Math.random() * 5000);
52
+ this.retryTimeout = globalThis.setTimeout(this.poll, howLong);
53
+ this.logger.warn(`Failed to refresh ${this.name}: retrying in ${howLong}ms`, e);
60
54
  }
61
- }));
55
+ });
56
+ this.logger = logger;
57
+ this.http = http;
58
+ this.name = name;
62
59
  }
63
60
 
64
61
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"capabilityPoller.js","names":["TypedEventEmitter","deepCompare","CAPABILITIES_CACHE_MS","CAPABILITIES_RETRY_MS","CapabilityPoller","constructor","logger","http","name","_this","this","_defineProperty","_asyncToGenerator","debug","current","cached","fetch","clearTimeouts","refreshTimeout","globalThis","setTimeout","poll","concat","emit","e","howLong","Math","floor","random","retryTimeout","warn","start","then","stop","getCached","clearInterval","undefined","clearTimeout"],"sources":["../src/capabilityPoller.ts"],"sourcesContent":["/*\nCopyright 2026 Element Creations Ltd.\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 { type IHttpOpts, type MatrixHttpApi } from \"./http-api/index.ts\";\nimport { type Logger } from \"./logger.ts\";\nimport { TypedEventEmitter } from \"./models/typed-event-emitter.ts\";\nimport { deepCompare } from \"./utils.ts\";\n\n// How often we update the server capabilities.\n// 6 hours - an arbitrary value, but they should change very infrequently.\nconst CAPABILITIES_CACHE_MS = 6 * 60 * 60 * 1000;\n\n// How long we want before retrying if we couldn't fetch\nconst CAPABILITIES_RETRY_MS = 30 * 1000;\n\n/**\n * Manages storing and periodically refreshing the server capabilities.\n */\nexport abstract class CapabilityPoller<ResponseType> extends TypedEventEmitter<\n \"update\",\n { update: (data: ResponseType) => void }\n> {\n protected cached?: ResponseType;\n private retryTimeout?: ReturnType<typeof setTimeout>;\n private refreshTimeout?: ReturnType<typeof setInterval>;\n\n public constructor(\n protected readonly logger: Logger,\n protected readonly http: MatrixHttpApi<IHttpOpts & { onlyData: true }>,\n private readonly name: string,\n ) {\n super();\n }\n\n /**\n * Starts periodically fetching the server capabilities.\n */\n public start(): void {\n this.poll().then();\n }\n\n /**\n * Stops the service\n */\n public stop(): void {\n this.clearTimeouts();\n }\n\n /**\n * Returns the cached capabilities, or undefined if none are cached.\n * @returns the current capabilities, if any.\n */\n public getCached(): ResponseType | undefined {\n return this.cached;\n }\n\n public abstract fetch(): Promise<ResponseType>;\n\n private poll = async (): Promise<void> => {\n this.logger.debug(\"Checking capabilites\");\n try {\n const current = this.cached;\n await this.fetch();\n this.clearTimeouts();\n this.refreshTimeout = globalThis.setTimeout(this.poll, CAPABILITIES_CACHE_MS);\n this.logger.debug(`Fetched new server ${this.name}`);\n if (this.cached && !deepCompare(current, this.cached)) {\n this.emit(\"update\", this.cached);\n }\n } catch (e) {\n this.clearTimeouts();\n const howLong = Math.floor(CAPABILITIES_RETRY_MS + Math.random() * 5000);\n this.retryTimeout = globalThis.setTimeout(this.poll, howLong);\n this.logger.warn(`Failed to refresh ${this.name}: retrying in ${howLong}ms`, e);\n }\n };\n\n private clearTimeouts(): void {\n if (this.refreshTimeout) {\n clearInterval(this.refreshTimeout);\n this.refreshTimeout = undefined;\n }\n if (this.retryTimeout) {\n clearTimeout(this.retryTimeout);\n this.retryTimeout = undefined;\n }\n }\n}\n"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,SAASA,iBAAiB,QAAQ,iCAAiC;AACnE,SAASC,WAAW,QAAQ,YAAY;;AAExC;AACA;AACA,IAAMC,qBAAqB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;;AAEhD;AACA,IAAMC,qBAAqB,GAAG,EAAE,GAAG,IAAI;;AAEvC;AACA;AACA;AACA,OAAO,MAAeC,gBAAgB,SAAuBJ,iBAAiB,CAG5E;EAKSK,WAAWA,CACKC,MAAc,EACdC,IAAmD,EACrDC,IAAY,EAC/B;IAAA,IAAAC,KAAA;IACE,KAAK,CAAC,CAAC;IAAAA,KAAA,GAAAC,IAAA;IAAA,KAJYJ,MAAc,GAAdA,MAAc;IAAA,KACdC,IAAmD,GAAnDA,IAAmD;IAAA,KACrDC,IAAY,GAAZA,IAAY;IAAAG,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA,4BAAAC,iBAAA,CA6BlB,aAA2B;MACtCH,KAAI,CAACH,MAAM,CAACO,KAAK,CAAC,sBAAsB,CAAC;MACzC,IAAI;QACA,IAAMC,OAAO,GAAGL,KAAI,CAACM,MAAM;QAC3B,MAAMN,KAAI,CAACO,KAAK,CAAC,CAAC;QAClBP,KAAI,CAACQ,aAAa,CAAC,CAAC;QACpBR,KAAI,CAACS,cAAc,GAAGC,UAAU,CAACC,UAAU,CAACX,KAAI,CAACY,IAAI,EAAEnB,qBAAqB,CAAC;QAC7EO,KAAI,CAACH,MAAM,CAACO,KAAK,uBAAAS,MAAA,CAAuBb,KAAI,CAACD,IAAI,CAAE,CAAC;QACpD,IAAIC,KAAI,CAACM,MAAM,IAAI,CAACd,WAAW,CAACa,OAAO,EAAEL,KAAI,CAACM,MAAM,CAAC,EAAE;UACnDN,KAAI,CAACc,IAAI,CAAC,QAAQ,EAAEd,KAAI,CAACM,MAAM,CAAC;QACpC;MACJ,CAAC,CAAC,OAAOS,CAAC,EAAE;QACRf,KAAI,CAACQ,aAAa,CAAC,CAAC;QACpB,IAAMQ,OAAO,GAAGC,IAAI,CAACC,KAAK,CAACxB,qBAAqB,GAAGuB,IAAI,CAACE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;QACxEnB,KAAI,CAACoB,YAAY,GAAGV,UAAU,CAACC,UAAU,CAACX,KAAI,CAACY,IAAI,EAAEI,OAAO,CAAC;QAC7DhB,KAAI,CAACH,MAAM,CAACwB,IAAI,sBAAAR,MAAA,CAAsBb,KAAI,CAACD,IAAI,oBAAAc,MAAA,CAAiBG,OAAO,SAAMD,CAAC,CAAC;MACnF;IACJ,CAAC;EA3CD;;EAEA;AACJ;AACA;EACWO,KAAKA,CAAA,EAAS;IACjB,IAAI,CAACV,IAAI,CAAC,CAAC,CAACW,IAAI,CAAC,CAAC;EACtB;;EAEA;AACJ;AACA;EACWC,IAAIA,CAAA,EAAS;IAChB,IAAI,CAAChB,aAAa,CAAC,CAAC;EACxB;;EAEA;AACJ;AACA;AACA;EACWiB,SAASA,CAAA,EAA6B;IACzC,OAAO,IAAI,CAACnB,MAAM;EACtB;EAuBQE,aAAaA,CAAA,EAAS;IAC1B,IAAI,IAAI,CAACC,cAAc,EAAE;MACrBiB,aAAa,CAAC,IAAI,CAACjB,cAAc,CAAC;MAClC,IAAI,CAACA,cAAc,GAAGkB,SAAS;IACnC;IACA,IAAI,IAAI,CAACP,YAAY,EAAE;MACnBQ,YAAY,CAAC,IAAI,CAACR,YAAY,CAAC;MAC/B,IAAI,CAACA,YAAY,GAAGO,SAAS;IACjC;EACJ;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"capabilityPoller.js","names":[],"sources":["../src/capabilityPoller.ts"],"sourcesContent":["/*\nCopyright 2026 Element Creations Ltd.\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 { type IHttpOpts, type MatrixHttpApi } from \"./http-api/index.ts\";\nimport { type Logger } from \"./logger.ts\";\nimport { TypedEventEmitter } from \"./models/typed-event-emitter.ts\";\nimport { deepCompare } from \"./utils.ts\";\n\n// How often we update the server capabilities.\n// 6 hours - an arbitrary value, but they should change very infrequently.\nconst CAPABILITIES_CACHE_MS = 6 * 60 * 60 * 1000;\n\n// How long we want before retrying if we couldn't fetch\nconst CAPABILITIES_RETRY_MS = 30 * 1000;\n\n/**\n * Manages storing and periodically refreshing the server capabilities.\n */\nexport abstract class CapabilityPoller<ResponseType> extends TypedEventEmitter<\n \"update\",\n { update: (data: ResponseType) => void }\n> {\n protected cached?: ResponseType;\n private retryTimeout?: ReturnType<typeof setTimeout>;\n private refreshTimeout?: ReturnType<typeof setInterval>;\n\n public constructor(\n protected readonly logger: Logger,\n protected readonly http: MatrixHttpApi<IHttpOpts & { onlyData: true }>,\n private readonly name: string,\n ) {\n super();\n }\n\n /**\n * Starts periodically fetching the server capabilities.\n */\n public start(): void {\n this.poll().then();\n }\n\n /**\n * Stops the service\n */\n public stop(): void {\n this.clearTimeouts();\n }\n\n /**\n * Returns the cached capabilities, or undefined if none are cached.\n * @returns the current capabilities, if any.\n */\n public getCached(): ResponseType | undefined {\n return this.cached;\n }\n\n public abstract fetch(): Promise<ResponseType>;\n\n private poll = async (): Promise<void> => {\n this.logger.debug(\"Checking capabilites\");\n try {\n const current = this.cached;\n await this.fetch();\n this.clearTimeouts();\n this.refreshTimeout = globalThis.setTimeout(this.poll, CAPABILITIES_CACHE_MS);\n this.logger.debug(`Fetched new server ${this.name}`);\n if (this.cached && !deepCompare(current, this.cached)) {\n this.emit(\"update\", this.cached);\n }\n } catch (e) {\n this.clearTimeouts();\n const howLong = Math.floor(CAPABILITIES_RETRY_MS + Math.random() * 5000);\n this.retryTimeout = globalThis.setTimeout(this.poll, howLong);\n this.logger.warn(`Failed to refresh ${this.name}: retrying in ${howLong}ms`, e);\n }\n };\n\n private clearTimeouts(): void {\n if (this.refreshTimeout) {\n clearInterval(this.refreshTimeout);\n this.refreshTimeout = undefined;\n }\n if (this.retryTimeout) {\n clearTimeout(this.retryTimeout);\n this.retryTimeout = undefined;\n }\n }\n}\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,SAAS,iBAAiB,QAAQ,iCAAiC;AACnE,SAAS,WAAW,QAAQ,YAAY;;AAExC;AACA;AACA,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;;AAEhD;AACA,MAAM,qBAAqB,GAAG,EAAE,GAAG,IAAI;;AAEvC;AACA;AACA;AACA,OAAO,MAAe,gBAAgB,SAAuB,iBAAiB,CAG5E;EAKS,WAAW,CACK,MAAc,EACd,IAAmD,EACrD,IAAY,EAC/B;IACE,KAAK,CAAC,CAAC;IAAC;IAAA;IAAA;IAAA,8BA2BG,YAA2B;MACtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC;MACzC,IAAI;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM;QAC3B,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,IAAI,CAAC,aAAa,CAAC,CAAC;QACpB,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC;QAC7E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAAC,IAAI,EAAE,CAAC;QACpD,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;UACnD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;QACpC;MACJ,CAAC,CAAC,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,aAAa,CAAC,CAAC;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;QACxE,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,IAAI,iBAAiB,OAAO,IAAI,EAAE,CAAC,CAAC;MACnF;IACJ,CAAC;IAAA,KAhDsB,MAAc,GAAd,MAAc;IAAA,KACd,IAAmD,GAAnD,IAAmD;IAAA,KACrD,IAAY,GAAZ,IAAY;EAGjC;;EAEA;AACJ;AACA;EACW,KAAK,GAAS;IACjB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EACtB;;EAEA;AACJ;AACA;EACW,IAAI,GAAS;IAChB,IAAI,CAAC,aAAa,CAAC,CAAC;EACxB;;EAEA;AACJ;AACA;AACA;EACW,SAAS,GAA6B;IACzC,OAAO,IAAI,CAAC,MAAM;EACtB;EAuBQ,aAAa,GAAS;IAC1B,IAAI,IAAI,CAAC,cAAc,EAAE;MACrB,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC;MAClC,IAAI,CAAC,cAAc,GAAG,SAAS;IACnC;IACA,IAAI,IAAI,CAAC,YAAY,EAAE;MACnB,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;MAC/B,IAAI,CAAC,YAAY,GAAG,SAAS;IACjC;EACJ;AACJ","ignoreList":[]}
package/lib/client.d.ts CHANGED
@@ -53,7 +53,7 @@ import { type ToDeviceBatch, type ToDevicePayload } from "./models/ToDeviceMessa
53
53
  import { IgnoredInvites } from "./models/invites-ignorer.ts";
54
54
  import { type LocalNotificationSettings } from "./@types/local_notifications.ts";
55
55
  import { Feature, ServerSupport } from "./feature.ts";
56
- import { type CrossSigningKeyInfo, type CryptoApi, type CryptoCallbacks, CryptoEvent, type CryptoEventHandlerMap } from "./crypto-api/index.ts";
56
+ import { type CrossSigningKeyInfo, type CrossSigningKeys, type CryptoApi, type CryptoCallbacks, CryptoEvent, type CryptoEventHandlerMap } from "./crypto-api/index.ts";
57
57
  import { type SecretStorageKeyDescription, type ServerSideSecretStorage } from "./secret-storage.ts";
58
58
  import { type RegisterRequest, type RegisterResponse } from "./@types/registration.ts";
59
59
  import { MatrixRTCSessionManager } from "./matrixrtc/MatrixRTCSessionManager.ts";
@@ -320,12 +320,6 @@ export declare const UNSTABLE_MSC4140_DELAYED_EVENTS = "org.matrix.msc4140";
320
320
  export declare const UNSTABLE_MSC4354_STICKY_EVENTS = "org.matrix.msc4354";
321
321
  export declare const UNSTABLE_MSC4133_EXTENDED_PROFILES = "uk.tcpip.msc4133";
322
322
  export declare const STABLE_MSC4133_EXTENDED_PROFILES = "uk.tcpip.msc4133.stable";
323
- declare enum CrossSigningKeyType {
324
- MasterKey = "master_key",
325
- SelfSigningKey = "self_signing_key",
326
- UserSigningKey = "user_signing_key"
327
- }
328
- export type CrossSigningKeys = Record<CrossSigningKeyType, CrossSigningKeyInfo>;
329
323
  export type SendToDeviceContentMap = Map<string, Map<string, Record<string, any>>>;
330
324
  export interface ISignedKey {
331
325
  keys: Record<string, string>;
@@ -334,6 +328,7 @@ export interface ISignedKey {
334
328
  algorithms: string[];
335
329
  device_id: string;
336
330
  }
331
+ export { type CrossSigningKeys };
337
332
  export type KeySignatures = Record<string, Record<string, CrossSigningKeyInfo | ISignedKey>>;
338
333
  export interface IUploadKeySignaturesResponse {
339
334
  failures: Record<string, Record<string, {
@@ -3511,5 +3506,4 @@ export declare function threadIdForReceipt(event: MatrixEvent): string;
3511
3506
  * as receipts are concerned.
3512
3507
  */
3513
3508
  export declare function inMainTimelineForReceipt(event: MatrixEvent): boolean;
3514
- export {};
3515
3509
  //# sourceMappingURL=client.d.ts.map