zkverifyjs
Version:
Submit proofs to zkVerify and query proof state with ease using our npm package.
45 lines • 1.3 kB
JavaScript
export async function closeSession(provider) {
if (!provider) {
return;
}
const disconnectWithRetries = async (name, disconnectFn, isConnectedFn) => {
let retries = 5;
while (retries > 0) {
try {
await disconnectFn();
if (!isConnectedFn()) return;
} catch (error) {
console.debug(`Retrying ${name} disconnect due to error:`, error);
}
retries--;
await new Promise(resolve => setTimeout(resolve, 500));
}
console.warn(`Failed to disconnect ${name} after 5 attempts.`);
};
try {
const apiInstances = provider._apis;
if (apiInstances?.length) {
await Promise.all(apiInstances.map(async api => {
if (api?.isConnected) {
await api.disconnect();
}
}));
}
} catch (error) {
console.debug('Error while unsubscribing API instances:', error);
}
try {
if ('removeAllListeners' in provider) {
provider.removeAllListeners();
}
} catch (error) {
console.debug('Error while removing event listeners:', error);
}
if (provider.isConnected) {
try {
await disconnectWithRetries('Provider', () => provider.disconnect(), () => provider.isConnected);
} catch (error) {
console.warn('Provider disconnection failed:', error);
}
}
}