@ledgerhq/coin-sui 0.16.0-nightly.1 → 0.16.0-nightly.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.
@@ -1,4 +1,4 @@
1
1
 
2
- > @ledgerhq/coin-sui@0.15.1-nightly.0 build /home/runner/work/ledger-live/ledger-live/libs/coin-modules/coin-sui
2
+ > @ledgerhq/coin-sui@0.16.0-nightly.1 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,20 @@
1
1
  # @ledgerhq/coin-sui
2
2
 
3
+ ## 0.16.0-nightly.2
4
+
5
+ ### Minor Changes
6
+
7
+ - [#12051](https://github.com/LedgerHQ/ledger-live/pull/12051) [`ea16f59`](https://github.com/LedgerHQ/ledger-live/commit/ea16f592e85019a1b77287a7f2b975c6fcffc74c) Thanks [@semeano](https://github.com/semeano)! - Fetch SUI tokens from dynamic CAL
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [[`ea16f59`](https://github.com/LedgerHQ/ledger-live/commit/ea16f592e85019a1b77287a7f2b975c6fcffc74c), [`a9aacdb`](https://github.com/LedgerHQ/ledger-live/commit/a9aacdb330700f0a294833f7d77de17f179229b2), [`f1f3845`](https://github.com/LedgerHQ/ledger-live/commit/f1f3845942e4cbce9c585dc65f6170ddbc319f19), [`89ac0ed`](https://github.com/LedgerHQ/ledger-live/commit/89ac0eddc145dcf5c7cf240aa8be4301372c8f33), [`db25e21`](https://github.com/LedgerHQ/ledger-live/commit/db25e212b87dea426b153c6f1d988cead63c8c46)]:
12
+ - @ledgerhq/cryptoassets@13.31.0-nightly.1
13
+ - @ledgerhq/types-live@6.87.0-nightly.1
14
+ - @ledgerhq/live-env@2.19.0-nightly.0
15
+ - @ledgerhq/coin-framework@6.7.0-nightly.1
16
+ - @ledgerhq/live-network@2.0.20-nightly.0
17
+
3
18
  ## 0.16.0-nightly.1
4
19
 
5
20
  ### Minor Changes
@@ -1,11 +1,13 @@
1
1
  import { Observable } from "rxjs";
2
- import type { SuiPreloadData } from "../types";
2
+ import type { SuiPreloadData, SuiToken } from "../types";
3
+ export declare const fetchSuiTokens: () => Promise<SuiToken[]>;
3
4
  export declare function getCurrentSuiPreloadData(): SuiPreloadData;
4
5
  export declare function setSuiPreloadData(data: SuiPreloadData): void;
5
6
  export declare function getSuiPreloadDataUpdates(): Observable<SuiPreloadData>;
6
7
  export declare const getPreloadStrategy: () => {
7
8
  preloadMaxAge: number;
8
9
  };
10
+ export declare function setShouldSkipTokenLoading(skip: boolean): void;
9
11
  export declare const preload: () => Promise<SuiPreloadData>;
10
12
  export declare const hydrate: (data: SuiPreloadData) => void;
11
13
  //# sourceMappingURL=preload.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../../src/bridge/preload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAW,MAAM,MAAM,CAAC;AAG3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAa/C,wBAAgB,wBAAwB,IAAI,cAAc,CAEzD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,QAMrD;AAED,wBAAgB,wBAAwB,IAAI,UAAU,CAAC,cAAc,CAAC,CAErE;AAED,eAAO,MAAM,kBAAkB;;CAE7B,CAAC;AAEH,eAAO,MAAM,OAAO,QAAa,QAAQ,cAAc,CAKtD,CAAC;AAEF,eAAO,MAAM,OAAO,SAAU,cAAc,SAI3C,CAAC"}
1
+ {"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../../src/bridge/preload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAW,MAAM,MAAM,CAAC;AAE3C,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAazD,eAAO,MAAM,cAAc,EAAE,MAAM,OAAO,CAAC,QAAQ,EAAE,CA0CpD,CAAC;AAQF,wBAAgB,wBAAwB,IAAI,cAAc,CAEzD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,QAMrD;AAED,wBAAgB,wBAAwB,IAAI,UAAU,CAAC,cAAc,CAAC,CAErE;AAED,eAAO,MAAM,kBAAkB;;CAE7B,CAAC;AAGH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE7D;AAED,eAAO,MAAM,OAAO,QAAa,QAAQ,cAAc,CAatD,CAAC;AAEF,eAAO,MAAM,OAAO,SAAU,cAAc,SAI3C,CAAC"}
@@ -1,13 +1,73 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hydrate = exports.preload = exports.getPreloadStrategy = exports.getSuiPreloadDataUpdates = exports.setSuiPreloadData = exports.getCurrentSuiPreloadData = void 0;
26
+ exports.hydrate = exports.preload = exports.setShouldSkipTokenLoading = exports.getPreloadStrategy = exports.getSuiPreloadDataUpdates = exports.setSuiPreloadData = exports.getCurrentSuiPreloadData = exports.fetchSuiTokens = void 0;
4
27
  const rxjs_1 = require("rxjs");
5
28
  const logs_1 = require("@ledgerhq/logs");
6
29
  const sdk_1 = require("../network/sdk");
30
+ const sui_1 = __importStar(require("@ledgerhq/cryptoassets/data/sui"));
31
+ const index_1 = require("@ledgerhq/cryptoassets/crypto-assets-importer/fetch/index");
32
+ const tokens_1 = require("@ledgerhq/cryptoassets/tokens");
33
+ const axios_1 = require("axios");
7
34
  const PRELOAD_MAX_AGE = 30 * 60 * 1000; // 30 minutes
8
- let currentPreloadedData = { validators: [] };
35
+ let currentPreloadedData = { validators: [], tokens: [] };
36
+ let latestCALHash = "";
37
+ const fetchSuiTokens = async () => {
38
+ const embeddedHash = sui_1.hash;
39
+ try {
40
+ const { tokens, hash } = await (0, index_1.fetchTokensFromCALService)({
41
+ blockchain_name: "sui",
42
+ }, ["id", "name", "ticker", "contract_address", "decimals", "live_signature"], latestCALHash || embeddedHash);
43
+ latestCALHash = hash || "";
44
+ return tokens.map(token => {
45
+ return [
46
+ token.id,
47
+ token.name,
48
+ token.ticker.toUpperCase(),
49
+ token.contract_address,
50
+ token.decimals,
51
+ token.live_signature,
52
+ ];
53
+ });
54
+ }
55
+ catch (e) {
56
+ if (e instanceof axios_1.AxiosError && e.response?.status === 304) {
57
+ (0, logs_1.log)("sui/preload", `loading existing fallback tokens for sui with hash ${latestCALHash || embeddedHash}`);
58
+ if (!latestCALHash) {
59
+ latestCALHash = embeddedHash;
60
+ return sui_1.default;
61
+ }
62
+ return [];
63
+ }
64
+ (0, logs_1.log)("sui/preload", "failure to retrieve tokens for sui", e);
65
+ return [];
66
+ }
67
+ };
68
+ exports.fetchSuiTokens = fetchSuiTokens;
9
69
  function fromHydratePreloadData(data) {
10
- return { validators: data?.validators ?? [] };
70
+ return { validators: data?.validators ?? [], tokens: data?.tokens ?? [] };
11
71
  }
12
72
  const updates = new rxjs_1.Subject();
13
73
  function getCurrentSuiPreloadData() {
@@ -29,10 +89,21 @@ const getPreloadStrategy = () => ({
29
89
  preloadMaxAge: PRELOAD_MAX_AGE,
30
90
  });
31
91
  exports.getPreloadStrategy = getPreloadStrategy;
92
+ let shouldSkipTokenLoading = false;
93
+ function setShouldSkipTokenLoading(skip) {
94
+ shouldSkipTokenLoading = skip;
95
+ }
96
+ exports.setShouldSkipTokenLoading = setShouldSkipTokenLoading;
32
97
  const preload = async () => {
33
- const validators = await (0, sdk_1.getValidators)();
34
98
  (0, logs_1.log)("sui/preload", "preloading sui data...");
35
- return { validators };
99
+ const validators = await (0, sdk_1.getValidators)();
100
+ let tokens = [];
101
+ if (!shouldSkipTokenLoading) {
102
+ tokens = await (0, exports.fetchSuiTokens)();
103
+ (0, logs_1.log)("sui/preload", "preload " + tokens.length + " tokens");
104
+ (0, tokens_1.addTokens)(tokens.map(tokens_1.convertSuiTokens));
105
+ }
106
+ return { validators, tokens };
36
107
  };
37
108
  exports.preload = preload;
38
109
  const hydrate = (data) => {
@@ -1 +1 @@
1
- {"version":3,"file":"preload.js","sourceRoot":"","sources":["../../src/bridge/preload.ts"],"names":[],"mappings":";;;AAAA,+BAA2C;AAC3C,yCAAqC;AAGrC,wCAA+C;AAE/C,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AAErD,IAAI,oBAAoB,GAAmB,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;AAE9D,SAAS,sBAAsB,CAAC,IAAoB;IAClD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,IAAI,EAAE,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,cAAO,EAAkB,CAAC;AAE9C,SAAgB,wBAAwB;IACtC,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAFD,4DAEC;AAED,SAAgB,iBAAiB,CAAC,IAAoB;IACpD,IAAI,IAAI,KAAK,oBAAoB;QAAE,OAAO;IAE1C,oBAAoB,GAAG,IAAI,CAAC;IAE5B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC;AAND,8CAMC;AAED,SAAgB,wBAAwB;IACtC,OAAO,OAAO,CAAC,YAAY,EAAE,CAAC;AAChC,CAAC;AAFD,4DAEC;AAEM,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAAC,CAAC;IACvC,aAAa,EAAE,eAAe;CAC/B,CAAC,CAAC;AAFU,QAAA,kBAAkB,sBAE5B;AAEI,MAAM,OAAO,GAAG,KAAK,IAA6B,EAAE;IACzD,MAAM,UAAU,GAAG,MAAM,IAAA,mBAAa,GAAE,CAAC;IACzC,IAAA,UAAG,EAAC,aAAa,EAAE,wBAAwB,CAAC,CAAC;IAE7C,OAAO,EAAE,UAAU,EAAE,CAAC;AACxB,CAAC,CAAC;AALW,QAAA,OAAO,WAKlB;AAEK,MAAM,OAAO,GAAG,CAAC,IAAoB,EAAE,EAAE;IAC9C,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAE9C,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC,CAAC;AAJW,QAAA,OAAO,WAIlB"}
1
+ {"version":3,"file":"preload.js","sourceRoot":"","sources":["../../src/bridge/preload.ts"],"names":[],"mappings":"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"}
@@ -10,11 +10,11 @@ jest.mock("@ledgerhq/logs", () => ({
10
10
  describe("Sui Preload Functions", () => {
11
11
  beforeEach(() => {
12
12
  // Reset the preload data before each test
13
- (0, preload_1.setSuiPreloadData)({ validators: [] });
13
+ (0, preload_1.setSuiPreloadData)({ validators: [], tokens: [] });
14
14
  });
15
15
  describe("getCurrentSuiPreloadData", () => {
16
16
  it("should return the current preloaded data", () => {
17
- const testData = { validators: [] };
17
+ const testData = { validators: [], tokens: [] };
18
18
  (0, preload_1.setSuiPreloadData)(testData);
19
19
  const data = (0, preload_1.getCurrentSuiPreloadData)();
20
20
  expect(data).toEqual(testData);
@@ -26,7 +26,7 @@ describe("Sui Preload Functions", () => {
26
26
  expect(updates).toBeInstanceOf(rxjs_1.Observable);
27
27
  });
28
28
  it("should emit updates when data is set", done => {
29
- const testData = { validators: [] };
29
+ const testData = { validators: [], tokens: [] };
30
30
  const updates = (0, preload_1.getSuiPreloadDataUpdates)();
31
31
  updates.pipe((0, operators_1.take)(1)).subscribe(data => {
32
32
  expect(data).toEqual(testData);
@@ -1 +1 @@
1
- {"version":3,"file":"preload.test.js","sourceRoot":"","sources":["../../src/bridge/preload.test.ts"],"names":[],"mappings":";;AAAA,+BAAkC;AAClC,8CAAsC;AACtC,uCAKmB;AAGnB,wBAAwB;AACxB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;CACf,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,UAAU,CAAC,GAAG,EAAE;QACd,0CAA0C;QAC1C,IAAA,2BAAiB,EAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,QAAQ,GAAmB,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;YACpD,IAAA,2BAAiB,EAAC,QAAQ,CAAC,CAAC;YAE5B,MAAM,IAAI,GAAG,IAAA,kCAAwB,GAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,OAAO,GAAG,IAAA,kCAAwB,GAAE,CAAC;YAC3C,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,iBAAU,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,IAAI,CAAC,EAAE;YAChD,MAAM,QAAQ,GAAmB,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;YACpD,MAAM,OAAO,GAAG,IAAA,kCAAwB,GAAE,CAAC;YAE3C,OAAO,CAAC,IAAI,CAAC,IAAA,gBAAI,EAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;gBACrC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC/B,IAAI,EAAE,CAAC;YACT,CAAC,CAAC,CAAC;YAEH,IAAA,2BAAiB,EAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAClC,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;gBAC7D,MAAM,QAAQ,GAAG,IAAA,4BAAkB,GAAE,CAAC;gBAEtC,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;gBACjD,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,6BAA6B;YACpF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;gBAClD,MAAM,SAAS,GAAG,IAAA,4BAAkB,GAAE,CAAC;gBACvC,MAAM,SAAS,GAAG,IAAA,4BAAkB,GAAE,CAAC;gBAEvC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACrC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"preload.test.js","sourceRoot":"","sources":["../../src/bridge/preload.test.ts"],"names":[],"mappings":";;AAAA,+BAAkC;AAClC,8CAAsC;AACtC,uCAKmB;AAGnB,wBAAwB;AACxB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;CACf,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,UAAU,CAAC,GAAG,EAAE;QACd,0CAA0C;QAC1C,IAAA,2BAAiB,EAAC,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,QAAQ,GAAmB,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YAChE,IAAA,2BAAiB,EAAC,QAAQ,CAAC,CAAC;YAE5B,MAAM,IAAI,GAAG,IAAA,kCAAwB,GAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,OAAO,GAAG,IAAA,kCAAwB,GAAE,CAAC;YAC3C,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,iBAAU,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,IAAI,CAAC,EAAE;YAChD,MAAM,QAAQ,GAAmB,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YAChE,MAAM,OAAO,GAAG,IAAA,kCAAwB,GAAE,CAAC;YAE3C,OAAO,CAAC,IAAI,CAAC,IAAA,gBAAI,EAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;gBACrC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC/B,IAAI,EAAE,CAAC;YACT,CAAC,CAAC,CAAC;YAEH,IAAA,2BAAiB,EAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAClC,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;gBAC7D,MAAM,QAAQ,GAAG,IAAA,4BAAkB,GAAE,CAAC;gBAEtC,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;gBACjD,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,6BAA6B;YACpF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;gBAClD,MAAM,SAAS,GAAG,IAAA,4BAAkB,GAAE,CAAC;gBACvC,MAAM,SAAS,GAAG,IAAA,4BAAkB,GAAE,CAAC;gBAEvC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACrC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -56,6 +56,17 @@ export type TransactionRaw = TransactionCommonRaw & {
56
56
  export type SuiValidator = SuiValidatorSummary & {
57
57
  apy: number;
58
58
  };
59
+ /**
60
+ * Sui token data from CAL
61
+ */
62
+ export type SuiToken = [
63
+ string,
64
+ string,
65
+ string,
66
+ string,
67
+ number,
68
+ string
69
+ ];
59
70
  /**
60
71
  * Sui currency data that will be preloaded.
61
72
  * You can for instance add a list of validators for Proof-of-Stake blockchains,
@@ -63,6 +74,7 @@ export type SuiValidator = SuiValidatorSummary & {
63
74
  */
64
75
  export type SuiPreloadData = {
65
76
  validators: SuiValidator[];
77
+ tokens: SuiToken[];
66
78
  };
67
79
  export type SuiAccount = Account & {
68
80
  suiResources?: SuiResources;
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/types/bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/types/bridge.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,13 @@
1
1
  import { Observable } from "rxjs";
2
- import type { SuiPreloadData } from "../types";
2
+ import type { SuiPreloadData, SuiToken } from "../types";
3
+ export declare const fetchSuiTokens: () => Promise<SuiToken[]>;
3
4
  export declare function getCurrentSuiPreloadData(): SuiPreloadData;
4
5
  export declare function setSuiPreloadData(data: SuiPreloadData): void;
5
6
  export declare function getSuiPreloadDataUpdates(): Observable<SuiPreloadData>;
6
7
  export declare const getPreloadStrategy: () => {
7
8
  preloadMaxAge: number;
8
9
  };
10
+ export declare function setShouldSkipTokenLoading(skip: boolean): void;
9
11
  export declare const preload: () => Promise<SuiPreloadData>;
10
12
  export declare const hydrate: (data: SuiPreloadData) => void;
11
13
  //# sourceMappingURL=preload.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../../src/bridge/preload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAW,MAAM,MAAM,CAAC;AAG3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAa/C,wBAAgB,wBAAwB,IAAI,cAAc,CAEzD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,QAMrD;AAED,wBAAgB,wBAAwB,IAAI,UAAU,CAAC,cAAc,CAAC,CAErE;AAED,eAAO,MAAM,kBAAkB;;CAE7B,CAAC;AAEH,eAAO,MAAM,OAAO,QAAa,QAAQ,cAAc,CAKtD,CAAC;AAEF,eAAO,MAAM,OAAO,SAAU,cAAc,SAI3C,CAAC"}
1
+ {"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../../src/bridge/preload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAW,MAAM,MAAM,CAAC;AAE3C,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAazD,eAAO,MAAM,cAAc,EAAE,MAAM,OAAO,CAAC,QAAQ,EAAE,CA0CpD,CAAC;AAQF,wBAAgB,wBAAwB,IAAI,cAAc,CAEzD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,QAMrD;AAED,wBAAgB,wBAAwB,IAAI,UAAU,CAAC,cAAc,CAAC,CAErE;AAED,eAAO,MAAM,kBAAkB;;CAE7B,CAAC;AAGH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE7D;AAED,eAAO,MAAM,OAAO,QAAa,QAAQ,cAAc,CAatD,CAAC;AAEF,eAAO,MAAM,OAAO,SAAU,cAAc,SAI3C,CAAC"}
@@ -1,10 +1,46 @@
1
1
  import { Subject } from "rxjs";
2
2
  import { log } from "@ledgerhq/logs";
3
3
  import { getValidators } from "../network/sdk";
4
+ import suiTokens, { hash } from "@ledgerhq/cryptoassets/data/sui";
5
+ import { fetchTokensFromCALService } from "@ledgerhq/cryptoassets/crypto-assets-importer/fetch/index";
6
+ import { addTokens, convertSuiTokens } from "@ledgerhq/cryptoassets/tokens";
7
+ import { AxiosError } from "axios";
4
8
  const PRELOAD_MAX_AGE = 30 * 60 * 1000; // 30 minutes
5
- let currentPreloadedData = { validators: [] };
9
+ let currentPreloadedData = { validators: [], tokens: [] };
10
+ let latestCALHash = "";
11
+ export const fetchSuiTokens = async () => {
12
+ const embeddedHash = hash;
13
+ try {
14
+ const { tokens, hash } = await fetchTokensFromCALService({
15
+ blockchain_name: "sui",
16
+ }, ["id", "name", "ticker", "contract_address", "decimals", "live_signature"], latestCALHash || embeddedHash);
17
+ latestCALHash = hash || "";
18
+ return tokens.map(token => {
19
+ return [
20
+ token.id,
21
+ token.name,
22
+ token.ticker.toUpperCase(),
23
+ token.contract_address,
24
+ token.decimals,
25
+ token.live_signature,
26
+ ];
27
+ });
28
+ }
29
+ catch (e) {
30
+ if (e instanceof AxiosError && e.response?.status === 304) {
31
+ log("sui/preload", `loading existing fallback tokens for sui with hash ${latestCALHash || embeddedHash}`);
32
+ if (!latestCALHash) {
33
+ latestCALHash = embeddedHash;
34
+ return suiTokens;
35
+ }
36
+ return [];
37
+ }
38
+ log("sui/preload", "failure to retrieve tokens for sui", e);
39
+ return [];
40
+ }
41
+ };
6
42
  function fromHydratePreloadData(data) {
7
- return { validators: data?.validators ?? [] };
43
+ return { validators: data?.validators ?? [], tokens: data?.tokens ?? [] };
8
44
  }
9
45
  const updates = new Subject();
10
46
  export function getCurrentSuiPreloadData() {
@@ -22,10 +58,20 @@ export function getSuiPreloadDataUpdates() {
22
58
  export const getPreloadStrategy = () => ({
23
59
  preloadMaxAge: PRELOAD_MAX_AGE,
24
60
  });
61
+ let shouldSkipTokenLoading = false;
62
+ export function setShouldSkipTokenLoading(skip) {
63
+ shouldSkipTokenLoading = skip;
64
+ }
25
65
  export const preload = async () => {
26
- const validators = await getValidators();
27
66
  log("sui/preload", "preloading sui data...");
28
- return { validators };
67
+ const validators = await getValidators();
68
+ let tokens = [];
69
+ if (!shouldSkipTokenLoading) {
70
+ tokens = await fetchSuiTokens();
71
+ log("sui/preload", "preload " + tokens.length + " tokens");
72
+ addTokens(tokens.map(convertSuiTokens));
73
+ }
74
+ return { validators, tokens };
29
75
  };
30
76
  export const hydrate = (data) => {
31
77
  const hydrated = fromHydratePreloadData(data);
@@ -1 +1 @@
1
- {"version":3,"file":"preload.js","sourceRoot":"","sources":["../../src/bridge/preload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,OAAO,EAAE,MAAM,MAAM,CAAC;AAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAGrC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AAErD,IAAI,oBAAoB,GAAmB,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;AAE9D,SAAS,sBAAsB,CAAC,IAAoB;IAClD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,IAAI,EAAE,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAkB,CAAC;AAE9C,MAAM,UAAU,wBAAwB;IACtC,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAoB;IACpD,IAAI,IAAI,KAAK,oBAAoB;QAAE,OAAO;IAE1C,oBAAoB,GAAG,IAAI,CAAC;IAE5B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,OAAO,CAAC,YAAY,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAAC,CAAC;IACvC,aAAa,EAAE,eAAe;CAC/B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,IAA6B,EAAE;IACzD,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;IACzC,GAAG,CAAC,aAAa,EAAE,wBAAwB,CAAC,CAAC;IAE7C,OAAO,EAAE,UAAU,EAAE,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAoB,EAAE,EAAE;IAC9C,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAE9C,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC,CAAC"}
1
+ {"version":3,"file":"preload.js","sourceRoot":"","sources":["../../src/bridge/preload.ts"],"names":[],"mappings":"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"}
@@ -8,11 +8,11 @@ jest.mock("@ledgerhq/logs", () => ({
8
8
  describe("Sui Preload Functions", () => {
9
9
  beforeEach(() => {
10
10
  // Reset the preload data before each test
11
- setSuiPreloadData({ validators: [] });
11
+ setSuiPreloadData({ validators: [], tokens: [] });
12
12
  });
13
13
  describe("getCurrentSuiPreloadData", () => {
14
14
  it("should return the current preloaded data", () => {
15
- const testData = { validators: [] };
15
+ const testData = { validators: [], tokens: [] };
16
16
  setSuiPreloadData(testData);
17
17
  const data = getCurrentSuiPreloadData();
18
18
  expect(data).toEqual(testData);
@@ -24,7 +24,7 @@ describe("Sui Preload Functions", () => {
24
24
  expect(updates).toBeInstanceOf(Observable);
25
25
  });
26
26
  it("should emit updates when data is set", done => {
27
- const testData = { validators: [] };
27
+ const testData = { validators: [], tokens: [] };
28
28
  const updates = getSuiPreloadDataUpdates();
29
29
  updates.pipe(take(1)).subscribe(data => {
30
30
  expect(data).toEqual(testData);
@@ -1 +1 @@
1
- {"version":3,"file":"preload.test.js","sourceRoot":"","sources":["../../src/bridge/preload.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,WAAW,CAAC;AAGnB,wBAAwB;AACxB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;CACf,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,UAAU,CAAC,GAAG,EAAE;QACd,0CAA0C;QAC1C,iBAAiB,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,QAAQ,GAAmB,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;YACpD,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAE5B,MAAM,IAAI,GAAG,wBAAwB,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,OAAO,GAAG,wBAAwB,EAAE,CAAC;YAC3C,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,IAAI,CAAC,EAAE;YAChD,MAAM,QAAQ,GAAmB,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;YACpD,MAAM,OAAO,GAAG,wBAAwB,EAAE,CAAC;YAE3C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;gBACrC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC/B,IAAI,EAAE,CAAC;YACT,CAAC,CAAC,CAAC;YAEH,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAClC,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;gBAC7D,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;gBAEtC,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;gBACjD,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,6BAA6B;YACpF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;gBAClD,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;gBACvC,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;gBAEvC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACrC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"preload.test.js","sourceRoot":"","sources":["../../src/bridge/preload.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,WAAW,CAAC;AAGnB,wBAAwB;AACxB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;CACf,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,UAAU,CAAC,GAAG,EAAE;QACd,0CAA0C;QAC1C,iBAAiB,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,QAAQ,GAAmB,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YAChE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAE5B,MAAM,IAAI,GAAG,wBAAwB,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,OAAO,GAAG,wBAAwB,EAAE,CAAC;YAC3C,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,IAAI,CAAC,EAAE;YAChD,MAAM,QAAQ,GAAmB,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YAChE,MAAM,OAAO,GAAG,wBAAwB,EAAE,CAAC;YAE3C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;gBACrC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC/B,IAAI,EAAE,CAAC;YACT,CAAC,CAAC,CAAC;YAEH,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAClC,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;gBAC7D,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;gBAEtC,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;gBACjD,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,6BAA6B;YACpF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;gBAClD,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;gBACvC,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;gBAEvC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACrC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -56,6 +56,17 @@ export type TransactionRaw = TransactionCommonRaw & {
56
56
  export type SuiValidator = SuiValidatorSummary & {
57
57
  apy: number;
58
58
  };
59
+ /**
60
+ * Sui token data from CAL
61
+ */
62
+ export type SuiToken = [
63
+ string,
64
+ string,
65
+ string,
66
+ string,
67
+ number,
68
+ string
69
+ ];
59
70
  /**
60
71
  * Sui currency data that will be preloaded.
61
72
  * You can for instance add a list of validators for Proof-of-Stake blockchains,
@@ -63,6 +74,7 @@ export type SuiValidator = SuiValidatorSummary & {
63
74
  */
64
75
  export type SuiPreloadData = {
65
76
  validators: SuiValidator[];
77
+ tokens: SuiToken[];
66
78
  };
67
79
  export type SuiAccount = Account & {
68
80
  suiResources?: SuiResources;
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/types/bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/types/bridge.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/coin-sui",
3
- "version": "0.16.0-nightly.1",
3
+ "version": "0.16.0-nightly.2",
4
4
  "description": "Ledger Sui Coin integration",
5
5
  "keywords": [
6
6
  "Ledger",
@@ -120,19 +120,20 @@
120
120
  "dependencies": {
121
121
  "@mysten/signers": "0.5.0",
122
122
  "@mysten/sui": "1.38.0",
123
+ "axios": "1.11.0",
123
124
  "bignumber.js": "^9.1.2",
124
125
  "lodash": "4.17.21",
125
126
  "rxjs": "^7.8.1",
126
- "@ledgerhq/coin-framework": "^6.7.0-nightly.0",
127
- "@ledgerhq/cryptoassets": "^13.31.0-nightly.0",
127
+ "@ledgerhq/coin-framework": "^6.7.0-nightly.1",
128
+ "@ledgerhq/cryptoassets": "^13.31.0-nightly.1",
128
129
  "@ledgerhq/errors": "^6.26.0",
129
130
  "@ledgerhq/hw-app-sui": "^1.4.0",
130
- "@ledgerhq/live-env": "^2.18.0",
131
- "@ledgerhq/live-network": "^2.0.19",
131
+ "@ledgerhq/live-env": "^2.19.0-nightly.0",
132
+ "@ledgerhq/live-network": "^2.0.20-nightly.0",
132
133
  "@ledgerhq/live-promise": "^0.1.1",
133
134
  "@ledgerhq/logs": "^6.13.0",
134
135
  "@ledgerhq/types-cryptoassets": "^7.29.0-nightly.0",
135
- "@ledgerhq/types-live": "^6.87.0-nightly.0"
136
+ "@ledgerhq/types-live": "^6.87.0-nightly.1"
136
137
  },
137
138
  "devDependencies": {
138
139
  "@faker-js/faker": "^8.4.1",
@@ -16,12 +16,12 @@ jest.mock("@ledgerhq/logs", () => ({
16
16
  describe("Sui Preload Functions", () => {
17
17
  beforeEach(() => {
18
18
  // Reset the preload data before each test
19
- setSuiPreloadData({ validators: [] });
19
+ setSuiPreloadData({ validators: [], tokens: [] });
20
20
  });
21
21
 
22
22
  describe("getCurrentSuiPreloadData", () => {
23
23
  it("should return the current preloaded data", () => {
24
- const testData: SuiPreloadData = { validators: [] };
24
+ const testData: SuiPreloadData = { validators: [], tokens: [] };
25
25
  setSuiPreloadData(testData);
26
26
 
27
27
  const data = getCurrentSuiPreloadData();
@@ -36,7 +36,7 @@ describe("Sui Preload Functions", () => {
36
36
  });
37
37
 
38
38
  it("should emit updates when data is set", done => {
39
- const testData: SuiPreloadData = { validators: [] };
39
+ const testData: SuiPreloadData = { validators: [], tokens: [] };
40
40
  const updates = getSuiPreloadDataUpdates();
41
41
 
42
42
  updates.pipe(take(1)).subscribe(data => {
@@ -1,15 +1,64 @@
1
1
  import { Observable, Subject } from "rxjs";
2
2
  import { log } from "@ledgerhq/logs";
3
-
4
- import type { SuiPreloadData } from "../types";
3
+ import type { SuiPreloadData, SuiToken } from "../types";
5
4
  import { getValidators } from "../network/sdk";
5
+ import suiTokens, { hash } from "@ledgerhq/cryptoassets/data/sui";
6
+ import { fetchTokensFromCALService } from "@ledgerhq/cryptoassets/crypto-assets-importer/fetch/index";
7
+ import { addTokens, convertSuiTokens } from "@ledgerhq/cryptoassets/tokens";
8
+ import { AxiosError } from "axios";
6
9
 
7
10
  const PRELOAD_MAX_AGE = 30 * 60 * 1000; // 30 minutes
8
11
 
9
- let currentPreloadedData: SuiPreloadData = { validators: [] };
12
+ let currentPreloadedData: SuiPreloadData = { validators: [], tokens: [] };
13
+
14
+ let latestCALHash = "";
15
+
16
+ export const fetchSuiTokens: () => Promise<SuiToken[]> = async () => {
17
+ const embeddedHash = hash;
18
+
19
+ try {
20
+ const { tokens, hash } = await fetchTokensFromCALService(
21
+ {
22
+ blockchain_name: "sui",
23
+ },
24
+ ["id", "name", "ticker", "contract_address", "decimals", "live_signature"],
25
+ latestCALHash || embeddedHash,
26
+ );
27
+
28
+ latestCALHash = hash || "";
29
+
30
+ return tokens.map(token => {
31
+ return [
32
+ token.id,
33
+ token.name,
34
+ token.ticker.toUpperCase(),
35
+ token.contract_address,
36
+ token.decimals,
37
+ token.live_signature,
38
+ ];
39
+ });
40
+ } catch (e) {
41
+ if (e instanceof AxiosError && e.response?.status === 304) {
42
+ log(
43
+ "sui/preload",
44
+ `loading existing fallback tokens for sui with hash ${latestCALHash || embeddedHash}`,
45
+ );
46
+
47
+ if (!latestCALHash) {
48
+ latestCALHash = embeddedHash;
49
+ return suiTokens;
50
+ }
51
+
52
+ return [];
53
+ }
54
+
55
+ log("sui/preload", "failure to retrieve tokens for sui", e);
56
+ return [];
57
+ }
58
+ };
10
59
 
11
60
  function fromHydratePreloadData(data: SuiPreloadData): SuiPreloadData {
12
- return { validators: data?.validators ?? [] };
61
+ return { validators: data?.validators ?? [], tokens: data?.tokens ?? [] };
13
62
  }
14
63
 
15
64
  const updates = new Subject<SuiPreloadData>();
@@ -34,11 +83,24 @@ export const getPreloadStrategy = () => ({
34
83
  preloadMaxAge: PRELOAD_MAX_AGE,
35
84
  });
36
85
 
86
+ let shouldSkipTokenLoading = false;
87
+ export function setShouldSkipTokenLoading(skip: boolean): void {
88
+ shouldSkipTokenLoading = skip;
89
+ }
90
+
37
91
  export const preload = async (): Promise<SuiPreloadData> => {
38
- const validators = await getValidators();
39
92
  log("sui/preload", "preloading sui data...");
40
93
 
41
- return { validators };
94
+ const validators = await getValidators();
95
+
96
+ let tokens: SuiToken[] = [];
97
+ if (!shouldSkipTokenLoading) {
98
+ tokens = await fetchSuiTokens();
99
+ log("sui/preload", "preload " + tokens.length + " tokens");
100
+ addTokens(tokens.map(convertSuiTokens));
101
+ }
102
+
103
+ return { validators, tokens };
42
104
  };
43
105
 
44
106
  export const hydrate = (data: SuiPreloadData) => {
@@ -72,12 +72,24 @@ export type TransactionRaw = TransactionCommonRaw & {
72
72
  */
73
73
  export type SuiValidator = SuiValidatorSummary & { apy: number };
74
74
 
75
+ /**
76
+ * Sui token data from CAL
77
+ */
78
+ export type SuiToken = [
79
+ string, // parent currency id
80
+ string, // name
81
+ string, // ticker
82
+ string, // contract address
83
+ number, // precision
84
+ string, // ledgerSignature
85
+ ];
86
+
75
87
  /**
76
88
  * Sui currency data that will be preloaded.
77
89
  * You can for instance add a list of validators for Proof-of-Stake blockchains,
78
90
  * or any volatile data that could not be set as constants in the code (staking progress, fee estimation variables, etc.)
79
91
  */
80
- export type SuiPreloadData = { validators: SuiValidator[] };
92
+ export type SuiPreloadData = { validators: SuiValidator[]; tokens: SuiToken[] };
81
93
 
82
94
  export type SuiAccount = Account & {
83
95
  // On some blockchain, an account can have resources (gained, delegated, ...)