@ledgerhq/coin-sui 0.6.1-nightly.1 → 0.7.0-nightly.3

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.
@@ -1,4 +1,4 @@
1
1
 
2
- > @ledgerhq/coin-sui@0.6.1-nightly.0 build /home/runner/work/ledger-live/ledger-live/libs/coin-modules/coin-sui
2
+ > @ledgerhq/coin-sui@0.7.0-nightly.2 build /home/runner/work/ledger-live/ledger-live/libs/coin-modules/coin-sui
3
3
  > tsc --outDir lib --module commonjs --moduleResolution node10 && tsc -m ES6 --outDir lib-es
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # @ledgerhq/coin-sui
2
2
 
3
+ ## 0.7.0-nightly.3
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [[`bb7e311`](https://github.com/LedgerHQ/ledger-live/commit/bb7e31139763b9fd943bf237d2c6260d6aef24ab)]:
8
+ - @ledgerhq/coin-framework@5.6.0-nightly.3
9
+
10
+ ## 0.7.0-nightly.2
11
+
12
+ ### Minor Changes
13
+
14
+ - [#10844](https://github.com/LedgerHQ/ledger-live/pull/10844) [`f72b7ae`](https://github.com/LedgerHQ/ledger-live/commit/f72b7ae31d2329028f6ef86e89f67e563500e23b) Thanks [@estrauser-ledger](https://github.com/estrauser-ledger)! - Coin:SUI listOperation uses minHeight parameter
15
+
16
+ ### Patch Changes
17
+
18
+ - Updated dependencies [[`0e32a4e`](https://github.com/LedgerHQ/ledger-live/commit/0e32a4e5482ad2d3002483632770a2d7981b7a5a)]:
19
+ - @ledgerhq/types-live@6.77.0-nightly.1
20
+ - @ledgerhq/coin-framework@5.6.0-nightly.2
21
+
3
22
  ## 0.6.1-nightly.1
4
23
 
5
24
  ### Patch Changes
@@ -1,5 +1,5 @@
1
1
  import { type SuiConfig } from "../config";
2
2
  import type { SuiAsset } from "./types";
3
- import type { AlpacaApi } from "@ledgerhq/coin-framework/api/index";
3
+ import { AlpacaApi } from "@ledgerhq/coin-framework/api/index";
4
4
  export declare function createApi(config: SuiConfig): AlpacaApi<SuiAsset>;
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAmB,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAUvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EACV,SAAS,EAGV,MAAM,oCAAoC,CAAC;AAE5C,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,CAYhE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAmB,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAUvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EACL,SAAS,EAKV,MAAM,oCAAoC,CAAC;AAE5C,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,CAYhE"}
@@ -4,7 +4,7 @@ const live_env_1 = require("@ledgerhq/live-env");
4
4
  const _1 = require(".");
5
5
  describe("Sui Api", () => {
6
6
  let module;
7
- const SENDER = "0x67b511de2697e4567e41a4477a3abccd4c7c00f4c59b45ab8c72d1544f58ceb8";
7
+ const SENDER = "0xc6dcb5b920f2fdb751b4a8bad800a4ee04257020d8d6e493c8103b760095016e";
8
8
  const RECIPIENT = "0xba7080172a6d957b9ed2e3eb643529860be963cf4af896fb84f1cde00f46b561";
9
9
  beforeAll(() => {
10
10
  module = (0, _1.createApi)({
@@ -54,6 +54,10 @@ describe("Sui Api", () => {
54
54
  expect(txs.length).toBeGreaterThanOrEqual(10);
55
55
  expect(txs.some(t => t.type === "OUT")).toBeTruthy();
56
56
  });
57
+ it("uses the minHeight to filter", async () => {
58
+ const minHeightTxs = await module.listOperations(SENDER, { minHeight: 154925948 });
59
+ expect(txs.length).toBeGreaterThanOrEqual(minHeightTxs.length);
60
+ });
57
61
  });
58
62
  describe("getBalance", () => {
59
63
  it("returns a list regarding address parameter", async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.integration.test.js","sourceRoot":"","sources":["../../src/api/index.integration.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.integration.test.js","sourceRoot":"","sources":["../../src/api/index.integration.test.ts"],"names":[],"mappings":";;AACA,iDAA4C;AAE5C,wBAA8B;AAE9B,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,IAAI,MAA2B,CAAC;IAChC,MAAM,MAAM,GAAG,oEAAoE,CAAC;IACpF,MAAM,SAAS,GAAG,oEAAoE,CAAC;IAEvF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,GAAG,IAAA,YAAS,EAAC;YACjB,IAAI,EAAE;gBACJ,GAAG,EAAE,IAAA,iBAAM,EAAC,oBAAoB,CAAC;aAClC;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;YACvC,QAAQ;YACR,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAE/B,OAAO;YACP,MAAM,MAAM,GAAkB,MAAM,MAAM,CAAC,YAAY,CAAC;gBACtD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,MAAM;gBACd,SAAS,EAAE,SAAS;gBACpB,MAAM,EAAE,MAAM;aACf,CAAC,CAAC;YAEH,OAAO;YACP,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,IAAI,GAA0B,CAAC;QAE/B,SAAS,CAAC,KAAK,IAAI,EAAE;YACnB,CAAC,GAAG,CAAC,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;YAC9C,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;gBACtB,MAAM,iBAAiB,GACrB,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC9E,MAAM,CAAC,iBAAiB,CAAC,CAAC,UAAU,EAAE,CAAC;YACzC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;YACtC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YACtD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;YAC5C,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YACnF,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,OAAO;YACP,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAE9C,OAAO;YACP,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;YACtC,OAAO;YACP,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;YACxC,OAAO;YACP,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/lib/api/index.js CHANGED
@@ -15,7 +15,7 @@ function createApi(config) {
15
15
  estimateFees: estimate,
16
16
  getBalance: logic_1.getBalance,
17
17
  lastBlock: logic_1.lastBlock,
18
- listOperations: logic_1.listOperations,
18
+ listOperations: list,
19
19
  };
20
20
  }
21
21
  exports.createApi = createApi;
@@ -27,4 +27,27 @@ async function estimate(transactionIntent) {
27
27
  const fees = await (0, logic_1.estimateFees)(transactionIntent);
28
28
  return { value: fees };
29
29
  }
30
+ async function list(address, pagination) {
31
+ return operationsFromHeight(address, pagination.minHeight);
32
+ }
33
+ async function operationsFromHeight(address, minHeight) {
34
+ const state = {
35
+ heightLimit: minHeight,
36
+ continueIterations: true,
37
+ accumulator: [],
38
+ };
39
+ while (state.continueIterations) {
40
+ const option = state.apiNextCursor
41
+ ? { minHeight: minHeight, cursor: state.apiNextCursor }
42
+ : { minHeight: minHeight };
43
+ const [operations, nextCursor] = await (0, logic_1.listOperations)(address, option);
44
+ const opsFromHeight = operations.filter(op => op.tx.block.height >= minHeight);
45
+ state.accumulator.push(...opsFromHeight);
46
+ state.apiNextCursor = nextCursor;
47
+ // The API makes 2 calls "IN" and "OUT" so even if we started filtering a few elements, we may still have more txs to fetch on one of the two calls.
48
+ // We can only stop when we've filtered all txs.
49
+ state.continueIterations = nextCursor !== "" && opsFromHeight.length > 0;
50
+ }
51
+ return [state.accumulator, state.apiNextCursor ? state.apiNextCursor : ""];
52
+ }
30
53
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":";;;;;;AAAA,uDAAuD;AACvD,oCAQkB;AAQlB,SAAgB,SAAS,CAAC,MAAiB;IACzC,gBAAU,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IAE5E,OAAO;QACL,SAAS,EAAT,iBAAS;QACT,OAAO,EAAP,eAAO;QACP,gBAAgB,EAAE,KAAK;QACvB,YAAY,EAAE,QAAQ;QACtB,UAAU,EAAV,kBAAU;QACV,SAAS,EAAT,iBAAS;QACT,cAAc,EAAd,sBAAc;KACf,CAAC;AACJ,CAAC;AAZD,8BAYC;AAED,KAAK,UAAU,KAAK,CAAC,iBAA8C;IACjE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAA,wBAAgB,EAAC,iBAAiB,CAAC,CAAC;IAE/D,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,iBAA8C;IACpE,MAAM,IAAI,GAAG,MAAM,IAAA,oBAAY,EAAC,iBAAiB,CAAC,CAAC;IACnD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":";;;;;;AAAA,uDAAuD;AACvD,oCAQkB;AAUlB,SAAgB,SAAS,CAAC,MAAiB;IACzC,gBAAU,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IAE5E,OAAO;QACL,SAAS,EAAT,iBAAS;QACT,OAAO,EAAP,eAAO;QACP,gBAAgB,EAAE,KAAK;QACvB,YAAY,EAAE,QAAQ;QACtB,UAAU,EAAV,kBAAU;QACV,SAAS,EAAT,iBAAS;QACT,cAAc,EAAE,IAAI;KACrB,CAAC;AACJ,CAAC;AAZD,8BAYC;AAED,KAAK,UAAU,KAAK,CAAC,iBAA8C;IACjE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAA,wBAAgB,EAAC,iBAAiB,CAAC,CAAC;IAE/D,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,iBAA8C;IACpE,MAAM,IAAI,GAAG,MAAM,IAAA,oBAAY,EAAC,iBAAiB,CAAC,CAAC;IACnD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,IAAI,CACjB,OAAe,EACf,UAAsB;IAEtB,OAAO,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;AAC7D,CAAC;AASD,KAAK,UAAU,oBAAoB,CACjC,OAAe,EACf,SAAiB;IAEjB,MAAM,KAAK,GAAoB;QAC7B,WAAW,EAAE,SAAS;QACtB,kBAAkB,EAAE,IAAI;QACxB,WAAW,EAAE,EAAE;KAChB,CAAC;IAEF,OAAO,KAAK,CAAC,kBAAkB,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa;YAChC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,aAAa,EAAE;YACvD,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;QAC7B,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,MAAM,IAAA,sBAAc,EAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvE,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC;QAC/E,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;QACzC,KAAK,CAAC,aAAa,GAAG,UAAU,CAAC;QACjC,oJAAoJ;QACpJ,gDAAgD;QAChD,KAAK,CAAC,kBAAkB,GAAG,UAAU,KAAK,EAAE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7E,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { type SuiConfig } from "../config";
2
2
  import type { SuiAsset } from "./types";
3
- import type { AlpacaApi } from "@ledgerhq/coin-framework/api/index";
3
+ import { AlpacaApi } from "@ledgerhq/coin-framework/api/index";
4
4
  export declare function createApi(config: SuiConfig): AlpacaApi<SuiAsset>;
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAmB,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAUvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EACV,SAAS,EAGV,MAAM,oCAAoC,CAAC;AAE5C,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,CAYhE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAmB,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAUvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EACL,SAAS,EAKV,MAAM,oCAAoC,CAAC;AAE5C,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,CAYhE"}
@@ -2,7 +2,7 @@ import { getEnv } from "@ledgerhq/live-env";
2
2
  import { createApi } from ".";
3
3
  describe("Sui Api", () => {
4
4
  let module;
5
- const SENDER = "0x67b511de2697e4567e41a4477a3abccd4c7c00f4c59b45ab8c72d1544f58ceb8";
5
+ const SENDER = "0xc6dcb5b920f2fdb751b4a8bad800a4ee04257020d8d6e493c8103b760095016e";
6
6
  const RECIPIENT = "0xba7080172a6d957b9ed2e3eb643529860be963cf4af896fb84f1cde00f46b561";
7
7
  beforeAll(() => {
8
8
  module = createApi({
@@ -52,6 +52,10 @@ describe("Sui Api", () => {
52
52
  expect(txs.length).toBeGreaterThanOrEqual(10);
53
53
  expect(txs.some(t => t.type === "OUT")).toBeTruthy();
54
54
  });
55
+ it("uses the minHeight to filter", async () => {
56
+ const minHeightTxs = await module.listOperations(SENDER, { minHeight: 154925948 });
57
+ expect(txs.length).toBeGreaterThanOrEqual(minHeightTxs.length);
58
+ });
55
59
  });
56
60
  describe("getBalance", () => {
57
61
  it("returns a list regarding address parameter", async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.integration.test.js","sourceRoot":"","sources":["../../src/api/index.integration.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.integration.test.js","sourceRoot":"","sources":["../../src/api/index.integration.test.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ export function createApi(config) {
9
9
  estimateFees: estimate,
10
10
  getBalance,
11
11
  lastBlock,
12
- listOperations,
12
+ listOperations: list,
13
13
  };
14
14
  }
15
15
  async function craft(transactionIntent) {
@@ -20,4 +20,27 @@ async function estimate(transactionIntent) {
20
20
  const fees = await estimateFees(transactionIntent);
21
21
  return { value: fees };
22
22
  }
23
+ async function list(address, pagination) {
24
+ return operationsFromHeight(address, pagination.minHeight);
25
+ }
26
+ async function operationsFromHeight(address, minHeight) {
27
+ const state = {
28
+ heightLimit: minHeight,
29
+ continueIterations: true,
30
+ accumulator: [],
31
+ };
32
+ while (state.continueIterations) {
33
+ const option = state.apiNextCursor
34
+ ? { minHeight: minHeight, cursor: state.apiNextCursor }
35
+ : { minHeight: minHeight };
36
+ const [operations, nextCursor] = await listOperations(address, option);
37
+ const opsFromHeight = operations.filter(op => op.tx.block.height >= minHeight);
38
+ state.accumulator.push(...opsFromHeight);
39
+ state.apiNextCursor = nextCursor;
40
+ // The API makes 2 calls "IN" and "OUT" so even if we started filtering a few elements, we may still have more txs to fetch on one of the two calls.
41
+ // We can only stop when we've filtered all txs.
42
+ state.continueIterations = nextCursor !== "" && opsFromHeight.length > 0;
43
+ }
44
+ return [state.accumulator, state.apiNextCursor ? state.apiNextCursor : ""];
45
+ }
23
46
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAA8B,MAAM,WAAW,CAAC;AACvD,OAAO,EACL,YAAY,EACZ,OAAO,EACP,SAAS,EACT,UAAU,EACV,cAAc,EACd,SAAS,EACT,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAQlB,MAAM,UAAU,SAAS,CAAC,MAAiB;IACzC,UAAU,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IAE5E,OAAO;QACL,SAAS;QACT,OAAO;QACP,gBAAgB,EAAE,KAAK;QACvB,YAAY,EAAE,QAAQ;QACtB,UAAU;QACV,SAAS;QACT,cAAc;KACf,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,iBAA8C;IACjE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;IAE/D,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,iBAA8C;IACpE,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,iBAAiB,CAAC,CAAC;IACnD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAA8B,MAAM,WAAW,CAAC;AACvD,OAAO,EACL,YAAY,EACZ,OAAO,EACP,SAAS,EACT,UAAU,EACV,cAAc,EACd,SAAS,EACT,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAUlB,MAAM,UAAU,SAAS,CAAC,MAAiB;IACzC,UAAU,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IAE5E,OAAO;QACL,SAAS;QACT,OAAO;QACP,gBAAgB,EAAE,KAAK;QACvB,YAAY,EAAE,QAAQ;QACtB,UAAU;QACV,SAAS;QACT,cAAc,EAAE,IAAI;KACrB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,iBAA8C;IACjE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;IAE/D,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,iBAA8C;IACpE,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,iBAAiB,CAAC,CAAC;IACnD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,IAAI,CACjB,OAAe,EACf,UAAsB;IAEtB,OAAO,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;AAC7D,CAAC;AASD,KAAK,UAAU,oBAAoB,CACjC,OAAe,EACf,SAAiB;IAEjB,MAAM,KAAK,GAAoB;QAC7B,WAAW,EAAE,SAAS;QACtB,kBAAkB,EAAE,IAAI;QACxB,WAAW,EAAE,EAAE;KAChB,CAAC;IAEF,OAAO,KAAK,CAAC,kBAAkB,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa;YAChC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,aAAa,EAAE;YACvD,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;QAC7B,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvE,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC;QAC/E,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;QACzC,KAAK,CAAC,aAAa,GAAG,UAAU,CAAC;QACjC,oJAAoJ;QACpJ,gDAAgD;QAChD,KAAK,CAAC,kBAAkB,GAAG,UAAU,KAAK,EAAE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7E,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/coin-sui",
3
- "version": "0.6.1-nightly.1",
3
+ "version": "0.7.0-nightly.3",
4
4
  "description": "Ledger Sui Coin integration",
5
5
  "keywords": [
6
6
  "Ledger",
@@ -115,16 +115,16 @@
115
115
  "bignumber.js": "^9.1.2",
116
116
  "lodash": "4.17.21",
117
117
  "rxjs": "^7.8.1",
118
+ "@ledgerhq/coin-framework": "^5.6.0-nightly.3",
118
119
  "@ledgerhq/cryptoassets": "^13.21.0",
119
- "@ledgerhq/coin-framework": "^5.6.0-nightly.1",
120
120
  "@ledgerhq/errors": "^6.22.0",
121
121
  "@ledgerhq/hw-app-sui": "^1.2.0",
122
122
  "@ledgerhq/live-env": "^2.11.0",
123
123
  "@ledgerhq/live-network": "^2.0.12",
124
124
  "@ledgerhq/live-promise": "^0.1.1",
125
125
  "@ledgerhq/logs": "^6.13.0",
126
- "@ledgerhq/types-live": "^6.77.0-nightly.0",
127
- "@ledgerhq/types-cryptoassets": "^7.23.0"
126
+ "@ledgerhq/types-cryptoassets": "^7.23.0",
127
+ "@ledgerhq/types-live": "^6.77.0-nightly.1"
128
128
  },
129
129
  "devDependencies": {
130
130
  "@faker-js/faker": "^8.4.1",
@@ -5,7 +5,7 @@ import { createApi } from ".";
5
5
 
6
6
  describe("Sui Api", () => {
7
7
  let module: AlpacaApi<SuiAsset>;
8
- const SENDER = "0x67b511de2697e4567e41a4477a3abccd4c7c00f4c59b45ab8c72d1544f58ceb8";
8
+ const SENDER = "0xc6dcb5b920f2fdb751b4a8bad800a4ee04257020d8d6e493c8103b760095016e";
9
9
  const RECIPIENT = "0xba7080172a6d957b9ed2e3eb643529860be963cf4af896fb84f1cde00f46b561";
10
10
 
11
11
  beforeAll(() => {
@@ -66,6 +66,11 @@ describe("Sui Api", () => {
66
66
  expect(txs.length).toBeGreaterThanOrEqual(10);
67
67
  expect(txs.some(t => t.type === "OUT")).toBeTruthy();
68
68
  });
69
+
70
+ it("uses the minHeight to filter", async () => {
71
+ const minHeightTxs = await module.listOperations(SENDER, { minHeight: 154925948 });
72
+ expect(txs.length).toBeGreaterThanOrEqual(minHeightTxs.length);
73
+ });
69
74
  });
70
75
 
71
76
  describe("getBalance", () => {
package/src/api/index.ts CHANGED
@@ -9,9 +9,11 @@ import {
9
9
  craftTransaction,
10
10
  } from "../logic";
11
11
  import type { SuiAsset } from "./types";
12
- import type {
12
+ import {
13
13
  AlpacaApi,
14
14
  FeeEstimation,
15
+ Operation,
16
+ Pagination,
15
17
  TransactionIntent,
16
18
  } from "@ledgerhq/coin-framework/api/index";
17
19
 
@@ -25,7 +27,7 @@ export function createApi(config: SuiConfig): AlpacaApi<SuiAsset> {
25
27
  estimateFees: estimate,
26
28
  getBalance,
27
29
  lastBlock,
28
- listOperations,
30
+ listOperations: list,
29
31
  };
30
32
  }
31
33
 
@@ -39,3 +41,43 @@ async function estimate(transactionIntent: TransactionIntent<SuiAsset>): Promise
39
41
  const fees = await estimateFees(transactionIntent);
40
42
  return { value: fees };
41
43
  }
44
+
45
+ async function list(
46
+ address: string,
47
+ pagination: Pagination,
48
+ ): Promise<[Operation<SuiAsset>[], string]> {
49
+ return operationsFromHeight(address, pagination.minHeight);
50
+ }
51
+
52
+ type PaginationState = {
53
+ readonly heightLimit: number;
54
+ continueIterations: boolean;
55
+ apiNextCursor?: string;
56
+ accumulator: Operation<SuiAsset>[];
57
+ };
58
+
59
+ async function operationsFromHeight(
60
+ address: string,
61
+ minHeight: number,
62
+ ): Promise<[Operation<SuiAsset>[], string]> {
63
+ const state: PaginationState = {
64
+ heightLimit: minHeight,
65
+ continueIterations: true,
66
+ accumulator: [],
67
+ };
68
+
69
+ while (state.continueIterations) {
70
+ const option = state.apiNextCursor
71
+ ? { minHeight: minHeight, cursor: state.apiNextCursor }
72
+ : { minHeight: minHeight };
73
+ const [operations, nextCursor] = await listOperations(address, option);
74
+ const opsFromHeight = operations.filter(op => op.tx.block.height >= minHeight);
75
+ state.accumulator.push(...opsFromHeight);
76
+ state.apiNextCursor = nextCursor;
77
+ // The API makes 2 calls "IN" and "OUT" so even if we started filtering a few elements, we may still have more txs to fetch on one of the two calls.
78
+ // We can only stop when we've filtered all txs.
79
+ state.continueIterations = nextCursor !== "" && opsFromHeight.length > 0;
80
+ }
81
+
82
+ return [state.accumulator, state.apiNextCursor ? state.apiNextCursor : ""];
83
+ }