matrix-js-sdk 41.8.0 → 41.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (458) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +1 -1
  3. package/lib/@types/AESEncryptedSecretStoragePayload.js +3 -1
  4. package/lib/@types/IIdentityServerProvider.js +3 -1
  5. package/lib/@types/PushRules.js +7 -7
  6. package/lib/@types/PushRules.js.map +1 -1
  7. package/lib/@types/auth.js +4 -4
  8. package/lib/@types/auth.js.map +1 -1
  9. package/lib/@types/beacon.js +2 -2
  10. package/lib/@types/beacon.js.map +1 -1
  11. package/lib/@types/common.js +3 -1
  12. package/lib/@types/crypto.js +3 -1
  13. package/lib/@types/event.js +20 -20
  14. package/lib/@types/event.js.map +1 -1
  15. package/lib/@types/events.js +3 -1
  16. package/lib/@types/extensible_events.js +6 -6
  17. package/lib/@types/extensible_events.js.map +1 -1
  18. package/lib/@types/global.d.js.map +1 -1
  19. package/lib/@types/json.js +3 -1
  20. package/lib/@types/local_notifications.js +3 -1
  21. package/lib/@types/location.js +4 -4
  22. package/lib/@types/location.js.map +1 -1
  23. package/lib/@types/matrix-sdk-crypto-wasm.d.js +3 -1
  24. package/lib/@types/media.js +3 -1
  25. package/lib/@types/membership.js +1 -1
  26. package/lib/@types/membership.js.map +1 -1
  27. package/lib/@types/partials.js +6 -6
  28. package/lib/@types/partials.js.map +1 -1
  29. package/lib/@types/polls.js +5 -5
  30. package/lib/@types/polls.js.map +1 -1
  31. package/lib/@types/read_receipts.js +2 -2
  32. package/lib/@types/read_receipts.js.map +1 -1
  33. package/lib/@types/registration.js +3 -1
  34. package/lib/@types/requests.js +1 -1
  35. package/lib/@types/requests.js.map +1 -1
  36. package/lib/@types/retention.js +1 -1
  37. package/lib/@types/retention.js.map +1 -1
  38. package/lib/@types/search.js +1 -1
  39. package/lib/@types/search.js.map +1 -1
  40. package/lib/@types/signed.js +3 -1
  41. package/lib/@types/spaces.js +3 -1
  42. package/lib/@types/state_events.js +3 -1
  43. package/lib/@types/synapse.js +3 -1
  44. package/lib/@types/sync.js +1 -1
  45. package/lib/@types/sync.js.map +1 -1
  46. package/lib/@types/threepids.js +1 -1
  47. package/lib/@types/threepids.js.map +1 -1
  48. package/lib/@types/topic.js +1 -1
  49. package/lib/@types/topic.js.map +1 -1
  50. package/lib/@types/uia.js +3 -1
  51. package/lib/NamespacedValue.js +8 -8
  52. package/lib/NamespacedValue.js.map +1 -1
  53. package/lib/ReEmitter.js +9 -16
  54. package/lib/ReEmitter.js.map +1 -1
  55. package/lib/ToDeviceMessageQueue.js +49 -57
  56. package/lib/ToDeviceMessageQueue.js.map +1 -1
  57. package/lib/autodiscovery.js +232 -247
  58. package/lib/autodiscovery.js.map +1 -1
  59. package/lib/base64.js +1 -1
  60. package/lib/base64.js.map +1 -1
  61. package/lib/browser-index.d.ts +2 -2
  62. package/lib/browser-index.d.ts.map +1 -1
  63. package/lib/browser-index.js +5 -5
  64. package/lib/browser-index.js.map +1 -1
  65. package/lib/capabilityPoller.js +19 -22
  66. package/lib/capabilityPoller.js.map +1 -1
  67. package/lib/client.d.ts +2 -8
  68. package/lib/client.d.ts.map +1 -1
  69. package/lib/client.js +2043 -2487
  70. package/lib/client.js.map +1 -1
  71. package/lib/common-crypto/CryptoBackend.js +2 -2
  72. package/lib/common-crypto/CryptoBackend.js.map +1 -1
  73. package/lib/common-crypto/key-passphrase.js.map +1 -1
  74. package/lib/content-helpers.js +43 -48
  75. package/lib/content-helpers.js.map +1 -1
  76. package/lib/content-repo.js +14 -24
  77. package/lib/content-repo.js.map +1 -1
  78. package/lib/crypto/store/base.js +6 -6
  79. package/lib/crypto/store/base.js.map +1 -1
  80. package/lib/crypto/store/indexeddb-crypto-store-backend.js +190 -238
  81. package/lib/crypto/store/indexeddb-crypto-store-backend.js.map +1 -1
  82. package/lib/crypto/store/indexeddb-crypto-store.js +25 -30
  83. package/lib/crypto/store/indexeddb-crypto-store.js.map +1 -1
  84. package/lib/crypto/store/localStorage-crypto-store.js +113 -145
  85. package/lib/crypto/store/localStorage-crypto-store.js.map +1 -1
  86. package/lib/crypto/store/memory-crypto-store.js +74 -105
  87. package/lib/crypto/store/memory-crypto-store.js.map +1 -1
  88. package/lib/crypto-api/CryptoEvent.js +1 -1
  89. package/lib/crypto-api/CryptoEvent.js.map +1 -1
  90. package/lib/crypto-api/CryptoEventHandlerMap.js +3 -1
  91. package/lib/crypto-api/index.d.ts +15 -6
  92. package/lib/crypto-api/index.d.ts.map +1 -1
  93. package/lib/crypto-api/index.js +22 -22
  94. package/lib/crypto-api/index.js.map +1 -1
  95. package/lib/crypto-api/key-passphrase.js +15 -23
  96. package/lib/crypto-api/key-passphrase.js.map +1 -1
  97. package/lib/crypto-api/keybackup.js +3 -1
  98. package/lib/crypto-api/recovery-key.js +11 -12
  99. package/lib/crypto-api/recovery-key.js.map +1 -1
  100. package/lib/crypto-api/verification.js +3 -3
  101. package/lib/crypto-api/verification.js.map +1 -1
  102. package/lib/digest.js +7 -14
  103. package/lib/digest.js.map +1 -1
  104. package/lib/embedded.d.ts.map +1 -1
  105. package/lib/embedded.js +380 -505
  106. package/lib/embedded.js.map +1 -1
  107. package/lib/errors.js +2 -2
  108. package/lib/errors.js.map +1 -1
  109. package/lib/event-mapper.js +10 -12
  110. package/lib/event-mapper.js.map +1 -1
  111. package/lib/extensible_events_v1/ExtensibleEvent.js.map +1 -1
  112. package/lib/extensible_events_v1/InvalidEventError.js.map +1 -1
  113. package/lib/extensible_events_v1/MessageEvent.js +11 -13
  114. package/lib/extensible_events_v1/MessageEvent.js.map +1 -1
  115. package/lib/extensible_events_v1/PollEndEvent.js +3 -4
  116. package/lib/extensible_events_v1/PollEndEvent.js.map +1 -1
  117. package/lib/extensible_events_v1/PollResponseEvent.js +5 -6
  118. package/lib/extensible_events_v1/PollResponseEvent.js.map +1 -1
  119. package/lib/extensible_events_v1/PollStartEvent.js +8 -10
  120. package/lib/extensible_events_v1/PollStartEvent.js.map +1 -1
  121. package/lib/extensible_events_v1/utilities.js.map +1 -1
  122. package/lib/feature.js +18 -31
  123. package/lib/feature.js.map +1 -1
  124. package/lib/filter-component.d.ts.map +1 -1
  125. package/lib/filter-component.js +20 -26
  126. package/lib/filter-component.js.map +1 -1
  127. package/lib/filter.js +14 -17
  128. package/lib/filter.js.map +1 -1
  129. package/lib/http-api/errors.js +28 -43
  130. package/lib/http-api/errors.js.map +1 -1
  131. package/lib/http-api/fetch.js +141 -159
  132. package/lib/http-api/fetch.js.map +1 -1
  133. package/lib/http-api/index.js +17 -20
  134. package/lib/http-api/index.js.map +1 -1
  135. package/lib/http-api/interface.js +1 -1
  136. package/lib/http-api/interface.js.map +1 -1
  137. package/lib/http-api/method.js +1 -1
  138. package/lib/http-api/method.js.map +1 -1
  139. package/lib/http-api/prefix.js +3 -3
  140. package/lib/http-api/prefix.js.map +1 -1
  141. package/lib/http-api/refresh.js +74 -94
  142. package/lib/http-api/refresh.js.map +1 -1
  143. package/lib/http-api/utils.d.ts +1 -1
  144. package/lib/http-api/utils.d.ts.map +1 -1
  145. package/lib/http-api/utils.js +34 -42
  146. package/lib/http-api/utils.js.map +1 -1
  147. package/lib/index.js.map +1 -1
  148. package/lib/indexeddb-helpers.js +3 -3
  149. package/lib/indexeddb-helpers.js.map +1 -1
  150. package/lib/indexeddb-worker.js.map +1 -1
  151. package/lib/interactive-auth.d.ts +5 -5
  152. package/lib/interactive-auth.d.ts.map +1 -1
  153. package/lib/interactive-auth.js +172 -204
  154. package/lib/interactive-auth.js.map +1 -1
  155. package/lib/logger.js +21 -57
  156. package/lib/logger.js.map +1 -1
  157. package/lib/matrix.js +7 -11
  158. package/lib/matrix.js.map +1 -1
  159. package/lib/matrixrtc/CallMembership.js +80 -74
  160. package/lib/matrixrtc/CallMembership.js.map +1 -1
  161. package/lib/matrixrtc/EncryptionManager.js +1 -1
  162. package/lib/matrixrtc/EncryptionManager.js.map +1 -1
  163. package/lib/matrixrtc/IKeyTransport.js +1 -1
  164. package/lib/matrixrtc/IKeyTransport.js.map +1 -1
  165. package/lib/matrixrtc/IMembershipManager.js +1 -1
  166. package/lib/matrixrtc/IMembershipManager.js.map +1 -1
  167. package/lib/matrixrtc/LivekitTransport.d.ts +1 -1
  168. package/lib/matrixrtc/LivekitTransport.js +4 -4
  169. package/lib/matrixrtc/LivekitTransport.js.map +1 -1
  170. package/lib/matrixrtc/MatrixRTCSession.js +137 -187
  171. package/lib/matrixrtc/MatrixRTCSession.js.map +1 -1
  172. package/lib/matrixrtc/MatrixRTCSessionManager.js +36 -41
  173. package/lib/matrixrtc/MatrixRTCSessionManager.js.map +1 -1
  174. package/lib/matrixrtc/MembershipManager.js +332 -378
  175. package/lib/matrixrtc/MembershipManager.js.map +1 -1
  176. package/lib/matrixrtc/MembershipManagerActionScheduler.js +54 -63
  177. package/lib/matrixrtc/MembershipManagerActionScheduler.js.map +1 -1
  178. package/lib/matrixrtc/RTCEncryptionManager.js +119 -143
  179. package/lib/matrixrtc/RTCEncryptionManager.js.map +1 -1
  180. package/lib/matrixrtc/ToDeviceKeyTransport.js +53 -58
  181. package/lib/matrixrtc/ToDeviceKeyTransport.js.map +1 -1
  182. package/lib/matrixrtc/index.js.map +1 -1
  183. package/lib/matrixrtc/membershipData/common.js +1 -1
  184. package/lib/matrixrtc/membershipData/common.js.map +1 -1
  185. package/lib/matrixrtc/membershipData/index.js.map +1 -1
  186. package/lib/matrixrtc/membershipData/rtc.js +15 -23
  187. package/lib/matrixrtc/membershipData/rtc.js.map +1 -1
  188. package/lib/matrixrtc/membershipData/session.js +4 -5
  189. package/lib/matrixrtc/membershipData/session.js.map +1 -1
  190. package/lib/matrixrtc/types.js +4 -6
  191. package/lib/matrixrtc/types.js.map +1 -1
  192. package/lib/matrixrtc/utils.js +4 -11
  193. package/lib/matrixrtc/utils.js.map +1 -1
  194. package/lib/models/MSC3089Branch.js +91 -116
  195. package/lib/models/MSC3089Branch.js.map +1 -1
  196. package/lib/models/MSC3089TreeSpace.js +209 -245
  197. package/lib/models/MSC3089TreeSpace.js.map +1 -1
  198. package/lib/models/ToDeviceMessage.js +3 -1
  199. package/lib/models/beacon.js +14 -13
  200. package/lib/models/beacon.js.map +1 -1
  201. package/lib/models/compare-event-ordering.js +13 -13
  202. package/lib/models/compare-event-ordering.js.map +1 -1
  203. package/lib/models/device.js +3 -3
  204. package/lib/models/device.js.map +1 -1
  205. package/lib/models/event-context.js +5 -8
  206. package/lib/models/event-context.js.map +1 -1
  207. package/lib/models/event-status.js +1 -1
  208. package/lib/models/event-status.js.map +1 -1
  209. package/lib/models/event-timeline-set.js +88 -94
  210. package/lib/models/event-timeline-set.js.map +1 -1
  211. package/lib/models/event-timeline.js +28 -30
  212. package/lib/models/event-timeline.js.map +1 -1
  213. package/lib/models/event.js +182 -226
  214. package/lib/models/event.js.map +1 -1
  215. package/lib/models/invites-ignorer-types.js +4 -4
  216. package/lib/models/invites-ignorer-types.js.map +1 -1
  217. package/lib/models/invites-ignorer.js +159 -179
  218. package/lib/models/invites-ignorer.js.map +1 -1
  219. package/lib/models/poll.js +71 -81
  220. package/lib/models/poll.js.map +1 -1
  221. package/lib/models/profile-keys.js +2 -2
  222. package/lib/models/profile-keys.js.map +1 -1
  223. package/lib/models/read-receipt.js +40 -56
  224. package/lib/models/read-receipt.js.map +1 -1
  225. package/lib/models/related-relations.js.map +1 -1
  226. package/lib/models/relations-container.js +22 -23
  227. package/lib/models/relations-container.js.map +1 -1
  228. package/lib/models/relations.js +133 -159
  229. package/lib/models/relations.js.map +1 -1
  230. package/lib/models/room-member.js +24 -29
  231. package/lib/models/room-member.js.map +1 -1
  232. package/lib/models/room-receipts.js +29 -43
  233. package/lib/models/room-receipts.js.map +1 -1
  234. package/lib/models/room-retention.js +74 -83
  235. package/lib/models/room-retention.js.map +1 -1
  236. package/lib/models/room-state.js +143 -172
  237. package/lib/models/room-state.js.map +1 -1
  238. package/lib/models/room-sticky-events.d.ts +1 -0
  239. package/lib/models/room-sticky-events.d.ts.map +1 -1
  240. package/lib/models/room-sticky-events.js +45 -65
  241. package/lib/models/room-sticky-events.js.map +1 -1
  242. package/lib/models/room-summary.js.map +1 -1
  243. package/lib/models/room.d.ts.map +1 -1
  244. package/lib/models/room.js +765 -909
  245. package/lib/models/room.js.map +1 -1
  246. package/lib/models/search-result.js +5 -5
  247. package/lib/models/search-result.js.map +1 -1
  248. package/lib/models/thread.js +225 -285
  249. package/lib/models/thread.js.map +1 -1
  250. package/lib/models/typed-event-emitter.js +7 -18
  251. package/lib/models/typed-event-emitter.js.map +1 -1
  252. package/lib/models/user.js +8 -8
  253. package/lib/models/user.js.map +1 -1
  254. package/lib/oidc/authorize.js +208 -241
  255. package/lib/oidc/authorize.js.map +1 -1
  256. package/lib/oidc/discovery.js +23 -36
  257. package/lib/oidc/discovery.js.map +1 -1
  258. package/lib/oidc/error.js +1 -1
  259. package/lib/oidc/error.js.map +1 -1
  260. package/lib/oidc/index.js +1 -0
  261. package/lib/oidc/index.js.map +1 -1
  262. package/lib/oidc/register.js +60 -66
  263. package/lib/oidc/register.js.map +1 -1
  264. package/lib/oidc/tokenRefresher.js +77 -91
  265. package/lib/oidc/tokenRefresher.js.map +1 -1
  266. package/lib/oidc/validate.js +18 -18
  267. package/lib/oidc/validate.js.map +1 -1
  268. package/lib/pushprocessor.js +71 -82
  269. package/lib/pushprocessor.js.map +1 -1
  270. package/lib/randomstring.js +9 -9
  271. package/lib/randomstring.js.map +1 -1
  272. package/lib/realtime-callbacks.js +25 -28
  273. package/lib/realtime-callbacks.js.map +1 -1
  274. package/lib/receipt-accumulator.d.ts +2 -0
  275. package/lib/receipt-accumulator.d.ts.map +1 -1
  276. package/lib/receipt-accumulator.js +14 -22
  277. package/lib/receipt-accumulator.js.map +1 -1
  278. package/lib/rendezvous/MSC4108SignInWithQR.js +271 -302
  279. package/lib/rendezvous/MSC4108SignInWithQR.js.map +1 -1
  280. package/lib/rendezvous/RendezvousChannel.js +3 -1
  281. package/lib/rendezvous/RendezvousCode.js +3 -1
  282. package/lib/rendezvous/RendezvousError.js.map +1 -1
  283. package/lib/rendezvous/RendezvousFailureReason.js +2 -2
  284. package/lib/rendezvous/RendezvousFailureReason.js.map +1 -1
  285. package/lib/rendezvous/RendezvousIntent.js +1 -1
  286. package/lib/rendezvous/RendezvousIntent.js.map +1 -1
  287. package/lib/rendezvous/RendezvousTransport.js +3 -1
  288. package/lib/rendezvous/channels/MSC4108SecureChannel.js +123 -147
  289. package/lib/rendezvous/channels/MSC4108SecureChannel.js.map +1 -1
  290. package/lib/rendezvous/index.js +44 -69
  291. package/lib/rendezvous/index.js.map +1 -1
  292. package/lib/rendezvous/transports/MSC4108RendezvousSession.d.ts +1 -1
  293. package/lib/rendezvous/transports/MSC4108RendezvousSession.js +134 -152
  294. package/lib/rendezvous/transports/MSC4108RendezvousSession.js.map +1 -1
  295. package/lib/retentionPolicy.js +6 -9
  296. package/lib/retentionPolicy.js.map +1 -1
  297. package/lib/room-hierarchy.js +52 -60
  298. package/lib/room-hierarchy.js.map +1 -1
  299. package/lib/rust-crypto/CrossSigningIdentity.js +94 -104
  300. package/lib/rust-crypto/CrossSigningIdentity.js.map +1 -1
  301. package/lib/rust-crypto/DehydratedDeviceManager.js +157 -190
  302. package/lib/rust-crypto/DehydratedDeviceManager.js.map +1 -1
  303. package/lib/rust-crypto/KeyClaimManager.js +18 -22
  304. package/lib/rust-crypto/KeyClaimManager.js.map +1 -1
  305. package/lib/rust-crypto/OutgoingRequestProcessor.js +109 -139
  306. package/lib/rust-crypto/OutgoingRequestProcessor.js.map +1 -1
  307. package/lib/rust-crypto/OutgoingRequestsManager.js +66 -80
  308. package/lib/rust-crypto/OutgoingRequestsManager.js.map +1 -1
  309. package/lib/rust-crypto/PerSessionKeyBackupDownloader.d.ts +1 -1
  310. package/lib/rust-crypto/PerSessionKeyBackupDownloader.js +196 -224
  311. package/lib/rust-crypto/PerSessionKeyBackupDownloader.js.map +1 -1
  312. package/lib/rust-crypto/RoomEncryptor.js +127 -143
  313. package/lib/rust-crypto/RoomEncryptor.js.map +1 -1
  314. package/lib/rust-crypto/backup.js +453 -549
  315. package/lib/rust-crypto/backup.js.map +1 -1
  316. package/lib/rust-crypto/constants.js +1 -1
  317. package/lib/rust-crypto/constants.js.map +1 -1
  318. package/lib/rust-crypto/device-converter.js +15 -28
  319. package/lib/rust-crypto/device-converter.js.map +1 -1
  320. package/lib/rust-crypto/index.js +103 -116
  321. package/lib/rust-crypto/index.js.map +1 -1
  322. package/lib/rust-crypto/libolm_migration.js +303 -365
  323. package/lib/rust-crypto/libolm_migration.js.map +1 -1
  324. package/lib/rust-crypto/rust-crypto.d.ts +5 -1
  325. package/lib/rust-crypto/rust-crypto.d.ts.map +1 -1
  326. package/lib/rust-crypto/rust-crypto.js +1067 -1332
  327. package/lib/rust-crypto/rust-crypto.js.map +1 -1
  328. package/lib/rust-crypto/secret-storage.js +12 -25
  329. package/lib/rust-crypto/secret-storage.js.map +1 -1
  330. package/lib/rust-crypto/verification.js +137 -189
  331. package/lib/rust-crypto/verification.js.map +1 -1
  332. package/lib/scheduler.js +44 -19
  333. package/lib/scheduler.js.map +1 -1
  334. package/lib/secret-storage.js +179 -213
  335. package/lib/secret-storage.js.map +1 -1
  336. package/lib/serverCapabilities.js +6 -9
  337. package/lib/serverCapabilities.js.map +1 -1
  338. package/lib/service-types.js +1 -1
  339. package/lib/service-types.js.map +1 -1
  340. package/lib/sliding-sync-sdk.d.ts.map +1 -1
  341. package/lib/sliding-sync-sdk.js +368 -424
  342. package/lib/sliding-sync-sdk.js.map +1 -1
  343. package/lib/sliding-sync.js +135 -171
  344. package/lib/sliding-sync.js.map +1 -1
  345. package/lib/store/index.js +3 -1
  346. package/lib/store/indexeddb-backend.js +3 -1
  347. package/lib/store/indexeddb-local-backend.js +194 -253
  348. package/lib/store/indexeddb-local-backend.js.map +1 -1
  349. package/lib/store/indexeddb-remote-backend.js +33 -63
  350. package/lib/store/indexeddb-remote-backend.js.map +1 -1
  351. package/lib/store/indexeddb-store-worker.js +22 -23
  352. package/lib/store/indexeddb-store-worker.js.map +1 -1
  353. package/lib/store/indexeddb.js +44 -71
  354. package/lib/store/indexeddb.js.map +1 -1
  355. package/lib/store/local-storage-events-emitter.js +2 -2
  356. package/lib/store/local-storage-events-emitter.js.map +1 -1
  357. package/lib/store/memory.js +34 -57
  358. package/lib/store/memory.js.map +1 -1
  359. package/lib/store/stub.js +22 -35
  360. package/lib/store/stub.js.map +1 -1
  361. package/lib/sync-accumulator.js +54 -66
  362. package/lib/sync-accumulator.js.map +1 -1
  363. package/lib/sync.d.ts.map +1 -1
  364. package/lib/sync.js +905 -998
  365. package/lib/sync.js.map +1 -1
  366. package/lib/testing.js +63 -105
  367. package/lib/testing.js.map +1 -1
  368. package/lib/thread-utils.js +1 -4
  369. package/lib/thread-utils.js.map +1 -1
  370. package/lib/timeline-window.js +89 -102
  371. package/lib/timeline-window.js.map +1 -1
  372. package/lib/types.js +1 -1
  373. package/lib/types.js.map +1 -1
  374. package/lib/utils/decryptAESSecretStorageItem.js +14 -25
  375. package/lib/utils/decryptAESSecretStorageItem.js.map +1 -1
  376. package/lib/utils/encryptAESSecretStorageItem.js +27 -38
  377. package/lib/utils/encryptAESSecretStorageItem.js.map +1 -1
  378. package/lib/utils/internal/deriveKeys.js +25 -32
  379. package/lib/utils/internal/deriveKeys.js.map +1 -1
  380. package/lib/utils/roomVersion.js +1 -1
  381. package/lib/utils/roomVersion.js.map +1 -1
  382. package/lib/utils.js +83 -135
  383. package/lib/utils.js.map +1 -1
  384. package/lib/version-support.js +3 -3
  385. package/lib/version-support.js.map +1 -1
  386. package/lib/webrtc/audioContext.js +5 -6
  387. package/lib/webrtc/audioContext.js.map +1 -1
  388. package/lib/webrtc/call.js +1081 -1250
  389. package/lib/webrtc/call.js.map +1 -1
  390. package/lib/webrtc/callEventHandler.js +202 -214
  391. package/lib/webrtc/callEventHandler.js.map +1 -1
  392. package/lib/webrtc/callEventTypes.js +2 -2
  393. package/lib/webrtc/callEventTypes.js.map +1 -1
  394. package/lib/webrtc/callFeed.js +18 -20
  395. package/lib/webrtc/callFeed.js.map +1 -1
  396. package/lib/webrtc/groupCall.js +513 -602
  397. package/lib/webrtc/groupCall.js.map +1 -1
  398. package/lib/webrtc/groupCallEventHandler.js +59 -62
  399. package/lib/webrtc/groupCallEventHandler.js.map +1 -1
  400. package/lib/webrtc/mediaHandler.js +198 -232
  401. package/lib/webrtc/mediaHandler.js.map +1 -1
  402. package/lib/webrtc/stats/callFeedStatsReporter.js +16 -20
  403. package/lib/webrtc/stats/callFeedStatsReporter.js.map +1 -1
  404. package/lib/webrtc/stats/callStatsReportGatherer.js +67 -75
  405. package/lib/webrtc/stats/callStatsReportGatherer.js.map +1 -1
  406. package/lib/webrtc/stats/callStatsReportSummary.js +3 -1
  407. package/lib/webrtc/stats/connectionStats.js.map +1 -1
  408. package/lib/webrtc/stats/connectionStatsBuilder.js +2 -2
  409. package/lib/webrtc/stats/connectionStatsBuilder.js.map +1 -1
  410. package/lib/webrtc/stats/connectionStatsReportBuilder.js +20 -24
  411. package/lib/webrtc/stats/connectionStatsReportBuilder.js.map +1 -1
  412. package/lib/webrtc/stats/groupCallStats.js +6 -8
  413. package/lib/webrtc/stats/groupCallStats.js.map +1 -1
  414. package/lib/webrtc/stats/media/mediaSsrcHandler.js +7 -8
  415. package/lib/webrtc/stats/media/mediaSsrcHandler.js.map +1 -1
  416. package/lib/webrtc/stats/media/mediaTrackHandler.js +7 -9
  417. package/lib/webrtc/stats/media/mediaTrackHandler.js.map +1 -1
  418. package/lib/webrtc/stats/media/mediaTrackStats.js +3 -3
  419. package/lib/webrtc/stats/media/mediaTrackStats.js.map +1 -1
  420. package/lib/webrtc/stats/media/mediaTrackStatsHandler.js +7 -7
  421. package/lib/webrtc/stats/media/mediaTrackStatsHandler.js.map +1 -1
  422. package/lib/webrtc/stats/statsReport.js +1 -1
  423. package/lib/webrtc/stats/statsReport.js.map +1 -1
  424. package/lib/webrtc/stats/statsReportEmitter.js.map +1 -1
  425. package/lib/webrtc/stats/summaryStatsReportGatherer.js +14 -14
  426. package/lib/webrtc/stats/summaryStatsReportGatherer.js.map +1 -1
  427. package/lib/webrtc/stats/trackStatsBuilder.js +32 -34
  428. package/lib/webrtc/stats/trackStatsBuilder.js.map +1 -1
  429. package/lib/webrtc/stats/transportStats.js +3 -1
  430. package/lib/webrtc/stats/transportStatsBuilder.js +9 -9
  431. package/lib/webrtc/stats/transportStatsBuilder.js.map +1 -1
  432. package/lib/webrtc/stats/valueFormatter.js +1 -1
  433. package/lib/webrtc/stats/valueFormatter.js.map +1 -1
  434. package/package.json +18 -33
  435. package/src/@types/global.d.ts +2 -2
  436. package/src/ToDeviceMessageQueue.ts +2 -2
  437. package/src/browser-index.ts +4 -4
  438. package/src/client.ts +15 -20
  439. package/src/crypto-api/index.ts +17 -6
  440. package/src/embedded.ts +4 -6
  441. package/src/filter-component.ts +1 -0
  442. package/src/http-api/utils.ts +1 -1
  443. package/src/interactive-auth.ts +11 -5
  444. package/src/matrixrtc/LivekitTransport.ts +1 -1
  445. package/src/matrixrtc/MatrixRTCSession.ts +1 -1
  446. package/src/models/MSC3089Branch.ts +1 -1
  447. package/src/models/room-sticky-events.ts +1 -0
  448. package/src/models/room.ts +9 -11
  449. package/src/receipt-accumulator.ts +2 -0
  450. package/src/rendezvous/index.ts +1 -1
  451. package/src/rendezvous/transports/MSC4108RendezvousSession.ts +2 -2
  452. package/src/rust-crypto/PerSessionKeyBackupDownloader.ts +1 -1
  453. package/src/rust-crypto/index.ts +6 -6
  454. package/src/rust-crypto/rust-crypto.ts +31 -7
  455. package/src/rust-crypto/verification.ts +1 -1
  456. package/src/sliding-sync-sdk.ts +5 -7
  457. package/src/store/indexeddb-local-backend.ts +3 -3
  458. package/src/sync.ts +6 -8
@@ -1,6 +1,5 @@
1
+ import _objectSpread from "@babel/runtime/helpers/objectSpread2";
1
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
3
  /*
5
4
  Copyright 2022 - 2023 The Matrix.org Foundation C.I.C.
6
5
 
@@ -42,8 +41,8 @@ export class PollEndEvent extends ExtensibleEvent {
42
41
  * The closing message for the event.
43
42
  */
44
43
  _defineProperty(this, "closingMessage", void 0);
45
- var rel = this.wireContent["m.relates_to"];
46
- if (!REFERENCE_RELATION.matches(rel === null || rel === void 0 ? void 0 : rel.rel_type) || typeof (rel === null || rel === void 0 ? void 0 : rel.event_id) !== "string") {
44
+ const rel = this.wireContent["m.relates_to"];
45
+ if (!REFERENCE_RELATION.matches(rel?.rel_type) || typeof rel?.event_id !== "string") {
47
46
  throw new InvalidEventError("Relationship must be a reference to an event");
48
47
  }
49
48
  this.pollEventId = rel.event_id;
@@ -1 +1 @@
1
- {"version":3,"file":"PollEndEvent.js","names":["isEventTypeSame","M_TEXT","REFERENCE_RELATION","M_POLL_END","ExtensibleEvent","InvalidEventError","MessageEvent","PollEndEvent","constructor","wireFormat","_defineProperty","rel","wireContent","matches","rel_type","event_id","pollEventId","closingMessage","isEquivalentTo","primaryEventType","serialize","type","name","content","_objectSpread","from","message"],"sources":["../../src/extensible_events_v1/PollEndEvent.ts"],"sourcesContent":["/*\nCopyright 2022 - 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\nimport {\n type ExtensibleEventType,\n type IPartialEvent,\n isEventTypeSame,\n M_TEXT,\n REFERENCE_RELATION,\n} from \"../@types/extensible_events.ts\";\nimport { M_POLL_END, type PollEndEventContent } from \"../@types/polls.ts\";\nimport { ExtensibleEvent } from \"./ExtensibleEvent.ts\";\nimport { InvalidEventError } from \"./InvalidEventError.ts\";\nimport { MessageEvent } from \"./MessageEvent.ts\";\n\n/**\n * Represents a poll end/closure event.\n */\nexport class PollEndEvent extends ExtensibleEvent<PollEndEventContent> {\n /**\n * The poll start event ID referenced by the response.\n */\n public readonly pollEventId: string;\n\n /**\n * The closing message for the event.\n */\n public readonly closingMessage: MessageEvent;\n\n /**\n * Creates a new PollEndEvent from a pure format. Note that the event is *not*\n * parsed here: it will be treated as a literal m.poll.response primary typed event.\n * @param wireFormat - The event.\n */\n public constructor(wireFormat: IPartialEvent<PollEndEventContent>) {\n super(wireFormat);\n\n const rel = this.wireContent[\"m.relates_to\"];\n if (!REFERENCE_RELATION.matches(rel?.rel_type) || typeof rel?.event_id !== \"string\") {\n throw new InvalidEventError(\"Relationship must be a reference to an event\");\n }\n\n this.pollEventId = rel.event_id;\n this.closingMessage = new MessageEvent(this.wireFormat);\n }\n\n public isEquivalentTo(primaryEventType: ExtensibleEventType): boolean {\n return isEventTypeSame(primaryEventType, M_POLL_END);\n }\n\n public serialize(): IPartialEvent<object> {\n return {\n type: M_POLL_END.name,\n content: {\n \"m.relates_to\": {\n rel_type: REFERENCE_RELATION.name,\n event_id: this.pollEventId,\n },\n [M_POLL_END.name]: {},\n ...this.closingMessage.serialize().content,\n },\n };\n }\n\n /**\n * Creates a new PollEndEvent from a poll event ID.\n * @param pollEventId - The poll start event ID.\n * @param message - A closing message, typically revealing the top answer.\n * @returns The representative poll closure event.\n */\n public static from(pollEventId: string, message: string): PollEndEvent {\n return new PollEndEvent({\n type: M_POLL_END.name,\n content: {\n \"m.relates_to\": {\n rel_type: REFERENCE_RELATION.name,\n event_id: pollEventId,\n },\n [M_POLL_END.name]: {},\n [M_TEXT.name]: message,\n },\n });\n }\n}\n"],"mappings":";;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAGIA,eAAe,EACfC,MAAM,EACNC,kBAAkB,QACf,gCAAgC;AACvC,SAASC,UAAU,QAAkC,oBAAoB;AACzE,SAASC,eAAe,QAAQ,sBAAsB;AACtD,SAASC,iBAAiB,QAAQ,wBAAwB;AAC1D,SAASC,YAAY,QAAQ,mBAAmB;;AAEhD;AACA;AACA;AACA,OAAO,MAAMC,YAAY,SAASH,eAAe,CAAsB;EAWnE;AACJ;AACA;AACA;AACA;EACWI,WAAWA,CAACC,UAA8C,EAAE;IAC/D,KAAK,CAACA,UAAU,CAAC;IAhBrB;AACJ;AACA;IAFIC,eAAA;IAKA;AACJ;AACA;IAFIA,eAAA;IAaI,IAAMC,GAAG,GAAG,IAAI,CAACC,WAAW,CAAC,cAAc,CAAC;IAC5C,IAAI,CAACV,kBAAkB,CAACW,OAAO,CAACF,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAEG,QAAQ,CAAC,IAAI,QAAOH,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAEI,QAAQ,MAAK,QAAQ,EAAE;MACjF,MAAM,IAAIV,iBAAiB,CAAC,8CAA8C,CAAC;IAC/E;IAEA,IAAI,CAACW,WAAW,GAAGL,GAAG,CAACI,QAAQ;IAC/B,IAAI,CAACE,cAAc,GAAG,IAAIX,YAAY,CAAC,IAAI,CAACG,UAAU,CAAC;EAC3D;EAEOS,cAAcA,CAACC,gBAAqC,EAAW;IAClE,OAAOnB,eAAe,CAACmB,gBAAgB,EAAEhB,UAAU,CAAC;EACxD;EAEOiB,SAASA,CAAA,EAA0B;IACtC,OAAO;MACHC,IAAI,EAAElB,UAAU,CAACmB,IAAI;MACrBC,OAAO,EAAAC,aAAA;QACH,cAAc,EAAE;UACZV,QAAQ,EAAEZ,kBAAkB,CAACoB,IAAI;UACjCP,QAAQ,EAAE,IAAI,CAACC;QACnB,CAAC;QACD,CAACb,UAAU,CAACmB,IAAI,GAAG,CAAC;MAAC,GAClB,IAAI,CAACL,cAAc,CAACG,SAAS,CAAC,CAAC,CAACG,OAAO;IAElD,CAAC;EACL;;EAEA;AACJ;AACA;AACA;AACA;AACA;EACI,OAAcE,IAAIA,CAACT,WAAmB,EAAEU,OAAe,EAAgB;IACnE,OAAO,IAAInB,YAAY,CAAC;MACpBc,IAAI,EAAElB,UAAU,CAACmB,IAAI;MACrBC,OAAO,EAAE;QACL,cAAc,EAAE;UACZT,QAAQ,EAAEZ,kBAAkB,CAACoB,IAAI;UACjCP,QAAQ,EAAEC;QACd,CAAC;QACD,CAACb,UAAU,CAACmB,IAAI,GAAG,CAAC,CAAC;QACrB,CAACrB,MAAM,CAACqB,IAAI,GAAGI;MACnB;IACJ,CAAC,CAAC;EACN;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"PollEndEvent.js","names":[],"sources":["../../src/extensible_events_v1/PollEndEvent.ts"],"sourcesContent":["/*\nCopyright 2022 - 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\nimport {\n type ExtensibleEventType,\n type IPartialEvent,\n isEventTypeSame,\n M_TEXT,\n REFERENCE_RELATION,\n} from \"../@types/extensible_events.ts\";\nimport { M_POLL_END, type PollEndEventContent } from \"../@types/polls.ts\";\nimport { ExtensibleEvent } from \"./ExtensibleEvent.ts\";\nimport { InvalidEventError } from \"./InvalidEventError.ts\";\nimport { MessageEvent } from \"./MessageEvent.ts\";\n\n/**\n * Represents a poll end/closure event.\n */\nexport class PollEndEvent extends ExtensibleEvent<PollEndEventContent> {\n /**\n * The poll start event ID referenced by the response.\n */\n public readonly pollEventId: string;\n\n /**\n * The closing message for the event.\n */\n public readonly closingMessage: MessageEvent;\n\n /**\n * Creates a new PollEndEvent from a pure format. Note that the event is *not*\n * parsed here: it will be treated as a literal m.poll.response primary typed event.\n * @param wireFormat - The event.\n */\n public constructor(wireFormat: IPartialEvent<PollEndEventContent>) {\n super(wireFormat);\n\n const rel = this.wireContent[\"m.relates_to\"];\n if (!REFERENCE_RELATION.matches(rel?.rel_type) || typeof rel?.event_id !== \"string\") {\n throw new InvalidEventError(\"Relationship must be a reference to an event\");\n }\n\n this.pollEventId = rel.event_id;\n this.closingMessage = new MessageEvent(this.wireFormat);\n }\n\n public isEquivalentTo(primaryEventType: ExtensibleEventType): boolean {\n return isEventTypeSame(primaryEventType, M_POLL_END);\n }\n\n public serialize(): IPartialEvent<object> {\n return {\n type: M_POLL_END.name,\n content: {\n \"m.relates_to\": {\n rel_type: REFERENCE_RELATION.name,\n event_id: this.pollEventId,\n },\n [M_POLL_END.name]: {},\n ...this.closingMessage.serialize().content,\n },\n };\n }\n\n /**\n * Creates a new PollEndEvent from a poll event ID.\n * @param pollEventId - The poll start event ID.\n * @param message - A closing message, typically revealing the top answer.\n * @returns The representative poll closure event.\n */\n public static from(pollEventId: string, message: string): PollEndEvent {\n return new PollEndEvent({\n type: M_POLL_END.name,\n content: {\n \"m.relates_to\": {\n rel_type: REFERENCE_RELATION.name,\n event_id: pollEventId,\n },\n [M_POLL_END.name]: {},\n [M_TEXT.name]: message,\n },\n });\n }\n}\n"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAGI,eAAe,EACf,MAAM,EACN,kBAAkB,QACf,gCAAgC;AACvC,SAAS,UAAU,QAAkC,oBAAoB;AACzE,SAAS,eAAe,QAAQ,sBAAsB;AACtD,SAAS,iBAAiB,QAAQ,wBAAwB;AAC1D,SAAS,YAAY,QAAQ,mBAAmB;;AAEhD;AACA;AACA;AACA,OAAO,MAAM,YAAY,SAAS,eAAe,CAAsB;EAWnE;AACJ;AACA;AACA;AACA;EACW,WAAW,CAAC,UAA8C,EAAE;IAC/D,KAAK,CAAC,UAAU,CAAC;IAhBrB;AACJ;AACA;IAFI;IAKA;AACJ;AACA;IAFI;IAaI,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;IAC5C,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,OAAO,GAAG,EAAE,QAAQ,KAAK,QAAQ,EAAE;MACjF,MAAM,IAAI,iBAAiB,CAAC,8CAA8C,CAAC;IAC/E;IAEA,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,QAAQ;IAC/B,IAAI,CAAC,cAAc,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;EAC3D;EAEO,cAAc,CAAC,gBAAqC,EAAW;IAClE,OAAO,eAAe,CAAC,gBAAgB,EAAE,UAAU,CAAC;EACxD;EAEO,SAAS,GAA0B;IACtC,OAAO;MACH,IAAI,EAAE,UAAU,CAAC,IAAI;MACrB,OAAO;QACH,cAAc,EAAE;UACZ,QAAQ,EAAE,kBAAkB,CAAC,IAAI;UACjC,QAAQ,EAAE,IAAI,CAAC;QACnB,CAAC;QACD,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC;MAAC,GAClB,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;IAElD,CAAC;EACL;;EAEA;AACJ;AACA;AACA;AACA;AACA;EACI,OAAc,IAAI,CAAC,WAAmB,EAAE,OAAe,EAAgB;IACnE,OAAO,IAAI,YAAY,CAAC;MACpB,IAAI,EAAE,UAAU,CAAC,IAAI;MACrB,OAAO,EAAE;QACL,cAAc,EAAE;UACZ,QAAQ,EAAE,kBAAkB,CAAC,IAAI;UACjC,QAAQ,EAAE;QACd,CAAC;QACD,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;QACrB,CAAC,MAAM,CAAC,IAAI,GAAG;MACnB;IACJ,CAAC,CAAC;EACN;AACJ","ignoreList":[]}
@@ -54,8 +54,8 @@ export class PollResponseEvent extends ExtensibleEvent {
54
54
  _defineProperty(this, "internalAnswerIds", []);
55
55
  _defineProperty(this, "internalSpoiled", false);
56
56
  _defineProperty(this, "pollEventId", void 0);
57
- var rel = this.wireContent["m.relates_to"];
58
- if (!REFERENCE_RELATION.matches(rel === null || rel === void 0 ? void 0 : rel.rel_type) || typeof (rel === null || rel === void 0 ? void 0 : rel.event_id) !== "string") {
57
+ const rel = this.wireContent["m.relates_to"];
58
+ if (!REFERENCE_RELATION.matches(rel?.rel_type) || typeof rel?.event_id !== "string") {
59
59
  throw new InvalidEventError("Relationship must be a reference to an event");
60
60
  }
61
61
  this.pollEventId = rel.event_id;
@@ -68,14 +68,13 @@ export class PollResponseEvent extends ExtensibleEvent {
68
68
  * @param poll - The poll start event.
69
69
  */
70
70
  validateAgainst(poll) {
71
- var _response$answers;
72
- var response = M_POLL_RESPONSE.findIn(this.wireContent);
73
- if (!Array.isArray(response === null || response === void 0 ? void 0 : response.answers)) {
71
+ const response = M_POLL_RESPONSE.findIn(this.wireContent);
72
+ if (!Array.isArray(response?.answers)) {
74
73
  this.internalSpoiled = true;
75
74
  this.internalAnswerIds = [];
76
75
  return;
77
76
  }
78
- var answers = (_response$answers = response === null || response === void 0 ? void 0 : response.answers) !== null && _response$answers !== void 0 ? _response$answers : [];
77
+ let answers = response?.answers ?? [];
79
78
  if (answers.some(a => typeof a !== "string") || answers.length === 0) {
80
79
  this.internalSpoiled = true;
81
80
  this.internalAnswerIds = [];
@@ -1 +1 @@
1
- {"version":3,"file":"PollResponseEvent.js","names":["ExtensibleEvent","M_POLL_RESPONSE","isEventTypeSame","REFERENCE_RELATION","InvalidEventError","PollResponseEvent","answerIds","internalAnswerIds","spoiled","internalSpoiled","constructor","wireFormat","_defineProperty","rel","wireContent","matches","rel_type","event_id","pollEventId","validateAgainst","poll","_response$answers","response","findIn","Array","isArray","answers","some","a","length","pa","id","slice","maxSelections","isEquivalentTo","primaryEventType","serialize","type","name","content","undefined","from"],"sources":["../../src/extensible_events_v1/PollResponseEvent.ts"],"sourcesContent":["/*\nCopyright 2022 - 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\nimport { ExtensibleEvent } from \"./ExtensibleEvent.ts\";\nimport { M_POLL_RESPONSE, type PollResponseEventContent, type PollResponseSubtype } from \"../@types/polls.ts\";\nimport {\n type ExtensibleEventType,\n type IPartialEvent,\n isEventTypeSame,\n REFERENCE_RELATION,\n} from \"../@types/extensible_events.ts\";\nimport { InvalidEventError } from \"./InvalidEventError.ts\";\nimport { type PollStartEvent } from \"./PollStartEvent.ts\";\n\n/**\n * Represents a poll response event.\n */\nexport class PollResponseEvent extends ExtensibleEvent<PollResponseEventContent> {\n private internalAnswerIds: string[] = [];\n private internalSpoiled = false;\n\n /**\n * The provided answers for the poll. Note that this may be falsy/unpredictable if\n * the `spoiled` property is true.\n */\n public get answerIds(): string[] {\n return this.internalAnswerIds;\n }\n\n /**\n * The poll start event ID referenced by the response.\n */\n public readonly pollEventId: string;\n\n /**\n * Whether the vote is spoiled.\n */\n public get spoiled(): boolean {\n return this.internalSpoiled;\n }\n\n /**\n * Creates a new PollResponseEvent from a pure format. Note that the event is *not*\n * parsed here: it will be treated as a literal m.poll.response primary typed event.\n *\n * To validate the response against a poll, call `validateAgainst` after creation.\n * @param wireFormat - The event.\n */\n public constructor(wireFormat: IPartialEvent<PollResponseEventContent>) {\n super(wireFormat);\n\n const rel = this.wireContent[\"m.relates_to\"];\n if (!REFERENCE_RELATION.matches(rel?.rel_type) || typeof rel?.event_id !== \"string\") {\n throw new InvalidEventError(\"Relationship must be a reference to an event\");\n }\n\n this.pollEventId = rel.event_id;\n this.validateAgainst(null);\n }\n\n /**\n * Validates the poll response using the poll start event as a frame of reference. This\n * is used to determine if the vote is spoiled, whether the answers are valid, etc.\n * @param poll - The poll start event.\n */\n public validateAgainst(poll: PollStartEvent | null): void {\n const response = M_POLL_RESPONSE.findIn<PollResponseSubtype>(this.wireContent);\n if (!Array.isArray(response?.answers)) {\n this.internalSpoiled = true;\n this.internalAnswerIds = [];\n return;\n }\n\n let answers = response?.answers ?? [];\n if (answers.some((a) => typeof a !== \"string\") || answers.length === 0) {\n this.internalSpoiled = true;\n this.internalAnswerIds = [];\n return;\n }\n\n if (poll) {\n if (answers.some((a) => !poll.answers.some((pa) => pa.id === a))) {\n this.internalSpoiled = true;\n this.internalAnswerIds = [];\n return;\n }\n\n answers = answers.slice(0, poll.maxSelections);\n }\n\n this.internalAnswerIds = answers;\n this.internalSpoiled = false;\n }\n\n public isEquivalentTo(primaryEventType: ExtensibleEventType): boolean {\n return isEventTypeSame(primaryEventType, M_POLL_RESPONSE);\n }\n\n public serialize(): IPartialEvent<object> {\n return {\n type: M_POLL_RESPONSE.name,\n content: {\n \"m.relates_to\": {\n rel_type: REFERENCE_RELATION.name,\n event_id: this.pollEventId,\n },\n [M_POLL_RESPONSE.name]: {\n answers: this.spoiled ? undefined : this.answerIds,\n },\n },\n };\n }\n\n /**\n * Creates a new PollResponseEvent from a set of answers. To spoil the vote, pass an empty\n * answers array.\n * @param answers - The user's answers. Should be valid from a poll's answer IDs.\n * @param pollEventId - The poll start event ID.\n * @returns The representative poll response event.\n */\n public static from(answers: string[], pollEventId: string): PollResponseEvent {\n return new PollResponseEvent({\n type: M_POLL_RESPONSE.name,\n content: {\n \"m.relates_to\": {\n rel_type: REFERENCE_RELATION.name,\n event_id: pollEventId,\n },\n [M_POLL_RESPONSE.name]: {\n answers: answers,\n },\n },\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"PollResponseEvent.js","names":[],"sources":["../../src/extensible_events_v1/PollResponseEvent.ts"],"sourcesContent":["/*\nCopyright 2022 - 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\nimport { ExtensibleEvent } from \"./ExtensibleEvent.ts\";\nimport { M_POLL_RESPONSE, type PollResponseEventContent, type PollResponseSubtype } from \"../@types/polls.ts\";\nimport {\n type ExtensibleEventType,\n type IPartialEvent,\n isEventTypeSame,\n REFERENCE_RELATION,\n} from \"../@types/extensible_events.ts\";\nimport { InvalidEventError } from \"./InvalidEventError.ts\";\nimport { type PollStartEvent } from \"./PollStartEvent.ts\";\n\n/**\n * Represents a poll response event.\n */\nexport class PollResponseEvent extends ExtensibleEvent<PollResponseEventContent> {\n private internalAnswerIds: string[] = [];\n private internalSpoiled = false;\n\n /**\n * The provided answers for the poll. Note that this may be falsy/unpredictable if\n * the `spoiled` property is true.\n */\n public get answerIds(): string[] {\n return this.internalAnswerIds;\n }\n\n /**\n * The poll start event ID referenced by the response.\n */\n public readonly pollEventId: string;\n\n /**\n * Whether the vote is spoiled.\n */\n public get spoiled(): boolean {\n return this.internalSpoiled;\n }\n\n /**\n * Creates a new PollResponseEvent from a pure format. Note that the event is *not*\n * parsed here: it will be treated as a literal m.poll.response primary typed event.\n *\n * To validate the response against a poll, call `validateAgainst` after creation.\n * @param wireFormat - The event.\n */\n public constructor(wireFormat: IPartialEvent<PollResponseEventContent>) {\n super(wireFormat);\n\n const rel = this.wireContent[\"m.relates_to\"];\n if (!REFERENCE_RELATION.matches(rel?.rel_type) || typeof rel?.event_id !== \"string\") {\n throw new InvalidEventError(\"Relationship must be a reference to an event\");\n }\n\n this.pollEventId = rel.event_id;\n this.validateAgainst(null);\n }\n\n /**\n * Validates the poll response using the poll start event as a frame of reference. This\n * is used to determine if the vote is spoiled, whether the answers are valid, etc.\n * @param poll - The poll start event.\n */\n public validateAgainst(poll: PollStartEvent | null): void {\n const response = M_POLL_RESPONSE.findIn<PollResponseSubtype>(this.wireContent);\n if (!Array.isArray(response?.answers)) {\n this.internalSpoiled = true;\n this.internalAnswerIds = [];\n return;\n }\n\n let answers = response?.answers ?? [];\n if (answers.some((a) => typeof a !== \"string\") || answers.length === 0) {\n this.internalSpoiled = true;\n this.internalAnswerIds = [];\n return;\n }\n\n if (poll) {\n if (answers.some((a) => !poll.answers.some((pa) => pa.id === a))) {\n this.internalSpoiled = true;\n this.internalAnswerIds = [];\n return;\n }\n\n answers = answers.slice(0, poll.maxSelections);\n }\n\n this.internalAnswerIds = answers;\n this.internalSpoiled = false;\n }\n\n public isEquivalentTo(primaryEventType: ExtensibleEventType): boolean {\n return isEventTypeSame(primaryEventType, M_POLL_RESPONSE);\n }\n\n public serialize(): IPartialEvent<object> {\n return {\n type: M_POLL_RESPONSE.name,\n content: {\n \"m.relates_to\": {\n rel_type: REFERENCE_RELATION.name,\n event_id: this.pollEventId,\n },\n [M_POLL_RESPONSE.name]: {\n answers: this.spoiled ? undefined : this.answerIds,\n },\n },\n };\n }\n\n /**\n * Creates a new PollResponseEvent from a set of answers. To spoil the vote, pass an empty\n * answers array.\n * @param answers - The user's answers. Should be valid from a poll's answer IDs.\n * @param pollEventId - The poll start event ID.\n * @returns The representative poll response event.\n */\n public static from(answers: string[], pollEventId: string): PollResponseEvent {\n return new PollResponseEvent({\n type: M_POLL_RESPONSE.name,\n content: {\n \"m.relates_to\": {\n rel_type: REFERENCE_RELATION.name,\n event_id: pollEventId,\n },\n [M_POLL_RESPONSE.name]: {\n answers: answers,\n },\n },\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,5 @@
1
+ import _objectSpread from "@babel/runtime/helpers/objectSpread2";
1
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
3
  /*
5
4
  Copyright 2022 - 2023 The Matrix.org Foundation C.I.C.
6
5
 
@@ -36,7 +35,7 @@ export class PollAnswerSubevent extends MessageEvent {
36
35
  * The answer ID.
37
36
  */
38
37
  _defineProperty(this, "id", void 0);
39
- var id = wireFormat.content.id;
38
+ const id = wireFormat.content.id;
40
39
  if (!id || typeof id !== "string") {
41
40
  throw new InvalidEventError("Answer ID must be a non-empty string");
42
41
  }
@@ -103,8 +102,8 @@ export class PollStartEvent extends ExtensibleEvent {
103
102
  * The possible answers for the poll.
104
103
  */
105
104
  _defineProperty(this, "answers", void 0);
106
- var poll = M_POLL_START.findIn(this.wireContent);
107
- if (!(poll !== null && poll !== void 0 && poll.question)) {
105
+ const poll = M_POLL_START.findIn(this.wireContent);
106
+ if (!poll?.question) {
108
107
  throw new InvalidEventError("A question is required");
109
108
  }
110
109
  this.question = new MessageEvent({
@@ -121,7 +120,7 @@ export class PollStartEvent extends ExtensibleEvent {
121
120
  if (!Array.isArray(poll.answers)) {
122
121
  throw new InvalidEventError("Poll answers must be an array");
123
122
  }
124
- var answers = poll.answers.slice(0, 20).map(a => new PollAnswerSubevent({
123
+ const answers = poll.answers.slice(0, 20).map(a => new PollAnswerSubevent({
125
124
  type: "org.matrix.sdk.poll.answer",
126
125
  content: a
127
126
  }));
@@ -143,7 +142,7 @@ export class PollStartEvent extends ExtensibleEvent {
143
142
  max_selections: this.maxSelections,
144
143
  answers: this.answers.map(a => a.serialize().content)
145
144
  },
146
- [M_TEXT.name]: "".concat(this.question.text, "\n").concat(this.answers.map((a, i) => "".concat(i + 1, ". ").concat(a.text)).join("\n"))
145
+ [M_TEXT.name]: `${this.question.text}\n${this.answers.map((a, i) => `${i + 1}. ${a.text}`).join("\n")}`
147
146
  }
148
147
  };
149
148
  }
@@ -156,8 +155,7 @@ export class PollStartEvent extends ExtensibleEvent {
156
155
  * @param maxSelections - The maximum number of selections. Must be 1 or higher.
157
156
  * @returns The representative poll start event.
158
157
  */
159
- static from(question, answers, kind) {
160
- var maxSelections = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
158
+ static from(question, answers, kind, maxSelections = 1) {
161
159
  return new PollStartEvent({
162
160
  type: M_POLL_START.name,
163
161
  content: {
@@ -178,7 +176,7 @@ export class PollStartEvent extends ExtensibleEvent {
178
176
  });
179
177
  }
180
178
  }
181
- var LETTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
179
+ const LETTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
182
180
  function makeId() {
183
181
  return [...Array(16)].map(() => LETTERS.charAt(Math.floor(Math.random() * LETTERS.length))).join("");
184
182
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PollStartEvent.js","names":["NamespacedValue","MessageEvent","isEventTypeSame","M_TEXT","M_POLL_KIND_DISCLOSED","M_POLL_KIND_UNDISCLOSED","M_POLL_START","InvalidEventError","ExtensibleEvent","PollAnswerSubevent","constructor","wireFormat","_defineProperty","id","content","serialize","type","_objectSpread","serializeMMessageOnly","from","text","name","PollStartEvent","poll","findIn","wireContent","question","rawKind","kind","matches","maxSelections","Number","isFinite","max_selections","Array","isArray","answers","slice","map","a","length","isEquivalentTo","primaryEventType","concat","i","join","arguments","undefined","makeId","LETTERS","charAt","Math","floor","random"],"sources":["../../src/extensible_events_v1/PollStartEvent.ts"],"sourcesContent":["/*\nCopyright 2022 - 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\nimport { NamespacedValue } from \"matrix-events-sdk\";\n\nimport { MessageEvent } from \"./MessageEvent.ts\";\nimport { type ExtensibleEventType, type IPartialEvent, isEventTypeSame, M_TEXT } from \"../@types/extensible_events.ts\";\nimport {\n type KnownPollKind,\n M_POLL_KIND_DISCLOSED,\n M_POLL_KIND_UNDISCLOSED,\n M_POLL_START,\n type PollStartEventContent,\n type PollStartSubtype,\n type PollAnswer,\n} from \"../@types/polls.ts\";\nimport { InvalidEventError } from \"./InvalidEventError.ts\";\nimport { ExtensibleEvent } from \"./ExtensibleEvent.ts\";\n\n/**\n * Represents a poll answer. Note that this is represented as a subtype and is\n * not registered as a parsable event - it is implied for usage exclusively\n * within the PollStartEvent parsing.\n */\nexport class PollAnswerSubevent extends MessageEvent {\n /**\n * The answer ID.\n */\n public readonly id: string;\n\n public constructor(wireFormat: IPartialEvent<PollAnswer>) {\n super(wireFormat);\n\n const id = wireFormat.content.id;\n if (!id || typeof id !== \"string\") {\n throw new InvalidEventError(\"Answer ID must be a non-empty string\");\n }\n this.id = id;\n }\n\n public serialize(): IPartialEvent<object> {\n return {\n type: \"org.matrix.sdk.poll.answer\",\n content: {\n id: this.id,\n ...this.serializeMMessageOnly(),\n },\n };\n }\n\n /**\n * Creates a new PollAnswerSubevent from ID and text.\n * @param id - The answer ID (unique within the poll).\n * @param text - The text.\n * @returns The representative answer.\n */\n public static from(id: string, text: string): PollAnswerSubevent {\n return new PollAnswerSubevent({\n type: \"org.matrix.sdk.poll.answer\",\n content: {\n id: id,\n [M_TEXT.name]: text,\n },\n });\n }\n}\n\n/**\n * Represents a poll start event.\n */\nexport class PollStartEvent extends ExtensibleEvent<PollStartEventContent> {\n /**\n * The question being asked, as a MessageEvent node.\n */\n public readonly question: MessageEvent;\n\n /**\n * The interpreted kind of poll. Note that this will infer a value that is known to the\n * SDK rather than verbatim - this means unknown types will be represented as undisclosed\n * polls.\n *\n * To get the raw kind, use rawKind.\n */\n public readonly kind: KnownPollKind;\n\n /**\n * The true kind as provided by the event sender. Might not be valid.\n */\n public readonly rawKind: string;\n\n /**\n * The maximum number of selections a user is allowed to make.\n */\n public readonly maxSelections: number;\n\n /**\n * The possible answers for the poll.\n */\n public readonly answers: PollAnswerSubevent[];\n\n /**\n * Creates a new PollStartEvent from a pure format. Note that the event is *not*\n * parsed here: it will be treated as a literal m.poll.start primary typed event.\n * @param wireFormat - The event.\n */\n public constructor(wireFormat: IPartialEvent<PollStartEventContent>) {\n super(wireFormat);\n\n const poll = M_POLL_START.findIn<PollStartSubtype>(this.wireContent);\n\n if (!poll?.question) {\n throw new InvalidEventError(\"A question is required\");\n }\n\n this.question = new MessageEvent({ type: \"org.matrix.sdk.poll.question\", content: poll.question });\n\n this.rawKind = poll.kind;\n if (M_POLL_KIND_DISCLOSED.matches(this.rawKind)) {\n this.kind = M_POLL_KIND_DISCLOSED;\n } else {\n this.kind = M_POLL_KIND_UNDISCLOSED; // default & assumed value\n }\n\n this.maxSelections =\n Number.isFinite(poll.max_selections) && poll.max_selections! > 0 ? poll.max_selections! : 1;\n\n if (!Array.isArray(poll.answers)) {\n throw new InvalidEventError(\"Poll answers must be an array\");\n }\n const answers = poll.answers.slice(0, 20).map(\n (a) =>\n new PollAnswerSubevent({\n type: \"org.matrix.sdk.poll.answer\",\n content: a,\n }),\n );\n if (answers.length <= 0) {\n throw new InvalidEventError(\"No answers available\");\n }\n this.answers = answers;\n }\n\n public isEquivalentTo(primaryEventType: ExtensibleEventType): boolean {\n return isEventTypeSame(primaryEventType, M_POLL_START);\n }\n\n public serialize(): IPartialEvent<object> {\n return {\n type: M_POLL_START.name,\n content: {\n [M_POLL_START.name]: {\n question: this.question.serialize().content,\n kind: this.rawKind,\n max_selections: this.maxSelections,\n answers: this.answers.map((a) => a.serialize().content),\n },\n [M_TEXT.name]: `${this.question.text}\\n${this.answers.map((a, i) => `${i + 1}. ${a.text}`).join(\"\\n\")}`,\n },\n };\n }\n\n /**\n * Creates a new PollStartEvent from question, answers, and metadata.\n * @param question - The question to ask.\n * @param answers - The answers. Should be unique within each other.\n * @param kind - The kind of poll.\n * @param maxSelections - The maximum number of selections. Must be 1 or higher.\n * @returns The representative poll start event.\n */\n public static from(\n question: string,\n answers: string[],\n kind: KnownPollKind | string,\n maxSelections = 1,\n ): PollStartEvent {\n return new PollStartEvent({\n type: M_POLL_START.name,\n content: {\n [M_TEXT.name]: question, // unused by parsing\n [M_POLL_START.name]: {\n question: { [M_TEXT.name]: question },\n kind: kind instanceof NamespacedValue ? kind.name : kind,\n max_selections: maxSelections,\n answers: answers.map((a) => ({ id: makeId(), [M_TEXT.name]: a })),\n },\n },\n });\n }\n}\n\nconst LETTERS = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\nfunction makeId(): string {\n return [...Array(16)].map(() => LETTERS.charAt(Math.floor(Math.random() * LETTERS.length))).join(\"\");\n}\n"],"mappings":";;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,eAAe,QAAQ,mBAAmB;AAEnD,SAASC,YAAY,QAAQ,mBAAmB;AAChD,SAAuDC,eAAe,EAAEC,MAAM,QAAQ,gCAAgC;AACtH,SAEIC,qBAAqB,EACrBC,uBAAuB,EACvBC,YAAY,QAIT,oBAAoB;AAC3B,SAASC,iBAAiB,QAAQ,wBAAwB;AAC1D,SAASC,eAAe,QAAQ,sBAAsB;;AAEtD;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,kBAAkB,SAASR,YAAY,CAAC;EAM1CS,WAAWA,CAACC,UAAqC,EAAE;IACtD,KAAK,CAACA,UAAU,CAAC;IANrB;AACJ;AACA;IAFIC,eAAA;IAQI,IAAMC,EAAE,GAAGF,UAAU,CAACG,OAAO,CAACD,EAAE;IAChC,IAAI,CAACA,EAAE,IAAI,OAAOA,EAAE,KAAK,QAAQ,EAAE;MAC/B,MAAM,IAAIN,iBAAiB,CAAC,sCAAsC,CAAC;IACvE;IACA,IAAI,CAACM,EAAE,GAAGA,EAAE;EAChB;EAEOE,SAASA,CAAA,EAA0B;IACtC,OAAO;MACHC,IAAI,EAAE,4BAA4B;MAClCF,OAAO,EAAAG,aAAA;QACHJ,EAAE,EAAE,IAAI,CAACA;MAAE,GACR,IAAI,CAACK,qBAAqB,CAAC,CAAC;IAEvC,CAAC;EACL;;EAEA;AACJ;AACA;AACA;AACA;AACA;EACI,OAAcC,IAAIA,CAACN,EAAU,EAAEO,IAAY,EAAsB;IAC7D,OAAO,IAAIX,kBAAkB,CAAC;MAC1BO,IAAI,EAAE,4BAA4B;MAClCF,OAAO,EAAE;QACLD,EAAE,EAAEA,EAAE;QACN,CAACV,MAAM,CAACkB,IAAI,GAAGD;MACnB;IACJ,CAAC,CAAC;EACN;AACJ;;AAEA;AACA;AACA;AACA,OAAO,MAAME,cAAc,SAASd,eAAe,CAAwB;EA8BvE;AACJ;AACA;AACA;AACA;EACWE,WAAWA,CAACC,UAAgD,EAAE;IACjE,KAAK,CAACA,UAAU,CAAC;IAnCrB;AACJ;AACA;IAFIC,eAAA;IAKA;AACJ;AACA;AACA;AACA;AACA;AACA;IANIA,eAAA;IASA;AACJ;AACA;IAFIA,eAAA;IAKA;AACJ;AACA;IAFIA,eAAA;IAKA;AACJ;AACA;IAFIA,eAAA;IAaI,IAAMW,IAAI,GAAGjB,YAAY,CAACkB,MAAM,CAAmB,IAAI,CAACC,WAAW,CAAC;IAEpE,IAAI,EAACF,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEG,QAAQ,GAAE;MACjB,MAAM,IAAInB,iBAAiB,CAAC,wBAAwB,CAAC;IACzD;IAEA,IAAI,CAACmB,QAAQ,GAAG,IAAIzB,YAAY,CAAC;MAAEe,IAAI,EAAE,8BAA8B;MAAEF,OAAO,EAAES,IAAI,CAACG;IAAS,CAAC,CAAC;IAElG,IAAI,CAACC,OAAO,GAAGJ,IAAI,CAACK,IAAI;IACxB,IAAIxB,qBAAqB,CAACyB,OAAO,CAAC,IAAI,CAACF,OAAO,CAAC,EAAE;MAC7C,IAAI,CAACC,IAAI,GAAGxB,qBAAqB;IACrC,CAAC,MAAM;MACH,IAAI,CAACwB,IAAI,GAAGvB,uBAAuB,CAAC,CAAC;IACzC;IAEA,IAAI,CAACyB,aAAa,GACdC,MAAM,CAACC,QAAQ,CAACT,IAAI,CAACU,cAAc,CAAC,IAAIV,IAAI,CAACU,cAAc,GAAI,CAAC,GAAGV,IAAI,CAACU,cAAc,GAAI,CAAC;IAE/F,IAAI,CAACC,KAAK,CAACC,OAAO,CAACZ,IAAI,CAACa,OAAO,CAAC,EAAE;MAC9B,MAAM,IAAI7B,iBAAiB,CAAC,+BAA+B,CAAC;IAChE;IACA,IAAM6B,OAAO,GAAGb,IAAI,CAACa,OAAO,CAACC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAACC,GAAG,CACxCC,CAAC,IACE,IAAI9B,kBAAkB,CAAC;MACnBO,IAAI,EAAE,4BAA4B;MAClCF,OAAO,EAAEyB;IACb,CAAC,CACT,CAAC;IACD,IAAIH,OAAO,CAACI,MAAM,IAAI,CAAC,EAAE;MACrB,MAAM,IAAIjC,iBAAiB,CAAC,sBAAsB,CAAC;IACvD;IACA,IAAI,CAAC6B,OAAO,GAAGA,OAAO;EAC1B;EAEOK,cAAcA,CAACC,gBAAqC,EAAW;IAClE,OAAOxC,eAAe,CAACwC,gBAAgB,EAAEpC,YAAY,CAAC;EAC1D;EAEOS,SAASA,CAAA,EAA0B;IACtC,OAAO;MACHC,IAAI,EAAEV,YAAY,CAACe,IAAI;MACvBP,OAAO,EAAE;QACL,CAACR,YAAY,CAACe,IAAI,GAAG;UACjBK,QAAQ,EAAE,IAAI,CAACA,QAAQ,CAACX,SAAS,CAAC,CAAC,CAACD,OAAO;UAC3Cc,IAAI,EAAE,IAAI,CAACD,OAAO;UAClBM,cAAc,EAAE,IAAI,CAACH,aAAa;UAClCM,OAAO,EAAE,IAAI,CAACA,OAAO,CAACE,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACxB,SAAS,CAAC,CAAC,CAACD,OAAO;QAC1D,CAAC;QACD,CAACX,MAAM,CAACkB,IAAI,MAAAsB,MAAA,CAAM,IAAI,CAACjB,QAAQ,CAACN,IAAI,QAAAuB,MAAA,CAAK,IAAI,CAACP,OAAO,CAACE,GAAG,CAAC,CAACC,CAAC,EAAEK,CAAC,QAAAD,MAAA,CAAQC,CAAC,GAAG,CAAC,QAAAD,MAAA,CAAKJ,CAAC,CAACnB,IAAI,CAAE,CAAC,CAACyB,IAAI,CAAC,IAAI,CAAC;MACzG;IACJ,CAAC;EACL;;EAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;EACI,OAAc1B,IAAIA,CACdO,QAAgB,EAChBU,OAAiB,EACjBR,IAA4B,EAEd;IAAA,IADdE,aAAa,GAAAgB,SAAA,CAAAN,MAAA,QAAAM,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,CAAC;IAEjB,OAAO,IAAIxB,cAAc,CAAC;MACtBN,IAAI,EAAEV,YAAY,CAACe,IAAI;MACvBP,OAAO,EAAE;QACL,CAACX,MAAM,CAACkB,IAAI,GAAGK,QAAQ;QAAE;QACzB,CAACpB,YAAY,CAACe,IAAI,GAAG;UACjBK,QAAQ,EAAE;YAAE,CAACvB,MAAM,CAACkB,IAAI,GAAGK;UAAS,CAAC;UACrCE,IAAI,EAAEA,IAAI,YAAY5B,eAAe,GAAG4B,IAAI,CAACP,IAAI,GAAGO,IAAI;UACxDK,cAAc,EAAEH,aAAa;UAC7BM,OAAO,EAAEA,OAAO,CAACE,GAAG,CAAEC,CAAC,KAAM;YAAE1B,EAAE,EAAEmC,MAAM,CAAC,CAAC;YAAE,CAAC7C,MAAM,CAACkB,IAAI,GAAGkB;UAAE,CAAC,CAAC;QACpE;MACJ;IACJ,CAAC,CAAC;EACN;AACJ;AAEA,IAAMU,OAAO,GAAG,gEAAgE;AAChF,SAASD,MAAMA,CAAA,EAAW;EACtB,OAAO,CAAC,GAAGd,KAAK,CAAC,EAAE,CAAC,CAAC,CAACI,GAAG,CAAC,MAAMW,OAAO,CAACC,MAAM,CAACC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,CAAC,CAAC,GAAGJ,OAAO,CAACT,MAAM,CAAC,CAAC,CAAC,CAACK,IAAI,CAAC,EAAE,CAAC;AACxG","ignoreList":[]}
1
+ {"version":3,"file":"PollStartEvent.js","names":[],"sources":["../../src/extensible_events_v1/PollStartEvent.ts"],"sourcesContent":["/*\nCopyright 2022 - 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\nimport { NamespacedValue } from \"matrix-events-sdk\";\n\nimport { MessageEvent } from \"./MessageEvent.ts\";\nimport { type ExtensibleEventType, type IPartialEvent, isEventTypeSame, M_TEXT } from \"../@types/extensible_events.ts\";\nimport {\n type KnownPollKind,\n M_POLL_KIND_DISCLOSED,\n M_POLL_KIND_UNDISCLOSED,\n M_POLL_START,\n type PollStartEventContent,\n type PollStartSubtype,\n type PollAnswer,\n} from \"../@types/polls.ts\";\nimport { InvalidEventError } from \"./InvalidEventError.ts\";\nimport { ExtensibleEvent } from \"./ExtensibleEvent.ts\";\n\n/**\n * Represents a poll answer. Note that this is represented as a subtype and is\n * not registered as a parsable event - it is implied for usage exclusively\n * within the PollStartEvent parsing.\n */\nexport class PollAnswerSubevent extends MessageEvent {\n /**\n * The answer ID.\n */\n public readonly id: string;\n\n public constructor(wireFormat: IPartialEvent<PollAnswer>) {\n super(wireFormat);\n\n const id = wireFormat.content.id;\n if (!id || typeof id !== \"string\") {\n throw new InvalidEventError(\"Answer ID must be a non-empty string\");\n }\n this.id = id;\n }\n\n public serialize(): IPartialEvent<object> {\n return {\n type: \"org.matrix.sdk.poll.answer\",\n content: {\n id: this.id,\n ...this.serializeMMessageOnly(),\n },\n };\n }\n\n /**\n * Creates a new PollAnswerSubevent from ID and text.\n * @param id - The answer ID (unique within the poll).\n * @param text - The text.\n * @returns The representative answer.\n */\n public static from(id: string, text: string): PollAnswerSubevent {\n return new PollAnswerSubevent({\n type: \"org.matrix.sdk.poll.answer\",\n content: {\n id: id,\n [M_TEXT.name]: text,\n },\n });\n }\n}\n\n/**\n * Represents a poll start event.\n */\nexport class PollStartEvent extends ExtensibleEvent<PollStartEventContent> {\n /**\n * The question being asked, as a MessageEvent node.\n */\n public readonly question: MessageEvent;\n\n /**\n * The interpreted kind of poll. Note that this will infer a value that is known to the\n * SDK rather than verbatim - this means unknown types will be represented as undisclosed\n * polls.\n *\n * To get the raw kind, use rawKind.\n */\n public readonly kind: KnownPollKind;\n\n /**\n * The true kind as provided by the event sender. Might not be valid.\n */\n public readonly rawKind: string;\n\n /**\n * The maximum number of selections a user is allowed to make.\n */\n public readonly maxSelections: number;\n\n /**\n * The possible answers for the poll.\n */\n public readonly answers: PollAnswerSubevent[];\n\n /**\n * Creates a new PollStartEvent from a pure format. Note that the event is *not*\n * parsed here: it will be treated as a literal m.poll.start primary typed event.\n * @param wireFormat - The event.\n */\n public constructor(wireFormat: IPartialEvent<PollStartEventContent>) {\n super(wireFormat);\n\n const poll = M_POLL_START.findIn<PollStartSubtype>(this.wireContent);\n\n if (!poll?.question) {\n throw new InvalidEventError(\"A question is required\");\n }\n\n this.question = new MessageEvent({ type: \"org.matrix.sdk.poll.question\", content: poll.question });\n\n this.rawKind = poll.kind;\n if (M_POLL_KIND_DISCLOSED.matches(this.rawKind)) {\n this.kind = M_POLL_KIND_DISCLOSED;\n } else {\n this.kind = M_POLL_KIND_UNDISCLOSED; // default & assumed value\n }\n\n this.maxSelections =\n Number.isFinite(poll.max_selections) && poll.max_selections! > 0 ? poll.max_selections! : 1;\n\n if (!Array.isArray(poll.answers)) {\n throw new InvalidEventError(\"Poll answers must be an array\");\n }\n const answers = poll.answers.slice(0, 20).map(\n (a) =>\n new PollAnswerSubevent({\n type: \"org.matrix.sdk.poll.answer\",\n content: a,\n }),\n );\n if (answers.length <= 0) {\n throw new InvalidEventError(\"No answers available\");\n }\n this.answers = answers;\n }\n\n public isEquivalentTo(primaryEventType: ExtensibleEventType): boolean {\n return isEventTypeSame(primaryEventType, M_POLL_START);\n }\n\n public serialize(): IPartialEvent<object> {\n return {\n type: M_POLL_START.name,\n content: {\n [M_POLL_START.name]: {\n question: this.question.serialize().content,\n kind: this.rawKind,\n max_selections: this.maxSelections,\n answers: this.answers.map((a) => a.serialize().content),\n },\n [M_TEXT.name]: `${this.question.text}\\n${this.answers.map((a, i) => `${i + 1}. ${a.text}`).join(\"\\n\")}`,\n },\n };\n }\n\n /**\n * Creates a new PollStartEvent from question, answers, and metadata.\n * @param question - The question to ask.\n * @param answers - The answers. Should be unique within each other.\n * @param kind - The kind of poll.\n * @param maxSelections - The maximum number of selections. Must be 1 or higher.\n * @returns The representative poll start event.\n */\n public static from(\n question: string,\n answers: string[],\n kind: KnownPollKind | string,\n maxSelections = 1,\n ): PollStartEvent {\n return new PollStartEvent({\n type: M_POLL_START.name,\n content: {\n [M_TEXT.name]: question, // unused by parsing\n [M_POLL_START.name]: {\n question: { [M_TEXT.name]: question },\n kind: kind instanceof NamespacedValue ? kind.name : kind,\n max_selections: maxSelections,\n answers: answers.map((a) => ({ id: makeId(), [M_TEXT.name]: a })),\n },\n },\n });\n }\n}\n\nconst LETTERS = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\nfunction makeId(): string {\n return [...Array(16)].map(() => LETTERS.charAt(Math.floor(Math.random() * LETTERS.length))).join(\"\");\n}\n"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS,eAAe,QAAQ,mBAAmB;AAEnD,SAAS,YAAY,QAAQ,mBAAmB;AAChD,SAAuD,eAAe,EAAE,MAAM,QAAQ,gCAAgC;AACtH,SAEI,qBAAqB,EACrB,uBAAuB,EACvB,YAAY,QAIT,oBAAoB;AAC3B,SAAS,iBAAiB,QAAQ,wBAAwB;AAC1D,SAAS,eAAe,QAAQ,sBAAsB;;AAEtD;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM,kBAAkB,SAAS,YAAY,CAAC;EAM1C,WAAW,CAAC,UAAqC,EAAE;IACtD,KAAK,CAAC,UAAU,CAAC;IANrB;AACJ;AACA;IAFI;IAQI,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE;IAChC,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;MAC/B,MAAM,IAAI,iBAAiB,CAAC,sCAAsC,CAAC;IACvE;IACA,IAAI,CAAC,EAAE,GAAG,EAAE;EAChB;EAEO,SAAS,GAA0B;IACtC,OAAO;MACH,IAAI,EAAE,4BAA4B;MAClC,OAAO;QACH,EAAE,EAAE,IAAI,CAAC;MAAE,GACR,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAEvC,CAAC;EACL;;EAEA;AACJ;AACA;AACA;AACA;AACA;EACI,OAAc,IAAI,CAAC,EAAU,EAAE,IAAY,EAAsB;IAC7D,OAAO,IAAI,kBAAkB,CAAC;MAC1B,IAAI,EAAE,4BAA4B;MAClC,OAAO,EAAE;QACL,EAAE,EAAE,EAAE;QACN,CAAC,MAAM,CAAC,IAAI,GAAG;MACnB;IACJ,CAAC,CAAC;EACN;AACJ;;AAEA;AACA;AACA;AACA,OAAO,MAAM,cAAc,SAAS,eAAe,CAAwB;EA8BvE;AACJ;AACA;AACA;AACA;EACW,WAAW,CAAC,UAAgD,EAAE;IACjE,KAAK,CAAC,UAAU,CAAC;IAnCrB;AACJ;AACA;IAFI;IAKA;AACJ;AACA;AACA;AACA;AACA;AACA;IANI;IASA;AACJ;AACA;IAFI;IAKA;AACJ;AACA;IAFI;IAKA;AACJ;AACA;IAFI;IAaI,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAmB,IAAI,CAAC,WAAW,CAAC;IAEpE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE;MACjB,MAAM,IAAI,iBAAiB,CAAC,wBAAwB,CAAC;IACzD;IAEA,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC;MAAE,IAAI,EAAE,8BAA8B;MAAE,OAAO,EAAE,IAAI,CAAC;IAAS,CAAC,CAAC;IAElG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;IACxB,IAAI,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;MAC7C,IAAI,CAAC,IAAI,GAAG,qBAAqB;IACrC,CAAC,MAAM;MACH,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC,CAAC;IACzC;IAEA,IAAI,CAAC,aAAa,GACd,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,cAAc,GAAI,CAAC,GAAG,IAAI,CAAC,cAAc,GAAI,CAAC;IAE/F,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;MAC9B,MAAM,IAAI,iBAAiB,CAAC,+BAA+B,CAAC;IAChE;IACA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CACxC,CAAC,IACE,IAAI,kBAAkB,CAAC;MACnB,IAAI,EAAE,4BAA4B;MAClC,OAAO,EAAE;IACb,CAAC,CACT,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;MACrB,MAAM,IAAI,iBAAiB,CAAC,sBAAsB,CAAC;IACvD;IACA,IAAI,CAAC,OAAO,GAAG,OAAO;EAC1B;EAEO,cAAc,CAAC,gBAAqC,EAAW;IAClE,OAAO,eAAe,CAAC,gBAAgB,EAAE,YAAY,CAAC;EAC1D;EAEO,SAAS,GAA0B;IACtC,OAAO;MACH,IAAI,EAAE,YAAY,CAAC,IAAI;MACvB,OAAO,EAAE;QACL,CAAC,YAAY,CAAC,IAAI,GAAG;UACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;UAC3C,IAAI,EAAE,IAAI,CAAC,OAAO;UAClB,cAAc,EAAE,IAAI,CAAC,aAAa;UAClC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAE,CAAC,IAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;QAC1D,CAAC;QACD,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;MACzG;IACJ,CAAC;EACL;;EAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;EACI,OAAc,IAAI,CACd,QAAgB,EAChB,OAAiB,EACjB,IAA4B,EAC5B,aAAa,GAAG,CAAC,EACH;IACd,OAAO,IAAI,cAAc,CAAC;MACtB,IAAI,EAAE,YAAY,CAAC,IAAI;MACvB,OAAO,EAAE;QACL,CAAC,MAAM,CAAC,IAAI,GAAG,QAAQ;QAAE;QACzB,CAAC,YAAY,CAAC,IAAI,GAAG;UACjB,QAAQ,EAAE;YAAE,CAAC,MAAM,CAAC,IAAI,GAAG;UAAS,CAAC;UACrC,IAAI,EAAE,IAAI,YAAY,eAAe,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI;UACxD,cAAc,EAAE,aAAa;UAC7B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAE,CAAC,KAAM;YAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YAAE,CAAC,MAAM,CAAC,IAAI,GAAG;UAAE,CAAC,CAAC;QACpE;MACJ;IACJ,CAAC,CAAC;EACN;AACJ;AAEA,MAAM,OAAO,GAAG,gEAAgE;AAChF,SAAS,MAAM,GAAW;EACtB,OAAO,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACxG","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"utilities.js","names":["isProvided","s","undefined","isOptionalAString"],"sources":["../../src/extensible_events_v1/utilities.ts"],"sourcesContent":["/*\nCopyright 2021 - 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\nimport { type Optional } from \"matrix-events-sdk\";\n\n/**\n * Determines if the given optional was provided a value.\n * @param s - The optional to test.\n * @returns True if the value is defined.\n */\nexport function isProvided<T>(s: Optional<T>): s is T {\n return s !== null && s !== undefined;\n}\n\n/**\n * Determines if the given optional string is a defined string.\n * @param s - The input string.\n * @returns True if the input is a defined string.\n */\nexport function isOptionalAString(s: Optional<string>): s is string {\n return isProvided(s) && typeof s === \"string\";\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,UAAUA,CAAIC,CAAc,EAAU;EAClD,OAAOA,CAAC,KAAK,IAAI,IAAIA,CAAC,KAAKC,SAAS;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAiBA,CAACF,CAAmB,EAAe;EAChE,OAAOD,UAAU,CAACC,CAAC,CAAC,IAAI,OAAOA,CAAC,KAAK,QAAQ;AACjD","ignoreList":[]}
1
+ {"version":3,"file":"utilities.js","names":[],"sources":["../../src/extensible_events_v1/utilities.ts"],"sourcesContent":["/*\nCopyright 2021 - 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\nimport { type Optional } from \"matrix-events-sdk\";\n\n/**\n * Determines if the given optional was provided a value.\n * @param s - The optional to test.\n * @returns True if the value is defined.\n */\nexport function isProvided<T>(s: Optional<T>): s is T {\n return s !== null && s !== undefined;\n}\n\n/**\n * Determines if the given optional string is a defined string.\n * @param s - The input string.\n * @returns True if the input is a defined string.\n */\nexport function isOptionalAString(s: Optional<string>): s is string {\n return isProvided(s) && typeof s === \"string\";\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA,OAAO,SAAS,UAAU,CAAI,CAAc,EAAU;EAClD,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAAS,iBAAiB,CAAC,CAAmB,EAAe;EAChE,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;AACjD","ignoreList":[]}
package/lib/feature.js CHANGED
@@ -1,5 +1,3 @@
1
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
1
  /*
4
2
  Copyright 2022 The Matrix.org Foundation C.I.C.
5
3
 
@@ -16,13 +14,13 @@ See the License for the specific language governing permissions and
16
14
  limitations under the License.
17
15
  */
18
16
 
19
- export var ServerSupport = /*#__PURE__*/function (ServerSupport) {
17
+ export let ServerSupport = /*#__PURE__*/function (ServerSupport) {
20
18
  ServerSupport[ServerSupport["Stable"] = 0] = "Stable";
21
19
  ServerSupport[ServerSupport["Unstable"] = 1] = "Unstable";
22
20
  ServerSupport[ServerSupport["Unsupported"] = 2] = "Unsupported";
23
21
  return ServerSupport;
24
22
  }({});
25
- export var Feature = /*#__PURE__*/function (Feature) {
23
+ export let Feature = /*#__PURE__*/function (Feature) {
26
24
  Feature["Thread"] = "Thread";
27
25
  Feature["ThreadUnreadNotifications"] = "ThreadUnreadNotifications";
28
26
  /**
@@ -35,7 +33,7 @@ export var Feature = /*#__PURE__*/function (Feature) {
35
33
  Feature["IntentionalMentions"] = "IntentionalMentions";
36
34
  return Feature;
37
35
  }({});
38
- var featureSupportResolver = {
36
+ const featureSupportResolver = {
39
37
  [Feature.Thread]: {
40
38
  unstablePrefixes: ["org.matrix.msc3440"],
41
39
  matrixVersion: "v1.3"
@@ -62,32 +60,21 @@ var featureSupportResolver = {
62
60
  matrixVersion: "v1.7"
63
61
  }
64
62
  };
65
- export function buildFeatureSupportMap(_x) {
66
- return _buildFeatureSupportMap.apply(this, arguments);
67
- }
68
- function _buildFeatureSupportMap() {
69
- _buildFeatureSupportMap = _asyncToGenerator(function* (versions) {
70
- var supportMap = new Map();
71
- for (var _ref3 of Object.entries(featureSupportResolver)) {
72
- var _versions$versions$in, _versions$versions, _supportCondition$uns, _supportCondition$uns2;
73
- var _ref2 = _slicedToArray(_ref3, 2);
74
- var feature = _ref2[0];
75
- var supportCondition = _ref2[1];
76
- var supportMatrixVersion = (_versions$versions$in = (_versions$versions = versions.versions) === null || _versions$versions === void 0 ? void 0 : _versions$versions.includes(supportCondition.matrixVersion || "")) !== null && _versions$versions$in !== void 0 ? _versions$versions$in : false;
77
- var supportUnstablePrefixes = (_supportCondition$uns = (_supportCondition$uns2 = supportCondition.unstablePrefixes) === null || _supportCondition$uns2 === void 0 ? void 0 : _supportCondition$uns2.every(unstablePrefix => {
78
- var _versions$unstable_fe;
79
- return ((_versions$unstable_fe = versions.unstable_features) === null || _versions$unstable_fe === void 0 ? void 0 : _versions$unstable_fe[unstablePrefix]) === true;
80
- })) !== null && _supportCondition$uns !== void 0 ? _supportCondition$uns : false;
81
- if (supportMatrixVersion) {
82
- supportMap.set(feature, ServerSupport.Stable);
83
- } else if (supportUnstablePrefixes) {
84
- supportMap.set(feature, ServerSupport.Unstable);
85
- } else {
86
- supportMap.set(feature, ServerSupport.Unsupported);
87
- }
63
+ export async function buildFeatureSupportMap(versions) {
64
+ const supportMap = new Map();
65
+ for (const [feature, supportCondition] of Object.entries(featureSupportResolver)) {
66
+ const supportMatrixVersion = versions.versions?.includes(supportCondition.matrixVersion || "") ?? false;
67
+ const supportUnstablePrefixes = supportCondition.unstablePrefixes?.every(unstablePrefix => {
68
+ return versions.unstable_features?.[unstablePrefix] === true;
69
+ }) ?? false;
70
+ if (supportMatrixVersion) {
71
+ supportMap.set(feature, ServerSupport.Stable);
72
+ } else if (supportUnstablePrefixes) {
73
+ supportMap.set(feature, ServerSupport.Unstable);
74
+ } else {
75
+ supportMap.set(feature, ServerSupport.Unsupported);
88
76
  }
89
- return supportMap;
90
- });
91
- return _buildFeatureSupportMap.apply(this, arguments);
77
+ }
78
+ return supportMap;
92
79
  }
93
80
  //# sourceMappingURL=feature.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"feature.js","names":["ServerSupport","Feature","featureSupportResolver","Thread","unstablePrefixes","matrixVersion","ThreadUnreadNotifications","LoginTokenRequest","RelationBasedRedactions","AccountDataDeletion","RelationsRecursion","IntentionalMentions","buildFeatureSupportMap","_x","_buildFeatureSupportMap","apply","arguments","_asyncToGenerator","versions","supportMap","Map","_ref3","Object","entries","_versions$versions$in","_versions$versions","_supportCondition$uns","_supportCondition$uns2","_ref2","_slicedToArray","feature","supportCondition","supportMatrixVersion","includes","supportUnstablePrefixes","every","unstablePrefix","_versions$unstable_fe","unstable_features","set","Stable","Unstable","Unsupported"],"sources":["../src/feature.ts"],"sourcesContent":["/*\nCopyright 2022 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 IServerVersions } from \"./client.ts\";\n\nexport enum ServerSupport {\n Stable,\n Unstable,\n Unsupported,\n}\n\nexport enum Feature {\n Thread = \"Thread\",\n ThreadUnreadNotifications = \"ThreadUnreadNotifications\",\n /**\n * @deprecated this is now exposed as a capability not a feature\n */\n LoginTokenRequest = \"LoginTokenRequest\",\n RelationBasedRedactions = \"RelationBasedRedactions\",\n AccountDataDeletion = \"AccountDataDeletion\",\n RelationsRecursion = \"RelationsRecursion\",\n IntentionalMentions = \"IntentionalMentions\",\n}\n\ntype FeatureSupportCondition = {\n unstablePrefixes?: string[];\n matrixVersion?: string;\n};\n\nconst featureSupportResolver: Record<string, FeatureSupportCondition> = {\n [Feature.Thread]: {\n unstablePrefixes: [\"org.matrix.msc3440\"],\n matrixVersion: \"v1.3\",\n },\n [Feature.ThreadUnreadNotifications]: {\n unstablePrefixes: [\"org.matrix.msc3771\", \"org.matrix.msc3773\"],\n matrixVersion: \"v1.4\",\n },\n [Feature.LoginTokenRequest]: {\n unstablePrefixes: [\"org.matrix.msc3882\"],\n },\n [Feature.RelationBasedRedactions]: {\n unstablePrefixes: [\"org.matrix.msc3912\"],\n },\n [Feature.AccountDataDeletion]: {\n unstablePrefixes: [\"org.matrix.msc3391\"],\n },\n [Feature.RelationsRecursion]: {\n unstablePrefixes: [\"org.matrix.msc3981\"],\n matrixVersion: \"v1.10\",\n },\n [Feature.IntentionalMentions]: {\n unstablePrefixes: [\"org.matrix.msc3952_intentional_mentions\"],\n matrixVersion: \"v1.7\",\n },\n};\n\nexport async function buildFeatureSupportMap(versions: IServerVersions): Promise<Map<Feature, ServerSupport>> {\n const supportMap = new Map<Feature, ServerSupport>();\n for (const [feature, supportCondition] of Object.entries(featureSupportResolver)) {\n const supportMatrixVersion = versions.versions?.includes(supportCondition.matrixVersion || \"\") ?? false;\n const supportUnstablePrefixes =\n supportCondition.unstablePrefixes?.every((unstablePrefix) => {\n return versions.unstable_features?.[unstablePrefix] === true;\n }) ?? false;\n if (supportMatrixVersion) {\n supportMap.set(feature as Feature, ServerSupport.Stable);\n } else if (supportUnstablePrefixes) {\n supportMap.set(feature as Feature, ServerSupport.Unstable);\n } else {\n supportMap.set(feature as Feature, ServerSupport.Unsupported);\n }\n }\n return supportMap;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"feature.js","names":[],"sources":["../src/feature.ts"],"sourcesContent":["/*\nCopyright 2022 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 IServerVersions } from \"./client.ts\";\n\nexport enum ServerSupport {\n Stable,\n Unstable,\n Unsupported,\n}\n\nexport enum Feature {\n Thread = \"Thread\",\n ThreadUnreadNotifications = \"ThreadUnreadNotifications\",\n /**\n * @deprecated this is now exposed as a capability not a feature\n */\n LoginTokenRequest = \"LoginTokenRequest\",\n RelationBasedRedactions = \"RelationBasedRedactions\",\n AccountDataDeletion = \"AccountDataDeletion\",\n RelationsRecursion = \"RelationsRecursion\",\n IntentionalMentions = \"IntentionalMentions\",\n}\n\ntype FeatureSupportCondition = {\n unstablePrefixes?: string[];\n matrixVersion?: string;\n};\n\nconst featureSupportResolver: Record<string, FeatureSupportCondition> = {\n [Feature.Thread]: {\n unstablePrefixes: [\"org.matrix.msc3440\"],\n matrixVersion: \"v1.3\",\n },\n [Feature.ThreadUnreadNotifications]: {\n unstablePrefixes: [\"org.matrix.msc3771\", \"org.matrix.msc3773\"],\n matrixVersion: \"v1.4\",\n },\n [Feature.LoginTokenRequest]: {\n unstablePrefixes: [\"org.matrix.msc3882\"],\n },\n [Feature.RelationBasedRedactions]: {\n unstablePrefixes: [\"org.matrix.msc3912\"],\n },\n [Feature.AccountDataDeletion]: {\n unstablePrefixes: [\"org.matrix.msc3391\"],\n },\n [Feature.RelationsRecursion]: {\n unstablePrefixes: [\"org.matrix.msc3981\"],\n matrixVersion: \"v1.10\",\n },\n [Feature.IntentionalMentions]: {\n unstablePrefixes: [\"org.matrix.msc3952_intentional_mentions\"],\n matrixVersion: \"v1.7\",\n },\n};\n\nexport async function buildFeatureSupportMap(versions: IServerVersions): Promise<Map<Feature, ServerSupport>> {\n const supportMap = new Map<Feature, ServerSupport>();\n for (const [feature, supportCondition] of Object.entries(featureSupportResolver)) {\n const supportMatrixVersion = versions.versions?.includes(supportCondition.matrixVersion || \"\") ?? false;\n const supportUnstablePrefixes =\n supportCondition.unstablePrefixes?.every((unstablePrefix) => {\n return versions.unstable_features?.[unstablePrefix] === true;\n }) ?? false;\n if (supportMatrixVersion) {\n supportMap.set(feature as Feature, ServerSupport.Stable);\n } else if (supportUnstablePrefixes) {\n supportMap.set(feature as Feature, ServerSupport.Unstable);\n } else {\n supportMap.set(feature as Feature, ServerSupport.Unsupported);\n }\n }\n return supportMap;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,WAAY,aAAa,0BAAb,aAAa;EAAb,aAAa,CAAb,aAAa;EAAb,aAAa,CAAb,aAAa;EAAb,aAAa,CAAb,aAAa;EAAA,OAAb,aAAa;AAAA;AAMzB,WAAY,OAAO,0BAAP,OAAO;EAAP,OAAO;EAAP,OAAO;EAGf;AACJ;AACA;EALY,OAAO;EAAP,OAAO;EAAP,OAAO;EAAP,OAAO;EAAP,OAAO;EAAA,OAAP,OAAO;AAAA;AAkBnB,MAAM,sBAA+D,GAAG;EACpE,CAAC,OAAO,CAAC,MAAM,GAAG;IACd,gBAAgB,EAAE,CAAC,oBAAoB,CAAC;IACxC,aAAa,EAAE;EACnB,CAAC;EACD,CAAC,OAAO,CAAC,yBAAyB,GAAG;IACjC,gBAAgB,EAAE,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;IAC9D,aAAa,EAAE;EACnB,CAAC;EACD,CAAC,OAAO,CAAC,iBAAiB,GAAG;IACzB,gBAAgB,EAAE,CAAC,oBAAoB;EAC3C,CAAC;EACD,CAAC,OAAO,CAAC,uBAAuB,GAAG;IAC/B,gBAAgB,EAAE,CAAC,oBAAoB;EAC3C,CAAC;EACD,CAAC,OAAO,CAAC,mBAAmB,GAAG;IAC3B,gBAAgB,EAAE,CAAC,oBAAoB;EAC3C,CAAC;EACD,CAAC,OAAO,CAAC,kBAAkB,GAAG;IAC1B,gBAAgB,EAAE,CAAC,oBAAoB,CAAC;IACxC,aAAa,EAAE;EACnB,CAAC;EACD,CAAC,OAAO,CAAC,mBAAmB,GAAG;IAC3B,gBAAgB,EAAE,CAAC,yCAAyC,CAAC;IAC7D,aAAa,EAAE;EACnB;AACJ,CAAC;AAED,OAAO,eAAe,sBAAsB,CAAC,QAAyB,EAAwC;EAC1G,MAAM,UAAU,GAAG,IAAI,GAAG,CAAyB,CAAC;EACpD,KAAK,MAAM,CAAC,OAAO,EAAE,gBAAgB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE;IAC9E,MAAM,oBAAoB,GAAG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,aAAa,IAAI,EAAE,CAAC,IAAI,KAAK;IACvG,MAAM,uBAAuB,GACzB,gBAAgB,CAAC,gBAAgB,EAAE,KAAK,CAAE,cAAc,IAAK;MACzD,OAAO,QAAQ,CAAC,iBAAiB,GAAG,cAAc,CAAC,KAAK,IAAI;IAChE,CAAC,CAAC,IAAI,KAAK;IACf,IAAI,oBAAoB,EAAE;MACtB,UAAU,CAAC,GAAG,CAAC,OAAO,EAAa,aAAa,CAAC,MAAM,CAAC;IAC5D,CAAC,MAAM,IAAI,uBAAuB,EAAE;MAChC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAa,aAAa,CAAC,QAAQ,CAAC;IAC9D,CAAC,MAAM;MACH,UAAU,CAAC,GAAG,CAAC,OAAO,EAAa,aAAa,CAAC,WAAW,CAAC;IACjE;EACJ;EACA,OAAO,UAAU;AACrB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"filter-component.d.ts","sourceRoot":"","sources":["../src/filter-component.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAoBrD,MAAM,WAAW,gBAAgB;IAC7B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC;IACpD,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAGlC,6BAA6B,CAAC,EAAE,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC;IAC7D,2BAA2B,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1C;AAGD;;;;;;;GAOG;AACH,qBAAa,eAAe;IAEpB,OAAO,CAAC,UAAU;aACF,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;gBAD1C,UAAU,EAAE,gBAAgB,EACpB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAGtD;;;;OAIG;IACI,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO;IAuBzC;;OAEG;IACI,MAAM,IAAI,MAAM;IAgBvB;;;;;;;;;OASG;IACH,OAAO,CAAC,WAAW;IAwDnB,OAAO,CAAC,kBAAkB;IAS1B;;;;OAIG;IACI,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE;IAInD;;;;OAIG;IACI,KAAK,IAAI,MAAM;CAGzB"}
1
+ {"version":3,"file":"filter-component.d.ts","sourceRoot":"","sources":["../src/filter-component.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAoBrD,MAAM,WAAW,gBAAgB;IAC7B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC;IACpD,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAGlC,6BAA6B,CAAC,EAAE,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC;IAC7D,2BAA2B,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1C;AAGD;;;;;;;GAOG;AACH,qBAAa,eAAe;IAEpB,OAAO,CAAC,UAAU;aACF,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;gBAD1C,UAAU,EAAE,gBAAgB,EACpB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAGtD;;;;OAIG;IACI,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO;IAuBzC;;OAEG;IACI,MAAM,IAAI,MAAM;IAgBvB;;;;;;;;;OASG;IACH,OAAO,CAAC,WAAW;IAwDnB,OAAO,CAAC,kBAAkB;IAS1B;;;;OAIG;IACI,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE;IAKnD;;;;OAIG;IACI,KAAK,IAAI,MAAM;CAGzB"}
@@ -1,4 +1,3 @@
1
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
1
  /*
3
2
  Copyright 2016 - 2021 The Matrix.org Foundation C.I.C.
4
3
 
@@ -26,7 +25,7 @@ import { FILTER_RELATED_BY_REL_TYPES, FILTER_RELATED_BY_SENDERS, THREAD_RELATION
26
25
  */
27
26
  function matchesWildcard(actualValue, filterValue) {
28
27
  if (filterValue.endsWith("*")) {
29
- var typePrefix = filterValue.slice(0, -1);
28
+ const typePrefix = filterValue.slice(0, -1);
30
29
  return actualValue.slice(0, typePrefix.length) === typePrefix;
31
30
  } else {
32
31
  return actualValue === filterValue;
@@ -57,16 +56,15 @@ export class FilterComponent {
57
56
  * @returns true if the event matches the filter
58
57
  */
59
58
  check(event) {
60
- var _event$getUnsigned, _bundledRelationships;
61
- var bundledRelationships = ((_event$getUnsigned = event.getUnsigned()) === null || _event$getUnsigned === void 0 ? void 0 : _event$getUnsigned["m.relations"]) || {};
62
- var relations = Object.keys(bundledRelationships);
59
+ const bundledRelationships = event.getUnsigned()?.["m.relations"] || {};
60
+ const relations = Object.keys(bundledRelationships);
63
61
  // Relation senders allows in theory a look-up of any senders
64
62
  // however clients can only know about the current user participation status
65
63
  // as sending a whole list of participants could be proven problematic in terms
66
64
  // of performance
67
65
  // This should be improved when bundled relationships solve that problem
68
- var relationSenders = [];
69
- if (this.userId && bundledRelationships !== null && bundledRelationships !== void 0 && (_bundledRelationships = bundledRelationships[THREAD_RELATION_TYPE.name]) !== null && _bundledRelationships !== void 0 && _bundledRelationships.current_user_participated) {
66
+ const relationSenders = [];
67
+ if (this.userId && bundledRelationships?.[THREAD_RELATION_TYPE.name]?.current_user_participated) {
70
68
  relationSenders.push(this.userId);
71
69
  }
72
70
  return this.checkFields(event.getRoomId(), event.getSender(), event.getType(), event.getContent() ? event.getContent().url !== undefined : false, relations, relationSenders);
@@ -86,12 +84,7 @@ export class FilterComponent {
86
84
  contains_url: this.filterJson.contains_url,
87
85
  [FILTER_RELATED_BY_SENDERS.name]: this.filterJson[FILTER_RELATED_BY_SENDERS.name],
88
86
  [FILTER_RELATED_BY_REL_TYPES.name]: this.filterJson[FILTER_RELATED_BY_REL_TYPES.name]
89
- }).filter(_ref => {
90
- var _ref2 = _slicedToArray(_ref, 2),
91
- _key = _ref2[0],
92
- value = _ref2[1];
93
- return value;
94
- }));
87
+ }).filter(([_key, value]) => value));
95
88
  }
96
89
 
97
90
  /**
@@ -105,40 +98,40 @@ export class FilterComponent {
105
98
  * @returns true if the event fields match the filter
106
99
  */
107
100
  checkFields(roomId, sender, eventType, containsUrl, relationTypes, relationSenders) {
108
- var literalKeys = {
109
- rooms: function rooms(v) {
101
+ const literalKeys = {
102
+ rooms: function (v) {
110
103
  return roomId === v;
111
104
  },
112
- senders: function senders(v) {
105
+ senders: function (v) {
113
106
  return sender === v;
114
107
  },
115
- types: function types(v) {
108
+ types: function (v) {
116
109
  return matchesWildcard(eventType, v);
117
110
  }
118
111
  };
119
- for (var name in literalKeys) {
120
- var matchFunc = literalKeys[name];
121
- var notName = "not_" + name;
122
- var disallowedValues = this.filterJson[notName];
123
- if (disallowedValues !== null && disallowedValues !== void 0 && disallowedValues.some(matchFunc)) {
112
+ for (const name in literalKeys) {
113
+ const matchFunc = literalKeys[name];
114
+ const notName = "not_" + name;
115
+ const disallowedValues = this.filterJson[notName];
116
+ if (disallowedValues?.some(matchFunc)) {
124
117
  return false;
125
118
  }
126
- var allowedValues = this.filterJson[name];
119
+ const allowedValues = this.filterJson[name];
127
120
  if (allowedValues && !allowedValues.some(matchFunc)) {
128
121
  return false;
129
122
  }
130
123
  }
131
- var containsUrlFilter = this.filterJson.contains_url;
124
+ const containsUrlFilter = this.filterJson.contains_url;
132
125
  if (containsUrlFilter !== undefined && containsUrlFilter !== containsUrl) {
133
126
  return false;
134
127
  }
135
- var relationTypesFilter = this.filterJson[FILTER_RELATED_BY_REL_TYPES.name];
128
+ const relationTypesFilter = this.filterJson[FILTER_RELATED_BY_REL_TYPES.name];
136
129
  if (relationTypesFilter !== undefined) {
137
130
  if (!this.arrayMatchesFilter(relationTypesFilter, relationTypes)) {
138
131
  return false;
139
132
  }
140
133
  }
141
- var relationSendersFilter = this.filterJson[FILTER_RELATED_BY_SENDERS.name];
134
+ const relationSendersFilter = this.filterJson[FILTER_RELATED_BY_SENDERS.name];
142
135
  if (relationSendersFilter !== undefined) {
143
136
  if (!this.arrayMatchesFilter(relationSendersFilter, relationSenders)) {
144
137
  return false;
@@ -158,6 +151,7 @@ export class FilterComponent {
158
151
  * @returns events which matched the filter component
159
152
  */
160
153
  filter(events) {
154
+ // oxlint-disable-next-line typescript/unbound-method
161
155
  return events.filter(this.check, this);
162
156
  }
163
157
 
@@ -1 +1 @@
1
- {"version":3,"file":"filter-component.js","names":["FILTER_RELATED_BY_REL_TYPES","FILTER_RELATED_BY_SENDERS","THREAD_RELATION_TYPE","matchesWildcard","actualValue","filterValue","endsWith","typePrefix","slice","length","FilterComponent","constructor","filterJson","userId","check","event","_event$getUnsigned","_bundledRelationships","bundledRelationships","getUnsigned","relations","Object","keys","relationSenders","name","current_user_participated","push","checkFields","getRoomId","getSender","getType","getContent","url","undefined","toJSON","fromEntries","entries","types","not_types","rooms","not_rooms","senders","not_senders","contains_url","filter","_ref","_ref2","_slicedToArray","_key","value","roomId","sender","eventType","containsUrl","relationTypes","literalKeys","v","matchFunc","notName","disallowedValues","some","allowedValues","containsUrlFilter","relationTypesFilter","arrayMatchesFilter","relationSendersFilter","values","every","includes","events","limit"],"sources":["../src/filter-component.ts"],"sourcesContent":["/*\nCopyright 2016 - 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { type RelationType } from \"./@types/event.ts\";\nimport { type MatrixEvent } from \"./models/event.ts\";\nimport { FILTER_RELATED_BY_REL_TYPES, FILTER_RELATED_BY_SENDERS, THREAD_RELATION_TYPE } from \"./models/thread.ts\";\n\n/**\n * Checks if a value matches a given field value, which may be a * terminated\n * wildcard pattern.\n * @param actualValue - The value to be compared\n * @param filterValue - The filter pattern to be compared\n * @returns true if the actualValue matches the filterValue\n */\nfunction matchesWildcard(actualValue: string, filterValue: string): boolean {\n if (filterValue.endsWith(\"*\")) {\n const typePrefix = filterValue.slice(0, -1);\n return actualValue.slice(0, typePrefix.length) === typePrefix;\n } else {\n return actualValue === filterValue;\n }\n}\n\n/* eslint-disable camelcase */\nexport interface IFilterComponent {\n \"types\"?: string[];\n \"not_types\"?: string[];\n \"rooms\"?: string[];\n \"not_rooms\"?: string[];\n \"senders\"?: string[];\n \"not_senders\"?: string[];\n \"contains_url\"?: boolean;\n \"limit\"?: number;\n \"related_by_senders\"?: Array<RelationType | string>;\n \"related_by_rel_types\"?: string[];\n\n // Unstable values\n \"io.element.relation_senders\"?: Array<RelationType | string>;\n \"io.element.relation_types\"?: string[];\n}\n/* eslint-enable camelcase */\n\n/**\n * FilterComponent is a section of a Filter definition which defines the\n * types, rooms, senders filters etc to be applied to a particular type of resource.\n * This is all ported over from synapse's Filter object.\n *\n * N.B. that synapse refers to these as 'Filters', and what js-sdk refers to as\n * 'Filters' are referred to as 'FilterCollections'.\n */\nexport class FilterComponent {\n public constructor(\n private filterJson: IFilterComponent,\n public readonly userId?: string | undefined | null,\n ) {}\n\n /**\n * Checks with the filter component matches the given event\n * @param event - event to be checked against the filter\n * @returns true if the event matches the filter\n */\n public check(event: MatrixEvent): boolean {\n const bundledRelationships = event.getUnsigned()?.[\"m.relations\"] || {};\n const relations: Array<string | RelationType> = Object.keys(bundledRelationships);\n // Relation senders allows in theory a look-up of any senders\n // however clients can only know about the current user participation status\n // as sending a whole list of participants could be proven problematic in terms\n // of performance\n // This should be improved when bundled relationships solve that problem\n const relationSenders: string[] = [];\n if (this.userId && bundledRelationships?.[THREAD_RELATION_TYPE.name]?.current_user_participated) {\n relationSenders.push(this.userId);\n }\n\n return this.checkFields(\n event.getRoomId(),\n event.getSender(),\n event.getType(),\n event.getContent() ? event.getContent().url !== undefined : false,\n relations,\n relationSenders,\n );\n }\n\n /**\n * Converts the filter component into the form expected over the wire\n */\n public toJSON(): object {\n return Object.fromEntries(\n Object.entries({\n types: this.filterJson.types,\n not_types: this.filterJson.not_types,\n rooms: this.filterJson.rooms,\n not_rooms: this.filterJson.not_rooms,\n senders: this.filterJson.senders,\n not_senders: this.filterJson.not_senders,\n contains_url: this.filterJson.contains_url,\n [FILTER_RELATED_BY_SENDERS.name]: this.filterJson[FILTER_RELATED_BY_SENDERS.name],\n [FILTER_RELATED_BY_REL_TYPES.name]: this.filterJson[FILTER_RELATED_BY_REL_TYPES.name],\n }).filter(([_key, value]) => value),\n );\n }\n\n /**\n * Checks whether the filter component matches the given event fields.\n * @param roomId - the roomId for the event being checked\n * @param sender - the sender of the event being checked\n * @param eventType - the type of the event being checked\n * @param containsUrl - whether the event contains a content.url field\n * @param relationTypes - whether has aggregated relation of the given type\n * @param relationSenders - whether one of the relation is sent by the user listed\n * @returns true if the event fields match the filter\n */\n private checkFields(\n roomId: string | undefined,\n sender: string | undefined,\n eventType: string,\n containsUrl: boolean,\n relationTypes: Array<RelationType | string>,\n relationSenders: string[],\n ): boolean {\n const literalKeys = {\n rooms: function (v: string): boolean {\n return roomId === v;\n },\n senders: function (v: string): boolean {\n return sender === v;\n },\n types: function (v: string): boolean {\n return matchesWildcard(eventType, v);\n },\n } as const;\n\n for (const name in literalKeys) {\n const matchFunc = literalKeys[<keyof typeof literalKeys>name];\n const notName = \"not_\" + name;\n const disallowedValues = this.filterJson[<`not_${keyof typeof literalKeys}`>notName];\n if (disallowedValues?.some(matchFunc)) {\n return false;\n }\n\n const allowedValues = this.filterJson[name as keyof typeof literalKeys];\n if (allowedValues && !allowedValues.some(matchFunc)) {\n return false;\n }\n }\n\n const containsUrlFilter = this.filterJson.contains_url;\n if (containsUrlFilter !== undefined && containsUrlFilter !== containsUrl) {\n return false;\n }\n\n const relationTypesFilter = this.filterJson[FILTER_RELATED_BY_REL_TYPES.name];\n if (relationTypesFilter !== undefined) {\n if (!this.arrayMatchesFilter(relationTypesFilter, relationTypes)) {\n return false;\n }\n }\n\n const relationSendersFilter = this.filterJson[FILTER_RELATED_BY_SENDERS.name];\n if (relationSendersFilter !== undefined) {\n if (!this.arrayMatchesFilter(relationSendersFilter, relationSenders)) {\n return false;\n }\n }\n\n return true;\n }\n\n private arrayMatchesFilter(filter: any[], values: any[]): boolean {\n return (\n values.length > 0 &&\n filter.every((value) => {\n return values.includes(value);\n })\n );\n }\n\n /**\n * Filters a list of events down to those which match this filter component\n * @param events - Events to be checked against the filter component\n * @returns events which matched the filter component\n */\n public filter(events: MatrixEvent[]): MatrixEvent[] {\n return events.filter(this.check, this);\n }\n\n /**\n * Returns the limit field for a given filter component, providing a default of\n * 10 if none is otherwise specified. Cargo-culted from Synapse.\n * @returns the limit for this filter component.\n */\n public limit(): number {\n return this.filterJson.limit !== undefined ? this.filterJson.limit : 10;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"filter-component.js","names":[],"sources":["../src/filter-component.ts"],"sourcesContent":["/*\nCopyright 2016 - 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { type RelationType } from \"./@types/event.ts\";\nimport { type MatrixEvent } from \"./models/event.ts\";\nimport { FILTER_RELATED_BY_REL_TYPES, FILTER_RELATED_BY_SENDERS, THREAD_RELATION_TYPE } from \"./models/thread.ts\";\n\n/**\n * Checks if a value matches a given field value, which may be a * terminated\n * wildcard pattern.\n * @param actualValue - The value to be compared\n * @param filterValue - The filter pattern to be compared\n * @returns true if the actualValue matches the filterValue\n */\nfunction matchesWildcard(actualValue: string, filterValue: string): boolean {\n if (filterValue.endsWith(\"*\")) {\n const typePrefix = filterValue.slice(0, -1);\n return actualValue.slice(0, typePrefix.length) === typePrefix;\n } else {\n return actualValue === filterValue;\n }\n}\n\n/* eslint-disable camelcase */\nexport interface IFilterComponent {\n \"types\"?: string[];\n \"not_types\"?: string[];\n \"rooms\"?: string[];\n \"not_rooms\"?: string[];\n \"senders\"?: string[];\n \"not_senders\"?: string[];\n \"contains_url\"?: boolean;\n \"limit\"?: number;\n \"related_by_senders\"?: Array<RelationType | string>;\n \"related_by_rel_types\"?: string[];\n\n // Unstable values\n \"io.element.relation_senders\"?: Array<RelationType | string>;\n \"io.element.relation_types\"?: string[];\n}\n/* eslint-enable camelcase */\n\n/**\n * FilterComponent is a section of a Filter definition which defines the\n * types, rooms, senders filters etc to be applied to a particular type of resource.\n * This is all ported over from synapse's Filter object.\n *\n * N.B. that synapse refers to these as 'Filters', and what js-sdk refers to as\n * 'Filters' are referred to as 'FilterCollections'.\n */\nexport class FilterComponent {\n public constructor(\n private filterJson: IFilterComponent,\n public readonly userId?: string | undefined | null,\n ) {}\n\n /**\n * Checks with the filter component matches the given event\n * @param event - event to be checked against the filter\n * @returns true if the event matches the filter\n */\n public check(event: MatrixEvent): boolean {\n const bundledRelationships = event.getUnsigned()?.[\"m.relations\"] || {};\n const relations: Array<string | RelationType> = Object.keys(bundledRelationships);\n // Relation senders allows in theory a look-up of any senders\n // however clients can only know about the current user participation status\n // as sending a whole list of participants could be proven problematic in terms\n // of performance\n // This should be improved when bundled relationships solve that problem\n const relationSenders: string[] = [];\n if (this.userId && bundledRelationships?.[THREAD_RELATION_TYPE.name]?.current_user_participated) {\n relationSenders.push(this.userId);\n }\n\n return this.checkFields(\n event.getRoomId(),\n event.getSender(),\n event.getType(),\n event.getContent() ? event.getContent().url !== undefined : false,\n relations,\n relationSenders,\n );\n }\n\n /**\n * Converts the filter component into the form expected over the wire\n */\n public toJSON(): object {\n return Object.fromEntries(\n Object.entries({\n types: this.filterJson.types,\n not_types: this.filterJson.not_types,\n rooms: this.filterJson.rooms,\n not_rooms: this.filterJson.not_rooms,\n senders: this.filterJson.senders,\n not_senders: this.filterJson.not_senders,\n contains_url: this.filterJson.contains_url,\n [FILTER_RELATED_BY_SENDERS.name]: this.filterJson[FILTER_RELATED_BY_SENDERS.name],\n [FILTER_RELATED_BY_REL_TYPES.name]: this.filterJson[FILTER_RELATED_BY_REL_TYPES.name],\n }).filter(([_key, value]) => value),\n );\n }\n\n /**\n * Checks whether the filter component matches the given event fields.\n * @param roomId - the roomId for the event being checked\n * @param sender - the sender of the event being checked\n * @param eventType - the type of the event being checked\n * @param containsUrl - whether the event contains a content.url field\n * @param relationTypes - whether has aggregated relation of the given type\n * @param relationSenders - whether one of the relation is sent by the user listed\n * @returns true if the event fields match the filter\n */\n private checkFields(\n roomId: string | undefined,\n sender: string | undefined,\n eventType: string,\n containsUrl: boolean,\n relationTypes: Array<RelationType | string>,\n relationSenders: string[],\n ): boolean {\n const literalKeys = {\n rooms: function (v: string): boolean {\n return roomId === v;\n },\n senders: function (v: string): boolean {\n return sender === v;\n },\n types: function (v: string): boolean {\n return matchesWildcard(eventType, v);\n },\n } as const;\n\n for (const name in literalKeys) {\n const matchFunc = literalKeys[<keyof typeof literalKeys>name];\n const notName = \"not_\" + name;\n const disallowedValues = this.filterJson[<`not_${keyof typeof literalKeys}`>notName];\n if (disallowedValues?.some(matchFunc)) {\n return false;\n }\n\n const allowedValues = this.filterJson[name as keyof typeof literalKeys];\n if (allowedValues && !allowedValues.some(matchFunc)) {\n return false;\n }\n }\n\n const containsUrlFilter = this.filterJson.contains_url;\n if (containsUrlFilter !== undefined && containsUrlFilter !== containsUrl) {\n return false;\n }\n\n const relationTypesFilter = this.filterJson[FILTER_RELATED_BY_REL_TYPES.name];\n if (relationTypesFilter !== undefined) {\n if (!this.arrayMatchesFilter(relationTypesFilter, relationTypes)) {\n return false;\n }\n }\n\n const relationSendersFilter = this.filterJson[FILTER_RELATED_BY_SENDERS.name];\n if (relationSendersFilter !== undefined) {\n if (!this.arrayMatchesFilter(relationSendersFilter, relationSenders)) {\n return false;\n }\n }\n\n return true;\n }\n\n private arrayMatchesFilter(filter: any[], values: any[]): boolean {\n return (\n values.length > 0 &&\n filter.every((value) => {\n return values.includes(value);\n })\n );\n }\n\n /**\n * Filters a list of events down to those which match this filter component\n * @param events - Events to be checked against the filter component\n * @returns events which matched the filter component\n */\n public filter(events: MatrixEvent[]): MatrixEvent[] {\n // oxlint-disable-next-line typescript/unbound-method\n return events.filter(this.check, this);\n }\n\n /**\n * Returns the limit field for a given filter component, providing a default of\n * 10 if none is otherwise specified. Cargo-culted from Synapse.\n * @returns the limit for this filter component.\n */\n public limit(): number {\n return this.filterJson.limit !== undefined ? this.filterJson.limit : 10;\n }\n}\n"],"mappings":"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","ignoreList":[]}