templates/ApolloServer/neptune.mjs (37 lines of code) (raw):

import axios from 'axios'; import * as rax from 'retry-axios'; import {aws4Interceptor} from 'aws4-axios'; import {fromNodeProviderChain} from '@aws-sdk/credential-providers'; import dotenv from 'dotenv'; import {queryNeptune} from './queryHttpNeptune.mjs' import {resolveGraphDBQueryFromEvent, initSchema} from "./output.resolver.graphql.js"; import {readFileSync} from "fs"; dotenv.config(); const loggingEnabled = process.env.LOGGING_ENABLED === 'true'; const credentialProvider = fromNodeProviderChain(); const credentials = await credentialProvider(); const interceptor = aws4Interceptor({ options: { region: process.env.AWS_REGION, service: process.env.NEPTUNE_TYPE, }, credentials: credentials }); axios.interceptors.request.use(interceptor); rax.attach(); export async function resolveEvent(event) { const schemaDataModelJSON = readFileSync('output.resolver.schema.json', 'utf-8'); let schemaModel = JSON.parse(schemaDataModelJSON); initSchema(schemaModel); const resolved = resolveGraphDBQueryFromEvent(event); try { return queryNeptune(`https://${process.env.NEPTUNE_HOST}:${process.env.NEPTUNE_PORT}`, resolved, {loggingEnabled: loggingEnabled}); } catch (err) { if (loggingEnabled) { console.error(err); } return { "error": [{"message": err}] }; } }