First commit

This commit is contained in:
Stephen Vanderwarker 2023-11-02 14:06:30 -04:00
commit e96aca88e5
8 changed files with 211 additions and 0 deletions

16
.gitea/ISSUE_TEMPLATE.md Normal file
View File

@ -0,0 +1,16 @@
## Expected Behavior
## Actual Behavior
## Steps to Reproduce the Problem
1.
2.
3.
## Specifications
- Node JS Version:
- Platform:
- NostrSMS Version:

View File

@ -0,0 +1,7 @@
Fixes #
## Proposed Changes
-
-
-

9
.gitignore vendored Normal file
View File

@ -0,0 +1,9 @@
node_modules
package-lock.json
config.ini
build/
.npmignore
npm-debug.log
.vs/
*.db
test.js

1
LICENSE Normal file
View File

@ -0,0 +1 @@
"THE BEER-WARE LICENSE" (Revision 42): <phk@FreeBSD.ORG> wrote this file. As long as you retain this notice you can do whatever you want with this stuff. If we meet some day, and you think this stuff is worth it, you can buy me a beer in return Poul-Henning Kamp

2
README.md Normal file
View File

@ -0,0 +1,2 @@
# NostrSMS
### That's right folks, we got SMS to Relay!

13
config.ini.dist Normal file
View File

@ -0,0 +1,13 @@
debug =
[xmpp]
host =
jid =
password =
[nostr]
pkhex =
[relays]
read =
write =

118
index.js Normal file
View File

@ -0,0 +1,118 @@
// initialize required packages
const sqlite3 = require('sqlite3');
const fs = require('fs');
const ini = require('ini');
const nostr = require('nostr-tools');
const wspf = require('websocket-polyfill');
const WebSocket = require('ws');
const xmpp = require('simple-xmpp');
var db = new sqlite3.Database('delegations.db');
let { bech32, bech32m } = require('bech32');
let letsCID;
let signedEvent;
if (fs.existsSync('./config.ini')) {
const config = ini.parse(fs.readFileSync('./config.ini', 'utf-8'));
let sk = config.nostr.pkhex;
let pk = nostr.getPublicKey(sk);
xmpp.on('online', function (data, to) {
console.log('Connected with JID: ' + config.xmpp.jid);
});
xmpp.on('chat', function (from, message) {
function debug() {
if (config.debug === '1') {
console.log('[DEBUG]');
console.log(message);
console.log(from);
};
}
if (message === '!help') {
xmpp.send(from, 'https://wiki.vanderwarker.family/doku.php?id=code:nostrsms:commands');
debug();
}
else if (message === "!auth"){
xmpp.send(from,"reauth (nip-26)");
const now = new Date();
const validUntil = now.getTime() + (30 * 24 * 60 * 60 * 1000);
const insertStmt = db.prepare('INSERT INTO users (pnum, token) VALUES (?, ?)');
insertStmt.run(from, validUntil);
insertStmt.finalize();
console.log('Data inserted successfully');
db.close((err) => {
if (err) {
return console.error('Error closing the database:', err.message);
}
console.log('Database connection closed.');
});
debug();
}
else {
async function main() {
const relay = nostr.relayInit(config.relays.write, WebSocket);
relay.on('connect', () => {
console.log(`connected to ${relay.url}`);
});
relay.on('error', () => {
console.log(`failed to connect to ${relay.url}`);
});
await relay.connect();
let event = {
kind: 1,
pubkey: pk,
created_at: Math.floor(Date.now() / 1000),
tags: [],
content: message,
};
const signedEvent = nostr.finishEvent(event, sk);
letsCID = signedEvent.id;
showSID(letsCID,pk);
await relay.publish(signedEvent);
relay.close();
}
main().catch((error) => {
console.error(error);
});
async function showSID(letsCID,pk) {
console.log(letsCID);
console.log(pk);
const event = {
id: letsCID,
relays: [config.relays.write],
author: pk,
kind: 1,
};
const encodedNEvent = nostr.nip19.neventEncode(event);
xmpp.send(from, "nostr:" + encodedNEvent);
debug();
}
}
});
xmpp.on('error', function (err) {
console.error(err);
});
xmpp.setPresence('chat', 'https://nostrsms.com');
xmpp.connect({
jid: config.xmpp.jid,
password: config.xmpp.password,
host: config.xmpp.host,
port: 5222
});
process.on('SIGINT', function() {
console.log("SigInt receieved. Shutdown inevitable!")
process.exit();
});
} else {
console.log("Please create a config.ini");
console.log("See https://wiki.vanderwarker.family/doku.php?id=code:nostrsms:install:start");
console.log("and choose your preferred install method.");
}

45
package.json Normal file
View File

@ -0,0 +1,45 @@
{
"name": "nostrsms",
"description": "A simple NodeJS bot that posts to Nostr from XMPP! 💜🫂",
"version": "0.0.1",
"keywords": [
"xmpp",
"sms",
"nostr"
],
"maintainers": [
{
"name": "Stephen Vanderwarker",
"email": "stephen@vanderwarker.family",
"web": "https://stephen.vanderwarker.family"
}
],
"dependencies": {
"@types/ws": "8.5.5",
"assert": "^2.1.0",
"bech32": "2.0.0",
"ini": "2.0.0",
"nostr-tools": "1.14.2",
"simple-xmpp": "1.3.0",
"sqlite3": "5.1.6",
"websocket-polyfill": "0.0.3",
"ws": "^8.14.0"
},
"bugs": {
"url": "https://git.vanderwarker.family/nostr/nostrsms/issues"
},
"repository": {
"type": "git",
"url": "https://git.vanderwarker.family/nostr/nostrsms.git"
},
"licenses": [
{
"type": "The MIT License",
"url": "http://www.opensource.org/licenses/mit-license.php"
}
],
"homepage": "https://wiki.vanderwarker.family/doku.php?id=code:nostrsms:start",
"scripts": {
"test": "echo \"No tests available. Please consider helping with a pull request!\" && exit 0"
}
}