OverviewFilesCommitsIssuesDocsReleasesPeers

keet-cli / deobfuscated / lib / tasks / index.js

295 lines · javascript ref:
const _0x3e41a8=(function(){let _0x14295d=!![];return function(_0x43fcf8,_0x548f6a){const _0x4ba0de=_0x14295d?function(){if(_0x548f6a){const _0x49d77f=_0x548f6a.apply(_0x43fcf8,arguments);return _0x548f6a=null,_0x49d77f;}}:function(){};return _0x14295d=![],_0x4ba0de;};}()),_0x24625d=_0x3e41a8(this,function(){_0x1249fb={_0x273477:0x2ad};return _0x24625d.toString().search("(((.+)+)+)+$").toString().constructor(_0x24625d).search("(((.+)+)+)+$");});
_0x24625d();
const ReadyResource=require('ready-resource'),HypercoreId=require('hypercore-id-encoding'),ScopeLock=require('scope-lock'),rrp=require('resolve-reject-promise'),safetyCatch=require('safety-catch'),{
  local:{
    hyperschema:{
      getEnum:getLocalEnum}
  }
}
=require('../../spec'),{
  Task}
=require('./task'),TaskTypes=getLocalEnum("@local/tasks"),LeaveRoomTask=require('./rooms/leave'),ClearRoomTask=require('./rooms/clear'),CreateRoomTask=require('./rooms/create'),RestoreIdentityTask=require('./identity/restore'),JoinRoomInvitationTask=require('./pairing/invitation'),JoinRoomResponseTask=require('./pairing/response');
const JoinRoomKeysTask=require('./pairing/keys'),SendContactRequestTask=require('./contacts/request'),TestFastTask=require('./testing/fast'),TestSlowTask=require('./testing/slow'),TestErrorTask=require('./testing/error'),DEFAULT_PRIORITY=0xa;
class TaskHandle extends ReadyResource{
  constructor(_0x5352e3,_0x17a404,_0x36abcb){
    _0x3fb659={
      _0x46fed3:0xc2}
    ;
    super(),this.description=_0x36abcb,this.manager=_0x5352e3,this.idx=0x0,this.id=_0x17a404,this.keet=this.manager.keet,this.scope=this.description.discoveryKey,this.scopeId=HypercoreId.encode(this.scope),this.running=null,this.waiting=!![];
    this.completed=![],this._task=null;
    const {
      resolve:_0x5a389e,reject:_0x1fea4e,promise:_0xf735b3}
    =rrp();
    this._resolve=_0x5a389e,this._reject=_0x1fea4e;
    this._promise=_0xf735b3,this._promise.catch(safetyCatch);
  }
get.taskClosing(){
  _0x1e3aad={
    _0x309fc3:0x130,_0x5dbf5f:0x142,_0x5669ce:0x11e},_0x5779aa={
    _0x18de9c:0xbf}
  ;
  return this._task&&this._task.closing;
}
async._close(){
  _0x490f3a={
    _0x54df73:0x1e7,_0x5bc076:0x258},_0x34386d={
    _0x27aab8:0xcd,_0x12158c:0x1d8}
  ;
  if(this._task)await this._task.close();
  this._reject(new Error("Task was cancelled"));
}
async._run(){
  _0x2043e8={
    _0x47739f:0x149,_0x24327a:0x8d},_0x30bb6a={
    _0x5acd7a:0x17b,_0xd50ec3:0x123,_0x308c0b:0x325}
  ;
  if(this.manager.closing)return;
  await this.manager.internalFlushTasks(),this._task=this._createTask(),await this.manager.internalHandleTaskStarted(this);
  if(this.manager.closing)return;
  this.waiting=![];
  let _0x2015e7=null,_0x5cc075=null;
  try{
    _0x2015e7=await this._task.run();
  }catch(_0x594b82){
  if(this.manager.closing)return;
  _0x5cc075=_0x594b82;
}finally{
this.completed=!![],await this.manager.internalHandleTaskCompleted(this);
if(!_0x5cc075)this._resolve(_0x2015e7);
else this._reject(_0x5cc075);
}
}
._createTask(){
  _0x5536bf={
    _0x5e5cc8:0xf4,_0x49e9ac:0x72,_0x4a5079:0xe6},_0x389a7b={
    _0x1ba835:0xa8}
  ;
  switch(this.description.type){
    case TaskTypes.RestoreIdentity:return new RestoreIdentityTask(this);
    case TaskTypes.CreateRoom:return new CreateRoomTask(this);
    case TaskTypes.LeaveRoom:return new LeaveRoomTask(this);
    case TaskTypes.ClearRoom:return new ClearRoomTask(this);
    case TaskTypes.JoinRoomInvitation:return new JoinRoomInvitationTask(this);
    case TaskTypes.JoinRoomKeys:return new JoinRoomKeysTask(this);
    case TaskTypes.JoinRoomResponse:return new JoinRoomResponseTask(this);
    case TaskTypes.SendContactRequest:return new SendContactRequestTask(this);
    case TaskTypes.TestFastTask:return new TestFastTask(this);
    case TaskTypes.TestSlowTask:return new TestSlowTask(this);
    case TaskTypes.TestErrorTask:return new TestErrorTask(this);
    default:throw new Error("Unknown task\x20type:\x20"+this.description.type);
  }
}
.run(){
  _0x39c935={
    _0x5e6603:0x194,_0x1e91e5:0x1a8,_0x495c47:0x8e},_0x3250df={
    _0x34518d:0x5a,_0x13eda6:0x18e}
  ;
  if(this.running)return this._promise;
  this.running=this._run(),this.running.catch(this.keet.onerror);
  return this._promise;
}
.runBackground(){
  _0x31dde9={
    _0x191c2f:0x19c,_0x13156c:0x37a,_0x369334:0xf1},_0x91850b={
    _0xc529dc:0x14f,_0x24e553:0x16c}
  ;
  this.run().catch(this.keet.onerror);
}
}
module.exports=class TaskManager extends ReadyResource{
  constructor(_0x42ddf4){
    _0x490f35={
      _0x670b2e:0x106,_0x4afddd:0x87},_0xa71677={
      _0x24c400:0x331,_0x58e667:0xfe}
    ;
    super(),this.keet=_0x42ddf4,this.local=this.keet.local;
    this._flushLock=new ScopeLock({'debounce':!![]});
    this._scopeLocks=new Map(),this._handles=[],this.ready().catch(_0x42ddf4.onerror);
  }
async._open(){
  _0x269a2c={
    _0x4b557e:0x104,_0x3e3cb2:0x147},_0x5962cb={
    _0x2f055b:0x9d,_0x138764:0xc2,_0x3ed48a:0x3c6}
  ;
  if(this.keet.readOnly)return;
  for await(const _0x48c142 of this.local.find("@local/tasks")){
    const _0x5d1809=_0x48c142.type,_0x3c4825=_0x48c142.discoveryKey,_0x158a59=this._createHandle(_0x5d1809,_0x3c4825,_0x48c142);
    _0x158a59.runBackground();
  }
}
._close(){
  _0x40326f={
    _0x3b151b:0x1eb,_0x3febf5:0x1e5,_0x4ac8c3:0x1d5},_0x484ed6={
    _0x3a1a9d:0x40}
  ;
  const _0x54e696=[];
  for(const _0x3d639a of this._handles){
    _0x54e696.push(_0x3d639a.close());
  }
return Promise.allSettled(_0x54e696);
}
async.flush(){
  _0x472750={
    _0x4fa3da:0x91,_0x43144e:0x334,_0x3a526d:0x8d},_0x1444f3={
    _0x350216:0x9d}
  ;
  await this.internalFlushTasks();
  const _0x1568eb=[];
  for(const _0x4a85c4 of this._handles){
    _0x1568eb.push(_0x4a85c4.running);
  }
await Promise.allSettled(_0x1568eb);
}
async.internalFlushTasks(){
  _0x57607a={
    _0x29dff2:0x179,_0x359498:0x170,_0x17c573:0x1ff},_0x37d39e={
    _0x2505b3:0xd6,_0xd0863d:0x53}
  ;
  if(!await this._flushLock.lock())return;
  if(this.closing)return;
  try{
    const _0x26d9f0=await this.keet.internalEnterLocalTransaction();
    try{
      let _0xa8c9fc=![];
      for(const _0x3c667e of this._handles){
        if(!_0x3c667e.running||_0x3c667e.completed)continue;
        const _0x479c29=await _0x26d9f0.get("@local/tasks-by-type",_0x3c667e.description);
        if(_0x479c29)continue;
        await _0x26d9f0.insert("@local/tasks",_0x3c667e.description),_0xa8c9fc=!![];
      }
    if(_0xa8c9fc)await _0x26d9f0.flush();
  }finally{
  await this.keet.internalExitLocalTransaction();
}
}catch(_0x18b248){
this.keet.onerror(_0x18b248);
}finally{
this._flushLock.unlock();
}
}
._createHandle(_0x31359e,_0x1ca9ac,_0x1ff1ce,_0x394f9f={}){
  _0x368e69={
    _0x59331d:0x13f,_0x33b98e:0x3be},_0x40360f={
    _0x1c1d21:0x1cd,_0x58b248:0x174,_0x2f05da:0xec},_0x10f11a={
    ..._0x1ff1ce,'type':_0x31359e,'discoveryKey':_0x1ca9ac,'timestamp':Date.now(),'priority':_0x394f9f.priority||DEFAULT_PRIORITY},_0x1a0656=Task.getId(_0x10f11a),_0x49374f=new TaskHandle(this,_0x1a0656,_0x10f11a);
  _0x49374f.idx=this._handles.push(_0x49374f)-(0x1);
  return _0x49374f;
}
async.internalHandleTaskStarted(_0x4a2cdd){
  _0x3e9f67={
    _0x215065:0x16f,_0xd5ff11:0x366},_0x3ddb12={
    _0x7e3bdb:0xb7,_0x42f19c:0x251,_0x39cad9:0x9b}
  ;
  let _0x5d40ac=this._scopeLocks.get(_0x4a2cdd.scopeId);
  !_0x5d40ac&&(_0x5d40ac=new ScopeLock(),this._scopeLocks.set(_0x4a2cdd.scopeId,_0x5d40ac)),await _0x5d40ac.lock();
}
async.internalHandleTaskCompleted(_0x34a0b4){
  _0x1b6147={
    _0x1c1520:0x1da,_0x30e4f9:0x136,_0x36e134:0x143},_0x389d5a={
    _0x55e873:0x49,_0x50798a:0x3dc,_0x36b2e0:0x13b}
  ;
  if(this.closing)return;
  const _0x152725=this._handles.pop();
  _0x152725!==_0x34a0b4&&(_0x152725.idx=_0x34a0b4.idx,this._handles[_0x34a0b4.idx]=_0x152725);
  const _0x41a395=await this.keet.internalEnterLocalTransaction();
  try{
    for await(const _0x56b29c of _0x41a395.find("@local/tasks-by-type",allTasksQuery(_0x34a0b4.description))){
      await _0x41a395.delete("@local/tasks",_0x56b29c);
    }
  await _0x41a395.flush();
}catch(_0x2a3859){
this.keet.onerror(_0x2a3859);
}finally{
await this.keet.internalExitLocalTransaction();
}
const _0x4e34a1=this._scopeLocks.get(_0x34a0b4.scopeId);
const _0xf4c9f8=_0x4e34a1.waiting.length;
_0x4e34a1.unlock(),_0xf4c9f8===0x0&&this._scopeLocks.delete(_0x34a0b4.scopeId);
}
.restoreIdentity(_0x1d4f6e,_0x324246){
  _0x32c658={
    _0x27d21f:0x146,_0x38ab06:0x117}
  ;
  return this._createHandle(TaskTypes.RestoreIdentity,_0x1d4f6e,{'restoreIdentity':_0x324246});
}
.createRoom(_0xcec8b8,_0x22652f){
  return this._createHandle(TaskTypes.CreateRoom,_0xcec8b8,{'createRoom':_0x22652f});
}
.leaveRoom(_0x161dbf,_0x3f2b7b){
  _0x3c9e92={
    _0x7a4d5d:0x106,_0x11ebfa:0xe6},_0x5c4e85={
    _0x3b986a:0x4,_0x4fa1b5:0x112}
  ;
  return this._createHandle(TaskTypes.LeaveRoom,_0x161dbf,{'leaveRoom':_0x3f2b7b});
}
.clearRoom(_0x402d7e,_0xbed5ef){
  _0x17b147={
    _0xaf0660:0x214},_0x3196a0={
    _0x26f939:0x1c5,_0xc6d066:0x16c,_0x3f7f8d:0x309}
  ;
  return this._createHandle(TaskTypes.ClearRoom,_0x402d7e,{'clearRoom':_0xbed5ef});
}
.joinRoomInvitation(_0x42b697,_0xb6c36f){
  _0x92eccf={
    _0x52f203:0x8a,_0x59f691:0x10e,_0x146300:0x60},_0x30db8f={
    _0x511578:0x139,_0x539dc0:0x172,_0x4fdc4c:0x42}
  ;
  return this._createHandle(TaskTypes.JoinRoomInvitation,_0x42b697,{'joinRoomInvitation':_0xb6c36f});
}
.joinRoomKeys(_0x4aec3c,_0x36fff4){
  _0x3b3536={
    _0x583e73:0x4c,_0xd63d6a:0x6e,_0x5420ee:0x7},_0x39a11c={
    _0x504a45:0x8e,_0x9a7285:0x2d9,_0x267639:0x17d}
  ;
  return this._createHandle(TaskTypes.JoinRoomKeys,_0x4aec3c,{'joinRoomKeys':_0x36fff4});
}
.joinRoomResponse(_0x31a2eb,_0x337573){
  _0x2270ec={
    _0x52a4c6:0x4,_0xaca34f:0x14c,_0x49916d:0x12c},_0x499c78={
    _0x310af1:0x1ad,_0x2e8d98:0x58,_0x4d2ead:0x2dc}
  ;
  return this._createHandle(TaskTypes.JoinRoomResponse,_0x31a2eb,{'joinRoomResponse':_0x337573});
}
.sendContactRequest(_0x5f4214,_0x1828d0){
  _0x477701={
    _0xcb91e2:0xef},_0x15d0b8={
    _0x1d332a:0xef,_0x314f5b:0x147,_0x2ad08b:0x12d}
  ;
  return this._createHandle(TaskTypes.SendContactRequest,_0x5f4214,{'sendContactRequest':_0x1828d0});
}
.testFastTask(_0x37103b){
  _0x4d33a7={
    _0x2bdc1f:0xc8,_0x40e98d:0x1e5,_0x5f43a2:0x28f},_0x2e1e65={
    _0x1eadc7:0x6c,_0x1bcc9b:0x177}
  ;
  return this._createHandle(TaskTypes.TestFastTask,_0x37103b);
}
.testSlowTask(_0x2cca33){
  _0x5b0c27={
    _0x4fe822:0xe3},_0x95e533={
    _0x31ff77:0x98,_0x543237:0x15c,_0x140976:0x39b}
  ;
  return this._createHandle(TaskTypes.TestSlowTask,_0x2cca33);
}
.testErrorTask(_0x299bd5){
  _0x1c720f={
    _0x13074e:0x9c,_0x4a3048:0x1c6,_0x14b105:0x25},_0x3c425c={
    _0x3cce62:0x4,_0x36c27c:0xeb}
  ;
  return this._createHandle(TaskTypes.TestErrorTask,_0x299bd5);
}
}
;
function allTasksQuery(_0x190b75){
  _0x1184d5={
    _0x2f7d25:0xa4,_0x65a59a:0x39d},_0x32ed9b={
    _0x561507:0x177,_0x5ac124:0x9e}
  ;
  const _0x1d5421={
    'type':_0x190b75.type,'discoveryKey':_0x190b75.discoveryKey}
  ;
  return{
    'gte':_0x1d5421,'lte':_0x1d5421}
  ;
}