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

random-org

v2.2.0

Published

Truly random numbers via Random.org's json-rpc api

Downloads

1,658

Readme

random-org Build Status

A lightweight wrapper around the Random.org json-rpc api for Node.js

Random.org is a truly random number generation service. According to their homepage, they're using 'atmospheric noise' to generate said random bits. The aim of this module is to provide a slightly more node-centric interface to their json-rpc api than existing offerings.

To obtain an API key, please see their pricing page (includes free keys for developers at the time of writing). Or, if you already have an api key from the public beta, you can migrate it to a production key. Please be a nice api consumer and check out their usage guidelines before using this module.

In case of any discrepancies between this documentation and the official Random.org documentation, theirs is correct! Please open an issue or PR if you notice any, though.

Installation

Install through npm:

$ npm install random-org

Support

The current, active & maintenance LTS versions of Node.js are supported.

Usage

See the following high-level example for getting started:

const RandomOrg = require('random-org');
// or
import RandomOrg from 'random-org';

var random = new RandomOrg({ apiKey: '12345-67890-api-key' });
random.generateIntegers({ min: 1, max: 99, n: 2 })
  .then(function(result) {
    console.log(result.random.data); // [55, 3]
  });

Typescript types are included.

All methods return native Promises.

Basic api methods

The so-called 'basic' api methods are the ones to use if all you need is a few bits, of the random variety. All of these api calls have a similarly formatted response (documented here).

random.generateIntegers(params : Object) : Promise

Generate some truly random integers. Response

params = {
  /* Required */
  // The number of random integers to generate (valid values: [1-10000]).
  n: Number,
  // Lower bound for random integers (valid values: [-1e9 - 1e9] and `< max`).
  min: Number,
  // Upper bound for random integers (valid values: [-1e9 - 1e9] and `> min`).
  max: Number,

  /* Optional */
  // Whether or not the generated numbers can contain duplicates (default: true).
  replacement: Boolean,
  // The base of the generated numbers (default: 10; valid values: 2, 8, 10 or 16).
  // If `base` is any value other than 10, the generated numbers will be returned as strings.
  base: Number
}

random.generateIntegerSequences(params : Object) : Promise

Generate some truly random sequences of integers. Response

params = {
  /* Required */
  // The number of random integer sequences to generate (valid values: [1-10000]).
  n: Number,
  // The length of the sequences to generate (valid values: [1-10000]).
  // Alternatively an array of `n` lengths if you need sequences of varying
  // lengths (the sum of all lengths must be in the range: [1-10000]).
  length: Number | Array<Number>,
  // Lower bound for random integers (valid values: [-1e9 - 1e9] and `< max`).
  min: Number,
  // Upper bound for random integers (valid values: [-1e9 - 1e9] and `> min`).
  max: Number,

  /* Optional */
  // Whether or not the generated numbers can contain duplicates (default: true).
  replacement: Boolean,
  // The base of the generated numbers (default: 10; valid values: 2, 8, 10 or 16).
  // If `base` is any value other than 10, the generated numbers will be returned as strings.
  base: Number
}

random.generateDecimalFractions(params : Object) : Promise

Generate some random real numbers between 0 and 1. Response

params = {
  /* Required */
  // The number of random reals to generate (valid values: [1-10000]).
  n: Number,
  // The number of decimal places to use (valid values: [1-20]).
  decimalPlaces: Number,

  /* Optional */
  // Whether or not the generated numbers can contain duplicates (default: true).
  replacement: Boolean
}

random.generateGaussians(params : Object) : Promise

Generate random numbers from a Gaussian distribution. Response

There is no replacement option for this api call, meaning the response can contain duplicates.

params = {
  /* Required */
  // The number of random numbers to generate (valid values: [1-10000]).
  n: Number,
  // The mean of the distribution to pull numbers from (valid values: [-1e6 - 1e6]).
  mean: Number,
  // Said distribution's standard deviation (valid values [-1e6 - 1e6]).
  standardDeviation: Number,
  // The number of significant digits for your requested random numbers (valid values: [2-20]).
  significantDigits: Number,
}

random.generateStrings(params : Object) : Promise

Generate random strings of a given length, using a provided set of characters. Response

params = {
  /* Required */
  // The number of random strings to generate (valid values: [1-10000]).
  n: Number,
  // The length of each string you'd like generated.
  length: Number,
  // The set of characters allowed to appear in the generated strings (maximum length: 80).
  // Unicode characters are supported.
  characters: String,

  /* Optional */
  // Whether or not the generated numbers can contain duplicates (default: true).
  replacement: Boolean
}

random.generateUUIDs(params : Object) : Promise

Generate version 4 Universally Unique IDentifiers. Response

As with numbers pulled from a Gaussian distribution, this api call does not have a replacement property. Although each UUID is drawn from a 128bit space, collisions are still possible (albeit rare).

params = {
  /* Required */
  // The number of UUIDs to generate (valid values: [1-1000]).
  n: Number
}

random.generateBlobs(params : Object) : Promise

Generate random binary blobs. Response

The total size of all blobs requested mustn't exceed 128KB (1,048,576 bits).

params = {
  /* Required */
  // The number of blobs you'd like (valid values: [1-100]).
  n: Number,
  // The size of each blob, in bits (valid values: [1-1048576] and `size % 8 === 0`).
  size: Number,

  /* Optional */
  // The format in which you'd like your blob (default: 'base64'; valid values: 'base64' or 'hex').
  format: String
}

Basic method response format

The basic api methods for generating random bits all have a consistent response format:

response = {
  random: {
    // Array containing your requested random numbers or strings.
    data: Array,
    // The time that request was completed, in ISO 8601 format (parsable with new Date(isoString)).
    completionTime: String
  },
  // The number of random bits generated in this request.
  bitsUsed: Number,
  // An estimate of the number of remaining bits you can request.
  bitsLeft: Number,
  // An estimate of the number of remaining api calls you can make.
  requestsLeft: Number,
  // The recommended number of milliseconds you should wait before making another request.
  advisoryDelay: Number
}

Signed api methods

Random.org also provides methods for generating signed random numbers so that their authenticity can be verified against the random.org public key.

All of the basic 'generation' api methods have a signed counterpart that take the exact same parameters along with an additional, optional userData parameter (see below):

  • generateIntegersgenerateSignedIntegers
  • generateIntegerSequencesgenerateSignedIntegerSequences
  • generateDecimalFractionsgenerateSignedDecimalFractions
  • generateGaussiansgenerateSignedGaussians
  • generateStringsgenerateSignedStrings
  • generateUUIDsgenerateSignedUUIDs
  • generateBlobsgenerateSignedBlobs

The userData parameter is an optional, arbitrary json object that will be included in the signed response if specified. It's maximum size in encoded (string) form is 1000 characters.

The main difference between the basic and the signed methods is their response:

response = {
  random: {
    // The name of the method you called.
    method: String,
    // A base64-encoded SHA-512 hash of your api key.
    // This allows you to provide this response to a third party without having to disclose your api key.
    hashedApiKey: String,

    /*
     * The parameters of your request will also be included here in the response.
     * E.g. for `generateSignedStrings`, you would receive additional properties:
     * n, length, characters & replacement
     */

    // Array containing your requested random numbers or strings.
    data: Array,
    // The time that request was completed, in ISO 8601 format (parsable with new Date(isoString)).
    completionTime: String,
    // The serial number of this response (unique to your api key's requests).
    serialNumber: Number,
    // Copied from the original request's `userData` parameter or `null` if not specified.
    userData: Object | null,
    // An object describing the license terms under which the random data in this response can be used.
    license: Object,
  },
  // A base64-encoded signature of `response.random`, signed with Random.org's private key.
  signature: String,
  // The number of random bits generated in this request.
  bitsUsed: Number,
  // An estimate of the number of remaining bits you can request.
  bitsLeft: Number,
  // An estimate of the number of remaining api calls you can make.
  requestsLeft: Number,
  // The recommended number of milliseconds you should wait before making another request.
  advisoryDelay: Number
}

random.verifySignature(params : Object) : Promise

In addition to the number generation methods, Random.org also provide a convenience method api for verifying previously issued signed random numbers.

params = {
  /* Required */
  // The original `response.random` object, received from one of the signed api calls.
  random: Object,
  // The corresponding `response.signature` string from the same request.
  signature: String
}

response = {
  // True if the signed numbers were generated by Random.org, false if not.
  authenticity: Boolean
}

random.getResult(params: Object) : Promise

When requesting data using the signed API methods, Random.org will store your result for some time (a minimum of 24 hours at time of writing). You can fetch it again using the serialNumber that was returned in the original response.

Please note: All of the data in a successful response is historical. Including bitsUsed, bitsLeft, requestsLeft and advisoryDelay.

params = {
  /* Required */
  // The serial number of the response you wish to fetch again.
  serialNumber: Number
}

Account information

random.getUsage() : Promise

Get information about your account / api key.

response = {
  // Your api key's current status. Either 'stopped', 'paused' or 'running'.
  // In order request random bits, your api key must be 'running'.
  status: String,
  // The timestamp at which your API key was created, in ISO 8601 format.
  creationTime: String,
  // An estimate of the number of remaining bits you can request.
  bitsLeft: Number,
  // An estimate of the number of remaining api calls you can make.
  requestsLeft: Number,
  // The recommended number of milliseconds you should wait before making another request.
  advisoryDelay: Number
}

Random.org docs

For full api specs, see the official docs at https://api.random.org/json-rpc/2.

Note that the differences between the official docs and those presented here are simply due to the abstraction provided by the module.

Disclaimer

This module merely provides a wrapper around the public api provided by Random.org. As such, I can't guarantee the availability or randomness of their service (or anything else for that matter!).

License

MIT