matrix-synapse 1.143.0__cp310-abi3-manylinux_2_28_aarch64.whl

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.

Potentially problematic release.


This version of matrix-synapse might be problematic. Click here for more details.

Files changed (1058) hide show
  1. matrix_synapse-1.143.0.dist-info/AUTHORS.rst +51 -0
  2. matrix_synapse-1.143.0.dist-info/LICENSE-AGPL-3.0 +661 -0
  3. matrix_synapse-1.143.0.dist-info/LICENSE-COMMERCIAL +6 -0
  4. matrix_synapse-1.143.0.dist-info/METADATA +385 -0
  5. matrix_synapse-1.143.0.dist-info/RECORD +1058 -0
  6. matrix_synapse-1.143.0.dist-info/WHEEL +4 -0
  7. matrix_synapse-1.143.0.dist-info/entry_points.txt +14 -0
  8. synapse/__init__.py +97 -0
  9. synapse/_scripts/__init__.py +0 -0
  10. synapse/_scripts/export_signing_key.py +109 -0
  11. synapse/_scripts/generate_config.py +83 -0
  12. synapse/_scripts/generate_log_config.py +56 -0
  13. synapse/_scripts/generate_signing_key.py +55 -0
  14. synapse/_scripts/generate_workers_map.py +318 -0
  15. synapse/_scripts/hash_password.py +95 -0
  16. synapse/_scripts/move_remote_media_to_new_store.py +128 -0
  17. synapse/_scripts/register_new_matrix_user.py +402 -0
  18. synapse/_scripts/review_recent_signups.py +212 -0
  19. synapse/_scripts/synapse_port_db.py +1604 -0
  20. synapse/_scripts/synctl.py +365 -0
  21. synapse/_scripts/update_synapse_database.py +130 -0
  22. synapse/api/__init__.py +20 -0
  23. synapse/api/auth/__init__.py +207 -0
  24. synapse/api/auth/base.py +406 -0
  25. synapse/api/auth/internal.py +299 -0
  26. synapse/api/auth/mas.py +436 -0
  27. synapse/api/auth/msc3861_delegated.py +617 -0
  28. synapse/api/auth_blocking.py +144 -0
  29. synapse/api/constants.py +362 -0
  30. synapse/api/errors.py +907 -0
  31. synapse/api/filtering.py +537 -0
  32. synapse/api/presence.py +102 -0
  33. synapse/api/ratelimiting.py +480 -0
  34. synapse/api/room_versions.py +535 -0
  35. synapse/api/urls.py +118 -0
  36. synapse/app/__init__.py +60 -0
  37. synapse/app/_base.py +862 -0
  38. synapse/app/admin_cmd.py +388 -0
  39. synapse/app/appservice.py +30 -0
  40. synapse/app/client_reader.py +30 -0
  41. synapse/app/complement_fork_starter.py +206 -0
  42. synapse/app/event_creator.py +29 -0
  43. synapse/app/federation_reader.py +30 -0
  44. synapse/app/federation_sender.py +30 -0
  45. synapse/app/frontend_proxy.py +30 -0
  46. synapse/app/generic_worker.py +474 -0
  47. synapse/app/homeserver.py +505 -0
  48. synapse/app/media_repository.py +30 -0
  49. synapse/app/phone_stats_home.py +296 -0
  50. synapse/app/pusher.py +30 -0
  51. synapse/app/synchrotron.py +30 -0
  52. synapse/app/user_dir.py +31 -0
  53. synapse/appservice/__init__.py +458 -0
  54. synapse/appservice/api.py +567 -0
  55. synapse/appservice/scheduler.py +564 -0
  56. synapse/config/__init__.py +27 -0
  57. synapse/config/__main__.py +62 -0
  58. synapse/config/_base.py +1106 -0
  59. synapse/config/_base.pyi +215 -0
  60. synapse/config/_util.py +99 -0
  61. synapse/config/account_validity.py +116 -0
  62. synapse/config/api.py +141 -0
  63. synapse/config/appservice.py +210 -0
  64. synapse/config/auth.py +80 -0
  65. synapse/config/auto_accept_invites.py +43 -0
  66. synapse/config/background_updates.py +44 -0
  67. synapse/config/cache.py +231 -0
  68. synapse/config/captcha.py +90 -0
  69. synapse/config/cas.py +116 -0
  70. synapse/config/consent.py +73 -0
  71. synapse/config/database.py +184 -0
  72. synapse/config/emailconfig.py +367 -0
  73. synapse/config/experimental.py +595 -0
  74. synapse/config/federation.py +114 -0
  75. synapse/config/homeserver.py +141 -0
  76. synapse/config/jwt.py +55 -0
  77. synapse/config/key.py +447 -0
  78. synapse/config/logger.py +390 -0
  79. synapse/config/mas.py +192 -0
  80. synapse/config/matrixrtc.py +66 -0
  81. synapse/config/metrics.py +84 -0
  82. synapse/config/modules.py +40 -0
  83. synapse/config/oembed.py +185 -0
  84. synapse/config/oidc.py +509 -0
  85. synapse/config/password_auth_providers.py +82 -0
  86. synapse/config/push.py +64 -0
  87. synapse/config/ratelimiting.py +254 -0
  88. synapse/config/redis.py +74 -0
  89. synapse/config/registration.py +296 -0
  90. synapse/config/repository.py +311 -0
  91. synapse/config/retention.py +162 -0
  92. synapse/config/room.py +88 -0
  93. synapse/config/room_directory.py +165 -0
  94. synapse/config/saml2.py +251 -0
  95. synapse/config/server.py +1170 -0
  96. synapse/config/server_notices.py +84 -0
  97. synapse/config/spam_checker.py +66 -0
  98. synapse/config/sso.py +121 -0
  99. synapse/config/stats.py +54 -0
  100. synapse/config/third_party_event_rules.py +40 -0
  101. synapse/config/tls.py +192 -0
  102. synapse/config/tracer.py +71 -0
  103. synapse/config/user_directory.py +47 -0
  104. synapse/config/user_types.py +42 -0
  105. synapse/config/voip.py +59 -0
  106. synapse/config/workers.py +642 -0
  107. synapse/crypto/__init__.py +20 -0
  108. synapse/crypto/context_factory.py +278 -0
  109. synapse/crypto/event_signing.py +194 -0
  110. synapse/crypto/keyring.py +931 -0
  111. synapse/event_auth.py +1266 -0
  112. synapse/events/__init__.py +667 -0
  113. synapse/events/auto_accept_invites.py +216 -0
  114. synapse/events/builder.py +387 -0
  115. synapse/events/presence_router.py +243 -0
  116. synapse/events/snapshot.py +559 -0
  117. synapse/events/utils.py +924 -0
  118. synapse/events/validator.py +305 -0
  119. synapse/federation/__init__.py +22 -0
  120. synapse/federation/federation_base.py +382 -0
  121. synapse/federation/federation_client.py +2132 -0
  122. synapse/federation/federation_server.py +1540 -0
  123. synapse/federation/persistence.py +70 -0
  124. synapse/federation/send_queue.py +531 -0
  125. synapse/federation/sender/__init__.py +1164 -0
  126. synapse/federation/sender/per_destination_queue.py +886 -0
  127. synapse/federation/sender/transaction_manager.py +210 -0
  128. synapse/federation/transport/__init__.py +28 -0
  129. synapse/federation/transport/client.py +1199 -0
  130. synapse/federation/transport/server/__init__.py +334 -0
  131. synapse/federation/transport/server/_base.py +429 -0
  132. synapse/federation/transport/server/federation.py +910 -0
  133. synapse/federation/units.py +133 -0
  134. synapse/handlers/__init__.py +20 -0
  135. synapse/handlers/account.py +162 -0
  136. synapse/handlers/account_data.py +360 -0
  137. synapse/handlers/account_validity.py +361 -0
  138. synapse/handlers/admin.py +615 -0
  139. synapse/handlers/appservice.py +989 -0
  140. synapse/handlers/auth.py +2481 -0
  141. synapse/handlers/cas.py +413 -0
  142. synapse/handlers/deactivate_account.py +363 -0
  143. synapse/handlers/delayed_events.py +599 -0
  144. synapse/handlers/device.py +1870 -0
  145. synapse/handlers/devicemessage.py +399 -0
  146. synapse/handlers/directory.py +545 -0
  147. synapse/handlers/e2e_keys.py +1834 -0
  148. synapse/handlers/e2e_room_keys.py +455 -0
  149. synapse/handlers/event_auth.py +390 -0
  150. synapse/handlers/events.py +201 -0
  151. synapse/handlers/federation.py +2039 -0
  152. synapse/handlers/federation_event.py +2419 -0
  153. synapse/handlers/identity.py +812 -0
  154. synapse/handlers/initial_sync.py +528 -0
  155. synapse/handlers/jwt.py +120 -0
  156. synapse/handlers/message.py +2347 -0
  157. synapse/handlers/oidc.py +1801 -0
  158. synapse/handlers/pagination.py +768 -0
  159. synapse/handlers/password_policy.py +102 -0
  160. synapse/handlers/presence.py +2633 -0
  161. synapse/handlers/profile.py +655 -0
  162. synapse/handlers/push_rules.py +164 -0
  163. synapse/handlers/read_marker.py +79 -0
  164. synapse/handlers/receipts.py +351 -0
  165. synapse/handlers/register.py +1059 -0
  166. synapse/handlers/relations.py +623 -0
  167. synapse/handlers/reports.py +98 -0
  168. synapse/handlers/room.py +2448 -0
  169. synapse/handlers/room_list.py +632 -0
  170. synapse/handlers/room_member.py +2365 -0
  171. synapse/handlers/room_member_worker.py +146 -0
  172. synapse/handlers/room_policy.py +186 -0
  173. synapse/handlers/room_summary.py +1057 -0
  174. synapse/handlers/saml.py +524 -0
  175. synapse/handlers/search.py +723 -0
  176. synapse/handlers/send_email.py +209 -0
  177. synapse/handlers/set_password.py +71 -0
  178. synapse/handlers/sliding_sync/__init__.py +1701 -0
  179. synapse/handlers/sliding_sync/extensions.py +969 -0
  180. synapse/handlers/sliding_sync/room_lists.py +2262 -0
  181. synapse/handlers/sliding_sync/store.py +128 -0
  182. synapse/handlers/sso.py +1291 -0
  183. synapse/handlers/state_deltas.py +82 -0
  184. synapse/handlers/stats.py +321 -0
  185. synapse/handlers/sync.py +3106 -0
  186. synapse/handlers/thread_subscriptions.py +190 -0
  187. synapse/handlers/typing.py +606 -0
  188. synapse/handlers/ui_auth/__init__.py +48 -0
  189. synapse/handlers/ui_auth/checkers.py +332 -0
  190. synapse/handlers/user_directory.py +783 -0
  191. synapse/handlers/worker_lock.py +371 -0
  192. synapse/http/__init__.py +105 -0
  193. synapse/http/additional_resource.py +62 -0
  194. synapse/http/client.py +1373 -0
  195. synapse/http/connectproxyclient.py +316 -0
  196. synapse/http/federation/__init__.py +19 -0
  197. synapse/http/federation/matrix_federation_agent.py +490 -0
  198. synapse/http/federation/srv_resolver.py +196 -0
  199. synapse/http/federation/well_known_resolver.py +367 -0
  200. synapse/http/matrixfederationclient.py +1873 -0
  201. synapse/http/proxy.py +290 -0
  202. synapse/http/proxyagent.py +497 -0
  203. synapse/http/replicationagent.py +202 -0
  204. synapse/http/request_metrics.py +309 -0
  205. synapse/http/server.py +1110 -0
  206. synapse/http/servlet.py +1018 -0
  207. synapse/http/site.py +825 -0
  208. synapse/http/types.py +27 -0
  209. synapse/logging/__init__.py +31 -0
  210. synapse/logging/_remote.py +261 -0
  211. synapse/logging/_terse_json.py +95 -0
  212. synapse/logging/context.py +1209 -0
  213. synapse/logging/formatter.py +62 -0
  214. synapse/logging/handlers.py +99 -0
  215. synapse/logging/loggers.py +25 -0
  216. synapse/logging/opentracing.py +1132 -0
  217. synapse/logging/scopecontextmanager.py +160 -0
  218. synapse/media/_base.py +830 -0
  219. synapse/media/filepath.py +417 -0
  220. synapse/media/media_repository.py +1580 -0
  221. synapse/media/media_storage.py +702 -0
  222. synapse/media/oembed.py +277 -0
  223. synapse/media/preview_html.py +556 -0
  224. synapse/media/storage_provider.py +195 -0
  225. synapse/media/thumbnailer.py +833 -0
  226. synapse/media/url_previewer.py +875 -0
  227. synapse/metrics/__init__.py +748 -0
  228. synapse/metrics/_gc.py +219 -0
  229. synapse/metrics/_reactor_metrics.py +171 -0
  230. synapse/metrics/_types.py +38 -0
  231. synapse/metrics/background_process_metrics.py +555 -0
  232. synapse/metrics/common_usage_metrics.py +94 -0
  233. synapse/metrics/jemalloc.py +248 -0
  234. synapse/module_api/__init__.py +2131 -0
  235. synapse/module_api/callbacks/__init__.py +50 -0
  236. synapse/module_api/callbacks/account_validity_callbacks.py +106 -0
  237. synapse/module_api/callbacks/media_repository_callbacks.py +157 -0
  238. synapse/module_api/callbacks/ratelimit_callbacks.py +78 -0
  239. synapse/module_api/callbacks/spamchecker_callbacks.py +991 -0
  240. synapse/module_api/callbacks/third_party_event_rules_callbacks.py +592 -0
  241. synapse/module_api/errors.py +42 -0
  242. synapse/notifier.py +970 -0
  243. synapse/push/__init__.py +212 -0
  244. synapse/push/bulk_push_rule_evaluator.py +635 -0
  245. synapse/push/clientformat.py +126 -0
  246. synapse/push/emailpusher.py +333 -0
  247. synapse/push/httppusher.py +564 -0
  248. synapse/push/mailer.py +1010 -0
  249. synapse/push/presentable_names.py +216 -0
  250. synapse/push/push_tools.py +114 -0
  251. synapse/push/push_types.py +141 -0
  252. synapse/push/pusher.py +87 -0
  253. synapse/push/pusherpool.py +501 -0
  254. synapse/push/rulekinds.py +33 -0
  255. synapse/py.typed +0 -0
  256. synapse/replication/__init__.py +20 -0
  257. synapse/replication/http/__init__.py +68 -0
  258. synapse/replication/http/_base.py +468 -0
  259. synapse/replication/http/account_data.py +297 -0
  260. synapse/replication/http/deactivate_account.py +81 -0
  261. synapse/replication/http/delayed_events.py +62 -0
  262. synapse/replication/http/devices.py +254 -0
  263. synapse/replication/http/federation.py +334 -0
  264. synapse/replication/http/login.py +106 -0
  265. synapse/replication/http/membership.py +364 -0
  266. synapse/replication/http/presence.py +133 -0
  267. synapse/replication/http/push.py +156 -0
  268. synapse/replication/http/register.py +172 -0
  269. synapse/replication/http/send_events.py +182 -0
  270. synapse/replication/http/state.py +82 -0
  271. synapse/replication/http/streams.py +101 -0
  272. synapse/replication/tcp/__init__.py +56 -0
  273. synapse/replication/tcp/client.py +552 -0
  274. synapse/replication/tcp/commands.py +569 -0
  275. synapse/replication/tcp/context.py +41 -0
  276. synapse/replication/tcp/external_cache.py +156 -0
  277. synapse/replication/tcp/handler.py +922 -0
  278. synapse/replication/tcp/protocol.py +608 -0
  279. synapse/replication/tcp/redis.py +509 -0
  280. synapse/replication/tcp/resource.py +348 -0
  281. synapse/replication/tcp/streams/__init__.py +96 -0
  282. synapse/replication/tcp/streams/_base.py +765 -0
  283. synapse/replication/tcp/streams/events.py +287 -0
  284. synapse/replication/tcp/streams/federation.py +92 -0
  285. synapse/replication/tcp/streams/partial_state.py +80 -0
  286. synapse/res/providers.json +29 -0
  287. synapse/res/templates/_base.html +29 -0
  288. synapse/res/templates/account_previously_renewed.html +6 -0
  289. synapse/res/templates/account_renewed.html +6 -0
  290. synapse/res/templates/add_threepid.html +8 -0
  291. synapse/res/templates/add_threepid.txt +6 -0
  292. synapse/res/templates/add_threepid_failure.html +7 -0
  293. synapse/res/templates/add_threepid_success.html +6 -0
  294. synapse/res/templates/already_in_use.html +12 -0
  295. synapse/res/templates/already_in_use.txt +10 -0
  296. synapse/res/templates/auth_success.html +21 -0
  297. synapse/res/templates/invalid_token.html +6 -0
  298. synapse/res/templates/mail-Element.css +7 -0
  299. synapse/res/templates/mail-Vector.css +7 -0
  300. synapse/res/templates/mail-expiry.css +4 -0
  301. synapse/res/templates/mail.css +156 -0
  302. synapse/res/templates/notice_expiry.html +46 -0
  303. synapse/res/templates/notice_expiry.txt +7 -0
  304. synapse/res/templates/notif.html +51 -0
  305. synapse/res/templates/notif.txt +22 -0
  306. synapse/res/templates/notif_mail.html +59 -0
  307. synapse/res/templates/notif_mail.txt +10 -0
  308. synapse/res/templates/password_reset.html +10 -0
  309. synapse/res/templates/password_reset.txt +7 -0
  310. synapse/res/templates/password_reset_confirmation.html +15 -0
  311. synapse/res/templates/password_reset_failure.html +7 -0
  312. synapse/res/templates/password_reset_success.html +6 -0
  313. synapse/res/templates/recaptcha.html +42 -0
  314. synapse/res/templates/registration.html +12 -0
  315. synapse/res/templates/registration.txt +10 -0
  316. synapse/res/templates/registration_failure.html +6 -0
  317. synapse/res/templates/registration_success.html +6 -0
  318. synapse/res/templates/registration_token.html +18 -0
  319. synapse/res/templates/room.html +33 -0
  320. synapse/res/templates/room.txt +9 -0
  321. synapse/res/templates/sso.css +129 -0
  322. synapse/res/templates/sso_account_deactivated.html +25 -0
  323. synapse/res/templates/sso_auth_account_details.html +186 -0
  324. synapse/res/templates/sso_auth_account_details.js +116 -0
  325. synapse/res/templates/sso_auth_bad_user.html +26 -0
  326. synapse/res/templates/sso_auth_confirm.html +27 -0
  327. synapse/res/templates/sso_auth_success.html +26 -0
  328. synapse/res/templates/sso_error.html +71 -0
  329. synapse/res/templates/sso_footer.html +19 -0
  330. synapse/res/templates/sso_login_idp_picker.html +60 -0
  331. synapse/res/templates/sso_new_user_consent.html +30 -0
  332. synapse/res/templates/sso_partial_profile.html +19 -0
  333. synapse/res/templates/sso_redirect_confirm.html +39 -0
  334. synapse/res/templates/style.css +33 -0
  335. synapse/res/templates/terms.html +27 -0
  336. synapse/rest/__init__.py +197 -0
  337. synapse/rest/admin/__init__.py +390 -0
  338. synapse/rest/admin/_base.py +72 -0
  339. synapse/rest/admin/background_updates.py +171 -0
  340. synapse/rest/admin/devices.py +221 -0
  341. synapse/rest/admin/event_reports.py +173 -0
  342. synapse/rest/admin/events.py +69 -0
  343. synapse/rest/admin/experimental_features.py +137 -0
  344. synapse/rest/admin/federation.py +243 -0
  345. synapse/rest/admin/media.py +540 -0
  346. synapse/rest/admin/registration_tokens.py +358 -0
  347. synapse/rest/admin/rooms.py +1061 -0
  348. synapse/rest/admin/scheduled_tasks.py +70 -0
  349. synapse/rest/admin/server_notice_servlet.py +132 -0
  350. synapse/rest/admin/statistics.py +132 -0
  351. synapse/rest/admin/username_available.py +58 -0
  352. synapse/rest/admin/users.py +1606 -0
  353. synapse/rest/client/__init__.py +20 -0
  354. synapse/rest/client/_base.py +113 -0
  355. synapse/rest/client/account.py +930 -0
  356. synapse/rest/client/account_data.py +319 -0
  357. synapse/rest/client/account_validity.py +103 -0
  358. synapse/rest/client/appservice_ping.py +125 -0
  359. synapse/rest/client/auth.py +218 -0
  360. synapse/rest/client/auth_metadata.py +122 -0
  361. synapse/rest/client/capabilities.py +121 -0
  362. synapse/rest/client/delayed_events.py +165 -0
  363. synapse/rest/client/devices.py +587 -0
  364. synapse/rest/client/directory.py +211 -0
  365. synapse/rest/client/events.py +116 -0
  366. synapse/rest/client/filter.py +112 -0
  367. synapse/rest/client/initial_sync.py +65 -0
  368. synapse/rest/client/keys.py +678 -0
  369. synapse/rest/client/knock.py +104 -0
  370. synapse/rest/client/login.py +750 -0
  371. synapse/rest/client/login_token_request.py +127 -0
  372. synapse/rest/client/logout.py +93 -0
  373. synapse/rest/client/matrixrtc.py +52 -0
  374. synapse/rest/client/media.py +285 -0
  375. synapse/rest/client/mutual_rooms.py +93 -0
  376. synapse/rest/client/notifications.py +137 -0
  377. synapse/rest/client/openid.py +109 -0
  378. synapse/rest/client/password_policy.py +69 -0
  379. synapse/rest/client/presence.py +131 -0
  380. synapse/rest/client/profile.py +291 -0
  381. synapse/rest/client/push_rule.py +331 -0
  382. synapse/rest/client/pusher.py +181 -0
  383. synapse/rest/client/read_marker.py +104 -0
  384. synapse/rest/client/receipts.py +165 -0
  385. synapse/rest/client/register.py +1067 -0
  386. synapse/rest/client/relations.py +138 -0
  387. synapse/rest/client/rendezvous.py +76 -0
  388. synapse/rest/client/reporting.py +207 -0
  389. synapse/rest/client/room.py +1669 -0
  390. synapse/rest/client/room_keys.py +426 -0
  391. synapse/rest/client/room_upgrade_rest_servlet.py +112 -0
  392. synapse/rest/client/sendtodevice.py +85 -0
  393. synapse/rest/client/sync.py +1131 -0
  394. synapse/rest/client/tags.py +129 -0
  395. synapse/rest/client/thirdparty.py +130 -0
  396. synapse/rest/client/thread_subscriptions.py +247 -0
  397. synapse/rest/client/tokenrefresh.py +52 -0
  398. synapse/rest/client/transactions.py +149 -0
  399. synapse/rest/client/user_directory.py +90 -0
  400. synapse/rest/client/versions.py +191 -0
  401. synapse/rest/client/voip.py +88 -0
  402. synapse/rest/consent/__init__.py +0 -0
  403. synapse/rest/consent/consent_resource.py +210 -0
  404. synapse/rest/health.py +38 -0
  405. synapse/rest/key/__init__.py +20 -0
  406. synapse/rest/key/v2/__init__.py +40 -0
  407. synapse/rest/key/v2/local_key_resource.py +125 -0
  408. synapse/rest/key/v2/remote_key_resource.py +302 -0
  409. synapse/rest/media/__init__.py +0 -0
  410. synapse/rest/media/config_resource.py +53 -0
  411. synapse/rest/media/create_resource.py +90 -0
  412. synapse/rest/media/download_resource.py +110 -0
  413. synapse/rest/media/media_repository_resource.py +113 -0
  414. synapse/rest/media/preview_url_resource.py +77 -0
  415. synapse/rest/media/thumbnail_resource.py +142 -0
  416. synapse/rest/media/upload_resource.py +187 -0
  417. synapse/rest/media/v1/__init__.py +39 -0
  418. synapse/rest/media/v1/_base.py +23 -0
  419. synapse/rest/media/v1/media_storage.py +23 -0
  420. synapse/rest/media/v1/storage_provider.py +23 -0
  421. synapse/rest/synapse/__init__.py +20 -0
  422. synapse/rest/synapse/client/__init__.py +93 -0
  423. synapse/rest/synapse/client/federation_whitelist.py +66 -0
  424. synapse/rest/synapse/client/jwks.py +77 -0
  425. synapse/rest/synapse/client/new_user_consent.py +115 -0
  426. synapse/rest/synapse/client/oidc/__init__.py +45 -0
  427. synapse/rest/synapse/client/oidc/backchannel_logout_resource.py +42 -0
  428. synapse/rest/synapse/client/oidc/callback_resource.py +48 -0
  429. synapse/rest/synapse/client/password_reset.py +129 -0
  430. synapse/rest/synapse/client/pick_idp.py +107 -0
  431. synapse/rest/synapse/client/pick_username.py +153 -0
  432. synapse/rest/synapse/client/rendezvous.py +58 -0
  433. synapse/rest/synapse/client/saml2/__init__.py +42 -0
  434. synapse/rest/synapse/client/saml2/metadata_resource.py +46 -0
  435. synapse/rest/synapse/client/saml2/response_resource.py +52 -0
  436. synapse/rest/synapse/client/sso_register.py +56 -0
  437. synapse/rest/synapse/client/unsubscribe.py +88 -0
  438. synapse/rest/synapse/mas/__init__.py +71 -0
  439. synapse/rest/synapse/mas/_base.py +55 -0
  440. synapse/rest/synapse/mas/devices.py +239 -0
  441. synapse/rest/synapse/mas/users.py +469 -0
  442. synapse/rest/well_known.py +148 -0
  443. synapse/server.py +1257 -0
  444. synapse/server_notices/__init__.py +0 -0
  445. synapse/server_notices/consent_server_notices.py +136 -0
  446. synapse/server_notices/resource_limits_server_notices.py +215 -0
  447. synapse/server_notices/server_notices_manager.py +388 -0
  448. synapse/server_notices/server_notices_sender.py +67 -0
  449. synapse/server_notices/worker_server_notices_sender.py +46 -0
  450. synapse/spam_checker_api/__init__.py +31 -0
  451. synapse/state/__init__.py +1022 -0
  452. synapse/state/v1.py +369 -0
  453. synapse/state/v2.py +984 -0
  454. synapse/static/client/login/index.html +47 -0
  455. synapse/static/client/login/js/jquery-3.4.1.min.js +2 -0
  456. synapse/static/client/login/js/login.js +291 -0
  457. synapse/static/client/login/spinner.gif +0 -0
  458. synapse/static/client/login/style.css +79 -0
  459. synapse/static/index.html +63 -0
  460. synapse/storage/__init__.py +43 -0
  461. synapse/storage/_base.py +245 -0
  462. synapse/storage/admin_client_config.py +25 -0
  463. synapse/storage/background_updates.py +1188 -0
  464. synapse/storage/controllers/__init__.py +57 -0
  465. synapse/storage/controllers/persist_events.py +1237 -0
  466. synapse/storage/controllers/purge_events.py +455 -0
  467. synapse/storage/controllers/state.py +950 -0
  468. synapse/storage/controllers/stats.py +119 -0
  469. synapse/storage/database.py +2719 -0
  470. synapse/storage/databases/__init__.py +175 -0
  471. synapse/storage/databases/main/__init__.py +420 -0
  472. synapse/storage/databases/main/account_data.py +1059 -0
  473. synapse/storage/databases/main/appservice.py +473 -0
  474. synapse/storage/databases/main/cache.py +911 -0
  475. synapse/storage/databases/main/censor_events.py +225 -0
  476. synapse/storage/databases/main/client_ips.py +815 -0
  477. synapse/storage/databases/main/delayed_events.py +562 -0
  478. synapse/storage/databases/main/deviceinbox.py +1271 -0
  479. synapse/storage/databases/main/devices.py +2578 -0
  480. synapse/storage/databases/main/directory.py +212 -0
  481. synapse/storage/databases/main/e2e_room_keys.py +689 -0
  482. synapse/storage/databases/main/end_to_end_keys.py +1894 -0
  483. synapse/storage/databases/main/event_federation.py +2508 -0
  484. synapse/storage/databases/main/event_push_actions.py +1933 -0
  485. synapse/storage/databases/main/events.py +3765 -0
  486. synapse/storage/databases/main/events_bg_updates.py +2910 -0
  487. synapse/storage/databases/main/events_forward_extremities.py +126 -0
  488. synapse/storage/databases/main/events_worker.py +2786 -0
  489. synapse/storage/databases/main/experimental_features.py +130 -0
  490. synapse/storage/databases/main/filtering.py +231 -0
  491. synapse/storage/databases/main/keys.py +291 -0
  492. synapse/storage/databases/main/lock.py +553 -0
  493. synapse/storage/databases/main/media_repository.py +1068 -0
  494. synapse/storage/databases/main/metrics.py +460 -0
  495. synapse/storage/databases/main/monthly_active_users.py +443 -0
  496. synapse/storage/databases/main/openid.py +60 -0
  497. synapse/storage/databases/main/presence.py +509 -0
  498. synapse/storage/databases/main/profile.py +539 -0
  499. synapse/storage/databases/main/purge_events.py +521 -0
  500. synapse/storage/databases/main/push_rule.py +970 -0
  501. synapse/storage/databases/main/pusher.py +793 -0
  502. synapse/storage/databases/main/receipts.py +1341 -0
  503. synapse/storage/databases/main/registration.py +3072 -0
  504. synapse/storage/databases/main/rejections.py +37 -0
  505. synapse/storage/databases/main/relations.py +1116 -0
  506. synapse/storage/databases/main/room.py +2779 -0
  507. synapse/storage/databases/main/roommember.py +2110 -0
  508. synapse/storage/databases/main/search.py +939 -0
  509. synapse/storage/databases/main/session.py +151 -0
  510. synapse/storage/databases/main/signatures.py +94 -0
  511. synapse/storage/databases/main/sliding_sync.py +603 -0
  512. synapse/storage/databases/main/state.py +1002 -0
  513. synapse/storage/databases/main/state_deltas.py +329 -0
  514. synapse/storage/databases/main/stats.py +789 -0
  515. synapse/storage/databases/main/stream.py +2577 -0
  516. synapse/storage/databases/main/tags.py +360 -0
  517. synapse/storage/databases/main/task_scheduler.py +225 -0
  518. synapse/storage/databases/main/thread_subscriptions.py +589 -0
  519. synapse/storage/databases/main/transactions.py +675 -0
  520. synapse/storage/databases/main/ui_auth.py +420 -0
  521. synapse/storage/databases/main/user_directory.py +1330 -0
  522. synapse/storage/databases/main/user_erasure_store.py +117 -0
  523. synapse/storage/databases/state/__init__.py +22 -0
  524. synapse/storage/databases/state/bg_updates.py +497 -0
  525. synapse/storage/databases/state/deletion.py +557 -0
  526. synapse/storage/databases/state/store.py +948 -0
  527. synapse/storage/engines/__init__.py +70 -0
  528. synapse/storage/engines/_base.py +154 -0
  529. synapse/storage/engines/postgres.py +261 -0
  530. synapse/storage/engines/sqlite.py +199 -0
  531. synapse/storage/invite_rule.py +112 -0
  532. synapse/storage/keys.py +40 -0
  533. synapse/storage/prepare_database.py +730 -0
  534. synapse/storage/push_rule.py +28 -0
  535. synapse/storage/roommember.py +88 -0
  536. synapse/storage/schema/README.md +4 -0
  537. synapse/storage/schema/__init__.py +186 -0
  538. synapse/storage/schema/common/delta/25/00background_updates.sql +40 -0
  539. synapse/storage/schema/common/delta/35/00background_updates_add_col.sql +36 -0
  540. synapse/storage/schema/common/delta/58/00background_update_ordering.sql +38 -0
  541. synapse/storage/schema/common/full_schemas/72/full.sql.postgres +8 -0
  542. synapse/storage/schema/common/full_schemas/72/full.sql.sqlite +6 -0
  543. synapse/storage/schema/common/schema_version.sql +60 -0
  544. synapse/storage/schema/main/delta/12/v12.sql +82 -0
  545. synapse/storage/schema/main/delta/13/v13.sql +38 -0
  546. synapse/storage/schema/main/delta/14/v14.sql +42 -0
  547. synapse/storage/schema/main/delta/15/appservice_txns.sql +50 -0
  548. synapse/storage/schema/main/delta/15/presence_indices.sql +2 -0
  549. synapse/storage/schema/main/delta/15/v15.sql +24 -0
  550. synapse/storage/schema/main/delta/16/events_order_index.sql +4 -0
  551. synapse/storage/schema/main/delta/16/remote_media_cache_index.sql +2 -0
  552. synapse/storage/schema/main/delta/16/remove_duplicates.sql +9 -0
  553. synapse/storage/schema/main/delta/16/room_alias_index.sql +3 -0
  554. synapse/storage/schema/main/delta/16/unique_constraints.sql +72 -0
  555. synapse/storage/schema/main/delta/16/users.sql +56 -0
  556. synapse/storage/schema/main/delta/17/drop_indexes.sql +37 -0
  557. synapse/storage/schema/main/delta/17/server_keys.sql +43 -0
  558. synapse/storage/schema/main/delta/17/user_threepids.sql +9 -0
  559. synapse/storage/schema/main/delta/18/server_keys_bigger_ints.sql +51 -0
  560. synapse/storage/schema/main/delta/19/event_index.sql +38 -0
  561. synapse/storage/schema/main/delta/20/dummy.sql +1 -0
  562. synapse/storage/schema/main/delta/20/pushers.py +93 -0
  563. synapse/storage/schema/main/delta/21/end_to_end_keys.sql +53 -0
  564. synapse/storage/schema/main/delta/21/receipts.sql +57 -0
  565. synapse/storage/schema/main/delta/22/receipts_index.sql +41 -0
  566. synapse/storage/schema/main/delta/22/user_threepids_unique.sql +19 -0
  567. synapse/storage/schema/main/delta/24/stats_reporting.sql +37 -0
  568. synapse/storage/schema/main/delta/25/fts.py +81 -0
  569. synapse/storage/schema/main/delta/25/guest_access.sql +44 -0
  570. synapse/storage/schema/main/delta/25/history_visibility.sql +44 -0
  571. synapse/storage/schema/main/delta/25/tags.sql +57 -0
  572. synapse/storage/schema/main/delta/26/account_data.sql +36 -0
  573. synapse/storage/schema/main/delta/27/account_data.sql +55 -0
  574. synapse/storage/schema/main/delta/27/forgotten_memberships.sql +45 -0
  575. synapse/storage/schema/main/delta/27/ts.py +61 -0
  576. synapse/storage/schema/main/delta/28/event_push_actions.sql +46 -0
  577. synapse/storage/schema/main/delta/28/events_room_stream.sql +39 -0
  578. synapse/storage/schema/main/delta/28/public_roms_index.sql +39 -0
  579. synapse/storage/schema/main/delta/28/receipts_user_id_index.sql +41 -0
  580. synapse/storage/schema/main/delta/28/upgrade_times.sql +40 -0
  581. synapse/storage/schema/main/delta/28/users_is_guest.sql +41 -0
  582. synapse/storage/schema/main/delta/29/push_actions.sql +54 -0
  583. synapse/storage/schema/main/delta/30/alias_creator.sql +35 -0
  584. synapse/storage/schema/main/delta/30/as_users.py +82 -0
  585. synapse/storage/schema/main/delta/30/deleted_pushers.sql +44 -0
  586. synapse/storage/schema/main/delta/30/presence_stream.sql +49 -0
  587. synapse/storage/schema/main/delta/30/public_rooms.sql +42 -0
  588. synapse/storage/schema/main/delta/30/push_rule_stream.sql +57 -0
  589. synapse/storage/schema/main/delta/30/threepid_guest_access_tokens.sql +43 -0
  590. synapse/storage/schema/main/delta/31/invites.sql +61 -0
  591. synapse/storage/schema/main/delta/31/local_media_repository_url_cache.sql +46 -0
  592. synapse/storage/schema/main/delta/31/pushers_0.py +92 -0
  593. synapse/storage/schema/main/delta/31/pushers_index.sql +41 -0
  594. synapse/storage/schema/main/delta/31/search_update.py +65 -0
  595. synapse/storage/schema/main/delta/32/events.sql +35 -0
  596. synapse/storage/schema/main/delta/32/openid.sql +9 -0
  597. synapse/storage/schema/main/delta/32/pusher_throttle.sql +42 -0
  598. synapse/storage/schema/main/delta/32/remove_indices.sql +52 -0
  599. synapse/storage/schema/main/delta/32/reports.sql +44 -0
  600. synapse/storage/schema/main/delta/33/access_tokens_device_index.sql +36 -0
  601. synapse/storage/schema/main/delta/33/devices.sql +40 -0
  602. synapse/storage/schema/main/delta/33/devices_for_e2e_keys.sql +38 -0
  603. synapse/storage/schema/main/delta/33/devices_for_e2e_keys_clear_unknown_device.sql +39 -0
  604. synapse/storage/schema/main/delta/33/event_fields.py +61 -0
  605. synapse/storage/schema/main/delta/33/remote_media_ts.py +43 -0
  606. synapse/storage/schema/main/delta/33/user_ips_index.sql +36 -0
  607. synapse/storage/schema/main/delta/34/appservice_stream.sql +42 -0
  608. synapse/storage/schema/main/delta/34/cache_stream.py +50 -0
  609. synapse/storage/schema/main/delta/34/device_inbox.sql +43 -0
  610. synapse/storage/schema/main/delta/34/push_display_name_rename.sql +39 -0
  611. synapse/storage/schema/main/delta/34/received_txn_purge.py +36 -0
  612. synapse/storage/schema/main/delta/35/contains_url.sql +36 -0
  613. synapse/storage/schema/main/delta/35/device_outbox.sql +58 -0
  614. synapse/storage/schema/main/delta/35/device_stream_id.sql +40 -0
  615. synapse/storage/schema/main/delta/35/event_push_actions_index.sql +36 -0
  616. synapse/storage/schema/main/delta/35/public_room_list_change_stream.sql +52 -0
  617. synapse/storage/schema/main/delta/35/stream_order_to_extrem.sql +56 -0
  618. synapse/storage/schema/main/delta/36/readd_public_rooms.sql +45 -0
  619. synapse/storage/schema/main/delta/37/remove_auth_idx.py +89 -0
  620. synapse/storage/schema/main/delta/37/user_threepids.sql +71 -0
  621. synapse/storage/schema/main/delta/38/postgres_fts_gist.sql +38 -0
  622. synapse/storage/schema/main/delta/39/appservice_room_list.sql +48 -0
  623. synapse/storage/schema/main/delta/39/device_federation_stream_idx.sql +35 -0
  624. synapse/storage/schema/main/delta/39/event_push_index.sql +36 -0
  625. synapse/storage/schema/main/delta/39/federation_out_position.sql +41 -0
  626. synapse/storage/schema/main/delta/39/membership_profile.sql +39 -0
  627. synapse/storage/schema/main/delta/40/current_state_idx.sql +36 -0
  628. synapse/storage/schema/main/delta/40/device_inbox.sql +40 -0
  629. synapse/storage/schema/main/delta/40/device_list_streams.sql +79 -0
  630. synapse/storage/schema/main/delta/40/event_push_summary.sql +57 -0
  631. synapse/storage/schema/main/delta/40/pushers.sql +58 -0
  632. synapse/storage/schema/main/delta/41/device_list_stream_idx.sql +36 -0
  633. synapse/storage/schema/main/delta/41/device_outbound_index.sql +35 -0
  634. synapse/storage/schema/main/delta/41/event_search_event_id_idx.sql +36 -0
  635. synapse/storage/schema/main/delta/41/ratelimit.sql +41 -0
  636. synapse/storage/schema/main/delta/42/current_state_delta.sql +48 -0
  637. synapse/storage/schema/main/delta/42/device_list_last_id.sql +52 -0
  638. synapse/storage/schema/main/delta/42/event_auth_state_only.sql +36 -0
  639. synapse/storage/schema/main/delta/42/user_dir.py +88 -0
  640. synapse/storage/schema/main/delta/43/blocked_rooms.sql +40 -0
  641. synapse/storage/schema/main/delta/43/quarantine_media.sql +36 -0
  642. synapse/storage/schema/main/delta/43/url_cache.sql +35 -0
  643. synapse/storage/schema/main/delta/43/user_share.sql +52 -0
  644. synapse/storage/schema/main/delta/44/expire_url_cache.sql +60 -0
  645. synapse/storage/schema/main/delta/45/group_server.sql +186 -0
  646. synapse/storage/schema/main/delta/45/profile_cache.sql +47 -0
  647. synapse/storage/schema/main/delta/46/drop_refresh_tokens.sql +36 -0
  648. synapse/storage/schema/main/delta/46/drop_unique_deleted_pushers.sql +54 -0
  649. synapse/storage/schema/main/delta/46/group_server.sql +51 -0
  650. synapse/storage/schema/main/delta/46/local_media_repository_url_idx.sql +43 -0
  651. synapse/storage/schema/main/delta/46/user_dir_null_room_ids.sql +54 -0
  652. synapse/storage/schema/main/delta/46/user_dir_typos.sql +43 -0
  653. synapse/storage/schema/main/delta/47/last_access_media.sql +35 -0
  654. synapse/storage/schema/main/delta/47/postgres_fts_gin.sql +36 -0
  655. synapse/storage/schema/main/delta/47/push_actions_staging.sql +47 -0
  656. synapse/storage/schema/main/delta/48/add_user_consent.sql +37 -0
  657. synapse/storage/schema/main/delta/48/add_user_ips_last_seen_index.sql +36 -0
  658. synapse/storage/schema/main/delta/48/deactivated_users.sql +44 -0
  659. synapse/storage/schema/main/delta/48/group_unique_indexes.py +67 -0
  660. synapse/storage/schema/main/delta/48/groups_joinable.sql +41 -0
  661. synapse/storage/schema/main/delta/49/add_user_consent_server_notice_sent.sql +39 -0
  662. synapse/storage/schema/main/delta/49/add_user_daily_visits.sql +40 -0
  663. synapse/storage/schema/main/delta/49/add_user_ips_last_seen_only_index.sql +36 -0
  664. synapse/storage/schema/main/delta/50/add_creation_ts_users_index.sql +38 -0
  665. synapse/storage/schema/main/delta/50/erasure_store.sql +40 -0
  666. synapse/storage/schema/main/delta/50/make_event_content_nullable.py +102 -0
  667. synapse/storage/schema/main/delta/51/e2e_room_keys.sql +58 -0
  668. synapse/storage/schema/main/delta/51/monthly_active_users.sql +46 -0
  669. synapse/storage/schema/main/delta/52/add_event_to_state_group_index.sql +38 -0
  670. synapse/storage/schema/main/delta/52/device_list_streams_unique_idx.sql +55 -0
  671. synapse/storage/schema/main/delta/52/e2e_room_keys.sql +72 -0
  672. synapse/storage/schema/main/delta/53/add_user_type_to_users.sql +38 -0
  673. synapse/storage/schema/main/delta/53/drop_sent_transactions.sql +35 -0
  674. synapse/storage/schema/main/delta/53/event_format_version.sql +35 -0
  675. synapse/storage/schema/main/delta/53/user_dir_populate.sql +49 -0
  676. synapse/storage/schema/main/delta/53/user_ips_index.sql +49 -0
  677. synapse/storage/schema/main/delta/53/user_share.sql +63 -0
  678. synapse/storage/schema/main/delta/53/user_threepid_id.sql +48 -0
  679. synapse/storage/schema/main/delta/53/users_in_public_rooms.sql +47 -0
  680. synapse/storage/schema/main/delta/54/account_validity_with_renewal.sql +49 -0
  681. synapse/storage/schema/main/delta/54/add_validity_to_server_keys.sql +42 -0
  682. synapse/storage/schema/main/delta/54/delete_forward_extremities.sql +42 -0
  683. synapse/storage/schema/main/delta/54/drop_legacy_tables.sql +49 -0
  684. synapse/storage/schema/main/delta/54/drop_presence_list.sql +35 -0
  685. synapse/storage/schema/main/delta/54/relations.sql +46 -0
  686. synapse/storage/schema/main/delta/54/stats.sql +99 -0
  687. synapse/storage/schema/main/delta/54/stats2.sql +47 -0
  688. synapse/storage/schema/main/delta/55/access_token_expiry.sql +37 -0
  689. synapse/storage/schema/main/delta/55/track_threepid_validations.sql +50 -0
  690. synapse/storage/schema/main/delta/55/users_alter_deactivated.sql +38 -0
  691. synapse/storage/schema/main/delta/56/add_spans_to_device_lists.sql +39 -0
  692. synapse/storage/schema/main/delta/56/current_state_events_membership.sql +41 -0
  693. synapse/storage/schema/main/delta/56/current_state_events_membership_mk2.sql +43 -0
  694. synapse/storage/schema/main/delta/56/delete_keys_from_deleted_backups.sql +44 -0
  695. synapse/storage/schema/main/delta/56/destinations_failure_ts.sql +44 -0
  696. synapse/storage/schema/main/delta/56/destinations_retry_interval_type.sql.postgres +18 -0
  697. synapse/storage/schema/main/delta/56/device_stream_id_insert.sql +39 -0
  698. synapse/storage/schema/main/delta/56/devices_last_seen.sql +43 -0
  699. synapse/storage/schema/main/delta/56/drop_unused_event_tables.sql +39 -0
  700. synapse/storage/schema/main/delta/56/event_expiry.sql +40 -0
  701. synapse/storage/schema/main/delta/56/event_labels.sql +49 -0
  702. synapse/storage/schema/main/delta/56/event_labels_background_update.sql +36 -0
  703. synapse/storage/schema/main/delta/56/fix_room_keys_index.sql +37 -0
  704. synapse/storage/schema/main/delta/56/hidden_devices.sql +37 -0
  705. synapse/storage/schema/main/delta/56/hidden_devices_fix.sql.sqlite +42 -0
  706. synapse/storage/schema/main/delta/56/nuke_empty_communities_from_db.sql +48 -0
  707. synapse/storage/schema/main/delta/56/public_room_list_idx.sql +35 -0
  708. synapse/storage/schema/main/delta/56/redaction_censor.sql +35 -0
  709. synapse/storage/schema/main/delta/56/redaction_censor2.sql +41 -0
  710. synapse/storage/schema/main/delta/56/redaction_censor3_fix_update.sql.postgres +25 -0
  711. synapse/storage/schema/main/delta/56/redaction_censor4.sql +35 -0
  712. synapse/storage/schema/main/delta/56/remove_tombstoned_rooms_from_directory.sql +38 -0
  713. synapse/storage/schema/main/delta/56/room_key_etag.sql +36 -0
  714. synapse/storage/schema/main/delta/56/room_membership_idx.sql +37 -0
  715. synapse/storage/schema/main/delta/56/room_retention.sql +52 -0
  716. synapse/storage/schema/main/delta/56/signing_keys.sql +75 -0
  717. synapse/storage/schema/main/delta/56/signing_keys_nonunique_signatures.sql +41 -0
  718. synapse/storage/schema/main/delta/56/stats_separated.sql +175 -0
  719. synapse/storage/schema/main/delta/56/unique_user_filter_index.py +46 -0
  720. synapse/storage/schema/main/delta/56/user_external_ids.sql +43 -0
  721. synapse/storage/schema/main/delta/56/users_in_public_rooms_idx.sql +36 -0
  722. synapse/storage/schema/main/delta/57/delete_old_current_state_events.sql +41 -0
  723. synapse/storage/schema/main/delta/57/device_list_remote_cache_stale.sql +44 -0
  724. synapse/storage/schema/main/delta/57/local_current_membership.py +111 -0
  725. synapse/storage/schema/main/delta/57/remove_sent_outbound_pokes.sql +40 -0
  726. synapse/storage/schema/main/delta/57/rooms_version_column.sql +43 -0
  727. synapse/storage/schema/main/delta/57/rooms_version_column_2.sql.postgres +35 -0
  728. synapse/storage/schema/main/delta/57/rooms_version_column_2.sql.sqlite +22 -0
  729. synapse/storage/schema/main/delta/57/rooms_version_column_3.sql.postgres +39 -0
  730. synapse/storage/schema/main/delta/57/rooms_version_column_3.sql.sqlite +23 -0
  731. synapse/storage/schema/main/delta/58/02remove_dup_outbound_pokes.sql +41 -0
  732. synapse/storage/schema/main/delta/58/03persist_ui_auth.sql +55 -0
  733. synapse/storage/schema/main/delta/58/05cache_instance.sql.postgres +30 -0
  734. synapse/storage/schema/main/delta/58/06dlols_unique_idx.py +83 -0
  735. synapse/storage/schema/main/delta/58/07add_method_to_thumbnail_constraint.sql.postgres +33 -0
  736. synapse/storage/schema/main/delta/58/07add_method_to_thumbnail_constraint.sql.sqlite +44 -0
  737. synapse/storage/schema/main/delta/58/07persist_ui_auth_ips.sql +44 -0
  738. synapse/storage/schema/main/delta/58/08_media_safe_from_quarantine.sql.postgres +18 -0
  739. synapse/storage/schema/main/delta/58/08_media_safe_from_quarantine.sql.sqlite +18 -0
  740. synapse/storage/schema/main/delta/58/09shadow_ban.sql +37 -0
  741. synapse/storage/schema/main/delta/58/10_pushrules_enabled_delete_obsolete.sql +47 -0
  742. synapse/storage/schema/main/delta/58/10drop_local_rejections_stream.sql +41 -0
  743. synapse/storage/schema/main/delta/58/10federation_pos_instance_name.sql +41 -0
  744. synapse/storage/schema/main/delta/58/11dehydration.sql +39 -0
  745. synapse/storage/schema/main/delta/58/11fallback.sql +43 -0
  746. synapse/storage/schema/main/delta/58/11user_id_seq.py +38 -0
  747. synapse/storage/schema/main/delta/58/12room_stats.sql +51 -0
  748. synapse/storage/schema/main/delta/58/13remove_presence_allow_inbound.sql +36 -0
  749. synapse/storage/schema/main/delta/58/14events_instance_name.sql +35 -0
  750. synapse/storage/schema/main/delta/58/14events_instance_name.sql.postgres +28 -0
  751. synapse/storage/schema/main/delta/58/15_catchup_destination_rooms.sql +61 -0
  752. synapse/storage/schema/main/delta/58/15unread_count.sql +45 -0
  753. synapse/storage/schema/main/delta/58/16populate_stats_process_rooms_fix.sql +41 -0
  754. synapse/storage/schema/main/delta/58/17_catchup_last_successful.sql +40 -0
  755. synapse/storage/schema/main/delta/58/18stream_positions.sql +41 -0
  756. synapse/storage/schema/main/delta/58/19instance_map.sql.postgres +25 -0
  757. synapse/storage/schema/main/delta/58/19txn_id.sql +59 -0
  758. synapse/storage/schema/main/delta/58/20instance_name_event_tables.sql +36 -0
  759. synapse/storage/schema/main/delta/58/20user_daily_visits.sql +37 -0
  760. synapse/storage/schema/main/delta/58/21as_device_stream.sql +36 -0
  761. synapse/storage/schema/main/delta/58/21drop_device_max_stream_id.sql +1 -0
  762. synapse/storage/schema/main/delta/58/22puppet_token.sql +36 -0
  763. synapse/storage/schema/main/delta/58/22users_have_local_media.sql +2 -0
  764. synapse/storage/schema/main/delta/58/23e2e_cross_signing_keys_idx.sql +36 -0
  765. synapse/storage/schema/main/delta/58/24drop_event_json_index.sql +38 -0
  766. synapse/storage/schema/main/delta/58/25user_external_ids_user_id_idx.sql +36 -0
  767. synapse/storage/schema/main/delta/58/26access_token_last_validated.sql +37 -0
  768. synapse/storage/schema/main/delta/58/27local_invites.sql +37 -0
  769. synapse/storage/schema/main/delta/58/28drop_last_used_column.sql.postgres +16 -0
  770. synapse/storage/schema/main/delta/58/28drop_last_used_column.sql.sqlite +62 -0
  771. synapse/storage/schema/main/delta/59/01ignored_user.py +85 -0
  772. synapse/storage/schema/main/delta/59/02shard_send_to_device.sql +37 -0
  773. synapse/storage/schema/main/delta/59/03shard_send_to_device_sequence.sql.postgres +25 -0
  774. synapse/storage/schema/main/delta/59/04_event_auth_chains.sql +71 -0
  775. synapse/storage/schema/main/delta/59/04_event_auth_chains.sql.postgres +16 -0
  776. synapse/storage/schema/main/delta/59/04drop_account_data.sql +36 -0
  777. synapse/storage/schema/main/delta/59/05cache_invalidation.sql +36 -0
  778. synapse/storage/schema/main/delta/59/06chain_cover_index.sql +36 -0
  779. synapse/storage/schema/main/delta/59/06shard_account_data.sql +39 -0
  780. synapse/storage/schema/main/delta/59/06shard_account_data.sql.postgres +32 -0
  781. synapse/storage/schema/main/delta/59/07shard_account_data_fix.sql +37 -0
  782. synapse/storage/schema/main/delta/59/08delete_pushers_for_deactivated_accounts.sql +39 -0
  783. synapse/storage/schema/main/delta/59/08delete_stale_pushers.sql +39 -0
  784. synapse/storage/schema/main/delta/59/09rejected_events_metadata.sql +45 -0
  785. synapse/storage/schema/main/delta/59/10delete_purged_chain_cover.sql +36 -0
  786. synapse/storage/schema/main/delta/59/11add_knock_members_to_stats.sql +39 -0
  787. synapse/storage/schema/main/delta/59/11drop_thumbnail_constraint.sql.postgres +22 -0
  788. synapse/storage/schema/main/delta/59/12account_validity_token_used_ts_ms.sql +37 -0
  789. synapse/storage/schema/main/delta/59/12presence_stream_instance.sql +37 -0
  790. synapse/storage/schema/main/delta/59/12presence_stream_instance_seq.sql.postgres +20 -0
  791. synapse/storage/schema/main/delta/59/13users_to_send_full_presence_to.sql +53 -0
  792. synapse/storage/schema/main/delta/59/14refresh_tokens.sql +53 -0
  793. synapse/storage/schema/main/delta/59/15locks.sql +56 -0
  794. synapse/storage/schema/main/delta/59/16federation_inbound_staging.sql +51 -0
  795. synapse/storage/schema/main/delta/60/01recreate_stream_ordering.sql.postgres +45 -0
  796. synapse/storage/schema/main/delta/60/02change_stream_ordering_columns.sql.postgres +30 -0
  797. synapse/storage/schema/main/delta/61/01change_appservices_txns.sql.postgres +23 -0
  798. synapse/storage/schema/main/delta/61/01insertion_event_lookups.sql +68 -0
  799. synapse/storage/schema/main/delta/61/02drop_redundant_room_depth_index.sql +37 -0
  800. synapse/storage/schema/main/delta/61/03recreate_min_depth.py +74 -0
  801. synapse/storage/schema/main/delta/62/01insertion_event_extremities.sql +43 -0
  802. synapse/storage/schema/main/delta/63/01create_registration_tokens.sql +42 -0
  803. synapse/storage/schema/main/delta/63/02delete_unlinked_email_pushers.sql +39 -0
  804. synapse/storage/schema/main/delta/63/02populate-rooms-creator.sql +36 -0
  805. synapse/storage/schema/main/delta/63/03session_store.sql +42 -0
  806. synapse/storage/schema/main/delta/63/04add_presence_stream_not_offline_index.sql +37 -0
  807. synapse/storage/schema/main/delta/64/01msc2716_chunk_to_batch_rename.sql.postgres +23 -0
  808. synapse/storage/schema/main/delta/64/01msc2716_chunk_to_batch_rename.sql.sqlite +37 -0
  809. synapse/storage/schema/main/delta/65/01msc2716_insertion_event_edges.sql +38 -0
  810. synapse/storage/schema/main/delta/65/03remove_hidden_devices_from_device_inbox.sql +41 -0
  811. synapse/storage/schema/main/delta/65/04_local_group_updates.sql +37 -0
  812. synapse/storage/schema/main/delta/65/05_remove_room_stats_historical_and_user_stats_historical.sql +38 -0
  813. synapse/storage/schema/main/delta/65/06remove_deleted_devices_from_device_inbox.sql +53 -0
  814. synapse/storage/schema/main/delta/65/07_arbitrary_relations.sql +37 -0
  815. synapse/storage/schema/main/delta/65/08_device_inbox_background_updates.sql +37 -0
  816. synapse/storage/schema/main/delta/65/10_expirable_refresh_tokens.sql +47 -0
  817. synapse/storage/schema/main/delta/65/11_devices_auth_provider_session.sql +46 -0
  818. synapse/storage/schema/main/delta/67/01drop_public_room_list_stream.sql +37 -0
  819. synapse/storage/schema/main/delta/68/01event_columns.sql +45 -0
  820. synapse/storage/schema/main/delta/68/02_msc2409_add_device_id_appservice_stream_type.sql +40 -0
  821. synapse/storage/schema/main/delta/68/03_delete_account_data_for_deactivated_accounts.sql +39 -0
  822. synapse/storage/schema/main/delta/68/04_refresh_tokens_index_next_token_id.sql +47 -0
  823. synapse/storage/schema/main/delta/68/04partial_state_rooms.sql +60 -0
  824. synapse/storage/schema/main/delta/68/05_delete_non_strings_from_event_search.sql.sqlite +22 -0
  825. synapse/storage/schema/main/delta/68/05partial_state_rooms_triggers.py +80 -0
  826. synapse/storage/schema/main/delta/68/06_msc3202_add_device_list_appservice_stream_type.sql +42 -0
  827. synapse/storage/schema/main/delta/69/01as_txn_seq.py +54 -0
  828. synapse/storage/schema/main/delta/69/01device_list_oubound_by_room.sql +57 -0
  829. synapse/storage/schema/main/delta/69/02cache_invalidation_index.sql +37 -0
  830. synapse/storage/schema/main/delta/70/01clean_table_purged_rooms.sql +39 -0
  831. synapse/storage/schema/main/delta/71/01rebuild_event_edges.sql.postgres +43 -0
  832. synapse/storage/schema/main/delta/71/01rebuild_event_edges.sql.sqlite +47 -0
  833. synapse/storage/schema/main/delta/71/01remove_noop_background_updates.sql +80 -0
  834. synapse/storage/schema/main/delta/71/02event_push_summary_unique.sql +37 -0
  835. synapse/storage/schema/main/delta/72/01add_room_type_to_state_stats.sql +38 -0
  836. synapse/storage/schema/main/delta/72/01event_push_summary_receipt.sql +54 -0
  837. synapse/storage/schema/main/delta/72/02event_push_actions_index.sql +38 -0
  838. synapse/storage/schema/main/delta/72/03bg_populate_events_columns.py +57 -0
  839. synapse/storage/schema/main/delta/72/03drop_event_reference_hashes.sql +36 -0
  840. synapse/storage/schema/main/delta/72/03remove_groups.sql +50 -0
  841. synapse/storage/schema/main/delta/72/04drop_column_application_services_state_last_txn.sql.postgres +17 -0
  842. synapse/storage/schema/main/delta/72/04drop_column_application_services_state_last_txn.sql.sqlite +40 -0
  843. synapse/storage/schema/main/delta/72/05receipts_event_stream_ordering.sql +38 -0
  844. synapse/storage/schema/main/delta/72/05remove_unstable_private_read_receipts.sql +38 -0
  845. synapse/storage/schema/main/delta/72/06add_consent_ts_to_users.sql +35 -0
  846. synapse/storage/schema/main/delta/72/06thread_notifications.sql +49 -0
  847. synapse/storage/schema/main/delta/72/07force_update_current_state_events_membership.py +67 -0
  848. synapse/storage/schema/main/delta/72/07thread_receipts.sql.postgres +30 -0
  849. synapse/storage/schema/main/delta/72/07thread_receipts.sql.sqlite +70 -0
  850. synapse/storage/schema/main/delta/72/08begin_cache_invalidation_seq_at_2.sql.postgres +23 -0
  851. synapse/storage/schema/main/delta/72/08thread_receipts.sql +39 -0
  852. synapse/storage/schema/main/delta/72/09partial_indices.sql.sqlite +56 -0
  853. synapse/storage/schema/main/delta/73/01event_failed_pull_attempts.sql +48 -0
  854. synapse/storage/schema/main/delta/73/02add_pusher_enabled.sql +35 -0
  855. synapse/storage/schema/main/delta/73/02room_id_indexes_for_purging.sql +41 -0
  856. synapse/storage/schema/main/delta/73/03pusher_device_id.sql +39 -0
  857. synapse/storage/schema/main/delta/73/03users_approved_column.sql +39 -0
  858. synapse/storage/schema/main/delta/73/04partial_join_details.sql +42 -0
  859. synapse/storage/schema/main/delta/73/04pending_device_list_updates.sql +47 -0
  860. synapse/storage/schema/main/delta/73/05old_push_actions.sql.postgres +22 -0
  861. synapse/storage/schema/main/delta/73/05old_push_actions.sql.sqlite +24 -0
  862. synapse/storage/schema/main/delta/73/06thread_notifications_thread_id_idx.sql +42 -0
  863. synapse/storage/schema/main/delta/73/08thread_receipts_non_null.sql.postgres +23 -0
  864. synapse/storage/schema/main/delta/73/08thread_receipts_non_null.sql.sqlite +76 -0
  865. synapse/storage/schema/main/delta/73/09partial_joined_via_destination.sql +37 -0
  866. synapse/storage/schema/main/delta/73/09threads_table.sql +49 -0
  867. synapse/storage/schema/main/delta/73/10_update_sqlite_fts4_tokenizer.py +71 -0
  868. synapse/storage/schema/main/delta/73/10login_tokens.sql +54 -0
  869. synapse/storage/schema/main/delta/73/11event_search_room_id_n_distinct.sql.postgres +33 -0
  870. synapse/storage/schema/main/delta/73/12refactor_device_list_outbound_pokes.sql +72 -0
  871. synapse/storage/schema/main/delta/73/13add_device_lists_index.sql +39 -0
  872. synapse/storage/schema/main/delta/73/20_un_partial_stated_room_stream.sql +51 -0
  873. synapse/storage/schema/main/delta/73/21_un_partial_stated_room_stream_seq.sql.postgres +20 -0
  874. synapse/storage/schema/main/delta/73/22_rebuild_user_dir_stats.sql +48 -0
  875. synapse/storage/schema/main/delta/73/22_un_partial_stated_event_stream.sql +53 -0
  876. synapse/storage/schema/main/delta/73/23_fix_thread_index.sql +52 -0
  877. synapse/storage/schema/main/delta/73/23_un_partial_stated_room_stream_seq.sql.postgres +20 -0
  878. synapse/storage/schema/main/delta/73/24_events_jump_to_date_index.sql +36 -0
  879. synapse/storage/schema/main/delta/73/25drop_presence.sql +36 -0
  880. synapse/storage/schema/main/delta/74/01_user_directory_stale_remote_users.sql +58 -0
  881. synapse/storage/schema/main/delta/74/02_set_device_id_for_pushers_bg_update.sql +38 -0
  882. synapse/storage/schema/main/delta/74/03_membership_tables_event_stream_ordering.sql.postgres +29 -0
  883. synapse/storage/schema/main/delta/74/03_membership_tables_event_stream_ordering.sql.sqlite +23 -0
  884. synapse/storage/schema/main/delta/74/03_room_membership_index.sql +38 -0
  885. synapse/storage/schema/main/delta/74/04_delete_e2e_backup_keys_for_deactivated_users.sql +36 -0
  886. synapse/storage/schema/main/delta/74/04_membership_tables_event_stream_ordering_triggers.py +87 -0
  887. synapse/storage/schema/main/delta/74/05_events_txn_id_device_id.sql +72 -0
  888. synapse/storage/schema/main/delta/74/90COMMENTS_destinations.sql.postgres +52 -0
  889. synapse/storage/schema/main/delta/76/01_add_profiles_full_user_id_column.sql +39 -0
  890. synapse/storage/schema/main/delta/76/02_add_user_filters_full_user_id_column.sql +39 -0
  891. synapse/storage/schema/main/delta/76/03_per_user_experimental_features.sql +46 -0
  892. synapse/storage/schema/main/delta/76/04_add_room_forgetter.sql +43 -0
  893. synapse/storage/schema/main/delta/77/01_add_profiles_not_valid_check.sql.postgres +16 -0
  894. synapse/storage/schema/main/delta/77/02_add_user_filters_not_valid_check.sql.postgres +16 -0
  895. synapse/storage/schema/main/delta/77/03bg_populate_full_user_id_profiles.sql +35 -0
  896. synapse/storage/schema/main/delta/77/04bg_populate_full_user_id_user_filters.sql +35 -0
  897. synapse/storage/schema/main/delta/77/05thread_notifications_backfill.sql +67 -0
  898. synapse/storage/schema/main/delta/77/06thread_notifications_not_null.sql.sqlite +102 -0
  899. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_actions.sql.postgres +27 -0
  900. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_actions_staging.sql.postgres +27 -0
  901. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_summary.sql.postgres +29 -0
  902. synapse/storage/schema/main/delta/77/14bg_indices_event_stream_ordering.sql +39 -0
  903. synapse/storage/schema/main/delta/78/01_validate_and_update_profiles.py +99 -0
  904. synapse/storage/schema/main/delta/78/02_validate_and_update_user_filters.py +100 -0
  905. synapse/storage/schema/main/delta/78/03_remove_unused_indexes_user_filters.py +72 -0
  906. synapse/storage/schema/main/delta/78/03event_extremities_constraints.py +65 -0
  907. synapse/storage/schema/main/delta/78/04_add_full_user_id_index_user_filters.py +32 -0
  908. synapse/storage/schema/main/delta/79/03_read_write_locks_triggers.sql.postgres +102 -0
  909. synapse/storage/schema/main/delta/79/03_read_write_locks_triggers.sql.sqlite +72 -0
  910. synapse/storage/schema/main/delta/79/04_mitigate_stream_ordering_update_race.py +70 -0
  911. synapse/storage/schema/main/delta/79/05_read_write_locks_triggers.sql.postgres +69 -0
  912. synapse/storage/schema/main/delta/79/05_read_write_locks_triggers.sql.sqlite +65 -0
  913. synapse/storage/schema/main/delta/80/01_users_alter_locked.sql +35 -0
  914. synapse/storage/schema/main/delta/80/02_read_write_locks_unlogged.sql.postgres +30 -0
  915. synapse/storage/schema/main/delta/80/02_scheduled_tasks.sql +47 -0
  916. synapse/storage/schema/main/delta/80/03_read_write_locks_triggers.sql.postgres +37 -0
  917. synapse/storage/schema/main/delta/80/04_read_write_locks_deadlock.sql.postgres +71 -0
  918. synapse/storage/schema/main/delta/82/02_scheduled_tasks_index.sql +35 -0
  919. synapse/storage/schema/main/delta/82/04_add_indices_for_purging_rooms.sql +39 -0
  920. synapse/storage/schema/main/delta/82/05gaps.sql +44 -0
  921. synapse/storage/schema/main/delta/83/01_drop_old_tables.sql +43 -0
  922. synapse/storage/schema/main/delta/83/03_instance_name_receipts.sql.sqlite +17 -0
  923. synapse/storage/schema/main/delta/83/05_cross_signing_key_update_grant.sql +34 -0
  924. synapse/storage/schema/main/delta/83/06_event_push_summary_room.sql +36 -0
  925. synapse/storage/schema/main/delta/84/01_auth_links_stats.sql.postgres +20 -0
  926. synapse/storage/schema/main/delta/84/02_auth_links_index.sql +16 -0
  927. synapse/storage/schema/main/delta/84/03_auth_links_analyze.sql.postgres +16 -0
  928. synapse/storage/schema/main/delta/84/04_access_token_index.sql +15 -0
  929. synapse/storage/schema/main/delta/85/01_add_suspended.sql +14 -0
  930. synapse/storage/schema/main/delta/85/02_add_instance_names.sql +27 -0
  931. synapse/storage/schema/main/delta/85/03_new_sequences.sql.postgres +54 -0
  932. synapse/storage/schema/main/delta/85/04_cleanup_device_federation_outbox.sql +15 -0
  933. synapse/storage/schema/main/delta/85/05_add_instance_names_converted_pos.sql +16 -0
  934. synapse/storage/schema/main/delta/85/06_add_room_reports.sql +20 -0
  935. synapse/storage/schema/main/delta/86/01_authenticate_media.sql +15 -0
  936. synapse/storage/schema/main/delta/86/02_receipts_event_id_index.sql +15 -0
  937. synapse/storage/schema/main/delta/87/01_sliding_sync_memberships.sql +169 -0
  938. synapse/storage/schema/main/delta/87/02_per_connection_state.sql +81 -0
  939. synapse/storage/schema/main/delta/87/03_current_state_index.sql +19 -0
  940. synapse/storage/schema/main/delta/88/01_add_delayed_events.sql +43 -0
  941. synapse/storage/schema/main/delta/88/01_custom_profile_fields.sql +15 -0
  942. synapse/storage/schema/main/delta/88/02_fix_sliding_sync_membership_snapshots_forgotten_column.sql +21 -0
  943. synapse/storage/schema/main/delta/88/03_add_otk_ts_added_index.sql +18 -0
  944. synapse/storage/schema/main/delta/88/04_current_state_delta_index.sql +18 -0
  945. synapse/storage/schema/main/delta/88/05_drop_old_otks.sql.postgres +19 -0
  946. synapse/storage/schema/main/delta/88/05_drop_old_otks.sql.sqlite +19 -0
  947. synapse/storage/schema/main/delta/88/05_sliding_sync_room_config_index.sql +20 -0
  948. synapse/storage/schema/main/delta/88/06_events_received_ts_index.sql +17 -0
  949. synapse/storage/schema/main/delta/89/01_sliding_sync_membership_snapshot_index.sql +15 -0
  950. synapse/storage/schema/main/delta/90/01_add_column_participant_room_memberships_table.sql +16 -0
  951. synapse/storage/schema/main/delta/91/01_media_hash.sql +28 -0
  952. synapse/storage/schema/main/delta/92/01_remove_trigger.sql.postgres +16 -0
  953. synapse/storage/schema/main/delta/92/01_remove_trigger.sql.sqlite +16 -0
  954. synapse/storage/schema/main/delta/92/02_remove_populate_participant_bg_update.sql +17 -0
  955. synapse/storage/schema/main/delta/92/04_ss_membership_snapshot_idx.sql +16 -0
  956. synapse/storage/schema/main/delta/92/04_thread_subscriptions.sql +59 -0
  957. synapse/storage/schema/main/delta/92/04_thread_subscriptions_seq.sql.postgres +19 -0
  958. synapse/storage/schema/main/delta/92/05_fixup_max_depth_cap.sql +17 -0
  959. synapse/storage/schema/main/delta/92/05_thread_subscriptions_comments.sql.postgres +18 -0
  960. synapse/storage/schema/main/delta/92/06_device_federation_inbox_index.sql +16 -0
  961. synapse/storage/schema/main/delta/92/06_threads_last_sent_stream_ordering_comments.sql.postgres +24 -0
  962. synapse/storage/schema/main/delta/92/07_add_user_reports.sql +22 -0
  963. synapse/storage/schema/main/delta/92/07_event_txn_id_device_id_txn_id2.sql +15 -0
  964. synapse/storage/schema/main/delta/92/08_room_ban_redactions.sql +21 -0
  965. synapse/storage/schema/main/delta/92/08_thread_subscriptions_seq_fixup.sql.postgres +19 -0
  966. synapse/storage/schema/main/delta/92/09_thread_subscriptions_update.sql +20 -0
  967. synapse/storage/schema/main/delta/92/09_thread_subscriptions_update.sql.postgres +18 -0
  968. synapse/storage/schema/main/delta/93/01_add_delayed_events.sql +15 -0
  969. synapse/storage/schema/main/full_schemas/72/full.sql.postgres +1344 -0
  970. synapse/storage/schema/main/full_schemas/72/full.sql.sqlite +646 -0
  971. synapse/storage/schema/state/delta/23/drop_state_index.sql +35 -0
  972. synapse/storage/schema/state/delta/32/remove_state_indices.sql +38 -0
  973. synapse/storage/schema/state/delta/35/add_state_index.sql +36 -0
  974. synapse/storage/schema/state/delta/35/state.sql +41 -0
  975. synapse/storage/schema/state/delta/35/state_dedupe.sql +36 -0
  976. synapse/storage/schema/state/delta/47/state_group_seq.py +38 -0
  977. synapse/storage/schema/state/delta/56/state_group_room_idx.sql +36 -0
  978. synapse/storage/schema/state/delta/61/02state_groups_state_n_distinct.sql.postgres +34 -0
  979. synapse/storage/schema/state/delta/70/08_state_group_edges_unique.sql +36 -0
  980. synapse/storage/schema/state/delta/89/01_state_groups_deletion.sql +39 -0
  981. synapse/storage/schema/state/delta/90/02_delete_unreferenced_state_groups.sql +16 -0
  982. synapse/storage/schema/state/delta/90/03_remove_old_deletion_bg_update.sql +15 -0
  983. synapse/storage/schema/state/full_schemas/72/full.sql.postgres +30 -0
  984. synapse/storage/schema/state/full_schemas/72/full.sql.sqlite +20 -0
  985. synapse/storage/types.py +183 -0
  986. synapse/storage/util/__init__.py +20 -0
  987. synapse/storage/util/id_generators.py +928 -0
  988. synapse/storage/util/partial_state_events_tracker.py +194 -0
  989. synapse/storage/util/sequence.py +315 -0
  990. synapse/streams/__init__.py +43 -0
  991. synapse/streams/config.py +91 -0
  992. synapse/streams/events.py +203 -0
  993. synapse/synapse_rust/__init__.pyi +3 -0
  994. synapse/synapse_rust/acl.pyi +20 -0
  995. synapse/synapse_rust/events.pyi +136 -0
  996. synapse/synapse_rust/http_client.pyi +32 -0
  997. synapse/synapse_rust/push.pyi +86 -0
  998. synapse/synapse_rust/rendezvous.pyi +30 -0
  999. synapse/synapse_rust/segmenter.pyi +1 -0
  1000. synapse/synapse_rust.abi3.so +0 -0
  1001. synapse/types/__init__.py +1600 -0
  1002. synapse/types/handlers/__init__.py +93 -0
  1003. synapse/types/handlers/policy_server.py +16 -0
  1004. synapse/types/handlers/sliding_sync.py +908 -0
  1005. synapse/types/rest/__init__.py +25 -0
  1006. synapse/types/rest/client/__init__.py +413 -0
  1007. synapse/types/state.py +634 -0
  1008. synapse/types/storage/__init__.py +66 -0
  1009. synapse/util/__init__.py +169 -0
  1010. synapse/util/async_helpers.py +1045 -0
  1011. synapse/util/background_queue.py +142 -0
  1012. synapse/util/batching_queue.py +202 -0
  1013. synapse/util/caches/__init__.py +300 -0
  1014. synapse/util/caches/cached_call.py +143 -0
  1015. synapse/util/caches/deferred_cache.py +530 -0
  1016. synapse/util/caches/descriptors.py +692 -0
  1017. synapse/util/caches/dictionary_cache.py +346 -0
  1018. synapse/util/caches/expiringcache.py +249 -0
  1019. synapse/util/caches/lrucache.py +975 -0
  1020. synapse/util/caches/response_cache.py +322 -0
  1021. synapse/util/caches/stream_change_cache.py +370 -0
  1022. synapse/util/caches/treecache.py +189 -0
  1023. synapse/util/caches/ttlcache.py +197 -0
  1024. synapse/util/cancellation.py +63 -0
  1025. synapse/util/check_dependencies.py +335 -0
  1026. synapse/util/clock.py +567 -0
  1027. synapse/util/constants.py +22 -0
  1028. synapse/util/daemonize.py +165 -0
  1029. synapse/util/distributor.py +157 -0
  1030. synapse/util/events.py +134 -0
  1031. synapse/util/file_consumer.py +164 -0
  1032. synapse/util/frozenutils.py +57 -0
  1033. synapse/util/gai_resolver.py +178 -0
  1034. synapse/util/hash.py +38 -0
  1035. synapse/util/httpresourcetree.py +108 -0
  1036. synapse/util/iterutils.py +189 -0
  1037. synapse/util/json.py +56 -0
  1038. synapse/util/linked_list.py +156 -0
  1039. synapse/util/logcontext.py +46 -0
  1040. synapse/util/logformatter.py +28 -0
  1041. synapse/util/macaroons.py +325 -0
  1042. synapse/util/manhole.py +191 -0
  1043. synapse/util/metrics.py +339 -0
  1044. synapse/util/module_loader.py +116 -0
  1045. synapse/util/msisdn.py +51 -0
  1046. synapse/util/patch_inline_callbacks.py +250 -0
  1047. synapse/util/pydantic_models.py +63 -0
  1048. synapse/util/ratelimitutils.py +419 -0
  1049. synapse/util/retryutils.py +339 -0
  1050. synapse/util/rlimit.py +42 -0
  1051. synapse/util/rust.py +133 -0
  1052. synapse/util/sentinel.py +21 -0
  1053. synapse/util/stringutils.py +293 -0
  1054. synapse/util/task_scheduler.py +493 -0
  1055. synapse/util/templates.py +126 -0
  1056. synapse/util/threepids.py +123 -0
  1057. synapse/util/wheel_timer.py +112 -0
  1058. synapse/visibility.py +835 -0
@@ -0,0 +1,1199 @@
1
+ #
2
+ # This file is licensed under the Affero General Public License (AGPL) version 3.
3
+ #
4
+ # Copyright 2020 Sorunome
5
+ # Copyright 2014-2022 The Matrix.org Foundation C.I.C.
6
+ # Copyright (C) 2023 New Vector, Ltd
7
+ #
8
+ # This program is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU Affero General Public License as
10
+ # published by the Free Software Foundation, either version 3 of the
11
+ # License, or (at your option) any later version.
12
+ #
13
+ # See the GNU Affero General Public License for more details:
14
+ # <https://www.gnu.org/licenses/agpl-3.0.html>.
15
+ #
16
+ # Originally licensed under the Apache License, Version 2.0:
17
+ # <http://www.apache.org/licenses/LICENSE-2.0>.
18
+ #
19
+ # [This file includes modifications made by New Vector Limited]
20
+ #
21
+ #
22
+
23
+ import logging
24
+ import urllib
25
+ from typing import (
26
+ TYPE_CHECKING,
27
+ Any,
28
+ BinaryIO,
29
+ Callable,
30
+ Collection,
31
+ Generator,
32
+ Iterable,
33
+ Mapping,
34
+ )
35
+
36
+ import attr
37
+ import ijson
38
+
39
+ from synapse.api.constants import Direction, Membership
40
+ from synapse.api.errors import Codes, HttpResponseException, SynapseError
41
+ from synapse.api.ratelimiting import Ratelimiter
42
+ from synapse.api.room_versions import RoomVersion
43
+ from synapse.api.urls import (
44
+ FEDERATION_UNSTABLE_PREFIX,
45
+ FEDERATION_V1_PREFIX,
46
+ FEDERATION_V2_PREFIX,
47
+ )
48
+ from synapse.events import EventBase, make_event_from_dict
49
+ from synapse.federation.units import Transaction
50
+ from synapse.http.matrixfederationclient import ByteParser, LegacyJsonSendParser
51
+ from synapse.http.types import QueryParams
52
+ from synapse.types import JsonDict, UserID
53
+ from synapse.util import ExceptionBundle
54
+
55
+ if TYPE_CHECKING:
56
+ from synapse.app.homeserver import HomeServer
57
+
58
+ logger = logging.getLogger(__name__)
59
+
60
+
61
+ class TransportLayerClient:
62
+ """Sends federation HTTP requests to other servers"""
63
+
64
+ def __init__(self, hs: "HomeServer"):
65
+ self.client = hs.get_federation_http_client()
66
+ self._is_mine_server_name = hs.is_mine_server_name
67
+
68
+ def shutdown(self) -> None:
69
+ self.client.shutdown()
70
+
71
+ async def get_room_state_ids(
72
+ self, destination: str, room_id: str, event_id: str
73
+ ) -> JsonDict:
74
+ """Requests the IDs of all state for a given room at the given event.
75
+
76
+ Args:
77
+ destination: The host name of the remote homeserver we want
78
+ to get the state from.
79
+ room_id: the room we want the state of
80
+ event_id: The event we want the context at.
81
+
82
+ Returns:
83
+ Results in a dict received from the remote homeserver.
84
+ """
85
+ logger.debug("get_room_state_ids dest=%s, room=%s", destination, room_id)
86
+
87
+ path = _create_v1_path("/state_ids/%s", room_id)
88
+ return await self.client.get_json(
89
+ destination,
90
+ path=path,
91
+ args={"event_id": event_id},
92
+ try_trailing_slash_on_400=True,
93
+ )
94
+
95
+ async def get_room_state(
96
+ self, room_version: RoomVersion, destination: str, room_id: str, event_id: str
97
+ ) -> "StateRequestResponse":
98
+ """Requests the full state for a given room at the given event.
99
+
100
+ Args:
101
+ room_version: the version of the room (required to build the event objects)
102
+ destination: The host name of the remote homeserver we want
103
+ to get the state from.
104
+ room_id: the room we want the state of
105
+ event_id: The event we want the context at.
106
+
107
+ Returns:
108
+ Results in a dict received from the remote homeserver.
109
+ """
110
+ path = _create_v1_path("/state/%s", room_id)
111
+ return await self.client.get_json(
112
+ destination,
113
+ path=path,
114
+ args={"event_id": event_id},
115
+ # This can take a looooooong time for large rooms. Give this a generous
116
+ # timeout of 10 minutes to avoid the partial state resync timing out early
117
+ # and trying a bunch of servers who haven't seen our join yet.
118
+ timeout=600_000,
119
+ parser=_StateParser(room_version),
120
+ )
121
+
122
+ async def get_event(
123
+ self, destination: str, event_id: str, timeout: int | None = None
124
+ ) -> JsonDict:
125
+ """Requests the pdu with give id and origin from the given server.
126
+
127
+ Args:
128
+ destination: The host name of the remote homeserver we want
129
+ to get the state from.
130
+ event_id: The id of the event being requested.
131
+ timeout: How long to try (in ms) the destination for before
132
+ giving up. None indicates no timeout.
133
+
134
+ Returns:
135
+ Results in a dict received from the remote homeserver.
136
+ """
137
+ logger.debug("get_pdu dest=%s, event_id=%s", destination, event_id)
138
+
139
+ path = _create_v1_path("/event/%s", event_id)
140
+ return await self.client.get_json(
141
+ destination, path=path, timeout=timeout, try_trailing_slash_on_400=True
142
+ )
143
+
144
+ async def get_policy_recommendation_for_pdu(
145
+ self, destination: str, event: EventBase, timeout: int | None = None
146
+ ) -> JsonDict:
147
+ """Requests the policy recommendation for the given pdu from the given policy server.
148
+
149
+ Args:
150
+ destination: The host name of the remote homeserver checking the event.
151
+ event: The event to check.
152
+ timeout: How long to try (in ms) the destination for before giving up.
153
+ None indicates no timeout.
154
+
155
+ Returns:
156
+ The full recommendation object from the remote server.
157
+ """
158
+ logger.debug(
159
+ "get_policy_recommendation_for_pdu dest=%s, event_id=%s",
160
+ destination,
161
+ event.event_id,
162
+ )
163
+ return await self.client.post_json(
164
+ destination=destination,
165
+ path=f"/_matrix/policy/unstable/org.matrix.msc4284/event/{event.event_id}/check",
166
+ data=event.get_pdu_json(),
167
+ ignore_backoff=True,
168
+ timeout=timeout,
169
+ )
170
+
171
+ async def ask_policy_server_to_sign_event(
172
+ self, destination: str, event: EventBase, timeout: int | None = None
173
+ ) -> JsonDict:
174
+ """Requests that the destination server (typically a policy server)
175
+ sign the event as not spam.
176
+
177
+ If the policy server could not be contacted or the policy server
178
+ returned an error, this raises that error.
179
+
180
+ Args:
181
+ destination: The host name of the policy server / homeserver.
182
+ event: The event to sign.
183
+ timeout: How long to try (in ms) the destination for before giving up.
184
+ None indicates no timeout.
185
+ Returns:
186
+ The signature from the policy server, structured in the same was as the 'signatures'
187
+ JSON in the event e.g { "$policy_server_via_domain" : { "ed25519:policy_server": "signature_base64" }}
188
+ """
189
+ return await self.client.post_json(
190
+ destination=destination,
191
+ path="/_matrix/policy/unstable/org.matrix.msc4284/sign",
192
+ data=event.get_pdu_json(),
193
+ ignore_backoff=True,
194
+ timeout=timeout,
195
+ )
196
+
197
+ async def backfill(
198
+ self, destination: str, room_id: str, event_tuples: Collection[str], limit: int
199
+ ) -> JsonDict | list | None:
200
+ """Requests `limit` previous PDUs in a given context before list of
201
+ PDUs.
202
+
203
+ Args:
204
+ destination
205
+ room_id
206
+ event_tuples:
207
+ Must be a Collection that is falsy when empty.
208
+ (Iterable is not enough here!)
209
+ limit
210
+
211
+ Returns:
212
+ Results in a dict received from the remote homeserver.
213
+ """
214
+ logger.debug(
215
+ "backfill dest=%s, room_id=%s, event_tuples=%r, limit=%s",
216
+ destination,
217
+ room_id,
218
+ event_tuples,
219
+ str(limit),
220
+ )
221
+
222
+ if not event_tuples:
223
+ # TODO: raise?
224
+ return None
225
+
226
+ path = _create_v1_path("/backfill/%s", room_id)
227
+
228
+ args = {"v": event_tuples, "limit": [str(limit)]}
229
+
230
+ return await self.client.get_json(
231
+ destination, path=path, args=args, try_trailing_slash_on_400=True
232
+ )
233
+
234
+ async def timestamp_to_event(
235
+ self, destination: str, room_id: str, timestamp: int, direction: Direction
236
+ ) -> JsonDict | list:
237
+ """
238
+ Calls a remote federating server at `destination` asking for their
239
+ closest event to the given timestamp in the given direction.
240
+
241
+ Args:
242
+ destination: Domain name of the remote homeserver
243
+ room_id: Room to fetch the event from
244
+ timestamp: The point in time (inclusive) we should navigate from in
245
+ the given direction to find the closest event.
246
+ direction: indicates whether we should navigate forward
247
+ or backward from the given timestamp to find the closest event.
248
+
249
+ Returns:
250
+ Response dict received from the remote homeserver.
251
+
252
+ Raises:
253
+ Various exceptions when the request fails
254
+ """
255
+ path = _create_v1_path(
256
+ "/timestamp_to_event/%s",
257
+ room_id,
258
+ )
259
+
260
+ args = {"ts": [str(timestamp)], "dir": [direction.value]}
261
+
262
+ remote_response = await self.client.get_json(
263
+ destination, path=path, args=args, try_trailing_slash_on_400=True
264
+ )
265
+
266
+ return remote_response
267
+
268
+ async def send_transaction(
269
+ self,
270
+ transaction: Transaction,
271
+ json_data_callback: Callable[[], JsonDict] | None = None,
272
+ ) -> JsonDict:
273
+ """Sends the given Transaction to its destination
274
+
275
+ Args:
276
+ transaction
277
+
278
+ Returns:
279
+ Succeeds when we get a 2xx HTTP response. The result
280
+ will be the decoded JSON body.
281
+
282
+ Fails with ``HTTPRequestException`` if we get an HTTP response
283
+ code >= 300.
284
+
285
+ Fails with ``NotRetryingDestination`` if we are not yet ready
286
+ to retry this server.
287
+
288
+ Fails with ``FederationDeniedError`` if this destination
289
+ is not on our federation whitelist
290
+ """
291
+ logger.debug(
292
+ "send_data dest=%s, txid=%s",
293
+ transaction.destination,
294
+ transaction.transaction_id,
295
+ )
296
+
297
+ if self._is_mine_server_name(transaction.destination):
298
+ raise RuntimeError("Transport layer cannot send to itself!")
299
+
300
+ # FIXME: This is only used by the tests. The actual json sent is
301
+ # generated by the json_data_callback.
302
+ json_data = transaction.get_dict()
303
+
304
+ path = _create_v1_path("/send/%s", transaction.transaction_id)
305
+
306
+ return await self.client.put_json(
307
+ transaction.destination,
308
+ path=path,
309
+ data=json_data,
310
+ json_data_callback=json_data_callback,
311
+ long_retries=True,
312
+ try_trailing_slash_on_400=True,
313
+ # Sending a transaction should always succeed, if it doesn't
314
+ # then something is wrong and we should backoff.
315
+ backoff_on_all_error_codes=True,
316
+ )
317
+
318
+ async def make_query(
319
+ self,
320
+ destination: str,
321
+ query_type: str,
322
+ args: QueryParams,
323
+ retry_on_dns_fail: bool,
324
+ ignore_backoff: bool = False,
325
+ prefix: str = FEDERATION_V1_PREFIX,
326
+ ) -> JsonDict:
327
+ path = _create_path(prefix, "/query/%s", query_type)
328
+
329
+ return await self.client.get_json(
330
+ destination=destination,
331
+ path=path,
332
+ args=args,
333
+ retry_on_dns_fail=retry_on_dns_fail,
334
+ timeout=10000,
335
+ ignore_backoff=ignore_backoff,
336
+ )
337
+
338
+ async def make_membership_event(
339
+ self,
340
+ destination: str,
341
+ room_id: str,
342
+ user_id: str,
343
+ membership: str,
344
+ params: Mapping[str, str | Iterable[str]] | None,
345
+ ) -> JsonDict:
346
+ """Asks a remote server to build and sign us a membership event
347
+
348
+ Note that this does not append any events to any graphs.
349
+
350
+ Args:
351
+ destination: address of remote homeserver
352
+ room_id: room to join/leave
353
+ user_id: user to be joined/left
354
+ membership: one of join/leave
355
+ params: Query parameters to include in the request.
356
+
357
+ Returns:
358
+ Succeeds when we get a 2xx HTTP response. The result
359
+ will be the decoded JSON body (ie, the new event).
360
+
361
+ Fails with ``HTTPRequestException`` if we get an HTTP response
362
+ code >= 300.
363
+
364
+ Fails with ``NotRetryingDestination`` if we are not yet ready
365
+ to retry this server.
366
+
367
+ Fails with ``FederationDeniedError`` if the remote destination
368
+ is not in our federation whitelist
369
+ """
370
+ valid_memberships = {Membership.JOIN, Membership.LEAVE, Membership.KNOCK}
371
+
372
+ if membership not in valid_memberships:
373
+ raise RuntimeError(
374
+ "make_membership_event called with membership='%s', must be one of %s"
375
+ % (membership, ",".join(valid_memberships))
376
+ )
377
+ path = _create_v1_path("/make_%s/%s/%s", membership, room_id, user_id)
378
+
379
+ ignore_backoff = False
380
+ retry_on_dns_fail = False
381
+
382
+ if membership == Membership.LEAVE:
383
+ # we particularly want to do our best to send leave events. The
384
+ # problem is that if it fails, we won't retry it later, so if the
385
+ # remote server was just having a momentary blip, the room will be
386
+ # out of sync.
387
+ ignore_backoff = True
388
+ retry_on_dns_fail = True
389
+
390
+ return await self.client.get_json(
391
+ destination=destination,
392
+ path=path,
393
+ args=params,
394
+ retry_on_dns_fail=retry_on_dns_fail,
395
+ timeout=20000,
396
+ ignore_backoff=ignore_backoff,
397
+ )
398
+
399
+ async def send_join_v1(
400
+ self,
401
+ room_version: RoomVersion,
402
+ destination: str,
403
+ room_id: str,
404
+ event_id: str,
405
+ content: JsonDict,
406
+ ) -> "SendJoinResponse":
407
+ path = _create_v1_path("/send_join/%s/%s", room_id, event_id)
408
+
409
+ return await self.client.put_json(
410
+ destination=destination,
411
+ path=path,
412
+ data=content,
413
+ parser=SendJoinParser(room_version, v1_api=True),
414
+ )
415
+
416
+ async def send_join_v2(
417
+ self,
418
+ room_version: RoomVersion,
419
+ destination: str,
420
+ room_id: str,
421
+ event_id: str,
422
+ content: JsonDict,
423
+ omit_members: bool,
424
+ ) -> "SendJoinResponse":
425
+ path = _create_v2_path("/send_join/%s/%s", room_id, event_id)
426
+ query_params: dict[str, str] = {}
427
+ # lazy-load state on join
428
+ query_params["omit_members"] = "true" if omit_members else "false"
429
+
430
+ return await self.client.put_json(
431
+ destination=destination,
432
+ path=path,
433
+ args=query_params,
434
+ data=content,
435
+ parser=SendJoinParser(room_version, v1_api=False),
436
+ )
437
+
438
+ async def send_leave_v1(
439
+ self, destination: str, room_id: str, event_id: str, content: JsonDict
440
+ ) -> tuple[int, JsonDict]:
441
+ path = _create_v1_path("/send_leave/%s/%s", room_id, event_id)
442
+
443
+ return await self.client.put_json(
444
+ destination=destination,
445
+ path=path,
446
+ data=content,
447
+ # we want to do our best to send this through. The problem is
448
+ # that if it fails, we won't retry it later, so if the remote
449
+ # server was just having a momentary blip, the room will be out of
450
+ # sync.
451
+ ignore_backoff=True,
452
+ parser=LegacyJsonSendParser(),
453
+ )
454
+
455
+ async def send_leave_v2(
456
+ self, destination: str, room_id: str, event_id: str, content: JsonDict
457
+ ) -> JsonDict:
458
+ path = _create_v2_path("/send_leave/%s/%s", room_id, event_id)
459
+
460
+ return await self.client.put_json(
461
+ destination=destination,
462
+ path=path,
463
+ data=content,
464
+ # we want to do our best to send this through. The problem is
465
+ # that if it fails, we won't retry it later, so if the remote
466
+ # server was just having a momentary blip, the room will be out of
467
+ # sync.
468
+ ignore_backoff=True,
469
+ )
470
+
471
+ async def send_knock_v1(
472
+ self,
473
+ destination: str,
474
+ room_id: str,
475
+ event_id: str,
476
+ content: JsonDict,
477
+ ) -> JsonDict:
478
+ """
479
+ Sends a signed knock membership event to a remote server. This is the second
480
+ step for knocking after make_knock.
481
+
482
+ Args:
483
+ destination: The remote homeserver.
484
+ room_id: The ID of the room to knock on.
485
+ event_id: The ID of the knock membership event that we're sending.
486
+ content: The knock membership event that we're sending. Note that this is not the
487
+ `content` field of the membership event, but the entire signed membership event
488
+ itself represented as a JSON dict.
489
+
490
+ Returns:
491
+ The remote homeserver can optionally return some state from the room. The response
492
+ dictionary is in the form:
493
+
494
+ {"knock_room_state": [<state event dict>, ...]}
495
+
496
+ The list of state events may be empty.
497
+ """
498
+ path = _create_v1_path("/send_knock/%s/%s", room_id, event_id)
499
+
500
+ return await self.client.put_json(
501
+ destination=destination, path=path, data=content
502
+ )
503
+
504
+ async def send_invite_v1(
505
+ self, destination: str, room_id: str, event_id: str, content: JsonDict
506
+ ) -> tuple[int, JsonDict]:
507
+ path = _create_v1_path("/invite/%s/%s", room_id, event_id)
508
+
509
+ return await self.client.put_json(
510
+ destination=destination,
511
+ path=path,
512
+ data=content,
513
+ ignore_backoff=True,
514
+ parser=LegacyJsonSendParser(),
515
+ )
516
+
517
+ async def send_invite_v2(
518
+ self, destination: str, room_id: str, event_id: str, content: JsonDict
519
+ ) -> JsonDict:
520
+ path = _create_v2_path("/invite/%s/%s", room_id, event_id)
521
+
522
+ return await self.client.put_json(
523
+ destination=destination, path=path, data=content, ignore_backoff=True
524
+ )
525
+
526
+ async def get_public_rooms(
527
+ self,
528
+ remote_server: str,
529
+ limit: int | None = None,
530
+ since_token: str | None = None,
531
+ search_filter: dict | None = None,
532
+ include_all_networks: bool = False,
533
+ third_party_instance_id: str | None = None,
534
+ ) -> JsonDict:
535
+ """Get the list of public rooms from a remote homeserver
536
+
537
+ See synapse.federation.federation_client.FederationClient.get_public_rooms for
538
+ more information.
539
+ """
540
+ path = _create_v1_path("/publicRooms")
541
+
542
+ if search_filter:
543
+ # this uses MSC2197 (Search Filtering over Federation)
544
+ data: dict[str, Any] = {"include_all_networks": include_all_networks}
545
+ if third_party_instance_id:
546
+ data["third_party_instance_id"] = third_party_instance_id
547
+ if limit:
548
+ data["limit"] = limit
549
+ if since_token:
550
+ data["since"] = since_token
551
+
552
+ data["filter"] = search_filter
553
+
554
+ try:
555
+ response = await self.client.post_json(
556
+ destination=remote_server, path=path, data=data, ignore_backoff=True
557
+ )
558
+ except HttpResponseException as e:
559
+ if e.code == 403:
560
+ raise SynapseError(
561
+ 403,
562
+ "You are not allowed to view the public rooms list of %s"
563
+ % (remote_server,),
564
+ errcode=Codes.FORBIDDEN,
565
+ )
566
+ raise
567
+ else:
568
+ args: dict[str, str | Iterable[str]] = {
569
+ "include_all_networks": "true" if include_all_networks else "false"
570
+ }
571
+ if third_party_instance_id:
572
+ args["third_party_instance_id"] = third_party_instance_id
573
+ if limit:
574
+ args["limit"] = str(limit)
575
+ if since_token:
576
+ args["since"] = since_token
577
+
578
+ try:
579
+ response = await self.client.get_json(
580
+ destination=remote_server, path=path, args=args, ignore_backoff=True
581
+ )
582
+ except HttpResponseException as e:
583
+ if e.code == 403:
584
+ raise SynapseError(
585
+ 403,
586
+ "You are not allowed to view the public rooms list of %s"
587
+ % (remote_server,),
588
+ errcode=Codes.FORBIDDEN,
589
+ )
590
+ raise
591
+
592
+ return response
593
+
594
+ async def exchange_third_party_invite(
595
+ self, destination: str, room_id: str, event_dict: JsonDict
596
+ ) -> JsonDict:
597
+ path = _create_v1_path("/exchange_third_party_invite/%s", room_id)
598
+
599
+ return await self.client.put_json(
600
+ destination=destination, path=path, data=event_dict
601
+ )
602
+
603
+ async def get_event_auth(
604
+ self, destination: str, room_id: str, event_id: str
605
+ ) -> JsonDict:
606
+ path = _create_v1_path("/event_auth/%s/%s", room_id, event_id)
607
+
608
+ return await self.client.get_json(destination=destination, path=path)
609
+
610
+ async def query_client_keys(
611
+ self, destination: str, query_content: JsonDict, timeout: int
612
+ ) -> JsonDict:
613
+ """Query the device keys for a list of user ids hosted on a remote
614
+ server.
615
+
616
+ Request:
617
+ {
618
+ "device_keys": {
619
+ "<user_id>": ["<device_id>"]
620
+ }
621
+ }
622
+
623
+ Response:
624
+ {
625
+ "device_keys": {
626
+ "<user_id>": {
627
+ "<device_id>": {...}
628
+ }
629
+ },
630
+ "master_key": {
631
+ "<user_id>": {...}
632
+ }
633
+ },
634
+ "self_signing_key": {
635
+ "<user_id>": {...}
636
+ }
637
+ }
638
+
639
+ Args:
640
+ destination: The server to query.
641
+ query_content: The user ids to query.
642
+ Returns:
643
+ A dict containing device and cross-signing keys.
644
+ """
645
+ path = _create_v1_path("/user/keys/query")
646
+
647
+ return await self.client.post_json(
648
+ destination=destination, path=path, data=query_content, timeout=timeout
649
+ )
650
+
651
+ async def query_user_devices(
652
+ self, destination: str, user_id: str, timeout: int
653
+ ) -> JsonDict:
654
+ """Query the devices for a user id hosted on a remote server.
655
+
656
+ Response:
657
+ {
658
+ "stream_id": "...",
659
+ "devices": [ { ... } ],
660
+ "master_key": {
661
+ "user_id": "<user_id>",
662
+ "usage": [...],
663
+ "keys": {...},
664
+ "signatures": {
665
+ "<user_id>": {...}
666
+ }
667
+ },
668
+ "self_signing_key": {
669
+ "user_id": "<user_id>",
670
+ "usage": [...],
671
+ "keys": {...},
672
+ "signatures": {
673
+ "<user_id>": {...}
674
+ }
675
+ }
676
+ }
677
+
678
+ Args:
679
+ destination: The server to query.
680
+ query_content: The user ids to query.
681
+ Returns:
682
+ A dict containing device and cross-signing keys.
683
+ """
684
+ path = _create_v1_path("/user/devices/%s", user_id)
685
+
686
+ return await self.client.get_json(
687
+ destination=destination, path=path, timeout=timeout
688
+ )
689
+
690
+ async def claim_client_keys(
691
+ self,
692
+ user: UserID,
693
+ destination: str,
694
+ query_content: JsonDict,
695
+ timeout: int | None,
696
+ ) -> JsonDict:
697
+ """Claim one-time keys for a list of devices hosted on a remote server.
698
+
699
+ Request:
700
+ {
701
+ "one_time_keys": {
702
+ "<user_id>": {
703
+ "<device_id>": "<algorithm>"
704
+ }
705
+ }
706
+ }
707
+
708
+ Response:
709
+ {
710
+ "one_time_keys": {
711
+ "<user_id>": {
712
+ "<device_id>": {
713
+ "<algorithm>:<key_id>": <OTK JSON>
714
+ }
715
+ }
716
+ }
717
+ }
718
+
719
+ Args:
720
+ user: the user_id of the requesting user
721
+ destination: The server to query.
722
+ query_content: The user ids to query.
723
+ Returns:
724
+ A dict containing the one-time keys.
725
+ """
726
+
727
+ path = _create_v1_path("/user/keys/claim")
728
+
729
+ return await self.client.post_json(
730
+ destination=destination,
731
+ path=path,
732
+ data={"one_time_keys": query_content},
733
+ timeout=timeout,
734
+ )
735
+
736
+ async def claim_client_keys_unstable(
737
+ self,
738
+ user: UserID,
739
+ destination: str,
740
+ query_content: JsonDict,
741
+ timeout: int | None,
742
+ ) -> JsonDict:
743
+ """Claim one-time keys for a list of devices hosted on a remote server.
744
+
745
+ Request:
746
+ {
747
+ "one_time_keys": {
748
+ "<user_id>": {
749
+ "<device_id>": {"<algorithm>": <count>}
750
+ }
751
+ }
752
+ }
753
+
754
+ Response:
755
+ {
756
+ "one_time_keys": {
757
+ "<user_id>": {
758
+ "<device_id>": {
759
+ "<algorithm>:<key_id>": <OTK JSON>
760
+ }
761
+ }
762
+ }
763
+ }
764
+
765
+ Args:
766
+ user: the user_id of the requesting user
767
+ destination: The server to query.
768
+ query_content: The user ids to query.
769
+ Returns:
770
+ A dict containing the one-time keys.
771
+ """
772
+ path = _create_path(FEDERATION_UNSTABLE_PREFIX, "/user/keys/claim")
773
+
774
+ return await self.client.post_json(
775
+ destination=destination,
776
+ path=path,
777
+ data={"one_time_keys": query_content},
778
+ timeout=timeout,
779
+ )
780
+
781
+ async def get_missing_events(
782
+ self,
783
+ destination: str,
784
+ room_id: str,
785
+ earliest_events: Iterable[str],
786
+ latest_events: Iterable[str],
787
+ limit: int,
788
+ min_depth: int,
789
+ timeout: int,
790
+ ) -> JsonDict:
791
+ path = _create_v1_path("/get_missing_events/%s", room_id)
792
+
793
+ return await self.client.post_json(
794
+ destination=destination,
795
+ path=path,
796
+ data={
797
+ "limit": int(limit),
798
+ "min_depth": int(min_depth),
799
+ "earliest_events": earliest_events,
800
+ "latest_events": latest_events,
801
+ },
802
+ timeout=timeout,
803
+ )
804
+
805
+ async def get_room_complexity(self, destination: str, room_id: str) -> JsonDict:
806
+ """
807
+ Args:
808
+ destination: The remote server
809
+ room_id: The room ID to ask about.
810
+ """
811
+ path = _create_path(FEDERATION_UNSTABLE_PREFIX, "/rooms/%s/complexity", room_id)
812
+
813
+ return await self.client.get_json(destination=destination, path=path)
814
+
815
+ async def get_room_hierarchy(
816
+ self, destination: str, room_id: str, suggested_only: bool
817
+ ) -> JsonDict:
818
+ """
819
+ Args:
820
+ destination: The remote server
821
+ room_id: The room ID to ask about.
822
+ suggested_only: if True, only suggested rooms will be returned
823
+ """
824
+ path = _create_v1_path("/hierarchy/%s", room_id)
825
+
826
+ return await self.client.get_json(
827
+ destination=destination,
828
+ path=path,
829
+ args={"suggested_only": "true" if suggested_only else "false"},
830
+ )
831
+
832
+ async def get_room_hierarchy_unstable(
833
+ self, destination: str, room_id: str, suggested_only: bool
834
+ ) -> JsonDict:
835
+ """
836
+ Args:
837
+ destination: The remote server
838
+ room_id: The room ID to ask about.
839
+ suggested_only: if True, only suggested rooms will be returned
840
+ """
841
+ path = _create_path(
842
+ FEDERATION_UNSTABLE_PREFIX, "/org.matrix.msc2946/hierarchy/%s", room_id
843
+ )
844
+
845
+ return await self.client.get_json(
846
+ destination=destination,
847
+ path=path,
848
+ args={"suggested_only": "true" if suggested_only else "false"},
849
+ )
850
+
851
+ async def get_account_status(
852
+ self, destination: str, user_ids: list[str]
853
+ ) -> JsonDict:
854
+ """
855
+ Args:
856
+ destination: The remote server.
857
+ user_ids: The user ID(s) for which to request account status(es).
858
+ """
859
+ path = _create_path(
860
+ FEDERATION_UNSTABLE_PREFIX, "/org.matrix.msc3720/account_status"
861
+ )
862
+
863
+ return await self.client.post_json(
864
+ destination=destination, path=path, data={"user_ids": user_ids}
865
+ )
866
+
867
+ async def download_media_r0(
868
+ self,
869
+ destination: str,
870
+ media_id: str,
871
+ output_stream: BinaryIO,
872
+ max_size: int,
873
+ max_timeout_ms: int,
874
+ download_ratelimiter: Ratelimiter,
875
+ ip_address: str,
876
+ ) -> tuple[int, dict[bytes, list[bytes]]]:
877
+ path = f"/_matrix/media/r0/download/{destination}/{media_id}"
878
+ return await self.client.get_file(
879
+ destination,
880
+ path,
881
+ output_stream=output_stream,
882
+ max_size=max_size,
883
+ args={
884
+ # tell the remote server to 404 if it doesn't
885
+ # recognise the server_name, to make sure we don't
886
+ # end up with a routing loop.
887
+ "allow_remote": "false",
888
+ "timeout_ms": str(max_timeout_ms),
889
+ },
890
+ download_ratelimiter=download_ratelimiter,
891
+ ip_address=ip_address,
892
+ )
893
+
894
+ async def download_media_v3(
895
+ self,
896
+ destination: str,
897
+ media_id: str,
898
+ output_stream: BinaryIO,
899
+ max_size: int,
900
+ max_timeout_ms: int,
901
+ download_ratelimiter: Ratelimiter,
902
+ ip_address: str,
903
+ ) -> tuple[int, dict[bytes, list[bytes]]]:
904
+ path = f"/_matrix/media/v3/download/{destination}/{media_id}"
905
+ return await self.client.get_file(
906
+ destination,
907
+ path,
908
+ output_stream=output_stream,
909
+ max_size=max_size,
910
+ args={
911
+ # tell the remote server to 404 if it doesn't
912
+ # recognise the server_name, to make sure we don't
913
+ # end up with a routing loop.
914
+ "allow_remote": "false",
915
+ "timeout_ms": str(max_timeout_ms),
916
+ # Matrix 1.7 allows for this to redirect to another URL, this should
917
+ # just be ignored for an old homeserver, so always provide it.
918
+ "allow_redirect": "true",
919
+ },
920
+ follow_redirects=True,
921
+ download_ratelimiter=download_ratelimiter,
922
+ ip_address=ip_address,
923
+ )
924
+
925
+ async def federation_download_media(
926
+ self,
927
+ destination: str,
928
+ media_id: str,
929
+ output_stream: BinaryIO,
930
+ max_size: int,
931
+ max_timeout_ms: int,
932
+ download_ratelimiter: Ratelimiter,
933
+ ip_address: str,
934
+ ) -> tuple[int, dict[bytes, list[bytes]], bytes]:
935
+ path = f"/_matrix/federation/v1/media/download/{media_id}"
936
+ return await self.client.federation_get_file(
937
+ destination,
938
+ path,
939
+ output_stream=output_stream,
940
+ max_size=max_size,
941
+ args={
942
+ "timeout_ms": str(max_timeout_ms),
943
+ },
944
+ download_ratelimiter=download_ratelimiter,
945
+ ip_address=ip_address,
946
+ )
947
+
948
+
949
+ def _create_path(federation_prefix: str, path: str, *args: str) -> str:
950
+ """
951
+ Ensures that all args are url encoded.
952
+ """
953
+ return federation_prefix + path % tuple(urllib.parse.quote(arg, "") for arg in args)
954
+
955
+
956
+ def _create_v1_path(path: str, *args: str) -> str:
957
+ """Creates a path against V1 federation API from the path template and
958
+ args. Ensures that all args are url encoded.
959
+
960
+ Example:
961
+
962
+ _create_v1_path("/event/%s", event_id)
963
+
964
+ Args:
965
+ path: String template for the path
966
+ args: Args to insert into path. Each arg will be url encoded
967
+ """
968
+ return _create_path(FEDERATION_V1_PREFIX, path, *args)
969
+
970
+
971
+ def _create_v2_path(path: str, *args: str) -> str:
972
+ """Creates a path against V2 federation API from the path template and
973
+ args. Ensures that all args are url encoded.
974
+
975
+ Example:
976
+
977
+ _create_v2_path("/event/%s", event_id)
978
+
979
+ Args:
980
+ path: String template for the path
981
+ args: Args to insert into path. Each arg will be url encoded
982
+ """
983
+ return _create_path(FEDERATION_V2_PREFIX, path, *args)
984
+
985
+
986
+ @attr.s(slots=True, auto_attribs=True)
987
+ class SendJoinResponse:
988
+ """The parsed response of a `/send_join` request."""
989
+
990
+ # The list of auth events from the /send_join response.
991
+ auth_events: list[EventBase]
992
+ # The list of state from the /send_join response.
993
+ state: list[EventBase]
994
+ # The raw join event from the /send_join response.
995
+ event_dict: JsonDict
996
+ # The parsed join event from the /send_join response. This will be None if
997
+ # "event" is not included in the response.
998
+ event: EventBase | None = None
999
+
1000
+ # The room state is incomplete
1001
+ members_omitted: bool = False
1002
+
1003
+ # List of servers in the room
1004
+ servers_in_room: list[str] | None = None
1005
+
1006
+
1007
+ @attr.s(slots=True, auto_attribs=True)
1008
+ class StateRequestResponse:
1009
+ """The parsed response of a `/state` request."""
1010
+
1011
+ auth_events: list[EventBase]
1012
+ state: list[EventBase]
1013
+
1014
+
1015
+ @ijson.coroutine
1016
+ def _event_parser(event_dict: JsonDict) -> Generator[None, tuple[str, Any], None]:
1017
+ """Helper function for use with `ijson.kvitems_coro` to parse key-value pairs
1018
+ to add them to a given dictionary.
1019
+ """
1020
+
1021
+ while True:
1022
+ key, value = yield
1023
+ event_dict[key] = value
1024
+
1025
+
1026
+ @ijson.coroutine
1027
+ def _event_list_parser(
1028
+ room_version: RoomVersion, events: list[EventBase]
1029
+ ) -> Generator[None, JsonDict, None]:
1030
+ """Helper function for use with `ijson.items_coro` to parse an array of
1031
+ events and add them to the given list.
1032
+ """
1033
+
1034
+ while True:
1035
+ obj = yield
1036
+ event = make_event_from_dict(obj, room_version)
1037
+ events.append(event)
1038
+
1039
+
1040
+ @ijson.coroutine
1041
+ def _members_omitted_parser(response: SendJoinResponse) -> Generator[None, Any, None]:
1042
+ """Helper function for use with `ijson.items_coro`
1043
+
1044
+ Parses the members_omitted field in send_join responses
1045
+ """
1046
+ while True:
1047
+ val = yield
1048
+ if not isinstance(val, bool):
1049
+ raise TypeError("members_omitted must be a boolean")
1050
+ response.members_omitted = val
1051
+
1052
+
1053
+ @ijson.coroutine
1054
+ def _servers_in_room_parser(response: SendJoinResponse) -> Generator[None, Any, None]:
1055
+ """Helper function for use with `ijson.items_coro`
1056
+
1057
+ Parses the servers_in_room field in send_join responses
1058
+ """
1059
+ while True:
1060
+ val = yield
1061
+ if not isinstance(val, list) or any(not isinstance(x, str) for x in val):
1062
+ raise TypeError("servers_in_room must be a list of strings")
1063
+ response.servers_in_room = val
1064
+
1065
+
1066
+ class SendJoinParser(ByteParser[SendJoinResponse]):
1067
+ """A parser for the response to `/send_join` requests.
1068
+
1069
+ Args:
1070
+ room_version: The version of the room.
1071
+ v1_api: Whether the response is in the v1 format.
1072
+ """
1073
+
1074
+ CONTENT_TYPE = "application/json"
1075
+
1076
+ # /send_join responses can be huge, so we override the size limit here. The response
1077
+ # is parsed in a streaming manner, which helps alleviate the issue of memory
1078
+ # usage a bit.
1079
+ MAX_RESPONSE_SIZE = 500 * 1024 * 1024
1080
+
1081
+ def __init__(self, room_version: RoomVersion, v1_api: bool):
1082
+ self._response = SendJoinResponse([], [], event_dict={})
1083
+ self._room_version = room_version
1084
+ self._coros: list[Generator[None, bytes, None]] = []
1085
+
1086
+ # The V1 API has the shape of `[200, {...}]`, which we handle by
1087
+ # prefixing with `item.*`.
1088
+ prefix = "item." if v1_api else ""
1089
+
1090
+ self._coros = [
1091
+ ijson.items_coro(
1092
+ _event_list_parser(room_version, self._response.state),
1093
+ prefix + "state.item",
1094
+ use_float=True,
1095
+ ),
1096
+ ijson.items_coro(
1097
+ _event_list_parser(room_version, self._response.auth_events),
1098
+ prefix + "auth_chain.item",
1099
+ use_float=True,
1100
+ ),
1101
+ ijson.kvitems_coro(
1102
+ _event_parser(self._response.event_dict),
1103
+ prefix + "event",
1104
+ use_float=True,
1105
+ ),
1106
+ ]
1107
+
1108
+ if not v1_api:
1109
+ self._coros.append(
1110
+ ijson.items_coro(
1111
+ _members_omitted_parser(self._response),
1112
+ "members_omitted",
1113
+ use_float="True",
1114
+ )
1115
+ )
1116
+
1117
+ # Again, stable field name comes last
1118
+ self._coros.append(
1119
+ ijson.items_coro(
1120
+ _servers_in_room_parser(self._response),
1121
+ "servers_in_room",
1122
+ use_float="True",
1123
+ )
1124
+ )
1125
+
1126
+ def write(self, data: bytes) -> int:
1127
+ for c in self._coros:
1128
+ c.send(data)
1129
+
1130
+ return len(data)
1131
+
1132
+ def finish(self) -> SendJoinResponse:
1133
+ _close_coros(self._coros)
1134
+
1135
+ if self._response.event_dict:
1136
+ self._response.event = make_event_from_dict(
1137
+ self._response.event_dict, self._room_version
1138
+ )
1139
+ return self._response
1140
+
1141
+
1142
+ class _StateParser(ByteParser[StateRequestResponse]):
1143
+ """A parser for the response to `/state` requests.
1144
+
1145
+ Args:
1146
+ room_version: The version of the room.
1147
+ """
1148
+
1149
+ CONTENT_TYPE = "application/json"
1150
+
1151
+ # As with /send_join, /state responses can be huge.
1152
+ MAX_RESPONSE_SIZE = 500 * 1024 * 1024
1153
+
1154
+ def __init__(self, room_version: RoomVersion):
1155
+ self._response = StateRequestResponse([], [])
1156
+ self._room_version = room_version
1157
+ self._coros: list[Generator[None, bytes, None]] = [
1158
+ ijson.items_coro(
1159
+ _event_list_parser(room_version, self._response.state),
1160
+ "pdus.item",
1161
+ use_float=True,
1162
+ ),
1163
+ ijson.items_coro(
1164
+ _event_list_parser(room_version, self._response.auth_events),
1165
+ "auth_chain.item",
1166
+ use_float=True,
1167
+ ),
1168
+ ]
1169
+
1170
+ def write(self, data: bytes) -> int:
1171
+ for c in self._coros:
1172
+ c.send(data)
1173
+ return len(data)
1174
+
1175
+ def finish(self) -> StateRequestResponse:
1176
+ _close_coros(self._coros)
1177
+ return self._response
1178
+
1179
+
1180
+ def _close_coros(coros: Iterable[Generator[None, bytes, None]]) -> None:
1181
+ """Close each of the given coroutines.
1182
+
1183
+ Always calls .close() on each coroutine, even if doing so raises an exception.
1184
+ Any exceptions raised are aggregated into an ExceptionBundle.
1185
+
1186
+ :raises ExceptionBundle: if at least one coroutine fails to close.
1187
+ """
1188
+ exceptions = []
1189
+ for c in coros:
1190
+ try:
1191
+ c.close()
1192
+ except Exception as e:
1193
+ exceptions.append(e)
1194
+
1195
+ if exceptions:
1196
+ # raise from the first exception so that the traceback has slightly more context
1197
+ raise ExceptionBundle(
1198
+ f"There were {len(exceptions)} errors closing coroutines", exceptions
1199
+ ) from exceptions[0]