@wowok/wowok 2.6.2 → 2.6.3

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 (99) hide show
  1. package/dist/esm/{arb-DVWx1QfD.mjs → arb-nQMgpGNL.mjs} +1 -1
  2. package/dist/esm/{base-BAe63oAT.mjs → base-BeyKRyxN.mjs} +1 -1
  3. package/dist/esm/{call-BZIT0pHs.mjs → call-BFBgAbT5.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-4RLOGmzt.mjs → client-BHoWLTS9.mjs} +1 -1
  7. package/dist/esm/common-uweycQjC.mjs +1 -0
  8. package/dist/esm/cryptography/index.d.mts +1 -1
  9. package/dist/esm/exception-C6IYkBi6.mjs +1 -0
  10. package/dist/esm/graphql/index.d.mts +1 -1
  11. package/dist/esm/graphql/index.mjs +1 -1
  12. package/dist/esm/{graphql-gC65K0Ol.mjs → graphql-BuI1Qpfl.mjs} +1 -1
  13. package/dist/esm/grpc/index.d.mts +1 -1
  14. package/dist/esm/grpc/index.mjs +1 -1
  15. package/dist/esm/{grpc-DXUftsa8.mjs → grpc-BVQ5x3iN.mjs} +1 -1
  16. package/dist/esm/{index-CiEBi_Uf.d.mts → index-XRt3NQGw.d.mts} +72 -3
  17. package/dist/esm/index.d.mts +2 -2
  18. package/dist/esm/index.mjs +1 -1
  19. package/dist/esm/jsonRpc/index.d.mts +1 -1
  20. package/dist/esm/jsonRpc/index.mjs +1 -1
  21. package/dist/esm/keypairs/ed25519/index.d.mts +1 -1
  22. package/dist/esm/keypairs/falcon512/index.d.mts +1 -1
  23. package/dist/esm/keypairs/passkey/index.d.mts +1 -1
  24. package/dist/esm/keypairs/secp256k1/index.d.mts +1 -1
  25. package/dist/esm/keypairs/secp256r1/index.d.mts +1 -1
  26. package/dist/esm/{messenger-Co1M8e5T.mjs → messenger-D9fVupe7.mjs} +1 -1
  27. package/dist/esm/{messenger-api-uoBMSPx-.mjs → messenger-api-DbkXL48d.mjs} +1 -1
  28. package/dist/esm/multisig/index.d.mts +1 -1
  29. package/dist/esm/{object-U0GIwoIo.mjs → object-CNhYUywH.mjs} +1 -1
  30. package/dist/esm/{passport-U9BAD6tV.mjs → passport-Dr2hdqAp.mjs} +1 -1
  31. package/dist/esm/{proof-DmXvb0fs.mjs → proof-ru9lasmi.mjs} +1 -1
  32. package/dist/esm/query-DcphPgdr.mjs +1 -0
  33. package/dist/esm/{received-eMOAzbYT.mjs → received-CWI5Xsf1.mjs} +1 -1
  34. package/dist/esm/{service-Cnr2PLD7.mjs → service-CH7uci0n.mjs} +1 -1
  35. package/dist/esm/transactions/index.d.mts +1 -1
  36. package/dist/esm/{util-D_L6mPoZ.mjs → util-DHshIuUZ.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 +2 -2
  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 +2 -2
  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/index.d.mts +1 -1
  76. package/dist/esm/w/local/index.mjs +1 -1
  77. package/dist/esm/w/local/local.mjs +1 -1
  78. package/dist/esm/w/local/project.mjs +1 -1
  79. package/dist/esm/w/local/storage.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/index.d.mts +1 -1
  83. package/dist/esm/w/messenger/index.mjs +1 -1
  84. package/dist/esm/w/messenger/messenger-api.d.mts +1 -1
  85. package/dist/esm/w/messenger/messenger-api.mjs +1 -1
  86. package/dist/esm/w/messenger/messenger.d.mts +1 -1
  87. package/dist/esm/w/messenger/messenger.mjs +1 -1
  88. package/dist/esm/w/messenger/storage.d.mts +1 -1
  89. package/dist/esm/w/messenger/storage.mjs +1 -1
  90. package/dist/esm/w/messenger/types.d.mts +1 -1
  91. package/dist/esm/w/query/index.d.mts +2 -2
  92. package/dist/esm/w/query/index.mjs +1 -1
  93. package/dist/esm/w/query/object.d.mts +1 -1
  94. package/dist/esm/w/query/object.mjs +1 -1
  95. package/dist/esm/{w-D3w1ryxR.mjs → w-Bnm7KhWo.mjs} +1 -1
  96. package/package.json +1 -1
  97. package/dist/esm/common-asa9BxDq.mjs +0 -1
  98. package/dist/esm/exception-0GqTGX2P.mjs +0 -1
  99. package/dist/esm/query-D-J4v6JL.mjs +0 -1
@@ -1,3 +1,3 @@
1
- import { Fy as AccountData, Iy as AccountFilter, Ly as DEFAULT_ACCOUNT_NAME, Py as Account, Ry as FaucetCoinInfo, zy as MAX_MESSENGER_ACCOUNTS } from "../../index-CiEBi_Uf.mjs";
1
+ import { By as AccountFilter, Hy as FaucetCoinInfo, Ry as Account, Uy as MAX_MESSENGER_ACCOUNTS, Vy as DEFAULT_ACCOUNT_NAME, zy as AccountData } from "../../index-XRt3NQGw.mjs";
2
2
  import { t as IAccountStorage } from "../../storage-BegHqtD4.mjs";
3
3
  export { Account, AccountData, AccountFilter, DEFAULT_ACCOUNT_NAME, FaucetCoinInfo, type IAccountStorage, MAX_MESSENGER_ACCOUNTS };
@@ -1 +1 @@
1
- import{a as a76a}from'../../wow-types-DcqbnAaK.mjs';import{t as a76b}from'../../client-4RLOGmzt.mjs';import{t as a76c}from'../../Transaction-CzqJDezj.mjs';import{n as a76d}from'../../network-CeDd07Hg.mjs';import{c as a76e}from'../../keypair-BqNhxtoP.mjs';import{n as a76f,r as a76g,t as a76h}from'../../faucet-RNvBvVJf.mjs';import{n as a76i}from'../../falcon512-Be5BlPLD.mjs';import{L as a76j,U as a76k}from'../../common-asa9BxDq.mjs';import{o as a76l}from'../../exception-0GqTGX2P.mjs';import{t as a76m}from'../../lock-QdrQzo0u.mjs';import{SQLiteAccountStorage}from'./storage.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_MESSENGER_ACCOUNTS=0x64;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 a76b({'url':a76d(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 a76b({'url':a76d(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 a76b({'url':a76d(k),'network':k});if(j>=BigInt(0x0)){if(!e||a76j(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(n['length']===0x1)return c['splitCoins'](n[0x0],[j]);else{const t=n['pop']();return c['mergeCoins'](t,n),c['splitCoins'](t,[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,d,c,e);if(!h)a76l('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=a76i['fromSecretKey'](f['secret']);if(!g)return void 0x0;const h=new a76c(),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 a76b({'url':a76d(j),'network':j})['signAndExecuteTransaction']({'transaction':h,'signer':g,'options':{'showObjectChanges':!![],'showEffects':!![],'showEvents':!![]}}),l=c??'0x2::wow::WOW';return(k?.['objectChanges']?.['find'](m=>m?.['type']==='created'&&(m?.['objectType'])['includes'](l)))?.['objectId'];}};}static{this['_dataLock']=new a76m();}static{this['_storageLock']=new a76m();}static{this['orphanMigrationDone']=![];}['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 SQLiteAccountStorage());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&&!a76k(b))a76l('invalid\x20name','Name\x20'+b+'\x20is\x20exceeds\x20max\x2064');const f=a76i['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'](o=>o['address']['toLowerCase']()===g['toLowerCase']())!==-0x1)a76l('invalid\x20parameter','Account\x20with\x20address\x20'+g+'\x20already\x20exists');const l=k['findIndex'](o=>Account['nameMatch'](o['name'],b));if(l!==-0x1){if(c){if(b==='')a76l('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 o=Date['now']();k[l]['suspended']=!![],k[l]['name']=void 0x0,k[l]['messenger']=![],k[l]['updatedAt']=o;}else a76l('account\x20name\x20exist','Name\x20'+(b||'')+'\x20already\x20exist');}if(d){const p=k['filter'](q=>q['messenger']===!![]&&!q['suspended'])['length'];if(p>=0x64)a76l('invalid\x20parameter','Maximum\x20100\x20messenger\x20accounts\x20allowed,\x20current\x20count:\x20'+p);}const m=Date['now'](),n={'name':b,'address':g,'secret':h,'messenger':d||![],'createdAt':m,'updatedAt':m};return k['push'](n),await i['put'](JSON['stringify'](k)),this['accountData'](n,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']=a76i['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&&!a76k(a))a76l('invalid\x20name','Name\x20'+a+'\x20is\x20exceeds\x20max\x2064');const e=a76i['generate']()['getSecretKey'](),f=a76i['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'](m=>Account['nameMatch'](m['name'],a));if(l!==-0x1){if(b){if(a==='')a76l('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 m=Date['now']();k[l]['suspended']=!![],k[l]['name']=void 0x0,k[l]['messenger']=![],k[l]['updatedAt']=m;}else a76l('account\x20name\x20exist','Name\x20'+(a||'')+'\x20already\x20exist');}if(c){const n=k['filter'](o=>o['messenger']===!![]&&!o['suspended'])['length'];if(n>=0x64)a76l('invalid\x20parameter','Maximum\x20100\x20messenger\x20accounts\x20allowed,\x20current\x20count:\x20'+n);}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&&a76a(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&&a76a(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&&a76a(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=a76i['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&&!a76k(a))a76l('invalid\x20name','Name\x20'+(a||'')+'\x20is\x20exceeds\x20max\x2064');if(b&&!a76k(b))a76l('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&&!a76k(b))a76l('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)))a76l('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)a76l('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&&!a76k(b))a76l('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)))a76l('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 a76g({'host':a76f(c),'recipient':d['address']}))['coins_sent']||[];}catch(j){h=j;if(j instanceof a76h&&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){const f=a76i['fromSecretKey'](e['secret']);if(f){const g=await Config['Instance']()['network_get'](d);return new a76b({'url':a76d(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)a76l('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)a76l('invalid\x20parameter','Invalid\x20from\x20address\x20or\x20name\x20'+d);const h=g?.['address']??c;if(!h)a76l('invalid\x20parameter','Invalid\x20to\x20address\x20or\x20name\x20'+c);const i=a76i['fromSecretKey'](f['secret']);if(i){const j=new a76c(),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 a76b({'url':a76d(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'])a76l('invalid\x20parameter','Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const d=a76i['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'])a76l('invalid\x20parameter','Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const d=a76i['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'])a76l('invalid\x20parameter','Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const c=a76e(b['secret'])['secretKey'],d=a76i['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>=0x64)a76l('invalid\x20parameter','Maximum\x20100\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_MESSENGER_ACCOUNTS};
1
+ import{a as a76a}from'../../wow-types-DcqbnAaK.mjs';import{t as a76b}from'../../client-BHoWLTS9.mjs';import{t as a76c}from'../../Transaction-CzqJDezj.mjs';import{n as a76d}from'../../network-CeDd07Hg.mjs';import{c as a76e}from'../../keypair-BqNhxtoP.mjs';import{n as a76f,r as a76g,t as a76h}from'../../faucet-RNvBvVJf.mjs';import{n as a76i}from'../../falcon512-Be5BlPLD.mjs';import{L as a76j,U as a76k}from'../../common-uweycQjC.mjs';import{o as a76l}from'../../exception-C6IYkBi6.mjs';import{t as a76m}from'../../lock-QdrQzo0u.mjs';import{SQLiteAccountStorage}from'./storage.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_MESSENGER_ACCOUNTS=0x64;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 a76b({'url':a76d(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 a76b({'url':a76d(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 a76b({'url':a76d(k),'network':k});if(j>=BigInt(0x0)){if(!e||a76j(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(n['length']===0x1)return c['splitCoins'](n[0x0],[j]);else{const t=n['pop']();return c['mergeCoins'](t,n),c['splitCoins'](t,[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,d,c,e);if(!h)a76l('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=a76i['fromSecretKey'](f['secret']);if(!g)return void 0x0;const h=new a76c(),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 a76b({'url':a76d(j),'network':j})['signAndExecuteTransaction']({'transaction':h,'signer':g,'options':{'showObjectChanges':!![],'showEffects':!![],'showEvents':!![]}}),l=c??'0x2::wow::WOW';return(k?.['objectChanges']?.['find'](m=>m?.['type']==='created'&&(m?.['objectType'])['includes'](l)))?.['objectId'];}};}static{this['_dataLock']=new a76m();}static{this['_storageLock']=new a76m();}static{this['orphanMigrationDone']=![];}['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 SQLiteAccountStorage());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&&!a76k(b))a76l('invalid\x20name','Name\x20'+b+'\x20is\x20exceeds\x20max\x2064');const f=a76i['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'](o=>o['address']['toLowerCase']()===g['toLowerCase']())!==-0x1)a76l('invalid\x20parameter','Account\x20with\x20address\x20'+g+'\x20already\x20exists');const l=k['findIndex'](o=>Account['nameMatch'](o['name'],b));if(l!==-0x1){if(c){if(b==='')a76l('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 o=Date['now']();k[l]['suspended']=!![],k[l]['name']=void 0x0,k[l]['messenger']=![],k[l]['updatedAt']=o;}else a76l('account\x20name\x20exist','Name\x20'+(b||'')+'\x20already\x20exist');}if(d){const p=k['filter'](q=>q['messenger']===!![]&&!q['suspended'])['length'];if(p>=0x64)a76l('invalid\x20parameter','Maximum\x20100\x20messenger\x20accounts\x20allowed,\x20current\x20count:\x20'+p);}const m=Date['now'](),n={'name':b,'address':g,'secret':h,'messenger':d||![],'createdAt':m,'updatedAt':m};return k['push'](n),await i['put'](JSON['stringify'](k)),this['accountData'](n,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']=a76i['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&&!a76k(a))a76l('invalid\x20name','Name\x20'+a+'\x20is\x20exceeds\x20max\x2064');const e=a76i['generate']()['getSecretKey'](),f=a76i['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'](m=>Account['nameMatch'](m['name'],a));if(l!==-0x1){if(b){if(a==='')a76l('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 m=Date['now']();k[l]['suspended']=!![],k[l]['name']=void 0x0,k[l]['messenger']=![],k[l]['updatedAt']=m;}else a76l('account\x20name\x20exist','Name\x20'+(a||'')+'\x20already\x20exist');}if(c){const n=k['filter'](o=>o['messenger']===!![]&&!o['suspended'])['length'];if(n>=0x64)a76l('invalid\x20parameter','Maximum\x20100\x20messenger\x20accounts\x20allowed,\x20current\x20count:\x20'+n);}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&&a76a(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&&a76a(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&&a76a(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=a76i['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&&!a76k(a))a76l('invalid\x20name','Name\x20'+(a||'')+'\x20is\x20exceeds\x20max\x2064');if(b&&!a76k(b))a76l('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&&!a76k(b))a76l('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)))a76l('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)a76l('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&&!a76k(b))a76l('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)))a76l('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 a76g({'host':a76f(c),'recipient':d['address']}))['coins_sent']||[];}catch(j){h=j;if(j instanceof a76h&&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){const f=a76i['fromSecretKey'](e['secret']);if(f){const g=await Config['Instance']()['network_get'](d);return new a76b({'url':a76d(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)a76l('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)a76l('invalid\x20parameter','Invalid\x20from\x20address\x20or\x20name\x20'+d);const h=g?.['address']??c;if(!h)a76l('invalid\x20parameter','Invalid\x20to\x20address\x20or\x20name\x20'+c);const i=a76i['fromSecretKey'](f['secret']);if(i){const j=new a76c(),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 a76b({'url':a76d(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'])a76l('invalid\x20parameter','Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const d=a76i['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'])a76l('invalid\x20parameter','Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const d=a76i['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'])a76l('invalid\x20parameter','Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const c=a76e(b['secret'])['secretKey'],d=a76i['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>=0x64)a76l('invalid\x20parameter','Maximum\x20100\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_MESSENGER_ACCOUNTS};
@@ -1 +1 @@
1
- import{r as a81a}from'../../mnemonics-C6qlqegr.mjs';import{o as a81b}from'../../exception-0GqTGX2P.mjs';import{t as a81c}from'../../lock-QdrQzo0u.mjs';import{SQLiteAccountStorage}from'./storage.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 a81c();}static{this['_storageLock']=new a81c();}['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 SQLiteAccountStorage(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'])a81b('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)a81b('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=a81a(a),e=HDKey['fromMasterSeed'](d),f=b||'m/44\x27/60\x27/0\x27/0/0',g=e['derive'](f);if(!g['privateKey'])a81b('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)a81b('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)a81b('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']())a81b('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'])a81b('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));}a81b('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']))a81b('invalid\x20parameter','Invalid\x20EVM\x20recipient\x20address:\x20'+a['to']);if(a['amount']<=0x0n)a81b('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'])a81b('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'])a81b('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')a81b('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{r as a81a}from'../../mnemonics-C6qlqegr.mjs';import{o as a81b}from'../../exception-C6IYkBi6.mjs';import{t as a81c}from'../../lock-QdrQzo0u.mjs';import{SQLiteAccountStorage}from'./storage.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 a81c();}static{this['_storageLock']=new a81c();}['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 SQLiteAccountStorage(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'])a81b('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)a81b('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=a81a(a),e=HDKey['fromMasterSeed'](d),f=b||'m/44\x27/60\x27/0\x27/0/0',g=e['derive'](f);if(!g['privateKey'])a81b('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)a81b('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)a81b('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']())a81b('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'])a81b('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));}a81b('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']))a81b('invalid\x20parameter','Invalid\x20EVM\x20recipient\x20address:\x20'+a['to']);if(a['amount']<=0x0n)a81b('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'])a81b('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'])a81b('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')a81b('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,4 +1,4 @@
1
- import { Ay as query_local_token_list, Cy as query_account, Dy as query_local_info_list, Ey as query_local_info_default, Fy as AccountData, Iy as AccountFilter, Ly as DEFAULT_ACCOUNT_NAME, My as TokenInfo, Ny as TokenTypeInfo, Oy as query_local_mark, Py as Account, Ry as FaucetCoinInfo, Sy as local_mark_operation, Ty as query_local_info, _y as QueryAccount, ay as AccountOrMark_Address, by as fetch_token_info_operation, cy as GetAccountOrMark_Address, dy as LocalInfoOperation, fy as LocalInfoOperationResult, gy as ManyAccountOrMark_Address, hy as LocalNameByAddress, iy as AccountOperationResult, jy as TokenDataFilter, ky as query_local_mark_list, ly as GetLocalNamesByAddresses, my as LocalMarkOperationResult, oy as FaucetNetwork, py as LocalMarkOperation, ry as AccountOperation, sy as FetchTokenInfoOperation, uy as GetManyAccountOrMark_Address, vy as QueryAccountResult, wy as query_account_list, xy as local_info_operation, yy as account_operation, zy as MAX_MESSENGER_ACCOUNTS } from "../../index-CiEBi_Uf.mjs";
1
+ import { Ay as query_local_info_default, By as AccountFilter, Cy as account_operation, Dy as query_account, Ey as local_mark_operation, Fy as TokenDataFilter, Hy as FaucetCoinInfo, Iy as TokenInfo, Ly as TokenTypeInfo, My as query_local_mark, Ny as query_local_mark_list, Oy as query_account_list, Py as query_local_token_list, Ry as Account, Sy as QueryAccountResult, Ty as local_info_operation, Uy as MAX_MESSENGER_ACCOUNTS, Vy as DEFAULT_ACCOUNT_NAME, _y as LocalMarkOperation, by as ManyAccountOrMark_Address, cy as AccountOperationResult, dy as FetchTokenInfoOperation, fy as GetAccountOrMark_Address, gy as LocalInfoOperationResult, hy as LocalInfoOperation, jy as query_local_info_list, ky as query_local_info, ly as AccountOrMark_Address, my as GetManyAccountOrMark_Address, py as GetLocalNamesByAddresses, sy as AccountOperation, uy as FaucetNetwork, vy as LocalMarkOperationResult, wy as fetch_token_info_operation, xy as QueryAccount, yy as LocalNameByAddress, zy as AccountData } from "../../index-XRt3NQGw.mjs";
2
2
  import { n as ConfigData, t as Config } from "../../config-CPqpYYLT.mjs";
3
3
  import { t as IAccountStorage } from "../../storage-BegHqtD4.mjs";
4
4
  import { a as SecureEnvelope, i as SecureAccountStorage, n as EncryptionMode, r as KeyMetadata, t as CryptoVault } from "../../secure-storage-CHe7jmEz.mjs";
@@ -1 +1 @@
1
- import{a as a82a}from'../../wow-types-DcqbnAaK.mjs';import{i as a82b,r as a82c}from'../../common-asa9BxDq.mjs';import{o as a82d}from'../../exception-0GqTGX2P.mjs';import{getWowDir,getWowMcpDir}from'./util.mjs';import{Config}from'./config.mjs';import{BUITIN_IDS,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_MESSENGER_ACCOUNTS}from'./account.mjs';import{TokenInfo}from'./token.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';import{LocalProject}from'./project.mjs';const GetAccountOrMark_Address=async a=>{if(!a)return await Account['Instance']()['get_address'](void 0x0);const b=typeof a==='string'?a:a['name_or_address'];if(!b)return await Account['Instance']()['get_address'](void 0x0);if(b['toLowerCase']()==='0xaaa')return a82c;if(b['toLowerCase']()==='0xaab')return a82b;if(a82a(b))return b;if(typeof a==='object'&&a?.['local_mark_first']){const c=await LocalMark['Instance']()['get_address'](b);if(!c)return await Account['Instance']()['get_address'](b);return c;}else{const d=await Account['Instance']()['get_address'](b);if(!d)return await LocalMark['Instance']()['get_address'](b);return d;}},GetLocalNamesByAddresses=async a=>{const [b,c]=await Promise['all']([Account['Instance']()['get_many'](a),LocalMark['Instance']()['get_many'](a)]);return a['map']((d,e)=>({'account':b[e]?.['name'],'local_mark':c[e]?.['name'],'address':d}));},GetManyAccountOrMark_Address=async a=>{const b=[];for(let c=0x0;c<a['entities']['length'];++c){const d=await GetAccountOrMark_Address(a['entities'][c]);if(!d&&a['check_all_founded'])a82d('invalid\x20parameter','entity\x20'+a['entities'][c]?.['name_or_address']+'\x20is\x20not\x20a\x20valid\x20address,\x20account\x20or\x20mark');if(d)b['push'](d);}return b;},query_local_mark_list=async a=>{return await LocalMark['Instance']()['list'](a);},query_account_list=async a=>{return await Account['Instance']()['list'](a);},query_local_info_list=async a=>{return await LocalInfo['Instance']()['list'](a);},query_local_token_list=async a=>{return await TokenInfo['Instance']()['list'](a);},query_local_mark=async a=>{if(typeof a==='string')return await LocalMark['Instance']()['get'](a);else{if(Array['isArray'](a))return await LocalMark['Instance']()['get_many'](a);}},query_local_info=async(a=LocalInfoNameDefault)=>{if(typeof a==='string')return await LocalInfo['Instance']()['get'](a);else{if(Array['isArray'](a))return await LocalInfo['Instance']()['get_many'](a);}},query_local_info_default=async(a=LocalInfoNameDefault)=>{if(typeof a==='string')return await LocalInfo['Instance']()['get_default'](a);else{if(Array['isArray'](a))return(await LocalInfo['Instance']()['get_many'](a))['map'](b=>b?.['default']);}},query_account=async a=>{const b=await Account['Instance']()['get'](a['name_or_address']);if(!b)return{'name_or_address':a['name_or_address']};const c={'address':b['address'],'name_or_address':b['name']},d=a['token_type']??'0x2::wow::WOW';if(a?.['balance'])c['balance']=await Account['Instance']()['balance'](d,b['address'],a['network']);else{if(a?.['coin'])c['coin']=await Account['Instance']()['coin'](d,a['coin']['cursor'],a['coin']['limit'],b['address'],a['network']);}return c;},account_operation=async a=>{var b={};if(a['gen']!=null){const c=await Account['Instance']()['gen'](a['gen']?.['name'],a['gen']?.['replaceExistName'],a['gen']?.['messenger']);b['gen']={'address':c?.['address'],'name':c?.['name'],'messenger':c?.['messenger']};}if(a['faucet']!=null)b['faucet']={'name_or_address':a['faucet']['name_or_address'],'result':await Account['Instance']()['faucet'](a['faucet']['name_or_address'],a['faucet']['network']),'network':a['faucet']['network']};if(a['suspend']!=null)b['suspend']={'name_or_address':a['suspend']['name_or_address'],'success':await Account['Instance']()['suspend'](a['suspend']['name_or_address'])};if(a['resume']!=null)b['resume']={'address':a['resume']['address'],'name':a['resume']['name'],'success':await Account['Instance']()['resume'](a['resume']['address'],a['resume']['name'])};if(a['rename']!=null)b['rename']={'name_or_address':a['rename']['name_or_address'],'new_name':a['rename']['new_name'],'success':await Account['Instance']()['rename'](a['rename']['name_or_address'],a['rename']['new_name'])};if(a['swap_name']!=null)b['swap_name']={'name_or_address1':a['swap_name']['name_or_address1'],'name_or_address2':a['swap_name']['name_or_address2'],'success':await Account['Instance']()['swap_name'](a['swap_name']['name_or_address1'],a['swap_name']['name_or_address2'])};if(a['transfer']!=null){const {name_or_address_from:d,name_or_address_to:e,amount:f,token_type:g,network:h}=a['transfer'];b['transfer']=await Account['Instance']()['transfer'](f,g,e,d,h);}if(a['get']!=null){const {balance_required:i,token_type:j,name_or_address:k,network:l}=a['get'];b['get']={'name_or_address':k,'balance_required':i,'token_type':j,'network':l,'coin_address':await Account['Instance']()['coinObject_with_balance'](i,j,k,l)};}if(a['signData']!=null){const {name_or_address:m,data:n,data_encoding:o}=a['signData'];let p=n;if(typeof n==='string'&&o)switch(o){case'base64':p=Uint8Array['from'](Buffer['from'](n,'base64'));break;case'hex':p=Uint8Array['from'](Buffer['from'](n['replace'](/^0x/,''),'hex'));break;default:p=n;break;}const q=await Account['Instance']()['signData'](m,p);b['signData']={'name_or_address':m,'signature':q['signature'],'publicKey':q['publicKey'],'address':q['address']};}if(a['messenger']!=null){const {name_or_account:r,enabled:s}=a['messenger'];await Account['Instance']()['set_messenger'](r,s),b['messenger']={'name_or_account':r,'enabled':s};}return b;},local_mark_operation=async a=>{const b={};if(a['clear'])b['clear']=await LocalMark['Instance']()['clear']();else{if(a['add'])b['add']=await LocalMark['Instance']()['put'](a['add']['data']);else{if(a['remove'])b['remove']=await LocalMark['Instance']()['del'](a['remove']['names']);}}return b;},local_info_operation=async a=>{if(a['clear'])await LocalInfo['Instance']()['clear']();else{if(a['add'])await LocalInfo['Instance']()['add'](a['add']['data']);else{if(a['remove'])await Promise['all'](a['remove']['data']['map'](b=>LocalInfo['Instance']()['del'](b)));else{if(a['reset'])await LocalInfo['Instance']()['reset_contents'](a['reset']['name'],a['reset']['contents']);}}}return{'success':!![]};},fetch_token_info_operation=async a=>{return await TokenInfo['Instance']()['fetch'](a['tokenType'],a?.['alias'],a?.['network']);};export{Account,BUITIN_IDS,Config,CryptoVault,DEFAULT_ACCOUNT_NAME,DEFAULT_LIMITS,ETH_MAINNET,EvmAccount,EvmNetworkRegistry,GetAccountOrMark_Address,GetLocalNamesByAddresses,GetManyAccountOrMark_Address,LocalInfo,LocalInfoContentMaxCount,LocalInfoContentMaxLength,LocalInfoNameDefault,LocalInfoNameMaxLength,LocalMark,LocalMarkNameMaxLength,LocalMarkTagMaxCount,LocalMarkTagMaxLength,LocalProject,MAX_MESSENGER_ACCOUNTS,SecureAccountStorage,TokenInfo,WIP,WipError,WipSizeError,WipValidationError,account_operation,bytesToBigInt,bytesToHex,createWip,fetch_token_info_operation,generate_wip,getWowDir,getWowMcpDir,hexToBytes,isValidAddress,isValidEvmAddress,loadWip,local_info_operation,local_mark_operation,privateKeyToAddress,query_account,query_account_list,query_local_info,query_local_info_default,query_local_info_list,query_local_mark,query_local_mark_list,query_local_token_list,registerBridgeEvmNetworks,signEIP1559,signLegacy,sign_wip,toChecksumAddress,verifyWip,verify_wip,wip2html,wipToHtml};
1
+ import{a as a82a}from'../../wow-types-DcqbnAaK.mjs';import{i as a82b,r as a82c}from'../../common-uweycQjC.mjs';import{o as a82d}from'../../exception-C6IYkBi6.mjs';import{getWowDir,getWowMcpDir}from'./util.mjs';import{Config}from'./config.mjs';import{BUITIN_IDS,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_MESSENGER_ACCOUNTS}from'./account.mjs';import{TokenInfo}from'./token.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';import{LocalProject}from'./project.mjs';const GetAccountOrMark_Address=async a=>{if(!a)return await Account['Instance']()['get_address'](void 0x0);const b=typeof a==='string'?a:a['name_or_address'];if(!b)return await Account['Instance']()['get_address'](void 0x0);if(b['toLowerCase']()==='0xaaa')return a82c;if(b['toLowerCase']()==='0xaab')return a82b;if(a82a(b))return b;if(typeof a==='object'&&a?.['local_mark_first']){const c=await LocalMark['Instance']()['get_address'](b);if(!c)return await Account['Instance']()['get_address'](b);return c;}else{const d=await Account['Instance']()['get_address'](b);if(!d)return await LocalMark['Instance']()['get_address'](b);return d;}},GetLocalNamesByAddresses=async a=>{const [b,c]=await Promise['all']([Account['Instance']()['get_many'](a),LocalMark['Instance']()['get_many'](a)]);return a['map']((d,e)=>({'account':b[e]?.['name'],'local_mark':c[e]?.['name'],'address':d}));},GetManyAccountOrMark_Address=async a=>{const b=[];for(let c=0x0;c<a['entities']['length'];++c){const d=await GetAccountOrMark_Address(a['entities'][c]);if(!d&&a['check_all_founded'])a82d('invalid\x20parameter','entity\x20'+a['entities'][c]?.['name_or_address']+'\x20is\x20not\x20a\x20valid\x20address,\x20account\x20or\x20mark');if(d)b['push'](d);}return b;},query_local_mark_list=async a=>{return await LocalMark['Instance']()['list'](a);},query_account_list=async a=>{return await Account['Instance']()['list'](a);},query_local_info_list=async a=>{return await LocalInfo['Instance']()['list'](a);},query_local_token_list=async a=>{return await TokenInfo['Instance']()['list'](a);},query_local_mark=async a=>{if(typeof a==='string')return await LocalMark['Instance']()['get'](a);else{if(Array['isArray'](a))return await LocalMark['Instance']()['get_many'](a);}},query_local_info=async(a=LocalInfoNameDefault)=>{if(typeof a==='string')return await LocalInfo['Instance']()['get'](a);else{if(Array['isArray'](a))return await LocalInfo['Instance']()['get_many'](a);}},query_local_info_default=async(a=LocalInfoNameDefault)=>{if(typeof a==='string')return await LocalInfo['Instance']()['get_default'](a);else{if(Array['isArray'](a))return(await LocalInfo['Instance']()['get_many'](a))['map'](b=>b?.['default']);}},query_account=async a=>{const b=await Account['Instance']()['get'](a['name_or_address']);if(!b)return{'name_or_address':a['name_or_address']};const c={'address':b['address'],'name_or_address':b['name']},d=a['token_type']??'0x2::wow::WOW';if(a?.['balance'])c['balance']=await Account['Instance']()['balance'](d,b['address'],a['network']);else{if(a?.['coin'])c['coin']=await Account['Instance']()['coin'](d,a['coin']['cursor'],a['coin']['limit'],b['address'],a['network']);}return c;},account_operation=async a=>{var b={};if(a['gen']!=null){const c=await Account['Instance']()['gen'](a['gen']?.['name'],a['gen']?.['replaceExistName'],a['gen']?.['messenger']);b['gen']={'address':c?.['address'],'name':c?.['name'],'messenger':c?.['messenger']};}if(a['faucet']!=null)b['faucet']={'name_or_address':a['faucet']['name_or_address'],'result':await Account['Instance']()['faucet'](a['faucet']['name_or_address'],a['faucet']['network']),'network':a['faucet']['network']};if(a['suspend']!=null)b['suspend']={'name_or_address':a['suspend']['name_or_address'],'success':await Account['Instance']()['suspend'](a['suspend']['name_or_address'])};if(a['resume']!=null)b['resume']={'address':a['resume']['address'],'name':a['resume']['name'],'success':await Account['Instance']()['resume'](a['resume']['address'],a['resume']['name'])};if(a['rename']!=null)b['rename']={'name_or_address':a['rename']['name_or_address'],'new_name':a['rename']['new_name'],'success':await Account['Instance']()['rename'](a['rename']['name_or_address'],a['rename']['new_name'])};if(a['swap_name']!=null)b['swap_name']={'name_or_address1':a['swap_name']['name_or_address1'],'name_or_address2':a['swap_name']['name_or_address2'],'success':await Account['Instance']()['swap_name'](a['swap_name']['name_or_address1'],a['swap_name']['name_or_address2'])};if(a['transfer']!=null){const {name_or_address_from:d,name_or_address_to:e,amount:f,token_type:g,network:h}=a['transfer'];b['transfer']=await Account['Instance']()['transfer'](f,g,e,d,h);}if(a['get']!=null){const {balance_required:i,token_type:j,name_or_address:k,network:l}=a['get'];b['get']={'name_or_address':k,'balance_required':i,'token_type':j,'network':l,'coin_address':await Account['Instance']()['coinObject_with_balance'](i,j,k,l)};}if(a['signData']!=null){const {name_or_address:m,data:n,data_encoding:o}=a['signData'];let p=n;if(typeof n==='string'&&o)switch(o){case'base64':p=Uint8Array['from'](Buffer['from'](n,'base64'));break;case'hex':p=Uint8Array['from'](Buffer['from'](n['replace'](/^0x/,''),'hex'));break;default:p=n;break;}const q=await Account['Instance']()['signData'](m,p);b['signData']={'name_or_address':m,'signature':q['signature'],'publicKey':q['publicKey'],'address':q['address']};}if(a['messenger']!=null){const {name_or_account:r,enabled:s}=a['messenger'];await Account['Instance']()['set_messenger'](r,s),b['messenger']={'name_or_account':r,'enabled':s};}return b;},local_mark_operation=async a=>{const b={};if(a['clear'])b['clear']=await LocalMark['Instance']()['clear']();else{if(a['add'])b['add']=await LocalMark['Instance']()['put'](a['add']['data']);else{if(a['remove'])b['remove']=await LocalMark['Instance']()['del'](a['remove']['names']);}}return b;},local_info_operation=async a=>{if(a['clear'])await LocalInfo['Instance']()['clear']();else{if(a['add'])await LocalInfo['Instance']()['add'](a['add']['data']);else{if(a['remove'])await Promise['all'](a['remove']['data']['map'](b=>LocalInfo['Instance']()['del'](b)));else{if(a['reset'])await LocalInfo['Instance']()['reset_contents'](a['reset']['name'],a['reset']['contents']);}}}return{'success':!![]};},fetch_token_info_operation=async a=>{return await TokenInfo['Instance']()['fetch'](a['tokenType'],a?.['alias'],a?.['network']);};export{Account,BUITIN_IDS,Config,CryptoVault,DEFAULT_ACCOUNT_NAME,DEFAULT_LIMITS,ETH_MAINNET,EvmAccount,EvmNetworkRegistry,GetAccountOrMark_Address,GetLocalNamesByAddresses,GetManyAccountOrMark_Address,LocalInfo,LocalInfoContentMaxCount,LocalInfoContentMaxLength,LocalInfoNameDefault,LocalInfoNameMaxLength,LocalMark,LocalMarkNameMaxLength,LocalMarkTagMaxCount,LocalMarkTagMaxLength,LocalProject,MAX_MESSENGER_ACCOUNTS,SecureAccountStorage,TokenInfo,WIP,WipError,WipSizeError,WipValidationError,account_operation,bytesToBigInt,bytesToHex,createWip,fetch_token_info_operation,generate_wip,getWowDir,getWowMcpDir,hexToBytes,isValidAddress,isValidEvmAddress,loadWip,local_info_operation,local_mark_operation,privateKeyToAddress,query_account,query_account_list,query_local_info,query_local_info_default,query_local_info_list,query_local_mark,query_local_mark_list,query_local_token_list,registerBridgeEvmNetworks,signEIP1559,signLegacy,sign_wip,toChecksumAddress,verifyWip,verify_wip,wip2html,wipToHtml};
@@ -1 +1 @@
1
- import{a as a83a,l as a83b}from'../../wow-types-DcqbnAaK.mjs';import{o as a83c}from'../../exception-0GqTGX2P.mjs';import{t as a83d}from'../../lock-QdrQzo0u.mjs';import{Cache}from'./cache.mjs';import{Config}from'./config.mjs';const BUITIN_IDS=['0x5','0x6','0x7','0x8','0x9','0xa','0xc','0xd','0x403','0xaaa','0xaab','0xacc'],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 a83d();}constructor(){this['config']=Config['Instance']();}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'](),c=(await Cache['read'](b,async()=>{return{'expire':'INFINITE','data':[]};}))?.['data']||[],d=[...c],e=[];for(const f of a){f['address']=f['address']['toLowerCase']();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']);if(f?.['name']?.['value']!=null)d['forEach'](i=>{if(LocalMark['nameMatch'](i['name'],f['name']['value'])){if(f?.['name']?.['replaceExistName'])i['name']=void 0x0;else a83c('local\x20mark\x20name\x20exist','LocalMark.put.mark.name:\x20'+f['name']['value']);}});const g=Date['now'](),h={'name':f?.['name']?.['value'],'address':f['address'],'tags':f['tags'],'createdAt':g,'updatedAt':g};c['push'](h),e['push'](h);}return await Cache['read'](b,async()=>({'expire':'INFINITE','data':c}),!![]),e;}async['get'](a){if(a===void 0x0||a===null)return;const b=await this['getCacheKey']();return(await Cache['read'](b,async c=>{return{'expire':'INFINITE','data':[]};}))?.['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 d=>{return{'expire':'INFINITE','data':[]};}))?.['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)=>{const i=e[f];b[h]=i?.['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'](),d=(await Cache['read'](c,async()=>({'expire':'INFINITE','data':[]})))?.['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 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'](),d=(await Cache['read'](c,async()=>({'expire':'INFINITE','data':[]})))?.['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'](),d=(await Cache['read'](c,async()=>({'expire':'INFINITE','data':[]})))?.['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'](),d=(await Cache['read'](c,async()=>({'expire':'INFINITE','data':[]})))?.['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'](),e=(await Cache['read'](d,async()=>({'expire':'INFINITE','data':[]})))?.['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()=>({'expire':'INFINITE','data':[]})))?.['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 a83d();}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);}};export{BUITIN_IDS,LocalInfo,LocalInfoContentMaxCount,LocalInfoContentMaxLength,LocalInfoNameDefault,LocalInfoNameMaxLength,LocalMark,LocalMarkNameMaxLength,LocalMarkTagMaxCount,LocalMarkTagMaxLength,isValidAddress};
1
+ import{a as a83a,l as a83b}from'../../wow-types-DcqbnAaK.mjs';import{o as a83c}from'../../exception-C6IYkBi6.mjs';import{t as a83d}from'../../lock-QdrQzo0u.mjs';import{Cache}from'./cache.mjs';import{Config}from'./config.mjs';const BUITIN_IDS=['0x5','0x6','0x7','0x8','0x9','0xa','0xc','0xd','0x403','0xaaa','0xaab','0xacc'],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 a83d();}constructor(){this['config']=Config['Instance']();}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'](),c=(await Cache['read'](b,async()=>{return{'expire':'INFINITE','data':[]};}))?.['data']||[],d=[...c],e=[];for(const f of a){f['address']=f['address']['toLowerCase']();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']);if(f?.['name']?.['value']!=null)d['forEach'](i=>{if(LocalMark['nameMatch'](i['name'],f['name']['value'])){if(f?.['name']?.['replaceExistName'])i['name']=void 0x0;else a83c('local\x20mark\x20name\x20exist','LocalMark.put.mark.name:\x20'+f['name']['value']);}});const g=Date['now'](),h={'name':f?.['name']?.['value'],'address':f['address'],'tags':f['tags'],'createdAt':g,'updatedAt':g};c['push'](h),e['push'](h);}return await Cache['read'](b,async()=>({'expire':'INFINITE','data':c}),!![]),e;}async['get'](a){if(a===void 0x0||a===null)return;const b=await this['getCacheKey']();return(await Cache['read'](b,async c=>{return{'expire':'INFINITE','data':[]};}))?.['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 d=>{return{'expire':'INFINITE','data':[]};}))?.['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)=>{const i=e[f];b[h]=i?.['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'](),d=(await Cache['read'](c,async()=>({'expire':'INFINITE','data':[]})))?.['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 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'](),d=(await Cache['read'](c,async()=>({'expire':'INFINITE','data':[]})))?.['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'](),d=(await Cache['read'](c,async()=>({'expire':'INFINITE','data':[]})))?.['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'](),d=(await Cache['read'](c,async()=>({'expire':'INFINITE','data':[]})))?.['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'](),e=(await Cache['read'](d,async()=>({'expire':'INFINITE','data':[]})))?.['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()=>({'expire':'INFINITE','data':[]})))?.['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 a83d();}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);}};export{BUITIN_IDS,LocalInfo,LocalInfoContentMaxCount,LocalInfoContentMaxLength,LocalInfoNameDefault,LocalInfoNameMaxLength,LocalMark,LocalMarkNameMaxLength,LocalMarkTagMaxCount,LocalMarkTagMaxLength,isValidAddress};
@@ -1 +1 @@
1
- import{o as a84a}from'../../exception-0GqTGX2P.mjs';import{getWowDir}from'./util.mjs';import{t as a84b}from'../../lock-QdrQzo0u.mjs';import a84c from'libsql';import*as a84d from'path';import*as a84e from'fs';const WOW_DIR=getWowDir(),PROJECT_DB_PATH=a84d['join'](WOW_DIR,'project.db');function ensureWowDirExists(){if(!a84e['existsSync'](WOW_DIR))a84e['mkdirSync'](WOW_DIR,{'recursive':!![]});}let projectDbInstance=null;function getProjectDatabase(){ensureWowDirExists();const a=new a84c(PROJECT_DB_PATH);return a['pragma']('journal_mode\x20=\x20WAL'),a['pragma']('synchronous\x20=\x20NORMAL'),a['pragma']('busy_timeout\x20=\x205000'),a['exec'](SCHEMA_SQL),a;}function getProjectDb(){if(projectDbInstance)return projectDbInstance;return projectDbInstance=getProjectDatabase(),projectDbInstance;}const SCHEMA_SQL='\x0a--\x20Project\x20metadata\x0aCREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20projects\x20(\x0a\x20\x20\x20\x20id\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20prefix\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20UNIQUE\x20NOT\x20NULL,\x0a\x20\x20\x20\x20name\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20description\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20industry\x20\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20perspective\x20\x20\x20\x20\x20TEXT\x20DEFAULT\x20\x27producer\x27,\x0a\x20\x20\x20\x20status\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20DEFAULT\x20\x27draft\x27,\x0a\x20\x20\x20\x20labels\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20current_version\x20TEXT,\x0a\x20\x20\x20\x20service_address\x20TEXT,\x0a\x20\x20\x20\x20default_account\x20TEXT,\x0a\x20\x20\x20\x20network\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20NOT\x20NULL\x20DEFAULT\x20\x27testnet\x27,\x0a\x20\x20\x20\x20created_at\x20\x20\x20\x20\x20\x20INTEGER,\x0a\x20\x20\x20\x20updated_at\x20\x20\x20\x20\x20\x20INTEGER,\x0a\x20\x20\x20\x20metadata\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x0a);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_projects_status\x20ON\x20projects(status);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_projects_network\x20ON\x20projects(network);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_projects_perspective\x20ON\x20projects(perspective);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_projects_service\x20ON\x20projects(service_address);\x0a\x0a--\x20Project\x20version\x20history\x0aCREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20project_versions\x20(\x0a\x20\x20\x20\x20id\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20project_id\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20version\x20\x20\x20\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20description\x20TEXT,\x0a\x20\x20\x20\x20created_at\x20\x20INTEGER,\x0a\x20\x20\x20\x20metadata\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20FOREIGN\x20KEY\x20(project_id)\x20REFERENCES\x20projects(id)\x20ON\x20DELETE\x20CASCADE,\x0a\x20\x20\x20\x20UNIQUE(project_id,\x20version)\x0a);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_versions_project\x20ON\x20project_versions(project_id);\x0a\x0a--\x20Project-object\x20relationships\x20(rigid,\x20not\x20tag-based)\x0a--\x20An\x20object\x20can\x20belong\x20to\x20multiple\x20projects\x20(no\x20UNIQUE\x20on\x20object_address)\x0aCREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20project_objects\x20(\x0a\x20\x20\x20\x20id\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20project_id\x20\x20\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20object_address\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20object_type\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20object_name\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20role\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20DEFAULT\x20\x27reference\x27,\x0a\x20\x20\x20\x20tags\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20added_at\x20\x20\x20\x20\x20\x20INTEGER,\x0a\x20\x20\x20\x20metadata\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20FOREIGN\x20KEY\x20(project_id)\x20REFERENCES\x20projects(id)\x20ON\x20DELETE\x20CASCADE\x0a);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_objects_project\x20ON\x20project_objects(project_id);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_objects_address\x20ON\x20project_objects(object_address);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_objects_type\x20ON\x20project_objects(object_type);\x0a\x0a--\x20Cached\x20on-chain\x20object\x20data\x20with\x20timestamps\x0aCREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20object_cache\x20(\x0a\x20\x20\x20\x20address\x20\x20\x20\x20\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20object_type\x20TEXT,\x0a\x20\x20\x20\x20data\x20\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20fetched_at\x20\x20INTEGER,\x0a\x20\x20\x20\x20network\x20\x20\x20\x20\x20TEXT\x0a);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_cache_type\x20ON\x20object_cache(object_type);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_cache_network\x20ON\x20object_cache(network);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_cache_fetched\x20ON\x20object_cache(fetched_at);\x0a\x0a--\x20Historical\x20snapshots\x20for\x20diff\x20analysis\x0aCREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20object_cache_history\x20(\x0a\x20\x20\x20\x20id\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20address\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20object_type\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20data\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20fetched_at\x20\x20\x20\x20\x20\x20INTEGER,\x0a\x20\x20\x20\x20network\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20changed_fields\x20\x20TEXT\x0a);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_history_address\x20ON\x20object_cache_history(address);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_history_time\x20ON\x20object_cache_history(fetched_at);\x0a\x0a--\x20Relationship\x20graph\x20edges\x20(3-pathway\x20fusion)\x0aCREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20graph_edges\x20(\x0a\x20\x20\x20\x20id\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20project_id\x20\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20source_object\x20\x20\x20\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20target_object\x20\x20\x20\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20edge_source\x20\x20\x20\x20\x20\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20relationship_type\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20field_name\x20\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20depth\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INTEGER\x20DEFAULT\x200,\x0a\x20\x20\x20\x20verified\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INTEGER\x20DEFAULT\x200,\x0a\x20\x20\x20\x20weight\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20REAL\x20DEFAULT\x200.5,\x0a\x20\x20\x20\x20direction\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20metadata\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20cached_at\x20\x20\x20\x20\x20\x20\x20\x20\x20INTEGER\x0a);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_edges_project\x20ON\x20graph_edges(project_id);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_edges_source\x20ON\x20graph_edges(source_object);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_edges_target\x20ON\x20graph_edges(target_object);\x0a\x0a--\x20Evaluation\x20results\x20(cached\x20with\x20timestamps)\x0aCREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20evaluations\x20(\x0a\x20\x20\x20\x20id\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20project_id\x20\x20\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20eval_type\x20\x20\x20\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20score\x20\x20\x20\x20\x20\x20\x20\x20\x20REAL,\x0a\x20\x20\x20\x20summary\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20details\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20evaluated_at\x20\x20INTEGER,\x0a\x20\x20\x20\x20metadata\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20FOREIGN\x20KEY\x20(project_id)\x20REFERENCES\x20projects(id)\x20ON\x20DELETE\x20CASCADE\x0a);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_eval_project\x20ON\x20evaluations(project_id);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_eval_type\x20ON\x20evaluations(eval_type);\x0a\x0a--\x20Project\x20deployment\x20documents\x20(generated\x20from\x20SQLite\x20data)\x0aCREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20project_documents\x20(\x0a\x20\x20\x20\x20id\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20project_id\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20version\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20network\x20\x20\x20\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20doc_type\x20\x20\x20\x20TEXT\x20DEFAULT\x20\x27deployment\x27,\x0a\x20\x20\x20\x20content\x20\x20\x20\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20checksum\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20generated_at\x20INTEGER,\x0a\x20\x20\x20\x20updated_at\x20\x20\x20INTEGER,\x0a\x20\x20\x20\x20FOREIGN\x20KEY\x20(project_id)\x20REFERENCES\x20projects(id)\x20ON\x20DELETE\x20CASCADE\x0a);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_docs_project\x20ON\x20project_documents(project_id);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_docs_network\x20ON\x20project_documents(network);\x0a';function generateId(){if(typeof crypto!=='undefined'&&crypto['randomUUID'])return crypto['randomUUID']();return Date['now']()+'-'+Math['random']()['toString'](0x24)['slice'](0x2,0xb);}function parseJSON(a){if(!a)return null;try{return JSON['parse'](a);}catch{return null;}}function parseStringArray(a){if(!a)return null;try{const b=JSON['parse'](a);return Array['isArray'](b)?b:null;}catch{return null;}}function rowToProject(a){return{'id':a['id'],'prefix':a['prefix'],'name':a['name'],'description':a['description'],'industry':a['industry'],'perspective':a['perspective'],'status':a['status'],'labels':parseStringArray(a['labels']),'currentVersion':a['current_version'],'serviceAddress':a['service_address'],'defaultAccount':a['default_account'],'network':a['network'],'createdAt':a['created_at'],'updatedAt':a['updated_at'],'metadata':parseJSON(a['metadata'])};}function rowToVersion(a){return{'id':a['id'],'projectId':a['project_id'],'version':a['version'],'description':a['description'],'createdAt':a['created_at'],'metadata':parseJSON(a['metadata'])};}function rowToProjectObject(a){return{'id':a['id'],'projectId':a['project_id'],'objectAddress':a['object_address'],'objectType':a['object_type'],'objectName':a['object_name'],'role':a['role'],'tags':parseStringArray(a['tags']),'addedAt':a['added_at'],'metadata':parseJSON(a['metadata'])};}function rowToGraphEdge(a){return{'id':a['id'],'projectId':a['project_id'],'sourceObject':a['source_object'],'targetObject':a['target_object'],'edgeSource':a['edge_source'],'relationshipType':a['relationship_type'],'fieldName':a['field_name'],'depth':a['depth'],'verified':a['verified']===0x1,'weight':a['weight'],'direction':a['direction'],'metadata':parseJSON(a['metadata']),'cachedAt':a['cached_at']};}function rowToEvaluation(a){return{'id':a['id'],'projectId':a['project_id'],'evalType':a['eval_type'],'score':a['score'],'summary':a['summary'],'details':parseJSON(a['details']),'evaluatedAt':a['evaluated_at'],'metadata':parseJSON(a['metadata'])};}function rowToProjectDocument(a){return{'id':a['id'],'project_id':a['project_id'],'version':a['version']??void 0x0,'network':a['network'],'doc_type':a['doc_type'],'content':a['content'],'checksum':a['checksum']??void 0x0,'generated_at':a['generated_at']??void 0x0,'updated_at':a['updated_at']??void 0x0};}var LocalProject=class LocalProject{static{this['_instanceLock']=new a84b();}constructor(){this['_dbLock']=new a84b();}static['Instance'](){if(LocalProject['_instance'])return LocalProject['_instance'];if(!LocalProject['_instance'])LocalProject['_instance']=new LocalProject();return LocalProject['_instance'];}get['db'](){return getProjectDb();}async['createProject'](a){return this['_dbLock']['run'](async()=>{const b=generateId(),c=Date['now'](),d=a['network']??'testnet',e=a['perspective']??'producer';return this['db']['prepare']('INSERT\x20INTO\x20projects\x20(id,\x20prefix,\x20name,\x20description,\x20industry,\x20perspective,\x20status,\x20labels,\x0a\x09\x09\x09\x09\x09\x09current_version,\x20service_address,\x20default_account,\x20network,\x20created_at,\x20updated_at,\x20metadata)\x0a\x09\x09\x09\x09\x09\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20\x27draft\x27,\x20?,\x20NULL,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?)')['run'](b,a['prefix'],a['name'],a['description']??null,a['industry']??null,e,a['labels']?JSON['stringify'](a['labels']):null,a['serviceAddress']??null,a['defaultAccount']??null,d,c,c,a['metadata']?JSON['stringify'](a['metadata']):null),await this['getProject'](b);});}async['updateProject'](a,b){return this['_dbLock']['run'](async()=>{if(!await this['getProject'](a))a84a('invalid\x20parameter','Project\x20not\x20found:\x20'+a);const c=Date['now'](),d=[],e=[];return b['name']!==void 0x0&&(d['push']('name\x20=\x20?'),e['push'](b['name'])),b['description']!==void 0x0&&(d['push']('description\x20=\x20?'),e['push'](b['description'])),b['industry']!==void 0x0&&(d['push']('industry\x20=\x20?'),e['push'](b['industry'])),b['perspective']!==void 0x0&&(d['push']('perspective\x20=\x20?'),e['push'](b['perspective'])),b['status']!==void 0x0&&(d['push']('status\x20=\x20?'),e['push'](b['status'])),b['labels']!==void 0x0&&(d['push']('labels\x20=\x20?'),e['push'](b['labels']?JSON['stringify'](b['labels']):null)),b['currentVersion']!==void 0x0&&(d['push']('current_version\x20=\x20?'),e['push'](b['currentVersion'])),b['serviceAddress']!==void 0x0&&(d['push']('service_address\x20=\x20?'),e['push'](b['serviceAddress'])),b['defaultAccount']!==void 0x0&&(d['push']('default_account\x20=\x20?'),e['push'](b['defaultAccount'])),b['metadata']!==void 0x0&&(d['push']('metadata\x20=\x20?'),e['push'](b['metadata']?JSON['stringify'](b['metadata']):null)),d['push']('updated_at\x20=\x20?'),e['push'](c),e['push'](a),this['db']['prepare']('UPDATE\x20projects\x20SET\x20'+d['join'](',\x20')+'\x20WHERE\x20id\x20=\x20?')['run'](...e),await this['getProject'](a);});}async['getProject'](a){const b=this['db']['prepare']('SELECT\x20*\x20FROM\x20projects\x20WHERE\x20id\x20=\x20?')['get'](a);return b?rowToProject(b):void 0x0;}async['getProjectByPrefix'](a){const b=this['db']['prepare']('SELECT\x20*\x20FROM\x20projects\x20WHERE\x20prefix\x20=\x20?')['get'](a);return b?rowToProject(b):void 0x0;}async['listProjects'](a){const b=[],c=[];a?.['status']&&(b['push']('status\x20=\x20?'),c['push'](a['status']));a?.['perspective']&&(b['push']('perspective\x20=\x20?'),c['push'](a['perspective']));a?.['network']&&(b['push']('network\x20=\x20?'),c['push'](a['network']));a?.['industry']&&(b['push']('industry\x20=\x20?'),c['push'](a['industry']));a?.['serviceAddress']&&(b['push']('service_address\x20=\x20?'),c['push'](a['serviceAddress']));let d='SELECT\x20*\x20FROM\x20projects';if(b['length']>0x0)d+='\x20WHERE\x20'+b['join']('\x20AND\x20');d+='\x20ORDER\x20BY\x20updated_at\x20DESC';let e=this['db']['prepare'](d)['all'](...c);if(a?.['labels']&&a['labels']['length']>0x0)e=e['filter'](f=>{const g=parseStringArray(f['labels']);if(!g)return![];return a['labels']['some'](h=>g['includes'](h));});return e['map'](rowToProject);}async['deleteProject'](a){return this['_dbLock']['run'](async()=>{this['db']['prepare']('DELETE\x20FROM\x20projects\x20WHERE\x20id\x20=\x20?')['run'](a);});}async['createVersion'](a,b,c,d){return this['_dbLock']['run'](async()=>{const e=generateId(),f=Date['now']();return this['db']['prepare']('INSERT\x20INTO\x20project_versions\x20(id,\x20project_id,\x20version,\x20description,\x20created_at,\x20metadata)\x0a\x09\x09\x09\x09\x09\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20?,\x20?)')['run'](e,a,b,c??null,f,d?JSON['stringify'](d):null),this['db']['prepare']('UPDATE\x20projects\x20SET\x20current_version\x20=\x20?,\x20updated_at\x20=\x20?\x20WHERE\x20id\x20=\x20?')['run'](b,f,a),await this['getVersion'](e);});}async['getVersion'](a){const b=this['db']['prepare']('SELECT\x20*\x20FROM\x20project_versions\x20WHERE\x20id\x20=\x20?')['get'](a);return b?rowToVersion(b):void 0x0;}async['listVersions'](a){return this['db']['prepare']('SELECT\x20*\x20FROM\x20project_versions\x20WHERE\x20project_id\x20=\x20?\x20ORDER\x20BY\x20created_at\x20DESC')['all'](a)['map'](rowToVersion);}async['addObject'](a,b){return this['_dbLock']['run'](async()=>{const c=generateId(),d=Date['now'](),e=b['role']??'reference';return this['db']['prepare']('INSERT\x20INTO\x20project_objects\x20(id,\x20project_id,\x20object_address,\x20object_type,\x20object_name,\x20role,\x20tags,\x20added_at,\x20metadata)\x0a\x09\x09\x09\x09\x09\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?)')['run'](c,a,b['objectAddress'],b['objectType']??null,b['objectName']??null,e,b['tags']?JSON['stringify'](b['tags']):null,d,b['metadata']?JSON['stringify'](b['metadata']):null),await this['getObject'](c);});}async['addObjects'](a,b){const c=[];for(const d of b)c['push'](await this['addObject'](a,d));return c;}async['getObject'](a){const b=this['db']['prepare']('SELECT\x20*\x20FROM\x20project_objects\x20WHERE\x20id\x20=\x20?')['get'](a);return b?rowToProjectObject(b):void 0x0;}async['listObjects'](a,b){const c=['project_id\x20=\x20?'],d=[a];return b?.['objectType']&&(c['push']('object_type\x20=\x20?'),d['push'](b['objectType'])),b?.['role']&&(c['push']('role\x20=\x20?'),d['push'](b['role'])),this['db']['prepare']('SELECT\x20*\x20FROM\x20project_objects\x20WHERE\x20'+c['join']('\x20AND\x20')+'\x20ORDER\x20BY\x20added_at\x20DESC')['all'](...d)['map'](rowToProjectObject);}async['removeObject'](a){this['db']['prepare']('DELETE\x20FROM\x20project_objects\x20WHERE\x20id\x20=\x20?')['run'](a);}async['removeObjectByAddress'](a,b){this['db']['prepare']('DELETE\x20FROM\x20project_objects\x20WHERE\x20project_id\x20=\x20?\x20AND\x20object_address\x20=\x20?')['run'](a,b);}async['updateObject'](a,b){const c=[],d=[];b['objectName']!==void 0x0&&(c['push']('object_name\x20=\x20?'),d['push'](b['objectName']));b['objectType']!==void 0x0&&(c['push']('object_type\x20=\x20?'),d['push'](b['objectType']));b['role']!==void 0x0&&(c['push']('role\x20=\x20?'),d['push'](b['role']));b['tags']!==void 0x0&&(c['push']('tags\x20=\x20?'),d['push'](JSON['stringify'](b['tags'])));if(c['length']===0x0)throw new Error('No\x20fields\x20to\x20update');return d['push'](a),this['db']['prepare']('UPDATE\x20project_objects\x20SET\x20'+c['join'](',\x20')+'\x20WHERE\x20id\x20=\x20?')['run'](...d),await this['getObject'](a);}async['findObjectsByAddress'](a){return this['db']['prepare']('SELECT\x20*\x20FROM\x20project_objects\x20WHERE\x20object_address\x20=\x20?\x20ORDER\x20BY\x20added_at\x20DESC')['all'](a)['map'](rowToProjectObject);}async['cacheObject'](a,b,c,d){return this['_dbLock']['run'](async()=>{const e=Date['now'](),f=this['db']['prepare']('SELECT\x20*\x20FROM\x20object_cache\x20WHERE\x20address\x20=\x20?')['get'](a);if(f){const g=this['computeChangedFields'](f['data'],c);this['db']['prepare']('INSERT\x20INTO\x20object_cache_history\x20(id,\x20address,\x20object_type,\x20data,\x20fetched_at,\x20network,\x20changed_fields)\x0a\x09\x09\x09\x09\x09\x09\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?)')['run'](generateId(),a,f['object_type'],f['data'],f['fetched_at'],f['network'],g['length']>0x0?JSON['stringify'](g):null);}this['db']['prepare']('INSERT\x20INTO\x20object_cache\x20(address,\x20object_type,\x20data,\x20fetched_at,\x20network)\x0a\x09\x09\x09\x09\x09\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20?)\x0a\x09\x09\x09\x09\x09\x20ON\x20CONFLICT(address)\x20DO\x20UPDATE\x20SET\x20object_type\x20=\x20excluded.object_type,\x0a\x09\x09\x09\x09\x09\x09data\x20=\x20excluded.data,\x20fetched_at\x20=\x20excluded.fetched_at,\x20network\x20=\x20excluded.network')['run'](a,b,c,e,d);});}async['getCachedObject'](a){const b=this['db']['prepare']('SELECT\x20*\x20FROM\x20object_cache\x20WHERE\x20address\x20=\x20?')['get'](a);if(!b)return void 0x0;return{'address':b['address'],'objectType':b['object_type'],'data':b['data'],'fetchedAt':b['fetched_at'],'network':b['network']};}async['getCachedObjects'](a){const b=new Map();if(a['length']===0x0)return b;const c=a['map'](()=>'?')['join'](','),d=this['db']['prepare']('SELECT\x20*\x20FROM\x20object_cache\x20WHERE\x20address\x20IN\x20('+c+')')['all'](...a);for(const e of d)b['set'](e['address'],{'address':e['address'],'objectType':e['object_type'],'data':e['data'],'fetchedAt':e['fetched_at'],'network':e['network']});return b;}async['deleteCachedObject'](a){this['db']['prepare']('DELETE\x20FROM\x20object_cache\x20WHERE\x20address\x20=\x20?')['run'](a);}async['getObjectDiff'](a,b,c){const d=this['db']['prepare']('SELECT\x20*\x20FROM\x20object_cache_history\x0a\x09\x09\x09\x09\x20WHERE\x20address\x20=\x20?\x20AND\x20fetched_at\x20BETWEEN\x20?\x20AND\x20?\x0a\x09\x09\x09\x09\x20ORDER\x20BY\x20fetched_at\x20ASC')['all'](a,b,c),e=await this['getCachedObject'](a);if(e&&e['fetchedAt']>=b&&e['fetchedAt']<=c)d['push']({'id':'current','address':e['address'],'object_type':e['objectType'],'data':e['data'],'fetched_at':e['fetchedAt'],'network':e['network'],'changed_fields':null});const f=[];if(d['length']>=0x2){const g=d[0x0],h=d[d['length']-0x1],i=this['computeDiff'](g['data'],h['data'],g['data'],h['data']);f['push'](...i);}return{'address':a,'fromTime':b,'toTime':c,'changedFields':f};}async['getObjectHistory'](a){return this['db']['prepare']('SELECT\x20*\x20FROM\x20object_cache_history\x20WHERE\x20address\x20=\x20?\x20ORDER\x20BY\x20fetched_at\x20DESC')['all'](a)['map'](b=>({'id':b['id'],'address':b['address'],'objectType':b['object_type'],'data':b['data'],'fetchedAt':b['fetched_at'],'network':b['network'],'changedFields':parseStringArray(b['changed_fields'])}));}['computeChangedFields'](a,b){try{const c=JSON['parse'](a),d=JSON['parse'](b),e=[];return this['collectChangedPaths'](c,d,'',e),e;}catch{return[];}}['collectChangedPaths'](a,b,c,d){if(typeof a!==typeof b){d['push'](c||'(root)');return;}if(typeof a!=='object'||a===null||b===null){if(a!==b)d['push'](c||'(root)');return;}const e=a,f=b,g=new Set([...Object['keys'](e),...Object['keys'](f)]);for(const h of g){const i=c?c+'.'+h:h;if(!(h in e))d['push'](i);else{if(!(h in f))d['push'](i);else this['collectChangedPaths'](e[h],f[h],i,d);}}}['computeDiff'](a,b,c,d){try{const e=JSON['parse'](a),f=JSON['parse'](b),g=[];return this['collectDiff'](e,f,'',g),g;}catch{return[];}}['collectDiff'](a,b,c,d){if(typeof a!==typeof b){d['push']({'fieldPath':c||'(root)','oldValue':a,'newValue':b,'changeType':'modified'});return;}if(typeof a!=='object'||a===null||b===null){if(a!==b)d['push']({'fieldPath':c||'(root)','oldValue':a,'newValue':b,'changeType':'modified'});return;}const e=a,f=b,g=new Set([...Object['keys'](e),...Object['keys'](f)]);for(const h of g){const i=c?c+'.'+h:h;if(!(h in e))d['push']({'fieldPath':i,'oldValue':void 0x0,'newValue':f[h],'changeType':'added'});else{if(!(h in f))d['push']({'fieldPath':i,'oldValue':e[h],'newValue':void 0x0,'changeType':'removed'});else this['collectDiff'](e[h],f[h],i,d);}}}async['saveGraphEdges'](a,b){return this['_dbLock']['run'](async()=>{const c=Date['now']();if(a)this['db']['prepare']('DELETE\x20FROM\x20graph_edges\x20WHERE\x20project_id\x20=\x20?')['run'](a);const d=this['db']['prepare']('INSERT\x20INTO\x20graph_edges\x20(id,\x20project_id,\x20source_object,\x20target_object,\x20edge_source,\x0a\x09\x09\x09\x09\x09relationship_type,\x20field_name,\x20depth,\x20verified,\x20weight,\x20direction,\x20metadata,\x20cached_at)\x0a\x09\x09\x09\x09\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?)');return this['db']['transaction'](e=>{for(const f of e){const g=generateId();d['run'](g,a??f['projectId']??null,f['sourceObject'],f['targetObject'],f['edgeSource'],f['relationshipType'],f['fieldName']??null,f['depth']??0x0,f['verified']?0x1:0x0,f['weight']??0.5,f['direction']??null,f['metadata']?JSON['stringify'](f['metadata']):null,c);}})(b),(a?this['db']['prepare']('SELECT\x20*\x20FROM\x20graph_edges\x20WHERE\x20project_id\x20=\x20?')['all'](a):this['db']['prepare']('SELECT\x20*\x20FROM\x20graph_edges\x20WHERE\x20project_id\x20IS\x20NULL')['all']())['map'](rowToGraphEdge);});}async['getGraph'](a){return(a?this['db']['prepare']('SELECT\x20*\x20FROM\x20graph_edges\x20WHERE\x20project_id\x20=\x20?')['all'](a):this['db']['prepare']('SELECT\x20*\x20FROM\x20graph_edges')['all']())['map'](rowToGraphEdge);}async['getGraphForObject'](a){return this['db']['prepare']('SELECT\x20*\x20FROM\x20graph_edges\x20WHERE\x20source_object\x20=\x20?\x20OR\x20target_object\x20=\x20?')['all'](a,a)['map'](rowToGraphEdge);}async['clearGraph'](a){if(a)this['db']['prepare']('DELETE\x20FROM\x20graph_edges\x20WHERE\x20project_id\x20=\x20?')['run'](a);else this['db']['exec']('DELETE\x20FROM\x20graph_edges');}async['saveEvaluation'](a){return this['_dbLock']['run'](async()=>{const b=generateId(),c=Date['now']();return this['db']['prepare']('INSERT\x20INTO\x20evaluations\x20(id,\x20project_id,\x20eval_type,\x20score,\x20summary,\x20details,\x20evaluated_at,\x20metadata)\x0a\x09\x09\x09\x09\x09\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?)')['run'](b,a['projectId'],a['evalType'],a['score']??null,a['summary']??null,a['details']?JSON['stringify'](a['details']):null,c,a['metadata']?JSON['stringify'](a['metadata']):null),await this['getEvaluation'](b);});}async['getEvaluation'](a){const b=this['db']['prepare']('SELECT\x20*\x20FROM\x20evaluations\x20WHERE\x20id\x20=\x20?')['get'](a);return b?rowToEvaluation(b):void 0x0;}async['listEvaluations'](a,b){const c=['project_id\x20=\x20?'],d=[a];return b?.['evalType']&&(c['push']('eval_type\x20=\x20?'),d['push'](b['evalType'])),this['db']['prepare']('SELECT\x20*\x20FROM\x20evaluations\x20WHERE\x20'+c['join']('\x20AND\x20')+'\x20ORDER\x20BY\x20evaluated_at\x20DESC')['all'](...d)['map'](rowToEvaluation);}async['getLatestEvaluation'](a,b){const c=this['db']['prepare']('SELECT\x20*\x20FROM\x20evaluations\x20WHERE\x20project_id\x20=\x20?\x20AND\x20eval_type\x20=\x20?\x0a\x09\x09\x09\x09\x20ORDER\x20BY\x20evaluated_at\x20DESC\x20LIMIT\x201')['get'](a,b);return c?rowToEvaluation(c):void 0x0;}async['saveDocument'](a,b,c,d='deployment'){return this['_dbLock']['run'](async()=>{const e=generateId(),f=Date['now'](),g=this['computeChecksum'](c),h=this['db']['prepare']('SELECT\x20id\x20FROM\x20project_documents\x20WHERE\x20project_id\x20=\x20?\x20AND\x20network\x20=\x20?\x20AND\x20doc_type\x20=\x20?')['get'](a,b,d);if(h)return this['db']['prepare']('UPDATE\x20project_documents\x20SET\x20content\x20=\x20?,\x20checksum\x20=\x20?,\x20updated_at\x20=\x20?\x20WHERE\x20id\x20=\x20?')['run'](c,g,f,h['id']),this['getDocument'](a,b,d);return this['db']['prepare']('INSERT\x20INTO\x20project_documents\x20(id,\x20project_id,\x20network,\x20doc_type,\x20content,\x20checksum,\x20generated_at,\x20updated_at)\x0a\x09\x09\x09\x09\x09\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?)')['run'](e,a,b,d,c,g,f,f),this['getDocument'](a,b,d);});}async['getDocument'](a,b,c='deployment'){const d=this['db']['prepare']('SELECT\x20*\x20FROM\x20project_documents\x20WHERE\x20project_id\x20=\x20?\x20AND\x20network\x20=\x20?\x20AND\x20doc_type\x20=\x20?')['get'](a,b,c);return d?rowToProjectDocument(d):void 0x0;}async['listDocuments'](a){return this['db']['prepare']('SELECT\x20*\x20FROM\x20project_documents\x20WHERE\x20project_id\x20=\x20?\x20ORDER\x20BY\x20updated_at\x20DESC')['all'](a)['map'](rowToProjectDocument);}async['deleteDocument'](a,b,c='deployment'){return this['_dbLock']['run'](async()=>{return this['db']['prepare']('DELETE\x20FROM\x20project_documents\x20WHERE\x20project_id\x20=\x20?\x20AND\x20network\x20=\x20?\x20AND\x20doc_type\x20=\x20?')['run'](a,b,c)['changes']>0x0;});}['computeChecksum'](a){let b=0x0;for(let c=0x0;c<a['length'];c++){const d=a['charCodeAt'](c);b=(b<<0x5)-b+d,b=b&b;}return b['toString'](0x10);}static['resetDbConnection'](){if(projectDbInstance){try{projectDbInstance['close']();}catch{}projectDbInstance=null;}}};process['on']('exit',()=>{LocalProject['resetDbConnection']();}),process['on']('SIGINT',()=>{LocalProject['resetDbConnection'](),process['exit'](0x0);}),process['on']('SIGTERM',()=>{LocalProject['resetDbConnection'](),process['exit'](0x0);});export{LocalProject};
1
+ import{o as a84a}from'../../exception-C6IYkBi6.mjs';import{getWowDir}from'./util.mjs';import{t as a84b}from'../../lock-QdrQzo0u.mjs';import a84c from'libsql';import*as a84d from'path';import*as a84e from'fs';const WOW_DIR=getWowDir(),PROJECT_DB_PATH=a84d['join'](WOW_DIR,'project.db');function ensureWowDirExists(){if(!a84e['existsSync'](WOW_DIR))a84e['mkdirSync'](WOW_DIR,{'recursive':!![]});}let projectDbInstance=null;function getProjectDatabase(){ensureWowDirExists();const a=new a84c(PROJECT_DB_PATH);return a['pragma']('journal_mode\x20=\x20WAL'),a['pragma']('synchronous\x20=\x20NORMAL'),a['pragma']('busy_timeout\x20=\x205000'),a['exec'](SCHEMA_SQL),a;}function getProjectDb(){if(projectDbInstance)return projectDbInstance;return projectDbInstance=getProjectDatabase(),projectDbInstance;}const SCHEMA_SQL='\x0a--\x20Project\x20metadata\x0aCREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20projects\x20(\x0a\x20\x20\x20\x20id\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20prefix\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20UNIQUE\x20NOT\x20NULL,\x0a\x20\x20\x20\x20name\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20description\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20industry\x20\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20perspective\x20\x20\x20\x20\x20TEXT\x20DEFAULT\x20\x27producer\x27,\x0a\x20\x20\x20\x20status\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20DEFAULT\x20\x27draft\x27,\x0a\x20\x20\x20\x20labels\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20current_version\x20TEXT,\x0a\x20\x20\x20\x20service_address\x20TEXT,\x0a\x20\x20\x20\x20default_account\x20TEXT,\x0a\x20\x20\x20\x20network\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20NOT\x20NULL\x20DEFAULT\x20\x27testnet\x27,\x0a\x20\x20\x20\x20created_at\x20\x20\x20\x20\x20\x20INTEGER,\x0a\x20\x20\x20\x20updated_at\x20\x20\x20\x20\x20\x20INTEGER,\x0a\x20\x20\x20\x20metadata\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x0a);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_projects_status\x20ON\x20projects(status);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_projects_network\x20ON\x20projects(network);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_projects_perspective\x20ON\x20projects(perspective);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_projects_service\x20ON\x20projects(service_address);\x0a\x0a--\x20Project\x20version\x20history\x0aCREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20project_versions\x20(\x0a\x20\x20\x20\x20id\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20project_id\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20version\x20\x20\x20\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20description\x20TEXT,\x0a\x20\x20\x20\x20created_at\x20\x20INTEGER,\x0a\x20\x20\x20\x20metadata\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20FOREIGN\x20KEY\x20(project_id)\x20REFERENCES\x20projects(id)\x20ON\x20DELETE\x20CASCADE,\x0a\x20\x20\x20\x20UNIQUE(project_id,\x20version)\x0a);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_versions_project\x20ON\x20project_versions(project_id);\x0a\x0a--\x20Project-object\x20relationships\x20(rigid,\x20not\x20tag-based)\x0a--\x20An\x20object\x20can\x20belong\x20to\x20multiple\x20projects\x20(no\x20UNIQUE\x20on\x20object_address)\x0aCREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20project_objects\x20(\x0a\x20\x20\x20\x20id\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20project_id\x20\x20\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20object_address\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20object_type\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20object_name\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20role\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20DEFAULT\x20\x27reference\x27,\x0a\x20\x20\x20\x20tags\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20added_at\x20\x20\x20\x20\x20\x20INTEGER,\x0a\x20\x20\x20\x20metadata\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20FOREIGN\x20KEY\x20(project_id)\x20REFERENCES\x20projects(id)\x20ON\x20DELETE\x20CASCADE\x0a);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_objects_project\x20ON\x20project_objects(project_id);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_objects_address\x20ON\x20project_objects(object_address);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_objects_type\x20ON\x20project_objects(object_type);\x0a\x0a--\x20Cached\x20on-chain\x20object\x20data\x20with\x20timestamps\x0aCREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20object_cache\x20(\x0a\x20\x20\x20\x20address\x20\x20\x20\x20\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20object_type\x20TEXT,\x0a\x20\x20\x20\x20data\x20\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20fetched_at\x20\x20INTEGER,\x0a\x20\x20\x20\x20network\x20\x20\x20\x20\x20TEXT\x0a);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_cache_type\x20ON\x20object_cache(object_type);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_cache_network\x20ON\x20object_cache(network);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_cache_fetched\x20ON\x20object_cache(fetched_at);\x0a\x0a--\x20Historical\x20snapshots\x20for\x20diff\x20analysis\x0aCREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20object_cache_history\x20(\x0a\x20\x20\x20\x20id\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20address\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20object_type\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20data\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20fetched_at\x20\x20\x20\x20\x20\x20INTEGER,\x0a\x20\x20\x20\x20network\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20changed_fields\x20\x20TEXT\x0a);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_history_address\x20ON\x20object_cache_history(address);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_history_time\x20ON\x20object_cache_history(fetched_at);\x0a\x0a--\x20Relationship\x20graph\x20edges\x20(3-pathway\x20fusion)\x0aCREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20graph_edges\x20(\x0a\x20\x20\x20\x20id\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20project_id\x20\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20source_object\x20\x20\x20\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20target_object\x20\x20\x20\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20edge_source\x20\x20\x20\x20\x20\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20relationship_type\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20field_name\x20\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20depth\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INTEGER\x20DEFAULT\x200,\x0a\x20\x20\x20\x20verified\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INTEGER\x20DEFAULT\x200,\x0a\x20\x20\x20\x20weight\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20REAL\x20DEFAULT\x200.5,\x0a\x20\x20\x20\x20direction\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20metadata\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20cached_at\x20\x20\x20\x20\x20\x20\x20\x20\x20INTEGER\x0a);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_edges_project\x20ON\x20graph_edges(project_id);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_edges_source\x20ON\x20graph_edges(source_object);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_edges_target\x20ON\x20graph_edges(target_object);\x0a\x0a--\x20Evaluation\x20results\x20(cached\x20with\x20timestamps)\x0aCREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20evaluations\x20(\x0a\x20\x20\x20\x20id\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20project_id\x20\x20\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20eval_type\x20\x20\x20\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20score\x20\x20\x20\x20\x20\x20\x20\x20\x20REAL,\x0a\x20\x20\x20\x20summary\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20details\x20\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20evaluated_at\x20\x20INTEGER,\x0a\x20\x20\x20\x20metadata\x20\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20FOREIGN\x20KEY\x20(project_id)\x20REFERENCES\x20projects(id)\x20ON\x20DELETE\x20CASCADE\x0a);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_eval_project\x20ON\x20evaluations(project_id);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_eval_type\x20ON\x20evaluations(eval_type);\x0a\x0a--\x20Project\x20deployment\x20documents\x20(generated\x20from\x20SQLite\x20data)\x0aCREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20project_documents\x20(\x0a\x20\x20\x20\x20id\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20project_id\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20version\x20\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20network\x20\x20\x20\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20doc_type\x20\x20\x20\x20TEXT\x20DEFAULT\x20\x27deployment\x27,\x0a\x20\x20\x20\x20content\x20\x20\x20\x20\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20checksum\x20\x20\x20\x20TEXT,\x0a\x20\x20\x20\x20generated_at\x20INTEGER,\x0a\x20\x20\x20\x20updated_at\x20\x20\x20INTEGER,\x0a\x20\x20\x20\x20FOREIGN\x20KEY\x20(project_id)\x20REFERENCES\x20projects(id)\x20ON\x20DELETE\x20CASCADE\x0a);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_docs_project\x20ON\x20project_documents(project_id);\x0aCREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_docs_network\x20ON\x20project_documents(network);\x0a';function generateId(){if(typeof crypto!=='undefined'&&crypto['randomUUID'])return crypto['randomUUID']();return Date['now']()+'-'+Math['random']()['toString'](0x24)['slice'](0x2,0xb);}function parseJSON(a){if(!a)return null;try{return JSON['parse'](a);}catch{return null;}}function parseStringArray(a){if(!a)return null;try{const b=JSON['parse'](a);return Array['isArray'](b)?b:null;}catch{return null;}}function rowToProject(a){return{'id':a['id'],'prefix':a['prefix'],'name':a['name'],'description':a['description'],'industry':a['industry'],'perspective':a['perspective'],'status':a['status'],'labels':parseStringArray(a['labels']),'currentVersion':a['current_version'],'serviceAddress':a['service_address'],'defaultAccount':a['default_account'],'network':a['network'],'createdAt':a['created_at'],'updatedAt':a['updated_at'],'metadata':parseJSON(a['metadata'])};}function rowToVersion(a){return{'id':a['id'],'projectId':a['project_id'],'version':a['version'],'description':a['description'],'createdAt':a['created_at'],'metadata':parseJSON(a['metadata'])};}function rowToProjectObject(a){return{'id':a['id'],'projectId':a['project_id'],'objectAddress':a['object_address'],'objectType':a['object_type'],'objectName':a['object_name'],'role':a['role'],'tags':parseStringArray(a['tags']),'addedAt':a['added_at'],'metadata':parseJSON(a['metadata'])};}function rowToGraphEdge(a){return{'id':a['id'],'projectId':a['project_id'],'sourceObject':a['source_object'],'targetObject':a['target_object'],'edgeSource':a['edge_source'],'relationshipType':a['relationship_type'],'fieldName':a['field_name'],'depth':a['depth'],'verified':a['verified']===0x1,'weight':a['weight'],'direction':a['direction'],'metadata':parseJSON(a['metadata']),'cachedAt':a['cached_at']};}function rowToEvaluation(a){return{'id':a['id'],'projectId':a['project_id'],'evalType':a['eval_type'],'score':a['score'],'summary':a['summary'],'details':parseJSON(a['details']),'evaluatedAt':a['evaluated_at'],'metadata':parseJSON(a['metadata'])};}function rowToProjectDocument(a){return{'id':a['id'],'project_id':a['project_id'],'version':a['version']??void 0x0,'network':a['network'],'doc_type':a['doc_type'],'content':a['content'],'checksum':a['checksum']??void 0x0,'generated_at':a['generated_at']??void 0x0,'updated_at':a['updated_at']??void 0x0};}var LocalProject=class LocalProject{static{this['_instanceLock']=new a84b();}constructor(){this['_dbLock']=new a84b();}static['Instance'](){if(LocalProject['_instance'])return LocalProject['_instance'];if(!LocalProject['_instance'])LocalProject['_instance']=new LocalProject();return LocalProject['_instance'];}get['db'](){return getProjectDb();}async['createProject'](a){return this['_dbLock']['run'](async()=>{const b=generateId(),c=Date['now'](),d=a['network']??'testnet',e=a['perspective']??'producer';return this['db']['prepare']('INSERT\x20INTO\x20projects\x20(id,\x20prefix,\x20name,\x20description,\x20industry,\x20perspective,\x20status,\x20labels,\x0a\x09\x09\x09\x09\x09\x09current_version,\x20service_address,\x20default_account,\x20network,\x20created_at,\x20updated_at,\x20metadata)\x0a\x09\x09\x09\x09\x09\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20\x27draft\x27,\x20?,\x20NULL,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?)')['run'](b,a['prefix'],a['name'],a['description']??null,a['industry']??null,e,a['labels']?JSON['stringify'](a['labels']):null,a['serviceAddress']??null,a['defaultAccount']??null,d,c,c,a['metadata']?JSON['stringify'](a['metadata']):null),await this['getProject'](b);});}async['updateProject'](a,b){return this['_dbLock']['run'](async()=>{if(!await this['getProject'](a))a84a('invalid\x20parameter','Project\x20not\x20found:\x20'+a);const c=Date['now'](),d=[],e=[];return b['name']!==void 0x0&&(d['push']('name\x20=\x20?'),e['push'](b['name'])),b['description']!==void 0x0&&(d['push']('description\x20=\x20?'),e['push'](b['description'])),b['industry']!==void 0x0&&(d['push']('industry\x20=\x20?'),e['push'](b['industry'])),b['perspective']!==void 0x0&&(d['push']('perspective\x20=\x20?'),e['push'](b['perspective'])),b['status']!==void 0x0&&(d['push']('status\x20=\x20?'),e['push'](b['status'])),b['labels']!==void 0x0&&(d['push']('labels\x20=\x20?'),e['push'](b['labels']?JSON['stringify'](b['labels']):null)),b['currentVersion']!==void 0x0&&(d['push']('current_version\x20=\x20?'),e['push'](b['currentVersion'])),b['serviceAddress']!==void 0x0&&(d['push']('service_address\x20=\x20?'),e['push'](b['serviceAddress'])),b['defaultAccount']!==void 0x0&&(d['push']('default_account\x20=\x20?'),e['push'](b['defaultAccount'])),b['metadata']!==void 0x0&&(d['push']('metadata\x20=\x20?'),e['push'](b['metadata']?JSON['stringify'](b['metadata']):null)),d['push']('updated_at\x20=\x20?'),e['push'](c),e['push'](a),this['db']['prepare']('UPDATE\x20projects\x20SET\x20'+d['join'](',\x20')+'\x20WHERE\x20id\x20=\x20?')['run'](...e),await this['getProject'](a);});}async['getProject'](a){const b=this['db']['prepare']('SELECT\x20*\x20FROM\x20projects\x20WHERE\x20id\x20=\x20?')['get'](a);return b?rowToProject(b):void 0x0;}async['getProjectByPrefix'](a){const b=this['db']['prepare']('SELECT\x20*\x20FROM\x20projects\x20WHERE\x20prefix\x20=\x20?')['get'](a);return b?rowToProject(b):void 0x0;}async['listProjects'](a){const b=[],c=[];a?.['status']&&(b['push']('status\x20=\x20?'),c['push'](a['status']));a?.['perspective']&&(b['push']('perspective\x20=\x20?'),c['push'](a['perspective']));a?.['network']&&(b['push']('network\x20=\x20?'),c['push'](a['network']));a?.['industry']&&(b['push']('industry\x20=\x20?'),c['push'](a['industry']));a?.['serviceAddress']&&(b['push']('service_address\x20=\x20?'),c['push'](a['serviceAddress']));let d='SELECT\x20*\x20FROM\x20projects';if(b['length']>0x0)d+='\x20WHERE\x20'+b['join']('\x20AND\x20');d+='\x20ORDER\x20BY\x20updated_at\x20DESC';let e=this['db']['prepare'](d)['all'](...c);if(a?.['labels']&&a['labels']['length']>0x0)e=e['filter'](f=>{const g=parseStringArray(f['labels']);if(!g)return![];return a['labels']['some'](h=>g['includes'](h));});return e['map'](rowToProject);}async['deleteProject'](a){return this['_dbLock']['run'](async()=>{this['db']['prepare']('DELETE\x20FROM\x20projects\x20WHERE\x20id\x20=\x20?')['run'](a);});}async['createVersion'](a,b,c,d){return this['_dbLock']['run'](async()=>{const e=generateId(),f=Date['now']();return this['db']['prepare']('INSERT\x20INTO\x20project_versions\x20(id,\x20project_id,\x20version,\x20description,\x20created_at,\x20metadata)\x0a\x09\x09\x09\x09\x09\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20?,\x20?)')['run'](e,a,b,c??null,f,d?JSON['stringify'](d):null),this['db']['prepare']('UPDATE\x20projects\x20SET\x20current_version\x20=\x20?,\x20updated_at\x20=\x20?\x20WHERE\x20id\x20=\x20?')['run'](b,f,a),await this['getVersion'](e);});}async['getVersion'](a){const b=this['db']['prepare']('SELECT\x20*\x20FROM\x20project_versions\x20WHERE\x20id\x20=\x20?')['get'](a);return b?rowToVersion(b):void 0x0;}async['listVersions'](a){return this['db']['prepare']('SELECT\x20*\x20FROM\x20project_versions\x20WHERE\x20project_id\x20=\x20?\x20ORDER\x20BY\x20created_at\x20DESC')['all'](a)['map'](rowToVersion);}async['addObject'](a,b){return this['_dbLock']['run'](async()=>{const c=generateId(),d=Date['now'](),e=b['role']??'reference';return this['db']['prepare']('INSERT\x20INTO\x20project_objects\x20(id,\x20project_id,\x20object_address,\x20object_type,\x20object_name,\x20role,\x20tags,\x20added_at,\x20metadata)\x0a\x09\x09\x09\x09\x09\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?)')['run'](c,a,b['objectAddress'],b['objectType']??null,b['objectName']??null,e,b['tags']?JSON['stringify'](b['tags']):null,d,b['metadata']?JSON['stringify'](b['metadata']):null),await this['getObject'](c);});}async['addObjects'](a,b){const c=[];for(const d of b)c['push'](await this['addObject'](a,d));return c;}async['getObject'](a){const b=this['db']['prepare']('SELECT\x20*\x20FROM\x20project_objects\x20WHERE\x20id\x20=\x20?')['get'](a);return b?rowToProjectObject(b):void 0x0;}async['listObjects'](a,b){const c=['project_id\x20=\x20?'],d=[a];return b?.['objectType']&&(c['push']('object_type\x20=\x20?'),d['push'](b['objectType'])),b?.['role']&&(c['push']('role\x20=\x20?'),d['push'](b['role'])),this['db']['prepare']('SELECT\x20*\x20FROM\x20project_objects\x20WHERE\x20'+c['join']('\x20AND\x20')+'\x20ORDER\x20BY\x20added_at\x20DESC')['all'](...d)['map'](rowToProjectObject);}async['removeObject'](a){this['db']['prepare']('DELETE\x20FROM\x20project_objects\x20WHERE\x20id\x20=\x20?')['run'](a);}async['removeObjectByAddress'](a,b){this['db']['prepare']('DELETE\x20FROM\x20project_objects\x20WHERE\x20project_id\x20=\x20?\x20AND\x20object_address\x20=\x20?')['run'](a,b);}async['updateObject'](a,b){const c=[],d=[];b['objectName']!==void 0x0&&(c['push']('object_name\x20=\x20?'),d['push'](b['objectName']));b['objectType']!==void 0x0&&(c['push']('object_type\x20=\x20?'),d['push'](b['objectType']));b['role']!==void 0x0&&(c['push']('role\x20=\x20?'),d['push'](b['role']));b['tags']!==void 0x0&&(c['push']('tags\x20=\x20?'),d['push'](JSON['stringify'](b['tags'])));if(c['length']===0x0)throw new Error('No\x20fields\x20to\x20update');return d['push'](a),this['db']['prepare']('UPDATE\x20project_objects\x20SET\x20'+c['join'](',\x20')+'\x20WHERE\x20id\x20=\x20?')['run'](...d),await this['getObject'](a);}async['findObjectsByAddress'](a){return this['db']['prepare']('SELECT\x20*\x20FROM\x20project_objects\x20WHERE\x20object_address\x20=\x20?\x20ORDER\x20BY\x20added_at\x20DESC')['all'](a)['map'](rowToProjectObject);}async['cacheObject'](a,b,c,d){return this['_dbLock']['run'](async()=>{const e=Date['now'](),f=this['db']['prepare']('SELECT\x20*\x20FROM\x20object_cache\x20WHERE\x20address\x20=\x20?')['get'](a);if(f){const g=this['computeChangedFields'](f['data'],c);this['db']['prepare']('INSERT\x20INTO\x20object_cache_history\x20(id,\x20address,\x20object_type,\x20data,\x20fetched_at,\x20network,\x20changed_fields)\x0a\x09\x09\x09\x09\x09\x09\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?)')['run'](generateId(),a,f['object_type'],f['data'],f['fetched_at'],f['network'],g['length']>0x0?JSON['stringify'](g):null);}this['db']['prepare']('INSERT\x20INTO\x20object_cache\x20(address,\x20object_type,\x20data,\x20fetched_at,\x20network)\x0a\x09\x09\x09\x09\x09\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20?)\x0a\x09\x09\x09\x09\x09\x20ON\x20CONFLICT(address)\x20DO\x20UPDATE\x20SET\x20object_type\x20=\x20excluded.object_type,\x0a\x09\x09\x09\x09\x09\x09data\x20=\x20excluded.data,\x20fetched_at\x20=\x20excluded.fetched_at,\x20network\x20=\x20excluded.network')['run'](a,b,c,e,d);});}async['getCachedObject'](a){const b=this['db']['prepare']('SELECT\x20*\x20FROM\x20object_cache\x20WHERE\x20address\x20=\x20?')['get'](a);if(!b)return void 0x0;return{'address':b['address'],'objectType':b['object_type'],'data':b['data'],'fetchedAt':b['fetched_at'],'network':b['network']};}async['getCachedObjects'](a){const b=new Map();if(a['length']===0x0)return b;const c=a['map'](()=>'?')['join'](','),d=this['db']['prepare']('SELECT\x20*\x20FROM\x20object_cache\x20WHERE\x20address\x20IN\x20('+c+')')['all'](...a);for(const e of d)b['set'](e['address'],{'address':e['address'],'objectType':e['object_type'],'data':e['data'],'fetchedAt':e['fetched_at'],'network':e['network']});return b;}async['deleteCachedObject'](a){this['db']['prepare']('DELETE\x20FROM\x20object_cache\x20WHERE\x20address\x20=\x20?')['run'](a);}async['getObjectDiff'](a,b,c){const d=this['db']['prepare']('SELECT\x20*\x20FROM\x20object_cache_history\x0a\x09\x09\x09\x09\x20WHERE\x20address\x20=\x20?\x20AND\x20fetched_at\x20BETWEEN\x20?\x20AND\x20?\x0a\x09\x09\x09\x09\x20ORDER\x20BY\x20fetched_at\x20ASC')['all'](a,b,c),e=await this['getCachedObject'](a);if(e&&e['fetchedAt']>=b&&e['fetchedAt']<=c)d['push']({'id':'current','address':e['address'],'object_type':e['objectType'],'data':e['data'],'fetched_at':e['fetchedAt'],'network':e['network'],'changed_fields':null});const f=[];if(d['length']>=0x2){const g=d[0x0],h=d[d['length']-0x1],i=this['computeDiff'](g['data'],h['data'],g['data'],h['data']);f['push'](...i);}return{'address':a,'fromTime':b,'toTime':c,'changedFields':f};}async['getObjectHistory'](a){return this['db']['prepare']('SELECT\x20*\x20FROM\x20object_cache_history\x20WHERE\x20address\x20=\x20?\x20ORDER\x20BY\x20fetched_at\x20DESC')['all'](a)['map'](b=>({'id':b['id'],'address':b['address'],'objectType':b['object_type'],'data':b['data'],'fetchedAt':b['fetched_at'],'network':b['network'],'changedFields':parseStringArray(b['changed_fields'])}));}['computeChangedFields'](a,b){try{const c=JSON['parse'](a),d=JSON['parse'](b),e=[];return this['collectChangedPaths'](c,d,'',e),e;}catch{return[];}}['collectChangedPaths'](a,b,c,d){if(typeof a!==typeof b){d['push'](c||'(root)');return;}if(typeof a!=='object'||a===null||b===null){if(a!==b)d['push'](c||'(root)');return;}const e=a,f=b,g=new Set([...Object['keys'](e),...Object['keys'](f)]);for(const h of g){const i=c?c+'.'+h:h;if(!(h in e))d['push'](i);else{if(!(h in f))d['push'](i);else this['collectChangedPaths'](e[h],f[h],i,d);}}}['computeDiff'](a,b,c,d){try{const e=JSON['parse'](a),f=JSON['parse'](b),g=[];return this['collectDiff'](e,f,'',g),g;}catch{return[];}}['collectDiff'](a,b,c,d){if(typeof a!==typeof b){d['push']({'fieldPath':c||'(root)','oldValue':a,'newValue':b,'changeType':'modified'});return;}if(typeof a!=='object'||a===null||b===null){if(a!==b)d['push']({'fieldPath':c||'(root)','oldValue':a,'newValue':b,'changeType':'modified'});return;}const e=a,f=b,g=new Set([...Object['keys'](e),...Object['keys'](f)]);for(const h of g){const i=c?c+'.'+h:h;if(!(h in e))d['push']({'fieldPath':i,'oldValue':void 0x0,'newValue':f[h],'changeType':'added'});else{if(!(h in f))d['push']({'fieldPath':i,'oldValue':e[h],'newValue':void 0x0,'changeType':'removed'});else this['collectDiff'](e[h],f[h],i,d);}}}async['saveGraphEdges'](a,b){return this['_dbLock']['run'](async()=>{const c=Date['now']();if(a)this['db']['prepare']('DELETE\x20FROM\x20graph_edges\x20WHERE\x20project_id\x20=\x20?')['run'](a);const d=this['db']['prepare']('INSERT\x20INTO\x20graph_edges\x20(id,\x20project_id,\x20source_object,\x20target_object,\x20edge_source,\x0a\x09\x09\x09\x09\x09relationship_type,\x20field_name,\x20depth,\x20verified,\x20weight,\x20direction,\x20metadata,\x20cached_at)\x0a\x09\x09\x09\x09\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?)');return this['db']['transaction'](e=>{for(const f of e){const g=generateId();d['run'](g,a??f['projectId']??null,f['sourceObject'],f['targetObject'],f['edgeSource'],f['relationshipType'],f['fieldName']??null,f['depth']??0x0,f['verified']?0x1:0x0,f['weight']??0.5,f['direction']??null,f['metadata']?JSON['stringify'](f['metadata']):null,c);}})(b),(a?this['db']['prepare']('SELECT\x20*\x20FROM\x20graph_edges\x20WHERE\x20project_id\x20=\x20?')['all'](a):this['db']['prepare']('SELECT\x20*\x20FROM\x20graph_edges\x20WHERE\x20project_id\x20IS\x20NULL')['all']())['map'](rowToGraphEdge);});}async['getGraph'](a){return(a?this['db']['prepare']('SELECT\x20*\x20FROM\x20graph_edges\x20WHERE\x20project_id\x20=\x20?')['all'](a):this['db']['prepare']('SELECT\x20*\x20FROM\x20graph_edges')['all']())['map'](rowToGraphEdge);}async['getGraphForObject'](a){return this['db']['prepare']('SELECT\x20*\x20FROM\x20graph_edges\x20WHERE\x20source_object\x20=\x20?\x20OR\x20target_object\x20=\x20?')['all'](a,a)['map'](rowToGraphEdge);}async['clearGraph'](a){if(a)this['db']['prepare']('DELETE\x20FROM\x20graph_edges\x20WHERE\x20project_id\x20=\x20?')['run'](a);else this['db']['exec']('DELETE\x20FROM\x20graph_edges');}async['saveEvaluation'](a){return this['_dbLock']['run'](async()=>{const b=generateId(),c=Date['now']();return this['db']['prepare']('INSERT\x20INTO\x20evaluations\x20(id,\x20project_id,\x20eval_type,\x20score,\x20summary,\x20details,\x20evaluated_at,\x20metadata)\x0a\x09\x09\x09\x09\x09\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?)')['run'](b,a['projectId'],a['evalType'],a['score']??null,a['summary']??null,a['details']?JSON['stringify'](a['details']):null,c,a['metadata']?JSON['stringify'](a['metadata']):null),await this['getEvaluation'](b);});}async['getEvaluation'](a){const b=this['db']['prepare']('SELECT\x20*\x20FROM\x20evaluations\x20WHERE\x20id\x20=\x20?')['get'](a);return b?rowToEvaluation(b):void 0x0;}async['listEvaluations'](a,b){const c=['project_id\x20=\x20?'],d=[a];return b?.['evalType']&&(c['push']('eval_type\x20=\x20?'),d['push'](b['evalType'])),this['db']['prepare']('SELECT\x20*\x20FROM\x20evaluations\x20WHERE\x20'+c['join']('\x20AND\x20')+'\x20ORDER\x20BY\x20evaluated_at\x20DESC')['all'](...d)['map'](rowToEvaluation);}async['getLatestEvaluation'](a,b){const c=this['db']['prepare']('SELECT\x20*\x20FROM\x20evaluations\x20WHERE\x20project_id\x20=\x20?\x20AND\x20eval_type\x20=\x20?\x0a\x09\x09\x09\x09\x20ORDER\x20BY\x20evaluated_at\x20DESC\x20LIMIT\x201')['get'](a,b);return c?rowToEvaluation(c):void 0x0;}async['saveDocument'](a,b,c,d='deployment'){return this['_dbLock']['run'](async()=>{const e=generateId(),f=Date['now'](),g=this['computeChecksum'](c),h=this['db']['prepare']('SELECT\x20id\x20FROM\x20project_documents\x20WHERE\x20project_id\x20=\x20?\x20AND\x20network\x20=\x20?\x20AND\x20doc_type\x20=\x20?')['get'](a,b,d);if(h)return this['db']['prepare']('UPDATE\x20project_documents\x20SET\x20content\x20=\x20?,\x20checksum\x20=\x20?,\x20updated_at\x20=\x20?\x20WHERE\x20id\x20=\x20?')['run'](c,g,f,h['id']),this['getDocument'](a,b,d);return this['db']['prepare']('INSERT\x20INTO\x20project_documents\x20(id,\x20project_id,\x20network,\x20doc_type,\x20content,\x20checksum,\x20generated_at,\x20updated_at)\x0a\x09\x09\x09\x09\x09\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?)')['run'](e,a,b,d,c,g,f,f),this['getDocument'](a,b,d);});}async['getDocument'](a,b,c='deployment'){const d=this['db']['prepare']('SELECT\x20*\x20FROM\x20project_documents\x20WHERE\x20project_id\x20=\x20?\x20AND\x20network\x20=\x20?\x20AND\x20doc_type\x20=\x20?')['get'](a,b,c);return d?rowToProjectDocument(d):void 0x0;}async['listDocuments'](a){return this['db']['prepare']('SELECT\x20*\x20FROM\x20project_documents\x20WHERE\x20project_id\x20=\x20?\x20ORDER\x20BY\x20updated_at\x20DESC')['all'](a)['map'](rowToProjectDocument);}async['deleteDocument'](a,b,c='deployment'){return this['_dbLock']['run'](async()=>{return this['db']['prepare']('DELETE\x20FROM\x20project_documents\x20WHERE\x20project_id\x20=\x20?\x20AND\x20network\x20=\x20?\x20AND\x20doc_type\x20=\x20?')['run'](a,b,c)['changes']>0x0;});}['computeChecksum'](a){let b=0x0;for(let c=0x0;c<a['length'];c++){const d=a['charCodeAt'](c);b=(b<<0x5)-b+d,b=b&b;}return b['toString'](0x10);}static['resetDbConnection'](){if(projectDbInstance){try{projectDbInstance['close']();}catch{}projectDbInstance=null;}}};process['on']('exit',()=>{LocalProject['resetDbConnection']();}),process['on']('SIGINT',()=>{LocalProject['resetDbConnection']();}),process['on']('SIGTERM',()=>{LocalProject['resetDbConnection']();});export{LocalProject};