@ledgerhq/cryptoassets 13.31.0-nightly.6 → 13.31.0-nightly.7
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/.unimportedrc.json +1 -0
- package/CHANGELOG.md +12 -0
- package/jest.config.ts +1 -0
- package/lib/hooks.d.ts +21 -0
- package/lib/hooks.d.ts.map +1 -0
- package/lib/hooks.js +82 -0
- package/lib/hooks.js.map +1 -0
- package/lib-es/hooks.d.ts +21 -0
- package/lib-es/hooks.d.ts.map +1 -0
- package/lib-es/hooks.js +78 -0
- package/lib-es/hooks.js.map +1 -0
- package/package.json +16 -3
- package/src/hooks.test.ts +278 -0
- package/src/hooks.ts +104 -0
- package/lib/api-asset-converter.test.d.ts +0 -2
- package/lib/api-asset-converter.test.d.ts.map +0 -1
- package/lib/api-asset-converter.test.js +0 -240
- package/lib/api-asset-converter.test.js.map +0 -1
- package/lib/api-token-converter.test.d.ts +0 -2
- package/lib/api-token-converter.test.d.ts.map +0 -1
- package/lib/api-token-converter.test.js +0 -316
- package/lib/api-token-converter.test.js.map +0 -1
- package/lib/backtest-tokenTypes.test.d.ts +0 -2
- package/lib/backtest-tokenTypes.test.d.ts.map +0 -1
- package/lib/backtest-tokenTypes.test.js +0 -31
- package/lib/backtest-tokenTypes.test.js.map +0 -1
- package/lib/crypto-assets-importer/fetch/fetch.test.d.ts +0 -2
- package/lib/crypto-assets-importer/fetch/fetch.test.d.ts.map +0 -1
- package/lib/crypto-assets-importer/fetch/fetch.test.js +0 -28
- package/lib/crypto-assets-importer/fetch/fetch.test.js.map +0 -1
- package/lib/crypto-assets-importer/importers/apt/aptos.test.d.ts +0 -2
- package/lib/crypto-assets-importer/importers/apt/aptos.test.d.ts.map +0 -1
- package/lib/crypto-assets-importer/importers/apt/aptos.test.js +0 -69
- package/lib/crypto-assets-importer/importers/apt/aptos.test.js.map +0 -1
- package/lib/crypto-assets-importer/importers/asa/asa.test.d.ts +0 -2
- package/lib/crypto-assets-importer/importers/asa/asa.test.d.ts.map +0 -1
- package/lib/crypto-assets-importer/importers/asa/asa.test.js +0 -63
- package/lib/crypto-assets-importer/importers/asa/asa.test.js.map +0 -1
- package/lib/crypto-assets-importer/importers/cardanoNative/cardanoNative.test.d.ts +0 -2
- package/lib/crypto-assets-importer/importers/cardanoNative/cardanoNative.test.d.ts.map +0 -1
- package/lib/crypto-assets-importer/importers/cardanoNative/cardanoNative.test.js +0 -74
- package/lib/crypto-assets-importer/importers/cardanoNative/cardanoNative.test.js.map +0 -1
- package/lib/crypto-assets-importer/importers/eip712/eip712.test.d.ts +0 -2
- package/lib/crypto-assets-importer/importers/eip712/eip712.test.d.ts.map +0 -1
- package/lib/crypto-assets-importer/importers/eip712/eip712.test.js +0 -45
- package/lib/crypto-assets-importer/importers/eip712/eip712.test.js.map +0 -1
- package/lib/crypto-assets-importer/importers/esdt/esdt.test.d.ts +0 -2
- package/lib/crypto-assets-importer/importers/esdt/esdt.test.d.ts.map +0 -1
- package/lib/crypto-assets-importer/importers/esdt/esdt.test.js +0 -65
- package/lib/crypto-assets-importer/importers/esdt/esdt.test.js.map +0 -1
- package/lib/crypto-assets-importer/importers/evm/evm.test.d.ts +0 -2
- package/lib/crypto-assets-importer/importers/evm/evm.test.d.ts.map +0 -1
- package/lib/crypto-assets-importer/importers/evm/evm.test.js +0 -62
- package/lib/crypto-assets-importer/importers/evm/evm.test.js.map +0 -1
- package/lib/crypto-assets-importer/importers/filecoin/filecoin-erc20.test.d.ts +0 -2
- package/lib/crypto-assets-importer/importers/filecoin/filecoin-erc20.test.d.ts.map +0 -1
- package/lib/crypto-assets-importer/importers/filecoin/filecoin-erc20.test.js +0 -66
- package/lib/crypto-assets-importer/importers/filecoin/filecoin-erc20.test.js.map +0 -1
- package/lib/crypto-assets-importer/importers/hedera/hedera.test.d.ts +0 -2
- package/lib/crypto-assets-importer/importers/hedera/hedera.test.d.ts.map +0 -1
- package/lib/crypto-assets-importer/importers/hedera/hedera.test.js +0 -64
- package/lib/crypto-assets-importer/importers/hedera/hedera.test.js.map +0 -1
- package/lib/crypto-assets-importer/importers/spl/spl.test.d.ts +0 -2
- package/lib/crypto-assets-importer/importers/spl/spl.test.d.ts.map +0 -1
- package/lib/crypto-assets-importer/importers/spl/spl.test.js +0 -73
- package/lib/crypto-assets-importer/importers/spl/spl.test.js.map +0 -1
- package/lib/crypto-assets-importer/importers/stellar/stellar.test.d.ts +0 -2
- package/lib/crypto-assets-importer/importers/stellar/stellar.test.d.ts.map +0 -1
- package/lib/crypto-assets-importer/importers/stellar/stellar.test.js +0 -56
- package/lib/crypto-assets-importer/importers/stellar/stellar.test.js.map +0 -1
- package/lib/crypto-assets-importer/importers/sui/sui.test.d.ts +0 -2
- package/lib/crypto-assets-importer/importers/sui/sui.test.d.ts.map +0 -1
- package/lib/crypto-assets-importer/importers/sui/sui.test.js +0 -74
- package/lib/crypto-assets-importer/importers/sui/sui.test.js.map +0 -1
- package/lib/crypto-assets-importer/importers/ton/ton-jetton.test.d.ts +0 -2
- package/lib/crypto-assets-importer/importers/ton/ton-jetton.test.d.ts.map +0 -1
- package/lib/crypto-assets-importer/importers/ton/ton-jetton.test.js +0 -59
- package/lib/crypto-assets-importer/importers/ton/ton-jetton.test.js.map +0 -1
- package/lib/crypto-assets-importer/importers/trc20/trc20.test.d.ts +0 -2
- package/lib/crypto-assets-importer/importers/trc20/trc20.test.d.ts.map +0 -1
- package/lib/crypto-assets-importer/importers/trc20/trc20.test.js +0 -71
- package/lib/crypto-assets-importer/importers/trc20/trc20.test.js.map +0 -1
- package/lib/crypto-assets-importer/importers/vip180/vip180.test.d.ts +0 -2
- package/lib/crypto-assets-importer/importers/vip180/vip180.test.d.ts.map +0 -1
- package/lib/crypto-assets-importer/importers/vip180/vip180.test.js +0 -64
- package/lib/crypto-assets-importer/importers/vip180/vip180.test.js.map +0 -1
- package/lib/currencies.test.d.ts +0 -2
- package/lib/currencies.test.d.ts.map +0 -1
- package/lib/currencies.test.js +0 -230
- package/lib/currencies.test.js.map +0 -1
- package/lib/legacy/legacy.test.d.ts +0 -2
- package/lib/legacy/legacy.test.d.ts.map +0 -1
- package/lib/legacy/legacy.test.js +0 -466
- package/lib/legacy/legacy.test.js.map +0 -1
- package/lib/tokens.test.d.ts +0 -2
- package/lib/tokens.test.d.ts.map +0 -1
- package/lib/tokens.test.js +0 -118
- package/lib/tokens.test.js.map +0 -1
- package/lib-es/api-asset-converter.test.d.ts +0 -2
- package/lib-es/api-asset-converter.test.d.ts.map +0 -1
- package/lib-es/api-asset-converter.test.js +0 -238
- package/lib-es/api-asset-converter.test.js.map +0 -1
- package/lib-es/api-token-converter.test.d.ts +0 -2
- package/lib-es/api-token-converter.test.d.ts.map +0 -1
- package/lib-es/api-token-converter.test.js +0 -314
- package/lib-es/api-token-converter.test.js.map +0 -1
- package/lib-es/backtest-tokenTypes.test.d.ts +0 -2
- package/lib-es/backtest-tokenTypes.test.d.ts.map +0 -1
- package/lib-es/backtest-tokenTypes.test.js +0 -29
- package/lib-es/backtest-tokenTypes.test.js.map +0 -1
- package/lib-es/crypto-assets-importer/fetch/fetch.test.d.ts +0 -2
- package/lib-es/crypto-assets-importer/fetch/fetch.test.d.ts.map +0 -1
- package/lib-es/crypto-assets-importer/fetch/fetch.test.js +0 -23
- package/lib-es/crypto-assets-importer/fetch/fetch.test.js.map +0 -1
- package/lib-es/crypto-assets-importer/importers/apt/aptos.test.d.ts +0 -2
- package/lib-es/crypto-assets-importer/importers/apt/aptos.test.d.ts.map +0 -1
- package/lib-es/crypto-assets-importer/importers/apt/aptos.test.js +0 -64
- package/lib-es/crypto-assets-importer/importers/apt/aptos.test.js.map +0 -1
- package/lib-es/crypto-assets-importer/importers/asa/asa.test.d.ts +0 -2
- package/lib-es/crypto-assets-importer/importers/asa/asa.test.d.ts.map +0 -1
- package/lib-es/crypto-assets-importer/importers/asa/asa.test.js +0 -58
- package/lib-es/crypto-assets-importer/importers/asa/asa.test.js.map +0 -1
- package/lib-es/crypto-assets-importer/importers/cardanoNative/cardanoNative.test.d.ts +0 -2
- package/lib-es/crypto-assets-importer/importers/cardanoNative/cardanoNative.test.d.ts.map +0 -1
- package/lib-es/crypto-assets-importer/importers/cardanoNative/cardanoNative.test.js +0 -69
- package/lib-es/crypto-assets-importer/importers/cardanoNative/cardanoNative.test.js.map +0 -1
- package/lib-es/crypto-assets-importer/importers/eip712/eip712.test.d.ts +0 -2
- package/lib-es/crypto-assets-importer/importers/eip712/eip712.test.d.ts.map +0 -1
- package/lib-es/crypto-assets-importer/importers/eip712/eip712.test.js +0 -40
- package/lib-es/crypto-assets-importer/importers/eip712/eip712.test.js.map +0 -1
- package/lib-es/crypto-assets-importer/importers/esdt/esdt.test.d.ts +0 -2
- package/lib-es/crypto-assets-importer/importers/esdt/esdt.test.d.ts.map +0 -1
- package/lib-es/crypto-assets-importer/importers/esdt/esdt.test.js +0 -60
- package/lib-es/crypto-assets-importer/importers/esdt/esdt.test.js.map +0 -1
- package/lib-es/crypto-assets-importer/importers/evm/evm.test.d.ts +0 -2
- package/lib-es/crypto-assets-importer/importers/evm/evm.test.d.ts.map +0 -1
- package/lib-es/crypto-assets-importer/importers/evm/evm.test.js +0 -57
- package/lib-es/crypto-assets-importer/importers/evm/evm.test.js.map +0 -1
- package/lib-es/crypto-assets-importer/importers/filecoin/filecoin-erc20.test.d.ts +0 -2
- package/lib-es/crypto-assets-importer/importers/filecoin/filecoin-erc20.test.d.ts.map +0 -1
- package/lib-es/crypto-assets-importer/importers/filecoin/filecoin-erc20.test.js +0 -61
- package/lib-es/crypto-assets-importer/importers/filecoin/filecoin-erc20.test.js.map +0 -1
- package/lib-es/crypto-assets-importer/importers/hedera/hedera.test.d.ts +0 -2
- package/lib-es/crypto-assets-importer/importers/hedera/hedera.test.d.ts.map +0 -1
- package/lib-es/crypto-assets-importer/importers/hedera/hedera.test.js +0 -59
- package/lib-es/crypto-assets-importer/importers/hedera/hedera.test.js.map +0 -1
- package/lib-es/crypto-assets-importer/importers/spl/spl.test.d.ts +0 -2
- package/lib-es/crypto-assets-importer/importers/spl/spl.test.d.ts.map +0 -1
- package/lib-es/crypto-assets-importer/importers/spl/spl.test.js +0 -68
- package/lib-es/crypto-assets-importer/importers/spl/spl.test.js.map +0 -1
- package/lib-es/crypto-assets-importer/importers/stellar/stellar.test.d.ts +0 -2
- package/lib-es/crypto-assets-importer/importers/stellar/stellar.test.d.ts.map +0 -1
- package/lib-es/crypto-assets-importer/importers/stellar/stellar.test.js +0 -51
- package/lib-es/crypto-assets-importer/importers/stellar/stellar.test.js.map +0 -1
- package/lib-es/crypto-assets-importer/importers/sui/sui.test.d.ts +0 -2
- package/lib-es/crypto-assets-importer/importers/sui/sui.test.d.ts.map +0 -1
- package/lib-es/crypto-assets-importer/importers/sui/sui.test.js +0 -69
- package/lib-es/crypto-assets-importer/importers/sui/sui.test.js.map +0 -1
- package/lib-es/crypto-assets-importer/importers/ton/ton-jetton.test.d.ts +0 -2
- package/lib-es/crypto-assets-importer/importers/ton/ton-jetton.test.d.ts.map +0 -1
- package/lib-es/crypto-assets-importer/importers/ton/ton-jetton.test.js +0 -54
- package/lib-es/crypto-assets-importer/importers/ton/ton-jetton.test.js.map +0 -1
- package/lib-es/crypto-assets-importer/importers/trc20/trc20.test.d.ts +0 -2
- package/lib-es/crypto-assets-importer/importers/trc20/trc20.test.d.ts.map +0 -1
- package/lib-es/crypto-assets-importer/importers/trc20/trc20.test.js +0 -66
- package/lib-es/crypto-assets-importer/importers/trc20/trc20.test.js.map +0 -1
- package/lib-es/crypto-assets-importer/importers/vip180/vip180.test.d.ts +0 -2
- package/lib-es/crypto-assets-importer/importers/vip180/vip180.test.d.ts.map +0 -1
- package/lib-es/crypto-assets-importer/importers/vip180/vip180.test.js +0 -59
- package/lib-es/crypto-assets-importer/importers/vip180/vip180.test.js.map +0 -1
- package/lib-es/currencies.test.d.ts +0 -2
- package/lib-es/currencies.test.d.ts.map +0 -1
- package/lib-es/currencies.test.js +0 -228
- package/lib-es/currencies.test.js.map +0 -1
- package/lib-es/legacy/legacy.test.d.ts +0 -2
- package/lib-es/legacy/legacy.test.d.ts.map +0 -1
- package/lib-es/legacy/legacy.test.js +0 -464
- package/lib-es/legacy/legacy.test.js.map +0 -1
- package/lib-es/tokens.test.d.ts +0 -2
- package/lib-es/tokens.test.d.ts.map +0 -1
- package/lib-es/tokens.test.js +0 -116
- package/lib-es/tokens.test.js.map +0 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> @ledgerhq/cryptoassets@13.31.0-nightly.
|
|
2
|
+
> @ledgerhq/cryptoassets@13.31.0-nightly.6 build /home/runner/work/ledger-live/ledger-live/libs/ledgerjs/packages/cryptoassets
|
|
3
3
|
> tsc && tsc -m esnext --moduleResolution bundler --outDir lib-es
|
|
4
4
|
|
package/.unimportedrc.json
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @ledgerhq/cryptoassets
|
|
2
2
|
|
|
3
|
+
## 13.31.0-nightly.7
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#12257](https://github.com/LedgerHQ/ledger-live/pull/12257) [`b4ceaff`](https://github.com/LedgerHQ/ledger-live/commit/b4ceaff2ecf68d8a14e09801c76ab0b014c45286) Thanks [@gre-ledger](https://github.com/gre-ledger)! - Introduce hooks in cryptoassets
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [[`f392f69`](https://github.com/LedgerHQ/ledger-live/commit/f392f6912f445cc2f7cf4dfcfd030fa3da76f736), [`cbc0648`](https://github.com/LedgerHQ/ledger-live/commit/cbc064885d8e0459e40d327a2e5389204b3ec705)]:
|
|
12
|
+
- @ledgerhq/types-live@6.87.0-nightly.5
|
|
13
|
+
- @ledgerhq/live-env@2.19.0-nightly.2
|
|
14
|
+
|
|
3
15
|
## 13.31.0-nightly.6
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/jest.config.ts
CHANGED
package/lib/hooks.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { TokenCurrency } from "@ledgerhq/types-cryptoassets";
|
|
2
|
+
/**
|
|
3
|
+
* CryptoAssetsHooks is the hooks interface version of the CryptoAssetsStore
|
|
4
|
+
* This work provide a common interface for the hooks, and the backend implementation will be completed in the future
|
|
5
|
+
* See https://github.com/LedgerHQ/ledger-live/pull/11951
|
|
6
|
+
*/
|
|
7
|
+
export declare function createCryptoAssetsHooks(config?: {
|
|
8
|
+
useCALBackend?: false;
|
|
9
|
+
api?: unknown;
|
|
10
|
+
}): Hooks;
|
|
11
|
+
type TokenResult = {
|
|
12
|
+
token: TokenCurrency | undefined;
|
|
13
|
+
loading: boolean;
|
|
14
|
+
error: unknown;
|
|
15
|
+
};
|
|
16
|
+
type Hooks = {
|
|
17
|
+
useTokenById: (id: string) => TokenResult;
|
|
18
|
+
useTokenByAddressInCurrency: (address: string, currencyId: string) => TokenResult;
|
|
19
|
+
};
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,GAAE;IACN,aAAa,CAAC,EAAE,KAAK,CAAC;IACtB,GAAG,CAAC,EAAE,OAAO,CAAC;CACV,GACL,KAAK,CASP;AAED,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,WAAW,CAAC;IAC1C,2BAA2B,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,WAAW,CAAC;CACnF,CAAC"}
|
package/lib/hooks.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createCryptoAssetsHooks = void 0;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const legacy_store_1 = require("./legacy/legacy-store");
|
|
6
|
+
/**
|
|
7
|
+
* CryptoAssetsHooks is the hooks interface version of the CryptoAssetsStore
|
|
8
|
+
* This work provide a common interface for the hooks, and the backend implementation will be completed in the future
|
|
9
|
+
* See https://github.com/LedgerHQ/ledger-live/pull/11951
|
|
10
|
+
*/
|
|
11
|
+
function createCryptoAssetsHooks(config = {}) {
|
|
12
|
+
if (config.useCALBackend) {
|
|
13
|
+
throw new Error("backend is not supported yet");
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
return {
|
|
17
|
+
useTokenById: useLegacyTokenById,
|
|
18
|
+
useTokenByAddressInCurrency: useLegacyTokenByAddressInCurrency,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.createCryptoAssetsHooks = createCryptoAssetsHooks;
|
|
23
|
+
/////////// Legacy hooks using legacyCryptoAssetsStore ///////////
|
|
24
|
+
function useLegacyTokenById(id) {
|
|
25
|
+
const [token, setToken] = (0, react_1.useState)(undefined);
|
|
26
|
+
const [loading, setLoading] = (0, react_1.useState)(true);
|
|
27
|
+
const [error, setError] = (0, react_1.useState)(undefined);
|
|
28
|
+
(0, react_1.useEffect)(() => {
|
|
29
|
+
if (!id) {
|
|
30
|
+
setToken(undefined);
|
|
31
|
+
setLoading(false);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const fetchToken = async () => {
|
|
35
|
+
try {
|
|
36
|
+
setLoading(true);
|
|
37
|
+
setError(undefined);
|
|
38
|
+
const result = await legacy_store_1.legacyCryptoAssetsStore.findTokenById(id);
|
|
39
|
+
setToken(result);
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
setError(err);
|
|
43
|
+
setToken(undefined);
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
setLoading(false);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
fetchToken();
|
|
50
|
+
}, [id]);
|
|
51
|
+
return { token, loading, error };
|
|
52
|
+
}
|
|
53
|
+
function useLegacyTokenByAddressInCurrency(address, currencyId) {
|
|
54
|
+
const [token, setToken] = (0, react_1.useState)(undefined);
|
|
55
|
+
const [loading, setLoading] = (0, react_1.useState)(true);
|
|
56
|
+
const [error, setError] = (0, react_1.useState)(undefined);
|
|
57
|
+
(0, react_1.useEffect)(() => {
|
|
58
|
+
if (!address || !currencyId) {
|
|
59
|
+
setToken(undefined);
|
|
60
|
+
setLoading(false);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const fetchToken = async () => {
|
|
64
|
+
try {
|
|
65
|
+
setLoading(true);
|
|
66
|
+
setError(undefined);
|
|
67
|
+
const result = await legacy_store_1.legacyCryptoAssetsStore.findTokenByAddressInCurrency(address, currencyId);
|
|
68
|
+
setToken(result);
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
setError(err);
|
|
72
|
+
setToken(undefined);
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
setLoading(false);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
fetchToken();
|
|
79
|
+
}, [address, currencyId]);
|
|
80
|
+
return { token, loading, error };
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=hooks.js.map
|
package/lib/hooks.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { TokenCurrency } from "@ledgerhq/types-cryptoassets";
|
|
2
|
+
/**
|
|
3
|
+
* CryptoAssetsHooks is the hooks interface version of the CryptoAssetsStore
|
|
4
|
+
* This work provide a common interface for the hooks, and the backend implementation will be completed in the future
|
|
5
|
+
* See https://github.com/LedgerHQ/ledger-live/pull/11951
|
|
6
|
+
*/
|
|
7
|
+
export declare function createCryptoAssetsHooks(config?: {
|
|
8
|
+
useCALBackend?: false;
|
|
9
|
+
api?: unknown;
|
|
10
|
+
}): Hooks;
|
|
11
|
+
type TokenResult = {
|
|
12
|
+
token: TokenCurrency | undefined;
|
|
13
|
+
loading: boolean;
|
|
14
|
+
error: unknown;
|
|
15
|
+
};
|
|
16
|
+
type Hooks = {
|
|
17
|
+
useTokenById: (id: string) => TokenResult;
|
|
18
|
+
useTokenByAddressInCurrency: (address: string, currencyId: string) => TokenResult;
|
|
19
|
+
};
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,GAAE;IACN,aAAa,CAAC,EAAE,KAAK,CAAC;IACtB,GAAG,CAAC,EAAE,OAAO,CAAC;CACV,GACL,KAAK,CASP;AAED,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,WAAW,CAAC;IAC1C,2BAA2B,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,WAAW,CAAC;CACnF,CAAC"}
|
package/lib-es/hooks.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { useState, useEffect } from "react";
|
|
2
|
+
import { legacyCryptoAssetsStore } from "./legacy/legacy-store";
|
|
3
|
+
/**
|
|
4
|
+
* CryptoAssetsHooks is the hooks interface version of the CryptoAssetsStore
|
|
5
|
+
* This work provide a common interface for the hooks, and the backend implementation will be completed in the future
|
|
6
|
+
* See https://github.com/LedgerHQ/ledger-live/pull/11951
|
|
7
|
+
*/
|
|
8
|
+
export function createCryptoAssetsHooks(config = {}) {
|
|
9
|
+
if (config.useCALBackend) {
|
|
10
|
+
throw new Error("backend is not supported yet");
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
return {
|
|
14
|
+
useTokenById: useLegacyTokenById,
|
|
15
|
+
useTokenByAddressInCurrency: useLegacyTokenByAddressInCurrency,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/////////// Legacy hooks using legacyCryptoAssetsStore ///////////
|
|
20
|
+
function useLegacyTokenById(id) {
|
|
21
|
+
const [token, setToken] = useState(undefined);
|
|
22
|
+
const [loading, setLoading] = useState(true);
|
|
23
|
+
const [error, setError] = useState(undefined);
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
if (!id) {
|
|
26
|
+
setToken(undefined);
|
|
27
|
+
setLoading(false);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const fetchToken = async () => {
|
|
31
|
+
try {
|
|
32
|
+
setLoading(true);
|
|
33
|
+
setError(undefined);
|
|
34
|
+
const result = await legacyCryptoAssetsStore.findTokenById(id);
|
|
35
|
+
setToken(result);
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
setError(err);
|
|
39
|
+
setToken(undefined);
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
setLoading(false);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
fetchToken();
|
|
46
|
+
}, [id]);
|
|
47
|
+
return { token, loading, error };
|
|
48
|
+
}
|
|
49
|
+
function useLegacyTokenByAddressInCurrency(address, currencyId) {
|
|
50
|
+
const [token, setToken] = useState(undefined);
|
|
51
|
+
const [loading, setLoading] = useState(true);
|
|
52
|
+
const [error, setError] = useState(undefined);
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
if (!address || !currencyId) {
|
|
55
|
+
setToken(undefined);
|
|
56
|
+
setLoading(false);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const fetchToken = async () => {
|
|
60
|
+
try {
|
|
61
|
+
setLoading(true);
|
|
62
|
+
setError(undefined);
|
|
63
|
+
const result = await legacyCryptoAssetsStore.findTokenByAddressInCurrency(address, currencyId);
|
|
64
|
+
setToken(result);
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
setError(err);
|
|
68
|
+
setToken(undefined);
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
setLoading(false);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
fetchToken();
|
|
75
|
+
}, [address, currencyId]);
|
|
76
|
+
return { token, loading, error };
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ledgerhq/cryptoassets",
|
|
3
|
-
"version": "13.31.0-nightly.
|
|
3
|
+
"version": "13.31.0-nightly.7",
|
|
4
4
|
"description": "Ledger crypto-assets list",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ledger"
|
|
@@ -23,14 +23,19 @@
|
|
|
23
23
|
"axios": "1.11.0",
|
|
24
24
|
"bs58check": "^2.1.2",
|
|
25
25
|
"invariant": "2",
|
|
26
|
-
"@ledgerhq/live-env": "^2.19.0-nightly.
|
|
27
|
-
"@ledgerhq/types-live": "^6.87.0-nightly.
|
|
26
|
+
"@ledgerhq/live-env": "^2.19.0-nightly.2",
|
|
27
|
+
"@ledgerhq/types-live": "^6.87.0-nightly.5"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
|
+
"@testing-library/react": "14.2.2",
|
|
30
31
|
"@types/bs58check": "^2.1.0",
|
|
31
32
|
"@types/jest": "^29.5.10",
|
|
32
33
|
"@types/node": "^22.10.10",
|
|
34
|
+
"@types/react": "^18.0.0",
|
|
33
35
|
"jest": "^29.7.0",
|
|
36
|
+
"jest-environment-jsdom": "^29.7.0",
|
|
37
|
+
"react": "^18.0.0",
|
|
38
|
+
"react-dom": "^18.0.0",
|
|
34
39
|
"rimraf": "^4.4.1",
|
|
35
40
|
"source-map-support": "^0.5.21",
|
|
36
41
|
"ts-jest": "^29.1.1",
|
|
@@ -58,6 +63,14 @@
|
|
|
58
63
|
"./lib/*.js": "./lib/*.js",
|
|
59
64
|
"./lib-es/*": "./lib-es/*.js",
|
|
60
65
|
"./lib-es/*.js": "./lib-es/*.js",
|
|
66
|
+
"./rtk-store": {
|
|
67
|
+
"require": "./lib/rtk-store/index.js",
|
|
68
|
+
"default": "./lib-es/rtk-store/index.js"
|
|
69
|
+
},
|
|
70
|
+
"./rtk-store/*": {
|
|
71
|
+
"require": "./lib/rtk-store/*.js",
|
|
72
|
+
"default": "./lib-es/rtk-store/*.js"
|
|
73
|
+
},
|
|
61
74
|
"./*": {
|
|
62
75
|
"require": "./lib/*.js",
|
|
63
76
|
"default": "./lib-es/*.js"
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
import { renderHook, waitFor } from "@testing-library/react";
|
|
2
|
+
import { createCryptoAssetsHooks } from "./hooks";
|
|
3
|
+
import type { TokenCurrency } from "@ledgerhq/types-cryptoassets";
|
|
4
|
+
|
|
5
|
+
// Mock the legacy store
|
|
6
|
+
jest.mock("./legacy/legacy-store", () => ({
|
|
7
|
+
legacyCryptoAssetsStore: {
|
|
8
|
+
findTokenById: jest.fn(),
|
|
9
|
+
findTokenByAddressInCurrency: jest.fn(),
|
|
10
|
+
},
|
|
11
|
+
}));
|
|
12
|
+
|
|
13
|
+
import { legacyCryptoAssetsStore } from "./legacy/legacy-store";
|
|
14
|
+
|
|
15
|
+
// Mock token data
|
|
16
|
+
const mockToken: TokenCurrency = {
|
|
17
|
+
type: "TokenCurrency",
|
|
18
|
+
id: "ethereum/erc20/usd_coin",
|
|
19
|
+
ledgerSignature: "3045022100...",
|
|
20
|
+
contractAddress: "0xA0b86a33E6441b8c4C8C0e4b8b8c4C8C0e4b8b8c4",
|
|
21
|
+
parentCurrency: {
|
|
22
|
+
type: "CryptoCurrency",
|
|
23
|
+
id: "ethereum",
|
|
24
|
+
name: "Ethereum",
|
|
25
|
+
ticker: "ETH",
|
|
26
|
+
units: [],
|
|
27
|
+
family: "ethereum",
|
|
28
|
+
managerAppName: "Ethereum",
|
|
29
|
+
coinType: 60,
|
|
30
|
+
scheme: "ethereum",
|
|
31
|
+
color: "#627EEA",
|
|
32
|
+
explorerViews: [],
|
|
33
|
+
},
|
|
34
|
+
tokenType: "erc20",
|
|
35
|
+
name: "USD Coin",
|
|
36
|
+
ticker: "USDC",
|
|
37
|
+
units: [
|
|
38
|
+
{
|
|
39
|
+
code: "USDC",
|
|
40
|
+
name: "USD Coin",
|
|
41
|
+
magnitude: 6,
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
// Setup mock implementations
|
|
47
|
+
const mockFindTokenById = legacyCryptoAssetsStore.findTokenById as jest.MockedFunction<
|
|
48
|
+
typeof legacyCryptoAssetsStore.findTokenById
|
|
49
|
+
>;
|
|
50
|
+
const mockFindTokenByAddressInCurrency =
|
|
51
|
+
legacyCryptoAssetsStore.findTokenByAddressInCurrency as jest.MockedFunction<
|
|
52
|
+
typeof legacyCryptoAssetsStore.findTokenByAddressInCurrency
|
|
53
|
+
>;
|
|
54
|
+
|
|
55
|
+
beforeEach(() => {
|
|
56
|
+
jest.clearAllMocks();
|
|
57
|
+
|
|
58
|
+
// Default mock implementations
|
|
59
|
+
mockFindTokenById.mockImplementation((id: string) => {
|
|
60
|
+
if (id === "ethereum/erc20/usd_coin") {
|
|
61
|
+
return mockToken;
|
|
62
|
+
}
|
|
63
|
+
return undefined;
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
mockFindTokenByAddressInCurrency.mockImplementation((address: string, currencyId: string) => {
|
|
67
|
+
if (address === "0xA0b86a33E6441b8c4C8C0e4b8b8c4C8C0e4b8b8c4" && currencyId === "ethereum") {
|
|
68
|
+
return mockToken;
|
|
69
|
+
}
|
|
70
|
+
return undefined;
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
describe("Hooks Factory", () => {
|
|
75
|
+
it("should return legacy hooks when useCALBackend is false", () => {
|
|
76
|
+
const hooks = createCryptoAssetsHooks({ useCALBackend: false });
|
|
77
|
+
|
|
78
|
+
expect(hooks.useTokenById).toBeDefined();
|
|
79
|
+
expect(hooks.useTokenByAddressInCurrency).toBeDefined();
|
|
80
|
+
expect(hooks.useTokenById).toBeInstanceOf(Function);
|
|
81
|
+
expect(hooks.useTokenByAddressInCurrency).toBeInstanceOf(Function);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
it("should throw an error when useCALBackend is true", () => {
|
|
85
|
+
// @ts-expect-error useCALBackend is not supported yet
|
|
86
|
+
expect(() => createCryptoAssetsHooks({ useCALBackend: true })).toThrow();
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
describe("Legacy hooks", () => {
|
|
91
|
+
describe("useTokenById", () => {
|
|
92
|
+
it("should start with loading state and then return token", async () => {
|
|
93
|
+
const hooks = createCryptoAssetsHooks({ useCALBackend: false });
|
|
94
|
+
const { result } = renderHook(() => hooks.useTokenById("ethereum/erc20/usd_coin"));
|
|
95
|
+
|
|
96
|
+
// Initial loading state
|
|
97
|
+
expect(result.current.loading).toBe(true);
|
|
98
|
+
expect(result.current.token).toBeUndefined();
|
|
99
|
+
expect(result.current.error).toBeUndefined();
|
|
100
|
+
|
|
101
|
+
// Wait for the async operation to complete
|
|
102
|
+
await waitFor(() => {
|
|
103
|
+
expect(result.current.loading).toBe(false);
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
// Settled state with token
|
|
107
|
+
expect(result.current.token).toBe(mockToken);
|
|
108
|
+
expect(result.current.error).toBeUndefined();
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it("should handle empty id parameter", async () => {
|
|
112
|
+
const hooks = createCryptoAssetsHooks({ useCALBackend: false });
|
|
113
|
+
const { result } = renderHook(() => hooks.useTokenById(""));
|
|
114
|
+
|
|
115
|
+
// Should immediately settle with no token
|
|
116
|
+
expect(result.current.loading).toBe(false);
|
|
117
|
+
expect(result.current.token).toBeUndefined();
|
|
118
|
+
expect(result.current.error).toBeUndefined();
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
it("should handle non-existent token id", async () => {
|
|
122
|
+
const hooks = createCryptoAssetsHooks({ useCALBackend: false });
|
|
123
|
+
const { result } = renderHook(() => hooks.useTokenById("non-existent-token"));
|
|
124
|
+
|
|
125
|
+
// Initial loading state
|
|
126
|
+
expect(result.current.loading).toBe(true);
|
|
127
|
+
|
|
128
|
+
// Wait for the async operation to complete
|
|
129
|
+
await waitFor(() => {
|
|
130
|
+
expect(result.current.loading).toBe(false);
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
// Settled state with no token (but no error since the store returns undefined)
|
|
134
|
+
expect(result.current.token).toBeUndefined();
|
|
135
|
+
expect(result.current.error).toBeUndefined();
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
it("should re-run when id changes", async () => {
|
|
139
|
+
const hooks = createCryptoAssetsHooks({ useCALBackend: false });
|
|
140
|
+
const { result, rerender } = renderHook(({ id }) => hooks.useTokenById(id), {
|
|
141
|
+
initialProps: { id: "ethereum/erc20/usd_coin" },
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
// Wait for first token to load
|
|
145
|
+
await waitFor(() => {
|
|
146
|
+
expect(result.current.loading).toBe(false);
|
|
147
|
+
expect(result.current.token).toBe(mockToken);
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
// Change the id
|
|
151
|
+
rerender({ id: "different-token" });
|
|
152
|
+
|
|
153
|
+
// Should start loading again and reset token
|
|
154
|
+
expect(result.current.loading).toBe(true);
|
|
155
|
+
|
|
156
|
+
// Wait for the token to be reset
|
|
157
|
+
await waitFor(() => {
|
|
158
|
+
expect(result.current.token).toBeUndefined();
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
// Wait for new search to complete
|
|
162
|
+
await waitFor(() => {
|
|
163
|
+
expect(result.current.loading).toBe(false);
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
// Should have no token for the new id
|
|
167
|
+
expect(result.current.token).toBeUndefined();
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
describe("useTokenByAddressInCurrency", () => {
|
|
172
|
+
it("should start with loading state and then return token", async () => {
|
|
173
|
+
const hooks = createCryptoAssetsHooks({ useCALBackend: false });
|
|
174
|
+
const { result } = renderHook(() =>
|
|
175
|
+
hooks.useTokenByAddressInCurrency(
|
|
176
|
+
"0xA0b86a33E6441b8c4C8C0e4b8b8c4C8C0e4b8b8c4",
|
|
177
|
+
"ethereum",
|
|
178
|
+
),
|
|
179
|
+
);
|
|
180
|
+
|
|
181
|
+
// Initial loading state
|
|
182
|
+
expect(result.current.loading).toBe(true);
|
|
183
|
+
expect(result.current.token).toBeUndefined();
|
|
184
|
+
expect(result.current.error).toBeUndefined();
|
|
185
|
+
|
|
186
|
+
// Wait for the async operation to complete
|
|
187
|
+
await waitFor(() => {
|
|
188
|
+
expect(result.current.loading).toBe(false);
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
// Settled state with token
|
|
192
|
+
expect(result.current.token).toBe(mockToken);
|
|
193
|
+
expect(result.current.error).toBeUndefined();
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
it("should handle empty address parameter", async () => {
|
|
197
|
+
const hooks = createCryptoAssetsHooks({ useCALBackend: false });
|
|
198
|
+
const { result } = renderHook(() => hooks.useTokenByAddressInCurrency("", "ethereum"));
|
|
199
|
+
|
|
200
|
+
// Should immediately settle with no token
|
|
201
|
+
expect(result.current.loading).toBe(false);
|
|
202
|
+
expect(result.current.token).toBeUndefined();
|
|
203
|
+
expect(result.current.error).toBeUndefined();
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
it("should handle empty currencyId parameter", async () => {
|
|
207
|
+
const hooks = createCryptoAssetsHooks({ useCALBackend: false });
|
|
208
|
+
const { result } = renderHook(() =>
|
|
209
|
+
hooks.useTokenByAddressInCurrency("0xA0b86a33E6441b8c4C8C0e4b8b8c4C8C0e4b8b8c4", ""),
|
|
210
|
+
);
|
|
211
|
+
|
|
212
|
+
// Should immediately settle with no token
|
|
213
|
+
expect(result.current.loading).toBe(false);
|
|
214
|
+
expect(result.current.token).toBeUndefined();
|
|
215
|
+
expect(result.current.error).toBeUndefined();
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
it("should handle non-existent token address", async () => {
|
|
219
|
+
const hooks = createCryptoAssetsHooks({ useCALBackend: false });
|
|
220
|
+
const { result } = renderHook(() =>
|
|
221
|
+
hooks.useTokenByAddressInCurrency("0xNonExistentAddress", "ethereum"),
|
|
222
|
+
);
|
|
223
|
+
|
|
224
|
+
// Initial loading state
|
|
225
|
+
expect(result.current.loading).toBe(true);
|
|
226
|
+
|
|
227
|
+
// Wait for the async operation to complete
|
|
228
|
+
await waitFor(() => {
|
|
229
|
+
expect(result.current.loading).toBe(false);
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
// Settled state with no token (but no error since the store returns undefined)
|
|
233
|
+
expect(result.current.token).toBeUndefined();
|
|
234
|
+
expect(result.current.error).toBeUndefined();
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
it("should re-run when address or currencyId changes", async () => {
|
|
238
|
+
const hooks = createCryptoAssetsHooks({ useCALBackend: false });
|
|
239
|
+
const { result, rerender } = renderHook(
|
|
240
|
+
({ address, currencyId }) => hooks.useTokenByAddressInCurrency(address, currencyId),
|
|
241
|
+
{
|
|
242
|
+
initialProps: {
|
|
243
|
+
address: "0xA0b86a33E6441b8c4C8C0e4b8b8c4C8C0e4b8b8c4",
|
|
244
|
+
currencyId: "ethereum",
|
|
245
|
+
},
|
|
246
|
+
},
|
|
247
|
+
);
|
|
248
|
+
|
|
249
|
+
// Wait for first token to load
|
|
250
|
+
await waitFor(() => {
|
|
251
|
+
expect(result.current.loading).toBe(false);
|
|
252
|
+
expect(result.current.token).toBe(mockToken);
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
// Change the address
|
|
256
|
+
rerender({
|
|
257
|
+
address: "0xDifferentAddress",
|
|
258
|
+
currencyId: "ethereum",
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
// Should start loading again and reset token
|
|
262
|
+
expect(result.current.loading).toBe(true);
|
|
263
|
+
|
|
264
|
+
// Wait for the token to be reset
|
|
265
|
+
await waitFor(() => {
|
|
266
|
+
expect(result.current.token).toBeUndefined();
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
// Wait for new search to complete
|
|
270
|
+
await waitFor(() => {
|
|
271
|
+
expect(result.current.loading).toBe(false);
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
// Should have no token for the new address
|
|
275
|
+
expect(result.current.token).toBeUndefined();
|
|
276
|
+
});
|
|
277
|
+
});
|
|
278
|
+
});
|