matrix-synapse 1.142.0rc3__cp314-abi3-musllinux_1_2_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 (1057) hide show
  1. matrix_synapse-1.142.0rc3.dist-info/AUTHORS.rst +51 -0
  2. matrix_synapse-1.142.0rc3.dist-info/LICENSE-AGPL-3.0 +661 -0
  3. matrix_synapse-1.142.0rc3.dist-info/LICENSE-COMMERCIAL +6 -0
  4. matrix_synapse-1.142.0rc3.dist-info/METADATA +375 -0
  5. matrix_synapse-1.142.0rc3.dist-info/RECORD +1057 -0
  6. matrix_synapse-1.142.0rc3.dist-info/WHEEL +4 -0
  7. matrix_synapse-1.142.0rc3.dist-info/entry_points.txt +14 -0
  8. matrix_synapse.libs/libgcc_s-2d945d6c.so.1 +0 -0
  9. synapse/__init__.py +97 -0
  10. synapse/_scripts/__init__.py +0 -0
  11. synapse/_scripts/export_signing_key.py +109 -0
  12. synapse/_scripts/generate_config.py +83 -0
  13. synapse/_scripts/generate_log_config.py +56 -0
  14. synapse/_scripts/generate_signing_key.py +55 -0
  15. synapse/_scripts/generate_workers_map.py +318 -0
  16. synapse/_scripts/hash_password.py +95 -0
  17. synapse/_scripts/move_remote_media_to_new_store.py +128 -0
  18. synapse/_scripts/register_new_matrix_user.py +374 -0
  19. synapse/_scripts/review_recent_signups.py +212 -0
  20. synapse/_scripts/synapse_port_db.py +1603 -0
  21. synapse/_scripts/synctl.py +365 -0
  22. synapse/_scripts/update_synapse_database.py +130 -0
  23. synapse/api/__init__.py +20 -0
  24. synapse/api/auth/__init__.py +207 -0
  25. synapse/api/auth/base.py +406 -0
  26. synapse/api/auth/internal.py +299 -0
  27. synapse/api/auth/mas.py +457 -0
  28. synapse/api/auth/msc3861_delegated.py +617 -0
  29. synapse/api/auth_blocking.py +144 -0
  30. synapse/api/constants.py +362 -0
  31. synapse/api/errors.py +907 -0
  32. synapse/api/filtering.py +539 -0
  33. synapse/api/presence.py +104 -0
  34. synapse/api/ratelimiting.py +482 -0
  35. synapse/api/room_versions.py +535 -0
  36. synapse/api/urls.py +119 -0
  37. synapse/app/__init__.py +60 -0
  38. synapse/app/_base.py +866 -0
  39. synapse/app/admin_cmd.py +388 -0
  40. synapse/app/appservice.py +30 -0
  41. synapse/app/client_reader.py +30 -0
  42. synapse/app/complement_fork_starter.py +206 -0
  43. synapse/app/event_creator.py +29 -0
  44. synapse/app/federation_reader.py +30 -0
  45. synapse/app/federation_sender.py +30 -0
  46. synapse/app/frontend_proxy.py +30 -0
  47. synapse/app/generic_worker.py +475 -0
  48. synapse/app/homeserver.py +504 -0
  49. synapse/app/media_repository.py +30 -0
  50. synapse/app/phone_stats_home.py +296 -0
  51. synapse/app/pusher.py +30 -0
  52. synapse/app/synchrotron.py +30 -0
  53. synapse/app/user_dir.py +31 -0
  54. synapse/appservice/__init__.py +461 -0
  55. synapse/appservice/api.py +569 -0
  56. synapse/appservice/scheduler.py +567 -0
  57. synapse/config/__init__.py +27 -0
  58. synapse/config/__main__.py +62 -0
  59. synapse/config/_base.py +1108 -0
  60. synapse/config/_base.pyi +217 -0
  61. synapse/config/_util.py +99 -0
  62. synapse/config/account_validity.py +116 -0
  63. synapse/config/api.py +141 -0
  64. synapse/config/appservice.py +210 -0
  65. synapse/config/auth.py +80 -0
  66. synapse/config/auto_accept_invites.py +43 -0
  67. synapse/config/background_updates.py +44 -0
  68. synapse/config/cache.py +231 -0
  69. synapse/config/captcha.py +90 -0
  70. synapse/config/cas.py +116 -0
  71. synapse/config/consent.py +73 -0
  72. synapse/config/database.py +184 -0
  73. synapse/config/emailconfig.py +367 -0
  74. synapse/config/experimental.py +595 -0
  75. synapse/config/federation.py +114 -0
  76. synapse/config/homeserver.py +141 -0
  77. synapse/config/jwt.py +55 -0
  78. synapse/config/key.py +447 -0
  79. synapse/config/logger.py +390 -0
  80. synapse/config/mas.py +191 -0
  81. synapse/config/matrixrtc.py +66 -0
  82. synapse/config/metrics.py +84 -0
  83. synapse/config/modules.py +40 -0
  84. synapse/config/oembed.py +185 -0
  85. synapse/config/oidc.py +509 -0
  86. synapse/config/password_auth_providers.py +82 -0
  87. synapse/config/push.py +64 -0
  88. synapse/config/ratelimiting.py +254 -0
  89. synapse/config/redis.py +74 -0
  90. synapse/config/registration.py +296 -0
  91. synapse/config/repository.py +311 -0
  92. synapse/config/retention.py +162 -0
  93. synapse/config/room.py +88 -0
  94. synapse/config/room_directory.py +165 -0
  95. synapse/config/saml2.py +251 -0
  96. synapse/config/server.py +1170 -0
  97. synapse/config/server_notices.py +84 -0
  98. synapse/config/spam_checker.py +66 -0
  99. synapse/config/sso.py +121 -0
  100. synapse/config/stats.py +54 -0
  101. synapse/config/third_party_event_rules.py +40 -0
  102. synapse/config/tls.py +192 -0
  103. synapse/config/tracer.py +71 -0
  104. synapse/config/user_directory.py +47 -0
  105. synapse/config/user_types.py +44 -0
  106. synapse/config/voip.py +59 -0
  107. synapse/config/workers.py +642 -0
  108. synapse/crypto/__init__.py +20 -0
  109. synapse/crypto/context_factory.py +278 -0
  110. synapse/crypto/event_signing.py +194 -0
  111. synapse/crypto/keyring.py +931 -0
  112. synapse/event_auth.py +1266 -0
  113. synapse/events/__init__.py +668 -0
  114. synapse/events/auto_accept_invites.py +216 -0
  115. synapse/events/builder.py +387 -0
  116. synapse/events/presence_router.py +245 -0
  117. synapse/events/snapshot.py +559 -0
  118. synapse/events/utils.py +928 -0
  119. synapse/events/validator.py +305 -0
  120. synapse/federation/__init__.py +22 -0
  121. synapse/federation/federation_base.py +383 -0
  122. synapse/federation/federation_client.py +2134 -0
  123. synapse/federation/federation_server.py +1544 -0
  124. synapse/federation/persistence.py +71 -0
  125. synapse/federation/send_queue.py +532 -0
  126. synapse/federation/sender/__init__.py +1165 -0
  127. synapse/federation/sender/per_destination_queue.py +884 -0
  128. synapse/federation/sender/transaction_manager.py +210 -0
  129. synapse/federation/transport/__init__.py +28 -0
  130. synapse/federation/transport/client.py +1201 -0
  131. synapse/federation/transport/server/__init__.py +334 -0
  132. synapse/federation/transport/server/_base.py +429 -0
  133. synapse/federation/transport/server/federation.py +912 -0
  134. synapse/federation/units.py +133 -0
  135. synapse/handlers/__init__.py +20 -0
  136. synapse/handlers/account.py +162 -0
  137. synapse/handlers/account_data.py +362 -0
  138. synapse/handlers/account_validity.py +361 -0
  139. synapse/handlers/admin.py +618 -0
  140. synapse/handlers/appservice.py +991 -0
  141. synapse/handlers/auth.py +2494 -0
  142. synapse/handlers/cas.py +413 -0
  143. synapse/handlers/deactivate_account.py +363 -0
  144. synapse/handlers/delayed_events.py +635 -0
  145. synapse/handlers/device.py +1873 -0
  146. synapse/handlers/devicemessage.py +399 -0
  147. synapse/handlers/directory.py +554 -0
  148. synapse/handlers/e2e_keys.py +1834 -0
  149. synapse/handlers/e2e_room_keys.py +455 -0
  150. synapse/handlers/event_auth.py +390 -0
  151. synapse/handlers/events.py +201 -0
  152. synapse/handlers/federation.py +2043 -0
  153. synapse/handlers/federation_event.py +2420 -0
  154. synapse/handlers/identity.py +812 -0
  155. synapse/handlers/initial_sync.py +528 -0
  156. synapse/handlers/jwt.py +120 -0
  157. synapse/handlers/message.py +2347 -0
  158. synapse/handlers/oidc.py +1803 -0
  159. synapse/handlers/pagination.py +768 -0
  160. synapse/handlers/password_policy.py +102 -0
  161. synapse/handlers/presence.py +2638 -0
  162. synapse/handlers/profile.py +655 -0
  163. synapse/handlers/push_rules.py +164 -0
  164. synapse/handlers/read_marker.py +79 -0
  165. synapse/handlers/receipts.py +351 -0
  166. synapse/handlers/register.py +1060 -0
  167. synapse/handlers/relations.py +624 -0
  168. synapse/handlers/reports.py +98 -0
  169. synapse/handlers/room.py +2447 -0
  170. synapse/handlers/room_list.py +632 -0
  171. synapse/handlers/room_member.py +2365 -0
  172. synapse/handlers/room_member_worker.py +146 -0
  173. synapse/handlers/room_policy.py +186 -0
  174. synapse/handlers/room_summary.py +1057 -0
  175. synapse/handlers/saml.py +524 -0
  176. synapse/handlers/search.py +723 -0
  177. synapse/handlers/send_email.py +209 -0
  178. synapse/handlers/set_password.py +71 -0
  179. synapse/handlers/sliding_sync/__init__.py +1701 -0
  180. synapse/handlers/sliding_sync/extensions.py +970 -0
  181. synapse/handlers/sliding_sync/room_lists.py +2266 -0
  182. synapse/handlers/sliding_sync/store.py +128 -0
  183. synapse/handlers/sso.py +1292 -0
  184. synapse/handlers/state_deltas.py +82 -0
  185. synapse/handlers/stats.py +322 -0
  186. synapse/handlers/sync.py +3109 -0
  187. synapse/handlers/thread_subscriptions.py +190 -0
  188. synapse/handlers/typing.py +606 -0
  189. synapse/handlers/ui_auth/__init__.py +48 -0
  190. synapse/handlers/ui_auth/checkers.py +332 -0
  191. synapse/handlers/user_directory.py +783 -0
  192. synapse/handlers/worker_lock.py +365 -0
  193. synapse/http/__init__.py +106 -0
  194. synapse/http/additional_resource.py +62 -0
  195. synapse/http/client.py +1360 -0
  196. synapse/http/connectproxyclient.py +309 -0
  197. synapse/http/federation/__init__.py +19 -0
  198. synapse/http/federation/matrix_federation_agent.py +490 -0
  199. synapse/http/federation/srv_resolver.py +196 -0
  200. synapse/http/federation/well_known_resolver.py +367 -0
  201. synapse/http/matrixfederationclient.py +1875 -0
  202. synapse/http/proxy.py +290 -0
  203. synapse/http/proxyagent.py +497 -0
  204. synapse/http/replicationagent.py +203 -0
  205. synapse/http/request_metrics.py +309 -0
  206. synapse/http/server.py +1114 -0
  207. synapse/http/servlet.py +1019 -0
  208. synapse/http/site.py +825 -0
  209. synapse/http/types.py +27 -0
  210. synapse/logging/__init__.py +31 -0
  211. synapse/logging/_remote.py +261 -0
  212. synapse/logging/_terse_json.py +95 -0
  213. synapse/logging/context.py +1211 -0
  214. synapse/logging/formatter.py +63 -0
  215. synapse/logging/handlers.py +99 -0
  216. synapse/logging/loggers.py +25 -0
  217. synapse/logging/opentracing.py +1132 -0
  218. synapse/logging/scopecontextmanager.py +161 -0
  219. synapse/media/_base.py +827 -0
  220. synapse/media/filepath.py +417 -0
  221. synapse/media/media_repository.py +1580 -0
  222. synapse/media/media_storage.py +704 -0
  223. synapse/media/oembed.py +277 -0
  224. synapse/media/preview_html.py +559 -0
  225. synapse/media/storage_provider.py +195 -0
  226. synapse/media/thumbnailer.py +833 -0
  227. synapse/media/url_previewer.py +875 -0
  228. synapse/metrics/__init__.py +754 -0
  229. synapse/metrics/_gc.py +219 -0
  230. synapse/metrics/_reactor_metrics.py +171 -0
  231. synapse/metrics/_types.py +38 -0
  232. synapse/metrics/background_process_metrics.py +556 -0
  233. synapse/metrics/common_usage_metrics.py +94 -0
  234. synapse/metrics/jemalloc.py +248 -0
  235. synapse/module_api/__init__.py +2154 -0
  236. synapse/module_api/callbacks/__init__.py +50 -0
  237. synapse/module_api/callbacks/account_validity_callbacks.py +106 -0
  238. synapse/module_api/callbacks/media_repository_callbacks.py +160 -0
  239. synapse/module_api/callbacks/ratelimit_callbacks.py +79 -0
  240. synapse/module_api/callbacks/spamchecker_callbacks.py +1113 -0
  241. synapse/module_api/callbacks/third_party_event_rules_callbacks.py +599 -0
  242. synapse/module_api/errors.py +42 -0
  243. synapse/notifier.py +972 -0
  244. synapse/push/__init__.py +212 -0
  245. synapse/push/bulk_push_rule_evaluator.py +637 -0
  246. synapse/push/clientformat.py +126 -0
  247. synapse/push/emailpusher.py +333 -0
  248. synapse/push/httppusher.py +564 -0
  249. synapse/push/mailer.py +1012 -0
  250. synapse/push/presentable_names.py +216 -0
  251. synapse/push/push_tools.py +114 -0
  252. synapse/push/push_types.py +141 -0
  253. synapse/push/pusher.py +87 -0
  254. synapse/push/pusherpool.py +501 -0
  255. synapse/push/rulekinds.py +33 -0
  256. synapse/py.typed +0 -0
  257. synapse/replication/__init__.py +20 -0
  258. synapse/replication/http/__init__.py +68 -0
  259. synapse/replication/http/_base.py +468 -0
  260. synapse/replication/http/account_data.py +297 -0
  261. synapse/replication/http/deactivate_account.py +81 -0
  262. synapse/replication/http/delayed_events.py +62 -0
  263. synapse/replication/http/devices.py +254 -0
  264. synapse/replication/http/federation.py +334 -0
  265. synapse/replication/http/login.py +106 -0
  266. synapse/replication/http/membership.py +364 -0
  267. synapse/replication/http/presence.py +133 -0
  268. synapse/replication/http/push.py +156 -0
  269. synapse/replication/http/register.py +172 -0
  270. synapse/replication/http/send_events.py +182 -0
  271. synapse/replication/http/state.py +82 -0
  272. synapse/replication/http/streams.py +101 -0
  273. synapse/replication/tcp/__init__.py +56 -0
  274. synapse/replication/tcp/client.py +552 -0
  275. synapse/replication/tcp/commands.py +569 -0
  276. synapse/replication/tcp/context.py +41 -0
  277. synapse/replication/tcp/external_cache.py +156 -0
  278. synapse/replication/tcp/handler.py +942 -0
  279. synapse/replication/tcp/protocol.py +608 -0
  280. synapse/replication/tcp/redis.py +509 -0
  281. synapse/replication/tcp/resource.py +348 -0
  282. synapse/replication/tcp/streams/__init__.py +96 -0
  283. synapse/replication/tcp/streams/_base.py +766 -0
  284. synapse/replication/tcp/streams/events.py +287 -0
  285. synapse/replication/tcp/streams/federation.py +92 -0
  286. synapse/replication/tcp/streams/partial_state.py +80 -0
  287. synapse/res/providers.json +29 -0
  288. synapse/res/templates/_base.html +29 -0
  289. synapse/res/templates/account_previously_renewed.html +6 -0
  290. synapse/res/templates/account_renewed.html +6 -0
  291. synapse/res/templates/add_threepid.html +8 -0
  292. synapse/res/templates/add_threepid.txt +6 -0
  293. synapse/res/templates/add_threepid_failure.html +7 -0
  294. synapse/res/templates/add_threepid_success.html +6 -0
  295. synapse/res/templates/already_in_use.html +12 -0
  296. synapse/res/templates/already_in_use.txt +10 -0
  297. synapse/res/templates/auth_success.html +21 -0
  298. synapse/res/templates/invalid_token.html +6 -0
  299. synapse/res/templates/mail-Element.css +7 -0
  300. synapse/res/templates/mail-Vector.css +7 -0
  301. synapse/res/templates/mail-expiry.css +4 -0
  302. synapse/res/templates/mail.css +156 -0
  303. synapse/res/templates/notice_expiry.html +46 -0
  304. synapse/res/templates/notice_expiry.txt +7 -0
  305. synapse/res/templates/notif.html +51 -0
  306. synapse/res/templates/notif.txt +22 -0
  307. synapse/res/templates/notif_mail.html +59 -0
  308. synapse/res/templates/notif_mail.txt +10 -0
  309. synapse/res/templates/password_reset.html +10 -0
  310. synapse/res/templates/password_reset.txt +7 -0
  311. synapse/res/templates/password_reset_confirmation.html +15 -0
  312. synapse/res/templates/password_reset_failure.html +7 -0
  313. synapse/res/templates/password_reset_success.html +6 -0
  314. synapse/res/templates/recaptcha.html +42 -0
  315. synapse/res/templates/registration.html +12 -0
  316. synapse/res/templates/registration.txt +10 -0
  317. synapse/res/templates/registration_failure.html +6 -0
  318. synapse/res/templates/registration_success.html +6 -0
  319. synapse/res/templates/registration_token.html +18 -0
  320. synapse/res/templates/room.html +33 -0
  321. synapse/res/templates/room.txt +9 -0
  322. synapse/res/templates/sso.css +129 -0
  323. synapse/res/templates/sso_account_deactivated.html +25 -0
  324. synapse/res/templates/sso_auth_account_details.html +186 -0
  325. synapse/res/templates/sso_auth_account_details.js +116 -0
  326. synapse/res/templates/sso_auth_bad_user.html +26 -0
  327. synapse/res/templates/sso_auth_confirm.html +27 -0
  328. synapse/res/templates/sso_auth_success.html +26 -0
  329. synapse/res/templates/sso_error.html +71 -0
  330. synapse/res/templates/sso_footer.html +19 -0
  331. synapse/res/templates/sso_login_idp_picker.html +60 -0
  332. synapse/res/templates/sso_new_user_consent.html +30 -0
  333. synapse/res/templates/sso_partial_profile.html +19 -0
  334. synapse/res/templates/sso_redirect_confirm.html +39 -0
  335. synapse/res/templates/style.css +33 -0
  336. synapse/res/templates/terms.html +27 -0
  337. synapse/rest/__init__.py +197 -0
  338. synapse/rest/admin/__init__.py +390 -0
  339. synapse/rest/admin/_base.py +72 -0
  340. synapse/rest/admin/background_updates.py +171 -0
  341. synapse/rest/admin/devices.py +221 -0
  342. synapse/rest/admin/event_reports.py +173 -0
  343. synapse/rest/admin/events.py +69 -0
  344. synapse/rest/admin/experimental_features.py +137 -0
  345. synapse/rest/admin/federation.py +243 -0
  346. synapse/rest/admin/media.py +540 -0
  347. synapse/rest/admin/registration_tokens.py +358 -0
  348. synapse/rest/admin/rooms.py +1061 -0
  349. synapse/rest/admin/scheduled_tasks.py +70 -0
  350. synapse/rest/admin/server_notice_servlet.py +132 -0
  351. synapse/rest/admin/statistics.py +132 -0
  352. synapse/rest/admin/username_available.py +58 -0
  353. synapse/rest/admin/users.py +1608 -0
  354. synapse/rest/client/__init__.py +20 -0
  355. synapse/rest/client/_base.py +113 -0
  356. synapse/rest/client/account.py +930 -0
  357. synapse/rest/client/account_data.py +319 -0
  358. synapse/rest/client/account_validity.py +103 -0
  359. synapse/rest/client/appservice_ping.py +125 -0
  360. synapse/rest/client/auth.py +218 -0
  361. synapse/rest/client/auth_metadata.py +122 -0
  362. synapse/rest/client/capabilities.py +121 -0
  363. synapse/rest/client/delayed_events.py +111 -0
  364. synapse/rest/client/devices.py +587 -0
  365. synapse/rest/client/directory.py +211 -0
  366. synapse/rest/client/events.py +116 -0
  367. synapse/rest/client/filter.py +112 -0
  368. synapse/rest/client/initial_sync.py +65 -0
  369. synapse/rest/client/keys.py +678 -0
  370. synapse/rest/client/knock.py +104 -0
  371. synapse/rest/client/login.py +754 -0
  372. synapse/rest/client/login_token_request.py +127 -0
  373. synapse/rest/client/logout.py +93 -0
  374. synapse/rest/client/matrixrtc.py +52 -0
  375. synapse/rest/client/media.py +286 -0
  376. synapse/rest/client/mutual_rooms.py +93 -0
  377. synapse/rest/client/notifications.py +137 -0
  378. synapse/rest/client/openid.py +109 -0
  379. synapse/rest/client/password_policy.py +69 -0
  380. synapse/rest/client/presence.py +131 -0
  381. synapse/rest/client/profile.py +291 -0
  382. synapse/rest/client/push_rule.py +331 -0
  383. synapse/rest/client/pusher.py +181 -0
  384. synapse/rest/client/read_marker.py +104 -0
  385. synapse/rest/client/receipts.py +165 -0
  386. synapse/rest/client/register.py +1067 -0
  387. synapse/rest/client/relations.py +138 -0
  388. synapse/rest/client/rendezvous.py +76 -0
  389. synapse/rest/client/reporting.py +207 -0
  390. synapse/rest/client/room.py +1669 -0
  391. synapse/rest/client/room_keys.py +426 -0
  392. synapse/rest/client/room_upgrade_rest_servlet.py +112 -0
  393. synapse/rest/client/sendtodevice.py +85 -0
  394. synapse/rest/client/sync.py +1131 -0
  395. synapse/rest/client/tags.py +129 -0
  396. synapse/rest/client/thirdparty.py +130 -0
  397. synapse/rest/client/thread_subscriptions.py +247 -0
  398. synapse/rest/client/tokenrefresh.py +52 -0
  399. synapse/rest/client/transactions.py +149 -0
  400. synapse/rest/client/user_directory.py +90 -0
  401. synapse/rest/client/versions.py +191 -0
  402. synapse/rest/client/voip.py +88 -0
  403. synapse/rest/consent/__init__.py +0 -0
  404. synapse/rest/consent/consent_resource.py +210 -0
  405. synapse/rest/health.py +38 -0
  406. synapse/rest/key/__init__.py +20 -0
  407. synapse/rest/key/v2/__init__.py +40 -0
  408. synapse/rest/key/v2/local_key_resource.py +125 -0
  409. synapse/rest/key/v2/remote_key_resource.py +302 -0
  410. synapse/rest/media/__init__.py +0 -0
  411. synapse/rest/media/config_resource.py +53 -0
  412. synapse/rest/media/create_resource.py +90 -0
  413. synapse/rest/media/download_resource.py +110 -0
  414. synapse/rest/media/media_repository_resource.py +113 -0
  415. synapse/rest/media/preview_url_resource.py +77 -0
  416. synapse/rest/media/thumbnail_resource.py +142 -0
  417. synapse/rest/media/upload_resource.py +187 -0
  418. synapse/rest/media/v1/__init__.py +39 -0
  419. synapse/rest/media/v1/_base.py +23 -0
  420. synapse/rest/media/v1/media_storage.py +23 -0
  421. synapse/rest/media/v1/storage_provider.py +23 -0
  422. synapse/rest/synapse/__init__.py +20 -0
  423. synapse/rest/synapse/client/__init__.py +93 -0
  424. synapse/rest/synapse/client/federation_whitelist.py +66 -0
  425. synapse/rest/synapse/client/jwks.py +77 -0
  426. synapse/rest/synapse/client/new_user_consent.py +115 -0
  427. synapse/rest/synapse/client/oidc/__init__.py +45 -0
  428. synapse/rest/synapse/client/oidc/backchannel_logout_resource.py +42 -0
  429. synapse/rest/synapse/client/oidc/callback_resource.py +48 -0
  430. synapse/rest/synapse/client/password_reset.py +129 -0
  431. synapse/rest/synapse/client/pick_idp.py +107 -0
  432. synapse/rest/synapse/client/pick_username.py +153 -0
  433. synapse/rest/synapse/client/rendezvous.py +58 -0
  434. synapse/rest/synapse/client/saml2/__init__.py +42 -0
  435. synapse/rest/synapse/client/saml2/metadata_resource.py +46 -0
  436. synapse/rest/synapse/client/saml2/response_resource.py +52 -0
  437. synapse/rest/synapse/client/sso_register.py +56 -0
  438. synapse/rest/synapse/client/unsubscribe.py +88 -0
  439. synapse/rest/synapse/mas/__init__.py +71 -0
  440. synapse/rest/synapse/mas/_base.py +55 -0
  441. synapse/rest/synapse/mas/devices.py +239 -0
  442. synapse/rest/synapse/mas/users.py +469 -0
  443. synapse/rest/well_known.py +148 -0
  444. synapse/server.py +1258 -0
  445. synapse/server_notices/__init__.py +0 -0
  446. synapse/server_notices/consent_server_notices.py +136 -0
  447. synapse/server_notices/resource_limits_server_notices.py +215 -0
  448. synapse/server_notices/server_notices_manager.py +388 -0
  449. synapse/server_notices/server_notices_sender.py +67 -0
  450. synapse/server_notices/worker_server_notices_sender.py +46 -0
  451. synapse/spam_checker_api/__init__.py +31 -0
  452. synapse/state/__init__.py +1022 -0
  453. synapse/state/v1.py +370 -0
  454. synapse/state/v2.py +985 -0
  455. synapse/static/client/login/index.html +47 -0
  456. synapse/static/client/login/js/jquery-3.4.1.min.js +2 -0
  457. synapse/static/client/login/js/login.js +291 -0
  458. synapse/static/client/login/spinner.gif +0 -0
  459. synapse/static/client/login/style.css +79 -0
  460. synapse/static/index.html +63 -0
  461. synapse/storage/__init__.py +43 -0
  462. synapse/storage/_base.py +245 -0
  463. synapse/storage/admin_client_config.py +26 -0
  464. synapse/storage/background_updates.py +1189 -0
  465. synapse/storage/controllers/__init__.py +57 -0
  466. synapse/storage/controllers/persist_events.py +1239 -0
  467. synapse/storage/controllers/purge_events.py +456 -0
  468. synapse/storage/controllers/state.py +954 -0
  469. synapse/storage/controllers/stats.py +119 -0
  470. synapse/storage/database.py +2720 -0
  471. synapse/storage/databases/__init__.py +175 -0
  472. synapse/storage/databases/main/__init__.py +424 -0
  473. synapse/storage/databases/main/account_data.py +1060 -0
  474. synapse/storage/databases/main/appservice.py +473 -0
  475. synapse/storage/databases/main/cache.py +911 -0
  476. synapse/storage/databases/main/censor_events.py +225 -0
  477. synapse/storage/databases/main/client_ips.py +817 -0
  478. synapse/storage/databases/main/delayed_events.py +560 -0
  479. synapse/storage/databases/main/deviceinbox.py +1272 -0
  480. synapse/storage/databases/main/devices.py +2581 -0
  481. synapse/storage/databases/main/directory.py +212 -0
  482. synapse/storage/databases/main/e2e_room_keys.py +690 -0
  483. synapse/storage/databases/main/end_to_end_keys.py +1896 -0
  484. synapse/storage/databases/main/event_federation.py +2509 -0
  485. synapse/storage/databases/main/event_push_actions.py +1937 -0
  486. synapse/storage/databases/main/events.py +3746 -0
  487. synapse/storage/databases/main/events_bg_updates.py +2910 -0
  488. synapse/storage/databases/main/events_forward_extremities.py +126 -0
  489. synapse/storage/databases/main/events_worker.py +2784 -0
  490. synapse/storage/databases/main/experimental_features.py +130 -0
  491. synapse/storage/databases/main/filtering.py +231 -0
  492. synapse/storage/databases/main/keys.py +291 -0
  493. synapse/storage/databases/main/lock.py +553 -0
  494. synapse/storage/databases/main/media_repository.py +1070 -0
  495. synapse/storage/databases/main/metrics.py +460 -0
  496. synapse/storage/databases/main/monthly_active_users.py +443 -0
  497. synapse/storage/databases/main/openid.py +61 -0
  498. synapse/storage/databases/main/presence.py +511 -0
  499. synapse/storage/databases/main/profile.py +541 -0
  500. synapse/storage/databases/main/purge_events.py +511 -0
  501. synapse/storage/databases/main/push_rule.py +972 -0
  502. synapse/storage/databases/main/pusher.py +794 -0
  503. synapse/storage/databases/main/receipts.py +1342 -0
  504. synapse/storage/databases/main/registration.py +3076 -0
  505. synapse/storage/databases/main/rejections.py +38 -0
  506. synapse/storage/databases/main/relations.py +1118 -0
  507. synapse/storage/databases/main/room.py +2781 -0
  508. synapse/storage/databases/main/roommember.py +2112 -0
  509. synapse/storage/databases/main/search.py +941 -0
  510. synapse/storage/databases/main/session.py +151 -0
  511. synapse/storage/databases/main/signatures.py +94 -0
  512. synapse/storage/databases/main/sliding_sync.py +603 -0
  513. synapse/storage/databases/main/state.py +1006 -0
  514. synapse/storage/databases/main/state_deltas.py +329 -0
  515. synapse/storage/databases/main/stats.py +791 -0
  516. synapse/storage/databases/main/stream.py +2580 -0
  517. synapse/storage/databases/main/tags.py +360 -0
  518. synapse/storage/databases/main/task_scheduler.py +225 -0
  519. synapse/storage/databases/main/thread_subscriptions.py +591 -0
  520. synapse/storage/databases/main/transactions.py +681 -0
  521. synapse/storage/databases/main/ui_auth.py +420 -0
  522. synapse/storage/databases/main/user_directory.py +1331 -0
  523. synapse/storage/databases/main/user_erasure_store.py +117 -0
  524. synapse/storage/databases/state/__init__.py +22 -0
  525. synapse/storage/databases/state/bg_updates.py +499 -0
  526. synapse/storage/databases/state/deletion.py +558 -0
  527. synapse/storage/databases/state/store.py +949 -0
  528. synapse/storage/engines/__init__.py +70 -0
  529. synapse/storage/engines/_base.py +154 -0
  530. synapse/storage/engines/postgres.py +261 -0
  531. synapse/storage/engines/sqlite.py +199 -0
  532. synapse/storage/invite_rule.py +112 -0
  533. synapse/storage/keys.py +40 -0
  534. synapse/storage/prepare_database.py +731 -0
  535. synapse/storage/push_rule.py +28 -0
  536. synapse/storage/roommember.py +89 -0
  537. synapse/storage/schema/README.md +4 -0
  538. synapse/storage/schema/__init__.py +182 -0
  539. synapse/storage/schema/common/delta/25/00background_updates.sql +40 -0
  540. synapse/storage/schema/common/delta/35/00background_updates_add_col.sql +36 -0
  541. synapse/storage/schema/common/delta/58/00background_update_ordering.sql +38 -0
  542. synapse/storage/schema/common/full_schemas/72/full.sql.postgres +8 -0
  543. synapse/storage/schema/common/full_schemas/72/full.sql.sqlite +6 -0
  544. synapse/storage/schema/common/schema_version.sql +60 -0
  545. synapse/storage/schema/main/delta/12/v12.sql +82 -0
  546. synapse/storage/schema/main/delta/13/v13.sql +38 -0
  547. synapse/storage/schema/main/delta/14/v14.sql +42 -0
  548. synapse/storage/schema/main/delta/15/appservice_txns.sql +50 -0
  549. synapse/storage/schema/main/delta/15/presence_indices.sql +2 -0
  550. synapse/storage/schema/main/delta/15/v15.sql +24 -0
  551. synapse/storage/schema/main/delta/16/events_order_index.sql +4 -0
  552. synapse/storage/schema/main/delta/16/remote_media_cache_index.sql +2 -0
  553. synapse/storage/schema/main/delta/16/remove_duplicates.sql +9 -0
  554. synapse/storage/schema/main/delta/16/room_alias_index.sql +3 -0
  555. synapse/storage/schema/main/delta/16/unique_constraints.sql +72 -0
  556. synapse/storage/schema/main/delta/16/users.sql +56 -0
  557. synapse/storage/schema/main/delta/17/drop_indexes.sql +37 -0
  558. synapse/storage/schema/main/delta/17/server_keys.sql +43 -0
  559. synapse/storage/schema/main/delta/17/user_threepids.sql +9 -0
  560. synapse/storage/schema/main/delta/18/server_keys_bigger_ints.sql +51 -0
  561. synapse/storage/schema/main/delta/19/event_index.sql +38 -0
  562. synapse/storage/schema/main/delta/20/dummy.sql +1 -0
  563. synapse/storage/schema/main/delta/20/pushers.py +93 -0
  564. synapse/storage/schema/main/delta/21/end_to_end_keys.sql +53 -0
  565. synapse/storage/schema/main/delta/21/receipts.sql +57 -0
  566. synapse/storage/schema/main/delta/22/receipts_index.sql +41 -0
  567. synapse/storage/schema/main/delta/22/user_threepids_unique.sql +19 -0
  568. synapse/storage/schema/main/delta/24/stats_reporting.sql +37 -0
  569. synapse/storage/schema/main/delta/25/fts.py +81 -0
  570. synapse/storage/schema/main/delta/25/guest_access.sql +44 -0
  571. synapse/storage/schema/main/delta/25/history_visibility.sql +44 -0
  572. synapse/storage/schema/main/delta/25/tags.sql +57 -0
  573. synapse/storage/schema/main/delta/26/account_data.sql +36 -0
  574. synapse/storage/schema/main/delta/27/account_data.sql +55 -0
  575. synapse/storage/schema/main/delta/27/forgotten_memberships.sql +45 -0
  576. synapse/storage/schema/main/delta/27/ts.py +61 -0
  577. synapse/storage/schema/main/delta/28/event_push_actions.sql +46 -0
  578. synapse/storage/schema/main/delta/28/events_room_stream.sql +39 -0
  579. synapse/storage/schema/main/delta/28/public_roms_index.sql +39 -0
  580. synapse/storage/schema/main/delta/28/receipts_user_id_index.sql +41 -0
  581. synapse/storage/schema/main/delta/28/upgrade_times.sql +40 -0
  582. synapse/storage/schema/main/delta/28/users_is_guest.sql +41 -0
  583. synapse/storage/schema/main/delta/29/push_actions.sql +54 -0
  584. synapse/storage/schema/main/delta/30/alias_creator.sql +35 -0
  585. synapse/storage/schema/main/delta/30/as_users.py +82 -0
  586. synapse/storage/schema/main/delta/30/deleted_pushers.sql +44 -0
  587. synapse/storage/schema/main/delta/30/presence_stream.sql +49 -0
  588. synapse/storage/schema/main/delta/30/public_rooms.sql +42 -0
  589. synapse/storage/schema/main/delta/30/push_rule_stream.sql +57 -0
  590. synapse/storage/schema/main/delta/30/threepid_guest_access_tokens.sql +43 -0
  591. synapse/storage/schema/main/delta/31/invites.sql +61 -0
  592. synapse/storage/schema/main/delta/31/local_media_repository_url_cache.sql +46 -0
  593. synapse/storage/schema/main/delta/31/pushers_0.py +92 -0
  594. synapse/storage/schema/main/delta/31/pushers_index.sql +41 -0
  595. synapse/storage/schema/main/delta/31/search_update.py +65 -0
  596. synapse/storage/schema/main/delta/32/events.sql +35 -0
  597. synapse/storage/schema/main/delta/32/openid.sql +9 -0
  598. synapse/storage/schema/main/delta/32/pusher_throttle.sql +42 -0
  599. synapse/storage/schema/main/delta/32/remove_indices.sql +52 -0
  600. synapse/storage/schema/main/delta/32/reports.sql +44 -0
  601. synapse/storage/schema/main/delta/33/access_tokens_device_index.sql +36 -0
  602. synapse/storage/schema/main/delta/33/devices.sql +40 -0
  603. synapse/storage/schema/main/delta/33/devices_for_e2e_keys.sql +38 -0
  604. synapse/storage/schema/main/delta/33/devices_for_e2e_keys_clear_unknown_device.sql +39 -0
  605. synapse/storage/schema/main/delta/33/event_fields.py +61 -0
  606. synapse/storage/schema/main/delta/33/remote_media_ts.py +43 -0
  607. synapse/storage/schema/main/delta/33/user_ips_index.sql +36 -0
  608. synapse/storage/schema/main/delta/34/appservice_stream.sql +42 -0
  609. synapse/storage/schema/main/delta/34/cache_stream.py +50 -0
  610. synapse/storage/schema/main/delta/34/device_inbox.sql +43 -0
  611. synapse/storage/schema/main/delta/34/push_display_name_rename.sql +39 -0
  612. synapse/storage/schema/main/delta/34/received_txn_purge.py +36 -0
  613. synapse/storage/schema/main/delta/35/contains_url.sql +36 -0
  614. synapse/storage/schema/main/delta/35/device_outbox.sql +58 -0
  615. synapse/storage/schema/main/delta/35/device_stream_id.sql +40 -0
  616. synapse/storage/schema/main/delta/35/event_push_actions_index.sql +36 -0
  617. synapse/storage/schema/main/delta/35/public_room_list_change_stream.sql +52 -0
  618. synapse/storage/schema/main/delta/35/stream_order_to_extrem.sql +56 -0
  619. synapse/storage/schema/main/delta/36/readd_public_rooms.sql +45 -0
  620. synapse/storage/schema/main/delta/37/remove_auth_idx.py +89 -0
  621. synapse/storage/schema/main/delta/37/user_threepids.sql +71 -0
  622. synapse/storage/schema/main/delta/38/postgres_fts_gist.sql +38 -0
  623. synapse/storage/schema/main/delta/39/appservice_room_list.sql +48 -0
  624. synapse/storage/schema/main/delta/39/device_federation_stream_idx.sql +35 -0
  625. synapse/storage/schema/main/delta/39/event_push_index.sql +36 -0
  626. synapse/storage/schema/main/delta/39/federation_out_position.sql +41 -0
  627. synapse/storage/schema/main/delta/39/membership_profile.sql +39 -0
  628. synapse/storage/schema/main/delta/40/current_state_idx.sql +36 -0
  629. synapse/storage/schema/main/delta/40/device_inbox.sql +40 -0
  630. synapse/storage/schema/main/delta/40/device_list_streams.sql +79 -0
  631. synapse/storage/schema/main/delta/40/event_push_summary.sql +57 -0
  632. synapse/storage/schema/main/delta/40/pushers.sql +58 -0
  633. synapse/storage/schema/main/delta/41/device_list_stream_idx.sql +36 -0
  634. synapse/storage/schema/main/delta/41/device_outbound_index.sql +35 -0
  635. synapse/storage/schema/main/delta/41/event_search_event_id_idx.sql +36 -0
  636. synapse/storage/schema/main/delta/41/ratelimit.sql +41 -0
  637. synapse/storage/schema/main/delta/42/current_state_delta.sql +48 -0
  638. synapse/storage/schema/main/delta/42/device_list_last_id.sql +52 -0
  639. synapse/storage/schema/main/delta/42/event_auth_state_only.sql +36 -0
  640. synapse/storage/schema/main/delta/42/user_dir.py +88 -0
  641. synapse/storage/schema/main/delta/43/blocked_rooms.sql +40 -0
  642. synapse/storage/schema/main/delta/43/quarantine_media.sql +36 -0
  643. synapse/storage/schema/main/delta/43/url_cache.sql +35 -0
  644. synapse/storage/schema/main/delta/43/user_share.sql +52 -0
  645. synapse/storage/schema/main/delta/44/expire_url_cache.sql +60 -0
  646. synapse/storage/schema/main/delta/45/group_server.sql +186 -0
  647. synapse/storage/schema/main/delta/45/profile_cache.sql +47 -0
  648. synapse/storage/schema/main/delta/46/drop_refresh_tokens.sql +36 -0
  649. synapse/storage/schema/main/delta/46/drop_unique_deleted_pushers.sql +54 -0
  650. synapse/storage/schema/main/delta/46/group_server.sql +51 -0
  651. synapse/storage/schema/main/delta/46/local_media_repository_url_idx.sql +43 -0
  652. synapse/storage/schema/main/delta/46/user_dir_null_room_ids.sql +54 -0
  653. synapse/storage/schema/main/delta/46/user_dir_typos.sql +43 -0
  654. synapse/storage/schema/main/delta/47/last_access_media.sql +35 -0
  655. synapse/storage/schema/main/delta/47/postgres_fts_gin.sql +36 -0
  656. synapse/storage/schema/main/delta/47/push_actions_staging.sql +47 -0
  657. synapse/storage/schema/main/delta/48/add_user_consent.sql +37 -0
  658. synapse/storage/schema/main/delta/48/add_user_ips_last_seen_index.sql +36 -0
  659. synapse/storage/schema/main/delta/48/deactivated_users.sql +44 -0
  660. synapse/storage/schema/main/delta/48/group_unique_indexes.py +67 -0
  661. synapse/storage/schema/main/delta/48/groups_joinable.sql +41 -0
  662. synapse/storage/schema/main/delta/49/add_user_consent_server_notice_sent.sql +39 -0
  663. synapse/storage/schema/main/delta/49/add_user_daily_visits.sql +40 -0
  664. synapse/storage/schema/main/delta/49/add_user_ips_last_seen_only_index.sql +36 -0
  665. synapse/storage/schema/main/delta/50/add_creation_ts_users_index.sql +38 -0
  666. synapse/storage/schema/main/delta/50/erasure_store.sql +40 -0
  667. synapse/storage/schema/main/delta/50/make_event_content_nullable.py +102 -0
  668. synapse/storage/schema/main/delta/51/e2e_room_keys.sql +58 -0
  669. synapse/storage/schema/main/delta/51/monthly_active_users.sql +46 -0
  670. synapse/storage/schema/main/delta/52/add_event_to_state_group_index.sql +38 -0
  671. synapse/storage/schema/main/delta/52/device_list_streams_unique_idx.sql +55 -0
  672. synapse/storage/schema/main/delta/52/e2e_room_keys.sql +72 -0
  673. synapse/storage/schema/main/delta/53/add_user_type_to_users.sql +38 -0
  674. synapse/storage/schema/main/delta/53/drop_sent_transactions.sql +35 -0
  675. synapse/storage/schema/main/delta/53/event_format_version.sql +35 -0
  676. synapse/storage/schema/main/delta/53/user_dir_populate.sql +49 -0
  677. synapse/storage/schema/main/delta/53/user_ips_index.sql +49 -0
  678. synapse/storage/schema/main/delta/53/user_share.sql +63 -0
  679. synapse/storage/schema/main/delta/53/user_threepid_id.sql +48 -0
  680. synapse/storage/schema/main/delta/53/users_in_public_rooms.sql +47 -0
  681. synapse/storage/schema/main/delta/54/account_validity_with_renewal.sql +49 -0
  682. synapse/storage/schema/main/delta/54/add_validity_to_server_keys.sql +42 -0
  683. synapse/storage/schema/main/delta/54/delete_forward_extremities.sql +42 -0
  684. synapse/storage/schema/main/delta/54/drop_legacy_tables.sql +49 -0
  685. synapse/storage/schema/main/delta/54/drop_presence_list.sql +35 -0
  686. synapse/storage/schema/main/delta/54/relations.sql +46 -0
  687. synapse/storage/schema/main/delta/54/stats.sql +99 -0
  688. synapse/storage/schema/main/delta/54/stats2.sql +47 -0
  689. synapse/storage/schema/main/delta/55/access_token_expiry.sql +37 -0
  690. synapse/storage/schema/main/delta/55/track_threepid_validations.sql +50 -0
  691. synapse/storage/schema/main/delta/55/users_alter_deactivated.sql +38 -0
  692. synapse/storage/schema/main/delta/56/add_spans_to_device_lists.sql +39 -0
  693. synapse/storage/schema/main/delta/56/current_state_events_membership.sql +41 -0
  694. synapse/storage/schema/main/delta/56/current_state_events_membership_mk2.sql +43 -0
  695. synapse/storage/schema/main/delta/56/delete_keys_from_deleted_backups.sql +44 -0
  696. synapse/storage/schema/main/delta/56/destinations_failure_ts.sql +44 -0
  697. synapse/storage/schema/main/delta/56/destinations_retry_interval_type.sql.postgres +18 -0
  698. synapse/storage/schema/main/delta/56/device_stream_id_insert.sql +39 -0
  699. synapse/storage/schema/main/delta/56/devices_last_seen.sql +43 -0
  700. synapse/storage/schema/main/delta/56/drop_unused_event_tables.sql +39 -0
  701. synapse/storage/schema/main/delta/56/event_expiry.sql +40 -0
  702. synapse/storage/schema/main/delta/56/event_labels.sql +49 -0
  703. synapse/storage/schema/main/delta/56/event_labels_background_update.sql +36 -0
  704. synapse/storage/schema/main/delta/56/fix_room_keys_index.sql +37 -0
  705. synapse/storage/schema/main/delta/56/hidden_devices.sql +37 -0
  706. synapse/storage/schema/main/delta/56/hidden_devices_fix.sql.sqlite +42 -0
  707. synapse/storage/schema/main/delta/56/nuke_empty_communities_from_db.sql +48 -0
  708. synapse/storage/schema/main/delta/56/public_room_list_idx.sql +35 -0
  709. synapse/storage/schema/main/delta/56/redaction_censor.sql +35 -0
  710. synapse/storage/schema/main/delta/56/redaction_censor2.sql +41 -0
  711. synapse/storage/schema/main/delta/56/redaction_censor3_fix_update.sql.postgres +25 -0
  712. synapse/storage/schema/main/delta/56/redaction_censor4.sql +35 -0
  713. synapse/storage/schema/main/delta/56/remove_tombstoned_rooms_from_directory.sql +38 -0
  714. synapse/storage/schema/main/delta/56/room_key_etag.sql +36 -0
  715. synapse/storage/schema/main/delta/56/room_membership_idx.sql +37 -0
  716. synapse/storage/schema/main/delta/56/room_retention.sql +52 -0
  717. synapse/storage/schema/main/delta/56/signing_keys.sql +75 -0
  718. synapse/storage/schema/main/delta/56/signing_keys_nonunique_signatures.sql +41 -0
  719. synapse/storage/schema/main/delta/56/stats_separated.sql +175 -0
  720. synapse/storage/schema/main/delta/56/unique_user_filter_index.py +46 -0
  721. synapse/storage/schema/main/delta/56/user_external_ids.sql +43 -0
  722. synapse/storage/schema/main/delta/56/users_in_public_rooms_idx.sql +36 -0
  723. synapse/storage/schema/main/delta/57/delete_old_current_state_events.sql +41 -0
  724. synapse/storage/schema/main/delta/57/device_list_remote_cache_stale.sql +44 -0
  725. synapse/storage/schema/main/delta/57/local_current_membership.py +111 -0
  726. synapse/storage/schema/main/delta/57/remove_sent_outbound_pokes.sql +40 -0
  727. synapse/storage/schema/main/delta/57/rooms_version_column.sql +43 -0
  728. synapse/storage/schema/main/delta/57/rooms_version_column_2.sql.postgres +35 -0
  729. synapse/storage/schema/main/delta/57/rooms_version_column_2.sql.sqlite +22 -0
  730. synapse/storage/schema/main/delta/57/rooms_version_column_3.sql.postgres +39 -0
  731. synapse/storage/schema/main/delta/57/rooms_version_column_3.sql.sqlite +23 -0
  732. synapse/storage/schema/main/delta/58/02remove_dup_outbound_pokes.sql +41 -0
  733. synapse/storage/schema/main/delta/58/03persist_ui_auth.sql +55 -0
  734. synapse/storage/schema/main/delta/58/05cache_instance.sql.postgres +30 -0
  735. synapse/storage/schema/main/delta/58/06dlols_unique_idx.py +83 -0
  736. synapse/storage/schema/main/delta/58/07add_method_to_thumbnail_constraint.sql.postgres +33 -0
  737. synapse/storage/schema/main/delta/58/07add_method_to_thumbnail_constraint.sql.sqlite +44 -0
  738. synapse/storage/schema/main/delta/58/07persist_ui_auth_ips.sql +44 -0
  739. synapse/storage/schema/main/delta/58/08_media_safe_from_quarantine.sql.postgres +18 -0
  740. synapse/storage/schema/main/delta/58/08_media_safe_from_quarantine.sql.sqlite +18 -0
  741. synapse/storage/schema/main/delta/58/09shadow_ban.sql +37 -0
  742. synapse/storage/schema/main/delta/58/10_pushrules_enabled_delete_obsolete.sql +47 -0
  743. synapse/storage/schema/main/delta/58/10drop_local_rejections_stream.sql +41 -0
  744. synapse/storage/schema/main/delta/58/10federation_pos_instance_name.sql +41 -0
  745. synapse/storage/schema/main/delta/58/11dehydration.sql +39 -0
  746. synapse/storage/schema/main/delta/58/11fallback.sql +43 -0
  747. synapse/storage/schema/main/delta/58/11user_id_seq.py +38 -0
  748. synapse/storage/schema/main/delta/58/12room_stats.sql +51 -0
  749. synapse/storage/schema/main/delta/58/13remove_presence_allow_inbound.sql +36 -0
  750. synapse/storage/schema/main/delta/58/14events_instance_name.sql +35 -0
  751. synapse/storage/schema/main/delta/58/14events_instance_name.sql.postgres +28 -0
  752. synapse/storage/schema/main/delta/58/15_catchup_destination_rooms.sql +61 -0
  753. synapse/storage/schema/main/delta/58/15unread_count.sql +45 -0
  754. synapse/storage/schema/main/delta/58/16populate_stats_process_rooms_fix.sql +41 -0
  755. synapse/storage/schema/main/delta/58/17_catchup_last_successful.sql +40 -0
  756. synapse/storage/schema/main/delta/58/18stream_positions.sql +41 -0
  757. synapse/storage/schema/main/delta/58/19instance_map.sql.postgres +25 -0
  758. synapse/storage/schema/main/delta/58/19txn_id.sql +59 -0
  759. synapse/storage/schema/main/delta/58/20instance_name_event_tables.sql +36 -0
  760. synapse/storage/schema/main/delta/58/20user_daily_visits.sql +37 -0
  761. synapse/storage/schema/main/delta/58/21as_device_stream.sql +36 -0
  762. synapse/storage/schema/main/delta/58/21drop_device_max_stream_id.sql +1 -0
  763. synapse/storage/schema/main/delta/58/22puppet_token.sql +36 -0
  764. synapse/storage/schema/main/delta/58/22users_have_local_media.sql +2 -0
  765. synapse/storage/schema/main/delta/58/23e2e_cross_signing_keys_idx.sql +36 -0
  766. synapse/storage/schema/main/delta/58/24drop_event_json_index.sql +38 -0
  767. synapse/storage/schema/main/delta/58/25user_external_ids_user_id_idx.sql +36 -0
  768. synapse/storage/schema/main/delta/58/26access_token_last_validated.sql +37 -0
  769. synapse/storage/schema/main/delta/58/27local_invites.sql +37 -0
  770. synapse/storage/schema/main/delta/58/28drop_last_used_column.sql.postgres +16 -0
  771. synapse/storage/schema/main/delta/58/28drop_last_used_column.sql.sqlite +62 -0
  772. synapse/storage/schema/main/delta/59/01ignored_user.py +85 -0
  773. synapse/storage/schema/main/delta/59/02shard_send_to_device.sql +37 -0
  774. synapse/storage/schema/main/delta/59/03shard_send_to_device_sequence.sql.postgres +25 -0
  775. synapse/storage/schema/main/delta/59/04_event_auth_chains.sql +71 -0
  776. synapse/storage/schema/main/delta/59/04_event_auth_chains.sql.postgres +16 -0
  777. synapse/storage/schema/main/delta/59/04drop_account_data.sql +36 -0
  778. synapse/storage/schema/main/delta/59/05cache_invalidation.sql +36 -0
  779. synapse/storage/schema/main/delta/59/06chain_cover_index.sql +36 -0
  780. synapse/storage/schema/main/delta/59/06shard_account_data.sql +39 -0
  781. synapse/storage/schema/main/delta/59/06shard_account_data.sql.postgres +32 -0
  782. synapse/storage/schema/main/delta/59/07shard_account_data_fix.sql +37 -0
  783. synapse/storage/schema/main/delta/59/08delete_pushers_for_deactivated_accounts.sql +39 -0
  784. synapse/storage/schema/main/delta/59/08delete_stale_pushers.sql +39 -0
  785. synapse/storage/schema/main/delta/59/09rejected_events_metadata.sql +45 -0
  786. synapse/storage/schema/main/delta/59/10delete_purged_chain_cover.sql +36 -0
  787. synapse/storage/schema/main/delta/59/11add_knock_members_to_stats.sql +39 -0
  788. synapse/storage/schema/main/delta/59/11drop_thumbnail_constraint.sql.postgres +22 -0
  789. synapse/storage/schema/main/delta/59/12account_validity_token_used_ts_ms.sql +37 -0
  790. synapse/storage/schema/main/delta/59/12presence_stream_instance.sql +37 -0
  791. synapse/storage/schema/main/delta/59/12presence_stream_instance_seq.sql.postgres +20 -0
  792. synapse/storage/schema/main/delta/59/13users_to_send_full_presence_to.sql +53 -0
  793. synapse/storage/schema/main/delta/59/14refresh_tokens.sql +53 -0
  794. synapse/storage/schema/main/delta/59/15locks.sql +56 -0
  795. synapse/storage/schema/main/delta/59/16federation_inbound_staging.sql +51 -0
  796. synapse/storage/schema/main/delta/60/01recreate_stream_ordering.sql.postgres +45 -0
  797. synapse/storage/schema/main/delta/60/02change_stream_ordering_columns.sql.postgres +30 -0
  798. synapse/storage/schema/main/delta/61/01change_appservices_txns.sql.postgres +23 -0
  799. synapse/storage/schema/main/delta/61/01insertion_event_lookups.sql +68 -0
  800. synapse/storage/schema/main/delta/61/02drop_redundant_room_depth_index.sql +37 -0
  801. synapse/storage/schema/main/delta/61/03recreate_min_depth.py +74 -0
  802. synapse/storage/schema/main/delta/62/01insertion_event_extremities.sql +43 -0
  803. synapse/storage/schema/main/delta/63/01create_registration_tokens.sql +42 -0
  804. synapse/storage/schema/main/delta/63/02delete_unlinked_email_pushers.sql +39 -0
  805. synapse/storage/schema/main/delta/63/02populate-rooms-creator.sql +36 -0
  806. synapse/storage/schema/main/delta/63/03session_store.sql +42 -0
  807. synapse/storage/schema/main/delta/63/04add_presence_stream_not_offline_index.sql +37 -0
  808. synapse/storage/schema/main/delta/64/01msc2716_chunk_to_batch_rename.sql.postgres +23 -0
  809. synapse/storage/schema/main/delta/64/01msc2716_chunk_to_batch_rename.sql.sqlite +37 -0
  810. synapse/storage/schema/main/delta/65/01msc2716_insertion_event_edges.sql +38 -0
  811. synapse/storage/schema/main/delta/65/03remove_hidden_devices_from_device_inbox.sql +41 -0
  812. synapse/storage/schema/main/delta/65/04_local_group_updates.sql +37 -0
  813. synapse/storage/schema/main/delta/65/05_remove_room_stats_historical_and_user_stats_historical.sql +38 -0
  814. synapse/storage/schema/main/delta/65/06remove_deleted_devices_from_device_inbox.sql +53 -0
  815. synapse/storage/schema/main/delta/65/07_arbitrary_relations.sql +37 -0
  816. synapse/storage/schema/main/delta/65/08_device_inbox_background_updates.sql +37 -0
  817. synapse/storage/schema/main/delta/65/10_expirable_refresh_tokens.sql +47 -0
  818. synapse/storage/schema/main/delta/65/11_devices_auth_provider_session.sql +46 -0
  819. synapse/storage/schema/main/delta/67/01drop_public_room_list_stream.sql +37 -0
  820. synapse/storage/schema/main/delta/68/01event_columns.sql +45 -0
  821. synapse/storage/schema/main/delta/68/02_msc2409_add_device_id_appservice_stream_type.sql +40 -0
  822. synapse/storage/schema/main/delta/68/03_delete_account_data_for_deactivated_accounts.sql +39 -0
  823. synapse/storage/schema/main/delta/68/04_refresh_tokens_index_next_token_id.sql +47 -0
  824. synapse/storage/schema/main/delta/68/04partial_state_rooms.sql +60 -0
  825. synapse/storage/schema/main/delta/68/05_delete_non_strings_from_event_search.sql.sqlite +22 -0
  826. synapse/storage/schema/main/delta/68/05partial_state_rooms_triggers.py +80 -0
  827. synapse/storage/schema/main/delta/68/06_msc3202_add_device_list_appservice_stream_type.sql +42 -0
  828. synapse/storage/schema/main/delta/69/01as_txn_seq.py +54 -0
  829. synapse/storage/schema/main/delta/69/01device_list_oubound_by_room.sql +57 -0
  830. synapse/storage/schema/main/delta/69/02cache_invalidation_index.sql +37 -0
  831. synapse/storage/schema/main/delta/70/01clean_table_purged_rooms.sql +39 -0
  832. synapse/storage/schema/main/delta/71/01rebuild_event_edges.sql.postgres +43 -0
  833. synapse/storage/schema/main/delta/71/01rebuild_event_edges.sql.sqlite +47 -0
  834. synapse/storage/schema/main/delta/71/01remove_noop_background_updates.sql +80 -0
  835. synapse/storage/schema/main/delta/71/02event_push_summary_unique.sql +37 -0
  836. synapse/storage/schema/main/delta/72/01add_room_type_to_state_stats.sql +38 -0
  837. synapse/storage/schema/main/delta/72/01event_push_summary_receipt.sql +54 -0
  838. synapse/storage/schema/main/delta/72/02event_push_actions_index.sql +38 -0
  839. synapse/storage/schema/main/delta/72/03bg_populate_events_columns.py +57 -0
  840. synapse/storage/schema/main/delta/72/03drop_event_reference_hashes.sql +36 -0
  841. synapse/storage/schema/main/delta/72/03remove_groups.sql +50 -0
  842. synapse/storage/schema/main/delta/72/04drop_column_application_services_state_last_txn.sql.postgres +17 -0
  843. synapse/storage/schema/main/delta/72/04drop_column_application_services_state_last_txn.sql.sqlite +40 -0
  844. synapse/storage/schema/main/delta/72/05receipts_event_stream_ordering.sql +38 -0
  845. synapse/storage/schema/main/delta/72/05remove_unstable_private_read_receipts.sql +38 -0
  846. synapse/storage/schema/main/delta/72/06add_consent_ts_to_users.sql +35 -0
  847. synapse/storage/schema/main/delta/72/06thread_notifications.sql +49 -0
  848. synapse/storage/schema/main/delta/72/07force_update_current_state_events_membership.py +67 -0
  849. synapse/storage/schema/main/delta/72/07thread_receipts.sql.postgres +30 -0
  850. synapse/storage/schema/main/delta/72/07thread_receipts.sql.sqlite +70 -0
  851. synapse/storage/schema/main/delta/72/08begin_cache_invalidation_seq_at_2.sql.postgres +23 -0
  852. synapse/storage/schema/main/delta/72/08thread_receipts.sql +39 -0
  853. synapse/storage/schema/main/delta/72/09partial_indices.sql.sqlite +56 -0
  854. synapse/storage/schema/main/delta/73/01event_failed_pull_attempts.sql +48 -0
  855. synapse/storage/schema/main/delta/73/02add_pusher_enabled.sql +35 -0
  856. synapse/storage/schema/main/delta/73/02room_id_indexes_for_purging.sql +41 -0
  857. synapse/storage/schema/main/delta/73/03pusher_device_id.sql +39 -0
  858. synapse/storage/schema/main/delta/73/03users_approved_column.sql +39 -0
  859. synapse/storage/schema/main/delta/73/04partial_join_details.sql +42 -0
  860. synapse/storage/schema/main/delta/73/04pending_device_list_updates.sql +47 -0
  861. synapse/storage/schema/main/delta/73/05old_push_actions.sql.postgres +22 -0
  862. synapse/storage/schema/main/delta/73/05old_push_actions.sql.sqlite +24 -0
  863. synapse/storage/schema/main/delta/73/06thread_notifications_thread_id_idx.sql +42 -0
  864. synapse/storage/schema/main/delta/73/08thread_receipts_non_null.sql.postgres +23 -0
  865. synapse/storage/schema/main/delta/73/08thread_receipts_non_null.sql.sqlite +76 -0
  866. synapse/storage/schema/main/delta/73/09partial_joined_via_destination.sql +37 -0
  867. synapse/storage/schema/main/delta/73/09threads_table.sql +49 -0
  868. synapse/storage/schema/main/delta/73/10_update_sqlite_fts4_tokenizer.py +71 -0
  869. synapse/storage/schema/main/delta/73/10login_tokens.sql +54 -0
  870. synapse/storage/schema/main/delta/73/11event_search_room_id_n_distinct.sql.postgres +33 -0
  871. synapse/storage/schema/main/delta/73/12refactor_device_list_outbound_pokes.sql +72 -0
  872. synapse/storage/schema/main/delta/73/13add_device_lists_index.sql +39 -0
  873. synapse/storage/schema/main/delta/73/20_un_partial_stated_room_stream.sql +51 -0
  874. synapse/storage/schema/main/delta/73/21_un_partial_stated_room_stream_seq.sql.postgres +20 -0
  875. synapse/storage/schema/main/delta/73/22_rebuild_user_dir_stats.sql +48 -0
  876. synapse/storage/schema/main/delta/73/22_un_partial_stated_event_stream.sql +53 -0
  877. synapse/storage/schema/main/delta/73/23_fix_thread_index.sql +52 -0
  878. synapse/storage/schema/main/delta/73/23_un_partial_stated_room_stream_seq.sql.postgres +20 -0
  879. synapse/storage/schema/main/delta/73/24_events_jump_to_date_index.sql +36 -0
  880. synapse/storage/schema/main/delta/73/25drop_presence.sql +36 -0
  881. synapse/storage/schema/main/delta/74/01_user_directory_stale_remote_users.sql +58 -0
  882. synapse/storage/schema/main/delta/74/02_set_device_id_for_pushers_bg_update.sql +38 -0
  883. synapse/storage/schema/main/delta/74/03_membership_tables_event_stream_ordering.sql.postgres +29 -0
  884. synapse/storage/schema/main/delta/74/03_membership_tables_event_stream_ordering.sql.sqlite +23 -0
  885. synapse/storage/schema/main/delta/74/03_room_membership_index.sql +38 -0
  886. synapse/storage/schema/main/delta/74/04_delete_e2e_backup_keys_for_deactivated_users.sql +36 -0
  887. synapse/storage/schema/main/delta/74/04_membership_tables_event_stream_ordering_triggers.py +87 -0
  888. synapse/storage/schema/main/delta/74/05_events_txn_id_device_id.sql +72 -0
  889. synapse/storage/schema/main/delta/74/90COMMENTS_destinations.sql.postgres +52 -0
  890. synapse/storage/schema/main/delta/76/01_add_profiles_full_user_id_column.sql +39 -0
  891. synapse/storage/schema/main/delta/76/02_add_user_filters_full_user_id_column.sql +39 -0
  892. synapse/storage/schema/main/delta/76/03_per_user_experimental_features.sql +46 -0
  893. synapse/storage/schema/main/delta/76/04_add_room_forgetter.sql +43 -0
  894. synapse/storage/schema/main/delta/77/01_add_profiles_not_valid_check.sql.postgres +16 -0
  895. synapse/storage/schema/main/delta/77/02_add_user_filters_not_valid_check.sql.postgres +16 -0
  896. synapse/storage/schema/main/delta/77/03bg_populate_full_user_id_profiles.sql +35 -0
  897. synapse/storage/schema/main/delta/77/04bg_populate_full_user_id_user_filters.sql +35 -0
  898. synapse/storage/schema/main/delta/77/05thread_notifications_backfill.sql +67 -0
  899. synapse/storage/schema/main/delta/77/06thread_notifications_not_null.sql.sqlite +102 -0
  900. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_actions.sql.postgres +27 -0
  901. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_actions_staging.sql.postgres +27 -0
  902. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_summary.sql.postgres +29 -0
  903. synapse/storage/schema/main/delta/77/14bg_indices_event_stream_ordering.sql +39 -0
  904. synapse/storage/schema/main/delta/78/01_validate_and_update_profiles.py +99 -0
  905. synapse/storage/schema/main/delta/78/02_validate_and_update_user_filters.py +100 -0
  906. synapse/storage/schema/main/delta/78/03_remove_unused_indexes_user_filters.py +72 -0
  907. synapse/storage/schema/main/delta/78/03event_extremities_constraints.py +65 -0
  908. synapse/storage/schema/main/delta/78/04_add_full_user_id_index_user_filters.py +32 -0
  909. synapse/storage/schema/main/delta/79/03_read_write_locks_triggers.sql.postgres +102 -0
  910. synapse/storage/schema/main/delta/79/03_read_write_locks_triggers.sql.sqlite +72 -0
  911. synapse/storage/schema/main/delta/79/04_mitigate_stream_ordering_update_race.py +70 -0
  912. synapse/storage/schema/main/delta/79/05_read_write_locks_triggers.sql.postgres +69 -0
  913. synapse/storage/schema/main/delta/79/05_read_write_locks_triggers.sql.sqlite +65 -0
  914. synapse/storage/schema/main/delta/80/01_users_alter_locked.sql +35 -0
  915. synapse/storage/schema/main/delta/80/02_read_write_locks_unlogged.sql.postgres +30 -0
  916. synapse/storage/schema/main/delta/80/02_scheduled_tasks.sql +47 -0
  917. synapse/storage/schema/main/delta/80/03_read_write_locks_triggers.sql.postgres +37 -0
  918. synapse/storage/schema/main/delta/80/04_read_write_locks_deadlock.sql.postgres +71 -0
  919. synapse/storage/schema/main/delta/82/02_scheduled_tasks_index.sql +35 -0
  920. synapse/storage/schema/main/delta/82/04_add_indices_for_purging_rooms.sql +39 -0
  921. synapse/storage/schema/main/delta/82/05gaps.sql +44 -0
  922. synapse/storage/schema/main/delta/83/01_drop_old_tables.sql +43 -0
  923. synapse/storage/schema/main/delta/83/03_instance_name_receipts.sql.sqlite +17 -0
  924. synapse/storage/schema/main/delta/83/05_cross_signing_key_update_grant.sql +34 -0
  925. synapse/storage/schema/main/delta/83/06_event_push_summary_room.sql +36 -0
  926. synapse/storage/schema/main/delta/84/01_auth_links_stats.sql.postgres +20 -0
  927. synapse/storage/schema/main/delta/84/02_auth_links_index.sql +16 -0
  928. synapse/storage/schema/main/delta/84/03_auth_links_analyze.sql.postgres +16 -0
  929. synapse/storage/schema/main/delta/84/04_access_token_index.sql +15 -0
  930. synapse/storage/schema/main/delta/85/01_add_suspended.sql +14 -0
  931. synapse/storage/schema/main/delta/85/02_add_instance_names.sql +27 -0
  932. synapse/storage/schema/main/delta/85/03_new_sequences.sql.postgres +54 -0
  933. synapse/storage/schema/main/delta/85/04_cleanup_device_federation_outbox.sql +15 -0
  934. synapse/storage/schema/main/delta/85/05_add_instance_names_converted_pos.sql +16 -0
  935. synapse/storage/schema/main/delta/85/06_add_room_reports.sql +20 -0
  936. synapse/storage/schema/main/delta/86/01_authenticate_media.sql +15 -0
  937. synapse/storage/schema/main/delta/86/02_receipts_event_id_index.sql +15 -0
  938. synapse/storage/schema/main/delta/87/01_sliding_sync_memberships.sql +169 -0
  939. synapse/storage/schema/main/delta/87/02_per_connection_state.sql +81 -0
  940. synapse/storage/schema/main/delta/87/03_current_state_index.sql +19 -0
  941. synapse/storage/schema/main/delta/88/01_add_delayed_events.sql +43 -0
  942. synapse/storage/schema/main/delta/88/01_custom_profile_fields.sql +15 -0
  943. synapse/storage/schema/main/delta/88/02_fix_sliding_sync_membership_snapshots_forgotten_column.sql +21 -0
  944. synapse/storage/schema/main/delta/88/03_add_otk_ts_added_index.sql +18 -0
  945. synapse/storage/schema/main/delta/88/04_current_state_delta_index.sql +18 -0
  946. synapse/storage/schema/main/delta/88/05_drop_old_otks.sql.postgres +19 -0
  947. synapse/storage/schema/main/delta/88/05_drop_old_otks.sql.sqlite +19 -0
  948. synapse/storage/schema/main/delta/88/05_sliding_sync_room_config_index.sql +20 -0
  949. synapse/storage/schema/main/delta/88/06_events_received_ts_index.sql +17 -0
  950. synapse/storage/schema/main/delta/89/01_sliding_sync_membership_snapshot_index.sql +15 -0
  951. synapse/storage/schema/main/delta/90/01_add_column_participant_room_memberships_table.sql +16 -0
  952. synapse/storage/schema/main/delta/91/01_media_hash.sql +28 -0
  953. synapse/storage/schema/main/delta/92/01_remove_trigger.sql.postgres +16 -0
  954. synapse/storage/schema/main/delta/92/01_remove_trigger.sql.sqlite +16 -0
  955. synapse/storage/schema/main/delta/92/02_remove_populate_participant_bg_update.sql +17 -0
  956. synapse/storage/schema/main/delta/92/04_ss_membership_snapshot_idx.sql +16 -0
  957. synapse/storage/schema/main/delta/92/04_thread_subscriptions.sql +59 -0
  958. synapse/storage/schema/main/delta/92/04_thread_subscriptions_seq.sql.postgres +19 -0
  959. synapse/storage/schema/main/delta/92/05_fixup_max_depth_cap.sql +17 -0
  960. synapse/storage/schema/main/delta/92/05_thread_subscriptions_comments.sql.postgres +18 -0
  961. synapse/storage/schema/main/delta/92/06_device_federation_inbox_index.sql +16 -0
  962. synapse/storage/schema/main/delta/92/06_threads_last_sent_stream_ordering_comments.sql.postgres +24 -0
  963. synapse/storage/schema/main/delta/92/07_add_user_reports.sql +22 -0
  964. synapse/storage/schema/main/delta/92/07_event_txn_id_device_id_txn_id2.sql +15 -0
  965. synapse/storage/schema/main/delta/92/08_room_ban_redactions.sql +21 -0
  966. synapse/storage/schema/main/delta/92/08_thread_subscriptions_seq_fixup.sql.postgres +19 -0
  967. synapse/storage/schema/main/delta/92/09_thread_subscriptions_update.sql +20 -0
  968. synapse/storage/schema/main/delta/92/09_thread_subscriptions_update.sql.postgres +18 -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 +185 -0
  986. synapse/storage/util/__init__.py +20 -0
  987. synapse/storage/util/id_generators.py +909 -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 +92 -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 +909 -0
  1005. synapse/types/rest/__init__.py +25 -0
  1006. synapse/types/rest/client/__init__.py +415 -0
  1007. synapse/types/state.py +635 -0
  1008. synapse/types/storage/__init__.py +66 -0
  1009. synapse/util/__init__.py +170 -0
  1010. synapse/util/async_helpers.py +1067 -0
  1011. synapse/util/batching_queue.py +202 -0
  1012. synapse/util/caches/__init__.py +300 -0
  1013. synapse/util/caches/cached_call.py +143 -0
  1014. synapse/util/caches/deferred_cache.py +530 -0
  1015. synapse/util/caches/descriptors.py +694 -0
  1016. synapse/util/caches/dictionary_cache.py +350 -0
  1017. synapse/util/caches/expiringcache.py +251 -0
  1018. synapse/util/caches/lrucache.py +977 -0
  1019. synapse/util/caches/response_cache.py +323 -0
  1020. synapse/util/caches/stream_change_cache.py +370 -0
  1021. synapse/util/caches/treecache.py +189 -0
  1022. synapse/util/caches/ttlcache.py +197 -0
  1023. synapse/util/cancellation.py +63 -0
  1024. synapse/util/check_dependencies.py +335 -0
  1025. synapse/util/clock.py +500 -0
  1026. synapse/util/constants.py +22 -0
  1027. synapse/util/daemonize.py +165 -0
  1028. synapse/util/distributor.py +159 -0
  1029. synapse/util/events.py +134 -0
  1030. synapse/util/file_consumer.py +164 -0
  1031. synapse/util/frozenutils.py +57 -0
  1032. synapse/util/gai_resolver.py +180 -0
  1033. synapse/util/hash.py +38 -0
  1034. synapse/util/httpresourcetree.py +108 -0
  1035. synapse/util/iterutils.py +189 -0
  1036. synapse/util/json.py +56 -0
  1037. synapse/util/linked_list.py +156 -0
  1038. synapse/util/logcontext.py +46 -0
  1039. synapse/util/logformatter.py +28 -0
  1040. synapse/util/macaroons.py +325 -0
  1041. synapse/util/manhole.py +191 -0
  1042. synapse/util/metrics.py +340 -0
  1043. synapse/util/module_loader.py +116 -0
  1044. synapse/util/msisdn.py +51 -0
  1045. synapse/util/patch_inline_callbacks.py +250 -0
  1046. synapse/util/pydantic_models.py +56 -0
  1047. synapse/util/ratelimitutils.py +420 -0
  1048. synapse/util/retryutils.py +339 -0
  1049. synapse/util/rlimit.py +42 -0
  1050. synapse/util/rust.py +134 -0
  1051. synapse/util/sentinel.py +21 -0
  1052. synapse/util/stringutils.py +293 -0
  1053. synapse/util/task_scheduler.py +493 -0
  1054. synapse/util/templates.py +126 -0
  1055. synapse/util/threepids.py +123 -0
  1056. synapse/util/wheel_timer.py +112 -0
  1057. synapse/visibility.py +836 -0
@@ -0,0 +1,909 @@
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
+ Optional,
29
+ Sequence,
30
+ TypeVar,
31
+ cast,
32
+ )
33
+
34
+ import attr
35
+ from pydantic import ConfigDict
36
+
37
+ from synapse.api.constants import EventTypes
38
+ from synapse.events import EventBase
39
+ from synapse.types import (
40
+ DeviceListUpdates,
41
+ JsonDict,
42
+ JsonMapping,
43
+ MultiWriterStreamToken,
44
+ Requester,
45
+ RoomStreamToken,
46
+ SlidingSyncStreamToken,
47
+ StrCollection,
48
+ StreamToken,
49
+ ThreadSubscriptionsToken,
50
+ UserID,
51
+ )
52
+ from synapse.types.rest.client import SlidingSyncBody
53
+
54
+ if TYPE_CHECKING:
55
+ from synapse.handlers.relations import BundledAggregations
56
+
57
+ logger = logging.getLogger(__name__)
58
+
59
+
60
+ class SlidingSyncConfig(SlidingSyncBody):
61
+ """
62
+ Inherit from `SlidingSyncBody` since we need all of the same fields and add a few
63
+ extra fields that we need in the handler
64
+ """
65
+
66
+ user: UserID
67
+ requester: Requester
68
+ model_config = ConfigDict(
69
+ extra="ignore",
70
+ frozen=True,
71
+ # Allow custom types like `UserID` to be used in the model.
72
+ arbitrary_types_allowed=True,
73
+ )
74
+
75
+
76
+ class OperationType(Enum):
77
+ """
78
+ Represents the operation types in a Sliding Sync window.
79
+
80
+ Attributes:
81
+ SYNC: Sets a range of entries. Clients SHOULD discard what they previous knew about
82
+ entries in this range.
83
+ INSERT: Sets a single entry. If the position is not empty then clients MUST move
84
+ entries to the left or the right depending on where the closest empty space is.
85
+ DELETE: Remove a single entry. Often comes before an INSERT to allow entries to move
86
+ places.
87
+ INVALIDATE: Remove a range of entries. Clients MAY persist the invalidated range for
88
+ offline support, but they should be treated as empty when additional operations
89
+ which concern indexes in the range arrive from the server.
90
+ """
91
+
92
+ SYNC: Final = "SYNC"
93
+ INSERT: Final = "INSERT"
94
+ DELETE: Final = "DELETE"
95
+ INVALIDATE: Final = "INVALIDATE"
96
+
97
+
98
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
99
+ class SlidingSyncResult:
100
+ """
101
+ The Sliding Sync result to be serialized to JSON for a response.
102
+
103
+ Attributes:
104
+ next_pos: The next position token in the sliding window to request (next_batch).
105
+ lists: Sliding window API. A map of list key to list results.
106
+ rooms: Room subscription API. A map of room ID to room results.
107
+ extensions: Extensions API. A map of extension key to extension results.
108
+ """
109
+
110
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
111
+ class RoomResult:
112
+ """
113
+ Attributes:
114
+ name: Room name or calculated room name.
115
+ avatar: Room avatar
116
+ heroes: List of stripped membership events (containing `user_id` and optionally
117
+ `avatar_url` and `displayname`) for the users used to calculate the room name.
118
+ is_dm: Flag to specify whether the room is a direct-message room (most likely
119
+ between two people).
120
+ initial: Flag which is set when this is the first time the server is sending this
121
+ data on this connection. Clients can use this flag to replace or update
122
+ their local state. When there is an update, servers MUST omit this flag
123
+ entirely and NOT send "initial":false as this is wasteful on bandwidth. The
124
+ absence of this flag means 'false'.
125
+ unstable_expanded_timeline: Flag which is set if we're returning more historic
126
+ events due to the timeline limit having increased. See "XXX: Odd behavior"
127
+ comment ing `synapse.handlers.sliding_sync`.
128
+ required_state: The current state of the room
129
+ timeline: Latest events in the room. The last event is the most recent.
130
+ bundled_aggregations: A mapping of event ID to the bundled aggregations for
131
+ the timeline events above. This allows clients to show accurate reaction
132
+ counts (or edits, threads), even if some of the reaction events were skipped
133
+ over in a gappy sync.
134
+ stripped_state: Stripped state events (for rooms where the usre is
135
+ invited/knocked). Same as `rooms.invite.$room_id.invite_state` in sync v2,
136
+ absent on joined/left rooms
137
+ prev_batch: A token that can be passed as a start parameter to the
138
+ `/rooms/<room_id>/messages` API to retrieve earlier messages.
139
+ limited: True if there are more events than `timeline_limit` looking
140
+ backwards from the `response.pos` to the `request.pos`.
141
+ num_live: The number of timeline events which have just occurred and are not historical.
142
+ The last N events are 'live' and should be treated as such. This is mostly
143
+ useful to determine whether a given @mention event should make a noise or not.
144
+ Clients cannot rely solely on the absence of `initial: true` to determine live
145
+ events because if a room not in the sliding window bumps into the window because
146
+ of an @mention it will have `initial: true` yet contain a single live event
147
+ (with potentially other old events in the timeline).
148
+ bump_stamp: The `stream_ordering` of the last event according to the
149
+ `bump_event_types`. This helps clients sort more readily without them
150
+ needing to pull in a bunch of the timeline to determine the last activity.
151
+ `bump_event_types` is a thing because for example, we don't want display
152
+ name changes to mark the room as unread and bump it to the top. For
153
+ encrypted rooms, we just have to consider any activity as a bump because we
154
+ can't see the content and the client has to figure it out for themselves.
155
+ This may not be included if there hasn't been a change.
156
+ joined_count: The number of users with membership of join, including the client's
157
+ own user ID. (same as sync `v2 m.joined_member_count`)
158
+ invited_count: The number of users with membership of invite. (same as sync v2
159
+ `m.invited_member_count`)
160
+ notification_count: The total number of unread notifications for this room. (same
161
+ as sync v2)
162
+ highlight_count: The number of unread notifications for this room with the highlight
163
+ flag set. (same as sync v2)
164
+ """
165
+
166
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
167
+ class StrippedHero:
168
+ user_id: str
169
+ display_name: Optional[str]
170
+ avatar_url: Optional[str]
171
+
172
+ name: Optional[str]
173
+ avatar: Optional[str]
174
+ heroes: Optional[list[StrippedHero]]
175
+ is_dm: bool
176
+ initial: bool
177
+ unstable_expanded_timeline: bool
178
+ # Should be empty for invite/knock rooms with `stripped_state`
179
+ required_state: list[EventBase]
180
+ # Should be empty for invite/knock rooms with `stripped_state`
181
+ timeline_events: list[EventBase]
182
+ bundled_aggregations: Optional[dict[str, "BundledAggregations"]]
183
+ # Optional because it's only relevant to invite/knock rooms
184
+ stripped_state: list[JsonDict]
185
+ # Only optional because it won't be included for invite/knock rooms with `stripped_state`
186
+ prev_batch: Optional[StreamToken]
187
+ # Only optional because it won't be included for invite/knock rooms with `stripped_state`
188
+ limited: Optional[bool]
189
+ # Only optional because it won't be included for invite/knock rooms with `stripped_state`
190
+ num_live: Optional[int]
191
+ bump_stamp: Optional[int]
192
+ joined_count: Optional[int]
193
+ invited_count: Optional[int]
194
+ notification_count: int
195
+ highlight_count: int
196
+
197
+ def __bool__(self) -> bool:
198
+ return (
199
+ # If this is the first time the client is seeing the room, we should not filter it out
200
+ # under any circumstance.
201
+ self.initial
202
+ # We need to let the client know if any of the info has changed
203
+ or self.name is not None
204
+ or self.avatar is not None
205
+ or bool(self.heroes)
206
+ or self.joined_count is not None
207
+ or self.invited_count is not None
208
+ # We need to let the client know if there are any new events
209
+ or bool(self.required_state)
210
+ or bool(self.timeline_events)
211
+ or bool(self.stripped_state)
212
+ )
213
+
214
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
215
+ class SlidingWindowList:
216
+ """
217
+ Attributes:
218
+ count: The total number of entries in the list. Always present if this list
219
+ is.
220
+ ops: The sliding list operations to perform.
221
+ """
222
+
223
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
224
+ class Operation:
225
+ """
226
+ Attributes:
227
+ op: The operation type to perform.
228
+ range: Which index positions are affected by this operation. These are
229
+ both inclusive.
230
+ room_ids: Which room IDs are affected by this operation. These IDs match
231
+ up to the positions in the `range`, so the last room ID in this list
232
+ matches the 9th index. The room data is held in a separate object.
233
+ """
234
+
235
+ op: OperationType
236
+ range: tuple[int, int]
237
+ room_ids: list[str]
238
+
239
+ count: int
240
+ ops: list[Operation]
241
+
242
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
243
+ class Extensions:
244
+ """Responses for extensions
245
+
246
+ Attributes:
247
+ to_device: The to-device extension (MSC3885)
248
+ e2ee: The E2EE device extension (MSC3884)
249
+ """
250
+
251
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
252
+ class ToDeviceExtension:
253
+ """The to-device extension (MSC3885)
254
+
255
+ Attributes:
256
+ next_batch: The to-device stream token the client should use
257
+ to get more results
258
+ events: A list of to-device messages for the client
259
+ """
260
+
261
+ next_batch: str
262
+ events: Sequence[JsonMapping]
263
+
264
+ def __bool__(self) -> bool:
265
+ return bool(self.events)
266
+
267
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
268
+ class E2eeExtension:
269
+ """The E2EE device extension (MSC3884)
270
+
271
+ Attributes:
272
+ device_list_updates: List of user_ids whose devices have changed or left (only
273
+ present on incremental syncs).
274
+ device_one_time_keys_count: Map from key algorithm to the number of
275
+ unclaimed one-time keys currently held on the server for this device. If
276
+ an algorithm is unlisted, the count for that algorithm is assumed to be
277
+ zero. If this entire parameter is missing, the count for all algorithms
278
+ is assumed to be zero.
279
+ device_unused_fallback_key_types: List of unused fallback key algorithms
280
+ for this device.
281
+ """
282
+
283
+ # Only present on incremental syncs
284
+ device_list_updates: Optional[DeviceListUpdates]
285
+ device_one_time_keys_count: Mapping[str, int]
286
+ device_unused_fallback_key_types: Sequence[str]
287
+
288
+ def __bool__(self) -> bool:
289
+ # Note that "signed_curve25519" is always returned in key count responses
290
+ # regardless of whether we uploaded any keys for it. This is necessary until
291
+ # https://github.com/matrix-org/matrix-doc/issues/3298 is fixed.
292
+ #
293
+ # Also related:
294
+ # https://github.com/element-hq/element-android/issues/3725 and
295
+ # https://github.com/matrix-org/synapse/issues/10456
296
+ default_otk = self.device_one_time_keys_count.get("signed_curve25519")
297
+ more_than_default_otk = len(self.device_one_time_keys_count) > 1 or (
298
+ default_otk is not None and default_otk > 0
299
+ )
300
+
301
+ return bool(
302
+ more_than_default_otk
303
+ or self.device_list_updates
304
+ or self.device_unused_fallback_key_types
305
+ )
306
+
307
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
308
+ class AccountDataExtension:
309
+ """The Account Data extension (MSC3959)
310
+
311
+ Attributes:
312
+ global_account_data_map: Mapping from `type` to `content` of global
313
+ account data events.
314
+ account_data_by_room_map: Mapping from room_id to mapping of `type` to
315
+ `content` of room account data events.
316
+ """
317
+
318
+ global_account_data_map: Mapping[str, JsonMapping]
319
+ account_data_by_room_map: Mapping[str, Mapping[str, JsonMapping]]
320
+
321
+ def __bool__(self) -> bool:
322
+ return bool(
323
+ self.global_account_data_map or self.account_data_by_room_map
324
+ )
325
+
326
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
327
+ class ReceiptsExtension:
328
+ """The Receipts extension (MSC3960)
329
+
330
+ Attributes:
331
+ room_id_to_receipt_map: Mapping from room_id to `m.receipt` ephemeral
332
+ event (type, content)
333
+ """
334
+
335
+ room_id_to_receipt_map: Mapping[str, JsonMapping]
336
+
337
+ def __bool__(self) -> bool:
338
+ return bool(self.room_id_to_receipt_map)
339
+
340
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
341
+ class TypingExtension:
342
+ """The Typing Notification extension (MSC3961)
343
+
344
+ Attributes:
345
+ room_id_to_typing_map: Mapping from room_id to `m.typing` ephemeral
346
+ event (type, content)
347
+ """
348
+
349
+ room_id_to_typing_map: Mapping[str, JsonMapping]
350
+
351
+ def __bool__(self) -> bool:
352
+ return bool(self.room_id_to_typing_map)
353
+
354
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
355
+ class ThreadSubscriptionsExtension:
356
+ """The Thread Subscriptions extension (MSC4308)
357
+
358
+ Attributes:
359
+ subscribed: map (room_id -> thread_root_id -> info) of new or changed subscriptions
360
+ unsubscribed: map (room_id -> thread_root_id -> info) of new unsubscriptions
361
+ prev_batch: if present, there is a gap and the client can use this token to backpaginate
362
+ """
363
+
364
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
365
+ class ThreadSubscription:
366
+ # always present when `subscribed`
367
+ automatic: Optional[bool]
368
+
369
+ # the same as our stream_id; useful for clients to resolve
370
+ # race conditions locally
371
+ bump_stamp: int
372
+
373
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
374
+ class ThreadUnsubscription:
375
+ # the same as our stream_id; useful for clients to resolve
376
+ # race conditions locally
377
+ bump_stamp: int
378
+
379
+ # room_id -> event_id (of thread root) -> the subscription change
380
+ subscribed: Optional[Mapping[str, Mapping[str, ThreadSubscription]]]
381
+ # room_id -> event_id (of thread root) -> the unsubscription
382
+ unsubscribed: Optional[Mapping[str, Mapping[str, ThreadUnsubscription]]]
383
+ prev_batch: Optional[ThreadSubscriptionsToken]
384
+
385
+ def __bool__(self) -> bool:
386
+ return (
387
+ bool(self.subscribed)
388
+ or bool(self.unsubscribed)
389
+ or bool(self.prev_batch)
390
+ )
391
+
392
+ to_device: Optional[ToDeviceExtension] = None
393
+ e2ee: Optional[E2eeExtension] = None
394
+ account_data: Optional[AccountDataExtension] = None
395
+ receipts: Optional[ReceiptsExtension] = None
396
+ typing: Optional[TypingExtension] = None
397
+ thread_subscriptions: Optional[ThreadSubscriptionsExtension] = None
398
+
399
+ def __bool__(self) -> bool:
400
+ return bool(
401
+ self.to_device
402
+ or self.e2ee
403
+ or self.account_data
404
+ or self.receipts
405
+ or self.typing
406
+ or self.thread_subscriptions
407
+ )
408
+
409
+ next_pos: SlidingSyncStreamToken
410
+ lists: Mapping[str, SlidingWindowList]
411
+ rooms: dict[str, RoomResult]
412
+ extensions: Extensions
413
+
414
+ def __bool__(self) -> bool:
415
+ """Make the result appear empty if there are no updates. This is used
416
+ to tell if the notifier needs to wait for more events when polling for
417
+ events.
418
+ """
419
+ # We don't include `self.lists` here, as a) `lists` is always non-empty even if
420
+ # there are no changes, and b) since we're sorting rooms by `stream_ordering` of
421
+ # the latest activity, anything that would cause the order to change would end
422
+ # up in `self.rooms` and cause us to send down the change.
423
+ return bool(self.rooms or self.extensions)
424
+
425
+ @staticmethod
426
+ def empty(next_pos: SlidingSyncStreamToken) -> "SlidingSyncResult":
427
+ "Return a new empty result"
428
+ return SlidingSyncResult(
429
+ next_pos=next_pos,
430
+ lists={},
431
+ rooms={},
432
+ extensions=SlidingSyncResult.Extensions(),
433
+ )
434
+
435
+
436
+ class StateValues:
437
+ """
438
+ Understood values of the (type, state_key) tuple in `required_state`.
439
+ """
440
+
441
+ # Include all state events of the given type
442
+ WILDCARD: Final = "*"
443
+ # Lazy-load room membership events (include room membership events for any event
444
+ # `sender` or membership change target in the timeline). We only give special
445
+ # meaning to this value when it's a `state_key`.
446
+ LAZY: Final = "$LAZY"
447
+ # Subsitute with the requester's user ID. Typically used by clients to get
448
+ # the user's membership.
449
+ ME: Final = "$ME"
450
+
451
+
452
+ # We can't freeze this class because we want to update it in place with the
453
+ # de-duplicated data.
454
+ @attr.s(slots=True, auto_attribs=True, frozen=True)
455
+ class RoomSyncConfig:
456
+ """
457
+ Holds the config for what data we should fetch for a room in the sync response.
458
+
459
+ Attributes:
460
+ timeline_limit: The maximum number of events to return in the timeline.
461
+
462
+ required_state_map: Map from state event type to state_keys requested for the
463
+ room. The values are close to `StateKey` but actually use a syntax where you
464
+ can provide `*` wildcard and `$LAZY` for lazy-loading room members.
465
+ """
466
+
467
+ timeline_limit: int
468
+ required_state_map: Mapping[str, AbstractSet[str]]
469
+
470
+ @classmethod
471
+ def from_room_config(
472
+ cls,
473
+ room_params: SlidingSyncConfig.CommonRoomParameters,
474
+ ) -> "RoomSyncConfig":
475
+ """
476
+ Create a `RoomSyncConfig` from a `SlidingSyncList`/`RoomSubscription` config.
477
+
478
+ Args:
479
+ room_params: `SlidingSyncConfig.SlidingSyncList` or `SlidingSyncConfig.RoomSubscription`
480
+ """
481
+ required_state_map: dict[str, set[str]] = {}
482
+ for (
483
+ state_type,
484
+ state_key,
485
+ ) in room_params.required_state:
486
+ # If we already have a wildcard for this specific `state_key`, we don't need
487
+ # to add it since the wildcard already covers it.
488
+ if state_key in required_state_map.get(StateValues.WILDCARD, set()):
489
+ continue
490
+
491
+ # If we already have a wildcard `state_key` for this `state_type`, we don't need
492
+ # to add anything else
493
+ if StateValues.WILDCARD in required_state_map.get(state_type, set()):
494
+ continue
495
+
496
+ # If we're getting wildcards for the `state_type` and `state_key`, that's
497
+ # all that matters so get rid of any other entries
498
+ if state_type == StateValues.WILDCARD and state_key == StateValues.WILDCARD:
499
+ required_state_map = {StateValues.WILDCARD: {StateValues.WILDCARD}}
500
+ # We can break, since we don't need to add anything else
501
+ break
502
+
503
+ # If we're getting a wildcard for the `state_type`, get rid of any other
504
+ # entries with the same `state_key`, since the wildcard will cover it already.
505
+ elif state_type == StateValues.WILDCARD:
506
+ # Get rid of any entries that match the `state_key`
507
+ #
508
+ # Make a copy so we don't run into an error: `dictionary changed size
509
+ # during iteration`, when we remove items
510
+ for (
511
+ existing_state_type,
512
+ existing_state_key_set,
513
+ ) in list(required_state_map.items()):
514
+ # Make a copy so we don't run into an error: `Set changed size during
515
+ # iteration`, when we filter out and remove items
516
+ for existing_state_key in existing_state_key_set.copy():
517
+ if existing_state_key == state_key:
518
+ existing_state_key_set.remove(state_key)
519
+
520
+ # If we've the left the `set()` empty, remove it from the map
521
+ if existing_state_key_set == set():
522
+ required_state_map.pop(existing_state_type, None)
523
+
524
+ # If we're getting a wildcard `state_key`, get rid of any other state_keys
525
+ # for this `state_type` since the wildcard will cover it already.
526
+ if state_key == StateValues.WILDCARD:
527
+ required_state_map[state_type] = {state_key}
528
+ # Otherwise, just add it to the set
529
+ else:
530
+ if required_state_map.get(state_type) is None:
531
+ required_state_map[state_type] = {state_key}
532
+ else:
533
+ required_state_map[state_type].add(state_key)
534
+
535
+ return cls(
536
+ timeline_limit=room_params.timeline_limit,
537
+ required_state_map=required_state_map,
538
+ )
539
+
540
+ def combine_room_sync_config(
541
+ self, other_room_sync_config: "RoomSyncConfig"
542
+ ) -> "RoomSyncConfig":
543
+ """
544
+ Combine this `RoomSyncConfig` with another `RoomSyncConfig` and return the
545
+ superset union of the two.
546
+ """
547
+ timeline_limit = self.timeline_limit
548
+ required_state_map = {
549
+ event_type: set(state_keys)
550
+ for event_type, state_keys in self.required_state_map.items()
551
+ }
552
+
553
+ # Take the highest timeline limit
554
+ if timeline_limit < other_room_sync_config.timeline_limit:
555
+ timeline_limit = other_room_sync_config.timeline_limit
556
+
557
+ # Union the required state
558
+ for (
559
+ state_type,
560
+ state_key_set,
561
+ ) in other_room_sync_config.required_state_map.items():
562
+ # If we already have a wildcard for everything, we don't need to add
563
+ # anything else
564
+ if StateValues.WILDCARD in required_state_map.get(
565
+ StateValues.WILDCARD, set()
566
+ ):
567
+ break
568
+
569
+ # If we already have a wildcard `state_key` for this `state_type`, we don't need
570
+ # to add anything else
571
+ if StateValues.WILDCARD in required_state_map.get(state_type, set()):
572
+ continue
573
+
574
+ # If we're getting wildcards for the `state_type` and `state_key`, that's
575
+ # all that matters so get rid of any other entries
576
+ if (
577
+ state_type == StateValues.WILDCARD
578
+ and StateValues.WILDCARD in state_key_set
579
+ ):
580
+ required_state_map = {state_type: {StateValues.WILDCARD}}
581
+ # We can break, since we don't need to add anything else
582
+ break
583
+
584
+ for state_key in state_key_set:
585
+ # If we already have a wildcard for this specific `state_key`, we don't need
586
+ # to add it since the wildcard already covers it.
587
+ if state_key in required_state_map.get(StateValues.WILDCARD, set()):
588
+ continue
589
+
590
+ # If we're getting a wildcard for the `state_type`, get rid of any other
591
+ # entries with the same `state_key`, since the wildcard will cover it already.
592
+ if state_type == StateValues.WILDCARD:
593
+ # Get rid of any entries that match the `state_key`
594
+ #
595
+ # Make a copy so we don't run into an error: `dictionary changed size
596
+ # during iteration`, when we remove items
597
+ for existing_state_type, existing_state_key_set in list(
598
+ required_state_map.items()
599
+ ):
600
+ # Make a copy so we don't run into an error: `Set changed size during
601
+ # iteration`, when we filter out and remove items
602
+ for existing_state_key in existing_state_key_set.copy():
603
+ if existing_state_key == state_key:
604
+ existing_state_key_set.remove(state_key)
605
+
606
+ # If we've the left the `set()` empty, remove it from the map
607
+ if existing_state_key_set == set():
608
+ required_state_map.pop(existing_state_type, None)
609
+
610
+ # If we're getting a wildcard `state_key`, get rid of any other state_keys
611
+ # for this `state_type` since the wildcard will cover it already.
612
+ if state_key == StateValues.WILDCARD:
613
+ required_state_map[state_type] = {state_key}
614
+ break
615
+ # Otherwise, just add it to the set
616
+ else:
617
+ if required_state_map.get(state_type) is None:
618
+ required_state_map[state_type] = {state_key}
619
+ else:
620
+ required_state_map[state_type].add(state_key)
621
+
622
+ return RoomSyncConfig(timeline_limit, required_state_map)
623
+
624
+ def must_await_full_state(
625
+ self,
626
+ is_mine_id: Callable[[str], bool],
627
+ ) -> bool:
628
+ """
629
+ Check if we have a we're only requesting `required_state` which is completely
630
+ satisfied even with partial state, then we don't need to `await_full_state` before
631
+ we can return it.
632
+
633
+ Also see `StateFilter.must_await_full_state(...)` for comparison
634
+
635
+ Partially-stated rooms should have all state events except for remote membership
636
+ events so if we require a remote membership event anywhere, then we need to
637
+ return `True` (requires full state).
638
+
639
+ Args:
640
+ is_mine_id: a callable which confirms if a given state_key matches a mxid
641
+ of a local user
642
+ """
643
+ wildcard_state_keys = self.required_state_map.get(StateValues.WILDCARD)
644
+ # Requesting *all* state in the room so we have to wait
645
+ if (
646
+ wildcard_state_keys is not None
647
+ and StateValues.WILDCARD in wildcard_state_keys
648
+ ):
649
+ return True
650
+
651
+ # If the wildcards don't refer to remote user IDs, then we don't need to wait
652
+ # for full state.
653
+ if wildcard_state_keys is not None:
654
+ for possible_user_id in wildcard_state_keys:
655
+ if not possible_user_id[0].startswith(UserID.SIGIL):
656
+ # Not a user ID
657
+ continue
658
+
659
+ localpart_hostname = possible_user_id.split(":", 1)
660
+ if len(localpart_hostname) < 2:
661
+ # Not a user ID
662
+ continue
663
+
664
+ if not is_mine_id(possible_user_id):
665
+ return True
666
+
667
+ membership_state_keys = self.required_state_map.get(EventTypes.Member)
668
+ # We aren't requesting any membership events at all so the partial state will
669
+ # cover us.
670
+ if membership_state_keys is None:
671
+ return False
672
+
673
+ # If we're requesting entirely local users, the partial state will cover us.
674
+ for user_id in membership_state_keys:
675
+ if user_id == StateValues.ME:
676
+ continue
677
+ # We're lazy-loading membership so we can just return the state we have.
678
+ # Lazy-loading means we include membership for any event `sender` or
679
+ # membership change target in the timeline but since we had to auth those
680
+ # timeline events, we will have the membership state for them (including
681
+ # from remote senders).
682
+ elif user_id == StateValues.LAZY:
683
+ continue
684
+ elif user_id == StateValues.WILDCARD:
685
+ return False
686
+ elif not is_mine_id(user_id):
687
+ return True
688
+
689
+ # Local users only so the partial state will cover us.
690
+ return False
691
+
692
+
693
+ class HaveSentRoomFlag(Enum):
694
+ """Flag for whether we have sent the room down a sliding sync connection.
695
+
696
+ The valid state changes here are:
697
+ NEVER -> LIVE
698
+ LIVE -> PREVIOUSLY
699
+ PREVIOUSLY -> LIVE
700
+ """
701
+
702
+ # The room has never been sent down (or we have forgotten we have sent it
703
+ # down).
704
+ NEVER = "never"
705
+
706
+ # We have previously sent the room down, but there are updates that we
707
+ # haven't sent down.
708
+ PREVIOUSLY = "previously"
709
+
710
+ # We have sent the room down and the client has received all updates.
711
+ LIVE = "live"
712
+
713
+
714
+ T = TypeVar("T", str, RoomStreamToken, MultiWriterStreamToken, int)
715
+
716
+
717
+ @attr.s(auto_attribs=True, slots=True, frozen=True)
718
+ class HaveSentRoom(Generic[T]):
719
+ """Whether we have sent the room data down a sliding sync connection.
720
+
721
+ We are generic over the type of token used, e.g. `RoomStreamToken` or
722
+ `MultiWriterStreamToken`.
723
+
724
+ Attributes:
725
+ status: Flag of if we have or haven't sent down the room
726
+ last_token: If the flag is `PREVIOUSLY` then this is non-null and
727
+ contains the last stream token of the last updates we sent down
728
+ the room, i.e. we still need to send everything since then to the
729
+ client.
730
+ """
731
+
732
+ status: HaveSentRoomFlag
733
+ last_token: Optional[T]
734
+
735
+ @staticmethod
736
+ def live() -> "HaveSentRoom[T]":
737
+ return HaveSentRoom(HaveSentRoomFlag.LIVE, None)
738
+
739
+ @staticmethod
740
+ def previously(last_token: T) -> "HaveSentRoom[T]":
741
+ """Constructor for `PREVIOUSLY` flag."""
742
+ return HaveSentRoom(HaveSentRoomFlag.PREVIOUSLY, last_token)
743
+
744
+ @staticmethod
745
+ def never() -> "HaveSentRoom[T]":
746
+ # We use a singleton to avoid repeatedly instantiating new `never`
747
+ # values.
748
+ return _HAVE_SENT_ROOM_NEVER
749
+
750
+
751
+ _HAVE_SENT_ROOM_NEVER: HaveSentRoom[Any] = HaveSentRoom(HaveSentRoomFlag.NEVER, None)
752
+
753
+
754
+ @attr.s(auto_attribs=True, slots=True, frozen=True)
755
+ class RoomStatusMap(Generic[T]):
756
+ """For a given stream, e.g. events, records what we have or have not sent
757
+ down for that stream in a given room."""
758
+
759
+ # `room_id` -> `HaveSentRoom`
760
+ _statuses: Mapping[str, HaveSentRoom[T]] = attr.Factory(dict)
761
+
762
+ def have_sent_room(self, room_id: str) -> HaveSentRoom[T]:
763
+ """Return whether we have previously sent the room down"""
764
+ return self._statuses.get(room_id, HaveSentRoom.never())
765
+
766
+ def get_mutable(self) -> "MutableRoomStatusMap[T]":
767
+ """Get a mutable copy of this state."""
768
+ return MutableRoomStatusMap(
769
+ statuses=self._statuses,
770
+ )
771
+
772
+ def copy(self) -> "RoomStatusMap[T]":
773
+ """Make a copy of the class. Useful for converting from a mutable to
774
+ immutable version."""
775
+
776
+ return RoomStatusMap(statuses=dict(self._statuses))
777
+
778
+ def __len__(self) -> int:
779
+ return len(self._statuses)
780
+
781
+
782
+ class MutableRoomStatusMap(RoomStatusMap[T]):
783
+ """A mutable version of `RoomStatusMap`"""
784
+
785
+ # We use a ChainMap here so that we can easily track what has been updated
786
+ # and what hasn't. Note that when we persist the per connection state this
787
+ # will get flattened to a normal dict (via calling `.copy()`)
788
+ _statuses: typing.ChainMap[str, HaveSentRoom[T]]
789
+
790
+ def __init__(
791
+ self,
792
+ statuses: Mapping[str, HaveSentRoom[T]],
793
+ ) -> None:
794
+ # ChainMap requires a mutable mapping, but we're not actually going to
795
+ # mutate it.
796
+ statuses = cast(MutableMapping, statuses)
797
+
798
+ super().__init__(
799
+ statuses=ChainMap({}, statuses),
800
+ )
801
+
802
+ def get_updates(self) -> Mapping[str, HaveSentRoom[T]]:
803
+ """Return only the changes that were made"""
804
+ return self._statuses.maps[0]
805
+
806
+ def record_sent_rooms(self, room_ids: StrCollection) -> None:
807
+ """Record that we have sent these rooms in the response"""
808
+ for room_id in room_ids:
809
+ current_status = self._statuses.get(room_id, HaveSentRoom.never())
810
+ if current_status.status == HaveSentRoomFlag.LIVE:
811
+ continue
812
+
813
+ self._statuses[room_id] = HaveSentRoom.live()
814
+
815
+ def record_unsent_rooms(self, room_ids: StrCollection, from_token: T) -> None:
816
+ """Record that we have not sent these rooms in the response, but there
817
+ have been updates.
818
+ """
819
+ # Whether we add/update the entries for unsent rooms depends on the
820
+ # existing entry:
821
+ # - LIVE: We have previously sent down everything up to
822
+ # `last_room_token, so we update the entry to be `PREVIOUSLY` with
823
+ # `last_room_token`.
824
+ # - PREVIOUSLY: We have previously sent down everything up to *a*
825
+ # given token, so we don't need to update the entry.
826
+ # - NEVER: We have never previously sent down the room, and we haven't
827
+ # sent anything down this time either so we leave it as NEVER.
828
+
829
+ for room_id in room_ids:
830
+ current_status = self._statuses.get(room_id, HaveSentRoom.never())
831
+ if current_status.status != HaveSentRoomFlag.LIVE:
832
+ continue
833
+
834
+ self._statuses[room_id] = HaveSentRoom.previously(from_token)
835
+
836
+
837
+ @attr.s(auto_attribs=True, frozen=True)
838
+ class PerConnectionState:
839
+ """The per-connection state. A snapshot of what we've sent down the
840
+ connection before.
841
+
842
+ Currently, we track whether we've sent down various aspects of a given room
843
+ before.
844
+
845
+ We use the `rooms` field to store the position in the events stream for each
846
+ room that we've previously sent to the client before. On the next request
847
+ that includes the room, we can then send only what's changed since that
848
+ recorded position.
849
+
850
+ Same goes for the `receipts` field so we only need to send the new receipts
851
+ since the last time you made a sync request.
852
+
853
+ Attributes:
854
+ rooms: The status of each room for the events stream.
855
+ receipts: The status of each room for the receipts stream.
856
+ room_configs: Map from room_id to the `RoomSyncConfig` of all
857
+ rooms that we have previously sent down.
858
+ """
859
+
860
+ rooms: RoomStatusMap[RoomStreamToken] = attr.Factory(RoomStatusMap)
861
+ receipts: RoomStatusMap[MultiWriterStreamToken] = attr.Factory(RoomStatusMap)
862
+ account_data: RoomStatusMap[int] = attr.Factory(RoomStatusMap)
863
+
864
+ room_configs: Mapping[str, RoomSyncConfig] = attr.Factory(dict)
865
+
866
+ def get_mutable(self) -> "MutablePerConnectionState":
867
+ """Get a mutable copy of this state."""
868
+ room_configs = cast(MutableMapping[str, RoomSyncConfig], self.room_configs)
869
+
870
+ return MutablePerConnectionState(
871
+ rooms=self.rooms.get_mutable(),
872
+ receipts=self.receipts.get_mutable(),
873
+ account_data=self.account_data.get_mutable(),
874
+ room_configs=ChainMap({}, room_configs),
875
+ )
876
+
877
+ def copy(self) -> "PerConnectionState":
878
+ return PerConnectionState(
879
+ rooms=self.rooms.copy(),
880
+ receipts=self.receipts.copy(),
881
+ account_data=self.account_data.copy(),
882
+ room_configs=dict(self.room_configs),
883
+ )
884
+
885
+ def __len__(self) -> int:
886
+ return len(self.rooms) + len(self.receipts) + len(self.room_configs)
887
+
888
+
889
+ @attr.s(auto_attribs=True)
890
+ class MutablePerConnectionState(PerConnectionState):
891
+ """A mutable version of `PerConnectionState`"""
892
+
893
+ rooms: MutableRoomStatusMap[RoomStreamToken]
894
+ receipts: MutableRoomStatusMap[MultiWriterStreamToken]
895
+ account_data: MutableRoomStatusMap[int]
896
+
897
+ room_configs: typing.ChainMap[str, RoomSyncConfig]
898
+
899
+ def has_updates(self) -> bool:
900
+ return (
901
+ bool(self.rooms.get_updates())
902
+ or bool(self.receipts.get_updates())
903
+ or bool(self.account_data.get_updates())
904
+ or bool(self.get_room_config_updates())
905
+ )
906
+
907
+ def get_room_config_updates(self) -> Mapping[str, RoomSyncConfig]:
908
+ """Get updates to the room sync config"""
909
+ return self.room_configs.maps[0]