π‘How it works
Below you can see how is the Meeco integration flow.
If you are using Mermaid Flow here is the script to help your visualization
```mermaid
sequenceDiagram
title OAuth Code flow w. SIOP // same device
autonumber
participant H as Holder
participant GUI as GuardianUI
participant W as Wallet
participant GW as ApiGateway
participant Au as AuthService
participant SVX as SVX API
H->>GUI: Open Guardian
GUI->>GW: Establish Websocket Connection
GW->>GW: Assign UUID as CID to the Connection and store in the memory
H->>GUI: Hit "Meeco Login" Button to Login by Meeco
GUI->>GW: Send WS Message MEECO_AUTH_REQUEST
GW->>+Au: Send NATS Message MEECO_AUTH_START {cid}
Au->>+SVX: Login to SVX
SVX-->>-Au: 201 OK (access_token: {access_token})
Au->>+SVX: POST /oidc/presentations/requests {presentationRequest}
SVX-->>-Au: 200 {presentationRequest}
Au->>+SVX: GET /me
SVX-->>-Au: 200 {me}
Au->>Au: exteract externaId from me.user.did
Au->>+SVX: GET /key_encryption_key
SVX-->>-Au: 200 {key_encryption_key}
Au->>+SVX: GET /keypairs/external_id/${externalId}
SVX-->>-Au: 200 {key_pairs}
Au->>Au: decrypt keypair by kek
Au->>Au: Sign presentationRequest.unsigned_jwt
Au->>+SVX: PUT /oidc/presentations/requests/${requestId} {signature}
SVX-->>-Au: {presentationRequest}
Au->>Au: Construct redirect_uri by presentationRequest.ID
Au-->>-GW: Send NATS Response on MEECO_AUTH_REQUEST {cid, redirect_uri}
par Submit VP
GW->>GW: Find Connection by cid
GW->>GUI: Send WS Message MEECO_AUTH_PRESENT_VP {redirect_uri}
GUI->>GUI: Show redirect_uri in QR Code
H->>W: Scan QR Code
H->>W: Select VC and Submit VP
W->>SVX: Submit for VP presentation request
and Get Submission
loop Every 10 Seconds
Au->>+SVX: POST /oidc/presentations/requests/${requestId}/submissions
SVX-->>-Au: 201 OK (submissions: {submissions})
break Submission received
Au->>Au: Verify Submission
alt Submission is Valid
Au->>Au: Exteract VC
Au->>GW: Send NATS message MEECO_VERIFY_VP {cid,credentailSubject,presentationRequestId,submissionIs}
GW->>GUI: Send WS MEECO_VERIFY_VP {credentailSubject,presentationRequestId,submissionIs}
else Submission is Invalid
Au->>GW: Send NATS message MEECO_VERIFY_VP_FAILED {cid,credentailSubject,error}
GW->>GUI: Send WS MEECO_VERIFY_VP_FAILED {error}
end
end
break after 120 Seconds
Au->>GW: Send NATS message MEECO_VERIFY_VP_FAILED {cid,error}
GW->>GW: Find Connection by cid
GW->>GUI: Send WS Message MEECO_VERIFY_VP_FAILED {error}
end
end
end
alt MEECO_VERIFY_VP_FAILED
GUI->>GUI: Render Error Message
GUI->>GUI: Return to initial State
else MEECO_VERIFY_VP
GUI->>GUI: Render VC Subject
alt Approve VC Subject
H->>GUI: hit Approve button
GUI->>GW: Send WS message MEECO_APPROVE_SUBMISSION_RESPONSE {presentationRequestId,submissionId}
GW->>+Au: Send NATS message MEECO_APPROVE_SUBMISSION {cid,presentationRequestId,submissionId}
Au->>+SVX: PATCH /oidc/presentations/requests/${requestId}/submissions/${submissionId} {submisiion: {status: "verified}}
SVX-->>-Au: 200 OK
Au->>Au: generate JWT
Au-->>-GW: {cid,JWT}
else Reject VC Subject
H->>GUI: hit Reject button
GUI->>GW: Send WS message MEECO_REJECT_SUBMISSION_RESPONSE {presentationRequestId,submissionId}
GW->>+Au: Send NATS message MEECO_REJECT_SUBMISSION {cid,presentationRequestId,submissionId}
Au->>+SVX: PATCH /oidc/presentations/requests/${requestId}/submissions/${submissionId} {submisiion: {status: "rejected"}}
SVX-->>-Au: 200 OK
Au-->>-GW: {cid,OK}
end
end
```
Last updated