🎨 Improve code readability by reformatting and updating function definitions and comments
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
/**
|
||||
* useChallongeApiKey Composable
|
||||
* Manages Challonge API key storage in browser localStorage
|
||||
* Works on mobile, desktop, and tablets
|
||||
*/
|
||||
|
||||
import { ref, computed } from 'vue';
|
||||
|
||||
const STORAGE_KEY = 'challonge_api_key';
|
||||
const storedKey = ref(getStoredKey());
|
||||
|
||||
/**
|
||||
* Get API key from localStorage
|
||||
* @returns {string|null} Stored API key or null
|
||||
*/
|
||||
function getStoredKey() {
|
||||
try {
|
||||
return localStorage.getItem(STORAGE_KEY) || null;
|
||||
} catch (error) {
|
||||
console.warn('localStorage not available:', error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Save API key to localStorage
|
||||
* @param {string} apiKey - The API key to store
|
||||
* @returns {boolean} Success status
|
||||
*/
|
||||
function saveApiKey(apiKey) {
|
||||
try {
|
||||
if (!apiKey || typeof apiKey !== 'string') {
|
||||
throw new Error('Invalid API key format');
|
||||
}
|
||||
localStorage.setItem(STORAGE_KEY, apiKey);
|
||||
storedKey.value = apiKey;
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('Failed to save API key:', error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear API key from localStorage
|
||||
* @returns {boolean} Success status
|
||||
*/
|
||||
function clearApiKey() {
|
||||
try {
|
||||
localStorage.removeItem(STORAGE_KEY);
|
||||
storedKey.value = null;
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('Failed to clear API key:', error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get masked version of API key for display
|
||||
* Shows first 4 and last 4 characters
|
||||
* @returns {string|null} Masked key or null
|
||||
*/
|
||||
const maskedKey = computed(() => {
|
||||
if (!storedKey.value) return null;
|
||||
const key = storedKey.value;
|
||||
if (key.length < 8) return '••••••••';
|
||||
return `${key.slice(0, 4)}•••••••${key.slice(-4)}`;
|
||||
});
|
||||
|
||||
/**
|
||||
* Check if API key is stored
|
||||
* @returns {boolean} True if key exists
|
||||
*/
|
||||
const isKeyStored = computed(() => !!storedKey.value);
|
||||
|
||||
/**
|
||||
* Get the full API key (use with caution)
|
||||
* @returns {string|null} Full API key or null
|
||||
*/
|
||||
function getApiKey() {
|
||||
return storedKey.value;
|
||||
}
|
||||
|
||||
export function useChallongeApiKey() {
|
||||
return {
|
||||
saveApiKey,
|
||||
clearApiKey,
|
||||
getApiKey,
|
||||
getStoredKey,
|
||||
storedKey: computed(() => storedKey.value),
|
||||
maskedKey,
|
||||
isKeyStored
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user