@tronweb3/tronwallet-adapter-trust 1.0.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/LICENSE +20 -0
- package/README.md +88 -0
- package/lib/cjs/adapter.js +357 -0
- package/lib/cjs/adapter.js.map +1 -0
- package/lib/cjs/index.js +19 -0
- package/lib/cjs/index.js.map +1 -0
- package/lib/cjs/package.json +1 -0
- package/lib/cjs/utils.js +24 -0
- package/lib/cjs/utils.js.map +1 -0
- package/lib/esm/adapter.js +353 -0
- package/lib/esm/adapter.js.map +1 -0
- package/lib/esm/index.js +3 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/utils.js +18 -0
- package/lib/esm/utils.js.map +1 -0
- package/lib/types/adapter.d.ts +64 -0
- package/lib/types/adapter.d.ts.map +1 -0
- package/lib/types/index.d.ts +3 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/utils.d.ts +4 -0
- package/lib/types/utils.d.ts.map +1 -0
- package/lib/umd/index.js +1739 -0
- package/lib/umd/index.min.js +1 -0
- package/package.json +54 -0
- package/src/adapter.ts +385 -0
- package/src/index.ts +2 -0
- package/src/utils.ts +20 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self)["@tronweb3/tronwallet-adapter-trust"]=e()}(this,(function(){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function e(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var n={},o={},r={},i={},s={exports:{}};!function(t){var e=Object.prototype.hasOwnProperty,n="~";function o(){}function r(t,e,n){this.fn=t,this.context=e,this.once=n||!1}function i(t,e,o,i,s){if("function"!=typeof o)throw new TypeError("The listener must be a function");var a=new r(o,i||t,s),l=n?n+e:e;return t._events[l]?t._events[l].fn?t._events[l]=[t._events[l],a]:t._events[l].push(a):(t._events[l]=a,t._eventsCount++),t}function s(t,e){0==--t._eventsCount?t._events=new o:delete t._events[e]}function a(){this._events=new o,this._eventsCount=0}Object.create&&(o.prototype=Object.create(null),(new o).__proto__||(n=!1)),a.prototype.eventNames=function(){var t,o,r=[];if(0===this._eventsCount)return r;for(o in t=this._events)e.call(t,o)&&r.push(n?o.slice(1):o);return Object.getOwnPropertySymbols?r.concat(Object.getOwnPropertySymbols(t)):r},a.prototype.listeners=function(t){var e=n?n+t:t,o=this._events[e];if(!o)return[];if(o.fn)return[o.fn];for(var r=0,i=o.length,s=new Array(i);r<i;r++)s[r]=o[r].fn;return s},a.prototype.listenerCount=function(t){var e=n?n+t:t,o=this._events[e];return o?o.fn?1:o.length:0},a.prototype.emit=function(t,e,o,r,i,s){var a=n?n+t:t;if(!this._events[a])return!1;var l,d,c=this._events[a],h=arguments.length;if(c.fn){switch(c.once&&this.removeListener(t,c.fn,void 0,!0),h){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,e),!0;case 3:return c.fn.call(c.context,e,o),!0;case 4:return c.fn.call(c.context,e,o,r),!0;case 5:return c.fn.call(c.context,e,o,r,i),!0;case 6:return c.fn.call(c.context,e,o,r,i,s),!0}for(d=1,l=new Array(h-1);d<h;d++)l[d-1]=arguments[d];c.fn.apply(c.context,l)}else{var u,w=c.length;for(d=0;d<w;d++)switch(c[d].once&&this.removeListener(t,c[d].fn,void 0,!0),h){case 1:c[d].fn.call(c[d].context);break;case 2:c[d].fn.call(c[d].context,e);break;case 3:c[d].fn.call(c[d].context,e,o);break;case 4:c[d].fn.call(c[d].context,e,o,r);break;default:if(!l)for(u=1,l=new Array(h-1);u<h;u++)l[u-1]=arguments[u];c[d].fn.apply(c[d].context,l)}}return!0},a.prototype.on=function(t,e,n){return i(this,t,e,n,!1)},a.prototype.once=function(t,e,n){return i(this,t,e,n,!0)},a.prototype.removeListener=function(t,e,o,r){var i=n?n+t:t;if(!this._events[i])return this;if(!e)return s(this,i),this;var a=this._events[i];if(a.fn)a.fn!==e||r&&!a.once||o&&a.context!==o||s(this,i);else{for(var l=0,d=[],c=a.length;l<c;l++)(a[l].fn!==e||r&&!a[l].once||o&&a[l].context!==o)&&d.push(a[l]);d.length?this._events[i]=1===d.length?d[0]:d:s(this,i)}return this},a.prototype.removeAllListeners=function(t){var e;return t?(e=n?n+t:t,this._events[e]&&s(this,e)):(this._events=new o,this._eventsCount=0),this},a.prototype.off=a.prototype.removeListener,a.prototype.addListener=a.prototype.on,a.prefixed=n,a.EventEmitter=a,t.exports=a}(s);var a=s.exports,l=t&&t.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(i,"__esModule",{value:!0}),i.Adapter=i.AdapterState=i.WalletReadyState=i.EventEmitter=void 0;const d=l(a);var c,h;i.EventEmitter=d.default,function(t){t.Loading="Loading",t.NotFound="NotFound",t.Found="Found"}(c||(i.WalletReadyState=c={})),function(t){t.Loading="Loading",t.NotFound="NotFound",t.Disconnect="Disconnected",t.Connected="Connected"}(h||(i.AdapterState=h={}));class u extends d.default{get connected(){return this.state===h.Connected}disconnect(){return console.info("The current adapter doesn't support disconnect by DApp."),Promise.resolve()}multiSign(...t){return Promise.reject("The current wallet doesn't support multiSign.")}switchChain(t){return Promise.reject("The current wallet doesn't support switch chain.")}}i.Adapter=u;var w={};Object.defineProperty(w,"__esModule",{value:!0}),w.WalletGetNetworkError=w.WalletSwitchChainError=w.WalletWindowClosedError=w.WalletWalletLoadError=w.WalletSignTransactionError=w.WalletSignMessageError=w.WalletDisconnectionError=w.WalletConnectionError=w.WalletDisconnectedError=w.WalletNotSelectedError=w.WalletNotFoundError=w.WalletError=void 0;class p extends Error{constructor(t,e){super(t),this.error=e}}w.WalletError=p;w.WalletNotFoundError=class extends p{constructor(){super(...arguments),this.name="WalletNotFoundError",this.message="The wallet is not found."}};w.WalletNotSelectedError=class extends p{constructor(){super(...arguments),this.name="WalletNotSelectedError",this.message="No wallet is selected. Please select a wallet."}};w.WalletDisconnectedError=class extends p{constructor(){super(...arguments),this.name="WalletDisconnectedError",this.message="The wallet is disconnected. Please connect first."}};w.WalletConnectionError=class extends p{constructor(){super(...arguments),this.name="WalletConnectionError"}};w.WalletDisconnectionError=class extends p{constructor(){super(...arguments),this.name="WalletDisconnectionError"}};w.WalletSignMessageError=class extends p{constructor(){super(...arguments),this.name="WalletSignMessageError"}};w.WalletSignTransactionError=class extends p{constructor(){super(...arguments),this.name="WalletSignTransactionError"}};w.WalletWalletLoadError=class extends p{constructor(){super(...arguments),this.name="WalletWalletLoadError"}};w.WalletWindowClosedError=class extends p{constructor(){super(...arguments),this.name="WalletWindowClosedError",this.message="The QR window is closed."}};w.WalletSwitchChainError=class extends p{constructor(){super(...arguments),this.name="WalletSwitchChainError"}};w.WalletGetNetworkError=class extends p{constructor(){super(...arguments),this.name="WalletGetNetworkError"}};var f,v,A={};Object.defineProperty(A,"__esModule",{value:!0}),A.ChainNetwork=A.NetworkType=void 0,function(t){t.Mainnet="Mainnet",t.Shasta="Shasta",t.Nile="Nile",t.Unknown="Unknown"}(f||(A.NetworkType=f={})),function(t){t.Mainnet="Mainnet",t.Shasta="Shasta",t.Nile="Nile"}(v||(A.ChainNetwork=v={}));var g={};function y(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof navigator}Object.defineProperty(g,"__esModule",{value:!0}),g.isInBrowser=y,g.checkAdapterState=function(t){if(!y())return;const e=[];function n(){for(const t of e)t()}function o(){t()&&n()}const r=setInterval(o,500);e.push((()=>clearInterval(r))),"loading"===document.readyState&&(document.addEventListener("DOMContentLoaded",o,{once:!0}),e.push((()=>document.removeEventListener("DOMContentLoaded",o))));"complete"!==document.readyState&&(window.addEventListener("load",o,{once:!0}),e.push((()=>window.removeEventListener("load",o))));o(),setTimeout(n,6e4)},g.isInMobileBrowser=function(){return"undefined"!=typeof navigator&&navigator.userAgent.match(/Android|webOS|iPhone|iPad|iPod|BlackBerry|Windows Phone/i)},function(e){var n=t&&t.__createBinding||(Object.create?function(t,e,n,o){void 0===o&&(o=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,o,r)}:function(t,e,n,o){void 0===o&&(o=n),t[o]=e[n]}),o=t&&t.__exportStar||function(t,e){for(var o in t)"default"===o||Object.prototype.hasOwnProperty.call(e,o)||n(e,t,o)};Object.defineProperty(e,"__esModule",{value:!0}),o(i,e),o(w,e),o(A,e),o(g,e)}(r);var m={},W={},b={},k=t&&t.__awaiter||function(t,e,n,o){return new(n||(n=Promise))((function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}l((o=o.apply(t,e||[])).next())}))};Object.defineProperty(b,"__esModule",{value:!0}),b.supportTron=S,b.supportTronLink=E,b.isInTronLinkApp=T,b.openTronLink=function({dappIcon:t,dappName:e}={dappIcon:"",dappName:""}){if(!E()&&(0,I.isInMobileBrowser)()&&!T()){let n="",o="";try{n=document.title;const t=document.querySelector('link[rel*="icon"]');t&&(o=new URL(t.getAttribute("href")||"",location.href).toString())}catch(t){}const{origin:r,pathname:i,search:s,hash:a}=window.location,l=r+i+s+(a.includes("?")?a:`${a}?_=1`),d={action:"open",actionId:Date.now()+"",callbackUrl:"http://someurl.com",dappIcon:t||o,dappName:e||n,url:l,protocol:"TronLink",version:"1.0",chainId:"0x2b6653dc"};return window.location.href=`tronlinkoutside://pull.activity?param=${encodeURIComponent(JSON.stringify(d))}`,!0}return!1},b.waitTronwebReady=function(t){return k(this,void 0,void 0,(function*(){return new Promise(((e,n)=>{const o=setInterval((()=>{t.tronWeb&&(clearInterval(o),clearTimeout(r),e())}),50),r=setTimeout((()=>{clearInterval(o),n("`window.tron.tronweb` is not ready.")}),2e3)}))}))};const I=r;function S(){return!(!window.tron||!window.tron.isTronLink)}function E(){return!!(S()||window.tronLink||window.tronWeb)}function T(){return(0,I.isInBrowser)()&&void 0!==window.iTron}!function(e){var n=t&&t.__awaiter||function(t,e,n,o){return new(n||(n=Promise))((function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}l((o=o.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.TronLinkAdapter=e.TronLinkAdapterName=e.chainIdNetworkMap=void 0,e.getNetworkInfoByTronWeb=s;const o=r,i=b;function s(t){return n(this,void 0,void 0,(function*(){var n,r,i;const{blockID:s=""}=yield t.trx.getBlockByNumber(0),a=`0x${s.slice(-8)}`;return{networkType:e.chainIdNetworkMap[a]||o.NetworkType.Unknown,chainId:a,fullNode:(null===(n=t.fullNode)||void 0===n?void 0:n.host)||"",solidityNode:(null===(r=t.solidityNode)||void 0===r?void 0:r.host)||"",eventServer:(null===(i=t.eventServer)||void 0===i?void 0:i.host)||""}}))}e.chainIdNetworkMap={"0x2b6653dc":o.NetworkType.Mainnet,"0x94a9059e":o.NetworkType.Shasta,"0xcd8690dc":o.NetworkType.Nile},e.TronLinkAdapterName="TronLink";class a extends o.Adapter{constructor(t={}){super(),this.name=e.TronLinkAdapterName,this.url="https://www.tronlink.org/",this.icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF0AAABdCAYAAADHcWrDAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAUGVYSWZNTQAqAAAACAACARIAAwAAAAEAAQAAh2kABAAAAAEAAAAmAAAAAAADoAEAAwAAAAEAAQAAoAIABAAAAAEAAABdoAMABAAAAAEAAABdAAAAAMkTBfIAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Chle4QcAABZhSURBVHgB7V0JlBTVuf6runtWllkA2QeYQQRBZHNFxZjw4jFqMEFxCWIS1yOaTeJ76nk5Lyc5CUZNfCoa0BgUxRh3QD2CJs8lELaIgOCw78sszN4z0131vu/W1NDTfbtneqa7Zx5v/nN6prrq1q2q77//ev9bbUgcNHjm/sya7PIiIxA43TCNUbYEcw3bsOLo4v98U9sWAxSwbbvYI7LDCDZ+dezl847G82BGWxrnzVl/nmF5bhCxviG2FBoen0+Ep9ptOf0UbOPAZlsNhOCYmOYawzaXirfynZLnpla19sAxQc+5ac14jyf9IbHsqw1vute2GoF78P8x2Bo4DVMME2OQqAQDW8W2flv64oQXMCijjsiooOfP3jAXvf0SHfa2A/XsUnXc/ScGAgAfqgfgB18zGqvvKVk69ZCudSTot63z5fvNRw0z7W7bCpB9uvO698VAwPBmAraGzXbQuq5sycSt4U3NljtsA4D/wfBk3I2TugFvCU6bv9mBOigJ71jTY7zd++Z1heEntgA976b1P8YIv9MO+NGuW52EgxXPdzsIlexJK/Ra5uK+d23pEXpuM+h9blo30TS9/6WMZTfgoRi1e5uD1/BmXGBV1j0Y2okD+i9smGDjV2L6smF9Q493b3cQATXiTc/c3BvXjXO7UqD32bn2Itv0TlcN3CPd/xODAAax4UnP8pjmvW6HCnTbNm+B4sd2tx53gUnkfw5mW6wZUOED2K+ZM2djDoLLy+wgAp9uSg4CarRn5Ikpl/ICpinWGfBvBnXr8uTg3dwrIlfkbS5yQLdkPNxEBEndqqUZoGRsqCDTHK1At2yZZnd7LMmAuUWfDsZ236LLV6SbGPXZ3aO8BT7J/OLx98iBSre79UoyUW7RN3Jh/O4ERy2OdH9JNgLdoCcbYU3/3aBrQEn2rm7Qk42wpn+vZl/cuzgTUtvgJMo8piEesNLE/8gZkri7PiVP6DDojUFb5s0YIIPz02TDzhr58oBf9hyrl9KqgGIEZq/ABEOY2UEFQTcjMIw6DHoAoO891iAPfHeg3HxpH4a6cryyUXYfrZdNe+tk055aMKJO9h5vUIyog0ScZASYQGackuM5+kN1GPR0nykrN1XIobIGGZiXpgDt19sn/Jx7ujNhgqhXjlU4jPhiby0YUdfEiHopg0TUNbKYxJUIgwmhU5o6DDo0hhw90Sjvb6yQWy7rqwWLbfrn+NTn/FEnGcHzdh7xyxeQCDKDqmlficOI+iZGeHGyxwNGnELi0GHQiTIBeWNNucz5Wl81YrXIh+3kOQNyfeozdXRPdTQIkThWEZAdh/1QTY5EbD9YB0Y0SFl1QBpOEUYkBPQ0WMm1xTVCgM4YnBkGb9u/0uC6jLhojMMI2gxKxI4j9UoaaCO2HfTLfjCinIwIOKrJC2ng+WRmV6eEgE59XFEblHfWnugQ6DqwCOYgeEb8XHLmSUYcLm+U4kNQTfsc1bTdZURNQBq7OCMSAjrB8gGcd9adkHuv7C9p3uQONzJiSJ809fnaWb0Ur+i6HgEjviIjqJrwISMOQCJO1ASFxykFtA+dLREJBX0zRt16+OqusdSN3GTtI9NdRlzWxAiqHkrEV4coDScl4kCpwwiqrs5gRMJAp7Ptr7fkzdXlnQK6jpmUuIK+aerzjfG9VRN6RXRvt0MiNkMayAxKBxlBFekywrURVJ2JpsSBjjvjQ77/rwp5YOZA6ZWF6u02Ui2YRXvQI9OUcUOz4O/7hA+dDEr3GTL8tHT1+eYElxGWHCxrVOqIqsllxEEyoi4owSaJSBQjEgo6b2oXItGPv6ySKybltBmzrHRTRgCIW5/ardTBqEEZws+4giwZOzRTRg7IkP5wL6lCkkEM8Hh9fi6f6DDCj8iZo9+RCETWYAYN90FISWWtJXRvGcSpOAI6Kh6JMPJnr38LtV9XCSt0E0AM82dNzZdn7x4ed29MFcx5fJd8AqZRaphS4P/cHl6lr88AI84a1sSIgRlyGgIuPnSqiM9GV5UGevM+RyJcRlTVtcIIE+PbDmzLrKufmHDQLSQb83p65ONfj1E+d7yAlFQG1IhnhEsJIDGNQBEPYMNlRB4YMRT6mnHBuIJMSESWnE5G9PaqDGe8121ve6pGMmIbYhSqJTKj+FC9shvVfqgm4KEkwusTjxHcluVPAui8eY6IBbcPk9lIgLWHqv2WzF24R175pEwyAbxuLIczgrqajCjomw5GQCKgms6EaiqCako1I2pw/4yiGSwqGwGvrvhIQI6W1W3zVPsTP9IJcn2jJV+Ht/D6/SO1gG3YVQs9nS49M6MbW7p7//7Cfnnm/WNCndsWnUkpozRQ31IiyIj8ng4jRkMixg/LBCOypLB/uvRFQi6FmkmofpB53bNkU81ZCTWk7qhmWmDNV9XK8FDkw6myNiB3PH1YnoI09I7i5VCX/27OUKXP579xWHkzrYFEMU5TjU7KBrOYzOesxv2QERlppmLEMKim0UOomhwb4TLi5Jnhd92x7z3hmcE58BTu8FO7J544KhkF0g386dX9Iy5wwRk9Zd6f98u1D++QxfeOUAYxohF2sJ8H4X7m9fDIgy8dVCOY0WQ8xBks4Mze1GnAXUqR72c+57Pt1WofJalPL68M65cuY5ptRCa8mQxIROIgYgxA8mSNv/16zCSMSnQtI7unSN14cb4Ku9XVmv4QuEr4vwveOyb/RKLskrG91IgObRO6PWVkDxXgrNxUqRJcBLK9xDO5GIv3QBdUuaHYWQOjR4O4DhH1uxsqlD1Z+kmpLENqYyPUISNbgkYpdg18vPeAnFDlF/vqFySOjWF34IN6oCXfsLtGzgVo4fStybny6NtHZO2OGvnub4vlT/eMgM7NCm/W/H3WRfmSA0N5x4LdSPMGlSvZfLCDG2QEmcC53VCJ4MQLwf5kK5aGolEmRKavKxFQTXRfx8FYD4N/TyPeVkraSOeD0J3KyfLCqDpJqdCbooH7eGu1mk8liO/CRTx7eJbyPkLbhW7TE+Fs1EdfVCKtG0xa1Mpr8v5NVyIwgCgRjvQG1dQjJXTF+hNKIuhlrYB0fL67Vo6CUXQTacTJpFAKBqVy0z7/gqSBzotRJxPQG6BiqDdDicfq4aFQfGncqG64TcOrM77uuUxqXQp1xKiXWcVkpQvc64X+1zICnKjCve/GPDGdBz4D1dJfwAgOJOb/jyH2AAvBNKuy5EjjgoQHR6E3yW26fq/8rKg5vA49fhj5jqn/sVUxhqLt6sxHbhki35sW28ffe7xebvnv3bIGxpC+fFciekkW/gSwBFelC8Ct7Kx0yc+2vyrq0zgh6XfLi76xpkyLyQAktqZh1DYEII8gjtpGyOY9i/bJH5bFfscBgyAyczqSVlRjXYkoxbQRVDE0upRkDqhD5Y3Wxi0NWFWXZKK//dEXVcpF011qxnm5CI8puA7xZvn1wSUH5BdLD6oR4x4L/0+jRpfzuql5qsaGOrerEp/JVYVJB50gMn+98vMKLR4XYy50BCJERpIu4RTlnTz85mH50bP7xI8INxoxqn3mzuFyx7/1k3qkHyjaXZ2SDjoBIJdfX3NCCwjz7tPP7q1m+kPB4jm0/os+OC63Prkb6dTo7yigND2C6PX+7wxU03Ih/AvtstO3OXd74ABNagqIAcVqGDzWuOhoxrm5Su/pBil14mv/KJcbH9sZVUWxT6WSEL3+5nuD8c3Jv+iu1Vn7mI+aMDw77aNFRU44kOwbobpguQTdKR1NKspWkxVumBzehsB/iGiUaQNOksSiuy4/TZ68bZhyUaP1F+v8ZByjoZ8Fu/PKzwp9PTP6pgZ0PgiNyNvIxeiAoHr41uQcVToR7aHpFq7fheh1frHyfaO14/7rEb0+P3eE9M72KJc1VttkHqN9YZr7tun95KnbhkpOthfPUJ4a9cIHY1qAgcK/ELXp6MopOSrjGMsQZiDA4kzNTIx4zi7Fom9i2m3pT4tkENxSTkanmmhX6AqzovnR7w9FROvEIbyPlOh0XggaRvnTb6L8TkejBmXKlJHZrY5MRraMRG94dGdUdeX2z1KQV+eNFE7zcc4zVeTk82351U1D5D+vGxSRt08Z6HxgqpH3EBozoxdO1Ps0qIzkWiNKDb2ZHzyxW174W0nM5pzY/uvPi+QcJN0o6skmqk/maR7/YYHcc8Vp2sulFHTqdaqHT7c5eezwO6LryMlmzgC1RuyLKYZ7Fu2Vx9sSvd5XKNMxm5XM6JUuIeOGZ+8eETONkVLQCSSDIFb46oj1igyW3LSArk3oProBzI2fjF5Dj7bc7tvLJ4t/1BS9wptoXZ5ant/aNw6AfjleWfLjQqF9ikUpB50qhu4fc9U6mnFenvK5dcd0+6iWqG6c6HWvmp/VteM+Fb3ekfjolREzC5heva9ILm4qctXdgw+5GFLKQWdagEU8qwC8jliZywcITQvo2oXuC41ef9ha9IoHf+SWofLzaxITvdJOcPLltXlFmA/Aiv8Y9MHnlf4nH14bSDnovCeC9AZqHnWUA99alxbQtQ3fF0/0+tC1jF6HqC7obbSHaB+oDukhcYIlFj31fqnM/v3O4KaqCqtTQGda4B9IC+yKkhb4NtMCcA3bA4WKXjGz1LbotZ88cWuBpON+dEFbLBAJOHX3Sz8plIEo+YtGfIZf//UQykkOqGnowYMHp1698Oaoh7nkcfl6feZxCtICY4ZkxA2E++BMlLFkm3OvDMhiEWe1nsf8bFujV4JYB8A5yfInRL0s+YtGarnn8/sV6PS2zKYyn04Z6bxJJy1QrgWWAdAVraQFoj2ou58TB8WH69scvb78E0avaTENMUMIJq7mwv9+8raCmFUBrPK68+k98uR7RyUd90KV6lKngU6PgykB1v/p6Kopuarcug2xku50tY8zN270ujxKss09+YIzGL0WoSAoUxtEudVjD84cJL+ZPaR5QsI9P/Q/C5xYCPvS/5RKFgEPPYjtTgOdN8LREC0twDK4yYWtpwXCnifiqxu9fv+JXfLi31uPXumFsGQkNHqloeVInQ+w779GvXAu4jruDnpmsx7ZKcs3nIgqCZ0GOm+SPvsK3JwuSmSJHA1qsCNDvQkJN3qdu7AN0SuqvJCCFa7c4H1RL9OoL7hjmNyO2alYxBLqmfN3IOKuUiOcbWkDLDCNwVPz+xOSVeEV6+bcY6zUYmn0+SizY0F+OLHIk6UM/qb1o+HH4/nOGham3eArKwAuHtOrhZ4N7Ss7w6Nsyh6UVVA9PYew/upzckObRGzTcDMJxwXIzL0Q5AA+XFiWhxqfsQXZMu3MHhWXFHj+GN30RnSbnB0cSfTZv960OCv0KqxxoR/8+uoyNbMUeqw92/SaKF2MXjmpMv/moWrGXtcXo9enMbqpLmLV4fDc5Sg6cqcUaYwL+qE4VdVEOuXaHFDMKUFo0579sNzT6aC7aQGOeBZxhtOM83OjlnCEt23Ldw54ejYLMffKQih6IdHWR9Hnbw1wLiT+++YqFLoOUhVqnGQ/DRIa6q2491UDdUWKfEq3RYr+My2wv7RePmRAc2FexFWnIS1QAD17EMWdFNVEEHtxotcyrKgLyMK7hketHG7tekWos59/sxPZttbWPd6phtS9CVqbaGkBBh80aizBSzQR+FXQ8df+bgfK4mLPvUa7dnvWPHUJ0NPgHdDiR3twTm6kwedOPOwo8+DcKyqHv8PoFSvoUkFdAnQaOOr0d2GQdHQOpvFYrB9vfkTXl26fil6xOIvuXmtzr7rz27rPrbnsEqDzppFzkrf+iWoBTcaPoHBdKmdmkkWMXlmLfj3cvk9bmfSO5x6YNuDrtT74vFp+/86RhpWfHg52uiF1H8AH1DeixGIz0gKsUw+nq87JkceXH1WjXecZhLdvz3d6UiVNr8K6sOkdNPH0Q4BRJKqmJJne4Mo6Lv51Vl6jODbQ2JhvNXYd0AkklzK+vbZcC/oYrHyYWJiFUVitfO14wIinLdO8g/tEBmrhfbC6gKunnYW8dbJlP94xAPeR+yo0b93web0ImiDOSDV5YZ26zCvkONKWr6uQ+64eEFFzTtfy24gK6ROzXTKIGQdmBHXxAq/H1Rer8L4yBTBG8CHU17MqgbaGdsl9rQnzPfxEI6TA7MSsT492hTj2M0fCBa+ri/XVApdPzFEvZNOo/TiuEr0pLUY2vBkuzdERl1Y+gBJuvumDo5q5GQ4Aup60Owz/CX4Msr3Z9bZpW57PDDe7HqN1qg65aQHd9bgs/UKkYNtaLaDrI9Y+JqZyUfrGFEA48VhpVaP0RF6GAKtJidgAt+jC4LsQxa7Y8/y0euSBrA34obsWDTrzC0cOly4yJ60jLiKI41l1XUTdRwlicoqjPZyqMaqZNmhlJIefdvI7QbfNYiTdbNMTSNuCtzOUqrdSnmzSaVvU3fvwNowPN+urBS4d1wtvxEhXa3kSfZMczXyPgM474gt4KvB+ML5Ftb1kiPUZzzWPvTzuKK7yqfvzju3tMLHnOZlHXZ/Ut1wimYyiUI50ZgN1pF5ji9HeLsjBRfzsTq0R9Kxi30qO8GuCLzjpdt3lUr+P1QKMDLmCTkcqLRDDO9Cd09Z9fEWhjo6jOIr5H50U6NqH7jM8aYDXXnX8pQlQL02g9/L1WQZObFQHQ1t30jYl+DheosDl4jriAl6++YhGN5FEQJkP1xEnM9qXhsAotwKWYdiPuf2qkb7n+eF+6PmH8LvJSPi2S4Dc/hL2n7r9LdQ86gqB6KJ1tFpAd6N0+aKpF/rk7Zk5xA8G4rzAKyWLJ3/kXrPZTJf8efJysRueMXyxK5XcE5P9n17MBqQFGIjoiNUCPTJQkJSgwa4CI2Q7+WJmHTEvE7dqwS/x2kH/Pgn65oX22Qw6d5p1mfPwc46r+MuxnU18QL5F4x0kwXQ0Fq+QmjAC1QIJUjHkXTaYyFdh6ehweUN8oKu3uliVhhW8uWzJ+AOhfbYA/firZ1Y3NFqzwJ0PDS+TTp2rahhKc/4xtBzCvXlOHnCymO/2SgTRXeQLf3RTdzx2HKnn0EXGMa9Jwyn2CSMYuKHkxSl/C2/bAnQerHp5cgl+6niGHax7Tsitpl8KDz8xFd8Z9fGF93x5so4un9Rb5Uno6nWU2AdfH5KVHjnSObdZjmBNBZWxLoQGSkvYwS3A8IqSF6GyNRQBOtuULTmvsnTxxB9YVuB6VG1sxW9O4zc1wb24lZrminHsopzRH482lTccc6eszEpEWoDLbmhEdbEPk1p8U5NTxqF5AAxORyUbVWI1PNbQEJhW9uI5n2laql36zE5T6/IXJi7Nu3H1CsO0r4OmmY2M5CT8oGmmw3IMjURZsWh3h/3pGbas3OKXE5hJy4lMs8s1WESwbAMOejwdUoaIVaR/nt6JKK1GoVAQDEF61lG4+Ks2GPRgQbId3InZl7cxQBeWLJ70ZYzHUYdigs4WHPX4txA9L8qfs34UfM7J2B6NFVmDxLB6i92q0KkLtfcPhX0vSqq3H6geC/98RHg/VwL0MW8e/hjvVy/Xim34CVG+21h+ePawjAk4HDG1byFN4q+r/dQH74aaDGOtFvnw4wC+2BJzo8db/XnJc1Njr7EMua7DuJAdXXXTrq8fI2lpUyPvz8LSjjXLjCEXHIw8Ft8eu65sqmTkjok4K+AvNnyZH0Xsb+eO/wWrg46Do/7gYAAAAABJRU5ErkJggg==",this._readyState=(0,o.isInBrowser)()?o.WalletReadyState.Loading:o.WalletReadyState.NotFound,this._state=o.AdapterState.Loading,this._supportNewTronProtocol=!1,this._tronLinkMessageHandler=t=>{var e,n,r,i,s;const a=null===(e=t.data)||void 0===e?void 0:e.message;if(a)if("accountsChanged"===a.action)setTimeout((()=>{var t;const e=this.address||"";if(null===(t=this._wallet)||void 0===t?void 0:t.ready){const t=a.data.address;this.setAddress(t),this.setState(o.AdapterState.Connected)}else this.setAddress(null),this.setState(o.AdapterState.Disconnect);this.emit("accountsChanged",this.address||"",e),!e&&this.address?this.emit("connect",this.address):e&&!this.address&&this.emit("disconnect")}),200);else if("setNode"===a.action)this.emit("chainChanged",{chainId:(null===(r=null===(n=a.data)||void 0===n?void 0:n.node)||void 0===r?void 0:r.chainId)||""});else if("connect"===a.action){const t=(null===(s=null===(i=this._wallet.tronWeb)||void 0===i?void 0:i.defaultAddress)||void 0===s?void 0:s.base58)||"";this.setAddress(t),this.setState(o.AdapterState.Connected),this.emit("connect",t)}else"disconnect"===a.action&&(this.setAddress(null),this.setState(o.AdapterState.Disconnect),this.emit("disconnect"))},this._onChainChanged=t=>{this.emit("chainChanged",t)},this._onAccountsChanged=()=>{var t,e,n;const r=this.address||"",i=(null===(t=this._wallet)||void 0===t?void 0:t.tronWeb)&&(null===(n=null===(e=this._wallet)||void 0===e?void 0:e.tronWeb.defaultAddress)||void 0===n?void 0:n.base58)||"";if(i){const t=i;this.setAddress(t),this.setState(o.AdapterState.Connected)}else this.setAddress(null),this.setState(o.AdapterState.Disconnect);this.emit("accountsChanged",this.address||"",r),!r&&this.address?this.emit("connect",this.address):r&&!this.address&&this.emit("disconnect")},this._checkPromise=null,this._updateWallet=()=>{var t,e,n,r,i,s,a,l;let d=this.state,c=this.address;(0,o.isInMobileBrowser)()?(window.tronLink?this._wallet=window.tronLink:this._wallet={ready:!!(null===(t=window.tronWeb)||void 0===t?void 0:t.defaultAddress),tronWeb:window.tronWeb,request:()=>Promise.resolve(!0)},c=(null===(n=null===(e=this._wallet.tronWeb)||void 0===e?void 0:e.defaultAddress)||void 0===n?void 0:n.base58)||null,d=c?o.AdapterState.Connected:o.AdapterState.Disconnect):window.tron&&window.tron.isTronLink?(this._supportNewTronProtocol=!0,this._wallet=window.tron,this._listenTronEvent(),c=this._wallet.tronWeb&&(null===(i=null===(r=this._wallet.tronWeb)||void 0===r?void 0:r.defaultAddress)||void 0===i?void 0:i.base58)||null,d=c?o.AdapterState.Connected:o.AdapterState.Disconnect):window.tronLink?(this._wallet=window.tronLink,this._listenTronLinkEvent(),c=(null===(a=null===(s=this._wallet.tronWeb)||void 0===s?void 0:s.defaultAddress)||void 0===a?void 0:a.base58)||null,d=this._wallet.ready?o.AdapterState.Connected:o.AdapterState.Disconnect):window.tronWeb?(this._wallet={ready:window.tronWeb.ready,tronWeb:window.tronWeb,request:()=>Promise.resolve(!0)},c=(null===(l=this._wallet.tronWeb.defaultAddress)||void 0===l?void 0:l.base58)||null,d=this._wallet.ready?o.AdapterState.Connected:o.AdapterState.Disconnect):(this._wallet=null,c=null,d=o.AdapterState.NotFound),(0,o.isInMobileBrowser)()&&d===o.AdapterState.Disconnect&&this.checkForWalletReadyForApp(),this.setAddress(c),this.setState(d)},this.checkReadyInterval=null;const{checkTimeout:n=3e4,dappIcon:r="",dappName:s="",openUrlWhenWalletNotFound:a=!0,openTronLinkAppOnMobile:l=!0}=t;if("number"!=typeof n)throw new Error("[TronLinkAdapter] config.checkTimeout should be a number");if(this.config={checkTimeout:n,openTronLinkAppOnMobile:l,openUrlWhenWalletNotFound:a,dappIcon:r,dappName:s},this._connecting=!1,this._wallet=null,this._address=null,!(0,o.isInBrowser)())return this._readyState=o.WalletReadyState.NotFound,void this.setState(o.AdapterState.NotFound);(0,i.supportTron)()||(0,o.isInMobileBrowser)()&&(window.tronLink||window.tronWeb)?(this._readyState=o.WalletReadyState.Found,this._updateWallet()):this._checkWallet().then((()=>{this.connected&&this.emit("connect",this.address||"")}))}get address(){return this._address}get state(){return this._state}get readyState(){return this._readyState}get connecting(){return this._connecting}network(){return n(this,void 0,void 0,(function*(){var t;try{if(yield this._checkWallet(),this.state!==o.AdapterState.Connected)throw new o.WalletDisconnectedError;const e=(null===(t=this._wallet)||void 0===t?void 0:t.tronWeb)||window.tronWeb;if(!e)throw new o.WalletDisconnectedError;try{return yield s(e)}catch(t){throw new o.WalletGetNetworkError(null==t?void 0:t.message,t)}}catch(t){throw this.emit("error",t),t}}))}connect(){return n(this,void 0,void 0,(function*(){var t,e;try{if(this.checkIfOpenTronLink(),this.connected||this.connecting)return;if(yield this._checkWallet(),this.state===o.AdapterState.NotFound)throw!1!==this.config.openUrlWhenWalletNotFound&&(0,o.isInBrowser)()&&window.open(this.url,"_blank"),new o.WalletNotFoundError;if(!this._wallet)return;if(this._connecting=!0,this._supportNewTronProtocol){const t=this._wallet;try{const e=(yield t.request({method:"eth_requestAccounts"}))[0];this.setAddress(e),this.setState(o.AdapterState.Connected),this._listenTronEvent(),this._wallet.tronWeb||(yield(0,i.waitTronwebReady)(this._wallet))}catch(t){let e=(null==t?void 0:t.message)||t||"Connect TronLink wallet failed.";throw-32002===t.code&&(e="The same DApp has already initiated a request to connect to TronLink wallet, and the pop-up window has not been closed."),4001===t.code&&(e="The user rejected connection."),new o.WalletConnectionError(e,t)}}else if(window.tronLink){const e=this._wallet;try{const t=yield e.request({method:"tron_requestAccounts"});if(!t)throw new o.WalletConnectionError("TronLink wallet is locked or no wallet account is avaliable.");if(4e3===t.code)throw new o.WalletConnectionError("The same DApp has already initiated a request to connect to TronLink wallet, and the pop-up window has not been closed.");if(4001===t.code)throw new o.WalletConnectionError("The user rejected connection.")}catch(t){throw new o.WalletConnectionError(null==t?void 0:t.message,t)}const n=(null===(t=e.tronWeb.defaultAddress)||void 0===t?void 0:t.base58)||"";this.setAddress(n),this.setState(o.AdapterState.Connected),this._listenTronLinkEvent()}else{if(!window.tronWeb)throw new o.WalletConnectionError("Cannot connect wallet.");{const t=(null===(e=this._wallet.tronWeb.defaultAddress)||void 0===e?void 0:e.base58)||"";this.setAddress(t),this.setState(o.AdapterState.Connected)}}this.connected&&this.emit("connect",this.address||"")}catch(t){throw this.emit("error",t),t}finally{this._connecting=!1}}))}disconnect(){return n(this,void 0,void 0,(function*(){this._supportNewTronProtocol?this._stopListenTronEvent():this._stopListenTronLinkEvent(),this.state===o.AdapterState.Connected&&(this.setAddress(null),this.setState(o.AdapterState.Disconnect),this.emit("disconnect"))}))}signTransaction(t,e){return n(this,void 0,void 0,(function*(){try{const n=yield this.checkAndGetWallet();try{return yield n.tronWeb.trx.sign(t,e)}catch(t){throw t instanceof Error?new o.WalletSignTransactionError(t.message,t):new o.WalletSignTransactionError(t,new Error(t))}}catch(t){throw this.emit("error",t),t}}))}multiSign(t,e,r){return n(this,void 0,void 0,(function*(){try{const n=yield this.checkAndGetWallet();try{return yield n.tronWeb.trx.multiSign(t,e,r)}catch(t){throw t instanceof Error?new o.WalletSignTransactionError(t.message,t):new o.WalletSignTransactionError(t,new Error(t))}}catch(t){throw this.emit("error",t),t}}))}signMessage(t,e){return n(this,void 0,void 0,(function*(){try{const n=yield this.checkAndGetWallet();try{return yield n.tronWeb.trx.signMessageV2(t,e)}catch(t){throw t instanceof Error?new o.WalletSignMessageError(t.message,t):new o.WalletSignMessageError(t,new Error(t))}}catch(t){throw this.emit("error",t),t}}))}switchChain(t){return n(this,void 0,void 0,(function*(){try{if(yield this._checkWallet(),this.state===o.AdapterState.NotFound)throw!1!==this.config.openUrlWhenWalletNotFound&&(0,o.isInBrowser)()&&window.open(this.url,"_blank"),new o.WalletNotFoundError;if(!this._supportNewTronProtocol)throw new o.WalletSwitchChainError("Current version of TronLink doesn't support switch chain operation.");const e=this._wallet;try{yield e.request({method:"wallet_switchEthereumChain",params:[{chainId:t}]})}catch(t){throw new o.WalletSwitchChainError((null==t?void 0:t.message)||t,t instanceof Error?t:new Error(t))}}catch(t){throw this.emit("error",t),t}}))}checkAndGetWallet(){return n(this,void 0,void 0,(function*(){if(this.checkIfOpenTronLink(),yield this._checkWallet(),this.state!==o.AdapterState.Connected)throw new o.WalletDisconnectedError;const t=this._wallet;if(!t||!t.tronWeb)throw new o.WalletDisconnectedError;return t}))}_listenTronLinkEvent(){this._stopListenTronLinkEvent(),window.addEventListener("message",this._tronLinkMessageHandler)}_stopListenTronLinkEvent(){window.removeEventListener("message",this._tronLinkMessageHandler)}checkIfOpenTronLink(){const{dappName:t="",dappIcon:e=""}=this.config;if(!1!==this.config.openTronLinkAppOnMobile&&(0,i.openTronLink)({dappIcon:e,dappName:t}))throw new o.WalletNotFoundError}_listenTronEvent(){this._stopListenTronEvent(),this._stopListenTronLinkEvent();const t=this._wallet;t.on("chainChanged",this._onChainChanged),t.on("accountsChanged",this._onAccountsChanged)}_stopListenTronEvent(){const t=this._wallet;t.removeListener("chainChanged",this._onChainChanged),t.removeListener("accountsChanged",this._onAccountsChanged)}_checkWallet(){if(this.readyState===o.WalletReadyState.Found)return Promise.resolve(!0);if(this._checkPromise)return this._checkPromise;const t=Math.floor(20),e=Math.floor(this.config.checkTimeout/100);let n,r=0;return this._checkPromise=new Promise((s=>{const a=()=>{r++;const a=r<t&&!(0,o.isInMobileBrowser)()?(0,i.supportTron)():(0,i.supportTronLink)();(a||r>e)&&(n&&clearInterval(n),this._readyState=a?o.WalletReadyState.Found:o.WalletReadyState.NotFound,this._updateWallet(),this.emit("readyStateChanged",this.readyState),s(a))};n=setInterval(a,100),a()})),this._checkPromise}checkForWalletReadyForApp(){if(this.checkReadyInterval)return;let t=0;const e=Math.floor(this.config.checkTimeout/200);this.checkReadyInterval=setInterval((()=>{var n,o;(window.tronLink?null===(n=window.tronLink.tronWeb)||void 0===n?void 0:n.defaultAddress:null===(o=window.tronWeb)||void 0===o?void 0:o.defaultAddress)?(this.checkReadyInterval&&clearInterval(this.checkReadyInterval),this.checkReadyInterval=null,this._updateWallet(),this.emit("connect",this.address||"")):t>e?(this.checkReadyInterval&&clearInterval(this.checkReadyInterval),this.checkReadyInterval=null):t++}),200)}setAddress(t){this._address=t}setState(t){t!==this.state&&(this._state=t,this.emit("stateChanged",t))}}e.TronLinkAdapter=a}(W);var N={};Object.defineProperty(N,"__esModule",{value:!0}),function(e){var n=t&&t.__createBinding||(Object.create?function(t,e,n,o){void 0===o&&(o=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,o,r)}:function(t,e,n,o){void 0===o&&(o=n),t[o]=e[n]}),o=t&&t.__exportStar||function(t,e){for(var o in t)"default"===o||Object.prototype.hasOwnProperty.call(e,o)||n(e,t,o)};Object.defineProperty(e,"__esModule",{value:!0}),o(W,e),o(N,e),o(b,e)}(m);var C={};return function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.isTrustApp=void 0,t.supportTrust=function(){return"undefined"!=typeof window&&!(!window.trustwallet||!window.trustwallet.tronLink)},t.openTrustWallet=function(){if(!(0,t.isTrustApp)()&&(0,e.isInMobileBrowser)())return window.location.href="https://link.trustwallet.com?source="+encodeURIComponent(window.location.href),!0;return!1};const e=r;t.isTrustApp=function(){return"undefined"!=typeof window&&void 0!==window.navigator&&/Trust/i.test(window.navigator.userAgent)}}(C),function(e){var n=t&&t.__awaiter||function(t,e,n,o){return new(n||(n=Promise))((function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}l((o=o.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.TrustAdapter=e.TrustAdapterName=void 0;const o=r,i=m,s=C;e.TrustAdapterName="Trust";class a extends o.Adapter{constructor(t={}){super(),this.name=e.TrustAdapterName,this.url="https://trustwallet.com",this.icon="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTgiIGhlaWdodD0iNjUiIHZpZXdCb3g9IjAgMCA1OCA2NSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAgOS4zODk0OUwyOC44OTA3IDBWNjUuMDA0MkM4LjI1NDUgNTYuMzM2OSAwIDM5LjcyNDggMCAzMC4zMzUzVjkuMzg5NDlaIiBmaWxsPSIjMDUwMEZGIi8+CjxwYXRoIGQ9Ik01Ny43ODIyIDkuMzg5NDlMMjguODkxNSAwVjY1LjAwNDJDNDkuNTI3NyA1Ni4zMzY5IDU3Ljc4MjIgMzkuNzI0OCA1Ny43ODIyIDMwLjMzNTNWOS4zODk0OVoiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8yMjAxXzY5NDIpIi8+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMjIwMV82OTQyIiB4MT0iNTEuMzYxNSIgeTE9Ii00LjE1MjkzIiB4Mj0iMjkuNTM4NCIgeTI9IjY0LjUxNDciIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agb2Zmc2V0PSIwLjAyMTEyIiBzdG9wLWNvbG9yPSIjMDAwMEZGIi8+CjxzdG9wIG9mZnNldD0iMC4wNzYyNDIzIiBzdG9wLWNvbG9yPSIjMDA5NEZGIi8+CjxzdG9wIG9mZnNldD0iMC4xNjMwODkiIHN0b3AtY29sb3I9IiM0OEZGOTEiLz4KPHN0b3Agb2Zmc2V0PSIwLjQyMDA0OSIgc3RvcC1jb2xvcj0iIzAwOTRGRiIvPgo8c3RvcCBvZmZzZXQ9IjAuNjgyODg2IiBzdG9wLWNvbG9yPSIjMDAzOEZGIi8+CjxzdG9wIG9mZnNldD0iMC45MDI0NjUiIHN0b3AtY29sb3I9IiMwNTAwRkYiLz4KPC9saW5lYXJHcmFkaWVudD4KPC9kZWZzPgo8L3N2Zz4K",this._readyState=(0,o.isInBrowser)()?o.WalletReadyState.Loading:o.WalletReadyState.NotFound,this._state=o.AdapterState.Loading,this.messageHandler=t=>{var e,n,r;const i=null===(e=t.data)||void 0===e?void 0:e.message;if(i)if("accountsChanged"===i.action)setTimeout((()=>{var t;const e=this.address||"";if(null===(t=this._wallet)||void 0===t?void 0:t.ready){const t=i.data.address;this.setAddress(t),this.setState(o.AdapterState.Connected)}else this.setAddress(null),this.setState(o.AdapterState.Disconnect);(this.address||"")!==e&&this.emit("accountsChanged",this.address||"",e),!e&&this.address?this.emit("connect",this.address):e&&!this.address&&this.emit("disconnect")}),200);else if("connect"===i.action){const t=this.connected,e=this.address||"",i=(null===(r=null===(n=this._wallet.tronWeb)||void 0===n?void 0:n.defaultAddress)||void 0===r?void 0:r.base58)||"";this.setAddress(i),this.setState(o.AdapterState.Connected),t?i!==e&&this.emit("accountsChanged",this.address||"",e):this.emit("connect",i)}else"disconnect"===i.action&&(this.setAddress(null),this.setState(o.AdapterState.Disconnect),this.emit("disconnect"))},this._checkPromise=null,this._updateWallet=()=>{var t,e;let n=this.state,r=this.address;(0,s.supportTrust)()?(this._wallet=window.trustwallet.tronLink,this._listenEvent(),r=(null===(e=null===(t=this._wallet.tronWeb)||void 0===t?void 0:t.defaultAddress)||void 0===e?void 0:e.base58)||null,n=this._wallet.ready?o.AdapterState.Connected:o.AdapterState.Disconnect):(this._wallet=null,r=null,n=o.AdapterState.NotFound),this.setAddress(r),this.setState(n)};const{checkTimeout:n=2e3,openUrlWhenWalletNotFound:r=!0,openAppWithDeeplink:i=!0}=t;if("number"!=typeof n)throw new Error("[TrustAdapter] config.checkTimeout should be a number");if(this.config={checkTimeout:n,openAppWithDeeplink:i,openUrlWhenWalletNotFound:r},this._connecting=!1,this._wallet=null,this._address=null,!(0,o.isInBrowser)())return this._readyState=o.WalletReadyState.NotFound,void this.setState(o.AdapterState.NotFound);(0,s.supportTrust)()?(this._readyState=o.WalletReadyState.Found,this._updateWallet()):this._checkWallet().then((()=>{this.connected&&this.emit("connect",this.address||"")}))}get address(){return this._address}get state(){return this._state}get readyState(){return this._readyState}get connecting(){return this._connecting}network(){return n(this,void 0,void 0,(function*(){try{if(yield this._checkWallet(),this.state!==o.AdapterState.Connected)throw new o.WalletDisconnectedError;const t=this._wallet;if(!t||!t.tronWeb)throw new o.WalletDisconnectedError;try{return yield(0,i.getNetworkInfoByTronWeb)(t.tronWeb)}catch(t){throw new o.WalletGetNetworkError(null==t?void 0:t.message,t)}}catch(t){throw this.emit("error",t),t}}))}connect(){return n(this,void 0,void 0,(function*(){var t;try{if(this.checkIfopenTrustWallet(),this.connected||this.connecting)return;if(yield this._checkWallet(),this.state===o.AdapterState.NotFound)throw!1!==this.config.openUrlWhenWalletNotFound&&(0,o.isInBrowser)()&&window.open(this.url,"_blank"),new o.WalletNotFoundError;if(!this._wallet)return;this._connecting=!0;const e=this._wallet;try{const t=yield e.request({method:"tron_requestAccounts"});if(!t)throw new o.WalletConnectionError("Request connect error.");if(4e3===t.code)throw new o.WalletConnectionError("The same DApp has already initiated a request to connect to trustwallet, and the pop-up window has not been closed.");if(4001===t.code)throw new o.WalletConnectionError("The user rejected connection.")}catch(t){throw new o.WalletConnectionError(null==t?void 0:t.message,t)}const n=(null===(t=e.tronWeb.defaultAddress)||void 0===t?void 0:t.base58)||"";this.setAddress(n),this.setState(o.AdapterState.Connected),this._listenEvent(),this.connected&&this.emit("connect",this.address||"")}catch(t){throw this.emit("error",t),t}finally{this._connecting=!1}}))}disconnect(){return n(this,void 0,void 0,(function*(){this._stopListenEvent(),this.state===o.AdapterState.Connected&&(this.setAddress(null),this.setState(o.AdapterState.Disconnect),this.emit("disconnect"))}))}signTransaction(t,e){return n(this,void 0,void 0,(function*(){try{const n=yield this.checkAndGetWallet();try{return yield n.tronWeb.trx.sign(t,e)}catch(t){throw t instanceof Error?new o.WalletSignTransactionError(t.message,t):new o.WalletSignTransactionError(t,new Error(t))}}catch(t){throw this.emit("error",t),t}}))}multiSign(t,e,r){return n(this,void 0,void 0,(function*(){try{const n=yield this.checkAndGetWallet();try{return yield n.tronWeb.trx.multiSign(t,e,r)}catch(t){throw t instanceof Error?new o.WalletSignTransactionError(t.message,t):new o.WalletSignTransactionError(t,new Error(t))}}catch(t){throw this.emit("error",t),t}}))}signMessage(t,e){return n(this,void 0,void 0,(function*(){try{const n=yield this.checkAndGetWallet();try{return yield n.tronWeb.trx.signMessageV2(t,e)}catch(t){throw t instanceof Error?new o.WalletSignMessageError(t.message,t):new o.WalletSignMessageError(t,new Error(t))}}catch(t){throw this.emit("error",t),t}}))}checkAndGetWallet(){return n(this,void 0,void 0,(function*(){if(this.checkIfopenTrustWallet(),yield this._checkWallet(),this.state!==o.AdapterState.Connected)throw new o.WalletDisconnectedError;const t=this._wallet;if(!t||!t.tronWeb)throw new o.WalletDisconnectedError;return t}))}_listenEvent(){this._stopListenEvent(),window.addEventListener("message",this.messageHandler)}_stopListenEvent(){window.removeEventListener("message",this.messageHandler)}checkIfopenTrustWallet(){if(!1!==this.config.openAppWithDeeplink&&(0,s.openTrustWallet)())throw new o.WalletNotFoundError}_checkWallet(){if(this.readyState===o.WalletReadyState.Found)return Promise.resolve(!0);if(this._checkPromise)return this._checkPromise;const t=Math.floor(this.config.checkTimeout/100);let e,n=0;return this._checkPromise=new Promise((r=>{const i=()=>{n++;const i=(0,s.supportTrust)();(i||n>t)&&(e&&clearInterval(e),this._readyState=i?o.WalletReadyState.Found:o.WalletReadyState.NotFound,this._updateWallet(),this.emit("readyStateChanged",this.readyState),r(i))};e=setInterval(i,100),i()})),this._checkPromise}setAddress(t){this._address=t}setState(t){t!==this.state&&(this._state=t,this.emit("stateChanged",t))}}e.TrustAdapter=a}(o),function(e){var n=t&&t.__createBinding||(Object.create?function(t,e,n,o){void 0===o&&(o=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,o,r)}:function(t,e,n,o){void 0===o&&(o=n),t[o]=e[n]}),r=t&&t.__exportStar||function(t,e){for(var o in t)"default"===o||Object.prototype.hasOwnProperty.call(e,o)||n(e,t,o)};Object.defineProperty(e,"__esModule",{value:!0}),r(o,e),r(C,e)}(n),e(n)}));
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tronweb3/tronwallet-adapter-trust",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Wallet adapter for Trust Extension.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"TRON",
|
|
7
|
+
"TronWeb",
|
|
8
|
+
"Trust Wallet"
|
|
9
|
+
],
|
|
10
|
+
"author": "tronweb3",
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "https://github.com/tronweb3/tronwallet-adapter"
|
|
14
|
+
},
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"type": "module",
|
|
17
|
+
"sideEffects": false,
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=16",
|
|
20
|
+
"pnpm": ">=7"
|
|
21
|
+
},
|
|
22
|
+
"main": "./lib/cjs/index.js",
|
|
23
|
+
"module": "./lib/esm/index.js",
|
|
24
|
+
"types": "./lib/types/index.d.ts",
|
|
25
|
+
"exports": {
|
|
26
|
+
"require": "./lib/cjs/index.js",
|
|
27
|
+
"import": "./lib/esm/index.js",
|
|
28
|
+
"types": "./lib/types/index.d.ts"
|
|
29
|
+
},
|
|
30
|
+
"files": [
|
|
31
|
+
"lib",
|
|
32
|
+
"src",
|
|
33
|
+
"LICENSE"
|
|
34
|
+
],
|
|
35
|
+
"publishConfig": {
|
|
36
|
+
"access": "public"
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@tronweb3/tronwallet-abstract-adapter": "^1.1.9",
|
|
40
|
+
"@tronweb3/tronwallet-adapter-tronlink": "^1.1.12"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@testing-library/dom": "^8.20.0",
|
|
44
|
+
"jest-environment-jsdom": "^29.3.1",
|
|
45
|
+
"shx": "^0.3.4"
|
|
46
|
+
},
|
|
47
|
+
"scripts": {
|
|
48
|
+
"clean": "shx mkdir -p lib && shx rm -rf lib",
|
|
49
|
+
"package": "shx echo '{ \"type\": \"commonjs\" }' > lib/cjs/package.json",
|
|
50
|
+
"test": "jest",
|
|
51
|
+
"test:coverage": "jest --coverage",
|
|
52
|
+
"build:umd": "node ../../../scripts/build-umd.js"
|
|
53
|
+
}
|
|
54
|
+
}
|
package/src/adapter.ts
ADDED
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Adapter,
|
|
3
|
+
AdapterState,
|
|
4
|
+
isInBrowser,
|
|
5
|
+
WalletReadyState,
|
|
6
|
+
WalletSignMessageError,
|
|
7
|
+
WalletNotFoundError,
|
|
8
|
+
WalletDisconnectedError,
|
|
9
|
+
WalletConnectionError,
|
|
10
|
+
WalletSignTransactionError,
|
|
11
|
+
WalletGetNetworkError,
|
|
12
|
+
} from '@tronweb3/tronwallet-abstract-adapter';
|
|
13
|
+
import type {
|
|
14
|
+
Transaction,
|
|
15
|
+
SignedTransaction,
|
|
16
|
+
AdapterName,
|
|
17
|
+
BaseAdapterConfig,
|
|
18
|
+
Network,
|
|
19
|
+
} from '@tronweb3/tronwallet-abstract-adapter';
|
|
20
|
+
import type {
|
|
21
|
+
AccountsChangedEventData,
|
|
22
|
+
TronLinkMessageEvent,
|
|
23
|
+
TronLinkWallet,
|
|
24
|
+
} from '@tronweb3/tronwallet-adapter-tronlink';
|
|
25
|
+
import { getNetworkInfoByTronWeb } from '@tronweb3/tronwallet-adapter-tronlink';
|
|
26
|
+
import { openTrustWallet, supportTrust } from './utils.js';
|
|
27
|
+
|
|
28
|
+
declare global {
|
|
29
|
+
interface Window {
|
|
30
|
+
trustwallet?: {
|
|
31
|
+
tronLink: TronLinkWallet;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface TrustAdapterConfig extends BaseAdapterConfig {
|
|
37
|
+
/**
|
|
38
|
+
* Timeout in millisecond for checking if Trust wallet exists.
|
|
39
|
+
* Default is 2 * 1000ms
|
|
40
|
+
*/
|
|
41
|
+
checkTimeout?: number;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Set if open app using DeepLink.
|
|
45
|
+
* Default is true.
|
|
46
|
+
*/
|
|
47
|
+
openAppWithDeeplink?: boolean;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export const TrustAdapterName = 'Trust' as AdapterName<'Trust'>;
|
|
51
|
+
|
|
52
|
+
export class TrustAdapter extends Adapter {
|
|
53
|
+
name = TrustAdapterName;
|
|
54
|
+
url = 'https://trustwallet.com';
|
|
55
|
+
icon =
|
|
56
|
+
'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTgiIGhlaWdodD0iNjUiIHZpZXdCb3g9IjAgMCA1OCA2NSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAgOS4zODk0OUwyOC44OTA3IDBWNjUuMDA0MkM4LjI1NDUgNTYuMzM2OSAwIDM5LjcyNDggMCAzMC4zMzUzVjkuMzg5NDlaIiBmaWxsPSIjMDUwMEZGIi8+CjxwYXRoIGQ9Ik01Ny43ODIyIDkuMzg5NDlMMjguODkxNSAwVjY1LjAwNDJDNDkuNTI3NyA1Ni4zMzY5IDU3Ljc4MjIgMzkuNzI0OCA1Ny43ODIyIDMwLjMzNTNWOS4zODk0OVoiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8yMjAxXzY5NDIpIi8+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMjIwMV82OTQyIiB4MT0iNTEuMzYxNSIgeTE9Ii00LjE1MjkzIiB4Mj0iMjkuNTM4NCIgeTI9IjY0LjUxNDciIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agb2Zmc2V0PSIwLjAyMTEyIiBzdG9wLWNvbG9yPSIjMDAwMEZGIi8+CjxzdG9wIG9mZnNldD0iMC4wNzYyNDIzIiBzdG9wLWNvbG9yPSIjMDA5NEZGIi8+CjxzdG9wIG9mZnNldD0iMC4xNjMwODkiIHN0b3AtY29sb3I9IiM0OEZGOTEiLz4KPHN0b3Agb2Zmc2V0PSIwLjQyMDA0OSIgc3RvcC1jb2xvcj0iIzAwOTRGRiIvPgo8c3RvcCBvZmZzZXQ9IjAuNjgyODg2IiBzdG9wLWNvbG9yPSIjMDAzOEZGIi8+CjxzdG9wIG9mZnNldD0iMC45MDI0NjUiIHN0b3AtY29sb3I9IiMwNTAwRkYiLz4KPC9saW5lYXJHcmFkaWVudD4KPC9kZWZzPgo8L3N2Zz4K';
|
|
57
|
+
|
|
58
|
+
config: Required<TrustAdapterConfig>;
|
|
59
|
+
|
|
60
|
+
private _readyState: WalletReadyState = isInBrowser() ? WalletReadyState.Loading : WalletReadyState.NotFound;
|
|
61
|
+
private _state: AdapterState = AdapterState.Loading;
|
|
62
|
+
private _connecting: boolean;
|
|
63
|
+
private _wallet: TronLinkWallet | null;
|
|
64
|
+
private _address: string | null;
|
|
65
|
+
|
|
66
|
+
constructor(config: TrustAdapterConfig = {}) {
|
|
67
|
+
super();
|
|
68
|
+
const { checkTimeout = 2 * 1000, openUrlWhenWalletNotFound = true, openAppWithDeeplink = true } = config;
|
|
69
|
+
|
|
70
|
+
if (typeof checkTimeout !== 'number') {
|
|
71
|
+
throw new Error('[TrustAdapter] config.checkTimeout should be a number');
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
this.config = {
|
|
75
|
+
checkTimeout,
|
|
76
|
+
openAppWithDeeplink,
|
|
77
|
+
openUrlWhenWalletNotFound,
|
|
78
|
+
};
|
|
79
|
+
this._connecting = false;
|
|
80
|
+
this._wallet = null;
|
|
81
|
+
this._address = null;
|
|
82
|
+
|
|
83
|
+
if (!isInBrowser()) {
|
|
84
|
+
this._readyState = WalletReadyState.NotFound;
|
|
85
|
+
this.setState(AdapterState.NotFound);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (supportTrust()) {
|
|
89
|
+
this._readyState = WalletReadyState.Found;
|
|
90
|
+
this._updateWallet();
|
|
91
|
+
} else {
|
|
92
|
+
this._checkWallet().then(() => {
|
|
93
|
+
if (this.connected) {
|
|
94
|
+
this.emit('connect', this.address || '');
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
get address() {
|
|
101
|
+
return this._address;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
get state() {
|
|
105
|
+
return this._state;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
get readyState() {
|
|
109
|
+
return this._readyState;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
get connecting() {
|
|
113
|
+
return this._connecting;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Get network information used by Trust.
|
|
118
|
+
* @returns {Network} Current network information.
|
|
119
|
+
*/
|
|
120
|
+
async network(): Promise<Network> {
|
|
121
|
+
try {
|
|
122
|
+
await this._checkWallet();
|
|
123
|
+
if (this.state !== AdapterState.Connected) throw new WalletDisconnectedError();
|
|
124
|
+
const wallet = this._wallet;
|
|
125
|
+
if (!wallet || !wallet.tronWeb) throw new WalletDisconnectedError();
|
|
126
|
+
try {
|
|
127
|
+
return await getNetworkInfoByTronWeb(wallet.tronWeb);
|
|
128
|
+
} catch (e: any) {
|
|
129
|
+
throw new WalletGetNetworkError(e?.message, e);
|
|
130
|
+
}
|
|
131
|
+
} catch (e: any) {
|
|
132
|
+
this.emit('error', e);
|
|
133
|
+
throw e;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
async connect(): Promise<void> {
|
|
138
|
+
try {
|
|
139
|
+
this.checkIfopenTrustWallet();
|
|
140
|
+
if (this.connected || this.connecting) return;
|
|
141
|
+
await this._checkWallet();
|
|
142
|
+
if (this.state === AdapterState.NotFound) {
|
|
143
|
+
if (this.config.openUrlWhenWalletNotFound !== false && isInBrowser()) {
|
|
144
|
+
window.open(this.url, '_blank');
|
|
145
|
+
}
|
|
146
|
+
throw new WalletNotFoundError();
|
|
147
|
+
}
|
|
148
|
+
if (!this._wallet) return;
|
|
149
|
+
this._connecting = true;
|
|
150
|
+
const wallet = this._wallet as TronLinkWallet;
|
|
151
|
+
try {
|
|
152
|
+
const res = await wallet.request({ method: 'tron_requestAccounts' });
|
|
153
|
+
if (!res) {
|
|
154
|
+
throw new WalletConnectionError('Request connect error.');
|
|
155
|
+
}
|
|
156
|
+
if (res.code === 4000) {
|
|
157
|
+
throw new WalletConnectionError(
|
|
158
|
+
'The same DApp has already initiated a request to connect to trustwallet, and the pop-up window has not been closed.'
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
if (res.code === 4001) {
|
|
162
|
+
throw new WalletConnectionError('The user rejected connection.');
|
|
163
|
+
}
|
|
164
|
+
} catch (error: any) {
|
|
165
|
+
throw new WalletConnectionError(error?.message, error);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
const address = wallet.tronWeb.defaultAddress?.base58 || '';
|
|
169
|
+
this.setAddress(address);
|
|
170
|
+
this.setState(AdapterState.Connected);
|
|
171
|
+
this._listenEvent();
|
|
172
|
+
this.connected && this.emit('connect', this.address || '');
|
|
173
|
+
} catch (error: any) {
|
|
174
|
+
this.emit('error', error);
|
|
175
|
+
throw error;
|
|
176
|
+
} finally {
|
|
177
|
+
this._connecting = false;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
async disconnect(): Promise<void> {
|
|
182
|
+
this._stopListenEvent();
|
|
183
|
+
if (this.state !== AdapterState.Connected) {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
this.setAddress(null);
|
|
187
|
+
this.setState(AdapterState.Disconnect);
|
|
188
|
+
this.emit('disconnect');
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
async signTransaction(transaction: Transaction, privateKey?: string): Promise<SignedTransaction> {
|
|
192
|
+
try {
|
|
193
|
+
const wallet = await this.checkAndGetWallet();
|
|
194
|
+
|
|
195
|
+
try {
|
|
196
|
+
return await wallet.tronWeb.trx.sign(transaction, privateKey);
|
|
197
|
+
} catch (error: any) {
|
|
198
|
+
if (error instanceof Error) {
|
|
199
|
+
throw new WalletSignTransactionError(error.message, error);
|
|
200
|
+
} else {
|
|
201
|
+
throw new WalletSignTransactionError(error, new Error(error));
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
} catch (error: any) {
|
|
205
|
+
this.emit('error', error);
|
|
206
|
+
throw error;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
async multiSign(
|
|
211
|
+
transaction: Transaction,
|
|
212
|
+
privateKey?: string | false,
|
|
213
|
+
permissionId?: number
|
|
214
|
+
): Promise<SignedTransaction> {
|
|
215
|
+
try {
|
|
216
|
+
const wallet = await this.checkAndGetWallet();
|
|
217
|
+
|
|
218
|
+
try {
|
|
219
|
+
return await wallet.tronWeb.trx.multiSign(transaction, privateKey, permissionId);
|
|
220
|
+
} catch (error: any) {
|
|
221
|
+
if (error instanceof Error) {
|
|
222
|
+
throw new WalletSignTransactionError(error.message, error);
|
|
223
|
+
} else {
|
|
224
|
+
throw new WalletSignTransactionError(error, new Error(error));
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
} catch (error: any) {
|
|
228
|
+
this.emit('error', error);
|
|
229
|
+
throw error;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
async signMessage(message: string, privateKey?: string): Promise<string> {
|
|
234
|
+
try {
|
|
235
|
+
const wallet = await this.checkAndGetWallet();
|
|
236
|
+
try {
|
|
237
|
+
return await wallet.tronWeb.trx.signMessageV2(message, privateKey);
|
|
238
|
+
} catch (error: any) {
|
|
239
|
+
if (error instanceof Error) {
|
|
240
|
+
throw new WalletSignMessageError(error.message, error);
|
|
241
|
+
} else {
|
|
242
|
+
throw new WalletSignMessageError(error, new Error(error));
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
} catch (error: any) {
|
|
246
|
+
this.emit('error', error);
|
|
247
|
+
throw error;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
private async checkAndGetWallet() {
|
|
252
|
+
this.checkIfopenTrustWallet();
|
|
253
|
+
await this._checkWallet();
|
|
254
|
+
if (this.state !== AdapterState.Connected) throw new WalletDisconnectedError();
|
|
255
|
+
const wallet = this._wallet;
|
|
256
|
+
if (!wallet || !wallet.tronWeb) throw new WalletDisconnectedError();
|
|
257
|
+
return wallet as TronLinkWallet;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
private _listenEvent() {
|
|
261
|
+
this._stopListenEvent();
|
|
262
|
+
window.addEventListener('message', this.messageHandler);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
private _stopListenEvent() {
|
|
266
|
+
window.removeEventListener('message', this.messageHandler);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
private messageHandler = (e: TronLinkMessageEvent) => {
|
|
270
|
+
const message = e.data?.message;
|
|
271
|
+
if (!message) {
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
if (message.action === 'accountsChanged') {
|
|
275
|
+
setTimeout(() => {
|
|
276
|
+
const preAddr = this.address || '';
|
|
277
|
+
if ((this._wallet as TronLinkWallet)?.ready) {
|
|
278
|
+
const address = (message.data as AccountsChangedEventData).address;
|
|
279
|
+
this.setAddress(address);
|
|
280
|
+
this.setState(AdapterState.Connected);
|
|
281
|
+
} else {
|
|
282
|
+
this.setAddress(null);
|
|
283
|
+
this.setState(AdapterState.Disconnect);
|
|
284
|
+
}
|
|
285
|
+
const address = this.address || '';
|
|
286
|
+
if (address !== preAddr) {
|
|
287
|
+
this.emit('accountsChanged', this.address || '', preAddr);
|
|
288
|
+
}
|
|
289
|
+
if (!preAddr && this.address) {
|
|
290
|
+
this.emit('connect', this.address);
|
|
291
|
+
} else if (preAddr && !this.address) {
|
|
292
|
+
this.emit('disconnect');
|
|
293
|
+
}
|
|
294
|
+
}, 200);
|
|
295
|
+
} else if (message.action === 'connect') {
|
|
296
|
+
const isCurConnected = this.connected;
|
|
297
|
+
const preAddress = this.address || '';
|
|
298
|
+
const address = (this._wallet as TronLinkWallet).tronWeb?.defaultAddress?.base58 || '';
|
|
299
|
+
this.setAddress(address);
|
|
300
|
+
this.setState(AdapterState.Connected);
|
|
301
|
+
if (!isCurConnected) {
|
|
302
|
+
this.emit('connect', address);
|
|
303
|
+
} else if (address !== preAddress) {
|
|
304
|
+
this.emit('accountsChanged', this.address || '', preAddress);
|
|
305
|
+
}
|
|
306
|
+
} else if (message.action === 'disconnect') {
|
|
307
|
+
this.setAddress(null);
|
|
308
|
+
this.setState(AdapterState.Disconnect);
|
|
309
|
+
this.emit('disconnect');
|
|
310
|
+
}
|
|
311
|
+
};
|
|
312
|
+
|
|
313
|
+
private checkIfopenTrustWallet() {
|
|
314
|
+
if (this.config.openAppWithDeeplink === false) {
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
if (openTrustWallet()) {
|
|
318
|
+
throw new WalletNotFoundError();
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
private _checkPromise: Promise<boolean> | null = null;
|
|
323
|
+
/**
|
|
324
|
+
* check if wallet exists by interval, the promise only resolve when wallet detected or timeout
|
|
325
|
+
* @returns if trustwallet exists
|
|
326
|
+
*/
|
|
327
|
+
private _checkWallet(): Promise<boolean> {
|
|
328
|
+
if (this.readyState === WalletReadyState.Found) {
|
|
329
|
+
return Promise.resolve(true);
|
|
330
|
+
}
|
|
331
|
+
if (this._checkPromise) {
|
|
332
|
+
return this._checkPromise;
|
|
333
|
+
}
|
|
334
|
+
const interval = 100;
|
|
335
|
+
const maxTimes = Math.floor(this.config.checkTimeout / interval);
|
|
336
|
+
let times = 0,
|
|
337
|
+
timer: ReturnType<typeof setInterval>;
|
|
338
|
+
this._checkPromise = new Promise((resolve) => {
|
|
339
|
+
const check = () => {
|
|
340
|
+
times++;
|
|
341
|
+
const isSupport = supportTrust();
|
|
342
|
+
if (isSupport || times > maxTimes) {
|
|
343
|
+
timer && clearInterval(timer);
|
|
344
|
+
this._readyState = isSupport ? WalletReadyState.Found : WalletReadyState.NotFound;
|
|
345
|
+
this._updateWallet();
|
|
346
|
+
this.emit('readyStateChanged', this.readyState);
|
|
347
|
+
resolve(isSupport);
|
|
348
|
+
}
|
|
349
|
+
};
|
|
350
|
+
timer = setInterval(check, interval);
|
|
351
|
+
check();
|
|
352
|
+
});
|
|
353
|
+
return this._checkPromise;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
private _updateWallet = () => {
|
|
357
|
+
let state = this.state;
|
|
358
|
+
let address = this.address;
|
|
359
|
+
if (supportTrust()) {
|
|
360
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
361
|
+
this._wallet = window.trustwallet!.tronLink;
|
|
362
|
+
this._listenEvent();
|
|
363
|
+
address = this._wallet.tronWeb?.defaultAddress?.base58 || null;
|
|
364
|
+
state = this._wallet.ready ? AdapterState.Connected : AdapterState.Disconnect;
|
|
365
|
+
} else {
|
|
366
|
+
this._wallet = null;
|
|
367
|
+
address = null;
|
|
368
|
+
state = AdapterState.NotFound;
|
|
369
|
+
}
|
|
370
|
+
this.setAddress(address);
|
|
371
|
+
this.setState(state);
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
private setAddress(address: string | null) {
|
|
375
|
+
this._address = address;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
private setState(state: AdapterState) {
|
|
379
|
+
const preState = this.state;
|
|
380
|
+
if (state !== preState) {
|
|
381
|
+
this._state = state;
|
|
382
|
+
this.emit('stateChanged', state);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
package/src/index.ts
ADDED
package/src/utils.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { isInMobileBrowser } from '@tronweb3/tronwallet-abstract-adapter';
|
|
2
|
+
|
|
3
|
+
export function supportTrust() {
|
|
4
|
+
return typeof window !== 'undefined' && !!(window.trustwallet && window.trustwallet.tronLink);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export const isTrustApp = function () {
|
|
8
|
+
if (typeof window !== 'undefined' && typeof window.navigator !== 'undefined') {
|
|
9
|
+
return /Trust/i.test(window.navigator.userAgent);
|
|
10
|
+
}
|
|
11
|
+
return false;
|
|
12
|
+
};
|
|
13
|
+
export function openTrustWallet() {
|
|
14
|
+
if (!isTrustApp() && isInMobileBrowser()) {
|
|
15
|
+
window.location.href = 'https://link.trustwallet.com?source=' + encodeURIComponent(window.location.href);
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return false;
|
|
20
|
+
}
|