UNPKG

wowok

Version:

Wowok Blockchain TypeScript API

1 lines 10.5 kB
import{isValidWowAddress}from'../../utils/wow-types.js';import{W_ERROR,WErrors}from'../exception.js';import{Cache,CachePrefix}from'./cache.js';export const BUITIN_IDS=['0x5','0x6','0x7','0x8','0x9','@0xaaa','@0xaab','@0x403','@0xacc','@0xc'];export const isValidAddress=a=>{return a&&(isValidWowAddress(a)||BUITIN_IDS['includes'](a));};export const LocalMarkNameMaxLength=0x40;export const LocalMarkTagMaxLength=0x40;export const LocalMarkTagMaxCount=0x32;export const LocalInfoNameMaxLength=0x40;export const LocalInfoContentMaxLength=0x12c;export const LocalInfoContentMaxCount=0x32;export const LocalInfoNameDefault='Address\x20of\x20delivery';export class LocalMark{static ['_instance'];['cacheKey']=[CachePrefix['local_mark']];static['Instance'](){return!LocalMark['_instance']&&(LocalMark['_instance']=new LocalMark()),LocalMark['_instance'];}['resolve_tags'](a){return a=a?.['slice'](0x0,LocalMarkTagMaxCount),a=a?.['filter'](b=>b!==''&&b)?.['map'](b=>{return b['slice'](0x0,LocalMarkTagMaxLength);}),a;}['resolve_name'](a){return a['slice'](0x0,LocalMarkNameMaxLength);}async['put'](a){const b=await Cache['read'](this['cacheKey'],async()=>{return{'expire':'INFINITE','data':[]};}),c=b?.['data']||[],d=[];for(const e of a){const f=e['address']['toLowerCase']();e['address']=f;!isValidAddress(e['address'])&&W_ERROR(WErrors['IsValidAddress'],'LocalMark.put.mark.address:\x20'+e['address']);e?.['name']?.['value']&&(e['name']['value']=this['resolve_name'](e?.['name']?.['value']));e['tags']=this['resolve_tags'](e?.['tags']),c['forEach'](i=>{e?.['name']?.['value']!=null&&i['name']===e?.['name']?.['value']&&(e?.['name']?.['replaceExistName']?i['name']=undefined:W_ERROR(WErrors['LocalMarkNameExist'],'LocalMark.put.mark.name:\x20'+e['name']['value']));});const g=Date['now'](),h={'name':e?.['name']?.['value'],'address':e['address'],'tags':e['tags'],'createdAt':g,'updatedAt':g};c['push'](h),d['push'](h);}return await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':c}),!![]),d;}async['get'](a){if(a===undefined||a===null)return undefined;const b=await Cache['read'](this['cacheKey'],async c=>{return{'expire':'INFINITE','data':[]};});return b?.['data']?.['find'](c=>c['name']===a||c['address']['toLowerCase']()===a['toLowerCase']());}async['get_address'](a){if(a&&isValidAddress(a))return a['toLowerCase']();return(await this['get'](a))?.['address'];}async['get_many'](a){if(!Array['isArray'](a)||a['length']===0x0)return[];const b=await Cache['read'](this['cacheKey'],async d=>{return{'expire':'INFINITE','data':[]};}),c=b?.['data']||[];return a['map'](d=>{return c['find'](e=>e['name']===d||e['address']['toLowerCase']()===d?.['toLowerCase']());});}async['get_many_address'](a){const b=new Array(a['length'])['fill'](undefined),c=new Map();a['forEach']((g,h)=>{if(g===null||g===undefined)b[h]=undefined;else isValidAddress(g)?b[h]=g['toLowerCase']():c['set'](h,g);});const d=Array['from'](c['values']());if(d['length']===0x0)return b;const e=await this['get_many'](d);let f=0x0;return c['forEach']((g,h)=>{const i=e[f];b[h]=i?.['address'],f++;}),b;}async['get_many_address_availables'](a){return(await this['get_many_address'](a))['filter'](b=>b!=null);}async['del'](a,b=![]){const c=[CachePrefix['local_mark']],d=await Cache['read'](c,async()=>({'expire':'INFINITE','data':[]})),e=d?.['data']||[],f=e['filter'](h=>{const i=h['name']!==undefined&&h['name']!==null&&a['includes'](h['name']),j=a['includes'](h['address']),k=i||j,l=h['name']===undefined||h['name']===null;return b?!k&&!l:!k;}),g=e['filter'](h=>!f['includes'](h));return f['length']!==e['length']&&await Cache['read'](c,async()=>({'expire':'INFINITE','data':f}),!![]),g;}async['clear'](){const a=[CachePrefix['local_mark']];return await Cache['read'](a,async()=>({'expire':'INFINITE','data':[]}),!![]),!![];}async['rename'](a,b){b=this['resolve_name'](b);if(a===b)return!![];const c=await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':[]})),d=c?.['data']||[],e=d['find'](f=>f['name']===a);if(e&&d['findIndex'](f=>f['name']===b)===-0x1){const f=Date['now']();return e['name']=b,e['updatedAt']=f,await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':d}),!![]),!![];}return![];}async['swap_name'](a,b){if(a===b)return!![];const c=await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':[]})),d=c?.['data']||[],e=d['find'](g=>g['name']===a),f=d['find'](g=>g['name']===b);if(e&&f){const g=Date['now']();return e['name']=b,e['updatedAt']=g,f['name']=a,f['updatedAt']=g,await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':d}),!![]),!![];}return![];}async['set_tags'](a,b){b=this['resolve_tags'](b);const c=await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':[]})),d=c?.['data']||[],e=d['find'](f=>f['name']===a);if(e){const f=Date['now']();return e['tags']=b,e['updatedAt']=f,await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':d}),!![]),!![];}return![];}async['list'](a){if(a&&a['tags'])a['tags']=a['tags']['filter'](d=>d!==''&&d);const b=await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':[]})),c=b?.['data']||[];return c['filter'](d=>{if(a?.['address']&&d['address']!==a['address'])return![];if(a?.['createdAt']){if(a['createdAt']['gte']!==undefined&&(!d['createdAt']||d['createdAt']<a['createdAt']['gte']))return![];if(a['createdAt']['lte']!==undefined&&(!d['createdAt']||d['createdAt']>a['createdAt']['lte']))return![];}if(a?.['updatedAt']){if(a['updatedAt']['gte']!==undefined&&(!d['updatedAt']||d['updatedAt']<a['updatedAt']['gte']))return![];if(a['updatedAt']['lte']!==undefined&&(!d['updatedAt']||d['updatedAt']>a['updatedAt']['lte']))return![];}return!![];})['map'](d=>{let e=0x0;const f=d['name']?.['toLowerCase']()||'',g=a?.['name']?.['toLowerCase']()||'';if(a?.['name']){if(f===g)e+=0x64;else{if(f['startsWith'](g))e+=0x32;else f['includes'](g)&&(e+=0x19);}}return a?.['tags']&&a['tags']['length']>0x0&&a['tags']['forEach'](h=>{const i=h['toLowerCase']();d['tags']&&d['tags']['forEach'](j=>{const k=j['toLowerCase']();if(k===i)e+=0x14;else{if(k['startsWith'](i))e+=0xf;else k['includes'](i)&&(e+=0xa);}});}),(a?.['name']||a?.['tags'])&&e===0x0&&(e=-0x1),{'mark':d,'score':e};})['filter'](({score:d})=>d>=0x0)['sort']((d,e)=>{if(e['score']!==d['score'])return e['score']-d['score'];const f=(d['mark']['name']||'')['length'],g=(e['mark']['name']||'')['length'];if(f!==g)return f-g;return(d['mark']['name']||'')['localeCompare'](e['mark']['name']||'');})['map'](({mark:d})=>d);}}export class LocalInfo{static ['_instance'];['cacheKey']=[CachePrefix['local_info']];static['Instance'](){return!LocalInfo['_instance']&&(LocalInfo['_instance']=new LocalInfo()),LocalInfo['_instance'];}['resolve_contents'](a){return a=a['slice'](0x0,LocalInfoContentMaxCount),a['map'](b=>b['slice'](0x0,LocalInfoContentMaxLength));}['resolve_name'](a){return a['slice'](0x0,LocalInfoNameMaxLength);}async['add'](a){const b=await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})),c=b?.['data']||{};for(const d of a){const e=this['resolve_name'](d['name']),f=d['default']['slice'](0x0,LocalInfoContentMaxLength);if(c[e]){const g=Date['now'](),h=c[e];h['default']=f,d['contents']!==undefined&&(h['contents']=this['resolve_contents'](d['contents'])),h['updatedAt']=g;}else{const i=Date['now'](),j={'default':f,'contents':d['contents']?this['resolve_contents'](d['contents']):[],'createdAt':i,'updatedAt':i};c[e]=j;}}return await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':c}),!![]),!![];}async['get'](a=LocalInfoNameDefault){const b=await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})),c=b?.['data']||{},d=c[a];return d?{'name':a,...d}:undefined;}async['get_default'](a=LocalInfoNameDefault){const b=await this['get'](a);return b?.['default'];}async['get_many'](a){if(!Array['isArray'](a)||a['length']===0x0)return[];const b=await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})),c=b?.['data']||{};return a['map'](d=>{const e=c[d];return e?{'name':d,...e}:undefined;});}async['del'](a=LocalInfoNameDefault){const b=await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})),c=b?.['data']||{};delete c[a],await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':c}),!![]);}async['reset_contents'](a=LocalInfoNameDefault,b){const c=await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})),d=c?.['data']||{},e=d[a];if(e){if(e['contents']&&e['contents']['length']>0x0){const f=Date['now']();return e['contents']=this['resolve_contents'](b),e['updatedAt']=f,await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':d}),!![]),!![];}}return![];}async['clear'](){await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}}),!![]);}async['list'](a){const b=await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})),c=b?.['data']||{};return Object['entries'](c)['map'](([d,e])=>{let f=0x0;const g={'name':d,...e};if(a?.['name']){const h=d['toLowerCase'](),i=a['name']['toLowerCase']();if(h===i)f+=0x64;else{if(h['startsWith'](i))f+=0x32;else h['includes'](i)&&(f+=0x19);}}if(a?.['default']){const j=e['default']['toLowerCase'](),k=a['default']['toLowerCase']();if(j===k)f+=0x5a;else{if(j['startsWith'](k))f+=0x2d;else j['includes'](k)&&(f+=0x16);}}return a?.['contents']&&a['contents']['length']>0x0&&a['contents']['forEach'](l=>{const m=l['toLowerCase']();e['contents']&&e['contents']['forEach'](n=>{const o=n['toLowerCase']();if(o===m)f+=0x14;else{if(o['startsWith'](m))f+=0xf;else o['includes'](m)&&(f+=0xa);}});}),(a?.['name']||a?.['default']||a?.['contents'])&&f===0x0&&(f=-0x1),{'info':g,'score':f};})['filter'](({score:d,info:e})=>{if(d<0x0)return![];if(a?.['createdAt']){if(a['createdAt']['gte']!==undefined&&(!e['createdAt']||e['createdAt']<a['createdAt']['gte']))return![];if(a['createdAt']['lte']!==undefined&&(!e['createdAt']||e['createdAt']>a['createdAt']['lte']))return![];}if(a?.['updatedAt']){if(a['updatedAt']['gte']!==undefined&&(!e['updatedAt']||e['updatedAt']<a['updatedAt']['gte']))return![];if(a['updatedAt']['lte']!==undefined&&(!e['updatedAt']||e['updatedAt']>a['updatedAt']['lte']))return![];}return!![];})['sort']((d,e)=>{if(e['score']!==d['score'])return e['score']-d['score'];const f=d['info']['name']['length'],g=e['info']['name']['length'];if(f!==g)return f-g;return d['info']['name']['localeCompare'](e['info']['name']);})['map'](({info:d})=>d);}}