47 lines
1.6 KiB
TypeScript
47 lines
1.6 KiB
TypeScript
import { SystemConfigEntry } from '../admin/system-config.service';
|
|
import { mergeRedactedUpdate } from '../utils/redact';
|
|
|
|
function parseJsonObject(value: unknown): any {
|
|
if (!value) return {};
|
|
if (typeof value === 'object') return value;
|
|
if (typeof value !== 'string') return {};
|
|
try {
|
|
const parsed = JSON.parse(value);
|
|
return parsed && typeof parsed === 'object' ? parsed : {};
|
|
} catch {
|
|
return {};
|
|
}
|
|
}
|
|
|
|
function mergeJsonStringUpdate(incoming: string, existing: string | undefined): string {
|
|
try {
|
|
const parsedIncoming = JSON.parse(incoming);
|
|
const parsedExisting = parseJsonObject(existing);
|
|
return JSON.stringify(mergeRedactedUpdate(parsedIncoming, parsedExisting));
|
|
} catch {
|
|
return mergeRedactedUpdate(incoming, existing);
|
|
}
|
|
}
|
|
|
|
export function mergeSystemConfigEntriesUpdate(
|
|
entries: Array<{ key: string; value: string }>,
|
|
existing: SystemConfigEntry[],
|
|
): Array<{ key: string; value: string }> {
|
|
const existingByKey = new Map(existing.map(entry => [entry.key, entry.value]));
|
|
return entries.map(entry => {
|
|
const oldValue = existingByKey.get(entry.key);
|
|
return { ...entry, value: mergeJsonStringUpdate(entry.value, oldValue) };
|
|
});
|
|
}
|
|
|
|
export function mergeNotifySettingsUpdate(incoming: any, existing: any): any {
|
|
return mergeRedactedUpdate(incoming || {}, existing || {});
|
|
}
|
|
|
|
export function mergePushUserNotifyConfigUpdate(incoming: { notify_config?: any }, existing?: { notify_config?: string }): any {
|
|
return mergeNotifySettingsUpdate(
|
|
parseJsonObject(incoming?.notify_config),
|
|
parseJsonObject(existing?.notify_config),
|
|
);
|
|
}
|