UNPKG

wowok

Version:

Wowok Blockchain TypeScript API

1 lines 15.4 kB
import{isValidWowAddress}from'../../utils/wow-types.js';import{toTxObject,toTxString,isValidDescription,MAX_DESCRIPTION_LENGTH,isValidLongName,PackageAddress,IsValidArgType,MAX_LONG_NAME_LENGTH,isValidU8,GetObjectExisted,GetObject,GetObjectDescription,ValueType,parseValueType,demandFn}from'../common.js';import{W_ERROR,WErrors}from'../exception.js';import{GetAccountOrMark_Address}from'../local/index.js';import{LocalMark}from'../local/local.js';import{ObjectType}from'../query/object.js';import{query_received}from'../query/received.js';import{queryObjectsWithType,queryObjectWithType}from'../query/util.js';import{owner_receive,validObjects}from'../util.js';import{CallBase}from'./base.js';import{BuiltinPermissionIndex,newPermission}from'./permission.js';import{create as a149a}from'./permission.js';export class CallDemand extends CallBase{['data'];['object_address']=undefined;['permission_address']=undefined;['new_permission_description']=undefined;constructor(a){super(),this['data']=a;}async['prepare'](a){await super['prepare'](a);!this['object_address']&&(this['object_address']=await GetObjectExisted(this['data']?.['object']));if(this['object_address']){this['content']=undefined,await this['update_content'](a,ObjectType['Demand'],this['object_address']);if(!this['content'])W_ERROR(WErrors['InvalidParam'],'CallDemand_Data.data.object:'+this['object_address']);this['permission_address']=this['content']['permission'];}else{const b=GetObject(this['data']['object']);this['permission_address']=await GetObjectExisted(b?.['permission']),this['new_permission_description']=GetObjectDescription(b?.['permission']);}}async['call'](a){await this['prepare'](a);const b=[],c=[],d=e=>{this['permission_address']&&!c['includes'](e)&&c['push'](e);};this['permission_address']&&!this['object_address']&&d(BuiltinPermissionIndex['DEMAND_NEW']);if(this['data']['present']?.['by_guard']!=null){!this['content']&&W_ERROR(WErrors['InvalidParam'],'CallDemand_Data.data.present.by_guard\x20fail\x20because\x20the\x20Demand\x20content\x20not\x20ready');this['data']['present']['by_guard']=await LocalMark['Instance']()['get_address'](this['data']['present']['by_guard']);if(this['data']['present']['by_guard']){const e=this['content']?.['guards']['find'](g=>g['guard']===this['data']['present']['by_guard']);e?b['push'](this['data']['present']['by_guard']):W_ERROR(WErrors['InvalidParam'],'guard\x20'+this['data']['present']['by_guard']+'\x20not\x20found\x20in\x20guards:\x20'+this['content']['guards']['map'](g=>g['guard']));}else this['content']&&this['content']['guards']['length']>0x0&&W_ERROR(WErrors['InvalidParam'],'guard\x20is\x20required\x20when\x20present\x20guards\x20'+this['content']['guards']['map'](g=>g['guard'])+'\x20is\x20not\x20empty');}this['permission_address']&&this['data']?.['description']!=null&&this['object_address']&&d(BuiltinPermissionIndex['DEMAND_DESCRIPTION']);this['permission_address']&&this['data']?.['location']!=null&&d(BuiltinPermissionIndex['DEMAND_LOCATION']);this['permission_address']&&this['data']?.['rewards']!=null&&d(BuiltinPermissionIndex['DEMAND_REWARD']);this['permission_address']&&this['data']?.['feedback']!=null&&d(BuiltinPermissionIndex['DEMAND_FEEDBACK']);this['permission_address']&&this['data']?.['guards']!=null&&d(BuiltinPermissionIndex['DEMAND_GUARD']);this['permission_address']&&this['data']?.['owner_receive']!=null&&d(BuiltinPermissionIndex['DEMAND_OWNER_RECEIVE']);this['permission_address']&&this['data']['um']!==undefined&&d(BuiltinPermissionIndex['DEMAND_UM']);if(this['permission_address']||b['length']>0x0)return await this['check_permission_and_call'](a,this['permission_address'],c,b);return await this['exec'](a);}async['operate'](a,b,c,d){let e=this['permission_address'],g=this['object_address'];!this['object_address']&&(!e&&(e=newPermission(b,this['new_permission_description']??'')),e&&(g=newDemand(b,toTxObject(b,e),this['data']?.['description']??'',c)));(!g||!e)&&W_ERROR(WErrors['InvalidParam'],'CallDemand_Data.data.object:'+this['object_address']);if(this['data']['present']!=null&&this['content']){if(this['data']['present']['by_guard']){const j=this['content']['guards']['find'](k=>k['guard']===this['data']['present']['by_guard']);if(j&&j['service_identifier']!=null){const k=d?.['find'](m=>m['guard']===this['data']['present']['by_guard'])?.['submission']?.['find'](m=>Number(m['identifier'])===Number(j['service_identifier'])),l=k?parseValueType(k['value_type']):undefined;k&&l===ValueType['Address']&&k['value']&&isValidWowAddress(k['value'])?this['data']['present']['service']=undefined:W_ERROR(WErrors['InvalidParam'],'submission\x20'+j['service_identifier']+'\x20invalid\x20in\x20the\x20guard\x20'+this['data']['present']['by_guard']);}}let h=undefined,i=undefined;if(typeof this['data']['present']['service']==='string'&&this['data']['present']['service']){const m=await queryObjectWithType(a,this['data']['present']['service'],ObjectType['Service'],'service::Service');m?(h=m['object'],i=m['type']):W_ERROR(WErrors['InvalidParam'],'service\x20'+this['data']['present']['service']+'\x20not\x20found');}present(b,g,this['data']['present']['recommend'],this['data']['present']['by_guard'],h,i,c);}this['data']?.['description']!=null&&this['object_address']&&description_set(b,g,e,this['data']['description'],c);this['data']?.['location']!=null&&location_set(b,g,e,this['data']['location'],c);if(this['data']?.['rewards']!=null)switch(this['data']?.['rewards']['op']){case'set':case'add':{this['data']['rewards']['objects']['length']>MAX_REWARD_COUNT&&W_ERROR(WErrors['InvalidParam'],'rewards\x20count\x20exceeds\x20maximum\x20limit\x20'+MAX_REWARD_COUNT);this['data']['rewards']['op']==='set'&&reward_clear(b,g,e,c);let n=[];this['data']['rewards']['objects']['length']>0x0&&(n=await queryObjectsWithType(a,this['data']['rewards']['objects'],ObjectType['Reward'],'reward::Reward',!![]));n['forEach'](o=>{reward_add(b,g,e,o['object'],o['type'],c);});break;}case'remove':{this['data']['rewards']['objects']['length']>MAX_REWARD_COUNT&&W_ERROR(WErrors['InvalidParam'],'rewards\x20count\x20exceeds\x20maximum\x20limit\x20'+MAX_REWARD_COUNT);const o=await LocalMark['Instance']()['get_many_address_availables'](this['data']['rewards']['objects']);reward_remove(b,g,e,o,c);break;}case'clear':{reward_clear(b,g,e,c);break;}}if(this['data']?.['feedback']!=null){this['data']['feedback']['length']>MAX_FEEDBACK_COUNT&&W_ERROR(WErrors['InvalidParam'],'feedback\x20count\x20exceeds\x20maximum\x20limit\x20'+MAX_FEEDBACK_COUNT);for(const q of this['data']['feedback']){const r=await GetAccountOrMark_Address(q['who']);r&&feedback(b,g,e,r,q['acceptance_score'],q['feedback'],c);}}if(this['data']?.['guards']!=null)switch(this['data']?.['guards']['op']){case'set':case'add':{this['data']['guards']['guard']['length']>MAX_GUARD_COUNT&&W_ERROR(WErrors['InvalidParam'],'guards\x20count\x20exceeds\x20maximum\x20limit\x20'+MAX_GUARD_COUNT);this['data']['guards']['op']==='set'&&guard_clear(b,g,e,c);for(const s of this['data']['guards']['guard']){const t=await LocalMark['Instance']()['get_address'](s['guard']);t&&guard_add(b,g,e,t,s['service_identifier'],c);}break;}case'remove':{this['data']['guards']['guard']['length']>MAX_GUARD_COUNT&&W_ERROR(WErrors['InvalidParam'],'guards\x20count\x20exceeds\x20maximum\x20limit\x20'+MAX_GUARD_COUNT);const u=await LocalMark['Instance']()['get_many_address_availables'](this['data']['guards']['guard']);guard_remove(b,g,e,u,c);break;}case'clear':{guard_clear(b,g,e,c);break;}}this['data']?.['owner_receive']!=null&&this['object_address']&&(this['data']['owner_receive']==='recently'&&(this['data']['owner_receive']=await query_received({'name_or_address':{'name_or_address':this['object_address'],'local_mark_first':!![]},'all_type':!![],'no_cache':a['no_cache'],'network':a['network']})),await owner_receive(b,g,e,this['data']['owner_receive'],undefined,w=>PackageAddress+'::demand::'+w,c));if(this['data']['um']!==undefined){let w=null;this['data']['um']&&(w=await LocalMark['Instance']()['get_address'](this['data']['um'])||null,!w&&W_ERROR(WErrors['InvalidParam'],'CallDemand_Data.data.um:'+this['data']['um'])),um_set(b,g,e,w,c);}if(!this['permission_address']){const x=GetObject(this['data']?.['object']);await this['new_with_mark'](a,b,ObjectType['Permission'],a149a(b,e),GetObject(x['permission']));}!this['object_address']&&await this['new_with_mark'](a,b,ObjectType['Demand'],create(b,g),GetObject(this['data']?.['object']));}}export const MAX_REWARD_COUNT=0x14;export const MAX_GUARD_COUNT=0x14;export const MAX_FEEDBACK_COUNT=0x14;export function create(a,b){return validObjects([b]),a['moveCall']({'target':demandFn('create'),'arguments':[toTxObject(a,b)]});}export function present(a,b,c,d,e,f,g){validObjects([b,e,d,g]),c=c||'';typeof c==='string'&&!isValidDescription(c)&&W_ERROR(WErrors['IsValidDescription'],'Recommend\x20exceeds\x20maximum\x20length\x20'+MAX_DESCRIPTION_LENGTH);e&&!IsValidArgType(f)&&W_ERROR(WErrors['IsValidArgType'],'Service\x20type\x20'+f+'\x20is\x20not\x20valid');if(d)!g&&W_ERROR(WErrors['InvalidParam'],'Passport\x20is\x20required\x20when\x20by_guard\x20'+d+'\x20is\x20present'),e?a['moveCall']({'target':demandFn('present_service_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,d),toTxObject(a,g),toTxString(a,c),toTxObject(a,e),a['object']['clock']()],'typeArguments':[f]}):a['moveCall']({'target':demandFn('present_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,d),toTxObject(a,g),toTxString(a,c),a['object']['clock']()]});else e?a['moveCall']({'target':demandFn('present_service'),'arguments':[toTxObject(a,b),toTxString(a,c),toTxObject(a,e),a['object']['clock']()],'typeArguments':[f]}):a['moveCall']({'target':demandFn('present'),'arguments':[toTxObject(a,b),toTxString(a,c),a['object']['clock']()]});}export function newDemand(a,b,c,d){return validObjects([b,d]),typeof c==='string'&&!isValidDescription(c)&&W_ERROR(WErrors['IsValidDescription'],'Description\x20exceeds\x20maximum\x20length\x20'+MAX_DESCRIPTION_LENGTH),d?a['moveCall']({'target':demandFn('new_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,d),toTxString(a,c),a['object']['mutRegistrar'](),a['object']['clock']()]}):a['moveCall']({'target':demandFn('new'),'arguments':[toTxObject(a,b),toTxString(a,c),a['object']['mutRegistrar'](),a['object']['clock']()]});}export function description_set(a,b,c,d,e){validObjects([b,c,e]),typeof d==='string'&&!isValidDescription(d)&&W_ERROR(WErrors['IsValidDescription'],'Description\x20'+d+'\x20exceeds\x20maximum\x20length\x20'+MAX_DESCRIPTION_LENGTH),e?a['moveCall']({'target':demandFn('description_set_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,e),toTxString(a,d)]}):a['moveCall']({'target':demandFn('description_set'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxString(a,d)]});}export function location_set(a,b,c,d,e){validObjects([b,c,e]),typeof d==='string'&&!isValidLongName(d)&&W_ERROR(WErrors['InvalidParam'],'Location\x20'+d+'\x20exceeds\x20maximum\x20length\x20'+MAX_LONG_NAME_LENGTH),e?a['moveCall']({'target':demandFn('location_set_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,e),toTxString(a,d)]}):a['moveCall']({'target':demandFn('location_set'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxString(a,d)]});}export function guard_add(a,b,c,d,e,f){validObjects([b,c,d,f]),typeof e==='number'&&(!isValidU8(e)&&W_ERROR(WErrors['IsValidU8'],'Service\x20identifier\x20'+e+'\x20is\x20invalid')),f?a['moveCall']({'target':demandFn('guard_add_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,f),toTxObject(a,d),a['pure']['option']('u8',e??null),a['object']['mutRegistrar'](),a['object']['clock']()]}):a['moveCall']({'target':demandFn('guard_add'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,d),a['pure']['option']('u8',e??null),a['object']['mutRegistrar'](),a['object']['clock']()]});}export function guard_remove(a,b,c,d,e){if(d['length']===0x0)return;validObjects([b,c,e,...d]),e?a['moveCall']({'target':demandFn('guard_remove_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,e),a['pure']['vector']('address',d),a['object']['mutRegistrar']()]}):a['moveCall']({'target':demandFn('guard_remove'),'arguments':[toTxObject(a,b),toTxObject(a,c),a['pure']['vector']('address',d),a['object']['mutRegistrar']()]});}export function guard_clear(a,b,c,d){d?a['moveCall']({'target':demandFn('guard_clear_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,d),a['object']['mutRegistrar']()]}):a['moveCall']({'target':demandFn('guard_clear'),'arguments':[toTxObject(a,b),toTxObject(a,c),a['object']['mutRegistrar']()]});}export function reward_add(a,b,c,d,e,f){validObjects([b,c,f,d]),!IsValidArgType(e)&&W_ERROR(WErrors['IsValidArgType'],'Reward\x20type\x20'+e+'\x20is\x20invalid'),f?a['moveCall']({'target':demandFn('reward_add_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,f),toTxObject(a,d),a['object']['mutRegistrar'](),a['object']['clock']()],'typeArguments':[e]}):a['moveCall']({'target':demandFn('reward_add'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,d),a['object']['mutRegistrar'](),a['object']['clock']()],'typeArguments':[e]});}export function reward_remove(a,b,c,d,e){if(d['length']===0x0)return;validObjects([b,c,e,...d]),e?a['moveCall']({'target':demandFn('reward_remove_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,e),a['pure']['vector']('address',d),a['object']['mutRegistrar']()]}):a['moveCall']({'target':demandFn('reward_remove'),'arguments':[toTxObject(a,b),toTxObject(a,c),a['pure']['vector']('address',d),a['object']['mutRegistrar']()]});}export function reward_clear(a,b,c,d){validObjects([b,c,d]),d?a['moveCall']({'target':demandFn('reward_clear_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,d),a['object']['mutRegistrar']()]}):a['moveCall']({'target':demandFn('reward_clear'),'arguments':[toTxObject(a,b),toTxObject(a,c),a['object']['mutRegistrar']()]});}export function feedback(a,b,c,d,e,f,g){validObjects([b,c,d,g]),typeof f==='string'&&!isValidDescription(f)&&W_ERROR(WErrors['IsValidDescription'],'Feedback\x20exceeds\x20maximum\x20length\x20'+MAX_DESCRIPTION_LENGTH),typeof e==='number'&&!isValidU8(e)&&W_ERROR(WErrors['IsValidU8'],'Acceptance\x20score\x20'+e+'\x20is\x20invalid'),g?a['moveCall']({'target':demandFn('feedback_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,g),a['pure']['address'](d),a['pure']['option']('u8',e??null),a['pure']['string'](f??''),a['object']['clock']()]}):a['moveCall']({'target':demandFn('feedback'),'arguments':[toTxObject(a,b),toTxObject(a,c),a['pure']['address'](d),a['pure']['option']('u8',e??null),a['pure']['string'](f??''),a['object']['clock']()]});}export function um_set(a,b,c,d,e){validObjects([b,c]),d?e?a['moveCall']({'target':demandFn('um_set_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),e,toTxObject(a,d),a['object']['mutRegistrar'](),a['object']['clock']()]}):a['moveCall']({'target':demandFn('um_set'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,d),a['object']['mutRegistrar'](),a['object']['clock']()]}):e?a['moveCall']({'target':demandFn('um_none_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),e,a['object']['mutRegistrar']()]}):a['moveCall']({'target':demandFn('um_none'),'arguments':[toTxObject(a,b),toTxObject(a,c),a['object']['mutRegistrar']()]});}