@ledgerhq/coin-near
Version:
67 lines • 3.12 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildSignOperation = void 0;
const nearAPI = __importStar(require("near-api-js"));
const bignumber_js_1 = require("bignumber.js");
const rxjs_1 = require("rxjs");
const errors_1 = require("@ledgerhq/errors");
const buildOptimisticOperation_1 = require("./buildOptimisticOperation");
const buildTransaction_1 = require("./buildTransaction");
/**
* Sign Transaction with Ledger hardware
*/
const buildSignOperation = (signerContext) => ({ account, transaction, deviceId, }) => new rxjs_1.Observable(o => {
async function main() {
o.next({ type: "device-signature-requested" });
if (!transaction.fees) {
throw new errors_1.FeeNotLoaded();
}
const { publicKey } = await signerContext(deviceId, signer => signer.getAddress(account.freshAddressPath));
const unsigned = await (0, buildTransaction_1.buildTransaction)(account, transaction, publicKey);
const response = await signerContext(deviceId, signer => signer.signTransaction(unsigned.encode(), account.freshAddressPath));
const signedTransaction = new nearAPI.transactions.SignedTransaction({
transaction: unsigned,
signature: new nearAPI.transactions.Signature({
keyType: unsigned.publicKey.keyType,
data: response,
}),
});
o.next({ type: "device-signature-granted" });
const operation = (0, buildOptimisticOperation_1.buildOptimisticOperation)(account, transaction, transaction.fees ?? new bignumber_js_1.BigNumber(0));
const signedSerializedTx = signedTransaction.encode();
o.next({
type: "signed",
signedOperation: {
operation,
signature: Buffer.from(signedSerializedTx).toString("base64"),
},
});
}
main().then(() => o.complete(), e => o.error(e));
});
exports.buildSignOperation = buildSignOperation;
exports.default = exports.buildSignOperation;
//# sourceMappingURL=signOperation.js.map