refactor: always fallback to in-memory relay
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Kieran 2024-03-04 16:51:14 +00:00
parent 098251fee3
commit 782feedae4
3 changed files with 43 additions and 30 deletions

View File

@ -1,6 +1,6 @@
{
"name": "@snort/worker-relay",
"version": "1.0.7",
"version": "1.0.8",
"description": "A nostr relay in a service worker",
"main": "dist/index.js",
"types": "dist/index.d.ts",
@ -24,8 +24,9 @@
},
"devDependencies": {
"@types/debug": "^4.1.12",
"@types/sharedworker": "^0.0.112",
"@types/uuid": "^9.0.7",
"esbuild": "^0.20.1",
"typescript": "^5.2.2"
}
}
}

View File

@ -9,14 +9,6 @@ import { getForYouFeed } from "./forYouFeed";
let relay: RelayHandler | undefined;
async function reply<T>(id: string, obj?: T) {
globalThis.postMessage({
id,
cmd: "reply",
args: obj,
} as WorkerMessage<T>);
}
// Event inserter queue
let eventWriteQueue: Array<NostrEvent> = [];
async function insertBatch() {
@ -50,21 +42,15 @@ try {
console.error(e);
}
async function tryOpfs() {
try {
await navigator.storage.getDirectory();
return true;
} catch {
// ignore
const handleMsg = async (port: MessagePort | DedicatedWorkerGlobalScope, ev: MessageEvent) => {
async function reply<T>(id: string, obj?: T) {
port.postMessage({
id,
cmd: "reply",
args: obj,
} as WorkerMessage<T>);
}
return false;
}
globalThis.onclose = () => {
relay?.close();
}
globalThis.onmessage = async ev => {
const msg = ev.data as WorkerMessage<any>;
try {
switch (msg.cmd) {
@ -75,14 +61,19 @@ globalThis.onmessage = async ev => {
}
case "init": {
await barrierQueue(cmdQueue, async () => {
if ("WebAssembly" in globalThis && (await tryOpfs())) {
relay = new SqliteRelay();
} else {
relay = new InMemoryRelay();
}
const [dbPath] = msg.args as Array<string>;
debugLog("StartInit", dbPath);
await relay.init(dbPath);
try {
if ("WebAssembly" in self) {
relay = new SqliteRelay();
} else {
relay = new InMemoryRelay();
}
await relay.init(dbPath);
} catch (e) {
console.error("Fallback to InMemoryRelay", e);
relay = new InMemoryRelay();
await relay.init(dbPath);
}
reply(msg.id, true);
});
break;
@ -174,4 +165,17 @@ globalThis.onmessage = async ev => {
reply(msg.id, "Unknown error")
}
}
}
if ("SharedWorkerGlobalScope" in globalThis) {
onconnect = (e) => {
const port = e.ports[0];
port.onmessage = (msg) => handleMsg(port, msg);
port.start();
}
}
if ("DedicatedWorkerGlobalScope" in globalThis) {
onmessage = e => {
handleMsg(self as DedicatedWorkerGlobalScope, e)
}
}

View File

@ -3277,6 +3277,7 @@ __metadata:
dependencies:
"@sqlite.org/sqlite-wasm": ^3.45.1-build1
"@types/debug": ^4.1.12
"@types/sharedworker": ^0.0.112
"@types/uuid": ^9.0.7
esbuild: ^0.20.1
eventemitter3: ^5.0.1
@ -3925,6 +3926,13 @@ __metadata:
languageName: node
linkType: hard
"@types/sharedworker@npm:^0.0.112":
version: 0.0.112
resolution: "@types/sharedworker@npm:0.0.112"
checksum: 4738b53b1c6bcc894790e7b5a1ad311f9639162fe94c0946d1f2609731dc43fdda42dbb80f41168ad4f397077a6c8db4048cd1c85b007da6a8ffe8df71cf8d78
languageName: node
linkType: hard
"@types/simple-peer@npm:*":
version: 9.11.8
resolution: "@types/simple-peer@npm:9.11.8"