UNPKG

bitgo

Version:
132 lines • 16.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const nock = require("nock"); const sinon = require("sinon"); const assert = require("assert"); require("should"); const sdk_api_1 = require("@bitgo/sdk-api"); const sdk_test_1 = require("@bitgo/sdk-test"); const sdk_coin_btc_1 = require("@bitgo/sdk-coin-btc"); const sdk_core_1 = require("@bitgo/sdk-core"); describe('Wallet signTransaction with verifyTxParams', function () { let wallet; let basecoin; let verifyTransactionStub; beforeEach(function () { const bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'mock' }); bitgo.initializeTestVars(); bitgo.safeRegister('tbtc', sdk_coin_btc_1.Tbtc.createInstance); basecoin = bitgo.coin('tbtc'); // Mock wallet data const walletData = { id: 'test-wallet-id', coin: 'tbtc', label: 'Test Wallet', m: 2, n: 3, keys: ['key1', 'key2', 'key3'], multisigType: 'onchain', type: 'hot', balance: 100000, balanceString: '100000', confirmedBalance: 100000, confirmedBalanceString: '100000', spendableBalance: 100000, spendableBalanceString: '100000', }; wallet = new sdk_core_1.Wallet(bitgo, basecoin, walletData); // Create stubs for verification sinon.stub(basecoin, 'signTransaction').resolves({ txHex: 'mock-signed-tx-hex' }); verifyTransactionStub = sinon.stub(basecoin, 'verifyTransaction'); }); afterEach(function () { sinon.restore(); nock.cleanAll(); }); it('should fail verification when verifyTransaction throws an error', async function () { // Mock the verification function to throw an error (simulating verification failure) verifyTransactionStub.throws(new Error('Transaction verification failed')); const txPrebuild = { txHex: 'mock-tx-hex', walletId: 'test-wallet-id', }; const verifyTxParams = { txParams: { recipients: [ { address: 'test-address', amount: '10000', }, ], type: 'send', }, }; const signParams = { txPrebuild, verifyTxParams, }; try { await wallet.signTransaction(signParams); assert.fail('Should have thrown verification error'); } catch (error) { assert.ok(error.message.includes('Transaction verification failed'), `Error message should contain 'Transaction verification failed', got: ${error.message}`); } // Verify that the verification function was called with the expected parameters sinon.assert.calledOnce(verifyTransactionStub); const callArgs = verifyTransactionStub.getCall(0).args; const verifyParams = callArgs[0]; assert.strictEqual(verifyParams.txPrebuild.txHex, 'mock-tx-hex'); assert.deepStrictEqual(verifyParams.txParams, verifyTxParams.txParams); }); it('should pass verification when verifyTransaction succeeds', async function () { // Mock the verification function to succeed (no error thrown) verifyTransactionStub.returns(true); // Mock key retrieval endpoints const bgUrl = sdk_core_1.common.Environments['mock'].uri; nock(bgUrl).get('/api/v2/tbtc/key/key1').reply(200, { id: 'key1', pub: 'pub', prv: 'prv', }); nock(bgUrl).get('/api/v2/tbtc/key/key2').reply(200, { id: 'key2', pub: 'pub', prv: 'prv', }); nock(bgUrl).get('/api/v2/tbtc/key/key3').reply(200, { id: 'key3', pub: 'pub', }); const txPrebuild = { txHex: 'mock-tx-hex', walletId: 'test-wallet-id', }; const verifyTxParams = { txParams: { recipients: [ { address: 'test-address', amount: '1000', }, ], type: 'send', }, }; const signParams = { txPrebuild, verifyTxParams, prv: 'prv', }; const result = await wallet.signTransaction(signParams); // Verify the result result.should.have.property('txHex', 'mock-signed-tx-hex'); // Verify that the verification function was called with the expected parameters sinon.assert.calledOnce(verifyTransactionStub); const callArgs = verifyTransactionStub.getCall(0).args; const verifyParams = callArgs[0]; assert.strictEqual(verifyParams.txPrebuild.txHex, 'mock-tx-hex'); assert.deepStrictEqual(verifyParams.txParams, verifyTxParams.txParams); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnblRyYW5zYWN0aW9uVmVyaWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC92Mi91bml0L3NpZ25UcmFuc2FjdGlvblZlcmlmaWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZCQUE4QjtBQUM5QiwrQkFBK0I7QUFDL0IsaUNBQWlDO0FBQ2pDLGtCQUFnQjtBQUVoQiw0Q0FBMEM7QUFDMUMsOENBQTRDO0FBQzVDLHNEQUEyQztBQUMzQyw4Q0FBb0c7QUFFcEcsUUFBUSxDQUFDLDRDQUE0QyxFQUFFO0lBQ3JELElBQUksTUFBYyxDQUFDO0lBQ25CLElBQUksUUFBa0IsQ0FBQztJQUN2QixJQUFJLHFCQUFzQyxDQUFDO0lBRTNDLFVBQVUsQ0FBQztRQUNULE1BQU0sS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUM1RCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMzQixLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxtQkFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2hELFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTlCLG1CQUFtQjtRQUNuQixNQUFNLFVBQVUsR0FBRztZQUNqQixFQUFFLEVBQUUsZ0JBQWdCO1lBQ3BCLElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLGFBQWE7WUFDcEIsQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQztZQUNKLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO1lBQzlCLFlBQVksRUFBRSxTQUFTO1lBQ3ZCLElBQUksRUFBRSxLQUFLO1lBQ1gsT0FBTyxFQUFFLE1BQU07WUFDZixhQUFhLEVBQUUsUUFBUTtZQUN2QixnQkFBZ0IsRUFBRSxN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Q0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekUsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBub2NrID0gcmVxdWlyZSgnbm9jaycpO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgJ3Nob3VsZCc7XG5cbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgVGVzdEJpdEdvIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IFRidGMgfSBmcm9tICdAYml0Z28vc2RrLWNvaW4tYnRjJztcbmltcG9ydCB7IGNvbW1vbiwgQmFzZUNvaW4sIEJpdEdvQmFzZSwgV2FsbGV0LCBXYWxsZXRTaWduVHJhbnNhY3Rpb25PcHRpb25zIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuZGVzY3JpYmUoJ1dhbGxldCBzaWduVHJhbnNhY3Rpb24gd2l0aCB2ZXJpZnlUeFBhcmFtcycsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IHdhbGxldDogV2FsbGV0O1xuICBsZXQgYmFzZWNvaW46IEJhc2VDb2luO1xuICBsZXQgdmVyaWZ5VHJhbnNhY3Rpb25TdHViOiBzaW5vbi5TaW5vblN0dWI7XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAnbW9jaycgfSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0YnRjJywgVGJ0Yy5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0YnRjJyk7XG5cbiAgICAvLyBNb2NrIHdhbGxldCBkYXRhXG4gICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAndGVzdC13YWxsZXQtaWQnLFxuICAgICAgY29pbjogJ3RidGMnLFxuICAgICAgbGFiZWw6ICdUZXN0IFdhbGxldCcsXG4gICAgICBtOiAyLFxuICAgICAgbjogMyxcbiAgICAgIGtleXM6IFsna2V5MScsICdrZXkyJywgJ2tleTMnXSxcbiAgICAgIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nLFxuICAgICAgdHlwZTogJ2hvdCcsXG4gICAgICBiYWxhbmNlOiAxMDAwMDAsXG4gICAgICBiYWxhbmNlU3RyaW5nOiAnMTAwMDAwJyxcbiAgICAgIGNvbmZpcm1lZEJhbGFuY2U6IDEwMDAwMCxcbiAgICAgIGNvbmZpcm1lZEJhbGFuY2VTdHJpbmc6ICcxMDAwMDAnLFxuICAgICAgc3BlbmRhYmxlQmFsYW5jZTogMTAwMDAwLFxuICAgICAgc3BlbmRhYmxlQmFsYW5jZVN0cmluZzogJzEwMDAwMCcsXG4gICAgfTtcblxuICAgIHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28gYXMgdW5rbm93biBhcyBCaXRHb0Jhc2UsIGJhc2Vjb2luIGFzIHVua25vd24gYXMgQmFzZUNvaW4sIHdhbGxldERhdGEpO1xuXG4gICAgLy8gQ3JlYXRlIHN0dWJzIGZvciB2ZXJpZmljYXRpb25cbiAgICBzaW5vbi5zdHViKGJhc2Vjb2luLCAnc2lnblRyYW5zYWN0aW9uJykucmVzb2x2ZXMoeyB0eEhleDogJ21vY2stc2lnbmVkLXR4LWhleCcgfSk7XG4gICAgdmVyaWZ5VHJhbnNhY3Rpb25TdHViID0gc2lub24uc3R1YihiYXNlY29pbiwgJ3ZlcmlmeVRyYW5zYWN0aW9uJyk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHZlcmlmaWNhdGlvbiB3aGVuIHZlcmlmeVRyYW5zYWN0aW9uIHRocm93cyBhbiBlcnJvcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBNb2NrIHRoZSB2ZXJpZmljYXRpb24gZnVuY3Rpb24gdG8gdGhyb3cgYW4gZXJyb3IgKHNpbXVsYXRpbmcgdmVyaWZpY2F0aW9uIGZhaWx1cmUpXG4gICAgdmVyaWZ5VHJhbnNhY3Rpb25TdHViLnRocm93cyhuZXcgRXJyb3IoJ1RyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQnKSk7XG5cbiAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgdHhIZXg6ICdtb2NrLXR4LWhleCcsXG4gICAgICB3YWxsZXRJZDogJ3Rlc3Qtd2FsbGV0LWlkJyxcbiAgICB9O1xuXG4gICAgY29uc3QgdmVyaWZ5VHhQYXJhbXMgPSB7XG4gICAgICB0eFBhcmFtczoge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ3Rlc3QtYWRkcmVzcycsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ3NlbmQnLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3Qgc2lnblBhcmFtczogV2FsbGV0U2lnblRyYW5zYWN0aW9uT3B0aW9ucyA9IHtcbiAgICAgIHR4UHJlYnVpbGQsXG4gICAgICB2ZXJpZnlUeFBhcmFtcyxcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhbGxldC5zaWduVHJhbnNhY3Rpb24oc2lnblBhcmFtcyk7XG4gICAgICBhc3NlcnQuZmFpbCgnU2hvdWxkIGhhdmUgdGhyb3duIHZlcmlmaWNhdGlvbiBlcnJvcicpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBhc3NlcnQub2soXG4gICAgICAgIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ1RyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQnKSxcbiAgICAgICAgYEVycm9yIG1lc3NhZ2Ugc2hvdWxkIGNvbnRhaW4gJ1RyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQnLCBnb3Q6ICR7ZXJyb3IubWVzc2FnZX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB2ZXJpZmljYXRpb24gZnVuY3Rpb24gd2FzIGNhbGxlZCB3aXRoIHRoZSBleHBlY3RlZCBwYXJhbWV0ZXJzXG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UodmVyaWZ5VHJhbnNhY3Rpb25TdHViKTtcbiAgICBjb25zdCBjYWxsQXJncyA9IHZlcmlmeVRyYW5zYWN0aW9uU3R1Yi5nZXRDYWxsKDApLmFyZ3M7XG4gICAgY29uc3QgdmVyaWZ5UGFyYW1zID0gY2FsbEFyZ3NbMF07XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZlcmlmeVBhcmFtcy50eFByZWJ1aWxkLnR4SGV4LCAnbW9jay10eC1oZXgnKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHZlcmlmeVBhcmFtcy50eFBhcmFtcywgdmVyaWZ5VHhQYXJhbXMudHhQYXJhbXMpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhc3MgdmVyaWZpY2F0aW9uIHdoZW4gdmVyaWZ5VHJhbnNhY3Rpb24gc3VjY2VlZHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgLy8gTW9jayB0aGUgdmVyaWZpY2F0aW9uIGZ1bmN0aW9uIHRvIHN1Y2NlZWQgKG5vIGVycm9yIHRocm93bilcbiAgICB2ZXJpZnlUcmFuc2FjdGlvblN0dWIucmV0dXJucyh0cnVlKTtcblxuICAgIC8vIE1vY2sga2V5IHJldHJpZXZhbCBlbmRwb2ludHNcbiAgICBjb25zdCBiZ1VybCA9IGNvbW1vbi5FbnZpcm9ubWVudHNbJ21vY2snXS51cmk7XG4gICAgbm9jayhiZ1VybCkuZ2V0KCcvYXBpL3YyL3RidGMva2V5L2tleTEnKS5yZXBseSgyMDAsIHtcbiAgICAgIGlkOiAna2V5MScsXG4gICAgICBwdWI6ICdwdWInLFxuICAgICAgcHJ2OiAncHJ2JyxcbiAgICB9KTtcblxuICAgIG5vY2soYmdVcmwpLmdldCgnL2FwaS92Mi90YnRjL2tleS9rZXkyJykucmVwbHkoMjAwLCB7XG4gICAgICBpZDogJ2tleTInLFxuICAgICAgcHViOiAncHViJyxcbiAgICAgIHBydjogJ3BydicsXG4gICAgfSk7XG5cbiAgICBub2NrKGJnVXJsKS5nZXQoJy9hcGkvdjIvdGJ0Yy9rZXkva2V5MycpLnJlcGx5KDIwMCwge1xuICAgICAgaWQ6ICdrZXkzJyxcbiAgICAgIHB1YjogJ3B1YicsXG4gICAgfSk7XG5cbiAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgdHhIZXg6ICdtb2NrLXR4LWhleCcsXG4gICAgICB3YWxsZXRJZDogJ3Rlc3Qtd2FsbGV0LWlkJyxcbiAgICB9O1xuXG4gICAgY29uc3QgdmVyaWZ5VHhQYXJhbXM6IFdhbGxldFNpZ25UcmFuc2FjdGlvbk9wdGlvbnNbJ3ZlcmlmeVR4UGFyYW1zJ10gPSB7XG4gICAgICB0eFBhcmFtczoge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ3Rlc3QtYWRkcmVzcycsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnc2VuZCcsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBzaWduUGFyYW1zOiBXYWxsZXRTaWduVHJhbnNhY3Rpb25PcHRpb25zID0ge1xuICAgICAgdHhQcmVidWlsZCxcbiAgICAgIHZlcmlmeVR4UGFyYW1zLFxuICAgICAgcHJ2OiAncHJ2JyxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2FsbGV0LnNpZ25UcmFuc2FjdGlvbihzaWduUGFyYW1zKTtcblxuICAgIC8vIFZlcmlmeSB0aGUgcmVzdWx0XG4gICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCd0eEhleCcsICdtb2NrLXNpZ25lZC10eC1oZXgnKTtcblxuICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB2ZXJpZmljYXRpb24gZnVuY3Rpb24gd2FzIGNhbGxlZCB3aXRoIHRoZSBleHBlY3RlZCBwYXJhbWV0ZXJzXG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UodmVyaWZ5VHJhbnNhY3Rpb25TdHViKTtcbiAgICBjb25zdCBjYWxsQXJncyA9IHZlcmlmeVRyYW5zYWN0aW9uU3R1Yi5nZXRDYWxsKDApLmFyZ3M7XG4gICAgY29uc3QgdmVyaWZ5UGFyYW1zID0gY2FsbEFyZ3NbMF07XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZlcmlmeVBhcmFtcy50eFByZWJ1aWxkLnR4SGV4LCAnbW9jay10eC1oZXgnKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHZlcmlmeVBhcmFtcy50eFBhcmFtcywgdmVyaWZ5VHhQYXJhbXMudHhQYXJhbXMpO1xuICB9KTtcbn0pO1xuIl19