diff --git a/packages/worker-relay/package.json b/packages/worker-relay/package.json index c64a45a4..de6cb275 100644 --- a/packages/worker-relay/package.json +++ b/packages/worker-relay/package.json @@ -1,6 +1,6 @@ { "name": "@snort/worker-relay", - "version": "1.0.1", + "version": "1.0.2", "description": "A nostr relay in a service worker", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -16,7 +16,7 @@ "dist" ], "dependencies": { - "@sqlite.org/sqlite-wasm": "^3.44.2-build3", + "@sqlite.org/sqlite-wasm": "^3.45.1-build1", "debug": "^4.3.4", "eventemitter3": "^5.0.1", "uuid": "^9.0.1" diff --git a/packages/worker-relay/src/interface.ts b/packages/worker-relay/src/interface.ts index 580cb967..ca7138e2 100644 --- a/packages/worker-relay/src/interface.ts +++ b/packages/worker-relay/src/interface.ts @@ -3,7 +3,6 @@ import { NostrEvent, OkResponse, ReqCommand, - ReqFilter, WorkerMessage, WorkerMessageCommand, } from "./types"; @@ -13,6 +12,9 @@ export class WorkerRelayInterface { #worker: Worker; #commandQueue: Map) => void> = new Map(); + // Command timeout + timeout: number = 30_000; + constructor(path: string) { this.#worker = new Worker(path, { type: "module" }); this.#worker.onmessage = e => { @@ -61,7 +63,7 @@ export class WorkerRelayInterface { return this.#workerRpc<[string, EventMetadata], void>("setEventMetadata", [id, meta]); } - #workerRpc(cmd: WorkerMessageCommand, args?: T) { + async #workerRpc(cmd: WorkerMessageCommand, args?: T) { const id = uuid(); const msg = { id, @@ -69,9 +71,17 @@ export class WorkerRelayInterface { args, } as WorkerMessage; this.#worker.postMessage(msg); - return new Promise(resolve => { + return await new Promise((resolve, reject) => { + const t = setTimeout(() => { + reject(new Error("Timeout")); + }, this.timeout); this.#commandQueue.set(id, (v, port) => { - const cmdReply = v as WorkerMessage; + clearTimeout(t); + const cmdReply = v as WorkerMessage; + if (cmdReply.args.error) { + reject(cmdReply.args.error); + return; + } resolve(cmdReply.args); }); }); diff --git a/packages/worker-relay/src/worker.ts b/packages/worker-relay/src/worker.ts index 2b31bd15..91c03b9f 100644 --- a/packages/worker-relay/src/worker.ts +++ b/packages/worker-relay/src/worker.ts @@ -151,7 +151,6 @@ globalThis.onmessage = async ev => { } } } catch (e) { - console.error(e); reply(msg.id, { error: JSON.stringify(e) }); } }; diff --git a/packages/worker-relay/tsconfig.json b/packages/worker-relay/tsconfig.json index 2e521e37..786ccd05 100644 --- a/packages/worker-relay/tsconfig.json +++ b/packages/worker-relay/tsconfig.json @@ -8,6 +8,7 @@ "module": "ESNext", "strict": true, "declaration": true, + "declarationMap": true, "inlineSourceMap": true, "outDir": "dist", "skipLibCheck": true diff --git a/yarn.lock b/yarn.lock index c176866e..00c29d04 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3023,7 +3023,7 @@ __metadata: languageName: unknown linkType: soft -"@snort/shared@^1.0.11, @snort/shared@^1.0.13, @snort/shared@^1.0.6, @snort/shared@workspace:*, @snort/shared@workspace:packages/shared": +"@snort/shared@^1.0.14, @snort/shared@^1.0.6, @snort/shared@workspace:*, @snort/shared@workspace:packages/shared": version: 0.0.0-use.local resolution: "@snort/shared@workspace:packages/shared" dependencies: @@ -3042,8 +3042,8 @@ __metadata: version: 0.0.0-use.local resolution: "@snort/system-react@workspace:packages/system-react" dependencies: - "@snort/shared": ^1.0.13 - "@snort/system": ^1.2.8 + "@snort/shared": ^1.0.14 + "@snort/system": ^1.2.12 "@types/react": ^18.2.14 react: ^18.2.0 typescript: ^5.2.2 @@ -3071,14 +3071,14 @@ __metadata: version: 0.0.0-use.local resolution: "@snort/system-web@workspace:packages/system-web" dependencies: - "@snort/shared": ^1.0.11 - "@snort/system": ^1.2.0 + "@snort/shared": ^1.0.14 + "@snort/system": ^1.2.11 dexie: ^3.2.4 typescript: ^5.2.2 languageName: unknown linkType: soft -"@snort/system@^1.0.21, @snort/system@^1.2.0, @snort/system@^1.2.8, @snort/system@workspace:*, @snort/system@workspace:packages/system": +"@snort/system@^1.0.21, @snort/system@^1.2.11, @snort/system@^1.2.12, @snort/system@workspace:*, @snort/system@workspace:packages/system": version: 0.0.0-use.local resolution: "@snort/system@workspace:packages/system" dependencies: @@ -3087,7 +3087,7 @@ __metadata: "@noble/hashes": ^1.3.2 "@peculiar/webcrypto": ^1.4.3 "@scure/base": ^1.1.2 - "@snort/shared": ^1.0.13 + "@snort/shared": ^1.0.14 "@stablelib/xchacha20": ^1.0.1 "@types/debug": ^4.1.8 "@types/jest": ^29.5.11 @@ -3114,7 +3114,7 @@ __metadata: version: 0.0.0-use.local resolution: "@snort/worker-relay@workspace:packages/worker-relay" dependencies: - "@sqlite.org/sqlite-wasm": ^3.44.2-build3 + "@sqlite.org/sqlite-wasm": ^3.45.1-build1 "@types/debug": ^4.1.12 "@types/uuid": ^9.0.7 debug: ^4.3.4 @@ -3131,12 +3131,12 @@ __metadata: languageName: node linkType: hard -"@sqlite.org/sqlite-wasm@npm:^3.44.2-build3": - version: 3.44.2-build3 - resolution: "@sqlite.org/sqlite-wasm@npm:3.44.2-build3" +"@sqlite.org/sqlite-wasm@npm:^3.45.1-build1": + version: 3.45.1-build1 + resolution: "@sqlite.org/sqlite-wasm@npm:3.45.1-build1" bin: sqlite-wasm: bin/index.js - checksum: 6df10114fcd5d41d61706496a4ad3ea303b71e844ccda6ded62009ec8f2b0f97547a1713b7a4c4e2e8b0691fca2d9127d0e099fff6802dd699bb7f3d0af2191c + checksum: 5d1beb4c120a4838fe2186af0c8a3c6d763629ce5fbfde482cbee2b96bc61da11b0296c83193b88755516a5d4c5773b4cbba2076457893825d4cc0c8b123f429 languageName: node linkType: hard