React Native wrapper for the Stripe Terminal SDK version 3.2.0
yarn add react-stripe-terminal
import { StripeTerminal } from 'react-stripe-terminal-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 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();
},
};
});
}
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.