@wowok/wowok 3.0.7 → 3.0.8

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 (102) hide show
  1. package/README.md +2 -2
  2. package/dist/esm/{arb-CXTekz6P.mjs → arb-S5T4M9_4.mjs} +1 -1
  3. package/dist/esm/{call-c56KBPmQ.mjs → call-CLTpE7NH.mjs} +1 -1
  4. package/dist/esm/client/index.d.mts +1 -1
  5. package/dist/esm/client/index.mjs +1 -1
  6. package/dist/esm/{client-BYIflYp_.mjs → client-DYIgIItb.mjs} +1 -1
  7. package/dist/esm/{common-DhtZTgkX.mjs → common-DC9BAaSg.mjs} +1 -1
  8. package/dist/esm/cryptography/index.d.mts +1 -1
  9. package/dist/esm/{exception-o3XVk35a.mjs → exception-D2n4LV8F.mjs} +1 -1
  10. package/dist/esm/{fund-approval-Cee3vmP8.mjs → fund-approval-D9vwQz49.mjs} +1 -1
  11. package/dist/esm/graphql/index.d.mts +1 -1
  12. package/dist/esm/graphql/index.mjs +1 -1
  13. package/dist/esm/{graphql-DDWKR2yj.mjs → graphql-DyLuCJhh.mjs} +1 -1
  14. package/dist/esm/grpc/index.d.mts +1 -1
  15. package/dist/esm/grpc/index.mjs +1 -1
  16. package/dist/esm/{grpc-D9wyZZs1.mjs → grpc-DyL19pdw.mjs} +1 -1
  17. package/dist/esm/{index-BQOp8Peb.d.mts → index-DKne9Aij.d.mts} +116 -3
  18. package/dist/esm/index.d.mts +3 -3
  19. package/dist/esm/index.mjs +1 -1
  20. package/dist/esm/jsonRpc/index.d.mts +1 -1
  21. package/dist/esm/jsonRpc/index.mjs +1 -1
  22. package/dist/esm/keypairs/ed25519/index.d.mts +1 -1
  23. package/dist/esm/keypairs/falcon512/index.d.mts +1 -1
  24. package/dist/esm/keypairs/passkey/index.d.mts +1 -1
  25. package/dist/esm/keypairs/secp256k1/index.d.mts +1 -1
  26. package/dist/esm/keypairs/secp256r1/index.d.mts +1 -1
  27. package/dist/esm/{local-Cizo_1J5.d.mts → local-CsbLMwvo.d.mts} +12 -1
  28. package/dist/esm/messenger-CsUbfW03.mjs +1 -0
  29. package/dist/esm/messenger-api-BHzaiB8Z.mjs +1 -0
  30. package/dist/esm/multisig/index.d.mts +1 -1
  31. package/dist/esm/{proof-DN-LYZHK.mjs → proof-e283A6LF.mjs} +1 -1
  32. package/dist/esm/{received-BeCU01U-.mjs → received-BP2jW99o.mjs} +1 -1
  33. package/dist/esm/{service-JWjnxOnc.mjs → service-CF9YMK_P.mjs} +1 -1
  34. package/dist/esm/transactions/index.d.mts +1 -1
  35. package/dist/esm/util-2Fli5dww.mjs +1 -0
  36. package/dist/esm/{util-DtomxQB5.mjs → util-DGq_oxSf.mjs} +1 -1
  37. package/dist/esm/verify/index.d.mts +1 -1
  38. package/dist/esm/w/call/allocation.d.mts +1 -1
  39. package/dist/esm/w/call/allocation.mjs +1 -1
  40. package/dist/esm/w/call/arbitration.d.mts +1 -1
  41. package/dist/esm/w/call/arbitration.mjs +1 -1
  42. package/dist/esm/w/call/base.d.mts +1 -1
  43. package/dist/esm/w/call/base.mjs +1 -1
  44. package/dist/esm/w/call/demand.d.mts +1 -1
  45. package/dist/esm/w/call/demand.mjs +1 -1
  46. package/dist/esm/w/call/guard.d.mts +1 -1
  47. package/dist/esm/w/call/guard.mjs +1 -1
  48. package/dist/esm/w/call/index.d.mts +1 -1
  49. package/dist/esm/w/call/index.mjs +1 -1
  50. package/dist/esm/w/call/machine.d.mts +1 -1
  51. package/dist/esm/w/call/machine.mjs +1 -1
  52. package/dist/esm/w/call/passport.d.mts +1 -1
  53. package/dist/esm/w/call/passport.mjs +1 -1
  54. package/dist/esm/w/call/payment.d.mts +1 -1
  55. package/dist/esm/w/call/payment.mjs +1 -1
  56. package/dist/esm/w/call/permission.d.mts +1 -1
  57. package/dist/esm/w/call/permission.mjs +1 -1
  58. package/dist/esm/w/call/progress.d.mts +1 -1
  59. package/dist/esm/w/call/progress.mjs +1 -1
  60. package/dist/esm/w/call/repository.d.mts +1 -1
  61. package/dist/esm/w/call/repository.mjs +1 -1
  62. package/dist/esm/w/call/reward.d.mts +1 -1
  63. package/dist/esm/w/call/reward.mjs +1 -1
  64. package/dist/esm/w/call/service.d.mts +1 -1
  65. package/dist/esm/w/call/service.mjs +1 -1
  66. package/dist/esm/w/call/treasury.d.mts +1 -1
  67. package/dist/esm/w/call/treasury.mjs +1 -1
  68. package/dist/esm/w/common.d.mts +1 -1
  69. package/dist/esm/w/common.mjs +1 -1
  70. package/dist/esm/w/index.d.mts +3 -3
  71. package/dist/esm/w/index.mjs +1 -1
  72. package/dist/esm/w/local/account.d.mts +1 -1
  73. package/dist/esm/w/local/account.mjs +1 -1
  74. package/dist/esm/w/local/evm-account.mjs +1 -1
  75. package/dist/esm/w/local/fund-approval.mjs +1 -1
  76. package/dist/esm/w/local/index.d.mts +2 -2
  77. package/dist/esm/w/local/index.mjs +1 -1
  78. package/dist/esm/w/local/local.d.mts +1 -1
  79. package/dist/esm/w/local/local.mjs +1 -1
  80. package/dist/esm/w/local/token.d.mts +1 -1
  81. package/dist/esm/w/local/token.mjs +1 -1
  82. package/dist/esm/w/messenger/attachment.d.mts +1 -1
  83. package/dist/esm/w/messenger/index.d.mts +1 -1
  84. package/dist/esm/w/messenger/index.mjs +1 -1
  85. package/dist/esm/w/messenger/messenger-api.d.mts +1 -1
  86. package/dist/esm/w/messenger/messenger-api.mjs +1 -1
  87. package/dist/esm/w/messenger/messenger.d.mts +1 -1
  88. package/dist/esm/w/messenger/messenger.mjs +1 -1
  89. package/dist/esm/w/messenger/reply.d.mts +1 -1
  90. package/dist/esm/w/messenger/storage.d.mts +39 -2
  91. package/dist/esm/w/messenger/storage.mjs +1 -1
  92. package/dist/esm/w/messenger/types.d.mts +2 -2
  93. package/dist/esm/w/messenger/utils.d.mts +1 -1
  94. package/dist/esm/w/query/index.d.mts +2 -2
  95. package/dist/esm/w/query/index.mjs +1 -1
  96. package/dist/esm/w/query/object.d.mts +1 -1
  97. package/dist/esm/w/query/object.mjs +1 -1
  98. package/dist/esm/{w-C4MkpJSy.mjs → w-BqZNIgJB.mjs} +1 -1
  99. package/package.json +1 -1
  100. package/dist/esm/messenger-D9cIgjVB.mjs +0 -1
  101. package/dist/esm/messenger-api-BkZ1Urhv.mjs +0 -1
  102. package/dist/esm/util-CQi8j1Df.mjs +0 -1
@@ -1 +1 @@
1
- import{o as a75a}from'../../wow-types-DctQuD2J.mjs';import{t as a75b}from'../../client-BYIflYp_.mjs';import{t as a75c}from'../../Transaction-CrzrFqPW.mjs';import{o as a75d}from'../../exception-o3XVk35a.mjs';import{a as a75e}from'../../network-UpRYD8EM.mjs';import{c as a75f}from'../../keypair-IIyGelNr.mjs';import{n as a75g,r as a75h,t as a75i}from'../../faucet-RNvBvVJf.mjs';import{n as a75j}from'../../falcon512-CnEZ-g-L.mjs';import{Z as a75k,rt as a75l}from'../../common-DhtZTgkX.mjs';import{d as a75m,r as a75n}from'../../storage-D1bEi2b7.mjs';import{Config}from'./config.mjs';import{SecureAccountStorage}from'./secure-storage.mjs';import{sha256}from'@noble/hashes/sha2.js';import{x25519}from'@noble/curves/ed25519.js';import{hkdf}from'@noble/hashes/hkdf.js';const DEFAULT_ACCOUNT_NAME='',MAX_ACCOUNTS=0x14,MAX_MESSENGER_ACCOUNTS=0x14;var Account=class Account{constructor(){this['balance']=async(b,c,d)=>{const e=await this['get'](c);b=b??'0x2::wow::WOW';if(e){const f=await Config['Instance']()['network_get'](d);return new a75b({'url':a75e(f),'network':f})['getBalance']({'owner':e['address'],'coinType':b});}},this['coin']=async(b,c,d,e,f)=>{const g=await this['get'](e);b=b??'0x2::wow::WOW';if(g){const h=await Config['Instance']()['network_get'](f);return new a75b({'url':a75e(h),'network':h})['getCoins']({'owner':g['address'],'coinType':b,'cursor':c,'limit':d});}},this['get_coin_object']=async(c,d,e,f,g)=>{const h=await this['get'](f);if(h){const j=BigInt(d),k=await Config['Instance']()['network_get'](g),l=new a75b({'url':a75e(k),'network':k});if(j>=BigInt(0x0)){if(!e||a75k(e))return c['splitCoins'](c['gas'],[j]);else{const m=await l['getCoins']({'owner':h['address'],'coinType':e}),n=[],o=new Set();let p=BigInt(0x0);for(let q=0x0;q<m['data']['length'];++q){const s=m['data'][q]['coinObjectId'];if(o['has'](s))continue;o['add'](s),p+=BigInt(m['data'][q]['balance']),n['push'](s);if(p>=j)break;}if(n['length']===0x0)return;if(p===j){if(n['length']===0x1)return c['object'](n[0x0]);const t=n['pop']();return c['mergeCoins'](t,n);}if(n['length']===0x1)return c['splitCoins'](n[0x0],[j]);else{const u=n['pop']();return c['mergeCoins'](u,n),c['splitCoins'](u,[j]);}}}}},this['get_many_coin_object']=async(a,b,c,d,e)=>{const f=[];for(const g of b){const h=await this['get_coin_object'](a,g,c,d,e);if(!h)a75d('invalid\x20parameter','Invalid\x20coin\x20object:\x20'+g);else f['push'](h);}return a['makeMoveVec']({'elements':f});},this['coinObject_with_balance']=async(b,c,d,e)=>{const f=await this['get_imp'](d);if(!f)return void 0x0;const g=a75j['fromSecretKey'](f['secret']);if(!g)return void 0x0;const h=new a75c(),i=await this['get_coin_object'](h,b,c,d,e);if(i){h['transferObjects']([i],f['address']);const j=await Config['Instance']()['network_get'](e),k=await new a75b({'url':a75e(j),'network':j})['signAndExecuteTransaction']({'transaction':h,'signer':g,'options':{'showObjectChanges':!![],'showEffects':!![],'showEvents':!![]}}),l=c??'0x2::wow::WOW',m=k?.['objectChanges']??[];return{'coin_address':m['find'](n=>n?.['type']==='created'&&(n?.['objectType'])['includes'](l))?.['objectId']??m['find'](n=>n?.['type']==='mutated'&&(n?.['objectType'])['includes'](l))?.['objectId'],'digest':k['digest']};}};}static{this['_dataLock']=new a75m();}static{this['_storageLock']=new a75m();}static{this['_txLocks']=new Map();}static{this['orphanMigrationDone']=![];}static['txLock'](a){let b=Account['_txLocks']['get'](a);return!b&&(b=new a75m(),Account['_txLocks']['set'](a,b)),b;}['setStorage'](a){Account['storage']=a;}['setEncryptedStorage'](a){Account['storage']=new SecureAccountStorage(a);}async['getStorage'](){if(Account['storage'])return Account['storage'];return Account['_storageLock']['run'](async()=>{if(!Account['storage'])Account['storage']=new SecureAccountStorage(new a75n());return Account['storage'];});}async['unlock'](a){const b=await this['getStorage']();if(!(b instanceof SecureAccountStorage))throw new Error('Current\x20storage\x20does\x20not\x20support\x20encryption.');b['setSessionPassword'](a),await b['get']();}async['lock'](){const a=await this['getStorage']();if(a instanceof SecureAccountStorage)a['setSessionPassword'](void 0x0);}async['setEncryptionPassword'](a){const b=await this['getStorage']();if(!(b instanceof SecureAccountStorage))throw new Error('Current\x20storage\x20does\x20not\x20support\x20encryption.');await b['setPassword'](a);}async['changeEncryptionPassword'](a,b){const c=await this['getStorage']();if(!(c instanceof SecureAccountStorage))throw new Error('Current\x20storage\x20does\x20not\x20support\x20encryption.');await c['changePassword'](a,b);}async['removeEncryptionPassword'](a){const b=await this['getStorage']();if(!(b instanceof SecureAccountStorage))throw new Error('Current\x20storage\x20does\x20not\x20support\x20encryption.');await b['removePassword'](a);}async['getEncryptionMode'](){const a=await this['getStorage']();if(a instanceof SecureAccountStorage)return a['getMode']();}async['isPasswordSet'](){return await this['getEncryptionMode']()==='password';}async['getMcpAccess'](){const a=await this['getStorage']();if(a instanceof SecureAccountStorage)return a['getMcpAccess']();return'allowed';}async['setMcpAccess'](a,b){const c=await this['getStorage']();if(!(c instanceof SecureAccountStorage))throw new Error('Current\x20storage\x20does\x20not\x20support\x20encryption.');await c['setMcpAccess'](a,b);}async['exportSecret'](a){const b=await(await this['getStorage']())['get']();if(!b)return void 0x0;const c=JSON['parse'](b),d=a['toLowerCase']();return c['find'](e=>e['address']['toLowerCase']()===d||e['name']&&e['name']['toLowerCase']()===d)?.['secret'];}async['importSecret'](a,b,c,d,e=![]){return Account['_dataLock']['run'](async()=>{b=this['name_resolve'](b);if(b&&!a75l(b))a75d('invalid\x20name','Name\x20'+b+'\x20is\x20exceeds\x20max\x2064');const f=a75j['fromSecretKey'](a),g=f['getPublicKey']()['toWowAddress'](),h=f['getSecretKey'](),i=await this['getStorage'](),j=await i['get'](),k=j?JSON['parse'](j):[];if(k['findIndex'](p=>p['address']['toLowerCase']()===g['toLowerCase']())!==-0x1)a75d('invalid\x20parameter','Account\x20with\x20address\x20'+g+'\x20already\x20exists');const l=k['findIndex'](p=>Account['nameMatch'](p['name'],b));if(l!==-0x1){if(c){if(b==='')a75d('invalid\x20parameter','Cannot\x20replaceExistName\x20on\x20the\x20default\x20account\x20(name=\x22\x22).\x20The\x20default\x20account\x20is\x20unique\x20and\x20cannot\x20be\x20suspended\x20by\x20replacement.\x20Use\x20suspend()\x20explicitly\x20if\x20you\x20need\x20to\x20deactivate\x20it.');const p=Date['now']();k[l]['suspended']=!![],k[l]['name']=void 0x0,k[l]['messenger']=![],k[l]['updatedAt']=p;}else a75d('account\x20name\x20exist','Name\x20'+(b||'')+'\x20already\x20exist');}const m=k['filter'](q=>!q['suspended'])['length'];if(m>=0x14)a75d('invalid\x20parameter','Maximum\x2020\x20accounts\x20allowed,\x20current\x20count:\x20'+m);if(d){const q=k['filter'](r=>r['messenger']===!![]&&!r['suspended'])['length'];if(q>=0x14)a75d('invalid\x20parameter','Maximum\x2020\x20messenger\x20accounts\x20allowed,\x20current\x20count:\x20'+q);}const n=Date['now'](),o={'name':b,'address':g,'secret':h,'messenger':d||![],'createdAt':n,'updatedAt':n};return k['push'](o),await i['put'](JSON['stringify'](k)),this['accountData'](o,e);});}static['Instance'](){if(Account['_instance'])return Account['_instance'];if(!Account['_instance'])Account['_instance']=new Account();return Account['_instance'];}['accountData'](a,b=![]){if(!a||!a['secret'])return void 0x0;if(b)a['pubkey']=a75j['fromSecretKey'](a['secret'])['getPublicKey']()['toWowPublicKey']();a['secret']=void 0x0;if(a['name']===void 0x0)a['name']='';return a;}static['nameMatch'](a,b){return(a??'')['toLowerCase']()===b['toLowerCase']();}async['gen'](a,b,c,d=![]){return Account['_dataLock']['run'](async()=>{a=this['name_resolve'](a);if(a&&!a75l(a))a75d('invalid\x20name','Name\x20'+a+'\x20is\x20exceeds\x20max\x2064');const e=a75j['generate']()['getSecretKey'](),f=a75j['fromSecretKey'](e)['getPublicKey']()['toWowAddress'](),g=Date['now'](),h={'name':a,'address':f,'secret':e,'messenger':c||![],'createdAt':g,'updatedAt':g},i=await this['getStorage'](),j=await i['get'](),k=j?JSON['parse'](j):[],l=k['findIndex'](n=>Account['nameMatch'](n['name'],a));if(l!==-0x1){if(b){if(a==='')a75d('invalid\x20parameter','Cannot\x20replaceExistName\x20on\x20the\x20default\x20account\x20(name=\x22\x22).\x20The\x20default\x20account\x20is\x20unique\x20and\x20cannot\x20be\x20suspended\x20by\x20replacement.\x20Use\x20suspend()\x20explicitly\x20if\x20you\x20need\x20to\x20deactivate\x20it.');const n=Date['now']();k[l]['suspended']=!![],k[l]['name']=void 0x0,k[l]['messenger']=![],k[l]['updatedAt']=n;}else a75d('account\x20name\x20exist','Name\x20'+(a||'')+'\x20already\x20exist');}const m=k['filter'](o=>!o['suspended'])['length'];if(m>=0x14)a75d('invalid\x20parameter','Maximum\x2020\x20accounts\x20allowed,\x20current\x20count:\x20'+m);if(c){const o=k['filter'](p=>p['messenger']===!![]&&!p['suspended'])['length'];if(o>=0x14)a75d('invalid\x20parameter','Maximum\x2020\x20messenger\x20accounts\x20allowed,\x20current\x20count:\x20'+o);}return k['push'](h),await i['put'](JSON['stringify'](k)),this['accountData'](h,d);});}async['default'](a=![]){return await this['migrateOrphanAccountsIfNeeded'](),this['accountData'](await this['get_imp'](''),a);}async['migrateOrphanAccountsIfNeeded'](){if(Account['orphanMigrationDone'])return;return Account['orphanMigrationDone']=!![],Account['_dataLock']['run'](async()=>{const a=await this['getStorage'](),b=await a['get']();if(!b)return;const c=JSON['parse'](b);let e=![];const f=Date['now']();for(const g of c)g['name']===void 0x0&&g['suspended']!==!![]&&(g['suspended']=!![],g['messenger']=![],g['updatedAt']=f,e=!![]);if(e)await a['put'](JSON['stringify'](c));});}async['get'](a,b,c=![]){if(!b)return this['accountData'](await this['get_imp'](a),c);return this['gen'](a);}async['get_address'](a){if(a&&a75a(a))return a['toLowerCase']();return(await this['get_imp'](a))?.['address'];}async['get_many_address'](a){const b=await(await this['getStorage']())['get']();if(b){const c=JSON['parse'](b);return a['map'](d=>{if(d&&a75a(d))return d['toLowerCase']();const e=this['name_resolve'](d);return c['find'](f=>f['address']['toLowerCase']()===e['toLowerCase']()||Account['nameMatch'](f['name'],e))?.['address'];});}return a['map'](d=>d&&a75a(d)?d['toLowerCase']():void 0x0);}async['get_imp'](a){a=this['name_resolve'](a);const b=await(await this['getStorage']())['get']();if(b){const c=a['toLowerCase']();return JSON['parse'](b)['find'](e=>Account['nameMatch'](e['name'],a)||e['address']['toLowerCase']()===c);}}['name_resolve'](a){return a||'';}async['get_many'](a,b=![]){return this['get_many_imp'](a,b);}async['get_many_imp'](a,b=![]){const c=await(await this['getStorage']())['get']();if(c){const d=JSON['parse'](c);return a['map'](e=>{const f=this['name_resolve'](e),g=d['find'](h=>h['address']['toLowerCase']()===f['toLowerCase']()||Account['nameMatch'](h['name'],f));if(!g)return void 0x0;if(b){const h=a75j['fromSecretKey'](g['secret']),j={...g,'pubkey':h['getPublicKey']()['toWowPublicKey']()};return delete j['secret'],j;}return g;});}return a['map'](e=>void 0x0);}async['swap_name'](a,b){return Account['_dataLock']['run'](async()=>{a=this['name_resolve'](a),b=this['name_resolve'](b);if(this['name_resolve'](a)===this['name_resolve'](b))return!![];if(a&&!a75l(a))a75d('invalid\x20name','Name\x20'+(a||'')+'\x20is\x20exceeds\x20max\x2064');if(b&&!a75l(b))a75d('invalid\x20name','Name\x20'+(b||'')+'\x20is\x20exceeds\x20max\x2064');const c=await this['getStorage'](),d=await c['get']();if(!d)return![];const e=JSON['parse'](d),f=e['find'](i=>Account['nameMatch'](i['name'],a)),g=e['find'](i=>Account['nameMatch'](i['name'],b));if(!f||!g)return![];const h=Date['now']();return f['name']=b,f['updatedAt']=h,g['name']=a,g['updatedAt']=h,await c['put'](JSON['stringify'](e)),!![];});}async['rename'](a,b){return Account['_dataLock']['run'](async()=>{if(b&&!a75l(b))a75d('invalid\x20name','Invalid\x20new\x20name:\x20\x22'+(b||'')+'\x22.\x20Must\x20be\x20a\x20valid\x20name\x20(not\x20an\x20address)');const c=this['name_resolve'](a);if(c===b)return!![];const d=await this['getStorage'](),e=await d['get']();if(e){const g=JSON['parse'](e);if(g['find'](j=>Account['nameMatch'](j['name'],b)))a75d('invalid\x20name','New\x20name\x20\x22'+(b||'')+'\x22\x20already\x20exists');const h=g['find'](j=>Account['nameMatch'](j['name'],c)||j['address']['toLowerCase']()===c['toLowerCase']());if(!h)a75d('account\x20not\x20found','Source\x20account\x20\x22'+(a||'')+'\x22\x20not\x20found');const i=Date['now']();return h['name']=b,h['updatedAt']=i,await d['put'](JSON['stringify'](g)),!![];}return![];});}async['list'](a){await this['migrateOrphanAccountsIfNeeded']();const b=await(await this['getStorage']())['get']();if(b){let c=JSON['parse'](b);if(a?.['suspended']!==void 0x0)c=c['filter'](d=>a['suspended']?d['suspended']===!![]:!d['suspended']);else c=c['filter'](d=>!d['suspended']);if(a?.['hasMessenger']!==void 0x0)c=c['filter'](d=>a['hasMessenger']?d['messenger']===!![]:d['messenger']!==!![]);if(a?.['createdAt']){if(a['createdAt']['gte']!==void 0x0)c=c['filter'](d=>d['createdAt']&&d['createdAt']>=a['createdAt']['gte']);if(a['createdAt']['lte']!==void 0x0)c=c['filter'](d=>d['createdAt']&&d['createdAt']<=a['createdAt']['lte']);}if(a?.['updatedAt']){if(a['updatedAt']['gte']!==void 0x0)c=c['filter'](d=>d['updatedAt']&&d['updatedAt']>=a['updatedAt']['gte']);if(a['updatedAt']['lte']!==void 0x0)c=c['filter'](d=>d['updatedAt']&&d['updatedAt']<=a['updatedAt']['lte']);}if(a?.['name']!=null||a?.['address'])c=c['map'](d=>{let e=0x0;if(a?.['name']!=null){const f=d['name']?.['toLowerCase']()||'',g=a['name']['toLowerCase']();if(f===g)e+=0x64;else{if(f['startsWith'](g))e+=0x32;else{if(f['includes'](g))e+=0x19;}}}if(a?.['address']){const h=d['address']['toLowerCase'](),i=a['address']['toLowerCase']();if(h===i)e+=0x64;else{if(h['startsWith'](i))e+=0x32;else{if(h['includes'](i))e+=0x19;}}}if((a?.['name']||a?.['address'])&&e===0x0)e=-0x1;return{'account':d,'score':e};})['filter'](({score:d})=>d>=0x0)['sort']((d,e)=>e['score']-d['score'])['map'](({account:d})=>d);return c['map'](d=>this['accountData'](d,a?.['includePubkey']))['filter'](d=>d!==void 0x0);}return[];}async['suspend'](a){return Account['_dataLock']['run'](async()=>{a=this['name_resolve'](a);const b=await this['getStorage'](),c=await b['get']();if(c){const d=JSON['parse'](c),e=d['find'](g=>g['address']['toLowerCase']()===a['toLowerCase']()||Account['nameMatch'](g['name'],a));if(e){const g=Date['now']();return e['suspendedName']=e['name']??'',e['suspended']=!![],e['name']=void 0x0,e['messenger']=![],e['updatedAt']=g,await b['put'](JSON['stringify'](d)),!![];}}return![];});}async['suspend_many'](a){return Account['_dataLock']['run'](async()=>{const b=await this['getStorage'](),c=await b['get'](),d={'success':[],'failed':[]};if(c){const e=JSON['parse'](c),g=Date['now']();let h=![];for(const i of a){const j=this['name_resolve'](i),k=e['find'](l=>l['address']['toLowerCase']()===j['toLowerCase']()||Account['nameMatch'](l['name'],j));if(k)k['suspended']=!![],k['name']=void 0x0,k['messenger']=![],k['updatedAt']=g,d['success']['push'](i),h=!![];else d['failed']['push'](i);}if(h)await b['put'](JSON['stringify'](e));}else d['failed']=[...a];return d;});}async['resume'](a,b){return Account['_dataLock']['run'](async()=>{b=this['name_resolve'](b),a=a['toLowerCase']();if(b&&!a75l(b))a75d('invalid\x20name','Name\x20'+b+'\x20is\x20exceeds\x20max\x2064');const c=await this['getStorage'](),d=await c['get']();if(d){const e=JSON['parse'](d);if(e['find'](h=>Account['nameMatch'](h['name'],b)))a75d('invalid\x20name','Name\x20\x22'+(b||'')+'\x22\x20already\x20exists');const g=e['find'](h=>h['address']['toLowerCase']()===a['toLowerCase']());if(g){const h=Date['now']();return g['suspended']=![],g['name']=b,g['suspendedName']=void 0x0,g['updatedAt']=h,await c['put'](JSON['stringify'](e)),!![];}}return![];});}async['faucet'](b,c){const d=await this['get_imp'](b);if(!d)throw new Error('Faucet\x20request\x20failed:\x20account\x20\x22'+(b??'<default>')+'\x22\x20not\x20found');const f=0x5,g=0xbb8;let h;for(let i=0x1;i<=f;i++)try{return(await a75h({'host':a75g(c),'recipient':d['address']}))['coins_sent']||[];}catch(j){h=j;if(j instanceof a75i&&i<f){await new Promise(k=>setTimeout(k,g));continue;}throw j;}throw h instanceof Error?h:new Error('Faucet\x20request\x20failed\x20after\x20retries');}async['sign_and_commit'](b,c,d){const e=await this['get_imp'](c);if(!e)return;const f=a75j['fromSecretKey'](e['secret']);if(!f)return;const g=await Config['Instance']()['network_get'](d),h=g+':'+e['address']['toLowerCase']();return Account['txLock'](h)['run'](async()=>{return new a75b({'url':a75e(g),'network':g})['signAndExecuteTransaction']({'transaction':b,'signer':f,'options':{'showObjectChanges':!![],'showEffects':!![],'showEvents':!![]}});});}async['refund_coin'](a,b,c){const d=await this['get_address'](c);if(!d)a75d('invalid\x20parameter','Invalid\x20to\x20address\x20or\x20name\x20'+c);a['transferObjects']([b],a['pure']['address'](d));}async['transfer'](a,b,c,d,e){const [f,g]=await this['get_many_imp']([d,c]);if(!f)a75d('invalid\x20parameter','Invalid\x20from\x20address\x20or\x20name\x20'+d);const h=g?.['address']??c;if(!h)a75d('invalid\x20parameter','Invalid\x20to\x20address\x20or\x20name\x20'+c);const i=a75j['fromSecretKey'](f['secret']);if(i){const j=new a75c(),k=await this['get_coin_object'](j,a,b,d,e);if(k){j['transferObjects']([k],h);const l=await Config['Instance']()['network_get'](e);return new a75b({'url':a75e(l),'network':l})['signAndExecuteTransaction']({'transaction':j,'signer':i,'options':{'showObjectChanges':!![],'showEffects':!![],'showEvents':!![]}});}}}async['sign'](a,b){const c=await this['get_imp'](a);if(!c?.['secret'])a75d('invalid\x20parameter','Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const d=a75j['fromSecretKey'](c['secret']),e=typeof b==='string'?new TextEncoder()['encode'](b):b,f=await d['sign'](e);return'0x'+Buffer['from'](f)['toString']('hex');}async['signData'](a,b){const c=await this['get_imp'](a);if(!c?.['secret'])a75d('invalid\x20parameter','Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const d=a75j['fromSecretKey'](c['secret']),e=typeof b==='string'?new TextEncoder()['encode'](b):b,f=await d['sign'](e);return{'signature':'0x'+Buffer['from'](f)['toString']('hex'),'publicKey':d['getPublicKey']()['toWowPublicKey'](),'address':c['address']};}async['deriveX25519Identity'](a){const b=await this['get_imp'](a);if(!b?.['secret'])a75d('invalid\x20parameter','Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const c=a75f(b['secret'])['secretKey'],d=a75j['fromSecretKey'](b['secret'])['getPublicKey']()['toRawBytes'](),e=new TextEncoder()['encode']('WowokX25519IdentityDerivation'),f=hkdf(sha256,sha256(c),new Uint8Array(0x0),e,0x20);f[0x0]&=0xf8,f[0x1f]&=0x7f,f[0x1f]|=0x40;const g=x25519['getPublicKey'](f),h=g[0x0]<<0x8|g[0x1];return{'x25519KeyPair':{'publicKey':g,'privateKey':f},'falcon512KeyPair':{'publicKey':d,'privateKey':c},'registrationId':h===0x0?0x1:h};}async['set_messenger'](a,b){return Account['_dataLock']['run'](async()=>{const c=this['name_resolve'](a),d=await this['getStorage'](),e=await d['get']();if(!e)return![];const g=JSON['parse'](e),h=g['find'](j=>j['address']['toLowerCase']()===c['toLowerCase']()||Account['nameMatch'](j['name'],c));if(!h)return![];if(b){const j=g['filter'](k=>k['messenger']===!![]&&!k['suspended']&&k['address']!==h['address'])['length'];if(j>=0x14)a75d('invalid\x20parameter','Maximum\x2020\x20messenger\x20accounts\x20allowed,\x20current\x20count:\x20'+j);}const i=Date['now']();return h['messenger']=b,h['updatedAt']=i,await d['put'](JSON['stringify'](g)),!![];});}async['list_messenger_accounts'](){return this['list']({'hasMessenger':!![]});}async['count_messenger_accounts'](){const a=await(await this['getStorage']())['get']();if(!a)return 0x0;return JSON['parse'](a)['filter'](b=>b['messenger']===!![]&&!b['suspended'])['length'];}};export{Account,DEFAULT_ACCOUNT_NAME,MAX_ACCOUNTS,MAX_MESSENGER_ACCOUNTS};
1
+ import{o as a75a}from'../../wow-types-DctQuD2J.mjs';import{t as a75b}from'../../client-DYIgIItb.mjs';import{t as a75c}from'../../Transaction-CrzrFqPW.mjs';import{o as a75d}from'../../exception-D2n4LV8F.mjs';import{a as a75e}from'../../network-UpRYD8EM.mjs';import{c as a75f}from'../../keypair-IIyGelNr.mjs';import{n as a75g,r as a75h,t as a75i}from'../../faucet-RNvBvVJf.mjs';import{n as a75j}from'../../falcon512-CnEZ-g-L.mjs';import{Z as a75k,rt as a75l}from'../../common-DC9BAaSg.mjs';import{d as a75m,r as a75n}from'../../storage-D1bEi2b7.mjs';import{Config}from'./config.mjs';import{SecureAccountStorage}from'./secure-storage.mjs';import{sha256}from'@noble/hashes/sha2.js';import{x25519}from'@noble/curves/ed25519.js';import{hkdf}from'@noble/hashes/hkdf.js';const DEFAULT_ACCOUNT_NAME='',MAX_ACCOUNTS=0x14,MAX_MESSENGER_ACCOUNTS=0x14;var Account=class Account{constructor(){this['balance']=async(b,c,d)=>{const e=await this['get'](c);b=b??'0x2::wow::WOW';if(e){const f=await Config['Instance']()['network_get'](d);return new a75b({'url':a75e(f),'network':f})['getBalance']({'owner':e['address'],'coinType':b});}},this['coin']=async(b,c,d,e,f)=>{const g=await this['get'](e);b=b??'0x2::wow::WOW';if(g){const h=await Config['Instance']()['network_get'](f);return new a75b({'url':a75e(h),'network':h})['getCoins']({'owner':g['address'],'coinType':b,'cursor':c,'limit':d});}},this['get_coin_object']=async(c,d,e,f,g)=>{const h=await this['get'](f);if(h){const j=BigInt(d),k=await Config['Instance']()['network_get'](g),l=new a75b({'url':a75e(k),'network':k});if(j>=BigInt(0x0)){if(!e||a75k(e))return c['splitCoins'](c['gas'],[j]);else{const m=await l['getCoins']({'owner':h['address'],'coinType':e}),n=[],o=new Set();let p=BigInt(0x0);for(let q=0x0;q<m['data']['length'];++q){const s=m['data'][q]['coinObjectId'];if(o['has'](s))continue;o['add'](s),p+=BigInt(m['data'][q]['balance']),n['push'](s);if(p>=j)break;}if(n['length']===0x0)return;if(p===j){if(n['length']===0x1)return c['object'](n[0x0]);const t=n['pop']();return c['mergeCoins'](t,n);}if(n['length']===0x1)return c['splitCoins'](n[0x0],[j]);else{const u=n['pop']();return c['mergeCoins'](u,n),c['splitCoins'](u,[j]);}}}}},this['get_many_coin_object']=async(a,b,c,d,e)=>{const f=[];for(const g of b){const h=await this['get_coin_object'](a,g,c,d,e);if(!h)a75d('invalid\x20parameter','Invalid\x20coin\x20object:\x20'+g);else f['push'](h);}return a['makeMoveVec']({'elements':f});},this['coinObject_with_balance']=async(b,c,d,e)=>{const f=await this['get_imp'](d);if(!f)return void 0x0;const g=a75j['fromSecretKey'](f['secret']);if(!g)return void 0x0;const h=new a75c(),i=await this['get_coin_object'](h,b,c,d,e);if(i){h['transferObjects']([i],f['address']);const j=await Config['Instance']()['network_get'](e),k=await new a75b({'url':a75e(j),'network':j})['signAndExecuteTransaction']({'transaction':h,'signer':g,'options':{'showObjectChanges':!![],'showEffects':!![],'showEvents':!![]}}),l=c??'0x2::wow::WOW',m=k?.['objectChanges']??[];return{'coin_address':m['find'](n=>n?.['type']==='created'&&(n?.['objectType'])['includes'](l))?.['objectId']??m['find'](n=>n?.['type']==='mutated'&&(n?.['objectType'])['includes'](l))?.['objectId'],'digest':k['digest']};}};}static{this['_dataLock']=new a75m();}static{this['_storageLock']=new a75m();}static{this['_txLocks']=new Map();}static{this['orphanMigrationDone']=![];}static['txLock'](a){let b=Account['_txLocks']['get'](a);return!b&&(b=new a75m(),Account['_txLocks']['set'](a,b)),b;}['setStorage'](a){Account['storage']=a;}['setEncryptedStorage'](a){Account['storage']=new SecureAccountStorage(a);}async['getStorage'](){if(Account['storage'])return Account['storage'];return Account['_storageLock']['run'](async()=>{if(!Account['storage'])Account['storage']=new SecureAccountStorage(new a75n());return Account['storage'];});}async['unlock'](a){const b=await this['getStorage']();if(!(b instanceof SecureAccountStorage))throw new Error('Current\x20storage\x20does\x20not\x20support\x20encryption.');b['setSessionPassword'](a),await b['get']();}async['lock'](){const a=await this['getStorage']();if(a instanceof SecureAccountStorage)a['setSessionPassword'](void 0x0);}async['setEncryptionPassword'](a){const b=await this['getStorage']();if(!(b instanceof SecureAccountStorage))throw new Error('Current\x20storage\x20does\x20not\x20support\x20encryption.');await b['setPassword'](a);}async['changeEncryptionPassword'](a,b){const c=await this['getStorage']();if(!(c instanceof SecureAccountStorage))throw new Error('Current\x20storage\x20does\x20not\x20support\x20encryption.');await c['changePassword'](a,b);}async['removeEncryptionPassword'](a){const b=await this['getStorage']();if(!(b instanceof SecureAccountStorage))throw new Error('Current\x20storage\x20does\x20not\x20support\x20encryption.');await b['removePassword'](a);}async['getEncryptionMode'](){const a=await this['getStorage']();if(a instanceof SecureAccountStorage)return a['getMode']();}async['isPasswordSet'](){return await this['getEncryptionMode']()==='password';}async['getMcpAccess'](){const a=await this['getStorage']();if(a instanceof SecureAccountStorage)return a['getMcpAccess']();return'allowed';}async['setMcpAccess'](a,b){const c=await this['getStorage']();if(!(c instanceof SecureAccountStorage))throw new Error('Current\x20storage\x20does\x20not\x20support\x20encryption.');await c['setMcpAccess'](a,b);}async['exportSecret'](a){const b=await(await this['getStorage']())['get']();if(!b)return void 0x0;const c=JSON['parse'](b),d=a['toLowerCase']();return c['find'](e=>e['address']['toLowerCase']()===d||e['name']&&e['name']['toLowerCase']()===d)?.['secret'];}async['importSecret'](a,b,c,d,e=![]){return Account['_dataLock']['run'](async()=>{b=this['name_resolve'](b);if(b&&!a75l(b))a75d('invalid\x20name','Name\x20'+b+'\x20is\x20exceeds\x20max\x2064');const f=a75j['fromSecretKey'](a),g=f['getPublicKey']()['toWowAddress'](),h=f['getSecretKey'](),i=await this['getStorage'](),j=await i['get'](),k=j?JSON['parse'](j):[];if(k['findIndex'](p=>p['address']['toLowerCase']()===g['toLowerCase']())!==-0x1)a75d('invalid\x20parameter','Account\x20with\x20address\x20'+g+'\x20already\x20exists');const l=k['findIndex'](p=>Account['nameMatch'](p['name'],b));if(l!==-0x1){if(c){if(b==='')a75d('invalid\x20parameter','Cannot\x20replaceExistName\x20on\x20the\x20default\x20account\x20(name=\x22\x22).\x20The\x20default\x20account\x20is\x20unique\x20and\x20cannot\x20be\x20suspended\x20by\x20replacement.\x20Use\x20suspend()\x20explicitly\x20if\x20you\x20need\x20to\x20deactivate\x20it.');const p=Date['now']();k[l]['suspended']=!![],k[l]['name']=void 0x0,k[l]['messenger']=![],k[l]['updatedAt']=p;}else a75d('account\x20name\x20exist','Name\x20'+(b||'')+'\x20already\x20exist');}const m=k['filter'](q=>!q['suspended'])['length'];if(m>=0x14)a75d('invalid\x20parameter','Maximum\x2020\x20accounts\x20allowed,\x20current\x20count:\x20'+m);if(d){const q=k['filter'](r=>r['messenger']===!![]&&!r['suspended'])['length'];if(q>=0x14)a75d('invalid\x20parameter','Maximum\x2020\x20messenger\x20accounts\x20allowed,\x20current\x20count:\x20'+q);}const n=Date['now'](),o={'name':b,'address':g,'secret':h,'messenger':d||![],'createdAt':n,'updatedAt':n};return k['push'](o),await i['put'](JSON['stringify'](k)),this['accountData'](o,e);});}static['Instance'](){if(Account['_instance'])return Account['_instance'];if(!Account['_instance'])Account['_instance']=new Account();return Account['_instance'];}['accountData'](a,b=![]){if(!a||!a['secret'])return void 0x0;if(b)a['pubkey']=a75j['fromSecretKey'](a['secret'])['getPublicKey']()['toWowPublicKey']();a['secret']=void 0x0;if(a['name']===void 0x0)a['name']='';return a;}static['nameMatch'](a,b){return(a??'')['toLowerCase']()===b['toLowerCase']();}async['gen'](a,b,c,d=![]){return Account['_dataLock']['run'](async()=>{a=this['name_resolve'](a);if(a&&!a75l(a))a75d('invalid\x20name','Name\x20'+a+'\x20is\x20exceeds\x20max\x2064');const e=a75j['generate']()['getSecretKey'](),f=a75j['fromSecretKey'](e)['getPublicKey']()['toWowAddress'](),g=Date['now'](),h={'name':a,'address':f,'secret':e,'messenger':c||![],'createdAt':g,'updatedAt':g},i=await this['getStorage'](),j=await i['get'](),k=j?JSON['parse'](j):[],l=k['findIndex'](n=>Account['nameMatch'](n['name'],a));if(l!==-0x1){if(b){if(a==='')a75d('invalid\x20parameter','Cannot\x20replaceExistName\x20on\x20the\x20default\x20account\x20(name=\x22\x22).\x20The\x20default\x20account\x20is\x20unique\x20and\x20cannot\x20be\x20suspended\x20by\x20replacement.\x20Use\x20suspend()\x20explicitly\x20if\x20you\x20need\x20to\x20deactivate\x20it.');const n=Date['now']();k[l]['suspended']=!![],k[l]['name']=void 0x0,k[l]['messenger']=![],k[l]['updatedAt']=n;}else a75d('account\x20name\x20exist','Name\x20'+(a||'')+'\x20already\x20exist');}const m=k['filter'](o=>!o['suspended'])['length'];if(m>=0x14)a75d('invalid\x20parameter','Maximum\x2020\x20accounts\x20allowed,\x20current\x20count:\x20'+m);if(c){const o=k['filter'](p=>p['messenger']===!![]&&!p['suspended'])['length'];if(o>=0x14)a75d('invalid\x20parameter','Maximum\x2020\x20messenger\x20accounts\x20allowed,\x20current\x20count:\x20'+o);}return k['push'](h),await i['put'](JSON['stringify'](k)),this['accountData'](h,d);});}async['default'](a=![]){return await this['migrateOrphanAccountsIfNeeded'](),this['accountData'](await this['get_imp'](''),a);}async['migrateOrphanAccountsIfNeeded'](){if(Account['orphanMigrationDone'])return;return Account['orphanMigrationDone']=!![],Account['_dataLock']['run'](async()=>{const a=await this['getStorage'](),b=await a['get']();if(!b)return;const c=JSON['parse'](b);let e=![];const f=Date['now']();for(const g of c)g['name']===void 0x0&&g['suspended']!==!![]&&(g['suspended']=!![],g['messenger']=![],g['updatedAt']=f,e=!![]);if(e)await a['put'](JSON['stringify'](c));});}async['get'](a,b,c=![]){if(!b)return this['accountData'](await this['get_imp'](a),c);return this['gen'](a);}async['get_address'](a){if(a&&a75a(a))return a['toLowerCase']();return(await this['get_imp'](a))?.['address'];}async['get_many_address'](a){const b=await(await this['getStorage']())['get']();if(b){const c=JSON['parse'](b);return a['map'](d=>{if(d&&a75a(d))return d['toLowerCase']();const e=this['name_resolve'](d);return c['find'](f=>f['address']['toLowerCase']()===e['toLowerCase']()||Account['nameMatch'](f['name'],e))?.['address'];});}return a['map'](d=>d&&a75a(d)?d['toLowerCase']():void 0x0);}async['get_imp'](a){a=this['name_resolve'](a);const b=await(await this['getStorage']())['get']();if(b){const c=a['toLowerCase']();return JSON['parse'](b)['find'](e=>Account['nameMatch'](e['name'],a)||e['address']['toLowerCase']()===c);}}['name_resolve'](a){return a||'';}async['get_many'](a,b=![]){return this['get_many_imp'](a,b);}async['get_many_imp'](a,b=![]){const c=await(await this['getStorage']())['get']();if(c){const d=JSON['parse'](c);return a['map'](e=>{const f=this['name_resolve'](e),g=d['find'](h=>h['address']['toLowerCase']()===f['toLowerCase']()||Account['nameMatch'](h['name'],f));if(!g)return void 0x0;if(b){const h=a75j['fromSecretKey'](g['secret']),j={...g,'pubkey':h['getPublicKey']()['toWowPublicKey']()};return delete j['secret'],j;}return g;});}return a['map'](e=>void 0x0);}async['swap_name'](a,b){return Account['_dataLock']['run'](async()=>{a=this['name_resolve'](a),b=this['name_resolve'](b);if(this['name_resolve'](a)===this['name_resolve'](b))return!![];if(a&&!a75l(a))a75d('invalid\x20name','Name\x20'+(a||'')+'\x20is\x20exceeds\x20max\x2064');if(b&&!a75l(b))a75d('invalid\x20name','Name\x20'+(b||'')+'\x20is\x20exceeds\x20max\x2064');const c=await this['getStorage'](),d=await c['get']();if(!d)return![];const e=JSON['parse'](d),f=e['find'](i=>Account['nameMatch'](i['name'],a)),g=e['find'](i=>Account['nameMatch'](i['name'],b));if(!f||!g)return![];const h=Date['now']();return f['name']=b,f['updatedAt']=h,g['name']=a,g['updatedAt']=h,await c['put'](JSON['stringify'](e)),!![];});}async['rename'](a,b){return Account['_dataLock']['run'](async()=>{if(b&&!a75l(b))a75d('invalid\x20name','Invalid\x20new\x20name:\x20\x22'+(b||'')+'\x22.\x20Must\x20be\x20a\x20valid\x20name\x20(not\x20an\x20address)');const c=this['name_resolve'](a);if(c===b)return!![];const d=await this['getStorage'](),e=await d['get']();if(e){const g=JSON['parse'](e);if(g['find'](j=>Account['nameMatch'](j['name'],b)))a75d('invalid\x20name','New\x20name\x20\x22'+(b||'')+'\x22\x20already\x20exists');const h=g['find'](j=>Account['nameMatch'](j['name'],c)||j['address']['toLowerCase']()===c['toLowerCase']());if(!h)a75d('account\x20not\x20found','Source\x20account\x20\x22'+(a||'')+'\x22\x20not\x20found');const i=Date['now']();return h['name']=b,h['updatedAt']=i,await d['put'](JSON['stringify'](g)),!![];}return![];});}async['list'](a){await this['migrateOrphanAccountsIfNeeded']();const b=await(await this['getStorage']())['get']();if(b){let c=JSON['parse'](b);if(a?.['suspended']!==void 0x0)c=c['filter'](d=>a['suspended']?d['suspended']===!![]:!d['suspended']);else c=c['filter'](d=>!d['suspended']);if(a?.['hasMessenger']!==void 0x0)c=c['filter'](d=>a['hasMessenger']?d['messenger']===!![]:d['messenger']!==!![]);if(a?.['createdAt']){if(a['createdAt']['gte']!==void 0x0)c=c['filter'](d=>d['createdAt']&&d['createdAt']>=a['createdAt']['gte']);if(a['createdAt']['lte']!==void 0x0)c=c['filter'](d=>d['createdAt']&&d['createdAt']<=a['createdAt']['lte']);}if(a?.['updatedAt']){if(a['updatedAt']['gte']!==void 0x0)c=c['filter'](d=>d['updatedAt']&&d['updatedAt']>=a['updatedAt']['gte']);if(a['updatedAt']['lte']!==void 0x0)c=c['filter'](d=>d['updatedAt']&&d['updatedAt']<=a['updatedAt']['lte']);}if(a?.['name']!=null||a?.['address'])c=c['map'](d=>{let e=0x0;if(a?.['name']!=null){const f=d['name']?.['toLowerCase']()||'',g=a['name']['toLowerCase']();if(f===g)e+=0x64;else{if(f['startsWith'](g))e+=0x32;else{if(f['includes'](g))e+=0x19;}}}if(a?.['address']){const h=d['address']['toLowerCase'](),i=a['address']['toLowerCase']();if(h===i)e+=0x64;else{if(h['startsWith'](i))e+=0x32;else{if(h['includes'](i))e+=0x19;}}}if((a?.['name']||a?.['address'])&&e===0x0)e=-0x1;return{'account':d,'score':e};})['filter'](({score:d})=>d>=0x0)['sort']((d,e)=>e['score']-d['score'])['map'](({account:d})=>d);return c['map'](d=>this['accountData'](d,a?.['includePubkey']))['filter'](d=>d!==void 0x0);}return[];}async['suspend'](a){return Account['_dataLock']['run'](async()=>{a=this['name_resolve'](a);const b=await this['getStorage'](),c=await b['get']();if(c){const d=JSON['parse'](c),e=d['find'](g=>g['address']['toLowerCase']()===a['toLowerCase']()||Account['nameMatch'](g['name'],a));if(e){const g=Date['now']();return e['suspendedName']=e['name']??'',e['suspended']=!![],e['name']=void 0x0,e['messenger']=![],e['updatedAt']=g,await b['put'](JSON['stringify'](d)),!![];}}return![];});}async['suspend_many'](a){return Account['_dataLock']['run'](async()=>{const b=await this['getStorage'](),c=await b['get'](),d={'success':[],'failed':[]};if(c){const e=JSON['parse'](c),g=Date['now']();let h=![];for(const i of a){const j=this['name_resolve'](i),k=e['find'](l=>l['address']['toLowerCase']()===j['toLowerCase']()||Account['nameMatch'](l['name'],j));if(k)k['suspended']=!![],k['name']=void 0x0,k['messenger']=![],k['updatedAt']=g,d['success']['push'](i),h=!![];else d['failed']['push'](i);}if(h)await b['put'](JSON['stringify'](e));}else d['failed']=[...a];return d;});}async['resume'](a,b){return Account['_dataLock']['run'](async()=>{b=this['name_resolve'](b),a=a['toLowerCase']();if(b&&!a75l(b))a75d('invalid\x20name','Name\x20'+b+'\x20is\x20exceeds\x20max\x2064');const c=await this['getStorage'](),d=await c['get']();if(d){const e=JSON['parse'](d);if(e['find'](h=>Account['nameMatch'](h['name'],b)))a75d('invalid\x20name','Name\x20\x22'+(b||'')+'\x22\x20already\x20exists');const g=e['find'](h=>h['address']['toLowerCase']()===a['toLowerCase']());if(g){const h=Date['now']();return g['suspended']=![],g['name']=b,g['suspendedName']=void 0x0,g['updatedAt']=h,await c['put'](JSON['stringify'](e)),!![];}}return![];});}async['faucet'](b,c){const d=await this['get_imp'](b);if(!d)throw new Error('Faucet\x20request\x20failed:\x20account\x20\x22'+(b??'<default>')+'\x22\x20not\x20found');const f=0x5,g=0xbb8;let h;for(let i=0x1;i<=f;i++)try{return(await a75h({'host':a75g(c),'recipient':d['address']}))['coins_sent']||[];}catch(j){h=j;if(j instanceof a75i&&i<f){await new Promise(k=>setTimeout(k,g));continue;}throw j;}throw h instanceof Error?h:new Error('Faucet\x20request\x20failed\x20after\x20retries');}async['sign_and_commit'](b,c,d){const e=await this['get_imp'](c);if(!e)return;const f=a75j['fromSecretKey'](e['secret']);if(!f)return;const g=await Config['Instance']()['network_get'](d),h=g+':'+e['address']['toLowerCase']();return Account['txLock'](h)['run'](async()=>{return new a75b({'url':a75e(g),'network':g})['signAndExecuteTransaction']({'transaction':b,'signer':f,'options':{'showObjectChanges':!![],'showEffects':!![],'showEvents':!![]}});});}async['refund_coin'](a,b,c){const d=await this['get_address'](c);if(!d)a75d('invalid\x20parameter','Invalid\x20to\x20address\x20or\x20name\x20'+c);a['transferObjects']([b],a['pure']['address'](d));}async['transfer'](a,b,c,d,e){const [f,g]=await this['get_many_imp']([d,c]);if(!f)a75d('invalid\x20parameter','Invalid\x20from\x20address\x20or\x20name\x20'+d);const h=g?.['address']??c;if(!h)a75d('invalid\x20parameter','Invalid\x20to\x20address\x20or\x20name\x20'+c);const i=a75j['fromSecretKey'](f['secret']);if(i){const j=new a75c(),k=await this['get_coin_object'](j,a,b,d,e);if(k){j['transferObjects']([k],h);const l=await Config['Instance']()['network_get'](e);return new a75b({'url':a75e(l),'network':l})['signAndExecuteTransaction']({'transaction':j,'signer':i,'options':{'showObjectChanges':!![],'showEffects':!![],'showEvents':!![]}});}}}async['sign'](a,b){const c=await this['get_imp'](a);if(!c?.['secret'])a75d('invalid\x20parameter','Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const d=a75j['fromSecretKey'](c['secret']),e=typeof b==='string'?new TextEncoder()['encode'](b):b,f=await d['sign'](e);return'0x'+Buffer['from'](f)['toString']('hex');}async['signData'](a,b){const c=await this['get_imp'](a);if(!c?.['secret'])a75d('invalid\x20parameter','Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const d=a75j['fromSecretKey'](c['secret']),e=typeof b==='string'?new TextEncoder()['encode'](b):b,f=await d['sign'](e);return{'signature':'0x'+Buffer['from'](f)['toString']('hex'),'publicKey':d['getPublicKey']()['toWowPublicKey'](),'address':c['address']};}async['deriveX25519Identity'](a){const b=await this['get_imp'](a);if(!b?.['secret'])a75d('invalid\x20parameter','Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const c=a75f(b['secret'])['secretKey'],d=a75j['fromSecretKey'](b['secret'])['getPublicKey']()['toRawBytes'](),e=new TextEncoder()['encode']('WowokX25519IdentityDerivation'),f=hkdf(sha256,sha256(c),new Uint8Array(0x0),e,0x20);f[0x0]&=0xf8,f[0x1f]&=0x7f,f[0x1f]|=0x40;const g=x25519['getPublicKey'](f),h=g[0x0]<<0x8|g[0x1];return{'x25519KeyPair':{'publicKey':g,'privateKey':f},'falcon512KeyPair':{'publicKey':d,'privateKey':c},'registrationId':h===0x0?0x1:h};}async['set_messenger'](a,b){return Account['_dataLock']['run'](async()=>{const c=this['name_resolve'](a),d=await this['getStorage'](),e=await d['get']();if(!e)return![];const g=JSON['parse'](e),h=g['find'](j=>j['address']['toLowerCase']()===c['toLowerCase']()||Account['nameMatch'](j['name'],c));if(!h)return![];if(b){const j=g['filter'](k=>k['messenger']===!![]&&!k['suspended']&&k['address']!==h['address'])['length'];if(j>=0x14)a75d('invalid\x20parameter','Maximum\x2020\x20messenger\x20accounts\x20allowed,\x20current\x20count:\x20'+j);}const i=Date['now']();return h['messenger']=b,h['updatedAt']=i,await d['put'](JSON['stringify'](g)),!![];});}async['list_messenger_accounts'](){return this['list']({'hasMessenger':!![]});}async['count_messenger_accounts'](){const a=await(await this['getStorage']())['get']();if(!a)return 0x0;return JSON['parse'](a)['filter'](b=>b['messenger']===!![]&&!b['suspended'])['length'];}};export{Account,DEFAULT_ACCOUNT_NAME,MAX_ACCOUNTS,MAX_MESSENGER_ACCOUNTS};
@@ -1 +1 @@
1
- import{o as a80a}from'../../exception-o3XVk35a.mjs';import{r as a80b}from'../../mnemonics-C6qlqegr.mjs';import{d as a80c,r as a80d}from'../../storage-D1bEi2b7.mjs';import{SecureAccountStorage}from'./secure-storage.mjs';import{bytesToBigInt,bytesToHex,hexToBytes,isValidEvmAddress,privateKeyToAddress,signEIP1559,signLegacy,toChecksumAddress}from'./evm/rlp.mjs';import{EvmNetworkRegistry}from'./evm/networks.mjs';import{secp256k1}from'@noble/curves/secp256k1.js';import{HDKey}from'@scure/bip32';import{keccak_256}from'@noble/hashes/sha3.js';let rpcRequestId=0x0;async function ethRpcWithAbort(a,b,c,d){const e={'jsonrpc':'2.0','id':++rpcRequestId,'method':b,'params':c},f=await fetch(a,{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](e),'signal':d});if(!f['ok'])throw new Error('EVM\x20RPC\x20HTTP\x20'+f['status']+':\x20'+await f['text']());const g=await f['json']();if(g['error'])throw new Error('EVM\x20RPC\x20error:\x20'+g['error']['message']+'\x20(code\x20'+g['error']['code']+')');return g['result'];}var EvmAccount=class EvmAccount{static{this['_dataLock']=new a80c();}static{this['_storageLock']=new a80c();}['setStorage'](a){EvmAccount['storage']=a;}['setEncryptedStorage'](a){EvmAccount['storage']=new SecureAccountStorage(a);}async['_getStorage'](){if(EvmAccount['storage'])return EvmAccount['storage'];return EvmAccount['_storageLock']['run'](async()=>{if(!EvmAccount['storage'])EvmAccount['storage']=new SecureAccountStorage(new a80d(void 0x0,'evm_accounts'));return EvmAccount['storage'];});}async['unlock'](a){const b=await this['_getStorage']();if(!(b instanceof SecureAccountStorage))throw new Error('Current\x20storage\x20does\x20not\x20support\x20encryption.');b['setSessionPassword'](a),await b['get']();}async['lock'](){const a=await this['_getStorage']();if(a instanceof SecureAccountStorage)a['setSessionPassword'](void 0x0);}async['setEncryptionPassword'](a){const b=await this['_getStorage']();if(!(b instanceof SecureAccountStorage))throw new Error('Current\x20storage\x20does\x20not\x20support\x20encryption.');await b['setPassword'](a);}async['changeEncryptionPassword'](a,b){const c=await this['_getStorage']();if(!(c instanceof SecureAccountStorage))throw new Error('Current\x20storage\x20does\x20not\x20support\x20encryption.');await c['changePassword'](a,b);}async['removeEncryptionPassword'](a){const b=await this['_getStorage']();if(!(b instanceof SecureAccountStorage))throw new Error('Current\x20storage\x20does\x20not\x20support\x20encryption.');await b['removePassword'](a);}async['getEncryptionMode'](){const a=await this['_getStorage']();if(a instanceof SecureAccountStorage)return a['getMode']();}async['isPasswordSet'](){return await this['getEncryptionMode']()==='password';}async['getMcpAccess'](){const a=await this['_getStorage']();if(a instanceof SecureAccountStorage)return a['getMcpAccess']();return'allowed';}async['setMcpAccess'](a,b){const c=await this['_getStorage']();if(!(c instanceof SecureAccountStorage))throw new Error('Current\x20storage\x20does\x20not\x20support\x20encryption.');await c['setMcpAccess'](a,b);}static['Instance'](){if(EvmAccount['_instance'])return EvmAccount['_instance'];if(!EvmAccount['_instance'])EvmAccount['_instance']=new EvmAccount();return EvmAccount['_instance'];}async['_readAll'](){const a=await this['_getStorage'](),b=await a['get']();if(!b)return[];const c=JSON['parse'](b);let d=[],e=![];if(Array['isArray'](c))d=c['map'](f=>({'address':f['address'],'name':f['name'],'pubkey':f['pubkey'],'secret':f['secret'],'isActive':f['isActive'],'createdAt':f['createdAt'],'updatedAt':f['updatedAt']})),d['length']>0x0&&!d['some'](f=>f['isActive']===!![])&&(d[0x0]['isActive']=!![],e=!![]);else c&&typeof c==='object'&&(d=[{'address':c['address'],'name':c['name'],'pubkey':c['pubkey'],'secret':c['secret'],'isActive':!![],'createdAt':c['createdAt'],'updatedAt':c['updatedAt']}],e=!![]);if(e)await a['put'](JSON['stringify'](d));return d;}async['_writeAll'](a){await(await this['_getStorage']())['put'](JSON['stringify'](a));}['_findActive'](a){return a['find'](b=>b['isActive']===!![]);}['_sanitize'](a,b=![],c=![]){const {secret:d,...e}=a,f=c?a:e;if(!b){const {pubkey:g,...h}=f;return h;}return f;}async['_get'](a=![]){const b=await this['_readAll'](),c=this['_findActive'](b);if(!c)return void 0x0;return this['_sanitize'](c,a);}async['_getWithSecret'](){const a=await this['_readAll'](),b=this['_findActive'](a);if(!b||!b['secret'])a80a('account\x20not\x20found','No\x20active\x20EVM\x20account\x20with\x20secret.\x20Call\x20active()\x20first\x20to\x20auto-generate\x20one.');return b;}async['_upsertAsActive'](a){const b=await this['_readAll']();b['forEach'](d=>{if(d['address']!==a['address'])d['isActive']=![];});const c=b['findIndex'](d=>d['address']['toLowerCase']()===a['address']['toLowerCase']());if(c!==-0x1)b[c]={...a,'isActive':!![]};else b['push']({...a,'isActive':!![]});await this['_writeAll'](b);}async['resolveNetwork'](a,b){const c=EvmNetworkRegistry['Instance']();if(b){const e=await c['resolve'](b);return{'cfg':e,'url':c['pickHealthyRpc'](e)||b};}const d=await c['resolve'](a);return{'cfg':d,'url':c['pickHealthyRpc'](d)};}async['rpcWithFailover'](a,b,c){const d=EvmNetworkRegistry['Instance']();let f;const g=a['rpcTimeoutMs']??0x2710;for(const h of a['rpcUrls'])try{const i=new AbortController(),j=setTimeout(()=>i['abort'](),g);try{const k=await ethRpcWithAbort(h,b,c,i['signal']);return d['markHealthy'](h),k;}finally{clearTimeout(j);}}catch(l){f=l,d['markUnhealthy'](h);}throw f instanceof Error?f:new Error('All\x20RPCs\x20failed\x20for\x20'+b);}async['gen'](a=![]){return EvmAccount['_dataLock']['run'](async()=>{const b=secp256k1['utils']['randomSecretKey'](),c='0x'+bytesToHex(b),d=privateKeyToAddress(b),e=Date['now'](),f={'address':d,'secret':c,'isActive':!![],'createdAt':e,'updatedAt':e};if(a)f['pubkey']='0x'+bytesToHex(secp256k1['getPublicKey'](b,!![]));return await this['_upsertAsActive'](f),this['_sanitize'](f,a);});}async['importPrivateKey'](a,b=![]){return EvmAccount['_dataLock']['run'](async()=>{const c=a['startsWith']('0x')?a['slice'](0x2):a;if(c['length']!==0x40)a80a('invalid\x20parameter','Private\x20key\x20must\x20be\x2032\x20bytes\x20(64\x20hex\x20chars),\x20got\x20'+c['length']+'\x20chars');const d='0x'+c,e=hexToBytes(d),f=privateKeyToAddress(e),g=Date['now'](),h={'address':f,'secret':d,'isActive':!![],'createdAt':g,'updatedAt':g};if(b)h['pubkey']='0x'+bytesToHex(secp256k1['getPublicKey'](e,!![]));return await this['_upsertAsActive'](h),this['_sanitize'](h,b);});}async['importMnemonic'](a,b,c=![]){return EvmAccount['_dataLock']['run'](async()=>{const d=a80b(a),e=HDKey['fromMasterSeed'](d),f=b||'m/44\x27/60\x27/0\x27/0/0',g=e['derive'](f);if(!g['privateKey'])a80a('invalid\x20parameter','Failed\x20to\x20derive\x20private\x20key\x20from\x20mnemonic');const h='0x'+bytesToHex(g['privateKey']),i=hexToBytes(h),j=privateKeyToAddress(i),k=Date['now'](),l={'address':j,'secret':h,'isActive':!![],'createdAt':k,'updatedAt':k};if(c)l['pubkey']='0x'+bytesToHex(secp256k1['getPublicKey'](i,!![]));return await this['_upsertAsActive'](l),this['_sanitize'](l,c);});}async['active'](a=![]){const b=await this['_get'](a);if(b)return b;return this['gen'](a);}async['list'](a){let b=(await this['_readAll']())['slice']();if(a?.['isActive']!==void 0x0)b=b['filter'](c=>a['isActive']?c['isActive']===!![]:c['isActive']!==!![]);if(a?.['createdAt']){if(a['createdAt']['gte']!==void 0x0)b=b['filter'](c=>c['createdAt']&&c['createdAt']>=a['createdAt']['gte']);if(a['createdAt']['lte']!==void 0x0)b=b['filter'](c=>c['createdAt']&&c['createdAt']<=a['createdAt']['lte']);}if(a?.['updatedAt']){if(a['updatedAt']['gte']!==void 0x0)b=b['filter'](c=>c['updatedAt']&&c['updatedAt']>=a['updatedAt']['gte']);if(a['updatedAt']['lte']!==void 0x0)b=b['filter'](c=>c['updatedAt']&&c['updatedAt']<=a['updatedAt']['lte']);}if(a?.['name']!=null||a?.['address'])b=b['map'](c=>{let d=0x0;if(a?.['name']!=null){const e=(c['name']||'')['toLowerCase'](),f=a['name']['toLowerCase']();if(e===f)d+=0x64;else{if(e['startsWith'](f))d+=0x32;else{if(e['includes'](f))d+=0x19;}}}if(a?.['address']){const g=c['address']['toLowerCase'](),h=a['address']['toLowerCase']();if(g===h)d+=0x64;else{if(g['startsWith'](h))d+=0x32;else{if(g['includes'](h))d+=0x19;}}}if((a?.['name']||a?.['address'])&&d===0x0)d=-0x1;return{'a':c,'score':d};})['filter'](c=>c['score']>=0x0)['sort']((c,d)=>d['score']-c['score'])['map'](c=>c['a']);else b['sort']((c,d)=>{if(c['isActive']===!![]&&d['isActive']!==!![])return-0x1;if(c['isActive']!==!![]&&d['isActive']===!![])return 0x1;return 0x0;});return b['map'](c=>this['_sanitize'](c,a?.['includePubkey']));}async['setActive'](a){return EvmAccount['_dataLock']['run'](async()=>{const b=await this['_readAll'](),c=b['find'](d=>d['address']['toLowerCase']()===a['toLowerCase']());if(!c)return![];return b['forEach'](d=>{d['isActive']=d['address']===c['address'];}),c['updatedAt']=Date['now'](),await this['_writeAll'](b),!![];});}async['rename'](a,b){return EvmAccount['_dataLock']['run'](async()=>{const c=await this['_readAll'](),d=c['find'](f=>f['address']['toLowerCase']()===a['toLowerCase']());if(!d)return![];const e=Date['now']();return d['name']=b,d['updatedAt']=e,await this['_writeAll'](c),!![];});}async['del'](a){return EvmAccount['_dataLock']['run'](async()=>{const b=await this['_readAll'](),c=b['findIndex'](e=>e['address']['toLowerCase']()===a['toLowerCase']());if(c===-0x1)return![];const d=b[c]['isActive']===!![];return b['splice'](c,0x1),d&&b['length']>0x0&&!b['some'](e=>e['isActive']===!![])&&(b[0x0]['isActive']=!![],b[0x0]['updatedAt']=Date['now']()),await this['_writeAll'](b),!![];});}async['getByNameOrAddress'](a,b=![],c=![]){const d=await this['_readAll'](),e=a['toLowerCase'](),f=d['find'](g=>g['address']['toLowerCase']()===e||g['name']&&g['name']['toLowerCase']()===e);if(!f)return void 0x0;return this['_sanitize'](f,b,c);}async['exportSecret'](a){return(await this['getByNameOrAddress'](a,![],!![]))?.['secret'];}async['balance'](b,c){const d=await this['_get']();if(!d)return void 0x0;const {cfg:e}=await this['resolveNetwork'](b,c),f=await this['rpcWithFailover'](e,'eth_getBalance',[d['address'],'latest']);return BigInt(f);}async['balanceOf'](b,c,d){const e=await this['_get']();if(!e)return void 0x0;const {cfg:f}=await this['resolveNetwork'](c,d),g='0x70a08231'+e['address']['slice'](0x2)['toLowerCase']()['padStart'](0x40,'0'),h=await this['rpcWithFailover'](f,'eth_call',[{'to':b,'data':g},'latest']);return BigInt(h);}async['getNonce'](b,c){const d=await this['_get']();if(!d)return void 0x0;const {cfg:e}=await this['resolveNetwork'](b,c),f=await this['rpcWithFailover'](e,'eth_getTransactionCount',[d['address'],'pending']);return parseInt(f,0x10);}async['getChainId'](a,b){const {cfg:c}=await this['resolveNetwork'](a,b),d=await this['rpcWithFailover'](c,'eth_chainId',[]);return parseInt(d,0x10);}async['getBlockNumber'](a,b){const {cfg:c}=await this['resolveNetwork'](a,b),d=await this['rpcWithFailover'](c,'eth_blockNumber',[]);return BigInt(d);}async['ethCall'](b,c,d){const e=await this['_get']();if(!e)a80a('account\x20not\x20found','No\x20active\x20EVM\x20account');const f=b['network']??c,{cfg:g}=await this['resolveNetwork'](f,d??b['rpcUrl']);return await this['rpcWithFailover'](g,'eth_call',[{'from':e['address'],'to':b['to'],'data':b['data']??'0x','value':'0x'+(b['value']??0x0n)['toString'](0x10)},'latest']);}['guessGasLimit'](a){const b=a['data']??'';if(b['startsWith']('0x9c3ecefb'))return 0x927c0n;if(b['startsWith']('0x095ea7b3'))return 0x186a0n;if(b['startsWith']('0xb4b7068c'))return 0x3d090n;if(b['startsWith']('0x0bdba58b'))return 0x493e0n;return 0x61a80n;}async['estimateGas'](b,c,d){const e=await this['_get']();if(!e)a80a('account\x20not\x20found','No\x20active\x20EVM\x20account');const f=b['network']??c,{cfg:g}=await this['resolveNetwork'](f,d??b['rpcUrl']),h=await this['rpcWithFailover'](g,'eth_estimateGas',[{'from':e['address'],'to':b['to'],'data':b['data']??'0x','value':'0x'+(b['value']??0x0n)['toString'](0x10)}]);return BigInt(h);}async['safeEstimateGas'](a){if(!await this['_get']())a80a('account\x20not\x20found','No\x20active\x20EVM\x20account');const {cfg:b}=await this['resolveNetwork'](a['network'],a['rpcUrl']);let c;try{await this['ethCall'](a);}catch(d){return c=extractRevertReason(d),{'gasLimit':this['guessGasLimit'](a),'revertReason':c||'eth_call\x20failed'};}try{const f=await this['estimateGas'](a),g=b['gasLimitMultiplier']??1.2;return{'gasLimit':BigInt(Math['ceil'](Number(f)*g))};}catch(h){return c=extractRevertReason(h),console['warn']('[safeEstimateGas]\x20estimateGas\x20failed,\x20using\x20fallback\x20gasLimit='+this['guessGasLimit'](a),c?'revert:\x20'+c:''),{'gasLimit':this['guessGasLimit'](a),'revertReason':c};}}async['getFeeData'](a,b){const {cfg:c}=await this['resolveNetwork'](a,b),d=await this['rpcWithFailover'](c,'eth_feeHistory',['0x5','latest',[0x32]]),e=BigInt(d['baseFeePerGas'][0x0]),f=BigInt(d['reward'][0x0][0x0]),g=c['minPriorityFee']??0x0n,h=f<g?g:f;return{'maxFeePerGas':e*0x2n+h,'maxPriorityFeePerGas':h};}async['sign_and_send'](b,c){const d=await this['_getWithSecret']();if(!d||!d['secret'])a80a('account\x20not\x20found','No\x20active\x20EVM\x20account\x20with\x20secret');const {cfg:e,url:f}=await this['resolveNetwork'](b['network'],c??b['rpcUrl']),g=b['chainId']??e['chainId'],h=hexToBytes(d['secret']['slice'](0x2)),i=b['nonce']??await this['getNonce'](e['chainId'],f);let {maxFeePerGas:j,maxPriorityFeePerGas:k,gasPrice:l}=b;e['useLegacy']&&!l&&(l=(await this['getFeeData'](e['chainId'],f))['maxFeePerGas'],j=void 0x0,k=void 0x0);if(!j&&!k&&!l){const r=await this['getFeeData'](e['chainId'],f);j=r['maxFeePerGas'],k=r['maxPriorityFeePerGas'];}let m=b['gasLimit'];if(!m){const s=await this['safeEstimateGas'](b);m=s['gasLimit'],s['revertReason'];}const n=hexToBytes(b['to']['slice'](0x2)),o=b['data']?hexToBytes(b['data']['slice'](0x2)):new Uint8Array(0x0);let p;if(l)p=signLegacy({'to':n,'data':o,'value':b['value']??0x0n,'nonce':i,'chainId':g,'gasPrice':l,'gasLimit':m},h);else p=signEIP1559({'to':n,'data':o,'value':b['value']??0x0n,'nonce':i,'chainId':g,'maxFeePerGas':j,'maxPriorityFeePerGas':k,'gasLimit':m},h);const q=await this['rpcWithFailover'](e,'eth_sendRawTransaction',[p]);return await this['waitForReceipt'](q,e['chainId'],f);}async['waitForReceipt'](a,b,c,d){const {cfg:e,url:f}=await this['resolveNetwork'](b,c),g=d??e['txConfirmTimeoutMs']??0x1d4c0,h=e['pollIntervalMs']??0xbb8,i=Date['now']()+g;while(Date['now']()<i){const j=await this['rpcWithFailover'](e,'eth_getTransactionReceipt',[a]);if(j)return this['parseReceipt'](j);await new Promise(k=>setTimeout(k,h));}a80a('fail','Transaction\x20'+a+'\x20not\x20confirmed\x20within\x20'+g+'ms');}['parseReceipt'](a){return{'transactionHash':a['transactionHash'],'blockNumber':BigInt(a['blockNumber']),'blockHash':a['blockHash'],'status':a['status']??'0x0','gasUsed':BigInt(a['gasUsed']),'effectiveGasPrice':BigInt(a['effectiveGasPrice']),'from':a['from'],'to':a['to'],'contractAddress':a['contractAddress']??void 0x0,'logs':(a['logs']??[])['map'](b=>({'address':b['address'],'topics':b['topics']??[],'data':b['data']??'0x','blockNumber':BigInt(b['blockNumber']),'transactionHash':b['transactionHash'],'transactionIndex':b['transactionIndex'],'logIndex':b['logIndex'],'removed':b['removed']??![]}))};}async['signData'](a){const b=await this['_getWithSecret'](),c=hexToBytes(b['secret']['slice'](0x2)),d=typeof a==='string'?new TextEncoder()['encode'](a):a,e='\x19Ethereum\x20Signed\x20Message:\x0a'+d['length'],f=new Uint8Array(e['length']+d['length']);f['set'](new TextEncoder()['encode'](e),0x0),f['set'](d,e['length']);const g=keccak_256(f),h=secp256k1['sign'](g,c,{'format':'recovered','prehash':![]}),i=0x1b+h[0x0],j=new Uint8Array(0x41);j['set'](h['subarray'](0x1,0x21),0x0),j['set'](h['subarray'](0x21,0x41),0x20),j[0x40]=i;const k=secp256k1['getPublicKey'](c,!![]);return{'signature':'0x'+bytesToHex(j),'publicKey':'0x'+bytesToHex(k),'address':b['address']};}async['transfer'](a){await this['_getWithSecret']();if(!isValidEvmAddress(a['to']))a80a('invalid\x20parameter','Invalid\x20EVM\x20recipient\x20address:\x20'+a['to']);if(a['amount']<=0x0n)a80a('invalid\x20parameter','amount\x20must\x20be\x20positive');const b=!!a['tokenAddress'];if(b){const e=await this['balanceOf'](a['tokenAddress'],a['network'],a['rpcUrl']);if(e===void 0x0||e<a['amount'])a80a('fail','Insufficient\x20ERC20\x20balance:\x20have\x20'+(e??0x0n)+',\x20need\x20'+a['amount']);}else{const f=await this['balance'](a['network'],a['rpcUrl']);if(f===void 0x0||f<a['amount'])a80a('fail','Insufficient\x20ETH\x20balance:\x20have\x20'+(f??0x0n)+',\x20need\x20'+a['amount']);}let c;if(b){const g='0xa9059cbb'+a['to']['slice'](0x2)['toLowerCase']()['padStart'](0x40,'0')+a['amount']['toString'](0x10)['padStart'](0x40,'0');c={'to':a['tokenAddress'],'value':0x0n,'data':g,'network':a['network'],'rpcUrl':a['rpcUrl']};}else c={'to':a['to'],'value':a['amount'],'data':'0x','network':a['network'],'rpcUrl':a['rpcUrl']};const d=await this['sign_and_send'](c,a['rpcUrl']);if(d['status']!=='0x1')a80a('fail','EVM\x20transfer\x20reverted:\x20txHash='+d['transactionHash']);return d;}async['withdrawFromActive'](a){return this['transfer']({...a});}};function extractRevertReason(a){if(!a)return void 0x0;const b=typeof a==='string'?a:a?.['message']??a?.['toString']?.()??'',c=b['match'](/execution reverted:\s*(.+?)(?:\.|$)/i);if(c)return c[0x1]['trim']();const d=b['match'](/reverted with reason string\s*'([^']+)'/i);if(d)return d[0x1];const e=b['match'](/reverted with panic code\s*(0x[0-9a-f]+)/i);if(e)return'panic:\x20'+e[0x1];if(/stack underflow/i['test'](b))return'stack\x20underflow\x20(calldata\x20encoding\x20error)';if(/stack overflow/i['test'](b))return'stack\x20overflow';if(/out of gas/i['test'](b))return'out\x20of\x20gas';return b['length']>0xc8?b['slice'](0x0,0xc8)+'...':b;}export{EvmAccount,bytesToBigInt,bytesToHex,hexToBytes,isValidEvmAddress,privateKeyToAddress,signEIP1559,signLegacy,toChecksumAddress};
1
+ import{o as a80a}from'../../exception-D2n4LV8F.mjs';import{r as a80b}from'../../mnemonics-C6qlqegr.mjs';import{d as a80c,r as a80d}from'../../storage-D1bEi2b7.mjs';import{SecureAccountStorage}from'./secure-storage.mjs';import{bytesToBigInt,bytesToHex,hexToBytes,isValidEvmAddress,privateKeyToAddress,signEIP1559,signLegacy,toChecksumAddress}from'./evm/rlp.mjs';import{EvmNetworkRegistry}from'./evm/networks.mjs';import{secp256k1}from'@noble/curves/secp256k1.js';import{HDKey}from'@scure/bip32';import{keccak_256}from'@noble/hashes/sha3.js';let rpcRequestId=0x0;async function ethRpcWithAbort(a,b,c,d){const e={'jsonrpc':'2.0','id':++rpcRequestId,'method':b,'params':c},f=await fetch(a,{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](e),'signal':d});if(!f['ok'])throw new Error('EVM\x20RPC\x20HTTP\x20'+f['status']+':\x20'+await f['text']());const g=await f['json']();if(g['error'])throw new Error('EVM\x20RPC\x20error:\x20'+g['error']['message']+'\x20(code\x20'+g['error']['code']+')');return g['result'];}var EvmAccount=class EvmAccount{static{this['_dataLock']=new a80c();}static{this['_storageLock']=new a80c();}['setStorage'](a){EvmAccount['storage']=a;}['setEncryptedStorage'](a){EvmAccount['storage']=new SecureAccountStorage(a);}async['_getStorage'](){if(EvmAccount['storage'])return EvmAccount['storage'];return EvmAccount['_storageLock']['run'](async()=>{if(!EvmAccount['storage'])EvmAccount['storage']=new SecureAccountStorage(new a80d(void 0x0,'evm_accounts'));return EvmAccount['storage'];});}async['unlock'](a){const b=await this['_getStorage']();if(!(b instanceof SecureAccountStorage))throw new Error('Current\x20storage\x20does\x20not\x20support\x20encryption.');b['setSessionPassword'](a),await b['get']();}async['lock'](){const a=await this['_getStorage']();if(a instanceof SecureAccountStorage)a['setSessionPassword'](void 0x0);}async['setEncryptionPassword'](a){const b=await this['_getStorage']();if(!(b instanceof SecureAccountStorage))throw new Error('Current\x20storage\x20does\x20not\x20support\x20encryption.');await b['setPassword'](a);}async['changeEncryptionPassword'](a,b){const c=await this['_getStorage']();if(!(c instanceof SecureAccountStorage))throw new Error('Current\x20storage\x20does\x20not\x20support\x20encryption.');await c['changePassword'](a,b);}async['removeEncryptionPassword'](a){const b=await this['_getStorage']();if(!(b instanceof SecureAccountStorage))throw new Error('Current\x20storage\x20does\x20not\x20support\x20encryption.');await b['removePassword'](a);}async['getEncryptionMode'](){const a=await this['_getStorage']();if(a instanceof SecureAccountStorage)return a['getMode']();}async['isPasswordSet'](){return await this['getEncryptionMode']()==='password';}async['getMcpAccess'](){const a=await this['_getStorage']();if(a instanceof SecureAccountStorage)return a['getMcpAccess']();return'allowed';}async['setMcpAccess'](a,b){const c=await this['_getStorage']();if(!(c instanceof SecureAccountStorage))throw new Error('Current\x20storage\x20does\x20not\x20support\x20encryption.');await c['setMcpAccess'](a,b);}static['Instance'](){if(EvmAccount['_instance'])return EvmAccount['_instance'];if(!EvmAccount['_instance'])EvmAccount['_instance']=new EvmAccount();return EvmAccount['_instance'];}async['_readAll'](){const a=await this['_getStorage'](),b=await a['get']();if(!b)return[];const c=JSON['parse'](b);let d=[],e=![];if(Array['isArray'](c))d=c['map'](f=>({'address':f['address'],'name':f['name'],'pubkey':f['pubkey'],'secret':f['secret'],'isActive':f['isActive'],'createdAt':f['createdAt'],'updatedAt':f['updatedAt']})),d['length']>0x0&&!d['some'](f=>f['isActive']===!![])&&(d[0x0]['isActive']=!![],e=!![]);else c&&typeof c==='object'&&(d=[{'address':c['address'],'name':c['name'],'pubkey':c['pubkey'],'secret':c['secret'],'isActive':!![],'createdAt':c['createdAt'],'updatedAt':c['updatedAt']}],e=!![]);if(e)await a['put'](JSON['stringify'](d));return d;}async['_writeAll'](a){await(await this['_getStorage']())['put'](JSON['stringify'](a));}['_findActive'](a){return a['find'](b=>b['isActive']===!![]);}['_sanitize'](a,b=![],c=![]){const {secret:d,...e}=a,f=c?a:e;if(!b){const {pubkey:g,...h}=f;return h;}return f;}async['_get'](a=![]){const b=await this['_readAll'](),c=this['_findActive'](b);if(!c)return void 0x0;return this['_sanitize'](c,a);}async['_getWithSecret'](){const a=await this['_readAll'](),b=this['_findActive'](a);if(!b||!b['secret'])a80a('account\x20not\x20found','No\x20active\x20EVM\x20account\x20with\x20secret.\x20Call\x20active()\x20first\x20to\x20auto-generate\x20one.');return b;}async['_upsertAsActive'](a){const b=await this['_readAll']();b['forEach'](d=>{if(d['address']!==a['address'])d['isActive']=![];});const c=b['findIndex'](d=>d['address']['toLowerCase']()===a['address']['toLowerCase']());if(c!==-0x1)b[c]={...a,'isActive':!![]};else b['push']({...a,'isActive':!![]});await this['_writeAll'](b);}async['resolveNetwork'](a,b){const c=EvmNetworkRegistry['Instance']();if(b){const e=await c['resolve'](b);return{'cfg':e,'url':c['pickHealthyRpc'](e)||b};}const d=await c['resolve'](a);return{'cfg':d,'url':c['pickHealthyRpc'](d)};}async['rpcWithFailover'](a,b,c){const d=EvmNetworkRegistry['Instance']();let f;const g=a['rpcTimeoutMs']??0x2710;for(const h of a['rpcUrls'])try{const i=new AbortController(),j=setTimeout(()=>i['abort'](),g);try{const k=await ethRpcWithAbort(h,b,c,i['signal']);return d['markHealthy'](h),k;}finally{clearTimeout(j);}}catch(l){f=l,d['markUnhealthy'](h);}throw f instanceof Error?f:new Error('All\x20RPCs\x20failed\x20for\x20'+b);}async['gen'](a=![]){return EvmAccount['_dataLock']['run'](async()=>{const b=secp256k1['utils']['randomSecretKey'](),c='0x'+bytesToHex(b),d=privateKeyToAddress(b),e=Date['now'](),f={'address':d,'secret':c,'isActive':!![],'createdAt':e,'updatedAt':e};if(a)f['pubkey']='0x'+bytesToHex(secp256k1['getPublicKey'](b,!![]));return await this['_upsertAsActive'](f),this['_sanitize'](f,a);});}async['importPrivateKey'](a,b=![]){return EvmAccount['_dataLock']['run'](async()=>{const c=a['startsWith']('0x')?a['slice'](0x2):a;if(c['length']!==0x40)a80a('invalid\x20parameter','Private\x20key\x20must\x20be\x2032\x20bytes\x20(64\x20hex\x20chars),\x20got\x20'+c['length']+'\x20chars');const d='0x'+c,e=hexToBytes(d),f=privateKeyToAddress(e),g=Date['now'](),h={'address':f,'secret':d,'isActive':!![],'createdAt':g,'updatedAt':g};if(b)h['pubkey']='0x'+bytesToHex(secp256k1['getPublicKey'](e,!![]));return await this['_upsertAsActive'](h),this['_sanitize'](h,b);});}async['importMnemonic'](a,b,c=![]){return EvmAccount['_dataLock']['run'](async()=>{const d=a80b(a),e=HDKey['fromMasterSeed'](d),f=b||'m/44\x27/60\x27/0\x27/0/0',g=e['derive'](f);if(!g['privateKey'])a80a('invalid\x20parameter','Failed\x20to\x20derive\x20private\x20key\x20from\x20mnemonic');const h='0x'+bytesToHex(g['privateKey']),i=hexToBytes(h),j=privateKeyToAddress(i),k=Date['now'](),l={'address':j,'secret':h,'isActive':!![],'createdAt':k,'updatedAt':k};if(c)l['pubkey']='0x'+bytesToHex(secp256k1['getPublicKey'](i,!![]));return await this['_upsertAsActive'](l),this['_sanitize'](l,c);});}async['active'](a=![]){const b=await this['_get'](a);if(b)return b;return this['gen'](a);}async['list'](a){let b=(await this['_readAll']())['slice']();if(a?.['isActive']!==void 0x0)b=b['filter'](c=>a['isActive']?c['isActive']===!![]:c['isActive']!==!![]);if(a?.['createdAt']){if(a['createdAt']['gte']!==void 0x0)b=b['filter'](c=>c['createdAt']&&c['createdAt']>=a['createdAt']['gte']);if(a['createdAt']['lte']!==void 0x0)b=b['filter'](c=>c['createdAt']&&c['createdAt']<=a['createdAt']['lte']);}if(a?.['updatedAt']){if(a['updatedAt']['gte']!==void 0x0)b=b['filter'](c=>c['updatedAt']&&c['updatedAt']>=a['updatedAt']['gte']);if(a['updatedAt']['lte']!==void 0x0)b=b['filter'](c=>c['updatedAt']&&c['updatedAt']<=a['updatedAt']['lte']);}if(a?.['name']!=null||a?.['address'])b=b['map'](c=>{let d=0x0;if(a?.['name']!=null){const e=(c['name']||'')['toLowerCase'](),f=a['name']['toLowerCase']();if(e===f)d+=0x64;else{if(e['startsWith'](f))d+=0x32;else{if(e['includes'](f))d+=0x19;}}}if(a?.['address']){const g=c['address']['toLowerCase'](),h=a['address']['toLowerCase']();if(g===h)d+=0x64;else{if(g['startsWith'](h))d+=0x32;else{if(g['includes'](h))d+=0x19;}}}if((a?.['name']||a?.['address'])&&d===0x0)d=-0x1;return{'a':c,'score':d};})['filter'](c=>c['score']>=0x0)['sort']((c,d)=>d['score']-c['score'])['map'](c=>c['a']);else b['sort']((c,d)=>{if(c['isActive']===!![]&&d['isActive']!==!![])return-0x1;if(c['isActive']!==!![]&&d['isActive']===!![])return 0x1;return 0x0;});return b['map'](c=>this['_sanitize'](c,a?.['includePubkey']));}async['setActive'](a){return EvmAccount['_dataLock']['run'](async()=>{const b=await this['_readAll'](),c=b['find'](d=>d['address']['toLowerCase']()===a['toLowerCase']());if(!c)return![];return b['forEach'](d=>{d['isActive']=d['address']===c['address'];}),c['updatedAt']=Date['now'](),await this['_writeAll'](b),!![];});}async['rename'](a,b){return EvmAccount['_dataLock']['run'](async()=>{const c=await this['_readAll'](),d=c['find'](f=>f['address']['toLowerCase']()===a['toLowerCase']());if(!d)return![];const e=Date['now']();return d['name']=b,d['updatedAt']=e,await this['_writeAll'](c),!![];});}async['del'](a){return EvmAccount['_dataLock']['run'](async()=>{const b=await this['_readAll'](),c=b['findIndex'](e=>e['address']['toLowerCase']()===a['toLowerCase']());if(c===-0x1)return![];const d=b[c]['isActive']===!![];return b['splice'](c,0x1),d&&b['length']>0x0&&!b['some'](e=>e['isActive']===!![])&&(b[0x0]['isActive']=!![],b[0x0]['updatedAt']=Date['now']()),await this['_writeAll'](b),!![];});}async['getByNameOrAddress'](a,b=![],c=![]){const d=await this['_readAll'](),e=a['toLowerCase'](),f=d['find'](g=>g['address']['toLowerCase']()===e||g['name']&&g['name']['toLowerCase']()===e);if(!f)return void 0x0;return this['_sanitize'](f,b,c);}async['exportSecret'](a){return(await this['getByNameOrAddress'](a,![],!![]))?.['secret'];}async['balance'](b,c){const d=await this['_get']();if(!d)return void 0x0;const {cfg:e}=await this['resolveNetwork'](b,c),f=await this['rpcWithFailover'](e,'eth_getBalance',[d['address'],'latest']);return BigInt(f);}async['balanceOf'](b,c,d){const e=await this['_get']();if(!e)return void 0x0;const {cfg:f}=await this['resolveNetwork'](c,d),g='0x70a08231'+e['address']['slice'](0x2)['toLowerCase']()['padStart'](0x40,'0'),h=await this['rpcWithFailover'](f,'eth_call',[{'to':b,'data':g},'latest']);return BigInt(h);}async['getNonce'](b,c){const d=await this['_get']();if(!d)return void 0x0;const {cfg:e}=await this['resolveNetwork'](b,c),f=await this['rpcWithFailover'](e,'eth_getTransactionCount',[d['address'],'pending']);return parseInt(f,0x10);}async['getChainId'](a,b){const {cfg:c}=await this['resolveNetwork'](a,b),d=await this['rpcWithFailover'](c,'eth_chainId',[]);return parseInt(d,0x10);}async['getBlockNumber'](a,b){const {cfg:c}=await this['resolveNetwork'](a,b),d=await this['rpcWithFailover'](c,'eth_blockNumber',[]);return BigInt(d);}async['ethCall'](b,c,d){const e=await this['_get']();if(!e)a80a('account\x20not\x20found','No\x20active\x20EVM\x20account');const f=b['network']??c,{cfg:g}=await this['resolveNetwork'](f,d??b['rpcUrl']);return await this['rpcWithFailover'](g,'eth_call',[{'from':e['address'],'to':b['to'],'data':b['data']??'0x','value':'0x'+(b['value']??0x0n)['toString'](0x10)},'latest']);}['guessGasLimit'](a){const b=a['data']??'';if(b['startsWith']('0x9c3ecefb'))return 0x927c0n;if(b['startsWith']('0x095ea7b3'))return 0x186a0n;if(b['startsWith']('0xb4b7068c'))return 0x3d090n;if(b['startsWith']('0x0bdba58b'))return 0x493e0n;return 0x61a80n;}async['estimateGas'](b,c,d){const e=await this['_get']();if(!e)a80a('account\x20not\x20found','No\x20active\x20EVM\x20account');const f=b['network']??c,{cfg:g}=await this['resolveNetwork'](f,d??b['rpcUrl']),h=await this['rpcWithFailover'](g,'eth_estimateGas',[{'from':e['address'],'to':b['to'],'data':b['data']??'0x','value':'0x'+(b['value']??0x0n)['toString'](0x10)}]);return BigInt(h);}async['safeEstimateGas'](a){if(!await this['_get']())a80a('account\x20not\x20found','No\x20active\x20EVM\x20account');const {cfg:b}=await this['resolveNetwork'](a['network'],a['rpcUrl']);let c;try{await this['ethCall'](a);}catch(d){return c=extractRevertReason(d),{'gasLimit':this['guessGasLimit'](a),'revertReason':c||'eth_call\x20failed'};}try{const f=await this['estimateGas'](a),g=b['gasLimitMultiplier']??1.2;return{'gasLimit':BigInt(Math['ceil'](Number(f)*g))};}catch(h){return c=extractRevertReason(h),console['warn']('[safeEstimateGas]\x20estimateGas\x20failed,\x20using\x20fallback\x20gasLimit='+this['guessGasLimit'](a),c?'revert:\x20'+c:''),{'gasLimit':this['guessGasLimit'](a),'revertReason':c};}}async['getFeeData'](a,b){const {cfg:c}=await this['resolveNetwork'](a,b),d=await this['rpcWithFailover'](c,'eth_feeHistory',['0x5','latest',[0x32]]),e=BigInt(d['baseFeePerGas'][0x0]),f=BigInt(d['reward'][0x0][0x0]),g=c['minPriorityFee']??0x0n,h=f<g?g:f;return{'maxFeePerGas':e*0x2n+h,'maxPriorityFeePerGas':h};}async['sign_and_send'](b,c){const d=await this['_getWithSecret']();if(!d||!d['secret'])a80a('account\x20not\x20found','No\x20active\x20EVM\x20account\x20with\x20secret');const {cfg:e,url:f}=await this['resolveNetwork'](b['network'],c??b['rpcUrl']),g=b['chainId']??e['chainId'],h=hexToBytes(d['secret']['slice'](0x2)),i=b['nonce']??await this['getNonce'](e['chainId'],f);let {maxFeePerGas:j,maxPriorityFeePerGas:k,gasPrice:l}=b;e['useLegacy']&&!l&&(l=(await this['getFeeData'](e['chainId'],f))['maxFeePerGas'],j=void 0x0,k=void 0x0);if(!j&&!k&&!l){const r=await this['getFeeData'](e['chainId'],f);j=r['maxFeePerGas'],k=r['maxPriorityFeePerGas'];}let m=b['gasLimit'];if(!m){const s=await this['safeEstimateGas'](b);m=s['gasLimit'],s['revertReason'];}const n=hexToBytes(b['to']['slice'](0x2)),o=b['data']?hexToBytes(b['data']['slice'](0x2)):new Uint8Array(0x0);let p;if(l)p=signLegacy({'to':n,'data':o,'value':b['value']??0x0n,'nonce':i,'chainId':g,'gasPrice':l,'gasLimit':m},h);else p=signEIP1559({'to':n,'data':o,'value':b['value']??0x0n,'nonce':i,'chainId':g,'maxFeePerGas':j,'maxPriorityFeePerGas':k,'gasLimit':m},h);const q=await this['rpcWithFailover'](e,'eth_sendRawTransaction',[p]);return await this['waitForReceipt'](q,e['chainId'],f);}async['waitForReceipt'](a,b,c,d){const {cfg:e,url:f}=await this['resolveNetwork'](b,c),g=d??e['txConfirmTimeoutMs']??0x1d4c0,h=e['pollIntervalMs']??0xbb8,i=Date['now']()+g;while(Date['now']()<i){const j=await this['rpcWithFailover'](e,'eth_getTransactionReceipt',[a]);if(j)return this['parseReceipt'](j);await new Promise(k=>setTimeout(k,h));}a80a('fail','Transaction\x20'+a+'\x20not\x20confirmed\x20within\x20'+g+'ms');}['parseReceipt'](a){return{'transactionHash':a['transactionHash'],'blockNumber':BigInt(a['blockNumber']),'blockHash':a['blockHash'],'status':a['status']??'0x0','gasUsed':BigInt(a['gasUsed']),'effectiveGasPrice':BigInt(a['effectiveGasPrice']),'from':a['from'],'to':a['to'],'contractAddress':a['contractAddress']??void 0x0,'logs':(a['logs']??[])['map'](b=>({'address':b['address'],'topics':b['topics']??[],'data':b['data']??'0x','blockNumber':BigInt(b['blockNumber']),'transactionHash':b['transactionHash'],'transactionIndex':b['transactionIndex'],'logIndex':b['logIndex'],'removed':b['removed']??![]}))};}async['signData'](a){const b=await this['_getWithSecret'](),c=hexToBytes(b['secret']['slice'](0x2)),d=typeof a==='string'?new TextEncoder()['encode'](a):a,e='\x19Ethereum\x20Signed\x20Message:\x0a'+d['length'],f=new Uint8Array(e['length']+d['length']);f['set'](new TextEncoder()['encode'](e),0x0),f['set'](d,e['length']);const g=keccak_256(f),h=secp256k1['sign'](g,c,{'format':'recovered','prehash':![]}),i=0x1b+h[0x0],j=new Uint8Array(0x41);j['set'](h['subarray'](0x1,0x21),0x0),j['set'](h['subarray'](0x21,0x41),0x20),j[0x40]=i;const k=secp256k1['getPublicKey'](c,!![]);return{'signature':'0x'+bytesToHex(j),'publicKey':'0x'+bytesToHex(k),'address':b['address']};}async['transfer'](a){await this['_getWithSecret']();if(!isValidEvmAddress(a['to']))a80a('invalid\x20parameter','Invalid\x20EVM\x20recipient\x20address:\x20'+a['to']);if(a['amount']<=0x0n)a80a('invalid\x20parameter','amount\x20must\x20be\x20positive');const b=!!a['tokenAddress'];if(b){const e=await this['balanceOf'](a['tokenAddress'],a['network'],a['rpcUrl']);if(e===void 0x0||e<a['amount'])a80a('fail','Insufficient\x20ERC20\x20balance:\x20have\x20'+(e??0x0n)+',\x20need\x20'+a['amount']);}else{const f=await this['balance'](a['network'],a['rpcUrl']);if(f===void 0x0||f<a['amount'])a80a('fail','Insufficient\x20ETH\x20balance:\x20have\x20'+(f??0x0n)+',\x20need\x20'+a['amount']);}let c;if(b){const g='0xa9059cbb'+a['to']['slice'](0x2)['toLowerCase']()['padStart'](0x40,'0')+a['amount']['toString'](0x10)['padStart'](0x40,'0');c={'to':a['tokenAddress'],'value':0x0n,'data':g,'network':a['network'],'rpcUrl':a['rpcUrl']};}else c={'to':a['to'],'value':a['amount'],'data':'0x','network':a['network'],'rpcUrl':a['rpcUrl']};const d=await this['sign_and_send'](c,a['rpcUrl']);if(d['status']!=='0x1')a80a('fail','EVM\x20transfer\x20reverted:\x20txHash='+d['transactionHash']);return d;}async['withdrawFromActive'](a){return this['transfer']({...a});}};function extractRevertReason(a){if(!a)return void 0x0;const b=typeof a==='string'?a:a?.['message']??a?.['toString']?.()??'',c=b['match'](/execution reverted:\s*(.+?)(?:\.|$)/i);if(c)return c[0x1]['trim']();const d=b['match'](/reverted with reason string\s*'([^']+)'/i);if(d)return d[0x1];const e=b['match'](/reverted with panic code\s*(0x[0-9a-f]+)/i);if(e)return'panic:\x20'+e[0x1];if(/stack underflow/i['test'](b))return'stack\x20underflow\x20(calldata\x20encoding\x20error)';if(/stack overflow/i['test'](b))return'stack\x20overflow';if(/out of gas/i['test'](b))return'out\x20of\x20gas';return b['length']>0xc8?b['slice'](0x0,0xc8)+'...':b;}export{EvmAccount,bytesToBigInt,bytesToHex,hexToBytes,isValidEvmAddress,privateKeyToAddress,signEIP1559,signLegacy,toChecksumAddress};
@@ -1 +1 @@
1
- import{a as a81a,i as a81b,n as a81c,r as a81d,t as a81e}from'../../fund-approval-Cee3vmP8.mjs';export{a81e as fetchFundApprovalTokenInfo,a81c as getFundApprovalPolicy,a81d as getFundApprovalTokenCatalog,a81b as isFundApprovalExempt,a81a as setFundApprovalPolicy};
1
+ import{a as a81a,i as a81b,n as a81c,r as a81d,t as a81e}from'../../fund-approval-D9vwQz49.mjs';export{a81e as fetchFundApprovalTokenInfo,a81c as getFundApprovalPolicy,a81d as getFundApprovalTokenCatalog,a81b as isFundApprovalExempt,a81a as setFundApprovalPolicy};
@@ -1,8 +1,8 @@
1
- import { AS as FaucetCoinInfo, Ah as LocalMarkOperationResult, Bh as query_account, Ch as GetLocalNamesByAddresses, DS as AccountFilter, Dh as LocalInfoOperation, ES as AccountData, Eh as LocalHistoryOperationResult, Fh as account_operation, Gh as query_local_mark, Hh as query_local_info, Ih as fetch_token_info_operation, Jh as TokenDataFilter, Kh as query_local_mark_list, Lh as local_history_operation, MS as MAX_MESSENGER_ACCOUNTS, Mh as ManyAccountOrMark_Address, Nh as QueryAccount, OS as CoinObjectWithBalanceResult, Oh as LocalInfoOperationResult, Ph as QueryAccountResult, Rh as local_info_operation, Sh as GetAccountOrMark_Address, TS as Account, Th as LocalHistoryOperation, Uh as query_local_info_default, Vh as query_account_list, Wh as query_local_info_list, Xh as TokenTypeInfo, Yh as TokenInfo, _h as AccountOperation, bh as FaucetNetwork, jS as MAX_ACCOUNTS, jh as LocalNameByAddress, kS as DEFAULT_ACCOUNT_NAME, kh as LocalMarkOperation, qh as query_local_token_list, vh as AccountOperationResult, wh as GetManyAccountOrMark_Address, xh as FetchTokenInfoOperation, yh as AccountOrMark_Address, zh as local_mark_operation } from "../../index-BQOp8Peb.mjs";
1
+ import { $h as TokenDataFilter, AS as Account, Ah as LocalHistoryOperation, Bh as account_operation, Ch as AccountOperationResult, Dh as GetAccountOrMark_Address, Eh as FetchTokenInfoOperation, FS as FaucetCoinInfo, Fh as LocalMarkOperationResult, Gh as query_account, Hh as local_history_operation, IS as MAX_ACCOUNTS, Ih as LocalNameByAddress, Jh as query_local_info_default, Kh as query_account_list, LS as MAX_MESSENGER_ACCOUNTS, Lh as ManyAccountOrMark_Address, MS as AccountFilter, Mh as LocalInfoOperation, NS as CoinObjectWithBalanceResult, Nh as LocalInfoOperationResult, Oh as GetLocalNamesByAddresses, PS as DEFAULT_ACCOUNT_NAME, Ph as LocalMarkOperation, Qh as query_local_token_list, Rh as QueryAccount, Sh as AccountOperation, Th as FaucetNetwork, Uh as local_info_operation, Vh as fetch_token_info_operation, Wh as local_mark_operation, Xh as query_local_mark, Yh as query_local_info_list, Zh as query_local_mark_list, eg as TokenInfo, jS as AccountData, jh as LocalHistoryOperationResult, kh as GetManyAccountOrMark_Address, qh as query_local_info, tg as TokenTypeInfo, wh as AccountOrMark_Address, zh as QueryAccountResult } from "../../index-DKne9Aij.mjs";
2
2
  import { n as ConfigData, t as Config } from "../../config-AuT9_n2K.mjs";
3
3
  import { a as OwnedRecordStorage, i as OwnedRecord, n as IStorage, s as SQLiteStorage, t as IAccountStorage } from "../../storage-C_8llI0r.mjs";
4
4
  import { a as SecureEnvelope, i as SecureAccountStorage, n as EncryptionMode, r as KeyMetadata, t as CryptoVault } from "../../secure-storage-WrSCAIOu.mjs";
5
- import { S as isValidAddress, _ as LocalMarkNameMaxLength, a as HistoryVisit, b as MarkData, c as LocalHistory, d as LocalInfoContentMaxLength, f as LocalInfoFilter, g as LocalMarkFilter, h as LocalMark, i as HistoryRetainDays, l as LocalInfo, m as LocalInfoNameMaxLength, n as HistoryEntry, o as InfoData, p as LocalInfoNameDefault, r as HistoryMaxEntries, s as InfoDataInner, t as BUITIN_IDS, u as LocalInfoContentMaxCount, v as LocalMarkTagMaxCount, x as MarkParam, y as LocalMarkTagMaxLength } from "../../local-Cizo_1J5.mjs";
5
+ import { S as isValidAddress, _ as LocalMarkNameMaxLength, a as HistoryVisit, b as MarkData, c as LocalHistory, d as LocalInfoContentMaxLength, f as LocalInfoFilter, g as LocalMarkFilter, h as LocalMark, i as HistoryRetainDays, l as LocalInfo, m as LocalInfoNameMaxLength, n as HistoryEntry, o as InfoData, p as LocalInfoNameDefault, r as HistoryMaxEntries, s as InfoDataInner, t as BUITIN_IDS, u as LocalInfoContentMaxCount, v as LocalMarkTagMaxCount, x as MarkParam, y as LocalMarkTagMaxLength } from "../../local-CsbLMwvo.mjs";
6
6
  import { a as getFundApprovalPolicy, c as setFundApprovalPolicy, i as fetchFundApprovalTokenInfo, n as FundApprovalThreshold, o as getFundApprovalTokenCatalog, r as FundApprovalTokenInfo, s as isFundApprovalExempt, t as FundApprovalPolicy } from "../../fund-approval-EBi-SfjX.mjs";
7
7
  import { _ as toChecksumAddress, c as bytesToHex, d as hexToBytes, g as signLegacy, h as signEIP1559, m as privateKeyToAddress, p as isValidEvmAddress, s as bytesToBigInt } from "../../rlp-Do3rPWRV.mjs";
8
8
  import { a as EvmTransactionReceipt, i as EvmLog, n as EvmAccountData, o as EvmTransactionRequest, r as EvmAccountFilter, t as EvmAccount } from "../../evm-account-DiQ0dl_e.mjs";
@@ -1 +1 @@
1
- import{getWowDir,getWowMcpDir,getWowokDataDir,getWowokIndustryDir,getWowokUserDataDir,getWowokWorkspaceDir,safeFilename,workspaceExportPath}from'./util.mjs';import{i as a82a,n as a82b}from'../../storage-D1bEi2b7.mjs';import{Config}from'./config.mjs';import{BUITIN_IDS,HistoryMaxEntries,HistoryRetainDays,LocalHistory,LocalInfo,LocalInfoContentMaxCount,LocalInfoContentMaxLength,LocalInfoNameDefault,LocalInfoNameMaxLength,LocalMark,LocalMarkNameMaxLength,LocalMarkTagMaxCount,LocalMarkTagMaxLength,isValidAddress}from'./local.mjs';import{CryptoVault,SecureAccountStorage}from'./secure-storage.mjs';import{Account,DEFAULT_ACCOUNT_NAME,MAX_ACCOUNTS,MAX_MESSENGER_ACCOUNTS}from'./account.mjs';import{C as a82c,D as a82d,E as a82e,O as a82f,S as a82g,T as a82h,_ as a82i,b as a82j,g as a82k,h as a82l,m as a82m,p as a82n,v as a82o,w as a82p,x as a82q,y as a82r}from'../../util-CQi8j1Df.mjs';import{TokenInfo}from'./token.mjs';import{a as a82s,i as a82t,n as a82u,r as a82v,t as a82w}from'../../fund-approval-Cee3vmP8.mjs';import{bytesToBigInt,bytesToHex,hexToBytes,isValidEvmAddress,privateKeyToAddress,signEIP1559,signLegacy,toChecksumAddress}from'./evm/rlp.mjs';import{ETH_MAINNET,EvmNetworkRegistry,registerBridgeEvmNetworks}from'./evm/networks.mjs';import{EvmAccount}from'./evm-account.mjs';import{DEFAULT_LIMITS,WIP,WipError,WipSizeError,WipValidationError,createWip,generate_wip,loadWip,sign_wip,verifyWip,verify_wip,wip2html,wipToHtml}from'./wip.mjs';export{Account,BUITIN_IDS,Config,CryptoVault,DEFAULT_ACCOUNT_NAME,DEFAULT_LIMITS,ETH_MAINNET,EvmAccount,EvmNetworkRegistry,a82n as GetAccountOrMark_Address,a82m as GetLocalNamesByAddresses,a82l as GetManyAccountOrMark_Address,HistoryMaxEntries,HistoryRetainDays,LocalHistory,LocalInfo,LocalInfoContentMaxCount,LocalInfoContentMaxLength,LocalInfoNameDefault,LocalInfoNameMaxLength,LocalMark,LocalMarkNameMaxLength,LocalMarkTagMaxCount,LocalMarkTagMaxLength,MAX_ACCOUNTS,MAX_MESSENGER_ACCOUNTS,a82b as OwnedRecordStorage,a82a as SQLiteStorage,SecureAccountStorage,TokenInfo,WIP,WipError,WipSizeError,WipValidationError,a82k as account_operation,bytesToBigInt,bytesToHex,createWip,a82w as fetchFundApprovalTokenInfo,a82i as fetch_token_info_operation,generate_wip,a82u as getFundApprovalPolicy,a82v as getFundApprovalTokenCatalog,getWowDir,getWowMcpDir,getWowokDataDir,getWowokIndustryDir,getWowokUserDataDir,getWowokWorkspaceDir,hexToBytes,a82t as isFundApprovalExempt,isValidAddress,isValidEvmAddress,loadWip,a82o as local_history_operation,a82r as local_info_operation,a82j as local_mark_operation,privateKeyToAddress,a82q as query_account,a82g as query_account_list,a82c as query_local_info,a82p as query_local_info_default,a82h as query_local_info_list,a82e as query_local_mark,a82d as query_local_mark_list,a82f as query_local_token_list,registerBridgeEvmNetworks,safeFilename,a82s as setFundApprovalPolicy,signEIP1559,signLegacy,sign_wip,toChecksumAddress,verifyWip,verify_wip,wip2html,wipToHtml,workspaceExportPath};
1
+ import{getWowDir,getWowMcpDir,getWowokDataDir,getWowokIndustryDir,getWowokUserDataDir,getWowokWorkspaceDir,safeFilename,workspaceExportPath}from'./util.mjs';import{i as a82a,n as a82b}from'../../storage-D1bEi2b7.mjs';import{Config}from'./config.mjs';import{BUITIN_IDS,HistoryMaxEntries,HistoryRetainDays,LocalHistory,LocalInfo,LocalInfoContentMaxCount,LocalInfoContentMaxLength,LocalInfoNameDefault,LocalInfoNameMaxLength,LocalMark,LocalMarkNameMaxLength,LocalMarkTagMaxCount,LocalMarkTagMaxLength,isValidAddress}from'./local.mjs';import{CryptoVault,SecureAccountStorage}from'./secure-storage.mjs';import{Account,DEFAULT_ACCOUNT_NAME,MAX_ACCOUNTS,MAX_MESSENGER_ACCOUNTS}from'./account.mjs';import{C as a82c,D as a82d,E as a82e,O as a82f,S as a82g,T as a82h,_ as a82i,b as a82j,g as a82k,h as a82l,m as a82m,p as a82n,v as a82o,w as a82p,x as a82q,y as a82r}from'../../util-2Fli5dww.mjs';import{TokenInfo}from'./token.mjs';import{a as a82s,i as a82t,n as a82u,r as a82v,t as a82w}from'../../fund-approval-D9vwQz49.mjs';import{bytesToBigInt,bytesToHex,hexToBytes,isValidEvmAddress,privateKeyToAddress,signEIP1559,signLegacy,toChecksumAddress}from'./evm/rlp.mjs';import{ETH_MAINNET,EvmNetworkRegistry,registerBridgeEvmNetworks}from'./evm/networks.mjs';import{EvmAccount}from'./evm-account.mjs';import{DEFAULT_LIMITS,WIP,WipError,WipSizeError,WipValidationError,createWip,generate_wip,loadWip,sign_wip,verifyWip,verify_wip,wip2html,wipToHtml}from'./wip.mjs';export{Account,BUITIN_IDS,Config,CryptoVault,DEFAULT_ACCOUNT_NAME,DEFAULT_LIMITS,ETH_MAINNET,EvmAccount,EvmNetworkRegistry,a82n as GetAccountOrMark_Address,a82m as GetLocalNamesByAddresses,a82l as GetManyAccountOrMark_Address,HistoryMaxEntries,HistoryRetainDays,LocalHistory,LocalInfo,LocalInfoContentMaxCount,LocalInfoContentMaxLength,LocalInfoNameDefault,LocalInfoNameMaxLength,LocalMark,LocalMarkNameMaxLength,LocalMarkTagMaxCount,LocalMarkTagMaxLength,MAX_ACCOUNTS,MAX_MESSENGER_ACCOUNTS,a82b as OwnedRecordStorage,a82a as SQLiteStorage,SecureAccountStorage,TokenInfo,WIP,WipError,WipSizeError,WipValidationError,a82k as account_operation,bytesToBigInt,bytesToHex,createWip,a82w as fetchFundApprovalTokenInfo,a82i as fetch_token_info_operation,generate_wip,a82u as getFundApprovalPolicy,a82v as getFundApprovalTokenCatalog,getWowDir,getWowMcpDir,getWowokDataDir,getWowokIndustryDir,getWowokUserDataDir,getWowokWorkspaceDir,hexToBytes,a82t as isFundApprovalExempt,isValidAddress,isValidEvmAddress,loadWip,a82o as local_history_operation,a82r as local_info_operation,a82j as local_mark_operation,privateKeyToAddress,a82q as query_account,a82g as query_account_list,a82c as query_local_info,a82p as query_local_info_default,a82h as query_local_info_list,a82e as query_local_mark,a82d as query_local_mark_list,a82f as query_local_token_list,registerBridgeEvmNetworks,safeFilename,a82s as setFundApprovalPolicy,signEIP1559,signLegacy,sign_wip,toChecksumAddress,verifyWip,verify_wip,wip2html,wipToHtml,workspaceExportPath};
@@ -1,2 +1,2 @@
1
- import { S as isValidAddress, _ as LocalMarkNameMaxLength, a as HistoryVisit, b as MarkData, c as LocalHistory, d as LocalInfoContentMaxLength, f as LocalInfoFilter, g as LocalMarkFilter, h as LocalMark, i as HistoryRetainDays, l as LocalInfo, m as LocalInfoNameMaxLength, n as HistoryEntry, o as InfoData, p as LocalInfoNameDefault, r as HistoryMaxEntries, s as InfoDataInner, t as BUITIN_IDS, u as LocalInfoContentMaxCount, v as LocalMarkTagMaxCount, x as MarkParam, y as LocalMarkTagMaxLength } from "../../local-Cizo_1J5.mjs";
1
+ import { S as isValidAddress, _ as LocalMarkNameMaxLength, a as HistoryVisit, b as MarkData, c as LocalHistory, d as LocalInfoContentMaxLength, f as LocalInfoFilter, g as LocalMarkFilter, h as LocalMark, i as HistoryRetainDays, l as LocalInfo, m as LocalInfoNameMaxLength, n as HistoryEntry, o as InfoData, p as LocalInfoNameDefault, r as HistoryMaxEntries, s as InfoDataInner, t as BUITIN_IDS, u as LocalInfoContentMaxCount, v as LocalMarkTagMaxCount, x as MarkParam, y as LocalMarkTagMaxLength } from "../../local-CsbLMwvo.mjs";
2
2
  export { BUITIN_IDS, HistoryEntry, HistoryMaxEntries, HistoryRetainDays, HistoryVisit, InfoData, InfoDataInner, LocalHistory, LocalInfo, LocalInfoContentMaxCount, LocalInfoContentMaxLength, LocalInfoFilter, LocalInfoNameDefault, LocalInfoNameMaxLength, LocalMark, LocalMarkFilter, LocalMarkNameMaxLength, LocalMarkTagMaxCount, LocalMarkTagMaxLength, MarkData, MarkParam, isValidAddress };
@@ -1 +1 @@
1
- import{o as a83a,u as a83b}from'../../wow-types-DctQuD2J.mjs';import{o as a83c}from'../../exception-o3XVk35a.mjs';import{y as a83d}from'../../constants-BGKNJZYa.mjs';import{d as a83e}from'../../storage-D1bEi2b7.mjs';import{Cache}from'./cache.mjs';import{Config}from'./config.mjs';const BUITIN_IDS=['0x5','0x6','0x7','0x8','0x9','0xa','0xc','0xd','0x403','0xacc',...Object['keys'](a83d)],isValidAddress=a=>{return a&&(a83a(a)||BUITIN_IDS['includes'](a));},LocalMarkNameMaxLength=0x40,LocalMarkTagMaxLength=0x40,LocalMarkTagMaxCount=0x32,LocalInfoNameMaxLength=0x40,LocalInfoContentMaxLength=0x12c,LocalInfoContentMaxCount=0x32,LocalInfoNameDefault='Address\x20of\x20delivery';var LocalMark=class LocalMark{static{this['_instanceLock']=new a83e();}static{this['_dataLocks']=new Map();}constructor(){this['config']=Config['Instance']();}static['dataLock'](a){let b=LocalMark['_dataLocks']['get'](a);return!b&&(b=new a83e(),LocalMark['_dataLocks']['set'](a,b)),b;}async['getCacheKey'](){return['mark',await this['config']['network_get']()];}static['Instance'](){if(LocalMark['_instance'])return LocalMark['_instance'];if(!LocalMark['_instance'])LocalMark['_instance']=new LocalMark();return LocalMark['_instance'];}static['nameMatch'](a,b){if(a==null||b==null)return![];return a['toLowerCase']()===b['toLowerCase']();}['resolve_tags'](a){return a=a?.['slice'](0x0,0x32),a=a?.['filter'](b=>b!==''&&b)?.['map'](b=>{return b['slice'](0x0,0x40);}),a;}['resolve_name'](a){return a['slice'](0x0,0x40);}async['put'](a){const b=await this['getCacheKey']();return LocalMark['dataLock'](b['join'](':'))['run'](async()=>{const c=(await Cache['read'](b,async()=>void 0x0))?.['data']||[],d=[];for(const f of a){const g=f['address']['toLowerCase']();f['address']=g;if(!isValidAddress(f['address']))a83c('invalid\x20address','LocalMark.put.mark.address:\x20'+f['address']);if(f?.['name']?.['value'])f['name']['value']=this['resolve_name'](f?.['name']?.['value']);f['tags']=this['resolve_tags'](f?.['tags']);const h=Date['now']();let i;if(f?.['name']?.['value']!=null)for(const j of c){if(!LocalMark['nameMatch'](j['name'],f['name']['value']))continue;if(j['address']['toLowerCase']()===g)i=j;else{if(f?.['name']?.['replaceExistName'])j['name']=void 0x0,j['updatedAt']=h;else a83c('local\x20mark\x20name\x20exist','LocalMark.put.mark.name:\x20'+f['name']['value']);}}if(!i)i=c['find'](k=>k['address']['toLowerCase']()===g&&(k['name']==null||f?.['name']?.['value']==null));if(i){if(f?.['name']?.['value']!=null)i['name']=f['name']['value'];if(f['tags']?.['length']){const k=new Set([...i['tags']??[],...f['tags']]);i['tags']=[...k]['slice'](0x0,0x32);}i['updatedAt']=h;if(!d['includes'](i))d['push'](i);}else{const l={'name':f?.['name']?.['value'],'address':f['address'],'tags':f['tags'],'createdAt':h,'updatedAt':h};c['push'](l),d['push'](l);}}const e=await Cache['readStoredRaw'](b);if(e?.['data']?.['length'])for(const n of e['data']){const o=c['find'](p=>p['address']['toLowerCase']()===n['address']['toLowerCase']()&&(p['name']??'')===(n['name']??''));if(!o)c['push'](n);else{if((o['updatedAt']??0x0)<(n['updatedAt']??0x0))Object['assign'](o,n);}}return await Cache['read'](b,async()=>({'expire':'INFINITE','data':c}),!![]),d;});}async['get'](a){if(a===void 0x0||a===null)return;const b=await this['getCacheKey']();return(await Cache['read'](b,async()=>void 0x0))?.['data']?.['find'](c=>LocalMark['nameMatch'](c['name'],a)||c['address']['toLowerCase']()===a['toLowerCase']());}async['get_address'](a){if(a&&isValidAddress(a))return a83b(a);return(await this['get'](a))?.['address'];}async['get_many'](a){if(!Array['isArray'](a)||a['length']===0x0)return[];const b=await this['getCacheKey'](),c=(await Cache['read'](b,async()=>void 0x0))?.['data']||[];return a['map'](d=>{return c['find'](e=>LocalMark['nameMatch'](e['name'],d)||e['address']['toLowerCase']()===d?.['toLowerCase']());});}async['get_many_address'](a){const b=new Array(a['length'])['fill'](void 0x0),c=new Map();a['forEach']((g,h)=>{if(g===null||g===void 0x0)b[h]=void 0x0;else{if(isValidAddress(g))b[h]=g['toLowerCase']();else c['set'](h,g);}});const d=Array['from'](c['values']());if(d['length']===0x0)return b;const e=await this['get_many'](d);let f=0x0;return c['forEach']((g,h)=>{b[h]=e[f]?.['address'],f++;}),b;}async['get_many_address_availables'](a){return(await this['get_many_address'](a))['filter'](b=>b!=null);}async['del'](a,b=![]){const c=await this['getCacheKey']();return LocalMark['dataLock'](c['join'](':'))['run'](async()=>{const d=(await Cache['read'](c,async()=>void 0x0))?.['data']||[],e=d['filter'](g=>{const h=a['map'](m=>m['toLowerCase']()),i=g['name']!==void 0x0&&g['name']!==null&&a['some'](m=>LocalMark['nameMatch'](g['name'],m)),j=h['includes'](g['address']['toLowerCase']()),k=i||j,l=g['name']===void 0x0||g['name']===null;if(b)return!k&&!l;else return!k;}),f=d['filter'](g=>!e['includes'](g));if(e['length']!==d['length'])await Cache['read'](c,async()=>({'expire':'INFINITE','data':e}),!![]);return f;});}async['clear'](){const a=await this['getCacheKey']();return LocalMark['dataLock'](a['join'](':'))['run'](async()=>{return await Cache['read'](a,async()=>({'expire':'INFINITE','data':[]}),!![]),!![];});}async['rename'](a,b){b=this['resolve_name'](b);if(a===b)return!![];const c=await this['getCacheKey']();return LocalMark['dataLock'](c['join'](':'))['run'](async()=>{const d=(await Cache['read'](c,async()=>void 0x0))?.['data']||[],e=d['find'](f=>LocalMark['nameMatch'](f['name'],a));if(e&&d['findIndex'](f=>LocalMark['nameMatch'](f['name'],b))===-0x1){const f=Date['now']();return e['name']=b,e['updatedAt']=f,await Cache['read'](c,async()=>({'expire':'INFINITE','data':d}),!![]),!![];}return![];});}async['swap_name'](a,b){if(a===b)return!![];const c=await this['getCacheKey']();return LocalMark['dataLock'](c['join'](':'))['run'](async()=>{const d=(await Cache['read'](c,async()=>void 0x0))?.['data']||[],e=d['find'](g=>LocalMark['nameMatch'](g['name'],a)),f=d['find'](g=>LocalMark['nameMatch'](g['name'],b));if(e&&f){const g=Date['now']();return e['name']=b,e['updatedAt']=g,f['name']=a,f['updatedAt']=g,await Cache['read'](c,async()=>({'expire':'INFINITE','data':d}),!![]),!![];}return![];});}async['set_tags'](a,b){b=this['resolve_tags'](b);const c=await this['getCacheKey']();return LocalMark['dataLock'](c['join'](':'))['run'](async()=>{const d=(await Cache['read'](c,async()=>void 0x0))?.['data']||[],e=d['find'](f=>LocalMark['nameMatch'](f['name'],a));if(e){const f=Date['now']();return e['tags']=b,e['updatedAt']=f,await Cache['read'](c,async()=>({'expire':'INFINITE','data':d}),!![]),!![];}return![];});}async['add_tags'](a,b){const c=this['resolve_tags'](b);if(!c||c['length']===0x0)return![];const d=await this['getCacheKey']();return LocalMark['dataLock'](d['join'](':'))['run'](async()=>{const e=(await Cache['read'](d,async()=>void 0x0))?.['data']||[],f=e['find'](i=>LocalMark['nameMatch'](i['name'],a)||i['address']['toLowerCase']()===a['toLowerCase']());if(!f)return![];const g=new Set(f['tags']??[]),h=[...g];for(const i of c){!g['has'](i)&&(h['push'](i),g['add'](i));if(h['length']>=0x32)break;}return f['tags']=h,f['updatedAt']=Date['now'](),await Cache['read'](d,async()=>({'expire':'INFINITE','data':e}),!![]),!![];});}async['list'](a){if(a&&a['tags'])a['tags']=a['tags']['filter'](c=>c!==''&&c);const b=await this['getCacheKey']();return((await Cache['read'](b,async()=>void 0x0))?.['data']||[])['filter'](c=>{if(a?.['address']&&c['address']['toLowerCase']()!==a['address']['toLowerCase']())return![];if(a?.['createdAt']){if(a['createdAt']['gte']!==void 0x0&&(!c['createdAt']||c['createdAt']<a['createdAt']['gte']))return![];if(a['createdAt']['lte']!==void 0x0&&(!c['createdAt']||c['createdAt']>a['createdAt']['lte']))return![];}if(a?.['updatedAt']){if(a['updatedAt']['gte']!==void 0x0&&(!c['updatedAt']||c['updatedAt']<a['updatedAt']['gte']))return![];if(a['updatedAt']['lte']!==void 0x0&&(!c['updatedAt']||c['updatedAt']>a['updatedAt']['lte']))return![];}return!![];})['map'](c=>{let d=0x0;const e=c['name']?.['toLowerCase']()||'',f=a?.['name']?.['toLowerCase']()||'';if(a?.['name']){if(e===f)d+=0x64;else{if(e['startsWith'](f))d+=0x32;else{if(e['includes'](f))d+=0x19;}}}if(a?.['tags']&&a['tags']['length']>0x0)a['tags']['forEach'](g=>{const h=g['toLowerCase']();if(c['tags'])c['tags']['forEach'](i=>{const j=i['toLowerCase']();if(j===h)d+=0x14;else{if(j['startsWith'](h))d+=0xf;else{if(j['includes'](h))d+=0xa;}}});});if((a?.['name']||a?.['tags'])&&d===0x0)d=-0x1;return{'mark':c,'score':d};})['filter'](({score:c})=>c>=0x0)['sort']((c,d)=>{if(d['score']!==c['score'])return d['score']-c['score'];const e=(c['mark']['name']||'')['length'],f=(d['mark']['name']||'')['length'];if(e!==f)return e-f;return(c['mark']['name']||'')['localeCompare'](d['mark']['name']||'');})['map'](({mark:c})=>c);}},LocalInfo=class LocalInfo{constructor(){this['cacheKey']=['info'];}static{this['_dataLock']=new a83e();}static['Instance'](){if(LocalInfo['_instance'])return LocalInfo['_instance'];if(!LocalInfo['_instance'])LocalInfo['_instance']=new LocalInfo();return LocalInfo['_instance'];}static['nameMatch'](a,b){if(a==null||b==null)return![];return a['toLowerCase']()===b['toLowerCase']();}['resolve_contents'](a){return a=a['slice'](0x0,0x32),a['map'](b=>b['slice'](0x0,0x12c));}['resolve_name'](a){return a['slice'](0x0,0x40);}async['add'](a){return LocalInfo['_dataLock']['run'](async()=>{const b=(await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})))?.['data']||{};for(const c of a){const d=this['resolve_name'](c['name']),e=c['default']['slice'](0x0,0x12c);if(b[d]){const f=Date['now'](),g=b[d];g['default']=e;if(c['contents']!==void 0x0)g['contents']=this['resolve_contents'](c['contents']);g['updatedAt']=f;}else{const h=Date['now']();b[d]={'default':e,'contents':c['contents']?this['resolve_contents'](c['contents']):[],'createdAt':h,'updatedAt':h};}}return await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':b}),!![]),!![];});}async['get'](a=LocalInfoNameDefault){const b=((await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})))?.['data']||{})[a];return b?{'name':a,...b}:void 0x0;}async['get_default'](a=LocalInfoNameDefault){return(await this['get'](a))?.['default'];}async['get_many'](a){if(!Array['isArray'](a)||a['length']===0x0)return[];const b=(await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})))?.['data']||{};return a['map'](c=>{const d=b[c];return d?{'name':c,...d}:void 0x0;});}async['del'](a=LocalInfoNameDefault){return LocalInfo['_dataLock']['run'](async()=>{const b=(await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})))?.['data']||{};delete b[a],await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':b}),!![]);});}async['reset_contents'](a=LocalInfoNameDefault,b){return LocalInfo['_dataLock']['run'](async()=>{const c=(await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})))?.['data']||{},d=c[a];if(d){const e=Date['now']();return d['contents']=this['resolve_contents'](b),d['updatedAt']=e,await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':c}),!![]),!![];}return![];});}async['clear'](){return LocalInfo['_dataLock']['run'](async()=>{await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}}),!![]);});}async['list'](a){const b=(await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})))?.['data']||{};return Object['entries'](b)['map'](([c,d])=>{let e=0x0;const f={'name':c,...d};if(a?.['name']){const g=c['toLowerCase'](),h=a['name']['toLowerCase']();if(g===h)e+=0x64;else{if(g['startsWith'](h))e+=0x32;else{if(g['includes'](h))e+=0x19;}}}if(a?.['default']){const i=d['default']['toLowerCase'](),j=a['default']['toLowerCase']();if(i===j)e+=0x5a;else{if(i['startsWith'](j))e+=0x2d;else{if(i['includes'](j))e+=0x16;}}}if(a?.['contents']&&a['contents']['length']>0x0)a['contents']['forEach'](k=>{const l=k['toLowerCase']();if(d['contents'])d['contents']['forEach'](m=>{const n=m['toLowerCase']();if(n===l)e+=0x14;else{if(n['startsWith'](l))e+=0xf;else{if(n['includes'](l))e+=0xa;}}});});if((a?.['name']||a?.['default']||a?.['contents'])&&e===0x0)e=-0x1;return{'info':f,'score':e};})['filter'](({score:c,info:d})=>{if(c<0x0)return![];if(a?.['createdAt']){if(a['createdAt']['gte']!==void 0x0&&(!d['createdAt']||d['createdAt']<a['createdAt']['gte']))return![];if(a['createdAt']['lte']!==void 0x0&&(!d['createdAt']||d['createdAt']>a['createdAt']['lte']))return![];}if(a?.['updatedAt']){if(a['updatedAt']['gte']!==void 0x0&&(!d['updatedAt']||d['updatedAt']<a['updatedAt']['gte']))return![];if(a['updatedAt']['lte']!==void 0x0&&(!d['updatedAt']||d['updatedAt']>a['updatedAt']['lte']))return![];}return!![];})['sort']((c,d)=>{if(d['score']!==c['score'])return d['score']-c['score'];const e=c['info']['name']['length'],f=d['info']['name']['length'];if(e!==f)return e-f;return c['info']['name']['localeCompare'](d['info']['name']);})['map'](({info:c})=>c);}};const HistoryRetainDays=0x1e,HistoryMaxEntries=0x12c;var LocalHistory=class LocalHistory{constructor(){this['cacheKey']=['history'];}static{this['_dataLock']=new a83e();}static['Instance'](){if(LocalHistory['_instance'])return LocalHistory['_instance'];if(!LocalHistory['_instance'])LocalHistory['_instance']=new LocalHistory();return LocalHistory['_instance'];}['dayKey'](a){const b=new Date(a),c=String(b['getMonth']()+0x1)['padStart'](0x2,'0'),e=String(b['getDate']())['padStart'](0x2,'0');return b['getFullYear']()+'-'+c+'-'+e;}['prune'](a){const b=new Set([...new Set(a['map'](c=>this['dayKey'](c['ts'])))]['sort']()['reverse']()['slice'](0x0,0x1e));return a['filter'](c=>b['has'](this['dayKey'](c['ts'])))['sort']((c,d)=>d['ts']-c['ts'])['slice'](0x0,0x12c);}async['list'](){const a=(await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':[]})))?.['data']||[];return this['prune'](a);}async['put'](a){return LocalHistory['_dataLock']['run'](async()=>{const b=(await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':[]})))?.['data']||[],c=[];for(const d of a||[]){if(!d||typeof d!=='object'||typeof d['key']!=='string'||typeof d['address']!=='string'||typeof d['ts']!=='number')continue;const e={'key':d['key'],...typeof d['objType']==='string'&&d['objType']?{'objType':d['objType']}:{},'address':d['address'],'network':typeof d['network']==='string'&&d['network']?d['network']:'testnet','ts':d['ts']},f=b['findIndex'](g=>g['key']===e['key']);if(f>=0x0)b[f]=e;else b['unshift'](e);c['push'](e);}return await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':this['prune'](b)}),!![]),c;});}async['del'](a){return LocalHistory['_dataLock']['run'](async()=>{const b=(await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':[]})))?.['data']||[],c=new Set((a||[])['map'](e=>String(e))),d=b['filter'](f=>c['has'](f['key']));return await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':b['filter'](f=>!c['has'](f['key']))}),!![]),d;});}async['clear'](){return LocalHistory['_dataLock']['run'](async()=>{return await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':[]}),!![]),!![];});}};export{BUITIN_IDS,HistoryMaxEntries,HistoryRetainDays,LocalHistory,LocalInfo,LocalInfoContentMaxCount,LocalInfoContentMaxLength,LocalInfoNameDefault,LocalInfoNameMaxLength,LocalMark,LocalMarkNameMaxLength,LocalMarkTagMaxCount,LocalMarkTagMaxLength,isValidAddress};
1
+ import{o as a83a,u as a83b}from'../../wow-types-DctQuD2J.mjs';import{o as a83c}from'../../exception-D2n4LV8F.mjs';import{y as a83d}from'../../constants-BGKNJZYa.mjs';import{d as a83e}from'../../storage-D1bEi2b7.mjs';import{Cache}from'./cache.mjs';import{Config}from'./config.mjs';const BUITIN_IDS=['0x5','0x6','0x7','0x8','0x9','0xa','0xc','0xd','0x403','0xacc',...Object['keys'](a83d)],isValidAddress=a=>{return a&&(a83a(a)||BUITIN_IDS['includes'](a));},LocalMarkNameMaxLength=0x40,LocalMarkTagMaxLength=0x40,LocalMarkTagMaxCount=0x32,LocalInfoNameMaxLength=0x40,LocalInfoContentMaxLength=0x12c,LocalInfoContentMaxCount=0x32,LocalInfoNameDefault='Address\x20of\x20delivery';var LocalMark=class LocalMark{static{this['_instanceLock']=new a83e();}static{this['_dataLocks']=new Map();}constructor(){this['config']=Config['Instance']();}static['dataLock'](a){let b=LocalMark['_dataLocks']['get'](a);return!b&&(b=new a83e(),LocalMark['_dataLocks']['set'](a,b)),b;}async['getCacheKey'](){return['mark',await this['config']['network_get']()];}static['Instance'](){if(LocalMark['_instance'])return LocalMark['_instance'];if(!LocalMark['_instance'])LocalMark['_instance']=new LocalMark();return LocalMark['_instance'];}static['nameMatch'](a,b){if(a==null||b==null)return![];return a['toLowerCase']()===b['toLowerCase']();}['resolve_tags'](a){return a=a?.['slice'](0x0,0x32),a=a?.['filter'](b=>b!==''&&b)?.['map'](b=>{return b['slice'](0x0,0x40);}),a;}['resolve_name'](a){return a['slice'](0x0,0x40);}async['put'](a){const b=await this['getCacheKey']();return LocalMark['dataLock'](b['join'](':'))['run'](async()=>{const c=(await Cache['read'](b,async()=>void 0x0))?.['data']||[],d=[];for(const f of a){const g=f['address']['toLowerCase']();f['address']=g;if(!isValidAddress(f['address']))a83c('invalid\x20address','LocalMark.put.mark.address:\x20'+f['address']);if(f?.['name']?.['value'])f['name']['value']=this['resolve_name'](f?.['name']?.['value']);f['tags']=this['resolve_tags'](f?.['tags']);const h=Date['now']();let i;if(f?.['name']?.['value']!=null)for(const j of c){if(!LocalMark['nameMatch'](j['name'],f['name']['value']))continue;if(j['address']['toLowerCase']()===g)i=j;else{if(f?.['name']?.['replaceExistName'])j['name']=void 0x0,j['updatedAt']=h;else a83c('local\x20mark\x20name\x20exist','LocalMark.put.mark.name:\x20'+f['name']['value']);}}if(!i)i=c['find'](k=>k['address']['toLowerCase']()===g&&(k['name']==null||f?.['name']?.['value']==null));if(i){if(f?.['name']?.['value']!=null)i['name']=f['name']['value'];if(f['tags']?.['length']){const k=new Set([...i['tags']??[],...f['tags']]);i['tags']=[...k]['slice'](0x0,0x32);}i['updatedAt']=h;if(!d['includes'](i))d['push'](i);}else{const l={'name':f?.['name']?.['value'],'address':f['address'],'tags':f['tags'],'createdAt':h,'updatedAt':h};c['push'](l),d['push'](l);}}const e=await Cache['readStoredRaw'](b);if(e?.['data']?.['length'])for(const n of e['data']){const o=c['find'](p=>p['address']['toLowerCase']()===n['address']['toLowerCase']()&&(p['name']??'')===(n['name']??''));if(!o)c['push'](n);else{if((o['updatedAt']??0x0)<(n['updatedAt']??0x0))Object['assign'](o,n);}}return await Cache['read'](b,async()=>({'expire':'INFINITE','data':c}),!![]),d;});}async['get'](a){if(a===void 0x0||a===null)return;const b=await this['getCacheKey']();return(await Cache['read'](b,async()=>void 0x0))?.['data']?.['find'](c=>LocalMark['nameMatch'](c['name'],a)||c['address']['toLowerCase']()===a['toLowerCase']());}async['get_address'](a){if(a&&isValidAddress(a))return a83b(a);return(await this['get'](a))?.['address'];}async['get_many'](a){if(!Array['isArray'](a)||a['length']===0x0)return[];const b=await this['getCacheKey'](),c=(await Cache['read'](b,async()=>void 0x0))?.['data']||[];return a['map'](d=>{return c['find'](e=>LocalMark['nameMatch'](e['name'],d)||e['address']['toLowerCase']()===d?.['toLowerCase']());});}async['get_many_address'](a){const b=new Array(a['length'])['fill'](void 0x0),c=new Map();a['forEach']((g,h)=>{if(g===null||g===void 0x0)b[h]=void 0x0;else{if(isValidAddress(g))b[h]=g['toLowerCase']();else c['set'](h,g);}});const d=Array['from'](c['values']());if(d['length']===0x0)return b;const e=await this['get_many'](d);let f=0x0;return c['forEach']((g,h)=>{b[h]=e[f]?.['address'],f++;}),b;}async['get_many_address_availables'](a){return(await this['get_many_address'](a))['filter'](b=>b!=null);}async['del'](a,b=![]){const c=await this['getCacheKey']();return LocalMark['dataLock'](c['join'](':'))['run'](async()=>{const d=(await Cache['read'](c,async()=>void 0x0))?.['data']||[],e=d['filter'](g=>{const h=a['map'](m=>m['toLowerCase']()),i=g['name']!==void 0x0&&g['name']!==null&&a['some'](m=>LocalMark['nameMatch'](g['name'],m)),j=h['includes'](g['address']['toLowerCase']()),k=i||j,l=g['name']===void 0x0||g['name']===null;if(b)return!k&&!l;else return!k;}),f=d['filter'](g=>!e['includes'](g));if(e['length']!==d['length'])await Cache['read'](c,async()=>({'expire':'INFINITE','data':e}),!![]);return f;});}async['clear'](){const a=await this['getCacheKey']();return LocalMark['dataLock'](a['join'](':'))['run'](async()=>{return await Cache['read'](a,async()=>({'expire':'INFINITE','data':[]}),!![]),!![];});}async['rename'](a,b){b=this['resolve_name'](b);if(a===b)return!![];const c=await this['getCacheKey']();return LocalMark['dataLock'](c['join'](':'))['run'](async()=>{const d=(await Cache['read'](c,async()=>void 0x0))?.['data']||[],e=d['find'](f=>LocalMark['nameMatch'](f['name'],a));if(e&&d['findIndex'](f=>LocalMark['nameMatch'](f['name'],b))===-0x1){const f=Date['now']();return e['name']=b,e['updatedAt']=f,await Cache['read'](c,async()=>({'expire':'INFINITE','data':d}),!![]),!![];}return![];});}async['swap_name'](a,b){if(a===b)return!![];const c=await this['getCacheKey']();return LocalMark['dataLock'](c['join'](':'))['run'](async()=>{const d=(await Cache['read'](c,async()=>void 0x0))?.['data']||[],e=d['find'](g=>LocalMark['nameMatch'](g['name'],a)),f=d['find'](g=>LocalMark['nameMatch'](g['name'],b));if(e&&f){const g=Date['now']();return e['name']=b,e['updatedAt']=g,f['name']=a,f['updatedAt']=g,await Cache['read'](c,async()=>({'expire':'INFINITE','data':d}),!![]),!![];}return![];});}async['set_tags'](a,b){b=this['resolve_tags'](b);const c=await this['getCacheKey']();return LocalMark['dataLock'](c['join'](':'))['run'](async()=>{const d=(await Cache['read'](c,async()=>void 0x0))?.['data']||[],e=d['find'](f=>LocalMark['nameMatch'](f['name'],a)||f['address']['toLowerCase']()===a['toLowerCase']());if(e){const f=Date['now']();return e['tags']=b,e['updatedAt']=f,await Cache['read'](c,async()=>({'expire':'INFINITE','data':d}),!![]),!![];}return![];});}async['add_tags'](a,b){const c=this['resolve_tags'](b);if(!c||c['length']===0x0)return![];const d=await this['getCacheKey']();return LocalMark['dataLock'](d['join'](':'))['run'](async()=>{const e=(await Cache['read'](d,async()=>void 0x0))?.['data']||[],f=e['find'](i=>LocalMark['nameMatch'](i['name'],a)||i['address']['toLowerCase']()===a['toLowerCase']());if(!f)return![];const g=new Set(f['tags']??[]),h=[...g];for(const i of c){!g['has'](i)&&(h['push'](i),g['add'](i));if(h['length']>=0x32)break;}return f['tags']=h,f['updatedAt']=Date['now'](),await Cache['read'](d,async()=>({'expire':'INFINITE','data':e}),!![]),!![];});}async['list'](a){if(a&&a['tags'])a['tags']=a['tags']['filter'](c=>c!==''&&c);const b=await this['getCacheKey']();return((await Cache['read'](b,async()=>void 0x0))?.['data']||[])['filter'](c=>{if(a?.['address']&&c['address']['toLowerCase']()!==a['address']['toLowerCase']())return![];if(a?.['createdAt']){if(a['createdAt']['gte']!==void 0x0&&(!c['createdAt']||c['createdAt']<a['createdAt']['gte']))return![];if(a['createdAt']['lte']!==void 0x0&&(!c['createdAt']||c['createdAt']>a['createdAt']['lte']))return![];}if(a?.['updatedAt']){if(a['updatedAt']['gte']!==void 0x0&&(!c['updatedAt']||c['updatedAt']<a['updatedAt']['gte']))return![];if(a['updatedAt']['lte']!==void 0x0&&(!c['updatedAt']||c['updatedAt']>a['updatedAt']['lte']))return![];}return!![];})['map'](c=>{let d=0x0;const e=c['name']?.['toLowerCase']()||'',f=a?.['name']?.['toLowerCase']()||'';if(a?.['name']){if(e===f)d+=0x64;else{if(e['startsWith'](f))d+=0x32;else{if(e['includes'](f))d+=0x19;}}}if(a?.['tags']&&a['tags']['length']>0x0)a['tags']['forEach'](g=>{const h=g['toLowerCase']();if(c['tags'])c['tags']['forEach'](i=>{const j=i['toLowerCase']();if(j===h)d+=0x14;else{if(j['startsWith'](h))d+=0xf;else{if(j['includes'](h))d+=0xa;}}});});if((a?.['name']||a?.['tags'])&&d===0x0)d=-0x1;return{'mark':c,'score':d};})['filter'](({score:c})=>c>=0x0)['sort']((c,d)=>{if(d['score']!==c['score'])return d['score']-c['score'];const e=(c['mark']['name']||'')['length'],f=(d['mark']['name']||'')['length'];if(e!==f)return e-f;return(c['mark']['name']||'')['localeCompare'](d['mark']['name']||'');})['map'](({mark:c})=>c);}},LocalInfo=class LocalInfo{constructor(){this['cacheKey']=['info'];}static{this['_dataLock']=new a83e();}static['Instance'](){if(LocalInfo['_instance'])return LocalInfo['_instance'];if(!LocalInfo['_instance'])LocalInfo['_instance']=new LocalInfo();return LocalInfo['_instance'];}static['nameMatch'](a,b){if(a==null||b==null)return![];return a['toLowerCase']()===b['toLowerCase']();}['resolve_contents'](a){return a=a['slice'](0x0,0x32),a['map'](b=>b['slice'](0x0,0x12c));}['resolve_name'](a){return a['slice'](0x0,0x40);}async['add'](a){return LocalInfo['_dataLock']['run'](async()=>{const b=(await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})))?.['data']||{};for(const c of a){const d=this['resolve_name'](c['name']),e=c['default']['slice'](0x0,0x12c);if(b[d]){const f=Date['now'](),g=b[d];g['default']=e;if(c['contents']!==void 0x0)g['contents']=this['resolve_contents'](c['contents']);g['updatedAt']=f;}else{const h=Date['now']();b[d]={'default':e,'contents':c['contents']?this['resolve_contents'](c['contents']):[],'createdAt':h,'updatedAt':h};}}return await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':b}),!![]),!![];});}async['get'](a=LocalInfoNameDefault){const b=((await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})))?.['data']||{})[a];return b?{'name':a,...b}:void 0x0;}async['get_default'](a=LocalInfoNameDefault){return(await this['get'](a))?.['default'];}async['get_many'](a){if(!Array['isArray'](a)||a['length']===0x0)return[];const b=(await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})))?.['data']||{};return a['map'](c=>{const d=b[c];return d?{'name':c,...d}:void 0x0;});}async['del'](a=LocalInfoNameDefault){return LocalInfo['_dataLock']['run'](async()=>{const b=(await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})))?.['data']||{};delete b[a],await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':b}),!![]);});}async['reset_contents'](a=LocalInfoNameDefault,b){return LocalInfo['_dataLock']['run'](async()=>{const c=(await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})))?.['data']||{},d=c[a];if(d){const e=Date['now']();return d['contents']=this['resolve_contents'](b),d['updatedAt']=e,await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':c}),!![]),!![];}return![];});}async['clear'](){return LocalInfo['_dataLock']['run'](async()=>{await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}}),!![]);});}async['list'](a){const b=(await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})))?.['data']||{};return Object['entries'](b)['map'](([c,d])=>{let e=0x0;const f={'name':c,...d};if(a?.['name']){const g=c['toLowerCase'](),h=a['name']['toLowerCase']();if(g===h)e+=0x64;else{if(g['startsWith'](h))e+=0x32;else{if(g['includes'](h))e+=0x19;}}}if(a?.['default']){const i=d['default']['toLowerCase'](),j=a['default']['toLowerCase']();if(i===j)e+=0x5a;else{if(i['startsWith'](j))e+=0x2d;else{if(i['includes'](j))e+=0x16;}}}if(a?.['contents']&&a['contents']['length']>0x0)a['contents']['forEach'](k=>{const l=k['toLowerCase']();if(d['contents'])d['contents']['forEach'](m=>{const n=m['toLowerCase']();if(n===l)e+=0x14;else{if(n['startsWith'](l))e+=0xf;else{if(n['includes'](l))e+=0xa;}}});});if((a?.['name']||a?.['default']||a?.['contents'])&&e===0x0)e=-0x1;return{'info':f,'score':e};})['filter'](({score:c,info:d})=>{if(c<0x0)return![];if(a?.['createdAt']){if(a['createdAt']['gte']!==void 0x0&&(!d['createdAt']||d['createdAt']<a['createdAt']['gte']))return![];if(a['createdAt']['lte']!==void 0x0&&(!d['createdAt']||d['createdAt']>a['createdAt']['lte']))return![];}if(a?.['updatedAt']){if(a['updatedAt']['gte']!==void 0x0&&(!d['updatedAt']||d['updatedAt']<a['updatedAt']['gte']))return![];if(a['updatedAt']['lte']!==void 0x0&&(!d['updatedAt']||d['updatedAt']>a['updatedAt']['lte']))return![];}return!![];})['sort']((c,d)=>{if(d['score']!==c['score'])return d['score']-c['score'];const e=c['info']['name']['length'],f=d['info']['name']['length'];if(e!==f)return e-f;return c['info']['name']['localeCompare'](d['info']['name']);})['map'](({info:c})=>c);}};const HistoryRetainDays=0x1e,HistoryMaxEntries=0x12c;var LocalHistory=class LocalHistory{constructor(){this['cacheKey']=['history'];}static{this['_dataLock']=new a83e();}static['Instance'](){if(LocalHistory['_instance'])return LocalHistory['_instance'];if(!LocalHistory['_instance'])LocalHistory['_instance']=new LocalHistory();return LocalHistory['_instance'];}['dayKey'](a){const b=new Date(a),c=String(b['getMonth']()+0x1)['padStart'](0x2,'0'),e=String(b['getDate']())['padStart'](0x2,'0');return b['getFullYear']()+'-'+c+'-'+e;}['prune'](a){const b=new Set([...new Set(a['map'](c=>this['dayKey'](c['ts'])))]['sort']()['reverse']()['slice'](0x0,0x1e));return a['filter'](c=>b['has'](this['dayKey'](c['ts'])))['sort']((c,d)=>d['ts']-c['ts'])['slice'](0x0,0x12c);}async['list'](){const a=(await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':[]})))?.['data']||[];return this['prune'](a);}async['put'](a){return LocalHistory['_dataLock']['run'](async()=>{const b=(await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':[]})))?.['data']||[],c=[];for(const d of a||[]){if(!d||typeof d!=='object'||typeof d['key']!=='string'||typeof d['address']!=='string'||typeof d['ts']!=='number')continue;const e={'key':d['key'],...typeof d['objType']==='string'&&d['objType']?{'objType':d['objType']}:{},'address':d['address'],'network':typeof d['network']==='string'&&d['network']?d['network']:'testnet','ts':d['ts']},f=b['findIndex'](g=>g['key']===e['key']);if(f>=0x0)b[f]=e;else b['unshift'](e);c['push'](e);}return await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':this['prune'](b)}),!![]),c;});}async['del'](a){return LocalHistory['_dataLock']['run'](async()=>{const b=(await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':[]})))?.['data']||[],c=new Set((a||[])['map'](e=>String(e))),d=b['filter'](f=>c['has'](f['key']));return await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':b['filter'](f=>!c['has'](f['key']))}),!![]),d;});}async['clear'](){return LocalHistory['_dataLock']['run'](async()=>{return await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':[]}),!![]),!![];});}};export{BUITIN_IDS,HistoryMaxEntries,HistoryRetainDays,LocalHistory,LocalInfo,LocalInfoContentMaxCount,LocalInfoContentMaxLength,LocalInfoNameDefault,LocalInfoNameMaxLength,LocalMark,LocalMarkNameMaxLength,LocalMarkTagMaxCount,LocalMarkTagMaxLength,isValidAddress};
@@ -1,2 +1,2 @@
1
- import { Jh as TokenDataFilter, Xh as TokenTypeInfo, Yh as TokenInfo } from "../../index-BQOp8Peb.mjs";
1
+ import { $h as TokenDataFilter, eg as TokenInfo, tg as TokenTypeInfo } from "../../index-DKne9Aij.mjs";
2
2
  export { TokenDataFilter, TokenInfo, TokenTypeInfo };
@@ -1 +1 @@
1
- import{t as a86a}from'../../client-BYIflYp_.mjs';import{o as a86b}from'../../exception-o3XVk35a.mjs';import{a as a86c}from'../../network-UpRYD8EM.mjs';import'../../common-DhtZTgkX.mjs';import{d as a86d}from'../../storage-D1bEi2b7.mjs';import{Cache}from'./cache.mjs';import{Config}from'./config.mjs';var TokenInfo=class TokenInfo{constructor(){this['cacheKey']=['token'];}static{this['_instanceLock']=new a86d();}static['Instance'](){if(TokenInfo['_instance'])return TokenInfo['_instance'];if(!TokenInfo['_instance'])TokenInfo['_instance']=new TokenInfo();return TokenInfo['_instance'];}static['isValidMetadata'](a){if(!a)return![];const b=a['decimals'];return typeof b==='number'&&Number['isInteger'](b)&&b>=0x0&&b<=0xff;}async['fetch_imp'](a,b,c){const d=await new a86a({'url':a86c(a),'network':a})['getCoinMetadata']({'coinType':b});if(TokenInfo['isValidMetadata'](d))return{'alias':c,'type':b,...d};}async['fetch'](a,b,c){a=a??'0x2::wow::WOW';const d=await Config['Instance']()['network_get'](c),e=await Cache['read']([...this['cacheKey'],d],async g=>{return{'expire':'INFINITE','data':[]};});let f=e?.['data']?.['find'](g=>g['type']===a);if(!f){f=await this['fetch_imp'](d,a,b);if(!f){a86b('token\x20not\x20found','token\x20type:\x20'+a);return;}const g=[...e?.['data']||[],f];await Cache['read']([...this['cacheKey'],d],async h=>({'expire':'INFINITE','data':g}),!![]);}else{if(b&&f['alias']!==b){f['alias']=b;const h=e?.['data']?.['map'](i=>i['type']===a?f:i)||[];await Cache['read']([...this['cacheKey'],d],async i=>({'expire':'INFINITE','data':h}),!![]);}}return f;}async['list'](a,b){const c=await Config['Instance']()['network_get'](b);let d=await Cache['read']([...this['cacheKey'],c],async h=>{return{'expire':'INFINITE','data':[]};}),e=d?.['data']||[];const f=a?.['type']??'0x2::wow::WOW',g=a?.['type']?a?.['alias_or_name']:void 0x0;if(!e['find'](h=>h['type']===f)){const h=await this['fetch_imp'](c,f,g);if(h){const i=[...e,h];await Cache['read']([...this['cacheKey'],c],async j=>({'expire':'INFINITE','data':i}),!![]),d=await Cache['read']([...this['cacheKey'],c],async j=>({'expire':'INFINITE','data':i})),e=d?.['data']||[];}}if(a){e=e['filter'](j=>{let k=!![];if(a['symbol']&&k)k=j['symbol']?.['toLowerCase']()===a['symbol']['toLowerCase']();if(a['type']&&k)k=j['type']===f;return k;});if(a['alias_or_name']){const j=a['alias_or_name']['toLowerCase']();e=e['map'](k=>{let l=0x0;const m=k['alias']?.['toLowerCase']()||'',n=k['name']?.['toLowerCase']()||'';if(m===j||n===j)l=0x3;else{if(m['startsWith'](j)||n['startsWith'](j))l=0x2;else{if(m['includes'](j)||n['includes'](j))l=0x1;}}return{...k,'_score':l};}),e=e['filter'](k=>k['_score']>0x0)['sort']((k,l)=>{const m=l['_score']-k['_score'];if(m!==0x0)return m;return(k['alias']?.['length']||0x0)+(k['name']?.['length']||0x0)-((l['alias']?.['length']||0x0)+(l['name']?.['length']||0x0));}),e=e['map'](k=>{const {_score:l,...m}=k;return m;});}}return e;}};export{TokenInfo};
1
+ import{t as a86a}from'../../client-DYIgIItb.mjs';import{o as a86b}from'../../exception-D2n4LV8F.mjs';import{a as a86c}from'../../network-UpRYD8EM.mjs';import'../../common-DC9BAaSg.mjs';import{d as a86d}from'../../storage-D1bEi2b7.mjs';import{Cache}from'./cache.mjs';import{Config}from'./config.mjs';var TokenInfo=class TokenInfo{constructor(){this['cacheKey']=['token'];}static{this['_instanceLock']=new a86d();}static['Instance'](){if(TokenInfo['_instance'])return TokenInfo['_instance'];if(!TokenInfo['_instance'])TokenInfo['_instance']=new TokenInfo();return TokenInfo['_instance'];}static['isValidMetadata'](a){if(!a)return![];const b=a['decimals'];return typeof b==='number'&&Number['isInteger'](b)&&b>=0x0&&b<=0xff;}async['fetch_imp'](a,b,c){const d=await new a86a({'url':a86c(a),'network':a})['getCoinMetadata']({'coinType':b});if(TokenInfo['isValidMetadata'](d))return{'alias':c,'type':b,...d};}async['fetch'](a,b,c){a=a??'0x2::wow::WOW';const d=await Config['Instance']()['network_get'](c),e=await Cache['read']([...this['cacheKey'],d],async g=>{return{'expire':'INFINITE','data':[]};});let f=e?.['data']?.['find'](g=>g['type']===a);if(!f){f=await this['fetch_imp'](d,a,b);if(!f){a86b('token\x20not\x20found','token\x20type:\x20'+a);return;}const g=[...e?.['data']||[],f];await Cache['read']([...this['cacheKey'],d],async h=>({'expire':'INFINITE','data':g}),!![]);}else{if(b&&f['alias']!==b){f['alias']=b;const h=e?.['data']?.['map'](i=>i['type']===a?f:i)||[];await Cache['read']([...this['cacheKey'],d],async i=>({'expire':'INFINITE','data':h}),!![]);}}return f;}async['list'](a,b){const c=await Config['Instance']()['network_get'](b);let d=await Cache['read']([...this['cacheKey'],c],async h=>{return{'expire':'INFINITE','data':[]};}),e=d?.['data']||[];const f=a?.['type']??'0x2::wow::WOW',g=a?.['type']?a?.['alias_or_name']:void 0x0;if(!e['find'](h=>h['type']===f)){const h=await this['fetch_imp'](c,f,g);if(h){const i=[...e,h];await Cache['read']([...this['cacheKey'],c],async j=>({'expire':'INFINITE','data':i}),!![]),d=await Cache['read']([...this['cacheKey'],c],async j=>({'expire':'INFINITE','data':i})),e=d?.['data']||[];}}if(a){e=e['filter'](j=>{let k=!![];if(a['symbol']&&k)k=j['symbol']?.['toLowerCase']()===a['symbol']['toLowerCase']();if(a['type']&&k)k=j['type']===f;return k;});if(a['alias_or_name']){const j=a['alias_or_name']['toLowerCase']();e=e['map'](k=>{let l=0x0;const m=k['alias']?.['toLowerCase']()||'',n=k['name']?.['toLowerCase']()||'';if(m===j||n===j)l=0x3;else{if(m['startsWith'](j)||n['startsWith'](j))l=0x2;else{if(m['includes'](j)||n['includes'](j))l=0x1;}}return{...k,'_score':l};}),e=e['filter'](k=>k['_score']>0x0)['sort']((k,l)=>{const m=l['_score']-k['_score'];if(m!==0x0)return m;return(k['alias']?.['length']||0x0)+(k['name']?.['length']||0x0)-((l['alias']?.['length']||0x0)+(l['name']?.['length']||0x0));}),e=e['map'](k=>{const {_score:l,...m}=k;return m;});}}return e;}};export{TokenInfo};
@@ -1,2 +1,2 @@
1
- import { An as BuiltAttachmentEnvelope, Bn as extOf, Fn as ReadPresentationOptions, Gn as sniffKindAndMime, Hn as presentMessageForRead, In as SniffOptions, Ln as assertZipMagic, Mn as ENVELOPE_MAX_TOTAL_BYTES, Nn as MANIFEST_ENTRY, Pn as PAYLOAD_PREFIX, Rn as buildAttachmentEnvelope, Un as presentMessagesForRead, Vn as parseAttachmentEnvelope, Wn as sanitizeFileName, jn as ENVELOPE_MAX_ENTRIES, kn as BuildAttachmentEnvelopeInput, zn as describeAttachmentFromMetadata } from "../../index-BQOp8Peb.mjs";
1
+ import { An as BuiltAttachmentEnvelope, Bn as extOf, Fn as ReadPresentationOptions, Gn as sniffKindAndMime, Hn as presentMessageForRead, In as SniffOptions, Ln as assertZipMagic, Mn as ENVELOPE_MAX_TOTAL_BYTES, Nn as MANIFEST_ENTRY, Pn as PAYLOAD_PREFIX, Rn as buildAttachmentEnvelope, Un as presentMessagesForRead, Vn as parseAttachmentEnvelope, Wn as sanitizeFileName, jn as ENVELOPE_MAX_ENTRIES, kn as BuildAttachmentEnvelopeInput, zn as describeAttachmentFromMetadata } from "../../index-DKne9Aij.mjs";
2
2
  export { BuildAttachmentEnvelopeInput, BuiltAttachmentEnvelope, ENVELOPE_MAX_ENTRIES, ENVELOPE_MAX_TOTAL_BYTES, MANIFEST_ENTRY, PAYLOAD_PREFIX, ReadPresentationOptions, SniffOptions, assertZipMagic, buildAttachmentEnvelope, describeAttachmentFromMetadata, extOf, parseAttachmentEnvelope, presentMessageForRead, presentMessagesForRead, sanitizeFileName, sniffKindAndMime };
@@ -1,2 +1,2 @@
1
- import { $n as SettingsRequest, An as BuiltAttachmentEnvelope, Ar as Attachment, Bn as extOf, Cr as watch_messages, Er as Messenger, Fn as ReadPresentationOptions, Gn as sniffKindAndMime, Gr as DEFAULT_MESSENGER_CONFIG, Hn as presentMessageForRead, Hr as ConversationInfo, In as SniffOptions, Jn as FriendslistRequest, Kn as BlacklistRequest, Kr as DEFAULT_QUERY_LIMIT, Ln as assertZipMagic, Mn as ENVELOPE_MAX_TOTAL_BYTES, Mr as AttachmentKind, Nn as MANIFEST_ENTRY, Nr as AttachmentManifest, Pi as SendMessageResult, Pn as PAYLOAD_PREFIX, Qn as GuardlistResponse, Rn as buildAttachmentEnvelope, Sr as watch_conversations, Tr as MessengerManager, Un as presentMessagesForRead, Ur as ConversationsFilter, Vn as parseAttachmentEnvelope, Wn as sanitizeFileName, Xn as GuardParam, Yn as FriendslistResponse, Zn as GuardlistRequest, _a as ZipMetadata, _i as MessengerError, _r as send_file, aa as WtsGenerationParams, ar as extract_zip_messages, br as sign_wts, ci as MessageContentType, cr as getMessengerManager, dr as mark_conversation_as_viewed, ea as WTS_FILE_BYTES_LIMIT, er as SettingsResponse, fi as MessageListResult, fr as mark_messages_as_viewed, ga as ZipContentType, gi as MessengerConfig, gr as search_messages, hi as MessageType, hr as pull_messages, ia as WtsFileResult, ii as MAX_QUERY_LIMIT, ir as extractZipFromPlaintext, ji as SendAttachmentOptions, jn as ENVELOPE_MAX_ENTRIES, jr as AttachmentDescriptor, kn as BuildAttachmentEnvelopeInput, li as MessageDirection, lr as get_attachment, mr as proof_message, nr as emergency_pull, or as friendslist, pi as MessageStatus, pr as peer_registered, qn as BlacklistResponse, qr as DecryptedMessage, rr as export_attachment, si as Message, sr as generate_wts, ta as WTS_MAX_MESSAGE_COUNT, tr as blacklist, ui as MessageFilter, ur as guardlist, vi as MessengerErrorCode, vr as send_message, wi as PullAccountResult, wr as wts2html, xr as verify_wts, yi as NORMAL_MESSAGE_BYTES_LIMIT, yr as settings, zn as describeAttachmentFromMetadata } from "../../index-BQOp8Peb.mjs";
1
+ import { $n as SettingsRequest, An as BuiltAttachmentEnvelope, Ar as Attachment, Bn as extOf, Cr as watch_messages, Ei as PullAccountResult, Er as Messenger, Fn as ReadPresentationOptions, Gn as sniffKindAndMime, Gr as DEFAULT_MESSENGER_CONFIG, Hn as presentMessageForRead, Hr as ConversationInfo, Ii as SendMessageResult, In as SniffOptions, Jn as FriendslistRequest, Kn as BlacklistRequest, Kr as DEFAULT_QUERY_LIMIT, Ln as assertZipMagic, Mn as ENVELOPE_MAX_TOTAL_BYTES, Mr as AttachmentKind, Ni as SendAttachmentOptions, Nn as MANIFEST_ENTRY, Nr as AttachmentManifest, Pn as PAYLOAD_PREFIX, Qn as GuardlistResponse, Rn as buildAttachmentEnvelope, Sr as watch_conversations, Tr as MessengerManager, Un as presentMessagesForRead, Ur as ConversationsFilter, Vn as parseAttachmentEnvelope, Wn as sanitizeFileName, Xn as GuardParam, Yn as FriendslistResponse, Zn as GuardlistRequest, _i as MessageType, _r as send_file, ai as MAX_QUERY_LIMIT, ar as extract_zip_messages, bi as MessengerErrorCode, br as sign_wts, ci as Message, cr as getMessengerManager, di as MessageFilter, dr as mark_conversation_as_viewed, er as SettingsResponse, fr as mark_messages_as_viewed, gr as search_messages, hi as MessageStatus, hr as pull_messages, ir as extractZipFromPlaintext, jn as ENVELOPE_MAX_ENTRIES, jr as AttachmentDescriptor, kn as BuildAttachmentEnvelopeInput, li as MessageContentType, lr as get_attachment, mr as proof_message, na as WTS_FILE_BYTES_LIMIT, nr as emergency_pull, oa as WtsFileResult, or as friendslist, pi as MessageListResult, pr as peer_registered, qn as BlacklistResponse, qr as DecryptedMessage, ra as WTS_MAX_MESSAGE_COUNT, rr as export_attachment, sa as WtsGenerationParams, sr as generate_wts, tr as blacklist, ui as MessageDirection, ur as guardlist, va as ZipContentType, vi as MessengerConfig, vr as send_message, wr as wts2html, xi as NORMAL_MESSAGE_BYTES_LIMIT, xr as verify_wts, ya as ZipMetadata, yi as MessengerError, yr as settings, zn as describeAttachmentFromMetadata } from "../../index-DKne9Aij.mjs";
2
2
  export { type Attachment, type AttachmentDescriptor, type AttachmentKind, type AttachmentManifest, BlacklistRequest, BlacklistResponse, BuildAttachmentEnvelopeInput, BuiltAttachmentEnvelope, type ConversationInfo, type ConversationsFilter, DEFAULT_MESSENGER_CONFIG, DEFAULT_QUERY_LIMIT, type DecryptedMessage, ENVELOPE_MAX_ENTRIES, ENVELOPE_MAX_TOTAL_BYTES, FriendslistRequest, FriendslistResponse, GuardParam, GuardlistRequest, GuardlistResponse, MANIFEST_ENTRY, MAX_QUERY_LIMIT, type Message, type MessageContentType, MessageDirection, type MessageFilter, type MessageListResult, MessageStatus, MessageType, Messenger, type MessengerConfig, MessengerError, MessengerErrorCode, MessengerManager, NORMAL_MESSAGE_BYTES_LIMIT, PAYLOAD_PREFIX, type PullAccountResult, ReadPresentationOptions, type SendAttachmentOptions, type SendMessageResult, SettingsRequest, SettingsResponse, SniffOptions, WTS_FILE_BYTES_LIMIT, WTS_MAX_MESSAGE_COUNT, type WtsFileResult, type WtsGenerationParams, type ZipContentType, type ZipMetadata, assertZipMagic, blacklist, buildAttachmentEnvelope, describeAttachmentFromMetadata, emergency_pull, export_attachment, extOf, extractZipFromPlaintext, extract_zip_messages, friendslist, generate_wts, getMessengerManager, get_attachment, guardlist, mark_conversation_as_viewed, mark_messages_as_viewed, parseAttachmentEnvelope, peer_registered, presentMessageForRead, presentMessagesForRead, proof_message, pull_messages, sanitizeFileName, search_messages, send_file, send_message, settings, sign_wts, sniffKindAndMime, verify_wts, watch_conversations, watch_messages, wts2html };
@@ -1 +1 @@
1
- import{DEFAULT_MESSENGER_CONFIG,DEFAULT_QUERY_LIMIT,MAX_QUERY_LIMIT,MessageDirection,MessageStatus,MessageType,MessengerError,MessengerErrorCode,NORMAL_MESSAGE_BYTES_LIMIT,WTS_FILE_BYTES_LIMIT,WTS_MAX_MESSAGE_COUNT}from'./types.mjs';import{t as a91a}from'../../messenger-D9cIgjVB.mjs';import{ENVELOPE_MAX_ENTRIES,ENVELOPE_MAX_TOTAL_BYTES,MANIFEST_ENTRY,PAYLOAD_PREFIX,assertZipMagic,buildAttachmentEnvelope,describeAttachmentFromMetadata,extOf,parseAttachmentEnvelope,presentMessageForRead,presentMessagesForRead,sanitizeFileName,sniffKindAndMime}from'./attachment.mjs';import{C as a91b,S as a91c,T as a91d,_ as a91e,a as a91f,b as a91g,c as a91h,d as a91i,f as a91j,g as a91k,h as a91l,i as a91m,l as a91n,m as a91o,n as a91p,o as a91q,p as a91r,r as a91s,s as a91t,t as a91u,u as a91v,v as a91w,w as a91x,x as a91y,y as a91z}from'../../messenger-api-BkZ1Urhv.mjs';export{DEFAULT_MESSENGER_CONFIG,DEFAULT_QUERY_LIMIT,ENVELOPE_MAX_ENTRIES,ENVELOPE_MAX_TOTAL_BYTES,MANIFEST_ENTRY,MAX_QUERY_LIMIT,MessageDirection,MessageStatus,MessageType,a91a as Messenger,MessengerError,MessengerErrorCode,a91d as MessengerManager,NORMAL_MESSAGE_BYTES_LIMIT,PAYLOAD_PREFIX,WTS_FILE_BYTES_LIMIT,WTS_MAX_MESSAGE_COUNT,assertZipMagic,a91u as blacklist,buildAttachmentEnvelope,describeAttachmentFromMetadata,a91p as emergency_pull,a91s as export_attachment,extOf,a91m as extractZipFromPlaintext,a91f as extract_zip_messages,a91q as friendslist,a91t as generate_wts,a91h as getMessengerManager,a91n as get_attachment,a91v as guardlist,a91i as mark_conversation_as_viewed,a91j as mark_messages_as_viewed,parseAttachmentEnvelope,a91r as peer_registered,presentMessageForRead,presentMessagesForRead,a91o as proof_message,a91l as pull_messages,sanitizeFileName,a91k as search_messages,a91e as send_file,a91w as send_message,a91z as settings,a91g as sign_wts,sniffKindAndMime,a91y as verify_wts,a91c as watch_conversations,a91b as watch_messages,a91x as wts2html};
1
+ import{DEFAULT_MESSENGER_CONFIG,DEFAULT_QUERY_LIMIT,MAX_QUERY_LIMIT,MessageDirection,MessageStatus,MessageType,MessengerError,MessengerErrorCode,NORMAL_MESSAGE_BYTES_LIMIT,WTS_FILE_BYTES_LIMIT,WTS_MAX_MESSAGE_COUNT}from'./types.mjs';import{t as a91a}from'../../messenger-CsUbfW03.mjs';import{ENVELOPE_MAX_ENTRIES,ENVELOPE_MAX_TOTAL_BYTES,MANIFEST_ENTRY,PAYLOAD_PREFIX,assertZipMagic,buildAttachmentEnvelope,describeAttachmentFromMetadata,extOf,parseAttachmentEnvelope,presentMessageForRead,presentMessagesForRead,sanitizeFileName,sniffKindAndMime}from'./attachment.mjs';import{C as a91b,S as a91c,T as a91d,_ as a91e,a as a91f,b as a91g,c as a91h,d as a91i,f as a91j,g as a91k,h as a91l,i as a91m,l as a91n,m as a91o,n as a91p,o as a91q,p as a91r,r as a91s,s as a91t,t as a91u,u as a91v,v as a91w,w as a91x,x as a91y,y as a91z}from'../../messenger-api-BHzaiB8Z.mjs';export{DEFAULT_MESSENGER_CONFIG,DEFAULT_QUERY_LIMIT,ENVELOPE_MAX_ENTRIES,ENVELOPE_MAX_TOTAL_BYTES,MANIFEST_ENTRY,MAX_QUERY_LIMIT,MessageDirection,MessageStatus,MessageType,a91a as Messenger,MessengerError,MessengerErrorCode,a91d as MessengerManager,NORMAL_MESSAGE_BYTES_LIMIT,PAYLOAD_PREFIX,WTS_FILE_BYTES_LIMIT,WTS_MAX_MESSAGE_COUNT,assertZipMagic,a91u as blacklist,buildAttachmentEnvelope,describeAttachmentFromMetadata,a91p as emergency_pull,a91s as export_attachment,extOf,a91m as extractZipFromPlaintext,a91f as extract_zip_messages,a91q as friendslist,a91t as generate_wts,a91h as getMessengerManager,a91n as get_attachment,a91v as guardlist,a91i as mark_conversation_as_viewed,a91j as mark_messages_as_viewed,parseAttachmentEnvelope,a91r as peer_registered,presentMessageForRead,presentMessagesForRead,a91o as proof_message,a91l as pull_messages,sanitizeFileName,a91k as search_messages,a91e as send_file,a91w as send_message,a91z as settings,a91g as sign_wts,sniffKindAndMime,a91y as verify_wts,a91c as watch_conversations,a91b as watch_messages,a91x as wts2html};
@@ -1,2 +1,2 @@
1
- import { $n as SettingsRequest, Cr as watch_messages, Jn as FriendslistRequest, Kn as BlacklistRequest, Qn as GuardlistResponse, Sr as watch_conversations, Xn as GuardParam, Yn as FriendslistResponse, Zn as GuardlistRequest, _r as send_file, ar as extract_zip_messages, br as sign_wts, cr as getMessengerManager, dr as mark_conversation_as_viewed, er as SettingsResponse, fr as mark_messages_as_viewed, gr as search_messages, hr as pull_messages, ir as extractZipFromPlaintext, lr as get_attachment, mr as proof_message, nr as emergency_pull, or as friendslist, pr as peer_registered, qn as BlacklistResponse, rr as export_attachment, sr as generate_wts, tr as blacklist, ur as guardlist, vr as send_message, wr as wts2html, xr as verify_wts, yr as settings } from "../../index-BQOp8Peb.mjs";
1
+ import { $n as SettingsRequest, Cr as watch_messages, Jn as FriendslistRequest, Kn as BlacklistRequest, Qn as GuardlistResponse, Sr as watch_conversations, Xn as GuardParam, Yn as FriendslistResponse, Zn as GuardlistRequest, _r as send_file, ar as extract_zip_messages, br as sign_wts, cr as getMessengerManager, dr as mark_conversation_as_viewed, er as SettingsResponse, fr as mark_messages_as_viewed, gr as search_messages, hr as pull_messages, ir as extractZipFromPlaintext, lr as get_attachment, mr as proof_message, nr as emergency_pull, or as friendslist, pr as peer_registered, qn as BlacklistResponse, rr as export_attachment, sr as generate_wts, tr as blacklist, ur as guardlist, vr as send_message, wr as wts2html, xr as verify_wts, yr as settings } from "../../index-DKne9Aij.mjs";
2
2
  export { BlacklistRequest, BlacklistResponse, FriendslistRequest, FriendslistResponse, GuardParam, GuardlistRequest, GuardlistResponse, SettingsRequest, SettingsResponse, blacklist, emergency_pull, export_attachment, extractZipFromPlaintext, extract_zip_messages, friendslist, generate_wts, getMessengerManager, get_attachment, guardlist, mark_conversation_as_viewed, mark_messages_as_viewed, peer_registered, proof_message, pull_messages, search_messages, send_file, send_message, settings, sign_wts, verify_wts, watch_conversations, watch_messages, wts2html };
@@ -1 +1 @@
1
- import{C as a92a,S as a92b,_ as a92c,a as a92d,b as a92e,c as a92f,d as a92g,f as a92h,g as a92i,h as a92j,i as a92k,l as a92l,m as a92m,n as a92n,o as a92o,p as a92p,r as a92q,s as a92r,t as a92s,u as a92t,v as a92u,w as a92v,x as a92w,y as a92x}from'../../messenger-api-BkZ1Urhv.mjs';export{a92s as blacklist,a92n as emergency_pull,a92q as export_attachment,a92k as extractZipFromPlaintext,a92d as extract_zip_messages,a92o as friendslist,a92r as generate_wts,a92f as getMessengerManager,a92l as get_attachment,a92t as guardlist,a92g as mark_conversation_as_viewed,a92h as mark_messages_as_viewed,a92p as peer_registered,a92m as proof_message,a92j as pull_messages,a92i as search_messages,a92c as send_file,a92u as send_message,a92x as settings,a92e as sign_wts,a92w as verify_wts,a92b as watch_conversations,a92a as watch_messages,a92v as wts2html};
1
+ import{C as a92a,S as a92b,_ as a92c,a as a92d,b as a92e,c as a92f,d as a92g,f as a92h,g as a92i,h as a92j,i as a92k,l as a92l,m as a92m,n as a92n,o as a92o,p as a92p,r as a92q,s as a92r,t as a92s,u as a92t,v as a92u,w as a92v,x as a92w,y as a92x}from'../../messenger-api-BHzaiB8Z.mjs';export{a92s as blacklist,a92n as emergency_pull,a92q as export_attachment,a92k as extractZipFromPlaintext,a92d as extract_zip_messages,a92o as friendslist,a92r as generate_wts,a92f as getMessengerManager,a92l as get_attachment,a92t as guardlist,a92g as mark_conversation_as_viewed,a92h as mark_messages_as_viewed,a92p as peer_registered,a92m as proof_message,a92j as pull_messages,a92i as search_messages,a92c as send_file,a92u as send_message,a92x as settings,a92e as sign_wts,a92w as verify_wts,a92b as watch_conversations,a92a as watch_messages,a92v as wts2html};
@@ -1,2 +1,2 @@
1
- import { Er as Messenger } from "../../index-BQOp8Peb.mjs";
1
+ import { Er as Messenger } from "../../index-DKne9Aij.mjs";
2
2
  export { Messenger };
@@ -1 +1 @@
1
- import{t as a93a}from'../../messenger-D9cIgjVB.mjs';export{a93a as Messenger};
1
+ import{t as a93a}from'../../messenger-CsUbfW03.mjs';export{a93a as Messenger};
@@ -1,4 +1,4 @@
1
- import { ki as ReplyTo } from "../../index-BQOp8Peb.mjs";
1
+ import { ji as ReplyTo } from "../../index-DKne9Aij.mjs";
2
2
 
3
3
  //#region src/w/messenger/reply.d.ts
4
4
  /** 引用前缀标记头 */
@@ -1,4 +1,4 @@
1
- import { gi as MessengerConfig, si as Message, zi as SessionState } from "../../index-BQOp8Peb.mjs";
1
+ import { Vi as SessionState, ci as Message, mi as MessageProofRecord, vi as MessengerConfig } from "../../index-DKne9Aij.mjs";
2
2
  import Database from "libsql";
3
3
 
4
4
  //#region src/w/messenger/storage.d.ts
@@ -22,6 +22,8 @@ interface StorageType {
22
22
  storeSession(encodedAddress: string, record: string): Promise<void>;
23
23
  removeSession(encodedAddress: string): Promise<void>;
24
24
  }
25
+ declare function getMessengerDbDir(): string;
26
+ declare function ensureDirExists(dir: string): void;
25
27
  declare function getDatabase(userAddress: string): Database.Database;
26
28
  /**
27
29
  * 重置数据库连接
@@ -83,8 +85,35 @@ declare class MessageStorage {
83
85
  constructor(userAddress: string);
84
86
  private get db();
85
87
  saveMessage(message: Message): void;
88
+ /**
89
+ * Append one on-chain Proof record to a message after a successful
90
+ * proof_message() transaction. Idempotent per proof object address.
91
+ *
92
+ * A message may carry MANY proofs: either conversation party may submit
93
+ * repeatedly, and every submission mints a distinct immutable Proof
94
+ * object on chain.
95
+ */
96
+ addMessageProof(messageId: string, proofAddress: string, network?: string): MessageProofRecord[];
86
97
  getMessage(messageId: string): Message | undefined;
87
98
  getMessagesBySession(myAddress: string, peerAddress: string): Message[];
99
+ /**
100
+ * Keyset-paginated session window — the fast path behind opening a
101
+ * conversation ("latest N first, scroll up for more").
102
+ *
103
+ * Without a cursor it returns the NEWEST `limit` messages; with a
104
+ * (beforeCreatedAt, beforeMessageId) cursor it returns the next older
105
+ * page. Results are returned in ASC (old→new) chronological order so
106
+ * callers can prepend them directly to the rendered thread.
107
+ *
108
+ * Each directional arm of the UNION ALL is bounded by its own
109
+ * ORDER BY … LIMIT (served straight from idx_messages_session_ts);
110
+ * the outer merge sorts at most 2×limit rows — the full session is
111
+ * never materialized even for 2000+ message threads.
112
+ */
113
+ getRecentMessagesBySession(myAddress: string, peerAddress: string, limit: number, before?: {
114
+ createdAt: number;
115
+ messageId: string;
116
+ }): Message[];
88
117
  /**
89
118
  * Keyword search over the local message store — the LIKE predicate is
90
119
  * pushed down to SQLite (per-account DB), so callers never pull full
@@ -131,6 +160,14 @@ declare class MessageStorage {
131
160
  * @returns 消息对象或 undefined
132
161
  */
133
162
  getMessageById(messageId: string): Message | undefined;
163
+ /**
164
+ * Delete a SENT message row that a retry supersedes (failed/rejected
165
+ * attempts stay behind after a resend otherwise, resurrecting ghost
166
+ * bubbles on every remount). Terminal delivered states (confirmed/read/
167
+ * decrypted) are NOT deletable; the messages_fts sync triggers keep the
168
+ * search index consistent with the removal.
169
+ */
170
+ deleteMessage(messageId: string): boolean;
134
171
  /**
135
172
  * 更新消息 ID(用于 Guard 消息确认后更新 messageId)
136
173
  *
@@ -266,4 +303,4 @@ declare class MessengerPersistStorage {
266
303
  }
267
304
  declare const defaultPersistStorage: MessengerPersistStorage;
268
305
  //#endregion
269
- export { MessageStorage, MessengerPersistStorage, PersistedMessengerState, SessionStateStorage, SignalProtocolStorage, defaultPersistStorage, getDatabase, resetDbConnection };
306
+ export { MessageStorage, MessengerPersistStorage, PersistedMessengerState, SessionStateStorage, SignalProtocolStorage, defaultPersistStorage, ensureDirExists, getDatabase, getMessengerDbDir, resetDbConnection };