@smash-sdk/core
Version:
Smash Sdk Core
57 lines (56 loc) • 1.89 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RefreshTokenManager = void 0;
class RefreshTokenManager {
constructor(refreshTokenMethod) {
this.loading = false;
this.queue = [];
this.refreshTokenMethod = refreshTokenMethod;
}
getRefreshTokenMethod() {
return (error, retries = 0) => {
return new Promise(async (resolve, reject) => {
try {
const token = await this.refreshToken(this.refreshTokenMethod, error, retries);
resolve(token);
}
catch (error) {
reject(error);
}
});
};
}
refreshTokenAtomic(refreshTokenMethod, error, retries = 0) {
return new Promise(async (resolve, reject) => {
try {
this.loading = true;
const token = await refreshTokenMethod(error, retries);
resolve(token);
this.queue.forEach(({ resolve }) => {
resolve(token);
});
this.loading = false;
this.queue = [];
}
catch (error) {
reject(error);
this.queue.forEach(({ reject }) => {
reject(error);
});
this.loading = false;
this.queue = [];
}
});
}
refreshToken(refreshTokenMethod, error, retries = 0) {
return new Promise((resolve, reject) => {
if (this.loading === true) {
this.queue.push({ resolve, reject });
}
else {
this.refreshTokenAtomic(refreshTokenMethod, error, retries).then(resolve).catch(reject);
}
});
}
}
exports.RefreshTokenManager = RefreshTokenManager;