Source: utils/did/typed-did/dock-did.js

import { randomAsHex, encodeAddress } from '@polkadot/util-crypto';
import { getHexIdentifier } from '../../codec';

import { validateDockDIDHexIdentifier } from '../utils';

import { DockDIDByteSize, DockDIDQualifier } from '../constants';
import DockDidOrDidMethodKey from './dock-did-or-did-method-key';

/**
 * `did:dock:*`
 */
export default class DockDid extends DockDidOrDidMethodKey {
  static Qualifier = DockDIDQualifier;

  /**
   * Instantiates `DockDid` using supplied 32-byte hex sequence.
   * @param {*} did
   */
  constructor(did) {
    super();
    validateDockDIDHexIdentifier(did);

    this.did = did;
  }

  /**
   * Generates a random DID.
   *
   * @returns {this}
   */
  static random() {
    return new this(randomAsHex(DockDIDByteSize));
  }

  /**
   * Instantiates `DockDid` from a fully qualified did string.
   * @param {string} did - fully qualified `did:dock:*` string
   * @returns {this}
   */
  static fromQualifiedString(did) {
    return new this(getHexIdentifier(did, DockDIDQualifier, DockDIDByteSize));
  }

  /**
   * Instantiates `DockDid` from a did object received from the substrate side.
   * @param {object} did - substrate did
   * @returns {this}
   */
  static fromSubstrateValue(did) {
    return new this(getHexIdentifier(did.asDid, [], DockDIDByteSize));
  }

  get isDid() {
    return true;
  }

  get asDid() {
    return this.did;
  }

  toJSON() {
    return { Did: this.did };
  }

  toString() {
    return `${DockDIDQualifier}${this.asDid}`;
  }

  /**
   * Returns unqualified DID encoded as a `SS58` address.
   */
  toEncodedString() {
    return encodeAddress(this.asDid);
  }
}

DockDidOrDidMethodKey.DockDid = DockDid;