Affinidi Vault - Credential Storage#
It is quite popular setup for edge wallets to have a VCs backup strategy. here Affinidi Vault could help a lot api
Follow a Video#
const { createWallet } = require('@affinidi/wallet-node-sdk')
const walletFactory = createWallet('AffinityCore')
Lets setup wallets
const accessApiKey = '<yourkey>'
const options = {
env: 'prod',
accessApiKey:accessApiKey,
}
const issuerWallet = await walletFactory.createWallet(options, 'P@55word!!!')
const holderWallet = await walletFactory.createWallet(options, 'P@55word!!!')
Setup credential
const jsonSchema = 'https://schema.affinidi.com/ContentLikeV1-0.json'
const jsonContext = 'https://schema.affinidi.com/ContentLikeV1-0.jsonld'
const id = `claimId:${(Math.random() + 1).toString(36).substring(2)}`
const unsignedVC = {
'@context': ['https://www.w3.org/2018/credentials/v1', jsonContext],
id,
type: ['VerifiableCredential', 'ContentLike'],
holder: {
id: holderWallet.did
},
credentialSubject: {
data: {
'@type': ['VerifiableCredential', 'ContentLike'],
url: 'https://www.youtube.com/watch?v=owbkzvLhblk',
date: new Date().toISOString(),
like: true,
score: 10
},
},
credentialSchema: {
id: jsonSchema,
type: 'JsonSchemaValidator2018',
},
issuanceDate: new Date().toISOString(),
expirationDate: '2065-09-10T00:00:00.000Z',
}
const signedCredentials = await issuerWallet.signUnsignedCredential(
unsignedVC
)
Store Credential#
const ids = await holderWallet.saveCredentials([signedCredentials])
ids
[
{
credentialId: '6331173b7fc93f78dfc8c7ea189e7840e30f7e7092d91fadee180e6a60a86c8e',
credentialTypes: [
'7ae5c137a7bcbb6b1c3a91b4a4ffca90ebfaa6beb114e30c429764eb463e7077',
'bc8b94d2c4531a295ad72413b93d4d6946fdf0092d565d45e580d2fca641487f'
],
createdAt: '2022-09-29T13:06:16.858Z',
payload: '{"iv":"d773358c40228b6067d3b997aafd2b63","ephemPublicKey":"046579997ee59c2a9318b909649207ba1d192a2fd1c0da48f3e733625991d0e25784019fe72408e2647197951c878065a608e171886c07f88f2bd51a7b3e3d3316","ciphertext":"29ca1960269455072d1ca659b47c359a6e5d33d58a357a1b0ec8b126c12849b76e031a0aef16e31a43c728a6b25fad0db7f01f1fb79bf1fa15c47b1144bb5c92e1e1e5163905e686b27fc5fc91659826a7c91a30a189b54a6b7ccbb9e3cedafec2086fe51f51f53e54dd7fbaf971c5399756a4a7e78631c3c423506d5f0a92407ff55f811aa007d9f59725edee27a10ce3fda09a8dde70ae79cbeab4b331a293f3b56f323618525a8b40652ef36ff1e2af3a04be282c4fc7c495b8ec87fe4083078c51645c2a0fdff5f4f0e74deefd0e98e52a832a65f02613660acd630243a334e30cd1508a9e580b1a912564b19c8dac0f09bfb30abb8af9ffeb885c471b1d9d57b2d08feafa55c2d3bb91978d1fae07c07538d28f5630282f9aded668f26a1d20883e958074a0fa161751586f6165bd0274c659e2b74b47722b585a3393b6ba4d1a09ad47310cc76333fe558922065290e587d5311a239cf29bb39071c792ed48d6bdccfe125aeef96d2fa329e6b599f50c413b125838ee094d970477ebebc5a5772ae390f1f221e128b771c65a1227b16f17dec6ff5122f347ae8693e52b401b3f658ea0f377238c2933d3b93ee2462fa493464df888dd975ddc5f578153e713a0d2199637ea436dd952bf3dab4c5d27286ae2830b03539bb3579c5ca226ca80956ae1bdef540b0cd759f46d82c1ec741118217e39c48bde34fb49e5075fa6193d80286c5156603d4671c9a3028cb5638b9fa01a72613f8d330eec9296318b87fa02c2f27b97451ef41418300200ea131a8524d5b817be2d25778f37e1e88e7884a5a419180898ccf582296d8caee73c62582ff75d0941f2b32b0b67f76756414285556da128ab0f66c7071e6e1e7331ea58a4cd5c71493b41e89de790bb3f4d7a02e60db5e2fbbe38cf7321dd5ba47f9495ef9974086a22d061b7006e2c0ca6643e38648b178ab5324cea1632446053c68599b1b78c699b77226ed3f0f6f3a65994419901bc72c2acc8bd957dda60fda6d84b43641892728bbb9f7584f7fb4f8a7a9906b0be4f1ea9dd0c5ea6d089c16170edfad2294f3e09fc4941089fed4fc6044679d6a9e89ec6fb88b23aed9b2afa1e6aea7c8095941c4e30d7790433139ba67e8f41b331cc14cadec1793f4203515abdb20cda02c46cb2511de59dcddb2d2db2feac7607314c7b93a1dd1b243848b7480c537bce6da4ee1e07046e90f62120df26e7a9763499b0e90a44b231367587b76edb47d12597e4dc29dc0de88273399d9555fca8ead4bf20e21d9db26229ba35a36d5db384a4f4fcaaa5108bffceb8d2a044cf4fed3a58814271e6e0c6d39fc7283d45e4804a546ddec9a5980eee761b6313034e1572f0dd1023d608fa3ddefaae694c3d108c8850c7fa8f8a4e9c6e5ff53548f79e0d4df2547e5c3181391173d2950f0e0fc8ee97b7b838551a7101b232e9be551d26591b518895ec8b2b861a0ba17b268ee82461e0a1717b48df6146e8ff378db3aea7e5ee0e36245c49232a1fb33f2c534547284eb1485577834158333149ee3abdb97424262df0a337aa1dc3b44565e6babcde486393085b81ec615bcaeac450bcb74b7fa6306ebec8f4be868688e3f067ed7fbb47aaf40ab33dbcb046792a3e8f40e5e3ed5a0b789ea60aa3e9846c5b78f04c7185598178b40153f50144610a00f06499fa3cfb2f19f3e3f0585de854200b67e7930f8e45f2764a028645bcf1dfcfed627e2327b0a2fe92111ec3ffc8c7fc23dac6a31bb1fb7d0d3d28df26cbd3afbbfb4db5e71c496d797a435c9ca96a83799d9f86faa0a99b00eeadc55e49b36e4ad4dc9fa19711e41f3368c185d386f904963bc4d5f4717e661fedbb0897452ae44a98df4e776454b16d53319868af9c4f9c01a18dbdfd29a6ffc0ccf452e7211ac7f3e129c72f48ae8fafd6ce3c9ba0920afa61ad96481bedcfe4baec0be73639e821e58148bdc4a0663e9f10686af51ef368a7b337a498324034e4f6df90ce327bf1120c998f92b1d2840ccfe5dca6d439be788afe6c869dd73c61b5ff2e3510873cded5b4b45036dfee4606e6ed292de4e8b2f197ec9a62b10df23b0a2b55f885637bda321b27e88459f38d26918556b7ce13cecb54db632b44ce3e9658edbccb94fa80bb05bbea289c1efca98a2393986b111d84765dcd616934687880a870c2ead8120b698f267bb22993f8b197852f4bbdc42d310b15ed20a14bae8cd9a3fc973279fcaef6974e1895128a5ae154fcc47cd4d947957ea38b9cb78693e7097782b9998e222d54aba4e6da61b0c801a6d40d96fcfe7219bc6bce26d423d6ca6e10016d83929bb40d049dd41e3d3334c00aa09a484dc7090fd94415d5f3453d07d6d934d25bbdde895869ccd34d080258497edd1500ff0d05eb6140cd51391d426bfab7bf0e9549810006b8c9889d192982734cec2bdde74e6a431190b2c89287033fc8b7c27ea4e730bceaa32ad40e5bf7d8ca5a6e11b028d74c0d1b41b6e617d8bb26386f995517ade93fc89e86e8454a06ac7ac84c661aaa03aa74fa6bc765bb88bbd9337f7ab8612384b0e78f82a3cd5ea49a5c638dc7cd11b4713efaf3c09b2637c1d9d1792d4caf8497c335952f4fcb14812875e6d408b5957fd11678149c467029984322eec3f17994661633635db68117352591d76ae391dd1b5f468741cb607fdbbc27e73177ac7bdb8314de3a191d94fd5b83ca8d895257ee097915a9ff87156409b1ee061ad74240b1d93ca691070839b5bb178d5c71c462edaa6ae1333a85d68b8e0f3c597c0a162645fd273e6df2f4907f2718c70b3f7104c0483361bc504becff6b62ba5f09dd13a2a62810eacdd83ecbb3c0ec6a2fd4e3c095df98b48650242672ee81bd1a0bc46b4695ee605a99deb750865263b7c8ba85a1f7effac6807a891cf3ca4a936df088942bfe460caaa3b84a4f3fe5ccf6a566ca827804237875d68b41b1cf3a6d326bd4de1609d9aad8a0a73c5f096cbf8bbb9beae49b9421b0a6eb14d33288cad31e2e456e834dd686ea5d85babfb652ef75286bad7f5e22ce615c477e35237b447e7bc1fd72bdd3cb030a322e62082eb9bad025f8c4d7ba006f1adc3438d24cbedce5c8289dddba3b96e029eda48346d6551519220162f54571ef6b28ff95f9ef624f8b6b33bb53edf4bdfc4912486303b7bda7991646bdde50cdc3e3a0ad946318167d5c37ebfca0722fa7210bbc494b15829ec45d0e635c78bb066eb9117140aa28f864974e239cf492944f879db8b70097a61ef137683c4ab340f2c3d811f55a0f03896ae674aff55642de877b69f845c3fbcb4cf65ed328d405f1d15db42c5e1bbb56c0ca2aa980c3d7082b5bd55d5e4c978f5c143094733fa39432eac14152affdce3585cbddbae7b95b8af97c5c4b15ace26bae3faf045041ed2645dd0a30edc300cecdf85a49814cea91a68d9495f2d6b04c3773a182571769301d9f6ba3f0b70a82203ea16537575aa67435e0412da9de7081e74f291a21388f6510774e8b0b58e749dc5c68178459b29b42b55d4ccbb0a5b6643ef446decebc140f6acd9f53da662bd7a0b0c15d13254dae10bba82b07fef93d20c77e502e0521d6eac71bcd71556def38e5fbc480c2c952bff5419372fda9aa5740ec64de2af3dcd6cb7b553b35bdca08c57a27a36ef849abb36b574dfcb75f42f413db883c734314dcad390a3d211edf756f698c93f671be9c264e78459f12ae8c2a9176a31cec1429e6e55f66b08a2c32352827ceaa670dc932062858c24443c9369ad8faf03c3d7de496c3e73ab5955c38c68d79978593eca2f669d3e10f4eb0468594a1b50df5d0339441712e333c0c258a23feba073ef52d4f609e4bfd6d97542c296ba556d2442229cdcdc894cbb43f004b8cdcd9eea41fd01f56c3a3572264967bc3cc5688ee444a7e60cad2b7195ddefaf3fefff278e7ab9cb0a2eac8b80d906bea34ca7c002032fbfc7337a7428f76a61f738d93b87dd772a9d56e9609d090849d7791aac37b151f3f92b13b588876305a1416516aa3f64803e3c27eb256e1c84bcdceb76489a7ce33d60c7bcf280ee0ae110e28c36cd33c6baf1be016cf5d82802c48c25ede8d67eb37057867fe24097aeed37090bdc647caf8da939665789e84c68b24734f1f43785265359bc1cdb52a87a8cfd6f42e3d2c18d2d89f5c26a756d5eab9003e87a8817eceb18b4245138f76a104f28d6e2fefb2822c8005cf44b4e2f87628c4b8c03216761bc02db952948b3b4c132d8ac67be37ee732558787baa8d58099d836b2b36fd72d5905693e57c9402761cf5fcd62d36e6910313f4828c1b8fc5a3b23a82281105e23c0939800a015d953f814f56cfb78f1b2f767ac280a85fe61099c0a012554c98453783565eb0c154d006849f1adec5a604f66d5da2de7e357b56fde983c602004c3c87aa3a97fdec70d586b75ec59713b6ab835805bb5faee494b7b67be36df635fc6367d815c930d51ef41d96d4089a083e9314ecc15da73143710","mac":"7a3d34927d9ed0648841d1af8a326b8fd82ff4bde17864078fdc84dddfcf0776"}'
}
]
Get credential#
await holderWallet.getCredentialById(id)
{
'@context': [
'https://www.w3.org/2018/credentials/v1',
'https://schema.affinidi.com/ContentLikeV1-0.jsonld'
],
id: 'claimId:yxg1bozxkkh',
type: [ 'VerifiableCredential', 'ContentLike' ],
holder: {
id: 'did:elem:EiDv_8C70Gtbw5-577Sk0sN1-UwNT38GGZJVQM1fQoRu_Q;elem:initial-state=eyJwcm90ZWN0ZWQiOiJleUp2Y0dWeVlYUnBiMjRpT2lKamNtVmhkR1VpTENKcmFXUWlPaUlqY0hKcGJXRnllU0lzSW1Gc1p5STZJa1ZUTWpVMlN5SjkiLCJwYXlsb2FkIjoiZXlKQVkyOXVkR1Y0ZENJNkltaDBkSEJ6T2k4dmR6TnBaQzV2Y21jdmMyVmpkWEpwZEhrdmRqSWlMQ0p3ZFdKc2FXTkxaWGtpT2x0N0ltbGtJam9pSTNCeWFXMWhjbmtpTENKMWMyRm5aU0k2SW5OcFoyNXBibWNpTENKMGVYQmxJam9pVTJWamNESTFObXN4Vm1WeWFXWnBZMkYwYVc5dVMyVjVNakF4T0NJc0luQjFZbXhwWTB0bGVVaGxlQ0k2SWpBek1qZGlOelkzTURSak9ETm1PV05tT1RFMVlXRTVPRGMwTmpreE0ySmhPV0poTUdaak1qazRPREZoWkRCa05qQXlNMk5tWkRJNVlUUmhORFkxWlRJeU15SjlMSHNpYVdRaU9pSWpjbVZqYjNabGNua2lMQ0oxYzJGblpTSTZJbkpsWTI5MlpYSjVJaXdpZEhsd1pTSTZJbE5sWTNBeU5UWnJNVlpsY21sbWFXTmhkR2x2Ymt0bGVUSXdNVGdpTENKd2RXSnNhV05MWlhsSVpYZ2lPaUl3TW1Rd016azNZV05rWkdSa1pqWm1PR001TmpJME1XTXpOVGcyTm1Nek16SmtZV016TW1KaU9URmpZakV6TWpnellUTXpPR0UxTUdNeFlXSTJZVGt3WlRJaWZWMHNJbUYxZEdobGJuUnBZMkYwYVc5dUlqcGJJaU53Y21sdFlYSjVJbDBzSW1GemMyVnlkR2x2YmsxbGRHaHZaQ0k2V3lJamNISnBiV0Z5ZVNKZGZRIiwic2lnbmF0dXJlIjoiVm5CZ3BFekxJT3VlSnZUM1R4MDc3V0JiX0VSTzJuNlN1WVBHbGNrZThOVWc0NEphUTRPQVJsWVFhRzNhQVZWdUZwTWhtVk9UcmU0NTJhU0xrc3V0cmcifQ'
},
credentialSubject: {
data: {
'@type': [Array],
url: 'https://www.youtube.com/watch?v=owbkzvLhblk',
date: '2022-09-29T13:05:57.226Z',
like: true,
score: 10
}
},
credentialSchema: {
id: 'https://schema.affinidi.com/ContentLikeV1-0.json',
type: 'JsonSchemaValidator2018'
},
issuanceDate: '2022-09-29T13:05:57.226Z',
expirationDate: '2065-09-10T00:00:00.000Z',
issuer: 'did:elem:EiBQRsLuODSVmv3hNEemKkCA60pbOIVuM-5lJHJAJ4nfSQ;elem:initial-state=eyJwcm90ZWN0ZWQiOiJleUp2Y0dWeVlYUnBiMjRpT2lKamNtVmhkR1VpTENKcmFXUWlPaUlqY0hKcGJXRnllU0lzSW1Gc1p5STZJa1ZUTWpVMlN5SjkiLCJwYXlsb2FkIjoiZXlKQVkyOXVkR1Y0ZENJNkltaDBkSEJ6T2k4dmR6TnBaQzV2Y21jdmMyVmpkWEpwZEhrdmRqSWlMQ0p3ZFdKc2FXTkxaWGtpT2x0N0ltbGtJam9pSTNCeWFXMWhjbmtpTENKMWMyRm5aU0k2SW5OcFoyNXBibWNpTENKMGVYQmxJam9pVTJWamNESTFObXN4Vm1WeWFXWnBZMkYwYVc5dVMyVjVNakF4T0NJc0luQjFZbXhwWTB0bGVVaGxlQ0k2SWpBek1qRm1ZV0l4TjJFNU9UazJPR0psTmpRd1ltSTFZMll3T1RVMll6aGpPV1l4TlRJek0yVXpZek5pTVRCaE56QmxNVFkzTVRRMU1qRTNZakZoTkRCbE9DSjlMSHNpYVdRaU9pSWpjbVZqYjNabGNua2lMQ0oxYzJGblpTSTZJbkpsWTI5MlpYSjVJaXdpZEhsd1pTSTZJbE5sWTNBeU5UWnJNVlpsY21sbWFXTmhkR2x2Ymt0bGVUSXdNVGdpTENKd2RXSnNhV05MWlhsSVpYZ2lPaUl3TTJVMk4yUTBaVGszT1RjM05HUTRPVFUyT1RoaU5USXhaV1k1TldJM1pqTmtPVGRrTmpJMlpEUTVPRGhtTm1aalpqUm1OR1ppWmpWa1pETXpPVEpoTVdVaWZWMHNJbUYxZEdobGJuUnBZMkYwYVc5dUlqcGJJaU53Y21sdFlYSjVJbDBzSW1GemMyVnlkR2x2YmsxbGRHaHZaQ0k2V3lJamNISnBiV0Z5ZVNKZGZRIiwic2lnbmF0dXJlIjoicDVwSkYyc0FaSUJHb1QwaFRTWXNRcV9TN25fdExYSDFEU0twQnRWeTFlRm5PbkFILVVwVUFaSWRYVElTLTBOSG1uQ1hVeHFCZWhRX1djV3NHazdWLXcifQ',
proof: {
type: 'EcdsaSecp256k1Signature2019',
created: '2022-09-29T13:05:57Z',
verificationMethod: 'did:elem:EiBQRsLuODSVmv3hNEemKkCA60pbOIVuM-5lJHJAJ4nfSQ#primary',
proofPurpose: 'assertionMethod',
jws: 'eyJhbGciOiJFUzI1NksiLCJiNjQiOmZhbHNlLCJjcml0IjpbImI2NCJdfQ..cxTi4KeIlyB0JEmyLxAvmHx8zWYqHyg4yGQvm2L_ItYE8UJ-drNjPcePPr_M4KMIGNK1VPG5uti-sBt_yTw-uA'
}
}
unknown msg_type: comm_open
unknown msg_type: comm_msg
unknown msg_type: comm_open
unknown msg_type: comm_msg