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

guide

v1.1.0

Published

Encrypted Globally Unique Identifier generator.

Downloads

111

Readme

GUIDE

Travis build status Coveralls NPM version Canonical Code Style Twitter Follow

Encrypted Globally Unique Identifier (GUIDE) generator.

Implementation

  • GUIDE is using aes-256-gcm encryption.
  • Identifiers are encoded using URL-safe base64 encoding.

aes-256-gcm is the closest thing I have found to a misuse resistant algorithm. If you know of a better encryption algorithm (misuse resistant) thats available to Node.js – raise an issue.

Use case

GUIDE is used to mitigate certain types of DDoS attacks.

API

type GuidePayloadType = {|
  id: number | string,
  namespace: string,
  type: string
|};

/**
* @throws InvalidGuideError Throws if input guide cannot be decrypted.
* @throws UnexpectedNamespaceValueError Throws if the namespace contained in the payload does not match the expected namespace.
* @throws UnexpectedResourceTypeNameValueError Throws if the resource type name contained in the payload does not match the expected resource type name.
*/
type FromGuideType = (initializationVectorValue: string, expectedNamespace: string, expectedResourceTypeName: string, guide: string) => GuidePayloadType;

/**
 * @param initializationVectorValue Initialization vector. Must be at least 128 characters long.
 * @param namespace A namespace of the GUID (e.g. company name or the application name).
 * @param type A resource type name (e.g. article).
 */
type ToGuideType = (initializationVectorValue: string, namespace: string, type: string, id: number | string) => string;

Usage

import {
  fromGuide,
  toGuide,
} from 'guide';

const initializationVectorValue = 'lGMUlgYOZXkT7MWjRozJ7F3MlSm89SPkop2AvQciBk1xXLGCX5aUy3uIJHEInjQzyHZSnZ0NaQaVpEldAlVWeguOLYkW5ZluwbaHY0iWEgFULRV92GV5KgHj2P5YChgW';
const namespace = 'gajus';
const resourceTypeName = 'article';

const guide = toGuide(initializationVectorValue, namespace, resourceTypeName, 1);

// "ao-CZ7gmFSaFhA4tzWaM2CiOGtt772ZqJDB1k1ty3QWkc24Rx43iYuUc_S0ecZiiWS8aTP-0EQ"

const payload = fromGuide(initializationVectorValue, namespace, resourceTypeName, guide);

// {
//   "id": 1,
//   "namespace": "gajus",
//   "type": "article"
// }

Handling errors

fromGuide method can throw the following errors.

|Error constructor name|Description| |---|---| |InvalidGuideError|Throws if input guide cannot be decrypted.| |UnexpectedNamespaceValueError|Throws if the namespace contained in the payload does not match the expected namespace.| |UnexpectedResourceTypeNameValueError|Throws if the resource type name contained in the payload does not match the expected resource type name.|

Error constructors can be imported from guide package.

UnexpectedNamespaceValueError and UnexpectedResourceTypeNameValueError extend from InvalidGuideError. It is enough to check if an error object is an instance of InvalidGuideError to assert that an error is a result of an invalid GUIDE.

import {
  fromGuide,
  InvalidGuideError
} from 'guide';

try {
  fromGuide(initializationVectorValue, namespace, resourceTypeName, guide);
} catch (error) {
  if (error instanceof InvalidGuideError) {
    // Handle error.
  }

  // Re-throw other errors.
  throw error;
}