From a7c0cf73976ff55ae9bb692dee036692578e04ad Mon Sep 17 00:00:00 2001 From: Kieran Date: Tue, 30 Jan 2024 20:32:43 +0000 Subject: [PATCH] chore: add worker-relay readme --- packages/worker-relay/README.md | 39 +++++++++++++++++++++++++++++ packages/worker-relay/package.json | 2 +- packages/worker-relay/src/worker.ts | 27 +------------------- 3 files changed, 41 insertions(+), 27 deletions(-) create mode 100644 packages/worker-relay/README.md diff --git a/packages/worker-relay/README.md b/packages/worker-relay/README.md new file mode 100644 index 00000000..a3517869 --- /dev/null +++ b/packages/worker-relay/README.md @@ -0,0 +1,39 @@ +## Worker Relay + +Worker relay is a Nostr relay built on `sqlite-wasm` + +`WorkerRelayInterface` is the class which accepts the URL of the worker script + +`sqlite-wasm` uses OFPS in order to persist the database. + +OPFS requires special headers to be present when serving your application. Read more about it [here](https://sqlite.org/wasm/doc/trunk/persistence.md#opfs) + +``` +Cross-Origin-Opener-Policy: same-origin +Cross-Origin-Embedder-Policy: require-corp +``` + +### Usage (Vite) +```typescript +import WorkerRelayPath from "@snort/worker-relay/dist/worker?worker&url"; +``` + +### Example +```typescript +const relay = new WorkerRelayInterface(WorkerRelayPath); + +// load sqlite database and run migrations +await relay.init(); + +// Query worker relay with regular nostr REQ command +const results = await relay.query(["REQ", "1", { kinds: [1], limit: 10 }]); + +// publish a new event to the relay +const myEvent = { + kind: 1, + content: "test", +}; +if (await relay.event(myEvent)) { + console.log("Success"); +} +``` \ No newline at end of file diff --git a/packages/worker-relay/package.json b/packages/worker-relay/package.json index 209efaf7..c64a45a4 100644 --- a/packages/worker-relay/package.json +++ b/packages/worker-relay/package.json @@ -1,6 +1,6 @@ { "name": "@snort/worker-relay", - "version": "1.0.0", + "version": "1.0.1", "description": "A nostr relay in a service worker", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/worker-relay/src/worker.ts b/packages/worker-relay/src/worker.ts index a1a18d1a..90f88b14 100644 --- a/packages/worker-relay/src/worker.ts +++ b/packages/worker-relay/src/worker.ts @@ -3,15 +3,7 @@ import { InMemoryRelay } from "./memory-relay"; import { WorkQueueItem, barrierQueue, processWorkQueue } from "./queue"; import { SqliteRelay } from "./sqlite-relay"; -import { NostrEvent, RelayHandler, ReqCommand, ReqFilter, WorkerMessage, eventMatchesFilter, unixNowMs } from "./types"; - -interface PortedFilter { - filters: Array; - port: MessagePort; -} - -// Active open subscriptions awaiting new events -const ActiveSubscriptions = new Map(); +import { NostrEvent, RelayHandler, ReqCommand, ReqFilter, WorkerMessage, unixNowMs } from "./types"; let relay: RelayHandler | undefined; @@ -77,23 +69,6 @@ globalThis.onmessage = async ev => { } else { relay = new InMemoryRelay(); } - - relay.on("event", evs => { - for (const pf of ActiveSubscriptions.values()) { - const pfSend = []; - for (const ev of evs) { - for (const fx of pf.filters) { - if (eventMatchesFilter(ev, fx)) { - pfSend.push(ev); - continue; - } - } - } - if (pfSend.length > 0) { - pf.port.postMessage(pfSend); - } - } - }); await relay.init(msg.args as string); reply(msg.id, true); });