mirror of
https://github.com/mosip/inji-wallet.git
synced 2026-01-09 05:27:57 -05:00
[INJIMOB-878]: remove unused lock and revoke feature of VC (#1330)
Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com>
This commit is contained in:
@@ -5,7 +5,6 @@ export type ActivityLogType =
|
||||
| 'VC_RECEIVED_NOT_SAVED'
|
||||
| 'VC_DELETED'
|
||||
| 'VC_DOWNLOADED'
|
||||
| 'VC_REVOKED'
|
||||
| 'VC_SHARED_WITH_VERIFICATION_CONSENT'
|
||||
| 'VC_RECEIVED_WITH_PRESENCE_VERIFIED'
|
||||
| 'VC_RECEIVED_BUT_PRESENCE_VERIFICATION_FAILED'
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
import React from 'react';
|
||||
import { View } from 'react-native';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
|
||||
import { Button, Centered, Column, Text } from './ui';
|
||||
import { ModalProps } from './ui/Modal';
|
||||
import { Theme } from './ui/styleUtils';
|
||||
|
||||
export const OIDcAuthenticationModal: React.FC<OIDcAuthenticationModalProps> = (
|
||||
props
|
||||
) => {
|
||||
const { t } = useTranslation('OIDcAuth');
|
||||
|
||||
return (
|
||||
<View style={Theme.OIDCAuthStyles.viewContainer}>
|
||||
<Column safe fill align="space-between">
|
||||
<Centered fill>
|
||||
<Icon
|
||||
name="card-account-details-outline"
|
||||
color={Theme.Colors.Icon}
|
||||
size={30}
|
||||
/>
|
||||
<Text
|
||||
align="center"
|
||||
weight="bold"
|
||||
margin="8 0 12 0"
|
||||
style={{ fontSize: 24 }}>
|
||||
{t('title')}
|
||||
</Text>
|
||||
<Text align="center">{t('text')}</Text>
|
||||
<Text
|
||||
align="center"
|
||||
color={Theme.Colors.errorMessage}
|
||||
margin="16 0 0 0">
|
||||
{props.error}
|
||||
</Text>
|
||||
</Centered>
|
||||
<Column>
|
||||
<Button title={t('verify')} onPress={() => props.onVerify()} />
|
||||
</Column>
|
||||
</Column>
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
interface OIDcAuthenticationModalProps extends ModalProps {
|
||||
onVerify: () => void;
|
||||
error?: string;
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
import React from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
|
||||
import { Button, Centered, Column, Text } from './ui';
|
||||
import { Modal, ModalProps } from './ui/Modal';
|
||||
import { Theme } from './ui/styleUtils';
|
||||
|
||||
export const OIDcAuthenticationOverlay: React.FC<
|
||||
OIDcAuthenticationModalProps
|
||||
> = (props) => {
|
||||
const { t } = useTranslation('OIDcAuth');
|
||||
|
||||
return (
|
||||
<Modal isVisible={props.isVisible} onDismiss={props.onDismiss}>
|
||||
<Column fill padding="32" align="space-between">
|
||||
<Centered fill>
|
||||
<Icon
|
||||
name="card-account-details-outline"
|
||||
color={Theme.Colors.Icon}
|
||||
size={30}
|
||||
/>
|
||||
<Text
|
||||
align="center"
|
||||
weight="bold"
|
||||
margin="8 0 12 0"
|
||||
style={{ fontSize: 24 }}>
|
||||
{t('title')}
|
||||
</Text>
|
||||
<Text align="center">{t('text')}</Text>
|
||||
<Text
|
||||
align="center"
|
||||
color={Theme.Colors.errorMessage}
|
||||
margin="16 0 0 0">
|
||||
{props.error}
|
||||
</Text>
|
||||
</Centered>
|
||||
<Column>
|
||||
<Button title={t('verify')} onPress={() => props.onVerify()} />
|
||||
</Column>
|
||||
</Column>
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
|
||||
interface OIDcAuthenticationModalProps extends ModalProps {
|
||||
onVerify: () => void;
|
||||
error?: string;
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
import React from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { Dimensions, View } from 'react-native';
|
||||
import { Button, Centered, Column, Row, Text } from './ui';
|
||||
import { Theme } from './ui/styleUtils';
|
||||
|
||||
export const RevokeConfirmModal: React.FC<RevokeConfirmModalProps> = (
|
||||
props
|
||||
) => {
|
||||
const { t } = useTranslation('ViewVcModal');
|
||||
|
||||
return (
|
||||
<View style={Theme.RevokeConfirmStyles.viewContainer}>
|
||||
<Centered fill>
|
||||
<Column
|
||||
width={Dimensions.get('screen').width * 0.8}
|
||||
style={Theme.RevokeConfirmStyles.boxContainer}>
|
||||
<Text weight="semibold" margin="0 0 12 0">
|
||||
{t('revoke')}
|
||||
</Text>
|
||||
<Text margin="0 0 12 0">{t('revoking', { vid: props.id })}</Text>
|
||||
<Row>
|
||||
<Button
|
||||
fill
|
||||
type="clear"
|
||||
title={t('cancel')}
|
||||
onPress={() => props.onCancel()}
|
||||
/>
|
||||
<Button fill title={t('revoke')} onPress={props.onRevoke} />
|
||||
</Row>
|
||||
</Column>
|
||||
</Centered>
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
interface RevokeConfirmModalProps {
|
||||
onCancel: () => void;
|
||||
onRevoke: () => void;
|
||||
id: string;
|
||||
}
|
||||
@@ -219,7 +219,6 @@ export interface EsignetVC {
|
||||
requestId: string;
|
||||
isVerified: boolean;
|
||||
lastVerifiedOn: number;
|
||||
locked: boolean;
|
||||
shouldVerifyPresence?: boolean;
|
||||
walletBindingResponse?: WalletBindingResponse;
|
||||
credentialRegistry: string;
|
||||
|
||||
@@ -301,12 +301,6 @@ export const DefaultTheme = {
|
||||
borderRadius: 12,
|
||||
fontSize: 12,
|
||||
},
|
||||
lockDomainContainer: {
|
||||
backgroundColor: Colors.White,
|
||||
alignSelf: 'center',
|
||||
borderRadius: 15,
|
||||
width: 100,
|
||||
},
|
||||
bottomButtonsContainer: {
|
||||
height: 'auto',
|
||||
borderTopLeftRadius: 27,
|
||||
@@ -1234,34 +1228,6 @@ export const DefaultTheme = {
|
||||
borderTopRightRadius: 0,
|
||||
},
|
||||
}),
|
||||
RevokeStyles: StyleSheet.create({
|
||||
buttonContainer: {
|
||||
position: 'absolute',
|
||||
left: 0,
|
||||
right: 'auto',
|
||||
},
|
||||
view: {
|
||||
flex: 1,
|
||||
width: Dimensions.get('screen').width,
|
||||
},
|
||||
revokeView: {padding: 20},
|
||||
flexRow: {flexDirection: 'row', margin: 0, padding: 0},
|
||||
rowStyle: {flexDirection: 'column', justifyContent: 'space-between'},
|
||||
viewContainer: {
|
||||
backgroundColor: 'rgba(0,0,0,.6)',
|
||||
width: Dimensions.get('screen').width,
|
||||
height: Dimensions.get('screen').height,
|
||||
position: 'absolute',
|
||||
top: 0,
|
||||
zIndex: 999,
|
||||
},
|
||||
boxContainer: {
|
||||
backgroundColor: Colors.White,
|
||||
padding: 24,
|
||||
elevation: 6,
|
||||
borderRadius: 4,
|
||||
},
|
||||
}),
|
||||
VerifyIdentityOverlayStyles: StyleSheet.create({
|
||||
content: {
|
||||
width: Dimensions.get('screen').width,
|
||||
@@ -1269,43 +1235,6 @@ export const DefaultTheme = {
|
||||
backgroundColor: Colors.White,
|
||||
},
|
||||
}),
|
||||
RevokeConfirmStyles: StyleSheet.create({
|
||||
viewContainer: {
|
||||
backgroundColor: 'rgba(0,0,0,.6)',
|
||||
width: Dimensions.get('screen').width,
|
||||
height: Dimensions.get('screen').height,
|
||||
position: 'absolute',
|
||||
top: 0,
|
||||
zIndex: 999999,
|
||||
},
|
||||
boxContainer: {
|
||||
backgroundColor: Colors.White,
|
||||
padding: 24,
|
||||
elevation: 6,
|
||||
borderRadius: 4,
|
||||
},
|
||||
}),
|
||||
OtpVerificationStyles: StyleSheet.create({
|
||||
modal: {
|
||||
width: Dimensions.get('screen').width,
|
||||
height: Dimensions.get('screen').height,
|
||||
},
|
||||
viewContainer: {
|
||||
backgroundColor: Colors.White,
|
||||
width: Dimensions.get('screen').width,
|
||||
height: Dimensions.get('screen').height,
|
||||
position: 'absolute',
|
||||
top: 0,
|
||||
zIndex: 9,
|
||||
padding: 32,
|
||||
},
|
||||
close: {
|
||||
position: 'absolute',
|
||||
top: 32,
|
||||
right: 0,
|
||||
color: Colors.Orange,
|
||||
},
|
||||
}),
|
||||
MessageStyles: StyleSheet.create({
|
||||
overlay: {
|
||||
elevation: 5,
|
||||
|
||||
@@ -306,12 +306,6 @@ export const PurpleTheme = {
|
||||
borderRadius: 12,
|
||||
fontSize: 12,
|
||||
},
|
||||
lockDomainContainer: {
|
||||
backgroundColor: Colors.White,
|
||||
alignSelf: 'center',
|
||||
borderRadius: 15,
|
||||
width: 100,
|
||||
},
|
||||
bottomButtonsContainer: {
|
||||
height: 'auto',
|
||||
borderTopLeftRadius: 27,
|
||||
@@ -1237,34 +1231,7 @@ export const PurpleTheme = {
|
||||
borderTopRightRadius: 0,
|
||||
},
|
||||
}),
|
||||
RevokeStyles: StyleSheet.create({
|
||||
buttonContainer: {
|
||||
position: 'absolute',
|
||||
left: 0,
|
||||
right: 'auto',
|
||||
},
|
||||
view: {
|
||||
flex: 1,
|
||||
width: Dimensions.get('screen').width,
|
||||
},
|
||||
revokeView: {padding: 20},
|
||||
flexRow: {flexDirection: 'row', margin: 0, padding: 0},
|
||||
rowStyle: {flexDirection: 'column', justifyContent: 'space-between'},
|
||||
viewContainer: {
|
||||
backgroundColor: 'rgba(0,0,0,.6)',
|
||||
width: Dimensions.get('screen').width,
|
||||
height: Dimensions.get('screen').height,
|
||||
position: 'absolute',
|
||||
top: 0,
|
||||
zIndex: 999,
|
||||
},
|
||||
boxContainer: {
|
||||
backgroundColor: Colors.White,
|
||||
padding: 24,
|
||||
elevation: 6,
|
||||
borderRadius: 4,
|
||||
},
|
||||
}),
|
||||
|
||||
VerifyIdentityOverlayStyles: StyleSheet.create({
|
||||
content: {
|
||||
width: Dimensions.get('screen').width,
|
||||
@@ -1272,43 +1239,6 @@ export const PurpleTheme = {
|
||||
backgroundColor: Colors.White,
|
||||
},
|
||||
}),
|
||||
RevokeConfirmStyles: StyleSheet.create({
|
||||
viewContainer: {
|
||||
backgroundColor: 'rgba(0,0,0,.6)',
|
||||
width: Dimensions.get('screen').width,
|
||||
height: Dimensions.get('screen').height,
|
||||
position: 'absolute',
|
||||
top: 0,
|
||||
zIndex: 999999,
|
||||
},
|
||||
boxContainer: {
|
||||
backgroundColor: Colors.White,
|
||||
padding: 24,
|
||||
elevation: 6,
|
||||
borderRadius: 4,
|
||||
},
|
||||
}),
|
||||
OtpVerificationStyles: StyleSheet.create({
|
||||
modal: {
|
||||
width: Dimensions.get('screen').width,
|
||||
height: Dimensions.get('screen').height,
|
||||
},
|
||||
viewContainer: {
|
||||
backgroundColor: Colors.White,
|
||||
width: Dimensions.get('screen').width,
|
||||
height: Dimensions.get('screen').height,
|
||||
position: 'absolute',
|
||||
top: 0,
|
||||
zIndex: 9,
|
||||
padding: 32,
|
||||
},
|
||||
close: {
|
||||
position: 'absolute',
|
||||
top: 32,
|
||||
right: 0,
|
||||
color: Colors.Purple,
|
||||
},
|
||||
}),
|
||||
MessageStyles: StyleSheet.create({
|
||||
overlay: {
|
||||
elevation: 5,
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
"VC_RECEIVED_NOT_SAVED": "لم يتمكن من حفظ {{idType}} {{id}}.",
|
||||
"VC_DELETED": "تم حذف {{idType}} {{id}} بنجاح.",
|
||||
"VC_DOWNLOADED": "تم تنزيل {{idType}} {{id}}.",
|
||||
"VC_REVOKED": "تم إلغاء {{idType}} {{id}} من قِبل المصدر.",
|
||||
"VC_SHARED_WITH_VERIFICATION_CONSENT": "تم مشاركة {{idType}} {{id}} بالموافقة للتحقق من الحضور.",
|
||||
"VC_RECEIVED_WITH_PRESENCE_VERIFIED": "تم استلام {{idType}} {{id}} ونجح التحقق من الحضور.",
|
||||
"VC_RECEIVED_BUT_PRESENCE_VERIFICATION_FAILED": "تم استلام {{idType}} {{id}} ولكن فشل التحقق من الحضور.",
|
||||
@@ -95,9 +94,7 @@
|
||||
"offlineAuthenticationDisabled!": "التنشيط معلق لتسجيل الدخول عبر الإنترنت",
|
||||
"offlineAuthDisabledMessage": "انقر هنا لتمكين استخدام بيانات الاعتماد هذه للمصادقة عبر الإنترنت.",
|
||||
"viewActivityLog": "عرض سجل النشاط",
|
||||
"removeFromWallet": "إزالة من المحفظة",
|
||||
"revokeId": "إبطال الهوية",
|
||||
"revokeMessage": "إبطال المعرف الظاهري لملف التعريف هذا"
|
||||
"removeFromWallet": "إزالة من المحفظة"
|
||||
},
|
||||
"WalletBinding": {
|
||||
"inProgress": "في تَقَدم",
|
||||
@@ -399,22 +396,7 @@
|
||||
},
|
||||
"ViewVcModal": {
|
||||
"title": "تفاصيل الهوية",
|
||||
"inProgress": "في تَقَدم",
|
||||
"cancel": "يلغي",
|
||||
"lock": "قفل",
|
||||
"unlock": "الغاء القفل",
|
||||
"rename": "إعادة تسمية",
|
||||
"delete": "يمسح",
|
||||
"revoke": "سحب او إبطال",
|
||||
"revoking": "تحتوي محفظتك على بيانات اعتماد مع VID {{vid}}. سيؤدي إبطال هذا إلى حذفه تلقائيًا من المحفظة. هل انت متأكد انك تريد المتابعة؟",
|
||||
"requestingOtp": "جارٍ طلب OTP ...",
|
||||
"activated": "يتم تمكين بيانات الاعتماد للمصادقة عبر الإنترنت.",
|
||||
"redirecting": "إعادة توجيه...",
|
||||
"success": {
|
||||
"unlocked": "تم إلغاء قفل بطاقة بنجاح",
|
||||
"locked": "تم قفل بطاقة بنجاح",
|
||||
"revoked": "تم إبطال VID {{vid}}. ستتم إزالة أي بيانات اعتماد تحتوي على نفس الشيء تلقائيًا من المحفظة"
|
||||
}
|
||||
"inProgress": "في تَقَدم"
|
||||
},
|
||||
"MainLayout": {
|
||||
"home": "المنزل",
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
"VC_RECEIVED_NOT_SAVED": "Couldn't save {{idType}} {{id}}.",
|
||||
"VC_DELETED": "{{idType}} {{id}} is deleted successfully.",
|
||||
"VC_DOWNLOADED": "{{idType}} {{id}} is downloaded.",
|
||||
"VC_REVOKED": "{{idType}} {{id}} is revoked by the issuer.",
|
||||
"VC_SHARED_WITH_VERIFICATION_CONSENT": "Shared {{idType}} {{id}} with consent for presence verification.",
|
||||
"VC_RECEIVED_WITH_PRESENCE_VERIFIED": "Received {{idType}} {{id}} and presence verification is successful.",
|
||||
"VC_RECEIVED_BUT_PRESENCE_VERIFICATION_FAILED": "Received {{idType}} {{id}} and presence verification failed.",
|
||||
@@ -96,9 +95,7 @@
|
||||
"offlineAuthenticationDisabled!": "Activation pending for online login",
|
||||
"offlineAuthDisabledMessage": "Click here to enable this credentials to be used for online authentication.",
|
||||
"viewActivityLog": "View Activity Log",
|
||||
"removeFromWallet": "Remove from Wallet",
|
||||
"revokeId": "Revoke ID",
|
||||
"revokeMessage": "Revoke the virtual ID for this profile"
|
||||
"removeFromWallet": "Remove from Wallet"
|
||||
},
|
||||
"WalletBinding": {
|
||||
"inProgress": "In progress",
|
||||
@@ -401,22 +398,7 @@
|
||||
},
|
||||
"ViewVcModal": {
|
||||
"title": "ID Details",
|
||||
"inProgress": "In Progress",
|
||||
"cancel": "Cancel",
|
||||
"lock": "Lock",
|
||||
"unlock": "Unlock",
|
||||
"rename": "Rename",
|
||||
"delete": "Delete",
|
||||
"revoke": "Revoke",
|
||||
"revoking": "Your wallet contains a credential with VID {{vid}}. Revoking this will automatically remove the same from the wallet. Are you sure you want to proceed?",
|
||||
"requestingOtp": "Requesting OTP...",
|
||||
"activated": "Credentials are enabled for online authentication.",
|
||||
"redirecting": "Redirecting...",
|
||||
"success": {
|
||||
"unlocked": "Card successfully unlocked",
|
||||
"locked": "Card successfully locked",
|
||||
"revoked": "VID {{vid}} has been revoked. Any credential containing the same will be removed automatically from the wallet"
|
||||
}
|
||||
"inProgress": "In Progress"
|
||||
},
|
||||
"MainLayout": {
|
||||
"home": "Home",
|
||||
@@ -863,4 +845,4 @@
|
||||
"description": "Please use fingerprint to unlock the app"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
"VC_RECEIVED_NOT_SAVED": "Hindi ma-save ang {{idType}} {{id}}.",
|
||||
"VC_DELETED": "Matagumpay na natanggal ang {{idType}} {{id}}.",
|
||||
"VC_DOWNLOADED": "Na-download ang {{idType}} {{id}}.",
|
||||
"VC_REVOKED": "Ang {{idType}} {{id}} ay binawi ng nagbigay.",
|
||||
"VC_SHARED_WITH_VERIFICATION_CONSENT": "Ibinahagi ang {{idType}} {{id}} na may pahintulot para sa pag-verify ng presensya.",
|
||||
"VC_RECEIVED_WITH_PRESENCE_VERIFIED": "Natanggap ang {{idType}} {{id}} at matagumpay ang pag-verify ng presensya.",
|
||||
"VC_RECEIVED_BUT_PRESENCE_VERIFICATION_FAILED": "Natanggap ang {{idType}} {{id}} at nabigo ang pag-verify ng presensya.",
|
||||
@@ -95,9 +94,7 @@
|
||||
"offlineAuthenticationDisabled!": "Nakabinbin ang pag-activate para sa online na pag-login",
|
||||
"offlineAuthDisabledMessage": "Mag-click dito upang paganahin ang mga kredensyal na ito na magamit para sa online na pagpapatotoo.",
|
||||
"viewActivityLog": "Tingnan ang log ng aktibidad",
|
||||
"removeFromWallet": "Alisin sa wallet",
|
||||
"revokeId": "Bawiin ang ID",
|
||||
"revokeMessage": "Bawiin ang virtual ID para sa profile na ito"
|
||||
"removeFromWallet": "Alisin sa wallet"
|
||||
},
|
||||
"WalletBinding": {
|
||||
"inProgress": "Isinasagawa",
|
||||
@@ -399,22 +396,7 @@
|
||||
},
|
||||
"ViewVcModal": {
|
||||
"title": "Mga Detalye ng ID",
|
||||
"inProgress": "Isinasagawa",
|
||||
"cancel": "Kanselahin",
|
||||
"lock": "Lock",
|
||||
"unlock": "I-unlock",
|
||||
"rename": "Palitan ang pangalan",
|
||||
"delete": "Tanggalin",
|
||||
"revoke": "Bawiin",
|
||||
"revoking": "Ang iyong wallet ay naglalaman ng kredensyal na may VID {{vid}}. Ang pagbawi nito ay awtomatikong mag-aalis ng pareho sa wallet. Sigurado ka bang gusto mong magpatuloy?",
|
||||
"requestingOtp": "Humihiling ng OTP...",
|
||||
"activated": "Ang mga kredensyal ay pinagana para sa online na pagpapatotoo.",
|
||||
"redirecting": "Nire-redirect...",
|
||||
"success": {
|
||||
"unlocked": "Matagumpay na na-unlock ang card.",
|
||||
"locked": "Matagumpay na na-lock ang card.",
|
||||
"revoked": "Ang VID {{vid}} ay binawi. Awtomatikong aalisin sa wallet ang anumang kredensyal na naglalaman ng pareho"
|
||||
}
|
||||
"inProgress": "Isinasagawa"
|
||||
},
|
||||
"MainLayout": {
|
||||
"home": "Bahay",
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
"VC_RECEIVED_NOT_SAVED": "{{idType}} {{id}} को सहेजा नहीं जा सका।",
|
||||
"VC_DELETED": "{{idType}} {{id}} को सफलतापूर्वक हटा दिया गया।",
|
||||
"VC_DOWNLOADED": "{{idType}} {{id}} डाउनलोड हो गया है।",
|
||||
"VC_REVOKED": "{{idType}} {{id}} को जारीकर्ता द्वारा रद्द कर दिया गया है।",
|
||||
"VC_SHARED_WITH_VERIFICATION_CONSENT": "उपस्थिति सत्यापन के लिए सहमति के साथ {{idType}} {{id}} साझा किया गया।",
|
||||
"VC_RECEIVED_WITH_PRESENCE_VERIFIED": "{{idType}} {{id}} प्राप्त किया गया और उपस्थिति सत्यापन सफल रहा।",
|
||||
"VC_RECEIVED_BUT_PRESENCE_VERIFICATION_FAILED": "{{idType}} {{id}} प्राप्त हुआ लेकिन उपस्थिति सत्यापन विफल रहा।",
|
||||
@@ -92,9 +91,7 @@
|
||||
"offlineAuthenticationDisabled!": "ऑनलाइन लॉगिन के लिए सक्रियण लंबित है",
|
||||
"offlineAuthDisabledMessage": "ऑनलाइन प्रमाणीकरण के लिए इस क्रेडेंशियल का उपयोग सक्षम करने के लिए यहां क्लिक करें।",
|
||||
"viewActivityLog": "गतिविधि लॉग देखें",
|
||||
"removeFromWallet": "वॉलेट से हटाए",
|
||||
"revokeId": "आईडी निरस्त करें",
|
||||
"revokeMessage": "इस प्रोफ़ाइल के लिए वर्चुअल आईडी निरस्त करें"
|
||||
"removeFromWallet": "वॉलेट से हटाए"
|
||||
},
|
||||
"WalletBinding": {
|
||||
"inProgress": "चालू",
|
||||
@@ -397,22 +394,7 @@
|
||||
},
|
||||
"ViewVcModal": {
|
||||
"title": "आईडी विवरण",
|
||||
"inProgress": "चालू",
|
||||
"cancel": "रद्द करना",
|
||||
"lock": "ताला",
|
||||
"unlock": "अनलॉक",
|
||||
"rename": "नाम बदलें",
|
||||
"delete": "मिटाना",
|
||||
"revoke": "रद्द करना",
|
||||
"revoking": "आपके वॉलेट में VID {{vid}} के साथ एक क्रेडेंशियल है। इसे रद्द करने से यह अपने आप वॉलेट से हट जाएगा। क्या आप सुनिश्चित रूप से आगे बढ़ना चाहते हैं?",
|
||||
"requestingOtp": "ओटीपी का अनुरोध...",
|
||||
"activated": "ऑनलाइन प्रमाणीकरण के लिए क्रेडेंशियल सक्षम हैं।",
|
||||
"redirecting": "पुन: निर्देशित...",
|
||||
"success": {
|
||||
"unlocked": "कार्ड सफलतापूर्वक अनलॉक किया गया",
|
||||
"locked": "कार्ड सफलतापूर्वक अनलॉक किया गया",
|
||||
"revoked": "VID {{vid}} निरस्त कर दिया गया है। इसमें शामिल कोई भी क्रेडेंशियल वॉलेट से स्वचालित रूप से हटा दिया जाएगा"
|
||||
}
|
||||
"inProgress": "चालू"
|
||||
},
|
||||
"MainLayout": {
|
||||
"home": "होम",
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
"VC_RECEIVED_NOT_SAVED": "{{idType}} {{id}} ಉಳಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ.",
|
||||
"VC_DELETED": "{{idType}} {{id}} ಯಶಸ್ವಿಯಾಗಿ ಅಳಿಸಲಾಗಿದೆ.",
|
||||
"VC_DOWNLOADED": "{{idType}} {{id}} ಡೌನ್ಲೋಡ್ ಮಾಡಲಾಗಿದೆ.",
|
||||
"VC_REVOKED": "{{idType}} {{id}} ನೀಡುಗರಿಂದ ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ.",
|
||||
"VC_SHARED_WITH_VERIFICATION_CONSENT": "ಹಾಜರಿ ಪರಿಶೀಲನೆಗಾಗಿ {{idType}} {{id}} ಅನುಮತಿಯೊಂದಿಗೆ ಹಂಚಲಾಗಿದೆ.",
|
||||
"VC_RECEIVED_WITH_PRESENCE_VERIFIED": "{{idType}} {{id}} ಸ್ವೀಕರಿಸಲಾಗಿದೆ ಮತ್ತು ಹಾಜರಿ ಪರಿಶೀಲನೆ ಯಶಸ್ವಿಯಾಗಿದೆ.",
|
||||
"VC_RECEIVED_BUT_PRESENCE_VERIFICATION_FAILED": "{{idType}} {{id}} ಸ್ವೀಕರಿಸಲಾಗಿದೆ ಆದರೆ ಹಾಜರಿ ಪರಿಶೀಲನೆ ವಿಫಲವಾಗಿದೆ.",
|
||||
@@ -91,9 +90,7 @@
|
||||
"offlineAuthenticationDisabled!": "ಆನ್ಲೈನ್ ಲಾಗಿನ್ಗಾಗಿ ಸಕ್ರಿಯಗೊಳಿಸುವಿಕೆ ಬಾಕಿ ಉಳಿದಿದೆ",
|
||||
"offlineAuthDisabledMessage": "ಆನ್ಲೈನ್ ದೃಢೀಕರಣಕ್ಕಾಗಿ ಬಳಸಲು ಈ ರುಜುವಾತುಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ಇಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ.",
|
||||
"viewActivityLog": "ಚಟುವಟಿಕೆ ಲಾಗ್ ಅನ್ನು ವೀಕ್ಷಿಸಿ",
|
||||
"removeFromWallet": "ಕೈಚೀಲದಿಂದ ತೆಗೆದುಹಾಕಿ",
|
||||
"revokeId": "ಐಡಿ ಹಿಂತೆಗೆದುಕೊಳ್ಳಿ",
|
||||
"revokeMessage": "ಈ ಪ್ರೊಫೈಲ್ಗಾಗಿ ವರ್ಚುವಲ್ ಐಡಿಯನ್ನು ಹಿಂತೆಗೆದುಕೊಳ್ಳಿ"
|
||||
"removeFromWallet": "ಕೈಚೀಲದಿಂದ ತೆಗೆದುಹಾಕಿ"
|
||||
},
|
||||
"WalletBinding": {
|
||||
"inProgress": "ಪ್ರಗತಿಯಲ್ಲಿದೆ",
|
||||
@@ -395,22 +392,7 @@
|
||||
},
|
||||
"ViewVcModal": {
|
||||
"title": "ಐಡಿ ವಿವರಗಳು",
|
||||
"inProgress": "ಪ್ರಗತಿಯಲ್ಲಿದೆ",
|
||||
"cancel": "ರದ್ದುಮಾಡು",
|
||||
"lock": "ಲಾಕ್",
|
||||
"unlock": "ಅನ್ಲಾಕ್",
|
||||
"rename": "ಮರುಹೆಸರಿಸು",
|
||||
"delete": "ಅಳಿಸು",
|
||||
"revoke": "ಹಿಂತೆಗೆದುಕೊಳ್ಳಿ",
|
||||
"revoking": "ನಿಮ್ಮ ವ್ಯಾಲೆಟ್ VID{{vid}} ಜೊತೆಗೆ ರುಜುವಾತುಗಳನ್ನು ಒಳಗೊಂಡಿದೆ. ಇದನ್ನು ಹಿಂತೆಗೆದುಕೊಳ್ಳುವುದರಿಂದ ಅದನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ವ್ಯಾಲೆಟ್ನಿಂದ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ. ನೀವು ಮುಂದುವರೆಯಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?",
|
||||
"requestingOtp": "ಒಟಿಪಿಯನ್ನು ವಿನಂತಿಸಲಾಗುತ್ತಿದೆ...",
|
||||
"activated": "ಆನ್ಲೈನ್ ದೃಢೀಕರಣಕ್ಕಾಗಿ ರುಜುವಾತುಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ.",
|
||||
"redirecting": "ಮರುನಿರ್ದೇಶಿಸಲಾಗುತ್ತಿದೆ...",
|
||||
"success": {
|
||||
"unlocked": "ಕಾರ್ಡ್ ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಅನ್ಲಾಕ್ ಮಾಡಲಾಗಿದೆ",
|
||||
"locked": "ಕಾರ್ಡ್ ಯಶಸ್ವಿಯಾಗಿ ಲಾಕ್ ಆಗಿದೆ",
|
||||
"revoked": "VID{{vid}} ಅನ್ನು ಹಿಂಪಡೆಯಲಾಗಿದೆ. ಅದೇ ಒಳಗೊಂಡಿರುವ ಯಾವುದೇ ರುಜುವಾತುಗಳನ್ನು ವ್ಯಾಲೆಟ್ನಿಂದ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ"
|
||||
}
|
||||
"inProgress": "ಪ್ರಗತಿಯಲ್ಲಿದೆ"
|
||||
},
|
||||
"MainLayout": {
|
||||
"home": "ಮನೆ",
|
||||
|
||||
811
locales/spa.json
811
locales/spa.json
@@ -1,811 +0,0 @@
|
||||
{
|
||||
"ActivityLogText": {
|
||||
"VC_SHARED": "{{idType}} {{id}} se ha compartido correctamente.",
|
||||
"VC_RECEIVED": "Se ha recibido el {{idType}} {{id}}.",
|
||||
"VC_RECEIVED_NOT_SAVED": "No se ha podido guardar el {{idType}} {{id}}.",
|
||||
"VC_DELETED": "Se ha eliminado el {{idType}} {{id}} correctamente.",
|
||||
"VC_DOWNLOADED": "Se ha descargado el {{idType}} {{id}}.",
|
||||
"VC_REVOKED": "El emisor ha revocado el {{idType}} {{id}}.",
|
||||
"VC_SHARED_WITH_VERIFICATION_CONSENT": "Se ha compartido el {{idType}} {{id}} con consentimiento para la verificación de presencia.",
|
||||
"VC_RECEIVED_WITH_PRESENCE_VERIFIED": "Se ha recibido el {{idType}} {{id}} y la verificación de presencia se ha realizado correctamente.",
|
||||
"VC_RECEIVED_BUT_PRESENCE_VERIFICATION_FAILED": "Se ha recibido el {{idType}} {{id}} pero la verificación de presencia ha fallado.",
|
||||
"PRESENCE_VERIFIED_AND_VC_SHARED": "La verificación facial se ha realizado correctamente y se ha compartido el {{idType}} {{id}}.",
|
||||
"PRESENCE_VERIFICATION_FAILED": "La verificación facial ha fallado al intentar compartir el {{idType}} {{id}}.",
|
||||
"QRLOGIN_SUCCESFULL": "El inicio de sesión mediante QR con el {{idType}} {{id}} se ha realizado correctamente.",
|
||||
"WALLET_BINDING_SUCCESSFULL": "La activación del {{idType}} {{id}} se ha realizado correctamente.",
|
||||
"WALLET_BINDING_FAILURE": "La activación del {{idType}} {{id}} ha fallado.",
|
||||
"VC_REMOVED": "Se ha eliminado el {{idType}} {{id}} de la cartera.",
|
||||
"TAMPERED_VC_REMOVED": "Se ha eliminado el {{idType}} {{id}} de la cartera debido a manipulación."
|
||||
},
|
||||
"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": "Para ser reemplazado por 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 del teléfono 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": "Razón para compartir",
|
||||
"idType": "tipo de identificación",
|
||||
"id": "IDENTIFICACIÓN",
|
||||
"qrCodeHeader": "Código QR",
|
||||
"nationalCard": "Tarjeta Nacional",
|
||||
"uin": "UIN",
|
||||
"vid": "VID",
|
||||
"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": "Bueno",
|
||||
"credentialRegistry": "Registro de Credenciales",
|
||||
"errors": {
|
||||
"savingFailed": {
|
||||
"title": "No se pudo guardar la tarjeta",
|
||||
"message": "Algo salió mal al guardar la Tarjeta en la tienda."
|
||||
},
|
||||
"diskFullError": {
|
||||
"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",
|
||||
"no": "No"
|
||||
},
|
||||
"AuthScreen": {
|
||||
"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 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"
|
||||
},
|
||||
"HistoryScreen": {
|
||||
"noHistory": "Aún no hay historial disponible",
|
||||
"downloaded": "descargado",
|
||||
"shared": "compartido",
|
||||
"received": "recibió",
|
||||
"deleted": "eliminado"
|
||||
},
|
||||
"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",
|
||||
"aboutDetails": "Inji es una aplicación móvil que se puede utilizar como billetera digital para almacenar credenciales. ",
|
||||
"forMoreDetails": "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",
|
||||
"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"
|
||||
},
|
||||
"biometricsCancelled": {
|
||||
"title": "Quieres cancelar la descarga?",
|
||||
"message": "Se requiere confirmación biométrica para continuar descargando la tarjeta."
|
||||
},
|
||||
"generic": {
|
||||
"title": "¡Algo salió mal!",
|
||||
"message": "Estamos teniendo algunos problemas con su solicitud. "
|
||||
}
|
||||
}
|
||||
},
|
||||
"HelpScreen": {
|
||||
"header": "Ayuda",
|
||||
"here": " aquí. ",
|
||||
"whatIsaDigitalCredential?": "¿Qué es una credencial digital?",
|
||||
"detail-1": "Una credencial digital es la versión digital de su cédula de identidad física.",
|
||||
"whatCanWeDoWithDigitalCredential?": "¿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": "Las identificaciones se pueden descargar a INJI Mobile Wallet como credenciales verificables. Para saber cómo descargar VC con varios ID, lea ",
|
||||
"howToRemoveACardFromTheWallet?": "¿Cómo sacar una tarjeta de la billetera?",
|
||||
"detail-4a": "Puede hacer clic en... (menú de albóndigas) en una tarjeta en la página de inicio y elegir la opción Eliminar de la billetera para eliminar una tarjeta de la billetera. Para saber más, por favor lea",
|
||||
"detail-4b": "Tenga en cuenta que la misma tarjeta se puede descargar nuevamente.",
|
||||
"canIAddMultipleCards?": "¿Puedo 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.",
|
||||
"howToShareACard?": "¿Cómo compartir una tarjeta?",
|
||||
"detail-6": "Haga clic en el botón 'Compartir' y escanee el código QR del solicitante. ",
|
||||
"howToActivateACardForOnlineLogin?": "¿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. ",
|
||||
"howToViewActivityLogs?": "¿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.",
|
||||
"whatHappensWhenAndroidKeystoreBiometricIsChanged?": "¿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.",
|
||||
"whatIsAnId?": "¿Qué es una identificación?",
|
||||
"detail-10": "Un documento de identidad es cualquier documento que pueda acreditar la identidad de una persona. En el contexto de MOSIP, los identificadores son identificadores digitales alfanuméricos para identidades en el sistema. Si bien la identidad de una persona se representa como una colección de atributos biográficos y biométricos que pueden identificar de forma única a la persona, se hace referencia a la identidad mediante identificadores.",
|
||||
"whatAreTheDifferentTypesOfId?": "¿Cuáles son los diferentes tipos de identificación?",
|
||||
"detail-11": "En el contexto de MOSIP, diferentes ID son UIN, VI y AID. Leer más sobre ellos",
|
||||
"whereCanIFindTheseIds?": "¿Dónde puedo encontrar estas identificaciones?",
|
||||
"detail-12a": "Como parte del proceso de inscripción (registro), al registrar exitosamente la información demográfica y biométrica del residente, se le asigna una identificación de registro (AID). También se emite (imprime) al residente un comprobante de acuse de recibo que contiene los detalles capturados y la AID como prueba de registro.",
|
||||
"detail-12b": "Tras el procesamiento exitoso, se asigna un Número de identificación único (UIN) al residente y se le envía una notificación al número de teléfono y/o correo electrónico registrado.",
|
||||
"detail-12c": "VID/ID virtual es un identificador de alias configurado para uso único y no se puede vincular. Dado que se utilizan para transacciones de autenticación, dichos identificadores deben ser conocidos únicamente por el usuario o generarse con su participación.",
|
||||
"whyDoesMyVcSayActivationIsPending?": "¿Por qué mi VC dice que la activación está pendiente?",
|
||||
"detail-13": "Una vez que se descarga el VC en su billetera, aún no está vinculado a la identidad del usuario, por lo que su VC dice Activación pendiente. Vincular su VC a su billetera (con su contraseña o datos biométricos) es crucial para garantizar el más alto nivel de seguridad. Para activar su VC, siga los pasos",
|
||||
"whatDoYouMeanByActivatedForOnlineLogin?": "¿Qué quiere decir con Activado para iniciar sesión en línea?",
|
||||
"detail-14a": "1. Una vez que el VC se vincule exitosamente con la billetera, podrá ver que está activado para iniciar sesión en línea, lo que significa que este VC ahora se puede usar para el proceso de inicio de sesión QR. Para saber más sobre el inicio de sesión con código QR, lea",
|
||||
"detail-14b": "2. Las preguntas y respuestas deben ser legibles y comprensibles incluso cuando el usuario cambia el idioma en la aplicación INJI.",
|
||||
"whatIsAVerifiableCredential?": "¿Qué es una credencial verificable?",
|
||||
"detail-15": "Una credencial verificable es una pieza de información firmada digitalmente que representa una declaración hecha por el emisor sobre un tema y generalmente incluye detalles demográficos. Los capitalistas de riesgo son seguros y confiables en diversas interacciones en línea."
|
||||
},
|
||||
"AddVcModal": {
|
||||
"requestingCredential": "Solicitando credencial...",
|
||||
"errors": {
|
||||
"input": {
|
||||
"empty": "Por favor ingrese una identificación válida",
|
||||
"invalidFormat": "Por favor ingrese Válido {{idType}}"
|
||||
},
|
||||
"backend": {
|
||||
"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": "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": "Por favor ingrese una identificación válida",
|
||||
"invalidFormat": "Por favor ingrese AID válido"
|
||||
},
|
||||
"backend": {
|
||||
"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": "La AID ingresada no está disponible. ",
|
||||
"timeout": "Se acabó el tiempo"
|
||||
}
|
||||
}
|
||||
},
|
||||
"DownloadingVcModal": {
|
||||
"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": "Obtenga su UIN/VID",
|
||||
"applicationIdLabel": "Por favor ingrese su ID de aplicación",
|
||||
"enterApplicationId": "Ingrese el ID de la aplicación",
|
||||
"requestingOTP": "Solicitando OTP...",
|
||||
"toolTipTitle": "¿Lo que dije?",
|
||||
"toolTipDescription": "La ID de la aplicación (AID) se refiere al identificador único que se le otorga a un residente durante cualquier evento del ciclo de vida de la ID, como la emisión de una ID, la actualización de una ID o la recuperación de una ID perdida, en el centro de registro. ",
|
||||
"getUIN": "Obtener UIN/VID"
|
||||
},
|
||||
"IdInputModal": {
|
||||
"header": "Descarga tu DNI",
|
||||
"guideLabel": "Seleccione el tipo de ID e ingrese el UIN o VID proporcionado por MOSIP que desea descargar. ",
|
||||
"generateVc": "Generar tarjeta",
|
||||
"downloadID": "Descargar ID",
|
||||
"enterId": "Ingresar {{idType}}",
|
||||
"noUIN/VID": "¿No tienes UIN/VID?",
|
||||
"getItHere": "Consíguelo ahora usando tu AID.",
|
||||
"requestingOTP": "Solicitando OTP...",
|
||||
"toolTipTitle": "Qué es {{idType}}?",
|
||||
"toolTipUINDescription": "El Número de Identificación Único (UIN), como su nombre indica, es un número único asignado a un residente. ",
|
||||
"toolTipVIDDescription": "El VID/ID virtual es un identificador de alias que se puede utilizar para transacciones de autenticación. "
|
||||
},
|
||||
"OtpVerificationModal": {
|
||||
"title": "Verificación OTP",
|
||||
"otpSentMessage": "Hemos enviado una OTP de 6 dígitos a su número de móvil registrado: {{phone}} y dirección de correo electrónico: {{email}}",
|
||||
"resendTheCode": "Puede reenviar la OTP en ",
|
||||
"resendOtp": "Reenviar OTP",
|
||||
"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": {
|
||||
"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": "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 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": "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. "
|
||||
},
|
||||
"verificationFailed": {
|
||||
"title" : "¡Ocurrió un error!",
|
||||
"goBackButton": "Regresa",
|
||||
"technicalError": "Debido a un Error técnico, no pudimos descargar la tarjeta.",
|
||||
"networkError": "Debido a una conexión a Internet inestable, no pudimos descargar la tarjeta. Por favor revise su conexion a internet."
|
||||
}
|
||||
}
|
||||
},
|
||||
"OnboardingOverlay": {
|
||||
"stepOneTitle": "¡Bienvenido!",
|
||||
"stepOneText": "Lleva contigo tu credencial digital en todo momento. ",
|
||||
"stepTwoTitle": "Compartir de forma segura",
|
||||
"stepTwoText": "Comparta sus tarjetas de forma segura y sin complicaciones y aproveche varios servicios.",
|
||||
"stepThreeTitle": "Monedero digital confiable",
|
||||
"stepThreeText": "Almacene y lleve todas sus tarjetas importantes en una única billetera de confianza.",
|
||||
"stepFourTitle": "Acceso rapido",
|
||||
"stepFourText": "Autentíquese fácilmente utilizando la credencial digital almacenada.",
|
||||
"stepFiveTitle": "Los datos de copia de seguridad",
|
||||
"stepFiveText": "Proteja sus datos con facilidad utilizando nuestra copia de seguridad",
|
||||
"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": "Cerrar",
|
||||
"unlock": "desbloquear",
|
||||
"rename": "Rebautizar",
|
||||
"delete": "Borrar",
|
||||
"revoke": "Revocar",
|
||||
"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...",
|
||||
"success": {
|
||||
"unlocked": "Tarjeta desbloqueada exitosamente",
|
||||
"locked": "Tarjeta bloqueada exitosamente",
|
||||
"revoked": "VID {{vid}} ha sido revocado. "
|
||||
}
|
||||
},
|
||||
"MainLayout": {
|
||||
"home": "Hogar",
|
||||
"share": "Compartir",
|
||||
"history": "Historia",
|
||||
"request": "Pedido",
|
||||
"settings": "Ajustes"
|
||||
},
|
||||
"PasscodeScreen": {
|
||||
"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": "Iniciar sesión",
|
||||
"alignQr": "Alinee el código QR dentro del marco para escanearlo",
|
||||
"confirmation": "Confirmación",
|
||||
"checkDomain": "Además, busque un icono de candado en la barra de direcciones.",
|
||||
"domainHead": "https://",
|
||||
"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": "Consentir",
|
||||
"loading": "Cargando...",
|
||||
"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 ",
|
||||
"ok": "DE ACUERDO",
|
||||
"allow": "Permitir",
|
||||
"cancel": "Cancelar",
|
||||
"essentialClaims": "Reclamaciones importantes",
|
||||
"voluntaryClaims": "Reclamaciones voluntarias",
|
||||
"required": "Es necesario"
|
||||
},
|
||||
"ReceiveVcScreen": {
|
||||
"header": "Detalles de tarjeta",
|
||||
"save": "guardar tarjeta",
|
||||
"verifyAndSave": "Verificar y guardar",
|
||||
"reject": "Rechazar",
|
||||
"discard": "Desechar",
|
||||
"goToReceivedVCTab": "Ver tarjeta recibida",
|
||||
"saving": "La tarjeta se está guardando",
|
||||
"errors": {
|
||||
"savingFailed": {
|
||||
"title": "¡No se pudo guardar la tarjeta!",
|
||||
"message": "Debido a un error técnico, no pudimos guardar la tarjeta. Solicite al remitente que realice la transferencia nuevamente."
|
||||
}
|
||||
}
|
||||
},
|
||||
"RequestScreen": {
|
||||
"receiveCard": "Recibir tarjeta",
|
||||
"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": "Pedido",
|
||||
"errors": {
|
||||
"nearbyDevicesPermissionDenied": {
|
||||
"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 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 recibió correctamente de Wallet"
|
||||
},
|
||||
"rejected": {
|
||||
"title": "Aviso",
|
||||
"message": "Descartaste la tarjeta de Wallet"
|
||||
},
|
||||
"disconnected": {
|
||||
"title": "La conexión falló",
|
||||
"message": "La conexión fue interrumpida. "
|
||||
},
|
||||
"waitingConnection": "Esperando la conexión...",
|
||||
"exchangingDeviceInfo": {
|
||||
"message": "Intercambiando 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": "Conéctese a Internet para habilitar el modo de compartir en línea"
|
||||
},
|
||||
"bleError": {
|
||||
"TVW_CON_002": {
|
||||
"title": "¡La conexión falló!",
|
||||
"message": "La conexión fue interrumpida. Inténtalo de nuevo."
|
||||
},
|
||||
"TVW_CON_003": {
|
||||
"title": "¡La conexión falló!",
|
||||
"message": "La conexión fue interrumpida. Asegúrese de que los dispositivos Bluetooth estén en modo reconocible y vuelva a intentarlo."
|
||||
},
|
||||
"TVW_REP_001": {
|
||||
"title": "¡Respuesta corrupta recibida!",
|
||||
"message": "Los datos recibidos de la billetera están dañados y no se pueden procesar. Solicite al remitente que realice la transferencia nuevamente."
|
||||
},
|
||||
"TVV_CON_001": {
|
||||
"title": "¡La conexión falló!",
|
||||
"message": "Los datos recibidos de la billetera están dañados y no se pueden procesar. Solicite al remitente que realice la transfeNo se puede establecer una conexión óptima con el remitente. Inténtalo de nuevo.rencia nuevamente."
|
||||
},
|
||||
"TVV_TRA_001": {
|
||||
"title": "¡Respuesta corrupta recibida!",
|
||||
"message": "Los datos recibidos de la billetera están dañados y no se pueden procesar. Solicite al remitente que realice la transferencia nuevamente."
|
||||
},
|
||||
"TVV_TRA_002": {
|
||||
"title": "¡Respuesta corrupta recibida!",
|
||||
"message": "Los datos recibidos de la billetera están dañados y no se pueden procesar. Solicite al remitente que realice la transferencia nuevamente."
|
||||
},
|
||||
"TUV_UNK_001": {
|
||||
"title": "¡Ocurrió un error!",
|
||||
"message": "Debido a un error técnico, no pudimos recibir la tarjeta. Inténtalo de nuevo."
|
||||
},
|
||||
"TVW_UNK_001": {
|
||||
"title": "¡La conexión falló!",
|
||||
"message": "La conexión fue interrumpida. Inténtalo de nuevo."
|
||||
},
|
||||
"TVW_UNK_002": {
|
||||
"title": "¡La conexión falló!",
|
||||
"message": "La conexión fue interrumpida. Inténtalo de nuevo."
|
||||
},
|
||||
"TVW_UNK_003": {
|
||||
"title": "¡La conexión falló!",
|
||||
"message": "La conexión fue interrumpida. Inténtalo de nuevo."
|
||||
},
|
||||
"TVV_UNK_001": {
|
||||
"title": "¡Ocurrió un error!",
|
||||
"message": "Se produjo un error inesperado al procesar los datos recibidos. Verifique su conexión y solicite al remitente que reenvíe la tarjeta."
|
||||
},
|
||||
"TVV_UNK_002": {
|
||||
"title": "¡Ocurrió un error!",
|
||||
"message": "Se produjo un error inesperado al procesar los datos recibidos. Verifique su conexión y solicite al remitente que reenvíe la tarjeta."
|
||||
},
|
||||
"TVV_UNK_003": {
|
||||
"title": "¡Ocurrió un error!",
|
||||
"message": "Se produjo un error inesperado al procesar los datos recibidos. Verifique su conexión y solicite al remitente que reenvíe la tarjeta."
|
||||
}
|
||||
}
|
||||
},
|
||||
"online": "En línea",
|
||||
"offline": "Desconectado",
|
||||
"gotoSettings": "Ir a la configuración"
|
||||
},
|
||||
"ScanScreen": {
|
||||
"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": "Servicio de localización activado"
|
||||
},
|
||||
"locationDenied": {
|
||||
"message": "Se requiere permiso de ubicación para compartir la tarjeta",
|
||||
"button": "Permitir el acceso a la ubicación"
|
||||
},
|
||||
"nearbyDevicesPermissionDenied": {
|
||||
"message": "Se requiere permiso de dispositivos cercanos para poder compartir la tarjeta",
|
||||
"button": "Permitir permiso"
|
||||
},
|
||||
"storageLimitReached": {
|
||||
"title": "Datos de aplicación insuficientes",
|
||||
"message": "No puedes compartir tarjetas ya que Appdata está llena. "
|
||||
}
|
||||
},
|
||||
"status": {
|
||||
"inProgress": {
|
||||
"title": "En curso",
|
||||
"hint": "Espere mientras establecemos la conexión."
|
||||
},
|
||||
"establishingConnection": "Estableciendo conexión",
|
||||
"connectionInProgress": "Conexión en progreso",
|
||||
"connectingTimeout": "Está tardando un poco en establecer la conexión. ¿Está el otro dispositivo abierto para la conexión?",
|
||||
"stayOnTheScreen": "Quédate en la pantalla",
|
||||
"retry": "Rever",
|
||||
"exchangingDeviceInfo": "Intercambiando información del dispositivo...",
|
||||
"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 que el receptor guarde o descarte su Tarjeta",
|
||||
"sharing": {
|
||||
"title": "Compartir en progreso",
|
||||
"hint": "Espere mientras compartimos la tarjeta elegida.",
|
||||
"timeoutHint": "El intercambio se retrasa, posiblemente debido a un problema de conexión."
|
||||
},
|
||||
"accepted": {
|
||||
"title": "¡Éxito!",
|
||||
"message": "Su identificación se ha compartido correctamente.",
|
||||
"home": "Hogar",
|
||||
"history": "Historia"
|
||||
},
|
||||
"rejected": {
|
||||
"title": "¡Ocurrió un error!",
|
||||
"message": "Debido a un error técnico, no pudimos compartir la tarjeta con la persona que confía. Por favor comparte de nuevo."
|
||||
},
|
||||
"bleError": {
|
||||
"retry": "Rever",
|
||||
"home": "Hogar",
|
||||
"TVW_CON_001": {
|
||||
"title": "¡La conexión falló!",
|
||||
"message": "Código QR no válido escaneado. Intente escanear nuevamente el código QR válido de la parte de confianza."
|
||||
},
|
||||
"TVW_CON_002": {
|
||||
"title": "¡La conexión falló!",
|
||||
"message": "Wallet no puede establecer una conexión óptima con el verificador. Inténtalo de nuevo."
|
||||
},
|
||||
"TVW_CON_003": {
|
||||
"title": "¡Error en el descubrimiento del servicio!",
|
||||
"message": "Lo sentimos, pero no pudimos descubrir una conexión bluetooth incluso después de varios intentos. Asegúrese de que los dispositivos Bluetooth estén en modo detectable y vuelva a intentarlo."
|
||||
},
|
||||
"TVW_REP_001": {
|
||||
"title": "¡Ocurrió un error!",
|
||||
"message": "Debido a un error técnico, no podemos transferir el archivo. Inténtalo de nuevo."
|
||||
},
|
||||
"TVV_CON_001": {
|
||||
"title": "¡La conexión falló!",
|
||||
"message": "Wallet no puede establecer una conexión óptima con el verificador. Inténtalo de nuevo."
|
||||
},
|
||||
"TVV_TRA_001": {
|
||||
"title": "¡Ocurrió un error!",
|
||||
"message": "Algo salió mal al transferir la tarjeta. Inténtalo de nuevo."
|
||||
},
|
||||
"TVV_TRA_002": {
|
||||
"title": "¡Ocurrió un error!",
|
||||
"message": "Algo salió mal al transferir la tarjeta. Inténtalo de nuevo."
|
||||
},
|
||||
"TUV_UNK_001": {
|
||||
"title": "¡Ocurrió un error!",
|
||||
"message": "Debido a un error técnico, no pudimos compartir la tarjeta con la persona que confía. Inténtalo de nuevo."
|
||||
},
|
||||
"TVW_UNK_001": {
|
||||
"title": "¡Ocurrió un error!",
|
||||
"message": "Debido a un error técnico, no pudimos compartir la tarjeta con la persona que confía. Inténtalo de nuevo."
|
||||
},
|
||||
"TVW_UNK_002": {
|
||||
"title": "¡Ocurrió un error!",
|
||||
"message": "Debido a un error técnico, no pudimos compartir la tarjeta con la persona que confía. Inténtalo de nuevo."
|
||||
},
|
||||
"TVW_UNK_003": {
|
||||
"title": "¡Ocurrió un error!",
|
||||
"message": "Debido a un error técnico, no pudimos compartir la tarjeta con la persona que confía. Inténtalo de nuevo."
|
||||
},
|
||||
"TVV_UNK_001": {
|
||||
"title": "¡Ocurrió un error!",
|
||||
"message": "Algo salió mal al transferir la tarjeta. Inténtalo de nuevo."
|
||||
},
|
||||
"TVV_UNK_002": {
|
||||
"title": "¡Ocurrió un error!",
|
||||
"message": "Algo salió mal al transferir la tarjeta. Inténtalo de nuevo."
|
||||
},
|
||||
"TVV_UNK_003": {
|
||||
"title": "¡Ocurrió un error!",
|
||||
"message": "Algo salió mal al transferir la tarjeta. Inténtalo de nuevo."
|
||||
}
|
||||
}
|
||||
},
|
||||
"postFaceCapture": {
|
||||
"captureSuccessMessage": "¡La verificación facial fue exitosa! Se inicia el intercambio de credenciales.",
|
||||
"captureFailureTitle": "¡Falló la verificación facial!",
|
||||
"captureFailureMessage": "Asegúrese de que su cara sea claramente visible e intente tomarse una selfie nuevamente."
|
||||
}
|
||||
},
|
||||
"SelectVcOverlay": {
|
||||
"header": "Compartir tarjeta",
|
||||
"chooseVc": "Elige la Tarjeta con la que te gustaría compartir",
|
||||
"share": "Compartir",
|
||||
"verifyAndShare": "Verificar identidad y compartir"
|
||||
},
|
||||
"SendVcScreen": {
|
||||
"reasonForSharing": "Razón para compartir (opcional)",
|
||||
"acceptRequest": "Compartir",
|
||||
"acceptRequestAndVerify": "Compartir con selfie",
|
||||
"reject": "Rechazar",
|
||||
"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..."
|
||||
},
|
||||
"errors": {
|
||||
"invalidIdentity": {
|
||||
"title": "No se puede verificar la identidad",
|
||||
"message": "No se reconoce el rostro. Por favor, inténtalo de nuevo.",
|
||||
"messageNoRetry": "No se reconoce el rostro."
|
||||
}
|
||||
},
|
||||
"ignore": "Ignorar"
|
||||
},
|
||||
"DataBackupScreen": {
|
||||
"dataBackupAndRestore": "Copia de seguridad de restauracion",
|
||||
"new": "Nueva",
|
||||
"loadingTitle": "Cargando configuración",
|
||||
"loadingSubtitle": "Cargando...",
|
||||
"errors": {
|
||||
"permissionDenied": {
|
||||
"title": "Permisos requeridos",
|
||||
"message": "Para continuar con la copia de seguridad de los datos, permita el acceso a su {{driveName}}. Toque \"Permitir acceso\" para finalizar la configuración o toque \"Ahora no\" para regresar a Configuración.",
|
||||
"actions": {
|
||||
"allowAccess": "Permitir el acceso",
|
||||
"notNow": "Ahora no"
|
||||
}
|
||||
},
|
||||
"noInternetConnection": {
|
||||
"title": "Sin conexión a Internet",
|
||||
"message": "Por favor verifique su conexión y vuelva a intentarlo"
|
||||
}
|
||||
}
|
||||
},
|
||||
"BackupAndRestoreBanner": {
|
||||
"backupInProgress": "La copia de seguridad de datos está en progreso. Por favor no cierre la aplicación.",
|
||||
"backupSuccessful": "¡Su copia de seguridad fue exitosa!",
|
||||
"backupFailure": {
|
||||
"networkError": "Debido a una conexión a Internet inestable, no pudimos realizar una copia de seguridad de los datos. Por favor, inténtelo de nuevo más tarde.",
|
||||
"technicalError": "Debido a un error técnico, no pudimos realizar una copia de seguridad de los datos. Por favor, inténtelo de nuevo más tarde.",
|
||||
"iCloudSignInError": "Lamentamos que no se haya podido completar la copia de seguridad de los datos. ",
|
||||
"noDataForBackup": "Lo sentimos, pero no hay datos disponibles para realizar una copia de seguridad en este momento.",
|
||||
"storageLimitReached": "No podemos completar el proceso de copia de seguridad debido a que no hay suficiente espacio de almacenamiento en su dispositivo. Libere espacio eliminando archivos o aplicaciones innecesarios y vuelva a intentarlo."
|
||||
},
|
||||
"restoreInProgress": "La restauración de datos está en curso. Por favor no cierre la aplicación.",
|
||||
"restoreSuccessful": "Su copia de seguridad ha sido restaurada exitosamente",
|
||||
"restoreFailure": {
|
||||
"networkError": "Debido a una conexión a Internet inestable, no pudimos realizar la restauración de datos. Por favor, inténtelo de nuevo más tarde.",
|
||||
"technicalError": "Debido a un error técnico, no pudimos realizar la restauración de datos. Por favor, inténtelo de nuevo más tarde.",
|
||||
"noBackupFile": "El archivo de copia de seguridad no existe"
|
||||
}
|
||||
},
|
||||
"AccountSelection": {
|
||||
"backupProcessInfo": "Estás a solo unos pasos de hacer una copia de seguridad de tus datos",
|
||||
"cloudInfo": "Para iniciar la copia de seguridad de los datos, toque el botón `Continuar` para vincular su {{driveName}} con Inji.",
|
||||
"googleDriveTitle": "Google Drive",
|
||||
"loadingSubtitle": "Cargando...",
|
||||
"proceed": "Proceder",
|
||||
"goBack": "Regresa",
|
||||
"associatedAccount": "Cuenta asociada"
|
||||
},
|
||||
"BackupAndRestore": {
|
||||
"title": "Copia de seguridad y restauración",
|
||||
"backupProgressState": "Copia de seguridad en progreso...",
|
||||
"lastBackupDetails": "Detalles de la última copia de seguridad",
|
||||
"backupInProgress": "Aún puedes usar la aplicación mientras se realiza la copia de seguridad de los datos. Cerrar la aplicación finalizará el proceso de copia de seguridad de los datos.",
|
||||
"noBackup": "Haga una copia de seguridad de sus datos en {{driveName}}. Puede restaurarlos cuando reinstale INJI.",
|
||||
"storage": "La copia de seguridad se almacenará en Google Drive asociado a su cuenta de Gmail elegida.",
|
||||
"backup": "Copia de seguridad",
|
||||
"size": "Tamaño: ",
|
||||
"restore": "Restaurar",
|
||||
"restoreInProgress": "Estamos restaurando sus datos, no cierre la aplicación. Puede continuar usando la aplicación.",
|
||||
"restoreInfo": "Restaura tus datos desde {{driveName}}",
|
||||
"driveSettings": "Configuración de Google Drive",
|
||||
"successBanner": "¡Su copia de seguridad fue exitosa!",
|
||||
"backupFailed": "Copia de seguridad fallida",
|
||||
"ok": "bien"
|
||||
},
|
||||
"SetupLanguage": {
|
||||
"header": "Elige lengua",
|
||||
"description": "Selecciona tu idioma preferido",
|
||||
"save": "Guardar preferencia"
|
||||
},
|
||||
"common": {
|
||||
"cancel": "Cancelar",
|
||||
"accept": "Aceptar",
|
||||
"save": "Ahorrar",
|
||||
"ok": "De acuerdo",
|
||||
"dismiss": "Despedir",
|
||||
"editLabel": "Editar {{label}}",
|
||||
"tryAgain": "Intentar otra vez",
|
||||
"ignore": "Ignorar",
|
||||
"goBack": "Regresa",
|
||||
"camera": {
|
||||
"errors": {
|
||||
"missingPermission": "Esta aplicación utiliza la cámara para escanear el código QR de otro dispositivo."
|
||||
},
|
||||
"allowAccess": "Permitir el acceso a la cámara"
|
||||
},
|
||||
"errors": {
|
||||
"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."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,6 @@
|
||||
"VC_RECEIVED_NOT_SAVED": "{{idType}} {{id}} ஐச் சேமிக்க முடியவில்லை.",
|
||||
"VC_DELETED": "{{idType}} {{id}} வெற்றிகரமாக நீக்கப்பட்டது.",
|
||||
"VC_DOWNLOADED": "{{idType}} {{id}} பதிவிறக்கம் செய்யப்பட்டது.",
|
||||
"VC_REVOKED": "{{idType}} {{id}} வழங்குநரால் ரத்து செய்யப்பட்டது.",
|
||||
"VC_SHARED_WITH_VERIFICATION_CONSENT": " {{idType}} {{id}} ஐ சரிபார்ப்புக்காக அனுமதியுடன் பகிரப்பட்டது.",
|
||||
"VC_RECEIVED_WITH_PRESENCE_VERIFIED": "{{idType}} {{id}} பெறப்பட்டது மற்றும் இருப்புச் சரிபார்ப்பு வெற்றிகரமானது.",
|
||||
"VC_RECEIVED_BUT_PRESENCE_VERIFICATION_FAILED": "{{idType}} {{id}} பெறப்பட்டது, ஆனால் இருப்புச் சரிபார்ப்பு தோல்வியடைந்தது.",
|
||||
@@ -91,9 +90,7 @@
|
||||
"offlineAuthenticationDisabled!": "ஆன்லைன் உள்நுழைவுக்கான செயல்படுத்தல் நிலுவையில் உள்ளது",
|
||||
"offlineAuthDisabledMessage": "இந்த நற்சான்றிதழ்களை ஆன்லைன் அங்கீகாரத்திற்காகப் பயன்படுத்த இங்கே கிளிக் செய்யவும்.",
|
||||
"viewActivityLog": "செயல்பாட்டு பதிவைக் காண்க",
|
||||
"removeFromWallet": "பணப்பையிலிருந்து அகற்று",
|
||||
"revokeId": "ஐடியைத் திரும்பப் பெறு",
|
||||
"revokeMessage": "இந்தச் சுயவிவரத்திற்கான விர்ச்சுவல் ஐடியைத் திரும்பப் பெறவும்"
|
||||
"removeFromWallet": "பணப்பையிலிருந்து அகற்று"
|
||||
},
|
||||
"WalletBinding": {
|
||||
"inProgress": "செயல்பாட்டில் உள்ளது",
|
||||
@@ -395,22 +392,7 @@
|
||||
},
|
||||
"ViewVcModal": {
|
||||
"title": "அடையாள விவரங்கள்",
|
||||
"inProgress": "செயல்பாட்டில் உள்ளது",
|
||||
"cancel": "ரத்து செய்",
|
||||
"lock": "பூட்டு",
|
||||
"unlock": "திறத்தல்",
|
||||
"rename": "மறுபெயரிடு",
|
||||
"delete": "நீக்கு",
|
||||
"revoke": "திரும்பப்பெறு",
|
||||
"revoking": "உங்கள் பணப்பையில் VID {{vid}} உடன் நற்சான்றிதழ் உள்ளது. இதைத் திரும்பப் பெறுவது வாலட்டில் இருந்து தானாகவே அகற்றப்படும்.நீங்கள் நிச்சயமாக தொடர விரும்புகிறீர்களா?",
|
||||
"requestingOtp": "ஓடிபியைக் கோருகிறது...",
|
||||
"activated": "ஆன்லைன் அங்கீகாரத்திற்காக நற்சான்றிதழ்கள் இயக்கப்பட்டுள்ளன.",
|
||||
"redirecting": "வழிமாற்று...",
|
||||
"success": {
|
||||
"unlocked": "அட்டை வெற்றிகரமாக திறக்கப்பட்டது",
|
||||
"locked": "அட்டை வெற்றிகரமாக பூட்டப்பட்டது",
|
||||
"revoked": "VID {{vid}} has been revoked. அதைக் கொண்ட எந்த நற்சான்றிதழும் பணப்பையிலிருந்து தானாகவே அகற்றப்படும்"
|
||||
}
|
||||
"inProgress": "செயல்பாட்டில் உள்ளது"
|
||||
},
|
||||
"MainLayout": {
|
||||
"home": "வீடு",
|
||||
|
||||
@@ -71,11 +71,10 @@ const model = createModel(
|
||||
POLL: () => ({}),
|
||||
DOWNLOAD_READY: () => ({}),
|
||||
GET_VC_RESPONSE: (vc: VC) => ({vc}),
|
||||
LOCK_VC: () => ({}),
|
||||
VERIFY: () => ({}),
|
||||
RESEND_OTP: () => ({}),
|
||||
INPUT_OTP: (otp: string) => ({otp}),
|
||||
REFRESH: () => ({}),
|
||||
REVOKE_VC: () => ({}),
|
||||
ADD_WALLET_BINDING_ID: () => ({}),
|
||||
CANCEL: () => ({}),
|
||||
CONFIRM: () => ({}),
|
||||
@@ -272,9 +271,9 @@ export const EsignetMosipVCItemMachine = model.createMachine(
|
||||
},
|
||||
{
|
||||
target: 'updatingPrivateKey',
|
||||
/*The walletBindingResponse is used for conditional rendering in wallet binding.
|
||||
However, it wrongly considers activation as successful even when there's an error
|
||||
in updatingPrivateKey state. So created a temporary context variable to store the binding
|
||||
/*The walletBindingResponse is used for conditional rendering in wallet binding.
|
||||
However, it wrongly considers activation as successful even when there's an error
|
||||
in updatingPrivateKey state. So created a temporary context variable to store the binding
|
||||
response and use it in updatingPrivateKey state*/
|
||||
actions: 'setTempWalletBindingResponse',
|
||||
},
|
||||
|
||||
@@ -70,7 +70,10 @@ export interface Typegen0 {
|
||||
| 'DISMISS'
|
||||
| 'done.invoke.vc-item-openid4vci.requestingBindingOtp:invocation[0]';
|
||||
clearTransactionId: 'DISMISS';
|
||||
logVCremoved: 'done.invoke.vc-item-openid4vci.kebabPopUp.triggerAutoBackup:invocation[0]';
|
||||
closeViewVcModal: 'CLOSE_VC_MODAL' | 'STORE_RESPONSE';
|
||||
logVCremoved:
|
||||
| 'STORE_RESPONSE'
|
||||
| 'done.invoke.vc-item-openid4vci.kebabPopUp.triggerAutoBackup:invocation[0]';
|
||||
logWalletBindingFailure:
|
||||
| 'error.platform.vc-item-openid4vci.addKeyPair:invocation[0]'
|
||||
| 'error.platform.vc-item-openid4vci.addingWalletBindingId:invocation[0]'
|
||||
@@ -80,7 +83,9 @@ export interface Typegen0 {
|
||||
| 'done.invoke.vc-item-openid4vci.addingWalletBindingId:invocation[0]'
|
||||
| 'done.invoke.vc-item-openid4vci.updatingPrivateKey:invocation[0]';
|
||||
removeVcItem: 'CONFIRM';
|
||||
removedVc: 'done.invoke.vc-item-openid4vci.kebabPopUp.triggerAutoBackup:invocation[0]';
|
||||
removedVc:
|
||||
| 'STORE_RESPONSE'
|
||||
| 'done.invoke.vc-item-openid4vci.kebabPopUp.triggerAutoBackup:invocation[0]';
|
||||
requestStoredContext: 'GET_VC_RESPONSE' | 'REFRESH';
|
||||
requestVcContext: 'DISMISS' | 'xstate.init';
|
||||
sendActivationFailedEndEvent:
|
||||
|
||||
@@ -57,13 +57,11 @@ const model = createModel(
|
||||
verifiableCredential: null as VerifiableCredential,
|
||||
requestId: '',
|
||||
lastVerifiedOn: null,
|
||||
locked: false,
|
||||
otp: '',
|
||||
otpError: '',
|
||||
idError: '',
|
||||
transactionId: '',
|
||||
bindingTransactionId: '',
|
||||
revoked: false,
|
||||
downloadCounter: 0,
|
||||
maxDownloadCount: null as number,
|
||||
downloadInterval: null as number,
|
||||
@@ -90,11 +88,10 @@ const model = createModel(
|
||||
DOWNLOAD_READY: () => ({}),
|
||||
FAILED: () => ({}),
|
||||
GET_VC_RESPONSE: (vc: VC) => ({vc}),
|
||||
LOCK_VC: () => ({}),
|
||||
VERIFY: () => ({}),
|
||||
INPUT_OTP: (otp: string) => ({otp}),
|
||||
RESEND_OTP: () => ({}),
|
||||
REFRESH: () => ({}),
|
||||
REVOKE_VC: () => ({}),
|
||||
ADD_WALLET_BINDING_ID: () => ({}),
|
||||
CANCEL: () => ({}),
|
||||
CONFIRM: () => ({}),
|
||||
@@ -262,11 +259,8 @@ export const ExistingMosipVCItemMachine =
|
||||
idle: {
|
||||
entry: ['clearTransactionId', 'clearOtp'],
|
||||
on: {
|
||||
LOCK_VC: {
|
||||
target: 'requestingOtp',
|
||||
},
|
||||
REVOKE_VC: {
|
||||
target: 'acceptingRevokeInput',
|
||||
VERIFY: {
|
||||
target: 'verifyingCredential',
|
||||
},
|
||||
ADD_WALLET_BINDING_ID: {
|
||||
target: 'showBindingWarning',
|
||||
@@ -432,154 +426,6 @@ export const ExistingMosipVCItemMachine =
|
||||
},
|
||||
},
|
||||
},
|
||||
invalid: {
|
||||
states: {
|
||||
otp: {},
|
||||
backend: {},
|
||||
},
|
||||
on: {
|
||||
INPUT_OTP: {
|
||||
actions: 'setOtp',
|
||||
target: 'requestingLock',
|
||||
},
|
||||
DISMISS: {
|
||||
target: 'idle',
|
||||
},
|
||||
},
|
||||
},
|
||||
requestingOtp: {
|
||||
invoke: {
|
||||
src: 'requestOtp',
|
||||
onDone: [
|
||||
{
|
||||
actions: [log('accepting OTP')],
|
||||
target: 'acceptingOtpInput',
|
||||
},
|
||||
],
|
||||
onError: [
|
||||
{
|
||||
actions: [log('error OTP')],
|
||||
target: '#vc-item.invalid.backend',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
acceptingOtpInput: {
|
||||
entry: ['clearOtp', 'setTransactionId'],
|
||||
on: {
|
||||
INPUT_OTP: [
|
||||
{
|
||||
actions: [
|
||||
log('setting OTP lock'),
|
||||
'setTransactionId',
|
||||
'setOtp',
|
||||
],
|
||||
target: 'requestingLock',
|
||||
},
|
||||
],
|
||||
DISMISS: {
|
||||
actions: ['clearOtp', 'clearTransactionId'],
|
||||
target: 'idle',
|
||||
},
|
||||
RESEND_OTP: {
|
||||
target: '.resendOTP',
|
||||
},
|
||||
},
|
||||
initial: 'idle',
|
||||
states: {
|
||||
idle: {},
|
||||
resendOTP: {
|
||||
invoke: {
|
||||
src: 'requestOtp',
|
||||
onDone: [
|
||||
{
|
||||
target: 'idle',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
acceptingRevokeInput: {
|
||||
entry: [log('acceptingRevokeInput'), 'clearOtp', 'setTransactionId'],
|
||||
on: {
|
||||
INPUT_OTP: [
|
||||
{
|
||||
actions: [
|
||||
log('setting OTP revoke'),
|
||||
'setTransactionId',
|
||||
'setOtp',
|
||||
],
|
||||
target: 'requestingRevoke',
|
||||
},
|
||||
],
|
||||
DISMISS: {
|
||||
actions: ['clearOtp', 'clearTransactionId'],
|
||||
target: 'idle',
|
||||
},
|
||||
},
|
||||
},
|
||||
requestingLock: {
|
||||
invoke: {
|
||||
src: 'requestLock',
|
||||
onDone: [
|
||||
{
|
||||
actions: 'setLock',
|
||||
target: 'lockingVc',
|
||||
},
|
||||
],
|
||||
onError: [
|
||||
{
|
||||
actions: 'setOtpError',
|
||||
target: 'acceptingOtpInput',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
lockingVc: {
|
||||
entry: ['storeLock'],
|
||||
on: {
|
||||
STORE_RESPONSE: {
|
||||
target: 'idle',
|
||||
},
|
||||
},
|
||||
},
|
||||
requestingRevoke: {
|
||||
invoke: {
|
||||
src: 'requestRevoke',
|
||||
onDone: [
|
||||
{
|
||||
actions: [log('doneRevoking'), 'setRevoke'],
|
||||
target: 'revokingVc',
|
||||
},
|
||||
],
|
||||
onError: [
|
||||
{
|
||||
actions: [
|
||||
log((_, event) => (event.data as Error).message),
|
||||
'setOtpError',
|
||||
],
|
||||
target: 'acceptingOtpInput',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
revokingVc: {
|
||||
entry: ['revokeVID'],
|
||||
on: {
|
||||
STORE_RESPONSE: {
|
||||
target: 'loggingRevoke',
|
||||
},
|
||||
},
|
||||
},
|
||||
loggingRevoke: {
|
||||
entry: [log('loggingRevoke'), 'logRevoked'],
|
||||
on: {
|
||||
DISMISS: {
|
||||
target: 'idle',
|
||||
},
|
||||
},
|
||||
},
|
||||
showBindingWarning: {
|
||||
on: {
|
||||
CONFIRM: {
|
||||
@@ -1150,34 +996,6 @@ export const ExistingMosipVCItemMachine =
|
||||
},
|
||||
),
|
||||
|
||||
logRevoked: send(
|
||||
context =>
|
||||
ActivityLogEvents.LOG_ACTIVITY({
|
||||
_vcKey: context.vcMetadata.getVcKey(),
|
||||
type: 'VC_REVOKED',
|
||||
timestamp: Date.now(),
|
||||
deviceName: '',
|
||||
vcLabel: context.vcMetadata.id,
|
||||
id: context.vcMetadata.id,
|
||||
idType: getIdType(context.vcMetadata.issuer),
|
||||
}),
|
||||
{
|
||||
to: context => context.serviceRefs.activityLog,
|
||||
},
|
||||
),
|
||||
|
||||
revokeVID: send(
|
||||
context => {
|
||||
return StoreEvents.REMOVE(
|
||||
MY_VCS_STORE_KEY,
|
||||
context.vcMetadata.getVcKey(),
|
||||
);
|
||||
},
|
||||
{
|
||||
to: context => context.serviceRefs.store,
|
||||
},
|
||||
),
|
||||
|
||||
setTransactionId: assign({
|
||||
transactionId: () => String(new Date().valueOf()).substring(3, 13),
|
||||
}),
|
||||
@@ -1207,22 +1025,6 @@ export const ExistingMosipVCItemMachine =
|
||||
|
||||
clearOtp: assign({otp: ''}),
|
||||
|
||||
setLock: assign({
|
||||
locked: context => !context.locked,
|
||||
}),
|
||||
|
||||
setRevoke: assign({
|
||||
revoked: () => true,
|
||||
}),
|
||||
|
||||
storeLock: send(
|
||||
context => {
|
||||
const {serviceRefs, ...data} = context;
|
||||
return StoreEvents.SET(context.vcMetadata.getVcKey(), data);
|
||||
},
|
||||
{to: context => context.serviceRefs.store},
|
||||
),
|
||||
|
||||
removeVcItem: send(
|
||||
_context => {
|
||||
return StoreEvents.REMOVE(
|
||||
@@ -1456,55 +1258,6 @@ export const ExistingMosipVCItemMachine =
|
||||
console.error(error);
|
||||
}
|
||||
},
|
||||
|
||||
requestLock: async context => {
|
||||
let response = null;
|
||||
if (context.locked) {
|
||||
response = await request(
|
||||
API_URLS.authUnLock.method,
|
||||
API_URLS.authUnLock.buildURL(),
|
||||
{
|
||||
individualId: context.vcMetadata.id,
|
||||
individualIdType: context.vcMetadata.idType,
|
||||
otp: context.otp,
|
||||
transactionID: context.transactionId,
|
||||
authType: ['bio'],
|
||||
unlockForSeconds: '120',
|
||||
},
|
||||
);
|
||||
} else {
|
||||
response = await request(
|
||||
API_URLS.authLock.method,
|
||||
API_URLS.authLock.buildURL(),
|
||||
{
|
||||
individualId: context.vcMetadata.id,
|
||||
individualIdType: context.vcMetadata.idType,
|
||||
otp: context.otp,
|
||||
transactionID: context.transactionId,
|
||||
authType: ['bio'],
|
||||
},
|
||||
);
|
||||
}
|
||||
return response.response;
|
||||
},
|
||||
|
||||
requestRevoke: async context => {
|
||||
try {
|
||||
return request(
|
||||
API_URLS.requestRevoke.method,
|
||||
API_URLS.requestRevoke.buildURL(context.vcMetadata.id),
|
||||
{
|
||||
transactionID: context.transactionId,
|
||||
vidStatus: 'REVOKED',
|
||||
individualId: context.vcMetadata.id,
|
||||
individualIdType: 'VID',
|
||||
otp: context.otp,
|
||||
},
|
||||
);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
guards: {
|
||||
@@ -1548,38 +1301,6 @@ export function selectId(state: State) {
|
||||
return state.context.vcMetadata.id;
|
||||
}
|
||||
|
||||
export function selectIdType(state: State) {
|
||||
return state.context.vcMetadata.idType;
|
||||
}
|
||||
|
||||
export function selectCredential(state: State) {
|
||||
return state.context.credential;
|
||||
}
|
||||
|
||||
export function selectIsOtpError(state: State) {
|
||||
return state.context.otpError;
|
||||
}
|
||||
|
||||
export function selectIsLockingVc(state: State) {
|
||||
return state.matches('lockingVc');
|
||||
}
|
||||
|
||||
export function selectIsRevokingVc(state: State) {
|
||||
return state.matches('revokingVc');
|
||||
}
|
||||
|
||||
export function selectIsLoggingRevoke(state: State) {
|
||||
return state.matches('loggingRevoke');
|
||||
}
|
||||
|
||||
export function selectIsAcceptingOtpInput(state: State) {
|
||||
return state.matches('acceptingOtpInput');
|
||||
}
|
||||
|
||||
export function selectIsAcceptingRevokeInput(state: State) {
|
||||
return state.matches('acceptingRevokeInput');
|
||||
}
|
||||
|
||||
export function selectRequestBindingOtp(state: State) {
|
||||
return state.matches('requestingBindingOtp');
|
||||
}
|
||||
|
||||
@@ -44,21 +44,6 @@ export interface Typegen0 {
|
||||
data: unknown;
|
||||
__tip: 'See the XState TS docs to learn how to strongly type this.';
|
||||
};
|
||||
'done.invoke.vc-item.requestingLock:invocation[0]': {
|
||||
type: 'done.invoke.vc-item.requestingLock:invocation[0]';
|
||||
data: unknown;
|
||||
__tip: 'See the XState TS docs to learn how to strongly type this.';
|
||||
};
|
||||
'done.invoke.vc-item.requestingOtp:invocation[0]': {
|
||||
type: 'done.invoke.vc-item.requestingOtp:invocation[0]';
|
||||
data: unknown;
|
||||
__tip: 'See the XState TS docs to learn how to strongly type this.';
|
||||
};
|
||||
'done.invoke.vc-item.requestingRevoke:invocation[0]': {
|
||||
type: 'done.invoke.vc-item.requestingRevoke:invocation[0]';
|
||||
data: unknown;
|
||||
__tip: 'See the XState TS docs to learn how to strongly type this.';
|
||||
};
|
||||
'done.invoke.vc-item.updatingPrivateKey:invocation[0]': {
|
||||
type: 'done.invoke.vc-item.updatingPrivateKey:invocation[0]';
|
||||
data: unknown;
|
||||
@@ -102,14 +87,6 @@ export interface Typegen0 {
|
||||
type: 'error.platform.vc-item.requestingBindingOtp:invocation[0]';
|
||||
data: unknown;
|
||||
};
|
||||
'error.platform.vc-item.requestingLock:invocation[0]': {
|
||||
type: 'error.platform.vc-item.requestingLock:invocation[0]';
|
||||
data: unknown;
|
||||
};
|
||||
'error.platform.vc-item.requestingRevoke:invocation[0]': {
|
||||
type: 'error.platform.vc-item.requestingRevoke:invocation[0]';
|
||||
data: unknown;
|
||||
};
|
||||
'error.platform.vc-item.updatingPrivateKey:invocation[0]': {
|
||||
type: 'error.platform.vc-item.updatingPrivateKey:invocation[0]';
|
||||
data: unknown;
|
||||
@@ -133,11 +110,6 @@ export interface Typegen0 {
|
||||
requestBindingOtp:
|
||||
| 'done.invoke.vc-item.acceptingBindingOtp.resendOTP:invocation[0]'
|
||||
| 'done.invoke.vc-item.requestingBindingOtp:invocation[0]';
|
||||
requestLock: 'done.invoke.vc-item.requestingLock:invocation[0]';
|
||||
requestOtp:
|
||||
| 'done.invoke.vc-item.acceptingOtpInput.resendOTP:invocation[0]'
|
||||
| 'done.invoke.vc-item.requestingOtp:invocation[0]';
|
||||
requestRevoke: 'done.invoke.vc-item.requestingRevoke:invocation[0]';
|
||||
updatePrivateKey: 'done.invoke.vc-item.updatingPrivateKey:invocation[0]';
|
||||
verifyCredential: 'done.invoke.vc-item.verifyingCredential:invocation[0]';
|
||||
};
|
||||
@@ -153,29 +125,23 @@ export interface Typegen0 {
|
||||
| ''
|
||||
| 'CANCEL'
|
||||
| 'DISMISS'
|
||||
| 'GET_VC_RESPONSE'
|
||||
| 'REVOKE_VC'
|
||||
| 'SHOW_BINDING_STATUS'
|
||||
| 'STORE_RESPONSE'
|
||||
| 'done.invoke.vc-item.requestingBindingOtp:invocation[0]'
|
||||
| 'done.invoke.vc-item.requestingOtp:invocation[0]'
|
||||
| 'done.invoke.vc-item.verifyingCredential.triggerAutoBackupForVcDownload:invocation[0]'
|
||||
| 'error.platform.vc-item.requestingLock:invocation[0]'
|
||||
| 'error.platform.vc-item.requestingRevoke:invocation[0]';
|
||||
| 'done.invoke.vc-item.verifyingCredential.triggerAutoBackupForVcDownload:invocation[0]';
|
||||
clearTransactionId:
|
||||
| ''
|
||||
| 'CANCEL'
|
||||
| 'DISMISS'
|
||||
| 'GET_VC_RESPONSE'
|
||||
| 'SHOW_BINDING_STATUS'
|
||||
| 'STORE_RESPONSE'
|
||||
| 'done.invoke.vc-item.verifyingCredential.triggerAutoBackupForVcDownload:invocation[0]';
|
||||
closeViewVcModal: 'CLOSE_VC_MODAL' | 'STORE_RESPONSE';
|
||||
incrementDownloadCounter:
|
||||
| 'POLL'
|
||||
| 'done.invoke.vc-item.checkingServerData.loadDownloadLimitConfig:invocation[0]';
|
||||
logDownloaded: 'STORE_RESPONSE';
|
||||
logRevoked: 'STORE_RESPONSE';
|
||||
logVCremoved: 'done.invoke.vc-item.kebabPopUp.removingVc.triggerAutoBackup:invocation[0]';
|
||||
logVCremoved:
|
||||
| 'STORE_RESPONSE'
|
||||
| 'done.invoke.vc-item.kebabPopUp.removingVc.triggerAutoBackup:invocation[0]';
|
||||
logWalletBindingFailure:
|
||||
| 'error.platform.vc-item.addKeyPair:invocation[0]'
|
||||
| 'error.platform.vc-item.addingWalletBindingId:invocation[0]'
|
||||
@@ -184,7 +150,9 @@ export interface Typegen0 {
|
||||
logWalletBindingSuccess:
|
||||
| 'done.invoke.vc-item.addingWalletBindingId:invocation[0]'
|
||||
| 'done.invoke.vc-item.updatingPrivateKey:invocation[0]';
|
||||
refreshMyVcs: 'done.invoke.vc-item.kebabPopUp.removingVc.triggerAutoBackup:invocation[0]';
|
||||
refreshMyVcs:
|
||||
| 'STORE_RESPONSE'
|
||||
| 'done.invoke.vc-item.kebabPopUp.removingVc.triggerAutoBackup:invocation[0]';
|
||||
removeVcFromInProgressDownloads: 'STORE_RESPONSE';
|
||||
removeVcItem: 'CONFIRM';
|
||||
removeVcMetaDataFromStorage:
|
||||
@@ -193,7 +161,6 @@ export interface Typegen0 {
|
||||
removeVcMetaDataFromVcMachine: 'DISMISS';
|
||||
requestStoredContext: 'GET_VC_RESPONSE' | 'REFRESH';
|
||||
requestVcContext: 'DISMISS' | 'xstate.init';
|
||||
revokeVID: 'done.invoke.vc-item.requestingRevoke:invocation[0]';
|
||||
sendActivationFailedEndEvent:
|
||||
| 'DISMISS'
|
||||
| 'error.platform.vc-item.updatingPrivateKey:invocation[0]';
|
||||
@@ -217,26 +184,15 @@ export interface Typegen0 {
|
||||
| 'GET_VC_RESPONSE'
|
||||
| 'STORE_RESPONSE';
|
||||
setDownloadInterval: 'done.invoke.vc-item.checkingServerData.loadDownloadLimitConfig:invocation[0]';
|
||||
setLock: 'done.invoke.vc-item.requestingLock:invocation[0]';
|
||||
setMaxDownloadCount: 'done.invoke.vc-item.checkingServerData.loadDownloadLimitConfig:invocation[0]';
|
||||
setOtp: 'INPUT_OTP';
|
||||
setOtpError:
|
||||
| 'error.platform.vc-item.requestingLock:invocation[0]'
|
||||
| 'error.platform.vc-item.requestingRevoke:invocation[0]';
|
||||
setPinCard: 'PIN_CARD';
|
||||
setPrivateKey: 'done.invoke.vc-item.addKeyPair:invocation[0]';
|
||||
setPublicKey: 'done.invoke.vc-item.addKeyPair:invocation[0]';
|
||||
setRevoke: 'done.invoke.vc-item.requestingRevoke:invocation[0]';
|
||||
setTempWalletBindingResponse: 'done.invoke.vc-item.addingWalletBindingId:invocation[0]';
|
||||
setThumbprintForWalletBindingId:
|
||||
| 'done.invoke.vc-item.addingWalletBindingId:invocation[0]'
|
||||
| 'done.invoke.vc-item.updatingPrivateKey:invocation[0]';
|
||||
setTransactionId:
|
||||
| 'INPUT_OTP'
|
||||
| 'REVOKE_VC'
|
||||
| 'done.invoke.vc-item.requestingOtp:invocation[0]'
|
||||
| 'error.platform.vc-item.requestingLock:invocation[0]'
|
||||
| 'error.platform.vc-item.requestingRevoke:invocation[0]';
|
||||
setVcKey: 'REMOVE';
|
||||
setVcMetadata: 'UPDATE_VC_METADATA';
|
||||
setWalletBindingError:
|
||||
@@ -256,7 +212,6 @@ export interface Typegen0 {
|
||||
| 'done.invoke.vc-item.addingWalletBindingId:invocation[0]'
|
||||
| 'done.invoke.vc-item.updatingPrivateKey:invocation[0]'
|
||||
| 'done.invoke.vc-item.verifyingCredential:invocation[0]';
|
||||
storeLock: 'done.invoke.vc-item.requestingLock:invocation[0]';
|
||||
updatePrivateKey:
|
||||
| 'done.invoke.vc-item.addingWalletBindingId:invocation[0]'
|
||||
| 'done.invoke.vc-item.updatingPrivateKey:invocation[0]';
|
||||
@@ -288,20 +243,13 @@ export interface Typegen0 {
|
||||
isUserSignedAlready: 'STORE_RESPONSE';
|
||||
loadDownloadLimitConfig: 'STORE_ERROR' | 'STORE_RESPONSE';
|
||||
requestBindingOtp: 'CONFIRM' | 'RESEND_OTP';
|
||||
requestLock: 'INPUT_OTP';
|
||||
requestOtp: 'LOCK_VC' | 'RESEND_OTP';
|
||||
requestRevoke: 'INPUT_OTP';
|
||||
updatePrivateKey: 'done.invoke.vc-item.addingWalletBindingId:invocation[0]';
|
||||
verifyCredential: 'CREDENTIAL_DOWNLOADED';
|
||||
verifyCredential: '' | 'VERIFY';
|
||||
};
|
||||
matchesStates:
|
||||
| 'acceptingBindingOtp'
|
||||
| 'acceptingBindingOtp.idle'
|
||||
| 'acceptingBindingOtp.resendOTP'
|
||||
| 'acceptingOtpInput'
|
||||
| 'acceptingOtpInput.idle'
|
||||
| 'acceptingOtpInput.resendOTP'
|
||||
| 'acceptingRevokeInput'
|
||||
| 'addKeyPair'
|
||||
| 'addingWalletBindingId'
|
||||
| 'checkingServerData'
|
||||
@@ -314,25 +262,17 @@ export interface Typegen0 {
|
||||
| 'checkingServerData.verifyingDownloadLimitExpiry'
|
||||
| 'checkingStore'
|
||||
| 'checkingVc'
|
||||
| 'checkingVerificationStatus'
|
||||
| 'handleVCVerificationFailure'
|
||||
| 'idle'
|
||||
| 'invalid'
|
||||
| 'invalid.backend'
|
||||
| 'invalid.otp'
|
||||
| 'kebabPopUp'
|
||||
| 'kebabPopUp.idle'
|
||||
| 'kebabPopUp.removeWallet'
|
||||
| 'kebabPopUp.removingVc'
|
||||
| 'kebabPopUp.removingVc.triggerAutoBackup'
|
||||
| 'kebabPopUp.showActivities'
|
||||
| 'lockingVc'
|
||||
| 'loggingRevoke'
|
||||
| 'pinCard'
|
||||
| 'requestingBindingOtp'
|
||||
| 'requestingLock'
|
||||
| 'requestingOtp'
|
||||
| 'requestingRevoke'
|
||||
| 'revokingVc'
|
||||
| 'showBindingWarning'
|
||||
| 'showingWalletBindingError'
|
||||
| 'updatingContextVariables'
|
||||
@@ -342,7 +282,6 @@ export interface Typegen0 {
|
||||
| 'verifyingCredential.triggerAutoBackupForVcDownload'
|
||||
| {
|
||||
acceptingBindingOtp?: 'idle' | 'resendOTP';
|
||||
acceptingOtpInput?: 'idle' | 'resendOTP';
|
||||
checkingServerData?:
|
||||
| 'checkingStatus'
|
||||
| 'downloadingCredential'
|
||||
@@ -350,7 +289,6 @@ export interface Typegen0 {
|
||||
| 'savingFailed'
|
||||
| 'verifyingDownloadLimitExpiry'
|
||||
| {savingFailed?: 'idle' | 'viewingVc'};
|
||||
invalid?: 'backend' | 'otp';
|
||||
kebabPopUp?:
|
||||
| 'idle'
|
||||
| 'removeWallet'
|
||||
|
||||
@@ -117,7 +117,6 @@ export type ActivityLogType =
|
||||
| 'VC_RECEIVED_NOT_SAVED'
|
||||
| 'VC_DELETED'
|
||||
| 'VC_DOWNLOADED'
|
||||
| 'VC_REVOKED'
|
||||
| 'VC_SHARED_WITH_VERIFICATION_CONSENT'
|
||||
| 'VC_RECEIVED_WITH_PRESENCE_VERIFIED'
|
||||
| 'VC_RECEIVED_BUT_PRESENCE_VERIFICATION_FAILED'
|
||||
|
||||
@@ -13,7 +13,6 @@ import {
|
||||
requestMachine,
|
||||
} from './bleShare/request/requestMachine';
|
||||
import {createScanMachine, scanMachine} from './bleShare/scan/scanMachine';
|
||||
import {createRevokeMachine, revokeVidsMachine} from './revoke';
|
||||
import {pure, respond} from 'xstate/lib/actions';
|
||||
import {AppServices} from '../shared/GlobalContext';
|
||||
import {
|
||||
@@ -291,12 +290,6 @@ export const appMachine = model.createMachine(
|
||||
requestMachine.id,
|
||||
);
|
||||
}
|
||||
|
||||
serviceRefs.revoke = spawn(
|
||||
createRevokeMachine(serviceRefs),
|
||||
revokeVidsMachine.id,
|
||||
);
|
||||
|
||||
return serviceRefs;
|
||||
},
|
||||
}),
|
||||
@@ -314,8 +307,6 @@ export const appMachine = model.createMachine(
|
||||
if (isAndroid()) {
|
||||
context.serviceRefs.request.subscribe(logState);
|
||||
}
|
||||
|
||||
context.serviceRefs.revoke.subscribe(logState);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -1,326 +0,0 @@
|
||||
import {TextInput} from 'react-native';
|
||||
import {assign, ErrorPlatformEvent, EventFrom, send, StateFrom} from 'xstate';
|
||||
import {log} from 'xstate/lib/actions';
|
||||
|
||||
import i18n from '../i18n';
|
||||
import {AppServices} from '../shared/GlobalContext';
|
||||
import {ActivityLogEvents} from './activityLog';
|
||||
import {StoreEvents} from './store';
|
||||
import {createModel} from 'xstate/lib/model';
|
||||
import {request} from '../shared/request';
|
||||
import {VcIdType} from '../types/VC/ExistingMosipVC/vc';
|
||||
import {MY_VCS_STORE_KEY} from '../shared/constants';
|
||||
import {VCMetadata} from '../shared/VCMetadata';
|
||||
import {API_URLS} from '../shared/api';
|
||||
import {getIdType} from '../shared/openId4VCI/Utils';
|
||||
|
||||
const model = createModel(
|
||||
{
|
||||
serviceRefs: {} as AppServices,
|
||||
idType: 'VID' as VcIdType,
|
||||
idError: '',
|
||||
otp: '',
|
||||
otpError: '',
|
||||
transactionId: '',
|
||||
requestId: '',
|
||||
VIDsMetadata: [] as VCMetadata[],
|
||||
},
|
||||
{
|
||||
events: {
|
||||
INPUT_OTP: (otp: string) => ({otp}),
|
||||
VALIDATE_INPUT: () => ({}),
|
||||
READY: (idInputRef: TextInput) => ({idInputRef}),
|
||||
DISMISS: () => ({}),
|
||||
SELECT_ID_TYPE: (idType: VcIdType) => ({idType}),
|
||||
REVOKE_VCS: (vcMetadatas: VCMetadata[]) => ({vcMetadatas}),
|
||||
STORE_RESPONSE: (response: string[]) => ({response}),
|
||||
ERROR: (data: Error) => ({data}),
|
||||
SUCCESS: () => ({}),
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
export const revokeVidsMachine =
|
||||
/** @xstate-layout N4IgpgJg5mDOIC5QCUwDcD2BrMA1AlhLAHSEA2YAxMgKK4DyA0jQPq4DCAyoqAA4ax8AF3wYAdjxAAPRACYAHAFZiARhUB2WQDZFABgCcO-boDMWgDQgAnohWyALLOK6X9k-J3zZirfYC+fpaomDgERKRiaACGZISUAJIAcgAKAKoAKiz06cmS-IIi4pIyCOq6TuomjvYqWlpe3iaWNgiKik4u5fK69vr2uipmAUHo2HiEJPiRMXEAIvGcALIL3Egg+cKiEmslZRVVDrX1so3Nclr6zi61pvLyKoY9wyDBY2EkUQDGn2C8ImJQXDxWaTCAUah0JisDirPgCTZFHaIEyydTEe6yEyaQzqXrtM4IeQmXRXcrqDz9dQPEzPV6hCbEL4-P5TQHAkgAJzAAEcAK5wf5QehCXiUCDiMAREKSunjcJM36CoEg4hcvkC1nC3gIKaYT5RQpiADaugAunl4Ybioh8dZbHtiHoevpFESlIp9DTAi9RvT5d9FazlZyefzYIKtZQwByORgOcReGQDQAzOMAW2IsvejIDLIBwdVoY1AK1OsiGH1hpN5rWGytSIQJix6LsWNkOLxsgJKLRnVMlXJdxq-m9WYZCrzbJBlHmSxWFoKW2tjdRLcx2K0uJdXbtCGMpN03Qe-X03VktN9co+uYjIviYl4vKECRSGSyOQXCO2oBKKkPaNdRQqXsRRBi0EwXQJep5EdFxURdTczB0C9pWzCdb14e9H2fWdlk4WF1ktJcGwUZQ1E0HQDCMUwLF3NQ+lJVFN3kXFvBQt4GTVMNBVlMUJSlMZM0vbMuOLKBZTLPUDS2atP3rH9bH-R0lGA0CzAgxQCRqS4nQ0F0-10SoRxGVDOKLcNWV46NY3jRMU3TITTPCUSLIBCTdQraTxFk2siMRBTSh3FpBhdWCeiAqkiSA4yfSckMQiDT4ZwWPCCLrYiAq8AlBgeYg6jKLF1DaB5ygCb0xAwCA4EkMdwnIMA5Iy6RbEMPKNGJSo2nuD17Gyh5lDqC59HUTwVBqL0TI4urpliCBiAwEVGv85rWipZx5GGxRiV8GjNN3BQALg8bMS0citHYv1JhmwhiAAIy+HAxAgJbvxWto0T6doTlkFwtBOFRuzaMK1G6TdqWGi6rylGZnt8xdlpKLaTGIT7vp+3Q-tkAH9pUZRdNOux9KxGLauvZklXZUgwQauGv2XH7LhMOwai+zcfvkXrd3sHQwsPal7C8WpFEhtCbyDSmXIwl7l00btud5twLj-Op5BF8cxfzdlpYbAXspYhW9iG3w1f9cnNTvB8n21gKBbROpHEAhn20UTngp+lRiCx7nN1uAxMRNkN1Vc8TL2tlaiTRQZtBMCKBe+gkXZJJ1tB6ECBf0FQA8LBL80+MPf3bGC7lRDHT1TptuzuMLDhRMwzoD-O5Fd2wYOuVF-raXx7HUMq-CAA */
|
||||
model.createMachine(
|
||||
{
|
||||
predictableActionArguments: true,
|
||||
preserveActionOrder: true,
|
||||
tsTypes: {} as import('./revoke.typegen').Typegen0,
|
||||
schema: {
|
||||
context: model.initialContext,
|
||||
events: {} as EventFrom<typeof model>,
|
||||
},
|
||||
id: 'RevokeVids',
|
||||
initial: 'acceptingVIDs',
|
||||
states: {
|
||||
idle: {
|
||||
on: {
|
||||
REVOKE_VCS: {
|
||||
actions: ['setTransactionId', 'clearOtp'],
|
||||
target: 'acceptingOtpInput',
|
||||
},
|
||||
},
|
||||
},
|
||||
invalid: {
|
||||
states: {
|
||||
otp: {},
|
||||
backend: {},
|
||||
},
|
||||
on: {
|
||||
INPUT_OTP: {
|
||||
actions: 'setOtp',
|
||||
target: 'requestingRevoke',
|
||||
},
|
||||
DISMISS: {
|
||||
target: 'idle',
|
||||
},
|
||||
},
|
||||
},
|
||||
acceptingVIDs: {
|
||||
entry: ['setTransactionId', 'clearOtp'],
|
||||
initial: 'idle',
|
||||
states: {
|
||||
idle: {
|
||||
on: {
|
||||
REVOKE_VCS: {
|
||||
actions: 'setVIDs',
|
||||
target: '#RevokeVids.acceptingOtpInput',
|
||||
},
|
||||
},
|
||||
},
|
||||
requestingOtp: {
|
||||
invoke: {
|
||||
src: 'requestOtp',
|
||||
onDone: [
|
||||
{
|
||||
actions: log('accepting OTP'),
|
||||
target: '#RevokeVids.acceptingOtpInput',
|
||||
},
|
||||
],
|
||||
onError: [
|
||||
{
|
||||
actions: [log('error OTP'), 'setIdBackendError'],
|
||||
target: '#RevokeVids.invalid.backend',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
on: {
|
||||
DISMISS: {
|
||||
target: 'idle',
|
||||
},
|
||||
},
|
||||
},
|
||||
acceptingOtpInput: {
|
||||
entry: 'clearOtp',
|
||||
on: {
|
||||
INPUT_OTP: {
|
||||
actions: 'setOtp',
|
||||
target: 'requestingRevoke',
|
||||
},
|
||||
DISMISS: {
|
||||
target: 'idle',
|
||||
},
|
||||
},
|
||||
},
|
||||
requestingRevoke: {
|
||||
invoke: {
|
||||
src: 'requestRevoke',
|
||||
},
|
||||
on: {
|
||||
ERROR: {
|
||||
actions: [log('error on Revoking'), 'setOtpError'],
|
||||
target: 'acceptingOtpInput',
|
||||
},
|
||||
SUCCESS: {
|
||||
target: 'revokingVc',
|
||||
},
|
||||
},
|
||||
},
|
||||
revokingVc: {
|
||||
entry: ['revokeVID'],
|
||||
on: {
|
||||
STORE_RESPONSE: {
|
||||
target: 'loggingRevoke',
|
||||
},
|
||||
},
|
||||
},
|
||||
loggingRevoke: {
|
||||
entry: [log('loggingRevoke'), 'logRevoked'],
|
||||
on: {
|
||||
DISMISS: {
|
||||
target: 'acceptingVIDs',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
actions: {
|
||||
setOtp: model.assign({
|
||||
otp: (_context, event) => event.otp,
|
||||
}),
|
||||
|
||||
setTransactionId: assign({
|
||||
transactionId: () => String(new Date().valueOf()).substring(3, 13),
|
||||
}),
|
||||
|
||||
setVIDs: model.assign({
|
||||
VIDsMetadata: (_context, event) => event.vcMetadatas,
|
||||
}),
|
||||
|
||||
setIdBackendError: assign({
|
||||
idError: (context, event) => {
|
||||
const message = (event as ErrorPlatformEvent).data.message;
|
||||
const ID_ERRORS_MAP = {
|
||||
'UIN invalid': 'invalidUin',
|
||||
'VID invalid': 'invalidVid',
|
||||
'UIN not available in database': 'missingUin',
|
||||
'VID not available in database': 'missingVid',
|
||||
'Invalid Input Parameter - individualId':
|
||||
context.idType === 'UIN' ? 'invalidUin' : 'invalidVid',
|
||||
};
|
||||
return ID_ERRORS_MAP[message]
|
||||
? i18n.t(`errors.backend.${ID_ERRORS_MAP[message]}`, {
|
||||
ns: 'RevokeVids',
|
||||
})
|
||||
: message;
|
||||
},
|
||||
}),
|
||||
|
||||
setOtpError: assign({
|
||||
otpError: (_context, event) => {
|
||||
const message = (event as ErrorPlatformEvent).data.message;
|
||||
const OTP_ERRORS_MAP = {
|
||||
'OTP is invalid': 'invalidOtp',
|
||||
};
|
||||
return OTP_ERRORS_MAP[message]
|
||||
? i18n.t(`errors.backend.${OTP_ERRORS_MAP[message]}`, {
|
||||
ns: 'RevokeVids',
|
||||
})
|
||||
: message;
|
||||
},
|
||||
}),
|
||||
|
||||
clearOtp: assign({otp: ''}),
|
||||
|
||||
logRevoked: send(
|
||||
context =>
|
||||
ActivityLogEvents.LOG_ACTIVITY(
|
||||
context.VIDsMetadata.map(metadata => ({
|
||||
_vcKey: metadata.getVcKey(),
|
||||
id: metadata.id,
|
||||
idType: getIdType(metadata.issuer),
|
||||
type: 'VC_REVOKED',
|
||||
timestamp: Date.now(),
|
||||
deviceName: '',
|
||||
vcLabel: metadata.id,
|
||||
})),
|
||||
),
|
||||
{
|
||||
to: context => context.serviceRefs.activityLog,
|
||||
},
|
||||
),
|
||||
|
||||
revokeVID: send(
|
||||
context => {
|
||||
return StoreEvents.REMOVE_ITEMS(
|
||||
MY_VCS_STORE_KEY,
|
||||
context.VIDsMetadata.map(m => m.getVcKey()),
|
||||
);
|
||||
},
|
||||
{
|
||||
to: context => context.serviceRefs.store,
|
||||
},
|
||||
),
|
||||
},
|
||||
|
||||
services: {
|
||||
requestOtp: async context => {
|
||||
const transactionId = String(new Date().valueOf()).substring(3, 13);
|
||||
return request(
|
||||
API_URLS.requestOtp.method,
|
||||
API_URLS.requestOtp.buildURL(),
|
||||
{
|
||||
individualId: context.VIDsMetadata[0].id,
|
||||
individualIdType: 'VID',
|
||||
otpChannel: ['EMAIL', 'PHONE'],
|
||||
transactionID: transactionId,
|
||||
},
|
||||
);
|
||||
},
|
||||
|
||||
requestRevoke: context => async callback => {
|
||||
await Promise.all(
|
||||
context.VIDsMetadata.map((metadata: VCMetadata) => {
|
||||
try {
|
||||
const transactionId = String(new Date().valueOf()).substring(
|
||||
3,
|
||||
13,
|
||||
);
|
||||
return request(
|
||||
API_URLS.requestRevoke.method,
|
||||
API_URLS.requestRevoke.buildURL(metadata.id),
|
||||
{
|
||||
transactionID: transactionId,
|
||||
vidStatus: 'REVOKED',
|
||||
individualId: metadata.id,
|
||||
individualIdType: 'VID',
|
||||
otp: context.otp,
|
||||
},
|
||||
);
|
||||
} catch (error) {
|
||||
console.log('error.message', error.message);
|
||||
return error;
|
||||
}
|
||||
}),
|
||||
)
|
||||
.then(() => {
|
||||
callback('SUCCESS');
|
||||
})
|
||||
.catch(error => {
|
||||
callback({type: 'ERROR', data: error});
|
||||
});
|
||||
},
|
||||
},
|
||||
|
||||
guards: {},
|
||||
},
|
||||
);
|
||||
|
||||
export function createRevokeMachine(serviceRefs: AppServices) {
|
||||
return revokeVidsMachine.withContext({
|
||||
...revokeVidsMachine.context,
|
||||
serviceRefs,
|
||||
});
|
||||
}
|
||||
|
||||
type State = StateFrom<typeof revokeVidsMachine>;
|
||||
|
||||
export const RevokeVidsEvents = model.events;
|
||||
|
||||
export function selectIdType(state: State) {
|
||||
return state.context.idType;
|
||||
}
|
||||
|
||||
export function selectIdError(state: State) {
|
||||
return state.context.idError;
|
||||
}
|
||||
|
||||
export function selectOtpError(state: State) {
|
||||
return state.context.otpError;
|
||||
}
|
||||
|
||||
export function selectIsRevokingVc(state: State) {
|
||||
return state.matches('revokingVc');
|
||||
}
|
||||
|
||||
export function selectIsLoggingRevoke(state: State) {
|
||||
return state.matches('loggingRevoke');
|
||||
}
|
||||
|
||||
export function selectIsAcceptingOtpInput(state: State) {
|
||||
return state.matches('acceptingOtpInput');
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
// This file was automatically generated. Edits will be overwritten
|
||||
|
||||
export interface Typegen0 {
|
||||
'@@xstate/typegen': true;
|
||||
internalEvents: {
|
||||
'done.invoke.RevokeVids.acceptingVIDs.requestingOtp:invocation[0]': {
|
||||
type: 'done.invoke.RevokeVids.acceptingVIDs.requestingOtp:invocation[0]';
|
||||
data: unknown;
|
||||
__tip: 'See the XState TS docs to learn how to strongly type this.';
|
||||
};
|
||||
'error.platform.RevokeVids.acceptingVIDs.requestingOtp:invocation[0]': {
|
||||
type: 'error.platform.RevokeVids.acceptingVIDs.requestingOtp:invocation[0]';
|
||||
data: unknown;
|
||||
};
|
||||
'xstate.init': {type: 'xstate.init'};
|
||||
};
|
||||
invokeSrcNameMap: {
|
||||
requestOtp: 'done.invoke.RevokeVids.acceptingVIDs.requestingOtp:invocation[0]';
|
||||
requestRevoke: 'done.invoke.RevokeVids.requestingRevoke:invocation[0]';
|
||||
};
|
||||
missingImplementations: {
|
||||
actions: never;
|
||||
delays: never;
|
||||
guards: never;
|
||||
services: never;
|
||||
};
|
||||
eventsCausingActions: {
|
||||
clearOtp:
|
||||
| 'DISMISS'
|
||||
| 'ERROR'
|
||||
| 'REVOKE_VCS'
|
||||
| 'done.invoke.RevokeVids.acceptingVIDs.requestingOtp:invocation[0]'
|
||||
| 'xstate.init';
|
||||
logRevoked: 'STORE_RESPONSE';
|
||||
revokeVID: 'SUCCESS';
|
||||
setIdBackendError: 'error.platform.RevokeVids.acceptingVIDs.requestingOtp:invocation[0]';
|
||||
setOtp: 'INPUT_OTP';
|
||||
setOtpError: 'ERROR';
|
||||
setTransactionId: 'DISMISS' | 'REVOKE_VCS' | 'xstate.init';
|
||||
setVIDs: 'REVOKE_VCS';
|
||||
};
|
||||
eventsCausingDelays: {};
|
||||
eventsCausingGuards: {};
|
||||
eventsCausingServices: {
|
||||
requestOtp: never;
|
||||
requestRevoke: 'INPUT_OTP';
|
||||
};
|
||||
matchesStates:
|
||||
| 'acceptingOtpInput'
|
||||
| 'acceptingVIDs'
|
||||
| 'acceptingVIDs.idle'
|
||||
| 'acceptingVIDs.requestingOtp'
|
||||
| 'idle'
|
||||
| 'invalid'
|
||||
| 'invalid.backend'
|
||||
| 'invalid.otp'
|
||||
| 'loggingRevoke'
|
||||
| 'requestingRevoke'
|
||||
| 'revokingVc'
|
||||
| {acceptingVIDs?: 'idle' | 'requestingOtp'; invalid?: 'backend' | 'otp'};
|
||||
tags: never;
|
||||
}
|
||||
@@ -19,7 +19,6 @@ import testIDProps from '../../shared/commonUtil';
|
||||
import {BannerNotificationContainer} from '../../components/BannerNotificationContainer';
|
||||
|
||||
export const HomeScreen: React.FC<HomeRouteProps> = props => {
|
||||
const {t} = useTranslation('HomeScreen');
|
||||
const controller = useHomeScreen(props);
|
||||
|
||||
useEffect(() => {
|
||||
@@ -97,9 +96,6 @@ export const HomeScreen: React.FC<HomeRouteProps> = props => {
|
||||
isVisible={controller.isViewingVc}
|
||||
onDismiss={controller.DISMISS_MODAL}
|
||||
vcItemActor={controller.selectedVc}
|
||||
onRevokeDelete={() => {
|
||||
controller.REVOKE();
|
||||
}}
|
||||
activeTab={controller.activeTab}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -13,7 +13,6 @@ import {
|
||||
selectIssuersMachine,
|
||||
selectIsMinimumStorageLimitReached,
|
||||
} from './HomeScreenMachine';
|
||||
import {VcEvents} from '../../machines/VCItemMachine/vc';
|
||||
|
||||
export function useHomeScreen(props: HomeRouteProps) {
|
||||
const {appService} = useContext(GlobalContext);
|
||||
@@ -50,12 +49,7 @@ export function useHomeScreen(props: HomeRouteProps) {
|
||||
|
||||
DISMISS: () => service.send(HomeScreenEvents.DISMISS()),
|
||||
GOTO_ISSUERS: () => service.send(HomeScreenEvents.GOTO_ISSUERS()),
|
||||
SELECT_TAB,
|
||||
DISMISS_MODAL: () => service.send(HomeScreenEvents.DISMISS_MODAL()),
|
||||
REVOKE: () => {
|
||||
vcService.send(VcEvents.REFRESH_MY_VCS());
|
||||
service.send(HomeScreenEvents.DISMISS_MODAL());
|
||||
},
|
||||
};
|
||||
|
||||
function SELECT_TAB(index: number) {
|
||||
|
||||
@@ -61,10 +61,6 @@ export function useReceivedVcsTab() {
|
||||
selectedVc,
|
||||
activeTab: 1,
|
||||
DISMISS_MODAL: () => service.send(HomeScreenEvents.DISMISS_MODAL()),
|
||||
REVOKE: () => {
|
||||
vcService.send(VcEvents.REFRESH_MY_VCS());
|
||||
service.send(HomeScreenEvents.DISMISS_MODAL());
|
||||
},
|
||||
REFRESH: () => ReceivedVcsService.send(ReceivedVcsTabEvents.REFRESH()),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -3,8 +3,6 @@ import {Column} from '../../components/ui';
|
||||
import {Modal} from '../../components/ui/Modal';
|
||||
import {MessageOverlay} from '../../components/MessageOverlay';
|
||||
import {ToastItem} from '../../components/ui/ToastItem';
|
||||
import {RevokeConfirmModal} from '../../components/RevokeConfirm';
|
||||
import {OIDcAuthenticationModal} from '../../components/OIDcAuth';
|
||||
import {useViewVcModal, ViewVcModalProps} from './ViewVcModalController';
|
||||
import {useTranslation} from 'react-i18next';
|
||||
import {OtpVerificationModal} from './MyVcs/OtpVerificationModal';
|
||||
@@ -65,29 +63,6 @@ export const ViewVcModal: React.FC<ViewVcModalProps> = props => {
|
||||
</Column>
|
||||
</Column>
|
||||
|
||||
{controller.isAcceptingRevokeInput && (
|
||||
<OIDcAuthenticationModal
|
||||
isVisible={controller.isAcceptingRevokeInput}
|
||||
onDismiss={controller.DISMISS}
|
||||
onVerify={() => {
|
||||
controller.revokeVc('111111');
|
||||
}}
|
||||
error={controller.otpError}
|
||||
/>
|
||||
)}
|
||||
|
||||
{controller.isAcceptingOtpInput && (
|
||||
<OtpVerificationModal
|
||||
service={props.vcItemActor}
|
||||
isVisible={controller.isAcceptingOtpInput}
|
||||
onDismiss={controller.DISMISS}
|
||||
onInputDone={controller.inputOtp}
|
||||
error={controller.otpError}
|
||||
resend={controller.RESEND_OTP}
|
||||
flow={TelemetryConstants.FlowType.vcLockOrRevoke}
|
||||
/>
|
||||
)}
|
||||
|
||||
{controller.isAcceptingBindingOtp && (
|
||||
<OtpVerificationModal
|
||||
service={props.vcItemActor}
|
||||
@@ -123,14 +98,6 @@ export const ViewVcModal: React.FC<ViewVcModalProps> = props => {
|
||||
progress
|
||||
/>
|
||||
|
||||
{controller.isRevoking && (
|
||||
<RevokeConfirmModal
|
||||
id={controller.vc.id}
|
||||
onCancel={() => controller.setRevoking(false)}
|
||||
onRevoke={controller.REVOKE_VC}
|
||||
/>
|
||||
)}
|
||||
|
||||
{controller.toastVisible && <ToastItem message={controller.message} />}
|
||||
</Modal>
|
||||
);
|
||||
|
||||
@@ -20,10 +20,6 @@ import {
|
||||
} from '../../machines/VCItemMachine/commonSelectors';
|
||||
import {
|
||||
selectIsAcceptingOtpInput,
|
||||
selectIsAcceptingRevokeInput,
|
||||
selectIsLockingVc,
|
||||
selectIsRevokingVc,
|
||||
selectIsLoggingRevoke,
|
||||
selectVc,
|
||||
ExistingMosipVCItemEvents,
|
||||
ExistingMosipVCItemMachine,
|
||||
@@ -32,32 +28,22 @@ import {
|
||||
import {selectPasscode} from '../../machines/auth';
|
||||
import {biometricsMachine, selectIsSuccess} from '../../machines/biometrics';
|
||||
|
||||
export function useViewVcModal({
|
||||
vcItemActor,
|
||||
isVisible,
|
||||
onRevokeDelete,
|
||||
}: ViewVcModalProps) {
|
||||
const {t} = useTranslation('ViewVcModal');
|
||||
export function useViewVcModal({vcItemActor, isVisible}: ViewVcModalProps) {
|
||||
const [toastVisible, setToastVisible] = useState(false);
|
||||
const [message, setMessage] = useState('');
|
||||
const [reAuthenticating, setReAuthenticating] = useState('');
|
||||
const [isRevoking, setRevoking] = useState(false);
|
||||
const [error, setError] = useState('');
|
||||
const {appService} = useContext(GlobalContext);
|
||||
const authService = appService.children.get('auth');
|
||||
const [, bioSend, bioService] = useMachine(biometricsMachine);
|
||||
|
||||
const isSuccessBio = useSelector(bioService, selectIsSuccess);
|
||||
const isLockingVc = useSelector(vcItemActor, selectIsLockingVc);
|
||||
const isRevokingVc = useSelector(vcItemActor, selectIsRevokingVc);
|
||||
const isLoggingRevoke = useSelector(vcItemActor, selectIsLoggingRevoke);
|
||||
const vc = useSelector(vcItemActor, selectVc);
|
||||
const otError = useSelector(vcItemActor, selectOtpError);
|
||||
const onSuccess = () => {
|
||||
bioSend({type: 'SET_IS_AVAILABLE', data: true});
|
||||
setError('');
|
||||
setReAuthenticating('');
|
||||
vcItemActor.send(ExistingMosipVCItemEvents.LOCK_VC());
|
||||
};
|
||||
|
||||
const onError = (value: string) => {
|
||||
@@ -85,28 +71,10 @@ export function useViewVcModal({
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
if (isLockingVc) {
|
||||
showToast(vc.locked ? t('success.locked') : t('success.unlocked'));
|
||||
}
|
||||
if (isRevokingVc) {
|
||||
showToast(t('success.revoked', {vid: vc.id}));
|
||||
}
|
||||
if (isLoggingRevoke) {
|
||||
vcItemActor.send(ExistingMosipVCItemEvents.DISMISS());
|
||||
onRevokeDelete();
|
||||
}
|
||||
if (isSuccessBio && reAuthenticating != '') {
|
||||
onSuccess();
|
||||
}
|
||||
}, [
|
||||
reAuthenticating,
|
||||
isLockingVc,
|
||||
isSuccessBio,
|
||||
otError,
|
||||
isRevokingVc,
|
||||
isLoggingRevoke,
|
||||
vc,
|
||||
]);
|
||||
}, [reAuthenticating, isSuccessBio, otError, vc]);
|
||||
|
||||
useEffect(() => {
|
||||
vcItemActor.send(ExistingMosipVCItemEvents.REFRESH());
|
||||
@@ -122,14 +90,6 @@ export function useViewVcModal({
|
||||
selectBindingAuthFailedError,
|
||||
),
|
||||
reAuthenticating,
|
||||
isRevoking,
|
||||
|
||||
isLockingVc,
|
||||
isAcceptingOtpInput: useSelector(vcItemActor, selectIsAcceptingOtpInput),
|
||||
isAcceptingRevokeInput: useSelector(
|
||||
vcItemActor,
|
||||
selectIsAcceptingRevokeInput,
|
||||
),
|
||||
storedPasscode: useSelector(authService, selectPasscode),
|
||||
isBindingOtp: useSelector(vcItemActor, selectRequestBindingOtp),
|
||||
isAcceptingBindingOtp: useSelector(vcItemActor, selectAcceptingBindingOtp),
|
||||
@@ -148,33 +108,18 @@ export function useViewVcModal({
|
||||
isPhoneNumber: useSelector(vcItemActor, selectIsPhoneNumber),
|
||||
isEmail: useSelector(vcItemActor, selectIsEmail),
|
||||
|
||||
CONFIRM_REVOKE_VC: () => {
|
||||
setRevoking(true);
|
||||
},
|
||||
REVOKE_VC: () => {
|
||||
vcItemActor.send(ExistingMosipVCItemEvents.REVOKE_VC());
|
||||
setRevoking(false);
|
||||
},
|
||||
setReAuthenticating,
|
||||
setRevoking,
|
||||
onError,
|
||||
addtoWallet: () => {
|
||||
vcItemActor.send(ExistingMosipVCItemEvents.ADD_WALLET_BINDING_ID());
|
||||
},
|
||||
lockVc: () => {
|
||||
vcItemActor.send(ExistingMosipVCItemEvents.LOCK_VC());
|
||||
},
|
||||
inputOtp: (otp: string) => {
|
||||
netInfoFetch(otp);
|
||||
},
|
||||
revokeVc: (otp: string) => {
|
||||
netInfoFetch(otp);
|
||||
},
|
||||
ADD_WALLET: () =>
|
||||
vcItemActor.send(ExistingMosipVCItemEvents.ADD_WALLET_BINDING_ID()),
|
||||
onSuccess,
|
||||
DISMISS: () => vcItemActor.send(ExistingMosipVCItemEvents.DISMISS()),
|
||||
LOCK_VC: () => vcItemActor.send(ExistingMosipVCItemEvents.LOCK_VC()),
|
||||
INPUT_OTP: (otp: string) =>
|
||||
vcItemActor.send(ExistingMosipVCItemEvents.INPUT_OTP(otp)),
|
||||
RESEND_OTP: () => vcItemActor.send(ExistingMosipVCItemEvents.RESEND_OTP()),
|
||||
@@ -186,6 +131,5 @@ export function useViewVcModal({
|
||||
export interface ViewVcModalProps extends ModalProps {
|
||||
vcItemActor: ActorRefFrom<typeof ExistingMosipVCItemMachine>;
|
||||
onDismiss: () => void;
|
||||
onRevokeDelete: () => void;
|
||||
activeTab: Number;
|
||||
}
|
||||
|
||||
@@ -82,10 +82,10 @@ export const HomeScreenLayout: React.FC<RootRouteProps> = props => {
|
||||
const [isRTL] = useState(I18nManager.isRTL);
|
||||
|
||||
var HomeScreenOptions = {
|
||||
headerLeft: () => (isIOS() || !isRTL) ? SvgImage.InjiLogo() : screenOptions,
|
||||
headerLeft: () => (isIOS() || !isRTL ? SvgImage.InjiLogo() : screenOptions),
|
||||
headerTitle: '',
|
||||
headerRight: () =>
|
||||
(isIOS() || !isRTL) ? screenOptions : SvgImage.InjiLogo(),
|
||||
isIOS() || !isRTL ? screenOptions : SvgImage.InjiLogo(),
|
||||
};
|
||||
|
||||
return (
|
||||
|
||||
@@ -72,9 +72,6 @@ export const ReceivedCardsModal: React.FC<ReceivedCardsProps> = ({
|
||||
isVisible={controller.isViewingVc}
|
||||
onDismiss={controller.DISMISS_MODAL}
|
||||
vcItemActor={controller.selectedVc}
|
||||
onRevokeDelete={() => {
|
||||
controller.REVOKE();
|
||||
}}
|
||||
activeTab={controller.activeTab}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -1,190 +0,0 @@
|
||||
import React from 'react';
|
||||
import {
|
||||
Dimensions,
|
||||
I18nManager,
|
||||
RefreshControl,
|
||||
SafeAreaView,
|
||||
View,
|
||||
} from 'react-native';
|
||||
import {Divider, Icon, ListItem, Overlay} from 'react-native-elements';
|
||||
import {Button, Column, Centered, Row, Text} from '../../components/ui';
|
||||
import {VidItem} from '../../components/VidItem';
|
||||
import {Theme} from '../../components/ui/styleUtils';
|
||||
import {ToastItem} from '../../components/ui/ToastItem';
|
||||
import {OIDcAuthenticationOverlay} from '../../components/OIDcAuthModal';
|
||||
import {useTranslation} from 'react-i18next';
|
||||
import {useRevoke} from './RevokeController';
|
||||
|
||||
// Intentionally hidden using {display:'none'} - Refer mosip/inji/issue#607
|
||||
export const Revoke: React.FC<RevokeScreenProps> = props => {
|
||||
const controller = useRevoke();
|
||||
const {t} = useTranslation('ProfileScreen');
|
||||
|
||||
return (
|
||||
<ListItem
|
||||
bottomDivider
|
||||
onPress={() => controller.setAuthenticating(true)}
|
||||
style={{display: 'none'}}>
|
||||
<Icon
|
||||
name={props.Icon}
|
||||
type="font-awesome"
|
||||
size={20}
|
||||
color={Theme.Colors.Icon}
|
||||
/>
|
||||
<ListItem.Content>
|
||||
<ListItem.Title>
|
||||
<Text weight="semibold">{props.label}</Text>
|
||||
</ListItem.Title>
|
||||
</ListItem.Content>
|
||||
<Overlay
|
||||
overlayStyle={{padding: 0}}
|
||||
isVisible={controller.isViewing}
|
||||
onBackdropPress={() => controller.setIsViewing(false)}>
|
||||
<SafeAreaView>
|
||||
{controller.toastVisible && (
|
||||
<ToastItem message={controller.message} />
|
||||
)}
|
||||
<View style={Theme.RevokeStyles.view}>
|
||||
<Row align="center" crossAlign="center" margin="0 0 10 0">
|
||||
<View style={Theme.RevokeStyles.buttonContainer}>
|
||||
<Button
|
||||
type="clear"
|
||||
icon={
|
||||
<Icon
|
||||
name={
|
||||
I18nManager.isRTL ? 'chevron-right' : 'chevron-left'
|
||||
}
|
||||
color={Theme.Colors.Icon}
|
||||
/>
|
||||
}
|
||||
title=""
|
||||
onPress={() => controller.setIsViewing(false)}
|
||||
/>
|
||||
</View>
|
||||
<Text size="small">{t('revokeHeader')}</Text>
|
||||
</Row>
|
||||
<Divider />
|
||||
<Row style={Theme.RevokeStyles.rowStyle} fill>
|
||||
<View style={Theme.RevokeStyles.revokeView}>
|
||||
{controller.uniqueVidsMetadata.length > 0 && (
|
||||
<Column
|
||||
scroll
|
||||
refreshControl={
|
||||
<RefreshControl
|
||||
refreshing={controller.isRefreshingVcs}
|
||||
onRefresh={controller.REFRESH}
|
||||
/>
|
||||
}>
|
||||
{controller.uniqueVidsMetadata.map((vcMetadata, index) => {
|
||||
return (
|
||||
<VidItem
|
||||
key={`${vcMetadata.getVcKey()}-${index}`}
|
||||
vcMetadata={vcMetadata}
|
||||
margin="0 2 8 2"
|
||||
onPress={controller.selectVcItem(
|
||||
index,
|
||||
vcMetadata.getVcKey(),
|
||||
)}
|
||||
selectable
|
||||
selected={controller.selectedVidUniqueIds.includes(
|
||||
vcMetadata.getVcKey(),
|
||||
)}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
</Column>
|
||||
)}
|
||||
{controller.uniqueVidsMetadata.length === 0 && (
|
||||
<React.Fragment>
|
||||
<Centered fill>
|
||||
<Text weight="semibold" margin="0 0 8 0">
|
||||
{t('empty')}
|
||||
</Text>
|
||||
</Centered>
|
||||
</React.Fragment>
|
||||
)}
|
||||
</View>
|
||||
<Column margin="0 20">
|
||||
<Button
|
||||
disabled={controller.selectedVidUniqueIds.length === 0}
|
||||
title={t('revokeHeader')}
|
||||
onPress={controller.CONFIRM_REVOKE_VC}
|
||||
/>
|
||||
</Column>
|
||||
</Row>
|
||||
</View>
|
||||
</SafeAreaView>
|
||||
{controller.isRevoking && (
|
||||
<View style={Theme.RevokeStyles.viewContainer}>
|
||||
<Centered fill>
|
||||
<Column
|
||||
width={Dimensions.get('screen').width * 0.8}
|
||||
style={Theme.RevokeStyles.boxContainer}>
|
||||
<Text weight="semibold" margin="0 0 12 0">
|
||||
{t('revokeLabel')}
|
||||
</Text>
|
||||
<Text margin="0 0 12 0">
|
||||
{t('revokingVids', {
|
||||
count: controller.selectedVidUniqueIds.length,
|
||||
})}
|
||||
</Text>
|
||||
{controller.selectedVidUniqueIds.map((uniqueId, index) => (
|
||||
<View style={Theme.RevokeStyles.flexRow} key={index}>
|
||||
<Text margin="0 8" weight="bold">
|
||||
{'\u2022'}
|
||||
</Text>
|
||||
<Text margin="0 0 0 0" weight="bold">
|
||||
{/*TODO: Change this to UIN? and Optimize*/}
|
||||
{
|
||||
controller.uniqueVidsMetadata.find(
|
||||
metadata => metadata.getVcKey() === uniqueId,
|
||||
)?.id
|
||||
}
|
||||
</Text>
|
||||
</View>
|
||||
))}
|
||||
<Text margin="12 0">{t('revokingVidsAfter')}</Text>
|
||||
<Row>
|
||||
<Button
|
||||
fill
|
||||
type="clear"
|
||||
title={t('cancel')}
|
||||
onPress={() => controller.setRevoking(false)}
|
||||
/>
|
||||
<Button
|
||||
fill
|
||||
title={t('revokeLabel')}
|
||||
onPress={controller.REVOKE_VC}
|
||||
/>
|
||||
</Row>
|
||||
</Column>
|
||||
</Centered>
|
||||
</View>
|
||||
)}
|
||||
</Overlay>
|
||||
|
||||
<OIDcAuthenticationOverlay
|
||||
isVisible={controller.isAuthenticating}
|
||||
onDismiss={() => controller.setAuthenticating(false)}
|
||||
onVerify={() => {
|
||||
controller.setAuthenticating(false);
|
||||
controller.setIsViewing(true);
|
||||
}}
|
||||
/>
|
||||
|
||||
<OIDcAuthenticationOverlay
|
||||
isVisible={controller.isAcceptingOtpInput}
|
||||
onDismiss={controller.DISMISS}
|
||||
onVerify={() => {
|
||||
controller.setIsViewing(true);
|
||||
controller.revokeVc('111111');
|
||||
}}
|
||||
/>
|
||||
</ListItem>
|
||||
);
|
||||
};
|
||||
|
||||
interface RevokeScreenProps {
|
||||
label: string;
|
||||
Icon: string;
|
||||
}
|
||||
@@ -1,131 +0,0 @@
|
||||
import {useSelector} from '@xstate/react';
|
||||
import {useContext, useEffect, useState} from 'react';
|
||||
import NetInfo from '@react-native-community/netinfo';
|
||||
import {GlobalContext} from '../../shared/GlobalContext';
|
||||
import {
|
||||
selectIsRefreshingMyVcs,
|
||||
selectMyVcsMetadata,
|
||||
VcEvents,
|
||||
} from '../../machines/vc';
|
||||
import {ExistingMosipVCItemMachine} from '../../machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine';
|
||||
import {useTranslation} from 'react-i18next';
|
||||
|
||||
import {
|
||||
RevokeVidsEvents,
|
||||
selectIsAcceptingOtpInput,
|
||||
selectIsRevokingVc,
|
||||
selectIsLoggingRevoke,
|
||||
} from '../../machines/revoke';
|
||||
|
||||
import {ActorRefFrom} from 'xstate';
|
||||
|
||||
export function useRevoke() {
|
||||
const {t} = useTranslation('ProfileScreen');
|
||||
const {appService} = useContext(GlobalContext);
|
||||
const vcService = appService.children.get('vc');
|
||||
const revokeService = appService.children.get('RevokeVids');
|
||||
const vcsMetadata = useSelector(vcService, selectMyVcsMetadata);
|
||||
const isRevokingVc = useSelector(revokeService, selectIsRevokingVc);
|
||||
const isLoggingRevoke = useSelector(revokeService, selectIsLoggingRevoke);
|
||||
const isAcceptingOtpInput = useSelector(
|
||||
revokeService,
|
||||
selectIsAcceptingOtpInput,
|
||||
);
|
||||
|
||||
const [isRevoking, setRevoking] = useState(false);
|
||||
const [isAuthenticating, setAuthenticating] = useState(false);
|
||||
const [isViewing, setIsViewing] = useState(false);
|
||||
const [toastVisible, setToastVisible] = useState(false);
|
||||
const [message, setMessage] = useState('');
|
||||
const [selectedIndex, setSelectedIndex] = useState<number>(null);
|
||||
const [selectedVidUniqueIds, setSelectedVidUniqueIds] = useState<string[]>(
|
||||
[],
|
||||
);
|
||||
|
||||
const vidsMetadata = vcsMetadata.filter(
|
||||
vcMetadata => vcMetadata.idType === 'VID',
|
||||
);
|
||||
|
||||
const selectVcItem = (index: number, vcUniqueId: string) => {
|
||||
return () => {
|
||||
setSelectedIndex(index);
|
||||
if (selectedVidUniqueIds.includes(vcUniqueId)) {
|
||||
setSelectedVidUniqueIds(
|
||||
selectedVidUniqueIds.filter(item => item !== vcUniqueId),
|
||||
);
|
||||
} else {
|
||||
setSelectedVidUniqueIds(prevArray => [...prevArray, vcUniqueId]);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
const showToast = (message: string) => {
|
||||
setToastVisible(true);
|
||||
setMessage(message);
|
||||
setTimeout(() => {
|
||||
setToastVisible(false);
|
||||
setMessage('');
|
||||
}, 3000);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
if (isRevokingVc) {
|
||||
setSelectedVidUniqueIds([]);
|
||||
showToast(t('revokeSuccessful'));
|
||||
}
|
||||
if (isLoggingRevoke) {
|
||||
revokeService.send(RevokeVidsEvents.DISMISS());
|
||||
vcService.send(VcEvents.REFRESH_MY_VCS());
|
||||
}
|
||||
}, [isRevokingVc, isLoggingRevoke]);
|
||||
|
||||
return {
|
||||
error: '',
|
||||
isAcceptingOtpInput,
|
||||
isAuthenticating,
|
||||
isRefreshingVcs: useSelector(vcService, selectIsRefreshingMyVcs),
|
||||
isRevoking,
|
||||
isViewing,
|
||||
message,
|
||||
selectedIndex,
|
||||
selectedVidUniqueIds,
|
||||
toastVisible,
|
||||
uniqueVidsMetadata: vidsMetadata.filter(
|
||||
(vcMetadata, index, vid) => vid.indexOf(vcMetadata) === index,
|
||||
),
|
||||
|
||||
CONFIRM_REVOKE_VC: () => {
|
||||
setRevoking(true);
|
||||
},
|
||||
DISMISS: () => {
|
||||
revokeService.send(RevokeVidsEvents.DISMISS());
|
||||
},
|
||||
INPUT_OTP: (otp: string) =>
|
||||
revokeService.send(RevokeVidsEvents.INPUT_OTP(otp)),
|
||||
REFRESH: () => vcService.send(VcEvents.REFRESH_MY_VCS()),
|
||||
REVOKE_VC: () => {
|
||||
revokeService.send(RevokeVidsEvents.REVOKE_VCS(selectedVidUniqueIds));
|
||||
setRevoking(false);
|
||||
//since nested modals/overlays don't work in ios, we need to toggle revoke screen
|
||||
setIsViewing(false);
|
||||
},
|
||||
revokeVc: (otp: string) => {
|
||||
NetInfo.fetch().then(state => {
|
||||
if (state.isConnected) {
|
||||
revokeService.send(RevokeVidsEvents.INPUT_OTP(otp));
|
||||
} else {
|
||||
revokeService.send(RevokeVidsEvents.DISMISS());
|
||||
showToast('Request network failed');
|
||||
}
|
||||
});
|
||||
},
|
||||
setAuthenticating,
|
||||
selectVcItem,
|
||||
setIsViewing,
|
||||
setRevoking,
|
||||
};
|
||||
}
|
||||
|
||||
export interface RevokeProps {
|
||||
service: ActorRefFrom<typeof ExistingMosipVCItemMachine>;
|
||||
}
|
||||
@@ -8,7 +8,6 @@ import {scanMachine} from '../machines/bleShare/scan/scanMachine';
|
||||
import {settingsMachine} from '../machines/settings';
|
||||
import {storeMachine} from '../machines/store';
|
||||
import {vcMachine} from '../machines/VCItemMachine/vc';
|
||||
import {revokeVidsMachine} from '../machines/revoke';
|
||||
import {backupMachine} from '../machines/backupAndRestore/backup';
|
||||
import {backupRestoreMachine} from '../machines/backupAndRestore/backupRestore';
|
||||
|
||||
@@ -26,7 +25,6 @@ export interface AppServices {
|
||||
activityLog: ActorRefFrom<typeof activityLogMachine>;
|
||||
request: ActorRefFrom<typeof requestMachine>;
|
||||
scan: ActorRefFrom<typeof scanMachine>;
|
||||
revoke: ActorRefFrom<typeof revokeVidsMachine>;
|
||||
backup: ActorRefFrom<typeof backupMachine>;
|
||||
backupRestore: ActorRefFrom<typeof backupRestoreMachine>;
|
||||
}
|
||||
|
||||
@@ -68,18 +68,6 @@ export const API_URLS: ApiUrls = {
|
||||
method: 'POST',
|
||||
buildURL: (): `/${string}` => '/residentmobileapp/credentialshare/download',
|
||||
},
|
||||
authLock: {
|
||||
method: 'POST',
|
||||
buildURL: (): `/${string}` => '/residentmobileapp/req/auth/lock',
|
||||
},
|
||||
authUnLock: {
|
||||
method: 'POST',
|
||||
buildURL: (): `/${string}` => '/residentmobileapp/req/auth/unlock',
|
||||
},
|
||||
requestRevoke: {
|
||||
method: 'PATCH',
|
||||
buildURL: (id: string): `/${string}` => `/residentmobileapp/vid/${id}`,
|
||||
},
|
||||
linkTransaction: {
|
||||
method: 'POST',
|
||||
buildURL: (): `/${string}` =>
|
||||
@@ -345,9 +333,6 @@ type ApiUrls = {
|
||||
credentialRequest: Api_Params;
|
||||
credentialStatus: Api_Params;
|
||||
credentialDownload: Api_Params;
|
||||
authLock: Api_Params;
|
||||
authUnLock: Api_Params;
|
||||
requestRevoke: Api_Params;
|
||||
linkTransaction: Api_Params;
|
||||
authenticate: Api_Params;
|
||||
sendConsent: Api_Params;
|
||||
|
||||
@@ -9,7 +9,6 @@ export const TelemetryConstants = {
|
||||
vcActivationFromKebab: 'VC Activation from kebab popup',
|
||||
appOnboarding: 'App Onboarding',
|
||||
appLogin: 'App Login',
|
||||
vcLockOrRevoke: 'VC Lock / VC Revoke',
|
||||
getVcUsingAid: 'Get VC using AID',
|
||||
fetchData: 'Fetch Data',
|
||||
dataBackup: 'Data Backup',
|
||||
|
||||
@@ -11,7 +11,6 @@ export interface VC {
|
||||
requestId: string;
|
||||
isVerified: boolean;
|
||||
lastVerifiedOn: number;
|
||||
locked: boolean;
|
||||
shouldVerifyPresence?: boolean;
|
||||
walletBindingResponse?: WalletBindingResponse;
|
||||
credentialRegistry?: string;
|
||||
|
||||
Reference in New Issue
Block a user