refactor: always fallback to in-memory relay
This commit is contained in:
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@snort/worker-relay",
|
"name": "@snort/worker-relay",
|
||||||
"version": "1.0.7",
|
"version": "1.0.8",
|
||||||
"description": "A nostr relay in a service worker",
|
"description": "A nostr relay in a service worker",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"types": "dist/index.d.ts",
|
"types": "dist/index.d.ts",
|
||||||
@ -24,8 +24,9 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/debug": "^4.1.12",
|
"@types/debug": "^4.1.12",
|
||||||
|
"@types/sharedworker": "^0.0.112",
|
||||||
"@types/uuid": "^9.0.7",
|
"@types/uuid": "^9.0.7",
|
||||||
"esbuild": "^0.20.1",
|
"esbuild": "^0.20.1",
|
||||||
"typescript": "^5.2.2"
|
"typescript": "^5.2.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,14 +9,6 @@ import { getForYouFeed } from "./forYouFeed";
|
|||||||
|
|
||||||
let relay: RelayHandler | undefined;
|
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
|
// Event inserter queue
|
||||||
let eventWriteQueue: Array<NostrEvent> = [];
|
let eventWriteQueue: Array<NostrEvent> = [];
|
||||||
async function insertBatch() {
|
async function insertBatch() {
|
||||||
@ -50,21 +42,15 @@ try {
|
|||||||
console.error(e);
|
console.error(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function tryOpfs() {
|
const handleMsg = async (port: MessagePort | DedicatedWorkerGlobalScope, ev: MessageEvent) => {
|
||||||
try {
|
async function reply<T>(id: string, obj?: T) {
|
||||||
await navigator.storage.getDirectory();
|
port.postMessage({
|
||||||
return true;
|
id,
|
||||||
} catch {
|
cmd: "reply",
|
||||||
// ignore
|
args: obj,
|
||||||
|
} as WorkerMessage<T>);
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
globalThis.onclose = () => {
|
|
||||||
relay?.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
globalThis.onmessage = async ev => {
|
|
||||||
const msg = ev.data as WorkerMessage<any>;
|
const msg = ev.data as WorkerMessage<any>;
|
||||||
try {
|
try {
|
||||||
switch (msg.cmd) {
|
switch (msg.cmd) {
|
||||||
@ -75,14 +61,19 @@ globalThis.onmessage = async ev => {
|
|||||||
}
|
}
|
||||||
case "init": {
|
case "init": {
|
||||||
await barrierQueue(cmdQueue, async () => {
|
await barrierQueue(cmdQueue, async () => {
|
||||||
if ("WebAssembly" in globalThis && (await tryOpfs())) {
|
|
||||||
relay = new SqliteRelay();
|
|
||||||
} else {
|
|
||||||
relay = new InMemoryRelay();
|
|
||||||
}
|
|
||||||
const [dbPath] = msg.args as Array<string>;
|
const [dbPath] = msg.args as Array<string>;
|
||||||
debugLog("StartInit", dbPath);
|
try {
|
||||||
await relay.init(dbPath);
|
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);
|
reply(msg.id, true);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
@ -174,4 +165,17 @@ globalThis.onmessage = async ev => {
|
|||||||
reply(msg.id, "Unknown error")
|
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:
|
dependencies:
|
||||||
"@sqlite.org/sqlite-wasm": ^3.45.1-build1
|
"@sqlite.org/sqlite-wasm": ^3.45.1-build1
|
||||||
"@types/debug": ^4.1.12
|
"@types/debug": ^4.1.12
|
||||||
|
"@types/sharedworker": ^0.0.112
|
||||||
"@types/uuid": ^9.0.7
|
"@types/uuid": ^9.0.7
|
||||||
esbuild: ^0.20.1
|
esbuild: ^0.20.1
|
||||||
eventemitter3: ^5.0.1
|
eventemitter3: ^5.0.1
|
||||||
@ -3925,6 +3926,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
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:*":
|
"@types/simple-peer@npm:*":
|
||||||
version: 9.11.8
|
version: 9.11.8
|
||||||
resolution: "@types/simple-peer@npm:9.11.8"
|
resolution: "@types/simple-peer@npm:9.11.8"
|
||||||
|
Reference in New Issue
Block a user