OverviewFilesCommitsIssuesDocsReleasesPeers

keet-cli / deobfuscated / lib / migrations / 3 / apply.js

482 lines · javascript ref:
const _0x5bf836=(function(){let _0xc0e66d=!![];return function(_0x11afa2,_0x33578c){const _0x4fef1c=_0xc0e66d?function(){if(_0x33578c){const _0x47ccf6=_0x33578c.apply(_0x11afa2,arguments);return _0x33578c=null,_0x47ccf6;}}:function(){};return _0xc0e66d=![],_0x4fef1c;};}()),_0x6cce8e=_0x5bf836(this,function(){_0x241488={_0x1c55e7:0x31a},_0x4b4ede={_0x28c8af:0x2eb};return _0x6cce8e.toString().search("(((.+)+)+)+$").toString().constructor(_0x6cce8e).search("(((.+)+)+)+$");});
_0x6cce8e();
const HypercoreId=require('hypercore-id-encoding'),crypto=require('hypercore-crypto'),c=require('compact-encoding'),KeetIndexing=require('@holepunchto/keet-indexing'),{
  InternalSchema,KeetSchema,ConfigSchema}
=require('@holepunchto/legacy-keet-core-schemas'),{
  CONFIG}
=require('@holepunchto/keet-core-api');
const {
  InternalOperation,UpgradeOperation}
=InternalSchema.Operations,{
  contract:{
    hyperschema:{
      getEnum:getContractEnum}
  }
}
=require('../../../spec'),{
  loadBundle}
=require('../../../bundle'),RoomType=getContractEnum("@keet/room-type"),LEGACY_MAX_ABI=0x7,CURRENT_ENGINE_V3_ABI=-0x392f,[NS_SEED]=crypto.namespace("@holepunchto/keet-core/v3-migrations",0x1),MAX_ABI_WITH_TRIGGERS=--0x3a81;
function generateCompatSeed(_0x89ca58){
  _0x42c314={
    _0x4d5793:0x1c8,_0x4a146f:0x13e,_0x4c9b0b:0xf0},_0x262532={
    _0x32e865:0x213,_0x5d2d34:0xc1,_0x1cb529:0xa2}
  ;
  if(!_0x89ca58)throw new Error("Encryption key is required");
  return crypto.hash([NS_SEED,_0x89ca58]);
}
async function getLegacyUserData(_0x523264,_0xb3c3a4,_0x46a0d1){
  _0x313df9={
    _0x12f5df:0x83,_0x96cc10:0x43,_0x522790:0x66},_0x16b242={
    _0x15e738:0x44e,_0x5820d9:0x12f}
  ;
  const _0x33f323=_0x523264.get({'key':_0xb3c3a4,'active':![]});
  const _0x81c4ac=await _0x33f323.getUserData(_0x46a0d1);
  return await _0x33f323.close(),_0x81c4ac;
}
async function getLegacyLocalKey(_0x20e4be,_0x4545e8){
  _0x36b1f3={
    _0x522c8e:0x1b6}
  ;
  return await getLegacyUserData(_0x20e4be,_0x4545e8,"autobase/local")||_0x4545e8;
}
async function autobaseApply(_0x420dd3,_0x4a13c3,_0x4dec82){
  _0x3f262b={
    _0x15df36:0x63,_0x17c05a:0x14},_0x5b5dbc=[];
  for(const _0x5889b9 of _0x420dd3){
    const _0x18d392=c.decode(c.uint,_0x5889b9.value);
    if(_0x18d392>0x1)break;
    _0x5889b9.value=c.decode(KeetSchema.Messages.KeetOplogMessage,_0x5889b9.value),_0x5b5dbc.push(_0x5889b9);
  }
let _0x338c46=await getABI(_0x4a13c3.bee);
for(const _0x46bf28 of _0x5b5dbc){
  _0x338c46=Math.max(_0x338c46,_0x46bf28.value.abi);
  for(const _0x21086b of _0x46bf28.value.ops){
    if(_0x21086b.type!==InternalOperation.TYPE||_0x21086b.value.subtype!==UpgradeOperation.SUBTYPE)continue;
    _0x338c46=Math.max(_0x338c46,_0x21086b.value.value.version);
  }
}
if(_0x338c46>LEGACY_MAX_ABI)return _0x4dec82.interrupt({'unsupportedABI':_0x338c46,'digest':null});
_0x5b5dbc.length&&await KeetIndexing.autobaseApply(_0x5b5dbc,_0x4a13c3);
return _0x5b5dbc.length;
}
async function migrate(_0x5a63cc,_0x2f3748,_0x363420,_0x1b3d3a,_0x3eb9f2){
  _0x15585d={
    _0x270cba:0x345},_0x41c4bb={
    _0x17d7ac:0x131,_0x381e4a:0x1da},{
    isPrivateProfile:_0x37b584,digest:_0x5938f3,config:_0x577815,capabilities:_0x1eefec,identity:_0x214d7f,primaryThread:_0x28d417,devices:_0x4c63c1,members:_0x173f6f,avatars:_0x1f5f15,files:_0x3aeecc,messages:_0x51804d,reactions:_0x4ea4ef,dmRooms:_0x1240b0}
  =await load(_0x2f3748,_0x363420),_0x5e0d61=Math.min(_0x5938f3.abi.version,MAX_ABI_WITH_TRIGGERS);
  _0x1b3d3a.setDefinition(loadBundle(_0x5e0d61).spec.contract.hyperdb),await _0x1b3d3a.insert("@keet/system-digest",_0x5938f3),await _0x1b3d3a.insert("@keet/room-config",_0x577815);
  await _0x1b3d3a.insert("@keet/threads",_0x28d417),await _0x1b3d3a.insert("@keet/room-capabilities",_0x1eefec);
  if(_0x37b584)await _0x1b3d3a.insert("@keet-private-id/identity",_0x214d7f);
  for(const _0x14dc1f of _0x4c63c1.values()){
    if(!_0x14dc1f.memberKey)continue;
    await _0x1b3d3a.insert("@keet/devices",_0x14dc1f);
  }
for(const [_0x76b454,_0x2bbdbb]of _0x1f5f15){
  if(!_0x173f6f.has(_0x76b454))continue;
  const _0x14fe0d=await _0x3eb9f2.put(_0x2bbdbb),{
    member:_0x305b6b}
  =_0x173f6f.get(_0x76b454);
  _0x305b6b.profile.avatar={
    'small':{
      'pointer':{
        'blob':_0x14fe0d}
    }
}
;
}
for(const {member:_0x4bfb2f}of _0x173f6f.values()){
  await _0x1b3d3a.insert("@keet/members",_0x4bfb2f);
}
for(const _0xbe04f5 of _0x3aeecc){
  await _0x1b3d3a.insert("@keet/files",_0xbe04f5);
}
for(const _0x4a6dbf of _0x51804d){
  await _0x1b3d3a.insert("@keet/chat",_0x4a6dbf);
}
for(const _0x4fd5bd of _0x4ea4ef){
  await _0x1b3d3a.insert("@keet/reactions",_0x4fd5bd);
}
if(!_0x37b584)return;
await _0x1b3d3a.insert("@keet-private-id/identity",_0x214d7f);
for(let _0x40fb22=--0x4d5c;_0x40fb22<_0x1240b0.length;_0x40fb22++){
  const {
    memberKey:_0x4802be,roomKey:_0x551625}
  =_0x1240b0[_0x40fb22],_0x3601fe={
    'isBlocked':![]},_0xbf1284={
    'memberKey':_0x4802be,'clock':_0x40fb22+(0x1),'status':_0x3601fe,'mailbox':null,'roomKey':_0x551625}
  ;
  await _0x1b3d3a.insert("@keet-private-id/contacts",_0xbf1284);
}
}
module.exports={
  'generateCompatSeed':generateCompatSeed,'getLegacyUserData':getLegacyUserData,'getLegacyLocalKey':getLegacyLocalKey,'autobaseApply':autobaseApply,'migrate':migrate}
;
async function load(_0x42373,_0x4d13a3){
  _0x1ad996={
    _0x4959bf:0x15,_0x4d0a9d:0x20d,_0x311ba5:0x7},_0x234668={
    _0x219f70:0x1d8,_0x5a7127:0x3e3}
  ;
  const _0x115005=_0x4d13a3.core.download(),[{isPrivateProfile:_0x42cfb7,digest:_0x55b81c,config:_0xddcdf1,identity:_0x27909e,primaryThread:_0x18799c,pinnedMessages:_0x159a96},{files:_0x5dba40,messages:_0x573c8c,messagesByOplogId:_0x42b37d},_0x16a733,_0x5a5c39,_0x39a64e,_0x59c40d]=await Promise.all([loadConfig(_0x4d13a3),loadChats(_0x4d13a3),loadDevices(_0x4d13a3),loadMembers(_0x4d13a3),loadReactions(_0x4d13a3),loadDMRooms(_0x4d13a3)]);
  _0x115005.destroy();
  const _0x24b48b={
    'seed':generateCompatSeed(_0x42373.encryptionKey)},_0x4ea694=await loadAvatars(_0x4d13a3,_0x5a5c39);
  if(_0x159a96)for(const _0x3d3dc6 of _0x159a96){
    const _0x419625=_0x42b37d.get(_0x3d3dc6);
    _0x419625.status.isPinned=!![];
  }
for(const {member:_0x4d2c0a,activeDevices:_0x36c8bd,inactiveDevices:_0xaaf6f2}of _0x5a5c39.values()){
  if(_0x36c8bd)for(const _0x302809 of _0x36c8bd){
    const _0x1c532b=HypercoreId.encode(_0x302809),_0x35d231=_0x16a733.get(_0x1c532b);
    if(!_0x35d231){
      _0x16a733.delete(_0x1c532b);
      continue;
    }
  _0x35d231.memberKey=_0x4d2c0a.key;
}
if(_0xaaf6f2)for(const _0x15a06c of _0xaaf6f2){
  const _0x42b690={
    'key':_0x15a06c,'memberKey':_0x4d2c0a.key,'profile':{
      'swarmKey':null,'name':null,'isMobile':![]},'status':{
      'isIndexing':![],'isActive':![]}
  }
;
_0x16a733.set(HypercoreId.encode(_0x15a06c),_0x42b690);
}
}
return _0x55b81c.creationTime=_0x573c8c.length>0x0?_0x573c8c[-0x1bf0].timestamp:-0x4e0e,{
  'isPrivateProfile':_0x42cfb7,'digest':_0x55b81c,'config':_0xddcdf1,'capabilities':_0x24b48b,'identity':_0x27909e,'primaryThread':_0x18799c,'devices':_0x16a733,'members':_0x5a5c39,'avatars':_0x4ea694,'files':_0x5dba40,'messages':_0x573c8c,'reactions':_0x39a64e,'dmRooms':_0x59c40d}
;
}
async function loadConfig(_0x50a7df){
  _0x18db99={
    _0x3566ba:0x54,_0x3a44c5:0x27d,_0x559d1a:0xe5},_0x54ad79={
    _0x1d225a:0x197,_0x10c64f:0x34e,_0x2a330d:0x60}
  ;
  const _0x5f5764={
    'abi':{
      'version':CURRENT_ENGINE_V3_ABI},'settings':{
      'roomType':RoomType.Default,'isExperimental':![],'isJoiningDisabled':![],'isAppendingDisabled':![],'isCallingDisabled':![],'isMembershipEventsDisabled':![]}
  },_0xad8e08={
  'title':null,'avatar':null,'description':null},_0x25bb86={
  'publicKey':null,'discoveryCoreKey':null,'userRegistry':null},_0x24763c={
  'id':0x0,'count':0x0,'parent':null,'stats':createDigestStats()}
;
let _0x685c82=null;
const _0x25e225=await _0x50a7df.bee.get(InternalSchema.ExperimentalModeKey,InternalSchema.UpgraderEncoding);
_0x5f5764.settings.isExperimental=!!_0x25e225;
for await(const _0x4658f0 of _0x50a7df.bee.createReadStream(ConfigSchema.Encoding)){
  const _0x1b2d8b=ConfigSchema.getValue(_0x4658f0);
  switch(_0x4658f0.key){
    case CONFIG.ROOM_TITLE:_0xad8e08.title=_0x1b2d8b;
    break;
    case CONFIG.ROOM_DESCRIPTION:_0xad8e08.description=_0x1b2d8b;
    break;
    case CONFIG.ROOM_CAN_CALL:_0x5f5764.settings.isCallingDisabled=_0x1b2d8b==="false";
    break;
    case CONFIG.ID_PUBLIC_KEY:_0x25bb86.publicKey=HypercoreId.decode(_0x1b2d8b);
    break;
    case CONFIG.PINNED_MESSAGES:_0x685c82=_0x1b2d8b.map(_0x4d7cd2=>HypercoreId.encode(_0x4d7cd2.key)+':'+_0x4d7cd2.seq);
    break;
    case CONFIG.ROOM_TYPE:_0x5f5764.settings.roomType=convertRoomType(Number.parseInt(_0x1b2d8b));
    break;
    case CONFIG.DISABLE_MEMBERSHIP_EVENTS:_0x5f5764.settings.isMembershipEventsDisabled=!![];
    break;
    default:continue;
  }
}
const _0x510c39=!!_0x25bb86.publicKey;
return{
  'isPrivateProfile':_0x510c39,'digest':_0x5f5764,'config':_0xad8e08,'identity':_0x25bb86,'primaryThread':_0x24763c,'pinnedMessages':_0x685c82}
;
}
async function loadDevices(_0x39c245){
  _0x18e353={
    _0xd3a7bd:0x115,_0x38dc83:0x395},_0x376665={
    _0x188f38:0x57,_0x150e2d:0x8d}
  ;
  const _0xb98c4c=new Map();
  for await(const {value:_0x1e7796}of _0x39c245.devices.devices.createReadStream()){
    const _0x378a0a={
      'key':_0x1e7796.key,'memberKey':null,'profile':{
        'swarmKey':_0x1e7796.noisePublicKey,'name':_0x1e7796.name,'isMobile':_0x1e7796.isMobile},'status':convertDeviceStatus(_0x1e7796)}
    ;
    _0xb98c4c.set(HypercoreId.encode(_0x378a0a.key),_0x378a0a);
  }
return _0xb98c4c;
}
async function loadMembers(_0x4ef41c){
  _0x24f3a0={
    _0x443270:0xff,_0x54471e:0x13b},_0x4a6707={
    _0x1127af:0x346,_0x13792d:0x39},_0x31a274=new Map();
  for await(const {value:_0x317e07}of _0x4ef41c.members.members.createReadStream()){
    const {
      member:_0x332623,activeDevices:_0x435e5b,inactiveDevices:_0x1503a4}
    =convertMember(_0x317e07);
    _0x31a274.set(HypercoreId.encode(_0x332623.key),{'member':_0x332623,'activeDevices':_0x435e5b,'inactiveDevices':_0x1503a4,'hasAvatar':_0x317e07.hasAvatar});
  }
for await(const {value:_0x3173eb}of _0x4ef41c.members.inactiveMembers.createReadStream()){
  const {
    member:_0x3a490d,activeDevices:_0x1a6ce3,inactiveDevices:_0x148e81}
  =convertMember(_0x3173eb);
  _0x31a274.set(HypercoreId.encode(_0x3a490d.key),{'member':_0x3a490d,'activeDevices':_0x1a6ce3,'inactiveDevices':_0x148e81,'hasAvatar':_0x3173eb.hasAvatar});
}
for await(const {_id:_0x633740}of _0x4ef41c.members.mutedMembers.createReadStream()){
  const _0x50cf00=HypercoreId.encode(_0x633740),_0x4bf6c8=_0x31a274.get(_0x50cf00);
  if(!_0x4bf6c8)continue;
  _0x4bf6c8.member.status.isMuted=!![];
}
return _0x31a274;
}
async function loadAvatars(_0x5b59a3,_0x44aaf2){
  _0x42b604={
    _0x28ced6:0x34f,_0x46880b:0x18b,_0x8d2929:0x155},_0x42b224={
    _0x5ec476:0x315,_0x1dbe0b:0x15d}
  ;
  const _0x3526e9=[];
  for(const [_0x273a00,{member:_0x72485f,hasAvatar:_0xdd8b90}]of _0x44aaf2){
    if(!_0xdd8b90)continue;
    _0x3526e9.push(loadAvatar(_0x5b59a3,_0x273a00,_0x72485f.key));
  }
const _0xe67a4e=await Promise.all(_0x3526e9);
return new Map(_0xe67a4e);
}
async function loadAvatar(_0x4cf46e,_0xfe30c,_0x383b88){
  _0x457622={
    _0x4b196c:0xbe,_0x3b12ad:0x15f},_0x3fdc62={
    _0x217194:0xc9,_0x14fc64:0x19f}
  ;
  const _0x1b21cc=await _0x4cf46e.members.avatars.get(_0x383b88);
  return[_0xfe30c,_0x1b21cc.value];
}
async function loadChats(_0x5c9575){
  _0x506358={
    _0x43986f:0x2b8},_0x3d021c={
    _0x54d7dd:0x11d,_0x21fe80:0x5f,_0x1a3c49:0xa9}
  ;
  const _0x1e09a0=new Map(),_0x37639e=[],_0x5cb83c=[];
  let _0x589ce5=0x0,_0x288dab=0x0;
  for await(const {value:_0x187104}of _0x5c9575.chat.chat.createReadStream()){
    const _0x1ab326=_0x589ce5++,_0x4c7cae=HypercoreId.encode(_0x187104.id.key)+':'+_0x187104.id.seq,_0x19a119={
      'id':{
        'thread':0x0,'index':_0x1ab326},'oplog':_0x187104.id,'clock':_0x1ab326,'timestamp':_0x187104.timestamp,'status':{
        'isEdited':!!_0x187104.chat?..edited,'isDeleted':!!_0x187104.deleted,'isPinned':![]},'message':null,'event':null}
    ;
    if(_0x187104.chat)_0x19a119.message={
      'text':_0x187104.chat.text,'files':null,'display':_0x187104.display?convertDisplay(_0x187104.display):null,'replyTo':_0x187104.replyTo,'parent':null}
    ;
    else{
      if(_0x187104.file){
        const _0x208e82=convertFile(_0x187104.file),_0xbebdaf=_0x288dab++;
        _0x5cb83c.push({'id':_0xbebdaf,'oplog':_0x187104.id,'status':{'isDeleted':![]},'file':_0x208e82}),_0x19a119.message={
          'text':null,'files':[_0xbebdaf],'display':null,'replyTo':null,'parent':null}
        ;
      }else _0x187104.event&&(_0x19a119.event=convertEvent(_0x187104.event));
  }
_0x1e09a0.set(_0x4c7cae,_0x19a119),_0x37639e.push(_0x19a119);
}
return{
  'files':_0x5cb83c,'messages':_0x37639e,'messagesByOplogId':_0x1e09a0}
;
}
async function loadReactions(_0x1eba33){
  _0x48d9f1={
    _0x3cab83:0x6,_0x333b33:0xf9},_0x42faf4={
    _0x2dbf67:0x3a0,_0x5a1ba9:0x19c},_0x3b16e6=[];
  let _0x5440ee=0x0;
  for await(const {_id:[_0x3c7079,_0x43d291,_0x55329b,_0x8abf39]}of _0x1eba33.reactions.reactions.createReadStream()){
    _0x3b16e6.push({'id':{'thread':_0x3c7079,'index':_0x43d291},'sender':_0x55329b,'clock':_0x5440ee++,'reaction':_0x8abf39});
  }
return _0x3b16e6;
}
async function loadDMRooms(_0x10b624){
  _0x3a4348={
    _0x42f24c:0xbc,_0x13decd:0x253,_0x40885b:0xde},_0x11ef7c={
    _0x172d0e:0x67,_0x2ed94d:0x110,_0x3eb559:0x152},_0x47a7ad=[];
  for await(const {key:_0x4b6c3a,value:{roomKey:_0x3c322d}}of _0x10b624.indexes.dmByMember.createReadStream()){
    _0x47a7ad.push({'memberKey':_0x4b6c3a,'roomKey':_0x3c322d});
  }
return _0x47a7ad;
}
function convertMember(_0x5ee1c3){
  _0x1c8eb3={
    _0x1869e9:0xf6,_0x4d5c18:0x1b8},_0x436d7a={
    _0x1d62ea:0x82,_0x1cf2cc:0x306,_0xdad9cb:0x65},_0x227de1=_0x5ee1c3.devices,_0x141d4a=_0x5ee1c3.inactive;
  const _0x5298e0={
    'key':_0x5ee1c3.key,'profile':{
      'timestamp':0x0,'mailbox':null,'displayName':_0x5ee1c3.displayName,'avatar':null},'status':convertMemberStatus(_0x5ee1c3)}
  ;
  return{
    'member':_0x5298e0,'activeDevices':_0x227de1,'inactiveDevices':_0x141d4a}
  ;
}
function convertFile(_0x50556b){
  _0x440b87={
    _0x39fb43:0x428,_0xddeeaf:0x150,_0x53966c:0xdb},_0x63213c={
    _0x1bd94e:0x1b3,_0x9af6ce:0x128}
  ;
  return{
    'pointer':{
      'externalDrive':{
        'key':_0x50556b.key,'path':_0x50556b.path,'version':_0x50556b.version,'size':0x0}
    },'metadata':{
    'name':_0x50556b.path,'mimetype':_0x50556b.type,'dimensions':_0x50556b.dimensions},'preview':_0x50556b.previewPointer?{
    'medium':{
      'metadata':{
        'isPreview':!![]},'pointer':{
        'externalDrive':{
          'key':_0x50556b.previewPointer.key,'path':_0x50556b.previewPointer.path,'version':_0x50556b.previewPointer.version,'size':0x0}
      }
  }
}
:null}
;
}
function convertEvent(_0x2f4572){
  _0x3b8e14={
    _0x510f93:0x4f0},_0x8a1028={
    _0x494429:0x63,_0x50fab4:0x9b,_0x551bcd:0x9f}
  ;
  switch(_0x2f4572.type){
    case0x1:return{
      'memberJoined':{
        'memberKey':null}
    }
  ;
  case 0x2:return{
    'callStarted':!![]}
  ;
  case0x3:return{
    'roomAvatarChanged':!![]}
  ;
  case 0x4:return{
    'invitationCreated':!![]}
  ;
  case 0x5:return{
    'memberLeft':{
      'memberKey':null}
  }
;
case0x6:return{
  'titleChanged':{
    'from':_0x2f4572.value.from,'to':_0x2f4572.value.to}
}
;
case 0x7:return{
  'memberRemoved':{
    'memberKey':null}
}
;
case 0x8:return{
  'callHangup':!![]}
;
case 0x9:return{
  'callMissed':!![]}
;
default:return null;
}
}
function convertDisplay(_0x21f88b){
  _0x13e1a8={
    _0x526b0d:0x23a,_0x278093:0x178},_0x3aeed7={
    _0x2aebd8:0x1b9,_0x3f429f:0xde},_0x36d0e6={
    'mention':null,'httpLink':null,'pearLink':null,'bold':null,'italic':null,'strikeThrough':null,'code':null,'codeBlock':null,'emoji':null}
  ;
  for(const {type:_0x410a0a,value:_0x2b66c6}of _0x21f88b){
    switch(_0x410a0a){
      case0x1:if(!_0x36d0e6.mention)_0x36d0e6.mention=[];
      _0x36d0e6.mention.push({'range':{'start':_0x2b66c6.start,'length':_0x2b66c6.length},'memberKey':_0x2b66c6.memberId});
      break;
      case0x2:if(!_0x36d0e6.httpLink)_0x36d0e6.httpLink=[];
      _0x36d0e6.httpLink.push(convertDisplayLink(_0x2b66c6));
      break;
      case 0x3:if(!_0x36d0e6.pearLink)_0x36d0e6.pearLink=[];
      _0x36d0e6.pearLink.push(convertDisplayLink(_0x2b66c6));
      break;
      case 0x4:if(!_0x36d0e6.bold)_0x36d0e6.bold=[];
      _0x36d0e6.bold.push({'start':_0x2b66c6.start,'length':_0x2b66c6.length});
      break;
      case0x5:if(!_0x36d0e6.italic)_0x36d0e6.italic=[];
      _0x36d0e6.italic.push({'start':_0x2b66c6.start,'length':_0x2b66c6.length});
      break;
      case0x6:if(!_0x36d0e6.code)_0x36d0e6.code=[];
      _0x36d0e6.code.push({'start':_0x2b66c6.start,'length':_0x2b66c6.length});
      break;
      case0x7:if(!_0x36d0e6.emoji)_0x36d0e6.emoji=[];
      _0x36d0e6.emoji.push({'range':{'start':_0x2b66c6.start,'length':_0x2b66c6.length},'content':_0x2b66c6.content});
      break;
      case 0x8:if(!_0x36d0e6.codeBlock)_0x36d0e6.codeBlock=[];
      _0x36d0e6.codeBlock.push({'start':_0x2b66c6.start,'length':_0x2b66c6.length});
      break;
      case0x9:if(!_0x36d0e6.strikeThrough)_0x36d0e6.strikeThrough=[];
      _0x36d0e6.strikeThrough.push({'start':_0x2b66c6.start,'length':_0x2b66c6.length});
      break;
      default:continue;
    }
}
return _0x36d0e6;
}
function convertDisplayLink(_0x3b78dc){
  _0x1aad19={
    _0x4aa447:0x7c,_0x2c6a1e:0x18},_0x49c746={
    _0x1ebdbf:0xf5,_0x2d7dfe:0x224,_0x4cc1fc:0xfe}
  ;
  return{
    'range':{
      'start':_0x3b78dc.start,'length':_0x3b78dc.length},'url':_0x3b78dc.content,'preview':_0x3b78dc.preview?{
      'title':_0x3b78dc.preview.title,'description':_0x3b78dc.preview.description,'file':_0x3b78dc.preview.file?{
        'pointer':{
          'externalDrive':{
            'key':_0x3b78dc.preview.file.key,'path':_0x3b78dc.preview.file.path,'version':_0x3b78dc.preview.file.version,'size':0x0}
        },'metadata':{
        'mimetype':_0x3b78dc.preview.file.type,'dimensions':_0x3b78dc.preview.file.dimensions}
    }
  :null}
:null}
;
}
async function getABI(_0x3fb883){
  _0x39c4f3={
    _0x17f7b2:0x5f,_0x18cf3a:0x10d,_0x200d2d:0x1a4},_0x33332e={
    _0xdc4fa6:0x405,_0x46af0a:0x174,_0x30595c:0x1a7}
  ;
  const _0x22bced=await _0x3fb883.get(InternalSchema.CodeVersionKey,InternalSchema.UpgraderEncoding);
  return _0x22bced?_0x22bced.value:0x0;
}
function createDigestStats(){
  return{
    'devices':{
      'total':0x0,'active':0x0},'members':{
      'total':0x0,'active':0x0,'pending':0x0},'chat':{
      'clock':0x0,'pinned':0x0,'threads':0x0,'timestamp':0x0},'files':{
      'clock':0x0}
  }
;
}
function convertMemberStatus(_0x3972cf){
  _0x291bee={
    _0x2f4204:0x20c,_0x30b54b:0x1e,_0x1a5aa5:0x7e},_0x3e48ed={
    _0x28bbc4:0x2c9,_0x158d39:0x1f1}
  ;
  return{
    'isAdmin':(_0x3972cf.capabilities&0x2)!==0x0,'isModerator':(_0x3972cf.capabilities&-0x13c0)!==-0x3614,'isPending':![],'isActive':!_0x3972cf.inactive||_0x3972cf.inactive.length===-0x12de,'isMuted':![],'isBanned':![],'isShadowBanned':![]}
  ;
}
function convertDeviceStatus(_0x5f4bf7){
  return{
    'isIndexing':(_0x5f4bf7.capabilities&-0x2a5e)!==-0x4498,'isActive':!![]}
  ;
}
function convertRoomType(_0x31ba27){
  _0x8d83e={
    _0x2a5f85:0x134},_0x2c24e4={
    _0x590a1c:0x150,_0x27a410:0x297}
  ;
  switch(_0x31ba27){
    case 0x0:return RoomType.Default;
    case 0x1:return RoomType.Broadcast;
    case0x2:return RoomType.DirectMessage;
    default:return0x0;
  }
}