diff --git a/README.md b/README.md index ffce6c34..ca63951c 100644 --- a/README.md +++ b/README.md @@ -281,6 +281,8 @@ serverlessExpress({ 'AWS_SQS': '/sqs' 'AWS_EVENTBRIDGE': '/eventbridge', 'AWS_KINESIS_DATA_STREAM': '/kinesis', + 'AWS_S3': '/s3', + 'AWS_STEP_FUNCTIONS': '/step-functions', } }) ``` diff --git a/src/configure.d.ts b/src/configure.d.ts index acfb24c4..05891a80 100644 --- a/src/configure.d.ts +++ b/src/configure.d.ts @@ -3,7 +3,7 @@ import { Handler } from 'aws-lambda'; import { Logger } from './logger'; import Framework from './frameworks'; -type EventSources = 'AWS_SNS' | 'AWS_DYNAMODB' | 'AWS_EVENTBRIDGE' | 'AWS_SQS' | 'AWS_KINESIS_DATA_STREAM' | 'AWS_S3'; +type EventSources = 'AWS_SNS' | 'AWS_DYNAMODB' | 'AWS_EVENTBRIDGE' | 'AWS_SQS' | 'AWS_KINESIS_DATA_STREAM' | 'AWS_S3' | 'AWS_STEP_FUNCTIONS'; interface EventSource { getRequest?: any; // TODO: diff --git a/src/event-sources/aws/step-functions.js b/src/event-sources/aws/step-functions.js new file mode 100644 index 00000000..b785aaef --- /dev/null +++ b/src/event-sources/aws/step-functions.js @@ -0,0 +1,27 @@ +const getRequestValuesFromStepFunctions = ({ event }) => { + const method = 'POST' + const headers = { host: 'stepfunctions.amazonaws.com' } + const body = event + + return { + method, + headers, + body + } +} + +const getResponseToStepFunctions = ({ + body, + isBase64Encoded = false +}) => { + if (isBase64Encoded) { + throw new Error('base64 encoding is not supported') + } + + return JSON.parse(body) +} + +module.exports = { + getRequest: getRequestValuesFromStepFunctions, + getResponse: getResponseToStepFunctions +} diff --git a/src/event-sources/azure/http-function-runtime-v4.js b/src/event-sources/azure/http-function-runtime-v4.js index 3aa86408..d3abc66a 100644 --- a/src/event-sources/azure/http-function-runtime-v4.js +++ b/src/event-sources/azure/http-function-runtime-v4.js @@ -1,6 +1,6 @@ const { getRequest, getResponse } = require('./http-function-runtime-v3') module.exports = { - getRequest: getRequest, - getResponse: getResponse + getRequest, + getResponse } diff --git a/src/event-sources/index.js b/src/event-sources/index.js index cff31555..ef7e6749 100644 --- a/src/event-sources/index.js +++ b/src/event-sources/index.js @@ -10,6 +10,7 @@ const azureHttpFunctionV4EventSource = require('./azure/http-function-runtime-v4 const awsEventBridgeEventSource = require('./aws/eventbridge') const awsKinesisEventSource = require('./aws/kinesis') const awsS3 = require('./aws/s3') +const awsStepFunctionsEventSource = require('./aws/step-functions') function getEventSource ({ eventSourceName }) { switch (eventSourceName) { @@ -37,6 +38,8 @@ function getEventSource ({ eventSourceName }) { return awsKinesisEventSource case 'AWS_S3': return awsS3 + case 'AWS_STEP_FUNCTIONS': + return awsStepFunctionsEventSource default: throw new Error('Couldn\'t detect valid event source.') } diff --git a/src/event-sources/utils.js b/src/event-sources/utils.js index 85669116..cc03f1b1 100644 --- a/src/event-sources/utils.js +++ b/src/event-sources/utils.js @@ -127,6 +127,10 @@ function getEventSourceNameBasedOnEvent ({ return 'AWS_EVENTBRIDGE' } + if (event.context && event.context.Execution && event.context.State && event.context.StateMachine) { + return 'AWS_STEP_FUNCTIONS' + } + throw new Error('Unable to determine event source based on event.') }