fix: harden audit durability and fallback config writes

This commit is contained in:
Sucukdeluxe
2026-08-13 21:07:28 +02:00
parent 07c81c0123
commit 76ad81a0d3
4 changed files with 177 additions and 2 deletions
+45
View File
@@ -513,6 +513,51 @@ describe('ConfigStore', () => {
assert.equal(store.load().globalSettings.lastBrowseDirectory, selectedDirectory);
});
it('merges the fallback log path after earlier queued settings without reverting them', async () => {
assert.equal(typeof store.saveFallbackLogPath, 'function');
await store.save({
globalSettings: {
alwaysOnTop: false,
webhookUrl: 'https://before.invalid',
logFilePath: ''
}
});
const originalAtomicWrite = store._atomicWrite.bind(store);
let releaseSettingsWrite;
let signalSettingsWriteStarted;
const settingsWriteStarted = new Promise(resolve => { signalSettingsWriteStarted = resolve; });
store._atomicWrite = (data) => {
const settings = JSON.parse(data).globalSettings;
if (!releaseSettingsWrite && settings.webhookUrl === 'https://concurrent.invalid') {
signalSettingsWriteStarted();
return new Promise((resolve, reject) => {
releaseSettingsWrite = () => originalAtomicWrite(data).then(resolve, reject);
});
}
return originalAtomicWrite(data);
};
const current = store.load();
const settingsSave = store.save({
globalSettings: {
...current.globalSettings,
alwaysOnTop: true,
webhookUrl: 'https://concurrent.invalid'
}
});
await settingsWriteStarted;
const fallbackPath = path.join(tmpDir, 'fallback', 'fileuploader.log');
const fallbackSave = store.saveFallbackLogPath(fallbackPath);
releaseSettingsWrite();
await Promise.all([settingsSave, fallbackSave]);
const saved = store.load().globalSettings;
assert.equal(saved.alwaysOnTop, true);
assert.equal(saved.webhookUrl, 'https://concurrent.invalid');
assert.equal(saved.logFilePath, fallbackPath);
});
it('merges remote settings in the write queue and returns the canonical token', async () => {
await store.save({
globalSettings: {