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

import { getHexIdentifier, isHexWithGivenByteSize } from '../../codec';

import DockDidOrDidMethodKey from './dock-did-or-did-method-key';
import DockDid from './dock-did';
import DidMethodKey from './did-method-key'; // eslint-disable-line

import { DockDIDQualifier, DockDIDByteSize } from '../constants';

/**
 * Takes a DID string, gets the hexadecimal value of that and returns either the `DockDid` or `DidMethodKey` object.
 * @param {{ specVersion: number }} api
 * @param {string|DockDid|DidMethodKey|object} did -  The DID can be passed as fully qualified DID like `did:dock:<SS58 string>` or
 * `did:key:<BS58 public key>` or a 32 byte hex string
 * @return {string|DockDid|DidMethodKey} Returns a `string` or `DockDid` or `DidMethodKey` object.
 */
export function typedHexDID(api, did) {
  if (api.specVersion < 50) {
    return getHexIdentifier(did, DockDIDQualifier, DockDIDByteSize);
  } else {
    return DockDidOrDidMethodKey.from(did);
  }
}

/**
 * Create and return a fully qualified Dock DID, i.e. "did:dock:<SS58 string>"
 * @returns {string} - The DID
 */
export const createNewDockDID = () => DockDid.random().toQualifiedEncodedString();

/**
 * Temporary solution for the DID's backward compatibility.
 *
 * --------------------------------------------------------
 */
// eslint-disable-next-line no-extend-native
Object.defineProperty(String.prototype, 'asDid', {
  get() {
    if (this.isDid) {
      return String(this);
    } else {
      throw new Error('Not a `Did`');
    }
  },
});
// eslint-disable-next-line no-extend-native
Object.defineProperty(String.prototype, 'isDid', {
  get() {
    return isHexWithGivenByteSize(String(this), DockDIDByteSize);
  },
});
// eslint-disable-next-line no-extend-native
Object.defineProperty(String.prototype, 'toQualifiedEncodedString', {
  value: function toQualifiedEncodedString() {
    return new DockDid(this.asDid).toQualifiedEncodedString();
  },
});

/**
 * --------------------------------------------------------
 */