1.0.0 • Published 6 years ago

@qiwi/card-info v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
6 years ago

card-info

js-standard-style buildStatus coverage dependencyStatus devDependencyStatus Code Climate

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:

OptionTypeDefaultDescription
skipErrorbooltruemeans, that any fetch exception would be converted to null response
urlstringnullendpoint url
transportObjectnulloptional 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
1.0.0

6 years ago

0.7.1

6 years ago

0.7.0

6 years ago

0.6.0

6 years ago

0.5.0

6 years ago

0.4.0

6 years ago

0.3.0

6 years ago

0.2.0

6 years ago

0.1.0

6 years ago