@wowok/wowok 2.2.11 → 2.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/dist/cjs/w/local/account.d.ts +1 -0
- package/dist/cjs/w/local/account.js +1 -1
- package/dist/cjs/w/local/index.d.ts +6 -0
- package/dist/cjs/w/local/index.js +1 -1
- package/dist/esm/w/local/account.d.ts +1 -0
- package/dist/esm/w/local/account.js +1 -1
- package/dist/esm/w/local/index.d.ts +6 -0
- package/dist/esm/w/local/index.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# What is WoWok?
|
|
2
2
|
Create, collaborate, and transact on your own terms with the AI-driven web3 collaboration blockchain.
|
|
3
3
|
|
|
4
|
-
MCP Server: [https://www.npmjs.com/package/
|
|
5
|
-
MCP Source: [https://github.com/wowok-ai/agent](https://github.com/wowok-ai/agent)
|
|
6
|
-
AI Skills: [https://github.com/wowok-ai/skills](https://github.com/wowok-ai/skills)
|
|
4
|
+
MCP Server: [https://www.npmjs.com/package/@wowok/agent-mcp](https://www.npmjs.com/package/@wowok/agent-mcp)
|
|
5
|
+
MCP Source: [https://github.com/wowok-ai/agent](https://github.com/wowok-ai/agent)
|
|
6
|
+
AI Skills: [https://github.com/wowok-ai/skills](https://github.com/wowok-ai/skills)
|
|
7
7
|
Docs: [https://github.com/wowok-ai/docs/](https://github.com/wowok-ai/docs/)
|
|
8
8
|
X: [https://x.com/Wowok_Ai](https://x.com/Wowok_Ai)
|
|
9
9
|
|
|
@@ -18,7 +18,7 @@ Add to your MCP configuration:
|
|
|
18
18
|
"mcpServers": {
|
|
19
19
|
"wowok": {
|
|
20
20
|
"command": "npx",
|
|
21
|
-
"args": ["-y", "
|
|
21
|
+
"args": ["-y", "@wowok/agent-mcp"]
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
}
|
|
@@ -27,7 +27,7 @@ Add to your MCP configuration:
|
|
|
27
27
|
### 2. Install WoWok Skills (Recommended)
|
|
28
28
|
|
|
29
29
|
```bash
|
|
30
|
-
npm install -g wowok
|
|
30
|
+
npm install -g @wowok/skills
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
Skills help AI assistants use WoWok tools correctly:
|
|
@@ -54,6 +54,7 @@ export declare class Account {
|
|
|
54
54
|
get_many_address(address_or_names: (string | null | undefined)[]): Promise<(string | undefined)[]>;
|
|
55
55
|
private get_imp;
|
|
56
56
|
private name_resolve;
|
|
57
|
+
get_many(address_or_names: (string | null | undefined)[]): Promise<(AccountData | undefined)[]>;
|
|
57
58
|
private get_many_imp;
|
|
58
59
|
swap_name(name1: string | null | undefined, name2: string | null | undefined): Promise<boolean>;
|
|
59
60
|
rename(name_or_address: string | null | undefined, new_name: string): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Falcon512Keypair}from'../../keypairs/falcon512/index.js';import{W_ERROR,WErrors}from'../exception.js';import{GasTokenType,isGasTokenType,isValidName,MAX_NAME_LENGTH}from'../common.js';import{getFaucetHost,requestWowFromFaucetV2}from'../../faucet/index.js';import{Transaction}from'../../transactions/index.js';import{getFullnodeUrl}from'../../client/network.js';import{WowClient}from'../../client/index.js';import{Config}from'./config.js';import{SQLiteAccountStorage}from'./storage.js';import{isValidWowAddress}from'../../utils/wow-types.js';import{decodeWowPrivateKey}from'../../cryptography/keypair.js';import{hkdf}from'@noble/hashes/hkdf';import{sha256}from'@noble/hashes/sha256';import{x25519}from'@noble/curves/ed25519';export const DEFAULT_ACCOUNT_NAME='';export const MAX_MESSENGER_ACCOUNTS=0x64;export class Account{static ['_instance'];static ['storage'];['setStorage'](a){Account['storage']=a;}async['getStorage'](){return!Account['storage']&&(Account['storage']=new SQLiteAccountStorage()),Account['storage'];}static['Instance'](){return!Account['_instance']&&(Account['_instance']=new Account()),Account['_instance'];}['accountData'](a){if(!a||!a['secret'])return undefined;const b=Falcon512Keypair['fromSecretKey'](a['secret']);return a['pubkey']=b['getPublicKey']()['toWPublicKey'](),a['secret']=undefined,a;}async['gen'](a,b,c){a=this['name_resolve'](a);a&&!isValidName(a)&&W_ERROR(WErrors['IsValidName'],'Name\x20'+a+'\x20is\x20exceeds\x20max\x20'+MAX_NAME_LENGTH);c&&!isValidName(c)&&W_ERROR(WErrors['IsValidName'],'Messenger\x20name\x20'+c+'\x20is\x20exceeds\x20max\x20'+MAX_NAME_LENGTH);const d=Falcon512Keypair['generate']()['getSecretKey'](),e=Falcon512Keypair['fromSecretKey'](d)['getPublicKey']()['toWAddress'](),f=Date['now'](),g={'name':a,'address':e,'secret':d,'m':undefined,'createdAt':f,'updatedAt':f},h=await this['getStorage'](),i=await h['get']();if(i){const j=JSON['parse'](i),k=j['findIndex'](l=>l['name']===a);k!==-0x1?b?(j[k]['name']=undefined,j['push'](g),await h['put'](JSON['stringify'](j))):W_ERROR(WErrors['AccountNameExist'],'Name\x20'+(a||'')+'\x20already\x20exist'):await h['put'](JSON['stringify']([...j,g]));}else await h['put'](JSON['stringify']([g]));if(c){const l=await this['getStorage'](),n=await l['get']();if(n){const q=JSON['parse'](n),r=q['filter'](s=>s['m']!=null)['length'];r>=MAX_MESSENGER_ACCOUNTS&&W_ERROR(WErrors['InvalidParam'],'Maximum\x20'+MAX_MESSENGER_ACCOUNTS+'\x20messenger\x20accounts\x20allowed,\x20current\x20count:\x20'+r);}g['m']=c;const o=await this['getStorage'](),p=await o['get']();if(p){const s=JSON['parse'](p),t=s['find'](u=>u['address']===e);t&&(t['m']=c,t['updatedAt']=Date['now'](),await o['put'](JSON['stringify'](s)));}}return this['accountData'](g);}async['default'](){return this['accountData'](await this['get_imp'](DEFAULT_ACCOUNT_NAME));}async['get'](a,b){if(!b)return this['accountData'](await this['get_imp'](a));return this['gen'](a);}async['get_address'](a){if(a&&isValidWowAddress(a))return a['toLowerCase']();return(await this['get_imp'](a))?.['address'];}async['get_many_address'](a){const b=await this['getStorage'](),c=await b['get']();if(c){const d=JSON['parse'](c);return a['map'](e=>{if(e&&isValidWowAddress(e))return e['toLowerCase']();const f=this['name_resolve'](e);return d['find'](g=>g['address']['toLowerCase']()===f['toLowerCase']()||g['name']===f)?.['address'];});}return a['map'](e=>e&&isValidWowAddress(e)?e['toLowerCase']():undefined);}async['get_imp'](a){a=this['name_resolve'](a);const b=await this['getStorage'](),c=await b['get']();if(c)return JSON['parse'](c)['find'](e=>e['name']===a||e['address']['toLowerCase']()===a['toLowerCase']());return undefined;}['name_resolve'](a){return a||DEFAULT_ACCOUNT_NAME;}async['get_many_imp'](a){const b=await this['getStorage'](),c=await b['get']();if(c){const d=JSON['parse'](c);return a['map'](e=>{const f=this['name_resolve'](e);return d['find'](g=>g['address']['toLowerCase']()===f['toLowerCase']()||g['name']===f);});}return a['map'](e=>undefined);}async['swap_name'](a,b){a=this['name_resolve'](a),b=this['name_resolve'](b);if(a===b)return!![];a&&!isValidName(a)&&W_ERROR(WErrors['IsValidName'],'Name\x20'+(a||'')+'\x20is\x20exceeds\x20max\x20'+MAX_NAME_LENGTH);b&&!isValidName(b)&&W_ERROR(WErrors['IsValidName'],'Name\x20'+(b||'')+'\x20is\x20exceeds\x20max\x20'+MAX_NAME_LENGTH);const c=await this['getStorage'](),d=await c['get']();if(!d)return![];const e=JSON['parse'](d),f=e['find'](i=>i['name']===a),g=e['find'](i=>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){b&&!isValidName(b)&&W_ERROR(WErrors['IsValidName'],'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);g['find'](j=>j['name']===b)&&W_ERROR(WErrors['IsValidName'],'New\x20name\x20\x22'+(b||'')+'\x22\x20already\x20exists');const h=g['find'](j=>j['name']===c||j['address']['toLowerCase']()===c['toLowerCase']());!h&&W_ERROR(WErrors['AccountNotFound'],'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){const b=await this['getStorage'](),c=await b['get']();if(c){let d=JSON['parse'](c);return a?.['suspended']!==undefined?d=d['filter'](e=>a['suspended']?e['suspended']===!![]:!e['suspended']):d=d['filter'](e=>!e['suspended']),a?.['hasMessenger']!==undefined&&(d=d['filter'](e=>a['hasMessenger']?e['m']!=null:e['m']==null)),a?.['m']!=null&&(d=d['filter'](e=>e['m']!=null)),a?.['createdAt']&&(a['createdAt']['gte']!==undefined&&(d=d['filter'](e=>e['createdAt']&&e['createdAt']>=a['createdAt']['gte'])),a['createdAt']['lte']!==undefined&&(d=d['filter'](e=>e['createdAt']&&e['createdAt']<=a['createdAt']['lte']))),a?.['updatedAt']&&(a['updatedAt']['gte']!==undefined&&(d=d['filter'](e=>e['updatedAt']&&e['updatedAt']>=a['updatedAt']['gte'])),a['updatedAt']['lte']!==undefined&&(d=d['filter'](e=>e['updatedAt']&&e['updatedAt']<=a['updatedAt']['lte']))),(a?.['name']!=null||a?.['address']||a?.['m']!=null)&&(d=d['map'](e=>{let f=0x0;if(a?.['name']!=null){const g=e['name']?.['toLowerCase']()||'',h=a['name']['toLowerCase']();if(g===h)f+=0x64;else{if(g['startsWith'](h))f+=0x32;else g['includes'](h)&&(f+=0x19);}}if(a?.['address']){const i=e['address']['toLowerCase'](),j=a['address']['toLowerCase']();if(i===j)f+=0x64;else{if(i['startsWith'](j))f+=0x32;else i['includes'](j)&&(f+=0x19);}}if(a?.['m']!=null&&e['m']!=null){const k=e['m']['toLowerCase'](),l=a['m']['toLowerCase']();if(k===l)f+=0x64;else{if(k['startsWith'](l))f+=0x32;else k['includes'](l)&&(f+=0x19);}}return(a?.['name']||a?.['address']||a?.['m']!=null)&&f===0x0&&(f=-0x1),{'account':e,'score':f};})['filter'](({score:e})=>e>=0x0)['sort']((e,f)=>f['score']-e['score'])['map'](({account:e})=>e)),d['map'](e=>this['accountData'](e))['filter'](e=>e!==undefined);}return[];}async['suspend'](a){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']()||g['name']===a);if(e){const g=Date['now']();return e['suspended']=!![],e['name']=undefined,e['m']=undefined,e['updatedAt']=g,await b['put'](JSON['stringify'](d)),!![];}}return![];}async['suspend_many'](a){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']()||l['name']===j);k?(k['suspended']=!![],k['name']=undefined,k['m']=undefined,k['updatedAt']=g,d['success']['push'](i),h=!![]):d['failed']['push'](i);}h&&await b['put'](JSON['stringify'](e));}else d['failed']=[...a];return d;}async['resume'](a,b){b=this['name_resolve'](b),a=a['toLowerCase']();const c=await this['getStorage'](),d=await c['get']();if(d){const e=JSON['parse'](d);e['find'](h=>h['name']===b)&&W_ERROR(WErrors['IsValidName'],'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['updatedAt']=h,await c['put'](JSON['stringify'](e)),!![];}}return![];}async['faucet'](b,c){const d=await this['get_imp'](b);if(d)try{const e=await requestWowFromFaucetV2({'host':getFaucetHost(c),'recipient':d['address']});return e['coins_sent']||[];}catch(f){}return[];}async['sign_and_commit'](b,c,d){const e=await this['get_imp'](c);if(e){const f=Falcon512Keypair['fromSecretKey'](e['secret']);if(f){const g=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](d))});return g['signAndExecuteTransaction']({'transaction':b,'signer':f,'options':{'showObjectChanges':!![],'showEffects':!![]}});}}return undefined;}['balance']=async(b,c,d)=>{const e=await this['get'](c);b=b??GasTokenType;if(e){const f=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](d))});return f['getBalance']({'owner':e['address'],'coinType':b});}return undefined;};['coin']=async(b,c,d,e,f)=>{const g=await this['get'](e);b=b??GasTokenType;if(g){const h=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](f))});return h['getCoins']({'owner':g['address'],'coinType':b,'cursor':c,'limit':d});}return undefined;};['get_coin_object']=async(c,d,e,f,g)=>{const h=await this['get'](f);if(h){const j=BigInt(d),k=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](g))});if(j>=BigInt(0x0)){if(!e||isGasTokenType(e))return c['splitCoins'](c['gas'],[j]);else{const l=await k['getCoins']({'owner':h['address'],'coinType':e}),m=[],n=new Set();let o=BigInt(0x0);for(let p=0x0;p<l['data']['length'];++p){const q=l['data'][p]['coinObjectId'];if(n['has'](q))continue;n['add'](q),o+=BigInt(l['data'][p]['balance']),m['push'](q);if(o>=j)break;}if(m['length']===0x0)return undefined;if(m['length']===0x1)return c['splitCoins'](m[0x0],[j]);else{const s=m['pop']();return c['mergeCoins'](s,m),c['splitCoins'](s,[j]);}}}}return undefined;};['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);!h?W_ERROR(WErrors['InvalidParam'],'Invalid\x20coin\x20object:\x20'+g):f['push'](h);}return a['makeMoveVec']({'elements':f});};async['refund_coin'](a,b,c){const d=await this['get_address'](c);if(!d)W_ERROR(WErrors['InvalidParam'],'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)W_ERROR(WErrors['InvalidParam'],'Invalid\x20from\x20address\x20or\x20name\x20'+d);const h=g?.['address']??c;if(!h)W_ERROR(WErrors['InvalidParam'],'Invalid\x20to\x20address\x20or\x20name\x20'+c);const i=Falcon512Keypair['fromSecretKey'](f['secret']);if(i){const j=new Transaction(),k=await this['get_coin_object'](j,a,b,d,e);if(k){j['transferObjects']([k],h);const l=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](e))}),m=l['signAndExecuteTransaction']({'transaction':j,'signer':i,'options':{'showObjectChanges':!![]}});return m;}}return undefined;}['coinObject_with_balance']=async(b,c,d,e)=>{const f=await this['get_imp'](d);if(!f)return undefined;const g=Falcon512Keypair['fromSecretKey'](f['secret']);if(!g)return undefined;const h=new Transaction(),i=await this['get_coin_object'](h,b,c,d,e);if(i){h['transferObjects']([i],f['address']);const j=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](e))}),k=await j['signAndExecuteTransaction']({'transaction':h,'signer':g,'options':{'showObjectChanges':!![]}}),l=c??GasTokenType;return k?.['objectChanges']?.['find'](m=>m?.['type']==='created'&&(m?.['objectType'])['includes'](l))?.['objectId'];}return undefined;};async['sign'](a,b){const c=await this['get_imp'](a);!c?.['secret']&&W_ERROR(WErrors['InvalidParam'],'Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const d=Falcon512Keypair['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);!c?.['secret']&&W_ERROR(WErrors['InvalidParam'],'Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const d=Falcon512Keypair['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']()['toWPublicKey'](),'address':c['address']};}async['deriveX25519Identity'](a){const b=await this['get_imp'](a);!b?.['secret']&&W_ERROR(WErrors['InvalidParam'],'Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const c=decodeWowPrivateKey(b['secret']),d=c['secretKey'],e=Falcon512Keypair['fromSecretKey'](b['secret']),f=e['getPublicKey']()['toRawBytes'](),g=new TextEncoder()['encode']('WowokX25519IdentityDerivation'),h=sha256(d),i=hkdf(sha256,h,new Uint8Array(0x0),g,0x20);i[0x0]&=0xf8,i[0x1f]&=0x7f,i[0x1f]|=0x40;const j=x25519['getPublicKey'](i),k=j[0x0]<<0x8|j[0x1];return{'x25519KeyPair':{'publicKey':j,'privateKey':i},'falcon512KeyPair':{'publicKey':f,'privateKey':d},'registrationId':k===0x0?0x1:k};}async['set_messenger'](a,b){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'](k=>k['address']['toLowerCase']()===c['toLowerCase']()||k['name']===c);if(!h)return![];if(!b){const k=Date['now']();return h['m']=undefined,h['updatedAt']=k,await d['put'](JSON['stringify'](g)),!![];}!isValidName(b)&&W_ERROR(WErrors['IsValidName'],'Messenger\x20name\x20'+b+'\x20is\x20exceeds\x20max\x20'+MAX_NAME_LENGTH);const i=g['filter'](l=>l['m']!=null&&!l['suspended']&&l['address']!==h['address'])['length'];i>=MAX_MESSENGER_ACCOUNTS&&W_ERROR(WErrors['InvalidParam'],'Maximum\x20'+MAX_MESSENGER_ACCOUNTS+'\x20messenger\x20accounts\x20allowed,\x20current\x20count:\x20'+i);const j=Date['now']();return h['m']=b,h['updatedAt']=j,await d['put'](JSON['stringify'](g)),!![];}async['list_messenger_accounts'](){return this['list']({'hasMessenger':!![]});}async['count_messenger_accounts'](){const a=await this['getStorage'](),b=await a['get']();if(!b)return 0x0;const c=JSON['parse'](b);return c['filter'](e=>e['m']!=null&&!e['suspended'])['length'];}}
|
|
1
|
+
import{Falcon512Keypair}from'../../keypairs/falcon512/index.js';import{W_ERROR,WErrors}from'../exception.js';import{GasTokenType,isGasTokenType,isValidName,MAX_NAME_LENGTH}from'../common.js';import{getFaucetHost,requestWowFromFaucetV2}from'../../faucet/index.js';import{Transaction}from'../../transactions/index.js';import{getFullnodeUrl}from'../../client/network.js';import{WowClient}from'../../client/index.js';import{Config}from'./config.js';import{SQLiteAccountStorage}from'./storage.js';import{isValidWowAddress}from'../../utils/wow-types.js';import{decodeWowPrivateKey}from'../../cryptography/keypair.js';import{hkdf}from'@noble/hashes/hkdf';import{sha256}from'@noble/hashes/sha256';import{x25519}from'@noble/curves/ed25519';export const DEFAULT_ACCOUNT_NAME='';export const MAX_MESSENGER_ACCOUNTS=0x64;export class Account{static ['_instance'];static ['storage'];['setStorage'](a){Account['storage']=a;}async['getStorage'](){return!Account['storage']&&(Account['storage']=new SQLiteAccountStorage()),Account['storage'];}static['Instance'](){return!Account['_instance']&&(Account['_instance']=new Account()),Account['_instance'];}['accountData'](a){if(!a||!a['secret'])return undefined;const b=Falcon512Keypair['fromSecretKey'](a['secret']);return a['pubkey']=b['getPublicKey']()['toWPublicKey'](),a['secret']=undefined,a;}async['gen'](a,b,c){a=this['name_resolve'](a);a&&!isValidName(a)&&W_ERROR(WErrors['IsValidName'],'Name\x20'+a+'\x20is\x20exceeds\x20max\x20'+MAX_NAME_LENGTH);c&&!isValidName(c)&&W_ERROR(WErrors['IsValidName'],'Messenger\x20name\x20'+c+'\x20is\x20exceeds\x20max\x20'+MAX_NAME_LENGTH);const d=Falcon512Keypair['generate']()['getSecretKey'](),e=Falcon512Keypair['fromSecretKey'](d)['getPublicKey']()['toWAddress'](),f=Date['now'](),g={'name':a,'address':e,'secret':d,'m':undefined,'createdAt':f,'updatedAt':f},h=await this['getStorage'](),i=await h['get']();if(i){const j=JSON['parse'](i),k=j['findIndex'](l=>l['name']===a);k!==-0x1?b?(j[k]['name']=undefined,j['push'](g),await h['put'](JSON['stringify'](j))):W_ERROR(WErrors['AccountNameExist'],'Name\x20'+(a||'')+'\x20already\x20exist'):await h['put'](JSON['stringify']([...j,g]));}else await h['put'](JSON['stringify']([g]));if(c){const l=await this['getStorage'](),n=await l['get']();if(n){const q=JSON['parse'](n),r=q['filter'](s=>s['m']!=null)['length'];r>=MAX_MESSENGER_ACCOUNTS&&W_ERROR(WErrors['InvalidParam'],'Maximum\x20'+MAX_MESSENGER_ACCOUNTS+'\x20messenger\x20accounts\x20allowed,\x20current\x20count:\x20'+r);}g['m']=c;const o=await this['getStorage'](),p=await o['get']();if(p){const s=JSON['parse'](p),t=s['find'](u=>u['address']===e);t&&(t['m']=c,t['updatedAt']=Date['now'](),await o['put'](JSON['stringify'](s)));}}return this['accountData'](g);}async['default'](){return this['accountData'](await this['get_imp'](DEFAULT_ACCOUNT_NAME));}async['get'](a,b){if(!b)return this['accountData'](await this['get_imp'](a));return this['gen'](a);}async['get_address'](a){if(a&&isValidWowAddress(a))return a['toLowerCase']();return(await this['get_imp'](a))?.['address'];}async['get_many_address'](a){const b=await this['getStorage'](),c=await b['get']();if(c){const d=JSON['parse'](c);return a['map'](e=>{if(e&&isValidWowAddress(e))return e['toLowerCase']();const f=this['name_resolve'](e);return d['find'](g=>g['address']['toLowerCase']()===f['toLowerCase']()||g['name']===f)?.['address'];});}return a['map'](e=>e&&isValidWowAddress(e)?e['toLowerCase']():undefined);}async['get_imp'](a){a=this['name_resolve'](a);const b=await this['getStorage'](),c=await b['get']();if(c)return JSON['parse'](c)['find'](e=>e['name']===a||e['address']['toLowerCase']()===a['toLowerCase']());return undefined;}['name_resolve'](a){return a||DEFAULT_ACCOUNT_NAME;}async['get_many'](a){return this['get_many_imp'](a);}async['get_many_imp'](a){const b=await this['getStorage'](),c=await b['get']();if(c){const d=JSON['parse'](c);return a['map'](e=>{const f=this['name_resolve'](e);return d['find'](g=>g['address']['toLowerCase']()===f['toLowerCase']()||g['name']===f);});}return a['map'](e=>undefined);}async['swap_name'](a,b){a=this['name_resolve'](a),b=this['name_resolve'](b);if(a===b)return!![];a&&!isValidName(a)&&W_ERROR(WErrors['IsValidName'],'Name\x20'+(a||'')+'\x20is\x20exceeds\x20max\x20'+MAX_NAME_LENGTH);b&&!isValidName(b)&&W_ERROR(WErrors['IsValidName'],'Name\x20'+(b||'')+'\x20is\x20exceeds\x20max\x20'+MAX_NAME_LENGTH);const c=await this['getStorage'](),d=await c['get']();if(!d)return![];const e=JSON['parse'](d),f=e['find'](i=>i['name']===a),g=e['find'](i=>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){b&&!isValidName(b)&&W_ERROR(WErrors['IsValidName'],'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);g['find'](j=>j['name']===b)&&W_ERROR(WErrors['IsValidName'],'New\x20name\x20\x22'+(b||'')+'\x22\x20already\x20exists');const h=g['find'](j=>j['name']===c||j['address']['toLowerCase']()===c['toLowerCase']());!h&&W_ERROR(WErrors['AccountNotFound'],'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){const b=await this['getStorage'](),c=await b['get']();if(c){let d=JSON['parse'](c);return a?.['suspended']!==undefined?d=d['filter'](e=>a['suspended']?e['suspended']===!![]:!e['suspended']):d=d['filter'](e=>!e['suspended']),a?.['hasMessenger']!==undefined&&(d=d['filter'](e=>a['hasMessenger']?e['m']!=null:e['m']==null)),a?.['m']!=null&&(d=d['filter'](e=>e['m']!=null)),a?.['createdAt']&&(a['createdAt']['gte']!==undefined&&(d=d['filter'](e=>e['createdAt']&&e['createdAt']>=a['createdAt']['gte'])),a['createdAt']['lte']!==undefined&&(d=d['filter'](e=>e['createdAt']&&e['createdAt']<=a['createdAt']['lte']))),a?.['updatedAt']&&(a['updatedAt']['gte']!==undefined&&(d=d['filter'](e=>e['updatedAt']&&e['updatedAt']>=a['updatedAt']['gte'])),a['updatedAt']['lte']!==undefined&&(d=d['filter'](e=>e['updatedAt']&&e['updatedAt']<=a['updatedAt']['lte']))),(a?.['name']!=null||a?.['address']||a?.['m']!=null)&&(d=d['map'](e=>{let f=0x0;if(a?.['name']!=null){const g=e['name']?.['toLowerCase']()||'',h=a['name']['toLowerCase']();if(g===h)f+=0x64;else{if(g['startsWith'](h))f+=0x32;else g['includes'](h)&&(f+=0x19);}}if(a?.['address']){const i=e['address']['toLowerCase'](),j=a['address']['toLowerCase']();if(i===j)f+=0x64;else{if(i['startsWith'](j))f+=0x32;else i['includes'](j)&&(f+=0x19);}}if(a?.['m']!=null&&e['m']!=null){const k=e['m']['toLowerCase'](),l=a['m']['toLowerCase']();if(k===l)f+=0x64;else{if(k['startsWith'](l))f+=0x32;else k['includes'](l)&&(f+=0x19);}}return(a?.['name']||a?.['address']||a?.['m']!=null)&&f===0x0&&(f=-0x1),{'account':e,'score':f};})['filter'](({score:e})=>e>=0x0)['sort']((e,f)=>f['score']-e['score'])['map'](({account:e})=>e)),d['map'](e=>this['accountData'](e))['filter'](e=>e!==undefined);}return[];}async['suspend'](a){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']()||g['name']===a);if(e){const g=Date['now']();return e['suspended']=!![],e['name']=undefined,e['m']=undefined,e['updatedAt']=g,await b['put'](JSON['stringify'](d)),!![];}}return![];}async['suspend_many'](a){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']()||l['name']===j);k?(k['suspended']=!![],k['name']=undefined,k['m']=undefined,k['updatedAt']=g,d['success']['push'](i),h=!![]):d['failed']['push'](i);}h&&await b['put'](JSON['stringify'](e));}else d['failed']=[...a];return d;}async['resume'](a,b){b=this['name_resolve'](b),a=a['toLowerCase']();const c=await this['getStorage'](),d=await c['get']();if(d){const e=JSON['parse'](d);e['find'](h=>h['name']===b)&&W_ERROR(WErrors['IsValidName'],'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['updatedAt']=h,await c['put'](JSON['stringify'](e)),!![];}}return![];}async['faucet'](b,c){const d=await this['get_imp'](b);if(d)try{const e=await requestWowFromFaucetV2({'host':getFaucetHost(c),'recipient':d['address']});return e['coins_sent']||[];}catch(f){}return[];}async['sign_and_commit'](b,c,d){const e=await this['get_imp'](c);if(e){const f=Falcon512Keypair['fromSecretKey'](e['secret']);if(f){const g=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](d))});return g['signAndExecuteTransaction']({'transaction':b,'signer':f,'options':{'showObjectChanges':!![],'showEffects':!![]}});}}return undefined;}['balance']=async(b,c,d)=>{const e=await this['get'](c);b=b??GasTokenType;if(e){const f=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](d))});return f['getBalance']({'owner':e['address'],'coinType':b});}return undefined;};['coin']=async(b,c,d,e,f)=>{const g=await this['get'](e);b=b??GasTokenType;if(g){const h=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](f))});return h['getCoins']({'owner':g['address'],'coinType':b,'cursor':c,'limit':d});}return undefined;};['get_coin_object']=async(c,d,e,f,g)=>{const h=await this['get'](f);if(h){const j=BigInt(d),k=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](g))});if(j>=BigInt(0x0)){if(!e||isGasTokenType(e))return c['splitCoins'](c['gas'],[j]);else{const l=await k['getCoins']({'owner':h['address'],'coinType':e}),m=[],n=new Set();let o=BigInt(0x0);for(let p=0x0;p<l['data']['length'];++p){const q=l['data'][p]['coinObjectId'];if(n['has'](q))continue;n['add'](q),o+=BigInt(l['data'][p]['balance']),m['push'](q);if(o>=j)break;}if(m['length']===0x0)return undefined;if(m['length']===0x1)return c['splitCoins'](m[0x0],[j]);else{const s=m['pop']();return c['mergeCoins'](s,m),c['splitCoins'](s,[j]);}}}}return undefined;};['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);!h?W_ERROR(WErrors['InvalidParam'],'Invalid\x20coin\x20object:\x20'+g):f['push'](h);}return a['makeMoveVec']({'elements':f});};async['refund_coin'](a,b,c){const d=await this['get_address'](c);if(!d)W_ERROR(WErrors['InvalidParam'],'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)W_ERROR(WErrors['InvalidParam'],'Invalid\x20from\x20address\x20or\x20name\x20'+d);const h=g?.['address']??c;if(!h)W_ERROR(WErrors['InvalidParam'],'Invalid\x20to\x20address\x20or\x20name\x20'+c);const i=Falcon512Keypair['fromSecretKey'](f['secret']);if(i){const j=new Transaction(),k=await this['get_coin_object'](j,a,b,d,e);if(k){j['transferObjects']([k],h);const l=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](e))}),m=l['signAndExecuteTransaction']({'transaction':j,'signer':i,'options':{'showObjectChanges':!![]}});return m;}}return undefined;}['coinObject_with_balance']=async(b,c,d,e)=>{const f=await this['get_imp'](d);if(!f)return undefined;const g=Falcon512Keypair['fromSecretKey'](f['secret']);if(!g)return undefined;const h=new Transaction(),i=await this['get_coin_object'](h,b,c,d,e);if(i){h['transferObjects']([i],f['address']);const j=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](e))}),k=await j['signAndExecuteTransaction']({'transaction':h,'signer':g,'options':{'showObjectChanges':!![]}}),l=c??GasTokenType;return k?.['objectChanges']?.['find'](m=>m?.['type']==='created'&&(m?.['objectType'])['includes'](l))?.['objectId'];}return undefined;};async['sign'](a,b){const c=await this['get_imp'](a);!c?.['secret']&&W_ERROR(WErrors['InvalidParam'],'Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const d=Falcon512Keypair['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);!c?.['secret']&&W_ERROR(WErrors['InvalidParam'],'Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const d=Falcon512Keypair['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']()['toWPublicKey'](),'address':c['address']};}async['deriveX25519Identity'](a){const b=await this['get_imp'](a);!b?.['secret']&&W_ERROR(WErrors['InvalidParam'],'Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const c=decodeWowPrivateKey(b['secret']),d=c['secretKey'],e=Falcon512Keypair['fromSecretKey'](b['secret']),f=e['getPublicKey']()['toRawBytes'](),g=new TextEncoder()['encode']('WowokX25519IdentityDerivation'),h=sha256(d),i=hkdf(sha256,h,new Uint8Array(0x0),g,0x20);i[0x0]&=0xf8,i[0x1f]&=0x7f,i[0x1f]|=0x40;const j=x25519['getPublicKey'](i),k=j[0x0]<<0x8|j[0x1];return{'x25519KeyPair':{'publicKey':j,'privateKey':i},'falcon512KeyPair':{'publicKey':f,'privateKey':d},'registrationId':k===0x0?0x1:k};}async['set_messenger'](a,b){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'](k=>k['address']['toLowerCase']()===c['toLowerCase']()||k['name']===c);if(!h)return![];if(!b){const k=Date['now']();return h['m']=undefined,h['updatedAt']=k,await d['put'](JSON['stringify'](g)),!![];}!isValidName(b)&&W_ERROR(WErrors['IsValidName'],'Messenger\x20name\x20'+b+'\x20is\x20exceeds\x20max\x20'+MAX_NAME_LENGTH);const i=g['filter'](l=>l['m']!=null&&!l['suspended']&&l['address']!==h['address'])['length'];i>=MAX_MESSENGER_ACCOUNTS&&W_ERROR(WErrors['InvalidParam'],'Maximum\x20'+MAX_MESSENGER_ACCOUNTS+'\x20messenger\x20accounts\x20allowed,\x20current\x20count:\x20'+i);const j=Date['now']();return h['m']=b,h['updatedAt']=j,await d['put'](JSON['stringify'](g)),!![];}async['list_messenger_accounts'](){return this['list']({'hasMessenger':!![]});}async['count_messenger_accounts'](){const a=await this['getStorage'](),b=await a['get']();if(!b)return 0x0;const c=JSON['parse'](b);return c['filter'](e=>e['m']!=null&&!e['suspended'])['length'];}}
|
|
@@ -15,6 +15,12 @@ export interface ManyAccountOrMark_Address {
|
|
|
15
15
|
check_all_founded?: boolean;
|
|
16
16
|
}
|
|
17
17
|
export declare const GetAccountOrMark_Address: (entity?: AccountOrMark_Address | string) => Promise<string | undefined>;
|
|
18
|
+
export interface LocalNameByAddress {
|
|
19
|
+
account?: string;
|
|
20
|
+
local_mark?: string;
|
|
21
|
+
address: string;
|
|
22
|
+
}
|
|
23
|
+
export declare const GetLocalNamesByAddresses: (addresses: string[]) => Promise<LocalNameByAddress[]>;
|
|
18
24
|
export declare const GetManyAccountOrMark_Address: (entities: ManyAccountOrMark_Address) => Promise<string[]>;
|
|
19
25
|
export declare const query_local_mark_list: (filter: LocalMarkFilter | undefined | null) => Promise<MarkData[]>;
|
|
20
26
|
export declare const query_account_list: (filter?: AccountFilter) => Promise<AccountData[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{GasTokenType}from'../common.js';import{W_ERROR,WErrors}from'../exception.js';import{Account}from'./account.js';import{LocalInfo,LocalInfoNameDefault,LocalMark}from'./local.js';import{TokenInfo}from'./token.js';import{isValidWowAddress}from'../../utils/wow-types.js';import{ENTITY_LINKER_ADDRESS,ENTITY_REGISTRAR_ADDRESS}from'../common.js';export{Account,LocalInfo,LocalMark};export const GetAccountOrMark_Address=async a=>{if(!a)return await Account['Instance']()['get_address'](undefined);const b=typeof a==='string'?a:a['name_or_address'];if(!b)return await Account['Instance']()['get_address'](undefined);if(b['toLowerCase']()==='0xaaa')return ENTITY_LINKER_ADDRESS;if(b['toLowerCase']()==='0xaab')return ENTITY_REGISTRAR_ADDRESS;if(isValidWowAddress(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;}};export const GetManyAccountOrMark_Address=async a=>{const b=[];for(let c=0x0;c<a['entities']['length'];++c){const d=await GetAccountOrMark_Address(a['entities'][c]);!d&&a['check_all_founded']&&W_ERROR(WErrors['InvalidParam'],'entity\x20'+a['entities'][c]?.['name_or_address']+'\x20is\x20not\x20a\x20valid\x20address,\x20account\x20or\x20mark'),a['check_all_founded']&&!d&&W_ERROR(WErrors['InvalidParam'],'entity\x20'+a['entities'][c]?.['name_or_address']+'\x20is\x20not\x20a\x20valid\x20address,\x20account\x20or\x20mark'),d&&b['push'](d);}return b;};export const query_local_mark_list=async a=>{return await LocalMark['Instance']()['list'](a);};export const query_account_list=async a=>{return await Account['Instance']()['list'](a);};export const query_local_info_list=async a=>{return await LocalInfo['Instance']()['list'](a);};export const query_local_token_list=async a=>{return await TokenInfo['Instance']()['list'](a);};export const 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);}return undefined;};export const 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);}return undefined;};export const 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']);}return undefined;};export const 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']??GasTokenType;if(a?.['balance'])c['balance']=await Account['Instance']()['balance'](d,b['address'],a['network']);else a?.['coin']&&(c['coin']=await Account['Instance']()['coin'](d,a['coin']['cursor'],a['coin']['limit'],b['address'],a['network']));return c;};export const account_operation=async a=>{var b={};if(a['gen']!=null){const c=await Account['Instance']()['gen'](a['gen']?.['name'],a['gen']?.['replaceExistName'],a['gen']?.['m']);b['gen']={'address':c?.['address'],'name':c?.['name'],'m':c?.['m']};}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']});a['suspend']!=null&&(b['suspend']={'name_or_address':a['suspend']['name_or_address'],'success':await Account['Instance']()['suspend'](a['suspend']['name_or_address'])});a['resume']!=null&&(b['resume']={'address':a['resume']['address'],'name':a['resume']['name'],'success':await Account['Instance']()['resume'](a['resume']['address'],a['resume']['name'])});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'])});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:n,data:o,data_encoding:p}=a['signData'];let q=o;if(typeof o==='string'&&p)switch(p){case'base64':q=Uint8Array['from'](Buffer['from'](o,'base64'));break;case'hex':q=Uint8Array['from'](Buffer['from'](o['replace'](/^0x/,''),'hex'));break;case'utf8':default:q=o;break;}const r=await Account['Instance']()['signData'](n,q);b['signData']={'name_or_address':n,'signature':r['signature'],'publicKey':r['publicKey'],'address':r['address']};}if(a['messenger']!=null){const {name_or_account:s,m:t}=a['messenger'];await Account['Instance']()['set_messenger'](s,t),b['messenger']={'name_or_account':s,'m':t};}return b;};export const 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 a['remove']&&(b['remove']=await LocalMark['Instance']()['del'](a['remove']['names']));}return b;};export const 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 a['reset']&&await LocalInfo['Instance']()['reset_contents'](a['reset']['name'],a['reset']['contents']);}}return{'success':!![]};};export const fetch_token_info_operation=async a=>{return await TokenInfo['Instance']()['fetch'](a['tokenType'],a?.['alias'],a?.['network']);};export*from'./account.js';export*from'./config.js';export*from'./local.js';export*from'./token.js';export*from'./wip.js';
|
|
1
|
+
import{GasTokenType}from'../common.js';import{W_ERROR,WErrors}from'../exception.js';import{Account}from'./account.js';import{LocalInfo,LocalInfoNameDefault,LocalMark}from'./local.js';import{TokenInfo}from'./token.js';import{isValidWowAddress}from'../../utils/wow-types.js';import{ENTITY_LINKER_ADDRESS,ENTITY_REGISTRAR_ADDRESS}from'../common.js';export{Account,LocalInfo,LocalMark};export const GetAccountOrMark_Address=async a=>{if(!a)return await Account['Instance']()['get_address'](undefined);const b=typeof a==='string'?a:a['name_or_address'];if(!b)return await Account['Instance']()['get_address'](undefined);if(b['toLowerCase']()==='0xaaa')return ENTITY_LINKER_ADDRESS;if(b['toLowerCase']()==='0xaab')return ENTITY_REGISTRAR_ADDRESS;if(isValidWowAddress(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;}};export const 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}));};export const GetManyAccountOrMark_Address=async a=>{const b=[];for(let c=0x0;c<a['entities']['length'];++c){const d=await GetAccountOrMark_Address(a['entities'][c]);!d&&a['check_all_founded']&&W_ERROR(WErrors['InvalidParam'],'entity\x20'+a['entities'][c]?.['name_or_address']+'\x20is\x20not\x20a\x20valid\x20address,\x20account\x20or\x20mark'),a['check_all_founded']&&!d&&W_ERROR(WErrors['InvalidParam'],'entity\x20'+a['entities'][c]?.['name_or_address']+'\x20is\x20not\x20a\x20valid\x20address,\x20account\x20or\x20mark'),d&&b['push'](d);}return b;};export const query_local_mark_list=async a=>{return await LocalMark['Instance']()['list'](a);};export const query_account_list=async a=>{return await Account['Instance']()['list'](a);};export const query_local_info_list=async a=>{return await LocalInfo['Instance']()['list'](a);};export const query_local_token_list=async a=>{return await TokenInfo['Instance']()['list'](a);};export const 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);}return undefined;};export const 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);}return undefined;};export const 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']);}return undefined;};export const 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']??GasTokenType;if(a?.['balance'])c['balance']=await Account['Instance']()['balance'](d,b['address'],a['network']);else a?.['coin']&&(c['coin']=await Account['Instance']()['coin'](d,a['coin']['cursor'],a['coin']['limit'],b['address'],a['network']));return c;};export const account_operation=async a=>{var b={};if(a['gen']!=null){const c=await Account['Instance']()['gen'](a['gen']?.['name'],a['gen']?.['replaceExistName'],a['gen']?.['m']);b['gen']={'address':c?.['address'],'name':c?.['name'],'m':c?.['m']};}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']});a['suspend']!=null&&(b['suspend']={'name_or_address':a['suspend']['name_or_address'],'success':await Account['Instance']()['suspend'](a['suspend']['name_or_address'])});a['resume']!=null&&(b['resume']={'address':a['resume']['address'],'name':a['resume']['name'],'success':await Account['Instance']()['resume'](a['resume']['address'],a['resume']['name'])});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'])});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:n,data:o,data_encoding:p}=a['signData'];let q=o;if(typeof o==='string'&&p)switch(p){case'base64':q=Uint8Array['from'](Buffer['from'](o,'base64'));break;case'hex':q=Uint8Array['from'](Buffer['from'](o['replace'](/^0x/,''),'hex'));break;case'utf8':default:q=o;break;}const r=await Account['Instance']()['signData'](n,q);b['signData']={'name_or_address':n,'signature':r['signature'],'publicKey':r['publicKey'],'address':r['address']};}if(a['messenger']!=null){const {name_or_account:s,m:t}=a['messenger'];await Account['Instance']()['set_messenger'](s,t),b['messenger']={'name_or_account':s,'m':t};}return b;};export const 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 a['remove']&&(b['remove']=await LocalMark['Instance']()['del'](a['remove']['names']));}return b;};export const 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 a['reset']&&await LocalInfo['Instance']()['reset_contents'](a['reset']['name'],a['reset']['contents']);}}return{'success':!![]};};export const fetch_token_info_operation=async a=>{return await TokenInfo['Instance']()['fetch'](a['tokenType'],a?.['alias'],a?.['network']);};export*from'./account.js';export*from'./config.js';export*from'./local.js';export*from'./token.js';export*from'./wip.js';
|
|
@@ -54,6 +54,7 @@ export declare class Account {
|
|
|
54
54
|
get_many_address(address_or_names: (string | null | undefined)[]): Promise<(string | undefined)[]>;
|
|
55
55
|
private get_imp;
|
|
56
56
|
private name_resolve;
|
|
57
|
+
get_many(address_or_names: (string | null | undefined)[]): Promise<(AccountData | undefined)[]>;
|
|
57
58
|
private get_many_imp;
|
|
58
59
|
swap_name(name1: string | null | undefined, name2: string | null | undefined): Promise<boolean>;
|
|
59
60
|
rename(name_or_address: string | null | undefined, new_name: string): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Falcon512Keypair}from'../../keypairs/falcon512/index.js';import{W_ERROR,WErrors}from'../exception.js';import{GasTokenType,isGasTokenType,isValidName,MAX_NAME_LENGTH}from'../common.js';import{getFaucetHost,requestWowFromFaucetV2}from'../../faucet/index.js';import{Transaction}from'../../transactions/index.js';import{getFullnodeUrl}from'../../client/network.js';import{WowClient}from'../../client/index.js';import{Config}from'./config.js';import{SQLiteAccountStorage}from'./storage.js';import{isValidWowAddress}from'../../utils/wow-types.js';import{decodeWowPrivateKey}from'../../cryptography/keypair.js';import{hkdf}from'@noble/hashes/hkdf';import{sha256}from'@noble/hashes/sha256';import{x25519}from'@noble/curves/ed25519';export const DEFAULT_ACCOUNT_NAME='';export const MAX_MESSENGER_ACCOUNTS=0x64;export class Account{static ['_instance'];static ['storage'];['setStorage'](a){Account['storage']=a;}async['getStorage'](){return!Account['storage']&&(Account['storage']=new SQLiteAccountStorage()),Account['storage'];}static['Instance'](){return!Account['_instance']&&(Account['_instance']=new Account()),Account['_instance'];}['accountData'](a){if(!a||!a['secret'])return undefined;const b=Falcon512Keypair['fromSecretKey'](a['secret']);return a['pubkey']=b['getPublicKey']()['toWPublicKey'](),a['secret']=undefined,a;}async['gen'](a,b,c){a=this['name_resolve'](a);a&&!isValidName(a)&&W_ERROR(WErrors['IsValidName'],'Name\x20'+a+'\x20is\x20exceeds\x20max\x20'+MAX_NAME_LENGTH);c&&!isValidName(c)&&W_ERROR(WErrors['IsValidName'],'Messenger\x20name\x20'+c+'\x20is\x20exceeds\x20max\x20'+MAX_NAME_LENGTH);const d=Falcon512Keypair['generate']()['getSecretKey'](),e=Falcon512Keypair['fromSecretKey'](d)['getPublicKey']()['toWAddress'](),f=Date['now'](),g={'name':a,'address':e,'secret':d,'m':undefined,'createdAt':f,'updatedAt':f},h=await this['getStorage'](),i=await h['get']();if(i){const j=JSON['parse'](i),k=j['findIndex'](l=>l['name']===a);k!==-0x1?b?(j[k]['name']=undefined,j['push'](g),await h['put'](JSON['stringify'](j))):W_ERROR(WErrors['AccountNameExist'],'Name\x20'+(a||'')+'\x20already\x20exist'):await h['put'](JSON['stringify']([...j,g]));}else await h['put'](JSON['stringify']([g]));if(c){const l=await this['getStorage'](),n=await l['get']();if(n){const q=JSON['parse'](n),r=q['filter'](s=>s['m']!=null)['length'];r>=MAX_MESSENGER_ACCOUNTS&&W_ERROR(WErrors['InvalidParam'],'Maximum\x20'+MAX_MESSENGER_ACCOUNTS+'\x20messenger\x20accounts\x20allowed,\x20current\x20count:\x20'+r);}g['m']=c;const o=await this['getStorage'](),p=await o['get']();if(p){const s=JSON['parse'](p),t=s['find'](u=>u['address']===e);t&&(t['m']=c,t['updatedAt']=Date['now'](),await o['put'](JSON['stringify'](s)));}}return this['accountData'](g);}async['default'](){return this['accountData'](await this['get_imp'](DEFAULT_ACCOUNT_NAME));}async['get'](a,b){if(!b)return this['accountData'](await this['get_imp'](a));return this['gen'](a);}async['get_address'](a){if(a&&isValidWowAddress(a))return a['toLowerCase']();return(await this['get_imp'](a))?.['address'];}async['get_many_address'](a){const b=await this['getStorage'](),c=await b['get']();if(c){const d=JSON['parse'](c);return a['map'](e=>{if(e&&isValidWowAddress(e))return e['toLowerCase']();const f=this['name_resolve'](e);return d['find'](g=>g['address']['toLowerCase']()===f['toLowerCase']()||g['name']===f)?.['address'];});}return a['map'](e=>e&&isValidWowAddress(e)?e['toLowerCase']():undefined);}async['get_imp'](a){a=this['name_resolve'](a);const b=await this['getStorage'](),c=await b['get']();if(c)return JSON['parse'](c)['find'](e=>e['name']===a||e['address']['toLowerCase']()===a['toLowerCase']());return undefined;}['name_resolve'](a){return a||DEFAULT_ACCOUNT_NAME;}async['get_many_imp'](a){const b=await this['getStorage'](),c=await b['get']();if(c){const d=JSON['parse'](c);return a['map'](e=>{const f=this['name_resolve'](e);return d['find'](g=>g['address']['toLowerCase']()===f['toLowerCase']()||g['name']===f);});}return a['map'](e=>undefined);}async['swap_name'](a,b){a=this['name_resolve'](a),b=this['name_resolve'](b);if(a===b)return!![];a&&!isValidName(a)&&W_ERROR(WErrors['IsValidName'],'Name\x20'+(a||'')+'\x20is\x20exceeds\x20max\x20'+MAX_NAME_LENGTH);b&&!isValidName(b)&&W_ERROR(WErrors['IsValidName'],'Name\x20'+(b||'')+'\x20is\x20exceeds\x20max\x20'+MAX_NAME_LENGTH);const c=await this['getStorage'](),d=await c['get']();if(!d)return![];const e=JSON['parse'](d),f=e['find'](i=>i['name']===a),g=e['find'](i=>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){b&&!isValidName(b)&&W_ERROR(WErrors['IsValidName'],'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);g['find'](j=>j['name']===b)&&W_ERROR(WErrors['IsValidName'],'New\x20name\x20\x22'+(b||'')+'\x22\x20already\x20exists');const h=g['find'](j=>j['name']===c||j['address']['toLowerCase']()===c['toLowerCase']());!h&&W_ERROR(WErrors['AccountNotFound'],'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){const b=await this['getStorage'](),c=await b['get']();if(c){let d=JSON['parse'](c);return a?.['suspended']!==undefined?d=d['filter'](e=>a['suspended']?e['suspended']===!![]:!e['suspended']):d=d['filter'](e=>!e['suspended']),a?.['hasMessenger']!==undefined&&(d=d['filter'](e=>a['hasMessenger']?e['m']!=null:e['m']==null)),a?.['m']!=null&&(d=d['filter'](e=>e['m']!=null)),a?.['createdAt']&&(a['createdAt']['gte']!==undefined&&(d=d['filter'](e=>e['createdAt']&&e['createdAt']>=a['createdAt']['gte'])),a['createdAt']['lte']!==undefined&&(d=d['filter'](e=>e['createdAt']&&e['createdAt']<=a['createdAt']['lte']))),a?.['updatedAt']&&(a['updatedAt']['gte']!==undefined&&(d=d['filter'](e=>e['updatedAt']&&e['updatedAt']>=a['updatedAt']['gte'])),a['updatedAt']['lte']!==undefined&&(d=d['filter'](e=>e['updatedAt']&&e['updatedAt']<=a['updatedAt']['lte']))),(a?.['name']!=null||a?.['address']||a?.['m']!=null)&&(d=d['map'](e=>{let f=0x0;if(a?.['name']!=null){const g=e['name']?.['toLowerCase']()||'',h=a['name']['toLowerCase']();if(g===h)f+=0x64;else{if(g['startsWith'](h))f+=0x32;else g['includes'](h)&&(f+=0x19);}}if(a?.['address']){const i=e['address']['toLowerCase'](),j=a['address']['toLowerCase']();if(i===j)f+=0x64;else{if(i['startsWith'](j))f+=0x32;else i['includes'](j)&&(f+=0x19);}}if(a?.['m']!=null&&e['m']!=null){const k=e['m']['toLowerCase'](),l=a['m']['toLowerCase']();if(k===l)f+=0x64;else{if(k['startsWith'](l))f+=0x32;else k['includes'](l)&&(f+=0x19);}}return(a?.['name']||a?.['address']||a?.['m']!=null)&&f===0x0&&(f=-0x1),{'account':e,'score':f};})['filter'](({score:e})=>e>=0x0)['sort']((e,f)=>f['score']-e['score'])['map'](({account:e})=>e)),d['map'](e=>this['accountData'](e))['filter'](e=>e!==undefined);}return[];}async['suspend'](a){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']()||g['name']===a);if(e){const g=Date['now']();return e['suspended']=!![],e['name']=undefined,e['m']=undefined,e['updatedAt']=g,await b['put'](JSON['stringify'](d)),!![];}}return![];}async['suspend_many'](a){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']()||l['name']===j);k?(k['suspended']=!![],k['name']=undefined,k['m']=undefined,k['updatedAt']=g,d['success']['push'](i),h=!![]):d['failed']['push'](i);}h&&await b['put'](JSON['stringify'](e));}else d['failed']=[...a];return d;}async['resume'](a,b){b=this['name_resolve'](b),a=a['toLowerCase']();const c=await this['getStorage'](),d=await c['get']();if(d){const e=JSON['parse'](d);e['find'](h=>h['name']===b)&&W_ERROR(WErrors['IsValidName'],'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['updatedAt']=h,await c['put'](JSON['stringify'](e)),!![];}}return![];}async['faucet'](b,c){const d=await this['get_imp'](b);if(d)try{const e=await requestWowFromFaucetV2({'host':getFaucetHost(c),'recipient':d['address']});return e['coins_sent']||[];}catch(f){}return[];}async['sign_and_commit'](b,c,d){const e=await this['get_imp'](c);if(e){const f=Falcon512Keypair['fromSecretKey'](e['secret']);if(f){const g=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](d))});return g['signAndExecuteTransaction']({'transaction':b,'signer':f,'options':{'showObjectChanges':!![],'showEffects':!![]}});}}return undefined;}['balance']=async(b,c,d)=>{const e=await this['get'](c);b=b??GasTokenType;if(e){const f=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](d))});return f['getBalance']({'owner':e['address'],'coinType':b});}return undefined;};['coin']=async(b,c,d,e,f)=>{const g=await this['get'](e);b=b??GasTokenType;if(g){const h=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](f))});return h['getCoins']({'owner':g['address'],'coinType':b,'cursor':c,'limit':d});}return undefined;};['get_coin_object']=async(c,d,e,f,g)=>{const h=await this['get'](f);if(h){const j=BigInt(d),k=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](g))});if(j>=BigInt(0x0)){if(!e||isGasTokenType(e))return c['splitCoins'](c['gas'],[j]);else{const l=await k['getCoins']({'owner':h['address'],'coinType':e}),m=[],n=new Set();let o=BigInt(0x0);for(let p=0x0;p<l['data']['length'];++p){const q=l['data'][p]['coinObjectId'];if(n['has'](q))continue;n['add'](q),o+=BigInt(l['data'][p]['balance']),m['push'](q);if(o>=j)break;}if(m['length']===0x0)return undefined;if(m['length']===0x1)return c['splitCoins'](m[0x0],[j]);else{const s=m['pop']();return c['mergeCoins'](s,m),c['splitCoins'](s,[j]);}}}}return undefined;};['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);!h?W_ERROR(WErrors['InvalidParam'],'Invalid\x20coin\x20object:\x20'+g):f['push'](h);}return a['makeMoveVec']({'elements':f});};async['refund_coin'](a,b,c){const d=await this['get_address'](c);if(!d)W_ERROR(WErrors['InvalidParam'],'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)W_ERROR(WErrors['InvalidParam'],'Invalid\x20from\x20address\x20or\x20name\x20'+d);const h=g?.['address']??c;if(!h)W_ERROR(WErrors['InvalidParam'],'Invalid\x20to\x20address\x20or\x20name\x20'+c);const i=Falcon512Keypair['fromSecretKey'](f['secret']);if(i){const j=new Transaction(),k=await this['get_coin_object'](j,a,b,d,e);if(k){j['transferObjects']([k],h);const l=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](e))}),m=l['signAndExecuteTransaction']({'transaction':j,'signer':i,'options':{'showObjectChanges':!![]}});return m;}}return undefined;}['coinObject_with_balance']=async(b,c,d,e)=>{const f=await this['get_imp'](d);if(!f)return undefined;const g=Falcon512Keypair['fromSecretKey'](f['secret']);if(!g)return undefined;const h=new Transaction(),i=await this['get_coin_object'](h,b,c,d,e);if(i){h['transferObjects']([i],f['address']);const j=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](e))}),k=await j['signAndExecuteTransaction']({'transaction':h,'signer':g,'options':{'showObjectChanges':!![]}}),l=c??GasTokenType;return k?.['objectChanges']?.['find'](m=>m?.['type']==='created'&&(m?.['objectType'])['includes'](l))?.['objectId'];}return undefined;};async['sign'](a,b){const c=await this['get_imp'](a);!c?.['secret']&&W_ERROR(WErrors['InvalidParam'],'Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const d=Falcon512Keypair['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);!c?.['secret']&&W_ERROR(WErrors['InvalidParam'],'Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const d=Falcon512Keypair['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']()['toWPublicKey'](),'address':c['address']};}async['deriveX25519Identity'](a){const b=await this['get_imp'](a);!b?.['secret']&&W_ERROR(WErrors['InvalidParam'],'Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const c=decodeWowPrivateKey(b['secret']),d=c['secretKey'],e=Falcon512Keypair['fromSecretKey'](b['secret']),f=e['getPublicKey']()['toRawBytes'](),g=new TextEncoder()['encode']('WowokX25519IdentityDerivation'),h=sha256(d),i=hkdf(sha256,h,new Uint8Array(0x0),g,0x20);i[0x0]&=0xf8,i[0x1f]&=0x7f,i[0x1f]|=0x40;const j=x25519['getPublicKey'](i),k=j[0x0]<<0x8|j[0x1];return{'x25519KeyPair':{'publicKey':j,'privateKey':i},'falcon512KeyPair':{'publicKey':f,'privateKey':d},'registrationId':k===0x0?0x1:k};}async['set_messenger'](a,b){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'](k=>k['address']['toLowerCase']()===c['toLowerCase']()||k['name']===c);if(!h)return![];if(!b){const k=Date['now']();return h['m']=undefined,h['updatedAt']=k,await d['put'](JSON['stringify'](g)),!![];}!isValidName(b)&&W_ERROR(WErrors['IsValidName'],'Messenger\x20name\x20'+b+'\x20is\x20exceeds\x20max\x20'+MAX_NAME_LENGTH);const i=g['filter'](l=>l['m']!=null&&!l['suspended']&&l['address']!==h['address'])['length'];i>=MAX_MESSENGER_ACCOUNTS&&W_ERROR(WErrors['InvalidParam'],'Maximum\x20'+MAX_MESSENGER_ACCOUNTS+'\x20messenger\x20accounts\x20allowed,\x20current\x20count:\x20'+i);const j=Date['now']();return h['m']=b,h['updatedAt']=j,await d['put'](JSON['stringify'](g)),!![];}async['list_messenger_accounts'](){return this['list']({'hasMessenger':!![]});}async['count_messenger_accounts'](){const a=await this['getStorage'](),b=await a['get']();if(!b)return 0x0;const c=JSON['parse'](b);return c['filter'](e=>e['m']!=null&&!e['suspended'])['length'];}}
|
|
1
|
+
import{Falcon512Keypair}from'../../keypairs/falcon512/index.js';import{W_ERROR,WErrors}from'../exception.js';import{GasTokenType,isGasTokenType,isValidName,MAX_NAME_LENGTH}from'../common.js';import{getFaucetHost,requestWowFromFaucetV2}from'../../faucet/index.js';import{Transaction}from'../../transactions/index.js';import{getFullnodeUrl}from'../../client/network.js';import{WowClient}from'../../client/index.js';import{Config}from'./config.js';import{SQLiteAccountStorage}from'./storage.js';import{isValidWowAddress}from'../../utils/wow-types.js';import{decodeWowPrivateKey}from'../../cryptography/keypair.js';import{hkdf}from'@noble/hashes/hkdf';import{sha256}from'@noble/hashes/sha256';import{x25519}from'@noble/curves/ed25519';export const DEFAULT_ACCOUNT_NAME='';export const MAX_MESSENGER_ACCOUNTS=0x64;export class Account{static ['_instance'];static ['storage'];['setStorage'](a){Account['storage']=a;}async['getStorage'](){return!Account['storage']&&(Account['storage']=new SQLiteAccountStorage()),Account['storage'];}static['Instance'](){return!Account['_instance']&&(Account['_instance']=new Account()),Account['_instance'];}['accountData'](a){if(!a||!a['secret'])return undefined;const b=Falcon512Keypair['fromSecretKey'](a['secret']);return a['pubkey']=b['getPublicKey']()['toWPublicKey'](),a['secret']=undefined,a;}async['gen'](a,b,c){a=this['name_resolve'](a);a&&!isValidName(a)&&W_ERROR(WErrors['IsValidName'],'Name\x20'+a+'\x20is\x20exceeds\x20max\x20'+MAX_NAME_LENGTH);c&&!isValidName(c)&&W_ERROR(WErrors['IsValidName'],'Messenger\x20name\x20'+c+'\x20is\x20exceeds\x20max\x20'+MAX_NAME_LENGTH);const d=Falcon512Keypair['generate']()['getSecretKey'](),e=Falcon512Keypair['fromSecretKey'](d)['getPublicKey']()['toWAddress'](),f=Date['now'](),g={'name':a,'address':e,'secret':d,'m':undefined,'createdAt':f,'updatedAt':f},h=await this['getStorage'](),i=await h['get']();if(i){const j=JSON['parse'](i),k=j['findIndex'](l=>l['name']===a);k!==-0x1?b?(j[k]['name']=undefined,j['push'](g),await h['put'](JSON['stringify'](j))):W_ERROR(WErrors['AccountNameExist'],'Name\x20'+(a||'')+'\x20already\x20exist'):await h['put'](JSON['stringify']([...j,g]));}else await h['put'](JSON['stringify']([g]));if(c){const l=await this['getStorage'](),n=await l['get']();if(n){const q=JSON['parse'](n),r=q['filter'](s=>s['m']!=null)['length'];r>=MAX_MESSENGER_ACCOUNTS&&W_ERROR(WErrors['InvalidParam'],'Maximum\x20'+MAX_MESSENGER_ACCOUNTS+'\x20messenger\x20accounts\x20allowed,\x20current\x20count:\x20'+r);}g['m']=c;const o=await this['getStorage'](),p=await o['get']();if(p){const s=JSON['parse'](p),t=s['find'](u=>u['address']===e);t&&(t['m']=c,t['updatedAt']=Date['now'](),await o['put'](JSON['stringify'](s)));}}return this['accountData'](g);}async['default'](){return this['accountData'](await this['get_imp'](DEFAULT_ACCOUNT_NAME));}async['get'](a,b){if(!b)return this['accountData'](await this['get_imp'](a));return this['gen'](a);}async['get_address'](a){if(a&&isValidWowAddress(a))return a['toLowerCase']();return(await this['get_imp'](a))?.['address'];}async['get_many_address'](a){const b=await this['getStorage'](),c=await b['get']();if(c){const d=JSON['parse'](c);return a['map'](e=>{if(e&&isValidWowAddress(e))return e['toLowerCase']();const f=this['name_resolve'](e);return d['find'](g=>g['address']['toLowerCase']()===f['toLowerCase']()||g['name']===f)?.['address'];});}return a['map'](e=>e&&isValidWowAddress(e)?e['toLowerCase']():undefined);}async['get_imp'](a){a=this['name_resolve'](a);const b=await this['getStorage'](),c=await b['get']();if(c)return JSON['parse'](c)['find'](e=>e['name']===a||e['address']['toLowerCase']()===a['toLowerCase']());return undefined;}['name_resolve'](a){return a||DEFAULT_ACCOUNT_NAME;}async['get_many'](a){return this['get_many_imp'](a);}async['get_many_imp'](a){const b=await this['getStorage'](),c=await b['get']();if(c){const d=JSON['parse'](c);return a['map'](e=>{const f=this['name_resolve'](e);return d['find'](g=>g['address']['toLowerCase']()===f['toLowerCase']()||g['name']===f);});}return a['map'](e=>undefined);}async['swap_name'](a,b){a=this['name_resolve'](a),b=this['name_resolve'](b);if(a===b)return!![];a&&!isValidName(a)&&W_ERROR(WErrors['IsValidName'],'Name\x20'+(a||'')+'\x20is\x20exceeds\x20max\x20'+MAX_NAME_LENGTH);b&&!isValidName(b)&&W_ERROR(WErrors['IsValidName'],'Name\x20'+(b||'')+'\x20is\x20exceeds\x20max\x20'+MAX_NAME_LENGTH);const c=await this['getStorage'](),d=await c['get']();if(!d)return![];const e=JSON['parse'](d),f=e['find'](i=>i['name']===a),g=e['find'](i=>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){b&&!isValidName(b)&&W_ERROR(WErrors['IsValidName'],'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);g['find'](j=>j['name']===b)&&W_ERROR(WErrors['IsValidName'],'New\x20name\x20\x22'+(b||'')+'\x22\x20already\x20exists');const h=g['find'](j=>j['name']===c||j['address']['toLowerCase']()===c['toLowerCase']());!h&&W_ERROR(WErrors['AccountNotFound'],'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){const b=await this['getStorage'](),c=await b['get']();if(c){let d=JSON['parse'](c);return a?.['suspended']!==undefined?d=d['filter'](e=>a['suspended']?e['suspended']===!![]:!e['suspended']):d=d['filter'](e=>!e['suspended']),a?.['hasMessenger']!==undefined&&(d=d['filter'](e=>a['hasMessenger']?e['m']!=null:e['m']==null)),a?.['m']!=null&&(d=d['filter'](e=>e['m']!=null)),a?.['createdAt']&&(a['createdAt']['gte']!==undefined&&(d=d['filter'](e=>e['createdAt']&&e['createdAt']>=a['createdAt']['gte'])),a['createdAt']['lte']!==undefined&&(d=d['filter'](e=>e['createdAt']&&e['createdAt']<=a['createdAt']['lte']))),a?.['updatedAt']&&(a['updatedAt']['gte']!==undefined&&(d=d['filter'](e=>e['updatedAt']&&e['updatedAt']>=a['updatedAt']['gte'])),a['updatedAt']['lte']!==undefined&&(d=d['filter'](e=>e['updatedAt']&&e['updatedAt']<=a['updatedAt']['lte']))),(a?.['name']!=null||a?.['address']||a?.['m']!=null)&&(d=d['map'](e=>{let f=0x0;if(a?.['name']!=null){const g=e['name']?.['toLowerCase']()||'',h=a['name']['toLowerCase']();if(g===h)f+=0x64;else{if(g['startsWith'](h))f+=0x32;else g['includes'](h)&&(f+=0x19);}}if(a?.['address']){const i=e['address']['toLowerCase'](),j=a['address']['toLowerCase']();if(i===j)f+=0x64;else{if(i['startsWith'](j))f+=0x32;else i['includes'](j)&&(f+=0x19);}}if(a?.['m']!=null&&e['m']!=null){const k=e['m']['toLowerCase'](),l=a['m']['toLowerCase']();if(k===l)f+=0x64;else{if(k['startsWith'](l))f+=0x32;else k['includes'](l)&&(f+=0x19);}}return(a?.['name']||a?.['address']||a?.['m']!=null)&&f===0x0&&(f=-0x1),{'account':e,'score':f};})['filter'](({score:e})=>e>=0x0)['sort']((e,f)=>f['score']-e['score'])['map'](({account:e})=>e)),d['map'](e=>this['accountData'](e))['filter'](e=>e!==undefined);}return[];}async['suspend'](a){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']()||g['name']===a);if(e){const g=Date['now']();return e['suspended']=!![],e['name']=undefined,e['m']=undefined,e['updatedAt']=g,await b['put'](JSON['stringify'](d)),!![];}}return![];}async['suspend_many'](a){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']()||l['name']===j);k?(k['suspended']=!![],k['name']=undefined,k['m']=undefined,k['updatedAt']=g,d['success']['push'](i),h=!![]):d['failed']['push'](i);}h&&await b['put'](JSON['stringify'](e));}else d['failed']=[...a];return d;}async['resume'](a,b){b=this['name_resolve'](b),a=a['toLowerCase']();const c=await this['getStorage'](),d=await c['get']();if(d){const e=JSON['parse'](d);e['find'](h=>h['name']===b)&&W_ERROR(WErrors['IsValidName'],'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['updatedAt']=h,await c['put'](JSON['stringify'](e)),!![];}}return![];}async['faucet'](b,c){const d=await this['get_imp'](b);if(d)try{const e=await requestWowFromFaucetV2({'host':getFaucetHost(c),'recipient':d['address']});return e['coins_sent']||[];}catch(f){}return[];}async['sign_and_commit'](b,c,d){const e=await this['get_imp'](c);if(e){const f=Falcon512Keypair['fromSecretKey'](e['secret']);if(f){const g=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](d))});return g['signAndExecuteTransaction']({'transaction':b,'signer':f,'options':{'showObjectChanges':!![],'showEffects':!![]}});}}return undefined;}['balance']=async(b,c,d)=>{const e=await this['get'](c);b=b??GasTokenType;if(e){const f=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](d))});return f['getBalance']({'owner':e['address'],'coinType':b});}return undefined;};['coin']=async(b,c,d,e,f)=>{const g=await this['get'](e);b=b??GasTokenType;if(g){const h=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](f))});return h['getCoins']({'owner':g['address'],'coinType':b,'cursor':c,'limit':d});}return undefined;};['get_coin_object']=async(c,d,e,f,g)=>{const h=await this['get'](f);if(h){const j=BigInt(d),k=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](g))});if(j>=BigInt(0x0)){if(!e||isGasTokenType(e))return c['splitCoins'](c['gas'],[j]);else{const l=await k['getCoins']({'owner':h['address'],'coinType':e}),m=[],n=new Set();let o=BigInt(0x0);for(let p=0x0;p<l['data']['length'];++p){const q=l['data'][p]['coinObjectId'];if(n['has'](q))continue;n['add'](q),o+=BigInt(l['data'][p]['balance']),m['push'](q);if(o>=j)break;}if(m['length']===0x0)return undefined;if(m['length']===0x1)return c['splitCoins'](m[0x0],[j]);else{const s=m['pop']();return c['mergeCoins'](s,m),c['splitCoins'](s,[j]);}}}}return undefined;};['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);!h?W_ERROR(WErrors['InvalidParam'],'Invalid\x20coin\x20object:\x20'+g):f['push'](h);}return a['makeMoveVec']({'elements':f});};async['refund_coin'](a,b,c){const d=await this['get_address'](c);if(!d)W_ERROR(WErrors['InvalidParam'],'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)W_ERROR(WErrors['InvalidParam'],'Invalid\x20from\x20address\x20or\x20name\x20'+d);const h=g?.['address']??c;if(!h)W_ERROR(WErrors['InvalidParam'],'Invalid\x20to\x20address\x20or\x20name\x20'+c);const i=Falcon512Keypair['fromSecretKey'](f['secret']);if(i){const j=new Transaction(),k=await this['get_coin_object'](j,a,b,d,e);if(k){j['transferObjects']([k],h);const l=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](e))}),m=l['signAndExecuteTransaction']({'transaction':j,'signer':i,'options':{'showObjectChanges':!![]}});return m;}}return undefined;}['coinObject_with_balance']=async(b,c,d,e)=>{const f=await this['get_imp'](d);if(!f)return undefined;const g=Falcon512Keypair['fromSecretKey'](f['secret']);if(!g)return undefined;const h=new Transaction(),i=await this['get_coin_object'](h,b,c,d,e);if(i){h['transferObjects']([i],f['address']);const j=new WowClient({'url':getFullnodeUrl(await Config['Instance']()['network_get'](e))}),k=await j['signAndExecuteTransaction']({'transaction':h,'signer':g,'options':{'showObjectChanges':!![]}}),l=c??GasTokenType;return k?.['objectChanges']?.['find'](m=>m?.['type']==='created'&&(m?.['objectType'])['includes'](l))?.['objectId'];}return undefined;};async['sign'](a,b){const c=await this['get_imp'](a);!c?.['secret']&&W_ERROR(WErrors['InvalidParam'],'Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const d=Falcon512Keypair['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);!c?.['secret']&&W_ERROR(WErrors['InvalidParam'],'Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const d=Falcon512Keypair['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']()['toWPublicKey'](),'address':c['address']};}async['deriveX25519Identity'](a){const b=await this['get_imp'](a);!b?.['secret']&&W_ERROR(WErrors['InvalidParam'],'Account\x20not\x20found\x20or\x20no\x20secret\x20key:\x20'+a);const c=decodeWowPrivateKey(b['secret']),d=c['secretKey'],e=Falcon512Keypair['fromSecretKey'](b['secret']),f=e['getPublicKey']()['toRawBytes'](),g=new TextEncoder()['encode']('WowokX25519IdentityDerivation'),h=sha256(d),i=hkdf(sha256,h,new Uint8Array(0x0),g,0x20);i[0x0]&=0xf8,i[0x1f]&=0x7f,i[0x1f]|=0x40;const j=x25519['getPublicKey'](i),k=j[0x0]<<0x8|j[0x1];return{'x25519KeyPair':{'publicKey':j,'privateKey':i},'falcon512KeyPair':{'publicKey':f,'privateKey':d},'registrationId':k===0x0?0x1:k};}async['set_messenger'](a,b){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'](k=>k['address']['toLowerCase']()===c['toLowerCase']()||k['name']===c);if(!h)return![];if(!b){const k=Date['now']();return h['m']=undefined,h['updatedAt']=k,await d['put'](JSON['stringify'](g)),!![];}!isValidName(b)&&W_ERROR(WErrors['IsValidName'],'Messenger\x20name\x20'+b+'\x20is\x20exceeds\x20max\x20'+MAX_NAME_LENGTH);const i=g['filter'](l=>l['m']!=null&&!l['suspended']&&l['address']!==h['address'])['length'];i>=MAX_MESSENGER_ACCOUNTS&&W_ERROR(WErrors['InvalidParam'],'Maximum\x20'+MAX_MESSENGER_ACCOUNTS+'\x20messenger\x20accounts\x20allowed,\x20current\x20count:\x20'+i);const j=Date['now']();return h['m']=b,h['updatedAt']=j,await d['put'](JSON['stringify'](g)),!![];}async['list_messenger_accounts'](){return this['list']({'hasMessenger':!![]});}async['count_messenger_accounts'](){const a=await this['getStorage'](),b=await a['get']();if(!b)return 0x0;const c=JSON['parse'](b);return c['filter'](e=>e['m']!=null&&!e['suspended'])['length'];}}
|
|
@@ -15,6 +15,12 @@ export interface ManyAccountOrMark_Address {
|
|
|
15
15
|
check_all_founded?: boolean;
|
|
16
16
|
}
|
|
17
17
|
export declare const GetAccountOrMark_Address: (entity?: AccountOrMark_Address | string) => Promise<string | undefined>;
|
|
18
|
+
export interface LocalNameByAddress {
|
|
19
|
+
account?: string;
|
|
20
|
+
local_mark?: string;
|
|
21
|
+
address: string;
|
|
22
|
+
}
|
|
23
|
+
export declare const GetLocalNamesByAddresses: (addresses: string[]) => Promise<LocalNameByAddress[]>;
|
|
18
24
|
export declare const GetManyAccountOrMark_Address: (entities: ManyAccountOrMark_Address) => Promise<string[]>;
|
|
19
25
|
export declare const query_local_mark_list: (filter: LocalMarkFilter | undefined | null) => Promise<MarkData[]>;
|
|
20
26
|
export declare const query_account_list: (filter?: AccountFilter) => Promise<AccountData[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{GasTokenType}from'../common.js';import{W_ERROR,WErrors}from'../exception.js';import{Account}from'./account.js';import{LocalInfo,LocalInfoNameDefault,LocalMark}from'./local.js';import{TokenInfo}from'./token.js';import{isValidWowAddress}from'../../utils/wow-types.js';import{ENTITY_LINKER_ADDRESS,ENTITY_REGISTRAR_ADDRESS}from'../common.js';export{Account,LocalInfo,LocalMark};export const GetAccountOrMark_Address=async a=>{if(!a)return await Account['Instance']()['get_address'](undefined);const b=typeof a==='string'?a:a['name_or_address'];if(!b)return await Account['Instance']()['get_address'](undefined);if(b['toLowerCase']()==='0xaaa')return ENTITY_LINKER_ADDRESS;if(b['toLowerCase']()==='0xaab')return ENTITY_REGISTRAR_ADDRESS;if(isValidWowAddress(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;}};export const GetManyAccountOrMark_Address=async a=>{const b=[];for(let c=0x0;c<a['entities']['length'];++c){const d=await GetAccountOrMark_Address(a['entities'][c]);!d&&a['check_all_founded']&&W_ERROR(WErrors['InvalidParam'],'entity\x20'+a['entities'][c]?.['name_or_address']+'\x20is\x20not\x20a\x20valid\x20address,\x20account\x20or\x20mark'),a['check_all_founded']&&!d&&W_ERROR(WErrors['InvalidParam'],'entity\x20'+a['entities'][c]?.['name_or_address']+'\x20is\x20not\x20a\x20valid\x20address,\x20account\x20or\x20mark'),d&&b['push'](d);}return b;};export const query_local_mark_list=async a=>{return await LocalMark['Instance']()['list'](a);};export const query_account_list=async a=>{return await Account['Instance']()['list'](a);};export const query_local_info_list=async a=>{return await LocalInfo['Instance']()['list'](a);};export const query_local_token_list=async a=>{return await TokenInfo['Instance']()['list'](a);};export const 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);}return undefined;};export const 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);}return undefined;};export const 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']);}return undefined;};export const 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']??GasTokenType;if(a?.['balance'])c['balance']=await Account['Instance']()['balance'](d,b['address'],a['network']);else a?.['coin']&&(c['coin']=await Account['Instance']()['coin'](d,a['coin']['cursor'],a['coin']['limit'],b['address'],a['network']));return c;};export const account_operation=async a=>{var b={};if(a['gen']!=null){const c=await Account['Instance']()['gen'](a['gen']?.['name'],a['gen']?.['replaceExistName'],a['gen']?.['m']);b['gen']={'address':c?.['address'],'name':c?.['name'],'m':c?.['m']};}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']});a['suspend']!=null&&(b['suspend']={'name_or_address':a['suspend']['name_or_address'],'success':await Account['Instance']()['suspend'](a['suspend']['name_or_address'])});a['resume']!=null&&(b['resume']={'address':a['resume']['address'],'name':a['resume']['name'],'success':await Account['Instance']()['resume'](a['resume']['address'],a['resume']['name'])});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'])});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:n,data:o,data_encoding:p}=a['signData'];let q=o;if(typeof o==='string'&&p)switch(p){case'base64':q=Uint8Array['from'](Buffer['from'](o,'base64'));break;case'hex':q=Uint8Array['from'](Buffer['from'](o['replace'](/^0x/,''),'hex'));break;case'utf8':default:q=o;break;}const r=await Account['Instance']()['signData'](n,q);b['signData']={'name_or_address':n,'signature':r['signature'],'publicKey':r['publicKey'],'address':r['address']};}if(a['messenger']!=null){const {name_or_account:s,m:t}=a['messenger'];await Account['Instance']()['set_messenger'](s,t),b['messenger']={'name_or_account':s,'m':t};}return b;};export const 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 a['remove']&&(b['remove']=await LocalMark['Instance']()['del'](a['remove']['names']));}return b;};export const 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 a['reset']&&await LocalInfo['Instance']()['reset_contents'](a['reset']['name'],a['reset']['contents']);}}return{'success':!![]};};export const fetch_token_info_operation=async a=>{return await TokenInfo['Instance']()['fetch'](a['tokenType'],a?.['alias'],a?.['network']);};export*from'./account.js';export*from'./config.js';export*from'./local.js';export*from'./token.js';export*from'./wip.js';
|
|
1
|
+
import{GasTokenType}from'../common.js';import{W_ERROR,WErrors}from'../exception.js';import{Account}from'./account.js';import{LocalInfo,LocalInfoNameDefault,LocalMark}from'./local.js';import{TokenInfo}from'./token.js';import{isValidWowAddress}from'../../utils/wow-types.js';import{ENTITY_LINKER_ADDRESS,ENTITY_REGISTRAR_ADDRESS}from'../common.js';export{Account,LocalInfo,LocalMark};export const GetAccountOrMark_Address=async a=>{if(!a)return await Account['Instance']()['get_address'](undefined);const b=typeof a==='string'?a:a['name_or_address'];if(!b)return await Account['Instance']()['get_address'](undefined);if(b['toLowerCase']()==='0xaaa')return ENTITY_LINKER_ADDRESS;if(b['toLowerCase']()==='0xaab')return ENTITY_REGISTRAR_ADDRESS;if(isValidWowAddress(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;}};export const 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}));};export const GetManyAccountOrMark_Address=async a=>{const b=[];for(let c=0x0;c<a['entities']['length'];++c){const d=await GetAccountOrMark_Address(a['entities'][c]);!d&&a['check_all_founded']&&W_ERROR(WErrors['InvalidParam'],'entity\x20'+a['entities'][c]?.['name_or_address']+'\x20is\x20not\x20a\x20valid\x20address,\x20account\x20or\x20mark'),a['check_all_founded']&&!d&&W_ERROR(WErrors['InvalidParam'],'entity\x20'+a['entities'][c]?.['name_or_address']+'\x20is\x20not\x20a\x20valid\x20address,\x20account\x20or\x20mark'),d&&b['push'](d);}return b;};export const query_local_mark_list=async a=>{return await LocalMark['Instance']()['list'](a);};export const query_account_list=async a=>{return await Account['Instance']()['list'](a);};export const query_local_info_list=async a=>{return await LocalInfo['Instance']()['list'](a);};export const query_local_token_list=async a=>{return await TokenInfo['Instance']()['list'](a);};export const 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);}return undefined;};export const 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);}return undefined;};export const 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']);}return undefined;};export const 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']??GasTokenType;if(a?.['balance'])c['balance']=await Account['Instance']()['balance'](d,b['address'],a['network']);else a?.['coin']&&(c['coin']=await Account['Instance']()['coin'](d,a['coin']['cursor'],a['coin']['limit'],b['address'],a['network']));return c;};export const account_operation=async a=>{var b={};if(a['gen']!=null){const c=await Account['Instance']()['gen'](a['gen']?.['name'],a['gen']?.['replaceExistName'],a['gen']?.['m']);b['gen']={'address':c?.['address'],'name':c?.['name'],'m':c?.['m']};}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']});a['suspend']!=null&&(b['suspend']={'name_or_address':a['suspend']['name_or_address'],'success':await Account['Instance']()['suspend'](a['suspend']['name_or_address'])});a['resume']!=null&&(b['resume']={'address':a['resume']['address'],'name':a['resume']['name'],'success':await Account['Instance']()['resume'](a['resume']['address'],a['resume']['name'])});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'])});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:n,data:o,data_encoding:p}=a['signData'];let q=o;if(typeof o==='string'&&p)switch(p){case'base64':q=Uint8Array['from'](Buffer['from'](o,'base64'));break;case'hex':q=Uint8Array['from'](Buffer['from'](o['replace'](/^0x/,''),'hex'));break;case'utf8':default:q=o;break;}const r=await Account['Instance']()['signData'](n,q);b['signData']={'name_or_address':n,'signature':r['signature'],'publicKey':r['publicKey'],'address':r['address']};}if(a['messenger']!=null){const {name_or_account:s,m:t}=a['messenger'];await Account['Instance']()['set_messenger'](s,t),b['messenger']={'name_or_account':s,'m':t};}return b;};export const 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 a['remove']&&(b['remove']=await LocalMark['Instance']()['del'](a['remove']['names']));}return b;};export const 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 a['reset']&&await LocalInfo['Instance']()['reset_contents'](a['reset']['name'],a['reset']['contents']);}}return{'success':!![]};};export const fetch_token_info_operation=async a=>{return await TokenInfo['Instance']()['fetch'](a['tokenType'],a?.['alias'],a?.['network']);};export*from'./account.js';export*from'./config.js';export*from'./local.js';export*from'./token.js';export*from'./wip.js';
|