@getpara/shared 1.6.0 → 1.8.0

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/cjs/index.js CHANGED
@@ -10,9 +10,34 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
10
10
  if (k2 === undefined) k2 = k;
11
11
  o[k2] = m[k];
12
12
  }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
13
18
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
19
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
20
  };
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
16
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.transactionTypes = void 0;
17
40
  __exportStar(require("./types/index.js"), exports);
18
41
  __exportStar(require("./utils/index.js"), exports);
42
+ const transactionTypes = __importStar(require("./types/transaction.js"));
43
+ exports.transactionTypes = transactionTypes;
@@ -19,5 +19,6 @@ __exportStar(require("./auth.js"), exports);
19
19
  __exportStar(require("./params.js"), exports);
20
20
  __exportStar(require("./partner.js"), exports);
21
21
  __exportStar(require("./theme.js"), exports);
22
+ __exportStar(require("./transaction.js"), exports);
22
23
  __exportStar(require("./wallet.js"), exports);
23
24
  __exportStar(require("./user.js"), exports);
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TRANSACTION_ERROR_CODES = void 0;
4
+ exports.TRANSACTION_ERROR_CODES = [
5
+ // RPC issues
6
+ 'INVALID_RPC_URL',
7
+ 'INVALID_CHAIN_ID',
8
+ 'RPC_UNAVAILABLE',
9
+ 'UNSUPPORTED_TRANSACTION_TYPE',
10
+ // Address validation
11
+ 'INVALID_DESTINATION_ADDRESS',
12
+ 'INVALID_SOURCE_ADDRESS',
13
+ 'INVALID_CONTRACT_ADDRESS',
14
+ // Balance issues
15
+ 'INSUFFICIENT_NATIVE_BALANCE', // Not enough ETH/SOL for send amount + fees
16
+ 'INSUFFICIENT_TOKEN_BALANCE', // Not enough ERC-20/SPL tokens
17
+ 'INSUFFICIENT_FEE', // Not enough native token for fees only (Solana)
18
+ // Token approvals (EVM only)
19
+ 'INSUFFICIENT_ALLOWANCE', // ERC-20 approval needed
20
+ // Account issues (Solana only)
21
+ 'RECIPIENT_ACCOUNT_REQUIRED', // SPL token account needs to be created
22
+ // Execution failures
23
+ 'CONTRACT_EXECUTION_REVERTED', // Smart contract rejected the transaction
24
+ 'GAS_ESTIMATION_FAILED', // Cannot estimate gas (EVM)
25
+ 'PROGRAM_ERROR', // Solana program error
26
+ 'COMPUTE_BUDGET_EXCEEDED', // Solana compute units exceeded
27
+ 'TRANSACTION_EXPIRED', // Solana blockhash expired
28
+ 'EXECUTION_FAILED', // Generic execution failure
29
+ ];
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.formatCurrency = formatCurrency;
4
4
  exports.formatAssetQuantity = formatAssetQuantity;
5
+ exports.filterWalletBalance = filterWalletBalance;
6
+ exports.filterProfileBalance = filterProfileBalance;
5
7
  const zeroAssetFormatter = new Intl.NumberFormat('en-US', {
6
8
  style: 'decimal',
7
9
  maximumFractionDigits: 0,
@@ -29,22 +31,124 @@ function formatCurrency(value, { fallback = '' } = {}) {
29
31
  }
30
32
  function formatAssetQuantity({ quantity, symbol = '', decimals, fallback = '', }) {
31
33
  try {
32
- if (quantity == null) {
34
+ if (quantity === undefined || isNaN(Number(quantity))) {
33
35
  return fallback;
34
36
  }
37
+ const num = Number(quantity);
35
38
  const formatter = new Intl.NumberFormat('en-US', {
36
39
  style: 'decimal',
37
- maximumFractionDigits: decimals ?? (Math.abs(quantity) < 0.001 ? 6 : 3),
38
- minimumFractionDigits: decimals ?? 3,
40
+ maximumFractionDigits: decimals ?? (Math.abs(num) < 0.001 ? 6 : 3),
41
+ minimumFractionDigits: 0,
39
42
  });
40
43
  const formattedQuantity = quantity === 0
41
44
  ? '0'
42
- : Math.abs(quantity) < 10 ** (-1 * (decimals ?? 6))
45
+ : Math.abs(num) < 10 ** (-1 * (decimals ?? 6))
43
46
  ? zeroAssetFormatter.format(0)
44
- : formatter.format(quantity);
47
+ : formatter.format(num);
45
48
  return `${formattedQuantity}${symbol && symbol.length > 0 ? ` ${symbol}` : ''}`;
46
49
  }
47
50
  catch (_e) {
48
51
  return fallback;
49
52
  }
50
53
  }
54
+ const buildCustomAssetId = (symbol) => `custom_${symbol}`;
55
+ const isNonNullable = (value) => value !== null;
56
+ function filterWalletBalance(balance, config) {
57
+ if (config.isComprehensive) {
58
+ return balance;
59
+ }
60
+ const requestType = config.requestType ?? 'MAINNET';
61
+ let filteredAssets = balance.assets;
62
+ let filteredNetworks = balance.networks;
63
+ if (requestType !== 'MAINNET_AND_TESTNET') {
64
+ const includeTestnet = requestType === 'TESTNET';
65
+ filteredAssets = balance.assets
66
+ .map((asset) => {
67
+ const filteredAssetNetworks = asset.networks.filter((network) => {
68
+ const networkIsTestnet = network.metadata?.isTestnet ?? false;
69
+ return includeTestnet ? networkIsTestnet : !networkIsTestnet;
70
+ });
71
+ if (filteredAssetNetworks.length === 0) {
72
+ return null;
73
+ }
74
+ const quantity = filteredAssetNetworks.reduce((sum, n) => sum + n.quantity, 0);
75
+ const value = filteredAssetNetworks.reduce((sum, n) => sum + (n.value?.value ?? 0), 0);
76
+ return {
77
+ ...asset,
78
+ quantity,
79
+ networks: filteredAssetNetworks,
80
+ ...(asset.value ? { value: { value, currency: asset.value.currency } } : {}),
81
+ };
82
+ })
83
+ .filter(isNonNullable);
84
+ filteredNetworks = balance.networks
85
+ .map((network) => {
86
+ const networkIsTestnet = network.metadata?.isTestnet ?? false;
87
+ if (includeTestnet !== networkIsTestnet) {
88
+ return null;
89
+ }
90
+ const value = network.assets.reduce((sum, a) => sum + (a.value?.value ?? 0), 0);
91
+ return {
92
+ ...network,
93
+ assets: network.assets,
94
+ ...(network.value ? { value: { value, currency: network.value.currency } } : {}),
95
+ };
96
+ })
97
+ .filter(isNonNullable);
98
+ }
99
+ if (config.displayType === 'AGGREGATED' && config.excludeStandardAssets) {
100
+ filteredAssets = filteredAssets.filter((asset) => asset.metadata?.customAssetId !== undefined);
101
+ filteredNetworks = filteredNetworks
102
+ .map((network) => {
103
+ const filteredNetworkAssets = network.assets.filter((asset) => asset.metadata?.customAssetId !== undefined);
104
+ if (filteredNetworkAssets.length === 0) {
105
+ return null;
106
+ }
107
+ const value = filteredNetworkAssets.reduce((sum, a) => sum + (a.value?.value ?? 0), 0);
108
+ return {
109
+ ...network,
110
+ assets: filteredNetworkAssets,
111
+ ...(network.value ? { value: { value, currency: network.value.currency } } : {}),
112
+ };
113
+ })
114
+ .filter(isNonNullable);
115
+ }
116
+ if (config.displayType === 'CUSTOM_ASSET') {
117
+ const targetCustomAssetId = buildCustomAssetId(config.asset.symbol);
118
+ const matchesCustomAsset = (metadata) => {
119
+ if (metadata?.customAssetId) {
120
+ return metadata.customAssetId === targetCustomAssetId;
121
+ }
122
+ return metadata?.symbol === config.asset.symbol;
123
+ };
124
+ filteredAssets = filteredAssets.filter((asset) => matchesCustomAsset(asset.metadata));
125
+ filteredNetworks = filteredNetworks
126
+ .map((network) => {
127
+ const matchingAssets = network.assets.filter((asset) => matchesCustomAsset(asset.metadata));
128
+ if (matchingAssets.length === 0) {
129
+ return null;
130
+ }
131
+ return {
132
+ ...network,
133
+ assets: matchingAssets,
134
+ };
135
+ })
136
+ .filter(isNonNullable);
137
+ }
138
+ const totalValue = filteredAssets.reduce((sum, asset) => sum + (asset.value?.value ?? 0), 0);
139
+ return {
140
+ ...balance,
141
+ assets: filteredAssets,
142
+ networks: filteredNetworks,
143
+ ...(balance.value ? { value: { value: totalValue, currency: balance.value.currency } } : {}),
144
+ };
145
+ }
146
+ function filterProfileBalance(balance, config) {
147
+ const filteredWallets = balance.wallets.map((wallet) => filterWalletBalance(wallet, config));
148
+ const totalValue = filteredWallets.reduce((sum, wallet) => sum + (wallet.value?.value ?? 0), 0);
149
+ return {
150
+ ...balance,
151
+ wallets: filteredWallets,
152
+ ...(balance.value ? { value: { value: totalValue, currency: balance.value.currency } } : {}),
153
+ };
154
+ }
@@ -18,17 +18,427 @@ exports.NETWORK_METADATA = void 0;
18
18
  exports.getChainId = getChainId;
19
19
  exports.getNetworkFromChainId = getNetworkFromChainId;
20
20
  exports.NETWORK_METADATA = [
21
- { evmChainId: '11155111', internalId: 'SEPOLIA', zerionId: 'ethereum-sepolia', name: 'Sepolia' },
22
- { evmChainId: '1', internalId: 'ETHEREUM', zerionId: 'ethereum', name: 'Ethereum' },
23
- { evmChainId: '137', internalId: 'POLYGON', zerionId: 'polygon', name: 'Polygon' },
24
- { evmChainId: '42220', internalId: 'CELO', zerionId: 'celo', name: 'Celo' },
25
- { evmChainId: '8453', internalId: 'BASE', zerionId: 'base', name: 'Base' },
26
- { evmChainId: '42161', internalId: 'ARBITRUM', zerionId: 'arbitrum', name: 'Arbitrum' },
27
- { evmChainId: '10', internalId: 'OPTIMISM', zerionId: 'optimism', name: 'Optimism' },
28
- { evmChainId: '80094', internalId: 'BERACHAIN', zerionId: 'berachain', name: 'Berachain' },
29
- { internalId: 'SOLANA', name: 'Solana' },
30
- { internalId: 'SOLANA_DEVNET', name: 'Solana Devnet' },
31
- { internalId: 'COSMOS', name: 'Cosmos' },
21
+ {
22
+ type: 'EVM',
23
+ evmChainId: '11155111',
24
+ internalId: 'SEPOLIA',
25
+ zerionId: 'ethereum-sepolia',
26
+ name: 'Ethereum Sepolia',
27
+ alchemySlug: 'eth-sepolia',
28
+ },
29
+ {
30
+ type: 'EVM',
31
+ evmChainId: '1',
32
+ internalId: 'ETHEREUM',
33
+ zerionId: 'ethereum',
34
+ name: 'Ethereum',
35
+ alchemySlug: 'eth-mainnet',
36
+ },
37
+ {
38
+ type: 'EVM',
39
+ evmChainId: '137',
40
+ internalId: 'POLYGON',
41
+ zerionId: 'polygon',
42
+ name: 'Polygon',
43
+ alchemySlug: 'polygon-mainnet',
44
+ },
45
+ {
46
+ type: 'EVM',
47
+ evmChainId: '42220',
48
+ internalId: 'CELO',
49
+ zerionId: 'celo',
50
+ name: 'Celo',
51
+ alchemySlug: 'celo-mainnet',
52
+ },
53
+ {
54
+ type: 'EVM',
55
+ evmChainId: '8453',
56
+ internalId: 'BASE',
57
+ zerionId: 'base',
58
+ name: 'Base',
59
+ alchemySlug: 'base-mainnet',
60
+ },
61
+ {
62
+ type: 'EVM',
63
+ evmChainId: '42161',
64
+ internalId: 'ARBITRUM',
65
+ zerionId: 'arbitrum',
66
+ name: 'Arbitrum',
67
+ alchemySlug: 'arb-mainnet',
68
+ },
69
+ {
70
+ type: 'EVM',
71
+ evmChainId: '10',
72
+ internalId: 'OPTIMISM',
73
+ zerionId: 'optimism',
74
+ name: 'Optimism',
75
+ alchemySlug: 'opt-mainnet',
76
+ },
77
+ {
78
+ type: 'EVM',
79
+ evmChainId: '80094',
80
+ internalId: 'BERACHAIN',
81
+ zerionId: 'berachain',
82
+ name: 'Berachain',
83
+ alchemySlug: 'bera-mainnet',
84
+ },
85
+ {
86
+ type: 'EVM',
87
+ zerionId: 'binance-smart-chain',
88
+ evmChainId: '56',
89
+ name: 'Binance Smart Chain',
90
+ alchemySlug: 'bsc-mainnet',
91
+ },
92
+ {
93
+ type: 'EVM',
94
+ zerionId: 'tron',
95
+ evmChainId: '728126428',
96
+ name: 'Tron',
97
+ alchemySlug: 'tron-mainnet',
98
+ },
99
+ {
100
+ type: 'EVM',
101
+ zerionId: 'blast',
102
+ evmChainId: '81457',
103
+ name: 'Blast',
104
+ alchemySlug: 'blast-mainnet',
105
+ },
106
+ {
107
+ type: 'EVM',
108
+ zerionId: 'ape',
109
+ evmChainId: '33139',
110
+ name: 'Ape',
111
+ alchemySlug: 'ape-mainnet',
112
+ },
113
+ {
114
+ type: 'EVM',
115
+ zerionId: 'cronos-zkevm',
116
+ evmChainId: '388',
117
+ name: 'Cronos ZK-EVM',
118
+ },
119
+ {
120
+ type: 'EVM',
121
+ zerionId: '0g',
122
+ evmChainId: '16661',
123
+ name: 'Harmony',
124
+ },
125
+ {
126
+ type: 'EVM',
127
+ zerionId: 'opbnb',
128
+ evmChainId: '204',
129
+ alchemySlug: 'opbnb-mainnet',
130
+ name: 'Optimism Nova',
131
+ },
132
+ {
133
+ type: 'EVM',
134
+ zerionId: 'abstract',
135
+ evmChainId: '2741',
136
+ alchemySlug: 'abstract-mainnet',
137
+ name: 'Abstract',
138
+ },
139
+ {
140
+ type: 'EVM',
141
+ zerionId: 'avalanche',
142
+ evmChainId: '43114',
143
+ alchemySlug: 'avax-mainnet',
144
+ name: 'Avalanche',
145
+ },
146
+ {
147
+ type: 'EVM',
148
+ zerionId: 'zksync-era',
149
+ evmChainId: '324',
150
+ alchemySlug: 'zksync-mainnet',
151
+ name: 'ZKSync Era',
152
+ },
153
+ {
154
+ type: 'EVM',
155
+ zerionId: 'mantle',
156
+ evmChainId: '5000',
157
+ alchemySlug: 'mantle-mainnet',
158
+ name: 'Mantle',
159
+ },
160
+ {
161
+ type: 'EVM',
162
+ zerionId: 'bob',
163
+ evmChainId: '60808',
164
+ alchemySlug: 'bob-mainnet',
165
+ name: 'Bob',
166
+ },
167
+ { type: 'EVM', zerionId: 'cyber', evmChainId: '7560' },
168
+ {
169
+ type: 'EVM',
170
+ zerionId: 'degen',
171
+ evmChainId: '666666666',
172
+ alchemySlug: 'degen-mainnet',
173
+ name: 'Degen',
174
+ },
175
+ {
176
+ type: 'EVM',
177
+ zerionId: 'manta-pacific',
178
+ evmChainId: '169',
179
+ name: 'Manta Pacific',
180
+ },
181
+ { type: 'EVM', zerionId: 'fantom', evmChainId: '250', name: 'Fantom' },
182
+ {
183
+ type: 'EVM',
184
+ zerionId: 'ronin',
185
+ evmChainId: '2020',
186
+ alchemySlug: 'ronin-mainnet',
187
+ name: 'Ronin',
188
+ },
189
+ {
190
+ type: 'EVM',
191
+ zerionId: 'linea',
192
+ evmChainId: '59144',
193
+ alchemySlug: 'linea-mainnet',
194
+ name: 'Linea',
195
+ },
196
+ {
197
+ type: 'EVM',
198
+ zerionId: 'metis-andromeda',
199
+ evmChainId: '1088',
200
+ alchemySlug: 'metis-mainnet',
201
+ name: 'Metis Andromeda',
202
+ },
203
+ {
204
+ type: 'EVM',
205
+ zerionId: 'aurora',
206
+ evmChainId: '1313161554',
207
+ name: 'Aurora',
208
+ },
209
+ { type: 'EVM', zerionId: 'xinfin-xdc', evmChainId: '50' },
210
+ {
211
+ type: 'EVM',
212
+ zerionId: 'fraxtal',
213
+ evmChainId: '252',
214
+ alchemySlug: 'frax-mainnet',
215
+ name: 'Frax',
216
+ },
217
+ {
218
+ type: 'EVM',
219
+ zerionId: 'gravity-alpha',
220
+ evmChainId: '1625',
221
+ name: 'Gravity Alpha',
222
+ },
223
+ {
224
+ type: 'EVM',
225
+ zerionId: 'hyperevm',
226
+ evmChainId: '999',
227
+ alchemySlug: 'hyperliquid-mainnet',
228
+ name: 'Hyperliquid',
229
+ },
230
+ {
231
+ type: 'EVM',
232
+ zerionId: 'ink',
233
+ evmChainId: '57073',
234
+ alchemySlug: 'ink-mainnet',
235
+ name: 'Ink',
236
+ },
237
+ {
238
+ type: 'EVM',
239
+ zerionId: 'lens',
240
+ evmChainId: '232',
241
+ alchemySlug: 'lens-mainnet',
242
+ name: 'Lens',
243
+ },
244
+ {
245
+ type: 'EVM',
246
+ zerionId: 'lisk',
247
+ evmChainId: '1135',
248
+ name: 'Lisk',
249
+ },
250
+ {
251
+ type: 'EVM',
252
+ zerionId: 'mode',
253
+ evmChainId: '34443',
254
+ alchemySlug: 'mode-mainnet',
255
+ name: 'Mode',
256
+ },
257
+ {
258
+ type: 'EVM',
259
+ zerionId: 'plasma',
260
+ evmChainId: '9745',
261
+ alchemySlug: 'plasma-mainnet',
262
+ name: 'Plasma',
263
+ },
264
+ {
265
+ type: 'EVM',
266
+ zerionId: 'polygon-zkevm',
267
+ evmChainId: '1101',
268
+ alchemySlug: 'polygonzkevm-mainnet',
269
+ name: 'Polygon ZK-EVM',
270
+ },
271
+ {
272
+ type: 'EVM',
273
+ zerionId: 'polynomial',
274
+ evmChainId: '8008',
275
+ name: 'Polynomial',
276
+ },
277
+ {
278
+ type: 'EVM',
279
+ zerionId: 'rari',
280
+ evmChainId: '1380012617',
281
+ name: 'Rari',
282
+ },
283
+ {
284
+ type: 'EVM',
285
+ zerionId: 'redstone',
286
+ evmChainId: '690',
287
+ name: 'Redstone',
288
+ },
289
+ {
290
+ type: 'EVM',
291
+ zerionId: 'scroll',
292
+ evmChainId: '534352',
293
+ alchemySlug: 'scroll-mainnet',
294
+ name: 'Scroll',
295
+ },
296
+ {
297
+ type: 'EVM',
298
+ zerionId: 'sei',
299
+ evmChainId: '1329',
300
+ alchemySlug: 'sei-mainnet',
301
+ name: 'Sei',
302
+ },
303
+ {
304
+ type: 'EVM',
305
+ zerionId: 'somnia',
306
+ evmChainId: '5031',
307
+ },
308
+ {
309
+ type: 'EVM',
310
+ zerionId: 'soneium',
311
+ evmChainId: '1868',
312
+ alchemySlug: 'soneium-mainnet',
313
+ name: 'Soneium',
314
+ },
315
+ {
316
+ type: 'EVM',
317
+ zerionId: 'sonic',
318
+ evmChainId: '146',
319
+ alchemySlug: 'sonic-mainnet',
320
+ name: 'Sonic',
321
+ },
322
+ {
323
+ type: 'EVM',
324
+ zerionId: 'swellchain',
325
+ evmChainId: '1923',
326
+ name: 'Swellchain',
327
+ },
328
+ {
329
+ type: 'EVM',
330
+ zerionId: 'taiko',
331
+ evmChainId: '167000',
332
+ alchemySlug: 'taiko-mainnet',
333
+ name: 'Taiko',
334
+ },
335
+ {
336
+ type: 'EVM',
337
+ zerionId: 'unichain',
338
+ evmChainId: '130',
339
+ alchemySlug: 'uni-mainnet',
340
+ name: 'Unichain',
341
+ },
342
+ {
343
+ type: 'EVM',
344
+ zerionId: 'wonder',
345
+ evmChainId: '9637',
346
+ name: 'Wonder',
347
+ },
348
+ {
349
+ type: 'EVM',
350
+ zerionId: 'tomochain',
351
+ evmChainId: '88',
352
+ name: 'Tomochain',
353
+ },
354
+ {
355
+ type: 'EVM',
356
+ zerionId: 'world',
357
+ evmChainId: '480',
358
+ alchemySlug: 'world-mainnet',
359
+ name: 'Worldchain',
360
+ },
361
+ {
362
+ type: 'EVM',
363
+ zerionId: 'zero',
364
+ evmChainId: '543210',
365
+ name: 'Zero',
366
+ },
367
+ {
368
+ type: 'EVM',
369
+ zerionId: 'okbchain',
370
+ evmChainId: '196',
371
+ name: 'OKBChain',
372
+ },
373
+ {
374
+ type: 'EVM',
375
+ zerionId: 'zkcandy',
376
+ evmChainId: '320',
377
+ name: 'ZKCandy',
378
+ },
379
+ {
380
+ type: 'EVM',
381
+ zerionId: 'zklink-nova',
382
+ evmChainId: '810180',
383
+ name: 'ZKLink Nova',
384
+ },
385
+ {
386
+ type: 'EVM',
387
+ zerionId: 'zora',
388
+ evmChainId: '7777777',
389
+ alchemySlug: 'zora-mainnet',
390
+ name: 'Zora',
391
+ },
392
+ {
393
+ type: 'EVM',
394
+ zerionId: 're-al',
395
+ evmChainId: '111188',
396
+ name: 'Re-Al',
397
+ },
398
+ {
399
+ type: 'EVM',
400
+ zerionId: 'katana',
401
+ evmChainId: '747474',
402
+ name: 'Katana',
403
+ },
404
+ {
405
+ type: 'EVM',
406
+ zerionId: 'monad-test-v2',
407
+ evmChainId: '10143',
408
+ name: 'Monad Testnet',
409
+ },
410
+ {
411
+ type: 'EVM',
412
+ zerionId: 'unichain-sepolia',
413
+ evmChainId: '1301',
414
+ name: 'Unichain Sepolia',
415
+ },
416
+ {
417
+ type: 'EVM',
418
+ zerionId: 'zero-sepolia-v2',
419
+ evmChainId: '43210',
420
+ name: 'Zero Sepolia V2',
421
+ },
422
+ {
423
+ type: 'SOLANA',
424
+ internalId: 'SOLANA',
425
+ zerionId: 'solana',
426
+ alchemySlug: 'solana-mainnet',
427
+ name: 'Solana',
428
+ },
429
+ {
430
+ type: 'SOLANA',
431
+ internalId: 'SOLANA_DEVNET',
432
+ alchemySlug: 'solana-devnet',
433
+ logoUrl: 'https://cdn.zerion.io/11111111111111111111111111111111.png',
434
+ explorer: {
435
+ name: 'Solana Explorer',
436
+ url: 'https://explorer.solana.com/?cluster=devnet',
437
+ txUrlFormat: 'https://explorer.solana.com/tx/{HASH}?cluster=devnet',
438
+ },
439
+ name: 'Solana Devnet',
440
+ },
441
+ { type: 'COSMOS', internalId: 'COSMOS', name: 'Cosmos' },
32
442
  ];
33
443
  function getChainId(network) {
34
444
  return exports.NETWORK_METADATA.find(({ internalId: n }) => n === network)?.evmChainId ?? undefined;
package/dist/esm/index.js CHANGED
@@ -1,2 +1,4 @@
1
1
  export * from './types/index.js';
2
2
  export * from './utils/index.js';
3
+ import * as transactionTypes from './types/transaction.js';
4
+ export { transactionTypes };
@@ -3,5 +3,6 @@ export * from './auth.js';
3
3
  export * from './params.js';
4
4
  export * from './partner.js';
5
5
  export * from './theme.js';
6
+ export * from './transaction.js';
6
7
  export * from './wallet.js';
7
8
  export * from './user.js';
@@ -0,0 +1,26 @@
1
+ export const TRANSACTION_ERROR_CODES = [
2
+ // RPC issues
3
+ 'INVALID_RPC_URL',
4
+ 'INVALID_CHAIN_ID',
5
+ 'RPC_UNAVAILABLE',
6
+ 'UNSUPPORTED_TRANSACTION_TYPE',
7
+ // Address validation
8
+ 'INVALID_DESTINATION_ADDRESS',
9
+ 'INVALID_SOURCE_ADDRESS',
10
+ 'INVALID_CONTRACT_ADDRESS',
11
+ // Balance issues
12
+ 'INSUFFICIENT_NATIVE_BALANCE', // Not enough ETH/SOL for send amount + fees
13
+ 'INSUFFICIENT_TOKEN_BALANCE', // Not enough ERC-20/SPL tokens
14
+ 'INSUFFICIENT_FEE', // Not enough native token for fees only (Solana)
15
+ // Token approvals (EVM only)
16
+ 'INSUFFICIENT_ALLOWANCE', // ERC-20 approval needed
17
+ // Account issues (Solana only)
18
+ 'RECIPIENT_ACCOUNT_REQUIRED', // SPL token account needs to be created
19
+ // Execution failures
20
+ 'CONTRACT_EXECUTION_REVERTED', // Smart contract rejected the transaction
21
+ 'GAS_ESTIMATION_FAILED', // Cannot estimate gas (EVM)
22
+ 'PROGRAM_ERROR', // Solana program error
23
+ 'COMPUTE_BUDGET_EXCEEDED', // Solana compute units exceeded
24
+ 'TRANSACTION_EXPIRED', // Solana blockhash expired
25
+ 'EXECUTION_FAILED', // Generic execution failure
26
+ ];