templates/Lambda4AppSyncHTTP/index.mjs (52 lines of code) (raw):
import axios from "axios";
import * as rax from 'retry-axios';
import { aws4Interceptor } from "aws4-axios";
import {resolveGraphDBQueryFromAppSyncEvent, initSchema} from './output.resolver.graphql.js';
import {queryNeptune} from "./queryHttpNeptune.mjs";
import {readFileSync} from "fs";
const LOGGING_ENABLED = process.env.LOGGING_ENABLED;
const {
AWS_ACCESS_KEY_ID,
AWS_SECRET_ACCESS_KEY,
AWS_SESSION_TOKEN,
AWS_REGION
} = process.env;
if (process.env.NEPTUNE_IAM_AUTH_ENABLED === 'true') {
let serviceName;
if (process.env.NEPTUNE_TYPE) {
serviceName = process.env.NEPTUNE_TYPE;
} else {
console.log('NEPTUNE_TYPE environment variable is not set - defaulting to neptune-db');
serviceName = 'neptune-db';
}
const interceptor = aws4Interceptor({
options: {
region: AWS_REGION,
service: serviceName,
},
credentials: {
accessKeyId: AWS_ACCESS_KEY_ID,
secretAccessKey: AWS_SECRET_ACCESS_KEY,
sessionToken: AWS_SESSION_TOKEN
}
});
axios.interceptors.request.use(interceptor);
}
rax.attach();
export const handler = async (event) => {
// Create Neptune query from GraphQL query
try {
if (LOGGING_ENABLED) console.log("Event: ", event);
const schemaDataModelJSON = readFileSync('output.resolver.schema.json', 'utf-8');
let schemaModel = JSON.parse(schemaDataModelJSON);
initSchema(schemaModel);
const resolver = resolveGraphDBQueryFromAppSyncEvent(event);
if (LOGGING_ENABLED) console.log("Resolver: ", resolver);
return queryNeptune(`https://${process.env.NEPTUNE_HOST}:${process.env.NEPTUNE_PORT}`, resolver, {loggingEnabled: LOGGING_ENABLED})
} catch (err) {
if (LOGGING_ENABLED) console.error(err);
return {
"error": [{ "message": err}]
};
}
};