@xelis/sdk 0.9.1 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.parseData = void 0;
4
+ var lossless_json_1 = require("lossless-json");
5
+ // do not use JSON.parse() or we loose precision on big numbers
6
+ // for ex: the API returns the nonce as a number instead of a string and JSON.parse() is rounding the number because of overflow
7
+ // instead we will return any big number as a string and avoid precision loss
8
+ var parseData = function (data) {
9
+ return (0, lossless_json_1.parse)(data, null, function (value) {
10
+ if ((0, lossless_json_1.isSafeNumber)(value))
11
+ return parseFloat(value);
12
+ return value;
13
+ });
14
+ };
15
+ exports.parseData = parseData;
@@ -37,6 +37,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
37
37
  };
38
38
  exports.__esModule = true;
39
39
  exports.RPC = void 0;
40
+ var parse_data_1 = require("./parse_data");
40
41
  var RPC = /** @class */ (function () {
41
42
  function RPC(endpoint) {
42
43
  this.endpoint = endpoint;
@@ -44,7 +45,7 @@ var RPC = /** @class */ (function () {
44
45
  }
45
46
  RPC.prototype.post = function (method, params, headers) {
46
47
  return __awaiter(this, void 0, void 0, function () {
47
- var controller_1, body, timeoutId, res, data, err_1;
48
+ var controller_1, body, timeoutId, res, stringData, data, err_1;
48
49
  return __generator(this, function (_a) {
49
50
  switch (_a.label) {
50
51
  case 0:
@@ -66,9 +67,10 @@ var RPC = /** @class */ (function () {
66
67
  res = _a.sent();
67
68
  clearTimeout(timeoutId);
68
69
  if (!res.ok) return [3 /*break*/, 3];
69
- return [4 /*yield*/, res.json()];
70
+ return [4 /*yield*/, res.text()];
70
71
  case 2:
71
- data = _a.sent();
72
+ stringData = _a.sent();
73
+ data = (0, parse_data_1.parseData)(stringData);
72
74
  if (data.error) {
73
75
  return [2 /*return*/, Promise.reject(new Error(data.error.message))];
74
76
  }
@@ -42,6 +42,7 @@ exports.__esModule = true;
42
42
  exports.WS = void 0;
43
43
  var isomorphic_ws_1 = __importDefault(require("isomorphic-ws"));
44
44
  var await_to_js_1 = __importDefault(require("await-to-js"));
45
+ var parse_data_1 = require("./parse_data");
45
46
  var WS = /** @class */ (function () {
46
47
  function WS(options) {
47
48
  this.connectionTries = 0;
@@ -139,7 +140,7 @@ var WS = /** @class */ (function () {
139
140
  var id = _this.events[event].id;
140
141
  if (typeof msgEvent.data === "string") {
141
142
  try {
142
- var data = JSON.parse(msgEvent.data);
143
+ var data = (0, parse_data_1.parseData)(msgEvent.data);
143
144
  if (data.id === id) {
144
145
  if (data.error) {
145
146
  onData(msgEvent, undefined, new Error(data.error.message));
@@ -230,7 +231,7 @@ var WS = /** @class */ (function () {
230
231
  var timeoutId = null;
231
232
  var onMessage = function (msgEvent) {
232
233
  if (typeof msgEvent.data === "string") {
233
- var data = JSON.parse(msgEvent.data);
234
+ var data = (0, parse_data_1.parseData)(msgEvent.data);
234
235
  if (data.id === requestMethod.id) {
235
236
  clearTimeout(timeoutId);
236
237
  _this.socket && _this.socket.removeEventListener("message", onMessage);
@@ -0,0 +1,11 @@
1
+ import { parse, isSafeNumber } from 'lossless-json';
2
+ // do not use JSON.parse() or we loose precision on big numbers
3
+ // for ex: the API returns the nonce as a number instead of a string and JSON.parse() is rounding the number because of overflow
4
+ // instead we will return any big number as a string and avoid precision loss
5
+ export var parseData = function (data) {
6
+ return parse(data, null, function (value) {
7
+ if (isSafeNumber(value))
8
+ return parseFloat(value);
9
+ return value;
10
+ });
11
+ };
@@ -34,6 +34,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
34
34
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
35
  }
36
36
  };
37
+ import { parseData } from './parse_data.js';
37
38
  var RPC = /** @class */ (function () {
38
39
  function RPC(endpoint) {
39
40
  this.endpoint = endpoint;
@@ -41,7 +42,7 @@ var RPC = /** @class */ (function () {
41
42
  }
42
43
  RPC.prototype.post = function (method, params, headers) {
43
44
  return __awaiter(this, void 0, void 0, function () {
44
- var controller_1, body, timeoutId, res, data, err_1;
45
+ var controller_1, body, timeoutId, res, stringData, data, err_1;
45
46
  return __generator(this, function (_a) {
46
47
  switch (_a.label) {
47
48
  case 0:
@@ -63,9 +64,10 @@ var RPC = /** @class */ (function () {
63
64
  res = _a.sent();
64
65
  clearTimeout(timeoutId);
65
66
  if (!res.ok) return [3 /*break*/, 3];
66
- return [4 /*yield*/, res.json()];
67
+ return [4 /*yield*/, res.text()];
67
68
  case 2:
68
- data = _a.sent();
69
+ stringData = _a.sent();
70
+ data = parseData(stringData);
69
71
  if (data.error) {
70
72
  return [2 /*return*/, Promise.reject(new Error(data.error.message))];
71
73
  }
@@ -36,6 +36,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
36
36
  };
37
37
  import WebSocket from 'isomorphic-ws';
38
38
  import to from 'await-to-js';
39
+ import { parseData } from './parse_data.js';
39
40
  var WS = /** @class */ (function () {
40
41
  function WS(options) {
41
42
  this.connectionTries = 0;
@@ -133,7 +134,7 @@ var WS = /** @class */ (function () {
133
134
  var id = _this.events[event].id;
134
135
  if (typeof msgEvent.data === "string") {
135
136
  try {
136
- var data = JSON.parse(msgEvent.data);
137
+ var data = parseData(msgEvent.data);
137
138
  if (data.id === id) {
138
139
  if (data.error) {
139
140
  onData(msgEvent, undefined, new Error(data.error.message));
@@ -224,7 +225,7 @@ var WS = /** @class */ (function () {
224
225
  var timeoutId = null;
225
226
  var onMessage = function (msgEvent) {
226
227
  if (typeof msgEvent.data === "string") {
227
- var data = JSON.parse(msgEvent.data);
228
+ var data = parseData(msgEvent.data);
228
229
  if (data.id === requestMethod.id) {
229
230
  clearTimeout(timeoutId);
230
231
  _this.socket && _this.socket.removeEventListener("message", onMessage);
@@ -30,7 +30,7 @@ export interface Block {
30
30
  tips: string[];
31
31
  timestamp: number;
32
32
  height: number;
33
- nonce: number;
33
+ nonce: string;
34
34
  extra_nonce: string;
35
35
  miner: string;
36
36
  txs_hashes: string[];
@@ -0,0 +1 @@
1
+ export declare const parseData: (data: string) => unknown;
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.9.1",
2
+ "version": "0.9.2",
3
3
  "name": "@xelis/sdk",
4
4
  "description": "Xelis software development kit for JS",
5
5
  "exports": {
@@ -36,6 +36,7 @@
36
36
  "await-to-js": "^3.0.0",
37
37
  "isomorphic-ws": "^5.0.0",
38
38
  "js-base64": "^3.7.6",
39
+ "lossless-json": "^4.0.1",
39
40
  "react": "^18.2.0",
40
41
  "ws": "^8.12.1"
41
42
  }