@trustchex/react-native-sdk 1.487.0 → 1.489.0

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.
Files changed (83) hide show
  1. package/ios/ImageDecoder/ImageDecoderModule.m +12 -0
  2. package/ios/ImageDecoder/ImageDecoderModule.swift +43 -0
  3. package/lib/module/Shared/Components/EIDScanner.js +100 -37
  4. package/lib/module/Shared/Components/IdentityDocumentCamera.constants.js +9 -1
  5. package/lib/module/Shared/Components/IdentityDocumentCamera.flows.js +22 -2
  6. package/lib/module/Shared/Components/IdentityDocumentCamera.js +1 -1
  7. package/lib/module/Shared/Components/IdentityDocumentCamera.utils.js +7 -7
  8. package/lib/module/Shared/EIDReader/cardFileInputStream.js +25 -2
  9. package/lib/module/Shared/EIDReader/defaultFileSystem.js +56 -6
  10. package/lib/module/Shared/EIDReader/eidReader.js +138 -16
  11. package/lib/module/Shared/EIDReader/lds/icao/dg11File.js +23 -6
  12. package/lib/module/Shared/EIDReader/nfcManagerCardService.js +79 -9
  13. package/lib/module/Shared/EIDReader/protocol/paceDH.js +101 -0
  14. package/lib/module/Shared/EIDReader/protocol/paceErrors.js +34 -0
  15. package/lib/module/Shared/EIDReader/protocol/paceProtocol.js +53 -4
  16. package/lib/module/Shared/EIDReader/protocol/readBinaryAPDUSender.js +7 -3
  17. package/lib/module/Shared/Libs/country-display.utils.js +13 -1
  18. package/lib/module/Shared/Libs/diagnosticReport.js +24 -1
  19. package/lib/module/Shared/Libs/diagnostics.js +30 -8
  20. package/lib/module/Shared/Libs/jp2Decode.js +43 -0
  21. package/lib/module/Shared/Libs/mrz.utils.js +22 -5
  22. package/lib/module/Shared/Libs/mrzTransliteration.js +14 -1
  23. package/lib/module/Translation/Resources/en.js +12 -0
  24. package/lib/module/Translation/Resources/tr.js +12 -0
  25. package/lib/module/version.js +1 -1
  26. package/lib/typescript/src/Shared/Components/EIDScanner.d.ts.map +1 -1
  27. package/lib/typescript/src/Shared/Components/IdentityDocumentCamera.constants.d.ts.map +1 -1
  28. package/lib/typescript/src/Shared/Components/IdentityDocumentCamera.d.ts.map +1 -1
  29. package/lib/typescript/src/Shared/Components/IdentityDocumentCamera.flows.d.ts +11 -0
  30. package/lib/typescript/src/Shared/Components/IdentityDocumentCamera.flows.d.ts.map +1 -1
  31. package/lib/typescript/src/Shared/Components/IdentityDocumentCamera.utils.d.ts +1 -1
  32. package/lib/typescript/src/Shared/Components/IdentityDocumentCamera.utils.d.ts.map +1 -1
  33. package/lib/typescript/src/Shared/EIDReader/cardFileInputStream.d.ts +3 -0
  34. package/lib/typescript/src/Shared/EIDReader/cardFileInputStream.d.ts.map +1 -1
  35. package/lib/typescript/src/Shared/EIDReader/defaultFileSystem.d.ts +4 -0
  36. package/lib/typescript/src/Shared/EIDReader/defaultFileSystem.d.ts.map +1 -1
  37. package/lib/typescript/src/Shared/EIDReader/eidReader.d.ts.map +1 -1
  38. package/lib/typescript/src/Shared/EIDReader/lds/icao/dg11File.d.ts.map +1 -1
  39. package/lib/typescript/src/Shared/EIDReader/nfcManagerCardService.d.ts +9 -1
  40. package/lib/typescript/src/Shared/EIDReader/nfcManagerCardService.d.ts.map +1 -1
  41. package/lib/typescript/src/Shared/EIDReader/protocol/paceDH.d.ts +56 -0
  42. package/lib/typescript/src/Shared/EIDReader/protocol/paceDH.d.ts.map +1 -0
  43. package/lib/typescript/src/Shared/EIDReader/protocol/paceErrors.d.ts +26 -0
  44. package/lib/typescript/src/Shared/EIDReader/protocol/paceErrors.d.ts.map +1 -0
  45. package/lib/typescript/src/Shared/EIDReader/protocol/paceProtocol.d.ts.map +1 -1
  46. package/lib/typescript/src/Shared/EIDReader/protocol/readBinaryAPDUSender.d.ts.map +1 -1
  47. package/lib/typescript/src/Shared/Libs/country-display.utils.d.ts.map +1 -1
  48. package/lib/typescript/src/Shared/Libs/diagnosticReport.d.ts.map +1 -1
  49. package/lib/typescript/src/Shared/Libs/diagnostics.d.ts +9 -1
  50. package/lib/typescript/src/Shared/Libs/diagnostics.d.ts.map +1 -1
  51. package/lib/typescript/src/Shared/Libs/jp2Decode.d.ts +13 -0
  52. package/lib/typescript/src/Shared/Libs/jp2Decode.d.ts.map +1 -0
  53. package/lib/typescript/src/Shared/Libs/mrz.utils.d.ts.map +1 -1
  54. package/lib/typescript/src/Shared/Libs/mrzTransliteration.d.ts.map +1 -1
  55. package/lib/typescript/src/Translation/Resources/en.d.ts +12 -0
  56. package/lib/typescript/src/Translation/Resources/en.d.ts.map +1 -1
  57. package/lib/typescript/src/Translation/Resources/tr.d.ts +12 -0
  58. package/lib/typescript/src/Translation/Resources/tr.d.ts.map +1 -1
  59. package/lib/typescript/src/version.d.ts +1 -1
  60. package/package.json +1 -1
  61. package/src/Shared/Components/EIDScanner.tsx +153 -69
  62. package/src/Shared/Components/IdentityDocumentCamera.constants.ts +9 -1
  63. package/src/Shared/Components/IdentityDocumentCamera.flows.ts +22 -2
  64. package/src/Shared/Components/IdentityDocumentCamera.tsx +1 -2
  65. package/src/Shared/Components/IdentityDocumentCamera.utils.ts +6 -8
  66. package/src/Shared/EIDReader/cardFileInputStream.ts +30 -6
  67. package/src/Shared/EIDReader/defaultFileSystem.ts +75 -17
  68. package/src/Shared/EIDReader/eidReader.ts +172 -24
  69. package/src/Shared/EIDReader/lds/icao/dg11File.ts +28 -13
  70. package/src/Shared/EIDReader/nfcManagerCardService.ts +91 -13
  71. package/src/Shared/EIDReader/protocol/paceDH.ts +183 -0
  72. package/src/Shared/EIDReader/protocol/paceErrors.ts +41 -0
  73. package/src/Shared/EIDReader/protocol/paceProtocol.ts +72 -6
  74. package/src/Shared/EIDReader/protocol/readBinaryAPDUSender.ts +7 -4
  75. package/src/Shared/Libs/country-display.utils.ts +12 -1
  76. package/src/Shared/Libs/diagnosticReport.ts +32 -1
  77. package/src/Shared/Libs/diagnostics.ts +38 -14
  78. package/src/Shared/Libs/jp2Decode.ts +48 -0
  79. package/src/Shared/Libs/mrz.utils.ts +27 -6
  80. package/src/Shared/Libs/mrzTransliteration.ts +16 -3
  81. package/src/Translation/Resources/en.ts +19 -0
  82. package/src/Translation/Resources/tr.ts +19 -0
  83. package/src/version.ts +1 -1
@@ -24,6 +24,26 @@ const icaoCheckDigit = str => {
24
24
  }
25
25
  return String(sum);
26
26
  };
27
+
28
+ /**
29
+ * Reportable NFC error code, e.g. `NFC-AUTH-6982`. MUST match the code shown to
30
+ * the user by EIDScanner (built in eidReader.buildNfcErrorCode) so a user who
31
+ * quotes "NFC-AUTH-6982" can be matched verbatim against their diagnostics.json.
32
+ * Local copy of the category→prefix map (eidReader pulls in native NFC deps).
33
+ */
34
+ const NFC_CATEGORY_CODE = {
35
+ user_cancelled: 'CANCEL',
36
+ tag_lost: 'TAGLOST',
37
+ timeout: 'TIMEOUT',
38
+ unsupported: 'UNSUPPORTED',
39
+ not_enabled: 'DISABLED',
40
+ auth_failed: 'AUTH',
41
+ reading_error: 'READ'
42
+ };
43
+ const nfcErrorCode = (category, statusWord) => {
44
+ const part = NFC_CATEGORY_CODE[category ?? ''] ?? 'READ';
45
+ return statusWord ? `NFC-${part}-${statusWord}` : `NFC-${part}`;
46
+ };
27
47
  /** Compute per-field check-digit pass/fail for a TD1 MRZ (best-effort). */
28
48
  const computeTd1CheckDigits = mrzText => {
29
49
  if (!mrzText) return undefined;
@@ -120,7 +140,10 @@ export const buildDiagnosticReport = params => {
120
140
 
121
141
  // --- compact email body (always under MAX_BODY_BYTES) ---
122
142
  const nfc = diag.nfc;
123
- const nfcLine = nfc.attempted ? `${nfc.authProtocol}${nfc.paceFellBackToBac ? '→BAC' : ''} · ${nfc.succeeded ? 'success' : `failed at ${nfc.failureStep ?? '?'} (${nfc.errorCategory ?? 'error'})`}` : 'not attempted';
143
+ // Status word of the failing step (if any), used to build the reportable code.
144
+ const failingSw = nfc.failureStep ? nfc.steps.find(s => s.step === nfc.failureStep)?.sw : undefined;
145
+ const nfcCode = nfcErrorCode(nfc.errorCategory, failingSw);
146
+ const nfcLine = nfc.attempted ? `${nfc.authProtocol}${nfc.paceFellBackToBac ? '→BAC' : ''} · ${nfc.succeeded ? 'success' : `failed at ${nfc.failureStep ?? '?'} (${nfc.errorCategory ?? 'error'}) [${nfcCode}]`}` : 'not attempted';
124
147
  const checksLine = checkDigits ? Object.entries(checkDigits).map(([k, v]) => `${k}:${v}`).join(' ') : 'n/a';
125
148
  const body = ['TRUSTCHEX SCAN REPORT', `Device: ${device.brand} ${device.model} · ${device.systemName} ${device.systemVersion}${device.apiLevel ? ` (API ${device.apiLevel})` : ''}`, `SDK: ${sdkVersion} (build ${device.buildNumber}) · ${device.manufacturer} · ${device.deviceId}`, `Document: ${scanDataObj.documentType ?? 'unknown'} · source: ${scanDataObj.dataSource ?? 'unknown'}`, `MRZ: ${diag.mrz.reachedStable ? 'stable' : 'NOT stable'} after ${diag.mrz.framesProcessed} frames · checks: ${checksLine}`, `Camera: ${diag.camera.frames} frames · brightness ${diag.camera.avgBrightness} (low:${yesNo(diag.camera.hadLowBrightness)} blur:${yesNo(diag.camera.hadBlurryFrames)})`, `NFC: ${nfcLine}`, sessionId ? `Session: ${sessionId}` : '', '', 'Describe the issue here:', '', '', '— Full diagnostics and document images are attached. Please review before sending; do not edit the attachments. —'].filter(Boolean).join('\n');
126
149
  const subject = `Trustchex scan report — ${scanDataObj.documentType ?? 'doc'} — ${device.brand} ${device.model} — v${sdkVersion}${sessionId ? ` — ${sessionId}` : ''}`;
@@ -100,7 +100,16 @@ export class DiagnosticsCollector {
100
100
 
101
101
  nfcAttemptStarted() {
102
102
  // A fresh attempt: bump retry count if a previous attempt left steps.
103
- if (this.nfc.attempted) this.nfc.retryCount += 1;
103
+ if (this.nfc.attempted) {
104
+ this.nfc.retryCount += 1;
105
+ // A retry supersedes the prior attempt: that attempt's failure is stale,
106
+ // so clear it. The failure markers then reflect only the CURRENT attempt —
107
+ // a within-attempt failure (e.g. PACE failing before a BAC fallback in the
108
+ // same read) is retained, while a failure that a later retry recovered is
109
+ // not reported as the outcome.
110
+ this.nfc.failureStep = undefined;
111
+ this.nfc.errorCategory = undefined;
112
+ }
104
113
  this.nfc.attempted = true;
105
114
  }
106
115
  nfcChipDetected() {
@@ -124,15 +133,28 @@ export class DiagnosticsCollector {
124
133
  this.nfc.failureStep = step.step;
125
134
  }
126
135
  }
136
+
137
+ /** The first NFC step that failed in the current attempt (e.g. 'paceAuth',
138
+ * 'readDG2'), or undefined. Lets the caller build a step-specific error code
139
+ * without taking a full snapshot. */
140
+ getFailureStep() {
141
+ return this.nfc.failureStep;
142
+ }
143
+
144
+ /** APDU status word recorded for the failing step, if any (e.g. '6982'). */
145
+ getFailureStatusWord() {
146
+ const fs = this.nfc.failureStep;
147
+ if (!fs) return undefined;
148
+ return this.nfc.steps.find(s => s.step === fs && !s.ok)?.sw;
149
+ }
127
150
  nfcResult(succeeded, errorCategory) {
128
151
  this.nfc.succeeded = succeeded;
129
- if (succeeded) {
130
- // The read ultimately succeeded transient per-attempt failures (e.g. a
131
- // recovered DG2 retry, or the expected EF.CardAccess 6982 on a BAC-only
132
- // card) must NOT be reported as the outcome. Clear the failure markers.
133
- this.nfc.failureStep = undefined;
134
- this.nfc.errorCategory = undefined;
135
- } else if (errorCategory) {
152
+ // Note: a failure recovered by a RETRY is already cleared in
153
+ // nfcAttemptStarted (the retry supersedes it). We deliberately do NOT clear
154
+ // here on success, so a within-attempt failure that a fallback recovered
155
+ // (e.g. PACE failing before BAC succeeds in the same read) stays visible in
156
+ // diagnostics — that is a meaningful signal, not the overall outcome.
157
+ if (!succeeded && errorCategory) {
136
158
  this.nfc.errorCategory = errorCategory;
137
159
  }
138
160
  }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ import { NativeModules, Platform } from 'react-native';
4
+
5
+ /**
6
+ * Native JPEG2000 decoder bridge.
7
+ *
8
+ * The passport chip portrait (DG2) is frequently stored as JPEG2000
9
+ * (image/jp2). React Native's <Image> renders a JP2 data URI on Android (its
10
+ * Fresco/Skia pipeline decodes it) but NOT on iOS (UIImage-backed <Image>
11
+ * refuses the data URI), so the chip photo showed as a placeholder on iOS.
12
+ *
13
+ * iOS's ImageIO *can* decode JPEG2000, so the native `ImageDecoderModule`
14
+ * round-trips the JP2 to JPEG. We only need this on iOS; on Android the raw
15
+ * JP2 already renders, so there is no native counterpart and we no-op.
16
+ */
17
+
18
+ const ImageDecoder = NativeModules.ImageDecoderModule;
19
+
20
+ /**
21
+ * Decode a JPEG2000 buffer to JPEG using the native iOS decoder.
22
+ *
23
+ * Returns the JPEG bytes + mime type on success, or null when native decode is
24
+ * unavailable (Android, or the module isn't linked) or fails — callers should
25
+ * fall back to their existing behaviour (keep raw JP2).
26
+ */
27
+ export async function decodeJp2ToJpeg(jp2Buffer) {
28
+ if (Platform.OS !== 'ios' || !ImageDecoder?.decodeJp2ToJpeg) {
29
+ return null;
30
+ }
31
+ try {
32
+ const jpegBase64 = await ImageDecoder.decodeJp2ToJpeg(jp2Buffer.toString('base64'));
33
+ if (!jpegBase64) {
34
+ return null;
35
+ }
36
+ return {
37
+ base64: jpegBase64,
38
+ mimeType: 'image/jpeg'
39
+ };
40
+ } catch {
41
+ return null;
42
+ }
43
+ }
@@ -30,6 +30,21 @@ const normalizeDocumentCode = code => {
30
30
  return 'I';
31
31
  };
32
32
 
33
+ /**
34
+ * Strip MRZ filler characters from a human-readable text field. In the MRZ a
35
+ * single `<` separates words and `<<` separates components; the `mrz` package
36
+ * usually trims trailing fillers but can leave embedded `<`/`<<` in name and
37
+ * optional-data fields, which then surfaced raw in the UI (e.g.
38
+ * "ANNA<<MARIA"). Convert any filler run to a single space and trim, so the
39
+ * displayed value reads "ANNA MARIA". Returns null for empty/filler-only input.
40
+ * Only for text fields — never call on dates, sex, codes, or check digits.
41
+ */
42
+ const cleanMRZTextField = value => {
43
+ if (!value) return null;
44
+ const cleaned = value.replace(/</g, ' ').replace(/\s+/g, ' ').trim();
45
+ return cleaned.length > 0 ? cleaned : null;
46
+ };
47
+
33
48
  /**
34
49
  * Pads a TD1 line to the fixed 30-char width.
35
50
  *
@@ -1264,14 +1279,16 @@ const validateMRZ = (mrzText, autocorrect = true) => {
1264
1279
  issuingState: result.fields.issuingState || null,
1265
1280
  documentNumber: result.fields.documentNumber || null,
1266
1281
  nationality: result.fields.nationality || null,
1267
- lastName: result.fields.lastName || null,
1268
- firstName: result.fields.firstName || null,
1282
+ // Text fields can carry embedded MRZ filler (`<`/`<<`) — strip it so the
1283
+ // UI shows "ANNA MARIA", not "ANNA<<MARIA".
1284
+ lastName: cleanMRZTextField(result.fields.lastName),
1285
+ firstName: cleanMRZTextField(result.fields.firstName),
1269
1286
  sex: result.fields.sex || null,
1270
1287
  birthDate: result.fields.birthDate || null,
1271
1288
  expirationDate: result.fields.expirationDate || null,
1272
- personalNumber: result.fields.personalNumber || null,
1273
- optional1: result.fields.optional1 || null,
1274
- optional2: result.fields.optional2 || null
1289
+ personalNumber: cleanMRZTextField(result.fields.personalNumber),
1290
+ optional1: cleanMRZTextField(result.fields.optional1),
1291
+ optional2: cleanMRZTextField(result.fields.optional2)
1275
1292
  };
1276
1293
  return {
1277
1294
  valid: true,
@@ -45,7 +45,20 @@ function convertName(rawName, map) {
45
45
  return rawName.split(' ').map(word => applyDigraphMap(word, map)).join(' ');
46
46
  }
47
47
  export function buildDocumentName(rawFirst, rawLast, issuingState, dg11First, dg11Last) {
48
- if (dg11First != null && dg11Last != null && (dg11First || dg11Last)) {
48
+ // Prefer DG11 (the chip's printed name in UTF-8) ONLY when it carries a proper
49
+ // two-part split — both a surname AND a given name. That is the authoritative
50
+ // correction for chips whose DG1 MRZ name lacks a `<<` separator (e.g. Turkish
51
+ // PACE passports), where the raw MRZ would otherwise put the full name into
52
+ // the surname.
53
+ //
54
+ // A one-sided DG11 result (only surname, or only given name) is NOT reliable —
55
+ // it usually means DG11 had no clear separator, so we don't know which part it
56
+ // is. Back-filling the missing side from the raw MRZ caused the given name to
57
+ // be duplicated into both fields, so we now fall through to the MRZ-based
58
+ // split instead, which is more trustworthy than mixing the two sources.
59
+ const hasFirst = (dg11First ?? '') !== '';
60
+ const hasLast = (dg11Last ?? '') !== '';
61
+ if (hasFirst && hasLast) {
49
62
  return {
50
63
  rawFirst,
51
64
  rawLast,
@@ -50,6 +50,11 @@ export default {
50
50
  'diagnosticReport.noticeBody': 'This opens a draft with your scan data, document images and technical details so support can help resolve a scanning issue. Review it before sending.',
51
51
  'diagnosticReport.continue': 'Continue',
52
52
  'diagnosticReport.cancel': 'Cancel',
53
+ 'diagnosticReport.shareFailedTitle': "Couldn't open the share sheet",
54
+ 'diagnosticReport.shareFailedBody': "We couldn't attach the report to share. Send it securely to support instead?",
55
+ 'diagnosticReport.uploadAction': 'Send to support',
56
+ 'diagnosticReport.uploadSuccess': 'Diagnostic report sent to support.',
57
+ 'diagnosticReport.uploadFailed': "Couldn't send the report. Please try again later.",
53
58
  'livenessDetectionScreen.guideHeader': 'Face Verification',
54
59
  'livenessDetectionScreen.guideText': 'Please ensure the following for best results:',
55
60
  'livenessDetectionScreen.guidePoint1': 'Remove glasses, hats, or face coverings',
@@ -72,6 +77,13 @@ export default {
72
77
  'eidScannerScreen.guideHeader': 'NFC Document Scan',
73
78
  'eidScannerScreen.guideText': 'When prompted, hold your document flat against the back of your device near the NFC antenna.',
74
79
  'eidScannerScreen.invalidMRZFields': 'Document information could not be read. Please try again.',
80
+ 'eidScannerScreen.error': 'Error',
81
+ 'eidScannerScreen.errorCode': 'Error code',
82
+ 'eidScannerScreen.nfcGenericError': 'Something went wrong while reading your document. Please try again. If the problem continues, contact support with the code below.',
83
+ 'eidScannerScreen.nfcReadFailed': 'Could not read the chip. Hold the document flat against the back of your device and keep it still, then try again.',
84
+ 'eidScannerScreen.nfcAuthFailed': 'Could not establish a secure connection to the chip. Make sure the document number, date of birth and expiry date are correct, then try again.',
85
+ 'eidScannerScreen.nfcTagLost': 'Connection to the document was lost. Keep the document still against the device and try again.',
86
+ 'eidScannerScreen.nfcTimeout': 'Reading the chip timed out. Hold the document steady against the device and try again.',
75
87
  'eidScannerScreen.faceImageNotFound': 'Photo data not found on document.',
76
88
  'eidScannerScreen.documentCode': 'Document Type',
77
89
  'eidScannerScreen.nationality': 'Nationality',
@@ -50,6 +50,11 @@ export default {
50
50
  'diagnosticReport.noticeBody': 'Bu işlem; tarama verilerinizi, belge görüntülerinizi ve teknik ayrıntıları içeren bir taslak açar; böylece destek ekibi tarama sorununu çözebilir. Göndermeden önce gözden geçirin.',
51
51
  'diagnosticReport.continue': 'Devam et',
52
52
  'diagnosticReport.cancel': 'İptal',
53
+ 'diagnosticReport.shareFailedTitle': 'Paylaşım ekranı açılamadı',
54
+ 'diagnosticReport.shareFailedBody': 'Raporu paylaşmak için ekleyemedik. Bunun yerine destek ekibine güvenli şekilde gönderelim mi?',
55
+ 'diagnosticReport.uploadAction': 'Desteğe gönder',
56
+ 'diagnosticReport.uploadSuccess': 'Tanılama raporu destek ekibine gönderildi.',
57
+ 'diagnosticReport.uploadFailed': 'Rapor gönderilemedi. Lütfen daha sonra tekrar deneyin.',
53
58
  'livenessDetectionScreen.guideHeader': 'Yüz Doğrulaması',
54
59
  'livenessDetectionScreen.guideText': 'En iyi sonuç için lütfen şunları sağlayın:',
55
60
  'livenessDetectionScreen.guidePoint1': 'Gözlük, şapka veya yüz aksesuarlarını çıkarın',
@@ -72,6 +77,13 @@ export default {
72
77
  'eidScannerScreen.guideHeader': 'NFC Belge Taraması',
73
78
  'eidScannerScreen.guideText': 'İstendiğinde, belgenizi cihazınızın arka tarafındaki NFC antenine düz bir şekilde yaklaştırın.',
74
79
  'eidScannerScreen.invalidMRZFields': 'Belge bilgileri okunamadı. Lütfen tekrar deneyin.',
80
+ 'eidScannerScreen.error': 'Hata',
81
+ 'eidScannerScreen.errorCode': 'Hata kodu',
82
+ 'eidScannerScreen.nfcGenericError': 'Belgeniz okunurken bir sorun oluştu. Lütfen tekrar deneyin. Sorun devam ederse aşağıdaki kod ile destek ekibimize başvurun.',
83
+ 'eidScannerScreen.nfcReadFailed': 'Çip okunamadı. Belgeyi cihazınızın arkasına düz şekilde yaslayıp sabit tutun ve tekrar deneyin.',
84
+ 'eidScannerScreen.nfcAuthFailed': 'Çip ile güvenli bağlantı kurulamadı. Belge numarası, doğum tarihi ve son geçerlilik tarihinin doğru olduğundan emin olup tekrar deneyin.',
85
+ 'eidScannerScreen.nfcTagLost': 'Belge ile bağlantı kesildi. Belgeyi cihaza sabit tutun ve tekrar deneyin.',
86
+ 'eidScannerScreen.nfcTimeout': 'Çip okuması zaman aşımına uğradı. Belgeyi cihaza sabit tutup tekrar deneyin.',
75
87
  'eidScannerScreen.faceImageNotFound': 'Belgede fotoğraf verisi bulunamadı.',
76
88
  'eidScannerScreen.documentCode': 'Belge Türü',
77
89
  'eidScannerScreen.nationality': 'Uyruk',
@@ -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.487.0';
5
+ export const SDK_VERSION = '1.489.0';
@@ -1 +1 @@
1
- {"version":3,"file":"EIDScanner.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/EIDScanner.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAgBpD,UAAU,eAAe;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CACd,OAAO,EAAE,SAAS,EAClB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,KACtB,IAAI,CAAC;IACV,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/C;AAED,QAAA,MAAM,UAAU,GAAI,6FAOjB,eAAe,4CAsrBjB,CAAC;AA4NF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"EIDScanner.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/EIDScanner.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAiBpD,UAAU,eAAe;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CACd,OAAO,EAAE,SAAS,EAClB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,KACtB,IAAI,CAAC;IACV,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/C;AAED,QAAA,MAAM,UAAU,GAAI,6FAOjB,eAAe,4CAywBjB,CAAC;AA4NF,eAAe,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"IdentityDocumentCamera.constants.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/IdentityDocumentCamera.constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,4BAA4B,OAAO,CAAC;AACjD,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAChD,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAEnD,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAC3C,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,eAAO,MAAM,gCAAgC,KAAK,CAAC;AACnD,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAC/C,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAE9C,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,eAAO,MAAM,sCAAsC,IAAI,CAAC;AAExD,eAAO,MAAM,eAAe,QAAkC,CAAC;AAC/D,eAAO,MAAM,oBAAoB,QAAyB,CAAC;AAC3D,eAAO,MAAM,iBAAiB,QAAsB,CAAC;AACrD,eAAO,MAAM,oBAAoB,QAAe,CAAC;AAIjD,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAChD,eAAO,MAAM,sBAAsB;;;;;;;;;;CAUzB,CAAC;AAKX,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,gCAAgC,MAAM,CAAC;AACpD,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAChD,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,mBAAmB,MAAM,CAAC"}
1
+ {"version":3,"file":"IdentityDocumentCamera.constants.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/IdentityDocumentCamera.constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,4BAA4B,OAAO,CAAC;AACjD,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAChD,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAEnD,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAC3C,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,eAAO,MAAM,gCAAgC,KAAK,CAAC;AACnD,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAC/C,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAE9C,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,eAAO,MAAM,sCAAsC,IAAI,CAAC;AAExD,eAAO,MAAM,eAAe,QAAkC,CAAC;AAC/D,eAAO,MAAM,oBAAoB,QAAyB,CAAC;AAC3D,eAAO,MAAM,iBAAiB,QAAsB,CAAC;AASrD,eAAO,MAAM,oBAAoB,QAAyC,CAAC;AAI3E,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAChD,eAAO,MAAM,sBAAsB;;;;;;;;;;CAUzB,CAAC;AAKX,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,gCAAgC,MAAM,CAAC;AACpD,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAChD,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,mBAAmB,MAAM,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"IdentityDocumentCamera.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/IdentityDocumentCamera.tsx"],"names":[],"mappings":"AAyEA,OAAO,KAAK,EACV,mBAAmB,EACnB,SAAS,EACT,2BAA2B,EAK5B,MAAM,gCAAgC,CAAC;AAGxC,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,2BAA2B,EAAE,CAAC;AAC5E,YAAY,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAMnE,QAAA,MAAM,sBAAsB,GAAI,uDAI7B,2BAA2B,4CAojF7B,CAAC;AAiIF,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"IdentityDocumentCamera.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/IdentityDocumentCamera.tsx"],"names":[],"mappings":"AAyEA,OAAO,KAAK,EACV,mBAAmB,EACnB,SAAS,EACT,2BAA2B,EAK5B,MAAM,gCAAgC,CAAC;AAGxC,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,2BAA2B,EAAE,CAAC;AAC5E,YAAY,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAMnE,QAAA,MAAM,sBAAsB,GAAI,uDAI7B,2BAA2B,4CAmjF7B,CAAC;AAiIF,eAAe,sBAAsB,CAAC"}
@@ -83,6 +83,17 @@ export declare function handleIDBackFlow(mrzText: string | null, mrzFields: MRZF
83
83
  *
84
84
  * PASSPORT: → COMPLETED (no back side)
85
85
  * ID CARD: → SCAN_ID_BACK
86
+ *
87
+ * Routing is PASSPORT-BIASED on purpose: a passport has no back side, so if we
88
+ * route it to SCAN_ID_BACK it deadlocks forever waiting for a back that will
89
+ * never appear. We therefore only go to SCAN_ID_BACK when there is POSITIVE
90
+ * evidence the document is an ID card (a parsed MRZ document code that is
91
+ * present and not 'P'). When the type is ambiguous — e.g. the passport MRZ was
92
+ * never read as 'P' so the front step locked `detectedDocumentType` as
93
+ * 'ID_FRONT' (the torch/tilt during hologram capture makes the MRZ unreadable),
94
+ * or no MRZ code survived at all — we COMPLETE rather than wait for a
95
+ * non-existent back side. A two-sided ID card always yields an 'I'/'A'/'C'
96
+ * (non-'P') MRZ code, so genuine ID cards still route to SCAN_ID_BACK.
86
97
  */
87
98
  export declare function getNextStepAfterHologram(detectedDocumentType: 'ID_FRONT' | 'ID_BACK' | 'PASSPORT' | 'UNKNOWN', currentFrameDocType: 'ID_FRONT' | 'ID_BACK' | 'PASSPORT' | 'UNKNOWN', mrzDocCode: string | undefined): 'COMPLETED' | 'SCAN_ID_BACK';
88
99
  //# sourceMappingURL=IdentityDocumentCamera.flows.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IdentityDocumentCamera.flows.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/IdentityDocumentCamera.flows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAUpD,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EACP,mBAAmB,GACnB,cAAc,GACd,qBAAqB,GACrB,sBAAsB,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EACP,mBAAmB,GACnB,oBAAoB,GACpB,qBAAqB,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,cAAc,GAAG,kBAAkB,GAAG,sBAAsB,CAAC;CAC3E;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,iBAAiB,EAAE,OAAO,EAC1B,WAAW,EAAE,OAAO,EACpB,iBAAiB,EAAE,OAAO,EAC1B,YAAY,EAAE,OAAO,GACpB,kBAAkB,CAgEpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,IAAI,EAAE,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,UAAU,EAAE,MAAM,GACjB,iBAAiB,CA0EnB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,QAAQ,EAAE,OAAO,EACjB,iBAAiB,EAAE,OAAO,EAC1B,iBAAiB,EAAE,OAAO,EAC1B,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,WAAW,EAAE,OAAO,GACnB,gBAAgB,CA2DlB;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,oBAAoB,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,EACrE,mBAAmB,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,EACpE,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,WAAW,GAAG,cAAc,CAY9B"}
1
+ {"version":3,"file":"IdentityDocumentCamera.flows.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/IdentityDocumentCamera.flows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAUpD,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EACP,mBAAmB,GACnB,cAAc,GACd,qBAAqB,GACrB,sBAAsB,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EACP,mBAAmB,GACnB,oBAAoB,GACpB,qBAAqB,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,cAAc,GAAG,kBAAkB,GAAG,sBAAsB,CAAC;CAC3E;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,iBAAiB,EAAE,OAAO,EAC1B,WAAW,EAAE,OAAO,EACpB,iBAAiB,EAAE,OAAO,EAC1B,YAAY,EAAE,OAAO,GACpB,kBAAkB,CAgEpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,IAAI,EAAE,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,UAAU,EAAE,MAAM,GACjB,iBAAiB,CA0EnB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,QAAQ,EAAE,OAAO,EACjB,iBAAiB,EAAE,OAAO,EAC1B,iBAAiB,EAAE,OAAO,EAC1B,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,WAAW,EAAE,OAAO,GACnB,gBAAgB,CA2DlB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,wBAAwB,CACtC,oBAAoB,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,EACrE,mBAAmB,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,EACpE,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,WAAW,GAAG,cAAc,CAqB9B"}
@@ -42,7 +42,7 @@ export declare function transformBoundsToScreen(bounds: {
42
42
  * Unified status message logic used by both voice guidance and render text.
43
43
  * Returns the appropriate i18n key arguments for the current scan state.
44
44
  */
45
- export declare function getStatusMessage(nextStep: ScanStep, status: ScanStatus, detectedDocumentType: DocumentType, isBrightnessLow: boolean, isFrameBlurry: boolean, allElementsDetected: boolean, elementsOutsideScanArea: string[], t: (key: string, params?: Record<string, unknown>) => string, mrzReliable?: boolean): string;
45
+ export declare function getStatusMessage(nextStep: ScanStep, status: ScanStatus, detectedDocumentType: DocumentType, isBrightnessLow: boolean, isFrameBlurry: boolean, allElementsDetected: boolean, elementsOutsideScanArea: string[], t: (key: string, params?: Record<string, unknown>) => string): string;
46
46
  /**
47
47
  * Calculate angle from two points in degrees
48
48
  */
@@ -1 +1 @@
1
- {"version":3,"file":"IdentityDocumentCamera.utils.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/IdentityDocumentCamera.utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IdentityDocumentCamera.utils.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Components/IdentityDocumentCamera.utils.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,9 @@
1
1
  import { InputStream } from './java/inputStream';
2
2
  import type { FileSystemStructured } from './smartcards/fileSystemStructured';
3
3
  export declare class CardFileInputStream extends InputStream {
4
+ /** Max re-issues of a single block read before failing — mitigates transient
5
+ * iOS NFC transceive drops during large-file reads (e.g. DG2). */
6
+ private static readonly MAX_BLOCK_READ_RETRIES;
4
7
  private path;
5
8
  private buffer;
6
9
  private bufferLength;
@@ -1 +1 @@
1
- {"version":3,"file":"cardFileInputStream.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/EIDReader/cardFileInputStream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAG9E,qBAAa,mBAAoB,SAAQ,WAAW;IAClD,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,kBAAkB,CAAU;IACpC,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,EAAE,CAAuB;IACjC,OAAO,CAAC,YAAY,CAAS;gBAEjB,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,oBAAoB;IAMpD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBrB,IAAI;IAuDV,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAahC,SAAS,IAAI,MAAM;IAInB,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAI9B,KAAK,IAAI,IAAI;IAUb,aAAa,IAAI,OAAO;IAIxB,SAAS,IAAI,MAAM;IAInB,WAAW,IAAI,MAAM;YAIP,kBAAkB;IA+BhC,OAAO,CAAC,YAAY;CAoBrB"}
1
+ {"version":3,"file":"cardFileInputStream.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/EIDReader/cardFileInputStream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAG9E,qBAAa,mBAAoB,SAAQ,WAAW;IAClD;uEACmE;IACnE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAK;IAEnD,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,kBAAkB,CAAU;IACpC,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,EAAE,CAAuB;IACjC,OAAO,CAAC,YAAY,CAAS;gBAEjB,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,oBAAoB;IAMpD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBrB,IAAI;IA2EV,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAahC,SAAS,IAAI,MAAM;IAInB,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAI9B,KAAK,IAAI,IAAI;IAUb,aAAa,IAAI,OAAO;IAIxB,SAAS,IAAI,MAAM;IAInB,WAAW,IAAI,MAAM;YAIP,kBAAkB;IA+BhC,OAAO,CAAC,YAAY;CAoBrB"}
@@ -15,6 +15,10 @@ export declare class DefaultFileSystem implements FileSystemStructured {
15
15
  private wrapper;
16
16
  private oldWrapper;
17
17
  constructor(service: APDULevelReadBinaryCapable, isSFIEnabled: boolean, fidToSFI?: Map<number, number>);
18
+ /** Deep-copy a secure-messaging wrapper PRESERVING its cipher type (AES vs
19
+ * 3DES), so the SSC can be rewound for a retry without changing the MAC/enc
20
+ * algorithm. Non-SM wrappers are returned as-is. */
21
+ private cloneWrapper;
18
22
  setWrapper(wrapper: APDUWrapper): void;
19
23
  getWrapper(): APDUWrapper;
20
24
  getMaxReadBinaryLength(): number;
@@ -1 +1 @@
1
- {"version":3,"file":"defaultFileSystem.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/EIDReader/defaultFileSystem.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAG/E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAI5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,qBAAa,iBAAkB,YAAW,oBAAoB;IAC5D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAc;IAC5C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAa;IAEtD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,UAAU,CAAe;gBAG/B,OAAO,EAAE,0BAA0B,EACnC,YAAY,EAAE,OAAO,EACrB,QAAQ,GAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAA6B;IAWpD,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAKtC,UAAU;IAIV,sBAAsB,IAAI,MAAM;IAI1B,eAAe,IAAI,OAAO,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;IASnD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQvB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;YA6E9D,WAAW;YA4DX,cAAc;IAI5B,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,cAAc;YAgBR,aAAa;CAgC5B"}
1
+ {"version":3,"file":"defaultFileSystem.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/EIDReader/defaultFileSystem.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAG/E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAKtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAK5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,qBAAa,iBAAkB,YAAW,oBAAoB;IAC5D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAc;IAC5C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAa;IAEtD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,UAAU,CAAe;gBAG/B,OAAO,EAAE,0BAA0B,EACnC,YAAY,EAAE,OAAO,EACrB,QAAQ,GAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAA6B;IAsB3D;;yDAEqD;IACrD,OAAO,CAAC,YAAY;IAgBb,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAKtC,UAAU;IAIV,sBAAsB,IAAI,MAAM;IAI1B,eAAe,IAAI,OAAO,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;IASnD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQvB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;YA2G9D,WAAW;YA4DX,cAAc;IAI5B,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,cAAc;YAgBR,aAAa;CAgC5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"eidReader.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/EIDReader/eidReader.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAsT7C,QAAA,MAAM,SAAS,GACb,gBAAgB,MAAM,EACtB,aAAa,MAAM,EACnB,cAAc,MAAM,EACpB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,KAC5C,OAAO,CACN;IACE,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,GACD,SAAS,CA+TZ,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"eidReader.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/EIDReader/eidReader.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAyY7C,QAAA,MAAM,SAAS,GACb,gBAAgB,MAAM,EACtB,aAAa,MAAM,EACnB,cAAc,MAAM,EACpB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,KAC5C,OAAO,CACN;IACE,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,GACD,SAAS,CA+XZ,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"dg11File.d.ts","sourceRoot":"","sources":["../../../../../../../src/Shared/EIDReader/lds/icao/dg11File.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC;;;;;;;;;;;GAWG;AACH,qBAAa,QAAS,SAAQ,SAAS;IACrC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAQ;IAC5C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAU;IAEpD,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,QAAQ,CAAuB;gBAE3B,EAAE,CAAC,EAAE,WAAW;IAI5B,gEAAgE;IAChE,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B,+DAA+D;IAC/D,WAAW,IAAI,MAAM,GAAG,IAAI;IAItB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;cAIX,WAAW,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBpE,SAAS,CAAC,YAAY,IAAI,IAAI;IAI9B;;;OAGG;IACH,OAAO,CAAC,SAAS;CAiBlB"}
1
+ {"version":3,"file":"dg11File.d.ts","sourceRoot":"","sources":["../../../../../../../src/Shared/EIDReader/lds/icao/dg11File.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC;;;;;;;;;;;GAWG;AACH,qBAAa,QAAS,SAAQ,SAAS;IACrC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAQ;IAC5C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAU;IAEpD,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,QAAQ,CAAuB;gBAE3B,EAAE,CAAC,EAAE,WAAW;IAI5B,gEAAgE;IAChE,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B,+DAA+D;IAC/D,WAAW,IAAI,MAAM,GAAG,IAAI;IAItB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;cAIX,WAAW,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBpE,SAAS,CAAC,YAAY,IAAI,IAAI;IAI9B;;;OAGG;IACH,OAAO,CAAC,SAAS;CAgClB"}
@@ -5,9 +5,17 @@ export declare class NFCManagerCardService extends CardService {
5
5
  private isOpened;
6
6
  open(): Promise<void>;
7
7
  getIsOpen(): boolean;
8
+ private sessionRestartEnabled;
9
+ setSessionRestartEnabled(enabled: boolean): void;
8
10
  transmit(commandAPDU: CommandAPDU): Promise<ResponseAPDU>;
9
11
  getATR(): Uint8Array;
10
- getIsConnectionLost(_error: Error): boolean;
12
+ getIsConnectionLost(error: Error): boolean;
13
+ /** True if the error looks like a dropped/timed-out CoreNFC tag connection
14
+ * (as opposed to a real APDU/crypto failure). */
15
+ isTagLost(error: unknown): boolean;
16
+ /** Re-establish the CoreNFC session (iOS) so a fresh handshake can be retried
17
+ * after a tag drop. No-op on Android. Best-effort. */
18
+ restartSession(): Promise<void>;
11
19
  close(): Promise<void>;
12
20
  }
13
21
  //# sourceMappingURL=nfcManagerCardService.d.ts.map
@@ -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;AAGzD,qBAAa,qBAAsB,SAAQ,WAAW;IACpD,OAAO,CAAC,QAAQ,CAAS;IACZ,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B,SAAS,IAAI,OAAO;IAId,QAAQ,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAiB/D,MAAM,IAAI,UAAU;IAIpB,mBAAmB,CAAC,MAAM,EAAE,KAAK,GAAG,OAAO;IAIrC,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;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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * DH (modular exponentiation, non-EC) primitives for PACE Generic Mapping.
3
+ *
4
+ * Modern ePassports/eIDs use ECDH almost universally; a minority of documents
5
+ * negotiate classic DH PACE. This module provides the DH math as pure,
6
+ * unit-testable functions so it can be verified against the ICAO 9303 Part 11
7
+ * worked example before it ever touches a chip. It is deliberately separate from
8
+ * the EC path in paceProtocol.ts — the working ECDH handshake is not modified.
9
+ *
10
+ * References: ICAO Doc 9303 Part 11 §4.4.3.2 (Generic Mapping), BSI TR-03110
11
+ * Part 3 §3.3.1, RFC 5114 (standardized MODP groups), TR-03110 Table A.1
12
+ * (standardized domain parameter IDs 0–7).
13
+ */
14
+ /** A DH group: safe-prime modulus p, generator g, and subgroup order q. */
15
+ export interface DHGroup {
16
+ /** prime modulus */
17
+ p: bigint;
18
+ /** generator */
19
+ g: bigint;
20
+ /** subgroup order (q) — used to size exponents */
21
+ q: bigint;
22
+ }
23
+ /**
24
+ * Standardized DH domain parameters by TR-03110 parameter ID.
25
+ * 0 → RFC 5114 §2.1 1024-bit MODP Group with 160-bit Prime Order Subgroup
26
+ * 1 → RFC 5114 §2.2 2048-bit MODP Group with 224-bit Prime Order Subgroup
27
+ * 2 → RFC 5114 §2.3 2048-bit MODP Group with 256-bit Prime Order Subgroup
28
+ * (IDs 3–7 are reserved/unused in practice; EC params start at 8.)
29
+ */
30
+ export declare const DH_GROUPS: Record<number, DHGroup>;
31
+ /**
32
+ * PACE DH Generic Mapping (ICAO 9303 Part 11 §4.4.3.2):
33
+ * shared secret h = PK_PICC ^ SK_PCD mod p
34
+ * mapped generator g~ = g^s · h mod p
35
+ * where s is the decrypted PICC nonce (a big-endian integer).
36
+ *
37
+ * Pure function over the group + the three inputs, so it can be checked against
38
+ * the ICAO worked example. `pkPicc` is the PICC mapping public key; `skPcd` the
39
+ * PCD mapping private key; `nonce` the decrypted nonce s.
40
+ */
41
+ export declare const dhGenericMapping: (group: DHGroup, skPcd: bigint, pkPicc: bigint, nonce: bigint) => {
42
+ sharedH: bigint;
43
+ mappedGenerator: bigint;
44
+ };
45
+ /**
46
+ * DH key agreement with a mapped generator (PACE step 3):
47
+ * PK = g~ ^ SK mod p (public key to send)
48
+ * K = PK_PICC ^ SK mod p (shared secret)
49
+ */
50
+ export declare const dhPublicKey: (group: DHGroup, mappedGenerator: bigint, sk: bigint) => bigint;
51
+ export declare const dhSharedSecret: (group: DHGroup, pkPicc: bigint, sk: bigint) => bigint;
52
+ /** Square-and-multiply modular exponentiation (constant-shape, bigint). */
53
+ export declare function modPow(base: bigint, exp: bigint, mod: bigint): bigint;
54
+ /** Fixed-width big-endian byte encoding of a DH value (left-padded to p's size). */
55
+ export declare const dhEncode: (value: bigint, group: DHGroup) => Buffer;
56
+ //# sourceMappingURL=paceDH.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paceDH.d.ts","sourceRoot":"","sources":["../../../../../../src/Shared/EIDReader/protocol/paceDH.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,2EAA2E;AAC3E,MAAM,WAAW,OAAO;IACtB,oBAAoB;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,gBAAgB;IAChB,CAAC,EAAE,MAAM,CAAC;IACV,kDAAkD;IAClD,CAAC,EAAE,MAAM,CAAC;CACX;AAID;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAoF7C,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB,GAC3B,OAAO,OAAO,EACd,OAAO,MAAM,EACb,QAAQ,MAAM,EACd,OAAO,MAAM,KACZ;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAK5C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,WAAW,GACtB,OAAO,OAAO,EACd,iBAAiB,MAAM,EACvB,IAAI,MAAM,KACT,MAA8C,CAAC;AAElD,eAAO,MAAM,cAAc,GACzB,OAAO,OAAO,EACd,QAAQ,MAAM,EACd,IAAI,MAAM,KACT,MAAqC,CAAC;AAEzC,2EAA2E;AAC3E,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAWrE;AAED,oFAAoF;AACpF,eAAO,MAAM,QAAQ,GAAI,OAAO,MAAM,EAAE,OAAO,OAAO,KAAG,MASxD,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Typed PACE errors.
3
+ *
4
+ * The point is to let the caller distinguish a PACE CAPABILITY gap (this build
5
+ * cannot run the variant the chip advertises — e.g. DH agreement, CAM mapping,
6
+ * an unregistered curve) from a RUNTIME failure (wrong key, tag lost, APDU
7
+ * error). Both fall back to BAC, but the diagnostics reason must differ so we
8
+ * can tell "we don't support this document's PACE" from "the read went wrong".
9
+ */
10
+ /** Why a PACE attempt could not even be run by this implementation. */
11
+ export type PACEUnsupportedReason = 'agreement' | 'mapping' | 'curve' | 'cipher';
12
+ /**
13
+ * Thrown when the chip advertises a PACE variant this build cannot perform.
14
+ * Carries a coarse, non-PII reason that maps directly to a diagnostics fallback
15
+ * reason (`pace_unsupported_<reason>`), so support can see exactly which
16
+ * capability was missing for a given document.
17
+ */
18
+ export declare class PACEUnsupportedError extends Error {
19
+ readonly paceUnsupported = true;
20
+ readonly reason: PACEUnsupportedReason;
21
+ constructor(reason: PACEUnsupportedReason, detail: string);
22
+ }
23
+ /** Type guard usable across module boundaries (instanceof is unreliable after
24
+ * transpilation/bundling, so we also check the marker flag). */
25
+ export declare const isPACEUnsupportedError: (e: unknown) => e is PACEUnsupportedError;
26
+ //# sourceMappingURL=paceErrors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paceErrors.d.ts","sourceRoot":"","sources":["../../../../../../src/Shared/EIDReader/protocol/paceErrors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,uEAAuE;AACvE,MAAM,MAAM,qBAAqB,GAC7B,WAAW,GACX,SAAS,GACT,OAAO,GACP,QAAQ,CAAC;AAEb;;;;;GAKG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,eAAe,QAAQ;IAChC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;gBAE3B,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM;CAK1D;AAED;iEACiE;AACjE,eAAO,MAAM,sBAAsB,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,oBAIS,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"paceProtocol.d.ts","sourceRoot":"","sources":["../../../../../../src/Shared/EIDReader/protocol/paceProtocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAIxE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AA8E1C;;;;;GAKG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,8BAA8B,CAAS;IAC/C,OAAO,CAAC,qCAAqC,CAAS;IACtD,OAAO,CAAC,cAAc,CAAU;gBAG9B,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,sBAAsB,GAAG,IAAI,EACtC,8BAA8B,EAAE,MAAM,EACtC,qCAAqC,EAAE,MAAM,EAC7C,cAAc,EAAE,OAAO;IAUzB;;;;;;OAMG;IACU,MAAM,CACjB,SAAS,EAAE,aAAa,EACxB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAC5C,OAAO,CAAC,UAAU,CAAC;IAkKtB;;OAEG;YACW,WAAW;IAoCzB;;;OAGG;YACW,aAAa;IAmE3B;;;;;OAKG;YACW,aAAa;IAwD3B;;;OAGG;YACW,WAAW;IA+EzB;;;OAGG;YACW,WAAW;IAqDzB;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,6BAA6B;IA4B5C,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAUhC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAczC;;OAEG;WACW,mBAAmB,CAC/B,SAAS,EAAE,aAAa,EACxB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,MAAM;IAoBT,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAQhC,OAAO,CAAC,MAAM,CAAC,aAAa;IAY5B,OAAO,CAAC,MAAM,CAAC,UAAU;IAMzB,OAAO,CAAC,MAAM,CAAC,cAAc;IA+B7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,MAAM;IAcrB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAwDnC;;;;;;;;;OASG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAgE/B,OAAO,CAAC,MAAM,CAAC,IAAI;IAWnB;;OAEG;WACW,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;CA6BxD"}
1
+ {"version":3,"file":"paceProtocol.d.ts","sourceRoot":"","sources":["../../../../../../src/Shared/EIDReader/protocol/paceProtocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAKxE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAoI1C;;;;;GAKG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,8BAA8B,CAAS;IAC/C,OAAO,CAAC,qCAAqC,CAAS;IACtD,OAAO,CAAC,cAAc,CAAU;gBAG9B,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,sBAAsB,GAAG,IAAI,EACtC,8BAA8B,EAAE,MAAM,EACtC,qCAAqC,EAAE,MAAM,EAC7C,cAAc,EAAE,OAAO;IAUzB;;;;;;OAMG;IACU,MAAM,CACjB,SAAS,EAAE,aAAa,EACxB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAC5C,OAAO,CAAC,UAAU,CAAC;IAyKtB;;OAEG;YACW,WAAW;IAoCzB;;;OAGG;YACW,aAAa;IAmE3B;;;;;OAKG;YACW,aAAa;IAyD3B;;;OAGG;YACW,WAAW;IA+EzB;;;OAGG;YACW,WAAW;IAqDzB;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,6BAA6B;IA4B5C,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAUhC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAczC;;OAEG;WACW,mBAAmB,CAC/B,SAAS,EAAE,aAAa,EACxB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,MAAM;IAoBT,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAQhC,OAAO,CAAC,MAAM,CAAC,aAAa;IAY5B,OAAO,CAAC,MAAM,CAAC,UAAU;IAMzB,OAAO,CAAC,MAAM,CAAC,cAAc;IA+B7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,MAAM;IAcrB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAwDnC;;;;;;;;;OASG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAgE/B,OAAO,CAAC,MAAM,CAAC,IAAI;IAWnB;;OAEG;WACW,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;CAgCxD"}
@@ -1 +1 @@
1
- {"version":3,"file":"readBinaryAPDUSender.d.ts","sourceRoot":"","sources":["../../../../../../src/Shared/EIDReader/protocol/readBinaryAPDUSender.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAO7D,qBAAa,oBAAqB,YAAW,0BAA0B;IACrE,OAAO,CAAC,qBAAqB,CAA4B;IACzD,OAAO,CAAC,OAAO,CAAc;gBAEjB,OAAO,EAAE,WAAW;IAKnB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,EAAE,GAAG,EAAE,UAAU;IAuB7D,YAAY;IAqBZ,cAAc,CACzB,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC;IA0BH,cAAc,CACzB,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,EACV,YAAY,EAAE,OAAO,EACrB,wBAAwB,EAAE,OAAO,GAChC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAkF7B,OAAO,CAAC,MAAM,CAAC,eAAe;IAgC9B,OAAO,CAAC,MAAM,CAAC,iCAAiC;CAsCjD"}
1
+ {"version":3,"file":"readBinaryAPDUSender.d.ts","sourceRoot":"","sources":["../../../../../../src/Shared/EIDReader/protocol/readBinaryAPDUSender.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAO7D,qBAAa,oBAAqB,YAAW,0BAA0B;IACrE,OAAO,CAAC,qBAAqB,CAA4B;IACzD,OAAO,CAAC,OAAO,CAAc;gBAEjB,OAAO,EAAE,WAAW;IAKnB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,EAAE,GAAG,EAAE,UAAU;IAuB7D,YAAY;IAqBZ,cAAc,CACzB,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC;IA0BH,cAAc,CACzB,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,EACV,YAAY,EAAE,OAAO,EACrB,wBAAwB,EAAE,OAAO,GAChC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAqF7B,OAAO,CAAC,MAAM,CAAC,eAAe;IAgC9B,OAAO,CAAC,MAAM,CAAC,iCAAiC;CAsCjD"}
@@ -1 +1 @@
1
- {"version":3,"file":"country-display.utils.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/country-display.utils.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,uBAAuB,GAClC,aAAa,MAAM,GAAG,IAAI,EAC1B,YAAY,MAAM,GAAG,IAAI,KACxB,MAsCF,CAAC"}
1
+ {"version":3,"file":"country-display.utils.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/country-display.utils.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,uBAAuB,GAClC,aAAa,MAAM,GAAG,IAAI,EAC1B,YAAY,MAAM,GAAG,IAAI,KACxB,MA0CF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"diagnosticReport.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/diagnosticReport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAmBpD,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,6EAA6E;IAC7E,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAyDD,MAAM,WAAW,sBAAsB;IACrC,uCAAuC;IACvC,eAAe,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,YAAY,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,uEAAuE;AACvE,eAAO,MAAM,qBAAqB,GAAI,QAAQ;IAC5C,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,iBAAiB,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,KAAG,sBAgFH,CAAC"}
1
+ {"version":3,"file":"diagnosticReport.d.ts","sourceRoot":"","sources":["../../../../../src/Shared/Libs/diagnosticReport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AA2CpD,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,6EAA6E;IAC7E,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAyDD,MAAM,WAAW,sBAAsB;IACrC,uCAAuC;IACvC,eAAe,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,YAAY,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,uEAAuE;AACvE,eAAO,MAAM,qBAAqB,GAAI,QAAQ;IAC5C,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,iBAAiB,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,KAAG,sBAuFH,CAAC"}
@@ -38,7 +38,9 @@ export interface NfcDiagnostics {
38
38
  /** PACE object identifier string when PACE was attempted. */
39
39
  paceOid?: string;
40
40
  /** Why PACE wasn't used / fell back: 'no_card_access' | 'no_pace_info' |
41
- * 'pace_failed'. Distinguishes device/chip-specific PACE issues. */
41
+ * 'pace_failed' | 'pace_unsupported_<agreement|mapping|curve|cipher>'.
42
+ * The pace_unsupported_* reasons mark a CAPABILITY gap (this build can't run
43
+ * the variant the chip advertises) vs pace_failed (a runtime failure). */
42
44
  paceFallbackReason?: string;
43
45
  steps: NfcStep[];
44
46
  /** Name of the first failing step, if any. */
@@ -131,6 +133,12 @@ export declare class DiagnosticsCollector {
131
133
  nfcPaceFellBackToBac(reason?: string): void;
132
134
  /** Record one completed step. Keep messages short and free of PII. */
133
135
  nfcStep(step: NfcStep): void;
136
+ /** The first NFC step that failed in the current attempt (e.g. 'paceAuth',
137
+ * 'readDG2'), or undefined. Lets the caller build a step-specific error code
138
+ * without taking a full snapshot. */
139
+ getFailureStep(): string | undefined;
140
+ /** APDU status word recorded for the failing step, if any (e.g. '6982'). */
141
+ getFailureStatusWord(): string | undefined;
134
142
  nfcResult(succeeded: boolean, errorCategory?: string): void;
135
143
  addError(e: {
136
144
  code?: string;
@@ -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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"}