Update resolvers
This commit is contained in:
1 parent
3c0addf28b
commit
1e46138af9
16 files changed
+2299
-128
No files matched your search
+5
-1
@@ -25,4 +25,8 @@ SG_TEAMS_TEAMCREATE_EMAILID=sg-teams-teamcreate-template-id
|
||||
#SendGrid Origins
|
||||
SG_PLATFORM_ORIGIN=https://platform-dev.advancedalgos.net
|
||||
# SG_PLATFORM_ORIGIN=https://platform.advancedalgos.net
|
||||
SG_CORPORATE_ORIGIN=https://advancedalgos.net
|
||||
SG_CORPORATE_ORIGIN=http://localhost:3999
|
||||
# SG_CORPORATE_ORIGIN=https://advancedalgos.net
|
||||
|
||||
# Google ReCaptcha
|
||||
RECAPTCHA=google-recaptcha-secret
|
||||
@@ -1,12 +0,0 @@
|
||||
projects:
|
||||
app:
|
||||
schemaPath: src/schema.graphql
|
||||
extensions:
|
||||
endpoints:
|
||||
dev1:
|
||||
url: http://localhost:4001/graphql
|
||||
|
||||
database:
|
||||
schemaPath: src/generated/prisma.graphql
|
||||
extensions:
|
||||
prisma: database/prisma.yml
|
||||
Generated
+2177
File diff suppressed because it is too large.
Load diff
+3
-1
@@ -2,7 +2,7 @@
|
||||
"name": "aa-notifications-server",
|
||||
"scripts": {
|
||||
"start": "NODE_ENV=production nodemon -e js,graphql -x node -r dotenv/config src/index.js",
|
||||
"debug": "nodemon src/index.js --watch ./src --exec \"node --require @babel/register --require dotenv/config\"",
|
||||
"debug": "nodemon --trace-warnings src/index.js --watch ./src --exec \"node --require @babel/register --require dotenv/config\"",
|
||||
"playground": "graphql playground --dotenv dotenv/config",
|
||||
"dev": "npm-run-all --parallel debug playground"
|
||||
},
|
||||
@@ -36,7 +36,9 @@
|
||||
"@babel/preset-env": "^7.2.0",
|
||||
"@babel/register": "^7.0.0",
|
||||
"dotenv": "^6.2.0",
|
||||
"graphql-cli": "^2.17.0",
|
||||
"nodemon": "^1.18.7",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"winston": "^3.1.0"
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@ import http from 'http'
|
||||
import { ApolloServer, makeExecutableSchema } from 'apollo-server-express'
|
||||
import { applyMiddleware as applyGraphQLMiddleware } from 'graphql-middleware'
|
||||
import { moduleAuth } from './middleware'
|
||||
import { logger } from './logger'
|
||||
import logger from './logger'
|
||||
|
||||
/**
|
||||
*
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { ApolloError } from 'apollo-server-express'
|
||||
import { inspect } from 'util'
|
||||
import { logger } from '../logger'
|
||||
import logger from '../logger'
|
||||
|
||||
export {
|
||||
ApolloError,
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
import { Corporate_NewsletterSignup, Corporate_NewsletterSignupVerify, Corporate_Contact } from './sendgrid/corporate'
|
||||
import { Master_NewsletterSignup, Master_NewsletterSignupVerify, Master_Feedback } from './sendgrid/master'
|
||||
import { Teams_SendTeamMemberInvite, Teams_VerifyTeamMemberInviteToken, Teams_SendTeamCreateConfirmation } from './sendgrid/teams'
|
||||
import Corporate from './sendgrid/corporate'
|
||||
import Master from './sendgrid/master'
|
||||
import Teams from './sendgrid/teams'
|
||||
|
||||
export const resolvers = {
|
||||
Mutation: {
|
||||
Corporate_NewsletterSignup: (parent, arg, ctx, info) => Corporate_NewsletterSignup(parent, arg, ctx, info),
|
||||
Corporate_NewsletterSignupVerify: (parent, arg, ctx, info) => Corporate_NewsletterSignupVerify(parent, arg, ctx, info),
|
||||
Corporate_Contact: (parent, arg, ctx, info) => Corporate_Contact(parent, arg, ctx, info),
|
||||
Master_NewsletterSignup: (parent, arg, ctx, info) => Master_NewsletterSignup(parent, arg, ctx, info),
|
||||
Master_NewsletterSignupVerify: (parent, arg, ctx, info) => Master_NewsletterSignupVerify(parent, arg, ctx, info),
|
||||
Master_Feedback: (parent, arg, ctx, info) => Master_Feedback(parent, arg, ctx, info),
|
||||
Teams_SendTeamMemberInvite: (parent, arg, ctx, info) => Teams_SendTeamMemberInvite(parent, arg, ctx, info),
|
||||
Teams_VerifyTeamMemberInviteToken: (parent, arg, ctx, info) => Teams_VerifyTeamMemberInviteToken(parent, arg, ctx, info),
|
||||
Teams_SendTeamCreateConfirmation: (parent, arg, ctx, info) => Teams_SendTeamCreateConfirmation(parent, arg, ctx, info)
|
||||
Corporate_NewsletterSignup: (parent, arg, ctx, info) => Corporate.Corporate_NewsletterSignup(parent, arg, ctx, info),
|
||||
Corporate_NewsletterSignupVerify: (parent, arg, ctx, info) => Corporate.Corporate_NewsletterSignupVerify(parent, arg, ctx, info),
|
||||
Corporate_Contact: (parent, arg, ctx, info) => Corporate.Corporate_Contact(parent, arg, ctx, info),
|
||||
Master_NewsletterSignup: (parent, arg, ctx, info) => Master.Master_NewsletterSignup(parent, arg, ctx, info),
|
||||
Master_NewsletterSignupVerify: (parent, arg, ctx, info) => Master.Master_NewsletterSignupVerify(parent, arg, ctx, info),
|
||||
Master_Feedback: (parent, arg, ctx, info) => Master.Master_Feedback(parent, arg, ctx, info),
|
||||
Teams_SendTeamMemberInvite: (parent, arg, ctx, info) => Teams.Teams_SendTeamMemberInvite(parent, arg, ctx, info),
|
||||
Teams_VerifyTeamMemberInviteToken: (parent, arg, ctx, info) => Teams.Teams_VerifyTeamMemberInviteToken(parent, arg, ctx, info),
|
||||
Teams_SendTeamCreateConfirmation: (parent, arg, ctx, info) => Teams.Teams_SendTeamCreateConfirmation(parent, arg, ctx, info)
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@ import axios from 'axios'
|
||||
import jwt from 'jsonwebtoken'
|
||||
import { ApolloError } from 'apollo-server-express'
|
||||
|
||||
import logger from '../../logger'
|
||||
import logger from '../../../../logger'
|
||||
|
||||
const API_KEY = process.env.SG_APIKEY
|
||||
const API_KEY_CAMPAIGN = process.env.SG_APIKEY_CAMPAIGN
|
||||
@@ -12,10 +12,10 @@ const origin = process.env.SG_CORPORATE_ORIGIN
|
||||
|
||||
export default {
|
||||
async Corporate_NewsletterSignup(parent, { email }, ctx, info) {
|
||||
logger.debug('Corporate_NewsletterSignup params email:')
|
||||
logger.debug(email)
|
||||
logger.info('Corporate_NewsletterSignup params email:')
|
||||
logger.info(email)
|
||||
const token = jwt.sign({ email: email }, API_KEY, { expiresIn: '1d' })
|
||||
const params = '/email-verification?token='
|
||||
const params = '/email-verification.shtml?token='
|
||||
|
||||
const data = JSON.stringify({
|
||||
"personalizations": [
|
||||
@@ -53,8 +53,8 @@ export default {
|
||||
}
|
||||
})
|
||||
.then(function (response) {
|
||||
logger.debug('Sendgrid sendVerify response:')
|
||||
logger.debug(response)
|
||||
logger.info('Sendgrid sendVerify response:')
|
||||
logger.info(response)
|
||||
if (response.status >= 200 && response.status < 300) {
|
||||
return 'SUCCESS'
|
||||
} else {
|
||||
@@ -82,8 +82,8 @@ export default {
|
||||
throw new ApolloError(`Error: ${err.message}`, 400)
|
||||
}
|
||||
}
|
||||
logger.debug('Sendgrid verifySignup verifiedToken: ')
|
||||
logger.debug(verifiedToken)
|
||||
logger.info('Sendgrid verifySignup verifiedToken: ')
|
||||
logger.info(verifiedToken)
|
||||
|
||||
const email = verifiedToken.email
|
||||
|
||||
@@ -97,8 +97,8 @@ export default {
|
||||
}
|
||||
})
|
||||
.then(response => {
|
||||
logger.debug('Sendgrid verifySignup subscribe: ')
|
||||
logger.debug(response)
|
||||
logger.info('Sendgrid verifySignup subscribe: ')
|
||||
logger.info(response)
|
||||
const recipients = response.data.persisted_recipients
|
||||
|
||||
if (recipients.length > 0 ){
|
||||
@@ -111,8 +111,8 @@ export default {
|
||||
}
|
||||
})
|
||||
.then(response => {
|
||||
logger.debug('Sendgrid verifySignup addToList: ')
|
||||
logger.debug(response)
|
||||
logger.info('Sendgrid verifySignup addToList: ')
|
||||
logger.info(response)
|
||||
if (response.status >= 200 && response.status < 300) {
|
||||
return 'SUCCESS'
|
||||
} else {
|
||||
@@ -140,8 +140,8 @@ export default {
|
||||
return subscribe
|
||||
},
|
||||
|
||||
async Corporate_Contact(parent, { email, subject, message, recaptcha }, ctx, info) {
|
||||
const toEmail = 'feedback@advancedalgos.net'
|
||||
async Corporate_Contact(parent, { email, name, message, recaptcha }, ctx, info) {
|
||||
const toEmail = 'barrylow@gmail.com'// 'feedback@advancedalgos.net'
|
||||
|
||||
const data = JSON.stringify({
|
||||
"personalizations": [
|
||||
@@ -179,7 +179,7 @@ export default {
|
||||
}
|
||||
})
|
||||
.then(function (response) {
|
||||
logger.info(response.data)
|
||||
logger.info(response)
|
||||
if (response.status >= 200 && response.status < 300 && response.data.success) {
|
||||
return axios({
|
||||
method: 'post',
|
||||
@@ -191,8 +191,8 @@ export default {
|
||||
}
|
||||
})
|
||||
.then(function (response) {
|
||||
logger.debug('Sendgrid Contact response: ')
|
||||
logger.debug(response)
|
||||
logger.info('Sendgrid Contact response: ')
|
||||
logger.info(response)
|
||||
if (response.status >= 200 && response.status < 300) {
|
||||
return `Corporate Contact email sent`
|
||||
} else {
|
||||
@@ -204,7 +204,9 @@ export default {
|
||||
throw `Corporate Contact email send error: ${error.response.data.errors[0].message}`
|
||||
})
|
||||
}else{
|
||||
throw response.data
|
||||
logger.info('Corporate Contact recaptcha error')
|
||||
logger.info(response.data)
|
||||
throw { response: { data: JSON.stringify(response.data) } }
|
||||
}
|
||||
})
|
||||
.then(function(response){
|
||||
@@ -213,7 +215,7 @@ export default {
|
||||
.catch(function (error) {
|
||||
logger.error('Sendgrid Corporate Contact RECAPTCHA Error:')
|
||||
logger.error(error)
|
||||
throw new ApolloError(`Sendgrid Corporate Contact RECAPTCHA Error: ${error.response.data.errors[0].message}`, 404)
|
||||
throw new ApolloError(`Sendgrid Corporate Contact RECAPTCHA Error: ${error.response.data}`, 404)
|
||||
})
|
||||
|
||||
return checkCaptcha
|
||||
|
||||
@@ -3,7 +3,7 @@ import axios from 'axios'
|
||||
import jwt from 'jsonwebtoken'
|
||||
import { ApolloError } from 'apollo-server-express'
|
||||
|
||||
import logger from '../../logger'
|
||||
import logger from '../../../../logger'
|
||||
|
||||
const API_KEY = process.env.SG_APIKEY
|
||||
const API_KEY_CAMPAIGN = process.env.SG_APIKEY_CAMPAIGN
|
||||
@@ -12,8 +12,8 @@ const origin = process.env.SG_PLATFORM_ORIGIN
|
||||
|
||||
export default {
|
||||
async Master_NewsletterSignup(parent, { email }, ctx, info) {
|
||||
logger.debug('Master_NewsletterSignup params email:')
|
||||
logger.debug(email)
|
||||
logger.info('Master_NewsletterSignup params email:')
|
||||
logger.info(email)
|
||||
const token = jwt.sign({ email: email }, API_KEY, { expiresIn: '1d' })
|
||||
const params = '/email-verification?token='
|
||||
|
||||
@@ -53,8 +53,8 @@ export default {
|
||||
}
|
||||
})
|
||||
.then(function (response) {
|
||||
logger.debug('Sendgrid Master SendVerify response:')
|
||||
logger.debug (response)
|
||||
logger.info('Sendgrid Master SendVerify response:')
|
||||
logger.info (response)
|
||||
if (response.status >= 200 && response.status < 300) {
|
||||
return 'SUCCESS'
|
||||
} else {
|
||||
@@ -81,8 +81,8 @@ export default {
|
||||
throw new ApolloError(`Error: ${err.message}`, 400)
|
||||
}
|
||||
}
|
||||
logger.debug('Sendgrid Master verifySignup verifiedToken: ')
|
||||
logger.debug(verifiedToken)
|
||||
logger.info('Sendgrid Master verifySignup verifiedToken: ')
|
||||
logger.info(verifiedToken)
|
||||
|
||||
const email = verifiedToken.email
|
||||
|
||||
@@ -189,8 +189,8 @@ export default {
|
||||
}
|
||||
})
|
||||
.then(function (response) {
|
||||
logger.debug('Platform Feedback response: ')
|
||||
logger.debug(response)
|
||||
logger.info('Platform Feedback response: ')
|
||||
logger.info(response)
|
||||
if (response.status >= 200 && response.status < 300) {
|
||||
return `Platform Feedback email sent`
|
||||
} else {
|
||||
|
||||
@@ -3,7 +3,7 @@ import axios from 'axios'
|
||||
import jwt from 'jsonwebtoken'
|
||||
import { ApolloError } from 'apollo-server-express'
|
||||
|
||||
import logger from '../../logger'
|
||||
import logger from '../../../../logger'
|
||||
|
||||
const API_KEY = process.env.SG_APIKEY
|
||||
const API_KEY_CAMPAIGN = process.env.SG_APIKEY_CAMPAIGN
|
||||
@@ -12,8 +12,8 @@ const origin = process.env.SG_PLATFORM_ORIGIN
|
||||
|
||||
export default {
|
||||
async Teams_SendTeamMemberInvite(parent, { email, teamName }, ctx, info) {
|
||||
logger.debug('Teams_NewsletterSignup params email:')
|
||||
logger.debug(email)
|
||||
logger.info('Teams_NewsletterSignup params email:')
|
||||
logger.info(email)
|
||||
const token = jwt.sign({ email: email }, API_KEY, { expiresIn: '1d' })
|
||||
const params = '/email-verification?token='
|
||||
|
||||
@@ -127,7 +127,7 @@ export default {
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
throw new ApolloError(`Team Creation Confirmation Error: ${error.response.data.errors[0].message}`, ${error.status})
|
||||
throw new ApolloError(`Team Creation Confirmation Error: ${error.response.data.errors[0].message}`)
|
||||
})
|
||||
return sendTeamCreation
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { logger } from '../../../logger'
|
||||
import logger from '../../../logger'
|
||||
|
||||
export const resolvers = {
|
||||
Query: {
|
||||
_blank: (parent, arg, ctx, info) => { return '' }
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
// import merge from 'lodash.merge'
|
||||
import merge from 'lodash.merge'
|
||||
|
||||
// import { resolvers as queryResolvers } from './Query'
|
||||
import { resolvers as queryResolvers } from './Query'
|
||||
import { resolvers as mutationResolvers } from './Mutation'
|
||||
|
||||
// export const resolvers = merge(mutationResolvers)
|
||||
export const resolvers = mutationResolvers
|
||||
export const resolvers = merge(queryResolvers, mutationResolvers)
|
||||
@@ -1,10 +1,15 @@
|
||||
type Query {
|
||||
_blank: String
|
||||
}
|
||||
|
||||
type Mutation {
|
||||
Corporate_NewsletterSignup(email: String!): String
|
||||
Corporate_NewsletterSignupVerify(token: String!): String
|
||||
Corporate_Contact(email: String!, subject: String!, Message: String!, recaptcha: String!): String
|
||||
Corporate_Contact(email: String!, name: String, message: String!, recaptcha: String!): String
|
||||
Master_NewsletterSignup(email: String!): String
|
||||
Master_NewsletterSignupVerify(token: String!): String
|
||||
Master_Contact(email: String!, subject: String!, Message: String!, recaptcha: String!): String
|
||||
Master_Feedback(email: String!, subject: String!, message: String!, recaptcha: String!): String
|
||||
Teams_SendTeamMemberInvite(email: String!, teamName: String!): String
|
||||
Teams_SendTeamCreateConfirmation(email: String!, teamName: String!, botName: String!): String
|
||||
Teams_VerifyTeamMemberInviteToken(token: String!): String
|
||||
}
|
||||
+22
-37
@@ -3,38 +3,20 @@ require('dotenv').config();
|
||||
import express from 'express'
|
||||
import createApolloServer from './ApolloServer'
|
||||
import { formatError } from './errors'
|
||||
import {
|
||||
Prisma,
|
||||
extractFragmentReplacements,
|
||||
forwardTo
|
||||
} from 'prisma-binding'
|
||||
import { makeExecutableSchema } from 'graphql-tools'
|
||||
import { importSchema } from 'graphql-import'
|
||||
import parser from 'fast-xml-parser'
|
||||
import axios from 'axios'
|
||||
|
||||
import { resolvers } from './graphql/resolvers'
|
||||
|
||||
import { schemaDirectives } from './directives'
|
||||
|
||||
import pubsub from './pubsub'
|
||||
import { logger } from './logger'
|
||||
import logger from './logger'
|
||||
|
||||
import wrongPreshared from './errors/notAllowed.json'
|
||||
|
||||
const GRAPHQL_ENDPOINT = '/graphql'
|
||||
const GRAPHQL_SUBSCRIPTIONS = '/graphql'
|
||||
const PORT = 4001
|
||||
const PORT = process.env.PORT
|
||||
const NODE_ENV = 'development'
|
||||
|
||||
const db = new Prisma({
|
||||
fragmentReplacements: extractFragmentReplacements(resolvers),
|
||||
typeDefs: 'src/generated/prisma.graphql',
|
||||
endpoint: process.env.PRISMA_ENDPOINT,
|
||||
secret: process.env.PRISMA_SECRET,
|
||||
debug: false
|
||||
})
|
||||
|
||||
const app = express()
|
||||
|
||||
app.post(GRAPHQL_ENDPOINT, (req, res, next) => {
|
||||
@@ -55,30 +37,33 @@ const corsOptions = {
|
||||
}
|
||||
|
||||
const options = {
|
||||
port: 4001,
|
||||
port: PORT,
|
||||
cors: corsOptions,
|
||||
endpoint: '/graphql',
|
||||
subscriptions: '/graphql',
|
||||
playground: '/graphiql'
|
||||
}
|
||||
|
||||
const server = createApolloServer(app, {
|
||||
graphqlEndpoint: GRAPHQL_ENDPOINT,
|
||||
subscriptionsEndpoint: GRAPHQL_SUBSCRIPTIONS,
|
||||
apolloServerOptions: { formatError },
|
||||
typeDefs: importSchema('src/graphql/schema.graphql'),
|
||||
resolvers,
|
||||
resolverValidationOptions: { requireResolversForResolveType: false },
|
||||
schemaDirectives,
|
||||
context: req => ({
|
||||
...req ,
|
||||
token: req.headers ? req.headers : undefined,
|
||||
user: req.user ? req.user : undefined,
|
||||
userId: (req.headers && req.headers.userid) ? req.headers.userid : undefined,
|
||||
db,
|
||||
pubsub
|
||||
let server
|
||||
try {
|
||||
server = createApolloServer(app, {
|
||||
graphqlEndpoint: GRAPHQL_ENDPOINT,
|
||||
subscriptionsEndpoint: GRAPHQL_SUBSCRIPTIONS,
|
||||
apolloServerOptions: { formatError },
|
||||
typeDefs: importSchema('src/graphql/schema.graphql'),
|
||||
resolvers,
|
||||
resolverValidationOptions: { requireResolversForResolveType: false },
|
||||
context: req => ({
|
||||
...req ,
|
||||
token: req.headers ? req.headers : undefined,
|
||||
user: req.user ? req.user : undefined,
|
||||
userId: (req.headers && req.headers.userid) ? req.headers.userid : undefined
|
||||
})
|
||||
})
|
||||
})
|
||||
} catch (err) {
|
||||
logger.error('Create Apollo Server Error: ')
|
||||
logger.error(err)
|
||||
}
|
||||
|
||||
server.listen({ port: PORT }, () => {
|
||||
logger.info(
|
||||
|
||||
+31
-23
@@ -1,33 +1,41 @@
|
||||
import { createLogger, format, transports } from 'winston'
|
||||
import { inspect } from 'util'
|
||||
|
||||
import { AuthenticationError, ApolloError, DatabaseError, WrongArgumentsError, ServiceUnavailableError, ConflictError } from './errors'
|
||||
const { combine, timestamp, simple } = format
|
||||
|
||||
class LoggerService {
|
||||
constructor() {
|
||||
const winstonTransports = [
|
||||
new transports.Console({
|
||||
format: format.combine(
|
||||
const options = {
|
||||
file: {
|
||||
level: 'info',
|
||||
filename: '../logs/app.log',
|
||||
handleExceptions: true,
|
||||
json: true,
|
||||
maxsize: 5242880, // 5MB
|
||||
maxFiles: 5,
|
||||
colorize: false,
|
||||
timestamp: true
|
||||
},
|
||||
console: {
|
||||
level: 'info',
|
||||
handleExceptions: true,
|
||||
json: false,
|
||||
colorize: true,
|
||||
}
|
||||
}
|
||||
|
||||
const logger = createLogger({
|
||||
level: 'info',
|
||||
format: format.combine(
|
||||
format.colorize(),
|
||||
format.timestamp({ format: 'YY/MM/DD HH:mm' }),
|
||||
format.printf(
|
||||
info => `${info.timestamp} - ${info.level}: ${JSON.parse(JSON.stringify(inspect(info.message)))}`
|
||||
)
|
||||
),
|
||||
}),
|
||||
]
|
||||
),
|
||||
transports: [
|
||||
new transports.File(options.file),
|
||||
new transports.Console(options.console)
|
||||
],
|
||||
exitOnError: false // do not exit on handled exceptions
|
||||
})
|
||||
|
||||
const logger = createLogger({
|
||||
level: 'info',
|
||||
transports: winstonTransports,
|
||||
exceptionHandlers: winstonTransports,
|
||||
})
|
||||
|
||||
return new Proxy(this, {
|
||||
get: (target, propKey) => logger[propKey],
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
export const logger = new LoggerService() // Default logger
|
||||
export { LoggerService, AuthenticationError, ApolloError, ConflictError, DatabaseError, WrongArgumentsError, ServiceUnavailableError }
|
||||
export default logger
|
||||
@@ -1,4 +1,4 @@
|
||||
import { logger } from '../logger'
|
||||
import logger from '../logger'
|
||||
|
||||
export const moduleAuth = async (req, res, next, db) => {
|
||||
if (req.headers.preshared === process.env.PRESHARED_GATEWAY_KEY) {
|
||||
|
||||
Reference in new issue
Block a user