diff --git a/README.md b/README.md index d771e09..d899eab 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,8 @@ The following event types are supported in addition to API Gateway events. | `@DynamoDB()` | `DynamoDBStreamEvent` | | `@Kinesis()` | `KinesisStreamEvent` | | `@EventBridge()` | `EventBridgeEvent` | +| `@S3()` | `S3Event` | +| `@SNS()` | `SNSEvent` | > [See more documentation about the supported event handler decorators here.](https://vacasaoss.github.io/lambaa/modules.html) diff --git a/docs/assets/search.js b/docs/assets/search.js index 81779b5..2233b9e 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = JSON.parse("{\"kinds\":{\"64\":\"Function\",\"128\":\"Class\",\"256\":\"Interface\",\"512\":\"Constructor\",\"1024\":\"Property\",\"2048\":\"Method\",\"65536\":\"Type literal\",\"4194304\":\"Type alias\"},\"rows\":[{\"id\":0,\"kind\":64,\"name\":\"Use\",\"url\":\"modules.html#Use\",\"classes\":\"tsd-kind-function tsd-has-type-parameter\"},{\"id\":1,\"kind\":64,\"name\":\"Route\",\"url\":\"modules.html#Route\",\"classes\":\"tsd-kind-function\"},{\"id\":2,\"kind\":64,\"name\":\"Controller\",\"url\":\"modules.html#Controller\",\"classes\":\"tsd-kind-function\"},{\"id\":3,\"kind\":64,\"name\":\"FromBody\",\"url\":\"modules.html#FromBody\",\"classes\":\"tsd-kind-function\"},{\"id\":4,\"kind\":64,\"name\":\"FromHeader\",\"url\":\"modules.html#FromHeader\",\"classes\":\"tsd-kind-function\"},{\"id\":5,\"kind\":64,\"name\":\"FromPath\",\"url\":\"modules.html#FromPath\",\"classes\":\"tsd-kind-function\"},{\"id\":6,\"kind\":64,\"name\":\"FromQuery\",\"url\":\"modules.html#FromQuery\",\"classes\":\"tsd-kind-function\"},{\"id\":7,\"kind\":128,\"name\":\"Router\",\"url\":\"classes/Router.html\",\"classes\":\"tsd-kind-class\"},{\"id\":8,\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Router.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Router\"},{\"id\":9,\"kind\":1024,\"name\":\"middleware\",\"url\":\"classes/Router.html#middleware\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"Router\"},{\"id\":10,\"kind\":1024,\"name\":\"controllers\",\"url\":\"classes/Router.html#controllers\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"Router\"},{\"id\":11,\"kind\":2048,\"name\":\"registerMiddleware\",\"url\":\"classes/Router.html#registerMiddleware\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Router\"},{\"id\":12,\"kind\":2048,\"name\":\"registerController\",\"url\":\"classes/Router.html#registerController\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Router\"},{\"id\":13,\"kind\":2048,\"name\":\"registerControllers\",\"url\":\"classes/Router.html#registerControllers\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Router\"},{\"id\":14,\"kind\":2048,\"name\":\"getHandler\",\"url\":\"classes/Router.html#getHandler\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter\",\"parent\":\"Router\"},{\"id\":15,\"kind\":2048,\"name\":\"route\",\"url\":\"classes/Router.html#route\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter\",\"parent\":\"Router\"},{\"id\":16,\"kind\":2048,\"name\":\"invoke\",\"url\":\"classes/Router.html#invoke\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-private\",\"parent\":\"Router\"},{\"id\":17,\"kind\":2048,\"name\":\"passToController\",\"url\":\"classes/Router.html#passToController\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-private\",\"parent\":\"Router\"},{\"id\":18,\"kind\":2048,\"name\":\"findDestination\",\"url\":\"classes/Router.html#findDestination\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-private\",\"parent\":\"Router\"},{\"id\":19,\"kind\":2048,\"name\":\"logDebugMessage\",\"url\":\"classes/Router.html#logDebugMessage\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-private\",\"parent\":\"Router\"},{\"id\":20,\"kind\":128,\"name\":\"RequestError\",\"url\":\"classes/RequestError.html\",\"classes\":\"tsd-kind-class\"},{\"id\":21,\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/RequestError.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-class\",\"parent\":\"RequestError\"},{\"id\":22,\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/RequestError.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-overwrite\",\"parent\":\"RequestError\"},{\"id\":23,\"kind\":1024,\"name\":\"isRequestParseError\",\"url\":\"classes/RequestError.html#isRequestParseError\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"RequestError\"},{\"id\":24,\"kind\":1024,\"name\":\"code\",\"url\":\"classes/RequestError.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"RequestError\"},{\"id\":25,\"kind\":128,\"name\":\"RouterError\",\"url\":\"classes/RouterError.html\",\"classes\":\"tsd-kind-class\"},{\"id\":26,\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/RouterError.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-class\",\"parent\":\"RouterError\"},{\"id\":27,\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/RouterError.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-overwrite\",\"parent\":\"RouterError\"},{\"id\":28,\"kind\":1024,\"name\":\"isRouterError\",\"url\":\"classes/RouterError.html#isRouterError\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"RouterError\"},{\"id\":29,\"kind\":1024,\"name\":\"code\",\"url\":\"classes/RouterError.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"RouterError\"},{\"id\":30,\"kind\":64,\"name\":\"SQS\",\"url\":\"modules.html#SQS\",\"classes\":\"tsd-kind-function\"},{\"id\":31,\"kind\":64,\"name\":\"Schedule\",\"url\":\"modules.html#Schedule\",\"classes\":\"tsd-kind-function\"},{\"id\":32,\"kind\":64,\"name\":\"DynamoDB\",\"url\":\"modules.html#DynamoDB\",\"classes\":\"tsd-kind-function\"},{\"id\":33,\"kind\":64,\"name\":\"Kinesis\",\"url\":\"modules.html#Kinesis\",\"classes\":\"tsd-kind-function\"},{\"id\":34,\"kind\":64,\"name\":\"EventBridge\",\"url\":\"modules.html#EventBridge\",\"classes\":\"tsd-kind-function\"},{\"id\":35,\"kind\":64,\"name\":\"S3\",\"url\":\"modules.html#S3\",\"classes\":\"tsd-kind-function\"},{\"id\":36,\"kind\":64,\"name\":\"API\",\"url\":\"modules.html#API\",\"classes\":\"tsd-kind-function\"},{\"id\":37,\"kind\":64,\"name\":\"GET\",\"url\":\"modules.html#GET\",\"classes\":\"tsd-kind-function\"},{\"id\":38,\"kind\":64,\"name\":\"POST\",\"url\":\"modules.html#POST\",\"classes\":\"tsd-kind-function\"},{\"id\":39,\"kind\":64,\"name\":\"DELETE\",\"url\":\"modules.html#DELETE\",\"classes\":\"tsd-kind-function\"},{\"id\":40,\"kind\":64,\"name\":\"PATCH\",\"url\":\"modules.html#PATCH\",\"classes\":\"tsd-kind-function\"},{\"id\":41,\"kind\":64,\"name\":\"PUT\",\"url\":\"modules.html#PUT\",\"classes\":\"tsd-kind-function\"},{\"id\":42,\"kind\":256,\"name\":\"RequestParameterOptions\",\"url\":\"interfaces/RequestParameterOptions.html\",\"classes\":\"tsd-kind-interface\"},{\"id\":43,\"kind\":1024,\"name\":\"required\",\"url\":\"interfaces/RequestParameterOptions.html#required\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"RequestParameterOptions\"},{\"id\":44,\"kind\":256,\"name\":\"ControllerOptions\",\"url\":\"interfaces/ControllerOptions.html\",\"classes\":\"tsd-kind-interface\"},{\"id\":45,\"kind\":1024,\"name\":\"middleware\",\"url\":\"interfaces/ControllerOptions.html#middleware\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ControllerOptions\"},{\"id\":46,\"kind\":1024,\"name\":\"basePath\",\"url\":\"interfaces/ControllerOptions.html#basePath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ControllerOptions\"},{\"id\":47,\"kind\":4194304,\"name\":\"HTTPMethod\",\"url\":\"modules.html#HTTPMethod\",\"classes\":\"tsd-kind-type-alias\"},{\"id\":48,\"kind\":4194304,\"name\":\"RequestErrorCode\",\"url\":\"modules.html#RequestErrorCode\",\"classes\":\"tsd-kind-type-alias\"},{\"id\":49,\"kind\":4194304,\"name\":\"RouterErrorCode\",\"url\":\"modules.html#RouterErrorCode\",\"classes\":\"tsd-kind-type-alias\"},{\"id\":50,\"kind\":4194304,\"name\":\"MiddlewareFunction\",\"url\":\"modules.html#MiddlewareFunction\",\"classes\":\"tsd-kind-type-alias tsd-has-type-parameter\"},{\"id\":51,\"kind\":65536,\"name\":\"__type\",\"url\":\"modules.html#MiddlewareFunction.__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"MiddlewareFunction\"},{\"id\":52,\"kind\":256,\"name\":\"Middleware\",\"url\":\"interfaces/Middleware.html\",\"classes\":\"tsd-kind-interface tsd-has-type-parameter\"},{\"id\":53,\"kind\":1024,\"name\":\"invoke\",\"url\":\"interfaces/Middleware.html#invoke\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Middleware\"},{\"id\":54,\"kind\":4194304,\"name\":\"Handler\",\"url\":\"modules.html#Handler\",\"classes\":\"tsd-kind-type-alias tsd-has-type-parameter\"},{\"id\":55,\"kind\":65536,\"name\":\"__type\",\"url\":\"modules.html#Handler.__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"Handler\"},{\"id\":56,\"kind\":256,\"name\":\"MiddlewareContext\",\"url\":\"interfaces/MiddlewareContext.html\",\"classes\":\"tsd-kind-interface\"},{\"id\":57,\"kind\":1024,\"name\":\"controller\",\"url\":\"interfaces/MiddlewareContext.html#controller\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"MiddlewareContext\"},{\"id\":58,\"kind\":1024,\"name\":\"method\",\"url\":\"interfaces/MiddlewareContext.html#method\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"MiddlewareContext\"}],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"name\",\"parent\"],\"fieldVectors\":[[\"name/0\",[0,36.889]],[\"parent/0\",[]],[\"name/1\",[1,31.781]],[\"parent/1\",[]],[\"name/2\",[2,31.781]],[\"parent/2\",[]],[\"name/3\",[3,36.889]],[\"parent/3\",[]],[\"name/4\",[4,36.889]],[\"parent/4\",[]],[\"name/5\",[5,36.889]],[\"parent/5\",[]],[\"name/6\",[6,36.889]],[\"parent/6\",[]],[\"name/7\",[7,14.917]],[\"parent/7\",[]],[\"name/8\",[8,28.416]],[\"parent/8\",[7,1.027]],[\"name/9\",[9,25.903]],[\"parent/9\",[7,1.027]],[\"name/10\",[10,36.889]],[\"parent/10\",[7,1.027]],[\"name/11\",[11,36.889]],[\"parent/11\",[7,1.027]],[\"name/12\",[12,36.889]],[\"parent/12\",[7,1.027]],[\"name/13\",[13,36.889]],[\"parent/13\",[7,1.027]],[\"name/14\",[14,36.889]],[\"parent/14\",[7,1.027]],[\"name/15\",[1,31.781]],[\"parent/15\",[7,1.027]],[\"name/16\",[15,31.781]],[\"parent/16\",[7,1.027]],[\"name/17\",[16,36.889]],[\"parent/17\",[7,1.027]],[\"name/18\",[17,36.889]],[\"parent/18\",[7,1.027]],[\"name/19\",[18,36.889]],[\"parent/19\",[7,1.027]],[\"name/20\",[19,23.896]],[\"parent/20\",[]],[\"name/21\",[20,25.903]],[\"parent/21\",[19,1.645]],[\"name/22\",[8,28.416]],[\"parent/22\",[19,1.645]],[\"name/23\",[21,36.889]],[\"parent/23\",[19,1.645]],[\"name/24\",[22,31.781]],[\"parent/24\",[19,1.645]],[\"name/25\",[23,23.896]],[\"parent/25\",[]],[\"name/26\",[20,25.903]],[\"parent/26\",[23,1.645]],[\"name/27\",[8,28.416]],[\"parent/27\",[23,1.645]],[\"name/28\",[24,36.889]],[\"parent/28\",[23,1.645]],[\"name/29\",[22,31.781]],[\"parent/29\",[23,1.645]],[\"name/30\",[25,36.889]],[\"parent/30\",[]],[\"name/31\",[26,36.889]],[\"parent/31\",[]],[\"name/32\",[27,36.889]],[\"parent/32\",[]],[\"name/33\",[28,36.889]],[\"parent/33\",[]],[\"name/34\",[29,36.889]],[\"parent/34\",[]],[\"name/35\",[30,36.889]],[\"parent/35\",[]],[\"name/36\",[31,36.889]],[\"parent/36\",[]],[\"name/37\",[32,36.889]],[\"parent/37\",[]],[\"name/38\",[33,36.889]],[\"parent/38\",[]],[\"name/39\",[34,36.889]],[\"parent/39\",[]],[\"name/40\",[35,36.889]],[\"parent/40\",[]],[\"name/41\",[36,36.889]],[\"parent/41\",[]],[\"name/42\",[37,31.781]],[\"parent/42\",[]],[\"name/43\",[38,36.889]],[\"parent/43\",[37,2.187]],[\"name/44\",[39,28.416]],[\"parent/44\",[]],[\"name/45\",[9,25.903]],[\"parent/45\",[39,1.956]],[\"name/46\",[40,36.889]],[\"parent/46\",[39,1.956]],[\"name/47\",[41,36.889]],[\"parent/47\",[]],[\"name/48\",[42,36.889]],[\"parent/48\",[]],[\"name/49\",[43,36.889]],[\"parent/49\",[]],[\"name/50\",[44,31.781]],[\"parent/50\",[]],[\"name/51\",[20,25.903]],[\"parent/51\",[44,2.187]],[\"name/52\",[9,25.903]],[\"parent/52\",[]],[\"name/53\",[15,31.781]],[\"parent/53\",[9,1.783]],[\"name/54\",[45,31.781]],[\"parent/54\",[]],[\"name/55\",[20,25.903]],[\"parent/55\",[45,2.187]],[\"name/56\",[46,28.416]],[\"parent/56\",[]],[\"name/57\",[2,31.781]],[\"parent/57\",[46,1.956]],[\"name/58\",[47,36.889]],[\"parent/58\",[46,1.956]]],\"invertedIndex\":[[\"__type\",{\"_index\":20,\"name\":{\"21\":{},\"26\":{},\"51\":{},\"55\":{}},\"parent\":{}}],[\"api\",{\"_index\":31,\"name\":{\"36\":{}},\"parent\":{}}],[\"basepath\",{\"_index\":40,\"name\":{\"46\":{}},\"parent\":{}}],[\"code\",{\"_index\":22,\"name\":{\"24\":{},\"29\":{}},\"parent\":{}}],[\"constructor\",{\"_index\":8,\"name\":{\"8\":{},\"22\":{},\"27\":{}},\"parent\":{}}],[\"controller\",{\"_index\":2,\"name\":{\"2\":{},\"57\":{}},\"parent\":{}}],[\"controlleroptions\",{\"_index\":39,\"name\":{\"44\":{}},\"parent\":{\"45\":{},\"46\":{}}}],[\"controllers\",{\"_index\":10,\"name\":{\"10\":{}},\"parent\":{}}],[\"delete\",{\"_index\":34,\"name\":{\"39\":{}},\"parent\":{}}],[\"dynamodb\",{\"_index\":27,\"name\":{\"32\":{}},\"parent\":{}}],[\"eventbridge\",{\"_index\":29,\"name\":{\"34\":{}},\"parent\":{}}],[\"finddestination\",{\"_index\":17,\"name\":{\"18\":{}},\"parent\":{}}],[\"frombody\",{\"_index\":3,\"name\":{\"3\":{}},\"parent\":{}}],[\"fromheader\",{\"_index\":4,\"name\":{\"4\":{}},\"parent\":{}}],[\"frompath\",{\"_index\":5,\"name\":{\"5\":{}},\"parent\":{}}],[\"fromquery\",{\"_index\":6,\"name\":{\"6\":{}},\"parent\":{}}],[\"get\",{\"_index\":32,\"name\":{\"37\":{}},\"parent\":{}}],[\"gethandler\",{\"_index\":14,\"name\":{\"14\":{}},\"parent\":{}}],[\"handler\",{\"_index\":45,\"name\":{\"54\":{}},\"parent\":{\"55\":{}}}],[\"httpmethod\",{\"_index\":41,\"name\":{\"47\":{}},\"parent\":{}}],[\"invoke\",{\"_index\":15,\"name\":{\"16\":{},\"53\":{}},\"parent\":{}}],[\"isrequestparseerror\",{\"_index\":21,\"name\":{\"23\":{}},\"parent\":{}}],[\"isroutererror\",{\"_index\":24,\"name\":{\"28\":{}},\"parent\":{}}],[\"kinesis\",{\"_index\":28,\"name\":{\"33\":{}},\"parent\":{}}],[\"logdebugmessage\",{\"_index\":18,\"name\":{\"19\":{}},\"parent\":{}}],[\"method\",{\"_index\":47,\"name\":{\"58\":{}},\"parent\":{}}],[\"middleware\",{\"_index\":9,\"name\":{\"9\":{},\"45\":{},\"52\":{}},\"parent\":{\"53\":{}}}],[\"middlewarecontext\",{\"_index\":46,\"name\":{\"56\":{}},\"parent\":{\"57\":{},\"58\":{}}}],[\"middlewarefunction\",{\"_index\":44,\"name\":{\"50\":{}},\"parent\":{\"51\":{}}}],[\"passtocontroller\",{\"_index\":16,\"name\":{\"17\":{}},\"parent\":{}}],[\"patch\",{\"_index\":35,\"name\":{\"40\":{}},\"parent\":{}}],[\"post\",{\"_index\":33,\"name\":{\"38\":{}},\"parent\":{}}],[\"put\",{\"_index\":36,\"name\":{\"41\":{}},\"parent\":{}}],[\"registercontroller\",{\"_index\":12,\"name\":{\"12\":{}},\"parent\":{}}],[\"registercontrollers\",{\"_index\":13,\"name\":{\"13\":{}},\"parent\":{}}],[\"registermiddleware\",{\"_index\":11,\"name\":{\"11\":{}},\"parent\":{}}],[\"requesterror\",{\"_index\":19,\"name\":{\"20\":{}},\"parent\":{\"21\":{},\"22\":{},\"23\":{},\"24\":{}}}],[\"requesterrorcode\",{\"_index\":42,\"name\":{\"48\":{}},\"parent\":{}}],[\"requestparameteroptions\",{\"_index\":37,\"name\":{\"42\":{}},\"parent\":{\"43\":{}}}],[\"required\",{\"_index\":38,\"name\":{\"43\":{}},\"parent\":{}}],[\"route\",{\"_index\":1,\"name\":{\"1\":{},\"15\":{}},\"parent\":{}}],[\"router\",{\"_index\":7,\"name\":{\"7\":{}},\"parent\":{\"8\":{},\"9\":{},\"10\":{},\"11\":{},\"12\":{},\"13\":{},\"14\":{},\"15\":{},\"16\":{},\"17\":{},\"18\":{},\"19\":{}}}],[\"routererror\",{\"_index\":23,\"name\":{\"25\":{}},\"parent\":{\"26\":{},\"27\":{},\"28\":{},\"29\":{}}}],[\"routererrorcode\",{\"_index\":43,\"name\":{\"49\":{}},\"parent\":{}}],[\"s3\",{\"_index\":30,\"name\":{\"35\":{}},\"parent\":{}}],[\"schedule\",{\"_index\":26,\"name\":{\"31\":{}},\"parent\":{}}],[\"sqs\",{\"_index\":25,\"name\":{\"30\":{}},\"parent\":{}}],[\"use\",{\"_index\":0,\"name\":{\"0\":{}},\"parent\":{}}]],\"pipeline\":[]}}"); \ No newline at end of file +window.searchData = JSON.parse("{\"kinds\":{\"64\":\"Function\",\"128\":\"Class\",\"256\":\"Interface\",\"512\":\"Constructor\",\"1024\":\"Property\",\"2048\":\"Method\",\"65536\":\"Type literal\",\"4194304\":\"Type alias\"},\"rows\":[{\"id\":0,\"kind\":64,\"name\":\"Use\",\"url\":\"modules.html#Use\",\"classes\":\"tsd-kind-function tsd-has-type-parameter\"},{\"id\":1,\"kind\":64,\"name\":\"Route\",\"url\":\"modules.html#Route\",\"classes\":\"tsd-kind-function\"},{\"id\":2,\"kind\":64,\"name\":\"Controller\",\"url\":\"modules.html#Controller\",\"classes\":\"tsd-kind-function\"},{\"id\":3,\"kind\":64,\"name\":\"FromBody\",\"url\":\"modules.html#FromBody\",\"classes\":\"tsd-kind-function\"},{\"id\":4,\"kind\":64,\"name\":\"FromHeader\",\"url\":\"modules.html#FromHeader\",\"classes\":\"tsd-kind-function\"},{\"id\":5,\"kind\":64,\"name\":\"FromPath\",\"url\":\"modules.html#FromPath\",\"classes\":\"tsd-kind-function\"},{\"id\":6,\"kind\":64,\"name\":\"FromQuery\",\"url\":\"modules.html#FromQuery\",\"classes\":\"tsd-kind-function\"},{\"id\":7,\"kind\":128,\"name\":\"Router\",\"url\":\"classes/Router.html\",\"classes\":\"tsd-kind-class\"},{\"id\":8,\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Router.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Router\"},{\"id\":9,\"kind\":1024,\"name\":\"middleware\",\"url\":\"classes/Router.html#middleware\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"Router\"},{\"id\":10,\"kind\":1024,\"name\":\"controllers\",\"url\":\"classes/Router.html#controllers\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"Router\"},{\"id\":11,\"kind\":2048,\"name\":\"registerMiddleware\",\"url\":\"classes/Router.html#registerMiddleware\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Router\"},{\"id\":12,\"kind\":2048,\"name\":\"registerController\",\"url\":\"classes/Router.html#registerController\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Router\"},{\"id\":13,\"kind\":2048,\"name\":\"registerControllers\",\"url\":\"classes/Router.html#registerControllers\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Router\"},{\"id\":14,\"kind\":2048,\"name\":\"getHandler\",\"url\":\"classes/Router.html#getHandler\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter\",\"parent\":\"Router\"},{\"id\":15,\"kind\":2048,\"name\":\"route\",\"url\":\"classes/Router.html#route\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter\",\"parent\":\"Router\"},{\"id\":16,\"kind\":2048,\"name\":\"invoke\",\"url\":\"classes/Router.html#invoke\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-private\",\"parent\":\"Router\"},{\"id\":17,\"kind\":2048,\"name\":\"passToController\",\"url\":\"classes/Router.html#passToController\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-private\",\"parent\":\"Router\"},{\"id\":18,\"kind\":2048,\"name\":\"findDestination\",\"url\":\"classes/Router.html#findDestination\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-private\",\"parent\":\"Router\"},{\"id\":19,\"kind\":2048,\"name\":\"logDebugMessage\",\"url\":\"classes/Router.html#logDebugMessage\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-private\",\"parent\":\"Router\"},{\"id\":20,\"kind\":128,\"name\":\"RequestError\",\"url\":\"classes/RequestError.html\",\"classes\":\"tsd-kind-class\"},{\"id\":21,\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/RequestError.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-class\",\"parent\":\"RequestError\"},{\"id\":22,\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/RequestError.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-overwrite\",\"parent\":\"RequestError\"},{\"id\":23,\"kind\":1024,\"name\":\"isRequestParseError\",\"url\":\"classes/RequestError.html#isRequestParseError\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"RequestError\"},{\"id\":24,\"kind\":1024,\"name\":\"code\",\"url\":\"classes/RequestError.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"RequestError\"},{\"id\":25,\"kind\":128,\"name\":\"RouterError\",\"url\":\"classes/RouterError.html\",\"classes\":\"tsd-kind-class\"},{\"id\":26,\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/RouterError.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-class\",\"parent\":\"RouterError\"},{\"id\":27,\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/RouterError.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-overwrite\",\"parent\":\"RouterError\"},{\"id\":28,\"kind\":1024,\"name\":\"isRouterError\",\"url\":\"classes/RouterError.html#isRouterError\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"RouterError\"},{\"id\":29,\"kind\":1024,\"name\":\"code\",\"url\":\"classes/RouterError.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"RouterError\"},{\"id\":30,\"kind\":64,\"name\":\"SQS\",\"url\":\"modules.html#SQS\",\"classes\":\"tsd-kind-function\"},{\"id\":31,\"kind\":64,\"name\":\"Schedule\",\"url\":\"modules.html#Schedule\",\"classes\":\"tsd-kind-function\"},{\"id\":32,\"kind\":64,\"name\":\"DynamoDB\",\"url\":\"modules.html#DynamoDB\",\"classes\":\"tsd-kind-function\"},{\"id\":33,\"kind\":64,\"name\":\"Kinesis\",\"url\":\"modules.html#Kinesis\",\"classes\":\"tsd-kind-function\"},{\"id\":34,\"kind\":64,\"name\":\"EventBridge\",\"url\":\"modules.html#EventBridge\",\"classes\":\"tsd-kind-function\"},{\"id\":35,\"kind\":64,\"name\":\"S3\",\"url\":\"modules.html#S3\",\"classes\":\"tsd-kind-function\"},{\"id\":36,\"kind\":64,\"name\":\"SNS\",\"url\":\"modules.html#SNS\",\"classes\":\"tsd-kind-function\"},{\"id\":37,\"kind\":64,\"name\":\"API\",\"url\":\"modules.html#API\",\"classes\":\"tsd-kind-function\"},{\"id\":38,\"kind\":64,\"name\":\"GET\",\"url\":\"modules.html#GET\",\"classes\":\"tsd-kind-function\"},{\"id\":39,\"kind\":64,\"name\":\"POST\",\"url\":\"modules.html#POST\",\"classes\":\"tsd-kind-function\"},{\"id\":40,\"kind\":64,\"name\":\"DELETE\",\"url\":\"modules.html#DELETE\",\"classes\":\"tsd-kind-function\"},{\"id\":41,\"kind\":64,\"name\":\"PATCH\",\"url\":\"modules.html#PATCH\",\"classes\":\"tsd-kind-function\"},{\"id\":42,\"kind\":64,\"name\":\"PUT\",\"url\":\"modules.html#PUT\",\"classes\":\"tsd-kind-function\"},{\"id\":43,\"kind\":256,\"name\":\"RequestParameterOptions\",\"url\":\"interfaces/RequestParameterOptions.html\",\"classes\":\"tsd-kind-interface\"},{\"id\":44,\"kind\":1024,\"name\":\"required\",\"url\":\"interfaces/RequestParameterOptions.html#required\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"RequestParameterOptions\"},{\"id\":45,\"kind\":256,\"name\":\"ControllerOptions\",\"url\":\"interfaces/ControllerOptions.html\",\"classes\":\"tsd-kind-interface\"},{\"id\":46,\"kind\":1024,\"name\":\"middleware\",\"url\":\"interfaces/ControllerOptions.html#middleware\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ControllerOptions\"},{\"id\":47,\"kind\":1024,\"name\":\"basePath\",\"url\":\"interfaces/ControllerOptions.html#basePath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ControllerOptions\"},{\"id\":48,\"kind\":4194304,\"name\":\"HTTPMethod\",\"url\":\"modules.html#HTTPMethod\",\"classes\":\"tsd-kind-type-alias\"},{\"id\":49,\"kind\":4194304,\"name\":\"RequestErrorCode\",\"url\":\"modules.html#RequestErrorCode\",\"classes\":\"tsd-kind-type-alias\"},{\"id\":50,\"kind\":4194304,\"name\":\"RouterErrorCode\",\"url\":\"modules.html#RouterErrorCode\",\"classes\":\"tsd-kind-type-alias\"},{\"id\":51,\"kind\":4194304,\"name\":\"MiddlewareFunction\",\"url\":\"modules.html#MiddlewareFunction\",\"classes\":\"tsd-kind-type-alias tsd-has-type-parameter\"},{\"id\":52,\"kind\":65536,\"name\":\"__type\",\"url\":\"modules.html#MiddlewareFunction.__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"MiddlewareFunction\"},{\"id\":53,\"kind\":256,\"name\":\"Middleware\",\"url\":\"interfaces/Middleware.html\",\"classes\":\"tsd-kind-interface tsd-has-type-parameter\"},{\"id\":54,\"kind\":1024,\"name\":\"invoke\",\"url\":\"interfaces/Middleware.html#invoke\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Middleware\"},{\"id\":55,\"kind\":4194304,\"name\":\"Handler\",\"url\":\"modules.html#Handler\",\"classes\":\"tsd-kind-type-alias tsd-has-type-parameter\"},{\"id\":56,\"kind\":65536,\"name\":\"__type\",\"url\":\"modules.html#Handler.__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"Handler\"},{\"id\":57,\"kind\":256,\"name\":\"MiddlewareContext\",\"url\":\"interfaces/MiddlewareContext.html\",\"classes\":\"tsd-kind-interface\"},{\"id\":58,\"kind\":1024,\"name\":\"controller\",\"url\":\"interfaces/MiddlewareContext.html#controller\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"MiddlewareContext\"},{\"id\":59,\"kind\":1024,\"name\":\"method\",\"url\":\"interfaces/MiddlewareContext.html#method\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"MiddlewareContext\"}],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"name\",\"parent\"],\"fieldVectors\":[[\"name/0\",[0,37.054]],[\"parent/0\",[]],[\"name/1\",[1,31.946]],[\"parent/1\",[]],[\"name/2\",[2,31.946]],[\"parent/2\",[]],[\"name/3\",[3,37.054]],[\"parent/3\",[]],[\"name/4\",[4,37.054]],[\"parent/4\",[]],[\"name/5\",[5,37.054]],[\"parent/5\",[]],[\"name/6\",[6,37.054]],[\"parent/6\",[]],[\"name/7\",[7,15.082]],[\"parent/7\",[]],[\"name/8\",[8,28.581]],[\"parent/8\",[7,1.028]],[\"name/9\",[9,26.068]],[\"parent/9\",[7,1.028]],[\"name/10\",[10,37.054]],[\"parent/10\",[7,1.028]],[\"name/11\",[11,37.054]],[\"parent/11\",[7,1.028]],[\"name/12\",[12,37.054]],[\"parent/12\",[7,1.028]],[\"name/13\",[13,37.054]],[\"parent/13\",[7,1.028]],[\"name/14\",[14,37.054]],[\"parent/14\",[7,1.028]],[\"name/15\",[1,31.946]],[\"parent/15\",[7,1.028]],[\"name/16\",[15,31.946]],[\"parent/16\",[7,1.028]],[\"name/17\",[16,37.054]],[\"parent/17\",[7,1.028]],[\"name/18\",[17,37.054]],[\"parent/18\",[7,1.028]],[\"name/19\",[18,37.054]],[\"parent/19\",[7,1.028]],[\"name/20\",[19,24.061]],[\"parent/20\",[]],[\"name/21\",[20,26.068]],[\"parent/21\",[19,1.64]],[\"name/22\",[8,28.581]],[\"parent/22\",[19,1.64]],[\"name/23\",[21,37.054]],[\"parent/23\",[19,1.64]],[\"name/24\",[22,31.946]],[\"parent/24\",[19,1.64]],[\"name/25\",[23,24.061]],[\"parent/25\",[]],[\"name/26\",[20,26.068]],[\"parent/26\",[23,1.64]],[\"name/27\",[8,28.581]],[\"parent/27\",[23,1.64]],[\"name/28\",[24,37.054]],[\"parent/28\",[23,1.64]],[\"name/29\",[22,31.946]],[\"parent/29\",[23,1.64]],[\"name/30\",[25,37.054]],[\"parent/30\",[]],[\"name/31\",[26,37.054]],[\"parent/31\",[]],[\"name/32\",[27,37.054]],[\"parent/32\",[]],[\"name/33\",[28,37.054]],[\"parent/33\",[]],[\"name/34\",[29,37.054]],[\"parent/34\",[]],[\"name/35\",[30,37.054]],[\"parent/35\",[]],[\"name/36\",[31,37.054]],[\"parent/36\",[]],[\"name/37\",[32,37.054]],[\"parent/37\",[]],[\"name/38\",[33,37.054]],[\"parent/38\",[]],[\"name/39\",[34,37.054]],[\"parent/39\",[]],[\"name/40\",[35,37.054]],[\"parent/40\",[]],[\"name/41\",[36,37.054]],[\"parent/41\",[]],[\"name/42\",[37,37.054]],[\"parent/42\",[]],[\"name/43\",[38,31.946]],[\"parent/43\",[]],[\"name/44\",[39,37.054]],[\"parent/44\",[38,2.177]],[\"name/45\",[40,28.581]],[\"parent/45\",[]],[\"name/46\",[9,26.068]],[\"parent/46\",[40,1.948]],[\"name/47\",[41,37.054]],[\"parent/47\",[40,1.948]],[\"name/48\",[42,37.054]],[\"parent/48\",[]],[\"name/49\",[43,37.054]],[\"parent/49\",[]],[\"name/50\",[44,37.054]],[\"parent/50\",[]],[\"name/51\",[45,31.946]],[\"parent/51\",[]],[\"name/52\",[20,26.068]],[\"parent/52\",[45,2.177]],[\"name/53\",[9,26.068]],[\"parent/53\",[]],[\"name/54\",[15,31.946]],[\"parent/54\",[9,1.776]],[\"name/55\",[46,31.946]],[\"parent/55\",[]],[\"name/56\",[20,26.068]],[\"parent/56\",[46,2.177]],[\"name/57\",[47,28.581]],[\"parent/57\",[]],[\"name/58\",[2,31.946]],[\"parent/58\",[47,1.948]],[\"name/59\",[48,37.054]],[\"parent/59\",[47,1.948]]],\"invertedIndex\":[[\"__type\",{\"_index\":20,\"name\":{\"21\":{},\"26\":{},\"52\":{},\"56\":{}},\"parent\":{}}],[\"api\",{\"_index\":32,\"name\":{\"37\":{}},\"parent\":{}}],[\"basepath\",{\"_index\":41,\"name\":{\"47\":{}},\"parent\":{}}],[\"code\",{\"_index\":22,\"name\":{\"24\":{},\"29\":{}},\"parent\":{}}],[\"constructor\",{\"_index\":8,\"name\":{\"8\":{},\"22\":{},\"27\":{}},\"parent\":{}}],[\"controller\",{\"_index\":2,\"name\":{\"2\":{},\"58\":{}},\"parent\":{}}],[\"controlleroptions\",{\"_index\":40,\"name\":{\"45\":{}},\"parent\":{\"46\":{},\"47\":{}}}],[\"controllers\",{\"_index\":10,\"name\":{\"10\":{}},\"parent\":{}}],[\"delete\",{\"_index\":35,\"name\":{\"40\":{}},\"parent\":{}}],[\"dynamodb\",{\"_index\":27,\"name\":{\"32\":{}},\"parent\":{}}],[\"eventbridge\",{\"_index\":29,\"name\":{\"34\":{}},\"parent\":{}}],[\"finddestination\",{\"_index\":17,\"name\":{\"18\":{}},\"parent\":{}}],[\"frombody\",{\"_index\":3,\"name\":{\"3\":{}},\"parent\":{}}],[\"fromheader\",{\"_index\":4,\"name\":{\"4\":{}},\"parent\":{}}],[\"frompath\",{\"_index\":5,\"name\":{\"5\":{}},\"parent\":{}}],[\"fromquery\",{\"_index\":6,\"name\":{\"6\":{}},\"parent\":{}}],[\"get\",{\"_index\":33,\"name\":{\"38\":{}},\"parent\":{}}],[\"gethandler\",{\"_index\":14,\"name\":{\"14\":{}},\"parent\":{}}],[\"handler\",{\"_index\":46,\"name\":{\"55\":{}},\"parent\":{\"56\":{}}}],[\"httpmethod\",{\"_index\":42,\"name\":{\"48\":{}},\"parent\":{}}],[\"invoke\",{\"_index\":15,\"name\":{\"16\":{},\"54\":{}},\"parent\":{}}],[\"isrequestparseerror\",{\"_index\":21,\"name\":{\"23\":{}},\"parent\":{}}],[\"isroutererror\",{\"_index\":24,\"name\":{\"28\":{}},\"parent\":{}}],[\"kinesis\",{\"_index\":28,\"name\":{\"33\":{}},\"parent\":{}}],[\"logdebugmessage\",{\"_index\":18,\"name\":{\"19\":{}},\"parent\":{}}],[\"method\",{\"_index\":48,\"name\":{\"59\":{}},\"parent\":{}}],[\"middleware\",{\"_index\":9,\"name\":{\"9\":{},\"46\":{},\"53\":{}},\"parent\":{\"54\":{}}}],[\"middlewarecontext\",{\"_index\":47,\"name\":{\"57\":{}},\"parent\":{\"58\":{},\"59\":{}}}],[\"middlewarefunction\",{\"_index\":45,\"name\":{\"51\":{}},\"parent\":{\"52\":{}}}],[\"passtocontroller\",{\"_index\":16,\"name\":{\"17\":{}},\"parent\":{}}],[\"patch\",{\"_index\":36,\"name\":{\"41\":{}},\"parent\":{}}],[\"post\",{\"_index\":34,\"name\":{\"39\":{}},\"parent\":{}}],[\"put\",{\"_index\":37,\"name\":{\"42\":{}},\"parent\":{}}],[\"registercontroller\",{\"_index\":12,\"name\":{\"12\":{}},\"parent\":{}}],[\"registercontrollers\",{\"_index\":13,\"name\":{\"13\":{}},\"parent\":{}}],[\"registermiddleware\",{\"_index\":11,\"name\":{\"11\":{}},\"parent\":{}}],[\"requesterror\",{\"_index\":19,\"name\":{\"20\":{}},\"parent\":{\"21\":{},\"22\":{},\"23\":{},\"24\":{}}}],[\"requesterrorcode\",{\"_index\":43,\"name\":{\"49\":{}},\"parent\":{}}],[\"requestparameteroptions\",{\"_index\":38,\"name\":{\"43\":{}},\"parent\":{\"44\":{}}}],[\"required\",{\"_index\":39,\"name\":{\"44\":{}},\"parent\":{}}],[\"route\",{\"_index\":1,\"name\":{\"1\":{},\"15\":{}},\"parent\":{}}],[\"router\",{\"_index\":7,\"name\":{\"7\":{}},\"parent\":{\"8\":{},\"9\":{},\"10\":{},\"11\":{},\"12\":{},\"13\":{},\"14\":{},\"15\":{},\"16\":{},\"17\":{},\"18\":{},\"19\":{}}}],[\"routererror\",{\"_index\":23,\"name\":{\"25\":{}},\"parent\":{\"26\":{},\"27\":{},\"28\":{},\"29\":{}}}],[\"routererrorcode\",{\"_index\":44,\"name\":{\"50\":{}},\"parent\":{}}],[\"s3\",{\"_index\":30,\"name\":{\"35\":{}},\"parent\":{}}],[\"schedule\",{\"_index\":26,\"name\":{\"31\":{}},\"parent\":{}}],[\"sns\",{\"_index\":31,\"name\":{\"36\":{}},\"parent\":{}}],[\"sqs\",{\"_index\":25,\"name\":{\"30\":{}},\"parent\":{}}],[\"use\",{\"_index\":0,\"name\":{\"0\":{}},\"parent\":{}}]],\"pipeline\":[]}}"); \ No newline at end of file diff --git a/docs/classes/RequestError.html b/docs/classes/RequestError.html index 6d8bf90..b1c3f74 100644 --- a/docs/classes/RequestError.html +++ b/docs/classes/RequestError.html @@ -1,6 +1,6 @@ -RequestError | lambaa - v4.1.0
Options
All
  • Public
  • Public/Protected
  • All
Menu

Class RequestError

+RequestError | lambaa - v4.2.0
Options
All
  • Public
  • Public/Protected
  • All
Menu

Class RequestError

An error thrown if a request parsing decorator is unable to provide the request data.

-

Hierarchy

  • Error
    • RequestError

Index

Constructors

Properties

isRequestParseError: boolean = true
message: string
name: string
stack?: string
prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)

Type declaration

    • (err: Error, stackTraces: CallSite[]): any
    • +

Hierarchy

  • Error
    • RequestError

Index

Constructors

Properties

isRequestParseError: boolean = true
message: string
name: string
stack?: string
prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)

Type declaration

stackTraceLimit: number

Methods

  • captureStackTrace(targetObject: object, constructorOpt?: Function): void
  • diff --git a/docs/classes/Router.html b/docs/classes/Router.html index c1d5d02..d5f7b30 100644 --- a/docs/classes/Router.html +++ b/docs/classes/Router.html @@ -1,50 +1,56 @@ -Router | lambaa - v4.1.0
    Options
    All
    • Public
    • Public/Protected
    • All
    Menu
    +Router | lambaa - v4.2.0
    Options
    All
    • Public
    • Public/Protected
    • All
    Menu

    The Router is responsible for routing Lambda events to controllers and executing the middleware pipeline.

    -

    Hierarchy

    • Router

    Index

    Constructors

    Properties

    controllers: any[] = []
    middleware: MiddlewarePipeline<any, any> = []

    Methods

    • findDestination(event: unknown): undefined | Destination
    • getHandler<TEvent, TResult>(): Handler<TEvent, TResult>

    Hierarchy

    • Router

    Index

    Constructors

    Properties

    controllers: any[] = []
    middleware: MiddlewarePipeline<any, any> = []

    Methods

    • findDestination(event: unknown): undefined | Destination
    • getHandler<TEvent, TResult>(): Handler<TEvent, TResult>
    • Get a Lambda event handler.

      • This is the function that should be provided to the Lambda runtime.
      -

      Type Parameters

      • TEvent = unknown

      • TResult = unknown

      Returns Handler<TEvent, TResult>

    • invoke(event: unknown, context: Context, pipeline: MiddlewarePipeline<unknown, unknown>, handler: Handler<unknown, unknown>, destination: undefined | Destination): Promise<unknown>
    • Parameters

      • event: unknown
      • context: Context
      • pipeline: MiddlewarePipeline<unknown, unknown>
      • handler: Handler<unknown, unknown>
      • destination: undefined | Destination

      Returns Promise<unknown>

    • logDebugMessage(debugMessage: string): void
    • passToController(event: unknown, context: Context, destination: undefined | Destination): Promise<unknown>
    • Parameters

      • event: unknown
      • context: Context
      • destination: undefined | Destination

      Returns Promise<unknown>

    • registerController(controller: any): Router
    • registerControllers(controllers: any[]): Router
    • registerMiddleware(...middleware: MiddlewarePipeline<any, any>): Router
    • route(event: APIGatewayProxyEvent, context: Context): Promise<APIGatewayProxyResult>
    • route(event: ScheduledEvent<any>, context: Context): Promise<void>
    • route(event: SQSEvent, context: Context): Promise<void>
    • route(event: DynamoDBStreamEvent, context: Context): Promise<void>
    • route(event: KinesisStreamEvent, context: Context): Promise<void>
    • route<TDetailType, TDetail>(event: EventBridgeEvent<TDetailType, TDetail>, context: Context): Promise<void>
    • route(event: S3Event, context: Context): Promise<void>
    • invoke(event: unknown, context: Context, pipeline: MiddlewarePipeline<unknown, unknown>, handler: Handler<unknown, unknown>, destination: undefined | Destination): Promise<unknown>
    • Parameters

      • event: unknown
      • context: Context
      • pipeline: MiddlewarePipeline<unknown, unknown>
      • handler: Handler<unknown, unknown>
      • destination: undefined | Destination

      Returns Promise<unknown>

    • logDebugMessage(debugMessage: string): void
    • passToController(event: unknown, context: Context, destination: undefined | Destination): Promise<unknown>
    • Parameters

      • event: unknown
      • context: Context
      • destination: undefined | Destination

      Returns Promise<unknown>

    • registerController(controller: any): Router
    • registerControllers(controllers: any[]): Router
    • registerMiddleware(...middleware: MiddlewarePipeline<any, any>): Router
    • route(event: APIGatewayProxyEvent, context: Context): Promise<APIGatewayProxyResult>
    • route(event: ScheduledEvent<any>, context: Context): Promise<void>
    • route(event: SQSEvent, context: Context): Promise<void>
    • route(event: DynamoDBStreamEvent, context: Context): Promise<void>
    • route(event: KinesisStreamEvent, context: Context): Promise<void>
    • route<TDetailType, TDetail>(event: EventBridgeEvent<TDetailType, TDetail>, context: Context): Promise<void>
    • route(event: S3Event, context: Context): Promise<void>
    • route(event: SNSEvent, context: Context): Promise<void>
    • Route an incoming API Gateway event to a controller.

      Parameters

      • event: APIGatewayProxyEvent

        The API Gateway event.

      • context: Context

        The Lambda context.

        -

      Returns Promise<APIGatewayProxyResult>

    • +

    Returns Promise<APIGatewayProxyResult>

  • Route a scheduled event to a controller.

    Parameters

    • event: ScheduledEvent<any>

      The scheduled event.

    • context: Context

      The Lambda context.

      -

    Returns Promise<void>

  • +

Returns Promise<void>

  • Route an incoming SQS event to a controller.

    Parameters

    • event: SQSEvent

      The SQS event.

    • context: Context

      The Lambda context.

      -

    Returns Promise<void>

  • +
  • Returns Promise<void>

  • Route an incoming Dynamo DB stream event to a controller.

    Parameters

    • event: DynamoDBStreamEvent

      The Dynamo DB stream event.

    • context: Context

      The Lambda context.

      -

    Returns Promise<void>

  • +
  • Returns Promise<void>

  • Route an incoming Kinesis stream event to a controller.

    Parameters

    • event: KinesisStreamEvent

      The Kinesis stream event.

    • context: Context

      The Lambda context.

      -

    Returns Promise<void>

  • +
  • Returns Promise<void>

  • Route an incoming EventBridge event to a controller.

    Type Parameters

    • TDetailType extends string

    • TDetail

    Parameters

    • event: EventBridgeEvent<TDetailType, TDetail>

      The EventBridge event.

    • context: Context

      The Lambda context.

      -

    Returns Promise<void>

  • +
  • Returns Promise<void>

  • Route an incoming S3 event to a controller.

    Parameters

    • event: S3Event

      The S3 event.

    • context: Context

      The Lambda context.

      +

    Returns Promise<void>

  • +

    Route an incoming SNS event to a controller.

    +

    Parameters

    • event: SNSEvent
      +

      The SNS event.

      +
    • context: Context
      +

      The Lambda context.

    Returns Promise<void>

  • Legend

    • Constructor
    • Property
    • Method
    • Private property
    • Private method
    • Property

    Settings

    Theme

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/classes/RouterError.html b/docs/classes/RouterError.html index ac72bed..167efba 100644 --- a/docs/classes/RouterError.html +++ b/docs/classes/RouterError.html @@ -1,6 +1,6 @@ -RouterError | lambaa - v4.1.0
    Options
    All
    • Public
    • Public/Protected
    • All
    Menu

    Class RouterError

    +RouterError | lambaa - v4.2.0
    Options
    All
    • Public
    • Public/Protected
    • All
    Menu

    Class RouterError

    An error thrown when the Router is unable to route an event.

    -

    Hierarchy

    • Error
      • RouterError

    Index

    Constructors

    • new RouterError(__namedParameters: { code: "ROUTE_NOT_FOUND"; message: string }): RouterError
    • Parameters

      • __namedParameters: { code: "ROUTE_NOT_FOUND"; message: string }
        • code: "ROUTE_NOT_FOUND"
        • message: string

      Returns RouterError

    Properties

    code: "ROUTE_NOT_FOUND"
    isRouterError: boolean = true
    message: string
    name: string
    stack?: string
    prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)

    Type declaration

      • (err: Error, stackTraces: CallSite[]): any
      • +

    Hierarchy

    • Error
      • RouterError

    Index

    Constructors

    • new RouterError(__namedParameters: { code: "ROUTE_NOT_FOUND"; message: string }): RouterError
    • Parameters

      • __namedParameters: { code: "ROUTE_NOT_FOUND"; message: string }
        • code: "ROUTE_NOT_FOUND"
        • message: string

      Returns RouterError

    Properties

    code: "ROUTE_NOT_FOUND"
    isRouterError: boolean = true
    message: string
    name: string
    stack?: string
    prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)

    Type declaration

    stackTraceLimit: number

    Methods

    • captureStackTrace(targetObject: object, constructorOpt?: Function): void
    • DynamoDB(tableArn: string): MethodDecorator
    • Define a Dynamo DB stream event handler.

      Parameters

      • tableArn: string

        The ARN of the table (not the event stream ARN).

        -

      Returns MethodDecorator

    • EventBridge(source: string, detailType: string): MethodDecorator

    Returns MethodDecorator

    • EventBridge(source: string, detailType: string): MethodDecorator
    • Define an EventBridge event handler.

      Parameters

      • source: string

        The event source. This identifies the service that generated the event.

      • detailType: string

        The event detail-type. This identifies the fields and values that appear in the detail field.

        -

      Returns MethodDecorator

    • GET(resource: string): MethodDecorator

    Returns MethodDecorator

    • GET(resource: string): MethodDecorator
    • Define an API Gateway HTTP GET request handler.

      Parameters

      • resource: string

        The request resource path.

        -

      Returns MethodDecorator

    • Kinesis(arn: string): MethodDecorator

    Returns MethodDecorator

    • Kinesis(arn: string): MethodDecorator
    • Define a Kinesis stream event handler.

      Parameters

      • arn: string

        The ARN of the event stream.

        -

      Returns MethodDecorator

    • PATCH(resource: string): MethodDecorator

    Returns MethodDecorator

    • PATCH(resource: string): MethodDecorator
    • Define an API Gateway HTTP PATCH request handler.

      Parameters

      • resource: string

        The request resource path.

        -

      Returns MethodDecorator

    • POST(resource: string): MethodDecorator

    Returns MethodDecorator

    • POST(resource: string): MethodDecorator
    • Define an API Gateway HTTP POST request handler.

      Parameters

      • resource: string

        The request resource path.

        -

      Returns MethodDecorator

    • PUT(resource: string): MethodDecorator

    Returns MethodDecorator

    • PUT(resource: string): MethodDecorator
    • Define an API Gateway HTTP PUT request handler.

      Parameters

      • resource: string

        The request resource path.

        -

      Returns MethodDecorator

    • Route(method: HTTPMethod, resource: string): MethodDecorator

    Returns MethodDecorator

    • Route(method: HTTPMethod, resource: string): MethodDecorator
    • S3(arn: string): MethodDecorator

    Returns MethodDecorator

    • S3(arn: string): MethodDecorator
    • Define an S3 event handler.

      Parameters

      • arn: string

        The ARN of the S3 bucket.

        -

      Returns MethodDecorator

    • SQS(arn: string): MethodDecorator

    Returns MethodDecorator

    • SNS(arn: string): MethodDecorator
    • +

      Define an SNS event handler.

      +

      Parameters

      • arn: string
        +

        The ARN of the topic.

        +

      Returns MethodDecorator

    • SQS(arn: string): MethodDecorator
    • Define an SQS event handler.

      Parameters

      • arn: string

        The ARN of the queue.

        -

      Returns MethodDecorator

    • Schedule(arn: string): MethodDecorator

    Returns MethodDecorator

    • Schedule(arn: string): MethodDecorator

    Middleware

    Handler<TEvent, TResult>: ((r: TEvent, c: Context) => Promise<TResult>)

    Type Parameters

    • TEvent = APIGatewayProxyEvent

    • TResult = APIGatewayProxyResult

    Type declaration

      • (r: TEvent, c: Context): Promise<TResult>
      • +

      Returns MethodDecorator

    Middleware

    Handler<TEvent, TResult>: ((r: TEvent, c: Context) => Promise<TResult>)

    Type Parameters

    • TEvent = APIGatewayProxyEvent

    • TResult = APIGatewayProxyResult

    Type declaration

      • (r: TEvent, c: Context): Promise<TResult>
      • Defines a Lambda event handler.

        -

        Parameters

        • r: TEvent
        • c: Context

        Returns Promise<TResult>

    MiddlewareFunction<TEvent, TResult>: ((event: TEvent, context: Context, next: Handler<TEvent, TResult>, middlewareContext?: MiddlewareContext) => Promise<TResult>)

    Type Parameters

    • TEvent = APIGatewayProxyEvent

    • TResult = APIGatewayProxyResult

    Type declaration

      • (event: TEvent, context: Context, next: Handler<TEvent, TResult>, middlewareContext?: MiddlewareContext): Promise<TResult>
      • +

        Parameters

        • r: TEvent
        • c: Context

        Returns Promise<TResult>

    MiddlewareFunction<TEvent, TResult>: ((event: TEvent, context: Context, next: Handler<TEvent, TResult>, middlewareContext?: MiddlewareContext) => Promise<TResult>)

    Type Parameters

    • TEvent = APIGatewayProxyEvent

    • TResult = APIGatewayProxyResult

    Type declaration

      • (event: TEvent, context: Context, next: Handler<TEvent, TResult>, middlewareContext?: MiddlewareContext): Promise<TResult>
      • Defines a middleware invoke function.

        -

        Parameters

        Returns Promise<TResult>

    Error

    RequestErrorCode: "MISSING_PATH_PARAMETER" | "MISSING_QUERY_PARAMETER" | "MISSING_REQUEST_DATA" | "MISSING_HEADER" | "INVALID_REQUEST_DATA"
    +

    Type Parameters

    • TEvent

    • TResponse

    Parameters

    Returns MethodDecorator

    Error

    RequestErrorCode: "MISSING_PATH_PARAMETER" | "MISSING_QUERY_PARAMETER" | "MISSING_REQUEST_DATA" | "MISSING_HEADER" | "INVALID_REQUEST_DATA"

    A RequestError code.

    -
    RouterErrorCode: "ROUTE_NOT_FOUND"
    +
    RouterErrorCode: "ROUTE_NOT_FOUND"

    A RouterError code.

    -

    API Gateway Request Parameter Decorator

    API Gateway Request Parameter Decorator

    • FromPath(name: string): ParameterDecorator
    • FromPath(name: string): ParameterDecorator
    • Extract a parameter from the API Gateway request resource path.

      -

      Parameters

      • name: string

      Returns ParameterDecorator

    Other

    HTTPMethod: "GET" | "POST" | "DELETE" | "PATCH" | "PUT"

    Generated using TypeDoc

    \ No newline at end of file +

    Parameters

    Returns ParameterDecorator

    Other

    HTTPMethod: "GET" | "POST" | "DELETE" | "PATCH" | "PUT"

    Generated using TypeDoc

    \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a346ee4..ad9bf21 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "lambaa", - "version": "4.1.0", + "version": "4.2.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "lambaa", - "version": "4.1.0", + "version": "4.2.0", "license": "MIT", "dependencies": { "reflect-metadata": "^0.1.13" diff --git a/package.json b/package.json index c9e2735..5df5022 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lambaa", - "version": "4.1.0", + "version": "4.2.0", "description": "A small framework, with very few dependencies to help build applications using AWS Lambda.", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/src/RouteMap.ts b/src/RouteMap.ts index b34ac38..b9fa0c4 100644 --- a/src/RouteMap.ts +++ b/src/RouteMap.ts @@ -1,6 +1,6 @@ import { APIGatewayProxyEvent } from "aws-lambda" -type RouteProperties = +export type RouteProperties = | { eventType: "API_GATEWAY" method: string @@ -32,6 +32,10 @@ type RouteProperties = eventType: "S3" arn: string } + | { + eventType: "SNS" + arn: string + } /** * Used to store routing data on controllers. @@ -58,7 +62,8 @@ export default class RouteMap { route.eventType === "Schedule" || route.eventType === "Dynamo" || route.eventType === "Kinesis" || - route.eventType === "S3" + route.eventType === "S3" || + route.eventType === "SNS" ) { this.map.set(route.arn, propertyKey.toString()) } else if (route.eventType === "EventBridge") { @@ -94,7 +99,8 @@ export default class RouteMap { route.eventType === "Schedule" || route.eventType === "Dynamo" || route.eventType === "Kinesis" || - route.eventType === "S3" + route.eventType === "S3" || + route.eventType === "SNS" ) { return this.map.get(route.arn) } diff --git a/src/Router.ts b/src/Router.ts index 76d64d7..6da907f 100644 --- a/src/Router.ts +++ b/src/Router.ts @@ -7,6 +7,7 @@ import { KinesisStreamEvent, S3Event, ScheduledEvent, + SNSEvent, SQSEvent, } from "aws-lambda" import { @@ -21,6 +22,7 @@ import { isApiGatewayProxyEvent, isApiGatewayEvent, isSqsEvent, + isSNSEvent, isScheduledEvent, isDynamoDbStreamEvent, isKinesisStreamEvent, @@ -127,6 +129,13 @@ export default class Router { */ public route(event: S3Event, context: Context): Promise + /** + * Route an incoming SNS event to a controller. + * @param event The SNS event. + * @param context The Lambda context. + */ + public route(event: SNSEvent, context: Context): Promise + /** * Route a Lambda event through the middleware pipeline, to a matching controller event handler. * @param event The Lambda event. @@ -274,6 +283,23 @@ export default class Router { } } + if (isSNSEvent(event)) { + for (const record of event.Records) { + method = routeMap?.getRoute({ + eventType: "SNS", + arn: record.Sns.TopicArn, + }) + + if (method) { + this.logDebugMessage( + `Passing SNS event to ${controller?.constructor?.name}.${method}(...)` + ) + + return { controller, method, options } + } + } + } + if (isScheduledEvent(event)) { for (const resource of event.resources) { method = routeMap?.getRoute({ diff --git a/src/decorators/Route.ts b/src/decorators/Route.ts index 33d4ef9..bacd68f 100644 --- a/src/decorators/Route.ts +++ b/src/decorators/Route.ts @@ -1,17 +1,8 @@ import { ROUTE_HANDLER_METADATA_KEY } from "../constants" -import RouteMap from "../RouteMap" +import RouteMap, { RouteProperties } from "../RouteMap" import { HTTPMethod } from "../types" -/** - * Define an API Gateway request handler. - * @category Event Handler Decorator - * @param method The {@link HTTPMethod}. - * @param resource The request resource path. - */ -export default function Route( - method: HTTPMethod, - resource: string -): MethodDecorator { +function createDecorator(route: RouteProperties): MethodDecorator { return ( target: any, propertyKey: string | symbol, @@ -21,10 +12,7 @@ export default function Route( Reflect.getMetadata(ROUTE_HANDLER_METADATA_KEY, target) ?? new RouteMap() - routeMap.addRoute( - { eventType: "API_GATEWAY", method, resource }, - propertyKey - ) + routeMap.addRoute(route, propertyKey) Reflect.defineMetadata(ROUTE_HANDLER_METADATA_KEY, routeMap, target) @@ -32,27 +20,26 @@ export default function Route( } } +/** + * Define an API Gateway request handler. + * @category Event Handler Decorator + * @param method The {@link HTTPMethod}. + * @param resource The request resource path. + */ +export default function Route( + method: HTTPMethod, + resource: string +): MethodDecorator { + return createDecorator({ eventType: "API_GATEWAY", method, resource }) +} + /** * Define an SQS event handler. * @category Event Handler Decorator * @param arn The ARN of the queue. */ export function SQS(arn: string): MethodDecorator { - return ( - target: any, - propertyKey: string | symbol, - descriptor: PropertyDescriptor - ) => { - const routeMap: RouteMap = - Reflect.getMetadata(ROUTE_HANDLER_METADATA_KEY, target) ?? - new RouteMap() - - routeMap.addRoute({ eventType: "SQS", arn }, propertyKey) - - Reflect.defineMetadata(ROUTE_HANDLER_METADATA_KEY, routeMap, target) - - return descriptor - } + return createDecorator({ eventType: "SQS", arn }) } /** @@ -62,21 +49,7 @@ export function SQS(arn: string): MethodDecorator { * @see https://docs.aws.amazon.com/lambda/latest/dg/services-cloudwatchevents.html */ export function Schedule(arn: string): MethodDecorator { - return ( - target: any, - propertyKey: string | symbol, - descriptor: PropertyDescriptor - ) => { - const routeMap: RouteMap = - Reflect.getMetadata(ROUTE_HANDLER_METADATA_KEY, target) ?? - new RouteMap() - - routeMap.addRoute({ eventType: "Schedule", arn }, propertyKey) - - Reflect.defineMetadata(ROUTE_HANDLER_METADATA_KEY, routeMap, target) - - return descriptor - } + return createDecorator({ eventType: "Schedule", arn }) } /** @@ -85,21 +58,7 @@ export function Schedule(arn: string): MethodDecorator { * @param tableArn The ARN of the table (not the event stream ARN). */ export function DynamoDB(tableArn: string): MethodDecorator { - return ( - target: any, - propertyKey: string | symbol, - descriptor: PropertyDescriptor - ) => { - const routeMap: RouteMap = - Reflect.getMetadata(ROUTE_HANDLER_METADATA_KEY, target) ?? - new RouteMap() - - routeMap.addRoute({ eventType: "Dynamo", arn: tableArn }, propertyKey) - - Reflect.defineMetadata(ROUTE_HANDLER_METADATA_KEY, routeMap, target) - - return descriptor - } + return createDecorator({ eventType: "Dynamo", arn: tableArn }) } /** @@ -108,21 +67,7 @@ export function DynamoDB(tableArn: string): MethodDecorator { * @param arn The ARN of the event stream. */ export function Kinesis(arn: string): MethodDecorator { - return ( - target: any, - propertyKey: string | symbol, - descriptor: PropertyDescriptor - ) => { - const routeMap: RouteMap = - Reflect.getMetadata(ROUTE_HANDLER_METADATA_KEY, target) ?? - new RouteMap() - - routeMap.addRoute({ eventType: "Kinesis", arn }, propertyKey) - - Reflect.defineMetadata(ROUTE_HANDLER_METADATA_KEY, routeMap, target) - - return descriptor - } + return createDecorator({ eventType: "Kinesis", arn }) } /** @@ -135,24 +80,7 @@ export function EventBridge( source: string, detailType: string ): MethodDecorator { - return ( - target: any, - propertyKey: string | symbol, - descriptor: PropertyDescriptor - ) => { - const routeMap: RouteMap = - Reflect.getMetadata(ROUTE_HANDLER_METADATA_KEY, target) ?? - new RouteMap() - - routeMap.addRoute( - { eventType: "EventBridge", detailType, source }, - propertyKey - ) - - Reflect.defineMetadata(ROUTE_HANDLER_METADATA_KEY, routeMap, target) - - return descriptor - } + return createDecorator({ eventType: "EventBridge", detailType, source }) } /** @@ -161,21 +89,16 @@ export function EventBridge( * @category Event Handler Decorator */ export function S3(arn: string): MethodDecorator { - return ( - target: any, - propertyKey: string | symbol, - descriptor: PropertyDescriptor - ) => { - const routeMap: RouteMap = - Reflect.getMetadata(ROUTE_HANDLER_METADATA_KEY, target) ?? - new RouteMap() - - routeMap.addRoute({ eventType: "S3", arn }, propertyKey) - - Reflect.defineMetadata(ROUTE_HANDLER_METADATA_KEY, routeMap, target) + return createDecorator({ eventType: "S3", arn }) +} - return descriptor - } +/** + * Define an SNS event handler. + * @category Event Handler Decorator + * @param arn The ARN of the topic. + */ +export function SNS(arn: string): MethodDecorator { + return createDecorator({ eventType: "SNS", arn }) } /** diff --git a/src/typeGuards.ts b/src/typeGuards.ts index 8d464b4..757580b 100644 --- a/src/typeGuards.ts +++ b/src/typeGuards.ts @@ -6,6 +6,7 @@ import { KinesisStreamEvent, EventBridgeEvent, S3Event, + SNSEvent, } from "aws-lambda" export const isApiGatewayEvent = ( @@ -30,6 +31,14 @@ export const isSqsEvent = (event: unknown): event is SQSEvent => { ) } +export const isSNSEvent = (event: unknown): event is SNSEvent => { + const e = event as SNSEvent + return ( + e?.Records?.find(({ EventSource }) => EventSource === "aws:sns") !== + undefined + ) +} + export const isScheduledEvent = (event: unknown): event is ScheduledEvent => { const e = event as ScheduledEvent // https://docs.aws.amazon.com/lambda/latest/dg/services-cloudwatchevents.html diff --git a/tests/routing.tests.ts b/tests/routing.tests.ts index 451287e..2cd2d9d 100644 --- a/tests/routing.tests.ts +++ b/tests/routing.tests.ts @@ -6,6 +6,7 @@ import { KinesisStreamEvent, S3Event, ScheduledEvent, + SNSEvent, SQSEvent, } from "aws-lambda" import { expect } from "chai" @@ -23,6 +24,7 @@ import Route, { PUT, S3, Schedule, + SNS, SQS, } from "../src/decorators/Route" import Router from "../src/Router" @@ -36,6 +38,7 @@ import { createLambdaContext as createLambdaContext, createS3Event, createScheduledEvent, + createSNSEvent, createSQSEvent, } from "./testUtil" @@ -166,6 +169,16 @@ class TestController { )?.s3.bucket.arn ).to.equal("arn:aws:s3:::123") } + + @SNS("arn:aws:sns:123") + public async testSns(snsEvent: SNSEvent): Promise { + expect(snsEvent.Records).not.to.be.empty + expect( + snsEvent.Records.find( + (record) => record.Sns.TopicArn === "arn:aws:sns:123" + )?.Sns.TopicArn + ).to.equal("arn:aws:sns:123") + } } @Controller("/test") @@ -552,4 +565,17 @@ describe("routing tests", () => { await expect(router.route(event, context)).to.eventually.be.rejected }) }) + + describe("routes SNS events", () => { + it("routes event", async () => { + const event = createSNSEvent("arn:aws:sns:123") + const response = await router.route(event, context) + expect(response).to.be.undefined + }) + + it("throws error if there is no handler for this arn", async () => { + const event = createSNSEvent("arn:aws:sns:wrong") + await expect(router.route(event, context)).to.eventually.be.rejected + }) + }) }) diff --git a/tests/testUtil.ts b/tests/testUtil.ts index a716e7a..c366f22 100644 --- a/tests/testUtil.ts +++ b/tests/testUtil.ts @@ -7,6 +7,7 @@ import { KinesisStreamEvent, S3Event, ScheduledEvent, + SNSEvent, SQSEvent, } from "aws-lambda" import { APIGatewayEventFactoryArgs } from "./types" @@ -222,6 +223,42 @@ export const createS3Event = (arn: string): S3Event => ({ ], }) +export const createSNSEvent = (arn: string): SNSEvent => ({ + Records: [ + { + EventVersion: "1.0", + EventSubscriptionArn: + "arn:aws:sns:us-east-1:123456789012:sns-lambda:21be56ed-a058-49f5-8c98-aedd2564c486", + EventSource: "aws:sns", + Sns: { + SignatureVersion: "1", + Timestamp: "2019-01-02T12:45:07.000Z", + Signature: + "tcc6faL2yUC6dgZdmrwh1Y4cGa/ebXEkAi6RibDsvpi+tE/1+82j...65r==", + SigningCertUrl: + "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-ac565b8b1a6c5d002d285f9598aa1d9b.pem", + MessageId: "95df01b4-ee98-5cb9-9903-4c221d41eb5e", + Message: "Hello from SNS!", + MessageAttributes: { + Test: { + Type: "String", + Value: "TestString", + }, + TestBinary: { + Type: "Binary", + Value: "TestBinary", + }, + }, + Type: "Notification", + UnsubscribeUrl: + "https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:123456789012:test-lambda:21be56ed-a058-49f5-8c98-aedd2564c486", + TopicArn: arn, + Subject: "TestInvoke", + }, + }, + ], +}) + export const createLambdaContext = (): Context => ({ awsRequestId: "1234", callbackWaitsForEmptyEventLoop: true,