From f7e1df0f16d0d50fe1e6c257d5f5d46700a3855c Mon Sep 17 00:00:00 2001 From: Sri Kanth Kola Date: Fri, 3 Nov 2023 12:22:34 +0530 Subject: [PATCH 01/40] fix(INJI-536):check status failed while downloading vc Signed-off-by: Sri Kanth Kola --- .../ExistingMosipVCItemMachine.ts | 42 ++++++++++++++++--- machines/vc.ts | 18 +++----- screens/Home/MyVcsTab.tsx | 13 ++++-- screens/Home/MyVcsTabController.ts | 6 --- shared/VCMetadata.ts | 3 ++ 5 files changed, 54 insertions(+), 28 deletions(-) diff --git a/machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine.ts b/machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine.ts index e2d0db98b5..77425f4a41 100644 --- a/machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine.ts +++ b/machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine.ts @@ -62,7 +62,6 @@ const model = createModel( transactionId: '', bindingTransactionId: '', revoked: false, - downloadCounter: 0, maxDownloadCount: 10, downloadInterval: 5000, walletBindingResponse: null as WalletBindingResponse, @@ -83,6 +82,7 @@ const model = createModel( STORE_RESPONSE: (response: VC) => ({response}), POLL: () => ({}), DOWNLOAD_READY: () => ({}), + FAILED: () => ({}), GET_VC_RESPONSE: (vc: VC) => ({vc}), VERIFY: () => ({}), LOCK_VC: () => ({}), @@ -183,7 +183,6 @@ export const ExistingMosipVCItemMachine = log((_, event) => (event.data as Error).message), 'sendDownloadLimitExpire', ], - target: 'checkingStatus', }, }, }, @@ -200,6 +199,12 @@ export const ExistingMosipVCItemMachine = DOWNLOAD_READY: { target: 'downloadingCredential', }, + FAILED: [ + { + actions: ['incrementDownloadCounter', 'sendVcUpdated'], + target: 'verifyingDownloadLimitExpiry', + }, + ], }, }, downloadingCredential: { @@ -214,14 +219,21 @@ export const ExistingMosipVCItemMachine = actions: [ send('POLL_DOWNLOAD', {to: 'downloadCredential'}), 'incrementDownloadCounter', + 'sendVcUpdated', ], }, + { + target: 'verifyingDownloadLimitExpiry', + actions: ['sendVcUpdated'], + }, ], CREDENTIAL_DOWNLOADED: { actions: ['setStoreVerifiableCredential', 'storeContext'], }, STORE_RESPONSE: { actions: [ + 'deleteCounterFromVcMetadata', + 'sendVcUpdated', 'setVerifiableCredential', 'updateVc', 'logDownloaded', @@ -1066,8 +1078,19 @@ export const ExistingMosipVCItemMachine = }, ), - incrementDownloadCounter: model.assign({ - downloadCounter: ({downloadCounter}) => downloadCounter + 1, + incrementDownloadCounter: assign({ + vcMetadata: context => + new VCMetadata({ + ...context.vcMetadata, + downloadCounter: context.vcMetadata.downloadCounter + 1, + }), + }), + + deleteCounterFromVcMetadata: assign({ + vcMetadata: context => { + delete context.vcMetadata.downloadCounter; + return context.vcMetadata; + }, }), setMaxDownloadCount: model.assign({ @@ -1268,7 +1291,7 @@ export const ExistingMosipVCItemMachine = const maxLimit: number = resp.vcDownloadMaxRetry; const vcDownloadPoolInterval: number = resp.vcDownloadPoolInterval; console.log(maxLimit); - if (maxLimit <= context.downloadCounter) { + if (maxLimit <= context.vcMetadata.downloadCounter) { throw new Error( 'Download limit expired for request id: ' + context.vcMetadata.requestId, @@ -1381,6 +1404,11 @@ export const ExistingMosipVCItemMachine = case 'printing': callback(model.events.DOWNLOAD_READY()); break; + case 'FAILED': + callback(model.events.FAILED()); + break; + default: + callback(model.events.FAILED()); } } }); @@ -1506,7 +1534,9 @@ export const ExistingMosipVCItemMachine = }, isDownloadAllowed: _context => { - return _context.downloadCounter <= _context.maxDownloadCount; + return ( + _context.vcMetadata.downloadCounter <= _context.maxDownloadCount + ); }, isVcValid: context => { diff --git a/machines/vc.ts b/machines/vc.ts index f41f6b9a78..cdad76e558 100644 --- a/machines/vc.ts +++ b/machines/vc.ts @@ -209,7 +209,10 @@ export const vcMachine = 'removeVcFromInProgressDownlods', 'setDownloadingFailedVcs', ], - target: 'downloadLimitExpired', + target: '#vc.ready.myVcs.refreshing', + }, + DELETE_VC: { + target: 'deletingFailedVcs', }, }, }, @@ -221,13 +224,6 @@ export const vcMachine = }, }, }, - downloadLimitExpired: { - on: { - DELETE_VC: { - target: 'deletingFailedVcs', - }, - }, - }, deletingFailedVcs: { entry: 'removeDownloadFailedVcsFromStorage', on: { @@ -283,8 +279,8 @@ export const vcMachine = setDownloadingFailedVcs: model.assign({ downloadingFailedVcs: (context, event) => [ - event.vcMetadata, ...context.downloadingFailedVcs, + event.vcMetadata, ], }), @@ -526,10 +522,6 @@ export function selectIsTampered(state: State) { return state.matches('tamperedVCs'); } -export function selectIsDownloadLimitExpired(state: State) { - return state.matches('downloadLimitExpired'); -} - export function selectDownloadingFailedVcs(state: State) { return state.context.downloadingFailedVcs; } diff --git a/screens/Home/MyVcsTab.tsx b/screens/Home/MyVcsTab.tsx index b40be95c15..4b1df2e6d5 100644 --- a/screens/Home/MyVcsTab.tsx +++ b/screens/Home/MyVcsTab.tsx @@ -21,6 +21,7 @@ import { sendErrorEvent, } from '../../shared/telemetry/TelemetryUtils'; import {Error} from '../../components/ui/Error'; +import {useIsFocused} from '@react-navigation/native'; const pinIconProps = {iconName: 'pushpin', iconType: 'antdesign'}; @@ -65,11 +66,17 @@ export const MyVcsTab: React.FC = props => { let failedVCsList = []; controller.downloadFailedVcs.forEach(vc => { - failedVCsList.push(`${vc.idType}:${vc.id}\n`); + failedVCsList.push(`\n${vc.idType}:${vc.id}`); }); const downloadFailedVcsErrorMessage = `${t( 'errors.downloadLimitExpires.message', - )}\n${failedVCsList}`; + )}${failedVCsList}`; + + const isDownloadFailedVcs = + useIsFocused() && + controller.downloadFailedVcs.length >= 1 && + !controller.AddVcModalService && + !controller.GetVcModalService; return ( @@ -198,7 +205,7 @@ export const MyVcsTab: React.FC = props => { /> diff --git a/shared/VCMetadata.ts b/shared/VCMetadata.ts index 70c2168972..034ce17137 100644 --- a/shared/VCMetadata.ts +++ b/shared/VCMetadata.ts @@ -13,6 +13,7 @@ export class VCMetadata { issuer?: string = ''; protocol?: string = ''; static vcKeyRegExp = new RegExp(VC_ITEM_STORE_KEY_REGEX); + downloadCounter?: number = 0; constructor({ idType = '', @@ -21,6 +22,7 @@ export class VCMetadata { id = '', issuer = '', protocol = '', + downloadCounter = 0, } = {}) { this.idType = idType; this.requestId = requestId; @@ -28,6 +30,7 @@ export class VCMetadata { this.id = id; this.protocol = protocol; this.issuer = issuer; + this.downloadCounter = downloadCounter; } //TODO: Remove any typing and use appropriate typing From 858709139bcb467acf8d399e925f218c0d508bd8 Mon Sep 17 00:00:00 2001 From: Sri Kanth Kola Date: Mon, 6 Nov 2023 09:15:56 +0530 Subject: [PATCH 02/40] fix(INJI-536):refactor the default switch case Signed-off-by: Sri Kanth Kola --- .../ExistingMosipVCItem/ExistingMosipVCItemMachine.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine.ts b/machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine.ts index 77425f4a41..92ff9e8b29 100644 --- a/machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine.ts +++ b/machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine.ts @@ -1405,10 +1405,9 @@ export const ExistingMosipVCItemMachine = callback(model.events.DOWNLOAD_READY()); break; case 'FAILED': - callback(model.events.FAILED()); - break; default: callback(model.events.FAILED()); + break; } } }); From 101020c8d92b13a6886ad345ad08b8300c62a0cf Mon Sep 17 00:00:00 2001 From: Sri Kanth Kola Date: Mon, 6 Nov 2023 17:05:43 +0530 Subject: [PATCH 03/40] fix(INJI-536):fix error handling and avoid usage of VCmetadata Signed-off-by: Sri Kanth Kola --- .../ExistingMosipVCItemMachine.ts | 69 ++++++++----------- shared/VCMetadata.ts | 3 - 2 files changed, 29 insertions(+), 43 deletions(-) diff --git a/machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine.ts b/machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine.ts index 92ff9e8b29..1fde8d3dcb 100644 --- a/machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine.ts +++ b/machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine.ts @@ -62,8 +62,9 @@ const model = createModel( transactionId: '', bindingTransactionId: '', revoked: false, - maxDownloadCount: 10, - downloadInterval: 5000, + downloadCounter: 0, + maxDownloadCount: null as number, + downloadInterval: null as number, walletBindingResponse: null as WalletBindingResponse, walletBindingError: '', walletBindingSuccess: false, @@ -201,7 +202,7 @@ export const ExistingMosipVCItemMachine = }, FAILED: [ { - actions: ['incrementDownloadCounter', 'sendVcUpdated'], + actions: ['incrementDownloadCounter'], target: 'verifyingDownloadLimitExpiry', }, ], @@ -219,7 +220,6 @@ export const ExistingMosipVCItemMachine = actions: [ send('POLL_DOWNLOAD', {to: 'downloadCredential'}), 'incrementDownloadCounter', - 'sendVcUpdated', ], }, { @@ -232,8 +232,6 @@ export const ExistingMosipVCItemMachine = }, STORE_RESPONSE: { actions: [ - 'deleteCounterFromVcMetadata', - 'sendVcUpdated', 'setVerifiableCredential', 'updateVc', 'logDownloaded', @@ -1078,19 +1076,8 @@ export const ExistingMosipVCItemMachine = }, ), - incrementDownloadCounter: assign({ - vcMetadata: context => - new VCMetadata({ - ...context.vcMetadata, - downloadCounter: context.vcMetadata.downloadCounter + 1, - }), - }), - - deleteCounterFromVcMetadata: assign({ - vcMetadata: context => { - delete context.vcMetadata.downloadCounter; - return context.vcMetadata; - }, + incrementDownloadCounter: model.assign({ + downloadCounter: ({downloadCounter}) => downloadCounter + 1, }), setMaxDownloadCount: model.assign({ @@ -1291,7 +1278,7 @@ export const ExistingMosipVCItemMachine = const maxLimit: number = resp.vcDownloadMaxRetry; const vcDownloadPoolInterval: number = resp.vcDownloadPoolInterval; console.log(maxLimit); - if (maxLimit <= context.vcMetadata.downloadCounter) { + if (maxLimit <= context.downloadCounter) { throw new Error( 'Download limit expired for request id: ' + context.vcMetadata.requestId, @@ -1391,23 +1378,27 @@ export const ExistingMosipVCItemMachine = onReceive(async event => { if (event.type === 'POLL_STATUS') { - const response = await request( - API_URLS.credentialStatus.method, - API_URLS.credentialStatus.buildURL( - context.vcMetadata.requestId, - ), - ); - switch (response.response?.statusCode) { - case 'NEW': - break; - case 'ISSUED': - case 'printing': - callback(model.events.DOWNLOAD_READY()); - break; - case 'FAILED': - default: - callback(model.events.FAILED()); - break; + try { + const response = await request( + API_URLS.credentialStatus.method, + API_URLS.credentialStatus.buildURL( + context.vcMetadata.requestId, + ), + ); + switch (response.response?.statusCode) { + case 'NEW': + break; + case 'ISSUED': + case 'printing': + callback(model.events.DOWNLOAD_READY()); + break; + case 'FAILED': + default: + callback(model.events.FAILED()); + break; + } + } catch (error) { + callback(model.events.FAILED()); } } }); @@ -1533,9 +1524,7 @@ export const ExistingMosipVCItemMachine = }, isDownloadAllowed: _context => { - return ( - _context.vcMetadata.downloadCounter <= _context.maxDownloadCount - ); + return _context.downloadCounter <= _context.maxDownloadCount; }, isVcValid: context => { diff --git a/shared/VCMetadata.ts b/shared/VCMetadata.ts index 034ce17137..70c2168972 100644 --- a/shared/VCMetadata.ts +++ b/shared/VCMetadata.ts @@ -13,7 +13,6 @@ export class VCMetadata { issuer?: string = ''; protocol?: string = ''; static vcKeyRegExp = new RegExp(VC_ITEM_STORE_KEY_REGEX); - downloadCounter?: number = 0; constructor({ idType = '', @@ -22,7 +21,6 @@ export class VCMetadata { id = '', issuer = '', protocol = '', - downloadCounter = 0, } = {}) { this.idType = idType; this.requestId = requestId; @@ -30,7 +28,6 @@ export class VCMetadata { this.id = id; this.protocol = protocol; this.issuer = issuer; - this.downloadCounter = downloadCounter; } //TODO: Remove any typing and use appropriate typing From 96e7d0c002c081d139dff6fbe863bd04c1882f31 Mon Sep 17 00:00:00 2001 From: Sri Kanth Kola Date: Mon, 6 Nov 2023 17:08:50 +0530 Subject: [PATCH 04/40] fix(INJI-536):fix error handling and avoid usage of VCmetadata Signed-off-by: Sri Kanth Kola --- .../ExistingMosipVCItem/ExistingMosipVCItemMachine.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine.ts b/machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine.ts index 1fde8d3dcb..cdb98425b2 100644 --- a/machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine.ts +++ b/machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine.ts @@ -224,7 +224,6 @@ export const ExistingMosipVCItemMachine = }, { target: 'verifyingDownloadLimitExpiry', - actions: ['sendVcUpdated'], }, ], CREDENTIAL_DOWNLOADED: { From c29fcda1cdd3dab4fd7502d551cfd81197640625 Mon Sep 17 00:00:00 2001 From: Sri Kanth Kola Date: Thu, 9 Nov 2023 15:26:08 +0530 Subject: [PATCH 05/40] fix(INJI-536):refactor verifyingDownloadLimitExpiry state Signed-off-by: Sri Kanth Kola --- .talismanrc | 4 +- locales/ara.json | 1 + locales/fil.json | 1 + locales/hin.json | 1 + locales/kan.json | 1 + locales/spa.json | 1074 ++++++----------- locales/tam.json | 1 + .../ExistingMosipVCItemMachine.ts | 33 +- 8 files changed, 374 insertions(+), 742 deletions(-) diff --git a/.talismanrc b/.talismanrc index d938f27230..c5a22c007e 100644 --- a/.talismanrc +++ b/.talismanrc @@ -77,4 +77,6 @@ fileignoreconfig: - filename: ios/fastlane/Fastfile checksum: feea5a7f044ef6961d53e7d1e1ffb92a3e0f72761496424f6e64288e3718d605 version: "" - +- filename: locales/spa.json + checksum: 4a421519063449f88e021504db1654d4108b6ea1b809af3c57de256c183d0e5d + version: "" diff --git a/locales/ara.json b/locales/ara.json index ff428a2a78..41d65b2111 100644 --- a/locales/ara.json +++ b/locales/ara.json @@ -589,6 +589,7 @@ "cancel": "إلغاء", "accept": "يقبل", "save": "حفظ", + "ok": "نعم", "dismiss": "رفض", "editLabel": "يحرر {{label}}", "tryAgain": "حاول مجددا", diff --git a/locales/fil.json b/locales/fil.json index f2c351bf67..49e61105cc 100644 --- a/locales/fil.json +++ b/locales/fil.json @@ -592,6 +592,7 @@ "cancel": "Kanselahin", "accept": "Tanggapin", "save": "I-save", + "ok": "Ok", "dismiss": "Dismissed", "editLabel": "Palitan ang {{label}}", "tryAgain": "Subukan muli", diff --git a/locales/hin.json b/locales/hin.json index 4679524673..4857ccf599 100644 --- a/locales/hin.json +++ b/locales/hin.json @@ -588,6 +588,7 @@ "common": { "cancel": "रद्द करें", "save": "सहेजें", + "ok": "ठीक है", "dismiss": "नकार देना", "editLabel": "संपादित करें {{label}}", "tryAgain": "पुनः प्रयास करें", diff --git a/locales/kan.json b/locales/kan.json index e19793ecea..d53530ed1f 100644 --- a/locales/kan.json +++ b/locales/kan.json @@ -587,6 +587,7 @@ "cancel": "ರದ್ದು", "accept": "ಒಪ್ಪಿಕೊಳ್ಳಿ", "save": "ಉಳಿಸು", + "ok": "ಸರಿ", "dismiss": "ವಜಾಗೊಳಿಸಿ", "editLabel": "ಸಂಪಾದಿಸು {{label}}", "tryAgain": "ಮತ್ತೆ ಪ್ರಯತ್ನಿಸು", diff --git a/locales/spa.json b/locales/spa.json index da59717fa5..d3d0742a55 100644 --- a/locales/spa.json +++ b/locales/spa.json @@ -1,536 +1,21 @@ { - "ActivityLogText": { - "VC_SHARED": "compartido", - "VC_RECEIVED": "recibido", - "VC_RECEIVED_NOT_SAVED": "recibido no guardado", - "VC_DELETED": "eliminado", - "VC_DOWNLOADED": "descargado", - "VC_REVOKED": "revocado", - "VC_SHARED_WITH_VERIFICATION_CONSENT": "compartido. Se ha dado consentimiento para verificación de presencia", - "VC_RECEIVED_WITH_PRESENCE_VERIFIED": "recibido. Presencia verificada", - "VC_RECEIVED_BUT_PRESENCE_VERIFICATION_FAILED": "recibido. Falló la verificación de presencia", - "PRESENCE_VERIFIED_AND_VC_SHARED": "verificado y compartido", - "PRESENCE_VERIFICATION_FAILED": "falló la verificación", - "QRLOGIN_SUCCESFULL": "Inicio de sesión QR exitoso", - "WALLET_BINDING_SUCCESSFULL": "Activación exitosa", - "WALLET_BINDING_FAILURE": "Activación fallida", - "VC_REMOVED": "Eliminado de la billetera", - "TAMPERED_VC_REMOVED": "Algunas tarjetas eliminadas debido a actividad maliciosa" - }, - "DeviceInfoList": { - "requestedBy": "Solicitado por", - "sentBy": "Enviado por", - "deviceRefNumber": "Número de referencia del dispositivo", - "name": "Nombre", - "Verifier": "Verificador", - "Wallet": "Billetera" - }, - "FaceScanner": { - "imageCaptureGuide": "Sostén el teléfono con firmeza y mantén tu rostro enfocado en el centro.", - "capture": "Captura", - "flipCamera": "Voltear cámara" - }, - "OIDcAuth": { - "title": "Autenticación OIDC", - "text": "Se reemplazará con la interfaz de usuario del proveedor OIDC", - "verify": "Verificar" - }, - "PasscodeVerify": { - "passcodeMismatchError": "El código de acceso no coincide." - }, - "QrScanner": { - "cameraAccessDisabled": "¡Acceso a la cámara deshabilitado!", - "cameraPermissionGuideLabel": "Vaya a la configuración y habilite el acceso a la cámara manualmente.", - "flipCamera": "Voltear cámara" - }, - "VcDetails": { - "generatedOn": "Generado el", - "status": "Estado", - "valid": "Válido", - "photo": "Foto", - "fullName": "Nombre completo", - "gender": "Género", - "dateOfBirth": "Fecha de nacimiento", - "phoneNumber": "Número de teléfono", - "email": "Correo electrónico", - "address": "Dirección", - "reasonForSharing": "Motivo de compartir", - "idType": "Tipo de identificación", - "id": "Identificación", - "nationalCard": "Tarjeta nacional", - "uin": "UIN", - "enableVerification": "Activar", - "profileAuthenticated": "Activado para inicio de sesión en línea", - "offlineAuthDisabledHeader": "Activación pendiente para inicio de sesión en línea", - "offlineAuthDisabledMessage": "Por favor, haz clic en el botón de abajo para activar esta credencial para su uso en inicio de sesión en línea.", - "vid": "VID", - "verificationEnabledSuccess": "Activado para inicio de sesión en línea", - "goback": "VOLVER", - "BindingWarning": "Si has activado la verificación para esta credencial en otra billetera, se sobrescribirá. ¿Deseas continuar?", - "yes_confirm": "Sí, confirmo", - "no": "No", - "Alert": "Alerta", - "ok": "Aceptar", - "credentialRegistry": "Registro de credenciales", - "errors": { - "savingFailed": { - "title": "Error al guardar la tarjeta", - "message": "Se produjo un error al guardar la tarjeta en el almacenamiento." - }, - "diskFullError": { - "title": "Error al guardar la tarjeta", - "message": "No se pueden recibir ni guardar más tarjetas, ya que los datos de la aplicación están llenos." - } - } - }, - "RemoveVcWarningOverlay": { - "alert": "Por favor confirmar", - "RemoveWarning": "¿Quieres eliminar esta tarjeta?", - "confirm": "si, lo confirmo", - "no": "No" - }, - "AuthScreen": { - "header": "¿Te gustaría usar la biometría para desbloquear la aplicación?", - "useBiometrics": "Usar biometría", - "usePasscode": "Prefiero usar un código de acceso", - "errors": { - "unavailable": "El dispositivo no admite la biometría", - "unenrolled": "Para usar la biometría, por favor registra tus datos biométricos en la configuración de tu dispositivo", - "failed": "No se pudo autenticar con la biometría", - "generic": "Parece haber un error en la autenticación biométrica" - } - }, - "BiometricScreen": { - "unlock": "Desbloquear con biometría" - }, - "HistoryTab": { - "noHistory": "Aún no hay historial disponible", - "downloaded": "descargado", - "shared": "compartido", - "received": "recibido", - "deleted": "eliminado" - }, - "HomeScreen": { - "myVcsTab": "Mis\nTarjetas", - "receivedVcsTab": "Tarjetas\nRecibidas", - "historyTab": "Historial" - }, - "AddVcModal": { - "requestingCredential": "Solicitando credencial...", - "errors": { - "input": { - "empty": "El campo no puede estar vacío", - "invalidFormat": "El formato del campo es incorrecto" - }, - "backend": { - "invalidOtp": "El OTP es inválido", - "expiredOtp": "El OTP ha expirado", - "invalidUin": "UIN inválido", - "invalidVid": "VID inválido", - "missingUin": "UIN no disponible en la base de datos", - "missingVid": "VID no disponible en la base de datos", - "noMessageAvailable": "Inténtalo de nuevo más tarde", - "whileGeneratingOtpErrorIsOccured": "Se produjo un error al generar el OTP", - "networkRequestFailed": "Error en la solicitud de red" - } - } - }, - "GetVcModal": { - "errors": { - "input": { - "empty": "El campo no puede estar vacío", - "invalidFormat": "El formato del campo es incorrecto" - }, - "backend": { - "invalidOtp": "El OTP es inválido", - "expiredOtp": "El OTP ha expirado", - "applicationProcessing": "El AID no está listo", - "noMessageAvailable": "Inténtalo de nuevo más tarde", - "networkRequestFailed": "Error en la solicitud de red", - "invalidAid": "El AID ingresado no está disponible. Por favor, verifica tu AID antes de ingresar", - "timeOut": "Tiempo de espera agotado" - } - } - }, - "DownloadingVcModal": { - "header": "Descargando tu Tarjeta", - "bodyText": "Esto puede llevar algún tiempo. Te notificaremos cuando tu Tarjeta se haya descargado y esté disponible.", - "backButton": "Volver a inicio" - }, - "GetIdInputModal": { - "header": "Ingresa tu ID de aplicación para obtener tu UIN", - "getUIN": "Obtener UIN/VID", - "applicationId": "ID de aplicación", - "requestingOTP": "Solicitando OTP...", - "qstnMarkToolTip": "El ID de aplicación está disponible en el acuse de recibo recibido después de la inscripción." - }, - "IdInputModal": { - "header": "Ingresa tu UIN/VID para descargar tu Tarjeta", - "generateVc": "Generar mi Tarjeta", - "enterId": "Ingresa tu {{idType}}", - "noUIN/VID": "¿No tienes tu UIN/VID? Obténlo aquí", - "requestingOTP": "Solicitando OTP..." - }, - "OtpVerificationModal": { - "enterOtp": "Ingresa el código de verificación de 6 dígitos que te hemos enviado", - "header": "Verificación de OTP", - "confirmationDialog": { - "title": "Quieres cancelar la descarga?", - "message": "OUna vez cancelada, su tarjeta no se descargará y deberá reiniciar la descarga.", - "wait": "No, esperaré", - "cancel": "Sí, cancelar" - } - }, - "MyVcsTab": { - "addVcButton": "Agregar Tarjeta", - "generateVc": "Genera tus Tarjetas", - "generateVcDescription": "Toca en \"Agregar Tarjeta\" a continuación para descargar tu Tarjeta", - "activated": "Las credenciales están habilitadas para la autenticación en línea.", - "errors": { - "savingFailed": { - "title": "Error al guardar la Tarjeta", - "message": "Hubo un error al guardar la Tarjeta en el almacenamiento." - }, - "diskFullError": { - "title": "Error al guardar la Tarjeta", - "message": "No se pueden recibir ni guardar más Tarjetas, ya que los datos de la aplicación están llenos." - }, - "vcIsTampered": { - "title": "Tarjetas eliminadas debido a actividad maliciosa", - "message": "Tarjetas manipuladas detectadas y eliminadas por motivos de seguridad. Por favor descargue nuevamente." - }, - "storageLimitReached": { - "title": "Datos de aplicación insuficientes", - "message": "No puede agregar ni recibir tarjetas porque los datos de la aplicación están llenos. Borre Appdata para continuar." - }, - "keystoreNotExists": { - "title": "Algunas funciones de seguridad no estarán disponibles", - "message": "Su dispositivo actual no admite todas las funciones de seguridad.", - "riskOkayText": "De acuerdo" - }, - "noInternetConnection": { - "title": "Sin conexión a Internet", - "message": "Por favor verifique su conexión y vuelva a intentarlo" - }, - "downloadLimitExpires":{ - "title": "Error de descarga", - "message": "Hubo un problema al descargar las siguientes tarjetas. Inténtalo de nuevo" - } - } - }, - "OnboardingOverlay": { - "stepOneTitle": "¡Bienvenido!", - "stepOneText": "Mantén tu credencial digital contigo en todo momento. Para comenzar, agrega Tarjetas a tu perfil.", - "stepTwoTitle": "Gestión de Tarjetas", - "stepTwoText": "Una vez generadas, las Tarjetas se almacenan de forma segura en tu dispositivo móvil y se pueden cambiar el nombre o compartir en cualquier momento.", - "stepThreeTitle": "Compartir fácilmente", - "stepThreeText": "Comparte y recibe Tarjetas rápidamente utilizando la cámara de tu teléfono para escanear códigos QR.", - "stepThreeButton": "Comienza y agrega una Tarjeta", - "ReceivedVcsTab": { - "noReceivedVcsTitle": "Aún no hay Tarjetas disponibles", - "noReceivedVcsText": "Toca en Solicitar a continuación para recibir una Tarjeta" - } - }, - "ViewVcModal": { - "cancel": "Cancelar", - "lock": "Bloquear", - "unlock": "Desbloquear", - "rename": "Renombrar", - "delete": "Eliminar", - "revoke": "Revocar", - "revoking": "Tu billetera contiene una credencial con VID {{vid}}. Revocar esto eliminará automáticamente la misma de la billetera. ¿Estás seguro de que deseas continuar?", - "requestingOtp": "Solicitando OTP...", - "activated": "Las credenciales están habilitadas para la autenticación en línea.", - "redirecting": "Redirigiendo...", - "inProgress": "Cargando...", - "success": { - "unlocked": "Tarjeta desbloqueada exitosamente", - "locked": "Tarjeta bloqueada exitosamente", - "revoked": "VID {{vid}} ha sido revocado. Cualquier credencial que contenga el mismo se eliminará automáticamente de la billetera." - } - }, - "MainLayout": { - "home": "Inicio", - "scan": "Escanear", - "request": "Solicitar", - "settings": "Configuración" - }, - "PasscodeScreen": { - "header": "Establece un código de acceso para proteger tu aplicación", - "confirmPasscode": "Confirma tu código de acceso", - "enterPasscode": "Ingresa tu código de acceso" - }, - "SettingScreen": { - "header": "Ajustes", - "injiAsVerifierApp": "Inji como aplicación verificadora", - "basicSettings": "Ajustes básicos", - "bioUnlock": "Desbloquear con biométrico", - "language": "Idioma", - "aboutInji": "Acerca de Inji", - "credentialRegistry": "Registro de Credenciales", - "injiTourGuide": "Guía turístico Inji", - "logout": "Cerrar sesión", - "resetInjiProps": "Restableciendo accesorios Inji..." - }, - "IssuersScreen": { - "title": "Agregar nueva tarjeta", - "description": "Elija su emisor preferido entre las opciones siguientes para agregar una nueva tarjeta.", - "searchByIssuersName": "Buscar por nombre del emisor", - "itemHeading": "Descargar vía {{issuer}}", - "itemSubHeading": "Introduce tu DNI para descargar tu tarjeta.", - "loaders": { - "loading": "Cargando...", - "subTitle": { - "displayIssuers": "Obteniendo emisores", - "settingUp": "Configurando", - "downloadingCredentials": "Descarga de credenciales" - } - }, - "errors": { - "noInternetConnection": { - "title": "Sin conexión a Internet", - "message": "Por favor verifique su conexión y vuelva a intentarlo" - }, - "generic": { - "title": "¡Algo salió mal!", - "message": "Estamos teniendo algunos problemas con su solicitud. Inténtalo de nuevo." - } - } - }, - "QrLogin": { - "title": "Inicio de sesión con código QR", - "alignQr": "Alinea el código QR dentro del marco para escanearlo", - "confirmation": "Confirmación", - "checkDomain": "Además, verifica que haya un icono de candado en la barra de direcciones.", - "domainHead": "https://", - "selectId": "Seleccionar ID", - "noBindedVc": "No hay Tarjetas Vinculadas disponibles para verificar", - "back": "Volver", - "confirm": "Confirmar", - "verify": "Verificar", - "faceAuth": "Autenticación Facial", - "consent": "Consentimiento", - "loading": "Cargando...", - "domainWarning": "Por favor, confirma que el dominio del sitio web desde el cual estás escaneando el código QR es el siguiente", - "access": "está solicitando acceso a", - "status": "Estado", - "successMessage": "Has iniciado sesión correctamente en", - "ok": "Aceptar", - "allow": "Permitir", - "cancel": "Cancelar", - "essentialClaims": "Reclamos Esenciales", - "voluntaryClaims": "Reclamos Voluntarios", - "required": "Requerido" - }, - "ReceiveVcScreen": { - "header": "Detalles de la tarjeta", - "save": "Guardar tarjeta", - "verifyAndSave": "Verificar y guardar", - "reject": "Rechazar", - "discard": "Descartar", - "goToReceivedVCTab": "Ver tarjetas recibidas", - "saving": "Guardando", - "errors": { - "savingFailed": { - "title": "Error al guardar la tarjeta", - "message": "Ocurrió un error al guardar la tarjeta en el almacenamiento." - }, - "diskFullError": { - "title": "Error al guardar la tarjeta", - "message": "No se pueden recibir ni guardar más tarjetas porque los datos de la aplicación están llenos." - } - } - }, - "RequestScreen": { - "receiveCard": "Recibir tarjeta", - "bluetoothDenied": "Por favor, activa el Bluetooth para poder solicitar la tarjeta", - "bluetoothStateAndroid": "Por favor, activa el Bluetooth desde la configuración rápida para admitir el intercambio local", - "bluetoothStateIos": "Por favor, activa el Bluetooth desde el centro de control para admitir el intercambio local", - "showQrCode": "Muestra este código QR para solicitar la tarjeta de residente", - "incomingVc": "Tarjeta entrante", - "request": "Solicitar", - "errors": { - "nearbyDevicesPermissionDenied": { - "message": "Se requiere el permiso de Dispositivos cercanos para poder solicitar la tarjeta", - "button": "Permitir permiso" - }, - "storageLimitReached": { - "title": "Datos de aplicación insuficientes", - "message": "No puede agregar ni recibir tarjetas porque los datos de la aplicación están llenos. Borre Appdata para continuar." - } - }, - "status": { - "sharing": { - "title": "Compartiendo en progreso", - "timeoutHint": "El intercambio se retrasa, posiblemente debido a un problema de conexión." - }, - "accepted": { - "title": "¡Éxito!", - "message": "La tarjeta se ha recibido correctamente desde la billetera" - }, - "rejected": { - "title": "Aviso", - "message": "Has descartado la tarjeta de la billetera" - }, - "disconnected": { - "title": "La conexión falló", - "message": "La conexión se interrumpió. Por favor, inténtalo de nuevo." - }, - "waitingConnection": "Esperando conexión...", - "exchangingDeviceInfo": { - "message": "Intercambiando información del dispositivo...", - "timeoutHint": "Está tomando demasiado tiempo intercambiar la información del dispositivo..." - }, - "connected": { - "message": "Conectado al dispositivo. Esperando la tarjeta...", - "timeoutHint": "Todavía no se ha recibido ningún dato. ¿El dispositivo emisor aún está conectado?" - }, - "offline": { - "message": "Por favor, conéctate a internet para habilitar el modo de intercambio en línea" - }, - "bleError": { - "title": "Error al transferir", - "message": "Ocurrió un error al transferir la tarjeta. Por favor, inténtalo de nuevo.", - "hint": "Error: {{code}}" - } - }, - "online": "En línea", - "offline": "Desconectado", - "gotoSettings": "Ir a configuración" - }, - "ScanScreen": { - "header": "Escanear código QR", - "noShareableVcs": "No hay tarjetas compartibles disponibles.", - "sharingVc": "Compartiendo tarjeta", - "bluetoothStateAndroid": "Por favor, activa el Bluetooth desde la configuración rápida para admitir el intercambio local", - "bluetoothStateIos": "Por favor, activa el Bluetooth desde el centro de control para admitir el intercambio local", - "enableBluetoothMessage": "Por favor, habilita los permisos de Bluetooth para admitir el intercambio local", - "enableBluetoothButtonText": "Permitir permisos de Bluetooth", - "errors": { - "locationDisabled": { - "message": "Los servicios de ubicación deben estar habilitados para compartir la tarjeta", - "button": "Habilitar servicios de ubicación" - }, - "locationDenied": { - "message": "Se requiere permiso de ubicación para compartir la tarjeta", - "button": "Permitir acceso a la ubicación" - }, - "nearbyDevicesPermissionDenied": { - "message": "Se requiere el permiso de Dispositivos cercanos para poder compartir la tarjeta", - "button": "Permitir permiso" - }, - "storageLimitReached": { - "title": "Datos de aplicación insuficientes", - "message": "No puede compartir tarjetas porque los datos de la aplicación están llenos. Borre Appdata para continuar." - } - }, - "status": { - "connecting": "Conectando...", - "connectingTimeout": "Está tomando tiempo establecer la conexión. ¿El otro dispositivo está abierto para conexiones?", - "stayOnTheScreen": "Quédate en la pantalla", - "retry": "Rever", - "exchangingDeviceInfo": "Intercambiando información del dispositivo...", - "exchangingDeviceInfoTimeout": "Está tomando tiempo intercambiar la información del dispositivo. Es posible que tengas que reconectar.", - "invalid": "Código QR inválido", - "offline": "Por favor, conéctate a internet para escanear códigos QR usando el modo de intercambio en línea", - "sent": "La tarjeta ha sido enviada...", - "sentHint": "Esperando a que el receptor guarde o descarte tu tarjeta", - "sharing": { - "title": "Compartiendo en progreso", - "hint": "Espere mientras compartimos la tarjeta elegida.", - "timeoutHint": "El intercambio se retrasa, posiblemente debido a un problema de conexión." - }, - "accepted": { - "title": "ID compartido correctamente", - "message": "Su identificación se ha compartido correctamente con", - "gotohome": "Ir a casa" - }, - "rejected": { - "title": "Aviso", - "message": "Tu tarjeta ha sido descartada por el Verificador" - }, - "bleError": { - "title": "Error al transferir", - "message": "Ocurrió un error al transferir la tarjeta. Por favor, inténtalo de nuevo.", - "hint": "Error: {{code}}" - } - } - }, - "SelectVcOverlay": { - "header": "Compartir tarjeta", - "chooseVc": "Selecciona la tarjeta que deseas compartir", - "share": "Compartir", - "verifyAndShare": "Verificar identidad y compartir" - }, - "SendVcScreen": { - "reasonForSharing": "Motivo de compartir (opcional)", - "acceptRequest": "Compartir", - "acceptRequestAndVerify": "Compartir con selfie", - "reject": "Rechazar", - "consentToPhotoVerification": "Doy mi consentimiento para que se tome mi foto para la autenticación" - }, - "VerifyIdentityOverlay": { - "status": { - "verifyingIdentity": "Verificando identidad..." - }, - "errors": { - "invalidIdentity": { - "title": "Error en el reconocimiento facial", - "message": "La cara escaneada no coincide con la foto de la tarjeta. Inténtalo de nuevo.", - "messageNoRetry": "No se reconoce el rostro." - } - } - }, - "WelcomeScreen": { - "title": "Solución de identidad de código abierto", - "unlockApplication": "Desbloquear aplicación", - "failedToReadKeys": "No se pudieron leer las claves", - "retryRead": "¿Quieres volver a intentarlo?", - "errors": { - "invalidateKeyError": { - "title": "La aplicación se restableció", - "message": "Debido a la actualización de reconocimiento facial/huella digital, la seguridad de la aplicación se vio afectada y se eliminaron las tarjetas descargadas. Por favor descargue nuevamente." - } - }, - "ignore": "Ignorar" - }, - "common": { - "cancel": "Cancelar", - "save": "Guardar", - "dismiss": "Cerrar", - "editLabel": "Editar {{label}}", - "tryAgain": "Intentar de nuevo", - "camera": { - "errors": { - "missingPermission": "Esta aplicación utiliza la cámara para escanear el código QR de otro dispositivo." - }, - "allowAccess": "Permitir acceso a la cámara" - }, - "errors": { - "genericError": "Algo salió mal. ¡Por favor, inténtalo de nuevo después de un tiempo!" - }, - "biometricPopup": { - "title": "Desbloquear aplicación", - "description": "Utilice la huella digital para desbloquear la aplicación." - } - } -} "ActivityLogText": { "VC_SHARED": "compartido", - "VC_RECEIVED": "recibido", - "VC_RECEIVED_NOT_SAVED": "recibido no guardado", + "VC_RECEIVED": "recibió", + "VC_RECEIVED_NOT_SAVED": "recibido no fue guardado", "VC_DELETED": "eliminado", "VC_DOWNLOADED": "descargado", "VC_REVOKED": "revocado", - "VC_SHARED_WITH_VERIFICATION_CONSENT": "compartido. Se ha dado consentimiento para verificación de presencia", - "VC_RECEIVED_WITH_PRESENCE_VERIFIED": "recibido. Presencia verificada", - "VC_RECEIVED_BUT_PRESENCE_VERIFICATION_FAILED": "recibido. Falló la verificación de presencia", + "VC_SHARED_WITH_VERIFICATION_CONSENT": "compartido. ", + "VC_RECEIVED_WITH_PRESENCE_VERIFIED": "recibió. ", + "VC_RECEIVED_BUT_PRESENCE_VERIFICATION_FAILED": "recibió. ", "PRESENCE_VERIFIED_AND_VC_SHARED": "verificado y compartido", - "PRESENCE_VERIFICATION_FAILED": "falló la verificación", - "QRLOGIN_SUCCESFULL": "Inicio de sesión QR exitoso", + "PRESENCE_VERIFICATION_FAILED": "Fallo en la verificación", + "QRLOGIN_SUCCESFULL": "QRInicio de sesión exitoso", "WALLET_BINDING_SUCCESSFULL": "Activación exitosa", "WALLET_BINDING_FAILURE": "Activación fallida", - "VC_REMOVED": "Eliminado de la billetera" + "VC_REMOVED": "Eliminado de la billetera", + "TAMPERED_VC_REMOVED": "Algunas tarjetas eliminadas debido a actividad maliciosa" }, "DeviceInfoList": { "requestedBy": "Solicitado por", @@ -547,7 +32,7 @@ }, "OIDcAuth": { "title": "Autenticación OIDC", - "text": "Se reemplazará con la interfaz de usuario del proveedor OIDC", + "text": "Para ser reemplazado por la interfaz de usuario del proveedor OIDC", "verify": "Verificar" }, "PasscodeVerify": { @@ -555,7 +40,7 @@ }, "QrScanner": { "cameraAccessDisabled": "¡Acceso a la cámara deshabilitado!", - "cameraPermissionGuideLabel": "Vaya a la configuración y habilite el acceso a la cámara manualmente.", + "cameraPermissionGuideLabel": "Vaya a configuración y habilite el acceso a la cámara manualmente.", "flipCamera": "Voltear cámara" }, "VcDetails": { @@ -568,308 +53,406 @@ "dateOfBirth": "Fecha de nacimiento", "phoneNumber": "Número de teléfono", "email": "Correo electrónico", - "address": "Dirección", - "reasonForSharing": "Motivo de compartir", - "idType": "Tipo de identificación", - "id": "Identificación", - "nationalCard": "Tarjeta nacional", + "address": "DIRECCIÓN", + "reasonForSharing": "Razón para compartir", + "idType": "tipo de identificación", + "id": "IDENTIFICACIÓN", + "qrCodeHeader": "Código QR", + "nationalCard": "Tarjeta Nacional", "uin": "UIN", - "enableVerification": "Activar", - "profileAuthenticated": "Activado para inicio de sesión en línea", - "offlineAuthDisabledHeader": "Activación pendiente para inicio de sesión en línea", - "offlineAuthDisabledMessage": "Por favor, haz clic en el botón de abajo para activar esta credencial para su uso en inicio de sesión en línea.", "vid": "VID", - "verificationEnabledSuccess": "Activado para inicio de sesión en línea", - "goback": "VOLVER", - "BindingWarning": "Si has activado la verificación para esta credencial en otra billetera, se sobrescribirá. ¿Deseas continuar?", - "yes_confirm": "Sí, confirmo", + "enableVerification": "Activar", + "profileAuthenticated": "Las credenciales están habilitadas para la autenticación en línea.", + "offlineAuthDisabledHeader": "Activación pendiente para iniciar sesión en línea", + "offlineAuthDisabledMessage": "Haga clic en el botón a continuación para activar esta credencial y utilizarla para iniciar sesión en línea.", + "verificationEnabledSuccess": "Activado para iniciar sesión en línea", + "goback": "REGRESA", + "BindingWarning": "Si ha habilitado la verificación para esta credencial en otra billetera, se anulará. ", + "yes_confirm": "Sí, lo confirmo", "no": "No", "Alert": "Alerta", - "ok": "Aceptar", - "credentialRegistry": "Registro de credenciales", + "ok": "Bueno", + "credentialRegistry": "Registro de Credenciales", "errors": { "savingFailed": { - "title": "Error al guardar la tarjeta", - "message": "Se produjo un error al guardar la tarjeta en el almacenamiento." + "title": "No se pudo guardar la tarjeta", + "message": "Algo salió mal al guardar la Tarjeta en la tienda." }, "diskFullError": { - "title": "Error al guardar la tarjeta", - "message": "No se pueden recibir ni guardar más tarjetas, ya que los datos de la aplicación están llenos." + "title": "No se pudo guardar la tarjeta", + "message": "No se pueden recibir ni guardar más tarjetas ya que los datos de la aplicación están llenos." } } }, + "HomeScreenKebabPopUp": { + "title": "Mas opciones", + "unPinCard": "Desanclar tarjeta", + "pinCard": "Tarjeta PIN", + "offlineAuthenticationDisabled!": "Activación pendiente para iniciar sesión en línea", + "offlineAuthDisabledMessage": "Haga clic aquí para permitir que estas credenciales se utilicen para la autenticación en línea.", + "viewActivityLog": "Ver registro de actividad", + "removeFromWallet": "Quitar de Wallet", + "revokeId": "Revocar identificación", + "revokeMessage": "Revocar la identificación virtual de este perfil" + }, + "WalletBinding": { + "inProgress": "En curso", + "profileAuthenticated": "Activado para iniciar sesión en línea" + }, + "BindingVcWarningOverlay": { + "alert": "Alerta", + "BindingWarning": "Ya ha activado el inicio de sesión en línea para esta credencial en otro dispositivo. ", + "yesConfirm": "Sí, lo confirmo", + "no": "No" + }, "RemoveVcWarningOverlay": { "alert": "Por favor confirmar", - "RemoveWarning": "¿Quieres eliminar esta tarjeta?", - "confirm": "si, lo confirmo", + "removeWarning": "¿Quieres eliminar esta tarjeta?", + "confirm": "Si, lo confirmo", "no": "No" }, "AuthScreen": { - "header": "¿Te gustaría usar la biometría para desbloquear la aplicación?", - "useBiometrics": "Usar biometría", - "usePasscode": "Prefiero usar un código de acceso", + "header": "Seleccione el método de desbloqueo de la aplicación", + "Description": "¿Le gustaría utilizar datos biométricos para desbloquear la aplicación?", + "useBiometrics": "Utilice la biometría", + "usePasscode": "Usar contraseña", "errors": { - "unavailable": "El dispositivo no admite la biometría", - "unenrolled": "Para usar la biometría, por favor registra tus datos biométricos en la configuración de tu dispositivo", - "failed": "No se pudo autenticar con la biometría", - "generic": "Parece haber un error en la autenticación biométrica" + "unavailable": "El dispositivo no admite datos biométricos", + "unenrolled": "Para utilizar datos biométricos, registre sus datos biométricos en la configuración de su dispositivo.", + "failed": "No se pudo autenticar con biometría", + "generic": "Parece haber un error en la autenticación biométrica." } }, "BiometricScreen": { "unlock": "Desbloquear con biometría" }, - "HistoryTab": { + "HistoryScreen": { "noHistory": "Aún no hay historial disponible", "downloaded": "descargado", "shared": "compartido", - "received": "recibido", + "received": "recibió", "deleted": "eliminado" }, - "HomeScreen": { - "myVcsTab": "Mis\nTarjetas", - "receivedVcsTab": "Tarjetas\nRecibidas", - "historyTab": "Historial" + "SettingScreen": { + "header": "Ajustes", + "injiAsVerifierApp": "Inji como aplicación de verificación", + "receiveCard": "Recibir tarjeta", + "basicSettings": "Ajustes básicos", + "bioUnlock": "Desbloquear con biométrico", + "language": "Idioma", + "aboutInji": "Acerca de Inji", + "credentialRegistry": "Registro de Credenciales", + "esignethosturl": "Anfitrión de Esignet", + "errorMessage": "Se ingresó una URL incorrecta. ", + "injiTourGuide": "Guía turístico de Inji", + "logout": "Cerrar sesión", + "resetInjiProps": "Restableciendo accesorios Inji..." + }, + "AboutInji": { + "aboutInji": "Acerca de Inji", + "header": "ACERCA DE INJI", + "appID": "ID de aplicación", + "aboutDetailes": "Inji es una aplicación móvil que se puede utilizar como billetera digital para almacenar credenciales. ", + "forMoreDetailes": "Para más detalles", + "clickHere": "haga clic aquí", + "version": "Versión", + "tuvaliVersion": "Versión Tuvali" + }, + "IssuersScreen": { + "title": "Agregar nueva tarjeta", + "description": "Elija su emisor preferido entre las opciones siguientes para agregar una nueva tarjeta.", + "searchByIssuersName": "Buscar por nombre del emisor", + "itemHeading": "Descargar vía {{issuer}}", + "itemSubHeading": "Introduce tu DNI para descargar tu tarjeta.", + "loaders": { + "loading": "Cargando...", + "subTitle": { + "displayIssuers": "Obteniendo emisores", + "settingUp": "Configurando", + "downloadingCredentials": "Descarga de credenciales" + } + }, + "errors": { + "noInternetConnection": { + "title": "Sin conexión a Internet", + "message": "Por favor verifique su conexión y vuelva a intentarlo" + }, + "generic": { + "title": "¡Algo salió mal!", + "message": "Estamos teniendo algunos problemas con su solicitud. " + } + } + }, + "HelpScreen": { + "header": "Ayuda", + "whatIsDigitalCredential?": "¿Qué es una credencial digital?", + "detail-1": "Una credencial digital es la versión digital de su cédula de identidad física.", + "whatCanDoWithDigitalCredential?": "¿Qué podemos hacer con las credenciales digitales?", + "detail-2": "Puede aprovechar varios servicios gubernamentales y privados utilizando sus credenciales digitales.", + "howToAddCard?": "¿Cómo agregar una tarjeta?", + "detail-3": "Para agregar una tarjeta, haga clic en el botón ' ' en la página de inicio y seleccione la opción adecuada.", + "howToRemoveCardFromWallet?": "¿Cómo compartir una tarjeta?", + "detail-4": "Desliza la tarjeta hacia la izquierda > haz clic en Más > Eliminar de Wallet", + "canWeAddMultipleCards?": "¿Podemos agregar varias tarjetas?", + "detail-5": "Sí, puede agregar varias tarjetas a la billetera haciendo clic en el botón ' ' en la página de inicio.", + "howToShareCard?": "¿Cómo compartir una tarjeta?", + "detail-6": "Haga clic en el botón 'Compartir' y escanee el código QR del solicitante. ", + "howToActivateCardForOnlineLogin?": "¿Cómo activar una tarjeta para iniciar sesión en línea?", + "detail-7": "Después de agregar exitosamente una tarjeta a la billetera, haga clic en 'Activación pendiente para inicio de sesión en línea' en la tarjeta. ", + "howToViewActivity?": "¿Cómo ver los registros de actividad?", + "detail-8": "En la página de inicio, haga clic en 'Historial' para ver los detalles de la actividad del usuario.", + "whatCanDoBiometricsChanged?": "¿Qué sucede cuando se cambia la biometría del almacén de claves de Android?", + "detail-9": "El almacén de claves de Android contiene información importante, como claves privadas para pruebas de identidad. " }, "AddVcModal": { "requestingCredential": "Solicitando credencial...", "errors": { "input": { - "empty": "El campo no puede estar vacío", - "invalidFormat": "El formato del campo es incorrecto" + "empty": "La entrada no puede estar vacía.", + "invalidFormat": "El formato de entrada es incorrecto." }, "backend": { - "invalidOtp": "El OTP es inválido", - "expiredOtp": "El OTP ha expirado", - "invalidUin": "UIN inválido", - "invalidVid": "VID inválido", - "missingUin": "UIN no disponible en la base de datos", + "invalidOtp": "La OTP no es válida", + "expiredOtp": "La OTP ha caducado", + "invalidUin": "UIN no válido", + "invalidVid": "VID no válido", + "missingUin": "El UIN introducido está desactivado/bloqueado. ", "missingVid": "VID no disponible en la base de datos", - "noMessageAvailable": "Inténtalo de nuevo más tarde", - "whileGeneratingOtpErrorIsOccured": "Se produjo un error al generar el OTP", - "networkRequestFailed": "Error en la solicitud de red" + "noMessageAvailable": "Intenta después de algún tiempo", + "whileGeneratingOtpErrorIsOccured": "mientras se genera el error otp", + "networkRequestFailed": "Error en la solicitud de red", + "deactivatedVid": "El VID ingresado está desactivado/caducado. " } } }, "GetVcModal": { + "retrievingId": "Recuperando identificación", "errors": { "input": { - "empty": "El campo no puede estar vacío", - "invalidFormat": "El formato del campo es incorrecto" + "empty": "La entrada no puede estar vacía", + "invalidFormat": "El formato de entrada es incorrecto." }, "backend": { - "invalidOtp": "El OTP es inválido", - "expiredOtp": "El OTP ha expirado", - "applicationProcessing": "El AID no está listo", - "noMessageAvailable": "Inténtalo de nuevo más tarde", + "invalidOtp": "OTP no válida", + "expiredOtp": "La OTP ha caducado", + "applicationProcessing": "La ayuda aún no está lista", + "noMessageAvailable": "Intenta después de algún tiempo", "networkRequestFailed": "Error en la solicitud de red", - "invalidAid": "El AID ingresado no está disponible. Por favor, verifica tu AID antes de ingresar", - "timeOut": "Tiempo de espera agotado" + "invalidAid": "La AID ingresada no está disponible. ", + "timeout": "Se acabó el tiempo" } } }, "DownloadingVcModal": { - "header": "Descargando tu Tarjeta", - "bodyText": "Esto puede llevar algún tiempo. Te notificaremos cuando tu Tarjeta se haya descargado y esté disponible.", - "backButton": "Volver a inicio" + "header": "Descargando tu tarjeta", + "bodyText": "Esto puede tardar algún tiempo, le notificaremos cuando su tarjeta se haya descargado y esté disponible", + "backButton": "De vuelta a casa" }, "GetIdInputModal": { - "header": "Ingresa tu ID de aplicación para obtener tu UIN", - "getUIN": "Obtener UIN/VID", - "applicationId": "ID de aplicación", + "header": "Recupera tu UIN/VID", + "applicationIdLabel": "Por favor ingrese su ID de aplicación", + "enterApplicationId": "Introduzca el ID de la aplicación", "requestingOTP": "Solicitando OTP...", - "qstnMarkToolTip": "El ID de aplicación está disponible en el acuse de recibo recibido después de la inscripción." + "qstnMarkToolTip": "El ID de la solicitud está disponible en el acuse de recibo recibido después de la inscripción.", + "getUIN": "Obtener UIN/VID" }, "IdInputModal": { - "header": "Ingresa tu UIN/VID para descargar tu Tarjeta", - "generateVc": "Generar mi Tarjeta", - "enterId": "Ingresa tu {{idType}}", - "noUIN/VID": "¿No tienes tu UIN/VID? Obténlo aquí", + "header": "Recupera tu identificación", + "guideLabel": "Seleccione el tipo de identificación e ingrese el UIN o VID proporcionado por MOSIP de la identificación que desea recuperar", + "generateVc": "Generar tarjeta", + "downloadID": "Descargar ID", + "enterId": "Introduce el DNI", + "noUIN/VID": "¿No tienes UIN/VID? ", + "getItHere": "Consiguelo ahora", "requestingOTP": "Solicitando OTP..." }, "OtpVerificationModal": { - "enterOtp": "Ingresa el código de verificación de 6 dígitos que te hemos enviado", - "header": "Verificación de OTP" + "title": "Verificación OTP", + "otpSentMessage": "¡Hemos enviado el código de 6 dígitos a su número de móvil registrado!", + "resendTheCode": "Puedes reenviar el código en ", + "resendCode": "Reenviar codigo", + "confirmationDialog": { + "title": "¿Quieres cancelar la descarga?", + "message": "Una vez cancelada, su tarjeta no se descargará y deberá reiniciar la descarga.", + "wait": "No, esperaré", + "cancel": "Sí, cancelar" + } }, "MyVcsTab": { - "addVcButton": "Agregar Tarjeta", - "generateVc": "Genera tus Tarjetas", - "generateVcDescription": "Toca en \"Agregar Tarjeta\" a continuación para descargar tu Tarjeta", - "generateVcFABDescription": "Toca en \"+\" a continuación para descargar tu Tarjeta", + "bringYourDigitalID": "Trae tu identidad digital", + "generateVcDescription": "Toque \"Descargar tarjeta\" a continuación para descargar su tarjeta", + "generateVcFABDescription": "Toque \" \" a continuación para descargar su tarjeta", + "downloadCard": "Descargar tarjeta", + "downloadingYourCard": "Descargar su tarjeta, esto puede tardar hasta 5 minutos", + "activated": "Las credenciales están habilitadas para la autenticación en línea.", "errors": { "savingFailed": { - "title": "Error al guardar la Tarjeta", - "message": "Hubo un error al guardar la Tarjeta en el almacenamiento." - }, - "diskFullError": { - "title": "Error al guardar la Tarjeta", - "message": "No se pueden recibir ni guardar más Tarjetas, ya que los datos de la aplicación están llenos." - }, - "vcIsTampered": { - "title": "Algunas pruebas de identidad están manipuladas", - "message": "Los archivos afectados se eliminan, vuelva a descargarlos." + "title": "No se pudo guardar la tarjeta", + "message": "Algo salió mal al guardar la Tarjeta en la tienda." }, "storageLimitReached": { "title": "Datos de aplicación insuficientes", - "message": "No puede agregar ni recibir tarjetas porque los datos de la aplicación están llenos. Borre Appdata para continuar." + "message": "No puede agregar ni recibir tarjetas ya que Appdata está llena. " + }, + "vcIsTampered": { + "title": "Tarjetas eliminadas debido a actividad maliciosa", + "message": "Tarjetas manipuladas detectadas y eliminadas por motivos de seguridad. " }, "keystoreNotExists": { - "title": "Almacenamiento seguro de claves no encontrado", - "message": "El almacenamiento de claves en su teléfono no está protegido. Sus claves podrían filtrarse si el teléfono es pirateado.", - "riskOkayText": "Está bien, me arriesgaré." + "title": "Algunas funciones de seguridad no estarán disponibles", + "message": "Su dispositivo actual no admite todas las funciones de seguridad.", + "riskOkayText": "De acuerdo" + }, + "noInternetConnection": { + "title": "Sin conexión a Internet", + "message": "Por favor verifique su conexión y vuelva a intentarlo" + }, + "downloadLimitExpires": { + "title": "Error de descarga", + "message": "Hubo un problema al descargar las siguientes tarjetas. " } } }, "OnboardingOverlay": { "stepOneTitle": "¡Bienvenido!", - "stepOneText": "Mantén tu credencial digital contigo en todo momento. Para comenzar, agrega Tarjetas a tu perfil.", - "stepTwoTitle": "Gestión de Tarjetas", - "stepTwoText": "Una vez generadas, las Tarjetas se almacenan de forma segura en tu dispositivo móvil y se pueden cambiar el nombre o compartir en cualquier momento.", - "stepThreeTitle": "Compartir fácilmente", - "stepThreeText": "Comparte y recibe Tarjetas rápidamente utilizando la cámara de tu teléfono para escanear códigos QR.", - "stepThreeButton": "Comienza y agrega una Tarjeta", - "ReceivedVcsTab": { - "noReceivedVcsTitle": "Aún no hay Tarjetas disponibles", - "noReceivedVcsText": "Toca en Solicitar a continuación para recibir una Tarjeta" - } + "stepOneText": "Lleva contigo tu credencial digital en todo momento. ", + "stepTwoTitle": "Monedero digital confiable", + "stepTwoText": "Guarde y lleve todas sus tarjetas importantes en una única billetera de confianza.", + "stepThreeTitle": "Compartir de forma segura", + "stepThreeText": "Comparta sus tarjetas de forma segura y sin complicaciones y aproveche varios servicios.", + "stepFourTitle": "Autenticación sin problemas", + "stepFourText": "Autentíquese fácilmente utilizando la credencial digital almacenada.", + "getStarted": "Empezar", + "goBack": "Regresa", + "back": "Atrás", + "skip": "Saltar", + "next": "Próximo" + }, + "ReceivedVcsTab": { + "receivedCards": "Tarjetas recibidas", + "header": "Tarjetas recibidas", + "noReceivedVcsTitle": "Aún no hay tarjeta disponible", + "noReceivedVcsText": "Toque Solicitar a continuación para recibir la tarjeta" }, "ViewVcModal": { + "title": "Detalles de identificación", + "inProgress": "En curso", "cancel": "Cancelar", - "lock": "Bloquear", - "unlock": "Desbloquear", - "rename": "Renombrar", - "delete": "Eliminar", + "lock": "Cerrar", + "unlock": "desbloquear", + "rename": "Rebautizar", + "delete": "Borrar", "revoke": "Revocar", - "revoking": "Tu billetera contiene una credencial con VID {{vid}}. Revocar esto eliminará automáticamente la misma de la billetera. ¿Estás seguro de que deseas continuar?", + "revoking": "Tu billetera contiene una credencial con VID {{vid}}. ", "requestingOtp": "Solicitando OTP...", + "activated": "Las credenciales están habilitadas para la autenticación en línea.", "redirecting": "Redirigiendo...", - "inProgress": "Cargando...", "success": { "unlocked": "Tarjeta desbloqueada exitosamente", "locked": "Tarjeta bloqueada exitosamente", - "revoked": "VID {{vid}} ha sido revocado. Cualquier credencial que contenga el mismo se eliminará automáticamente de la billetera." + "revoked": "VID {{vid}} ha sido revocado. " } }, "MainLayout": { - "home": "Inicio", + "home": "Hogar", "scan": "Escanear", - "request": "Solicitar", - "settings": "Configuración" + "history": "Historia", + "request": "Pedido", + "settings": "Ajustes" }, "PasscodeScreen": { - "header": "Establece un código de acceso para proteger tu aplicación", - "confirmPasscode": "Confirma tu código de acceso", - "enterPasscode": "Ingresa tu código de acceso" - }, - "SettingScreen": { - "header": "Ajustes", - "injiAsVerifierApp": "Inji como aplicación verificadora", - "basicSettings": "Ajustes básicos", - "bioUnlock": "Desbloquear con biométrico", - "language": "Idioma", - "aboutInji": "Acerca de Inji", - "credentialRegistry": "Registro de Credenciales", - "injiTourGuide": "Guía turístico Inji", - "logout": "Cerrar sesión", - "resetInjiProps": "Restableciendo accesorios Inji..." - }, - "IssuerScreen": { - "errors": { - "noInternetConnection": { - "title": "Sin conexión a Internet", - "message": "Por favor verifique su conexión y vuelva a intentarlo" - }, - "generic": { - "title": "¡Algo salió mal!", - "message": "Estamos teniendo algunos problemas con su solicitud. Inténtalo de nuevo." - } - } + "header": "Código de acceso establecido", + "enterNewPassword": "Ingrese una nueva contraseña", + "reEnterPassword": "Vuelva a ingresar la nueva contraseña", + "confirmPasscode": "Confirmar contraseña", + "enterPasscode": "Introduzca su código de acceso" }, "QrLogin": { - "title": "Inicio de sesión con código QR", - "alignQr": "Alinea el código QR dentro del marco para escanearlo", + "title": "Iniciar sesión", + "alignQr": "Alinee el código QR dentro del marco para escanearlo", "confirmation": "Confirmación", - "checkDomain": "Además, verifica que haya un icono de candado en la barra de direcciones.", + "checkDomain": "Además, busque un icono de candado en la barra de direcciones.", "domainHead": "https://", - "selectId": "Seleccionar ID", - "noBindedVc": "No hay Tarjetas Vinculadas disponibles para verificar", - "back": "Volver", + "selectId": "Seleccione una identificación", + "noBindedVc": "No hay ninguna tarjeta vinculada disponible para verificar", + "back": "Regresar", "confirm": "Confirmar", "verify": "Verificar", - "faceAuth": "Autenticación Facial", - "consent": "Consentimiento", + "faceAuth": "Autenticación facial", + "consent": "Consentir", "loading": "Cargando...", - "domainWarning": "Por favor, confirma que el dominio del sitio web desde el cual estás escaneando el código QR es el siguiente", - "access": "está solicitando acceso a", + "domainWarning": "Confirme el dominio del sitio web que está escaneando el código QR a continuación", + "access": " está solicitando acceso a", "status": "Estado", "successMessage": "Has iniciado sesión correctamente en ", - "okay": "De acuerdo", + "ok": "DE ACUERDO", "allow": "Permitir", "cancel": "Cancelar", - "essentialClaims": "Reclamos Esenciales", - "voluntaryClaims": "Reclamos Voluntarios", - "required": "Requerido" + "essentialClaims": "Reclamaciones importantes", + "voluntaryClaims": "Reclamaciones voluntarias", + "required": "Es necesario" }, "ReceiveVcScreen": { - "header": "Detalles de la tarjeta", - "save": "Guardar tarjeta", + "header": "Detalles de tarjeta", + "save": "guardar tarjeta", "verifyAndSave": "Verificar y guardar", "reject": "Rechazar", - "discard": "Descartar", - "goToReceivedVCTab": "Ver tarjetas recibidas", - "saving": "Guardando", + "discard": "Desechar", + "goToReceivedVCTab": "Ver tarjeta recibida", + "saving": "La tarjeta se está guardando", "errors": { "savingFailed": { - "title": "Error al guardar la tarjeta", - "message": "Ocurrió un error al guardar la tarjeta en el almacenamiento." - }, - "diskFullError": { - "title": "Error al guardar la tarjeta", - "message": "No se pueden recibir ni guardar más tarjetas porque los datos de la aplicación están llenos." + "title": "No se pudo guardar la tarjeta", + "message": "Algo salió mal al guardar la tarjeta en la tienda." } } }, "RequestScreen": { "receiveCard": "Recibir tarjeta", - "bluetoothDenied": "Por favor, activa el Bluetooth para poder solicitar la tarjeta", - "bluetoothStateAndroid": "Por favor, activa el Bluetooth desde la configuración rápida para admitir el intercambio local", - "bluetoothStateIos": "Por favor, activa el Bluetooth desde el centro de control para admitir el intercambio local", - "showQrCode": "Muestra este código QR para solicitar la tarjeta de residente", + "bluetoothDenied": "Por favor habilite Bluetooth para poder solicitar la tarjeta", + "bluetoothStateIos": "Bluetooth está desactivado, actívelo desde el centro de control", + "bluetoothStateAndroid": "Bluetooth está desactivado, actívelo desde el menú de configuración rápida", + "showQrCode": "Muestra este código QR para solicitar Tarjeta de residente", "incomingVc": "Tarjeta entrante", - "request": "Solicitar", + "request": "Pedido", "errors": { "nearbyDevicesPermissionDenied": { - "message": "Se requiere el permiso de Dispositivos cercanos para poder solicitar la tarjeta", + "message": "Se requiere permiso de Dispositivos cercanos para poder solicitar la Tarjeta", "button": "Permitir permiso" }, "storageLimitReached": { "title": "Datos de aplicación insuficientes", - "message": "No puede agregar ni recibir tarjetas porque los datos de la aplicación están llenos. Borre Appdata para continuar." + "message": "No puede agregar ni recibir tarjetas ya que Appdata está lleno. " } }, "status": { + "sharing": { + "title": "Compartir en progreso", + "timeoutHint": "El intercambio se retrasa, posiblemente debido a un problema de conexión." + }, "accepted": { "title": "¡Éxito!", - "message": "La tarjeta se ha recibido correctamente desde la billetera" + "message": "La tarjeta se recibió correctamente de Wallet" }, "rejected": { "title": "Aviso", - "message": "Has descartado la tarjeta de la billetera" + "message": "Descartaste la tarjeta de Wallet" }, "disconnected": { - "title": "Desconectado", - "message": "La conexión se interrumpió. Por favor, inténtalo de nuevo." + "title": "La conexión falló", + "message": "La conexión fue interrumpida. " }, - "waitingConnection": "Esperando conexión...", + "waitingConnection": "Esperando la conexión...", "exchangingDeviceInfo": { "message": "Intercambiando información del dispositivo...", - "timeoutHint": "Está tomando demasiado tiempo intercambiar la información del dispositivo..." + "timeoutHint": "Está tardando demasiado en intercambiar información del dispositivo..." }, "connected": { "message": "Conectado al dispositivo. Esperando la tarjeta...", "timeoutHint": "Todavía no se ha recibido ningún dato. ¿El dispositivo emisor aún está conectado?" }, "offline": { - "message": "Por favor, conéctate a internet para habilitar el modo de intercambio en línea" + "message": "Conéctese a Internet para habilitar el modo de compartir en línea" }, "bleError": { "title": "Error al transferir", @@ -879,60 +462,64 @@ }, "online": "En línea", "offline": "Desconectado", - "gotoSettings": "Ir a configuración" + "gotoSettings": "Ir a la configuración" }, "ScanScreen": { "header": "Escanear código QR", - "noShareableVcs": "No hay tarjetas compartibles disponibles.", - "sharingVc": "Compartiendo tarjeta", - "bluetoothStateAndroid": "Por favor, activa el Bluetooth desde la configuración rápida para admitir el intercambio local", - "bluetoothStateIos": "Por favor, activa el Bluetooth desde el centro de control para admitir el intercambio local", - "enableBluetoothMessage": "Por favor, habilita los permisos de Bluetooth para admitir el intercambio local", - "enableBluetoothButtonText": "Permitir permisos de Bluetooth", + "noShareableVcs": "No hay tarjetas para compartir disponibles.", + "sharingVc": "tarjeta compartida", + "bluetoothStateIos": "Bluetooth está desactivado, actívelo desde el centro de control", + "bluetoothStateAndroid": "Bluetooth está desactivado, actívelo desde el menú de configuración rápida", + "enableBluetoothMessage": "Habilite los permisos de Bluetooth para admitir el uso compartido local", + "enableBluetoothButtonText": "Permitir permisos de bluetooth", + "scanningGuide": "Sostenga el teléfono firmemente y escanee el código QR", "errors": { "locationDisabled": { - "message": "Los servicios de ubicación deben estar habilitados para compartir la tarjeta", - "button": "Habilitar servicios de ubicación" + "message": "Los servicios de ubicación deben estar habilitados para compartir la tarjeta.", + "button": "Servicio de localización activado" }, "locationDenied": { "message": "Se requiere permiso de ubicación para compartir la tarjeta", - "button": "Permitir acceso a la ubicación" + "button": "Permitir el acceso a la ubicación" }, "nearbyDevicesPermissionDenied": { - "message": "Se requiere el permiso de Dispositivos cercanos para poder compartir la tarjeta", + "message": "Se requiere permiso de dispositivos cercanos para poder compartir la tarjeta", "button": "Permitir permiso" }, "storageLimitReached": { "title": "Datos de aplicación insuficientes", - "message": "No puede compartir tarjetas porque los datos de la aplicación están llenos. Borre Appdata para continuar." + "message": "No puedes compartir tarjetas ya que Appdata está llena. " } }, "status": { - "connecting": "Conectando...", - "connectingTimeout": "Está tomando tiempo establecer la conexión. ¿El otro dispositivo está abierto para conexiones?", + "inProgress": "En curso", + "establishingConnection": "Estableciendo conexión", + "connectionInProgress": "Conexión en progreso", + "connectingTimeout": "Está tardando un poco en establecer la conexión. ", "stayOnTheScreen": "Quédate en la pantalla", "retry": "Rever", "exchangingDeviceInfo": "Intercambiando información del dispositivo...", - "exchangingDeviceInfoTimeout": "Está tomando tiempo intercambiar la información del dispositivo. Es posible que tengas que reconectar.", - "invalid": "Código QR inválido", - "offline": "Por favor, conéctate a internet para escanear códigos QR usando el modo de intercambio en línea", + "exchangingDeviceInfoTimeout": "Está tardando un poco en intercambiar información del dispositivo. ", + "invalid": "Código QR no válido", + "offline": "Conéctese a Internet para escanear códigos QR usando el modo para compartir en línea", "sent": "La tarjeta ha sido enviada...", - "sentHint": "Esperando a que el receptor guarde o descarte tu tarjeta", + "sentHint": "Esperando que el receptor guarde o descarte su Tarjeta", "sharing": { - "title": "Compartiendo...", + "title": "Compartir en progreso", "hint": "Espere mientras compartimos la tarjeta elegida.", - "timeoutHint": "Está tomando más tiempo del esperado para compartir. Puede haber un problema con la conexión." + "timeoutHint": "El intercambio se retrasa, posiblemente debido a un problema de conexión." }, "accepted": { "title": "¡Éxito!", - "message": "Tu tarjeta ha sido compartida exitosamente con el Verificador" + "message": "Tu tarjeta ha sido compartida exitosamente con el Verificador", + "gotohome": "Ir a casa" }, "rejected": { "title": "Aviso", - "message": "Tu tarjeta ha sido descartada por el Verificador" + "message": "Su tarjeta fue descartada por el Verificador" }, "bleError": { - "title": "Error al transferir", + "title": "No se pudo transferir", "message": "Ocurrió un error al transferir la tarjeta. Por favor, inténtalo de nuevo.", "hint": "Error: {{code}}" } @@ -940,18 +527,35 @@ }, "SelectVcOverlay": { "header": "Compartir tarjeta", - "chooseVc": "Selecciona la tarjeta que deseas compartir", + "chooseVc": "Elige la Tarjeta con la que te gustaría compartir", "share": "Compartir", "verifyAndShare": "Verificar identidad y compartir" }, "SendVcScreen": { - "reasonForSharing": "Motivo de compartir (opcional)", + "reasonForSharing": "Razón para compartir (opcional)", "acceptRequest": "Compartir", "acceptRequestAndVerify": "Compartir con selfie", "reject": "Rechazar", - "consentToPhotoVerification": "Doy mi consentimiento para que se tome mi foto para la autenticación" + "consentToPhotoVerification": "Doy mi consentimiento para que me tomen una foto para autenticación", + "pleaseSelectAnId": "Por favor seleccione una identificación", + "status": { + "sharing": { + "title": "Intercambio", + "hint": "Espere a que el dispositivo receptor acepte o rechace el intercambio.", + "timeoutHint": "Las acciones de VC tardan un poco más. " + }, + "accepted": { + "title": "¡Éxito!", + "message": "Su tarjeta ha sido compartida exitosamente con {{receiver}}" + }, + "rejected": { + "title": "Prestar atención", + "message": "Su tarjeta ha sido rechazada por {{receiver}}" + } + } }, "VerifyIdentityOverlay": { + "faceAuth": "Autenticación facial", "status": { "verifyingIdentity": "Verificando identidad..." }, @@ -961,27 +565,39 @@ "message": "No se reconoce el rostro. Por favor, inténtalo de nuevo.", "messageNoRetry": "No se reconoce el rostro." } - } + }, + "ignore": "Ignorar" + }, + "SetupLanguage": { + "header": "Elige lengua", + "description": "Selecciona tu idioma preferido", + "save": "Guardar preferencia" }, "common": { "cancel": "Cancelar", - "save": "Guardar", - "dismiss": "Cerrar", + "accept": "Aceptar", + "save": "Ahorrar", + "ok": "De acuerdo", + "dismiss": "Despedir", "editLabel": "Editar {{label}}", - "tryAgain": "Intentar de nuevo", + "tryAgain": "Intentar otra vez", + "ignore": "Ignorar", "camera": { "errors": { "missingPermission": "Esta aplicación utiliza la cámara para escanear el código QR de otro dispositivo." }, - "allowAccess": "Permitir acceso a la cámara" + "allowAccess": "Permitir el acceso a la cámara" }, "errors": { - "genericError": "Algo salió mal. ¡Por favor, inténtalo de nuevo después de un tiempo!" + "genericError": "Algo está mal. ¡Por favor, inténtelo de nuevo más tarde!" + }, + "clipboard": { + "copy": "Copiar", + "copied": "copiado" }, "biometricPopup": { "title": "Desbloquear aplicación", "description": "Utilice la huella digital para desbloquear la aplicación." } } -} - +} \ No newline at end of file diff --git a/locales/tam.json b/locales/tam.json index 06333ea85b..45f55c117a 100644 --- a/locales/tam.json +++ b/locales/tam.json @@ -587,6 +587,7 @@ "cancel": "ரத்துசெய்", "accept": "ஏற்றுக்கொள்", "save": "சேமி", + "ok": "சரி", "dismiss": "நிராகரி", "editLabel": "திருத்து {{label}}", "tryAgain": "மீண்டும் முயற்சி செய்", diff --git a/machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine.ts b/machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine.ts index 608f226dc3..6685b036d1 100644 --- a/machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine.ts +++ b/machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine.ts @@ -171,14 +171,23 @@ export const ExistingMosipVCItemMachine = checkingServerData: { description: "Download VC data from the server. Uses polling method to check when it's available.", - initial: 'verifyingDownloadLimitExpiry', + initial: 'loadDownloadLimitConfig', states: { + loadDownloadLimitConfig: { + invoke: { + src: 'loadDownloadLimitConfig', + onDone: { + actions: ['setMaxDownloadCount', 'setDownloadInterval'], + target: 'verifyingDownloadLimitExpiry', + }, + }, + }, verifyingDownloadLimitExpiry: { + entry: ['incrementDownloadCounter'], invoke: { src: 'checkDownloadExpiryLimit', onDone: { target: 'checkingStatus', - actions: ['setMaxDownloadCount', 'setDownloadInterval'], }, onError: { actions: [ @@ -203,7 +212,6 @@ export const ExistingMosipVCItemMachine = }, FAILED: [ { - actions: ['incrementDownloadCounter'], target: 'verifyingDownloadLimitExpiry', }, ], @@ -1273,26 +1281,27 @@ export const ExistingMosipVCItemMachine = }, services: { - checkDownloadExpiryLimit: async context => { + loadDownloadLimitConfig: async context => { var resp = await getAllConfigurations(); const maxLimit: number = resp.vcDownloadMaxRetry; const vcDownloadPoolInterval: number = resp.vcDownloadPoolInterval; - console.log(maxLimit); - if (maxLimit <= context.downloadCounter) { - throw new Error( - 'Download limit expired for request id: ' + - context.vcMetadata.requestId, - ); - } const downloadProps: DownloadProps = { maxDownloadLimit: maxLimit, downloadInterval: vcDownloadPoolInterval, }; - return downloadProps; }, + checkDownloadExpiryLimit: async context => { + if (context.downloadCounter > context.maxDownloadCount) { + throw new Error( + 'Download limit expired for request id: ' + + context.vcMetadata.requestId, + ); + } + }, + addWalletBindnigId: async context => { const response = await request( API_URLS.walletBinding.method, From 6ff3f98d6c94b14767afca19f450080d9f69e77e Mon Sep 17 00:00:00 2001 From: Sri Kanth Kola Date: Fri, 17 Nov 2023 23:54:06 +0530 Subject: [PATCH 06/40] Merge branch 'develop' of https://github.com/mosip/inji into inji-427-refactoring-selectVC-screen-while-sharing Signed-off-by: Sri Kanth Kola --- .talismanrc | 6 +- android/app/build.gradle | 13 +- android/app/src/main/AndroidManifest.xml | 3 - android/settings.gradle | 5 +- components/PasscodeVerify.tsx | 12 + components/ui/Loader.tsx | 31 ++- .../mob/inji/pages/DetailedVcViewPage.java | 91 ++++++- .../test/mob/inji/pages/HistoryPage.java | 42 ++- .../mosip/test/mob/inji/pages/HomePage.java | 6 + .../mob/inji/pages/OtpVerificationPage.java | 25 ++ .../test/mob/inji/pages/RetrieveIdPage.java | 5 + .../mosip/test/mob/inji/pages/ScanPage.java | 15 +- .../test/mob/inji/pages/SettingsPage.java | 48 ++++ .../mob/inji/testcases/ActivateVcTest.java | 29 +- .../inji/testcases/ChangeLanguageTest.java | 54 ++++ .../inji/testcases/GenerateUinOrVidTest.java | 37 +++ .../inji/testcases/NoNetworkAndroidTest.java | 77 ++++++ .../test/mob/inji/testcases/ShareVcTest.java | 61 +++++ .../VcDownloadAndVerifyUsingUinTest.java | 64 ++++- .../VcDownloadAndVerifyUsingVidTest.java | 35 ++- .../mob/inji/testcases/VerifyHistoryTest.java | 158 ++++++++++- .../testcases/VerifyWelcomePagesTest.java | 44 +++ injitest/src/main/resources/TestData.json | 7 +- injitest/target/classes/TestData.json | 19 ++ injitest/target/classes/config.properties | 5 + .../Authorization/internalAuthRequest.json | 13 + .../classes/config/Authorization/request.json | 11 + .../target/classes/config/Kernel.properties | 134 ++++++++++ .../classes/config/Kernel_qa-inji.properties | 251 ++++++++++++++++++ .../classes/config/application.properties | 6 + .../target/classes/config/bioValue.properties | 42 +++ .../classes/config/valueMapping.properties | 18 ++ .../test/mob/inji/api/AdminTestUtil.class | Bin 0 -> 10461 bytes .../mob/inji/api/ApplicationLibrary.class | Bin 0 -> 1656 bytes .../test/mob/inji/api/BaseTestCase.class | Bin 0 -> 8250 bytes .../test/mob/inji/api/CommonLibrary.class | Bin 0 -> 9308 bytes .../test/mob/inji/api/ConfigManager.class | Bin 0 -> 15970 bytes .../test/mob/inji/api/GlobalConstants.class | Bin 0 -> 779 bytes .../test/mob/inji/api/GlobalMethods.class | Bin 0 -> 1978 bytes .../test/mob/inji/api/JsonPrecondtion.class | Bin 0 -> 2604 bytes .../mob/inji/api/KernelAuthentication.class | Bin 0 -> 4500 bytes .../mob/inji/api/KeycloakUserManager.class | Bin 0 -> 9951 bytes .../MockSMTPListener$WebSocketClient.class | Bin 0 -> 4298 bytes .../test/mob/inji/api/MockSMTPListener.class | Bin 0 -> 6040 bytes .../mob/inji/api/OutputValidationDto.class | Bin 0 -> 1398 bytes .../mosip/test/mob/inji/api/ReportUtil.class | Bin 0 -> 4337 bytes .../mosip/test/mob/inji/api/RestClient.class | Bin 0 -> 5035 bytes .../io/mosip/test/mob/inji/api/pojo/Cc.class | Bin 0 -> 471 bytes .../mosip/test/mob/inji/api/pojo/From.class | Bin 0 -> 477 bytes .../test/mob/inji/api/pojo/HeaderLine.class | Bin 0 -> 369 bytes .../test/mob/inji/api/pojo/Headers.class | Bin 0 -> 310 bytes .../mosip/test/mob/inji/api/pojo/Root.class | Bin 0 -> 856 bytes .../io/mosip/test/mob/inji/api/pojo/To.class | Bin 0 -> 471 bytes .../mosip/test/mob/inji/api/pojo/Value.class | Bin 0 -> 358 bytes .../test/mob/inji/constants/Target.class | Bin 0 -> 1076 bytes .../test/mob/inji/driver/DriverManager.class | Bin 0 -> 4148 bytes .../test/mob/inji/driver/TestRunner.class | Bin 0 -> 3749 bytes .../PlatformNotSupportException.class | Bin 0 -> 441 bytes .../mob/inji/extentReports/ExtentLogger.class | Bin 0 -> 888 bytes .../mob/inji/extentReports/ExtentReport.class | Bin 0 -> 2227 bytes .../test/mob/inji/listeners/Listeners.class | Bin 0 -> 2630 bytes .../test/mob/inji/pages/AddNewCardPage.class | Bin 0 -> 1209 bytes .../mob/inji/pages/AppUnlockMethodPage.class | Bin 0 -> 1414 bytes .../mosip/test/mob/inji/pages/BasePage.class | Bin 0 -> 4251 bytes .../mob/inji/pages/ChooseLanguagePage.class | Bin 0 -> 1555 bytes .../test/mob/inji/pages/ConfirmPasscode.class | Bin 0 -> 1827 bytes .../mob/inji/pages/DetailedVcViewPage.class | Bin 0 -> 3324 bytes .../inji/pages/EnterYourPasscodePage.class | Bin 0 -> 1648 bytes .../mob/inji/pages/GenerateUinOrVidPage.class | Bin 0 -> 1997 bytes .../pages/HassleFreeAuthenticationPage.class | Bin 0 -> 1461 bytes .../mosip/test/mob/inji/pages/HelpPage.class | Bin 0 -> 1544 bytes .../test/mob/inji/pages/HistoryPage.class | Bin 0 -> 5596 bytes .../mosip/test/mob/inji/pages/HomePage.class | Bin 0 -> 5732 bytes .../test/mob/inji/pages/MoreOptionsPage.class | Bin 0 -> 2444 bytes .../mob/inji/pages/OtpVerificationPage.class | Bin 0 -> 2739 bytes .../inji/pages/PleaseConfirmPopupPage.class | Bin 0 -> 1457 bytes .../test/mob/inji/pages/RetrieveIdPage.class | Bin 0 -> 4074 bytes .../mosip/test/mob/inji/pages/ScanPage.class | Bin 0 -> 2258 bytes .../mob/inji/pages/SecureSharingPage.class | Bin 0 -> 1773 bytes .../test/mob/inji/pages/SetPasscode.class | Bin 0 -> 3251 bytes .../test/mob/inji/pages/SettingsPage.class | Bin 0 -> 4733 bytes .../inji/pages/TrustedDigitalWalletPage.class | Bin 0 -> 1845 bytes .../inji/pages/UnlockApplicationPage.class | Bin 0 -> 1343 bytes .../test/mob/inji/pages/WelcomePage.class | Bin 0 -> 1863 bytes .../mob/inji/testcases/ActivateVcTest.class | Bin 0 -> 7405 bytes .../test/mob/inji/testcases/BaseTest.class | Bin 0 -> 2486 bytes .../inji/testcases/ChangeLanguageTest.class | Bin 0 -> 4175 bytes .../mob/inji/testcases/DeletingVcTest.class | Bin 0 -> 7646 bytes .../inji/testcases/GenerateUinOrVidTest.class | Bin 0 -> 5070 bytes .../inji/testcases/NoNetworkAndroidTest.class | Bin 0 -> 7185 bytes .../test/mob/inji/testcases/PinVcTest.class | Bin 0 -> 5456 bytes .../test/mob/inji/testcases/ShareVcTest.class | Bin 0 -> 3795 bytes .../testcases/UnlockWithPasscodeTest.class | Bin 0 -> 4303 bytes .../VcDownloadAndVerifyUsingUinTest.class | Bin 0 -> 8552 bytes .../VcDownloadAndVerifyUsingVidTest.class | Bin 0 -> 6716 bytes .../inji/testcases/VerifyHelpPageTest.class | Bin 0 -> 3133 bytes .../inji/testcases/VerifyHistoryTest.class | Bin 0 -> 8222 bytes .../testcases/VerifyWelcomePagesTest.class | Bin 0 -> 5134 bytes .../test/mob/inji/utils/CommonMethods.class | Bin 0 -> 2277 bytes .../mosip/test/mob/inji/utils/JsonUtil.class | Bin 0 -> 4916 bytes .../mob/inji/utils/PropertiesReader.class | Bin 0 -> 3129 bytes .../test/mob/inji/utils/ScreenRecording.class | Bin 0 -> 1710 bytes .../test/mob/inji/utils/TestDataReader.class | Bin 0 -> 1709 bytes injitest/testng.xml | 44 ++- locales/ara.json | 12 +- locales/en.json | 16 +- locales/fil.json | 12 +- locales/hin.json | 12 +- locales/kan.json | 12 +- locales/spa.json | 4 + locales/tam.json | 12 +- .../ExistingMosipVCItemMachine.ts | 19 +- machines/bleShare/scan/scanMachine.ts | 47 +++- machines/bleShare/scan/scanMachine.typegen.ts | 236 ---------------- machines/bleShare/scan/selectors.ts | 4 +- machines/issuersMachine.ts | 102 +++++-- machines/issuersMachine.typegen.ts | 24 +- machines/store.ts | 75 ++++++ machines/store.typegen.ts | 4 - package-lock.json | 15 ++ package.json | 1 + screens/Home/MyVcs/AddVcModalMachine.ts | 12 +- screens/Issuers/IssuerScreenController.tsx | 5 +- screens/Issuers/IssuersScreen.tsx | 60 +++-- screens/QrLogin/QrLoginSuccessMessage.tsx | 2 +- screens/Scan/ScanLayout.tsx | 30 ++- screens/Scan/ScanLayoutController.ts | 10 +- shared/constants.ts | 2 + shared/cryptoutil/cryptoUtil.ts | 40 ++- shared/error/BiometricCancellationError.ts | 6 + shared/location.ts | 34 ++- shared/openId4VCI/Utils.ts | 1 + shared/storage.ts | 23 ++ shared/telemetry/TelemetryConstants.js | 3 + 134 files changed, 1829 insertions(+), 417 deletions(-) create mode 100644 injitest/src/main/java/io/mosip/test/mob/inji/testcases/ShareVcTest.java create mode 100644 injitest/target/classes/TestData.json create mode 100644 injitest/target/classes/config.properties create mode 100644 injitest/target/classes/config/Authorization/internalAuthRequest.json create mode 100644 injitest/target/classes/config/Authorization/request.json create mode 100644 injitest/target/classes/config/Kernel.properties create mode 100644 injitest/target/classes/config/Kernel_qa-inji.properties create mode 100644 injitest/target/classes/config/application.properties create mode 100644 injitest/target/classes/config/bioValue.properties create mode 100644 injitest/target/classes/config/valueMapping.properties create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/api/AdminTestUtil.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/api/ApplicationLibrary.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/api/BaseTestCase.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/api/CommonLibrary.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/api/ConfigManager.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/api/GlobalConstants.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/api/GlobalMethods.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/api/JsonPrecondtion.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/api/KernelAuthentication.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/api/KeycloakUserManager.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/api/MockSMTPListener$WebSocketClient.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/api/MockSMTPListener.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/api/OutputValidationDto.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/api/ReportUtil.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/api/RestClient.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/api/pojo/Cc.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/api/pojo/From.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/api/pojo/HeaderLine.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/api/pojo/Headers.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/api/pojo/Root.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/api/pojo/To.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/api/pojo/Value.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/constants/Target.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/driver/DriverManager.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/driver/TestRunner.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/exceptions/PlatformNotSupportException.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/extentReports/ExtentLogger.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/extentReports/ExtentReport.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/listeners/Listeners.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/pages/AddNewCardPage.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/pages/AppUnlockMethodPage.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/pages/BasePage.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/pages/ChooseLanguagePage.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/pages/ConfirmPasscode.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/pages/DetailedVcViewPage.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/pages/EnterYourPasscodePage.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/pages/GenerateUinOrVidPage.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/pages/HassleFreeAuthenticationPage.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/pages/HelpPage.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/pages/HistoryPage.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/pages/HomePage.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/pages/MoreOptionsPage.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/pages/OtpVerificationPage.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/pages/PleaseConfirmPopupPage.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/pages/RetrieveIdPage.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/pages/ScanPage.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/pages/SecureSharingPage.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/pages/SetPasscode.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/pages/SettingsPage.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/pages/TrustedDigitalWalletPage.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/pages/UnlockApplicationPage.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/pages/WelcomePage.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/testcases/ActivateVcTest.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/testcases/BaseTest.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/testcases/ChangeLanguageTest.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/testcases/DeletingVcTest.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/testcases/GenerateUinOrVidTest.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/testcases/NoNetworkAndroidTest.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/testcases/PinVcTest.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/testcases/ShareVcTest.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/testcases/UnlockWithPasscodeTest.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/testcases/VcDownloadAndVerifyUsingUinTest.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/testcases/VcDownloadAndVerifyUsingVidTest.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/testcases/VerifyHelpPageTest.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/testcases/VerifyHistoryTest.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/testcases/VerifyWelcomePagesTest.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/utils/CommonMethods.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/utils/JsonUtil.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/utils/PropertiesReader.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/utils/ScreenRecording.class create mode 100644 injitest/target/classes/io/mosip/test/mob/inji/utils/TestDataReader.class create mode 100644 shared/error/BiometricCancellationError.ts diff --git a/.talismanrc b/.talismanrc index c5a22c007e..1a881a8a61 100644 --- a/.talismanrc +++ b/.talismanrc @@ -26,7 +26,11 @@ fileignoreconfig: - filename: screens/Home/IntroSlidersScreen.tsx checksum: 9ff212530850e9f921f91d406c01f67ea5dd2a44e9cdb5e63d977749c7a7c5bd - filename: machines/store.ts - checksum: fda6511ab88566820cf6b7324178b4646f495fae5168af73a0fb1c3bb52e5b8d + checksum: fda6511ab88566820cf6b7324178b4646f495fae5168af73a0fb1c3bb52e5b8d +- filename: machines/issuersMachine.ts + checksum: 742b8ff561dca61be08ab0b9aef3997ad5d043df298a84c17349dc0206ddcee6 +- filename: machines/issuersMachine.typegen.ts + checksum: b17d8cc03347af59098fa4fc439d40cc436998b0d148a2ac922acc2e0288e09c - filename: screens/Home/MyVcs/IdInputModal.tsx checksum: 6f21b2caf20ee1821b69e178a69e755e0b1094275e4a9f9cb4ae5ab515ce5d23 - filename: screens/WelcomeScreenController.ts diff --git a/android/app/build.gradle b/android/app/build.gradle index 2b2d0d8a0b..c25335800e 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,12 +1,10 @@ -plugins { +plugins { id 'com.gladed.androidgitversion' version '0.4.14' } apply plugin: "com.android.application" apply plugin: "com.facebook.react" -import com.android.build.OutputFile - react { /* Folders */ // The root of your project, i.e. where "package.json" lives. Default is '..' @@ -102,9 +100,6 @@ android { } - namespace 'io.mosip.residentapp' - - namespace 'io.mosip.residentapp' defaultConfig { @@ -130,7 +125,7 @@ android { include "armeabi-v7a", "x86", "arm64-v8a", "x86_64" } } - + signingConfigs { release { def keystore = file('release.keystore') @@ -232,7 +227,7 @@ dependencies { implementation 'com.facebook.fresco:animated-webp:2.0.0' } } - + compileOnly project(':react-native-android-location-services-dialog-box') implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0" debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") { @@ -252,4 +247,4 @@ dependencies { } apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) -apply from: "./eas-build.gradle" \ No newline at end of file +apply from: "./eas-build.gradle" diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 4e96975dca..e025fa3e81 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -9,11 +9,8 @@ - - - diff --git a/android/settings.gradle b/android/settings.gradle index cf75b94c96..38e206ee8b 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -3,6 +3,7 @@ rootProject.name = 'Inji' apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) include ':app' includeBuild('../node_modules/react-native-gradle-plugin') - +include ':react-native-android-location-services-dialog-box' +project(':react-native-android-location-services-dialog-box').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-android-location-services-dialog-box/android') apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle") -useExpoModules() \ No newline at end of file +useExpoModules() diff --git a/components/PasscodeVerify.tsx b/components/PasscodeVerify.tsx index 0f58edc8c5..3bdac095b3 100644 --- a/components/PasscodeVerify.tsx +++ b/components/PasscodeVerify.tsx @@ -3,6 +3,11 @@ import {useTranslation} from 'react-i18next'; import {PinInput} from './PinInput'; import {hashData} from '../shared/commonUtil'; import {argon2iConfig} from '../shared/constants'; +import { + getErrorEventData, + sendErrorEvent, +} from '../shared/telemetry/TelemetryUtils'; +import {TelemetryConstants} from '../shared/telemetry/TelemetryConstants'; export const MAX_PIN = 6; @@ -32,6 +37,13 @@ export const PasscodeVerify: React.FC = props => { } } } catch (error) { + sendErrorEvent( + getErrorEventData( + TelemetryConstants.FlowType.appLogin, + TelemetryConstants.ErrorId.mismatch, + error, + ), + ); console.log('error:', error); } } diff --git a/components/ui/Loader.tsx b/components/ui/Loader.tsx index c23297ccec..e13d347b6b 100644 --- a/components/ui/Loader.tsx +++ b/components/ui/Loader.tsx @@ -64,7 +64,33 @@ export const Loader: React.FC = props => { /> + {(props.isHintVisible || props.isBleErrorVisible) && ( + + + {props.hint} + + {props.onStayInProgress && ( +