{
  "version": 3,
  "sources": ["../src/index.ts", "../src/hd-wallet.ts", "../src/wallet.ts", "../src/constants.ts", "../src/single-key-wallet.ts", "../src/storage/lowdb-storage.ts", "../src/storage/memory-storage.ts"],
  "sourcesContent": ["export * from './hd-wallet.js'\nexport * from './single-key-wallet.js'\nexport * from './wallet.js'\nexport * from './storage/index.js'\n", "import {\n  Address,\n  base16,\n  HDPrivKey,\n  instructions,\n  LockType,\n  OpCode,\n  Output,\n  Pointer,\n  PrivKey,\n  Tx,\n} from '@aldea/sdk'\nimport {Wallet} from \"./wallet.js\";\nimport {WalletStorage} from \"./storage/index.js\";\nimport {MAX_GAP_SIZE, PATH_PREFIX} from \"./constants.js\";\nimport {AldeaClient} from \"./aldea-client.js\";\n\n\nexport class HdWallet extends Wallet {\n  private hd: HDPrivKey;\n  private storage: WalletStorage;\n  constructor(hd: HDPrivKey, storage: WalletStorage, client: AldeaClient) {\n    super(client)\n    this.hd = hd\n    this.storage = storage\n  }\n\n  async getInventory(): Promise<Array<Output>> {\n    return this.storage.allUtxos()\n  }\n\n  async signTx(partialTx: Tx, updateSigs?: PrivKey | HDPrivKey | Array<PrivKey | HDPrivKey>): Promise<Tx> {\n    const outputIds = partialTx.instructions\n      .filter(i => i.opcode === OpCode.LOAD)\n      .map(i => {\n        const inst = i as instructions.LoadInstruction\n        return inst.outputId\n      })\n      .map(base16.encode)\n\n    const originPtrs = partialTx.instructions\n      .filter(i => i.opcode === OpCode.LOADBYORIGIN)\n      .map(i => {\n        const inst = i as instructions.LoadByOriginInstruction\n        return Pointer.fromBytes(inst.origin)\n      })\n\n    const paths: string[] = []\n\n    for (const outputId of outputIds) {\n      const ownedOutput = await this.storage.utxoById(outputId)\n      if (ownedOutput) {\n        paths.push(ownedOutput.path)\n      }\n    }\n\n    for (const ptr of originPtrs) {\n      const ownedOutput = await this.storage.utxoByOrigin(ptr)\n      if (ownedOutput) {\n        paths.push(ownedOutput.path)\n      }\n    }\n\n    return this.client.createTx({ extend: partialTx, updateSigs }, txb => {\n      for (const path of paths) {\n        const priv = this.hd.derive(path.replace('M', 'm')) as HDPrivKey\n        txb.sign(priv)\n      }\n    })\n  }\n\n  async saveTxExec(tx: Tx, outputs: Output[]): Promise<void> {\n    await this.storage.saveTx(tx)\n    for (const output of outputs) {\n      await this.addUtxo(output)\n    }\n  }\n\n  async getNextAddress(): Promise<Address> {\n    const index = await this.storage.currentIndex()\n    const lastUsed = await this.storage.latestUsedIndex()\n\n    const next = index - lastUsed > MAX_GAP_SIZE\n      ? lastUsed\n      : index\n\n    const path = `M${PATH_PREFIX}${index}`; // Derive pubkey\n    const hdPub = this.hd.derive(path);\n    const address = hdPub.toPubKey().toAddress();\n    await this.storage.saveAddress(address, path)\n    await this.storage.changeCurrentIndex(_ => next + 1)\n    return address\n  }\n\n  async sync(): Promise<void> {\n    let lastIndexUsed = await this.storage.latestUsedIndex()\n    let current = lastIndexUsed\n    while (current < lastIndexUsed + MAX_GAP_SIZE) {\n      const path = `M${PATH_PREFIX}${current}`;\n      const address = this.hd.derive(path).toPubKey().toAddress()\n      await this.storage.saveAddress(address, path)\n      const utxos = await this.client.getUtxosByAddress(address)\n      if (utxos.length > 0) {\n        lastIndexUsed = current\n        await this.storage.changeLastUsedIndex(() => current)\n        await this.storage.changeCurrentIndex(() => current)\n      }\n      await Promise.all(utxos.map(async (utxo) => {\n        await this.addUtxo(utxo)\n      }))\n      current++\n    }\n    return Promise.resolve()\n  }\n\n  async addUtxo (output: Output): Promise<void> {\n    if (output.lock.type !== LockType.ADDRESS) return\n    let addressOrNull = await this.storage.addressByPubKeyHash(base16.encode(output.lock.data))\n    if (addressOrNull === null) { // address does not belong to wallet.\n      return\n    }\n\n    if (!output.abi) {\n      output.abi = await this.client.getPackageAbi(output.classPtr.id)\n    }\n\n    await this.storage.addAbi(output.classPtr.id, output.abi)\n    await this.storage.removeUtxoByOrigin(output.origin)\n    await this.storage.saveUtxo(output, addressOrNull.path)\n  }\n}\n", "import { LoadByOriginInstruction, LoadInstruction } from \"@aldea/core/instructions\";\nimport {\n  Address,\n  CommitTxResponse,\n  CreateTxCallback,\n  HDPrivKey,\n  OpCode,\n  Output,\n  Pointer,\n  PrivKey,\n  Tx,\n  TxBuilderOpts, \n  base16, \n} from \"@aldea/sdk\"\n\nimport {COIN_CLASS_PTR} from \"./constants.js\";\nimport {AldeaClient} from \"./aldea-client.js\";\n\n\nexport abstract class Wallet {\n  protected client: AldeaClient\n  constructor (client: AldeaClient) {\n    this.client = client\n  }\n\n  abstract getNextAddress(): Promise<Address>\n  abstract getInventory(): Promise<Array<Output>>\n  abstract signTx(partialTx: Tx, updateSigs?: PrivKey | HDPrivKey | Array<PrivKey | HDPrivKey>): Promise<Tx>\n  abstract saveTxExec(tx: Tx, outputList: Output[]): Promise<void>\n  abstract addUtxo(output: Output): Promise<void>\n  abstract sync(): Promise<void>\n\n  async fundTx(partialTx: Tx): Promise<Tx> {\n    const outputs = await this.getInventory()\n    const coinOutputs = outputs.filter(o => {\n      return o.classPtr.equals(COIN_CLASS_PTR) && !partialTx.instructions.some(i => {\n        return (\n          i.opcode === OpCode.LOAD && o.id === base16.encode((<LoadInstruction>i).outputId)\n        ) || (\n          i.opcode === OpCode.LOADBYORIGIN && o.origin.equals(Pointer.fromBytes((<LoadByOriginInstruction>i).origin))\n        )\n      })\n    })\n\n    return await this.client.createTx({ extend: partialTx }, async (txb) => {\n      let motosIn = 0n\n\n      for (const coin of coinOutputs) {\n        if (coin.props?.amount) {\n          const coinRef = txb.load(coin.id)\n          motosIn += coin.props.amount\n\n          if (motosIn > 100n) {\n            const changeAddr = await this.getNextAddress()\n            const changeRef = txb.call(coinRef, 'send', [motosIn - 100n])\n            txb.lock(changeRef, changeAddr)\n            motosIn = 100n\n          }\n          txb.fund(coinRef)\n        }  \n  \n        if (motosIn === 100n) {\n          break\n        }\n      }\n    })\n  }\n\n  async commitTx(tx: Tx): Promise<CommitTxResponse> {\n    const response = await this.client.commitTx(tx)\n    const outputs = response.outputs.map(o =>Output.fromJson(o))\n    await this.saveTxExec(tx, outputs)\n    return response\n  }\n\n  async createFundedTx(builder: CreateTxCallback): Promise<Tx>;\n  async createFundedTx(opts: TxBuilderOpts, builder: CreateTxCallback): Promise<Tx>;\n  async createFundedTx(optsOrBuilder: TxBuilderOpts | CreateTxCallback, builder?: CreateTxCallback): Promise<Tx> {\n    let opts: TxBuilderOpts\n    if (typeof optsOrBuilder === 'function') {\n      opts = {}\n      builder = optsOrBuilder as CreateTxCallback\n    } else {\n      opts = optsOrBuilder\n      builder = builder as CreateTxCallback\n    }\n    const userTx = await this.client.createTx(opts, builder)\n    const fundedTx = await this.fundTx(userTx)\n    return this.signTx(fundedTx, opts.updateSigs)\n  }\n}\n", "import {Pointer} from \"@aldea/sdk\";\n\nexport const COIN_CLASS_PTR = Pointer.fromString(\"0000000000000000000000000000000000000000000000000000000000000000_0\")\nexport const PATH_PREFIX = \"/0/\"\nexport const MAX_GAP_SIZE = 20\n", "import {\n  Address,\n  HDPrivKey,\n  LockType,\n  Output,\n  PrivKey,\n  Tx,\n  util,\n} from '@aldea/sdk'\nimport {Wallet} from \"./wallet.js\";\nimport {WalletStorage} from \"./storage/index.js\";\nimport {AldeaClient} from \"./aldea-client.js\";\n\nexport class SingleKeyWallet extends Wallet {\n  private storage: WalletStorage\n  private readonly privKey: PrivKey\n\n  constructor(pk: PrivKey, storage: WalletStorage, client: AldeaClient) {\n    super(client)\n    this.privKey = pk\n    this.storage = storage\n  }\n\n  async addUtxo(output: Output): Promise<void> {\n    if (output.lock.type !== LockType.ADDRESS) return\n\n    if (!util.buffEquals(output.lock.data, this.address().hash)) return\n\n    if (!output.abi) {\n      output.abi = await this.fetchAbi(output.classPtr.id)\n    }\n\n    await this.storage.addAbi(output.classPtr.id, output.abi)\n    await this.storage.removeUtxoByOrigin(output.origin)\n    await this.storage.saveUtxo(output, '')\n  }\n\n\n\n  async getInventory(): Promise<Array<Output>> {\n    return this.storage.allUtxos()\n  }\n\n  async getNextAddress(): Promise<Address> {\n    return this.privKey.toPubKey().toAddress()\n  }\n\n  async saveTxExec(tx: Tx, outputList: Output[]): Promise<void> {\n    await Promise.all(outputList.map(output => this.addUtxo(output)))\n    await this.storage.saveTx(tx)\n  }\n\n  async signTx(partialTx: Tx, updateSigs?: PrivKey | HDPrivKey | Array<PrivKey | HDPrivKey>): Promise<Tx> {\n    return this.client.createTx({ extend: partialTx, updateSigs }, txb => {\n      txb.sign(this.privKey)\n    })\n  }\n\n  async sync(): Promise<void> {\n    const outputs = await this.client.getUtxosByAddress(this.address())\n    for (const output of outputs) {\n      await this.addUtxo(output)\n    }\n  }\n\n  private address() {\n    return this.privKey.toPubKey().toAddress()\n  }\n\n  private async fetchAbi(pkgId: string) {\n    let abi = await this.storage.abiByPkgId(pkgId)\n    if (!abi) {\n      const newAbi = await this.client.getPackageAbi(pkgId)\n      await this.storage.addAbi(pkgId, newAbi)\n      abi = newAbi\n    }\n    return abi\n  }\n}\n", "import {Adapter, Low} from 'lowdb'\nimport {Address, base16, instructions, OpCode, Output, Pointer, Tx, abiFromBin, abiToBin} from '@aldea/sdk'\nimport {Abi} from \"@aldea/core/abi\";\nimport {OwnedAddress, OwnedOutput, WalletStorage} from \"./wallet-storage.js\";\n\n\ntype OutputItem = {\n  origin: string,\n  id: string,\n  outputHex: string\n  path: string\n}\n\ntype AddressItem = {\n  addrStr: string,\n  hash: string,\n  path: string\n}\n\ntype AbiItem = {\n  abiStr: string,\n  pkgId: string\n}\n\ntype TxItem = {\n  id: string,\n  txHex: string\n}\n\nexport interface LowDbData {\n  utxos: OutputItem[]\n  addresses: AddressItem[]\n  abis: AbiItem[]\n  currentIndex: number\n  latestUsedIndex: number\n  txs: TxItem[]\n}\n\nexport class LowDbStorage implements WalletStorage {\n  db: Low<LowDbData>\n  constructor(adapter: Adapter<LowDbData>, LowConstructor: typeof Low = Low) {\n    this.db = new LowConstructor(adapter, {\n      utxos: [],\n      txs: [],\n      addresses: [],\n      abis: [],\n      currentIndex: 0,\n      latestUsedIndex: 0\n    })\n  }\n\n  private data (): LowDbData {\n    return this.db.data\n  }\n\n  async allUtxos(): Promise<Array<Output>> {\n    this.data().utxos.map(o => o)\n    return this.data().utxos.map(ownedUtxo => {\n      const output = Output.fromHex(ownedUtxo.outputHex)\n      const abi = this.data().abis.find(u => u.pkgId === output.classPtr.id)\n      if (abi === undefined) {\n        throw new Error('abi should be present')\n      }\n      output.abi = abiFromBin(base16.decode(abi.abiStr))\n      return output\n    })\n  }\n\n  async saveUtxo(output: Output, path: string): Promise<void> {\n    this.data().utxos.push({\n      id: output.id,\n      origin: output.origin.toString(),\n      outputHex: output.toHex(),\n      path: path\n    })\n\n    await this.db.write()\n  }\n\n  async saveAddress(address: Address, path: string): Promise<void> {\n    this.data().addresses.push({\n      addrStr: address.toString(),\n      hash: base16.encode(address.hash),\n      path: path\n    })\n    await this.db.write()\n  }\n\n  async changeCurrentIndex(f: (newIndex: number) => number): Promise<number> {\n    this.data().currentIndex = f(this.data().currentIndex)\n    await this.db.write()\n    return this.data().currentIndex\n  }\n\n  async changeLastUsedIndex(f: (newIndex: number) => number): Promise<number> {\n    this.data().latestUsedIndex = f(this.data().latestUsedIndex)\n    await this.db.write()\n    return this.data().latestUsedIndex\n  }\n\n  async currentIndex(): Promise<number> {\n    return this.data().currentIndex\n  }\n\n  async latestUsedIndex(): Promise<number> {\n    return this.data().latestUsedIndex\n  }\n\n  async utxoById(outputId: string): Promise<OwnedOutput | null> {\n    const outputItem = this.data().utxos.find(u => u.id === outputId);\n    if (!outputItem) {\n      return null\n    }\n    const output = Output.fromHex(outputItem.outputHex)\n    const abiItem = this.data().abis.find(a => a.pkgId === output.classPtr.id)\n    if (!abiItem) {\n      throw new Error('abi should be present')\n    }\n    output.abi = abiFromBin(base16.decode(abiItem.abiStr))\n    return {\n      output: output,\n      path: outputItem.path\n    }\n  }\n\n  async utxoByOrigin(origin: Pointer): Promise<OwnedOutput | null> {\n    const outputItem = this.data().utxos.find(u => u.origin === origin.toString());\n    if (!outputItem) {\n      return null\n    }\n    const output = Output.fromHex(outputItem.outputHex)\n    const abiItem = this.data().abis.find(a => a.pkgId === output.classPtr.id)\n    if (!abiItem) {\n      throw new Error('abi should be present')\n    }\n    output.abi = abiFromBin(base16.decode(abiItem.abiStr))\n    return {\n      output: output,\n      path: outputItem.path\n    }\n  }\n\n  async saveTx (tx: Tx): Promise<void> {\n    const loadInputs = tx.instructions\n      .filter(inst => inst.opcode === OpCode.LOAD)\n      .map(inst => {\n        const casted = inst as instructions.LoadInstruction\n        return base16.encode(casted.outputId)\n      })\n    const originInputs = tx.instructions\n      .filter(inst => inst.opcode === OpCode.LOADBYORIGIN)\n      .map(inst => {\n        const casted = inst as instructions.LoadByOriginInstruction\n        return base16.encode(casted.origin)\n      })\n\n    this.data().utxos = this.data().utxos.filter(u =>\n      !loadInputs.some(outputId => outputId === u.id) &&\n      !originInputs.some(origin => origin === u.origin)\n    )\n\n    this.data().txs.push({\n      id: tx.id,\n      txHex: tx.toHex()\n    })\n    await this.db.write()\n  }\n\n  async removeUtxoByOrigin(origin: Pointer): Promise<void> {\n    this.data().utxos = this.data().utxos.filter(u => u.origin !== origin.toString())\n    await this.db.write()\n  }\n\n  async removeUtxoByOutputId(id: string): Promise<void> {\n    this.data().utxos = this.data().utxos.filter(u => u.id !== id)\n    await this.db.write()\n  }\n\n  async addressByPubKeyHash(pubKeHashStr: string): Promise<OwnedAddress | null> {\n    let addr = this.db.data.addresses.find(a => a.hash === pubKeHashStr)\n    if (!addr) return null\n    return {\n      address: Address.fromString(addr.addrStr),\n      path: addr.path\n    }\n  }\n\n  async addAbi(pkgId: string, abi: Abi): Promise<void> {\n    const exists = this.data().abis.some(a => a.pkgId === pkgId)\n    if (!exists) {\n      this.data().abis.push({\n        abiStr: base16.encode(abiToBin(abi)),\n        pkgId\n      })\n      return Promise.resolve(undefined);\n    }\n  }\n\n  async abiByPkgId(pkgId: string): Promise<Abi | null> {\n    const abiItem = this.data().abis.find(a => a.pkgId === pkgId);\n    if (!abiItem) {\n      return null\n    }\n    return abiFromBin(base16.decode(abiItem.abiStr))\n  }\n}\n\n", "import {OwnedAddress, OwnedOutput, WalletStorage} from \"./wallet-storage.js\";\nimport {Address, base16, instructions, OpCode, Output, Pointer, Tx} from \"@aldea/sdk\";\nimport {Abi} from \"@aldea/core/abi\";\n\ntype AbiItem = {\n  abi: Abi,\n  pkgId: string\n}\n\nexport class MemoryStorage implements WalletStorage {\n  utxos: OwnedOutput[]\n  addresses: OwnedAddress[]\n  abis: AbiItem[]\n  txs: Tx[]\n  _currentIndex: number\n  _latestUsedIndex: number\n\n  constructor() {\n    this.utxos = []\n    this.addresses = []\n    this.abis = []\n    this.txs = []\n    this._currentIndex = 0\n    this._latestUsedIndex = 0\n  }\n  async abiByPkgId(pkgId: string): Promise<Abi | null> {\n    const res = this.abis.find(a => a.pkgId === pkgId)\n    if (!res) return null\n    return res.abi\n  }\n\n  async addAbi(pkgId: string, abi: Abi): Promise<void> {\n    const exists = this.abis.some(a => a.pkgId === pkgId)\n    if (!exists) {\n      this.abis.push({ pkgId, abi })\n    }\n  }\n\n  async addressByPubKeyHash(pubKeHashStr: string): Promise<OwnedAddress | null> {\n    let addr = this.addresses.find(a => base16.encode(a.address.hash) === pubKeHashStr)\n    if (!addr) return null\n    return addr\n  }\n\n  async allUtxos(): Promise<Output[]> {\n    return this.utxos.map(u => u.output);\n  }\n\n  async changeCurrentIndex(f: (newIndex: number) => number): Promise<number> {\n    return this._currentIndex;\n  }\n\n  async changeLastUsedIndex(f: (newIndex: number) => number): Promise<number> {\n    this._latestUsedIndex = f(this._latestUsedIndex)\n    return this._latestUsedIndex\n  }\n\n  async currentIndex(): Promise<number> {\n    return this._currentIndex;\n  }\n\n  async latestUsedIndex(): Promise<number> {\n    return this._latestUsedIndex\n  }\n\n  async removeUtxoByOrigin(origin: Pointer): Promise<void> {\n    this.utxos = this.utxos.filter(u => !u.output.origin.equals(origin))\n  }\n\n  async removeUtxoByOutputId(id: string): Promise<void> {\n    this.utxos = this.utxos.filter(u => u.output.id !== id)\n  }\n\n\n  async saveAddress(address: Address, path: string): Promise<void> {\n    this.addresses.push({ address, path })\n  }\n\n  async saveTx(tx: Tx): Promise<void> {\n    const loadInputs = tx.instructions\n      .filter(inst => inst.opcode === OpCode.LOAD)\n      .map(inst => {\n        const casted = inst as instructions.LoadInstruction\n        return base16.encode(casted.outputId)\n      })\n    const originInputs = tx.instructions\n      .filter(inst => inst.opcode === OpCode.LOADBYORIGIN)\n      .map(inst => {\n        const casted = inst as instructions.LoadByOriginInstruction\n        return base16.encode(casted.origin)\n      })\n\n    this.utxos = this.utxos.filter(u =>\n      !loadInputs.some(outputId => outputId === u.output.id) &&\n      !originInputs.some(origin => origin === u.output.origin.toString())\n    )\n\n    this.txs.push(tx)\n  }\n\n  async saveUtxo(output: Output, path: string): Promise<void> {\n    this.utxos.push({ output, path })\n  }\n\n  async utxoById(outputId: string): Promise<OwnedOutput | null> {\n    const res = this.utxos.find(u => u.output.id === outputId)\n    if (!res) return null\n    return res\n  }\n\n  async utxoByOrigin(origin: Pointer): Promise<OwnedOutput | null> {\n    const res = this.utxos.find(u => u.output.origin.equals(origin) )\n    if (!res) return null\n    return res\n  }\n}\n"],
  "mappings": "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",
  "names": ["import_sdk", "import_sdk", "import_sdk", "import_sdk", "import_sdk"]
}
