refactor: always fallback to in-memory relay
This commit is contained in:
parent
098251fee3
commit
782feedae4
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user