@jeongsu816/matrix-bot-sdk 0.0.0-stage → 0.8.1

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 (377) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +50 -2
  3. package/lib/AdminApis.d.ts +52 -0
  4. package/lib/AdminApis.js +29 -0
  5. package/lib/AdminApis.js.map +1 -0
  6. package/lib/DMs.d.ts +48 -0
  7. package/lib/DMs.js +160 -0
  8. package/lib/DMs.js.map +1 -0
  9. package/lib/IFilter.d.ts +7 -0
  10. package/lib/IFilter.js +3 -0
  11. package/lib/IFilter.js.map +1 -0
  12. package/lib/MatrixAuth.d.ts +45 -0
  13. package/lib/MatrixAuth.js +125 -0
  14. package/lib/MatrixAuth.js.map +1 -0
  15. package/lib/MatrixClient.d.ts +834 -0
  16. package/lib/MatrixClient.js +2268 -0
  17. package/lib/MatrixClient.js.map +1 -0
  18. package/lib/PantalaimonClient.d.ts +42 -0
  19. package/lib/PantalaimonClient.js +44 -0
  20. package/lib/PantalaimonClient.js.map +1 -0
  21. package/lib/SynapseAdminApis.d.ts +350 -0
  22. package/lib/SynapseAdminApis.js +244 -0
  23. package/lib/SynapseAdminApis.js.map +1 -0
  24. package/lib/SynchronousMatrixClient.d.ts +82 -0
  25. package/lib/SynchronousMatrixClient.js +130 -0
  26. package/lib/SynchronousMatrixClient.js.map +1 -0
  27. package/lib/UnstableApis.d.ts +43 -0
  28. package/lib/UnstableApis.js +74 -0
  29. package/lib/UnstableApis.js.map +1 -0
  30. package/lib/appservice/Appservice.d.ts +328 -0
  31. package/lib/appservice/Appservice.js +803 -0
  32. package/lib/appservice/Appservice.js.map +1 -0
  33. package/lib/appservice/Intent.d.ts +113 -0
  34. package/lib/appservice/Intent.js +363 -0
  35. package/lib/appservice/Intent.js.map +1 -0
  36. package/lib/appservice/MatrixBridge.d.ts +85 -0
  37. package/lib/appservice/MatrixBridge.js +111 -0
  38. package/lib/appservice/MatrixBridge.js.map +1 -0
  39. package/lib/appservice/UnstableAppserviceApis.d.ts +41 -0
  40. package/lib/appservice/UnstableAppserviceApis.js +62 -0
  41. package/lib/appservice/UnstableAppserviceApis.js.map +1 -0
  42. package/lib/appservice/http_responses.d.ts +77 -0
  43. package/lib/appservice/http_responses.js +3 -0
  44. package/lib/appservice/http_responses.js.map +1 -0
  45. package/lib/b64.d.ts +42 -0
  46. package/lib/b64.js +68 -0
  47. package/lib/b64.js.map +1 -0
  48. package/lib/e2ee/CrossSigningBootstrap.d.ts +73 -0
  49. package/lib/e2ee/CrossSigningBootstrap.js +86 -0
  50. package/lib/e2ee/CrossSigningBootstrap.js.map +1 -0
  51. package/lib/e2ee/CryptoClient.d.ts +163 -0
  52. package/lib/e2ee/CryptoClient.js +382 -0
  53. package/lib/e2ee/CryptoClient.js.map +1 -0
  54. package/lib/e2ee/ICryptoRoomInformation.d.ts +8 -0
  55. package/lib/e2ee/ICryptoRoomInformation.js +3 -0
  56. package/lib/e2ee/ICryptoRoomInformation.js.map +1 -0
  57. package/lib/e2ee/RoomTracker.d.ts +41 -0
  58. package/lib/e2ee/RoomTracker.js +96 -0
  59. package/lib/e2ee/RoomTracker.js.map +1 -0
  60. package/lib/e2ee/RustEngine.d.ts +149 -0
  61. package/lib/e2ee/RustEngine.js +467 -0
  62. package/lib/e2ee/RustEngine.js.map +1 -0
  63. package/lib/e2ee/decorators.d.ts +10 -0
  64. package/lib/e2ee/decorators.js +37 -0
  65. package/lib/e2ee/decorators.js.map +1 -0
  66. package/lib/helpers/MatrixEntity.d.ts +37 -0
  67. package/lib/helpers/MatrixEntity.js +67 -0
  68. package/lib/helpers/MatrixEntity.js.map +1 -0
  69. package/lib/helpers/MatrixGlob.d.ts +22 -0
  70. package/lib/helpers/MatrixGlob.js +35 -0
  71. package/lib/helpers/MatrixGlob.js.map +1 -0
  72. package/lib/helpers/MentionPill.d.ts +40 -0
  73. package/lib/helpers/MentionPill.js +91 -0
  74. package/lib/helpers/MentionPill.js.map +1 -0
  75. package/lib/helpers/Permalinks.d.ts +58 -0
  76. package/lib/helpers/Permalinks.js +73 -0
  77. package/lib/helpers/Permalinks.js.map +1 -0
  78. package/lib/helpers/ProfileCache.d.ts +48 -0
  79. package/lib/helpers/ProfileCache.js +114 -0
  80. package/lib/helpers/ProfileCache.js.map +1 -0
  81. package/lib/helpers/RichReply.d.ts +17 -0
  82. package/lib/helpers/RichReply.js +47 -0
  83. package/lib/helpers/RichReply.js.map +1 -0
  84. package/lib/helpers/UnpaddedBase64.d.ts +31 -0
  85. package/lib/helpers/UnpaddedBase64.js +45 -0
  86. package/lib/helpers/UnpaddedBase64.js.map +1 -0
  87. package/lib/http.d.ts +17 -0
  88. package/lib/http.js +147 -0
  89. package/lib/http.js.map +1 -0
  90. package/lib/identity/IdentityClient.d.ts +93 -0
  91. package/lib/identity/IdentityClient.js +248 -0
  92. package/lib/identity/IdentityClient.js.map +1 -0
  93. package/lib/index.d.ts +91 -0
  94. package/lib/index.js +125 -0
  95. package/lib/index.js.map +1 -0
  96. package/lib/logging/ConsoleLogger.d.ts +12 -0
  97. package/lib/logging/ConsoleLogger.js +28 -0
  98. package/lib/logging/ConsoleLogger.js.map +1 -0
  99. package/lib/logging/ILogger.d.ts +36 -0
  100. package/lib/logging/ILogger.js +3 -0
  101. package/lib/logging/ILogger.js.map +1 -0
  102. package/lib/logging/LogService.d.ts +100 -0
  103. package/lib/logging/LogService.js +169 -0
  104. package/lib/logging/LogService.js.map +1 -0
  105. package/lib/logging/RichConsoleLogger.d.ts +20 -0
  106. package/lib/logging/RichConsoleLogger.js +41 -0
  107. package/lib/logging/RichConsoleLogger.js.map +1 -0
  108. package/lib/metrics/IMetricListener.d.ts +52 -0
  109. package/lib/metrics/IMetricListener.js +3 -0
  110. package/lib/metrics/IMetricListener.js.map +1 -0
  111. package/lib/metrics/Metrics.d.ts +66 -0
  112. package/lib/metrics/Metrics.js +128 -0
  113. package/lib/metrics/Metrics.js.map +1 -0
  114. package/lib/metrics/contexts.d.ts +51 -0
  115. package/lib/metrics/contexts.js +3 -0
  116. package/lib/metrics/contexts.js.map +1 -0
  117. package/lib/metrics/decorators.d.ts +15 -0
  118. package/lib/metrics/decorators.js +92 -0
  119. package/lib/metrics/decorators.js.map +1 -0
  120. package/lib/metrics/names.d.ts +45 -0
  121. package/lib/metrics/names.js +49 -0
  122. package/lib/metrics/names.js.map +1 -0
  123. package/lib/mixins/AutojoinRoomsMixin.d.ts +10 -0
  124. package/lib/mixins/AutojoinRoomsMixin.js +25 -0
  125. package/lib/mixins/AutojoinRoomsMixin.js.map +1 -0
  126. package/lib/mixins/AutojoinUpgradedRoomsMixin.d.ts +10 -0
  127. package/lib/mixins/AutojoinUpgradedRoomsMixin.js +40 -0
  128. package/lib/mixins/AutojoinUpgradedRoomsMixin.js.map +1 -0
  129. package/lib/models/Account.d.ts +8 -0
  130. package/lib/models/Account.js +3 -0
  131. package/lib/models/Account.js.map +1 -0
  132. package/lib/models/CreateRoom.d.ts +125 -0
  133. package/lib/models/CreateRoom.js +3 -0
  134. package/lib/models/CreateRoom.js.map +1 -0
  135. package/lib/models/Crypto.d.ts +167 -0
  136. package/lib/models/Crypto.js +31 -0
  137. package/lib/models/Crypto.js.map +1 -0
  138. package/lib/models/EventContext.d.ts +19 -0
  139. package/lib/models/EventContext.js +3 -0
  140. package/lib/models/EventContext.js.map +1 -0
  141. package/lib/models/IdentityServerModels.d.ts +20 -0
  142. package/lib/models/IdentityServerModels.js +3 -0
  143. package/lib/models/IdentityServerModels.js.map +1 -0
  144. package/lib/models/MSC2176.d.ts +42 -0
  145. package/lib/models/MSC2176.js +3 -0
  146. package/lib/models/MSC2176.js.map +1 -0
  147. package/lib/models/MatrixError.d.ts +38 -0
  148. package/lib/models/MatrixError.js +30 -0
  149. package/lib/models/MatrixError.js.map +1 -0
  150. package/lib/models/MatrixProfile.d.ts +43 -0
  151. package/lib/models/MatrixProfile.js +43 -0
  152. package/lib/models/MatrixProfile.js.map +1 -0
  153. package/lib/models/OpenIDConnect.d.ts +10 -0
  154. package/lib/models/OpenIDConnect.js +3 -0
  155. package/lib/models/OpenIDConnect.js.map +1 -0
  156. package/lib/models/Policies.d.ts +25 -0
  157. package/lib/models/Policies.js +3 -0
  158. package/lib/models/Policies.js.map +1 -0
  159. package/lib/models/PowerLevelAction.d.ts +27 -0
  160. package/lib/models/PowerLevelAction.js +32 -0
  161. package/lib/models/PowerLevelAction.js.map +1 -0
  162. package/lib/models/PowerLevelBounds.d.ts +15 -0
  163. package/lib/models/PowerLevelBounds.js +3 -0
  164. package/lib/models/PowerLevelBounds.js.map +1 -0
  165. package/lib/models/Presence.d.ts +25 -0
  166. package/lib/models/Presence.js +38 -0
  167. package/lib/models/Presence.js.map +1 -0
  168. package/lib/models/ServerVersions.d.ts +8 -0
  169. package/lib/models/ServerVersions.js +3 -0
  170. package/lib/models/ServerVersions.js.map +1 -0
  171. package/lib/models/Spaces.d.ts +116 -0
  172. package/lib/models/Spaces.js +91 -0
  173. package/lib/models/Spaces.js.map +1 -0
  174. package/lib/models/Threepid.d.ts +8 -0
  175. package/lib/models/Threepid.js +3 -0
  176. package/lib/models/Threepid.js.map +1 -0
  177. package/lib/models/events/AliasesEvent.d.ts +27 -0
  178. package/lib/models/events/AliasesEvent.js +27 -0
  179. package/lib/models/events/AliasesEvent.js.map +1 -0
  180. package/lib/models/events/CanonicalAliasEvent.d.ts +23 -0
  181. package/lib/models/events/CanonicalAliasEvent.js +21 -0
  182. package/lib/models/events/CanonicalAliasEvent.js.map +1 -0
  183. package/lib/models/events/CreateEvent.d.ts +63 -0
  184. package/lib/models/events/CreateEvent.js +33 -0
  185. package/lib/models/events/CreateEvent.js.map +1 -0
  186. package/lib/models/events/EncryptedRoomEvent.d.ts +42 -0
  187. package/lib/models/events/EncryptedRoomEvent.js +28 -0
  188. package/lib/models/events/EncryptedRoomEvent.js.map +1 -0
  189. package/lib/models/events/EncryptionEvent.d.ts +47 -0
  190. package/lib/models/events/EncryptionEvent.js +42 -0
  191. package/lib/models/events/EncryptionEvent.js.map +1 -0
  192. package/lib/models/events/Event.d.ts +26 -0
  193. package/lib/models/events/Event.js +40 -0
  194. package/lib/models/events/Event.js.map +1 -0
  195. package/lib/models/events/EventKind.d.ts +15 -0
  196. package/lib/models/events/EventKind.js +20 -0
  197. package/lib/models/events/EventKind.js.map +1 -0
  198. package/lib/models/events/InvalidEventError.d.ts +14 -0
  199. package/lib/models/events/InvalidEventError.js +24 -0
  200. package/lib/models/events/InvalidEventError.js.map +1 -0
  201. package/lib/models/events/JoinRulesEvent.d.ts +29 -0
  202. package/lib/models/events/JoinRulesEvent.js +21 -0
  203. package/lib/models/events/JoinRulesEvent.js.map +1 -0
  204. package/lib/models/events/MembershipEvent.d.ts +54 -0
  205. package/lib/models/events/MembershipEvent.js +49 -0
  206. package/lib/models/events/MembershipEvent.js.map +1 -0
  207. package/lib/models/events/MessageEvent.d.ts +233 -0
  208. package/lib/models/events/MessageEvent.js +49 -0
  209. package/lib/models/events/MessageEvent.js.map +1 -0
  210. package/lib/models/events/PinnedEventsEvent.d.ts +23 -0
  211. package/lib/models/events/PinnedEventsEvent.js +21 -0
  212. package/lib/models/events/PinnedEventsEvent.js.map +1 -0
  213. package/lib/models/events/PowerLevelsEvent.d.ts +96 -0
  214. package/lib/models/events/PowerLevelsEvent.js +70 -0
  215. package/lib/models/events/PowerLevelsEvent.js.map +1 -0
  216. package/lib/models/events/PresenceEvent.d.ts +56 -0
  217. package/lib/models/events/PresenceEvent.js +21 -0
  218. package/lib/models/events/PresenceEvent.js.map +1 -0
  219. package/lib/models/events/RedactionEvent.d.ts +28 -0
  220. package/lib/models/events/RedactionEvent.js +36 -0
  221. package/lib/models/events/RedactionEvent.js.map +1 -0
  222. package/lib/models/events/RoomAvatarEvent.d.ts +28 -0
  223. package/lib/models/events/RoomAvatarEvent.js +21 -0
  224. package/lib/models/events/RoomAvatarEvent.js.map +1 -0
  225. package/lib/models/events/RoomEvent.d.ts +58 -0
  226. package/lib/models/events/RoomEvent.js +57 -0
  227. package/lib/models/events/RoomEvent.js.map +1 -0
  228. package/lib/models/events/RoomNameEvent.d.ts +20 -0
  229. package/lib/models/events/RoomNameEvent.js +21 -0
  230. package/lib/models/events/RoomNameEvent.js.map +1 -0
  231. package/lib/models/events/RoomTopicEvent.d.ts +20 -0
  232. package/lib/models/events/RoomTopicEvent.js +21 -0
  233. package/lib/models/events/RoomTopicEvent.js.map +1 -0
  234. package/lib/models/events/SpaceChildEvent.d.ts +53 -0
  235. package/lib/models/events/SpaceChildEvent.js +49 -0
  236. package/lib/models/events/SpaceChildEvent.js.map +1 -0
  237. package/lib/models/events/converter.d.ts +8 -0
  238. package/lib/models/events/converter.js +50 -0
  239. package/lib/models/events/converter.js.map +1 -0
  240. package/lib/models/unstable/MediaInfo.d.ts +16 -0
  241. package/lib/models/unstable/MediaInfo.js +3 -0
  242. package/lib/models/unstable/MediaInfo.js.map +1 -0
  243. package/lib/preprocessors/IPreprocessor.d.ts +22 -0
  244. package/lib/preprocessors/IPreprocessor.js +3 -0
  245. package/lib/preprocessors/IPreprocessor.js.map +1 -0
  246. package/lib/preprocessors/RichRepliesPreprocessor.d.ts +67 -0
  247. package/lib/preprocessors/RichRepliesPreprocessor.js +112 -0
  248. package/lib/preprocessors/RichRepliesPreprocessor.js.map +1 -0
  249. package/lib/request.d.ts +13 -0
  250. package/lib/request.js +23 -0
  251. package/lib/request.js.map +1 -0
  252. package/lib/simple-validation.d.ts +10 -0
  253. package/lib/simple-validation.js +30 -0
  254. package/lib/simple-validation.js.map +1 -0
  255. package/lib/storage/IAppserviceStorageProvider.d.ts +48 -0
  256. package/lib/storage/IAppserviceStorageProvider.js +3 -0
  257. package/lib/storage/IAppserviceStorageProvider.js.map +1 -0
  258. package/lib/storage/ICryptoStorageProvider.d.ts +32 -0
  259. package/lib/storage/ICryptoStorageProvider.js +3 -0
  260. package/lib/storage/ICryptoStorageProvider.js.map +1 -0
  261. package/lib/storage/IStorageProvider.d.ts +47 -0
  262. package/lib/storage/IStorageProvider.js +3 -0
  263. package/lib/storage/IStorageProvider.js.map +1 -0
  264. package/lib/storage/MemoryStorageProvider.d.ts +26 -0
  265. package/lib/storage/MemoryStorageProvider.js +55 -0
  266. package/lib/storage/MemoryStorageProvider.js.map +1 -0
  267. package/lib/storage/RustSdkCryptoStorageProvider.d.ts +38 -0
  268. package/lib/storage/RustSdkCryptoStorageProvider.js +69 -0
  269. package/lib/storage/RustSdkCryptoStorageProvider.js.map +1 -0
  270. package/lib/storage/SimpleFsStorageProvider.d.ts +31 -0
  271. package/lib/storage/SimpleFsStorageProvider.js +122 -0
  272. package/lib/storage/SimpleFsStorageProvider.js.map +1 -0
  273. package/lib/storage/SimplePostgresStorageProvider.d.ts +32 -0
  274. package/lib/storage/SimplePostgresStorageProvider.js +148 -0
  275. package/lib/storage/SimplePostgresStorageProvider.js.map +1 -0
  276. package/lib/strategies/AppserviceJoinRoomStrategy.d.ts +14 -0
  277. package/lib/strategies/AppserviceJoinRoomStrategy.js +54 -0
  278. package/lib/strategies/AppserviceJoinRoomStrategy.js.map +1 -0
  279. package/lib/strategies/JoinRoomStrategy.d.ts +11 -0
  280. package/lib/strategies/JoinRoomStrategy.js +44 -0
  281. package/lib/strategies/JoinRoomStrategy.js.map +1 -0
  282. package/package.json +136 -4
  283. package/src/AdminApis.ts +60 -0
  284. package/src/DMs.ts +164 -0
  285. package/src/IFilter.ts +7 -0
  286. package/src/MatrixAuth.ts +129 -0
  287. package/src/MatrixClient.ts +2046 -0
  288. package/src/PantalaimonClient.ts +62 -0
  289. package/src/SynapseAdminApis.ts +482 -0
  290. package/src/SynchronousMatrixClient.ts +129 -0
  291. package/src/UnstableApis.ts +75 -0
  292. package/src/appservice/Appservice.ts +1089 -0
  293. package/src/appservice/Intent.ts +342 -0
  294. package/src/appservice/MatrixBridge.ts +139 -0
  295. package/src/appservice/UnstableAppserviceApis.ts +63 -0
  296. package/src/appservice/http_responses.ts +77 -0
  297. package/src/b64.ts +63 -0
  298. package/src/e2ee/CrossSigningBootstrap.ts +141 -0
  299. package/src/e2ee/CryptoClient.ts +378 -0
  300. package/src/e2ee/ICryptoRoomInformation.ts +9 -0
  301. package/src/e2ee/RoomTracker.ts +99 -0
  302. package/src/e2ee/RustEngine.ts +580 -0
  303. package/src/e2ee/decorators.ts +38 -0
  304. package/src/helpers/MatrixEntity.ts +65 -0
  305. package/src/helpers/MatrixGlob.ts +38 -0
  306. package/src/helpers/MentionPill.ts +95 -0
  307. package/src/helpers/Permalinks.ts +101 -0
  308. package/src/helpers/ProfileCache.ts +119 -0
  309. package/src/helpers/RichReply.ts +46 -0
  310. package/src/helpers/UnpaddedBase64.ts +44 -0
  311. package/src/http.ts +166 -0
  312. package/src/identity/IdentityClient.ts +225 -0
  313. package/src/index.ts +125 -0
  314. package/src/logging/ConsoleLogger.ts +31 -0
  315. package/src/logging/ILogger.ts +40 -0
  316. package/src/logging/LogService.ts +167 -0
  317. package/src/logging/RichConsoleLogger.ts +70 -0
  318. package/src/metrics/IMetricListener.ts +57 -0
  319. package/src/metrics/Metrics.ts +134 -0
  320. package/src/metrics/contexts.ts +56 -0
  321. package/src/metrics/decorators.ts +94 -0
  322. package/src/metrics/names.ts +53 -0
  323. package/src/mixins/AutojoinRoomsMixin.ts +24 -0
  324. package/src/mixins/AutojoinUpgradedRoomsMixin.ts +37 -0
  325. package/src/models/Account.ts +8 -0
  326. package/src/models/CreateRoom.ts +144 -0
  327. package/src/models/Crypto.ts +188 -0
  328. package/src/models/EventContext.ts +23 -0
  329. package/src/models/IdentityServerModels.ts +18 -0
  330. package/src/models/MSC2176.ts +47 -0
  331. package/src/models/MatrixError.ts +39 -0
  332. package/src/models/MatrixProfile.ts +55 -0
  333. package/src/models/OpenIDConnect.ts +10 -0
  334. package/src/models/Policies.ts +28 -0
  335. package/src/models/PowerLevelAction.ts +31 -0
  336. package/src/models/PowerLevelBounds.ts +16 -0
  337. package/src/models/Presence.ts +38 -0
  338. package/src/models/ServerVersions.ts +8 -0
  339. package/src/models/Spaces.ts +167 -0
  340. package/src/models/Threepid.ts +8 -0
  341. package/src/models/events/AliasesEvent.ts +37 -0
  342. package/src/models/events/CanonicalAliasEvent.ts +30 -0
  343. package/src/models/events/CreateEvent.ts +82 -0
  344. package/src/models/events/EncryptedRoomEvent.ts +58 -0
  345. package/src/models/events/EncryptionEvent.ts +63 -0
  346. package/src/models/events/Event.ts +38 -0
  347. package/src/models/events/EventKind.ts +16 -0
  348. package/src/models/events/InvalidEventError.ts +19 -0
  349. package/src/models/events/JoinRulesEvent.ts +37 -0
  350. package/src/models/events/MembershipEvent.ts +77 -0
  351. package/src/models/events/MessageEvent.ts +292 -0
  352. package/src/models/events/PinnedEventsEvent.ts +30 -0
  353. package/src/models/events/PowerLevelsEvent.ts +135 -0
  354. package/src/models/events/PresenceEvent.ts +69 -0
  355. package/src/models/events/RedactionEvent.ts +44 -0
  356. package/src/models/events/RoomAvatarEvent.ts +36 -0
  357. package/src/models/events/RoomEvent.ts +83 -0
  358. package/src/models/events/RoomNameEvent.ts +27 -0
  359. package/src/models/events/RoomTopicEvent.ts +27 -0
  360. package/src/models/events/SpaceChildEvent.ts +74 -0
  361. package/src/models/events/_MissingEvents.md +35 -0
  362. package/src/models/events/converter.ts +47 -0
  363. package/src/models/unstable/MediaInfo.ts +16 -0
  364. package/src/preprocessors/IPreprocessor.ts +24 -0
  365. package/src/preprocessors/RichRepliesPreprocessor.ts +159 -0
  366. package/src/request.ts +21 -0
  367. package/src/simple-validation.ts +30 -0
  368. package/src/storage/IAppserviceStorageProvider.ts +54 -0
  369. package/src/storage/ICryptoStorageProvider.ts +36 -0
  370. package/src/storage/IStorageProvider.ts +53 -0
  371. package/src/storage/MemoryStorageProvider.ts +65 -0
  372. package/src/storage/RustSdkCryptoStorageProvider.ts +81 -0
  373. package/src/storage/SimpleFsStorageProvider.ts +142 -0
  374. package/src/storage/SimplePostgresStorageProvider.ts +168 -0
  375. package/src/strategies/AppserviceJoinRoomStrategy.ts +47 -0
  376. package/src/strategies/JoinRoomStrategy.ts +45 -0
  377. package/tsconfig.json +22 -0
@@ -0,0 +1,467 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RustEngine = exports.SYNC_LOCK_NAME = void 0;
4
+ exports.extractUIA = extractUIA;
5
+ exports.hasFailedUIA = hasFailedUIA;
6
+ const matrix_sdk_crypto_nodejs_1 = require("@matrix-org/matrix-sdk-crypto-nodejs");
7
+ const AsyncLock = require("async-lock");
8
+ const Crypto_1 = require("../models/Crypto");
9
+ const EncryptionEvent_1 = require("../models/events/EncryptionEvent");
10
+ /**
11
+ * @internal
12
+ */
13
+ exports.SYNC_LOCK_NAME = "sync";
14
+ /**
15
+ * @internal
16
+ */
17
+ class RustEngine {
18
+ constructor(machine, client) {
19
+ this.machine = machine;
20
+ this.client = client;
21
+ this.lock = new AsyncLock();
22
+ }
23
+ async run() {
24
+ await this.runOnly(); // run everything, but with syntactic sugar
25
+ }
26
+ async runOnly(...types) {
27
+ // Note: we should not be running this until it runs out, so cache the value into a variable
28
+ const requests = await this.machine.outgoingRequests();
29
+ for (const request of requests) {
30
+ if (types.length && !types.includes(request.type))
31
+ continue;
32
+ switch (request.type) {
33
+ case 0 /* RequestType.KeysUpload */:
34
+ await this.processKeysUploadRequest(request);
35
+ break;
36
+ case 1 /* RequestType.KeysQuery */:
37
+ await this.processKeysQueryRequest(request);
38
+ break;
39
+ case 2 /* RequestType.KeysClaim */:
40
+ await this.processKeysClaimRequest(request);
41
+ break;
42
+ case 3 /* RequestType.ToDevice */:
43
+ await this.processToDeviceRequest(request);
44
+ break;
45
+ case 5 /* RequestType.RoomMessage */:
46
+ throw new Error("Bindings error: Sending room messages is not supported");
47
+ case 4 /* RequestType.SignatureUpload */:
48
+ await this.processSignatureUploadRequest(request);
49
+ break;
50
+ case 6 /* RequestType.KeysBackup */:
51
+ await this.processKeysBackupRequest(request);
52
+ break;
53
+ default:
54
+ throw new Error("Bindings error: Unrecognized request type: " + request.type);
55
+ }
56
+ }
57
+ }
58
+ async addTrackedUsers(userIds) {
59
+ await this.lock.acquire(exports.SYNC_LOCK_NAME, async () => {
60
+ const uids = userIds.map(u => new matrix_sdk_crypto_nodejs_1.UserId(u));
61
+ await this.machine.updateTrackedUsers(uids);
62
+ const keysClaim = await this.machine.getMissingSessions(uids);
63
+ if (keysClaim) {
64
+ await this.processKeysClaimRequest(keysClaim);
65
+ }
66
+ });
67
+ }
68
+ async prepareEncrypt(roomId, roomInfo) {
69
+ // TODO: Handle pre-shared invite keys too
70
+ const members = (await this.client.getJoinedRoomMembers(roomId)).map(u => new matrix_sdk_crypto_nodejs_1.UserId(u));
71
+ let historyVis = 1 /* HistoryVisibility.Joined */;
72
+ switch (roomInfo.historyVisibility) {
73
+ case "world_readable":
74
+ historyVis = 3 /* HistoryVisibility.WorldReadable */;
75
+ break;
76
+ case "invited":
77
+ historyVis = 0 /* HistoryVisibility.Invited */;
78
+ break;
79
+ case "shared":
80
+ historyVis = 2 /* HistoryVisibility.Shared */;
81
+ break;
82
+ case "joined":
83
+ default:
84
+ // Default and other cases handled by assignment before switch
85
+ }
86
+ const encEv = new EncryptionEvent_1.EncryptionEvent({
87
+ type: "m.room.encryption",
88
+ content: roomInfo,
89
+ });
90
+ const settings = new matrix_sdk_crypto_nodejs_1.EncryptionSettings();
91
+ settings.algorithm = roomInfo.algorithm === Crypto_1.EncryptionAlgorithm.MegolmV1AesSha2
92
+ ? 1 /* RustEncryptionAlgorithm.MegolmV1AesSha2 */
93
+ : undefined;
94
+ settings.historyVisibility = historyVis;
95
+ settings.rotationPeriod = BigInt(encEv.rotationPeriodMs);
96
+ settings.rotationPeriodMessages = BigInt(encEv.rotationPeriodMessages);
97
+ await this.lock.acquire(exports.SYNC_LOCK_NAME, async () => {
98
+ await this.machine.updateTrackedUsers(members); // just in case we missed some
99
+ await this.runOnly(1 /* RequestType.KeysQuery */);
100
+ const keysClaim = await this.machine.getMissingSessions(members);
101
+ if (keysClaim) {
102
+ await this.processKeysClaimRequest(keysClaim);
103
+ }
104
+ });
105
+ await this.lock.acquire(roomId, async () => {
106
+ const requests = await this.machine.shareRoomKey(new matrix_sdk_crypto_nodejs_1.RoomId(roomId), members, settings);
107
+ for (const req of requests) {
108
+ await this.actuallyProcessToDeviceRequest(req.txnId, req.eventType, JSON.parse(req.body)["messages"]);
109
+ }
110
+ });
111
+ }
112
+ async processKeysClaimRequest(request) {
113
+ const resp = await this.client.doRequest("POST", "/_matrix/client/v3/keys/claim", null, JSON.parse(request.body));
114
+ await this.machine.markRequestAsSent(request.id, request.type, JSON.stringify(resp));
115
+ }
116
+ async processKeysUploadRequest(request) {
117
+ const body = JSON.parse(request.body);
118
+ // delete body["one_time_keys"]; // use this to test MSC3983
119
+ const resp = await this.client.doRequest("POST", "/_matrix/client/v3/keys/upload", null, body);
120
+ await this.machine.markRequestAsSent(request.id, request.type, JSON.stringify(resp));
121
+ }
122
+ async processKeysQueryRequest(request) {
123
+ const resp = await this.client.doRequest("POST", "/_matrix/client/v3/keys/query", null, JSON.parse(request.body));
124
+ await this.machine.markRequestAsSent(request.id, request.type, JSON.stringify(resp));
125
+ }
126
+ async processToDeviceRequest(request) {
127
+ const req = JSON.parse(request.body);
128
+ await this.actuallyProcessToDeviceRequest(req.txn_id, req.event_type, req.messages);
129
+ }
130
+ async actuallyProcessToDeviceRequest(id, type, messages) {
131
+ const resp = await this.client.sendToDevices(type, messages);
132
+ await this.machine.markRequestAsSent(id, 3 /* RequestType.ToDevice */, JSON.stringify(resp));
133
+ }
134
+ async processSignatureUploadRequest(request) {
135
+ // The binding serializes the body as { "signed_keys": {<user_id>: {...}} },
136
+ // but POST /keys/signatures/upload expects that inner map directly (its
137
+ // top-level keys are user IDs). Unwrap the `signed_keys` envelope —
138
+ // otherwise the server rejects "signed_keys" as a user id (M_INVALID_PARAM)
139
+ // and the failure response breaks markRequestAsSent's deserialization.
140
+ const parsed = JSON.parse(request.body);
141
+ const httpBody = parsed && parsed.signed_keys ? parsed.signed_keys : parsed;
142
+ const resp = await this.client.doRequest("POST", "/_matrix/client/v3/keys/signatures/upload", null, httpBody);
143
+ // The bootstrap-driven signature request carries no request id; only
144
+ // mark queue-driven requests as sent.
145
+ if (request.id) {
146
+ await this.machine.markRequestAsSent(request.id, request.type, JSON.stringify(resp));
147
+ }
148
+ }
149
+ async processKeysBackupRequest(request) {
150
+ // Backing up room keys requires an existing server-side backup version
151
+ // to write into. The version is created out-of-band by
152
+ // `enableKeyBackup()`; here we just write the encrypted room keys to the
153
+ // active version. If no backup version exists the server returns
154
+ // M_NOT_FOUND — we surface that rather than silently dropping keys.
155
+ const version = await this.activeKeyBackupVersion();
156
+ if (!version) {
157
+ throw new Error("Bindings error: a KeysBackup request was produced but no server-side backup version " +
158
+ "exists. Call enableKeyBackup() to create/activate one before backing up room keys.");
159
+ }
160
+ const resp = await this.client.doRequest("PUT", "/_matrix/client/v3/room_keys/keys", { version }, JSON.parse(request.body));
161
+ await this.machine.markRequestAsSent(request.id, request.type, JSON.stringify(resp));
162
+ }
163
+ /** The currently-active server-side key-backup version, or null if none. */
164
+ async activeKeyBackupVersion() {
165
+ try {
166
+ const resp = await this.client.doRequest("GET", "/_matrix/client/v3/room_keys/version");
167
+ return resp?.version ?? null;
168
+ }
169
+ catch (e) {
170
+ // M_NOT_FOUND => no backup exists yet.
171
+ return null;
172
+ }
173
+ }
174
+ /**
175
+ * Publish a cross-signing identity for this account so the device becomes
176
+ * cross-signed (self-verified). This is the piece matrix-bot-sdk historically
177
+ * could not drive: `runOnly` threw on the request types it produces, and the
178
+ * cross-signing public-key upload is not an outgoing-queue request at all —
179
+ * it is returned by `OlmMachine.bootstrapCrossSigning()`.
180
+ *
181
+ * Flow:
182
+ * 1. `machine.bootstrapCrossSigning(reset)` creates the identity locally
183
+ * and (on matrix-sdk-crypto-nodejs >= 0.5.0) returns the three upload
184
+ * requests.
185
+ * 2. Upload device keys (`uploadKeysReq`) if present.
186
+ * 3. POST the cross-signing public keys to `/keys/device_signing/upload`,
187
+ * completing the User-Interactive Auth challenge via `uiaCallback`.
188
+ * 4. POST the self-signature to `/keys/signatures/upload`.
189
+ *
190
+ * On bindings <= 0.4.0, `bootstrapCrossSigning` returns `void` and gives no
191
+ * way to retrieve the upload requests, so this method throws a clear,
192
+ * actionable error (callers are expected to treat that as non-fatal).
193
+ *
194
+ * @param uiaCallback Resolves the UIA challenge for the device-signing upload.
195
+ * @param reset Pass `false` (default) to reuse an existing local identity;
196
+ * the same request can be re-sent across UIA stages. `true`
197
+ * wipes any existing identity and resets device trust.
198
+ */
199
+ async bootstrapCrossSigning(uiaCallback, reset = false) {
200
+ await this.lock.acquire(exports.SYNC_LOCK_NAME, async () => {
201
+ const requests = (await this.machine.bootstrapCrossSigning(reset));
202
+ if (!requests || typeof requests.uploadSigningKeysReq !== "string") {
203
+ throw new Error("Bindings error: OlmMachine.bootstrapCrossSigning() did not return the upload requests. " +
204
+ "Cross-signing cannot be published with this version of " +
205
+ "@matrix-org/matrix-sdk-crypto-nodejs (need >= 0.5.0).");
206
+ }
207
+ // 1. Device keys (may be absent if already uploaded).
208
+ if (requests.uploadKeysReq) {
209
+ await this.processKeysUploadRequest(requests.uploadKeysReq);
210
+ }
211
+ // 2. Cross-signing public keys -> /keys/device_signing/upload (UIA).
212
+ await this.uploadDeviceSigningKeys(JSON.parse(requests.uploadSigningKeysReq), uiaCallback);
213
+ // 3. Self-signature upload. This one IS a normal SignatureUpload
214
+ // request, so reuse the same code path (and mark it as sent).
215
+ await this.processSignatureUploadRequest(requests.uploadSignaturesReq);
216
+ });
217
+ }
218
+ /**
219
+ * POST the cross-signing public keys to `/keys/device_signing/upload`,
220
+ * driving the UIA challenge. The first attempt is sent without `auth`; the
221
+ * server replies 401 with the available flows, which `uiaCallback` resolves
222
+ * (typically an `m.login.password` stage). We then resubmit the SAME key
223
+ * body with the returned `auth` dict (including the `session` id).
224
+ */
225
+ async uploadDeviceSigningKeys(keysBody, uiaCallback) {
226
+ const path = "/_matrix/client/v3/keys/device_signing/upload";
227
+ try {
228
+ await this.client.doRequest("POST", path, null, keysBody);
229
+ return; // Server accepted without UIA (rare, but allowed).
230
+ }
231
+ catch (e) {
232
+ const uia = extractUIA(e);
233
+ if (!uia)
234
+ throw e; // Not a UIA challenge — a real error.
235
+ // Resolve the challenge, then resubmit the same keys with `auth`.
236
+ // Loop in case the server stacks multiple stages.
237
+ let session = uia.session;
238
+ for (let attempt = 0; attempt < 10; attempt++) {
239
+ const auth = await uiaCallback(uia);
240
+ if (!auth) {
241
+ throw new Error("UIA for /keys/device_signing/upload was not satisfied (callback returned null)");
242
+ }
243
+ if (session && auth.session === undefined)
244
+ auth.session = session;
245
+ try {
246
+ await this.client.doRequest("POST", path, null, { ...keysBody, auth });
247
+ return; // Success.
248
+ }
249
+ catch (e2) {
250
+ const next = extractUIA(e2);
251
+ if (!next)
252
+ throw e2; // Either success-shaped error or a hard failure.
253
+ // 401 again: if it carries completed stages we progress; otherwise
254
+ // the credentials were rejected. Surface the error body either way.
255
+ if (next.session)
256
+ session = next.session;
257
+ if (hasFailedUIA(e2)) {
258
+ throw new Error("UIA for /keys/device_signing/upload failed: credentials rejected");
259
+ }
260
+ // Continue to next stage.
261
+ }
262
+ }
263
+ throw new Error("UIA for /keys/device_signing/upload did not complete after multiple attempts");
264
+ }
265
+ }
266
+ /**
267
+ * Create + activate a server-side key-backup version derived from the given
268
+ * recovery/backup public key, and tell the OlmMachine to use it. After this,
269
+ * `KeysBackup` requests produced by `backupRoomKeys()` will have a version to
270
+ * write into (handled in `processKeysBackupRequest`).
271
+ *
272
+ * NOTE: key backup is secondary to cross-signing. This wires the version
273
+ * plumbing; the caller is responsible for generating the backup key and for
274
+ * calling `machine.enableBackupV1()` / `backupRoomKeys()`. It is intentionally
275
+ * conservative — see the adapter docs.
276
+ */
277
+ async enableKeyBackup(authData, algorithm = "m.megolm_backup.v1.curve25519-aes-sha2") {
278
+ const resp = await this.client.doRequest("POST", "/_matrix/client/v3/room_keys/version", null, { algorithm, auth_data: authData });
279
+ return resp.version;
280
+ }
281
+ /**
282
+ * Restore cross-signing private keys (and optionally the megolm backup decryption
283
+ * key) from Secure Secret Storage (4S/SSSS) into the local crypto store.
284
+ *
285
+ * This is the recovery path when the local crypto store has been lost: the
286
+ * cross-signing keys were previously uploaded encrypted to account data by
287
+ * `bootstrapSecretStorage*`, and this method fetches and decrypts them using
288
+ * the same passphrase. After a successful restore:
289
+ *
290
+ * - The OlmMachine has the master / self-signing / user-signing private keys.
291
+ * - The device re-signs itself, so it continues to appear verified without
292
+ * needing UIA or a fresh cross-signing bootstrap.
293
+ * - If the megolm backup decryption key is in account data, it is also
294
+ * restored so room-key backup requests work with the existing backup version.
295
+ *
296
+ * Requires `@matrix-org/matrix-sdk-crypto-nodejs >= 0.6.0` (for
297
+ * `importSecretsFromSecretStorage`). Throws if the passphrase does not match
298
+ * the SSSS key on the server, or if account data is missing.
299
+ *
300
+ * @param passphrase The same passphrase that was used to bootstrap 4S.
301
+ */
302
+ async restoreSecretsFromSecretStorage(passphrase) {
303
+ const machine4s = this.machine;
304
+ if (typeof machine4s.importSecretsFromSecretStorage !== "function") {
305
+ throw new Error("Bindings error: OlmMachine.importSecretsFromSecretStorage() is not available. " +
306
+ "Secret Storage restore requires @matrix-org/matrix-sdk-crypto-nodejs >= 0.6.0.");
307
+ }
308
+ // 1. Resolve the default SSSS key from account data.
309
+ const defaultKey = await this.client.getAccountData("m.secret_storage.default_key");
310
+ if (!defaultKey?.key) {
311
+ throw new Error("No default SSSS key found in account data (m.secret_storage.default_key missing or empty).");
312
+ }
313
+ const keyEventType = `m.secret_storage.key.${defaultKey.key}`;
314
+ const keyContent = await this.client.getAccountData(keyEventType);
315
+ if (!keyContent) {
316
+ throw new Error(`SSSS key descriptor not found in account data (${keyEventType} missing).`);
317
+ }
318
+ // 2. Reconstruct the SecretStorageKey from the passphrase + server metadata.
319
+ // fromAccountData verifies the passphrase against the stored MAC; it throws
320
+ // if the passphrase is wrong.
321
+ const ssssKey = matrix_sdk_crypto_nodejs_1.SecretStorageKey.fromAccountData(passphrase, keyEventType, JSON.stringify(keyContent));
322
+ // 3. Fetch the three encrypted cross-signing key blobs from account data.
323
+ const [masterRaw, selfSigningRaw, userSigningRaw] = await Promise.all([
324
+ this.client.getAccountData("m.cross_signing.master"),
325
+ this.client.getAccountData("m.cross_signing.self_signing"),
326
+ this.client.getAccountData("m.cross_signing.user_signing"),
327
+ ]);
328
+ if (!masterRaw || !selfSigningRaw || !userSigningRaw) {
329
+ throw new Error("One or more cross-signing key blobs are missing from account data. " +
330
+ "4S may not have been bootstrapped yet — run bootstrapSecretStorage first.");
331
+ }
332
+ // 4. Import: the binding decrypts each blob using ssssKey, imports the
333
+ // private keys into the local OlmMachine, and returns a SignatureUpload
334
+ // request to re-sign the current device with the self-signing key.
335
+ const items = new matrix_sdk_crypto_nodejs_1.SecretStorageItems({
336
+ masterKey: JSON.stringify(masterRaw),
337
+ selfSigningKey: JSON.stringify(selfSigningRaw),
338
+ userSigningKey: JSON.stringify(userSigningRaw),
339
+ });
340
+ const sigReq = await machine4s.importSecretsFromSecretStorage(ssssKey, items);
341
+ await this.processSignatureUploadRequest(sigReq);
342
+ // 5. Restore the megolm backup decryption key if present, so room-key
343
+ // backup requests are directed to the existing backup version.
344
+ try {
345
+ const backupKeyRaw = await this.client.getAccountData("m.megolm_backup.v1");
346
+ if (backupKeyRaw) {
347
+ const decryptedBase64 = ssssKey.decrypt(JSON.stringify(backupKeyRaw), "m.megolm_backup.v1");
348
+ const decryptionKey = matrix_sdk_crypto_nodejs_1.BackupDecryptionKey.fromBase64(decryptedBase64);
349
+ const backupInfo = await this.activeKeyBackupVersion();
350
+ if (backupInfo) {
351
+ await this.machine.enableBackupV1(decryptionKey.megolmV1PublicKey.publicKeyBase64, backupInfo);
352
+ await this.machine.saveBackupDecryptionKey(decryptionKey, backupInfo);
353
+ }
354
+ }
355
+ }
356
+ catch (e) {
357
+ // Non-fatal: cross-signing keys are restored; only room-key backup is affected.
358
+ }
359
+ }
360
+ async bootstrapSecretStorage(ssssKey, opts = {}) {
361
+ const machine4s = this.machine;
362
+ if (typeof machine4s.exportSecretsForSecretStorage !== "function") {
363
+ throw new Error("Bindings error: OlmMachine.exportSecretsForSecretStorage() is not available. " +
364
+ "Secret Storage (4S) requires @matrix-org/matrix-sdk-crypto-nodejs >= 0.6.0.");
365
+ }
366
+ const { withKeyBackup = true, reset = false } = opts;
367
+ const userId = this.machine.userId.toString();
368
+ await this.putAccountData(userId, ssssKey.eventType(), JSON.parse(ssssKey.accountDataContent()));
369
+ await this.putAccountData(userId, "m.secret_storage.default_key", { key: ssssKey.keyId() });
370
+ const items = await machine4s.exportSecretsForSecretStorage(ssssKey);
371
+ await this.putAccountData(userId, "m.cross_signing.master", JSON.parse(items.masterKey));
372
+ await this.putAccountData(userId, "m.cross_signing.self_signing", JSON.parse(items.selfSigningKey));
373
+ await this.putAccountData(userId, "m.cross_signing.user_signing", JSON.parse(items.userSigningKey));
374
+ if (withKeyBackup) {
375
+ await this.bootstrapKeyBackupIntoSecretStorage(ssssKey, userId, reset);
376
+ }
377
+ }
378
+ async bootstrapSecretStorageFromPassphrase(passphrase, opts = {}) {
379
+ const ssssKey = matrix_sdk_crypto_nodejs_1.SecretStorageKey.createFromPassphrase(passphrase);
380
+ await this.bootstrapSecretStorage(ssssKey, opts);
381
+ }
382
+ async bootstrapSecretStorageFromKey(ssssKey, opts = {}) {
383
+ await this.bootstrapSecretStorage(ssssKey, opts);
384
+ }
385
+ async bootstrapKeyBackupIntoSecretStorage(ssssKey, userId, reset) {
386
+ const existingVersion = await this.activeKeyBackupVersion();
387
+ if (existingVersion && !reset) {
388
+ // Server has a backup. Check whether the local OlmMachine already knows about it.
389
+ const localKeys = await this.machine.getBackupKeys();
390
+ if (localKeys.backupVersion === existingVersion)
391
+ return; // In sync — nothing to do.
392
+ // Local store is out of sync (e.g. crypto-store wiped and bootstrap retried with
393
+ // a new SSSS key, or interrupted before saveBackupDecryptionKey). Try to reconnect
394
+ // by decrypting the existing backup key from account data using the current SSSS key.
395
+ try {
396
+ const backupKeyRaw = await this.client.getAccountData("m.megolm_backup.v1");
397
+ if (backupKeyRaw) {
398
+ const decryptedBase64 = ssssKey.decrypt(JSON.stringify(backupKeyRaw), "m.megolm_backup.v1");
399
+ const decryptionKey = matrix_sdk_crypto_nodejs_1.BackupDecryptionKey.fromBase64(decryptedBase64);
400
+ await this.machine.enableBackupV1(decryptionKey.megolmV1PublicKey.publicKeyBase64, existingVersion);
401
+ await this.machine.saveBackupDecryptionKey(decryptionKey, existingVersion);
402
+ return;
403
+ }
404
+ }
405
+ catch {
406
+ // Account data is missing, encrypted with a different SSSS key, or corrupted.
407
+ // Fall through to create a new backup version under the current SSSS key.
408
+ }
409
+ // Could not reuse the existing backup — delete it and create a fresh one.
410
+ await this.client.doRequest("DELETE", `/_matrix/client/v3/room_keys/version/${existingVersion}`);
411
+ }
412
+ if (existingVersion && reset) {
413
+ await this.client.doRequest("DELETE", `/_matrix/client/v3/room_keys/version/${existingVersion}`);
414
+ }
415
+ const decryptionKey = matrix_sdk_crypto_nodejs_1.BackupDecryptionKey.createRandomKey();
416
+ const publicKey = decryptionKey.megolmV1PublicKey;
417
+ const authDataBase = { public_key: publicKey.publicKeyBase64 };
418
+ const canonicalBase = JSON.stringify(authDataBase, Object.keys(authDataBase).sort());
419
+ const sigs = await this.machine.sign(canonicalBase);
420
+ const authData = { ...authDataBase, signatures: JSON.parse(sigs.asJSON()) };
421
+ const version = await this.enableKeyBackup(authData, publicKey.algorithm);
422
+ await this.machine.enableBackupV1(publicKey.publicKeyBase64, version);
423
+ await this.machine.saveBackupDecryptionKey(decryptionKey, version);
424
+ const encryptedKey = ssssKey.encrypt(decryptionKey.toBase64(), "m.megolm_backup.v1");
425
+ await this.putAccountData(userId, "m.megolm_backup.v1", JSON.parse(encryptedKey));
426
+ }
427
+ async putAccountData(userId, eventType, content) {
428
+ await this.client.doRequest("PUT", `/_matrix/client/v3/user/${encodeURIComponent(userId)}/account_data/${encodeURIComponent(eventType)}`, null, content);
429
+ }
430
+ }
431
+ exports.RustEngine = RustEngine;
432
+ /**
433
+ * Extract a UIA challenge from a thrown matrix-bot-sdk request error. A 401 UIA
434
+ * body has `flows`/`session` and no `errcode`, so matrix-bot-sdk throws the raw
435
+ * response object (`throw response`) rather than a `MatrixError`. We also accept
436
+ * a `MatrixError`-like shape defensively. Returns null if it is not a UIA 401.
437
+ *
438
+ * @internal
439
+ */
440
+ function extractUIA(err) {
441
+ if (!err || typeof err !== "object")
442
+ return null;
443
+ const e = err;
444
+ const status = e.statusCode;
445
+ const body = (e.body ?? err);
446
+ if (status !== undefined && status !== 401)
447
+ return null;
448
+ if (!body || !Array.isArray(body.flows))
449
+ return null;
450
+ return { flows: body.flows, params: body.params, session: body.session };
451
+ }
452
+ /**
453
+ * A second 401 whose body reports `completed: []` (or an unchanged stage list)
454
+ * after we supplied credentials indicates the credentials were rejected, not a
455
+ * stacked second stage. We treat the presence of an `error`/`errcode` in the
456
+ * body as a hard rejection.
457
+ *
458
+ * @internal
459
+ */
460
+ function hasFailedUIA(err) {
461
+ if (!err || typeof err !== "object")
462
+ return false;
463
+ const e = err;
464
+ const body = e.body ?? err;
465
+ return Boolean(body && body.errcode);
466
+ }
467
+ //# sourceMappingURL=RustEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RustEngine.js","sourceRoot":"","sources":["../../src/e2ee/RustEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Flags a MatrixClient function as needing end-to-end encryption enabled.
3
+ * @category Encryption
4
+ */
5
+ export declare function requiresCrypto(): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
6
+ /**
7
+ * Flags a CryptoClient function as needing the CryptoClient to be ready.
8
+ * @category Encryption
9
+ */
10
+ export declare function requiresReady(): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.requiresCrypto = requiresCrypto;
4
+ exports.requiresReady = requiresReady;
5
+ /**
6
+ * Flags a MatrixClient function as needing end-to-end encryption enabled.
7
+ * @category Encryption
8
+ */
9
+ function requiresCrypto() {
10
+ return function (target, propertyKey, descriptor) {
11
+ const originalMethod = descriptor.value;
12
+ descriptor.value = function (...args) {
13
+ const client = this; // eslint-disable-line @typescript-eslint/no-this-alias
14
+ if (!client.crypto) {
15
+ throw new Error("End-to-end encryption is not enabled");
16
+ }
17
+ return originalMethod.apply(this, args);
18
+ };
19
+ };
20
+ }
21
+ /**
22
+ * Flags a CryptoClient function as needing the CryptoClient to be ready.
23
+ * @category Encryption
24
+ */
25
+ function requiresReady() {
26
+ return function (target, propertyKey, descriptor) {
27
+ const originalMethod = descriptor.value;
28
+ descriptor.value = function (...args) {
29
+ const crypto = this; // eslint-disable-line @typescript-eslint/no-this-alias
30
+ if (!crypto.isReady) {
31
+ throw new Error("End-to-end encryption has not initialized");
32
+ }
33
+ return originalMethod.apply(this, args);
34
+ };
35
+ };
36
+ }
37
+ //# sourceMappingURL=decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/e2ee/decorators.ts"],"names":[],"mappings":";;AAOA,wCAYC;AAMD,sCAYC;AAlCD;;;GAGG;AACH,SAAgB,cAAc;IAC1B,OAAO,UAAS,MAAW,EAAE,WAAmB,EAAE,UAA8B;QAC5E,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;QACxC,UAAU,CAAC,KAAK,GAAG,UAAS,GAAG,IAAW;YACtC,MAAM,MAAM,GAAiB,IAAI,CAAC,CAAC,uDAAuD;YAC1F,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC5D,CAAC;YAED,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC,CAAC;IACN,CAAC,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,SAAgB,aAAa;IACzB,OAAO,UAAS,MAAW,EAAE,WAAmB,EAAE,UAA8B;QAC5E,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;QACxC,UAAU,CAAC,KAAK,GAAG,UAAS,GAAG,IAAW;YACtC,MAAM,MAAM,GAAiB,IAAI,CAAC,CAAC,uDAAuD;YAC1F,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YACjE,CAAC;YAED,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC,CAAC;IACN,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Represents a Matrix entity
3
+ * @category Utilities
4
+ */
5
+ export declare class MatrixEntity {
6
+ private fullId;
7
+ private entityLocalpart;
8
+ private entityDomain;
9
+ /**
10
+ * Creates a new Matrix entity
11
+ * @param {string} fullId The full ID of the entity
12
+ */
13
+ constructor(fullId: string);
14
+ /**
15
+ * The localpart for the entity
16
+ */
17
+ get localpart(): string;
18
+ /**
19
+ * The domain for the entity
20
+ */
21
+ get domain(): string;
22
+ toString(): string;
23
+ }
24
+ /**
25
+ * Represents a Matrix user ID
26
+ * @category Utilities
27
+ */
28
+ export declare class UserID extends MatrixEntity {
29
+ constructor(userId: string);
30
+ }
31
+ /**
32
+ * Represents a Matrix room alias
33
+ * @category Utilities
34
+ */
35
+ export declare class RoomAlias extends MatrixEntity {
36
+ constructor(alias: string);
37
+ }
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RoomAlias = exports.UserID = exports.MatrixEntity = void 0;
4
+ /**
5
+ * Represents a Matrix entity
6
+ * @category Utilities
7
+ */
8
+ class MatrixEntity {
9
+ /**
10
+ * Creates a new Matrix entity
11
+ * @param {string} fullId The full ID of the entity
12
+ */
13
+ constructor(fullId) {
14
+ this.fullId = fullId;
15
+ if (!fullId)
16
+ throw new Error("No entity ID provided");
17
+ if (fullId.length < 2)
18
+ throw new Error("ID too short");
19
+ const parts = fullId.split(/:/g);
20
+ this.entityLocalpart = parts[0].substring(1);
21
+ this.entityDomain = parts.splice(1).join(':');
22
+ }
23
+ /**
24
+ * The localpart for the entity
25
+ */
26
+ get localpart() {
27
+ return this.entityLocalpart;
28
+ }
29
+ /**
30
+ * The domain for the entity
31
+ */
32
+ get domain() {
33
+ return this.entityDomain;
34
+ }
35
+ // override
36
+ toString() {
37
+ return this.fullId;
38
+ }
39
+ }
40
+ exports.MatrixEntity = MatrixEntity;
41
+ /**
42
+ * Represents a Matrix user ID
43
+ * @category Utilities
44
+ */
45
+ class UserID extends MatrixEntity {
46
+ constructor(userId) {
47
+ super(userId);
48
+ if (!userId.startsWith("@")) {
49
+ throw new Error("Not a valid user ID");
50
+ }
51
+ }
52
+ }
53
+ exports.UserID = UserID;
54
+ /**
55
+ * Represents a Matrix room alias
56
+ * @category Utilities
57
+ */
58
+ class RoomAlias extends MatrixEntity {
59
+ constructor(alias) {
60
+ super(alias);
61
+ if (!alias.startsWith("#")) {
62
+ throw new Error("Not a valid room alias");
63
+ }
64
+ }
65
+ }
66
+ exports.RoomAlias = RoomAlias;
67
+ //# sourceMappingURL=MatrixEntity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MatrixEntity.js","sourceRoot":"","sources":["../../src/helpers/MatrixEntity.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,MAAa,YAAY;IAIrB;;;OAGG;IACH,YAAoB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QAC9B,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACtD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,WAAW;IACJ,QAAQ;QACX,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;CACJ;AAlCD,oCAkCC;AAED;;;GAGG;AACH,MAAa,MAAO,SAAQ,YAAY;IACpC,YAAY,MAAc;QACtB,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC3C,CAAC;IACL,CAAC;CACJ;AAPD,wBAOC;AAED;;;GAGG;AACH,MAAa,SAAU,SAAQ,YAAY;IACvC,YAAY,KAAa;QACrB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC;CACJ;AAPD,8BAOC"}