@startuml
'https://plantuml.com/class-diagram

skinparam classFontColor 007BFF
skinparam classFontSize 12
skinparam classFontName Aapex
skinparam backgroundColor white
skinparam minClassWidth 155
skinparam nodesep 34
skinparam ranksep 70

skinparam class {
BorderColor 007BFF
ArrowColor 007BFF
BackgroundColor white
}

skinparam interface {
BorderColor 007BFF
ArrowColor 007BFF
}

skinparam note {
BorderColor 007BFF
BackgroundColor 7ACFF5
}

package "Issuer or Verifier" {
class Backend {
 - enterpriseWallet
 }
}

Backend -> EnterpriseWallet: has
Backend .right.> LegalEntityService: interacts with
LegalEntityService -> EnterpriseWallet
LegalEntityService <|-- RelyingParty
RelyingParty <|-- TrustedIssuer
TrustedIssuer <|-- EOS

'EnterpriseWallet ..> EOS: onboards >
'UserWallet ..> EOS: onboards >

package "Holder App" {
class App
}

App -> UserWallet: has

class EnterpriseWallet {
+ createDid()
+ requestVerifiableCredential(credentialRequestUri: String)
+ getVerifiableCredential(didOwnershipReq: String, didOfLegalEntity: String)
+ generateDidAuthRequest()
+ validateDidAuthResponse(didAuthResp: String)
+ generateOidcAuthRequest()
+ token(oidcAuthResp: String)
+ requestVerifiableAuthorization()
}

class UserWallet {
+ createDid()
+ oidcAuthResponse(oidcAuthReq: String)
+ validateDidAuthRequest(didAuthRequest: String)
+ didAuthResponse(didAuthRequest: String)
+ requestAccessToken(verifiableAuthorization: String)
}

class LegalEntityService {
 - enterpriseWallet
}

class RelyingParty {
 + signOn(challenge: String)
 + callback(authResp: String)
 + getSession(id: String))
}

class TrustedIssuer {
 + signedChallenge(challenge: String)
 + requestVerifiableCredential(credentialRequestUri: String)
 + requestCredentialUri()
 + didOwnershipResponse(didOwnershipResp: String)
 + getCredential(id: String)
 + getCredentials()
}

class EOS {
 + onboards()
}

class App {
 - userWallet
}

App -[hidden]- Backend

@enduml
