aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2024-08-26 22:18:56 -0700
committerAdam Soltys <[email protected]>2024-08-26 22:53:11 -0700
commit4efa82b36b74c633681ed831d6f567ae5ab08c3b (patch)
tree5c79e477a733e82f44185488e9fdc30653aacff9
parentfe62cadd6fb4a7e49f7d59401fc74ae0411e32a7 (diff)
downloadcoinos-server-4efa82b36b74c633681ed831d6f567ae5ab08c3b.tar.gz
coinos-server-4efa82b36b74c633681ed831d6f567ae5ab08c3b.zip
fix some ts issues
-rw-r--r--index.ts11
-rw-r--r--lib/invoices.ts2
-rw-r--r--lib/liquid.ts1
-rw-r--r--lib/payments.ts6
-rw-r--r--routes/ecash.ts35
-rw-r--r--routes/invoices.ts20
-rw-r--r--routes/items.ts44
-rw-r--r--routes/lnurl.ts39
-rw-r--r--routes/payments.ts98
-rw-r--r--routes/requests.js.map1
-rw-r--r--routes/requests.ts85
-rw-r--r--routes/shopify.ts6
-rw-r--r--routes/users.ts123
-rw-r--r--tsconfig.json12
14 files changed, 267 insertions, 216 deletions
diff --git a/index.ts b/index.ts
index a0f35738..8ebcb1d0 100644
--- a/index.ts
+++ b/index.ts
@@ -17,11 +17,9 @@ import invoices from "$routes/invoices";
import items from "$routes/items";
import users from "$routes/users";
import payments from "$routes/payments";
-import requests from "$routes/requests";
import shopify from "$routes/shopify";
try {
- // setTimeout(fillPool, 1000);
getLocations();
getFx();
catchUp();
@@ -98,11 +96,6 @@ app.post("/items", auth, items.create);
app.post("/items/delete", auth, items.del);
app.post("/items/sort", auth, items.sort);
-app.get("/request/:id", auth, requests.get);
-app.get("/requests", auth, requests.list);
-app.post("/requests", auth, requests.create);
-app.post("/requests/delete", auth, requests.destroy);
-
app.post("/shopify/:id", shopify);
app.post("/hidepay", admin, users.hidepay);
@@ -114,8 +107,8 @@ app.post("/claim", auth, ecash.claim);
app.post("/mint", auth, ecash.mint);
app.post("/melt", auth, ecash.melt);
-let host = process.env["HOST"] || "0.0.0.0";
-let port = process.env["PORT"] || 3119;
+let host: string = process.env["HOST"] || "0.0.0.0";
+let port: number = parseInt(process.env["PORT"]) || 3119;
app.listen({ host, port });
diff --git a/lib/invoices.ts b/lib/invoices.ts
index 2f1225e7..04e1200b 100644
--- a/lib/invoices.ts
+++ b/lib/invoices.ts
@@ -11,7 +11,7 @@ import lq from "$lib/liquid";
import bc from "$lib/bitcoin";
import ln from "$lib/ln";
-export let generate = async ({ invoice, user, sender }) => {
+export let generate = async ({ invoice, user, sender = undefined }) => {
let {
bolt11,
currency,
diff --git a/lib/liquid.ts b/lib/liquid.ts
index 49bd838d..ec8ec7cb 100644
--- a/lib/liquid.ts
+++ b/lib/liquid.ts
@@ -1,4 +1,3 @@
import config from "$config";
import rpc from "$lib/rpc";
-console.log("LIQ", config.liquid);
export default rpc(config.liquid);
diff --git a/lib/payments.ts b/lib/payments.ts
index 92e17839..797b3a97 100644
--- a/lib/payments.ts
+++ b/lib/payments.ts
@@ -3,7 +3,7 @@ import config from "$config";
import { emit } from "$lib/sockets";
import { v4 } from "uuid";
import { notify } from "$lib/notifications";
-import { db, g, s, t } from "$lib/db";
+import { db, g, s } from "$lib/db";
import { l, err, warn } from "$lib/logging";
import {
f,
@@ -11,9 +11,7 @@ import {
fail,
fiat,
getInvoice,
- getUser,
sleep,
- wait,
SATS,
sats,
formatReceipt,
@@ -54,7 +52,7 @@ export let debit = async ({
// if (!user.unlimited && amount > 1000000)
// fail(`⚡️${amount} exceeds max withdrawal of ⚡️1,000,000`);
let ref;
- let { id: uid, currency, username } = user;
+ let { id: uid, currency } = user;
let rates = await g('rates');
if (!rate) rate = rates[currency];
diff --git a/routes/ecash.ts b/routes/ecash.ts
index 8c2684b1..1f9e48ea 100644
--- a/routes/ecash.ts
+++ b/routes/ecash.ts
@@ -1,16 +1,18 @@
import { g, s, db } from "$lib/db";
import { claim, mint, check } from "$lib/ecash";
-import { bail } from "$lib/utils";
+import { bail, fail } from "$lib/utils";
import { debit, credit, types } from "$lib/payments";
import { v4 } from "uuid";
-import { l, err, warn } from "$lib/logging";
+import { l, err } from "$lib/logging";
import { emit } from "$lib/sockets";
-import store from "$lib/store";
let { ecash: type } = types;
export default {
- async save({ body: { token } }, res) {
+ async save(req, res) {
+ let {
+ body: { token },
+ } = req;
try {
let id = v4();
await s(`cash:${id}`, token);
@@ -21,7 +23,10 @@ export default {
}
},
- async get({ params: { id } }, res) {
+ async get(req, res) {
+ let {
+ params: { id },
+ } = req;
try {
let token = await g(`cash:${id}`);
let status = await check(token);
@@ -32,7 +37,11 @@ export default {
}
},
- async claim({ body: { token }, user }, res) {
+ async claim(req, res) {
+ let {
+ body: { token },
+ user,
+ } = req;
try {
let amount = await claim(token);
@@ -58,7 +67,11 @@ export default {
}
},
- async mint({ body: { amount }, user }, res) {
+ async mint(req, res) {
+ let {
+ body: { amount },
+ user,
+ } = req;
try {
let id = v4();
let hash = v4();
@@ -76,13 +89,17 @@ export default {
}
},
- async melt({ body: { amount, bolt11: hash, preimage }, user }, res) {
+ async melt(req, res) {
+ let {
+ body: { amount, bolt11: hash, preimage },
+ user,
+ } = req;
try {
amount = Math.round(amount / 1000);
let ref = preimage;
let { lightning: type } = types;
if (user.username !== "mint") fail("unauthorized");
- let { id: uid, currency, username } = user;
+ let { id: uid, currency } = user;
let ourfee = await db.debit(
`balance:${uid}`,
`credit:${type}:${uid}`,
diff --git a/routes/invoices.ts b/routes/invoices.ts
index 5cc60e05..5e786dd7 100644
--- a/routes/invoices.ts
+++ b/routes/invoices.ts
@@ -1,13 +1,12 @@
-import { g, s } from "$lib/db";
+import { g } from "$lib/db";
import { generate } from "$lib/invoices";
-import { bail, fail, pick } from "$lib/utils";
-import whitelist from "$lib/whitelist";
-import got from "got";
-import config from "$config";
-import ln from "$lib/ln";
+import { bail, pick } from "$lib/utils";
export default {
- async get({ params: { id } }, res) {
+ async get(req, res) {
+ let {
+ params: { id },
+ } = req;
let invoice = await g(`invoice:${id}`);
if (typeof invoice === "string") invoice = await g(`invoice:${invoice}`);
@@ -28,7 +27,12 @@ export default {
else res.code(500).send("invoice not found");
},
- async create({ body: { invoice, user }, user: sender }, res) {
+ async create(req, res) {
+ let {
+ body: { invoice, user },
+ user: sender,
+ } = req;
+
try {
res.send(await generate({ invoice, user, sender }));
} catch (e) {
diff --git a/routes/items.ts b/routes/items.ts
index 9b6314fa..a7586a69 100644
--- a/routes/items.ts
+++ b/routes/items.ts
@@ -3,7 +3,10 @@ import { v4 } from "uuid";
import { bail, fail } from "$lib/utils";
export default {
- async list({ params: { id: uid } }, res) {
+ async list(req, res) {
+ let {
+ params: { id: uid },
+ } = req;
let items = [];
for (let id of await db.lRange(`${uid}:items`, 0, -1)) {
let item = await g(`item:${id}`);
@@ -14,7 +17,10 @@ export default {
res.send(items);
},
- async get({ params: { id } }, res) {
+ async get(req, res) {
+ let {
+ params: { id },
+ } = req;
try {
let item = await g(`item:${id}`);
if (!item) fail("Item not found");
@@ -24,25 +30,33 @@ export default {
}
},
- async create({ body: item, user: { id } }, res) {
+ async create(req, res) {
+ let {
+ body: item,
+ user: { id },
+ } = req;
try {
- if (!item.id) {
- item.id = v4();
- await db.lPush(`${id}:items`, item.id);
- }
+ if (!item.id) {
+ item.id = v4();
+ await db.lPush(`${id}:items`, item.id);
+ }
- if (!parseFloat(item.price)) fail("Invalid price");
- item.name = item.name.replace(/[^a-zA-Z0-9 ]/g, "");
+ if (!parseFloat(item.price)) fail("Invalid price");
+ item.name = item.name.replace(/[^a-zA-Z0-9 ]/g, "");
- await s(`item:${item.id}`, item);
+ await s(`item:${item.id}`, item);
- res.send(item);
+ res.send(item);
} catch (e) {
bail(res, e.message);
}
},
- async del({ body: { item }, user: { id } }, res) {
+ async del(req, res) {
+ let {
+ body: { item },
+ user: { id },
+ } = req;
try {
let n = await db.lRem(`${id}:items`, 0, item.id);
if (n) db.del(`item:${item.id}`);
@@ -54,7 +68,11 @@ export default {
}
},
- async sort({ body: { items }, user: { id } }, res) {
+ async sort(req, res) {
+ let {
+ body: { items },
+ user: { id },
+ } = req;
try {
await db.del(`${id}:items`);
diff --git a/routes/lnurl.ts b/routes/lnurl.ts
index 462127ac..5a9c0990 100644
--- a/routes/lnurl.ts
+++ b/routes/lnurl.ts
@@ -1,24 +1,21 @@
-import migrate from "$lib/migrate";
import { g, s } from "$lib/db";
-import { l, err, warn } from "$lib/logging";
+import { err, warn } from "$lib/logging";
import { bail, getUser, fail } from "$lib/utils";
import { v4 } from "uuid";
import got from "got";
import { generate } from "$lib/invoices";
import { bech32 } from "bech32";
-import { fields, pick } from "$lib/utils";
import { types } from "$lib/payments";
-import crypto from "crypto";
import { COINOS_PUBKEY } from "$lib/nostr";
-import config from "$config";
-let { admin } = config;
-
let { URL } = process.env;
let host = URL.split("/").at(-1);
export default {
- async encode({ query: { address } }, res) {
+ async encode(req, res) {
+ let {
+ query: { address },
+ } = req;
let [name, domain] = address.split("@");
let url = `https://${domain}/.well-known/lnurlp/${name}`;
@@ -35,7 +32,10 @@ export default {
res.send(enc);
},
- async decode({ query: { text } }, res) {
+ async decode(req, res) {
+ let {
+ query: { text },
+ } = req;
try {
let url = Buffer.from(
bech32.fromWords(bech32.decode(text, 20000).words),
@@ -47,13 +47,11 @@ export default {
}
},
- async lnurlp(
- {
+ async lnurlp(req, res) {
+ let {
params: { username },
query: { minSendable = 1000, maxSendable = 100000000000 },
- },
- res,
- ) {
+ } = req;
try {
let { id: uid } = await getUser(username);
@@ -80,9 +78,11 @@ export default {
}
},
- async lnurlw({ params: { k1, pr } }, res) {},
-
- async lnurl({ params: { id }, query: { amount, nostr } }, res) {
+ async lnurl(req, res) {
+ let {
+ params: { id },
+ query: { amount, nostr },
+ } = req;
try {
let uid = await g(`lnurl:${id}`);
let user = await getUser(uid);
@@ -122,7 +122,10 @@ export default {
}
},
- async verify({ params: { id } }, res) {
+ async verify(req, res) {
+ let {
+ params: { id },
+ } = req;
let inv = await g(`invoice:${id}`);
if (!inv) return res.send({ status: "ERROR", reason: "Not found" });
diff --git a/routes/payments.ts b/routes/payments.ts
index 1ae87916..38215832 100644
--- a/routes/payments.ts
+++ b/routes/payments.ts
@@ -21,17 +21,16 @@ import { mqtt1, mqtt2 } from "$lib/mqtt";
import got from "got";
import api from "$lib/api";
-import lq from "$lib/liquid";
-import bc from "$lib/bitcoin";
import ln from "$lib/ln";
export default {
- async info({ body, user }, res) {
+ async info(_, res) {
res.send(await ln.getinfo());
},
- async create({ body, user }, res) {
- let { amount, hash, maxfee, fund, memo, payreq, rate, username } = body;
+ async create(req, res) {
+ let { body, user } = req;
+ let { amount, hash, maxfee, fund, memo, payreq } = body;
let balance = await g(`balance:${user.id}`);
try {
@@ -71,7 +70,12 @@ export default {
}
},
- async list({ user: { id }, query: { start, end, limit, offset } }, res) {
+ async list(req, res) {
+ let {
+ user: { id },
+ query: { start, end, limit, offset },
+ } = req;
+
if (limit) limit = parseInt(limit);
offset = parseInt(offset) || 0;
@@ -129,14 +133,21 @@ export default {
res.send({ payments, count, incoming, outgoing });
},
- async get({ params: { hash } }, res) {
+ async get(req, res) {
+ let {
+ params: { hash },
+ } = req;
let p = await g(`payment:${hash}`);
if (typeof p === "string") p = await g(`payment:${p}`);
if (p.type === types.internal) p.with = await g(`user:${p.ref}`);
res.send(p);
},
- async parse({ body: { payreq }, user }, res) {
+ async parse(req, res) {
+ let {
+ body: { payreq },
+ user,
+ } = req;
try {
let hour = 1000 * 60 * 60;
let nodes = await g("nodes");
@@ -148,7 +159,6 @@ export default {
await s("nodes", nodes);
}
- let twoWeeksAgo = new Date(new Date().setDate(new Date().getDate() - 14));
let decoded = await ln.decodepay(payreq);
let { amount_msat, payee } = decoded;
let node = nodes.find((n) => n.nodeid === payee);
@@ -166,7 +176,10 @@ export default {
}
},
- async fund({ params: { name } }, res) {
+ async fund(req, res) {
+ let {
+ params: { name },
+ } = req;
let amount = await g(`fund:${name}`);
if (typeof amount === "undefined" || amount === null)
return bail(res, "fund not found");
@@ -181,7 +194,10 @@ export default {
res.send({ amount, payments });
},
- async withdraw({ params: { name } }, res) {
+ async withdraw(req, res) {
+ let {
+ params: { name },
+ } = req;
let maxWithdrawable = await g(`fund:${name}`);
res.send({
tag: "withdrawRequest",
@@ -193,7 +209,11 @@ export default {
});
},
- async take({ body: { id, amount, invoice: iid }, user }, res) {
+ async take(req, res) {
+ let {
+ body: { id, amount, invoice: iid },
+ user,
+ } = req;
try {
amount = parseInt(amount);
if (amount < 0) fail("Invalid amount");
@@ -227,7 +247,11 @@ export default {
}
},
- async confirm({ body: { txid, wallet, type } }, res) {
+ async confirm(req, res) {
+ let {
+ body: { txid, wallet, type },
+ } = req;
+
try {
let node = getNode(type);
@@ -268,7 +292,7 @@ export default {
l("confirming", id, p.id, p.amount);
- let r = await db
+ await db
.multi()
.set(`invoice:${iid}`, JSON.stringify(invoice))
.set(`payment:${p.id}`, JSON.stringify(p))
@@ -290,7 +314,8 @@ export default {
}
},
- async fee({ body, user }, res) {
+ async fee(req, res) {
+ let { body, user } = req;
try {
res.send(await build({ ...body, user }));
} catch (e) {
@@ -307,7 +332,8 @@ export default {
}
},
- async send({ body, user }, res) {
+ async send(req, res) {
+ let { body, user } = req;
try {
await requirePin({ body, user });
let { hash: txid } = await sendOnchain({ ...body, user });
@@ -321,7 +347,10 @@ export default {
}
},
- async freeze({ body: { secret } }, res) {
+ async freeze(req, res) {
+ let {
+ body: { secret },
+ } = req;
try {
if (secret !== config.adminpass) fail("unauthorized");
await s("freeze", true);
@@ -332,7 +361,11 @@ export default {
}
},
- async print({ body: { id }, user }, res) {
+ async print(req, res) {
+ let {
+ body: { id },
+ user,
+ } = req;
try {
let p = await g(`payment:${id}`);
if (p.uid !== user.id) fail("unauthorized");
@@ -356,10 +389,12 @@ export default {
}
},
- async lnaddress(
- { params: { lnaddress, amount, maxfee = 5000 }, body, user },
- res,
- ) {
+ async lnaddress(req, res) {
+ let {
+ params: { lnaddress, amount, maxfee = 5000 },
+ body,
+ user,
+ } = req;
try {
lnaddress = decodeURIComponent(lnaddress);
await requirePin({ body, user });
@@ -390,14 +425,21 @@ export default {
}
},
- async gateway({ body: { short_channel_id, webhook } }, res) {
+ async gateway(req, res) {
+ let {
+ body: { short_channel_id, webhook },
+ } = req;
+
await s(short_channel_id, webhook);
res.send({ ok: true });
},
- async replace({ body: { id }, user }, res) {
+ async replace(req, res) {
+ let {
+ body: { id },
+ user,
+ } = req;
try {
- let { id: uid } = user;
let p = await g(`payment:${id}`);
if (!p) fail("Payment not found");
if (p.uid !== user.id) fail("unauthorized");
@@ -459,7 +501,11 @@ export default {
}
},
- async internal({ body: { username, amount }, user: sender }, res) {
+ async internal(req, res) {
+ let {
+ body: { username, amount },
+ user: sender,
+ } = req;
let recipient = await getUser(username);
let inv = await generate({
invoice: { amount, type: "lightning" },
diff --git a/routes/requests.js.map b/routes/requests.js.map
deleted file mode 100644
index 448a576e..00000000
--- a/routes/requests.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"requests.js","sourceRoot":"","sources":["requests.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oCAAkC;AAClC,wCAAoC;AACpC,8BAAmC;AACnC,6BAA0B;AAE1B,kBAAe;IACP,GAAG;4DAAC,EAAkB,EAAE,GAAG;;gBAAX,EAAE,eAAA;;;4BACR,qBAAM,IAAA,MAAC,EAAC,kBAAW,EAAE,CAAE,CAAC,EAAA;;wBAAlC,OAAO,GAAG,SAAwB;wBACtC,IAAI,CAAC,OAAO;4BAAE,IAAA,YAAI,EAAC,mBAAmB,CAAC,CAAC;wBACxC,KAAA,OAAO,CAAA;wBAAa,qBAAM,IAAA,MAAC,EAAC,eAAQ,OAAO,CAAC,YAAY,CAAE,CAAC,EAAA;;wBAA3D,GAAQ,SAAS,GAAG,SAAuC,CAAC;wBAC5D,KAAA,OAAO,CAAA;wBAAa,qBAAM,IAAA,MAAC,EAAC,eAAQ,OAAO,CAAC,YAAY,CAAE,CAAC,EAAA;;wBAA3D,GAAQ,SAAS,GAAG,SAAuC,CAAC;wBAC5D,KAAA,OAAO,CAAA;wBAAW,qBAAM,IAAA,MAAC,EAAC,kBAAW,OAAO,CAAC,UAAU,CAAE,CAAC,EAAA;;wBAA1D,GAAQ,OAAO,GAAG,SAAwC,CAAC;wBAC3D,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,SAAA,EAAE,CAAC,CAAC;;;;;KACvB;IAEK,IAAI;4DAAC,EAAgB,EAAE,GAAG;;;gBAAX,EAAE,aAAA;;;;;wBAEb,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;wBAEpD,qBAAM,OAAE,CAAC,MAAM,CAAC,UAAG,EAAE,cAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAA;;wBAAnD,QAAQ,GAAG,SAAwC;wBAE5C,qBAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAC,EAAE,IAAK,OAAA,IAAA,MAAC,EAAC,kBAAW,EAAE,CAAE,CAAC,EAAlB,CAAkB,CAAC,CAAC,EAAA;;wBAAtE,QAAQ,GAAG,SAA2D,CAAC;wBAE5D,qBAAM,OAAO,CAAC,GAAG,CAC1B,QAAQ,CAAC,GAAG,CAAC,UAAO,CAAC;;;;;4CACnB,KAAA,CAAC,CAAA;4CAAa,qBAAM,IAAA,MAAC,EAAC,eAAQ,CAAC,CAAC,YAAY,CAAE,CAAC,EAAA;;4CAA/C,GAAE,SAAS,GAAG,SAAiC,CAAC;4CAChD,KAAA,CAAC,CAAA;4CAAa,qBAAM,IAAA,MAAC,EAAC,eAAQ,CAAC,CAAC,YAAY,CAAE,CAAC,EAAA;;4CAA/C,GAAE,SAAS,GAAG,SAAiC,CAAC;4CAChD,sBAAO,CAAC,EAAC;;;iCACV,CAAC,CACH,EAAA;;wBAND,QAAQ,GAAG,SAMV,CAAC;wBAEE,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,YAAY,KAAK,EAAE,EAArB,CAAqB,CAAC,CAAC;wBAErD,QAAQ,GAAG,QAAQ;6BACpB,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,YAAY,KAAK,EAAE,EAArB,CAAqB,CAAC;6BACpC,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,CAAC,UAAU,EAAb,CAAa,CAAC,CAAC;wBAE5B,QAAQ,GAAG,EAAE,CAAC;8BACA,EAAJ,aAAI;;;6BAAJ,CAAA,kBAAI,CAAA;wBAAT,CAAC;wBACR,IAAI,CAAC,CAAC,CAAC,UAAU;4BAAE,wBAAS;wBAEd,qBAAM,IAAA,MAAC,EAAC,kBAAW,CAAC,CAAC,UAAU,CAAE,CAAC,EAAA;;wBAA5C,OAAO,GAAG,SAAkC;wBAChD,IAAI,CAAC,OAAO;4BAAE,wBAAS;wBAEvB,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC;wBACpB,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ;4BAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;;wBAPlD,IAAI,CAAA;;;wBAUlB,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,UAAA,EAAE,IAAI,MAAA,EAAE,QAAQ,UAAA,EAAE,CAAC,CAAC;;;;wBAEvC,OAAO,CAAC,GAAG,CAAC,GAAC,CAAC,CAAC;wBACf,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAC,CAAC,OAAO,CAAC,CAAC;;;;;;KAEjC;IAEK,MAAM,YACV,EAGC,EACD,GAAG;;;YAHD,IAAA,YAA8B,EAAtB,SAAS,eAAA,EAAK,MAAM,cAAtB,aAAwB,CAAF,EAC5B,YAA6C,EAAjC,YAAY,QAAA,EAAE,QAAQ,cAAA,EAAE,OAAO,aAAE;;;4BAI5B,qBAAM,IAAA,MAAC,EAAC,eAAQ,SAAS,CAAE,CAAC,EAAA;;wBAA3C,YAAY,GAAG,SAA4B;wBAE3C,EAAE,GAAG,IAAA,SAAE,GAAE,CAAC;wBACV,OAAO,cACT,EAAE,IAAA,EACF,YAAY,cAAA,EACZ,YAAY,cAAA,IACT,MAAM,CACV,CAAC;wBAEF,qBAAM,IAAA,MAAC,EAAC,kBAAW,EAAE,CAAE,EAAE,OAAO,CAAC,EAAA;;wBAAjC,SAAiC,CAAC;wBAClC,qBAAM,OAAE,CAAC,KAAK,CAAC,UAAG,YAAY,cAAW,EAAE,EAAE,CAAC,EAAA;;wBAA9C,SAA8C,CAAC;wBAC/C,qBAAM,OAAE,CAAC,KAAK,CAAC,UAAG,YAAY,cAAW,EAAE,EAAE,CAAC,EAAA;;wBAA9C,SAA8C,CAAC;wBAE/C,IAAA,cAAI,EAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;wBACpC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;;;;KACnB;IAEK,OAAO;4DAAC,EAAsC,EAAE,GAAG;gBAAjC,UAAU,qBAAA,EAAY,EAAE,aAAA;;;4BAC9C,qBAAM,OAAE,CAAC,IAAI,CAAC,eAAQ,EAAE,cAAW,EAAE,UAAU,CAAC,EAAA;;wBAAhD,SAAgD,CAAC;wBACjD,GAAG,CAAC,IAAI,EAAE,CAAC;;;;;KACZ;CACF,CAAC"} \ No newline at end of file
diff --git a/routes/requests.ts b/routes/requests.ts
deleted file mode 100644
index a0d55739..00000000
--- a/routes/requests.ts
+++ /dev/null
@@ -1,85 +0,0 @@
-import { fail } from "$lib/utils";
-import { emit } from "$lib/sockets";
-import { g, s, db } from "$lib/db";
-import { v4 } from "uuid";
-
-export default {
- async get({ params: { id } }, res) {
- let request = await g(`request:${id}`);
- if (!request) fail("request not found");
- request.recipient = await g(`user:${request.recipient_id}`);
- request.requester = await g(`user:${request.requester_id}`);
- request.invoice = await g(`invoice:${request.invoice_id}`);
- res.send({ request });
- },
-
- async list({ user: { id } }, res) {
- try {
- const day = new Date(new Date().setDate(new Date().getDate() - 1));
-
- let requests = await db.lRange(`${id}:requests`, 0, -1);
-
- requests = await Promise.all(requests.map((id) => g(`request:${id}`)));
-
- requests = await Promise.all(
- requests.map(async (r) => {
- r.requester = await g(`user:${r.requester_id}`);
- r.recipient = await g(`user:${r.recipient_id}`);
- return r;
- }),
- );
-
- let sent = requests.filter((r) => r.requester_id === id);
-
- let received = requests
- .filter((r) => r.recipient_id === id)
- .filter((r) => !r.invoice_id);
-
- let invoices = [];
- for (let r of sent) {
- if (!r.invoice_id) continue;
-
- let invoice = await g(`invoice:${r.invoice_id}`);
- if (!invoice) continue;
-
- invoice.request = r;
- if (invoice.amount < invoice.received) invoices.push(invoice);
- }
-
- res.send({ invoices, sent, received });
- } catch (e) {
- console.log(e);
- res.code(500).send(e.message);
- }
- },
-
- async create(
- {
- body: { recipient, ...params },
- user: { id: requester_id, username, profile },
- },
- res,
- ) {
- let recipient_id = await g(`user:${recipient}`);
-
- let id = v4();
- let request = {
- id,
- recipient_id,
- requester_id,
- ...params,
- };
-
- await s(`request:${id}`, request);
- await db.lPush(`${requester_id}:requests`, id);
- await db.lPush(`${recipient_id}:requests`, id);
-
- emit(recipient, "request", request);
- res.send(request);
- },
-
- async destroy({ body: { request_id }, user: { id } }, res) {
- await db.lrem(`user:${id}:requests`, request_id);
- res.send();
- },
-};
diff --git a/routes/shopify.ts b/routes/shopify.ts
index bcb60ea3..b28f556f 100644
--- a/routes/shopify.ts
+++ b/routes/shopify.ts
@@ -12,7 +12,11 @@ let query = `mutation orderMarkAsPaid($input: OrderMarkAsPaidInput!) {
}
}`;
-export default async ({ body: { hash }, params: { id } }, res) => {
+export default async (req, res) => {
+ let {
+ body: { hash },
+ params: { id },
+ } = req;
let p = await g(`payment:${hash}`);
if (typeof p === "string") p = await g(`payment:${p}`);
let user = await g(`user:${p.uid}`);
diff --git a/routes/users.ts b/routes/users.ts
index 17bea006..4fe04bda 100644
--- a/routes/users.ts
+++ b/routes/users.ts
@@ -1,16 +1,6 @@
import { g, s, db } from "$lib/db";
import config from "$config";
-import store from "$lib/store";
-import {
- fields,
- nada,
- pick,
- uniq,
- wait,
- bail,
- fail,
- getUser,
-} from "$lib/utils";
+import { pick, bail, fail, getUser } from "$lib/utils";
import jwt from "jsonwebtoken";
import { authenticator } from "otplib";
import whitelist from "$lib/whitelist";
@@ -19,12 +9,9 @@ import { emit } from "$lib/sockets";
import register from "$lib/register";
import { requirePin } from "$lib/auth";
import { v4 } from "uuid";
-import { parseISO } from "date-fns";
import { types } from "$lib/payments";
import { bech32 } from "bech32";
import { mail, templates } from "$lib/mail";
-
-import got from "got";
import upload from "$lib/upload";
const { encode, decode, fromWords, toWords } = bech32;
@@ -32,7 +19,8 @@ const { encode, decode, fromWords, toWords } = bech32;
export default {
upload,
- async me({ user }, res) {
+ async me(req, res) {
+ let { user } = req;
try {
user.balance = await g(`balance:${user.id}`);
user.prompt = !!user.prompt;
@@ -46,7 +34,8 @@ export default {
}
},
- async list({ user }, res) {
+ async list(req, res) {
+ let { user } = req;
if (!user.admin) fail("unauthorized");
let users = [];
@@ -81,7 +70,10 @@ export default {
res.send(users);
},
- async get({ params: { key } }, res) {
+ async get(req, res) {
+ let {
+ params: { key },
+ } = req;
key = key.toLowerCase().replace(/\s/g, "");
try {
if (key.startsWith("npub")) {
@@ -132,7 +124,8 @@ export default {
}
},
- async create({ body, headers }, res) {
+ async create(req, res) {
+ let { body, headers } = req;
try {
const ip = headers["cf-connecting-ip"];
if (!body.user) fail("no user object provided");
@@ -154,7 +147,11 @@ export default {
}
},
- async disable2fa({ user, body: { token } }, res) {
+ async disable2fa(req, res) {
+ let {
+ user,
+ body: { token },
+ } = req;
let { id, twofa, username, otpsecret } = user;
if (twofa && !authenticator.check(token, otpsecret)) {
return res.code(401).send("2fa required");
@@ -168,7 +165,11 @@ export default {
res.send({});
},
- async enable2fa({ user, body: { token } }, res) {
+ async enable2fa(req, res) {
+ let {
+ user,
+ body: { token },
+ } = req;
let { id, otpsecret, username } = user;
const isValid = authenticator.check(token, otpsecret);
if (isValid) {
@@ -183,7 +184,8 @@ export default {
res.send({});
},
- async update({ user, body }, res) {
+ async update(req, res) {
+ let { user, body } = req;
try {
l("updating user", user.username);
@@ -332,7 +334,8 @@ export default {
}
},
- async subscribe({ body, user }, res) {
+ async subscribe(req, res) {
+ let { body, user } = req;
let { subscriptions } = user;
let { subscription } = body;
if (!subscriptions) subscriptions = [];
@@ -348,7 +351,11 @@ export default {
res.sendStatus(201);
},
- async password({ body: { password }, user }, res) {
+ async password(req, res) {
+ let {
+ body: { password },
+ user,
+ } = req;
if (!user.password) return res.send(true);
try {
@@ -359,7 +366,11 @@ export default {
}
},
- async pin({ body: { pin }, user }, res) {
+ async pin(req, res) {
+ let {
+ body: { pin },
+ user,
+ } = req;
res.send(!user.pin || user.pin === pin);
},
@@ -373,7 +384,10 @@ export default {
}
},
- async contacts({ user: { id } }, res) {
+ async contacts(req, res) {
+ let {
+ user: { id },
+ } = req;
let lastlen = (await g(`${id}:lastlen`)) || 0;
let len = await db.lLen(`${id}:payments`);
let payments = (await db.lRange(`${id}:payments`, 0, len - lastlen)) || [];
@@ -398,7 +412,11 @@ export default {
res.send(contacts);
},
- async del({ params: { username }, headers: { authorization } }, res) {
+ async del(req, res) {
+ let {
+ params: { username },
+ headers: { authorization },
+ } = req;
username = username.toLowerCase();
if (!(authorization && authorization.includes(config.admin)))
return res.code(401).send("unauthorized");
@@ -418,7 +436,11 @@ export default {
res.send({});
},
- async reset({ body: { code, username, password }, user: u }, res) {
+ async reset(req, res) {
+ let {
+ body: { code, username, password },
+ user: u,
+ } = req;
let admin = u && u.admin;
let id, user;
@@ -451,22 +473,34 @@ export default {
}
},
- async printerlogin({ body: { username, topic } }, res) {
+ async printerlogin(req, res) {
+ let {
+ body: { username, topic },
+ } = req;
if (username === topic) res.send({ ok: true });
else bail(res, "unauthorized");
},
- async acl({ body: { username, topic } }, res) {
+ async acl(req, res) {
+ let {
+ body: { username, topic },
+ } = req;
if (username === topic) res.send({ ok: true });
else bail(res, "unauthorized");
},
- async superuser({ body: { username } }, res) {
+ async superuser(req, res) {
+ let {
+ body: { username },
+ } = req;
if (username === config.mqtt2.username) res.send({ ok: true });
else bail(res, "unauthorized");
},
- async request({ body: { id, email } }, res) {
+ async request(req, res) {
+ let {
+ body: { id, email },
+ } = req;
try {
let user = await g(`user:${id}`);
@@ -497,10 +531,13 @@ export default {
}
},
- async verify({ params: { code } }, res) {
+ async verify(req, res) {
+ let {
+ params: { code },
+ } = req;
try {
let { id, email } = await g(`verify:${code}`);
- if (!id) fail(res, "verification failed");
+ if (!id) fail("verification failed");
let user = await g(`user:${id}`);
user.email = email;
user.verified = true;
@@ -513,7 +550,10 @@ export default {
}
},
- async forgot({ body: { email } }, res) {
+ async forgot(req, res) {
+ let {
+ body: { email },
+ } = req;
try {
let uid = await g(`email:${email.toLowerCase()}`);
let user = await g(`user:${uid}`);
@@ -535,19 +575,28 @@ export default {
}
},
- async items({ params: { id } }, res) {
+ async items(req, _) {
+ let {
+ params: { id },
+ } = req;
let item = await g(`item:${id}`);
return item;
},
- async hidepay({ body: { username } }, res) {
+ async hidepay(req, res) {
+ let {
+ body: { username },
+ } = req;
let u = await getUser(username);
u.hidepay = true;
await s(`user:${u.id}`, u);
res.send({});
},
- async unlimit({ body: { username } }, res) {
+ async unlimit(req, res) {
+ let {
+ body: { username },
+ } = req;
let u = await getUser(username);
u.unlimited = true;
await s(`user:${u.id}`, u);
diff --git a/tsconfig.json b/tsconfig.json
index 1a5456af..0bee304a 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -11,15 +11,21 @@
"allowImportingTsExtensions": true,
// Best practices
- "strict": true,
+ "strict": false,
"skipLibCheck": true,
"noFallthroughCasesInSwitch": true,
-
// Some stricter flags
"noUnusedLocals": true,
"noUnusedParameters": true,
- "noPropertyAccessFromIndexSignature": true,
+
+ "noImplicitAny": false, // Allow variables to have 'any' type
+ "noImplicitThis": false, // Allow 'this' to be of any type
+ "strictNullChecks": false, // Disable strict null checks
+ "strictFunctionTypes": false, // Disable strict function types
+ "strictBindCallApply": false, // Disable strict bind/call/apply checks
+ "noImplicitReturns": false, // Disable implicit return type checks
+ "noFallthroughCasesInSwitch": false,
"baseUrl": ".",
"paths": {