mirror of
https://github.com/nbd-wtf/nostr-tools.git
synced 2025-12-08 16:28:49 +00:00
3630d377e568d73c1c25b9ccef86b94a6a6c26a9
nostr-tools
Tools for developing Nostr clients.
Usage
Generating a private key and a public key
import { generatePrivateKey, getPublicKey } from 'nostr-tools'
let sk = generatePrivateKey() # `sk` is a hex string
let pk = getPublicKey(sk) # `pk` is a hex string
Creating, signing and verifying events
const {
validateEvent,
verifySignature,
signEvent,
getEventHash,
getPublicKey
} = require('./cjs')
let event = {
kind: 1,
created_at: Math.floor(Date.now() / 1000),
tags: [],
content: 'hello'
}
event.id = getEventHash(event.id)
event.pubkey = getPublicKey(privateKey)
event.sig = await signEvent(event, privateKey)
let ok = validateEvent(event)
let veryOk = await verifySignature(event)
Validating events received from relays
const {matchFilters} = require('./cjs')
let event = {kind: 1, pubkey: 'abcdef...', ...otherProperties}
let ok = matchFilters(
[
{
kinds: [0, 1, 3, 6],
authors: ['abcdef...', '123456...']
}
],
event
)
Encrypting and decrypting direct messages
const {nip04, getPublicKey, generatePrivateKey} = require('./cjs')
// sender
let sk1 = generatePrivateKey()
let pk1 = getPublicKey(sk1)
// receiver
let sk2 = generatePrivateKey()
let pk2 = getPublicKey(sk2)
// on the sender side
let message = 'hello'
let ciphertext = nip04.encrypt(sk1, pk2, 'hello')
let event = {
kind: 4,
pubkey: pk1,
tags: [['p', pk2]],
content: ciphertext,
...otherProperties
}
sendEvent(event)
// on the receiver side
sub.on('event', (event) => {
let sender = event.tags.find(([k, v]) => k === 'p' && && v && v !== '')[1]
pk1 === sender
let plaintext = nip04.decrypt(sk2, pk1, event.content)
})
Please consult the tests or the source code for more information that isn't available here.
Using from the browser (if you don't want to use a bundler)
<script src="https://unpkg.com/nostr-tools/standalone/index.js"></script>
<script>
window.NostrTools.generatePrivateKey('...') // and so on
</script>
License
Public domain.
Languages
TypeScript
99.4%
JavaScript
0.3%
Just
0.2%
Dockerfile
0.1%