templates/Lambda4AppSyncSDK/index.mjs (69 lines of code) (raw):

import { NeptunedataClient, ExecuteOpenCypherQueryCommand, ExecuteGremlinQueryCommand } from "@aws-sdk/client-neptunedata"; import {resolveGraphDBQueryFromAppSyncEvent, refactorGremlinqueryOutput, initSchema} from './output.resolver.graphql.js'; import {readFileSync} from "fs"; const LOGGING_ENABLED = process.env.LOGGING_ENABLED; const config = { endpoint: `https://${process.env.NEPTUNE_HOST}:${process.env.NEPTUNE_PORT}` }; let client; function getClient() { if (client) { return client; } try { client = new NeptunedataClient(config); return client; } catch (error) { onError('new NeptunedataClient: ', error); } } function onError (location, error) { console.error(location, ': ', error.message); return { "error": [{ "message": error.message}] }; } export const handler = async(event) => { let r = null; let result = null; if (LOGGING_ENABLED) console.log(event); let resolver = { query:'', parameters:{}, language: 'opencypher', fieldsAlias: {} }; try { const schemaDataModelJSON = readFileSync('output.resolver.schema.json', 'utf-8'); let schemaModel = JSON.parse(schemaDataModelJSON); initSchema(schemaModel); resolver = resolveGraphDBQueryFromAppSyncEvent(event); if (LOGGING_ENABLED) console.log(JSON.stringify(resolver, null, 2)); } catch (error) { onError('Resolver: ', error); } if (resolver.language == 'gremlin') { try { const input = { gremlinQuery: resolver.query }; const command = new ExecuteGremlinQueryCommand(input); const response = await getClient().send(command); result = response["result"]["data"]; const refac = refactorGremlinqueryOutput(result, resolver.fieldsAlias) r = JSON.parse(refac); } catch (error) { onError('Gremlin query: ', error); } } if (resolver.language == 'opencypher') { try { const input = { openCypherQuery: resolver.query, parameters: JSON.stringify(resolver.parameters) }; const command = new ExecuteOpenCypherQueryCommand(input); const response = await getClient().send(command); result = response.results; r = result[0][Object.keys(result[0])]; } catch (error) { onError('openCypher query: ', error); } } return r; };