Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | 1x 1x 1x 1x 152x 152x 6x 6x 20x 6x 16x 15x 5x 16x 16x 16x 16x 2x 2x 1x 1x 5x 5x 3x 3x 10x | import { AffinidiVaultApiService } from '@affinidi/internal-api-clients'
import { profile } from '@affinidi/tools-common'
import { extractSDKVersion } from '../_helpers'
import { CredentialLike } from '../dto/internal'
import { VaultCredential } from '../dto/vault.dto'
import { DidAuthAdapter } from '../shared/DidAuthAdapter'
import AffinidiVaultEncryptionService from './AffinidiVaultEncryptionService'
type AffinidiVaultStorageOptions = {
didAuthAdapter: DidAuthAdapter
accessApiKey: string
vaultUrl: string
}
@profile()
export default class AffinidiVaultStorageService {
private _encryptionService
private _vaultApiService
constructor(encryptionService: AffinidiVaultEncryptionService, options: AffinidiVaultStorageOptions) {
this._encryptionService = encryptionService
this._vaultApiService = new AffinidiVaultApiService({
vaultUrl: options.vaultUrl,
accessApiKey: options.accessApiKey,
sdkVersion: extractSDKVersion(),
didAuthAdapter: options.didAuthAdapter,
})
}
public async saveCredentials(credentials: CredentialLike[], storageRegion: string): Promise<VaultCredential[]> {
const responses: VaultCredential[] = []
const encryptedCredentials = await this._encryptionService.encryptCredentials(
credentials.map((credential) => ({ credential })),
)
for (const credential of encryptedCredentials) {
const { body } = await this._vaultApiService.storeCredential(storageRegion, credential.idHash, {
credentialTypes: credential.typeHashes,
payload: credential.cyphertext,
})
responses.push(body)
}
return responses
}
public async searchCredentials(storageRegion: string, types?: string[][]): Promise<CredentialLike[]> {
const hashedTypes = types ? await this._encryptionService.computeTypesHashes(types) : undefined
const { body } = await this._vaultApiService.searchCredentials(storageRegion, hashedTypes)
const credentials = await this._encryptionService.decryptCredentials(body.credentials)
return credentials
}
public async getCredentialById(credentialId: string, storageRegion: string): Promise<CredentialLike> {
const hashedId = await this._encryptionService.computeHashedId(credentialId)
const { body } = await this._vaultApiService.getCredential(storageRegion, hashedId)
const credential = await this._encryptionService.decryptCredential(body)
return credential
}
public async deleteCredentialById(credentialId: string, storageRegion: string): Promise<void> {
const hashedId = await this._encryptionService.computeHashedId(credentialId)
await this._vaultApiService.deleteCredential(storageRegion, hashedId)
}
public async deleteAllCredentials(storageRegion: string): Promise<void> {
const { body } = await this._vaultApiService.searchCredentials(storageRegion)
// this could have perfomance problems when need delete big amount of credentials
// probably can use some kind of concurrency, but it is unknown what behavior will be at each platform
for (const credential of body.credentials) {
await this._vaultApiService.deleteCredential(storageRegion, credential.credentialId)
}
}
}
|