@ledgerhq/coin-sui 0.16.0-nightly.1 → 0.16.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.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +23 -0
- package/lib/bridge/preload.d.ts +3 -1
- package/lib/bridge/preload.d.ts.map +1 -1
- package/lib/bridge/preload.js +76 -5
- package/lib/bridge/preload.js.map +1 -1
- package/lib/bridge/preload.test.js +3 -3
- package/lib/bridge/preload.test.js.map +1 -1
- package/lib/types/bridge.d.ts +12 -0
- package/lib/types/bridge.d.ts.map +1 -1
- package/lib-es/bridge/preload.d.ts +3 -1
- package/lib-es/bridge/preload.d.ts.map +1 -1
- package/lib-es/bridge/preload.js +50 -4
- package/lib-es/bridge/preload.js.map +1 -1
- package/lib-es/bridge/preload.test.js +3 -3
- package/lib-es/bridge/preload.test.js.map +1 -1
- package/lib-es/types/bridge.d.ts +12 -0
- package/lib-es/types/bridge.d.ts.map +1 -1
- package/package.json +7 -6
- package/src/bridge/preload.test.ts +3 -3
- package/src/bridge/preload.ts +68 -6
- package/src/types/bridge.ts +13 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> @ledgerhq/coin-sui@0.
|
|
2
|
+
> @ledgerhq/coin-sui@0.16.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,28 @@
|
|
|
1
1
|
# @ledgerhq/coin-sui
|
|
2
2
|
|
|
3
|
+
## 0.16.0-nightly.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [[`c6a676f`](https://github.com/LedgerHQ/ledger-live/commit/c6a676ff80581ac19b896adf44d54812983b72da), [`565da80`](https://github.com/LedgerHQ/ledger-live/commit/565da807b1ebbfc830fd0e47b3d8856f88d410a6)]:
|
|
8
|
+
- @ledgerhq/coin-framework@6.7.0-nightly.2
|
|
9
|
+
- @ledgerhq/cryptoassets@13.31.0-nightly.2
|
|
10
|
+
|
|
11
|
+
## 0.16.0-nightly.2
|
|
12
|
+
|
|
13
|
+
### Minor Changes
|
|
14
|
+
|
|
15
|
+
- [#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
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- 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)]:
|
|
20
|
+
- @ledgerhq/cryptoassets@13.31.0-nightly.1
|
|
21
|
+
- @ledgerhq/types-live@6.87.0-nightly.1
|
|
22
|
+
- @ledgerhq/live-env@2.19.0-nightly.0
|
|
23
|
+
- @ledgerhq/coin-framework@6.7.0-nightly.1
|
|
24
|
+
- @ledgerhq/live-network@2.0.20-nightly.0
|
|
25
|
+
|
|
3
26
|
## 0.16.0-nightly.1
|
|
4
27
|
|
|
5
28
|
### Minor Changes
|
package/lib/bridge/preload.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/lib/bridge/preload.js
CHANGED
|
@@ -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
|
-
|
|
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":"
|
|
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;
|
|
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"}
|
package/lib/types/bridge.d.ts
CHANGED
|
@@ -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":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,0BAA0B,EAC1B,SAAS,EACT,YAAY,EACb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEtF,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,YAAY,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACpD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAErC,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,YAAY,GAAG,UAAU,GAAG,YAAY,CAAC;AAEnF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG;IAC5C,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE,KAAK,CAAC;IACd,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CAEtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,kBAAkB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG;IAClD,MAAM,EAAE,KAAK,CAAC;IACd,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CAEf,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjE;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAAE,UAAU,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC;
|
|
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;
|
|
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"}
|
package/lib-es/bridge/preload.js
CHANGED
|
@@ -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
|
-
|
|
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;
|
|
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;
|
|
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"}
|
package/lib-es/types/bridge.d.ts
CHANGED
|
@@ -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":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,0BAA0B,EAC1B,SAAS,EACT,YAAY,EACb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEtF,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,YAAY,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACpD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAErC,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,YAAY,GAAG,UAAU,GAAG,YAAY,CAAC;AAEnF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG;IAC5C,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE,KAAK,CAAC;IACd,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CAEtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,kBAAkB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG;IAClD,MAAM,EAAE,KAAK,CAAC;IACd,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CAEf,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjE;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAAE,UAAU,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/types/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,0BAA0B,EAC1B,SAAS,EACT,YAAY,EACb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEtF,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,YAAY,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACpD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAErC,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,YAAY,GAAG,UAAU,GAAG,YAAY,CAAC;AAEnF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG;IAC5C,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE,KAAK,CAAC;IACd,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CAEtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,kBAAkB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG;IAClD,MAAM,EAAE,KAAK,CAAC;IACd,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CAEf,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;CACP,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAAE,UAAU,EAAE,YAAY,EAAE,CAAC;IAAC,MAAM,EAAE,QAAQ,EAAE,CAAA;CAAE,CAAC;AAEhF,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG;IAEjC,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG;IACvC,YAAY,CAAC,EAAE,eAAe,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AACxD,MAAM,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AAE9D,MAAM,MAAM,YAAY,GAAG,SAAS,CAAC,iBAAiB,CAAC,CAAC;AACxD,MAAM,MAAM,eAAe,GAAG,YAAY,CAAC,oBAAoB,CAAC,CAAC;AAEjE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,SAAS,CAAC;CAC5B,CAAC;AACF,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE1D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,YAAY,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,eAAe,GAAG,oBAAoB,CAAC;AAE7D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAC/B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ledgerhq/coin-sui",
|
|
3
|
-
"version": "0.16.0-nightly.
|
|
3
|
+
"version": "0.16.0-nightly.3",
|
|
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.
|
|
127
|
-
"@ledgerhq/cryptoassets": "^13.31.0-nightly.
|
|
127
|
+
"@ledgerhq/coin-framework": "^6.7.0-nightly.2",
|
|
128
|
+
"@ledgerhq/cryptoassets": "^13.31.0-nightly.2",
|
|
128
129
|
"@ledgerhq/errors": "^6.26.0",
|
|
129
130
|
"@ledgerhq/hw-app-sui": "^1.4.0",
|
|
130
|
-
"@ledgerhq/live-env": "^2.
|
|
131
|
-
"@ledgerhq/live-network": "^2.0.
|
|
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.
|
|
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 => {
|
package/src/bridge/preload.ts
CHANGED
|
@@ -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
|
-
|
|
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) => {
|
package/src/types/bridge.ts
CHANGED
|
@@ -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, ...)
|