wowok 2.1.41 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/dist/cjs/w/call/guard.d.ts +2 -0
  2. package/dist/cjs/w/call/guard.js +1 -1
  3. package/dist/cjs/w/call/repository.js +1 -1
  4. package/dist/cjs/w/call/util.js +1 -1
  5. package/dist/cjs/w/messenger/messenger-manager.js +1 -1
  6. package/dist/cjs/w/messenger/messenger.js +1 -1
  7. package/dist/cjs/w/messenger/pq/crypto.d.ts +39 -0
  8. package/dist/cjs/w/messenger/pq/crypto.js +1 -0
  9. package/dist/cjs/w/messenger/pq/erasure.d.ts +17 -0
  10. package/dist/cjs/w/messenger/pq/erasure.js +1 -0
  11. package/dist/cjs/w/messenger/pq/index.d.ts +9 -0
  12. package/dist/cjs/w/messenger/pq/index.js +1 -0
  13. package/dist/cjs/w/messenger/pq/keycombiner.d.ts +1 -0
  14. package/dist/cjs/w/messenger/pq/keycombiner.js +1 -0
  15. package/dist/cjs/w/messenger/pq/pqxdh.d.ts +41 -0
  16. package/dist/cjs/w/messenger/pq/pqxdh.js +1 -0
  17. package/dist/cjs/w/messenger/pq/ratchet.d.ts +12 -0
  18. package/dist/cjs/w/messenger/pq/ratchet.js +1 -0
  19. package/dist/cjs/w/messenger/pq/session.d.ts +39 -0
  20. package/dist/cjs/w/messenger/pq/session.js +1 -0
  21. package/dist/cjs/w/messenger/pq/spqr.d.ts +23 -0
  22. package/dist/cjs/w/messenger/pq/spqr.js +1 -0
  23. package/dist/cjs/w/messenger/pq/store-adapter.d.ts +33 -0
  24. package/dist/cjs/w/messenger/pq/store-adapter.js +1 -0
  25. package/dist/cjs/w/messenger/pq/types.d.ts +181 -0
  26. package/dist/cjs/w/messenger/pq/types.js +1 -0
  27. package/dist/cjs/w/messenger/session.d.ts +15 -16
  28. package/dist/cjs/w/messenger/session.js +1 -1
  29. package/dist/cjs/w/messenger/storage.d.ts +2 -0
  30. package/dist/cjs/w/messenger/storage.js +1 -1
  31. package/dist/cjs/w/messenger/types.d.ts +15 -1
  32. package/dist/cjs/w/messenger/types.js +1 -1
  33. package/dist/cjs/w/messenger/utils.js +1 -1
  34. package/dist/cjs/w/query/object.js +1 -1
  35. package/dist/esm/w/call/guard.d.ts +2 -0
  36. package/dist/esm/w/call/guard.js +1 -1
  37. package/dist/esm/w/call/repository.js +1 -1
  38. package/dist/esm/w/call/util.js +1 -1
  39. package/dist/esm/w/messenger/messenger-manager.js +1 -1
  40. package/dist/esm/w/messenger/messenger.js +1 -1
  41. package/dist/esm/w/messenger/pq/crypto.d.ts +39 -0
  42. package/dist/esm/w/messenger/pq/crypto.js +1 -0
  43. package/dist/esm/w/messenger/pq/erasure.d.ts +17 -0
  44. package/dist/esm/w/messenger/pq/erasure.js +1 -0
  45. package/dist/esm/w/messenger/pq/index.d.ts +9 -0
  46. package/dist/esm/w/messenger/pq/index.js +1 -0
  47. package/dist/esm/w/messenger/pq/keycombiner.d.ts +1 -0
  48. package/dist/esm/w/messenger/pq/keycombiner.js +1 -0
  49. package/dist/esm/w/messenger/pq/pqxdh.d.ts +41 -0
  50. package/dist/esm/w/messenger/pq/pqxdh.js +1 -0
  51. package/dist/esm/w/messenger/pq/ratchet.d.ts +12 -0
  52. package/dist/esm/w/messenger/pq/ratchet.js +1 -0
  53. package/dist/esm/w/messenger/pq/session.d.ts +39 -0
  54. package/dist/esm/w/messenger/pq/session.js +1 -0
  55. package/dist/esm/w/messenger/pq/spqr.d.ts +23 -0
  56. package/dist/esm/w/messenger/pq/spqr.js +1 -0
  57. package/dist/esm/w/messenger/pq/store-adapter.d.ts +33 -0
  58. package/dist/esm/w/messenger/pq/store-adapter.js +1 -0
  59. package/dist/esm/w/messenger/pq/types.d.ts +181 -0
  60. package/dist/esm/w/messenger/pq/types.js +1 -0
  61. package/dist/esm/w/messenger/session.d.ts +15 -16
  62. package/dist/esm/w/messenger/session.js +1 -1
  63. package/dist/esm/w/messenger/storage.d.ts +2 -0
  64. package/dist/esm/w/messenger/storage.js +1 -1
  65. package/dist/esm/w/messenger/types.d.ts +15 -1
  66. package/dist/esm/w/messenger/types.js +1 -1
  67. package/dist/esm/w/messenger/utils.js +1 -1
  68. package/dist/esm/w/query/object.js +1 -1
  69. package/package.json +43 -3
@@ -1 +1 @@
1
- import{toTxObject,toTxString,isValidDescription,MAX_DESCRIPTION_LENGTH,isValidName,PackageAddress,IsValidArgType,isValidU8,repositoryFn,parseValueType}from'../common.js';import{W_ERROR,WErrors}from'../exception.js';import{owner_receive,validObjects,valueToBcsBytes,uint2address}from'../util.js';import{GetObjectExisted,GetObject,GetObjectDescription}from'../common.js';import{GetAccountOrMark_Address}from'../local/index.js';import{LocalMark}from'../local/local.js';import{CallBase}from'./base.js';import{BuiltinPermissionIndex,newPermission}from'./permission.js';import{IdFrom,ObjectType,parseIdFrom}from'../query/object.js';import{create as a161a}from'./permission.js';import{queryObjectsWithType}from'../query/util.js';import{query_received}from'../query/received.js';export const MAX_POLICY_DESCRIPTION_LEN=0x1f4;export const MAX_POLICY_COUNT=0x32;export const MAX_POLICY_GUARD_COUNT=0xa;export const MAX_DATA_SIZE=0xa000;export const MAX_ID_COUNT_ONCE=0x64;export const MAX_REWARD_COUNT=0x14;export class CallRepository 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['Repository'],this['object_address']);if(!this['content'])W_ERROR(WErrors['InvalidParam'],'CallRepository_Data.data.object:'+this['object_address']);this['permission_address']=this['content']['permission'],!this['permission_address']&&W_ERROR(WErrors['InvalidParam'],'CallRepository_Data.data.object.permission\x20is\x20empty');}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=f=>{!c['includes'](f)&&c['push'](f);},e=f=>{this['permission_address']&&!b['includes'](f)&&b['push'](f);};this['permission_address']&&!this['object_address']&&e(BuiltinPermissionIndex['REPOSITORY_NEW']);this['permission_address']&&this['data']?.['description']!=null&&this['object_address']&&e(BuiltinPermissionIndex['REPOSITORY_DESCRIPTION']);this['permission_address']&&this['data']?.['policies']!=null&&e(BuiltinPermissionIndex['REPOSITORY_POLICY']);if(this['data']?.['data_add']!=null){!this['content']&&W_ERROR(WErrors['InvalidParam'],'CallRepository_Data.data.data_add\x20fail\x20because\x20the\x20Repository\x20content\x20not\x20ready');const f=this['content']['policies']['find'](g=>g['name']===this['data']['data_add']['name']);!f&&W_ERROR(WErrors['InvalidParam'],'Invalid\x20policy\x20name:\x20'+this['data']['data_add']['name']);if('items'in this['data']['data_add'])for(const g of this['data']['data_add']['items']){for(const h of g['data']){let i;if(typeof h['id']==='number'||typeof h['id']==='bigint'||typeof h['id']==='string')i=uint2address(h['id']);else{const j=await GetAccountOrMark_Address(h['id']);!j&&W_ERROR(WErrors['InvalidParam'],'Invalid\x20id\x20address:\x20'+h['id']),i=j;}h['id']=i;}if(g['write_guard']){const k=await LocalMark['Instance']()['get_address'](g['write_guard']);k?(!f['write_guard']['find'](l=>l['guard']===k)&&W_ERROR(WErrors['InvalidParam'],g['write_guard']+'\x20('+k+')\x20is\x20not\x20match\x20in\x20policy\x20'+f['name']+'\x20with\x20write_guards:\x20'+f['write_guard']['map'](l=>l['guard'])['join'](',\x20')),g['write_guard']=k,d(k)):W_ERROR(WErrors['InvalidParam'],'Invalid\x20write_guard\x20address:\x20'+g['write_guard']);}}else{if(this['data']['data_add']['write_guard']){const l=await LocalMark['Instance']()['get_address'](this['data']['data_add']['write_guard']);l?(!f['write_guard']['find'](m=>m['guard']===l)&&W_ERROR(WErrors['InvalidParam'],'Invalid\x20write_guard\x20address:\x20'+this['data']['data_add']['write_guard']+'\x20in\x20policy\x20'+f['name']),this['data']['data_add']['write_guard']=l,d(l)):W_ERROR(WErrors['InvalidParam'],'Invalid\x20write_guard\x20address:\x20'+this['data']['data_add']['write_guard']);}}}if(this['data']?.['data_remove']!=null){const m=this['content']['policies']['find'](n=>n['name']===this['data']['data_remove']['name']);!m&&W_ERROR(WErrors['InvalidParam'],'Invalid\x20policy\x20name:\x20'+this['data']['data_remove']['name']);if('items'in this['data']['data_remove'])for(const n of this['data']['data_remove']['items']){const o=[];for(const q of n['id']){let s;if(typeof q==='number'||typeof q==='bigint'||typeof q==='string')s=uint2address(q);else{const t=await GetAccountOrMark_Address(q);!t&&W_ERROR(WErrors['InvalidParam'],'Invalid\x20id\x20address:\x20'+q),s=t;}o['push'](s);}n['id']=o;if(n['write_guard']){const u=await LocalMark['Instance']()['get_address'](n['write_guard']);u?(!m['write_guard']['find'](v=>v['guard']===u)&&W_ERROR(WErrors['InvalidParam'],'Invalid\x20write_guard\x20address:\x20'+n['write_guard']+'\x20in\x20policy\x20'+m['name']),n['write_guard']=u,d(u)):W_ERROR(WErrors['InvalidParam'],'Invalid\x20write_guard\x20address:\x20'+n['write_guard']);}}else{if(this['data']['data_remove']['write_guard']){const v=await LocalMark['Instance']()['get_address'](this['data']['data_remove']['write_guard']);v?(!m['write_guard']['find'](w=>w['guard']===v)&&W_ERROR(WErrors['InvalidParam'],'Invalid\x20write_guard\x20address:\x20'+this['data']['data_remove']['write_guard']+'\x20in\x20policy\x20'+m['name']),this['data']['data_remove']['write_guard']=v,d(v)):W_ERROR(WErrors['InvalidParam'],'Invalid\x20write_guard\x20address:\x20'+this['data']['data_remove']['write_guard']);}}}this['permission_address']&&this['data']?.['rewards']!=null&&e(BuiltinPermissionIndex['REPOSITORY_REWARD']);this['permission_address']&&this['data']?.['owner_receive']!=null&&e(BuiltinPermissionIndex['REPOSITORY_OWNER_RECEIVE']);this['permission_address']&&this['data']?.['um']!==undefined&&e(BuiltinPermissionIndex['REPOSITORY_UM']);if(this['permission_address']||c['length']>0x0)return await this['check_permission_and_call'](a,this['permission_address'],b,c);return await this['exec'](a);}async['operate'](a,b,c,d){let e=this['permission_address'],f=this['object_address'];!this['object_address']&&(!e&&(e=newPermission(b,this['new_permission_description']??'')),e&&(f=newRepository(b,toTxObject(b,e),this['data']?.['description']??'',c)));(!f||!e)&&W_ERROR(WErrors['InvalidParam'],'CallRepository_Data.data.object:'+this['object_address']);this['data']?.['description']!=null&&this['object_address']&&description_set(b,f,e,this['data']['description'],c);if(this['data']?.['policies']!=null){(this['data']['policies']['op']==='set'||this['data']['policies']['op']==='add')&&await Promise['all'](this['data']['policies']['policy']['map'](async g=>{await Promise['all'](g['write_guard']['map'](async h=>{const i=await LocalMark['Instance']()['get_address'](h['guard']);i?h['guard']=i:W_ERROR(WErrors['InvalidParam'],'Invalid\x20write_guard\x20address:\x20'+h['guard']);}));if(g['quote_guard']&&typeof g['quote_guard']==='string'){const h=await LocalMark['Instance']()['get_address'](g['quote_guard']);h?g['quote_guard']=h:W_ERROR(WErrors['InvalidParam'],'Invalid\x20quote_guard\x20address:\x20'+g['quote_guard']);}}));switch(this['data']['policies']['op']){case'set':{policy_set(b,f,e,this['data']['policies']['policy'],c);break;}case'add':{policy_add(b,f,e,this['data']['policies']['policy'],c);break;}case'remove':{policy_remove(b,f,e,this['data']['policies']['policy'],c);break;}case'clear':{policy_clear(b,f,e,c);break;}}}if(this['data']?.['data_add']!=null&&this['content']){const g=this['content']['policies']['find'](h=>h['name']===this['data']['data_add']['name']);!g&&W_ERROR(WErrors['InvalidParam'],'policy\x20'+this['data']['data_add']['name']+'\x20not\x20found\x20in\x20policies\x20'+this['content']['policies']['map'](h=>h['name'])),'items'in this['data']['data_add']?data(b,f,g,this['data']['data_add']['items'],c):data_id_from(b,f,g,this['data']['data_add'],c);}if(this['data']?.['data_remove']!=null){const h=this['content']['policies']['find'](i=>i['name']===this['data']['data_remove']['name']);!h&&W_ERROR(WErrors['InvalidParam'],'policy\x20'+this['data']['data_remove']['name']+'\x20not\x20found\x20in\x20policies\x20'+this['content']['policies']['map'](i=>i['name'])),'items'in this['data']['data_remove']?data_remove(b,f,h,{'items':this['data']['data_remove']['items']},c):data_remove(b,f,h,{'write_guard':this['data']['data_remove']['write_guard']},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,f,e,c);const i=await queryObjectsWithType(a,this['data']['rewards']['objects'],ObjectType['Reward'],'reward::Reward',!![]);i['forEach'](j=>{reward_add(b,f,e,j['object'],j['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 j=await LocalMark['Instance']()['get_many_address_availables'](this['data']['rewards']['objects']);reward_remove(b,f,e,j,c);break;}case'clear':{reward_clear(b,f,e,c);break;}}this['data']['owner_receive']!=null&&this['object_address']&&(this['data']['owner_receive']==='recently'&&(this['data']['owner_receive']=await query_received({'object':this['object_address'],'all_type':!![]})),await owner_receive(b,f,e,this['data']['owner_receive'],undefined,k=>PackageAddress+'::repository::'+k,c));if(this['data']['um']!==undefined){let k=null;this['data']['um']&&(k=await LocalMark['Instance']()['get_address'](this['data']['um'])||null,!k&&W_ERROR(WErrors['InvalidParam'],'CallRepository_Data.data.um:'+this['data']['um'])),um_set(b,f,e,k,c);}if(!this['permission_address']){const l=GetObject(this['data']?.['object']);await this['new_with_mark'](a,b,ObjectType['Permission'],a161a(b,e),GetObject(l['permission']));}!this['object_address']&&await this['new_with_mark'](a,b,ObjectType['Repository'],create(b,f),GetObject(this['data']?.['object']));}}export function create(a,b){return validObjects([b]),a['moveCall']({'target':repositoryFn('create'),'arguments':[toTxObject(a,b)]});}function policy_guard(a,b){return validObjects([b['guard']]),b['id_from_submission']!=null&&!isValidU8(b['id_from_submission'])&&W_ERROR(WErrors['IsValidU8'],'Id\x20from\x20submission\x20'+b['id_from_submission']+'\x20is\x20not\x20valid'),b['data_from_submission']!=null&&!isValidU8(b['data_from_submission'])&&W_ERROR(WErrors['IsValidU8'],'Data\x20from\x20submission\x20'+b['data_from_submission']+'\x20is\x20not\x20valid'),a['moveCall']({'target':repositoryFn('policy_guard'),'arguments':[toTxObject(a,b['guard']),a['pure']['option']('u8',b['id_from_submission']??null),a['pure']['option']('u8',b['data_from_submission']??null)]});}export function policy(a,b){typeof b['name']==='string'&&!isValidName(b['name'])&&W_ERROR(WErrors['InvalidParam'],'Policy\x20name\x20'+b['name']+'\x20is\x20not\x20valid');typeof b['description']==='string'&&!isValidDescription(b['description'])&&W_ERROR(WErrors['IsValidDescription'],'Description\x20exceeds\x20maximum\x20length\x20'+MAX_DESCRIPTION_LENGTH);validObjects([b['quote_guard'],...b['write_guard']['map'](e=>e['guard'])]);const c=parseIdFrom(b['id_from']),d=a['moveCall']({'target':repositoryFn('policy'),'arguments':[toTxString(a,b['name']),toTxString(a,b['description']),a['pure']['u8'](c),a['pure']['u8'](b['value_type'])]});if(b['quote_guard'])a['moveCall']({'target':repositoryFn('policy_quote_guard_set'),'arguments':[d,toTxObject(a,b['quote_guard'])]});else b['quote_guard']===null&&a['moveCall']({'target':repositoryFn('policy_quote_guard_none'),'arguments':[d]});return b['write_guard']['length']>0x0&&a['moveCall']({'target':repositoryFn('policy_write_guard_set'),'arguments':[d,a['makeMoveVec']({'elements':b['write_guard']['map'](e=>policy_guard(a,e)),'type':PackageAddress+'::repository::PolicyGuard'})]}),d;}export async function data_id_from(a,b,c,d,e){const f=parseIdFrom(c['id_from']);f===IdFrom['None']&&W_ERROR(WErrors['InvalidParam'],'id_from\x20must\x20be\x20set\x20when\x20id_from\x20is\x20IdFrom.None');if(d['write_guard']){!e&&W_ERROR(WErrors['InvalidParam'],'passport\x20is\x20required\x20when\x20write_guard\x20is\x20specified');if(c['write_guard']['find'](g=>g['guard']===d['write_guard'])){const g=parseValueType(c['value_type']);a['moveCall']({'target':repositoryFn('data_when_id_from_set_with_passport'),'arguments':[toTxObject(a,b),toTxString(a,c['name']),a['pure']['address'](d['write_guard']),a['pure']['vector']('u8',await valueToBcsBytes(g,d['data'])),a['object']['clock'](),e]});}else W_ERROR(WErrors['InvalidParam'],'Write\x20guard\x20'+d['write_guard']+'\x20is\x20not\x20in\x20policy\x20'+c['name']);}else{if(c['write_guard']['length']===0x0){const h=parseValueType(c['value_type']);a['moveCall']({'target':repositoryFn('data_when_id_from_set'),'arguments':[toTxObject(a,b),toTxString(a,c['name']),a['pure']['vector']('u8',await valueToBcsBytes(h,d['data'])),a['object']['clock']()]});}else W_ERROR(WErrors['InvalidParam'],'specify\x20write\x20guard\x20in\x20policy\x20'+c['write_guard']['map'](i=>i['guard']));}}export function um_set(a,b,c,d,e){validObjects([b,c]),d?e?a['moveCall']({'target':repositoryFn('um_set_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),e,toTxObject(a,d),a['object']['mutRegistrar'](),a['object']['clock']()]}):a['moveCall']({'target':repositoryFn('um_set'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,d),a['object']['mutRegistrar'](),a['object']['clock']()]}):e?a['moveCall']({'target':repositoryFn('um_none_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),e,a['object']['mutRegistrar']()]}):a['moveCall']({'target':repositoryFn('um_none'),'arguments':[toTxObject(a,b),toTxObject(a,c),a['object']['mutRegistrar']()]});}export async function data(a,b,c,d,e){validObjects([b]);c['id_from']!==IdFrom['None']&&W_ERROR(WErrors['InvalidParam'],'id_from\x20must\x20be\x20IdFrom.None\x20when\x20items\x20is\x20provided');const f=[],g=[],h=[];for(const i of d){if(!i['write_guard'])c['write_guard']['length']===0x0?f['push'](i):W_ERROR(WErrors['InvalidParam'],'specify\x20write\x20guard\x20in\x20policy\x20'+c['write_guard']['map'](j=>j['guard']));else{const j=i['write_guard'],k=c['write_guard']['find'](m=>m['guard']===j);!k&&W_ERROR(WErrors['InvalidParam'],'Guard\x20'+j+'\x20not\x20found\x20in\x20policy\x20'+c['write_guard']['map'](m=>m['guard']));const l=k['id_from_submission']!==undefined;if(l){if(i['data']['length']>0x0){const m=i['data'][i['data']['length']-0x1],n=h['findIndex'](o=>o['guard']===j);n>=0x0?h[n]={'guard':j,'id':m['id'],'data':m['data']}:h['push']({'guard':j,'id':m['id'],'data':m['data']});}}else{const o=g['find'](p=>p['guard']===j);o?o['items']['push'](i):g['push']({'guard':j,'items':[i]});}}}if(f['length']>0x0){const p=parseValueType(c['value_type']),q=f['flatMap'](s=>s['data']['map'](t=>t['id'])),r=await Promise['all'](f['flatMap'](s=>s['data'])['map'](async s=>await valueToBcsBytes(p,s['data'])));q['length']!==r['length']&&W_ERROR(WErrors['InvalidParam'],'Id\x20and\x20data\x20arrays\x20must\x20have\x20the\x20same\x20length'),a['moveCall']({'target':repositoryFn('id_data'),'arguments':[toTxObject(a,b),toTxString(a,c['name']),a['pure']['vector']('address',q),a['makeMoveVec']({'elements':r['map'](s=>a['pure']['vector']('u8',s)),'type':'vector<u8>'})]});}if(h['length']>0x0){!e&&W_ERROR(WErrors['InvalidParam'],'Guard\x20specified\x20but\x20no\x20passport\x20provided');const s=parseValueType(c['value_type']),t=h['map'](w=>w['id']),u=await Promise['all'](h['map'](async w=>await valueToBcsBytes(s,w['data']))),v=h['map'](w=>w['guard']);(t['length']!==u['length']||t['length']!==v['length'])&&W_ERROR(WErrors['InvalidParam'],'Id,\x20data,\x20and\x20guard\x20arrays\x20must\x20have\x20the\x20same\x20length'),a['moveCall']({'target':repositoryFn('id_data_mixed_with_passport'),'arguments':[toTxObject(a,b),toTxString(a,c['name']),a['pure']['vector']('address',v),a['pure']['vector']('address',t),a['makeMoveVec']({'elements':u['map'](w=>a['pure']['vector']('u8',w)),'type':'vector<u8>'}),toTxObject(a,e)]});}for(const {guard:w,items:x}of g){!e&&W_ERROR(WErrors['InvalidParam'],'Guard\x20specified\x20but\x20no\x20passport\x20provided');const y=parseValueType(c['value_type']),z=x['flatMap'](C=>C['data']),A=z['map'](C=>C['id']),B=await Promise['all'](z['map'](async C=>await valueToBcsBytes(y,C['data'])));A['length']!==B['length']&&W_ERROR(WErrors['InvalidParam'],'Id\x20and\x20data\x20arrays\x20must\x20have\x20the\x20same\x20length\x20for\x20guard\x20'+w),a['moveCall']({'target':repositoryFn('id_data_with_passport'),'arguments':[toTxObject(a,b),toTxString(a,c['name']),a['pure']['address'](w),a['pure']['vector']('address',A),a['makeMoveVec']({'elements':B['map'](C=>a['pure']['vector']('u8',C)),'type':'vector<u8>'}),toTxObject(a,e)]});}}export function newRepository(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':repositoryFn('new_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,d),toTxString(a,c),a['object']['mutRegistrar'](),a['object']['clock']()]}):a['moveCall']({'target':repositoryFn('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\x20exceeds\x20maximum\x20length\x20'+MAX_DESCRIPTION_LENGTH),e?a['moveCall']({'target':repositoryFn('description_set_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,e),toTxString(a,d)]}):a['moveCall']({'target':repositoryFn('description_set'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxString(a,d)]});}export function policy_add(a,b,c,d,e){if(d['length']===0x0)return;validObjects([b,c,e]),e?a['moveCall']({'target':repositoryFn('policy_add_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,e),a['makeMoveVec']({'elements':d['map'](f=>policy(a,f)),'type':PackageAddress+'::repository::PolicyRule'}),a['object']['mutRegistrar'](),a['object']['clock']()]}):a['moveCall']({'target':repositoryFn('policy_add'),'arguments':[toTxObject(a,b),toTxObject(a,c),a['makeMoveVec']({'elements':d['map'](f=>policy(a,f)),'type':PackageAddress+'::repository::PolicyRule'}),a['object']['mutRegistrar'](),a['object']['clock']()]});}export function policy_set(a,b,c,d,e){validObjects([b,c,e]),e?a['moveCall']({'target':repositoryFn('policy_set_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,e),a['makeMoveVec']({'elements':d['map'](f=>policy(a,f)),'type':PackageAddress+'::repository::PolicyRule'}),a['object']['mutRegistrar'](),a['object']['clock']()]}):a['moveCall']({'target':repositoryFn('policy_set'),'arguments':[toTxObject(a,b),toTxObject(a,c),a['makeMoveVec']({'elements':d['map'](f=>policy(a,f)),'type':PackageAddress+'::repository::PolicyRule'}),a['object']['mutRegistrar'](),a['object']['clock']()]});}export function policy_remove(a,b,c,d,e){if(d['length']===0x0)return;validObjects([b,c,e]),e?a['moveCall']({'target':repositoryFn('policy_remove_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,e),a['pure']['vector']('string',d),a['object']['mutRegistrar']()]}):a['moveCall']({'target':repositoryFn('policy_remove'),'arguments':[toTxObject(a,b),toTxObject(a,c),a['pure']['vector']('string',d),a['object']['mutRegistrar']()]});}export function policy_clear(a,b,c,d){validObjects([b,c,d]),d?a['moveCall']({'target':repositoryFn('policy_clear_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,d),a['object']['mutRegistrar']()]}):a['moveCall']({'target':repositoryFn('policy_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\x20not\x20valid'),f?a['moveCall']({'target':repositoryFn('reward_add_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,f),a['object'](d)],'typeArguments':[e]}):a['moveCall']({'target':repositoryFn('reward_add'),'arguments':[toTxObject(a,b),toTxObject(a,c),a['object'](d)],'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':repositoryFn('reward_remove_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,e),a['pure']['vector']('address',d)]}):a['moveCall']({'target':repositoryFn('reward_remove'),'arguments':[toTxObject(a,b),toTxObject(a,c),a['pure']['vector']('address',d)]});}export function reward_clear(a,b,c,d){validObjects([b,c,d]),d?a['moveCall']({'target':repositoryFn('reward_clear_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,d)]}):a['moveCall']({'target':repositoryFn('reward_clear'),'arguments':[toTxObject(a,b),toTxObject(a,c)]});}export async function data_remove(a,b,c,d,e){validObjects([b]);if('items'in d){c['id_from']!==IdFrom['None']&&W_ERROR(WErrors['InvalidParam'],'id_from\x20must\x20be\x20IdFrom.None\x20when\x20items\x20is\x20provided');const f=[],g=[],h=[];for(const i of d['items']){if(!i['write_guard'])c['write_guard']['length']===0x0?f['push'](...i['id']):W_ERROR(WErrors['InvalidParam'],'specify\x20write\x20guard\x20in\x20policy\x20'+c['write_guard']['map'](j=>j['guard']));else{const j=i['write_guard'],k=c['write_guard']['find'](m=>m['guard']===j);!k&&W_ERROR(WErrors['InvalidParam'],'Guard\x20'+j+'\x20not\x20found\x20in\x20policy\x20'+c['write_guard']['map'](m=>m['guard']));const l=k['id_from_submission']!==undefined;if(l)h['push'](j);else{const m=g['find'](n=>n['guard']===j);m?m['id']['push'](...i['id']):g['push']({'guard':j,'id':[...i['id']]});}}}if(f['length']>0x0){c['write_guard']['length']!==0x0&&W_ERROR(WErrors['InvalidParam'],'specify\x20write\x20guard\x20in\x20policy\x20'+c['write_guard']['map'](o=>o['guard']));const n=[...new Set(f)];a['moveCall']({'target':repositoryFn('id_data_remove'),'arguments':[toTxObject(a,b),toTxString(a,c['name']),a['pure']['vector']('address',n)]});}if(h['length']>0x0){!e&&W_ERROR(WErrors['InvalidParam'],'Guard\x20specified\x20but\x20no\x20passport\x20provided');const o=[...new Set(h)];a['moveCall']({'target':repositoryFn('id_data_mixed_remove_with_passport'),'arguments':[toTxObject(a,b),toTxString(a,c['name']),a['pure']['vector']('address',o),toTxObject(a,e)]});}for(const {guard:p,id:q}of g){const r=[...new Set(q)];a['moveCall']({'target':repositoryFn('id_data_remove_with_passport'),'arguments':[toTxObject(a,b),toTxString(a,c['name']),a['pure']['address'](p),a['pure']['vector']('address',r),toTxObject(a,e)]});}}else{const s=d['write_guard'];c['id_from']===IdFrom['None']&&W_ERROR(WErrors['InvalidParam'],'id_from\x20must\x20be\x20set\x20when\x20id_from\x20is\x20IdFrom.None'),s?c['write_guard']['find'](t=>t['guard']===s)?a['moveCall']({'target':repositoryFn('data_remove_when_id_from_set_with_passport'),'arguments':[toTxObject(a,b),toTxString(a,c['name']),a['pure']['address'](s),a['object']['clock'](),toTxObject(a,e)]}):W_ERROR(WErrors['InvalidParam'],'Write\x20guard\x20'+s+'\x20is\x20not\x20in\x20policy\x20'+c['write_guard']['map'](t=>t['guard'])):c['write_guard']['length']===0x0?a['moveCall']({'target':repositoryFn('data_remove_when_id_from_set'),'arguments':[toTxObject(a,b),toTxString(a,c['name']),a['object']['clock']()]}):W_ERROR(WErrors['InvalidParam'],'specify\x20write\x20guard\x20in\x20policy\x20'+c['write_guard']['map'](t=>t['guard']));}}
1
+ import{toTxObject,toTxString,isValidDescription,MAX_DESCRIPTION_LENGTH,isValidName,PackageAddress,IsValidArgType,isValidU8,repositoryFn,parseValueType}from'../common.js';import{W_ERROR,WErrors}from'../exception.js';import{owner_receive,validObjects,valueToBcsBytes,uint2address}from'../util.js';import{GetObjectExisted,GetObject,GetObjectDescription}from'../common.js';import{GetAccountOrMark_Address}from'../local/index.js';import{LocalMark}from'../local/local.js';import{CallBase}from'./base.js';import{BuiltinPermissionIndex,newPermission}from'./permission.js';import{IdFrom,ObjectType,parseIdFrom}from'../query/object.js';import{create as a161a}from'./permission.js';import{queryObjectsWithType}from'../query/util.js';import{query_received}from'../query/received.js';export const MAX_POLICY_DESCRIPTION_LEN=0x1f4;export const MAX_POLICY_COUNT=0x32;export const MAX_POLICY_GUARD_COUNT=0xa;export const MAX_DATA_SIZE=0xa000;export const MAX_ID_COUNT_ONCE=0x64;export const MAX_REWARD_COUNT=0x14;export class CallRepository 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['Repository'],this['object_address']);if(!this['content'])W_ERROR(WErrors['InvalidParam'],'CallRepository_Data.data.object:'+this['object_address']);this['permission_address']=this['content']['permission'],!this['permission_address']&&W_ERROR(WErrors['InvalidParam'],'CallRepository_Data.data.object.permission\x20is\x20empty');}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=f=>{!c['includes'](f)&&c['push'](f);},e=f=>{this['permission_address']&&!b['includes'](f)&&b['push'](f);};this['permission_address']&&!this['object_address']&&e(BuiltinPermissionIndex['REPOSITORY_NEW']);this['permission_address']&&this['data']?.['description']!=null&&this['object_address']&&e(BuiltinPermissionIndex['REPOSITORY_DESCRIPTION']);this['permission_address']&&this['data']?.['policies']!=null&&e(BuiltinPermissionIndex['REPOSITORY_POLICY']);if(this['data']?.['data_add']!=null){!this['content']&&W_ERROR(WErrors['InvalidParam'],'CallRepository_Data.data.data_add\x20fail\x20because\x20the\x20Repository\x20content\x20not\x20ready');const f=this['content']['policies']['find'](g=>g['name']===this['data']['data_add']['name']);!f&&W_ERROR(WErrors['InvalidParam'],'Invalid\x20policy\x20name:\x20'+this['data']['data_add']['name']);if('items'in this['data']['data_add'])for(const g of this['data']['data_add']['items']){for(const h of g['data']){let i;if(typeof h['id']==='number'||typeof h['id']==='bigint'||typeof h['id']==='string')i=uint2address(h['id']);else{const j=await GetAccountOrMark_Address(h['id']);!j&&W_ERROR(WErrors['InvalidParam'],'Invalid\x20id\x20address:\x20'+h['id']),i=j;}h['id']=i;}if(g['write_guard']){const k=await LocalMark['Instance']()['get_address'](g['write_guard']);k?(!f['write_guard']['find'](l=>l['guard']===k)&&W_ERROR(WErrors['InvalidParam'],g['write_guard']+'\x20('+k+')\x20is\x20not\x20match\x20in\x20policy\x20'+f['name']+'\x20with\x20write_guards:\x20'+f['write_guard']['map'](l=>l['guard'])['join'](',\x20')),g['write_guard']=k,d(k)):W_ERROR(WErrors['InvalidParam'],'Invalid\x20write_guard\x20address:\x20'+g['write_guard']);}}else{if(this['data']['data_add']['write_guard']){const l=await LocalMark['Instance']()['get_address'](this['data']['data_add']['write_guard']);l?(!f['write_guard']['find'](m=>m['guard']===l)&&W_ERROR(WErrors['InvalidParam'],'Invalid\x20write_guard\x20address:\x20'+this['data']['data_add']['write_guard']+'\x20in\x20policy\x20'+f['name']),this['data']['data_add']['write_guard']=l,d(l)):W_ERROR(WErrors['InvalidParam'],'Invalid\x20write_guard\x20address:\x20'+this['data']['data_add']['write_guard']);}}}if(this['data']?.['data_remove']!=null){const m=this['content']['policies']['find'](n=>n['name']===this['data']['data_remove']['name']);!m&&W_ERROR(WErrors['InvalidParam'],'Invalid\x20policy\x20name:\x20'+this['data']['data_remove']['name']);if('items'in this['data']['data_remove'])for(const n of this['data']['data_remove']['items']){const o=[];for(const q of n['id']){let s;if(typeof q==='number'||typeof q==='bigint'||typeof q==='string')s=uint2address(q);else{const t=await GetAccountOrMark_Address(q);!t&&W_ERROR(WErrors['InvalidParam'],'Invalid\x20id\x20address:\x20'+q),s=t;}o['push'](s);}n['id']=o;if(n['write_guard']){const u=await LocalMark['Instance']()['get_address'](n['write_guard']);u?(!m['write_guard']['find'](v=>v['guard']===u)&&W_ERROR(WErrors['InvalidParam'],'Invalid\x20write_guard\x20address:\x20'+n['write_guard']+'\x20in\x20policy\x20'+m['name']),n['write_guard']=u,d(u)):W_ERROR(WErrors['InvalidParam'],'Invalid\x20write_guard\x20address:\x20'+n['write_guard']);}}else{if(this['data']['data_remove']['write_guard']){const v=await LocalMark['Instance']()['get_address'](this['data']['data_remove']['write_guard']);v?(!m['write_guard']['find'](w=>w['guard']===v)&&W_ERROR(WErrors['InvalidParam'],'Invalid\x20write_guard\x20address:\x20'+this['data']['data_remove']['write_guard']+'\x20in\x20policy\x20'+m['name']),this['data']['data_remove']['write_guard']=v,d(v)):W_ERROR(WErrors['InvalidParam'],'Invalid\x20write_guard\x20address:\x20'+this['data']['data_remove']['write_guard']);}}}this['permission_address']&&this['data']?.['rewards']!=null&&e(BuiltinPermissionIndex['REPOSITORY_REWARD']);this['permission_address']&&this['data']?.['owner_receive']!=null&&e(BuiltinPermissionIndex['REPOSITORY_OWNER_RECEIVE']);this['permission_address']&&this['data']?.['um']!==undefined&&e(BuiltinPermissionIndex['REPOSITORY_UM']);if(this['permission_address']||c['length']>0x0)return await this['check_permission_and_call'](a,this['permission_address'],b,c);return await this['exec'](a);}async['operate'](a,b,c,d){let e=this['permission_address'],f=this['object_address'];!this['object_address']&&(!e&&(e=newPermission(b,this['new_permission_description']??'')),e&&(f=newRepository(b,toTxObject(b,e),this['data']?.['description']??'',c)));(!f||!e)&&W_ERROR(WErrors['InvalidParam'],'CallRepository_Data.data.object:'+this['object_address']);this['data']?.['description']!=null&&this['object_address']&&description_set(b,f,e,this['data']['description'],c);if(this['data']?.['policies']!=null){(this['data']['policies']['op']==='set'||this['data']['policies']['op']==='add')&&await Promise['all'](this['data']['policies']['policy']['map'](async g=>{await Promise['all'](g['write_guard']['map'](async h=>{const i=await LocalMark['Instance']()['get_address'](h['guard']);i?h['guard']=i:W_ERROR(WErrors['InvalidParam'],'Invalid\x20write_guard\x20address:\x20'+h['guard']);}));if(g['quote_guard']&&typeof g['quote_guard']==='string'){const h=await LocalMark['Instance']()['get_address'](g['quote_guard']);h?g['quote_guard']=h:W_ERROR(WErrors['InvalidParam'],'Invalid\x20quote_guard\x20address:\x20'+g['quote_guard']);}}));switch(this['data']['policies']['op']){case'set':{policy_set(b,f,e,this['data']['policies']['policy'],c);break;}case'add':{policy_add(b,f,e,this['data']['policies']['policy'],c);break;}case'remove':{policy_remove(b,f,e,this['data']['policies']['policy'],c);break;}case'clear':{policy_clear(b,f,e,c);break;}}}if(this['data']?.['data_add']!=null&&this['content']){const g=this['content']['policies']['find'](h=>h['name']===this['data']['data_add']['name']);!g&&W_ERROR(WErrors['InvalidParam'],'policy\x20'+this['data']['data_add']['name']+'\x20not\x20found\x20in\x20policies\x20'+this['content']['policies']['map'](h=>h['name'])),'items'in this['data']['data_add']?data(b,f,g,this['data']['data_add']['items'],c):data_id_from(b,f,g,this['data']['data_add'],c);}if(this['data']?.['data_remove']!=null){const h=this['content']['policies']['find'](i=>i['name']===this['data']['data_remove']['name']);!h&&W_ERROR(WErrors['InvalidParam'],'policy\x20'+this['data']['data_remove']['name']+'\x20not\x20found\x20in\x20policies\x20'+this['content']['policies']['map'](i=>i['name'])),'items'in this['data']['data_remove']?data_remove(b,f,h,{'items':this['data']['data_remove']['items']},c):data_remove(b,f,h,{'write_guard':this['data']['data_remove']['write_guard']},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,f,e,c);const i=await queryObjectsWithType(a,this['data']['rewards']['objects'],ObjectType['Reward'],'reward::Reward',!![]);i['forEach'](j=>{reward_add(b,f,e,j['object'],j['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 j=await LocalMark['Instance']()['get_many_address_availables'](this['data']['rewards']['objects']);reward_remove(b,f,e,j,c);break;}case'clear':{reward_clear(b,f,e,c);break;}}this['data']['owner_receive']!=null&&this['object_address']&&(this['data']['owner_receive']==='recently'&&(this['data']['owner_receive']=await query_received({'object':this['object_address'],'all_type':!![]})),await owner_receive(b,f,e,this['data']['owner_receive'],undefined,k=>PackageAddress+'::repository::'+k,c));if(this['data']['um']!==undefined){let k=null;this['data']['um']&&(k=await LocalMark['Instance']()['get_address'](this['data']['um'])||null,!k&&W_ERROR(WErrors['InvalidParam'],'CallRepository_Data.data.um:'+this['data']['um'])),um_set(b,f,e,k,c);}if(!this['permission_address']){const l=GetObject(this['data']?.['object']);await this['new_with_mark'](a,b,ObjectType['Permission'],a161a(b,e),GetObject(l['permission']));}!this['object_address']&&await this['new_with_mark'](a,b,ObjectType['Repository'],create(b,f),GetObject(this['data']?.['object']));}}export function create(a,b){return validObjects([b]),a['moveCall']({'target':repositoryFn('create'),'arguments':[toTxObject(a,b)]});}function policy_guard(a,b){return validObjects([b['guard']]),b['id_from_submission']!=null&&!isValidU8(b['id_from_submission'])&&W_ERROR(WErrors['IsValidU8'],'Id\x20from\x20submission\x20'+b['id_from_submission']+'\x20is\x20not\x20valid'),b['data_from_submission']!=null&&!isValidU8(b['data_from_submission'])&&W_ERROR(WErrors['IsValidU8'],'Data\x20from\x20submission\x20'+b['data_from_submission']+'\x20is\x20not\x20valid'),a['moveCall']({'target':repositoryFn('policy_guard'),'arguments':[toTxObject(a,b['guard']),a['pure']['option']('u8',b['id_from_submission']??null),a['pure']['option']('u8',b['data_from_submission']??null)]});}export function policy(a,b){typeof b['name']==='string'&&!isValidName(b['name'])&&W_ERROR(WErrors['InvalidParam'],'Policy\x20name\x20'+b['name']+'\x20is\x20not\x20valid');typeof b['description']==='string'&&!isValidDescription(b['description'])&&W_ERROR(WErrors['IsValidDescription'],'Description\x20exceeds\x20maximum\x20length\x20'+MAX_DESCRIPTION_LENGTH);validObjects([b['quote_guard'],...b['write_guard']['map'](f=>f['guard'])]);const c=parseIdFrom(b['id_from']),d=parseValueType(b['value_type']),e=a['moveCall']({'target':repositoryFn('policy'),'arguments':[toTxString(a,b['name']),toTxString(a,b['description']),a['pure']['u8'](c),a['pure']['u8'](d)]});if(b['quote_guard'])a['moveCall']({'target':repositoryFn('policy_quote_guard_set'),'arguments':[e,toTxObject(a,b['quote_guard'])]});else b['quote_guard']===null&&a['moveCall']({'target':repositoryFn('policy_quote_guard_none'),'arguments':[e]});return b['write_guard']['length']>0x0&&a['moveCall']({'target':repositoryFn('policy_write_guard_set'),'arguments':[e,a['makeMoveVec']({'elements':b['write_guard']['map'](f=>policy_guard(a,f)),'type':PackageAddress+'::repository::PolicyGuard'})]}),e;}export async function data_id_from(a,b,c,d,e){const f=parseIdFrom(c['id_from']);f===IdFrom['None']&&W_ERROR(WErrors['InvalidParam'],'id_from\x20must\x20be\x20set\x20when\x20id_from\x20is\x20IdFrom.None');if(d['write_guard']){!e&&W_ERROR(WErrors['InvalidParam'],'passport\x20is\x20required\x20when\x20write_guard\x20is\x20specified');if(c['write_guard']['find'](g=>g['guard']===d['write_guard'])){const g=parseValueType(c['value_type']);a['moveCall']({'target':repositoryFn('data_when_id_from_set_with_passport'),'arguments':[toTxObject(a,b),toTxString(a,c['name']),a['pure']['address'](d['write_guard']),a['pure']['vector']('u8',await valueToBcsBytes(g,d['data'])),a['object']['clock'](),e]});}else W_ERROR(WErrors['InvalidParam'],'Write\x20guard\x20'+d['write_guard']+'\x20is\x20not\x20in\x20policy\x20'+c['name']);}else{if(c['write_guard']['length']===0x0){const h=parseValueType(c['value_type']);a['moveCall']({'target':repositoryFn('data_when_id_from_set'),'arguments':[toTxObject(a,b),toTxString(a,c['name']),a['pure']['vector']('u8',await valueToBcsBytes(h,d['data'])),a['object']['clock']()]});}else W_ERROR(WErrors['InvalidParam'],'specify\x20write\x20guard\x20in\x20policy\x20'+c['write_guard']['map'](i=>i['guard']));}}export function um_set(a,b,c,d,e){validObjects([b,c]),d?e?a['moveCall']({'target':repositoryFn('um_set_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),e,toTxObject(a,d),a['object']['mutRegistrar'](),a['object']['clock']()]}):a['moveCall']({'target':repositoryFn('um_set'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,d),a['object']['mutRegistrar'](),a['object']['clock']()]}):e?a['moveCall']({'target':repositoryFn('um_none_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),e,a['object']['mutRegistrar']()]}):a['moveCall']({'target':repositoryFn('um_none'),'arguments':[toTxObject(a,b),toTxObject(a,c),a['object']['mutRegistrar']()]});}export async function data(a,b,c,d,e){validObjects([b]);c['id_from']!==IdFrom['None']&&W_ERROR(WErrors['InvalidParam'],'id_from\x20must\x20be\x20IdFrom.None\x20when\x20items\x20is\x20provided');const f=[],g=[],h=[];for(const i of d){if(!i['write_guard'])c['write_guard']['length']===0x0?f['push'](i):W_ERROR(WErrors['InvalidParam'],'specify\x20write\x20guard\x20in\x20policy\x20'+c['write_guard']['map'](j=>j['guard']));else{const j=i['write_guard'],k=c['write_guard']['find'](m=>m['guard']===j);!k&&W_ERROR(WErrors['InvalidParam'],'Guard\x20'+j+'\x20not\x20found\x20in\x20policy\x20'+c['write_guard']['map'](m=>m['guard']));const l=k['id_from_submission']!==undefined;if(l){if(i['data']['length']>0x0){const m=i['data'][i['data']['length']-0x1],n=h['findIndex'](o=>o['guard']===j);n>=0x0?h[n]={'guard':j,'id':m['id'],'data':m['data']}:h['push']({'guard':j,'id':m['id'],'data':m['data']});}}else{const o=g['find'](p=>p['guard']===j);o?o['items']['push'](i):g['push']({'guard':j,'items':[i]});}}}if(f['length']>0x0){const p=parseValueType(c['value_type']),q=f['flatMap'](s=>s['data']['map'](t=>t['id'])),r=await Promise['all'](f['flatMap'](s=>s['data'])['map'](async s=>await valueToBcsBytes(p,s['data'])));q['length']!==r['length']&&W_ERROR(WErrors['InvalidParam'],'Id\x20and\x20data\x20arrays\x20must\x20have\x20the\x20same\x20length'),a['moveCall']({'target':repositoryFn('id_data'),'arguments':[toTxObject(a,b),toTxString(a,c['name']),a['pure']['vector']('address',q),a['makeMoveVec']({'elements':r['map'](s=>a['pure']['vector']('u8',s)),'type':'vector<u8>'})]});}if(h['length']>0x0){!e&&W_ERROR(WErrors['InvalidParam'],'Guard\x20specified\x20but\x20no\x20passport\x20provided');const s=parseValueType(c['value_type']),t=h['map'](w=>w['id']),u=await Promise['all'](h['map'](async w=>await valueToBcsBytes(s,w['data']))),v=h['map'](w=>w['guard']);(t['length']!==u['length']||t['length']!==v['length'])&&W_ERROR(WErrors['InvalidParam'],'Id,\x20data,\x20and\x20guard\x20arrays\x20must\x20have\x20the\x20same\x20length'),a['moveCall']({'target':repositoryFn('id_data_mixed_with_passport'),'arguments':[toTxObject(a,b),toTxString(a,c['name']),a['pure']['vector']('address',v),a['pure']['vector']('address',t),a['makeMoveVec']({'elements':u['map'](w=>a['pure']['vector']('u8',w)),'type':'vector<u8>'}),toTxObject(a,e)]});}for(const {guard:w,items:x}of g){!e&&W_ERROR(WErrors['InvalidParam'],'Guard\x20specified\x20but\x20no\x20passport\x20provided');const y=parseValueType(c['value_type']),z=x['flatMap'](C=>C['data']),A=z['map'](C=>C['id']),B=await Promise['all'](z['map'](async C=>await valueToBcsBytes(y,C['data'])));A['length']!==B['length']&&W_ERROR(WErrors['InvalidParam'],'Id\x20and\x20data\x20arrays\x20must\x20have\x20the\x20same\x20length\x20for\x20guard\x20'+w),a['moveCall']({'target':repositoryFn('id_data_with_passport'),'arguments':[toTxObject(a,b),toTxString(a,c['name']),a['pure']['address'](w),a['pure']['vector']('address',A),a['makeMoveVec']({'elements':B['map'](C=>a['pure']['vector']('u8',C)),'type':'vector<u8>'}),toTxObject(a,e)]});}}export function newRepository(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':repositoryFn('new_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,d),toTxString(a,c),a['object']['mutRegistrar'](),a['object']['clock']()]}):a['moveCall']({'target':repositoryFn('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\x20exceeds\x20maximum\x20length\x20'+MAX_DESCRIPTION_LENGTH),e?a['moveCall']({'target':repositoryFn('description_set_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,e),toTxString(a,d)]}):a['moveCall']({'target':repositoryFn('description_set'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxString(a,d)]});}export function policy_add(a,b,c,d,e){if(d['length']===0x0)return;validObjects([b,c,e]),e?a['moveCall']({'target':repositoryFn('policy_add_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,e),a['makeMoveVec']({'elements':d['map'](f=>policy(a,f)),'type':PackageAddress+'::repository::PolicyRule'}),a['object']['mutRegistrar'](),a['object']['clock']()]}):a['moveCall']({'target':repositoryFn('policy_add'),'arguments':[toTxObject(a,b),toTxObject(a,c),a['makeMoveVec']({'elements':d['map'](f=>policy(a,f)),'type':PackageAddress+'::repository::PolicyRule'}),a['object']['mutRegistrar'](),a['object']['clock']()]});}export function policy_set(a,b,c,d,e){validObjects([b,c,e]),e?a['moveCall']({'target':repositoryFn('policy_set_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,e),a['makeMoveVec']({'elements':d['map'](f=>policy(a,f)),'type':PackageAddress+'::repository::PolicyRule'}),a['object']['mutRegistrar'](),a['object']['clock']()]}):a['moveCall']({'target':repositoryFn('policy_set'),'arguments':[toTxObject(a,b),toTxObject(a,c),a['makeMoveVec']({'elements':d['map'](f=>policy(a,f)),'type':PackageAddress+'::repository::PolicyRule'}),a['object']['mutRegistrar'](),a['object']['clock']()]});}export function policy_remove(a,b,c,d,e){if(d['length']===0x0)return;validObjects([b,c,e]),e?a['moveCall']({'target':repositoryFn('policy_remove_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,e),a['pure']['vector']('string',d),a['object']['mutRegistrar']()]}):a['moveCall']({'target':repositoryFn('policy_remove'),'arguments':[toTxObject(a,b),toTxObject(a,c),a['pure']['vector']('string',d),a['object']['mutRegistrar']()]});}export function policy_clear(a,b,c,d){validObjects([b,c,d]),d?a['moveCall']({'target':repositoryFn('policy_clear_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,d),a['object']['mutRegistrar']()]}):a['moveCall']({'target':repositoryFn('policy_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\x20not\x20valid'),f?a['moveCall']({'target':repositoryFn('reward_add_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,f),a['object'](d)],'typeArguments':[e]}):a['moveCall']({'target':repositoryFn('reward_add'),'arguments':[toTxObject(a,b),toTxObject(a,c),a['object'](d)],'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':repositoryFn('reward_remove_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,e),a['pure']['vector']('address',d)]}):a['moveCall']({'target':repositoryFn('reward_remove'),'arguments':[toTxObject(a,b),toTxObject(a,c),a['pure']['vector']('address',d)]});}export function reward_clear(a,b,c,d){validObjects([b,c,d]),d?a['moveCall']({'target':repositoryFn('reward_clear_with_passport'),'arguments':[toTxObject(a,b),toTxObject(a,c),toTxObject(a,d)]}):a['moveCall']({'target':repositoryFn('reward_clear'),'arguments':[toTxObject(a,b),toTxObject(a,c)]});}export async function data_remove(a,b,c,d,e){validObjects([b]);if('items'in d){c['id_from']!==IdFrom['None']&&W_ERROR(WErrors['InvalidParam'],'id_from\x20must\x20be\x20IdFrom.None\x20when\x20items\x20is\x20provided');const f=[],g=[],h=[];for(const i of d['items']){if(!i['write_guard'])c['write_guard']['length']===0x0?f['push'](...i['id']):W_ERROR(WErrors['InvalidParam'],'specify\x20write\x20guard\x20in\x20policy\x20'+c['write_guard']['map'](j=>j['guard']));else{const j=i['write_guard'],k=c['write_guard']['find'](m=>m['guard']===j);!k&&W_ERROR(WErrors['InvalidParam'],'Guard\x20'+j+'\x20not\x20found\x20in\x20policy\x20'+c['write_guard']['map'](m=>m['guard']));const l=k['id_from_submission']!==undefined;if(l)h['push'](j);else{const m=g['find'](n=>n['guard']===j);m?m['id']['push'](...i['id']):g['push']({'guard':j,'id':[...i['id']]});}}}if(f['length']>0x0){c['write_guard']['length']!==0x0&&W_ERROR(WErrors['InvalidParam'],'specify\x20write\x20guard\x20in\x20policy\x20'+c['write_guard']['map'](o=>o['guard']));const n=[...new Set(f)];a['moveCall']({'target':repositoryFn('id_data_remove'),'arguments':[toTxObject(a,b),toTxString(a,c['name']),a['pure']['vector']('address',n)]});}if(h['length']>0x0){!e&&W_ERROR(WErrors['InvalidParam'],'Guard\x20specified\x20but\x20no\x20passport\x20provided');const o=[...new Set(h)];a['moveCall']({'target':repositoryFn('id_data_mixed_remove_with_passport'),'arguments':[toTxObject(a,b),toTxString(a,c['name']),a['pure']['vector']('address',o),toTxObject(a,e)]});}for(const {guard:p,id:q}of g){const r=[...new Set(q)];a['moveCall']({'target':repositoryFn('id_data_remove_with_passport'),'arguments':[toTxObject(a,b),toTxString(a,c['name']),a['pure']['address'](p),a['pure']['vector']('address',r),toTxObject(a,e)]});}}else{const s=d['write_guard'];c['id_from']===IdFrom['None']&&W_ERROR(WErrors['InvalidParam'],'id_from\x20must\x20be\x20set\x20when\x20id_from\x20is\x20IdFrom.None'),s?c['write_guard']['find'](t=>t['guard']===s)?a['moveCall']({'target':repositoryFn('data_remove_when_id_from_set_with_passport'),'arguments':[toTxObject(a,b),toTxString(a,c['name']),a['pure']['address'](s),a['object']['clock'](),toTxObject(a,e)]}):W_ERROR(WErrors['InvalidParam'],'Write\x20guard\x20'+s+'\x20is\x20not\x20in\x20policy\x20'+c['write_guard']['map'](t=>t['guard'])):c['write_guard']['length']===0x0?a['moveCall']({'target':repositoryFn('data_remove_when_id_from_set'),'arguments':[toTxObject(a,b),toTxString(a,c['name']),a['object']['clock']()]}):W_ERROR(WErrors['InvalidParam'],'specify\x20write\x20guard\x20in\x20policy\x20'+c['write_guard']['map'](t=>t['guard']));}}
@@ -1 +1 @@
1
- import{bcs}from'../../bcs/index.js';import{isValueTypeNumber,OperatorType,ValueType,parseValueType}from'../common.js';import{ContextType,MAX_ENV_PERMISSION_GUARD_COUNT}from'../common.js';import{W_ERROR,WErrors}from'../exception.js';import{Config,GetAccountOrMark_Address}from'../local/index.js';import{LocalMark}from'../local/local.js';import{GUARDQUERY,getGuardQueryInfo}from'./guard-ins.js';const ProgressHistoryFindConditionsBCS=bcs['struct']('ProgressHistoryFindConditions',{'node':bcs['option'](bcs['String']),'next_node':bcs['option'](bcs['String']),'time_min':bcs['option'](bcs['U64']),'time_max':bcs['option'](bcs['U64']),'find':bcs['U8']}),ProgressSessionFindConditionsBCS=bcs['struct']('ProgressSessionFindConditions',{'next_node':bcs['option'](bcs['String']),'find':bcs['U8']}),ProgressForwardFindConditionsBCS=bcs['struct']('ProgressForwardFindConditions',{'who':bcs['option'](bcs['Address']),'operation':bcs['option'](bcs['String']),'accomplished':bcs['option'](bcs['Bool']),'time_min':bcs['option'](bcs['U64']),'time_max':bcs['option'](bcs['U64']),'find':bcs['U8']}),StoreFromIdFilterBCS=bcs['struct']('StoreFromIdFilter',{'mode':bcs['U8'],'value':bcs['option'](bcs['Address'])}),RecordQueryConditionsBCS=bcs['struct']('RecordQueryConditions',{'recipient':bcs['Address'],'guard':bcs['option'](bcs['Address']),'time_min':bcs['option'](bcs['U64']),'time_max':bcs['option'](bcs['U64']),'amount_min':bcs['option'](bcs['U64']),'amount_max':bcs['option'](bcs['U64']),'store_from_id':bcs['option'](StoreFromIdFilterBCS)});export const getCallEnvAccount=async a=>{const b=await GetAccountOrMark_Address({'name_or_address':a['account']||''});return!b&&W_ERROR(WErrors['InvalidParam'],'account\x20'+a['account']+'\x20not\x20found'),a['account']=b,b;};function createSingleOperandNode(a,b){const c={'type':a,'node':b};return c;}export const resolveCallEnv=async a=>{a['network']=await Config['Instance']()['network_get'](a?.['network']);const b=await getCallEnvAccount(a);if(a?.['permission_guard']&&a['permission_guard']?.['length']>0x0){const c=await LocalMark['Instance']()['get_many_address_availables'](a['permission_guard']);if(c['length']!==a['permission_guard']['length']){const d=new Set(c),e=a['permission_guard']['filter'](f=>!d['has'](f));W_ERROR(WErrors['InvalidParam'],'permission_guard\x20not\x20found:\x20'+e['join'](',\x20'));}a['permission_guard']=[...c],a['permission_guard']['length']>MAX_ENV_PERMISSION_GUARD_COUNT&&W_ERROR(WErrors['InvalidParam'],'permission_guard\x20length\x20'+a['permission_guard']['length']+'\x20exceeds\x20'+MAX_ENV_PERMISSION_GUARD_COUNT);}if(a?.['referrer']){const f=await GetAccountOrMark_Address({'name_or_address':a['referrer']||''});f?a['referrer']=f:W_ERROR(WErrors['InvalidParam'],'referrer\x20'+a['referrer']+'\x20not\x20found');}return b;};export const checkType=(a,b,c)=>{if(b==='variable')return;else{if(b==='number'){if(isValueTypeNumber(a)||a===ContextType['TypeClock']||a===ValueType['Value'])return;}else{if(b===ValueType['Address']){if(a===ContextType['TypeSigner']||a===ContextType['TypeGuard']||a===ValueType['Value'])return;}else{if(a===ValueType['Value'])return;else{if(b===ValueType['Value'])return;else{if(b==='vec_number'){if(a===ValueType['VecU8']||a===ValueType['VecU16']||a===ValueType['VecU32']||a===ValueType['VecU64']||a===ValueType['VecU128']||a===ValueType['VecU256'])return;}else{if(b==='vec'){if(a===ValueType['VecBool']||a===ValueType['VecAddress']||a===ValueType['VecString']||a===ValueType['VecU8']||a===ValueType['VecU16']||a===ValueType['VecU32']||a===ValueType['VecU64']||a===ValueType['VecU128']||a===ValueType['VecU256'])return;}}}}}}}a!==b&&W_ERROR(WErrors['InvalidParam'],'checkType:\x20'+a+'\x20require\x20type:\x20'+b+'\x20with\x20node:\x20'+JSON['stringify'](c));};const parseNode=a=>{a['currentPosition']>=a['output']['length']&&W_ERROR(WErrors['InvalidParam'],'parseNode:\x20Unexpected\x20end\x20of\x20output\x20while\x20parsing\x20node');const b=a['output'][a['currentPosition']];a['currentPosition']++;switch(b){case ContextType['TypeConstant']:a['currentPosition']>=a['output']['length']&&W_ERROR(WErrors['InvalidParam'],'parseNode:\x20Missing\x20identifier\x20after\x20TypeConstant\x20opcode');const c=a['output'][a['currentPosition']];a['currentPosition']++;return{'type':'identifier','identifier':c};case OperatorType['TypeQuery']:return parseQueryNode(a);case OperatorType['TypeLogicAsU256GreaterEqual']:return parseMultiOperandNode(a,'logic_as_u256_greater_or_equal');case OperatorType['TypeLogicAsU256LesserEqual']:return parseMultiOperandNode(a,'logic_as_u256_lesser_or_equal');case OperatorType['TypeLogicAsU256Equal']:return parseMultiOperandNode(a,'logic_as_u256_equal');case OperatorType['TypeLogicAsU256Greater']:return parseMultiOperandNode(a,'logic_as_u256_greater');case OperatorType['TypeLogicAsU256Lesser']:return parseMultiOperandNode(a,'logic_as_u256_lesser');case OperatorType['TypeLogicEqual']:return parseMultiOperandNode(a,'logic_equal');case OperatorType['TypeLogicAnd']:return parseMultiOperandNode(a,'logic_and');case OperatorType['TypeLogicOr']:return parseMultiOperandNode(a,'logic_or');case OperatorType['TypeStringContains']:return parseMultiOperandNode(a,'logic_string_contains');case OperatorType['TypeStringNocaseContains']:return parseMultiOperandNode(a,'logic_string_nocase_contains');case OperatorType['TypeStringNocaseEqual']:return parseMultiOperandNode(a,'logic_string_nocase_equal');case OperatorType['TypeNumberAdd']:return parseMultiOperandNode(a,'calc_number_add');case OperatorType['TypeNumberSubtract']:return parseMultiOperandNode(a,'calc_number_subtract');case OperatorType['TypeNumberMultiply']:return parseMultiOperandNode(a,'calc_number_multiply');case OperatorType['TypeNumberDivide']:return parseMultiOperandNode(a,'calc_number_divide');case OperatorType['TypeNumberMod']:return parseMultiOperandNode(a,'calc_number_mod');case OperatorType['TypeLogicNot']:return parseSingleOperandNode(a,'logic_not');case OperatorType['TypeStringLength']:return parseSingleOperandNode(a,'calc_string_length');case OperatorType['TypeNumberAddress']:return parseSingleOperandNode(a,'convert_number_address');case OperatorType['TypeAddressNumber']:return parseSingleOperandNode(a,'convert_address_number');case OperatorType['TypeNumberString']:return parseSingleOperandNode(a,'convert_number_string');case OperatorType['TypeStringNumber']:return parseSingleOperandNode(a,'convert_string_number');case OperatorType['TypeSafeU8']:return parseSingleOperandNode(a,'convert_safe_u8');case OperatorType['TypeSafeU16']:return parseSingleOperandNode(a,'convert_safe_u16');case OperatorType['TypeSafeU32']:return parseSingleOperandNode(a,'convert_safe_u32');case OperatorType['TypeSafeU64']:return parseSingleOperandNode(a,'convert_safe_u64');case OperatorType['TypeSafeU128']:return parseSingleOperandNode(a,'convert_safe_u128');case OperatorType['TypeSafeU256']:return parseSingleOperandNode(a,'convert_safe_u256');case OperatorType['TypeStringIndexof']:return parseTwoOperandNode(a,'calc_string_indexof');case OperatorType['TypeStringNocaseIndexof']:return parseTwoOperandNode(a,'calc_string_nocase_indexof');case OperatorType['TypedValueType']:return parseSingleOperandNode(a,'value_type');case OperatorType['TypedValueVecLength']:return parseSingleOperandNode(a,'vec_length');case OperatorType['TypedValueVecContains_Bool']:return parseMultiOperandNode(a,'vec_contains_bool');case OperatorType['TypedValueVecContains_Address']:return parseMultiOperandNode(a,'vec_contains_address');case OperatorType['TypedValueVecContains_String']:return parseMultiOperandNode(a,'vec_contains_string');case OperatorType['TypedValueVecContains_StringNoCase']:return parseMultiOperandNode(a,'vec_contains_string_nocase');case OperatorType['TypedValueVecContains_Number']:return parseMultiOperandNode(a,'vec_contains_number');case OperatorType['TypedValueVecIndexOf_Bool']:return parseTwoOperandNode(a,'vec_indexof_bool');case OperatorType['TypedValueVecIndexOf_Address']:return parseTwoOperandNode(a,'vec_indexof_address');case OperatorType['TypedValueVecIndexOf_String']:return parseTwoOperandNode(a,'vec_indexof_string');case OperatorType['TypedValueVecIndexOf_StringNoCase']:return parseTwoOperandNode(a,'vec_indexof_string_nocase');case OperatorType['TypedValueVecIndexOf_Number']:return parseTwoOperandNode(a,'vec_indexof_number');case ContextType['TypeSigner']:return{'type':'context','context':'Signer'};case ContextType['TypeGuard']:return{'type':'context','context':'Guard'};case ContextType['TypeClock']:return{'type':'context','context':'Clock'};default:throw new Error('ParseGuardNode:\x20Unknown\x20opcode:\x20'+b);}},parseMultiOperandNode=(a,b)=>{a['currentPosition']>=a['output']['length']&&W_ERROR(WErrors['InvalidParam'],'parseMultiOperandNode:\x20Insufficient\x20data\x20for\x20multi-operand\x20operation');const c=a['output'][a['currentPosition']];a['currentPosition']++;const d=[];for(let f=0x0;f<c;f++){d['unshift'](parseNode(a));}const e={'type':b,'nodes':d};return e;},parseSingleOperandNode=(a,b)=>{const c=parseNode(a);return createSingleOperandNode(b,c);},parseTwoOperandNode=(a,b)=>{a['currentPosition']>=a['output']['length']&&W_ERROR(WErrors['InvalidParam'],'parseTwoOperandNode:\x20Missing\x20order\x20byte');const c=a['output'][a['currentPosition']];a['currentPosition']++;const d=c===0x0?'forward':'backward',e=parseNode(a),f=parseNode(a),g={'type':b,'nodeLeft':f,'nodeRight':e,'order':d};return g;},parseQueryNode=a=>{a['currentPosition']>=a['output']['length']&&W_ERROR(WErrors['InvalidParam'],'parseQueryNode:\x20Missing\x20witness\x20byte\x20after\x20TypeQuery\x20opcode');const b=a['output'][a['currentPosition']];a['currentPosition']++;a['currentPosition']>=a['output']['length']&&W_ERROR(WErrors['InvalidParam'],'parseQueryNode:\x20Missing\x20object\x20identifier\x20after\x20witness\x20byte');const c=a['output'][a['currentPosition']];a['currentPosition']++;const d=a['output']['subarray'](a['currentPosition']);d['length']<0x2&&W_ERROR(WErrors['InvalidParam'],'parseQueryNode:\x20Not\x20enough\x20bytes\x20for\x20query\x20ID\x20after\x20object\x20identifier');const e=bcs['U16']['parse'](d);a['currentPosition']+=0x2;const f=GUARDQUERY['find'](m=>m['id']===e);!f&&W_ERROR(WErrors['InvalidParam'],'parseQueryNode:\x20Query\x20with\x20ID\x20'+e+'\x20not\x20found');const g=getGuardQueryInfo(e);!g&&W_ERROR(WErrors['InvalidParam'],'parseQueryNode:\x20Query\x20name\x20not\x20found\x20for\x20ID\x20'+e);const h=[],j=g['parameters'];for(let m=j['length']-0x1;m>=0x0;m--){h['unshift'](parseNode(a));}const k=parseSpecializedQueryNode(e,c,h,a['table']);if(k)return k;const l={'type':'query','query':g['name'],'object':{'identifier':c,...b!==ContextType['TypeConstant']?{'convert_witness':b}:{}},'parameters':h};return l;},parseSpecializedQueryNode=(a,b,c,d)=>{if(a>=0x65a&&a<=0x65d)return parseRewardRecordQueryNode(a,b,c,d);if(a>=0x4fa&&a<=0x4ff)return parseProgressQueryNode(a,b,c,d);return null;},parseRewardRecordQueryNode=(a,b,c,d)=>{if(c['length']!==0x1||c[0x0]['type']!=='identifier')return null;const f=c[0x0]['identifier'];let g,h;switch(a){case 0x65a:g='query_reward_record_find',h='first';break;case 0x65b:g='query_reward_record_find',h='last';break;case 0x65c:g='query_reward_record_count';break;case 0x65d:g='query_reward_record_exists';break;default:return null;}const i=getConditionsFromTable(d,f);let j={};if(i)try{const m=RecordQueryConditionsBCS['parse'](i);j={'recipient':m['recipient'],'guard':m['guard'],'time_min':m['time_min'],'time_max':m['time_max'],'amount_min':m['amount_min'],'amount_max':m['amount_max']};}catch(n){}const k={};if(j['recipient'])k['recipient']=j['recipient'];if(j['guard'])k['guard']=j['guard'];if(j['time_min']!==null&&j['time_min']!==undefined)k['timeMin']=j['time_min']['toString']();if(j['time_max']!==null&&j['time_max']!==undefined)k['timeMax']=j['time_max']['toString']();if(j['amount_min']!==null&&j['amount_min']!==undefined)k['amountMin']=j['amount_min']['toString']();if(j['amount_max']!==null&&j['amount_max']!==undefined)k['amountMax']=j['amount_max']['toString']();const l={'object':{'identifier':b},'recipient':{'type':'identifier','identifier':f},'where':k};if(g==='query_reward_record_find')return{'type':g,...l,'find':h,'conditionsIdentifier':f};return{'type':g,...l,'conditionsIdentifier':f};},parseProgressQueryNode=(a,b,c,d)=>{switch(a){case 0x4fa:return parseProgressHistoryFindNode(b,c,d);case 0x4fb:return parseProgressSessionFindNode(b,c,d);case 0x4fc:return parseProgressForwardFindNode(b,c,d);case 0x4fd:return parseProgressSessionCountNode(b,c,d);case 0x4fe:return parseProgressForwardCountNode(b,c,d);case 0x4ff:return parseProgressRetainedCountNode(b,c,d);default:return null;}},parseProgressHistoryFindNode=(a,b,c)=>{if(b['length']!==0x1||b[0x0]['type']!=='identifier')return null;const d=b[0x0]['identifier'],f=getConditionsFromTable(c,d),g={};let h='first';if(f)try{const i=ProgressHistoryFindConditionsBCS['parse'](f);if(i['node'])g['node']=i['node'];if(i['next_node'])g['nextNode']=i['next_node'];if(i['time_min'])g['timeMin']=i['time_min']['toString']();if(i['time_max'])g['timeMax']=i['time_max']['toString']();h=i['find']===0x1?'last':'first';}catch(j){}return{'type':'query_progress_history_find','object':{'identifier':a},'where':g,'find':h,'conditionsIdentifier':d};},parseProgressSessionFindNode=(a,b,c)=>{if(b['length']!==0x2)return null;const d=b[0x0],f=b[0x1];if(d['type']!=='identifier'||f['type']!=='identifier')return null;const g=f['identifier'],h=getConditionsFromTable(c,g),i={};let j='first';if(h)try{const k=ProgressSessionFindConditionsBCS['parse'](h);if(k['next_node'])i['nextNode']=k['next_node'];j=k['find']===0x1?'last':'first';}catch(l){}return{'type':'query_progress_history_session_find','object':{'identifier':a},'historyIdx':d,'where':i,'find':j};},parseProgressForwardFindNode=(a,b,c)=>{if(b['length']!==0x3)return null;const d=b[0x0],f=b[0x1],g=b[0x2];if(d['type']!=='identifier'||f['type']!=='identifier'||g['type']!=='identifier')return null;const h=g['identifier'],i=getConditionsFromTable(c,h),j={};let k='first';if(i)try{const l=ProgressForwardFindConditionsBCS['parse'](i);if(l['who'])j['who']=l['who'];if(l['operation'])j['operation']=l['operation'];if(l['accomplished']!==undefined)j['accomplished']=l['accomplished'];if(l['time_min'])j['timeMin']=l['time_min']['toString']();if(l['time_max'])j['timeMax']=l['time_max']['toString']();k=l['find']===0x1?'last':'first';}catch(m){}return{'type':'query_progress_history_session_forward_find','object':{'identifier':a},'historyIdx':d,'sessionIdx':f,'where':j,'find':k};},parseProgressSessionCountNode=(a,b,c)=>{if(b['length']!==0x1||b[0x0]['type']!=='identifier')return null;return{'type':'query_progress_history_session_count','object':{'identifier':a},'historyIdx':b[0x0]};},parseProgressForwardCountNode=(a,b,c)=>{if(b['length']!==0x2)return null;const d=b[0x0],e=b[0x1];if(d['type']!=='identifier'||e['type']!=='identifier')return null;return{'type':'query_progress_history_session_forward_count','object':{'identifier':a},'historyIdx':d,'sessionIdx':e};},parseProgressRetainedCountNode=(a,b,c)=>{if(b['length']!==0x3)return null;const d=b[0x0],e=b[0x1],f=b[0x2];if(d['type']!=='identifier'||e['type']!=='identifier'||f['type']!=='identifier')return null;return{'type':'query_progress_history_session_forward_retained_submission_count','object':{'identifier':a},'historyIdx':d,'sessionIdx':e,'forwardIdx':f};},getConditionsFromTable=(a,b)=>{const c=a['find'](d=>d['identifier']===b);if(!c||!c['value'])return null;if(Array['isArray'](c['value'])&&c['value']['length']>0x0&&typeof c['value'][0x0]==='number')return new Uint8Array(c['value']);return null;},createQueryNode=(a,b,c,d,e,f)=>{switch(a){case 0x4fa:{const g=parseProgressHistoryFindNode(c,e,f);if(g)return g;break;}case 0x4fb:{const h=parseProgressSessionFindNode(c,e,f);if(h)return h;break;}case 0x4fc:{const i=parseProgressForwardFindNode(c,e,f);if(i)return i;break;}case 0x4fd:{const j=parseProgressSessionCountNode(c,e,f);if(j)return j;break;}case 0x4fe:{const k=parseProgressForwardCountNode(c,e,f);if(k)return k;break;}case 0x4ff:{const l=parseProgressRetainedCountNode(c,e,f);if(l)return l;break;}}return{'type':'query','query':b,'object':{'identifier':c,...d!==ContextType['TypeConstant']?{'convert_witness':d}:{}},'parameters':e};};export const restoreNodeFromOutput=(a,b)=>{try{(!a||a['length']===0x0)&&W_ERROR(WErrors['InvalidParam'],'restoreNodeFromOutput:\x20output\x20is\x20empty');const c=[],d=new Map();let e=0x0;const f=()=>{return e>=a['length']&&W_ERROR(WErrors['InvalidParam'],'readByte:\x20Unexpected\x20end\x20of\x20output'),a[e++];},g=()=>{e+0x2>a['length']&&W_ERROR(WErrors['InvalidParam'],'readU16:\x20Insufficient\x20bytes\x20for\x20u16');const j=a[e]+a[e+0x1]*0x100;return e+=0x2,j;};while(e<a['length']){const j=f();switch(j){case ContextType['TypeConstant']:{const k=f();c['push']({'type':'identifier','identifier':k});break;}case ContextType['TypeSigner']:c['push']({'type':'context','context':'Signer'});break;case ContextType['TypeClock']:c['push']({'type':'context','context':'Clock'});break;case ContextType['TypeGuard']:c['push']({'type':'context','context':'Guard'});break;case OperatorType['TypeQuery']:{const l=f(),m=f(),n=g(),o=getGuardQueryInfo(n);!o&&W_ERROR(WErrors['InvalidParam'],'restoreNodeFromOutput:\x20Query\x20with\x20ID\x20'+n+'\x20not\x20found');const p=[];for(let r=0x0;r<o['parameters']['length'];r++){c['length']===0x0&&W_ERROR(WErrors['InvalidParam'],'restoreNodeFromOutput:\x20Insufficient\x20parameters\x20for\x20query\x20'+o['name']),p['unshift'](c['pop']());}if(o['id']===0x48f&&p[0x0]['type']==='identifier'&&p[0x0]?.['identifier']!=null){const s=b['find'](w=>w['identifier']===m&&!w['b_submission']),t=b['find'](w=>w['identifier']===p[0x0]['identifier']&&!w['b_submission']),u=s?parseValueType(s['value_type']):undefined,v=t?parseValueType(t['value_type']):undefined;s&&t&&u===ValueType['Address']&&v===ValueType['String']&&(d['has'](s['value'])?!d['get'](s['value'])['includes'](t['value'])&&d['get'](s['value'])['push'](t['value']):d['set'](s['value'],[t['value']]));}const q=createQueryNode(o['id'],o['name'],m,l,p,b);c['push'](q);break;}case OperatorType['TypeLogicEqual']:case OperatorType['TypeLogicAnd']:case OperatorType['TypeLogicOr']:case OperatorType['TypeLogicAsU256GreaterEqual']:case OperatorType['TypeLogicAsU256LesserEqual']:case OperatorType['TypeLogicAsU256Equal']:case OperatorType['TypeLogicAsU256Greater']:case OperatorType['TypeLogicAsU256Lesser']:case OperatorType['TypeStringContains']:case OperatorType['TypeStringNocaseContains']:case OperatorType['TypeStringNocaseEqual']:case OperatorType['TypeNumberAdd']:case OperatorType['TypeNumberSubtract']:case OperatorType['TypeNumberMultiply']:case OperatorType['TypeNumberDivide']:case OperatorType['TypeNumberMod']:{const w=f(),x=[];for(let z=0x0;z<w;z++){c['length']===0x0&&W_ERROR(WErrors['InvalidParam'],'restoreNodeFromOutput:\x20Insufficient\x20operands\x20for\x20multi-operand\x20operation'),x['push'](c['pop']());}const y=getNodePropertyFromOpCode(j);c['push']({'type':y,'nodes':x});break;}case OperatorType['TypeLogicNot']:case OperatorType['TypeStringLength']:case OperatorType['TypeNumberAddress']:case OperatorType['TypeAddressNumber']:case OperatorType['TypeNumberString']:case OperatorType['TypeStringNumber']:case OperatorType['TypeSafeU8']:case OperatorType['TypeSafeU16']:case OperatorType['TypeSafeU32']:case OperatorType['TypeSafeU64']:case OperatorType['TypeSafeU128']:case OperatorType['TypeSafeU256']:case OperatorType['TypedValueType']:case OperatorType['TypedValueVecLength']:{c['length']===0x0&&W_ERROR(WErrors['InvalidParam'],'restoreNodeFromOutput:\x20Insufficient\x20operand\x20for\x20single-operand\x20operation');const A=c['pop'](),B=getNodePropertyFromOpCode(j);c['push']({'type':B,'node':A});break;}case OperatorType['TypeStringIndexof']:case OperatorType['TypeStringNocaseIndexof']:case OperatorType['TypedValueVecIndexOf_Bool']:case OperatorType['TypedValueVecIndexOf_Address']:case OperatorType['TypedValueVecIndexOf_String']:case OperatorType['TypedValueVecIndexOf_StringNoCase']:case OperatorType['TypedValueVecIndexOf_Number']:{const C=f(),D=C===0x0?'forward':'backward';c['length']<0x2&&W_ERROR(WErrors['InvalidParam'],'restoreNodeFromOutput:\x20Insufficient\x20operands\x20for\x20two-operand\x20operation');const E=c['pop'](),F=c['pop'](),G=getNodePropertyFromOpCode(j);c['push']({'type':G,'nodeLeft':E,'nodeRight':F,'order':D});break;}default:W_ERROR(WErrors['InvalidParam'],'restoreNodeFromOutput:\x20Unknown\x20opcode\x20'+j);}}c['length']!==0x1&&W_ERROR(WErrors['InvalidParam'],'restoreNodeFromOutput:\x20Expected\x201\x20node\x20in\x20stack,\x20found\x20'+c['length']);const h=collectAutoGeneratedIdentifiers(c[0x0]);return{'root':c[0x0],'rep_quote':d,'autoGeneratedIdentifiers':h};}catch(H){throw new Error('restoreNodeFromOutput:\x20Failed\x20to\x20restore\x20GuardNode\x20from\x20output:\x20'+H['message']);}};const collectAutoGeneratedIdentifiers=a=>{const b=[];switch(a['type']){case'query_progress_history_find':a['conditionsIdentifier']!==undefined&&b['push'](a['conditionsIdentifier']);break;case'query_progress_history_session_find':a['historyIdx']['type']==='identifier'&&b['push'](a['historyIdx']['identifier']);break;case'query_progress_history_session_forward_find':a['historyIdx']['type']==='identifier'&&b['push'](a['historyIdx']['identifier']);a['sessionIdx']['type']==='identifier'&&b['push'](a['sessionIdx']['identifier']);break;case'query_progress_history_session_count':a['historyIdx']['type']==='identifier'&&b['push'](a['historyIdx']['identifier']);break;case'query_progress_history_session_forward_count':a['historyIdx']['type']==='identifier'&&b['push'](a['historyIdx']['identifier']);a['sessionIdx']['type']==='identifier'&&b['push'](a['sessionIdx']['identifier']);break;case'query_progress_history_session_forward_retained_submission_count':a['historyIdx']['type']==='identifier'&&b['push'](a['historyIdx']['identifier']);a['sessionIdx']['type']==='identifier'&&b['push'](a['sessionIdx']['identifier']);a['forwardIdx']['type']==='identifier'&&b['push'](a['forwardIdx']['identifier']);break;case'query_reward_record_find':case'query_reward_record_count':case'query_reward_record_exists':a['recipient']['type']==='identifier'&&b['push'](a['recipient']['identifier']);break;case'logic_equal':case'logic_and':case'logic_or':case'logic_as_u256_greater_or_equal':case'logic_as_u256_lesser_or_equal':case'logic_as_u256_equal':case'logic_as_u256_greater':case'logic_as_u256_lesser':case'logic_string_contains':case'logic_string_nocase_contains':case'logic_string_nocase_equal':case'calc_number_add':case'calc_number_multiply':case'calc_number_subtract':case'calc_number_divide':case'calc_number_mod':for(const c of a['nodes']){b['push'](...collectAutoGeneratedIdentifiers(c));}break;case'logic_not':case'calc_string_length':case'convert_number_address':case'convert_address_number':case'convert_number_string':case'convert_string_number':case'convert_safe_u8':case'convert_safe_u16':case'convert_safe_u32':case'convert_safe_u64':case'convert_safe_u128':case'convert_safe_u256':case'value_type':case'vec_length':b['push'](...collectAutoGeneratedIdentifiers(a['node']));break;case'calc_string_indexof':case'calc_string_nocase_indexof':case'vec_indexof_bool':case'vec_indexof_address':case'vec_indexof_string':case'vec_indexof_string_nocase':case'vec_indexof_number':b['push'](...collectAutoGeneratedIdentifiers(a['nodeLeft'])),b['push'](...collectAutoGeneratedIdentifiers(a['nodeRight']));break;case'vec_contains_bool':case'vec_contains_address':case'vec_contains_string':case'vec_contains_string_nocase':case'vec_contains_number':for(const d of a['nodes']){b['push'](...collectAutoGeneratedIdentifiers(d));}break;}return b;},getNodePropertyFromOpCode=a=>{switch(a){case OperatorType['TypeLogicEqual']:return'logic_equal';case OperatorType['TypeLogicAnd']:return'logic_and';case OperatorType['TypeLogicOr']:return'logic_or';case OperatorType['TypeLogicAsU256GreaterEqual']:return'logic_as_u256_greater_or_equal';case OperatorType['TypeLogicAsU256LesserEqual']:return'logic_as_u256_lesser_or_equal';case OperatorType['TypeLogicAsU256Equal']:return'logic_as_u256_equal';case OperatorType['TypeLogicAsU256Greater']:return'logic_as_u256_greater';case OperatorType['TypeLogicAsU256Lesser']:return'logic_as_u256_lesser';case OperatorType['TypeStringContains']:return'logic_string_contains';case OperatorType['TypeStringNocaseContains']:return'logic_string_nocase_contains';case OperatorType['TypeStringNocaseEqual']:return'logic_string_nocase_equal';case OperatorType['TypeNumberAdd']:return'calc_number_add';case OperatorType['TypeNumberSubtract']:return'calc_number_subtract';case OperatorType['TypeNumberMultiply']:return'calc_number_multiply';case OperatorType['TypeNumberDivide']:return'calc_number_divide';case OperatorType['TypeNumberMod']:return'calc_number_mod';case OperatorType['TypeLogicNot']:return'logic_not';case OperatorType['TypeStringLength']:return'calc_string_length';case OperatorType['TypeNumberAddress']:return'convert_number_address';case OperatorType['TypeAddressNumber']:return'convert_address_number';case OperatorType['TypeNumberString']:return'convert_number_string';case OperatorType['TypeStringNumber']:return'convert_string_number';case OperatorType['TypeSafeU8']:return'convert_safe_u8';case OperatorType['TypeSafeU16']:return'convert_safe_u16';case OperatorType['TypeSafeU32']:return'convert_safe_u32';case OperatorType['TypeSafeU64']:return'convert_safe_u64';case OperatorType['TypeSafeU128']:return'convert_safe_u128';case OperatorType['TypeSafeU256']:return'convert_safe_u256';case OperatorType['TypedValueType']:return'value_type';case OperatorType['TypedValueVecLength']:return'vec_length';case OperatorType['TypeStringIndexof']:return'calc_string_indexof';case OperatorType['TypeStringNocaseIndexof']:return'calc_string_nocase_indexof';case OperatorType['TypedValueVecIndexOf_Bool']:return'vec_indexof_bool';case OperatorType['TypedValueVecIndexOf_Address']:return'vec_indexof_address';case OperatorType['TypedValueVecIndexOf_String']:return'vec_indexof_string';case OperatorType['TypedValueVecIndexOf_StringNoCase']:return'vec_indexof_string_nocase';case OperatorType['TypedValueVecIndexOf_Number']:return'vec_indexof_number';default:return'unknown';}};
1
+ import{bcs}from'../../bcs/index.js';import{isValueTypeNumber,OperatorType,ValueType,parseValueType}from'../common.js';import{ContextType,MAX_ENV_PERMISSION_GUARD_COUNT}from'../common.js';import{W_ERROR,WErrors}from'../exception.js';import{Config,GetAccountOrMark_Address}from'../local/index.js';import{LocalMark}from'../local/local.js';import{GUARDQUERY,getGuardQueryInfo}from'./guard-ins.js';const ProgressHistoryFindConditionsBCS=bcs['struct']('ProgressHistoryFindConditions',{'node':bcs['option'](bcs['String']),'next_node':bcs['option'](bcs['String']),'time_min':bcs['option'](bcs['U64']),'time_max':bcs['option'](bcs['U64']),'find':bcs['U8']}),ProgressSessionFindConditionsBCS=bcs['struct']('ProgressSessionFindConditions',{'next_node':bcs['option'](bcs['String']),'find':bcs['U8']}),ProgressForwardFindConditionsBCS=bcs['struct']('ProgressForwardFindConditions',{'who':bcs['option'](bcs['Address']),'operation':bcs['option'](bcs['String']),'accomplished':bcs['option'](bcs['Bool']),'time_min':bcs['option'](bcs['U64']),'time_max':bcs['option'](bcs['U64']),'find':bcs['U8']}),StoreFromIdFilterBCS=bcs['struct']('StoreFromIdFilter',{'mode':bcs['U8'],'value':bcs['option'](bcs['Address'])}),RecordQueryConditionsBCS=bcs['struct']('RecordQueryConditions',{'recipient':bcs['Address'],'guard':bcs['option'](bcs['Address']),'time_min':bcs['option'](bcs['U64']),'time_max':bcs['option'](bcs['U64']),'amount_min':bcs['option'](bcs['U64']),'amount_max':bcs['option'](bcs['U64']),'store_from_id':bcs['option'](StoreFromIdFilterBCS)});export const getCallEnvAccount=async a=>{const b=await GetAccountOrMark_Address({'name_or_address':a['account']||''});return!b&&W_ERROR(WErrors['InvalidParam'],'account\x20'+a['account']+'\x20not\x20found'),a['account']=b,b;};function createSingleOperandNode(a,b){const c={'type':a,'node':b};return c;}export const resolveCallEnv=async a=>{a['network']=await Config['Instance']()['network_get'](a?.['network']);const b=await getCallEnvAccount(a);if(a?.['permission_guard']&&a['permission_guard']?.['length']>0x0){const c=await LocalMark['Instance']()['get_many_address_availables'](a['permission_guard']);if(c['length']!==a['permission_guard']['length']){const d=new Set(c),e=a['permission_guard']['filter'](f=>!d['has'](f));W_ERROR(WErrors['InvalidParam'],'permission_guard\x20not\x20found:\x20'+e['join'](',\x20'));}a['permission_guard']=[...c],a['permission_guard']['length']>MAX_ENV_PERMISSION_GUARD_COUNT&&W_ERROR(WErrors['InvalidParam'],'permission_guard\x20length\x20'+a['permission_guard']['length']+'\x20exceeds\x20'+MAX_ENV_PERMISSION_GUARD_COUNT);}if(a?.['referrer']){const f=await GetAccountOrMark_Address({'name_or_address':a['referrer']||''});f?a['referrer']=f:W_ERROR(WErrors['InvalidParam'],'referrer\x20'+a['referrer']+'\x20not\x20found');}return b;};export const checkType=(a,b,c)=>{if(b==='variable')return;else{if(b==='number'){if(isValueTypeNumber(a)||a===ContextType['TypeClock']||a===ValueType['Value'])return;}else{if(b===ValueType['Address']){if(a===ContextType['TypeSigner']||a===ContextType['TypeGuard']||a===ValueType['Value'])return;}else{if(a===ValueType['Value'])return;else{if(b===ValueType['Value'])return;else{if(b==='vec_number'){if(a===ValueType['VecU8']||a===ValueType['VecU16']||a===ValueType['VecU32']||a===ValueType['VecU64']||a===ValueType['VecU128']||a===ValueType['VecU256'])return;}else{if(b==='vec'){if(a===ValueType['VecBool']||a===ValueType['VecAddress']||a===ValueType['VecString']||a===ValueType['VecU8']||a===ValueType['VecU16']||a===ValueType['VecU32']||a===ValueType['VecU64']||a===ValueType['VecU128']||a===ValueType['VecU256'])return;}}}}}}}a!==b&&W_ERROR(WErrors['InvalidParam'],'checkType:\x20'+a+'\x20require\x20type:\x20'+b+'\x20with\x20node:\x20'+JSON['stringify'](c));};const parseNode=a=>{a['currentPosition']>=a['output']['length']&&W_ERROR(WErrors['InvalidParam'],'parseNode:\x20Unexpected\x20end\x20of\x20output\x20while\x20parsing\x20node');const b=a['output'][a['currentPosition']];a['currentPosition']++;switch(b){case ContextType['TypeConstant']:a['currentPosition']>=a['output']['length']&&W_ERROR(WErrors['InvalidParam'],'parseNode:\x20Missing\x20identifier\x20after\x20TypeConstant\x20opcode');const c=a['output'][a['currentPosition']];a['currentPosition']++;return{'type':'identifier','identifier':c};case OperatorType['TypeQuery']:return parseQueryNode(a);case OperatorType['TypeLogicAsU256GreaterEqual']:return parseMultiOperandNode(a,'logic_as_u256_greater_or_equal');case OperatorType['TypeLogicAsU256LesserEqual']:return parseMultiOperandNode(a,'logic_as_u256_lesser_or_equal');case OperatorType['TypeLogicAsU256Equal']:return parseMultiOperandNode(a,'logic_as_u256_equal');case OperatorType['TypeLogicAsU256Greater']:return parseMultiOperandNode(a,'logic_as_u256_greater');case OperatorType['TypeLogicAsU256Lesser']:return parseMultiOperandNode(a,'logic_as_u256_lesser');case OperatorType['TypeLogicEqual']:return parseMultiOperandNode(a,'logic_equal');case OperatorType['TypeLogicAnd']:return parseMultiOperandNode(a,'logic_and');case OperatorType['TypeLogicOr']:return parseMultiOperandNode(a,'logic_or');case OperatorType['TypeStringContains']:return parseMultiOperandNode(a,'logic_string_contains');case OperatorType['TypeStringNocaseContains']:return parseMultiOperandNode(a,'logic_string_nocase_contains');case OperatorType['TypeStringNocaseEqual']:return parseMultiOperandNode(a,'logic_string_nocase_equal');case OperatorType['TypeNumberAdd']:return parseMultiOperandNode(a,'calc_number_add');case OperatorType['TypeNumberSubtract']:return parseMultiOperandNode(a,'calc_number_subtract');case OperatorType['TypeNumberMultiply']:return parseMultiOperandNode(a,'calc_number_multiply');case OperatorType['TypeNumberDivide']:return parseMultiOperandNode(a,'calc_number_divide');case OperatorType['TypeNumberMod']:return parseMultiOperandNode(a,'calc_number_mod');case OperatorType['TypeLogicNot']:return parseSingleOperandNode(a,'logic_not');case OperatorType['TypeStringLength']:return parseSingleOperandNode(a,'calc_string_length');case OperatorType['TypeNumberAddress']:return parseSingleOperandNode(a,'convert_number_address');case OperatorType['TypeAddressNumber']:return parseSingleOperandNode(a,'convert_address_number');case OperatorType['TypeNumberString']:return parseSingleOperandNode(a,'convert_number_string');case OperatorType['TypeStringNumber']:return parseSingleOperandNode(a,'convert_string_number');case OperatorType['TypeSafeU8']:return parseSingleOperandNode(a,'convert_safe_u8');case OperatorType['TypeSafeU16']:return parseSingleOperandNode(a,'convert_safe_u16');case OperatorType['TypeSafeU32']:return parseSingleOperandNode(a,'convert_safe_u32');case OperatorType['TypeSafeU64']:return parseSingleOperandNode(a,'convert_safe_u64');case OperatorType['TypeSafeU128']:return parseSingleOperandNode(a,'convert_safe_u128');case OperatorType['TypeSafeU256']:return parseSingleOperandNode(a,'convert_safe_u256');case OperatorType['TypeStringIndexof']:return parseTwoOperandNode(a,'calc_string_indexof');case OperatorType['TypeStringNocaseIndexof']:return parseTwoOperandNode(a,'calc_string_nocase_indexof');case OperatorType['TypedValueType']:return parseSingleOperandNode(a,'value_type');case OperatorType['TypedValueVecLength']:return parseSingleOperandNode(a,'vec_length');case OperatorType['TypedValueVecContains_Bool']:return parseMultiOperandNode(a,'vec_contains_bool');case OperatorType['TypedValueVecContains_Address']:return parseMultiOperandNode(a,'vec_contains_address');case OperatorType['TypedValueVecContains_String']:return parseMultiOperandNode(a,'vec_contains_string');case OperatorType['TypedValueVecContains_StringNoCase']:return parseMultiOperandNode(a,'vec_contains_string_nocase');case OperatorType['TypedValueVecContains_Number']:return parseMultiOperandNode(a,'vec_contains_number');case OperatorType['TypedValueVecIndexOf_Bool']:return parseTwoOperandNode(a,'vec_indexof_bool');case OperatorType['TypedValueVecIndexOf_Address']:return parseTwoOperandNode(a,'vec_indexof_address');case OperatorType['TypedValueVecIndexOf_String']:return parseTwoOperandNode(a,'vec_indexof_string');case OperatorType['TypedValueVecIndexOf_StringNoCase']:return parseTwoOperandNode(a,'vec_indexof_string_nocase');case OperatorType['TypedValueVecIndexOf_Number']:return parseTwoOperandNode(a,'vec_indexof_number');case ContextType['TypeSigner']:return{'type':'context','context':'Signer'};case ContextType['TypeGuard']:return{'type':'context','context':'Guard'};case ContextType['TypeClock']:return{'type':'context','context':'Clock'};default:throw new Error('ParseGuardNode:\x20Unknown\x20opcode:\x20'+b);}},parseMultiOperandNode=(a,b)=>{a['currentPosition']>=a['output']['length']&&W_ERROR(WErrors['InvalidParam'],'parseMultiOperandNode:\x20Insufficient\x20data\x20for\x20multi-operand\x20operation');const c=a['output'][a['currentPosition']];a['currentPosition']++;const d=[];for(let f=0x0;f<c;f++){d['unshift'](parseNode(a));}const e={'type':b,'nodes':d};return e;},parseSingleOperandNode=(a,b)=>{const c=parseNode(a);return createSingleOperandNode(b,c);},parseTwoOperandNode=(a,b)=>{a['currentPosition']>=a['output']['length']&&W_ERROR(WErrors['InvalidParam'],'parseTwoOperandNode:\x20Missing\x20order\x20byte');const c=a['output'][a['currentPosition']];a['currentPosition']++;const d=c===0x0?'forward':'backward',e=parseNode(a),f=parseNode(a),g={'type':b,'nodeLeft':f,'nodeRight':e,'order':d};return g;},parseQueryNode=a=>{a['currentPosition']>=a['output']['length']&&W_ERROR(WErrors['InvalidParam'],'parseQueryNode:\x20Missing\x20witness\x20byte\x20after\x20TypeQuery\x20opcode');const b=a['output'][a['currentPosition']];a['currentPosition']++;a['currentPosition']>=a['output']['length']&&W_ERROR(WErrors['InvalidParam'],'parseQueryNode:\x20Missing\x20object\x20identifier\x20after\x20witness\x20byte');const c=a['output'][a['currentPosition']];a['currentPosition']++;const d=a['output']['subarray'](a['currentPosition']);d['length']<0x2&&W_ERROR(WErrors['InvalidParam'],'parseQueryNode:\x20Not\x20enough\x20bytes\x20for\x20query\x20ID\x20after\x20object\x20identifier');const e=bcs['U16']['parse'](d);a['currentPosition']+=0x2;const f=GUARDQUERY['find'](m=>m['id']===e);!f&&W_ERROR(WErrors['InvalidParam'],'parseQueryNode:\x20Query\x20with\x20ID\x20'+e+'\x20not\x20found');const g=getGuardQueryInfo(e);!g&&W_ERROR(WErrors['InvalidParam'],'parseQueryNode:\x20Query\x20name\x20not\x20found\x20for\x20ID\x20'+e);const h=[],j=g['parameters'];for(let m=j['length']-0x1;m>=0x0;m--){h['unshift'](parseNode(a));}const k=parseSpecializedQueryNode(e,c,h,a['table']);if(k)return k;const l={'type':'query','query':g['name'],'object':{'identifier':c,...b!==ContextType['TypeConstant']?{'convert_witness':b}:{}},'parameters':h};return l;},parseSpecializedQueryNode=(a,b,c,d)=>{if(a>=0x65a&&a<=0x65d)return parseRewardRecordQueryNode(a,b,c,d);if(a>=0x4fa&&a<=0x4ff)return parseProgressQueryNode(a,b,c,d);return null;},parseRewardRecordQueryNode=(a,b,c,d)=>{if(c['length']!==0x1||c[0x0]['type']!=='identifier')return null;const f=c[0x0]['identifier'];let g,h;switch(a){case 0x65a:g='query_reward_record_find',h='first';break;case 0x65b:g='query_reward_record_find',h='last';break;case 0x65c:g='query_reward_record_count';break;case 0x65d:g='query_reward_record_exists';break;default:return null;}const i=getConditionsFromTable(d,f);let j={};if(i)try{const m=RecordQueryConditionsBCS['parse'](i);j={'recipient':m['recipient'],'guard':m['guard'],'time_min':m['time_min'],'time_max':m['time_max'],'amount_min':m['amount_min'],'amount_max':m['amount_max']};}catch(n){}const k={};if(j['recipient'])k['recipient']=j['recipient'];if(j['guard'])k['guard']=j['guard'];if(j['time_min']!==null&&j['time_min']!==undefined)k['timeMin']=j['time_min']['toString']();if(j['time_max']!==null&&j['time_max']!==undefined)k['timeMax']=j['time_max']['toString']();if(j['amount_min']!==null&&j['amount_min']!==undefined)k['amountMin']=j['amount_min']['toString']();if(j['amount_max']!==null&&j['amount_max']!==undefined)k['amountMax']=j['amount_max']['toString']();const l={'object':{'identifier':b},'recipient':{'type':'identifier','identifier':f},'where':k};if(g==='query_reward_record_find')return{'type':g,...l,'find':h,'conditionsIdentifier':f};return{'type':g,...l,'conditionsIdentifier':f};},parseProgressQueryNode=(a,b,c,d)=>{switch(a){case 0x4fa:return parseProgressHistoryFindNode(b,c,d);case 0x4fb:return parseProgressSessionFindNode(b,c,d);case 0x4fc:return parseProgressForwardFindNode(b,c,d);case 0x4fd:return parseProgressSessionCountNode(b,c,d);case 0x4fe:return parseProgressForwardCountNode(b,c,d);case 0x4ff:return parseProgressRetainedCountNode(b,c,d);default:return null;}},parseProgressHistoryFindNode=(a,b,c)=>{if(b['length']!==0x1||b[0x0]['type']!=='identifier')return null;const d=b[0x0]['identifier'],f=getConditionsFromTable(c,d),g={};let h='first';if(f)try{const i=ProgressHistoryFindConditionsBCS['parse'](f);if(i['node'])g['node']=i['node'];if(i['next_node'])g['nextNode']=i['next_node'];if(i['time_min'])g['timeMin']=i['time_min']['toString']();if(i['time_max'])g['timeMax']=i['time_max']['toString']();h=i['find']===0x1?'last':'first';}catch(j){}return{'type':'query_progress_history_find','object':{'identifier':a},'where':g,'find':h,'conditionsIdentifier':d};},parseProgressSessionFindNode=(a,b,c)=>{if(b['length']!==0x2)return null;const d=b[0x0],f=b[0x1];if(d['type']!=='identifier')return null;if(f['type']!=='identifier'&&!f['type']['startsWith']('query_progress'))return null;const g=d['identifier'],h=getConditionsFromTable(c,g),i={};let j='first';if(h)try{const k=ProgressSessionFindConditionsBCS['parse'](h);if(k['next_node'])i['nextNode']=k['next_node'];j=k['find']===0x1?'last':'first';}catch(l){}return{'type':'query_progress_history_session_find','object':{'identifier':a},'historyIdx':f,'where':i,'find':j};},parseProgressForwardFindNode=(a,b,c)=>{if(b['length']!==0x3)return null;const d=b[0x0],f=b[0x1],g=b[0x2];if(d['type']!=='identifier')return null;const h=m=>m['type']==='identifier'||m['type']['startsWith']('query_progress');if(!h(f)||!h(g))return null;const i=d['identifier'],j=getConditionsFromTable(c,i),k={};let l='first';if(j)try{const m=ProgressForwardFindConditionsBCS['parse'](j);if(m['who'])k['who']=m['who'];if(m['operation'])k['operation']=m['operation'];if(m['accomplished']!==undefined)k['accomplished']=m['accomplished'];if(m['time_min'])k['timeMin']=m['time_min']['toString']();if(m['time_max'])k['timeMax']=m['time_max']['toString']();l=m['find']===0x1?'last':'first';}catch(n){}return{'type':'query_progress_history_session_forward_find','object':{'identifier':a},'historyIdx':g,'sessionIdx':f,'where':k,'find':l};},parseProgressSessionCountNode=(a,b,c)=>{if(b['length']!==0x1)return null;const d=b[0x0];if(d['type']!=='identifier'&&!d['type']['startsWith']('query_progress'))return null;return{'type':'query_progress_history_session_count','object':{'identifier':a},'historyIdx':d};},parseProgressForwardCountNode=(a,b,c)=>{if(b['length']!==0x2)return null;const d=b[0x0],e=b[0x1],f=g=>g['type']==='identifier'||g['type']['startsWith']('query_progress');if(!f(d)||!f(e))return null;return{'type':'query_progress_history_session_forward_count','object':{'identifier':a},'historyIdx':d,'sessionIdx':e};},parseProgressRetainedCountNode=(a,b,c)=>{if(b['length']!==0x3)return null;const d=b[0x0],e=b[0x1],f=b[0x2],g=h=>h['type']==='identifier'||h['type']['startsWith']('query_progress');if(!g(d)||!g(e)||!g(f))return null;return{'type':'query_progress_history_session_forward_retained_submission_count','object':{'identifier':a},'historyIdx':d,'sessionIdx':e,'forwardIdx':f};},getConditionsFromTable=(a,b)=>{const c=a['find'](d=>d['identifier']===b);if(!c||!c['value'])return null;if(Array['isArray'](c['value'])&&c['value']['length']>0x0&&typeof c['value'][0x0]==='number')return new Uint8Array(c['value']);return null;},createQueryNode=(a,b,c,d,e,f)=>{switch(a){case 0x4fa:{const g=parseProgressHistoryFindNode(c,e,f);if(g)return g;break;}case 0x4fb:{const h=parseProgressSessionFindNode(c,e,f);if(h)return h;break;}case 0x4fc:{const i=parseProgressForwardFindNode(c,e,f);if(i)return i;break;}case 0x4fd:{const j=parseProgressSessionCountNode(c,e,f);if(j)return j;break;}case 0x4fe:{const k=parseProgressForwardCountNode(c,e,f);if(k)return k;break;}case 0x4ff:{const l=parseProgressRetainedCountNode(c,e,f);if(l)return l;break;}}return{'type':'query','query':b,'object':{'identifier':c,...d!==ContextType['TypeConstant']?{'convert_witness':d}:{}},'parameters':e};};export const restoreNodeFromOutput=(a,b)=>{try{(!a||a['length']===0x0)&&W_ERROR(WErrors['InvalidParam'],'restoreNodeFromOutput:\x20output\x20is\x20empty');const c=[],d=new Map();let e=0x0;const f=()=>{return e>=a['length']&&W_ERROR(WErrors['InvalidParam'],'readByte:\x20Unexpected\x20end\x20of\x20output'),a[e++];},g=()=>{e+0x2>a['length']&&W_ERROR(WErrors['InvalidParam'],'readU16:\x20Insufficient\x20bytes\x20for\x20u16');const j=a[e]+a[e+0x1]*0x100;return e+=0x2,j;};while(e<a['length']){const j=f();switch(j){case ContextType['TypeConstant']:{const k=f();c['push']({'type':'identifier','identifier':k});break;}case ContextType['TypeSigner']:c['push']({'type':'context','context':'Signer'});break;case ContextType['TypeClock']:c['push']({'type':'context','context':'Clock'});break;case ContextType['TypeGuard']:c['push']({'type':'context','context':'Guard'});break;case OperatorType['TypeQuery']:{const l=f(),m=f(),n=g(),o=getGuardQueryInfo(n);!o&&W_ERROR(WErrors['InvalidParam'],'restoreNodeFromOutput:\x20Query\x20with\x20ID\x20'+n+'\x20not\x20found');const p=[];for(let r=0x0;r<o['parameters']['length'];r++){c['length']===0x0&&W_ERROR(WErrors['InvalidParam'],'restoreNodeFromOutput:\x20Insufficient\x20parameters\x20for\x20query\x20'+o['name']),p['unshift'](c['pop']());}if(o['id']===0x48f&&p[0x0]['type']==='identifier'&&p[0x0]?.['identifier']!=null){const s=b['find'](w=>w['identifier']===m&&!w['b_submission']),t=b['find'](w=>w['identifier']===p[0x0]['identifier']&&!w['b_submission']),u=s?parseValueType(s['value_type']):undefined,v=t?parseValueType(t['value_type']):undefined;s&&t&&u===ValueType['Address']&&v===ValueType['String']&&(d['has'](s['value'])?!d['get'](s['value'])['includes'](t['value'])&&d['get'](s['value'])['push'](t['value']):d['set'](s['value'],[t['value']]));}const q=createQueryNode(o['id'],o['name'],m,l,p,b);c['push'](q);break;}case OperatorType['TypeLogicEqual']:case OperatorType['TypeLogicAnd']:case OperatorType['TypeLogicOr']:case OperatorType['TypeLogicAsU256GreaterEqual']:case OperatorType['TypeLogicAsU256LesserEqual']:case OperatorType['TypeLogicAsU256Equal']:case OperatorType['TypeLogicAsU256Greater']:case OperatorType['TypeLogicAsU256Lesser']:case OperatorType['TypeStringContains']:case OperatorType['TypeStringNocaseContains']:case OperatorType['TypeStringNocaseEqual']:case OperatorType['TypeNumberAdd']:case OperatorType['TypeNumberSubtract']:case OperatorType['TypeNumberMultiply']:case OperatorType['TypeNumberDivide']:case OperatorType['TypeNumberMod']:{const w=f(),x=[];for(let z=0x0;z<w;z++){c['length']===0x0&&W_ERROR(WErrors['InvalidParam'],'restoreNodeFromOutput:\x20Insufficient\x20operands\x20for\x20multi-operand\x20operation'),x['push'](c['pop']());}const y=getNodePropertyFromOpCode(j);c['push']({'type':y,'nodes':x});break;}case OperatorType['TypeLogicNot']:case OperatorType['TypeStringLength']:case OperatorType['TypeNumberAddress']:case OperatorType['TypeAddressNumber']:case OperatorType['TypeNumberString']:case OperatorType['TypeStringNumber']:case OperatorType['TypeSafeU8']:case OperatorType['TypeSafeU16']:case OperatorType['TypeSafeU32']:case OperatorType['TypeSafeU64']:case OperatorType['TypeSafeU128']:case OperatorType['TypeSafeU256']:case OperatorType['TypedValueType']:case OperatorType['TypedValueVecLength']:{c['length']===0x0&&W_ERROR(WErrors['InvalidParam'],'restoreNodeFromOutput:\x20Insufficient\x20operand\x20for\x20single-operand\x20operation');const A=c['pop'](),B=getNodePropertyFromOpCode(j);c['push']({'type':B,'node':A});break;}case OperatorType['TypeStringIndexof']:case OperatorType['TypeStringNocaseIndexof']:case OperatorType['TypedValueVecIndexOf_Bool']:case OperatorType['TypedValueVecIndexOf_Address']:case OperatorType['TypedValueVecIndexOf_String']:case OperatorType['TypedValueVecIndexOf_StringNoCase']:case OperatorType['TypedValueVecIndexOf_Number']:{const C=f(),D=C===0x0?'forward':'backward';c['length']<0x2&&W_ERROR(WErrors['InvalidParam'],'restoreNodeFromOutput:\x20Insufficient\x20operands\x20for\x20two-operand\x20operation');const E=c['pop'](),F=c['pop'](),G=getNodePropertyFromOpCode(j);c['push']({'type':G,'nodeLeft':E,'nodeRight':F,'order':D});break;}default:W_ERROR(WErrors['InvalidParam'],'restoreNodeFromOutput:\x20Unknown\x20opcode\x20'+j);}}c['length']!==0x1&&W_ERROR(WErrors['InvalidParam'],'restoreNodeFromOutput:\x20Expected\x201\x20node\x20in\x20stack,\x20found\x20'+c['length']);const h=collectAutoGeneratedIdentifiers(c[0x0]);return{'root':c[0x0],'rep_quote':d,'autoGeneratedIdentifiers':h};}catch(H){throw new Error('restoreNodeFromOutput:\x20Failed\x20to\x20restore\x20GuardNode\x20from\x20output:\x20'+H['message']);}};const collectAutoGeneratedIdentifiers=a=>{const b=[];switch(a['type']){case'query_progress_history_find':break;case'query_progress_history_session_find':b['push'](...collectAutoGeneratedIdentifiers(a['historyIdx']));break;case'query_progress_history_session_forward_find':b['push'](...collectAutoGeneratedIdentifiers(a['historyIdx'])),b['push'](...collectAutoGeneratedIdentifiers(a['sessionIdx']));break;case'query_progress_history_session_count':b['push'](...collectAutoGeneratedIdentifiers(a['historyIdx']));break;case'query_progress_history_session_forward_count':b['push'](...collectAutoGeneratedIdentifiers(a['historyIdx'])),b['push'](...collectAutoGeneratedIdentifiers(a['sessionIdx']));break;case'query_progress_history_session_forward_retained_submission_count':b['push'](...collectAutoGeneratedIdentifiers(a['historyIdx'])),b['push'](...collectAutoGeneratedIdentifiers(a['sessionIdx'])),b['push'](...collectAutoGeneratedIdentifiers(a['forwardIdx']));break;case'query_reward_record_find':case'query_reward_record_count':case'query_reward_record_exists':a['recipient']['type']==='identifier'&&b['push'](a['recipient']['identifier']);break;case'logic_equal':case'logic_and':case'logic_or':case'logic_as_u256_greater_or_equal':case'logic_as_u256_lesser_or_equal':case'logic_as_u256_equal':case'logic_as_u256_greater':case'logic_as_u256_lesser':case'logic_string_contains':case'logic_string_nocase_contains':case'logic_string_nocase_equal':case'calc_number_add':case'calc_number_multiply':case'calc_number_subtract':case'calc_number_divide':case'calc_number_mod':for(const c of a['nodes']){b['push'](...collectAutoGeneratedIdentifiers(c));}break;case'logic_not':case'calc_string_length':case'convert_number_address':case'convert_address_number':case'convert_number_string':case'convert_string_number':case'convert_safe_u8':case'convert_safe_u16':case'convert_safe_u32':case'convert_safe_u64':case'convert_safe_u128':case'convert_safe_u256':case'value_type':case'vec_length':b['push'](...collectAutoGeneratedIdentifiers(a['node']));break;case'calc_string_indexof':case'calc_string_nocase_indexof':case'vec_indexof_bool':case'vec_indexof_address':case'vec_indexof_string':case'vec_indexof_string_nocase':case'vec_indexof_number':b['push'](...collectAutoGeneratedIdentifiers(a['nodeLeft'])),b['push'](...collectAutoGeneratedIdentifiers(a['nodeRight']));break;case'vec_contains_bool':case'vec_contains_address':case'vec_contains_string':case'vec_contains_string_nocase':case'vec_contains_number':for(const d of a['nodes']){b['push'](...collectAutoGeneratedIdentifiers(d));}break;}return b;},getNodePropertyFromOpCode=a=>{switch(a){case OperatorType['TypeLogicEqual']:return'logic_equal';case OperatorType['TypeLogicAnd']:return'logic_and';case OperatorType['TypeLogicOr']:return'logic_or';case OperatorType['TypeLogicAsU256GreaterEqual']:return'logic_as_u256_greater_or_equal';case OperatorType['TypeLogicAsU256LesserEqual']:return'logic_as_u256_lesser_or_equal';case OperatorType['TypeLogicAsU256Equal']:return'logic_as_u256_equal';case OperatorType['TypeLogicAsU256Greater']:return'logic_as_u256_greater';case OperatorType['TypeLogicAsU256Lesser']:return'logic_as_u256_lesser';case OperatorType['TypeStringContains']:return'logic_string_contains';case OperatorType['TypeStringNocaseContains']:return'logic_string_nocase_contains';case OperatorType['TypeStringNocaseEqual']:return'logic_string_nocase_equal';case OperatorType['TypeNumberAdd']:return'calc_number_add';case OperatorType['TypeNumberSubtract']:return'calc_number_subtract';case OperatorType['TypeNumberMultiply']:return'calc_number_multiply';case OperatorType['TypeNumberDivide']:return'calc_number_divide';case OperatorType['TypeNumberMod']:return'calc_number_mod';case OperatorType['TypeLogicNot']:return'logic_not';case OperatorType['TypeStringLength']:return'calc_string_length';case OperatorType['TypeNumberAddress']:return'convert_number_address';case OperatorType['TypeAddressNumber']:return'convert_address_number';case OperatorType['TypeNumberString']:return'convert_number_string';case OperatorType['TypeStringNumber']:return'convert_string_number';case OperatorType['TypeSafeU8']:return'convert_safe_u8';case OperatorType['TypeSafeU16']:return'convert_safe_u16';case OperatorType['TypeSafeU32']:return'convert_safe_u32';case OperatorType['TypeSafeU64']:return'convert_safe_u64';case OperatorType['TypeSafeU128']:return'convert_safe_u128';case OperatorType['TypeSafeU256']:return'convert_safe_u256';case OperatorType['TypedValueType']:return'value_type';case OperatorType['TypedValueVecLength']:return'vec_length';case OperatorType['TypeStringIndexof']:return'calc_string_indexof';case OperatorType['TypeStringNocaseIndexof']:return'calc_string_nocase_indexof';case OperatorType['TypedValueVecIndexOf_Bool']:return'vec_indexof_bool';case OperatorType['TypedValueVecIndexOf_Address']:return'vec_indexof_address';case OperatorType['TypedValueVecIndexOf_String']:return'vec_indexof_string';case OperatorType['TypedValueVecIndexOf_StringNoCase']:return'vec_indexof_string_nocase';case OperatorType['TypedValueVecIndexOf_Number']:return'vec_indexof_number';default:return'unknown';}};
@@ -1 +1 @@
1
- import{Messenger}from'./messenger.js';import{MessageStorage}from'./storage.js';import{MessengerPersistStorage}from'./storage.js';import{MessageType,MessageStatus,WTS_MAX_MESSAGE_COUNT,WTS_SCHEMA_URL}from'./types.js';import{MessengerError,MessengerErrorCode,DEFAULT_MESSENGER_CONFIG}from'./types.js';import{canonicalizeJson}from'./utils.js';import{MAX_MESSENGER_ACCOUNTS}from'../local/account.js';import{GetAccountOrMark_Address}from'../local/index.js';const MAX_ACCOUNTS=MAX_MESSENGER_ACCOUNTS,sleep=a=>new Promise(b=>setTimeout(b,a));export class MessengerManager{['accounts']=new Map();['config'];['messageListeners']=new Set();['isWatching']=![];['persistStorage'];['instanceId'];['accountRefreshTimer']=null;['pollingLockedAccounts']=new Set();constructor(a){this['config']={...DEFAULT_MESSENGER_CONFIG,...a?.['messengerConfig']},this['instanceId']=a?.['instanceId']||'default',this['persistStorage']=new MessengerPersistStorage();}['findAccount'](a){return this['accounts']['get'](a['toLowerCase']());}['getConfig'](){return this['config'];}['get_accounts'](){return Array['from'](this['accounts']['values']())['map'](a=>a['address']);}async['refresh_accounts'](){const {Account:a}=await import('../local/account.js'),b=await a['Instance']()['list_messenger_accounts'](),c=new Set(this['accounts']['keys']()),d=new Set(b['map'](e=>e['address']['toLowerCase']()));for(const e of c){!d['has'](e)&&this['remove_account_internal'](e);}for(const f of b){const g=f['address']['toLowerCase']();if(!this['accounts']['has'](g))try{await this['add_account_internal'](f['address']);}catch(h){console['error']('Failed\x20to\x20add\x20account\x20'+g+'\x20to\x20messenger\x20manager:',h);}}if(this['accounts']['size']>0x0&&!this['isWatching'])this['startPolling']();else this['accounts']['size']===0x0&&this['isWatching']&&this['stopPolling']();await this['syncAllContactLists']();}async['start'](){await this['refresh_accounts']();for(const a of this['accounts']['values']()){const b=this['persistStorage']['tryAcquirePollingLock'](a['address'],this['instanceId']);b?(this['pollingLockedAccounts']['add'](a['address']['toLowerCase']()),a['messenger']['setOnMessageCallback'](c=>{for(const d of this['messageListeners']){d(c);}})):console['debug']('Another\x20process\x20holds\x20polling\x20lock\x20for\x20'+a['address']);}!this['isWatching']&&this['startPolling'](),this['accountRefreshTimer']&&clearInterval(this['accountRefreshTimer']),this['accountRefreshTimer']=setInterval(()=>{this['refresh_accounts']()['catch'](c=>{console['error']('Failed\x20to\x20refresh\x20accounts:',c);});},this['config']['watch_interval_ms']);}['stop'](){this['accountRefreshTimer']&&(clearInterval(this['accountRefreshTimer']),this['accountRefreshTimer']=null);for(const a of this['pollingLockedAccounts']){this['persistStorage']['releasePollingLock'](a,this['instanceId']);}this['pollingLockedAccounts']['clear'](),this['stopPolling'](),this['clear_accounts']();}async['ensureAccountReady'](a){const b=a['toLowerCase'](),c=this['accounts']['get'](b);if(c?.['initialized'])return c;if(c?.['initializing']){await c['initializing'];const d=this['accounts']['get'](b);if(d?.['initialized'])return d;throw new MessengerError(MessengerErrorCode['SERVER_ERROR'],'Account\x20'+a+'\x20initialization\x20failed');}return this['initializeAccount'](b);}async['initializeAccount'](a){const b=a['toLowerCase']();if(this['accounts']['size']>=MAX_ACCOUNTS)throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'Maximum\x20'+MAX_ACCOUNTS+'\x20accounts\x20allowed');const c=this['doInitialize'](b),d={'address':b,'messenger':null,'initialized':![],'initializing':c,'contactLists':{'friends':[],'guards':[],'lastUpdatedAt':0x0}};this['accounts']['set'](b,d);try{await c;const e=this['accounts']['get'](b);if(!e||!e['initialized'])throw new MessengerError(MessengerErrorCode['SERVER_ERROR'],'Account\x20'+a+'\x20initialization\x20failed');return e;}catch(f){this['accounts']['delete'](b);throw f;}}async['doInitialize'](a){const b=new Messenger(a,this['config']);try{await b['initialize']();}catch(d){throw new MessengerError(MessengerErrorCode['SERVER_ERROR'],'Failed\x20to\x20initialize\x20account\x20'+a+':\x20'+(d instanceof Error?d['message']:String(d)));}await sleep(0x3e8);const c={'friends':[],'guards':[],'lastUpdatedAt':0x0};this['accounts']['set'](a,{'address':a,'messenger':b,'initialized':!![],'contactLists':c});if(this['isWatching']){const e=this['persistStorage']['tryAcquirePollingLock'](a,this['instanceId']);e&&(this['pollingLockedAccounts']['add'](a),b['setOnMessageCallback'](f=>{for(const g of this['messageListeners']){g(f);}}));}}async['add_account_internal'](a){await this['ensureAccountReady'](a);}['remove_account_internal'](a){const b=a['toLowerCase'](),c=this['accounts']['get'](b);if(!c)return![];return c['initialized']&&c['messenger']&&c['messenger']['disconnect'](),this['persistStorage']['releasePollingLock'](b,this['instanceId']),this['pollingLockedAccounts']['delete'](b),this['accounts']['delete'](b);}['clear_accounts'](){this['stopPolling']();for(const a of this['accounts']['values']()){a['messenger']['disconnect']();}this['accounts']['clear']();}async['send'](a,b,c,d){const {Account:e}=await import('../local/account.js'),f=await e['Instance']()['get'](a,![]);if(!f)throw new MessengerError(MessengerErrorCode['IDENTITY_NOT_FOUND'],'Account\x20'+a+'\x20not\x20found');if(f['m']==null){if(d?.['new_messenger_name']==null)throw new MessengerError(MessengerErrorCode['ACCOUNT_MESSENGER_NOT_ENABLED'],'Account\x20messenger\x20name\x20not\x20set.\x20Use\x20new_messenger_name\x20parameter\x20to\x20set\x20it\x20automatically.');await e['Instance']()['set_messenger'](a,d['new_messenger_name']);}const g=await this['ensureAccountReady'](a);if(d?.['new_messenger_name']!=null){const h=await e['Instance']()['get'](a,![]);h&&h['m']!==d['new_messenger_name']&&await e['Instance']()['set_messenger'](a,d['new_messenger_name']);}return g['messenger']['sendMessage'](b,c,{'guardAddress':d?.['guardAddress'],'passportAddress':d?.['passportAddress'],'force':d?.['force']});}async['send_file'](a,b,c,d){const {Account:e}=await import('../local/account.js'),f=await e['Instance']()['get'](a,![]);if(!f)throw new MessengerError(MessengerErrorCode['IDENTITY_NOT_FOUND'],'Account\x20'+a+'\x20not\x20found');if(f['m']==null){if(d?.['new_messenger_name']==null)throw new MessengerError(MessengerErrorCode['ACCOUNT_MESSENGER_NOT_ENABLED'],'Account\x20messenger\x20name\x20not\x20set.\x20Use\x20new_messenger_name\x20parameter\x20to\x20set\x20it\x20automatically.');await e['Instance']()['set_messenger'](a,d['new_messenger_name']);}const g=await this['ensureAccountReady'](a);if(d?.['new_messenger_name']!=null){const h=await e['Instance']()['get'](a,![]);h&&h['m']!==d['new_messenger_name']&&await e['Instance']()['set_messenger'](a,d['new_messenger_name']);}return g['messenger']['sendZipFile'](b,c,{'fileName':d?.['fileName'],'contentType':d?.['contentType'],'guardAddress':d?.['guardAddress'],'passportAddress':d?.['passportAddress'],'force':d?.['force']});}async['watch'](a){let b=[];if(a?.['account']!==undefined){const i=a['account']['toLowerCase'](),j=this['accounts']['get'](i);j?.['messenger']&&await j['messenger']['pullMessages']();const k=new MessageStorage(i);b=k['getAllMessages'](i);}else for(const l of this['accounts']['values']()){l['messenger']&&await l['messenger']['pullMessages']();const m=new MessageStorage(l['address']),n=m['getAllMessages'](l['address']);b['push'](...n);}if(a){const o=a['peerAddress']?await GetAccountOrMark_Address(a['peerAddress']):undefined;b=b['filter'](p=>{if(a?.['account']!==undefined){const r=a['account']['toLowerCase'](),s=p['fromAddress']['toLowerCase'](),t=p['toAddress']['toLowerCase']();if(s!==r&&t!==r)return![];}if(a['direction']&&p['direction']!==a['direction'])return![];if(a['status']&&p['status']!==a['status'])return![];if(a['msgType']!==undefined&&p['msgType']!==a['msgType'])return![];if(a['contentType'])switch(a['contentType']){case'text':if(p['msgType']!==MessageType['NORMAL_MESSAGE'])return![];break;case'zip':if(!p['zipMetadata'])return![];break;case'wts':if(!p['zipMetadata']||p['zipMetadata']?.['contentType']!=='wts')return![];break;case'wip':if(!p['zipMetadata']||p['zipMetadata']?.['contentType']!=='wip')return![];break;}if(a['peerAddress']&&o){const u=o['toLowerCase'](),v=p['fromAddress']['toLowerCase'](),w=p['toAddress']['toLowerCase']();if(v!==u&&w!==u)return![];}const q=a['timeField']||'createdAt';if(a['startTime']!==undefined||a['endTime']!==undefined){const x=p[q];if(x!==undefined){if(a['startTime']!==undefined&&x<a['startTime'])return![];if(a['endTime']!==undefined&&x>a['endTime'])return![];}}if(a['createdAtStart']!==undefined&&p['createdAt']<a['createdAtStart'])return![];if(a['createdAtEnd']!==undefined&&p['createdAt']>a['createdAtEnd'])return![];if(a['receivedAtStart']!==undefined){if(p['receivedAt']===undefined||p['receivedAt']<a['receivedAtStart'])return![];}if(a['receivedAtEnd']!==undefined){if(p['receivedAt']===undefined||p['receivedAt']>a['receivedAtEnd'])return![];}if(a['serverTimestampStart']!==undefined){if(p['serverTimestamp']===undefined||p['serverTimestamp']<a['serverTimestampStart'])return![];}if(a['serverTimestampEnd']!==undefined){if(p['serverTimestamp']===undefined||p['serverTimestamp']>a['serverTimestampEnd'])return![];}if(a['decryptedOnly']&&!p['plaintext'])return![];if(a['confirmedOnly']&&p['status']!==MessageStatus['CONFIRMED'])return![];if(a['arkConfirmedOnly']){if(!p['arkConfirmed'])return![];}if(a['proofedOnly']){if(!p['proof'])return![];}if(a['arkTimestampStart']!==undefined){if(p['arkConfirmed']===undefined||p['arkConfirmed']['timestamp']<a['arkTimestampStart'])return![];}if(a['arkTimestampEnd']!==undefined){if(p['arkConfirmed']===undefined||p['arkConfirmed']['timestamp']>a['arkTimestampEnd'])return![];}if(a['hasLastReceivedIndexOnly']){if(p['lastReceivedLeafIndex']===undefined||p['lastReceivedLeafIndex']===null)return![];}if(a['lastReceivedIndexMin']!==undefined){if(p['lastReceivedLeafIndex']===undefined||p['lastReceivedLeafIndex']<a['lastReceivedIndexMin'])return![];}if(a['lastReceivedIndexMax']!==undefined){if(p['lastReceivedLeafIndex']===undefined||p['lastReceivedLeafIndex']>a['lastReceivedIndexMax'])return![];}if(a['keyword']&&p['plaintext']){if(!p['plaintext']['toLowerCase']()['includes'](a['keyword']['toLowerCase']()))return![];}if(a['listFilterMode']&&a['listFilterMode']!=='any'){const y=this['findAccount'](p['toAddress']);if(!y)return![];const z=p['fromAddress']['toLowerCase'](),A=y['contactLists'],B=new Set(A['friends']['map'](G=>G['toLowerCase']())),C=new Set(A['guards']['map'](G=>G['guardAddress']['toLowerCase']())),D=B['has'](z),E=C['has'](z),F=!D&&!E;switch(a['listFilterMode']){case'friends':if(!D)return![];break;case'guard':if(!E)return![];break;case'stranger':if(!F)return![];break;}if(a['customListFilter']){const {includeAddresses:G,excludeAddresses:H,relation:relation='union'}=a['customListFilter'];if(H){const I=new Set(H['map'](J=>J['toLowerCase']()));if(I['has'](z))return![];}if(G&&G['length']>0x0){const J=new Set(G['map'](L=>L['toLowerCase']())),K=J['has'](z);if(relation==='union'){const L=a['listFilterMode']==='friends'&&D||a['listFilterMode']==='guard'&&E||a['listFilterMode']==='stranger'&&F;if(!K&&!L)return![];}else{if(!K)return![];}}}}if(a['viewed']!==undefined){const M=p['viewedAt']!==undefined;if(a['viewed']!==M)return![];}if(a['viewedAtStart']!==undefined){if(p['viewedAt']===undefined||p['viewedAt']<a['viewedAtStart'])return![];}if(a['viewedAtEnd']!==undefined){if(p['viewedAt']===undefined||p['viewedAt']>a['viewedAtEnd'])return![];}return!![];});}const c=a?.['sortOrder']??'desc',d=a?.['timeField']||'createdAt';b['sort']((p,q)=>{const r=p[d]||0x0,s=q[d]||0x0;return c==='asc'?r-s:s-r;});const {MAX_QUERY_LIMIT:e}=await import('./types.js'),f=this['config']['defaultQueryLimit']??0x32,g=Math['min'](a?.['limit']??f,e),h=a?.['offset']??0x0;return b=b['slice'](h,h+g),b;}['startPolling'](){if(this['isWatching'])return;this['isWatching']=!![];}['stopPolling'](){this['isWatching']=![];}['onMessage'](a){this['messageListeners']['add'](a);}['offMessage'](a){this['messageListeners']['delete'](a);}['destroy'](){this['stop'](),this['messageListeners']['clear']();}async['syncContactLists'](a){const b=this['findAccount'](a);if(!b)return{'success':![],'friends':[],'guards':[],'error':'Account\x20not\x20found:\x20'+a};try{const [c,d]=await Promise['all']([b['messenger']['getFriendsList'](),b['messenger']['getGuardList']()]),e=d['currentGuardList']||[];return b['contactLists']={'friends':c,'guards':e,'lastUpdatedAt':Date['now']()},{'success':!![],'friends':c,'guards':e};}catch(f){return console['error']('Failed\x20to\x20sync\x20contact\x20lists\x20for\x20'+a+':',f),{'success':![],'friends':b['contactLists']['friends'],'guards':b['contactLists']['guards'],'error':f instanceof Error?f['message']:String(f)};}}async['syncAllContactLists'](){const a=new Map();for(const b of this['accounts']['values']()){const c=await this['syncContactLists'](b['address']);a['set'](b['address'],c);}return a;}['getContactLists'](a){const b=this['findAccount'](a);return b?.['contactLists'];}['setContactLists'](a,b){const c=this['findAccount'](a);if(!c)return![];return c['contactLists']={...c['contactLists'],...b,'lastUpdatedAt':Date['now']()},!![];}['isStranger'](a,b){const c=this['findAccount'](a);if(!c)return!![];const d=b['toLowerCase'](),e=c['contactLists'],f=e['friends']['some'](h=>h['toLowerCase']()===d),g=e['guards']['some'](h=>h['guardAddress']['toLowerCase']()===d);return!f&&!g;}['recordGuardSender'](a,b){const c=this['findAccount'](a);if(!c)return![];const d=b['toLowerCase'](),e=c['contactLists']['guards']['some'](f=>f['guardAddress']['toLowerCase']()===d);return!e&&(c['contactLists']['guards']['push']({'guardAddress':b,'passportValiditySeconds':0x15180}),c['contactLists']['lastUpdatedAt']=Date['now']()),!![];}['generateNonce'](){return Math['random']()['toString'](0x24)['substring'](0x2,0xf)+Math['random']()['toString'](0x24)['substring'](0x2,0xf);}async['watch_paginated'](a){const {MAX_QUERY_LIMIT:b}=await import('./types.js'),c=await this['watch'](a),d=c['length'],e=this['config']['defaultQueryLimit']??0x32,f=Math['min'](a?.['limit']??e,b),g=a?.['offset']??0x0,h=c['slice'](g,g+f);return{'messages':h,'total':d,'offset':g,'limit':f};}async['get_conversations'](a){const b=a?{'account':a}:undefined,c=await this['watch'](b),d=new Map();for(const e of c){const f=a?.['toLowerCase'](),g=e['fromAddress']['toLowerCase']()===f?e['toAddress']:e['fromAddress'];!d['has'](g)&&d['set'](g,{'peerAddress':g,'lastMessageAt':e['createdAt'],'messageCount':0x0,'unreadCount':0x0,'lastMessagePreview':e['plaintext']});const h=d['get'](g);h['messageCount']++,e['createdAt']>h['lastMessageAt']&&(h['lastMessageAt']=e['createdAt'],h['lastMessagePreview']=e['plaintext']),e['status']!==MessageStatus['READ']&&e['toAddress']['toLowerCase']()===f&&h['unreadCount']++;}return Array['from'](d['values']())['sort']((i,j)=>j['lastMessageAt']-i['lastMessageAt']);}async['generate_wts'](a,b,c,d,e){const f=await import('fs'),g=await import('path'),h=b['toLowerCase'](),k=c['toLowerCase'](),l=new MessageStorage(h),m=l['getAllMessages'](h);let n=m['filter'](w=>{const x=w['fromAddress']['toLowerCase'](),y=w['toAddress']['toLowerCase'](),z=x===h&&y===k||x===k&&y===h;return z;});n=n['filter'](w=>w['leafIndex']!==undefined&&w['serverTimestamp']!==undefined)['reduce']((w,x)=>{const y=w['find'](z=>z['messageId']===x['messageId']);return!y&&w['push'](x),w;},[])['sort']((w,x)=>{const y=w['serverTimestamp']-x['serverTimestamp'];if(y!==0x0)return y;return w['leafIndex']-x['leafIndex'];});if(d)switch(d['type']){case'time':{const w=Math['min'](d['start'],d['end']),x=Math['max'](d['start'],d['end']);n=n['filter'](y=>y['createdAt']>=w&&y['createdAt']<=x);break;}case'messageId':{const y=d['start'],z=d['end'];n=n['filter'](A=>A['messageId']>=y&&A['messageId']<=z);break;}case'seqIndex':{const A=Math['min'](d['start'],d['end']),B=Math['max'](d['start'],d['end']);n=n['filter'](C=>C['leafIndex']>=A&&C['leafIndex']<=B);break;}}if(n['length']===0x0)throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'No\x20messages\x20found\x20for\x20the\x20given\x20criteria');const o=n['map'](C=>C['leafIndex'])['filter'](C=>C!==undefined)['sort']((C,D)=>C-D),p=[];for(let C=0x1;C<o['length'];C++){const D=o[C-0x1]+0x1,E=o[C];if(E!==D)for(let F=D;F<E;F++){p['push'](F);}}p['length']>0x0&&console['warn']('[generate_wts]\x20Warning:\x20Missing\x20leafIndices\x20'+p['join'](',\x20')+'.\x20'+'WTS\x20will\x20contain\x20non-continuous\x20message\x20sequence.\x20'+'Verification\x20may\x20fail\x20if\x20strict\x20continuity\x20check\x20is\x20enabled.');if(n['length']>WTS_MAX_MESSAGE_COUNT)throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'Message\x20count\x20('+n['length']+')\x20exceeds\x20maximum\x20allowed\x20('+WTS_MAX_MESSAGE_COUNT+')');!f['existsSync'](a)&&f['mkdirSync'](a,{'recursive':!![]});const q=h['slice'](0x0,0x6)+'_'+k['slice'](0x0,0x6),r=[];let s=[];for(let G=0x0;G<n['length'];G++){const H=n[G];if(s['length']===0x0)s['push'](H);else{const I=s[s['length']-0x1],J=I['leafIndex']+0x1;s['length']>=WTS_MAX_MESSAGE_COUNT||H['leafIndex']!==J?(r['push'](s),s=[H]):s['push'](H);}}s['length']>0x0&&r['push'](s);console['log']('[generate_wts]\x20Grouped\x20'+n['length']+'\x20messages\x20into\x20'+r['length']+'\x20continuous\x20group(s)'),r['forEach']((K,L)=>{const M=K['map'](N=>N['leafIndex'])['join'](',\x20');console['log']('\x20\x20Group\x20'+(L+0x1)+':\x20leafIndices\x20['+M+']');});const t=[];for(const K of r){const L=K['map'](a2=>a2['leafIndex'])['filter'](a2=>a2!==undefined),M=Math['min'](...L),N=Math['max'](...L),O=K[0x0]['createdAt'],P=K[K['length']-0x1]['createdAt'];for(const a2 of K){if(a2['serverTimestamp']===undefined)throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'Message\x20'+a2['messageId']+'\x20missing\x20serverTimestamp');if(a2['leafIndex']===undefined)throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'Message\x20'+a2['messageId']+'\x20missing\x20leafIndex');if(!a2['prevRoot'])throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'Message\x20'+a2['messageId']+'\x20missing\x20prevRoot');if(!a2['newRoot'])throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'Message\x20'+a2['messageId']+'\x20missing\x20newRoot');if(!a2['serverSignature'])throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'Message\x20'+a2['messageId']+'\x20missing\x20serverSignature');}const Q=K['map'](a3=>{const a4={'id':a3['messageId'],'from':a3['fromAddress'],'to':a3['toAddress'],'plaintextHash':a3['plaintextHash'],'clientTimestamp':a3['createdAt'],'timestamp':a3['serverTimestamp'],'leafIndex':a3['leafIndex'],'prevRoot':a3['prevRoot'],'merkleRoot':a3['newRoot'],'serverSignature':a3['serverSignature'],'serverPublicKey':a3['serverPublicKey']||'','msgType':a3['msgType']};return!e&&a3['plaintext']!==undefined&&(a4['plaintext']=a3['plaintext']),a3['guardAddress']!==undefined&&(a4['guardAddress']=a3['guardAddress']),a3['passportAddress']!==undefined&&(a4['passportAddress']=a3['passportAddress']),a3['arkConfirmed']!==undefined&&(a4['arkConfirmed']={'recipient':a3['arkConfirmed']['recipient'],'recipientPublicKey':a3['arkConfirmed']['recipientPublicKey'],'signature':a3['arkConfirmed']['signature'],'timestamp':a3['arkConfirmed']['timestamp']}),a3['zipMetadata']!==undefined&&(a4['zipMetadata']=a3['zipMetadata']),a3['lastReceivedLeafIndex']!==undefined&&a3['lastReceivedLeafIndex']!==-0x1&&(a4['lastReceivedLeafIndex']=a3['lastReceivedLeafIndex']),a4;}),R=[h,k]['sort'](),S={'participants':R},T={'session':S,'messages':Q},{sha256:U}=await import('@noble/hashes/sha256'),{bytesToHex:V}=await import('@noble/hashes/utils'),W=canonicalizeJson(T),X='sha256:'+V(U(new TextEncoder()['encode'](W))),Y={'type':'wts','version':'1.0','created':new Date()['toISOString'](),'hash':X,'algorithm':'sha256','startTime':O,'endTime':P,'messageCount':Q['length'],'merkleRoot':Q[Q['length']-0x1]['merkleRoot'],'creator':h,'participant':k},Z={'wts':WTS_SCHEMA_URL,'payload':T,'meta':Y},a0=q+'_'+M+'-'+N+'.wts',a1=g['join'](a,a0);f['writeFileSync'](a1,JSON['stringify'](Z,null,0x2)),t['push'](a1);}const u=n[0x0]?.['createdAt']||0x0,v=n[n['length']-0x1]?.['createdAt']||0x0;return{'files':t,'totalMessageCount':n['length'],'timeRange':{'start':u,'end':v}};}async['addToBlacklist'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['addToBlacklist'](b);}async['removeFromBlacklist'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['removeFromBlacklist'](b);}async['clearBlacklist'](a){const b=this['findAccount'](a);if(!b)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return b['messenger']['clearBlacklist']();}async['getBlacklist'](a){const b=this['findAccount'](a);if(!b)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return b['messenger']['getBlacklist']();}async['existInBlacklist'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['existInBlacklist'](b);}async['addToFriendsList'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['addToFriendsList'](b);}async['removeFromFriendsList'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['removeFromFriendsList'](b);}async['clearFriendsList'](a){const b=this['findAccount'](a);if(!b)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return b['messenger']['clearFriendsList']();}async['getFriendsList'](a){const b=this['findAccount'](a);if(!b)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return b['messenger']['getFriendsList']();}async['existInFriendsList'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['existInFriendsList'](b);}async['addToGuardList'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['addToGuardList'](b);}async['removeFromGuardList'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['removeFromGuardList'](b);}async['getGuardList'](a){const b=this['findAccount'](a);if(!b)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return b['messenger']['getGuardList']();}async['getSettings'](a){const b=this['findAccount'](a);if(!b)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return b['messenger']['getSettings']();}async['setSettings'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['setSettings'](b);}}
1
+ import{Messenger}from'./messenger.js';import{MessageStorage}from'./storage.js';import{MessengerPersistStorage}from'./storage.js';import{MessageType,MessageStatus,WTS_MAX_MESSAGE_COUNT,WTS_SCHEMA_URL}from'./types.js';import{MessengerError,MessengerErrorCode,DEFAULT_MESSENGER_CONFIG}from'./types.js';import{canonicalizeJson}from'./utils.js';import{MAX_MESSENGER_ACCOUNTS}from'../local/account.js';import{GetAccountOrMark_Address}from'../local/index.js';const MAX_ACCOUNTS=MAX_MESSENGER_ACCOUNTS,sleep=a=>new Promise(b=>setTimeout(b,a));export class MessengerManager{['accounts']=new Map();['config'];['messageListeners']=new Set();['isWatching']=![];['persistStorage'];['instanceId'];['accountRefreshTimer']=null;['pollingLockedAccounts']=new Set();constructor(a){this['config']={...DEFAULT_MESSENGER_CONFIG,...a?.['messengerConfig']},this['instanceId']=a?.['instanceId']||'default',this['persistStorage']=new MessengerPersistStorage();}['findAccount'](a){return this['accounts']['get'](a['toLowerCase']());}['getConfig'](){return this['config'];}['get_accounts'](){return Array['from'](this['accounts']['values']())['map'](a=>a['address']);}async['refresh_accounts'](){const {Account:a}=await import('../local/account.js'),b=await a['Instance']()['list_messenger_accounts'](),c=new Set(this['accounts']['keys']()),d=new Set(b['map'](e=>e['address']['toLowerCase']()));for(const e of c){!d['has'](e)&&this['remove_account_internal'](e);}for(const f of b){const g=f['address']['toLowerCase']();if(!this['accounts']['has'](g))try{await this['add_account_internal'](f['address']);}catch(h){}}if(this['accounts']['size']>0x0&&!this['isWatching'])this['startPolling']();else this['accounts']['size']===0x0&&this['isWatching']&&this['stopPolling']();await this['syncAllContactLists']();}async['start'](){await this['refresh_accounts']();for(const a of this['accounts']['values']()){const b=this['persistStorage']['tryAcquirePollingLock'](a['address'],this['instanceId']);if(b)this['pollingLockedAccounts']['add'](a['address']['toLowerCase']()),a['messenger']['setOnMessageCallback'](c=>{for(const d of this['messageListeners']){d(c);}});else{}}!this['isWatching']&&this['startPolling'](),this['accountRefreshTimer']&&clearInterval(this['accountRefreshTimer']),this['accountRefreshTimer']=setInterval(()=>{this['refresh_accounts']()['catch'](c=>{});},this['config']['watch_interval_ms']);}['stop'](){this['accountRefreshTimer']&&(clearInterval(this['accountRefreshTimer']),this['accountRefreshTimer']=null);for(const a of this['pollingLockedAccounts']){this['persistStorage']['releasePollingLock'](a,this['instanceId']);}this['pollingLockedAccounts']['clear'](),this['stopPolling'](),this['clear_accounts']();}async['ensureAccountReady'](a){const b=a['toLowerCase'](),c=this['accounts']['get'](b);if(c?.['initialized'])return c;if(c?.['initializing']){await c['initializing'];const d=this['accounts']['get'](b);if(d?.['initialized'])return d;throw new MessengerError(MessengerErrorCode['SERVER_ERROR'],'Account\x20'+a+'\x20initialization\x20failed');}return this['initializeAccount'](b);}async['initializeAccount'](a){const b=a['toLowerCase']();if(this['accounts']['size']>=MAX_ACCOUNTS)throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'Maximum\x20'+MAX_ACCOUNTS+'\x20accounts\x20allowed');const c=this['doInitialize'](b),d={'address':b,'messenger':null,'initialized':![],'initializing':c,'contactLists':{'friends':[],'guards':[],'lastUpdatedAt':0x0}};this['accounts']['set'](b,d);try{await c;const e=this['accounts']['get'](b);if(!e||!e['initialized'])throw new MessengerError(MessengerErrorCode['SERVER_ERROR'],'Account\x20'+a+'\x20initialization\x20failed');return e;}catch(f){this['accounts']['delete'](b);throw f;}}async['doInitialize'](a){const b=new Messenger(a,this['config']);try{await b['initialize']();}catch(d){throw new MessengerError(MessengerErrorCode['SERVER_ERROR'],'Failed\x20to\x20initialize\x20account\x20'+a+':\x20'+(d instanceof Error?d['message']:String(d)));}await sleep(0x3e8);const c={'friends':[],'guards':[],'lastUpdatedAt':0x0};this['accounts']['set'](a,{'address':a,'messenger':b,'initialized':!![],'contactLists':c});if(this['isWatching']){const e=this['persistStorage']['tryAcquirePollingLock'](a,this['instanceId']);e&&(this['pollingLockedAccounts']['add'](a),b['setOnMessageCallback'](f=>{for(const g of this['messageListeners']){g(f);}}));}}async['add_account_internal'](a){await this['ensureAccountReady'](a);}['remove_account_internal'](a){const b=a['toLowerCase'](),c=this['accounts']['get'](b);if(!c)return![];return c['initialized']&&c['messenger']&&c['messenger']['disconnect'](),this['persistStorage']['releasePollingLock'](b,this['instanceId']),this['pollingLockedAccounts']['delete'](b),this['accounts']['delete'](b);}['clear_accounts'](){this['stopPolling']();for(const a of this['accounts']['values']()){a['messenger']&&a['messenger']['disconnect']();}this['accounts']['clear']();}async['send'](a,b,c,d){const {Account:e}=await import('../local/account.js'),f=await e['Instance']()['get'](a,![]);if(!f)throw new MessengerError(MessengerErrorCode['IDENTITY_NOT_FOUND'],'Account\x20'+a+'\x20not\x20found');if(f['m']==null){if(d?.['new_messenger_name']==null)throw new MessengerError(MessengerErrorCode['ACCOUNT_MESSENGER_NOT_ENABLED'],'Account\x20messenger\x20name\x20not\x20set.\x20Use\x20new_messenger_name\x20parameter\x20to\x20set\x20it\x20automatically.');await e['Instance']()['set_messenger'](a,d['new_messenger_name']);}const g=await this['ensureAccountReady'](a);if(d?.['new_messenger_name']!=null){const h=await e['Instance']()['get'](a,![]);h&&h['m']!==d['new_messenger_name']&&await e['Instance']()['set_messenger'](a,d['new_messenger_name']);}return g['messenger']['sendMessage'](b,c,{'guardAddress':d?.['guardAddress'],'passportAddress':d?.['passportAddress'],'force':d?.['force']});}async['send_file'](a,b,c,d){const {Account:e}=await import('../local/account.js'),f=await e['Instance']()['get'](a,![]);if(!f)throw new MessengerError(MessengerErrorCode['IDENTITY_NOT_FOUND'],'Account\x20'+a+'\x20not\x20found');if(f['m']==null){if(d?.['new_messenger_name']==null)throw new MessengerError(MessengerErrorCode['ACCOUNT_MESSENGER_NOT_ENABLED'],'Account\x20messenger\x20name\x20not\x20set.\x20Use\x20new_messenger_name\x20parameter\x20to\x20set\x20it\x20automatically.');await e['Instance']()['set_messenger'](a,d['new_messenger_name']);}const g=await this['ensureAccountReady'](a);if(d?.['new_messenger_name']!=null){const h=await e['Instance']()['get'](a,![]);h&&h['m']!==d['new_messenger_name']&&await e['Instance']()['set_messenger'](a,d['new_messenger_name']);}return g['messenger']['sendZipFile'](b,c,{'fileName':d?.['fileName'],'contentType':d?.['contentType'],'guardAddress':d?.['guardAddress'],'passportAddress':d?.['passportAddress'],'force':d?.['force']});}async['watch'](a){let b=[];if(a?.['account']!==undefined){const i=a['account']['toLowerCase'](),j=this['accounts']['get'](i);j?.['messenger']&&await j['messenger']['pullMessages']();const k=new MessageStorage(i);b=k['getAllMessages'](i);}else for(const l of this['accounts']['values']()){l['messenger']&&await l['messenger']['pullMessages']();const m=new MessageStorage(l['address']),n=m['getAllMessages'](l['address']);b['push'](...n);}if(a){const o=a['peerAddress']?await GetAccountOrMark_Address(a['peerAddress']):undefined;b=b['filter'](p=>{if(a?.['account']!==undefined){const r=a['account']['toLowerCase'](),s=p['fromAddress']['toLowerCase'](),t=p['toAddress']['toLowerCase']();if(s!==r&&t!==r)return![];}if(a['direction']&&p['direction']!==a['direction'])return![];if(a['status']&&p['status']!==a['status'])return![];if(a['msgType']!==undefined&&p['msgType']!==a['msgType'])return![];if(a['contentType'])switch(a['contentType']){case'text':if(p['msgType']!==MessageType['NORMAL_MESSAGE'])return![];break;case'zip':if(!p['zipMetadata'])return![];break;case'wts':if(!p['zipMetadata']||p['zipMetadata']?.['contentType']!=='wts')return![];break;case'wip':if(!p['zipMetadata']||p['zipMetadata']?.['contentType']!=='wip')return![];break;}if(a['peerAddress']&&o){const u=o['toLowerCase'](),v=p['fromAddress']['toLowerCase'](),w=p['toAddress']['toLowerCase']();if(v!==u&&w!==u)return![];}const q=a['timeField']||'createdAt';if(a['startTime']!==undefined||a['endTime']!==undefined){const x=p[q];if(x!==undefined){if(a['startTime']!==undefined&&x<a['startTime'])return![];if(a['endTime']!==undefined&&x>a['endTime'])return![];}}if(a['createdAtStart']!==undefined&&p['createdAt']<a['createdAtStart'])return![];if(a['createdAtEnd']!==undefined&&p['createdAt']>a['createdAtEnd'])return![];if(a['receivedAtStart']!==undefined){if(p['receivedAt']===undefined||p['receivedAt']<a['receivedAtStart'])return![];}if(a['receivedAtEnd']!==undefined){if(p['receivedAt']===undefined||p['receivedAt']>a['receivedAtEnd'])return![];}if(a['serverTimestampStart']!==undefined){if(p['serverTimestamp']===undefined||p['serverTimestamp']<a['serverTimestampStart'])return![];}if(a['serverTimestampEnd']!==undefined){if(p['serverTimestamp']===undefined||p['serverTimestamp']>a['serverTimestampEnd'])return![];}if(a['decryptedOnly']&&!p['plaintext'])return![];if(a['confirmedOnly']&&p['status']!==MessageStatus['CONFIRMED'])return![];if(a['arkConfirmedOnly']){if(!p['arkConfirmed'])return![];}if(a['proofedOnly']){if(!p['proof'])return![];}if(a['arkTimestampStart']!==undefined){if(p['arkConfirmed']===undefined||p['arkConfirmed']['timestamp']<a['arkTimestampStart'])return![];}if(a['arkTimestampEnd']!==undefined){if(p['arkConfirmed']===undefined||p['arkConfirmed']['timestamp']>a['arkTimestampEnd'])return![];}if(a['hasLastReceivedIndexOnly']){if(p['lastReceivedLeafIndex']===undefined||p['lastReceivedLeafIndex']===null)return![];}if(a['lastReceivedIndexMin']!==undefined){if(p['lastReceivedLeafIndex']===undefined||p['lastReceivedLeafIndex']<a['lastReceivedIndexMin'])return![];}if(a['lastReceivedIndexMax']!==undefined){if(p['lastReceivedLeafIndex']===undefined||p['lastReceivedLeafIndex']>a['lastReceivedIndexMax'])return![];}if(a['keyword']&&p['plaintext']){if(!p['plaintext']['toLowerCase']()['includes'](a['keyword']['toLowerCase']()))return![];}if(a['listFilterMode']&&a['listFilterMode']!=='any'){const y=this['findAccount'](p['toAddress']);if(!y)return![];const z=p['fromAddress']['toLowerCase'](),A=y['contactLists'],B=new Set(A['friends']['map'](G=>G['toLowerCase']())),C=new Set(A['guards']['map'](G=>G['guardAddress']['toLowerCase']())),D=B['has'](z),E=C['has'](z),F=!D&&!E;switch(a['listFilterMode']){case'friends':if(!D)return![];break;case'guard':if(!E)return![];break;case'stranger':if(!F)return![];break;}if(a['customListFilter']){const {includeAddresses:G,excludeAddresses:H,relation:relation='union'}=a['customListFilter'];if(H){const I=new Set(H['map'](J=>J['toLowerCase']()));if(I['has'](z))return![];}if(G&&G['length']>0x0){const J=new Set(G['map'](L=>L['toLowerCase']())),K=J['has'](z);if(relation==='union'){const L=a['listFilterMode']==='friends'&&D||a['listFilterMode']==='guard'&&E||a['listFilterMode']==='stranger'&&F;if(!K&&!L)return![];}else{if(!K)return![];}}}}if(a['viewed']!==undefined){const M=p['viewedAt']!==undefined;if(a['viewed']!==M)return![];}if(a['viewedAtStart']!==undefined){if(p['viewedAt']===undefined||p['viewedAt']<a['viewedAtStart'])return![];}if(a['viewedAtEnd']!==undefined){if(p['viewedAt']===undefined||p['viewedAt']>a['viewedAtEnd'])return![];}return!![];});}const c=a?.['sortOrder']??'desc',d=a?.['timeField']||'createdAt';b['sort']((p,q)=>{const r=p[d]||0x0,s=q[d]||0x0;return c==='asc'?r-s:s-r;});const {MAX_QUERY_LIMIT:e}=await import('./types.js'),f=this['config']['defaultQueryLimit']??0x32,g=Math['min'](a?.['limit']??f,e),h=a?.['offset']??0x0;return b=b['slice'](h,h+g),b;}['startPolling'](){if(this['isWatching'])return;this['isWatching']=!![];}['stopPolling'](){this['isWatching']=![];}['onMessage'](a){this['messageListeners']['add'](a);}['offMessage'](a){this['messageListeners']['delete'](a);}['destroy'](){this['stop'](),this['messageListeners']['clear']();}async['syncContactLists'](a){const b=this['findAccount'](a);if(!b)return{'success':![],'friends':[],'guards':[],'error':'Account\x20not\x20found:\x20'+a};try{const [c,d]=await Promise['all']([b['messenger']['getFriendsList'](),b['messenger']['getGuardList']()]),e=d['currentGuardList']||[];return b['contactLists']={'friends':c,'guards':e,'lastUpdatedAt':Date['now']()},{'success':!![],'friends':c,'guards':e};}catch(f){return{'success':![],'friends':b['contactLists']['friends'],'guards':b['contactLists']['guards'],'error':f instanceof Error?f['message']:String(f)};}}async['syncAllContactLists'](){const a=new Map();for(const b of this['accounts']['values']()){const c=await this['syncContactLists'](b['address']);a['set'](b['address'],c);}return a;}['getContactLists'](a){const b=this['findAccount'](a);return b?.['contactLists'];}['setContactLists'](a,b){const c=this['findAccount'](a);if(!c)return![];return c['contactLists']={...c['contactLists'],...b,'lastUpdatedAt':Date['now']()},!![];}['isStranger'](a,b){const c=this['findAccount'](a);if(!c)return!![];const d=b['toLowerCase'](),e=c['contactLists'],f=e['friends']['some'](h=>h['toLowerCase']()===d),g=e['guards']['some'](h=>h['guardAddress']['toLowerCase']()===d);return!f&&!g;}['recordGuardSender'](a,b){const c=this['findAccount'](a);if(!c)return![];const d=b['toLowerCase'](),e=c['contactLists']['guards']['some'](f=>f['guardAddress']['toLowerCase']()===d);return!e&&(c['contactLists']['guards']['push']({'guardAddress':b,'passportValiditySeconds':0x15180}),c['contactLists']['lastUpdatedAt']=Date['now']()),!![];}['generateNonce'](){return Math['random']()['toString'](0x24)['substring'](0x2,0xf)+Math['random']()['toString'](0x24)['substring'](0x2,0xf);}async['watch_paginated'](a){const {MAX_QUERY_LIMIT:b}=await import('./types.js'),c=await this['watch'](a),d=c['length'],e=this['config']['defaultQueryLimit']??0x32,f=Math['min'](a?.['limit']??e,b),g=a?.['offset']??0x0,h=c['slice'](g,g+f);return{'messages':h,'total':d,'offset':g,'limit':f};}async['get_conversations'](a){const b=a?{'account':a}:undefined,c=await this['watch'](b),d=new Map();for(const e of c){const f=a?.['toLowerCase'](),g=e['fromAddress']['toLowerCase']()===f?e['toAddress']:e['fromAddress'];!d['has'](g)&&d['set'](g,{'peerAddress':g,'lastMessageAt':e['createdAt'],'messageCount':0x0,'unreadCount':0x0,'lastMessagePreview':e['plaintext']});const h=d['get'](g);h['messageCount']++,e['createdAt']>h['lastMessageAt']&&(h['lastMessageAt']=e['createdAt'],h['lastMessagePreview']=e['plaintext']),e['status']!==MessageStatus['READ']&&e['toAddress']['toLowerCase']()===f&&h['unreadCount']++;}return Array['from'](d['values']())['sort']((i,j)=>j['lastMessageAt']-i['lastMessageAt']);}async['generate_wts'](a,b,c,d,e){const f=await import('fs'),g=await import('path'),h=b['toLowerCase'](),k=c['toLowerCase'](),l=new MessageStorage(h),m=l['getAllMessages'](h);let n=m['filter'](w=>{const x=w['fromAddress']['toLowerCase'](),y=w['toAddress']['toLowerCase'](),z=x===h&&y===k||x===k&&y===h;return z;});n=n['filter'](w=>w['leafIndex']!==undefined&&w['serverTimestamp']!==undefined)['reduce']((w,x)=>{const y=w['find'](z=>z['messageId']===x['messageId']);return!y&&w['push'](x),w;},[])['sort']((w,x)=>{const y=w['serverTimestamp']-x['serverTimestamp'];if(y!==0x0)return y;return w['leafIndex']-x['leafIndex'];});if(d)switch(d['type']){case'time':{const w=Math['min'](d['start'],d['end']),x=Math['max'](d['start'],d['end']);n=n['filter'](y=>y['createdAt']>=w&&y['createdAt']<=x);break;}case'messageId':{const y=d['start'],z=d['end'];n=n['filter'](A=>A['messageId']>=y&&A['messageId']<=z);break;}case'seqIndex':{const A=Math['min'](d['start'],d['end']),B=Math['max'](d['start'],d['end']);n=n['filter'](C=>C['leafIndex']>=A&&C['leafIndex']<=B);break;}}if(n['length']===0x0)throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'No\x20messages\x20found\x20for\x20the\x20given\x20criteria');const o=n['map'](C=>C['leafIndex'])['filter'](C=>C!==undefined)['sort']((C,D)=>C-D),p=[];for(let C=0x1;C<o['length'];C++){const D=o[C-0x1]+0x1,E=o[C];if(E!==D)for(let F=D;F<E;F++){p['push'](F);}}if(p['length']>0x0){}if(n['length']>WTS_MAX_MESSAGE_COUNT)throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'Message\x20count\x20('+n['length']+')\x20exceeds\x20maximum\x20allowed\x20('+WTS_MAX_MESSAGE_COUNT+')');!f['existsSync'](a)&&f['mkdirSync'](a,{'recursive':!![]});const q=h['slice'](0x0,0x6)+'_'+k['slice'](0x0,0x6),r=[];let s=[];for(let G=0x0;G<n['length'];G++){const H=n[G];if(s['length']===0x0)s['push'](H);else{const I=s[s['length']-0x1],J=I['leafIndex']+0x1;s['length']>=WTS_MAX_MESSAGE_COUNT||H['leafIndex']!==J?(r['push'](s),s=[H]):s['push'](H);}}s['length']>0x0&&r['push'](s);r['forEach']((K,L)=>{const M=K['map'](N=>N['leafIndex'])['join'](',\x20');});const t=[];for(const K of r){const L=K['map'](a2=>a2['leafIndex'])['filter'](a2=>a2!==undefined),M=Math['min'](...L),N=Math['max'](...L),O=K[0x0]['createdAt'],P=K[K['length']-0x1]['createdAt'];for(const a2 of K){if(a2['serverTimestamp']===undefined)throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'Message\x20'+a2['messageId']+'\x20missing\x20serverTimestamp');if(a2['leafIndex']===undefined)throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'Message\x20'+a2['messageId']+'\x20missing\x20leafIndex');if(!a2['prevRoot'])throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'Message\x20'+a2['messageId']+'\x20missing\x20prevRoot');if(!a2['newRoot'])throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'Message\x20'+a2['messageId']+'\x20missing\x20newRoot');if(!a2['serverSignature'])throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'Message\x20'+a2['messageId']+'\x20missing\x20serverSignature');}const Q=K['map'](a3=>{const a4={'id':a3['messageId'],'from':a3['fromAddress'],'to':a3['toAddress'],'plaintextHash':a3['plaintextHash'],'clientTimestamp':a3['createdAt'],'timestamp':a3['serverTimestamp'],'leafIndex':a3['leafIndex'],'prevRoot':a3['prevRoot'],'merkleRoot':a3['newRoot'],'serverSignature':a3['serverSignature'],'serverPublicKey':a3['serverPublicKey']||'','msgType':a3['msgType']};return!e&&a3['plaintext']!==undefined&&(a4['plaintext']=a3['plaintext']),a3['guardAddress']!==undefined&&(a4['guardAddress']=a3['guardAddress']),a3['passportAddress']!==undefined&&(a4['passportAddress']=a3['passportAddress']),a3['arkConfirmed']!==undefined&&(a4['arkConfirmed']={'recipient':a3['arkConfirmed']['recipient'],'recipientPublicKey':a3['arkConfirmed']['recipientPublicKey'],'signature':a3['arkConfirmed']['signature'],'timestamp':a3['arkConfirmed']['timestamp']}),a3['zipMetadata']!==undefined&&(a4['zipMetadata']=a3['zipMetadata']),a3['lastReceivedLeafIndex']!==undefined&&a3['lastReceivedLeafIndex']!==-0x1&&(a4['lastReceivedLeafIndex']=a3['lastReceivedLeafIndex']),a4;}),R=[h,k]['sort'](),S={'participants':R},T={'session':S,'messages':Q},{sha256:U}=await import('@noble/hashes/sha256'),{bytesToHex:V}=await import('@noble/hashes/utils'),W=canonicalizeJson(T),X='sha256:'+V(U(new TextEncoder()['encode'](W))),Y={'type':'wts','version':'1.0','created':new Date()['toISOString'](),'hash':X,'algorithm':'sha256','startTime':O,'endTime':P,'messageCount':Q['length'],'merkleRoot':Q[Q['length']-0x1]['merkleRoot'],'creator':h,'participant':k},Z={'wts':WTS_SCHEMA_URL,'payload':T,'meta':Y},a0=q+'_'+M+'-'+N+'.wts',a1=g['join'](a,a0);f['writeFileSync'](a1,JSON['stringify'](Z,null,0x2)),t['push'](a1);}const u=n[0x0]?.['createdAt']||0x0,v=n[n['length']-0x1]?.['createdAt']||0x0;return{'files':t,'totalMessageCount':n['length'],'timeRange':{'start':u,'end':v}};}async['addToBlacklist'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['addToBlacklist'](b);}async['removeFromBlacklist'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['removeFromBlacklist'](b);}async['clearBlacklist'](a){const b=this['findAccount'](a);if(!b)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return b['messenger']['clearBlacklist']();}async['getBlacklist'](a){const b=this['findAccount'](a);if(!b)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return b['messenger']['getBlacklist']();}async['existInBlacklist'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['existInBlacklist'](b);}async['addToFriendsList'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['addToFriendsList'](b);}async['removeFromFriendsList'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['removeFromFriendsList'](b);}async['clearFriendsList'](a){const b=this['findAccount'](a);if(!b)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return b['messenger']['clearFriendsList']();}async['getFriendsList'](a){const b=this['findAccount'](a);if(!b)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return b['messenger']['getFriendsList']();}async['existInFriendsList'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['existInFriendsList'](b);}async['addToGuardList'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['addToGuardList'](b);}async['removeFromGuardList'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['removeFromGuardList'](b);}async['getGuardList'](a){const b=this['findAccount'](a);if(!b)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return b['messenger']['getGuardList']();}async['getSettings'](a){const b=this['findAccount'](a);if(!b)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return b['messenger']['getSettings']();}async['setSettings'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['setSettings'](b);}}