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 | 1x 1x 1x 1x 1x 59x 59x 1x 1x 59x 59x 59x 59x 59x 55x 55x 59x 59x 59x | import { IPlatformCryptographyTools } from '../shared/interfaces'
import { DidMethod, KeyOptions } from '../dto/shared.dto'
import { ELEM_ANCHORED_DID_METHOD, ELEM_DID_METHOD, WEB_DID_METHOD, KEY_DID_METHOD } from '../_defaultConfig'
import { DidDocumentService, extendSeedWithDid, generateFullSeed, KeysService } from '@affinidi/common'
import { anchorDid } from './anchoringHandler'
import { RegistryApiService } from '@affinidi/internal-api-clients'
import { parseDecryptedSeed } from '@affinidi/common/dist/shared/seedTools'
export const register = async (
registry: RegistryApiService,
didMethod: DidMethod,
platformCryptographyTools: IPlatformCryptographyTools,
password: string,
keyOptions?: KeyOptions,
origin?: string,
skipAnchoringForElemMethod?: boolean,
webDomain?: string,
) => {
const isAnchoredSeed = didMethod === ELEM_ANCHORED_DID_METHOD
let seedMetadata
// TODO: figure out to use proper SDK error (not regular Error)
if (didMethod && didMethod === 'web') {
Iif (!webDomain) {
throw Error('webDomain option should be provided to register did:web')
}
seedMetadata = { webDomain }
}
const seedWithMethod = await generateFullSeed(platformCryptographyTools, didMethod, keyOptions, seedMetadata)
const { keysService, encryptedSeed } = await KeysService.fromSeedAndPassword(seedWithMethod, password)
const didDocumentService = DidDocumentService.createDidDocumentService(keysService)
const { did: builtDid, didDocument, keyId } = await didDocumentService.buildDidDocumentForRegister()
let anchoredInBlockchainDid
if (
didMethod !== KEY_DID_METHOD &&
didMethod !== WEB_DID_METHOD &&
(didMethod != ELEM_DID_METHOD || !skipAnchoringForElemMethod)
) {
const response = await anchorDid({
registry,
keysService,
didMethod,
did: builtDid,
anchoredDidElem: isAnchoredSeed,
nonce: 0,
additionalJoloParams: {
didDocument,
seedHex: parseDecryptedSeed(seedWithMethod).seed.toString('hex'),
},
origin,
})
anchoredInBlockchainDid = response.did
}
Iif (isAnchoredSeed) {
const anchoredSeed = extendSeedWithDid(seedWithMethod, anchoredInBlockchainDid)
const { encryptedSeed: anchoredEncryptedSeed, keysService } = await KeysService.fromSeedAndPassword(
anchoredSeed,
password,
)
const anchoredDocumentService = DidDocumentService.createDidDocumentService(keysService)
const didDocumentKeyId = anchoredDocumentService.getKeyId()
return { did: anchoredInBlockchainDid, encryptedSeed: anchoredEncryptedSeed, didDocumentKeyId }
}
const didDocumentKeyId = keyId
return { did: didDocumentService.getMyDid(), didDocumentKeyId, encryptedSeed, didDocument }
}
|