GithubHelp home page GithubHelp logo

node-scuid's Introduction

scuid

npm npm license npm downloads build status

Collision-resistant IDs optimized for horizontal scaling and performance.

A slim, alternative, and compatible implementation of cuid for node, also featuring a wide range of options, as well as custom random number generator support. It can serve as a drop-in replacement, and is also faster than cuid.

Install via npm

$ npm install --save scuid

Usage

var scuid = require( 'scuid' )

Generate an ID

var id = scuid()
> 'ciux3hs0x0000io10cusdm8r2'

Generate a slug

var slug = scuid.slug()
> '6x1i0r0'

Get the process' fingerprint

var fingerprint = scuid.fingerprint()
> 'io10'

Use a custom (P)RNG

// Create a random number generator;
// It has to have a method called `random`
var generator = {
  random: function() {
    return 5 // chosen by fair dice roll
  }
}

// Create a custom scuid instance
var scuid = require( 'scuid' ).create({
  rng: generator
})

Use other custom options

Note that fiddeling with these might make your IDs incompatible with cuid's guarantees.

var scuid = require( 'scuid' ).create({
  prefix: 'c', // the ID's prefix
  base: 36, // radix used in .toString() calls (2-36)
  blockSize: 4, // block size to pad and trim to
  fill: '0', // block padding character
  pid: process.pid, // process ID
  fingerprint: scuid.createFingerprint( [pid], [hostname] ), // Machine fingerprint
  rng: Math, // Random number generator
})

Tests

Just like cuid, collision resistance for both – slugs and IDs – is tested over 1 million and 2 million iterations respectively. To run the tests, run:

$ npm test

Benchmarks

$ npm run compare
NANOBENCH version 2               |    NANOBENCH version 2
> nanobench benchmark/index.js    |    > nanobench benchmark/cuid.js
                                  |
# id  1000000                   <<<   # id  1000000
ok ~1 s (1 s + 439835 ns)        <<<   ok ~4.74 s (4 s + 737960551 ns)
                                  |
# slug  1000000                 <<<   # slug  1000000
ok ~859 ms (0 s + 858990359 ns)  <<<   ok ~2.67 s (2 s + 665230762 ns)
                                  |
# fingerprint  1000000          >>>   # fingerprint  1000000
ok ~1.87 ms (0 s + 1870116 ns)   >>>   ok ~1.57 ms (0 s + 1571116 ns)
                                  |
all benchmarks completed         <<<   all benchmarks completed
ok ~1.86 s (1 s + 861300310 ns)  <<<   ok ~7.4 s (7 s + 404762429 ns)

node-scuid's People

Contributors

jhermsmeier avatar nexdrew avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

node-scuid's Issues

Cuid has been deprecated because it (and all other non-crypto k-sortable ids) is insecure.

Please upgrade to Cuid2.

Cuid has been deprecated due to security concerns. Likewise, UUID V4 may be insecure due to its reliance on the web crypto APIs, whose random number generators have historically gone years with known bugs that break cryptographic security (details in the Cuid2 documentation). All other UUIDs leak information which may be exploited.

Other ids that share these security concerns include Ulid, Snowflake, ShardingId, pushId, ObjectId, and KSUID. NanoId shares the same dependence on the web crypto API as UUID V4.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.