init
This commit is contained in:
commit
ecfebf8de6
8 changed files with 2018 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
node_modules/
|
||||||
|
dist/main.js
|
8
README.md
Normal file
8
README.md
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# underBBS
|
||||||
|
|
||||||
|
underBBS is a platform-agnostic messaging and social media client
|
||||||
|
|
||||||
|
## building
|
||||||
|
|
||||||
|
1. `npm install`
|
||||||
|
2. `npx webpack`
|
29
dist/index.html
vendored
Normal file
29
dist/index.html
vendored
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<title>underBBS</title>
|
||||||
|
<meta name="viewport" content="width=device-width" />
|
||||||
|
<link rel="shortcut icon" href="./favicon.png"/>
|
||||||
|
<link href="./style.css" rel="stylesheet" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<noscript><div id="noscript_container">
|
||||||
|
JS app lol
|
||||||
|
</div>
|
||||||
|
</noscript>
|
||||||
|
<div id="map"></div>
|
||||||
|
|
||||||
|
<div id="err_wrapper" style='display:none'><button id="err_close" onclick="closeErr()">x</button><div id="err_div"></div></div>
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<ul>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
<main>
|
||||||
|
<div id="tabbar"></div>
|
||||||
|
<div id="tabcontent"></div>
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
<script src="./main.js" type="application/javascript"></script>
|
||||||
|
</html>
|
5
dist/main.js.LICENSE.txt
vendored
Normal file
5
dist/main.js.LICENSE.txt
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
/*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) */
|
||||||
|
|
||||||
|
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
||||||
|
|
||||||
|
/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
1882
package-lock.json
generated
Normal file
1882
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
18
package.json
Normal file
18
package.json
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
"name": "underbbs",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"description": "",
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"@nostr-dev-kit/ndk": "^2.7.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"webpack": "^5.91.0",
|
||||||
|
"webpack-cli": "^5.1.4"
|
||||||
|
}
|
||||||
|
}
|
53
src/adapter.js
Normal file
53
src/adapter.js
Normal file
|
@ -0,0 +1,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 }
|
||||||
|
|
21
src/index.js
Normal file
21
src/index.js
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
import { createAdapter, toNostrAdapter } from "./adapter";
|
||||||
|
|
||||||
|
let adapters = [];
|
||||||
|
|
||||||
|
function main() {
|
||||||
|
let settings = localStorage.getItem("settings");
|
||||||
|
if (settings != null) {
|
||||||
|
for (let s of settings.adapters) {
|
||||||
|
switch (s.protocol) {
|
||||||
|
case "nostr":
|
||||||
|
let a = toNostrAdapter(createAdapter(), s);
|
||||||
|
adapters.push(a);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log("no settings exist for this client");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
main();
|
Loading…
Reference in a new issue