From a97c7a00ebb414b7ff7731e6bf3640f2f476aae3 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 16 Feb 2023 22:43:27 -0800 Subject: messages --- src/lib/nostr.js | 11 ++++++++--- src/lib/socket.js | 27 ++------------------------- src/lib/store.js | 3 ++- 3 files changed, 12 insertions(+), 29 deletions(-) (limited to 'src/lib') diff --git a/src/lib/nostr.js b/src/lib/nostr.js index 13251856..d72f48ef 100644 --- a/src/lib/nostr.js +++ b/src/lib/nostr.js @@ -5,7 +5,7 @@ import { Buffer } from 'buffer'; import { bech32m } from 'bech32'; import { bip32, fail, wait, post, stretch } from '$lib/utils'; import { calculateId, signId } from 'nostr'; -import { password as pw, passwordPrompt, pin, loginRedirect } from '$lib/store'; +import { decrypted, password as pw, passwordPrompt, pin, loginRedirect } from '$lib/store'; import { goto, invalidate } from '$app/navigation'; const { encode, decode, fromWords, toWords } = bech32m; @@ -58,8 +58,10 @@ export let encrypt = async ({ message, recipient, user }) => { }; export let decrypt = async ({ event, user }) => { + let cache = get(decrypted); try { - let { content, pubkey } = event; + let { content, pubkey, id } = event; + if (cache[id]) return cache[id]; if (pubkey === user.pubkey) pubkey = event.tags[0][1]; pubkey = Uint8Array.from(Buffer.from('02' + pubkey, 'hex')); @@ -78,7 +80,10 @@ export let decrypt = async ({ event, user }) => { let message = await crypto.subtle.decrypt({ name: 'AES-CBC', iv }, key, cipher); - return Buffer.from(message).toString('utf8'); + cache[id] = Buffer.from(message).toString('utf8'); + decrypted.set(cache); + + return cache[id]; } catch (e) { // console.log(e); } diff --git a/src/lib/socket.js b/src/lib/socket.js index ce3cbe4b..aef8a513 100644 --- a/src/lib/socket.js +++ b/src/lib/socket.js @@ -1,23 +1,11 @@ import { get } from 'svelte/store'; -import { - events as $events, - invoice, - request, - newPayment, - last, - rate, - payments, - user -} from '$lib/store'; +import { event, invoice, request, newPayment, last, rate, payments, user } from '$lib/store'; import { success, sat } from '$lib/utils'; import { PUBLIC_SOCKET } from '$env/static/public'; import { invalidate } from '$app/navigation'; import { browser } from '$app/environment'; let socket, token; -let le = browser && localStorage.getItem('events'); -let events = le && le !== 'undefined' ? JSON.parse(le) : {}; -let q = Object.keys(events); export const auth = () => token && send('login', token) && send('heartbeat'); @@ -30,23 +18,12 @@ export const messages = (data) => ({ id() { last.set(Date.now()); }, - invoice() { invoice.set(data); }, - event() { - data.seen = Math.round(Date.now() / 1000); - events[data.id] = data; - q.push(data.id); - $events.set(events); - while (q.length > 10000) delete events[q.shift()]; - localStorage.setItem( - 'events', - JSON.stringify(q.slice(-100).reduce((a, b) => (a = { ...a, [b]: events[b] }), {})) - ); + event.set(data); }, - rate() { rate.set(data); }, diff --git a/src/lib/store.js b/src/lib/store.js index 93ac3d47..6853386c 100644 --- a/src/lib/store.js +++ b/src/lib/store.js @@ -36,11 +36,12 @@ export const animatedRate = writable(0); export const avatar = writable(); export const banner = writable(); export const colorTheme = writable('from-primary to-gradient'); +export const event = writable(); export const events = writable({}); export const invoice = writable(); export const last = writable(); export const loginRedirect = writable(); -export const messages = persistLocal('messages', {}); +export const decrypted = persistLocal('decrypted', {}); export const newPayment = persistLocal('newPayment'); export const password = persistLocal('password'); export const passwordPrompt = writable(); -- cgit v1.2.3