2.0.1 • Published 5 months ago

@qiwi/masker-schema v2.0.1

Weekly downloads
1
License
MIT
Repository
github
Last release
5 months ago

@qiwi/masker-schema

Masker scheme builder and executor

Features

  • Builds object schema on masking
  • Applies masker schema to object as a directive

Masker schema is a superset of a regular json-schema. It introduces maskValue and maskKey directives to declare pipelines for object parts.

export interface IMaskerSchema {
  type?: any
  maskValue?: Array<IMaskerDirective>
  maskKey?: Array<IMaskerDirective>
  properties?: Record<string, IMaskerSchema>
  items?: Record<string, IMaskerSchema> | Array<IMaskerSchema>
}

Install

yarn add @qiwi/masker-schema

Usage

import {pipeline, createMasker} from '@qiwi/masker'
import {pipe as schema} from '@qiwi/masker-schema'

const masker = createMasker({
  pipeline: [schema, ...pipeline]
})

const obj = {
  token: 'foo bar',
  password: 'bazqux',
  details: {
    pans: ['4111111111111111', '1234123412341234'],
    some: 'value'
  }
}
const res = masker.sync(obj, {unbox: false})

// res.value
{
  token: '***',
  password: '***',
  details: {
    pans: ['4111 **** **** 1111', '1234123412341234'],
    some: 'value',
  },
}

// res.schema
{
  type: 'object',
  properties: {
    token: {type: 'string', maskValue: ['plain', 'secret-key']},
    password: {type: 'string', maskValue: ['plain', 'secret-key']},
    details: {
      type: 'object',
      properties: {
        pans: {
          type: 'object',
          properties: {0: {type: 'string', maskValue: ['pan']}, 1: {type: 'string'}},
        }, some: {type: 'string'},
      },
    },
  },
}

Now res.schema may be applied to similar objects/instances.

const _res = masker.sync(obj, {unbox: false, schema: res.schema})

The entries, which have no maskValue or maskKey, will be not processed at all. Masker wouldn't even try to observe its inners. This feature makes a lot of sense if you deal with huge same-structured objects.

import {pipeline, createMasker, registry} from '@qiwi/masker'
import {pipe as schema} from '@qiwi/masker-schema'

const obj = {
  foo: 'foo foo',
  bar: 'bar',
  baz: 'baz',
}
const masker = createMasker({
  registry,
  pipeline: [schema, ...pipeline],
})
const masked = masker.sync(obj, {
  schema: {
    type: 'object',
    properties: {
      foo: {
        type: 'string',
        maskValue: ['strike'],
      },
    },
  },
})

// masked:
{
  foo: '*** ***',
  bar: 'bar',
  baz: 'baz',
}

License

MIT

2.0.1

5 months ago

2.0.0

5 months ago

1.5.2

2 years ago

1.5.1

3 years ago

1.5.0

3 years ago

1.4.6

3 years ago

1.4.5

3 years ago

1.4.4

3 years ago

1.4.3

3 years ago

1.4.2

3 years ago

1.4.1

3 years ago

1.4.0

3 years ago

1.3.5

3 years ago

1.3.4

3 years ago

1.3.3

3 years ago

1.3.2

3 years ago

1.3.1

4 years ago

1.3.0

4 years ago

1.2.1

4 years ago

1.2.0

4 years ago

1.1.0

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago