Files
snort/packages/app/src/Utils/wasm.ts
2024-01-04 19:01:18 +02:00

46 lines
1.4 KiB
TypeScript

import { FlatReqFilter, NostrEvent, Optimizer, PowMiner, PowWorker, ReqFilter } from "@snort/system";
import PowWorkerURL from "@snort/system/src/pow-worker.ts?worker&url";
import { unwrap } from "@/Utils/index";
import {
compress,
default as wasmInit,
expand_filter,
flat_merge,
get_diff,
pow,
schnorr_verify_event,
} from "../../../system-wasm/pkg/system_wasm";
import WasmPath from "../../../system-wasm/pkg/system_wasm_bg.wasm";
export const WasmOptimizer = {
expandFilter: (f: ReqFilter) => {
return expand_filter(f) as Array<FlatReqFilter>;
},
getDiff: (prev: Array<ReqFilter>, next: Array<ReqFilter>) => {
return get_diff(prev, next) as Array<FlatReqFilter>;
},
flatMerge: (all: Array<FlatReqFilter>) => {
return flat_merge(all) as Array<ReqFilter>;
},
compress: (all: Array<ReqFilter>) => {
return compress(all) as Array<ReqFilter>;
},
schnorrVerify: ev => {
return schnorr_verify_event(ev);
},
} as Optimizer;
export class WasmPowWorker implements PowMiner {
minePow(ev: NostrEvent, target: number): Promise<NostrEvent> {
const res = pow(ev, target);
return Promise.resolve(res);
}
}
export { wasmInit, WasmPath };
export const hasWasm = "WebAssembly" in globalThis;
const DefaultPowWorker = hasWasm ? undefined : new PowWorker(PowWorkerURL);
export const GetPowWorker = () => (hasWasm ? new WasmPowWorker() : unwrap(DefaultPowWorker));