From 3023d8e20b252fa538e219c34a4f2183effacf8a Mon Sep 17 00:00:00 2001 From: MTG2000 Date: Wed, 1 Jun 2022 18:29:38 +0300 Subject: [PATCH] feat: lnurl-auth login --- environments/.dev.prod-server.env | 3 +- environments/.dev.server.env | 3 +- environments/.prod.github.env | 3 +- functions/auth/login.js | 87 ++ functions/auth/logout.js | 29 + functions/auth/services/lnurl.service.js | 97 ++ functions/auth/utils/helperFuncs.js | 13 + functions/graphql/index.js | 18 +- functions/graphql/nexus-typegen.ts | 2 + functions/graphql/schema.graphql | 1 + functions/graphql/types/category.js | 2 +- functions/graphql/types/donation.js | 6 +- functions/graphql/types/hackathon.js | 2 +- functions/graphql/types/post.js | 2 +- functions/graphql/types/project.js | 2 +- functions/graphql/types/users.js | 23 +- functions/graphql/types/vote.js | 7 +- functions/{graphql => }/prisma/index.d.ts | 0 functions/{graphql => }/prisma/index.js | 0 .../{graphql/helpers => utils}/consts.js | 8 +- functions/utils/index.js | 4 + package-lock.json | 1099 ++++++++++++----- package.json | 5 + .../migration.sql | 23 + prisma/schema.prisma | 18 +- serverless.yml | 22 + src/App.tsx | 3 + src/Components/Navbar/NavDesktop.tsx | 7 +- src/features/Auth/pages/LoginPage.tsx | 86 ++ src/features/Auth/pages/me.graphql | 7 + src/graphql/index.tsx | 42 + src/utils/apollo.ts | 7 +- 32 files changed, 1266 insertions(+), 365 deletions(-) create mode 100644 functions/auth/login.js create mode 100644 functions/auth/logout.js create mode 100644 functions/auth/services/lnurl.service.js create mode 100644 functions/auth/utils/helperFuncs.js rename functions/{graphql => }/prisma/index.d.ts (100%) rename functions/{graphql => }/prisma/index.js (100%) rename functions/{graphql/helpers => utils}/consts.js (60%) create mode 100644 functions/utils/index.js create mode 100644 prisma/migrations/20220601065659_add_pub_key_to_user/migration.sql create mode 100644 src/features/Auth/pages/LoginPage.tsx create mode 100644 src/features/Auth/pages/me.graphql diff --git a/environments/.dev.prod-server.env b/environments/.dev.prod-server.env index 84bc42e..1cf7772 100644 --- a/environments/.dev.prod-server.env +++ b/environments/.dev.prod-server.env @@ -1,2 +1,3 @@ -REACT_APP_API_END_POINT = https://makers.bolt.fun/.netlify/functions/graphql \ No newline at end of file +REACT_APP_GRAPHQL_END_POINT = https://makers.bolt.fun/.netlify/functions/graphql +REACT_APP_AUTH_END_POINT = https://makers.bolt.fun/.netlify/functions/auth \ No newline at end of file diff --git a/environments/.dev.server.env b/environments/.dev.server.env index c041ba8..474f506 100644 --- a/environments/.dev.server.env +++ b/environments/.dev.server.env @@ -1 +1,2 @@ -REACT_APP_API_END_POINT = http://localhost:8888/dev/graphql \ No newline at end of file +REACT_APP_GRAPHQL_END_POINT = http://localhost:8888/dev/graphql +REACT_APP_AUTH_END_POINT = http://localhost:8888/dev/auth \ No newline at end of file diff --git a/environments/.prod.github.env b/environments/.prod.github.env index bc71596..3b9cf33 100644 --- a/environments/.prod.github.env +++ b/environments/.prod.github.env @@ -1,2 +1,3 @@ REACT_APP_FOR_GITHUB=true -REACT_APP_API_END_POINT = https://makers.bolt.fun/.netlify/functions/graphql \ No newline at end of file +REACT_APP_GRAPHQL_END_POINT = https://makers.bolt.fun/.netlify/functions/graphql +REACT_APP_AUTH_END_POINT = https://makers.bolt.fun/.netlify/functions/auth \ No newline at end of file diff --git a/functions/auth/login.js b/functions/auth/login.js new file mode 100644 index 0000000..23adaff --- /dev/null +++ b/functions/auth/login.js @@ -0,0 +1,87 @@ + +const { prisma } = require('../prisma'); +const LnurlService = require('./services/lnurl.service') +const cookie = require('cookie') +const jose = require('jose'); +const { CONSTS } = require('../utils'); + + +async function generateAuthUrl() { + const data = await LnurlService.generateAuthUrl(); + return { + status: "OK", + body: JSON.stringify(data) + }; +} + + +async function login(tag, k1, sig, key) { + if (tag !== 'login') { + return { status: 'ERROR', reason: 'Not a login request' } + } + + const result = LnurlService.verifySig(sig, k1, key) + if (!result) { + return { status: 'ERROR', reason: 'Invalid Signature' } + } + + const user = await prisma.user.findFirst({ where: { pubKey: key } }) + if (user === null) { + await prisma.user.create({ + data: { + pubKey: key, + name: key, + avatar: `https://avatars.dicebear.com/api/bottts/${key}.svg` + } + }) + } + + + + // Set cookies on the user's headers + const hour = 3600000 + const maxAge = 30 * 24 * hour + const jwtSecret = CONSTS.JWT_SECRET; + + + const jwt = await new jose.SignJWT({ pubKey: key }) + .setProtectedHeader({ alg: 'HS256' }) + .setIssuedAt() + .setExpirationTime(maxAge) + //TODO: Set audience, issuer + .sign(Buffer.from(jwtSecret, 'utf-8')) + + + + const authCookie = cookie.serialize('Authorization', `Bearer ${jwt}`, { + secure: true, + httpOnly: true, + path: '/', + maxAge: maxAge, + }) + + return { + status: 'OK', + 'headers': { + 'Set-Cookie': authCookie, + 'Cache-Control': 'no-cache', + }, + } +} + + + +exports.handler = async (event, context) => { + const { tag, k1, sig, key } = event.queryStringParameters ?? {} + + if (event.httpMethod !== "GET") { + return { statusCode: 405, body: "Method Not Allowed" }; + } + + if (!sig || !key) { + return generateAuthUrl(); + } + else { + return login(tag, k1, sig, key) + } +}; \ No newline at end of file diff --git a/functions/auth/logout.js b/functions/auth/logout.js new file mode 100644 index 0000000..1224d28 --- /dev/null +++ b/functions/auth/logout.js @@ -0,0 +1,29 @@ + +const cookie = require('cookie') + +exports.handler = async (event, context) => { + // const hour = 3600000 + // const maxAge = 30 * 24 * hour; + // const _cookie = cookie.serialize('Hello', `Bearer hello`, { + // // secure: true, + // // httpOnly: true, + // path: '/', + // maxAge + // }) + const hour = 3600000 + const twoWeeks = 14 * 24 * hour + const myCookie = cookie.serialize('Authorization', '', { + secure: true, + httpOnly: true, + path: '/', + maxAge: -1, + }) + console.log(myCookie); + return { + status: 'OK', + 'headers': { + 'Set-Cookie': myCookie, + 'Cache-Control': 'no-cache', + } + } +}; \ No newline at end of file diff --git a/functions/auth/services/lnurl.service.js b/functions/auth/services/lnurl.service.js new file mode 100644 index 0000000..04f68c7 --- /dev/null +++ b/functions/auth/services/lnurl.service.js @@ -0,0 +1,97 @@ +const lnurl = require('lnurl') +const crypto = require('crypto') +const { prisma } = require('../../prisma') + + +async function generateSecret() { + let secret = null + const maxAttempts = 5 + let attempt = 0 + while (secret === null && attempt < maxAttempts) { + secret = crypto.randomBytes(32).toString('hex') + const hash = createHash(secret) + const isUsed = await isHashUsed(hash); + if (isUsed) { + secret = null + } + attempt++ + } + if (!secret) { + const message = 'Too many failed attempts to generate unique secret' + throw new Error(message) + } + return secret +} + +function isHashUsed(hash) { + return prisma.generatedK1.findFirst({ where: { value: hash } }) +} + +function addHash(hash) { + prisma.generatedK1.create({ + data: { + value: hash, + } + }) +} + +function removeHash(hash) { + prisma.generatedK1.delete({ + where: { + value: hash, + } + }) +} + +function removeExpiredHashes() { + const now = new Date(); + const lastHourDate = new Date(now.getFullYear(), now.getMonth(), now.getDate(), now.getHours() - 1, now.getMinutes()); + + prisma.generatedK1.deleteMany({ + where: { + createdAt: { + lt: lastHourDate + } + } + }) +} + +async function generateAuthUrl() { + const hostname = 'http://localhost:8888/dev/auth/login' + const secret = await generateSecret() + addHash(createHash(secret)) + const url = `${hostname}?tag=login&k1=${secret}` + return { + url, + encoded: lnurl.encode(url).toUpperCase(), + secret, + } +} + +function verifySig(sig, k1, key) { + if (!lnurl.verifyAuthorizationSignature(sig, k1, key)) { + const message = 'Signature verification failed' + throw new Error(message) + } + const hash = createHash(k1) + return { key, hash } +} + +function createHash(data) { + if (!(typeof data === 'string' || Buffer.isBuffer(data))) { + throw new Error( + JSON.stringify({ status: 'ERROR', reason: 'Secret must be a string or a Buffer' }) + ) + } + if (typeof data === 'string') { + data = Buffer.from(data, 'hex') + } + return crypto.createHash('sha256').update(data).digest('hex') +} + +module.exports = { + generateAuthUrl: generateAuthUrl, + verifySig: verifySig, + removeHash: removeHash, + removeExpiredHashes: removeExpiredHashes +} \ No newline at end of file diff --git a/functions/auth/utils/helperFuncs.js b/functions/auth/utils/helperFuncs.js new file mode 100644 index 0000000..4dce093 --- /dev/null +++ b/functions/auth/utils/helperFuncs.js @@ -0,0 +1,13 @@ + +const { prisma } = require('../../prisma') + +const getUserByPubKey = (pubKey) => { + if (!pubKey) return null; + return prisma.user.findFirst({ + where: { pubKey } + }) +} + +module.exports = { + getUserByPubKey, +} \ No newline at end of file diff --git a/functions/graphql/index.js b/functions/graphql/index.js index c37ef7a..72f1a34 100644 --- a/functions/graphql/index.js +++ b/functions/graphql/index.js @@ -1,12 +1,27 @@ const { ApolloServer } = require("apollo-server-lambda"); const schema = require('./schema') +const cookie = require('cookie') +const jose = require('jose'); +const { CONSTS } = require('../utils'); + const server = new ApolloServer({ schema, - context: () => { + context: async ({ event }) => { + const cookies = cookie.parse(event.headers.Cookie ?? ''); + const authToken = cookies.Authorization; + if (authToken) { + const token = authToken.split(' ')[1]; + const { payload } = await jose.jwtVerify(token, Buffer.from(CONSTS.JWT_SECRET), { + algorithms: ['HS256'], + }) + return { userPubKey: payload.pubKey } + } + return { + }; }, }); @@ -22,6 +37,7 @@ const apolloHandler = server.createHandler({ // https://github.com/vendia/serverless-express/issues/427#issuecomment-924580007 const handler = (event, context, ...args) => { + return apolloHandler( { ...event, diff --git a/functions/graphql/nexus-typegen.ts b/functions/graphql/nexus-typegen.ts index d061a36..9bad7d9 100644 --- a/functions/graphql/nexus-typegen.ts +++ b/functions/graphql/nexus-typegen.ts @@ -296,6 +296,7 @@ export interface NexusGenFieldTypes { getProject: NexusGenRootTypes['Project']; // Project! getTrendingPosts: NexusGenRootTypes['Post'][]; // [Post!]! hottestProjects: NexusGenRootTypes['Project'][]; // [Project!]! + me: NexusGenRootTypes['User'] | null; // User newProjects: NexusGenRootTypes['Project'][]; // [Project!]! popularTopics: NexusGenRootTypes['Topic'][]; // [Topic!]! projectsByCategory: NexusGenRootTypes['Project'][]; // [Project!]! @@ -475,6 +476,7 @@ export interface NexusGenFieldTypeNames { getProject: 'Project' getTrendingPosts: 'Post' hottestProjects: 'Project' + me: 'User' newProjects: 'Project' popularTopics: 'Topic' projectsByCategory: 'Project' diff --git a/functions/graphql/schema.graphql b/functions/graphql/schema.graphql index c11e1be..792b8d7 100644 --- a/functions/graphql/schema.graphql +++ b/functions/graphql/schema.graphql @@ -145,6 +145,7 @@ type Query { getProject(id: Int!): Project! getTrendingPosts: [Post!]! hottestProjects(skip: Int = 0, take: Int = 50): [Project!]! + me: User newProjects(skip: Int = 0, take: Int = 50): [Project!]! popularTopics: [Topic!]! projectsByCategory(category_id: Int!, skip: Int = 0, take: Int = 10): [Project!]! diff --git a/functions/graphql/types/category.js b/functions/graphql/types/category.js index 7cfcf5b..7bec1ae 100644 --- a/functions/graphql/types/category.js +++ b/functions/graphql/types/category.js @@ -4,7 +4,7 @@ const { extendType, nonNull, } = require('nexus'); -const { prisma } = require('../prisma') +const { prisma } = require('../../prisma') const Category = objectType({ diff --git a/functions/graphql/types/donation.js b/functions/graphql/types/donation.js index 70e39b0..6f6e645 100644 --- a/functions/graphql/types/donation.js +++ b/functions/graphql/types/donation.js @@ -7,8 +7,8 @@ const { extendType, nonNull, } = require('nexus'); -const { BOLT_FUN_LIGHTNING_ADDRESS } = require('../helpers/consts'); -const { prisma } = require('../prisma'); +const { prisma } = require('../../prisma'); +const { CONSTS } = require('../../utils'); const { getPaymetRequestForItem, hexToUint8Array } = require('./helpers'); @@ -45,7 +45,7 @@ const donateMutation = extendType({ resolve: async (_, args) => { const { amount_in_sat } = args; - const lightning_address = BOLT_FUN_LIGHTNING_ADDRESS; + const lightning_address = CONSTS.BOLT_FUN_LIGHTNING_ADDRESS; const pr = await getPaymetRequestForItem(lightning_address, args.amount_in_sat); const invoice = parsePaymentRequest({ request: pr }); diff --git a/functions/graphql/types/hackathon.js b/functions/graphql/types/hackathon.js index 74aa633..cb88cdc 100644 --- a/functions/graphql/types/hackathon.js +++ b/functions/graphql/types/hackathon.js @@ -5,7 +5,7 @@ const { extendType, nonNull, } = require('nexus'); -const { prisma } = require('../prisma') +const { prisma } = require('../../prisma') diff --git a/functions/graphql/types/post.js b/functions/graphql/types/post.js index 9f0ce3a..51c8143 100644 --- a/functions/graphql/types/post.js +++ b/functions/graphql/types/post.js @@ -10,7 +10,7 @@ const { arg, } = require('nexus'); const { paginationArgs } = require('./helpers'); -const { prisma } = require('../prisma') +const { prisma } = require('../../prisma') const POST_TYPE = enumType({ diff --git a/functions/graphql/types/project.js b/functions/graphql/types/project.js index 4887239..8085860 100644 --- a/functions/graphql/types/project.js +++ b/functions/graphql/types/project.js @@ -5,7 +5,7 @@ const { extendType, nonNull, } = require('nexus') -const { prisma } = require('../prisma') +const { prisma } = require('../../prisma') const { paginationArgs, getLnurlDetails, lightningAddressToLnurl } = require('./helpers'); diff --git a/functions/graphql/types/users.js b/functions/graphql/types/users.js index 25cb206..9f96bc9 100644 --- a/functions/graphql/types/users.js +++ b/functions/graphql/types/users.js @@ -1,4 +1,7 @@ -const { objectType } = require("nexus"); +const { objectType, extendType } = require("nexus"); +const { getUserByPubKey } = require("../../auth/utils/helperFuncs"); + + const User = objectType({ name: 'User', @@ -10,7 +13,23 @@ const User = objectType({ }) +const me = extendType({ + type: "Query", + definition(t) { + t.field('me', { + type: "User", + async resolve(parent, args, context) { + const user = await getUserByPubKey(context.userPubKey) + return user + } + }) + } +}) + module.exports = { // Types - User + User, + + // Queries + me, } \ No newline at end of file diff --git a/functions/graphql/types/vote.js b/functions/graphql/types/vote.js index d790268..276f334 100644 --- a/functions/graphql/types/vote.js +++ b/functions/graphql/types/vote.js @@ -10,8 +10,9 @@ const { const { parsePaymentRequest } = require('invoices'); const { getPaymetRequestForItem, hexToUint8Array } = require('./helpers'); const { createHash } = require('crypto'); -const { prisma } = require('../prisma'); -const { BOLT_FUN_LIGHTNING_ADDRESS } = require('../helpers/consts'); +const { prisma } = require('../../prisma'); +const { CONSTS } = require('../../utils'); + // the types of items we can vote to @@ -131,7 +132,7 @@ const voteMutation = extendType({ resolve: async (_, args) => { const { item_id, item_type, amount_in_sat } = args; - const lightning_address = (await getLightningAddress(item_id, item_type)) ?? BOLT_FUN_LIGHTNING_ADDRESS; + const lightning_address = (await getLightningAddress(item_id, item_type)) ?? CONSTS.BOLT_FUN_LIGHTNING_ADDRESS; const pr = await getPaymetRequestForItem(lightning_address, args.amount_in_sat); const invoice = parsePaymentRequest({ request: pr }); diff --git a/functions/graphql/prisma/index.d.ts b/functions/prisma/index.d.ts similarity index 100% rename from functions/graphql/prisma/index.d.ts rename to functions/prisma/index.d.ts diff --git a/functions/graphql/prisma/index.js b/functions/prisma/index.js similarity index 100% rename from functions/graphql/prisma/index.js rename to functions/prisma/index.js diff --git a/functions/graphql/helpers/consts.js b/functions/utils/consts.js similarity index 60% rename from functions/graphql/helpers/consts.js rename to functions/utils/consts.js index 1dcc8f1..76cf3f2 100644 --- a/functions/graphql/helpers/consts.js +++ b/functions/utils/consts.js @@ -1,5 +1,9 @@ const BOLT_FUN_LIGHTNING_ADDRESS = 'johns@getalby.com'; // #TODO, replace it by bolt-fun lightning address if there exist one +const JWT_SECRET = process.env.JWT_SECRET; -module.exports = { +const CONSTS = { + JWT_SECRET, BOLT_FUN_LIGHTNING_ADDRESS, -} \ No newline at end of file +} + +module.exports = CONSTS; \ No newline at end of file diff --git a/functions/utils/index.js b/functions/utils/index.js new file mode 100644 index 0000000..68b6810 --- /dev/null +++ b/functions/utils/index.js @@ -0,0 +1,4 @@ + +module.exports = { + CONSTS: require('./consts') +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 98171c7..16f4979 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,14 +29,18 @@ "apollo-server-lambda": "^3.6.7", "axios": "^0.26.1", "chance": "^1.1.8", + "cookie": "^0.5.0", + "crypto": "^1.0.1", "dayjs": "^1.11.1", "env-cmd": "^10.1.0", "framer-motion": "^6.3.0", "fslightbox-react": "^1.6.2-2", "graphql": "^16.3.0", "invoices": "^2.0.6", + "jose": "^4.8.1", "linkify-html": "^3.0.5", "linkifyjs": "^3.0.5", + "lnurl": "^0.24.1", "lodash.debounce": "^4.0.8", "lodash.throttle": "^4.1.1", "marked": "^4.0.14", @@ -66,6 +70,7 @@ "react-tooltip": "^4.2.21", "react-topbar-progress-indicator": "^4.1.1", "remirror": "^1.0.77", + "secp256k1": "^4.0.3", "typescript": "^4.6.3", "web-vitals": "^2.1.4", "webln": "^0.3.0", @@ -2197,6 +2202,15 @@ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" }, + "node_modules/@bleskomat/form": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@bleskomat/form/-/form-1.2.6.tgz", + "integrity": "sha512-xAMj1zfYWydo2K2U30Tn1R8p2hOEdRF9o0d/QPYHjGNQkgx6rHv4lgf6/UXOptjUvPKEIRtxXJBl7fYZ8nnRzA==", + "dependencies": { + "express-handlebars": "6.0.3", + "underscore": "1.13.2" + } + }, "node_modules/@cnakazawa/watch": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", @@ -7481,21 +7495,6 @@ } } }, - "node_modules/@storybook/addon-links/node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/@storybook/addon-measure": { "version": "6.4.22", "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-6.4.22.tgz", @@ -9366,21 +9365,6 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/channel-postmessage/node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/@storybook/channel-websocket": { "version": "6.4.22", "resolved": "https://registry.npmjs.org/@storybook/channel-websocket/-/channel-websocket-6.4.22.tgz", @@ -9449,21 +9433,6 @@ "react-dom": "^16.8.0 || ^17.0.0" } }, - "node_modules/@storybook/client-api/node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/@storybook/client-logger": { "version": "6.4.22", "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.4.22.tgz", @@ -9606,21 +9575,6 @@ } } }, - "node_modules/@storybook/core-client/node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/@storybook/core-common": { "version": "6.4.22", "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-6.4.22.tgz", @@ -13305,21 +13259,6 @@ "react-dom": "^16.8.0 || ^17.0.0" } }, - "node_modules/@storybook/preview-web/node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/@storybook/react": { "version": "6.4.22", "resolved": "https://registry.npmjs.org/@storybook/react/-/react-6.4.22.tgz", @@ -14159,21 +14098,6 @@ "react-dom": "^16.8.0 || ^17.0.0" } }, - "node_modules/@storybook/router/node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/@storybook/semver": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", @@ -14397,21 +14321,6 @@ "react-dom": "^16.8.0 || ^17.0.0" } }, - "node_modules/@storybook/ui/node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/@surma/rollup-plugin-off-main-thread": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", @@ -15028,6 +14937,14 @@ "@babel/types": "^7.3.0" } }, + "node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/body-parser": { "version": "1.19.2", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", @@ -18052,6 +17969,14 @@ "node": "*" } }, + "node_modules/bignumber.js": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", + "engines": { + "node": "*" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -18141,23 +18066,26 @@ "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" }, "node_modules/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.7", - "raw-body": "2.4.3", - "type-is": "~1.6.18" + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/body-parser/node_modules/bytes": { @@ -18176,6 +18104,14 @@ "ms": "2.0.0" } }, + "node_modules/body-parser/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/body-parser/node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -18213,6 +18149,31 @@ "node": ">=12.20.0" } }, + "node_modules/bolt11": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bolt11/-/bolt11-1.3.4.tgz", + "integrity": "sha512-x4lHDv0oid13lGlZU7cl/5gx9nRwjB2vgK/uB3c50802Wh+9WjWQMwzD2PCETHylUijx2iBAqUQYbx3ZgwF06Q==", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bech32": "^1.1.2", + "bitcoinjs-lib": "^6.0.0", + "bn.js": "^4.11.8", + "create-hash": "^1.2.0", + "lodash": "^4.17.11", + "safe-buffer": "^5.1.1", + "secp256k1": "^4.0.2" + } + }, + "node_modules/bolt11/node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "node_modules/bolt11/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "node_modules/bonjour-service": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.11.tgz", @@ -18371,8 +18332,7 @@ "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, "node_modules/browser-process-hrtime": { "version": "1.0.0", @@ -19751,9 +19711,9 @@ } }, "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "engines": { "node": ">= 0.6" } @@ -20312,6 +20272,12 @@ "web-streams-polyfill": "^3.2.0" } }, + "node_modules/crypto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", + "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==", + "deprecated": "This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in." + }, "node_modules/crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", @@ -21061,9 +21027,13 @@ } }, "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } }, "node_modules/detab": { "version": "2.0.4", @@ -21519,7 +21489,7 @@ "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/ejs": { "version": "3.1.6", @@ -21562,7 +21532,6 @@ "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -21576,8 +21545,7 @@ "node_modules/elliptic/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/email-addresses": { "version": "3.1.0", @@ -21657,7 +21625,7 @@ "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "engines": { "node": ">= 0.8" } @@ -22870,37 +22838,38 @@ } }, "node_modules/express": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", - "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.2", + "body-parser": "1.20.0", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.2", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.9.7", + "qs": "6.10.3", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", + "send": "0.18.0", + "serve-static": "1.15.0", "setprototypeof": "1.2.0", - "statuses": "~1.5.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -22909,6 +22878,19 @@ "node": ">= 0.10.0" } }, + "node_modules/express-handlebars": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-6.0.3.tgz", + "integrity": "sha512-cG6/CeriAhAYKC9+VivXtj41+HNDB6xnigwzcXv/m9BBtijR2Yg5I5VWsK6nPc1+E06FIS23nGfr2COUv8sG3A==", + "dependencies": { + "glob": "^7.2.0", + "graceful-fs": "^4.2.9", + "handlebars": "^4.7.7" + }, + "engines": { + "node": ">=v12.22.9" + } + }, "node_modules/express/node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -22922,6 +22904,14 @@ "ms": "2.0.0" } }, + "node_modules/express/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -22946,6 +22936,14 @@ } ] }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -23365,16 +23363,16 @@ } }, "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "engines": { @@ -23392,7 +23390,15 @@ "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/finalhandler/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } }, "node_modules/find-cache-dir": { "version": "3.3.2", @@ -24568,7 +24574,6 @@ "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.0", @@ -24589,7 +24594,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -24855,7 +24859,6 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -25013,7 +25016,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -25193,18 +25195,34 @@ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" }, "node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" } }, "node_modules/http-parser-js": { @@ -28391,6 +28409,14 @@ "node": ">= 0.6.0" } }, + "node_modules/jose": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.8.1.tgz", + "integrity": "sha512-+/hpTbRcCw9YC0TOfN1W47pej4a9lRmltdOVdRLz5FP5UvUq3CenhXjQK7u/8NdMIIShMXYAh9VLPhc7TjhvFw==", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/js-base64": { "version": "2.6.4", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", @@ -28881,6 +28907,23 @@ "immediate": "~3.0.5" } }, + "node_modules/lightning-backends": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lightning-backends/-/lightning-backends-1.5.0.tgz", + "integrity": "sha512-mFGjAQ71QF++qrPFHtIFO6fS+EjkWPG3nabP2ijBKU4JfcCMi6vS+nolW6cy/XhtROCvXMdOa3b11xlir/8WZg==", + "dependencies": { + "@bleskomat/form": "1.2.6", + "async": "3.2.3", + "bolt11": "1.3.4", + "secp256k1": "4.0.3", + "socks-proxy-agent": "6.2.0" + } + }, + "node_modules/lightning-backends/node_modules/async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" + }, "node_modules/lilconfig": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", @@ -29162,6 +29205,138 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, + "node_modules/lnurl": { + "version": "0.24.1", + "resolved": "https://registry.npmjs.org/lnurl/-/lnurl-0.24.1.tgz", + "integrity": "sha512-Tzl8CZthjIbh2UAANGVIzYCJldUziPiurGHkBuVwaOKUhShPGegXP6y+AsbdypMndcc5qLTvT+bIolIbSfeSfg==", + "dependencies": { + "async": "3.2.3", + "bech32": "2.0.0", + "bignumber.js": "9.0.2", + "bolt11": "1.3.4", + "commander": "9.2.0", + "debug": "4.3.4", + "express": "4.18.0", + "lightning-backends": "1.5.0", + "lnurl-offline": "1.1.0", + "secp256k1": "4.0.3" + }, + "bin": { + "lnurl": "cli.js" + } + }, + "node_modules/lnurl-offline": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/lnurl-offline/-/lnurl-offline-1.1.0.tgz", + "integrity": "sha512-BgcmwnuNtW6kJuMD9jrNAHnlx8R/qM9enZDrtO+PQcQAO10OJj45h8ageQa5VpjjsNtSzsd3hhlugKIJRmUTvw==" + }, + "node_modules/lnurl/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/lnurl/node_modules/async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" + }, + "node_modules/lnurl/node_modules/commander": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz", + "integrity": "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/lnurl/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/lnurl/node_modules/express": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.0.tgz", + "integrity": "sha512-EJEXxiTQJS3lIPrU1AE2vRuT7X7E+0KBbpm5GSoK524yl0K8X+er8zS2P14E64eqsVNoWbMCT7MpmQ+ErAhgRg==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/lnurl/node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/lnurl/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/lnurl/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/lnurl/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -30236,8 +30411,7 @@ "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" }, "node_modules/minimatch": { "version": "3.1.2", @@ -30557,6 +30731,15 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/msw/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/msw/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -55088,6 +55271,11 @@ "tslib": "^2.0.3" } }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, "node_modules/node-dir": { "version": "0.1.17", "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", @@ -55188,6 +55376,16 @@ "node": ">= 10.12.0" } }, + "node_modules/node-gyp-build": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/node-gyp/node_modules/are-we-there-yet": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", @@ -55811,9 +56009,9 @@ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dependencies": { "ee-first": "1.1.1" }, @@ -58490,9 +58688,12 @@ } }, "node_modules/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dependencies": { + "side-channel": "^1.0.4" + }, "engines": { "node": ">=0.6" }, @@ -58595,12 +58796,12 @@ } }, "node_modules/raw-body": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", - "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dependencies": { "bytes": "3.1.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -61385,6 +61586,20 @@ "integrity": "sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==", "dev": true }, + "node_modules/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "hasInstallScript": true, + "dependencies": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -61443,23 +61658,23 @@ } }, "node_modules/send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dependencies": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "engines": { "node": ">= 0.8.0" @@ -61476,13 +61691,29 @@ "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/sentence-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", @@ -61585,14 +61816,14 @@ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, "node_modules/serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.2" + "send": "0.18.0" }, "engines": { "node": ">= 0.8.0" @@ -64106,7 +64337,6 @@ "version": "3.15.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.4.tgz", "integrity": "sha512-vMOPGDuvXecPs34V74qDKk4iJ/SN4vL3Ow/23ixafENYvtrNvtbcgUeugTcUGRGsOF/5fU8/NYSL5Hyb3l1OJA==", - "dev": true, "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -64146,6 +64376,11 @@ "node": ">=0.10.0" } }, + "node_modules/underscore": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.2.tgz", + "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==" + }, "node_modules/undici": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/undici/-/undici-5.0.0.tgz", @@ -65886,8 +66121,7 @@ "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, "node_modules/workbox-background-sync": { "version": "6.5.3", @@ -67922,6 +68156,15 @@ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" }, + "@bleskomat/form": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@bleskomat/form/-/form-1.2.6.tgz", + "integrity": "sha512-xAMj1zfYWydo2K2U30Tn1R8p2hOEdRF9o0d/QPYHjGNQkgx6rHv4lgf6/UXOptjUvPKEIRtxXJBl7fYZ8nnRzA==", + "requires": { + "express-handlebars": "6.0.3", + "underscore": "1.13.2" + } + }, "@cnakazawa/watch": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", @@ -71879,17 +72122,6 @@ "qs": "^6.10.0", "regenerator-runtime": "^0.13.7", "ts-dedent": "^2.0.0" - }, - "dependencies": { - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - } } }, "@storybook/addon-measure": { @@ -73355,17 +73587,6 @@ "global": "^4.4.0", "qs": "^6.10.0", "telejson": "^5.3.2" - }, - "dependencies": { - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - } } }, "@storybook/channel-websocket": { @@ -73418,17 +73639,6 @@ "synchronous-promise": "^2.0.15", "ts-dedent": "^2.0.0", "util-deprecate": "^1.0.2" - }, - "dependencies": { - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - } } }, "@storybook/client-logger": { @@ -73526,17 +73736,6 @@ "ts-dedent": "^2.0.0", "unfetch": "^4.2.0", "util-deprecate": "^1.0.2" - }, - "dependencies": { - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - } } }, "@storybook/core-common": { @@ -76498,17 +76697,6 @@ "ts-dedent": "^2.0.0", "unfetch": "^4.2.0", "util-deprecate": "^1.0.2" - }, - "dependencies": { - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - } } }, "@storybook/react": { @@ -77190,17 +77378,6 @@ "react-router": "^6.0.0", "react-router-dom": "^6.0.0", "ts-dedent": "^2.0.0" - }, - "dependencies": { - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - } } }, "@storybook/semver": { @@ -77369,17 +77546,6 @@ "regenerator-runtime": "^0.13.7", "resolve-from": "^5.0.0", "store2": "^2.12.0" - }, - "dependencies": { - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - } } }, "@surma/rollup-plugin-off-main-thread": { @@ -77809,6 +77975,14 @@ "@babel/types": "^7.3.0" } }, + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "requires": { + "@types/node": "*" + } + }, "@types/body-parser": { "version": "1.19.2", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", @@ -80343,6 +80517,11 @@ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" }, + "bignumber.js": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" + }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -80411,20 +80590,22 @@ "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" }, "body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "requires": { "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.7", - "raw-body": "2.4.3", - "type-is": "~1.6.18" + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "dependencies": { "bytes": { @@ -80440,6 +80621,11 @@ "ms": "2.0.0" } }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -80473,6 +80659,33 @@ "resolved": "https://registry.npmjs.org/bolt09/-/bolt09-0.2.3.tgz", "integrity": "sha512-xEt5GE6pXB8wMIWHAoyF28k0Yt2rFqIou1LCyIeNadAOQhu/F7GTjZwreFwLl07YYkhOH23avewRt5PD8JnKKg==" }, + "bolt11": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bolt11/-/bolt11-1.3.4.tgz", + "integrity": "sha512-x4lHDv0oid13lGlZU7cl/5gx9nRwjB2vgK/uB3c50802Wh+9WjWQMwzD2PCETHylUijx2iBAqUQYbx3ZgwF06Q==", + "requires": { + "@types/bn.js": "^4.11.3", + "bech32": "^1.1.2", + "bitcoinjs-lib": "^6.0.0", + "bn.js": "^4.11.8", + "create-hash": "^1.2.0", + "lodash": "^4.17.11", + "safe-buffer": "^5.1.1", + "secp256k1": "^4.0.2" + }, + "dependencies": { + "bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, "bonjour-service": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.11.tgz", @@ -80597,8 +80810,7 @@ "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, "browser-process-hrtime": { "version": "1.0.0", @@ -81689,9 +81901,9 @@ } }, "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" }, "cookie-signature": { "version": "1.0.6", @@ -82155,6 +82367,11 @@ "web-streams-polyfill": "^3.2.0" } }, + "crypto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", + "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==" + }, "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", @@ -82702,9 +82919,9 @@ } }, "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, "detab": { "version": "2.0.4", @@ -83077,7 +83294,7 @@ "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "ejs": { "version": "3.1.6", @@ -83111,7 +83328,6 @@ "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, "requires": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -83125,8 +83341,7 @@ "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, @@ -83181,7 +83396,7 @@ "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, "encoding": { "version": "0.1.13", @@ -84095,37 +84310,38 @@ } }, "express": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", - "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.2", + "body-parser": "1.20.0", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.2", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.9.7", + "qs": "6.10.3", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", + "send": "0.18.0", + "serve-static": "1.15.0", "setprototypeof": "1.2.0", - "statuses": "~1.5.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -84144,6 +84360,11 @@ "ms": "2.0.0" } }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -84153,9 +84374,24 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" } } }, + "express-handlebars": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-6.0.3.tgz", + "integrity": "sha512-cG6/CeriAhAYKC9+VivXtj41+HNDB6xnigwzcXv/m9BBtijR2Yg5I5VWsK6nPc1+E06FIS23nGfr2COUv8sG3A==", + "requires": { + "glob": "^7.2.0", + "graceful-fs": "^4.2.9", + "handlebars": "^4.7.7" + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -84504,16 +84740,16 @@ } }, "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "dependencies": { @@ -84528,7 +84764,12 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" } } }, @@ -85410,7 +85651,6 @@ "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, "requires": { "minimist": "^1.2.5", "neo-async": "^2.6.0", @@ -85422,8 +85662,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -85617,7 +85856,6 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, "requires": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -85745,7 +85983,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -85890,15 +86127,27 @@ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" }, "http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "requires": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } } }, "http-parser-js": { @@ -88188,6 +88437,11 @@ "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", "dev": true }, + "jose": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.8.1.tgz", + "integrity": "sha512-+/hpTbRcCw9YC0TOfN1W47pej4a9lRmltdOVdRLz5FP5UvUq3CenhXjQK7u/8NdMIIShMXYAh9VLPhc7TjhvFw==" + }, "js-base64": { "version": "2.6.4", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", @@ -88586,6 +88840,25 @@ "immediate": "~3.0.5" } }, + "lightning-backends": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lightning-backends/-/lightning-backends-1.5.0.tgz", + "integrity": "sha512-mFGjAQ71QF++qrPFHtIFO6fS+EjkWPG3nabP2ijBKU4JfcCMi6vS+nolW6cy/XhtROCvXMdOa3b11xlir/8WZg==", + "requires": { + "@bleskomat/form": "1.2.6", + "async": "3.2.3", + "bolt11": "1.3.4", + "secp256k1": "4.0.3", + "socks-proxy-agent": "6.2.0" + }, + "dependencies": { + "async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" + } + } + }, "lilconfig": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", @@ -88805,6 +89078,113 @@ } } }, + "lnurl": { + "version": "0.24.1", + "resolved": "https://registry.npmjs.org/lnurl/-/lnurl-0.24.1.tgz", + "integrity": "sha512-Tzl8CZthjIbh2UAANGVIzYCJldUziPiurGHkBuVwaOKUhShPGegXP6y+AsbdypMndcc5qLTvT+bIolIbSfeSfg==", + "requires": { + "async": "3.2.3", + "bech32": "2.0.0", + "bignumber.js": "9.0.2", + "bolt11": "1.3.4", + "commander": "9.2.0", + "debug": "4.3.4", + "express": "4.18.0", + "lightning-backends": "1.5.0", + "lnurl-offline": "1.1.0", + "secp256k1": "4.0.3" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" + }, + "commander": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz", + "integrity": "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "express": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.0.tgz", + "integrity": "sha512-EJEXxiTQJS3lIPrU1AE2vRuT7X7E+0KBbpm5GSoK524yl0K8X+er8zS2P14E64eqsVNoWbMCT7MpmQ+ErAhgRg==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } + } + }, + "lnurl-offline": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/lnurl-offline/-/lnurl-offline-1.1.0.tgz", + "integrity": "sha512-BgcmwnuNtW6kJuMD9jrNAHnlx8R/qM9enZDrtO+PQcQAO10OJj45h8ageQa5VpjjsNtSzsd3hhlugKIJRmUTvw==" + }, "loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -89636,8 +90016,7 @@ "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" }, "minimatch": { "version": "3.1.2", @@ -89882,6 +90261,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -108628,6 +109013,11 @@ "tslib": "^2.0.3" } }, + "node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, "node-dir": { "version": "0.1.17", "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", @@ -108731,6 +109121,11 @@ } } }, + "node-gyp-build": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==" + }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -109184,9 +109579,9 @@ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "requires": { "ee-first": "1.1.1" } @@ -111044,9 +111439,12 @@ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" }, "qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==" + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "requires": { + "side-channel": "^1.0.4" + } }, "querystring": { "version": "0.2.1", @@ -111113,12 +111511,12 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", - "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "requires": { "bytes": "3.1.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -113232,6 +113630,16 @@ "integrity": "sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==", "dev": true }, + "secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "requires": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + } + }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -113277,23 +113685,23 @@ } }, "send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "dependencies": { "debug": { @@ -113307,14 +113715,24 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" } } }, @@ -113415,14 +113833,14 @@ } }, "serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.2" + "send": "0.18.0" } }, "serverless-offline": { @@ -115427,7 +115845,6 @@ "version": "3.15.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.4.tgz", "integrity": "sha512-vMOPGDuvXecPs34V74qDKk4iJ/SN4vL3Ow/23ixafENYvtrNvtbcgUeugTcUGRGsOF/5fU8/NYSL5Hyb3l1OJA==", - "dev": true, "optional": true }, "uint8array-tools": { @@ -115452,6 +115869,11 @@ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", "dev": true }, + "underscore": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.2.tgz", + "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==" + }, "undici": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/undici/-/undici-5.0.0.tgz", @@ -116814,8 +117236,7 @@ "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, "workbox-background-sync": { "version": "6.5.3", diff --git a/package.json b/package.json index 56e324f..a231460 100644 --- a/package.json +++ b/package.json @@ -24,14 +24,18 @@ "apollo-server-lambda": "^3.6.7", "axios": "^0.26.1", "chance": "^1.1.8", + "cookie": "^0.5.0", + "crypto": "^1.0.1", "dayjs": "^1.11.1", "env-cmd": "^10.1.0", "framer-motion": "^6.3.0", "fslightbox-react": "^1.6.2-2", "graphql": "^16.3.0", "invoices": "^2.0.6", + "jose": "^4.8.1", "linkify-html": "^3.0.5", "linkifyjs": "^3.0.5", + "lnurl": "^0.24.1", "lodash.debounce": "^4.0.8", "lodash.throttle": "^4.1.1", "marked": "^4.0.14", @@ -61,6 +65,7 @@ "react-tooltip": "^4.2.21", "react-topbar-progress-indicator": "^4.1.1", "remirror": "^1.0.77", + "secp256k1": "^4.0.3", "typescript": "^4.6.3", "web-vitals": "^2.1.4", "webln": "^0.3.0", diff --git a/prisma/migrations/20220601065659_add_pub_key_to_user/migration.sql b/prisma/migrations/20220601065659_add_pub_key_to_user/migration.sql new file mode 100644 index 0000000..b10c750 --- /dev/null +++ b/prisma/migrations/20220601065659_add_pub_key_to_user/migration.sql @@ -0,0 +1,23 @@ +/* + Warnings: + + - A unique constraint covering the columns `[pubKey]` on the table `User` will be added. If there are existing duplicate values, this will fail. + +*/ +-- AlterTable +ALTER TABLE "User" ADD COLUMN "email" TEXT, +ADD COLUMN "pubKey" TEXT, +ADD COLUMN "website" TEXT, +ALTER COLUMN "avatar" DROP NOT NULL, +ALTER COLUMN "name" DROP NOT NULL; + +-- CreateTable +CREATE TABLE "GeneratedK1" ( + "value" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "GeneratedK1_pkey" PRIMARY KEY ("value") +); + +-- CreateIndex +CREATE UNIQUE INDEX "User_pubKey_key" ON "User"("pubKey"); diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 4e98989..986a51d 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -36,10 +36,14 @@ model Vote { // ----------------- model User { - id Int @id @default(autoincrement()) - name String @unique + id Int @id @default(autoincrement()) + pubKey String? @unique + + name String? @unique + email String? + website String? lightning_address String? - avatar String + avatar String? stories Story[] questions Question[] @@ -199,3 +203,11 @@ model Donation { donor User? @relation(fields: [donor_id], references: [id]) donor_id Int? } + +// ----------------- +// Auth +// ----------------- +model GeneratedK1 { + value String @id + createdAt DateTime @default(now()) +} diff --git a/serverless.yml b/serverless.yml index 32db83f..d0b5d9d 100644 --- a/serverless.yml +++ b/serverless.yml @@ -22,3 +22,25 @@ functions: path: graphql method: get cors: true + login: + handler: functions/auth/login.handler + events: + - http: + path: auth/login + method: post + cors: true + - http: + path: auth/login + method: get + cors: true + logout: + handler: functions/auth/logout.handler + events: + - http: + path: auth/logout + method: post + cors: true + - http: + path: auth/logout + method: get + cors: true diff --git a/src/App.tsx b/src/App.tsx index bce69a8..d68aa07 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -6,6 +6,7 @@ import { Wallet_Service } from "./services"; import { Navigate, Route, Routes } from "react-router-dom"; import { useWrapperSetup } from "./utils/Wrapper"; import LoadingPage from "./Components/LoadingPage/LoadingPage"; +import LoginPage from "./features/Auth/pages/LoginPage"; // Pages const FeedPage = React.lazy(() => import("./features/Posts/pages/FeedPage/FeedPage")) @@ -56,6 +57,8 @@ function App() { } /> + } /> + } /> diff --git a/src/Components/Navbar/NavDesktop.tsx b/src/Components/Navbar/NavDesktop.tsx index ac30ef0..d332e87 100644 --- a/src/Components/Navbar/NavDesktop.tsx +++ b/src/Components/Navbar/NavDesktop.tsx @@ -14,7 +14,7 @@ import { ControlledMenu, } from '@szhsin/react-menu'; import '@szhsin/react-menu/dist/index.css'; -import { FiAward, FiChevronDown, FiFeather, FiMic } from "react-icons/fi"; +import { FiAward, FiChevronDown, FiFeather, FiLogIn, FiMic } from "react-icons/fi"; export default function NavDesktop() { @@ -137,6 +137,7 @@ export default function NavDesktop() {
+ } - + + Login +
{ + const stateChanged = Boolean(data.me) !== isLoggedIn; + if (stateChanged) + setIsPollilng(false); + + setIsLoggedIn(Boolean(data.me)); + } + }) + + + + useEffect(() => { + (async () => { + const res = await fetch(process.env.REACT_APP_AUTH_END_POINT! + '/login') + const data = await res.json() + setLoadingLnurl(false); + setLnurlAuth(data.encoded) + })() + }, []) + + const { startPolling, stopPolling } = meQuery; + useEffect(() => { + if (isPollilng) + startPolling(1500); + else + stopPolling(); + }, [isPollilng, startPolling, stopPolling]) + + + const onLogin = () => { + setIsPollilng(true); + } + + const logout = async () => { + await fetch(process.env.REACT_APP_AUTH_END_POINT! + '/logout', { + method: "GET", + 'credentials': "include" + }) + setIsPollilng(true); + } + + + return ( +
+ {loadingLnurl &&
+ +

Fetching Lnurl-Auth...

+
} + {!loadingLnurl && + (isLoggedIn ? +
+

+ Hello: @{meQuery.data?.me?.name.slice(0, 10)}... +

+ + +
: + + Login with Lightning + + )} +
+ ) +} diff --git a/src/features/Auth/pages/me.graphql b/src/features/Auth/pages/me.graphql new file mode 100644 index 0000000..6775f70 --- /dev/null +++ b/src/features/Auth/pages/me.graphql @@ -0,0 +1,7 @@ +query Me { + me { + id + name + avatar + } +} diff --git a/src/graphql/index.tsx b/src/graphql/index.tsx index 0c5282b..01e352b 100644 --- a/src/graphql/index.tsx +++ b/src/graphql/index.tsx @@ -193,6 +193,7 @@ export type Query = { getProject: Project; getTrendingPosts: Array; hottestProjects: Array; + me: Maybe; newProjects: Array; popularTopics: Array; projectsByCategory: Array; @@ -350,6 +351,11 @@ export type SearchProjectsQueryVariables = Exact<{ export type SearchProjectsQuery = { __typename?: 'Query', searchProjects: Array<{ __typename?: 'Project', id: number, thumbnail_image: string, title: string, category: { __typename?: 'Category', title: string, id: number } }> }; +export type MeQueryVariables = Exact<{ [key: string]: never; }>; + + +export type MeQuery = { __typename?: 'Query', me: { __typename?: 'User', id: number, name: string, avatar: string } | null }; + export type DonationsStatsQueryVariables = Exact<{ [key: string]: never; }>; @@ -536,6 +542,42 @@ export function useSearchProjectsLazyQuery(baseOptions?: Apollo.LazyQueryHookOpt export type SearchProjectsQueryHookResult = ReturnType; export type SearchProjectsLazyQueryHookResult = ReturnType; export type SearchProjectsQueryResult = Apollo.QueryResult; +export const MeDocument = gql` + query Me { + me { + id + name + avatar + } +} + `; + +/** + * __useMeQuery__ + * + * To run a query within a React component, call `useMeQuery` and pass it any options that fit your needs. + * When your component renders, `useMeQuery` returns an object from Apollo Client that contains loading, error, and data properties + * you can use to render your UI. + * + * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; + * + * @example + * const { data, loading, error } = useMeQuery({ + * variables: { + * }, + * }); + */ +export function useMeQuery(baseOptions?: Apollo.QueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useQuery(MeDocument, options); + } +export function useMeLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useLazyQuery(MeDocument, options); + } +export type MeQueryHookResult = ReturnType; +export type MeLazyQueryHookResult = ReturnType; +export type MeQueryResult = Apollo.QueryResult; export const DonationsStatsDocument = gql` query DonationsStats { getDonationsStats { diff --git a/src/utils/apollo.ts b/src/utils/apollo.ts index c356363..1fbc2ca 100644 --- a/src/utils/apollo.ts +++ b/src/utils/apollo.ts @@ -4,11 +4,12 @@ import { RetryLink } from "@apollo/client/link/retry"; let apiClientUri = '/.netlify/functions/graphql'; -if (process.env.REACT_APP_API_END_POINT) - apiClientUri = process.env.REACT_APP_API_END_POINT +if (process.env.REACT_APP_GRAPHQL_END_POINT) + apiClientUri = process.env.REACT_APP_GRAPHQL_END_POINT const httpLink = new HttpLink({ - uri: apiClientUri + uri: apiClientUri, + credentials: 'include' }); const errorLink = onError(({ graphQLErrors, networkError }) => {