all repos — underbbs @ ecfebf8de6a0e9d10c213710cc40583b1c329c6b

decentralized social media client

src/adapter.js (raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import NDK, {NDKPrivateKeySigner} from "@nostr-dev-kit/ndk";

let ndk = null;

function createAdapter() {
  let adapter = {
    nickname: "",
    identity: null,
    protocol: null,
  };
  
  adatper.init = ()=>{};
  adapter.getInbox = ()=>{};
  adapter.getFollowers = ()=>{};
  adapter.getFollowing = ()=>{};
  adapter.publish = ()=>{};
  adapter.updateMetadata = ()=>{};
  adapter.getMetadata = ()=>{};
  
  return adapter;
}

function toNostrAdapter(adapter, settings) {
  adapter.identity = { privkey: settings.privkey };
  
  adapter.init = ()=> {
    if (!ndk) {
      ndk = new NDK({
       signer: new NDKPrivateKeySigner(settings.privatekey), 
       explicitRelayUrls: [ settings.relays ] 
      });
      ndk.connect();
    } else {
      ndk.activeUser = new NDKPrivateKeySigner(settings.privatekey);
      for (let i of settings.relays) {
        ndk.addExplicitRelay(i);
      }
    }
  };
  
  adapter.getInbox = () => {
    const sub = ndk.subscribe({ kinds: [1] }); // Get all kind:1s
    sub.on("event", (event) => console.log(event.content)); // Show the content
    sub.on("eose", () => console.log("All relays have reached the end of the event stream"));
    sub.on("close", () => console.log("Subscription closed"));
    setTimeout(() => sub.stop(), 10000); // Stop the subscription after 10 seconds
  };
  
  return adapter;
}

export default { createAdapter, toNostrAdapter }