@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,265 +1,265 @@
1
- /*
2
- Copyright 2023 The Matrix.org Foundation C.I.C.
3
-
4
- Licensed under the Apache License, Version 2.0 (the "License");
5
- you may not use this file except in compliance with the License.
6
- You may obtain a copy of the License at
7
-
8
- http://www.apache.org/licenses/LICENSE-2.0
9
-
10
- Unless required by applicable law or agreed to in writing, software
11
- distributed under the License is distributed on an "AS IS" BASIS,
12
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- See the License for the specific language governing permissions and
14
- limitations under the License.
15
- */
16
-
17
- import { jwtDecode } from "jwt-decode";
18
- import { type IdTokenClaims, type OidcMetadata, type SigninResponse } from "oidc-client-ts";
19
-
20
- import { logger } from "../logger.ts";
21
- import { OidcError } from "./error.ts";
22
- import { OAuthGrantType } from "./index.ts";
23
-
24
- /**
25
- * Metadata from OAuth 2.0 client authentication API as per
26
- * https://spec.matrix.org/v1.17/client-server-api/#get_matrixclientv1auth_metadata
27
- * With validated properties required in type
28
- */
29
- export type ValidatedAuthMetadata = Partial<OidcMetadata> &
30
- Pick<
31
- // These values are from [RFC8414](https://datatracker.ietf.org/doc/html/rfc8414#section-2)
32
- // so we can reuse the OidcMetadata definitions from oidc-client-ts
33
- OidcMetadata,
34
- | "issuer"
35
- | "authorization_endpoint"
36
- | "token_endpoint"
37
- | "revocation_endpoint"
38
- | "response_types_supported"
39
- | "grant_types_supported"
40
- | "code_challenge_methods_supported"
41
- > & {
42
- // These values aren't part of RFC8414 so we add them here
43
- // Account management fields from stable MSC4191:
44
- account_management_uri?: string;
45
- account_management_actions_supported?: string[];
46
- // Value from [Initiating User Registration via OpenID Connect](https://openid.net/specs/openid-connect-prompt-create-1_0.html):
47
- prompt_values_supported?: string[];
48
- // Experimental MSC4341 value from [RFC8628](https://datatracker.ietf.org/doc/html/rfc8628#section-4):
49
- device_authorization_endpoint?: string;
50
- };
51
-
52
- const isRecord = (value: unknown): value is Record<string, unknown> =>
53
- !!value && typeof value === "object" && !Array.isArray(value);
54
- const requiredStringProperty = (wellKnown: Record<string, unknown>, key: string): boolean => {
55
- if (!wellKnown[key] || !optionalStringProperty(wellKnown, key)) {
56
- logger.error(`Missing or invalid property: ${key}`);
57
- return false;
58
- }
59
- return true;
60
- };
61
- const optionalStringProperty = (wellKnown: Record<string, unknown>, key: string): boolean => {
62
- if (!!wellKnown[key] && typeof wellKnown[key] !== "string") {
63
- logger.error(`Invalid property: ${key}`);
64
- return false;
65
- }
66
- return true;
67
- };
68
- const optionalStringArrayProperty = (wellKnown: Record<string, unknown>, key: string): boolean => {
69
- if (
70
- !!wellKnown[key] &&
71
- (!Array.isArray(wellKnown[key]) || !(<unknown[]>wellKnown[key]).every((v) => typeof v === "string"))
72
- ) {
73
- logger.error(`Invalid property: ${key}`);
74
- return false;
75
- }
76
- return true;
77
- };
78
- const requiredArrayValue = (wellKnown: Record<string, unknown>, key: string, value: any): boolean => {
79
- const array = wellKnown[key];
80
- if (!array || !Array.isArray(array) || !array.includes(value)) {
81
- logger.error(`Invalid property: ${key}. ${value} is required.`);
82
- return false;
83
- }
84
- return true;
85
- };
86
-
87
- /**
88
- * Validates OAuth 2.0 auth metadata as defined by
89
- * https://spec.matrix.org/v1.17/client-server-api/#get_matrixclientv1auth_metadata
90
- * is compatible with Element's OAuth/OIDC flow
91
- * @param authMetadata - json object
92
- * @returns valid issuer config
93
- * @throws Error - when issuer config is not found or is invalid
94
- */
95
- export const validateAuthMetadata = (authMetadata: unknown): ValidatedAuthMetadata => {
96
- if (!isRecord(authMetadata)) {
97
- logger.error("Issuer configuration not found or malformed");
98
- throw new Error(OidcError.OpSupport);
99
- }
100
-
101
- const isInvalid = [
102
- requiredStringProperty(authMetadata, "issuer"),
103
- requiredStringProperty(authMetadata, "authorization_endpoint"),
104
- requiredStringProperty(authMetadata, "token_endpoint"),
105
- requiredStringProperty(authMetadata, "revocation_endpoint"),
106
- optionalStringProperty(authMetadata, "registration_endpoint"),
107
- optionalStringProperty(authMetadata, "account_management_uri"),
108
- optionalStringProperty(authMetadata, "device_authorization_endpoint"),
109
- optionalStringArrayProperty(authMetadata, "account_management_actions_supported"),
110
- requiredArrayValue(authMetadata, "response_types_supported", "code"),
111
- requiredArrayValue(authMetadata, "grant_types_supported", OAuthGrantType.AuthorizationCode),
112
- requiredArrayValue(authMetadata, "code_challenge_methods_supported", "S256"),
113
- optionalStringArrayProperty(authMetadata, "prompt_values_supported"),
114
- ].some((isValid) => !isValid);
115
-
116
- if (!isInvalid) {
117
- return authMetadata as ValidatedAuthMetadata;
118
- }
119
-
120
- logger.error("Issuer configuration not valid");
121
- throw new Error(OidcError.OpSupport);
122
- };
123
-
124
- export const decodeIdToken = (token: string): IdTokenClaims => {
125
- try {
126
- return jwtDecode<IdTokenClaims>(token);
127
- } catch (error) {
128
- logger.error("Could not decode id_token", error);
129
- throw error;
130
- }
131
- };
132
-
133
- /**
134
- * Validate idToken
135
- * https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation
136
- * @param idToken - id token from token endpoint
137
- * @param issuer - issuer for the OP as found during discovery
138
- * @param clientId - this client's id as registered with the OP
139
- * @param nonce - nonce used in the authentication request
140
- * @throws when id token is invalid
141
- */
142
- export const validateIdToken = (
143
- idToken: string | undefined,
144
- issuer: string,
145
- clientId: string,
146
- nonce: string | undefined,
147
- ): void => {
148
- try {
149
- if (!idToken) {
150
- throw new Error("No ID token");
151
- }
152
- const claims = decodeIdToken(idToken);
153
-
154
- // The Issuer Identifier for the OpenID Provider MUST exactly match the value of the iss (issuer) Claim.
155
- if (claims.iss !== issuer) {
156
- throw new Error("Invalid issuer");
157
- }
158
- /**
159
- * The Client MUST validate that the aud (audience) Claim contains its client_id value registered at the Issuer identified by the iss (issuer) Claim as an audience.
160
- * The aud (audience) Claim MAY contain an array with more than one element.
161
- * The ID Token MUST be rejected if the ID Token does not list the Client as a valid audience, or if it contains additional audiences not trusted by the Client.
162
- * EW: Don't accept tokens with other untrusted audiences
163
- * */
164
- const sanitisedAuds = typeof claims.aud === "string" ? [claims.aud] : claims.aud;
165
- if (!sanitisedAuds.includes(clientId)) {
166
- throw new Error("Invalid audience");
167
- }
168
-
169
- /**
170
- * If a nonce value was sent in the Authentication Request, a nonce Claim MUST be present and its value checked
171
- * to verify that it is the same value as the one that was sent in the Authentication Request.
172
- */
173
- if (nonce !== undefined && claims.nonce !== nonce) {
174
- throw new Error("Invalid nonce");
175
- }
176
-
177
- /**
178
- * The current time MUST be before the time represented by the exp Claim.
179
- * exp is an epoch timestamp in seconds
180
- * */
181
- if (!claims.exp || Date.now() > claims.exp * 1000) {
182
- throw new Error("Invalid expiry");
183
- }
184
- } catch (error) {
185
- logger.error("Invalid ID token", error);
186
- throw new Error(OidcError.InvalidIdToken);
187
- }
188
- };
189
-
190
- /**
191
- * State we ask OidcClient to store when starting oidc authorization flow (in `generateOidcAuthorizationUrl`)
192
- * so that we can access it on return from the OP and complete login
193
- */
194
- export type UserState = {
195
- /**
196
- * Remember which server we were trying to login to
197
- */
198
- homeserverUrl: string;
199
- identityServerUrl?: string;
200
- /**
201
- * Used to validate id token
202
- */
203
- nonce: string;
204
- };
205
- /**
206
- * Validate stored user state exists and is valid
207
- * @param userState - userState returned by oidcClient.processSigninResponse
208
- * @throws when userState is invalid
209
- */
210
- export function validateStoredUserState(userState: unknown): asserts userState is UserState {
211
- if (!isRecord(userState)) {
212
- logger.error("Stored user state not found");
213
- throw new Error(OidcError.MissingOrInvalidStoredState);
214
- }
215
- const isInvalid = [
216
- requiredStringProperty(userState, "homeserverUrl"),
217
- requiredStringProperty(userState, "nonce"),
218
- optionalStringProperty(userState, "identityServerUrl"),
219
- ].some((isValid) => !isValid);
220
-
221
- if (isInvalid) {
222
- throw new Error(OidcError.MissingOrInvalidStoredState);
223
- }
224
- }
225
-
226
- /**
227
- * The expected response type from the token endpoint during authorization code flow
228
- * Normalized to always use capitalized 'Bearer' for token_type
229
- *
230
- * See https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.4,
231
- * https://openid.net/specs/openid-connect-basic-1_0.html#TokenOK.
232
- */
233
- export type BearerTokenResponse = {
234
- token_type: "Bearer";
235
- access_token: string;
236
- scope: string;
237
- refresh_token?: string;
238
- expires_in?: number;
239
- // from oidc-client-ts
240
- expires_at?: number;
241
- id_token: string;
242
- };
243
-
244
- /**
245
- * Make required properties required in type
246
- */
247
- type ValidSignInResponse = SigninResponse &
248
- BearerTokenResponse & {
249
- token_type: "Bearer" | "bearer";
250
- };
251
-
252
- const isValidBearerTokenResponse = (response: unknown): response is ValidSignInResponse =>
253
- isRecord(response) &&
254
- requiredStringProperty(response, "token_type") &&
255
- // token_type is case insensitive, some OPs return `token_type: "bearer"`
256
- (response["token_type"] as string).toLowerCase() === "bearer" &&
257
- requiredStringProperty(response, "access_token") &&
258
- requiredStringProperty(response, "refresh_token") &&
259
- (!("expires_in" in response) || typeof response["expires_in"] === "number");
260
-
261
- export function validateBearerTokenResponse(response: unknown): asserts response is ValidSignInResponse {
262
- if (!isValidBearerTokenResponse(response)) {
263
- throw new Error(OidcError.InvalidBearerTokenResponse);
264
- }
265
- }
1
+ /*
2
+ Copyright 2023 The Matrix.org Foundation C.I.C.
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ */
16
+
17
+ import { jwtDecode } from "jwt-decode";
18
+ import { type IdTokenClaims, type OidcMetadata, type SigninResponse } from "oidc-client-ts";
19
+
20
+ import { logger } from "../logger.ts";
21
+ import { OidcError } from "./error.ts";
22
+ import { OAuthGrantType } from "./index.ts";
23
+
24
+ /**
25
+ * Metadata from OAuth 2.0 client authentication API as per
26
+ * https://spec.matrix.org/v1.17/client-server-api/#get_matrixclientv1auth_metadata
27
+ * With validated properties required in type
28
+ */
29
+ export type ValidatedAuthMetadata = Partial<OidcMetadata> &
30
+ Pick<
31
+ // These values are from [RFC8414](https://datatracker.ietf.org/doc/html/rfc8414#section-2)
32
+ // so we can reuse the OidcMetadata definitions from oidc-client-ts
33
+ OidcMetadata,
34
+ | "issuer"
35
+ | "authorization_endpoint"
36
+ | "token_endpoint"
37
+ | "revocation_endpoint"
38
+ | "response_types_supported"
39
+ | "grant_types_supported"
40
+ | "code_challenge_methods_supported"
41
+ > & {
42
+ // These values aren't part of RFC8414 so we add them here
43
+ // Account management fields from stable MSC4191:
44
+ account_management_uri?: string;
45
+ account_management_actions_supported?: string[];
46
+ // Value from [Initiating User Registration via OpenID Connect](https://openid.net/specs/openid-connect-prompt-create-1_0.html):
47
+ prompt_values_supported?: string[];
48
+ // Experimental MSC4341 value from [RFC8628](https://datatracker.ietf.org/doc/html/rfc8628#section-4):
49
+ device_authorization_endpoint?: string;
50
+ };
51
+
52
+ const isRecord = (value: unknown): value is Record<string, unknown> =>
53
+ !!value && typeof value === "object" && !Array.isArray(value);
54
+ const requiredStringProperty = (wellKnown: Record<string, unknown>, key: string): boolean => {
55
+ if (!wellKnown[key] || !optionalStringProperty(wellKnown, key)) {
56
+ logger.error(`Missing or invalid property: ${key}`);
57
+ return false;
58
+ }
59
+ return true;
60
+ };
61
+ const optionalStringProperty = (wellKnown: Record<string, unknown>, key: string): boolean => {
62
+ if (!!wellKnown[key] && typeof wellKnown[key] !== "string") {
63
+ logger.error(`Invalid property: ${key}`);
64
+ return false;
65
+ }
66
+ return true;
67
+ };
68
+ const optionalStringArrayProperty = (wellKnown: Record<string, unknown>, key: string): boolean => {
69
+ if (
70
+ !!wellKnown[key] &&
71
+ (!Array.isArray(wellKnown[key]) || !(<unknown[]>wellKnown[key]).every((v) => typeof v === "string"))
72
+ ) {
73
+ logger.error(`Invalid property: ${key}`);
74
+ return false;
75
+ }
76
+ return true;
77
+ };
78
+ const requiredArrayValue = (wellKnown: Record<string, unknown>, key: string, value: any): boolean => {
79
+ const array = wellKnown[key];
80
+ if (!array || !Array.isArray(array) || !array.includes(value)) {
81
+ logger.error(`Invalid property: ${key}. ${value} is required.`);
82
+ return false;
83
+ }
84
+ return true;
85
+ };
86
+
87
+ /**
88
+ * Validates OAuth 2.0 auth metadata as defined by
89
+ * https://spec.matrix.org/v1.17/client-server-api/#get_matrixclientv1auth_metadata
90
+ * is compatible with Element's OAuth/OIDC flow
91
+ * @param authMetadata - json object
92
+ * @returns valid issuer config
93
+ * @throws Error - when issuer config is not found or is invalid
94
+ */
95
+ export const validateAuthMetadata = (authMetadata: unknown): ValidatedAuthMetadata => {
96
+ if (!isRecord(authMetadata)) {
97
+ logger.error("Issuer configuration not found or malformed");
98
+ throw new Error(OidcError.OpSupport);
99
+ }
100
+
101
+ const isInvalid = [
102
+ requiredStringProperty(authMetadata, "issuer"),
103
+ requiredStringProperty(authMetadata, "authorization_endpoint"),
104
+ requiredStringProperty(authMetadata, "token_endpoint"),
105
+ requiredStringProperty(authMetadata, "revocation_endpoint"),
106
+ optionalStringProperty(authMetadata, "registration_endpoint"),
107
+ optionalStringProperty(authMetadata, "account_management_uri"),
108
+ optionalStringProperty(authMetadata, "device_authorization_endpoint"),
109
+ optionalStringArrayProperty(authMetadata, "account_management_actions_supported"),
110
+ requiredArrayValue(authMetadata, "response_types_supported", "code"),
111
+ requiredArrayValue(authMetadata, "grant_types_supported", OAuthGrantType.AuthorizationCode),
112
+ requiredArrayValue(authMetadata, "code_challenge_methods_supported", "S256"),
113
+ optionalStringArrayProperty(authMetadata, "prompt_values_supported"),
114
+ ].some((isValid) => !isValid);
115
+
116
+ if (!isInvalid) {
117
+ return authMetadata as ValidatedAuthMetadata;
118
+ }
119
+
120
+ logger.error("Issuer configuration not valid");
121
+ throw new Error(OidcError.OpSupport);
122
+ };
123
+
124
+ export const decodeIdToken = (token: string): IdTokenClaims => {
125
+ try {
126
+ return jwtDecode<IdTokenClaims>(token);
127
+ } catch (error) {
128
+ logger.error("Could not decode id_token", error);
129
+ throw error;
130
+ }
131
+ };
132
+
133
+ /**
134
+ * Validate idToken
135
+ * https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation
136
+ * @param idToken - id token from token endpoint
137
+ * @param issuer - issuer for the OP as found during discovery
138
+ * @param clientId - this client's id as registered with the OP
139
+ * @param nonce - nonce used in the authentication request
140
+ * @throws when id token is invalid
141
+ */
142
+ export const validateIdToken = (
143
+ idToken: string | undefined,
144
+ issuer: string,
145
+ clientId: string,
146
+ nonce: string | undefined,
147
+ ): void => {
148
+ try {
149
+ if (!idToken) {
150
+ throw new Error("No ID token");
151
+ }
152
+ const claims = decodeIdToken(idToken);
153
+
154
+ // The Issuer Identifier for the OpenID Provider MUST exactly match the value of the iss (issuer) Claim.
155
+ if (claims.iss !== issuer) {
156
+ throw new Error("Invalid issuer");
157
+ }
158
+ /**
159
+ * The Client MUST validate that the aud (audience) Claim contains its client_id value registered at the Issuer identified by the iss (issuer) Claim as an audience.
160
+ * The aud (audience) Claim MAY contain an array with more than one element.
161
+ * The ID Token MUST be rejected if the ID Token does not list the Client as a valid audience, or if it contains additional audiences not trusted by the Client.
162
+ * EW: Don't accept tokens with other untrusted audiences
163
+ * */
164
+ const sanitisedAuds = typeof claims.aud === "string" ? [claims.aud] : claims.aud;
165
+ if (!sanitisedAuds.includes(clientId)) {
166
+ throw new Error("Invalid audience");
167
+ }
168
+
169
+ /**
170
+ * If a nonce value was sent in the Authentication Request, a nonce Claim MUST be present and its value checked
171
+ * to verify that it is the same value as the one that was sent in the Authentication Request.
172
+ */
173
+ if (nonce !== undefined && claims.nonce !== nonce) {
174
+ throw new Error("Invalid nonce");
175
+ }
176
+
177
+ /**
178
+ * The current time MUST be before the time represented by the exp Claim.
179
+ * exp is an epoch timestamp in seconds
180
+ * */
181
+ if (!claims.exp || Date.now() > claims.exp * 1000) {
182
+ throw new Error("Invalid expiry");
183
+ }
184
+ } catch (error) {
185
+ logger.error("Invalid ID token", error);
186
+ throw new Error(OidcError.InvalidIdToken);
187
+ }
188
+ };
189
+
190
+ /**
191
+ * State we ask OidcClient to store when starting oidc authorization flow (in `generateOidcAuthorizationUrl`)
192
+ * so that we can access it on return from the OP and complete login
193
+ */
194
+ export type UserState = {
195
+ /**
196
+ * Remember which server we were trying to login to
197
+ */
198
+ homeserverUrl: string;
199
+ identityServerUrl?: string;
200
+ /**
201
+ * Used to validate id token
202
+ */
203
+ nonce: string;
204
+ };
205
+ /**
206
+ * Validate stored user state exists and is valid
207
+ * @param userState - userState returned by oidcClient.processSigninResponse
208
+ * @throws when userState is invalid
209
+ */
210
+ export function validateStoredUserState(userState: unknown): asserts userState is UserState {
211
+ if (!isRecord(userState)) {
212
+ logger.error("Stored user state not found");
213
+ throw new Error(OidcError.MissingOrInvalidStoredState);
214
+ }
215
+ const isInvalid = [
216
+ requiredStringProperty(userState, "homeserverUrl"),
217
+ requiredStringProperty(userState, "nonce"),
218
+ optionalStringProperty(userState, "identityServerUrl"),
219
+ ].some((isValid) => !isValid);
220
+
221
+ if (isInvalid) {
222
+ throw new Error(OidcError.MissingOrInvalidStoredState);
223
+ }
224
+ }
225
+
226
+ /**
227
+ * The expected response type from the token endpoint during authorization code flow
228
+ * Normalized to always use capitalized 'Bearer' for token_type
229
+ *
230
+ * See https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.4,
231
+ * https://openid.net/specs/openid-connect-basic-1_0.html#TokenOK.
232
+ */
233
+ export type BearerTokenResponse = {
234
+ token_type: "Bearer";
235
+ access_token: string;
236
+ scope: string;
237
+ refresh_token?: string;
238
+ expires_in?: number;
239
+ // from oidc-client-ts
240
+ expires_at?: number;
241
+ id_token: string;
242
+ };
243
+
244
+ /**
245
+ * Make required properties required in type
246
+ */
247
+ type ValidSignInResponse = SigninResponse &
248
+ BearerTokenResponse & {
249
+ token_type: "Bearer" | "bearer";
250
+ };
251
+
252
+ const isValidBearerTokenResponse = (response: unknown): response is ValidSignInResponse =>
253
+ isRecord(response) &&
254
+ requiredStringProperty(response, "token_type") &&
255
+ // token_type is case insensitive, some OPs return `token_type: "bearer"`
256
+ (response["token_type"] as string).toLowerCase() === "bearer" &&
257
+ requiredStringProperty(response, "access_token") &&
258
+ requiredStringProperty(response, "refresh_token") &&
259
+ (!("expires_in" in response) || typeof response["expires_in"] === "number");
260
+
261
+ export function validateBearerTokenResponse(response: unknown): asserts response is ValidSignInResponse {
262
+ if (!isValidBearerTokenResponse(response)) {
263
+ throw new Error(OidcError.InvalidBearerTokenResponse);
264
+ }
265
+ }