@ledgerhq/coin-stellar
Version:
Ledger Stellar Coin integration
125 lines • 4.81 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const stellar_sdk_1 = require("@stellar/stellar-sdk");
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const crypto_1 = require("crypto");
const config_1 = __importDefault(require("../config"));
const bridge_fixture_1 = require("../types/bridge.fixture");
const buildTransaction_1 = __importDefault(require("./buildTransaction"));
const signOperation_1 = require("./signOperation");
const stellarKp = stellar_sdk_1.Keypair.random();
const mockLoadAccount = jest.fn().mockResolvedValue(
// Stub of Horizon.AccountResponse
{
id: stellarKp.publicKey(), //"GB3KJPLFUYN5VL6R3GU3EGCGVCKFDSD7BEDX42HWG5BWFKB3KQGJJRMA",
sequence: "0",
balances: [
{
balance: "1000",
asset_type: "native", //AssetType.native,
buying_liabilities: "",
selling_liabilities: "",
},
],
accountId: () => stellarKp.publicKey(), //"GB3KJPLFUYN5VL6R3GU3EGCGVCKFDSD7BEDX42HWG5BWFKB3KQGJJRMA",
sequenceNumber: () => "0",
incrementSequenceNumber: () => "1",
});
jest.mock("../network", () => ({
...jest.requireActual("../network"),
loadAccount: () => mockLoadAccount(),
fetchSequence: jest.fn(),
}));
describe.skip("signOperation", () => {
let spySignTransaction;
const fakeSigner = {
getPublicKey: jest.fn(),
signTransaction: (addr, tx) => spySignTransaction(addr, tx),
};
const signerContext = (_deviceId, fn) => fn(fakeSigner);
const signOperation = (0, signOperation_1.buildSignOperation)(signerContext);
const deviceId = "dummyDeviceId";
beforeAll(() => {
config_1.default.setCoinConfig(() => ({
status: { type: "active" },
explorer: {
url: "https://localhost",
},
}));
});
// beforeEach(() => {
// });
it("returns events in the right order", done => {
// GIVEN
spySignTransaction = async (_addr, tx) => {
// const signature = stellarKp.sign(tx);
const signature = stellarKp.signDecorated(tx).toXDR();
const hashSig = await crypto_1.subtle.digest("SHA-256", signature);
const hash = Buffer.from(hashSig);
// expect(stellarKp.verify(tx, hash)).toBeTruthy();
return Promise.resolve({ signature: hash });
};
const account = (0, bridge_fixture_1.createFixtureAccount)({
freshAddress: stellarKp.publicKey(),
freshAddressPath: stellarKp.publicKey(),
});
const transaction = (0, bridge_fixture_1.createFixtureTransaction)({
amount: (0, bignumber_js_1.default)(1),
fees: (0, bignumber_js_1.default)(1),
networkInfo: { family: "stellar" },
});
// WHEN & THEN
const expectedEvent = [
{
type: "device-signature-requested",
},
{
type: "device-signature-granted",
},
{
type: "signed",
},
];
let eventIdx = 0;
(0, buildTransaction_1.default)(account, transaction).then(unsigned => {
const sig = stellarKp.sign(unsigned.hash());
expect(stellarKp.verify(unsigned.hash(), sig)).toBeTruthy();
unsigned.addSignature(stellarKp.publicKey(), sig.toString("base64"));
});
signOperation({ account, deviceId, transaction }).forEach(e => {
try {
expect(e.type).toEqual(expectedEvent[eventIdx].type);
eventIdx++;
if (eventIdx === expectedEvent.length) {
done();
}
}
catch (err) {
done(err);
}
});
});
it.skip("returns signature value from LedgerSigner", done => {
// GIVEN
const account = (0, bridge_fixture_1.createFixtureAccount)();
const transaction = (0, bridge_fixture_1.createFixtureTransaction)({
amount: (0, bignumber_js_1.default)(1),
fees: (0, bignumber_js_1.default)(1),
networkInfo: { family: "stellar" },
});
// WHEN & THEN
const subscriber = signOperation({ account, deviceId, transaction }).subscribe((e) => {
if (e.type === "signed") {
const signature = e.signedOperation.signature;
expect(signature).toEqual("SBYTES");
// Cleanup
subscriber.unsubscribe();
done();
}
});
});
});
//# sourceMappingURL=signOperation.test.js.map