@cranberry-money/shared-constants 8.15.429 → 8.15.431
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/dist/business/holdings.d.ts +23 -0
- package/dist/business/holdings.d.ts.map +1 -1
- package/dist/business/holdings.js +35 -0
- package/dist/business/holdings.js.map +1 -1
- package/dist/business/wallets.d.ts +63 -30
- package/dist/business/wallets.d.ts.map +1 -1
- package/dist/business/wallets.js +203 -86
- package/dist/business/wallets.js.map +1 -1
- package/package.json +1 -1
|
@@ -27,6 +27,29 @@ export declare const SNAPSHOT_REASON_OPTIONS: readonly [{
|
|
|
27
27
|
readonly value: "AUDIT";
|
|
28
28
|
readonly label: "Audit Record";
|
|
29
29
|
}];
|
|
30
|
+
/**
|
|
31
|
+
* Asset types used for grouping wallet holdings
|
|
32
|
+
* These match the assetType values returned from the API
|
|
33
|
+
*/
|
|
34
|
+
export declare const HOLDING_ASSET_TYPE: {
|
|
35
|
+
readonly STABLECOIN: "stablecoin";
|
|
36
|
+
readonly CRYPTO: "crypto";
|
|
37
|
+
readonly NATIVE_CRYPTO: "native_crypto";
|
|
38
|
+
readonly STOCK: "stock";
|
|
39
|
+
readonly ETF: "etf";
|
|
40
|
+
readonly TOKENIZED_SECURITY: "tokenized_security";
|
|
41
|
+
readonly TOKENIZED_RWA: "tokenized_rwa";
|
|
42
|
+
};
|
|
43
|
+
export type HoldingAssetType = (typeof HOLDING_ASSET_TYPE)[keyof typeof HOLDING_ASSET_TYPE];
|
|
44
|
+
/**
|
|
45
|
+
* Human-readable labels for holding asset types
|
|
46
|
+
* Used for section headers in holdings lists
|
|
47
|
+
*/
|
|
48
|
+
export declare const HOLDING_ASSET_TYPE_LABELS: Record<string, string>;
|
|
49
|
+
/**
|
|
50
|
+
* Get label for an asset type with fallback
|
|
51
|
+
*/
|
|
52
|
+
export declare function getHoldingAssetTypeLabel(assetType: string): string;
|
|
30
53
|
export declare const ASSET_CLASS: {
|
|
31
54
|
readonly EQUITY: "EQUITY";
|
|
32
55
|
readonly FIXED_INCOME: "FIXED_INCOME";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"holdings.d.ts","sourceRoot":"","sources":["../../src/business/holdings.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,UAAU,CAAC;AAC7C,eAAO,MAAM,yBAAyB,cAAc,CAAC;AACrD,eAAO,MAAM,yBAAyB,cAAc,CAAC;AACrD,eAAO,MAAM,qBAAqB,UAAU,CAAC;AAE7C,eAAO,MAAM,eAAe;;;;;CAKlB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAEpF,eAAO,MAAM,2BAA2B,oBAAoB,CAAC;AAC7D,eAAO,MAAM,+BAA+B,wBAAwB,CAAC;AACrE,eAAO,MAAM,+BAA+B,qBAAqB,CAAC;AAClE,eAAO,MAAM,2BAA2B,iBAAiB,CAAC;AAE1D,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAKxD,CAAC;AAEX,eAAO,MAAM,uBAAuB;;;;;;;;;;;;EAK1B,CAAC;AAMX,eAAO,MAAM,WAAW;;;;;;;CAOd,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAExE,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAOhD,CAAC"}
|
|
1
|
+
{"version":3,"file":"holdings.d.ts","sourceRoot":"","sources":["../../src/business/holdings.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,UAAU,CAAC;AAC7C,eAAO,MAAM,yBAAyB,cAAc,CAAC;AACrD,eAAO,MAAM,yBAAyB,cAAc,CAAC;AACrD,eAAO,MAAM,qBAAqB,UAAU,CAAC;AAE7C,eAAO,MAAM,eAAe;;;;;CAKlB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAEpF,eAAO,MAAM,2BAA2B,oBAAoB,CAAC;AAC7D,eAAO,MAAM,+BAA+B,wBAAwB,CAAC;AACrE,eAAO,MAAM,+BAA+B,qBAAqB,CAAC;AAClE,eAAO,MAAM,2BAA2B,iBAAiB,CAAC;AAE1D,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAKxD,CAAC;AAEX,eAAO,MAAM,uBAAuB;;;;;;;;;;;;EAK1B,CAAC;AAMX;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;CAQrB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,OAAO,kBAAkB,CAAC,CAAC;AAE5F;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQ5D,CAAC;AAEF;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAElE;AAMD,eAAO,MAAM,WAAW;;;;;;;CAOd,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAExE,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAOhD,CAAC"}
|
|
@@ -25,6 +25,41 @@ export const SNAPSHOT_REASON_OPTIONS = [
|
|
|
25
25
|
{ value: SNAPSHOT_REASON_AUDIT, label: SNAPSHOT_REASON_LABEL_AUDIT },
|
|
26
26
|
];
|
|
27
27
|
// ============================================
|
|
28
|
+
// Holding Asset Types (for wallet holdings display)
|
|
29
|
+
// ============================================
|
|
30
|
+
/**
|
|
31
|
+
* Asset types used for grouping wallet holdings
|
|
32
|
+
* These match the assetType values returned from the API
|
|
33
|
+
*/
|
|
34
|
+
export const HOLDING_ASSET_TYPE = {
|
|
35
|
+
STABLECOIN: 'stablecoin',
|
|
36
|
+
CRYPTO: 'crypto',
|
|
37
|
+
NATIVE_CRYPTO: 'native_crypto',
|
|
38
|
+
STOCK: 'stock',
|
|
39
|
+
ETF: 'etf',
|
|
40
|
+
TOKENIZED_SECURITY: 'tokenized_security',
|
|
41
|
+
TOKENIZED_RWA: 'tokenized_rwa',
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Human-readable labels for holding asset types
|
|
45
|
+
* Used for section headers in holdings lists
|
|
46
|
+
*/
|
|
47
|
+
export const HOLDING_ASSET_TYPE_LABELS = {
|
|
48
|
+
[HOLDING_ASSET_TYPE.STABLECOIN]: 'Stablecoins',
|
|
49
|
+
[HOLDING_ASSET_TYPE.CRYPTO]: 'Cryptocurrencies',
|
|
50
|
+
[HOLDING_ASSET_TYPE.NATIVE_CRYPTO]: 'Native Cryptocurrencies',
|
|
51
|
+
[HOLDING_ASSET_TYPE.STOCK]: 'Stocks',
|
|
52
|
+
[HOLDING_ASSET_TYPE.ETF]: 'ETFs',
|
|
53
|
+
[HOLDING_ASSET_TYPE.TOKENIZED_SECURITY]: 'Tokenized Securities',
|
|
54
|
+
[HOLDING_ASSET_TYPE.TOKENIZED_RWA]: 'Real World Assets',
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Get label for an asset type with fallback
|
|
58
|
+
*/
|
|
59
|
+
export function getHoldingAssetTypeLabel(assetType) {
|
|
60
|
+
return HOLDING_ASSET_TYPE_LABELS[assetType] || 'Other Assets';
|
|
61
|
+
}
|
|
62
|
+
// ============================================
|
|
28
63
|
// Asset Classes
|
|
29
64
|
// ============================================
|
|
30
65
|
export const ASSET_CLASS = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"holdings.js","sourceRoot":"","sources":["../../src/business/holdings.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC;AAC7C,MAAM,CAAC,MAAM,yBAAyB,GAAG,WAAW,CAAC;AACrD,MAAM,CAAC,MAAM,yBAAyB,GAAG,WAAW,CAAC;AACrD,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC;AAE7C,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,KAAK,EAAE,qBAAqB;IAC5B,SAAS,EAAE,yBAAyB;IACpC,SAAS,EAAE,yBAAyB;IACpC,KAAK,EAAE,qBAAqB;CACpB,CAAC;AAIX,MAAM,CAAC,MAAM,2BAA2B,GAAG,iBAAiB,CAAC;AAC7D,MAAM,CAAC,MAAM,+BAA+B,GAAG,qBAAqB,CAAC;AACrE,MAAM,CAAC,MAAM,+BAA+B,GAAG,kBAAkB,CAAC;AAClE,MAAM,CAAC,MAAM,2BAA2B,GAAG,cAAc,CAAC;AAE1D,MAAM,CAAC,MAAM,sBAAsB,GAAmC;IACpE,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,2BAA2B;IACpD,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,+BAA+B;IAC5D,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,+BAA+B;IAC5D,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,2BAA2B;CAC5C,CAAC;AAEX,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,2BAA2B,EAAE;IACpE,EAAE,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,+BAA+B,EAAE;IAC5E,EAAE,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,+BAA+B,EAAE;IAC5E,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,2BAA2B,EAAE;CAC5D,CAAC;AAEX,+CAA+C;AAC/C,gBAAgB;AAChB,+CAA+C;AAE/C,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,cAAc;IAC5B,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,WAAW;IACtB,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,aAAa;CAClB,CAAC;AAIX,MAAM,CAAC,MAAM,kBAAkB,GAA+B;IAC5D,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,QAAQ;IAC9B,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,cAAc;IAC1C,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM;IAC1B,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,WAAW;IACpC,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,aAAa;IACxC,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,aAAa;CAChC,CAAC"}
|
|
1
|
+
{"version":3,"file":"holdings.js","sourceRoot":"","sources":["../../src/business/holdings.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,40 +18,18 @@ export declare const BLOCKCHAIN: {
|
|
|
18
18
|
readonly BASE: "base";
|
|
19
19
|
};
|
|
20
20
|
export type BlockchainType = (typeof BLOCKCHAIN)[keyof typeof BLOCKCHAIN];
|
|
21
|
-
export declare const BLOCKCHAIN_LABELS: Record<string, string>;
|
|
22
|
-
/**
|
|
23
|
-
* Maps blockchain chain codes (as stored in database) to their native asset symbols
|
|
24
|
-
* Used for transaction labeling and blockchain operations
|
|
25
|
-
*
|
|
26
|
-
* IMPORTANT: These are NATIVE tokens, not chain identifiers
|
|
27
|
-
* Example: Arbitrum's native token is ETH (not ARB)
|
|
28
|
-
*/
|
|
29
|
-
export declare const CHAIN_TO_NATIVE_ASSET: Record<string, string>;
|
|
30
|
-
/**
|
|
31
|
-
* Maps native asset short codes (ETH, BTC) to full blockchain names
|
|
32
|
-
* Used when APIs expect full chain names but input is short code
|
|
33
|
-
*/
|
|
34
|
-
export declare const NATIVE_ASSET_TO_CHAIN: Record<string, BlockchainType>;
|
|
35
21
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* @returns Full blockchain name (e.g., 'ethereum', 'bitcoin') or original if not found
|
|
39
|
-
*/
|
|
40
|
-
export declare function getChainName(chain: string): string;
|
|
41
|
-
/**
|
|
42
|
-
* Get native asset short code from any chain identifier
|
|
43
|
-
* @param chain - Chain identifier (e.g., 'ETH', 'ethereum', 'BTC', 'bitcoin')
|
|
44
|
-
* @returns Native asset symbol (e.g., 'ETH', 'BTC') or uppercase input if not found
|
|
45
|
-
*/
|
|
46
|
-
export declare function getChainShortCode(chain: string): string;
|
|
47
|
-
/**
|
|
48
|
-
* Chain configuration matching ChainInfo from shared-types
|
|
22
|
+
* Chain configuration - THE SINGLE SOURCE OF TRUTH for all chain data
|
|
23
|
+
* All other chain-related lookups should derive from this array
|
|
49
24
|
*/
|
|
50
25
|
export interface ChainConfig {
|
|
51
26
|
code: BlockchainType;
|
|
52
27
|
name: string;
|
|
53
28
|
shortName: string;
|
|
54
29
|
isActive: boolean;
|
|
30
|
+
explorerTxUrl: string;
|
|
31
|
+
addressPlaceholder: string;
|
|
32
|
+
confirmationTime: string;
|
|
55
33
|
}
|
|
56
34
|
/**
|
|
57
35
|
* Centralized chain configuration for the app
|
|
@@ -59,14 +37,33 @@ export interface ChainConfig {
|
|
|
59
37
|
* - name: human-readable name (e.g., 'Ethereum')
|
|
60
38
|
* - shortName: native token symbol (e.g., 'ETH')
|
|
61
39
|
* - isActive: whether the chain is currently supported in the app
|
|
40
|
+
* - explorerTxUrl: base URL for transaction explorer
|
|
41
|
+
* - addressPlaceholder: placeholder text for address inputs
|
|
42
|
+
* - confirmationTime: estimated confirmation time string
|
|
62
43
|
*/
|
|
63
44
|
export declare const SUPPORTED_CHAINS: ChainConfig[];
|
|
45
|
+
/**
|
|
46
|
+
* Maps blockchain chain codes to their native asset symbols
|
|
47
|
+
* @deprecated Use getChainShortCode() instead for consistent behavior
|
|
48
|
+
*/
|
|
49
|
+
export declare const CHAIN_TO_NATIVE_ASSET: Record<string, string>;
|
|
50
|
+
/**
|
|
51
|
+
* Maps native asset short codes to full blockchain names
|
|
52
|
+
* @deprecated Use getChainName() instead for consistent behavior
|
|
53
|
+
*/
|
|
54
|
+
export declare const NATIVE_ASSET_TO_CHAIN: Record<string, BlockchainType>;
|
|
55
|
+
/**
|
|
56
|
+
* Human-readable labels for blockchain names
|
|
57
|
+
* @deprecated Use getChainConfig(code)?.name instead
|
|
58
|
+
*/
|
|
59
|
+
export declare const BLOCKCHAIN_LABELS: Record<string, string>;
|
|
64
60
|
/**
|
|
65
61
|
* Get chain config by code
|
|
66
62
|
*/
|
|
67
63
|
export declare function getChainConfig(code: string): ChainConfig | undefined;
|
|
68
64
|
/**
|
|
69
65
|
* Get chain config by short name (native asset symbol)
|
|
66
|
+
* Note: Returns first match (e.g., 'ETH' returns Ethereum, not Arbitrum)
|
|
70
67
|
*/
|
|
71
68
|
export declare function getChainByShortName(shortName: string): ChainConfig | undefined;
|
|
72
69
|
/**
|
|
@@ -74,10 +71,41 @@ export declare function getChainByShortName(shortName: string): ChainConfig | un
|
|
|
74
71
|
*/
|
|
75
72
|
export declare function getActiveChains(): ChainConfig[];
|
|
76
73
|
/**
|
|
77
|
-
*
|
|
78
|
-
*
|
|
74
|
+
* Get full blockchain name from any chain identifier (short code or full name)
|
|
75
|
+
* @param chain - Chain identifier (e.g., 'ETH', 'ethereum', 'BTC', 'bitcoin')
|
|
76
|
+
* @returns Full blockchain name (e.g., 'ethereum', 'bitcoin') or original if not found
|
|
79
77
|
*/
|
|
80
|
-
export declare
|
|
78
|
+
export declare function getChainName(chain: string): string;
|
|
79
|
+
/**
|
|
80
|
+
* Get native asset short code from any chain identifier
|
|
81
|
+
* @param chain - Chain identifier (e.g., 'ETH', 'ethereum', 'BTC', 'bitcoin')
|
|
82
|
+
* @returns Native asset symbol (e.g., 'ETH', 'BTC') or uppercase input if not found
|
|
83
|
+
*/
|
|
84
|
+
export declare function getChainShortCode(chain: string): string;
|
|
85
|
+
/**
|
|
86
|
+
* Check if a chain short code represents Ethereum
|
|
87
|
+
*/
|
|
88
|
+
export declare function isEthereumChain(chainShortCode: string): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Check if a chain short code represents Bitcoin
|
|
91
|
+
*/
|
|
92
|
+
export declare function isBitcoinChain(chainShortCode: string): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Get the full blockchain display name from a chain short code
|
|
95
|
+
* @param chainShortCode - Chain short code (e.g., 'ETH', 'BTC')
|
|
96
|
+
* @returns Full blockchain name (e.g., 'Ethereum', 'Bitcoin')
|
|
97
|
+
*/
|
|
98
|
+
export declare function getBlockchainDisplayName(chainShortCode: string): string;
|
|
99
|
+
/**
|
|
100
|
+
* Get address placeholder for input fields based on chain
|
|
101
|
+
* @param chainShortCode - Chain short code (e.g., 'ETH', 'BTC')
|
|
102
|
+
*/
|
|
103
|
+
export declare function getAddressPlaceholder(chainShortCode: string): string;
|
|
104
|
+
/**
|
|
105
|
+
* Get estimated confirmation time for a chain
|
|
106
|
+
* @param chainShortCode - Chain short code (e.g., 'ETH', 'BTC')
|
|
107
|
+
*/
|
|
108
|
+
export declare function getEstimatedConfirmationTime(chainShortCode: string): string;
|
|
81
109
|
/**
|
|
82
110
|
* Get block explorer URL for a transaction
|
|
83
111
|
* @param chain - Chain identifier (e.g., 'ethereum', 'bitcoin', 'eth', 'btc')
|
|
@@ -85,6 +113,11 @@ export declare const BLOCK_EXPLORER_TX_URLS: Record<string, string>;
|
|
|
85
113
|
* @returns Full URL to view the transaction on a block explorer
|
|
86
114
|
*/
|
|
87
115
|
export declare function getBlockExplorerTxUrl(chain: string, txHash: string): string;
|
|
116
|
+
/**
|
|
117
|
+
* Block explorer base URLs for transaction lookups
|
|
118
|
+
* @deprecated Use getBlockExplorerTxUrl() instead
|
|
119
|
+
*/
|
|
120
|
+
export declare const BLOCK_EXPLORER_TX_URLS: Record<string, string>;
|
|
88
121
|
/**
|
|
89
122
|
* Estimated transaction fees for "max amount" calculations
|
|
90
123
|
* These are conservative estimates to ensure transfers go through
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallets.d.ts","sourceRoot":"","sources":["../../src/business/wallets.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,eAAO,MAAM,0BAA0B;;;CAG7B,CAAC;AAEX,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,OAAO,0BAA0B,CAAC,CAAC;AAEpH,eAAO,MAAM,iCAAiC,EAAE,MAAM,CAAC,wBAAwB,EAAE,MAAM,CAGtF,CAAC;AAMF,eAAO,MAAM,UAAU;;;;;;;;;CASb,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAE1E,
|
|
1
|
+
{"version":3,"file":"wallets.d.ts","sourceRoot":"","sources":["../../src/business/wallets.ts"],"names":[],"mappings":"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"}
|
package/dist/business/wallets.js
CHANGED
|
@@ -13,7 +13,7 @@ export const WALLET_VERIFICATION_STATUS_LABELS = {
|
|
|
13
13
|
[WALLET_VERIFICATION_STATUS.VERIFIED]: 'Verified',
|
|
14
14
|
};
|
|
15
15
|
// ============================================
|
|
16
|
-
// Blockchain Chains
|
|
16
|
+
// Blockchain Chains - Single Source of Truth
|
|
17
17
|
// ============================================
|
|
18
18
|
export const BLOCKCHAIN = {
|
|
19
19
|
ETHEREUM: 'ethereum',
|
|
@@ -25,47 +25,143 @@ export const BLOCKCHAIN = {
|
|
|
25
25
|
OPTIMISM: 'optimism',
|
|
26
26
|
BASE: 'base',
|
|
27
27
|
};
|
|
28
|
-
export const BLOCKCHAIN_LABELS = {
|
|
29
|
-
ethereum: 'Ethereum',
|
|
30
|
-
bitcoin: 'Bitcoin',
|
|
31
|
-
polygon: 'Polygon',
|
|
32
|
-
solana: 'Solana',
|
|
33
|
-
avalanche: 'Avalanche',
|
|
34
|
-
arbitrum: 'Arbitrum',
|
|
35
|
-
optimism: 'Optimism',
|
|
36
|
-
base: 'Base',
|
|
37
|
-
};
|
|
38
28
|
/**
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
29
|
+
* Centralized chain configuration for the app
|
|
30
|
+
* - code: blockchain identifier used in API calls (e.g., 'ethereum')
|
|
31
|
+
* - name: human-readable name (e.g., 'Ethereum')
|
|
32
|
+
* - shortName: native token symbol (e.g., 'ETH')
|
|
33
|
+
* - isActive: whether the chain is currently supported in the app
|
|
34
|
+
* - explorerTxUrl: base URL for transaction explorer
|
|
35
|
+
* - addressPlaceholder: placeholder text for address inputs
|
|
36
|
+
* - confirmationTime: estimated confirmation time string
|
|
37
|
+
*/
|
|
38
|
+
export const SUPPORTED_CHAINS = [
|
|
39
|
+
{
|
|
40
|
+
code: BLOCKCHAIN.ETHEREUM,
|
|
41
|
+
name: 'Ethereum',
|
|
42
|
+
shortName: 'ETH',
|
|
43
|
+
isActive: true,
|
|
44
|
+
explorerTxUrl: 'https://etherscan.io/tx/',
|
|
45
|
+
addressPlaceholder: '0x...',
|
|
46
|
+
confirmationTime: '~2-3 minutes',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
code: BLOCKCHAIN.BITCOIN,
|
|
50
|
+
name: 'Bitcoin',
|
|
51
|
+
shortName: 'BTC',
|
|
52
|
+
isActive: true,
|
|
53
|
+
explorerTxUrl: 'https://blockchain.com/btc/tx/',
|
|
54
|
+
addressPlaceholder: '1... or 3... or bc1...',
|
|
55
|
+
confirmationTime: '~10 minutes',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
code: BLOCKCHAIN.POLYGON,
|
|
59
|
+
name: 'Polygon',
|
|
60
|
+
shortName: 'MATIC',
|
|
61
|
+
isActive: false,
|
|
62
|
+
explorerTxUrl: 'https://polygonscan.com/tx/',
|
|
63
|
+
addressPlaceholder: '0x...',
|
|
64
|
+
confirmationTime: '~2 minutes',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
code: BLOCKCHAIN.SOLANA,
|
|
68
|
+
name: 'Solana',
|
|
69
|
+
shortName: 'SOL',
|
|
70
|
+
isActive: false,
|
|
71
|
+
explorerTxUrl: 'https://solscan.io/tx/',
|
|
72
|
+
addressPlaceholder: 'Enter address',
|
|
73
|
+
confirmationTime: '~1 minute',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
code: BLOCKCHAIN.AVALANCHE,
|
|
77
|
+
name: 'Avalanche',
|
|
78
|
+
shortName: 'AVAX',
|
|
79
|
+
isActive: false,
|
|
80
|
+
explorerTxUrl: 'https://snowtrace.io/tx/',
|
|
81
|
+
addressPlaceholder: '0x...',
|
|
82
|
+
confirmationTime: '~2 minutes',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
code: BLOCKCHAIN.ARBITRUM,
|
|
86
|
+
name: 'Arbitrum',
|
|
87
|
+
shortName: 'ETH',
|
|
88
|
+
isActive: false,
|
|
89
|
+
explorerTxUrl: 'https://arbiscan.io/tx/',
|
|
90
|
+
addressPlaceholder: '0x...',
|
|
91
|
+
confirmationTime: '~2 minutes',
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
code: BLOCKCHAIN.OPTIMISM,
|
|
95
|
+
name: 'Optimism',
|
|
96
|
+
shortName: 'ETH',
|
|
97
|
+
isActive: false,
|
|
98
|
+
explorerTxUrl: 'https://optimistic.etherscan.io/tx/',
|
|
99
|
+
addressPlaceholder: '0x...',
|
|
100
|
+
confirmationTime: '~2 minutes',
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
code: BLOCKCHAIN.BASE,
|
|
104
|
+
name: 'Base',
|
|
105
|
+
shortName: 'ETH',
|
|
106
|
+
isActive: false,
|
|
107
|
+
explorerTxUrl: 'https://basescan.org/tx/',
|
|
108
|
+
addressPlaceholder: '0x...',
|
|
109
|
+
confirmationTime: '~2 minutes',
|
|
110
|
+
},
|
|
111
|
+
];
|
|
112
|
+
// ============================================
|
|
113
|
+
// Derived Lookups (built from SUPPORTED_CHAINS)
|
|
114
|
+
// ============================================
|
|
115
|
+
// Build lookup maps once for O(1) access
|
|
116
|
+
const chainByCode = new Map(SUPPORTED_CHAINS.map((c) => [c.code, c]));
|
|
117
|
+
const chainByShortName = new Map(SUPPORTED_CHAINS.map((c) => [c.shortName, c]));
|
|
58
118
|
/**
|
|
59
|
-
* Maps
|
|
60
|
-
*
|
|
119
|
+
* Maps blockchain chain codes to their native asset symbols
|
|
120
|
+
* @deprecated Use getChainShortCode() instead for consistent behavior
|
|
61
121
|
*/
|
|
62
|
-
export const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
122
|
+
export const CHAIN_TO_NATIVE_ASSET = Object.fromEntries([
|
|
123
|
+
...SUPPORTED_CHAINS.map((c) => [c.code, c.shortName]),
|
|
124
|
+
// Aliases for common short codes used as input
|
|
125
|
+
['btc', 'BTC'],
|
|
126
|
+
['eth', 'ETH'],
|
|
127
|
+
['sol', 'SOL'],
|
|
128
|
+
['avax', 'AVAX'],
|
|
129
|
+
]);
|
|
130
|
+
/**
|
|
131
|
+
* Maps native asset short codes to full blockchain names
|
|
132
|
+
* @deprecated Use getChainName() instead for consistent behavior
|
|
133
|
+
*/
|
|
134
|
+
export const NATIVE_ASSET_TO_CHAIN = Object.fromEntries(SUPPORTED_CHAINS.filter((c) => c.shortName !== 'ETH' || c.code === BLOCKCHAIN.ETHEREUM).map((c) => [
|
|
135
|
+
c.shortName,
|
|
136
|
+
c.code,
|
|
137
|
+
]));
|
|
138
|
+
/**
|
|
139
|
+
* Human-readable labels for blockchain names
|
|
140
|
+
* @deprecated Use getChainConfig(code)?.name instead
|
|
141
|
+
*/
|
|
142
|
+
export const BLOCKCHAIN_LABELS = Object.fromEntries(SUPPORTED_CHAINS.map((c) => [c.code, c.name]));
|
|
143
|
+
// ============================================
|
|
144
|
+
// Chain Lookup Functions
|
|
145
|
+
// ============================================
|
|
146
|
+
/**
|
|
147
|
+
* Get chain config by code
|
|
148
|
+
*/
|
|
149
|
+
export function getChainConfig(code) {
|
|
150
|
+
return chainByCode.get(code);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get chain config by short name (native asset symbol)
|
|
154
|
+
* Note: Returns first match (e.g., 'ETH' returns Ethereum, not Arbitrum)
|
|
155
|
+
*/
|
|
156
|
+
export function getChainByShortName(shortName) {
|
|
157
|
+
return chainByShortName.get(shortName);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Get only active chains
|
|
161
|
+
*/
|
|
162
|
+
export function getActiveChains() {
|
|
163
|
+
return SUPPORTED_CHAINS.filter((c) => c.isActive);
|
|
164
|
+
}
|
|
69
165
|
/**
|
|
70
166
|
* Get full blockchain name from any chain identifier (short code or full name)
|
|
71
167
|
* @param chain - Chain identifier (e.g., 'ETH', 'ethereum', 'BTC', 'bitcoin')
|
|
@@ -73,13 +169,15 @@ export const NATIVE_ASSET_TO_CHAIN = {
|
|
|
73
169
|
*/
|
|
74
170
|
export function getChainName(chain) {
|
|
75
171
|
const normalized = chain?.toLowerCase() || '';
|
|
76
|
-
if
|
|
172
|
+
// Check if it's already a valid chain code
|
|
173
|
+
if (chainByCode.has(normalized)) {
|
|
77
174
|
return normalized;
|
|
78
175
|
}
|
|
176
|
+
// Check if it's a short name
|
|
79
177
|
const upper = chain?.toUpperCase() || '';
|
|
80
|
-
const
|
|
81
|
-
if (
|
|
82
|
-
return
|
|
178
|
+
const config = chainByShortName.get(upper);
|
|
179
|
+
if (config) {
|
|
180
|
+
return config.code;
|
|
83
181
|
}
|
|
84
182
|
return normalized;
|
|
85
183
|
}
|
|
@@ -90,68 +188,66 @@ export function getChainName(chain) {
|
|
|
90
188
|
*/
|
|
91
189
|
export function getChainShortCode(chain) {
|
|
92
190
|
const normalized = chain?.toLowerCase() || '';
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
191
|
+
// Check if it's a chain code
|
|
192
|
+
const config = chainByCode.get(normalized);
|
|
193
|
+
if (config) {
|
|
194
|
+
return config.shortName;
|
|
195
|
+
}
|
|
196
|
+
// Check common aliases
|
|
197
|
+
const aliases = { btc: 'BTC', eth: 'ETH', sol: 'SOL', avax: 'AVAX' };
|
|
198
|
+
if (aliases[normalized]) {
|
|
199
|
+
return aliases[normalized];
|
|
96
200
|
}
|
|
201
|
+
// Check if it's already a valid short name
|
|
97
202
|
const upper = chain?.toUpperCase() || '';
|
|
98
|
-
if (upper
|
|
203
|
+
if (chainByShortName.has(upper)) {
|
|
99
204
|
return upper;
|
|
100
205
|
}
|
|
101
206
|
return upper;
|
|
102
207
|
}
|
|
208
|
+
// ============================================
|
|
209
|
+
// Chain Type Helpers
|
|
210
|
+
// ============================================
|
|
103
211
|
/**
|
|
104
|
-
*
|
|
105
|
-
* - code: blockchain identifier used in API calls (e.g., 'ethereum')
|
|
106
|
-
* - name: human-readable name (e.g., 'Ethereum')
|
|
107
|
-
* - shortName: native token symbol (e.g., 'ETH')
|
|
108
|
-
* - isActive: whether the chain is currently supported in the app
|
|
212
|
+
* Check if a chain short code represents Ethereum
|
|
109
213
|
*/
|
|
110
|
-
export
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
{ code: BLOCKCHAIN.POLYGON, name: 'Polygon', shortName: 'MATIC', isActive: false },
|
|
114
|
-
{ code: BLOCKCHAIN.ARBITRUM, name: 'Arbitrum', shortName: 'ETH', isActive: false },
|
|
115
|
-
{ code: BLOCKCHAIN.OPTIMISM, name: 'Optimism', shortName: 'ETH', isActive: false },
|
|
116
|
-
{ code: BLOCKCHAIN.BASE, name: 'Base', shortName: 'ETH', isActive: false },
|
|
117
|
-
];
|
|
214
|
+
export function isEthereumChain(chainShortCode) {
|
|
215
|
+
return chainShortCode === 'ETH';
|
|
216
|
+
}
|
|
118
217
|
/**
|
|
119
|
-
*
|
|
218
|
+
* Check if a chain short code represents Bitcoin
|
|
120
219
|
*/
|
|
121
|
-
export function
|
|
122
|
-
return
|
|
220
|
+
export function isBitcoinChain(chainShortCode) {
|
|
221
|
+
return chainShortCode === 'BTC';
|
|
123
222
|
}
|
|
124
223
|
/**
|
|
125
|
-
* Get
|
|
224
|
+
* Get the full blockchain display name from a chain short code
|
|
225
|
+
* @param chainShortCode - Chain short code (e.g., 'ETH', 'BTC')
|
|
226
|
+
* @returns Full blockchain name (e.g., 'Ethereum', 'Bitcoin')
|
|
126
227
|
*/
|
|
127
|
-
export function
|
|
128
|
-
|
|
228
|
+
export function getBlockchainDisplayName(chainShortCode) {
|
|
229
|
+
const config = chainByShortName.get(chainShortCode);
|
|
230
|
+
return config?.name || chainShortCode;
|
|
129
231
|
}
|
|
130
232
|
/**
|
|
131
|
-
* Get
|
|
233
|
+
* Get address placeholder for input fields based on chain
|
|
234
|
+
* @param chainShortCode - Chain short code (e.g., 'ETH', 'BTC')
|
|
132
235
|
*/
|
|
133
|
-
export function
|
|
134
|
-
|
|
236
|
+
export function getAddressPlaceholder(chainShortCode) {
|
|
237
|
+
const config = chainByShortName.get(chainShortCode);
|
|
238
|
+
return config?.addressPlaceholder || 'Enter address';
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Get estimated confirmation time for a chain
|
|
242
|
+
* @param chainShortCode - Chain short code (e.g., 'ETH', 'BTC')
|
|
243
|
+
*/
|
|
244
|
+
export function getEstimatedConfirmationTime(chainShortCode) {
|
|
245
|
+
const config = chainByShortName.get(chainShortCode);
|
|
246
|
+
return config?.confirmationTime || '~5 minutes';
|
|
135
247
|
}
|
|
136
248
|
// ============================================
|
|
137
249
|
// Block Explorer URLs
|
|
138
250
|
// ============================================
|
|
139
|
-
/**
|
|
140
|
-
* Block explorer base URLs for transaction lookups
|
|
141
|
-
* Maps chain identifiers to their explorer transaction URL prefix
|
|
142
|
-
*/
|
|
143
|
-
export const BLOCK_EXPLORER_TX_URLS = {
|
|
144
|
-
[BLOCKCHAIN.ETHEREUM]: 'https://etherscan.io/tx/',
|
|
145
|
-
eth: 'https://etherscan.io/tx/',
|
|
146
|
-
[BLOCKCHAIN.BITCOIN]: 'https://blockchain.com/btc/tx/',
|
|
147
|
-
btc: 'https://blockchain.com/btc/tx/',
|
|
148
|
-
[BLOCKCHAIN.POLYGON]: 'https://polygonscan.com/tx/',
|
|
149
|
-
[BLOCKCHAIN.ARBITRUM]: 'https://arbiscan.io/tx/',
|
|
150
|
-
[BLOCKCHAIN.OPTIMISM]: 'https://optimistic.etherscan.io/tx/',
|
|
151
|
-
[BLOCKCHAIN.BASE]: 'https://basescan.org/tx/',
|
|
152
|
-
[BLOCKCHAIN.AVALANCHE]: 'https://snowtrace.io/tx/',
|
|
153
|
-
[BLOCKCHAIN.SOLANA]: 'https://solscan.io/tx/',
|
|
154
|
-
};
|
|
155
251
|
/**
|
|
156
252
|
* Get block explorer URL for a transaction
|
|
157
253
|
* @param chain - Chain identifier (e.g., 'ethereum', 'bitcoin', 'eth', 'btc')
|
|
@@ -160,9 +256,30 @@ export const BLOCK_EXPLORER_TX_URLS = {
|
|
|
160
256
|
*/
|
|
161
257
|
export function getBlockExplorerTxUrl(chain, txHash) {
|
|
162
258
|
const normalized = chain?.toLowerCase() || '';
|
|
163
|
-
|
|
259
|
+
// Try to find by chain code
|
|
260
|
+
let config = chainByCode.get(normalized);
|
|
261
|
+
// Try common aliases
|
|
262
|
+
if (!config) {
|
|
263
|
+
const aliases = {
|
|
264
|
+
btc: BLOCKCHAIN.BITCOIN,
|
|
265
|
+
eth: BLOCKCHAIN.ETHEREUM,
|
|
266
|
+
};
|
|
267
|
+
if (aliases[normalized]) {
|
|
268
|
+
config = chainByCode.get(aliases[normalized]);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
const baseUrl = config?.explorerTxUrl || 'https://etherscan.io/tx/';
|
|
164
272
|
return `${baseUrl}${txHash}`;
|
|
165
273
|
}
|
|
274
|
+
/**
|
|
275
|
+
* Block explorer base URLs for transaction lookups
|
|
276
|
+
* @deprecated Use getBlockExplorerTxUrl() instead
|
|
277
|
+
*/
|
|
278
|
+
export const BLOCK_EXPLORER_TX_URLS = Object.fromEntries([
|
|
279
|
+
...SUPPORTED_CHAINS.map((c) => [c.code, c.explorerTxUrl]),
|
|
280
|
+
['eth', 'https://etherscan.io/tx/'],
|
|
281
|
+
['btc', 'https://blockchain.com/btc/tx/'],
|
|
282
|
+
]);
|
|
166
283
|
// ============================================
|
|
167
284
|
// Transfer Fee Estimates
|
|
168
285
|
// ============================================
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallets.js","sourceRoot":"","sources":["../../src/business/wallets.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,+CAA+C;AAC/C,+BAA+B;AAC/B,+CAA+C;AAE/C,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;CACZ,CAAC;AAIX,MAAM,CAAC,MAAM,iCAAiC,GAA6C;IACzF,CAAC,0BAA0B,CAAC,OAAO,CAAC,EAAE,sBAAsB;IAC5D,CAAC,0BAA0B,CAAC,QAAQ,CAAC,EAAE,UAAU;CAClD,CAAC;AAEF,+CAA+C;AAC/C,
|
|
1
|
+
{"version":3,"file":"wallets.js","sourceRoot":"","sources":["../../src/business/wallets.ts"],"names":[],"mappings":"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"}
|