feat: initial commit

This commit is contained in:
AP 2019-11-02 21:25:47 +01:00
parent ee5ffe91fa
commit 46439a7c90
6 changed files with 4107 additions and 0 deletions

22
.gitignore vendored Normal file
View 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
View 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
View 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
View 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

File diff suppressed because it is too large Load diff

42
package.json Normal file
View 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"
}
}
}