refactor(config): ♻️ Redo config structure from scratch, simplify validation code, improve checks, add support for loading sensitive data from paths

This commit is contained in:
Jesse Wierzbinski 2025-02-15 02:47:29 +01:00
parent d4afd84019
commit 54fd81f076
No known key found for this signature in database
118 changed files with 3892 additions and 5291 deletions

View file

@ -1,7 +1,7 @@
import { User } from "@versia/kit/db";
import { Worker } from "bullmq";
import chalk from "chalk";
import { config } from "~/packages/config-manager";
import { config } from "~/config.ts";
import { connection } from "~/utils/redis.ts";
import {
type DeliveryJobData,
@ -52,10 +52,10 @@ export const getDeliveryWorker = (): Worker<
{
connection,
removeOnComplete: {
age: config.queues.delivery.remove_on_complete,
age: config.queues.delivery?.remove_after_complete_seconds,
},
removeOnFail: {
age: config.queues.delivery.remove_on_failure,
age: config.queues.delivery?.remove_after_failure_seconds,
},
},
);

View file

@ -2,7 +2,7 @@ import { Instance } from "@versia/kit/db";
import { Instances } from "@versia/kit/tables";
import { Worker } from "bullmq";
import { eq } from "drizzle-orm";
import { config } from "~/packages/config-manager";
import { config } from "~/config.ts";
import { connection } from "~/utils/redis.ts";
import {
type FetchJobData,
@ -52,10 +52,10 @@ export const getFetchWorker = (): Worker<FetchJobData, void, FetchJobType> =>
{
connection,
removeOnComplete: {
age: config.queues.fetch.remove_on_complete,
age: config.queues.fetch?.remove_after_complete_seconds,
},
removeOnFail: {
age: config.queues.fetch.remove_on_failure,
age: config.queues.fetch?.remove_after_failure_seconds,
},
},
);

View file

@ -1,7 +1,7 @@
import { getLogger } from "@logtape/logtape";
import { Instance, User } from "@versia/kit/db";
import { Worker } from "bullmq";
import { config } from "~/packages/config-manager/index.ts";
import { config } from "~/config.ts";
import { connection } from "~/utils/redis.ts";
import { InboxProcessor } from "../inbox/processor.ts";
import {
@ -168,10 +168,10 @@ export const getInboxWorker = (): Worker<InboxJobData, void, InboxJobType> =>
{
connection,
removeOnComplete: {
age: config.queues.inbox.remove_on_complete,
age: config.queues.inbox?.remove_after_complete_seconds,
},
removeOnFail: {
age: config.queues.inbox.remove_on_failure,
age: config.queues.inbox?.remove_after_failure_seconds,
},
},
);

View file

@ -1,6 +1,6 @@
import { Media } from "@versia/kit/db";
import { Worker } from "bullmq";
import { config } from "~/packages/config-manager";
import { config } from "~/config.ts";
import { connection } from "~/utils/redis.ts";
import { calculateBlurhash } from "../media/preprocessors/blurhash.ts";
import { convertImage } from "../media/preprocessors/image-conversion.ts";
@ -100,10 +100,10 @@ export const getMediaWorker = (): Worker<MediaJobData, void, MediaJobType> =>
{
connection,
removeOnComplete: {
age: config.queues.media.remove_on_complete,
age: config.queues.media?.remove_after_complete_seconds,
},
removeOnFail: {
age: config.queues.media.remove_on_failure,
age: config.queues.media?.remove_after_failure_seconds,
},
},
);

View file

@ -2,7 +2,7 @@ import { htmlToText } from "@/content_types.ts";
import { Note, PushSubscription, Token, User } from "@versia/kit/db";
import { Worker } from "bullmq";
import { sendNotification } from "web-push";
import { config } from "~/packages/config-manager";
import { config } from "~/config.ts";
import { connection } from "~/utils/redis.ts";
import {
type PushJobData,
@ -18,6 +18,11 @@ export const getPushWorker = (): Worker<PushJobData, void, PushJobType> =>
data: { psId, relatedUserId, type, noteId, notificationId },
} = job;
if (!config.notifications.push) {
await job.log("Push notifications are disabled");
return;
}
await job.log(
`Sending push notification for note [${notificationId}]`,
);
@ -105,17 +110,18 @@ export const getPushWorker = (): Worker<PushJobData, void, PushJobType> =>
preferred_locale: "en-US",
notification_id: notificationId,
notification_type: type,
icon: relatedUser.getAvatarUrl(config),
icon: relatedUser.getAvatarUrl(),
title,
body: truncate(body, 140),
}),
{
vapidDetails: {
subject:
config.notifications.push.vapid.subject ||
config.notifications.push.subject ||
config.http.base_url.origin,
privateKey: config.notifications.push.vapid.private,
publicKey: config.notifications.push.vapid.public,
privateKey:
config.notifications.push.vapid_keys.private,
publicKey: config.notifications.push.vapid_keys.public,
},
contentEncoding: "aesgcm",
},
@ -128,10 +134,10 @@ export const getPushWorker = (): Worker<PushJobData, void, PushJobType> =>
{
connection,
removeOnComplete: {
age: config.queues.push.remove_on_complete,
age: config.queues.push?.remove_after_complete_seconds,
},
removeOnFail: {
age: config.queues.push.remove_on_failure,
age: config.queues.push?.remove_after_failure_seconds,
},
},
);