gitextract_pt5yit7t/ ├── .dockerignore ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── CONTRIBUTING.md │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ ├── SECURITY.md │ ├── dependabot.yml │ └── workflows/ │ ├── reuse.yml │ └── workflow.yml ├── .gitignore ├── .prettierignore ├── .watchmanconfig ├── LICENSE ├── LICENSES/ │ ├── Apache-2.0.txt │ ├── BSD-2-Clause.txt │ ├── CC0-1.0.txt │ ├── MIT.txt │ └── OFL-1.1.txt ├── README.md ├── REUSE.toml ├── docker/ │ ├── Dockerfile │ ├── Dockerfile.build │ ├── Dockerfile.subpath-admin │ ├── docker-compose-dev.yml │ └── docker-compose.yml ├── docs/ │ ├── README.md │ ├── apis.md │ ├── availability.md │ ├── components.md │ ├── config.md │ ├── configurable-columns.md │ ├── cors-credentials.md │ ├── csv-import.md │ ├── custom-menu.md │ ├── event-reports.md │ ├── external-auth-provider.md │ ├── federation.md │ ├── media.md │ ├── prefill-login-form.md │ ├── registration-tokens.md │ ├── restrict-hs.md │ ├── reverse-proxy.md │ ├── room-management.md │ ├── screenshots/ │ │ ├── README.md │ │ └── prepare.js │ ├── server-statistics.md │ ├── system-users.md │ ├── testdata/ │ │ ├── element/ │ │ │ ├── config.json │ │ │ └── nginx.conf │ │ ├── mas/ │ │ │ └── config.yaml │ │ ├── nginx/ │ │ │ └── nginx.conf │ │ ├── postgres.initdb/ │ │ │ └── mas.sql │ │ └── synapse/ │ │ ├── homeserver.yaml │ │ ├── synapse.log.config │ │ └── synapse.signing.key │ ├── update-api-docs.ts │ ├── user-badges.md │ ├── user-management.md │ ├── user-search.md │ └── well-known-discovery.md ├── eslint.config.js ├── justfile ├── package.json ├── public/ │ ├── config.json │ ├── data/ │ │ └── example.csv │ └── robots.txt ├── src/ │ ├── App.test.tsx │ ├── App.tsx │ ├── Context.tsx │ ├── TEST_COVERAGE_TODO.md │ ├── assets/ │ │ ├── fonts.css │ │ └── theme.ts │ ├── components/ │ │ ├── MatrixWordmark.tsx │ │ ├── README.md │ │ ├── etke.cc/ │ │ │ ├── BillingPage.tsx │ │ │ ├── BillingStatusBadge.tsx │ │ │ ├── ComponentsPage.tsx │ │ │ ├── CurrentlyRunningCommand.tsx │ │ │ ├── EtkeAttribution.test.tsx │ │ │ ├── EtkeAttribution.tsx │ │ │ ├── InstanceConfig.tsx │ │ │ ├── README.md │ │ │ ├── RichTextEditor.tsx │ │ │ ├── ServerActionsPage.tsx │ │ │ ├── ServerCommandsPanel.tsx │ │ │ ├── ServerNotificationsBadge.test.tsx │ │ │ ├── ServerNotificationsBadge.tsx │ │ │ ├── ServerNotificationsPage.tsx │ │ │ ├── ServerNotificationsUnavailable.test.tsx │ │ │ ├── ServerNotificationsUnavailable.tsx │ │ │ ├── ServerStatusBadge.test.tsx │ │ │ ├── ServerStatusBadge.tsx │ │ │ ├── ServerStatusPage.test.tsx │ │ │ ├── ServerStatusPage.tsx │ │ │ ├── SupportAttachments.tsx │ │ │ ├── SupportPage.tsx │ │ │ ├── SupportRequestPage.tsx │ │ │ ├── hooks/ │ │ │ │ ├── useServerCommands.ts │ │ │ │ └── useUnits.ts │ │ │ └── schedules/ │ │ │ ├── components/ │ │ │ │ ├── recurring/ │ │ │ │ │ ├── RecurringCommandEdit.tsx │ │ │ │ │ ├── RecurringCommandsList.tsx │ │ │ │ │ └── RecurringDeleteButton.tsx │ │ │ │ └── scheduled/ │ │ │ │ ├── ScheduledCommandEdit.tsx │ │ │ │ ├── ScheduledCommandShow.tsx │ │ │ │ ├── ScheduledCommandsList.tsx │ │ │ │ └── ScheduledDeleteButton.tsx │ │ │ └── hooks/ │ │ │ ├── useRecurringCommands.tsx │ │ │ └── useScheduledCommands.tsx │ │ ├── hooks/ │ │ │ ├── useDocTitle.test.tsx │ │ │ └── useDocTitle.tsx │ │ ├── layout/ │ │ │ ├── AdminLayout.test.tsx │ │ │ ├── AdminLayout.tsx │ │ │ ├── Datagrid.test.tsx │ │ │ ├── Datagrid.tsx │ │ │ ├── EmptyState.test.tsx │ │ │ ├── EmptyState.tsx │ │ │ ├── Footer.test.tsx │ │ │ ├── Footer.tsx │ │ │ ├── List.tsx │ │ │ ├── LoginFormBox.tsx │ │ │ └── index.ts │ │ ├── media/ │ │ │ ├── DeleteMediaButton.tsx │ │ │ ├── ProtectMediaButton.tsx │ │ │ ├── PurgeRemoteMediaButton.tsx │ │ │ ├── QuarantineMediaButton.tsx │ │ │ ├── ViewMedia.tsx │ │ │ └── index.ts │ │ ├── rooms/ │ │ │ ├── EventLookupDialog.tsx │ │ │ ├── RoomHierarchy.test.ts │ │ │ ├── RoomHierarchy.tsx │ │ │ └── RoomMessages.tsx │ │ ├── user-import/ │ │ │ ├── ConflictModeCard.tsx │ │ │ ├── ErrorsCard.tsx │ │ │ ├── ResultsCard.tsx │ │ │ ├── StartImportCard.tsx │ │ │ ├── StatsCard.tsx │ │ │ ├── UploadCard.tsx │ │ │ ├── UserImport.tsx │ │ │ ├── types.ts │ │ │ ├── useImportFile.test.ts │ │ │ └── useImportFile.tsx │ │ └── users/ │ │ ├── AdminClientConfigItems.tsx │ │ ├── DeviceDisplayNameInput.tsx │ │ ├── ExperimentalFeatures.tsx │ │ ├── ServerNotices.tsx │ │ ├── UserAccountData.tsx │ │ ├── UserCounts.tsx │ │ ├── UserRateLimits.tsx │ │ ├── buttons/ │ │ │ ├── AllowCrossSigningButton.tsx │ │ │ ├── BlockRoomButton.tsx │ │ │ ├── DeleteAllMediaButton.tsx │ │ │ ├── DeleteRoomButton.tsx │ │ │ ├── DeleteUserButton.tsx │ │ │ ├── DeviceCreateButton.tsx │ │ │ ├── DeviceRemoveButton.tsx │ │ │ ├── FindUserButton.tsx │ │ │ ├── LoginAsUserButton.tsx │ │ │ ├── PurgeHistoryButton.tsx │ │ │ ├── QuarantineAllMediaButton.tsx │ │ │ ├── RenewAccountValidityButton.tsx │ │ │ └── ResetPasswordButton.tsx │ │ └── fields/ │ │ ├── AvatarField.test.tsx │ │ ├── AvatarField.tsx │ │ └── EditableAvatarField.tsx │ ├── entrypoints/ │ │ ├── auth-callback.html │ │ └── index.html │ ├── i18n/ │ │ ├── README.md │ │ ├── de/ │ │ │ ├── base.ts │ │ │ ├── common.ts │ │ │ ├── index.ts │ │ │ ├── mas.ts │ │ │ ├── misc_resources.ts │ │ │ ├── reports.ts │ │ │ ├── rooms.ts │ │ │ └── users.ts │ │ ├── en/ │ │ │ ├── common.ts │ │ │ ├── index.ts │ │ │ ├── mas.ts │ │ │ ├── misc_resources.ts │ │ │ ├── reports.ts │ │ │ ├── rooms.ts │ │ │ └── users.ts │ │ ├── fa/ │ │ │ ├── base.ts │ │ │ ├── common.ts │ │ │ ├── index.ts │ │ │ ├── mas.ts │ │ │ ├── misc_resources.ts │ │ │ ├── reports.ts │ │ │ ├── rooms.ts │ │ │ └── users.ts │ │ ├── fr/ │ │ │ ├── common.ts │ │ │ ├── index.ts │ │ │ ├── mas.ts │ │ │ ├── misc_resources.ts │ │ │ ├── reports.ts │ │ │ ├── rooms.ts │ │ │ └── users.ts │ │ ├── i18n-keys.test.ts │ │ ├── index.test.ts │ │ ├── index.ts │ │ ├── it/ │ │ │ ├── base.ts │ │ │ ├── common.ts │ │ │ ├── index.ts │ │ │ ├── mas.ts │ │ │ ├── misc_resources.ts │ │ │ ├── reports.ts │ │ │ ├── rooms.ts │ │ │ └── users.ts │ │ ├── ja/ │ │ │ ├── base.ts │ │ │ ├── common.ts │ │ │ ├── index.ts │ │ │ ├── mas.ts │ │ │ ├── misc_resources.ts │ │ │ ├── reports.ts │ │ │ ├── rooms.ts │ │ │ └── users.ts │ │ ├── pt/ │ │ │ ├── base.ts │ │ │ ├── common.ts │ │ │ ├── index.ts │ │ │ ├── mas.ts │ │ │ ├── misc_resources.ts │ │ │ ├── reports.ts │ │ │ ├── rooms.ts │ │ │ └── users.ts │ │ ├── ru/ │ │ │ ├── base.ts │ │ │ ├── common.ts │ │ │ ├── index.ts │ │ │ ├── mas.ts │ │ │ ├── misc_resources.ts │ │ │ ├── reports.ts │ │ │ ├── rooms.ts │ │ │ └── users.ts │ │ ├── types.d.ts │ │ ├── uk/ │ │ │ ├── base.ts │ │ │ ├── common.ts │ │ │ ├── index.ts │ │ │ ├── mas.ts │ │ │ ├── misc_resources.ts │ │ │ ├── reports.ts │ │ │ ├── rooms.ts │ │ │ └── users.ts │ │ └── zh/ │ │ ├── base.ts │ │ ├── common.ts │ │ ├── index.ts │ │ ├── mas.ts │ │ ├── misc_resources.ts │ │ ├── reports.ts │ │ ├── rooms.ts │ │ └── users.ts │ ├── index.tsx │ ├── pages/ │ │ ├── DonatePage.test.tsx │ │ ├── DonatePage.tsx │ │ ├── LoginPage.test.tsx │ │ ├── LoginPage.tsx │ │ ├── MASPolicyDataPage.test.tsx │ │ ├── MASPolicyDataPage.tsx │ │ ├── auth-callback-error.test.tsx │ │ ├── auth-callback-error.tsx │ │ ├── auth-callback.test.tsx │ │ └── auth-callback.tsx │ ├── providers/ │ │ ├── README.md │ │ ├── auth/ │ │ │ ├── index.test.ts │ │ │ └── index.ts │ │ ├── data/ │ │ │ ├── etke.test.ts │ │ │ ├── etke.ts │ │ │ ├── index.test.ts │ │ │ ├── index.ts │ │ │ ├── lifecycle.ts │ │ │ ├── mas-actions.ts │ │ │ ├── mas-utils.test.ts │ │ │ ├── mas-utils.ts │ │ │ ├── mas.ts │ │ │ ├── scan.ts │ │ │ ├── synapse-actions.ts │ │ │ └── synapse.ts │ │ ├── http.ts │ │ ├── matrix.test.ts │ │ ├── matrix.ts │ │ ├── serverVersion.ts │ │ └── types/ │ │ ├── common.ts │ │ ├── destinations.ts │ │ ├── etke.ts │ │ ├── index.ts │ │ ├── mas.ts │ │ ├── reports.ts │ │ ├── rooms.ts │ │ └── users.ts │ ├── resourceMap.ts │ ├── resources/ │ │ ├── README.md │ │ ├── destinations/ │ │ │ ├── List.tsx │ │ │ └── index.ts │ │ ├── mas/ │ │ │ ├── CompatSessions.tsx │ │ │ ├── OAuth2Sessions.tsx │ │ │ ├── PersonalSessions.tsx │ │ │ ├── UpstreamOAuthLinks.tsx │ │ │ ├── UpstreamOAuthProviders.tsx │ │ │ ├── UserEmails.tsx │ │ │ ├── UserSessions.tsx │ │ │ ├── index.ts │ │ │ └── shared.tsx │ │ ├── registration-tokens/ │ │ │ ├── Create.tsx │ │ │ ├── Edit.tsx │ │ │ ├── List.tsx │ │ │ └── index.ts │ │ ├── reports/ │ │ │ ├── List.tsx │ │ │ ├── Show.tsx │ │ │ └── index.ts │ │ ├── room-directory/ │ │ │ └── index.tsx │ │ ├── rooms/ │ │ │ ├── List.tsx │ │ │ ├── Show.tsx │ │ │ └── index.ts │ │ ├── scheduled-tasks/ │ │ │ ├── List.tsx │ │ │ └── index.ts │ │ ├── statistics/ │ │ │ ├── DatabaseRooms.tsx │ │ │ ├── UserMedia.tsx │ │ │ └── index.ts │ │ └── users/ │ │ ├── Create.tsx │ │ ├── Edit.tsx │ │ ├── List.tsx │ │ └── index.ts │ ├── utils/ │ │ ├── config.test.ts │ │ ├── config.ts │ │ ├── date.test.ts │ │ ├── date.ts │ │ ├── error.test.ts │ │ ├── error.ts │ │ ├── fetchMedia.test.ts │ │ ├── fetchMedia.ts │ │ ├── formatBytes.test.ts │ │ ├── formatBytes.ts │ │ ├── icons.ts │ │ ├── logger.test.ts │ │ ├── logger.ts │ │ ├── mxid.test.ts │ │ ├── mxid.ts │ │ ├── password.test.ts │ │ ├── password.ts │ │ ├── safety.test.ts │ │ ├── safety.ts │ │ ├── version.test.ts │ │ └── version.ts │ └── vitest.setup.ts ├── tsconfig.json └── vite.config.ts