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

@cooper667/sns-validator

v1.0.3

Published

A standalone validator for inbound SNS HTTP messages. No dependency on the AWS SDK for JavaScript.

Downloads

2

Readme

Amazon SNS Message Validator for JavaScript

@awsforjs on Twitter Build Status Apache 2 License

The Amazon SNS Message Validator for Node.js library allows you to validate that incoming HTTP(S) POST messages are valid Amazon SNS notifications. This library is standalone and does not depend on the AWS SDK for JavaScript.

Installation

The npm module's name is sns-validator. Install with npm or yarn:

npm i sns-validator

or

yarn add sns-validator

Basic Usage

To validate a message, you can instantiate a MessageValidator object and pass an SNS message and a callback to its validate method. The message should be the result of calling JSON.parse on the body of the HTTP(S) message sent by SNS to your endpoint. The callback should take two arguments, the first being an error and the second being the successfully validated SNS message.

The message validator checks the SigningCertURL, SignatureVersion, and Signature to make sure they are valid and consistent with the message data.

const MessageValidator = require('sns-validator'),
    validator = new MessageValidator();

    validator.validate(message).then(message => {
        // message has been validated and its signature checked.
    }).catch(err => {
        // Your message could not be validated.
    });

Installation

The SNS Message Validator relies on the Node crypto module and is only designed to work on a server, not in a browser. The validation performed is only necessary when subscribing HTTP(S)

About Amazon SNS

Amazon Simple Notification Service (Amazon SNS) is a fast, fully-managed, push messaging service. Amazon SNS can deliver messages to email, mobile devices (i.e., SMS; iOS, Android and FireOS push notifications), Amazon SQS queues,and — of course — HTTP/HTTPS endpoints.

With Amazon SNS, you can setup topics to publish custom messages to subscribed endpoints. However, SNS messages are used by many of the other AWS services to communicate information asynchronously about your AWS resources. Some examples include:

  • Configuring Amazon Glacier to notify you when a retrieval job is complete.
  • Configuring AWS CloudTrail to notify you when a new log file has been written.
  • Configuring Amazon Elastic Transcoder to notify you when a transcoding job changes status (e.g., from "Progressing" to "Complete")

Though you can certainly subscribe your email address to receive SNS messages from service events like these, your inbox would fill up rather quickly. There is great power, however, in being able to subscribe an HTTP/HTTPS endpoint to receive the messages. This allows you to program webhooks for your applications to easily respond to various events.

Handling Messages

Confirming a Subscription to a Topic

In order to handle a SubscriptionConfirmation message, you must use the SubscribeURL value in the incoming message:

const https = require('https'),
    MessageValidator = require('sns-validator'),
    validator = new MessageValidator();

validator.validate(message).then(message => {
    if (message['Type'] === 'SubscriptionConfirmation') {
        https.get(message['SubscribeURL'], function (res) {
          // You have confirmed your endpoint subscription
        });
    }
}).catch(err => {
    console.error(err);
});

If an incoming message includes multibyte characters and its encoding is utf8, set the encoding to validator.

const MessageValidator = require('sns-validator'),
    validator = new MessageValidator();
validator.encoding = 'utf8';

Receiving a Notification

To receive a notification, use the same code as the preceding example, but check for the Notification message type.

if (message['Type'] === 'Notification') {
    // Do whatever you want with the message body and data.
    console.log(`${message['MessageId']}: ${message['Message']}`);
}

The message body will be a string, and will hold whatever data was published to the SNS topic.

Unsubscribing

Unsubscribing looks the same as subscribing, except the message type will be UnsubscribeConfirmation.

if (message['Type'] === 'UnsubscribeConfirmation') {
    // Unsubscribed in error? You can resubscribe by visiting the endpoint
    // provided as the message's SubscribeURL field.
    https.get(message['SubscribeURL'], (res) => {
        // You have re-subscribed your endpoint.
    });
}