Skip to content

[Smart Hashing] Add smart hashing documentation in readme #2860

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -960,6 +960,49 @@ There are a few subtle differences from the Fetch API which are meant to limit t
- some options and behaviors are not applicable to Node.js and will be ignored by `node-fetch`. See this list of [known differences](https://github.com/node-fetch/node-fetch/blob/1780f5ae89107ded4f232f43219ab0e548b0647c/docs/v2-LIMITS.md).
- `method` will automatically get upcased for consistency.

## Automatic Hashing Detection with `processHashing`

Our popular segment Adtect destinations support [automatic hash detection](https://segment.com/docs/connections/destinations/#hashing) of personally identifyable information (PII). If your destination hashes PII data, we recommend you use the `processHashing` utility instead of `createHash` from `crypto` module.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder should we explicitly say that this feature will detect if a string is already hashed, and will only apply a hash if the string is not already hashed?


The `processHashing` utility supports `md5`, `sha1`,`sha224`,`sha256`,`sha384` and`sha512` hashing algorithms. It can output digests in `hex` or `base64` format.

**Note**: For empty or whitespace-only strings, the `processHashing` outputs an empty string instead of throwing an error like `createHash` hash module.

### Example 1: Hashing an Email Address

```
import { processHashing } from 'destination-actions/lib/hashing-utils'

const email = ' [email protected] '
const hashedEmail = processHashing(
email,
'sha256',
'hex',
(value) => value.trim().toLowerCase()
)

console.log(hashedEmail) // hashed string
```

### Example 2: Hashing a Phone Number

```
const phone = '+1(706)-767-5127'
const normalizePhone = (value: string) => value.replace(/[^0-9]/g, '')

const hashedPhone = processHashing(
phone,
'sha256',
'hex',
normalizePhone
)

console.log(hashedPhone) // hashed string
```

**Requesting Additional Algorithms**
To request additional hash algorithms, contact [email protected].

## Support

For any issues, please contact our support team at [email protected].
Expand Down Expand Up @@ -991,3 +1034,7 @@ SOFTWARE.
## Contributing

All third party contributors acknowledge that any contributions they provide will be made under the same open source license that the open source project is provided under.

```

```
Comment on lines +1037 to +1040
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
```
```

Loading