diff --git a/package.json b/package.json index ff725f2..e155b14 100644 --- a/package.json +++ b/package.json @@ -13,10 +13,10 @@ "@radix-ui/react-toggle": "^1.0.3", "@react-hook/resize-observer": "^1.2.6", "@scure/base": "^1.1.3", - "@snort/shared": "^1.0.11", - "@snort/system": "^1.2.0", - "@snort/system-react": "^1.2.0", - "@snort/system-wasm": "^1.0.1", + "@snort/shared": "^1.0.12", + "@snort/system": "^1.2.1", + "@snort/system-react": "^1.2.1", + "@snort/system-wasm": "^1.0.2", "@snort/system-web": "^1.0.4", "@szhsin/react-menu": "^4.0.2", "@types/webscopeio__react-textarea-autocomplete": "^4.7.2", diff --git a/src/index.tsx b/src/index.tsx index f2bdcf0..45a52fe 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -29,6 +29,7 @@ import { StreamSummaryPage } from "@/pages/summary"; import { EmbededPage } from "./pages/embed"; import Markdown from "./element/markdown"; import { Async } from "./element/async-loader"; +import { WasmOptimizer, WasmPath, wasmInit } from "./wasm"; const DashboardPage = lazy(() => import("./pages/dashboard")); import Faq from "@/faq.md"; @@ -36,7 +37,7 @@ import Faq from "@/faq.md"; const db = new SnortSystemDb(); const System = new NostrSystem({ db, - checkSigs: false, + optimizer: WasmOptimizer }); export const Login = new LoginStore(); @@ -48,22 +49,26 @@ Object.entries(defaultRelays).forEach(params => { }); export let TimeSync = 0; +async function doInit() { + await wasmInit(WasmPath) + db.ready = await db.isAvailable(); + await System.Init(); + try { + const req = await fetch("https://api.zap.stream/api/time"); + const nowAtServer = (await req.json()).time as number; + const now = unixNowMs(); + TimeSync = now - nowAtServer; + console.debug("Time clock sync", TimeSync); + } catch { + // ignore + } +} const router = createBrowserRouter([ { element: , loader: async () => { - db.ready = await db.isAvailable(); - await System.Init(); - try { - const req = await fetch("https://api.zap.stream/api/time"); - const nowAtServer = (await req.json()).time as number; - const now = unixNowMs(); - TimeSync = now - nowAtServer; - console.debug("Time clock sync", TimeSync); - } catch { - // ignore - } + await doInit(); return null; }, children: [ @@ -129,8 +134,7 @@ const router = createBrowserRouter([ path: "/chat/:id", element: , loader: async () => { - db.ready = await db.isAvailable(); - await System.Init(); + await doInit(); return null; }, }, @@ -138,8 +142,7 @@ const router = createBrowserRouter([ path: "/alert/:id/:type", element: , loader: async () => { - db.ready = await db.isAvailable(); - await System.Init(); + await doInit(); return null; }, }, @@ -147,8 +150,7 @@ const router = createBrowserRouter([ path: "/embed/:id", element: , loader: async () => { - db.ready = await db.isAvailable(); - await System.Init(); + await doInit(); return null; }, }, diff --git a/src/wasm.ts b/src/wasm.ts new file mode 100644 index 0000000..64189ec --- /dev/null +++ b/src/wasm.ts @@ -0,0 +1,30 @@ +import { + compress, + default as wasmInit, + expand_filter, + flat_merge, + get_diff, + schnorr_verify_event, +} from "@snort/system-wasm"; +import WasmPath from "@snort/system-wasm/pkg/system_wasm_bg.wasm"; +import { ReqFilter, FlatReqFilter, Optimizer } from "@snort/system"; + +export const WasmOptimizer = { + expandFilter: (f: ReqFilter) => { + return expand_filter(f) as Array; + }, + getDiff: (prev: Array, next: Array) => { + return get_diff(prev, next) as Array; + }, + flatMerge: (all: Array) => { + return flat_merge(all) as Array; + }, + compress: (all: Array) => { + return compress(all) as Array; + }, + schnorrVerify: ev => { + return schnorr_verify_event(ev); + }, +} as Optimizer; + +export { wasmInit, WasmPath }; diff --git a/vite.config.ts b/vite.config.ts index 55c1262..79258af 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -28,7 +28,7 @@ export default defineConfig({ filename: "build/stats.html", }), ], - assetsInclude: ["**/*.md"], + assetsInclude: ["**/*.md", "**/*.wasm"], build: { outDir: "build", sourcemap: true, diff --git a/yarn.lock b/yarn.lock index acb89b7..716426e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2891,21 +2891,35 @@ __metadata: languageName: node linkType: hard -"@snort/system-react@npm:^1.2.0": - version: 1.2.0 - resolution: "@snort/system-react@npm:1.2.0" +"@snort/shared@npm:^1.0.12": + version: 1.0.12 + resolution: "@snort/shared@npm:1.0.12" dependencies: - "@snort/shared": ^1.0.11 - "@snort/system": ^1.2.0 - react: ^18.2.0 - checksum: 4a4444cfe6f91e92b814c11ebc26061e46bb771c2458919ec2c886671d7a3c9e920bc98b43831c40411869950d4e5d4633f7b5d51291347220ca12dd4f98fe6b + "@noble/curves": ^1.2.0 + "@noble/hashes": ^1.3.2 + "@scure/base": ^1.1.2 + debug: ^4.3.4 + eventemitter3: ^5.0.1 + light-bolt11-decoder: ^3.0.0 + checksum: b31ee1a1977db5c7fa2e5d29f364a956e6de38fab3d8b0e8f2b233a362e7a1095ee615b839c0c2a7d8d48b1c3445ec7cecc0f8470cf45863d0ddeb673053fcbb languageName: node linkType: hard -"@snort/system-wasm@npm:^1.0.1": - version: 1.0.1 - resolution: "@snort/system-wasm@npm:1.0.1" - checksum: 90de15d5473c6cd3846aeb7df8cfe927a538b6be1e964c1ecea597144fcdafd135bf47fa6a7a4d08747fc01066d595504951421f9d72adee8459b9705a7f88cc +"@snort/system-react@npm:^1.2.1": + version: 1.2.1 + resolution: "@snort/system-react@npm:1.2.1" + dependencies: + "@snort/shared": ^1.0.12 + "@snort/system": ^1.2.1 + react: ^18.2.0 + checksum: 7f354f2251fdd4ed8e2dace0dd54c8d0b06de2d5c5eac5468850ac6416bf24d97a16fb0d6fff211a34b2fb22899f4b01c1ecc7de210066709d5b85fb436dc906 + languageName: node + linkType: hard + +"@snort/system-wasm@npm:^1.0.2": + version: 1.0.2 + resolution: "@snort/system-wasm@npm:1.0.2" + checksum: 2d2ccc28484ea2340d4c073fd6680dc33a645899a177b619e8258af3cc5c71d6484f9ea0978e7aa87fd67cfc68e1d6fa759e60b3a361df3f99da5f5707a7b52a languageName: node linkType: hard @@ -2939,6 +2953,26 @@ __metadata: languageName: node linkType: hard +"@snort/system@npm:^1.2.1": + version: 1.2.1 + resolution: "@snort/system@npm:1.2.1" + dependencies: + "@noble/curves": ^1.2.0 + "@noble/hashes": ^1.3.2 + "@scure/base": ^1.1.2 + "@snort/shared": ^1.0.12 + "@stablelib/xchacha20": ^1.0.1 + debug: ^4.3.4 + eventemitter3: ^5.0.1 + isomorphic-ws: ^5.0.0 + lokijs: ^1.5.12 + lru-cache: ^10.2.0 + uuid: ^9.0.0 + ws: ^8.14.0 + checksum: 78557fddba7f8ebba4ee1df0b0896f475c16d622f833aa71a849e40e9a1a2fc693bcfdcddf0ea9ec413f37297854881597eb3ae9cdebb8bd4e18b251eff1ee1c + languageName: node + linkType: hard + "@stablelib/binary@npm:^1.0.1": version: 1.0.1 resolution: "@stablelib/binary@npm:1.0.1" @@ -6146,6 +6180,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^10.2.0": + version: 10.2.0 + resolution: "lru-cache@npm:10.2.0" + checksum: eee7ddda4a7475deac51ac81d7dd78709095c6fa46e8350dc2d22462559a1faa3b81ed931d5464b13d48cbd7e08b46100b6f768c76833912bc444b99c37e25db + languageName: node + linkType: hard + "lru-cache@npm:^5.1.1": version: 5.1.1 resolution: "lru-cache@npm:5.1.1" @@ -7791,10 +7832,10 @@ __metadata: "@radix-ui/react-toggle": ^1.0.3 "@react-hook/resize-observer": ^1.2.6 "@scure/base": ^1.1.3 - "@snort/shared": ^1.0.11 - "@snort/system": ^1.2.0 - "@snort/system-react": ^1.2.0 - "@snort/system-wasm": ^1.0.1 + "@snort/shared": ^1.0.12 + "@snort/system": ^1.2.1 + "@snort/system-react": ^1.2.1 + "@snort/system-wasm": ^1.0.2 "@snort/system-web": ^1.0.4 "@szhsin/react-menu": ^4.0.2 "@testing-library/dom": ^9.3.1