Compare commits

...

14 Commits

Author SHA1 Message Date
Greg Weisbrod
0aad4e7d31 gw/more-address-codec-linting 2021-12-05 00:07:25 -05:00
Mayukha Vadari
78d9b11794 release: release new versions (#1859) 2021-12-02 14:59:58 -05:00
Mayukha Vadari
4e0a093677 chore: update HISTORY for rbc release (#1858) 2021-12-02 14:52:08 -05:00
Mayukha Vadari
fe845de884 fix: encoding issue with encoding non-traditional currency codes (#1857)
* add test

* fix decoding issue
2021-12-02 14:43:26 -05:00
dependabot[bot]
8461ef6804 build(deps-dev): bump typedoc from 0.22.8 to 0.22.10 (#1837)
Bumps [typedoc](https://github.com/TypeStrong/TypeDoc) from 0.22.8 to 0.22.10.
- [Release notes](https://github.com/TypeStrong/TypeDoc/releases)
- [Changelog](https://github.com/TypeStrong/typedoc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/TypeStrong/TypeDoc/compare/v0.22.8...v0.22.10)

---
updated-dependencies:
- dependency-name: typedoc
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-12-02 09:45:51 -08:00
Jackson Mills
7c6230b18e Lerna patch (#1852) 2021-12-01 15:48:07 -08:00
Jackson Mills
0eb64b1447 Update history for all codecs and xrpl.js (#1849)
* Update xrpl.js history.md

* Update ripple-address-codec history

* Add comment about npm < 7 for all codecs
2021-12-01 15:20:59 -08:00
dependabot[bot]
bd7b6282e3 build(deps-dev): bump typescript from 4.4.4 to 4.5.2 (#1834)
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.4.4 to 4.5.2.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v4.4.4...v4.5.2)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-12-01 15:04:26 -08:00
Omar Khan
8bb248ca9e remove engines requirement for npm from individual packages (#1848)
* remove engines package.json entry from individual packages

* only remove npm from engines entry
2021-12-01 16:33:05 -05:00
dependabot[bot]
f027236b55 build(deps-dev): bump eslint-plugin-consistent-default-export-name (#1836)
Bumps [eslint-plugin-consistent-default-export-name](https://github.com/minseoksuh/eslint-plugin-consistent-default-export-name) from 0.0.13 to 0.0.14.
- [Release notes](https://github.com/minseoksuh/eslint-plugin-consistent-default-export-name/releases)
- [Commits](https://github.com/minseoksuh/eslint-plugin-consistent-default-export-name/commits)

---
updated-dependencies:
- dependency-name: eslint-plugin-consistent-default-export-name
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-12-01 12:29:14 -08:00
dependabot[bot]
3e7a722a4c build(deps-dev): bump prettier from 2.4.1 to 2.5.0 (#1833)
Bumps [prettier](https://github.com/prettier/prettier) from 2.4.1 to 2.5.0.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/2.4.1...2.5.0)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-12-01 11:26:38 -08:00
dependabot[bot]
e4d70b53d5 build(deps-dev): bump eslint-plugin-jsdoc from 36.1.1 to 37.1.0 (#1838)
Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 36.1.1 to 37.1.0.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v36.1.1...v37.1.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-12-01 11:10:41 -08:00
dependabot[bot]
3a3f306f18 build(deps-dev): bump @types/node from 16.11.6 to 16.11.11 (#1827)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 16.11.6 to 16.11.11.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-12-01 10:21:15 -05:00
Mayukha Vadari
fc101c6733 fix: add workaround for rippled UNLModify encoding bug (#1830)
* initial patch

* clean up

* make ts happy

* fix typing

* respond to comments

* Revert "respond to comments"

This reverts commit 689768bbf1.

* Publish

 - ripple-address-codec@4.2.1-beta.0
 - ripple-binary-codec@1.2.1-beta.0
 - ripple-keypairs@1.1.1-beta.0
 - xrpl@2.0.3-beta.0

* add helper comments

Co-authored-by: Nathan Nichols <natenichols@cox.net>
2021-11-30 17:16:03 -05:00
21 changed files with 268 additions and 174 deletions

212
package-lock.json generated
View File

@@ -33,10 +33,10 @@
"ejs": "^3.0.1",
"eslint": "^7.5.0",
"eslint-plugin-array-func": "^3.1.7",
"eslint-plugin-consistent-default-export-name": "^0.0.13",
"eslint-plugin-consistent-default-export-name": "^0.0.14",
"eslint-plugin-eslint-comments": "^3.2.0",
"eslint-plugin-import": "^2.24.1",
"eslint-plugin-jsdoc": "^36.0.0",
"eslint-plugin-jsdoc": "^37.1.0",
"eslint-plugin-mocha": "^9.0.0",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^4.0.0",
@@ -718,24 +718,26 @@
}
},
"node_modules/@es-joy/jsdoccomment": {
"version": "0.10.8",
"integrity": "sha512-3P1JiGL4xaR9PoTKUHa2N/LKwa2/eUdRqGwijMWWgBqbFEqJUVpmaOi2TcjcemrsRMgFLBzQCK4ToPhrSVDiFQ==",
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.12.0.tgz",
"integrity": "sha512-Gw4/j9v36IKY8ET+W0GoOzrRw17xjf21EIFFRL3zx21fF5MnqmeNpNi+PU/LKjqLpPb2Pw2XdlJbYM31VVo/PQ==",
"dev": true,
"dependencies": {
"comment-parser": "1.2.4",
"esquery": "^1.4.0",
"jsdoc-type-pratt-parser": "1.1.1"
"jsdoc-type-pratt-parser": "2.0.0"
},
"engines": {
"node": "^12 || ^14 || ^16"
"node": "^12 || ^14 || ^16 || ^17"
}
},
"node_modules/@es-joy/jsdoccomment/node_modules/jsdoc-type-pratt-parser": {
"version": "1.1.1",
"integrity": "sha512-uelRmpghNwPBuZScwgBG/OzodaFk5RbO5xaivBdsAY70icWfShwZ7PCMO0x1zSkOa8T1FzHThmrdoyg/0AwV5g==",
"node_modules/@es-joy/jsdoccomment/node_modules/comment-parser": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.4.tgz",
"integrity": "sha512-pm0b+qv+CkWNriSTMsfnjChF9kH0kxz55y44Wo5le9qLxMj5xDQAaEd9ZN1ovSuk9CsrncWaFwgpOMg7ClJwkw==",
"dev": true,
"engines": {
"node": ">=12.0.0"
"node": ">= 12.0.0"
}
},
"node_modules/@eslint/eslintrc": {
@@ -2891,8 +2893,9 @@
"dev": true
},
"node_modules/@types/node": {
"version": "16.11.6",
"integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==",
"version": "16.11.11",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.11.tgz",
"integrity": "sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw==",
"dev": true
},
"node_modules/@types/normalize-package-data": {
@@ -4881,8 +4884,9 @@
"dev": true
},
"node_modules/comment-parser": {
"version": "1.2.4",
"integrity": "sha512-pm0b+qv+CkWNriSTMsfnjChF9kH0kxz55y44Wo5le9qLxMj5xDQAaEd9ZN1ovSuk9CsrncWaFwgpOMg7ClJwkw==",
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz",
"integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==",
"dev": true,
"engines": {
"node": ">= 12.0.0"
@@ -6045,8 +6049,9 @@
}
},
"node_modules/eslint-plugin-consistent-default-export-name": {
"version": "0.0.13",
"integrity": "sha512-vrCH7XnvJZTTVlw8zH+4X84bK7MbI9/h4m0r7wxvYcbW4XViSDb99SBE6Wz1HmWzz3sUHID6nFeVjek5qdObRA==",
"version": "0.0.14",
"resolved": "https://registry.npmjs.org/eslint-plugin-consistent-default-export-name/-/eslint-plugin-consistent-default-export-name-0.0.14.tgz",
"integrity": "sha512-9+YfYLQchFArcFvg7vHPjJZi3sUUIA5D2DWLmZzFbnmRf+wdX/9lgbKEaiJKfr+3/sYIvP71EdFlpjzOlSbm2Q==",
"dev": true,
"dependencies": {
"lodash.camelcase": "^4.3.0",
@@ -6135,25 +6140,43 @@
"dev": true
},
"node_modules/eslint-plugin-jsdoc": {
"version": "36.1.1",
"integrity": "sha512-nuLDvH1EJaKx0PCa9oeQIxH6pACIhZd1gkalTUxZbaxxwokjs7TplqY0Q8Ew3CoZaf5aowm0g/Z3JGHCatt+gQ==",
"version": "37.1.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.1.0.tgz",
"integrity": "sha512-DpkFzX5Sqkqzy4MCgowhDXmusWcF1Gn7wYnphdGfWmIkoQr6SwL0jEtltGAVyF5Rj6ACi6ydw0oCCI5hF3yz6w==",
"dev": true,
"dependencies": {
"@es-joy/jsdoccomment": "0.10.8",
"comment-parser": "1.2.4",
"debug": "^4.3.2",
"@es-joy/jsdoccomment": "0.12.0",
"comment-parser": "1.3.0",
"debug": "^4.3.3",
"escape-string-regexp": "^4.0.0",
"esquery": "^1.4.0",
"jsdoc-type-pratt-parser": "^1.1.1",
"lodash": "^4.17.21",
"jsdoc-type-pratt-parser": "^2.0.0",
"regextras": "^0.8.0",
"semver": "^7.3.5",
"spdx-expression-parse": "^3.0.1"
},
"engines": {
"node": "^12 || ^14 || ^16"
"node": "^12 || ^14 || ^16 || ^17"
},
"peerDependencies": {
"eslint": "^6.0.0 || ^7.0.0"
"eslint": "^7.0.0 || ^8.0.0"
}
},
"node_modules/eslint-plugin-jsdoc/node_modules/debug": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
"integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
"dev": true,
"dependencies": {
"ms": "2.1.2"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/eslint-plugin-jsx-a11y": {
@@ -9796,8 +9819,9 @@
"dev": true
},
"node_modules/jsdoc-type-pratt-parser": {
"version": "1.2.0",
"integrity": "sha512-4STjeF14jp4bqha44nKMY1OUI6d2/g6uclHWUCZ7B4DoLzaB5bmpTkQrpqU+vSVzMD0LsKAOskcnI3I3VfIpmg==",
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.0.0.tgz",
"integrity": "sha512-sUuj2j48wxrEpbFjDp1sAesAxPiLT+z0SWVmMafyIINs6Lj5gIPKh3VrkBZu4E/Dv+wHpOot0m6H8zlHQjwqeQ==",
"dev": true,
"engines": {
"node": ">=12.0.0"
@@ -12741,8 +12765,9 @@
}
},
"node_modules/prettier": {
"version": "2.4.1",
"integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==",
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.0.tgz",
"integrity": "sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg==",
"dev": true,
"bin": {
"prettier": "bin-prettier.js"
@@ -15550,8 +15575,9 @@
}
},
"node_modules/typedoc": {
"version": "0.22.8",
"integrity": "sha512-92S+YzyhospdXN5rnkYUTgirdTYqNWY7NP9vco+IqQQoiSXzVSUsawVro+tMyEEsWUS7EMaJ2YOjB9uE0CBi6A==",
"version": "0.22.10",
"resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.10.tgz",
"integrity": "sha512-hQYZ4WtoMZ61wDC6w10kxA42+jclWngdmztNZsDvIz7BMJg7F2xnT+uYsUa7OluyKossdFj9E9Ye4QOZKTy8SA==",
"dev": true,
"dependencies": {
"glob": "^7.2.0",
@@ -15567,7 +15593,7 @@
"node": ">= 12.10.0"
},
"peerDependencies": {
"typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x"
"typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x || 4.5.x"
}
},
"node_modules/typedoc/node_modules/glob": {
@@ -15594,8 +15620,9 @@
"integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g=="
},
"node_modules/typescript": {
"version": "4.4.4",
"integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==",
"version": "4.5.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz",
"integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==",
"dev": true,
"bin": {
"tsc": "bin/tsc",
@@ -16581,7 +16608,7 @@
}
},
"packages/ripple-address-codec": {
"version": "4.2.0",
"version": "4.2.2",
"integrity": "sha512-9QhBNDiWjwj7l+WQ7H7klXF/VwxVj2Q0HRhd4vLCueTPoxUtaNQyfvUZFiXJrqxg0heM3/iWxupkq4TwrXgSuQ==",
"license": "ISC",
"dependencies": {
@@ -16589,12 +16616,11 @@
"create-hash": "^1.1.2"
},
"engines": {
"node": ">= 10",
"npm": ">=7.0.0"
"node": ">= 10"
}
},
"packages/ripple-binary-codec": {
"version": "1.2.0",
"version": "1.2.2",
"integrity": "sha512-XMRCbFXyG+dGp3x7tMs9IwA+FVWPPaGjdHYW2+g4Q/WQJqFp5MRED+jjOBOUafmrW4TUsOn1PEEdbB4ozWbDBw==",
"license": "ISC",
"dependencies": {
@@ -16603,11 +16629,10 @@
"buffer": "5.6.0",
"create-hash": "^1.2.0",
"decimal.js": "^10.2.0",
"ripple-address-codec": "^4.2.0"
"ripple-address-codec": "^4.2.2"
},
"engines": {
"node": ">=10.22.0",
"npm": ">=7.0.0"
"node": ">=10.22.0"
}
},
"packages/ripple-binary-codec/node_modules/buffer": {
@@ -16619,7 +16644,7 @@
}
},
"packages/ripple-keypairs": {
"version": "1.1.0",
"version": "1.1.2",
"integrity": "sha512-Zlmbtn2YUpW4uKlLm2/tpkY5RC/EXQlkJwIIKp0AoF9D23pJ43/EuipNW2F6qURdbkUezDwB0bMV7uRXip3x2w==",
"license": "ISC",
"dependencies": {
@@ -16627,15 +16652,14 @@
"brorand": "^1.0.5",
"elliptic": "^6.5.4",
"hash.js": "^1.0.3",
"ripple-address-codec": "^4.2.0"
"ripple-address-codec": "^4.2.2"
},
"engines": {
"node": ">= 10",
"npm": ">=7.0.0"
"node": ">= 10"
}
},
"packages/xrpl": {
"version": "2.0.2",
"version": "2.0.4",
"integrity": "sha512-NmrSYpXym7NzGABeXU1H8g4ZtCxRhr/3wu0lguxzcIYpcKPgWLYimg+s9NLLNbPWTZdxXu9SeSWu5zh4gyqAeA==",
"license": "ISC",
"dependencies": {
@@ -16644,17 +16668,16 @@
"bip39": "^3.0.4",
"https-proxy-agent": "^5.0.0",
"lodash": "^4.17.4",
"ripple-address-codec": "^4.2.0",
"ripple-binary-codec": "^1.2.0",
"ripple-keypairs": "^1.1.0",
"ripple-address-codec": "^4.2.2",
"ripple-binary-codec": "^1.2.2",
"ripple-keypairs": "^1.1.2",
"ws": "^8.2.2"
},
"devDependencies": {
"xrpl-local": "file:./src"
},
"engines": {
"node": ">=10.13.0",
"npm": ">=7.14.0 <8.0.0"
"node": ">=10.13.0"
}
},
"packages/xrpl/node_modules/ws": {
@@ -16677,6 +16700,8 @@
}
},
"packages/xrpl/src": {
"name": "xrpl-local",
"version": "0.0.1",
"dev": true
}
},
@@ -17162,18 +17187,20 @@
"dev": true
},
"@es-joy/jsdoccomment": {
"version": "0.10.8",
"integrity": "sha512-3P1JiGL4xaR9PoTKUHa2N/LKwa2/eUdRqGwijMWWgBqbFEqJUVpmaOi2TcjcemrsRMgFLBzQCK4ToPhrSVDiFQ==",
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.12.0.tgz",
"integrity": "sha512-Gw4/j9v36IKY8ET+W0GoOzrRw17xjf21EIFFRL3zx21fF5MnqmeNpNi+PU/LKjqLpPb2Pw2XdlJbYM31VVo/PQ==",
"dev": true,
"requires": {
"comment-parser": "1.2.4",
"esquery": "^1.4.0",
"jsdoc-type-pratt-parser": "1.1.1"
"jsdoc-type-pratt-parser": "2.0.0"
},
"dependencies": {
"jsdoc-type-pratt-parser": {
"version": "1.1.1",
"integrity": "sha512-uelRmpghNwPBuZScwgBG/OzodaFk5RbO5xaivBdsAY70icWfShwZ7PCMO0x1zSkOa8T1FzHThmrdoyg/0AwV5g==",
"comment-parser": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.4.tgz",
"integrity": "sha512-pm0b+qv+CkWNriSTMsfnjChF9kH0kxz55y44Wo5le9qLxMj5xDQAaEd9ZN1ovSuk9CsrncWaFwgpOMg7ClJwkw==",
"dev": true
}
}
@@ -18923,8 +18950,9 @@
"dev": true
},
"@types/node": {
"version": "16.11.6",
"integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==",
"version": "16.11.11",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.11.tgz",
"integrity": "sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw==",
"dev": true
},
"@types/normalize-package-data": {
@@ -20447,8 +20475,9 @@
"dev": true
},
"comment-parser": {
"version": "1.2.4",
"integrity": "sha512-pm0b+qv+CkWNriSTMsfnjChF9kH0kxz55y44Wo5le9qLxMj5xDQAaEd9ZN1ovSuk9CsrncWaFwgpOMg7ClJwkw==",
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz",
"integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==",
"dev": true
},
"commondir": {
@@ -21382,8 +21411,9 @@
"requires": {}
},
"eslint-plugin-consistent-default-export-name": {
"version": "0.0.13",
"integrity": "sha512-vrCH7XnvJZTTVlw8zH+4X84bK7MbI9/h4m0r7wxvYcbW4XViSDb99SBE6Wz1HmWzz3sUHID6nFeVjek5qdObRA==",
"version": "0.0.14",
"resolved": "https://registry.npmjs.org/eslint-plugin-consistent-default-export-name/-/eslint-plugin-consistent-default-export-name-0.0.14.tgz",
"integrity": "sha512-9+YfYLQchFArcFvg7vHPjJZi3sUUIA5D2DWLmZzFbnmRf+wdX/9lgbKEaiJKfr+3/sYIvP71EdFlpjzOlSbm2Q==",
"dev": true,
"requires": {
"lodash.camelcase": "^4.3.0",
@@ -21452,19 +21482,31 @@
}
},
"eslint-plugin-jsdoc": {
"version": "36.1.1",
"integrity": "sha512-nuLDvH1EJaKx0PCa9oeQIxH6pACIhZd1gkalTUxZbaxxwokjs7TplqY0Q8Ew3CoZaf5aowm0g/Z3JGHCatt+gQ==",
"version": "37.1.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.1.0.tgz",
"integrity": "sha512-DpkFzX5Sqkqzy4MCgowhDXmusWcF1Gn7wYnphdGfWmIkoQr6SwL0jEtltGAVyF5Rj6ACi6ydw0oCCI5hF3yz6w==",
"dev": true,
"requires": {
"@es-joy/jsdoccomment": "0.10.8",
"comment-parser": "1.2.4",
"debug": "^4.3.2",
"@es-joy/jsdoccomment": "0.12.0",
"comment-parser": "1.3.0",
"debug": "^4.3.3",
"escape-string-regexp": "^4.0.0",
"esquery": "^1.4.0",
"jsdoc-type-pratt-parser": "^1.1.1",
"lodash": "^4.17.21",
"jsdoc-type-pratt-parser": "^2.0.0",
"regextras": "^0.8.0",
"semver": "^7.3.5",
"spdx-expression-parse": "^3.0.1"
},
"dependencies": {
"debug": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
"integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
"dev": true,
"requires": {
"ms": "2.1.2"
}
}
}
},
"eslint-plugin-jsx-a11y": {
@@ -24153,8 +24195,9 @@
"dev": true
},
"jsdoc-type-pratt-parser": {
"version": "1.2.0",
"integrity": "sha512-4STjeF14jp4bqha44nKMY1OUI6d2/g6uclHWUCZ7B4DoLzaB5bmpTkQrpqU+vSVzMD0LsKAOskcnI3I3VfIpmg==",
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.0.0.tgz",
"integrity": "sha512-sUuj2j48wxrEpbFjDp1sAesAxPiLT+z0SWVmMafyIINs6Lj5gIPKh3VrkBZu4E/Dv+wHpOot0m6H8zlHQjwqeQ==",
"dev": true
},
"jsdom": {
@@ -26399,8 +26442,9 @@
"dev": true
},
"prettier": {
"version": "2.4.1",
"integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==",
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.0.tgz",
"integrity": "sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg==",
"dev": true
},
"prettier-linter-helpers": {
@@ -27052,7 +27096,7 @@
"buffer": "5.6.0",
"create-hash": "^1.2.0",
"decimal.js": "^10.2.0",
"ripple-address-codec": "^4.2.0"
"ripple-address-codec": "^4.2.2"
},
"dependencies": {
"buffer": {
@@ -27072,7 +27116,7 @@
"brorand": "^1.0.5",
"elliptic": "^6.5.4",
"hash.js": "^1.0.3",
"ripple-address-codec": "^4.2.0"
"ripple-address-codec": "^4.2.2"
}
},
"rsvp": {
@@ -28526,8 +28570,9 @@
}
},
"typedoc": {
"version": "0.22.8",
"integrity": "sha512-92S+YzyhospdXN5rnkYUTgirdTYqNWY7NP9vco+IqQQoiSXzVSUsawVro+tMyEEsWUS7EMaJ2YOjB9uE0CBi6A==",
"version": "0.22.10",
"resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.10.tgz",
"integrity": "sha512-hQYZ4WtoMZ61wDC6w10kxA42+jclWngdmztNZsDvIz7BMJg7F2xnT+uYsUa7OluyKossdFj9E9Ye4QOZKTy8SA==",
"dev": true,
"requires": {
"glob": "^7.2.0",
@@ -28557,8 +28602,9 @@
"integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g=="
},
"typescript": {
"version": "4.4.4",
"integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==",
"version": "4.5.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz",
"integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==",
"dev": true
},
"uglify-js": {
@@ -29208,9 +29254,9 @@
"bip39": "^3.0.4",
"https-proxy-agent": "^5.0.0",
"lodash": "^4.17.4",
"ripple-address-codec": "^4.2.0",
"ripple-binary-codec": "^1.2.0",
"ripple-keypairs": "^1.1.0",
"ripple-address-codec": "^4.2.2",
"ripple-binary-codec": "^1.2.2",
"ripple-keypairs": "^1.1.2",
"ws": "^8.2.2",
"xrpl-local": "file:src"
},

View File

@@ -35,10 +35,10 @@
"ejs": "^3.0.1",
"eslint": "^7.5.0",
"eslint-plugin-array-func": "^3.1.7",
"eslint-plugin-consistent-default-export-name": "^0.0.13",
"eslint-plugin-consistent-default-export-name": "^0.0.14",
"eslint-plugin-eslint-comments": "^3.2.0",
"eslint-plugin-import": "^2.24.1",
"eslint-plugin-jsdoc": "^36.0.0",
"eslint-plugin-jsdoc": "^37.1.0",
"eslint-plugin-mocha": "^9.0.0",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^4.0.0",

View File

@@ -34,18 +34,7 @@ module.exports = {
// monorepo. They need to actually be addressed!
// **
'@typescript-eslint/consistent-type-assertions': 'off',
'@typescript-eslint/no-unnecessary-condition': 'off',
'@typescript-eslint/no-unsafe-call': 'off',
'@typescript-eslint/no-magic-numbers': 'off',
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/no-unsafe-return': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/explicit-member-accessibility': 'off',
'@typescript-eslint/promise-function-async': 'off',
'@typescript-eslint/prefer-nullish-coalescing': 'off',
'@typescript-eslint/naming-convention': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'jsdoc/require-returns': 'off',
'jsdoc/check-param-names': 'off',
'jsdoc/require-throws': 'off',
'jsdoc/require-jsdoc': 'off',

View File

@@ -1,5 +1,9 @@
# ripple-address-codec
## 4.2.1 (2021-12-1)
- Fix issue where npm < 7 could not install the library
- Initial pass at linting this codebase with new rules
## 4.2.0 (2021-11-15)
- Converts ripple-address-codec into a monorepo with ripple-binary-codec,
ripple-keypairs, and xrpl. Changes to build tooling but no new features or

View File

@@ -1,6 +1,6 @@
{
"name": "ripple-address-codec",
"version": "4.2.0",
"version": "4.2.2",
"description": "encodes/decodes base58 encoded XRP Ledger identifiers",
"files": [
"dist/*",
@@ -27,7 +27,6 @@
},
"prettier": "@xrplf/prettier-config",
"engines": {
"node": ">= 10",
"npm": ">=7.0.0"
"node": ">= 10"
}
}

View File

@@ -13,12 +13,15 @@ import {
isValidClassicAddress,
} from './xrp-codec'
/* eslint-disable @typescript-eslint/naming-convention --
* there are just sub constants */
const PREFIX_BYTES = {
// 5, 68
MAIN: Buffer.from([0x05, 0x44]),
// 4, 147
TEST: Buffer.from([0x04, 0x93]),
}
/* eslint-enable @typescript-eslint/naming-convention */
const MAX_32_BIT_UNSIGNED_INT = 4294967295
@@ -72,6 +75,8 @@ function encodeXAddress(
return codec.encodeChecked(bytes)
}
/* eslint-disable @typescript-eslint/naming-convention --
* not a big deal on these old param names */
function xAddressToClassicAddress(xAddress: string): {
classicAddress: string
tag: number | false
@@ -85,7 +90,10 @@ function xAddressToClassicAddress(xAddress: string): {
test,
}
}
/* eslint-enable @typescript-eslint/naming-convention */
/* eslint-disable @typescript-eslint/naming-convention --
* not a big deal on these old param names */
function decodeXAddress(xAddress: string): {
accountId: Buffer
tag: number | false
@@ -101,6 +109,7 @@ function decodeXAddress(xAddress: string): {
test,
}
}
/* eslint-enable @typescript-eslint/naming-convention */
function isBufferForTestAddress(buf: Buffer): boolean {
const decodedPrefix = buf.slice(0, 2)

View File

@@ -5,6 +5,8 @@ type Sequence = number[] | Buffer | Uint8Array
*
* @param arr1 - One of the arrays to compare.
* @param arr2 - The other array to compare.
*
* @returns true if arguments are equal; false otherwise.
*/
export function seqEqual(arr1: Sequence, arr2: Sequence): boolean {
if (arr1.length !== arr2.length) {
@@ -23,9 +25,11 @@ export function seqEqual(arr1: Sequence, arr2: Sequence): boolean {
* Check whether a value is a sequence (e.g. Array of numbers).
*
* @param val - The value to check.
*
* @returns true if value is a Sequence; false otherwise.
*/
function isSequence(val: Sequence | number): val is Sequence {
return (val as Sequence).length !== undefined
return typeof val === 'object' && val.length !== undefined
}
/**

View File

@@ -7,20 +7,24 @@ import * as createHash from 'create-hash'
import { seqEqual, concatArgs } from './utils'
class Codec {
sha256: (bytes: Uint8Array) => Buffer
alphabet: string
codec: baseCodec.BaseConverter
base: number
interface Decoded {
version: number[]
bytes: Buffer
type: string | null
}
constructor(options: {
class Codec {
private readonly _sha256: (bytes: Uint8Array) => Buffer
private readonly _alphabet: string
private readonly _codec: baseCodec.BaseConverter
public constructor(options: {
sha256: (bytes: Uint8Array) => Buffer
alphabet: string
}) {
this.sha256 = options.sha256
this.alphabet = options.alphabet
this.codec = baseCodec(this.alphabet)
this.base = this.alphabet.length
this._sha256 = options.sha256
this._alphabet = options.alphabet
this._codec = baseCodec(this._alphabet)
}
/**
@@ -28,8 +32,10 @@ class Codec {
*
* @param bytes - Buffer of data to encode.
* @param opts - Options object including the version bytes and the expected length of the data to encode.
*
* @returns bytes encoded using options
*/
encode(
public encode(
bytes: Buffer,
opts: {
versions: number[]
@@ -40,29 +46,11 @@ class Codec {
return this.encodeVersioned(bytes, versions, opts.expectedLength)
}
encodeVersioned(
bytes: Buffer,
versions: number[],
expectedLength: number,
): string {
if (expectedLength && bytes.length !== expectedLength) {
throw new Error(
'unexpected_payload_length: bytes.length does not match expectedLength.' +
' Ensure that the bytes are a Buffer.',
)
}
return this.encodeChecked(Buffer.from(concatArgs(versions, bytes)))
}
encodeChecked(buffer: Buffer): string {
const check = this.sha256(this.sha256(buffer)).slice(0, 4)
public encodeChecked(buffer: Buffer): string {
const check = this._sha256(this._sha256(buffer)).slice(0, 4)
return this.encodeRaw(Buffer.from(concatArgs(buffer, check)))
}
encodeRaw(bytes: Buffer): string {
return this.codec.encode(bytes)
}
/**
* Decoder.
*
@@ -71,18 +59,14 @@ class Codec {
*/
/* eslint-disable max-lines-per-function --
* TODO refactor */
decode(
public decode(
base58string: string,
opts: {
versions: Array<number | number[]>
expectedLength?: number
versionTypes?: ['ed25519', 'secp256k1']
},
): {
version: number[]
bytes: Buffer
type: string | null
} {
): Decoded {
const versions = opts.versions
const types = opts.versionTypes
@@ -96,7 +80,7 @@ class Codec {
const versionLengthGuess =
typeof versions[0] === 'number' ? 1 : versions[0].length
const payloadLength =
opts.expectedLength || withoutSum.length - versionLengthGuess
opts.expectedLength ?? withoutSum.length - versionLengthGuess
const versionBytes = withoutSum.slice(0, -payloadLength)
const payload = withoutSum.slice(-payloadLength)
@@ -119,7 +103,7 @@ class Codec {
}
/* eslint-enable max-lines-per-function */
decodeChecked(base58string: string): Buffer {
public decodeChecked(base58string: string): Buffer {
const buffer = this.decodeRaw(base58string)
if (buffer.length < 5) {
throw new Error('invalid_input_size: decoded data must have length >= 5')
@@ -130,12 +114,30 @@ class Codec {
return buffer.slice(0, -4)
}
decodeRaw(base58string: string): Buffer {
return this.codec.decode(base58string)
private encodeVersioned(
bytes: Buffer,
versions: number[],
expectedLength: number,
): string {
if (expectedLength && bytes.length !== expectedLength) {
throw new Error(
'unexpected_payload_length: bytes.length does not match expectedLength.' +
' Ensure that the bytes are a Buffer.',
)
}
return this.encodeChecked(Buffer.from(concatArgs(versions, bytes)))
}
verifyCheckSum(bytes: Buffer): boolean {
const computed = this.sha256(this.sha256(bytes.slice(0, -4))).slice(0, 4)
private encodeRaw(bytes: Buffer): string {
return this._codec.encode(bytes)
}
private decodeRaw(base58string: string): Buffer {
return this._codec.decode(base58string)
}
private verifyCheckSum(bytes: Buffer): boolean {
const computed = this._sha256(this._sha256(bytes.slice(0, -4))).slice(0, 4)
const checksum = bytes.slice(-4)
return seqEqual(computed, checksum)
}
@@ -159,7 +161,7 @@ const NODE_PUBLIC = 0x1c
const ED25519_SEED = [0x01, 0xe1, 0x4b]
const codecOptions = {
sha256(bytes: Uint8Array) {
sha256(bytes: Uint8Array): Buffer {
return createHash('sha256').update(Buffer.from(bytes)).digest()
},
alphabet: 'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz',
@@ -200,7 +202,7 @@ export function decodeSeed(
versions: [ED25519_SEED, FAMILY_SEED],
expectedLength: 16,
},
) {
): Decoded {
return codecWithXrpAlphabet.decode(seed, opts)
}

View File

@@ -1,5 +1,11 @@
# ripple-binary-codec Release History
## 1.2.2 (2021-12-2)
- Fix issue where unsupported currency codes weren't being correctly processed
## 1.2.1 (2021-12-1)
- Fix issue where npm < 7 could not install the library
## 1.2.0 (2021-11-15)
- Converts ripple-binary-codec into a monorepo with ripple-address-codec,
ripple-keypairs, and xrpl

View File

@@ -1,6 +1,6 @@
{
"name": "ripple-binary-codec",
"version": "1.2.0",
"version": "1.2.2",
"description": "XRP Ledger binary codec",
"files": [
"dist/*",
@@ -17,7 +17,7 @@
"buffer": "5.6.0",
"create-hash": "^1.2.0",
"decimal.js": "^10.2.0",
"ripple-address-codec": "^4.2.0"
"ripple-address-codec": "^4.2.2"
},
"scripts": {
"build": "run-script-os",
@@ -40,7 +40,6 @@
"readmeFilename": "README.md",
"prettier": "@xrplf/prettier-config",
"engines": {
"node": ">=10.22.0",
"npm": ">=7.0.0"
"node": ">=10.22.0"
}
}

View File

@@ -66,6 +66,7 @@ function serializeObject(object: JsonObject, opts: OptionObject = {}): Buffer {
const filter = signingFieldsOnly
? (f: FieldInstance): boolean => f.isSigningField
: undefined
coreTypes.STObject.from(object, filter).toBytesSink(bytesList)
if (suffix) {

View File

@@ -1,6 +1,7 @@
import * as enums from './definitions.json'
import { SerializedType } from '../types/serialized-type'
import { Buffer } from 'buffer/'
import { BytesList } from '../binary'
const TYPE_WIDTH = 2
const LEDGER_ENTRY_WIDTH = 2
@@ -29,8 +30,8 @@ function fieldHeader(type: number, nth: number): Buffer {
/*
* @brief: Bytes, name, and ordinal representing one type, ledger_type, transaction type, or result
*/
class Bytes {
readonly bytes: Uint8Array
export class Bytes {
readonly bytes: Buffer
constructor(
readonly name: string,
@@ -47,7 +48,7 @@ class Bytes {
return this.name
}
toBytesSink(sink): void {
toBytesSink(sink: BytesList): void {
sink.put(this.bytes)
}

View File

@@ -126,7 +126,11 @@ class BinarySerializer {
* @param field field to write to BinarySerializer
* @param value value to write to BinarySerializer
*/
writeFieldAndValue(field: FieldInstance, value: SerializedType): void {
writeFieldAndValue(
field: FieldInstance,
value: SerializedType,
isUnlModifyWorkaround = false,
): void {
const associatedValue = field.associatedType.from(value)
assert.ok(associatedValue.toBytesSink !== undefined)
assert.ok(field.name !== undefined)
@@ -134,7 +138,7 @@ class BinarySerializer {
this.sink.put(field.header)
if (field.isVariableLengthEncoded) {
this.writeLengthEncoded(associatedValue)
this.writeLengthEncoded(associatedValue, isUnlModifyWorkaround)
} else {
associatedValue.toBytesSink(this.sink)
}
@@ -145,9 +149,15 @@ class BinarySerializer {
*
* @param value length encoded value to write to BytesList
*/
public writeLengthEncoded(value: SerializedType): void {
public writeLengthEncoded(
value: SerializedType,
isUnlModifyWorkaround = false,
): void {
const bytes = new BytesList()
value.toBytesSink(bytes)
if (!isUnlModifyWorkaround) {
// this part doesn't happen for the Account field in a UNLModify transaction
value.toBytesSink(bytes)
}
this.put(this.encodeVariableLength(bytes.getLength()))
this.writeBytesList(bytes)
}

View File

@@ -89,7 +89,7 @@ class Currency extends Hash160 {
if (this.bytes[0] !== 0) {
this._iso = null
} else if (code.toString('hex') === '000000') {
} else if (/^0*$/.test(this.bytes.toString('hex'))) {
this._iso = 'XRP'
} else {
this._iso = isoCodeFromHex(code)

View File

@@ -1,4 +1,4 @@
import { Field, FieldInstance } from '../enums'
import { Field, FieldInstance, Bytes } from '../enums'
import { SerializedType, JsonObject } from './serialized-type'
import { xAddressToClassicAddress, isValidXAddress } from 'ripple-address-codec'
import { BinaryParser } from '../serdes/binary-parser'
@@ -96,6 +96,8 @@ class STObject extends SerializedType {
const list: BytesList = new BytesList()
const bytes: BinarySerializer = new BinarySerializer(list)
let isUnlModify = false
const xAddressDecoded = Object.entries(value).reduce((acc, [key, val]) => {
let handled: JsonObject | undefined = undefined
if (val && isValidXAddress(val.toString())) {
@@ -125,8 +127,15 @@ class STObject extends SerializedType {
const associatedValue = field.associatedType.from(
xAddressDecoded[field.name],
)
bytes.writeFieldAndValue(field, associatedValue)
if ((associatedValue as unknown as Bytes).name === 'UNLModify') {
// triggered when the TransactionType field has a value of 'UNLModify'
isUnlModify = true
}
// true when in the UNLModify pseudotransaction (after the transaction type has been processed) and working with the
// Account field
// The Account field must not be a part of the UNLModify pseudotransaction encoding, due to a bug in rippled
const isUnlModifyWorkaround = field.name == 'Account' && isUnlModify
bytes.writeFieldAndValue(field, associatedValue, isUnlModifyWorkaround)
if (field.type.name === ST_OBJECT) {
bytes.put(OBJECT_END_MARKER_BYTE)
}

View File

@@ -1,12 +1,12 @@
{
"binary": "120066240000000026000003006840000000000000007300701321ED9D593004CC501CACD261BD8E31E863F2B3F6CA69505E7FD54DA8F5690BEFB7AE8114000000000000000000000000000000000000000000101101",
"binary": "120066240000000026040B52006840000000000000007300701321EDB6FC8E803EE8EDC2793F1EC917B2EE41D35255618DEB91D3F9B1FC89B75D4539810000101101",
"tx": {
"UNLModifyDisabling": 1,
"LedgerSequence": 768,
"UNLModifyValidator": "ED9D593004CC501CACD261BD8E31E863F2B3F6CA69505E7FD54DA8F5690BEFB7AE",
"LedgerSequence": 67850752,
"UNLModifyValidator": "EDB6FC8E803EE8EDC2793F1EC917B2EE41D35255618DEB91D3F9B1FC89B75D4539",
"TransactionType": "UNLModify",
"Account": "rrrrrrrrrrrrrrrrrrrrrhoLvTp",
"Sequence": 0,
"Fee": "0",
"SigningPubKey": ""}
}
}

View File

@@ -69,6 +69,7 @@ describe('Currency', function () {
expect(Currency.from('X8P').toJSON()).toBe('X8P')
expect(Currency.from('USD').toJSON()).toBe('USD')
})
test('can be constructed from a Buffer', function () {
const xrp = new Currency(Buffer.alloc(20))
expect(xrp.iso()).toBe('XRP')
@@ -77,6 +78,12 @@ describe('Currency', function () {
const currency = '015841551A748AD2C1F76FF6ECB0CCCD00000000'
expect(Currency.from(currency).toJSON()).toBe(currency)
})
test('Can handle other non-standard currency codes', () => {
const currency = '0000000000414C6F676F30330000000000000000'
expect(Currency.from(currency).toJSON()).toBe(currency)
})
test('throws on invalid reprs', function () {
expect(() => Currency.from(Buffer.alloc(19))).toThrow()
expect(() => Currency.from(1)).toThrow()

View File

@@ -1,5 +1,8 @@
# ripple-keypairs Release History
## 1.1.1 (2021-12-1)
- Fix issue where npm < 7 was not allowed to install the library
## 1.1.0 (2021-11-15)
- Converts ripple-keypairs into a monorepo with ripple-binary-codec,
ripple-address-codec, and xrpl. Changes to build tooling but no new features or

View File

@@ -1,6 +1,6 @@
{
"name": "ripple-keypairs",
"version": "1.1.0",
"version": "1.1.2",
"description": "Cryptographic key pairs for the XRP Ledger",
"scripts": {
"build": "tsc -b",
@@ -21,7 +21,7 @@
"brorand": "^1.0.5",
"elliptic": "^6.5.4",
"hash.js": "^1.0.3",
"ripple-address-codec": "^4.2.0"
"ripple-address-codec": "^4.2.2"
},
"repository": {
"type": "git",
@@ -30,7 +30,6 @@
"license": "ISC",
"prettier": "@xrplf/prettier-config",
"engines": {
"node": ">= 10",
"npm": ">=7.0.0"
"node": ">= 10"
}
}

View File

@@ -2,6 +2,13 @@
Subscribe to [the **xrpl-announce** mailing list](https://groups.google.com/g/xrpl-announce) for release announcements. We recommend that xrpl.js (ripple-lib) users stay up-to-date with the latest stable release.
## 2.0.3 (2021-12-1)
* Removes requirement for npm version > 7 for non-contributors
* Added a workaround for rippled UNLModify encoding bug (#1830)
* For contributors -
* Renamed the master branch to main, and now just have one main branch
* Fixed issues which made Windows contributors unable to build the library
## 2.0.2 (2021-11-15)
* Imports ripple-address-codec, ripple-binary-codec, and ripple-keypairs into
this repo. No new features or bug fixes

View File

@@ -1,6 +1,6 @@
{
"name": "xrpl",
"version": "2.0.2",
"version": "2.0.4",
"license": "ISC",
"description": "A TypeScript/JavaScript API for interacting with the XRP Ledger in Node.js and the browser",
"files": [
@@ -24,9 +24,9 @@
"bip39": "^3.0.4",
"https-proxy-agent": "^5.0.0",
"lodash": "^4.17.4",
"ripple-address-codec": "^4.2.0",
"ripple-binary-codec": "^1.2.0",
"ripple-keypairs": "^1.1.0",
"ripple-address-codec": "^4.2.2",
"ripple-binary-codec": "^1.2.2",
"ripple-keypairs": "^1.1.2",
"ws": "^8.2.2"
},
"devDependencies": {
@@ -64,7 +64,6 @@
},
"readmeFilename": "README.md",
"engines": {
"node": ">=10.13.0",
"npm": ">=7.14.0 <8.0.0"
"node": ">=10.13.0"
}
}