diff --git a/src/js/ripple/remote.js b/src/js/ripple/remote.js index e5d8d8a3..71c084b1 100644 --- a/src/js/ripple/remote.js +++ b/src/js/ripple/remote.js @@ -2159,6 +2159,44 @@ Remote.prototype.dirtyAccountRoot = function(account) { delete this.ledgers.current.account_root[account]; }; +/** + * Get an Offer from the ledger + * + * @param {Object} options + * @param {String|Number} options.ledger + * @param {String} [options.account] - Required unless using options.index + * @param {Number} [options.sequence] - Required unless using options.index + * @param {String} [options.index] - Required only if options.account and options.sequence not provided + * + * @callback + * @param {Error} error + * @param {Object} message + * + * @return {Request} + */ + +Remote.prototype.requestOffer = function(options, callback) { + + var request = this.requestLedgerEntry('offer'); + + if (options.account && options.sequence) { + request.offerId(options.account, options.sequence); + } else if (options.index) { + request.offerIndex(options.index); + } + + request.ledgerSelect(options.ledger); + + request.once('success', function(res) { + request.emit('offer',res); + }); + + request.callback(callback, 'offer'); + + return request; +}; + + /** * Get an account's balance * diff --git a/test/remote-test.js b/test/remote-test.js index eaa3efb7..14a13e48 100644 --- a/test/remote-test.js +++ b/test/remote-test.js @@ -838,5 +838,33 @@ describe('Remote', function () { assert.strictEqual(request.message.account_root, ADDRESS); assert.strictEqual(request.message.ledger_index, 'validated'); }); + + it('request offer with ledger index', function() { + var request = remote.requestOffer({account: ADDRESS, ledger: LEDGER_INDEX, sequence: 5}); + assert.strictEqual(request.message.command, 'ledger_entry'); + assert.strictEqual(request.message.offer.account, ADDRESS); + assert.strictEqual(request.message.offer.seq, 5); + assert.strictEqual(request.message.ledger_index, LEDGER_INDEX); + }); + it('request offer with ledger hash', function() { + var request = remote.requestOffer({account: ADDRESS, ledger: LEDGER_HASH, sequence: 5}); + assert.strictEqual(request.message.command, 'ledger_entry'); + assert.strictEqual(request.message.offer.account, ADDRESS); + assert.strictEqual(request.message.offer.seq, 5); + assert.strictEqual(request.message.ledger_hash, LEDGER_HASH); + }); + it('request account balance with ledger identifier', function() { + var request = remote.requestOffer({account: ADDRESS, ledger: 'validated', sequence: 5}); + assert.strictEqual(request.message.command, 'ledger_entry'); + assert.strictEqual(request.message.offer.account, ADDRESS); + assert.strictEqual(request.message.offer.seq, 5); + assert.strictEqual(request.message.ledger_index, 'validated'); + }); + it('request account balance with offer index', function() { + var request = remote.requestOffer({ index: TRANSACTION_HASH, ledger: LEDGER_INDEX}); + assert.strictEqual(request.message.command, 'ledger_entry'); + assert.strictEqual(request.message.offer, TRANSACTION_HASH); + assert.strictEqual(request.message.ledger_index, LEDGER_INDEX); + }); }); });