fix: migrate gifs to klipy service (#1220)

This commit is contained in:
Hampus authored and GitHub committed 2026-06-30 01:19:57 +02:00
1 parent 99eedf6d1e
commit 4a741d8396
79 files changed
+3032 -1653

No files matched your search

@@ -2,6 +2,7 @@
import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes';
import {ForbiddenError} from '@fluxer/errors/src/domains/core/ForbiddenError';
import {resolveClientIpHeaderName} from '@fluxer/ip_utils/src/ClientIp';
import {createMiddleware} from 'hono/factory';
import {Config} from '../Config';
import {Logger} from '../Logger';
@@ -23,7 +24,7 @@ const defaultExemptPaths: Array<string> = [
export function RequireClientIpMiddleware({
exemptPaths = defaultExemptPaths,
requiredHeaders = ['x-forwarded-for'],
requiredHeaders = [resolveClientIpHeaderName(Config.proxy.client_ip_header)],
}: RequireClientIpOptions = {}) {
return createMiddleware<HonoEnv>(async (ctx, next) => {
if (Config.dev.testModeEnabled) {
@@ -82,6 +82,7 @@ import {UserChannelRequestService} from '../user/services/UserChannelRequestServ
import {UserContentRequestService} from '../user/services/UserContentRequestService';
import {UserRelationshipRequestService} from '../user/services/UserRelationshipRequestService';
import {UserService} from '../user/services/UserService';
import {resolveRequestClientIp} from '../utils/IpUtils';
import {VoicePresenceHeartbeatStore} from '../voice/VoicePresenceHeartbeatStore';
import {VoiceService} from '../voice/VoiceService';
import {WebhookRequestService} from '../webhook/WebhookRequestService';
@@ -364,7 +365,7 @@ function getLiveKitWebhookService(): LiveKitWebhookService | null {
export const ServiceMiddleware = createMiddleware<HonoEnv>(async (ctx, next) => {
const apiContext = createApiContext({
requestId: ctx.get('requestId') ?? crypto.randomUUID(),
clientIp: ctx.req.header('x-forwarded-for') ?? null,
clientIp: resolveRequestClientIp(ctx.req.raw),
userAgent: ctx.req.header('user-agent') ?? null,
});
ctx.set('apiContext', apiContext);
@@ -38,8 +38,7 @@ import {DownloadService} from '../download/DownloadService';
import {createEmailProvider} from '../email/EmailProviderFactory';
import {FavoriteMemeRepository} from '../favorite_meme/FavoriteMemeRepository';
import {GifService} from '../gif/GifService';
import {KlipyGifProvider} from '../gif/KlipyGifProvider';
import {TenorGifProvider} from '../gif/TenorGifProvider';
import {createNatsGifProvider} from '../gif/NatsGifProvider';
import {GuildAuditLogService} from '../guild/GuildAuditLogService';
import {GuildDiscoveryRepository} from '../guild/repositories/GuildDiscoveryRepository';
import {GuildRepository} from '../guild/repositories/GuildRepository';
@@ -349,6 +348,7 @@ export function setInjectedUnfurlerService(service: IUnfurlerService | undefined
}
const getDefaultUnfurlerService = singleton(() => {
const instanceConfigRepository = getInstanceConfigRepository();
const manager = new NatsConnectionManager({
url: Config.nats.coreUrl,
token: Config.nats.authToken || undefined,
@@ -357,7 +357,11 @@ const getDefaultUnfurlerService = singleton(() => {
void manager.connect().catch((error) => {
Logger.error({error}, '[nats-unfurl] Failed to establish NATS connection');
});
return new NatsUnfurlerService(manager, async () => getInstanceConfigRepository().getEffectiveYoutubeApiKey());
return new NatsUnfurlerService(
manager,
async () => instanceConfigRepository.getEffectiveYoutubeApiKey(),
async () => (await instanceConfigRepository.getEffectiveGifConfig()).klipy_api_key,
);
});
export function getUnfurlerService(): IUnfurlerService {
@@ -376,24 +380,10 @@ export const getBotMfaMirrorService = singleton(
() => new BotMfaMirrorService(getApplicationRepository(), getUserRepository(), getGatewayService()),
);
export const getGifService = singleton(() => {
const cache = getCacheService();
const media = getMediaService();
const instanceConfigRepository = getInstanceConfigRepository();
return new GifService({
providers: [
new TenorGifProvider(
cache,
media,
async () => (await instanceConfigRepository.getEffectiveGifConfig()).tenor_api_key,
),
new KlipyGifProvider(
cache,
media,
async () => (await instanceConfigRepository.getEffectiveGifConfig()).klipy_api_key,
),
],
activeName: async () => (await instanceConfigRepository.getEffectiveGifConfig()).provider,
});
return new GifService(
createNatsGifProvider(async () => (await instanceConfigRepository.getEffectiveGifConfig()).klipy_api_key),
);
});
export const getExpressionAssetPurger = singleton(() => new ExpressionAssetPurger(getAssetDeletionQueue()));
export const getGuildAuditLogService = singleton(