npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@paybyrd/threedsecure-service

v3.4.0

Published

JS service implementation to control the 3DS flow over Paybyrd API

Downloads

507

Readme

ThreeDSecure Service

A library to simplify the implementation of 3DS flow using Paybyrd API.

How to install

npm i @paybyrd/threedsecure-service

How to configure ThreeDSecureService

Parameters

  • options: The service configurations object.
  • logger: A notification object to log what is happening inside the service. DEFAULT: RestLogger
  • httpClient: A client used to send the API requests.
  • directoryServer: A service to allow customizations to the Directory Server.
  • challenge: A service to allow customizations to the Challenge.

The options param

  • container: HTML Element where the iframe needed to execute the challenge will be created. The iframe will be resizable as the container. DEFAULT: document.body
  • challengeWindowSize: The challenge window size configuration.
  • onIFrameCreatedFn: A notification function to allow customizations to the iframe created.
  • onIFrameReadyFn: A notification function to allow customizations to the iframe ready.
  • onContainerCreatedFn: A notification function to allow customizations to the container created. If the container is passed, the function will be dispatched anyway.
  • threeDSecureUrl: Paybyrd ThreeDSecure API base URL. DEFAULT: https://threedsecure.paybyrd.com
  • culture: The culture that should be used for API responses. DEFAULT: en-US
  • maxAttempts: The max attempts when the API returns transient errors, like 409, 404 or 504 status codes. DEFAULT: 50
  • attemptDelayInSeconds: The amount of time in milliseconds to wait for the next attempt when some transient error happens.DEFAULT: 2
  • timeoutInSeconds: The amount of time in seconds to wait for the API response. DEFAULT: 30
  • logUrl: A Log API base URL used to send the logs.DEFAULT: null
  • batchLogIntervalInSeconds: The amount of time in seconds to send batch logs to the rest logger. DEFAULT: 5
const container = document.getElementById('container-3ds');
const threeDSecureUrl = 'https://threedsecure.paybyrd.com';
const maxAttempts = 50;
const attemptDelay = 2000;
const culture = 'en-US';

const threeDSService = new ThreeDSecureService({
    container,
    threeDSecureUrl,
    maxAttempts,
    attemptDelay,
    culture
});

How to send the paymentRequest

First of all, we truly recommend that you use the 3DS flow using the Order feature, where you can take a look here. When you create the order, we will return a checkoutKey that must be used for authentication.

const createPaymentRequest = {
    type: 'Card',
    card: {
        cardNumber: '5500000000000001',
        cardHolder: 'PAYBYRD CARD HOLDER',
        cardExpiration: '07/30',
        cvv: '123'
    }
};

const createPaymentResponse = await axios.post(
    `https://gateway.paybyrd.com/api/v2/payment?checkoutKey=${checkoutKey}`,
    createPaymentRequest);

How to send the request

Parameters

  • id: The "id" of threeDSecure node from the payment creation response.
  • correlationId: The "requestId" from the payment creation response.
const threeDSRequest = {
        id: createPaymentResponse.threeDSecure.id,
        correlationId: createPaymentResponse.requestId
    };
const threeDSResponse = await threeDSecureService.execute(threeDSRequest);

How to identify errors

try {
    const threeDSResponse = await threeDSecureService.execute(request);
} catch (error) {
    // Show the error.message in your website
}

Main flow

In the main flow, Paybyrd will deal with everystep.


graph
    subgraph ClientServer[Client server]
        PaymentAPI[Payment API]
    end
    subgraph Customer device
        3DSPage[3DS page]
        ThreeDSecureJS
    end
    subgraph Paybyrd
        GatewayAPI[Gateway]
        3DSAPI[3DS API]
    end
    subgraph ACS
        Bank
    end

    PaymentAPI --> |1. Create payment*|GatewayAPI
    PaymentAPI --> |2. Redirects customer to 3DS page|3DSPage
    3DSPage[3DS page] --> |3. Executes 3DS flow|ThreeDSecureJS
    ThreeDSecureJS --> |4. Authenticate card| Bank
    Bank --> |5. Notifies authentication status|3DSAPI
    3DSAPI --> |6. Executes payment|GatewayAPI
    GatewayAPI --> |7. Notifies payment status|ClientServer

The Gateway will return an redirect URL in order to execute the 3DS flow.

Self checkout

Here, the client should integrate their checkout with 3DS JS.


graph
    subgraph ClientServer[Client server]
        PaymentAPI[Payment API]
    end
    subgraph Customer device
        Checkout
        ThreeDSecureJS
    end
    subgraph Paybyrd
        GatewayAPI[Gateway]
        3DSAPI[3DS API]
    end
    subgraph Internet
        Customer
    end
    subgraph ACS
        Bank
    end

    PaymentAPI --> |1. Create payment*|GatewayAPI
    PaymentAPI --> |2. Send self checkout URL|Customer
    Customer --> |3. Access checkout page|Checkout
    Checkout --> |4. Executes 3DS flow|ThreeDSecureJS
    ThreeDSecureJS --> |5. Authenticate card| Bank
    Bank --> |6. Notifies authentication status|3DSAPI
    3DSAPI --> |7. Executes payment|GatewayAPI
    GatewayAPI --> |8. Notifies payment status|ClientServer

The Gateway will return a ThreeDSecure node with an id on it. This id should be passed to the 3DS JS to start the process.