@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,47 @@
1
+ import { IFilterInfo } from "../IFilter";
2
+ /**
3
+ * Represents a storage provider for the matrix client
4
+ * @category Storage providers
5
+ */
6
+ export interface IStorageProvider {
7
+ /**
8
+ * Sets the sync token, saving it for later retrieval
9
+ * @param {string} token The token to save
10
+ * @returns {Promise<any>|void} Resolves when complete.
11
+ */
12
+ setSyncToken(token: string | null): Promise<any> | void;
13
+ /**
14
+ * Gets the last saved sync token, or null if none has been persisted.
15
+ * @returns {String|Promise<String>} The last sync token, or null. This can
16
+ * also be a promise for the value.
17
+ */
18
+ getSyncToken(): string | Promise<string | null> | null;
19
+ /**
20
+ * Sets the filter to be used by future clients
21
+ * @param {IFilterInfo} filter The filter to store
22
+ * @returns {Promise<any>|void} Resolves when complete.
23
+ */
24
+ setFilter(filter: IFilterInfo): Promise<any> | void;
25
+ /**
26
+ * Gets the last preferred filter for this client
27
+ * @returns {IFilterInfo|Promise<IFilterInfo>} The last saved filter, or null.
28
+ * This can also be a promise for the filter.
29
+ */
30
+ getFilter(): IFilterInfo | Promise<IFilterInfo>;
31
+ /**
32
+ * Store a simple string value into the provided key.
33
+ * @param {string} key The key to store the value under.
34
+ * @param {string} value The value to store.
35
+ * @returns {Promise<any> | void} Resolves when complete.
36
+ */
37
+ storeValue(key: string, value: string): Promise<any> | void;
38
+ /**
39
+ * Reads a previously stored value under the given key. If the
40
+ * key does not exist, null or undefined is returned.
41
+ * @param {string} key The key to read.
42
+ * @returns {string|Promise<string|null|undefined>|null|undefined} The
43
+ * value, or null/undefined if not found. This may also return a promise
44
+ * of those same values.
45
+ */
46
+ readValue(key: string): string | Promise<string | null | undefined> | null | undefined;
47
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IStorageProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IStorageProvider.js","sourceRoot":"","sources":["../../src/storage/IStorageProvider.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import { IStorageProvider } from "./IStorageProvider";
2
+ import { IFilterInfo } from "../IFilter";
3
+ import { IAppserviceStorageProvider } from "./IAppserviceStorageProvider";
4
+ /**
5
+ * A storage provider that persists no information by keeping it all in memory.
6
+ * @category Storage providers
7
+ */
8
+ export declare class MemoryStorageProvider implements IStorageProvider, IAppserviceStorageProvider {
9
+ private namespaced;
10
+ private syncToken;
11
+ private filter;
12
+ private appserviceUsers;
13
+ private appserviceTransactions;
14
+ private kvStore;
15
+ setSyncToken(token: string | null): void;
16
+ getSyncToken(): string | null;
17
+ setFilter(filter: IFilterInfo): void;
18
+ getFilter(): IFilterInfo;
19
+ addRegisteredUser(userId: string): void;
20
+ isUserRegistered(userId: string): boolean;
21
+ isTransactionCompleted(transactionId: string): boolean;
22
+ setTransactionCompleted(transactionId: string): void;
23
+ readValue(key: string): string | null | undefined;
24
+ storeValue(key: string, value: string): void;
25
+ storageForUser(userId: string): IStorageProvider;
26
+ }
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MemoryStorageProvider = void 0;
4
+ /**
5
+ * A storage provider that persists no information by keeping it all in memory.
6
+ * @category Storage providers
7
+ */
8
+ class MemoryStorageProvider {
9
+ constructor() {
10
+ this.namespaced = new Map();
11
+ this.appserviceUsers = {};
12
+ this.appserviceTransactions = {};
13
+ this.kvStore = {};
14
+ }
15
+ setSyncToken(token) {
16
+ this.syncToken = token;
17
+ }
18
+ getSyncToken() {
19
+ return this.syncToken;
20
+ }
21
+ setFilter(filter) {
22
+ this.filter = filter;
23
+ }
24
+ getFilter() {
25
+ return this.filter;
26
+ }
27
+ addRegisteredUser(userId) {
28
+ this.appserviceUsers[userId] = {
29
+ registered: true,
30
+ };
31
+ }
32
+ isUserRegistered(userId) {
33
+ return this.appserviceUsers[userId] && this.appserviceUsers[userId].registered;
34
+ }
35
+ isTransactionCompleted(transactionId) {
36
+ return !!this.appserviceTransactions[transactionId];
37
+ }
38
+ setTransactionCompleted(transactionId) {
39
+ this.appserviceTransactions[transactionId] = true;
40
+ }
41
+ readValue(key) {
42
+ return this.kvStore[key];
43
+ }
44
+ storeValue(key, value) {
45
+ this.kvStore[key] = value;
46
+ }
47
+ storageForUser(userId) {
48
+ if (!this.namespaced.has(userId)) {
49
+ this.namespaced.set(userId, new MemoryStorageProvider());
50
+ }
51
+ return this.namespaced.get(userId);
52
+ }
53
+ }
54
+ exports.MemoryStorageProvider = MemoryStorageProvider;
55
+ //# sourceMappingURL=MemoryStorageProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryStorageProvider.js","sourceRoot":"","sources":["../../src/storage/MemoryStorageProvider.ts"],"names":[],"mappings":";;;AAIA;;;GAGG;AACH,MAAa,qBAAqB;IAAlC;QACY,eAAU,GAAG,IAAI,GAAG,EAAiC,CAAC;QAGtD,oBAAe,GAAkD,EAAE,CAAC;QACpE,2BAAsB,GAAiC,EAAE,CAAC;QAC1D,YAAO,GAA8B,EAAE,CAAC;IAkDpD,CAAC;IAhDG,YAAY,CAAC,KAAoB;QAC7B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,YAAY;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,SAAS,CAAC,MAAmB;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,SAAS;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,iBAAiB,CAAC,MAAc;QAC5B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG;YAC3B,UAAU,EAAE,IAAI;SACnB,CAAC;IACN,CAAC;IAED,gBAAgB,CAAC,MAAc;QAC3B,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC;IACnF,CAAC;IAED,sBAAsB,CAAC,aAAqB;QACxC,OAAO,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;IACxD,CAAC;IAED,uBAAuB,CAAC,aAAqB;QACzC,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;IACtD,CAAC;IAED,SAAS,CAAC,GAAW;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,UAAU,CAAC,GAAW,EAAE,KAAa;QACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED,cAAc,CAAC,MAAc;QACzB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,qBAAqB,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;CACJ;AAxDD,sDAwDC"}
@@ -0,0 +1,38 @@
1
+ import { StoreType as RustSdkCryptoStoreType } from "@matrix-org/matrix-sdk-crypto-nodejs";
2
+ import { ICryptoStorageProvider } from "./ICryptoStorageProvider";
3
+ import { IAppserviceCryptoStorageProvider } from "./IAppserviceStorageProvider";
4
+ import { ICryptoRoomInformation } from "../e2ee/ICryptoRoomInformation";
5
+ export { RustSdkCryptoStoreType };
6
+ /**
7
+ * A crypto storage provider for the file-based rust-sdk store.
8
+ * @category Storage providers
9
+ */
10
+ export declare class RustSdkCryptoStorageProvider implements ICryptoStorageProvider {
11
+ readonly storagePath: string;
12
+ readonly storageType: RustSdkCryptoStoreType;
13
+ private db;
14
+ /**
15
+ * Creates a new rust-sdk storage provider.
16
+ * @param storagePath The *directory* to persist database details to.
17
+ * @param storageType The storage type to use. Must be supported by the rust-sdk.
18
+ */
19
+ constructor(storagePath: string, storageType: RustSdkCryptoStoreType);
20
+ getDeviceId(): Promise<string>;
21
+ setDeviceId(deviceId: string): Promise<void>;
22
+ getRoom(roomId: string): Promise<ICryptoRoomInformation>;
23
+ storeRoom(roomId: string, config: ICryptoRoomInformation): Promise<void>;
24
+ }
25
+ /**
26
+ * An appservice crypto storage provider for the file-based rust-sdk store.
27
+ * @category Storage providers
28
+ */
29
+ export declare class RustSdkAppserviceCryptoStorageProvider extends RustSdkCryptoStorageProvider implements IAppserviceCryptoStorageProvider {
30
+ private baseStoragePath;
31
+ /**
32
+ * Creates a new rust-sdk storage provider.
33
+ * @param baseStoragePath The *directory* to persist database details to.
34
+ * @param storageType The storage type to use. Must be supported by the rust-sdk.
35
+ */
36
+ constructor(baseStoragePath: string, storageType: RustSdkCryptoStoreType);
37
+ storageForUser(userId: string): ICryptoStorageProvider;
38
+ }
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RustSdkAppserviceCryptoStorageProvider = exports.RustSdkCryptoStorageProvider = void 0;
4
+ const lowdb = require("lowdb");
5
+ const FileSync = require("lowdb/adapters/FileSync");
6
+ const mkdirp = require("mkdirp");
7
+ const path = require("path");
8
+ const sha512 = require("hash.js/lib/hash/sha/512");
9
+ const sha256 = require("hash.js/lib/hash/sha/256");
10
+ /**
11
+ * A crypto storage provider for the file-based rust-sdk store.
12
+ * @category Storage providers
13
+ */
14
+ class RustSdkCryptoStorageProvider {
15
+ /**
16
+ * Creates a new rust-sdk storage provider.
17
+ * @param storagePath The *directory* to persist database details to.
18
+ * @param storageType The storage type to use. Must be supported by the rust-sdk.
19
+ */
20
+ constructor(storagePath, storageType) {
21
+ this.storagePath = storagePath;
22
+ this.storageType = storageType;
23
+ this.storagePath = path.resolve(this.storagePath);
24
+ mkdirp.sync(storagePath);
25
+ const adapter = new FileSync(path.join(storagePath, "bot-sdk.json"));
26
+ this.db = lowdb(adapter);
27
+ this.db.defaults({
28
+ deviceId: null,
29
+ rooms: {},
30
+ });
31
+ }
32
+ async getDeviceId() {
33
+ return this.db.get('deviceId').value();
34
+ }
35
+ async setDeviceId(deviceId) {
36
+ this.db.set('deviceId', deviceId).write();
37
+ }
38
+ async getRoom(roomId) {
39
+ const key = sha512().update(roomId).digest('hex');
40
+ return this.db.get(`rooms.${key}`).value();
41
+ }
42
+ async storeRoom(roomId, config) {
43
+ const key = sha512().update(roomId).digest('hex');
44
+ this.db.set(`rooms.${key}`, config).write();
45
+ }
46
+ }
47
+ exports.RustSdkCryptoStorageProvider = RustSdkCryptoStorageProvider;
48
+ /**
49
+ * An appservice crypto storage provider for the file-based rust-sdk store.
50
+ * @category Storage providers
51
+ */
52
+ class RustSdkAppserviceCryptoStorageProvider extends RustSdkCryptoStorageProvider {
53
+ /**
54
+ * Creates a new rust-sdk storage provider.
55
+ * @param baseStoragePath The *directory* to persist database details to.
56
+ * @param storageType The storage type to use. Must be supported by the rust-sdk.
57
+ */
58
+ constructor(baseStoragePath, storageType) {
59
+ super(path.join(baseStoragePath, "_default"), storageType);
60
+ this.baseStoragePath = baseStoragePath;
61
+ }
62
+ storageForUser(userId) {
63
+ // sha256 because sha512 is a bit big for some operating systems
64
+ const key = sha256().update(userId).digest('hex');
65
+ return new RustSdkCryptoStorageProvider(path.join(this.baseStoragePath, key), this.storageType);
66
+ }
67
+ }
68
+ exports.RustSdkAppserviceCryptoStorageProvider = RustSdkAppserviceCryptoStorageProvider;
69
+ //# sourceMappingURL=RustSdkCryptoStorageProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RustSdkCryptoStorageProvider.js","sourceRoot":"","sources":["../../src/storage/RustSdkCryptoStorageProvider.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,oDAAoD;AACpD,iCAAiC;AACjC,6BAA6B;AAC7B,mDAAmD;AACnD,mDAAmD;AASnD;;;GAGG;AACH,MAAa,4BAA4B;IAGrC;;;;OAIG;IACH,YACoB,WAAmB,EACnB,WAAmC;QADnC,gBAAW,GAAX,WAAW,CAAQ;QACnB,gBAAW,GAAX,WAAW,CAAwB;QAEnD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEzB,MAAM,OAAO,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QAEzB,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;YACb,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,EAAE;SACZ,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,WAAW;QACpB,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;IAC3C,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,QAAgB;QACrC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;IAC9C,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,MAAc;QAC/B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,MAA8B;QACjE,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;IAChD,CAAC;CACJ;AAzCD,oEAyCC;AAED;;;GAGG;AACH,MAAa,sCAAuC,SAAQ,4BAA4B;IACpF;;;;OAIG;IACH,YAA2B,eAAuB,EAAE,WAAmC;QACnF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC;QADpC,oBAAe,GAAf,eAAe,CAAQ;IAElD,CAAC;IAEM,cAAc,CAAC,MAAc;QAChC,gEAAgE;QAChE,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClD,OAAO,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACpG,CAAC;CACJ;AAfD,wFAeC"}
@@ -0,0 +1,31 @@
1
+ import { IAppserviceStorageProvider } from "./IAppserviceStorageProvider";
2
+ import { IFilterInfo } from "../IFilter";
3
+ import { IStorageProvider } from "./IStorageProvider";
4
+ /**
5
+ * A storage provider that uses the disk to store information.
6
+ * @category Storage providers
7
+ */
8
+ export declare class SimpleFsStorageProvider implements IStorageProvider, IAppserviceStorageProvider {
9
+ private trackTransactionsInMemory;
10
+ private maxInMemoryTransactions;
11
+ private db;
12
+ private completedTransactions;
13
+ /**
14
+ * Creates a new simple file system storage provider.
15
+ * @param {string} filename The file name (typically 'storage.json') to store data within.
16
+ * @param {boolean} trackTransactionsInMemory True (default) to track all received appservice transactions rather than on disk.
17
+ * @param {int} maxInMemoryTransactions The maximum number of transactions to hold in memory before rotating the oldest out. Defaults to 20.
18
+ */
19
+ constructor(filename: string, trackTransactionsInMemory?: boolean, maxInMemoryTransactions?: number);
20
+ setSyncToken(token: string | null): void;
21
+ getSyncToken(): string | null;
22
+ setFilter(filter: IFilterInfo): void;
23
+ getFilter(): IFilterInfo;
24
+ addRegisteredUser(userId: string): void;
25
+ isUserRegistered(userId: string): boolean;
26
+ isTransactionCompleted(transactionId: string): boolean;
27
+ setTransactionCompleted(transactionId: string): void;
28
+ readValue(key: string): string | null | undefined;
29
+ storeValue(key: string, value: string): void;
30
+ storageForUser(userId: string): IStorageProvider;
31
+ }
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SimpleFsStorageProvider = void 0;
4
+ const lowdb = require("lowdb");
5
+ const FileSync = require("lowdb/adapters/FileSync");
6
+ const sha512 = require("hash.js/lib/hash/sha/512");
7
+ const mkdirp = require("mkdirp");
8
+ const path = require("path");
9
+ /**
10
+ * A storage provider that uses the disk to store information.
11
+ * @category Storage providers
12
+ */
13
+ class SimpleFsStorageProvider {
14
+ /**
15
+ * Creates a new simple file system storage provider.
16
+ * @param {string} filename The file name (typically 'storage.json') to store data within.
17
+ * @param {boolean} trackTransactionsInMemory True (default) to track all received appservice transactions rather than on disk.
18
+ * @param {int} maxInMemoryTransactions The maximum number of transactions to hold in memory before rotating the oldest out. Defaults to 20.
19
+ */
20
+ constructor(filename, trackTransactionsInMemory = true, maxInMemoryTransactions = 20) {
21
+ this.trackTransactionsInMemory = trackTransactionsInMemory;
22
+ this.maxInMemoryTransactions = maxInMemoryTransactions;
23
+ this.completedTransactions = [];
24
+ mkdirp.sync(path.dirname(filename));
25
+ const adapter = new FileSync(filename);
26
+ this.db = lowdb(adapter);
27
+ this.db.defaults({
28
+ syncToken: null,
29
+ filter: null,
30
+ appserviceUsers: {}, // userIdHash => { data }
31
+ appserviceTransactions: {}, // txnIdHash => { data }
32
+ kvStore: {}, // key => value (str)
33
+ }).write();
34
+ }
35
+ setSyncToken(token) {
36
+ this.db.set('syncToken', token).write();
37
+ }
38
+ getSyncToken() {
39
+ return this.db.get('syncToken').value();
40
+ }
41
+ setFilter(filter) {
42
+ this.db.set('filter', filter).write();
43
+ }
44
+ getFilter() {
45
+ return this.db.get('filter').value();
46
+ }
47
+ addRegisteredUser(userId) {
48
+ const key = sha512().update(userId).digest('hex');
49
+ this.db
50
+ .set(`appserviceUsers.${key}.userId`, userId)
51
+ .set(`appserviceUsers.${key}.registered`, true)
52
+ .write();
53
+ }
54
+ isUserRegistered(userId) {
55
+ const key = sha512().update(userId).digest('hex');
56
+ return this.db.get(`appserviceUsers.${key}.registered`).value();
57
+ }
58
+ isTransactionCompleted(transactionId) {
59
+ if (this.trackTransactionsInMemory) {
60
+ return this.completedTransactions.indexOf(transactionId) !== -1;
61
+ }
62
+ const key = sha512().update(transactionId).digest('hex');
63
+ return this.db.get(`appserviceTransactions.${key}.completed`).value();
64
+ }
65
+ setTransactionCompleted(transactionId) {
66
+ if (this.trackTransactionsInMemory) {
67
+ if (this.completedTransactions.indexOf(transactionId) === -1) {
68
+ this.completedTransactions.push(transactionId);
69
+ }
70
+ if (this.completedTransactions.length > this.maxInMemoryTransactions) {
71
+ this.completedTransactions = this.completedTransactions.reverse().slice(0, this.maxInMemoryTransactions).reverse();
72
+ }
73
+ return;
74
+ }
75
+ const key = sha512().update(transactionId).digest('hex');
76
+ this.db
77
+ .set(`appserviceTransactions.${key}.txnId`, transactionId)
78
+ .set(`appserviceTransactions.${key}.completed`, true)
79
+ .write();
80
+ }
81
+ readValue(key) {
82
+ return this.db.get("kvStore").value()[key];
83
+ }
84
+ storeValue(key, value) {
85
+ const kvStore = this.db.get("kvStore").value();
86
+ kvStore[key] = value;
87
+ this.db.set("kvStore", kvStore).write();
88
+ }
89
+ storageForUser(userId) {
90
+ return new NamespacedFsProvider(userId, this);
91
+ }
92
+ }
93
+ exports.SimpleFsStorageProvider = SimpleFsStorageProvider;
94
+ /**
95
+ * A namespaced storage provider that uses the disk to store information.
96
+ * @category Storage providers
97
+ */
98
+ class NamespacedFsProvider {
99
+ constructor(prefix, parent) {
100
+ this.prefix = prefix;
101
+ this.parent = parent;
102
+ }
103
+ setFilter(filter) {
104
+ return this.parent.storeValue(`${this.prefix}_int_filter`, JSON.stringify(filter));
105
+ }
106
+ getFilter() {
107
+ return Promise.resolve(this.parent.readValue(`${this.prefix}_int_filter`)).then(r => r ? JSON.parse(r) : r);
108
+ }
109
+ setSyncToken(token) {
110
+ return this.parent.storeValue(`${this.prefix}_int_syncToken`, token);
111
+ }
112
+ getSyncToken() {
113
+ return Promise.resolve(this.parent.readValue(`${this.prefix}_int_syncToken`)).then(r => r ?? null);
114
+ }
115
+ readValue(key) {
116
+ return this.parent.readValue(`${this.prefix}_kv_${key}`);
117
+ }
118
+ storeValue(key, value) {
119
+ return this.parent.storeValue(`${this.prefix}_kv_${key}`, value);
120
+ }
121
+ }
122
+ //# sourceMappingURL=SimpleFsStorageProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimpleFsStorageProvider.js","sourceRoot":"","sources":["../../src/storage/SimpleFsStorageProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { IStorageProvider } from "./IStorageProvider";
2
+ import { IAppserviceStorageProvider } from "./IAppserviceStorageProvider";
3
+ import { IFilterInfo } from "../IFilter";
4
+ /**
5
+ * A barebones postgresql storage provider. It is not efficient, but it does work.
6
+ * @category Storage providers
7
+ */
8
+ export declare class SimplePostgresStorageProvider implements IStorageProvider, IAppserviceStorageProvider {
9
+ private trackTransactionsInMemory;
10
+ private maxInMemoryTransactions;
11
+ private readonly db;
12
+ private readonly waitPromise;
13
+ private completedTransactions;
14
+ /**
15
+ * Creates a new simple postgresql storage provider.
16
+ * @param connectionString The `postgres://` connection string to use.
17
+ * @param trackTransactionsInMemory True (default) to track all received appservice transactions rather than on disk.
18
+ * @param maxInMemoryTransactions The maximum number of transactions to hold in memory before rotating the oldest out. Defaults to 20.
19
+ */
20
+ constructor(connectionString: string, trackTransactionsInMemory?: boolean, maxInMemoryTransactions?: number);
21
+ setSyncToken(token: string | null): Promise<any>;
22
+ getSyncToken(): Promise<string | null>;
23
+ setFilter(filter: IFilterInfo): Promise<any>;
24
+ getFilter(): Promise<IFilterInfo>;
25
+ addRegisteredUser(userId: string): Promise<any>;
26
+ isUserRegistered(userId: string): Promise<boolean>;
27
+ setTransactionCompleted(transactionId: string): Promise<any>;
28
+ isTransactionCompleted(transactionId: string): Promise<boolean>;
29
+ readValue(key: string): Promise<string | null | undefined>;
30
+ storeValue(key: string, value: string): Promise<void>;
31
+ storageForUser(userId: string): IStorageProvider;
32
+ }
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SimplePostgresStorageProvider = void 0;
4
+ const postgres = require("postgres");
5
+ /**
6
+ * A barebones postgresql storage provider. It is not efficient, but it does work.
7
+ * @category Storage providers
8
+ */
9
+ class SimplePostgresStorageProvider {
10
+ /**
11
+ * Creates a new simple postgresql storage provider.
12
+ * @param connectionString The `postgres://` connection string to use.
13
+ * @param trackTransactionsInMemory True (default) to track all received appservice transactions rather than on disk.
14
+ * @param maxInMemoryTransactions The maximum number of transactions to hold in memory before rotating the oldest out. Defaults to 20.
15
+ */
16
+ constructor(connectionString, trackTransactionsInMemory = true, maxInMemoryTransactions = 20) {
17
+ this.trackTransactionsInMemory = trackTransactionsInMemory;
18
+ this.maxInMemoryTransactions = maxInMemoryTransactions;
19
+ this.completedTransactions = [];
20
+ this.db = postgres(connectionString);
21
+ this.waitPromise = Promise.all([
22
+ this.db `
23
+ CREATE TABLE IF NOT EXISTS bot_metadata (key TEXT NOT NULL PRIMARY KEY, value TEXT);
24
+ `,
25
+ this.db `
26
+ CREATE TABLE IF NOT EXISTS bot_kv (key TEXT NOT NULL PRIMARY KEY, value TEXT);
27
+ `,
28
+ this.db `
29
+ CREATE TABLE IF NOT EXISTS appservice_users (user_id TEXT NOT NULL PRIMARY KEY, registered BOOLEAN NOT NULL);
30
+ `,
31
+ this.db `
32
+ CREATE TABLE IF NOT EXISTS appservice_transactions (txn_id TEXT NOT NULL PRIMARY KEY, completed BOOLEAN NOT NULL);
33
+ `,
34
+ ]).then();
35
+ }
36
+ async setSyncToken(token) {
37
+ await this.waitPromise;
38
+ return this.db `
39
+ INSERT INTO bot_metadata (key, value) VALUES ('syncToken', ${token})
40
+ ON CONFLICT (key) DO UPDATE SET value = ${token};
41
+ `;
42
+ }
43
+ async getSyncToken() {
44
+ await this.waitPromise;
45
+ return (await this.db `
46
+ SELECT value FROM bot_metadata WHERE key = 'syncToken';
47
+ `)[0]?.value;
48
+ }
49
+ async setFilter(filter) {
50
+ await this.waitPromise;
51
+ const filterStr = filter ? JSON.stringify(filter) : null;
52
+ return this.db `
53
+ INSERT INTO bot_metadata (key, value) VALUES ('filter', ${filterStr})
54
+ ON CONFLICT (key) DO UPDATE SET value = ${filterStr};
55
+ `;
56
+ }
57
+ async getFilter() {
58
+ await this.waitPromise;
59
+ const value = (await this.db `
60
+ SELECT value FROM bot_metadata WHERE key = 'filter';
61
+ `)[0]?.value;
62
+ return typeof value === "string" ? JSON.parse(value) : value;
63
+ }
64
+ async addRegisteredUser(userId) {
65
+ await this.waitPromise;
66
+ return this.db `
67
+ INSERT INTO appservice_users (user_id, registered) VALUES (${userId}, TRUE)
68
+ ON CONFLICT (user_id) DO UPDATE SET registered = TRUE;
69
+ `;
70
+ }
71
+ async isUserRegistered(userId) {
72
+ await this.waitPromise;
73
+ return !!(await this.db `
74
+ SELECT registered FROM appservice_users WHERE user_id = ${userId};
75
+ `)[0]?.registered;
76
+ }
77
+ async setTransactionCompleted(transactionId) {
78
+ await this.waitPromise;
79
+ if (this.trackTransactionsInMemory) {
80
+ if (this.completedTransactions.indexOf(transactionId) === -1) {
81
+ this.completedTransactions.push(transactionId);
82
+ }
83
+ if (this.completedTransactions.length > this.maxInMemoryTransactions) {
84
+ this.completedTransactions = this.completedTransactions.reverse().slice(0, this.maxInMemoryTransactions).reverse();
85
+ }
86
+ return;
87
+ }
88
+ return this.db `
89
+ INSERT INTO appservice_transactions (txn_id, completed) VALUES (${transactionId}, TRUE)
90
+ ON CONFLICT (txn_id) DO UPDATE SET completed = TRUE;
91
+ `;
92
+ }
93
+ async isTransactionCompleted(transactionId) {
94
+ await this.waitPromise;
95
+ if (this.trackTransactionsInMemory) {
96
+ return this.completedTransactions.includes(transactionId);
97
+ }
98
+ return (await this.db `
99
+ SELECT completed FROM appservice_transactions WHERE txn_id = ${transactionId};
100
+ `)[0]?.completed;
101
+ }
102
+ async readValue(key) {
103
+ await this.waitPromise;
104
+ return (await this.db `
105
+ SELECT value FROM bot_kv WHERE key = ${key};
106
+ `)[0]?.value;
107
+ }
108
+ async storeValue(key, value) {
109
+ await this.waitPromise;
110
+ return this.db `
111
+ INSERT INTO bot_kv (key, value) VALUES (${key}, ${value})
112
+ ON CONFLICT (key) DO UPDATE SET value = ${value};
113
+ `.then();
114
+ }
115
+ storageForUser(userId) {
116
+ return new NamespacedPostgresProvider(userId, this);
117
+ }
118
+ }
119
+ exports.SimplePostgresStorageProvider = SimplePostgresStorageProvider;
120
+ /**
121
+ * A namespaced storage provider that uses postgres to store information.
122
+ * @category Storage providers
123
+ */
124
+ class NamespacedPostgresProvider {
125
+ constructor(prefix, parent) {
126
+ this.prefix = prefix;
127
+ this.parent = parent;
128
+ }
129
+ setFilter(filter) {
130
+ return this.parent.storeValue(`${this.prefix}_internal_filter`, JSON.stringify(filter));
131
+ }
132
+ async getFilter() {
133
+ return this.parent.readValue(`${this.prefix}_internal_filter`).then(r => r ? JSON.parse(r) : r);
134
+ }
135
+ setSyncToken(token) {
136
+ return this.parent.storeValue(`${this.prefix}_internal_syncToken`, token ?? "");
137
+ }
138
+ async getSyncToken() {
139
+ return this.parent.readValue(`${this.prefix}_internal_syncToken`).then(r => r === "" ? null : r);
140
+ }
141
+ storeValue(key, value) {
142
+ return this.parent.storeValue(`${this.prefix}_internal_kv_${key}`, value);
143
+ }
144
+ readValue(key) {
145
+ return this.parent.readValue(`${this.prefix}_internal_kv_${key}`);
146
+ }
147
+ }
148
+ //# sourceMappingURL=SimplePostgresStorageProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimplePostgresStorageProvider.js","sourceRoot":"","sources":["../../src/storage/SimplePostgresStorageProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { IJoinRoomStrategy } from "./JoinRoomStrategy";
2
+ import { Appservice } from "../appservice/Appservice";
3
+ /**
4
+ * A join strategy for application services that proxies joins to an underlying join
5
+ * strategy while also trying to use the appservice's bot user to invite the underlying
6
+ * user if needed.
7
+ * @category Join strategies
8
+ */
9
+ export declare class AppserviceJoinRoomStrategy implements IJoinRoomStrategy {
10
+ private underlyingStrategy;
11
+ private appservice;
12
+ constructor(underlyingStrategy: IJoinRoomStrategy, appservice: Appservice);
13
+ joinRoom(roomIdOrAlias: string, userId: string, apiCall: (targetRoomIdOrAlias: string) => Promise<string>): Promise<string>;
14
+ }