@ledgerhq/coin-internet_computer
Version:
Ledger Internet Computer integration
38 lines • 1.54 kB
JavaScript
import { Observable } from "rxjs";
import { getAddress } from "./bridgeHelpers/addresses";
import { getTxnExpirationDate, getTxnMetadata, getUnsignedTransaction, signICPTransaction, } from "./bridgeHelpers/icpRosetta";
import { buildOptimisticOperation } from "./buildOptimisticOperation";
import { getPath } from "../common-logic";
export const buildSignOperation = (signerContext) => ({ account, transaction, deviceId }) => new Observable(o => {
async function main() {
const { xpub } = account;
const { derivationPath } = getAddress(account);
const { unsignedTxn, payloads } = await getUnsignedTransaction(transaction, account);
o.next({
type: "device-signature-requested",
});
const { signedTxn } = await signICPTransaction({
signerContext,
deviceId,
unsignedTxn,
path: getPath(derivationPath),
payloads,
pubkey: xpub ?? "",
});
o.next({
type: "device-signature-granted",
});
const { hash } = await getTxnMetadata(signedTxn);
const operation = await buildOptimisticOperation(account, transaction, hash);
o.next({
type: "signed",
signedOperation: {
operation,
signature: signedTxn,
expirationDate: getTxnExpirationDate(unsignedTxn),
},
});
}
main().then(() => o.complete(), e => o.error(e));
});
//# sourceMappingURL=signOperation.js.map