Skip to content

Commit bfa7655

Browse files
committed
js: use redb (WIP)
Signed-off-by: Yuki Kishimoto <[email protected]>
1 parent 7224f04 commit bfa7655

File tree

6 files changed

+41
-35
lines changed

6 files changed

+41
-35
lines changed

Cargo.lock

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bindings/nostr-sdk-js/Cargo.toml

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ crate-type = ["cdylib"]
1111
console_error_panic_hook = "0.1"
1212
js-sys.workspace = true
1313
nostr-connect.workspace = true
14-
nostr-sdk = { workspace = true, default-features = false, features = ["all-nips", "indexeddb", "webln"] }
14+
nostr-redb.workspace = true
15+
nostr-sdk = { workspace = true, default-features = false, features = ["all-nips", "webln"] }
1516
nwc.workspace = true
1617
tracing.workspace = true
1718
tracing-subscriber.workspace = true
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,26 @@
1-
const { loadWasmAsync, initLogger, LogLevel, SyncOptions, SyncDirection, Filter, Client, NostrDatabase } = require("../");
2-
3-
// NOTE: this code work only on browser (due to indexeddb)!
1+
const { loadWasmAsync, initLogger, LogLevel, SyncOptions, SyncDirection, Filter, Client, NostrDatabase, Kind } = require("../");
42

53
async function main() {
64
await loadWasmAsync();
75

86
initLogger(LogLevel.info());
97

10-
let db = await NostrDatabase.indexeddb("js-test");
8+
let db = await NostrDatabase.inMemory();
119
let client = Client.builder().database(db).build();
1210

1311
await client.addRelay("wss://relay.damus.io");
1412

1513
await client.connect();
1614

17-
let filter = new Filter().kind(1).limit(1000);
15+
let filter = new Filter().kind(new Kind(1)).limit(1000);
1816
let opts = new SyncOptions().direction(SyncDirection.Down);
1917
await client.sync(filter, opts);
18+
19+
let f = new Filter().limit(2);
20+
let events = await db.query([f]);
21+
events.forEach((e) => {
22+
console.log(e.asJson())
23+
})
2024
}
2125

2226
main();

bindings/nostr-sdk-js/examples/webapp/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"version": "0.1.0",
44
"private": true,
55
"dependencies": {
6-
"@rust-nostr/nostr-sdk": "^0.33.0",
6+
"@rust-nostr/nostr-sdk": "file:../../rust-nostr-nostr-sdk-0.37.0.tgz",
77
"react": "^18.2.0",
88
"react-dom": "^18.2.0",
99
"react-scripts": "5.0.1",

bindings/nostr-sdk-js/examples/webapp/src/App.js

+21-17
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
import React, { Component } from "react";
2-
import { ClientBuilder, NostrSigner, NostrZapper, Filter, LogLevel, NegentropyOptions, Nip07Signer, NostrDatabase, PublicKey, ZapDetails, ZapEntity, ZapType, initLogger, loadWasmAsync } from '@rust-nostr/nostr-sdk'
2+
import { ClientBuilder, EventBuilder, NostrSigner, NostrZapper, Filter, LogLevel, SyncOptions, Nip07Signer, NostrDatabase, PublicKey, ZapDetails, ZapEntity, ZapType, initLogger, loadWasmAsync } from '@rust-nostr/nostr-sdk'
33
import './App.css';
4-
import {EventBuilder} from "../../../pkg/nostr_sdk_js";
54

65
class App extends Component {
76
constructor() {
87
super();
9-
this.state = {
8+
this.state = {
109
public_key: null,
1110
nip07_signer: null,
1211
client: null
@@ -19,7 +18,8 @@ class App extends Component {
1918

2019
// Try to initialize log
2120
try {
22-
initLogger(LogLevel.info());
21+
initLogger(LogLevel.debug());
22+
console.log("Logger initialized");
2323
} catch (error) {}
2424
}
2525

@@ -29,33 +29,37 @@ class App extends Component {
2929
let nip07_signer = new Nip07Signer();
3030
let signer = NostrSigner.nip07(nip07_signer);
3131
let zapper = await NostrZapper.webln();
32-
let db = await NostrDatabase.indexeddb("nostr-sdk-webapp-example");
32+
33+
console.log("Opening database...");
34+
let db = await NostrDatabase.web("nostr-sdk-webapp-example-2");
35+
console.log("Database opened.");
36+
3337
let client = new ClientBuilder().signer(signer).zapper(zapper).database(db).build();
3438

3539
let public_key = await nip07_signer.getPublicKey();
36-
40+
3741
// Add relays
3842
await client.addRelay("wss://relay.damus.io");
3943
await client.addRelay("wss://nos.lol");
4044
await client.addRelay("wss://nostr.oxtr.dev");
41-
45+
4246
// Connect to relays
4347
await client.connect();
44-
48+
4549
// Save client to state
4650
this.setState({ client, nip07_signer, public_key });
4751
} catch (error) {
48-
console.log(error)
52+
console.log(error)
4953
}
5054
};
5155

5256
handleReconcile = async () => {
5357
try {
5458
let filter = new Filter().author(this.state.public_key);
55-
let opts = new NegentropyOptions();
59+
let opts = new SyncOptions();
5660
await this.state.client.sync(filter, opts);
5761
} catch (error) {
58-
console.log(error)
62+
console.log(error)
5963
}
6064
}
6165

@@ -66,29 +70,29 @@ class App extends Component {
6670
console.time("query");
6771
let events = await database.query([filter]);
6872
console.timeEnd("query");
69-
console.log("Got", events.length, "events");
73+
console.log("Got", events.len(), "events");
7074
} catch (error) {
7175
console.log(error)
7276
}
7377
}
7478

7579
handlePublishTextNote = async () => {
7680
try {
77-
let builder = EventBuilder.textNote("Test from rust-nostr JavaScript bindings with NIP07 signer!", []);
81+
let builder = EventBuilder.textNote("Test from rust-nostr JavaScript bindings with NIP07 signer!");
7882
await this.state.client.sendEventBuilder(builder);
7983
} catch (error) {
80-
console.log(error)
84+
console.log(error)
8185
}
8286
};
8387

8488
handleZap = async () => {
8589
try {
86-
let pk = PublicKey.fromBech32("npub1drvpzev3syqt0kjrls50050uzf25gehpz9vgdw08hvex7e0vgfeq0eseet");
90+
let pk = PublicKey.parse("npub1drvpzev3syqt0kjrls50050uzf25gehpz9vgdw08hvex7e0vgfeq0eseet");
8791
let entity = ZapEntity.publicKey(pk);
8892
let details = new ZapDetails(ZapType.Public).message("Zap for Rust Nostr!");
8993
await this.state.client.zap(entity, 1000, details);
9094
} catch (error) {
91-
console.log(error)
95+
console.log(error)
9296
}
9397
};
9498

@@ -98,7 +102,7 @@ class App extends Component {
98102
this.setState({ client: null });
99103
console.log("Logout done");
100104
} catch (error) {
101-
console.log(error)
105+
console.log(error)
102106
}
103107
};
104108

bindings/nostr-sdk-js/src/database/mod.rs

+7-11
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use std::ops::Deref;
66
use std::sync::Arc;
77

88
use js_sys::Array;
9+
use nostr_redb::NostrRedb;
910
use nostr_sdk::prelude::*;
1011
use wasm_bindgen::prelude::*;
1112

@@ -75,22 +76,17 @@ impl From<Arc<dyn NostrDatabase>> for JsNostrDatabase {
7576

7677
#[wasm_bindgen(js_class = NostrDatabase)]
7778
impl JsNostrDatabase {
78-
/// Open/Create database with **unlimited** capacity
79-
pub async fn indexeddb(name: &str) -> Result<JsNostrDatabase> {
80-
let db = WebDatabase::open(name).await.map_err(into_err)?;
79+
/// Open (or create) persistent web database
80+
pub async fn web(name: &str) -> Result<JsNostrDatabase> {
81+
let db = NostrRedb::web(name).await.map_err(into_err)?;
8182
Ok(Self {
8283
inner: db.into_nostr_database(),
8384
})
8485
}
8586

86-
/// Open/Create database with **limited** capacity
87-
#[wasm_bindgen(js_name = indexeddbBounded)]
88-
pub async fn indexeddb_bounded(name: &str, max_capacity: u64) -> Result<JsNostrDatabase> {
89-
let db = Arc::new(
90-
WebDatabase::open_bounded(name, max_capacity as usize)
91-
.await
92-
.map_err(into_err)?,
93-
);
87+
#[wasm_bindgen(js_name = inMemory)]
88+
pub fn in_memory() -> Result<JsNostrDatabase> {
89+
let db = NostrRedb::in_memory().map_err(into_err)?;
9490
Ok(Self {
9591
inner: db.into_nostr_database(),
9692
})

0 commit comments

Comments
 (0)