@metamask-previews/bridge-controller 82.0.2-preview-daf00d2 → 82.0.2-preview-73700f116
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +0 -8
- package/dist/selectors.d.ts +653 -18
- package/dist/selectors.d.ts.map +1 -1
- package/dist/selectors.js +5 -29
- package/dist/selectors.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -9,16 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
### Changed
|
|
11
11
|
|
|
12
|
-
- **BREAKING:** `selectIsQuoteExpired` is now a plain function instead of a reselect selector, so the export no longer carries the selector fields `clearCache`, `resultFunc`, `memoizedResultFunc` and `recomputations` ([#10706](https://github.com/MetaMask/core/pull/10706))
|
|
13
|
-
- Its call signature is unchanged, so callers that invoke it as a function need no update.
|
|
14
12
|
- Bump `reselect` from `^5.1.1` to `^5.3.0` ([#10532](https://github.com/MetaMask/core/pull/10532))
|
|
15
13
|
|
|
16
|
-
### Fixed
|
|
17
|
-
|
|
18
|
-
- Stop `selectIsQuoteExpired` retaining one cache entry per millisecond it is called with ([#10706](https://github.com/MetaMask/core/pull/10706))
|
|
19
|
-
- It took the current time as a selector argument. Reselect passes every argument to every input selector and `weakMapMemoize` holds primitive-keyed results strongly, so each distinct timestamp was retained by this selector and by every selector in its dependency chain.
|
|
20
|
-
- The time comparison now happens outside the memoized selector, so only state-derived inputs are cached.
|
|
21
|
-
|
|
22
14
|
## [82.0.2]
|
|
23
15
|
|
|
24
16
|
### Changed
|
package/dist/selectors.d.ts
CHANGED
|
@@ -283,24 +283,659 @@ export declare const selectExchangeRateByAssetId: (exchangeRateSources: Exchange
|
|
|
283
283
|
* @returns Whether an exchange rate is available for the given chain and address
|
|
284
284
|
*/
|
|
285
285
|
export declare const selectIsAssetExchangeRateInState: (state: ExchangeRateSourcesForLookup, assetId?: CaipAssetType) => boolean;
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
286
|
+
export declare const selectIsQuoteExpired: ((state: RemoteFeatureFlagControllerState & BridgeControllerState & {
|
|
287
|
+
gasFeeEstimatesByChainId: GasFeeEstimatesByChainId;
|
|
288
|
+
} & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
|
|
289
|
+
participateInMetaMetrics: boolean;
|
|
290
|
+
}, _ignoredParam: any, currentTimeInMs: number) => boolean) & {
|
|
291
|
+
clearCache: () => void;
|
|
292
|
+
resultsCount: () => number;
|
|
293
|
+
resetResultsCount: () => void;
|
|
294
|
+
} & {
|
|
295
|
+
resultFunc: (resultFuncArgs_0: boolean, resultFuncArgs_1: number | null, resultFuncArgs_2: number, resultFuncArgs_3: number) => boolean;
|
|
296
|
+
memoizedResultFunc: ((resultFuncArgs_0: boolean, resultFuncArgs_1: number | null, resultFuncArgs_2: number, resultFuncArgs_3: number) => boolean) & {
|
|
297
|
+
clearCache: () => void;
|
|
298
|
+
resultsCount: () => number;
|
|
299
|
+
resetResultsCount: () => void;
|
|
300
|
+
};
|
|
301
|
+
lastResult: () => boolean;
|
|
302
|
+
dependencies: [((state: RemoteFeatureFlagControllerState & BridgeControllerState & {
|
|
303
|
+
gasFeeEstimatesByChainId: GasFeeEstimatesByChainId;
|
|
304
|
+
} & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
|
|
305
|
+
participateInMetaMetrics: boolean;
|
|
306
|
+
}) => boolean) & {
|
|
307
|
+
clearCache: () => void;
|
|
308
|
+
resultsCount: () => number;
|
|
309
|
+
resetResultsCount: () => void;
|
|
310
|
+
} & {
|
|
311
|
+
resultFunc: (resultFuncArgs_0: {
|
|
312
|
+
priceImpactThreshold?: {
|
|
313
|
+
gasless: number;
|
|
314
|
+
normal: number;
|
|
315
|
+
warning?: number | undefined;
|
|
316
|
+
error?: number | undefined;
|
|
317
|
+
} | undefined;
|
|
318
|
+
quoteRequestOverrides?: Record<string, {
|
|
319
|
+
aggIds?: string[] | undefined;
|
|
320
|
+
bridgeIds?: string[] | undefined;
|
|
321
|
+
fee?: number | undefined;
|
|
322
|
+
} | undefined> | undefined;
|
|
323
|
+
minimumVersion: string;
|
|
324
|
+
refreshRate: number;
|
|
325
|
+
maxRefreshCount: number;
|
|
326
|
+
support: boolean;
|
|
327
|
+
chains: Record<string, {
|
|
328
|
+
isActiveSrc: boolean;
|
|
329
|
+
isActiveDest: boolean;
|
|
330
|
+
refreshRate?: number | undefined;
|
|
331
|
+
topAssets?: string[] | undefined;
|
|
332
|
+
stablecoins?: string[] | undefined;
|
|
333
|
+
batchSellDestStablecoins?: `${string}:${string}/${string}:${string}`[] | undefined;
|
|
334
|
+
isUnifiedUIEnabled?: boolean | undefined;
|
|
335
|
+
isSingleSwapBridgeButtonEnabled?: boolean | undefined;
|
|
336
|
+
isGaslessSwapEnabled?: boolean | undefined;
|
|
337
|
+
noFeeAssets?: string[] | undefined;
|
|
338
|
+
defaultPairs?: {
|
|
339
|
+
standard: Record<string, string>;
|
|
340
|
+
other: Record<string, string>;
|
|
341
|
+
} | undefined;
|
|
342
|
+
}>;
|
|
343
|
+
bip44DefaultPairs?: Record<string, {
|
|
344
|
+
standard: Record<string, string>;
|
|
345
|
+
other: Record<string, string>;
|
|
346
|
+
} | undefined> | undefined;
|
|
347
|
+
sse?: {
|
|
348
|
+
enabled: boolean;
|
|
349
|
+
minimumVersion: string;
|
|
350
|
+
} | undefined;
|
|
351
|
+
chainRanking?: {
|
|
352
|
+
chainId: `${string}:${string}`;
|
|
353
|
+
name: string;
|
|
354
|
+
}[] | undefined;
|
|
355
|
+
maxPendingHistoryItemAgeMs?: number | undefined;
|
|
356
|
+
}, resultFuncArgs_1: boolean, resultFuncArgs_2: number) => boolean;
|
|
357
|
+
memoizedResultFunc: ((resultFuncArgs_0: {
|
|
358
|
+
priceImpactThreshold?: {
|
|
359
|
+
gasless: number;
|
|
360
|
+
normal: number;
|
|
361
|
+
warning?: number | undefined;
|
|
362
|
+
error?: number | undefined;
|
|
363
|
+
} | undefined;
|
|
364
|
+
quoteRequestOverrides?: Record<string, {
|
|
365
|
+
aggIds?: string[] | undefined;
|
|
366
|
+
bridgeIds?: string[] | undefined;
|
|
367
|
+
fee?: number | undefined;
|
|
368
|
+
} | undefined> | undefined;
|
|
369
|
+
minimumVersion: string;
|
|
370
|
+
refreshRate: number;
|
|
371
|
+
maxRefreshCount: number;
|
|
372
|
+
support: boolean;
|
|
373
|
+
chains: Record<string, {
|
|
374
|
+
isActiveSrc: boolean;
|
|
375
|
+
isActiveDest: boolean;
|
|
376
|
+
refreshRate?: number | undefined;
|
|
377
|
+
topAssets?: string[] | undefined;
|
|
378
|
+
stablecoins?: string[] | undefined;
|
|
379
|
+
batchSellDestStablecoins?: `${string}:${string}/${string}:${string}`[] | undefined;
|
|
380
|
+
isUnifiedUIEnabled?: boolean | undefined;
|
|
381
|
+
isSingleSwapBridgeButtonEnabled?: boolean | undefined;
|
|
382
|
+
isGaslessSwapEnabled?: boolean | undefined;
|
|
383
|
+
noFeeAssets?: string[] | undefined;
|
|
384
|
+
defaultPairs?: {
|
|
385
|
+
standard: Record<string, string>;
|
|
386
|
+
other: Record<string, string>;
|
|
387
|
+
} | undefined;
|
|
388
|
+
}>;
|
|
389
|
+
bip44DefaultPairs?: Record<string, {
|
|
390
|
+
standard: Record<string, string>;
|
|
391
|
+
other: Record<string, string>;
|
|
392
|
+
} | undefined> | undefined;
|
|
393
|
+
sse?: {
|
|
394
|
+
enabled: boolean;
|
|
395
|
+
minimumVersion: string;
|
|
396
|
+
} | undefined;
|
|
397
|
+
chainRanking?: {
|
|
398
|
+
chainId: `${string}:${string}`;
|
|
399
|
+
name: string;
|
|
400
|
+
}[] | undefined;
|
|
401
|
+
maxPendingHistoryItemAgeMs?: number | undefined;
|
|
402
|
+
}, resultFuncArgs_1: boolean, resultFuncArgs_2: number) => boolean) & {
|
|
403
|
+
clearCache: () => void;
|
|
404
|
+
resultsCount: () => number;
|
|
405
|
+
resetResultsCount: () => void;
|
|
406
|
+
};
|
|
407
|
+
lastResult: () => boolean;
|
|
408
|
+
dependencies: [((state: RemoteFeatureFlagControllerState) => {
|
|
409
|
+
priceImpactThreshold?: {
|
|
410
|
+
gasless: number;
|
|
411
|
+
normal: number;
|
|
412
|
+
warning?: number | undefined;
|
|
413
|
+
error?: number | undefined;
|
|
414
|
+
} | undefined;
|
|
415
|
+
quoteRequestOverrides?: Record<string, {
|
|
416
|
+
aggIds?: string[] | undefined;
|
|
417
|
+
bridgeIds?: string[] | undefined;
|
|
418
|
+
fee?: number | undefined;
|
|
419
|
+
} | undefined> | undefined;
|
|
420
|
+
minimumVersion: string;
|
|
421
|
+
refreshRate: number;
|
|
422
|
+
maxRefreshCount: number;
|
|
423
|
+
support: boolean;
|
|
424
|
+
chains: Record<string, {
|
|
425
|
+
isActiveSrc: boolean;
|
|
426
|
+
isActiveDest: boolean;
|
|
427
|
+
refreshRate?: number | undefined;
|
|
428
|
+
topAssets?: string[] | undefined;
|
|
429
|
+
stablecoins?: string[] | undefined;
|
|
430
|
+
batchSellDestStablecoins?: `${string}:${string}/${string}:${string}`[] | undefined;
|
|
431
|
+
isUnifiedUIEnabled?: boolean | undefined;
|
|
432
|
+
isSingleSwapBridgeButtonEnabled?: boolean | undefined;
|
|
433
|
+
isGaslessSwapEnabled?: boolean | undefined;
|
|
434
|
+
noFeeAssets?: string[] | undefined;
|
|
435
|
+
defaultPairs?: {
|
|
436
|
+
standard: Record<string, string>;
|
|
437
|
+
other: Record<string, string>;
|
|
438
|
+
} | undefined;
|
|
439
|
+
}>;
|
|
440
|
+
bip44DefaultPairs?: Record<string, {
|
|
441
|
+
standard: Record<string, string>;
|
|
442
|
+
other: Record<string, string>;
|
|
443
|
+
} | undefined> | undefined;
|
|
444
|
+
sse?: {
|
|
445
|
+
enabled: boolean;
|
|
446
|
+
minimumVersion: string;
|
|
447
|
+
} | undefined;
|
|
448
|
+
chainRanking?: {
|
|
449
|
+
chainId: `${string}:${string}`;
|
|
450
|
+
name: string;
|
|
451
|
+
}[] | undefined;
|
|
452
|
+
maxPendingHistoryItemAgeMs?: number | undefined;
|
|
453
|
+
}) & {
|
|
454
|
+
clearCache: () => void;
|
|
455
|
+
resultsCount: () => number;
|
|
456
|
+
resetResultsCount: () => void;
|
|
457
|
+
} & {
|
|
458
|
+
resultFunc: (resultFuncArgs_0: any) => {
|
|
459
|
+
priceImpactThreshold?: {
|
|
460
|
+
gasless: number;
|
|
461
|
+
normal: number;
|
|
462
|
+
warning?: number | undefined;
|
|
463
|
+
error?: number | undefined;
|
|
464
|
+
} | undefined;
|
|
465
|
+
quoteRequestOverrides?: Record<string, {
|
|
466
|
+
aggIds?: string[] | undefined;
|
|
467
|
+
bridgeIds?: string[] | undefined;
|
|
468
|
+
fee?: number | undefined;
|
|
469
|
+
} | undefined> | undefined;
|
|
470
|
+
minimumVersion: string;
|
|
471
|
+
refreshRate: number;
|
|
472
|
+
maxRefreshCount: number;
|
|
473
|
+
support: boolean;
|
|
474
|
+
chains: Record<string, {
|
|
475
|
+
isActiveSrc: boolean;
|
|
476
|
+
isActiveDest: boolean;
|
|
477
|
+
refreshRate?: number | undefined;
|
|
478
|
+
topAssets?: string[] | undefined;
|
|
479
|
+
stablecoins?: string[] | undefined;
|
|
480
|
+
batchSellDestStablecoins?: `${string}:${string}/${string}:${string}`[] | undefined;
|
|
481
|
+
isUnifiedUIEnabled?: boolean | undefined;
|
|
482
|
+
isSingleSwapBridgeButtonEnabled?: boolean | undefined;
|
|
483
|
+
isGaslessSwapEnabled?: boolean | undefined;
|
|
484
|
+
noFeeAssets?: string[] | undefined;
|
|
485
|
+
defaultPairs?: {
|
|
486
|
+
standard: Record<string, string>;
|
|
487
|
+
other: Record<string, string>;
|
|
488
|
+
} | undefined;
|
|
489
|
+
}>;
|
|
490
|
+
bip44DefaultPairs?: Record<string, {
|
|
491
|
+
standard: Record<string, string>;
|
|
492
|
+
other: Record<string, string>;
|
|
493
|
+
} | undefined> | undefined;
|
|
494
|
+
sse?: {
|
|
495
|
+
enabled: boolean;
|
|
496
|
+
minimumVersion: string;
|
|
497
|
+
} | undefined;
|
|
498
|
+
chainRanking?: {
|
|
499
|
+
chainId: `${string}:${string}`;
|
|
500
|
+
name: string;
|
|
501
|
+
}[] | undefined;
|
|
502
|
+
maxPendingHistoryItemAgeMs?: number | undefined;
|
|
503
|
+
};
|
|
504
|
+
memoizedResultFunc: ((resultFuncArgs_0: any) => {
|
|
505
|
+
priceImpactThreshold?: {
|
|
506
|
+
gasless: number;
|
|
507
|
+
normal: number;
|
|
508
|
+
warning?: number | undefined;
|
|
509
|
+
error?: number | undefined;
|
|
510
|
+
} | undefined;
|
|
511
|
+
quoteRequestOverrides?: Record<string, {
|
|
512
|
+
aggIds?: string[] | undefined;
|
|
513
|
+
bridgeIds?: string[] | undefined;
|
|
514
|
+
fee?: number | undefined;
|
|
515
|
+
} | undefined> | undefined;
|
|
516
|
+
minimumVersion: string;
|
|
517
|
+
refreshRate: number;
|
|
518
|
+
maxRefreshCount: number;
|
|
519
|
+
support: boolean;
|
|
520
|
+
chains: Record<string, {
|
|
521
|
+
isActiveSrc: boolean;
|
|
522
|
+
isActiveDest: boolean;
|
|
523
|
+
refreshRate?: number | undefined;
|
|
524
|
+
topAssets?: string[] | undefined;
|
|
525
|
+
stablecoins?: string[] | undefined;
|
|
526
|
+
batchSellDestStablecoins?: `${string}:${string}/${string}:${string}`[] | undefined;
|
|
527
|
+
isUnifiedUIEnabled?: boolean | undefined;
|
|
528
|
+
isSingleSwapBridgeButtonEnabled?: boolean | undefined;
|
|
529
|
+
isGaslessSwapEnabled?: boolean | undefined;
|
|
530
|
+
noFeeAssets?: string[] | undefined;
|
|
531
|
+
defaultPairs?: {
|
|
532
|
+
standard: Record<string, string>;
|
|
533
|
+
other: Record<string, string>;
|
|
534
|
+
} | undefined;
|
|
535
|
+
}>;
|
|
536
|
+
bip44DefaultPairs?: Record<string, {
|
|
537
|
+
standard: Record<string, string>;
|
|
538
|
+
other: Record<string, string>;
|
|
539
|
+
} | undefined> | undefined;
|
|
540
|
+
sse?: {
|
|
541
|
+
enabled: boolean;
|
|
542
|
+
minimumVersion: string;
|
|
543
|
+
} | undefined;
|
|
544
|
+
chainRanking?: {
|
|
545
|
+
chainId: `${string}:${string}`;
|
|
546
|
+
name: string;
|
|
547
|
+
}[] | undefined;
|
|
548
|
+
maxPendingHistoryItemAgeMs?: number | undefined;
|
|
549
|
+
}) & {
|
|
550
|
+
clearCache: () => void;
|
|
551
|
+
resultsCount: () => number;
|
|
552
|
+
resetResultsCount: () => void;
|
|
553
|
+
};
|
|
554
|
+
lastResult: () => {
|
|
555
|
+
priceImpactThreshold?: {
|
|
556
|
+
gasless: number;
|
|
557
|
+
normal: number;
|
|
558
|
+
warning?: number | undefined;
|
|
559
|
+
error?: number | undefined;
|
|
560
|
+
} | undefined;
|
|
561
|
+
quoteRequestOverrides?: Record<string, {
|
|
562
|
+
aggIds?: string[] | undefined;
|
|
563
|
+
bridgeIds?: string[] | undefined;
|
|
564
|
+
fee?: number | undefined;
|
|
565
|
+
} | undefined> | undefined;
|
|
566
|
+
minimumVersion: string;
|
|
567
|
+
refreshRate: number;
|
|
568
|
+
maxRefreshCount: number;
|
|
569
|
+
support: boolean;
|
|
570
|
+
chains: Record<string, {
|
|
571
|
+
isActiveSrc: boolean;
|
|
572
|
+
isActiveDest: boolean;
|
|
573
|
+
refreshRate?: number | undefined;
|
|
574
|
+
topAssets?: string[] | undefined;
|
|
575
|
+
stablecoins?: string[] | undefined;
|
|
576
|
+
batchSellDestStablecoins?: `${string}:${string}/${string}:${string}`[] | undefined;
|
|
577
|
+
isUnifiedUIEnabled?: boolean | undefined;
|
|
578
|
+
isSingleSwapBridgeButtonEnabled?: boolean | undefined;
|
|
579
|
+
isGaslessSwapEnabled?: boolean | undefined;
|
|
580
|
+
noFeeAssets?: string[] | undefined;
|
|
581
|
+
defaultPairs?: {
|
|
582
|
+
standard: Record<string, string>;
|
|
583
|
+
other: Record<string, string>;
|
|
584
|
+
} | undefined;
|
|
585
|
+
}>;
|
|
586
|
+
bip44DefaultPairs?: Record<string, {
|
|
587
|
+
standard: Record<string, string>;
|
|
588
|
+
other: Record<string, string>;
|
|
589
|
+
} | undefined> | undefined;
|
|
590
|
+
sse?: {
|
|
591
|
+
enabled: boolean;
|
|
592
|
+
minimumVersion: string;
|
|
593
|
+
} | undefined;
|
|
594
|
+
chainRanking?: {
|
|
595
|
+
chainId: `${string}:${string}`;
|
|
596
|
+
name: string;
|
|
597
|
+
}[] | undefined;
|
|
598
|
+
maxPendingHistoryItemAgeMs?: number | undefined;
|
|
599
|
+
};
|
|
600
|
+
dependencies: [(state: RemoteFeatureFlagControllerState) => unknown];
|
|
601
|
+
recomputations: () => number;
|
|
602
|
+
resetRecomputations: () => void;
|
|
603
|
+
dependencyRecomputations: () => number;
|
|
604
|
+
resetDependencyRecomputations: () => void;
|
|
605
|
+
} & {
|
|
606
|
+
memoize: typeof import("reselect").weakMapMemoize;
|
|
607
|
+
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
608
|
+
}, (state: BridgeAppState) => boolean, (state: BridgeAppState) => number];
|
|
609
|
+
recomputations: () => number;
|
|
610
|
+
resetRecomputations: () => void;
|
|
611
|
+
dependencyRecomputations: () => number;
|
|
612
|
+
resetDependencyRecomputations: () => void;
|
|
613
|
+
} & {
|
|
614
|
+
memoize: typeof import("reselect").weakMapMemoize;
|
|
615
|
+
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
616
|
+
}, ({ quotesLastFetched }: BridgeAppState) => number | null, ((state: RemoteFeatureFlagControllerState & BridgeControllerState & {
|
|
617
|
+
gasFeeEstimatesByChainId: GasFeeEstimatesByChainId;
|
|
618
|
+
} & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
|
|
619
|
+
participateInMetaMetrics: boolean;
|
|
620
|
+
}) => number) & {
|
|
621
|
+
clearCache: () => void;
|
|
622
|
+
resultsCount: () => number;
|
|
623
|
+
resetResultsCount: () => void;
|
|
624
|
+
} & {
|
|
625
|
+
resultFunc: (resultFuncArgs_0: {
|
|
626
|
+
priceImpactThreshold?: {
|
|
627
|
+
gasless: number;
|
|
628
|
+
normal: number;
|
|
629
|
+
warning?: number | undefined;
|
|
630
|
+
error?: number | undefined;
|
|
631
|
+
} | undefined;
|
|
632
|
+
quoteRequestOverrides?: Record<string, {
|
|
633
|
+
aggIds?: string[] | undefined;
|
|
634
|
+
bridgeIds?: string[] | undefined;
|
|
635
|
+
fee?: number | undefined;
|
|
636
|
+
} | undefined> | undefined;
|
|
637
|
+
minimumVersion: string;
|
|
638
|
+
refreshRate: number;
|
|
639
|
+
maxRefreshCount: number;
|
|
640
|
+
support: boolean;
|
|
641
|
+
chains: Record<string, {
|
|
642
|
+
isActiveSrc: boolean;
|
|
643
|
+
isActiveDest: boolean;
|
|
644
|
+
refreshRate?: number | undefined;
|
|
645
|
+
topAssets?: string[] | undefined;
|
|
646
|
+
stablecoins?: string[] | undefined;
|
|
647
|
+
batchSellDestStablecoins?: `${string}:${string}/${string}:${string}`[] | undefined;
|
|
648
|
+
isUnifiedUIEnabled?: boolean | undefined;
|
|
649
|
+
isSingleSwapBridgeButtonEnabled?: boolean | undefined;
|
|
650
|
+
isGaslessSwapEnabled?: boolean | undefined;
|
|
651
|
+
noFeeAssets?: string[] | undefined;
|
|
652
|
+
defaultPairs?: {
|
|
653
|
+
standard: Record<string, string>;
|
|
654
|
+
other: Record<string, string>;
|
|
655
|
+
} | undefined;
|
|
656
|
+
}>;
|
|
657
|
+
bip44DefaultPairs?: Record<string, {
|
|
658
|
+
standard: Record<string, string>;
|
|
659
|
+
other: Record<string, string>;
|
|
660
|
+
} | undefined> | undefined;
|
|
661
|
+
sse?: {
|
|
662
|
+
enabled: boolean;
|
|
663
|
+
minimumVersion: string;
|
|
664
|
+
} | undefined;
|
|
665
|
+
chainRanking?: {
|
|
666
|
+
chainId: `${string}:${string}`;
|
|
667
|
+
name: string;
|
|
668
|
+
}[] | undefined;
|
|
669
|
+
maxPendingHistoryItemAgeMs?: number | undefined;
|
|
670
|
+
}, resultFuncArgs_1: string | number | undefined) => number;
|
|
671
|
+
memoizedResultFunc: ((resultFuncArgs_0: {
|
|
672
|
+
priceImpactThreshold?: {
|
|
673
|
+
gasless: number;
|
|
674
|
+
normal: number;
|
|
675
|
+
warning?: number | undefined;
|
|
676
|
+
error?: number | undefined;
|
|
677
|
+
} | undefined;
|
|
678
|
+
quoteRequestOverrides?: Record<string, {
|
|
679
|
+
aggIds?: string[] | undefined;
|
|
680
|
+
bridgeIds?: string[] | undefined;
|
|
681
|
+
fee?: number | undefined;
|
|
682
|
+
} | undefined> | undefined;
|
|
683
|
+
minimumVersion: string;
|
|
684
|
+
refreshRate: number;
|
|
685
|
+
maxRefreshCount: number;
|
|
686
|
+
support: boolean;
|
|
687
|
+
chains: Record<string, {
|
|
688
|
+
isActiveSrc: boolean;
|
|
689
|
+
isActiveDest: boolean;
|
|
690
|
+
refreshRate?: number | undefined;
|
|
691
|
+
topAssets?: string[] | undefined;
|
|
692
|
+
stablecoins?: string[] | undefined;
|
|
693
|
+
batchSellDestStablecoins?: `${string}:${string}/${string}:${string}`[] | undefined;
|
|
694
|
+
isUnifiedUIEnabled?: boolean | undefined;
|
|
695
|
+
isSingleSwapBridgeButtonEnabled?: boolean | undefined;
|
|
696
|
+
isGaslessSwapEnabled?: boolean | undefined;
|
|
697
|
+
noFeeAssets?: string[] | undefined;
|
|
698
|
+
defaultPairs?: {
|
|
699
|
+
standard: Record<string, string>;
|
|
700
|
+
other: Record<string, string>;
|
|
701
|
+
} | undefined;
|
|
702
|
+
}>;
|
|
703
|
+
bip44DefaultPairs?: Record<string, {
|
|
704
|
+
standard: Record<string, string>;
|
|
705
|
+
other: Record<string, string>;
|
|
706
|
+
} | undefined> | undefined;
|
|
707
|
+
sse?: {
|
|
708
|
+
enabled: boolean;
|
|
709
|
+
minimumVersion: string;
|
|
710
|
+
} | undefined;
|
|
711
|
+
chainRanking?: {
|
|
712
|
+
chainId: `${string}:${string}`;
|
|
713
|
+
name: string;
|
|
714
|
+
}[] | undefined;
|
|
715
|
+
maxPendingHistoryItemAgeMs?: number | undefined;
|
|
716
|
+
}, resultFuncArgs_1: string | number | undefined) => number) & {
|
|
717
|
+
clearCache: () => void;
|
|
718
|
+
resultsCount: () => number;
|
|
719
|
+
resetResultsCount: () => void;
|
|
720
|
+
};
|
|
721
|
+
lastResult: () => number;
|
|
722
|
+
dependencies: [((state: RemoteFeatureFlagControllerState) => {
|
|
723
|
+
priceImpactThreshold?: {
|
|
724
|
+
gasless: number;
|
|
725
|
+
normal: number;
|
|
726
|
+
warning?: number | undefined;
|
|
727
|
+
error?: number | undefined;
|
|
728
|
+
} | undefined;
|
|
729
|
+
quoteRequestOverrides?: Record<string, {
|
|
730
|
+
aggIds?: string[] | undefined;
|
|
731
|
+
bridgeIds?: string[] | undefined;
|
|
732
|
+
fee?: number | undefined;
|
|
733
|
+
} | undefined> | undefined;
|
|
734
|
+
minimumVersion: string;
|
|
735
|
+
refreshRate: number;
|
|
736
|
+
maxRefreshCount: number;
|
|
737
|
+
support: boolean;
|
|
738
|
+
chains: Record<string, {
|
|
739
|
+
isActiveSrc: boolean;
|
|
740
|
+
isActiveDest: boolean;
|
|
741
|
+
refreshRate?: number | undefined;
|
|
742
|
+
topAssets?: string[] | undefined;
|
|
743
|
+
stablecoins?: string[] | undefined;
|
|
744
|
+
batchSellDestStablecoins?: `${string}:${string}/${string}:${string}`[] | undefined;
|
|
745
|
+
isUnifiedUIEnabled?: boolean | undefined;
|
|
746
|
+
isSingleSwapBridgeButtonEnabled?: boolean | undefined;
|
|
747
|
+
isGaslessSwapEnabled?: boolean | undefined;
|
|
748
|
+
noFeeAssets?: string[] | undefined;
|
|
749
|
+
defaultPairs?: {
|
|
750
|
+
standard: Record<string, string>;
|
|
751
|
+
other: Record<string, string>;
|
|
752
|
+
} | undefined;
|
|
753
|
+
}>;
|
|
754
|
+
bip44DefaultPairs?: Record<string, {
|
|
755
|
+
standard: Record<string, string>;
|
|
756
|
+
other: Record<string, string>;
|
|
757
|
+
} | undefined> | undefined;
|
|
758
|
+
sse?: {
|
|
759
|
+
enabled: boolean;
|
|
760
|
+
minimumVersion: string;
|
|
761
|
+
} | undefined;
|
|
762
|
+
chainRanking?: {
|
|
763
|
+
chainId: `${string}:${string}`;
|
|
764
|
+
name: string;
|
|
765
|
+
}[] | undefined;
|
|
766
|
+
maxPendingHistoryItemAgeMs?: number | undefined;
|
|
767
|
+
}) & {
|
|
768
|
+
clearCache: () => void;
|
|
769
|
+
resultsCount: () => number;
|
|
770
|
+
resetResultsCount: () => void;
|
|
771
|
+
} & {
|
|
772
|
+
resultFunc: (resultFuncArgs_0: any) => {
|
|
773
|
+
priceImpactThreshold?: {
|
|
774
|
+
gasless: number;
|
|
775
|
+
normal: number;
|
|
776
|
+
warning?: number | undefined;
|
|
777
|
+
error?: number | undefined;
|
|
778
|
+
} | undefined;
|
|
779
|
+
quoteRequestOverrides?: Record<string, {
|
|
780
|
+
aggIds?: string[] | undefined;
|
|
781
|
+
bridgeIds?: string[] | undefined;
|
|
782
|
+
fee?: number | undefined;
|
|
783
|
+
} | undefined> | undefined;
|
|
784
|
+
minimumVersion: string;
|
|
785
|
+
refreshRate: number;
|
|
786
|
+
maxRefreshCount: number;
|
|
787
|
+
support: boolean;
|
|
788
|
+
chains: Record<string, {
|
|
789
|
+
isActiveSrc: boolean;
|
|
790
|
+
isActiveDest: boolean;
|
|
791
|
+
refreshRate?: number | undefined;
|
|
792
|
+
topAssets?: string[] | undefined;
|
|
793
|
+
stablecoins?: string[] | undefined;
|
|
794
|
+
batchSellDestStablecoins?: `${string}:${string}/${string}:${string}`[] | undefined;
|
|
795
|
+
isUnifiedUIEnabled?: boolean | undefined;
|
|
796
|
+
isSingleSwapBridgeButtonEnabled?: boolean | undefined;
|
|
797
|
+
isGaslessSwapEnabled?: boolean | undefined;
|
|
798
|
+
noFeeAssets?: string[] | undefined;
|
|
799
|
+
defaultPairs?: {
|
|
800
|
+
standard: Record<string, string>;
|
|
801
|
+
other: Record<string, string>;
|
|
802
|
+
} | undefined;
|
|
803
|
+
}>;
|
|
804
|
+
bip44DefaultPairs?: Record<string, {
|
|
805
|
+
standard: Record<string, string>;
|
|
806
|
+
other: Record<string, string>;
|
|
807
|
+
} | undefined> | undefined;
|
|
808
|
+
sse?: {
|
|
809
|
+
enabled: boolean;
|
|
810
|
+
minimumVersion: string;
|
|
811
|
+
} | undefined;
|
|
812
|
+
chainRanking?: {
|
|
813
|
+
chainId: `${string}:${string}`;
|
|
814
|
+
name: string;
|
|
815
|
+
}[] | undefined;
|
|
816
|
+
maxPendingHistoryItemAgeMs?: number | undefined;
|
|
817
|
+
};
|
|
818
|
+
memoizedResultFunc: ((resultFuncArgs_0: any) => {
|
|
819
|
+
priceImpactThreshold?: {
|
|
820
|
+
gasless: number;
|
|
821
|
+
normal: number;
|
|
822
|
+
warning?: number | undefined;
|
|
823
|
+
error?: number | undefined;
|
|
824
|
+
} | undefined;
|
|
825
|
+
quoteRequestOverrides?: Record<string, {
|
|
826
|
+
aggIds?: string[] | undefined;
|
|
827
|
+
bridgeIds?: string[] | undefined;
|
|
828
|
+
fee?: number | undefined;
|
|
829
|
+
} | undefined> | undefined;
|
|
830
|
+
minimumVersion: string;
|
|
831
|
+
refreshRate: number;
|
|
832
|
+
maxRefreshCount: number;
|
|
833
|
+
support: boolean;
|
|
834
|
+
chains: Record<string, {
|
|
835
|
+
isActiveSrc: boolean;
|
|
836
|
+
isActiveDest: boolean;
|
|
837
|
+
refreshRate?: number | undefined;
|
|
838
|
+
topAssets?: string[] | undefined;
|
|
839
|
+
stablecoins?: string[] | undefined;
|
|
840
|
+
batchSellDestStablecoins?: `${string}:${string}/${string}:${string}`[] | undefined;
|
|
841
|
+
isUnifiedUIEnabled?: boolean | undefined;
|
|
842
|
+
isSingleSwapBridgeButtonEnabled?: boolean | undefined;
|
|
843
|
+
isGaslessSwapEnabled?: boolean | undefined;
|
|
844
|
+
noFeeAssets?: string[] | undefined;
|
|
845
|
+
defaultPairs?: {
|
|
846
|
+
standard: Record<string, string>;
|
|
847
|
+
other: Record<string, string>;
|
|
848
|
+
} | undefined;
|
|
849
|
+
}>;
|
|
850
|
+
bip44DefaultPairs?: Record<string, {
|
|
851
|
+
standard: Record<string, string>;
|
|
852
|
+
other: Record<string, string>;
|
|
853
|
+
} | undefined> | undefined;
|
|
854
|
+
sse?: {
|
|
855
|
+
enabled: boolean;
|
|
856
|
+
minimumVersion: string;
|
|
857
|
+
} | undefined;
|
|
858
|
+
chainRanking?: {
|
|
859
|
+
chainId: `${string}:${string}`;
|
|
860
|
+
name: string;
|
|
861
|
+
}[] | undefined;
|
|
862
|
+
maxPendingHistoryItemAgeMs?: number | undefined;
|
|
863
|
+
}) & {
|
|
864
|
+
clearCache: () => void;
|
|
865
|
+
resultsCount: () => number;
|
|
866
|
+
resetResultsCount: () => void;
|
|
867
|
+
};
|
|
868
|
+
lastResult: () => {
|
|
869
|
+
priceImpactThreshold?: {
|
|
870
|
+
gasless: number;
|
|
871
|
+
normal: number;
|
|
872
|
+
warning?: number | undefined;
|
|
873
|
+
error?: number | undefined;
|
|
874
|
+
} | undefined;
|
|
875
|
+
quoteRequestOverrides?: Record<string, {
|
|
876
|
+
aggIds?: string[] | undefined;
|
|
877
|
+
bridgeIds?: string[] | undefined;
|
|
878
|
+
fee?: number | undefined;
|
|
879
|
+
} | undefined> | undefined;
|
|
880
|
+
minimumVersion: string;
|
|
881
|
+
refreshRate: number;
|
|
882
|
+
maxRefreshCount: number;
|
|
883
|
+
support: boolean;
|
|
884
|
+
chains: Record<string, {
|
|
885
|
+
isActiveSrc: boolean;
|
|
886
|
+
isActiveDest: boolean;
|
|
887
|
+
refreshRate?: number | undefined;
|
|
888
|
+
topAssets?: string[] | undefined;
|
|
889
|
+
stablecoins?: string[] | undefined;
|
|
890
|
+
batchSellDestStablecoins?: `${string}:${string}/${string}:${string}`[] | undefined;
|
|
891
|
+
isUnifiedUIEnabled?: boolean | undefined;
|
|
892
|
+
isSingleSwapBridgeButtonEnabled?: boolean | undefined;
|
|
893
|
+
isGaslessSwapEnabled?: boolean | undefined;
|
|
894
|
+
noFeeAssets?: string[] | undefined;
|
|
895
|
+
defaultPairs?: {
|
|
896
|
+
standard: Record<string, string>;
|
|
897
|
+
other: Record<string, string>;
|
|
898
|
+
} | undefined;
|
|
899
|
+
}>;
|
|
900
|
+
bip44DefaultPairs?: Record<string, {
|
|
901
|
+
standard: Record<string, string>;
|
|
902
|
+
other: Record<string, string>;
|
|
903
|
+
} | undefined> | undefined;
|
|
904
|
+
sse?: {
|
|
905
|
+
enabled: boolean;
|
|
906
|
+
minimumVersion: string;
|
|
907
|
+
} | undefined;
|
|
908
|
+
chainRanking?: {
|
|
909
|
+
chainId: `${string}:${string}`;
|
|
910
|
+
name: string;
|
|
911
|
+
}[] | undefined;
|
|
912
|
+
maxPendingHistoryItemAgeMs?: number | undefined;
|
|
913
|
+
};
|
|
914
|
+
dependencies: [(state: RemoteFeatureFlagControllerState) => unknown];
|
|
915
|
+
recomputations: () => number;
|
|
916
|
+
resetRecomputations: () => void;
|
|
917
|
+
dependencyRecomputations: () => number;
|
|
918
|
+
resetDependencyRecomputations: () => void;
|
|
919
|
+
} & {
|
|
920
|
+
memoize: typeof import("reselect").weakMapMemoize;
|
|
921
|
+
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
922
|
+
}, (state: BridgeAppState) => string | number | undefined];
|
|
923
|
+
recomputations: () => number;
|
|
924
|
+
resetRecomputations: () => void;
|
|
925
|
+
dependencyRecomputations: () => number;
|
|
926
|
+
resetDependencyRecomputations: () => void;
|
|
927
|
+
} & {
|
|
928
|
+
memoize: typeof import("reselect").weakMapMemoize;
|
|
929
|
+
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
930
|
+
}, (_: BridgeAppState, _ignoredParam: any, currentTimeInMs: number) => number];
|
|
931
|
+
recomputations: () => number;
|
|
932
|
+
resetRecomputations: () => void;
|
|
933
|
+
dependencyRecomputations: () => number;
|
|
934
|
+
resetDependencyRecomputations: () => void;
|
|
935
|
+
} & {
|
|
936
|
+
memoize: typeof import("reselect").weakMapMemoize;
|
|
937
|
+
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
938
|
+
};
|
|
304
939
|
/**
|
|
305
940
|
* Selects sorted cross-chain swap quotes. By default, the quotes are sorted by cost in ascending order.
|
|
306
941
|
*
|
package/dist/selectors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectors.d.ts","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCA3WnB,wBAAwB;;kCAEtB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwEhD,CAAC;AAmBH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qBAAqB;8BA/nBN,wBAAwB;;8BAEtB,OAAO;;;;;;;;;;;;;;;;;IAuoB/B;;OAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAFH;;WAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAFH;;WAEG;;;;;;;;;;;;;;;;;;;;;;;;QAFH;;WAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCA3oBmB,wBAAwB;;kCAEtB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgpBpC,CAAC;AAEF,eAAO,MAAM,yCAAyC,UAC7C,cAAc,WAIR,CAAC;AAEhB,eAAO,MAAM,mBAAmB,UAAW,cAAc;;;;GACpC,CAAC;AAEtB,eAAO,MAAM,+BAA+B;8BA9pBhB,wBAAwB;;8BAEtB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4CA+pBb,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC,CAAC,CAAC,6DAElD,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC,CAAC,CAAC,6DAElD,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC,CAAC,CAAC,4EAIlD,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC,CAAC,CAAC;;;;;;;;CAuBzE,CAAC"}
|
|
1
|
+
{"version":3,"file":"selectors.d.ts","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCA3WnB,wBAAwB;;kCAEtB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwEhD,CAAC;AAmBH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qBAAqB;8BAjmBN,wBAAwB;;8BAEtB,OAAO;;;;;;;;;;;;;;;;;IAymB/B;;OAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAFH;;WAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAFH;;WAEG;;;;;;;;;;;;;;;;;;;;;;;;QAFH;;WAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCA7mBmB,wBAAwB;;kCAEtB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAknBpC,CAAC;AAEF,eAAO,MAAM,yCAAyC,UAC7C,cAAc,WAIR,CAAC;AAEhB,eAAO,MAAM,mBAAmB,UAAW,cAAc;;;;GACpC,CAAC;AAEtB,eAAO,MAAM,+BAA+B;8BAhoBhB,wBAAwB;;8BAEtB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4CAioBb,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC,CAAC,CAAC,6DAElD,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC,CAAC,CAAC,6DAElD,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC,CAAC,CAAC,4EAIlD,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC,CAAC,CAAC;;;;;;;;CAuBzE,CAAC"}
|
package/dist/selectors.js
CHANGED
|
@@ -292,38 +292,14 @@ const selectIsQuoteGoingToRefresh = createBridgeSelector([
|
|
|
292
292
|
const selectQuoteRefreshRate = createBridgeSelector([selectBridgeFeatureFlags, (state) => state.quoteRequest[0]?.srcChainId], (featureFlags, srcChainId) => (srcChainId
|
|
293
293
|
? featureFlags.chains[formatChainIdToCaip(srcChainId)]?.refreshRate
|
|
294
294
|
: featureFlags.refreshRate) ?? featureFlags.refreshRate);
|
|
295
|
-
const
|
|
295
|
+
export const selectIsQuoteExpired = createBridgeSelector([
|
|
296
296
|
selectIsQuoteGoingToRefresh,
|
|
297
297
|
({ quotesLastFetched }) => quotesLastFetched,
|
|
298
298
|
selectQuoteRefreshRate,
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
quotesLastFetched
|
|
302
|
-
refreshRate
|
|
303
|
-
}));
|
|
304
|
-
/**
|
|
305
|
-
* Selects whether the active quote has gone stale.
|
|
306
|
-
*
|
|
307
|
-
* The time comparison deliberately sits outside the memoized selector.
|
|
308
|
-
* Clients call this on every render with a fresh `Date.now()`, reselect hands
|
|
309
|
-
* every argument to every input selector, and `weakMapMemoize` retains
|
|
310
|
-
* primitive-keyed results strongly until `clearCache()`. Taking the timestamp
|
|
311
|
-
* as a selector argument therefore retained one cache entry per millisecond
|
|
312
|
-
* ever observed, here and in every selector in the dependency chain. Only the
|
|
313
|
-
* state-derived inputs are memoized now; the remaining subtraction is cheaper
|
|
314
|
-
* than the cache lookup it replaces.
|
|
315
|
-
*
|
|
316
|
-
* @param state - The state of the bridge controller and its dependency controllers
|
|
317
|
-
* @param _ignoredParam - Unused, kept so the signature matches the other client param selectors
|
|
318
|
-
* @param currentTimeInMs - The current time in milliseconds
|
|
319
|
-
* @returns Whether the active quote is expired
|
|
320
|
-
*/
|
|
321
|
-
export const selectIsQuoteExpired = (state, _ignoredParam, currentTimeInMs) => {
|
|
322
|
-
const { isQuoteGoingToRefresh, quotesLastFetched, refreshRate } = selectQuoteExpiryInputs(state);
|
|
323
|
-
return Boolean(!isQuoteGoingToRefresh &&
|
|
324
|
-
quotesLastFetched &&
|
|
325
|
-
currentTimeInMs - quotesLastFetched > refreshRate);
|
|
326
|
-
};
|
|
299
|
+
(_, _ignoredParam, currentTimeInMs) => currentTimeInMs,
|
|
300
|
+
], (isQuoteGoingToRefresh, quotesLastFetched, refreshRate, currentTimeInMs) => Boolean(!isQuoteGoingToRefresh &&
|
|
301
|
+
quotesLastFetched &&
|
|
302
|
+
currentTimeInMs - quotesLastFetched > refreshRate));
|
|
327
303
|
/**
|
|
328
304
|
* Selects sorted cross-chain swap quotes. By default, the quotes are sorted by cost in ascending order.
|
|
329
305
|
*
|
package/dist/selectors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectors.js","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport { getAddress } from '@ethersproject/address';\nimport type {\n CurrencyRateState,\n MultichainAssetsRatesControllerState,\n TokenRatesControllerState,\n} from '@metamask/assets-controllers';\nimport type {\n GasFeeEstimates,\n GasFeeEstimatesByChainId,\n} from '@metamask/gas-fee-controller';\nimport type { CaipAssetType } from '@metamask/utils';\nimport { isStrictHexString, parseCaipAssetType } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\nimport { orderBy } from 'lodash-es';\nimport {\n createSelector as createSelector_,\n createStructuredSelector as createStructuredSelector_,\n} from 'reselect';\n\nimport { BRIDGE_PREFERRED_GAS_ESTIMATE } from './constants/bridge.js';\nimport type {\n BridgeControllerState,\n DeepPartial,\n ExchangeRate,\n} from './types.js';\nimport { RequestStatus, SortOrder } from './types.js';\nimport {\n getNativeAssetForChainId,\n isNativeAddress,\n isNonEvmChainId,\n} from './utils/bridge.js';\nimport {\n formatAddressToAssetId,\n formatAddressToCaipReference,\n formatChainIdToCaip,\n formatChainIdToHex,\n} from './utils/caip-formatters.js';\nimport { processFeatureFlags } from './utils/feature-flags.js';\nimport { sumAmounts } from './utils/number-formatters.js';\nimport {\n calcBatchFees,\n calcQuoteMetadata,\n} from './utils/quote-metadata/calculators.js';\nimport { mergeQuoteMetadata } from './utils/quote-metadata/merge.js';\nimport { toCurrencyValues } from './utils/quote-metadata/to-currency-values.js';\nimport type { QuoteMetadata } from './utils/quote-metadata/types.js';\nimport { QuoteMetadataMigrationPhase } from './utils/quote-metadata/types.js';\nimport { getDefaultSlippagePercentage } from './utils/slippage.js';\nimport type { QuoteResponse } from './validators/quote-response.js';\n\nconst EMPTY_QUOTE_METADATA: never[] = [];\n\n/**\n * The controller states that provide exchange rates\n */\ntype ExchangeRateControllerState = MultichainAssetsRatesControllerState &\n TokenRatesControllerState &\n CurrencyRateState &\n Pick<BridgeControllerState, 'assetExchangeRates'>;\n/**\n * The state of the bridge controller and all its dependency controllers\n */\ntype RemoteFeatureFlagControllerState = {\n remoteFeatureFlags: {\n bridgeConfig: unknown;\n };\n};\n\n/**\n * Minimal shape required for exchange-rate lookups (used by getExchangeRateByChainIdAndAddress).\n * Uses types from assets-controllers; marketData and conversionRates also accept the bridge format.\n */\nexport type ExchangeRateSourcesForLookup = Pick<\n BridgeControllerState,\n 'assetExchangeRates'\n> &\n Partial<Pick<CurrencyRateState, 'currencyRates'>> & {\n marketData?:\n | TokenRatesControllerState['marketData']\n | Record<string, Record<string, { price?: number; currency?: string }>>;\n conversionRates?:\n | MultichainAssetsRatesControllerState['conversionRates']\n | Record<string, { rate: string }>;\n };\n\nexport type BridgeAppState = BridgeControllerState & {\n gasFeeEstimatesByChainId: GasFeeEstimatesByChainId;\n} & ExchangeRateControllerState & {\n participateInMetaMetrics: boolean;\n } & RemoteFeatureFlagControllerState;\n/**\n * Creates a structured selector for the bridge controller\n */\nconst createStructuredBridgeSelector =\n createStructuredSelector_.withTypes<BridgeAppState>();\n/**\n * Creates a typed selector for the bridge controller\n */\nconst createBridgeSelector = createSelector_.withTypes<BridgeAppState>();\n/**\n * Required parameters that clients must provide for the bridge quotes selector\n */\ntype BridgeQuotesClientParams = {\n sortOrder: SortOrder;\n selectedQuote: (QuoteResponse & QuoteMetadata) | null;\n migrationPhase: QuoteMetadataMigrationPhase;\n};\n\ntype EvmTokenExchangeRate = { price?: number; currency?: string };\ntype EvmTokenExchangeRates = Record<string, EvmTokenExchangeRate>;\n\nconst createFeatureFlagsSelector =\n createSelector_.withTypes<RemoteFeatureFlagControllerState>();\n\n/**\n * Selects the bridge feature flags\n *\n * @param state - The state of the bridge controller\n * @returns The bridge feature flags\n *\n * @example\n * ```ts\n * const featureFlags = useSelector(state => selectBridgeFeatureFlags(state));\n *\n * Or\n *\n * export const selectBridgeFeatureFlags = createSelector(\n * selectRemoteFeatureFlags,\n * (remoteFeatureFlags) =>\n * selectBridgeFeatureFlagsBase({\n * bridgeConfig: remoteFeatureFlags.bridgeConfig,\n * }),\n * );\n * ```\n */\nexport const selectBridgeFeatureFlags = createFeatureFlagsSelector(\n [(state) => state.remoteFeatureFlags.bridgeConfig],\n (bridgeConfig: unknown) => processFeatureFlags(bridgeConfig),\n);\n\nconst getEvmTokenExchangeRateForAddress = (\n evmTokenExchangeRates: EvmTokenExchangeRates | undefined,\n address: string,\n): EvmTokenExchangeRate | null | undefined => {\n try {\n return isStrictHexString(address)\n ? (evmTokenExchangeRates?.[getAddress(address)] ??\n evmTokenExchangeRates?.[address.toLowerCase()])\n : null;\n } catch {\n return null;\n }\n};\n\n/**\n * Selects the asset exchange rate for a given chain and address\n *\n * @param exchangeRateSources - the controller states containing the exchange rates\n * @param assetId - the assetId to get the exchange rate for\n * @returns The asset exchange rate for the given assetId\n */\nexport const selectExchangeRateByAssetId = (\n exchangeRateSources: ExchangeRateSourcesForLookup,\n assetId?: CaipAssetType,\n): ExchangeRate => {\n if (!assetId) {\n return {};\n }\n\n const { assetExchangeRates, currencyRates, marketData, conversionRates } =\n exchangeRateSources;\n\n // If the asset exchange rate is available in the bridge controller, use it\n // This is defined if the token's rate is not available from the assets controllers\n const bridgeControllerRate =\n assetExchangeRates?.[assetId.toLowerCase() as CaipAssetType] ??\n assetExchangeRates?.[assetId];\n if (\n bridgeControllerRate?.exchangeRate &&\n bridgeControllerRate?.usdExchangeRate\n ) {\n return bridgeControllerRate;\n }\n\n const { chainId } = parseCaipAssetType(assetId);\n\n // If the chain is a non-EVM chain, use the conversion rate from the multichain assets controller\n if (isNonEvmChainId(chainId)) {\n const conversionRatesByKey = conversionRates as\n | Record<string, { rate?: string }>\n | undefined;\n const multichainAssetExchangeRate = conversionRatesByKey?.[assetId];\n const rate = multichainAssetExchangeRate?.rate;\n if (rate) {\n // The multichain rate is denominated in the user's selected currency.\n // To get a USD rate, find the user's-currency-to-USD conversion factor from any EVM native currency rate.\n const nativeCurrencyRate =\n currencyRates &&\n Object.values(currencyRates).find(\n (rateEntry) =>\n rateEntry?.conversionRate !== undefined &&\n rateEntry?.conversionRate !== null &&\n rateEntry?.usdConversionRate !== undefined &&\n rateEntry?.usdConversionRate !== null,\n );\n const usersCurrencyToUsdRate =\n nativeCurrencyRate?.conversionRate !== undefined &&\n nativeCurrencyRate?.conversionRate !== null &&\n nativeCurrencyRate?.usdConversionRate !== undefined &&\n nativeCurrencyRate?.usdConversionRate !== null\n ? new BigNumber(nativeCurrencyRate.usdConversionRate).div(\n nativeCurrencyRate.conversionRate,\n )\n : undefined;\n const usdExchangeRate = usersCurrencyToUsdRate\n ? new BigNumber(rate).times(usersCurrencyToUsdRate).toString()\n : undefined;\n return {\n exchangeRate: rate,\n usdExchangeRate,\n };\n }\n return {};\n }\n\n const address = formatAddressToCaipReference(assetId);\n\n // If the chain is an EVM chain, use the conversion rate from the currency rates controller\n if (isNativeAddress(address)) {\n const { symbol } = getNativeAssetForChainId(chainId);\n const evmNativeExchangeRate = currencyRates?.[symbol];\n if (evmNativeExchangeRate) {\n return {\n exchangeRate: evmNativeExchangeRate.conversionRate?.toString(),\n usdExchangeRate: evmNativeExchangeRate.usdConversionRate?.toString(),\n };\n }\n return {};\n }\n // If the chain is an EVM chain and the asset is not the native asset, use the conversion rate from the token rates controller\n if (!isNonEvmChainId(chainId)) {\n const marketDataByChain =\n // oxlint-disable-next-line typescript/no-unnecessary-type-assertion\n (marketData as Record<string, EvmTokenExchangeRates> | undefined) ?? {};\n const evmTokenExchangeRates =\n marketDataByChain[formatChainIdToHex(chainId)];\n const evmTokenExchangeRateForAddress = getEvmTokenExchangeRateForAddress(\n evmTokenExchangeRates,\n address,\n );\n const currencyKey = evmTokenExchangeRateForAddress?.currency;\n const nativeCurrencyRate =\n currencyKey !== undefined && currencyKey !== null\n ? currencyRates?.[currencyKey]\n : undefined;\n const price = evmTokenExchangeRateForAddress?.price;\n // A missing or zero price is not a usable exchange rate. Returning a \"0\"\n // rate here is harmful in two ways: it surfaces a $0 fiat value, and it\n // makes `selectIsAssetExchangeRateInState` treat the token as already\n // priced (the non-empty \"0\" string is truthy), which prevents the\n // controller from fetching the real rate. Fall through to `{}` instead so\n // the rate gets fetched from the price API.\n if (price && nativeCurrencyRate) {\n return {\n exchangeRate: new BigNumber(price)\n .multipliedBy(nativeCurrencyRate.conversionRate ?? 0)\n .toString(),\n usdExchangeRate: new BigNumber(price)\n .multipliedBy(nativeCurrencyRate.usdConversionRate ?? 0)\n .toString(),\n };\n }\n }\n\n return {};\n};\n\n/**\n * Checks whether an exchange rate is available for a given assetId\n *\n * @param state The state of the bridge controller and its dependency controllers\n * @param assetId The assetId to check\n * @returns Whether an exchange rate is available for the given chain and address\n */\nexport const selectIsAssetExchangeRateInState = (\n state: ExchangeRateSourcesForLookup,\n assetId?: CaipAssetType,\n) =>\n Boolean(selectExchangeRateByAssetId(state, assetId)?.exchangeRate) &&\n Boolean(selectExchangeRateByAssetId(state, assetId)?.usdExchangeRate);\n\n/**\n * Selects the gas fee estimates from the gas fee controller. All potential networks\n * support EIP1559 gas fees so assume that gasFeeEstimates is of type GasFeeEstimates\n *\n * @param state - The state of the bridge controller and its dependency controllers\n * @param state.gasFeeEstimatesByChainId - gasEstimates by Hex ChainId\n * @param state.quotes - Fetched bridge/swap quotes\n * @returns The gas fee estimates in decGWEI\n */\nconst selectBridgeFeesPerGas = createBridgeSelector(\n [\n (state) => state.gasFeeEstimatesByChainId,\n (state) => state.quotes?.[0]?.chainId,\n ],\n (gasFeeEstimatesByChainId, srcChainId) => {\n if (!srcChainId) {\n return null;\n }\n if (isNonEvmChainId(srcChainId)) {\n return null;\n }\n // @ts-expect-error - all supported networks use this type of estimates\n const gasFeeEstimates: GasFeeEstimates | undefined =\n gasFeeEstimatesByChainId?.[\n formatChainIdToHex(srcChainId) as keyof typeof gasFeeEstimatesByChainId\n ]?.gasFeeEstimates;\n if (!gasFeeEstimates) {\n return null;\n }\n return {\n estimatedBaseFeeInDecGwei: gasFeeEstimates.estimatedBaseFee,\n feePerGasInDecGwei:\n gasFeeEstimates[BRIDGE_PREFERRED_GAS_ESTIMATE]?.suggestedMaxFeePerGas,\n maxFeePerGasInDecGwei: gasFeeEstimates.high?.suggestedMaxFeePerGas,\n };\n },\n);\n\nconst selectExchangeRateSources = createStructuredBridgeSelector({\n currencyRates: (state) => state.currencyRates,\n marketData: (state) => state.marketData,\n conversionRates: (state) => state.conversionRates,\n assetExchangeRates: (state) => state.assetExchangeRates,\n});\n\n// Selects metadata for cross-chain swap quotes\nconst selectMetadata = createBridgeSelector(\n [\n ({ quotes }) => quotes,\n selectBridgeFeesPerGas,\n selectExchangeRateSources,\n ({ quoteRequest }) => quoteRequest,\n (_, { migrationPhase }: BridgeQuotesClientParams) => migrationPhase,\n ],\n (\n quotes,\n bridgeFeesPerGas,\n exchangeRateSources,\n quoteRequest,\n migrationPhase,\n ) => {\n // Return early if the migration phase is V2Only because we don't need to calculate metadata\n if (migrationPhase === QuoteMetadataMigrationPhase.V2Only) {\n return EMPTY_QUOTE_METADATA;\n }\n const { destTokenAddress, srcChainId, destChainId } = quoteRequest[0] ?? {};\n\n return quotes.map((quote) =>\n calcQuoteMetadata(quote, {\n srcTokenExchangeRate: selectExchangeRateByAssetId(\n exchangeRateSources,\n quote.quote.src.asset.assetId,\n ),\n bridgeFeesPerGas,\n destTokenExchangeRate: selectExchangeRateByAssetId(\n exchangeRateSources,\n quote.quote.dest.asset.assetId ??\n formatAddressToAssetId(\n destTokenAddress ?? quote.quote.dest.asset.assetId,\n destChainId,\n ),\n ),\n nativeExchangeRate: selectExchangeRateByAssetId(\n exchangeRateSources,\n getNativeAssetForChainId(srcChainId ?? quote.chainId)?.assetId,\n ),\n }),\n );\n },\n);\n\n/**\n * Selects the USD to fiat exchange rate based on the native asset's price\n *\n * @param options - The options for the selector\n * @param options.quoteRequest - The quote request\n * @returns The USD to fiat exchange rate in string format\n */\nconst selectUsdToCurrencyExchangeRate = createBridgeSelector(\n [\n selectExchangeRateSources,\n ({ quoteRequest }) =>\n getNativeAssetForChainId(quoteRequest[0]?.srcChainId ?? 1)?.assetId,\n ],\n (exchangeRateSources, nativeAssetId) => {\n const exchangeRate = selectExchangeRateByAssetId(\n exchangeRateSources,\n nativeAssetId,\n );\n return exchangeRate?.exchangeRate && exchangeRate?.usdExchangeRate\n ? new BigNumber(exchangeRate.exchangeRate)\n .div(exchangeRate.usdExchangeRate)\n .toFixed()\n : undefined;\n },\n);\n\nconst selectCurrencyValues = createBridgeSelector(\n [\n ({ quotes }) => quotes,\n selectUsdToCurrencyExchangeRate,\n (_, { migrationPhase }: BridgeQuotesClientParams) => migrationPhase,\n ],\n (quotes, usdToFiatExchangeRateString, migrationPhase) => {\n if (migrationPhase === QuoteMetadataMigrationPhase.V1Data) {\n return EMPTY_QUOTE_METADATA;\n }\n const usdToFiatExchangeRate = usdToFiatExchangeRateString\n ? new BigNumber(usdToFiatExchangeRateString)\n : undefined;\n return quotes.map((quote) =>\n toCurrencyValues(quote, usdToFiatExchangeRate),\n );\n },\n);\n\n// Selects cross-chain swap quotes including their metadata\nconst selectBridgeQuotesWithMetadata = createBridgeSelector(\n [\n selectMetadata,\n selectCurrencyValues,\n ({ quotes }) => quotes,\n (_, { migrationPhase }: BridgeQuotesClientParams) => migrationPhase,\n ],\n (legacyQuoteMetadata, quoteMetadataV2, quotes, migrationPhase) =>\n quotes.map((quote, index) =>\n mergeQuoteMetadata(\n quote,\n legacyQuoteMetadata[index],\n migrationPhase,\n quoteMetadataV2[index],\n ),\n ),\n);\n\nconst selectSortedBridgeQuotes = createBridgeSelector(\n [\n selectBridgeQuotesWithMetadata,\n (_, { sortOrder }: BridgeQuotesClientParams) => sortOrder,\n ],\n (quotesWithMetadata, sortOrder): QuoteResponse[] => {\n switch (sortOrder) {\n case SortOrder.ETA_ASC:\n return orderBy(\n quotesWithMetadata,\n (quote) => quote.estimatedProcessingTimeInSeconds,\n 'asc',\n );\n default:\n if (\n quotesWithMetadata.every(\n (quote) => quote.quote.priceData?.cost?.valueInCurrency,\n )\n ) {\n return orderBy(\n quotesWithMetadata,\n ({ quote: { priceData } }) =>\n Number(priceData?.cost?.valueInCurrency),\n 'asc',\n );\n }\n if (\n quotesWithMetadata.every(\n (quote) => quote.quote.priceData?.priceImpact?.amount,\n )\n ) {\n return orderBy(\n quotesWithMetadata,\n ({ quote: { priceData } }) =>\n Number(priceData?.priceImpact?.amount),\n 'asc',\n );\n }\n if (\n quotesWithMetadata.every(\n (quote) => quote.quote.priceData?.priceImpact?.valueInCurrency,\n )\n ) {\n return orderBy(\n quotesWithMetadata,\n ({ quote: { priceData } }) =>\n Number(priceData?.priceImpact?.valueInCurrency),\n 'asc',\n );\n }\n return orderBy(\n quotesWithMetadata,\n ({ quote }) => Number(quote.dest.amount),\n 'desc',\n );\n }\n },\n);\n\nconst selectRecommendedQuote = createBridgeSelector(\n [selectSortedBridgeQuotes],\n (quotes) => (quotes.length > 0 ? quotes[0] : null),\n);\n\nconst selectActiveQuote = createBridgeSelector(\n [\n selectRecommendedQuote,\n selectSortedBridgeQuotes,\n (_, { selectedQuote }) => selectedQuote?.quote.requestId,\n ],\n (recommendedQuote, sortedQuotes, requestId) =>\n sortedQuotes.find((quote) => quote.quote.requestId === requestId) ??\n recommendedQuote,\n);\n\nconst selectIsQuoteGoingToRefresh = createBridgeSelector(\n [\n selectBridgeFeatureFlags,\n // If at least one quote request is sufficiently funded, continue polling until max refresh count is reached\n (state) =>\n state.quoteRequest.every((quoteRequest) =>\n Boolean(quoteRequest.insufficientBal),\n ),\n (state) => state.quotesRefreshCount,\n ],\n (featureFlags, insufficientBal, quotesRefreshCount) =>\n insufficientBal ? false : featureFlags.maxRefreshCount > quotesRefreshCount,\n);\n\nconst selectQuoteRefreshRate = createBridgeSelector(\n [selectBridgeFeatureFlags, (state) => state.quoteRequest[0]?.srcChainId],\n (featureFlags, srcChainId) =>\n (srcChainId\n ? featureFlags.chains[formatChainIdToCaip(srcChainId)]?.refreshRate\n : featureFlags.refreshRate) ?? featureFlags.refreshRate,\n);\n\nconst selectQuoteExpiryInputs = createBridgeSelector(\n [\n selectIsQuoteGoingToRefresh,\n ({ quotesLastFetched }) => quotesLastFetched,\n selectQuoteRefreshRate,\n ],\n (isQuoteGoingToRefresh, quotesLastFetched, refreshRate) => ({\n isQuoteGoingToRefresh,\n quotesLastFetched,\n refreshRate,\n }),\n);\n\n/**\n * Selects whether the active quote has gone stale.\n *\n * The time comparison deliberately sits outside the memoized selector.\n * Clients call this on every render with a fresh `Date.now()`, reselect hands\n * every argument to every input selector, and `weakMapMemoize` retains\n * primitive-keyed results strongly until `clearCache()`. Taking the timestamp\n * as a selector argument therefore retained one cache entry per millisecond\n * ever observed, here and in every selector in the dependency chain. Only the\n * state-derived inputs are memoized now; the remaining subtraction is cheaper\n * than the cache lookup it replaces.\n *\n * @param state - The state of the bridge controller and its dependency controllers\n * @param _ignoredParam - Unused, kept so the signature matches the other client param selectors\n * @param currentTimeInMs - The current time in milliseconds\n * @returns Whether the active quote is expired\n */\nexport const selectIsQuoteExpired = (\n state: BridgeAppState,\n _ignoredParam: unknown,\n currentTimeInMs: number,\n): boolean => {\n const { isQuoteGoingToRefresh, quotesLastFetched, refreshRate } =\n selectQuoteExpiryInputs(state);\n\n return Boolean(\n !isQuoteGoingToRefresh &&\n quotesLastFetched &&\n currentTimeInMs - quotesLastFetched > refreshRate,\n );\n};\n\n/**\n * Selects sorted cross-chain swap quotes. By default, the quotes are sorted by cost in ascending order.\n *\n * @param state - The state of the bridge controller and its dependency controllers\n * @param sortOrder - The sort order of the quotes\n * @param selectedQuote - The quote that is currently selected by the user, should be cleared by clients when the req params change\n * @returns The activeQuote, recommendedQuote, sortedQuotes, and other quote fetching metadata\n *\n * @example\n * ```ts\n * const quotes = useSelector(state => selectBridgeQuotes(\n * { ...state.metamask, bridgeConfig: remoteFeatureFlags.bridgeConfig },\n * {\n * sortOrder: state.bridge.sortOrder,\n * selectedQuote: state.bridge.selectedQuote,\n * migrationPhase: '1.5',\n * }\n * ));\n * ```\n */\nexport const selectBridgeQuotes = createStructuredBridgeSelector({\n sortedQuotes: selectSortedBridgeQuotes,\n recommendedQuote: selectRecommendedQuote,\n activeQuote: selectActiveQuote,\n quotesLastFetchedMs: (state) => state.quotesLastFetched,\n isLoading: (state) => state.quotesLoadingStatus === RequestStatus.LOADING,\n quoteFetchError: (state) => state.quoteFetchError,\n quotesRefreshCount: (state) => state.quotesRefreshCount,\n quotesInitialLoadTimeMs: (state) => state.quotesInitialLoadTime,\n isQuoteGoingToRefresh: selectIsQuoteGoingToRefresh,\n});\n\nconst selectRecommendedQuotes = createBridgeSelector(\n [\n selectSortedBridgeQuotes,\n (_, { requestCount }: { requestCount: number }) => requestCount,\n ],\n (quotes, requestCount) =>\n quotes.reduce((acc, quote) => {\n const requestIndex = quote.quoteRequestIndex ?? 0;\n acc[requestIndex] ??= quote;\n return acc;\n }, Array<QuoteResponse | null>(requestCount).fill(null)),\n);\n\nconst selectDestAmountSum = createBridgeSelector(\n [selectRecommendedQuotes],\n (recommendedQuotes) => {\n return sumAmounts(recommendedQuotes.map((quote) => quote?.quote.dest));\n },\n);\n\nconst selectMinDestAmountSum = createBridgeSelector(\n [selectDestAmountSum],\n (destAmountSum): DeepPartial<QuoteResponse['quote']['dest']> | undefined => {\n if (!destAmountSum) {\n return undefined;\n }\n\n const {\n minAmount,\n minAmountNormalized,\n minAmountValueInCurrency,\n minAmountUsd,\n asset,\n } = destAmountSum;\n\n return {\n amount: minAmount,\n normalizedAmount: minAmountNormalized,\n valueInCurrency: minAmountValueInCurrency,\n usd: minAmountUsd,\n asset,\n };\n },\n);\n\n/**\n * Selects the recommended swap quotes for a batch of quote requests.\n *\n * @param state - The state of the bridge controller and its dependency controllers\n * @param sortOrder - The sort order of the quotes\n * @param requestCount - The number of quote requests fetched in the batch\n * @returns The quotes for multiple quote requests, including their recommendedQuotes,\n * totalReceived, minimumReceived, totalNetworkFee, and other quote fetching metadata.\n *\n * @example\n * ```ts\n * const quotes = useSelector(state => selectBatchSellQuotes(\n * { ...state.metamask },\n * {\n * sortOrder: state.bridge.sortOrder,\n * requestCount: 4,\n * }\n * ));\n * ```\n */\nexport const selectBatchSellQuotes = createStructuredBridgeSelector({\n recommendedQuotes: selectRecommendedQuotes,\n totalReceived: selectDestAmountSum,\n minimumReceived: selectMinDestAmountSum,\n quotesLastFetchedMs: (state) => state.quotesLastFetched,\n isLoading: (state) => state.quotesLoadingStatus === RequestStatus.LOADING,\n quoteFetchError: (state) => state.quoteFetchError,\n quotesRefreshCount: (state) => state.quotesRefreshCount,\n quotesInitialLoadTimeMs: (state) => state.quotesInitialLoadTime,\n isQuoteGoingToRefresh: selectIsQuoteGoingToRefresh,\n});\n\nconst selectBatchSellFees = createBridgeSelector(\n [\n (state) => state.batchSellTrades?.fee?.amount,\n (state) => state.batchSellTrades?.fee?.asset,\n (state) =>\n selectExchangeRateByAssetId(\n state,\n state.batchSellTrades?.fee?.asset?.assetId,\n ),\n ],\n (feeAmount, feeAsset, exchangeRate) => {\n return feeAmount && feeAsset && exchangeRate\n ? calcBatchFees(feeAmount, feeAsset, exchangeRate)\n : undefined;\n },\n);\n\n/**\n * Selects the batch transactions and fees for a batch of quotes\n *\n * @param state - The state of the bridge controller and its dependency controllers\n * @returns The total transaction fees and whether the batch sell trades are submittable.\n *\n * @example\n * ```ts\n * const { totalNetworkFee, isBatchSellTradeAvailable } = useSelector(state => selectBatchSellTrades(state.metamask));\n * ```\n */\nexport const selectBatchSellTrades = createBridgeSelector(\n [\n (state) => state.batchSellTradesLoadingStatus === RequestStatus.FETCHED,\n (state) => state.batchSellTrades,\n selectBatchSellFees,\n (state) => state.batchSellTradesLoadingStatus === RequestStatus.LOADING,\n ],\n (isBatchSellTradeAvailable, batchSellTrades, batchFees, isLoading) => {\n return {\n totalNetworkFee: batchFees,\n /**\n * Whether the batch sell trades have been fetched and transactions are ready to be submitted\n */\n isBatchSellTradeAvailable:\n isBatchSellTradeAvailable &&\n Boolean(batchSellTrades?.transactions?.length),\n isLoading,\n };\n },\n);\n\nexport const selectMinimumBalanceForRentExemptionInSOL = (\n state: BridgeAppState,\n) =>\n new BigNumber(state.minimumBalanceForRentExemptionInLamports ?? 0)\n .div(10 ** 9)\n .toString();\n\nexport const selectTokenWarnings = (state: BridgeAppState) =>\n state.tokenWarnings;\n\nexport const selectDefaultSlippagePercentage = createBridgeSelector(\n [\n (state) => selectBridgeFeatureFlags(state).chains,\n (_, slippageParams: Parameters<typeof getDefaultSlippagePercentage>[0]) =>\n slippageParams.srcTokenAddress,\n (_, slippageParams: Parameters<typeof getDefaultSlippagePercentage>[0]) =>\n slippageParams.destTokenAddress,\n (_, slippageParams: Parameters<typeof getDefaultSlippagePercentage>[0]) =>\n slippageParams.srcChainId\n ? formatChainIdToCaip(slippageParams.srcChainId)\n : undefined,\n (_, slippageParams: Parameters<typeof getDefaultSlippagePercentage>[0]) =>\n slippageParams.destChainId\n ? formatChainIdToCaip(slippageParams.destChainId)\n : undefined,\n ],\n (\n featureFlagsByChain,\n srcTokenAddress,\n destTokenAddress,\n srcChainId,\n destChainId,\n ) => {\n return getDefaultSlippagePercentage(\n {\n srcTokenAddress,\n destTokenAddress,\n srcChainId,\n destChainId,\n },\n srcChainId ? featureFlagsByChain[srcChainId]?.stablecoins : undefined,\n destChainId ? featureFlagsByChain[destChainId]?.stablecoins : undefined,\n );\n },\n);\n"]}
|
|
1
|
+
{"version":3,"file":"selectors.js","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport { getAddress } from '@ethersproject/address';\nimport type {\n CurrencyRateState,\n MultichainAssetsRatesControllerState,\n TokenRatesControllerState,\n} from '@metamask/assets-controllers';\nimport type {\n GasFeeEstimates,\n GasFeeEstimatesByChainId,\n} from '@metamask/gas-fee-controller';\nimport type { CaipAssetType } from '@metamask/utils';\nimport { isStrictHexString, parseCaipAssetType } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\nimport { orderBy } from 'lodash-es';\nimport {\n createSelector as createSelector_,\n createStructuredSelector as createStructuredSelector_,\n} from 'reselect';\n\nimport { BRIDGE_PREFERRED_GAS_ESTIMATE } from './constants/bridge.js';\nimport type {\n BridgeControllerState,\n DeepPartial,\n ExchangeRate,\n} from './types.js';\nimport { RequestStatus, SortOrder } from './types.js';\nimport {\n getNativeAssetForChainId,\n isNativeAddress,\n isNonEvmChainId,\n} from './utils/bridge.js';\nimport {\n formatAddressToAssetId,\n formatAddressToCaipReference,\n formatChainIdToCaip,\n formatChainIdToHex,\n} from './utils/caip-formatters.js';\nimport { processFeatureFlags } from './utils/feature-flags.js';\nimport { sumAmounts } from './utils/number-formatters.js';\nimport {\n calcBatchFees,\n calcQuoteMetadata,\n} from './utils/quote-metadata/calculators.js';\nimport { mergeQuoteMetadata } from './utils/quote-metadata/merge.js';\nimport { toCurrencyValues } from './utils/quote-metadata/to-currency-values.js';\nimport type { QuoteMetadata } from './utils/quote-metadata/types.js';\nimport { QuoteMetadataMigrationPhase } from './utils/quote-metadata/types.js';\nimport { getDefaultSlippagePercentage } from './utils/slippage.js';\nimport type { QuoteResponse } from './validators/quote-response.js';\n\nconst EMPTY_QUOTE_METADATA: never[] = [];\n\n/**\n * The controller states that provide exchange rates\n */\ntype ExchangeRateControllerState = MultichainAssetsRatesControllerState &\n TokenRatesControllerState &\n CurrencyRateState &\n Pick<BridgeControllerState, 'assetExchangeRates'>;\n/**\n * The state of the bridge controller and all its dependency controllers\n */\ntype RemoteFeatureFlagControllerState = {\n remoteFeatureFlags: {\n bridgeConfig: unknown;\n };\n};\n\n/**\n * Minimal shape required for exchange-rate lookups (used by getExchangeRateByChainIdAndAddress).\n * Uses types from assets-controllers; marketData and conversionRates also accept the bridge format.\n */\nexport type ExchangeRateSourcesForLookup = Pick<\n BridgeControllerState,\n 'assetExchangeRates'\n> &\n Partial<Pick<CurrencyRateState, 'currencyRates'>> & {\n marketData?:\n | TokenRatesControllerState['marketData']\n | Record<string, Record<string, { price?: number; currency?: string }>>;\n conversionRates?:\n | MultichainAssetsRatesControllerState['conversionRates']\n | Record<string, { rate: string }>;\n };\n\nexport type BridgeAppState = BridgeControllerState & {\n gasFeeEstimatesByChainId: GasFeeEstimatesByChainId;\n} & ExchangeRateControllerState & {\n participateInMetaMetrics: boolean;\n } & RemoteFeatureFlagControllerState;\n/**\n * Creates a structured selector for the bridge controller\n */\nconst createStructuredBridgeSelector =\n createStructuredSelector_.withTypes<BridgeAppState>();\n/**\n * Creates a typed selector for the bridge controller\n */\nconst createBridgeSelector = createSelector_.withTypes<BridgeAppState>();\n/**\n * Required parameters that clients must provide for the bridge quotes selector\n */\ntype BridgeQuotesClientParams = {\n sortOrder: SortOrder;\n selectedQuote: (QuoteResponse & QuoteMetadata) | null;\n migrationPhase: QuoteMetadataMigrationPhase;\n};\n\ntype EvmTokenExchangeRate = { price?: number; currency?: string };\ntype EvmTokenExchangeRates = Record<string, EvmTokenExchangeRate>;\n\nconst createFeatureFlagsSelector =\n createSelector_.withTypes<RemoteFeatureFlagControllerState>();\n\n/**\n * Selects the bridge feature flags\n *\n * @param state - The state of the bridge controller\n * @returns The bridge feature flags\n *\n * @example\n * ```ts\n * const featureFlags = useSelector(state => selectBridgeFeatureFlags(state));\n *\n * Or\n *\n * export const selectBridgeFeatureFlags = createSelector(\n * selectRemoteFeatureFlags,\n * (remoteFeatureFlags) =>\n * selectBridgeFeatureFlagsBase({\n * bridgeConfig: remoteFeatureFlags.bridgeConfig,\n * }),\n * );\n * ```\n */\nexport const selectBridgeFeatureFlags = createFeatureFlagsSelector(\n [(state) => state.remoteFeatureFlags.bridgeConfig],\n (bridgeConfig: unknown) => processFeatureFlags(bridgeConfig),\n);\n\nconst getEvmTokenExchangeRateForAddress = (\n evmTokenExchangeRates: EvmTokenExchangeRates | undefined,\n address: string,\n): EvmTokenExchangeRate | null | undefined => {\n try {\n return isStrictHexString(address)\n ? (evmTokenExchangeRates?.[getAddress(address)] ??\n evmTokenExchangeRates?.[address.toLowerCase()])\n : null;\n } catch {\n return null;\n }\n};\n\n/**\n * Selects the asset exchange rate for a given chain and address\n *\n * @param exchangeRateSources - the controller states containing the exchange rates\n * @param assetId - the assetId to get the exchange rate for\n * @returns The asset exchange rate for the given assetId\n */\nexport const selectExchangeRateByAssetId = (\n exchangeRateSources: ExchangeRateSourcesForLookup,\n assetId?: CaipAssetType,\n): ExchangeRate => {\n if (!assetId) {\n return {};\n }\n\n const { assetExchangeRates, currencyRates, marketData, conversionRates } =\n exchangeRateSources;\n\n // If the asset exchange rate is available in the bridge controller, use it\n // This is defined if the token's rate is not available from the assets controllers\n const bridgeControllerRate =\n assetExchangeRates?.[assetId.toLowerCase() as CaipAssetType] ??\n assetExchangeRates?.[assetId];\n if (\n bridgeControllerRate?.exchangeRate &&\n bridgeControllerRate?.usdExchangeRate\n ) {\n return bridgeControllerRate;\n }\n\n const { chainId } = parseCaipAssetType(assetId);\n\n // If the chain is a non-EVM chain, use the conversion rate from the multichain assets controller\n if (isNonEvmChainId(chainId)) {\n const conversionRatesByKey = conversionRates as\n | Record<string, { rate?: string }>\n | undefined;\n const multichainAssetExchangeRate = conversionRatesByKey?.[assetId];\n const rate = multichainAssetExchangeRate?.rate;\n if (rate) {\n // The multichain rate is denominated in the user's selected currency.\n // To get a USD rate, find the user's-currency-to-USD conversion factor from any EVM native currency rate.\n const nativeCurrencyRate =\n currencyRates &&\n Object.values(currencyRates).find(\n (rateEntry) =>\n rateEntry?.conversionRate !== undefined &&\n rateEntry?.conversionRate !== null &&\n rateEntry?.usdConversionRate !== undefined &&\n rateEntry?.usdConversionRate !== null,\n );\n const usersCurrencyToUsdRate =\n nativeCurrencyRate?.conversionRate !== undefined &&\n nativeCurrencyRate?.conversionRate !== null &&\n nativeCurrencyRate?.usdConversionRate !== undefined &&\n nativeCurrencyRate?.usdConversionRate !== null\n ? new BigNumber(nativeCurrencyRate.usdConversionRate).div(\n nativeCurrencyRate.conversionRate,\n )\n : undefined;\n const usdExchangeRate = usersCurrencyToUsdRate\n ? new BigNumber(rate).times(usersCurrencyToUsdRate).toString()\n : undefined;\n return {\n exchangeRate: rate,\n usdExchangeRate,\n };\n }\n return {};\n }\n\n const address = formatAddressToCaipReference(assetId);\n\n // If the chain is an EVM chain, use the conversion rate from the currency rates controller\n if (isNativeAddress(address)) {\n const { symbol } = getNativeAssetForChainId(chainId);\n const evmNativeExchangeRate = currencyRates?.[symbol];\n if (evmNativeExchangeRate) {\n return {\n exchangeRate: evmNativeExchangeRate.conversionRate?.toString(),\n usdExchangeRate: evmNativeExchangeRate.usdConversionRate?.toString(),\n };\n }\n return {};\n }\n // If the chain is an EVM chain and the asset is not the native asset, use the conversion rate from the token rates controller\n if (!isNonEvmChainId(chainId)) {\n const marketDataByChain =\n // oxlint-disable-next-line typescript/no-unnecessary-type-assertion\n (marketData as Record<string, EvmTokenExchangeRates> | undefined) ?? {};\n const evmTokenExchangeRates =\n marketDataByChain[formatChainIdToHex(chainId)];\n const evmTokenExchangeRateForAddress = getEvmTokenExchangeRateForAddress(\n evmTokenExchangeRates,\n address,\n );\n const currencyKey = evmTokenExchangeRateForAddress?.currency;\n const nativeCurrencyRate =\n currencyKey !== undefined && currencyKey !== null\n ? currencyRates?.[currencyKey]\n : undefined;\n const price = evmTokenExchangeRateForAddress?.price;\n // A missing or zero price is not a usable exchange rate. Returning a \"0\"\n // rate here is harmful in two ways: it surfaces a $0 fiat value, and it\n // makes `selectIsAssetExchangeRateInState` treat the token as already\n // priced (the non-empty \"0\" string is truthy), which prevents the\n // controller from fetching the real rate. Fall through to `{}` instead so\n // the rate gets fetched from the price API.\n if (price && nativeCurrencyRate) {\n return {\n exchangeRate: new BigNumber(price)\n .multipliedBy(nativeCurrencyRate.conversionRate ?? 0)\n .toString(),\n usdExchangeRate: new BigNumber(price)\n .multipliedBy(nativeCurrencyRate.usdConversionRate ?? 0)\n .toString(),\n };\n }\n }\n\n return {};\n};\n\n/**\n * Checks whether an exchange rate is available for a given assetId\n *\n * @param state The state of the bridge controller and its dependency controllers\n * @param assetId The assetId to check\n * @returns Whether an exchange rate is available for the given chain and address\n */\nexport const selectIsAssetExchangeRateInState = (\n state: ExchangeRateSourcesForLookup,\n assetId?: CaipAssetType,\n) =>\n Boolean(selectExchangeRateByAssetId(state, assetId)?.exchangeRate) &&\n Boolean(selectExchangeRateByAssetId(state, assetId)?.usdExchangeRate);\n\n/**\n * Selects the gas fee estimates from the gas fee controller. All potential networks\n * support EIP1559 gas fees so assume that gasFeeEstimates is of type GasFeeEstimates\n *\n * @param state - The state of the bridge controller and its dependency controllers\n * @param state.gasFeeEstimatesByChainId - gasEstimates by Hex ChainId\n * @param state.quotes - Fetched bridge/swap quotes\n * @returns The gas fee estimates in decGWEI\n */\nconst selectBridgeFeesPerGas = createBridgeSelector(\n [\n (state) => state.gasFeeEstimatesByChainId,\n (state) => state.quotes?.[0]?.chainId,\n ],\n (gasFeeEstimatesByChainId, srcChainId) => {\n if (!srcChainId) {\n return null;\n }\n if (isNonEvmChainId(srcChainId)) {\n return null;\n }\n // @ts-expect-error - all supported networks use this type of estimates\n const gasFeeEstimates: GasFeeEstimates | undefined =\n gasFeeEstimatesByChainId?.[\n formatChainIdToHex(srcChainId) as keyof typeof gasFeeEstimatesByChainId\n ]?.gasFeeEstimates;\n if (!gasFeeEstimates) {\n return null;\n }\n return {\n estimatedBaseFeeInDecGwei: gasFeeEstimates.estimatedBaseFee,\n feePerGasInDecGwei:\n gasFeeEstimates[BRIDGE_PREFERRED_GAS_ESTIMATE]?.suggestedMaxFeePerGas,\n maxFeePerGasInDecGwei: gasFeeEstimates.high?.suggestedMaxFeePerGas,\n };\n },\n);\n\nconst selectExchangeRateSources = createStructuredBridgeSelector({\n currencyRates: (state) => state.currencyRates,\n marketData: (state) => state.marketData,\n conversionRates: (state) => state.conversionRates,\n assetExchangeRates: (state) => state.assetExchangeRates,\n});\n\n// Selects metadata for cross-chain swap quotes\nconst selectMetadata = createBridgeSelector(\n [\n ({ quotes }) => quotes,\n selectBridgeFeesPerGas,\n selectExchangeRateSources,\n ({ quoteRequest }) => quoteRequest,\n (_, { migrationPhase }: BridgeQuotesClientParams) => migrationPhase,\n ],\n (\n quotes,\n bridgeFeesPerGas,\n exchangeRateSources,\n quoteRequest,\n migrationPhase,\n ) => {\n // Return early if the migration phase is V2Only because we don't need to calculate metadata\n if (migrationPhase === QuoteMetadataMigrationPhase.V2Only) {\n return EMPTY_QUOTE_METADATA;\n }\n const { destTokenAddress, srcChainId, destChainId } = quoteRequest[0] ?? {};\n\n return quotes.map((quote) =>\n calcQuoteMetadata(quote, {\n srcTokenExchangeRate: selectExchangeRateByAssetId(\n exchangeRateSources,\n quote.quote.src.asset.assetId,\n ),\n bridgeFeesPerGas,\n destTokenExchangeRate: selectExchangeRateByAssetId(\n exchangeRateSources,\n quote.quote.dest.asset.assetId ??\n formatAddressToAssetId(\n destTokenAddress ?? quote.quote.dest.asset.assetId,\n destChainId,\n ),\n ),\n nativeExchangeRate: selectExchangeRateByAssetId(\n exchangeRateSources,\n getNativeAssetForChainId(srcChainId ?? quote.chainId)?.assetId,\n ),\n }),\n );\n },\n);\n\n/**\n * Selects the USD to fiat exchange rate based on the native asset's price\n *\n * @param options - The options for the selector\n * @param options.quoteRequest - The quote request\n * @returns The USD to fiat exchange rate in string format\n */\nconst selectUsdToCurrencyExchangeRate = createBridgeSelector(\n [\n selectExchangeRateSources,\n ({ quoteRequest }) =>\n getNativeAssetForChainId(quoteRequest[0]?.srcChainId ?? 1)?.assetId,\n ],\n (exchangeRateSources, nativeAssetId) => {\n const exchangeRate = selectExchangeRateByAssetId(\n exchangeRateSources,\n nativeAssetId,\n );\n return exchangeRate?.exchangeRate && exchangeRate?.usdExchangeRate\n ? new BigNumber(exchangeRate.exchangeRate)\n .div(exchangeRate.usdExchangeRate)\n .toFixed()\n : undefined;\n },\n);\n\nconst selectCurrencyValues = createBridgeSelector(\n [\n ({ quotes }) => quotes,\n selectUsdToCurrencyExchangeRate,\n (_, { migrationPhase }: BridgeQuotesClientParams) => migrationPhase,\n ],\n (quotes, usdToFiatExchangeRateString, migrationPhase) => {\n if (migrationPhase === QuoteMetadataMigrationPhase.V1Data) {\n return EMPTY_QUOTE_METADATA;\n }\n const usdToFiatExchangeRate = usdToFiatExchangeRateString\n ? new BigNumber(usdToFiatExchangeRateString)\n : undefined;\n return quotes.map((quote) =>\n toCurrencyValues(quote, usdToFiatExchangeRate),\n );\n },\n);\n\n// Selects cross-chain swap quotes including their metadata\nconst selectBridgeQuotesWithMetadata = createBridgeSelector(\n [\n selectMetadata,\n selectCurrencyValues,\n ({ quotes }) => quotes,\n (_, { migrationPhase }: BridgeQuotesClientParams) => migrationPhase,\n ],\n (legacyQuoteMetadata, quoteMetadataV2, quotes, migrationPhase) =>\n quotes.map((quote, index) =>\n mergeQuoteMetadata(\n quote,\n legacyQuoteMetadata[index],\n migrationPhase,\n quoteMetadataV2[index],\n ),\n ),\n);\n\nconst selectSortedBridgeQuotes = createBridgeSelector(\n [\n selectBridgeQuotesWithMetadata,\n (_, { sortOrder }: BridgeQuotesClientParams) => sortOrder,\n ],\n (quotesWithMetadata, sortOrder): QuoteResponse[] => {\n switch (sortOrder) {\n case SortOrder.ETA_ASC:\n return orderBy(\n quotesWithMetadata,\n (quote) => quote.estimatedProcessingTimeInSeconds,\n 'asc',\n );\n default:\n if (\n quotesWithMetadata.every(\n (quote) => quote.quote.priceData?.cost?.valueInCurrency,\n )\n ) {\n return orderBy(\n quotesWithMetadata,\n ({ quote: { priceData } }) =>\n Number(priceData?.cost?.valueInCurrency),\n 'asc',\n );\n }\n if (\n quotesWithMetadata.every(\n (quote) => quote.quote.priceData?.priceImpact?.amount,\n )\n ) {\n return orderBy(\n quotesWithMetadata,\n ({ quote: { priceData } }) =>\n Number(priceData?.priceImpact?.amount),\n 'asc',\n );\n }\n if (\n quotesWithMetadata.every(\n (quote) => quote.quote.priceData?.priceImpact?.valueInCurrency,\n )\n ) {\n return orderBy(\n quotesWithMetadata,\n ({ quote: { priceData } }) =>\n Number(priceData?.priceImpact?.valueInCurrency),\n 'asc',\n );\n }\n return orderBy(\n quotesWithMetadata,\n ({ quote }) => Number(quote.dest.amount),\n 'desc',\n );\n }\n },\n);\n\nconst selectRecommendedQuote = createBridgeSelector(\n [selectSortedBridgeQuotes],\n (quotes) => (quotes.length > 0 ? quotes[0] : null),\n);\n\nconst selectActiveQuote = createBridgeSelector(\n [\n selectRecommendedQuote,\n selectSortedBridgeQuotes,\n (_, { selectedQuote }) => selectedQuote?.quote.requestId,\n ],\n (recommendedQuote, sortedQuotes, requestId) =>\n sortedQuotes.find((quote) => quote.quote.requestId === requestId) ??\n recommendedQuote,\n);\n\nconst selectIsQuoteGoingToRefresh = createBridgeSelector(\n [\n selectBridgeFeatureFlags,\n // If at least one quote request is sufficiently funded, continue polling until max refresh count is reached\n (state) =>\n state.quoteRequest.every((quoteRequest) =>\n Boolean(quoteRequest.insufficientBal),\n ),\n (state) => state.quotesRefreshCount,\n ],\n (featureFlags, insufficientBal, quotesRefreshCount) =>\n insufficientBal ? false : featureFlags.maxRefreshCount > quotesRefreshCount,\n);\n\nconst selectQuoteRefreshRate = createBridgeSelector(\n [selectBridgeFeatureFlags, (state) => state.quoteRequest[0]?.srcChainId],\n (featureFlags, srcChainId) =>\n (srcChainId\n ? featureFlags.chains[formatChainIdToCaip(srcChainId)]?.refreshRate\n : featureFlags.refreshRate) ?? featureFlags.refreshRate,\n);\n\nexport const selectIsQuoteExpired = createBridgeSelector(\n [\n selectIsQuoteGoingToRefresh,\n ({ quotesLastFetched }) => quotesLastFetched,\n selectQuoteRefreshRate,\n (_, _ignoredParam, currentTimeInMs: number) => currentTimeInMs,\n ],\n (isQuoteGoingToRefresh, quotesLastFetched, refreshRate, currentTimeInMs) =>\n Boolean(\n !isQuoteGoingToRefresh &&\n quotesLastFetched &&\n currentTimeInMs - quotesLastFetched > refreshRate,\n ),\n);\n\n/**\n * Selects sorted cross-chain swap quotes. By default, the quotes are sorted by cost in ascending order.\n *\n * @param state - The state of the bridge controller and its dependency controllers\n * @param sortOrder - The sort order of the quotes\n * @param selectedQuote - The quote that is currently selected by the user, should be cleared by clients when the req params change\n * @returns The activeQuote, recommendedQuote, sortedQuotes, and other quote fetching metadata\n *\n * @example\n * ```ts\n * const quotes = useSelector(state => selectBridgeQuotes(\n * { ...state.metamask, bridgeConfig: remoteFeatureFlags.bridgeConfig },\n * {\n * sortOrder: state.bridge.sortOrder,\n * selectedQuote: state.bridge.selectedQuote,\n * migrationPhase: '1.5',\n * }\n * ));\n * ```\n */\nexport const selectBridgeQuotes = createStructuredBridgeSelector({\n sortedQuotes: selectSortedBridgeQuotes,\n recommendedQuote: selectRecommendedQuote,\n activeQuote: selectActiveQuote,\n quotesLastFetchedMs: (state) => state.quotesLastFetched,\n isLoading: (state) => state.quotesLoadingStatus === RequestStatus.LOADING,\n quoteFetchError: (state) => state.quoteFetchError,\n quotesRefreshCount: (state) => state.quotesRefreshCount,\n quotesInitialLoadTimeMs: (state) => state.quotesInitialLoadTime,\n isQuoteGoingToRefresh: selectIsQuoteGoingToRefresh,\n});\n\nconst selectRecommendedQuotes = createBridgeSelector(\n [\n selectSortedBridgeQuotes,\n (_, { requestCount }: { requestCount: number }) => requestCount,\n ],\n (quotes, requestCount) =>\n quotes.reduce((acc, quote) => {\n const requestIndex = quote.quoteRequestIndex ?? 0;\n acc[requestIndex] ??= quote;\n return acc;\n }, Array<QuoteResponse | null>(requestCount).fill(null)),\n);\n\nconst selectDestAmountSum = createBridgeSelector(\n [selectRecommendedQuotes],\n (recommendedQuotes) => {\n return sumAmounts(recommendedQuotes.map((quote) => quote?.quote.dest));\n },\n);\n\nconst selectMinDestAmountSum = createBridgeSelector(\n [selectDestAmountSum],\n (destAmountSum): DeepPartial<QuoteResponse['quote']['dest']> | undefined => {\n if (!destAmountSum) {\n return undefined;\n }\n\n const {\n minAmount,\n minAmountNormalized,\n minAmountValueInCurrency,\n minAmountUsd,\n asset,\n } = destAmountSum;\n\n return {\n amount: minAmount,\n normalizedAmount: minAmountNormalized,\n valueInCurrency: minAmountValueInCurrency,\n usd: minAmountUsd,\n asset,\n };\n },\n);\n\n/**\n * Selects the recommended swap quotes for a batch of quote requests.\n *\n * @param state - The state of the bridge controller and its dependency controllers\n * @param sortOrder - The sort order of the quotes\n * @param requestCount - The number of quote requests fetched in the batch\n * @returns The quotes for multiple quote requests, including their recommendedQuotes,\n * totalReceived, minimumReceived, totalNetworkFee, and other quote fetching metadata.\n *\n * @example\n * ```ts\n * const quotes = useSelector(state => selectBatchSellQuotes(\n * { ...state.metamask },\n * {\n * sortOrder: state.bridge.sortOrder,\n * requestCount: 4,\n * }\n * ));\n * ```\n */\nexport const selectBatchSellQuotes = createStructuredBridgeSelector({\n recommendedQuotes: selectRecommendedQuotes,\n totalReceived: selectDestAmountSum,\n minimumReceived: selectMinDestAmountSum,\n quotesLastFetchedMs: (state) => state.quotesLastFetched,\n isLoading: (state) => state.quotesLoadingStatus === RequestStatus.LOADING,\n quoteFetchError: (state) => state.quoteFetchError,\n quotesRefreshCount: (state) => state.quotesRefreshCount,\n quotesInitialLoadTimeMs: (state) => state.quotesInitialLoadTime,\n isQuoteGoingToRefresh: selectIsQuoteGoingToRefresh,\n});\n\nconst selectBatchSellFees = createBridgeSelector(\n [\n (state) => state.batchSellTrades?.fee?.amount,\n (state) => state.batchSellTrades?.fee?.asset,\n (state) =>\n selectExchangeRateByAssetId(\n state,\n state.batchSellTrades?.fee?.asset?.assetId,\n ),\n ],\n (feeAmount, feeAsset, exchangeRate) => {\n return feeAmount && feeAsset && exchangeRate\n ? calcBatchFees(feeAmount, feeAsset, exchangeRate)\n : undefined;\n },\n);\n\n/**\n * Selects the batch transactions and fees for a batch of quotes\n *\n * @param state - The state of the bridge controller and its dependency controllers\n * @returns The total transaction fees and whether the batch sell trades are submittable.\n *\n * @example\n * ```ts\n * const { totalNetworkFee, isBatchSellTradeAvailable } = useSelector(state => selectBatchSellTrades(state.metamask));\n * ```\n */\nexport const selectBatchSellTrades = createBridgeSelector(\n [\n (state) => state.batchSellTradesLoadingStatus === RequestStatus.FETCHED,\n (state) => state.batchSellTrades,\n selectBatchSellFees,\n (state) => state.batchSellTradesLoadingStatus === RequestStatus.LOADING,\n ],\n (isBatchSellTradeAvailable, batchSellTrades, batchFees, isLoading) => {\n return {\n totalNetworkFee: batchFees,\n /**\n * Whether the batch sell trades have been fetched and transactions are ready to be submitted\n */\n isBatchSellTradeAvailable:\n isBatchSellTradeAvailable &&\n Boolean(batchSellTrades?.transactions?.length),\n isLoading,\n };\n },\n);\n\nexport const selectMinimumBalanceForRentExemptionInSOL = (\n state: BridgeAppState,\n) =>\n new BigNumber(state.minimumBalanceForRentExemptionInLamports ?? 0)\n .div(10 ** 9)\n .toString();\n\nexport const selectTokenWarnings = (state: BridgeAppState) =>\n state.tokenWarnings;\n\nexport const selectDefaultSlippagePercentage = createBridgeSelector(\n [\n (state) => selectBridgeFeatureFlags(state).chains,\n (_, slippageParams: Parameters<typeof getDefaultSlippagePercentage>[0]) =>\n slippageParams.srcTokenAddress,\n (_, slippageParams: Parameters<typeof getDefaultSlippagePercentage>[0]) =>\n slippageParams.destTokenAddress,\n (_, slippageParams: Parameters<typeof getDefaultSlippagePercentage>[0]) =>\n slippageParams.srcChainId\n ? formatChainIdToCaip(slippageParams.srcChainId)\n : undefined,\n (_, slippageParams: Parameters<typeof getDefaultSlippagePercentage>[0]) =>\n slippageParams.destChainId\n ? formatChainIdToCaip(slippageParams.destChainId)\n : undefined,\n ],\n (\n featureFlagsByChain,\n srcTokenAddress,\n destTokenAddress,\n srcChainId,\n destChainId,\n ) => {\n return getDefaultSlippagePercentage(\n {\n srcTokenAddress,\n destTokenAddress,\n srcChainId,\n destChainId,\n },\n srcChainId ? featureFlagsByChain[srcChainId]?.stablecoins : undefined,\n destChainId ? featureFlagsByChain[destChainId]?.stablecoins : undefined,\n );\n },\n);\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask-previews/bridge-controller",
|
|
3
|
-
"version": "82.0.2-preview-
|
|
3
|
+
"version": "82.0.2-preview-73700f116",
|
|
4
4
|
"description": "Manages bridge-related quote fetching functionality for MetaMask",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ethereum",
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
"nock": "^13.5.6",
|
|
90
90
|
"rimraf": "^6.1.3",
|
|
91
91
|
"ts-jest": "^29.4.14",
|
|
92
|
-
"typedoc": "^0.
|
|
92
|
+
"typedoc": "^0.28.20",
|
|
93
93
|
"typedoc-plugin-missing-exports": "^2.0.0",
|
|
94
94
|
"typescript": "npm:@typescript/typescript6@^6.0.2"
|
|
95
95
|
},
|