@ledgerhq/coin-casper 1.4.1 → 1.5.0-next.0

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @ledgerhq/coin-casper
2
2
 
3
+ ## 1.5.0-next.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#9364](https://github.com/LedgerHQ/ledger-live/pull/9364) [`cb74786`](https://github.com/LedgerHQ/ledger-live/commit/cb74786fe27bfe894317965ddb2a11744a86eaef) Thanks [@lawRathod](https://github.com/lawRathod)! - Fixes error handling on casper api
8
+
9
+ - [#9472](https://github.com/LedgerHQ/ledger-live/pull/9472) [`9c4c82e`](https://github.com/LedgerHQ/ledger-live/commit/9c4c82e8e81aaadfc1132f0a25812be094e54453) Thanks [@KVNLS](https://github.com/KVNLS)! - Fix elliptic library version used
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies [[`5abde51`](https://github.com/LedgerHQ/ledger-live/commit/5abde5192d32f493ece2f99aec0e2de0c411f9e5), [`cc00249`](https://github.com/LedgerHQ/ledger-live/commit/cc002495f3e107aba283a3aa4abca90954de6d76)]:
14
+ - @ledgerhq/types-live@6.63.0-next.0
15
+ - @ledgerhq/coin-framework@2.3.0-next.0
16
+
3
17
  ## 1.4.1
4
18
 
5
19
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,yBAAyB,EAEzB,eAAe,EACf,eAAe,EAEf,sBAAsB,EAIvB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAgB,MAAM,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAoEjE,eAAO,MAAM,qBAAqB,cACrB,MAAM;eAEN,MAAM,GAAG,SAAS;iBAChB,MAAM,GAAG,SAAS;EAwBhC,CAAC;AAEF,eAAO,MAAM,YAAY,cAAqB,MAAM,KAAG,QAAQ,eAAe,CAmB7E,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAa,QAAQ,sBAAsB,CAUzE,CAAC;AAEF,eAAO,MAAM,QAAQ,SAAgB,MAAM,KAAG,QAAQ,eAAe,EAAE,CAKtE,CAAC;AAEF,eAAO,MAAM,WAAW,WACd,WAAW,MAAM,KACxB,QAAQ,yBAAyB,CASnC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,yBAAyB,EAEzB,eAAe,EACf,eAAe,EAEf,sBAAsB,EAIvB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAgB,MAAM,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AA2EjE,eAAO,MAAM,qBAAqB,cACrB,MAAM,KAChB,QAAQ;IACT,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC,CAiCA,CAAC;AAEF,eAAO,MAAM,YAAY,cAAqB,MAAM,KAAG,QAAQ,eAAe,CAmB7E,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAa,QAAQ,sBAAsB,CAUzE,CAAC;AAEF,eAAO,MAAM,QAAQ,SAAgB,MAAM,KAAG,QAAQ,eAAe,EAAE,CAkBtE,CAAC;AAEF,eAAO,MAAM,WAAW,WACd,WAAW,MAAM,KACxB,QAAQ,yBAAyB,CASnC,CAAC"}
package/lib/api/index.js CHANGED
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.broadcastTx = exports.fetchTxs = exports.fetchNetworkStatus = exports.fetchBalance = exports.fetchAccountStateInfo = void 0;
7
7
  const logs_1 = require("@ledgerhq/logs");
8
- const network_1 = __importDefault(require("@ledgerhq/live-network/network"));
8
+ const live_network_1 = __importDefault(require("@ledgerhq/live-network"));
9
9
  const casper_js_sdk_1 = require("casper-js-sdk");
10
10
  const live_env_1 = require("@ledgerhq/live-env");
11
11
  const getCasperIndexerURL = (path) => {
@@ -22,63 +22,84 @@ const getCasperNodeURL = () => {
22
22
  };
23
23
  const casperIndexerWrapper = async (path) => {
24
24
  const url = getCasperIndexerURL(path);
25
- const getResponse = async (page) => {
26
- // We force data to this way as network func is not using the correct param type. Changing that func will generate errors in other implementations
27
- const opts = {
25
+ try {
26
+ const rawResponse = await (0, live_network_1.default)({
28
27
  method: "GET",
29
- url: `${url}?limit=100&page=${page}`,
30
- };
31
- const rawResponse = await (0, network_1.default)(opts);
32
- // We force data to this way as network func is not using the correct param type. Changing that func will generate errors in other implementations
33
- const { data } = rawResponse;
28
+ url,
29
+ });
30
+ (0, logs_1.log)("http", url);
31
+ const { data, status } = rawResponse;
32
+ if (status >= 300) {
33
+ (0, logs_1.log)("http", url, data);
34
+ }
34
35
  return data;
35
- };
36
- let page = 1;
37
- const res = [];
38
- const data = await getResponse(page);
39
- const { pageCount } = data;
40
- res.push(...data.data);
41
- while (page <= pageCount) {
42
- page++;
43
- const data = await getResponse(page);
44
- res.push(...data.data);
45
36
  }
46
- (0, logs_1.log)("http", url);
47
- return res;
37
+ catch (error) {
38
+ (0, logs_1.log)("error", "Casper indexer error: ", error);
39
+ throw error;
40
+ }
48
41
  };
49
42
  const casperNodeWrapper = async (payload) => {
50
43
  const url = getCasperNodeURL();
51
- // We force data to this way as network func is not using the correct param type. Changing that func will generate errors in other implementations
52
- const opts = {
53
- method: "POST",
54
- url,
55
- data: payload,
56
- };
57
- const rawResponse = await (0, network_1.default)(opts);
58
- // We force data to this way as network func is not using the correct param type. Changing that func will generate errors in other implementations
59
- const { data } = rawResponse;
60
- (0, logs_1.log)("http", url);
61
- return data.result;
44
+ try {
45
+ const rawResponse = await (0, live_network_1.default)({
46
+ method: "POST",
47
+ url,
48
+ data: payload,
49
+ });
50
+ (0, logs_1.log)("http", `${url} - ${payload.method}`);
51
+ const { data, status } = rawResponse;
52
+ if (status >= 300) {
53
+ (0, logs_1.log)("http", `${url} - Status: ${status}`, data);
54
+ throw new Error(`HTTP error: ${status}`);
55
+ }
56
+ if (data.error) {
57
+ const errorMessage = data.error.message + ". " + data.error.data || "Unknown error";
58
+ (0, logs_1.log)("http", `${payload.method} - ${errorMessage}`);
59
+ throw new Error(`Casper node error: ${errorMessage}`);
60
+ }
61
+ if (!data.result) {
62
+ throw new Error(`Casper node returned no result for method: ${payload.method}`);
63
+ }
64
+ return data.result;
65
+ }
66
+ catch (error) {
67
+ (0, logs_1.log)("error", `Failed to execute ${payload.method}`, error);
68
+ throw error instanceof Error
69
+ ? error
70
+ : new Error(`Unknown error during Casper node request: ${String(error)}`);
71
+ }
62
72
  };
63
73
  const fetchAccountStateInfo = async (publicKey) => {
64
- const accountStateInfo = await casperNodeWrapper({
65
- jsonrpc: "2.0",
66
- method: "state_get_account_info",
67
- params: {
68
- public_key: publicKey,
69
- },
70
- id: 1,
71
- });
72
- if (!accountStateInfo) {
73
- return {
74
- purseUref: undefined,
75
- accountHash: undefined,
76
- };
74
+ try {
75
+ const accountStateInfo = await casperNodeWrapper({
76
+ jsonrpc: "2.0",
77
+ method: "state_get_account_info",
78
+ params: {
79
+ public_key: publicKey,
80
+ },
81
+ id: 1,
82
+ });
83
+ if (!accountStateInfo) {
84
+ return {
85
+ purseUref: undefined,
86
+ accountHash: undefined,
87
+ };
88
+ }
89
+ const accountHash = accountStateInfo.account.account_hash.split("-")[2];
90
+ const purseURefString = accountStateInfo.account.main_purse.split("-")[1];
91
+ const uRef = new casper_js_sdk_1.CLURef(Buffer.from(purseURefString, "hex"), casper_js_sdk_1.AccessRights.READ_ADD_WRITE);
92
+ return { purseUref: uRef, accountHash };
93
+ }
94
+ catch (error) {
95
+ if (error instanceof Error && error.message.includes("ValueNotFound")) {
96
+ return {
97
+ purseUref: undefined,
98
+ accountHash: undefined,
99
+ };
100
+ }
101
+ throw error;
77
102
  }
78
- const accountHash = accountStateInfo.account.account_hash.split("-")[2];
79
- const purseURefString = accountStateInfo.account.main_purse.split("-")[1];
80
- const uRef = new casper_js_sdk_1.CLURef(Buffer.from(purseURefString, "hex"), casper_js_sdk_1.AccessRights.READ_ADD_WRITE);
81
- return { purseUref: uRef, accountHash };
82
103
  };
83
104
  exports.fetchAccountStateInfo = fetchAccountStateInfo;
84
105
  const fetchBalance = async (purseUref) => {
@@ -112,8 +133,17 @@ const fetchNetworkStatus = async () => {
112
133
  };
113
134
  exports.fetchNetworkStatus = fetchNetworkStatus;
114
135
  const fetchTxs = async (addr) => {
115
- const response = await casperIndexerWrapper(`/accounts/${addr}/ledgerlive-deploys`);
116
- return response;
136
+ let page = 1;
137
+ let res = [];
138
+ const limit = 100;
139
+ let response = await casperIndexerWrapper(`/accounts/${addr}/ledgerlive-deploys?limit=${limit}&page=${page}`);
140
+ res = res.concat(response.data);
141
+ while (response.pageCount > page) {
142
+ page++;
143
+ response = await casperIndexerWrapper(`/accounts/${addr}/ledgerlive-deploys?limit=${limit}&page=${page}`);
144
+ res = res.concat(response.data);
145
+ }
146
+ return res;
117
147
  };
118
148
  exports.fetchTxs = fetchTxs;
119
149
  const broadcastTx = async (deploy) => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.unit.test.d.ts","sourceRoot":"","sources":["../../src/api/index.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const abandonseed_1 = require("@ledgerhq/cryptoassets/abandonseed");
4
+ const _1 = require(".");
5
+ const pubkey = "0202664e3958608cd8dc2b80d4c73f18f76ef197f1cccca2f4f817c70bb050b248bd";
6
+ const pubkeyAbandon = (0, abandonseed_1.getAbandonSeedAddress)("casper");
7
+ describe("Casper API", () => {
8
+ it("should be able to fetch the network status", async () => {
9
+ const status = await (0, _1.fetchNetworkStatus)();
10
+ expect(status).toBeDefined();
11
+ });
12
+ it("shouldn't fetch account state info if account doesn't exist", async () => {
13
+ const accountStateInfo = await (0, _1.fetchAccountStateInfo)(pubkeyAbandon);
14
+ expect(accountStateInfo).toEqual({
15
+ purseUref: undefined,
16
+ accountHash: undefined,
17
+ });
18
+ });
19
+ it("should fetch account state info if account exists", async () => {
20
+ const accountStateInfo = await (0, _1.fetchAccountStateInfo)(pubkey);
21
+ expect(accountStateInfo.purseUref).toBeDefined();
22
+ expect(accountStateInfo.accountHash).toBeDefined();
23
+ });
24
+ it("should fetch balance", async () => {
25
+ const accountStateInfo = await (0, _1.fetchAccountStateInfo)(pubkey);
26
+ expect(accountStateInfo.purseUref).toBeDefined();
27
+ if (!accountStateInfo.purseUref) {
28
+ throw new Error("Purse Uref is undefined");
29
+ }
30
+ const balance = await (0, _1.fetchBalance)(accountStateInfo.purseUref);
31
+ expect(balance).toBeDefined();
32
+ });
33
+ it("should fetch txs", async () => {
34
+ const txs = await (0, _1.fetchTxs)(pubkey);
35
+ expect(txs).toBeDefined();
36
+ expect(txs.length).toBeGreaterThan(0);
37
+ });
38
+ it("should fetch txs for abandon seed address", async () => {
39
+ const txs = await (0, _1.fetchTxs)(pubkeyAbandon);
40
+ expect(txs).toBeDefined();
41
+ expect(txs.length).toBe(0);
42
+ });
43
+ });
44
+ //# sourceMappingURL=index.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.unit.test.js","sourceRoot":"","sources":["../../src/api/index.unit.test.ts"],"names":[],"mappings":";;AAAA,oEAA2E;AAC3E,wBAAsF;AAEtF,MAAM,MAAM,GAAG,sEAAsE,CAAC;AACtF,MAAM,aAAa,GAAG,IAAA,mCAAqB,EAAC,QAAQ,CAAC,CAAC;AAEtD,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAkB,GAAE,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,gBAAgB,GAAG,MAAM,IAAA,wBAAqB,EAAC,aAAa,CAAC,CAAC;QACpE,MAAM,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC;YAC/B,SAAS,EAAE,SAAS;YACpB,WAAW,EAAE,SAAS;SACvB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,gBAAgB,GAAG,MAAM,IAAA,wBAAqB,EAAC,MAAM,CAAC,CAAC;QAC7D,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,gBAAgB,GAAG,MAAM,IAAA,wBAAqB,EAAC,MAAM,CAAC,CAAC;QAE7D,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAA,eAAY,EAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC/D,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QAChC,MAAM,GAAG,GAAG,MAAM,IAAA,WAAQ,EAAC,MAAM,CAAC,CAAC;QAEnC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,GAAG,GAAG,MAAM,IAAA,WAAQ,EAAC,aAAa,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -48,7 +48,12 @@ export interface ITxnHistoryData {
48
48
  export interface NodeResponseRoot<T> {
49
49
  jsonrpc: string;
50
50
  id: string;
51
- result: T;
51
+ result?: T;
52
+ error?: {
53
+ code: number;
54
+ message: string;
55
+ data: string;
56
+ };
52
57
  }
53
58
  export interface NNetworkStatusResponse {
54
59
  api_version: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"broadcast.d.ts","sourceRoot":"","sources":["../../src/bridge/broadcast.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGvC,eAAO,MAAM,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,WAAW,CAW7D,CAAC"}
1
+ {"version":3,"file":"broadcast.d.ts","sourceRoot":"","sources":["../../src/bridge/broadcast.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAIvC,eAAO,MAAM,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,WAAW,CAY7D,CAAC"}
@@ -1,12 +1,17 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.broadcast = void 0;
4
7
  const casper_js_sdk_1 = require("casper-js-sdk");
5
8
  const operation_1 = require("@ledgerhq/coin-framework/operation");
6
9
  const api_1 = require("../api");
10
+ const invariant_1 = __importDefault(require("invariant"));
7
11
  const broadcast = async ({ signedOperation: { signature, operation }, }) => {
8
12
  const tx = casper_js_sdk_1.DeployUtil.deployFromJson(JSON.parse(signature)).unwrap();
9
13
  const resp = await (0, api_1.broadcastTx)(tx);
14
+ (0, invariant_1.default)(resp.deploy_hash, "casper: failed to broadcast transaction and get deploy hash");
10
15
  const { deploy_hash } = resp;
11
16
  const result = (0, operation_1.patchOperationWithHash)(operation, deploy_hash);
12
17
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"broadcast.js","sourceRoot":"","sources":["../../src/bridge/broadcast.ts"],"names":[],"mappings":";;;AAAA,iDAA2C;AAE3C,kEAA4E;AAE5E,gCAAqC;AAE9B,MAAM,SAAS,GAA4C,KAAK,EAAE,EACvE,eAAe,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAC1C,EAAE,EAAE;IACH,MAAM,EAAE,GAAG,0BAAU,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAErE,MAAM,IAAI,GAAG,MAAM,IAAA,iBAAW,EAAC,EAAE,CAAC,CAAC;IACnC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAE7B,MAAM,MAAM,GAAG,IAAA,kCAAsB,EAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAE9D,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAXW,QAAA,SAAS,aAWpB"}
1
+ {"version":3,"file":"broadcast.js","sourceRoot":"","sources":["../../src/bridge/broadcast.ts"],"names":[],"mappings":";;;;;;AAAA,iDAA2C;AAE3C,kEAA4E;AAE5E,gCAAqC;AACrC,0DAAkC;AAE3B,MAAM,SAAS,GAA4C,KAAK,EAAE,EACvE,eAAe,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAC1C,EAAE,EAAE;IACH,MAAM,EAAE,GAAG,0BAAU,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAErE,MAAM,IAAI,GAAG,MAAM,IAAA,iBAAW,EAAC,EAAE,CAAC,CAAC;IACnC,IAAA,mBAAS,EAAC,IAAI,CAAC,WAAW,EAAE,6DAA6D,CAAC,CAAC;IAC3F,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAE7B,MAAM,MAAM,GAAG,IAAA,kCAAsB,EAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAE9D,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAZW,QAAA,SAAS,aAYpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,yBAAyB,EAEzB,eAAe,EACf,eAAe,EAEf,sBAAsB,EAIvB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAgB,MAAM,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAoEjE,eAAO,MAAM,qBAAqB,cACrB,MAAM;eAEN,MAAM,GAAG,SAAS;iBAChB,MAAM,GAAG,SAAS;EAwBhC,CAAC;AAEF,eAAO,MAAM,YAAY,cAAqB,MAAM,KAAG,QAAQ,eAAe,CAmB7E,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAa,QAAQ,sBAAsB,CAUzE,CAAC;AAEF,eAAO,MAAM,QAAQ,SAAgB,MAAM,KAAG,QAAQ,eAAe,EAAE,CAKtE,CAAC;AAEF,eAAO,MAAM,WAAW,WACd,WAAW,MAAM,KACxB,QAAQ,yBAAyB,CASnC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,yBAAyB,EAEzB,eAAe,EACf,eAAe,EAEf,sBAAsB,EAIvB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAgB,MAAM,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AA2EjE,eAAO,MAAM,qBAAqB,cACrB,MAAM,KAChB,QAAQ;IACT,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC,CAiCA,CAAC;AAEF,eAAO,MAAM,YAAY,cAAqB,MAAM,KAAG,QAAQ,eAAe,CAmB7E,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAa,QAAQ,sBAAsB,CAUzE,CAAC;AAEF,eAAO,MAAM,QAAQ,SAAgB,MAAM,KAAG,QAAQ,eAAe,EAAE,CAkBtE,CAAC;AAEF,eAAO,MAAM,WAAW,WACd,WAAW,MAAM,KACxB,QAAQ,yBAAyB,CASnC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { log } from "@ledgerhq/logs";
2
- import network from "@ledgerhq/live-network/network";
2
+ import network from "@ledgerhq/live-network";
3
3
  import { AccessRights, CLURef, DeployUtil } from "casper-js-sdk";
4
4
  import { getEnv } from "@ledgerhq/live-env";
5
5
  const getCasperIndexerURL = (path) => {
@@ -16,63 +16,84 @@ const getCasperNodeURL = () => {
16
16
  };
17
17
  const casperIndexerWrapper = async (path) => {
18
18
  const url = getCasperIndexerURL(path);
19
- const getResponse = async (page) => {
20
- // We force data to this way as network func is not using the correct param type. Changing that func will generate errors in other implementations
21
- const opts = {
19
+ try {
20
+ const rawResponse = await network({
22
21
  method: "GET",
23
- url: `${url}?limit=100&page=${page}`,
24
- };
25
- const rawResponse = await network(opts);
26
- // We force data to this way as network func is not using the correct param type. Changing that func will generate errors in other implementations
27
- const { data } = rawResponse;
22
+ url,
23
+ });
24
+ log("http", url);
25
+ const { data, status } = rawResponse;
26
+ if (status >= 300) {
27
+ log("http", url, data);
28
+ }
28
29
  return data;
29
- };
30
- let page = 1;
31
- const res = [];
32
- const data = await getResponse(page);
33
- const { pageCount } = data;
34
- res.push(...data.data);
35
- while (page <= pageCount) {
36
- page++;
37
- const data = await getResponse(page);
38
- res.push(...data.data);
39
30
  }
40
- log("http", url);
41
- return res;
31
+ catch (error) {
32
+ log("error", "Casper indexer error: ", error);
33
+ throw error;
34
+ }
42
35
  };
43
36
  const casperNodeWrapper = async (payload) => {
44
37
  const url = getCasperNodeURL();
45
- // We force data to this way as network func is not using the correct param type. Changing that func will generate errors in other implementations
46
- const opts = {
47
- method: "POST",
48
- url,
49
- data: payload,
50
- };
51
- const rawResponse = await network(opts);
52
- // We force data to this way as network func is not using the correct param type. Changing that func will generate errors in other implementations
53
- const { data } = rawResponse;
54
- log("http", url);
55
- return data.result;
38
+ try {
39
+ const rawResponse = await network({
40
+ method: "POST",
41
+ url,
42
+ data: payload,
43
+ });
44
+ log("http", `${url} - ${payload.method}`);
45
+ const { data, status } = rawResponse;
46
+ if (status >= 300) {
47
+ log("http", `${url} - Status: ${status}`, data);
48
+ throw new Error(`HTTP error: ${status}`);
49
+ }
50
+ if (data.error) {
51
+ const errorMessage = data.error.message + ". " + data.error.data || "Unknown error";
52
+ log("http", `${payload.method} - ${errorMessage}`);
53
+ throw new Error(`Casper node error: ${errorMessage}`);
54
+ }
55
+ if (!data.result) {
56
+ throw new Error(`Casper node returned no result for method: ${payload.method}`);
57
+ }
58
+ return data.result;
59
+ }
60
+ catch (error) {
61
+ log("error", `Failed to execute ${payload.method}`, error);
62
+ throw error instanceof Error
63
+ ? error
64
+ : new Error(`Unknown error during Casper node request: ${String(error)}`);
65
+ }
56
66
  };
57
67
  export const fetchAccountStateInfo = async (publicKey) => {
58
- const accountStateInfo = await casperNodeWrapper({
59
- jsonrpc: "2.0",
60
- method: "state_get_account_info",
61
- params: {
62
- public_key: publicKey,
63
- },
64
- id: 1,
65
- });
66
- if (!accountStateInfo) {
67
- return {
68
- purseUref: undefined,
69
- accountHash: undefined,
70
- };
68
+ try {
69
+ const accountStateInfo = await casperNodeWrapper({
70
+ jsonrpc: "2.0",
71
+ method: "state_get_account_info",
72
+ params: {
73
+ public_key: publicKey,
74
+ },
75
+ id: 1,
76
+ });
77
+ if (!accountStateInfo) {
78
+ return {
79
+ purseUref: undefined,
80
+ accountHash: undefined,
81
+ };
82
+ }
83
+ const accountHash = accountStateInfo.account.account_hash.split("-")[2];
84
+ const purseURefString = accountStateInfo.account.main_purse.split("-")[1];
85
+ const uRef = new CLURef(Buffer.from(purseURefString, "hex"), AccessRights.READ_ADD_WRITE);
86
+ return { purseUref: uRef, accountHash };
87
+ }
88
+ catch (error) {
89
+ if (error instanceof Error && error.message.includes("ValueNotFound")) {
90
+ return {
91
+ purseUref: undefined,
92
+ accountHash: undefined,
93
+ };
94
+ }
95
+ throw error;
71
96
  }
72
- const accountHash = accountStateInfo.account.account_hash.split("-")[2];
73
- const purseURefString = accountStateInfo.account.main_purse.split("-")[1];
74
- const uRef = new CLURef(Buffer.from(purseURefString, "hex"), AccessRights.READ_ADD_WRITE);
75
- return { purseUref: uRef, accountHash };
76
97
  };
77
98
  export const fetchBalance = async (purseUref) => {
78
99
  const stateRootInfo = await casperNodeWrapper({
@@ -103,8 +124,17 @@ export const fetchNetworkStatus = async () => {
103
124
  return data;
104
125
  };
105
126
  export const fetchTxs = async (addr) => {
106
- const response = await casperIndexerWrapper(`/accounts/${addr}/ledgerlive-deploys`);
107
- return response;
127
+ let page = 1;
128
+ let res = [];
129
+ const limit = 100;
130
+ let response = await casperIndexerWrapper(`/accounts/${addr}/ledgerlive-deploys?limit=${limit}&page=${page}`);
131
+ res = res.concat(response.data);
132
+ while (response.pageCount > page) {
133
+ page++;
134
+ response = await casperIndexerWrapper(`/accounts/${addr}/ledgerlive-deploys?limit=${limit}&page=${page}`);
135
+ res = res.concat(response.data);
136
+ }
137
+ return res;
108
138
  };
109
139
  export const broadcastTx = async (deploy) => {
110
140
  const response = await casperNodeWrapper({
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.unit.test.d.ts","sourceRoot":"","sources":["../../src/api/index.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,42 @@
1
+ import { getAbandonSeedAddress } from "@ledgerhq/cryptoassets/abandonseed";
2
+ import { fetchAccountStateInfo, fetchBalance, fetchNetworkStatus, fetchTxs } from ".";
3
+ const pubkey = "0202664e3958608cd8dc2b80d4c73f18f76ef197f1cccca2f4f817c70bb050b248bd";
4
+ const pubkeyAbandon = getAbandonSeedAddress("casper");
5
+ describe("Casper API", () => {
6
+ it("should be able to fetch the network status", async () => {
7
+ const status = await fetchNetworkStatus();
8
+ expect(status).toBeDefined();
9
+ });
10
+ it("shouldn't fetch account state info if account doesn't exist", async () => {
11
+ const accountStateInfo = await fetchAccountStateInfo(pubkeyAbandon);
12
+ expect(accountStateInfo).toEqual({
13
+ purseUref: undefined,
14
+ accountHash: undefined,
15
+ });
16
+ });
17
+ it("should fetch account state info if account exists", async () => {
18
+ const accountStateInfo = await fetchAccountStateInfo(pubkey);
19
+ expect(accountStateInfo.purseUref).toBeDefined();
20
+ expect(accountStateInfo.accountHash).toBeDefined();
21
+ });
22
+ it("should fetch balance", async () => {
23
+ const accountStateInfo = await fetchAccountStateInfo(pubkey);
24
+ expect(accountStateInfo.purseUref).toBeDefined();
25
+ if (!accountStateInfo.purseUref) {
26
+ throw new Error("Purse Uref is undefined");
27
+ }
28
+ const balance = await fetchBalance(accountStateInfo.purseUref);
29
+ expect(balance).toBeDefined();
30
+ });
31
+ it("should fetch txs", async () => {
32
+ const txs = await fetchTxs(pubkey);
33
+ expect(txs).toBeDefined();
34
+ expect(txs.length).toBeGreaterThan(0);
35
+ });
36
+ it("should fetch txs for abandon seed address", async () => {
37
+ const txs = await fetchTxs(pubkeyAbandon);
38
+ expect(txs).toBeDefined();
39
+ expect(txs.length).toBe(0);
40
+ });
41
+ });
42
+ //# sourceMappingURL=index.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.unit.test.js","sourceRoot":"","sources":["../../src/api/index.unit.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC;AAEtF,MAAM,MAAM,GAAG,sEAAsE,CAAC;AACtF,MAAM,aAAa,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AAEtD,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,gBAAgB,GAAG,MAAM,qBAAqB,CAAC,aAAa,CAAC,CAAC;QACpE,MAAM,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC;YAC/B,SAAS,EAAE,SAAS;YACpB,WAAW,EAAE,SAAS;SACvB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,gBAAgB,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC7D,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,gBAAgB,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAE7D,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC/D,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QAChC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEnC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -48,7 +48,12 @@ export interface ITxnHistoryData {
48
48
  export interface NodeResponseRoot<T> {
49
49
  jsonrpc: string;
50
50
  id: string;
51
- result: T;
51
+ result?: T;
52
+ error?: {
53
+ code: number;
54
+ message: string;
55
+ data: string;
56
+ };
52
57
  }
53
58
  export interface NNetworkStatusResponse {
54
59
  api_version: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"broadcast.d.ts","sourceRoot":"","sources":["../../src/bridge/broadcast.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGvC,eAAO,MAAM,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,WAAW,CAW7D,CAAC"}
1
+ {"version":3,"file":"broadcast.d.ts","sourceRoot":"","sources":["../../src/bridge/broadcast.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAIvC,eAAO,MAAM,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,WAAW,CAY7D,CAAC"}
@@ -1,9 +1,11 @@
1
1
  import { DeployUtil } from "casper-js-sdk";
2
2
  import { patchOperationWithHash } from "@ledgerhq/coin-framework/operation";
3
3
  import { broadcastTx } from "../api";
4
+ import invariant from "invariant";
4
5
  export const broadcast = async ({ signedOperation: { signature, operation }, }) => {
5
6
  const tx = DeployUtil.deployFromJson(JSON.parse(signature)).unwrap();
6
7
  const resp = await broadcastTx(tx);
8
+ invariant(resp.deploy_hash, "casper: failed to broadcast transaction and get deploy hash");
7
9
  const { deploy_hash } = resp;
8
10
  const result = patchOperationWithHash(operation, deploy_hash);
9
11
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"broadcast.js","sourceRoot":"","sources":["../../src/bridge/broadcast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,MAAM,CAAC,MAAM,SAAS,GAA4C,KAAK,EAAE,EACvE,eAAe,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAC1C,EAAE,EAAE;IACH,MAAM,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAErE,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAE7B,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAE9D,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
1
+ {"version":3,"file":"broadcast.js","sourceRoot":"","sources":["../../src/bridge/broadcast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,SAAS,MAAM,WAAW,CAAC;AAElC,MAAM,CAAC,MAAM,SAAS,GAA4C,KAAK,EAAE,EACvE,eAAe,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAC1C,EAAE,EAAE;IACH,MAAM,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAErE,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;IACnC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,6DAA6D,CAAC,CAAC;IAC3F,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAE7B,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAE9D,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/coin-casper",
3
- "version": "1.4.1",
3
+ "version": "1.5.0-next.0",
4
4
  "description": "Ledger Casper integration",
5
5
  "keywords": [
6
6
  "Ledger",
@@ -91,14 +91,14 @@
91
91
  "casper-js-sdk": "^2.15.4",
92
92
  "blakejs": "^1.2.1",
93
93
  "rxjs": "^7.8.1",
94
+ "@ledgerhq/coin-framework": "^2.3.0-next.0",
94
95
  "@ledgerhq/cryptoassets": "^13.13.0",
95
- "@ledgerhq/coin-framework": "^2.2.0",
96
96
  "@ledgerhq/devices": "8.4.4",
97
97
  "@ledgerhq/errors": "^6.19.1",
98
98
  "@ledgerhq/live-env": "^2.6.0",
99
99
  "@ledgerhq/live-network": "^2.0.5",
100
100
  "@ledgerhq/logs": "^6.12.0",
101
- "@ledgerhq/types-live": "^6.62.0"
101
+ "@ledgerhq/types-live": "^6.63.0-next.0"
102
102
  },
103
103
  "devDependencies": {
104
104
  "@types/invariant": "^2.2.2",
package/src/api/index.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import { log } from "@ledgerhq/logs";
2
- import { AxiosRequestConfig, AxiosResponse } from "axios";
3
2
 
4
3
  import {
5
4
  NDeployMessagePutResponse,
@@ -13,7 +12,7 @@ import {
13
12
  NStateRootHashResponse,
14
13
  } from "./types";
15
14
 
16
- import network from "@ledgerhq/live-network/network";
15
+ import network from "@ledgerhq/live-network";
17
16
  import { AccessRights, CLURef, DeployUtil } from "casper-js-sdk";
18
17
  import { getEnv } from "@ledgerhq/live-env";
19
18
 
@@ -33,53 +32,60 @@ const getCasperNodeURL = (): string => {
33
32
 
34
33
  const casperIndexerWrapper = async <T>(path: string) => {
35
34
  const url = getCasperIndexerURL(path);
36
- const getResponse = async (page: number) => {
37
- // We force data to this way as network func is not using the correct param type. Changing that func will generate errors in other implementations
38
- const opts: AxiosRequestConfig = {
39
- method: "GET",
40
- url: `${url}?limit=100&page=${page}`,
41
- };
42
-
43
- const rawResponse = await network(opts);
44
- // We force data to this way as network func is not using the correct param type. Changing that func will generate errors in other implementations
45
- const { data } = rawResponse as AxiosResponse<IndexerResponseRoot<T>>;
46
35
 
36
+ try {
37
+ const rawResponse = await network<IndexerResponseRoot<T>>({
38
+ method: "GET",
39
+ url,
40
+ });
41
+ log("http", url);
42
+
43
+ const { data, status } = rawResponse;
44
+ if (status >= 300) {
45
+ log("http", url, data);
46
+ }
47
47
  return data;
48
- };
49
-
50
- let page = 1;
51
- const res: T[] = [];
52
-
53
- const data = await getResponse(page);
54
- const { pageCount } = data;
55
- res.push(...data.data);
56
-
57
- while (page <= pageCount) {
58
- page++;
59
- const data = await getResponse(page);
60
- res.push(...data.data);
48
+ } catch (error) {
49
+ log("error", "Casper indexer error: ", error);
50
+ throw error;
61
51
  }
62
-
63
- log("http", url);
64
- return res;
65
52
  };
66
53
 
67
54
  const casperNodeWrapper = async <T>(payload: NodeRPCPayload) => {
68
55
  const url = getCasperNodeURL();
69
56
 
70
- // We force data to this way as network func is not using the correct param type. Changing that func will generate errors in other implementations
71
- const opts: AxiosRequestConfig = {
72
- method: "POST",
73
- url,
74
- data: payload,
75
- };
76
- const rawResponse = await network(opts);
77
-
78
- // We force data to this way as network func is not using the correct param type. Changing that func will generate errors in other implementations
79
- const { data } = rawResponse as AxiosResponse<NodeResponseRoot<T>>;
80
-
81
- log("http", url);
82
- return data.result;
57
+ try {
58
+ const rawResponse = await network<NodeResponseRoot<T>>({
59
+ method: "POST",
60
+ url,
61
+ data: payload,
62
+ });
63
+ log("http", `${url} - ${payload.method}`);
64
+
65
+ const { data, status } = rawResponse;
66
+
67
+ if (status >= 300) {
68
+ log("http", `${url} - Status: ${status}`, data);
69
+ throw new Error(`HTTP error: ${status}`);
70
+ }
71
+
72
+ if (data.error) {
73
+ const errorMessage = data.error.message + ". " + data.error.data || "Unknown error";
74
+ log("http", `${payload.method} - ${errorMessage}`);
75
+ throw new Error(`Casper node error: ${errorMessage}`);
76
+ }
77
+
78
+ if (!data.result) {
79
+ throw new Error(`Casper node returned no result for method: ${payload.method}`);
80
+ }
81
+
82
+ return data.result;
83
+ } catch (error) {
84
+ log("error", `Failed to execute ${payload.method}`, error);
85
+ throw error instanceof Error
86
+ ? error
87
+ : new Error(`Unknown error during Casper node request: ${String(error)}`);
88
+ }
83
89
  };
84
90
 
85
91
  export const fetchAccountStateInfo = async (
@@ -88,28 +94,38 @@ export const fetchAccountStateInfo = async (
88
94
  purseUref: CLURef | undefined;
89
95
  accountHash: string | undefined;
90
96
  }> => {
91
- const accountStateInfo = await casperNodeWrapper<NAccountInfo>({
92
- jsonrpc: "2.0",
93
- method: "state_get_account_info",
94
- params: {
95
- public_key: publicKey,
96
- },
97
- id: 1,
98
- });
99
-
100
- if (!accountStateInfo) {
101
- return {
102
- purseUref: undefined,
103
- accountHash: undefined,
104
- };
97
+ try {
98
+ const accountStateInfo = await casperNodeWrapper<NAccountInfo>({
99
+ jsonrpc: "2.0",
100
+ method: "state_get_account_info",
101
+ params: {
102
+ public_key: publicKey,
103
+ },
104
+ id: 1,
105
+ });
106
+
107
+ if (!accountStateInfo) {
108
+ return {
109
+ purseUref: undefined,
110
+ accountHash: undefined,
111
+ };
112
+ }
113
+
114
+ const accountHash = accountStateInfo.account.account_hash.split("-")[2];
115
+ const purseURefString = accountStateInfo.account.main_purse.split("-")[1];
116
+
117
+ const uRef = new CLURef(Buffer.from(purseURefString, "hex"), AccessRights.READ_ADD_WRITE);
118
+
119
+ return { purseUref: uRef, accountHash };
120
+ } catch (error) {
121
+ if (error instanceof Error && error.message.includes("ValueNotFound")) {
122
+ return {
123
+ purseUref: undefined,
124
+ accountHash: undefined,
125
+ };
126
+ }
127
+ throw error;
105
128
  }
106
-
107
- const accountHash = accountStateInfo.account.account_hash.split("-")[2];
108
- const purseURefString = accountStateInfo.account.main_purse.split("-")[1];
109
-
110
- const uRef = new CLURef(Buffer.from(purseURefString, "hex"), AccessRights.READ_ADD_WRITE);
111
-
112
- return { purseUref: uRef, accountHash };
113
129
  };
114
130
 
115
131
  export const fetchBalance = async (purseUref: CLURef): Promise<NAccountBalance> => {
@@ -146,10 +162,23 @@ export const fetchNetworkStatus = async (): Promise<NNetworkStatusResponse> => {
146
162
  };
147
163
 
148
164
  export const fetchTxs = async (addr: string): Promise<ITxnHistoryData[]> => {
149
- const response = await casperIndexerWrapper<ITxnHistoryData>(
150
- `/accounts/${addr}/ledgerlive-deploys`,
165
+ let page = 1;
166
+ let res: ITxnHistoryData[] = [];
167
+ const limit = 100;
168
+
169
+ let response = await casperIndexerWrapper<ITxnHistoryData>(
170
+ `/accounts/${addr}/ledgerlive-deploys?limit=${limit}&page=${page}`,
151
171
  );
152
- return response;
172
+ res = res.concat(response.data);
173
+
174
+ while (response.pageCount > page) {
175
+ page++;
176
+ response = await casperIndexerWrapper<ITxnHistoryData>(
177
+ `/accounts/${addr}/ledgerlive-deploys?limit=${limit}&page=${page}`,
178
+ );
179
+ res = res.concat(response.data);
180
+ }
181
+ return res;
153
182
  };
154
183
 
155
184
  export const broadcastTx = async (
@@ -0,0 +1,51 @@
1
+ import { getAbandonSeedAddress } from "@ledgerhq/cryptoassets/abandonseed";
2
+ import { fetchAccountStateInfo, fetchBalance, fetchNetworkStatus, fetchTxs } from ".";
3
+
4
+ const pubkey = "0202664e3958608cd8dc2b80d4c73f18f76ef197f1cccca2f4f817c70bb050b248bd";
5
+ const pubkeyAbandon = getAbandonSeedAddress("casper");
6
+
7
+ describe("Casper API", () => {
8
+ it("should be able to fetch the network status", async () => {
9
+ const status = await fetchNetworkStatus();
10
+ expect(status).toBeDefined();
11
+ });
12
+
13
+ it("shouldn't fetch account state info if account doesn't exist", async () => {
14
+ const accountStateInfo = await fetchAccountStateInfo(pubkeyAbandon);
15
+ expect(accountStateInfo).toEqual({
16
+ purseUref: undefined,
17
+ accountHash: undefined,
18
+ });
19
+ });
20
+
21
+ it("should fetch account state info if account exists", async () => {
22
+ const accountStateInfo = await fetchAccountStateInfo(pubkey);
23
+ expect(accountStateInfo.purseUref).toBeDefined();
24
+ expect(accountStateInfo.accountHash).toBeDefined();
25
+ });
26
+
27
+ it("should fetch balance", async () => {
28
+ const accountStateInfo = await fetchAccountStateInfo(pubkey);
29
+
30
+ expect(accountStateInfo.purseUref).toBeDefined();
31
+ if (!accountStateInfo.purseUref) {
32
+ throw new Error("Purse Uref is undefined");
33
+ }
34
+
35
+ const balance = await fetchBalance(accountStateInfo.purseUref);
36
+ expect(balance).toBeDefined();
37
+ });
38
+
39
+ it("should fetch txs", async () => {
40
+ const txs = await fetchTxs(pubkey);
41
+
42
+ expect(txs).toBeDefined();
43
+ expect(txs.length).toBeGreaterThan(0);
44
+ });
45
+
46
+ it("should fetch txs for abandon seed address", async () => {
47
+ const txs = await fetchTxs(pubkeyAbandon);
48
+ expect(txs).toBeDefined();
49
+ expect(txs.length).toBe(0);
50
+ });
51
+ });
package/src/api/types.ts CHANGED
@@ -55,7 +55,12 @@ export interface ITxnHistoryData {
55
55
  export interface NodeResponseRoot<T> {
56
56
  jsonrpc: string;
57
57
  id: string;
58
- result: T;
58
+ result?: T;
59
+ error?: {
60
+ code: number;
61
+ message: string;
62
+ data: string;
63
+ };
59
64
  }
60
65
 
61
66
  export interface NNetworkStatusResponse {
@@ -3,6 +3,7 @@ import { AccountBridge } from "@ledgerhq/types-live";
3
3
  import { patchOperationWithHash } from "@ledgerhq/coin-framework/operation";
4
4
  import { Transaction } from "../types";
5
5
  import { broadcastTx } from "../api";
6
+ import invariant from "invariant";
6
7
 
7
8
  export const broadcast: AccountBridge<Transaction>["broadcast"] = async ({
8
9
  signedOperation: { signature, operation },
@@ -10,6 +11,7 @@ export const broadcast: AccountBridge<Transaction>["broadcast"] = async ({
10
11
  const tx = DeployUtil.deployFromJson(JSON.parse(signature)).unwrap();
11
12
 
12
13
  const resp = await broadcastTx(tx);
14
+ invariant(resp.deploy_hash, "casper: failed to broadcast transaction and get deploy hash");
13
15
  const { deploy_hash } = resp;
14
16
 
15
17
  const result = patchOperationWithHash(operation, deploy_hash);