@tronweb3/tronwallet-adapter-trust 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/umd/index.js CHANGED
@@ -363,82 +363,7 @@
363
363
  return eventemitter3.exports;
364
364
  }
365
365
 
366
- var hasRequiredAdapter$2;
367
-
368
- function requireAdapter$2 () {
369
- if (hasRequiredAdapter$2) return adapter$1;
370
- hasRequiredAdapter$2 = 1;
371
- var __importDefault = (adapter$1 && adapter$1.__importDefault) || function (mod) {
372
- return (mod && mod.__esModule) ? mod : { "default": mod };
373
- };
374
- Object.defineProperty(adapter$1, "__esModule", { value: true });
375
- adapter$1.Adapter = adapter$1.AdapterState = adapter$1.WalletReadyState = adapter$1.EventEmitter = void 0;
376
- const eventemitter3_1 = __importDefault(requireEventemitter3());
377
- adapter$1.EventEmitter = eventemitter3_1.default;
378
- /**
379
- * Wallet ready state.
380
- */
381
- var WalletReadyState;
382
- (function (WalletReadyState) {
383
- /**
384
- * Adapter will start to check if wallet exists after adapter instance is created.
385
- */
386
- WalletReadyState["Loading"] = "Loading";
387
- /**
388
- * When checking ends and wallet is not found, readyState will be NotFound.
389
- */
390
- WalletReadyState["NotFound"] = "NotFound";
391
- /**
392
- * When checking ends and wallet is found, readyState will be Found.
393
- */
394
- WalletReadyState["Found"] = "Found";
395
- })(WalletReadyState || (adapter$1.WalletReadyState = WalletReadyState = {}));
396
- /**
397
- * Adapter state
398
- */
399
- var AdapterState;
400
- (function (AdapterState) {
401
- /**
402
- * If adapter is checking the wallet, the state is Loading.
403
- */
404
- AdapterState["Loading"] = "Loading";
405
- /**
406
- * If wallet is not installed, the state is NotFound.
407
- */
408
- AdapterState["NotFound"] = "NotFound";
409
- /**
410
- * If wallet is installed but is not connected to current Dapp, the state is Disconnected.
411
- */
412
- AdapterState["Disconnect"] = "Disconnected";
413
- /**
414
- * Wallet is connected to current Dapp.
415
- */
416
- AdapterState["Connected"] = "Connected";
417
- })(AdapterState || (adapter$1.AdapterState = AdapterState = {}));
418
- class Adapter extends eventemitter3_1.default {
419
- get connected() {
420
- return this.state === AdapterState.Connected;
421
- }
422
- /**
423
- * Some wallets such as TronLink don't support disconnect() method.
424
- */
425
- disconnect() {
426
- console.info("The current adapter doesn't support disconnect by DApp.");
427
- return Promise.resolve();
428
- }
429
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
430
- multiSign(...args) {
431
- return Promise.reject("The current wallet doesn't support multiSign.");
432
- }
433
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
434
- switchChain(_chainId) {
435
- return Promise.reject("The current wallet doesn't support switch chain.");
436
- }
437
- }
438
- adapter$1.Adapter = Adapter;
439
-
440
- return adapter$1;
441
- }
366
+ var typedData = {};
442
367
 
443
368
  var errors = {};
444
369
 
@@ -448,7 +373,7 @@
448
373
  if (hasRequiredErrors) return errors;
449
374
  hasRequiredErrors = 1;
450
375
  Object.defineProperty(errors, "__esModule", { value: true });
451
- errors.WalletGetNetworkError = errors.WalletSwitchChainError = errors.WalletWindowClosedError = errors.WalletWalletLoadError = errors.WalletSignTransactionError = errors.WalletSignMessageError = errors.WalletDisconnectionError = errors.WalletConnectionError = errors.WalletDisconnectedError = errors.WalletNotSelectedError = errors.WalletNotFoundError = errors.WalletError = void 0;
376
+ errors.WalletSignTypedDataError = errors.WalletGetNetworkError = errors.WalletSwitchChainError = errors.WalletWindowClosedError = errors.WalletWalletLoadError = errors.WalletSignTransactionError = errors.WalletSignMessageError = errors.WalletDisconnectionError = errors.WalletConnectionError = errors.WalletDisconnectedError = errors.WalletNotSelectedError = errors.WalletNotFoundError = errors.WalletError = void 0;
452
377
  class WalletError extends Error {
453
378
  constructor(message, error) {
454
379
  super(message);
@@ -460,10 +385,9 @@
460
385
  * Occurs when wallet is not installed.
461
386
  */
462
387
  class WalletNotFoundError extends WalletError {
463
- constructor() {
464
- super(...arguments);
388
+ constructor(message, error) {
389
+ super(message || 'The wallet is not found.', error);
465
390
  this.name = 'WalletNotFoundError';
466
- this.message = 'The wallet is not found.';
467
391
  }
468
392
  }
469
393
  errors.WalletNotFoundError = WalletNotFoundError;
@@ -544,10 +468,9 @@
544
468
  * Occurs when walletconnect QR window is closed.
545
469
  */
546
470
  class WalletWindowClosedError extends WalletError {
547
- constructor() {
548
- super(...arguments);
471
+ constructor(message, error) {
472
+ super(message || 'The QR window is closed.', error);
549
473
  this.name = 'WalletWindowClosedError';
550
- this.message = 'The QR window is closed.';
551
474
  }
552
475
  }
553
476
  errors.WalletWindowClosedError = WalletWindowClosedError;
@@ -571,10 +494,66 @@
571
494
  }
572
495
  }
573
496
  errors.WalletGetNetworkError = WalletGetNetworkError;
497
+ /**
498
+ * Occurs when call `signTypedData()`.
499
+ */
500
+ class WalletSignTypedDataError extends WalletError {
501
+ constructor() {
502
+ super(...arguments);
503
+ this.name = 'WalletSignTypedDataError';
504
+ }
505
+ }
506
+ errors.WalletSignTypedDataError = WalletSignTypedDataError;
574
507
 
575
508
  return errors;
576
509
  }
577
510
 
511
+ var hasRequiredTypedData;
512
+
513
+ function requireTypedData () {
514
+ if (hasRequiredTypedData) return typedData;
515
+ hasRequiredTypedData = 1;
516
+ Object.defineProperty(typedData, "__esModule", { value: true });
517
+ typedData.normalizeAndValidateTypedData = normalizeAndValidateTypedData;
518
+ const errors_js_1 = requireErrors();
519
+ function isPlainObject(value) {
520
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
521
+ }
522
+ /**
523
+ * Validate a TypedData payload and return a normalized copy safe to pass to wallets.
524
+ *
525
+ * Current normalization: convert `domain.chainId` from string to number (some wallets,
526
+ * e.g. TronLink, require a numeric chainId).
527
+ *
528
+ * Throws {@link WalletSignTypedDataError} if the payload is not a valid TypedData object.
529
+ */
530
+ function normalizeAndValidateTypedData(typedData) {
531
+ if (!isPlainObject(typedData)) {
532
+ throw new errors_js_1.WalletSignTypedDataError('typedData must be an object.');
533
+ }
534
+ if (!isPlainObject(typedData.domain)) {
535
+ throw new errors_js_1.WalletSignTypedDataError('typedData.domain must be an object.');
536
+ }
537
+ if (!isPlainObject(typedData.types)) {
538
+ throw new errors_js_1.WalletSignTypedDataError('typedData.types must be an object.');
539
+ }
540
+ if (!isPlainObject(typedData.message)) {
541
+ throw new errors_js_1.WalletSignTypedDataError('typedData.message must be an object.');
542
+ }
543
+ const { chainId } = typedData.domain;
544
+ if (typeof chainId === 'string') {
545
+ const parsed = Number(chainId);
546
+ if (!Number.isFinite(parsed)) {
547
+ throw new errors_js_1.WalletSignTypedDataError(`Invalid domain.chainId: ${chainId}.`);
548
+ }
549
+ return Object.assign(Object.assign({}, typedData), { domain: Object.assign(Object.assign({}, typedData.domain), { chainId: parsed }) });
550
+ }
551
+ return typedData;
552
+ }
553
+
554
+ return typedData;
555
+ }
556
+
578
557
  var types$1 = {};
579
558
 
580
559
  var hasRequiredTypes$1;
@@ -583,7 +562,47 @@
583
562
  if (hasRequiredTypes$1) return types$1;
584
563
  hasRequiredTypes$1 = 1;
585
564
  Object.defineProperty(types$1, "__esModule", { value: true });
586
- types$1.ChainNetwork = types$1.NetworkType = void 0;
565
+ types$1.TIP6963RequestProviderEventName = types$1.TIP6963AnnounceProviderEventName = types$1.ChainNetwork = types$1.NetworkType = types$1.AdapterState = types$1.WalletReadyState = void 0;
566
+ /**
567
+ * Wallet ready state.
568
+ */
569
+ var WalletReadyState;
570
+ (function (WalletReadyState) {
571
+ /**
572
+ * Adapter will start to check if wallet exists after adapter instance is created.
573
+ */
574
+ WalletReadyState["Loading"] = "Loading";
575
+ /**
576
+ * When checking ends and wallet is not found, readyState will be NotFound.
577
+ */
578
+ WalletReadyState["NotFound"] = "NotFound";
579
+ /**
580
+ * When checking ends and wallet is found, readyState will be Found.
581
+ */
582
+ WalletReadyState["Found"] = "Found";
583
+ })(WalletReadyState || (types$1.WalletReadyState = WalletReadyState = {}));
584
+ /**
585
+ * Adapter state
586
+ */
587
+ var AdapterState;
588
+ (function (AdapterState) {
589
+ /**
590
+ * If adapter is checking the wallet, the state is Loading.
591
+ */
592
+ AdapterState["Loading"] = "Loading";
593
+ /**
594
+ * If wallet is not installed, the state is NotFound.
595
+ */
596
+ AdapterState["NotFound"] = "NotFound";
597
+ /**
598
+ * If wallet is installed but is not connected to current Dapp, the state is Disconnected.
599
+ */
600
+ AdapterState["Disconnect"] = "Disconnected";
601
+ /**
602
+ * Wallet is connected to current Dapp.
603
+ */
604
+ AdapterState["Connected"] = "Connected";
605
+ })(AdapterState || (types$1.AdapterState = AdapterState = {}));
587
606
  var NetworkType;
588
607
  (function (NetworkType) {
589
608
  NetworkType["Mainnet"] = "Mainnet";
@@ -600,10 +619,65 @@
600
619
  ChainNetwork["Shasta"] = "Shasta";
601
620
  ChainNetwork["Nile"] = "Nile";
602
621
  })(ChainNetwork || (types$1.ChainNetwork = ChainNetwork = {}));
622
+ types$1.TIP6963AnnounceProviderEventName = 'TIP6963:announceProvider';
623
+ types$1.TIP6963RequestProviderEventName = 'TIP6963:requestProvider';
603
624
 
604
625
  return types$1;
605
626
  }
606
627
 
628
+ var hasRequiredAdapter$2;
629
+
630
+ function requireAdapter$2 () {
631
+ if (hasRequiredAdapter$2) return adapter$1;
632
+ hasRequiredAdapter$2 = 1;
633
+ var __importDefault = (adapter$1 && adapter$1.__importDefault) || function (mod) {
634
+ return (mod && mod.__esModule) ? mod : { "default": mod };
635
+ };
636
+ Object.defineProperty(adapter$1, "__esModule", { value: true });
637
+ adapter$1.Adapter = adapter$1.EventEmitter = void 0;
638
+ const eventemitter3_1 = __importDefault(requireEventemitter3());
639
+ adapter$1.EventEmitter = eventemitter3_1.default;
640
+ const typedData_js_1 = requireTypedData();
641
+ const types_js_1 = requireTypes$1();
642
+ class Adapter extends eventemitter3_1.default {
643
+ get connected() {
644
+ return this.state === types_js_1.AdapterState.Connected;
645
+ }
646
+ /**
647
+ * Some wallets such as TronLink don't support disconnect() method.
648
+ */
649
+ disconnect() {
650
+ console.info("The current adapter doesn't support disconnect by DApp.");
651
+ return Promise.resolve();
652
+ }
653
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
654
+ multiSign(transaction, options = {}) {
655
+ return Promise.reject("The current wallet doesn't support multiSign.");
656
+ }
657
+ signTypedData(typedData) {
658
+ let normalized;
659
+ try {
660
+ normalized = (0, typedData_js_1.normalizeAndValidateTypedData)(typedData);
661
+ }
662
+ catch (error) {
663
+ return Promise.reject(error);
664
+ }
665
+ return this._signTypedData(normalized);
666
+ }
667
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
668
+ _signTypedData(_typedData) {
669
+ return Promise.reject("The current wallet doesn't support signTypedData.");
670
+ }
671
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
672
+ switchChain(_chainId) {
673
+ return Promise.reject("The current wallet doesn't support switch chain.");
674
+ }
675
+ }
676
+ adapter$1.Adapter = Adapter;
677
+
678
+ return adapter$1;
679
+ }
680
+
607
681
  var utils$2 = {};
608
682
 
609
683
  var hasRequiredUtils$2;
@@ -666,12 +740,312 @@
666
740
  return utils$2;
667
741
  }
668
742
 
743
+ var addonAdapter = {};
744
+
745
+ var security = {};
746
+
747
+ var hasRequiredSecurity;
748
+
749
+ function requireSecurity () {
750
+ if (hasRequiredSecurity) return security;
751
+ hasRequiredSecurity = 1;
752
+ (function (exports$1) {
753
+ var __awaiter = (security && security.__awaiter) || function (thisArg, _arguments, P, generator) {
754
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
755
+ return new (P || (P = Promise))(function (resolve, reject) {
756
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
757
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
758
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
759
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
760
+ });
761
+ };
762
+ Object.defineProperty(exports$1, "__esModule", { value: true });
763
+ exports$1.defaultSecurityOptions = void 0;
764
+ exports$1.clearCache = clearCache;
765
+ exports$1.fetchJsonWithCache = fetchJsonWithCache;
766
+ exports$1.defaultSecurityOptions = {
767
+ onRiskDetected: (result) => __awaiter(void 0, void 0, void 0, function* () {
768
+ console.log(`[WalletAdapter] Risk detected:`, result);
769
+ }),
770
+ configUrls: [],
771
+ enabled: false,
772
+ timeout: 2000,
773
+ retries: 0,
774
+ cacheTTL: 10 * 60 * 1000,
775
+ };
776
+ function isValidRisk(risk) {
777
+ return (!!risk &&
778
+ typeof risk === 'object' &&
779
+ typeof risk.title === 'string' &&
780
+ risk.title.length > 0 &&
781
+ (risk.noticeType === 1 || risk.noticeType === 2 || risk.noticeType === 3));
782
+ }
783
+ function sanitizeRisk(risk) {
784
+ const clean = { title: risk.title, noticeType: risk.noticeType };
785
+ if (typeof risk.ext === 'string')
786
+ clean.ext = risk.ext;
787
+ if (typeof risk.ios === 'string')
788
+ clean.ios = risk.ios;
789
+ if (typeof risk.and === 'string')
790
+ clean.and = risk.and;
791
+ return clean;
792
+ }
793
+ /**
794
+ * Defensively coerce an arbitrary remote payload into a well-formed RiskConfig.
795
+ *
796
+ * The config comes from a remote URL, so a bad release (or a tampered response)
797
+ * must never break the connect flow. Anything malformed is dropped with a
798
+ * warning rather than thrown: `wallets` must be a record whose values are
799
+ * arrays, and each risk must have a non-empty string `title` and a `noticeType`
800
+ * of 1/2/3. Invalid entries are discarded so downstream merging/consumption
801
+ * only ever sees clean `Risk[]`.
802
+ */
803
+ function normalizeRiskConfig(data) {
804
+ const source = data && typeof data === 'object' ? data : {};
805
+ const wallets = {};
806
+ if (source.wallets && typeof source.wallets === 'object') {
807
+ for (const [walletName, rawRisks] of Object.entries(source.wallets)) {
808
+ if (!Array.isArray(rawRisks)) {
809
+ console.warn(`[WalletAdapter] Ignoring malformed risks for "${walletName}": expected an array, got ${typeof rawRisks}.`);
810
+ continue;
811
+ }
812
+ const validRisks = [];
813
+ for (const risk of rawRisks) {
814
+ if (isValidRisk(risk)) {
815
+ validRisks.push(sanitizeRisk(risk));
816
+ }
817
+ else {
818
+ console.warn(`[WalletAdapter] Dropping malformed risk entry for "${walletName}":`, risk);
819
+ }
820
+ }
821
+ if (validRisks.length > 0) {
822
+ wallets[walletName] = validRisks;
823
+ }
824
+ }
825
+ }
826
+ return {
827
+ v: typeof source.v === 'string' ? source.v : '',
828
+ ts: typeof source.ts === 'number' ? source.ts : 0,
829
+ wallets,
830
+ };
831
+ }
832
+ const _jsonCache = {};
833
+ function clearCache() {
834
+ Object.keys(_jsonCache).forEach((key) => {
835
+ Reflect.deleteProperty(_jsonCache, key);
836
+ });
837
+ }
838
+ function fetchJsonWithCache(options) {
839
+ return __awaiter(this, void 0, void 0, function* () {
840
+ const { configUrls = exports$1.defaultSecurityOptions.configUrls, timeout = exports$1.defaultSecurityOptions.timeout, retries = exports$1.defaultSecurityOptions.retries, onConfigFallback, cacheTTL = exports$1.defaultSecurityOptions.cacheTTL, } = options;
841
+ const now = Date.now();
842
+ function fetchOneUrl(url) {
843
+ return __awaiter(this, void 0, void 0, function* () {
844
+ const cache = _jsonCache[url];
845
+ if (cache && now - cache.timestamp < cacheTTL) {
846
+ return cache.data;
847
+ }
848
+ function fetchWithTimeout() {
849
+ return __awaiter(this, void 0, void 0, function* () {
850
+ return new Promise((resolve, reject) => {
851
+ const controller = new AbortController();
852
+ const timer = setTimeout(() => controller.abort(), timeout);
853
+ fetch(url, { signal: controller.signal })
854
+ .then((resp) => {
855
+ clearTimeout(timer);
856
+ if (!resp.ok)
857
+ reject(new Error('Fetch failed with code: ' + resp.status));
858
+ else
859
+ resp.json().then((data) => resolve(normalizeRiskConfig(data)), reject);
860
+ })
861
+ .catch((err) => {
862
+ clearTimeout(timer);
863
+ reject(err);
864
+ });
865
+ });
866
+ });
867
+ }
868
+ for (let i = 0; i <= retries; i++) {
869
+ try {
870
+ const data = yield fetchWithTimeout();
871
+ _jsonCache[url] = { data, timestamp: Date.now() };
872
+ return data;
873
+ }
874
+ catch (e) {
875
+ console.warn(`[WalletAdapter] Fetch attempt ${i + 1} for ${url} failed:`, e);
876
+ // continue to next retry
877
+ }
878
+ }
879
+ // All retries failed — let the outer caller decide (onConfigFallback or safe empty config)
880
+ return null;
881
+ });
882
+ }
883
+ const results = yield Promise.all(configUrls.map(fetchOneUrl));
884
+ const configs = results.filter((r) => r !== null);
885
+ if (configs.length > 0) {
886
+ return configs.reduce((merged, config) => {
887
+ var _a;
888
+ if (config.ts > merged.ts) {
889
+ merged.v = config.v;
890
+ merged.ts = config.ts;
891
+ }
892
+ // Pass every risk from every source through to the DApp without
893
+ // deduplication. Conflict resolution (highest severity wins, source
894
+ // weighting, etc.) is the DApp's responsibility — the adapter just
895
+ // delivers the union.
896
+ for (const [wallet, risks] of Object.entries(config.wallets)) {
897
+ merged.wallets[wallet] = [...((_a = merged.wallets[wallet]) !== null && _a !== void 0 ? _a : []), ...risks];
898
+ }
899
+ return merged;
900
+ }, { v: '', ts: 0, wallets: {} });
901
+ }
902
+ // All URLs failed with no cache — call custom fallback or default to safe (allow connection)
903
+ if (onConfigFallback) {
904
+ return normalizeRiskConfig(yield onConfigFallback());
905
+ }
906
+ return { v: '', ts: 0, wallets: {} };
907
+ });
908
+ }
909
+
910
+ } (security));
911
+ return security;
912
+ }
913
+
914
+ var hasRequiredAddonAdapter;
915
+
916
+ function requireAddonAdapter () {
917
+ if (hasRequiredAddonAdapter) return addonAdapter;
918
+ hasRequiredAddonAdapter = 1;
919
+ var __awaiter = (addonAdapter && addonAdapter.__awaiter) || function (thisArg, _arguments, P, generator) {
920
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
921
+ return new (P || (P = Promise))(function (resolve, reject) {
922
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
923
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
924
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
925
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
926
+ });
927
+ };
928
+ Object.defineProperty(addonAdapter, "__esModule", { value: true });
929
+ addonAdapter.AddonAdapter = void 0;
930
+ const adapter_js_1 = requireAdapter$2();
931
+ const errors_js_1 = requireErrors();
932
+ const security_js_1 = requireSecurity();
933
+ const types_js_1 = requireTypes$1();
934
+ const utils_js_1 = requireUtils$2();
935
+ /**
936
+ * Class to provide security check for wallets.
937
+ */
938
+ class AddonAdapter extends adapter_js_1.Adapter {
939
+ constructor(params) {
940
+ super();
941
+ this.commonConfig = {
942
+ checkTimeout: 2 * 1000,
943
+ openAppWithDeeplink: true,
944
+ openUrlWhenWalletNotFound: true,
945
+ securityOptions: security_js_1.defaultSecurityOptions,
946
+ };
947
+ this._securityCheckCache = null;
948
+ this.commonConfig = Object.assign(Object.assign({}, this.commonConfig), params);
949
+ if (typeof this.commonConfig.checkTimeout !== 'number') {
950
+ throw new Error(`[WalletAdapter] config.checkTimeout should be a number`);
951
+ }
952
+ AddonAdapter._validateSecurityOptions(this.commonConfig.securityOptions);
953
+ }
954
+ static _validateSecurityOptions(securityOptions) {
955
+ const { enabled, configUrls } = securityOptions;
956
+ if (enabled && (!configUrls || configUrls.length === 0)) {
957
+ throw new Error(`[WalletAdapter] config.securityOptions.configUrls is required when securityOptions.enabled is true`);
958
+ }
959
+ }
960
+ /**
961
+ * Update the security options at runtime. The given options are merged into
962
+ * the existing config, validated, and the cached security check result is
963
+ * cleared so the next connect runs a fresh check with the new configuration.
964
+ */
965
+ updateSecurityOptions(securityOptions) {
966
+ const merged = Object.assign(Object.assign({}, this.commonConfig.securityOptions), securityOptions);
967
+ AddonAdapter._validateSecurityOptions(merged);
968
+ this.commonConfig.securityOptions = merged;
969
+ this._securityCheckCache = null;
970
+ }
971
+ /**
972
+ * Run the pre-connect pipeline (wallet discovery, deeplink/url fallback,
973
+ * security check).
974
+ *
975
+ * @returns `true` when the caller should continue with the actual connect
976
+ * flow, `false` when the adapter is already connected/connecting and the
977
+ * caller should bail out. Throws `WalletNotFoundError` when the wallet
978
+ * cannot be found.
979
+ */
980
+ _beforeConnect() {
981
+ return __awaiter(this, void 0, void 0, function* () {
982
+ if (this.connected || this.connecting)
983
+ return false;
984
+ yield this._checkWallet();
985
+ if (this.readyState === types_js_1.WalletReadyState.NotFound) {
986
+ if ((0, utils_js_1.isInBrowser)() &&
987
+ !this._openAppByDeepLinkIfNeed() &&
988
+ this.commonConfig.openUrlWhenWalletNotFound !== false) {
989
+ window.open(this.url, '_blank');
990
+ }
991
+ throw new errors_js_1.WalletNotFoundError();
992
+ }
993
+ yield this.checkSecurity();
994
+ return true;
995
+ });
996
+ }
997
+ /**
998
+ * Fetch remote config and do risk check.
999
+ * In-flight calls share the same promise (so `onRiskDetected` fires at most
1000
+ * once even on a slow network). After the promise settles, the result is
1001
+ * cached for SECURITY_CHECK_CACHE_TTL; the next call after that window
1002
+ * runs a fresh check.
1003
+ */
1004
+ checkSecurity() {
1005
+ return __awaiter(this, void 0, void 0, function* () {
1006
+ if (!this.commonConfig.securityOptions.enabled)
1007
+ return;
1008
+ const cache = this._securityCheckCache;
1009
+ if (cache &&
1010
+ (cache.settledAt === null || Date.now() - cache.settledAt < AddonAdapter.SECURITY_CHECK_CACHE_TTL)) {
1011
+ return cache.promise;
1012
+ }
1013
+ const promise = (() => __awaiter(this, void 0, void 0, function* () {
1014
+ const result = yield (0, security_js_1.fetchJsonWithCache)(this.commonConfig.securityOptions);
1015
+ const risks = result.wallets[this.name];
1016
+ if (risks && risks.length > 0) {
1017
+ const callback = this.commonConfig.securityOptions.onRiskDetected || security_js_1.defaultSecurityOptions.onRiskDetected;
1018
+ yield callback({ risks });
1019
+ }
1020
+ }))();
1021
+ const entry = { promise, settledAt: null };
1022
+ this._securityCheckCache = entry;
1023
+ // The `.finally` chain returns a new promise that mirrors `promise`'s rejection.
1024
+ // Attach a noop `.catch` to avoid an unhandled rejection on that chain — the
1025
+ // original `promise` is still surfaced to callers via the return below.
1026
+ promise
1027
+ .finally(() => {
1028
+ if (this._securityCheckCache === entry) {
1029
+ entry.settledAt = Date.now();
1030
+ }
1031
+ })
1032
+ .catch(() => { });
1033
+ return promise;
1034
+ });
1035
+ }
1036
+ }
1037
+ addonAdapter.AddonAdapter = AddonAdapter;
1038
+ AddonAdapter.SECURITY_CHECK_CACHE_TTL = 5 * 1000;
1039
+
1040
+ return addonAdapter;
1041
+ }
1042
+
669
1043
  var hasRequiredCjs$2;
670
1044
 
671
1045
  function requireCjs$2 () {
672
1046
  if (hasRequiredCjs$2) return cjs$1;
673
1047
  hasRequiredCjs$2 = 1;
674
- (function (exports) {
1048
+ (function (exports$1) {
675
1049
  var __createBinding = (cjs$1 && cjs$1.__createBinding) || (Object.create ? (function(o, m, k, k2) {
676
1050
  if (k2 === undefined) k2 = k;
677
1051
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -683,14 +1057,17 @@
683
1057
  if (k2 === undefined) k2 = k;
684
1058
  o[k2] = m[k];
685
1059
  }));
686
- var __exportStar = (cjs$1 && cjs$1.__exportStar) || function(m, exports) {
687
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
1060
+ var __exportStar = (cjs$1 && cjs$1.__exportStar) || function(m, exports$1) {
1061
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports$1, p)) __createBinding(exports$1, m, p);
688
1062
  };
689
- Object.defineProperty(exports, "__esModule", { value: true });
690
- __exportStar(/*@__PURE__*/ requireAdapter$2(), exports);
691
- __exportStar(/*@__PURE__*/ requireErrors(), exports);
692
- __exportStar(/*@__PURE__*/ requireTypes$1(), exports);
693
- __exportStar(/*@__PURE__*/ requireUtils$2(), exports);
1063
+ Object.defineProperty(exports$1, "__esModule", { value: true });
1064
+ __exportStar(requireAdapter$2(), exports$1);
1065
+ __exportStar(requireErrors(), exports$1);
1066
+ __exportStar(requireTypes$1(), exports$1);
1067
+ __exportStar(requireTypedData(), exports$1);
1068
+ __exportStar(requireUtils$2(), exports$1);
1069
+ __exportStar(requireAddonAdapter(), exports$1);
1070
+ __exportStar(requireSecurity(), exports$1);
694
1071
 
695
1072
  } (cjs$1));
696
1073
  return cjs$1;
@@ -724,10 +1101,10 @@
724
1101
  utils$1.waitTronwebReady = waitTronwebReady;
725
1102
  const tronwallet_abstract_adapter_1 = /*@__PURE__*/ requireCjs$2();
726
1103
  function supportTron() {
727
- return !!(window.tron && window.tron.isTronLink);
1104
+ return (0, tronwallet_abstract_adapter_1.isInBrowser)() && !!(window.tron && window.tron.isTronLink);
728
1105
  }
729
1106
  function supportTronLink() {
730
- return !!(supportTron() || window.tronLink || window.tronWeb);
1107
+ return (0, tronwallet_abstract_adapter_1.isInBrowser)() && !!(supportTron() || window.tronLink || window.tronWeb);
731
1108
  }
732
1109
  /**
733
1110
  * Detect if in TronLinkApp
@@ -747,7 +1124,7 @@
747
1124
  defaultDappIcon = new URL(link.getAttribute('href') || '', location.href).toString();
748
1125
  }
749
1126
  }
750
- catch (e) {
1127
+ catch (_a) {
751
1128
  // console.error(e);
752
1129
  }
753
1130
  const { origin, pathname, search, hash } = window.location;
@@ -794,7 +1171,7 @@
794
1171
  function requireAdapter$1 () {
795
1172
  if (hasRequiredAdapter$1) return adapter;
796
1173
  hasRequiredAdapter$1 = 1;
797
- (function (exports) {
1174
+ (function (exports$1) {
798
1175
  var __awaiter = (adapter && adapter.__awaiter) || function (thisArg, _arguments, P, generator) {
799
1176
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
800
1177
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -804,12 +1181,12 @@
804
1181
  step((generator = generator.apply(thisArg, _arguments || [])).next());
805
1182
  });
806
1183
  };
807
- Object.defineProperty(exports, "__esModule", { value: true });
808
- exports.TronLinkAdapter = exports.TronLinkAdapterName = exports.chainIdNetworkMap = void 0;
809
- exports.getNetworkInfoByTronWeb = getNetworkInfoByTronWeb;
1184
+ Object.defineProperty(exports$1, "__esModule", { value: true });
1185
+ exports$1.TronLinkAdapter = exports$1.TronLinkAdapterName = exports$1.chainIdNetworkMap = void 0;
1186
+ exports$1.getNetworkInfoByTronWeb = getNetworkInfoByTronWeb;
810
1187
  const tronwallet_abstract_adapter_1 = /*@__PURE__*/ requireCjs$2();
811
- const utils_js_1 = /*@__PURE__*/ requireUtils$1();
812
- exports.chainIdNetworkMap = {
1188
+ const utils_js_1 = requireUtils$1();
1189
+ exports$1.chainIdNetworkMap = {
813
1190
  '0x2b6653dc': tronwallet_abstract_adapter_1.NetworkType.Mainnet,
814
1191
  '0x94a9059e': tronwallet_abstract_adapter_1.NetworkType.Shasta,
815
1192
  '0xcd8690dc': tronwallet_abstract_adapter_1.NetworkType.Nile,
@@ -820,7 +1197,7 @@
820
1197
  const { blockID = '' } = yield tronWeb.trx.getBlockByNumber(0);
821
1198
  const chainId = `0x${blockID.slice(-8)}`;
822
1199
  return {
823
- networkType: exports.chainIdNetworkMap[chainId] || tronwallet_abstract_adapter_1.NetworkType.Unknown,
1200
+ networkType: exports$1.chainIdNetworkMap[chainId] || tronwallet_abstract_adapter_1.NetworkType.Unknown,
824
1201
  chainId,
825
1202
  fullNode: ((_a = tronWeb.fullNode) === null || _a === void 0 ? void 0 : _a.host) || '',
826
1203
  solidityNode: ((_b = tronWeb.solidityNode) === null || _b === void 0 ? void 0 : _b.host) || '',
@@ -828,61 +1205,18 @@
828
1205
  };
829
1206
  });
830
1207
  }
831
- exports.TronLinkAdapterName = 'TronLink';
832
- class TronLinkAdapter extends tronwallet_abstract_adapter_1.Adapter {
1208
+ exports$1.TronLinkAdapterName = 'TronLink';
1209
+ class TronLinkAdapter extends tronwallet_abstract_adapter_1.AddonAdapter {
833
1210
  // record if first connect event has emitted or not
834
1211
  constructor(config = {}) {
835
- super();
836
- this.name = exports.TronLinkAdapterName;
1212
+ super(config);
1213
+ this.name = exports$1.TronLinkAdapterName;
837
1214
  this.url = 'https://www.tronlink.org/';
838
1215
  this.icon = 'data:image/png;base64,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';
839
1216
  this._readyState = (0, tronwallet_abstract_adapter_1.isInBrowser)() ? tronwallet_abstract_adapter_1.WalletReadyState.Loading : tronwallet_abstract_adapter_1.WalletReadyState.NotFound;
840
- this._state = tronwallet_abstract_adapter_1.AdapterState.Loading;
1217
+ this._state = (0, tronwallet_abstract_adapter_1.isInBrowser)() ? tronwallet_abstract_adapter_1.AdapterState.Loading : tronwallet_abstract_adapter_1.AdapterState.NotFound;
841
1218
  // https://github.com/tronprotocol/tips/blob/master/tip-1193.md
842
1219
  this._supportNewTronProtocol = false;
843
- this._tronLinkMessageHandler = (e) => {
844
- var _a, _b, _c, _d, _e;
845
- const message = (_a = e.data) === null || _a === void 0 ? void 0 : _a.message;
846
- if (!message) {
847
- return;
848
- }
849
- if (message.action === 'accountsChanged') {
850
- setTimeout(() => {
851
- var _a;
852
- const preAddr = this.address || '';
853
- if ((_a = this._wallet) === null || _a === void 0 ? void 0 : _a.ready) {
854
- const address = message.data.address;
855
- this.setAddress(address);
856
- this.setState(tronwallet_abstract_adapter_1.AdapterState.Connected);
857
- }
858
- else {
859
- this.setAddress(null);
860
- this.setState(tronwallet_abstract_adapter_1.AdapterState.Disconnect);
861
- }
862
- this.emit('accountsChanged', this.address || '', preAddr);
863
- if (!preAddr && this.address) {
864
- this.emit('connect', this.address);
865
- }
866
- else if (preAddr && !this.address) {
867
- this.emit('disconnect');
868
- }
869
- }, 200);
870
- }
871
- else if (message.action === 'setNode') {
872
- this.emit('chainChanged', { chainId: ((_c = (_b = message.data) === null || _b === void 0 ? void 0 : _b.node) === null || _c === void 0 ? void 0 : _c.chainId) || '' });
873
- }
874
- else if (message.action === 'connect') {
875
- const address = ((_e = (_d = this._wallet.tronWeb) === null || _d === void 0 ? void 0 : _d.defaultAddress) === null || _e === void 0 ? void 0 : _e.base58) || '';
876
- this.setAddress(address);
877
- this.setState(tronwallet_abstract_adapter_1.AdapterState.Connected);
878
- this.emit('connect', address);
879
- }
880
- else if (message.action === 'disconnect') {
881
- this.setAddress(null);
882
- this.setState(tronwallet_abstract_adapter_1.AdapterState.Disconnect);
883
- this.emit('disconnect');
884
- }
885
- };
886
1220
  this._onChainChanged = (data) => {
887
1221
  this.emit('chainChanged', data);
888
1222
  };
@@ -890,17 +1224,8 @@
890
1224
  var _a, _b, _c;
891
1225
  const preAddr = this.address || '';
892
1226
  const curAddr = (((_a = this._wallet) === null || _a === void 0 ? void 0 : _a.tronWeb) && ((_c = (_b = this._wallet) === null || _b === void 0 ? void 0 : _b.tronWeb.defaultAddress) === null || _c === void 0 ? void 0 : _c.base58)) || '';
893
- if (!curAddr) {
894
- // change to a new address and if it's disconnected, data will be empty
895
- // tronlink will emit accountsChanged many times, only process when connected
896
- this.setAddress(null);
897
- this.setState(tronwallet_abstract_adapter_1.AdapterState.Disconnect);
898
- }
899
- else {
900
- const address = curAddr;
901
- this.setAddress(address);
902
- this.setState(tronwallet_abstract_adapter_1.AdapterState.Connected);
903
- }
1227
+ this.setAddress(curAddr ? curAddr : null);
1228
+ this.setState(this.address ? tronwallet_abstract_adapter_1.AdapterState.Connected : tronwallet_abstract_adapter_1.AdapterState.Disconnect);
904
1229
  this.emit('accountsChanged', this.address || '', preAddr);
905
1230
  if (!preAddr && this.address) {
906
1231
  this.emit('connect', this.address);
@@ -910,8 +1235,9 @@
910
1235
  }
911
1236
  };
912
1237
  this._checkPromise = null;
913
- this._updateWallet = () => {
1238
+ this._updateWallet = () => __awaiter(this, void 0, void 0, function* () {
914
1239
  var _a, _b, _c, _d, _e, _f, _g, _h;
1240
+ this._supportNewTronProtocol = false;
915
1241
  let state = this.state;
916
1242
  let address = this.address;
917
1243
  if ((0, tronwallet_abstract_adapter_1.isInMobileBrowser)()) {
@@ -926,29 +1252,42 @@
926
1252
  };
927
1253
  }
928
1254
  address = ((_c = (_b = this._wallet.tronWeb) === null || _b === void 0 ? void 0 : _b.defaultAddress) === null || _c === void 0 ? void 0 : _c.base58) || null;
929
- state = address ? tronwallet_abstract_adapter_1.AdapterState.Connected : tronwallet_abstract_adapter_1.AdapterState.Disconnect;
1255
+ if (address) {
1256
+ // Only run the security check once the wallet is actually connected.
1257
+ try {
1258
+ yield this.checkSecurity();
1259
+ }
1260
+ catch (_j) {
1261
+ this.setAddress(null);
1262
+ this.setState(tronwallet_abstract_adapter_1.AdapterState.Disconnect);
1263
+ return;
1264
+ }
1265
+ state = tronwallet_abstract_adapter_1.AdapterState.Connected;
1266
+ }
1267
+ else {
1268
+ state = tronwallet_abstract_adapter_1.AdapterState.Disconnect;
1269
+ }
930
1270
  }
931
- else if (window.tron && window.tron.isTronLink) {
1271
+ else if (this.isLegacyTronLinkProvider(window.tron)) {
932
1272
  this._supportNewTronProtocol = true;
933
1273
  this._wallet = window.tron;
934
1274
  this._listenTronEvent();
935
- address = (this._wallet.tronWeb && ((_e = (_d = this._wallet.tronWeb) === null || _d === void 0 ? void 0 : _d.defaultAddress) === null || _e === void 0 ? void 0 : _e.base58)) || null;
936
- state = address ? tronwallet_abstract_adapter_1.AdapterState.Connected : tronwallet_abstract_adapter_1.AdapterState.Disconnect;
1275
+ try {
1276
+ address = (((_d = this._wallet) === null || _d === void 0 ? void 0 : _d.tronWeb) && ((_f = (_e = this._wallet.tronWeb) === null || _e === void 0 ? void 0 : _e.defaultAddress) === null || _f === void 0 ? void 0 : _f.base58)) || null;
1277
+ state = address ? tronwallet_abstract_adapter_1.AdapterState.Connected : tronwallet_abstract_adapter_1.AdapterState.Disconnect;
1278
+ }
1279
+ catch (e) {
1280
+ console.error('Unknown error: ' + e, ' Please install TronLink extension wallet.');
1281
+ address = null;
1282
+ state = tronwallet_abstract_adapter_1.AdapterState.Disconnect;
1283
+ this._readyState = tronwallet_abstract_adapter_1.WalletReadyState.NotFound;
1284
+ this.emit('readyStateChanged', this.readyState);
1285
+ return;
1286
+ }
937
1287
  }
938
1288
  else if (window.tronLink) {
939
1289
  this._wallet = window.tronLink;
940
- this._listenTronLinkEvent();
941
- address = ((_g = (_f = this._wallet.tronWeb) === null || _f === void 0 ? void 0 : _f.defaultAddress) === null || _g === void 0 ? void 0 : _g.base58) || null;
942
- state = this._wallet.ready ? tronwallet_abstract_adapter_1.AdapterState.Connected : tronwallet_abstract_adapter_1.AdapterState.Disconnect;
943
- }
944
- else if (window.tronWeb) {
945
- // fake tronLink
946
- this._wallet = {
947
- ready: window.tronWeb.ready,
948
- tronWeb: window.tronWeb,
949
- request: () => Promise.resolve(true),
950
- };
951
- address = ((_h = this._wallet.tronWeb.defaultAddress) === null || _h === void 0 ? void 0 : _h.base58) || null;
1290
+ address = ((_h = (_g = this._wallet.tronWeb) === null || _g === void 0 ? void 0 : _g.defaultAddress) === null || _h === void 0 ? void 0 : _h.base58) || null;
952
1291
  state = this._wallet.ready ? tronwallet_abstract_adapter_1.AdapterState.Connected : tronwallet_abstract_adapter_1.AdapterState.Disconnect;
953
1292
  }
954
1293
  else {
@@ -963,19 +1302,18 @@
963
1302
  }
964
1303
  this.setAddress(address);
965
1304
  this.setState(state);
966
- };
1305
+ });
967
1306
  this.checkReadyInterval = null;
968
- const { checkTimeout = 30 * 1000, dappIcon = '', dappName = '', openUrlWhenWalletNotFound = true, openTronLinkAppOnMobile = true, } = config;
1307
+ const { checkTimeout = 5 * 1000, dappIcon = '', dappName = '', openUrlWhenWalletNotFound = true, openTronLinkAppOnMobile = true, openAppWithDeeplink = true, } = config;
969
1308
  if (typeof checkTimeout !== 'number') {
970
1309
  throw new Error('[TronLinkAdapter] config.checkTimeout should be a number');
971
1310
  }
972
- this.config = {
973
- checkTimeout,
1311
+ this.config = Object.assign(Object.assign({}, this.commonConfig), { checkTimeout,
974
1312
  openTronLinkAppOnMobile,
1313
+ openAppWithDeeplink,
975
1314
  openUrlWhenWalletNotFound,
976
1315
  dappIcon,
977
- dappName,
978
- };
1316
+ dappName });
979
1317
  this._connecting = false;
980
1318
  this._wallet = null;
981
1319
  this._address = null;
@@ -984,9 +1322,20 @@
984
1322
  this.setState(tronwallet_abstract_adapter_1.AdapterState.NotFound);
985
1323
  return;
986
1324
  }
987
- if ((0, utils_js_1.supportTron)() || ((0, tronwallet_abstract_adapter_1.isInMobileBrowser)() && (window.tronLink || window.tronWeb))) {
1325
+ if (!(0, tronwallet_abstract_adapter_1.isInMobileBrowser)()) {
1326
+ this._checkWallet().then(() => {
1327
+ if (this.connected) {
1328
+ this.emit('connect', this.address || '');
1329
+ }
1330
+ });
1331
+ }
1332
+ else if ((0, utils_js_1.supportTron)() || ((0, tronwallet_abstract_adapter_1.isInMobileBrowser)() && (window.tronLink || window.tronWeb))) {
988
1333
  this._readyState = tronwallet_abstract_adapter_1.WalletReadyState.Found;
989
- this._updateWallet();
1334
+ this._updateWallet().then(() => {
1335
+ if (this.connected) {
1336
+ this.emit('connect', this.address || '');
1337
+ }
1338
+ });
990
1339
  }
991
1340
  else {
992
1341
  this._checkWallet().then(() => {
@@ -1039,16 +1388,8 @@
1039
1388
  return __awaiter(this, void 0, void 0, function* () {
1040
1389
  var _a, _b;
1041
1390
  try {
1042
- this.checkIfOpenTronLink();
1043
- if (this.connected || this.connecting)
1391
+ if (!(yield this._beforeConnect()))
1044
1392
  return;
1045
- yield this._checkWallet();
1046
- if (this.state === tronwallet_abstract_adapter_1.AdapterState.NotFound) {
1047
- if (this.config.openUrlWhenWalletNotFound !== false && (0, tronwallet_abstract_adapter_1.isInBrowser)()) {
1048
- window.open(this.url, '_blank');
1049
- }
1050
- throw new tronwallet_abstract_adapter_1.WalletNotFoundError();
1051
- }
1052
1393
  // lower version only support window.tronWeb, no window.tronLink
1053
1394
  if (!this._wallet)
1054
1395
  return;
@@ -1079,27 +1420,21 @@
1079
1420
  }
1080
1421
  else if (window.tronLink) {
1081
1422
  const wallet = this._wallet;
1082
- try {
1083
- const res = yield wallet.request({ method: 'tron_requestAccounts' });
1084
- if (!res) {
1085
- // 1. wallet is locked
1086
- // 2. tronlink is first installed and there is no wallet account
1087
- throw new tronwallet_abstract_adapter_1.WalletConnectionError('TronLink wallet is locked or no wallet account is avaliable.');
1088
- }
1089
- if (res.code === 4000) {
1090
- throw new tronwallet_abstract_adapter_1.WalletConnectionError('The same DApp has already initiated a request to connect to TronLink wallet, and the pop-up window has not been closed.');
1091
- }
1092
- if (res.code === 4001) {
1093
- throw new tronwallet_abstract_adapter_1.WalletConnectionError('The user rejected connection.');
1094
- }
1423
+ const res = yield wallet.request({ method: 'tron_requestAccounts' });
1424
+ if (!res) {
1425
+ // 1. wallet is locked
1426
+ // 2. tronlink is first installed and there is no wallet account
1427
+ throw new tronwallet_abstract_adapter_1.WalletConnectionError('TronLink wallet is locked or no wallet account is avaliable.');
1095
1428
  }
1096
- catch (error) {
1097
- throw new tronwallet_abstract_adapter_1.WalletConnectionError(error === null || error === void 0 ? void 0 : error.message, error);
1429
+ if (res.code === 4000) {
1430
+ throw new tronwallet_abstract_adapter_1.WalletConnectionError('The same DApp has already initiated a request to connect to TronLink wallet, and the pop-up window has not been closed.');
1431
+ }
1432
+ if (res.code === 4001) {
1433
+ throw new tronwallet_abstract_adapter_1.WalletConnectionError('The user rejected connection.');
1098
1434
  }
1099
1435
  const address = ((_a = wallet.tronWeb.defaultAddress) === null || _a === void 0 ? void 0 : _a.base58) || '';
1100
1436
  this.setAddress(address);
1101
1437
  this.setState(tronwallet_abstract_adapter_1.AdapterState.Connected);
1102
- this._listenTronLinkEvent();
1103
1438
  }
1104
1439
  else if (window.tronWeb) {
1105
1440
  const wallet = this._wallet;
@@ -1113,8 +1448,9 @@
1113
1448
  this.connected && this.emit('connect', this.address || '');
1114
1449
  }
1115
1450
  catch (error) {
1116
- this.emit('error', error);
1117
- throw error;
1451
+ const err = error instanceof tronwallet_abstract_adapter_1.WalletError ? error : new tronwallet_abstract_adapter_1.WalletConnectionError(error === null || error === void 0 ? void 0 : error.message, error);
1452
+ this.emit('error', err);
1453
+ throw err;
1118
1454
  }
1119
1455
  finally {
1120
1456
  this._connecting = false;
@@ -1126,9 +1462,6 @@
1126
1462
  if (this._supportNewTronProtocol) {
1127
1463
  this._stopListenTronEvent();
1128
1464
  }
1129
- else {
1130
- this._stopListenTronLinkEvent();
1131
- }
1132
1465
  if (this.state !== tronwallet_abstract_adapter_1.AdapterState.Connected) {
1133
1466
  return;
1134
1467
  }
@@ -1137,19 +1470,22 @@
1137
1470
  this.emit('disconnect');
1138
1471
  });
1139
1472
  }
1140
- signTransaction(transaction, privateKey) {
1473
+ _checkAndSign(action, ErrorConstructor) {
1141
1474
  return __awaiter(this, void 0, void 0, function* () {
1142
1475
  try {
1143
1476
  const wallet = yield this.checkAndGetWallet();
1144
1477
  try {
1145
- return yield wallet.tronWeb.trx.sign(transaction, privateKey);
1478
+ return yield action(wallet);
1146
1479
  }
1147
1480
  catch (error) {
1148
- if (error instanceof Error) {
1149
- throw new tronwallet_abstract_adapter_1.WalletSignTransactionError(error.message, error);
1481
+ if (error instanceof Error || (typeof error === 'object' && error.message)) {
1482
+ throw new ErrorConstructor(error.message, error);
1483
+ }
1484
+ else if (typeof error === 'string') {
1485
+ throw new ErrorConstructor(error, new Error(error));
1150
1486
  }
1151
1487
  else {
1152
- throw new tronwallet_abstract_adapter_1.WalletSignTransactionError(error, new Error(error));
1488
+ throw new ErrorConstructor('Unknown error', error);
1153
1489
  }
1154
1490
  }
1155
1491
  }
@@ -1159,48 +1495,32 @@
1159
1495
  }
1160
1496
  });
1161
1497
  }
1162
- multiSign(transaction, privateKey, permissionId) {
1498
+ signTransaction(transaction) {
1163
1499
  return __awaiter(this, void 0, void 0, function* () {
1164
- try {
1165
- const wallet = yield this.checkAndGetWallet();
1166
- try {
1167
- return yield wallet.tronWeb.trx.multiSign(transaction, privateKey, permissionId);
1168
- }
1169
- catch (error) {
1170
- if (error instanceof Error) {
1171
- throw new tronwallet_abstract_adapter_1.WalletSignTransactionError(error.message, error);
1172
- }
1173
- else {
1174
- throw new tronwallet_abstract_adapter_1.WalletSignTransactionError(error, new Error(error));
1175
- }
1176
- }
1177
- }
1178
- catch (error) {
1179
- this.emit('error', error);
1180
- throw error;
1181
- }
1500
+ return this._checkAndSign((wallet) => wallet.tronWeb.trx.sign(transaction), tronwallet_abstract_adapter_1.WalletSignTransactionError);
1501
+ });
1502
+ }
1503
+ /**
1504
+ *
1505
+ * @param transaction transaction to be signed
1506
+ * @param _, false to use tronWeb.trx.multiSign
1507
+ * @param permissionId permissionId for multiSign
1508
+ * @returns
1509
+ */
1510
+ multiSign(transaction_1) {
1511
+ return __awaiter(this, arguments, void 0, function* (transaction, options = {}) {
1512
+ // multiSign is a transaction signing operation, so it uses WalletSignTransactionError
1513
+ return this._checkAndSign((wallet) => wallet.tronWeb.trx.multiSign(transaction, undefined, options.permissionId), tronwallet_abstract_adapter_1.WalletSignTransactionError);
1182
1514
  });
1183
1515
  }
1184
- signMessage(message, privateKey) {
1516
+ signMessage(message) {
1185
1517
  return __awaiter(this, void 0, void 0, function* () {
1186
- try {
1187
- const wallet = yield this.checkAndGetWallet();
1188
- try {
1189
- return yield wallet.tronWeb.trx.signMessageV2(message, privateKey);
1190
- }
1191
- catch (error) {
1192
- if (error instanceof Error) {
1193
- throw new tronwallet_abstract_adapter_1.WalletSignMessageError(error.message, error);
1194
- }
1195
- else {
1196
- throw new tronwallet_abstract_adapter_1.WalletSignMessageError(error, new Error(error));
1197
- }
1198
- }
1199
- }
1200
- catch (error) {
1201
- this.emit('error', error);
1202
- throw error;
1203
- }
1518
+ return this._checkAndSign((wallet) => __awaiter(this, void 0, void 0, function* () { return wallet.tronWeb.trx.signMessageV2(message); }), tronwallet_abstract_adapter_1.WalletSignMessageError);
1519
+ });
1520
+ }
1521
+ _signTypedData(typedData) {
1522
+ return __awaiter(this, void 0, void 0, function* () {
1523
+ return this._checkAndSign((wallet) => __awaiter(this, void 0, void 0, function* () { return wallet.tronWeb.trx._signTypedData(typedData.domain, typedData.types, typedData.message); }), tronwallet_abstract_adapter_1.WalletSignTypedDataError);
1204
1524
  });
1205
1525
  }
1206
1526
  /**
@@ -1243,7 +1563,9 @@
1243
1563
  }
1244
1564
  checkAndGetWallet() {
1245
1565
  return __awaiter(this, void 0, void 0, function* () {
1246
- this.checkIfOpenTronLink();
1566
+ if (this._openAppByDeepLinkIfNeed()) {
1567
+ throw new tronwallet_abstract_adapter_1.WalletNotFoundError();
1568
+ }
1247
1569
  yield this._checkWallet();
1248
1570
  if (this.state !== tronwallet_abstract_adapter_1.AdapterState.Connected)
1249
1571
  throw new tronwallet_abstract_adapter_1.WalletDisconnectedError();
@@ -1253,34 +1575,32 @@
1253
1575
  return wallet;
1254
1576
  });
1255
1577
  }
1256
- _listenTronLinkEvent() {
1257
- this._stopListenTronLinkEvent();
1258
- window.addEventListener('message', this._tronLinkMessageHandler);
1259
- }
1260
- _stopListenTronLinkEvent() {
1261
- window.removeEventListener('message', this._tronLinkMessageHandler);
1262
- }
1263
- checkIfOpenTronLink() {
1264
- const { dappName = '', dappIcon = '' } = this.config;
1265
- if (this.config.openTronLinkAppOnMobile === false) {
1266
- return;
1267
- }
1268
- if ((0, utils_js_1.openTronLink)({ dappIcon, dappName })) {
1269
- throw new tronwallet_abstract_adapter_1.WalletNotFoundError();
1578
+ _openAppByDeepLinkIfNeed() {
1579
+ if (this.config.openAppWithDeeplink === false || this.config.openTronLinkAppOnMobile === false) {
1580
+ return false;
1270
1581
  }
1582
+ const { dappName = '', dappIcon = '' } = this.config;
1583
+ return (0, utils_js_1.openTronLink)({ dappIcon, dappName });
1271
1584
  }
1272
1585
  // following code is for TIP-1193
1273
1586
  _listenTronEvent() {
1587
+ var _a, _b;
1274
1588
  this._stopListenTronEvent();
1275
- this._stopListenTronLinkEvent();
1276
1589
  const wallet = this._wallet;
1277
- wallet.on('chainChanged', this._onChainChanged);
1278
- wallet.on('accountsChanged', this._onAccountsChanged);
1590
+ (_a = wallet.on) === null || _a === void 0 ? void 0 : _a.call(wallet, 'chainChanged', this._onChainChanged);
1591
+ (_b = wallet.on) === null || _b === void 0 ? void 0 : _b.call(wallet, 'accountsChanged', this._onAccountsChanged);
1279
1592
  }
1280
1593
  _stopListenTronEvent() {
1594
+ var _a, _b;
1281
1595
  const wallet = this._wallet;
1282
- wallet.removeListener('chainChanged', this._onChainChanged);
1283
- wallet.removeListener('accountsChanged', this._onAccountsChanged);
1596
+ (_a = wallet.removeListener) === null || _a === void 0 ? void 0 : _a.call(wallet, 'chainChanged', this._onChainChanged);
1597
+ (_b = wallet.removeListener) === null || _b === void 0 ? void 0 : _b.call(wallet, 'accountsChanged', this._onAccountsChanged);
1598
+ }
1599
+ isLegacyTronLinkProvider(provider) {
1600
+ return !!(provider === null || provider === void 0 ? void 0 : provider.isTronLink);
1601
+ }
1602
+ hasDesktopLegacyTronLinkProvider() {
1603
+ return this.isLegacyTronLinkProvider(window.tron) || !!window.tronLink;
1284
1604
  }
1285
1605
  /**
1286
1606
  * check if wallet exists by interval, the promise only resolve when wallet detected or timeout
@@ -1293,18 +1613,89 @@
1293
1613
  if (this._checkPromise) {
1294
1614
  return this._checkPromise;
1295
1615
  }
1616
+ if ((0, tronwallet_abstract_adapter_1.isInBrowser)() && !(0, tronwallet_abstract_adapter_1.isInMobileBrowser)()) {
1617
+ // Desktop: use TIP-6963 event-based discovery with fallback
1618
+ this._checkPromise = new Promise((resolve) => {
1619
+ let handled = false;
1620
+ let timer = null;
1621
+ let handler = null;
1622
+ const cleanupDesktopDetection = () => {
1623
+ if (timer) {
1624
+ clearTimeout(timer);
1625
+ timer = null;
1626
+ }
1627
+ if (typeof window !== 'undefined' && handler) {
1628
+ window.removeEventListener(tronwallet_abstract_adapter_1.TIP6963AnnounceProviderEventName, handler);
1629
+ }
1630
+ };
1631
+ const finishWithLegacyDetection = () => {
1632
+ if (handled) {
1633
+ return;
1634
+ }
1635
+ handled = true;
1636
+ cleanupDesktopDetection();
1637
+ if (typeof window === 'undefined') {
1638
+ resolve(false);
1639
+ return;
1640
+ }
1641
+ // Fallback to legacy detection
1642
+ this._updateWallet();
1643
+ const isSupport = this.state !== tronwallet_abstract_adapter_1.AdapterState.NotFound;
1644
+ this._readyState = isSupport ? tronwallet_abstract_adapter_1.WalletReadyState.Found : tronwallet_abstract_adapter_1.WalletReadyState.NotFound;
1645
+ this.emit('readyStateChanged', this._readyState);
1646
+ resolve(isSupport);
1647
+ };
1648
+ timer = setTimeout(finishWithLegacyDetection, this.config.checkTimeout);
1649
+ handler = (event) => __awaiter(this, void 0, void 0, function* () {
1650
+ var _a, _b;
1651
+ if (handled) {
1652
+ return;
1653
+ }
1654
+ const { info, provider } = event.detail;
1655
+ const isTronLinkProvider = info.name === 'TronLink';
1656
+ if (isTronLinkProvider) {
1657
+ handled = true;
1658
+ this._supportNewTronProtocol = true;
1659
+ this._wallet = provider;
1660
+ try {
1661
+ yield this.checkSecurity();
1662
+ }
1663
+ catch (_c) {
1664
+ this.setAddress(null);
1665
+ this.setState(tronwallet_abstract_adapter_1.AdapterState.Disconnect);
1666
+ this._readyState = tronwallet_abstract_adapter_1.WalletReadyState.Found;
1667
+ this.emit('readyStateChanged', this.readyState);
1668
+ resolve(true);
1669
+ return;
1670
+ }
1671
+ this._listenTronEvent();
1672
+ this._readyState = tronwallet_abstract_adapter_1.WalletReadyState.Found;
1673
+ const address = (((_a = this._wallet) === null || _a === void 0 ? void 0 : _a.tronWeb) && ((_b = this._wallet.tronWeb.defaultAddress) === null || _b === void 0 ? void 0 : _b.base58)) || null;
1674
+ const state = address ? tronwallet_abstract_adapter_1.AdapterState.Connected : tronwallet_abstract_adapter_1.AdapterState.Disconnect;
1675
+ this.setAddress(address);
1676
+ this.setState(state);
1677
+ this.emit('readyStateChanged', this.readyState);
1678
+ cleanupDesktopDetection();
1679
+ resolve(true);
1680
+ }
1681
+ });
1682
+ window.addEventListener(tronwallet_abstract_adapter_1.TIP6963AnnounceProviderEventName, handler);
1683
+ window.dispatchEvent(new Event(tronwallet_abstract_adapter_1.TIP6963RequestProviderEventName));
1684
+ });
1685
+ return this._checkPromise;
1686
+ }
1687
+ // Mobile: use legacy polling detection
1296
1688
  const interval = 100;
1297
- const checkTronTimes = Math.floor(2000 / interval);
1298
1689
  const maxTimes = Math.floor(this.config.checkTimeout / interval);
1299
1690
  let times = 0, timer;
1300
1691
  this._checkPromise = new Promise((resolve) => {
1301
1692
  const check = () => {
1302
1693
  times++;
1303
- const isSupport = times < checkTronTimes && !(0, tronwallet_abstract_adapter_1.isInMobileBrowser)() ? (0, utils_js_1.supportTron)() : (0, utils_js_1.supportTronLink)();
1694
+ this._updateWallet();
1695
+ const isSupport = !!((0, tronwallet_abstract_adapter_1.isInMobileBrowser)() && (window.tronLink || window.tronWeb));
1304
1696
  if (isSupport || times > maxTimes) {
1305
1697
  timer && clearInterval(timer);
1306
1698
  this._readyState = isSupport ? tronwallet_abstract_adapter_1.WalletReadyState.Found : tronwallet_abstract_adapter_1.WalletReadyState.NotFound;
1307
- this._updateWallet();
1308
1699
  this.emit('readyStateChanged', this.readyState);
1309
1700
  resolve(isSupport);
1310
1701
  }
@@ -1349,7 +1740,7 @@
1349
1740
  }
1350
1741
  }
1351
1742
  }
1352
- exports.TronLinkAdapter = TronLinkAdapter;
1743
+ exports$1.TronLinkAdapter = TronLinkAdapter;
1353
1744
 
1354
1745
  } (adapter));
1355
1746
  return adapter;
@@ -1372,7 +1763,7 @@
1372
1763
  function requireCjs$1 () {
1373
1764
  if (hasRequiredCjs$1) return cjs;
1374
1765
  hasRequiredCjs$1 = 1;
1375
- (function (exports) {
1766
+ (function (exports$1) {
1376
1767
  var __createBinding = (cjs && cjs.__createBinding) || (Object.create ? (function(o, m, k, k2) {
1377
1768
  if (k2 === undefined) k2 = k;
1378
1769
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -1384,13 +1775,13 @@
1384
1775
  if (k2 === undefined) k2 = k;
1385
1776
  o[k2] = m[k];
1386
1777
  }));
1387
- var __exportStar = (cjs && cjs.__exportStar) || function(m, exports) {
1388
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
1778
+ var __exportStar = (cjs && cjs.__exportStar) || function(m, exports$1) {
1779
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports$1, p)) __createBinding(exports$1, m, p);
1389
1780
  };
1390
- Object.defineProperty(exports, "__esModule", { value: true });
1391
- __exportStar(/*@__PURE__*/ requireAdapter$1(), exports);
1392
- __exportStar(/*@__PURE__*/ requireTypes(), exports);
1393
- __exportStar(/*@__PURE__*/ requireUtils$1(), exports);
1781
+ Object.defineProperty(exports$1, "__esModule", { value: true });
1782
+ __exportStar(requireAdapter$1(), exports$1);
1783
+ __exportStar(requireTypes(), exports$1);
1784
+ __exportStar(requireUtils$1(), exports$1);
1394
1785
 
1395
1786
  } (cjs));
1396
1787
  return cjs;
@@ -1403,11 +1794,11 @@
1403
1794
  function requireUtils () {
1404
1795
  if (hasRequiredUtils) return utils;
1405
1796
  hasRequiredUtils = 1;
1406
- (function (exports) {
1407
- Object.defineProperty(exports, "__esModule", { value: true });
1408
- exports.isTrustApp = void 0;
1409
- exports.supportTrust = supportTrust;
1410
- exports.openTrustWallet = openTrustWallet;
1797
+ (function (exports$1) {
1798
+ Object.defineProperty(exports$1, "__esModule", { value: true });
1799
+ exports$1.isTrustApp = void 0;
1800
+ exports$1.supportTrust = supportTrust;
1801
+ exports$1.openTrustWallet = openTrustWallet;
1411
1802
  const tronwallet_abstract_adapter_1 = /*@__PURE__*/ requireCjs$2();
1412
1803
  function supportTrust() {
1413
1804
  return typeof window !== 'undefined' && !!(window.trustwallet && window.trustwallet.tronLink);
@@ -1418,9 +1809,9 @@
1418
1809
  }
1419
1810
  return false;
1420
1811
  };
1421
- exports.isTrustApp = isTrustApp;
1812
+ exports$1.isTrustApp = isTrustApp;
1422
1813
  function openTrustWallet() {
1423
- if (!(0, exports.isTrustApp)() && (0, tronwallet_abstract_adapter_1.isInMobileBrowser)()) {
1814
+ if (!(0, exports$1.isTrustApp)() && (0, tronwallet_abstract_adapter_1.isInMobileBrowser)()) {
1424
1815
  window.location.href = 'https://link.trustwallet.com/open_url?url=' + encodeURIComponent(window.location.href);
1425
1816
  return true;
1426
1817
  }
@@ -1436,7 +1827,7 @@
1436
1827
  function requireAdapter () {
1437
1828
  if (hasRequiredAdapter) return adapter$2;
1438
1829
  hasRequiredAdapter = 1;
1439
- (function (exports) {
1830
+ (function (exports$1) {
1440
1831
  var __awaiter = (adapter$2 && adapter$2.__awaiter) || function (thisArg, _arguments, P, generator) {
1441
1832
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1442
1833
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -1446,31 +1837,40 @@
1446
1837
  step((generator = generator.apply(thisArg, _arguments || [])).next());
1447
1838
  });
1448
1839
  };
1449
- Object.defineProperty(exports, "__esModule", { value: true });
1450
- exports.TrustAdapter = exports.TrustAdapterName = void 0;
1840
+ Object.defineProperty(exports$1, "__esModule", { value: true });
1841
+ exports$1.TrustAdapter = exports$1.TrustAdapterName = void 0;
1451
1842
  const tronwallet_abstract_adapter_1 = /*@__PURE__*/ requireCjs$2();
1452
1843
  const tronwallet_adapter_tronlink_1 = /*@__PURE__*/ requireCjs$1();
1453
- const utils_js_1 = /*@__PURE__*/ requireUtils();
1454
- exports.TrustAdapterName = 'Trust';
1455
- class TrustAdapter extends tronwallet_abstract_adapter_1.Adapter {
1844
+ const utils_js_1 = requireUtils();
1845
+ exports$1.TrustAdapterName = 'Trust';
1846
+ class TrustAdapter extends tronwallet_abstract_adapter_1.AddonAdapter {
1456
1847
  constructor(config = {}) {
1457
- super();
1458
- this.name = exports.TrustAdapterName;
1848
+ super(config);
1849
+ this.name = exports$1.TrustAdapterName;
1459
1850
  this.url = 'https://trustwallet.com';
1460
1851
  this.icon = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTgiIGhlaWdodD0iNjUiIHZpZXdCb3g9IjAgMCA1OCA2NSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAgOS4zODk0OUwyOC44OTA3IDBWNjUuMDA0MkM4LjI1NDUgNTYuMzM2OSAwIDM5LjcyNDggMCAzMC4zMzUzVjkuMzg5NDlaIiBmaWxsPSIjMDUwMEZGIi8+CjxwYXRoIGQ9Ik01Ny43ODIyIDkuMzg5NDlMMjguODkxNSAwVjY1LjAwNDJDNDkuNTI3NyA1Ni4zMzY5IDU3Ljc4MjIgMzkuNzI0OCA1Ny43ODIyIDMwLjMzNTNWOS4zODk0OVoiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8yMjAxXzY5NDIpIi8+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMjIwMV82OTQyIiB4MT0iNTEuMzYxNSIgeTE9Ii00LjE1MjkzIiB4Mj0iMjkuNTM4NCIgeTI9IjY0LjUxNDciIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agb2Zmc2V0PSIwLjAyMTEyIiBzdG9wLWNvbG9yPSIjMDAwMEZGIi8+CjxzdG9wIG9mZnNldD0iMC4wNzYyNDIzIiBzdG9wLWNvbG9yPSIjMDA5NEZGIi8+CjxzdG9wIG9mZnNldD0iMC4xNjMwODkiIHN0b3AtY29sb3I9IiM0OEZGOTEiLz4KPHN0b3Agb2Zmc2V0PSIwLjQyMDA0OSIgc3RvcC1jb2xvcj0iIzAwOTRGRiIvPgo8c3RvcCBvZmZzZXQ9IjAuNjgyODg2IiBzdG9wLWNvbG9yPSIjMDAzOEZGIi8+CjxzdG9wIG9mZnNldD0iMC45MDI0NjUiIHN0b3AtY29sb3I9IiMwNTAwRkYiLz4KPC9saW5lYXJHcmFkaWVudD4KPC9kZWZzPgo8L3N2Zz4K';
1461
1852
  this._readyState = (0, tronwallet_abstract_adapter_1.isInBrowser)() ? tronwallet_abstract_adapter_1.WalletReadyState.Loading : tronwallet_abstract_adapter_1.WalletReadyState.NotFound;
1462
1853
  this._state = tronwallet_abstract_adapter_1.AdapterState.Loading;
1463
- this.messageHandler = (e) => {
1854
+ this.messageHandler = (e) => __awaiter(this, void 0, void 0, function* () {
1464
1855
  var _a, _b, _c;
1465
1856
  const message = (_a = e.data) === null || _a === void 0 ? void 0 : _a.message;
1466
1857
  if (!message) {
1467
1858
  return;
1468
1859
  }
1469
1860
  if (message.action === 'accountsChanged') {
1470
- setTimeout(() => {
1861
+ setTimeout(() => __awaiter(this, void 0, void 0, function* () {
1471
1862
  var _a;
1472
1863
  const preAddr = this.address || '';
1473
1864
  if ((_a = this._wallet) === null || _a === void 0 ? void 0 : _a.ready) {
1865
+ // Gate the connect transition with the security check.
1866
+ try {
1867
+ yield this.checkSecurity();
1868
+ }
1869
+ catch (_b) {
1870
+ this.setAddress(null);
1871
+ this.setState(tronwallet_abstract_adapter_1.AdapterState.Disconnect);
1872
+ return;
1873
+ }
1474
1874
  const address = message.data.address;
1475
1875
  this.setAddress(address);
1476
1876
  this.setState(tronwallet_abstract_adapter_1.AdapterState.Connected);
@@ -1489,12 +1889,25 @@
1489
1889
  else if (preAddr && !this.address) {
1490
1890
  this.emit('disconnect');
1491
1891
  }
1492
- }, 200);
1892
+ }), 200);
1493
1893
  }
1494
1894
  else if (message.action === 'connect') {
1495
1895
  const isCurConnected = this.connected;
1496
1896
  const preAddress = this.address || '';
1497
1897
  const address = ((_c = (_b = this._wallet.tronWeb) === null || _b === void 0 ? void 0 : _b.defaultAddress) === null || _c === void 0 ? void 0 : _c.base58) || '';
1898
+ // Trust may post a `connect` message before the address is available;
1899
+ // ignore it so we don't report a connection (and emit connect) with no address.
1900
+ if (!address) {
1901
+ return;
1902
+ }
1903
+ try {
1904
+ yield this.checkSecurity();
1905
+ }
1906
+ catch (_d) {
1907
+ this.setAddress(null);
1908
+ this.setState(tronwallet_abstract_adapter_1.AdapterState.Disconnect);
1909
+ return;
1910
+ }
1498
1911
  this.setAddress(address);
1499
1912
  this.setState(tronwallet_abstract_adapter_1.AdapterState.Connected);
1500
1913
  if (!isCurConnected) {
@@ -1509,18 +1922,31 @@
1509
1922
  this.setState(tronwallet_abstract_adapter_1.AdapterState.Disconnect);
1510
1923
  this.emit('disconnect');
1511
1924
  }
1512
- };
1925
+ });
1513
1926
  this._checkPromise = null;
1514
- this._updateWallet = () => {
1927
+ this._updateWallet = () => __awaiter(this, void 0, void 0, function* () {
1515
1928
  var _a, _b;
1516
1929
  let state = this.state;
1517
1930
  let address = this.address;
1518
1931
  if ((0, utils_js_1.supportTrust)()) {
1519
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
1520
1932
  this._wallet = window.trustwallet.tronLink;
1521
1933
  this._listenEvent();
1522
1934
  address = ((_b = (_a = this._wallet.tronWeb) === null || _a === void 0 ? void 0 : _a.defaultAddress) === null || _b === void 0 ? void 0 : _b.base58) || null;
1523
- state = this._wallet.ready ? tronwallet_abstract_adapter_1.AdapterState.Connected : tronwallet_abstract_adapter_1.AdapterState.Disconnect;
1935
+ if (address) {
1936
+ // Only run the security check once the wallet is actually connected.
1937
+ try {
1938
+ yield this.checkSecurity();
1939
+ }
1940
+ catch (_c) {
1941
+ this.setAddress(null);
1942
+ this.setState(tronwallet_abstract_adapter_1.AdapterState.Disconnect);
1943
+ return;
1944
+ }
1945
+ state = tronwallet_abstract_adapter_1.AdapterState.Connected;
1946
+ }
1947
+ else {
1948
+ state = tronwallet_abstract_adapter_1.AdapterState.Disconnect;
1949
+ }
1524
1950
  }
1525
1951
  else {
1526
1952
  this._wallet = null;
@@ -1529,16 +1955,8 @@
1529
1955
  }
1530
1956
  this.setAddress(address);
1531
1957
  this.setState(state);
1532
- };
1533
- const { checkTimeout = 2 * 1000, openUrlWhenWalletNotFound = true, openAppWithDeeplink = true } = config;
1534
- if (typeof checkTimeout !== 'number') {
1535
- throw new Error('[TrustAdapter] config.checkTimeout should be a number');
1536
- }
1537
- this.config = {
1538
- checkTimeout,
1539
- openAppWithDeeplink,
1540
- openUrlWhenWalletNotFound,
1541
- };
1958
+ });
1959
+ this.config = Object.assign({}, this.commonConfig);
1542
1960
  this._connecting = false;
1543
1961
  this._wallet = null;
1544
1962
  this._address = null;
@@ -1549,7 +1967,11 @@
1549
1967
  }
1550
1968
  if ((0, utils_js_1.supportTrust)()) {
1551
1969
  this._readyState = tronwallet_abstract_adapter_1.WalletReadyState.Found;
1552
- this._updateWallet();
1970
+ this._updateWallet().then(() => {
1971
+ if (this.connected) {
1972
+ this.emit('connect', this.address || '');
1973
+ }
1974
+ });
1553
1975
  }
1554
1976
  else {
1555
1977
  this._checkWallet().then(() => {
@@ -1601,34 +2023,21 @@
1601
2023
  return __awaiter(this, void 0, void 0, function* () {
1602
2024
  var _a;
1603
2025
  try {
1604
- this.checkIfopenTrustWallet();
1605
- if (this.connected || this.connecting)
2026
+ if (!(yield this._beforeConnect()))
1606
2027
  return;
1607
- yield this._checkWallet();
1608
- if (this.state === tronwallet_abstract_adapter_1.AdapterState.NotFound) {
1609
- if (this.config.openUrlWhenWalletNotFound !== false && (0, tronwallet_abstract_adapter_1.isInBrowser)()) {
1610
- window.open(this.url, '_blank');
1611
- }
1612
- throw new tronwallet_abstract_adapter_1.WalletNotFoundError();
1613
- }
1614
2028
  if (!this._wallet)
1615
2029
  return;
1616
2030
  this._connecting = true;
1617
2031
  const wallet = this._wallet;
1618
- try {
1619
- const res = yield wallet.request({ method: 'tron_requestAccounts' });
1620
- if (!res) {
1621
- throw new tronwallet_abstract_adapter_1.WalletConnectionError('Request connect error.');
1622
- }
1623
- if (res.code === 4000) {
1624
- throw new tronwallet_abstract_adapter_1.WalletConnectionError('The same DApp has already initiated a request to connect to trustwallet, and the pop-up window has not been closed.');
1625
- }
1626
- if (res.code === 4001) {
1627
- throw new tronwallet_abstract_adapter_1.WalletConnectionError('The user rejected connection.');
1628
- }
2032
+ const res = yield wallet.request({ method: 'tron_requestAccounts' });
2033
+ if (!res) {
2034
+ throw new tronwallet_abstract_adapter_1.WalletConnectionError('Request connect error.');
1629
2035
  }
1630
- catch (error) {
1631
- throw new tronwallet_abstract_adapter_1.WalletConnectionError(error === null || error === void 0 ? void 0 : error.message, error);
2036
+ if (res.code === 4000) {
2037
+ throw new tronwallet_abstract_adapter_1.WalletConnectionError('The same DApp has already initiated a request to connect to trustwallet, and the pop-up window has not been closed.');
2038
+ }
2039
+ if (res.code === 4001) {
2040
+ throw new tronwallet_abstract_adapter_1.WalletConnectionError('The user rejected connection.');
1632
2041
  }
1633
2042
  const address = ((_a = wallet.tronWeb.defaultAddress) === null || _a === void 0 ? void 0 : _a.base58) || '';
1634
2043
  this.setAddress(address);
@@ -1637,8 +2046,9 @@
1637
2046
  this.connected && this.emit('connect', this.address || '');
1638
2047
  }
1639
2048
  catch (error) {
1640
- this.emit('error', error);
1641
- throw error;
2049
+ const err = error instanceof tronwallet_abstract_adapter_1.WalletError ? error : new tronwallet_abstract_adapter_1.WalletConnectionError(error === null || error === void 0 ? void 0 : error.message, error);
2050
+ this.emit('error', err);
2051
+ throw err;
1642
2052
  }
1643
2053
  finally {
1644
2054
  this._connecting = false;
@@ -1656,12 +2066,12 @@
1656
2066
  this.emit('disconnect');
1657
2067
  });
1658
2068
  }
1659
- signTransaction(transaction, privateKey) {
2069
+ signTransaction(transaction) {
1660
2070
  return __awaiter(this, void 0, void 0, function* () {
1661
2071
  try {
1662
2072
  const wallet = yield this.checkAndGetWallet();
1663
2073
  try {
1664
- return yield wallet.tronWeb.trx.sign(transaction, privateKey);
2074
+ return yield wallet.tronWeb.trx.sign(transaction);
1665
2075
  }
1666
2076
  catch (error) {
1667
2077
  if (error instanceof Error || (typeof error === 'object' && error.message)) {
@@ -1681,12 +2091,12 @@
1681
2091
  }
1682
2092
  });
1683
2093
  }
1684
- multiSign(transaction, privateKey, permissionId) {
1685
- return __awaiter(this, void 0, void 0, function* () {
2094
+ multiSign(transaction_1) {
2095
+ return __awaiter(this, arguments, void 0, function* (transaction, options = {}) {
1686
2096
  try {
1687
2097
  const wallet = yield this.checkAndGetWallet();
1688
2098
  try {
1689
- return yield wallet.tronWeb.trx.multiSign(transaction, privateKey, permissionId);
2099
+ return yield wallet.tronWeb.trx.multiSign(transaction, undefined, options.permissionId);
1690
2100
  }
1691
2101
  catch (error) {
1692
2102
  if (error instanceof Error || (typeof error === 'object' && error.message)) {
@@ -1706,12 +2116,12 @@
1706
2116
  }
1707
2117
  });
1708
2118
  }
1709
- signMessage(message, privateKey) {
2119
+ signMessage(message) {
1710
2120
  return __awaiter(this, void 0, void 0, function* () {
1711
2121
  try {
1712
2122
  const wallet = yield this.checkAndGetWallet();
1713
2123
  try {
1714
- return yield wallet.tronWeb.trx.signMessageV2(message, privateKey);
2124
+ return yield wallet.tronWeb.trx.signMessageV2(message);
1715
2125
  }
1716
2126
  catch (error) {
1717
2127
  if (error instanceof Error || (typeof error === 'object' && error.message)) {
@@ -1758,6 +2168,12 @@
1758
2168
  throw new tronwallet_abstract_adapter_1.WalletNotFoundError();
1759
2169
  }
1760
2170
  }
2171
+ _openAppByDeepLinkIfNeed() {
2172
+ if (this.config.openAppWithDeeplink === false) {
2173
+ return false;
2174
+ }
2175
+ return (0, utils_js_1.openTrustWallet)();
2176
+ }
1761
2177
  /**
1762
2178
  * check if wallet exists by interval, the promise only resolve when wallet detected or timeout
1763
2179
  * @returns if trustwallet exists
@@ -1800,7 +2216,7 @@
1800
2216
  }
1801
2217
  }
1802
2218
  }
1803
- exports.TrustAdapter = TrustAdapter;
2219
+ exports$1.TrustAdapter = TrustAdapter;
1804
2220
 
1805
2221
  } (adapter$2));
1806
2222
  return adapter$2;
@@ -1811,7 +2227,7 @@
1811
2227
  function requireCjs () {
1812
2228
  if (hasRequiredCjs) return cjs$2;
1813
2229
  hasRequiredCjs = 1;
1814
- (function (exports) {
2230
+ (function (exports$1) {
1815
2231
  var __createBinding = (cjs$2 && cjs$2.__createBinding) || (Object.create ? (function(o, m, k, k2) {
1816
2232
  if (k2 === undefined) k2 = k;
1817
2233
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -1823,12 +2239,12 @@
1823
2239
  if (k2 === undefined) k2 = k;
1824
2240
  o[k2] = m[k];
1825
2241
  }));
1826
- var __exportStar = (cjs$2 && cjs$2.__exportStar) || function(m, exports) {
1827
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
2242
+ var __exportStar = (cjs$2 && cjs$2.__exportStar) || function(m, exports$1) {
2243
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports$1, p)) __createBinding(exports$1, m, p);
1828
2244
  };
1829
- Object.defineProperty(exports, "__esModule", { value: true });
1830
- __exportStar(/*@__PURE__*/ requireAdapter(), exports);
1831
- __exportStar(/*@__PURE__*/ requireUtils(), exports);
2245
+ Object.defineProperty(exports$1, "__esModule", { value: true });
2246
+ __exportStar(requireAdapter(), exports$1);
2247
+ __exportStar(requireUtils(), exports$1);
1832
2248
 
1833
2249
  } (cjs$2));
1834
2250
  return cjs$2;