Files
self/app/android/react-native-passport-reader
Justin Hernandez 99165c95dc [SELF-723] feat: add structured NFC and Proof logging (#1048)
* feat: add structured NFC logging

* fix ci

* Fix: add deps

* logging fixes. use breadcrumbs

* fix android build

* update SeverityLevel

* [SELF-705] feat: add proof event logging (#1057)

* feat: add proof event logging

* refactor: unify sentry event logging

* fix types

* fix mock

* simplify

* code rabbit feedback

* fix tests

---------

Co-authored-by: seshanthS <seshanth@protonmail.com>
2025-09-12 17:12:44 -07:00
..
2024-02-16 13:29:05 +01:00
2024-01-10 10:52:10 +01:00
2025-02-11 10:08:07 +01:00
2024-01-10 10:52:10 +01:00

react-native-passport-reader

Adapted from passport-reader. Individual modifications are too many to enumerate, but essentially: the workflow code was adapted to the needs of a React Native module, and the scanning code was largely left as is.

Getting started

$ npm install react-native-passport-reader --save
$ react-native link react-native-passport-reader

In your android/app/build.gradle add packagingOptions:

android {
    ...
    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }
}

In AndroidManifest.xml add:

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.nfc" android:required="false" />

If your app will not function without nfc capabilities, set android:required above to true

Usage

import PassportReader from 'react-native-passport-reader'
// { scan, cancel, isSupported }

async function scan () {
  // 1. start a scan
  // 2. press the back of your android phone against the passport
  // 3. wait for the scan(...) Promise to get resolved/rejected

  const { 
    firstName, 
    lastName, 
    gender, 
    issuer, 
    nationality, 
    photo 
  } = await PassportReader.scan({
    // yes, you need to know a bunch of data up front
    // this is data you can get from reading the MRZ zone of the passport
    documentNumber: 'ofDocumentBeingScanned',
    dateOfBirth: 'yyMMdd',
    dateOfExpiry: 'yyMMdd'
  })

  const { base64, width, height } = photo
}