feat: expand outreach targeting and messaging

This commit is contained in:
jjbrunton committed 2026-08-10 17:31:05 +01:00
1 parent 7defff422d
commit d0a8bd0e2f
40 files changed
+890 -82

No files matched your search

+20 -1
View File
@@ -1,6 +1,11 @@
import { Router } from 'express';
import type { WebContext } from '../context.js';
import { ConfigSchema, SubredditConfigSchema, type SubredditConfig } from '../../config/index.js';
import {
ConfigSchema,
PhysiqueTargetingSchema,
SubredditConfigSchema,
type SubredditConfig,
} from '../../config/index.js';
import { TONE_KEYS } from '../../config/tone-profiles.js';
import { z } from 'zod';
@@ -75,6 +80,16 @@ export function createConfigRouter(ctx: WebContext): Router {
res.status(400).json({ error: 'Invalid advanced configuration', detail: parsedAdvanced.error.format() });
return;
}
const parsedPhysiqueTargeting = updates.reddit?.physiqueTargeting === undefined
? null
: PhysiqueTargetingSchema.safeParse(updates.reddit.physiqueTargeting);
if (parsedPhysiqueTargeting && !parsedPhysiqueTargeting.success) {
res.status(400).json({
error: 'Invalid physique targeting configuration',
detail: parsedPhysiqueTargeting.error.format(),
});
return;
}
if (updates.rateLimit) {
if (typeof updates.rateLimit.minDelayBetweenMessagesMs === 'number') {
@@ -113,6 +128,9 @@ export function createConfigRouter(ctx: WebContext): Router {
&& updates.reddit.maxReadyCandidates <= 500) {
ctx.runtimeConfig.reddit.maxReadyCandidates = updates.reddit.maxReadyCandidates;
}
if (parsedPhysiqueTargeting?.success) {
Object.assign(ctx.runtimeConfig.reddit.physiqueTargeting, parsedPhysiqueTargeting.data);
}
}
// Mirror into the loaded config so getStats reflects new values.
@@ -123,6 +141,7 @@ export function createConfigRouter(ctx: WebContext): Router {
ctx.config.reddit.prioritizeRecentPosts = ctx.runtimeConfig.reddit.prioritizeRecentPosts;
ctx.config.reddit.recentWindowMinutes = ctx.runtimeConfig.reddit.recentWindowMinutes;
ctx.config.reddit.maxReadyCandidates = ctx.runtimeConfig.reddit.maxReadyCandidates;
Object.assign(ctx.config.reddit.physiqueTargeting, ctx.runtimeConfig.reddit.physiqueTargeting);
if (parsedSubreddits?.success) {
const next: SubredditConfig[] = parsedSubreddits.data;