OverviewFilesCommitsIssuesDocsReleasesPeers

keet-cli / deobfuscated / contract / members / index.js

391 lines · javascript ref:
const Autobase=require('autobase'),b4a=require('b4a'),{
  contract:{
    hyperschema:{
      getEnum:getContractEnum,encode:encodeContractStruct},hyperdispatch:{
      encode:encodeOperation}
  }
}
=require('../../../spec'),{
  createDeviceResponse,decryptDeviceRequest,verifyAttestation,verifyInvitationDeviceRequest,generateMailboxKeyPair}
=require('../../invitations'),RoomType=getContractEnum("@keet/room-type"),{
  deviceStats,memberStats}
=require('../stats'),{
  isMemberActive,getMemberForDeviceKey}
=require('../query'),{
  addEvent:addChatEvent}
=require('../chat'),{
  updateAvatar}
=require('../avatars'),{
  KeetContractError}
=require('../errors'),REGISTER_ROUTES=require('../registration'),STATUS_INDEX_TO_KEY=["isMuted","isBanned","isShadowBanned"],MemberStatus={
  'IsMuted':0x1,'IsBanned':0x2,'IsShadowBanned':0x3}
;
async function addIdentityDevice(_0x5a71b7,_0x2ead2b,_0x30af7a){
  _0x4da3e3={
    _0x32785f:0x5,_0x46548a:0x43},_0x262aae={
    _0x4d6b4f:0x10e},{
    db:_0x40b53a,hostcalls:_0x498bea}
  =_0x30af7a,[_0x512190,_0x554266]=await Promise.all([_0x40b53a.get("@keet-private-id/identity"),_0x40b53a.get("@keet/threads",{'id':0x0})]);
  const _0x35c9f4=await _0x40b53a.get("@keet/members",{'key':_0x512190.publicKey}),_0x597abf={
    ..._0x35c9f4,'status':{
      ..._0x35c9f4.status}
  },_0x238642={
  'isActive':!![],'isIndexing':!![]},_0x22cc85={
  'key':_0x5a71b7,'memberKey':_0x512190.publicKey,'profile':_0x2ead2b,'status':_0x238642}
;
return _0x35c9f4.status.isPending=![],await _0x498bea.addWriter(_0x5a71b7,{'indexer':!![]}),await _0x40b53a.insert("@keet/members",_0x35c9f4),await memberStats(_0x40b53a,_0x554266,_0x35c9f4,_0x597abf),await _0x40b53a.insert("@keet/devices",_0x22cc85),await deviceStats(_0x40b53a,_0x554266,_0x22cc85,null),{
  'added':!![],'device':_0x22cc85}
;
}
async function addDevice(_0x2fe8fd,_0x1abce0,_0x29e9ab,_0x3c8f59,_0x1326c9,{db:_0x3ddb25,writer:_0x58460a,hostcalls:_0x9379d3,genesis:_0x420f96}){
  _0x2f324b={
    _0x53a296:0x70,_0x816756:0x109,_0x57c202:0x376},_0x598c7c={
    _0x37d94b:0x191,_0xfdb490:0x123,_0x133d03:0x42d}
  ;
  const [_0x444a62,_0x24071e,_0x296984,_0x3fcc6c,_0x5aa0b3]=await Promise.all([_0x3ddb25.get("@keet/devices",{'key':_0x1abce0}),_0x3ddb25.get("@keet/members",{'key':_0x3c8f59.memberKey}),_0x3ddb25.get("@keet/member-proofs",{'key':_0x3c8f59.memberKey}),_0x3ddb25.get("@keet/system-digest"),_0x3ddb25.get("@keet/threads",{'id':0x0})]);
  if(!_0x24071e||!_0x296984)throw KeetContractError.ABORT();
  if(_0x444a62)return{
    'added':![],'device':_0x444a62}
  ;
  const _0x498680={
    ..._0x24071e,'status':{
      ..._0x24071e.status}
  },_0x150439=_0x24071e.status.isPending,_0x2507e4=verifyAttestation(_0x3c8f59,_0x1abce0,_0x296984.latestReceipt);
_0x296984.latestReceipt=_0x2507e4;
const _0x32fe2c={
  'isActive':!![],'isIndexing':!!_0x1326c9?..isIndexing}
;
_0x24071e.status.isActive=!![],_0x24071e.status.isPending=![];
_0x150439&&!_0x24071e.status.isModerator&&_0x1326c9?..isModerator&&(_0x24071e.status.isModerator=!![]);
_0x32fe2c.isIndexing&&!_0x24071e.status.isAdmin&&(_0x24071e.status.isAdmin=!![]);
const _0x261b65={
  'key':_0x1abce0,'memberKey':_0x24071e.key,'status':_0x32fe2c,'profile':_0x29e9ab}
;
await _0x3ddb25.insert("@keet/members",_0x24071e),await memberStats(_0x3ddb25,_0x5aa0b3,_0x24071e,_0x498680),await _0x3ddb25.insert("@keet/devices",_0x261b65),await deviceStats(_0x3ddb25,_0x5aa0b3,_0x261b65,null),await _0x3ddb25.insert("@keet/member-proofs",_0x296984);
!_0x420f96&&await _0x9379d3.addWriter(_0x1abce0,{'indexer':_0x32fe2c.isIndexing});
if(!_0x150439||_0x3fcc6c.settings.roomType===RoomType.Broadcast)return{
  'added':!![],'device':_0x261b65}
;
if(_0x3fcc6c.abi.version>=0xb&&_0x3fcc6c.settings.isMembershipEventsDisabled)return{
  'added':!![],'device':_0x261b65}
;
const _0x47d1a2={
  'memberJoined':{
    'memberKey':_0x24071e.key}
}
;
return await addChatEvent(_0x3ddb25,_0x58460a,_0x47d1a2,_0x2fe8fd.timestamp),{
  'added':!![],'device':_0x261b65}
;
}
async function addMember(_0x5f19c0,_0x496f13,_0x3f6dea,_0x426242,{db:_0x21796b,blobs:_0x5a28a1,writer:_0x28a42d,genesis:_0x1ce59d}){
  _0x56eee2={
    _0x3c1dc7:0x8b,_0x149c5d:0x39,_0x17a67c:0x139},_0x3eee42={
    _0x2e6288:0x1bf,_0x1f1e84:0x27d},[_0x357597,_0x1c0fba,_0x20a1be]=await Promise.all([_0x21796b.get("@keet/members",{'key':_0x3f6dea.memberKey}),_0x21796b.get("@keet/member-proofs",{'key':_0x3f6dea.memberKey}),_0x21796b.get("@keet/threads",{'id':0x0})]);
  if(_0x357597)throw KeetContractError.ABORT();
  const _0x489bbb=encodeContractStruct("@keet/member-profile",_0x496f13),_0x20eedb=verifyAttestation(_0x3f6dea,_0x489bbb,_0x1c0fba?..latestReceipt);
  let _0x364db1=_0x1c0fba;
  !_0x364db1?_0x364db1={
    'key':_0x3f6dea.memberKey,'latestReceipt':_0x20eedb,'profileAttestation':_0x3f6dea.proof}
  :(_0x364db1.latestReceipt=_0x20eedb,_0x364db1.profileAttestation=_0x3f6dea.proof);
  _0x496f13.avatar?_0x496f13.avatar=await updateAvatar(_0x5a28a1,_0x357597?..profile.avatar,_0x496f13.avatar):_0x496f13.avatar=null;
  const _0x488e48={
    'isAdmin':!!_0x426242.isAdmin,'isModerator':!!_0x426242.isModerator,'isPending':!![],'isActive':!![],'isMuted':![],'isBanned':![],'isShadowBanned':![]},_0xa5ef48={
    'key':_0x3f6dea.memberKey,'devices':[],'status':_0x488e48,'profile':_0x496f13}
  ;
  await _0x21796b.insert("@keet/members",_0xa5ef48),await memberStats(_0x21796b,_0x20a1be,_0xa5ef48),await _0x21796b.insert("@keet/member-proofs",_0x364db1);
  return _0xa5ef48;
}
async function updateMember(_0x1fee0f,_0xba34ae,_0x417cac,{db:_0x51db07,blobs:_0x67cdf3}){
  _0x4e2c97={
    _0x1dc614:0x4d},_0x46cbb3={
    _0xd92b8:0x1da,_0x307862:0x3c3}
  ;
  const [_0x565dbe,_0x42e25b]=await Promise.all([_0x51db07.get("@keet/members",{'key':_0x417cac.memberKey}),_0x51db07.get("@keet/member-proofs",{'key':_0x417cac.memberKey})]);
  if(!_0x565dbe)throw KeetContractError.ABORT();
  const _0x5aa294=encodeContractStruct("@keet/member-profile",_0xba34ae),_0x4d4a59=verifyAttestation(_0x417cac,_0x5aa294,_0x42e25b?..latestReceipt);
  let _0x143fe1=_0x42e25b;
  !_0x143fe1?_0x143fe1={
    'key':_0x417cac.memberKey,'latestReceipt':_0x4d4a59,'profileAttestation':_0x417cac.proof}
  :(_0x143fe1.latestReceipt=_0x4d4a59,_0x143fe1.profileAttestation=_0x417cac.proof);
  if(_0x565dbe.profile.timestamp>=_0xba34ae.timestamp)return;
  _0x565dbe.profile=_0xba34ae,_0xba34ae.avatar?_0x565dbe.profile.avatar=await updateAvatar(_0x67cdf3,_0x565dbe.profile.avatar,_0xba34ae.avatar):_0x565dbe.profile.avatar=null,await _0x51db07.insert("@keet/members",_0x565dbe),await _0x51db07.insert("@keet/member-proofs",_0x143fe1);
}
async function acceptJoinRequest(_0x3b1f84,_0x2e0518,_0x31cb25,_0x2db58f,_0x47ec12,_0x35cc63){
  _0x1c750f={
    _0x33a232:0x83,_0x4ded2d:0x120},_0x4ceab1={
    _0xcef290:0xcc,_0x1bdf68:0x8d,_0x2f14b8:0x232},{
    db:_0x113946,trace:_0x6e009,hostcalls:_0x4dcca0,dryRun:_0x4b5870}
  =_0x35cc63,_0x5ac9f3=await _0x113946.get("@keet/room-capabilities"),_0x46b8b6=_0x4dcca0.discoveryKey,_0x109da8=_0x4dcca0.key,_0x2d133a=_0x2db58f.metadata,_0x3cd6c2={
    'isAdmin':_0x2d133a.canAdmin,'isModerator':_0x2d133a.canModerate}
  ;
  const _0x253ab2={
    'isIndexing':_0x2d133a.canAdmin,'isModerator':_0x2d133a.canModerate}
  ;
  let _0x52b511=null;
  if(!_0x47ec12){
    const _0x39f79b=await _0x113946.get("@keet/members",{'key':_0x31cb25.device.attestation.memberKey});
    if(_0x39f79b){
      if(_0x39f79b.status.isRemoved)throw new KeetContractError.ABORT();
      await updateMember(_0x3b1f84,_0x31cb25.member.profile,_0x31cb25.member.attestation,_0x35cc63);
    }else await addMember(_0x3b1f84,_0x31cb25.member.profile,_0x31cb25.member.attestation,_0x3cd6c2,_0x35cc63);
  _0x52b511=await addDevice(_0x3b1f84,_0x2e0518,_0x31cb25.device.profile,_0x31cb25.device.attestation,_0x253ab2,_0x35cc63);
}else _0x52b511=await addIdentityDevice(_0x2e0518,_0x31cb25.device.profile,_0x35cc63),await _0x113946.insert("@keet-private-id/device-identities",{'deviceKey':_0x2e0518,'privateProfileIdentity':_0x47ec12.privateProfileIdentity,'deviceProof':_0x47ec12.deviceProof});
const {
  device:_0x1df64a,added:_0x44014c}
=_0x52b511,_0x3fd12f=_0x31cb25.member.profile.mailbox,_0x1f9487=_0x5ac9f3.seed,{
  blindResponse:_0x33a92d}
=createDeviceResponse(_0x3fd12f,_0x1f9487,_0x2db58f),_0x43f452=encodeOperation("@keet-private-id/resolve-pending-invitation",{'header':{'timestamp':0x0},'blindResponse':_0x33a92d}),_0x55bd9e=Autobase.encodeValue(_0x43f452,{'optimistic':!![],'encrypted':!![]});
_0x44014c&&(_0x2db58f.metadata.canAdmin=![],_0x2db58f.metadata.canModerate=![],_0x1df64a.invitation={'id':_0x2db58f.id,'response':_0x55bd9e},await _0x113946.insert("@keet/devices",_0x1df64a),await _0x113946.insert("@keet/invitations",_0x2db58f));
if(_0x6e009&&!_0x4b5870){
  const _0x4e2b50={
    'roomKey':_0x109da8,'discoveryKey':_0x46b8b6,'request':_0x31cb25,'response':_0x55bd9e,'invitation':_0x2db58f}
  ;
  await _0x6e009({'type':"@keet/add-device",'value':_0x4e2b50});
}
}
async function addDeviceWithMemberProof({device:_0x2a92a8,member:_0x40c3d6},_0x33e71b,_0x14ff6b){
  _0x49c685={
    _0x29f9ee:0x1b6,_0x3144bd:0x1a9,_0x3be298:0x1b7},_0x37e44f={
    _0x56146c:0x8f,_0x498bdf:0x79,_0x378b6c:0x325}
  ;
  const {
    db:_0x43afd8,hostcalls:_0x309528,writer:_0x71fabc}
  =_0x14ff6b,[_0x4b374f,_0x9bd6a6,_0x10d1d2]=await Promise.all([_0x43afd8.get("@keet/members",{'key':_0x2a92a8.attestation.memberKey}),_0x43afd8.get("@keet/member-proofs",{'key':_0x2a92a8.attestation.memberKey}),_0x43afd8.get("@keet/system-digest")]);
  if(!_0x4b374f||!_0x9bd6a6)throw KeetContractError.ABORT();
  const _0x34d771=_0x10d1d2.settings.roomType===RoomType.DirectMessage;
  if(_0x10d1d2.abi.version>=-0x4b4a&&!_0x4b374f.status.isActive&&!_0x34d771)throw KeetContractError.ABORT();
  const _0x1dc49b={
    'isActive':!![],'isIndexing':![]}
  ;
  await addDevice(_0x33e71b,_0x71fabc.key,_0x2a92a8.profile,_0x2a92a8.attestation,_0x1dc49b,_0x14ff6b);
  await _0x309528.ackWriter(_0x71fabc.key),_0x40c3d6&&await updateMember(_0x33e71b,_0x40c3d6.profile,_0x40c3d6.attestation,_0x14ff6b);
}
async function addDeviceWithInvitation(_0x527d2f,_0x11f28f,_0x4a94ff){
  _0x11dd9c={
    _0x581442:0xae,_0x5972f1:0x15e},_0x2fdff0={
    _0xf0d553:0xbf,_0x5498d3:0x336},{
    db:_0x5c7fc7,hostcalls:_0x1979c3,writer:_0x43409a}
  =_0x4a94ff;
  let _0x53815e=null;
  try{
    _0x53815e=verifyInvitationDeviceRequest(_0x527d2f);
  }catch(_0x887fad){
  throw KeetContractError.ABORT();
}
if(!_0x53815e)throw KeetContractError.ABORT();
const {
  id:_0x42b9d7,request:_0x4781ff}
=_0x53815e;
if(!b4a.equals(_0x4781ff.deviceKey,_0x43409a.key))throw KeetContractError.ABORT();
const [_0x24935d,_0x179786,_0x60c97]=await Promise.all([_0x5c7fc7.get("@keet/join-requests",{'deviceKey':_0x43409a.key}),_0x5c7fc7.get("@keet/invitations",{'id':_0x42b9d7}),_0x5c7fc7.get("@keet-private-id/identity")]);
if(!_0x179786||_0x24935d)throw KeetContractError.ABORT();
await _0x1979c3.ackWriter(_0x43409a.key),!_0x179786.requiresConfirmation&&!_0x60c97?await acceptJoinRequest(_0x11f28f,_0x43409a.key,_0x4781ff,_0x179786,null,_0x4a94ff):await _0x5c7fc7.insert("@keet/join-requests",{'deviceKey':_0x43409a.key,'id':_0x42b9d7,'request':_0x4781ff});
}
async function handleAcceptJoinRequest({header:_0x593e8e,deviceKey:_0x4908b9,identity:_0x4698c8},_0x25950d){
  _0x45615a={
    _0xdd86de:0x1dd,_0x1f6237:0x1c2},_0x1cac13={
    _0x58cd1a:0x13d,_0x240509:0x40},{
    db:_0x15eb48,writer:_0x1f3d31}
  =_0x25950d,[_0x2f7e3d,_0x1a03f1]=await Promise.all([getMemberForDeviceKey(_0x15eb48,_0x1f3d31.key),_0x15eb48.get("@keet/join-requests",{'deviceKey':_0x4908b9})]);
  if(!isMemberActive(_0x2f7e3d)||!_0x1a03f1)throw KeetContractError.ABORT();
  const {
    id:_0x53ab8b,request:_0x216007}
  =_0x1a03f1;
  const _0x1a33fb=await _0x15eb48.get("@keet/invitations",{'id':_0x53ab8b});
  if(!_0x1a33fb)throw KeetContractError.ABORT();
  await acceptJoinRequest(_0x593e8e,_0x4908b9,_0x216007,_0x1a33fb,_0x4698c8,_0x25950d),await _0x15eb48.delete("@keet/join-requests",{'deviceKey':_0x4908b9});
}
async function handleRejectJoinRequest({header:_0x24856d,deviceKey:_0x352dfc},_0x4af56f){
  _0x2bd1fb={
    _0x251aac:0xbf,_0x5bf982:0x159},_0x5500cb={
    _0x43029b:0x16f,_0x26eb60:0x126}
  ;
  const {
    db:_0x645823,writer:_0x870807}
  =_0x4af56f,[_0x46dc9a,_0x2c6215]=await Promise.all([getMemberForDeviceKey(_0x645823,_0x870807.key),_0x645823.get("@keet/join-requests",{'deviceKey':_0x352dfc})]);
  if(!isMemberActive(_0x46dc9a)||!_0x2c6215)throw KeetContractError.ABORT();
  await _0x645823.delete("@keet/join-requests",{'deviceKey':_0x352dfc});
}
async function handleAddInvitation({invitation:_0x2f9133},{db:_0x682979,writer:_0xaf95a6,hostcalls:_0x5b59df}){
  _0x1a3667={
    _0x2e71ae:0x9d,_0x1ddfb4:0x2d,_0x30c2c2:0xe0},_0x35c391={
    _0x136727:0x4d,_0x31659c:0x1a}
  ;
  const [_0x5052fc,_0x453241,_0x5e04b7]=await Promise.all([getMemberForDeviceKey(_0x682979,_0xaf95a6.key),_0x682979.get("@keet/invitations",{'id':_0x2f9133.id}),_0x682979.get("@keet/system-digest")]);
  if(!isMemberActive(_0x5052fc))throw KeetContractError.ABORT();
  if(_0x5052fc.status.isMuted)return;
  const _0x55c64e=_0x2f9133.metadata;
  if(_0x453241||_0x5e04b7.settings.roomType===RoomType.DirectMessage)throw KeetContractError.ABORT();
  return _0x55c64e.canModerate&&!_0x5052fc.status.isModerator&&(_0x55c64e.canModerate=![]),_0x55c64e.canAdmin&&!_0x5052fc.status.isAdmin&&(_0x55c64e.canAdmin=![]),_0x2f9133.isActive=!![],_0x2f9133.anchor=await _0x5b59df.createAnchor(_0xaf95a6.key,_0xaf95a6.seq+(0x1)),_0x682979.insert("@keet/invitations",_0x2f9133);
}
async function handleRemoveInvitation({id:_0x126cdf},{db:_0x33d977,writer:_0x39aaf5}){
  _0x15d654={
    _0x49785e:0x55,_0x76ad76:0x33e},_0x278931={
    _0x83e998:0xb3,_0x2aaa1f:0x191}
  ;
  const [_0x14f2fa,_0x537b29]=await Promise.all([getMemberForDeviceKey(_0x33d977,_0x39aaf5.key),_0x33d977.get("@keet/invitations",{'id':_0x126cdf})]);
  if(!isMemberActive(_0x14f2fa)||!_0x14f2fa.status.isModerator||!_0x537b29)throw KeetContractError.ABORT();
  _0x537b29.isActive=![],await _0x33d977.insert("@keet/invitations",_0x537b29);
}
async function handleMoveIndexer({deviceKey:_0x2cedb3,fromDeviceKey:_0x534ef9},{db:_0x2eaff9,writer:_0x3148de,hostcalls:_0x31b3fd}){
  _0x1ab5b3={
    _0x607636:0x1df,_0x620d7a:0x3d,_0xbacdbd:0x4a},_0x4bca2d={
    _0x48eb69:0x49,_0x3d67e7:0xdb},[_0x37096f,_0x30dae0,_0x4fd22d]=await Promise.all([getMemberForDeviceKey(_0x2eaff9,_0x3148de.key),getMemberForDeviceKey(_0x2eaff9,_0x2cedb3),getMemberForDeviceKey(_0x2eaff9,_0x534ef9)]);
  if(!isMemberActive(_0x37096f))throw KeetContractError.ABORT();
  if(!b4a.equals(_0x37096f.key,_0x30dae0.key))throw KeetContractError.ABORT();
  if(!b4a.equals(_0x37096f.key,_0x4fd22d.key))throw KeetContractError.ABORT();
  const [_0x3af7da,_0x47e8dc]=await Promise.all([_0x2eaff9.get("@keet/devices",{'key':_0x534ef9}),_0x2eaff9.get("@keet/devices",{'key':_0x2cedb3})]);
  if(!_0x3af7da||!_0x47e8dc)throw KeetContractError.ABORT();
  if(!_0x3af7da.status.isActive)throw KeetContractError.ABORT();
  if(!_0x47e8dc.status.isActive)throw KeetContractError.ABORT();
  if(!_0x3af7da.status.isIndexing)throw KeetContractError.ABORT();
  if(_0x47e8dc.status.isIndexing)throw KeetContractError.ABORT();
  if(b4a.equals(_0x3af7da.key,_0x47e8dc.key))throw KeetContractError.ABORT();
  await _0x31b3fd.addWriter(_0x47e8dc.key,{'isIndexer':!![]}),await _0x31b3fd.addWriter(_0x3af7da.key,{'isIndexer':![]}),_0x47e8dc.status.isIndexing=!![],_0x3af7da.status.isIndexing=![],await _0x2eaff9.insert("@keet/devices",_0x3af7da),await _0x2eaff9.insert("@keet/devices",_0x47e8dc);
}
async function handleStartIndexing(_0x5cc054,{db:_0x2052dc,writer:_0x48ed0c,hostcalls:_0x56c2ec}){
  _0x7da7ee={
    _0x5cd23e:0x13e,_0x4848dd:0x1b5,_0x3d5402:0x390},_0xabc4ed={
    _0x411dd0:0x5f,_0x29b0d8:0x182,_0x26b3ce:0x49}
  ;
  const [_0x4da5cf,_0x59df4d]=await Promise.all([_0x2052dc.get("@keet/devices",{'key':_0x48ed0c.key}),getMemberForDeviceKey(_0x2052dc,_0x48ed0c.key)]);
  if(!_0x4da5cf.status.isActive||!isMemberActive(_0x59df4d)||!_0x59df4d.status.canAdmin)throw KeetContractError.ABORT();
  await _0x56c2ec.addWriter(_0x48ed0c.key,{'indexer':!![]}),_0x4da5cf.status.isIndexing=!![];
  await _0x2052dc.insert("@keet/devices",_0x4da5cf);
}
async function handleStopIndexing(_0x2ec56f,{db:_0x31c746,writer:_0x249a5a,hostcalls:_0x3d6b81}){
  _0x25adb8={
    _0x30691d:0x119,_0x341d9b:0x52,_0x4cd8e9:0x2ee},_0x1711b3={
    _0x59d11a:0x3b3},[_0x41e499,_0x3df644]=await Promise.all([_0x31c746.get("@keet/devices",{'key':_0x249a5a.key}),getMemberForDeviceKey(_0x31c746,_0x249a5a.key)]);
  if(!_0x41e499.status.isActive||!isMemberActive(_0x3df644)||!_0x3df644.status.canAdmin)throw KeetContractError.ABORT();
  await _0x3d6b81.addWriter(_0x249a5a.key,{'indexer':![]}),_0x41e499.status.isIndexing=![],await _0x31c746.insert("@keet/devices",_0x41e499);
}
async function handleAddDevice({header:_0x17e0f3,blindRequest:_0x33eaca},_0x976e80){
  _0x1611c1={
    _0x44c0f0:0x12f,_0x78c3b5:0x15e},_0x241e46={
    _0x66304e:0x1d9,_0x405ca8:0x1f4,_0x577db8:0x28},{
    db:_0x2ad3b8}
  =_0x976e80,_0x519a28=await _0x2ad3b8.get("@keet/room-capabilities");
  if(!_0x519a28)throw KeetContractError.ABORT();
  let _0x1c92cc=null;
  try{
    const _0x1caa1a=generateMailboxKeyPair(_0x976e80.hostcalls.key,_0x519a28.seed);
    _0x1c92cc=decryptDeviceRequest(_0x1caa1a,_0x33eaca);
  }catch(_0x3ef1bc){
  throw KeetContractError.ABORT();
}
if(!_0x1c92cc)throw KeetContractError.ABORT();
const {
  withInvitation:_0x50ab51,withMemberProof:_0x1f6133}
=_0x1c92cc;
if(_0x50ab51)return addDeviceWithInvitation(_0x50ab51,_0x17e0f3,_0x976e80);
if(_0x1f6133)return addDeviceWithMemberProof(_0x1f6133,_0x17e0f3,_0x976e80);
}
async function handleUpdateMember({header:_0x498e0f,member:{profile:_0x2ba35c,attestation:_0x2aec59}},_0x364ffe){
  return updateMember(_0x498e0f,_0x2ba35c,_0x2aec59,_0x364ffe);
}
async function handleUpdateDevice({profile:_0x5427bc},{db:_0x44d476,writer:_0x4be220}){
  _0x4baf29={
    _0x2d8367:0x89,_0xdb5f99:0x1e8,_0x12d8ea:0x348},_0x35332b={
    _0x5d5d57:0x50,_0x3d03f2:0xfc},[_0xeafaa7,_0x184f2e]=await Promise.all([getMemberForDeviceKey(_0x44d476,_0x4be220.key),_0x44d476.get("@keet/devices",{'key':_0x4be220.key})]);
  if(!_0x184f2e.status.isActive||!isMemberActive(_0xeafaa7)||!_0x184f2e||!b4a.equals(_0x184f2e.key,_0x4be220.key))throw KeetContractError.ABORT();
  _0x184f2e.profile=_0x5427bc,await _0x44d476.insert("@keet/devices",_0x184f2e);
}
async function handleRemoveDevice({key:_0x57e4ff},{db:_0x2b050d,writer:_0x5ca08e,hostcalls:_0x585d87}){
  _0x38cbaa={
    _0x2223a5:0x168,_0x2416cf:0x125,_0x201ba4:0xd2},_0x3c329d={
    _0x1f5031:0x90,_0x1c4a4f:0x183,_0x4e163e:0x254},[_0x1e0f2b,_0x5ae5d3,_0x33859e]=await Promise.all([getMemberForDeviceKey(_0x2b050d,_0x5ca08e.key),_0x2b050d.get("@keet/devices",{'key':_0x57e4ff}),_0x2b050d.get("@keet/threads",{'id':0x0})]);
  if(!_0x5ae5d3||!isMemberActive(_0x1e0f2b)||!b4a.equals(_0x5ae5d3.memberKey,_0x1e0f2b.key))throw KeetContractError.ABORT();
  const _0x496d7e={
    ..._0x5ae5d3,'status':{
      ..._0x5ae5d3.status}
  }
;
_0x5ae5d3.status.isActive=![];
_0x5ae5d3.status.isIndexing=![];
_0x585d87.removeable(_0x5ae5d3.key)&&await _0x585d87.removeWriter(_0x5ae5d3.key),await _0x2b050d.insert("@keet/devices",_0x5ae5d3),await deviceStats(_0x2b050d,_0x33859e,_0x5ae5d3,_0x496d7e);
}
async function handleChangeMemberStatus({memberKey:_0x44885b,key:_0x21f0b5,status:_0x5d580b},{db:_0x4b7fc2,writer:_0x12bc19}){
  _0x1aea5e={
    _0x5a65d1:0x133,_0x3e5b2a:0x14f,_0x56a382:0xaf},_0x53ba0d={
    _0x5e268b:0x4d,_0x32cc81:0x390}
  ;
  const [_0x1e721b,_0x293029]=await Promise.all([getMemberForDeviceKey(_0x4b7fc2,_0x12bc19.key),_0x4b7fc2.get("@keet/members",{'key':_0x44885b})]);
  if(!isMemberActive(_0x1e721b))throw KeetContractError.INACTIVE_MEMBER();
  if(!_0x293029)throw KeetContractError.TARGET_MEMBER_NOT_FOUND();
  const _0x3f6a7b=_0x1e721b.status.isModerator;
  if(!_0x3f6a7b)throw KeetContractError.MODERATORS_ONLY();
  if(_0x21f0b5===0x0||_0x21f0b5>STATUS_INDEX_TO_KEY.length)throw KeetContractError.INVALID_MEMBER_STATUS();
  const _0x157da6=STATUS_INDEX_TO_KEY[_0x21f0b5-(0x1)];
  _0x293029.status[_0x157da6]=_0x5d580b[_0x157da6],await _0x4b7fc2.insert("@keet/members",_0x293029);
}
async function handleChangeMemberRole({key:_0xde8067,isModerator:_0x196231,isAdmin:_0x3caee3},{db:_0x3c06fa,writer:_0x587bb9,hostcalls:_0xcac667}){
  _0x570b9e={
    _0x1c24e3:0x64,_0x4ec4cc:0x1d2,_0x7656ff:0x3f1},_0x26cd14={
    _0x15f64d:0xb,_0x2d54a7:0x1f},[_0x8b927b,_0xa6e5cf,_0x4e00a8]=await Promise.all([getMemberForDeviceKey(_0x3c06fa,_0x587bb9.key),_0x3c06fa.get("@keet/members",{'key':_0xde8067}),_0x3c06fa.find("@keet/active-devices-by-member-key",{'gte':{'memberKey':_0xde8067},'lte':{'memberKey':_0xde8067}}).toArray()]);
  if(!isMemberActive(_0x8b927b))throw KeetContractError.INACTIVE_MEMBER();
  if(!_0xa6e5cf)throw KeetContractError.TARGET_MEMBER_NOT_FOUND();
  const _0xecbcd3=_0x8b927b.status.isAdmin,_0x374509=_0x8b927b.status.isModerator,_0x565d00=_0xa6e5cf.status.isAdmin;
  if(!_0xecbcd3&&(_0x565d00||_0x3caee3))throw KeetContractError.ADMINS_ONLY();
  if(!_0x374509)throw KeetContractError.MODERATORS_ONLY();
  let _0x8fe0e5=![];
  if(_0x565d00&&!_0x3caee3)for(const _0x40a6da of _0x4e00a8){
    if(!_0xcac667.removeable(_0x40a6da.key)){
      _0x8fe0e5=!![];
      continue;
    }
  await _0xcac667.addWriter(_0x40a6da.key,{'indexer':![]});
}
!_0x8fe0e5&&(_0xa6e5cf.status.isAdmin=_0x3caee3),_0xa6e5cf.status.isModerator=_0x196231||_0x3caee3,await _0x3c06fa.insert("@keet/members",_0xa6e5cf);
}
async function handleRemoveMember({header:_0x1680d6,key:_0x396632},{db:_0x44da5c,writer:_0x33f7fb,hostcalls:_0x5d5fea}){
  _0x106c73={
    _0x2cf873:0x91,_0x3e9341:0x1ed},_0x3c7006={
    _0x5d5149:0x128,_0x2f7363:0x27a},[_0x5d7094,_0x2bd0ec,_0x498f3c,_0x35c3e3,_0x525f4d]=await Promise.all([getMemberForDeviceKey(_0x44da5c,_0x33f7fb.key),_0x44da5c.get("@keet/members",{'key':_0x396632}),_0x44da5c.get("@keet/system-digest"),_0x44da5c.find("@keet/active-devices-by-member-key",{'gte':{'memberKey':_0x396632},'lte':{'memberKey':_0x396632}}).toArray(),_0x44da5c.get("@keet/threads",{'id':0x0})]);
  if(!isMemberActive(_0x5d7094))throw KeetContractError.INACTIVE_MEMBER();
  if(!_0x2bd0ec)throw KeetContractError.TARGET_MEMBER_NOT_FOUND();
  const _0x3d46be={
    ..._0x2bd0ec,'status':{
      ..._0x2bd0ec.status}
  }
;
const _0x3053a8=b4a.equals(_0x5d7094.key,_0x2bd0ec.key),_0x58929b=_0x5d7094.status.isModerator,_0xdf10a3=_0x2bd0ec.status.isAdmin;
if(!_0x3053a8&&_0xdf10a3)throw KeetContractError.ABORT();
if(!_0x3053a8&&!_0x58929b)throw KeetContractError.MODERATORS_ONLY();
_0x2bd0ec.status.isActive=![],_0x2bd0ec.status.isModerator=![],_0x2bd0ec.status.isAdmin=![],_0x2bd0ec.status.isPending=_0x3053a8?!![]:![];
!_0x3053a8&&(_0x2bd0ec.status.isRemoved=!![],await _0x44da5c.insert("@keet/tmp-removed-members",{'key':_0x2bd0ec.key}));
for(const _0x112a34 of _0x35c3e3){
  const _0x3f621b={
    ..._0x112a34,'status':{
      ..._0x112a34.status}
  }
;
_0x5d5fea.removeable(_0x112a34.key)&&(await _0x5d5fea.removeWriter(_0x112a34.key,{'indexer':![]}),_0x112a34.status.isIndexing=![]),_0x112a34.status.isActive=![],await _0x44da5c.insert("@keet/devices",_0x112a34),await deviceStats(_0x44da5c,_0x525f4d,_0x112a34,_0x3f621b);
}
await _0x44da5c.insert("@keet/members",_0x2bd0ec),await memberStats(_0x44da5c,_0x525f4d,_0x2bd0ec,_0x3d46be);
if(_0x498f3c.settings.roomType===RoomType.Broadcast)return;
if(_0x498f3c.abi.version>=0xb&&_0x498f3c.settings.isMembershipEventsDisabled)return;
const _0x993d86=_0x3053a8?{
  'memberLeft':{
    'memberKey':_0x2bd0ec.key}
}
:{
  'memberRemoved':{
    'memberKey':_0x2bd0ec.key}
}
;
await addChatEvent(_0x44da5c,_0x33f7fb,_0x993d86,_0x1680d6.timestamp);
}
function registerRoutes(_0x5acecc){
  _0x265f2f={
    _0x1dfd84:0x14b,_0x14ca2a:0x1ce},_0x3f2408={
    _0x3521cd:0x127,_0x1e6dec:0x1ea}
  ;
  _0x5acecc.add("@keet/add-device",handleAddDevice),_0x5acecc.add("@keet/update-device",handleUpdateDevice);
  _0x5acecc.add("@keet/remove-device",handleRemoveDevice),_0x5acecc.add("@keet/start-indexing",handleStartIndexing),_0x5acecc.add("@keet/stop-indexing",handleStopIndexing),_0x5acecc.add("@keet/accept-join-request",handleAcceptJoinRequest),_0x5acecc.add("@keet/reject-join-request",handleRejectJoinRequest),_0x5acecc.add("@keet/update-member",handleUpdateMember),_0x5acecc.add("@keet/change-member-role",handleChangeMemberRole),_0x5acecc.add("@keet/change-member-status",handleChangeMemberStatus),_0x5acecc.add("@keet/remove-member",handleRemoveMember),_0x5acecc.add("@keet/add-invitation",handleAddInvitation),_0x5acecc.add("@keet/remove-invitation",handleRemoveInvitation),_0x5acecc.add("@keet/move-indexer",handleMoveIndexer);
}
module.exports={
  [REGISTER_ROUTES]:registerRoutes,'MemberStatus':MemberStatus,'addDevice':addDevice,'addMember':addMember}
;