# peeel

> Compact data footprint

Latest version **1.2.7** (published 2025-02-15) · MIT license · 0 weekly downloads

## Install

```sh
npm install peeel
pnpm add peeel
yarn add peeel
bun add peeel
```

## Health

**Score 35/100 (D)** — status: maintenance-mode.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: stale; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.2.7 |
| Published | 2025-02-15 |
| First published | 2020-09-24 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 19.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 3 |
| Author | Cyril Dever |
| Maintainers | cdever |
| Keywords | data, contact, cryptographic hash, empreinte sociometrique |

## Links

- npm: https://www.npmjs.com/package/peeel
- Repository: https://github.com/cyrildever/peeel
- Homepage: https://github.com/cyrildever/peeel#readme
- Issues: https://github.com/cyrildever/peeel/issues
- npm.io page: https://npm.io/package/peeel

## Dependencies (1)

- [es-normalizer](https://npm.io/package/es-normalizer.md) ^2.2.11

## Alternatives

- [@gemini-wallet/core](https://npm.io/package/@gemini-wallet/core.md) — 515.6K weekly downloads
- [utility](https://npm.io/package/utility.md) — 416.6K weekly downloads
- [@primno/dpapi](https://npm.io/package/@primno/dpapi.md) — 7.2K weekly downloads
- [pi-readseek](https://npm.io/package/pi-readseek.md) — 3.7K weekly downloads
- [@emilia-protocol/verify](https://npm.io/package/@emilia-protocol/verify.md) — 1.1K weekly downloads

## Recent versions

- 1.2.7 (latest) — 2025-02-15
- 1.2.6 — 2024-09-11
- 1.2.5 — 2024-04-08
- 1.2.4 — 2023-10-30
- 1.2.3 — 2023-09-18
- 1.2.2 — 2023-06-29
- 1.2.1 — 2023-05-31
- 1.2.0 — 2023-02-17
- 1.1.11 — 2022-12-19
- 1.1.10 — 2022-11-28
- 1.1.9 — 2022-10-25
- 1.1.8 — 2022-09-07
- 1.1.7 — 2022-06-03
- 1.1.6 — 2022-04-11
- 1.1.5 — 2022-04-04
- … 17 more at https://npm.io/package/peeel/versions

## README

# peeel
_Compact identity footprint_

![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/cyrildever/peeel)
![npm](https://img.shields.io/npm/dw/peeel)
![GitHub last commit](https://img.shields.io/github/last-commit/cyrildever/peeel)
![GitHub issues](https://img.shields.io/github/issues/cyrildever/peeel)
![NPM](https://img.shields.io/npm/l/peeel)

This is a TypeScript library for building a simple contact data footprint as a hash. It's working in both the browser and a NodeJS environment.

### Motivation

For anyone who needs to have consistent ways to compare identity data.

### Description

The Peeel&trade; algorithm is used to create a unique string from complementary data of a contact data (like in the `hashData` field of the *Controllers* in the Fruuut&trade; and Rooot&trade; systems).

It follows the rules below:
- each source data must first be normalized according to the Empreinte Sociométrique's standards;
- the normalized data should then be hashed using the SHA-256 algorithm applied twice;
- the hashed data should then be concatenated in the exact order of the complementaries' code (eg. hashed date of birth then hashed firstname for `dob+firstname`);
- this concatenation should itself be hashed using the SHA-256 algorithm twice to form the final hash data.

The result passed to the `hashData` field is the hexadecimal string representation of the returned hash.

As of this version, the available complementary data are the following:
- `dob`: a date of birth (respecting the ISO format, ie. `YYYYMMDD`);
- `gender`: `1` for male, `2` for female, or `0` for unknown;
- `firstname`: a first name;
- `lastname`: a last name;
- `middle`: the middle names or initials (eg. the `F.` in `John F. Kennedy`).

For further details, you might want to check our [white paper](documentation/src/latex/peeel_whitepaper.pdf).


### Usage

```
npm i peeel
```

```typescript
import { build, complementariesToString, FIRST_NAME, LAST_NAME, parseComplementaries, Source } from 'peeel'

const firstname: Source = {
  data: 'John',
  complementary: FIRST_NAME
}
const dob: Source = {
  data: '20000101',
  complementary: DATE_OF_BIRTH
}
const [hashData, compl] = build([firstname, dob])

// ae76d56055a9acb1fddde77074dcf5353724cb0f6bcb64110f698b19c34be32b
console.log(hashData)

const complStr = complementariesToString(compl)
// firstname+dob
console.log(complStr)

const complementaries = parseComplementaries(complStr)
console.assert(complementaries === compl)
```

##### Dependencies

This library relies on the following dependency:
* [`es-normalizer`](https://www.npmjs.com/package/es-normalizer).

Besides, to run the tests, you would need to install [`live-server`](https://www.npmjs.com/package/live-server):
```console
npm i -g live-server
```
_NB: Change the port number if it's alreayd in use on your machine._


### License

This module is distributed under a MIT license. \
See the [LICENSE](LICENSE) file.


<hr />
&copy; 2020-2025 Cyril Dever. All rights reserved.

---
_Source: https://npm.io/package/peeel · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
