koa-serverless
Advanced tools
Comparing version 0.0.7 to 0.1.0
@@ -7,2 +7,3 @@ 'use strict'; | ||
var dotenv = require('dotenv'); | ||
var koa = _interopDefault(require('koa')); | ||
@@ -17,6 +18,5 @@ var responseTime = _interopDefault(require('koa-response-time')); | ||
var qs = _interopDefault(require('koa-qs')); | ||
var uuidv4 = _interopDefault(require('uuid/v4')); | ||
var defaultLogMiddleware = _interopDefault(require('koa-roarr')); | ||
var isLambda = _interopDefault(require('is-lambda')); | ||
var whatwgUrl = require('whatwg-url'); | ||
var awsServerless = _interopDefault(require('aws-serverless-express')); | ||
var defaultServerless = _interopDefault(require('serverless-http')); | ||
@@ -34,33 +34,2 @@ var defaultErrorHandler = (err, ctx) => { | ||
const logger = ({ log: log$$1 }) => async (ctx, next) => { | ||
const { request, response } = ctx; | ||
const requestId = ctx.request.headers["x-request-id"] || `s-${uuidv4()}`; | ||
ctx.log = log$$1.child({ requestId }); | ||
await next(); | ||
ctx.log.info({ request, response }, "request complete"); | ||
}; | ||
var lambdaWorkaroundMiddleware = (ctx, next) => { | ||
ctx.lambdaEvent = ctx.headers["x-apigateway-event"] && JSON.parse(decodeURIComponent(ctx.headers["x-apigateway-event"])) || {}; | ||
ctx.lambdaContext = ctx.headers["x-apigateway-context"] && JSON.parse(decodeURIComponent(ctx.headers["x-apigateway-context"])) || {}; | ||
ctx.env = ctx.lambdaEvent && ctx.lambdaEvent.stageVariables || process.env; | ||
// Workaround an inconsistency in APIG. For custom domains, it puts the | ||
// mapping prefix on the url, but non-custom domain requests do not. Fix it by | ||
// changing the path to the proxy param which has the correct value always. | ||
if (ctx.lambdaEvent.pathParameters && ctx.lambdaEvent.pathParameters.proxy) { | ||
const dummyBase = "zz://zz"; | ||
const url = new whatwgUrl.URL(ctx.url, dummyBase); | ||
url.pathname = "/" + ctx.lambdaEvent.pathParameters.proxy; | ||
ctx.url = url.href.replace(dummyBase, ""); | ||
} | ||
return next(); | ||
}; | ||
function LambdaHandler({ app }) { | ||
app.proxy = true; | ||
const server = awsServerless.createServer(app.callback()); | ||
return (event, context) => awsServerless.proxy(server, event, context); | ||
} | ||
function ServerApp(options, listenCallback) { | ||
@@ -80,5 +49,8 @@ const { app, port, logger } = options; | ||
dotenv.config(); | ||
function KoaServerlessApp({ | ||
serverless = defaultServerless, | ||
port = process.env.PORT || 1234, | ||
logger: logger$$1 = log.child({ isLambda }), | ||
logger = log.child({ isLambda }), | ||
sessionKeys = [process.env.SESSION_KEY], | ||
@@ -94,3 +66,3 @@ cookieName = "session", | ||
}), | ||
loggerMiddleware = logger({ log }), | ||
loggerMiddleware = defaultLogMiddleware({ log }), | ||
timerMiddleware = responseTime(), | ||
@@ -102,3 +74,3 @@ errorHandler = defaultErrorHandler, | ||
let options = { | ||
logger: logger$$1, | ||
logger, | ||
cookieName, | ||
@@ -120,4 +92,6 @@ cookieMaxAge, | ||
let app = new koa(); | ||
const { info, trace } = logger$$1; | ||
const { info, trace } = logger; | ||
app.port = port; | ||
// Enable support for nested querystrings. | ||
@@ -136,7 +110,2 @@ qs(app); | ||
// handle requests from lambda | ||
if (isLambda) { | ||
app.use(lambdaWorkaroundMiddleware); | ||
} | ||
// logger | ||
@@ -169,8 +138,8 @@ app.use(loggerMiddleware); | ||
trace("start lambda"); | ||
return LambdaHandler({ app }); | ||
return serverless(app); | ||
}; | ||
app.serve = (err, cb) => { | ||
app.serve = cb => { | ||
trace(options, "start server"); | ||
return ServerApp({ app, port, logger: logger$$1 }); | ||
return ServerApp({ app, port, logger }); | ||
}; | ||
@@ -177,0 +146,0 @@ |
20
index.js
"use strict"; | ||
import { config } from "dotenv"; | ||
config(); | ||
import koa from "koa"; | ||
@@ -13,9 +16,9 @@ import responseTime from "koa-response-time"; | ||
import defaultErrorHandler from "./error"; | ||
import defaultLogMiddleware from "./logger"; | ||
import defaultLogMiddleware from "koa-roarr"; | ||
import isLambda from "is-lambda"; | ||
import lambdaWorkaroundMiddleware from "./lambdaWorkaround"; | ||
import LambdaHandler from "./lambda"; | ||
import defaultServerless from "serverless-http"; | ||
import ServerApp from "./server"; | ||
function KoaServerlessApp({ | ||
serverless = defaultServerless, | ||
port = process.env.PORT || 1234, | ||
@@ -59,2 +62,4 @@ logger = log.child({ isLambda }), | ||
app.port = port; | ||
// Enable support for nested querystrings. | ||
@@ -73,7 +78,2 @@ qs(app); | ||
// handle requests from lambda | ||
if (isLambda) { | ||
app.use(lambdaWorkaroundMiddleware); | ||
} | ||
// logger | ||
@@ -113,6 +113,6 @@ app.use(loggerMiddleware); | ||
trace("start lambda"); | ||
return LambdaHandler({ app }); | ||
return serverless(app); | ||
}; | ||
app.serve = (err, cb) => { | ||
app.serve = cb => { | ||
trace(options, "start server"); | ||
@@ -119,0 +119,0 @@ return ServerApp({ app, port, logger }); |
{ | ||
"name": "koa-serverless", | ||
"version": "0.0.7", | ||
"version": "0.1.0", | ||
"description": "", | ||
"main": "dist/index.js", | ||
"engines" : { "node" : ">=7.6.0" }, | ||
"engines": { | ||
"node": ">=7.6.0" | ||
}, | ||
"scripts": { | ||
@@ -32,4 +34,6 @@ "build": "rollup -c | babel > dist/index.js", | ||
"koa-response-time": "^2.0.0", | ||
"koa-roarr": "^0.0.5", | ||
"koa-session": "^5.9.0", | ||
"roarr": "^2.11.0", | ||
"serverless-http": "^1.6.0", | ||
"uuid": "^3.3.2", | ||
@@ -36,0 +40,0 @@ "whatwg-url": "^7.0.0" |
# koa-serverless | ||
A koajs distribution that focuses on: | ||
A koajs bundle including: | ||
- serverless deployment (AWS Gateway + Lambda) | ||
- standard nodejs deployment | ||
- default nested querystring support | ||
- default session middleware (koa-session) | ||
- default log middleware | ||
- default security header middleware (koa-helmet) | ||
- default cors middleware (kcors) | ||
- default body parser middlware (koa-bodyparser) | ||
- Serverless Support ([serverless-http](https://github.com/dougmoscrop/serverless-http)) | ||
- load .env file ([dotenv](https://github.com/motdotla/dotenv)) | ||
- nested querystring support ([qs](https://github.com/ljharb/qs)) | ||
- session management ([koa-session](https://github.com/koajs/session)) | ||
- logging ([koa-roarr](https://github.com/jcfisher007/koa-roarr)) | ||
- security headers ([koa-helmet](https://github.com/venables/koa-helmet)) | ||
- cors ([kcors](https://github.com/koajs/cors)) | ||
- body parser ([koa-bodyparser](https://github.com/koajs/bodyparser)) | ||
Make koajs applications with minimal boilerplate. | ||
## Install | ||
```sh | ||
npm install koa-serverless esm | ||
npm install koa-serverless | ||
``` | ||
## Usage | ||
## Example | ||
Runs only with esm enabled. | ||
### index.js | ||
```js | ||
// drop in replacement for `koa`. | ||
var App = require("koa-serverless"); | ||
var app = new App(); | ||
var app = new App();This will give you the basic mechanisms to | ||
@@ -31,0 +29,0 @@ // add your own middleware |
@@ -6,2 +6,3 @@ // rollup.config.js | ||
external: [ | ||
"dotenv", | ||
"koa", | ||
@@ -13,10 +14,11 @@ "koa-error", | ||
"koa-bodyparser", | ||
"koa-roarr", | ||
"kcors", | ||
"koa-qs", | ||
"is-lambda", | ||
"roarr", | ||
"koa-qs", | ||
"serverless-http", | ||
"uuid/v4", | ||
"whatwg-url", | ||
"aws-serverless-express" | ||
"whatwg-url" | ||
] | ||
}; |
Sorry, the diff of this file is not supported yet
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
7
149231
15
10
287
36
+ Addedkoa-roarr@^0.0.5
+ Addedserverless-http@^1.6.0
+ Added@types/aws-lambda@8.10.147(transitive)
+ Addedkoa-roarr@0.0.5(transitive)
+ Addedserverless-http@1.10.1(transitive)