sospedra/semantic-password-generator

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# semantic-password-generator

![GitHub Workflow Status](https://img.shields.io/github/workflow/status/sospedra/semantic-password-generator/ci)
[![npm bundle size](https://img.shields.io/bundlephobia/minzip/semantic-password-generator)](https://bundlephobia.com/result?p=semantic-password-generator)
![npm type definitions](https://img.shields.io/npm/types/typescript)

Secure passwords that humans can read 🗝

### Install

```
yarn add semantic-password-generator
```

### Usage

The Semantic Password Generator (`spg`) uses the official Wikipedia API to get
random articles which are transformed into the passwords. Hence, to allow a better
usage of the network bandwich `spg` generates the password in 2 steps:

1. Load a generator with a Wikipedia article
2. Use the generator to get passwords

```js
import spg from 'semantic-password-generator'

const generator = await spg()
const password = generator()
```

You can then safely generate multiple (similar) passwords with the same generator.
This is usefull if you want to tweak it: length, l33t, symbols, etc.

```js
while (passwords.length < 50) {
  passwords.push(generator())
}
```

The generator **accepts a length argument**. Note that the length won't be enforced.
This means that if you want, say, a 10 chars length password. `spg` probably will return a bit longer one that you can trim if you want to. This is because `spg` tries to keep logic sentences as much as possible and forcing a hard length will cut the last word almost all the times.

```js
// accepts a length
generator(32)

// accepts a config object, as well
// these are the defaults
generator({
  case: false,
  length: 24,
  leet: false,
  random: false,
  symbols: false,
})
```

Notice that internally `spg` ensures a minimum password length of 8. And a maximum as large as the Wikipedia article can provide. If you need less than 8 (~~please don't~~) you can trim it. If you want a larger one you can combine multiple generated passwords.

## Example

To explore the lib and explore it check out the `/packages/website` directory. Here's a snapshot of the important bits:

```js
import spg from 'semantic-password-generator'

let generator = await spg()

$renew.addEventListener('click', async () => {
  // create a new generator from another Wikipedia article
  generator = await spg()
  updatePassword(generator())
})

$tweak.addEventListener('change', async () => {
  // generate similar ones, no need to fetch Wikipedia anew
  updatePassword(generator())
})
```