aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2023-02-16 22:43:27 -0800
committerAdam Soltys <[email protected]>2023-02-16 22:43:27 -0800
commita97c7a00ebb414b7ff7731e6bf3640f2f476aae3 (patch)
tree4a067caf411a8fa6d206cdb978459d5d61a860d1 /src/lib
parentc3968431bbdf534e2698256d8e8aa6f475275fff (diff)
downloadcoinos-ui-a97c7a00ebb414b7ff7731e6bf3640f2f476aae3.tar.gz
coinos-ui-a97c7a00ebb414b7ff7731e6bf3640f2f476aae3.zip
messages
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/nostr.js11
-rw-r--r--src/lib/socket.js27
-rw-r--r--src/lib/store.js3
3 files changed, 12 insertions, 29 deletions
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();