OverviewFilesCommitsIssuesDocsReleasesPeers

keet-cli / deobfuscated / lib / contract / chat.js

154 lines · javascript ref:
const _0x21a62f=(function(){let _0x4d9f3b=!![];return function(_0x3d4de1,_0x673837){_0x2e9e34=_0x4d9f3b?function(){if(_0x673837){const _0x9b9601=_0x673837.apply(_0x3d4de1,arguments);return _0x673837=null,_0x9b9601;}}:function(){};return _0x4d9f3b=![],_0x2e9e34;};}()),_0x35aec6=_0x21a62f(this,function(){_0x1d5b68={_0x4c3d47:0x2f2};return _0x35aec6.toString().search("(((.+)+)+)+$").toString().constructor(_0x35aec6).search("(((.+)+)+)+$");});
_0x35aec6();
const b4a=require('b4a');
const REGISTER_ROUTES=require('./registration'),{
  getMemberForDeviceKey,isMemberActive}
=require('./query'),{
  KeetContractError}
=require('./errors'),{
  insertMessageFiles,deleteMessageFiles,updateImageFile}
=require('./avatars'),{
  contract:{
    hyperschema:{
      getEnum:getContractEnum}
  }
}
=require('../../spec'),{
  chatStats,fileStats}
=require('./stats'),RoomType=getContractEnum("@keet/room-type");
async function addEvent(_0x4e441f,_0x2599a0,_0x27dbf9,_0x32a9b1){
  _0x307568={
    _0x3df50d:0x25,_0x4a85ae:0xb8},_0xcf846={
    _0x4aa7eb:0x1a2,_0x4122ec:0x1b3,_0x4d16aa:0x9a}
  ;
  const _0x35dc30=await _0x4e441f.get("@keet/threads",{'id':0x0}),_0x3452d5={
    'id':{
      'thread':0x0,'index':_0x35dc30.count},'oplog':_0x2599a0,'clock':_0x35dc30.stats.chat.clock,'timestamp':_0x32a9b1,'event':_0x27dbf9,'status':{
      'isEdited':![],'isPinned':![],'isDeleted':![]}
  }
;
await _0x4e441f.insert('@keet/chat',_0x3452d5);
await chatStats(_0x4e441f,_0x35dc30,_0x3452d5);
}
async function handleAddChatMessage({message:_0x39ad2b,header:_0x157d98},{db:_0x461952,blobs:_0x509694,writer:_0x23518b}){
  _0x3ed8f6={
    _0x17358b:0xd0,_0x357036:0x1d2,_0x54d3be:0x25c},_0x236523={
    _0x376342:0x19b,_0x31b786:0x109,_0x2da6e2:0x65}
  ;
  let [_0x20c4c4,_0x15b563,_0x557891,_0x56feb0,_0x108dd0,_0x27b0e2]=await Promise.all([getMemberForDeviceKey(_0x461952,_0x23518b.key),_0x461952.get("@keet/threads",{'id':0x0}),_0x39ad2b.parent?_0x461952.get("@keet/threads-by-parent",{'oplog':_0x39ad2b.parent}):null,_0x39ad2b.parent?_0x461952.get("@keet/chat-by-message-id",{'oplog':_0x39ad2b.parent}):null,_0x39ad2b.replyTo?_0x461952.get("@keet/chat-by-message-id",{'oplog':_0x39ad2b.replyTo}):null,_0x461952.get("@keet/system-digest")]);
  if(!isMemberActive(_0x20c4c4))throw KeetContractError.INACTIVE_MEMBER();
  if(_0x20c4c4.status.isMuted)throw KeetContractError.WRITER_IS_MUTED();
  const _0x546200=_0x27b0e2.settings.roomType===RoomType.Broadcast,_0x340c8e=_0x546200||_0x27b0e2.settings.isAppendingDisabled;
  if(!_0x20c4c4.status.isModerator&&_0x340c8e)throw KeetContractError.MODERATORS_ONLY();
  if(_0x39ad2b.parent&&!_0x56feb0)throw KeetContractError.PARENT_MSG_INVALID();
  if(_0x39ad2b.replyTo&&!_0x108dd0)throw KeetContractError.REPLYTO_MSG_INVALID();
  !_0x39ad2b.parent&&(_0x557891=_0x15b563);
  const _0x325be3=_0x15b563.stats.files.clock;
  _0x39ad2b.files=await insertMessageFiles({'primaryThread':_0x15b563,'clock':_0x325be3,'message':_0x39ad2b,'blobs':_0x509694,'db':_0x461952,'oplog':_0x23518b});
  const _0xaee0c5={
    'id':{
      'thread':_0x557891.id,'index':_0x557891?_0x557891.count:--0x1d4c},'oplog':_0x23518b,'clock':_0x15b563.stats.chat.clock,'timestamp':_0x157d98.timestamp,'message':_0x39ad2b,'status':{
      'isEdited':![],'isPinned':![],'isDeleted':![]},'event':_0x39ad2b.event}
  ;
  await _0x461952.insert("@keet/chat",_0xaee0c5),await chatStats(_0x461952,_0x15b563,_0xaee0c5);
}
async function handleUpdateChatMessage({header:_0x3ab102,oplog:_0x358bd1,message:_0x17c282},{db:_0x4cdd62,blobs:_0x31a0bd,writer:_0x12bd8c}){
  _0x467610={
    _0x4d1ea4:0xc3},_0x41eca1={
    _0x53ee4a:0x1c6,_0x29b05c:0xa2,_0x156838:0x31a},[_0x4f8bb7,_0x3f65c9,_0x57f1a9,_0x285e23,_0x1ec427]=await Promise.all([getMemberForDeviceKey(_0x4cdd62,_0x12bd8c.key),getMemberForDeviceKey(_0x4cdd62,_0x358bd1.key),_0x4cdd62.get("@keet/chat-by-message-id",{'oplog':_0x358bd1}),_0x4cdd62.get("@keet/threads",{'id':0x0}),_0x17c282.replyTo?_0x4cdd62.get("@keet/chat-by-message-id",{'oplog':_0x17c282.replyTo}):null]);
  if(!isMemberActive(_0x4f8bb7))throw KeetContractError.INACTIVE_MEMBER();
  if(!_0x57f1a9)throw KeetContractError.TARGET_MSG_INVALID();
  if(!_0x3f65c9)throw KeetContractError.TARGET_MEMBER_NOT_FOUND();
  if(!b4a.equals(_0x4f8bb7.key,_0x3f65c9.key))throw KeetContractError.SELF_ONLY();
  if(_0x57f1a9.status.isDeleted)throw KeetContractError.TARGET_MSG_IS_DELETED();
  if(_0x17c282.replyTo&&!_0x1ec427)throw KeetContractError.REPLYTO_MSG_INVALID();
  const _0x9a72dd=[];
  _0x57f1a9.message?..files?..length&&(_0x9a72dd.push(..._0x57f1a9.message.files),_0x57f1a9.message.files=[]);
  _0x17c282.files=[];
  await deleteMessageFiles({'primaryThread':_0x285e23,'message':_0x57f1a9,'db':_0x4cdd62,'blobs':_0x31a0bd});
  const _0x50f359=_0x285e23.stats.files.clock;
  await insertMessageFiles({'primaryThread':_0x285e23,'clock':_0x50f359,'message':_0x17c282,'blobs':_0x31a0bd,'db':_0x4cdd62,'oplog':_0x12bd8c});
  const _0x2da88b={
    ..._0x57f1a9,'message':{
      ..._0x57f1a9.message,'text':_0x17c282.text,'files':_0x9a72dd,'display':_0x17c282.display},'status':{
      ..._0x57f1a9.status,'isEdited':!![]},'editedAt':_0x3ab102.timestamp}
  ;
  await _0x4cdd62.insert('@keet/chat',_0x2da88b),await chatStats(_0x4cdd62,_0x285e23,_0x2da88b,_0x57f1a9);
}
async function handleRemoveChatMessage({oplog:_0x33f2d9},{db:_0x22b499,blobs:_0xba38fb,writer:_0x30a830}){
  _0x523f10={
    _0x446b39:0x72,_0x5cf6a6:0x44},_0x585c79={
    _0x2a3739:0x3a6},[_0x152506,_0x1701a2,_0x251169,_0x128f47]=await Promise.all([getMemberForDeviceKey(_0x22b499,_0x30a830.key),getMemberForDeviceKey(_0x22b499,_0x33f2d9.key),_0x22b499.get("@keet/chat-by-message-id",{'oplog':_0x33f2d9}),_0x22b499.get("@keet/threads",{'id':0x0})]);
  if(!isMemberActive(_0x152506))throw KeetContractError.INACTIVE_MEMBER();
  if(!_0x251169)throw KeetContractError.TARGET_MSG_INVALID();
  if(!_0x152506.status.isModerator&&!b4a.equals(_0x152506.key,_0x1701a2.key))throw KeetContractError.MODERATORS_OR_SELF_ONLY();
  await deleteMessageFiles({'primaryThread':_0x128f47,'message':_0x251169,'db':_0x22b499,'blobs':_0xba38fb});
  const _0x5f5231={
    ..._0x251169,'message':null,'status':{
      ..._0x251169.status,'isDeleted':!![],'isPinned':![]}
  }
;
await _0x22b499.insert("@keet/chat",_0x5f5231),await chatStats(_0x22b499,_0x128f47,_0x5f5231,_0x251169);
const _0x7eb403=await _0x22b499.get("@keet/chat-label-digests",{'id':_0x251169.id});
if(!_0x7eb403)return;
await _0x22b499.insert("@keet/chat-label-digests",{..._0x7eb403,'isDeleted':!![]});
}
async function handlePinChatMessage({oplog:_0x5d12cb,isPinned:_0x546f21},{db:_0x49bf23,writer:_0x54104c}){
  _0x3c0df7={
    _0x3adc13:0x1c1,_0x229dcc:0x16,_0x16a3af:0x36d},_0x3826b8={
    _0x25a5cd:0x3a,_0x1bef56:0x130},[_0x265e29,_0xa72f55,_0x2e1e20]=await Promise.all([getMemberForDeviceKey(_0x49bf23,_0x54104c.key),_0x49bf23.get("@keet/chat-by-message-id",{'oplog':_0x5d12cb}),_0x49bf23.get("@keet/threads",{'id':0x0})]);
  if(!isMemberActive(_0x265e29))throw KeetContractError.INACTIVE_MEMBER();
  if(!_0xa72f55)throw KeetContractError.TARGET_MSG_INVALID();
  if(!_0x265e29.status.isModerator)throw KeetContractError.MODERATORS_ONLY();
  const _0x206e69={
    ..._0xa72f55,'status':{
      ..._0xa72f55.status,'isPinned':_0x546f21}
  }
;
await _0x49bf23.insert("@keet/chat",_0x206e69),await chatStats(_0x49bf23,_0x2e1e20,_0x206e69,_0xa72f55);
}
async function handleAddFilePreview({oplog:_0x26a80c,index:_0x1a2ed6,preview:_0x48b53c,displayType:_0x16671c},{db:_0x3e5658,blobs:_0x3f58f9,writer:_0xf33cab}){
  _0x2f5cd5={
    _0x35adbe:0x23,_0x15040e:0x108,_0x107bab:0x71},_0x2f536b={
    _0x3c2b89:0x172,_0x3a2d23:0x308},[_0xb40da9,_0x502c2a,_0xd3398f,_0x2418c0]=await Promise.all([getMemberForDeviceKey(_0x3e5658,_0xf33cab.key),getMemberForDeviceKey(_0x3e5658,_0x26a80c.key),_0x3e5658.get("@keet/chat-by-message-id",{'oplog':_0x26a80c}),_0x3e5658.get("@keet/threads",{'id':0x0})]);
  if(!isMemberActive(_0xb40da9))throw KeetContractError.INACTIVE_MEMBER();
  if(!_0xd3398f)throw KeetContractError.TARGET_MSG_INVALID();
  if(!b4a.equals(_0xb40da9.key,_0x502c2a.key))throw KeetContractError.SELF_ONLY();
  const _0x27a9c6=_0x16671c?getDisplayItemFiles(_0xd3398f,_0x16671c,_0x1a2ed6):_0xd3398f.message?..files,_0x5d702c=_0x16671c?0x0:_0x1a2ed6;
  if(!_0x27a9c6||_0x27a9c6.length<=_0x5d702c)throw KeetContractError.FILE_REFERENCE_INVALID("files is falsy\x20or\x20invalid index");
  const _0x2d7cc6=await _0x3e5658.get("@keet/files",{'id':_0x27a9c6[_0x5d702c]});
  if(!_0x2d7cc6)throw KeetContractError.FILE_RECORD_INVALID("record is falsy");
  _0x2d7cc6.file.preview=await updateImageFile(_0x3f58f9,null,_0x48b53c),await _0x3e5658.insert("@keet/files",_0x2d7cc6),await fileStats(_0x3e5658,_0x2418c0,_0x2d7cc6,_0x2d7cc6);
}
async function handleUpdateReadLength({length:_0x303e62},{db:_0x1a3249,writer:_0x229955}){
  _0x591985={
    _0x56086f:0x1cc,_0x27553f:0xb8},_0x49265f={
    _0x3b9284:0x1f3,_0x477648:0x276}
  ;
  const [_0x1ece78,_0x14b67c]=await Promise.all([_0x1a3249.get("@keet/system-digest"),getMemberForDeviceKey(_0x1a3249,_0x229955.key)]);
  if(!isMemberActive(_0x14b67c)||_0x14b67c.status.isMuted||_0x1ece78.settings.roomType!==RoomType.DirectMessage)return;
  await _0x1a3249.insert("@keet/read-lengths",{'memberKey':_0x14b67c.key,'length':_0x303e62});
}
function registerRoutes(_0x466533){
  _0x12b43b={
    _0xca4f9f:0x14e,_0x506634:0x87},_0x496792={
    _0x3f7b11:0x153,_0x18365a:0xf3}
  ;
  _0x466533.add("@keet/add-chat-message",handleAddChatMessage),_0x466533.add("@keet/remove-chat-message",handleRemoveChatMessage);
  _0x466533.add("@keet/update-chat-message",handleUpdateChatMessage);
  _0x466533.add("@keet/pin-chat-message",handlePinChatMessage),_0x466533.add("@keet/add-file-preview",handleAddFilePreview),_0x466533.add("@keet/update-read-length",handleUpdateReadLength);
}
module.exports={
  'addEvent':addEvent,[REGISTER_ROUTES]:registerRoutes}
;
function getDisplayItemFiles(_0x5b1a91,_0x584757,_0x7bb88a){
  _0x9e56a4={
    _0x11eb34:0x215,_0x46d179:0x18c},_0x65d7b2={
    _0x283b4b:0x74,_0x4194bb:0x102}
  ;
  switch(_0x584757){
    case0x1:return _0x5b1a91.message.display.httpLink[_0x7bb88a].preview.files;
    case 0x2:return _0x5b1a91.message.display.pearLink[_0x7bb88a].preview.files;
  }
}