@trustchex/react-native-sdk 1.520.0 → 1.520.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
 
3
- import NFCManager, { NfcTech } from 'react-native-nfc-manager';
3
+ import NFCManager, { NfcTech, NfcAdapter } from 'react-native-nfc-manager';
4
4
  import { CardService } from "./cardService.js";
5
5
  import { ResponseAPDU } from "./smartcards/responseAPDU.js";
6
6
  import { Platform } from 'react-native';
7
+ import { diagnostics } from "../Libs/diagnostics.js";
7
8
 
8
9
  // iOS CoreNFC "Tag connection lost" (NFCError 100) is a well-known issue whose
9
10
  // likelihood scales with the number of APDU round-trips in a session — a large
@@ -22,14 +23,35 @@ const isTagLostError = e => {
22
23
  // an empty message is also treated as a lost tag (the observed DG2 failure).
23
24
  return msg === '' || msg.includes('lost') || msg.includes('not connected') || msg.includes('tag was') || msg.includes('session') || msg.includes('invalidated') || msg.includes('timeout') || msg.includes('100');
24
25
  };
26
+ const NFC_TECHS = [NfcTech.IsoDep, NfcTech.NfcA, NfcTech.NfcB];
25
27
  export class NFCManagerCardService extends CardService {
26
28
  isOpened = false;
27
29
  async open() {
28
30
  await NFCManager.start();
29
- await NFCManager.requestTechnology([NfcTech.IsoDep, NfcTech.NfcA, NfcTech.NfcB]);
30
- // Increase transceive timeout for slow curves (e.g. brainpoolP512r1 ECDH on passport chip)
31
+ // Explicitly enable Android's NfcAdapter.enableReaderMode() polling path.
32
+ // Without isReaderModeEnabled, requestTechnology() falls back to the
33
+ // legacy enableForegroundDispatch()/ACTION_TECH_DISCOVERED intent path,
34
+ // which several OEM NFC stacks (observed: OPPO/ColorOS) fail to deliver
35
+ // reliably for non-NDEF, IsoDep-only tags like eID/ePassport chips —
36
+ // chipDetected never fires, with no error (looks like the chip was never
37
+ // presented). FLAG_READER_SKIP_NDEF_CHECK avoids a slow NDEF probe delaying
38
+ // IsoDep connect on chips with no NDEF message.
31
39
  if (Platform.OS === 'android') {
40
+ const readerModeOptions = {
41
+ isReaderModeEnabled: true,
42
+ readerModeFlags: NfcAdapter.FLAG_READER_NFC_A | NfcAdapter.FLAG_READER_NFC_B | NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK
43
+ };
44
+ // Record AFTER requestTechnology resolves: it only means reader mode
45
+ // was successfully engaged if the call didn't throw. Recording it
46
+ // beforehand would mark a request that failed to even start (e.g.
47
+ // reader mode rejected by the OEM stack) as 'readerMode', defeating the
48
+ // point of this field for exactly the failure case it exists to catch.
49
+ await NFCManager.requestTechnology(NFC_TECHS, readerModeOptions);
50
+ diagnostics.nfcSetDiscoveryMode('readerMode');
51
+ // Increase transceive timeout for slow curves (e.g. brainpoolP512r1 ECDH on passport chip)
32
52
  await NFCManager.setTimeout(10000);
53
+ } else {
54
+ await NFCManager.requestTechnology(NFC_TECHS);
33
55
  }
34
56
  this.isOpened = true;
35
57
  }
@@ -191,6 +191,9 @@ export class DiagnosticsCollector {
191
191
  nfcChipDetected() {
192
192
  this.nfc.chipDetected = true;
193
193
  }
194
+ nfcSetDiscoveryMode(mode) {
195
+ this.nfc.discoveryMode = mode;
196
+ }
194
197
  nfcSetAuth(protocol, oid) {
195
198
  this.nfc.authProtocol = protocol;
196
199
  if (oid) this.nfc.paceOid = oid;
@@ -2,4 +2,4 @@
2
2
 
3
3
  // This file is auto-generated. Do not edit manually.
4
4
  // Version is synced from package.json during build.
5
- export const SDK_VERSION = '1.520.0';
5
+ export const SDK_VERSION = '1.520.2';
@@ -1 +1 @@
1
- {"version":3,"file":"nfcManagerCardService.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/EIDReader/nfcManagerCardService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAiCzD,qBAAa,qBAAsB,SAAQ,WAAW;IACpD,OAAO,CAAC,QAAQ,CAAS;IACZ,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B,SAAS,IAAI,OAAO;IAQ3B,OAAO,CAAC,qBAAqB,CAAS;IAE/B,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAI1C,QAAQ,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAwC/D,MAAM,IAAI,UAAU;IAIpB,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAKjD;sDACkD;IAC3C,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAIzC;2DACuD;IAC1C,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAM/B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAIpC"}
1
+ {"version":3,"file":"nfcManagerCardService.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/EIDReader/nfcManagerCardService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAoCzD,qBAAa,qBAAsB,SAAQ,WAAW;IACpD,OAAO,CAAC,QAAQ,CAAS;IACZ,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiC3B,SAAS,IAAI,OAAO;IAQ3B,OAAO,CAAC,qBAAqB,CAAS;IAE/B,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAI1C,QAAQ,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAwC/D,MAAM,IAAI,UAAU;IAIpB,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAKjD;sDACkD;IAC3C,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAIzC;2DACuD;IAC1C,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAM/B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAIpC"}
@@ -32,6 +32,17 @@ export interface NfcStep {
32
32
  export interface NfcDiagnostics {
33
33
  attempted: boolean;
34
34
  chipDetected: boolean;
35
+ /**
36
+ * Android tag-discovery mechanism requested for this attempt:
37
+ * 'readerMode' (NfcAdapter.enableReaderMode — the polling path we now force)
38
+ * or 'foregroundDispatch' (legacy ACTION_TECH_DISCOVERED intent path, known
39
+ * to be unreliable on some OEM NFC stacks for non-NDEF IsoDep-only tags).
40
+ * Undefined on iOS, where discovery goes through CoreNFC instead.
41
+ * Recorded so a `chipDetected: false` report can distinguish "the modern
42
+ * polling path still didn't see a chip" (device/positioning issue) from
43
+ * "we were silently on the legacy path" (a config regression).
44
+ */
45
+ discoveryMode?: 'readerMode' | 'foregroundDispatch';
35
46
  /** 'PACE' | 'BAC' | 'none' */
36
47
  authProtocol: 'PACE' | 'BAC' | 'none';
37
48
  paceFellBackToBac: boolean;
@@ -177,6 +188,7 @@ export declare class DiagnosticsCollector {
177
188
  setMrz(m: Partial<MrzDiagnostics>): void;
178
189
  nfcAttemptStarted(): void;
179
190
  nfcChipDetected(): void;
191
+ nfcSetDiscoveryMode(mode: 'readerMode' | 'foregroundDispatch'): void;
180
192
  nfcSetAuth(protocol: 'PACE' | 'BAC' | 'none', oid?: string): void;
181
193
  nfcPaceFellBackToBac(reason?: string): void;
182
194
  /** Record one completed step. Keep messages short and free of PII. */
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/diagnostics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/diagnostics.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const SDK_VERSION = "1.520.0";
1
+ export declare const SDK_VERSION = "1.520.2";
2
2
  //# sourceMappingURL=version.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trustchex/react-native-sdk",
3
- "version": "1.520.0",
3
+ "version": "1.520.2",
4
4
  "description": "Trustchex mobile app react native SDK for android or ios devices",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -1,8 +1,9 @@
1
- import NFCManager, { NfcTech } from 'react-native-nfc-manager';
1
+ import NFCManager, { NfcTech, NfcAdapter } from 'react-native-nfc-manager';
2
2
  import { CardService } from './cardService';
3
3
  import { CommandAPDU } from './smartcards/commandAPDU';
4
4
  import { ResponseAPDU } from './smartcards/responseAPDU';
5
5
  import { Platform } from 'react-native';
6
+ import { diagnostics } from '../Libs/diagnostics';
6
7
 
7
8
  // iOS CoreNFC "Tag connection lost" (NFCError 100) is a well-known issue whose
8
9
  // likelihood scales with the number of APDU round-trips in a session — a large
@@ -34,18 +35,39 @@ const isTagLostError = (e: unknown): boolean => {
34
35
  );
35
36
  };
36
37
 
38
+ const NFC_TECHS = [NfcTech.IsoDep, NfcTech.NfcA, NfcTech.NfcB];
39
+
37
40
  export class NFCManagerCardService extends CardService {
38
41
  private isOpened = false;
39
42
  public async open(): Promise<void> {
40
43
  await NFCManager.start();
41
- await NFCManager.requestTechnology([
42
- NfcTech.IsoDep,
43
- NfcTech.NfcA,
44
- NfcTech.NfcB,
45
- ]);
46
- // Increase transceive timeout for slow curves (e.g. brainpoolP512r1 ECDH on passport chip)
44
+ // Explicitly enable Android's NfcAdapter.enableReaderMode() polling path.
45
+ // Without isReaderModeEnabled, requestTechnology() falls back to the
46
+ // legacy enableForegroundDispatch()/ACTION_TECH_DISCOVERED intent path,
47
+ // which several OEM NFC stacks (observed: OPPO/ColorOS) fail to deliver
48
+ // reliably for non-NDEF, IsoDep-only tags like eID/ePassport chips —
49
+ // chipDetected never fires, with no error (looks like the chip was never
50
+ // presented). FLAG_READER_SKIP_NDEF_CHECK avoids a slow NDEF probe delaying
51
+ // IsoDep connect on chips with no NDEF message.
47
52
  if (Platform.OS === 'android') {
53
+ const readerModeOptions = {
54
+ isReaderModeEnabled: true,
55
+ readerModeFlags:
56
+ NfcAdapter.FLAG_READER_NFC_A |
57
+ NfcAdapter.FLAG_READER_NFC_B |
58
+ NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK,
59
+ };
60
+ // Record AFTER requestTechnology resolves: it only means reader mode
61
+ // was successfully engaged if the call didn't throw. Recording it
62
+ // beforehand would mark a request that failed to even start (e.g.
63
+ // reader mode rejected by the OEM stack) as 'readerMode', defeating the
64
+ // point of this field for exactly the failure case it exists to catch.
65
+ await NFCManager.requestTechnology(NFC_TECHS, readerModeOptions);
66
+ diagnostics.nfcSetDiscoveryMode('readerMode');
67
+ // Increase transceive timeout for slow curves (e.g. brainpoolP512r1 ECDH on passport chip)
48
68
  await NFCManager.setTimeout(10000);
69
+ } else {
70
+ await NFCManager.requestTechnology(NFC_TECHS);
49
71
  }
50
72
  this.isOpened = true;
51
73
  }
@@ -34,6 +34,17 @@ export interface NfcStep {
34
34
  export interface NfcDiagnostics {
35
35
  attempted: boolean;
36
36
  chipDetected: boolean;
37
+ /**
38
+ * Android tag-discovery mechanism requested for this attempt:
39
+ * 'readerMode' (NfcAdapter.enableReaderMode — the polling path we now force)
40
+ * or 'foregroundDispatch' (legacy ACTION_TECH_DISCOVERED intent path, known
41
+ * to be unreliable on some OEM NFC stacks for non-NDEF IsoDep-only tags).
42
+ * Undefined on iOS, where discovery goes through CoreNFC instead.
43
+ * Recorded so a `chipDetected: false` report can distinguish "the modern
44
+ * polling path still didn't see a chip" (device/positioning issue) from
45
+ * "we were silently on the legacy path" (a config regression).
46
+ */
47
+ discoveryMode?: 'readerMode' | 'foregroundDispatch';
37
48
  /** 'PACE' | 'BAC' | 'none' */
38
49
  authProtocol: 'PACE' | 'BAC' | 'none';
39
50
  paceFellBackToBac: boolean;
@@ -297,6 +308,10 @@ export class DiagnosticsCollector {
297
308
  this.nfc.chipDetected = true;
298
309
  }
299
310
 
311
+ nfcSetDiscoveryMode(mode: 'readerMode' | 'foregroundDispatch'): void {
312
+ this.nfc.discoveryMode = mode;
313
+ }
314
+
300
315
  nfcSetAuth(protocol: 'PACE' | 'BAC' | 'none', oid?: string): void {
301
316
  this.nfc.authProtocol = protocol;
302
317
  if (oid) this.nfc.paceOid = oid;
package/src/version.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  // This file is auto-generated. Do not edit manually.
2
2
  // Version is synced from package.json during build.
3
- export const SDK_VERSION = '1.520.0';
3
+ export const SDK_VERSION = '1.520.2';