First commit
This commit is contained in:
commit
e96aca88e5
16
.gitea/ISSUE_TEMPLATE.md
Normal file
16
.gitea/ISSUE_TEMPLATE.md
Normal file
|
@ -0,0 +1,16 @@
|
|||
## Expected Behavior
|
||||
|
||||
|
||||
## Actual Behavior
|
||||
|
||||
|
||||
## Steps to Reproduce the Problem
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
## Specifications
|
||||
|
||||
- Node JS Version:
|
||||
- Platform:
|
||||
- NostrSMS Version:
|
7
.gitea/PULL_REQUEST_TEMPLATE.md
Normal file
7
.gitea/PULL_REQUEST_TEMPLATE.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
Fixes #
|
||||
|
||||
## Proposed Changes
|
||||
|
||||
-
|
||||
-
|
||||
-
|
9
.gitignore
vendored
Normal file
9
.gitignore
vendored
Normal 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
1
LICENSE
Normal 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
2
README.md
Normal file
|
@ -0,0 +1,2 @@
|
|||
# NostrSMS
|
||||
### That's right folks, we got SMS to Relay!
|
13
config.ini.dist
Normal file
13
config.ini.dist
Normal file
|
@ -0,0 +1,13 @@
|
|||
debug =
|
||||
|
||||
[xmpp]
|
||||
host =
|
||||
jid =
|
||||
password =
|
||||
|
||||
[nostr]
|
||||
pkhex =
|
||||
|
||||
[relays]
|
||||
read =
|
||||
write =
|
118
index.js
Normal file
118
index.js
Normal 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
45
package.json
Normal 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"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user