rippleapi_quickstart - cleanup

This commit is contained in:
mDuo13
2016-02-03 15:59:06 -08:00
parent 84e93f47e1
commit 0553a57709
8 changed files with 242 additions and 161 deletions

View File

@@ -5,29 +5,34 @@ env:
amd: false amd: false
mocha: true mocha: true
jasmine: false jasmine: false
es6: true
rules: rules:
no-alert: 2 no-alert: 2
no-array-constructor: 2 no-array-constructor: 2
no-arrow-condition: 0
no-bitwise: 0 no-bitwise: 0
no-caller: 2 no-caller: 2
no-case-declarations: 2
no-catch-shadow: 2 no-catch-shadow: 2
comma-dangle: 2
no-class-assign: 2 no-class-assign: 2
no-cond-assign: [2, 'always'] no-cond-assign: [2, 'always']
no-console: 0 no-console: 0
no-const-assign: 2 no-const-assign: 2
no-constant-condition: 2 no-constant-condition: 2
no-continue: 0
no-control-regex: 2 no-control-regex: 2
no-debugger: 2 no-debugger: 2
no-delete-var: 2 no-delete-var: 2
no-div-regex: 0 no-div-regex: 0
no-dupe-class-members: 2
no-dupe-keys: 2 no-dupe-keys: 2
no-dupe-args: 2 no-dupe-args: 2
no-duplicate-case: 2 no-duplicate-case: 2
no-else-return: 2 no-else-return: 0
no-empty: 2 no-empty: 2
no-empty-character-class: 2 no-empty-character-class: 2
no-empty-label: 2 no-empty-label: 2
no-empty-pattern: 2
no-eq-null: 2 no-eq-null: 2
no-eval: 2 no-eval: 2
no-ex-assign: 2 no-ex-assign: 2
@@ -44,6 +49,7 @@ rules:
no-inline-comments: 0 no-inline-comments: 0
no-inner-declarations: [2, 'functions'] no-inner-declarations: [2, 'functions']
no-invalid-regexp: 2 no-invalid-regexp: 2
no-invalid-this: 0 # this rule would cause problems with mocha test cases
no-irregular-whitespace: 2 no-irregular-whitespace: 2
no-iterator: 2 no-iterator: 2
no-label-var: 2 no-label-var: 2
@@ -53,10 +59,12 @@ rules:
no-loop-func: 2 no-loop-func: 2
no-mixed-requires: [0, false] no-mixed-requires: [0, false]
no-mixed-spaces-and-tabs: [2, false] no-mixed-spaces-and-tabs: [2, false]
linebreak-style: [2, 'unix']
no-multi-spaces: 2 no-multi-spaces: 2
no-multi-str: 2 no-multi-str: 2
no-multiple-empty-lines: [2, {max: 2}] no-multiple-empty-lines: [2, {max: 2}]
no-native-reassign: 2 no-native-reassign: 2
no-negated-condition: 0
no-negated-in-lhs: 2 no-negated-in-lhs: 2
no-nested-ternary: 0 no-nested-ternary: 0
no-new: 2 no-new: 2
@@ -76,71 +84,106 @@ rules:
no-redeclare: 2 no-redeclare: 2
no-regex-spaces: 2 no-regex-spaces: 2
no-restricted-modules: 0 no-restricted-modules: 0
no-restricted-syntax: 0
no-return-assign: 2 no-return-assign: 2
no-script-url: 2 no-script-url: 2
no-self-compare: 2 no-self-compare: 2
no-sequences: 2 no-sequences: 2
no-shadow: 2 no-shadow: 2
no-shadow-restricted-names: 2 no-shadow-restricted-names: 2
semi-spacing: 2
no-spaced-func: 2 no-spaced-func: 2
no-sparse-arrays: 2 no-sparse-arrays: 2
no-sync: 0 no-sync: 0
no-ternary: 0 no-ternary: 0
no-trailing-spaces: 2 no-trailing-spaces: 2
no-this-before-super: 2
no-throw-literal: 2
no-undef: 2 no-undef: 2
no-undef-init: 2 no-undef-init: 2
no-undefined: 0 no-undefined: 0
no-unexpected-multiline: 2
no-underscore-dangle: 0 no-underscore-dangle: 0
no-unneeded-ternary: 0
no-unreachable: 2 no-unreachable: 2
no-unused-expressions: 2 no-unused-expressions: 2
no-unused-vars: [2, {vars: 'all', args: 'all'}] no-unused-vars: [2, {vars: 'all', args: 'all'}]
no-use-before-define: 2 no-use-before-define: 2
no-useless-call: 2
no-useless-concat: 0
no-void: 2 no-void: 2
no-var: 2 no-var: 2
prefer-const: 2
no-warning-comments: [0, {terms: ['todo', 'fixme', 'xxx'], location: 'start'}] no-warning-comments: [0, {terms: ['todo', 'fixme', 'xxx'], location: 'start'}]
no-with: 2 no-with: 2
no-magic-numbers: 0
array-bracket-spacing: [2, 'never']
arrow-body-style: 0
arrow-parens: [2, 'as-needed']
arrow-spacing: 2
accessor-pairs: 2
block-scoped-var: 2 block-scoped-var: 2
block-spacing: 2
brace-style: 2 brace-style: 2
callback-return: 0
camelcase: 0 camelcase: 0
comma-dangle: 2
comma-spacing: 2 comma-spacing: 2
comma-style: 2 comma-style: 2
complexity: [0, 11] complexity: [0, 11]
computed-property-spacing: 2
consistent-return: 2 consistent-return: 2
consistent-this: [2, 'self'] consistent-this: [2, 'self']
constructor-super: 2
curly: [2, 'all'] curly: [2, 'all']
default-case: 0 default-case: 0
dot-location: [2, 'property']
dot-notation: [2, {allowKeywords: true}] dot-notation: [2, {allowKeywords: true}]
eol-last: 2 eol-last: 2
eqeqeq: 2 eqeqeq: 2
func-names: 0 func-names: 0
func-style: [2, 'declaration'] func-style: [2, 'declaration']
generator-star: 0 generator-star-spacing: 2
global-require: 0
guard-for-in: 0 guard-for-in: 0
handle-callback-err: 2 handle-callback-err: 2
id-length: 0
indent: [2, 2, {SwitchCase: 1}] indent: [2, 2, {SwitchCase: 1}]
init-declarations: 0
jsx-quotes: 0
key-spacing: [2, {beforeColon: false, afterColon: true}] key-spacing: [2, {beforeColon: false, afterColon: true}]
max-depth: [1, 4] lines-around-comment: 0
max-depth: [0, 4]
max-len: [2, 80] max-len: [2, 80]
max-nested-callbacks: [1, 2] max-nested-callbacks: [0, 2]
max-params: [1, 4] max-params: [0, 4]
max-statements: [0, 10] max-statements: [0, 10]
new-cap: 2 new-cap: 2
new-parens: 2 new-parens: 2
newline-after-var: 0
object-curly-spacing: [2, 'never']
object-shorthand: 0
one-var: [2, 'never'] one-var: [2, 'never']
operator-assignment: [0, 'always'] operator-assignment: [0, 'always']
operator-linebreak: 0
padded-blocks: 0 padded-blocks: 0
prefer-arrow-callback: 0
prefer-const: 2
prefer-spread: 2
prefer-reflect: 0
prefer-template: 0
quote-props: 0 quote-props: 0
quotes: [2, 'single'] quotes: [2, 'single']
radix: 2 radix: 2
id-match: 0
require-jsdoc: 0
require-yield: 0
semi: 2 semi: 2
semi-spacing: 2
sort-vars: 0 sort-vars: 0
space-after-keywords: 2 space-after-keywords: 2
space-before-keywords: 2
space-before-blocks: 2 space-before-blocks: 2
space-before-function-paren: [2, 'never'] space-before-function-paren: [2, 'never']
object-curly-spacing: [2, 'never']
array-bracket-spacing: [2, 'never']
space-in-parens: 2 space-in-parens: 2
space-infix-ops: 2 space-infix-ops: 2
space-return-throw-case: 2 space-return-throw-case: 2
@@ -155,27 +198,4 @@ rules:
wrap-regex: 0 wrap-regex: 0
yoda: [2, 'never'] yoda: [2, 'never']
ecmaFeatures: ecmaFeatures:
arrowFunctions: true
binaryLiterals: true
blockBindings: true
classes: true
defaultParams: true
destructuring: true
forOf: true
generators: true
# not sure about the implications of globalReturn
# globalReturn: true
jsx: true jsx: true
objectLiteralComputedProperties: true
objectLiteralShorthandMethods: true
objectLiteralShorthandProperties: true
# duplicate properties may be required but we are not
# sure at this point
# objectLiteralDuplicateProperties: true
octalLiterals: true
regexUFlag: true
regexYFlag: true
restParams: true
spread: true
templateStrings: true
unicodeCodePointEscapes: true

View File

@@ -5,24 +5,24 @@
<script> <script>
console.log(ripple); console.log(ripple);
var api = new ripple.RippleAPI({server:'wss://s1.ripple.com/'}); var api = new ripple.RippleAPI({server:'wss://s1.ripple.com/'});
api.connect().then(()=>{ api.connect().then(function() {
return api.getServerInfo(); return api.getServerInfo();
}).then(server_info=>{ }).then(function(server_info) {
document.body.innerHTML += `<p>Connected to rippled server!</p> document.body.innerHTML += "<p>Connected to rippled server!</p>" +
<table> " <table>" +
<tr><th>Version</th> " <tr><th>Version</th>" +
<td>${ server_info.buildVersion }</td></tr> " <td>" + server_info.buildVersion + "</td></tr>" +
<tr><th>Ledgers available</th> " <tr><th>Ledgers available</th>" +
<td>${ server_info.completeLedgers }</td></tr> " <td>" + server_info.completeLedgers + "</td></tr>" +
<tr><th>hostID</th> " <tr><th>hostID</th>" +
<td>${ server_info.hostID }</td></tr> " <td>" + server_info.hostID + "</td></tr>" +
<tr><th>Most Recent Validated Ledger Seq.</th> " <tr><th>Most Recent Validated Ledger Seq.</th>" +
<td>${ server_info.validatedLedger.ledgerVersion }</td></tr> " <td>" + server_info.validatedLedger.ledgerVersion + "</td></tr>" +
<tr><th>Most Recent Validated Ledger Hash</th> " <tr><th>Most Recent Validated Ledger Hash</th>" +
<td>${ server_info.validatedLedger.hash }</td></tr> " <td>" + server_info.validatedLedger.hash + "</td></tr>" +
<tr><th>Seconds since last ledger validated</th> " <tr><th>Seconds since last ledger validated</th>" +
<td>${ server_info.validatedLedger.age }</td></tr> " <td>" + server_info.validatedLedger.age + "</td></tr>" +
</table>`; " </table>";
}); });
</script> </script>
<style type="text/css"> <style type="text/css">

View File

@@ -5,29 +5,34 @@ env:
amd: false amd: false
mocha: true mocha: true
jasmine: false jasmine: false
es6: true
rules: rules:
no-alert: 2 no-alert: 2
no-array-constructor: 2 no-array-constructor: 2
no-arrow-condition: 0
no-bitwise: 0 no-bitwise: 0
no-caller: 2 no-caller: 2
no-case-declarations: 2
no-catch-shadow: 2 no-catch-shadow: 2
comma-dangle: 2
no-class-assign: 2 no-class-assign: 2
no-cond-assign: [2, 'always'] no-cond-assign: [2, 'always']
no-console: 0 no-console: 0
no-const-assign: 2 no-const-assign: 2
no-constant-condition: 2 no-constant-condition: 2
no-continue: 0
no-control-regex: 2 no-control-regex: 2
no-debugger: 2 no-debugger: 2
no-delete-var: 2 no-delete-var: 2
no-div-regex: 0 no-div-regex: 0
no-dupe-class-members: 2
no-dupe-keys: 2 no-dupe-keys: 2
no-dupe-args: 2 no-dupe-args: 2
no-duplicate-case: 2 no-duplicate-case: 2
no-else-return: 2 no-else-return: 0
no-empty: 2 no-empty: 2
no-empty-character-class: 2 no-empty-character-class: 2
no-empty-label: 2 no-empty-label: 2
no-empty-pattern: 2
no-eq-null: 2 no-eq-null: 2
no-eval: 2 no-eval: 2
no-ex-assign: 2 no-ex-assign: 2
@@ -44,6 +49,7 @@ rules:
no-inline-comments: 0 no-inline-comments: 0
no-inner-declarations: [2, 'functions'] no-inner-declarations: [2, 'functions']
no-invalid-regexp: 2 no-invalid-regexp: 2
no-invalid-this: 0 # this rule would cause problems with mocha test cases
no-irregular-whitespace: 2 no-irregular-whitespace: 2
no-iterator: 2 no-iterator: 2
no-label-var: 2 no-label-var: 2
@@ -53,10 +59,12 @@ rules:
no-loop-func: 2 no-loop-func: 2
no-mixed-requires: [0, false] no-mixed-requires: [0, false]
no-mixed-spaces-and-tabs: [2, false] no-mixed-spaces-and-tabs: [2, false]
linebreak-style: [2, 'unix']
no-multi-spaces: 2 no-multi-spaces: 2
no-multi-str: 2 no-multi-str: 2
no-multiple-empty-lines: [2, {max: 2}] no-multiple-empty-lines: [2, {max: 2}]
no-native-reassign: 2 no-native-reassign: 2
no-negated-condition: 0
no-negated-in-lhs: 2 no-negated-in-lhs: 2
no-nested-ternary: 0 no-nested-ternary: 0
no-new: 2 no-new: 2
@@ -76,71 +84,106 @@ rules:
no-redeclare: 2 no-redeclare: 2
no-regex-spaces: 2 no-regex-spaces: 2
no-restricted-modules: 0 no-restricted-modules: 0
no-restricted-syntax: 0
no-return-assign: 2 no-return-assign: 2
no-script-url: 2 no-script-url: 2
no-self-compare: 2 no-self-compare: 2
no-sequences: 2 no-sequences: 2
no-shadow: 2 no-shadow: 2
no-shadow-restricted-names: 2 no-shadow-restricted-names: 2
semi-spacing: 2
no-spaced-func: 2 no-spaced-func: 2
no-sparse-arrays: 2 no-sparse-arrays: 2
no-sync: 0 no-sync: 0
no-ternary: 0 no-ternary: 0
no-trailing-spaces: 2 no-trailing-spaces: 2
no-this-before-super: 2
no-throw-literal: 2
no-undef: 2 no-undef: 2
no-undef-init: 2 no-undef-init: 2
no-undefined: 0 no-undefined: 0
no-unexpected-multiline: 2
no-underscore-dangle: 0 no-underscore-dangle: 0
no-unneeded-ternary: 0
no-unreachable: 2 no-unreachable: 2
no-unused-expressions: 2 no-unused-expressions: 2
no-unused-vars: [2, {vars: 'all', args: 'all'}] no-unused-vars: [2, {vars: 'all', args: 'all'}]
no-use-before-define: 2 no-use-before-define: 2
no-useless-call: 2
no-useless-concat: 0
no-void: 2 no-void: 2
no-var: 2 no-var: 2
prefer-const: 2
no-warning-comments: [0, {terms: ['todo', 'fixme', 'xxx'], location: 'start'}] no-warning-comments: [0, {terms: ['todo', 'fixme', 'xxx'], location: 'start'}]
no-with: 2 no-with: 2
no-magic-numbers: 0
array-bracket-spacing: [2, 'never']
arrow-body-style: 0
arrow-parens: [2, 'as-needed']
arrow-spacing: 2
accessor-pairs: 2
block-scoped-var: 2 block-scoped-var: 2
block-spacing: 2
brace-style: 2 brace-style: 2
callback-return: 0
camelcase: 0 camelcase: 0
comma-dangle: 2
comma-spacing: 2 comma-spacing: 2
comma-style: 2 comma-style: 2
complexity: [0, 11] complexity: [0, 11]
computed-property-spacing: 2
consistent-return: 2 consistent-return: 2
consistent-this: [2, 'self'] consistent-this: [2, 'self']
constructor-super: 2
curly: [2, 'all'] curly: [2, 'all']
default-case: 0 default-case: 0
dot-location: [2, 'property']
dot-notation: [2, {allowKeywords: true}] dot-notation: [2, {allowKeywords: true}]
eol-last: 2 eol-last: 2
eqeqeq: 2 eqeqeq: 2
func-names: 0 func-names: 0
func-style: [2, 'declaration'] func-style: [2, 'declaration']
generator-star: 0 generator-star-spacing: 2
global-require: 0
guard-for-in: 0 guard-for-in: 0
handle-callback-err: 2 handle-callback-err: 2
id-length: 0
indent: [2, 2, {SwitchCase: 1}] indent: [2, 2, {SwitchCase: 1}]
init-declarations: 0
jsx-quotes: 0
key-spacing: [2, {beforeColon: false, afterColon: true}] key-spacing: [2, {beforeColon: false, afterColon: true}]
max-depth: [1, 4] lines-around-comment: 0
max-depth: [0, 4]
max-len: [2, 80] max-len: [2, 80]
max-nested-callbacks: [1, 2] max-nested-callbacks: [0, 2]
max-params: [1, 4] max-params: [0, 4]
max-statements: [0, 10] max-statements: [0, 10]
new-cap: 2 new-cap: 2
new-parens: 2 new-parens: 2
newline-after-var: 0
object-curly-spacing: [2, 'never']
object-shorthand: 0
one-var: [2, 'never'] one-var: [2, 'never']
operator-assignment: [0, 'always'] operator-assignment: [0, 'always']
operator-linebreak: 0
padded-blocks: 0 padded-blocks: 0
prefer-arrow-callback: 0
prefer-const: 2
prefer-spread: 2
prefer-reflect: 0
prefer-template: 0
quote-props: 0 quote-props: 0
quotes: [2, 'single'] quotes: [2, 'single']
radix: 2 radix: 2
id-match: 0
require-jsdoc: 0
require-yield: 0
semi: 2 semi: 2
semi-spacing: 2
sort-vars: 0 sort-vars: 0
space-after-keywords: 2 space-after-keywords: 2
space-before-keywords: 2
space-before-blocks: 2 space-before-blocks: 2
space-before-function-paren: [2, 'never'] space-before-function-paren: [2, 'never']
object-curly-spacing: [2, 'never']
array-bracket-spacing: [2, 'never']
space-in-parens: 2 space-in-parens: 2
space-infix-ops: 2 space-infix-ops: 2
space-return-throw-case: 2 space-return-throw-case: 2
@@ -155,27 +198,4 @@ rules:
wrap-regex: 0 wrap-regex: 0
yoda: [2, 'never'] yoda: [2, 'never']
ecmaFeatures: ecmaFeatures:
arrowFunctions: true
binaryLiterals: true
blockBindings: true
classes: true
defaultParams: true
destructuring: true
forOf: true
generators: true
# not sure about the implications of globalReturn
# globalReturn: true
jsx: true jsx: true
objectLiteralComputedProperties: true
objectLiteralShorthandMethods: true
objectLiteralShorthandProperties: true
# duplicate properties may be required but we are not
# sure at this point
# objectLiteralDuplicateProperties: true
octalLiterals: true
regexUFlag: true
regexYFlag: true
restParams: true
spread: true
templateStrings: true
unicodeCodePointEscapes: true

View File

@@ -1,17 +1,16 @@
'use strict'; 'use strict';
const {RippleAPI} = require('ripple-lib'); const RippleAPI = require('ripple-lib').RippleAPI;
const api = new RippleAPI({ const api = new RippleAPI({
server: 'wss://s1.ripple.com' // Public rippled server server: 'wss://s1.ripple.com' // Public rippled server
}); });
api.connect().then(() => { api.connect().then(() => {
/* begin custom code ------------------------------------ */ /* begin custom code ------------------------------------ */
const my_address = 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn'; const myAddress = 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn';
console.log('getting account info for', my_address); console.log('getting account info for', myAddress);
return api.getAccountInfo(my_address); return api.getAccountInfo(myAddress);
// info => {...} is just a shorter syntax for function(info) {...}
}).then(info => { }).then(info => {
console.log(info); console.log(info);
console.log('getAccountInfo done'); console.log('getAccountInfo done');
@@ -19,6 +18,6 @@ api.connect().then(() => {
/* end custom code -------------------------------------- */ /* end custom code -------------------------------------- */
}).then(() => { }).then(() => {
return api.disconnect(); return api.disconnect();
}).then(()=> { }).then(() => {
console.log('done and disconnected.'); console.log('done and disconnected.');
}).catch(console.error); }).catch(console.error);

View File

@@ -1,14 +1,14 @@
'use strict'; 'use strict';
/* import RippleAPI and support libraies*/ /* import RippleAPI and support libraies*/
const {RippleAPI} = require('ripple-lib'); const RippleAPI = require('ripple-lib').RippleAPI;
const assert = require('assert'); const assert = require('assert');
/* Credentials of the account placing the order */ /* Credentials of the account placing the order */
const my_addr = 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn'; const myAddr = 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn';
const my_secret = 's████████████████████████████'; const mySecret = 's████████████████████████████';
/* Define the order to place here */ /* Define the order to place here */
const my_order = { const myOrder = {
'direction': 'buy', 'direction': 'buy',
'quantity': { 'quantity': {
'currency': 'FOO', 'currency': 'FOO',
@@ -27,7 +27,7 @@ const INTERVAL = 1000;
const api = new RippleAPI({server: 'wss://s2.ripple.com'}); const api = new RippleAPI({server: 'wss://s2.ripple.com'});
/* number of ledgers to check for valid transaction before fail */ /* number of ledgers to check for valid transaction before fail */
const ledgerOffset = 5; const ledgerOffset = 5;
const my_instructions = {maxLedgerVersionOffset: ledgerOffset}; const myInstructions = {maxLedgerVersionOffset: ledgerOffset};
/* Verify a transaction is in a validated RCL version */ /* Verify a transaction is in a validated RCL version */
@@ -39,7 +39,8 @@ function verifyTransaction(hash, options) {
console.log('Sequence: ', data.sequence); console.log('Sequence: ', data.sequence);
return data.outcome.result === 'tesSUCCESS'; return data.outcome.result === 'tesSUCCESS';
}).catch(error => { }).catch(error => {
/* if transaction not in latest validated ledger try again until max ledger hit */ /* if transaction not in latest validated ledger,
try again until max ledger hit */
if (error instanceof api.errors.PendingLedgerVersionError) { if (error instanceof api.errors.PendingLedgerVersionError) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
setTimeout(() => verifyTransaction(hash, options) setTimeout(() => verifyTransaction(hash, options)
@@ -76,12 +77,12 @@ function submitTransaction(lastClosedLedgerVersion, prepared, secret) {
api.connect().then(() => { api.connect().then(() => {
console.log('Connected'); console.log('Connected');
return api.prepareOrder(my_addr, my_order, my_instructions); return api.prepareOrder(myAddr, myOrder, myInstructions);
}).then(prepared => { }).then(prepared => {
console.log('Order Prepared'); console.log('Order Prepared');
return api.getLedger().then(ledger => { return api.getLedger().then(ledger => {
console.log('Current Ledger', ledger.ledgerVersion); console.log('Current Ledger', ledger.ledgerVersion);
return submitTransaction(ledger.ledgerVersion, prepared, my_secret); return submitTransaction(ledger.ledgerVersion, prepared, mySecret);
}); });
}).then(() => { }).then(() => {
api.disconnect().then(() => { api.disconnect().then(() => {

View File

@@ -124,12 +124,12 @@ Even for a simple script, there's a lot packed into that, including some syntax
``` ```
'use strict'; 'use strict';
const {RippleAPI} = require('ripple-lib'); const RippleAPI = require('ripple-lib').RippleAPI;
``` ```
The opening line enables [strict mode](https://www.nczonline.net/blog/2012/03/13/its-time-to-start-using-javascript-strict-mode/). This is purely optional, but it helps you avoid some common pitfalls of JavaScript. See also: [Restrictions on Code in Strict Mode](https://msdn.microsoft.com/library/br230269%28v=vs.94%29.aspx#Anchor_1). The opening line enables [strict mode](https://www.nczonline.net/blog/2012/03/13/its-time-to-start-using-javascript-strict-mode/). This is purely optional, but it helps you avoid some common pitfalls of JavaScript. See also: [Restrictions on Code in Strict Mode](https://msdn.microsoft.com/library/br230269%28v=vs.94%29.aspx#Anchor_1).
The second line imports RippleAPI into the current scope using Node.js's require function. The [destructuring assignment](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment) assigns it to the variable name `RippleAPI` instead of `ripple-lib` (which is the name of the package, for historical reasons). The second line imports RippleAPI into the current scope using Node.js's require function. RippleAPI is just one of [the modules `ripple-lib` exports](https://github.com/ripple/ripple-lib/blob/develop/src/index.js).
### Instantiating the API ### ### Instantiating the API ###
@@ -144,7 +144,7 @@ This section creates a new instance of the RippleAPI class, assigning it to the
The one argument to the constructor is an options object, which has [a variety of options](rippleapi.html#parameters). The `server` parameter tells it where it should connect to a `rippled` server. The one argument to the constructor is an options object, which has [a variety of options](rippleapi.html#parameters). The `server` parameter tells it where it should connect to a `rippled` server.
* The example `server` setting uses a secure WebSocket connection to connect to one of the public servers that Ripple (the company) operates. * The example `server` setting uses a secure WebSocket connection to connect to one of the public servers that Ripple (the company) operates.
* If you don't include the `server` option, RippleAPI runs in [offline mode](rippleapi.html#offline-functionality) instead, which severely limits what you can do with it. * If you don't include the `server` option, RippleAPI runs in [offline mode](rippleapi.html#offline-functionality) instead, which only provides methods that don't need network connectivity.
* You can specify a [Ripple Test Net](https://ripple.com/build/ripple-test-net/) server instead to connect to the parallel-world Test Network instead of the production Ripple Consensus Ledger. * You can specify a [Ripple Test Net](https://ripple.com/build/ripple-test-net/) server instead to connect to the parallel-world Test Network instead of the production Ripple Consensus Ledger.
* If you [run your own `rippled`](rippled-setup.html), you can instruct it to connect to your local server. For example, you might say `server: 'ws://localhost:5005'` instead. * If you [run your own `rippled`](rippled-setup.html), you can instruct it to connect to your local server. For example, you might say `server: 'ws://localhost:5005'` instead.
@@ -166,12 +166,12 @@ Finally, we have more new ECMAScript 6 syntax - an [arrow function](https://deve
``` ```
/* begin custom code ------------------------------------ */ /* begin custom code ------------------------------------ */
const my_address = 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn'; const myAddress = 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn';
console.log('getting account info for',my_address);
return api.getAccountInfo(my_address);
}).then( info => { console.log('getting account info for', myAddress);
return api.getAccountInfo(myAddress);
}).then(info => {
console.log(info); console.log(info);
console.log('getAccountInfo done'); console.log('getAccountInfo done');
@@ -193,7 +193,7 @@ The results of that API method are another Promise, so the line `}).then( info =
``` ```
}).then(() => { }).then(() => {
return api.disconnect(); return api.disconnect();
}).then(()=> { }).then(() => {
console.log('done and disconnected.'); console.log('done and disconnected.');
}).catch(console.error); }).catch(console.error);
``` ```
@@ -210,7 +210,13 @@ One of the biggest challenges in using the Ripple Consensus Ledger (or any decen
{% include 'code_samples/rippleapi_quickstart/submit-and-verify.js' %} {% include 'code_samples/rippleapi_quickstart/submit-and-verify.js' %}
``` ```
This code uses This code creates and submits an order transaction, although the same principles apply to other types of transactions as well. After submitting the transaction, the code uses a new Promise, which queries the ledger again after using setTimeout to wait a fixed amount of time, to see if the transaction has been verified. If it hasn't been verified, the process repeats until either the transaction is found in a validated ledger or the returned ledger is higher than the LastLedgerSequence parameter.
In rare cases (particularly with a large delay or a loss of power), the `rippled` server may be missing a ledger version between when you submitted the transaction and when you determined that the network has passed the `maxLedgerVersion`. In this case, you cannot be definitively sure whether the transaction has failed, or has been included in one of the missing ledger versions. RippleAPI returns `MissingLedgerHistoryError` in this case.
If you are the administrator of the `rippled` server, you can [manually request the missing ledger(s)](rippled-apis.html#ledger-request). Otherwise, you can try checking the ledger history using a different server. (Ripple runs a public full-history server at `s2.ripple.com` for this purpose.)
See [Reliable Transaction Submission](reliable_tx.html) for a more thorough explanation.
@@ -256,13 +262,30 @@ npm WARN notsup Not compatible with your operating system or architecture: fseve
#### 3. Use Gulp to build a single JavaScript output #### 3. Use Gulp to build a single JavaScript output
RippleAPI comes with code to use the [gulp](http://gulpjs.com/) package to compile all its source code into browser-compatible JavaScript files. Gulp is automatically installed as one of the dependencies, so all you have to do is run it: RippleAPI comes with code to use the [gulp](http://gulpjs.com/) package to compile all its source code into browser-compatible JavaScript files. Gulp is automatically installed as one of the dependencies, so all you have to do is run it. RippleAPI's configuration makes this easy:
``` ```
./node_modules/.bin/gulp npm run build
``` ```
This may take a little while. It outputs several things, and creates a new `build/` folder, which contains the files you want. Output:
```
> ripple-lib@0.16.5 build /home/username/ripple-lib
> gulp
[15:22:30] Using gulpfile /home/username/ripple-lib/Gulpfile.js
[15:22:30] Starting 'build'...
[15:22:30] Starting 'build-debug'...
[15:22:42] Finished 'build' after 12 s
[15:22:42] Starting 'build-min'...
[15:22:42] Finished 'build-debug' after 12 s
[15:22:51] Finished 'build-min' after 9.83 s
[15:22:51] Starting 'default'...
[15:22:51] Finished 'default' after 4.58 μs
```
This may take a while. At the end, the build process creates a new `build/` folder, which contains the files you want.
The file `build/ripple-<VERSION NUMBER>.js` is a straight export of RippleAPI (whatever version you built) ready to be used in browsers. The file ending in `-min.js` is the same thing, but with the content [minified](https://en.wikipedia.org/wiki/Minification_%28programming%29) for faster loading. The file `build/ripple-<VERSION NUMBER>.js` is a straight export of RippleAPI (whatever version you built) ready to be used in browsers. The file ending in `-min.js` is the same thing, but with the content [minified](https://en.wikipedia.org/wiki/Minification_%28programming%29) for faster loading.

View File

@@ -154,6 +154,15 @@ Ripples distributed settlement network is built on open-source technology tha
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
<ul> <ul>
<li class="top"><h5 class="dev_heading">Tutorials</h5></li>
<li><a href="rippleapi_quickstart.html">RippleAPI Quick Start Guide</a></li>
<li><a href="rippled-setup.html">rippled Setup</a></li>
<li><a href="reliable_tx.html">Reliable Transaction Submission</a></li>
<li><a href="gateway_guide.html">Gateway Guide</a></li>
</ul>
</div>
<div class="col-md-3">
<ul>
<li class="top"><h5 class="dev_heading">References</h5></li> <li class="top"><h5 class="dev_heading">References</h5></li>
<li><a href="rippled-apis.html">rippled</a></li> <li><a href="rippled-apis.html">rippled</a></li>
<li><a href="transactions.html">Transactions</a></li> <li><a href="transactions.html">Transactions</a></li>
@@ -164,14 +173,6 @@ Ripples distributed settlement network is built on open-source technology tha
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
<ul> <ul>
<li class="top"><h5 class="dev_heading">Tutorials</h5></li>
<li><a href="rippled-setup.html">rippled Setup</a></li>
<li><a href="reliable_tx.html">Reliable Transaction Submission</a></li>
<li><a href="gateway_guide.html">Gateway Guide</a></li>
</ul>
</div>
<div class="col-md-3">
<ul>
<li class="top"><h5 class="dev_heading">API Tools</h5></li> <li class="top"><h5 class="dev_heading">API Tools</h5></li>
<li><a href="ripple-api-tool.html">WebSocket API Tool</a></li> <li><a href="ripple-api-tool.html">WebSocket API Tool</a></li>
<li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li> <li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li>

View File

@@ -199,19 +199,18 @@ git commit -m "ignore node_modules"
<h1 id="first-rippleapi-script">First RippleAPI Script</h1> <h1 id="first-rippleapi-script">First RippleAPI Script</h1>
<p>With RippleAPI installed, it's time to test that it works. Here's a simple script that uses RippleAPI to retrieve information on a specific account:</p> <p>With RippleAPI installed, it's time to test that it works. Here's a simple script that uses RippleAPI to retrieve information on a specific account:</p>
<pre><code>'use strict'; <pre><code>'use strict';
const {RippleAPI} = require('ripple-lib'); const RippleAPI = require('ripple-lib').RippleAPI;
const api = new RippleAPI({ const api = new RippleAPI({
server: 'wss://s1.ripple.com' // Public rippled server server: 'wss://s1.ripple.com' // Public rippled server
}); });
api.connect().then(() =&gt; { api.connect().then(() =&gt; {
/* begin custom code ------------------------------------ */ /* begin custom code ------------------------------------ */
const my_address = 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn'; const myAddress = 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn';
console.log('getting account info for', my_address); console.log('getting account info for', myAddress);
return api.getAccountInfo(my_address); return api.getAccountInfo(myAddress);
// info =&gt; {...} is just a shorter syntax for function(info) {...}
}).then(info =&gt; { }).then(info =&gt; {
console.log(info); console.log(info);
console.log('getAccountInfo done'); console.log('getAccountInfo done');
@@ -219,7 +218,7 @@ api.connect().then(() =&gt; {
/* end custom code -------------------------------------- */ /* end custom code -------------------------------------- */
}).then(() =&gt; { }).then(() =&gt; {
return api.disconnect(); return api.disconnect();
}).then(()=&gt; { }).then(() =&gt; {
console.log('done and disconnected.'); console.log('done and disconnected.');
}).catch(console.error); }).catch(console.error);
</code></pre> </code></pre>
@@ -242,10 +241,10 @@ done and disconnected.
<p>Even for a simple script, there's a lot packed into that, including some syntax and conventions that are recent developments in JavaScript. Understanding these concepts will help you write better code using RippleAPI, so let's divide the sample code into smaller chunks that are easier to understand.</p> <p>Even for a simple script, there's a lot packed into that, including some syntax and conventions that are recent developments in JavaScript. Understanding these concepts will help you write better code using RippleAPI, so let's divide the sample code into smaller chunks that are easier to understand.</p>
<h3 id="script-opening">Script opening</h3> <h3 id="script-opening">Script opening</h3>
<pre><code>'use strict'; <pre><code>'use strict';
const {RippleAPI} = require('ripple-lib'); const RippleAPI = require('ripple-lib').RippleAPI;
</code></pre> </code></pre>
<p>The opening line enables <a href="https://www.nczonline.net/blog/2012/03/13/its-time-to-start-using-javascript-strict-mode/">strict mode</a>. This is purely optional, but it helps you avoid some common pitfalls of JavaScript. See also: <a href="https://msdn.microsoft.com/library/br230269%28v=vs.94%29.aspx#Anchor_1">Restrictions on Code in Strict Mode</a>.</p> <p>The opening line enables <a href="https://www.nczonline.net/blog/2012/03/13/its-time-to-start-using-javascript-strict-mode/">strict mode</a>. This is purely optional, but it helps you avoid some common pitfalls of JavaScript. See also: <a href="https://msdn.microsoft.com/library/br230269%28v=vs.94%29.aspx#Anchor_1">Restrictions on Code in Strict Mode</a>.</p>
<p>The second line imports RippleAPI into the current scope using Node.js's require function. The <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment">destructuring assignment</a> assigns it to the variable name <code>RippleAPI</code> instead of <code>ripple-lib</code> (which is the name of the package, for historical reasons).</p> <p>The second line imports RippleAPI into the current scope using Node.js's require function. RippleAPI is just one of <a href="https://github.com/ripple/ripple-lib/blob/develop/src/index.js">the modules <code>ripple-lib</code> exports</a>.</p>
<h3 id="instantiating-the-api">Instantiating the API</h3> <h3 id="instantiating-the-api">Instantiating the API</h3>
<pre><code>const api = new RippleAPI({ <pre><code>const api = new RippleAPI({
server: 'wss://s1.ripple.com' // Public rippled server server: 'wss://s1.ripple.com' // Public rippled server
@@ -255,7 +254,7 @@ const {RippleAPI} = require('ripple-lib');
<p>The one argument to the constructor is an options object, which has <a href="rippleapi.html#parameters">a variety of options</a>. The <code>server</code> parameter tells it where it should connect to a <code>rippled</code> server.</p> <p>The one argument to the constructor is an options object, which has <a href="rippleapi.html#parameters">a variety of options</a>. The <code>server</code> parameter tells it where it should connect to a <code>rippled</code> server.</p>
<ul> <ul>
<li>The example <code>server</code> setting uses a secure WebSocket connection to connect to one of the public servers that Ripple (the company) operates.</li> <li>The example <code>server</code> setting uses a secure WebSocket connection to connect to one of the public servers that Ripple (the company) operates.</li>
<li>If you don't include the <code>server</code> option, RippleAPI runs in <a href="rippleapi.html#offline-functionality">offline mode</a> instead, which severely limits what you can do with it.</li> <li>If you don't include the <code>server</code> option, RippleAPI runs in <a href="rippleapi.html#offline-functionality">offline mode</a> instead, which only provides methods that don't need network connectivity.</li>
<li>You can specify a <a href="https://ripple.com/build/ripple-test-net/">Ripple Test Net</a> server instead to connect to the parallel-world Test Network instead of the production Ripple Consensus Ledger.</li> <li>You can specify a <a href="https://ripple.com/build/ripple-test-net/">Ripple Test Net</a> server instead to connect to the parallel-world Test Network instead of the production Ripple Consensus Ledger.</li>
<li>If you <a href="rippled-setup.html">run your own <code>rippled</code></a>, you can instruct it to connect to your local server. For example, you might say <code>server: 'ws://localhost:5005'</code> instead.</li> <li>If you <a href="rippled-setup.html">run your own <code>rippled</code></a>, you can instruct it to connect to your local server. For example, you might say <code>server: 'ws://localhost:5005'</code> instead.</li>
</ul> </ul>
@@ -268,12 +267,12 @@ const {RippleAPI} = require('ripple-lib');
<p>Finally, we have more new ECMAScript 6 syntax - an <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions">arrow function</a>. Arrow functions are just a shorter way of defining anonymous functions, which is pretty convenient when you're defining lots of one-off functions as callbacks, like we are here. The syntax <code>()=&gt; {...}</code> is mostly equivalent to <code>function() {...}</code>. If you want an anonymous function with one parameter, you can use a syntax like <code>info =&gt; {...}</code> instead, which is basically just <code>function(info) {...}</code> as well.</p> <p>Finally, we have more new ECMAScript 6 syntax - an <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions">arrow function</a>. Arrow functions are just a shorter way of defining anonymous functions, which is pretty convenient when you're defining lots of one-off functions as callbacks, like we are here. The syntax <code>()=&gt; {...}</code> is mostly equivalent to <code>function() {...}</code>. If you want an anonymous function with one parameter, you can use a syntax like <code>info =&gt; {...}</code> instead, which is basically just <code>function(info) {...}</code> as well.</p>
<h3 id="custom-code">Custom code</h3> <h3 id="custom-code">Custom code</h3>
<pre><code> /* begin custom code ------------------------------------ */ <pre><code> /* begin custom code ------------------------------------ */
const my_address = 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn'; const myAddress = 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn';
console.log('getting account info for',my_address); console.log('getting account info for', myAddress);
return api.getAccountInfo(my_address); return api.getAccountInfo(myAddress);
}).then( info =&gt; { }).then(info =&gt; {
console.log(info); console.log(info);
console.log('getAccountInfo done'); console.log('getAccountInfo done');
@@ -287,7 +286,7 @@ const {RippleAPI} = require('ripple-lib');
<h3 id="cleanup">Cleanup</h3> <h3 id="cleanup">Cleanup</h3>
<pre><code>}).then(() =&gt; { <pre><code>}).then(() =&gt; {
return api.disconnect(); return api.disconnect();
}).then(()=&gt; { }).then(() =&gt; {
console.log('done and disconnected.'); console.log('done and disconnected.');
}).catch(console.error); }).catch(console.error);
</code></pre> </code></pre>
@@ -297,15 +296,15 @@ const {RippleAPI} = require('ripple-lib');
<p>One of the biggest challenges in using the Ripple Consensus Ledger (or any decentralized system) is knowing the final, immutable transaction results. Even if you <a href="reliable_tx.html">follow the best practices</a> you still have to wait for the <a href="https://ripple.com/knowledge_center/the-ripple-ledger-consensus-process/">consensus process</a> to finally accept or reject your transaction. The following example code demonstrates how to wait for the final outcome of a transaction:</p> <p>One of the biggest challenges in using the Ripple Consensus Ledger (or any decentralized system) is knowing the final, immutable transaction results. Even if you <a href="reliable_tx.html">follow the best practices</a> you still have to wait for the <a href="https://ripple.com/knowledge_center/the-ripple-ledger-consensus-process/">consensus process</a> to finally accept or reject your transaction. The following example code demonstrates how to wait for the final outcome of a transaction:</p>
<pre><code>'use strict'; <pre><code>'use strict';
/* import RippleAPI and support libraies*/ /* import RippleAPI and support libraies*/
const {RippleAPI} = require('ripple-lib'); const RippleAPI = require('ripple-lib').RippleAPI;
const assert = require('assert'); const assert = require('assert');
/* Credentials of the account placing the order */ /* Credentials of the account placing the order */
const my_addr = 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn'; const myAddr = 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn';
const my_secret = 's████████████████████████████'; const mySecret = 's████████████████████████████';
/* Define the order to place here */ /* Define the order to place here */
const my_order = { const myOrder = {
'direction': 'buy', 'direction': 'buy',
'quantity': { 'quantity': {
'currency': 'FOO', 'currency': 'FOO',
@@ -324,7 +323,7 @@ const INTERVAL = 1000;
const api = new RippleAPI({server: 'wss://s2.ripple.com'}); const api = new RippleAPI({server: 'wss://s2.ripple.com'});
/* number of ledgers to check for valid transaction before fail */ /* number of ledgers to check for valid transaction before fail */
const ledgerOffset = 5; const ledgerOffset = 5;
const my_instructions = {maxLedgerVersionOffset: ledgerOffset}; const myInstructions = {maxLedgerVersionOffset: ledgerOffset};
/* Verify a transaction is in a validated RCL version */ /* Verify a transaction is in a validated RCL version */
@@ -336,7 +335,8 @@ function verifyTransaction(hash, options) {
console.log('Sequence: ', data.sequence); console.log('Sequence: ', data.sequence);
return data.outcome.result === 'tesSUCCESS'; return data.outcome.result === 'tesSUCCESS';
}).catch(error =&gt; { }).catch(error =&gt; {
/* if transaction not in latest validated ledger try again until max ledger hit */ /* if transaction not in latest validated ledger,
try again until max ledger hit */
if (error instanceof api.errors.PendingLedgerVersionError) { if (error instanceof api.errors.PendingLedgerVersionError) {
return new Promise((resolve, reject) =&gt; { return new Promise((resolve, reject) =&gt; {
setTimeout(() =&gt; verifyTransaction(hash, options) setTimeout(() =&gt; verifyTransaction(hash, options)
@@ -373,12 +373,12 @@ function submitTransaction(lastClosedLedgerVersion, prepared, secret) {
api.connect().then(() =&gt; { api.connect().then(() =&gt; {
console.log('Connected'); console.log('Connected');
return api.prepareOrder(my_addr, my_order, my_instructions); return api.prepareOrder(myAddr, myOrder, myInstructions);
}).then(prepared =&gt; { }).then(prepared =&gt; {
console.log('Order Prepared'); console.log('Order Prepared');
return api.getLedger().then(ledger =&gt; { return api.getLedger().then(ledger =&gt; {
console.log('Current Ledger', ledger.ledgerVersion); console.log('Current Ledger', ledger.ledgerVersion);
return submitTransaction(ledger.ledgerVersion, prepared, my_secret); return submitTransaction(ledger.ledgerVersion, prepared, mySecret);
}); });
}).then(() =&gt; { }).then(() =&gt; {
api.disconnect().then(() =&gt; { api.disconnect().then(() =&gt; {
@@ -388,7 +388,10 @@ api.connect().then(() =&gt; {
}).catch(console.error); }).catch(console.error);
</code></pre> </code></pre>
<p>This code uses </p> <p>This code creates and submits an order transaction, although the same principles apply to other types of transactions as well. After submitting the transaction, the code uses a new Promise, which queries the ledger again after using setTimeout to wait a fixed amount of time, to see if the transaction has been verified. If it hasn't been verified, the process repeats until either the transaction is found in a validated ledger or the returned ledger is higher than the LastLedgerSequence parameter.</p>
<p>In rare cases (particularly with a large delay or a loss of power), the <code>rippled</code> server may be missing a ledger version between when you submitted the transaction and when you determined that the network has passed the <code>maxLedgerVersion</code>. In this case, you cannot be definitively sure whether the transaction has failed, or has been included in one of the missing ledger versions. RippleAPI returns <code>MissingLedgerHistoryError</code> in this case.</p>
<p>If you are the administrator of the <code>rippled</code> server, you can <a href="rippled-apis.html#ledger-request">manually request the missing ledger(s)</a>. Otherwise, you can try checking the ledger history using a different server. (Ripple runs a public full-history server at <code>s2.ripple.com</code> for this purpose.)</p>
<p>See <a href="reliable_tx.html">Reliable Transaction Submission</a> for a more thorough explanation.</p>
<h1 id="rippleapi-in-web-browsers">RippleAPI in Web Browsers</h1> <h1 id="rippleapi-in-web-browsers">RippleAPI in Web Browsers</h1>
<p>The process of using RippleAPI in a web browser is slightly different.</p> <p>The process of using RippleAPI in a web browser is slightly different.</p>
<h2 id="build-instructions">Build Instructions</h2> <h2 id="build-instructions">Build Instructions</h2>
@@ -411,10 +414,24 @@ checkout release
npm WARN notsup Not compatible with your operating system or architecture: fsevents@1.0.6 npm WARN notsup Not compatible with your operating system or architecture: fsevents@1.0.6
</code></pre> </code></pre>
<h4 id="3-use-gulp-to-build-a-single-javascript-output">3. Use Gulp to build a single JavaScript output</h4> <h4 id="3-use-gulp-to-build-a-single-javascript-output">3. Use Gulp to build a single JavaScript output</h4>
<p>RippleAPI comes with code to use the <a href="http://gulpjs.com/">gulp</a> package to compile all its source code into browser-compatible JavaScript files. Gulp is automatically installed as one of the dependencies, so all you have to do is run it:</p> <p>RippleAPI comes with code to use the <a href="http://gulpjs.com/">gulp</a> package to compile all its source code into browser-compatible JavaScript files. Gulp is automatically installed as one of the dependencies, so all you have to do is run it. RippleAPI's configuration makes this easy:</p>
<pre><code>./node_modules/.bin/gulp <pre><code>npm run build
</code></pre> </code></pre>
<p>This may take a little while. It outputs several things, and creates a new <code>build/</code> folder, which contains the files you want.</p> <p>Output:</p>
<pre><code>&gt; ripple-lib@0.16.5 build /home/username/ripple-lib
&gt; gulp
[15:22:30] Using gulpfile /home/username/ripple-lib/Gulpfile.js
[15:22:30] Starting 'build'...
[15:22:30] Starting 'build-debug'...
[15:22:42] Finished 'build' after 12 s
[15:22:42] Starting 'build-min'...
[15:22:42] Finished 'build-debug' after 12 s
[15:22:51] Finished 'build-min' after 9.83 s
[15:22:51] Starting 'default'...
[15:22:51] Finished 'default' after 4.58 μs
</code></pre>
<p>This may take a while. At the end, the build process creates a new <code>build/</code> folder, which contains the files you want.</p>
<p>The file <code>build/ripple-&lt;VERSION NUMBER&gt;.js</code> is a straight export of RippleAPI (whatever version you built) ready to be used in browsers. The file ending in <code>-min.js</code> is the same thing, but with the content <a href="https://en.wikipedia.org/wiki/Minification_%28programming%29">minified</a> for faster loading.</p> <p>The file <code>build/ripple-&lt;VERSION NUMBER&gt;.js</code> is a straight export of RippleAPI (whatever version you built) ready to be used in browsers. The file ending in <code>-min.js</code> is the same thing, but with the content <a href="https://en.wikipedia.org/wiki/Minification_%28programming%29">minified</a> for faster loading.</p>
<h2 id="example-browser-usage">Example Browser Usage</h2> <h2 id="example-browser-usage">Example Browser Usage</h2>
<p>The following HTML file demonstrates basic usage of the browser version of RippleAPI to connect to a public <code>rippled</code> server and report information about that server. Instead of using Node.js's "require" syntax, the browser version creates a global variable named <code>ripple</code>, which contains the <code>RippleAPI</code> class.</p> <p>The following HTML file demonstrates basic usage of the browser version of RippleAPI to connect to a public <code>rippled</code> server and report information about that server. Instead of using Node.js's "require" syntax, the browser version creates a global variable named <code>ripple</code>, which contains the <code>RippleAPI</code> class.</p>
@@ -426,24 +443,24 @@ npm WARN notsup Not compatible with your operating system or architecture: fseve
&lt;script&gt; &lt;script&gt;
console.log(ripple); console.log(ripple);
var api = new ripple.RippleAPI({server:'wss://s1.ripple.com/'}); var api = new ripple.RippleAPI({server:'wss://s1.ripple.com/'});
api.connect().then(()=&gt;{ api.connect().then(function() {
return api.getServerInfo(); return api.getServerInfo();
}).then(server_info=&gt;{ }).then(function(server_info) {
document.body.innerHTML += `&lt;p&gt;Connected to rippled server!&lt;/p&gt; document.body.innerHTML += "&lt;p&gt;Connected to rippled server!&lt;/p&gt;" +
&lt;table&gt; " &lt;table&gt;" +
&lt;tr&gt;&lt;th&gt;Version&lt;/th&gt; " &lt;tr&gt;&lt;th&gt;Version&lt;/th&gt;" +
&lt;td&gt;${ server_info.buildVersion }&lt;/td&gt;&lt;/tr&gt; " &lt;td&gt;" + server_info.buildVersion + "&lt;/td&gt;&lt;/tr&gt;" +
&lt;tr&gt;&lt;th&gt;Ledgers available&lt;/th&gt; " &lt;tr&gt;&lt;th&gt;Ledgers available&lt;/th&gt;" +
&lt;td&gt;${ server_info.completeLedgers }&lt;/td&gt;&lt;/tr&gt; " &lt;td&gt;" + server_info.completeLedgers + "&lt;/td&gt;&lt;/tr&gt;" +
&lt;tr&gt;&lt;th&gt;hostID&lt;/th&gt; " &lt;tr&gt;&lt;th&gt;hostID&lt;/th&gt;" +
&lt;td&gt;${ server_info.hostID }&lt;/td&gt;&lt;/tr&gt; " &lt;td&gt;" + server_info.hostID + "&lt;/td&gt;&lt;/tr&gt;" +
&lt;tr&gt;&lt;th&gt;Most Recent Validated Ledger Seq.&lt;/th&gt; " &lt;tr&gt;&lt;th&gt;Most Recent Validated Ledger Seq.&lt;/th&gt;" +
&lt;td&gt;${ server_info.validatedLedger.ledgerVersion }&lt;/td&gt;&lt;/tr&gt; " &lt;td&gt;" + server_info.validatedLedger.ledgerVersion + "&lt;/td&gt;&lt;/tr&gt;" +
&lt;tr&gt;&lt;th&gt;Most Recent Validated Ledger Hash&lt;/th&gt; " &lt;tr&gt;&lt;th&gt;Most Recent Validated Ledger Hash&lt;/th&gt;" +
&lt;td&gt;${ server_info.validatedLedger.hash }&lt;/td&gt;&lt;/tr&gt; " &lt;td&gt;" + server_info.validatedLedger.hash + "&lt;/td&gt;&lt;/tr&gt;" +
&lt;tr&gt;&lt;th&gt;Seconds since last ledger validated&lt;/th&gt; " &lt;tr&gt;&lt;th&gt;Seconds since last ledger validated&lt;/th&gt;" +
&lt;td&gt;${ server_info.validatedLedger.age }&lt;/td&gt;&lt;/tr&gt; " &lt;td&gt;" + server_info.validatedLedger.age + "&lt;/td&gt;&lt;/tr&gt;" +
&lt;/table&gt;`; " &lt;/table&gt;";
}); });
&lt;/script&gt; &lt;/script&gt;
&lt;style type="text/css"&gt; &lt;style type="text/css"&gt;