npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@dotmh/lambda-controller-cors

v1.2.0

Published

A Plugin to add Cors support to Lambda Controller

Downloads

15

Readme

Lambda Controller Logo

Lambda Control - CORS

DotMH Future Gadget Lab Lambda Controller Plugin XO code style Codacy Badge Codacy Badge Build Buy us a tree NPM npm bundle size Contributor Covenant

Adds Cross Origin Resource Sharing (CORS) support to Lambda Controller.

Installation

To Install

npm i @dotmh/lambda-controller-cors

Requires Lambda Controller to be installed. Lambda Controller is a peer dependancy and so won't be installed automatically

Usage

The CORS plugin usage is slightly different to other plugins. To use CORS I recommend it you add it to the contrustor of your controller.

i.e.

const Controller = require('@dotmh/lambda-controller');
const cors = require('@dotmh/lambda-controller-cors');

class MyController extends Controller {
  constructor(event, ctx, cb) {
    super(event,ctx,cb);
    this.add(cors());
    this.cors();
  }
}

This will add the cors plugin and configure the cors headers.

You will notice that we call a function to add, this is because the cors plugin supplies a factory unlike other plugins.

Configuration

The CORS plugin supplies a factory unlike other Lambda Controller plugins. This is so that you can pass it a configuration. The CORS plugin takes a list of allowed origins that CORS requests can come from.

Configuration Object

  // .... your controller class 
  this.add(cors({
    allowed: [
      'localhost', 
      'prod.example.com',
      'dev.example.com'
    ]
  }});
  // ... the rest of your controller 

Configuration Options

Allowed

allowed accepts ether a list of allowed domains , a single domain or a ''. Whent the '' is used cors is added to all hosts i.e. allow all.

Extra Steps

To fully support CORS in AWS API Gateway we have to do some extra configuration. If you are using the Servless Framework.

Options Route

CORS uses a preflight to the route to get the CORS headers before making a full request. To support this we have to configure the a route for options. To support this the mixin automatically adds a cors route handler to your controller called corsOptions. So we need to configure a handler for that

module.exports.corsOptions = function (event, ctx, callback) {
	(new Controller(event, ctx, callback)).corsOptions();
};

and then add that as an http event in the serverless.yml

functions:
  corsOptions:
    handler: handler.corsOptions
    events:
      - http:
          path: "/"
          method: options
          cors:
            origin: '*'
            headers:
            - Content-Type
            - X-Amz-Date
            - Authorization
            - X-Api-Key
            - X-Amz-Security-Token
            - X-Amz-User-Agent
            allowCredentials: true

Every other route

API Gateway needs to know what it should do with CORS requests. I.e. it needs enabling. This has to be done on everyone of your route

To do this you have to add the cors property to your route.

cors:
  origin: '*'
  headers:
  - Content-Type
  - X-Amz-Date
  - Authorization
  - X-Api-Key
  - X-Amz-Security-Token
  - X-Amz-User-Agent
  allowCredentials: true

PLEASE NOTE I hope to update this readme with the steps required when using AWS SAM soon.

Documentation

For the API documentation see https://dotmh.github.io/lambda-controller-cors/

Or to read locally

npm run readdocs

Licence

This package is Treeware. If you use it in production, then we ask that you buy the world a tree to thank us for our work. By contributing to the Treeware forest you’ll be creating employment for local families and restoring wildlife habitats.

Credits

Logo design by @dotmh