mirror of
https://github.com/apotdevin/thunderhub.git
synced 2025-02-21 22:11:37 +01:00
feat: initial commit
This commit is contained in:
parent
ee5ffe91fa
commit
46439a7c90
6 changed files with 4107 additions and 0 deletions
22
.gitignore
vendored
Normal file
22
.gitignore
vendored
Normal file
|
@ -0,0 +1,22 @@
|
|||
# dependencies
|
||||
/node_modules
|
||||
/.pnp
|
||||
.pnp.js
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
.env
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
11
helpers/helpers.js
Normal file
11
helpers/helpers.js
Normal file
|
@ -0,0 +1,11 @@
|
|||
exports.getIp = req => {
|
||||
if (!req || !req.headers) {
|
||||
return "";
|
||||
}
|
||||
const forwarded = req.headers["x-forwarded-for"];
|
||||
const before = forwarded
|
||||
? forwarded.split(/, /)[0]
|
||||
: req.connection.remoteAddress;
|
||||
const ip = process.env.NODE_ENV === "development" ? "1.2.3.4" : before;
|
||||
return ip;
|
||||
};
|
35
helpers/logger.js
Normal file
35
helpers/logger.js
Normal file
|
@ -0,0 +1,35 @@
|
|||
const { createLogger, format, transports } = require("winston");
|
||||
const path = require("path");
|
||||
require("dotenv").config();
|
||||
|
||||
const combinedFormat =
|
||||
process.env.NODE_ENV === "development"
|
||||
? format.combine(
|
||||
format.label({
|
||||
label: path.basename(process.mainModule.filename)
|
||||
}),
|
||||
format.colorize(),
|
||||
format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" }),
|
||||
format.printf(
|
||||
info =>
|
||||
`${info.timestamp} ${info.level} [${info.label}]: ${info.message}`
|
||||
)
|
||||
)
|
||||
: format.combine(
|
||||
format.label({
|
||||
label: path.basename(process.mainModule.filename)
|
||||
}),
|
||||
format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" }),
|
||||
format.printf(
|
||||
info =>
|
||||
`${info.timestamp} ${info.level} [${info.label}]: ${info.message}`
|
||||
)
|
||||
);
|
||||
|
||||
const logger = createLogger({
|
||||
level: process.env.LOG_LEVEL || "silly",
|
||||
format: combinedFormat,
|
||||
transports: [new transports.Console()]
|
||||
});
|
||||
|
||||
module.exports = logger;
|
62
index.js
Normal file
62
index.js
Normal file
|
@ -0,0 +1,62 @@
|
|||
const { ApolloServer } = require("apollo-server");
|
||||
var { GraphQLSchema } = require("graphql");
|
||||
var { GraphQLObjectType } = require("graphql");
|
||||
var { GraphQLString } = require("graphql");
|
||||
|
||||
const depthLimit = require("graphql-depth-limit");
|
||||
const logger = require("./helpers/logger");
|
||||
const { getIp } = require("./helpers/helpers");
|
||||
const lnService = require("ln-service");
|
||||
require("dotenv").config();
|
||||
|
||||
const GraphqlSchema = new GraphQLSchema({
|
||||
query: new GraphQLObjectType({
|
||||
name: "Query",
|
||||
fields: {
|
||||
success: {
|
||||
type: GraphQLString,
|
||||
resolve: () => {
|
||||
return "It was a success!";
|
||||
}
|
||||
},
|
||||
warning: {
|
||||
type: GraphQLString,
|
||||
resolve: () => {
|
||||
return "You have a warning.";
|
||||
}
|
||||
},
|
||||
error: {
|
||||
type: GraphQLString,
|
||||
resolve: () => {
|
||||
return "Error occurred!";
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
const { lnd } = lnService.authenticatedLndGrpc({
|
||||
macaroon: process.env.LND_MAC,
|
||||
socket: process.env.LND_IP
|
||||
});
|
||||
logger.info("Connection established with gRPC");
|
||||
|
||||
lnService.getWalletInfo({ lnd }, (error, result) => {
|
||||
logger.info(`Connected to node: ${result.alias}`);
|
||||
if (error) logger.error(`Error connecting to node: ${error}`);
|
||||
});
|
||||
|
||||
const server = new ApolloServer({
|
||||
schema: GraphqlSchema,
|
||||
context: async ({ req }) => {
|
||||
const ip = getIp(req);
|
||||
return { ip, lnd };
|
||||
},
|
||||
validationRules: [
|
||||
depthLimit(2, { ignore: [/_trusted$/, "idontcare", "whatever"] })
|
||||
]
|
||||
});
|
||||
|
||||
server.listen({ port: process.env.PORT || 3001 }).then(({ url }) => {
|
||||
logger.info(`Server ready at ${url}`);
|
||||
});
|
3935
package-lock.json
generated
Normal file
3935
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
42
package.json
Normal file
42
package.json
Normal file
|
@ -0,0 +1,42 @@
|
|||
{
|
||||
"name": "thunderhub",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"start": "node server.js",
|
||||
"dev": "nodemon server.js"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/apotdevin/thunderhub.git"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"bugs": {
|
||||
"url": "https://github.com/apotdevin/thunderhub/issues"
|
||||
},
|
||||
"homepage": "https://github.com/apotdevin/thunderhub#readme",
|
||||
"dependencies": {
|
||||
"apollo-server": "^2.9.7",
|
||||
"dotenv": "^8.2.0",
|
||||
"graphql": "^14.5.8",
|
||||
"graphql-depth-limit": "^1.1.0",
|
||||
"graphql-iso-date": "^3.6.1",
|
||||
"graphql-rate-limit": "^2.0.1",
|
||||
"ln-service": "^46.6.0",
|
||||
"winston": "^3.2.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"husky": "^3.0.9",
|
||||
"prettier": "^1.18.2",
|
||||
"pretty-quick": "^2.0.0"
|
||||
},
|
||||
"husky": {
|
||||
"hooks": {
|
||||
"pre-commit": "pretty-quick --staged"
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue