2.0.1 • Published 12 months ago

idor v2.0.1

Weekly downloads
13
License
ISC
Repository
github
Last release
12 months ago

Basic usage

The Idor constructor accepts an unsigned int, unsigned BigInt, or UUID string identifier, and a model type name that identifies the model class the identifier references.

The .toString() method returns a string that is safe to expose to the client side (the "public id").

The .valueOf() method returns the original value (the "private id").

Idor.fromString() can be used to create a new Idor instance from a "public id" string.

The .typename getter can be used to get the model class the identifier references.

var Idor = require("idor").default({ salt: "secret" });

new Idor(1, "User").toString();
// 'FLN1a5AnVsGFmVXQYabHxA'

new Idor(1, "Post").toString();
// 'Dw3BiVRByuvYjKUKA4MjwQ'

Idor.fromString("FLN1a5AnVsGFmVXQYabHxA").valueOf();
// 1

Idor.fromString("FLN1a5AnVsGFmVXQYabHxA").typename;
// 'User'

The constructor will also accept BigInt and UUID values.

new Idor(1n, "User").toString()
// 'SpSYCHJFD4XD+L4c1OIRUQ'

Idor.fromString("SpSYCHJFD4XD+L4c1OIRUQ").valueOf()
// 1n

Idor.fromString("SpSYCHJFD4XD+L4c1OIRUQ").typename
// 'User'

new Idor("123e4567-e89b-12d3-a456-426655440000", "User").toString();
// 'xhmWUgGswnl87h2bvkoB2LNy/QtjTfg9Cbp7dABDkrc'

Idor.fromString("xhmWUgGswnl87h2bvkoB2LNy/QtjTfg9Cbp7dABDkrc").valueOf();
// '123e4567-e89b-12d3-a456-426655440000'

Idor.fromString("xhmWUgGswnl87h2bvkoB2LNy/QtjTfg9Cbp7dABDkrc").typename;
// 'User'

Scoped usage

Scoping Idor IDs allows adding an additional layer of abstraction on identifiers exposed to the client-side.

new Idor(1, "User", "private").toString();
// 'FqPuJ4ohXd2UvRvl+bvRvg'

Idor.fromString("FqPuJ4ohXd2UvRvl+bvRvg").valueOf();
// null (wrong scope)

Idor.fromString("FqPuJ4ohXd2UvRvl+bvRvg", "private").valueOf();
// 1

Idor.fromString("FqPuJ4ohXd2UvRvl+bvRvg", "private").typename;
// 'User'

The default scope is 'public'.

new Idor(1, "User", "public").toString();
// 'FLN1a5AnVsGFmVXQYabHxA'

The .scope setter allows setting the scope after object initialisation

const a = new Idor(1, "User");
a.scope = "private";
a.toString();
// "FqPuJ4ohXd2UvRvl+bvRvg"

const b = Idor.fromString("FqPuJ4ohXd2UvRvl+bvRvg");
b.scope = "private";
b.valueOf();
// 1

Protect exposed identifiers

The application SHOULD set a unique salt to ensure identifiers cannot be computed from exposed Idor values, or generated externally.

var Idor = require("idor").default({ salt: "S3cr3t" });

new Idor(1, "User").toString();
// 'TCfNIEMg4cKgTS5cLsLXzg'

new Idor(1, "User", "private").toString();
// 'HURdRJrGSiIz0/rnvO1s+g'

Idor.fromString("HURdRJrGSiIz0/rnvO1s+g").valueOf();
// null (wrong salt)

Idor.fromString("TCfNIEMg4cKgTS5cLsLXzg").valueOf();
// 1
2.0.1

12 months ago

2.0.0

2 years ago

1.2.2

4 years ago

1.2.1

4 years ago

1.2.0

4 years ago

1.1.2

5 years ago

1.1.1

5 years ago

1.1.0

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago