From 98f40abfc3aa74dec5067a2d90002756cc8acd01 Mon Sep 17 00:00:00 2001 From: Alan Cohen Date: Tue, 20 Jan 2015 17:59:35 -0800 Subject: [PATCH] [FEATURE] Remote.prototype.requestOffer See: https://ripple.com/build/rippled-apis/#ledger-entry Rippled request ```js { "id": 1, "command": "ledger_entry", "type": "offer", "offer": {"account": "rEQWVz1qN4DWw5J17s3DgXQzUuVYDSpK6M", "seq":5 }, "ledger_index": 10850610 } ``` Response ```js { "id": 7, "status": "success", "type": "response", "result": { "index": "F9DCCD26C770952D216085BF97D7E225F6A8B578ABD066AA92D7D06144B535EE", "ledger_index": 10850610, "node": { "Account": "rEQWVz1qN4DWw5J17s3DgXQzUuVYDSpK6M", "BookDirectory": "CF8D13399C6ED20BA82740CFA78E928DC8D498255249BA6351038D7EA4C68000", "BookNode": "0000000000000000", "Flags": 131072, "LedgerEntryType": "Offer", "OwnerNode": "0000000000000000", "PreviousTxnID": "64FAB660F9F5D9E7183E977701930AD09F372129C56E1685B68A914D8A43CA41", "PreviousTxnLgrSeq": 10850602, "Sequence": 5, "TakerGets": "1000000", "TakerPays": { "currency": "USD", "issuer": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q", "value": "100" }, "index": "F9DCCD26C770952D216085BF97D7E225F6A8B578ABD066AA92D7D06144B535EE" }, "validated": false } } ``` --- src/js/ripple/remote.js | 38 ++++++++++++++++++++++++++++++++++++++ test/remote-test.js | 28 ++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) 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); + }); }); });