@textrp/briij-js-sdk 41.0.1 → 43.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/CHANGELOG.md +14 -1
  2. package/LICENSE +177 -177
  3. package/README.md +85 -3
  4. package/lib/@types/AESEncryptedSecretStoragePayload.js.map +1 -1
  5. package/lib/@types/IIdentityServerProvider.js.map +1 -1
  6. package/lib/@types/PushRules.js +14 -14
  7. package/lib/@types/PushRules.js.map +1 -1
  8. package/lib/@types/another-json.d.js.map +1 -1
  9. package/lib/@types/auth.d.ts +72 -1
  10. package/lib/@types/auth.d.ts.map +1 -1
  11. package/lib/@types/auth.js +57 -54
  12. package/lib/@types/auth.js.map +1 -1
  13. package/lib/@types/beacon.js +100 -100
  14. package/lib/@types/beacon.js.map +1 -1
  15. package/lib/@types/common.js.map +1 -1
  16. package/lib/@types/crypto.js.map +1 -1
  17. package/lib/@types/event.d.ts +59 -0
  18. package/lib/@types/event.d.ts.map +1 -1
  19. package/lib/@types/event.js +105 -102
  20. package/lib/@types/event.js.map +1 -1
  21. package/lib/@types/events.js.map +1 -1
  22. package/lib/@types/extensible_events.js +53 -53
  23. package/lib/@types/extensible_events.js.map +1 -1
  24. package/lib/@types/local_notifications.js.map +1 -1
  25. package/lib/@types/location.js +41 -41
  26. package/lib/@types/location.js.map +1 -1
  27. package/lib/@types/matrix-sdk-crypto-wasm.d.js.map +1 -1
  28. package/lib/@types/media.js.map +1 -1
  29. package/lib/@types/membership.js +39 -39
  30. package/lib/@types/membership.js.map +1 -1
  31. package/lib/@types/partials.js +25 -25
  32. package/lib/@types/partials.js.map +1 -1
  33. package/lib/@types/polls.js +46 -46
  34. package/lib/@types/polls.js.map +1 -1
  35. package/lib/@types/read_receipts.js +14 -14
  36. package/lib/@types/read_receipts.js.map +1 -1
  37. package/lib/@types/registration.js.map +1 -1
  38. package/lib/@types/search.js +14 -14
  39. package/lib/@types/search.js.map +1 -1
  40. package/lib/@types/signed.js.map +1 -1
  41. package/lib/@types/spaces.js.map +1 -1
  42. package/lib/@types/state_events.js.map +1 -1
  43. package/lib/@types/synapse.js.map +1 -1
  44. package/lib/@types/sync.js +18 -18
  45. package/lib/@types/sync.js.map +1 -1
  46. package/lib/@types/threepids.js +14 -14
  47. package/lib/@types/threepids.js.map +1 -1
  48. package/lib/@types/topic.js +47 -47
  49. package/lib/@types/topic.js.map +1 -1
  50. package/lib/@types/uia.js.map +1 -1
  51. package/lib/NamespacedValue.js +20 -20
  52. package/lib/NamespacedValue.js.map +1 -1
  53. package/lib/ReEmitter.js +16 -16
  54. package/lib/ReEmitter.js.map +1 -1
  55. package/lib/base64.js +32 -32
  56. package/lib/base64.js.map +1 -1
  57. package/lib/briij.d.ts +4 -0
  58. package/lib/briij.d.ts.map +1 -1
  59. package/lib/briij.js +4 -0
  60. package/lib/briij.js.map +1 -1
  61. package/lib/client.d.ts +48 -1
  62. package/lib/client.d.ts.map +1 -1
  63. package/lib/client.js +262 -108
  64. package/lib/client.js.map +1 -1
  65. package/lib/common-crypto/key-passphrase.js +19 -19
  66. package/lib/common-crypto/key-passphrase.js.map +1 -1
  67. package/lib/content-helpers.js +57 -57
  68. package/lib/content-helpers.js.map +1 -1
  69. package/lib/content-repo.js +36 -36
  70. package/lib/content-repo.js.map +1 -1
  71. package/lib/crypto/store/base.js +69 -69
  72. package/lib/crypto/store/base.js.map +1 -1
  73. package/lib/crypto/store/indexeddb-crypto-store-backend.js +58 -58
  74. package/lib/crypto/store/indexeddb-crypto-store-backend.js.map +1 -1
  75. package/lib/crypto/store/indexeddb-crypto-store.js +193 -193
  76. package/lib/crypto/store/indexeddb-crypto-store.js.map +1 -1
  77. package/lib/crypto/store/localStorage-crypto-store.js +72 -72
  78. package/lib/crypto/store/localStorage-crypto-store.js.map +1 -1
  79. package/lib/crypto/store/memory-crypto-store.js +74 -74
  80. package/lib/crypto/store/memory-crypto-store.js.map +1 -1
  81. package/lib/crypto-api/CryptoEventHandlerMap.js.map +1 -1
  82. package/lib/crypto-api/key-passphrase.js +22 -22
  83. package/lib/crypto-api/key-passphrase.js.map +1 -1
  84. package/lib/crypto-api/keybackup.js.map +1 -1
  85. package/lib/crypto-api/recovery-key.js +20 -20
  86. package/lib/crypto-api/recovery-key.js.map +1 -1
  87. package/lib/digest.js +21 -21
  88. package/lib/digest.js.map +1 -1
  89. package/lib/extensible_events_v1/ExtensibleEvent.js +39 -39
  90. package/lib/extensible_events_v1/ExtensibleEvent.js.map +1 -1
  91. package/lib/extensible_events_v1/InvalidEventError.js +16 -16
  92. package/lib/extensible_events_v1/InvalidEventError.js.map +1 -1
  93. package/lib/extensible_events_v1/MessageEvent.js +39 -39
  94. package/lib/extensible_events_v1/MessageEvent.js.map +1 -1
  95. package/lib/extensible_events_v1/PollEndEvent.js +29 -29
  96. package/lib/extensible_events_v1/PollEndEvent.js.map +1 -1
  97. package/lib/extensible_events_v1/PollResponseEvent.js +39 -39
  98. package/lib/extensible_events_v1/PollResponseEvent.js.map +1 -1
  99. package/lib/extensible_events_v1/PollStartEvent.js +52 -52
  100. package/lib/extensible_events_v1/PollStartEvent.js.map +1 -1
  101. package/lib/extensible_events_v1/utilities.js +22 -22
  102. package/lib/extensible_events_v1/utilities.js.map +1 -1
  103. package/lib/feature.js +16 -16
  104. package/lib/feature.js.map +1 -1
  105. package/lib/http-api/method.js +14 -14
  106. package/lib/http-api/method.js.map +1 -1
  107. package/lib/http-api/prefix.js +26 -26
  108. package/lib/http-api/prefix.js.map +1 -1
  109. package/lib/indexeddb-helpers.js +21 -21
  110. package/lib/indexeddb-helpers.js.map +1 -1
  111. package/lib/indexeddb-worker.js +18 -18
  112. package/lib/indexeddb-worker.js.map +1 -1
  113. package/lib/matrixrtc/IKeyTransport.js +17 -17
  114. package/lib/matrixrtc/IKeyTransport.js.map +1 -1
  115. package/lib/matrixrtc/IMembershipManager.js +27 -27
  116. package/lib/matrixrtc/IMembershipManager.js.map +1 -1
  117. package/lib/matrixrtc/LivekitTransport.js +19 -19
  118. package/lib/matrixrtc/LivekitTransport.js.map +1 -1
  119. package/lib/matrixrtc/index.js +14 -14
  120. package/lib/matrixrtc/index.js.map +1 -1
  121. package/lib/matrixrtc/utils.js +27 -27
  122. package/lib/matrixrtc/utils.js.map +1 -1
  123. package/lib/models/ToDeviceMessage.js.map +1 -1
  124. package/lib/models/device.js +24 -24
  125. package/lib/models/device.js.map +1 -1
  126. package/lib/models/event-status.js +17 -17
  127. package/lib/models/event-status.js.map +1 -1
  128. package/lib/models/invites-ignorer-types.js +25 -25
  129. package/lib/models/invites-ignorer-types.js.map +1 -1
  130. package/lib/models/profile-keys.js +26 -26
  131. package/lib/models/profile-keys.js.map +1 -1
  132. package/lib/models/room-summary.js +26 -26
  133. package/lib/models/room-summary.js.map +1 -1
  134. package/lib/models/search-result.js +22 -22
  135. package/lib/models/search-result.js.map +1 -1
  136. package/lib/models/typed-event-emitter.js +122 -122
  137. package/lib/models/typed-event-emitter.js.map +1 -1
  138. package/lib/oidc/authorize.js +76 -76
  139. package/lib/oidc/authorize.js.map +1 -1
  140. package/lib/oidc/error.js +17 -17
  141. package/lib/oidc/error.js.map +1 -1
  142. package/lib/oidc/index.js +17 -17
  143. package/lib/oidc/index.js.map +1 -1
  144. package/lib/oidc/register.js +41 -41
  145. package/lib/oidc/register.js.map +1 -1
  146. package/lib/oidc/tokenRefresher.js +51 -51
  147. package/lib/oidc/tokenRefresher.js.map +1 -1
  148. package/lib/oidc/validate.js +59 -59
  149. package/lib/oidc/validate.js.map +1 -1
  150. package/lib/randomstring.js +35 -35
  151. package/lib/randomstring.js.map +1 -1
  152. package/lib/realtime-callbacks.js +39 -39
  153. package/lib/realtime-callbacks.js.map +1 -1
  154. package/lib/receipt-accumulator.js +44 -44
  155. package/lib/receipt-accumulator.js.map +1 -1
  156. package/lib/rendezvous/RendezvousChannel.js.map +1 -1
  157. package/lib/rendezvous/RendezvousCode.js.map +1 -1
  158. package/lib/rendezvous/RendezvousError.js +14 -14
  159. package/lib/rendezvous/RendezvousError.js.map +1 -1
  160. package/lib/rendezvous/RendezvousFailureReason.js +14 -14
  161. package/lib/rendezvous/RendezvousFailureReason.js.map +1 -1
  162. package/lib/rendezvous/RendezvousIntent.js +14 -14
  163. package/lib/rendezvous/RendezvousIntent.js.map +1 -1
  164. package/lib/rendezvous/RendezvousTransport.js.map +1 -1
  165. package/lib/rendezvous/channels/MSC4108SecureChannel.js +63 -63
  166. package/lib/rendezvous/channels/MSC4108SecureChannel.js.map +1 -1
  167. package/lib/rendezvous/channels/index.js +14 -14
  168. package/lib/rendezvous/channels/index.js.map +1 -1
  169. package/lib/rendezvous/index.js +14 -14
  170. package/lib/rendezvous/index.js.map +1 -1
  171. package/lib/rendezvous/transports/index.js +14 -14
  172. package/lib/rendezvous/transports/index.js.map +1 -1
  173. package/lib/rust-crypto/CrossSigningIdentity.js +29 -29
  174. package/lib/rust-crypto/CrossSigningIdentity.js.map +1 -1
  175. package/lib/rust-crypto/OutgoingRequestsManager.js +37 -37
  176. package/lib/rust-crypto/OutgoingRequestsManager.js.map +1 -1
  177. package/lib/rust-crypto/device-converter.js +30 -30
  178. package/lib/rust-crypto/device-converter.js.map +1 -1
  179. package/lib/rust-crypto/secret-storage.js +30 -30
  180. package/lib/rust-crypto/secret-storage.js.map +1 -1
  181. package/lib/service-types.js +14 -14
  182. package/lib/service-types.js.map +1 -1
  183. package/lib/store/local-storage-events-emitter.js +21 -21
  184. package/lib/store/local-storage-events-emitter.js.map +1 -1
  185. package/lib/sync-accumulator.js +50 -50
  186. package/lib/sync-accumulator.js.map +1 -1
  187. package/lib/thread-utils.js +20 -20
  188. package/lib/thread-utils.js.map +1 -1
  189. package/lib/types.js +34 -34
  190. package/lib/types.js.map +1 -1
  191. package/lib/utils/decryptAESSecretStorageItem.js +22 -22
  192. package/lib/utils/decryptAESSecretStorageItem.js.map +1 -1
  193. package/lib/utils/encryptAESSecretStorageItem.js +26 -26
  194. package/lib/utils/encryptAESSecretStorageItem.js.map +1 -1
  195. package/lib/utils/internal/deriveKeys.js +21 -21
  196. package/lib/utils/internal/deriveKeys.js.map +1 -1
  197. package/lib/utils/roomVersion.js +26 -26
  198. package/lib/utils/roomVersion.js.map +1 -1
  199. package/lib/version-support.js +26 -26
  200. package/lib/version-support.js.map +1 -1
  201. package/lib/wallet-recovery.d.ts +24 -0
  202. package/lib/wallet-recovery.d.ts.map +1 -0
  203. package/lib/wallet-recovery.js +232 -0
  204. package/lib/wallet-recovery.js.map +1 -0
  205. package/lib/webrtc/audioContext.js +24 -24
  206. package/lib/webrtc/audioContext.js.map +1 -1
  207. package/lib/webrtc/callEventTypes.js.map +1 -1
  208. package/lib/webrtc/stats/callFeedStatsReporter.js +14 -14
  209. package/lib/webrtc/stats/callFeedStatsReporter.js.map +1 -1
  210. package/lib/webrtc/stats/callStatsReportGatherer.js +14 -14
  211. package/lib/webrtc/stats/callStatsReportGatherer.js.map +1 -1
  212. package/lib/webrtc/stats/callStatsReportSummary.js.map +1 -1
  213. package/lib/webrtc/stats/connectionStats.js +14 -14
  214. package/lib/webrtc/stats/connectionStats.js.map +1 -1
  215. package/lib/webrtc/stats/connectionStatsBuilder.js +14 -14
  216. package/lib/webrtc/stats/connectionStatsBuilder.js.map +1 -1
  217. package/lib/webrtc/stats/connectionStatsReportBuilder.js +14 -14
  218. package/lib/webrtc/stats/connectionStatsReportBuilder.js.map +1 -1
  219. package/lib/webrtc/stats/groupCallStats.js +14 -14
  220. package/lib/webrtc/stats/groupCallStats.js.map +1 -1
  221. package/lib/webrtc/stats/media/mediaSsrcHandler.js +14 -14
  222. package/lib/webrtc/stats/media/mediaSsrcHandler.js.map +1 -1
  223. package/lib/webrtc/stats/media/mediaTrackHandler.js +14 -14
  224. package/lib/webrtc/stats/media/mediaTrackHandler.js.map +1 -1
  225. package/lib/webrtc/stats/media/mediaTrackStats.js +27 -27
  226. package/lib/webrtc/stats/media/mediaTrackStats.js.map +1 -1
  227. package/lib/webrtc/stats/media/mediaTrackStatsHandler.js +20 -20
  228. package/lib/webrtc/stats/media/mediaTrackStatsHandler.js.map +1 -1
  229. package/lib/webrtc/stats/statsReport.js +14 -14
  230. package/lib/webrtc/stats/statsReport.js.map +1 -1
  231. package/lib/webrtc/stats/statsReportEmitter.js +14 -14
  232. package/lib/webrtc/stats/statsReportEmitter.js.map +1 -1
  233. package/lib/webrtc/stats/trackStatsBuilder.js +4 -4
  234. package/lib/webrtc/stats/trackStatsBuilder.js.map +1 -1
  235. package/lib/webrtc/stats/transportStats.js.map +1 -1
  236. package/lib/webrtc/stats/transportStatsBuilder.js.map +1 -1
  237. package/lib/webrtc/stats/valueFormatter.js +11 -11
  238. package/lib/webrtc/stats/valueFormatter.js.map +1 -1
  239. package/lib/xrpl/identity.d.ts +28 -0
  240. package/lib/xrpl/identity.d.ts.map +1 -0
  241. package/lib/xrpl/identity.js +213 -0
  242. package/lib/xrpl/identity.js.map +1 -0
  243. package/lib/xrpl/trust.d.ts +8 -0
  244. package/lib/xrpl/trust.d.ts.map +1 -0
  245. package/lib/xrpl/trust.js +61 -0
  246. package/lib/xrpl/trust.js.map +1 -0
  247. package/lib/xrpl/verification.d.ts +26 -0
  248. package/lib/xrpl/verification.d.ts.map +1 -0
  249. package/lib/xrpl/verification.js +295 -0
  250. package/lib/xrpl/verification.js.map +1 -0
  251. package/package.json +130 -129
  252. package/src/@types/AESEncryptedSecretStoragePayload.ts +29 -29
  253. package/src/@types/IIdentityServerProvider.ts +24 -24
  254. package/src/@types/PushRules.ts +208 -208
  255. package/src/@types/another-json.d.ts +19 -19
  256. package/src/@types/auth.ts +340 -258
  257. package/src/@types/beacon.ts +140 -140
  258. package/src/@types/common.ts +24 -24
  259. package/src/@types/crypto.ts +71 -71
  260. package/src/@types/event.ts +508 -449
  261. package/src/@types/events.ts +119 -119
  262. package/src/@types/extensible_events.ts +147 -147
  263. package/src/@types/local_notifications.ts +19 -19
  264. package/src/@types/location.ts +92 -92
  265. package/src/@types/matrix-sdk-crypto-wasm.d.ts +39 -39
  266. package/src/@types/media.ts +245 -245
  267. package/src/@types/membership.ts +57 -57
  268. package/src/@types/partials.ts +103 -103
  269. package/src/@types/polls.ts +120 -120
  270. package/src/@types/read_receipts.ts +61 -61
  271. package/src/@types/registration.ts +102 -102
  272. package/src/@types/search.ts +119 -119
  273. package/src/@types/signed.ts +25 -25
  274. package/src/@types/spaces.ts +37 -37
  275. package/src/@types/state_events.ts +153 -153
  276. package/src/@types/synapse.ts +40 -40
  277. package/src/@types/sync.ts +27 -27
  278. package/src/@types/threepids.ts +29 -29
  279. package/src/@types/topic.ts +69 -69
  280. package/src/@types/uia.ts +24 -24
  281. package/src/NamespacedValue.ts +121 -121
  282. package/src/ReEmitter.ts +93 -93
  283. package/src/base64.ts +86 -86
  284. package/src/briij.ts +4 -0
  285. package/src/client.ts +183 -10
  286. package/src/common-crypto/README.md +4 -4
  287. package/src/common-crypto/key-passphrase.ts +43 -43
  288. package/src/content-helpers.ts +298 -298
  289. package/src/content-repo.ts +122 -122
  290. package/src/crypto/store/base.ts +388 -388
  291. package/src/crypto/store/indexeddb-crypto-store-backend.ts +655 -655
  292. package/src/crypto/store/indexeddb-crypto-store.ts +555 -555
  293. package/src/crypto/store/localStorage-crypto-store.ts +409 -409
  294. package/src/crypto/store/memory-crypto-store.ts +326 -326
  295. package/src/crypto-api/CryptoEventHandlerMap.ts +42 -42
  296. package/src/crypto-api/key-passphrase.ts +58 -58
  297. package/src/crypto-api/keybackup.ts +114 -114
  298. package/src/crypto-api/recovery-key.ts +69 -69
  299. package/src/digest.ts +34 -34
  300. package/src/extensible_events_v1/ExtensibleEvent.ts +58 -58
  301. package/src/extensible_events_v1/InvalidEventError.ts +24 -24
  302. package/src/extensible_events_v1/MessageEvent.ts +143 -143
  303. package/src/extensible_events_v1/PollEndEvent.ts +97 -97
  304. package/src/extensible_events_v1/PollResponseEvent.ts +148 -148
  305. package/src/extensible_events_v1/PollStartEvent.ts +207 -207
  306. package/src/extensible_events_v1/utilities.ts +35 -35
  307. package/src/feature.ts +88 -88
  308. package/src/http-api/method.ts +25 -25
  309. package/src/http-api/prefix.ts +48 -48
  310. package/src/indexeddb-helpers.ts +50 -50
  311. package/src/indexeddb-worker.ts +24 -24
  312. package/src/matrixrtc/IKeyTransport.ts +63 -63
  313. package/src/matrixrtc/IMembershipManager.ts +120 -120
  314. package/src/matrixrtc/LivekitTransport.ts +46 -46
  315. package/src/matrixrtc/index.ts +24 -24
  316. package/src/matrixrtc/utils.ts +71 -71
  317. package/src/models/ToDeviceMessage.ts +38 -38
  318. package/src/models/device.ts +85 -85
  319. package/src/models/event-status.ts +39 -39
  320. package/src/models/invites-ignorer-types.ts +58 -58
  321. package/src/models/profile-keys.ts +33 -33
  322. package/src/models/room-summary.ts +78 -78
  323. package/src/models/search-result.ts +57 -57
  324. package/src/models/typed-event-emitter.ts +246 -246
  325. package/src/oidc/authorize.ts +279 -279
  326. package/src/oidc/error.ts +33 -33
  327. package/src/oidc/index.ts +33 -33
  328. package/src/oidc/register.ts +163 -163
  329. package/src/oidc/tokenRefresher.ts +184 -184
  330. package/src/oidc/validate.ts +265 -265
  331. package/src/randomstring.ts +103 -103
  332. package/src/realtime-callbacks.ts +191 -191
  333. package/src/receipt-accumulator.ts +189 -189
  334. package/src/rendezvous/RendezvousChannel.ts +48 -48
  335. package/src/rendezvous/RendezvousCode.ts +25 -25
  336. package/src/rendezvous/RendezvousError.ts +26 -26
  337. package/src/rendezvous/RendezvousFailureReason.ts +49 -49
  338. package/src/rendezvous/RendezvousIntent.ts +20 -20
  339. package/src/rendezvous/RendezvousTransport.ts +58 -58
  340. package/src/rendezvous/channels/MSC4108SecureChannel.ts +270 -270
  341. package/src/rendezvous/channels/index.ts +17 -17
  342. package/src/rendezvous/index.ts +25 -25
  343. package/src/rendezvous/transports/index.ts +17 -17
  344. package/src/rust-crypto/CrossSigningIdentity.ts +195 -195
  345. package/src/rust-crypto/OutgoingRequestsManager.ts +170 -170
  346. package/src/rust-crypto/device-converter.ts +128 -128
  347. package/src/rust-crypto/secret-storage.ts +60 -60
  348. package/src/service-types.ts +20 -20
  349. package/src/store/local-storage-events-emitter.ts +46 -46
  350. package/src/sync-accumulator.ts +779 -779
  351. package/src/thread-utils.ts +31 -31
  352. package/src/types.ts +59 -59
  353. package/src/utils/decryptAESSecretStorageItem.ts +54 -54
  354. package/src/utils/encryptAESSecretStorageItem.ts +73 -73
  355. package/src/utils/internal/deriveKeys.ts +63 -63
  356. package/src/utils/roomVersion.ts +35 -35
  357. package/src/version-support.ts +50 -50
  358. package/src/wallet-recovery.ts +252 -0
  359. package/src/webrtc/audioContext.ts +44 -44
  360. package/src/webrtc/callEventTypes.ts +101 -101
  361. package/src/webrtc/stats/callFeedStatsReporter.ts +91 -91
  362. package/src/webrtc/stats/callStatsReportGatherer.ts +219 -219
  363. package/src/webrtc/stats/callStatsReportSummary.ts +30 -30
  364. package/src/webrtc/stats/connectionStats.ts +47 -47
  365. package/src/webrtc/stats/connectionStatsBuilder.ts +28 -28
  366. package/src/webrtc/stats/connectionStatsReportBuilder.ts +140 -140
  367. package/src/webrtc/stats/groupCallStats.ts +93 -93
  368. package/src/webrtc/stats/media/mediaSsrcHandler.ts +57 -57
  369. package/src/webrtc/stats/media/mediaTrackHandler.ts +70 -70
  370. package/src/webrtc/stats/media/mediaTrackStats.ts +176 -176
  371. package/src/webrtc/stats/media/mediaTrackStatsHandler.ts +90 -90
  372. package/src/webrtc/stats/statsReport.ts +133 -133
  373. package/src/webrtc/stats/statsReportEmitter.ts +49 -49
  374. package/src/webrtc/stats/trackStatsBuilder.ts +207 -207
  375. package/src/webrtc/stats/transportStats.ts +26 -26
  376. package/src/webrtc/stats/transportStatsBuilder.ts +48 -48
  377. package/src/webrtc/stats/valueFormatter.ts +27 -27
  378. package/src/xrpl/identity.ts +245 -0
  379. package/src/xrpl/trust.ts +64 -0
  380. package/src/xrpl/verification.ts +284 -0
@@ -1,103 +1,103 @@
1
- /*
2
- Copyright 2018 New Vector Ltd
3
- Copyright 2019 The Matrix.org Foundation C.I.C.
4
-
5
- Licensed under the Apache License, Version 2.0 (the "License");
6
- you may not use this file except in compliance with the License.
7
- You may obtain a copy of the License at
8
-
9
- http://www.apache.org/licenses/LICENSE-2.0
10
-
11
- Unless required by applicable law or agreed to in writing, software
12
- distributed under the License is distributed on an "AS IS" BASIS,
13
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- See the License for the specific language governing permissions and
15
- limitations under the License.
16
- */
17
-
18
- import { encodeUnpaddedBase64Url } from "./base64.ts";
19
-
20
- /**
21
- * String representing the lowercase latin alphabet for use in {@link secureRandomStringFrom}
22
- * (can be combined with other such exports or other characters by appending strings)
23
- */
24
- export const LOWERCASE = "abcdefghijklmnopqrstuvwxyz";
25
-
26
- /**
27
- * String representing the uppercase latin alphabet for use in secureRandomStringFrom
28
- * (can be combined with other such exports or other characters by appending strings)
29
- */
30
- export const UPPERCASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
31
-
32
- /**
33
- * String representing the arabic numerals for use in secureRandomStringFrom
34
- * (can be combined with other such exports or other characters by appending strings)
35
- */
36
- export const DIGITS = "0123456789";
37
-
38
- export function secureRandomBase64Url(len: number): string {
39
- const key = new Uint8Array(len);
40
- globalThis.crypto.getRandomValues(key);
41
-
42
- return encodeUnpaddedBase64Url(key);
43
- }
44
-
45
- /**
46
- * Generates a random string of uppercase and lowercase letters plus digits using a
47
- * cryptographically secure random number generator.
48
- * @param len The length of the string to generate
49
- * @returns Random string of uppercase and lowercase letters plus digits of length `len`
50
- */
51
- export function secureRandomString(len: number): string {
52
- return secureRandomStringFrom(len, UPPERCASE + LOWERCASE + DIGITS);
53
- }
54
-
55
- /**
56
- * Generate a cryptographically secure random string using characters given.
57
- *
58
- * @param len - The length of the string to generate (must be positive and less than 32768).
59
- * @param chars - The characters to use in the random string (between 2 and 256 characters long).
60
- * @returns Random string of characters of length `len`.
61
- */
62
- export function secureRandomStringFrom(len: number, chars: string): string {
63
- // This is intended for latin strings so 256 possibilities should be more than enough and
64
- // means we can use random bytes, minimising the amount of entropy we need to ask for.
65
- if (chars.length < 2 || chars.length > 256) {
66
- throw new Error("Character set must be between 2 and 256 characters long");
67
- }
68
-
69
- if (len < 1 || len > 32768) {
70
- throw new Error("Requested random string length must be between 1 and 32768");
71
- }
72
-
73
- // We'll generate random unsigned bytes, so get the largest number less than 256 that is a multiple
74
- // of the length of the character set: We'll need to discard any random values that are larger than
75
- // this as we can't possibly map them onto the character set while keeping each character equally
76
- // likely to be chosen (minus 1 to convert to indices in a string). (Essentially, we're using a d8
77
- // to choose between 7 possibilities and re-rolling on an 8, keeping all 7 outcomes equally likely.)
78
- // Our random values must be strictly less than this
79
- const randomValueCutoff = 256 - (256 % chars.length);
80
-
81
- // Grab 30% more entropy than we need. This should be enough that we can discard the values that are
82
- // too high without having to go back and grab more unless we're super unlucky.
83
- const entropyBuffer = new Uint8Array(Math.floor(len * 1.3));
84
- // Mark all of this buffer as used to start with (we haven't populated it with entropy yet) so it will
85
- // be filled on the first iteration.
86
- let entropyBufferPos = entropyBuffer.length;
87
-
88
- const result = [];
89
- while (result.length < len) {
90
- if (entropyBufferPos === entropyBuffer.length) {
91
- globalThis.crypto.getRandomValues(entropyBuffer);
92
- entropyBufferPos = 0;
93
- }
94
-
95
- const randomByte = entropyBuffer[entropyBufferPos++];
96
-
97
- if (randomByte < randomValueCutoff) {
98
- result.push(chars[randomByte % chars.length]);
99
- }
100
- }
101
-
102
- return result.join("");
103
- }
1
+ /*
2
+ Copyright 2018 New Vector Ltd
3
+ Copyright 2019 The Matrix.org Foundation C.I.C.
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License");
6
+ you may not use this file except in compliance with the License.
7
+ You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
16
+ */
17
+
18
+ import { encodeUnpaddedBase64Url } from "./base64.ts";
19
+
20
+ /**
21
+ * String representing the lowercase latin alphabet for use in {@link secureRandomStringFrom}
22
+ * (can be combined with other such exports or other characters by appending strings)
23
+ */
24
+ export const LOWERCASE = "abcdefghijklmnopqrstuvwxyz";
25
+
26
+ /**
27
+ * String representing the uppercase latin alphabet for use in secureRandomStringFrom
28
+ * (can be combined with other such exports or other characters by appending strings)
29
+ */
30
+ export const UPPERCASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
31
+
32
+ /**
33
+ * String representing the arabic numerals for use in secureRandomStringFrom
34
+ * (can be combined with other such exports or other characters by appending strings)
35
+ */
36
+ export const DIGITS = "0123456789";
37
+
38
+ export function secureRandomBase64Url(len: number): string {
39
+ const key = new Uint8Array(len);
40
+ globalThis.crypto.getRandomValues(key);
41
+
42
+ return encodeUnpaddedBase64Url(key);
43
+ }
44
+
45
+ /**
46
+ * Generates a random string of uppercase and lowercase letters plus digits using a
47
+ * cryptographically secure random number generator.
48
+ * @param len The length of the string to generate
49
+ * @returns Random string of uppercase and lowercase letters plus digits of length `len`
50
+ */
51
+ export function secureRandomString(len: number): string {
52
+ return secureRandomStringFrom(len, UPPERCASE + LOWERCASE + DIGITS);
53
+ }
54
+
55
+ /**
56
+ * Generate a cryptographically secure random string using characters given.
57
+ *
58
+ * @param len - The length of the string to generate (must be positive and less than 32768).
59
+ * @param chars - The characters to use in the random string (between 2 and 256 characters long).
60
+ * @returns Random string of characters of length `len`.
61
+ */
62
+ export function secureRandomStringFrom(len: number, chars: string): string {
63
+ // This is intended for latin strings so 256 possibilities should be more than enough and
64
+ // means we can use random bytes, minimising the amount of entropy we need to ask for.
65
+ if (chars.length < 2 || chars.length > 256) {
66
+ throw new Error("Character set must be between 2 and 256 characters long");
67
+ }
68
+
69
+ if (len < 1 || len > 32768) {
70
+ throw new Error("Requested random string length must be between 1 and 32768");
71
+ }
72
+
73
+ // We'll generate random unsigned bytes, so get the largest number less than 256 that is a multiple
74
+ // of the length of the character set: We'll need to discard any random values that are larger than
75
+ // this as we can't possibly map them onto the character set while keeping each character equally
76
+ // likely to be chosen (minus 1 to convert to indices in a string). (Essentially, we're using a d8
77
+ // to choose between 7 possibilities and re-rolling on an 8, keeping all 7 outcomes equally likely.)
78
+ // Our random values must be strictly less than this
79
+ const randomValueCutoff = 256 - (256 % chars.length);
80
+
81
+ // Grab 30% more entropy than we need. This should be enough that we can discard the values that are
82
+ // too high without having to go back and grab more unless we're super unlucky.
83
+ const entropyBuffer = new Uint8Array(Math.floor(len * 1.3));
84
+ // Mark all of this buffer as used to start with (we haven't populated it with entropy yet) so it will
85
+ // be filled on the first iteration.
86
+ let entropyBufferPos = entropyBuffer.length;
87
+
88
+ const result = [];
89
+ while (result.length < len) {
90
+ if (entropyBufferPos === entropyBuffer.length) {
91
+ globalThis.crypto.getRandomValues(entropyBuffer);
92
+ entropyBufferPos = 0;
93
+ }
94
+
95
+ const randomByte = entropyBuffer[entropyBufferPos++];
96
+
97
+ if (randomByte < randomValueCutoff) {
98
+ result.push(chars[randomByte % chars.length]);
99
+ }
100
+ }
101
+
102
+ return result.join("");
103
+ }
@@ -1,191 +1,191 @@
1
- /*
2
- Copyright 2016 OpenMarket Ltd
3
- Copyright 2019 The Matrix.org Foundation C.I.C.
4
-
5
- Licensed under the Apache License, Version 2.0 (the "License");
6
- you may not use this file except in compliance with the License.
7
- You may obtain a copy of the License at
8
-
9
- http://www.apache.org/licenses/LICENSE-2.0
10
-
11
- Unless required by applicable law or agreed to in writing, software
12
- distributed under the License is distributed on an "AS IS" BASIS,
13
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- See the License for the specific language governing permissions and
15
- limitations under the License.
16
- */
17
-
18
- /* A re-implementation of the javascript callback functions (setTimeout,
19
- * clearTimeout; setInterval and clearInterval are not yet implemented) which
20
- * try to improve handling of large clock jumps (as seen when
21
- * suspending/resuming the system).
22
- *
23
- * In particular, if a timeout would have fired while the system was suspended,
24
- * it will instead fire as soon as possible after resume.
25
- */
26
-
27
- import { logger } from "./logger.ts";
28
-
29
- // we schedule a callback at least this often, to check if we've missed out on
30
- // some wall-clock time due to being suspended.
31
- const TIMER_CHECK_PERIOD_MS = 1000;
32
-
33
- // counter, for making up ids to return from setTimeout
34
- let count = 0;
35
-
36
- // the key for our callback with the real globalThis.setTimeout
37
- let realCallbackKey: NodeJS.Timeout | number;
38
-
39
- type Callback = {
40
- runAt: number;
41
- func: (...params: any[]) => void;
42
- params: any[];
43
- key: number;
44
- };
45
-
46
- // a sorted list of the callbacks to be run.
47
- // each is an object with keys [runAt, func, params, key].
48
- const callbackList: Callback[] = [];
49
-
50
- // var debuglog = logger.log.bind(logger);
51
- /* istanbul ignore next */
52
- const debuglog = function (...params: any[]): void {};
53
-
54
- /**
55
- * reimplementation of window.setTimeout, which will call the callback if
56
- * the wallclock time goes past the deadline.
57
- *
58
- * @param func - callback to be called after a delay
59
- * @param delayMs - number of milliseconds to delay by
60
- *
61
- * @returns an identifier for this callback, which may be passed into
62
- * clearTimeout later.
63
- */
64
- export function setTimeout(func: (...params: any[]) => void, delayMs: number, ...params: any[]): number {
65
- delayMs = delayMs || 0;
66
- if (delayMs < 0) {
67
- delayMs = 0;
68
- }
69
-
70
- const runAt = Date.now() + delayMs;
71
- const key = count++;
72
- debuglog("setTimeout: scheduling cb", key, "at", runAt, "(delay", delayMs, ")");
73
- const data = {
74
- runAt: runAt,
75
- func: func,
76
- params: params,
77
- key: key,
78
- };
79
-
80
- // figure out where it goes in the list
81
- const idx = binarySearch(callbackList, function (el) {
82
- return el.runAt - runAt;
83
- });
84
-
85
- callbackList.splice(idx, 0, data);
86
- scheduleRealCallback();
87
-
88
- return key;
89
- }
90
-
91
- /**
92
- * reimplementation of window.clearTimeout, which mirrors setTimeout
93
- *
94
- * @param key - result from an earlier setTimeout call
95
- */
96
- export function clearTimeout(key: number): void {
97
- if (callbackList.length === 0) {
98
- return;
99
- }
100
-
101
- // remove the element from the list
102
- let i: number;
103
- for (i = 0; i < callbackList.length; i++) {
104
- const cb = callbackList[i];
105
- if (cb.key == key) {
106
- callbackList.splice(i, 1);
107
- break;
108
- }
109
- }
110
-
111
- // iff it was the first one in the list, reschedule our callback.
112
- if (i === 0) {
113
- scheduleRealCallback();
114
- }
115
- }
116
-
117
- // use the real globalThis.setTimeout to schedule a callback to runCallbacks.
118
- function scheduleRealCallback(): void {
119
- if (realCallbackKey) {
120
- globalThis.clearTimeout(realCallbackKey as NodeJS.Timeout);
121
- }
122
-
123
- const first = callbackList[0];
124
-
125
- if (!first) {
126
- debuglog("scheduleRealCallback: no more callbacks, not rescheduling");
127
- return;
128
- }
129
-
130
- const timestamp = Date.now();
131
- const delayMs = Math.min(first.runAt - timestamp, TIMER_CHECK_PERIOD_MS);
132
-
133
- debuglog("scheduleRealCallback: now:", timestamp, "delay:", delayMs);
134
- realCallbackKey = globalThis.setTimeout(runCallbacks, delayMs);
135
- }
136
-
137
- function runCallbacks(): void {
138
- const timestamp = Date.now();
139
- debuglog("runCallbacks: now:", timestamp);
140
-
141
- // get the list of things to call
142
- const callbacksToRun: Callback[] = [];
143
- // eslint-disable-next-line
144
- while (true) {
145
- const first = callbackList[0];
146
- if (!first || first.runAt > timestamp) {
147
- break;
148
- }
149
- const cb = callbackList.shift()!;
150
- debuglog("runCallbacks: popping", cb.key);
151
- callbacksToRun.push(cb);
152
- }
153
-
154
- // reschedule the real callback before running our functions, to
155
- // keep the codepaths the same whether or not our functions
156
- // register their own setTimeouts.
157
- scheduleRealCallback();
158
-
159
- for (const cb of callbacksToRun) {
160
- try {
161
- cb.func.apply(globalThis, cb.params);
162
- } catch (e) {
163
- logger.error("Uncaught exception in callback function", e);
164
- }
165
- }
166
- }
167
-
168
- /* search in a sorted array.
169
- *
170
- * returns the index of the last element for which func returns
171
- * greater than zero, or array.length if no such element exists.
172
- */
173
- function binarySearch<T>(array: T[], func: (v: T) => number): number {
174
- // min is inclusive, max exclusive.
175
- let min = 0;
176
- let max = array.length;
177
-
178
- while (min < max) {
179
- const mid = (min + max) >> 1;
180
- const res = func(array[mid]);
181
- if (res > 0) {
182
- // the element at 'mid' is too big; set it as the new max.
183
- max = mid;
184
- } else {
185
- // the element at 'mid' is too small. 'min' is inclusive, so +1.
186
- min = mid + 1;
187
- }
188
- }
189
- // presumably, min==max now.
190
- return min;
191
- }
1
+ /*
2
+ Copyright 2016 OpenMarket Ltd
3
+ Copyright 2019 The Matrix.org Foundation C.I.C.
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License");
6
+ you may not use this file except in compliance with the License.
7
+ You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
16
+ */
17
+
18
+ /* A re-implementation of the javascript callback functions (setTimeout,
19
+ * clearTimeout; setInterval and clearInterval are not yet implemented) which
20
+ * try to improve handling of large clock jumps (as seen when
21
+ * suspending/resuming the system).
22
+ *
23
+ * In particular, if a timeout would have fired while the system was suspended,
24
+ * it will instead fire as soon as possible after resume.
25
+ */
26
+
27
+ import { logger } from "./logger.ts";
28
+
29
+ // we schedule a callback at least this often, to check if we've missed out on
30
+ // some wall-clock time due to being suspended.
31
+ const TIMER_CHECK_PERIOD_MS = 1000;
32
+
33
+ // counter, for making up ids to return from setTimeout
34
+ let count = 0;
35
+
36
+ // the key for our callback with the real globalThis.setTimeout
37
+ let realCallbackKey: NodeJS.Timeout | number;
38
+
39
+ type Callback = {
40
+ runAt: number;
41
+ func: (...params: any[]) => void;
42
+ params: any[];
43
+ key: number;
44
+ };
45
+
46
+ // a sorted list of the callbacks to be run.
47
+ // each is an object with keys [runAt, func, params, key].
48
+ const callbackList: Callback[] = [];
49
+
50
+ // var debuglog = logger.log.bind(logger);
51
+ /* istanbul ignore next */
52
+ const debuglog = function (...params: any[]): void {};
53
+
54
+ /**
55
+ * reimplementation of window.setTimeout, which will call the callback if
56
+ * the wallclock time goes past the deadline.
57
+ *
58
+ * @param func - callback to be called after a delay
59
+ * @param delayMs - number of milliseconds to delay by
60
+ *
61
+ * @returns an identifier for this callback, which may be passed into
62
+ * clearTimeout later.
63
+ */
64
+ export function setTimeout(func: (...params: any[]) => void, delayMs: number, ...params: any[]): number {
65
+ delayMs = delayMs || 0;
66
+ if (delayMs < 0) {
67
+ delayMs = 0;
68
+ }
69
+
70
+ const runAt = Date.now() + delayMs;
71
+ const key = count++;
72
+ debuglog("setTimeout: scheduling cb", key, "at", runAt, "(delay", delayMs, ")");
73
+ const data = {
74
+ runAt: runAt,
75
+ func: func,
76
+ params: params,
77
+ key: key,
78
+ };
79
+
80
+ // figure out where it goes in the list
81
+ const idx = binarySearch(callbackList, function (el) {
82
+ return el.runAt - runAt;
83
+ });
84
+
85
+ callbackList.splice(idx, 0, data);
86
+ scheduleRealCallback();
87
+
88
+ return key;
89
+ }
90
+
91
+ /**
92
+ * reimplementation of window.clearTimeout, which mirrors setTimeout
93
+ *
94
+ * @param key - result from an earlier setTimeout call
95
+ */
96
+ export function clearTimeout(key: number): void {
97
+ if (callbackList.length === 0) {
98
+ return;
99
+ }
100
+
101
+ // remove the element from the list
102
+ let i: number;
103
+ for (i = 0; i < callbackList.length; i++) {
104
+ const cb = callbackList[i];
105
+ if (cb.key == key) {
106
+ callbackList.splice(i, 1);
107
+ break;
108
+ }
109
+ }
110
+
111
+ // iff it was the first one in the list, reschedule our callback.
112
+ if (i === 0) {
113
+ scheduleRealCallback();
114
+ }
115
+ }
116
+
117
+ // use the real globalThis.setTimeout to schedule a callback to runCallbacks.
118
+ function scheduleRealCallback(): void {
119
+ if (realCallbackKey) {
120
+ globalThis.clearTimeout(realCallbackKey as NodeJS.Timeout);
121
+ }
122
+
123
+ const first = callbackList[0];
124
+
125
+ if (!first) {
126
+ debuglog("scheduleRealCallback: no more callbacks, not rescheduling");
127
+ return;
128
+ }
129
+
130
+ const timestamp = Date.now();
131
+ const delayMs = Math.min(first.runAt - timestamp, TIMER_CHECK_PERIOD_MS);
132
+
133
+ debuglog("scheduleRealCallback: now:", timestamp, "delay:", delayMs);
134
+ realCallbackKey = globalThis.setTimeout(runCallbacks, delayMs);
135
+ }
136
+
137
+ function runCallbacks(): void {
138
+ const timestamp = Date.now();
139
+ debuglog("runCallbacks: now:", timestamp);
140
+
141
+ // get the list of things to call
142
+ const callbacksToRun: Callback[] = [];
143
+ // eslint-disable-next-line
144
+ while (true) {
145
+ const first = callbackList[0];
146
+ if (!first || first.runAt > timestamp) {
147
+ break;
148
+ }
149
+ const cb = callbackList.shift()!;
150
+ debuglog("runCallbacks: popping", cb.key);
151
+ callbacksToRun.push(cb);
152
+ }
153
+
154
+ // reschedule the real callback before running our functions, to
155
+ // keep the codepaths the same whether or not our functions
156
+ // register their own setTimeouts.
157
+ scheduleRealCallback();
158
+
159
+ for (const cb of callbacksToRun) {
160
+ try {
161
+ cb.func.apply(globalThis, cb.params);
162
+ } catch (e) {
163
+ logger.error("Uncaught exception in callback function", e);
164
+ }
165
+ }
166
+ }
167
+
168
+ /* search in a sorted array.
169
+ *
170
+ * returns the index of the last element for which func returns
171
+ * greater than zero, or array.length if no such element exists.
172
+ */
173
+ function binarySearch<T>(array: T[], func: (v: T) => number): number {
174
+ // min is inclusive, max exclusive.
175
+ let min = 0;
176
+ let max = array.length;
177
+
178
+ while (min < max) {
179
+ const mid = (min + max) >> 1;
180
+ const res = func(array[mid]);
181
+ if (res > 0) {
182
+ // the element at 'mid' is too big; set it as the new max.
183
+ max = mid;
184
+ } else {
185
+ // the element at 'mid' is too small. 'min' is inclusive, so +1.
186
+ min = mid + 1;
187
+ }
188
+ }
189
+ // presumably, min==max now.
190
+ return min;
191
+ }