refactor(api): collapse single-impl interfaces and facades (#3382)

This commit is contained in:
Hampus authored and GitHub committed 2026-10-10 23:04:42 +02:00
1 parent e7b13fd19f
commit c16d414d93
426 files changed
+2085 -6445

No files matched your search

+4 -4
View File
@@ -2,16 +2,16 @@
import type {EmojiID, GuildID, UserID, WebhookID} from '@app/api/BrandedTypes';
import {createEmojiID} from '@app/api/BrandedTypes';
import type {IGuildRepositoryAggregate} from '@app/api/guild/repositories/IGuildRepositoryAggregate';
import type {GuildRepository} from '@app/api/guild/repositories/GuildRepository';
import type {LimitConfigService} from '@app/api/limits/LimitConfigService';
import {resolveLimitSafe} from '@app/api/limits/LimitConfigUtils';
import {createLimitMatchContext} from '@app/api/limits/LimitMatchContextBuilder';
import type {GuildEmoji} from '@app/api/models/GuildEmoji';
import type {IUserAccountRepository} from '@app/api/user/repositories/IUserAccountRepository';
import type {UserRepository} from '@app/api/user/repositories/UserRepository';
import {Permissions} from '@fluxer/constants/src/ChannelConstants';
type EmojiGuildRepository = Pick<IGuildRepositoryAggregate, 'getEmoji' | 'getEmojiById'>;
type EmojiUserRepository = Pick<IUserAccountRepository, 'findUnique'>;
type EmojiGuildRepository = Pick<GuildRepository, 'getEmoji' | 'getEmojiById'>;
type EmojiUserRepository = Pick<UserRepository, 'findUnique'>;
const CUSTOM_EMOJI_MARKDOWN_REGEX = /<(a)?:([^:]+):(\d+)>/g;
const CUSTOM_EMOJI_MARKDOWN_REGEX_GLOBAL = new RegExp(CUSTOM_EMOJI_MARKDOWN_REGEX.source, 'g');
+2 -9
View File
@@ -2,7 +2,7 @@
import dns from 'node:dns';
import {Config} from '@app/api/Config';
import {extractClientIp} from '@fluxer/ip_utils/src/ClientIp';
import {extractConfiguredClientIp} from '@app/api/utils/RequestClientIp';
import type {ICacheService} from '@pkgs/cache/src/ICacheService';
import type {GeoipResult} from '@pkgs/geoip/src/GeoipLookup';
import {formatGeoipLocation, lookupGeoipByIp} from '@pkgs/geoip/src/GeoipLookup';
@@ -16,17 +16,10 @@ interface GetIpAddressReverseOptions {
cacheTtlSeconds?: number;
}
function resolveRequestClientIp(req: Request): string | null {
return extractClientIp(req, {
trustClientIpHeader: Config.proxy.trust_client_ip_header,
clientIpHeaderName: Config.proxy.client_ip_header,
});
}
export async function lookupGeoip(req: Request): Promise<GeoipResult>;
export async function lookupGeoip(ip: string): Promise<GeoipResult>;
export async function lookupGeoip(input: string | Request): Promise<GeoipResult> {
const ip = typeof input === 'string' ? input : resolveRequestClientIp(input);
const ip = typeof input === 'string' ? input : extractConfiguredClientIp(input);
if (!ip) {
return {countryCode: null, normalizedIp: null, city: null, region: null, countryName: null};
}
+20 -5
View File
@@ -1,8 +1,14 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {Config} from '@app/api/Config';
import type {APIConfig} from '@app/api/config/APIConfig';
import type {HonoEnv} from '@app/api/types/HonoEnv';
import {extractClientIp, MissingClientIpError, resolveClientIpHeaderName} from '@fluxer/ip_utils/src/ClientIp';
import {
extractClientIp,
MissingClientIpError,
requireClientIp,
resolveClientIpHeaderName,
} from '@fluxer/ip_utils/src/ClientIp';
import type {Context} from 'hono';
export interface ClientIpResolution {
@@ -32,11 +38,20 @@ export function resolveClientIpWithOptions(ctx: Context<HonoEnv>, options: Clien
return ip;
}
function proxyClientIpOptions(proxy: APIConfig['proxy']): ClientIpResolutionOptions {
return {trustClientIpHeader: proxy.trust_client_ip_header, clientIpHeaderName: proxy.client_ip_header};
}
export function extractConfiguredClientIp(request: Request): string | null {
return extractClientIp(request, proxyClientIpOptions(Config.proxy));
}
export function requireConfiguredClientIp(request: Request, proxy: APIConfig['proxy']): string {
return requireClientIp(request, proxyClientIpOptions(proxy));
}
export function getRequestClientIp(ctx: Context<HonoEnv>): string | null {
return resolveClientIpWithOptions(ctx, {
trustClientIpHeader: Config.proxy.trust_client_ip_header,
clientIpHeaderName: Config.proxy.client_ip_header,
});
return resolveClientIpWithOptions(ctx, proxyClientIpOptions(Config.proxy));
}
export function requireRequestClientIp(ctx: Context<HonoEnv>): string {
@@ -1,16 +1,16 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import type {GuildID, UserID} from '@app/api/BrandedTypes';
import type {IGuildRepositoryAggregate} from '@app/api/guild/repositories/IGuildRepositoryAggregate';
import type {GuildRepository} from '@app/api/guild/repositories/GuildRepository';
import type {Guild} from '@app/api/models/Guild';
import type {Relationship} from '@app/api/models/Relationship';
import type {IUserRepository} from '@app/api/user/IUserRepository';
import type {UserRepository} from '@app/api/user/repositories/UserRepository';
import {FriendSourceFlags, GroupDmAddPermissionFlags, RelationshipTypes} from '@fluxer/constants/src/UserConstants';
import {MissingAccessError} from '@fluxer/errors/src/domains/core/MissingAccessError';
import {FriendRequestBlockedError} from '@fluxer/errors/src/domains/user/FriendRequestBlockedError';
type UserPermissionRepository = Pick<IUserRepository, 'findSettings' | 'listRelationships' | 'getRelationship'>;
type GuildPermissionRepository = Pick<IGuildRepositoryAggregate, 'listUserGuilds'>;
type UserPermissionRepository = Pick<UserRepository, 'findSettings' | 'listRelationships' | 'getRelationship'>;
type GuildPermissionRepository = Pick<GuildRepository, 'listUserGuilds'>;
export class UserPermissionUtils {
constructor(