@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.
@@ -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 { DisconnectedDevice, DisconnectedDeviceDuringOperation, LockedDeviceError, TransportInterfaceNotAvailable, TransportOpenUserCancelled, UserRefusedOnDevice } from "@ledgerhq/errors";
4
- import { Client, RippledError, encode, parseAccountRootFlags } from "xrpl";
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 { MetaMaskSDK } from "@metamask/sdk";
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
- METAMASK_PROVIDER_NOT_FOUND: "MetaMask provider not found",
479
- METAMASK_CHAIN_NOT_ADDED: "Chain is not added to MetaMask",
480
- METAMASK_NOT_INSTALLED: "MetaMask is not installed",
481
- LEDGER_DEVICE_LOCKED: "Ledger device is locked",
482
- LEDGER_APP_NOT_OPEN: "Please open the correct app on your Ledger",
483
- LEDGER_WRONG_APP: "Wrong app is open on Ledger device",
484
- LEDGER_TRANSPORT_ERROR: "Ledger transport error",
485
- LEDGER_CONNECTION_FAILED: "Failed to connect to Ledger device",
486
- LEDGER_TX_REJECTED: "Transaction rejected on Ledger device",
487
- WALLET_CONNECT_SESSION_EXPIRED: "WalletConnect session has expired",
488
- WALLET_CONNECT_PAIRING_FAILED: "WalletConnect pairing failed",
489
- WALLET_CONNECT_SESSION_NOT_FOUND: "WalletConnect session not found",
490
- WALLET_CONNECT_PROVIDER_NOT_INITIALIZED: "WalletConnect provider not initialized",
491
- XAMAN_SIGN_REJECTED: "Sign request rejected in Xaman",
492
- XAMAN_QR_TIMEOUT: "Xaman QR scan timed out",
493
- XAMAN_SDK_NOT_READY: "Xaman SDK is not ready",
494
- XAMAN_AUTHORIZATION_FAILED: "Xaman authorization failed",
495
- DCENT_NOT_IN_BROWSER: "D'CENT in-app browser not detected",
496
- DCENT_SIGN_REJECTED: "Transaction rejected in D'CENT wallet"
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 UserRefusedOnDevice,
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 MetaMask/Xaman (SDK terminates on disconnect).
770
- * WalletConnect should NOT call this — its provider survives disconnect.
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?.tx_hash) throw new DcentError("DCENT_SIGN_REJECTED");
864
- return result.tx_hash;
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 extends Xrp {
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, transport) {
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
- switch (validApps[0]) {
1347
- case "XRP": return new XrpLedgerApp(transport);
1348
- case "Ethereum": return new EthereumLedgerApp(transport);
1349
- case "Flare Network": return new FlareLedgerApp(transport);
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 blob = encode(prepared);
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, blob)).toUpperCase();
1513
- return (await this.submitAndWait(prepared)).result.hash;
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
- const existing = await TransportWebHID.openConnected();
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
- await this.transport.close();
1754
- this.transport = null;
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, transport).getComputedAddresses(paths, this.resolvedConfig.getChain(chain).ledgerHrp);
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, transport);
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
- this.sdk = new MetaMaskSDK({ dappMetadata: {
1946
- name: this.config.metadata.name,
1947
- url: this.config.metadata.url
1948
- } });
1949
- await this.sdk.sdkInitPromise;
1950
- const provider = this.sdk.getProvider();
1951
- if (!provider) throw new MetaMaskError("METAMASK_NOT_INSTALLED");
1952
- this.provider = provider;
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
- let accounts = await this.provider.request({ method: "eth_accounts" });
1967
- if (accounts.length === 0) {
1968
- const connected = await this.sdk.connect().catch((error) => {
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 (!connected?.length) {
2039
+ if (!result.accounts.length) {
1975
2040
  this.events.disconnected();
1976
2041
  throw new MetaMaskError("COMMON_NO_ACCOUNTS");
1977
2042
  }
1978
- accounts = connected;
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 hex = await this.provider.request({ method: "eth_chainId" });
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.terminate();
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 accounts = await this.provider.request({ method: "eth_accounts" });
2012
- if (accounts.length === 0 || this.getConnectionState() !== "disconnected") return;
2013
- const hex = await this.provider.request({ method: "eth_chainId" });
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: accounts[0],
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.provider.request({
2027
- method: "wallet_switchEthereumChain",
2028
- params: [{ chainId: chain.evmChain.hex }]
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.CHAIN_NOT_ADDED)) await this.addChain(chain);
2032
- else if (ChainUtils.isRpcErrorWithCode(error, RPC_ERROR.USER_REJECTED)) throw new MetaMaskError("COMMON_USER_REJECTED", error);
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 signedTx = this.sanitizeTx(result.tx_json);
2149
- return (await this.submitAndWait(signedTx)).result.hash;
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(walletResult) {
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 subscription = await this.payload.createAndSubscribe({
2554
+ const payload = {
2509
2555
  txjson: { ...tx },
2510
- options: networkKey ? { force_network: networkKey } : {}
2511
- }, (event) => "signed" in event.data ? event : void 0);
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
- //# sourceMappingURL=multichain-BZs-jPka.mjs.map
2967
+
2968
+ //# sourceMappingURL=core-1pT9AVKV.mjs.map