{"version":3,"file":"index.cjs","sources":["../src/resolver.ts","../src/helpers.ts","../src/configuration.ts","../src/controller.ts"],"sourcesContent":["import {\n  DIDResolutionOptions,\n  DIDResolutionResult,\n  DIDResolver,\n  ParsedDID,\n  Resolvable,\n} from 'did-resolver'\n\nimport request from 'axios'\n\nconst DEREFERENCE_PATH = '/1.0/dereference/'\n\nexport function getResolver(url: string): Record<string, DIDResolver> {\n  const resolver = new ZXCDidResolver(url)\n  return resolver.build()\n}\n\nexport class ZXCDidResolver {\n  private web_did_resolver_url: string\n\n  constructor(url: string) {\n    this.web_did_resolver_url = url\n  }\n\n  async resolve(\n    _did: string,\n    parsed: ParsedDID,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _unused: Resolvable,\n    _options: DIDResolutionOptions\n  ): Promise<DIDResolutionResult> {\n\n    const url = this.web_did_resolver_url + DEREFERENCE_PATH +  encodeURIComponent(parsed.didUrl)\n    const didReponse = await request.get(url)\n      .then((res: any) => {\n        return res.data\n      })\n      .catch((err: any) => {\n        return {\n          didResolutionMetadata: {\n            error: 'notFound',\n            message: err.toString(), // This is not in spec, nut may be helpful\n          },\n          didDocumentMetadata: {},\n          didDocument: null,\n        }\n      })\n\n      return didReponse\n  }\n\n  build(): Record<string, DIDResolver> {\n    return { zxc: this.resolve.bind(this) }\n  }\n}\n","import { getAddress } from '@ethersproject/address'\nimport { BigNumber } from '@ethersproject/bignumber'\nimport { computeAddress } from '@ethersproject/transactions'\nimport { VerificationMethod } from 'did-resolver'\n\nexport const identifierMatcher = /^(.*)?(0x[0-9a-fA-F]{40}|0x[0-9a-fA-F]{66})$/\nexport const nullAddress = '0x0000000000000000000000000000000000000000'\nexport const DEFAULT_REGISTRY_ADDRESS = '0xdca7ef03e98e0dc2b855be647c39abe984fcf21b'\nexport const DEFAULT_JSON_RPC = 'http://127.0.0.1:5005/'\n\nexport type address = string\nexport type uint256 = BigNumber\nexport type bytes32 = string\nexport type bytes = string\n\nexport interface ERC1056Event {\n  identity: address\n  previousChange: uint256\n  validTo?: uint256\n  _eventName: string\n  blockNumber: number\n}\n\nexport interface DIDOwnerChanged extends ERC1056Event {\n  owner: address\n}\n\nexport interface DIDAttributeChanged extends ERC1056Event {\n  name: bytes32\n  value: bytes\n  validTo: uint256\n}\n\nexport interface DIDDelegateChanged extends ERC1056Event {\n  delegateType: bytes32\n  delegate: address\n  validTo: uint256\n}\n\nexport enum verificationMethodTypes {\n  EcdsaSecp256k1VerificationKey2019 = 'EcdsaSecp256k1VerificationKey2019',\n  EcdsaSecp256k1RecoveryMethod2020 = 'EcdsaSecp256k1RecoveryMethod2020',\n  Ed25519VerificationKey2018 = 'Ed25519VerificationKey2018',\n  RSAVerificationKey2018 = 'RSAVerificationKey2018',\n  X25519KeyAgreementKey2019 = 'X25519KeyAgreementKey2019',\n}\n\nexport enum eventNames {\n  DIDOwnerChanged = 'DIDOwnerChanged',\n  DIDAttributeChanged = 'DIDAttributeChanged',\n  DIDDelegateChanged = 'DIDDelegateChanged',\n}\n\nexport interface LegacyVerificationMethod extends VerificationMethod {\n  /**@deprecated */\n  publicKeyHex?: string\n  /**@deprecated */\n  publicKeyBase64?: string\n  /**@deprecated */\n  publicKeyPem?: string\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  [x: string]: any\n}\n\nexport const legacyAttrTypes: Record<string, string> = {\n  sigAuth: 'SignatureAuthentication2018',\n  veriKey: 'VerificationKey2018',\n  enc: 'KeyAgreementKey2019',\n}\n\nexport const legacyAlgoMap: Record<string, string> = {\n  /**@deprecated */\n  Secp256k1VerificationKey2018: verificationMethodTypes.EcdsaSecp256k1VerificationKey2019,\n  /**@deprecated */\n  Ed25519SignatureAuthentication2018: verificationMethodTypes.Ed25519VerificationKey2018,\n  /**@deprecated */\n  Secp256k1SignatureAuthentication2018: verificationMethodTypes.EcdsaSecp256k1VerificationKey2019,\n  //keep legacy mapping\n  RSAVerificationKey2018: verificationMethodTypes.RSAVerificationKey2018,\n  Ed25519VerificationKey2018: verificationMethodTypes.Ed25519VerificationKey2018,\n  X25519KeyAgreementKey2019: verificationMethodTypes.X25519KeyAgreementKey2019,\n}\n\nexport function strip0x(input: string): string {\n  return input.startsWith('0x') ? input.slice(2) : input\n}\n\nexport function bytes32toString(input: bytes32 | Uint8Array): string {\n  const buff: Buffer = typeof input === 'string' ? Buffer.from(input.slice(2), 'hex') : Buffer.from(input)\n  return buff.toString('utf8').replace(/\\0+$/, '')\n}\n\nexport function stringToBytes32(str: string): string {\n  const buffStr = '0x' + Buffer.from(str).slice(0, 32).toString('hex')\n  return buffStr + '0'.repeat(66 - buffStr.length)\n}\n\nexport function interpretIdentifier(identifier: string): { address: string; publicKey?: string; network?: string } {\n  let id = identifier\n  let network = undefined\n  if (id.startsWith('did:zxc')) {\n    id = id.split('?')[0]\n    const components = id.split(':')\n    id = components[components.length - 1]\n    if (components.length >= 4) {\n      network = components.splice(2, components.length - 3).join(':')\n    }\n  }\n  if (id.length > 42) {\n    return { address: computeAddress(id), publicKey: id, network }\n  } else {\n    return { address: getAddress(id), network } // checksum address\n  }\n}\n\nexport enum Errors {\n  /**\n   * The resolver has failed to construct the DID document.\n   * This can be caused by a network issue, a wrong registry address or malformed logs while parsing the registry history.\n   * Please inspect the `DIDResolutionMetadata.message` to debug further.\n   */\n  notFound = 'notFound',\n\n  /**\n   * The resolver does not know how to resolve the given DID. Most likely it is not a `did:ethr`.\n   */\n  invalidDid = 'invalidDid',\n\n  /**\n   * The resolver is misconfigured or is being asked to resolve a DID anchored on an unknown network\n   */\n  unknownNetwork = 'unknownNetwork',\n}\n","import { BigNumber } from '@ethersproject/bignumber'\nimport { Contract, ContractFactory } from '@ethersproject/contracts'\nimport { JsonRpcProvider, Provider } from '@ethersproject/providers'\nimport { EthereumDIDRegistry, deployments, EthrDidRegistryDeployment } from 'ethr-did-registry'\nimport { DEFAULT_REGISTRY_ADDRESS } from './helpers'\n\nconst infuraNames: Record<string, string> = {\n  polygon: 'matic',\n  'polygon:test': 'maticmum',\n  aurora: 'aurora-mainnet',\n}\n\nconst knownInfuraNames = ['mainnet', 'ropsten', 'rinkeby', 'goerli', 'kovan', 'aurora']\n\nexport interface SyncLog {\n  fromBlock: string | number\n  toBlock: string | number\n}\n\n/**\n * A configuration entry for an ethereum network\n * It should contain at least one of `name` or `chainId` AND one of `provider`, `web3`, or `rpcUrl`\n *\n * @example ```js\n * { name: 'development', registry: '0x9af37603e98e0dc2b855be647c39abe984fc2445', rpcUrl: 'http://127.0.0.1:8545/' }\n * { name: 'goerli', chainId: 5, provider: new InfuraProvider('goerli') }\n * { name: 'rinkeby', provider: new AlchemyProvider('rinkeby') }\n * { name: 'rsk:testnet', chainId: '0x1f', rpcUrl: 'https://public-node.testnet.rsk.co' }\n * ```\n */\nexport interface ProviderConfiguration extends Omit<EthrDidRegistryDeployment, 'chainId'> {\n  provider?: Provider\n  chainId?: string | number\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  web3?: any\n  syncLog?: SyncLog\n}\n\nexport interface MultiProviderConfiguration extends ProviderConfiguration {\n  networks?: ProviderConfiguration[]\n}\n\nexport interface InfuraConfiguration {\n  infuraProjectId: string\n}\n\nexport type ConfigurationOptions = MultiProviderConfiguration | InfuraConfiguration\n\nexport type ConfiguredNetworks = Record<string, Contract>\n\nexport type SyncLogs = Record<string, SyncLog>\n\nfunction configureNetworksWithInfura(projectId?: string): ConfiguredNetworks {\n  if (!projectId) {\n    return {}\n  }\n\n  const networks = knownInfuraNames\n    .map((n) => {\n      const existingDeployment = deployments.find((d) => d.name === n)\n      if (existingDeployment && existingDeployment.name) {\n        const infuraName = infuraNames[existingDeployment.name] || existingDeployment.name\n        const rpcUrl = `https://${infuraName}.infura.io/v3/${projectId}`\n        return { ...existingDeployment, rpcUrl }\n      }\n    })\n    .filter((conf) => !!conf) as ProviderConfiguration[]\n\n  return configureNetworks({ networks })\n}\n\nexport function getContractForNetwork(conf: ProviderConfiguration): Contract {\n  let provider: Provider = conf.provider || conf.web3?.currentProvider\n  if (!provider) {\n    if (conf.rpcUrl) {\n      const chainIdRaw = conf.chainId ? conf.chainId : deployments.find((d) => d.name === conf.name)?.chainId\n      const chainId = chainIdRaw ? BigNumber.from(chainIdRaw).toNumber() : chainIdRaw\n      provider = new JsonRpcProvider(conf.rpcUrl, chainId || 'any')\n    } else {\n      throw new Error(`invalid_config: No web3 provider could be determined for network ${conf.name || conf.chainId}`)\n    }\n  }\n  const contract: Contract = ContractFactory.fromSolidity(EthereumDIDRegistry)\n    .attach(conf.registry || DEFAULT_REGISTRY_ADDRESS)\n    .connect(provider)\n  return contract\n}\n\nfunction configureNetwork(net: ProviderConfiguration): ConfiguredNetworks {\n  const networks: ConfiguredNetworks = {}\n  const chainId =\n    net.chainId || deployments.find((d) => net.name && (d.name === net.name || d.description === net.name))?.chainId\n  if (chainId) {\n    if (net.name) {\n      networks[net.name] = getContractForNetwork(net)\n    }\n    const id = typeof chainId === 'number' ? `0x${chainId.toString(16)}` : chainId\n    networks[id] = getContractForNetwork(net)\n  } else if (net.provider || net.web3 || net.rpcUrl) {\n    networks[net.name || ''] = getContractForNetwork(net)\n  }\n  return networks\n}\n\nfunction configureSyncLog(net: ProviderConfiguration): SyncLogs {\n  let fromBlock: string | number = 'latest'\n  let toBlock : string | number = 'latest'\n  if(net.syncLog) {\n    fromBlock = net.syncLog.fromBlock\n    toBlock = net.syncLog.toBlock\n  }\n  const syncLogs: SyncLogs = {}\n  const chainId =\n    net.chainId || deployments.find((d) => net.name && (d.name === net.name || d.description === net.name))?.chainId\n  if (chainId) {\n    if (net.name) {\n      syncLogs[net.name] = {\n        fromBlock: fromBlock,\n        toBlock: toBlock\n      }\n    }\n    const id = typeof chainId === 'number' ? `0x${chainId.toString(16)}` : chainId\n    syncLogs[id] = {\n      fromBlock: fromBlock,\n      toBlock: toBlock\n    }\n  } else if (net.provider || net.web3 || net.rpcUrl) {\n    syncLogs[net.name || ''] = {\n      fromBlock: fromBlock,\n      toBlock: toBlock\n    }\n  }\n  return syncLogs\n}\n\nfunction configureNetworks(conf: MultiProviderConfiguration): ConfiguredNetworks {\n  return {\n    ...configureNetwork(conf),\n    ...conf.networks?.reduce<ConfiguredNetworks>((networks, net) => {\n      return { ...networks, ...configureNetwork(net) }\n    }, {}),\n  }\n}\n\nfunction configureSyncLogs(conf: MultiProviderConfiguration): SyncLogs {\n  return {\n    ...configureSyncLog(conf),\n    ...conf.networks?.reduce<SyncLogs>((networks, net) => {\n      return { ...networks, ...configureSyncLog(net) }\n    }, {}),\n  }\n}\n\n/**\n * Generates a configuration that maps ethereum network names and chainIDs to the respective ERC1056 contracts deployed\n * on them.\n * @returns a record of ERC1056 `Contract` instances\n * @param conf configuration options for the resolver. An array of network details.\n * Each network entry should contain at least one of `name` or `chainId` AND one of `provider`, `web3`, or `rpcUrl`\n * For convenience, you can also specify an `infuraProjectId` which will create a mapping for all the networks\n *   supported by https://infura.io.\n * @example ```js\n * [\n *   { name: 'development', registry: '0x9af37603e98e0dc2b855be647c39abe984fc2445', rpcUrl: 'http://127.0.0.1:8545/' },\n *   { name: 'goerli', chainId: 5, provider: new InfuraProvider('goerli') },\n *   { name: 'rinkeby', provider: new AlchemyProvider('rinkeby') },\n *   { name: 'rsk:testnet', chainId: '0x1f', rpcUrl: 'https://public-node.testnet.rsk.co' },\n * ]\n * ```\n */\nexport function configureResolverWithNetworks(conf: ConfigurationOptions = {}): ConfiguredNetworks {\n  const networks = {\n    ...configureNetworksWithInfura((<InfuraConfiguration>conf).infuraProjectId),\n    ...configureNetworks(<MultiProviderConfiguration>conf),\n  }\n  if (Object.keys(networks).length === 0) {\n    throw new Error('invalid_config: Please make sure to have at least one network')\n  }\n  return networks\n}\n\nexport function configureResolverWithLogs(conf:ConfigurationOptions = {}) : SyncLogs {\n  const syncLogs = {\n    ...configureSyncLogs(<MultiProviderConfiguration>conf),\n  }\n  if (Object.keys(syncLogs).length === 0) {\n    throw new Error('invalid_config: Please make sure to have at least one syncLog')\n  }\n  return syncLogs\n}","import { Signer } from '@ethersproject/abstract-signer'\nimport { CallOverrides, Contract } from '@ethersproject/contracts'\nimport { BlockTag, JsonRpcProvider, Provider, TransactionReceipt } from '@ethersproject/providers'\nimport { getContractForNetwork } from './configuration'\nimport { address, DEFAULT_REGISTRY_ADDRESS, interpretIdentifier, stringToBytes32 } from './helpers'\n\n/**\n * A class that can be used to interact with the ERC1056 contract on behalf of a local controller key-pair\n */\nexport class EthrDidController {\n  private contract: Contract\n  private signer?: Signer\n  private address: string\n  public did: string\n\n  /**\n   * Creates an EthrDidController instance.\n   *\n   * @param identifier - required - a `did:zxc` string or a publicKeyHex or an ethereum address\n   * @param signer - optional - a Signer that represents the current controller key (owner) of the identifier. If a 'signer' is not provided, then a 'contract' with an attached signer can be used.\n   * @param contract - optional - a Contract instance representing a ERC1056 contract. At least one of `contract`, `provider`, or `rpcUrl` is required\n   * @param chainNameOrId - optional - the network name or chainID, defaults to 'zxc'\n   * @param provider - optional - a web3 Provider. At least one of `contract`, `provider`, or `rpcUrl` is required\n   * @param rpcUrl - optional - a JSON-RPC URL that can be used to connect to an ethereum network. At least one of `contract`, `provider`, or `rpcUrl` is required\n   * @param registry - optional - The ERC1056 registry address. Defaults to '0xdca7ef03e98e0dc2b855be647c39abe984fcf21b'. Only used with 'provider' or 'rpcUrl'\n   */\n  constructor(\n    identifier: string | address,\n    contract?: Contract,\n    signer?: Signer,\n    chainNameOrId = 'zxc',\n    provider?: Provider,\n    rpcUrl?: string,\n    registry: string = DEFAULT_REGISTRY_ADDRESS\n  ) {\n    // initialize identifier\n    const { address, publicKey, network } = interpretIdentifier(identifier)\n    const net = network || chainNameOrId\n    // initialize contract connection\n    if (contract) {\n      this.contract = contract\n    } else if (provider || signer?.provider || rpcUrl) {\n      const prov = provider || signer?.provider\n      this.contract = getContractForNetwork({ name: net, provider: prov, registry, rpcUrl })\n    } else {\n      throw new Error(' either a contract instance or a provider or rpcUrl is required to initialize')\n    }\n    this.signer = signer\n    this.address = address\n    let networkString = net ? `${net}:` : ''\n    const exists = ['zxc:', '0x2ce:'].some((element) => element === networkString)\n    if (exists) {\n      networkString = ''\n    }\n    this.did = publicKey ? `did:zxc:${networkString}${publicKey}` : `did:zxc:${networkString}${address}`\n  }\n\n  async getOwner(address: address, blockTag?: BlockTag): Promise<string> {\n    const result = await this.contract.functions.identityOwner(address, { blockTag })\n    return result[0]\n  }\n\n  async attachContract(controller?: address | Promise<address>): Promise<Contract> {\n    const currentOwner = controller ? await controller : await this.getOwner(this.address, 'latest')\n    const signer = this.signer\n      ? this.signer\n      : (<JsonRpcProvider>this.contract.provider).getSigner(currentOwner) || this.contract.signer\n    return this.contract.connect(signer)\n  }\n\n  async changeOwner(newOwner: address, options: CallOverrides = {}): Promise<TransactionReceipt> {\n    // console.log(`changing owner for ${oldOwner} on registry at ${registryContract.address}`)\n    const overrides = {\n      gasLimit: 123456,\n      gasPrice: 1000000000,\n      ...options,\n    }\n\n    const contract = await this.attachContract(overrides.from)\n    delete overrides.from\n\n    const ownerChange = await contract.functions.changeOwner(this.address, newOwner, overrides)\n    return await ownerChange.wait()\n  }\n\n  async addDelegate(\n    delegateType: string,\n    delegateAddress: address,\n    exp: number,\n    options: CallOverrides = {}\n  ): Promise<TransactionReceipt> {\n    const overrides = {\n      gasLimit: 123456,\n      gasPrice: 1000000000,\n      ...options,\n    }\n    const contract = await this.attachContract(overrides.from)\n    delete overrides.from\n\n    const delegateTypeBytes = stringToBytes32(delegateType)\n    const addDelegateTx = await contract.functions.addDelegate(\n      this.address,\n      delegateTypeBytes,\n      delegateAddress,\n      exp,\n      overrides\n    )\n    addDelegateTx\n    return await addDelegateTx.wait()\n  }\n\n  async revokeDelegate(\n    delegateType: string,\n    delegateAddress: address,\n    options: CallOverrides = {}\n  ): Promise<TransactionReceipt> {\n    const overrides = {\n      gasLimit: 123456,\n      gasPrice: 1000000000,\n      ...options,\n    }\n    delegateType = delegateType.startsWith('0x') ? delegateType : stringToBytes32(delegateType)\n    const contract = await this.attachContract(overrides.from)\n    delete overrides.from\n    const addDelegateTx = await contract.functions.revokeDelegate(\n      this.address,\n      delegateType,\n      delegateAddress,\n      overrides\n    )\n    return await addDelegateTx.wait()\n  }\n\n  async setAttribute(\n    attrName: string,\n    attrValue: string,\n    exp: number,\n    options: CallOverrides = {}\n  ): Promise<TransactionReceipt> {\n    const overrides = {\n      gasLimit: 123456,\n      gasPrice: 1000000000,\n      controller: undefined,\n      ...options,\n    }\n    attrName = attrName.startsWith('0x') ? attrName : stringToBytes32(attrName)\n    attrValue = attrValue.startsWith('0x') ? attrValue : '0x' + Buffer.from(attrValue, 'utf-8').toString('hex')\n    const contract = await this.attachContract(overrides.from)\n    delete overrides.from\n    const setAttrTx = await contract.functions.setAttribute(this.address, attrName, attrValue, exp, overrides)\n    return await setAttrTx.wait()\n  }\n\n  async revokeAttribute(attrName: string, attrValue: string, options: CallOverrides = {}): Promise<TransactionReceipt> {\n    // console.log(`revoking attribute ${attrName}(${attrValue}) for ${identity}`)\n    const overrides = {\n      gasLimit: 123456,\n      gasPrice: 1000000000,\n      ...options,\n    }\n    attrName = attrName.startsWith('0x') ? attrName : stringToBytes32(attrName)\n    attrValue = attrValue.startsWith('0x') ? attrValue : '0x' + Buffer.from(attrValue, 'utf-8').toString('hex')\n    const contract = await this.attachContract(overrides.from)\n    delete overrides.from\n    const revokeAttributeTX = await contract.functions.revokeAttribute(this.address, attrName, attrValue, overrides)\n    return await revokeAttributeTX.wait()\n  }\n}\n"],"names":["DEREFERENCE_PATH","getResolver","url","resolver","ZXCDidResolver","build","constructor","web_did_resolver_url","resolve","_did","parsed","_unused","_options","encodeURIComponent","didUrl","request","get","then","res","data","catch","err","didResolutionMetadata","error","message","toString","didDocumentMetadata","didDocument","zxc","bind","identifierMatcher","DEFAULT_REGISTRY_ADDRESS","verificationMethodTypes","eventNames","legacyAttrTypes","sigAuth","veriKey","enc","legacyAlgoMap","Secp256k1VerificationKey2018","EcdsaSecp256k1VerificationKey2019","Ed25519SignatureAuthentication2018","Ed25519VerificationKey2018","Secp256k1SignatureAuthentication2018","RSAVerificationKey2018","X25519KeyAgreementKey2019","bytes32toString","input","buff","Buffer","from","slice","replace","stringToBytes32","str","buffStr","repeat","length","interpretIdentifier","identifier","id","network","undefined","startsWith","split","components","splice","join","address","computeAddress","publicKey","getAddress","Errors","getContractForNetwork","conf","provider","web3","currentProvider","rpcUrl","chainIdRaw","chainId","deployments","find","d","name","BigNumber","toNumber","JsonRpcProvider","Error","contract","ContractFactory","fromSolidity","EthereumDIDRegistry","attach","registry","connect","EthrDidController","signer","chainNameOrId","did","net","prov","networkString","exists","some","element","getOwner","blockTag","functions","identityOwner","result","attachContract","controller","currentOwner","getSigner","changeOwner","newOwner","options","overrides","gasLimit","gasPrice","ownerChange","wait","addDelegate","delegateType","delegateAddress","exp","delegateTypeBytes","addDelegateTx","revokeDelegate","setAttribute","attrName","attrValue","setAttrTx","revokeAttribute","revokeAttributeTX"],"mappings":"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"}