import { Lambda } from 'aws-sdk'; const lambda = new Lambda({ region: 'us-east-1' }); /** * Invokes the function and returns the parsed body * @param {[type]} functionName [description] * @param {[type]} body [description] * @return {[type]} [description] */ export async function invoke(functionName: string, body: object | string): Promise { return lambda .invoke({ FunctionName: functionName, Payload: createPayload(body), }) .promise() .then(data => parseResponse(functionName, data)); } /** * Invokes the event * @param {[type]} functionName [description] * @param {[type]} body [description] * @return {[type]} [description] */ export async function invokeEvent(functionName: string, body: object | string): Promise { return lambda .invoke({ FunctionName: functionName, InvocationType: 'Event', Payload: createPayload(body), }) .promise() .then(data => data.StatusCode === 200); } ///////////////////////////// function createPayload(body: object | string): string { if (body === undefined) return undefined; else if (typeof body === 'string') { return body; } else if (typeof body === 'object') { return JSON.stringify(body); } } function parseResponse(functionName: string, res: Lambda.InvocationResponse): any { let result; if (res.StatusCode === 200) { result = JSON.parse(res.Payload.toString()); } if (!result) { return; } // errors will be serialized with errorMessage, errorType, and stack properties if (result.errorMessage) { let error = new Error(`Invocation of ${functionName} failed.`); console.log(result); error.stack = result.stack; throw error; } else { return result; } }