@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
51 lines • 2.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createSigner = void 0;
const rxjs_1 = require("rxjs");
const live_signer_evm_1 = require("@ledgerhq/live-signer-evm");
const live_env_1 = require("@ledgerhq/live-env");
const ethers_1 = require("ethers");
const isDmkTransport = (transport) => {
return ("dmk" in transport &&
transport.dmk !== undefined &&
"sessionId" in transport &&
transport.sessionId !== undefined);
};
const createLiveSigner = (transport) => {
if (isDmkTransport(transport)) {
return new live_signer_evm_1.DmkSignerEth(transport.dmk, transport.sessionId);
}
return new live_signer_evm_1.LegacySignerEth(transport);
};
const createSigner = (transport) => {
const signer = createLiveSigner(transport);
return {
getAddress: signer.getAddress.bind(signer),
signTransaction: async (path, tx) => {
// Configure type of resolutions necessary for the clear signing
const resolutionConfig = {
externalPlugins: true,
erc20: true,
nft: false,
uniswapV3: true,
};
const loadConfig = {
cryptoassetsBaseURL: (0, live_env_1.getEnv)("DYNAMIC_CAL_BASE_URL"),
nftExplorerBaseURL: (0, live_env_1.getEnv)("NFT_METADATA_SERVICE") + "/v1/ethereum",
};
signer.setLoadConfig(loadConfig);
const observable = signer.clearSignTransaction(path, tx.substring(2), resolutionConfig, true);
const event = observable.pipe((0, rxjs_1.filter)((event) => {
return event.type === "signer.evm.signed";
}));
const { value } = await (0, rxjs_1.firstValueFrom)(event);
return ethers_1.Signature.from({
r: "0x" + value.r,
s: "0x" + value.s,
v: typeof value.v === "number" ? value.v : parseInt(value.v, 16),
}).serialized;
},
};
};
exports.createSigner = createSigner;
//# sourceMappingURL=Eth.js.map