
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
openapi-factory
Advanced tools
This is an open source project managed by the Authress Engineering team.
Provides an simple event interceptor for AWS Lambda. Handles events tha come from API Gateway, SQS, EventBridge, and all other AWS services and routes them to appropriate lambda code. This enables you to have single AWS Lambda function for your whole service instead of needing tons of nano-ones to handle every route.
By merging your lambda functions together, you eliminate 99% of all cold starts, and simplify deployment to AWS Lambda.
Each of these usable completely independently. But both work together as well:
With the aws-architect npm package, you can also develop your lambda locally, spinning up a full HTTP API to have quick development cycles.
const ApiFactory = require('openapi-factory');
const options = {
requestMiddleware(request, context) {
return request;
},
responseMiddleware(request, response) {
return response;
},
errorMiddleware(request, error) {
return { statusCode: 500, body: { message: 'Unexpected Error' } };
}
};
const api = new ApiFactory(options);
api.get('/example', async request => {
// Short hand for returning a JSON object
return { value: 'test' };
// Or explicitly return the whole response
return {
body: { value: 'testWithStatus' },
statusCode: 200,
headers: { 'Content-Type': 'application/json' }
};
});
// converts dynamic variables paths
api.get('/example/{id}/subpath', request => {
const idFromPath = request.pathParameters.id;
const stageVariable = request.stageVariables.VARIABLE_NAME;
const query = request.queryStringParameters.QUERY_NAME;
const headers = request.headers.HEADER_NAME;
});
api.setAuthorizer(request => {
return 'valid-policy-document';
});
api.onEvent(event => {
console.log('triggered by a direct invocation from a Lambda Event Source.');
// AWS Documentation: https://docs.aws.amazon.com/lambda/latest/dg/lambda-services.html
// Example payloads: https://lambda.101i.de/
});
api.onSchedule(data => {
console.log('triggered by a CloudWatch Rule schedule');
});
api.get('/items/{itemid}', async request => {
console.log(request.path.itemId);
return {
body: { value: 'testWithStatus' },
statusCode: 200,
headers: { 'Content-Type': 'application/json' }
};
});
// paths have an optional options object which has property "rawBody" to return the raw body only.
api.get('/items/{itemid}', { rawbody: true }, async request => {
console.log('This is he raw body of the request: ', request.body);
return { statusCode: 200 };
});
// Example: AWS Api Gateway magic string handling for CORS and 404 fallbacks.
api.options('/{proxy+}', () => {
return {
statusCode: 200,
headers: {
'Access-Control-Allow-Headers': 'Content-Type,X-Amz-Date,Authorization,X-Api-Key',
'Access-Control-Allow-Methods': 'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT',
'Access-Control-Allow-Origin': '*'
}
};
});
api.any('/{proxy+}', () => {
return {
statusCode: 404,
headers: {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*'
}
};
});
The default headers returned unless overwritten are:
{ 'Content-Type': 'application/links+json', 'Access-Control-Allow-Origin': '*' }{ 'Content-Type': 'application/octet-stream', 'Access-Control-Allow-Origin': '*' }It is possible that the default handling of REST routes does not match explicitly match your strategy for resolution. Since there is nothing more than string matching it is fairly easy to hoist this function.
const ApiFactory = require('openapi-factory');
// The default path resolver is the one contained in the PathResolver.
// * It parses the registered paths, stores them in a dictionary, and then looks them up later when necessary.
options.pathResolver = new PathResolver();
const api = new ApiFactory(options);
// However this can be replaced by a custom implementation which includes storePath and resolvePath
class PathResolver {
constructor() {
this.currentPathDictionary = {
GET: {},
POST: {}
// ...
};
}
// will get in the current dictionary object as well, there is a specific dictionary for each verb
// * the current path string
// * the object associated with that path
// and returns the updated dictionary
storePath(currentVerbPathDictionary, dynamicPath, storageObject) {
return new PathDictionary();
}
// Later resolvePath is called to get back the currentPathDictionary and raw path,
// * and expect to return the pre-stored storageObject
resolvePath(currentPathDictionary, resolvedPath) {
return storageObject;
}
}
FAQs
Build API's and serverless code using node and first class functions.
The npm package openapi-factory receives a total of 149 weekly downloads. As such, openapi-factory popularity was classified as not popular.
We found that openapi-factory demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.