mirror of
https://github.com/nbd-wtf/nostr-tools.git
synced 2025-12-08 16:28:49 +00:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bf55ad6b5a | ||
|
|
04a46b815c | ||
|
|
165ff44dff | ||
|
|
7bfd23af3c | ||
|
|
3d93ec8446 |
@@ -120,7 +120,7 @@ let event = await relay.get({
|
||||
ids: ['44e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245']
|
||||
})
|
||||
|
||||
await relay.close()
|
||||
relay.close()
|
||||
```
|
||||
|
||||
To use this on Node.js you first must install `websocket-polyfill` and import it:
|
||||
|
||||
10
build.js
10
build.js
@@ -1,5 +1,6 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const fs = require('fs')
|
||||
const esbuild = require('esbuild')
|
||||
|
||||
let common = {
|
||||
@@ -11,11 +12,16 @@ let common = {
|
||||
esbuild
|
||||
.build({
|
||||
...common,
|
||||
outfile: 'lib/nostr.esm.js',
|
||||
outfile: 'lib/esm/nostr.mjs',
|
||||
format: 'esm',
|
||||
packages: 'external'
|
||||
})
|
||||
.then(() => console.log('esm build success.'))
|
||||
.then(() => {
|
||||
const packageJson = JSON.stringify({ type: 'module' })
|
||||
fs.writeFileSync(`${__dirname}/lib/esm/package.json`, packageJson, 'utf8')
|
||||
|
||||
console.log('esm build success.')
|
||||
})
|
||||
|
||||
esbuild
|
||||
.build({
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
{
|
||||
"name": "nostr-tools",
|
||||
"version": "1.5.0",
|
||||
"version": "1.6.0",
|
||||
"description": "Tools for making a Nostr client.",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/fiatjaf/nostr-tools.git"
|
||||
},
|
||||
"main": "lib/nostr.cjs.js",
|
||||
"module": "lib/nostr.esm.js",
|
||||
"module": "lib/esm/nostr.mjs",
|
||||
"exports": {
|
||||
"import": "./lib/esm/nostr.mjs",
|
||||
"require": "./lib/nostr.cjs.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@noble/hashes": "1.0.0",
|
||||
"@noble/secp256k1": "^1.7.1",
|
||||
|
||||
@@ -19,8 +19,8 @@ let relays = [
|
||||
'wss://nostr.zebedee.cloud/'
|
||||
]
|
||||
|
||||
afterAll(async () => {
|
||||
await pool.close([
|
||||
afterAll(() => {
|
||||
pool.close([
|
||||
...relays,
|
||||
'wss://nostr-relay.untethr.me',
|
||||
'wss://offchain.pub',
|
||||
|
||||
8
pool.ts
8
pool.ts
@@ -12,13 +12,11 @@ export class SimplePool {
|
||||
this._conn = {}
|
||||
}
|
||||
|
||||
async close(relays: string[]): Promise<void> {
|
||||
await Promise.all(
|
||||
relays.map(async url => {
|
||||
close(relays: string[]): void {
|
||||
relays.map(url => {
|
||||
let relay = this._conn[normalizeURL(url)]
|
||||
if (relay) await relay.close()
|
||||
if (relay) relay.close()
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
async ensureRelay(url: string): Promise<Relay> {
|
||||
|
||||
@@ -15,8 +15,8 @@ beforeAll(() => {
|
||||
relay.connect()
|
||||
})
|
||||
|
||||
afterAll(async () => {
|
||||
await relay.close()
|
||||
afterAll(() => {
|
||||
relay.close()
|
||||
})
|
||||
|
||||
test('connectivity', () => {
|
||||
|
||||
11
relay.ts
11
relay.ts
@@ -10,7 +10,7 @@ export type Relay = {
|
||||
url: string
|
||||
status: number
|
||||
connect: () => Promise<void>
|
||||
close: () => Promise<void>
|
||||
close: () => void
|
||||
sub: (filters: Filter[], opts?: SubscriptionOptions) => Sub
|
||||
list: (filters: Filter[], opts?: SubscriptionOptions) => Promise<Event[]>
|
||||
get: (filter: Filter, opts?: SubscriptionOptions) => Promise<Event | null>
|
||||
@@ -37,7 +37,6 @@ export type SubscriptionOptions = {
|
||||
|
||||
export function relayInit(url: string): Relay {
|
||||
var ws: WebSocket
|
||||
var resolveClose: () => void
|
||||
var openSubs: {[id: string]: {filters: Filter[]} & SubscriptionOptions} = {}
|
||||
var listeners: {
|
||||
connect: Array<() => void>
|
||||
@@ -78,7 +77,6 @@ export function relayInit(url: string): Relay {
|
||||
}
|
||||
ws.onclose = async () => {
|
||||
listeners.disconnect.forEach(cb => cb())
|
||||
resolveClose && resolveClose()
|
||||
}
|
||||
|
||||
let incomingMessageQueue: string[] = []
|
||||
@@ -291,16 +289,13 @@ export function relayInit(url: string): Relay {
|
||||
}
|
||||
},
|
||||
connect,
|
||||
close(): Promise<void> {
|
||||
close(): void {
|
||||
listeners = {connect: [], disconnect: [], error: [], notice: []}
|
||||
subListeners = {}
|
||||
pubListeners = {}
|
||||
|
||||
if (ws.readyState > 1) return Promise.resolve()
|
||||
if (ws.readyState > 1) return
|
||||
ws.close()
|
||||
return new Promise<void>(resolve => {
|
||||
resolveClose = resolve
|
||||
})
|
||||
},
|
||||
get status() {
|
||||
return ws?.readyState ?? 3
|
||||
|
||||
Reference in New Issue
Block a user