/nostr-js

nodejs nostr library

Primary LanguageJavaScriptMIT LicenseMIT

nostr

nostr nodejs library

Example

const {RelayPool} = require('nostr')

const jb55 = "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245"
const damus = "wss://relay.damus.io"
const scsi = "wss://nostr-pub.wellorder.net"
const relays = [damus, scsi]

const pool = RelayPool(relays)

pool.on('open', relay => {
	relay.subscribe("subid", {limit: 2, kinds:[1], authors: [jb55]})
});

pool.on('eose', relay => {
	relay.close()
});

pool.on('event', (relay, sub_id, ev) => {
	console.log(ev)
});

API

RelayPool(urls, options)

Connect to a pool of relays. You should use this instead of Relay directly.

options: {reconnect: true|false}, defaults to {reconnect: true}

const relays = [`wss://relay1.com`, `wss://relay2.com`]
const pool = RelayPool(relays, {reconnect: false})

Relay(url, options)

Connect to a relay

options: {reconnect: true|false}, defaults to {reconnect: true}

const relay = Relay(`wss://relay.damus.io`, {reconnect: false})

async calculateId(event)

Calculate an id from an event

async signId(privkey, id)

Create a signature for an id

async verifyEvent(event)

Verify an event

Returns: true if valid signature, false otherwise

decryptDm(privkey, event)

Decrypt a direct message

Returns: decrypted content

encryptDM(privkey, pubkey, msg)

Encrypt a direct message

Returns: encrypted content

getPublicKey(privkey)

Get a public key from a privkey

async createDelegation(privkey, publisherPubkey, conditions)

Create a delegation. This gives publisherPubkey permission to create events on the privkeys behalf subject to conditions

privkey: authorizer private key

publisherKey: delegate/publisher pubkey

conditions: & separated set of event creation permissions that the delegate is required to adhere to when creating events

eg: created_at>1669303873&created_at<1674574279&kind=1,7

Returns:

{pubkey, publisherPubkey, conditions, token}

Where token is the delegation token, which is a signature from the authorizer of the delegation nostr:delegation:publisher_key:.

async createDelegationEvent(publisherPrivkey, event, delegation)

Create a delegated event from a delegation. This is an event posted on behalf of delegation.pubkey subject to delegation.conditions.

delegation: a delegation in the form returned by createDelegation

publisherPrivkey: the private key of the delegate, the entity posting on behalf of delegation.pubkey

event: The event to post as a delegate. The event pubkey will be overridden by the publisherPubkey. The delegation tag will be upserted into the tag list.

async signDelegationToken(privkey, unsignedToken)

Sign a delegation string in the form nostr:delegation:....

Returns: a signature string called the delegation token.