Skip to content

Latest commit

 

History

History
117 lines (97 loc) · 5.04 KB

README.md

File metadata and controls

117 lines (97 loc) · 5.04 KB

card-info

js-standard-style buildStatus coverage dependencyStatus devDependencyStatus Code Climate Greenkeeper badge

Complex utility for getting card info by its PAN. Supported providers:

Glossary

Install

    npm i @qiwi/card-info
    yarn add @qiwi/card-info

Usage examples

    import BinlistnetService from '@qiwi/card-info/service/binlistnet'
    const service = new BinlistnetService({...})

    service.getPaymentSystem('4111111111111111')    // Promise<'Visa'>
    service.getPaymentSystem('1234')                // Promise<null>
Promise and transport customization

By default card-info uses native Promise and fetch. You may replace them with any compatible api. For example, Bluebird and Axios

    import cardInfo from '@qiwi/card-info'
    import bluebird from 'bluebird'
    import axios from 'axios'
    
    cardInfo.Promise = bluebird
    cardInfo.transport = axios // or any polyfill, pull-fetch-iso, etc.

Service configuration

Each service implementation has own supported opts list, but there is a common part:

Option Type Default Description
skipError bool true means, that any fetch exception would be converted to null response
url string null endpoint url
transport Object null optional extras, merged to fetch arg.
For example, {retries: [{delay: 100},{delay: 2000}}
Service composition
    import {composer} from '@qiwi/card-info'
    import {PreService, BinlistnetService} from '@qiwi/card-info/service'
    
    const preService = new PreService()
    const binlistnetService = new BinlistnetService()
    const composed = compose(preService, binlistnetService)
    
    composed.getPaymentSystem('5321 4012 3456 7890')  // 'Mastercard'
    composed.getCardInfo('5321 4012 3456 7890')       // if preService returns null, the request would be processed with binlist.net backend

Braintree

    import {BraintreeService} from '@qiwi/card-info/service'
    const service = new BraintreeService({...})

    service.getPaymentSystem('6759649826438453')    // Promise<'Maestro'>
    service.getPaymentSystem('1234')                // Promise<null>

Braintree's credit-card-type lib is exposed as static property of the class, so you're able to use its API. For example, add custom definitions:

    BraintreeService.creditCardType.addCard({
        niceType: 'Foo',
        type: 'foo',
        prefixPattern: /^(12345)$/,
        exactPattern: /^(12345)\d*$/,
        gaps: [4, 8, 12],
        lengths: [16],
        code: {
            name: 'CVV',
            size: 3
        }
    })
    const service = new BraintreeService()
    
    service.getPaymentSystem('1234567890123456')    // Promise<'FOO'>
CustomService

Composer supports any impl of IService, so you're let to create your own class.

    import AbstractService from '@qiwi/card-info/service/abstract'

    class CustomService extends AbstractService implements IService {
        getPaymentSystem(pan: string): Promise<?IPaymentSystem> {
            // ...
        }
        getCardInfo(pan: string): Promise<?ICardInfo> {
            // ...
        }
    }
What's PreService

It's client-side implementation of service. The mostly used paysystems and bins are hardcoded for performance purposes.

Alternatives