diff --git a/packages/app/src/Element/Event/NoteCreator.tsx b/packages/app/src/Element/Event/NoteCreator.tsx index 49e0273ed..4b2612b94 100644 --- a/packages/app/src/Element/Event/NoteCreator.tsx +++ b/packages/app/src/Element/Event/NoteCreator.tsx @@ -13,7 +13,7 @@ import Note from "Element/Event/Note"; import { ClipboardEventHandler } from "react"; import useLogin from "Hooks/useLogin"; -import { WasmPowWorker } from "index"; +import { GetPowWorker } from "index"; import AsyncButton from "Element/AsyncButton"; import { AsyncIcon } from "Element/AsyncIcon"; import { fetchNip05Pubkey } from "@snort/shared"; @@ -25,7 +25,7 @@ export function NoteCreator() { const { formatMessage } = useIntl(); const uploader = useFileUpload(); const login = useLogin(s => ({ relays: s.relays, publicKey: s.publicKey, pow: s.preferences.pow })); - const publisher = login.pow ? useEventPublisher()?.pow(login.pow, new WasmPowWorker()) : useEventPublisher(); + const publisher = login.pow ? useEventPublisher()?.pow(login.pow, GetPowWorker()) : useEventPublisher(); const note = useNoteCreator(); const relays = login.relays; diff --git a/packages/app/src/Element/PinPrompt.tsx b/packages/app/src/Element/PinPrompt.tsx index fa8d5e2ef..129a1230a 100644 --- a/packages/app/src/Element/PinPrompt.tsx +++ b/packages/app/src/Element/PinPrompt.tsx @@ -9,7 +9,7 @@ import useEventPublisher from "Hooks/useEventPublisher"; import { LoginStore, createPublisher, sessionNeedsPin } from "Login"; import Modal from "./Modal"; import AsyncButton from "./AsyncButton"; -import { WasmPowWorker } from "index"; +import { GetPowWorker } from "index"; export function PinPrompt({ onResult, @@ -101,7 +101,7 @@ export function LoginUnlock() { const pub = EventPublisher.privateKey(k); if (login.preferences.pow) { - pub.pow(login.preferences.pow, new WasmPowWorker()); + pub.pow(login.preferences.pow, GetPowWorker()); } LoginStore.setPublisher(login.id, pub); LoginStore.updateSession({ @@ -118,7 +118,7 @@ export function LoginUnlock() { const pub = createPublisher(login); if (pub) { if (login.preferences.pow) { - pub.pow(login.preferences.pow, new WasmPowWorker()); + pub.pow(login.preferences.pow, GetPowWorker()); } LoginStore.setPublisher(login.id, pub); LoginStore.updateSession({ diff --git a/packages/app/src/chat/nip24.ts b/packages/app/src/chat/nip24.ts index 9f32adf43..5cd64524d 100644 --- a/packages/app/src/chat/nip24.ts +++ b/packages/app/src/chat/nip24.ts @@ -3,7 +3,7 @@ import { EventKind, NostrPrefix, encodeTLVEntries, TLVEntryType, TLVEntry, decod import { GiftWrapCache } from "Cache/GiftWrapCache"; import { UnwrappedGift } from "Db"; import { Chat, ChatSystem, ChatType, lastReadInChat } from "chat"; -import { WasmPowWorker } from "index"; +import { GetPowWorker } from "index"; export class Nip24ChatSystem extends ExternalStore> implements ChatSystem { #cache: GiftWrapCache; @@ -105,9 +105,7 @@ export class Nip24ChatSystem extends ExternalStore> implements ChatS const recvSealedN = pub.giftWrap(await pub.sealRumor(gossip, pt.id), pt.id, powTarget); messages.push(recvSealedN); } - messages.push( - pub.giftWrap(await pub.sealRumor(gossip, pub.pubKey), pub.pubKey, powTarget, new WasmPowWorker()), - ); + messages.push(pub.giftWrap(await pub.sealRumor(gossip, pub.pubKey), pub.pubKey, powTarget, GetPowWorker())); return await Promise.all(messages); }, sendMessage: (ev, system) => { diff --git a/packages/app/src/index.tsx b/packages/app/src/index.tsx index dca895ecf..efb36dad7 100644 --- a/packages/app/src/index.tsx +++ b/packages/app/src/index.tsx @@ -17,6 +17,7 @@ import { PowMiner, NostrEvent, mapEventToProfile, + PowWorker, } from "@snort/system"; import { SnortContext } from "@snort/system-react"; @@ -71,6 +72,10 @@ export class WasmPowWorker implements PowMiner { } } +const hasWasm = "WebAssembly" in globalThis; +const DefaultPowWorker = hasWasm ? undefined : new PowWorker("/pow.js"); +export const GetPowWorker = () => (hasWasm ? new WasmPowWorker() : unwrap(DefaultPowWorker)); + /** * Singleton nostr system */ @@ -78,7 +83,7 @@ export const System = new NostrSystem({ relayCache: UserRelays, profileCache: UserCache, relayMetrics: RelayMetrics, - queryOptimizer: WasmQueryOptimizer, + queryOptimizer: hasWasm ? WasmQueryOptimizer : undefined, db: SystemDb, authHandler: async (c, r) => { const { id } = LoginStore.snapshot(); @@ -120,7 +125,9 @@ export const ProfileLoader = new ProfileLoaderService(System, UserCache); serviceWorkerRegistration.register(); async function initSite() { - await wasmInit(WasmPath); + if (hasWasm) { + await wasmInit(WasmPath); + } const login = LoginStore.takeSnapshot(); db.ready = await db.isAvailable(); if (db.ready) {