1.1.0 • Published 2 months ago

infra-did-js v1.1.0

Weekly downloads
-
License
MIT
Repository
github
Last release
2 months ago

Infra DID Javascript Library

Feature provided by infra-did-js library

  • Infra DID Creation
  • update DID attributes (service endpoint)
  • update Pub-Key DID owner key
  • revoke Pub-Key DID
  • add/update/remove trusted Pub-Key DID & Account DID
  • get trusted Pub-Key DID & Account DID
  • VC/VP creation/verification using did-jwt-vc library

READEME for SS58

README for SS58

Infra DID API Configuration

import InfraDID from 'infra-did-js'

const confBlockchainNetwork = {
  networkId: '01',
  registryContract: 'infradidregi',
  rpcEndpoint: 'https://api.testnet.infrablockchain.com',
  txfeePayerAccount: 'txfeepayeraa',
  txfeePayerPrivateKey: 'TXFEE_PAYER_PRIVATE_KEY'
}
const conf = {
  ...confBlockchainNetwork,
  did: `did:infra:01:PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU`,
  didOwnerPrivateKey: 'DID_OWNER_PRIVATE_KEY'
}
const didApi = new InfraDID(conf)

Infra DID Creation

currently secp256k1 curve is supported

const pubKeyDID = InfraDID.createPubKeyDIDsecp256k1(networkId)
console.log({ pubKeyDID })
{
  pubKeyDID: {
    did: 'did:infra:01:PUB_K1_8KeFXUKBR9kctm3eafs2tgqK3XxcqsnHtRp2kjSdfDFSn3x4bK',
    publicKey: 'PUB_K1_8KeFXUKBR9kctm3eafs2tgqK3XxcqsnHtRp2kjSdfDFSn3x4bK',
    privateKey: 'PVT_K1_bNrCcAYzMox6JANhwSpNSq5e1e8bXbu3kL6aNvCCRQR5aEfFg'
  }
}

Update DID attributes

Set Pub-Key DID Attribute

const conf = {
  ...confBlockchainNetwork,
  did: `did:infra:${networkId}:PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU`,
  didOwnerPrivateKey: 'PVT_K1_PRIVATE_KEY'
}

const didApi = new InfraDID(conf)
const res = await didApi.setAttributePubKeyDID(
  'svc/MessagingService',
  'https://infradid.com/pk/3/mysvcr9'
)
console.log(res.transaction_id)

Remove Pub-Key DID Attribute

const didApi = new InfraDID(conf)
const res = await didApi.setAttributePubKeyDID('svc/MessagingService', '')
console.log(res.transaction_id)

Clear Pub-Key DID chain data

const conf = {
  ...confBlockchainNetwork,
  did: `did:infra:${networkId}:PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU`,
  didOwnerPrivateKey: 'PVT_K1_PRIVATE_KEY'
}

const didApi = new InfraDID(conf)
const res = await didApi.clearPubKeyDID()
console.log(res.transaction_id)

Set Account-based DID Attribute

const conf = {
  ...confBlockchainNetwork,
  did: `did:infra:01:jghpykcpaoko`,
  didOwnerPrivateKey: 'PVT_K1_PRIVATE_KEY'
}

const didApi = new InfraDID(conf)
const res = await didApi.setAttributeAccountDID(
  'svc/MessagingService',
  'https://infradid.com/acc/1/mysvcr7'
)
console.log(res.transaction_id)

Update Pub-Key DID owner key

const conf = {
  ...confBlockchainNetwork,
  did: `did:infra:01:PUB_K1_5TaEgpVur391dimVnFCDHB122DXYBbwWdKUpEJCNv3ko1KMYwz`,
  didOwnerPrivateKey: 'PVT_K1_PRIVATE_KEY'
}

const didApi = new InfraDID(conf)
const res = await await didApi.changeOwnerPubKeyDID(
  'PUB_K1_584qGNgteYFppoisbDz6vBFArrw3As8qeeRCekLepG4pJVrhJt'
)
console.log(res.transaction_id)

Revoke Pub-Key DID

const conf = {
  ...confBlockchainNetwork,
  did: `did:infra:${networkId}:PUB_K1_5TaEgpVur391dimVnFCDHB122DXYBbwWdKUpEJCNv3ko1KMYwz`,
  didOwnerPrivateKey: 'PVT_K1_PRIVATE_KEY'
}

const didApi = new InfraDID(conf)
const resRevoke = await didApi.revokePubKeyDID()
console.log(resRevoke.transaction_id)

Add Trusted Pub-Key DID

const conf = {
  ...confDefaults,
  did: `did:infra:${networkId}:PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU`,
  didOwnerPrivateKey: 'PVT_K1_tSwgNjuLyhyGo96qadzzqkaA5tfwMeAfreQzWo652gVPxiVLA'
}

const didApi = new InfraDID(conf)
const resAdd: any = await didApi.registerTrustedPubKeyDID(
  txfeePayerAccount,
  'PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU',
  JSON.stringif({ type: 'issuer' })
)
console.log({ resAdd })

Update Trusted Pub-Key DID

const conf = {
  ...confDefaults,
  did: `did:infra:${networkId}:PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU`,
  didOwnerPrivateKey: 'PVT_K1_tSwgNjuLyhyGo96qadzzqkaA5tfwMeAfreQzWo652gVPxiVLA'
}

const didApi = new InfraDID(conf)
const resUpdate: any = await didApi.updateTrustedPubKeyDID(
  txfeePayerAccount,
  'PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU',
  JSON.stringif({ type: 'verifier' })
)
console.log({ resUpdate })

Remove Trusted Pub-Key DID

const conf = {
  ...confDefaults,
  did: `did:infra:${networkId}:PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU`,
  didOwnerPrivateKey: 'PVT_K1_tSwgNjuLyhyGo96qadzzqkaA5tfwMeAfreQzWo652gVPxiVLA'
}

const didApi = new InfraDID(conf)
const resRemove: any = await didApi.removeTrustedPubKeyDID(
  txfeePayerAccount,
  'PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU'
)
console.log({ resRemove })

Get Trusted Pub-Key DID By Authorizer

const conf = {
  ...confDefaults,
  did: `did:infra:${networkId}:PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU`,
  didOwnerPrivateKey: 'PVT_K1_tSwgNjuLyhyGo96qadzzqkaA5tfwMeAfreQzWo652gVPxiVLA'
}

const didApi = new InfraDID(conf)
const resGet: any = await didApi.getTrustedPubKeyDIDByAuthorizer(
  txfeePayerAccount
)
console.log({ resGet })

Get Trusted Pub-Key DID By Target

const conf = {
  ...confDefaults,
  did: `did:infra:${networkId}:PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU`,
  didOwnerPrivateKey: 'PVT_K1_tSwgNjuLyhyGo96qadzzqkaA5tfwMeAfreQzWo652gVPxiVLA'
}

const didApi = new InfraDID(conf)
const resGet: any = await didApi.getTrustedPubKeyDIDByTarget(
  'PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU'
)
console.log({ resGet })

Get Trusted Pub-Key DID By Authorizer and Target

const conf = {
  ...confDefaults,
  did: `did:infra:${networkId}:PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU`,
  didOwnerPrivateKey: 'PVT_K1_tSwgNjuLyhyGo96qadzzqkaA5tfwMeAfreQzWo652gVPxiVLA'
}

const didApi = new InfraDID(conf)
const resGet: any = await didApi.getTrustedPubKeyDID(
  txfeePayerAccount,
  'PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU'
)
console.log({ resGet })

Add Trusted Account DID

const conf = {
  did: `did:infra:${networkId}:${account}`,
  didOwnerPrivateKey: accountPrivateKey,
  networkId,
  registryContract,
  rpcEndpoint
}

const didApi = new InfraDID(conf)
const resAdd: any = await didApi.registerTrustedAccountDID(
  txfeePayerAccount,
  conf.did.split(':')[3],
  JSON.stringify({ type: 'issuer' })
)
console.log({ resAdd })

Update Trusted Account DID

const conf = {
  did: `did:infra:${networkId}:${account}`,
  didOwnerPrivateKey: accountPrivateKey,
  networkId,
  registryContract,
  rpcEndpoint
}

const didApi = new InfraDID(conf)
const resUpdate: any = await didApi.updateTrustedAccountDID(
  txfeePayerAccount,
  conf.did.split(':')[3],
  JSON.stringify({ type: 'verifier' })
)
console.log({ resUpdate })

Remove Trusted Account DID

const conf = {
  did: `did:infra:${networkId}:${account}`,
  didOwnerPrivateKey: accountPrivateKey,
  networkId,
  registryContract,
  rpcEndpoint
}

const didApi = new InfraDID(conf)
const resRemove: boolean = await didApi.removeTrustedAccountDID(
  txfeePayerAccount,
  conf.did.split(':')[3]
)
console.log({ resRemove })

Get Trusted Account DID By Authorizer

const conf = {
  did: `did:infra:${networkId}:${account}`,
  didOwnerPrivateKey: accountPrivateKey,
  networkId,
  registryContract,
  rpcEndpoint
}

const didApi = new InfraDID(conf)
const resGet: any = await didApi.getTrustedAccountDIDByAuthorizer(
  txfeePayerAccount
)
console.log({ resGet })

Get Trusted Account DID By Target

const conf = {
  did: `did:infra:${networkId}:${account}`,
  didOwnerPrivateKey: accountPrivateKey,
  networkId,
  registryContract,
  rpcEndpoint
}

const didApi = new InfraDID(conf)
const resGet: any = await didApi.getTrustedAccountDIDByTarget(
  conf.did.split(':')[3]
)
console.log({ resGet })

Get Trusted Account DID By Authorizer and Target

const conf = {
  did: `did:infra:${networkId}:${account}`,
  didOwnerPrivateKey: accountPrivateKey,
  networkId,
  registryContract,
  rpcEndpoint
}

const didApi = new InfraDID(conf)
const resGet: any = await didApi.getTrustedAccountDID(
  txfeePayerAccount,
  conf.did.split(':')[3]
)
console.log({ resGet })

Issuing and Verifying W3C Verifiable Credential (VC), Verifiable Presentation (VP) using did-jwt-vc library

import InfraDID from 'infra-did-js'
import { Resolver } from 'did-resolver'
import { getResolver } from 'infra-did-resolver'
import {
  createVerifiableCredentialJwt,
  verifyCredential,
  createVerifiablePresentationJwt,
  verifyPresentation,
  CredentialPayload,
  PresentationPayload,
  VerifiableCredential
} from 'did-jwt-vc'

const infraDidResolverConfig = {
  networks: [
    {
      networkId,
      registryContract,
      rpcEndpoint
    }
  ]
}

const infraDidResolver = getResolver(infraDidResolverConfig)
const didResolver = new Resolver({ ...infraDidResolver })

Create and Verify Verifiable Credential Jwt

const vcIssuerDidConf = {
  ...confDefaults,
  did: `did:infra:01:PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU`,
  didOwnerPrivateKey: 'PVT_K1_tSwgNjuLyhyGo96qadzzqkaA5tfwMeAfreQzWo652gVPxiVLA'
}

const vcSubjectDid = `did:infra:01:PUB_K1_7jCDarXnZ3SdPAwfFEciTSyUzA4fnfnktvFH9Fj7J89UrFiHpt`

const issuerDidApi = new InfraDID(vcIssuerDidConf)
const issuer = issuerDidApi.getJwtVcIssuer()
const credential: CredentialPayload = {
  '@context': ['https://www.w3.org/2018/credentials/v1'],
  id: 'http://example.vc/credentials/123532',
  type: ['VerifiableCredential', 'VaccinationCredential'],
  issuer: vcIssuerDidConf.did,
  // issuanceDate: '2021-03-17T12:17:26.000Z',
  issuanceDate: new Date().toISOString(), //'2021-03-17T12:17:26.000Z',
  credentialSubject: {
    id: vcSubjectDid,
    claim1: 'claim1_value',
    claim2: 'claim2_value'
  }
}

const vcJWT = await createVerifiableCredentialJwt(credential, issuer)
const verifiedCredential = await verifyCredential(vcJWT, didResolver)
console.log(JSON.stringify(verifiedCredential, null, 3))

Verified Credential Result

{
  "payload": {
    "vc": {
      "credentialSubject": {
        "claim1": "claim1_value",
        "claim2": "claim2_value"
      },
      "@context": ["https://www.w3.org/2018/credentials/v1"],
      "type": ["VerifiableCredential", "VaccinationCredential"]
    },
    "sub": "did:infra:01:PUB_K1_7jCDarXnZ3SdPAwfFEciTSyUzA4fnfnktvFH9Fj7J89UrFiHpt",
    "jti": "http://example.vc/credentials/123532",
    "nbf": 1617358301,
    "iss": "did:infra:01:PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU"
  },
  "didResolutionResult": {
    "didResolutionMetadata": {
      "contentType": "application/did+ld+json"
    },
    "didDocument": {
      "@context": "https://www.w3.org/ns/did/v1",
      "id": "did:infra:01:PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU",
      "verificationMethod": [
        {
          "id": "did:infra:01:PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU#controller",
          "type": "EcdsaSecp256k1VerificationKey2019",
          "controller": "did:infra:01:PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU",
          "publicKeyHex": "03cdf359def0d227223b10fba97c3b786899c0cc33ffd6cc8d60ce709f489c4f47"
        }
      ],
      "authentication": [
        "did:infra:01:PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU#controller"
      ],
      "service": [
        {
          "id": "did:infra:01:PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU#service-1",
          "type": "MessagingService",
          "serviceEndpoint": "https://infradid.com/pk/3/mysvcr9"
        }
      ]
    },
    "didDocumentMetadata": {}
  },
  "issuer": "did:infra:01:PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU",
  "signer": {
    "id": "did:infra:01:PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU#controller",
    "type": "EcdsaSecp256k1VerificationKey2019",
    "controller": "did:infra:01:PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU",
    "publicKeyHex": "03cdf359def0d227223b10fba97c3b786899c0cc33ffd6cc8d60ce709f489c4f47"
  },
  "jwt": "eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJ2YyI6eyJjcmVkZW50aWFsU3ViamVjdCI6eyJjbGFpbTEiOiJjbGFpbTFfdmFsdWUiLCJjbGFpbTIiOiJjbGFpbTJfdmFsdWUifSwiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlZhY2NpbmF0aW9uQ3JlZGVudGlhbCJdfSwic3ViIjoiZGlkOmluZnJhOjAxOlBVQl9LMV83akNEYXJYblozU2RQQXdmRkVjaVRTeVV6QTRmbmZua3R2Rkg5Rmo3Sjg5VXJGaUhwdCIsImp0aSI6Imh0dHA6Ly9leGFtcGxlLnZjL2NyZWRlbnRpYWxzLzEyMzUzMiIsIm5iZiI6MTYxNzM1ODMwMSwiaXNzIjoiZGlkOmluZnJhOjAxOlBVQl9LMV84UHdHN29mNUI4cDlNcGF3Nlh6ZXlZdFNXSnllU1hWdHhaaFBIUUM1ZVp4WkNrcWlMVSJ9.ZByKShPxhKt2wlYsZQe6aGfxgjHuB1WW9X52cZjltMDLZEHJASXm7bsP5GwFG2dJtITYQ78NYgLXtLpRfLyxQQ",
  "verifiableCredential": {
    "credentialSubject": {
      "claim1": "claim1_value",
      "claim2": "claim2_value",
      "id": "did:infra:01:PUB_K1_7jCDarXnZ3SdPAwfFEciTSyUzA4fnfnktvFH9Fj7J89UrFiHpt"
    },
    "issuer": {
      "id": "did:infra:01:PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU"
    },
    "id": "http://example.vc/credentials/123532",
    "type": ["VerifiableCredential", "VaccinationCredential"],
    "@context": ["https://www.w3.org/2018/credentials/v1"],
    "issuanceDate": "2021-04-02T10:11:41.000Z",
    "proof": {
      "type": "JwtProof2020",
      "jwt": "eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJ2YyI6eyJjcmVkZW50aWFsU3ViamVjdCI6eyJjbGFpbTEiOiJjbGFpbTFfdmFsdWUiLCJjbGFpbTIiOiJjbGFpbTJfdmFsdWUifSwiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlZhY2NpbmF0aW9uQ3JlZGVudGlhbCJdfSwic3ViIjoiZGlkOmluZnJhOjAxOlBVQl9LMV83akNEYXJYblozU2RQQXdmRkVjaVRTeVV6QTRmbmZua3R2Rkg5Rmo3Sjg5VXJGaUhwdCIsImp0aSI6Imh0dHA6Ly9leGFtcGxlLnZjL2NyZWRlbnRpYWxzLzEyMzUzMiIsIm5iZiI6MTYxNzM1ODMwMSwiaXNzIjoiZGlkOmluZnJhOjAxOlBVQl9LMV84UHdHN29mNUI4cDlNcGF3Nlh6ZXlZdFNXSnllU1hWdHhaaFBIUUM1ZVp4WkNrcWlMVSJ9.ZByKShPxhKt2wlYsZQe6aGfxgjHuB1WW9X52cZjltMDLZEHJASXm7bsP5GwFG2dJtITYQ78NYgLXtLpRfLyxQQ"
    }
  }
}

Create and Verify Verifiable Presentation Jwt

const vcHolderDidConf = {
  ...confDefaults,
  did: `did:infra:01:PUB_K1_7jCDarXnZ3SdPAwfFEciTSyUzA4fnfnktvFH9Fj7J89UrFiHpt`,
  didOwnerPrivateKey:
    'PVT_K1_2NqB8nrfnd6Eqj46uQvvKXiwNj6rp7dp3iJjm4K86BJW4KGSVb'
}

const verifierDid = `did:infra:01:PUB_K1_5TaEgpVur391dimVnFCDHB122DXYBbwWdKUpEJCNv3ko1KMYwz`

const vcJWT =
  'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJ2YyI6eyJjcmVkZW50aWFsU3ViamVjdCI6eyJjbGFpbTEiOiJjbGFpbTFfdmFsdWUiLCJjbGFpbTIiOiJjbGFpbTJfdmFsdWUifSwiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlZhY2NpbmF0aW9uQ3JlZGVudGlhbCJdfSwic3ViIjoiZGlkOmluZnJhOjAxOlBVQl9LMV83akNEYXJYblozU2RQQXdmRkVjaVRTeVV6QTRmbmZua3R2Rkg5Rmo3Sjg5VXJGaUhwdCIsImp0aSI6Imh0dHA6Ly9leGFtcGxlLnZjL2NyZWRlbnRpYWxzLzEyMzUzMiIsIm5iZiI6MTYxNTk4NzExNywiaXNzIjoiZGlkOmluZnJhOjAxOlBVQl9LMV84UHdHN29mNUI4cDlNcGF3Nlh6ZXlZdFNXSnllU1hWdHhaaFBIUUM1ZVp4WkNrcWlMVSJ9.tGSAsEbF4bKb5bEWNtU1nItaMTYraSstaD2cxSfk9K13KZDOU07O3c6-2u9QKWpxHAm0ZhDGq9QQ07XDeGoqmw'
const vcJson: VerifiableCredential = {
  '@context': ['https://www.w3.org/2018/credentials/v1'],
  id: 'http://example.vc/credentials/123532',
  type: ['VerifiableCredential', 'VaccinationCredential'],
  issuer: {
    id: 'did:infra:01:PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU'
  },
  issuanceDate: '2021-03-17T13:18:37.000Z',
  credentialSubject: {
    id: 'did:infra:01:PUB_K1_7jCDarXnZ3SdPAwfFEciTSyUzA4fnfnktvFH9Fj7J89UrFiHpt',
    claim1: 'claim1_value',
    claim2: 'claim2_value'
  },
  proof: {
    type: 'JwtProof2020',
    jwt: vcJWT
  }
}

const presentation: PresentationPayload = {
  '@context': ['https://www.w3.org/2018/credentials/v1'],
  type: 'VerifiablePresentation',
  verifiableCredential: [vcJWT /*vcJson*/],
  holder: vcHolderDidConf.did,
  verifier: verifierDid,
  issuanceDate: new Date().toISOString(), //'2021-03-17T12:17:26.000Z',
  expirationDate: new Date(new Date().getTime() + 10 * 60 * 1000).toISOString()
}

const holderDidApi = new InfraDID(vcHolderDidConf)
const holder = holderDidApi.getJwtVcIssuer()

const vpJWT = await createVerifiablePresentationJwt(presentation, holder)

const verifiedPresentation = await verifyPresentation(vpJWT, didResolver, {
  audience: verifierDid
})
console.log(JSON.stringify(verifiedPresentation, null, 3))

Verified Presentation Result

{
  "payload": {
    "exp": 1617359105,
    "vp": {
      "@context": ["https://www.w3.org/2018/credentials/v1"],
      "type": ["VerifiablePresentation"],
      "verifiableCredential": [
        "eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJ2YyI6eyJjcmVkZW50aWFsU3ViamVjdCI6eyJjbGFpbTEiOiJjbGFpbTFfdmFsdWUiLCJjbGFpbTIiOiJjbGFpbTJfdmFsdWUifSwiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlZhY2NpbmF0aW9uQ3JlZGVudGlhbCJdfSwic3ViIjoiZGlkOmluZnJhOjAxOlBVQl9LMV83akNEYXJYblozU2RQQXdmRkVjaVRTeVV6QTRmbmZua3R2Rkg5Rmo3Sjg5VXJGaUhwdCIsImp0aSI6Imh0dHA6Ly9leGFtcGxlLnZjL2NyZWRlbnRpYWxzLzEyMzUzMiIsIm5iZiI6MTYxNTk4NzExNywiaXNzIjoiZGlkOmluZnJhOjAxOlBVQl9LMV84UHdHN29mNUI4cDlNcGF3Nlh6ZXlZdFNXSnllU1hWdHhaaFBIUUM1ZVp4WkNrcWlMVSJ9.tGSAsEbF4bKb5bEWNtU1nItaMTYraSstaD2cxSfk9K13KZDOU07O3c6-2u9QKWpxHAm0ZhDGq9QQ07XDeGoqmw"
      ]
    },
    "nbf": 1617358505,
    "iss": "did:infra:01:PUB_K1_7jCDarXnZ3SdPAwfFEciTSyUzA4fnfnktvFH9Fj7J89UrFiHpt",
    "aud": [
      "did:infra:01:PUB_K1_5TaEgpVur391dimVnFCDHB122DXYBbwWdKUpEJCNv3ko1KMYwz"
    ]
  },
  "didResolutionResult": {
    "didResolutionMetadata": {
      "contentType": "application/did+ld+json"
    },
    "didDocument": {
      "@context": "https://www.w3.org/ns/did/v1",
      "id": "did:infra:01:PUB_K1_7jCDarXnZ3SdPAwfFEciTSyUzA4fnfnktvFH9Fj7J89UrFiHpt",
      "verificationMethod": [
        {
          "id": "did:infra:01:PUB_K1_7jCDarXnZ3SdPAwfFEciTSyUzA4fnfnktvFH9Fj7J89UrFiHpt#controller",
          "type": "EcdsaSecp256k1VerificationKey2019",
          "controller": "did:infra:01:PUB_K1_7jCDarXnZ3SdPAwfFEciTSyUzA4fnfnktvFH9Fj7J89UrFiHpt",
          "publicKeyHex": "0375fb59ca8c9b7e6b96ae2ba6396ab05ebb8bda53d55895278d482e9478c183e9"
        }
      ],
      "authentication": [
        "did:infra:01:PUB_K1_7jCDarXnZ3SdPAwfFEciTSyUzA4fnfnktvFH9Fj7J89UrFiHpt#controller"
      ]
    },
    "didDocumentMetadata": {}
  },
  "issuer": "did:infra:01:PUB_K1_7jCDarXnZ3SdPAwfFEciTSyUzA4fnfnktvFH9Fj7J89UrFiHpt",
  "signer": {
    "id": "did:infra:01:PUB_K1_7jCDarXnZ3SdPAwfFEciTSyUzA4fnfnktvFH9Fj7J89UrFiHpt#controller",
    "type": "EcdsaSecp256k1VerificationKey2019",
    "controller": "did:infra:01:PUB_K1_7jCDarXnZ3SdPAwfFEciTSyUzA4fnfnktvFH9Fj7J89UrFiHpt",
    "publicKeyHex": "0375fb59ca8c9b7e6b96ae2ba6396ab05ebb8bda53d55895278d482e9478c183e9"
  },
  "jwt": "eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJleHAiOjE2MTczNTkxMDUsInZwIjp7IkBjb250ZXh0IjpbImh0dHBzOi8vd3d3LnczLm9yZy8yMDE4L2NyZWRlbnRpYWxzL3YxIl0sInR5cGUiOlsiVmVyaWZpYWJsZVByZXNlbnRhdGlvbiJdLCJ2ZXJpZmlhYmxlQ3JlZGVudGlhbCI6WyJleUowZVhBaU9pSktWMVFpTENKaGJHY2lPaUpGVXpJMU5rc2lmUS5leUoyWXlJNmV5SmpjbVZrWlc1MGFXRnNVM1ZpYW1WamRDSTZleUpqYkdGcGJURWlPaUpqYkdGcGJURmZkbUZzZFdVaUxDSmpiR0ZwYlRJaU9pSmpiR0ZwYlRKZmRtRnNkV1VpZlN3aVFHTnZiblJsZUhRaU9sc2lhSFIwY0hNNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TVRndlkzSmxaR1Z1ZEdsaGJITXZkakVpWFN3aWRIbHdaU0k2V3lKV1pYSnBabWxoWW14bFEzSmxaR1Z1ZEdsaGJDSXNJbFpoWTJOcGJtRjBhVzl1UTNKbFpHVnVkR2xoYkNKZGZTd2ljM1ZpSWpvaVpHbGtPbWx1Wm5KaE9qQXhPbEJWUWw5TE1WODNha05FWVhKWWJsb3pVMlJRUVhkbVJrVmphVlJUZVZWNlFUUm1ibVp1YTNSMlJrZzVSbW8zU2pnNVZYSkdhVWh3ZENJc0ltcDBhU0k2SW1oMGRIQTZMeTlsZUdGdGNHeGxMblpqTDJOeVpXUmxiblJwWVd4ekx6RXlNelV6TWlJc0ltNWlaaUk2TVRZeE5UazROekV4Tnl3aWFYTnpJam9pWkdsa09tbHVabkpoT2pBeE9sQlZRbDlMTVY4NFVIZEhOMjltTlVJNGNEbE5jR0YzTmxoNlpYbFpkRk5YU25sbFUxaFdkSGhhYUZCSVVVTTFaVnA0V2tOcmNXbE1WU0o5LnRHU0FzRWJGNGJLYjViRVdOdFUxbkl0YU1UWXJhU3N0YUQyY3hTZms5SzEzS1pET1UwN08zYzYtMnU5UUtXcHhIQW0wWmhER3E5UVEwN1hEZUdvcW13Il19LCJuYmYiOjE2MTczNTg1MDUsImlzcyI6ImRpZDppbmZyYTowMTpQVUJfSzFfN2pDRGFyWG5aM1NkUEF3ZkZFY2lUU3lVekE0Zm5mbmt0dkZIOUZqN0o4OVVyRmlIcHQiLCJhdWQiOlsiZGlkOmluZnJhOjAxOlBVQl9LMV81VGFFZ3BWdXIzOTFkaW1WbkZDREhCMTIyRFhZQmJ3V2RLVXBFSkNOdjNrbzFLTVl3eiJdfQ.7fANbV48GUO9VeGCgNlJX5jY9MHAUCKTd1BPxAhRRwek7GK7e7lTmiX5qEBr0l5NimfpI8FY0vunWj-Mr0MCRA",
  "verifiablePresentation": {
    "verifiableCredential": [
      {
        "credentialSubject": {
          "claim1": "claim1_value",
          "claim2": "claim2_value",
          "id": "did:infra:01:PUB_K1_7jCDarXnZ3SdPAwfFEciTSyUzA4fnfnktvFH9Fj7J89UrFiHpt"
        },
        "issuer": {
          "id": "did:infra:01:PUB_K1_8PwG7of5B8p9Mpaw6XzeyYtSWJyeSXVtxZhPHQC5eZxZCkqiLU"
        },
        "id": "http://example.vc/credentials/123532",
        "type": ["VerifiableCredential", "VaccinationCredential"],
        "@context": ["https://www.w3.org/2018/credentials/v1"],
        "issuanceDate": "2021-03-17T13:18:37.000Z",
        "proof": {
          "type": "JwtProof2020",
          "jwt": "eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJ2YyI6eyJjcmVkZW50aWFsU3ViamVjdCI6eyJjbGFpbTEiOiJjbGFpbTFfdmFsdWUiLCJjbGFpbTIiOiJjbGFpbTJfdmFsdWUifSwiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlZhY2NpbmF0aW9uQ3JlZGVudGlhbCJdfSwic3ViIjoiZGlkOmluZnJhOjAxOlBVQl9LMV83akNEYXJYblozU2RQQXdmRkVjaVRTeVV6QTRmbmZua3R2Rkg5Rmo3Sjg5VXJGaUhwdCIsImp0aSI6Imh0dHA6Ly9leGFtcGxlLnZjL2NyZWRlbnRpYWxzLzEyMzUzMiIsIm5iZiI6MTYxNTk4NzExNywiaXNzIjoiZGlkOmluZnJhOjAxOlBVQl9LMV84UHdHN29mNUI4cDlNcGF3Nlh6ZXlZdFNXSnllU1hWdHhaaFBIUUM1ZVp4WkNrcWlMVSJ9.tGSAsEbF4bKb5bEWNtU1nItaMTYraSstaD2cxSfk9K13KZDOU07O3c6-2u9QKWpxHAm0ZhDGq9QQ07XDeGoqmw"
        }
      }
    ],
    "holder": "did:infra:01:PUB_K1_7jCDarXnZ3SdPAwfFEciTSyUzA4fnfnktvFH9Fj7J89UrFiHpt",
    "verifier": [
      "did:infra:01:PUB_K1_5TaEgpVur391dimVnFCDHB122DXYBbwWdKUpEJCNv3ko1KMYwz"
    ],
    "type": ["VerifiablePresentation"],
    "@context": ["https://www.w3.org/2018/credentials/v1"],
    "issuanceDate": "2021-04-02T10:15:05.000Z",
    "expirationDate": "2021-04-02T10:25:05.000Z",
    "proof": {
      "type": "JwtProof2020",
      "jwt": "eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJleHAiOjE2MTczNTkxMDUsInZwIjp7IkBjb250ZXh0IjpbImh0dHBzOi8vd3d3LnczLm9yZy8yMDE4L2NyZWRlbnRpYWxzL3YxIl0sInR5cGUiOlsiVmVyaWZpYWJsZVByZXNlbnRhdGlvbiJdLCJ2ZXJpZmlhYmxlQ3JlZGVudGlhbCI6WyJleUowZVhBaU9pSktWMVFpTENKaGJHY2lPaUpGVXpJMU5rc2lmUS5leUoyWXlJNmV5SmpjbVZrWlc1MGFXRnNVM1ZpYW1WamRDSTZleUpqYkdGcGJURWlPaUpqYkdGcGJURmZkbUZzZFdVaUxDSmpiR0ZwYlRJaU9pSmpiR0ZwYlRKZmRtRnNkV1VpZlN3aVFHTnZiblJsZUhRaU9sc2lhSFIwY0hNNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TVRndlkzSmxaR1Z1ZEdsaGJITXZkakVpWFN3aWRIbHdaU0k2V3lKV1pYSnBabWxoWW14bFEzSmxaR1Z1ZEdsaGJDSXNJbFpoWTJOcGJtRjBhVzl1UTNKbFpHVnVkR2xoYkNKZGZTd2ljM1ZpSWpvaVpHbGtPbWx1Wm5KaE9qQXhPbEJWUWw5TE1WODNha05FWVhKWWJsb3pVMlJRUVhkbVJrVmphVlJUZVZWNlFUUm1ibVp1YTNSMlJrZzVSbW8zU2pnNVZYSkdhVWh3ZENJc0ltcDBhU0k2SW1oMGRIQTZMeTlsZUdGdGNHeGxMblpqTDJOeVpXUmxiblJwWVd4ekx6RXlNelV6TWlJc0ltNWlaaUk2TVRZeE5UazROekV4Tnl3aWFYTnpJam9pWkdsa09tbHVabkpoT2pBeE9sQlZRbDlMTVY4NFVIZEhOMjltTlVJNGNEbE5jR0YzTmxoNlpYbFpkRk5YU25sbFUxaFdkSGhhYUZCSVVVTTFaVnA0V2tOcmNXbE1WU0o5LnRHU0FzRWJGNGJLYjViRVdOdFUxbkl0YU1UWXJhU3N0YUQyY3hTZms5SzEzS1pET1UwN08zYzYtMnU5UUtXcHhIQW0wWmhER3E5UVEwN1hEZUdvcW13Il19LCJuYmYiOjE2MTczNTg1MDUsImlzcyI6ImRpZDppbmZyYTowMTpQVUJfSzFfN2pDRGFyWG5aM1NkUEF3ZkZFY2lUU3lVekE0Zm5mbmt0dkZIOUZqN0o4OVVyRmlIcHQiLCJhdWQiOlsiZGlkOmluZnJhOjAxOlBVQl9LMV81VGFFZ3BWdXIzOTFkaW1WbkZDREhCMTIyRFhZQmJ3V2RLVXBFSkNOdjNrbzFLTVl3eiJdfQ.7fANbV48GUO9VeGCgNlJX5jY9MHAUCKTd1BPxAhRRwek7GK7e7lTmiX5qEBr0l5NimfpI8FY0vunWj-Mr0MCRA"
    }
  }
}