react-stripe-terminal-sdk
TypeScript icon, indicating that this package has built-in type declarations

0.3.4 • Public • Published

React Native Stripe Terminal 3.2.0

React Native wrapper for the Stripe Terminal SDK version 3.2.0

Installation

yarn add react-stripe-terminal

Usage

Importing the SDK into your app

import { StripeTerminal } from 'react-stripe-terminal-sdk';

Initializing the SDK

In order to to initialize the SDK, a valid token must be set. This implementation handles this process in a similar way as the native SDK does by manually fetching the token.

const initTerminal = async () =>
  await StripeTerminal.create({
    fetchConnectionToken: async () => {
      const response = await fetch(
        'https://api.stripe.com/v1/terminal/connection_tokens',
        {
          method: 'POST',
        }
      );
      const data = await response.json();
      return data.secret;
    },
    onUnexpectedReaderDisconnect: () => {
      console.log('Reader unexpectedly disconnected.');
    },
  });

Discovering readers

Discovering readers works using the Observable pattern and notifies when the discovery is done.

public static discoverReaders(
    // Supported: BluetoothScan, BluetoothProximity, Internet
    discoveryMethod: DiscoveryMethod,
    // Simulated reader allows testing without a physical terminal
    simulated: boolean
  ): Observable<Reader[]> {

    this.ensureInitialized();
    return new Observable((subscriber) => {
      this.listener.addListener(
        'readerDiscoveryCompletion',
        (event: { readers?: Reader[] }) => {
          try {
            const readers =
              event!.readers!.map((reader: Reader) => {
                return reader;
              }) || [];
            subscriber.next(readers);
          } catch (error) {
            console.log(error);
          }
        }
      );

      // Starts the actual discovery using the provided method.
      StripeTerminal.discoverReaders(discoveryMethod, simulated)
        .then(() => {
          subscriber.complete();
        })
        .catch((err: any) => {
          subscriber.error(err);
        });
      return {
        unsubscribe: () => {
        	// This call is recommended in order
        	// to avoid memory leaks
          this.cancelDiscoverReaders();
        },
      };
    });
  }

Connecting to a Reader

To connect to a specific reader, the terminal and location ID of the discovered reader is needed.

  public static async connectBluetoothReader(
    // The reader identifier
    serialNumber: string,
    // Where is it
    locationId: string
  ): Promise<Reader> {
    this.ensureInitialized();

    const data = await StripeTerminal.connectBluetoothReader(
      serialNumber,
      locationId
    );

    return data?.reader ?? null;
  }

For further information on how to use the SDK, please check the sample in the example folder.

Package Sidebar

Install

npm i react-stripe-terminal-sdk

Weekly Downloads

8

Version

0.3.4

License

MIT

Unpacked Size

3.79 MB

Total Files

70

Last publish

Collaborators

  • sergioahv15
  • pamobo0609
  • juanpalacort