|
|
|
import {generatePrivateKey, getPublicKey} from 'nostr-tools';
|
|
|
|
|
|
|
|
let pubkey: string = '';
|
|
|
|
|
|
|
|
const loadOrGenerateKeys = () => {
|
|
|
|
const storedPubKey = localStorage.getItem('pub_key');
|
|
|
|
if (storedPubKey) {
|
|
|
|
return storedPubKey;
|
|
|
|
}
|
|
|
|
const privatekey = generatePrivateKey();
|
|
|
|
const pubkey = getPublicKey(privatekey);
|
|
|
|
localStorage.setItem('private_key', privatekey);
|
|
|
|
localStorage.setItem('pub_key', pubkey);
|
|
|
|
return pubkey;
|
|
|
|
};
|
|
|
|
|
|
|
|
let filterDifficulty: number = 0;
|
|
|
|
let difficulty: number = 16;
|
|
|
|
let timeout: number = 5;
|
|
|
|
let rerenderFeed: (() => void) | undefined;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* global config object
|
|
|
|
* config.pubkey, if not set loaded from localStorage or generate a new key
|
|
|
|
*/
|
|
|
|
export const config = {
|
|
|
|
get pubkey() {
|
|
|
|
if (!pubkey) {
|
|
|
|
pubkey = loadOrGenerateKeys();
|
|
|
|
}
|
|
|
|
return pubkey;
|
|
|
|
},
|
|
|
|
set pubkey(value) {
|
|
|
|
console.info(`pubkey was set to ${value}`);
|
|
|
|
pubkey = value;
|
|
|
|
},
|
|
|
|
get filterDifficulty() {
|
|
|
|
return filterDifficulty;
|
|
|
|
},
|
|
|
|
get difficulty() {
|
|
|
|
return difficulty;
|
|
|
|
},
|
|
|
|
get timeout() {
|
|
|
|
return timeout;
|
|
|
|
},
|
|
|
|
set rerenderFeed(value: () => void) {
|
|
|
|
rerenderFeed = value;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
const getNumberFromStorage = (
|
|
|
|
item: string,
|
|
|
|
fallback: number,
|
|
|
|
) => {
|
|
|
|
const stored = localStorage.getItem(item);
|
|
|
|
if (!stored) {
|
|
|
|
return fallback;
|
|
|
|
}
|
|
|
|
return Number(stored);
|
|
|
|
};
|
|
|
|
|
|
|
|
// filter difficulty
|
|
|
|
const filterDifficultyInput = document.querySelector('#filterDifficulty') as HTMLInputElement;
|
|
|
|
const filterDifficultyDisplay = document.querySelector('[data-display="filter_difficulty"]') as HTMLElement;
|
|
|
|
filterDifficultyInput.addEventListener('input', (e) => {
|
|
|
|
localStorage.setItem('filter_difficulty', filterDifficultyInput.value);
|
|
|
|
filterDifficulty = filterDifficultyInput.valueAsNumber;
|
|
|
|
filterDifficultyDisplay.textContent = filterDifficultyInput.value;
|
|
|
|
rerenderFeed && rerenderFeed();
|
|
|
|
});
|
|
|
|
filterDifficulty = getNumberFromStorage('filter_difficulty', 0);
|
|
|
|
filterDifficultyInput.valueAsNumber = filterDifficulty;
|
|
|
|
filterDifficultyDisplay.textContent = filterDifficultyInput.value;
|
|
|
|
|
|
|
|
// mining difficulty target
|
|
|
|
const miningTargetInput = document.querySelector('#miningTarget') as HTMLInputElement;
|
|
|
|
miningTargetInput.addEventListener('input', (e) => {
|
|
|
|
localStorage.setItem('mining_target', miningTargetInput.value);
|
|
|
|
difficulty = miningTargetInput.valueAsNumber;
|
|
|
|
});
|
|
|
|
// arbitrary difficulty default, still experimenting.
|
|
|
|
difficulty = getNumberFromStorage('mining_target', 16);
|
|
|
|
miningTargetInput.valueAsNumber = difficulty;
|
|
|
|
|
|
|
|
// mining timeout
|
|
|
|
const miningTimeoutInput = document.querySelector('#miningTimeout') as HTMLInputElement;
|
|
|
|
miningTimeoutInput.addEventListener('input', (e) => {
|
|
|
|
localStorage.setItem('mining_timeout', miningTimeoutInput.value);
|
|
|
|
timeout = miningTimeoutInput.valueAsNumber;
|
|
|
|
});
|
|
|
|
timeout = getNumberFromStorage('mining_timeout', 5);
|
|
|
|
miningTimeoutInput.valueAsNumber = timeout;
|