feat: use @snort/system-wasm pkg

This commit is contained in:
Kieran 2024-01-30 23:18:29 +00:00
parent 65373bd001
commit aa947f7f9c
Signed by: Kieran
GPG Key ID: DE71CEB3925BE941
5 changed files with 111 additions and 38 deletions

View File

@ -13,10 +13,10 @@
"@radix-ui/react-toggle": "^1.0.3", "@radix-ui/react-toggle": "^1.0.3",
"@react-hook/resize-observer": "^1.2.6", "@react-hook/resize-observer": "^1.2.6",
"@scure/base": "^1.1.3", "@scure/base": "^1.1.3",
"@snort/shared": "^1.0.11", "@snort/shared": "^1.0.12",
"@snort/system": "^1.2.0", "@snort/system": "^1.2.1",
"@snort/system-react": "^1.2.0", "@snort/system-react": "^1.2.1",
"@snort/system-wasm": "^1.0.1", "@snort/system-wasm": "^1.0.2",
"@snort/system-web": "^1.0.4", "@snort/system-web": "^1.0.4",
"@szhsin/react-menu": "^4.0.2", "@szhsin/react-menu": "^4.0.2",
"@types/webscopeio__react-textarea-autocomplete": "^4.7.2", "@types/webscopeio__react-textarea-autocomplete": "^4.7.2",

View File

@ -29,6 +29,7 @@ import { StreamSummaryPage } from "@/pages/summary";
import { EmbededPage } from "./pages/embed"; import { EmbededPage } from "./pages/embed";
import Markdown from "./element/markdown"; import Markdown from "./element/markdown";
import { Async } from "./element/async-loader"; import { Async } from "./element/async-loader";
import { WasmOptimizer, WasmPath, wasmInit } from "./wasm";
const DashboardPage = lazy(() => import("./pages/dashboard")); const DashboardPage = lazy(() => import("./pages/dashboard"));
import Faq from "@/faq.md"; import Faq from "@/faq.md";
@ -36,7 +37,7 @@ import Faq from "@/faq.md";
const db = new SnortSystemDb(); const db = new SnortSystemDb();
const System = new NostrSystem({ const System = new NostrSystem({
db, db,
checkSigs: false, optimizer: WasmOptimizer
}); });
export const Login = new LoginStore(); export const Login = new LoginStore();
@ -48,22 +49,26 @@ Object.entries(defaultRelays).forEach(params => {
}); });
export let TimeSync = 0; 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([ const router = createBrowserRouter([
{ {
element: <LayoutPage />, element: <LayoutPage />,
loader: async () => { loader: async () => {
db.ready = await db.isAvailable(); await doInit();
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
}
return null; return null;
}, },
children: [ children: [
@ -129,8 +134,7 @@ const router = createBrowserRouter([
path: "/chat/:id", path: "/chat/:id",
element: <ChatPopout />, element: <ChatPopout />,
loader: async () => { loader: async () => {
db.ready = await db.isAvailable(); await doInit();
await System.Init();
return null; return null;
}, },
}, },
@ -138,8 +142,7 @@ const router = createBrowserRouter([
path: "/alert/:id/:type", path: "/alert/:id/:type",
element: <AlertsPage />, element: <AlertsPage />,
loader: async () => { loader: async () => {
db.ready = await db.isAvailable(); await doInit();
await System.Init();
return null; return null;
}, },
}, },
@ -147,8 +150,7 @@ const router = createBrowserRouter([
path: "/embed/:id", path: "/embed/:id",
element: <EmbededPage />, element: <EmbededPage />,
loader: async () => { loader: async () => {
db.ready = await db.isAvailable(); await doInit();
await System.Init();
return null; return null;
}, },
}, },

30
src/wasm.ts Normal file
View File

@ -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<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 { wasmInit, WasmPath };

View File

@ -28,7 +28,7 @@ export default defineConfig({
filename: "build/stats.html", filename: "build/stats.html",
}), }),
], ],
assetsInclude: ["**/*.md"], assetsInclude: ["**/*.md", "**/*.wasm"],
build: { build: {
outDir: "build", outDir: "build",
sourcemap: true, sourcemap: true,

View File

@ -2891,21 +2891,35 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@snort/system-react@npm:^1.2.0": "@snort/shared@npm:^1.0.12":
version: 1.2.0 version: 1.0.12
resolution: "@snort/system-react@npm:1.2.0" resolution: "@snort/shared@npm:1.0.12"
dependencies: dependencies:
"@snort/shared": ^1.0.11 "@noble/curves": ^1.2.0
"@snort/system": ^1.2.0 "@noble/hashes": ^1.3.2
react: ^18.2.0 "@scure/base": ^1.1.2
checksum: 4a4444cfe6f91e92b814c11ebc26061e46bb771c2458919ec2c886671d7a3c9e920bc98b43831c40411869950d4e5d4633f7b5d51291347220ca12dd4f98fe6b debug: ^4.3.4
eventemitter3: ^5.0.1
light-bolt11-decoder: ^3.0.0
checksum: b31ee1a1977db5c7fa2e5d29f364a956e6de38fab3d8b0e8f2b233a362e7a1095ee615b839c0c2a7d8d48b1c3445ec7cecc0f8470cf45863d0ddeb673053fcbb
languageName: node languageName: node
linkType: hard linkType: hard
"@snort/system-wasm@npm:^1.0.1": "@snort/system-react@npm:^1.2.1":
version: 1.0.1 version: 1.2.1
resolution: "@snort/system-wasm@npm:1.0.1" resolution: "@snort/system-react@npm:1.2.1"
checksum: 90de15d5473c6cd3846aeb7df8cfe927a538b6be1e964c1ecea597144fcdafd135bf47fa6a7a4d08747fc01066d595504951421f9d72adee8459b9705a7f88cc 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 languageName: node
linkType: hard linkType: hard
@ -2939,6 +2953,26 @@ __metadata:
languageName: node languageName: node
linkType: hard 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": "@stablelib/binary@npm:^1.0.1":
version: 1.0.1 version: 1.0.1
resolution: "@stablelib/binary@npm:1.0.1" resolution: "@stablelib/binary@npm:1.0.1"
@ -6146,6 +6180,13 @@ __metadata:
languageName: node languageName: node
linkType: hard 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": "lru-cache@npm:^5.1.1":
version: 5.1.1 version: 5.1.1
resolution: "lru-cache@npm:5.1.1" resolution: "lru-cache@npm:5.1.1"
@ -7791,10 +7832,10 @@ __metadata:
"@radix-ui/react-toggle": ^1.0.3 "@radix-ui/react-toggle": ^1.0.3
"@react-hook/resize-observer": ^1.2.6 "@react-hook/resize-observer": ^1.2.6
"@scure/base": ^1.1.3 "@scure/base": ^1.1.3
"@snort/shared": ^1.0.11 "@snort/shared": ^1.0.12
"@snort/system": ^1.2.0 "@snort/system": ^1.2.1
"@snort/system-react": ^1.2.0 "@snort/system-react": ^1.2.1
"@snort/system-wasm": ^1.0.1 "@snort/system-wasm": ^1.0.2
"@snort/system-web": ^1.0.4 "@snort/system-web": ^1.0.4
"@szhsin/react-menu": ^4.0.2 "@szhsin/react-menu": ^4.0.2
"@testing-library/dom": ^9.3.1 "@testing-library/dom": ^9.3.1