@ledgerhq/coin-sui 0.18.0 → 0.18.1-nightly.20251126160702
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/lib/bridge/preload.d.ts +2 -4
- package/lib/bridge/preload.d.ts.map +1 -1
- package/lib/bridge/preload.js +4 -83
- package/lib/bridge/preload.js.map +1 -1
- package/lib/bridge/synchronisation.js +3 -3
- package/lib/bridge/synchronisation.js.map +1 -1
- package/lib-es/bridge/preload.d.ts +2 -4
- package/lib-es/bridge/preload.d.ts.map +1 -1
- package/lib-es/bridge/preload.js +3 -57
- package/lib-es/bridge/preload.js.map +1 -1
- package/lib-es/bridge/synchronisation.js +1 -1
- package/lib-es/bridge/synchronisation.js.map +1 -1
- package/package.json +6 -7
- package/src/bridge/preload.ts +4 -78
- package/src/bridge/synchronisation.test.ts +1 -15
- package/src/bridge/synchronisation.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# @ledgerhq/coin-sui
|
|
2
2
|
|
|
3
|
+
## 0.18.1-nightly.20251126160702
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [[`50aeea1`](https://github.com/LedgerHQ/ledger-live/commit/50aeea1233056e9abff9568eb928927f39e76cff), [`a2ecb55`](https://github.com/LedgerHQ/ledger-live/commit/a2ecb55df9d383dc282f5fe489cb14386208215e), [`fe81926`](https://github.com/LedgerHQ/ledger-live/commit/fe81926afeb2df8e917e6bd1e4cbab13f09647fd), [`67137eb`](https://github.com/LedgerHQ/ledger-live/commit/67137eb5d7f04dd5f3610fdaa4e463d292654105), [`49ef24c`](https://github.com/LedgerHQ/ledger-live/commit/49ef24cbd1948bfd146af0b20f2128951b2dc170), [`b4a4e16`](https://github.com/LedgerHQ/ledger-live/commit/b4a4e160aae6fd64f944ab25633f6931dc4358d3), [`927ae64`](https://github.com/LedgerHQ/ledger-live/commit/927ae64db0bb04af54e25623655a001a68e0f2d3), [`903ea9c`](https://github.com/LedgerHQ/ledger-live/commit/903ea9cdacf704a0119de2803a4f409b775391a5), [`9251b77`](https://github.com/LedgerHQ/ledger-live/commit/9251b77fcb01709723842f19220a2a41a6fc8f3b), [`02ef98f`](https://github.com/LedgerHQ/ledger-live/commit/02ef98faeb13c182ef255e06a43c39abeb55ecc7), [`6d0c6b2`](https://github.com/LedgerHQ/ledger-live/commit/6d0c6b2eda60049d8eebda5de2c54e8f0be7d009), [`0d33751`](https://github.com/LedgerHQ/ledger-live/commit/0d33751bb2ae599d0d26ce6a8efdbe01757f12fb), [`aadcec6`](https://github.com/LedgerHQ/ledger-live/commit/aadcec66847b800f79452ba1df09149e0a1cb9e8), [`b113920`](https://github.com/LedgerHQ/ledger-live/commit/b11392056bc334fc1813c473569ad3ae7be08045), [`ed8532b`](https://github.com/LedgerHQ/ledger-live/commit/ed8532bad754ca2b5f1788c6e92f4646b775ec79), [`88a5018`](https://github.com/LedgerHQ/ledger-live/commit/88a501871d58c980f18495b5b32012a3eaa9ab2c), [`9659a34`](https://github.com/LedgerHQ/ledger-live/commit/9659a34d9998d5c4dff8618bf6cef7d16403680d)]:
|
|
8
|
+
- @ledgerhq/cryptoassets@13.34.0-nightly.20251126160702
|
|
9
|
+
- @ledgerhq/types-live@6.90.0-nightly.20251126160702
|
|
10
|
+
- @ledgerhq/coin-framework@6.10.0-nightly.20251126160702
|
|
11
|
+
- @ledgerhq/live-env@2.22.0-nightly.20251126160702
|
|
12
|
+
- @ledgerhq/live-network@2.1.2-nightly.20251126160702
|
|
13
|
+
|
|
3
14
|
## 0.18.0
|
|
4
15
|
|
|
5
16
|
### Minor Changes
|
package/lib/bridge/preload.d.ts
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { Observable } from "rxjs";
|
|
2
|
-
import type { SuiPreloadData
|
|
3
|
-
export declare const fetchSuiTokens: () => Promise<SuiToken[]>;
|
|
2
|
+
import type { SuiPreloadData } from "../types";
|
|
4
3
|
export declare function getCurrentSuiPreloadData(): SuiPreloadData;
|
|
5
4
|
export declare function setSuiPreloadData(data: SuiPreloadData): void;
|
|
6
5
|
export declare function getSuiPreloadDataUpdates(): Observable<SuiPreloadData>;
|
|
7
6
|
export declare const getPreloadStrategy: () => {
|
|
8
7
|
preloadMaxAge: number;
|
|
9
8
|
};
|
|
10
|
-
export declare function setShouldSkipTokenLoading(skip: boolean): void;
|
|
11
9
|
export declare const preload: () => Promise<SuiPreloadData>;
|
|
12
|
-
export declare const hydrate: (
|
|
10
|
+
export declare const hydrate: (_data: SuiPreloadData) => void;
|
|
13
11
|
//# 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;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAQ/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,CAEtD,CAAC;AAEF,eAAO,MAAM,OAAO,UAAW,cAAc,SAE5C,CAAC"}
|
package/lib/bridge/preload.js
CHANGED
|
@@ -1,74 +1,9 @@
|
|
|
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
|
-
};
|
|
25
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.hydrate = exports.preload = exports.
|
|
3
|
+
exports.hydrate = exports.preload = exports.getPreloadStrategy = exports.getSuiPreloadDataUpdates = exports.setSuiPreloadData = exports.getCurrentSuiPreloadData = void 0;
|
|
27
4
|
const rxjs_1 = require("rxjs");
|
|
28
|
-
const logs_1 = require("@ledgerhq/logs");
|
|
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 legacy_utils_1 = require("@ledgerhq/cryptoassets/legacy/legacy-utils");
|
|
33
|
-
const axios_1 = require("axios");
|
|
34
5
|
const PRELOAD_MAX_AGE = 30 * 60 * 1000; // 30 minutes
|
|
35
6
|
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;
|
|
69
|
-
function fromHydratePreloadData(data) {
|
|
70
|
-
return { validators: data?.validators ?? [], tokens: data?.tokens ?? [] };
|
|
71
|
-
}
|
|
72
7
|
const updates = new rxjs_1.Subject();
|
|
73
8
|
function getCurrentSuiPreloadData() {
|
|
74
9
|
return currentPreloadedData;
|
|
@@ -89,26 +24,12 @@ const getPreloadStrategy = () => ({
|
|
|
89
24
|
preloadMaxAge: PRELOAD_MAX_AGE,
|
|
90
25
|
});
|
|
91
26
|
exports.getPreloadStrategy = getPreloadStrategy;
|
|
92
|
-
let shouldSkipTokenLoading = false;
|
|
93
|
-
function setShouldSkipTokenLoading(skip) {
|
|
94
|
-
shouldSkipTokenLoading = skip;
|
|
95
|
-
}
|
|
96
|
-
exports.setShouldSkipTokenLoading = setShouldSkipTokenLoading;
|
|
97
27
|
const preload = async () => {
|
|
98
|
-
|
|
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, legacy_utils_1.addTokens)(tokens.map(legacy_utils_1.convertSuiTokens));
|
|
105
|
-
}
|
|
106
|
-
return { validators, tokens };
|
|
28
|
+
return { validators: [], tokens: [] };
|
|
107
29
|
};
|
|
108
30
|
exports.preload = preload;
|
|
109
|
-
const hydrate = (
|
|
110
|
-
|
|
111
|
-
setSuiPreloadData(hydrated);
|
|
31
|
+
const hydrate = (_data) => {
|
|
32
|
+
// noop
|
|
112
33
|
};
|
|
113
34
|
exports.hydrate = hydrate;
|
|
114
35
|
//# sourceMappingURL=preload.js.map
|
|
@@ -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":";;;AAAA,+BAA2C;AAG3C,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AAErD,IAAI,oBAAoB,GAAmB,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAE1E,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,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACxC,CAAC,CAAC;AAFW,QAAA,OAAO,WAElB;AAEK,MAAM,OAAO,GAAG,CAAC,KAAqB,EAAE,EAAE;IAC/C,OAAO;AACT,CAAC,CAAC;AAFW,QAAA,OAAO,WAElB"}
|
|
@@ -10,7 +10,7 @@ const jsHelpers_1 = require("@ledgerhq/coin-framework/bridge/jsHelpers");
|
|
|
10
10
|
const network_1 = require("../network");
|
|
11
11
|
const sdk_1 = require("../network/sdk");
|
|
12
12
|
const live_promise_1 = require("@ledgerhq/live-promise");
|
|
13
|
-
const
|
|
13
|
+
const state_1 = require("@ledgerhq/cryptoassets/state");
|
|
14
14
|
/**
|
|
15
15
|
* Get the shape of the account including its operations and balance.
|
|
16
16
|
* @function getAccountShape
|
|
@@ -42,7 +42,7 @@ const getAccountShape = async (info, syncConfig) => {
|
|
|
42
42
|
const balance = accountBalances.find(({ coinType }) => coinType === sdk_1.DEFAULT_COIN_TYPE)?.balance ?? (0, bignumber_js_1.default)(0);
|
|
43
43
|
const subAccountsBalances = [];
|
|
44
44
|
for (const accountBalance of accountBalances) {
|
|
45
|
-
const token = await (0,
|
|
45
|
+
const token = await (0, state_1.getCryptoAssetsStore)().findTokenByAddressInCurrency(accountBalance.coinType, currency.id);
|
|
46
46
|
if (token) {
|
|
47
47
|
subAccountsBalances.push(accountBalance);
|
|
48
48
|
}
|
|
@@ -94,7 +94,7 @@ async function buildSubAccounts({ accountId, operations, subAccountsBalances, sy
|
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
await (0, live_promise_1.promiseAllBatched)(3, subAccountsBalances, async (accountBalance) => {
|
|
97
|
-
const token = await (0,
|
|
97
|
+
const token = await (0, state_1.getCryptoAssetsStore)().findTokenByAddressInCurrency(accountBalance.coinType, currencyId);
|
|
98
98
|
if (token && !blacklistedTokenIds.includes(token.id)) {
|
|
99
99
|
const initialTokenAccount = existingAccountByTicker[token.ticker];
|
|
100
100
|
const tokenAccount = await buildSubAccount({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synchronisation.js","sourceRoot":"","sources":["../../src/bridge/synchronisation.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAqC;AACrC,kEAIgD;AAChD,yEAImD;AAEnD,wCAA6E;AAC7E,wCAAmE;AAInE,yDAA2D;AAC3D,
|
|
1
|
+
{"version":3,"file":"synchronisation.js","sourceRoot":"","sources":["../../src/bridge/synchronisation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { Observable } from "rxjs";
|
|
2
|
-
import type { SuiPreloadData
|
|
3
|
-
export declare const fetchSuiTokens: () => Promise<SuiToken[]>;
|
|
2
|
+
import type { SuiPreloadData } from "../types";
|
|
4
3
|
export declare function getCurrentSuiPreloadData(): SuiPreloadData;
|
|
5
4
|
export declare function setSuiPreloadData(data: SuiPreloadData): void;
|
|
6
5
|
export declare function getSuiPreloadDataUpdates(): Observable<SuiPreloadData>;
|
|
7
6
|
export declare const getPreloadStrategy: () => {
|
|
8
7
|
preloadMaxAge: number;
|
|
9
8
|
};
|
|
10
|
-
export declare function setShouldSkipTokenLoading(skip: boolean): void;
|
|
11
9
|
export declare const preload: () => Promise<SuiPreloadData>;
|
|
12
|
-
export declare const hydrate: (
|
|
10
|
+
export declare const hydrate: (_data: SuiPreloadData) => void;
|
|
13
11
|
//# 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;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAQ/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,CAEtD,CAAC;AAEF,eAAO,MAAM,OAAO,UAAW,cAAc,SAE5C,CAAC"}
|
package/lib-es/bridge/preload.js
CHANGED
|
@@ -1,47 +1,6 @@
|
|
|
1
1
|
import { Subject } from "rxjs";
|
|
2
|
-
import { log } from "@ledgerhq/logs";
|
|
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/legacy/legacy-utils";
|
|
7
|
-
import { AxiosError } from "axios";
|
|
8
2
|
const PRELOAD_MAX_AGE = 30 * 60 * 1000; // 30 minutes
|
|
9
3
|
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
|
-
};
|
|
42
|
-
function fromHydratePreloadData(data) {
|
|
43
|
-
return { validators: data?.validators ?? [], tokens: data?.tokens ?? [] };
|
|
44
|
-
}
|
|
45
4
|
const updates = new Subject();
|
|
46
5
|
export function getCurrentSuiPreloadData() {
|
|
47
6
|
return currentPreloadedData;
|
|
@@ -58,23 +17,10 @@ export function getSuiPreloadDataUpdates() {
|
|
|
58
17
|
export const getPreloadStrategy = () => ({
|
|
59
18
|
preloadMaxAge: PRELOAD_MAX_AGE,
|
|
60
19
|
});
|
|
61
|
-
let shouldSkipTokenLoading = false;
|
|
62
|
-
export function setShouldSkipTokenLoading(skip) {
|
|
63
|
-
shouldSkipTokenLoading = skip;
|
|
64
|
-
}
|
|
65
20
|
export const preload = async () => {
|
|
66
|
-
|
|
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 };
|
|
21
|
+
return { validators: [], tokens: [] };
|
|
75
22
|
};
|
|
76
|
-
export const hydrate = (
|
|
77
|
-
|
|
78
|
-
setSuiPreloadData(hydrated);
|
|
23
|
+
export const hydrate = (_data) => {
|
|
24
|
+
// noop
|
|
79
25
|
};
|
|
80
26
|
//# sourceMappingURL=preload.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preload.js","sourceRoot":"","sources":["../../src/bridge/preload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,OAAO,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"preload.js","sourceRoot":"","sources":["../../src/bridge/preload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,OAAO,EAAE,MAAM,MAAM,CAAC;AAG3C,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AAErD,IAAI,oBAAoB,GAAmB,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAE1E,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,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAqB,EAAE,EAAE;IAC/C,OAAO;AACT,CAAC,CAAC"}
|
|
@@ -4,7 +4,7 @@ import { makeSync, mergeOps, } from "@ledgerhq/coin-framework/bridge/jsHelpers";
|
|
|
4
4
|
import { getAccountBalances, getOperations, getStakesRaw } from "../network";
|
|
5
5
|
import { DEFAULT_COIN_TYPE } from "../network/sdk";
|
|
6
6
|
import { promiseAllBatched } from "@ledgerhq/live-promise";
|
|
7
|
-
import { getCryptoAssetsStore } from "@ledgerhq/
|
|
7
|
+
import { getCryptoAssetsStore } from "@ledgerhq/cryptoassets/state";
|
|
8
8
|
/**
|
|
9
9
|
* Get the shape of the account including its operations and balance.
|
|
10
10
|
* @function getAccountShape
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synchronisation.js","sourceRoot":"","sources":["../../src/bridge/synchronisation.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,QAAQ,EACR,QAAQ,GAET,MAAM,2CAA2C,CAAC;AAEnD,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAkB,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAInE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"synchronisation.js","sourceRoot":"","sources":["../../src/bridge/synchronisation.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.18.
|
|
3
|
+
"version": "0.18.1-nightly.20251126160702",
|
|
4
4
|
"description": "Ledger Sui Coin integration",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ledger",
|
|
@@ -116,20 +116,19 @@
|
|
|
116
116
|
"dependencies": {
|
|
117
117
|
"@mysten/signers": "0.5.0",
|
|
118
118
|
"@mysten/sui": "1.38.0",
|
|
119
|
-
"axios": "1.12.2",
|
|
120
119
|
"bignumber.js": "^9.1.2",
|
|
121
120
|
"lodash": "4.17.21",
|
|
122
121
|
"rxjs": "^7.8.1",
|
|
123
|
-
"@ledgerhq/coin-framework": "^6.
|
|
124
|
-
"@ledgerhq/cryptoassets": "^13.
|
|
122
|
+
"@ledgerhq/coin-framework": "^6.10.0-nightly.20251126160702",
|
|
123
|
+
"@ledgerhq/cryptoassets": "^13.34.0-nightly.20251126160702",
|
|
125
124
|
"@ledgerhq/errors": "^6.27.0",
|
|
126
125
|
"@ledgerhq/hw-app-sui": "^1.4.0",
|
|
127
|
-
"@ledgerhq/live-env": "^2.
|
|
128
|
-
"@ledgerhq/live-network": "^2.1.
|
|
126
|
+
"@ledgerhq/live-env": "^2.22.0-nightly.20251126160702",
|
|
127
|
+
"@ledgerhq/live-network": "^2.1.2-nightly.20251126160702",
|
|
129
128
|
"@ledgerhq/live-promise": "^0.1.1",
|
|
130
129
|
"@ledgerhq/logs": "^6.13.0",
|
|
131
130
|
"@ledgerhq/types-cryptoassets": "^7.30.0",
|
|
132
|
-
"@ledgerhq/types-live": "^6.
|
|
131
|
+
"@ledgerhq/types-live": "^6.90.0-nightly.20251126160702"
|
|
133
132
|
},
|
|
134
133
|
"devDependencies": {
|
|
135
134
|
"@faker-js/faker": "^8.4.1",
|
package/src/bridge/preload.ts
CHANGED
|
@@ -1,66 +1,10 @@
|
|
|
1
1
|
import { Observable, Subject } from "rxjs";
|
|
2
|
-
import {
|
|
3
|
-
import type { SuiPreloadData, SuiToken } from "../types";
|
|
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/legacy/legacy-utils";
|
|
8
|
-
import { AxiosError } from "axios";
|
|
2
|
+
import type { SuiPreloadData } from "../types";
|
|
9
3
|
|
|
10
4
|
const PRELOAD_MAX_AGE = 30 * 60 * 1000; // 30 minutes
|
|
11
5
|
|
|
12
6
|
let currentPreloadedData: SuiPreloadData = { validators: [], tokens: [] };
|
|
13
7
|
|
|
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
|
-
};
|
|
59
|
-
|
|
60
|
-
function fromHydratePreloadData(data: SuiPreloadData): SuiPreloadData {
|
|
61
|
-
return { validators: data?.validators ?? [], tokens: data?.tokens ?? [] };
|
|
62
|
-
}
|
|
63
|
-
|
|
64
8
|
const updates = new Subject<SuiPreloadData>();
|
|
65
9
|
|
|
66
10
|
export function getCurrentSuiPreloadData(): SuiPreloadData {
|
|
@@ -83,28 +27,10 @@ export const getPreloadStrategy = () => ({
|
|
|
83
27
|
preloadMaxAge: PRELOAD_MAX_AGE,
|
|
84
28
|
});
|
|
85
29
|
|
|
86
|
-
let shouldSkipTokenLoading = false;
|
|
87
|
-
export function setShouldSkipTokenLoading(skip: boolean): void {
|
|
88
|
-
shouldSkipTokenLoading = skip;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
30
|
export const preload = async (): Promise<SuiPreloadData> => {
|
|
92
|
-
|
|
93
|
-
|
|
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 };
|
|
31
|
+
return { validators: [], tokens: [] };
|
|
104
32
|
};
|
|
105
33
|
|
|
106
|
-
export const hydrate = (
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
setSuiPreloadData(hydrated);
|
|
34
|
+
export const hydrate = (_data: SuiPreloadData) => {
|
|
35
|
+
// noop
|
|
110
36
|
};
|
|
@@ -9,24 +9,10 @@ import { getAccountShape } from "./synchronisation";
|
|
|
9
9
|
import coinConfig from "../config";
|
|
10
10
|
import { getFullnodeUrl } from "@mysten/sui/client";
|
|
11
11
|
import * as networkModule from "../network";
|
|
12
|
-
import { setCryptoAssetsStore } from "@ledgerhq/
|
|
12
|
+
import { setCryptoAssetsStore } from "@ledgerhq/cryptoassets/state";
|
|
13
13
|
import type { CryptoAssetsStore } from "@ledgerhq/types-live";
|
|
14
14
|
import type { TokenCurrency } from "@ledgerhq/types-cryptoassets";
|
|
15
15
|
|
|
16
|
-
// Mock findTokenById
|
|
17
|
-
jest.mock("@ledgerhq/cryptoassets/tokens", () => ({
|
|
18
|
-
findTokenById: async (coinType: string) => ({
|
|
19
|
-
id: coinType,
|
|
20
|
-
ticker: "TEST",
|
|
21
|
-
name: "Test Token",
|
|
22
|
-
countervalueTicker: "TEST",
|
|
23
|
-
standard: "SUI-20",
|
|
24
|
-
tokenType: "sui",
|
|
25
|
-
parentCurrency: { id: "sui" },
|
|
26
|
-
contract: "0x123",
|
|
27
|
-
}),
|
|
28
|
-
}));
|
|
29
|
-
|
|
30
16
|
jest.mock("../network", () => {
|
|
31
17
|
const mockGetAccountBalances = jest.fn();
|
|
32
18
|
const mockGetOperations = jest.fn();
|
|
@@ -16,7 +16,7 @@ import { SuiOperationExtra, SuiAccount } from "../types";
|
|
|
16
16
|
import type { SyncConfig, TokenAccount } from "@ledgerhq/types-live";
|
|
17
17
|
import { TokenCurrency } from "@ledgerhq/types-cryptoassets";
|
|
18
18
|
import { promiseAllBatched } from "@ledgerhq/live-promise";
|
|
19
|
-
import { getCryptoAssetsStore } from "@ledgerhq/
|
|
19
|
+
import { getCryptoAssetsStore } from "@ledgerhq/cryptoassets/state";
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
22
|
* Get the shape of the account including its operations and balance.
|