fix: disable WASM when not available

This commit is contained in:
2023-10-12 15:12:06 +01:00
parent 7513d4cdd3
commit 95a715839d
4 changed files with 16 additions and 11 deletions

View File

@ -13,7 +13,7 @@ import Note from "Element/Event/Note";
import { ClipboardEventHandler } from "react"; import { ClipboardEventHandler } from "react";
import useLogin from "Hooks/useLogin"; import useLogin from "Hooks/useLogin";
import { WasmPowWorker } from "index"; import { GetPowWorker } from "index";
import AsyncButton from "Element/AsyncButton"; import AsyncButton from "Element/AsyncButton";
import { AsyncIcon } from "Element/AsyncIcon"; import { AsyncIcon } from "Element/AsyncIcon";
import { fetchNip05Pubkey } from "@snort/shared"; import { fetchNip05Pubkey } from "@snort/shared";
@ -25,7 +25,7 @@ export function NoteCreator() {
const { formatMessage } = useIntl(); const { formatMessage } = useIntl();
const uploader = useFileUpload(); const uploader = useFileUpload();
const login = useLogin(s => ({ relays: s.relays, publicKey: s.publicKey, pow: s.preferences.pow })); 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 note = useNoteCreator();
const relays = login.relays; const relays = login.relays;

View File

@ -9,7 +9,7 @@ import useEventPublisher from "Hooks/useEventPublisher";
import { LoginStore, createPublisher, sessionNeedsPin } from "Login"; import { LoginStore, createPublisher, sessionNeedsPin } from "Login";
import Modal from "./Modal"; import Modal from "./Modal";
import AsyncButton from "./AsyncButton"; import AsyncButton from "./AsyncButton";
import { WasmPowWorker } from "index"; import { GetPowWorker } from "index";
export function PinPrompt({ export function PinPrompt({
onResult, onResult,
@ -101,7 +101,7 @@ export function LoginUnlock() {
const pub = EventPublisher.privateKey(k); const pub = EventPublisher.privateKey(k);
if (login.preferences.pow) { if (login.preferences.pow) {
pub.pow(login.preferences.pow, new WasmPowWorker()); pub.pow(login.preferences.pow, GetPowWorker());
} }
LoginStore.setPublisher(login.id, pub); LoginStore.setPublisher(login.id, pub);
LoginStore.updateSession({ LoginStore.updateSession({
@ -118,7 +118,7 @@ export function LoginUnlock() {
const pub = createPublisher(login); const pub = createPublisher(login);
if (pub) { if (pub) {
if (login.preferences.pow) { if (login.preferences.pow) {
pub.pow(login.preferences.pow, new WasmPowWorker()); pub.pow(login.preferences.pow, GetPowWorker());
} }
LoginStore.setPublisher(login.id, pub); LoginStore.setPublisher(login.id, pub);
LoginStore.updateSession({ LoginStore.updateSession({

View File

@ -3,7 +3,7 @@ import { EventKind, NostrPrefix, encodeTLVEntries, TLVEntryType, TLVEntry, decod
import { GiftWrapCache } from "Cache/GiftWrapCache"; import { GiftWrapCache } from "Cache/GiftWrapCache";
import { UnwrappedGift } from "Db"; import { UnwrappedGift } from "Db";
import { Chat, ChatSystem, ChatType, lastReadInChat } from "chat"; import { Chat, ChatSystem, ChatType, lastReadInChat } from "chat";
import { WasmPowWorker } from "index"; import { GetPowWorker } from "index";
export class Nip24ChatSystem extends ExternalStore<Array<Chat>> implements ChatSystem { export class Nip24ChatSystem extends ExternalStore<Array<Chat>> implements ChatSystem {
#cache: GiftWrapCache; #cache: GiftWrapCache;
@ -105,9 +105,7 @@ export class Nip24ChatSystem extends ExternalStore<Array<Chat>> implements ChatS
const recvSealedN = pub.giftWrap(await pub.sealRumor(gossip, pt.id), pt.id, powTarget); const recvSealedN = pub.giftWrap(await pub.sealRumor(gossip, pt.id), pt.id, powTarget);
messages.push(recvSealedN); messages.push(recvSealedN);
} }
messages.push( messages.push(pub.giftWrap(await pub.sealRumor(gossip, pub.pubKey), pub.pubKey, powTarget, GetPowWorker()));
pub.giftWrap(await pub.sealRumor(gossip, pub.pubKey), pub.pubKey, powTarget, new WasmPowWorker()),
);
return await Promise.all(messages); return await Promise.all(messages);
}, },
sendMessage: (ev, system) => { sendMessage: (ev, system) => {

View File

@ -17,6 +17,7 @@ import {
PowMiner, PowMiner,
NostrEvent, NostrEvent,
mapEventToProfile, mapEventToProfile,
PowWorker,
} from "@snort/system"; } from "@snort/system";
import { SnortContext } from "@snort/system-react"; 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 * Singleton nostr system
*/ */
@ -78,7 +83,7 @@ export const System = new NostrSystem({
relayCache: UserRelays, relayCache: UserRelays,
profileCache: UserCache, profileCache: UserCache,
relayMetrics: RelayMetrics, relayMetrics: RelayMetrics,
queryOptimizer: WasmQueryOptimizer, queryOptimizer: hasWasm ? WasmQueryOptimizer : undefined,
db: SystemDb, db: SystemDb,
authHandler: async (c, r) => { authHandler: async (c, r) => {
const { id } = LoginStore.snapshot(); const { id } = LoginStore.snapshot();
@ -120,7 +125,9 @@ export const ProfileLoader = new ProfileLoaderService(System, UserCache);
serviceWorkerRegistration.register(); serviceWorkerRegistration.register();
async function initSite() { async function initSite() {
if (hasWasm) {
await wasmInit(WasmPath); await wasmInit(WasmPath);
}
const login = LoginStore.takeSnapshot(); const login = LoginStore.takeSnapshot();
db.ready = await db.isAvailable(); db.ready = await db.isAvailable();
if (db.ready) { if (db.ready) {