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,908 @@
1
+ #
2
+ # This file is licensed under the Affero General Public License (AGPL) version 3.
3
+ #
4
+ # Copyright (C) 2024 New Vector, Ltd
5
+ #
6
+ # This program is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU Affero General Public License as
8
+ # published by the Free Software Foundation, either version 3 of the
9
+ # License, or (at your option) any later version.
10
+ #
11
+ # See the GNU Affero General Public License for more details:
12
+ # <https://www.gnu.org/licenses/agpl-3.0.html>.
13
+ #
14
+
15
+ import logging
16
+ import typing
17
+ from collections import ChainMap
18
+ from enum import Enum
19
+ from typing import (
20
+ TYPE_CHECKING,
21
+ AbstractSet,
22
+ Any,
23
+ Callable,
24
+ Final,
25
+ Generic,
26
+ Mapping,
27
+ MutableMapping,
28
+ Sequence,
29
+ TypeVar,
30
+ cast,
31
+ )
32
+
33
+ import attr
34
+ from pydantic import ConfigDict
35
+
36
+ from synapse.api.constants import EventTypes
37
+ from synapse.events import EventBase
38
+ from synapse.types import (
39
+ DeviceListUpdates,
40
+ JsonDict,
41
+ JsonMapping,
42
+ MultiWriterStreamToken,
43
+ Requester,
44
+ RoomStreamToken,
45
+ SlidingSyncStreamToken,
46
+ StrCollection,
47
+ StreamToken,
48
+ ThreadSubscriptionsToken,
49
+ UserID,
50
+ )
51
+ from synapse.types.rest.client import SlidingSyncBody
52
+
53
+ if TYPE_CHECKING:
54
+ from synapse.handlers.relations import BundledAggregations
55
+
56
+ logger = logging.getLogger(__name__)
57
+
58
+
59
+ class SlidingSyncConfig(SlidingSyncBody):
60
+ """
61
+ Inherit from `SlidingSyncBody` since we need all of the same fields and add a few
62
+ extra fields that we need in the handler
63
+ """
64
+
65
+ user: UserID
66
+ requester: Requester
67
+ model_config = ConfigDict(
68
+ extra="ignore",
69
+ frozen=True,
70
+ # Allow custom types like `UserID` to be used in the model.
71
+ arbitrary_types_allowed=True,
72
+ )
73
+
74
+
75
+ class OperationType(Enum):
76
+ """
77
+ Represents the operation types in a Sliding Sync window.
78
+
79
+ Attributes:
80
+ SYNC: Sets a range of entries. Clients SHOULD discard what they previous knew about
81
+ entries in this range.
82
+ INSERT: Sets a single entry. If the position is not empty then clients MUST move
83
+ entries to the left or the right depending on where the closest empty space is.
84
+ DELETE: Remove a single entry. Often comes before an INSERT to allow entries to move
85
+ places.
86
+ INVALIDATE: Remove a range of entries. Clients MAY persist the invalidated range for
87
+ offline support, but they should be treated as empty when additional operations
88
+ which concern indexes in the range arrive from the server.
89
+ """
90
+
91
+ SYNC: Final = "SYNC"
92
+ INSERT: Final = "INSERT"
93
+ DELETE: Final = "DELETE"
94
+ INVALIDATE: Final = "INVALIDATE"
95
+
96
+
97
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
98
+ class SlidingSyncResult:
99
+ """
100
+ The Sliding Sync result to be serialized to JSON for a response.
101
+
102
+ Attributes:
103
+ next_pos: The next position token in the sliding window to request (next_batch).
104
+ lists: Sliding window API. A map of list key to list results.
105
+ rooms: Room subscription API. A map of room ID to room results.
106
+ extensions: Extensions API. A map of extension key to extension results.
107
+ """
108
+
109
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
110
+ class RoomResult:
111
+ """
112
+ Attributes:
113
+ name: Room name or calculated room name.
114
+ avatar: Room avatar
115
+ heroes: List of stripped membership events (containing `user_id` and optionally
116
+ `avatar_url` and `displayname`) for the users used to calculate the room name.
117
+ is_dm: Flag to specify whether the room is a direct-message room (most likely
118
+ between two people).
119
+ initial: Flag which is set when this is the first time the server is sending this
120
+ data on this connection. Clients can use this flag to replace or update
121
+ their local state. When there is an update, servers MUST omit this flag
122
+ entirely and NOT send "initial":false as this is wasteful on bandwidth. The
123
+ absence of this flag means 'false'.
124
+ unstable_expanded_timeline: Flag which is set if we're returning more historic
125
+ events due to the timeline limit having increased. See "XXX: Odd behavior"
126
+ comment ing `synapse.handlers.sliding_sync`.
127
+ required_state: The current state of the room
128
+ timeline: Latest events in the room. The last event is the most recent.
129
+ bundled_aggregations: A mapping of event ID to the bundled aggregations for
130
+ the timeline events above. This allows clients to show accurate reaction
131
+ counts (or edits, threads), even if some of the reaction events were skipped
132
+ over in a gappy sync.
133
+ stripped_state: Stripped state events (for rooms where the usre is
134
+ invited/knocked). Same as `rooms.invite.$room_id.invite_state` in sync v2,
135
+ absent on joined/left rooms
136
+ prev_batch: A token that can be passed as a start parameter to the
137
+ `/rooms/<room_id>/messages` API to retrieve earlier messages.
138
+ limited: True if there are more events than `timeline_limit` looking
139
+ backwards from the `response.pos` to the `request.pos`.
140
+ num_live: The number of timeline events which have just occurred and are not historical.
141
+ The last N events are 'live' and should be treated as such. This is mostly
142
+ useful to determine whether a given @mention event should make a noise or not.
143
+ Clients cannot rely solely on the absence of `initial: true` to determine live
144
+ events because if a room not in the sliding window bumps into the window because
145
+ of an @mention it will have `initial: true` yet contain a single live event
146
+ (with potentially other old events in the timeline).
147
+ bump_stamp: The `stream_ordering` of the last event according to the
148
+ `bump_event_types`. This helps clients sort more readily without them
149
+ needing to pull in a bunch of the timeline to determine the last activity.
150
+ `bump_event_types` is a thing because for example, we don't want display
151
+ name changes to mark the room as unread and bump it to the top. For
152
+ encrypted rooms, we just have to consider any activity as a bump because we
153
+ can't see the content and the client has to figure it out for themselves.
154
+ This may not be included if there hasn't been a change.
155
+ joined_count: The number of users with membership of join, including the client's
156
+ own user ID. (same as sync `v2 m.joined_member_count`)
157
+ invited_count: The number of users with membership of invite. (same as sync v2
158
+ `m.invited_member_count`)
159
+ notification_count: The total number of unread notifications for this room. (same
160
+ as sync v2)
161
+ highlight_count: The number of unread notifications for this room with the highlight
162
+ flag set. (same as sync v2)
163
+ """
164
+
165
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
166
+ class StrippedHero:
167
+ user_id: str
168
+ display_name: str | None
169
+ avatar_url: str | None
170
+
171
+ name: str | None
172
+ avatar: str | None
173
+ heroes: list[StrippedHero] | None
174
+ is_dm: bool
175
+ initial: bool
176
+ unstable_expanded_timeline: bool
177
+ # Should be empty for invite/knock rooms with `stripped_state`
178
+ required_state: list[EventBase]
179
+ # Should be empty for invite/knock rooms with `stripped_state`
180
+ timeline_events: list[EventBase]
181
+ bundled_aggregations: dict[str, "BundledAggregations"] | None
182
+ # Optional because it's only relevant to invite/knock rooms
183
+ stripped_state: list[JsonDict]
184
+ # Only optional because it won't be included for invite/knock rooms with `stripped_state`
185
+ prev_batch: StreamToken | None
186
+ # Only optional because it won't be included for invite/knock rooms with `stripped_state`
187
+ limited: bool | None
188
+ # Only optional because it won't be included for invite/knock rooms with `stripped_state`
189
+ num_live: int | None
190
+ bump_stamp: int | None
191
+ joined_count: int | None
192
+ invited_count: int | None
193
+ notification_count: int
194
+ highlight_count: int
195
+
196
+ def __bool__(self) -> bool:
197
+ return (
198
+ # If this is the first time the client is seeing the room, we should not filter it out
199
+ # under any circumstance.
200
+ self.initial
201
+ # We need to let the client know if any of the info has changed
202
+ or self.name is not None
203
+ or self.avatar is not None
204
+ or bool(self.heroes)
205
+ or self.joined_count is not None
206
+ or self.invited_count is not None
207
+ # We need to let the client know if there are any new events
208
+ or bool(self.required_state)
209
+ or bool(self.timeline_events)
210
+ or bool(self.stripped_state)
211
+ )
212
+
213
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
214
+ class SlidingWindowList:
215
+ """
216
+ Attributes:
217
+ count: The total number of entries in the list. Always present if this list
218
+ is.
219
+ ops: The sliding list operations to perform.
220
+ """
221
+
222
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
223
+ class Operation:
224
+ """
225
+ Attributes:
226
+ op: The operation type to perform.
227
+ range: Which index positions are affected by this operation. These are
228
+ both inclusive.
229
+ room_ids: Which room IDs are affected by this operation. These IDs match
230
+ up to the positions in the `range`, so the last room ID in this list
231
+ matches the 9th index. The room data is held in a separate object.
232
+ """
233
+
234
+ op: OperationType
235
+ range: tuple[int, int]
236
+ room_ids: list[str]
237
+
238
+ count: int
239
+ ops: list[Operation]
240
+
241
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
242
+ class Extensions:
243
+ """Responses for extensions
244
+
245
+ Attributes:
246
+ to_device: The to-device extension (MSC3885)
247
+ e2ee: The E2EE device extension (MSC3884)
248
+ """
249
+
250
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
251
+ class ToDeviceExtension:
252
+ """The to-device extension (MSC3885)
253
+
254
+ Attributes:
255
+ next_batch: The to-device stream token the client should use
256
+ to get more results
257
+ events: A list of to-device messages for the client
258
+ """
259
+
260
+ next_batch: str
261
+ events: Sequence[JsonMapping]
262
+
263
+ def __bool__(self) -> bool:
264
+ return bool(self.events)
265
+
266
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
267
+ class E2eeExtension:
268
+ """The E2EE device extension (MSC3884)
269
+
270
+ Attributes:
271
+ device_list_updates: List of user_ids whose devices have changed or left (only
272
+ present on incremental syncs).
273
+ device_one_time_keys_count: Map from key algorithm to the number of
274
+ unclaimed one-time keys currently held on the server for this device. If
275
+ an algorithm is unlisted, the count for that algorithm is assumed to be
276
+ zero. If this entire parameter is missing, the count for all algorithms
277
+ is assumed to be zero.
278
+ device_unused_fallback_key_types: List of unused fallback key algorithms
279
+ for this device.
280
+ """
281
+
282
+ # Only present on incremental syncs
283
+ device_list_updates: DeviceListUpdates | None
284
+ device_one_time_keys_count: Mapping[str, int]
285
+ device_unused_fallback_key_types: Sequence[str]
286
+
287
+ def __bool__(self) -> bool:
288
+ # Note that "signed_curve25519" is always returned in key count responses
289
+ # regardless of whether we uploaded any keys for it. This is necessary until
290
+ # https://github.com/matrix-org/matrix-doc/issues/3298 is fixed.
291
+ #
292
+ # Also related:
293
+ # https://github.com/element-hq/element-android/issues/3725 and
294
+ # https://github.com/matrix-org/synapse/issues/10456
295
+ default_otk = self.device_one_time_keys_count.get("signed_curve25519")
296
+ more_than_default_otk = len(self.device_one_time_keys_count) > 1 or (
297
+ default_otk is not None and default_otk > 0
298
+ )
299
+
300
+ return bool(
301
+ more_than_default_otk
302
+ or self.device_list_updates
303
+ or self.device_unused_fallback_key_types
304
+ )
305
+
306
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
307
+ class AccountDataExtension:
308
+ """The Account Data extension (MSC3959)
309
+
310
+ Attributes:
311
+ global_account_data_map: Mapping from `type` to `content` of global
312
+ account data events.
313
+ account_data_by_room_map: Mapping from room_id to mapping of `type` to
314
+ `content` of room account data events.
315
+ """
316
+
317
+ global_account_data_map: Mapping[str, JsonMapping]
318
+ account_data_by_room_map: Mapping[str, Mapping[str, JsonMapping]]
319
+
320
+ def __bool__(self) -> bool:
321
+ return bool(
322
+ self.global_account_data_map or self.account_data_by_room_map
323
+ )
324
+
325
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
326
+ class ReceiptsExtension:
327
+ """The Receipts extension (MSC3960)
328
+
329
+ Attributes:
330
+ room_id_to_receipt_map: Mapping from room_id to `m.receipt` ephemeral
331
+ event (type, content)
332
+ """
333
+
334
+ room_id_to_receipt_map: Mapping[str, JsonMapping]
335
+
336
+ def __bool__(self) -> bool:
337
+ return bool(self.room_id_to_receipt_map)
338
+
339
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
340
+ class TypingExtension:
341
+ """The Typing Notification extension (MSC3961)
342
+
343
+ Attributes:
344
+ room_id_to_typing_map: Mapping from room_id to `m.typing` ephemeral
345
+ event (type, content)
346
+ """
347
+
348
+ room_id_to_typing_map: Mapping[str, JsonMapping]
349
+
350
+ def __bool__(self) -> bool:
351
+ return bool(self.room_id_to_typing_map)
352
+
353
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
354
+ class ThreadSubscriptionsExtension:
355
+ """The Thread Subscriptions extension (MSC4308)
356
+
357
+ Attributes:
358
+ subscribed: map (room_id -> thread_root_id -> info) of new or changed subscriptions
359
+ unsubscribed: map (room_id -> thread_root_id -> info) of new unsubscriptions
360
+ prev_batch: if present, there is a gap and the client can use this token to backpaginate
361
+ """
362
+
363
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
364
+ class ThreadSubscription:
365
+ # always present when `subscribed`
366
+ automatic: bool | None
367
+
368
+ # the same as our stream_id; useful for clients to resolve
369
+ # race conditions locally
370
+ bump_stamp: int
371
+
372
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
373
+ class ThreadUnsubscription:
374
+ # the same as our stream_id; useful for clients to resolve
375
+ # race conditions locally
376
+ bump_stamp: int
377
+
378
+ # room_id -> event_id (of thread root) -> the subscription change
379
+ subscribed: Mapping[str, Mapping[str, ThreadSubscription]] | None
380
+ # room_id -> event_id (of thread root) -> the unsubscription
381
+ unsubscribed: Mapping[str, Mapping[str, ThreadUnsubscription]] | None
382
+ prev_batch: ThreadSubscriptionsToken | None
383
+
384
+ def __bool__(self) -> bool:
385
+ return (
386
+ bool(self.subscribed)
387
+ or bool(self.unsubscribed)
388
+ or bool(self.prev_batch)
389
+ )
390
+
391
+ to_device: ToDeviceExtension | None = None
392
+ e2ee: E2eeExtension | None = None
393
+ account_data: AccountDataExtension | None = None
394
+ receipts: ReceiptsExtension | None = None
395
+ typing: TypingExtension | None = None
396
+ thread_subscriptions: ThreadSubscriptionsExtension | None = None
397
+
398
+ def __bool__(self) -> bool:
399
+ return bool(
400
+ self.to_device
401
+ or self.e2ee
402
+ or self.account_data
403
+ or self.receipts
404
+ or self.typing
405
+ or self.thread_subscriptions
406
+ )
407
+
408
+ next_pos: SlidingSyncStreamToken
409
+ lists: Mapping[str, SlidingWindowList]
410
+ rooms: dict[str, RoomResult]
411
+ extensions: Extensions
412
+
413
+ def __bool__(self) -> bool:
414
+ """Make the result appear empty if there are no updates. This is used
415
+ to tell if the notifier needs to wait for more events when polling for
416
+ events.
417
+ """
418
+ # We don't include `self.lists` here, as a) `lists` is always non-empty even if
419
+ # there are no changes, and b) since we're sorting rooms by `stream_ordering` of
420
+ # the latest activity, anything that would cause the order to change would end
421
+ # up in `self.rooms` and cause us to send down the change.
422
+ return bool(self.rooms or self.extensions)
423
+
424
+ @staticmethod
425
+ def empty(next_pos: SlidingSyncStreamToken) -> "SlidingSyncResult":
426
+ "Return a new empty result"
427
+ return SlidingSyncResult(
428
+ next_pos=next_pos,
429
+ lists={},
430
+ rooms={},
431
+ extensions=SlidingSyncResult.Extensions(),
432
+ )
433
+
434
+
435
+ class StateValues:
436
+ """
437
+ Understood values of the (type, state_key) tuple in `required_state`.
438
+ """
439
+
440
+ # Include all state events of the given type
441
+ WILDCARD: Final = "*"
442
+ # Lazy-load room membership events (include room membership events for any event
443
+ # `sender` or membership change target in the timeline). We only give special
444
+ # meaning to this value when it's a `state_key`.
445
+ LAZY: Final = "$LAZY"
446
+ # Subsitute with the requester's user ID. Typically used by clients to get
447
+ # the user's membership.
448
+ ME: Final = "$ME"
449
+
450
+
451
+ # We can't freeze this class because we want to update it in place with the
452
+ # de-duplicated data.
453
+ @attr.s(slots=True, auto_attribs=True, frozen=True)
454
+ class RoomSyncConfig:
455
+ """
456
+ Holds the config for what data we should fetch for a room in the sync response.
457
+
458
+ Attributes:
459
+ timeline_limit: The maximum number of events to return in the timeline.
460
+
461
+ required_state_map: Map from state event type to state_keys requested for the
462
+ room. The values are close to `StateKey` but actually use a syntax where you
463
+ can provide `*` wildcard and `$LAZY` for lazy-loading room members.
464
+ """
465
+
466
+ timeline_limit: int
467
+ required_state_map: Mapping[str, AbstractSet[str]]
468
+
469
+ @classmethod
470
+ def from_room_config(
471
+ cls,
472
+ room_params: SlidingSyncConfig.CommonRoomParameters,
473
+ ) -> "RoomSyncConfig":
474
+ """
475
+ Create a `RoomSyncConfig` from a `SlidingSyncList`/`RoomSubscription` config.
476
+
477
+ Args:
478
+ room_params: `SlidingSyncConfig.SlidingSyncList` or `SlidingSyncConfig.RoomSubscription`
479
+ """
480
+ required_state_map: dict[str, set[str]] = {}
481
+ for (
482
+ state_type,
483
+ state_key,
484
+ ) in room_params.required_state:
485
+ # If we already have a wildcard for this specific `state_key`, we don't need
486
+ # to add it since the wildcard already covers it.
487
+ if state_key in required_state_map.get(StateValues.WILDCARD, set()):
488
+ continue
489
+
490
+ # If we already have a wildcard `state_key` for this `state_type`, we don't need
491
+ # to add anything else
492
+ if StateValues.WILDCARD in required_state_map.get(state_type, set()):
493
+ continue
494
+
495
+ # If we're getting wildcards for the `state_type` and `state_key`, that's
496
+ # all that matters so get rid of any other entries
497
+ if state_type == StateValues.WILDCARD and state_key == StateValues.WILDCARD:
498
+ required_state_map = {StateValues.WILDCARD: {StateValues.WILDCARD}}
499
+ # We can break, since we don't need to add anything else
500
+ break
501
+
502
+ # If we're getting a wildcard for the `state_type`, get rid of any other
503
+ # entries with the same `state_key`, since the wildcard will cover it already.
504
+ elif state_type == StateValues.WILDCARD:
505
+ # Get rid of any entries that match the `state_key`
506
+ #
507
+ # Make a copy so we don't run into an error: `dictionary changed size
508
+ # during iteration`, when we remove items
509
+ for (
510
+ existing_state_type,
511
+ existing_state_key_set,
512
+ ) in list(required_state_map.items()):
513
+ # Make a copy so we don't run into an error: `Set changed size during
514
+ # iteration`, when we filter out and remove items
515
+ for existing_state_key in existing_state_key_set.copy():
516
+ if existing_state_key == state_key:
517
+ existing_state_key_set.remove(state_key)
518
+
519
+ # If we've the left the `set()` empty, remove it from the map
520
+ if existing_state_key_set == set():
521
+ required_state_map.pop(existing_state_type, None)
522
+
523
+ # If we're getting a wildcard `state_key`, get rid of any other state_keys
524
+ # for this `state_type` since the wildcard will cover it already.
525
+ if state_key == StateValues.WILDCARD:
526
+ required_state_map[state_type] = {state_key}
527
+ # Otherwise, just add it to the set
528
+ else:
529
+ if required_state_map.get(state_type) is None:
530
+ required_state_map[state_type] = {state_key}
531
+ else:
532
+ required_state_map[state_type].add(state_key)
533
+
534
+ return cls(
535
+ timeline_limit=room_params.timeline_limit,
536
+ required_state_map=required_state_map,
537
+ )
538
+
539
+ def combine_room_sync_config(
540
+ self, other_room_sync_config: "RoomSyncConfig"
541
+ ) -> "RoomSyncConfig":
542
+ """
543
+ Combine this `RoomSyncConfig` with another `RoomSyncConfig` and return the
544
+ superset union of the two.
545
+ """
546
+ timeline_limit = self.timeline_limit
547
+ required_state_map = {
548
+ event_type: set(state_keys)
549
+ for event_type, state_keys in self.required_state_map.items()
550
+ }
551
+
552
+ # Take the highest timeline limit
553
+ if timeline_limit < other_room_sync_config.timeline_limit:
554
+ timeline_limit = other_room_sync_config.timeline_limit
555
+
556
+ # Union the required state
557
+ for (
558
+ state_type,
559
+ state_key_set,
560
+ ) in other_room_sync_config.required_state_map.items():
561
+ # If we already have a wildcard for everything, we don't need to add
562
+ # anything else
563
+ if StateValues.WILDCARD in required_state_map.get(
564
+ StateValues.WILDCARD, set()
565
+ ):
566
+ break
567
+
568
+ # If we already have a wildcard `state_key` for this `state_type`, we don't need
569
+ # to add anything else
570
+ if StateValues.WILDCARD in required_state_map.get(state_type, set()):
571
+ continue
572
+
573
+ # If we're getting wildcards for the `state_type` and `state_key`, that's
574
+ # all that matters so get rid of any other entries
575
+ if (
576
+ state_type == StateValues.WILDCARD
577
+ and StateValues.WILDCARD in state_key_set
578
+ ):
579
+ required_state_map = {state_type: {StateValues.WILDCARD}}
580
+ # We can break, since we don't need to add anything else
581
+ break
582
+
583
+ for state_key in state_key_set:
584
+ # If we already have a wildcard for this specific `state_key`, we don't need
585
+ # to add it since the wildcard already covers it.
586
+ if state_key in required_state_map.get(StateValues.WILDCARD, set()):
587
+ continue
588
+
589
+ # If we're getting a wildcard for the `state_type`, get rid of any other
590
+ # entries with the same `state_key`, since the wildcard will cover it already.
591
+ if state_type == StateValues.WILDCARD:
592
+ # Get rid of any entries that match the `state_key`
593
+ #
594
+ # Make a copy so we don't run into an error: `dictionary changed size
595
+ # during iteration`, when we remove items
596
+ for existing_state_type, existing_state_key_set in list(
597
+ required_state_map.items()
598
+ ):
599
+ # Make a copy so we don't run into an error: `Set changed size during
600
+ # iteration`, when we filter out and remove items
601
+ for existing_state_key in existing_state_key_set.copy():
602
+ if existing_state_key == state_key:
603
+ existing_state_key_set.remove(state_key)
604
+
605
+ # If we've the left the `set()` empty, remove it from the map
606
+ if existing_state_key_set == set():
607
+ required_state_map.pop(existing_state_type, None)
608
+
609
+ # If we're getting a wildcard `state_key`, get rid of any other state_keys
610
+ # for this `state_type` since the wildcard will cover it already.
611
+ if state_key == StateValues.WILDCARD:
612
+ required_state_map[state_type] = {state_key}
613
+ break
614
+ # Otherwise, just add it to the set
615
+ else:
616
+ if required_state_map.get(state_type) is None:
617
+ required_state_map[state_type] = {state_key}
618
+ else:
619
+ required_state_map[state_type].add(state_key)
620
+
621
+ return RoomSyncConfig(timeline_limit, required_state_map)
622
+
623
+ def must_await_full_state(
624
+ self,
625
+ is_mine_id: Callable[[str], bool],
626
+ ) -> bool:
627
+ """
628
+ Check if we have a we're only requesting `required_state` which is completely
629
+ satisfied even with partial state, then we don't need to `await_full_state` before
630
+ we can return it.
631
+
632
+ Also see `StateFilter.must_await_full_state(...)` for comparison
633
+
634
+ Partially-stated rooms should have all state events except for remote membership
635
+ events so if we require a remote membership event anywhere, then we need to
636
+ return `True` (requires full state).
637
+
638
+ Args:
639
+ is_mine_id: a callable which confirms if a given state_key matches a mxid
640
+ of a local user
641
+ """
642
+ wildcard_state_keys = self.required_state_map.get(StateValues.WILDCARD)
643
+ # Requesting *all* state in the room so we have to wait
644
+ if (
645
+ wildcard_state_keys is not None
646
+ and StateValues.WILDCARD in wildcard_state_keys
647
+ ):
648
+ return True
649
+
650
+ # If the wildcards don't refer to remote user IDs, then we don't need to wait
651
+ # for full state.
652
+ if wildcard_state_keys is not None:
653
+ for possible_user_id in wildcard_state_keys:
654
+ if not possible_user_id[0].startswith(UserID.SIGIL):
655
+ # Not a user ID
656
+ continue
657
+
658
+ localpart_hostname = possible_user_id.split(":", 1)
659
+ if len(localpart_hostname) < 2:
660
+ # Not a user ID
661
+ continue
662
+
663
+ if not is_mine_id(possible_user_id):
664
+ return True
665
+
666
+ membership_state_keys = self.required_state_map.get(EventTypes.Member)
667
+ # We aren't requesting any membership events at all so the partial state will
668
+ # cover us.
669
+ if membership_state_keys is None:
670
+ return False
671
+
672
+ # If we're requesting entirely local users, the partial state will cover us.
673
+ for user_id in membership_state_keys:
674
+ if user_id == StateValues.ME:
675
+ continue
676
+ # We're lazy-loading membership so we can just return the state we have.
677
+ # Lazy-loading means we include membership for any event `sender` or
678
+ # membership change target in the timeline but since we had to auth those
679
+ # timeline events, we will have the membership state for them (including
680
+ # from remote senders).
681
+ elif user_id == StateValues.LAZY:
682
+ continue
683
+ elif user_id == StateValues.WILDCARD:
684
+ return False
685
+ elif not is_mine_id(user_id):
686
+ return True
687
+
688
+ # Local users only so the partial state will cover us.
689
+ return False
690
+
691
+
692
+ class HaveSentRoomFlag(Enum):
693
+ """Flag for whether we have sent the room down a sliding sync connection.
694
+
695
+ The valid state changes here are:
696
+ NEVER -> LIVE
697
+ LIVE -> PREVIOUSLY
698
+ PREVIOUSLY -> LIVE
699
+ """
700
+
701
+ # The room has never been sent down (or we have forgotten we have sent it
702
+ # down).
703
+ NEVER = "never"
704
+
705
+ # We have previously sent the room down, but there are updates that we
706
+ # haven't sent down.
707
+ PREVIOUSLY = "previously"
708
+
709
+ # We have sent the room down and the client has received all updates.
710
+ LIVE = "live"
711
+
712
+
713
+ T = TypeVar("T", str, RoomStreamToken, MultiWriterStreamToken, int)
714
+
715
+
716
+ @attr.s(auto_attribs=True, slots=True, frozen=True)
717
+ class HaveSentRoom(Generic[T]):
718
+ """Whether we have sent the room data down a sliding sync connection.
719
+
720
+ We are generic over the type of token used, e.g. `RoomStreamToken` or
721
+ `MultiWriterStreamToken`.
722
+
723
+ Attributes:
724
+ status: Flag of if we have or haven't sent down the room
725
+ last_token: If the flag is `PREVIOUSLY` then this is non-null and
726
+ contains the last stream token of the last updates we sent down
727
+ the room, i.e. we still need to send everything since then to the
728
+ client.
729
+ """
730
+
731
+ status: HaveSentRoomFlag
732
+ last_token: T | None
733
+
734
+ @staticmethod
735
+ def live() -> "HaveSentRoom[T]":
736
+ return HaveSentRoom(HaveSentRoomFlag.LIVE, None)
737
+
738
+ @staticmethod
739
+ def previously(last_token: T) -> "HaveSentRoom[T]":
740
+ """Constructor for `PREVIOUSLY` flag."""
741
+ return HaveSentRoom(HaveSentRoomFlag.PREVIOUSLY, last_token)
742
+
743
+ @staticmethod
744
+ def never() -> "HaveSentRoom[T]":
745
+ # We use a singleton to avoid repeatedly instantiating new `never`
746
+ # values.
747
+ return _HAVE_SENT_ROOM_NEVER
748
+
749
+
750
+ _HAVE_SENT_ROOM_NEVER: HaveSentRoom[Any] = HaveSentRoom(HaveSentRoomFlag.NEVER, None)
751
+
752
+
753
+ @attr.s(auto_attribs=True, slots=True, frozen=True)
754
+ class RoomStatusMap(Generic[T]):
755
+ """For a given stream, e.g. events, records what we have or have not sent
756
+ down for that stream in a given room."""
757
+
758
+ # `room_id` -> `HaveSentRoom`
759
+ _statuses: Mapping[str, HaveSentRoom[T]] = attr.Factory(dict)
760
+
761
+ def have_sent_room(self, room_id: str) -> HaveSentRoom[T]:
762
+ """Return whether we have previously sent the room down"""
763
+ return self._statuses.get(room_id, HaveSentRoom.never())
764
+
765
+ def get_mutable(self) -> "MutableRoomStatusMap[T]":
766
+ """Get a mutable copy of this state."""
767
+ return MutableRoomStatusMap(
768
+ statuses=self._statuses,
769
+ )
770
+
771
+ def copy(self) -> "RoomStatusMap[T]":
772
+ """Make a copy of the class. Useful for converting from a mutable to
773
+ immutable version."""
774
+
775
+ return RoomStatusMap(statuses=dict(self._statuses))
776
+
777
+ def __len__(self) -> int:
778
+ return len(self._statuses)
779
+
780
+
781
+ class MutableRoomStatusMap(RoomStatusMap[T]):
782
+ """A mutable version of `RoomStatusMap`"""
783
+
784
+ # We use a ChainMap here so that we can easily track what has been updated
785
+ # and what hasn't. Note that when we persist the per connection state this
786
+ # will get flattened to a normal dict (via calling `.copy()`)
787
+ _statuses: typing.ChainMap[str, HaveSentRoom[T]]
788
+
789
+ def __init__(
790
+ self,
791
+ statuses: Mapping[str, HaveSentRoom[T]],
792
+ ) -> None:
793
+ # ChainMap requires a mutable mapping, but we're not actually going to
794
+ # mutate it.
795
+ statuses = cast(MutableMapping, statuses)
796
+
797
+ super().__init__(
798
+ statuses=ChainMap({}, statuses),
799
+ )
800
+
801
+ def get_updates(self) -> Mapping[str, HaveSentRoom[T]]:
802
+ """Return only the changes that were made"""
803
+ return self._statuses.maps[0]
804
+
805
+ def record_sent_rooms(self, room_ids: StrCollection) -> None:
806
+ """Record that we have sent these rooms in the response"""
807
+ for room_id in room_ids:
808
+ current_status = self._statuses.get(room_id, HaveSentRoom.never())
809
+ if current_status.status == HaveSentRoomFlag.LIVE:
810
+ continue
811
+
812
+ self._statuses[room_id] = HaveSentRoom.live()
813
+
814
+ def record_unsent_rooms(self, room_ids: StrCollection, from_token: T) -> None:
815
+ """Record that we have not sent these rooms in the response, but there
816
+ have been updates.
817
+ """
818
+ # Whether we add/update the entries for unsent rooms depends on the
819
+ # existing entry:
820
+ # - LIVE: We have previously sent down everything up to
821
+ # `last_room_token, so we update the entry to be `PREVIOUSLY` with
822
+ # `last_room_token`.
823
+ # - PREVIOUSLY: We have previously sent down everything up to *a*
824
+ # given token, so we don't need to update the entry.
825
+ # - NEVER: We have never previously sent down the room, and we haven't
826
+ # sent anything down this time either so we leave it as NEVER.
827
+
828
+ for room_id in room_ids:
829
+ current_status = self._statuses.get(room_id, HaveSentRoom.never())
830
+ if current_status.status != HaveSentRoomFlag.LIVE:
831
+ continue
832
+
833
+ self._statuses[room_id] = HaveSentRoom.previously(from_token)
834
+
835
+
836
+ @attr.s(auto_attribs=True, frozen=True)
837
+ class PerConnectionState:
838
+ """The per-connection state. A snapshot of what we've sent down the
839
+ connection before.
840
+
841
+ Currently, we track whether we've sent down various aspects of a given room
842
+ before.
843
+
844
+ We use the `rooms` field to store the position in the events stream for each
845
+ room that we've previously sent to the client before. On the next request
846
+ that includes the room, we can then send only what's changed since that
847
+ recorded position.
848
+
849
+ Same goes for the `receipts` field so we only need to send the new receipts
850
+ since the last time you made a sync request.
851
+
852
+ Attributes:
853
+ rooms: The status of each room for the events stream.
854
+ receipts: The status of each room for the receipts stream.
855
+ room_configs: Map from room_id to the `RoomSyncConfig` of all
856
+ rooms that we have previously sent down.
857
+ """
858
+
859
+ rooms: RoomStatusMap[RoomStreamToken] = attr.Factory(RoomStatusMap)
860
+ receipts: RoomStatusMap[MultiWriterStreamToken] = attr.Factory(RoomStatusMap)
861
+ account_data: RoomStatusMap[int] = attr.Factory(RoomStatusMap)
862
+
863
+ room_configs: Mapping[str, RoomSyncConfig] = attr.Factory(dict)
864
+
865
+ def get_mutable(self) -> "MutablePerConnectionState":
866
+ """Get a mutable copy of this state."""
867
+ room_configs = cast(MutableMapping[str, RoomSyncConfig], self.room_configs)
868
+
869
+ return MutablePerConnectionState(
870
+ rooms=self.rooms.get_mutable(),
871
+ receipts=self.receipts.get_mutable(),
872
+ account_data=self.account_data.get_mutable(),
873
+ room_configs=ChainMap({}, room_configs),
874
+ )
875
+
876
+ def copy(self) -> "PerConnectionState":
877
+ return PerConnectionState(
878
+ rooms=self.rooms.copy(),
879
+ receipts=self.receipts.copy(),
880
+ account_data=self.account_data.copy(),
881
+ room_configs=dict(self.room_configs),
882
+ )
883
+
884
+ def __len__(self) -> int:
885
+ return len(self.rooms) + len(self.receipts) + len(self.room_configs)
886
+
887
+
888
+ @attr.s(auto_attribs=True)
889
+ class MutablePerConnectionState(PerConnectionState):
890
+ """A mutable version of `PerConnectionState`"""
891
+
892
+ rooms: MutableRoomStatusMap[RoomStreamToken]
893
+ receipts: MutableRoomStatusMap[MultiWriterStreamToken]
894
+ account_data: MutableRoomStatusMap[int]
895
+
896
+ room_configs: typing.ChainMap[str, RoomSyncConfig]
897
+
898
+ def has_updates(self) -> bool:
899
+ return (
900
+ bool(self.rooms.get_updates())
901
+ or bool(self.receipts.get_updates())
902
+ or bool(self.account_data.get_updates())
903
+ or bool(self.get_room_config_updates())
904
+ )
905
+
906
+ def get_room_config_updates(self) -> Mapping[str, RoomSyncConfig]:
907
+ """Get updates to the room sync config"""
908
+ return self.room_configs.maps[0]