mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-07 19:22:14 +09:00
refactor(imports): replace relative imports with path aliases (#2741)
This commit is contained in:
@@ -3,11 +3,11 @@
|
||||
import type {Client} from '@elastic/elasticsearch';
|
||||
import type {SortCombinations} from '@elastic/elasticsearch/lib/api/types';
|
||||
import type {AuditLogSearchFilters, SearchableAuditLog} from '@fluxer/schema/src/contracts/search/SearchDocumentTypes';
|
||||
import type {ElasticsearchFilter} from '../ElasticsearchFilterUtils';
|
||||
import {compactFilters, esTermFilter} from '../ElasticsearchFilterUtils';
|
||||
import {ELASTICSEARCH_INDEX_DEFINITIONS} from '../ElasticsearchIndexDefinitions';
|
||||
import type {ElasticsearchDistributedLock} from './ElasticsearchIndexAdapter';
|
||||
import {ElasticsearchIndexAdapter} from './ElasticsearchIndexAdapter';
|
||||
import type {ElasticsearchDistributedLock} from '@pkgs/elasticsearch_search/src/adapters/ElasticsearchIndexAdapter';
|
||||
import {ElasticsearchIndexAdapter} from '@pkgs/elasticsearch_search/src/adapters/ElasticsearchIndexAdapter';
|
||||
import type {ElasticsearchFilter} from '@pkgs/elasticsearch_search/src/ElasticsearchFilterUtils';
|
||||
import {compactFilters, esTermFilter} from '@pkgs/elasticsearch_search/src/ElasticsearchFilterUtils';
|
||||
import {ELASTICSEARCH_INDEX_DEFINITIONS} from '@pkgs/elasticsearch_search/src/ElasticsearchIndexDefinitions';
|
||||
|
||||
function buildAuditLogFilters(filters: AuditLogSearchFilters): Array<ElasticsearchFilter | undefined> {
|
||||
const clauses: Array<ElasticsearchFilter | undefined> = [];
|
||||
|
||||
@@ -3,11 +3,11 @@
|
||||
import type {Client} from '@elastic/elasticsearch';
|
||||
import type {SortCombinations} from '@elastic/elasticsearch/lib/api/types';
|
||||
import type {GuildSearchFilters, SearchableGuild} from '@fluxer/schema/src/contracts/search/SearchDocumentTypes';
|
||||
import type {ElasticsearchFilter} from '../ElasticsearchFilterUtils';
|
||||
import {compactFilters, esAndTerms, esTermFilter} from '../ElasticsearchFilterUtils';
|
||||
import {ELASTICSEARCH_INDEX_DEFINITIONS} from '../ElasticsearchIndexDefinitions';
|
||||
import type {ElasticsearchDistributedLock} from './ElasticsearchIndexAdapter';
|
||||
import {ElasticsearchIndexAdapter} from './ElasticsearchIndexAdapter';
|
||||
import type {ElasticsearchDistributedLock} from '@pkgs/elasticsearch_search/src/adapters/ElasticsearchIndexAdapter';
|
||||
import {ElasticsearchIndexAdapter} from '@pkgs/elasticsearch_search/src/adapters/ElasticsearchIndexAdapter';
|
||||
import type {ElasticsearchFilter} from '@pkgs/elasticsearch_search/src/ElasticsearchFilterUtils';
|
||||
import {compactFilters, esAndTerms, esTermFilter} from '@pkgs/elasticsearch_search/src/ElasticsearchFilterUtils';
|
||||
import {ELASTICSEARCH_INDEX_DEFINITIONS} from '@pkgs/elasticsearch_search/src/ElasticsearchIndexDefinitions';
|
||||
|
||||
function buildGuildFilters(filters: GuildSearchFilters): Array<ElasticsearchFilter | undefined> {
|
||||
const clauses: Array<ElasticsearchFilter | undefined> = [];
|
||||
|
||||
+11
-5
@@ -6,11 +6,17 @@ import type {
|
||||
GuildMemberSearchFilters,
|
||||
SearchableGuildMember,
|
||||
} from '@fluxer/schema/src/contracts/search/SearchDocumentTypes';
|
||||
import type {ElasticsearchFilter} from '../ElasticsearchFilterUtils';
|
||||
import {compactFilters, esAndTerms, esRangeFilter, esTermFilter, esTermsFilter} from '../ElasticsearchFilterUtils';
|
||||
import {ELASTICSEARCH_INDEX_DEFINITIONS} from '../ElasticsearchIndexDefinitions';
|
||||
import type {ElasticsearchDistributedLock} from './ElasticsearchIndexAdapter';
|
||||
import {ElasticsearchIndexAdapter} from './ElasticsearchIndexAdapter';
|
||||
import type {ElasticsearchDistributedLock} from '@pkgs/elasticsearch_search/src/adapters/ElasticsearchIndexAdapter';
|
||||
import {ElasticsearchIndexAdapter} from '@pkgs/elasticsearch_search/src/adapters/ElasticsearchIndexAdapter';
|
||||
import type {ElasticsearchFilter} from '@pkgs/elasticsearch_search/src/ElasticsearchFilterUtils';
|
||||
import {
|
||||
compactFilters,
|
||||
esAndTerms,
|
||||
esRangeFilter,
|
||||
esTermFilter,
|
||||
esTermsFilter,
|
||||
} from '@pkgs/elasticsearch_search/src/ElasticsearchFilterUtils';
|
||||
import {ELASTICSEARCH_INDEX_DEFINITIONS} from '@pkgs/elasticsearch_search/src/ElasticsearchIndexDefinitions';
|
||||
|
||||
function buildGuildMemberFilters(filters: GuildMemberSearchFilters): Array<ElasticsearchFilter | undefined> {
|
||||
const clauses: Array<ElasticsearchFilter | undefined> = [];
|
||||
|
||||
@@ -11,9 +11,9 @@ import type {
|
||||
SortResults,
|
||||
} from '@elastic/elasticsearch/lib/api/types';
|
||||
import type {ISearchAdapter, SearchOptions, SearchResult} from '@fluxer/schema/src/contracts/search/SearchAdapterTypes';
|
||||
import type {ElasticsearchFilter} from '../ElasticsearchFilterUtils';
|
||||
import {compactFilters} from '../ElasticsearchFilterUtils';
|
||||
import type {ElasticsearchIndexDefinition} from '../ElasticsearchIndexDefinitions';
|
||||
import type {ElasticsearchFilter} from '@pkgs/elasticsearch_search/src/ElasticsearchFilterUtils';
|
||||
import {compactFilters} from '@pkgs/elasticsearch_search/src/ElasticsearchFilterUtils';
|
||||
import type {ElasticsearchIndexDefinition} from '@pkgs/elasticsearch_search/src/ElasticsearchIndexDefinitions';
|
||||
|
||||
const ELASTICSEARCH_MAX_RESULT_WINDOW = 10000;
|
||||
const DEEP_PAGINATION_BATCH_SIZE = 1000;
|
||||
|
||||
@@ -4,11 +4,17 @@ import type {Client} from '@elastic/elasticsearch';
|
||||
import type {SortCombinations} from '@elastic/elasticsearch/lib/api/types';
|
||||
import type {SearchOptions, SearchResult} from '@fluxer/schema/src/contracts/search/SearchAdapterTypes';
|
||||
import type {MessageSearchFilters, SearchableMessage} from '@fluxer/schema/src/contracts/search/SearchDocumentTypes';
|
||||
import type {ElasticsearchFilter} from '../ElasticsearchFilterUtils';
|
||||
import {compactFilters, esAndTerms, esExcludeAny, esTermFilter, esTermsFilter} from '../ElasticsearchFilterUtils';
|
||||
import {ELASTICSEARCH_INDEX_DEFINITIONS} from '../ElasticsearchIndexDefinitions';
|
||||
import type {ElasticsearchDistributedLock} from './ElasticsearchIndexAdapter';
|
||||
import {ElasticsearchIndexAdapter} from './ElasticsearchIndexAdapter';
|
||||
import type {ElasticsearchDistributedLock} from '@pkgs/elasticsearch_search/src/adapters/ElasticsearchIndexAdapter';
|
||||
import {ElasticsearchIndexAdapter} from '@pkgs/elasticsearch_search/src/adapters/ElasticsearchIndexAdapter';
|
||||
import type {ElasticsearchFilter} from '@pkgs/elasticsearch_search/src/ElasticsearchFilterUtils';
|
||||
import {
|
||||
compactFilters,
|
||||
esAndTerms,
|
||||
esExcludeAny,
|
||||
esTermFilter,
|
||||
esTermsFilter,
|
||||
} from '@pkgs/elasticsearch_search/src/ElasticsearchFilterUtils';
|
||||
import {ELASTICSEARCH_INDEX_DEFINITIONS} from '@pkgs/elasticsearch_search/src/ElasticsearchIndexDefinitions';
|
||||
|
||||
const HAS_FIELD_MAP: Record<string, string> = {
|
||||
image: 'hasImage',
|
||||
|
||||
@@ -3,11 +3,16 @@
|
||||
import type {Client} from '@elastic/elasticsearch';
|
||||
import type {SortCombinations} from '@elastic/elasticsearch/lib/api/types';
|
||||
import type {ReportSearchFilters, SearchableReport} from '@fluxer/schema/src/contracts/search/SearchDocumentTypes';
|
||||
import type {ElasticsearchFilter} from '../ElasticsearchFilterUtils';
|
||||
import {compactFilters, esExistsFilter, esNotExistsFilter, esTermFilter} from '../ElasticsearchFilterUtils';
|
||||
import {ELASTICSEARCH_INDEX_DEFINITIONS} from '../ElasticsearchIndexDefinitions';
|
||||
import type {ElasticsearchDistributedLock} from './ElasticsearchIndexAdapter';
|
||||
import {ElasticsearchIndexAdapter} from './ElasticsearchIndexAdapter';
|
||||
import type {ElasticsearchDistributedLock} from '@pkgs/elasticsearch_search/src/adapters/ElasticsearchIndexAdapter';
|
||||
import {ElasticsearchIndexAdapter} from '@pkgs/elasticsearch_search/src/adapters/ElasticsearchIndexAdapter';
|
||||
import type {ElasticsearchFilter} from '@pkgs/elasticsearch_search/src/ElasticsearchFilterUtils';
|
||||
import {
|
||||
compactFilters,
|
||||
esExistsFilter,
|
||||
esNotExistsFilter,
|
||||
esTermFilter,
|
||||
} from '@pkgs/elasticsearch_search/src/ElasticsearchFilterUtils';
|
||||
import {ELASTICSEARCH_INDEX_DEFINITIONS} from '@pkgs/elasticsearch_search/src/ElasticsearchIndexDefinitions';
|
||||
|
||||
function buildReportFilters(filters: ReportSearchFilters): Array<ElasticsearchFilter | undefined> {
|
||||
const clauses: Array<ElasticsearchFilter | undefined> = [];
|
||||
|
||||
@@ -3,7 +3,9 @@
|
||||
import type {Client} from '@elastic/elasticsearch';
|
||||
import type {SortCombinations} from '@elastic/elasticsearch/lib/api/types';
|
||||
import type {SearchableUser, UserSearchFilters} from '@fluxer/schema/src/contracts/search/SearchDocumentTypes';
|
||||
import type {ElasticsearchFilter} from '../ElasticsearchFilterUtils';
|
||||
import type {ElasticsearchDistributedLock} from '@pkgs/elasticsearch_search/src/adapters/ElasticsearchIndexAdapter';
|
||||
import {ElasticsearchIndexAdapter} from '@pkgs/elasticsearch_search/src/adapters/ElasticsearchIndexAdapter';
|
||||
import type {ElasticsearchFilter} from '@pkgs/elasticsearch_search/src/ElasticsearchFilterUtils';
|
||||
import {
|
||||
compactFilters,
|
||||
esAndTerms,
|
||||
@@ -11,10 +13,8 @@ import {
|
||||
esNotExistsFilter,
|
||||
esRangeFilter,
|
||||
esTermFilter,
|
||||
} from '../ElasticsearchFilterUtils';
|
||||
import {ELASTICSEARCH_INDEX_DEFINITIONS} from '../ElasticsearchIndexDefinitions';
|
||||
import type {ElasticsearchDistributedLock} from './ElasticsearchIndexAdapter';
|
||||
import {ElasticsearchIndexAdapter} from './ElasticsearchIndexAdapter';
|
||||
} from '@pkgs/elasticsearch_search/src/ElasticsearchFilterUtils';
|
||||
import {ELASTICSEARCH_INDEX_DEFINITIONS} from '@pkgs/elasticsearch_search/src/ElasticsearchIndexDefinitions';
|
||||
|
||||
function buildUserFilters(filters: UserSearchFilters): Array<ElasticsearchFilter | undefined> {
|
||||
const clauses: Array<ElasticsearchFilter | undefined> = [];
|
||||
|
||||
@@ -1,39 +1,39 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {EmailTemplate, EmailTemplateKey} from '@pkgs/email/src/email_i18n/EmailI18nTypes.generated';
|
||||
import EMAIL_I18N_AR_MESSAGES from './locales/ar';
|
||||
import EMAIL_I18N_BG_MESSAGES from './locales/bg';
|
||||
import EMAIL_I18N_CS_MESSAGES from './locales/cs';
|
||||
import EMAIL_I18N_DA_MESSAGES from './locales/da';
|
||||
import EMAIL_I18N_DE_MESSAGES from './locales/de';
|
||||
import EMAIL_I18N_EL_MESSAGES from './locales/el';
|
||||
import EMAIL_I18N_EN_GB_MESSAGES from './locales/en-GB';
|
||||
import EMAIL_I18N_ES_419_MESSAGES from './locales/es-419';
|
||||
import EMAIL_I18N_ES_ES_MESSAGES from './locales/es-ES';
|
||||
import EMAIL_I18N_FI_MESSAGES from './locales/fi';
|
||||
import EMAIL_I18N_FR_MESSAGES from './locales/fr';
|
||||
import EMAIL_I18N_HE_MESSAGES from './locales/he';
|
||||
import EMAIL_I18N_HI_MESSAGES from './locales/hi';
|
||||
import EMAIL_I18N_HR_MESSAGES from './locales/hr';
|
||||
import EMAIL_I18N_HU_MESSAGES from './locales/hu';
|
||||
import EMAIL_I18N_ID_MESSAGES from './locales/id';
|
||||
import EMAIL_I18N_IT_MESSAGES from './locales/it';
|
||||
import EMAIL_I18N_JA_MESSAGES from './locales/ja';
|
||||
import EMAIL_I18N_KO_MESSAGES from './locales/ko';
|
||||
import EMAIL_I18N_LT_MESSAGES from './locales/lt';
|
||||
import EMAIL_I18N_NL_MESSAGES from './locales/nl';
|
||||
import EMAIL_I18N_NO_MESSAGES from './locales/no';
|
||||
import EMAIL_I18N_PL_MESSAGES from './locales/pl';
|
||||
import EMAIL_I18N_PT_BR_MESSAGES from './locales/pt-BR';
|
||||
import EMAIL_I18N_RO_MESSAGES from './locales/ro';
|
||||
import EMAIL_I18N_RU_MESSAGES from './locales/ru';
|
||||
import EMAIL_I18N_SV_SE_MESSAGES from './locales/sv-SE';
|
||||
import EMAIL_I18N_TH_MESSAGES from './locales/th';
|
||||
import EMAIL_I18N_TR_MESSAGES from './locales/tr';
|
||||
import EMAIL_I18N_UK_MESSAGES from './locales/uk';
|
||||
import EMAIL_I18N_VI_MESSAGES from './locales/vi';
|
||||
import EMAIL_I18N_ZH_CN_MESSAGES from './locales/zh-CN';
|
||||
import EMAIL_I18N_ZH_TW_MESSAGES from './locales/zh-TW';
|
||||
import EMAIL_I18N_AR_MESSAGES from '@pkgs/email/src/email_i18n/locales/ar';
|
||||
import EMAIL_I18N_BG_MESSAGES from '@pkgs/email/src/email_i18n/locales/bg';
|
||||
import EMAIL_I18N_CS_MESSAGES from '@pkgs/email/src/email_i18n/locales/cs';
|
||||
import EMAIL_I18N_DA_MESSAGES from '@pkgs/email/src/email_i18n/locales/da';
|
||||
import EMAIL_I18N_DE_MESSAGES from '@pkgs/email/src/email_i18n/locales/de';
|
||||
import EMAIL_I18N_EL_MESSAGES from '@pkgs/email/src/email_i18n/locales/el';
|
||||
import EMAIL_I18N_EN_GB_MESSAGES from '@pkgs/email/src/email_i18n/locales/en-GB';
|
||||
import EMAIL_I18N_ES_419_MESSAGES from '@pkgs/email/src/email_i18n/locales/es-419';
|
||||
import EMAIL_I18N_ES_ES_MESSAGES from '@pkgs/email/src/email_i18n/locales/es-ES';
|
||||
import EMAIL_I18N_FI_MESSAGES from '@pkgs/email/src/email_i18n/locales/fi';
|
||||
import EMAIL_I18N_FR_MESSAGES from '@pkgs/email/src/email_i18n/locales/fr';
|
||||
import EMAIL_I18N_HE_MESSAGES from '@pkgs/email/src/email_i18n/locales/he';
|
||||
import EMAIL_I18N_HI_MESSAGES from '@pkgs/email/src/email_i18n/locales/hi';
|
||||
import EMAIL_I18N_HR_MESSAGES from '@pkgs/email/src/email_i18n/locales/hr';
|
||||
import EMAIL_I18N_HU_MESSAGES from '@pkgs/email/src/email_i18n/locales/hu';
|
||||
import EMAIL_I18N_ID_MESSAGES from '@pkgs/email/src/email_i18n/locales/id';
|
||||
import EMAIL_I18N_IT_MESSAGES from '@pkgs/email/src/email_i18n/locales/it';
|
||||
import EMAIL_I18N_JA_MESSAGES from '@pkgs/email/src/email_i18n/locales/ja';
|
||||
import EMAIL_I18N_KO_MESSAGES from '@pkgs/email/src/email_i18n/locales/ko';
|
||||
import EMAIL_I18N_LT_MESSAGES from '@pkgs/email/src/email_i18n/locales/lt';
|
||||
import EMAIL_I18N_NL_MESSAGES from '@pkgs/email/src/email_i18n/locales/nl';
|
||||
import EMAIL_I18N_NO_MESSAGES from '@pkgs/email/src/email_i18n/locales/no';
|
||||
import EMAIL_I18N_PL_MESSAGES from '@pkgs/email/src/email_i18n/locales/pl';
|
||||
import EMAIL_I18N_PT_BR_MESSAGES from '@pkgs/email/src/email_i18n/locales/pt-BR';
|
||||
import EMAIL_I18N_RO_MESSAGES from '@pkgs/email/src/email_i18n/locales/ro';
|
||||
import EMAIL_I18N_RU_MESSAGES from '@pkgs/email/src/email_i18n/locales/ru';
|
||||
import EMAIL_I18N_SV_SE_MESSAGES from '@pkgs/email/src/email_i18n/locales/sv-SE';
|
||||
import EMAIL_I18N_TH_MESSAGES from '@pkgs/email/src/email_i18n/locales/th';
|
||||
import EMAIL_I18N_TR_MESSAGES from '@pkgs/email/src/email_i18n/locales/tr';
|
||||
import EMAIL_I18N_UK_MESSAGES from '@pkgs/email/src/email_i18n/locales/uk';
|
||||
import EMAIL_I18N_VI_MESSAGES from '@pkgs/email/src/email_i18n/locales/vi';
|
||||
import EMAIL_I18N_ZH_CN_MESSAGES from '@pkgs/email/src/email_i18n/locales/zh-CN';
|
||||
import EMAIL_I18N_ZH_TW_MESSAGES from '@pkgs/email/src/email_i18n/locales/zh-TW';
|
||||
|
||||
export const EMAIL_I18N_LOCALE_MESSAGES = {
|
||||
ar: EMAIL_I18N_AR_MESSAGES,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_AR_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_BG_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_CS_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_DA_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_DE_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_EL_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_EN_GB_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_ES_419_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_ES_ES_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_FI_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_FR_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_HE_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_HI_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_HR_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_HU_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_ID_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_IT_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_JA_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_KO_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_LT_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_NL_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_NO_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_PL_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_PT_BR_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_RO_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_RU_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_SV_SE_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_TH_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_TR_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_UK_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_VI_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_ZH_CN_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {defineEmailI18nLocaleMessages} from '../EmailI18nMessages';
|
||||
import {defineEmailI18nLocaleMessages} from '@pkgs/email/src/email_i18n/EmailI18nMessages';
|
||||
|
||||
const EMAIL_I18N_ZH_TW_MESSAGES = defineEmailI18nLocaleMessages({
|
||||
"account_disabled_suspicious": {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
import {AGE_BLOCKED_GEOS, AGE_RESTRICTED_GEOS} from '@fluxer/instance_bootstrap/src/AgeGeos';
|
||||
import type {GeolocationResponse} from '@fluxer/instance_bootstrap/src/Types';
|
||||
import {extractClientIp} from '@fluxer/ip_utils/src/ClientIp';
|
||||
import {lookupGeoipByIp} from './GeoipLookup';
|
||||
import {lookupGeoipByIp} from '@pkgs/geoip/src/GeoipLookup';
|
||||
|
||||
interface ResolveClientGeoipOptions {
|
||||
maxmindDbPath: string | undefined;
|
||||
|
||||
@@ -1,38 +1,14 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {existsSync, readFileSync, rmSync, statSync} from 'node:fs';
|
||||
import {readFileSync, rmSync} from 'node:fs';
|
||||
import {isBuiltin} from 'node:module';
|
||||
import {dirname, join, resolve} from 'node:path';
|
||||
import {fileURLToPath} from 'node:url';
|
||||
import {build} from 'esbuild';
|
||||
|
||||
const API_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..');
|
||||
const REPO_ROOT = resolve(API_ROOT, '..');
|
||||
const OUT_DIR = join(API_ROOT, 'dist');
|
||||
const CANDIDATE_SUFFIXES = ['', '.ts', '.tsx', '.js', '.mjs', '/index.ts', '/index.tsx', '/index.js', '/src/index.ts'];
|
||||
|
||||
const WORKSPACE_ROOTS = {
|
||||
'@app/': join(API_ROOT, 'src'),
|
||||
'@pkgs/': join(API_ROOT, 'pkgs'),
|
||||
'@fluxer/': join(REPO_ROOT, 'packages'),
|
||||
};
|
||||
|
||||
function resolveWorkspacePath(specifier) {
|
||||
for (const [prefix, root] of Object.entries(WORKSPACE_ROOTS)) {
|
||||
if (!specifier.startsWith(prefix)) {
|
||||
continue;
|
||||
}
|
||||
const base = join(root, specifier.slice(prefix.length));
|
||||
for (const suffix of CANDIDATE_SUFFIXES) {
|
||||
const candidate = `${base}${suffix}`;
|
||||
if (existsSync(candidate) && statSync(candidate).isFile()) {
|
||||
return candidate;
|
||||
}
|
||||
}
|
||||
throw new Error(`Unable to resolve workspace import ${specifier}`);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
const WORKSPACE_PREFIXES = ['@app/', '@pkgs/', '@fluxer/'];
|
||||
|
||||
function packageNameOf(specifier) {
|
||||
const segments = specifier.split('/');
|
||||
@@ -48,9 +24,8 @@ const workspacePlugin = {
|
||||
name: 'fluxer-workspace',
|
||||
setup(pluginBuild) {
|
||||
pluginBuild.onResolve({filter: /^[^./]/}, (args) => {
|
||||
const workspacePath = resolveWorkspacePath(args.path);
|
||||
if (workspacePath) {
|
||||
return {path: workspacePath};
|
||||
if (WORKSPACE_PREFIXES.some((prefix) => args.path.startsWith(prefix))) {
|
||||
return undefined;
|
||||
}
|
||||
const packageName = packageNameOf(args.path);
|
||||
if (!isBuiltin(args.path) && !declaredDependencies.has(packageName)) {
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {InboundSmsChallengeService} from '@app/api/auth/services/InboundSmsChallengeService';
|
||||
import type {PhoneAttemptRiskService} from '@app/api/auth/services/PhoneAttemptRiskService';
|
||||
import type {IPhoneLookupRepository} from '@app/api/auth/services/PhoneLookupRepository';
|
||||
import type {Config} from '@app/api/Config';
|
||||
import type {IEmailDnsValidationService} from '@app/api/infrastructure/IEmailDnsValidationService';
|
||||
import type {IGatewayService} from '@app/api/infrastructure/IGatewayService';
|
||||
import type {IMediaService} from '@app/api/infrastructure/IMediaService';
|
||||
import type {ISnowflakeService} from '@app/api/infrastructure/ISnowflakeService';
|
||||
import type {BotMfaMirrorService} from '@app/api/oauth/BotMfaMirrorService';
|
||||
import type {IUserRepository} from '@app/api/user/IUserRepository';
|
||||
import type {UserActivityBuffer} from '@app/api/user/services/UserActivityBuffer';
|
||||
import type {UserContactChangeLogService} from '@app/api/user/services/UserContactChangeLogService';
|
||||
import type {WorkerTaskName} from '@app/api/worker/WorkerLaneConfig';
|
||||
import type {ICacheService} from '@pkgs/cache/src/ICacheService';
|
||||
import type {IEmailService} from '@pkgs/email/src/IEmailService';
|
||||
import type {IKVProvider} from '@pkgs/kv_client/src/IKVProvider';
|
||||
import type {IRateLimitService} from '@pkgs/rate_limit/src/IRateLimitService';
|
||||
import type {ISmsService} from '@pkgs/sms/src/ISmsService';
|
||||
import type {IWorkerService} from '@pkgs/worker/src/contracts/IWorkerService';
|
||||
import type {InboundSmsChallengeService} from './auth/services/InboundSmsChallengeService';
|
||||
import type {PhoneAttemptRiskService} from './auth/services/PhoneAttemptRiskService';
|
||||
import type {IPhoneLookupRepository} from './auth/services/PhoneLookupRepository';
|
||||
import type {Config} from './Config';
|
||||
import type {IEmailDnsValidationService} from './infrastructure/IEmailDnsValidationService';
|
||||
import type {IGatewayService} from './infrastructure/IGatewayService';
|
||||
import type {IMediaService} from './infrastructure/IMediaService';
|
||||
import type {ISnowflakeService} from './infrastructure/ISnowflakeService';
|
||||
import type {BotMfaMirrorService} from './oauth/BotMfaMirrorService';
|
||||
import type {IUserRepository} from './user/IUserRepository';
|
||||
import type {UserActivityBuffer} from './user/services/UserActivityBuffer';
|
||||
import type {UserContactChangeLogService} from './user/services/UserContactChangeLogService';
|
||||
import type {WorkerTaskName} from './worker/WorkerLaneConfig';
|
||||
|
||||
export interface ApiServices {
|
||||
users: IUserRepository;
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {createInitializer, createShutdown} from '@app/api/app/APILifecycle';
|
||||
import {registerControllers} from '@app/api/app/ControllerRegistry';
|
||||
import {configureMiddleware} from '@app/api/app/MiddlewarePipeline';
|
||||
import type {APIConfig} from '@app/api/config/APIConfig';
|
||||
import type {ILogger} from '@app/api/ILogger';
|
||||
import {recordHttpClientError} from '@app/api/middleware/AbusiveIpAutoBanner';
|
||||
import type {HonoApp, HonoEnv} from '@app/api/types/HonoEnv';
|
||||
import {AppErrorHandler, AppNotFoundHandler} from '@fluxer/errors/src/domains/core/ErrorHandlers';
|
||||
import {IpBannedError} from '@fluxer/errors/src/domains/moderation/IpBannedError';
|
||||
import {resolveErrorStatus} from '@fluxer/errors/src/error_handling/ErrorIntrospection';
|
||||
@@ -8,13 +15,6 @@ import {LOCKED_DOWN_PERMISSIONS_POLICY, securityHeaders} from '@fluxer/hono/src/
|
||||
import {setIsDevelopment} from '@fluxer/schema/src/primitives/UrlValidators';
|
||||
import type {Context} from 'hono';
|
||||
import {Hono} from 'hono';
|
||||
import {createInitializer, createShutdown} from './app/APILifecycle';
|
||||
import {registerControllers} from './app/ControllerRegistry';
|
||||
import {configureMiddleware} from './app/MiddlewarePipeline';
|
||||
import type {APIConfig} from './config/APIConfig';
|
||||
import type {ILogger} from './ILogger';
|
||||
import {recordHttpClientError} from './middleware/AbusiveIpAutoBanner';
|
||||
import type {HonoApp, HonoEnv} from './types/HonoEnv';
|
||||
|
||||
interface CreateAPIAppOptions {
|
||||
config: APIConfig;
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {buildAPIConfigFromMaster, buildAPIServerOptions} from '@app/api/Config';
|
||||
import {loadConfig, resetConfig} from '@fluxer/config/src/ConfigLoader';
|
||||
import type {MasterConfig} from '@fluxer/config/src/MasterConfig';
|
||||
import {createServer} from '@fluxer/hono/src/Server';
|
||||
import {Hono} from 'hono';
|
||||
import {afterAll, afterEach, beforeAll, describe, expect, it, test, vi} from 'vitest';
|
||||
import {buildAPIConfigFromMaster, buildAPIServerOptions} from './Config';
|
||||
|
||||
interface ListeningServer {
|
||||
close: (callback: () => void) => void;
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {APIConfig, BlueskyOAuthConfig} from '@app/api/config/APIConfig';
|
||||
import type {WorkerTaskName} from '@app/api/worker/WorkerLaneConfig';
|
||||
import type {MasterConfig} from '@fluxer/config/src/MasterConfig';
|
||||
import {resolveDownloadsProvider} from '@fluxer/config/src/S3DownloadsProvider';
|
||||
import {parseIpAddress} from '@fluxer/ip_utils/src/IpAddress';
|
||||
import {parseGeoipSourceConfig, resolveGeoipRuntimeSourceConfig} from '@pkgs/geoip/src/GeoipStartup';
|
||||
import type {APIConfig, BlueskyOAuthConfig} from './config/APIConfig';
|
||||
import type {WorkerTaskName} from './worker/WorkerLaneConfig';
|
||||
|
||||
function extractHostname(url: string): string {
|
||||
try {
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {ApiContext, ApiServices, RequestScope} from './ApiContext';
|
||||
import {CassandraPhoneLookupRepository} from './auth/services/PhoneLookupRepository';
|
||||
import {Config} from './Config';
|
||||
import {getInboundSmsChallengeServiceInstance} from './middleware/ServiceMiddleware';
|
||||
import type {ApiContext, ApiServices, RequestScope} from '@app/api/ApiContext';
|
||||
import {CassandraPhoneLookupRepository} from '@app/api/auth/services/PhoneLookupRepository';
|
||||
import {Config} from '@app/api/Config';
|
||||
import {getInboundSmsChallengeServiceInstance} from '@app/api/middleware/ServiceMiddleware';
|
||||
import {
|
||||
getGatewayService,
|
||||
getKVClient,
|
||||
getMediaService,
|
||||
getSnowflakeService,
|
||||
getWorkerService,
|
||||
} from './middleware/ServiceRegistry';
|
||||
} from '@app/api/middleware/ServiceRegistry';
|
||||
import {
|
||||
getBotMfaMirrorService,
|
||||
getCacheService,
|
||||
@@ -22,7 +22,7 @@ import {
|
||||
getSmsService,
|
||||
getUserActivityBuffer,
|
||||
getUserRepository,
|
||||
} from './middleware/ServiceSingletons';
|
||||
} from '@app/api/middleware/ServiceSingletons';
|
||||
|
||||
let cachedServices: ApiServices | null = null;
|
||||
let cachedConfigRef: typeof Config | null = null;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {ILogger} from './ILogger';
|
||||
import type {ILogger} from '@app/api/ILogger';
|
||||
|
||||
let _logger: ILogger | null = null;
|
||||
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {AdminRateLimitConfigs} from './rate_limit_configs/AdminRateLimitConfig';
|
||||
import {AuthRateLimitConfigs} from './rate_limit_configs/AuthRateLimitConfig';
|
||||
import {ChannelRateLimitConfigs} from './rate_limit_configs/ChannelRateLimitConfig';
|
||||
import {DiscoveryRateLimitConfigs} from './rate_limit_configs/DiscoveryRateLimitConfig';
|
||||
import {DonationRateLimitConfigs} from './rate_limit_configs/DonationRateLimitConfig';
|
||||
import {GuildRateLimitConfigs} from './rate_limit_configs/GuildRateLimitConfig';
|
||||
import {IntegrationRateLimitConfigs} from './rate_limit_configs/IntegrationRateLimitConfig';
|
||||
import {InviteRateLimitConfigs} from './rate_limit_configs/InviteRateLimitConfig';
|
||||
import {MiscRateLimitConfigs} from './rate_limit_configs/MiscRateLimitConfig';
|
||||
import {OAuthRateLimitConfigs} from './rate_limit_configs/OAuthRateLimitConfig';
|
||||
import type {RateLimitSection} from './rate_limit_configs/RateLimitHelpers';
|
||||
import {mergeRateLimitSections} from './rate_limit_configs/RateLimitHelpers';
|
||||
import {UserRateLimitConfigs} from './rate_limit_configs/UserRateLimitConfig';
|
||||
import {WebhookRateLimitConfigs} from './rate_limit_configs/WebhookRateLimitConfig';
|
||||
import {AdminRateLimitConfigs} from '@app/api/rate_limit_configs/AdminRateLimitConfig';
|
||||
import {AuthRateLimitConfigs} from '@app/api/rate_limit_configs/AuthRateLimitConfig';
|
||||
import {ChannelRateLimitConfigs} from '@app/api/rate_limit_configs/ChannelRateLimitConfig';
|
||||
import {DiscoveryRateLimitConfigs} from '@app/api/rate_limit_configs/DiscoveryRateLimitConfig';
|
||||
import {DonationRateLimitConfigs} from '@app/api/rate_limit_configs/DonationRateLimitConfig';
|
||||
import {GuildRateLimitConfigs} from '@app/api/rate_limit_configs/GuildRateLimitConfig';
|
||||
import {IntegrationRateLimitConfigs} from '@app/api/rate_limit_configs/IntegrationRateLimitConfig';
|
||||
import {InviteRateLimitConfigs} from '@app/api/rate_limit_configs/InviteRateLimitConfig';
|
||||
import {MiscRateLimitConfigs} from '@app/api/rate_limit_configs/MiscRateLimitConfig';
|
||||
import {OAuthRateLimitConfigs} from '@app/api/rate_limit_configs/OAuthRateLimitConfig';
|
||||
import type {RateLimitSection} from '@app/api/rate_limit_configs/RateLimitHelpers';
|
||||
import {mergeRateLimitSections} from '@app/api/rate_limit_configs/RateLimitHelpers';
|
||||
import {UserRateLimitConfigs} from '@app/api/rate_limit_configs/UserRateLimitConfig';
|
||||
import {WebhookRateLimitConfigs} from '@app/api/rate_limit_configs/WebhookRateLimitConfig';
|
||||
|
||||
const rateLimitSections = [
|
||||
AuthRateLimitConfigs,
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {Config} from '@app/api/Config';
|
||||
import {ElasticsearchSearchProvider} from '@app/api/infrastructure/ElasticsearchSearchProvider';
|
||||
import {MeilisearchSearchProvider} from '@app/api/infrastructure/MeilisearchSearchProvider';
|
||||
import {NullSearchProvider} from '@app/api/infrastructure/NullSearchProvider';
|
||||
import {Logger} from '@app/api/Logger';
|
||||
import {getInjectedSearchProvider} from '@app/api/middleware/ServiceRegistry';
|
||||
import type {IAuditLogSearchService} from '@app/api/search/IAuditLogSearchService';
|
||||
import type {IGuildMemberSearchService} from '@app/api/search/IGuildMemberSearchService';
|
||||
import type {IGuildSearchService} from '@app/api/search/IGuildSearchService';
|
||||
import type {IMessageSearchService} from '@app/api/search/IMessageSearchService';
|
||||
import type {IReportSearchService} from '@app/api/search/IReportSearchService';
|
||||
import type {ISearchProvider} from '@app/api/search/ISearchProvider';
|
||||
import type {IUserSearchService} from '@app/api/search/IUserSearchService';
|
||||
import {DEFAULT_SEARCH_CLIENT_TIMEOUT_MS} from '@fluxer/constants/src/Timeouts';
|
||||
import type {ElasticsearchDistributedLock} from '@pkgs/elasticsearch_search/src/adapters/ElasticsearchIndexAdapter';
|
||||
import {Config} from './Config';
|
||||
import {ElasticsearchSearchProvider} from './infrastructure/ElasticsearchSearchProvider';
|
||||
import {MeilisearchSearchProvider} from './infrastructure/MeilisearchSearchProvider';
|
||||
import {NullSearchProvider} from './infrastructure/NullSearchProvider';
|
||||
import {Logger} from './Logger';
|
||||
import {getInjectedSearchProvider} from './middleware/ServiceRegistry';
|
||||
import type {IAuditLogSearchService} from './search/IAuditLogSearchService';
|
||||
import type {IGuildMemberSearchService} from './search/IGuildMemberSearchService';
|
||||
import type {IGuildSearchService} from './search/IGuildSearchService';
|
||||
import type {IMessageSearchService} from './search/IMessageSearchService';
|
||||
import type {IReportSearchService} from './search/IReportSearchService';
|
||||
import type {ISearchProvider} from './search/ISearchProvider';
|
||||
import type {IUserSearchService} from './search/IUserSearchService';
|
||||
|
||||
let searchProvider: ISearchProvider | null = null;
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {AttachmentID, ChannelID, GuildID, MemeID, PasswordResetToken, UserID} from './BrandedTypes';
|
||||
import {defineTable} from './database/CassandraTableDsl';
|
||||
import type {AttachmentID, ChannelID, GuildID, MemeID, PasswordResetToken, UserID} from '@app/api/BrandedTypes';
|
||||
import {defineTable} from '@app/api/database/CassandraTableDsl';
|
||||
import {
|
||||
ADMIN_ARCHIVE_COLUMNS,
|
||||
ADMIN_ARCHIVE_INDEX_COLUMNS,
|
||||
@@ -31,19 +31,19 @@ import {
|
||||
type DisposableEmailDomainRow,
|
||||
SUSPICIOUS_EMAIL_DOMAIN_COLUMNS,
|
||||
type SuspiciousEmailDomainRow,
|
||||
} from './database/types/AdminArchiveTypes';
|
||||
} from '@app/api/database/types/AdminArchiveTypes';
|
||||
import {
|
||||
ADMIN_API_KEY_BY_CREATOR_COLUMNS,
|
||||
ADMIN_API_KEY_COLUMNS,
|
||||
type AdminApiKeyByCreatorRow,
|
||||
type AdminApiKeyRow,
|
||||
} from './database/types/AdminAuthTypes';
|
||||
} from '@app/api/database/types/AdminAuthTypes';
|
||||
import {
|
||||
ATTACHMENT_UPLOAD_TRACE_BY_ATTACHMENT_COLUMNS,
|
||||
ATTACHMENT_UPLOAD_TRACE_BY_KEY_COLUMNS,
|
||||
type AttachmentUploadTraceByAttachmentRow,
|
||||
type AttachmentUploadTraceByKeyRow,
|
||||
} from './database/types/AttachmentUploadTypes';
|
||||
} from '@app/api/database/types/AttachmentUploadTypes';
|
||||
import {
|
||||
AUTH_SESSION_COLUMNS,
|
||||
AUTH_SESSION_TOMBSTONE_COLUMNS,
|
||||
@@ -77,7 +77,7 @@ import {
|
||||
type UserSsoIdentityRow,
|
||||
WEBAUTHN_CREDENTIAL_COLUMNS,
|
||||
type WebAuthnCredentialRow,
|
||||
} from './database/types/AuthTypes';
|
||||
} from '@app/api/database/types/AuthTypes';
|
||||
import {
|
||||
BILLING_ACTION_INTENT_COLUMNS,
|
||||
BILLING_CHARGE_BY_CUSTOMER_COLUMNS,
|
||||
@@ -133,7 +133,7 @@ import {
|
||||
type BillingSubscriptionByCustomerRow,
|
||||
type BillingSubscriptionByUserRow,
|
||||
type BillingSubscriptionRow,
|
||||
} from './database/types/BillingTypes';
|
||||
} from '@app/api/database/types/BillingTypes';
|
||||
import {
|
||||
CHANNEL_COLUMNS,
|
||||
CHANNELS_BY_GUILD_COLUMNS,
|
||||
@@ -147,20 +147,20 @@ import {
|
||||
type PrivateChannelRow,
|
||||
WEBHOOK_COLUMNS,
|
||||
type WebhookRow,
|
||||
} from './database/types/ChannelTypes';
|
||||
import {USER_CONNECTION_STORAGE_COLUMNS, type UserConnectionStorageRow} from './database/types/ConnectionTypes';
|
||||
} from '@app/api/database/types/ChannelTypes';
|
||||
import {USER_CONNECTION_STORAGE_COLUMNS, type UserConnectionStorageRow} from '@app/api/database/types/ConnectionTypes';
|
||||
import {
|
||||
NCMEC_ATTACHMENT_SUBMISSION_COLUMNS,
|
||||
NCMEC_USER_WORKFLOW_COLUMNS,
|
||||
type NcmecAttachmentSubmissionRow,
|
||||
type NcmecUserWorkflowRow,
|
||||
} from './database/types/CsamTypes';
|
||||
} from '@app/api/database/types/CsamTypes';
|
||||
import {
|
||||
GUILD_DISCOVERY_BY_STATUS_COLUMNS,
|
||||
GUILD_DISCOVERY_COLUMNS,
|
||||
type GuildDiscoveryByStatusRow,
|
||||
type GuildDiscoveryRow,
|
||||
} from './database/types/GuildDiscoveryTypes';
|
||||
} from '@app/api/database/types/GuildDiscoveryTypes';
|
||||
import {
|
||||
GUILD_AUDIT_LOG_COLUMNS,
|
||||
GUILD_BAN_BY_EMAIL_COLUMNS,
|
||||
@@ -186,8 +186,11 @@ import {
|
||||
type GuildRoleRow,
|
||||
type GuildRow,
|
||||
type GuildStickerRow,
|
||||
} from './database/types/GuildTypes';
|
||||
import {INSTANCE_CONFIGURATION_COLUMNS, type InstanceConfigurationRow} from './database/types/InstanceConfigTypes';
|
||||
} from '@app/api/database/types/GuildTypes';
|
||||
import {
|
||||
INSTANCE_CONFIGURATION_COLUMNS,
|
||||
type InstanceConfigurationRow,
|
||||
} from '@app/api/database/types/InstanceConfigTypes';
|
||||
import {
|
||||
JOB_ACTIVE_COLUMNS,
|
||||
JOB_BY_DAY_BUCKET_COLUMNS,
|
||||
@@ -195,7 +198,7 @@ import {
|
||||
type JobActiveRow,
|
||||
type JobByDayBucketRow,
|
||||
type JobByIdRow,
|
||||
} from './database/types/JobLedgerTypes';
|
||||
} from '@app/api/database/types/JobLedgerTypes';
|
||||
import {
|
||||
ATTACHMENT_LOOKUP_COLUMNS,
|
||||
type AttachmentLookupRow,
|
||||
@@ -213,7 +216,7 @@ import {
|
||||
type MessageByAuthorRow,
|
||||
type MessageReactionRow,
|
||||
type MessageRow,
|
||||
} from './database/types/MessageTypes';
|
||||
} from '@app/api/database/types/MessageTypes';
|
||||
import {
|
||||
APPLICATION_COLUMNS,
|
||||
type ApplicationByOwnerRow,
|
||||
@@ -226,7 +229,7 @@ import {
|
||||
type OAuth2AuthorizationCodeRow,
|
||||
type OAuth2RefreshTokenByUserRow,
|
||||
type OAuth2RefreshTokenRow,
|
||||
} from './database/types/OAuth2Types';
|
||||
} from '@app/api/database/types/OAuth2Types';
|
||||
import {
|
||||
GIFT_CODE_BY_CREATOR_COLUMNS,
|
||||
GIFT_CODE_BY_PAYMENT_INTENT_COLUMNS,
|
||||
@@ -246,7 +249,7 @@ import {
|
||||
type PaymentRow,
|
||||
VISIONARY_SLOT_COLUMNS,
|
||||
type VisionarySlotRow,
|
||||
} from './database/types/PaymentTypes';
|
||||
} from '@app/api/database/types/PaymentTypes';
|
||||
import {
|
||||
DSA_REPORT_EMAIL_VERIFICATION_COLUMNS,
|
||||
DSA_REPORT_TICKET_COLUMNS,
|
||||
@@ -256,7 +259,7 @@ import {
|
||||
type IARSubmissionRow,
|
||||
MESSAGE_REPORT_SUBMISSION_BY_REPORTER_COLUMNS,
|
||||
type MessageReportSubmissionByReporterRow,
|
||||
} from './database/types/ReportTypes';
|
||||
} from '@app/api/database/types/ReportTypes';
|
||||
import {
|
||||
INBOUND_SMS_CHALLENGE_BY_USER_COLUMNS,
|
||||
INBOUND_SMS_CHALLENGE_COLUMNS,
|
||||
@@ -290,7 +293,7 @@ import {
|
||||
type RiskOutcomeBySubnetRow,
|
||||
SUSPICIOUS_IP_COLUMNS,
|
||||
type SuspiciousIpRow,
|
||||
} from './database/types/RiskTypes';
|
||||
} from '@app/api/database/types/RiskTypes';
|
||||
import {
|
||||
FAVORITE_MEME_COLUMNS,
|
||||
type FavoriteMemeRow,
|
||||
@@ -336,8 +339,8 @@ import {
|
||||
type UserRow,
|
||||
type UserSettingsRow,
|
||||
type UsersPendingDeletionRow,
|
||||
} from './database/types/UserTypes';
|
||||
import {ATTACHMENT_DECAY_COLUMNS, type AttachmentDecayRow} from './types/AttachmentDecayTypes';
|
||||
} from '@app/api/database/types/UserTypes';
|
||||
import {ATTACHMENT_DECAY_COLUMNS, type AttachmentDecayRow} from '@app/api/types/AttachmentDecayTypes';
|
||||
|
||||
export const Users = defineTable<UserRow, 'user_id'>({
|
||||
name: 'users',
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {requireRequestJsonBody} from '@app/api/utils/RequestJsonBody';
|
||||
import {initializeFluxerErrorMap} from '@app/api/ZodErrorMap';
|
||||
import type {ValidationErrorCode} from '@fluxer/constants/src/ValidationErrorCodes';
|
||||
import {isValidationErrorCode, ValidationErrorCodes} from '@fluxer/constants/src/ValidationErrorCodes';
|
||||
import {
|
||||
@@ -11,8 +13,6 @@ import {schemaMetadata} from '@fluxer/schema/src/SchemaMetadata';
|
||||
import type {Context, Env, Input, MiddlewareHandler, TypedResponse, ValidationTargets} from 'hono';
|
||||
import {getCookie} from 'hono/cookie';
|
||||
import {type core, type input, type output, ZodObject, ZodOptional, type ZodSafeParseResult, type ZodType} from 'zod';
|
||||
import {requireRequestJsonBody} from './utils/RequestJsonBody';
|
||||
import {initializeFluxerErrorMap} from './ZodErrorMap';
|
||||
|
||||
initializeFluxerErrorMap();
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {initializeFluxerErrorMap} from '@app/api/ZodErrorMap';
|
||||
import {ValidationErrorCodes} from '@fluxer/constants/src/ValidationErrorCodes';
|
||||
import {beforeAll, describe, expect, it} from 'vitest';
|
||||
import {z} from 'zod';
|
||||
import {initializeFluxerErrorMap} from './ZodErrorMap';
|
||||
|
||||
function firstIssueMessage(schema: z.ZodType, value: unknown): string | undefined {
|
||||
const result = schema.safeParse(value);
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {getSameIpDecisionKey} from '@fluxer/ip_utils/src/IpAddress';
|
||||
import {createUserID} from '../BrandedTypes';
|
||||
import {deleteOneOrMany, fetchMany, fetchOne, upsertOne} from '../database/CassandraQueryExecution';
|
||||
import type {AdminAuditLog, BannedIpEntry, BannedIpKind, IAdminRepository} from '@app/api/admin/IAdminRepository';
|
||||
import {createUserID} from '@app/api/BrandedTypes';
|
||||
import {deleteOneOrMany, fetchMany, fetchOne, upsertOne} from '@app/api/database/CassandraQueryExecution';
|
||||
import type {
|
||||
AdminAuditLogRow,
|
||||
BannedAvatarHashRow,
|
||||
@@ -11,9 +11,9 @@ import type {
|
||||
BannedProfileSubstringScope,
|
||||
BannedUrlDomainRow,
|
||||
BannedUrlRow,
|
||||
} from '../database/types/AdminArchiveTypes';
|
||||
import {isAccountPolicyContactDomainReputationExempt} from '../risk/AccountPolicyService';
|
||||
import {isIpBanExempt} from '../risk/IpBanExemptions';
|
||||
} from '@app/api/database/types/AdminArchiveTypes';
|
||||
import {isAccountPolicyContactDomainReputationExempt} from '@app/api/risk/AccountPolicyService';
|
||||
import {isIpBanExempt} from '@app/api/risk/IpBanExemptions';
|
||||
import {
|
||||
AdminAuditLogs,
|
||||
BannedAvatarHashes,
|
||||
@@ -27,10 +27,10 @@ import {
|
||||
BannedUrls,
|
||||
DisposableEmailDomains,
|
||||
SuspiciousEmailDomains,
|
||||
} from '../Tables';
|
||||
import {parseIpBanEntry, tryParseSingleIp} from '../utils/IpRangeUtils';
|
||||
import {canonicalizeStoredPhrase} from '../utils/PhraseBlocklistNormalization';
|
||||
import type {AdminAuditLog, BannedIpEntry, BannedIpKind, IAdminRepository} from './IAdminRepository';
|
||||
} from '@app/api/Tables';
|
||||
import {parseIpBanEntry, tryParseSingleIp} from '@app/api/utils/IpRangeUtils';
|
||||
import {canonicalizeStoredPhrase} from '@app/api/utils/PhraseBlocklistNormalization';
|
||||
import {getSameIpDecisionKey} from '@fluxer/ip_utils/src/IpAddress';
|
||||
|
||||
const FETCH_AUDIT_LOG_BY_ID_QUERY = AdminAuditLogs.select({
|
||||
where: AdminAuditLogs.where.eq('log_id'),
|
||||
|
||||
@@ -1,49 +1,49 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {SendSystemDmResponse} from '@fluxer/schema/src/domains/admin/AdminSchemas';
|
||||
import type {IpInfoService} from '@pkgs/geoip/src/IpInfoService';
|
||||
import type Stripe from 'stripe';
|
||||
import type {ApiContext} from '../ApiContext';
|
||||
import type {UserID} from '../BrandedTypes';
|
||||
import type {IChannelRepository} from '../channel/IChannelRepository';
|
||||
import type {ChannelService} from '../channel/services/ChannelService';
|
||||
import type {IGuildRepositoryAggregate} from '../guild/repositories/IGuildRepositoryAggregate';
|
||||
import type {GuildService} from '../guild/services/GuildService';
|
||||
import type {IDiscriminatorService} from '../infrastructure/DiscriminatorService';
|
||||
import type {EntityAssetService} from '../infrastructure/EntityAssetService';
|
||||
import type {IAssetDeletionQueue} from '../infrastructure/IAssetDeletionQueue';
|
||||
import type {IStorageService} from '../infrastructure/IStorageService';
|
||||
import type {KVBulkMessageDeletionQueueService} from '../infrastructure/KVBulkMessageDeletionQueueService';
|
||||
import type {UserCacheService} from '../infrastructure/UserCacheService';
|
||||
import type {InviteRepository} from '../invite/InviteRepository';
|
||||
import type {IJobLedgerRepository} from '../jobs/IJobLedgerRepository';
|
||||
import {JobAdminService} from '../jobs/JobAdminService';
|
||||
import type {ApiContext} from '@app/api/ApiContext';
|
||||
import type {IAdminRepository} from '@app/api/admin/IAdminRepository';
|
||||
import {AdminApplicationService} from '@app/api/admin/services/AdminApplicationService';
|
||||
import {AdminAssetPurgeService} from '@app/api/admin/services/AdminAssetPurgeService';
|
||||
import {AdminAuditService} from '@app/api/admin/services/AdminAuditService';
|
||||
import {AdminBanManagementService} from '@app/api/admin/services/AdminBanManagementService';
|
||||
import {AdminCodeGenerationService} from '@app/api/admin/services/AdminCodeGenerationService';
|
||||
import {AdminGuildService} from '@app/api/admin/services/AdminGuildService';
|
||||
import {AdminMessageDeletionService} from '@app/api/admin/services/AdminMessageDeletionService';
|
||||
import {AdminMessageService} from '@app/api/admin/services/AdminMessageService';
|
||||
import {AdminMessageShredService} from '@app/api/admin/services/AdminMessageShredService';
|
||||
import {AdminReportService} from '@app/api/admin/services/AdminReportService';
|
||||
import {AdminSearchService} from '@app/api/admin/services/AdminSearchService';
|
||||
import {AdminUserRelationshipService} from '@app/api/admin/services/AdminUserRelationshipService';
|
||||
import {AdminUserService} from '@app/api/admin/services/AdminUserService';
|
||||
import {AdminVoiceService} from '@app/api/admin/services/AdminVoiceService';
|
||||
import type {UserID} from '@app/api/BrandedTypes';
|
||||
import type {IChannelRepository} from '@app/api/channel/IChannelRepository';
|
||||
import type {ChannelService} from '@app/api/channel/services/ChannelService';
|
||||
import type {IGuildRepositoryAggregate} from '@app/api/guild/repositories/IGuildRepositoryAggregate';
|
||||
import type {GuildService} from '@app/api/guild/services/GuildService';
|
||||
import type {IDiscriminatorService} from '@app/api/infrastructure/DiscriminatorService';
|
||||
import type {EntityAssetService} from '@app/api/infrastructure/EntityAssetService';
|
||||
import type {IAssetDeletionQueue} from '@app/api/infrastructure/IAssetDeletionQueue';
|
||||
import type {IStorageService} from '@app/api/infrastructure/IStorageService';
|
||||
import type {KVBulkMessageDeletionQueueService} from '@app/api/infrastructure/KVBulkMessageDeletionQueueService';
|
||||
import type {UserCacheService} from '@app/api/infrastructure/UserCacheService';
|
||||
import type {InviteRepository} from '@app/api/invite/InviteRepository';
|
||||
import type {IJobLedgerRepository} from '@app/api/jobs/IJobLedgerRepository';
|
||||
import {JobAdminService} from '@app/api/jobs/JobAdminService';
|
||||
import {
|
||||
getGuildDiscoveryRepository,
|
||||
getKVAccountDeletionQueue,
|
||||
getNcmecSubmissionService,
|
||||
} from '../middleware/ServiceSingletons';
|
||||
import type {IApplicationRepository} from '../oauth/repositories/IApplicationRepository';
|
||||
import type {ReportService} from '../report/ReportService';
|
||||
import type {IRiskHistoryRepository} from '../risk/HistoricalOutcomeRepository';
|
||||
import type {ISuspiciousIpRepository} from '../risk/SuspiciousIpRepository';
|
||||
import type {UserService} from '../user/services/UserService';
|
||||
import type {VoiceRepository} from '../voice/VoiceRepository';
|
||||
import type {IAdminRepository} from './IAdminRepository';
|
||||
import {AdminApplicationService} from './services/AdminApplicationService';
|
||||
import {AdminAssetPurgeService} from './services/AdminAssetPurgeService';
|
||||
import {AdminAuditService} from './services/AdminAuditService';
|
||||
import {AdminBanManagementService} from './services/AdminBanManagementService';
|
||||
import {AdminCodeGenerationService} from './services/AdminCodeGenerationService';
|
||||
import {AdminGuildService} from './services/AdminGuildService';
|
||||
import {AdminMessageDeletionService} from './services/AdminMessageDeletionService';
|
||||
import {AdminMessageService} from './services/AdminMessageService';
|
||||
import {AdminMessageShredService} from './services/AdminMessageShredService';
|
||||
import {AdminReportService} from './services/AdminReportService';
|
||||
import {AdminSearchService} from './services/AdminSearchService';
|
||||
import {AdminUserRelationshipService} from './services/AdminUserRelationshipService';
|
||||
import {AdminUserService} from './services/AdminUserService';
|
||||
import {AdminVoiceService} from './services/AdminVoiceService';
|
||||
} from '@app/api/middleware/ServiceSingletons';
|
||||
import type {IApplicationRepository} from '@app/api/oauth/repositories/IApplicationRepository';
|
||||
import type {ReportService} from '@app/api/report/ReportService';
|
||||
import type {IRiskHistoryRepository} from '@app/api/risk/HistoricalOutcomeRepository';
|
||||
import type {ISuspiciousIpRepository} from '@app/api/risk/SuspiciousIpRepository';
|
||||
import type {UserService} from '@app/api/user/services/UserService';
|
||||
import type {VoiceRepository} from '@app/api/voice/VoiceRepository';
|
||||
import type {SendSystemDmResponse} from '@fluxer/schema/src/domains/admin/AdminSchemas';
|
||||
import type {IpInfoService} from '@pkgs/geoip/src/IpInfoService';
|
||||
import type Stripe from 'stripe';
|
||||
|
||||
export class AdminService {
|
||||
readonly auditService: AdminAuditService;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {UserID} from '../BrandedTypes';
|
||||
import type {UserID} from '@app/api/BrandedTypes';
|
||||
import type {
|
||||
AdminAuditLogRow,
|
||||
BannedAvatarHashRow,
|
||||
@@ -9,7 +9,7 @@ import type {
|
||||
BannedProfileSubstringScope,
|
||||
BannedUrlDomainRow,
|
||||
BannedUrlRow,
|
||||
} from '../database/types/AdminArchiveTypes';
|
||||
} from '@app/api/database/types/AdminArchiveTypes';
|
||||
|
||||
export interface AdminAuditLog {
|
||||
logId: bigint;
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {AdminApiKeyView} from '@app/api/admin/services/AdminApiKeyService';
|
||||
import {requireAdminACL} from '@app/api/middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '@app/api/RateLimitConfig';
|
||||
import type {HonoApp} from '@app/api/types/HonoEnv';
|
||||
import {Validator} from '@app/api/Validator';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {
|
||||
AdminApiKeyListResponse,
|
||||
@@ -13,14 +20,6 @@ import {
|
||||
} from '@fluxer/schema/src/domains/admin/AdminSchemas';
|
||||
import {KeyIdParam} from '@fluxer/schema/src/domains/common/CommonParamSchemas';
|
||||
|
||||
import {requireAdminACL} from '../../middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '../../middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '../../middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '../../RateLimitConfig';
|
||||
import type {HonoApp} from '../../types/HonoEnv';
|
||||
import {Validator} from '../../Validator';
|
||||
import type {AdminApiKeyView} from '../services/AdminApiKeyService';
|
||||
|
||||
function toApiKeyResponse(key: AdminApiKeyView): ListAdminApiKeyResponseType {
|
||||
return {
|
||||
key_id: key.keyId,
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {createApplicationID, createGuildID, createUserID} from '@app/api/BrandedTypes';
|
||||
import {requireAdminACL, requireAnyAdminACL} from '@app/api/middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '@app/api/RateLimitConfig';
|
||||
import type {HonoApp} from '@app/api/types/HonoEnv';
|
||||
import {Validator} from '@app/api/Validator';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {InputValidationError} from '@fluxer/errors/src/domains/core/InputValidationError';
|
||||
import {MissingACLError} from '@fluxer/errors/src/domains/core/MissingACLError';
|
||||
@@ -12,13 +19,6 @@ import {
|
||||
TransferApplicationOwnershipRequest,
|
||||
} from '@fluxer/schema/src/domains/admin/AdminApplicationSchemas';
|
||||
import {UserIdParam} from '@fluxer/schema/src/domains/common/CommonParamSchemas';
|
||||
import {createApplicationID, createGuildID, createUserID} from '../../BrandedTypes';
|
||||
import {requireAdminACL, requireAnyAdminACL} from '../../middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '../../middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '../../middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '../../RateLimitConfig';
|
||||
import type {HonoApp} from '../../types/HonoEnv';
|
||||
import {Validator} from '../../Validator';
|
||||
|
||||
function requireRequestAdminACL(granted: ReadonlySet<string>, required: string): void {
|
||||
if (!granted.has(required) && !granted.has(AdminACLs.WILDCARD)) {
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {createGuildID, createUserID} from '@app/api/BrandedTypes';
|
||||
import {requireAdminACL, requireAnyAdminACL} from '@app/api/middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '@app/api/RateLimitConfig';
|
||||
import type {HonoApp} from '@app/api/types/HonoEnv';
|
||||
import {Validator} from '@app/api/Validator';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {MissingACLError} from '@fluxer/errors/src/domains/core/MissingACLError';
|
||||
import {
|
||||
@@ -14,13 +21,6 @@ import {
|
||||
ListArchivesResponseSchema,
|
||||
} from '@fluxer/schema/src/domains/admin/AdminSchemas';
|
||||
import {ArchivePathParam, GuildIdParam, UserIdParam} from '@fluxer/schema/src/domains/common/CommonParamSchemas';
|
||||
import {createGuildID, createUserID} from '../../BrandedTypes';
|
||||
import {requireAdminACL, requireAnyAdminACL} from '../../middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '../../middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '../../middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '../../RateLimitConfig';
|
||||
import type {HonoApp} from '../../types/HonoEnv';
|
||||
import {Validator} from '../../Validator';
|
||||
|
||||
function canViewArchive(adminAcls: Set<string>, subjectType: ArchiveSubjectType): boolean {
|
||||
if (adminAcls.has(AdminACLs.WILDCARD) || adminAcls.has(AdminACLs.ARCHIVE_VIEW_ALL)) return true;
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {createGuildID} from '@app/api/BrandedTypes';
|
||||
import {requireAdminACL} from '@app/api/middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware';
|
||||
import {AdminRateLimitConfigs} from '@app/api/rate_limit_configs/AdminRateLimitConfig';
|
||||
import type {HonoApp} from '@app/api/types/HonoEnv';
|
||||
import {Validator} from '@app/api/Validator';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {PurgeGuildAssetsRequest, PurgeGuildAssetsResponseSchema} from '@fluxer/schema/src/domains/admin/AdminSchemas';
|
||||
import {GuildIdParam} from '@fluxer/schema/src/domains/common/CommonParamSchemas';
|
||||
import {createGuildID} from '../../BrandedTypes';
|
||||
import {requireAdminACL} from '../../middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '../../middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '../../middleware/ResponseTypeMiddleware';
|
||||
import {AdminRateLimitConfigs} from '../../rate_limit_configs/AdminRateLimitConfig';
|
||||
import type {HonoApp} from '../../types/HonoEnv';
|
||||
import {Validator} from '../../Validator';
|
||||
|
||||
export function AssetAdminController(app: HonoApp) {
|
||||
app.delete(
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {requireAdminACL} from '@app/api/middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '@app/api/RateLimitConfig';
|
||||
import type {HonoApp} from '@app/api/types/HonoEnv';
|
||||
import {Validator} from '@app/api/Validator';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes';
|
||||
import {NotFoundError} from '@fluxer/errors/src/domains/core/NotFoundError';
|
||||
@@ -9,12 +15,6 @@ import {
|
||||
AuditLogsListResponseSchema,
|
||||
ListAdminAuditLogsQuery,
|
||||
} from '@fluxer/schema/src/domains/admin/AdminSchemas';
|
||||
import {requireAdminACL} from '../../middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '../../middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '../../middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '../../RateLimitConfig';
|
||||
import type {HonoApp} from '../../types/HonoEnv';
|
||||
import {Validator} from '../../Validator';
|
||||
|
||||
export function AuditLogAdminController(app: HonoApp) {
|
||||
app.get(
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {requireAdminACL, requireAnyAdminACL} from '@app/api/middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware';
|
||||
import {getWorkerService} from '@app/api/middleware/ServiceRegistry';
|
||||
import {RateLimitConfigs} from '@app/api/RateLimitConfig';
|
||||
import type {HonoApp} from '@app/api/types/HonoEnv';
|
||||
import {requireRequestJsonBody} from '@app/api/utils/RequestJsonBody';
|
||||
import {inputValidationErrorFromZodIssues, Validator} from '@app/api/Validator';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes';
|
||||
import {BadRequestError} from '@fluxer/errors/src/domains/core/BadRequestError';
|
||||
@@ -40,14 +48,6 @@ import {
|
||||
} from '@fluxer/schema/src/domains/admin/AdminSchemas';
|
||||
import {UserIdParam} from '@fluxer/schema/src/domains/common/CommonParamSchemas';
|
||||
import type {ZodType} from 'zod';
|
||||
import {requireAdminACL, requireAnyAdminACL} from '../../middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '../../middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '../../middleware/ResponseTypeMiddleware';
|
||||
import {getWorkerService} from '../../middleware/ServiceRegistry';
|
||||
import {RateLimitConfigs} from '../../RateLimitConfig';
|
||||
import type {HonoApp} from '../../types/HonoEnv';
|
||||
import {requireRequestJsonBody} from '../../utils/RequestJsonBody';
|
||||
import {inputValidationErrorFromZodIssues, Validator} from '../../Validator';
|
||||
|
||||
type ProfileSubstringScope = BanProfileSubstringRequest['scope'];
|
||||
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {UserID} from '@app/api/BrandedTypes';
|
||||
import {requireAnyAdminACL} from '@app/api/middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware';
|
||||
import {getWorkerService} from '@app/api/middleware/ServiceRegistry';
|
||||
import {RateLimitConfigs} from '@app/api/RateLimitConfig';
|
||||
import type {HonoApp} from '@app/api/types/HonoEnv';
|
||||
import {Validator} from '@app/api/Validator';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {MissingACLError} from '@fluxer/errors/src/domains/core/MissingACLError';
|
||||
import {AdminBulkJobCreateRequest, AdminBulkTaskType} from '@fluxer/schema/src/domains/admin/AdminBulkSchemas';
|
||||
import {BulkJobResponse} from '@fluxer/schema/src/domains/admin/AdminSchemas';
|
||||
import type {UserID} from '../../BrandedTypes';
|
||||
import {requireAnyAdminACL} from '../../middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '../../middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '../../middleware/ResponseTypeMiddleware';
|
||||
import {getWorkerService} from '../../middleware/ServiceRegistry';
|
||||
import {RateLimitConfigs} from '../../RateLimitConfig';
|
||||
import type {HonoApp} from '../../types/HonoEnv';
|
||||
import {Validator} from '../../Validator';
|
||||
|
||||
const BULK_TASK_ACLS: Record<AdminBulkTaskType, string> = {
|
||||
[AdminBulkTaskType.UPDATE_USER_FLAGS]: AdminACLs.BULK_UPDATE_USER_FLAGS,
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {Config} from '@app/api/Config';
|
||||
import {requireAdminACL} from '@app/api/middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '@app/api/RateLimitConfig';
|
||||
import type {HonoApp} from '@app/api/types/HonoEnv';
|
||||
import {Validator} from '@app/api/Validator';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {FeatureNotAvailableSelfHostedError} from '@fluxer/errors/src/domains/core/FeatureNotAvailableSelfHostedError';
|
||||
import {CodesResponse, GenerateGiftCodesRequest} from '@fluxer/schema/src/domains/admin/AdminSchemas';
|
||||
import {Config} from '../../Config';
|
||||
import {requireAdminACL} from '../../middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '../../middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '../../middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '../../RateLimitConfig';
|
||||
import type {HonoApp} from '../../types/HonoEnv';
|
||||
import {Validator} from '../../Validator';
|
||||
|
||||
function trimTrailingSlash(value: string): string {
|
||||
return value.endsWith('/') ? value.slice(0, -1) : value;
|
||||
|
||||
@@ -1,5 +1,17 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {createGuildID} from '@app/api/BrandedTypes';
|
||||
import type {GuildDiscoveryRow} from '@app/api/database/types/GuildDiscoveryTypes';
|
||||
import {mapGuildFeatures} from '@app/api/guild/GuildFeatureUtils';
|
||||
import type {GuildService} from '@app/api/guild/services/GuildService';
|
||||
import {requireAdminACL} from '@app/api/middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware';
|
||||
import type {User} from '@app/api/models/User';
|
||||
import {RateLimitConfigs} from '@app/api/RateLimitConfig';
|
||||
import type {HonoApp} from '@app/api/types/HonoEnv';
|
||||
import type {IUserRepository} from '@app/api/user/IUserRepository';
|
||||
import {Validator} from '@app/api/Validator';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {DiscoveryApplicationStatus, DiscoveryCategoryLabels} from '@fluxer/constants/src/DiscoveryConstants';
|
||||
import {GuildIdParam} from '@fluxer/schema/src/domains/common/CommonParamSchemas';
|
||||
@@ -17,19 +29,6 @@ import {
|
||||
DiscoveryCategoryListResponse,
|
||||
} from '@fluxer/schema/src/domains/guild/GuildDiscoverySchemas';
|
||||
|
||||
import {createGuildID} from '../../BrandedTypes';
|
||||
import type {GuildDiscoveryRow} from '../../database/types/GuildDiscoveryTypes';
|
||||
import {mapGuildFeatures} from '../../guild/GuildFeatureUtils';
|
||||
import type {GuildService} from '../../guild/services/GuildService';
|
||||
import {requireAdminACL} from '../../middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '../../middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '../../middleware/ResponseTypeMiddleware';
|
||||
import type {User} from '../../models/User';
|
||||
import {RateLimitConfigs} from '../../RateLimitConfig';
|
||||
import type {HonoApp} from '../../types/HonoEnv';
|
||||
import type {IUserRepository} from '../../user/IUserRepository';
|
||||
import {Validator} from '../../Validator';
|
||||
|
||||
function mapRowToApplicationResponse(row: GuildDiscoveryRow) {
|
||||
return {
|
||||
guild_id: row.guild_id.toString(),
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {createGuildID} from '@app/api/BrandedTypes';
|
||||
import {requireAdminACL} from '@app/api/middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '@app/api/RateLimitConfig';
|
||||
import type {HonoApp} from '@app/api/types/HonoEnv';
|
||||
import {Validator} from '@app/api/Validator';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {GetProcessMemoryStatsQuery} from '@fluxer/schema/src/domains/admin/AdminGuildSchemas';
|
||||
import {
|
||||
@@ -9,13 +16,6 @@ import {
|
||||
ReloadAllGuildsResponse,
|
||||
ReloadGuildsRequest,
|
||||
} from '@fluxer/schema/src/domains/admin/AdminSchemas';
|
||||
import {createGuildID} from '../../BrandedTypes';
|
||||
import {requireAdminACL} from '../../middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '../../middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '../../middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '../../RateLimitConfig';
|
||||
import type {HonoApp} from '../../types/HonoEnv';
|
||||
import {Validator} from '../../Validator';
|
||||
|
||||
export function GatewayAdminController(app: HonoApp) {
|
||||
app.get(
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {createGuildID} from '@app/api/BrandedTypes';
|
||||
import {requireAdminACL, requireAnyAdminACL} from '@app/api/middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware';
|
||||
import {AdminRateLimitConfigs} from '@app/api/rate_limit_configs/AdminRateLimitConfig';
|
||||
import type {HonoApp} from '@app/api/types/HonoEnv';
|
||||
import {Validator} from '@app/api/Validator';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {MissingACLError} from '@fluxer/errors/src/domains/core/MissingACLError';
|
||||
import {UnknownGuildError} from '@fluxer/errors/src/domains/guild/UnknownGuildError';
|
||||
@@ -20,13 +27,6 @@ import {
|
||||
} from '@fluxer/schema/src/domains/admin/AdminSchemas';
|
||||
import {GuildIdParam, GuildIdUserIdParam, SuccessResponse} from '@fluxer/schema/src/domains/common/CommonParamSchemas';
|
||||
import {GuildAuditLogListQuery} from '@fluxer/schema/src/domains/guild/GuildAuditLogSchemas';
|
||||
import {createGuildID} from '../../BrandedTypes';
|
||||
import {requireAdminACL, requireAnyAdminACL} from '../../middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '../../middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '../../middleware/ResponseTypeMiddleware';
|
||||
import {AdminRateLimitConfigs} from '../../rate_limit_configs/AdminRateLimitConfig';
|
||||
import type {HonoApp} from '../../types/HonoEnv';
|
||||
import {Validator} from '../../Validator';
|
||||
|
||||
const GUILD_UPDATE_ACLS = [
|
||||
AdminACLs.GUILD_UPDATE_NAME,
|
||||
|
||||
@@ -1,5 +1,20 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {createUserID} from '@app/api/BrandedTypes';
|
||||
import {Config} from '@app/api/Config';
|
||||
import {
|
||||
type InstancePolicyConfig,
|
||||
REGISTRATION_PENDING_APPROVAL_TRAIT,
|
||||
REGISTRATION_REJECTED_TRAIT,
|
||||
} from '@app/api/instance/InstanceConfigRepository';
|
||||
import {deriveSsoRedirectUri, normalizeAndValidateSsoConfig} from '@app/api/instance/SsoConfigValidation';
|
||||
import {requireAdminACL} from '@app/api/middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware';
|
||||
import {getGatewayRolloutConfigPublisher, getInstanceConfigRepository} from '@app/api/middleware/ServiceSingletons';
|
||||
import {RateLimitConfigs} from '@app/api/RateLimitConfig';
|
||||
import type {HonoApp, HonoEnv} from '@app/api/types/HonoEnv';
|
||||
import {Validator} from '@app/api/Validator';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {InstancePolicyTransitionNotAllowedError} from '@fluxer/errors/src/domains/core/InstancePolicyTransitionNotAllowedError';
|
||||
import {
|
||||
@@ -21,21 +36,6 @@ import type {InstanceBranding} from '@fluxer/schema/src/domains/instance/Instanc
|
||||
import {SmtpEmailProvider} from '@pkgs/email/src/SmtpEmailProvider';
|
||||
import type {Context} from 'hono';
|
||||
import {createMiddleware} from 'hono/factory';
|
||||
import {createUserID} from '../../BrandedTypes';
|
||||
import {Config} from '../../Config';
|
||||
import {
|
||||
type InstancePolicyConfig,
|
||||
REGISTRATION_PENDING_APPROVAL_TRAIT,
|
||||
REGISTRATION_REJECTED_TRAIT,
|
||||
} from '../../instance/InstanceConfigRepository';
|
||||
import {deriveSsoRedirectUri, normalizeAndValidateSsoConfig} from '../../instance/SsoConfigValidation';
|
||||
import {requireAdminACL} from '../../middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '../../middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '../../middleware/ResponseTypeMiddleware';
|
||||
import {getGatewayRolloutConfigPublisher, getInstanceConfigRepository} from '../../middleware/ServiceSingletons';
|
||||
import {RateLimitConfigs} from '../../RateLimitConfig';
|
||||
import type {HonoApp, HonoEnv} from '../../types/HonoEnv';
|
||||
import {Validator} from '../../Validator';
|
||||
|
||||
const INSTANCE_BRANDING_ENTITY_ID = 0n;
|
||||
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {requireAdminACL} from '@app/api/middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '@app/api/RateLimitConfig';
|
||||
import type {HonoApp} from '@app/api/types/HonoEnv';
|
||||
import {Validator} from '@app/api/Validator';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {
|
||||
ActiveJobsResponseSchema,
|
||||
@@ -10,12 +16,6 @@ import {
|
||||
ListJobsResponseSchema,
|
||||
} from '@fluxer/schema/src/domains/admin/JobsSchemas';
|
||||
import {JobIdParam} from '@fluxer/schema/src/domains/common/CommonParamSchemas';
|
||||
import {requireAdminACL} from '../../middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '../../middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '../../middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '../../RateLimitConfig';
|
||||
import type {HonoApp} from '../../types/HonoEnv';
|
||||
import {Validator} from '../../Validator';
|
||||
|
||||
function toListJobsRequest(query: ListJobsQuery): ListJobsRequest {
|
||||
return {
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {Config} from '@app/api/Config';
|
||||
import type {LimitConfigService} from '@app/api/limits/LimitConfigService';
|
||||
import {requireAdminACL} from '@app/api/middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '@app/api/RateLimitConfig';
|
||||
import type {HonoApp} from '@app/api/types/HonoEnv';
|
||||
import {Validator} from '@app/api/Validator';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {LIMIT_CATEGORY_LABELS, LIMIT_KEY_METADATA, LIMIT_KEYS} from '@fluxer/constants/src/LimitConfigMetadata';
|
||||
import type {LimitConfigSnapshot} from '@fluxer/limits/src/LimitTypes';
|
||||
import {LimitConfigGetResponse, LimitConfigUpdateRequest} from '@fluxer/schema/src/domains/admin/AdminSchemas';
|
||||
import {Config} from '../../Config';
|
||||
import type {LimitConfigService} from '../../limits/LimitConfigService';
|
||||
import {requireAdminACL} from '../../middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '../../middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '../../middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '../../RateLimitConfig';
|
||||
import type {HonoApp} from '../../types/HonoEnv';
|
||||
import {Validator} from '../../Validator';
|
||||
|
||||
function formatConfig(service: LimitConfigService) {
|
||||
const config = service.getConfigSnapshot();
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {createAttachmentID, createChannelID, createMessageID, createReportID} from '@app/api/BrandedTypes';
|
||||
import {requireAdminACL} from '@app/api/middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '@app/api/RateLimitConfig';
|
||||
import type {HonoApp} from '@app/api/types/HonoEnv';
|
||||
import {Validator} from '@app/api/Validator';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {ValidationErrorCodes} from '@fluxer/constants/src/ValidationErrorCodes';
|
||||
import {InputValidationError} from '@fluxer/errors/src/domains/core/InputValidationError';
|
||||
@@ -29,13 +36,6 @@ import {
|
||||
ChannelIdParam,
|
||||
UserIdParam,
|
||||
} from '@fluxer/schema/src/domains/common/CommonParamSchemas';
|
||||
import {createAttachmentID, createChannelID, createMessageID, createReportID} from '../../BrandedTypes';
|
||||
import {requireAdminACL} from '../../middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '../../middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '../../middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '../../RateLimitConfig';
|
||||
import type {HonoApp} from '../../types/HonoEnv';
|
||||
import {Validator} from '../../Validator';
|
||||
|
||||
export function MessageAdminController(app: HonoApp) {
|
||||
app.get(
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {createReportID} from '@app/api/BrandedTypes';
|
||||
import {requireAdminACL} from '@app/api/middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '@app/api/RateLimitConfig';
|
||||
import type {HonoApp} from '@app/api/types/HonoEnv';
|
||||
import {Validator} from '@app/api/Validator';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {
|
||||
AdminReportListResponse,
|
||||
@@ -10,13 +17,6 @@ import {
|
||||
UpdateReportRequest,
|
||||
} from '@fluxer/schema/src/domains/admin/AdminSchemas';
|
||||
import {ReportIdParam} from '@fluxer/schema/src/domains/common/CommonParamSchemas';
|
||||
import {createReportID} from '../../BrandedTypes';
|
||||
import {requireAdminACL} from '../../middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '../../middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '../../middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '../../RateLimitConfig';
|
||||
import type {HonoApp} from '../../types/HonoEnv';
|
||||
import {Validator} from '../../Validator';
|
||||
|
||||
const REPORT_STATUS_BY_FILTER = {
|
||||
pending: 0,
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {requireAdminACL} from '@app/api/middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '@app/api/RateLimitConfig';
|
||||
import type {HonoApp} from '@app/api/types/HonoEnv';
|
||||
import {Validator} from '@app/api/Validator';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {
|
||||
IndexRefreshStatusResponse,
|
||||
@@ -8,12 +14,6 @@ import {
|
||||
SearchIndexNameParam,
|
||||
SearchIndexRefreshIdParam,
|
||||
} from '@fluxer/schema/src/domains/admin/AdminSchemas';
|
||||
import {requireAdminACL} from '../../middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '../../middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '../../middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '../../RateLimitConfig';
|
||||
import type {HonoApp} from '../../types/HonoEnv';
|
||||
import {Validator} from '../../Validator';
|
||||
|
||||
export function SearchAdminController(app: HonoApp) {
|
||||
app.post(
|
||||
|
||||
@@ -4,13 +4,13 @@ import * as fs from 'node:fs';
|
||||
import * as path from 'node:path';
|
||||
import {Readable} from 'node:stream';
|
||||
import * as v8 from 'node:v8';
|
||||
import {requireAdminACL} from '@app/api/middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '@app/api/RateLimitConfig';
|
||||
import type {HonoApp} from '@app/api/types/HonoEnv';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {HeapSnapshotResponse} from '@fluxer/schema/src/domains/admin/AdminSchemas';
|
||||
import {requireAdminACL} from '../../middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '../../middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '../../middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '../../RateLimitConfig';
|
||||
import type {HonoApp} from '../../types/HonoEnv';
|
||||
|
||||
export function SystemAdminController(app: HonoApp) {
|
||||
app.post(
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {requireAdminACL} from '@app/api/middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '@app/api/RateLimitConfig';
|
||||
import type {HonoApp} from '@app/api/types/HonoEnv';
|
||||
import {Validator} from '@app/api/Validator';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {SendSystemDmRequest, SendSystemDmResponse} from '@fluxer/schema/src/domains/admin/AdminSchemas';
|
||||
import {requireAdminACL} from '../../middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '../../middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '../../middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '../../RateLimitConfig';
|
||||
import type {HonoApp} from '../../types/HonoEnv';
|
||||
import {Validator} from '../../Validator';
|
||||
|
||||
export function SystemDmAdminController(app: HonoApp) {
|
||||
app.post(
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {mapUserToAdminResponse} from '@app/api/admin/models/UserTypes';
|
||||
import {createUserID} from '@app/api/BrandedTypes';
|
||||
import {requireAdminACL} from '@app/api/middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '@app/api/RateLimitConfig';
|
||||
import type {HonoApp} from '@app/api/types/HonoEnv';
|
||||
import {inputValidationErrorFromZodIssues, Validator} from '@app/api/Validator';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {MissingACLError} from '@fluxer/errors/src/domains/core/MissingACLError';
|
||||
import {ListUserGuildsResponse} from '@fluxer/schema/src/domains/admin/AdminGuildSchemas';
|
||||
@@ -41,14 +49,6 @@ import {
|
||||
} from '@fluxer/schema/src/domains/admin/AdminUserSchemas';
|
||||
import {WebAuthnCredentialListResponse} from '@fluxer/schema/src/domains/auth/AuthSchemas';
|
||||
import {UserIdParam} from '@fluxer/schema/src/domains/common/CommonParamSchemas';
|
||||
import {createUserID} from '../../BrandedTypes';
|
||||
import {requireAdminACL} from '../../middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '../../middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '../../middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '../../RateLimitConfig';
|
||||
import type {HonoApp} from '../../types/HonoEnv';
|
||||
import {inputValidationErrorFromZodIssues, Validator} from '../../Validator';
|
||||
import {mapUserToAdminResponse} from '../models/UserTypes';
|
||||
|
||||
function requireSelectorACL(granted: ReadonlySet<string>, acl: string): void {
|
||||
if (!granted.has(acl) && !granted.has(AdminACLs.WILDCARD)) {
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {requireAdminACL} from '@app/api/middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '@app/api/RateLimitConfig';
|
||||
import type {HonoApp, HonoEnv} from '@app/api/types/HonoEnv';
|
||||
import {Validator} from '@app/api/Validator';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {
|
||||
CreateVoiceRegionRequest,
|
||||
@@ -24,12 +30,6 @@ import {
|
||||
VoiceServerIdParam,
|
||||
} from '@fluxer/schema/src/domains/admin/AdminVoiceSchemas';
|
||||
import type {Context} from 'hono';
|
||||
import {requireAdminACL} from '../../middleware/AdminMiddleware';
|
||||
import {RateLimitMiddleware} from '../../middleware/RateLimitMiddleware';
|
||||
import {OpenAPI} from '../../middleware/ResponseTypeMiddleware';
|
||||
import {RateLimitConfigs} from '../../RateLimitConfig';
|
||||
import type {HonoApp, HonoEnv} from '../../types/HonoEnv';
|
||||
import {Validator} from '../../Validator';
|
||||
|
||||
function isPlainObject(value: unknown): value is Record<string, unknown> {
|
||||
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
||||
|
||||
@@ -1,27 +1,27 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {HonoApp} from '../../types/HonoEnv';
|
||||
import {AdminApiKeyAdminController} from './AdminApiKeyAdminController';
|
||||
import {ApplicationAdminController} from './ApplicationAdminController';
|
||||
import {ArchiveAdminController} from './ArchiveAdminController';
|
||||
import {AssetAdminController} from './AssetAdminController';
|
||||
import {AuditLogAdminController} from './AuditLogAdminController';
|
||||
import {BanAdminController} from './BanAdminController';
|
||||
import {BulkAdminController} from './BulkAdminController';
|
||||
import {CodesAdminController} from './CodesAdminController';
|
||||
import {DiscoveryAdminController} from './DiscoveryAdminController';
|
||||
import {GatewayAdminController} from './GatewayAdminController';
|
||||
import {GuildAdminController} from './GuildAdminController';
|
||||
import {InstanceConfigAdminController} from './InstanceConfigAdminController';
|
||||
import {JobsAdminController} from './JobsAdminController';
|
||||
import {LimitConfigAdminController} from './LimitConfigAdminController';
|
||||
import {MessageAdminController} from './MessageAdminController';
|
||||
import {ReportAdminController} from './ReportAdminController';
|
||||
import {SearchAdminController} from './SearchAdminController';
|
||||
import {SystemAdminController} from './SystemAdminController';
|
||||
import {SystemDmAdminController} from './SystemDmAdminController';
|
||||
import {UserAdminController} from './UserAdminController';
|
||||
import {VoiceAdminController} from './VoiceAdminController';
|
||||
import {AdminApiKeyAdminController} from '@app/api/admin/controllers/AdminApiKeyAdminController';
|
||||
import {ApplicationAdminController} from '@app/api/admin/controllers/ApplicationAdminController';
|
||||
import {ArchiveAdminController} from '@app/api/admin/controllers/ArchiveAdminController';
|
||||
import {AssetAdminController} from '@app/api/admin/controllers/AssetAdminController';
|
||||
import {AuditLogAdminController} from '@app/api/admin/controllers/AuditLogAdminController';
|
||||
import {BanAdminController} from '@app/api/admin/controllers/BanAdminController';
|
||||
import {BulkAdminController} from '@app/api/admin/controllers/BulkAdminController';
|
||||
import {CodesAdminController} from '@app/api/admin/controllers/CodesAdminController';
|
||||
import {DiscoveryAdminController} from '@app/api/admin/controllers/DiscoveryAdminController';
|
||||
import {GatewayAdminController} from '@app/api/admin/controllers/GatewayAdminController';
|
||||
import {GuildAdminController} from '@app/api/admin/controllers/GuildAdminController';
|
||||
import {InstanceConfigAdminController} from '@app/api/admin/controllers/InstanceConfigAdminController';
|
||||
import {JobsAdminController} from '@app/api/admin/controllers/JobsAdminController';
|
||||
import {LimitConfigAdminController} from '@app/api/admin/controllers/LimitConfigAdminController';
|
||||
import {MessageAdminController} from '@app/api/admin/controllers/MessageAdminController';
|
||||
import {ReportAdminController} from '@app/api/admin/controllers/ReportAdminController';
|
||||
import {SearchAdminController} from '@app/api/admin/controllers/SearchAdminController';
|
||||
import {SystemAdminController} from '@app/api/admin/controllers/SystemAdminController';
|
||||
import {SystemDmAdminController} from '@app/api/admin/controllers/SystemDmAdminController';
|
||||
import {UserAdminController} from '@app/api/admin/controllers/UserAdminController';
|
||||
import {VoiceAdminController} from '@app/api/admin/controllers/VoiceAdminController';
|
||||
import type {HonoApp} from '@app/api/types/HonoEnv';
|
||||
|
||||
export function registerAdminControllers(app: HonoApp) {
|
||||
AdminApiKeyAdminController(app);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {AdminArchiveRow} from '@app/api/database/types/AdminArchiveTypes';
|
||||
import type {AdminArchiveResponse, ArchiveSubjectType} from '@fluxer/schema/src/domains/admin/AdminArchiveSchemas';
|
||||
import type {AdminArchiveRow} from '../../database/types/AdminArchiveTypes';
|
||||
|
||||
export class AdminArchive {
|
||||
subjectType: ArchiveSubjectType;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {mapGuildFeatures} from '@app/api/guild/GuildFeatureUtils';
|
||||
import type {Guild} from '@app/api/models/Guild';
|
||||
import type {User} from '@app/api/models/User';
|
||||
import type {GuildAdminResponse, ListUserGuildsResponse} from '@fluxer/schema/src/domains/admin/AdminGuildSchemas';
|
||||
import {mapGuildFeatures} from '../../guild/GuildFeatureUtils';
|
||||
import type {Guild} from '../../models/Guild';
|
||||
import type {User} from '../../models/User';
|
||||
|
||||
function formatOwnerFields(ownerUser: User | null): {
|
||||
owner_username: string | null;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {User} from '@app/api/models/User';
|
||||
import {getIpAddressReverse, lookupGeoip} from '@app/api/utils/IpUtils';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {DEFERRED_PHONE_ON_COMMUNITY_JOIN} from '@fluxer/constants/src/UserConstants';
|
||||
import type {UserAdminResponse} from '@fluxer/schema/src/domains/admin/AdminUserSchemas';
|
||||
import type {ICacheService} from '@pkgs/cache/src/ICacheService';
|
||||
import {formatGeoipLocation} from '@pkgs/geoip/src/GeoipLookup';
|
||||
import type {User} from '../../models/User';
|
||||
import {getIpAddressReverse, lookupGeoip} from '../../utils/IpUtils';
|
||||
|
||||
function hasAcl(acls: ReadonlySet<string>, acl: string): boolean {
|
||||
return acls.has(acl) || acls.has(AdminACLs.WILDCARD);
|
||||
|
||||
@@ -1,13 +1,23 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {UserID} from '../../BrandedTypes';
|
||||
import {BatchBuilder, fetchMany, fetchManyInChunks, fetchOne, upsertOne} from '../../database/CassandraQueryExecution';
|
||||
import {Db} from '../../database/CassandraTypes';
|
||||
import type {AdminApiKeyByCreatorRow, AdminApiKeyRow} from '../../database/types/AdminAuthTypes';
|
||||
import {AdminApiKey} from '../../models/AdminApiKey';
|
||||
import {AdminApiKeys, AdminApiKeysByCreator} from '../../Tables';
|
||||
import {hashPassword} from '../../utils/PasswordUtils';
|
||||
import type {CreateAdminApiKeyData, IAdminApiKeyRepository, UpdateAdminApiKeyData} from './IAdminApiKeyRepository';
|
||||
import type {
|
||||
CreateAdminApiKeyData,
|
||||
IAdminApiKeyRepository,
|
||||
UpdateAdminApiKeyData,
|
||||
} from '@app/api/admin/repositories/IAdminApiKeyRepository';
|
||||
import type {UserID} from '@app/api/BrandedTypes';
|
||||
import {
|
||||
BatchBuilder,
|
||||
fetchMany,
|
||||
fetchManyInChunks,
|
||||
fetchOne,
|
||||
upsertOne,
|
||||
} from '@app/api/database/CassandraQueryExecution';
|
||||
import {Db} from '@app/api/database/CassandraTypes';
|
||||
import type {AdminApiKeyByCreatorRow, AdminApiKeyRow} from '@app/api/database/types/AdminAuthTypes';
|
||||
import {AdminApiKey} from '@app/api/models/AdminApiKey';
|
||||
import {AdminApiKeys, AdminApiKeysByCreator} from '@app/api/Tables';
|
||||
import {hashPassword} from '@app/api/utils/PasswordUtils';
|
||||
|
||||
function computeTtlSeconds(expiresAt: Date): number {
|
||||
const diffSeconds = Math.floor((expiresAt.getTime() - Date.now()) / 1000);
|
||||
|
||||
@@ -2,20 +2,20 @@
|
||||
|
||||
import assert from 'node:assert/strict';
|
||||
import {randomUUID} from 'node:crypto';
|
||||
import type {ArchiveSubjectType} from '@fluxer/schema/src/domains/admin/AdminArchiveSchemas';
|
||||
import {ms} from 'itty-time';
|
||||
import {ArchiveAttemptSupersededError} from '../../archive/ArchiveAttemptSupersededError';
|
||||
import {BatchBuilder, executeConditional, fetchMany, fetchOne} from '../../database/CassandraQueryExecution';
|
||||
import {Db, type DbOp} from '../../database/CassandraTypes';
|
||||
import {AdminArchive} from '@app/api/admin/models/AdminArchiveModel';
|
||||
import {ArchiveAttemptSupersededError} from '@app/api/archive/ArchiveAttemptSupersededError';
|
||||
import {BatchBuilder, executeConditional, fetchMany, fetchOne} from '@app/api/database/CassandraQueryExecution';
|
||||
import {Db, type DbOp} from '@app/api/database/CassandraTypes';
|
||||
import {
|
||||
ADMIN_ARCHIVE_INDEX_COLUMNS,
|
||||
type AdminArchiveIndexRow,
|
||||
type AdminArchiveRow,
|
||||
} from '../../database/types/AdminArchiveTypes';
|
||||
import {Logger} from '../../Logger';
|
||||
import {AdminArchivesByRequester, AdminArchivesBySubject, AdminArchivesByType} from '../../Tables';
|
||||
import {mapWithConcurrency} from '../../utils/ConcurrencyUtils';
|
||||
import {AdminArchive} from '../models/AdminArchiveModel';
|
||||
} from '@app/api/database/types/AdminArchiveTypes';
|
||||
import {Logger} from '@app/api/Logger';
|
||||
import {AdminArchivesByRequester, AdminArchivesBySubject, AdminArchivesByType} from '@app/api/Tables';
|
||||
import {mapWithConcurrency} from '@app/api/utils/ConcurrencyUtils';
|
||||
import type {ArchiveSubjectType} from '@fluxer/schema/src/domains/admin/AdminArchiveSchemas';
|
||||
import {ms} from 'itty-time';
|
||||
|
||||
const RETENTION_DAYS = 365;
|
||||
const DEFAULT_RETENTION_MS = ms(`${RETENTION_DAYS} days`);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {UserID} from '../../BrandedTypes';
|
||||
import type {AdminApiKey} from '../../models/AdminApiKey';
|
||||
import type {UserID} from '@app/api/BrandedTypes';
|
||||
import type {AdminApiKey} from '@app/api/models/AdminApiKey';
|
||||
|
||||
export interface CreateAdminApiKeyData {
|
||||
name: string;
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {randomInt} from 'node:crypto';
|
||||
import type {IAdminApiKeyRepository} from '@app/api/admin/repositories/IAdminApiKeyRepository';
|
||||
import type {UserID} from '@app/api/BrandedTypes';
|
||||
import type {ISnowflakeService} from '@app/api/infrastructure/ISnowflakeService';
|
||||
import type {AdminApiKey} from '@app/api/models/AdminApiKey';
|
||||
import {verifyPassword} from '@app/api/utils/PasswordUtils';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {AdminApiKeyNotFoundError} from '@fluxer/errors/src/domains/admin/AdminApiKeyNotFoundError';
|
||||
import {MissingACLError} from '@fluxer/errors/src/domains/core/MissingACLError';
|
||||
import type {CreateAdminApiKeyRequest, UpdateAdminApiKeyRequest} from '@fluxer/schema/src/domains/admin/AdminSchemas';
|
||||
import {ms} from 'itty-time';
|
||||
import type {UserID} from '../../BrandedTypes';
|
||||
import type {ISnowflakeService} from '../../infrastructure/ISnowflakeService';
|
||||
import type {AdminApiKey} from '../../models/AdminApiKey';
|
||||
import {verifyPassword} from '../../utils/PasswordUtils';
|
||||
import type {IAdminApiKeyRepository} from '../repositories/IAdminApiKeyRepository';
|
||||
|
||||
const ADMIN_KEY_PREFIX = 'fa_';
|
||||
const RANDOM_KEY_LENGTH = 32;
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {ApiContext} from '@app/api/ApiContext';
|
||||
import type {AdminAuditService} from '@app/api/admin/services/AdminAuditService';
|
||||
import {type ApplicationID, createApplicationID, createUserID, type GuildID, type UserID} from '@app/api/BrandedTypes';
|
||||
import type {IGuildRepositoryAggregate} from '@app/api/guild/repositories/IGuildRepositoryAggregate';
|
||||
import type {Application} from '@app/api/models/Application';
|
||||
import type {IApplicationRepository} from '@app/api/oauth/repositories/IApplicationRepository';
|
||||
import {UnknownGuildError} from '@fluxer/errors/src/domains/guild/UnknownGuildError';
|
||||
import {UnknownApplicationError} from '@fluxer/errors/src/domains/oauth/UnknownApplicationError';
|
||||
import {UnknownUserError} from '@fluxer/errors/src/domains/user/UnknownUserError';
|
||||
@@ -9,12 +15,6 @@ import type {
|
||||
LookupApplicationResponse,
|
||||
TransferApplicationOwnershipRequest,
|
||||
} from '@fluxer/schema/src/domains/admin/AdminApplicationSchemas';
|
||||
import type {ApiContext} from '../../ApiContext';
|
||||
import {type ApplicationID, createApplicationID, createUserID, type GuildID, type UserID} from '../../BrandedTypes';
|
||||
import type {IGuildRepositoryAggregate} from '../../guild/repositories/IGuildRepositoryAggregate';
|
||||
import type {Application} from '../../models/Application';
|
||||
import type {IApplicationRepository} from '../../oauth/repositories/IApplicationRepository';
|
||||
import type {AdminAuditService} from './AdminAuditService';
|
||||
|
||||
interface AdminApplicationServiceDeps {
|
||||
apiContext: ApiContext;
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {AdminArchive} from '@app/api/admin/models/AdminArchiveModel';
|
||||
import type {AdminArchiveRepository} from '@app/api/admin/repositories/AdminArchiveRepository';
|
||||
import type {GuildID, UserID} from '@app/api/BrandedTypes';
|
||||
import {Config} from '@app/api/Config';
|
||||
import type {IGuildRepositoryAggregate} from '@app/api/guild/repositories/IGuildRepositoryAggregate';
|
||||
import type {ISnowflakeService} from '@app/api/infrastructure/ISnowflakeService';
|
||||
import type {IStorageService} from '@app/api/infrastructure/IStorageService';
|
||||
import type {IUserRepository} from '@app/api/user/IUserRepository';
|
||||
import type {WorkerTaskName} from '@app/api/worker/WorkerLaneConfig';
|
||||
import {InputValidationError} from '@fluxer/errors/src/domains/core/InputValidationError';
|
||||
import {UnknownGuildError} from '@fluxer/errors/src/domains/guild/UnknownGuildError';
|
||||
import {HarvestExpiredError} from '@fluxer/errors/src/domains/moderation/HarvestExpiredError';
|
||||
@@ -10,15 +19,6 @@ import {UnknownUserError} from '@fluxer/errors/src/domains/user/UnknownUserError
|
||||
import type {AdminArchiveResponse, ArchiveSubjectType} from '@fluxer/schema/src/domains/admin/AdminArchiveSchemas';
|
||||
import type {IWorkerService} from '@pkgs/worker/src/contracts/IWorkerService';
|
||||
import {ms, seconds} from 'itty-time';
|
||||
import type {GuildID, UserID} from '../../BrandedTypes';
|
||||
import {Config} from '../../Config';
|
||||
import type {IGuildRepositoryAggregate} from '../../guild/repositories/IGuildRepositoryAggregate';
|
||||
import type {ISnowflakeService} from '../../infrastructure/ISnowflakeService';
|
||||
import type {IStorageService} from '../../infrastructure/IStorageService';
|
||||
import type {IUserRepository} from '../../user/IUserRepository';
|
||||
import type {WorkerTaskName} from '../../worker/WorkerLaneConfig';
|
||||
import {AdminArchive} from '../models/AdminArchiveModel';
|
||||
import type {AdminArchiveRepository} from '../repositories/AdminArchiveRepository';
|
||||
|
||||
const ARCHIVE_RETENTION_DAYS = 365;
|
||||
const DOWNLOAD_LINK_DAYS = 7;
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {AdminAuditService} from '@app/api/admin/services/AdminAuditService';
|
||||
import {createEmojiID, createStickerID, type GuildID, type UserID} from '@app/api/BrandedTypes';
|
||||
import {mapGuildEmojiToResponse, mapGuildStickerToResponse} from '@app/api/guild/GuildModel';
|
||||
import type {IGuildRepositoryAggregate} from '@app/api/guild/repositories/IGuildRepositoryAggregate';
|
||||
import {ExpressionAssetPurger} from '@app/api/guild/services/content/ExpressionAssetPurger';
|
||||
import type {IAssetDeletionQueue} from '@app/api/infrastructure/IAssetDeletionQueue';
|
||||
import type {IGatewayService} from '@app/api/infrastructure/IGatewayService';
|
||||
import type {GuildNSFWLevelValue} from '@fluxer/constants/src/GuildConstants';
|
||||
import type {
|
||||
PurgeGuildAssetError,
|
||||
PurgeGuildAssetResult,
|
||||
PurgeGuildAssetsResponse,
|
||||
} from '@fluxer/schema/src/domains/admin/AdminSchemas';
|
||||
import {createEmojiID, createStickerID, type GuildID, type UserID} from '../../BrandedTypes';
|
||||
import {mapGuildEmojiToResponse, mapGuildStickerToResponse} from '../../guild/GuildModel';
|
||||
import type {IGuildRepositoryAggregate} from '../../guild/repositories/IGuildRepositoryAggregate';
|
||||
import {ExpressionAssetPurger} from '../../guild/services/content/ExpressionAssetPurger';
|
||||
import type {IAssetDeletionQueue} from '../../infrastructure/IAssetDeletionQueue';
|
||||
import type {IGatewayService} from '../../infrastructure/IGatewayService';
|
||||
import type {AdminAuditService} from './AdminAuditService';
|
||||
|
||||
interface AdminAssetPurgeServiceDeps {
|
||||
guildRepository: IGuildRepositoryAggregate;
|
||||
|
||||
@@ -1,5 +1,17 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {AdminAuditLog, IAdminRepository} from '@app/api/admin/IAdminRepository';
|
||||
import type {UserID} from '@app/api/BrandedTypes';
|
||||
import {createChannelID, createGuildID, createUserID} from '@app/api/BrandedTypes';
|
||||
import type {IChannelRepository} from '@app/api/channel/IChannelRepository';
|
||||
import type {IGuildRepositoryAggregate} from '@app/api/guild/repositories/IGuildRepositoryAggregate';
|
||||
import type {ISnowflakeService} from '@app/api/infrastructure/ISnowflakeService';
|
||||
import {Logger} from '@app/api/Logger';
|
||||
import type {Channel} from '@app/api/models/Channel';
|
||||
import type {Guild} from '@app/api/models/Guild';
|
||||
import type {User} from '@app/api/models/User';
|
||||
import {getAuditLogSearchService} from '@app/api/SearchFactory';
|
||||
import type {IUserRepository} from '@app/api/user/IUserRepository';
|
||||
import type {
|
||||
AdminAuditLogChannelSummary,
|
||||
AdminAuditLogGuildSummary,
|
||||
@@ -7,18 +19,6 @@ import type {
|
||||
AdminAuditLogUserSummary,
|
||||
AuditLogsListResponse,
|
||||
} from '@fluxer/schema/src/domains/admin/AdminSchemas';
|
||||
import type {UserID} from '../../BrandedTypes';
|
||||
import {createChannelID, createGuildID, createUserID} from '../../BrandedTypes';
|
||||
import type {IChannelRepository} from '../../channel/IChannelRepository';
|
||||
import type {IGuildRepositoryAggregate} from '../../guild/repositories/IGuildRepositoryAggregate';
|
||||
import type {ISnowflakeService} from '../../infrastructure/ISnowflakeService';
|
||||
import {Logger} from '../../Logger';
|
||||
import type {Channel} from '../../models/Channel';
|
||||
import type {Guild} from '../../models/Guild';
|
||||
import type {User} from '../../models/User';
|
||||
import {getAuditLogSearchService} from '../../SearchFactory';
|
||||
import type {IUserRepository} from '../../user/IUserRepository';
|
||||
import type {AdminAuditLog, IAdminRepository} from '../IAdminRepository';
|
||||
|
||||
interface CreateAdminAuditLogParams {
|
||||
adminUserId: UserID;
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes';
|
||||
import {ValidationErrorCodes} from '@fluxer/constants/src/ValidationErrorCodes';
|
||||
import {BadRequestError} from '@fluxer/errors/src/domains/core/BadRequestError';
|
||||
import {InputValidationError} from '@fluxer/errors/src/domains/core/InputValidationError';
|
||||
import {NotFoundError} from '@fluxer/errors/src/domains/core/NotFoundError';
|
||||
import {UnknownUserError} from '@fluxer/errors/src/domains/user/UnknownUserError';
|
||||
import type {AdminBlocklistListType} from '@fluxer/schema/src/domains/admin/AdminBlocklistSchemas';
|
||||
import type {IpInfoLookupResult, IpInfoService} from '@pkgs/geoip/src/IpInfoService';
|
||||
import type {ApiContext} from '../../ApiContext';
|
||||
import {createUserID, type UserID} from '../../BrandedTypes';
|
||||
import type {ApiContext} from '@app/api/ApiContext';
|
||||
import type {IAdminRepository} from '@app/api/admin/IAdminRepository';
|
||||
import type {AdminAuditService} from '@app/api/admin/services/AdminAuditService';
|
||||
import {createUserID, type UserID} from '@app/api/BrandedTypes';
|
||||
import {
|
||||
BANNED_AVATAR_HASHES_REFRESH_CHANNEL,
|
||||
BANNED_FILE_SHAS_REFRESH_CHANNEL,
|
||||
@@ -19,28 +13,34 @@ import {
|
||||
BANNED_URLS_REFRESH_CHANNEL,
|
||||
ContentBlocklistCategory,
|
||||
ContentBlocklistSeverity,
|
||||
} from '../../constants/ContentModeration';
|
||||
import {IP_BAN_REFRESH_CHANNEL} from '../../constants/IpBan';
|
||||
import type {BannedProfileSubstringScope} from '../../database/types/AdminArchiveTypes';
|
||||
import {Logger} from '../../Logger';
|
||||
import {bannedAvatarHashCache} from '../../middleware/BannedAvatarHashCache';
|
||||
import {fileShaCache} from '../../middleware/FileShaCache';
|
||||
import {ipBanCache} from '../../middleware/IpBanMiddleware';
|
||||
import {phraseBlocklistCache} from '../../middleware/PhraseBlocklistCache';
|
||||
import {profileSubstringBlocklistCache} from '../../middleware/ProfileSubstringBlocklistCache';
|
||||
import {urlBlocklistCache} from '../../middleware/UrlBlocklistCache';
|
||||
} from '@app/api/constants/ContentModeration';
|
||||
import {IP_BAN_REFRESH_CHANNEL} from '@app/api/constants/IpBan';
|
||||
import type {BannedProfileSubstringScope} from '@app/api/database/types/AdminArchiveTypes';
|
||||
import {Logger} from '@app/api/Logger';
|
||||
import {bannedAvatarHashCache} from '@app/api/middleware/BannedAvatarHashCache';
|
||||
import {fileShaCache} from '@app/api/middleware/FileShaCache';
|
||||
import {ipBanCache} from '@app/api/middleware/IpBanMiddleware';
|
||||
import {phraseBlocklistCache} from '@app/api/middleware/PhraseBlocklistCache';
|
||||
import {profileSubstringBlocklistCache} from '@app/api/middleware/ProfileSubstringBlocklistCache';
|
||||
import {urlBlocklistCache} from '@app/api/middleware/UrlBlocklistCache';
|
||||
import {
|
||||
getIpBanBlastRadiusVerdict,
|
||||
getSuspiciousIpSkipReason,
|
||||
isSingleIpBanCandidate,
|
||||
} from '../../risk/IpBanCgnatGuard';
|
||||
import {isIpBanExempt} from '../../risk/IpBanExemptions';
|
||||
import type {ISuspiciousIpRepository} from '../../risk/SuspiciousIpRepository';
|
||||
import {tryParseSingleIp} from '../../utils/IpRangeUtils';
|
||||
import {canonicalizeStoredPhrase} from '../../utils/PhraseBlocklistNormalization';
|
||||
import {canonicalizeUrl} from '../../utils/UrlNormalizer';
|
||||
import type {IAdminRepository} from '../IAdminRepository';
|
||||
import type {AdminAuditService} from './AdminAuditService';
|
||||
} from '@app/api/risk/IpBanCgnatGuard';
|
||||
import {isIpBanExempt} from '@app/api/risk/IpBanExemptions';
|
||||
import type {ISuspiciousIpRepository} from '@app/api/risk/SuspiciousIpRepository';
|
||||
import {tryParseSingleIp} from '@app/api/utils/IpRangeUtils';
|
||||
import {canonicalizeStoredPhrase} from '@app/api/utils/PhraseBlocklistNormalization';
|
||||
import {canonicalizeUrl} from '@app/api/utils/UrlNormalizer';
|
||||
import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes';
|
||||
import {ValidationErrorCodes} from '@fluxer/constants/src/ValidationErrorCodes';
|
||||
import {BadRequestError} from '@fluxer/errors/src/domains/core/BadRequestError';
|
||||
import {InputValidationError} from '@fluxer/errors/src/domains/core/InputValidationError';
|
||||
import {NotFoundError} from '@fluxer/errors/src/domains/core/NotFoundError';
|
||||
import {UnknownUserError} from '@fluxer/errors/src/domains/user/UnknownUserError';
|
||||
import type {AdminBlocklistListType} from '@fluxer/schema/src/domains/admin/AdminBlocklistSchemas';
|
||||
import type {IpInfoLookupResult, IpInfoService} from '@pkgs/geoip/src/IpInfoService';
|
||||
|
||||
interface AdminBanManagementServiceDeps {
|
||||
apiContext: ApiContext;
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {SYSTEM_USER_ID} from '../../constants/Core';
|
||||
import type {GiftCodeDurationType, GiftCodeRow} from '../../database/types/PaymentTypes';
|
||||
import {mapGiftCodeDurationToMonths} from '../../models/GiftCode';
|
||||
import type {IUserRepository} from '../../user/IUserRepository';
|
||||
import * as RandomUtils from '../../utils/RandomUtils';
|
||||
import {SYSTEM_USER_ID} from '@app/api/constants/Core';
|
||||
import type {GiftCodeDurationType, GiftCodeRow} from '@app/api/database/types/PaymentTypes';
|
||||
import {mapGiftCodeDurationToMonths} from '@app/api/models/GiftCode';
|
||||
import type {IUserRepository} from '@app/api/user/IUserRepository';
|
||||
import * as RandomUtils from '@app/api/utils/RandomUtils';
|
||||
|
||||
const CODE_LENGTH = 32;
|
||||
const MAX_GENERATION_ATTEMPTS = 100;
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {AdminAuditService} from '@app/api/admin/services/AdminAuditService';
|
||||
import {AdminGuildBulkService} from '@app/api/admin/services/guild/AdminGuildBulkService';
|
||||
import {AdminGuildLookupService} from '@app/api/admin/services/guild/AdminGuildLookupService';
|
||||
import {AdminGuildManagementService} from '@app/api/admin/services/guild/AdminGuildManagementService';
|
||||
import {AdminGuildMembershipService} from '@app/api/admin/services/guild/AdminGuildMembershipService';
|
||||
import {AdminGuildUpdatePropagator} from '@app/api/admin/services/guild/AdminGuildUpdatePropagator';
|
||||
import {AdminGuildUpdateService} from '@app/api/admin/services/guild/AdminGuildUpdateService';
|
||||
import {AdminGuildVanityService} from '@app/api/admin/services/guild/AdminGuildVanityService';
|
||||
import {createGuildID, createUserID} from '@app/api/BrandedTypes';
|
||||
import type {IChannelRepository} from '@app/api/channel/IChannelRepository';
|
||||
import type {IGuildDiscoveryRepository} from '@app/api/guild/repositories/GuildDiscoveryRepository';
|
||||
import type {IGuildRepositoryAggregate} from '@app/api/guild/repositories/IGuildRepositoryAggregate';
|
||||
import type {GuildService} from '@app/api/guild/services/GuildService';
|
||||
import type {EntityAssetService} from '@app/api/infrastructure/EntityAssetService';
|
||||
import type {IGatewayService} from '@app/api/infrastructure/IGatewayService';
|
||||
import type {InviteRepository} from '@app/api/invite/InviteRepository';
|
||||
import {createRequestCache} from '@app/api/middleware/RequestCacheMiddleware';
|
||||
import type {IUserRepository} from '@app/api/user/IUserRepository';
|
||||
import type {ListGuildAuditLogsRequest} from '@fluxer/schema/src/domains/admin/AdminGuildSchemas';
|
||||
import {createGuildID, createUserID} from '../../BrandedTypes';
|
||||
import type {IChannelRepository} from '../../channel/IChannelRepository';
|
||||
import type {IGuildDiscoveryRepository} from '../../guild/repositories/GuildDiscoveryRepository';
|
||||
import type {IGuildRepositoryAggregate} from '../../guild/repositories/IGuildRepositoryAggregate';
|
||||
import type {GuildService} from '../../guild/services/GuildService';
|
||||
import type {EntityAssetService} from '../../infrastructure/EntityAssetService';
|
||||
import type {IGatewayService} from '../../infrastructure/IGatewayService';
|
||||
import type {InviteRepository} from '../../invite/InviteRepository';
|
||||
import {createRequestCache} from '../../middleware/RequestCacheMiddleware';
|
||||
import type {IUserRepository} from '../../user/IUserRepository';
|
||||
import type {AdminAuditService} from './AdminAuditService';
|
||||
import {AdminGuildBulkService} from './guild/AdminGuildBulkService';
|
||||
import {AdminGuildLookupService} from './guild/AdminGuildLookupService';
|
||||
import {AdminGuildManagementService} from './guild/AdminGuildManagementService';
|
||||
import {AdminGuildMembershipService} from './guild/AdminGuildMembershipService';
|
||||
import {AdminGuildUpdatePropagator} from './guild/AdminGuildUpdatePropagator';
|
||||
import {AdminGuildUpdateService} from './guild/AdminGuildUpdateService';
|
||||
import {AdminGuildVanityService} from './guild/AdminGuildVanityService';
|
||||
|
||||
interface AdminGuildServiceDeps {
|
||||
guildRepository: IGuildRepositoryAggregate;
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {AdminAuditService} from '@app/api/admin/services/AdminAuditService';
|
||||
import type {AdminMessageShredService} from '@app/api/admin/services/AdminMessageShredService';
|
||||
import type {ChannelID, MessageID, UserID} from '@app/api/BrandedTypes';
|
||||
import {createUserID} from '@app/api/BrandedTypes';
|
||||
import type {IChannelRepository} from '@app/api/channel/IChannelRepository';
|
||||
import {Logger} from '@app/api/Logger';
|
||||
import type {
|
||||
DeleteAllUserMessagesRequest,
|
||||
DeleteAllUserMessagesResponse,
|
||||
} from '@fluxer/schema/src/domains/admin/AdminMessageSchemas';
|
||||
import type {ChannelID, MessageID, UserID} from '../../BrandedTypes';
|
||||
import {createUserID} from '../../BrandedTypes';
|
||||
import type {IChannelRepository} from '../../channel/IChannelRepository';
|
||||
import {Logger} from '../../Logger';
|
||||
import type {AdminAuditService} from './AdminAuditService';
|
||||
import type {AdminMessageShredService} from './AdminMessageShredService';
|
||||
|
||||
interface AdminMessageDeletionServiceDeps {
|
||||
channelRepository: IChannelRepository;
|
||||
|
||||
@@ -1,5 +1,32 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {ApiContext} from '@app/api/ApiContext';
|
||||
import type {AdminAuditService} from '@app/api/admin/services/AdminAuditService';
|
||||
import {
|
||||
type AttachmentID,
|
||||
type ChannelID,
|
||||
createAttachmentID,
|
||||
createChannelID,
|
||||
createMessageID,
|
||||
createUserID,
|
||||
type MessageID,
|
||||
type UserID,
|
||||
} from '@app/api/BrandedTypes';
|
||||
import type {IChannelRepository} from '@app/api/channel/IChannelRepository';
|
||||
import {purgeMessageAttachments} from '@app/api/channel/services/message/MessageHelpers';
|
||||
import {
|
||||
createMessageResponseDataService,
|
||||
type MessageResponseAccessContext,
|
||||
messageResponseAccessForChannel,
|
||||
messageResponseAccessForGuild,
|
||||
} from '@app/api/channel/services/message/MessageResponseDataService';
|
||||
import type {NcmecAttachmentStatusResponse, NcmecSubmissionService} from '@app/api/csam/NcmecSubmissionService';
|
||||
import type {IGuildRepositoryAggregate} from '@app/api/guild/repositories/IGuildRepositoryAggregate';
|
||||
import {getPurgeQueue, getStorageService} from '@app/api/middleware/ServiceSingletons';
|
||||
import {getMessageSearchService} from '@app/api/SearchFactory';
|
||||
import {deleteMessageSearchDocuments} from '@app/api/search/MessageSearchIndexCleanup';
|
||||
import {searchExistingMessages} from '@app/api/search/MessageSearchResultReconciler';
|
||||
import {assertSafeByteSize} from '@app/api/utils/ByteSizeUtils';
|
||||
import type {
|
||||
BrowseChannelRequest,
|
||||
SearchChannelMessagesRequest,
|
||||
@@ -10,33 +37,6 @@ import type {
|
||||
LookupMessageRequest,
|
||||
} from '@fluxer/schema/src/domains/admin/AdminMessageSchemas';
|
||||
import type {MessageResponse} from '@fluxer/schema/src/domains/message/MessageResponseSchemas';
|
||||
import type {ApiContext} from '../../ApiContext';
|
||||
import {
|
||||
type AttachmentID,
|
||||
type ChannelID,
|
||||
createAttachmentID,
|
||||
createChannelID,
|
||||
createMessageID,
|
||||
createUserID,
|
||||
type MessageID,
|
||||
type UserID,
|
||||
} from '../../BrandedTypes';
|
||||
import type {IChannelRepository} from '../../channel/IChannelRepository';
|
||||
import {purgeMessageAttachments} from '../../channel/services/message/MessageHelpers';
|
||||
import {
|
||||
createMessageResponseDataService,
|
||||
type MessageResponseAccessContext,
|
||||
messageResponseAccessForChannel,
|
||||
messageResponseAccessForGuild,
|
||||
} from '../../channel/services/message/MessageResponseDataService';
|
||||
import type {NcmecAttachmentStatusResponse, NcmecSubmissionService} from '../../csam/NcmecSubmissionService';
|
||||
import type {IGuildRepositoryAggregate} from '../../guild/repositories/IGuildRepositoryAggregate';
|
||||
import {getPurgeQueue, getStorageService} from '../../middleware/ServiceSingletons';
|
||||
import {getMessageSearchService} from '../../SearchFactory';
|
||||
import {deleteMessageSearchDocuments} from '../../search/MessageSearchIndexCleanup';
|
||||
import {searchExistingMessages} from '../../search/MessageSearchResultReconciler';
|
||||
import {assertSafeByteSize} from '../../utils/ByteSizeUtils';
|
||||
import type {AdminAuditService} from './AdminAuditService';
|
||||
|
||||
interface AdminMessageServiceDeps {
|
||||
apiContext: ApiContext;
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {ApiContext} from '@app/api/ApiContext';
|
||||
import type {AdminAuditService} from '@app/api/admin/services/AdminAuditService';
|
||||
import type {UserID} from '@app/api/BrandedTypes';
|
||||
import {Logger} from '@app/api/Logger';
|
||||
import {ValidationErrorCodes} from '@fluxer/constants/src/ValidationErrorCodes';
|
||||
import {InputValidationError} from '@fluxer/errors/src/domains/core/InputValidationError';
|
||||
import type {MessageShredRequest} from '@fluxer/schema/src/domains/admin/AdminMessageSchemas';
|
||||
import type {WorkerJobPayload} from '@pkgs/worker/src/contracts/WorkerTypes';
|
||||
import type {ApiContext} from '../../ApiContext';
|
||||
import type {UserID} from '../../BrandedTypes';
|
||||
import {Logger} from '../../Logger';
|
||||
import type {AdminAuditService} from './AdminAuditService';
|
||||
|
||||
type MessageShredStatusCacheEntry = {
|
||||
status: 'in_progress' | 'completed' | 'failed';
|
||||
|
||||
@@ -1,12 +1,7 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {FeatureTemporarilyDisabledError} from '@fluxer/errors/src/domains/core/FeatureTemporarilyDisabledError';
|
||||
import type {SearchReportsRequest} from '@fluxer/schema/src/domains/admin/AdminSchemas';
|
||||
import type {MessageResponse} from '@fluxer/schema/src/domains/message/MessageResponseSchemas';
|
||||
import {getEmailTemplate} from '@pkgs/email/src/email_i18n/EmailI18n';
|
||||
import {seconds} from 'itty-time';
|
||||
import type {ApiContext} from '../../ApiContext';
|
||||
import type {ApiContext} from '@app/api/ApiContext';
|
||||
import type {AdminAuditService} from '@app/api/admin/services/AdminAuditService';
|
||||
import {
|
||||
type ChannelID,
|
||||
createReportID,
|
||||
@@ -14,33 +9,38 @@ import {
|
||||
type GuildID,
|
||||
type ReportID,
|
||||
type UserID,
|
||||
} from '../../BrandedTypes';
|
||||
import {Config} from '../../Config';
|
||||
import type {IChannelRepository} from '../../channel/IChannelRepository';
|
||||
import type {ChannelService} from '../../channel/services/ChannelService';
|
||||
import {makeAttachmentCdnKey} from '../../channel/services/message/MessageHelpers';
|
||||
} from '@app/api/BrandedTypes';
|
||||
import {Config} from '@app/api/Config';
|
||||
import type {IChannelRepository} from '@app/api/channel/IChannelRepository';
|
||||
import type {ChannelService} from '@app/api/channel/services/ChannelService';
|
||||
import {makeAttachmentCdnKey} from '@app/api/channel/services/message/MessageHelpers';
|
||||
import {
|
||||
createMessageResponseDataService,
|
||||
type MessageResponseAccessContext,
|
||||
messageResponseAccessForChannel,
|
||||
messageResponseAccessForGuild,
|
||||
} from '../../channel/services/message/MessageResponseDataService';
|
||||
import {SYSTEM_USER_ID} from '../../constants/Core';
|
||||
import type {NcmecAttachmentStatusResponse, NcmecSubmissionService} from '../../csam/NcmecSubmissionService';
|
||||
import type {MessageAttachment} from '../../database/types/MessageTypes';
|
||||
import type {IGuildRepositoryAggregate} from '../../guild/repositories/IGuildRepositoryAggregate';
|
||||
import type {IStorageService} from '../../infrastructure/IStorageService';
|
||||
import type {UserCacheService} from '../../infrastructure/UserCacheService';
|
||||
import {Logger} from '../../Logger';
|
||||
import type {RequestCache} from '../../middleware/RequestCacheMiddleware';
|
||||
import {createRequestCache} from '../../middleware/RequestCacheMiddleware';
|
||||
import type {User} from '../../models/User';
|
||||
import type {IARMessageContext, IARSubmission} from '../../report/IReportRepository';
|
||||
import type {ReportService} from '../../report/ReportService';
|
||||
import {getReportSearchService} from '../../SearchFactory';
|
||||
import type {UserChannelService} from '../../user/services/UserChannelService';
|
||||
import {assertSafeByteSize} from '../../utils/ByteSizeUtils';
|
||||
import type {AdminAuditService} from './AdminAuditService';
|
||||
} from '@app/api/channel/services/message/MessageResponseDataService';
|
||||
import {SYSTEM_USER_ID} from '@app/api/constants/Core';
|
||||
import type {NcmecAttachmentStatusResponse, NcmecSubmissionService} from '@app/api/csam/NcmecSubmissionService';
|
||||
import type {MessageAttachment} from '@app/api/database/types/MessageTypes';
|
||||
import type {IGuildRepositoryAggregate} from '@app/api/guild/repositories/IGuildRepositoryAggregate';
|
||||
import type {IStorageService} from '@app/api/infrastructure/IStorageService';
|
||||
import type {UserCacheService} from '@app/api/infrastructure/UserCacheService';
|
||||
import {Logger} from '@app/api/Logger';
|
||||
import type {RequestCache} from '@app/api/middleware/RequestCacheMiddleware';
|
||||
import {createRequestCache} from '@app/api/middleware/RequestCacheMiddleware';
|
||||
import type {User} from '@app/api/models/User';
|
||||
import type {IARMessageContext, IARSubmission} from '@app/api/report/IReportRepository';
|
||||
import type {ReportService} from '@app/api/report/ReportService';
|
||||
import {getReportSearchService} from '@app/api/SearchFactory';
|
||||
import type {UserChannelService} from '@app/api/user/services/UserChannelService';
|
||||
import {assertSafeByteSize} from '@app/api/utils/ByteSizeUtils';
|
||||
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
|
||||
import {FeatureTemporarilyDisabledError} from '@fluxer/errors/src/domains/core/FeatureTemporarilyDisabledError';
|
||||
import type {SearchReportsRequest} from '@fluxer/schema/src/domains/admin/AdminSchemas';
|
||||
import type {MessageResponse} from '@fluxer/schema/src/domains/message/MessageResponseSchemas';
|
||||
import {getEmailTemplate} from '@pkgs/email/src/email_i18n/EmailI18n';
|
||||
import {seconds} from 'itty-time';
|
||||
|
||||
interface AdminReportServiceDeps {
|
||||
apiContext: ApiContext;
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {ApiContext} from '@app/api/ApiContext';
|
||||
import {mapGuildToAdminResponse} from '@app/api/admin/models/GuildTypes';
|
||||
import {mapUserToAdminResponse} from '@app/api/admin/models/UserTypes';
|
||||
import type {AdminAuditService} from '@app/api/admin/services/AdminAuditService';
|
||||
import {createGuildID, createUserID, type UserID} from '@app/api/BrandedTypes';
|
||||
import {isSyntheticUserId} from '@app/api/constants/Core';
|
||||
import type {IGuildRepositoryAggregate} from '@app/api/guild/repositories/IGuildRepositoryAggregate';
|
||||
import {Logger} from '@app/api/Logger';
|
||||
import {getGuildSearchService, getUserSearchService} from '@app/api/SearchFactory';
|
||||
import {FeatureTemporarilyDisabledError} from '@fluxer/errors/src/domains/core/FeatureTemporarilyDisabledError';
|
||||
import {InputValidationError} from '@fluxer/errors/src/domains/core/InputValidationError';
|
||||
import type {WorkerJobPayload} from '@pkgs/worker/src/contracts/WorkerTypes';
|
||||
import type {ApiContext} from '../../ApiContext';
|
||||
import {createGuildID, createUserID, type UserID} from '../../BrandedTypes';
|
||||
import {isSyntheticUserId} from '../../constants/Core';
|
||||
import type {IGuildRepositoryAggregate} from '../../guild/repositories/IGuildRepositoryAggregate';
|
||||
import {Logger} from '../../Logger';
|
||||
import {getGuildSearchService, getUserSearchService} from '../../SearchFactory';
|
||||
import {mapGuildToAdminResponse} from '../models/GuildTypes';
|
||||
import {mapUserToAdminResponse} from '../models/UserTypes';
|
||||
import type {AdminAuditService} from './AdminAuditService';
|
||||
|
||||
interface RefreshSearchIndexJobPayload extends WorkerJobPayload {
|
||||
index_type:
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {ApiContext} from '@app/api/ApiContext';
|
||||
import {mapUserToAdminResponse} from '@app/api/admin/models/UserTypes';
|
||||
import type {AdminAuditService} from '@app/api/admin/services/AdminAuditService';
|
||||
import type {AdminUserUpdatePropagator} from '@app/api/admin/services/AdminUserUpdatePropagator';
|
||||
import * as AuthSession from '@app/api/auth/AuthSession';
|
||||
import {createUserID, type UserID} from '@app/api/BrandedTypes';
|
||||
import {UserFlags} from '@fluxer/constants/src/UserConstants';
|
||||
import {UnknownUserError} from '@fluxer/errors/src/domains/user/UnknownUserError';
|
||||
import type {TempBanUserRequest} from '@fluxer/schema/src/domains/admin/AdminUserSchemas';
|
||||
import type {ApiContext} from '../../ApiContext';
|
||||
import * as AuthSession from '../../auth/AuthSession';
|
||||
import {createUserID, type UserID} from '../../BrandedTypes';
|
||||
import {mapUserToAdminResponse} from '../models/UserTypes';
|
||||
import type {AdminAuditService} from './AdminAuditService';
|
||||
import type {AdminUserUpdatePropagator} from './AdminUserUpdatePropagator';
|
||||
|
||||
interface AdminUserBanServiceDeps {
|
||||
apiContext: ApiContext;
|
||||
|
||||
@@ -1,5 +1,21 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {ApiContext} from '@app/api/ApiContext';
|
||||
import {mapUserToAdminResponse} from '@app/api/admin/models/UserTypes';
|
||||
import type {AdminAuditService} from '@app/api/admin/services/AdminAuditService';
|
||||
import type {AdminBanManagementService} from '@app/api/admin/services/AdminBanManagementService';
|
||||
import type {AdminUserUpdatePropagator} from '@app/api/admin/services/AdminUserUpdatePropagator';
|
||||
import {BulkCancelledError, type BulkProgressHelpers} from '@app/api/admin/services/BulkProgressHelpers';
|
||||
import * as AuthSession from '@app/api/auth/AuthSession';
|
||||
import {createReportID, createUserID, type UserID} from '@app/api/BrandedTypes';
|
||||
import type {BillingRepository} from '@app/api/billing/repositories/BillingRepository';
|
||||
import type {KVAccountDeletionQueueService} from '@app/api/infrastructure/KVAccountDeletionQueueService';
|
||||
import {Logger} from '@app/api/Logger';
|
||||
import type {User} from '@app/api/models/User';
|
||||
import {ReportStatus} from '@app/api/report/IReportRepository';
|
||||
import type {ReportService} from '@app/api/report/ReportService';
|
||||
import {getReportSearchService} from '@app/api/SearchFactory';
|
||||
import {clearPendingDeletion, reschedulePendingDeletion} from '@app/api/user/services/PendingDeletionCoordinator';
|
||||
import {DeletionReasons} from '@fluxer/constants/src/Core';
|
||||
import {UserFlags} from '@fluxer/constants/src/UserConstants';
|
||||
import {ReportAlreadyResolvedError} from '@fluxer/errors/src/domains/moderation/ReportAlreadyResolvedError';
|
||||
@@ -9,22 +25,6 @@ import type {
|
||||
ScheduleAccountDeletionRequest,
|
||||
} from '@fluxer/schema/src/domains/admin/AdminUserSchemas';
|
||||
import type Stripe from 'stripe';
|
||||
import type {ApiContext} from '../../ApiContext';
|
||||
import * as AuthSession from '../../auth/AuthSession';
|
||||
import {createReportID, createUserID, type UserID} from '../../BrandedTypes';
|
||||
import type {BillingRepository} from '../../billing/repositories/BillingRepository';
|
||||
import type {KVAccountDeletionQueueService} from '../../infrastructure/KVAccountDeletionQueueService';
|
||||
import {Logger} from '../../Logger';
|
||||
import type {User} from '../../models/User';
|
||||
import {ReportStatus} from '../../report/IReportRepository';
|
||||
import type {ReportService} from '../../report/ReportService';
|
||||
import {getReportSearchService} from '../../SearchFactory';
|
||||
import {clearPendingDeletion, reschedulePendingDeletion} from '../../user/services/PendingDeletionCoordinator';
|
||||
import {mapUserToAdminResponse} from '../models/UserTypes';
|
||||
import type {AdminAuditService} from './AdminAuditService';
|
||||
import type {AdminBanManagementService} from './AdminBanManagementService';
|
||||
import type {AdminUserUpdatePropagator} from './AdminUserUpdatePropagator';
|
||||
import {BulkCancelledError, type BulkProgressHelpers} from './BulkProgressHelpers';
|
||||
|
||||
interface AdminUserDeletionServiceDeps {
|
||||
apiContext: ApiContext;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user