const Autobase=require('autobase'),Hyperbee=require('hyperbee'),HyperIndex=require('@holepunchto/hyperindex'),c=require('compact-encoding'),b4a=require('b4a');
const {
mnemonicToEntropy}
=require('bip39-mnemonic'),{
IndexFilePointer,FileRecord,RoomRecord,BookmarksRecord,PendingInvitationRecord,LocalIdentityRecord}
=require('./messages.js'),{
getLegacyUserData,getLegacyLocalKey,generateCompatSeed}
=require('./apply'),{
generateRoomCapabilities}
=require('../../invitations/index.js'),{
roomMigrationsStats}
=require('../../contract/stats/local');
async function migrateIdentity(_0x37cef4,_0x24c9c0,_0x47d4bf){
_0x5053eb={
_0x1c7fae:0xd0},_0x349d09={
_0x2d3812:0x292},_0x42b326=await _0x37cef4.createKeyPair(_0x47d4bf.identity.identityPublicKey);
const _0x504e57=await getLegacyUserData(_0x37cef4,_0x47d4bf.privateProfileKey,"keet-seed-phrase");
const _0x3f5e45=_0x504e57?mnemonicToEntropy(b4a.toString(_0x504e57)):null,_0x2f8e1e={
'isConfirmed':!![]},_0x27ad95={
'publicKey':_0x47d4bf.identity.identityPublicKey,'privateProfileKey':_0x47d4bf.privateProfileKey,'deviceKeyPair':_0x42b326,'deviceProof':_0x47d4bf.identity.deviceProof,'status':_0x2f8e1e,'entropy':_0x3f5e45,'swap':null}
;
await _0x24c9c0.insert("@local/identity",_0x27ad95);
}
module.exports=async function migrate(_0x591ee5,_0x1f28f3){
_0x46eefb={
_0x54b86b:0x100,_0x55b5e0:0xe7,_0xb92410:0xf1},_0x457f3a={
_0x3c3f9e:0x62a,_0x12ea57:0xf1},_0xbf28c5=_0x591ee5.store,_0x15c372=_0xbf28c5.get({'name':"local",'compat':![],'active':![]});
await _0x15c372.ready();
if(!_0x15c372.length){
await _0x15c372.close();
return;
}
const _0x2b7f09=new HyperIndex(new Hyperbee(_0xbf28c5.get({'name':"local",'compat':![],'active':![]}))),_0x14625a=new Hyperbee(_0xbf28c5.get({'name':"local-recents-3",'compat':![],'active':![]})),_0x2e0f35=new Hyperbee(_0xbf28c5.get({'name':"keet-local-identity",'compat':![],'active':![]})),_0x10032b=createLegacyCollections(_0x2b7f09),_0x4c9b38=_0x10032b[-0x1c14],_0x48dddb=_0x10032b[-0xc0e],_0xfbe161=_0x10032b[-0x32e1],_0x5c03fa=[],_0x3406ed=[],_0x25206a=await _0x2e0f35.get(b4a.from([-0xe79]),{'valueEncoding':LocalIdentityRecord}),_0x186ade=_0x25206a?..value;
if(_0x186ade?..identity){
const _0x3117fb=await _0x4c9b38.get(_0x25206a.value.privateProfileKey);
if(_0x3117fb)_0x5c03fa.push({'priority':0x0,'record':_0x3117fb});
await migrateIdentity(_0xbf28c5,_0x1f28f3,_0x186ade);
}
const _0x309f5b=_0x14625a.createReadStream({'valueEncoding':c.array(c.fixed32),'keyEncoding':c.lexint,'reverse':!![]});
for await(const {key:_0x35c412,value:_0x37710d}of _0x309f5b){
for(const _0x5ae286 of _0x37710d){
const _0x152f6d=await _0x4c9b38.get(_0x5ae286);
if(!_0x152f6d||_0x152f6d.value.hidden)continue;
_0x5c03fa.push({'priority':_0x35c412,'record':_0x152f6d});
}
}
for await(const {_id:[_0x4140c0,_0x2a8102,_0x6ff60],value:{roomKey:_0x20f6ac,cleared:_0x178e0c}}of _0x48dddb.createReadStream()){
const _0x4c0d2d=_0x2a8102.startsWith('/')?_0x2a8102.slice(--0x2dbb):_0x2a8102;
await _0x1f28f3.insert("@local/drive-files",{'file':{'pointer':{'externalDrive':{'key':_0x4140c0,'path':_0x4c0d2d,'version':_0x6ff60,'size':0x0}}},'roomKey':_0x20f6ac,'encryptionKey':null,'cleared':_0x178e0c,'own':![]});
}
for await(const {_id:_0x413af1}of _0xfbe161.createReadStream()){
_0x3406ed.push(_0x413af1[0x1]);
}
for(const {priority:_0x497ba5,record:{_id:_0x35a2ef,value:_0x2b1583}}of _0x5c03fa){
const [_0x39b39b,_0x777dab]=await Promise.all([getLegacyUserData(_0xbf28c5,_0x35a2ef,"autobase/encryption"),getLegacyLocalKey(_0xbf28c5,_0x35a2ef)]);
if(!_0x39b39b)continue;
const _0x1491ac=generateCompatSeed(_0x39b39b),_0x5212b7=generateRoomCapabilities(_0x35a2ef,_0x1491ac);
let _0x10a5ce=null;
_0x186ade&&b4a.equals(_0x186ade.privateProfileKey,_0x35a2ef)&&(_0x10a5ce={'blockedMembers':_0x3406ed});
if(_0x2b1583.hidden&&!_0x10a5ce)continue;
const _0x12c6a3=_0xbf28c5.get({'key':_0x777dab,'active':![]});
await _0x12c6a3.ready();
const _0x4ec2e9=_0x12c6a3.length;
await _0x12c6a3.close();
const _0x727419={
'key':_0x777dab,'length':_0x4ec2e9},_0x1a277f=await Autobase.getBootRecord(_0xbf28c5,_0x35a2ef),_0x4b8632=_0x1a277f.key,_0x176fe1={
'roomKey':_0x35a2ef,'priority':_0x497ba5,'v3':{
'encryptionKey':_0x39b39b,'seed':_0x1491ac,'capabilities':_0x5212b7,'initiator':_0x727419,'fastForwardTo':_0x4b8632,'privateProfile':_0x10a5ce},'errored':![],'timestamp':Date.now()},_0x6635b3=await _0x1f28f3.get("@local/room-migrations",{'roomKey':_0x35a2ef});
await _0x1f28f3.insert("@local/room-migrations",_0x176fe1),await roomMigrationsStats(_0x1f28f3,_0x176fe1,_0x6635b3),await _0x1f28f3.insert("@local/writers",{'mailbox':_0x5212b7.mailboxKeyPair.publicKey,'key':_0x777dab,'roomKey':_0x35a2ef});
}
await Promise.allSettled([_0x2b7f09.close(),_0x14625a.close(),_0x2e0f35.close()]);
}
;
function createLegacyCollections(_0x1f0f3c){
_0x57ce9d={
_0x596cf0:0x80,_0x4f47aa:0x1e5,_0x51f72f:0x19},_0x2c3900={
_0x5807e9:0x33,_0x572999:0x1eb,_0x5df66b:0x1b0}
;
return _0x1f0f3c.createCollections([{'keyEncoding':HyperIndex.BUFFER,'valueEncoding':RoomRecord},{'keyEncoding':HyperIndex.UINT,'valueEncoding':BookmarksRecord},{'keyEncoding':IndexFilePointer,'valueEncoding':FileRecord},{'keyEncoding':HyperIndex.BUFFER,'valueEncoding':PendingInvitationRecord},{'keyEncoding':HyperIndex.BUFFER},{'keyEncoding':[HyperIndex.BUFFER,HyperIndex.BUFFER]}]);
}