wowok
Version:
Wowok Blockchain TypeScript API
1 lines • 3.48 kB
JavaScript
import{isValidDescription,MAX_DESCRIPTION_LENGTH}from'../common.js';import{W_ERROR,WErrors}from'../exception.js';import{GetAccountOrMark_Address,GetManyAccountOrMark_Address}from'../local/index.js';import{LocalMark}from'../local/local.js';import{queryTableItem_EntityRegistrar}from'../query/object.js';import{CallBase}from'./base.js';import{description_set,info_add,info_clear,info_remove,register_with_resource_forced,resource_destroy,resource_transfer,resource_use}from'./entity.js';import{addObjectTags,removeObject,removeObjectTags}from'./resource.js';import{create as a159a}from'./resource.js';import{getCallEnvAccount}from'./util.js';export class CallPersonal extends CallBase{['data'];constructor(a){super(),this['data']=a;}async['call'](a){return await this['exec'](a);}async['operate'](a,b,c,d){await super['prepare'](a);let e;this['data']['referrer']!=null&&(e=await GetAccountOrMark_Address(this['data']['referrer']));this['data']['description']!=null&&(!isValidDescription(this['data']['description'])&&W_ERROR(WErrors['IsValidDescription'],'CallPersonal_Data\x20description\x20excceed\x20max\x20length\x20'+MAX_DESCRIPTION_LENGTH));if(this['data']?.['information']!=null)switch(this['data']['information']['op']){case'add':{await info_add(b,this['data']['information']['data'],this['data']['description'],e);break;}case'remove':{info_remove(b,this['data']['information']['name']);break;}case'clear':{info_clear(b);break;}}else this['data']['description']!=null&&description_set(b,this['data']['description'],e);if(this['data']['mark']!=null){if(this['data']['mark']['op']==='destroy'||this['data']['mark']['op']==='transfer'){const f=await queryTableItem_EntityRegistrar({'address':await getCallEnvAccount(a),'no_cache':a['no_cache'],'network':a['network']});this['data']['mark']['op']==='destroy'&&f&&f['mark_object']&&resource_destroy(b,f['mark_object']);if(this['data']['mark']['op']==='transfer'&&f&&f['mark_object']){const g=await GetAccountOrMark_Address(this['data']['mark']['to']);g?resource_transfer(b,f['mark_object'],g):W_ERROR(WErrors['IsValidAddress'],'CallPersonal_Data\x20mark\x20transfer\x20to\x20address\x20'+this['data']['mark']['to']+'\x20is\x20invalid');}}else{if(this['data']['mark']['op']==='replace'){const h=await LocalMark['Instance']()['get_address'](this['data']['mark']['new_mark_object']);h?resource_use(b,h,e??null):W_ERROR(WErrors['IsValidAddress'],'CallPersonal_Data\x20mark\x20replace\x20to\x20address\x20'+this['data']['mark']['new_mark_object']+'\x20is\x20invalid');}else{const i=await queryTableItem_EntityRegistrar({'address':await getCallEnvAccount(a),'no_cache':a['no_cache'],'network':a['network']})['catch'](()=>undefined);let j=i?.['mark_object'];!j&&(j=register_with_resource_forced(b,e??null));!j&&W_ERROR(WErrors['IsValidAddress'],'CallPersonal_Data\x20mark\x20fetch/launch\x20resource\x20failed');switch(this['data']['mark']['op']){case'add':{const k=this['data']['mark'];if('data'in k)for(const l of k['data']){const m=await GetAccountOrMark_Address(l['address']);addObjectTags(b,j,{'address':m,'nick':l['name'],'tags':l['tags']??[]});}break;}case'remove':{const n=this['data']['mark'];if('data'in n)for(const o of n['data']){const p=await GetAccountOrMark_Address(o['address']);removeObjectTags(b,j,{'address':p,'tags':o['tags']??[]});}break;}case'clear':{const q=await GetManyAccountOrMark_Address(this['data']['mark']['address']);q['forEach'](s=>{removeObject(b,j,s);});break;}}!i?.['mark_object']&&j&&a159a(b,j);}}}}}