Skip to content

Commit f37837a

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

File tree

6 files changed

+30
-23
lines changed

6 files changed

+30
-23
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bindings/nostr-sdk-js/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ crate-type = ["cdylib"]
1111
console_error_panic_hook = "0.1"
1212
js-sys.workspace = true
1313
nostr-connect.workspace = true
14+
nostr-redb.workspace = true
1415
nostr-sdk = { workspace = true, default-features = false, features = ["all-nips", "indexeddb"] }
1516
nwc.workspace = true
1617
tracing.workspace = true
Lines changed: 9 additions & 5 deletions
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ class App extends Component {
1818

1919
// Try to initialize log
2020
try {
21-
initLogger(LogLevel.info());
21+
initLogger(LogLevel.debug());
22+
console.log("Logger initialized");
2223
} catch (error) {}
2324
}
2425

@@ -28,7 +29,11 @@ class App extends Component {
2829
let nip07_signer = new BrowserSigner();
2930
let signer = NostrSigner.nip07(nip07_signer);
3031
let zapper = await NostrZapper.webln();
31-
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+
3237
let client = new ClientBuilder().signer(signer).zapper(zapper).database(db).build();
3338

3439
let public_key = await nip07_signer.getPublicKey();
@@ -51,7 +56,7 @@ class App extends Component {
5156
handleReconcile = async () => {
5257
try {
5358
let filter = new Filter().author(this.state.public_key);
54-
let opts = new NegentropyOptions();
59+
let opts = new SyncOptions();
5560
await this.state.client.sync(filter, opts);
5661
} catch (error) {
5762
console.log(error)
@@ -65,15 +70,15 @@ class App extends Component {
6570
console.time("query");
6671
let events = await database.query([filter]);
6772
console.timeEnd("query");
68-
console.log("Got", events.length, "events");
73+
console.log("Got", events.len(), "events");
6974
} catch (error) {
7075
console.log(error)
7176
}
7277
}
7378

7479
handlePublishTextNote = async () => {
7580
try {
76-
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!");
7782
await this.state.client.sendEventBuilder(builder);
7883
} catch (error) {
7984
console.log(error)
@@ -82,7 +87,7 @@ class App extends Component {
8287

8388
handleZap = async () => {
8489
try {
85-
let pk = PublicKey.fromBech32("npub1drvpzev3syqt0kjrls50050uzf25gehpz9vgdw08hvex7e0vgfeq0eseet");
90+
let pk = PublicKey.parse("npub1drvpzev3syqt0kjrls50050uzf25gehpz9vgdw08hvex7e0vgfeq0eseet");
8691
let entity = ZapEntity.publicKey(pk);
8792
let details = new ZapDetails(ZapType.Public).message("Zap for Rust Nostr!");
8893
await this.state.client.zap(entity, 1000, details);

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

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use std::ops::Deref;
66
use std::sync::Arc;
77

8+
use nostr_redb::NostrRedb;
89
use nostr_sdk::prelude::*;
910
use wasm_bindgen::prelude::*;
1011

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

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

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

0 commit comments

Comments
 (0)