auth0-js
Version:
Auth0 headless browser sdk
71 lines (62 loc) • 1.82 kB
JavaScript
import windowHandler from '../window';
import DummyStorage from './dummy';
import CookieStorage from './cookie';
import Warn from '../warn';
function StorageHandler(options) {
this.warn = new Warn({});
this.storage = new CookieStorage(options);
if (options.__tryLocalStorageFirst !== true) {
return;
}
try {
// some browsers throw an error when trying to access localStorage
// when localStorage is disabled.
var localStorage = windowHandler.getWindow().localStorage;
if (localStorage) {
this.storage = localStorage;
}
} catch (e) {
this.warn.warning(e);
this.warn.warning("Can't use localStorage. Using CookieStorage instead.");
}
}
StorageHandler.prototype.failover = function () {
if (this.storage instanceof DummyStorage) {
this.warn.warning('DummyStorage: ignore failover');
return;
} else if (this.storage instanceof CookieStorage) {
this.warn.warning('CookieStorage: failing over DummyStorage');
this.storage = new DummyStorage();
} else {
this.warn.warning('LocalStorage: failing over CookieStorage');
this.storage = new CookieStorage();
}
};
StorageHandler.prototype.getItem = function (key) {
try {
return this.storage.getItem(key);
} catch (e) {
this.warn.warning(e);
this.failover();
return this.getItem(key);
}
};
StorageHandler.prototype.removeItem = function (key) {
try {
return this.storage.removeItem(key);
} catch (e) {
this.warn.warning(e);
this.failover();
return this.removeItem(key);
}
};
StorageHandler.prototype.setItem = function (key, value, options) {
try {
return this.storage.setItem(key, value, options);
} catch (e) {
this.warn.warning(e);
this.failover();
return this.setItem(key, value, options);
}
};
export default StorageHandler;