@ingridsandev/chatbot-widget
Version:
A framework-agnostic chatbot widget using Web Components
79 lines (71 loc) • 2 kB
JavaScript
class Storage {
constructor(prefix = 'chatbot-widget') {
this.prefix = prefix;
}
set(key, value) {
try {
const prefixedKey = `${this.prefix}-${key}`;
localStorage.setItem(prefixedKey, JSON.stringify(value));
return true;
} catch (error) {
console.warn(`Storage set failed for key "${key}":`, error);
return false;
}
}
get(key, defaultValue = null) {
try {
const prefixedKey = `${this.prefix}-${key}`;
const item = localStorage.getItem(prefixedKey);
return item ? JSON.parse(item) : defaultValue;
} catch (error) {
console.warn(`Storage get failed for key "${key}":`, error);
return defaultValue;
}
}
remove(key) {
try {
const prefixedKey = `${this.prefix}-${key}`;
localStorage.removeItem(prefixedKey);
return true;
} catch (error) {
console.warn(`Storage remove failed for key "${key}":`, error);
return false;
}
}
clear() {
try {
const keys = Object.keys(localStorage);
keys.forEach(key => {
if (key.startsWith(`${this.prefix}-`)) {
localStorage.removeItem(key);
}
});
return true;
} catch (error) {
console.warn('Storage clear failed:', error);
return false;
}
}
// Session storage methods
setSession(key, value) {
try {
const prefixedKey = `${this.prefix}-${key}`;
sessionStorage.setItem(prefixedKey, JSON.stringify(value));
return true;
} catch (error) {
console.warn(`Session storage set failed for key "${key}":`, error);
return false;
}
}
getSession(key, defaultValue = null) {
try {
const prefixedKey = `${this.prefix}-${key}`;
const item = sessionStorage.getItem(prefixedKey);
return item ? JSON.parse(item) : defaultValue;
} catch (error) {
console.warn(`Session storage get failed for key "${key}":`, error);
return defaultValue;
}
}
}
export default Storage;