fix: prevent connecting to own instance as a remote

Add shared isSelfOrigin() helper that normalizes origins before
comparing to window.location.origin. Fixes auto-connect treating
self-referencing replicatedInstances entries as remote connections,
causing duplicate friends/DMs/data. Also hides self-referencing
entries from the Connections panel UI.
This commit is contained in:
Jannis Braun
2026-04-08 01:28:20 +02:00
parent fa5dbbfd4f
commit a1c47e071e
2 changed files with 16 additions and 6 deletions
+12 -3
View File
@@ -116,6 +116,15 @@ function normalizeOrigin(url: string): string {
}
}
/** Check whether an origin string refers to the current (home) instance. */
export function isSelfOrigin(origin: string): boolean {
try {
return normalizeOrigin(origin) === window.location.origin;
} catch {
return false;
}
}
// ─── API client resolution ───────────────────────────────────────────────────
// ─── Registry helpers ────────────────────────────────────────────────────────
@@ -187,8 +196,8 @@ export const useInstanceStore = create<InstanceState>((set, get) => ({
const origin = normalizeOrigin(url);
// Reject self-connection
if (origin === window.location.origin) {
throw new Error('Cannot add your home instance as a remote instance');
if (isSelfOrigin(url)) {
throw new Error("You're already logged into this instance");
}
// Reject duplicates
@@ -791,7 +800,7 @@ export const useInstanceStore = create<InstanceState>((set, get) => ({
for (const ri of currentUser.replicatedInstances) {
const origin = ri.origin || `https://${ri.domain}`;
// Never connect to ourselves — home WS is managed separately
if (origin === window.location.origin) continue;
if (isSelfOrigin(origin)) continue;
if (get().instances.some(i => i.origin === origin)) continue; // already loaded
const cachedEntry = cached[origin];
const regEntry = registry.get(origin);