{"version":3,"file":"ledger-hw-app.mjs","sourceRoot":"","sources":["../src/ledger-hw-app.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,eAAc,6BAA6B;;AAClD,OAAO,EAAE,MAAM,EAAE,eAAe;AAIhC,MAAM,OAAO,sBACX,SAAQ,cAAc;IADxB;;QAIW,gBAAW,GAAG,OAAO,CAAC;QAEtB,eAAU,GAAG,UAAU,CAAC;QAExB,sBAAiB,GAAG,OAAO,CAAC;IAuDvC,CAAC;IArDC;;;OAGG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CACvB,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,CACrD,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,oBAAoB;QACxB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACnE,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC,IAAI,CAAC,CAAC;QAEP,MAAM,OAAO,GAAG,QAAQ;aACrB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC;aAC3B,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEpC,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,IAAI,CAAC,CAAC;QAEP,MAAM,OAAO,GAAG,QAAQ;aACrB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC;aAC9B,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEpC,OAAO;YACL,OAAO;YACP,OAAO;SACR,CAAC;IACJ,CAAC;CACF","sourcesContent":["import LedgerHwAppEth from '@ledgerhq/hw-app-eth';\nimport { Buffer } from 'buffer';\n\nimport { GetAppNameAndVersionResponse } from './type';\n\nexport class MetaMaskLedgerHwAppEth\n  extends LedgerHwAppEth\n  implements MetaMaskLedgerHwAppEth\n{\n  readonly mainAppName = 'BOLOS';\n\n  readonly ethAppName = 'Ethereum';\n\n  readonly transportEncoding = 'ascii';\n\n  /**\n   * Method to open ethereum application on ledger device.\n   *\n   */\n  async openEthApp(): Promise<void> {\n    await this.transport.send(\n      0xe0,\n      0xd8,\n      0x00,\n      0x00,\n      Buffer.from(this.ethAppName, this.transportEncoding),\n    );\n  }\n\n  /**\n   * Method to close all running application on ledger device.\n   *\n   */\n  async closeApps(): Promise<void> {\n    await this.transport.send(0xb0, 0xa7, 0x00, 0x00);\n  }\n\n  /**\n   * Method to retrieve the name and version of the running application in ledger device.\n   *\n   * @returns An object contains appName and version.\n   */\n  async getAppNameAndVersion(): Promise<GetAppNameAndVersionResponse> {\n    const response = await this.transport.send(0xb0, 0x01, 0x00, 0x00);\n    if (response[0] !== 1) {\n      throw new Error('Incorrect format return from getAppNameAndVersion.');\n    }\n\n    let i = 1;\n    const nameLength = response[i] ?? 0;\n    i += 1;\n\n    const appName = response\n      .slice(i, (i += nameLength))\n      .toString(this.transportEncoding);\n\n    const versionLength = response[i] ?? 0;\n    i += 1;\n\n    const version = response\n      .slice(i, (i += versionLength))\n      .toString(this.transportEncoding);\n\n    return {\n      appName,\n      version,\n    };\n  }\n}\n"]}