settings: refactor pubkey into config.pubkey global

starting to move global application user config to settings.ts.
plan is to only share user settings via the config object, with
this all settings related ui can be moved out of main.js into its
own module.
pull/72/head
OFF0 2 years ago
parent cadd0302a5
commit d654028a86
Signed by: offbyn
GPG Key ID: 94A2F643C51F37FA

@ -7,6 +7,7 @@ import {sub24hFeed, subNote, subProfile} from './subscriptions'
import {publish} from './relays'; import {publish} from './relays';
import {getReplyTo, hasEventTag, isMention, sortByCreatedAt, sortEventCreatedAt, validatePow} from './events'; import {getReplyTo, hasEventTag, isMention, sortByCreatedAt, sortEventCreatedAt, validatePow} from './events';
import {clearView, getViewContent, getViewElem, setViewElem, view} from './view'; import {clearView, getViewContent, getViewElem, setViewElem, view} from './view';
import {config} from './settings';
// curl -H 'accept: application/nostr+json' https://relay.nostr.ch/ // curl -H 'accept: application/nostr+json' https://relay.nostr.ch/
function onEvent(evt, relay) { function onEvent(evt, relay) {
@ -30,15 +31,6 @@ function onEvent(evt, relay) {
} }
} }
let pubkey = localStorage.getItem('pub_key') || (() => {
const privatekey = generatePrivateKey();
const pubkey = getPublicKey(privatekey);
localStorage.setItem('private_key', privatekey);
localStorage.setItem('pub_key', pubkey);
return pubkey;
})();
const textNoteList = []; // could use indexDB const textNoteList = []; // could use indexDB
const eventRelayMap = {}; // eventId: [relay1, relay2] const eventRelayMap = {}; // eventId: [relay1, relay2]
@ -152,7 +144,7 @@ function handleReaction(evt, relay) {
const button = article.querySelector('button[name="star"]'); const button = article.querySelector('button[name="star"]');
const reactions = button.querySelector('[data-reactions]'); const reactions = button.querySelector('[data-reactions]');
reactions.textContent = reactionMap[eventId].length; reactions.textContent = reactionMap[eventId].length;
if (evt.pubkey === pubkey) { if (evt.pubkey === config.pubkey) {
const star = button.querySelector('img[src*="star"]'); const star = button.querySelector('img[src*="star"]');
star?.setAttribute('src', '/assets/star-fill.svg'); star?.setAttribute('src', '/assets/star-fill.svg');
star?.setAttribute('title', getReactionList(eventId).join(' ')); star?.setAttribute('title', getReactionList(eventId).join(' '));
@ -240,7 +232,7 @@ function createTextNote(evt, relay) {
// const isLongContent = evt.content.trimRight().length > 280; // const isLongContent = evt.content.trimRight().length > 280;
// const content = isLongContent ? evt.content.slice(0, 280) : evt.content; // const content = isLongContent ? evt.content.slice(0, 280) : evt.content;
const hasReactions = reactionMap[evt.id]?.length > 0; const hasReactions = reactionMap[evt.id]?.length > 0;
const didReact = hasReactions && !!reactionMap[evt.id].find(reaction => reaction.pubkey === pubkey); const didReact = hasReactions && !!reactionMap[evt.id].find(reaction => reaction.pubkey === config.pubkey);
const replyFeed = replies[0] ? replies.sort(sortByCreatedAt).map(e => setViewElem(e.id, createTextNote(e, relay))) : []; const replyFeed = replies[0] ? replies.sort(sortByCreatedAt).map(e => setViewElem(e.id, createTextNote(e, relay))) : [];
const [content, {firstLink}] = parseTextContent(evt.content); const [content, {firstLink}] = parseTextContent(evt.content);
const body = elem('div', {className: 'mbox-body'}, [ const body = elem('div', {className: 'mbox-body'}, [
@ -506,7 +498,7 @@ async function upvote(eventId, eventPubkey) {
reactionBtn.disabled = true; reactionBtn.disabled = true;
const newReaction = await powEvent({ const newReaction = await powEvent({
kind: 7, kind: 7,
pubkey, // TODO: lib could check that this is the pubkey of the key to sign with pubkey: config.pubkey, // TODO: lib could check that this is the pubkey of the key to sign with
content: '+', content: '+',
tags, tags,
created_at: Math.floor(Date.now() * 0.001), created_at: Math.floor(Date.now() * 0.001),
@ -537,9 +529,8 @@ const onSendError = err => sendStatus.textContent = err.message;
const publishBtn = document.querySelector('#publish'); const publishBtn = document.querySelector('#publish');
writeForm.addEventListener('submit', async (e) => { writeForm.addEventListener('submit', async (e) => {
e.preventDefault(); e.preventDefault();
// const pubkey = localStorage.getItem('pub_key');
const privatekey = localStorage.getItem('private_key'); const privatekey = localStorage.getItem('private_key');
if (!pubkey || !privatekey) { if (!config.pubkey || !privatekey) {
return onSendError(new Error('no pubkey/privatekey')); return onSendError(new Error('no pubkey/privatekey'));
} }
const content = writeInput.value.trimRight(); const content = writeInput.value.trimRight();
@ -562,7 +553,7 @@ writeForm.addEventListener('submit', async (e) => {
const newEvent = await powEvent({ const newEvent = await powEvent({
kind: 1, kind: 1,
content, content,
pubkey, pubkey: config.pubkey,
tags, tags,
created_at: Math.floor(Date.now() * 0.001), created_at: Math.floor(Date.now() * 0.001),
}, {difficulty, statusElem: sendStatus, timeout}).catch(console.warn); }, {difficulty, statusElem: sendStatus, timeout}).catch(console.warn);
@ -751,7 +742,7 @@ importBtn.addEventListener('click', () => {
localStorage.setItem('pub_key', pubkeyInput); localStorage.setItem('pub_key', pubkeyInput);
statusMessage.textContent = 'stored private and public key locally!'; statusMessage.textContent = 'stored private and public key locally!';
statusMessage.hidden = false; statusMessage.hidden = false;
pubkey = pubkeyInput; config.pubkey = pubkeyInput;
} }
}); });
@ -819,7 +810,7 @@ profileForm.addEventListener('submit', async (e) => {
const form = new FormData(profileForm); const form = new FormData(profileForm);
const newProfile = await powEvent({ const newProfile = await powEvent({
kind: 0, kind: 0,
pubkey, pubkey: config.pubkey,
content: JSON.stringify(Object.fromEntries(form)), content: JSON.stringify(Object.fromEntries(form)),
tags: [], tags: [],
created_at: Math.floor(Date.now() * 0.001), created_at: Math.floor(Date.now() * 0.001),

@ -0,0 +1,33 @@
import {generatePrivateKey, getPublicKey} from 'nostr-tools';
let pubkey = '';
const loadOrGeneraateKeys = () => {
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;
};
/**
* global config object
* config.pubkey, if not set loaded from localStorage or generate a new key
*/
export const config = {
get pubkey() {
if (!pubkey) {
pubkey = loadOrGeneraateKeys();
}
return pubkey;
},
set pubkey(value) {
console.info(`pubkey was set to ${value}`)
pubkey = value;
}
};
Loading…
Cancel
Save