anyone-extension/js/storage.js
johnysigma 2e28314d52 v2.0.0 - Complete extension redesign
Features:
- New modern dark UI with gradient accents
- Hostname support for custom proxy (e.g. relayup.local)
- Full private IP range bypass (10.x, 172.16-31.x, 192.168.x)
- WebRTC Leak Protection setting
- Kill Switch - block traffic if proxy disconnects
- Auto-connect on browser startup
- Custom proxy authentication (username/password)
- Bypass list for custom exceptions
- Local Network Access for printers, NAS, routers, etc
- Multiple proxy sources with automatic fallback (Arweave → GitBros → GitHub)
- Arweave as default proxy source for decentralized, permanent storage
- Auto-update interval for proxy list
2026-01-23 16:54:51 +02:00

258 lines
6.2 KiB
JavaScript

/* ANyONe Extension v2 - Storage Manager */
import { CONFIG } from './config.js';
const Storage = {
/**
* Get value from storage
* @param {string|string[]} keys - Key(s) to retrieve
* @returns {Promise<object>}
*/
async get(keys) {
return new Promise((resolve, reject) => {
try {
chrome.storage.local.get(keys, (result) => {
if (chrome.runtime.lastError) {
reject(chrome.runtime.lastError);
} else {
resolve(result);
}
});
} catch (error) {
reject(error);
}
});
},
/**
* Set value in storage
* @param {object} data - Data to store
* @returns {Promise<void>}
*/
async set(data) {
return new Promise((resolve, reject) => {
try {
chrome.storage.local.set(data, () => {
if (chrome.runtime.lastError) {
reject(chrome.runtime.lastError);
} else {
resolve();
}
});
} catch (error) {
reject(error);
}
});
},
/**
* Remove keys from storage
* @param {string|string[]} keys - Key(s) to remove
* @returns {Promise<void>}
*/
async remove(keys) {
return new Promise((resolve, reject) => {
try {
chrome.storage.local.remove(keys, () => {
if (chrome.runtime.lastError) {
reject(chrome.runtime.lastError);
} else {
resolve();
}
});
} catch (error) {
reject(error);
}
});
},
/**
* Clear all storage
* @returns {Promise<void>}
*/
async clear() {
return new Promise((resolve, reject) => {
try {
chrome.storage.local.clear(() => {
if (chrome.runtime.lastError) {
reject(chrome.runtime.lastError);
} else {
resolve();
}
});
} catch (error) {
reject(error);
}
});
},
/**
* Get single value with default
* @param {string} key - Key to retrieve
* @param {*} defaultValue - Default value if not found
* @returns {Promise<*>}
*/
async getValue(key, defaultValue = null) {
const result = await this.get(key);
return result[key] !== undefined ? result[key] : defaultValue;
},
/**
* Set single value
* @param {string} key - Key to set
* @param {*} value - Value to store
* @returns {Promise<void>}
*/
async setValue(key, value) {
return this.set({ [key]: value });
},
// ============================================
// Convenience methods for common operations
// ============================================
/**
* Get current connection mode
* @returns {Promise<string>}
*/
async getMode() {
return this.getValue(CONFIG.STORAGE_KEYS.MODE, CONFIG.DEFAULTS.MODE);
},
/**
* Set connection mode
* @param {string} mode - Mode to set
* @returns {Promise<void>}
*/
async setMode(mode) {
return this.setValue(CONFIG.STORAGE_KEYS.MODE, mode);
},
/**
* Check if proxy is enabled
* @returns {Promise<boolean>}
*/
async isProxyEnabled() {
return this.getValue(CONFIG.STORAGE_KEYS.PROXY_ENABLED, false);
},
/**
* Set proxy enabled state
* @param {boolean} enabled - Enabled state
* @returns {Promise<void>}
*/
async setProxyEnabled(enabled) {
return this.setValue(CONFIG.STORAGE_KEYS.PROXY_ENABLED, enabled);
},
/**
* Get proxy list
* @returns {Promise<Array>}
*/
async getProxyList() {
return this.getValue(CONFIG.STORAGE_KEYS.PROXY_LIST, []);
},
/**
* Set proxy list
* @param {Array} list - Proxy list
* @returns {Promise<void>}
*/
async setProxyList(list) {
await this.set({
[CONFIG.STORAGE_KEYS.PROXY_LIST]: list,
[CONFIG.STORAGE_KEYS.LAST_UPDATE]: Date.now()
});
},
/**
* Get current proxy
* @returns {Promise<object|null>}
*/
async getCurrentProxy() {
return this.getValue(CONFIG.STORAGE_KEYS.CURRENT_PROXY, null);
},
/**
* Set current proxy
* @param {object} proxy - Proxy object
* @returns {Promise<void>}
*/
async setCurrentProxy(proxy) {
return this.setValue(CONFIG.STORAGE_KEYS.CURRENT_PROXY, proxy);
},
/**
* Get custom proxy settings
* @returns {Promise<{ip: string, port: number, username: string, password: string, exceptions: string[]}>}
*/
async getCustomProxy() {
const result = await this.get([
CONFIG.STORAGE_KEYS.CUSTOM_IP,
CONFIG.STORAGE_KEYS.CUSTOM_PORT,
CONFIG.STORAGE_KEYS.CUSTOM_USERNAME,
CONFIG.STORAGE_KEYS.CUSTOM_PASSWORD,
CONFIG.STORAGE_KEYS.EXCEPTIONS
]);
return {
ip: result[CONFIG.STORAGE_KEYS.CUSTOM_IP] || '',
port: result[CONFIG.STORAGE_KEYS.CUSTOM_PORT] || '',
username: result[CONFIG.STORAGE_KEYS.CUSTOM_USERNAME] || '',
password: result[CONFIG.STORAGE_KEYS.CUSTOM_PASSWORD] || '',
exceptions: result[CONFIG.STORAGE_KEYS.EXCEPTIONS] || []
};
},
/**
* Set custom proxy settings
* @param {string} ip - IP address
* @param {number} port - Port number
* @param {string[]} exceptions - Exception list
* @param {string} username - Proxy username (optional)
* @param {string} password - Proxy password (optional)
* @returns {Promise<void>}
*/
async setCustomProxy(ip, port, exceptions = [], username = '', password = '') {
return this.set({
[CONFIG.STORAGE_KEYS.CUSTOM_IP]: ip,
[CONFIG.STORAGE_KEYS.CUSTOM_PORT]: port,
[CONFIG.STORAGE_KEYS.CUSTOM_USERNAME]: username,
[CONFIG.STORAGE_KEYS.CUSTOM_PASSWORD]: password,
[CONFIG.STORAGE_KEYS.EXCEPTIONS]: exceptions
});
},
/**
* Clear custom proxy settings
* @returns {Promise<void>}
*/
async clearCustomProxy() {
return this.remove([
CONFIG.STORAGE_KEYS.CUSTOM_IP,
CONFIG.STORAGE_KEYS.CUSTOM_PORT,
CONFIG.STORAGE_KEYS.CUSTOM_USERNAME,
CONFIG.STORAGE_KEYS.CUSTOM_PASSWORD
]);
},
/**
* Get all settings for options page
* @returns {Promise<object>}
*/
async getAllSettings() {
const keys = Object.values(CONFIG.STORAGE_KEYS);
return this.get(keys);
},
/**
* Get last proxy update timestamp
* @returns {Promise<number|null>}
*/
async getLastUpdate() {
return this.getValue(CONFIG.STORAGE_KEYS.LAST_UPDATE, null);
}
};
// ES Module export
export { Storage };