@flarenetwork/multichain-wallet-connector 0.0.2-rc.2 → 0.0.2-rc.21
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/README.md +11 -0
- package/dist/core/index.d.mts +2 -2
- package/dist/core/index.mjs +2 -3
- package/dist/{multichain-BZs-jPka.mjs → core-1pT9AVKV.mjs} +222 -174
- package/dist/core-1pT9AVKV.mjs.map +1 -0
- package/dist/{utils-CMINfXL2.d.mts → index-C6Pp_gsM.d.mts} +104 -21
- package/dist/index-C6Pp_gsM.d.mts.map +1 -0
- package/dist/{use-wallets-BihNE6q5.d.mts → index-K6sAU1hV.d.mts} +12 -6
- package/dist/index-K6sAU1hV.d.mts.map +1 -0
- package/dist/index.d.mts +3 -3
- package/dist/index.mjs +3 -5
- package/dist/react/index.d.mts +3 -3
- package/dist/react/index.mjs +3 -5
- package/dist/{use-wallets-B_18Wf48.mjs → react-D-tpV70-.mjs} +3 -20
- package/dist/react-D-tpV70-.mjs.map +1 -0
- package/package.json +31 -40
- package/dist/multichain-BZs-jPka.mjs.map +0 -1
- package/dist/use-wallets-B_18Wf48.mjs.map +0 -1
- package/dist/use-wallets-BihNE6q5.d.mts.map +0 -1
- package/dist/utils-CMINfXL2.d.mts.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createPublicClient, createWalletClient, custom, defineChain, getAddress, getTypesForEIP712Domain, hashDomain, hashStruct, http, serializeSignature, serializeTransaction } from "viem";
|
|
2
2
|
import { flare, flareTestnet, mainnet, sepolia, songbird } from "viem/chains";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { Client, RippledError, XrplError, encode, parseAccountRootFlags } from "xrpl";
|
|
4
|
+
import { DisconnectedDevice, DisconnectedDeviceDuringOperation, LockedDeviceError, StatusCodes, TransportInterfaceNotAvailable, TransportOpenUserCancelled, TransportRaceCondition, TransportStatusError } from "@ledgerhq/errors";
|
|
5
5
|
import Eth from "@ledgerhq/hw-app-eth";
|
|
6
6
|
import * as secp256k1 from "@noble/secp256k1";
|
|
7
7
|
import { publicKeyToAddress, toAccount } from "viem/accounts";
|
|
@@ -9,12 +9,11 @@ import { bytesToHex } from "viem/utils";
|
|
|
9
9
|
import { FlareApp } from "@zondax/ledger-flare";
|
|
10
10
|
import Xrp from "@ledgerhq/hw-app-xrp";
|
|
11
11
|
import TransportWebHID from "@ledgerhq/hw-transport-webhid";
|
|
12
|
-
import {
|
|
12
|
+
import { createEVMClient } from "@metamask/connect-evm";
|
|
13
13
|
import { createAppKit } from "@reown/appkit";
|
|
14
14
|
import UniversalProvider from "@walletconnect/universal-provider";
|
|
15
15
|
import { Xumm } from "xumm";
|
|
16
16
|
import { createStore } from "@xstate/store";
|
|
17
|
-
|
|
18
17
|
//#region src/core/shared/type-utils.ts
|
|
19
18
|
var TypeUtils = class {
|
|
20
19
|
static isError(value) {
|
|
@@ -27,7 +26,6 @@ var TypeUtils = class {
|
|
|
27
26
|
return typeof value === "string";
|
|
28
27
|
}
|
|
29
28
|
};
|
|
30
|
-
|
|
31
29
|
//#endregion
|
|
32
30
|
//#region src/core/utils/utils.ts
|
|
33
31
|
/**
|
|
@@ -64,7 +62,6 @@ function isEmptyObject(value) {
|
|
|
64
62
|
function stripEmptyObjects(obj) {
|
|
65
63
|
return objectFromEntries(objectEntries(obj).filter(([, v]) => !isEmptyObject(v)));
|
|
66
64
|
}
|
|
67
|
-
|
|
68
65
|
//#endregion
|
|
69
66
|
//#region src/core/chains/chain.constants.ts
|
|
70
67
|
const CAIP2_NAMESPACES = {
|
|
@@ -87,7 +84,6 @@ const CAIP2 = {
|
|
|
87
84
|
},
|
|
88
85
|
[CAIP2_NAMESPACES.bip122]: { "1a91e3dace36e2be3bf030a65679fe821": "Dogecoin Mainnet" }
|
|
89
86
|
};
|
|
90
|
-
|
|
91
87
|
//#endregion
|
|
92
88
|
//#region src/core/chains/chain.utils.ts
|
|
93
89
|
var ChainGuards = class {
|
|
@@ -156,7 +152,6 @@ function createChainConfig(config) {
|
|
|
156
152
|
}];
|
|
157
153
|
}));
|
|
158
154
|
}
|
|
159
|
-
|
|
160
155
|
//#endregion
|
|
161
156
|
//#region src/core/chains/viem/custom-chains.ts
|
|
162
157
|
const flareCoston = defineChain({
|
|
@@ -175,7 +170,6 @@ const flareCoston = defineChain({
|
|
|
175
170
|
} },
|
|
176
171
|
testnet: true
|
|
177
172
|
});
|
|
178
|
-
|
|
179
173
|
//#endregion
|
|
180
174
|
//#region src/core/chains/chain-registry.ts
|
|
181
175
|
function defineChainRegistry(registry) {
|
|
@@ -304,7 +298,6 @@ const isCaip2 = (caip2) => {
|
|
|
304
298
|
if (!caip2) return false;
|
|
305
299
|
return Object.hasOwn(chainConfig, caip2);
|
|
306
300
|
};
|
|
307
|
-
|
|
308
301
|
//#endregion
|
|
309
302
|
//#region src/core/config/config-resolver.ts
|
|
310
303
|
var ConfigResolver = class ConfigResolver {
|
|
@@ -402,7 +395,6 @@ var ConfigResolver = class ConfigResolver {
|
|
|
402
395
|
});
|
|
403
396
|
}
|
|
404
397
|
};
|
|
405
|
-
|
|
406
398
|
//#endregion
|
|
407
399
|
//#region src/core/errors/error-codes.ts
|
|
408
400
|
/**
|
|
@@ -428,6 +420,7 @@ const errorCodeMap = {
|
|
|
428
420
|
4008: "COMMON_NO_ACCOUNTS",
|
|
429
421
|
4009: "COMMON_PROVIDER_ERROR",
|
|
430
422
|
4010: "COMMON_CONNECTION_IN_PROGRESS",
|
|
423
|
+
4011: "COMMON_TX_EXPIRED",
|
|
431
424
|
4100: "METAMASK_PROVIDER_NOT_FOUND",
|
|
432
425
|
4101: "METAMASK_CHAIN_NOT_ADDED",
|
|
433
426
|
4102: "METAMASK_NOT_INSTALLED",
|
|
@@ -437,6 +430,7 @@ const errorCodeMap = {
|
|
|
437
430
|
4203: "LEDGER_TRANSPORT_ERROR",
|
|
438
431
|
4204: "LEDGER_CONNECTION_FAILED",
|
|
439
432
|
4205: "LEDGER_TX_REJECTED",
|
|
433
|
+
4206: "LEDGER_DEVICE_BUSY",
|
|
440
434
|
4300: "WALLET_CONNECT_SESSION_EXPIRED",
|
|
441
435
|
4301: "WALLET_CONNECT_PAIRING_FAILED",
|
|
442
436
|
4302: "WALLET_CONNECT_SESSION_NOT_FOUND",
|
|
@@ -458,44 +452,44 @@ function buildReverseMap() {
|
|
|
458
452
|
return objectFromEntries(entries);
|
|
459
453
|
}
|
|
460
454
|
const ErrorCode = buildReverseMap();
|
|
461
|
-
|
|
462
455
|
//#endregion
|
|
463
456
|
//#region src/core/errors/error-messages.ts
|
|
464
457
|
/**
|
|
465
458
|
* Human-readable error messages for each error code.
|
|
466
459
|
*/
|
|
467
460
|
const ErrorMessages = {
|
|
468
|
-
COMMON_USER_REJECTED: "User rejected the request",
|
|
469
|
-
COMMON_NOT_CONNECTED: "Wallet is not connected",
|
|
470
|
-
COMMON_CHAIN_NOT_CONFIGURED: "Chain is not configured",
|
|
471
|
-
COMMON_CHAIN_NOT_SUPPORTED: "Chain is not supported by this wallet",
|
|
472
|
-
COMMON_FEATURE_NOT_SUPPORTED: "Feature is not supported by this wallet",
|
|
473
|
-
COMMON_CONNECTION_FAILED: "Connection failed",
|
|
474
|
-
COMMON_UNKNOWN_CHAIN_ID: "Unknown chain ID",
|
|
475
|
-
COMMON_NO_ACCOUNTS: "No accounts available",
|
|
476
|
-
COMMON_PROVIDER_ERROR: "Provider error",
|
|
477
|
-
COMMON_CONNECTION_IN_PROGRESS: "Connection already in progress",
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
461
|
+
COMMON_USER_REJECTED: "User rejected the request.",
|
|
462
|
+
COMMON_NOT_CONNECTED: "Wallet is not connected.",
|
|
463
|
+
COMMON_CHAIN_NOT_CONFIGURED: "Chain is not configured.",
|
|
464
|
+
COMMON_CHAIN_NOT_SUPPORTED: "Chain is not supported by this wallet.",
|
|
465
|
+
COMMON_FEATURE_NOT_SUPPORTED: "Feature is not supported by this wallet.",
|
|
466
|
+
COMMON_CONNECTION_FAILED: "Connection failed.",
|
|
467
|
+
COMMON_UNKNOWN_CHAIN_ID: "Unknown chain ID.",
|
|
468
|
+
COMMON_NO_ACCOUNTS: "No accounts available.",
|
|
469
|
+
COMMON_PROVIDER_ERROR: "Provider error.",
|
|
470
|
+
COMMON_CONNECTION_IN_PROGRESS: "Connection already in progress.",
|
|
471
|
+
COMMON_TX_EXPIRED: "Transaction expired. Please try again.",
|
|
472
|
+
METAMASK_PROVIDER_NOT_FOUND: "MetaMask provider not found.",
|
|
473
|
+
METAMASK_CHAIN_NOT_ADDED: "Chain is not added to MetaMask.",
|
|
474
|
+
METAMASK_NOT_INSTALLED: "MetaMask is not installed.",
|
|
475
|
+
LEDGER_DEVICE_LOCKED: "Ledger device is locked.",
|
|
476
|
+
LEDGER_APP_NOT_OPEN: "Please open the correct app on your Ledger.",
|
|
477
|
+
LEDGER_WRONG_APP: "Wrong app is open on Ledger device.",
|
|
478
|
+
LEDGER_TRANSPORT_ERROR: "Ledger transport error.",
|
|
479
|
+
LEDGER_CONNECTION_FAILED: "Failed to connect to Ledger device.",
|
|
480
|
+
LEDGER_TX_REJECTED: "Transaction rejected on Ledger device.",
|
|
481
|
+
LEDGER_DEVICE_BUSY: "An action is already pending on the Ledger device. Please deny or reconnect.",
|
|
482
|
+
WALLET_CONNECT_SESSION_EXPIRED: "WalletConnect session has expired.",
|
|
483
|
+
WALLET_CONNECT_PAIRING_FAILED: "WalletConnect pairing failed.",
|
|
484
|
+
WALLET_CONNECT_SESSION_NOT_FOUND: "WalletConnect session not found.",
|
|
485
|
+
WALLET_CONNECT_PROVIDER_NOT_INITIALIZED: "WalletConnect provider not initialized.",
|
|
486
|
+
XAMAN_SIGN_REJECTED: "Sign request rejected in Xaman.",
|
|
487
|
+
XAMAN_QR_TIMEOUT: "Xaman QR scan timed out.",
|
|
488
|
+
XAMAN_SDK_NOT_READY: "Xaman SDK is not ready.",
|
|
489
|
+
XAMAN_AUTHORIZATION_FAILED: "Xaman authorization failed.",
|
|
490
|
+
DCENT_NOT_IN_BROWSER: "D'CENT in-app browser not detected.",
|
|
491
|
+
DCENT_SIGN_REJECTED: "Transaction rejected in D'CENT wallet."
|
|
497
492
|
};
|
|
498
|
-
|
|
499
493
|
//#endregion
|
|
500
494
|
//#region src/core/errors/wallet-error.ts
|
|
501
495
|
var WalletError = class extends Error {
|
|
@@ -510,7 +504,18 @@ var WalletError = class extends Error {
|
|
|
510
504
|
Object.setPrototypeOf(this, new.target.prototype);
|
|
511
505
|
}
|
|
512
506
|
};
|
|
513
|
-
|
|
507
|
+
//#endregion
|
|
508
|
+
//#region src/core/clients/xrp/xrpl-error.ts
|
|
509
|
+
var XrplWalletError = class XrplWalletError extends WalletError {
|
|
510
|
+
constructor(walletType, code, cause) {
|
|
511
|
+
super(walletType, code, cause);
|
|
512
|
+
this.name = "XrplWalletError";
|
|
513
|
+
}
|
|
514
|
+
static fromError(error, walletType) {
|
|
515
|
+
if (error instanceof XrplError && error.message.includes("tefMAX_LEDGER")) return new XrplWalletError(walletType, "COMMON_TX_EXPIRED", error);
|
|
516
|
+
return null;
|
|
517
|
+
}
|
|
518
|
+
};
|
|
514
519
|
//#endregion
|
|
515
520
|
//#region src/core/connectors/dcent/dcent-error.ts
|
|
516
521
|
var DcentError = class extends WalletError {
|
|
@@ -522,7 +527,6 @@ var DcentError = class extends WalletError {
|
|
|
522
527
|
return null;
|
|
523
528
|
}
|
|
524
529
|
};
|
|
525
|
-
|
|
526
530
|
//#endregion
|
|
527
531
|
//#region src/core/connectors/ledger/ledger-error.ts
|
|
528
532
|
var LedgerError = class LedgerError extends WalletError {
|
|
@@ -533,7 +537,11 @@ var LedgerError = class LedgerError extends WalletError {
|
|
|
533
537
|
code: "LEDGER_DEVICE_LOCKED"
|
|
534
538
|
},
|
|
535
539
|
{
|
|
536
|
-
match: (e) => e instanceof
|
|
540
|
+
match: (e) => e instanceof TransportStatusError && (e.statusCode === StatusCodes.LOCKED_DEVICE || e.statusCode === StatusCodes.CLA_NOT_SUPPORTED),
|
|
541
|
+
code: "LEDGER_DEVICE_LOCKED"
|
|
542
|
+
},
|
|
543
|
+
{
|
|
544
|
+
match: (e) => e instanceof TransportStatusError && (e.statusCode === StatusCodes.USER_REFUSED_ON_DEVICE || e.statusCode === StatusCodes.CONDITIONS_OF_USE_NOT_SATISFIED),
|
|
537
545
|
code: "LEDGER_TX_REJECTED"
|
|
538
546
|
},
|
|
539
547
|
{
|
|
@@ -551,6 +559,14 @@ var LedgerError = class LedgerError extends WalletError {
|
|
|
551
559
|
{
|
|
552
560
|
match: (e) => e instanceof TransportInterfaceNotAvailable,
|
|
553
561
|
code: "LEDGER_CONNECTION_FAILED"
|
|
562
|
+
},
|
|
563
|
+
{
|
|
564
|
+
match: (e) => e instanceof TransportRaceCondition,
|
|
565
|
+
code: "LEDGER_DEVICE_BUSY"
|
|
566
|
+
},
|
|
567
|
+
{
|
|
568
|
+
match: (e) => e instanceof TransportStatusError,
|
|
569
|
+
code: "LEDGER_TRANSPORT_ERROR"
|
|
554
570
|
}
|
|
555
571
|
];
|
|
556
572
|
}
|
|
@@ -564,7 +580,6 @@ var LedgerError = class LedgerError extends WalletError {
|
|
|
564
580
|
return null;
|
|
565
581
|
}
|
|
566
582
|
};
|
|
567
|
-
|
|
568
583
|
//#endregion
|
|
569
584
|
//#region src/core/utils/chain-utils.ts
|
|
570
585
|
/**
|
|
@@ -593,7 +608,6 @@ var ChainUtils = class ChainUtils {
|
|
|
593
608
|
return map;
|
|
594
609
|
}
|
|
595
610
|
};
|
|
596
|
-
|
|
597
611
|
//#endregion
|
|
598
612
|
//#region src/core/connectors/metamask/metamask-error.ts
|
|
599
613
|
var MetaMaskError = class MetaMaskError extends WalletError {
|
|
@@ -606,7 +620,6 @@ var MetaMaskError = class MetaMaskError extends WalletError {
|
|
|
606
620
|
return null;
|
|
607
621
|
}
|
|
608
622
|
};
|
|
609
|
-
|
|
610
623
|
//#endregion
|
|
611
624
|
//#region src/core/connectors/wallet-connect/wallet-connect-error.ts
|
|
612
625
|
var WalletConnectError = class WalletConnectError extends WalletError {
|
|
@@ -619,7 +632,6 @@ var WalletConnectError = class WalletConnectError extends WalletError {
|
|
|
619
632
|
return null;
|
|
620
633
|
}
|
|
621
634
|
};
|
|
622
|
-
|
|
623
635
|
//#endregion
|
|
624
636
|
//#region src/core/connectors/xaman/xaman-error.ts
|
|
625
637
|
var XamanError = class extends WalletError {
|
|
@@ -631,7 +643,6 @@ var XamanError = class extends WalletError {
|
|
|
631
643
|
return null;
|
|
632
644
|
}
|
|
633
645
|
};
|
|
634
|
-
|
|
635
646
|
//#endregion
|
|
636
647
|
//#region src/core/errors/wallet-error-helper.ts
|
|
637
648
|
var WalletErrorHelper = class {
|
|
@@ -640,6 +651,8 @@ var WalletErrorHelper = class {
|
|
|
640
651
|
}
|
|
641
652
|
static from(error, walletType) {
|
|
642
653
|
if (error instanceof WalletError) return error;
|
|
654
|
+
const xrplError = XrplWalletError.fromError(error, walletType);
|
|
655
|
+
if (xrplError) return xrplError;
|
|
643
656
|
switch (walletType) {
|
|
644
657
|
case "ledger": return LedgerError.fromError(error);
|
|
645
658
|
case "wallet-connect": return WalletConnectError.fromError(error);
|
|
@@ -650,7 +663,6 @@ var WalletErrorHelper = class {
|
|
|
650
663
|
}
|
|
651
664
|
}
|
|
652
665
|
};
|
|
653
|
-
|
|
654
666
|
//#endregion
|
|
655
667
|
//#region src/core/utils/error-utils.ts
|
|
656
668
|
var ErrorUtils = class ErrorUtils {
|
|
@@ -669,7 +681,6 @@ var ErrorUtils = class ErrorUtils {
|
|
|
669
681
|
return new Error(ErrorUtils.extractMessage(error));
|
|
670
682
|
}
|
|
671
683
|
};
|
|
672
|
-
|
|
673
684
|
//#endregion
|
|
674
685
|
//#region src/core/connectors/connector-events.ts
|
|
675
686
|
var ConnectorEventEmitter = class {
|
|
@@ -735,7 +746,6 @@ var ConnectorEventEmitter = class {
|
|
|
735
746
|
return addresses;
|
|
736
747
|
}
|
|
737
748
|
};
|
|
738
|
-
|
|
739
749
|
//#endregion
|
|
740
750
|
//#region src/core/connectors/base-connector.ts
|
|
741
751
|
var BaseConnector = class {
|
|
@@ -766,8 +776,8 @@ var BaseConnector = class {
|
|
|
766
776
|
}
|
|
767
777
|
/**
|
|
768
778
|
* Reset init state so next operation re-initializes the SDK.
|
|
769
|
-
* Required for
|
|
770
|
-
* WalletConnect should NOT call this —
|
|
779
|
+
* Required for Xaman (SDK terminates on disconnect).
|
|
780
|
+
* MetaMask and WalletConnect should NOT call this — their providers survive disconnect.
|
|
771
781
|
*/
|
|
772
782
|
resetInitialization() {
|
|
773
783
|
this.initPromise = null;
|
|
@@ -792,7 +802,6 @@ var BaseConnector = class {
|
|
|
792
802
|
});
|
|
793
803
|
}
|
|
794
804
|
};
|
|
795
|
-
|
|
796
805
|
//#endregion
|
|
797
806
|
//#region src/core/clients/xrp/base-xrpl-client.ts
|
|
798
807
|
var BaseXrplClient = class extends Client {
|
|
@@ -826,7 +835,6 @@ var BaseXrplClient = class extends Client {
|
|
|
826
835
|
}
|
|
827
836
|
}
|
|
828
837
|
};
|
|
829
|
-
|
|
830
838
|
//#endregion
|
|
831
839
|
//#region src/core/clients/xrp/xrpl-client.ts
|
|
832
840
|
var XrplClient = class extends BaseXrplClient {
|
|
@@ -841,7 +849,6 @@ var XrplClient = class extends BaseXrplClient {
|
|
|
841
849
|
await super.onDestroy();
|
|
842
850
|
}
|
|
843
851
|
};
|
|
844
|
-
|
|
845
852
|
//#endregion
|
|
846
853
|
//#region src/core/connectors/dcent/dcent-xrpl-client.ts
|
|
847
854
|
var DcentXrpClient = class {
|
|
@@ -860,8 +867,8 @@ var DcentXrpClient = class {
|
|
|
860
867
|
autofill: true
|
|
861
868
|
}]
|
|
862
869
|
});
|
|
863
|
-
if (!result?.
|
|
864
|
-
return result.
|
|
870
|
+
if (!result?.hash) throw new DcentError("DCENT_SIGN_REJECTED");
|
|
871
|
+
return result.hash;
|
|
865
872
|
}
|
|
866
873
|
async getBalance(address) {
|
|
867
874
|
return (await this.getSimpleClient()).getBalance(address);
|
|
@@ -881,7 +888,6 @@ var DcentXrpClient = class {
|
|
|
881
888
|
}
|
|
882
889
|
async onDestroy() {}
|
|
883
890
|
};
|
|
884
|
-
|
|
885
891
|
//#endregion
|
|
886
892
|
//#region src/core/connectors/dcent/dcent-connector.ts
|
|
887
893
|
const DCENT_NETWORK_MAP = {
|
|
@@ -955,7 +961,6 @@ var DcentConnector = class DcentConnector extends BaseConnector {
|
|
|
955
961
|
return this.store.getSnapshot().context.connectionState;
|
|
956
962
|
}
|
|
957
963
|
};
|
|
958
|
-
|
|
959
964
|
//#endregion
|
|
960
965
|
//#region src/core/shared/bip44.ts
|
|
961
966
|
const BIP44_HARDENED_OFFSET = 2147483648;
|
|
@@ -1103,7 +1108,6 @@ var Bip44 = class Bip44 {
|
|
|
1103
1108
|
return component.hardened ? component.value + BIP44_HARDENED_OFFSET : component.value;
|
|
1104
1109
|
}
|
|
1105
1110
|
};
|
|
1106
|
-
|
|
1107
1111
|
//#endregion
|
|
1108
1112
|
//#region src/core/shared/connection-mutex.ts
|
|
1109
1113
|
/**
|
|
@@ -1128,7 +1132,6 @@ var ConnectionMutex = class {
|
|
|
1128
1132
|
}
|
|
1129
1133
|
}
|
|
1130
1134
|
};
|
|
1131
|
-
|
|
1132
1135
|
//#endregion
|
|
1133
1136
|
//#region src/core/connectors/ledger/internal/ledger-hex-utils.ts
|
|
1134
1137
|
var LedgerHexUtils = class {
|
|
@@ -1142,7 +1145,6 @@ var LedgerHexUtils = class {
|
|
|
1142
1145
|
return `0x${Array.from(buffer).map((item) => item.toString(16).padStart(2, "0")).join("")}`;
|
|
1143
1146
|
}
|
|
1144
1147
|
};
|
|
1145
|
-
|
|
1146
1148
|
//#endregion
|
|
1147
1149
|
//#region src/core/connectors/ledger/internal/ledger-address-helper.ts
|
|
1148
1150
|
var LedgerAddressHelper = class {
|
|
@@ -1160,7 +1162,6 @@ var LedgerAddressHelper = class {
|
|
|
1160
1162
|
return publicKeyToAddress(LedgerHexUtils.fromBuffer(point.toBytes(false)));
|
|
1161
1163
|
}
|
|
1162
1164
|
};
|
|
1163
|
-
|
|
1164
1165
|
//#endregion
|
|
1165
1166
|
//#region src/core/connectors/ledger/apps/ethereum/ethereum-viem-adapter.ts
|
|
1166
1167
|
async function ledgerToEthAccount({ ledger, derivationPath }) {
|
|
@@ -1222,10 +1223,17 @@ async function ledgerToEthAccount({ ledger, derivationPath }) {
|
|
|
1222
1223
|
source: "ledger"
|
|
1223
1224
|
};
|
|
1224
1225
|
}
|
|
1225
|
-
|
|
1226
1226
|
//#endregion
|
|
1227
1227
|
//#region src/core/connectors/ledger/apps/ethereum/ethereum-ledger-app.ts
|
|
1228
|
-
var EthereumLedgerApp = class extends Eth {
|
|
1228
|
+
var EthereumLedgerApp = class EthereumLedgerApp extends Eth {
|
|
1229
|
+
constructor(transportManager, appName, transport) {
|
|
1230
|
+
super(transport);
|
|
1231
|
+
this.appName = appName;
|
|
1232
|
+
this.transportManager = transportManager;
|
|
1233
|
+
}
|
|
1234
|
+
static async create(transportManager, appName) {
|
|
1235
|
+
return new EthereumLedgerApp(transportManager, appName, await transportManager.open());
|
|
1236
|
+
}
|
|
1229
1237
|
async getComputedAddress(bip44, _hrp) {
|
|
1230
1238
|
return {
|
|
1231
1239
|
address: (await this.getAddress(bip44.getFullPath())).address,
|
|
@@ -1241,8 +1249,10 @@ var EthereumLedgerApp = class extends Eth {
|
|
|
1241
1249
|
derivationPath: bip44.getPathWithoutMaster()
|
|
1242
1250
|
});
|
|
1243
1251
|
}
|
|
1252
|
+
async verifyActive() {
|
|
1253
|
+
await this.transportManager.verifyApp(this.appName);
|
|
1254
|
+
}
|
|
1244
1255
|
};
|
|
1245
|
-
|
|
1246
1256
|
//#endregion
|
|
1247
1257
|
//#region src/core/connectors/ledger/apps/flare/flare-viem-adapter.ts
|
|
1248
1258
|
async function ledgerToFlareAccount({ ledger, derivationPath }) {
|
|
@@ -1285,10 +1295,17 @@ async function ledgerToFlareAccount({ ledger, derivationPath }) {
|
|
|
1285
1295
|
source: "ledger"
|
|
1286
1296
|
};
|
|
1287
1297
|
}
|
|
1288
|
-
|
|
1289
1298
|
//#endregion
|
|
1290
1299
|
//#region src/core/connectors/ledger/apps/flare/flare-ledger-app.ts
|
|
1291
|
-
var FlareLedgerApp = class extends FlareApp {
|
|
1300
|
+
var FlareLedgerApp = class FlareLedgerApp extends FlareApp {
|
|
1301
|
+
constructor(transportManager, appName, transport) {
|
|
1302
|
+
super(transport);
|
|
1303
|
+
this.appName = appName;
|
|
1304
|
+
this.transportManager = transportManager;
|
|
1305
|
+
}
|
|
1306
|
+
static async create(transportManager, appName) {
|
|
1307
|
+
return new FlareLedgerApp(transportManager, appName, await transportManager.open());
|
|
1308
|
+
}
|
|
1292
1309
|
async getComputedAddress(bip44, hrp) {
|
|
1293
1310
|
const addressData = await this.getAddressAndPubKey(bip44.getFullPath(), hrp);
|
|
1294
1311
|
return {
|
|
@@ -1305,11 +1322,28 @@ var FlareLedgerApp = class extends FlareApp {
|
|
|
1305
1322
|
derivationPath: bip44.getPathWithoutMaster()
|
|
1306
1323
|
});
|
|
1307
1324
|
}
|
|
1325
|
+
async verifyActive() {
|
|
1326
|
+
await this.transportManager.verifyApp(this.appName);
|
|
1327
|
+
}
|
|
1308
1328
|
};
|
|
1309
|
-
|
|
1310
1329
|
//#endregion
|
|
1311
1330
|
//#region src/core/connectors/ledger/apps/xrp/xrp-ledger-app.ts
|
|
1312
|
-
var XrpLedgerApp = class
|
|
1331
|
+
var XrpLedgerApp = class {
|
|
1332
|
+
constructor(transportManager, appName) {
|
|
1333
|
+
this.xrp = null;
|
|
1334
|
+
this.transportManager = transportManager;
|
|
1335
|
+
this.appName = appName;
|
|
1336
|
+
}
|
|
1337
|
+
async getXrp() {
|
|
1338
|
+
if (!this.xrp) this.xrp = new Xrp(await this.transportManager.open());
|
|
1339
|
+
return this.xrp;
|
|
1340
|
+
}
|
|
1341
|
+
async getAddress(path) {
|
|
1342
|
+
return (await this.getXrp()).getAddress(path);
|
|
1343
|
+
}
|
|
1344
|
+
async signTransaction(path, rawTxHex) {
|
|
1345
|
+
return (await this.getXrp()).signTransaction(path, rawTxHex);
|
|
1346
|
+
}
|
|
1313
1347
|
async getComputedAddress(bip44, _hrp) {
|
|
1314
1348
|
const pathWithoutMaster = bip44.getPathWithoutMaster();
|
|
1315
1349
|
return {
|
|
@@ -1320,8 +1354,12 @@ var XrpLedgerApp = class extends Xrp {
|
|
|
1320
1354
|
async getComputedAddresses(bip44s, hrp) {
|
|
1321
1355
|
return LedgerAddressHelper.getComputedAddresses(this, bip44s, hrp);
|
|
1322
1356
|
}
|
|
1357
|
+
async verifyActive() {
|
|
1358
|
+
await this.transportManager.close();
|
|
1359
|
+
await this.transportManager.verifyApp(this.appName);
|
|
1360
|
+
this.xrp = null;
|
|
1361
|
+
}
|
|
1323
1362
|
};
|
|
1324
|
-
|
|
1325
1363
|
//#endregion
|
|
1326
1364
|
//#region src/core/connectors/ledger/internal/ledger-app-factory.ts
|
|
1327
1365
|
const CHAIN_TO_APP = {
|
|
@@ -1340,18 +1378,18 @@ var LedgerAppFactory = class {
|
|
|
1340
1378
|
if (!apps?.length) throw new LedgerError("COMMON_CHAIN_NOT_SUPPORTED");
|
|
1341
1379
|
return apps[0];
|
|
1342
1380
|
}
|
|
1343
|
-
static createApp(chain,
|
|
1381
|
+
static async createApp(chain, transportManager) {
|
|
1344
1382
|
const validApps = CHAIN_TO_APP[chain];
|
|
1345
1383
|
if (!validApps?.length) throw new LedgerError("COMMON_CHAIN_NOT_SUPPORTED");
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
case "
|
|
1349
|
-
case "
|
|
1384
|
+
const appName = validApps[0];
|
|
1385
|
+
switch (appName) {
|
|
1386
|
+
case "XRP": return new XrpLedgerApp(transportManager, appName);
|
|
1387
|
+
case "Ethereum": return EthereumLedgerApp.create(transportManager, appName);
|
|
1388
|
+
case "Flare Network": return FlareLedgerApp.create(transportManager, appName);
|
|
1350
1389
|
case "Doge": throw new LedgerError("COMMON_CHAIN_NOT_SUPPORTED");
|
|
1351
1390
|
}
|
|
1352
1391
|
}
|
|
1353
1392
|
};
|
|
1354
|
-
|
|
1355
1393
|
//#endregion
|
|
1356
1394
|
//#region src/core/chains/viem/viem-helper.ts
|
|
1357
1395
|
var ViemHelper = class ViemHelper {
|
|
@@ -1395,7 +1433,6 @@ var ViemHelper = class ViemHelper {
|
|
|
1395
1433
|
};
|
|
1396
1434
|
}
|
|
1397
1435
|
};
|
|
1398
|
-
|
|
1399
1436
|
//#endregion
|
|
1400
1437
|
//#region src/core/clients/base-evm-client.ts
|
|
1401
1438
|
var BaseEvmClient = class {
|
|
@@ -1407,7 +1444,6 @@ var BaseEvmClient = class {
|
|
|
1407
1444
|
}
|
|
1408
1445
|
async onDestroy() {}
|
|
1409
1446
|
};
|
|
1410
|
-
|
|
1411
1447
|
//#endregion
|
|
1412
1448
|
//#region src/core/clients/evm/evm-client.ts
|
|
1413
1449
|
/**
|
|
@@ -1470,7 +1506,6 @@ var EvmClient = class EvmClient extends BaseEvmClient {
|
|
|
1470
1506
|
return this.chainConfig;
|
|
1471
1507
|
}
|
|
1472
1508
|
};
|
|
1473
|
-
|
|
1474
1509
|
//#endregion
|
|
1475
1510
|
//#region src/core/connectors/ledger/clients/ledger-evm-client.ts
|
|
1476
1511
|
var LedgerEvmClient = class LedgerEvmClient extends EvmClient {
|
|
@@ -1484,8 +1519,10 @@ var LedgerEvmClient = class LedgerEvmClient extends EvmClient {
|
|
|
1484
1519
|
getLedgerApp() {
|
|
1485
1520
|
return this._app;
|
|
1486
1521
|
}
|
|
1522
|
+
async verifyDevice() {
|
|
1523
|
+
await this._app.verifyActive();
|
|
1524
|
+
}
|
|
1487
1525
|
};
|
|
1488
|
-
|
|
1489
1526
|
//#endregion
|
|
1490
1527
|
//#region src/core/connectors/ledger/clients/ledger-xrp-client.ts
|
|
1491
1528
|
var LedgerXrpClient = class extends XrplClient {
|
|
@@ -1501,19 +1538,23 @@ var LedgerXrpClient = class extends XrplClient {
|
|
|
1501
1538
|
const path = this.args.bip44.getPathWithoutMaster();
|
|
1502
1539
|
return app.getAddress(path);
|
|
1503
1540
|
}
|
|
1541
|
+
async verifyDevice() {
|
|
1542
|
+
await this.getLedgerApp().verifyActive();
|
|
1543
|
+
}
|
|
1504
1544
|
async sendTx(tx) {
|
|
1505
1545
|
await this.ensureConnected();
|
|
1546
|
+
await this.verifyDevice();
|
|
1506
1547
|
const { publicKey } = await this.getAddressInfo();
|
|
1507
1548
|
const prepared = await this.autofill(tx);
|
|
1508
1549
|
prepared.SigningPubKey = publicKey.toUpperCase();
|
|
1509
|
-
const
|
|
1550
|
+
const unsignedBlob = encode(prepared);
|
|
1510
1551
|
const app = this.getLedgerApp();
|
|
1511
1552
|
const path = this.args.bip44.getPathWithoutMaster();
|
|
1512
|
-
prepared.TxnSignature = (await app.signTransaction(path,
|
|
1513
|
-
|
|
1553
|
+
prepared.TxnSignature = (await app.signTransaction(path, unsignedBlob)).toUpperCase();
|
|
1554
|
+
const signedBlob = encode(prepared);
|
|
1555
|
+
return (await this.submitAndWait(signedBlob)).result.hash;
|
|
1514
1556
|
}
|
|
1515
1557
|
};
|
|
1516
|
-
|
|
1517
1558
|
//#endregion
|
|
1518
1559
|
//#region src/core/connectors/ledger/internal/ledger-client-factory.ts
|
|
1519
1560
|
var LedgerClientFactory = class {
|
|
@@ -1538,7 +1579,6 @@ var LedgerClientFactory = class {
|
|
|
1538
1579
|
throw new LedgerError("COMMON_CHAIN_NOT_SUPPORTED");
|
|
1539
1580
|
}
|
|
1540
1581
|
};
|
|
1541
|
-
|
|
1542
1582
|
//#endregion
|
|
1543
1583
|
//#region src/core/storage/local-storage-manager.ts
|
|
1544
1584
|
var LocalStorageManager = class {
|
|
@@ -1587,7 +1627,6 @@ var LocalStorageManager = class {
|
|
|
1587
1627
|
keysToRemove.forEach((key) => localStorage.removeItem(key));
|
|
1588
1628
|
}
|
|
1589
1629
|
};
|
|
1590
|
-
|
|
1591
1630
|
//#endregion
|
|
1592
1631
|
//#region src/core/storage/local-storage-schema.ts
|
|
1593
1632
|
/**
|
|
@@ -1598,7 +1637,6 @@ const mwcStorage = new LocalStorageManager({
|
|
|
1598
1637
|
prefix: "mwc",
|
|
1599
1638
|
separator: ":"
|
|
1600
1639
|
});
|
|
1601
|
-
|
|
1602
1640
|
//#endregion
|
|
1603
1641
|
//#region src/core/connectors/ledger/internal/ledger-storage.ts
|
|
1604
1642
|
var LedgerStorage = class {
|
|
@@ -1631,7 +1669,6 @@ var LedgerStorage = class {
|
|
|
1631
1669
|
}
|
|
1632
1670
|
};
|
|
1633
1671
|
const ledgerStorage = new LedgerStorage(mwcStorage);
|
|
1634
|
-
|
|
1635
1672
|
//#endregion
|
|
1636
1673
|
//#region src/core/connectors/ledger/internal/ledger-session-manager.ts
|
|
1637
1674
|
var LedgerSessionManager = class {
|
|
@@ -1672,7 +1709,6 @@ var LedgerSessionManager = class {
|
|
|
1672
1709
|
ledgerStorage.clear();
|
|
1673
1710
|
}
|
|
1674
1711
|
};
|
|
1675
|
-
|
|
1676
1712
|
//#endregion
|
|
1677
1713
|
//#region src/core/connectors/ledger/internal/ledger-transport-manager.ts
|
|
1678
1714
|
var LedgerTransportManager = class {
|
|
@@ -1686,10 +1722,7 @@ var LedgerTransportManager = class {
|
|
|
1686
1722
|
return this.transport;
|
|
1687
1723
|
}
|
|
1688
1724
|
console.debug("[Ledger] TransportManager.open(): checking for connected device");
|
|
1689
|
-
|
|
1690
|
-
if (existing) console.debug("[Ledger] TransportManager.open(): found connected device");
|
|
1691
|
-
else console.debug("[Ledger] TransportManager.open(): creating new transport (will prompt user)");
|
|
1692
|
-
this.transport = existing ?? await TransportWebHID.create();
|
|
1725
|
+
this.transport = await this.openTransport();
|
|
1693
1726
|
this.attachDisconnectHandler();
|
|
1694
1727
|
console.debug("[Ledger] TransportManager.open(): transport ready");
|
|
1695
1728
|
return this.transport;
|
|
@@ -1747,11 +1780,31 @@ var LedgerTransportManager = class {
|
|
|
1747
1780
|
flags
|
|
1748
1781
|
};
|
|
1749
1782
|
}
|
|
1783
|
+
async openTransport() {
|
|
1784
|
+
try {
|
|
1785
|
+
const existing = await TransportWebHID.openConnected();
|
|
1786
|
+
if (existing) {
|
|
1787
|
+
console.debug("[Ledger] TransportManager.open(): found connected device");
|
|
1788
|
+
return existing;
|
|
1789
|
+
}
|
|
1790
|
+
} catch {
|
|
1791
|
+
console.debug("[Ledger] TransportManager.open(): stale device detected, requesting new connection");
|
|
1792
|
+
}
|
|
1793
|
+
console.debug("[Ledger] TransportManager.open(): creating new transport (will prompt user)");
|
|
1794
|
+
return await TransportWebHID.create();
|
|
1795
|
+
}
|
|
1796
|
+
async verifyApp(expectedAppName) {
|
|
1797
|
+
const { name } = await this.getCurrentApp();
|
|
1798
|
+
if (name !== expectedAppName) throw new LedgerError("LEDGER_WRONG_APP", /* @__PURE__ */ new Error(`Expected ${expectedAppName} app, currently running: ${name}`));
|
|
1799
|
+
}
|
|
1750
1800
|
async close() {
|
|
1751
1801
|
if (this.transport) {
|
|
1752
1802
|
console.debug("[Ledger] TransportManager.close(): closing transport");
|
|
1753
|
-
|
|
1754
|
-
|
|
1803
|
+
try {
|
|
1804
|
+
await this.transport.close();
|
|
1805
|
+
} finally {
|
|
1806
|
+
this.transport = null;
|
|
1807
|
+
}
|
|
1755
1808
|
console.debug("[Ledger] TransportManager.close(): transport closed");
|
|
1756
1809
|
}
|
|
1757
1810
|
}
|
|
@@ -1763,7 +1816,6 @@ var LedgerTransportManager = class {
|
|
|
1763
1816
|
if (this.transport && this.disconnectHandler) this.transport.on("disconnect", this.disconnectHandler);
|
|
1764
1817
|
}
|
|
1765
1818
|
};
|
|
1766
|
-
|
|
1767
1819
|
//#endregion
|
|
1768
1820
|
//#region src/core/connectors/ledger/ledger-connector.ts
|
|
1769
1821
|
var LedgerConnector = class extends BaseConnector {
|
|
@@ -1839,9 +1891,8 @@ var LedgerConnector = class extends BaseConnector {
|
|
|
1839
1891
|
throw new LedgerError("COMMON_FEATURE_NOT_SUPPORTED");
|
|
1840
1892
|
}
|
|
1841
1893
|
async fetchAddressesForSelection(chain, paths) {
|
|
1842
|
-
const transport = await this.transportManager.open();
|
|
1843
1894
|
await this.requireApp(chain);
|
|
1844
|
-
return LedgerAppFactory.createApp(chain,
|
|
1895
|
+
return (await LedgerAppFactory.createApp(chain, this.transportManager)).getComputedAddresses(paths, this.resolvedConfig.getChain(chain).ledgerHrp);
|
|
1845
1896
|
}
|
|
1846
1897
|
async performConnect(chain, options) {
|
|
1847
1898
|
console.debug("[Ledger] performConnect() started", {
|
|
@@ -1866,6 +1917,7 @@ var LedgerConnector = class extends BaseConnector {
|
|
|
1866
1917
|
console.debug("[Ledger] performConnect() completed", { address: account.address });
|
|
1867
1918
|
} catch (error) {
|
|
1868
1919
|
console.debug("[Ledger] performConnect() failed", error);
|
|
1920
|
+
await this.transportManager.close();
|
|
1869
1921
|
this.events.disconnected();
|
|
1870
1922
|
throw error;
|
|
1871
1923
|
}
|
|
@@ -1901,11 +1953,9 @@ var LedgerConnector = class extends BaseConnector {
|
|
|
1901
1953
|
async establishConnection(chain, options) {
|
|
1902
1954
|
console.debug("[Ledger] establishConnection() started", { chain });
|
|
1903
1955
|
try {
|
|
1904
|
-
const transport = await this.transportManager.open();
|
|
1905
|
-
console.debug("[Ledger] establishConnection(): transport opened");
|
|
1906
1956
|
await this.requireApp(chain);
|
|
1907
1957
|
console.debug("[Ledger] establishConnection(): app verified");
|
|
1908
|
-
const app = LedgerAppFactory.createApp(chain,
|
|
1958
|
+
const app = await LedgerAppFactory.createApp(chain, this.transportManager);
|
|
1909
1959
|
const hrp = this.resolvedConfig.getChain(chain).ledgerHrp;
|
|
1910
1960
|
const result = {
|
|
1911
1961
|
account: await app.getComputedAddress(options.bip44, hrp),
|
|
@@ -1928,13 +1978,11 @@ var LedgerConnector = class extends BaseConnector {
|
|
|
1928
1978
|
if (currentApp.name !== requiredApp) throw new LedgerError("LEDGER_WRONG_APP", /* @__PURE__ */ new Error(`Please open the ${requiredApp} app on your Ledger. Currently running: ${currentApp.name}`));
|
|
1929
1979
|
}
|
|
1930
1980
|
};
|
|
1931
|
-
|
|
1932
1981
|
//#endregion
|
|
1933
1982
|
//#region src/core/connectors/metamask/metamask-connector.ts
|
|
1934
1983
|
const RPC_ERROR = {
|
|
1935
1984
|
USER_REJECTED: 4001,
|
|
1936
|
-
REQUEST_PENDING: -32002
|
|
1937
|
-
CHAIN_NOT_ADDED: 4902
|
|
1985
|
+
REQUEST_PENDING: -32002
|
|
1938
1986
|
};
|
|
1939
1987
|
var MetaMaskConnector = class extends BaseConnector {
|
|
1940
1988
|
constructor(..._args) {
|
|
@@ -1942,14 +1990,20 @@ var MetaMaskConnector = class extends BaseConnector {
|
|
|
1942
1990
|
this.client = null;
|
|
1943
1991
|
}
|
|
1944
1992
|
async onInitialize() {
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1993
|
+
const supportedNetworks = {};
|
|
1994
|
+
for (const caip2 of this.resolvedConfig.getSupportedChains()) {
|
|
1995
|
+
if (!ChainGuards.isEvmCaip2(caip2)) continue;
|
|
1996
|
+
const chain = this.resolvedConfig.getEvmChain(caip2);
|
|
1997
|
+
supportedNetworks[chain.evmChain.hex] = chain.rpcUrls[0];
|
|
1998
|
+
}
|
|
1999
|
+
this.sdk = await createEVMClient({
|
|
2000
|
+
dapp: {
|
|
2001
|
+
name: this.config.metadata.name,
|
|
2002
|
+
url: this.config.metadata.url
|
|
2003
|
+
},
|
|
2004
|
+
api: { supportedNetworks }
|
|
2005
|
+
});
|
|
2006
|
+
this.provider = this.sdk.getProvider();
|
|
1953
2007
|
this.provider.on("accountsChanged", (accounts) => this.onAccountsChanged(accounts));
|
|
1954
2008
|
this.provider.on("chainChanged", (hex) => this.onChainChanged(hex));
|
|
1955
2009
|
this.provider.on("disconnect", () => {
|
|
@@ -1963,26 +2017,33 @@ var MetaMaskConnector = class extends BaseConnector {
|
|
|
1963
2017
|
if (this.getConnectionState() === "connecting") throw new MetaMaskError("COMMON_CONNECTION_IN_PROGRESS");
|
|
1964
2018
|
await this.initialize();
|
|
1965
2019
|
this.events.startConnecting();
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
2020
|
+
if (chain && !ChainGuards.isEvmCaip2(chain)) {
|
|
2021
|
+
this.events.disconnected();
|
|
2022
|
+
throw new MetaMaskError("COMMON_CHAIN_NOT_SUPPORTED");
|
|
2023
|
+
}
|
|
2024
|
+
const targetHex = chain ? this.resolvedConfig.getEvmChain(chain).evmChain.hex : void 0;
|
|
2025
|
+
let accounts;
|
|
2026
|
+
let chainId;
|
|
2027
|
+
const existingAccount = this.sdk.getAccount();
|
|
2028
|
+
const existingChainId = this.sdk.getChainId();
|
|
2029
|
+
if (existingAccount && existingChainId) {
|
|
2030
|
+
accounts = this.sdk.accounts;
|
|
2031
|
+
chainId = existingChainId;
|
|
2032
|
+
} else {
|
|
2033
|
+
const result = await this.sdk.connect(targetHex ? { chainIds: [targetHex] } : void 0).catch((error) => {
|
|
1969
2034
|
this.events.disconnected();
|
|
1970
2035
|
if (ChainUtils.isRpcErrorWithCode(error, RPC_ERROR.USER_REJECTED)) throw new MetaMaskError("COMMON_USER_REJECTED", error);
|
|
1971
2036
|
if (ChainUtils.isRpcErrorWithCode(error, RPC_ERROR.REQUEST_PENDING)) throw new MetaMaskError("COMMON_CONNECTION_IN_PROGRESS", error);
|
|
1972
2037
|
throw new MetaMaskError("COMMON_CONNECTION_FAILED", error);
|
|
1973
2038
|
});
|
|
1974
|
-
if (!
|
|
2039
|
+
if (!result.accounts.length) {
|
|
1975
2040
|
this.events.disconnected();
|
|
1976
2041
|
throw new MetaMaskError("COMMON_NO_ACCOUNTS");
|
|
1977
2042
|
}
|
|
1978
|
-
accounts =
|
|
1979
|
-
|
|
1980
|
-
if (chain && !ChainGuards.isEvmCaip2(chain)) {
|
|
1981
|
-
this.events.disconnected();
|
|
1982
|
-
throw new MetaMaskError("COMMON_CHAIN_NOT_SUPPORTED");
|
|
2043
|
+
accounts = result.accounts;
|
|
2044
|
+
chainId = result.chainId;
|
|
1983
2045
|
}
|
|
1984
|
-
const
|
|
1985
|
-
const currentChain = this.resolvedConfig.evmHexMap.get(hex);
|
|
2046
|
+
const currentChain = this.resolvedConfig.evmHexMap.get(chainId);
|
|
1986
2047
|
if (chain && currentChain !== chain) await this.switchChain(chain);
|
|
1987
2048
|
else if (!currentChain) {
|
|
1988
2049
|
this.events.disconnected();
|
|
@@ -1998,39 +2059,43 @@ var MetaMaskConnector = class extends BaseConnector {
|
|
|
1998
2059
|
}
|
|
1999
2060
|
async disconnect() {
|
|
2000
2061
|
this.events.startDisconnecting();
|
|
2001
|
-
if (this.initialized) await this.sdk.
|
|
2062
|
+
if (this.initialized) await this.sdk.disconnect();
|
|
2002
2063
|
this.client = null;
|
|
2003
|
-
this.resetInitialization();
|
|
2004
2064
|
this.events.disconnected();
|
|
2005
2065
|
}
|
|
2006
2066
|
async restoreConnection() {
|
|
2007
2067
|
if (this.getConnectionState() !== "disconnected") return;
|
|
2008
2068
|
await this.initialize();
|
|
2009
|
-
if (!this.provider) return;
|
|
2010
2069
|
if (this.getConnectionState() !== "disconnected") return;
|
|
2011
|
-
const
|
|
2012
|
-
if (
|
|
2013
|
-
const hex =
|
|
2070
|
+
const account = this.sdk.getAccount();
|
|
2071
|
+
if (!account) return;
|
|
2072
|
+
const hex = this.sdk.getChainId();
|
|
2073
|
+
if (!hex) return;
|
|
2014
2074
|
const caip2 = this.resolvedConfig.evmHexMap.get(hex);
|
|
2015
2075
|
if (!caip2) return;
|
|
2016
2076
|
this.createClient(caip2);
|
|
2017
2077
|
this.events.reconnected({
|
|
2018
|
-
address:
|
|
2019
|
-
addresses: accounts,
|
|
2078
|
+
address: account,
|
|
2079
|
+
addresses: this.sdk.accounts,
|
|
2020
2080
|
caip2
|
|
2021
2081
|
});
|
|
2022
2082
|
}
|
|
2023
2083
|
async switchChain(caip2) {
|
|
2024
2084
|
const chain = this.resolvedConfig.getEvmChain(caip2);
|
|
2025
2085
|
try {
|
|
2026
|
-
await this.
|
|
2027
|
-
|
|
2028
|
-
|
|
2086
|
+
await this.sdk.switchChain({
|
|
2087
|
+
chainId: chain.evmChain.hex,
|
|
2088
|
+
chainConfiguration: {
|
|
2089
|
+
chainId: chain.evmChain.hex,
|
|
2090
|
+
chainName: chain.name,
|
|
2091
|
+
nativeCurrency: chain.nativeCurrency,
|
|
2092
|
+
rpcUrls: chain.rpcUrls,
|
|
2093
|
+
blockExplorerUrls: chain.blockExplorerUrls
|
|
2094
|
+
}
|
|
2029
2095
|
});
|
|
2030
2096
|
} catch (error) {
|
|
2031
|
-
if (ChainUtils.isRpcErrorWithCode(error, RPC_ERROR.
|
|
2032
|
-
|
|
2033
|
-
else throw new MetaMaskError("COMMON_CHAIN_NOT_SUPPORTED", error);
|
|
2097
|
+
if (ChainUtils.isRpcErrorWithCode(error, RPC_ERROR.USER_REJECTED)) throw new MetaMaskError("COMMON_USER_REJECTED", error);
|
|
2098
|
+
throw new MetaMaskError("COMMON_CHAIN_NOT_SUPPORTED", error);
|
|
2034
2099
|
}
|
|
2035
2100
|
this.createClient(caip2);
|
|
2036
2101
|
}
|
|
@@ -2083,18 +2148,6 @@ var MetaMaskConnector = class extends BaseConnector {
|
|
|
2083
2148
|
createClient(caip2) {
|
|
2084
2149
|
this.client = EvmClient.create(this.resolvedConfig.getEvmChain(caip2), this.provider);
|
|
2085
2150
|
}
|
|
2086
|
-
async addChain(chain) {
|
|
2087
|
-
await this.provider.request({
|
|
2088
|
-
method: "wallet_addEthereumChain",
|
|
2089
|
-
params: [{
|
|
2090
|
-
chainId: chain.evmChain.hex,
|
|
2091
|
-
chainName: chain.name,
|
|
2092
|
-
nativeCurrency: chain.nativeCurrency,
|
|
2093
|
-
rpcUrls: chain.rpcUrls,
|
|
2094
|
-
blockExplorerUrls: chain.blockExplorerUrls
|
|
2095
|
-
}]
|
|
2096
|
-
});
|
|
2097
|
-
}
|
|
2098
2151
|
getConnectionState() {
|
|
2099
2152
|
return this.store.getSnapshot().context.connectionState;
|
|
2100
2153
|
}
|
|
@@ -2102,7 +2155,6 @@ var MetaMaskConnector = class extends BaseConnector {
|
|
|
2102
2155
|
return this.store.getSnapshot().context.caip2;
|
|
2103
2156
|
}
|
|
2104
2157
|
};
|
|
2105
|
-
|
|
2106
2158
|
//#endregion
|
|
2107
2159
|
//#region src/core/connectors/wallet-connect/clients/wallet-connect-evm-client.ts
|
|
2108
2160
|
/**
|
|
@@ -2125,7 +2177,6 @@ var WalletConnectEvmClient = class WalletConnectEvmClient extends EvmClient {
|
|
|
2125
2177
|
}));
|
|
2126
2178
|
}
|
|
2127
2179
|
};
|
|
2128
|
-
|
|
2129
2180
|
//#endregion
|
|
2130
2181
|
//#region src/core/connectors/wallet-connect/clients/wallet-connect-xrpl-client.ts
|
|
2131
2182
|
var WalletConnectXrpClient = class extends XrplClient {
|
|
@@ -2145,8 +2196,8 @@ var WalletConnectXrpClient = class extends XrplClient {
|
|
|
2145
2196
|
submit: false
|
|
2146
2197
|
}
|
|
2147
2198
|
}, xrpCaip2);
|
|
2148
|
-
const
|
|
2149
|
-
return (await this.submitAndWait(
|
|
2199
|
+
const signedBlob = encode(this.sanitizeTx(result.tx_json));
|
|
2200
|
+
return (await this.submitAndWait(signedBlob)).result.hash;
|
|
2150
2201
|
} finally {
|
|
2151
2202
|
await this.disconnect();
|
|
2152
2203
|
}
|
|
@@ -2169,11 +2220,10 @@ var WalletConnectXrpClient = class extends XrplClient {
|
|
|
2169
2220
|
});
|
|
2170
2221
|
return walletResult;
|
|
2171
2222
|
}
|
|
2172
|
-
isGirin(
|
|
2223
|
+
isGirin(_walletResult) {
|
|
2173
2224
|
return (this.provider.session?.peer.metadata.name ?? "unknown").toLowerCase().includes("girin");
|
|
2174
2225
|
}
|
|
2175
2226
|
};
|
|
2176
|
-
|
|
2177
2227
|
//#endregion
|
|
2178
2228
|
//#region src/core/connectors/wallet-connect/internal/wallet-connect-client-factory.ts
|
|
2179
2229
|
var WalletConnectClientFactory = class {
|
|
@@ -2190,7 +2240,6 @@ var WalletConnectClientFactory = class {
|
|
|
2190
2240
|
throw new WalletConnectError("COMMON_CHAIN_NOT_SUPPORTED");
|
|
2191
2241
|
}
|
|
2192
2242
|
};
|
|
2193
|
-
|
|
2194
2243
|
//#endregion
|
|
2195
2244
|
//#region src/core/connectors/wallet-connect/internal/wallet-connect-session-storage.ts
|
|
2196
2245
|
var SessionStorage = class {
|
|
@@ -2222,7 +2271,6 @@ var SessionStorage = class {
|
|
|
2222
2271
|
}
|
|
2223
2272
|
};
|
|
2224
2273
|
const sessionStorage = new SessionStorage(mwcStorage);
|
|
2225
|
-
|
|
2226
2274
|
//#endregion
|
|
2227
2275
|
//#region src/core/connectors/wallet-connect/internal/wallet-connect-session-manager.ts
|
|
2228
2276
|
var WalletConnectSessionManager = class {
|
|
@@ -2297,7 +2345,6 @@ var WalletConnectSessionManager = class {
|
|
|
2297
2345
|
return namespaces;
|
|
2298
2346
|
}
|
|
2299
2347
|
};
|
|
2300
|
-
|
|
2301
2348
|
//#endregion
|
|
2302
2349
|
//#region src/core/connectors/wallet-connect/wallet-connect-connector.ts
|
|
2303
2350
|
/**
|
|
@@ -2487,7 +2534,6 @@ var WalletConnectConnector = class extends BaseConnector {
|
|
|
2487
2534
|
return this.store.getSnapshot().context.caip2;
|
|
2488
2535
|
}
|
|
2489
2536
|
};
|
|
2490
|
-
|
|
2491
2537
|
//#endregion
|
|
2492
2538
|
//#region src/core/connectors/xaman/xaman-xrpl-client.ts
|
|
2493
2539
|
var XamanClient = class XamanClient extends Xumm {
|
|
@@ -2501,14 +2547,21 @@ var XamanClient = class XamanClient extends Xumm {
|
|
|
2501
2547
|
super(config.apiKey);
|
|
2502
2548
|
this.resolvedConfig = resolvedConfig;
|
|
2503
2549
|
}
|
|
2504
|
-
async sendTx(tx) {
|
|
2550
|
+
async sendTx(tx, sendTxOptions) {
|
|
2505
2551
|
if (!this.payload) throw new XamanError("XAMAN_SDK_NOT_READY");
|
|
2506
2552
|
const { reference } = parseCaip2(await this.getCaip2());
|
|
2507
2553
|
const networkKey = XamanClient.NETWORK_KEYS[reference];
|
|
2508
|
-
const
|
|
2554
|
+
const payload = {
|
|
2509
2555
|
txjson: { ...tx },
|
|
2510
|
-
options:
|
|
2511
|
-
|
|
2556
|
+
options: { ...sendTxOptions?.options },
|
|
2557
|
+
custom_meta: sendTxOptions?.custom_meta,
|
|
2558
|
+
user_token: sendTxOptions?.user_token
|
|
2559
|
+
};
|
|
2560
|
+
if (networkKey) payload.options = {
|
|
2561
|
+
force_network: networkKey,
|
|
2562
|
+
...payload.options
|
|
2563
|
+
};
|
|
2564
|
+
const subscription = await this.payload.createAndSubscribe(payload, (event) => "signed" in event.data ? event : void 0);
|
|
2512
2565
|
if (!subscription?.created) throw new XamanError("XAMAN_SDK_NOT_READY");
|
|
2513
2566
|
const txid = (await subscription.resolved)?.payload?.response?.txid;
|
|
2514
2567
|
if (!txid) throw new XamanError("XAMAN_SIGN_REJECTED");
|
|
@@ -2538,7 +2591,6 @@ var XamanClient = class XamanClient extends Xumm {
|
|
|
2538
2591
|
return `xrpl:${networkId}`;
|
|
2539
2592
|
}
|
|
2540
2593
|
};
|
|
2541
|
-
|
|
2542
2594
|
//#endregion
|
|
2543
2595
|
//#region src/core/connectors/xaman/xaman-connector.ts
|
|
2544
2596
|
var XamanConnector = class extends BaseConnector {
|
|
@@ -2624,7 +2676,6 @@ var XamanConnector = class extends BaseConnector {
|
|
|
2624
2676
|
return this.store.getSnapshot().context.caip2;
|
|
2625
2677
|
}
|
|
2626
2678
|
};
|
|
2627
|
-
|
|
2628
2679
|
//#endregion
|
|
2629
2680
|
//#region src/core/connectors/connector-factory.ts
|
|
2630
2681
|
const DEFAULT_METADATA = {
|
|
@@ -2667,7 +2718,6 @@ var ConnectorFactory = class {
|
|
|
2667
2718
|
}
|
|
2668
2719
|
}
|
|
2669
2720
|
};
|
|
2670
|
-
|
|
2671
2721
|
//#endregion
|
|
2672
2722
|
//#region src/core/stores/wallet-store/aggregate-wallet-store.ts
|
|
2673
2723
|
const createAggregateWalletStore = (stores) => {
|
|
@@ -2679,7 +2729,6 @@ const createAggregateWalletStore = (stores) => {
|
|
|
2679
2729
|
} }) }
|
|
2680
2730
|
});
|
|
2681
2731
|
};
|
|
2682
|
-
|
|
2683
2732
|
//#endregion
|
|
2684
2733
|
//#region src/core/stores/wallet-store/wallet-store.ts
|
|
2685
2734
|
const INITIAL_STATE = {
|
|
@@ -2781,7 +2830,6 @@ const createWalletStore = (walletType) => {
|
|
|
2781
2830
|
}
|
|
2782
2831
|
});
|
|
2783
2832
|
};
|
|
2784
|
-
|
|
2785
2833
|
//#endregion
|
|
2786
2834
|
//#region src/core/multichain/multichain.ts
|
|
2787
2835
|
var MultiChain = class {
|
|
@@ -2914,7 +2962,7 @@ var MultiChain = class {
|
|
|
2914
2962
|
this.subscriptions.push(store.subscribe(sync));
|
|
2915
2963
|
}
|
|
2916
2964
|
};
|
|
2917
|
-
|
|
2918
2965
|
//#endregion
|
|
2919
2966
|
export { objectFromEntries as _, WalletErrorHelper as a, shortenAddress as b, MetaMaskError as c, WalletError as d, ErrorCode as f, objectEntries as g, ChainGuards as h, DcentConnector as i, LedgerError as l, evmCaip2s as m, EvmClient as n, XamanError as o, ConfigResolver as p, Bip44 as r, WalletConnectError as s, MultiChain as t, DcentError as u, objectKeys as v, objectValues as y };
|
|
2920
|
-
|
|
2967
|
+
|
|
2968
|
+
//# sourceMappingURL=core-1pT9AVKV.mjs.map
|