stackchain-dashboard/frontend/reconnect-outboxes.js
timmy 0fc152f623
Some checks failed
CI / lint (pull_request) Successful in 2m53s
CI / build-release (pull_request) Successful in 6s
CI / browser-journey (pull_request) Failing after 2m45s
CI / release-candidate (pull_request) Has been skipped
fix: recover deferred workspace reconnects
2026-08-17 02:16:48 +00:00

45 lines
1.2 KiB
JavaScript

function createReconnectOutboxes({
refresh,
restoreIdentity,
flushIssue,
flushAuthored,
flushNotificationReads,
}) {
let activeReconnect = null;
let followUpRequested = false;
async function reconnectOnce() {
const snapshot = await refresh();
const freshness = snapshot?.freshness?.sections?.context;
const identityFresh = snapshot?.context && !snapshot.context.error &&
!freshness?.stale && !freshness?.degraded && !freshness?.revalidating;
const login = identityFresh ? String(snapshot.context.user?.login || '').trim() : '';
if (!login) return false;
restoreIdentity(login);
await Promise.all([
flushIssue(),
flushAuthored(),
flushNotificationReads(),
]);
return true;
}
return function reconnectOutboxes() {
if (activeReconnect) {
followUpRequested = true;
return activeReconnect;
}
activeReconnect = (async () => {
let result = false;
do {
followUpRequested = false;
result = await reconnectOnce();
} while (followUpRequested);
return result;
})().finally(() => { activeReconnect = null; });
return activeReconnect;
};
}
if (typeof module !== 'undefined' && module.exports) module.exports = createReconnectOutboxes;