@tronweb3/tronwallet-adapter-trust 1.0.3 → 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(transaction, options = {}) {
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);
@@ -569,10 +494,66 @@
569
494
  }
570
495
  }
571
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;
572
507
 
573
508
  return errors;
574
509
  }
575
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
+
576
557
  var types$1 = {};
577
558
 
578
559
  var hasRequiredTypes$1;
@@ -581,7 +562,47 @@
581
562
  if (hasRequiredTypes$1) return types$1;
582
563
  hasRequiredTypes$1 = 1;
583
564
  Object.defineProperty(types$1, "__esModule", { value: true });
584
- types$1.TIP6963RequestProviderEventName = types$1.TIP6963AnnounceProviderEventName = 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 = {}));
585
606
  var NetworkType;
586
607
  (function (NetworkType) {
587
608
  NetworkType["Mainnet"] = "Mainnet";
@@ -604,6 +625,59 @@
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,6 +740,306 @@
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 () {
@@ -690,7 +1064,10 @@
690
1064
  __exportStar(requireAdapter$2(), exports$1);
691
1065
  __exportStar(requireErrors(), exports$1);
692
1066
  __exportStar(requireTypes$1(), exports$1);
1067
+ __exportStar(requireTypedData(), exports$1);
693
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;
@@ -829,10 +1206,10 @@
829
1206
  });
830
1207
  }
831
1208
  exports$1.TronLinkAdapterName = 'TronLink';
832
- class TronLinkAdapter extends tronwallet_abstract_adapter_1.Adapter {
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();
1212
+ super(config);
836
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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';
@@ -858,8 +1235,8 @@
858
1235
  }
859
1236
  };
860
1237
  this._checkPromise = null;
861
- this._updateWallet = () => {
862
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
1238
+ this._updateWallet = () => __awaiter(this, void 0, void 0, function* () {
1239
+ var _a, _b, _c, _d, _e, _f, _g, _h;
863
1240
  this._supportNewTronProtocol = false;
864
1241
  let state = this.state;
865
1242
  let address = this.address;
@@ -875,9 +1252,23 @@
875
1252
  };
876
1253
  }
877
1254
  address = ((_c = (_b = this._wallet.tronWeb) === null || _b === void 0 ? void 0 : _b.defaultAddress) === null || _c === void 0 ? void 0 : _c.base58) || null;
878
- 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
+ }
879
1270
  }
880
- else if (window.tron && window.tron.isTronLink) {
1271
+ else if (this.isLegacyTronLinkProvider(window.tron)) {
881
1272
  this._supportNewTronProtocol = true;
882
1273
  this._wallet = window.tron;
883
1274
  this._listenTronEvent();
@@ -899,16 +1290,6 @@
899
1290
  address = ((_h = (_g = this._wallet.tronWeb) === null || _g === void 0 ? void 0 : _g.defaultAddress) === null || _h === void 0 ? void 0 : _h.base58) || null;
900
1291
  state = this._wallet.ready ? tronwallet_abstract_adapter_1.AdapterState.Connected : tronwallet_abstract_adapter_1.AdapterState.Disconnect;
901
1292
  }
902
- else if (window.tronWeb) {
903
- // fake tronLink
904
- this._wallet = {
905
- ready: window.tronWeb.ready,
906
- tronWeb: window.tronWeb,
907
- request: () => Promise.resolve(true),
908
- };
909
- address = ((_j = this._wallet.tronWeb.defaultAddress) === null || _j === void 0 ? void 0 : _j.base58) || null;
910
- state = this._wallet.ready ? tronwallet_abstract_adapter_1.AdapterState.Connected : tronwallet_abstract_adapter_1.AdapterState.Disconnect;
911
- }
912
1293
  else {
913
1294
  // no tronlink support
914
1295
  this._wallet = null;
@@ -921,26 +1302,40 @@
921
1302
  }
922
1303
  this.setAddress(address);
923
1304
  this.setState(state);
924
- };
1305
+ });
925
1306
  this.checkReadyInterval = null;
926
- const { checkTimeout = 30 * 1000, dappIcon = '', dappName = '', openUrlWhenWalletNotFound = true, openTronLinkAppOnMobile = true, openAppWithDeeplink = true, } = config;
1307
+ const { checkTimeout = 5 * 1000, dappIcon = '', dappName = '', openUrlWhenWalletNotFound = true, openTronLinkAppOnMobile = true, openAppWithDeeplink = true, } = config;
927
1308
  if (typeof checkTimeout !== 'number') {
928
1309
  throw new Error('[TronLinkAdapter] config.checkTimeout should be a number');
929
1310
  }
930
- this.config = {
931
- checkTimeout,
1311
+ this.config = Object.assign(Object.assign({}, this.commonConfig), { checkTimeout,
932
1312
  openTronLinkAppOnMobile,
933
1313
  openAppWithDeeplink,
934
1314
  openUrlWhenWalletNotFound,
935
1315
  dappIcon,
936
- dappName,
937
- };
1316
+ dappName });
938
1317
  this._connecting = false;
939
1318
  this._wallet = null;
940
1319
  this._address = null;
941
- if ((0, utils_js_1.supportTron)() || ((0, tronwallet_abstract_adapter_1.isInMobileBrowser)() && (window.tronLink || window.tronWeb))) {
1320
+ if (!(0, tronwallet_abstract_adapter_1.isInBrowser)()) {
1321
+ this._readyState = tronwallet_abstract_adapter_1.WalletReadyState.NotFound;
1322
+ this.setState(tronwallet_abstract_adapter_1.AdapterState.NotFound);
1323
+ return;
1324
+ }
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))) {
942
1333
  this._readyState = tronwallet_abstract_adapter_1.WalletReadyState.Found;
943
- this._updateWallet();
1334
+ this._updateWallet().then(() => {
1335
+ if (this.connected) {
1336
+ this.emit('connect', this.address || '');
1337
+ }
1338
+ });
944
1339
  }
945
1340
  else {
946
1341
  this._checkWallet().then(() => {
@@ -993,16 +1388,8 @@
993
1388
  return __awaiter(this, void 0, void 0, function* () {
994
1389
  var _a, _b;
995
1390
  try {
996
- this.checkIfOpenTronLink();
997
- if (this.connected || this.connecting)
1391
+ if (!(yield this._beforeConnect()))
998
1392
  return;
999
- yield this._checkWallet();
1000
- if (this.state === tronwallet_abstract_adapter_1.AdapterState.NotFound) {
1001
- if (this.config.openUrlWhenWalletNotFound !== false && (0, tronwallet_abstract_adapter_1.isInBrowser)()) {
1002
- window.open(this.url, '_blank');
1003
- }
1004
- throw new tronwallet_abstract_adapter_1.WalletNotFoundError();
1005
- }
1006
1393
  // lower version only support window.tronWeb, no window.tronLink
1007
1394
  if (!this._wallet)
1008
1395
  return;
@@ -1033,22 +1420,17 @@
1033
1420
  }
1034
1421
  else if (window.tronLink) {
1035
1422
  const wallet = this._wallet;
1036
- try {
1037
- const res = yield wallet.request({ method: 'tron_requestAccounts' });
1038
- if (!res) {
1039
- // 1. wallet is locked
1040
- // 2. tronlink is first installed and there is no wallet account
1041
- throw new tronwallet_abstract_adapter_1.WalletConnectionError('TronLink wallet is locked or no wallet account is avaliable.');
1042
- }
1043
- if (res.code === 4000) {
1044
- 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.');
1045
- }
1046
- if (res.code === 4001) {
1047
- throw new tronwallet_abstract_adapter_1.WalletConnectionError('The user rejected connection.');
1048
- }
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.');
1049
1428
  }
1050
- catch (error) {
1051
- 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.');
1052
1434
  }
1053
1435
  const address = ((_a = wallet.tronWeb.defaultAddress) === null || _a === void 0 ? void 0 : _a.base58) || '';
1054
1436
  this.setAddress(address);
@@ -1066,8 +1448,9 @@
1066
1448
  this.connected && this.emit('connect', this.address || '');
1067
1449
  }
1068
1450
  catch (error) {
1069
- this.emit('error', error);
1070
- 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;
1071
1454
  }
1072
1455
  finally {
1073
1456
  this._connecting = false;
@@ -1135,6 +1518,11 @@
1135
1518
  return this._checkAndSign((wallet) => __awaiter(this, void 0, void 0, function* () { return wallet.tronWeb.trx.signMessageV2(message); }), tronwallet_abstract_adapter_1.WalletSignMessageError);
1136
1519
  });
1137
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);
1524
+ });
1525
+ }
1138
1526
  /**
1139
1527
  * Switch to target chain. If current chain is the same as target chain, the call will success immediately.
1140
1528
  * Available chainIds:
@@ -1175,7 +1563,9 @@
1175
1563
  }
1176
1564
  checkAndGetWallet() {
1177
1565
  return __awaiter(this, void 0, void 0, function* () {
1178
- this.checkIfOpenTronLink();
1566
+ if (this._openAppByDeepLinkIfNeed()) {
1567
+ throw new tronwallet_abstract_adapter_1.WalletNotFoundError();
1568
+ }
1179
1569
  yield this._checkWallet();
1180
1570
  if (this.state !== tronwallet_abstract_adapter_1.AdapterState.Connected)
1181
1571
  throw new tronwallet_abstract_adapter_1.WalletDisconnectedError();
@@ -1185,14 +1575,12 @@
1185
1575
  return wallet;
1186
1576
  });
1187
1577
  }
1188
- checkIfOpenTronLink() {
1189
- const { dappName = '', dappIcon = '' } = this.config;
1190
- if (this.config.openTronLinkAppOnMobile === false || this.config.openAppWithDeeplink === false) {
1191
- return;
1192
- }
1193
- if ((0, utils_js_1.openTronLink)({ dappIcon, dappName })) {
1194
- throw new tronwallet_abstract_adapter_1.WalletNotFoundError();
1578
+ _openAppByDeepLinkIfNeed() {
1579
+ if (this.config.openAppWithDeeplink === false || this.config.openTronLinkAppOnMobile === false) {
1580
+ return false;
1195
1581
  }
1582
+ const { dappName = '', dappIcon = '' } = this.config;
1583
+ return (0, utils_js_1.openTronLink)({ dappIcon, dappName });
1196
1584
  }
1197
1585
  // following code is for TIP-1193
1198
1586
  _listenTronEvent() {
@@ -1208,6 +1596,12 @@
1208
1596
  (_a = wallet.removeListener) === null || _a === void 0 ? void 0 : _a.call(wallet, 'chainChanged', this._onChainChanged);
1209
1597
  (_b = wallet.removeListener) === null || _b === void 0 ? void 0 : _b.call(wallet, 'accountsChanged', this._onAccountsChanged);
1210
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;
1604
+ }
1211
1605
  /**
1212
1606
  * check if wallet exists by interval, the promise only resolve when wallet detected or timeout
1213
1607
  * @returns if wallet exists
@@ -1219,18 +1613,89 @@
1219
1613
  if (this._checkPromise) {
1220
1614
  return this._checkPromise;
1221
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
1222
1688
  const interval = 100;
1223
- const checkTronTimes = Math.floor(2000 / interval);
1224
1689
  const maxTimes = Math.floor(this.config.checkTimeout / interval);
1225
1690
  let times = 0, timer;
1226
1691
  this._checkPromise = new Promise((resolve) => {
1227
1692
  const check = () => {
1228
1693
  times++;
1229
- 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));
1230
1696
  if (isSupport || times > maxTimes) {
1231
1697
  timer && clearInterval(timer);
1232
1698
  this._readyState = isSupport ? tronwallet_abstract_adapter_1.WalletReadyState.Found : tronwallet_abstract_adapter_1.WalletReadyState.NotFound;
1233
- this._updateWallet();
1234
1699
  this.emit('readyStateChanged', this.readyState);
1235
1700
  resolve(isSupport);
1236
1701
  }
@@ -1378,25 +1843,34 @@
1378
1843
  const tronwallet_adapter_tronlink_1 = /*@__PURE__*/ requireCjs$1();
1379
1844
  const utils_js_1 = requireUtils();
1380
1845
  exports$1.TrustAdapterName = 'Trust';
1381
- class TrustAdapter extends tronwallet_abstract_adapter_1.Adapter {
1846
+ class TrustAdapter extends tronwallet_abstract_adapter_1.AddonAdapter {
1382
1847
  constructor(config = {}) {
1383
- super();
1848
+ super(config);
1384
1849
  this.name = exports$1.TrustAdapterName;
1385
1850
  this.url = 'https://trustwallet.com';
1386
1851
  this.icon = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTgiIGhlaWdodD0iNjUiIHZpZXdCb3g9IjAgMCA1OCA2NSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAgOS4zODk0OUwyOC44OTA3IDBWNjUuMDA0MkM4LjI1NDUgNTYuMzM2OSAwIDM5LjcyNDggMCAzMC4zMzUzVjkuMzg5NDlaIiBmaWxsPSIjMDUwMEZGIi8+CjxwYXRoIGQ9Ik01Ny43ODIyIDkuMzg5NDlMMjguODkxNSAwVjY1LjAwNDJDNDkuNTI3NyA1Ni4zMzY5IDU3Ljc4MjIgMzkuNzI0OCA1Ny43ODIyIDMwLjMzNTNWOS4zODk0OVoiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8yMjAxXzY5NDIpIi8+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMjIwMV82OTQyIiB4MT0iNTEuMzYxNSIgeTE9Ii00LjE1MjkzIiB4Mj0iMjkuNTM4NCIgeTI9IjY0LjUxNDciIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agb2Zmc2V0PSIwLjAyMTEyIiBzdG9wLWNvbG9yPSIjMDAwMEZGIi8+CjxzdG9wIG9mZnNldD0iMC4wNzYyNDIzIiBzdG9wLWNvbG9yPSIjMDA5NEZGIi8+CjxzdG9wIG9mZnNldD0iMC4xNjMwODkiIHN0b3AtY29sb3I9IiM0OEZGOTEiLz4KPHN0b3Agb2Zmc2V0PSIwLjQyMDA0OSIgc3RvcC1jb2xvcj0iIzAwOTRGRiIvPgo8c3RvcCBvZmZzZXQ9IjAuNjgyODg2IiBzdG9wLWNvbG9yPSIjMDAzOEZGIi8+CjxzdG9wIG9mZnNldD0iMC45MDI0NjUiIHN0b3AtY29sb3I9IiMwNTAwRkYiLz4KPC9saW5lYXJHcmFkaWVudD4KPC9kZWZzPgo8L3N2Zz4K';
1387
1852
  this._readyState = (0, tronwallet_abstract_adapter_1.isInBrowser)() ? tronwallet_abstract_adapter_1.WalletReadyState.Loading : tronwallet_abstract_adapter_1.WalletReadyState.NotFound;
1388
1853
  this._state = tronwallet_abstract_adapter_1.AdapterState.Loading;
1389
- this.messageHandler = (e) => {
1854
+ this.messageHandler = (e) => __awaiter(this, void 0, void 0, function* () {
1390
1855
  var _a, _b, _c;
1391
1856
  const message = (_a = e.data) === null || _a === void 0 ? void 0 : _a.message;
1392
1857
  if (!message) {
1393
1858
  return;
1394
1859
  }
1395
1860
  if (message.action === 'accountsChanged') {
1396
- setTimeout(() => {
1861
+ setTimeout(() => __awaiter(this, void 0, void 0, function* () {
1397
1862
  var _a;
1398
1863
  const preAddr = this.address || '';
1399
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
+ }
1400
1874
  const address = message.data.address;
1401
1875
  this.setAddress(address);
1402
1876
  this.setState(tronwallet_abstract_adapter_1.AdapterState.Connected);
@@ -1415,12 +1889,25 @@
1415
1889
  else if (preAddr && !this.address) {
1416
1890
  this.emit('disconnect');
1417
1891
  }
1418
- }, 200);
1892
+ }), 200);
1419
1893
  }
1420
1894
  else if (message.action === 'connect') {
1421
1895
  const isCurConnected = this.connected;
1422
1896
  const preAddress = this.address || '';
1423
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
+ }
1424
1911
  this.setAddress(address);
1425
1912
  this.setState(tronwallet_abstract_adapter_1.AdapterState.Connected);
1426
1913
  if (!isCurConnected) {
@@ -1435,9 +1922,9 @@
1435
1922
  this.setState(tronwallet_abstract_adapter_1.AdapterState.Disconnect);
1436
1923
  this.emit('disconnect');
1437
1924
  }
1438
- };
1925
+ });
1439
1926
  this._checkPromise = null;
1440
- this._updateWallet = () => {
1927
+ this._updateWallet = () => __awaiter(this, void 0, void 0, function* () {
1441
1928
  var _a, _b;
1442
1929
  let state = this.state;
1443
1930
  let address = this.address;
@@ -1445,7 +1932,21 @@
1445
1932
  this._wallet = window.trustwallet.tronLink;
1446
1933
  this._listenEvent();
1447
1934
  address = ((_b = (_a = this._wallet.tronWeb) === null || _a === void 0 ? void 0 : _a.defaultAddress) === null || _b === void 0 ? void 0 : _b.base58) || null;
1448
- 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
+ }
1449
1950
  }
1450
1951
  else {
1451
1952
  this._wallet = null;
@@ -1454,16 +1955,8 @@
1454
1955
  }
1455
1956
  this.setAddress(address);
1456
1957
  this.setState(state);
1457
- };
1458
- const { checkTimeout = 2 * 1000, openUrlWhenWalletNotFound = true, openAppWithDeeplink = true } = config;
1459
- if (typeof checkTimeout !== 'number') {
1460
- throw new Error('[TrustAdapter] config.checkTimeout should be a number');
1461
- }
1462
- this.config = {
1463
- checkTimeout,
1464
- openAppWithDeeplink,
1465
- openUrlWhenWalletNotFound,
1466
- };
1958
+ });
1959
+ this.config = Object.assign({}, this.commonConfig);
1467
1960
  this._connecting = false;
1468
1961
  this._wallet = null;
1469
1962
  this._address = null;
@@ -1474,7 +1967,11 @@
1474
1967
  }
1475
1968
  if ((0, utils_js_1.supportTrust)()) {
1476
1969
  this._readyState = tronwallet_abstract_adapter_1.WalletReadyState.Found;
1477
- this._updateWallet();
1970
+ this._updateWallet().then(() => {
1971
+ if (this.connected) {
1972
+ this.emit('connect', this.address || '');
1973
+ }
1974
+ });
1478
1975
  }
1479
1976
  else {
1480
1977
  this._checkWallet().then(() => {
@@ -1526,34 +2023,21 @@
1526
2023
  return __awaiter(this, void 0, void 0, function* () {
1527
2024
  var _a;
1528
2025
  try {
1529
- this.checkIfopenTrustWallet();
1530
- if (this.connected || this.connecting)
2026
+ if (!(yield this._beforeConnect()))
1531
2027
  return;
1532
- yield this._checkWallet();
1533
- if (this.state === tronwallet_abstract_adapter_1.AdapterState.NotFound) {
1534
- if (this.config.openUrlWhenWalletNotFound !== false && (0, tronwallet_abstract_adapter_1.isInBrowser)()) {
1535
- window.open(this.url, '_blank');
1536
- }
1537
- throw new tronwallet_abstract_adapter_1.WalletNotFoundError();
1538
- }
1539
2028
  if (!this._wallet)
1540
2029
  return;
1541
2030
  this._connecting = true;
1542
2031
  const wallet = this._wallet;
1543
- try {
1544
- const res = yield wallet.request({ method: 'tron_requestAccounts' });
1545
- if (!res) {
1546
- throw new tronwallet_abstract_adapter_1.WalletConnectionError('Request connect error.');
1547
- }
1548
- if (res.code === 4000) {
1549
- 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.');
1550
- }
1551
- if (res.code === 4001) {
1552
- throw new tronwallet_abstract_adapter_1.WalletConnectionError('The user rejected connection.');
1553
- }
2032
+ const res = yield wallet.request({ method: 'tron_requestAccounts' });
2033
+ if (!res) {
2034
+ throw new tronwallet_abstract_adapter_1.WalletConnectionError('Request connect error.');
1554
2035
  }
1555
- catch (error) {
1556
- 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.');
1557
2041
  }
1558
2042
  const address = ((_a = wallet.tronWeb.defaultAddress) === null || _a === void 0 ? void 0 : _a.base58) || '';
1559
2043
  this.setAddress(address);
@@ -1562,8 +2046,9 @@
1562
2046
  this.connected && this.emit('connect', this.address || '');
1563
2047
  }
1564
2048
  catch (error) {
1565
- this.emit('error', error);
1566
- 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;
1567
2052
  }
1568
2053
  finally {
1569
2054
  this._connecting = false;
@@ -1683,6 +2168,12 @@
1683
2168
  throw new tronwallet_abstract_adapter_1.WalletNotFoundError();
1684
2169
  }
1685
2170
  }
2171
+ _openAppByDeepLinkIfNeed() {
2172
+ if (this.config.openAppWithDeeplink === false) {
2173
+ return false;
2174
+ }
2175
+ return (0, utils_js_1.openTrustWallet)();
2176
+ }
1686
2177
  /**
1687
2178
  * check if wallet exists by interval, the promise only resolve when wallet detected or timeout
1688
2179
  * @returns if trustwallet exists