0.13.1 • Published 17 days ago

@rust-nostr/nostr-sdk v0.13.1

Weekly downloads
-
License
MIT
Repository
github
Last release
17 days ago

Nostr SDK

Description

A high-level, Nostr client library.

If you're writing a typical Nostr client or bot, this is likely the crate you need.

However, the crate is designed in a modular way and depends on several other lower-level libraries. If you're attempting something more custom, you might be interested in these:

  • nostr: Implementation of Nostr protocol

This library should work on every JavaScript environment (nodejs, web, react native, ...).

Getting started

npm i @rust-nostr/nostr-sdk
const { Client, ClientBuilder, NostrSigner, Keys, Nip07Signer, Metadata, ZapDetails, ZapEntity, ZapType, PublicKey, loadWasmAsync } = require("@rust-nostr/nostr-sdk");

async function main() {
    // Load WASM 
    // if you are in a non async context, use loadWasmSync()
    await loadWasmAsync();

    // Compose client with private key
    let keys = Keys.generate(); // Random keys
    let signer = NostrSigner.keys(keys);
    let client = new Client(signer);

    // Compose client with NIP07 signer and WebLN zapper
    let nip07_signer = new Nip07Signer();
    let signer = NostrSigner.nip07(nip07_signer);
    let zapper = NostrZapper.webln(); // To use NWC: NostrZapper.nwc(uri); 
    let client = new ClientBuilder().signer(signer).zapper(zapper).build();

    // Add relays
    await client.addRelay("wss://relay.damus.io");

    // Add multiple relays at once
    await client.addRelays([
        "wss://nostr.oxtr.dev",
        "wss://relay.nostr.band",
    ]);

    await client.connect();

    let metadata = new Metadata()
        .name("username")
        .displayName("My Username")
        .about("Description")
        .picture("https://example.com/avatar.png")
        .banner("https://example.com/banner.png")
        .nip05("username@example.com")
        .lud16("yuki@getalby.com");
    
    await client.setMetadata(metadata);

    // Publish text note
    await client.publishTextNote("My first text note from Nostr SDK!", []);

    // Compose and publish custom event (automatically signed with `NostrSigner`)
    let builder = new EventBuilder(1111, "My custom event signer with the NostrSigner", []);
    await client.sendEventBuilder(builder);

    // Send a Zap non-zap (no zap recepit created)
    let publicKey = PublicKey.fromBech32("npub1drvpzev3syqt0kjrls50050uzf25gehpz9vgdw08hvex7e0vgfeq0eseet");
    let entity = ZapEntity.publicKey(publicKey);
    await client.zap(entity, 1000);

    // Send public zap
    let entity = ZapEntity.publicKey(publicKey);
    let details = new ZapDetails(ZapType.Public).message("Zap for Rust Nostr!");
    await client.zap(entity, 1000, details);
}

main();

More examples can be found at:

Supported NIPs

Look at https://github.com/rust-nostr/nostr/tree/master/crates/nostr#supported-nips

State

This library is in an ALPHA state, things that are implemented generally work but the API will change in breaking ways.

Donations

rust-nostr is free and open-source. This means we do not earn any revenue by selling it. Instead, we rely on your financial support. If you actively use any of the rust-nostr libs/software/services, then please donate.

License

This project is distributed under the MIT software license - see the LICENSE file for details

0.13.1

17 days ago

0.13.0

27 days ago

0.12.0

2 months ago

0.11.1

3 months ago

0.11.0

3 months ago

0.10.0

3 months ago

0.9.0

4 months ago

0.8.0

4 months ago

0.7.0

4 months ago

0.6.1

4 months ago

0.6.0

4 months ago

0.5.0

4 months ago

0.4.2

5 months ago

0.4.1

5 months ago

0.4.0

5 months ago

0.1.0

5 months ago