mirror of
https://github.com/openswarm-ai/openswarm.git
synced 2026-08-23 21:12:22 +02:00
38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
// Runs synchronously before React mounts so state-resets land before the first selector read. Each migration is gated by a localStorage flag so it runs once per install; keep `run` idempotent.
|
|
|
|
interface Migration {
|
|
key: string;
|
|
description: string;
|
|
run: () => void;
|
|
}
|
|
|
|
const MIGRATIONS: Migration[] = [
|
|
{
|
|
key: 'openswarm.migrations.v131_force_relogin_and_reonboard',
|
|
description: '1.0.31: force re-login and re-walk onboarding, regardless of prior state',
|
|
run: () => {
|
|
try {
|
|
window.localStorage.removeItem('openswarm.auth.token');
|
|
window.localStorage.removeItem('openswarm.onboarding.v2');
|
|
window.localStorage.removeItem('openswarm_onboarding_seen');
|
|
} catch {
|
|
// localStorage can throw in private mode / quota-exceeded; non-fatal.
|
|
}
|
|
},
|
|
},
|
|
];
|
|
|
|
/** Run migrations that haven't fired on this install yet. Idempotent. */
|
|
export function runStartupMigrations(): void {
|
|
if (typeof window === 'undefined') return;
|
|
for (const m of MIGRATIONS) {
|
|
try {
|
|
if (window.localStorage.getItem(m.key) === 'done') continue;
|
|
m.run();
|
|
window.localStorage.setItem(m.key, 'done');
|
|
} catch {
|
|
// Don't block other migrations on one failing.
|
|
}
|
|
}
|
|
}
|