@cranberry-money/shared-constants 8.15.430 → 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/wallets.d.ts +42 -35
- package/dist/business/wallets.d.ts.map +1 -1
- package/dist/business/wallets.js +180 -114
- package/dist/business/wallets.js.map +1 -1
- package/package.json +1 -1
|
@@ -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
21
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*/
|
|
34
|
-
export declare const NATIVE_ASSET_TO_CHAIN: Record<string, BlockchainType>;
|
|
35
|
-
/**
|
|
36
|
-
* Get full blockchain name from any chain identifier (short code or full name)
|
|
37
|
-
* @param chain - Chain identifier (e.g., 'ETH', 'ethereum', 'BTC', 'bitcoin')
|
|
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,32 +37,61 @@ 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
|
/**
|
|
73
70
|
* Get only active chains
|
|
74
71
|
*/
|
|
75
72
|
export declare function getActiveChains(): ChainConfig[];
|
|
73
|
+
/**
|
|
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
|
|
77
|
+
*/
|
|
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;
|
|
76
85
|
/**
|
|
77
86
|
* Check if a chain short code represents Ethereum
|
|
78
|
-
* @param chainShortCode - Chain short code (e.g., 'ETH', 'BTC')
|
|
79
87
|
*/
|
|
80
88
|
export declare function isEthereumChain(chainShortCode: string): boolean;
|
|
81
89
|
/**
|
|
82
90
|
* Check if a chain short code represents Bitcoin
|
|
83
|
-
* @param chainShortCode - Chain short code (e.g., 'ETH', 'BTC')
|
|
84
91
|
*/
|
|
85
92
|
export declare function isBitcoinChain(chainShortCode: string): boolean;
|
|
86
93
|
/**
|
|
87
|
-
* Get the full blockchain name from a chain short code
|
|
94
|
+
* Get the full blockchain display name from a chain short code
|
|
88
95
|
* @param chainShortCode - Chain short code (e.g., 'ETH', 'BTC')
|
|
89
96
|
* @returns Full blockchain name (e.g., 'Ethereum', 'Bitcoin')
|
|
90
97
|
*/
|
|
@@ -99,11 +106,6 @@ export declare function getAddressPlaceholder(chainShortCode: string): string;
|
|
|
99
106
|
* @param chainShortCode - Chain short code (e.g., 'ETH', 'BTC')
|
|
100
107
|
*/
|
|
101
108
|
export declare function getEstimatedConfirmationTime(chainShortCode: string): string;
|
|
102
|
-
/**
|
|
103
|
-
* Block explorer base URLs for transaction lookups
|
|
104
|
-
* Maps chain identifiers to their explorer transaction URL prefix
|
|
105
|
-
*/
|
|
106
|
-
export declare const BLOCK_EXPLORER_TX_URLS: Record<string, string>;
|
|
107
109
|
/**
|
|
108
110
|
* Get block explorer URL for a transaction
|
|
109
111
|
* @param chain - Chain identifier (e.g., 'ethereum', 'bitcoin', 'eth', 'btc')
|
|
@@ -111,6 +113,11 @@ export declare const BLOCK_EXPLORER_TX_URLS: Record<string, string>;
|
|
|
111
113
|
* @returns Full URL to view the transaction on a block explorer
|
|
112
114
|
*/
|
|
113
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>;
|
|
114
121
|
/**
|
|
115
122
|
* Estimated transaction fees for "max amount" calculations
|
|
116
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
|
-
*
|
|
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
|
|
44
37
|
*/
|
|
45
|
-
export const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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,119 +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
|
}
|
|
103
|
-
/**
|
|
104
|
-
* Centralized chain configuration for the app
|
|
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
|
|
109
|
-
*/
|
|
110
|
-
export const SUPPORTED_CHAINS = [
|
|
111
|
-
{ code: BLOCKCHAIN.ETHEREUM, name: 'Ethereum', shortName: 'ETH', isActive: true },
|
|
112
|
-
{ code: BLOCKCHAIN.BITCOIN, name: 'Bitcoin', shortName: 'BTC', isActive: true },
|
|
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
|
-
];
|
|
118
|
-
/**
|
|
119
|
-
* Get chain config by code
|
|
120
|
-
*/
|
|
121
|
-
export function getChainConfig(code) {
|
|
122
|
-
return SUPPORTED_CHAINS.find((c) => c.code === code);
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Get chain config by short name (native asset symbol)
|
|
126
|
-
*/
|
|
127
|
-
export function getChainByShortName(shortName) {
|
|
128
|
-
return SUPPORTED_CHAINS.find((c) => c.shortName === shortName);
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Get only active chains
|
|
132
|
-
*/
|
|
133
|
-
export function getActiveChains() {
|
|
134
|
-
return SUPPORTED_CHAINS.filter((c) => c.isActive);
|
|
135
|
-
}
|
|
136
208
|
// ============================================
|
|
137
209
|
// Chain Type Helpers
|
|
138
210
|
// ============================================
|
|
139
211
|
/**
|
|
140
212
|
* Check if a chain short code represents Ethereum
|
|
141
|
-
* @param chainShortCode - Chain short code (e.g., 'ETH', 'BTC')
|
|
142
213
|
*/
|
|
143
214
|
export function isEthereumChain(chainShortCode) {
|
|
144
215
|
return chainShortCode === 'ETH';
|
|
145
216
|
}
|
|
146
217
|
/**
|
|
147
218
|
* Check if a chain short code represents Bitcoin
|
|
148
|
-
* @param chainShortCode - Chain short code (e.g., 'ETH', 'BTC')
|
|
149
219
|
*/
|
|
150
220
|
export function isBitcoinChain(chainShortCode) {
|
|
151
221
|
return chainShortCode === 'BTC';
|
|
152
222
|
}
|
|
153
223
|
/**
|
|
154
|
-
* Get the full blockchain name from a chain short code
|
|
224
|
+
* Get the full blockchain display name from a chain short code
|
|
155
225
|
* @param chainShortCode - Chain short code (e.g., 'ETH', 'BTC')
|
|
156
226
|
* @returns Full blockchain name (e.g., 'Ethereum', 'Bitcoin')
|
|
157
227
|
*/
|
|
158
228
|
export function getBlockchainDisplayName(chainShortCode) {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
if (isBitcoinChain(chainShortCode))
|
|
162
|
-
return 'Bitcoin';
|
|
163
|
-
return chainShortCode;
|
|
229
|
+
const config = chainByShortName.get(chainShortCode);
|
|
230
|
+
return config?.name || chainShortCode;
|
|
164
231
|
}
|
|
165
232
|
/**
|
|
166
233
|
* Get address placeholder for input fields based on chain
|
|
167
234
|
* @param chainShortCode - Chain short code (e.g., 'ETH', 'BTC')
|
|
168
235
|
*/
|
|
169
236
|
export function getAddressPlaceholder(chainShortCode) {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
if (isBitcoinChain(chainShortCode))
|
|
173
|
-
return '1... or 3... or bc1...';
|
|
174
|
-
return 'Enter address';
|
|
237
|
+
const config = chainByShortName.get(chainShortCode);
|
|
238
|
+
return config?.addressPlaceholder || 'Enter address';
|
|
175
239
|
}
|
|
176
240
|
/**
|
|
177
241
|
* Get estimated confirmation time for a chain
|
|
178
242
|
* @param chainShortCode - Chain short code (e.g., 'ETH', 'BTC')
|
|
179
243
|
*/
|
|
180
244
|
export function getEstimatedConfirmationTime(chainShortCode) {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
if (isBitcoinChain(chainShortCode))
|
|
184
|
-
return '~10 minutes';
|
|
185
|
-
return '~5 minutes';
|
|
245
|
+
const config = chainByShortName.get(chainShortCode);
|
|
246
|
+
return config?.confirmationTime || '~5 minutes';
|
|
186
247
|
}
|
|
187
248
|
// ============================================
|
|
188
249
|
// Block Explorer URLs
|
|
189
250
|
// ============================================
|
|
190
|
-
/**
|
|
191
|
-
* Block explorer base URLs for transaction lookups
|
|
192
|
-
* Maps chain identifiers to their explorer transaction URL prefix
|
|
193
|
-
*/
|
|
194
|
-
export const BLOCK_EXPLORER_TX_URLS = {
|
|
195
|
-
[BLOCKCHAIN.ETHEREUM]: 'https://etherscan.io/tx/',
|
|
196
|
-
eth: 'https://etherscan.io/tx/',
|
|
197
|
-
[BLOCKCHAIN.BITCOIN]: 'https://blockchain.com/btc/tx/',
|
|
198
|
-
btc: 'https://blockchain.com/btc/tx/',
|
|
199
|
-
[BLOCKCHAIN.POLYGON]: 'https://polygonscan.com/tx/',
|
|
200
|
-
[BLOCKCHAIN.ARBITRUM]: 'https://arbiscan.io/tx/',
|
|
201
|
-
[BLOCKCHAIN.OPTIMISM]: 'https://optimistic.etherscan.io/tx/',
|
|
202
|
-
[BLOCKCHAIN.BASE]: 'https://basescan.org/tx/',
|
|
203
|
-
[BLOCKCHAIN.AVALANCHE]: 'https://snowtrace.io/tx/',
|
|
204
|
-
[BLOCKCHAIN.SOLANA]: 'https://solscan.io/tx/',
|
|
205
|
-
};
|
|
206
251
|
/**
|
|
207
252
|
* Get block explorer URL for a transaction
|
|
208
253
|
* @param chain - Chain identifier (e.g., 'ethereum', 'bitcoin', 'eth', 'btc')
|
|
@@ -211,9 +256,30 @@ export const BLOCK_EXPLORER_TX_URLS = {
|
|
|
211
256
|
*/
|
|
212
257
|
export function getBlockExplorerTxUrl(chain, txHash) {
|
|
213
258
|
const normalized = chain?.toLowerCase() || '';
|
|
214
|
-
|
|
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/';
|
|
215
272
|
return `${baseUrl}${txHash}`;
|
|
216
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
|
+
]);
|
|
217
283
|
// ============================================
|
|
218
284
|
// Transfer Fee Estimates
|
|
219
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":"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,6CAA6C;AAC7C,+CAA+C;AAE/C,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,MAAM;CACJ,CAAC;AAkBX;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAkB;IAC7C;QACE,IAAI,EAAE,UAAU,CAAC,QAAQ;QACzB,IAAI,EAAE,UAAU;QAChB,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,IAAI;QACd,aAAa,EAAE,0BAA0B;QACzC,kBAAkB,EAAE,OAAO;QAC3B,gBAAgB,EAAE,cAAc;KACjC;IACD;QACE,IAAI,EAAE,UAAU,CAAC,OAAO;QACxB,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,IAAI;QACd,aAAa,EAAE,gCAAgC;QAC/C,kBAAkB,EAAE,wBAAwB;QAC5C,gBAAgB,EAAE,aAAa;KAChC;IACD;QACE,IAAI,EAAE,UAAU,CAAC,OAAO;QACxB,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,OAAO;QAClB,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,6BAA6B;QAC5C,kBAAkB,EAAE,OAAO;QAC3B,gBAAgB,EAAE,YAAY;KAC/B;IACD;QACE,IAAI,EAAE,UAAU,CAAC,MAAM;QACvB,IAAI,EAAE,QAAQ;QACd,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,wBAAwB;QACvC,kBAAkB,EAAE,eAAe;QACnC,gBAAgB,EAAE,WAAW;KAC9B;IACD;QACE,IAAI,EAAE,UAAU,CAAC,SAAS;QAC1B,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,MAAM;QACjB,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,0BAA0B;QACzC,kBAAkB,EAAE,OAAO;QAC3B,gBAAgB,EAAE,YAAY;KAC/B;IACD;QACE,IAAI,EAAE,UAAU,CAAC,QAAQ;QACzB,IAAI,EAAE,UAAU;QAChB,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,yBAAyB;QACxC,kBAAkB,EAAE,OAAO;QAC3B,gBAAgB,EAAE,YAAY;KAC/B;IACD;QACE,IAAI,EAAE,UAAU,CAAC,QAAQ;QACzB,IAAI,EAAE,UAAU;QAChB,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,qCAAqC;QACpD,kBAAkB,EAAE,OAAO;QAC3B,gBAAgB,EAAE,YAAY;KAC/B;IACD;QACE,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,0BAA0B;QACzC,kBAAkB,EAAE,OAAO;QAC3B,gBAAgB,EAAE,YAAY;KAC/B;CACF,CAAC;AAEF,+CAA+C;AAC/C,gDAAgD;AAChD,+CAA+C;AAE/C,yCAAyC;AACzC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhF;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA2B,MAAM,CAAC,WAAW,CAAC;IAC9E,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACrD,+CAA+C;IAC/C,CAAC,KAAK,EAAE,KAAK,CAAC;IACd,CAAC,KAAK,EAAE,KAAK,CAAC;IACd,CAAC,KAAK,EAAE,KAAK,CAAC;IACd,CAAC,MAAM,EAAE,MAAM,CAAC;CACjB,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAmC,MAAM,CAAC,WAAW,CACrF,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACjG,CAAC,CAAC,SAAS;IACX,CAAC,CAAC,IAAI;CACP,CAAC,CACH,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA2B,MAAM,CAAC,WAAW,CACzE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAC9C,CAAC;AAEF,+CAA+C;AAC/C,yBAAyB;AACzB,+CAA+C;AAE/C;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,WAAW,CAAC,GAAG,CAAC,IAAsB,CAAC,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAiB;IACnD,OAAO,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,MAAM,UAAU,GAAG,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAE9C,2CAA2C;IAC3C,IAAI,WAAW,CAAC,GAAG,CAAC,UAA4B,CAAC,EAAE,CAAC;QAClD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,6BAA6B;IAC7B,MAAM,KAAK,GAAG,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,UAAU,GAAG,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAE9C,6BAA6B;IAC7B,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,UAA4B,CAAC,CAAC;IAC7D,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,uBAAuB;IACvB,MAAM,OAAO,GAA2B,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC7F,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7B,CAAC;IAED,2CAA2C;IAC3C,MAAM,KAAK,GAAG,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACzC,IAAI,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+CAA+C;AAC/C,qBAAqB;AACrB,+CAA+C;AAE/C;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,cAAsB;IACpD,OAAO,cAAc,KAAK,KAAK,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,cAAsB;IACnD,OAAO,cAAc,KAAK,KAAK,CAAC;AAClC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,cAAsB;IAC7D,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACpD,OAAO,MAAM,EAAE,IAAI,IAAI,cAAc,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,cAAsB;IAC1D,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACpD,OAAO,MAAM,EAAE,kBAAkB,IAAI,eAAe,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,cAAsB;IACjE,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACpD,OAAO,MAAM,EAAE,gBAAgB,IAAI,YAAY,CAAC;AAClD,CAAC;AAED,+CAA+C;AAC/C,sBAAsB;AACtB,+CAA+C;AAE/C;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAa,EAAE,MAAc;IACjE,MAAM,UAAU,GAAG,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAE9C,4BAA4B;IAC5B,IAAI,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,UAA4B,CAAC,CAAC;IAE3D,qBAAqB;IACrB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,OAAO,GAAmC;YAC9C,GAAG,EAAE,UAAU,CAAC,OAAO;YACvB,GAAG,EAAE,UAAU,CAAC,QAAQ;SACzB,CAAC;QACF,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,EAAE,aAAa,IAAI,0BAA0B,CAAC;IACpE,OAAO,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAA2B,MAAM,CAAC,WAAW,CAAC;IAC/E,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;IACzD,CAAC,KAAK,EAAE,0BAA0B,CAAC;IACnC,CAAC,KAAK,EAAE,gCAAgC,CAAC;CAC1C,CAAC,CAAC;AAEH,+CAA+C;AAC/C,yBAAyB;AACzB,+CAA+C;AAE/C;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,GAAG,EAAE,MAAM,EAAE,mDAAmD;IAChE,GAAG,EAAE,KAAK,EAAE,sDAAsD;CAC1D,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,cAAsB;IACpD,OAAO,sBAAsB,CAAC,cAAqD,CAAC,IAAI,sBAAsB,CAAC,GAAG,CAAC;AACrH,CAAC;AAED,+CAA+C;AAC/C,qCAAqC;AACrC,+CAA+C;AAE/C,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,QAAQ,EAAE,qBAAqB;IAC/B,OAAO,EAAE,wDAAwD;CACzD,CAAC;AAEX,+CAA+C;AAC/C,wBAAwB;AACxB,+CAA+C;AAE/C,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,sBAAsB,EAAE,GAAG;IAC3B,aAAa,EAAE,CAAC;CACR,CAAC;AAEX,+CAA+C;AAC/C,0BAA0B;AAC1B,+CAA+C;AAE/C,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,YAAY;IACxB,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,WAAW;CACd,CAAC;AAIX,MAAM,CAAC,MAAM,8BAA8B,GAA0C;IACnF,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,SAAS;IAC5C,CAAC,uBAAuB,CAAC,UAAU,CAAC,EAAE,YAAY;IAClD,CAAC,uBAAuB,CAAC,SAAS,CAAC,EAAE,WAAW;IAChD,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,QAAQ;IAC1C,CAAC,uBAAuB,CAAC,SAAS,CAAC,EAAE,WAAW;CACjD,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;CACJ,CAAC;AAIX,MAAM,CAAC,MAAM,gCAAgC,GAA4C;IACvF,CAAC,yBAAyB,CAAC,OAAO,CAAC,EAAE,SAAS;IAC9C,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,cAAc;CACjD,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,MAAM;IACZ,aAAa,EAAE,eAAe;IAC9B,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,YAAY;CAChB,CAAC;AAIX,MAAM,CAAC,MAAM,qBAAqB,GAAkC;IAClE,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,mBAAmB;IAC1C,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,eAAe;IAC/C,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,WAAW;IACvC,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,YAAY;CAC1C,CAAC"}
|