0.11.5 • Published 3 months ago

mask-sensitive-data v0.11.5

Weekly downloads
-
License
MIT
Repository
github
Last release
3 months ago

mask-sensitive-data

Mask sensitive data eg. write debugging data to log files, etc. Supports the below-mentioned items:

  • credit card numbers
  • emails
  • JWT tokens
  • phone numbers
  • UUIDs

Install

npm install mask-sensitive-data

Usage

import maskSensitiveData, { maskString } from 'mask-sensitive-data'

const objectToBeMasked = {
  email: 'john.doe@example.com',
  creditCard: '1234 5678 9000 9876',
  id: '3f8a43fd-6489-4ec7-bd55-7a1ba172d77b',
  name: 'John',
  surname: 'Doe',
  phone: '+358 40 1234567',
  token: 'eyJhbGciOiJIUzI1NiJ9.ew0KICAic3ViIjogIjEyMzQ1Njc4OTAiLA0KICAibmFtZSI6ICJBbGV4IEtvemxvdiIsDQogICJpYXQiOiAxNTE2MjM5MDIyDQp9.PNKysYFTCenU5bekHCmwIxCUXoYG41H_xc3uN3ZF_b8',
  subuser: {
    email: 'john.smith@example.com',
    creditCard: '0987 6543 2100 1234',
    id: '7c942511-969b-4363-af11-9667bf756733',
    name: 'John',
    surname: 'Smith',
    phone: '+358 (0)40 1234567',
    token: 'eyJraWQiOiJlOTRmODk4Mi02YWI1LTQxZjQtODlkYS03MTYxYmFjZDUzM2UiLCJhbGciOiJFUzI1NiJ9.ew0KICAic3ViIjogIjEyMzQ1Njc4OTAiLA0KICAibmFtZSI6ICJBbGV4IEtvemxvdiIsDQogICJpYXQiOiAxNTE2MjM5MDIyDQp9.CtiBkSYbhs5hEvMA7w4_Dbs3S5IHnxJgRo-fI8UhunY9BCUxBcb9vTRB4uRKLbhCL8MRYR90rzdzE7EcllyyDw',
    subuser: {
      email: 'don.johnson@example.com',
      creditCard: '1234-0987-6543-0000',
      id: '12882e75-a726-4615-8631-6ee428e07592',
      name: 'Don',
      surname: 'Johnson',
      phone: '040-1234567',
      token: 'eyJraWQiOiIxNDQzZWU0NS01ZGY4LTRlZmYtYmU2Yi1jYjRmMWI3MDA5YjMiLCJhbGciOiJFUzUxMiJ9.ew0KICAic3ViIjogIjEyMzQ1Njc4OTAiLA0KICAibmFtZSI6ICJBbGV4IEtvemxvdiIsDQogICJpYXQiOiAxNTE2MjM5MDIyDQp9.AB0kMsJ1wGlLG-Z89O-a1eZH0RJf3VYO7uoW3otcqV-xF6THYK3v14yppzv10sQ-HZWyUek6MW8-UzB-uq5Pm917ANZUXIw0XVY794W-u1JYrl36rKRi_DqSEEQ9X-hz9BhVFQEaGyNGZSDdKiVdix6MEMgN_4Nt5O-GXwGk6SLFdpBI',
    },
  },
}

// Mask object properties with default options
maskSensitiveData(objectToBeMasked)
// -> {
//      creditCard: '1234 5#########9876',
//      email: 'john.d#############.com',
//      id: '3f8a43##########################d77b',
//      name: 'John',
//      surname: 'Doe',
//      phone: '+358 4#####4567',
//      token: 'eyJhbG###################################F_b8',
//      subuser: {
//        creditCard: '0987 6#########1234',
//        email: 'john.s###############.com',
//        id: '7c9425##########################6733',
//        name: 'John',
//        surname: 'Smith',
//        phone: '+358 (########4567',
//        token: "eyJraW###################################yyDw",
//        subuser: {
//          creditCard: '1234-0#########0000',
//          email: 'don.jo################.com',
//          id: '12882e##########################7592',
//          name: 'Don',
//          surname: 'Johnson',
//          phone: '040-12#4567',
//          token: 'eyJraW###################################dpBI',
//        },
//      },
//    }

// Mask uuid string with default options
maskSensitiveData(objectToBeMasked.id)
// -> 3f8a43##########################d77b

// Mask credit card number string with custom options
maskSensitiveData(
  objectToBeMasked.creditCard,
  {
    ...defaultMaskOptions,
    visibleCharsFromStart: 0,
  }
)
// -> ###############9876

// Mask array of UUIDs with default options
maskSensitiveData([
  '439a02e5-390e-49f3-a0a3-80d8def9ace4',
  '43982692-386c-42dc-8837-93f479503c56'
])
// -> [
//      '439a02##########################ace4',
//      '439826##########################3c56'
//    ]

// Mask object properties with custom options (skip UUID strings from masking)
maskSensitiveData(
  objectToBeMasked,
  {
    ...defaultMaskOptions,
    uuidPattern: undefined,
  }
)
// -> {
//      creditCard: '1234 5#########9876',
//      email: 'john.d#############.com',
//      id: '3f8a43fd-6489-4ec7-bd55-7a1ba172d77b',
//      name: 'John',
//      surname: 'Smith',
//      phone: '+358 4#####4567',
//      token: 'eyJhbG###################################F_b8',
//      subuser: {
//        creditCard: '0987 6#########1234',
//        email: 'john.s###############.com',
//        id: '7c942511-969b-4363-af11-9667bf756733',
//        name: 'John',
//        surname: 'Doe',
//        phone: '+358 (########4567',
//        token: "eyJraW###################################yyDw",
//        subuser: {
//          creditCard: '1234-0#########0000',
//          email: 'don.jo################.com',
//          id: '12882e75-a726-46#####31-6ee428e07592',
//          name: 'Don',
//          surname: 'Johnson',
//          phone: '040-12#4567',
//          token: 'eyJraW###################################dpBI',
//        },
//      },
//    }

// Mask plain string
maskString('john.doe@example.com')
// -> john.d##########.com

// Mask plain string with custom configuration
maskString(
  'john.doe@example.com',
  {
    maskSymbol: '#',
    maxCharsToMask: 'john.doe@example.com'.length,
    visibleCharsFromStart: 0,
    visibleCharsFromEnd: 0,
  }
)
// -> ####################

API

  • Usage

    maskSensitiveData(objectToBeMasked, options)
  • objectToBeMasked

    Object, Array of strings, or just string to be masked

  • options

    bankCardNumberPattern: RegExp|undefined - RegExp pattern to recognize bank card numbers

    emailPattern: RegExp|undefined - RegExp pattern to recognize email addresses

    jwtPattern: RegExp|undefined - RegExp pattern to recognize JWT tokens

    phoneNumberPattern: RegExp|undefined - RegExp pattern to recognize phone numbers

    uuidPattern: RegExp|undefined - RegExp pattern to recognize UUID identificators

    maskSymbol: string - Symbol to replace masked chars

    maxCharsToMask: string - Maximal length on masking chars

    visibleCharsFromEnd: number - Amount of chars visible from the end of the string

    visibleCharsFromStart: number - Amount of chars visible from the beginning of the string

  • Default options

    {
      bankCardNumberPattern: /([\d]{4}\W){3}[\d]{4}/g,
      emailPattern: /[\w+\.+\-]+@+[\w+\.+\-]+[\.\w]{2,}/g,
      jwtPattern: /[\w-]#\.[\w-]#\.[\w-]#/g,
      phoneNumberPattern: /[\+]?[\d]{1,3}?[-\s\.]?[(]?[\d]{1,3}[)]?[-\s\.]?([\d-\s\.]){7,12}/g,
      uuidPattern: /[\w]{8}\b-[\w]{4}\b-[\w]{4}\b-[\w]{4}\b-[\w]{12}/g,
      maskSymbol: '#',
      maxCharsToMask: 35,
      visibleCharsFromEnd: 4,
      visibleCharsFromStart: 6,
    }
0.11.5

3 months ago

0.9.9

12 months ago

0.10.0

12 months ago

0.11.0

12 months ago

0.11.1

12 months ago

0.11.2

12 months ago

0.11.3

12 months ago

0.11.4

12 months ago

0.9.8

1 year ago

0.9.7

2 years ago

0.9.4

2 years ago

0.9.6

2 years ago

0.9.5

2 years ago

0.9.3

2 years ago

0.9.2

2 years ago

0.9.1

2 years ago

0.9.0

2 years ago