From a4cccc51652405d6c3d2b6edd2dba5627c3535ba Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 13 Oct 2022 18:05:49 -0700 Subject: tickets --- index.js | 2 ++ lib/redis.js | 11 +++++++++ package.json | 1 + pnpm-lock.yaml | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ routes/tickets.js | 19 +++++++++++++++ 5 files changed, 105 insertions(+) create mode 100644 lib/redis.js create mode 100644 routes/tickets.js diff --git a/index.js b/index.js index 06338fbc..c0db543c 100644 --- a/index.js +++ b/index.js @@ -6,6 +6,7 @@ import { l, err } from "./lib/logging"; import { optionalAuth } from "$lib/passport"; import "./db"; +import "./lib/redis"; import "./lib/sockets"; import "./lib/webhooks"; import "./lib/passport"; @@ -21,6 +22,7 @@ import "./routes/users"; import "./routes/invoices"; import "./routes/payments"; import "./routes/lnurl"; +import "./routes/tickets"; if (config.bitcoin) store.networks.push("bitcoin"); if (config.liquid) store.networks.push("liquid"); diff --git a/lib/redis.js b/lib/redis.js new file mode 100644 index 00000000..98a71856 --- /dev/null +++ b/lib/redis.js @@ -0,0 +1,11 @@ +import { createClient } from "redis"; + +const redis = createClient({ + url: "redis://redis", +}); + +redis.on("error", (err) => console.log("redis error", err)); + +await redis.connect(); + +export default redis; diff --git a/package.json b/package.json index 033cb60f..93810935 100644 --- a/package.json +++ b/package.json @@ -58,6 +58,7 @@ "pump": "^3.0.0", "query-string": "^6.13.1", "readable-stream-clone": "^0.0.7", + "redis": "^4.3.1", "sqlite3": "^5.0.11", "tiny-secp256k1": "^2.1.2", "uuid": "8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bf5b859b..5caf125d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,6 +53,7 @@ specifiers: pump: ^3.0.0 query-string: ^6.13.1 readable-stream-clone: ^0.0.7 + redis: ^4.3.1 sqlite3: ^5.0.11 tiny-secp256k1: ^2.1.2 uuid: '8' @@ -113,6 +114,7 @@ dependencies: pump: 3.0.0 query-string: 6.14.1 readable-stream-clone: 0.0.7 + redis: 4.3.1 sqlite3: 5.0.11 tiny-secp256k1: 2.1.2 uuid: 8.3.2 @@ -369,6 +371,55 @@ packages: resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} dev: false + /@redis/bloom/1.0.2_@redis+client@1.3.0: + resolution: {integrity: sha512-EBw7Ag1hPgFzdznK2PBblc1kdlj5B5Cw3XwI9/oG7tSn85/HKy3X9xHy/8tm/eNXJYHLXHJL/pkwBpFMVVefkw==} + peerDependencies: + '@redis/client': ^1.0.0 + dependencies: + '@redis/client': 1.3.0 + dev: false + + /@redis/client/1.3.0: + resolution: {integrity: sha512-XCFV60nloXAefDsPnYMjHGtvbtHR8fV5Om8cQ0JYqTNbWcQo/4AryzJ2luRj4blveWazRK/j40gES8M7Cp6cfQ==} + engines: {node: '>=14'} + dependencies: + cluster-key-slot: 1.1.0 + generic-pool: 3.8.2 + yallist: 4.0.0 + dev: false + + /@redis/graph/1.0.1_@redis+client@1.3.0: + resolution: {integrity: sha512-oDE4myMCJOCVKYMygEMWuriBgqlS5FqdWerikMoJxzmmTUErnTRRgmIDa2VcgytACZMFqpAOWDzops4DOlnkfQ==} + peerDependencies: + '@redis/client': ^1.0.0 + dependencies: + '@redis/client': 1.3.0 + dev: false + + /@redis/json/1.0.4_@redis+client@1.3.0: + resolution: {integrity: sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw==} + peerDependencies: + '@redis/client': ^1.0.0 + dependencies: + '@redis/client': 1.3.0 + dev: false + + /@redis/search/1.1.0_@redis+client@1.3.0: + resolution: {integrity: sha512-NyFZEVnxIJEybpy+YskjgOJRNsfTYqaPbK/Buv6W2kmFNaRk85JiqjJZA5QkRmWvGbyQYwoO5QfDi2wHskKrQQ==} + peerDependencies: + '@redis/client': ^1.0.0 + dependencies: + '@redis/client': 1.3.0 + dev: false + + /@redis/time-series/1.0.3_@redis+client@1.3.0: + resolution: {integrity: sha512-OFp0q4SGrTH0Mruf6oFsHGea58u8vS/iI5+NpYdicaM+7BgqBZH8FFvNZ8rYYLrUO/QRqMq72NpXmxLVNcdmjA==} + peerDependencies: + '@redis/client': ^1.0.0 + dependencies: + '@redis/client': 1.3.0 + dev: false + /@sequelize/core/7.0.0-alpha.10_jza55q5z6t5fyeys4gcza62sym: resolution: {integrity: sha512-uikpWaCiIaijsgoa9cH+3jCQl8r+FaQPhoE8AOJYvPwxOx52E1JZnRPMXNnlpbFy3Xu0qekrc5LBJq7IR8UB0Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1308,6 +1359,11 @@ packages: mimic-response: 1.0.1 dev: false + /cluster-key-slot/1.1.0: + resolution: {integrity: sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw==} + engines: {node: '>=0.10.0'} + dev: false + /co/4.6.0: resolution: {integrity: sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} @@ -2222,6 +2278,11 @@ packages: is-property: 1.0.2 dev: false + /generic-pool/3.8.2: + resolution: {integrity: sha512-nGToKy6p3PAbYQ7p1UlWl6vSPwfwU6TMSWK7TTu+WUY4ZjyZQGniGGt2oNVvyNSpyZYSB43zMXVLcBm08MTMkg==} + engines: {node: '>= 4'} + dev: false + /get-caller-file/2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -4045,6 +4106,17 @@ packages: resolve: 1.20.0 dev: false + /redis/4.3.1: + resolution: {integrity: sha512-cM7yFU5CA6zyCF7N/+SSTcSJQSRMEKN0k0Whhu6J7n9mmXRoXugfWDBo5iOzGwABmsWKSwGPTU5J4Bxbl+0mrA==} + dependencies: + '@redis/bloom': 1.0.2_@redis+client@1.3.0 + '@redis/client': 1.3.0 + '@redis/graph': 1.0.1_@redis+client@1.3.0 + '@redis/json': 1.0.4_@redis+client@1.3.0 + '@redis/search': 1.1.0_@redis+client@1.3.0 + '@redis/time-series': 1.0.3_@redis+client@1.3.0 + dev: false + /registry-auth-token/4.2.1: resolution: {integrity: sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==} engines: {node: '>=6.0.0'} diff --git a/routes/tickets.js b/routes/tickets.js new file mode 100644 index 00000000..0334c2c6 --- /dev/null +++ b/routes/tickets.js @@ -0,0 +1,19 @@ +import app from "$app"; +import redis from "$lib/redis"; +import { auth } from "$lib/passport"; + +app.get("/ticket", async (req, res) => { + res.send({ ticket: await redis.lLen("tickets") }); +}); + +app.post("/ticket", auth, async (req, res) => { + try { + let { asset } = req.body; + if (!asset || asset.length !== 64) throw new Error("invalid asset"); + await redis.lPush("tickets", req.body.asset); + + res.send(await redis.lPush("tickets", req.body.asset)); + } catch (e) { + res.code(500).send(e.message); + } +}); -- cgit v1.2.3