mirror of
https://github.com/mosip/inji-wallet.git
synced 2026-01-09 13:38:01 -05:00
[INJIMOB-3058]temp commit2 [INJIMOB-3058]temp commit2 [INJIMOB-3058] add support for pre-auth flow by credential-offer [INJIMOB-3187] animo working chcekpoint Signed-off-by: Abhishek Paul <paul.apaul.abhishek.ap@gmail.com>
708 lines
26 KiB
TypeScript
708 lines
26 KiB
TypeScript
import {EventFrom, sendParent} from 'xstate';
|
|
import {IssuersModel} from './IssuersModel';
|
|
import {IssuersActions} from './IssuersActions';
|
|
import {IssuersService} from './IssuersService';
|
|
import {IssuersGuards} from './IssuersGuards';
|
|
import {CredentialTypes} from '../VerifiableCredential/VCMetaMachine/vc';
|
|
|
|
const model = IssuersModel;
|
|
|
|
export const IssuerScreenTabEvents = model.events;
|
|
export const Issuer_Tab_Ref_Id = 'issuersMachine';
|
|
|
|
export const IssuersMachine = model.createMachine(
|
|
{
|
|
/** @xstate-layout N4IgpgJg5mDOIC5QEtawK5gE6wLIEMBjAC2QDswA6CVABwBt8BPASTUxwGIIB7Cy8gDceAayqoM2PEVL8asBszaScCIT0L4ALsj4BtAAwBdQ0cShaPWMh19zIAB6IATAE4AbAA5KBzwFZPTwAWAHZ-MNcggBoQJkR3P2cfTwSARncDNxTXAF8cmIkOaRJyKnlFVnYpTmwsHixKRS0AM3qAWwEqnAISuTpGSpVYNTJhTVsyU1N7S2sJ+ycENy9kgOCwvwjo2MQAZlSQylSPY5Cg50DPVxC8gq7i2Spa+s4AFQAlAE0AfQBBAHFfiwAHLTJAgWY2XRkBaIIIGXaUAJ+SIIoKhZzOdzbOIIY6Ivzw3xnfzuTEXW4gQpSHqPSjPLBvL5-QEgvSpMzgyHzcGLXZeJKbTwGBK7C6pILuXYxXGuTxJELOEKpPypfzOAyJSnU7oyUr0rB1RkfH4AoGg5ycixWKF2XmIRUyuGpZyIq6u3ZBfbuVzpbX3Wn6hmcd4AUQAyqHXt9Q+93gB5d5g61zaGwhD8xVIsIivxizwSqVOvEGEKuSi7TXojL+dG7G75KkBvX8WBgehgQg6MhQZQcTjhgDCv2B30HYYAIqHga8WL8ADLfeMAMWXse+AEV3mP41PkxCbTzQIs3AFVoFQuErjjEGqQn5KM4vUFPPtIq5Mu5-UNA63253u17LpOAneMAHVgXneNfgnb4WAnfduTTe0EDJBFKFcDxzkyIJNguYssRWY4lTLPxCV2T1vyKX8qDbDsu3IICVAHUN51DQdXlDWCWHDcMAFVY0Qw9kOPeJnGLc5QiRF90XODI1SCKiaRbKhCCwSAwDIHR8HoCceAAdzIegeHwCBlzqNp42aZpsG4PhxFGURxGbXpVPUiBNO03SDKMkyzIsqybKwEYxm0aEpmMGZhLtUSlkibxfDWS8hUiAjrgMSh-FLAwVRCGsRSU3VXMoNSNK05AdL0wzjNM8yeEs6zbIZRpGBadpOh-FSSvczyKu86q-LqhqgpCjQwv0YwhNTGLHBcDwEv8C8Ni2Ysy3LeViSle8DDlL9Gx1B59VKjzysqnyav8+rAqaw16ha7RWiwDoDpo7qyq8qrfNqgLGuC9RxnCyaOSi6aYRQ5YFqS5brwk1IMpCM4DgSPx3Dyr09ruTriuO3qzoG76rt+zgAAUExXb4ww3ATw1eKbbTB2LUgOYtC1SSgQl2QlCUwnbAj8QrDv4HHTv6r7LuG2zfj414AAkY2BCdifjEFozDQdQxYAA1Li6aPWaMw1B8zmcF0UkCZYJN9ShcIMUsgmOTIxVcfn9pculhY+87Bp+oK3gADR3KcKdDKmI1pyKuWihn9aZkJi0CNmAmI-wXT8UtUgF16Pb6z6LqG66GjbMgIFeBxB3jDy7P4dQxA66iuuzvGxfz37KCLkuy4rsBRoBiaTAjlN6fTNPESfE37yCOVVXlVa5SOLF60rXZnaXzOG56kXc+9wmgrbzSO-LyvmqaR7nrdo6N89-HxYLvfi9Lw-u-+8bJkmgeD1B4f0PceT4TWr0Z47AQCEAwQRpKvlcMvJmyNnBr2xpfHOXsCYSwaGIJgBAyD4BgG0Tye8tDhn-F2SAABpMATAq4OWELXF6693qIOvi3XeaCMFYLADgrSeCCH0S0CQshPcX4RStB-IeKFFQZSrF4PM5wXSpGlEA2Oo9QGulVMvdwao4HuwQU3POPtsCUGYfgTB2DcFtnwYQnhEBSHkOPq1U+ddlLwLodo7eKD9FkJYcYjhpiuEAV4UwfhExBEgxEbFCG551hXlSvItUiJrhnGxMENUBZdgaIvk40WOid56IMUYthuCYBaCscTfAyAsBDSsbALQ9QwAUIEI5ah58hZaIyS42+OTWHsK0JQApRSSllIshUqp6kAmA37kIpCM0TyhHcBWeUZxFQSlTizA4ijzic1kScfwqSmnpK3sgtp7jDEdPyWAQpZDimlPKWQyp1Sai3QaCfdqNDHEnSvs3XRqDDm5M6d005vTLkDOuUMp+jle6vzGcEvWiwxE+EJJIz0JsTZyNxC6H+7N5QmzkmcSBGdXZY00bspBN9W7tM8V0np5y+lXKYDc9SdyjT3Tak9exRUCWvPoe8rJnz0FHLJb8s5TALn9PqoM6pIy+7snGVHdMbgwjhOSiteReZEQZGcCjVGk8fQu0xvXF5uMWn7JJV845HCKWCqpYCmlwL6V3Uecy55bL9V7OJUw41fKzVCupbSkFoVAmTUtJCkSMdOZgPrJPBGeYV6vhZvsQ41Z6xM1VEqc42y3KEoYR8txPLvm4PQG2LAg5DGEHbB2CAAAhXQOCtBYGQIQJkppWSgnfhM6O0KNSwslP4BFMjkW3n2GAi4SKVTomdh4VNb12XOMNa67NJqul5uwIWsgxb6ClorfVU5Na61hkjNGWMCYkzNuleDea8roZRJRSA7w9tVQHBAfyHKDYdUOMdZvIljDsluryaazS2BtBgH+YyXg1d6nOXxWkydBqXWftne639WB-2AfFeC3WQbFh3gfJPTF-I06ZExCzNViIyy23IrIqsKS8W6tfW8zJrjSXfq6YQPglSsDoC7MTOoPBmi1JrmBqjEGnXvszfRn5TGyAsbY1oDjPAuPIaCZHT+4NpmzOTQs+2aqY3oWOFtZezslRknHY3KDH7uUeIYyVZj1bJPSa4zah5tinmNLTZB51Jms1mdE5Z1j7HOPNDk2-KVinQnXEhktSJN48Sc28MRnKmxnZhALOO3g18+zYDAiWkQZAfI8dAyywWZQiWpawOl1dmWfL+YhQpkJ+sto+HvYipU1xNgSTVWA+86Qdqugxbi59rL9TJbFkVkr9AyuGTs4yuxDr+uFa6MN0bZAKuocmXsAU2ZhSinFJKXtGYyKPjw-e+EKRYGUZfdN6+g5mmvCYLQOAOWqF8dO3IIlF30lXZu8MZ+frKuDyhbeNVSRxT-ZFAcK4sMzg+Fwh+JmemMZNnA0987l3ru3ZsQ9Rz8OCuI9e8jj7oKBEBcDctjMy9MqqhRkdz0ngywReXpsHw2InyRBfNiJLz2kfvfrSyc0S3W1-cSI+AsQO1ERBa6jSgZJdiBARK6WRuFx10QAoxF7kG3s1OHMCdW84efpjhuJIBkv+QVglGKbKCRNXy-MUr9nNTIxsQ4lxMck5pyzgXN8V4nxiahm1yhJmevcQJtHu1x2b50RPrh-x-gImTGnJ8UQyxZC7tOTy69KPXiY-mL8Yto9QX9ZikOGWLw1PXx-2ZkAp8cNHzYsgfE7msOpuR6-T87xGf4-WPuRN9HEeqCp66c37hmfPujO94zaej5PQUQRr6SsngCJ5SSGslEKMDhqgKidvrDfYPmY9RakVQLbnAcoUn+v3fG8nIFZ6y13qs+Beq+h0frovT1jLGRmfZeJTeFRrmOLUpMTavD49k-TfH5bfAFXfK1W5VHJlM+DHdzXlLfP5SlUAtoUVYZQfCVbPW-PYJUdmeaIvT0dOOOMvfYAHe8E2K4YIKHcdHvflQDL1a1SAybJzWAnNH9c-HfZAvfVAvHL7SVQnXnPERIbwB-CfZ-afAiSeNmaXbac4OUV8Kg0-Vg2gy-eg9vO1aArvZgudGgxA4VDg8Arg31IfANKrX7BADwJIWOZfLwXwMecQpmDCZeUsAIW2OGOvJg6ghdAtItEtSAddKtLdTnM0NkDA0wvPHAwveKfA5UQg3EZRcsCNWRMkCXVGNwmAjw-NJdFdNdStTdWtEMCMKMGMOMRMYfGOQQsfR-SfF-AiH+B8YIPMHKA3CIeQoAk5CgBDHhQDRPBpNIhQ8leDRDHQ6-PgnXe-cfJ-KfXwAiMeR8ZnT0Vwcva4VnLHSDWAboh7dfTHMWZXfVXHQw9Am-UwtwSXM9cLYsfYNUJELKNRBYsjJYtffLagNndJNYhgzvAAp4lY3Y4YkwtDW8K4NmY4RIH+dZMifwAifYa9UBZ2JGcvPKZY7Y5pV41Qhze1JggbC6HYkWPYsaHg4GX4onMJRKMLFKCLE2CUDCH0QIBJNRXCMPY-T4xEl48bNQ5PLqDEvyLEryHEsFKYYwn7P4uKFYYkiJUk4sPMNmL0NEMkSBb0ek9E541YzgdXTXUok8U9EUhVGGMvC4eI+UL0M4IkRIP-Bkjk0yLkvqWASgTwzInw8tHI6tPIk0LnYIw4wUtVBIeeSeFGX-SNAiFUGZSeJ2aXCidVBEzEpE60jI7w1dXwh0gIndQo-dEokI9052ULUUxVWIyXGZB9DmdIDmWScdQQbAZAZoJgK3dJdYtk4qEsmtcsysyDH4gUonT0IiKUTCciBGe2c410Q4H0H0LCRUM2eUmAusssisnsC0nSFk1E9Qj48chsqc5pZs4RUIztI4Ds52A0xGc42OCHGw1Gfkb0RSB416RcycqAac+gWctHNEsc0spcq8lctAlDfEls-gts7wdIXTLs3csvSIB8J2KnOGSIWRCjXrR44gQxCADsTWQcTWR82tF+ZcEpegdAOlRM6MbWd4FgZcH4ZMw9N0onNRNOWFXMc4YUe2bbNwW2I4O8bCMib0+XIZRiashk2lRiVcltdMNREnJUCiRFBOX0c4kUDKU4XwF0TESUZ2cdZAWCtXeMXAYmNiTiBCVMonAM8sDwHafEJmXXbbdEKnJEfTBIUkXCY7SC16eSjsZUkcVUjS-gxICSb08XJmW2H+MIZUF2RsLLDyeAcEY-EYlCAAWlcBZhFAPNtmiuiqZiS36CUHuGCtimcrL2CAF0SBww1FthTTPK6gZGStz1p2tmCDFDIjUXAvcHFOOArACFwiDOVHSEsv-02L3m4UYiK0Kr5BCyRE1AlFCF1w1Vnx9HZmVFLHrCp0VBNKYKM1cw+S6viHCqAU2HERfH5GCFdDJDlzyr1TfQzS5QEAUoWqWBSIrHRnlEgVfC1QI0yGtkgSVExF8HlDkJ2uow5Vo1vnbgfi7mOvzAwjyjIkAp-lor8Hjg8HZlAU5hNg1U1AgpaseNmqEwOp72OvRDZjVRzGRBAp7PkRFG0tlKnixFCH5EM2aTmuRr6M4RbysVRquEfCFE1EWmVBxpRVyjuouP0qdnrFJvTU5To0ppAN0JQLAGOt9ySB-nhFCF9B-gRBiL+wWIwklC9A1ElEas8B5pcyRv5taI4RtJjOyI3UdMIFpvLHrDTjhmmVltfxRVDIrERSX3igZw1sE32u1o8zaL-U6J0NFuxDAR2gTRRh2hynw3kTcCSEiClAN0eugWdr2r5oOR1sYy82s182OsxEuNwkrEVBNkyEVDlrxDDsVsjtfGjr9FerO0G1mwyyy0Ml+vRFJwDIpxfGp1FxmQupAQXiyh63htejNIgGvNVwCo-PTA8ERGymILzAvFARazzGtjI0lwLACE5mmpgIVwYmXOxxu1FvKMysoqp1py9FhmMpASnhARRByhaPdq0l+qWtiOktGrIhFGXmFEF0vrgKb3T371b2OqpwIkJEOHVH8AWMSSlDfpYP6LYKQOFuOo5gynhC2sNgS2uAhOMq9Cnx-mdnInVvLo3yvvnWjOXTtL8NyONoJP4OMtjhVuFzFEzAhLpwjSUTzDyhSLAa0JgHaMGPNVKVFrVTZlfHPqa0yDlBQbjUcJkKvUf3DM5KRNFtKqOBhylDJ2RBZmuBmUwk9Gh35HUdHI0L7uvKtJspFrIZlXTjq1zuDt8FCGmJRAwmhJFGev4akfNMjL1sIdjPtMNq3TToonLHREENkRRFwjzAhIOGtlAUCDLHH0X2LMfMvOvN+qfHEv9tkWUUIj3LcHovdEaISCwnHWguLjgoQqQrBVQuQHQvUl+oS3F0ZwerIkrE1FEpynF3Sn5AuEuB0Y+M4p7FRttkRCwx2h-hB2tr2BVGi22gyE5jRElDkqOuMZ92Z2tgyEgUSEVHiwiyMoSiVDwlkQOFVFZwoFFsVDAVwOJuIMXpcpSFGvvDMtAVhryDyCAA */
|
|
predictableActionArguments: true,
|
|
preserveActionOrder: true,
|
|
id: Issuer_Tab_Ref_Id,
|
|
context: model.initialContext,
|
|
initial: 'displayIssuers',
|
|
tsTypes: {} as import('./IssuersMachine.typegen').Typegen0,
|
|
schema: {
|
|
context: model.initialContext,
|
|
events: {} as EventFrom<typeof model>,
|
|
},
|
|
states: {
|
|
displayIssuers: {
|
|
description: 'displays the issuers downloaded from the server',
|
|
invoke: {
|
|
src: 'downloadIssuersList',
|
|
onDone: {
|
|
actions: [
|
|
'sendImpressionEvent',
|
|
'setIssuers',
|
|
'resetLoadingReason',
|
|
],
|
|
target: 'selectingIssuer',
|
|
},
|
|
onError: {
|
|
actions: ['setError'],
|
|
target: 'error',
|
|
},
|
|
},
|
|
},
|
|
|
|
error: {
|
|
description: 'reaches here when any error happens',
|
|
on: {
|
|
TRY_AGAIN: [
|
|
{
|
|
cond: 'shouldFetchIssuersAgain',
|
|
actions: ['setLoadingReasonAsDisplayIssuers', 'resetError'],
|
|
target: 'displayIssuers',
|
|
},
|
|
{
|
|
cond: 'canSelectIssuerAgain',
|
|
actions: 'resetError',
|
|
target: 'selectingIssuer',
|
|
},
|
|
{
|
|
cond: 'isCredentialOfferFlow',
|
|
actions: ['setLoadingReasonAsSettingUp', 'resetError'],
|
|
target: 'selectingIssuer',
|
|
},
|
|
{
|
|
actions: ['setLoadingReasonAsSettingUp', 'resetError'],
|
|
target: 'downloadIssuerWellknown',
|
|
},
|
|
],
|
|
RESET_ERROR: {
|
|
actions: 'resetError',
|
|
target: 'selectingIssuer',
|
|
},
|
|
},
|
|
},
|
|
|
|
selectingIssuer: {
|
|
description: 'waits for the user to select any issuer',
|
|
on: {
|
|
SCAN_CREDENTIAL_OFFER_QR_CODE: {
|
|
target: 'waitingForQrScan',
|
|
},
|
|
DOWNLOAD_ID: {
|
|
actions: sendParent('DOWNLOAD_ID'),
|
|
},
|
|
SELECTED_ISSUER: {
|
|
actions: [
|
|
model.assign({
|
|
authEndpointToOpen: () => false,
|
|
}),
|
|
'setSelectedIssuerId',
|
|
'setLoadingReasonAsSettingUp',
|
|
'setSelectedIssuers',
|
|
],
|
|
target: 'downloadIssuerWellknown',
|
|
},
|
|
},
|
|
},
|
|
waitingForQrScan: {
|
|
description: 'waits for the user to scan the QR code',
|
|
on: {
|
|
QR_CODE_SCANNED: {
|
|
actions: ['setLoadingReasonAsDownloadingCredentials', 'setQrData'],
|
|
target: 'credentialDownloadFromOffer',
|
|
},
|
|
CANCEL: {
|
|
actions: ['resetQrData', 'resetLoadingReason'],
|
|
target: 'selectingIssuer',
|
|
},
|
|
},
|
|
},
|
|
|
|
credentialDownloadFromOffer: {
|
|
invoke: {
|
|
src: 'downloadCredentialFromOffer',
|
|
onDone: {
|
|
actions: [
|
|
'setCredential',
|
|
model.assign({
|
|
authEndpointToOpen: false,
|
|
}),
|
|
],
|
|
target: 'proccessingCredential',
|
|
},
|
|
onError: [
|
|
{
|
|
cond: 'isGenericError',
|
|
actions: [
|
|
'resetSelectedCredentialType',
|
|
'setError',
|
|
'resetLoadingReason',
|
|
'sendDownloadingFailedToVcMeta',
|
|
],
|
|
target: 'error',
|
|
},
|
|
{
|
|
actions: ['setError', 'resetLoadingReason'],
|
|
target: 'error',
|
|
},
|
|
],
|
|
},
|
|
on: {
|
|
PROOF_REQUEST: {
|
|
actions: [
|
|
'setCredentialOfferIssuer',
|
|
'setCredentialOfferIssuerWellknownResponse',
|
|
'setOfferCredentialTypeContexts',
|
|
],
|
|
target: '.keyManagement',
|
|
},
|
|
AUTH_ENDPOINT_RECEIVED: {
|
|
actions: [
|
|
model.assign({
|
|
authEndpointToOpen: () => true,
|
|
authEndpoint: (_, event) => event.authEndpoint,
|
|
}),
|
|
],
|
|
},
|
|
TX_CODE_REQUEST: {
|
|
actions: ['setRequestTxCode', 'setTxCodeDisplayDetails'],
|
|
target: '.waitingForTxCode',
|
|
},
|
|
TRUST_ISSUER_CONSENT_REQUEST: {
|
|
actions: [
|
|
'setRequestConsentToTrustIssuer',
|
|
'setIssuerDisplayDetails',
|
|
],
|
|
target: '.credentialOfferDownloadConsent',
|
|
},
|
|
CANCEL: {
|
|
actions: [
|
|
'resetLoadingReason',
|
|
'resetQrData',
|
|
'resetRequestTxCode',
|
|
'resetRequestConsentToTrustIssuer',
|
|
],
|
|
target: '#issuersMachine.selectingIssuer',
|
|
},
|
|
},
|
|
states: {
|
|
idle: {},
|
|
credentialOfferDownloadConsent: {
|
|
description:
|
|
'waits for the user to give consent to download the credential offer',
|
|
on: {
|
|
CANCEL: {
|
|
actions: [
|
|
'resetQrData',
|
|
'resetLoadingReason',
|
|
'resetRequestConsentToTrustIssuer',
|
|
],
|
|
target: 'sendConsentNotGiven',
|
|
},
|
|
ON_CONSENT_GIVEN: {
|
|
actions: [
|
|
'setLoadingReasonAsDownloadingCredentials',
|
|
'resetRequestConsentToTrustIssuer',
|
|
'setQrData',
|
|
],
|
|
target: 'sendConsentGiven',
|
|
},
|
|
},
|
|
},
|
|
sendConsentNotGiven: {
|
|
invoke: {
|
|
src: 'sendConsentNotGiven',
|
|
onDone: {
|
|
target: '#issuersMachine.selectingIssuer',
|
|
},
|
|
},
|
|
},
|
|
sendConsentGiven: {
|
|
invoke: {
|
|
src: 'sendConsentGiven',
|
|
onDone: {
|
|
target: '#issuersMachine.credentialDownloadFromOffer.idle',
|
|
},
|
|
onError: {
|
|
actions: [
|
|
'resetCredentialOfferIssuer',
|
|
'resetLoadingReason',
|
|
'resetQrData',
|
|
'resetRequestConsentToTrustIssuer',
|
|
],
|
|
target: '#issuersMachine.selectingIssuer',
|
|
},
|
|
},
|
|
},
|
|
waitingForTxCode: {
|
|
on: {
|
|
CANCEL: {
|
|
actions: [
|
|
'resetLoadingReason',
|
|
'resetQrData',
|
|
'resetRequestTxCode',
|
|
],
|
|
target: '#issuersMachine.selectingIssuer',
|
|
},
|
|
TX_CODE_RECEIVED: {
|
|
actions: ['setTxCode', 'resetRequestTxCode'],
|
|
target: 'sendTxCode',
|
|
},
|
|
},
|
|
},
|
|
sendTxCode: {
|
|
invoke: {
|
|
src: 'sendTxCode',
|
|
onDone: {
|
|
target: '#issuersMachine.credentialDownloadFromOffer.idle',
|
|
},
|
|
onError: {
|
|
actions: [
|
|
'resetCredentialOfferIssuer',
|
|
'resetLoadingReason',
|
|
'resetQrData',
|
|
'resetRequestTxCode',
|
|
],
|
|
target: '#issuersMachine.selectingIssuer',
|
|
},
|
|
},
|
|
},
|
|
keyManagement: {
|
|
initial: 'setSelectedKey',
|
|
states: {
|
|
setSelectedKey: {
|
|
invoke: {
|
|
src: 'getKeyOrderList',
|
|
onDone: {
|
|
actions: ['setSelectedKey'],
|
|
target: 'getKeyPairFromKeystore',
|
|
},
|
|
onError: {
|
|
actions: [
|
|
'resetSelectedCredentialType',
|
|
'setError',
|
|
'resetLoadingReason',
|
|
'sendDownloadingFailedToVcMeta',
|
|
],
|
|
target: '#issuersMachine.selectingIssuer',
|
|
},
|
|
},
|
|
},
|
|
getKeyPairFromKeystore: {
|
|
invoke: {
|
|
src: 'getKeyPair',
|
|
onDone: {
|
|
actions: ['loadKeyPair'],
|
|
target: 'constructProof',
|
|
},
|
|
onError: [
|
|
{
|
|
cond: 'hasUserCancelledBiometric',
|
|
target: 'userCancelledBiometric',
|
|
},
|
|
{
|
|
cond: 'isKeyTypeNotFound',
|
|
actions: [
|
|
'resetSelectedCredentialType',
|
|
'setError',
|
|
'resetLoadingReason',
|
|
'sendDownloadingFailedToVcMeta',
|
|
],
|
|
target: '#issuersMachine.selectingIssuer',
|
|
},
|
|
{
|
|
target: 'generateKeyPair',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
userCancelledBiometric: {
|
|
on: {
|
|
TRY_AGAIN: {
|
|
actions: ['setLoadingReasonAsDownloadingCredentials'],
|
|
target: 'getKeyPairFromKeystore',
|
|
},
|
|
RESET_ERROR: {
|
|
actions: 'resetLoadingReason',
|
|
target: '#issuersMachine.selectingIssuer',
|
|
},
|
|
},
|
|
},
|
|
generateKeyPair: {
|
|
invoke: {
|
|
src: 'generateKeyPair',
|
|
onDone: {
|
|
actions: [
|
|
'setPublicKey',
|
|
'setPrivateKey',
|
|
'setLoadingReasonAsDownloadingCredentials',
|
|
'storeKeyPair',
|
|
],
|
|
target: 'constructProof',
|
|
},
|
|
},
|
|
},
|
|
constructProof: {
|
|
invoke: {
|
|
src: 'constructProof',
|
|
onDone: {
|
|
target: '#issuersMachine.credentialDownloadFromOffer.idle',
|
|
},
|
|
onError: {
|
|
actions: [
|
|
'resetSelectedCredentialType',
|
|
'setError',
|
|
'resetLoadingReason',
|
|
'sendDownloadingFailedToVcMeta',
|
|
],
|
|
target: '#issuersMachine.selectingIssuer',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
proccessingCredential: {
|
|
invoke: {
|
|
src: 'updateCredential',
|
|
onDone: {
|
|
actions: [
|
|
'setVerifiableCredential',
|
|
'setCredentialWrapper',
|
|
'sendSuccessEndEvent',
|
|
'setVerificationResult', // to be modified after verification is implemented for external issuers
|
|
],
|
|
target: 'storing',
|
|
},
|
|
},
|
|
},
|
|
|
|
downloadIssuerWellknown: {
|
|
invoke: {
|
|
src: 'downloadIssuerWellknown',
|
|
onDone: {
|
|
actions: [
|
|
'updateIssuerFromWellknown',
|
|
'updateSelectedIssuerWellknownResponse',
|
|
],
|
|
target: 'getCredentialTypes'
|
|
},
|
|
onError: {
|
|
actions: ['setNetworkOrTechnicalError', 'resetLoadingReason'],
|
|
target: 'error',
|
|
},
|
|
},
|
|
},
|
|
|
|
getCredentialTypes: {
|
|
on: {
|
|
TRY_AGAIN: {
|
|
actions: ['downloadIssuerWellknown'],
|
|
target: 'idle',
|
|
},
|
|
},
|
|
invoke: {
|
|
src: 'getCredentialTypes',
|
|
onDone: {
|
|
actions: 'setSupportedCredentialTypes',
|
|
target: 'selectingCredentialType',
|
|
},
|
|
onError: {
|
|
actions: [
|
|
'setCredentialTypeListDownloadFailureError',
|
|
'resetLoadingReason',
|
|
],
|
|
target: 'error',
|
|
},
|
|
},
|
|
},
|
|
|
|
selectingCredentialType: {
|
|
on: {
|
|
CANCEL: {
|
|
target: 'displayIssuers',
|
|
},
|
|
SELECTED_CREDENTIAL_TYPE: {
|
|
actions: 'setSelectedCredentialType',
|
|
target: 'downloadCredentials',
|
|
},
|
|
},
|
|
},
|
|
|
|
downloadCredentials: {
|
|
entry: ['setLoadingReasonAsDownloadingCredentials'],
|
|
invoke: {
|
|
src: 'downloadCredential',
|
|
onDone: {
|
|
actions: [
|
|
'setVerifiableCredential',
|
|
'setCredentialWrapper',
|
|
model.assign({
|
|
authEndpointToOpen: false,
|
|
}),
|
|
],
|
|
target: 'verifyingCredential',
|
|
},
|
|
onError: [
|
|
{
|
|
cond: 'hasUserCancelledBiometric',
|
|
target: '.userCancelledBiometric',
|
|
},
|
|
{
|
|
cond: 'isGenericError',
|
|
actions: [
|
|
'resetSelectedCredentialType',
|
|
'setError',
|
|
'resetLoadingReason',
|
|
'sendDownloadingFailedToVcMeta',
|
|
],
|
|
target: 'selectingIssuer',
|
|
},
|
|
{
|
|
actions: ['setError', 'resetLoadingReason'],
|
|
target: 'error',
|
|
},
|
|
],
|
|
},
|
|
on: {
|
|
AUTH_ENDPOINT_RECEIVED: {
|
|
actions: [
|
|
model.assign({
|
|
authEndpointToOpen: () => true,
|
|
authEndpoint: (_, event) => event.authEndpoint,
|
|
}),
|
|
],
|
|
},
|
|
PROOF_REQUEST: {
|
|
actions: ['setAccessToken', 'setCNonce'],
|
|
target: '.keyManagement',
|
|
},
|
|
CANCEL: {
|
|
target: 'selectingIssuer',
|
|
actions: ['resetSelectedCredentialType', 'resetLoadingReason'],
|
|
},
|
|
},
|
|
initial: 'idle',
|
|
states: {
|
|
idle: {},
|
|
constructProof: {
|
|
invoke: {
|
|
src: 'constructProofForTrustedIssuers',
|
|
onDone: {
|
|
target: '#issuersMachine.downloadCredentials.idle',
|
|
},
|
|
onError: [
|
|
{
|
|
cond: 'hasUserCancelledBiometric',
|
|
target: 'userCancelledBiometric',
|
|
},
|
|
{
|
|
actions: [
|
|
'resetSelectedCredentialType',
|
|
'setError',
|
|
'resetLoadingReason',
|
|
'sendDownloadingFailedToVcMeta',
|
|
],
|
|
target: '#issuersMachine.error',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
userCancelledBiometric: {
|
|
on: {
|
|
TRY_AGAIN: {
|
|
target: 'constructProof',
|
|
},
|
|
RESET_ERROR: {
|
|
actions: 'resetLoadingReason',
|
|
target: '#issuersMachine.selectingIssuer',
|
|
},
|
|
},
|
|
},
|
|
keyManagement: {
|
|
initial: 'setSelectedKey',
|
|
states: {
|
|
setSelectedKey: {
|
|
invoke: {
|
|
src: 'getKeyOrderList',
|
|
onDone: {
|
|
actions: ['setSelectedKey'],
|
|
target: 'getKeyPairFromKeystore',
|
|
},
|
|
onError: {
|
|
actions: [
|
|
'resetSelectedCredentialType',
|
|
'setError',
|
|
'resetLoadingReason',
|
|
'sendDownloadingFailedToVcMeta',
|
|
],
|
|
target: '#issuersMachine.selectingIssuer',
|
|
},
|
|
},
|
|
},
|
|
getKeyPairFromKeystore: {
|
|
invoke: {
|
|
src: 'getKeyPair',
|
|
onDone: {
|
|
actions: ['loadKeyPair'],
|
|
target:
|
|
'#issuersMachine.downloadCredentials.constructProof',
|
|
},
|
|
onError: [
|
|
{
|
|
cond: 'hasUserCancelledBiometric',
|
|
target: 'userCancelledBiometric',
|
|
},
|
|
{
|
|
cond: 'isKeyTypeNotFound',
|
|
actions: [
|
|
'resetSelectedCredentialType',
|
|
'setError',
|
|
'resetLoadingReason',
|
|
'sendDownloadingFailedToVcMeta',
|
|
],
|
|
target: '#issuersMachine.selectingIssuer',
|
|
},
|
|
{
|
|
target: 'generateKeyPair',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
userCancelledBiometric: {
|
|
on: {
|
|
TRY_AGAIN: {
|
|
target: 'getKeyPairFromKeystore',
|
|
},
|
|
RESET_ERROR: {
|
|
actions: 'resetLoadingReason',
|
|
target: '#issuersMachine.selectingIssuer',
|
|
},
|
|
},
|
|
},
|
|
generateKeyPair: {
|
|
invoke: {
|
|
src: 'generateKeyPair',
|
|
onDone: {
|
|
actions: [
|
|
'setPublicKey',
|
|
'setPrivateKey',
|
|
'setLoadingReasonAsDownloadingCredentials',
|
|
'storeKeyPair',
|
|
],
|
|
target: '#issuersMachine.downloadCredentials',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
verifyingCredential: {
|
|
invoke: {
|
|
src: 'verifyCredential',
|
|
onDone: {
|
|
actions: ['sendSuccessEndEvent', 'setVerificationResult'],
|
|
target: 'storing',
|
|
},
|
|
onError: [
|
|
{
|
|
cond: 'isVerificationPendingBecauseOfNetworkIssue',
|
|
actions: ['resetLoadingReason', 'resetVerificationResult'],
|
|
target: 'storing',
|
|
},
|
|
{
|
|
actions: [
|
|
'resetLoadingReason',
|
|
'sendErrorEndEvent',
|
|
'updateVerificationErrorMessage',
|
|
],
|
|
target: 'handleVCVerificationFailure',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
|
|
handleVCVerificationFailure: {
|
|
on: {
|
|
RESET_VERIFY_ERROR: {
|
|
actions: ['resetVerificationErrorMessage'],
|
|
},
|
|
},
|
|
},
|
|
|
|
storing: {
|
|
entry: [
|
|
'setVCMetadata',
|
|
'setMetadataInCredentialData',
|
|
'storeVerifiableCredentialMeta',
|
|
'storeVerifiableCredentialData',
|
|
'storeVcsContext',
|
|
'storeVcMetaContext',
|
|
'logDownloaded',
|
|
],
|
|
invoke: {
|
|
src: 'isUserSignedAlready',
|
|
onDone: {
|
|
cond: 'isSignedIn',
|
|
actions: ['sendBackupEvent'],
|
|
},
|
|
},
|
|
},
|
|
|
|
idle: {
|
|
on: {
|
|
COMPLETED: {
|
|
target: 'done',
|
|
},
|
|
CANCEL: {
|
|
target: 'selectingIssuer',
|
|
},
|
|
},
|
|
},
|
|
|
|
done: {
|
|
type: 'final',
|
|
},
|
|
},
|
|
},
|
|
{
|
|
actions: IssuersActions(model),
|
|
services: IssuersService(),
|
|
guards: IssuersGuards(),
|
|
},
|
|
);
|
|
|
|
// --- Interfaces ---
|
|
|
|
export interface logoType {
|
|
url: string;
|
|
alt_text: string;
|
|
}
|
|
|
|
export interface displayType {
|
|
name: string;
|
|
locale: string;
|
|
language: string;
|
|
logo: logoType;
|
|
background_color: string;
|
|
background_image: {uri: string};
|
|
text_color: string;
|
|
title: string;
|
|
description: string;
|
|
}
|
|
|
|
export interface issuerType {
|
|
issuer_id: string;
|
|
credential_issuer: string;
|
|
protocol: string;
|
|
client_id: string;
|
|
'.well-known': string;
|
|
redirect_uri: string;
|
|
token_endpoint: string;
|
|
proxy_token_endpoint: string;
|
|
credential_endpoint: string;
|
|
credential_audience: string;
|
|
credential_configurations_supported: object;
|
|
display: [displayType];
|
|
credentialTypes: [CredentialTypes];
|
|
authorizationEndpoint: string;
|
|
grants: object;
|
|
credential_issuer_host: string;
|
|
authorization_servers: [string];
|
|
}
|