wative 1.1.16 → 1.1.18

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.
Files changed (65) hide show
  1. package/lib/account.d.ts +14 -0
  2. package/lib/account.d.ts.map +1 -0
  3. package/lib/assets.d.ts +11 -0
  4. package/lib/assets.d.ts.map +1 -0
  5. package/lib/chain.d.ts +6 -0
  6. package/lib/chain.d.ts.map +1 -0
  7. package/lib/config.d.ts +23 -0
  8. package/lib/config.d.ts.map +1 -0
  9. package/lib/daemon-watcher.js +181 -0
  10. package/lib/home_page.d.ts +4 -0
  11. package/lib/home_page.d.ts.map +1 -0
  12. package/lib/index.d.ts +12 -0
  13. package/lib/index.d.ts.map +1 -0
  14. package/lib/index.esm.js +1 -1
  15. package/lib/index.umd.js +1 -1
  16. package/lib/network.d.ts +28 -0
  17. package/lib/network.d.ts.map +1 -0
  18. package/lib/ssh/client.d.ts +120 -0
  19. package/lib/ssh/client.d.ts.map +1 -0
  20. package/lib/ssh/client_example.d.ts +19 -0
  21. package/lib/ssh/client_example.d.ts.map +1 -0
  22. package/lib/ssh/client_test.d.ts +27 -0
  23. package/lib/ssh/client_test.d.ts.map +1 -0
  24. package/lib/ssh/config_manager.d.ts +55 -0
  25. package/lib/ssh/config_manager.d.ts.map +1 -0
  26. package/lib/ssh/config_template.d.ts +52 -0
  27. package/lib/ssh/config_template.d.ts.map +1 -0
  28. package/lib/ssh/index.d.ts +8 -0
  29. package/lib/ssh/index.d.ts.map +1 -0
  30. package/lib/ssh/remote_server_example.d.ts +16 -0
  31. package/lib/ssh/remote_server_example.d.ts.map +1 -0
  32. package/lib/ssh/service_manager.d.ts +119 -0
  33. package/lib/ssh/service_manager.d.ts.map +1 -0
  34. package/lib/ssh/types.d.ts +45 -0
  35. package/lib/ssh/types.d.ts.map +1 -0
  36. package/lib/ssh/utils.d.ts +11 -0
  37. package/lib/ssh/utils.d.ts.map +1 -0
  38. package/lib/ssh/wative_server.d.ts +26 -0
  39. package/lib/ssh/wative_server.d.ts.map +1 -0
  40. package/lib/tools.d.ts +6 -0
  41. package/lib/tools.d.ts.map +1 -0
  42. package/lib/tx_gas_utils.d.ts +18 -0
  43. package/lib/tx_gas_utils.d.ts.map +1 -0
  44. package/lib/utils.d.ts +49 -0
  45. package/lib/utils.d.ts.map +1 -0
  46. package/lib/wative.d.ts +4 -0
  47. package/lib/wative.d.ts.map +1 -0
  48. package/lib/wative.esm.js +1 -1
  49. package/lib/wative.umd.js +1 -1
  50. package/lib/web3.d.ts +59 -0
  51. package/lib/web3.d.ts.map +1 -0
  52. package/package.json +10 -6
  53. package/src/daemon-watcher.js +181 -0
  54. package/src/index.ts +22 -6
  55. package/src/ssh/client.rs +221 -0
  56. package/src/ssh/client.ts +389 -0
  57. package/src/ssh/config_manager.ts +317 -0
  58. package/src/ssh/index.ts +50 -36
  59. package/src/ssh/service_manager.ts +684 -0
  60. package/src/ssh/types.ts +35 -1
  61. package/src/ssh/wative_server.ts +1 -2
  62. package/src/wative.ts +566 -122
  63. package/bin/wative-ssh.sh +0 -44
  64. package/lib/wative-ssh.esm.js +0 -1
  65. package/lib/wative-ssh.umd.js +0 -1
package/lib/index.umd.js CHANGED
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("fs"),require("path"),require("figlet"),require("inquirer"),require("web3"),require("@solana/web3.js"),require("@solana/spl-token"),require("@metaplex-foundation/js"),require("bignumber.js")):"function"==typeof define&&define.amd?define(["fs","path","figlet","inquirer","web3","@solana/web3.js","@solana/spl-token","@metaplex-foundation/js","bignumber.js"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).fs,e.path,e.figlet,e.inquirer,e.Web3,e.web3_js,e.splToken,e.js,e.bignumber_js)}(this,function(e,t,n,r,a,s,o,c,u){"use strict";function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function l(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}}),t.default=e,Object.freeze(t)}var d=l(e),p=l(t),f=l(n),h=i(r),m=i(a);function g(e,t,n,r){return new(n||(n=Promise))(function(a,s){function o(e){try{u(r.next(e))}catch(e){s(e)}}function c(e){try{u(r.throw(e))}catch(e){s(e)}}function u(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(o,c)}u((r=r.apply(e,t||[])).next())})}function v(e,t){var n,r,a,s={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return o.next=c(0),o.throw=c(1),o.return=c(2),"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function c(c){return function(u){return function(c){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,c[0]&&(s=0)),s;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return s.label++,{value:c[1],done:!1};case 5:s.label++,r=c[1],c=[0];continue;case 7:c=s.ops.pop(),s.trys.pop();continue;default:if(!(a=s.trys,(a=a.length>0&&a[a.length-1])||6!==c[0]&&2!==c[0])){s=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){s.label=c[1];break}if(6===c[0]&&s.label<a[1]){s.label=a[1],a=c;break}if(a&&s.label<a[2]){s.label=a[2],s.ops.push(c);break}a[2]&&s.ops.pop(),s.trys.pop();continue}c=t.call(e,s)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,u])}}}"function"==typeof SuppressedError&&SuppressedError;var b={},w=function(e){return g(void 0,void 0,void 0,function(){var t;return v(this,function(n){switch(n.label){case 0:return t=new m.default(e),[4,Lt(t.eth.getChainId,[])];case 1:return[2,n.sent()]}})})},y=function(e,t){return g(void 0,void 0,void 0,function(){var n;return v(this,function(r){switch(r.label){case 0:return n=new m.default(t),[4,Lt(n.eth.getBalance,[e])];case 1:return[2,r.sent()]}})})},k=function(e,t){return g(void 0,void 0,void 0,function(){var n;return v(this,function(r){switch(r.label){case 0:return n=new s.Connection(t),[4,Lt(n.getBalance.bind(n),[new s.PublicKey(e)])];case 1:return[2,r.sent()]}})})},S=function(e,t){return g(void 0,void 0,void 0,function(){var n,r,a,s,o;return v(this,function(c){switch(c.label){case 0:return n=new m.default(t),r=new n.eth.Contract([{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"}],e),[4,Lt(r.methods.symbol().call.bind(r),[])];case 1:return a=c.sent(),[4,Lt(r.methods.name().call.bind(r),[])];case 2:return s=c.sent(),[4,Lt(r.methods.decimals().call.bind(r),[])];case 3:return o=c.sent(),a.status&&s.status&&o.status?[2,{status:!0,output:{symbol:a.output,name:s.output,decimals:o.output}}]:[2,{status:!1,output:"Failed to get token info"}]}})})},x=function(e,t){return g(void 0,void 0,void 0,function(){var n,r,a,u,i,l,d;return v(this,function(p){switch(p.label){case 0:return n=new s.Connection(t),r=c.Metaplex.make(n),a=new s.PublicKey(e),[4,Lt(o.getMint,[n,a])];case 1:if(u=p.sent(),i={status:!0,output:{symbol:"",name:"",decimals:""}},!u.status)return[2,{status:!1,output:"Failed to get token decimals"}];i.output.decimals=u.output.decimals,p.label=2;case 2:return p.trys.push([2,6,,7]),l=r.nfts().pdas().metadata({mint:a}),[4,n.getAccountInfo(l)];case 3:return p.sent()?[4,r.nfts().findByMint({mintAddress:a})]:[3,5];case 4:d=p.sent(),i.output.name=d.name,i.output.symbol=d.symbol,p.label=5;case 5:return[3,7];case 6:return p.sent(),[2,{status:!1,output:"Failed to get token name"}];case 7:return[2,i]}})})},N=function(e,t,n){return g(void 0,void 0,void 0,function(){var r,a,s;return v(this,function(o){switch(o.label){case 0:return r=new m.default(n),a=new r.eth.Contract([{constant:!0,inputs:[{name:"who",type:"address"}],name:"balanceOf",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"}],t),[4,Lt(a.methods.balanceOf(e).call.bind(a),[])];case 1:return(s=o.sent()).status?[2,{status:!0,output:s.output}]:[2,{status:!1,output:"Failed to get token balance"}]}})})},P=function(e,t,n){return g(void 0,void 0,void 0,function(){var r,a,c;return v(this,function(u){switch(u.label){case 0:return r=new s.Connection(n),a=o.getAssociatedTokenAddressSync(new s.PublicKey(t),new s.PublicKey(e)),[4,Lt(r.getTokenAccountBalance.bind(r),[a])];case 1:return(c=u.sent()).status?[2,{status:!0,output:c.output.value.amount}]:c.output.includes("could not find account")?[2,{status:!0,output:"0"}]:[2,{status:!1,output:"Failed to get token balance"}]}})})},O=function(e){return g(void 0,void 0,void 0,function(){var t,n,r,a;return v(this,function(o){switch(o.label){case 0:return t=new s.Connection(e),[4,Lt(t.getRecentPrioritizationFees.bind(t),[])];case 1:return(n=o.sent()).status?(r=n.output,a=r.map(function(e){return e.prioritizationFee}).sort(),[2,{status:!0,output:a.length>0?Math.ceil(a.reduce(function(e,t){return e+t})/a.length):1e3}]):[2,{status:!1,output:"Failed to get recent prioritization fees"}]}})})},B=function(e,t){return g(void 0,void 0,void 0,function(){var n,r;return v(this,function(a){switch(a.label){case 0:return n=new s.Connection(t),[4,Lt(n.getAccountInfo.bind(n),[new s.PublicKey(e.toString())])];case 1:return(r=a.sent()).status?[2,{status:!0,output:r.output}]:[2,{status:!1,output:"Failed to get account info"}]}})})},A=function(e,t,n,r,a){return g(void 0,void 0,void 0,function(){var s,o,c,u,i;return v(this,function(l){switch(l.label){case 0:n in b?s=b[n][t]||{}:(b[n]={},s={}),o=0,c=e,l.label=1;case 1:return o<c.length?(u=c[o])?u in s?[3,12]:(i=void 0,"0"!==t?[3,6]:a?[4,y(u,r)]:[3,3]):[3,12]:[3,13];case 2:return i=l.sent(),[3,5];case 3:return[4,k(u,r)];case 4:i=l.sent(),l.label=5;case 5:return[3,10];case 6:return a?[4,N(u,t,r)]:[3,8];case 7:return i=l.sent(),[3,10];case 8:return[4,P(u,t,r)];case 9:i=l.sent(),l.label=10;case 10:return i.status&&(s[u]=i.output),[4,zt(200)];case 11:l.sent(),l.label=12;case 12:return o++,[3,1];case 13:return b[n][t]=s,[2,b]}})})},T=function(e,t,n){for(var r=0;r<t.length;r++)for(var a=t[r],s=0;s<n.length;s++){var o=n[s];try{delete b[e][o][a]}catch(e){}}},C=["abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse","access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act","action","actor","actress","actual","adapt","add","addict","address","adjust","admit","adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent","agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert","alien","all","alley","allow","almost","alone","alpha","already","also","alter","always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger","angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique","anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic","area","arena","argue","arm","armed","armor","army","around","arrange","arrest","arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset","assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction","audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake","aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge","bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain","barrel","base","basic","basket","battle","beach","bean","beauty","because","become","beef","before","begin","behave","behind","believe","below","belt","bench","benefit","best","betray","better","between","beyond","bicycle","bid","bike","bind","biology","bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless","blind","blood","blossom","blouse","blue","blur","blush","board","boat","body","boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss","bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread","breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze","broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb","bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy","butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call","calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas","canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry","cart","case","cash","casino","castle","casual","cat","catalog","catch","category","cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century","cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase","chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child","chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle","citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk","clever","click","client","cliff","climb","clinic","clip","clock","clog","close","cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut","code","coffee","coil","coin","collect","color","column","combine","come","comfort","comic","common","company","concert","conduct","confirm","congress","connect","consider","control","convince","cook","cool","copper","copy","coral","core","corn","correct","cost","cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle","craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek","crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial","cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup","cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad","damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal","debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense","define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny","depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk","despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond","diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur","direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance","divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain","donate","donkey","donor","door","dose","double","dove","draft","dragon","drama","drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop","drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf","dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo","ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow","elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody","embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless","endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough","enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip","era","erase","erode","erosion","error","erupt","escape","essay","essence","estate","eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange","excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit","exotic","expand","expect","expire","explain","expose","express","extend","extra","eye","eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame","family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father","fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female","fence","festival","fetch","fever","few","fiber","fiction","field","figure","file","film","filter","final","find","fine","finger","finish","fire","firm","first","fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor","flee","flight","flip","float","flock","floor","flower","fluid","flush","fly","foam","focus","fog","foil","fold","follow","food","foot","force","forest","forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile","frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen","fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy","gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp","gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture","ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance","glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue","goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown","grab","grace","grain","grant","grape","grass","gravity","great","green","grid","grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt","guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy","harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health","heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden","high","hill","hint","hip","hire","history","hobby","hockey","hold","hole","holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital","host","hotel","hour","hover","hub","huge","human","humble","humor","hundred","hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea","identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune","impact","impose","improve","impulse","inch","include","income","increase","index","indicate","indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury","inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install","intact","interest","into","invest","invite","involve","iron","island","isolate","issue","item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel","job","join","joke","journey","joy","judge","juice","jump","jungle","junior","junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney","kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife","knock","know","lab","label","labor","ladder","lady","lake","lamp","language","laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit","layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal","legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level","liar","liberty","library","license","life","lift","light","like","limb","limit","link","lion","liquid","list","little","live","lizard","load","loan","lobster","local","lock","logic","lonely","long","loop","lottery","loud","lounge","love","loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad","magic","magnet","maid","mail","main","major","make","mammal","man","manage","mandate","mango","mansion","manual","maple","marble","march","margin","marine","market","marriage","mask","mass","master","match","material","math","matrix","matter","maximum","maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt","member","memory","mention","menu","mercy","merge","merit","merry","mesh","message","metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor","minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile","model","modify","mom","moment","monitor","monkey","monster","month","moon","moral","more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie","much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual","myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature","near","neck","need","negative","neglect","neither","nephew","nerve","nest","net","network","neutral","never","news","next","nice","night","noble","noise","nominee","noodle","normal","north","nose","notable","note","nothing","notice","novel","now","nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe","obtain","obvious","occur","ocean","october","odor","off","offer","office","often","oil","okay","old","olive","olympic","omit","once","one","onion","online","only","open","opera","opinion","oppose","option","orange","orbit","orchard","order","ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output","outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact","paddle","page","pair","palace","palm","panda","panel","panic","panther","paper","parade","parent","park","parrot","party","pass","patch","path","patient","patrol","pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen","penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo","phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot","pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate","play","please","pledge","pluck","plug","plunge","poem","poet","point","polar","pole","police","pond","pony","pool","popular","portion","position","possible","post","potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare","present","pretty","prevent","price","pride","primary","print","priority","prison","private","prize","problem","process","produce","profit","program","project","promote","proof","property","prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin","punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle","pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit","raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp","ranch","random","range","rapid","rare","rate","rather","raven","raw","razor","ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle","reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release","relief","rely","remain","remember","remind","remove","render","renew","rent","reopen","repair","repeat","replace","report","require","rescue","resemble","resist","resource","response","result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib","ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot","ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket","romance","roof","rookie","room","rose","rotate","rough","round","route","royal","rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness","safe","sail","salad","salmon","salon","salt","salute","same","sample","sand","satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter","scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script","scrub","sea","search","season","seat","second","secret","section","security","seed","seek","segment","select","sell","seminar","senior","sense","sentence","series","service","session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell","sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop","short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side","siege","sight","sign","silent","silk","silly","silver","similar","simple","since","sing","siren","sister","situate","six","size","skate","sketch","ski","skill","skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight","slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth","snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda","soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry","sort","soul","sound","soup","source","south","space","spare","spatial","spawn","speak","special","speed","spell","spend","sphere","spice","spider","spike","spin","spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring","spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp","stand","start","state","stay","steak","steel","stem","step","stereo","stick","still","sting","stock","stomach","stone","stool","story","stove","strategy","street","strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway","success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny","sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey","suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim","swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag","tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi","teach","team","tell","ten","tenant","tennis","tent","term","test","text","thank","that","theme","then","theory","there","they","thing","this","thought","three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber","time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler","toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool","tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist","toward","tower","town","toy","track","trade","traffic","tragic","train","transfer","trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick","trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust","truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle","twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella","unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform","unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade","uphold","upon","upper","upset","urban","urge","usage","use","used","useful","useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van","vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue","verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory","video","view","village","vintage","violin","virtual","virus","visa","visit","visual","vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage","wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash","wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather","web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat","wheel","when","where","whip","whisper","wide","width","wife","wild","will","win","window","wine","wing","wink","winner","winter","wire","wisdom","wise","wish","witness","wolf","woman","wonder","wood","wool","word","work","world","worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year","yellow","you","young","youth","zebra","zero","zone","zoo"],F=[{name:"Ethereum Mainnet",chainId:1,rpcUrl:"https://eth.llamarpc.com",nativeCurrency:{name:"ETH",symbol:"ETH",decimals:18},multicallAddress:"0xeefBa1e63905eF1D7ACbA5a8513c70307C1cE441"},{name:"Solana Mainnet",chainId:901,rpcUrl:"https://api.mainnet-beta.solana.com",nativeCurrency:{name:"SOL",symbol:"SOL",decimals:9}}],_=["901","902","903"],j=function(e){return _.includes(e)?9:18},I=function(e){return _.includes(e)?"solana":"evm"},L=require("bn.js").BN,q=require("ethereumjs-util").stripHexPrefix,R=require("bignumber.js").BigNumber;function z(e){return new L(q(e.toString("hex")),16)}var J=function(e){return e.match(/^-?0x/u)?e:e.match(/^-?0X/u)?e.replace("0X","0x"):e.startsWith("-")?e.replace("-","-0x"):"0x".concat(e)};function U(e){return J(e.toString(16))}var E=function(){function e(e){this.query=new m.default(m.default.givenProvider||e).eth}return e.prototype.analyzeGasUsage=function(e){return g(this,void 0,void 0,function(){var t,n,r,a,s,o;return v(this,function(c){switch(c.label){case 0:return[4,this.query.getBlock("latest",!1)];case 1:t=c.sent(),n=z(t.gasLimit),u=n,i=20,l=new L(19),d=new L(i),r=u.mul(l).div(d),a=U(r),c.label=2;case 2:return c.trys.push([2,4,,5]),[4,this.estimateTxGas(e)];case 3:return a=c.sent(),[3,5];case 4:return o=c.sent(),s={reason:o.message,errorKey:o.errorKey,debug:{blockNumber:t.number,blockGasLimit:t.gasLimit}},[3,5];case 5:return[2,{blockGasLimit:t.gasLimit,estimatedGasHex:a,simulationFails:s}]}var u,i,l,d})})},e.prototype.estimateTxGas=function(e){return g(this,void 0,void 0,function(){var t;return v(this,function(n){switch(n.label){case 0:return[4,this.query.estimateGas(e)];case 1:return t=n.sent(),[2,t=new R(t.toString()).multipliedBy(1.3).toFixed(0)]}})})},e.prototype.addGasBuffer=function(e,t,n){void 0===n&&(n=1.3);var r=z(e),a=z(t).muln(.9),s=r.muln(n);return r.gt(a)?U(r):s.lt(a)?U(s):U(a)},e.prototype.getBufferedGasLimit=function(e,t){return g(this,void 0,void 0,function(){var n,r,a,s;return v(this,function(o){switch(o.label){case 0:return[4,this.analyzeGasUsage(e)];case 1:return n=o.sent(),r=n.blockGasLimit,a=n.estimatedGasHex,s=n.simulationFails,[2,{gasLimit:this.addGasBuffer(J(a),r,t),simulationFails:s}]}})})},e.prototype.getGasPrice=function(){return g(this,void 0,void 0,function(){return v(this,function(e){switch(e.label){case 0:return[4,this.query.getGasPrice()];case 1:return[2,e.sent()]}})})},e.prototype.getTransactionCount=function(e){return g(this,void 0,void 0,function(){return v(this,function(t){switch(t.label){case 0:return[4,this.query.getTransactionCount(e)];case 1:return[2,t.sent()]}})})},e}(),K=require("chalk");require("wative-core").WativeCore;var M=function(e){return g(void 0,void 0,void 0,function(){var t,n,r,a,s,o,c,u,i,l;return v(this,function(d){switch(d.label){case 0:return t=[new h.default.Separator("————Tx Detail—————-"),"from: ".concat(e.from),"to: ".concat(e.to),"nonce: ".concat(e.nonce),"gasPrice: ".concat(e.gasPrice),"data: ".concat(e.data),"value: ".concat(e.value),"gas: ".concat(e.gas),new h.default.Separator("——————————————-"),"Send it now","Back"],[4,vt(t)];case 1:return n=d.sent(),1!==(r=t.indexOf(n))?[3,3]:(a=e,[4,at("from",gt)]);case 2:a.from=d.sent(),d.label=3;case 3:return 2!==r?[3,5]:(s=e,[4,at("to",gt)]);case 4:s.to=d.sent(),d.label=5;case 5:return 3!==r?[3,7]:(o=e,[4,at("nonce")]);case 6:o.nonce=d.sent(),d.label=7;case 7:return 4!==r?[3,9]:(c=e,[4,at("gasPrice")]);case 8:c.gasPrice=d.sent(),d.label=9;case 9:return 5!==r?[3,11]:(u=e,[4,jt("data")]);case 10:u.data=d.sent(),d.label=11;case 11:return 6!==r?[3,13]:(i=e,[4,at("value")]);case 12:i.value=d.sent(),d.label=13;case 13:return 7!==r?[3,15]:(l=e,[4,at("gas")]);case 14:l.gas=d.sent(),d.label=15;case 15:return 9===r?[2,e]:10===r?[2,null]:[4,M(e)];case 16:return[2,d.sent()]}})})},D=function(e,t,n,r,a){return g(void 0,void 0,void 0,function(){var s,o,c,i,l,d,p,f,h,b,w,k,S,x,N,P,O,B,A,C,F,_,j,I,L;return v(this,function(q){switch(q.label){case 0:return[4,at("to",gt)];case 1:return s=q.sent(),[4,(o=new E(t)).getGasPrice()];case 2:return c=q.sent(),i=new u.BigNumber(c.toString()).dividedBy(1e9),l=i.toFixed(4,u.BigNumber.ROUND_FLOOR),[4,at("Gas price (".concat(l,"), agree or enter"),dt)];case 3:return d=q.sent(),p=d||l,p=new u.BigNumber(p).multipliedBy(1e9).toFixed(0),[4,(R=s,z=t,g(void 0,void 0,void 0,function(){var e,t;return v(this,function(n){switch(n.label){case 0:return e=new m.default(z),[4,Lt(e.eth.getCode.bind(e),[R])];case 1:return(t=n.sent()).status?[2,{status:!0,output:t.output}]:[2,{status:!1,output:"Failed to get code"}]}})}))];case 4:return(f=q.sent()).status?(h="42161"===e||"421614"===e?"1700000":"21000","0x"!==f.output?[3,7]:(b="0x",[4,y(r,t)])):(console.log(K.red(f.output)),[2]);case 5:return(k=q.sent()).status?(S=new u.BigNumber(k.output),x=new u.BigNumber(p),N=S.minus(x.multipliedBy(Number(h))).toFixed(0,u.BigNumber.ROUND_FLOOR),P=new u.BigNumber(N).dividedBy(1e18).toFixed(4,u.BigNumber.ROUND_FLOOR),new u.BigNumber(P)<new u.BigNumber(0)?(console.log(K.red("Not enough balance")),[2]):[4,W(P,N,n,18)]):(console.log(K.red(k.output)),[2]);case 6:return w=q.sent(),[3,10];case 7:return[4,jt("data",It)];case 8:return b=q.sent(),[4,at("value",lt)];case 9:w=q.sent(),q.label=10;case 10:return[4,o.getTransactionCount(r)];case 11:return O=q.sent(),[4,at("Nonce (".concat(O,"), agree or enter"))];case 12:return B=q.sent(),A=B||O.toString(),C={from:r,to:s,nonce:A,gasPrice:p,data:b,value:w},"0x"!==b?[3,13]:(C.gas=h,[3,18]);case 13:F=C.gasPrice,delete C.gasPrice,q.label=14;case 14:return q.trys.push([14,16,,17]),_=C,j="gas",[4,o.estimateTxGas(C)];case 15:return _[j]=q.sent().toString(),[3,17];case 16:return I=q.sent(),console.log(K.red("Error: "+I)),[2];case 17:C.gasPrice=F,q.label=18;case 18:return[4,M(C)];case 19:return(C=q.sent())?[4,a.account.signTransaction(r,C,t)]:[2];case 20:return(L=q.sent()).status?(console.log(K.green("Transaction hash: ".concat(L.output.transactionHash))),a.account.sendSignedTransaction(r,L.output.rawTransaction,t),T(e,[r,s],["0"]),[2]):(console.log(K.red(L.output)),[2])}var R,z})})},G=function(e,t,n,r,a){return g(void 0,void 0,void 0,function(){var o,c,i,l,d,p,f,h,m,b,w,y,S,x,N,P,B;return v(this,function(A){switch(A.label){case 0:return[4,at("to",gt)];case 1:return o=A.sent(),(c=(new s.Transaction).add(s.SystemProgram.transfer({fromPubkey:new s.PublicKey(r),toPubkey:new s.PublicKey(o),lamports:1e6}))).add(s.ComputeBudgetProgram.setComputeUnitLimit({units:2e5})),c.add(s.ComputeBudgetProgram.setComputeUnitPrice({microLamports:1e3})),c.feePayer=new s.PublicKey(r),[4,(C=t,g(void 0,void 0,void 0,function(){var e,t;return v(this,function(n){switch(n.label){case 0:return e=new s.Connection(C),[4,Lt(e.getLatestBlockhash.bind(e),[{commitment:"finalized"}])];case 1:return(t=n.sent()).status?[2,{status:!0,output:t.output}]:[2,{status:!1,output:"Failed to get latest blockhash"}]}})}))];case 2:return(i=A.sent()).status?(c.recentBlockhash=i.output.blockhash,[4,a.account.simulateTransaction(r,t,c)]):(console.log(K.red(i.output)),[2]);case 3:return(l=A.sent()).status?l.output&&l.output.value&&0!==l.output.value.unitsConsumed&&!l.output.value.err?(d=new u.BigNumber(l.output.value.unitsConsumed.toString()).multipliedBy(1.2).toFixed(0,u.BigNumber.ROUND_CEIL),p=new u.BigNumber(d),[4,O(t)]):(console.log(K.red("Simulate error")),console.log("==================reason====================="),console.log(JSON.stringify(l.output,null,4)),console.log("=============================================="),[2]):(console.log(K.red(l.output)),[2]);case 4:return(f=A.sent()).status?(h=new u.BigNumber(f.output.toString()),m=p.multipliedBy(h).dividedBy(1e6).toFixed(0,u.BigNumber.ROUND_CEIL),[4,k(r,t)]):(console.log(K.red(f.output)),[2]);case 5:return(b=A.sent()).status?(w=new u.BigNumber(b.output),y=w.minus(5e3).minus(m),S=new u.BigNumber(y).dividedBy(1e9).toFixed(4,u.BigNumber.ROUND_FLOOR),new u.BigNumber(S)<new u.BigNumber(0)?(console.log(K.red("Not enough balance")),[2]):[4,W(S,y.toString(),n,9)]):(console.log(K.red(b.output)),[2]);case 6:return x=A.sent(),(N=new s.Transaction).add(s.ComputeBudgetProgram.setComputeUnitLimit({units:Number(p)})),N.add(s.ComputeBudgetProgram.setComputeUnitPrice({microLamports:Number(h)})),N.add(s.SystemProgram.transfer({fromPubkey:new s.PublicKey(r),toPubkey:new s.PublicKey(o),lamports:Number(x)})),N.feePayer=new s.PublicKey(r),N.recentBlockhash=i.output.blockhash,[4,a.account.signTransaction(r,N,t)];case 7:return(P=A.sent()).status?[4,a.account.sendSignedTransaction(r,P.output,t)]:(console.log(K.red(P.output)),[2]);case 8:return(B=A.sent()).status?(T(e,[r,o],["0"]),console.log(K.green("Transaction hash: ".concat(B.output))),[2]):(console.log(K.red(B.output)),[2])}var C})})},W=function(e,t,n,r){return g(void 0,void 0,void 0,function(){var a,s,o,c,i;return v(this,function(l){switch(l.label){case 0:return a=["> Input value","> Total Balance (".concat(e," ").concat(n,")")],[4,vt(a)];case 1:return s=l.sent(),o=a.indexOf(s),c="0",0!==o?[3,3]:[4,at("value",lt)];case 2:return i=l.sent(),c=new u.BigNumber(i).multipliedBy(Math.pow(10,r)).toFixed(0,u.BigNumber.ROUND_FLOOR),[3,4];case 3:1===o&&(c=t),l.label=4;case 4:return new u.BigNumber(c).isLessThanOrEqualTo(new u.BigNumber(t))?[2,c]:(console.log(K.red("Not enough balance")),[2,W(e,t,n,r)])}})})},$=function(e,t,n,r,a){return g(void 0,void 0,void 0,function(){var s,o,c,i,l,d,p,f,h,b,w,y,k,x,P,O,B,A,C,F,_,j,I,L,q,R,z,J,U,D,G,W;return v(this,function($){switch($.label){case 0:return[4,vt(["> Input token ticker","> Input token contract address"])];case 1:switch(s=$.sent(),s){case"> Input token ticker":return[3,2];case"> Input token contract address":return[3,10]}return[3,13];case 2:return[4,at("token ticker")];case 3:return i=$.sent(),[4,He(e,n,i)];case 4:if(0===(l=$.sent()).length)return console.log(K.red("Token not found")),[2];d=[],p=0,$.label=5;case 5:return p<l.length?[4,N(r,l[p].address,t)]:[3,8];case 6:if(!(f=$.sent()).status)return console.log(K.red(f.output)),[2];if(h=new u.BigNumber(f.output),b=h.dividedBy(Math.pow(10,Number(l[p].decimals))).toFixed(4,u.BigNumber.ROUND_FLOOR),1===l.length)return d.push("> 1. ".concat(i," Balance: ").concat(b)),[3,8];d.push("> ".concat(p+1,". ").concat(i," Balance: ").concat(b,"(").concat(l[p].address,")")),d.push(l[p].address),$.label=7;case 7:return p++,[3,5];case 8:return[4,vt(d)];case 9:return w=$.sent(),y=l[d.indexOf(w)],o=y.address,c=Number(y.decimals),[3,13];case 10:return[4,at("token contract address",gt)];case 11:return o=$.sent(),[4,S(o,t)];case 12:return(k=$.sent()).status?(c=Number(k.output.decimals),i=k.output.name,[3,13]):(console.log(K.red(k.output)),[2]);case 13:return[4,at("Receipt",gt)];case 14:return x=$.sent(),[4,N(r,o,t)];case 15:return(P=$.sent()).status?[4,(O=new E(t)).getGasPrice()]:(console.log(K.red(P.output)),[2]);case 16:return B=$.sent(),A=new u.BigNumber(B.toString()).dividedBy(1e9),C=A.toFixed(4,u.BigNumber.ROUND_FLOOR),[4,at("Gas price (".concat(C,"), agree or enter"),dt)];case 17:return F=$.sent(),_=F||C,_=new u.BigNumber(_).multipliedBy(1e9).toFixed(0),[4,Z(P.output,i,c)];case 18:return j=$.sent(),[4,(H=x,V=j,X=t,g(void 0,void 0,void 0,function(){return v(this,function(e){return[2,new m.default(X).eth.abi.encodeFunctionCall({constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},[H,V])]})}))];case 19:return I=$.sent(),[4,O.getTransactionCount(r)];case 20:return L=$.sent(),[4,at("Nonce (".concat(L,"), agree or enter"))];case 21:return q=$.sent(),R=q||L.toString(),z={from:r,to:o,nonce:R,gasPrice:_,data:I,value:"0"},"0x"!==I?[3,22]:(z.gas="42161"===n||"421614"===n?"1700000":"21000",[3,27]);case 22:J=z.gasPrice,delete z.gasPrice,$.label=23;case 23:return $.trys.push([23,25,,26]),U=z,D="gas",[4,O.estimateTxGas(z)];case 24:return U[D]=$.sent().toString(),[3,26];case 25:return G=$.sent(),console.log(K.red("Failed to estimate gas, "+G.message)),[2];case 26:z.gasPrice=J,$.label=27;case 27:return[4,M(z)];case 28:return(z=$.sent())?[4,a.account.signTransaction(r,z,t)]:[2];case 29:return(W=$.sent()).status?(console.log(K.green("Transaction hash: ".concat(W.output.transactionHash))),a.account.sendSignedTransaction(r,W.output.rawTransaction,t),T(n,[r,x],["0",o]),[2]):(console.log(K.red(W.output)),[2])}var H,V,X})})},H=function(e,t,n,r,a){return g(void 0,void 0,void 0,function(){var c,i,l,d,p,f,h,m,g,b,w,y,k,S,N,A,C,F,_,j,I,L,q,R,z,J,U,E;return v(this,function(v){switch(v.label){case 0:return[4,vt(["> Input token ticker","> Input token contract address"])];case 1:switch(c=v.sent(),c){case"> Input token ticker":return[3,2];case"> Input token contract address":return[3,10]}return[3,13];case 2:return[4,at("token ticker")];case 3:return d=v.sent(),[4,He(e,n,d)];case 4:if(0===(p=v.sent()).length)return console.log(K.red("Token not found")),[2];f=[],h=0,v.label=5;case 5:return h<p.length?[4,P(r,p[h].address,t)]:[3,8];case 6:if(!(m=v.sent()).status)return console.log(K.red(m.output)),[2];if(g=new u.BigNumber(m.output),b=g.dividedBy(Math.pow(10,Number(p[h].decimals))).toFixed(4,u.BigNumber.ROUND_FLOOR),1===p.length)return f.push("> 1. ".concat(d," Balance: ").concat(b)),[3,8];f.push("> ".concat(h+1,". ").concat(d," Balance: ").concat(b,"(").concat(p[h].address,")")),f.push(p[h].address),v.label=7;case 7:return h++,[3,5];case 8:return[4,vt(f)];case 9:return w=v.sent(),y=p[f.indexOf(w)],i=y.address,l=Number(y.decimals),[3,13];case 10:return[4,at("token contract address",gt)];case 11:return i=v.sent(),[4,x(i,t)];case 12:return(k=v.sent()).status?(l=Number(k.output.decimals),d=k.output.name,[3,13]):(console.log(K.red(k.output)),[2]);case 13:return[4,at("Receipt",gt)];case 14:return S=v.sent(),[4,P(r,i,t)];case 15:return(N=v.sent()).status?[4,Z(N.output,d,l)]:(console.log(K.red(N.output)),[2]);case 16:return A=v.sent(),C=o.getAssociatedTokenAddressSync(new s.PublicKey(i),new s.PublicKey(r),!0),[4,B(C.toString(),t)];case 17:return(F=v.sent()).status?F.output&&F.output.owner.toString()!==s.PublicKey.default?(_=o.getAssociatedTokenAddressSync(new s.PublicKey(i),new s.PublicKey(S),!1),[4,B(_.toString(),t)]):(console.log(K.red("From token account not found")),[2]):(console.log(K.red(F.output)),[2]);case 18:return(j=v.sent()).status?(I=new s.Transaction,L=new s.Transaction,j.output&&j.output.owner.toString()!==s.PublicKey.default||(I.add(o.createAssociatedTokenAccountInstruction(new s.PublicKey(r),new s.PublicKey(_),new s.PublicKey(S),new s.PublicKey(i))),L.add(o.createAssociatedTokenAccountInstruction(new s.PublicKey(r),new s.PublicKey(_),new s.PublicKey(S),new s.PublicKey(i)))),I.add(o.createTransferInstruction(C,_,new s.PublicKey(r),Number(A))),I.add(s.ComputeBudgetProgram.setComputeUnitLimit({units:2e5})),I.add(s.ComputeBudgetProgram.setComputeUnitPrice({microLamports:1e3})),I.feePayer=new s.PublicKey(r),[4,a.account.simulateTransaction(r,t,I)]):(console.log(K.red(j.output)),[2]);case 19:return(q=v.sent()).status?q.output&&q.output.value&&0!==q.output.value.unitsConsumed&&!q.output.value.err?(R=new u.BigNumber(q.output.value.unitsConsumed.toString()),R=new u.BigNumber(Math.ceil(1.2*Number(R))),[4,O(t)]):(console.log(K.red("Simulate error")),console.log("==================reason====================="),console.log(JSON.stringify(q.output,null,4)),console.log("=============================================="),[2]):(console.log(K.red(q.output)),[2]);case 20:return(z=v.sent()).status?(J=new u.BigNumber(z.output.toString()),L.add(o.createTransferInstruction(C,_,new s.PublicKey(r),Number(A))),L.add(s.ComputeBudgetProgram.setComputeUnitLimit({units:Number(R)})),L.add(s.ComputeBudgetProgram.setComputeUnitPrice({microLamports:Number(J)})),I.feePayer=new s.PublicKey(r),[4,a.account.signTransaction(r,L,t)]):(console.log(K.red(z.output)),[2]);case 21:return(U=v.sent()).status?[4,a.account.sendSignedTransaction(r,U.output,t)]:(console.log(K.red(U.output)),[2]);case 22:return(E=v.sent()).status?(T(n,[r,S],["0",i]),console.log(K.green("Transaction hash: ".concat(E.output))),[2]):(console.log(K.red(E.output)),[2])}})})},Z=function(e,t,n){return g(void 0,void 0,void 0,function(){var r,a,s,o,c,i;return v(this,function(l){switch(l.label){case 0:return r=new u.BigNumber(e).dividedBy(Math.pow(10,n)).toFixed(4,u.BigNumber.ROUND_FLOOR),a=["> Input amount","> Total Balance (".concat(r," ").concat(t,")")],[4,vt(a)];case 1:return s=l.sent(),o=a.indexOf(s),c="0",0!==o?[3,3]:[4,at("amount",lt)];case 2:return i=l.sent(),c=new u.BigNumber(i).multipliedBy(Math.pow(10,n)).toFixed(0,u.BigNumber.ROUND_FLOOR),[3,4];case 3:1===o&&(c=e),l.label=4;case 4:return new u.BigNumber(c).isLessThanOrEqualTo(new u.BigNumber(e))?[2,c]:(console.log(K.red("Not enough balance")),[2,Z(e,t,n)])}})})},V=function(e,t,n,r){return g(void 0,void 0,void 0,function(){var a,s,o,c,u,i,l,d,p;return v(this,function(f){switch(f.label){case 0:return a=Me(e,t,n),s=Re(e,a),o=qt(n),s!==o&&("evm"===o&&(a="Ethereum Mainnet"),"solana"===o&&(a="Solana Mainnet"),s=Re(e,a)),"evm"!==s?[3,3]:[4,_t("Network (".concat(a,"), want a change?"),!1)];case 1:return f.sent()?(c=De(e),[4,vt(c,"Select a network")]):[3,3];case 2:u=f.sent(),a=u,f.label=3;case 3:return[4,Ke(n,e,a)];case 4:return(i=f.sent()).status?(l=ze(e,a),console.log(K.green(" ".concat(l.nativeCurrency.symbol," Balance: ").concat(i.output))),d=["> Send Raw Tx","> Send Token",new h.default.Separator("----------------------------------"),"> Back"],[4,vt(d)]):(console.log(K.red(i.output)),[2]);case 5:switch(p=f.sent(),p){case"> Send Raw Tx":return[3,6];case"> Send Token":return[3,11];case"> Back":return[3,16]}return[3,17];case 6:return"evm"!==o?[3,8]:[4,D(l.chainId.toString(),l.rpcUrl,l.nativeCurrency.symbol,n,r)];case 7:f.sent(),f.label=8;case 8:return"solana"!==o?[3,10]:[4,G(l.chainId.toString(),l.rpcUrl,l.nativeCurrency.symbol,n,r)];case 9:f.sent(),f.label=10;case 10:return[3,17];case 11:return"evm"!==o?[3,13]:[4,$(e,l.rpcUrl,l.chainId.toString(),n,r)];case 12:f.sent(),f.label=13;case 13:return"solana"!==o?[3,15]:[4,H(e,l.rpcUrl,l.chainId.toString(),n,r)];case 14:f.sent(),f.label=15;case 15:return[3,17];case 16:case 17:return[2]}})})},X=function(e,t,n,r){return g(void 0,void 0,void 0,function(){var a,s,o,c;return v(this,function(u){switch(u.label){case 0:return a=["> SendTx","> SignMessage",new h.default.Separator("----------------------------------"),"> Back"],[4,vt(a)];case 1:switch(s=u.sent(),s){case"> SendTx":return[3,2];case"> SignMessage":return[3,4];case"> Back":return[3,6]}return[3,7];case 2:return[4,V(e,t,n,r)];case 3:return u.sent(),[3,7];case 4:return[4,jt("Input the message to sign")];case 5:return o=u.sent(),(c=r.account.signMessage(n,o)).status?(console.log(K.green("Signature: "+c.output)),[3,7]):(console.log(K.red(c.output)),[3,7]);case 6:return[2];case 7:return[4,X(e,t,n,r)];case 8:return u.sent(),[2]}})})},Q=function(e,t){return g(void 0,void 0,void 0,function(){var n,r,a,s,o,c,u;return v(this,function(i){switch(i.label){case 0:return n=["> Send Tx","> Search Accounts",new h.default.Separator("----------------------------------"),"> Back"],[4,vt(n)];case 1:return"> Back"===(r=i.sent())?[2]:"> Send Tx"!==r?[3,3]:[4,at("Input address to send tx",gt)];case 2:a=i.sent(),i.label=3;case 3:return"> Search Accounts"!==r?[3,5]:[4,at("Input part address to send tx",it)];case 4:a=i.sent(),i.label=5;case 5:return null!==(s=t.account.getAccountLabel(a))?[3,7]:(console.log(K.red("Account not found")),[4,Q(e,t)]);case 6:return i.sent(),[2];case 7:return o=s.account_label,c=Nt(e,o),a=s.account_address,null!==o?[3,9]:(console.log(K.red("Account not found")),[4,Q(e,t)]);case 8:return i.sent(),[2];case 9:return[4,ot(e,o,a)];case 10:return null!==(u=i.sent())?[3,12]:(console.log(K.red("Account not found")),[4,Q(e,t)]);case 11:return i.sent(),[2];case 12:return console.log(K.green("Address found!\n address: ".concat(a,"\n account name: [").concat(c,"]\n account index: #").concat(u))),[4,de(e,o,t)];case 13:return i.sent().isLoginIn?[3,15]:[4,Q(e,t)];case 14:return i.sent(),[2];case 15:return[4,X(e,o,a,t)];case 16:return i.sent(),[4,Q(e,t)];case 17:return i.sent(),[2]}})})},Y=require("chalk");require("dotenv").config();var ee=require("cli-progress");require("wative-core").WativeCore;var te={keystore_slug:"",default_account_index:0},ne=function(e){return g(void 0,void 0,void 0,function(){var t,n,r,a,s;return v(this,function(o){switch(o.label){case 0:return t=ue(e),n=[],t.accounts&&(n=t.accounts),[4,Bt("Account Name",n)];case 1:return null===(r=o.sent())?[2,null]:[4,Ft("Please set a password for Account [".concat(r,"]"))];case 2:return a=o.sent(),[4,qe(e)];case 3:return s=o.sent(),[2,{account_name:r,password:a,selected_default_network:s}]}})})},re=function(e,t){return g(void 0,void 0,void 0,function(){var n,r,a,s,o,c,u;return v(this,function(i){switch(i.label){case 0:return[4,ne(e)];case 1:return(n=i.sent())?[4,Ct("Please enter a mnemonic [split by space]",pt)]:[2];case 2:return r=(r=i.sent()).replace(/\s+/g," "),a=Pt(n.account_name),(s=t.account.generatePPAccount(a,r,n.password)).status?(o=p.join(e,"accounts/".concat(a,".json")),s.output.default_network=n.selected_default_network,d.writeFileSync(o,JSON.stringify(s.output,null,4)),c=p.resolve(e,"network.json"),(u=JSON.parse(d.readFileSync(c,"utf8"))).accounts.push(n.account_name),d.writeFileSync(c,JSON.stringify(u,null,4)),[2]):(console.log(Y.red(s.output)),[2])}})})},ae=function(e,t){return g(void 0,void 0,void 0,function(){var n,r,a,s,o;return v(this,function(c){switch(c.label){case 0:return[4,ne(e)];case 1:return(n=c.sent())?[4,At("Please enter a private key")]:[2];case 2:return r=c.sent(),a=Pt(n.account_name),[4,oe(e,n.password,a,r,n.selected_default_network,t,!0)];case 3:return c.sent(),s=p.resolve(e,"network.json"),(o=JSON.parse(d.readFileSync(s,"utf8"))).accounts.push(n.account_name),d.writeFileSync(s,JSON.stringify(o,null,4)),[2]}})})},se=function(e,t,n,r){return g(void 0,void 0,void 0,function(){var a,s,o;return v(this,function(c){switch(c.label){case 0:return[4,at("Please enter a private key")];case 1:return a=c.sent(),s=p.join(e,"accounts/".concat(n,".json")),o=JSON.parse(d.readFileSync(s,"utf8")),[4,oe(e,t,n,a,o.default_network,r,!1)];case 2:return c.sent(),[2]}})})},oe=function(e,t,n,r,a,s,o){return g(void 0,void 0,void 0,function(){var c,u,i,l,f;return v(this,function(h){switch(h.label){case 0:return[4,ze(e,a)];case 1:return c=h.sent(),"evm"!==I(c.chainId.toString())||r.startsWith("0x")||(r="0x"+r),[4,s.account.generatePKAccount(n,r,t,c.chainId.toString(),o)];case 2:if(!(u=h.sent()).status)return console.log(Y.red(u.output)),[2];if(i=p.join(e,"accounts/".concat(n,".json")),d.existsSync(i))if("data"in(f=JSON.parse(d.readFileSync(i,"utf8")))){if(f.data.map(function(e){return e.ciphertexts.address}).includes(u.output.ciphertexts.address))return console.log(Y.red("The account has already been imported")),[2];f.data.push({ciphertexts:u.output.ciphertexts}),l=f}else f.data=[{ciphertexts:f.ciphertexts}],delete f.ciphertexts,f.data.push({ciphertexts:u.output.ciphertexts}),l=f;else u.output.data=[{ciphertexts:u.output.ciphertexts}],delete u.output.ciphertexts,u.output.default_network=a,l=u.output;return d.writeFileSync(i,JSON.stringify(l,null,4)),s.account.reloadAccount(),[2]}})})},ce=function(e,t){return g(void 0,void 0,void 0,function(){var n,r;return v(this,function(a){switch(a.label){case 0:return n=["> Import Passphrase","> Import Private Key",new h.default.Separator("----------------------------------"),"> Back"],[4,vt(n)];case 1:switch(r=a.sent(),r){case"> Import Passphrase":return[3,2];case"> Import Private Key":return[3,4];case"> Back":return[3,6]}return[3,7];case 2:return[4,re(e,t)];case 3:case 5:return a.sent(),[3,7];case 4:return[4,ae(e,t)];case 6:return[2];case 7:return t.account.reloadAccount(),[2]}})})},ue=function(e){var t=p.resolve(e,"network.json");return JSON.parse(d.readFileSync(t,"utf8"))},ie=function(e,t){var n=p.join(e,"accounts/".concat(t,".json"));return JSON.parse(d.readFileSync(n,"utf8"))},le=function(e,t,n){var r=p.join(e,"accounts/".concat(t,".json"));d.writeFileSync(r,JSON.stringify(n,null,4))},de=function(e,t,n){return g(void 0,void 0,void 0,function(){var r,a,s,o,c,u;return v(this,function(i){switch(i.label){case 0:if(n.account.isLogin(t))return[2,{isLoginIn:!0}];r=0,i.label=1;case 1:return r<3?(a=Nt(e,t),s="WATIVE_PASSWD_"+t,o=void 0,process.env[s]&&""!==process.env[s]?(o=process.env[s],[3,5]):[3,2]):[3,9];case 2:return process.env.WativePassword&&""!==process.env.WativePassword?(o=process.env.WativePassword,[3,5]):[3,3];case 3:return[4,Tt("Please input the password for Account [".concat(a,"]"))];case 4:o=i.sent(),i.label=5;case 5:return o?[4,n.account.login(t,o)]:(console.log(Y.red("Password can't be empty")),[2,{isLoginIn:!1}]);case 6:return(c=i.sent()).status?[2,{isLoginIn:!0,password:o}]:[4,vt(["> Try Again","> Back"],c.output)];case 7:if("> Back"===(u=i.sent()))return[2,{isLoginIn:!1}];if("> Try Again"===u)return[3,8];i.label=8;case 8:return r++,[3,1];case 9:return[2,{isLoginIn:!1}]}})})},pe=function(e,t){return g(void 0,void 0,void 0,function(){var n,r,a,s,o,c,u,i,l,d,p,f;return v(this,function(m){switch(m.label){case 0:if(n=ue(e),r=n.accounts,a=["> Back",new h.default.Separator("----------------------------------")],0===(s=r.length))return console.log(Y.red("No address here yet")),[2];for(o=0;o<s;o++)c=r[o],u=Pt(c),"data"in(i=ie(e,u))?a.push("".concat(o+1,") ").concat(c," [").concat(i.account_type,":").concat(i.data.length,"]")):a.push("".concat(o+1,") ").concat(c," [").concat(i.account_type,":1]"));return[4,vt(a,"Select an account")];case 1:return"> Back"===(l=m.sent())?[2]:(d=r[a.indexOf(l)-2],p=Pt(d),console.log(Y.green("Keystore slug: [".concat(p,"]"))),[4,de(e,p,t)]);case 2:return(f=m.sent()).isLoginIn?[4,he(e,p,t,f.password)]:[3,4];case 3:m.sent(),m.label=4;case 4:return[4,pe(e,t)];case 5:return m.sent(),[2]}})})},fe=function(e,t,n){return g(void 0,void 0,void 0,function(){var n,r,a,s,o,c,u,i,l,d,p,f,m,g,b,w,y,k,S,x;return v(this,function(v){switch(v.label){case 0:return[4,ie(e,t)];case 1:return n=v.sent(),r=["> Disabled Slots","> Add Single","> Add Range",new h.default.Separator("----------------------------------"),"> Back"],[4,vt(r)];case 2:switch(a=v.sent(),a){case"> Back":return[3,3];case"> Disabled Slots":return[3,4];case"> Add Single":return[3,7];case"> Add Range":return[3,9]}return[3,11];case 3:return[2];case 4:if(!(s=n.disabled_slots)||0===s.length)return console.log(Y.red("No disabled slots here yet")),[3,11];for(o=n.data,c=["> Back",new h.default.Separator("----------------------------------")],u=n.default_network,i=0;i<s.length;i++){if(l=s[i].from,d=s[i].to,p=u,f=u,"default_network"in o[l]&&(p=o[l].default_network),"default_network"in o[d]&&(f=o[d].default_network),m=Re(e,p),g=Re(e,f),"evm"!==m&&"solana"!==m)throw new Error("Invalid network type: ".concat(m));if("evm"!==g&&"solana"!==g)throw new Error("Invalid network type: ".concat(g));b=void 0,w=void 0,b="evm"===m?o[l].ciphertexts.evm.address:o[d].ciphertexts.solana.address,w="evm"===g?o[d].ciphertexts.evm.address:o[d].ciphertexts.solana.address,l===d?c.push("".concat(i+1,". ").concat(b,"[").concat(l,"]")):c.push("".concat(i+1,". ").concat(b,"[").concat(l,"]-").concat(w,"[").concat(d,"]"))}return[4,vt(c)];case 5:return"> Back"===(y=v.sent())?[3,11]:[4,_t("Are you sure to delete the ".concat(y,"?"),!0)];case 6:return v.sent()?(k=c.indexOf(y)-2,n.disabled_slots.splice(k,1),le(e,t,n),[3,11]):[3,11];case 7:return[4,ct(n,"Input address or index")];case 8:return null===(S=v.sent())?(console.log(Y.red("Invalid account index")),[3,11]):(n.disabled_slots?n.disabled_slots.push({from:S,to:S}):n.disabled_slots=[{from:S,to:S}],le(e,t,n),[3,11]);case 9:return[4,st(n)];case 10:return(x=v.sent())?(n.disabled_slots?n.disabled_slots.push(x):n.disabled_slots=[x],le(e,t,n),[3,11]):(console.log(Y.red("Invalid account range")),[3,11]);case 11:return[4,fe(e,t)];case 12:return v.sent(),[2]}})})},he=function(e,t,n,r){return g(void 0,void 0,void 0,function(){var a,s,o,c,u,i,l,d;return v(this,function(p){switch(p.label){case 0:return[4,ie(e,t)];case 1:return a=p.sent(),s="PP"===a.account_type?["> Address List","> Expand Address","> Slice Address","> Disable Address","> Reset Account Password","> Switch Networks [".concat(a.default_network,"]"),"> Remove",new h.default.Separator("----------------------------------"),"> Back"]:["> Address List","> Import Private Key","> Remove Address","> Reset Account Password","> Switch Networks [".concat(a.default_network,"]"),"> Remove",new h.default.Separator("----------------------------------"),"> Back"],[4,vt(s)];case 2:switch(o=p.sent(),o){case"> Address List":return[3,3];case"> Expand Address":return[3,5];case"> Import Private Key":return[3,8];case"> Slice Address":return[3,10];case"> Remove Address":return[3,13];case"> Disable Address":return[3,15];case"> Reset Account Password":return[3,17];case"> Switch Networks [".concat(a.default_network,"]"):return[3,21];case"> Remove":return[3,23];case"> Back":return[3,25]}return[3,26];case 3:return[4,me(e,t,n)];case 4:case 7:case 9:case 12:case 14:case 16:case 22:return p.sent(),[3,26];case 5:return[4,at("Expand accounts count",ft)];case 6:return c=p.sent(),Number(c)>2e3?(console.log(Y.red("Too many accounts, please input less than 2000")),[3,26]):[4,ve(e,t,Number(c),n)];case 8:return[4,se(e,r,t,n)];case 10:return[4,at("Please input last account number",ht)];case 11:return u=p.sent(),[4,be(e,t,Number(u),n)];case 13:return[4,we(e,t,n)];case 15:return[4,fe(e,t)];case 17:return i=Nt(e,t),[4,Ft("Please input new password for Account [".concat(i,"]"))];case 18:return l=p.sent(),[4,Ft("Please confirm new password for Account [".concat(i,"]"))];case 19:return d=p.sent(),l&&d&&l===d?[4,n.account.resetPassword(t,l)]:(console.log(Y.red("Passwords do not match")),[3,26]);case 20:case 24:case 27:return p.sent(),[2];case 21:return[4,Ee(e,t,!0)];case 23:return[4,ye(e,t)];case 25:return[2];case 26:return[4,he(e,t,n,r)]}})})},me=function(e,t,n){return g(void 0,void 0,void 0,function(){var r,a,s,o,c,u,i,l,d,p,f,m,g,b,w,y,k,S,x,N;return v(this,function(v){switch(v.label){case 0:return[4,ie(e,t)];case 1:for(r=v.sent(),a=["> Back",new h.default.Separator("----------------------------------")],s=[null,null],o=r.disabled_slots,c=Ge(e),u=r.default_network,i=ze(e,u),l=I(i.chainId.toString()),d=r.data.length.toString().length+1,p=0;p<r.data.length;p++)f=r.data[p].tag?"(".concat(r.data[p].tag,")"):"",m=n.account.checkIsDisableAddress(o,p),g=void 0,g="PP"===r.account_type?"evm"===l?r.data[p].ciphertexts.evm.address:r.data[p].ciphertexts.solana.address:r.data[p].ciphertexts.address,s.push(g),m?a.push(new h.default.Separator(Y.yellow("#".concat(p.toString().padEnd(d)," ").concat(Jt(g,c.fullAddr)," ").concat(f)))):a.push("#".concat(p.toString().padEnd(d)," ").concat(Jt(g,c.fullAddr)," ").concat(f));return b=te.keystore_slug===t?a[te.account_index]:a[0],w=te.keystore_slug===t&&te.account_index>0,[4,$e(e,i.chainId.toString())];case 2:return y=v.sent(),w&&te.account_index>15?(S=a.slice(0,te.account_index-15),x=a.slice(te.account_index-15),k=x.concat(S)):k=a.slice(0),[4,Mt(k,"evm"===l,e,y,i,c.gasToken,c.extendedToken,w,"Select an account",b)];case 3:return"> Back"===(N=v.sent())?[2]:(te.keystore_slug=t,te.account_index=a.indexOf(N),[4,ge(e,t,a.indexOf(N)-2,n)]);case 4:return v.sent(),[4,me(e,t,n)];case 5:return v.sent(),[2]}})})},ge=function(e,t,n,r){return g(void 0,void 0,void 0,function(){var a,s,o,c,u,i,l,d,p,f,m,g;return v(this,function(v){switch(v.label){case 0:return[4,ie(e,t)];case 1:return a=v.sent(),s=a.default_network,o=Je(e,t,n),[4,ze(e,s)];case 2:return c=v.sent(),[4,Ke(o,e,s)];case 3:return(u=v.sent()).status?console.log(Y.green(" Address No: #".concat(n,"\n Network: ").concat(s,"\n ").concat(c.nativeCurrency.symbol," Balance: ").concat(u.output))):console.log(Y.green(" Address No: #".concat(n,"\n Network: ").concat(s,"\n ").concat(c.nativeCurrency.symbol))),i="> Tag","tag"in a.data[n]&&""!==a.data[n].tag&&(i="> Tag(".concat(a.data[n].tag,")")),l=["> Tools","> Show address","> Assets",i,"> Reload balances","> Dump private key",new h.default.Separator("----------------------------------"),"> Back"],[4,vt(l)];case 4:switch(d=v.sent(),d){case"> Tools":return[3,5];case"> Show address":return[3,7];case"> Assets":return[3,9];case"> Reload balances":return[3,11];case i:return[3,13];case"> Dump private key":return[3,15];case"> Back":return[3,17]}return[3,18];case 5:return[4,X(e,t,o,r)];case 6:case 8:case 10:case 12:return v.sent(),[3,18];case 7:return[4,Ue(e,t,n)];case 9:return[4,Ze(e,s,o)];case 11:return[4,Ve(e,s,o)];case 13:return p="Current tag","tag"in a.data[n]&&""!==a.data[n].tag&&(p="Current tag (".concat(a.data[n].tag,")")),[4,at(p,ut)];case 14:return f=v.sent(),a.data[n].tag=f.replace(/\s+/g," ").trim(),le(e,t,a),[3,18];case 15:return m=Je(e,t,n),[4,r.account.showPrivateKey(m)];case 16:return g=v.sent(),console.log("account: ",m),console.log("private key: ",g),[3,18];case 17:case 18:return[2]}})})},ve=function(e,t,n,r){return g(void 0,void 0,void 0,function(){var a,s,o,c,u;return v(this,function(i){switch(i.label){case 0:return[4,ie(e,t)];case 1:a=i.sent(),s=a.data.length,(o=new ee.SingleBar({},ee.Presets.legacy)).start(n,0),c=s,i.label=2;case 2:return c<s+n?[4,r.account.generateSubAccount(t,c)]:[3,5];case 3:if(!(u=i.sent()).status)return console.log(Y.red(u.output)),[2];a.data.push({ciphertexts:u.output}),o.increment(),i.label=4;case 4:return c++,[3,2];case 5:return o.stop(),le(e,t,a),r.account.reloadAccount(),[2]}})})},be=function(e,t,n,r){return g(void 0,void 0,void 0,function(){var a;return v(this,function(s){switch(s.label){case 0:return[4,ie(e,t)];case 1:return(a=s.sent()).data=a.data.slice(0,n+1),le(e,t,a),r.account.reloadAccount(),[2]}})})},we=function(e,t,n){return g(void 0,void 0,void 0,function(){var r,a;return v(this,function(s){switch(s.label){case 0:return[4,at("Please input the accountIndex to remove this account",lt)];case 1:return"0"===(r=s.sent())?(console.log(Y.red("Can't remove the first account")),[2]):[4,ie(e,t)];case 2:return a=s.sent(),[4,_t("Are you sure you want to remove this account(".concat(a.data[r].ciphertexts.address,")"),!0)];case 3:return s.sent()?(a.data.splice(Number(r),1),le(e,t,a),n.account.reloadAccount(),[2]):[2]}})})},ye=function(e,t){return g(void 0,void 0,void 0,function(){var n,r,a,s,o,c;return v(this,function(u){switch(u.label){case 0:return[4,at("Please input the account name to remove this account")];case 1:return n=u.sent(),r=Nt(e,t),n!==r?(console.log(Y.red("Can't remove this account")),[2]):[4,_t("Are you sure you want to remove this account(".concat(r,")"),!0)];case 2:return u.sent()?(a=p.join(e,"accounts/".concat(t,".json")),d.rmSync(a),s=p.resolve(e,"network.json"),d.existsSync(s)?(o=JSON.parse(d.readFileSync(s,"utf8")),c=o.accounts.indexOf(r),o.accounts.splice(c,1),d.writeFileSync(s,JSON.stringify(o,null,2)),[2]):[2]):[2]}})})},ke=function(e,t){return g(void 0,void 0,void 0,function(){var n,r,a,s,o;return v(this,function(c){switch(c.label){case 0:return n=p.resolve(e,"accounts"),d.existsSync(n)||d.mkdirSync(n),r=ue(e),a=r.accounts,s=0===a.length?["> Create a new account",new h.default.Separator("----------------------------------"),"> Back"]:["> Select an account","> Create a new account",new h.default.Separator("----------------------------------"),"> Back"],[4,vt(s)];case 1:switch(o=c.sent(),o){case"> Select an account":return[3,2];case"> Create a new account":return[3,4];case"> Back":return[3,6]}return[3,7];case 2:return[4,pe(e,t)];case 3:case 5:return c.sent(),[3,7];case 4:return[4,ce(e,t)];case 6:return[2];case 7:return[4,ke(e,t)];case 8:return c.sent(),[2]}})})},Se=require("chalk"),xe=function(e){return g(void 0,void 0,void 0,function(){var t,n;return v(this,function(r){return t=p.resolve(e,"network.json"),d.existsSync(t)||(n={networks:F,currentNetwork:"Ethereum Mainnet",accounts:[]},d.writeFileSync(t,JSON.stringify(n,null,2))),[2]})})},Ne=function(e,t){return g(void 0,void 0,void 0,function(){var n,r;return v(this,function(a){switch(a.label){case 0:return n=["> Edit"],"Ethereum Mainnet"!==t.name&&"Solana Mainnet"!==t.name&&n.push("> Remove"),n.push(new h.default.Separator("----------------------------------")),n.push("> Back"),[4,vt(n)];case 1:switch(r=a.sent(),r){case"> Edit":return[3,2];case"> Remove":return[3,4];case"> Back":return[3,6]}return[3,7];case 2:return[4,Pe(e,t)];case 3:case 5:return a.sent(),[3,7];case 4:return[4,Oe(e,t)];case 6:return[3,7];case 7:return[2]}})})},Pe=function(e,t){return g(void 0,void 0,void 0,function(){var n,r,a,s,o,c,u,i,l,f,h,m,g;return v(this,function(v){switch(v.label){case 0:for(n=p.resolve(e,"network.json"),r=JSON.parse(d.readFileSync(n,"utf8")),a=[],g=0;g<r.networks.length;g++)s=r.networks[g],a.push(s.name);return o=t.rpcUrl,c=t.chainId.toString(),u=t.nativeCurrency.symbol,i=t.name,l=t.multicallAddress,f=t.color,"Ethereum Mainnet"!==t.name&&"Solana Mainnet"!==t.name?[3,2]:[4,yt(t.chainId.toString(),"Rpc Url (default: ".concat(t.rpcUrl,")"),!0)];case 1:return o=v.sent(),[3,9];case 2:return[4,at("Chain Name (default: ".concat(t.name,")"))];case 3:return(i=v.sent())&&i!==t.name&&a.includes(i)?(console.log(Se.red("Chain Name already exists")),[2]):[4,wt("Chain Id (default: ".concat(t.chainId,")"),!0)];case 4:return c=v.sent(),[4,yt(c||t.chainId,"RPC Url (default: ".concat(t.rpcUrl,")"),!0)];case 5:return o=v.sent(),[4,St("Symbol (default: ".concat(t.nativeCurrency.symbol,")"))];case 6:return u=v.sent(),[4,kt(t.multicallAddress?"Multicall Address (Optional) (default: ".concat(t.multicallAddress,")"):"Multicall Address (Optional)")];case 7:return l=v.sent(),[4,xt(t.color?"Color (Optional): (default: ".concat(t.color,")"):"Color (Optional)")];case 8:f=v.sent(),v.label=9;case 9:for(o=o||t.rpcUrl,c=c||t.chainId.toString(),u=u||t.nativeCurrency.symbol,i=i||t.name,l=l||t.multicallAddress,f=f||t.color,h=j(c.toString()),m={name:i||t.name,chainId:Number(c)||t.chainId,rpcUrl:o||t.rpcUrl,nativeCurrency:{name:u||t.nativeCurrency.symbol,symbol:u||t.nativeCurrency.symbol,decimals:h||t.nativeCurrency.decimals}},(l||t.multicallAddress)&&(m.multicallAddress=l||t.multicallAddress),(f||t.color)&&(m.color=f||t.color),g=0;g<r.networks.length;g++)if(r.networks[g].name===t.name){r.networks[g]=m;break}return d.writeFileSync(n,JSON.stringify(r,null,2)),[2]}})})},Oe=function(e,t){return g(void 0,void 0,void 0,function(){var n,r,a;return v(this,function(s){for(n=p.resolve(e,"network.json"),r=JSON.parse(d.readFileSync(n,"utf8")),a=0;a<r.networks.length;a++)if(r.networks[a].name===t.name){r.networks.splice(a,1);break}return t.name===r.currentNetwork&&(r.currentNetwork="Ethereum Mainnet"),d.writeFileSync(n,JSON.stringify(r,null,2)),[2]})})},Be=function(e){return g(void 0,void 0,void 0,function(){var t,n,r,a,s,o,c,u,i,l,f,h,m;return v(this,function(g){switch(g.label){case 0:for(t=p.resolve(e,"network.json"),n=JSON.parse(d.readFileSync(t,"utf8")),r=[],a=0;a<n.networks.length;a++)s=n.networks[a],r.push(s.name);return console.log(Se.green("Please input someting about network")),[4,at("Chain Name")];case 1:return o=g.sent(),r.includes(o)?(console.log(Se.red("Chain Name already exists")),[2]):[4,wt("Chain Id")];case 2:return(c=g.sent())?[4,yt(c,"RPC Url")]:[2];case 3:return(u=g.sent())?[4,St("Symbol")]:[2];case 4:return(i=g.sent())?[4,kt("Multicall Address (Optional)")]:[2];case 5:return l=g.sent(),[4,xt("Color (Optional)")];case 6:return f=g.sent(),h=j(c.toString()),m={name:o,chainId:Number(c),rpcUrl:u,nativeCurrency:{name:i,symbol:i,decimals:h}},l&&(m.multicallAddress=l),f&&(m.color=f),n.networks.push(m),d.writeFileSync(t,JSON.stringify(n,null,2)),[2]}})})},Ae=function(e){return g(void 0,void 0,void 0,function(){var t,n,r,a,s,o,c,u,i,l,f,m,g;return v(this,function(v){switch(v.label){case 0:for(t=p.resolve(e,"network.json"),n=JSON.parse(d.readFileSync(t,"utf8")),r=[],a=[],c=0;c<n.networks.length;c++)i=n.networks[c],"solana"===I(i.chainId.toString())?a.push(c):r.push(c);for(s=["> Back","+ Add Network",new h.default.Separator("----Networks(evm)----")],c=0;c<r.length;c++)o=r[c],i=n.networks[o],l="".concat(c+1,".").concat(i.name),0===c&&(l+=" 🔒"),s.push(l);for(s.push(new h.default.Separator("----Networks(solana)----")),c=0;c<a.length;c++)u=a[c],i=n.networks[u],l="".concat(c+1,".").concat(i.name),0===c&&(l+=" 🔒"),s.push(l);return[4,vt(s)];case 1:return"> Back"===(f=v.sent())?[2]:"+ Add Network"!==f?[3,3]:[4,Be(e)];case 2:case 5:return v.sent(),[2];case 3:return m=s.indexOf(f),g=m<r.length+3?n.networks[r[m-3]]:n.networks[a[m-r.length-4]],[4,Ne(e,g)];case 4:return v.sent(),[4,Ae(e)]}})})},Te=function(e){return g(void 0,void 0,void 0,function(){var t,n;return v(this,function(r){switch(r.label){case 0:return t=["> Enhanced Balance Display",new h.default.Separator("----------------------------------"),"> Back"],[4,vt(t)];case 1:switch(n=r.sent(),n){case"> Enhanced Balance Display":return[3,2];case"> Back":return[3,4]}return[3,5];case 2:return[4,Ie(e)];case 3:return r.sent(),[3,5];case 4:return[2];case 5:return[4,Te(e)];case 6:return r.sent(),[2]}})})},Ce=function(e){return g(void 0,void 0,void 0,function(){var t,n,r,a,s,o,c;return v(this,function(u){switch(u.label){case 0:return t=p.resolve(e,"network.json"),"status"in(n=JSON.parse(d.readFileSync(t,"utf8")))||(n.status={fullAddr:!1,gasToken:!1,extendedToken:!1}),r=["> Show Full Address [".concat(n.status.fullAddr?"ON":"OFF","]"),"> Show Gas Token [".concat(n.status.gasToken?"ON":"OFF","]"),"> Show Extended Token[".concat(n.status.extendedToken?"ON":"OFF","]"),new h.default.Separator("----------------------------------"),"> Back"],[4,vt(r)];case 1:return"> Back"===(a=u.sent())?[2]:a.includes("Full Address")?(s=n.status,[4,Fe()]):[3,3];case 2:return s.fullAddr=u.sent(),[3,7];case 3:return a.includes("Gas Token")?(o=n.status,[4,Fe()]):[3,5];case 4:return o.gasToken=u.sent(),[3,7];case 5:return a.includes("Extended Token")?(c=n.status,[4,Fe()]):[3,7];case 6:c.extendedToken=u.sent(),u.label=7;case 7:return d.writeFileSync(t,JSON.stringify(n,null,2)),[2]}})})},Fe=function(){return g(void 0,void 0,void 0,function(){return v(this,function(e){switch(e.label){case 0:return[4,vt(["> On","> Off"])];case 1:switch(e.sent()){case"> On":return[2,!0];case"> Off":return[2,!1]}return[2]}})})},_e=function(e,t){var n=p.resolve(e,"network.json"),r=JSON.parse(d.readFileSync(n,"utf8")).showTokens;return t in r?r[t]:[]},je=function(e){return g(void 0,void 0,void 0,function(){var t,n,r,a,s,o,c,u,i,l,f,m,g,b,w,y,k,S,x,N,P;return v(this,function(v){switch(v.label){case 0:for(t=p.resolve(e,"network.json"),n=JSON.parse(d.readFileSync(t,"utf8")),r={},a=0,s=n.networks;a<s.length;a++)o=s[a],r[o.chainId.toString()]=o.name;if(c=p.resolve(e,"assets.json"),!Rt(c))return console.log(Se.red("No asset here yet")),[2];for(m in u=JSON.parse(d.readFileSync(c,"utf8")),i=[],l=[],f={},u)for(f[i.length]={name:r[m],address:null},i.push(new h.default.Separator("----- Networks (".concat(r[m],") -------"))),g=_e(e,r[m]),b=u[m].length,S=0;S<b;S++)w=u[m][S],g.includes(w.address)&&l.push("".concat(S+1,".").concat(w.symbol.padEnd(6)," CA: ").concat(Se.green("".concat(Jt(w.address).padEnd(45)))," Decimals: ").concat(w.display_decimals?w.display_decimals:"4")),f[i.length]={name:r[m],address:w.address},i.push("".concat(S+1,".").concat(w.symbol.padEnd(6)," CA: ").concat(Se.green("".concat(Jt(w.address).padEnd(45)))," Decimals: ").concat(w.display_decimals?w.display_decimals:"4"));return[4,bt(i,"Choose Tokens",l)];case 1:for(y=v.sent(),k={},S=0;S<y.length;S++)x=y[S],N=i.indexOf(x),(P=f[N]).name in k?k[P.name].push(P.address):k[P.name]=[P.address];return n.showTokens=k,d.writeFileSync(t,JSON.stringify(n,null,2)),[2]}})})},Ie=function(e){return g(void 0,void 0,void 0,function(){var t,n;return v(this,function(r){switch(r.label){case 0:return t=["> Status","> Token List","> Add Token",new h.default.Separator("----------------------------------"),"> Back"],[4,vt(t)];case 1:switch(n=r.sent(),n){case"> Status":return[3,2];case"> Token List":return[3,4];case"> Add Token":return[3,6];case"> Back":return[3,8]}return[3,9];case 2:return[4,Ce(e)];case 3:case 5:case 7:return r.sent(),[3,9];case 4:return[4,je(e)];case 6:return[4,Qe(e)];case 8:return[2];case 9:return[4,Ie(e)];case 10:return r.sent(),[2]}})})},Le=function(e){return g(void 0,void 0,void 0,function(){var t,n;return v(this,function(r){switch(r.label){case 0:return t=["> Networks","> Dataview",new h.default.Separator("----------------------------------"),"> Back"],[4,vt(t)];case 1:switch(n=r.sent(),n){case"> Networks":return[3,2];case"> Dataview":return[3,4];case"> Back":return[3,6]}return[3,7];case 2:return[4,Ae(e)];case 3:case 5:return r.sent(),[3,7];case 4:return[4,Te(e)];case 6:return[2];case 7:return[4,Le(e)];case 8:return r.sent(),[2]}})})},qe=function(e){return g(void 0,void 0,void 0,function(){var t,n,r;return v(this,function(a){switch(a.label){case 0:return t=p.resolve(e,"network.json"),n=JSON.parse(d.readFileSync(t,"utf8")),r=n.networks.map(function(e){return"> ".concat(e.name)}),[4,vt(r,"Please select a default network")];case 1:return[2,a.sent().slice(2)]}})})},Re=function(e,t){for(var n=p.resolve(e,"network.json"),r=JSON.parse(d.readFileSync(n,"utf8")),a=0;a<r.networks.length;a++){var s=r.networks[a];if(s.name===t)return I(s.chainId.toString())}return"unknown"},ze=function(e,t){for(var n=p.resolve(e,"network.json"),r=JSON.parse(d.readFileSync(n,"utf8")),a=0;a<r.networks.length;a++){var s=r.networks[a];if(s.name===t)return s}return null},Je=function(e,t,n){var r=ie(e,t);if("PK"===r.account_type)return r.data[n].ciphertexts.address;var a=r.default_network,s=Re(e,a);return"solana"===s?r.data[n].ciphertexts.solana.address:"evm"===s?r.data[n].ciphertexts.evm.address:null},Ue=function(e,t,n){return g(void 0,void 0,void 0,function(){var r,a,s,o,c,u,i,l,f,h,m;return v(this,function(g){for(r=p.resolve(e,"network.json"),a=JSON.parse(d.readFileSync(r,"utf8")),s=a.networks,o=s.length,c=ie(e,t),u=c.default_network,i=Re(e,u),l=0;l<o;l++)f=s[l],h=Re(e,f.name),"PK"===c.account_type&&i!==h||(m=void 0,m="PK"===c.account_type?c.data[n].ciphertexts.address:"evm"===h?c.data[n].ciphertexts.evm.address:c.data[n].ciphertexts.solana.address,f.name===u?console.log("● ".concat(m," [").concat(f.name,"]")):console.log("○ ".concat(m," [").concat(f.name,"]")));return[2]})})},Ee=function(e,t,n){return g(void 0,void 0,void 0,function(){var r,a,s,o,c,u,i,l,f,m,g,b,w,y,k,S,x;return v(this,function(v){switch(v.label){case 0:for(r=p.resolve(e,"network.json"),a=JSON.parse(d.readFileSync(r,"utf8")),s=a.networks,o=s.length,c=ie(e,t),u=["> Back",new h.default.Separator("----------------------------------")],i=c.default_network,l="",n||(l=c.ciphertexts.address),f=[],m=Re(e,i),g=0;g<o;g++)b=s[g],w=Re(e,b.name),"PK"===c.account_type&&m!==w||(b.name===i?n?u.push("● ".concat(b.name)):u.push("● ".concat(l," [").concat(b.name,"]")):n?u.push("○ ".concat(b.name)):u.push("○ ".concat(l," [").concat(b.name,"]")),f.push(b.name));return[4,vt(u)];case 1:return"> Back"===(y=v.sent())||(k=u.indexOf(y),c.default_network=f[k-2],le(e,t,c),n||(S=c.default_network,x=ze(e,S),console.log(Se.green(" Address No: #0\n Network: ".concat(S,"\n ").concat(x.nativeCurrency.symbol," Balance: 0"))))),[2]}})})},Ke=function(e,t,n){return g(void 0,void 0,void 0,function(){var r,a,s,o,c;return v(this,function(i){switch(i.label){case 0:return r=ze(t,n),a=r.rpcUrl,s=r.nativeCurrency.decimals,"solana"!==I(r.chainId.toString())?[3,2]:[4,k(e,a)];case 1:return o=i.sent(),[3,4];case 2:return[4,y(e,a)];case 3:o=i.sent(),i.label=4;case 4:return o.status&&(c=new u.BigNumber(o.output.toString()),o.output=c.dividedBy(Math.pow(10,s)).toFixed(4,u.BigNumber.ROUND_FLOOR)),T(r.chainId.toString(),[e],["0"]),[2,o]}})})},Me=function(e,t,n){var r=ie(e,t);if("PK"===r.account_type)return r.default_network;for(var a=0;a<r.data.length;a++)if(r.data[a].ciphertexts.solana.address===n||r.data[a].ciphertexts.evm.address===n)return"default_network"in r.data[a]?r.data[a].default_network:r.default_network;return null},De=function(e){for(var t=p.resolve(e,"network.json"),n=JSON.parse(d.readFileSync(t,"utf8")).networks,r=n.length,a=[],s=0;s<r;s++)"evm"===I(n[s].chainId.toString())&&a.push(n[s].name);return a},Ge=function(e){var t=p.resolve(e,"network.json");return JSON.parse(d.readFileSync(t,"utf8")).status},We=require("chalk"),$e=function(e,t){return g(void 0,void 0,void 0,function(){var n,r,a;return v(this,function(s){return n=p.join(e,"assets.json"),Rt(n)?(r=d.readFileSync(n).toString(),a=JSON.parse(r),t in a?[2,a[t]]:[2,[]]):[2,[]]})})},He=function(e,t,n){return g(void 0,void 0,void 0,function(){var r,a,s;return v(this,function(o){switch(o.label){case 0:return[4,$e(e,t)];case 1:for(r=o.sent(),a=[],s=0;s<r.length;s++)r[s].symbol.toLocaleLowerCase()===n.toLocaleLowerCase()&&a.push(r[s]);return[2,a]}})})},Ze=function(e,t,n){return g(void 0,void 0,void 0,function(){var r,a,s,o,c,u;return v(this,function(i){switch(i.label){case 0:return r=ze(e,t),a=I(r.chainId.toString()),[4,$e(e,r.chainId.toString())];case 1:return(s=i.sent())?[4,Ye(n,s,r.rpcUrl,a,r.chainId.toString())]:(console.log(We.red("No asset found")),[2]);case 2:for(o=i.sent(),c=1,u=0;u<o.length;u++)"0"!==o[u].balance&&"0.0000"!==o[u].balance&&(console.log(We.green("".concat(c,". ").concat(o[u].symbol," Balance: ").concat(o[u].balance))),c+=1);return 1===c&&console.log(We.red("No asset found")),[2]}})})},Ve=function(e,t,n){return g(void 0,void 0,void 0,function(){var r,a,s;return v(this,function(o){switch(o.label){case 0:return r=ze(e,t),[4,$e(e,r.chainId.toString())];case 1:return a=o.sent(),(s=a.map(function(e){return e.address})).push("0"),T(r.chainId.toString(),[n],s),[2]}})})},Xe=function(e,t,n,r,a,s,o){return g(void 0,void 0,void 0,function(){var c,u,i,l;return v(this,function(f){for(c=p.join(e,"assets.json"),u={},Rt(c)&&(i=d.readFileSync(c).toString(),u=JSON.parse(i)),void 0===u[t]&&(u[t]=[]),l=0;l<u[t].length;l++)if(u[t][l].address.toLocaleLowerCase()===n.toLocaleLowerCase()||u[t][l].symbol.toLocaleLowerCase()===r.toLocaleLowerCase())return u[t][l]={address:n,symbol:r,name:a,decimals:s,display_decimals:o},d.writeFileSync(c,JSON.stringify(u,null,4)),[2];return u[t].push({address:n,symbol:r,name:a,decimals:s,display_decimals:o}),d.writeFileSync(c,JSON.stringify(u,null,4)),[2]})})},Qe=function(e){return g(void 0,void 0,void 0,function(){var t,n,r,a,s,o,c,u,i,l,f,h,m,g;return v(this,function(v){switch(v.label){case 0:for(t=p.resolve(e,"network.json"),n=JSON.parse(d.readFileSync(t,"utf8")),r=[],a=n.networks,s=0;s<a.length;s++)r.push("".concat(s+1,". ").concat(a[s].name));return[4,vt(r)];case 1:return o=v.sent(),c=o.split(".")[1].trim(),u=Re(e,c),i=ze(e,c),[4,at("Enter contract address",gt)];case 2:return l=v.sent(),"evm"!==u?[3,4]:(b=l).startsWith("0x")&&42===b.length?[4,S(l,i.rpcUrl)]:(console.log(We.red("evm address format error")),[2]);case 3:return f=v.sent(),[3,6];case 4:return function(e){return/^[A-HJ-NP-Za-km-z1-9]*$/.test(e)}(l)?[4,x(l,i.rpcUrl)]:(console.log(We.red("solana address format error")),[2]);case 5:f=v.sent(),v.label=6;case 6:return f.status?f.output.name?[3,8]:(h=f.output,[4,at("Please input token name")]):(console.log(We.red(f.output)),[2]);case 7:h.name=v.sent(),v.label=8;case 8:return f.output.symbol?[3,10]:(m=f.output,[4,at("Please input token symbol")]);case 9:m.symbol=v.sent(),v.label=10;case 10:return console.log(We.green("Token ".concat(f.output.symbol,"(").concat(f.output.name,") loaded successfully."))),[4,at("Enter decimals for display",lt)];case 11:return g=v.sent(),g=parseInt(g),[4,Xe(e,i.chainId.toString(),l,f.output.symbol,f.output.name,f.output.decimals,g)];case 12:return v.sent(),[2]}var b})})},Ye=function(e,t,n,r,a){return g(void 0,void 0,void 0,function(){var s,o,c,i,l,d,p,f,h;return v(this,function(m){switch(m.label){case 0:for(s=t.length,o=[],l=0;l<s;l++)d=t[l],"evm"===r?o.push(N(e,d.address,n)):"solana"===r&&o.push(P(e,d.address,n));return[4,Promise.all(o)];case 1:for(c=m.sent(),i=[],l=0;l<s;l++){if(d=t[l],p=d.decimals,!c[l].status)return console.log(We.red(c[l].output)),[2,null];f=new u.BigNumber(c[l].output),h=f.dividedBy(Math.pow(10,p)).toFixed(4,u.BigNumber.ROUND_FLOOR),i.push({address:d.address,symbol:d.symbol,balance:h}),T(a,[e],[d.address])}return T(a,[e],["0"]),[2,i]}})})},et=function(e,t,n,r,a,s,o){return g(void 0,void 0,void 0,function(){var c,i,l,d,p,f,h,m,g;return v(this,function(v){switch(v.label){case 0:return c=n.length,i=ze(e,a),l=I(i.chainId.toString()),d="evm"===l,s?[4,A(t,"0",i.chainId.toString(),r,d)]:[3,2];case 1:v.sent(),v.label=2;case 2:if(!o)return[3,6];p=_e(e,a),f=0,v.label=3;case 3:return f<c?(h=n[f],m=h.address,p.includes(m)?[4,A(t,m,i.chainId.toString(),r,d)]:[3,5]):[3,6];case 4:v.sent(),v.label=5;case 5:return f++,[3,3];case 6:return g=function(e,t,n,r){var a={};if(!(e in b))return a;n.unshift({address:"0",name:r.nativeCurrency.name,symbol:r.nativeCurrency.symbol,decimals:r.nativeCurrency.decimals,display_decimals:4});for(var s=t.length,o=0;o<s;o++){var c=t[o];if(c)for(var i=0;i<n.length;i++){var l=n[i],d="0";b[e][l.address]&&(c in b[e][l.address]&&(d=new u.BigNumber(b[e][l.address][c]).dividedBy(Math.pow(10,l.decimals)).toFixed(l.display_decimals||4,u.BigNumber.ROUND_FLOOR)),a[c]||(a[c]={}),a[c][l.symbol]=d)}}return a}(i.chainId.toString(),t,n,i),[2,g]}})})},tt=require("chalk"),nt=process.env.HOME||process.env.USERPROFILE,rt="".concat(nt,"/.wative"),at=function(e,t){return g(void 0,void 0,void 0,function(){var n;return v(this,function(r){switch(r.label){case 0:return n=[{name:"inputText",type:"input",message:"".concat(e,":"),validate:t}],[4,h.default.prompt(n)];case 1:return[2,r.sent().inputText.trim().toString()]}})})},st=function(e){return g(void 0,void 0,void 0,function(){var t,n,r;return v(this,function(a){switch(a.label){case 0:t=0,a.label=1;case 1:return t<5?[4,ct(e,"Input start address or index")]:[3,5];case 2:return(n=a.sent())?[4,ct(e,"Input end address or index")]:(console.log(tt.red("Invalid start account index")),[2,null]);case 3:return(r=a.sent())?n>r?(console.log(tt.red("Invalid address range")),[3,4]):[2,{from:n,to:r}]:(console.log(tt.red("Invalid end account index")),[2,null]);case 4:return t++,[3,1];case 5:return[2,null]}})})},ot=function(e,t,n){return g(void 0,void 0,void 0,function(){var r,a,s,o,c,u;return v(this,function(i){if(r=p.join(e,"accounts/".concat(t,".json")),!d.existsSync(r))return[2,null];if(a=JSON.parse(d.readFileSync(r,"utf8")),s=a.data,o=a.account_type,0===(c=s.length))return[2,null];for(u=0;u<c;u++){if("PK"===o&&s[u].ciphertexts.address.toLocaleLowerCase()===n.toLocaleLowerCase())return[2,u.toString()];if("PP"===o&&(s[u].ciphertexts.evm.address.toLocaleLowerCase()===n.toLocaleLowerCase()||s[u].ciphertexts.solana.address.toLocaleLowerCase()===n.toLocaleLowerCase()))return[2,u.toString()]}return[2,null]})})},ct=function(e,t){return g(void 0,void 0,void 0,function(){var n,r,a,s,o,c,u,i;return v(this,function(l){switch(l.label){case 0:if(n=e.data,0===(r=n.length))return[2,null];for(a=[],s=[],c=0;c<r;c++)a.push(n[c].ciphertexts.evm.address.toLocaleLowerCase()),s.push(n[c].ciphertexts.solana.address.toLocaleLowerCase());o=r-1,c=0,l.label=1;case 1:return c<5?[4,at(t,mt)]:[3,4];case 2:if(u=l.sent(),"unknown"===(i=qt(u)))return Number(u)>o?(console.log(tt.red("Invalid account index")),[3,3]):[2,Number(u)];if("evm"===i&&-1!==a.indexOf(u.toLocaleLowerCase()))return[2,a.indexOf(u.toLocaleLowerCase())];if("solana"===i&&-1!==s.indexOf(u.toLocaleLowerCase()))return[2,s.indexOf(u.toLocaleLowerCase())];l.label=3;case 3:return c++,[3,1];case 4:return[2,null]}})})},ut=function(e){return""===e||((e=e.replace(/\s+/g," ").trim()).length>40?"Tag length should be less than 10":!1!==/^[0-9a-zA-Z\s]*$/g.test(e)||"Tag should be alphanumeric")},it=function(e){return!(e.length<6)||"Address length should be greater than 6"},lt=function(e){return!isNaN(Number(e))||"Value should be a number"},dt=function(e){return!(isNaN(Number(e))||Number(e)>1e3)||"Value should be a number"},pt=function(e){var t=(e=e.replace(/\s+/g," ")).split(/\s+/g);if(12!==t.length&&24!==t.length)return"Passphrase should be equal to 12 or 24 words";for(var n=0;n<t.length;n++)if(!1===C.includes(t[n]))return"Passphrase word should be valid";return!0},ft=function(e){var t=Number(e);return isNaN(t)?"Amount should be a number":!(t>2e3)||"Amount should be less than 2000"},ht=function(e){var t=Number(e);return!isNaN(t)||"Last account no should be a number"},mt=function(e){return!1===isNaN(Number(e))||gt(e)},gt=function(e){return"unknown"!=qt(e)||"Address should be valid"},vt=function(e,t,n){return g(void 0,void 0,void 0,function(){var r;return v(this,function(a){switch(a.label){case 0:return r=[{type:"list",name:"inputText",message:t||"Choose an option",default:n,choices:e,pageSize:30,filter:function(e){return e}}],[4,h.default.prompt(r)];case 1:return[2,a.sent().inputText.toString()]}})})},bt=function(e,t,n){return g(void 0,void 0,void 0,function(){var r;return v(this,function(a){switch(a.label){case 0:return r=[{type:"checkbox",name:"inputText",message:t||"Choose an option",default:n,choices:e,pageSize:30,filter:function(e){return e}}],[4,h.default.prompt(r)];case 1:return[2,a.sent().inputText]}})})},wt=function(e,t){return void 0===t&&(t=!1),g(void 0,void 0,void 0,function(){var n,r;return v(this,function(a){switch(a.label){case 0:n=0,a.label=1;case 1:return n<5?[4,at(e)]:[3,4];case 2:if(""===(r=a.sent())&&t)return[2,null];if(/^[0-9]*$/g.test(r))return[2,r];a.label=3;case 3:return n++,[3,1];case 4:return[2,null]}})})},yt=function(e,t,n){return void 0===n&&(n=!1),g(void 0,void 0,void 0,function(){var r,a,s,o;return v(this,function(c){switch(c.label){case 0:r=0,c.label=1;case 1:return r<5?[4,at(t)]:[3,7];case 2:a=c.sent(),c.label=3;case 3:return c.trys.push([3,5,,6]),""===a&&n?[2,null]:"solana"===I(e.toString())?[2,a]:[4,w(a)];case 4:return(s=c.sent()).status?s.output.toString()===e.toString()?[2,a]:(console.log(tt.red("Rpc url not match chain id")),[3,6]):(console.log(tt.red(s.output)),[3,6]);case 5:return o=c.sent(),console.log(tt.red(o.message)),[3,6];case 6:return r++,[3,1];case 7:return[2,null]}})})},kt=function(e){return g(void 0,void 0,void 0,function(){var t,n;return v(this,function(r){switch(r.label){case 0:t=0,r.label=1;case 1:return t<5?[4,at(e)]:[3,4];case 2:if(""===(n=r.sent()))return[2,null];if(""!==n&&42!==n.length)return console.log(tt.red("Multicall address length must be 42")),[3,3];r.label=3;case 3:return t++,[3,1];case 4:return[2,null]}})})},St=function(e){return g(void 0,void 0,void 0,function(){var t,n,r;return v(this,function(a){switch(a.label){case 0:t=/^[A-Za-z][0-9a-zA-Z]*$/g,n=0,a.label=1;case 1:return n<5?[4,at(e)]:[3,4];case 2:if(""===(r=a.sent()))return[2,null];if(t.test(r))return[2,r];a.label=3;case 3:return n++,[3,1];case 4:return[2,null]}})})},xt=function(e){return g(void 0,void 0,void 0,function(){var t,n,r;return v(this,function(a){switch(a.label){case 0:t=/^#[0-9A-Fa-f]{6}$/g,n=0,a.label=1;case 1:return n<5?[4,at(e)]:[3,4];case 2:if(""===(r=a.sent()))return[2,null];if(t.test(r))return[2,r];a.label=3;case 3:return n++,[3,1];case 4:return[2,null]}})})},Nt=function(e,t){var n=ue(e).accounts,r=Ot(n).indexOf(t);return-1!==r?n[r]:t},Pt=function(e){return e=(e=(e=(e=e.trim()).toLocaleLowerCase()).replace(/\s+/g,"-").trim()).replace(/\-+/g,"-").trim()},Ot=function(e){for(var t=[],n=0;n<e.length;n++)t.push(Pt(e[n]));return t},Bt=function(e,t){return g(void 0,void 0,void 0,function(){var n,r,a,s,o;return v(this,function(c){switch(c.label){case 0:n=Ot(t),r=/^(?![-_])[a-zA-Z0-9_-]{4,40}(?<![-_])$/g,a=0,c.label=1;case 1:return a<5?[4,at(e)]:[3,4];case 2:if(s=(s=c.sent()).trim(),o=Pt(s),r.test(o))return n.includes(o)?(console.log(tt.red("Account name already exists")),[3,3]):[2,s];c.label=3;case 3:return a++,[3,1];case 4:return[2,null]}})})},At=function(e,t){return g(void 0,void 0,void 0,function(){var n;return v(this,function(r){switch(r.label){case 0:return n=[{name:"inputText",type:"password",mask:"#",message:"".concat(e,":"),validate:t}],[4,h.default.prompt(n)];case 1:return[2,r.sent().inputText.trim().toString()]}})})},Tt=function(e){return g(void 0,void 0,void 0,function(){var t;return v(this,function(n){switch(n.label){case 0:return t=[{name:"password",type:"password",mask:"#",message:"".concat(e,":")}],[4,h.default.prompt(t)];case 1:return[2,n.sent().password]}})})},Ct=function(e,t){return g(void 0,void 0,void 0,function(){var n;return v(this,function(r){switch(r.label){case 0:return n=[{name:"inputText",type:"input",message:"".concat(e,":"),validate:t,transformer:function(e){var t=e.split(" ");return t.map(function(e,n){return n<t.length-1?"#".repeat(e.length):e}).join(" ")}}],[4,h.default.prompt(n)];case 1:return[2,r.sent().inputText.trim().toString()]}})})},Ft=function(e){return g(void 0,void 0,void 0,function(){var t,n,r;return v(this,function(a){switch(a.label){case 0:return t=0,n=[{name:"password",type:"password",mask:"#",message:"".concat(e,":"),validate:function(e){return t>=3||(n=e,r="Password must contain at least: \n",a=!0,s=" ",o=tt.green("✔"),c=tt.red("✖"),n.length>=8?r+=s+o+" 8 characters\n":(r+=s+c+" 8 characters\n",a=!1),/[0-9]/.test(n)?r+=s+o+" One numerical character\n":(r+=s+c+" One numerical character\n",a=!1),/[A-Z]/.test(n)?r+=s+o+" One uppercase letter\n":(r+=s+c+" One uppercase letter\n",a=!1),/[!@#$%]/.test(n)?r+=s+o+" One sepcial character (i.e. !@#$%)\n":(r+=s+c+" One sepcial character (i.e. !@#$%)\n",a=!1),!!a||r);var n,r,a,s,o,c}}],[4,h.default.prompt(n)];case 1:return r=a.sent().password,t>=3&&(r=null),[2,r]}})})},_t=function(e,t){return void 0===t&&(t=!0),g(void 0,void 0,void 0,function(){var n;return v(this,function(r){switch(r.label){case 0:return n=[{name:"confirm",type:"confirm",message:"".concat(e),default:t}],[4,h.default.prompt(n)];case 1:return[2,r.sent().confirm]}})})},jt=function(e,t){return g(void 0,void 0,void 0,function(){var n;return v(this,function(r){switch(r.label){case 0:return n=[{name:"editor",type:"editor",message:"".concat(e),validate:t}],[4,h.default.prompt(n)];case 1:return[2,r.sent().editor.trim().toString()]}})})},It=function(e){return!!/^0x[0-9a-fA-F]*$/g.test(e.trim())},Lt=function(e,t){return g(void 0,void 0,void 0,function(){var n,r,a;return v(this,function(s){switch(s.label){case 0:return s.trys.push([0,2,,3]),[4,e.apply(void 0,t)];case 1:return r=s.sent(),n={status:!0,output:r},[3,3];case 2:return a=s.sent(),n={status:!1,output:a.toString()},[3,3];case 3:return[2,n]}})})},qt=function(e){return e.startsWith("0x")&&42===e.length?"evm":/^[A-HJ-NP-Za-km-z1-9]*$/.test(e)&&e.length<=44&&e.length>=32?"solana":"unknown"},Rt=function(e){return e=e.trim(),d.existsSync(e)},zt=function(e){return new Promise(function(t){return setTimeout(t,e)})},Jt=function(e,t){return void 0===t&&(t=!0),t?e:e.startsWith("0x")?e.slice(0,8)+"..."+e.slice(-6):e.slice(0,6)+"..."+e.slice(-6)},Ut=function(e,t){if(!e.name)return null;var n=null;if(t)n=(n=/0x[0-9a-fA-f]{40}/.exec(e.name))?n[0]:null;else{var r=/\s+([0-9a-zA-Z]*)/.exec(e.name);"Back"===(n=r?r[1]:null)&&(n=null)}return n},Et=function(e,t,n){var r,a;return e<t/2?n/2<=t?(r=0,a=n/2):(r=0,a=t):n/2<=t?(r=0,a=n/2):(r=e-t/2+1,a=e+t/2+1),{fromIndex:r,toIndex:a}},Kt=function(e,t){for(var n=[],r=0;r<e.length;r++){var a=Ut(e[r],t);n.push(a)}return n.concat(n)},Mt=function(e,t,n,r,a,s,o,c,u,i){return g(void 0,void 0,void 0,function(){var l,d,p,f,m,g,w,y,k,S,x,N,P,O,B,A,T,C,F,_,j,I,L,q;return v(this,function(v){switch(v.label){case 0:l=[{type:"list",name:"inputText",message:u||"Choose an option",choices:e,pageSize:30,default:i,loop:!0,filter:function(e){return e}}],d=h.default.prompt(l),p=0,f=0,v.label=1;case 1:return d.ui.activePrompt.answers[d.ui.activePrompt.opt.name]?[3,5]:c?[3,3]:[4,zt(1e3)];case 2:v.sent(),v.label=3;case 3:return m===d.ui.activePrompt.selected?[3,1]:(p===d.ui.activePrompt.selected?f+=1:(f=0,p=d.ui.activePrompt.selected),!c||(f=6,c=!1,g=d.ui.activePrompt.opt.pageSize,w=Kt(d.ui.activePrompt.opt.choices.choices,t),y=Et(p,g,w.length),k=y.fromIndex,S=y.toIndex,x=w.slice(k,S),function(e,t){var n=0;if(e in b&&"0"in b[e])for(var r=0;r<t.length;r++)t[r]in b[e][0]&&(n+=1);return 0!==n&&n/t.length>.8}(a.chainId.toString(),x))?f<5?[3,1]:(f=0,N=d.ui.activePrompt.opt.pageSize,P=Kt(d.ui.activePrompt.opt.choices.choices,t),O=Et(p,N,P.length),B=O.fromIndex,A=O.toIndex,T=P.slice(B,A),[4,et(n,T,r,a.rpcUrl,a.name,s,o)]):(f=0,[3,1]));case 4:for(_ in C=v.sent(),F={},C)for(j in C[_])I=C[_][j],L=I.length+1,F[j]?F[j]<L&&(F[j]=L):F[j]=L;return q=a.nativeCurrency.symbol,function(e,t,n,r,a,s,o,c,u){for(var i=c;i<u;i++){var l=i>=t.length/2?i-t.length/2:i,d=e[l];if(d.name){var p=d.name,f=t[i],h="";if(f){for(var m in n[f])(s||m!==a)&&(o||m===a)&&(p.includes(m)||(h+="".concat(m,":").concat(n[f][m].padEnd(r[m])," ")));var g=p.split("(");if(g.length>1){var v=g[1];e[l].name=g[0]+" ".concat(h)+"(".concat(v)}else e[l].name=g[0]+" ".concat(h)}}}}(d.ui.activePrompt.opt.choices.choices,P,C,F,q,s,o,B,A),d.ui.activePrompt.screen.render(""),d.ui.activePrompt.render(),m=p,[3,1];case 5:return[2,d.ui.activePrompt.answers[d.ui.activePrompt.opt.name]]}})})};require("wative-core").WativeCore;var Dt=function(e,t){return g(void 0,void 0,void 0,function(){var n;return v(this,function(r){switch(r.label){case 0:return[4,vt(["> System & Settings","> Accounts","> Tools","> Exit"])];case 1:switch(n=r.sent(),n){case"> System & Settings":return[3,2];case"> Accounts":return[3,4];case"> Tools":return[3,6];case"> Exit":return[3,8]}return[3,9];case 2:return[4,Le(e)];case 3:case 5:case 7:return r.sent(),[3,9];case 4:return[4,ke(e,t)];case 6:return[4,Q(e,t)];case 8:return[2];case 9:return[4,Dt(e,t)];case 10:return r.sent(),[2]}})})},Gt=require("wative-core").WativeCore,Wt=require("../package.json");require("events").EventEmitter.defaultMaxListeners=0;process.on("unhandledRejection",function(e,t){console.log("Unhandled Rejection at:",t,"reason:",e)}),g(void 0,void 0,void 0,function(){var e,t,n,r,a;return v(this,function(s){switch(s.label){case 0:return console.log("version:",Wt.version),console.log(tt.green(f.textSync("Wative",{font:"ANSI Shadow",horizontalLayout:"default",verticalLayout:"default"}))),[4,g(void 0,void 0,void 0,function(){var e;return v(this,function(t){switch(t.label){case 0:return[4,at("Keystore storage located in (default: ".concat(rt,")"))];case 1:return(e=t.sent())||(e=rt),e=(e=e.trim()).replace("~",nt),d.existsSync(e)||d.mkdirSync(e,{recursive:!0}),[2,e]}})})];case 1:return e=s.sent(),[4,xe(e)];case 2:return s.sent(),function(e){var t=p.resolve(e,"network.json"),n=JSON.parse(d.readFileSync(t,"utf8"));n.status||(n.status={fullAddr:!0,gasToken:!1,extendedToken:!1}),n.showTokens||(n.showTokens={});for(var r=n.accounts.length,a=0;a<r;a++){var s=n.accounts[r-1-a],o=Pt(s),c=p.resolve(e,"accounts/".concat(o,".json"));d.existsSync(c)||n.accounts.splice(r-1-a,1)}d.writeFileSync(t,JSON.stringify(n,null,4));var u=n.accounts,i=Ot(u);for(a=0;a<i.length;a++){c=p.resolve(e,"accounts/".concat(i[a],".json"));var l=JSON.parse(d.readFileSync(c,"utf8"));"PP"!==l.account_type&&("data"in l||(l.data=[{ciphertexts:l.ciphertexts}],delete l.ciphertexts,d.writeFileSync(c,JSON.stringify(l,null,4))))}}(e),t=p.resolve(e,"network.json"),n=JSON.parse(d.readFileSync(t,"utf8")),r=Ot(n.accounts),a=new Gt(e,r,null,!0),[4,Dt(e,a)];case 3:return s.sent(),[2]}})}).then(function(){return process.exit(0)}).catch(function(e){console.log(e.message),process.exit(1)})});
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("fs"),require("path"),require("figlet"),require("inquirer"),require("web3"),require("@solana/web3.js"),require("@solana/spl-token"),require("@metaplex-foundation/js"),require("bignumber.js"),require("ini"),require("crypto"),require("child_process"),require("ssh2"),require("log4js"),require("ethers"),require("tweetnacl"),require("bs58"),require("bip39"),require("@coral-xyz/anchor"),require("crypto-js"),require("ethereumjs-wallet"),require("micro-ed25519-hdkey"),require("net"),require("commander")):"function"==typeof define&&define.amd?define(["exports","fs","path","figlet","inquirer","web3","@solana/web3.js","@solana/spl-token","@metaplex-foundation/js","bignumber.js","ini","crypto","child_process","ssh2","log4js","ethers","tweetnacl","bs58","bip39","@coral-xyz/anchor","crypto-js","ethereumjs-wallet","micro-ed25519-hdkey","net","commander"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).demo={},e.fs,e.path,e.figlet,e.inquirer,e.Web3,e.require$$6,e.splToken,e.js,e.bignumber_js,e.ini,e.crypto,e.child_process,e.ssh2,e.log4js,e.ethers,e.require$$3,e.require$$4,e.require$$5,e.require$$7,e.require$$8,e.require$$9,e.require$$10,e.net,e.commander)}(this,function(e,t,a,r,n,s,o,i,c,l,u,d,p,g,h,m,f,y,w,v,b,k,S,x,_){"use strict";function P(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function $(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(a){if("default"!==a){var r=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(t,a,r.get?r:{enumerable:!0,get:function(){return e[a]}})}}),t.default=e,Object.freeze(t)}var A=$(t),N=P(t),I=$(a),C=P(a),j=$(r),T=P(n),O=P(s),B=P(o),E=$(u),F=$(d),L=$(h),q=P(f),K=P(y),R=P(w),M=P(v),D=P(b),z=P(k),U=P(S),H=$(x);const J={},G=async e=>{let t=new O.default(e);return await ma(t.eth.getChainId,[])},W=async(e,t)=>{const a=new O.default(t);return await ma(a.eth.getBalance,[e])},V=async(e,t)=>{const a=new o.Connection(t);return await ma(a.getBalance.bind(a),[new o.PublicKey(e)])},Z=async(e,t)=>{const a=new(new O.default(t).eth.Contract)([{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"}],e);let r=await ma(a.methods.symbol().call.bind(a),[]),n=await ma(a.methods.name().call.bind(a),[]),s=await ma(a.methods.decimals().call.bind(a),[]);return r.status&&n.status&&s.status?{status:!0,output:{symbol:r.output,name:n.output,decimals:s.output}}:{status:!1,output:"Failed to get token info"}},X=async(e,t)=>{const a=new o.Connection(t),r=c.Metaplex.make(a),n=new o.PublicKey(e),s=await ma(i.getMint,[a,n]);let l={status:!0,output:{symbol:"",name:"",decimals:""}};if(!s.status)return{status:!1,output:"Failed to get token decimals"};l.output.decimals=s.output.decimals;try{const e=r.nfts().pdas().metadata({mint:n});if(await a.getAccountInfo(e)){const e=await r.nfts().findByMint({mintAddress:n});l.output.name=e.name,l.output.symbol=e.symbol}}catch(e){return{status:!1,output:"Failed to get token name"}}return l},Q=async(e,t,a)=>{const r=new(new O.default(a).eth.Contract)([{constant:!0,inputs:[{name:"who",type:"address"}],name:"balanceOf",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"}],t);let n=await ma(r.methods.balanceOf(e).call.bind(r),[]);return n.status?{status:!0,output:n.output}:{status:!1,output:"Failed to get token balance"}},Y=async(e,t,a)=>{const r=new o.Connection(a),n=i.getAssociatedTokenAddressSync(new o.PublicKey(t),new o.PublicKey(e));let s=await ma(r.getTokenAccountBalance.bind(r),[n]);return s.status?{status:!0,output:s.output.value.amount}:s.output.includes("could not find account")?{status:!0,output:"0"}:{status:!1,output:"Failed to get token balance"}},ee=async(e,t)=>{const a=new O.default(t);let r=await ma(a.eth.getCode.bind(a),[e]);return r.status?{status:!0,output:r.output}:{status:!1,output:"Failed to get code"}},te=async(e,t,a)=>new O.default(a).eth.abi.encodeFunctionCall({constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},[e,t]),ae=async e=>{const t=new o.Connection(e);let a=await ma(t.getRecentPrioritizationFees.bind(t),[]);if(!a.status)return{status:!1,output:"Failed to get recent prioritization fees"};const r=a.output.map(e=>e.prioritizationFee).sort();return{status:!0,output:r.length>0?Math.ceil(r.reduce((e,t)=>e+t)/r.length):1e3}},re=async e=>{const t=new o.Connection(e);let a=await ma(t.getLatestBlockhash.bind(t),[{commitment:"finalized"}]);return a.status?{status:!0,output:a.output}:{status:!1,output:"Failed to get latest blockhash"}},ne=async(e,t)=>{const a=new o.Connection(t);let r=await ma(a.getAccountInfo.bind(a),[new o.PublicKey(e.toString())]);return r.status?{status:!0,output:r.output}:{status:!1,output:"Failed to get account info"}},se=async(e,t,a,r,n)=>{let s;a in J?s=J[a][t]||{}:(J[a]={},s={});for(const a of e)if(a&&!(a in s)){let e;e="0"===t?n?await W(a,r):await V(a,r):n?await Q(a,t,r):await Y(a,t,r),e.status&&(s[a]=e.output),await wa(200)}return J[a][t]=s,J},oe=(e,t,a,r)=>{let n={};if(!(e in J))return n;a.unshift({address:"0",name:r.nativeCurrency.name,symbol:r.nativeCurrency.symbol,decimals:r.nativeCurrency.decimals,display_decimals:4});let s=t.length;for(let r=0;r<s;r++){let s=t[r];if(s)for(let t=0;t<a.length;t++){let r=a[t],o="0";if(J[e][r.address]){if(s in J[e][r.address]){o=new l.BigNumber(J[e][r.address][s]).dividedBy(10**r.decimals).toFixed(r.display_decimals||4,l.BigNumber.ROUND_FLOOR)}n[s]||(n[s]={}),n[s][r.symbol]=o}}}return n},ie=(e,t,a)=>{for(let r=0;r<t.length;r++){let n=t[r];for(let t=0;t<a.length;t++){let r=a[t];try{delete J[e][r][n]}catch(e){}}}},ce=(e,t)=>{let a=0;if(e in J&&"0"in J[e])for(let r=0;r<t.length;r++)t[r]in J[e][0]&&(a+=1);return 0!==a&&a/t.length>.8},le=["abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse","access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act","action","actor","actress","actual","adapt","add","addict","address","adjust","admit","adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent","agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert","alien","all","alley","allow","almost","alone","alpha","already","also","alter","always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger","angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique","anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic","area","arena","argue","arm","armed","armor","army","around","arrange","arrest","arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset","assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction","audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake","aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge","bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain","barrel","base","basic","basket","battle","beach","bean","beauty","because","become","beef","before","begin","behave","behind","believe","below","belt","bench","benefit","best","betray","better","between","beyond","bicycle","bid","bike","bind","biology","bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless","blind","blood","blossom","blouse","blue","blur","blush","board","boat","body","boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss","bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread","breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze","broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb","bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy","butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call","calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas","canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry","cart","case","cash","casino","castle","casual","cat","catalog","catch","category","cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century","cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase","chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child","chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle","citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk","clever","click","client","cliff","climb","clinic","clip","clock","clog","close","cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut","code","coffee","coil","coin","collect","color","column","combine","come","comfort","comic","common","company","concert","conduct","confirm","congress","connect","consider","control","convince","cook","cool","copper","copy","coral","core","corn","correct","cost","cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle","craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek","crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial","cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup","cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad","damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal","debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense","define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny","depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk","despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond","diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur","direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance","divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain","donate","donkey","donor","door","dose","double","dove","draft","dragon","drama","drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop","drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf","dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo","ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow","elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody","embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless","endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough","enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip","era","erase","erode","erosion","error","erupt","escape","essay","essence","estate","eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange","excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit","exotic","expand","expect","expire","explain","expose","express","extend","extra","eye","eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame","family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father","fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female","fence","festival","fetch","fever","few","fiber","fiction","field","figure","file","film","filter","final","find","fine","finger","finish","fire","firm","first","fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor","flee","flight","flip","float","flock","floor","flower","fluid","flush","fly","foam","focus","fog","foil","fold","follow","food","foot","force","forest","forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile","frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen","fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy","gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp","gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture","ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance","glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue","goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown","grab","grace","grain","grant","grape","grass","gravity","great","green","grid","grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt","guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy","harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health","heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden","high","hill","hint","hip","hire","history","hobby","hockey","hold","hole","holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital","host","hotel","hour","hover","hub","huge","human","humble","humor","hundred","hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea","identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune","impact","impose","improve","impulse","inch","include","income","increase","index","indicate","indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury","inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install","intact","interest","into","invest","invite","involve","iron","island","isolate","issue","item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel","job","join","joke","journey","joy","judge","juice","jump","jungle","junior","junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney","kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife","knock","know","lab","label","labor","ladder","lady","lake","lamp","language","laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit","layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal","legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level","liar","liberty","library","license","life","lift","light","like","limb","limit","link","lion","liquid","list","little","live","lizard","load","loan","lobster","local","lock","logic","lonely","long","loop","lottery","loud","lounge","love","loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad","magic","magnet","maid","mail","main","major","make","mammal","man","manage","mandate","mango","mansion","manual","maple","marble","march","margin","marine","market","marriage","mask","mass","master","match","material","math","matrix","matter","maximum","maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt","member","memory","mention","menu","mercy","merge","merit","merry","mesh","message","metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor","minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile","model","modify","mom","moment","monitor","monkey","monster","month","moon","moral","more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie","much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual","myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature","near","neck","need","negative","neglect","neither","nephew","nerve","nest","net","network","neutral","never","news","next","nice","night","noble","noise","nominee","noodle","normal","north","nose","notable","note","nothing","notice","novel","now","nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe","obtain","obvious","occur","ocean","october","odor","off","offer","office","often","oil","okay","old","olive","olympic","omit","once","one","onion","online","only","open","opera","opinion","oppose","option","orange","orbit","orchard","order","ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output","outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact","paddle","page","pair","palace","palm","panda","panel","panic","panther","paper","parade","parent","park","parrot","party","pass","patch","path","patient","patrol","pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen","penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo","phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot","pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate","play","please","pledge","pluck","plug","plunge","poem","poet","point","polar","pole","police","pond","pony","pool","popular","portion","position","possible","post","potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare","present","pretty","prevent","price","pride","primary","print","priority","prison","private","prize","problem","process","produce","profit","program","project","promote","proof","property","prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin","punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle","pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit","raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp","ranch","random","range","rapid","rare","rate","rather","raven","raw","razor","ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle","reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release","relief","rely","remain","remember","remind","remove","render","renew","rent","reopen","repair","repeat","replace","report","require","rescue","resemble","resist","resource","response","result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib","ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot","ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket","romance","roof","rookie","room","rose","rotate","rough","round","route","royal","rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness","safe","sail","salad","salmon","salon","salt","salute","same","sample","sand","satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter","scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script","scrub","sea","search","season","seat","second","secret","section","security","seed","seek","segment","select","sell","seminar","senior","sense","sentence","series","service","session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell","sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop","short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side","siege","sight","sign","silent","silk","silly","silver","similar","simple","since","sing","siren","sister","situate","six","size","skate","sketch","ski","skill","skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight","slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth","snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda","soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry","sort","soul","sound","soup","source","south","space","spare","spatial","spawn","speak","special","speed","spell","spend","sphere","spice","spider","spike","spin","spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring","spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp","stand","start","state","stay","steak","steel","stem","step","stereo","stick","still","sting","stock","stomach","stone","stool","story","stove","strategy","street","strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway","success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny","sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey","suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim","swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag","tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi","teach","team","tell","ten","tenant","tennis","tent","term","test","text","thank","that","theme","then","theory","there","they","thing","this","thought","three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber","time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler","toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool","tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist","toward","tower","town","toy","track","trade","traffic","tragic","train","transfer","trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick","trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust","truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle","twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella","unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform","unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade","uphold","upon","upper","upset","urban","urge","usage","use","used","useful","useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van","vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue","verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory","video","view","village","vintage","violin","virtual","virus","visa","visit","visual","vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage","wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash","wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather","web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat","wheel","when","where","whip","whisper","wide","width","wife","wild","will","win","window","wine","wing","wink","winner","winter","wire","wisdom","wise","wish","witness","wolf","woman","wonder","wood","wool","word","work","world","worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year","yellow","you","young","youth","zebra","zero","zone","zoo"],ue=[{name:"Ethereum Mainnet",chainId:1,rpcUrl:"https://eth.llamarpc.com",nativeCurrency:{name:"ETH",symbol:"ETH",decimals:18},multicallAddress:"0xeefBa1e63905eF1D7ACbA5a8513c70307C1cE441"},{name:"Solana Mainnet",chainId:901,rpcUrl:"https://api.mainnet-beta.solana.com",nativeCurrency:{name:"SOL",symbol:"SOL",decimals:9}}],de=["901","902","903"],pe=e=>de.includes(e)?9:18,ge=e=>de.includes(e)?"solana":"evm",he=e=>/^[A-HJ-NP-Za-km-z1-9]*$/.test(e),me=e=>e.startsWith("0x")&&42===e.length,{BN:fe}=require("bn.js"),{stripHexPrefix:ye}=require("ethereumjs-util"),{BigNumber:we}=require("bignumber.js");function ve(e){return new fe(ye(e.toString("hex")),16)}const be=e=>e.match(/^-?0x/u)?e:e.match(/^-?0X/u)?e.replace("0X","0x"):e.startsWith("-")?e.replace("-","-0x"):`0x${e}`;function ke(e){return be(e.toString(16))}class Se{constructor(e){this.query=new O.default(O.default.givenProvider||e).eth}async analyzeGasUsage(e){const t=await this.query.getBlock("latest",!1);let a,r=ke(function(e,t,a){const r=new fe(t),n=new fe(a);return e.mul(r).div(n)}(ve(t.gasLimit),19,20));try{r=await this.estimateTxGas(e)}catch(e){a={reason:e.message,errorKey:e.errorKey,debug:{blockNumber:t.number,blockGasLimit:t.gasLimit}}}return{blockGasLimit:t.gasLimit,estimatedGasHex:r,simulationFails:a}}async estimateTxGas(e){let t=await this.query.estimateGas(e);return t=new we(t.toString()).multipliedBy(1.3).toFixed(0),t}addGasBuffer(e,t,a=1.3){const r=ve(e),n=ve(t).muln(.9),s=r.muln(a);return r.gt(n)?ke(r):s.lt(n)?ke(s):ke(n)}async getBufferedGasLimit(e,t){const{blockGasLimit:a,estimatedGasHex:r,simulationFails:n}=await this.analyzeGasUsage(e);return{gasLimit:this.addGasBuffer(be(r),a,t),simulationFails:n}}async getGasPrice(){return await this.query.getGasPrice()}async getTransactionCount(e){return await this.query.getTransactionCount(e)}}const xe=require("chalk");require("wative-core");const _e=async e=>{let t=[new T.default.Separator("————Tx Detail—————-"),`from: ${e.from}`,`to: ${e.to}`,`nonce: ${e.nonce}`,`gasPrice: ${e.gasPrice}`,`data: ${e.data}`,`value: ${e.value}`,`gas: ${e.gas}`,new T.default.Separator("——————————————-"),"Send it now","Back"],a=await Vt(t),r=t.indexOf(a);return 1===r&&(e.from=await Ft("from",Wt)),2===r&&(e.to=await Ft("to",Wt)),3===r&&(e.nonce=await Ft("nonce")),4===r&&(e.gasPrice=await Ft("gasPrice")),5===r&&(e.data=await ga("data")),6===r&&(e.value=await Ft("value")),7===r&&(e.gas=await Ft("gas")),9===r?e:10===r?null:await _e(e)},Pe=async(e,t,a,r,n)=>{const s=await Ft("to",Wt);let i=(new o.Transaction).add(o.SystemProgram.transfer({fromPubkey:new o.PublicKey(r),toPubkey:new o.PublicKey(s),lamports:1e6}));i.add(o.ComputeBudgetProgram.setComputeUnitLimit({units:2e5})),i.add(o.ComputeBudgetProgram.setComputeUnitPrice({microLamports:1e3})),i.feePayer=new o.PublicKey(r);let c=await re(t);if(!c.status)return void console.log(xe.red(c.output));i.recentBlockhash=c.output.blockhash;const u=await n.account.simulateTransaction(r,t,i);if(!u.status)return void console.log(xe.red(u.output));if(!u.output||!u.output.value||0===u.output.value.unitsConsumed||u.output.value.err)return console.log(xe.red("Simulate error")),console.log("==================reason====================="),console.log(JSON.stringify(u.output,null,4)),void console.log("==============================================");let d=new l.BigNumber(u.output.value.unitsConsumed.toString()).multipliedBy(1.2).toFixed(0,l.BigNumber.ROUND_CEIL),p=new l.BigNumber(d);const g=await ae(t);if(!g.status)return void console.log(xe.red(g.output));const h=new l.BigNumber(g.output.toString()),m=p.multipliedBy(h).dividedBy(1e6).toFixed(0,l.BigNumber.ROUND_CEIL),f=await V(r,t);if(!f.status)return void console.log(xe.red(f.output));const y=new l.BigNumber(f.output).minus(5e3).minus(m);let w=new l.BigNumber(y).dividedBy(1e9).toFixed(4,l.BigNumber.ROUND_FLOOR);if(new l.BigNumber(w)<new l.BigNumber(0))return void console.log(xe.red("Not enough balance"));let v=await $e(w,y.toString(),a,9),b=new o.Transaction;b.add(o.ComputeBudgetProgram.setComputeUnitLimit({units:Number(p)})),b.add(o.ComputeBudgetProgram.setComputeUnitPrice({microLamports:Number(h)})),b.add(o.SystemProgram.transfer({fromPubkey:new o.PublicKey(r),toPubkey:new o.PublicKey(s),lamports:Number(v)})),b.feePayer=new o.PublicKey(r),b.recentBlockhash=c.output.blockhash;const k=await n.account.signTransaction(r,b,t);if(!k.status)return void console.log(xe.red(k.output));let S=await n.account.sendSignedTransaction(r,k.output,t);S.status?(ie(e,[r,s],["0"]),console.log(xe.green(`Transaction hash: ${S.output}`))):console.log(xe.red(S.output))},$e=async(e,t,a,r)=>{let n=["> Input value",`> Total Balance (${e} ${a})`],s=await Vt(n),o=n.indexOf(s),i="0";if(0===o){let e=await Ft("value",Dt);i=new l.BigNumber(e).multipliedBy(10**r).toFixed(0,l.BigNumber.ROUND_FLOOR)}else 1===o&&(i=t);return new l.BigNumber(i).isLessThanOrEqualTo(new l.BigNumber(t))?i:(console.log(xe.red("Not enough balance")),$e(e,t,a,r))},Ae=async(e,t,a)=>{let r=["> Input amount",`> Total Balance (${new l.BigNumber(e).dividedBy(10**a).toFixed(4,l.BigNumber.ROUND_FLOOR)} ${t})`],n=await Vt(r),s=r.indexOf(n),o="0";if(0===s){let e=await Ft("amount",Dt);o=new l.BigNumber(e).multipliedBy(10**a).toFixed(0,l.BigNumber.ROUND_FLOOR)}else 1===s&&(o=e);return new l.BigNumber(o).isLessThanOrEqualTo(new l.BigNumber(e))?o:(console.log(xe.red("Not enough balance")),Ae(e,t,a))},Ne=async(e,t,a,r)=>{let n=vt(e,t,a),s=pt(e,n),c=fa(a);if(s!==c&&("evm"===c&&(n="Ethereum Mainnet"),"solana"===c&&(n="Solana Mainnet"),s=pt(e,n)),"evm"===s){if(await pa(`Network (${n}), want a change?`,!1)){const t=bt(e);n=await Vt(t,"Select a network")}}let u=await wt(a,e,n);if(!u.status)return void console.log(xe.red(u.output));const d=gt(e,n);console.log(xe.green(` ${d.nativeCurrency.symbol} Balance: ${u.output}`));const p=["> Send Raw Tx","> Send Token",new T.default.Separator("----------------------------------"),"> Back"];switch(await Vt(p)){case"> Send Raw Tx":"evm"===c&&await(async(e,t,a,r,n)=>{const s=await Ft("to",Wt),o=new Se(t),i=await o.getGasPrice(),c=new l.BigNumber(i.toString()).dividedBy(1e9).toFixed(4,l.BigNumber.ROUND_FLOOR);let u=await Ft(`Gas price (${c}), agree or enter`,zt)||c;u=new l.BigNumber(u).multipliedBy(1e9).toFixed(0);let d,p,g,h=await ee(s,t);if(!h.status)return void console.log(xe.red(h.output));if(d="42161"===e||"421614"===e?"1700000":"21000","0x"===h.output){p="0x";let e=await W(r,t);if(!e.status)return void console.log(xe.red(e.output));let n=new l.BigNumber(e.output),s=new l.BigNumber(u),o=n.minus(s.multipliedBy(Number(d))).toFixed(0,l.BigNumber.ROUND_FLOOR),i=new l.BigNumber(o).dividedBy(1e18).toFixed(4,l.BigNumber.ROUND_FLOOR);if(new l.BigNumber(i)<new l.BigNumber(0))return void console.log(xe.red("Not enough balance"));g=await $e(i,o,a,18)}else p=await ga("data",ha),g=await Ft("value",Dt);const m=await o.getTransactionCount(r),f=await Ft(`Nonce (${m}), agree or enter`);let y={from:r,to:s,nonce:f||m.toString(),gasPrice:u,data:p,value:g};if("0x"===p)y.gas=d;else{let e=y.gasPrice;delete y.gasPrice;try{y.gas=(await o.estimateTxGas(y)).toString()}catch(e){return void console.log(xe.red("Error: "+e))}y.gasPrice=e}if(y=await _e(y),!y)return;const w=await n.account.signTransaction(r,y,t);w.status?(console.log(xe.green(`Transaction hash: ${w.output.transactionHash}`)),n.account.sendSignedTransaction(r,w.output.rawTransaction,t),ie(e,[r,s],["0"])):console.log(xe.red(w.output))})(d.chainId.toString(),d.rpcUrl,d.nativeCurrency.symbol,a,r),"solana"===c&&await Pe(d.chainId.toString(),d.rpcUrl,d.nativeCurrency.symbol,a,r);break;case"> Send Token":"evm"===c&&await(async(e,t,a,r,n)=>{let s,o,i;switch(await Vt(["> Input token ticker","> Input token contract address"]),selected_token_address){case"> Input token ticker":i=await Ft("token ticker");let n=await _t(e,a,i);if(0===n.length)return void console.log(xe.red("Token not found"));let c=[];for(let e=0;e<n.length;e++){const a=await Q(r,n[e].address,t);if(!a.status)return void console.log(xe.red(a.output));let s=new l.BigNumber(a.output).dividedBy(10**Number(n[e].decimals)).toFixed(4,l.BigNumber.ROUND_FLOOR);if(1===n.length){c.push(`> 1. ${i} Balance: ${s}`);break}c.push(`> ${e+1}. ${i} Balance: ${s}(${n[e].address})`),c.push(n[e].address)}let u=await Vt(c);const d=n[c.indexOf(u)];s=d.address,o=Number(d.decimals);break;case"> Input token contract address":s=await Ft("token contract address",Wt);let p=await Z(s,t);if(!p.status)return void console.log(xe.red(p.output));o=Number(p.output.decimals),i=p.output.name}const c=await Ft("Receipt",Wt),u=await Q(r,s,t);if(!u.status)return void console.log(xe.red(u.output));const d=new Se(t),p=await d.getGasPrice(),g=new l.BigNumber(p.toString()).dividedBy(1e9).toFixed(4,l.BigNumber.ROUND_FLOOR);let h=await Ft(`Gas price (${g}), agree or enter`,zt)||g;h=new l.BigNumber(h).multipliedBy(1e9).toFixed(0);let m=await Ae(u.output,i,o);const f=await te(c,m,t),y=await d.getTransactionCount(r),w=await Ft(`Nonce (${y}), agree or enter`);let v={from:r,to:s,nonce:w||y.toString(),gasPrice:h,data:f,value:"0"};if("0x"===f)v.gas="42161"===a||"421614"===a?"1700000":"21000";else{let e=v.gasPrice;delete v.gasPrice;try{v.gas=(await d.estimateTxGas(v)).toString()}catch(e){return void console.log(xe.red("Failed to estimate gas, "+e.message))}v.gasPrice=e}if(v=await _e(v),!v)return;const b=await n.account.signTransaction(r,v,t);b.status?(console.log(xe.green(`Transaction hash: ${b.output.transactionHash}`)),n.account.sendSignedTransaction(r,b.output.rawTransaction,t),ie(a,[r,c],["0",s])):console.log(xe.red(b.output))})(e,d.rpcUrl,d.chainId.toString(),a,r),"solana"===c&&await(async(e,t,a,r,n)=>{let s,c,u;switch(await Vt(["> Input token ticker","> Input token contract address"]),selected_token_address){case"> Input token ticker":u=await Ft("token ticker");let n=await _t(e,a,u);if(0===n.length)return void console.log(xe.red("Token not found"));let o=[];for(let e=0;e<n.length;e++){const a=await Y(r,n[e].address,t);if(!a.status)return void console.log(xe.red(a.output));let s=new l.BigNumber(a.output).dividedBy(10**Number(n[e].decimals)).toFixed(4,l.BigNumber.ROUND_FLOOR);if(1===n.length){o.push(`> 1. ${u} Balance: ${s}`);break}o.push(`> ${e+1}. ${u} Balance: ${s}(${n[e].address})`),o.push(n[e].address)}let i=await Vt(o);const d=n[o.indexOf(i)];s=d.address,c=Number(d.decimals);break;case"> Input token contract address":s=await Ft("token contract address",Wt);let p=await X(s,t);if(!p.status)return void console.log(xe.red(p.output));c=Number(p.output.decimals),u=p.output.name}const d=await Ft("Receipt",Wt),p=await Y(r,s,t);if(!p.status)return void console.log(xe.red(p.output));let g=await Ae(p.output,u,c),h=i.getAssociatedTokenAddressSync(new o.PublicKey(s),new o.PublicKey(r),!0);const m=await ne(h.toString(),t);if(!m.status)return void console.log(xe.red(m.output));if(!m.output||m.output.owner.toString()===o.PublicKey.default)return void console.log(xe.red("From token account not found"));let f=i.getAssociatedTokenAddressSync(new o.PublicKey(s),new o.PublicKey(d),!1);const y=await ne(f.toString(),t);if(!y.status)return void console.log(xe.red(y.output));let w=new o.Transaction,v=new o.Transaction;y.output&&y.output.owner.toString()!==o.PublicKey.default||(w.add(i.createAssociatedTokenAccountInstruction(new o.PublicKey(r),new o.PublicKey(f),new o.PublicKey(d),new o.PublicKey(s))),v.add(i.createAssociatedTokenAccountInstruction(new o.PublicKey(r),new o.PublicKey(f),new o.PublicKey(d),new o.PublicKey(s)))),w.add(i.createTransferInstruction(h,f,new o.PublicKey(r),Number(g))),w.add(o.ComputeBudgetProgram.setComputeUnitLimit({units:2e5})),w.add(o.ComputeBudgetProgram.setComputeUnitPrice({microLamports:1e3})),w.feePayer=new o.PublicKey(r);const b=await n.account.simulateTransaction(r,t,w);if(!b.status)return void console.log(xe.red(b.output));if(!b.output||!b.output.value||0===b.output.value.unitsConsumed||b.output.value.err)return console.log(xe.red("Simulate error")),console.log("==================reason====================="),console.log(JSON.stringify(b.output,null,4)),void console.log("==============================================");let k=new l.BigNumber(b.output.value.unitsConsumed.toString());k=new l.BigNumber(Math.ceil(1.2*Number(k)));const S=await ae(t);if(!S.status)return void console.log(xe.red(S.output));const x=new l.BigNumber(S.output.toString());v.add(i.createTransferInstruction(h,f,new o.PublicKey(r),Number(g))),v.add(o.ComputeBudgetProgram.setComputeUnitLimit({units:Number(k)})),v.add(o.ComputeBudgetProgram.setComputeUnitPrice({microLamports:Number(x)})),w.feePayer=new o.PublicKey(r);const _=await n.account.signTransaction(r,v,t);if(!_.status)return void console.log(xe.red(_.output));let P=await n.account.sendSignedTransaction(r,_.output,t);P.status?(ie(a,[r,d],["0",s]),console.log(xe.green(`Transaction hash: ${P.output}`))):console.log(xe.red(P.output))})(e,d.rpcUrl,d.chainId.toString(),a,r);break;case"> Back":return}},Ie=async(e,t,a,r)=>{const n=["> SendTx","> SignMessage",new T.default.Separator("----------------------------------"),"> Back"];switch(await Vt(n)){case"> SendTx":await Ne(e,t,a,r);break;case"> SignMessage":{const e=await ga("Input the message to sign"),t=r.account.signMessage(a,e);if(!t.status){console.log(xe.red(t.output));break}console.log(xe.green("Signature: "+t.output));break}case"> Back":return}await Ie(e,t,a,r)},Ce=async(e,t)=>{let a,r=["> Send Tx","> Search Accounts",new T.default.Separator("----------------------------------"),"> Back"],n=await Vt(r);if("> Back"===n)return;"> Send Tx"===n&&(a=await Ft("Input address to send tx",Wt)),"> Search Accounts"===n&&(a=await Ft("Input part address to send tx",Mt));let s=t.account.getAccountLabel(a);if(null===s)return console.log(xe.red("Account not found")),void await Ce(e,t);let o=s.account_label,i=na(e,o);if(a=s.account_address,null===o)return console.log(xe.red("Account not found")),void await Ce(e,t);const c=await qt(e,o,a);if(null===c)return console.log(xe.red("Account not found")),void await Ce(e,t);console.log(xe.green(`Address found!\n address: ${a}\n account name: [${i}]\n account index: #${c}`)),(await Re(e,o,t)).isLoginIn?(await Ie(e,o,a,t),await Ce(e,t)):await Ce(e,t)},je=require("chalk");require("dotenv").config();const Te=require("cli-progress");require("wative-core");const Oe={keystore_slug:"",default_account_index:0},Be=async e=>{const t=Le(e);let a=[];t.accounts&&(a=t.accounts);let r=await ia("Account Name",a);return null===r?null:{account_name:r,password:await da(`Please set a password for Account [${r}]`),selected_default_network:await dt(e)}},Ee=async(e,t,a,r,n,s,o)=>{let i=await gt(e,n);"evm"!==ge(i.chainId.toString())||r.startsWith("0x")||(r="0x"+r);let c=await s.account.generatePKAccount(a,r,t,i.chainId.toString(),o);if(!c.status)return void console.log(je.red(c.output));let l,u=I.join(e,`accounts/${a}.json`);if(A.existsSync(u)){let e=JSON.parse(A.readFileSync(u,"utf8"));if("data"in e){if(e.data.map(e=>e.ciphertexts.address).includes(c.output.ciphertexts.address))return void console.log(je.red("The account has already been imported"));e.data.push({ciphertexts:c.output.ciphertexts}),l=e}else e.data=[{ciphertexts:e.ciphertexts}],delete e.ciphertexts,e.data.push({ciphertexts:c.output.ciphertexts}),l=e}else c.output.data=[{ciphertexts:c.output.ciphertexts}],delete c.output.ciphertexts,c.output.default_network=n,l=c.output;A.writeFileSync(u,JSON.stringify(l,null,4)),s.account.reloadAccount()},Fe=async(e,t)=>{const a=["> Import Passphrase","> Import Private Key",new T.default.Separator("----------------------------------"),"> Back"];switch(await Vt(a)){case"> Import Passphrase":await(async(e,t)=>{let a=await Be(e);if(!a)return;let r=await ua("Please enter a mnemonic [split by space]",Ut);r=r.replace(/\s+/g," ");let n=sa(a.account_name);const s=t.account.generatePPAccount(n,r,a.password);if(!s.status)return void console.log(je.red(s.output));let o=I.join(e,`accounts/${n}.json`);s.output.default_network=a.selected_default_network,A.writeFileSync(o,JSON.stringify(s.output,null,4));const i=I.resolve(e,"network.json"),c=JSON.parse(A.readFileSync(i,"utf8"));c.accounts.push(a.account_name),A.writeFileSync(i,JSON.stringify(c,null,4))})(e,t);break;case"> Import Private Key":await(async(e,t)=>{let a=await Be(e);if(!a)return;let r=await ca("Please enter a private key"),n=sa(a.account_name);await Ee(e,a.password,n,r,a.selected_default_network,t,!0);const s=I.resolve(e,"network.json"),o=JSON.parse(A.readFileSync(s,"utf8"));o.accounts.push(a.account_name),A.writeFileSync(s,JSON.stringify(o,null,4))})(e,t);break;case"> Back":return}t.account.reloadAccount()},Le=e=>{const t=I.resolve(e,"network.json");return JSON.parse(A.readFileSync(t,"utf8"))},qe=(e,t)=>{const a=I.join(e,`accounts/${t}.json`);return JSON.parse(A.readFileSync(a,"utf8"))},Ke=(e,t,a)=>{const r=I.join(e,`accounts/${t}.json`);A.writeFileSync(r,JSON.stringify(a,null,4))},Re=async(e,t,a)=>{if(a.account.isLogin(t))return{isLoginIn:!0};for(let r=0;r<3;r++){let r,n=na(e,t),s="WATIVE_PASSWD_"+t;if(r=process.env[s]&&""!==process.env[s]?process.env[s]:process.env.WativePassword&&""!==process.env.WativePassword?process.env.WativePassword:await la(`Please input the password for Account [${n}]`),!r)return console.log(je.red("Password can't be empty")),{isLoginIn:!1};const o=await a.account.login(t,r);if(o.status)return{isLoginIn:!0,password:r};const i=["> Try Again","> Back"],c=await Vt(i,o.output);if("> Back"===c)return{isLoginIn:!1}}return{isLoginIn:!1}},Me=async(e,t)=>{const a=Le(e).accounts;let r=["> Back",new T.default.Separator("----------------------------------")];const n=a.length;if(0===n)return void console.log(je.red("No address here yet"));for(let t=0;t<n;t++){const n=a[t],s=sa(n),o=qe(e,s);"data"in o?r.push(`${t+1}) ${n} [${o.account_type}:${o.data.length}]`):r.push(`${t+1}) ${n} [${o.account_type}:1]`)}const s=await Vt(r,"Select an account");if("> Back"===s)return;const o=a[r.indexOf(s)-2],i=sa(o);console.log(je.green(`Keystore slug: [${i}]`));let c=await Re(e,i,t);c.isLoginIn&&await ze(e,i,t,c.password),await Me(e,t)},De=async(e,t,a)=>{const r=await qe(e,t);let n=["> Disabled Slots","> Add Single","> Add Range",new T.default.Separator("----------------------------------"),"> Back"];switch(await Vt(n)){case"> Back":return;case"> Disabled Slots":{let a=r.disabled_slots;if(!a||0===a.length){console.log(je.red("No disabled slots here yet"));break}let n=r.data,s=["> Back",new T.default.Separator("----------------------------------")],o=r.default_network;for(let t=0;t<a.length;t++){let r=a[t].from,i=a[t].to,c=o,l=o;"default_network"in n[r]&&(c=n[r].default_network),"default_network"in n[i]&&(l=n[i].default_network);let u,d,p=pt(e,c),g=pt(e,l);if("evm"!==p&&"solana"!==p)throw new Error(`Invalid network type: ${p}`);if("evm"!==g&&"solana"!==g)throw new Error(`Invalid network type: ${g}`);u="evm"===p?n[r].ciphertexts.evm.address:n[i].ciphertexts.solana.address,d="evm"===g?n[i].ciphertexts.evm.address:n[i].ciphertexts.solana.address,r===i?s.push(`${t+1}. ${u}[${r}]`):s.push(`${t+1}. ${u}[${r}]-${d}[${i}]`)}let i=await Vt(s);if("> Back"===i)break;if(!await pa(`Are you sure to delete the ${i}?`,!0))break;let c=s.indexOf(i)-2;r.disabled_slots.splice(c,1),Ke(e,t,r);break}case"> Add Single":{let a=await Kt(r,"Input address or index");if(null===a){console.log(je.red("Invalid account index"));break}r.disabled_slots?r.disabled_slots.push({from:a,to:a}):r.disabled_slots=[{from:a,to:a}],Ke(e,t,r);break}case"> Add Range":{let a=await Lt(r);if(!a){console.log(je.red("Invalid account range"));break}r.disabled_slots?r.disabled_slots.push(a):r.disabled_slots=[a],Ke(e,t,r);break}}await De(e,t)},ze=async(e,t,a,r)=>{let n,s=await qe(e,t);n="PP"===s.account_type?["> Address List","> Expand Address","> Slice Address","> Disable Address","> Reset Account Password",`> Switch Networks [${s.default_network}]`,"> Remove",new T.default.Separator("----------------------------------"),"> Back"]:["> Address List","> Import Private Key","> Remove Address","> Reset Account Password",`> Switch Networks [${s.default_network}]`,"> Remove",new T.default.Separator("----------------------------------"),"> Back"];switch(await Vt(n)){case"> Address List":await Ue(e,t,a);break;case"> Expand Address":{const r=await Ft("Expand accounts count",Ht);if(Number(r)>2e3){console.log(je.red("Too many accounts, please input less than 2000"));break}await Je(e,t,Number(r),a);break}case"> Import Private Key":await(async(e,t,a,r)=>{let n=await Ft("Please enter a private key"),s=I.join(e,`accounts/${a}.json`),o=JSON.parse(A.readFileSync(s,"utf8"));await Ee(e,t,a,n,o.default_network,r,!1)})(e,r,t,a);break;case"> Slice Address":{const r=await Ft("Please input last account number",Jt);await Ge(e,t,Number(r),a);break}case"> Remove Address":await We(e,t,a);break;case"> Disable Address":await De(e,t);break;case"> Reset Account Password":{let r=na(e,t);const n=await da(`Please input new password for Account [${r}]`),s=await da(`Please confirm new password for Account [${r}]`);if(!n||!s||n!==s){console.log(je.red("Passwords do not match"));break}return void await a.account.resetPassword(t,n)}case`> Switch Networks [${s.default_network}]`:await yt(e,t,!0);break;case"> Remove":return void await Ve(e,t);case"> Back":return}await ze(e,t,a,r)},Ue=async(e,t,a)=>{const r=await qe(e,t);let n=["> Back",new T.default.Separator("----------------------------------")],s=r.disabled_slots,o=kt(e),i=r.default_network,c=gt(e,i),l=ge(c.chainId.toString()),u=r.data.length.toString().length+1;for(let e=0;e<r.data.length;e++){let t,i=r.data[e].tag?`(${r.data[e].tag})`:"",c=a.account.checkIsDisableAddress(s,e);t="PP"===r.account_type?"evm"===l?r.data[e].ciphertexts.evm.address:r.data[e].ciphertexts.solana.address:r.data[e].ciphertexts.address,c?n.push(new T.default.Separator(je.yellow(`#${e.toString().padEnd(u)} ${va(t,o.fullAddr)} ${i}`))):n.push(`#${e.toString().padEnd(u)} ${va(t,o.fullAddr)} ${i}`)}let d,p=Oe.keystore_slug===t?n[Oe.account_index]:n[0],g=Oe.keystore_slug===t&&Oe.account_index>0,h=await xt(e,c.chainId.toString());if(g&&Oe.account_index>15){let e=n.slice(0,Oe.account_index-15);d=n.slice(Oe.account_index-15).concat(e)}else d=n.slice(0);let m=await _a(d,"evm"===l,e,h,c,o.gasToken,o.extendedToken,g,"Select an account",p);"> Back"!==m&&(Oe.keystore_slug=t,Oe.account_index=n.indexOf(m),await He(e,t,n.indexOf(m)-2,a),await Ue(e,t,a))},He=async(e,t,a,r)=>{const n=await qe(e,t);let s=n.default_network,o=ht(e,t,a);const i=await gt(e,s),c=await wt(o,e,s);c.status?console.log(je.green(` Address No: #${a}\n Network: ${s}\n ${i.nativeCurrency.symbol} Balance: ${c.output}`)):console.log(je.green(` Address No: #${a}\n Network: ${s}\n ${i.nativeCurrency.symbol}`));let l="> Tag";"tag"in n.data[a]&&""!==n.data[a].tag&&(l=`> Tag(${n.data[a].tag})`);let u=["> Tools","> Show address","> Assets",l,"> Reload balances","> Dump private key",new T.default.Separator("----------------------------------"),"> Back"];switch(await Vt(u)){case"> Tools":await Ie(e,t,o,r);break;case"> Show address":await ft(e,t,a);break;case"> Assets":await Pt(e,s,o);break;case"> Reload balances":await $t(e,s,o);break;case l:{let r="Current tag";"tag"in n.data[a]&&""!==n.data[a].tag&&(r=`Current tag (${n.data[a].tag})`);let s=await Ft(r,Rt);n.data[a].tag=s.replace(/\s+/g," ").trim(),Ke(e,t,n);break}case"> Dump private key":{let n=ht(e,t,a),s=await r.account.showPrivateKey(n);console.log("account: ",n),console.log("private key: ",s);break}case"> Back":return}},Je=async(e,t,a,r)=>{const n=await qe(e,t),s=n.data.length,o=new Te.SingleBar({},Te.Presets.legacy);o.start(a,0);for(let e=s;e<s+a;e++){let a=await r.account.generateSubAccount(t,e);if(!a.status)return void console.log(je.red(a.output));n.data.push({ciphertexts:a.output}),o.increment()}o.stop(),Ke(e,t,n),r.account.reloadAccount()},Ge=async(e,t,a,r)=>{const n=await qe(e,t);n.data=n.data.slice(0,a+1),Ke(e,t,n),r.account.reloadAccount()},We=async(e,t,a)=>{let r=await Ft("Please input the accountIndex to remove this account",Dt);if("0"===r)return void console.log(je.red("Can't remove the first account"));let n=await qe(e,t);await pa(`Are you sure you want to remove this account(${n.data[r].ciphertexts.address})`,!0)&&(n.data.splice(Number(r),1),Ke(e,t,n),a.account.reloadAccount())},Ve=async(e,t)=>{let a=await Ft("Please input the account name to remove this account"),r=na(e,t);if(a!==r)return void console.log(je.red("Can't remove this account"));if(!await pa(`Are you sure you want to remove this account(${r})`,!0))return;let n=I.join(e,`accounts/${t}.json`);A.rmSync(n);const s=I.resolve(e,"network.json");if(!A.existsSync(s))return;const o=JSON.parse(A.readFileSync(s,"utf8"));let i=o.accounts.indexOf(r);o.accounts.splice(i,1),A.writeFileSync(s,JSON.stringify(o,null,2))},Ze=async(e,t)=>{const a=I.resolve(e,"accounts");A.existsSync(a)||A.mkdirSync(a);let r;switch(r=0===Le(e).accounts.length?["> Create a new account",new T.default.Separator("----------------------------------"),"> Back"]:["> Select an account","> Create a new account",new T.default.Separator("----------------------------------"),"> Back"],await Vt(r)){case"> Select an account":await Me(e,t);break;case"> Create a new account":await Fe(e,t);break;case"> Back":return}await Ze(e,t)},Xe=require("chalk"),Qe=async e=>{const t=I.resolve(e,"network.json");if(A.existsSync(t))return;const a={networks:ue,currentNetwork:"Ethereum Mainnet",accounts:[]};A.writeFileSync(t,JSON.stringify(a,null,2))},Ye=async(e,t)=>{let a=["> Edit"];"Ethereum Mainnet"!==t.name&&"Solana Mainnet"!==t.name&&a.push("> Remove"),a.push(new T.default.Separator("----------------------------------")),a.push("> Back");switch(await Vt(a)){case"> Edit":await et(e,t);break;case"> Remove":await tt(e,t)}},et=async(e,t)=>{const a=I.resolve(e,"network.json"),r=JSON.parse(A.readFileSync(a,"utf8"));let n=[];for(let e=0;e<r.networks.length;e++){const t=r.networks[e];n.push(t.name)}let s=t.rpcUrl,o=t.chainId.toString(),i=t.nativeCurrency.symbol,c=t.name,l=t.multicallAddress,u=t.color;if("Ethereum Mainnet"===t.name||"Solana Mainnet"===t.name)s=await ea(t.chainId.toString(),`Rpc Url (default: ${t.rpcUrl})`,!0);else{if(c=await Ft(`Chain Name (default: ${t.name})`),c&&c!==t.name&&n.includes(c))return void console.log(Xe.red("Chain Name already exists"));o=await Yt(`Chain Id (default: ${t.chainId})`,!0),s=await ea(o||t.chainId,`RPC Url (default: ${t.rpcUrl})`,!0),i=await aa(`Symbol (default: ${t.nativeCurrency.symbol})`),l=await ta(t.multicallAddress?`Multicall Address (Optional) (default: ${t.multicallAddress})`:"Multicall Address (Optional)"),u=await ra(t.color?`Color (Optional): (default: ${t.color})`:"Color (Optional)")}s=s||t.rpcUrl,o=o||t.chainId.toString(),i=i||t.nativeCurrency.symbol,c=c||t.name,l=l||t.multicallAddress,u=u||t.color;let d=pe(o.toString()),p={name:c||t.name,chainId:Number(o)||t.chainId,rpcUrl:s||t.rpcUrl,nativeCurrency:{name:i||t.nativeCurrency.symbol,symbol:i||t.nativeCurrency.symbol,decimals:d||t.nativeCurrency.decimals}};(l||t.multicallAddress)&&(p.multicallAddress=l||t.multicallAddress),(u||t.color)&&(p.color=u||t.color);for(let e=0;e<r.networks.length;e++)if(r.networks[e].name===t.name){r.networks[e]=p;break}A.writeFileSync(a,JSON.stringify(r,null,2))},tt=async(e,t)=>{const a=I.resolve(e,"network.json");let r=JSON.parse(A.readFileSync(a,"utf8"));for(let e=0;e<r.networks.length;e++)if(r.networks[e].name===t.name){r.networks.splice(e,1);break}t.name===r.currentNetwork&&(r.currentNetwork="Ethereum Mainnet"),A.writeFileSync(a,JSON.stringify(r,null,2))},at=async e=>{const t=I.resolve(e,"network.json"),a=JSON.parse(A.readFileSync(t,"utf8"));let r=[];for(let e=0;e<a.networks.length;e++){const t=a.networks[e];r.push(t.name)}console.log(Xe.green("Please input someting about network"));const n=await Ft("Chain Name");if(r.includes(n))return void console.log(Xe.red("Chain Name already exists"));const s=await Yt("Chain Id");if(!s)return;const o=await ea(s,"RPC Url");if(!o)return;const i=await aa("Symbol");if(!i)return;const c=await ta("Multicall Address (Optional)"),l=await ra("Color (Optional)");let u=pe(s.toString()),d={name:n,chainId:Number(s),rpcUrl:o,nativeCurrency:{name:i,symbol:i,decimals:u}};c&&(d.multicallAddress=c),l&&(d.color=l),a.networks.push(d),A.writeFileSync(t,JSON.stringify(a,null,2))},rt=async e=>{const t=I.resolve(e,"network.json"),a=JSON.parse(A.readFileSync(t,"utf8"));let r=[],n=[];for(let e=0;e<a.networks.length;e++){const t=a.networks[e];"solana"===ge(t.chainId.toString())?n.push(e):r.push(e)}let s=["> Back","+ Add Network",new T.default.Separator("----Networks(evm)----")];for(let e=0;e<r.length;e++){const t=r[e];let n=`${e+1}.${a.networks[t].name}`;0===e&&(n+=" 🔒"),s.push(n)}s.push(new T.default.Separator("----Networks(solana)----"));for(let e=0;e<n.length;e++){const t=n[e];let r=`${e+1}.${a.networks[t].name}`;0===e&&(r+=" 🔒"),s.push(r)}const o=await Vt(s);if("> Back"===o)return;if("+ Add Network"===o)return void await at(e);let i,c=s.indexOf(o);i=c<r.length+3?a.networks[r[c-3]]:a.networks[n[c-r.length-4]],await Ye(e,i),await rt(e)},nt=async e=>{let t=["> Enhanced Balance Display",new T.default.Separator("----------------------------------"),"> Back"];switch(await Vt(t)){case"> Enhanced Balance Display":await lt(e);break;case"> Back":return}await nt(e)},st=async e=>{const t=I.resolve(e,"network.json"),a=JSON.parse(A.readFileSync(t,"utf8"));"status"in a||(a.status={fullAddr:!1,gasToken:!1,extendedToken:!1});let r=[`> Show Full Address [${a.status.fullAddr?"ON":"OFF"}]`,`> Show Gas Token [${a.status.gasToken?"ON":"OFF"}]`,`> Show Extended Token[${a.status.extendedToken?"ON":"OFF"}]`,new T.default.Separator("----------------------------------"),"> Back"];const n=await Vt(r);"> Back"!==n&&(n.includes("Full Address")?a.status.fullAddr=await ot():n.includes("Gas Token")?a.status.gasToken=await ot():n.includes("Extended Token")&&(a.status.extendedToken=await ot()),A.writeFileSync(t,JSON.stringify(a,null,2)))},ot=async()=>{switch(await Vt(["> On","> Off"])){case"> On":return!0;case"> Off":return!1}},it=(e,t)=>{const a=I.resolve(e,"network.json");let r=JSON.parse(A.readFileSync(a,"utf8")).showTokens;return t in r?r[t]:[]},ct=async e=>{const t=I.resolve(e,"network.json"),a=JSON.parse(A.readFileSync(t,"utf8"));let r={};for(let e of a.networks)r[e.chainId.toString()]=e.name;const n=I.resolve(e,"assets.json");if(!ya(n))return void console.log(Xe.red("No asset here yet"));const s=JSON.parse(A.readFileSync(n,"utf8"));let o=[],i=[],c={};for(let t in s){c[o.length]={name:r[t],address:null},o.push(new T.default.Separator(`----- Networks (${r[t]}) -------`));let a=it(e,r[t]),n=s[t].length;for(let e=0;e<n;e++){let n=s[t][e];a.includes(n.address)&&i.push(`${e+1}.${n.symbol.padEnd(6)} CA: ${Xe.green(`${va(n.address).padEnd(45)}`)} Decimals: ${n.display_decimals?n.display_decimals:"4"}`),c[o.length]={name:r[t],address:n.address},o.push(`${e+1}.${n.symbol.padEnd(6)} CA: ${Xe.green(`${va(n.address).padEnd(45)}`)} Decimals: ${n.display_decimals?n.display_decimals:"4"}`)}}let l=await Zt(o,"Choose Tokens",i),u={};for(let e=0;e<l.length;e++){let t=l[e],a=c[o.indexOf(t)];a.name in u?u[a.name].push(a.address):u[a.name]=[a.address]}a.showTokens=u,A.writeFileSync(t,JSON.stringify(a,null,2))},lt=async e=>{const t=["> Status","> Token List","> Add Token",new T.default.Separator("----------------------------------"),"> Back"];switch(await Vt(t)){case"> Status":await st(e);break;case"> Token List":await ct(e);break;case"> Add Token":await Nt(e);break;case"> Back":return}await lt(e)},ut=async e=>{let t=["> Networks","> Dataview",new T.default.Separator("----------------------------------"),"> Back"];switch(await Vt(t)){case"> Networks":await rt(e);break;case"> Dataview":await nt(e);break;case"> Back":return}await ut(e)},dt=async e=>{const t=I.resolve(e,"network.json"),a=JSON.parse(A.readFileSync(t,"utf8")).networks.map(e=>`> ${e.name}`);return(await Vt(a,"Please select a default network")).slice(2)},pt=(e,t)=>{const a=I.resolve(e,"network.json"),r=JSON.parse(A.readFileSync(a,"utf8"));for(let e=0;e<r.networks.length;e++){const a=r.networks[e];if(a.name===t)return ge(a.chainId.toString())}return"unknown"},gt=(e,t)=>{const a=I.resolve(e,"network.json"),r=JSON.parse(A.readFileSync(a,"utf8"));for(let e=0;e<r.networks.length;e++){const a=r.networks[e];if(a.name===t)return a}return null},ht=(e,t,a)=>{const r=qe(e,t);if("PK"===r.account_type)return r.data[a].ciphertexts.address;let n=r.default_network,s=pt(e,n);return"solana"===s?r.data[a].ciphertexts.solana.address:"evm"===s?r.data[a].ciphertexts.evm.address:null},mt=(e,t)=>qe(e,t).ciphertexts.address,ft=async(e,t,a)=>{const r=I.resolve(e,"network.json"),n=JSON.parse(A.readFileSync(r,"utf8")).networks,s=n.length;let o=qe(e,t),i=o.default_network;const c=pt(e,i);for(let t=0;t<s;t++){const r=n[t],s=pt(e,r.name);if("PK"===o.account_type&&c!==s)continue;let l;l="PK"===o.account_type?o.data[a].ciphertexts.address:"evm"===s?o.data[a].ciphertexts.evm.address:o.data[a].ciphertexts.solana.address,r.name===i?console.log(`● ${l} [${r.name}]`):console.log(`○ ${l} [${r.name}]`)}},yt=async(e,t,a)=>{const r=I.resolve(e,"network.json"),n=JSON.parse(A.readFileSync(r,"utf8")).networks,s=n.length;let o=qe(e,t),i=["> Back",new T.default.Separator("----------------------------------")],c=o.default_network,l="";a||(l=o.ciphertexts.address);let u=[];const d=pt(e,c);for(let t=0;t<s;t++){const r=n[t],s=pt(e,r.name);"PK"===o.account_type&&d!==s||(r.name===c?a?i.push(`● ${r.name}`):i.push(`● ${l} [${r.name}]`):a?i.push(`○ ${r.name}`):i.push(`○ ${l} [${r.name}]`),u.push(r.name))}const p=await Vt(i);if("> Back"===p)return;let g=i.indexOf(p);if(o.default_network=u[g-2],Ke(e,t,o),!a){let t=o.default_network,a=gt(e,t);console.log(Xe.green(` Address No: #0\n Network: ${t}\n ${a.nativeCurrency.symbol} Balance: 0`))}},wt=async(e,t,a)=>{const r=gt(t,a),n=r.rpcUrl,s=r.nativeCurrency.decimals;let o;if(o="solana"===ge(r.chainId.toString())?await V(e,n):await W(e,n),o.status){let e=new l.BigNumber(o.output.toString());o.output=e.dividedBy(Math.pow(10,s)).toFixed(4,l.BigNumber.ROUND_FLOOR)}return ie(r.chainId.toString(),[e],["0"]),o},vt=(e,t,a)=>{const r=qe(e,t);if("PK"===r.account_type)return r.default_network;for(let e=0;e<r.data.length;e++)if(r.data[e].ciphertexts.solana.address===a||r.data[e].ciphertexts.evm.address===a)return"default_network"in r.data[e]?r.data[e].default_network:r.default_network;return null},bt=e=>{const t=I.resolve(e,"network.json"),a=JSON.parse(A.readFileSync(t,"utf8")).networks,r=a.length;let n=[];for(let e=0;e<r;e++)"evm"===ge(a[e].chainId.toString())&&n.push(a[e].name);return n},kt=e=>{const t=I.resolve(e,"network.json");return JSON.parse(A.readFileSync(t,"utf8")).status},St=require("chalk"),xt=async(e,t)=>{let a=I.join(e,"assets.json");if(!ya(a))return[];const r=A.readFileSync(a).toString(),n=JSON.parse(r);return t in n?n[t]:[]},_t=async(e,t,a)=>{const r=await xt(e,t);let n=[];for(let e=0;e<r.length;e++)r[e].symbol.toLocaleLowerCase()===a.toLocaleLowerCase()&&n.push(r[e]);return n},Pt=async(e,t,a)=>{const r=gt(e,t),n=ge(r.chainId.toString()),s=await xt(e,r.chainId.toString());if(!s)return void console.log(St.red("No asset found"));const o=await jt(a,s,r.rpcUrl,n,r.chainId.toString());let i=1;for(let e=0;e<o.length;e++)"0"!==o[e].balance&&"0.0000"!==o[e].balance&&(console.log(St.green(`${i}. ${o[e].symbol} Balance: ${o[e].balance}`)),i+=1);1===i&&console.log(St.red("No asset found"))},$t=async(e,t,a)=>{const r=gt(e,t);let n=(await xt(e,r.chainId.toString())).map(e=>e.address);n.push("0"),ie(r.chainId.toString(),[a],n)},At=async(e,t,a,r,n,s,o)=>{let i=I.join(e,"assets.json"),c={};if(ya(i)){const e=A.readFileSync(i).toString();c=JSON.parse(e)}void 0===c[t]&&(c[t]=[]);for(let e=0;e<c[t].length;e++)if(c[t][e].address.toLocaleLowerCase()===a.toLocaleLowerCase()||c[t][e].symbol.toLocaleLowerCase()===r.toLocaleLowerCase())return c[t][e]={address:a,symbol:r,name:n,decimals:s,display_decimals:o},void A.writeFileSync(i,JSON.stringify(c,null,4));c[t].push({address:a,symbol:r,name:n,decimals:s,display_decimals:o}),A.writeFileSync(i,JSON.stringify(c,null,4))},Nt=async e=>{const t=I.resolve(e,"network.json");let a=[],r=JSON.parse(A.readFileSync(t,"utf8")).networks;for(let e=0;e<r.length;e++)a.push(`${e+1}. ${r[e].name}`);let n=(await Vt(a)).split(".")[1].trim();const s=pt(e,n),o=gt(e,n),i=await Ft("Enter contract address",Wt);let c;if("evm"===s){if(!me(i))return void console.log(St.red("evm address format error"));c=await Z(i,o.rpcUrl)}else{if(!he(i))return void console.log(St.red("solana address format error"));c=await X(i,o.rpcUrl)}if(!c.status)return void console.log(St.red(c.output));c.output.name||(c.output.name=await Ft("Please input token name")),c.output.symbol||(c.output.symbol=await Ft("Please input token symbol")),console.log(St.green(`Token ${c.output.symbol}(${c.output.name}) loaded successfully.`));let l=await Ft("Enter decimals for display",Dt);l=parseInt(l),await At(e,o.chainId.toString(),i,c.output.symbol,c.output.name,c.output.decimals,l)},It=async(e,t)=>{const a=pt(e,t),r=gt(e,t),n=await Ft("Enter contract address",Wt);let s;if("evm"===a){if(!me(n))return void console.log(St.red("evm address format error"));s=await Z(n,r.rpcUrl)}else{if(!he(n))return void console.log(St.red("solana address format error"));s=await X(n,r.rpcUrl)}if(!s.status)return void console.log(St.red(s.output));s.output.name||(s.output.name=await Ft("Please input token name")),s.output.symbol||(s.output.symbol=await Ft("Please input token symbol")),console.log(St.green(`Token ${s.output.symbol}(${s.output.name}) loaded successfully.`));let o=await Ft("Enter decimals for display",Dt);o=parseInt(o),await At(e,r.chainId.toString(),n,s.output.symbol,s.output.name,s.output.decimals,o)},Ct=async(e,t,a)=>{const r=["> Show Assets","> Add Asset",new T.default.Separator("----------------------------------"),"> Back"];switch(await Vt(r)){case"> Show Assets":await Pt(e,a,t);break;case"> Add Asset":await It(e,a);break;case"> Back":return}await Ct(e,t,a)},jt=async(e,t,a,r,n)=>{let s=t.length,o=[];for(let n=0;n<s;n++){let s=t[n];"evm"===r?o.push(Q(e,s.address,a)):"solana"===r&&o.push(Y(e,s.address,a))}let i=await Promise.all(o),c=[];for(let a=0;a<s;a++){let r=t[a],s=r.decimals;if(!i[a].status)return console.log(St.red(i[a].output)),null;let o=new l.BigNumber(i[a].output).dividedBy(Math.pow(10,s)).toFixed(4,l.BigNumber.ROUND_FLOOR);c.push({address:r.address,symbol:r.symbol,balance:o}),ie(n,[e],[r.address])}return ie(n,[e],["0"]),c},Tt=async(e,t,a,r,n,s,o)=>{let i=a.length,c=gt(e,n),l="evm"===ge(c.chainId.toString());if(s&&await se(t,"0",c.chainId.toString(),r,l),o){let s=it(e,n);for(let e=0;e<i;e++){let n=a[e].address;s.includes(n)&&await se(t,n,c.chainId.toString(),r,l)}}return oe(c.chainId.toString(),t,a,c)},Ot=require("chalk"),Bt=process.env.HOME||process.env.USERPROFILE,Et=`${Bt}/.wative`,Ft=async(e,t)=>{const a=[{name:"inputText",type:"input",message:`${e}:`,validate:t}],{inputText:r}=await T.default.prompt(a);return r.trim().toString()},Lt=async e=>{for(let t=0;t<5;t++){let t=await Kt(e,"Input start address or index");if(!t)return console.log(Ot.red("Invalid start account index")),null;let a=await Kt(e,"Input end address or index");if(!a)return console.log(Ot.red("Invalid end account index")),null;if(!(t>a))return{from:t,to:a};console.log(Ot.red("Invalid address range"))}return null},qt=async(e,t,a)=>{let r=I.join(e,`accounts/${t}.json`);if(!A.existsSync(r))return null;let n=JSON.parse(A.readFileSync(r,"utf8")),s=n.data,o=n.account_type,i=s.length;if(0===i)return null;for(let e=0;e<i;e++){if("PK"===o&&s[e].ciphertexts.address.toLocaleLowerCase()===a.toLocaleLowerCase())return e.toString();if("PP"===o&&(s[e].ciphertexts.evm.address.toLocaleLowerCase()===a.toLocaleLowerCase()||s[e].ciphertexts.solana.address.toLocaleLowerCase()===a.toLocaleLowerCase()))return e.toString()}return null},Kt=async(e,t)=>{let a=e.data,r=a.length;if(0===r)return null;let n=[],s=[];for(let e=0;e<r;e++)n.push(a[e].ciphertexts.evm.address.toLocaleLowerCase()),s.push(a[e].ciphertexts.solana.address.toLocaleLowerCase());let o=r-1;for(let e=0;e<5;e++){let e=await Ft(t,Gt),a=fa(e);if("unknown"===a){if(Number(e)>o){console.log(Ot.red("Invalid account index"));continue}return Number(e)}if("evm"===a&&-1!==n.indexOf(e.toLocaleLowerCase()))return n.indexOf(e.toLocaleLowerCase());if("solana"===a&&-1!==s.indexOf(e.toLocaleLowerCase()))return s.indexOf(e.toLocaleLowerCase())}return null},Rt=e=>""===e||((e=e.replace(/\s+/g," ").trim()).length>40?"Tag length should be less than 10":!1!==/^[0-9a-zA-Z\s]*$/g.test(e)||"Tag should be alphanumeric"),Mt=e=>!(e.length<6)||"Address length should be greater than 6",Dt=e=>!isNaN(Number(e))||"Value should be a number",zt=e=>!(isNaN(Number(e))||Number(e)>1e3)||"Value should be a number",Ut=e=>{const t=(e=e.replace(/\s+/g," ")).split(/\s+/g);if(12!==t.length&&24!==t.length)return"Passphrase should be equal to 12 or 24 words";for(let e=0;e<t.length;e++)if(!1===le.includes(t[e]))return"Passphrase word should be valid";return!0},Ht=e=>{let t=Number(e);return isNaN(t)?"Amount should be a number":!(t>2e3)||"Amount should be less than 2000"},Jt=e=>{let t=Number(e);return!isNaN(t)||"Last account no should be a number"},Gt=e=>!1===isNaN(Number(e))||Wt(e),Wt=e=>"unknown"!=fa(e)||"Address should be valid",Vt=async(e,t,a)=>{const r=[{type:"list",name:"inputText",message:t||"Choose an option",default:a,choices:e,pageSize:30,filter:e=>e}],{inputText:n}=await T.default.prompt(r);return n.toString()},Zt=async(e,t,a)=>{const r=[{type:"checkbox",name:"inputText",message:t||"Choose an option",default:a,choices:e,pageSize:30,filter:e=>e}],{inputText:n}=await T.default.prompt(r);return n},Xt=()=>{console.log(Ot.green(j.textSync("Wative",{font:"ANSI Shadow",horizontalLayout:"default",verticalLayout:"default"})))},Qt=async()=>{let e=await Ft(`Keystore storage located in (default: ${Et})`);return e||(e=Et),e=e.trim(),e=e.replace("~",Bt),A.existsSync(e)||A.mkdirSync(e,{recursive:!0}),e},Yt=async(e,t=!1)=>{for(let a=0;a<5;a++){const a=await Ft(e);if(""===a&&t)return null;if(/^[0-9]*$/g.test(a))return a}return null},ea=async(e,t,a=!1)=>{for(let r=0;r<5;r++){let r=await Ft(t);try{if(""===r&&a)return null;if("solana"===ge(e.toString()))return r;const t=await G(r);if(!t.status){console.log(Ot.red(t.output));continue}if(t.output.toString()===e.toString())return r;console.log(Ot.red("Rpc url not match chain id"))}catch(e){console.log(Ot.red(e.message))}}return null},ta=async e=>{for(let t=0;t<5;t++){let t=await Ft(e);if(""===t)return null;""===t||42===t.length||console.log(Ot.red("Multicall address length must be 42"))}return null},aa=async e=>{let t=/^[A-Za-z][0-9a-zA-Z]*$/g;for(let a=0;a<5;a++){let a=await Ft(e);if(""===a)return null;if(t.test(a))return a}return null},ra=async e=>{let t=/^#[0-9A-Fa-f]{6}$/g;for(let a=0;a<5;a++){let a=await Ft(e);if(""===a)return null;if(t.test(a))return a}return null},na=(e,t)=>{const a=Le(e).accounts,r=oa(a).indexOf(t);return-1!==r?a[r]:t},sa=e=>e=(e=(e=(e=e.trim()).toLocaleLowerCase()).replace(/\s+/g,"-").trim()).replace(/\-+/g,"-").trim(),oa=e=>{let t=[];for(let a=0;a<e.length;a++)t.push(sa(e[a]));return t},ia=async(e,t)=>{let a=oa(t),r=/^(?![-_])[a-zA-Z0-9_-]{4,40}(?<![-_])$/g;for(let t=0;t<5;t++){let t=await Ft(e);t=t.trim();let n=sa(t);if(r.test(n)){if(a.includes(n)){console.log(Ot.red("Account name already exists"));continue}return t}}return null},ca=async(e,t)=>{const a=[{name:"inputText",type:"password",mask:"#",message:`${e}:`,validate:t}],{inputText:r}=await T.default.prompt(a);return r.trim().toString()},la=async e=>{const t=[{name:"password",type:"password",mask:"#",message:`${e}:`}];let{password:a}=await T.default.prompt(t);return a},ua=async(e,t)=>{const a=[{name:"inputText",type:"input",message:`${e}:`,validate:t,transformer:e=>{const t=e.split(" "),a=t.map((e,a)=>a<t.length-1?"#".repeat(e.length):e);return a.join(" ")}}],{inputText:r}=await T.default.prompt(a);return r.trim().toString()},da=async e=>{const t=[{name:"password",type:"password",mask:"#",message:`${e}:`,validate:e=>function(e){let t,a="Password must contain at least: \n",r=!0,n=" ",s=Ot.green("✔"),o=Ot.red("✖");return e.length>=8?a+=n+s+" 8 characters\n":(a+=n+o+" 8 characters\n",r=!1),t=/[0-9]/,t.test(e)?a+=n+s+" One numerical character\n":(a+=n+o+" One numerical character\n",r=!1),t=/[A-Z]/,t.test(e)?a+=n+s+" One uppercase letter\n":(a+=n+o+" One uppercase letter\n",r=!1),t=/[!@#$%]/,t.test(e)?a+=n+s+" One sepcial character (i.e. !@#$%)\n":(a+=n+o+" One sepcial character (i.e. !@#$%)\n",r=!1),!!r||a}(e)}];let{password:a}=await T.default.prompt(t);return a},pa=async(e,t=!0)=>{const a=[{name:"confirm",type:"confirm",message:`${e}`,default:t}],{confirm:r}=await T.default.prompt(a);return r},ga=async(e,t)=>{const a=[{name:"editor",type:"editor",message:`${e}`,validate:t}],{editor:r}=await T.default.prompt(a);return r.trim().toString()},ha=function(e){return!!/^0x[0-9a-fA-F]*$/g.test(e.trim())},ma=async(e,t)=>{let a;try{a={status:!0,output:await e(...t)}}catch(e){a={status:!1,output:e.toString()}}return a},fa=e=>e.startsWith("0x")&&42===e.length?"evm":/^[A-HJ-NP-Za-km-z1-9]*$/.test(e)&&e.length<=44&&e.length>=32?"solana":"unknown",ya=e=>(e=e.trim(),A.existsSync(e)),wa=e=>new Promise(t=>setTimeout(t,e)),va=(e,t=!0)=>t?e:e.startsWith("0x")?e.slice(0,8)+"..."+e.slice(-6):e.slice(0,6)+"..."+e.slice(-6),ba=(e,t)=>{if(!e.name)return null;let a=null;if(t)a=/0x[0-9a-fA-f]{40}/.exec(e.name),a=a?a[0]:null;else{let t=/\s+([0-9a-zA-Z]*)/.exec(e.name);a=t?t[1]:null,"Back"===a&&(a=null)}return a},ka=(e,t,a)=>{let r,n;return e<t/2?a/2<=t?(r=0,n=a/2):(r=0,n=t):a/2<=t?(r=0,n=a/2):(r=e-t/2+1,n=e+t/2+1),{fromIndex:r,toIndex:n}},Sa=(e,t)=>{const a=[];for(let r=0;r<e.length;r++){const n=ba(e[r],t);a.push(n)}return a.concat(a)},xa=(e,t,a,r,n,s,o,i,c)=>{for(let l=i;l<c;l++){let i=l>=t.length/2?l-t.length/2:l,c=e[i];if(!c.name)continue;let u=c.name,d=t[l],p="";if(!d)continue;for(let e in a[d])(s||e!==n)&&(o||e===n)&&(u.includes(e)||(p+=`${e}:${a[d][e].padEnd(r[e])} `));let g=u.split("(");if(g.length>1){let t=g[1];e[i].name=g[0]+` ${p}`+`(${t}`}else e[i].name=g[0]+` ${p}`}},_a=async(e,t,a,r,n,s,o,i,c,l)=>{const u=[{type:"list",name:"inputText",message:c||"Choose an option",choices:e,pageSize:30,default:l,loop:!0,filter:e=>e}],d=T.default.prompt(u);let p,g=0,h=0;for(;!d.ui.activePrompt.answers[d.ui.activePrompt.opt.name];){if(i||await wa(1e3),p===d.ui.activePrompt.selected)continue;if(g===d.ui.activePrompt.selected?h+=1:(h=0,g=d.ui.activePrompt.selected),i){h=6,i=!1;const e=d.ui.activePrompt.opt.pageSize,a=Sa(d.ui.activePrompt.opt.choices.choices,t),{fromIndex:r,toIndex:s}=ka(g,e,a.length),o=a.slice(r,s);if(!ce(n.chainId.toString(),o)){h=0;continue}}if(h<5)continue;h=0;const e=d.ui.activePrompt.opt.pageSize,c=Sa(d.ui.activePrompt.opt.choices.choices,t),{fromIndex:l,toIndex:u}=ka(g,e,c.length),m=c.slice(l,u);let f=await Tt(a,m,r,n.rpcUrl,n.name,s,o),y={};for(let e in f)for(let t in f[e]){let a=f[e][t].length+1;y[t]?y[t]<a&&(y[t]=a):y[t]=a}const w=n.nativeCurrency.symbol;xa(d.ui.activePrompt.opt.choices.choices,c,f,y,w,s,o,l,u),d.ui.activePrompt.screen.render(""),d.ui.activePrompt.render(),p=g}return d.ui.activePrompt.answers[d.ui.activePrompt.opt.name]},Pa=e=>{const t=I.resolve(e,"network.json"),a=JSON.parse(A.readFileSync(t,"utf8"));a.status||(a.status={fullAddr:!0,gasToken:!1,extendedToken:!1}),a.showTokens||(a.showTokens={});let r=a.accounts.length;for(let t=0;t<r;t++){let n=a.accounts[r-1-t],s=sa(n),o=I.resolve(e,`accounts/${s}.json`);A.existsSync(o)||a.accounts.splice(r-1-t,1)}A.writeFileSync(t,JSON.stringify(a,null,4));let n=a.accounts,s=oa(n);for(let t=0;t<s.length;t++){let a=I.resolve(e,`accounts/${s[t]}.json`),r=JSON.parse(A.readFileSync(a,"utf8"));"PP"!==r.account_type&&("data"in r||(r.data=[{ciphertexts:r.ciphertexts}],delete r.ciphertexts,A.writeFileSync(a,JSON.stringify(r,null,4))))}};require("wative-core");const $a=async(e,t)=>{switch(await Vt(["> System & Settings","> Accounts","> Tools","> Exit"])){case"> System & Settings":await ut(e);break;case"> Accounts":await Ze(e,t);break;case"> Tools":await Ce(e,t);break;case"> Exit":return}await $a(e,t)};class Aa{constructor(e,t){this.configDir=e||I.join(require("os").homedir(),".wative/ssh"),this.keystorePath=t||I.join(require("os").homedir(),".wative"),A.existsSync(this.configDir)||A.mkdirSync(this.configDir,{recursive:!0});const a=I.join(this.configDir,"conf.d");A.existsSync(a)||A.mkdirSync(a,{recursive:!0})}getKeystorePath(){return this.keystorePath}getConfigDir(){return this.configDir}async createServiceConfig(e,t,a,r="default_client",n){if(!this.isValidServiceName(e))throw new Error("Invalid service name. Use only alphanumeric characters, hyphens, and underscores.");if(this.isPortInUse(t))throw new Error(`Port ${t} is already in use by another service.`);const s=await this.generateServiceKeyPair(e),o=await this.generateClientKeyPair(e,r),i={name:e,description:n||`Wative SSH Service - ${e}`,ssh:{listen:"127.0.0.1",port:t,log:{size:10485760,backups:3}},keystore:{path:this.keystorePath,allowed_keystores:a},clients:[{name:r,public_key_path:o.publicKey,allowed_keystores:a}],server_keys:{private_key_path:s.privateKey,passphrase:s.passphrase}};return this.saveServiceConfig(e,i),i}loadServiceConfig(e){const t=this.getServiceConfigPath(e);if(!A.existsSync(t))throw new Error(`Service configuration '${e}' not found.`);const a=E.parse(A.readFileSync(t,"utf-8"));return this.parseConfigData(a)}listServiceConfigs(){const e=I.join(this.configDir,"conf.d");if(!A.existsSync(e))return[];return A.readdirSync(e).filter(t=>{const a=I.join(e,t);return A.statSync(a).isDirectory()&&A.existsSync(I.join(a,"config.ini"))})}removeServiceConfig(e){const t=this.getServiceConfigPath(e);A.existsSync(t)&&A.unlinkSync(t),this.removeServiceKeys(e)}updateServiceConfig(e,t){const a={...this.loadServiceConfig(e),...t};this.saveServiceConfig(e,a)}async validateKeystorePasswords(e,t){const a={},{WativeCore:r}=require("wative-core");for(const n of e)try{const e=t[n];if(!e){a[n]=!1;continue}const s=new r(this.keystorePath,[n],[e]);a[n]=s.account.isLogin(n)}catch(e){a[n]=!1}return a}isValidServiceName(e){return/^[a-zA-Z0-9_-]+$/.test(e)&&e.length>0&&e.length<=50}isPortInUse(e){const t=this.listServiceConfigs();for(const a of t)try{if(this.loadServiceConfig(a).ssh.port===e)return!0}catch(e){}return!1}async generateServiceKeyPair(e){const t=this.generateSecurePassphrase(),a=I.join(this.configDir,"conf.d",e);A.existsSync(a)||A.mkdirSync(a,{recursive:!0});const r=I.join(a,"server_private_key"),n=I.join(a,"server_public_key.pub");return A.existsSync(r)||(console.log(`Generating SSH server key pair for service '${e}'...`),p.execSync(`ssh-keygen -t rsa -b 4096 -f ${r} -N '${t}' -C 'wative_${e}_server'`,{stdio:"inherit"})),{privateKey:r,publicKey:n,passphrase:t}}async generateClientKeyPair(e,t){const a=I.join(this.configDir,"conf.d",e);A.existsSync(a)||A.mkdirSync(a,{recursive:!0});return{privateKey:"",publicKey:I.join(a,`${t}.pub`),passphrase:""}}generateSecurePassphrase(){return F.randomBytes(32).toString("hex")}getServiceConfigPath(e){return I.join(this.configDir,"conf.d",e,"config.ini")}saveServiceConfig(e,t){const a=this.getServiceConfigPath(e),r=I.dirname(a);A.existsSync(r)||A.mkdirSync(r,{recursive:!0});const n=E.stringify(t);A.writeFileSync(a,n)}parseConfigData(e){return{name:e.name,description:e.description,ssh:{listen:e.ssh.listen,port:parseInt(e.ssh.port),log:{size:parseInt(e.ssh.log.size),backups:parseInt(e.ssh.log.backups)}},keystore:{path:e.keystore.path,allowed_keystores:Array.isArray(e.keystore.allowed_keystores)?e.keystore.allowed_keystores:e.keystore.allowed_keystores.split(",")},clients:Array.isArray(e.clients)?e.clients:[e.clients],server_keys:{private_key_path:e.server_keys.private_key_path,passphrase:e.server_keys.passphrase}}}removeServiceKeys(e){const t=[`id_rsa_${e}_server`,`id_rsa_${e}_server.pub`,`id_rsa_${e}_*`];for(const e of t){const t=I.join(this.configDir,e);A.existsSync(t)&&A.unlinkSync(t)}}}const Na=e=>{if(e=e.trim(),!A.existsSync(e))throw new Error("File not exists")};const{WativeCore:Ia}=require("wative-core"),{Connection:Ca,PublicKey:ja,VersionedTransaction:Ta,VersionedMessage:Oa}=require("@solana/web3.js"),Ba=require("bs58"),{Keypair:Ea,TransactionMessage:Fa,ComputeBudgetInstruction:La,TransactionInstruction:qa,ComputeBudgetProgram:Ka}=require("@solana/web3.js"),{Wallet:Ra}=require("@coral-xyz/anchor");L.configure({appenders:{file:{type:"file",filename:process.env.HOME+"/.wative/logs/wative.log",maxLogSize:10485760,backups:3,compress:!0,keepFileExt:!0,layout:{type:"pattern",pattern:"%d{yyyy-MM-dd hh:mm:ss.SSS} [%p] %c - %m"},encoding:"utf-8"},console:{type:"console"}},categories:{default:{appenders:["file","console"],level:"info"}}});const Ma=L.getLogger("file");Ma.level="info";class Da{constructor(e,a,r,n,s,o,i,c){if(this._allowedAppIds=[],this._allowedPubKeys=[],this._allowedKeystoreIds=[],this._sessionIdAppIdMap={},Na(e),0===r.length||0===n.length||0===s.length||r.length!==n.length||r.length!==s.length)throw new Error("WativeWielderServer:: constructor: Invaild AllowedApp");for(let e=0;e<s.length;e++)for(let t=0;t<s[e].length;t++){const a=s[e][t];if(!i.includes(a))throw new Error("WativeWielderServer:: constructor: Invaild AllowedKeystoreIds")}for(let e of r)this._allowedAppIds.push(Buffer.from(e));for(let e of n){let a=g.utils.parseKey(t.readFileSync(e));this._allowedPubKeys.push(a)}this.wativeCore=new Ia(o,i,c),this._idRsaPrivatePath=e,this._idRsaPassphrase=a,this._allowedKeystoreIds=s,this._keystoreDirectoryPath=o}listen(e,a){new g.Server({hostKeys:[{key:t.readFileSync(this._idRsaPrivatePath),passphrase:this._idRsaPassphrase}]},e=>{e.on("authentication",t=>{let a=!0;if(this&&(this.checkValue(Buffer.from(t.username),"appId")||(a=!1)),"publickey"!==t.method||!a)return t.reject();{let e=this.getBytesIndex(Buffer.from(t.username),this._allowedAppIds),a=this._allowedPubKeys[e];if(t.key.algo!==a.type||!this.checkValue(t.key.data,"publicKey")||t.signature&&!0!==a.verify(t.blob,t.signature,t.hashAlgo))return t.reject()}if(a){const a=e._protocol._kex.sessionID.toString("hex");this._sessionIdAppIdMap[a]=Buffer.from(t.username),t.accept()}else t.reject()}).on("ready",()=>{e.on("session",(t,a)=>{t().once("exec",async(t,a,r)=>{const n=e._protocol._kex.sessionID.toString("hex"),s=await this.web3Request(n,r.command),o=t();o&&(JSON.stringify(s)?(o.write(JSON.stringify(s)),o.exit(0),o.end()):(o.write("ssh2 connect error"),o.exit(0),o.end()))})})}).on("close",()=>{Ma.info("Client disconnected")}).on("error",e=>{Ma.error("err: ",e.message)})}).listen(a,e,function(){Ma.info("Listening on port "+a)})}async web3Request(e,t){try{const a=this._sessionIdAppIdMap[e],r=this.getBytesIndex(a,this._allowedAppIds);if(r<0)return{status:!1,msg:"app not found"};let n=JSON.parse(t);Ma.info("sign message: ",t);let s=n.method,o=n.keystoreId||n.params.keystoreId,i=n.chainId||n.params.chainId;if(!this._allowedKeystoreIds[r].includes(o))return{status:!1,msg:"keystore not allowed"};let c;if("get_root_account"===s)c=this.getRootAccount(o,i);else if("get_sub_account"===s){let e=n.params;c=this.getSubAccount(o,e.chainId,null==e?void 0:e.startIndex,null==e?void 0:e.endIndex)}else if("sign"===s){let e=n.params;try{c=await this.wativeCore.account.signTransaction(e.txParams.from,e.txParams,e.rpcUrl)}catch(e){return Ma.error("sign error: ",e.message),{status:!1,msg:e.msg}}}else if("sign_and_send"===s){let e=n.params;try{c={transactionHash:await this.wativeCore.account.signAndSendTx(e.txParams,e.rpcUrl)}}catch(e){return{status:!1,msg:e.msg}}}else if("solana_sign"===s)try{let e=n.params;c=await this.signSolanaTransaction(e.txParams.from,e.txParams.data,e.txParams.lookup_tables,e.rpcUrl,e.priority_fee)}catch(e){return Ma.error("sign error: ",e.message),{status:!1,msg:e.msg}}else if("solana_send"===s)try{let e=n.params;c=await this.sendSignedSolanaTransaction(e.txParams.from,e.txParams.signature,e.txParams.data,e.rpcUrl)}catch(e){return Ma.error("sign error: ",e.message),{status:!1,msg:e.msg}}else if("sign_message"===s)try{let e=n.params;Ma.debug("sign message: ",e),c=await this.signMessage(e.account,e.message)}catch(e){return Ma.error("sign error: ",e.message),{status:!1,msg:e.msg}}else{if("sign_typed_data"!==s)return{status:!1,msg:"message method not find"};try{let e=n.params;Ma.debug("sign message: ",e),c=await this.signTypedData(e.account,e.domain,e.types_name,e.types,e.message)}catch(e){return Ma.error("sign error: ",e.message),{status:!1,msg:e.msg}}}return{status:!0,data:c}}catch(e){return Ma.error("sign error: ",e.message),{status:!1,msg:e.msg}}}checkValue(e,t){if("appId"!==t&&"publicKey"!==t)return!1;let a=this._allowedAppIds.length;for(let r=0;r<a;r++){let a;a="appId"===t?this._allowedAppIds[r]:this._allowedPubKeys[r].getPublicSSH();const n=e.length!==a.length;n&&(a=e);const s=d.timingSafeEqual(e,a);if(!n&&s)return!0}}getBytesIndex(e,t){let a=t.length;for(let r=0;r<a;r++)if(e.length===t[r].length&&d.timingSafeEqual(e,t[r]))return r;return-1}getRootAccount(e,a){const r=I.resolve(this._keystoreDirectoryPath,`accounts/${e}.json`);let n,s=t.readFileSync(r);return s=JSON.parse(s.toString()),n="SOLANA"===this.getChainType(a)?s.data[0].ciphertexts.solana.address:s.data[0].ciphertexts.evm.address,[{id:0,address:n,children:s.data.length,type:"M"}]}getChainType(e){return"901"===e||"902"===e||"903"===e?"SOLANA":"EVM"}getSubAccount(e,a,r,n){const s=I.resolve(this._keystoreDirectoryPath,`accounts/${e}.json`);let o=t.readFileSync(s);o=JSON.parse(o.toString());let i=o.data.length-1;n&&n<i&&(i=n);let c=0;if(r&&r>0&&(c=r),c>i)return[];let l=this.getChainType(a),u=[];for(let e=c;e<=i;e++)u.push(o.data[e].ciphertexts[l.toLocaleLowerCase()].address);return u}async signMessage(e,t){let a=await this.wativeCore.account.signMessage(e,t);return console.log(a),a}async signTypedData(e,t,a,r,n){let s=JSON.parse(t),o=JSON.parse(r),i=JSON.parse(n);console.log(s),console.log(o),console.log(i);let c=this.wativeCore.account.showPrivateKey(e),l=new m.ethers.Wallet(c),u=await l.signTypedData(s,{[a]:o},i);return console.log(u),{status:!0,output:u}}async signSolanaTransaction(e,t,a,r,n){let s=new Ca(r),o=[];if(a)for(let e of a){let t=(await s.getAddressLookupTable(new ja(e))).value;o.push(t),await za(1e3)}let i=Oa.deserialize(Uint8Array.from(Buffer.from(t,"hex"))),c=Fa.decompile(i);c.instructions.push(Ka.setComputeUnitLimit({units:2e6})),c.instructions.push(Ka.setComputeUnitPrice({microLamports:1e3})),i=c.compileToV0Message(o),i.recentBlockhash=(await s.getLatestBlockhash()).blockhash,await za(3e3);let l=new Ta(i),u=this.wativeCore.account.showPrivateKey(e);const d=Ea.fromSecretKey(new Uint8Array(Ba.decode(u))),p=new Ra(d);let g=await s.simulateTransaction(l);if(!g||!g.value||0===g.value.unitsConsumed||g.value.err)return{status:!1,output:g.value.err};let h=c.instructions.length,m=Math.trunc(1.2*g.value.unitsConsumed);if(c.instructions[h-2]=Ka.setComputeUnitLimit({units:m}),!n||"null"==n)try{n=await this.getPrioritizationFee(r)}catch(e){n=2e5}n<1e4&&(n=1e4),n>5e5&&(n=5e5),c.instructions[h-1]=Ka.setComputeUnitPrice({microLamports:n}),i=c.compileToV0Message(o),await za(1e3),i.recentBlockhash=(await s.getLatestBlockhash()).blockhash,l=new Ta(i),l.feePayer=p.publicKey,await za(3e3);let f=await this.wativeCore.account.signTransaction(e,l,r),y=new Ta(f.output.message,f.output.signatures).message.serialize();return y=Buffer.from(y).toString("hex"),{status:!0,output:{transactionHash:Ba.encode(f.output.signatures[0]),message:y,compute_units:g.value.unitsConsumed.toString()}}}async sendSignedSolanaTransaction(e,t,a,r){let n=[Ba.decode(t)],s=Oa.deserialize(Uint8Array.from(Buffer.from(a,"hex"))),o=new Ta(s,n);return await this.wativeCore.account.sendSignedTransaction(e,o,r)}async getPrioritizationFee(e){let t=new ja("JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4");const a=new Ca(e,"confirmed");let r=await a.getSignaturesForAddress(t,{limit:5});await za(2e3);let n=[];for(let e=0;e<r.length;e++)n.push(r[e].signature);let s=await a.getParsedTransactions(n,{maxSupportedTransactionVersion:0}),o=0;for(let e=0;e<s.length;e++){let t=s[e].transaction.message.instructions;for(let e=0;e<t.length;e++)if("ComputeBudget111111111111111111111111111111"===t[e].programId.toBase58()){let a=t[e].data;try{let e=new qa({keys:[],programId:new ja("ComputeBudget111111111111111111111111111111"),data:Buffer.from(Ba.decode(a))}),{microLamports:t}=La.decodeSetComputeUnitPrice(e);o+=Number(t);continue}catch(e){}}}return Math.ceil(o/5)}}const za=e=>new Promise(t=>setTimeout(t,e));"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var Ua={exports:{}},Ha={name:"wative-core",version:"1.0.21",description:"An agile keystore management toolkit",main:"lib/index.umd.js",module:"lib/index.esm.js",types:"lib/index.d.ts",scripts:{test:"jest",compile:"tsc",build:"rollup --config"},repository:{type:"git",url:""},bugs:{url:"https://github.com"},homepage:"https://github.com",keywords:["keystore","wallet"],author:"",license:"ISC",files:["src/","lib/"],dependencies:{"@babel/plugin-transform-modules-commonjs":"7.24.1","@rollup/plugin-commonjs":"21.0.1","@solana/web3.js":"1.91.8","@types/bs58":"4.0.4","crypto-js":"4.2.0","ethereumjs-wallet":"1.0.2",jest:"27.5.1","micro-ed25519-hdkey":"0.1.2",rollup:"2.79.1","rollup-plugin-terser":"7.0.2","rollup-plugin-typescript2":"0.31.2",tslib:"2.6.2",typescript:"4.9.5",web3:"1.7.3","web3-core":"4.3.2","@coral-xyz/anchor":"0.30.1","@types/crypto-js":"4.2.2","nodejs-threadpool":"1.0.1",tweetnacl:"1.0.3","rpc-websockets":"7.10.0"}};!function(e,t){!function(e,t,a,r,n,s,o,i,c,l,u,d){function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function g(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(a){if("default"!==a){var r=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(t,a,r.get?r:{enumerable:!0,get:function(){return e[a]}})}}),t.default=e,Object.freeze(t)}var h=g(t),m=g(a),f=p(r),y=g(n),w=g(s),v=g(o),b=g(l),k=function(){return k=Object.assign||function(e){for(var t,a=1,r=arguments.length;a<r;a++)for(var n in t=arguments[a])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},k.apply(this,arguments)};function S(e,t,a,r){return new(a||(a=Promise))(function(n,s){function o(e){try{c(r.next(e))}catch(e){s(e)}}function i(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a(function(e){e(t)})).then(o,i)}c((r=r.apply(e,t||[])).next())})}function x(e,t){var a,r,n,s={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return o.next=i(0),o.throw=i(1),o.return=i(2),"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function i(i){return function(c){return function(i){if(a)throw new TypeError("Generator is already executing.");for(;o&&(o=0,i[0]&&(s=0)),s;)try{if(a=1,r&&(n=2&i[0]?r.return:i[0]?r.throw||((n=r.return)&&n.call(r),0):r.next)&&!(n=n.call(r,i[1])).done)return n;switch(r=0,n&&(i=[2&i[0],n.value]),i[0]){case 0:case 1:n=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!((n=(n=s.trys).length>0&&n[n.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!n||i[1]>n[0]&&i[1]<n[3])){s.label=i[1];break}if(6===i[0]&&s.label<n[1]){s.label=n[1],n=i;break}if(n&&s.label<n[2]){s.label=n[2],s.ops.push(i);break}n[2]&&s.ops.pop(),s.trys.pop();continue}i=t.call(e,s)}catch(e){i=[6,e],r=0}finally{a=n=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,c])}}}"function"==typeof SuppressedError&&SuppressedError;var _=function(e,t){return S(void 0,void 0,void 0,function(){var a,r,n;return x(this,function(s){switch(s.label){case 0:return s.trys.push([0,2,,3]),[4,e.apply(void 0,t)];case 1:return r=s.sent(),a={status:!0,output:r},[3,3];case 2:return n=s.sent(),a={status:!1,output:n.toString()},[3,3];case 3:return[2,a]}})})},P=function(){function e(e){this.web3=new f.default(e)}return e.prototype.getEvmGasPrice=function(){return S(this,void 0,void 0,function(){return x(this,function(e){switch(e.label){case 0:return[4,_(this.web3.eth.getGasPrice,[])];case 1:return[2,e.sent()]}})})},e.prototype.getEvmGasLimit=function(e,t){return S(this,void 0,void 0,function(){return x(this,function(a){switch(a.label){case 0:return[4,_(this.web3.eth.estimateGas,[e,t])];case 1:return[2,a.sent()]}})})},e}(),$=function(e){return e=e.trim(),h.existsSync(e)},A=function(e,t){var a=t.length;if(0===a)return!0;for(var r=0;r<a;r++){var n=m.join(e,"accounts/".concat(t[r],".json"));if(!$(n))return!1}return!0},N=function(e){return(e=(e=(e=e.trim()).toLocaleLowerCase()).replace(/\s+/g,"-").trim()).replace(/\-+/g,"-").trim()},I=function(e,t){var a=[],r=m.join(e,"network.json");if(!$(r))throw new Error("network.json not found");for(var n=function(e){for(var t=[],a=0;a<e.length;a++)t.push(N(e[a]));return t}(C(r).accounts),s=0;s<t.length;s++)n.includes(t[s])&&a.push(t[s]);return a},C=function(e){var t=h.readFileSync(e).toString();return JSON.parse(t)},j=function(e,t){var a=JSON.stringify(e);h.writeFileSync(t,a)},T=function(e,t){return b.AES.encrypt(e,t).toString()},O=function(e,t){return b.AES.decrypt(e,t).toString(b.enc.Utf8)},B=["abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse","access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act","action","actor","actress","actual","adapt","add","addict","address","adjust","admit","adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent","agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert","alien","all","alley","allow","almost","alone","alpha","already","also","alter","always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger","angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique","anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic","area","arena","argue","arm","armed","armor","army","around","arrange","arrest","arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset","assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction","audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake","aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge","bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain","barrel","base","basic","basket","battle","beach","bean","beauty","because","become","beef","before","begin","behave","behind","believe","below","belt","bench","benefit","best","betray","better","between","beyond","bicycle","bid","bike","bind","biology","bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless","blind","blood","blossom","blouse","blue","blur","blush","board","boat","body","boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss","bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread","breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze","broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb","bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy","butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call","calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas","canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry","cart","case","cash","casino","castle","casual","cat","catalog","catch","category","cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century","cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase","chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child","chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle","citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk","clever","click","client","cliff","climb","clinic","clip","clock","clog","close","cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut","code","coffee","coil","coin","collect","color","column","combine","come","comfort","comic","common","company","concert","conduct","confirm","congress","connect","consider","control","convince","cook","cool","copper","copy","coral","core","corn","correct","cost","cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle","craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek","crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial","cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup","cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad","damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal","debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense","define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny","depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk","despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond","diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur","direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance","divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain","donate","donkey","donor","door","dose","double","dove","draft","dragon","drama","drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop","drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf","dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo","ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow","elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody","embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless","endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough","enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip","era","erase","erode","erosion","error","erupt","escape","essay","essence","estate","eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange","excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit","exotic","expand","expect","expire","explain","expose","express","extend","extra","eye","eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame","family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father","fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female","fence","festival","fetch","fever","few","fiber","fiction","field","figure","file","film","filter","final","find","fine","finger","finish","fire","firm","first","fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor","flee","flight","flip","float","flock","floor","flower","fluid","flush","fly","foam","focus","fog","foil","fold","follow","food","foot","force","forest","forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile","frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen","fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy","gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp","gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture","ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance","glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue","goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown","grab","grace","grain","grant","grape","grass","gravity","great","green","grid","grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt","guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy","harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health","heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden","high","hill","hint","hip","hire","history","hobby","hockey","hold","hole","holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital","host","hotel","hour","hover","hub","huge","human","humble","humor","hundred","hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea","identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune","impact","impose","improve","impulse","inch","include","income","increase","index","indicate","indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury","inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install","intact","interest","into","invest","invite","involve","iron","island","isolate","issue","item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel","job","join","joke","journey","joy","judge","juice","jump","jungle","junior","junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney","kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife","knock","know","lab","label","labor","ladder","lady","lake","lamp","language","laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit","layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal","legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level","liar","liberty","library","license","life","lift","light","like","limb","limit","link","lion","liquid","list","little","live","lizard","load","loan","lobster","local","lock","logic","lonely","long","loop","lottery","loud","lounge","love","loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad","magic","magnet","maid","mail","main","major","make","mammal","man","manage","mandate","mango","mansion","manual","maple","marble","march","margin","marine","market","marriage","mask","mass","master","match","material","math","matrix","matter","maximum","maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt","member","memory","mention","menu","mercy","merge","merit","merry","mesh","message","metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor","minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile","model","modify","mom","moment","monitor","monkey","monster","month","moon","moral","more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie","much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual","myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature","near","neck","need","negative","neglect","neither","nephew","nerve","nest","net","network","neutral","never","news","next","nice","night","noble","noise","nominee","noodle","normal","north","nose","notable","note","nothing","notice","novel","now","nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe","obtain","obvious","occur","ocean","october","odor","off","offer","office","often","oil","okay","old","olive","olympic","omit","once","one","onion","online","only","open","opera","opinion","oppose","option","orange","orbit","orchard","order","ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output","outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact","paddle","page","pair","palace","palm","panda","panel","panic","panther","paper","parade","parent","park","parrot","party","pass","patch","path","patient","patrol","pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen","penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo","phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot","pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate","play","please","pledge","pluck","plug","plunge","poem","poet","point","polar","pole","police","pond","pony","pool","popular","portion","position","possible","post","potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare","present","pretty","prevent","price","pride","primary","print","priority","prison","private","prize","problem","process","produce","profit","program","project","promote","proof","property","prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin","punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle","pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit","raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp","ranch","random","range","rapid","rare","rate","rather","raven","raw","razor","ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle","reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release","relief","rely","remain","remember","remind","remove","render","renew","rent","reopen","repair","repeat","replace","report","require","rescue","resemble","resist","resource","response","result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib","ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot","ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket","romance","roof","rookie","room","rose","rotate","rough","round","route","royal","rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness","safe","sail","salad","salmon","salon","salt","salute","same","sample","sand","satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter","scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script","scrub","sea","search","season","seat","second","secret","section","security","seed","seek","segment","select","sell","seminar","senior","sense","sentence","series","service","session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell","sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop","short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side","siege","sight","sign","silent","silk","silly","silver","similar","simple","since","sing","siren","sister","situate","six","size","skate","sketch","ski","skill","skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight","slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth","snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda","soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry","sort","soul","sound","soup","source","south","space","spare","spatial","spawn","speak","special","speed","spell","spend","sphere","spice","spider","spike","spin","spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring","spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp","stand","start","state","stay","steak","steel","stem","step","stereo","stick","still","sting","stock","stomach","stone","stool","story","stove","strategy","street","strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway","success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny","sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey","suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim","swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag","tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi","teach","team","tell","ten","tenant","tennis","tent","term","test","text","thank","that","theme","then","theory","there","they","thing","this","thought","three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber","time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler","toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool","tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist","toward","tower","town","toy","track","trade","traffic","tragic","train","transfer","trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick","trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust","truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle","twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella","unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform","unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade","uphold","upon","upper","upset","urban","urge","usage","use","used","useful","useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van","vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue","verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory","video","view","village","vintage","violin","virtual","virus","visa","visit","visual","vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage","wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash","wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather","web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat","wheel","when","where","whip","whisper","wide","width","wife","wild","will","win","window","wine","wing","wink","winner","winter","wire","wisdom","wise","wish","witness","wolf","woman","wonder","wood","wool","word","work","world","worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year","yellow","you","young","youth","zebra","zero","zone","zoo"],E=new f.default(f.default.givenProvider),F=function(){function e(e,t,a,r){if(this.account_passwords={},this.account_ciphertexts={},this.disable_address=!1,this.account_signatures="",this.setting_path=e,this.account_labels=t,0!==t.length){if(a){if(t.length!==a.length)throw new Error("account_labels should have same length for account_passwords");for(var n=0;n<t.length;n++){if(!this.checkPassword(t[n],a[n].trim()))throw new Error("account_passwords is not correct");this.account_passwords[t[n]]=a[n].trim()}}r&&(this.disable_address=r),this.reload()}}return e.prototype.isLogin=function(e){return e in this.account_passwords},e.prototype.reloadAccount=function(){this.reload()},e.prototype.getAccountLabel=function(e){var t=null;for(var a in this.account_ciphertexts)a.toLocaleLowerCase().includes(e.toLocaleLowerCase())&&(t=a);return null===t?null:{account_address:t,account_label:this.account_ciphertexts[t].account_label}},e.prototype.login=function(e,t){return this.checkPassword(e,t)?(this.account_passwords[e]=t,this.account_labels.push(e),this.reload(),{status:!0,output:"Login success"}):{status:!1,output:"Password is not correct"}},e.prototype.getAccounts=function(e){var t=this.getAccountSignature();t!==this.account_signatures&&(this.account_signatures=t,this.reload());for(var a=Object.keys(this.account_ciphertexts),r=[],n=0;n<a.length;n++)this.getAccountChainType(a[n])===e&&r.push(a[n]);return r},e.prototype.checkAccountLabelIsExist=function(e){return A(this.setting_path,[e])},e.prototype.checkAccountIsExist=function(e){return(e=this.getAccountChecksumAddress(e))in this.account_ciphertexts||(this.reload(),e in this.account_ciphertexts)},e.prototype.checkPassword=function(e,t){var a=m.join(this.setting_path,"accounts/".concat(e,".json"));if(!$(a))return!1;var r,n=C(a);r="PK"===n.account_type?k({salt:t},n.data[0].ciphertexts):{slat:t,data:n.pp_ciphertexts};var s=b.SHA256(JSON.stringify(r)).toString();return n.signature===s},e.prototype.showPrivateKey=function(e){if(!this.checkAccountIsExist(e))throw new Error("Account is not exist");e=this.getAccountChecksumAddress(e);var t=this.account_ciphertexts[e],a=this.account_passwords[t.account_label];return O(t.data,a)},e.prototype.getAccountChainType=function(e){return e.startsWith("0x")&&42===e.length?"evm":/^[A-HJ-NP-Za-km-z1-9]*$/.test(e)?"solana":"unknown"},e.prototype.generatePKAccount=function(e,t,a,r,n){if(n&&this.checkAccountLabelIsExist(e))throw new Error("Account labels already exist");if(!n&&!this.account_passwords[e])throw new Error("Password is not correct");n||(a=this.account_passwords[e]);var s,o=T(t,a);try{s=this.getAccountAddressByPrivateKey(t,r)}catch(e){return{status:!1,output:e.message}}var i={address:s,data:o},c=k({salt:a},i),l={signature:b.SHA256(JSON.stringify(c)).toString(),account_type:"PK",tag:"",ciphertexts:i};return n||(this.account_passwords[e]=a,this.account_labels.push(e)),{status:!0,output:l}},e.prototype.generatePPAccount=function(e,t,a){if(this.checkAccountLabelIsExist(e))return{status:!1,output:"Account labels already exist"};var r=T(t,a),n={slat:a,data:r},s=b.SHA256(JSON.stringify(n)).toString(),o=this.getSubAccount("evm",t,0);if(!1===o.status)return{status:!1,output:o.output};var i=this.getSubAccount("solana",t,0);if(!1===i.status)return{status:!1,output:i.output};var c={signature:s,account_type:"PP",pp_ciphertexts:r,tag:"",data:[{ciphertexts:{evm:{address:o.output.address,data:T(o.output.pk,a)},solana:{address:i.output.address,data:T(i.output.pk,a)}}}]};return this.account_passwords[e]=a,this.account_labels.push(e),{status:!0,output:c}},e.prototype.generateSubAccount=function(e,t){if(!this.checkAccountLabelIsExist(e))return{status:!1,output:"Account labels not exist"};var a=m.join(this.setting_path,"accounts/".concat(e,".json")),r=C(a).pp_ciphertexts,n=O(r,this.account_passwords[e]),s=this.getSubAccount("evm",n,t);if(!1===s.status)return{status:!1,output:s.output};var o=this.getSubAccount("solana",n,t);return!1===o.status?{status:!1,output:o.output}:{status:!0,output:{evm:{address:s.output.address,data:T(s.output.pk,this.account_passwords[e])},solana:{address:o.output.address,data:T(o.output.pk,this.account_passwords[e])}}}},e.prototype.resetPassword=function(e,t){if(!this.checkAccountLabelIsExist(e))return{status:!1,output:"Account labels not exist"};if(!this.checkPassword(e,this.account_passwords[e]))return{status:!1,output:"account passwords is not correct"};var a=m.join(this.setting_path,"accounts/".concat(e,".json")),r=C(a);if("PK"===r.account_type){for(var n=r.data,s=0;s<n.length;s++){var o=n[s].ciphertexts.data,i=O(o,this.account_passwords[e]);n[s].ciphertexts.data=T(i,t)}var c=k({salt:t},r.data[0].ciphertexts);return r.signature=b.SHA256(JSON.stringify(c)).toString(),j(r,a),delete this.account_passwords[e],{status:!0,output:"Password reset successfully"}}var l=O(r.pp_ciphertexts,this.account_passwords[e]);r.pp_ciphertexts=T(l,t);var u={slat:t,data:r.pp_ciphertexts};r.signature=b.SHA256(JSON.stringify(u)).toString();var d=r.data;for(s=0;s<d.length;s++){var p=O(d[s].ciphertexts.evm.data,this.account_passwords[e]);d[s].ciphertexts.evm.data=T(p,t);var g=O(d[s].ciphertexts.solana.data,this.account_passwords[e]);d[s].ciphertexts.solana.data=T(g,t)}return j(r,a),delete this.account_passwords[e],{status:!0,output:"Password reset successfully"}},e.prototype.signTransaction=function(e,t,a){return e=this.getAccountChecksumAddress(e),this.checkAccountIsExist(e)?"unknown"===this.getAccountChainType(e)?{status:!1,output:"Chain type unknown"}:"evm"===this.getAccountChainType(e)?this.signEvmTransaction(t,a):this.signSolanaTransaction(e,a,t):{status:!1,output:"Account is not exist"}},e.prototype.sendSignedTransaction=function(e,t,a){return e=this.getAccountChecksumAddress(e),this.checkAccountIsExist(e)?"unknown"===this.getAccountChainType(e)?{status:!1,output:"Chain type unknown"}:"evm"===this.getAccountChainType(e)?this.sendEvmTransaction(t,a):this.sendSolanaTransaction(t,a):{status:!1,output:"Account is not exist"}},e.prototype.signMessage=function(e,t){return e=this.getAccountChecksumAddress(e),this.checkAccountIsExist(e)?"unknown"===this.getAccountChainType(e)?{status:!1,output:"Chain type unknown"}:"evm"===this.getAccountChainType(e)?{status:!0,output:this.signEvmMessage(t,e)}:{status:!0,output:this.signSolanaMessage(t,e)}:{status:!1,output:"Account is not exist"}},e.prototype.simulateTransaction=function(e,t,a){return S(this,void 0,void 0,function(){var r,n,s;return x(this,function(o){switch(o.label){case 0:return r=new i.Connection(t),n=this.showPrivateKey(e),s=i.Keypair.fromSecretKey(w.decode(n)),[4,_(r.simulateTransaction.bind(r),[a,[s]])];case 1:return[2,o.sent()]}})})},e.prototype.signEvmTransaction=function(e,t){return S(this,void 0,void 0,function(){var a,r,n,s;return x(this,function(o){switch(o.label){case 0:return this.account_passwords?(a=e.from,e.gas?[3,2]:[4,new P(t).getEvmGasLimit(e,t)]):[2,{status:!1,output:"Please set password first"}];case 1:if(!(r=o.sent()).status)return[2,r];e.gas=r.output,o.label=2;case 2:return e.gasPrice?[3,4]:[4,new P(t).getEvmGasPrice()];case 3:if(!(r=o.sent()).status)return[2,r];e.gasPrice=r.output,o.label=4;case 4:return n=this.showPrivateKey(a),s=new f.default(t),[4,_(s.eth.accounts.signTransaction.bind(s.eth.accounts),[e,n])];case 5:return[2,o.sent()]}})})},e.prototype.sendEvmTransaction=function(e,t){return S(this,void 0,void 0,function(){var a;return x(this,function(r){switch(r.label){case 0:return a=new f.default(t),[4,_(a.eth.sendSignedTransaction.bind(a.eth),[e])];case 1:return[2,r.sent()]}})})},e.prototype.signSolanaTransaction=function(e,t,a){return S(this,void 0,void 0,function(){var r,n,s,o,l;return x(this,function(u){switch(u.label){case 0:return r=this.showPrivateKey(e),n=i.Keypair.fromSecretKey(w.decode(r)),s=new c.Wallet(n),"recentBlockhash"in a&&a.recentBlockhash?[3,2]:(o=new i.Connection(t),[4,_(o.getLatestBlockhash.bind(o),[])]);case 1:if(!(l=u.sent()).status)return[2,{status:!1,output:"Failed to get latest blockhash"}];a.recentBlockhash=l.output.blockhash,u.label=2;case 2:return a.feePayer=s.publicKey,[4,_(s.signTransaction.bind(s),[a])];case 3:return[2,u.sent()]}})})},e.prototype.sendSolanaTransaction=function(e,t){return S(this,void 0,void 0,function(){var a;return x(this,function(r){switch(r.label){case 0:return a=new i.Connection(t),[4,_(a.sendRawTransaction.bind(a),[e.serialize()])];case 1:return[2,r.sent()]}})})},e.prototype.signEvmMessage=function(e,t){var a=this.showPrivateKey(t);return E.eth.accounts.sign(e,a).signature},e.prototype.signSolanaMessage=function(e,t){var a=this.showPrivateKey(t),r=y.sign.detached(new Uint8Array(e.match(/.{1,2}/g).map(function(e){return parseInt(e,16)})),w.decode(a));return w.encode(r)},e.prototype.checkIsDisableAddress=function(e,t){if(!e||!this.disable_address)return!1;for(var a=e.length,r=0;r<a;r++){var n=e[r].from,s=e[r].to;if(t>=n&&t<=s)return!0}return!1},e.prototype.reload=function(){if(this.account_labels=I(this.setting_path,this.account_labels),!A(this.setting_path,this.account_labels))throw new Error("Account labels not exist");for(var e={},t=this.account_labels.length,a=0;a<t;a++){var r=m.join(this.setting_path,"accounts/".concat(this.account_labels[a],".json"));if(h.existsSync(r)){var n=JSON.parse(h.readFileSync(r,"utf8"));if("PK"!==n.account_type){var s=n.data.length,o=n.disabled_slots;for(l=0;l<s;l++)this.checkIsDisableAddress(o,l)||(e[n.data[l].ciphertexts.evm.address]={account_label:this.account_labels[a],data:n.data[l].ciphertexts.evm.data},e[n.data[l].ciphertexts.solana.address]={account_label:this.account_labels[a],data:n.data[l].ciphertexts.solana.data})}else{var i=n.data;if(!i)continue;for(var c=i.length,l=0;l<c;l++)e[i[l].ciphertexts.address]={account_label:this.account_labels[a],data:i[l].ciphertexts.data}}}}this.account_ciphertexts=e},e.prototype.getAccountChecksumAddress=function(e){return"evm"===this.getAccountChainType(e)&&(e=E.utils.toChecksumAddress(e)),e},e.prototype.getAccountAddressByPrivateKey=function(e,t){return"evm"===this.getNetworkTypeByChainId(t)?E.eth.accounts.privateKeyToAccount(e).address:i.Keypair.fromSecretKey(w.decode(e)).publicKey.toBase58()},e.prototype.getNetworkTypeByChainId=function(e){return"901"===e||"902"===e||"903"===e?"solana":"evm"},e.prototype.getSubAccount=function(e,t,a){if(!function(e){var t=e.split(/\s+/g),a=t.length;if(12!==a&&24!==a)return!1;for(var r=0;r<a;r++)if(!B.includes(t[r]))return!1;return!0}(t))return{status:!1,output:"Please set correct mnemonic"};if("solana"===e){var r=v.mnemonicToSeedSync(t),n=d.HDKey.fromMasterSeed(r),s=i.Keypair.fromSeed(n.derive("m/44'/501'/".concat(a,"'/0'")).privateKey);return{status:!0,output:{address:s.publicKey.toBase58(),pk:w.encode(s.secretKey)}}}if("evm"===e){r=v.mnemonicToSeedSync(t);var o=(n=u.hdkey.fromMasterSeed(r)).derivePath("m/44'/60'/0'/0").deriveChild(a).getWallet();return{status:!0,output:{address:E.utils.toChecksumAddress(o.getAddressString()),pk:o.getPrivateKeyString()}}}return{status:!1,output:"Unknown chain type"}},e.prototype.getAccountSignature=function(){for(var e=this.account_labels.length,t=[],a=0;a<e;a++){var r=m.join(this.setting_path,"accounts/".concat(this.account_labels[a],".json")),n=h.readFileSync(r,"utf8");t.push(n)}return b.MD5(JSON.stringify(t)).toString()},e}(),L=Ha,q=function(){function e(e,t,a,r){this.account=new F(e,t,a,r)}return e.version=L.version,e}();e.WativeCore=q,Object.defineProperty(e,"__esModule",{value:!0})}(t,N.default,C.default,O.default,q.default,K.default,R.default,B.default,M.default,D.default,z.default,U.default)}(0,Ua.exports);class Ja{constructor(e,t){this.runningServices=new Map,this.configManager=new Aa(e,t),this.pidDir=I.join(this.configManager.getKeystorePath(),"ssh","pids"),this.ensurePidDir(),this.setupLogger()}ensurePidDir(){A.existsSync(this.pidDir)||A.mkdirSync(this.pidDir,{recursive:!0})}async isPortInUse(e,t="127.0.0.1"){return new Promise(a=>{const r=H.createServer();r.listen(e,t,()=>{r.once("close",()=>{a(!1)}),r.close()}),r.on("error",e=>{"EADDRINUSE"===e.code?a(!0):a(!1)})})}getPidFilePath(e){return I.join(this.pidDir,`${e}.pid`)}writePidFile(e,t){const a=this.getPidFilePath(e);A.writeFileSync(a,t.toString())}readPidFile(e){const t=this.getPidFilePath(e);if(!A.existsSync(t))return null;try{const e=A.readFileSync(t,"utf8").trim();return parseInt(e,10)}catch(e){return null}}removePidFile(e){const t=this.getPidFilePath(e);A.existsSync(t)&&A.unlinkSync(t)}isProcessRunning(e){try{return process.kill(e,0),!0}catch(e){return!1}}async startService(e,t){if(this.runningServices.has(e))throw new Error(`Service '${e}' is already running.`);const a=this.configManager.loadServiceConfig(e);if(await this.isPortInUse(a.ssh.port,a.ssh.listen)){const t=`Port ${a.ssh.port} on ${a.ssh.listen} is already in use. Cannot start SSH service '${e}'.`;throw this.logger.error(t),console.error(`Error: ${t}`),new Error(t)}this.logger.info(`Port ${a.ssh.port} on ${a.ssh.listen} is available for service '${e}'`);const r=t||await this.promptForPasswords(a.keystore.allowed_keystores),n=await this.configManager.validateKeystorePasswords(a.keystore.allowed_keystores,r),s=Object.entries(n).filter(([e,t])=>!t).map(([e,t])=>e);if(s.length>0)throw new Error(`Invalid passwords for keystores: ${s.join(", ")}`);const o=this.createServerInstance(a,r);o.listen(a.ssh.listen,a.ssh.port),this.writePidFile(e,process.pid),this.logger.info(`SSH service '${e}' started on ${a.ssh.listen}:${a.ssh.port}`),console.log(`SSH service '${e}' is now running in the background on ${a.ssh.listen}:${a.ssh.port}`);const i={config:a,passwords:r,server:o};this.runningServices.set(e,i),this.setupServiceLogger(e)}async stopService(e){const t=this.runningServices.get(e),a=this.readPidFile(e),r=I.join(this.pidDir,`${e}-daemon.pid`),n=I.join(this.pidDir,`${e}-watcher.pid`);let s=null,o=null;if(A.existsSync(r)){const e=A.readFileSync(r,"utf8").trim();e&&(s=parseInt(e))}if(A.existsSync(n)){const e=A.readFileSync(n,"utf8").trim();e&&(o=parseInt(e))}if(t)t.server&&t.server.close&&t.server.close(),this.runningServices.delete(e);else if(o&&this.isProcessRunning(o))try{process.kill(o,"SIGTERM"),setTimeout(()=>{this.isProcessRunning(o)&&process.kill(o,"SIGKILL");try{A.existsSync(n)&&A.unlinkSync(n),A.existsSync(r)&&A.unlinkSync(r)}catch(e){}},5e3)}catch(e){if(s&&this.isProcessRunning(s))try{process.kill(s,"SIGTERM"),setTimeout(()=>{this.isProcessRunning(s)&&process.kill(s,"SIGKILL")},5e3)}catch(e){}try{A.existsSync(n)&&A.unlinkSync(n),A.existsSync(r)&&A.unlinkSync(r)}catch(e){}}else if(s&&this.isProcessRunning(s))try{process.kill(s,"SIGTERM"),setTimeout(()=>{this.isProcessRunning(s)&&process.kill(s,"SIGKILL")},5e3),A.existsSync(r)&&A.unlinkSync(r)}catch(e){}else{if(!a||!this.isProcessRunning(a))throw new Error(`Service '${e}' is not running.`);try{process.kill(a,"SIGTERM"),setTimeout(()=>{this.isProcessRunning(a)&&process.kill(a,"SIGKILL")},5e3)}catch(e){}}this.removePidFile(e),this.logger.info(`SSH service '${e}' stopped.`)}async restartService(e,t){this.runningServices.has(e)&&await this.stopService(e),await this.startService(e,t)}getRunningServices(){return Array.from(this.runningServices.keys())}getServiceConfig(e){return this.configManager.loadServiceConfig(e)}getServiceStatus(e){if(this.runningServices.has(e))return"running";try{this.configManager.loadServiceConfig(e);const t=I.join(this.pidDir,`${e}-daemon.pid`);if(A.existsSync(t)){const e=A.readFileSync(t,"utf8").trim();if(e){const a=parseInt(e);if(this.isProcessRunning(a))return"running";A.unlinkSync(t)}}const a=this.readPidFile(e);return a&&this.isProcessRunning(a)?"running":(a&&this.removePidFile(e),"stopped")}catch(e){return"not_found"}}async stopAllServices(){const e=Array.from(this.runningServices.keys());for(const t of e)await this.stopService(t)}async createService(e,t,a,r,n){return this.configManager.createServiceConfig(e,t,a,r,n)}async removeService(e){this.runningServices.has(e)&&await this.stopService(e),this.configManager.removeServiceConfig(e),this.logger.info(`Service '${e}' removed.`)}listServices(){return this.configManager.listServiceConfigs().map(e=>{const t=this.getServiceStatus(e);let a,r;try{const t=this.configManager.loadServiceConfig(e);a=t.ssh.port,r=t.description}catch(e){}return{name:e,status:t,port:a,description:r}})}updateServiceKeystores(e,t){this.configManager.updateServiceConfig(e,{keystore:{path:this.configManager.loadServiceConfig(e).keystore.path,allowed_keystores:t}})}async promptForPasswords(e){const t={};for(const a of e){let e,r=!1,n=0;const s=3;for(;!r&&n<s;){e=await la(`Enter password for keystore [${a}]`);try{const o=this.configManager.getKeystorePath();if(r=new Ua.exports.WativeCore(o,[a]).account.checkPassword(a,e),r){t[a]=e;break}if(n++,!(n<s))throw new Error(`Failed to authenticate keystore [${a}] after ${s} attempts.`);console.log(`Invalid password for ${a}`)}catch(e){if(n++,!(n<s))throw new Error(`Failed to authenticate keystore [${a}] after ${s} attempts: ${e.message}`);console.log("Error validating password for keystore")}}}return t}createServerInstance(e,t){const a=e.clients;if(0===a.length)throw new Error("No clients configured for service");if(a.length>1)throw new Error("Only one client is supported for this service");const r=JSON.parse(a[0]),n=[r.name],s=[r.public_key_path],o=[r.allowed_keystores],i=e.keystore.allowed_keystores;if(0===i.length)throw new Error("No keystores configured for service");let c=[];for(const e of i)c.push(t[e]);return new Da(e.server_keys.private_key_path,e.server_keys.passphrase,n,s,o,e.keystore.path,i,c)}async showLogs(e,t=50,a=!1){const r=process.env.HOME+"/.wative/logs";let n;if(n=e?I.join(r,`${e}.log`):I.join(r,"service_manager.log"),!A.existsSync(n))throw new Error(`Log file not found: ${n}`);const s=a?["-f",`-n${t}`,n]:[`-n${t}`,n],o=p.spawn("tail",s,{stdio:["ignore","inherit","inherit"]});return a?(process.on("SIGINT",()=>{o.kill("SIGTERM"),process.exit(0)}),new Promise((e,t)=>{o.on("close",a=>{0===a?e():t(new Error(`tail process exited with code ${a}`))})})):new Promise((e,t)=>{o.on("close",a=>{0===a?e():t(new Error(`tail process exited with code ${a}`))})})}setupLogger(){const e=process.env.HOME+"/.wative/logs";A.existsSync(e)||A.mkdirSync(e,{recursive:!0}),L.configure({appenders:{file:{type:"file",filename:I.join(e,"service_manager.log"),maxLogSize:10485760,backups:3,compress:!0,keepFileExt:!0,layout:{type:"pattern",pattern:"%d{yyyy-MM-dd hh:mm:ss.SSS} [%p] %c - %m"},encoding:"utf-8"},console:{type:"console"}},categories:{default:{appenders:["file","console"],level:"info"}}}),this.logger=L.getLogger("service_manager"),this.logger.level="info"}setupServiceLogger(e){const t=process.env.HOME+"/.wative/logs";A.existsSync(t)||A.mkdirSync(t,{recursive:!0});const a=I.join(t,`${e}.log`);this.cleanupOldLogs(t),L.configure({appenders:{file:{type:"file",filename:I.join(t,"service_manager.log"),maxLogSize:10485760,backups:3,compress:!0,keepFileExt:!0,layout:{type:"pattern",pattern:"%d{yyyy-MM-dd hh:mm:ss.SSS} [%p] %c - %m"},encoding:"utf-8"},console:{type:"console"},[`${e}_file`]:{type:"file",filename:a,maxLogSize:10485760,backups:3,compress:!0,keepFileExt:!0,layout:{type:"pattern",pattern:"%d{yyyy-MM-dd hh:mm:ss.SSS} [%p] %c - %m"},encoding:"utf-8"}},categories:{default:{appenders:["file","console"],level:"info"},[e]:{appenders:[`${e}_file`],level:"info"}}})}cleanupOldLogs(e){try{const t=A.readdirSync(e),a=new Date;a.setDate(a.getDate()-3),t.forEach(t=>{const r=I.join(e,t);A.statSync(r).mtime<a&&t.endsWith(".log")&&(A.unlinkSync(r),this.logger.info(`Deleted old log file: ${t}`))})}catch(e){this.logger.warn(`Failed to cleanup old logs: ${e}`)}}}class Ga{constructor(e){this.config=e}async executeCommand(e){return this.config.useRemoteServer?this.executeCommandThroughRemoteServer(e):new Promise((a,r)=>{const n=new g.Client;n.on("ready",()=>{n.exec(e,(e,t)=>{if(e)return n.end(),r(e);let s="",o="";t.on("close",(e,t)=>{n.end(),0===e?a(s):r(new Error(`Command failed with code ${e}: ${o||s}`))}).on("data",e=>{s+=e.toString()}).stderr.on("data",e=>{o+=e.toString()})})}).on("error",e=>{r(e)});const s=this.config.clientAuth,o={host:this.config.host,port:this.config.port,username:s.username,privateKey:t.readFileSync(s.privateKeyPath),passphrase:s.passphrase};n.connect(o)})}async executeCommandThroughRemoteServer(e){return new Promise((a,r)=>{const n=new g.Client;n.on("ready",()=>{n.forwardOut("127.0.0.1",0,this.config.host,this.config.port,(s,o)=>{if(s)return n.end(),r(s);const i=new g.Client;i.on("ready",()=>{i.exec(e,(e,t)=>{if(e)return i.end(),n.end(),r(e);let s="",o="";t.on("close",(e,t)=>{i.end(),n.end(),0===e?a(s):r(new Error(`Command failed with code ${e}: ${o||s}`))}).on("data",e=>{s+=e.toString()}).stderr.on("data",e=>{o+=e.toString()})})}).on("error",e=>{n.end(),r(e)});const c=this.config.clientAuth,l={sock:o,username:c.username,privateKey:t.readFileSync(c.privateKeyPath),passphrase:c.passphrase};i.connect(l)})}).on("error",e=>{r(e)});const s={host:this.config.remoteServer.host,port:this.config.remoteServer.port||22,username:this.config.remoteServer.auth.username,privateKey:t.readFileSync(this.config.remoteServer.auth.privateKeyPath),passphrase:this.config.remoteServer.auth.passphrase};n.connect(s)})}async sendRequest(e){try{const t=JSON.stringify(e),a=await this.executeCommand(t),r=JSON.parse(a);if(!r.status)throw new Error(r.msg||"Request failed");return r}catch(e){if(e instanceof Error)throw new Error(`SSH request failed: ${e.message}`);throw e}}async getRootAccount(e,t){const a={method:"get_root_account",keystoreId:e,chainId:t};return(await this.sendRequest(a)).data}async getSubAccount(e,t,a,r){const n={method:"get_sub_account",params:{keystoreId:e,chainId:t,startIndex:a,endIndex:r}};return(await this.sendRequest(n)).data}async signTransaction(e,t){const a={method:"sign",params:{txParams:e,rpcUrl:t}};return(await this.sendRequest(a)).data}async signAndSendTransaction(e,t){const a={method:"sign_and_send",params:{txParams:e,rpcUrl:t}};return(await this.sendRequest(a)).data}async signSolanaTransaction(e,t,a){const r={method:"solana_sign",params:{txParams:e,rpcUrl:t,priority_fee:a}};return(await this.sendRequest(r)).data}async sendSignedSolanaTransaction(e,t){const a={method:"solana_send",params:{txParams:e,rpcUrl:t}};return(await this.sendRequest(a)).data}async signMessage(e,t){const a={method:"sign_message",params:{account:e,message:t}};return(await this.sendRequest(a)).data}async signTypedData(e,t,a,r,n){const s={method:"sign_typed_data",params:{account:e,domain:t,types_name:a,types:r,message:n}};return(await this.sendRequest(s)).data}}require("dotenv").config();const Wa=async e=>{const t=new Ja;try{if(!e)throw new Error("Configuration name is required. Please specify a configuration name.");console.log(`Starting SSH service with configuration: ${e}`),await t.startService(e),console.log("SSH service started successfully."),process.on("SIGINT",async()=>{console.log("\nShutting down SSH services..."),await t.stopAllServices(),process.exit(0)}),process.on("SIGTERM",async()=>{console.log("\nShutting down SSH services..."),await t.stopAllServices(),process.exit(0)})}catch(e){console.error(`Failed to start SSH service: ${e.message}`),process.exit(1)}},Va=process.argv.slice(2),Za=Va.includes("--daemon"),Xa=Va.indexOf("--config"),Qa=-1!==Xa&&Va[Xa+1]?Va[Xa+1]:void 0;(Za||Qa)&&Wa(Qa).catch(e=>{console.error("Failed to start SSH service:",e),process.exit(1)}),process.on("unhandledRejection",(e,t)=>{console.log("Unhandled Rejection at:",t,"reason:",e)});var Ya=Object.freeze({__proto__:null,mainWithConfig:Wa,WativeSSHClient:Ga,createWativeSSHClient:function(e){return new Ga(e)},WativeWielderServer:Da,SSHConfigManager:Aa,checkFileExistence:Na,sleep:function(e=0){return new Promise((t,a)=>{setTimeout(()=>{t(!0)},e)})},getAndGenerateConfig:async e=>{const t="/etc/wative";A.existsSync(t)||A.mkdirSync(t),await(async()=>{const e="/etc/wative",t=I.join(e,"id_rsa_server.pub"),a=I.join(e,"id_rsa_server");A.existsSync(t)&&A.existsSync(a)||(console.log("Generating SSH key pair..."),p.execSync(`ssh-keygen -t rsa -f ${a} -N 'wative_server'`,{stdio:"inherit"}));const r=I.join(e,"id_rsa_detake.pub"),n=I.join(e,"id_rsa_detake");A.existsSync(r)&&A.existsSync(n)||(console.log("Generating SSH key pair..."),p.execSync(`ssh-keygen -t rsa -f ${n} -N 'wative_detake'`,{stdio:"inherit"}))})();const a=I.join(t,"config.ini");if(!A.existsSync(a)){const t=Le(e).accounts,r={keystore:{path:e,allowed_keystores:oa(t)},ssh:{listen:"127.0.0.1",port:5678,log:{size:10485760,backups:3}}};let n=E.stringify(r);A.writeFileSync(a,n)}return E.parse(A.readFileSync(a,"utf-8"))}});const er=new _.Command,tr=require("../package.json");let ar;er.version(tr.version).description("Wative CLI Tool"),er.command("version").description("Show the version of wative").action(()=>{console.log(`Wative CLI Tool v${tr.version}`)});const rr=()=>{if(!ar){const e=I.join(process.env.HOME||"",".wative","ssh");ar=new Ja(e)}return ar},nr=er.command("ssh").description("Manage SSH services");nr.command("start").description("Start SSH service").option("-c, --config <name>","Specify service configuration name").option("-d, --daemon","Run service in daemon mode").action(async e=>{const t=rr();try{e.config||(console.error("Error: Configuration name is required. Use -c or --config to specify a service configuration."),process.exit(1));const a=e.config,r=t.getServiceConfig(a),n=require("net"),s=async(e,t="127.0.0.1")=>new Promise(a=>{const r=n.createServer();r.listen(e,t,()=>{r.once("close",()=>{a(!1)}),r.close()}),r.on("error",e=>{"EADDRINUSE"===e.code?a(!0):a(!1)})});if(await s(r.ssh.port,r.ssh.listen)){const e=`Port ${r.ssh.port} on ${r.ssh.listen} is already in use. Cannot start SSH service '${a}'.`;console.error(`Error: ${e}`),process.exit(1)}if(console.log(`Port ${r.ssh.port} on ${r.ssh.listen} is available for service '${a}'`),e.daemon){console.log(`Starting SSH service '${a}' in daemon mode...`);const e=await t.promptForPasswords(r.keystore.allowed_keystores),n=require("crypto"),s=n.randomBytes(32),o=n.randomBytes(16),i=n.createCipheriv("aes-256-cbc",s,o);let c=i.update(JSON.stringify(e),"utf8","hex");c+=i.final("hex");const l=o.toString("hex")+":"+s.toString("hex")+":"+c;return void((e,t)=>{const a=I.join(process.env.HOME||"",".wative","logs"),r=I.join(process.env.HOME||"",".wative","ssh","pids");A.existsSync(a)||A.mkdirSync(a,{recursive:!0}),A.existsSync(r)||A.mkdirSync(r,{recursive:!0});const n=I.join(a,`${e}-daemon.log`),s=I.join(r,`${e}-daemon.pid`),o=I.join(r,`${e}-watcher.pid`),i=p.spawn("node",[I.resolve(__dirname,"daemon-watcher.js"),e,n,s,o,I.resolve(__dirname,"..")],{detached:!0,stdio:"ignore",env:{...process.env,WATIVE_ENCRYPTED_PASSWORDS:t}});A.writeFileSync(o,i.pid.toString()),i.unref(),console.log(`SSH service '${e}' daemon watcher started with PID: ${i.pid}`),console.log(`Daemon log file: ${n}`),console.log(`Watcher PID file: ${o}`)})(a,l)}if(process.env.WATIVE_DAEMON_PASSWORDS&&process.env.WATIVE_WORKER_MODE){const e=require("crypto"),t=process.env.WATIVE_DAEMON_PASSWORDS;delete process.env.WATIVE_DAEMON_PASSWORDS,delete process.env.WATIVE_WORKER_MODE;try{const r=t.split(":"),n=Buffer.from(r[0],"hex"),s=Buffer.from(r[1],"hex"),o=r[2],i=e.createDecipheriv("aes-256-cbc",s,n);let c=i.update(o,"hex","utf8");c+=i.final("utf8");const l=JSON.parse(c);console.log(`[${(new Date).toISOString()}] Worker process starting SSH service '${a}'...`);const u=rr();await u.startService(a,l);for(const e in l)l[e]=null,delete l[e];console.log(`[${(new Date).toISOString()}] SSH service '${a}' started successfully`);const d=async e=>{console.log(`[${(new Date).toISOString()}] Worker received ${e}, stopping service...`);try{await u.stopService(a),console.log(`[${(new Date).toISOString()}] Service stopped successfully`)}catch(e){console.error(`[${(new Date).toISOString()}] Error stopping service:`,e)}process.exit(0)};process.on("SIGTERM",()=>d("SIGTERM")),process.on("SIGINT",()=>d("SIGINT"));const p=setInterval(async()=>{try{const e=await u.getServiceStatus(a);"running"!==e&&(console.log(`[${(new Date).toISOString()}] Service status changed to: ${e}`),"stopped"===e&&(console.log(`[${(new Date).toISOString()}] Service stopped unexpectedly, exiting worker...`),clearInterval(p),process.exit(1)))}catch(e){console.error(`[${(new Date).toISOString()}] Error checking service status:`,e)}},3e4),g=setInterval(()=>{},6e4),h=()=>{clearInterval(p),clearInterval(g)};process.on("exit",h)}catch(e){console.error(`[${(new Date).toISOString()}] Worker process error:`,e),process.exit(1)}return}{await t.startService(a),console.log(`SSH service '${a}' started successfully`),process.on("SIGINT",async()=>{console.log("\nReceived SIGINT, stopping services..."),await t.stopAllServices(),process.exit(0)}),process.on("SIGTERM",async()=>{console.log("\nReceived SIGTERM, stopping services..."),await t.stopAllServices(),process.exit(0)});const e=setInterval(()=>{"running"!==t.getServiceStatus(a)&&(console.log(`Service ${a} is no longer running, exiting...`),clearInterval(e),process.exit(1))},5e3);process.stdin.resume()}}catch(e){console.error(`Error: ${e instanceof Error?e.message:String(e)}`),process.exit(1)}}),nr.command("stop").description("Stop SSH service").option("-c, --config <name>","Specify service configuration name").action(async e=>{const t=rr();try{e.config||(console.error("Error: Configuration name is required. Use -c or --config to specify a service configuration."),process.exit(1)),await t.stopService(e.config),console.log(`SSH service '${e.config}' stopped successfully`)}catch(e){console.error(`Error: ${e instanceof Error?e.message:String(e)}`),process.exit(1)}}),nr.command("restart").description("Restart SSH service").option("-c, --config <name>","Specify service configuration name").action(async e=>{const t=rr();try{e.config||(console.error("Error: Configuration name is required. Use -c or --config to specify a service configuration."),process.exit(1)),await t.restartService(e.config),console.log(`SSH service '${e.config}' restarted successfully`)}catch(e){console.error(`Error: ${e instanceof Error?e.message:String(e)}`),process.exit(1)}}),nr.command("create").description("Create new SSH service configuration interactively").action(async()=>{const e=require("readline"),t=require("fs"),a=require("path"),r=e.createInterface({input:process.stdin,output:process.stdout}),n=e=>new Promise(t=>{r.question(e,t)});try{console.log("SSH create command started...");const e=a.join(process.env.HOME||"",".wative/ssh"),r=(await n(`SSH storage located in (default: ${e}): `)).trim()||e,s=a.join(process.env.HOME||"",".wative"),o=(await n(`Keystore storage located in (default: ${s}): `)).trim()||s,i=new Aa(r,o);let c,l,u,d;for(;;)if(c=await n("Enter service name: "),c.trim())try{i.loadServiceConfig(c),console.log("Service name already exists, please enter a different name")}catch(e){break}else console.log("Service name cannot be empty");for(;;){const e=await n("Enter port number: ");if(l=parseInt(e),isNaN(l)||l<1024||l>65535){console.log("Port number must be between 1024-65535");continue}const t=i.listServiceConfigs();let a=!1;for(const e of t)try{if(i.loadServiceConfig(e).ssh.port===l){a=!0;break}}catch(e){}if(!a)break;console.log(`Port ${l} is already in use by another service, please enter a different port`)}for(;;){const e=await n("Enter allowed keystore list (comma separated): ");if(!e.trim()){console.log("Keystore list cannot be empty");continue}if(u=e.split(",").map(e=>e.trim()).filter(e=>e),0===u.length){console.log("At least one valid keystore is required");continue}const r=a.join(o,"accounts");let s=!0;for(const e of u){const n=a.join(r,`${e}.json`);if(!t.existsSync(n)){console.log(`Keystore '${e}' does not exist`),s=!1;break}}if(s){console.log("All keystores verified to exist");break}console.log("Please re-enter valid keystore list")}for(;d=await n("Enter remote client name: "),!d.trim();)console.log("Client name cannot be empty");const p=a.join(r,"conf.d",c);t.existsSync(p)||t.mkdirSync(p,{recursive:!0});const g=a.join(p,`${d}.pub`);for(console.log("\nPlease place the remote client's public key file at the following path:"),console.log(`${g}`),console.log("\nPress Enter to continue after placing the file...");;){if(await n(""),t.existsSync(g)){console.log("Client public key file found");break}console.log("Client public key file not found, please confirm the file is correctly placed and press Enter again")}const h=await n("Enter service description (optional): ");console.log("\nCreating SSH service configuration...");const m=await i.createServiceConfig(c,l,u,d,h||void 0);console.log("\nNote: Passwords will be requested when starting the service."),console.log(`\nSSH service configuration '${c}' created successfully!`),console.log(`Port: ${l}`),console.log(`Allowed keystores: ${u.join(", ")}`),console.log(`Client name: ${d}`),console.log(`Server private key: ${m.server_keys.private_key_path}`),console.log(`Client public key: ${g}`)}catch(e){console.error(`Error: ${e instanceof Error?e.message:String(e)}`),process.exit(1)}finally{r.close()}}),nr.command("remove").description("Remove SSH service configuration").option("-c, --config <name>","Service configuration name").action(async e=>{const t=rr();try{e.config||(console.error("Error: Configuration name is required for remove command"),process.exit(1)),await t.removeService(e.config),console.log(`SSH service configuration '${e.config}' removed successfully`)}catch(e){console.error(`Error: ${e instanceof Error?e.message:String(e)}`),process.exit(1)}}),nr.command("list").description("List all SSH service configurations").action(async()=>{const e=new Aa,t=new Ja,a=e.listServiceConfigs();if(0!==a.length){console.log("SSH Service Configurations:");for(const r of a)try{const a=e.loadServiceConfig(r),n=t.getServiceStatus(r);console.log(` - ${r}: ${a.description||"No description"} (${n})`)}catch(e){const a=t.getServiceStatus(r);console.log(` - ${r}: Configuration error (${a})`)}}else console.log("No SSH service configurations found.")}),nr.command("status").description("Show SSH service status").option("-c, --config <name>","Service configuration name").action(async e=>{const t=rr();try{if(e.config){const a=t.getServiceStatus(e.config);console.log(`SSH service '${e.config}' status: ${a}`)}else{const e=t.listServices();if(0===e.length)return void console.log("No SSH service configurations found");console.log("SSH Service Status:"),e.forEach(e=>{const a=t.getServiceStatus(e.name);console.log(` - ${e.name}: ${a}`)})}}catch(e){console.error(`Error: ${e instanceof Error?e.message:String(e)}`),process.exit(1)}}),nr.command("log").description("Show SSH service logs").option("-c, --config <name>","Service configuration name").option("-n, --lines <number>","Number of lines to show (default: 50)","50").option("-f, --follow","Follow log output").action(async e=>{const t=rr();try{const a=parseInt(e.lines)||50;await t.showLogs(e.config,a,e.follow)}catch(e){console.error(`Error: ${e instanceof Error?e.message:String(e)}`),process.exit(1)}}),er.command("cmd").description("Start wallet-cli shell").action(async()=>{try{p.execSync("wallet-cli",{stdio:"inherit"})}catch(e){}}),(require.main===module||process.argv[1]&&process.argv[1].includes("bin/wative.js"))&&er.parse(process.argv);const{WativeCore:sr}=require("wative-core"),or=require("../package.json");require("events").EventEmitter.defaultMaxListeners=0;process.on("unhandledRejection",(e,t)=>{console.log("Unhandled Rejection at:",t,"reason:",e)}),require.main===module&&(async()=>{console.log("version:",or.version),Xt();const e=await Qt();await Qe(e),Pa(e);const t=I.resolve(e,"network.json"),a=JSON.parse(A.readFileSync(t,"utf8"));let r=oa(a.accounts);const n=new sr(e,r,null,!0);await $a(e,n)})().then(()=>process.exit(0)).catch(e=>{console.log(e.message),process.exit(1)}),e.DEFAULT_NETWORK=ue,e.GasUtil=Se,e.MNEMONIC_WORDS=le,e.SOLANA_CHAIN_IDS=de,e.SSH=Ya,e.accountBalanceLog=async(e,t,a,r)=>{let n;n="PK"===qe(a,e).account_type?ht(a,e,t):mt(a,e);const s=await wt(n,a,r);s.status,console.log(Xe.green(` Address No: #${t}\n Network: ${r}\n ${s.output}`))},e.accountIndexOrAddressValidator=Gt,e.accountSetting=Ze,e.addAsset=It,e.addNetwork=at,e.addToken=Nt,e.addrValidator=Mt,e.batchGetKeystoreSlugByAccountName=oa,e.batchGetTokenBalance=jt,e.batchHasTokenBalance=ce,e.batchUpdateUserTokenBalance=async(e,t,a,r,n)=>{for(let s=0;s<a.length;s++){let o=a[s];await se([t],o,e,r,n)}},e.chainAddressValidator=Wt,e.checkFileExistence=ya,e.chunkArray=(e,t)=>{let a=[];for(let r=0;r<e.length;r+=t)a.push(e.slice(r,r+t));return a},e.confirmSomething=pa,e.createNetwork=Qe,e.deleteTokenBalance=ie,e.editorSomething=ga,e.enhancedBalanceDisplay=lt,e.excutePromiseFunction=ma,e.expandAmountValidator=Ht,e.formatAddr=va,e.gasValidator=zt,e.getAccountAddress=ht,e.getAccountBalance=wt,e.getAccountBalanceInEvm=W,e.getAccountBalanceInSolana=V,e.getAccountChainType=fa,e.getAccountIndex=Kt,e.getAccountIndexByKeystoreSlug=qt,e.getAccountInfo=qe,e.getAccountInfoInSolana=ne,e.getAccountName=ia,e.getAccountNameByKeystoreSlug=na,e.getAccountRange=Lt,e.getAssetList=xt,e.getAssetListByTokenName=_t,e.getBatchAccountBalance=Tt,e.getChainId=Yt,e.getChainIdByEvm=G,e.getChainType=ge,e.getCodeInEvm=ee,e.getColor=ra,e.getDefaultNetworkByAddress=vt,e.getEvmNetworks=bt,e.getKeystorePath=Qt,e.getKeystoreSlugByAccountName=sa,e.getLatestBlockhash=re,e.getMulticallAddress=ta,e.getNativeTokenDecimals=pe,e.getNetworkInfo=Le,e.getNetworkInfoByName=gt,e.getNetworkTypeByName=pt,e.getPKAccountAddress=mt,e.getPrioritizationFee=ae,e.getRpcUrl=ea,e.getShowTokenList=it,e.getStatus=kt,e.getSymbol=aa,e.getTokenBalance=oe,e.getTokenBalanceInEvm=Q,e.getTokenBalanceInSolana=Y,e.getTokenInfoInEvm=Z,e.getTokenInfoInSolana=X,e.getTransferTokenData=te,e.hexValidator=ha,e.importMaskedPassphrase=ua,e.inputMaskedPassword=ca,e.inputPassword=da,e.inputPasswordWithoutValidator=la,e.inputSomething=Ft,e.isEvmAddress=me,e.isSolanaAddress=he,e.lastAccountNoValidator=Jt,e.listWithLazyBalanceLoading=_a,e.loginIn=Re,e.numberValidator=Dt,e.passphraseValidator=Ut,e.program=er,e.removeNetwork=tt,e.saveAccountInfo=Ke,e.saveAsset=At,e.selectCheckboxSomething=Zt,e.selectDefaultNetwork=dt,e.selectFlag=ot,e.selectOrEditNetwork=Ye,e.selectSomething=Vt,e.selectToolsOptions=Ie,e.sendSolanaRawTransaction=Pe,e.showAllAccounts=ft,e.showAssets=Ct,e.showAssetsDetail=Pt,e.showAvailableNetworks=rt,e.showDataview=nt,e.showIntroduction=Xt,e.showNetwork=ut,e.showTokenList=ct,e.showTools=Ce,e.sleep=wa,e.switchNetworkByAccountName=yt,e.switchPPNetwork=async(e,t,a)=>{const r=I.resolve(e,"network.json"),n=JSON.parse(A.readFileSync(r,"utf8")).networks,s=n.length;let o=qe(e,t),i=["> Back",new T.default.Separator("----------------------------------")],c=o.data[a].default_network;c&&""!==c?i.push("○ Same as the account setting"):i.push("● Same as the account setting");for(let e=0;e<s;e++){const t=n[e];let r;r=ge(t.chainId.toString())?o.data[a].ciphertexts.solana.address:o.data[a].ciphertexts.evm.address,t.name===c?i.push(`● ${r} [${t.name}]`):i.push(`○ ${r} [${t.name}]`)}const l=await Vt(i);if("> Back"===l)return;let u=i.indexOf(l);2===u?delete o.data[a].default_network:o.data[a].default_network=n[u-3].name,Ke(e,t,o);let d=o.default_network;"default_network"in o.data[a]&&""!==o.data[a].default_network&&(d=o.data[a].default_network);let p=gt(e,d);console.log(Xe.green(` Address No: #${a}\n Network: ${d}\n ${p.nativeCurrency.symbol} Balance: 0`))},e.tagValidator=Rt,e.updateBalance=se,e.updateNetwork=et,e.updateStatus=st,e.updateStorage=Pa,e.updateTokenBalanceOption=$t,Object.defineProperty(e,"__esModule",{value:!0})});