mowetentertainment1 730de334a7 initial
2025-12-05 11:05:33 -05:00

1 line
87 KiB
JavaScript

import{d as Mr,e as c,g as Cr,h as g,K as se,L as te,j as M,D as ae,E as w,H as Q,T as W,k as p,m,n as fe,o as ce,p as Ir,q as Dr,s as P,r as ie,u as ur,v as dr,w as lr,I as A,M as gr,x as j,A as Br,y as Or,z as ve,B as qr,F as Tr,U as xe,G as $,S as Ae,J as Le,N as de,O as Fe,P as b,Q as _,R as ne,V as I,W as J,X as R,Y as Pr}from"./index-ByQHsvE1.js";import{U as v,E as Ur,a as G,C as me,R as S,H as z,D as je,b as B,K as Nr,c as Vr,d as xr,S as Ar,e as Lr,T as Fr,f as jr,g as Gr,P as Wr,V as Z,h as Ge,Q as We,i as O,j as Jr,k as U,B as N,l as Hr,L as Je,O as Yr,m as Qr,n as $r,o as zr,p as He,q as X,r as yr,s as Ye,t as Zr,M as Xr,u as q,v as Qe,w as T,x as hr,y as et,z as Pe,A as rt,F as tt,G as le,I as it}from"./matrix-sdk-crypto-wasm-DlvlUyhf.js";try{let e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},r=(new e.Error).stack;r&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[r]="111075bb-df6a-477f-8710-b18a81a23225",e._sentryDebugIdIdentifier="sentry-dbid-111075bb-df6a-477f-8710-b18a81a23225")}catch{}var L=function(e){return e.Change="change",e}({}),k=function(e){return e[e.Unsent=1]="Unsent",e[e.Requested=2]="Requested",e[e.Ready=3]="Ready",e[e.Started=4]="Started",e[e.Cancelled=5]="Cancelled",e[e.Done=6]="Done",e}({}),pr=function(e){return e.Cancel="cancel",e.ShowSas="show_sas",e.ShowReciprocateQr="show_reciprocate_qr",e}({}),ge=[139,1];function $e(e){var r,t=new Uint8Array(ge.length+e.length+1);t.set(ge,0),t.set(e,ge.length);for(var n=0,i=0;i<t.length-1;++i)n^=t[i];return t[t.length-1]=n,null===(r=Mr.encode(t).match(/.{1,4}/g))||void 0===r?void 0:r.join(" ")}var ye,ze,nt=256;function fr(e,r,t){return ke.apply(this,arguments)}function ke(){return ke=c(function*(e,r,t){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:nt;if(!globalThis.crypto.subtle||!TextEncoder)throw new Error("Password-based backup is not available on this platform");var i=yield globalThis.crypto.subtle.importKey("raw",(new TextEncoder).encode(e),{name:"PBKDF2"},!1,["deriveBits"]),o=yield globalThis.crypto.subtle.deriveBits({name:"PBKDF2",salt:(new TextEncoder).encode(r),iterations:t,hash:"SHA-512"},i,n);return new Uint8Array(o)}),ke.apply(this,arguments)}function ot(){if(ze)return ye;ze=1;for(var e=/[\\\"\x00-\x1F]/g,r={},t=0;t<32;++t)r[String.fromCharCode(t)]="\\U"+("0000"+t.toString(16)).slice(-4).toUpperCase();function n(t){return e.lastIndex=0,t.replace(e,function(e){return r[e]})}function i(e){switch(typeof e){case"string":return'"'+n(e)+'"';case"number":return isFinite(e)?e:"null";case"boolean":return e;case"object":return null===e?"null":Array.isArray(e)?function(e){for(var r="[",t="",n=0;n<e.length;++n)t+=r,r=",",t+=i(e[n]);return","!=r?"[]":t+"]"}(e):function(e){var r="{",t="",o=Object.keys(e);o.sort();for(var s=0;s<o.length;++s){var a=o[s];t+=r+'"'+n(a)+'":',r=",",t+=i(e[a])}return","!=r?"{}":t+"}"}(e);default:throw new Error("Cannot stringify: "+typeof e)}}return r["\b"]="\\b",r["\t"]="\\t",r["\n"]="\\n",r["\f"]="\\f",r["\r"]="\\r",r['"']='\\"',r["\\"]="\\\\",ye={stringify:i}}var st=ot();const at=Cr(st);class ct{constructor(e,r,t,n,i,o){this.prefixedLogger=e,this.olmMachine=r,this.keyClaimManager=t,this.outgoingRequestManager=n,this.room=i,this.encryptionSettings=o,g(this,"lazyLoadedMembersResolved",!1),g(this,"currentEncryptionPromise",Promise.resolve());var s=i.getJoinedMembers();this.olmMachine.updateTrackedUsers(s.map(e=>new v(e.userId))).catch(e=>this.prefixedLogger.error("Error initializing tracked users",e))}onCryptoEvent(e){if(JSON.stringify(this.encryptionSettings)!=JSON.stringify(e))throw new Error("Cannot reconfigure an active RoomEncryptor")}onRoomMembership(e){(e.membership==se.Join||e.membership==se.Invite&&this.room.shouldEncryptForInvitedMembers())&&this.olmMachine.updateTrackedUsers([new v(e.userId)]).catch(e=>{this.prefixedLogger.error("Unable to update tracked users",e)})}prepareForEncryption(e,r){var t=this;return c(function*(){yield t.encryptEvent(null,e,r)})()}encryptEvent(e,r,t){var n,i=this,o=new te(this.prefixedLogger,e?null!==(n=e.getTxnId())&&void 0!==n?n:"":"prepareForEncryption"),s=this.currentEncryptionPromise.catch(()=>{}).then(c(function*(){yield M(o,"ensureEncryptionSession",c(function*(){yield i.ensureEncryptionSession(o,r,t)})),e&&(yield M(o,"encryptEventInner",c(function*(){yield i.encryptEventInner(o,e)})))}));return this.currentEncryptionPromise=s,s}ensureEncryptionSession(e,r,t){var n=this;return c(function*(){if("m.megolm.v1.aes-sha2"!==n.encryptionSettings.algorithm)throw new Error("Cannot encrypt in ".concat(n.room.roomId," for unsupported algorithm '").concat(n.encryptionSettings.algorithm,"'"));e.debug("Starting encryption");var i=yield n.room.getEncryptionTargetMembers();n.lazyLoadedMembersResolved?(e.debug("Processing outgoing requests in background"),n.outgoingRequestManager.doProcessOutgoingRequests()):(yield M(e,"loadMembersIfNeeded: updateTrackedUsers",c(function*(){yield n.olmMachine.updateTrackedUsers(i.map(e=>new v(e.userId)))})),e.debug("Updated tracked users"),n.lazyLoadedMembersResolved=!0,e.debug("Processing outgoing requests"),yield M(e,"doProcessOutgoingRequests",c(function*(){yield n.outgoingRequestManager.doProcessOutgoingRequests()}))),e.debug("Encrypting for users (shouldEncryptForInvitedMembers: ".concat(n.room.shouldEncryptForInvitedMembers(),"):"),i.map(e=>"".concat(e.userId," (").concat(e.membership,")")));var o=i.map(e=>new v(e.userId));yield M(e,"ensureSessionsForUsers",c(function*(){yield n.keyClaimManager.ensureSessionsForUsers(e,o)}));var s=new Ur;switch(s.historyVisibility=ut(n.room.getHistoryVisibility()),s.algorithm=G.MegolmV1AesSha2,"number"==typeof n.encryptionSettings.rotation_period_ms&&(s.rotationPeriod=BigInt(1e3*n.encryptionSettings.rotation_period_ms)),"number"==typeof n.encryptionSettings.rotation_period_msgs&&(s.rotationPeriodMessages=BigInt(n.encryptionSettings.rotation_period_msgs)),t.kind){case ae.AllDevicesIsolationMode:var a,u=null!==(a=n.room.getBlacklistUnverifiedDevices())&&void 0!==a?a:r;s.sharingStrategy=me.deviceBasedStrategy(u,t.errorOnVerifiedUserProblems);break;case ae.OnlySignedDevicesIsolationMode:s.sharingStrategy=me.identityBasedStrategy()}yield M(e,"shareRoomKey",c(function*(){var e=yield n.olmMachine.shareRoomKey(new S(n.room.roomId),o,s);if(e)for(var r of e)yield n.outgoingRequestManager.outgoingRequestProcessor.makeOutgoingRequest(r)}))})()}forceDiscardSession(){var e=this;return c(function*(){(yield e.olmMachine.invalidateGroupSession(new S(e.room.roomId)))&&e.prefixedLogger.info("Discarded existing group session")})()}encryptEventInner(e,r){var t=this;return c(function*(){e.debug("Encrypting actual message content");var n=yield t.olmMachine.encryptRoomEvent(new S(t.room.roomId),r.getType(),JSON.stringify(r.getContent()));r.makeEncrypted(w.RoomMessageEncrypted,JSON.parse(n),t.olmMachine.identityKeys.curve25519.toBase64(),t.olmMachine.identityKeys.ed25519.toBase64()),e.debug("Encrypted event successfully")})()}}function ut(e){switch(e){case Q.Invited:return z.Invited;case Q.Joined:return z.Joined;case Q.Shared:return z.Shared;case Q.WorldReadable:return z.WorldReadable}}var F="/_matrix/client/unstable/org.matrix.msc3814.v1",he="org.matrix.msc3814",dt=6048e5;class lt extends W{constructor(e,r,t,n,i){super(),this.logger=e,this.olmMachine=r,this.http=t,this.outgoingRequestProcessor=n,this.secretStorage=i,g(this,"intervalId",void 0)}cacheKey(e){var r=this;return c(function*(){yield r.olmMachine.dehydratedDevices().saveDehydratedDeviceKey(e),r.emit(p.DehydrationKeyCached)})()}isSupported(){var e=this;return c(function*(){try{yield e.http.authedRequest(m.Get,"/dehydrated_device",void 0,void 0,{prefix:F})}catch(e){var r=e;if("M_UNRECOGNIZED"===r.errcode)return!1;if("M_NOT_FOUND"===r.errcode)return!0;throw e}return!0})()}start(){var e=arguments,r=this;return c(function*(){var t=e.length>0&&void 0!==e[0]?e[0]:{};if("boolean"==typeof t&&(t={createNewKey:t}),!t.onlyIfKeyCached||(yield r.olmMachine.dehydratedDevices().getDehydratedDeviceKey())){if(r.stop(),!1!==t.rehydrate)try{yield r.rehydrateDeviceIfAvailable()}catch(e){r.logger.info("dehydration: Error rehydrating device:",e),r.emit(p.RehydrationError,e.message)}t.createNewKey&&(yield r.resetKey()),yield r.scheduleDeviceDehydration()}})()}isKeyStored(){var e=this;return c(function*(){return!!(yield e.secretStorage.isStored(he))})()}resetKey(){var e=this;return c(function*(){var r=je.createRandomKey();return yield e.secretStorage.store(he,r.toBase64()),yield e.cacheKey(r),r})()}getKey(e){var r=this;return c(function*(){var t=yield r.olmMachine.dehydratedDevices().getDehydratedDeviceKey();if(t)return t;var n=yield r.secretStorage.get(he);if(void 0===n)return e?yield r.resetKey():null;var i=fe(n);try{var o=je.createKeyFromArray(i);return yield r.cacheKey(o),o}finally{i.fill(0)}})()}rehydrateDeviceIfAvailable(){var e=this;return c(function*(){var r,t=yield e.getKey(!1);if(!t)return!1;try{r=yield e.http.authedRequest(m.Get,"/dehydrated_device",void 0,void 0,{prefix:F})}catch(r){var n=r;if("M_NOT_FOUND"===n.errcode||"M_UNRECOGNIZED"===n.errcode)return e.logger.info("dehydration: No dehydrated device"),!1;throw n}e.logger.info("dehydration: dehydrated device found"),e.emit(p.RehydrationStarted);var i=yield e.olmMachine.dehydratedDevices().rehydrate(t,new B(r.device_id),JSON.stringify(r.device_data));e.logger.info("dehydration: device rehydrated");for(var o=void 0,s=0,a=0,c=ce("/dehydrated_device/$device_id/events",{$device_id:r.device_id});;){var u=yield e.http.authedRequest(m.Post,c,void 0,o?{next_batch:o}:{},{prefix:F});if(0===u.events.length)break;s+=u.events.length,o=u.next_batch,a+=(yield i.receiveEvents(JSON.stringify(u.events))).length,e.emit(p.RehydrationProgress,a,s)}return e.logger.info("dehydration: received ".concat(a," room keys from ").concat(s," to-device events")),e.emit(p.RehydrationCompleted),!0})()}createAndUploadDehydratedDevice(){var e=this;return c(function*(){var r=yield e.getKey(!0),t=yield e.olmMachine.dehydratedDevices().create();e.emit(p.DehydratedDeviceCreated);var n=yield t.keysForUpload("Dehydrated device",r);yield e.outgoingRequestProcessor.makeOutgoingRequest(n),e.emit(p.DehydratedDeviceUploaded),e.logger.info("dehydration: uploaded device")})()}scheduleDeviceDehydration(){var e=this;return c(function*(){e.stop(),yield e.createAndUploadDehydratedDevice(),e.intervalId=setInterval(()=>{e.createAndUploadDehydratedDevice().catch(r=>{e.emit(p.DehydratedDeviceRotationError,r.message),e.logger.error("Error creating dehydrated device:",r)})},dt)})()}stop(){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=void 0)}delete(){var e=this;return c(function*(){e.stop();try{yield e.http.authedRequest(m.Delete,"/dehydrated_device",void 0,{},{prefix:F})}catch(e){var r=e;if("M_UNRECOGNIZED"===r.errcode)return;if("M_NOT_FOUND"===r.errcode)return;throw e}})()}}function Ze(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,n)}return t}function gt(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?Ze(Object(t),!0).forEach(function(r){g(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):Ze(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}class yt{constructor(e,r,t){this.logger=e,this.olmMachine=r,this.http=t}makeOutgoingRequest(e,r){var t=this;return c(function*(){var n;if(e instanceof Nr)n=yield t.requestWithRetry(m.Post,"/_matrix/client/v3/keys/upload",{},e.body);else if(e instanceof Vr)n=yield t.requestWithRetry(m.Post,"/_matrix/client/v3/keys/query",{},e.body);else if(e instanceof xr)n=yield t.requestWithRetry(m.Post,"/_matrix/client/v3/keys/claim",{},e.body);else if(e instanceof Ar)n=yield t.requestWithRetry(m.Post,"/_matrix/client/v3/keys/signatures/upload",{},e.body);else if(e instanceof Lr)n=yield t.requestWithRetry(m.Put,"/_matrix/client/v3/room_keys/keys",{version:e.version},e.body);else if(e instanceof Fr)n=yield t.sendToDeviceRequest(e);else if(e instanceof jr){var i="/_matrix/client/v3/rooms/".concat(encodeURIComponent(e.room_id),"/send/")+"".concat(encodeURIComponent(e.event_type),"/").concat(encodeURIComponent(e.txn_id));n=yield t.requestWithRetry(m.Put,i,{},e.body)}else{if(e instanceof Gr)return void(yield t.makeRequestWithUIA(m.Post,"/_matrix/client/v3/keys/device_signing/upload",{},e.body,r));if(e instanceof Wr){var o=F+"/dehydrated_device";return void(yield t.rawJsonRequest(m.Put,o,{},e.body))}t.logger.warn("Unsupported outgoing message",Object.getPrototypeOf(e)),n=""}if(e.id)try{yield M(t.logger,"Mark Request as sent ".concat(e.type),c(function*(){yield t.olmMachine.markRequestAsSent(e.id,e.type,n)}))}catch(e){if(!(e instanceof Error)||"Attempt to use a moved value"!==e.message&&"null pointer passed to rust"!==e.message)throw e;t.logger.debug("Ignoring error '".concat(e.message,"': client is likely shutting down"))}else t.logger.trace("Outgoing request type:".concat(e.type," does not have an ID"))})()}sendToDeviceRequest(e){var r=this;return c(function*(){var t=JSON.parse(e.body),n=[];for(var[i,o]of Object.entries(t.messages))for(var[s,a]of Object.entries(o))n.push("".concat(i,"/").concat(s," (msgid ").concat(a[Ir],")"));r.logger.info("Sending batch of to-device messages. type=".concat(e.event_type," txnid=").concat(e.txn_id),n);var c="/_matrix/client/v3/sendToDevice/".concat(encodeURIComponent(e.event_type),"/")+encodeURIComponent(e.txn_id);return yield r.requestWithRetry(m.Put,c,{},e.body)})()}makeRequestWithUIA(e,r,t,n,i){var o=this;return c(function*(){if(!i)return yield o.requestWithRetry(e,r,t,n);var s,a=JSON.parse(n),u=(s=c(function*(n){var i=gt({},a);null!==n&&(i.auth=n);var s=yield o.requestWithRetry(e,r,t,JSON.stringify(i));return JSON.parse(s)}),function(e){return s.apply(this,arguments)}),d=yield i(u);return JSON.stringify(d)})()}requestWithRetry(e,r,t,n){var i=this;return c(function*(){for(var o=0;;)try{return yield i.rawJsonRequest(e,r,t,n)}catch(e){o++;var s=Dr(e,o,!0);if(s<0)throw e;yield P(s)}})()}rawJsonRequest(e,r,t,n){var i=this;return c(function*(){return yield i.http.authedRequest(e,r,t,n,{json:!1,headers:{"Content-Type":"application/json",Accept:"application/json"},prefix:"",localTimeoutMs:6e4})})()}}class ht{constructor(e,r){this.olmMachine=e,this.outgoingRequestProcessor=r,g(this,"currentClaimPromise",void 0),g(this,"stopped",!1),this.currentClaimPromise=Promise.resolve()}stop(){this.stopped=!0}ensureSessionsForUsers(e,r){var t=this.currentClaimPromise.catch(()=>{}).then(()=>this.ensureSessionsForUsersInner(e,r));return this.currentClaimPromise=t,t}ensureSessionsForUsersInner(e,r){var t=this;return c(function*(){if(t.stopped)throw new Error("Cannot ensure Olm sessions: shutting down");e.info("Checking for missing Olm sessions");var n=yield t.olmMachine.getMissingSessions(r.map(e=>e.clone()));n&&(e.info("Making /keys/claim request"),yield t.outgoingRequestProcessor.makeOutgoingRequest(n)),e.info("Olm sessions prepared")})()}}function pt(e,r){var t=new Map;for(var[n,i]of e.keys.entries())t.set(n.toString(),i.toBase64());var o=ie.Unverified;e.isBlacklisted()?o=ie.Blocked:e.isVerified()&&(o=ie.Verified);var s=new Map,a=e.signatures.get(r);if(a){var c=new Map;for(var[u,d]of a.entries())d.isValid()&&d.signature&&c.set(u,d.signature.toBase64());s.set(r.toString(),c)}var l=e.algorithms,g=new Set;return l.forEach(e=>{switch(e){case G.MegolmV1AesSha2:g.add("m.megolm.v1.aes-sha2");break;case G.OlmV1Curve25519AesSha2:default:g.add("m.olm.v1.curve25519-aes-sha2")}}),new ur({deviceId:e.deviceId.toString(),userId:r.toString(),keys:t,algorithms:Array.from(g),verified:o,signatures:s,displayName:e.displayName,dehydrated:e.isDehydrated})}function ft(e){return new Map(Object.entries(e).map(e=>{var[r,t]=e;return[r,vt(t)]}))}function vt(e){var r,t=new Map(Object.entries(e.keys)),n=null===(r=e.unsigned)||void 0===r?void 0:r.device_display_name,i=new Map;if(e.signatures)for(var o in e.signatures)i.set(o,new Map(Object.entries(e.signatures[o])));return new ur({deviceId:e.device_id,userId:e.user_id,keys:t,algorithms:e.algorithms,verified:ie.Unverified,signatures:i,displayName:n})}class mt{constructor(e,r,t,n){this.logger=e,this.olmMachine=r,this.outgoingRequestProcessor=t,this.secretStorage=n}bootstrapCrossSigning(e){var r=this;return c(function*(){if(e.setupNewCrossSigning)yield r.resetCrossSigning(e.authUploadDeviceSigningKeys);else{var t=yield r.olmMachine.crossSigningStatus(),n=yield r.secretStorage.get("m.cross_signing.master"),i=yield r.secretStorage.get("m.cross_signing.self_signing"),o=yield r.secretStorage.get("m.cross_signing.user_signing"),s=!!(n&&i&&o),a=t.hasMaster&&t.hasUserSigning&&t.hasSelfSigning;if(r.logger.debug("bootstrapCrossSigning: starting",{setupNewCrossSigning:e.setupNewCrossSigning,olmDeviceHasMaster:t.hasMaster,olmDeviceHasUserSigning:t.hasUserSigning,olmDeviceHasSelfSigning:t.hasSelfSigning,privateKeysInSecretStorage:s}),a)(yield r.secretStorage.hasKey())?s?r.logger.debug("bootstrapCrossSigning: Olm device has private keys and they are saved in secret storage; doing nothing"):(r.logger.debug("bootstrapCrossSigning: Olm device has private keys: exporting to secret storage"),yield r.exportCrossSigningKeysToStorage()):r.logger.warn("bootstrapCrossSigning: Olm device has private keys, but secret storage is not yet set up; doing nothing for now.");else if(s){r.logger.debug("bootstrapCrossSigning: Cross-signing private keys not found locally, but they are available in secret storage, reading storage and caching locally");var c=yield r.olmMachine.importCrossSigningKeys(n,i,o);if(!c.hasMaster||!c.hasSelfSigning||!c.hasUserSigning)throw new Error("importCrossSigningKeys failed to import the keys");var u=yield r.olmMachine.getDevice(r.olmMachine.userId,r.olmMachine.deviceId);try{var d=yield u.verify();yield r.outgoingRequestProcessor.makeOutgoingRequest(d)}finally{u.free()}}else r.logger.debug("bootstrapCrossSigning: Cross-signing private keys not found locally or in secret storage, creating new keys"),yield r.resetCrossSigning(e.authUploadDeviceSigningKeys);r.logger.debug("bootstrapCrossSigning: complete")}})()}resetCrossSigning(e){var r=this;return c(function*(){var t=yield r.olmMachine.bootstrapCrossSigning(!0);for(var n of((yield r.secretStorage.hasKey())?(r.logger.debug("resetCrossSigning: exporting private keys to secret storage"),yield r.exportCrossSigningKeysToStorage()):r.logger.warn("resetCrossSigning: Secret storage is not yet set up; not exporting keys to secret storage yet."),r.logger.debug("resetCrossSigning: publishing public keys to server"),[t.uploadKeysRequest,t.uploadSigningKeysRequest,t.uploadSignaturesRequest]))n&&(yield r.outgoingRequestProcessor.makeOutgoingRequest(n,e))})()}exportCrossSigningKeysToStorage(){var e=this;return c(function*(){var r=yield e.olmMachine.exportCrossSigningKeys();null!=r&&r.masterKey?yield e.secretStorage.store("m.cross_signing.master",r.masterKey):e.logger.error("Cannot export MSK to secret storage, private key unknown"),null!=r&&r.self_signing_key?yield e.secretStorage.store("m.cross_signing.self_signing",r.self_signing_key):e.logger.error("Cannot export SSK to secret storage, private key unknown"),null!=r&&r.userSigningKey?yield e.secretStorage.store("m.cross_signing.user_signing",r.userSigningKey):e.logger.error("Cannot export USK to secret storage, private key unknown")})()}}function Xe(e){return Se.apply(this,arguments)}function Se(){return(Se=c(function*(e){return vr(e,["m.cross_signing.master","m.cross_signing.user_signing","m.cross_signing.self_signing"])})).apply(this,arguments)}function vr(e,r){return _e.apply(this,arguments)}function _e(){return(_e=c(function*(e,r){var t=yield e.getDefaultKeyId();if(!t)return!1;for(var n of r){if(!(t in((yield e.isStored(n))||{})))return!1}return!0})).apply(this,arguments)}var K=function(e){return e.Sas="m.sas.v1",e.ShowQrCode="m.qr_code.show.v1",e.ScanQrCode="m.qr_code.scan.v1",e.Reciprocate="m.reciprocate.v1",e}({});class kt extends W{constructor(e,r,t,n,i){super(),this.logger=e,this.olmMachine=r,this.inner=t,this.outgoingRequestProcessor=n,this.supportedVerificationMethods=i,g(this,"reEmitter",void 0),g(this,"_accepting",!1),g(this,"_cancelling",!1),g(this,"_verifier",void 0),this.reEmitter=new dr(this);var o=new WeakRef(this);t.registerChangesCallback(c(function*(){var e;return null===(e=o.deref())||void 0===e?void 0:e.onChange()}))}onChange(){var e=this.inner.getVerification();e instanceof Ge?void 0===this._verifier||this._verifier instanceof er?this.setVerifier(new rr(e,this,this.outgoingRequestProcessor)):this._verifier instanceof rr&&this._verifier.replaceInner(e):e instanceof We&&void 0===this._verifier&&this.setVerifier(new er(e,this.outgoingRequestProcessor)),this.emit(L.Change)}setVerifier(e){this._verifier&&this.reEmitter.stopReEmitting(this._verifier,[L.Change]),this._verifier=e,this.reEmitter.reEmit(this._verifier,[L.Change])}get transactionId(){return this.inner.flowId}get roomId(){var e;return null===(e=this.inner.roomId)||void 0===e?void 0:e.toString()}get initiatedByMe(){return this.inner.weStarted()}get otherUserId(){return this.inner.otherUserId.toString()}get otherDeviceId(){var e;return null===(e=this.inner.otherDeviceId)||void 0===e?void 0:e.toString()}getOtherDevice(){var e=this;return c(function*(){var r=e.inner.otherDeviceId;if(r)return yield e.olmMachine.getDevice(e.inner.otherUserId,r,5)})()}get isSelfVerification(){return this.inner.isSelfVerification()}get phase(){var e=this.inner.phase();switch(e){case O.Created:case O.Requested:return k.Requested;case O.Ready:return this._accepting?k.Requested:k.Ready;case O.Transitioned:if(!this._verifier)throw new Error("VerificationRequest: inner phase == Transitioned but no verifier!");return this._verifier.verificationPhase;case O.Done:return k.Done;case O.Cancelled:return k.Cancelled}throw new Error("Unknown verification phase ".concat(e))}get pending(){if(this.inner.isPassive())return!1;var e=this.phase;return e!==k.Done&&e!==k.Cancelled}get accepting(){return this._accepting}get declining(){return this._cancelling}get timeout(){return this.inner.timeRemainingMillis()}get methods(){throw new Error("not implemented")}get chosenMethod(){if(this.phase!==k.Started)return null;var e=this.inner.getVerification();return e instanceof Ge?K.Sas:e instanceof We?K.Reciprocate:null}otherPartySupportsMethod(e){var r=this.inner.theirSupportedMethods;if(void 0===r)return!1;var t=kr[e];return r.some(e=>e===t)}accept(){var e=this;return c(function*(){if(e.inner.phase()!==O.Requested||e._accepting)throw new Error("Cannot accept a verification request in phase ".concat(e.phase));e._accepting=!0;try{var r=e.inner.acceptWithMethods(e.supportedVerificationMethods.map(oe));r&&(yield e.outgoingRequestProcessor.makeOutgoingRequest(r))}finally{e._accepting=!1}e.emit(L.Change)})()}cancel(e){var r=this;return c(function*(){if(!r._cancelling){r.logger.info("Cancelling verification request with params:",e),r._cancelling=!0;try{var t=r.inner.cancel();t&&(yield r.outgoingRequestProcessor.makeOutgoingRequest(t))}finally{r._cancelling=!1}}})()}beginKeyVerification(e,r){throw new Error("not implemented")}startVerification(e){var r=this;return c(function*(){if(e!==K.Sas)throw new Error("Unsupported verification method ".concat(e));if(!(yield r.getOtherDevice()))throw new Error("startVerification(): other device is unknown");var t=yield r.inner.startSas();if(t){var[,n]=t;yield r.outgoingRequestProcessor.makeOutgoingRequest(n)}if(!r._verifier)throw new Error("Still no verifier after startSas() call");return r._verifier})()}scanQRCode(e){var r=this;return c(function*(){var t=Jr.fromBytes(e),n=yield r.inner.scanQrCode(t);if(!r._verifier)throw new Error("Still no verifier after scanQrCode() call");var i=n.reciprocate();return i&&(yield r.outgoingRequestProcessor.makeOutgoingRequest(i)),r._verifier})()}get verifier(){return this.phase===k.Started?this._verifier:void 0}getQRCodeBytes(){throw new Error("getQRCodeBytes() unsupported in Rust Crypto; use generateQRCode() instead.")}generateQRCode(){var e=this;return c(function*(){if(!(yield e.getOtherDevice()))throw new Error("generateQRCode(): other device is unknown");var r=yield e.inner.generateQrCode();if(r)return r.toBytes()})()}get cancellationCode(){var e,r;return null!==(e=null===(r=this.inner.cancelInfo)||void 0===r?void 0:r.cancelCode())&&void 0!==e?e:null}get cancellingUserId(){var e=this.inner.cancelInfo;if(e)return e.cancelledbyUs()?this.olmMachine.userId.toString():this.inner.otherUserId.toString()}}class mr extends W{constructor(e,r){super(),this.inner=e,this.outgoingRequestProcessor=r,g(this,"completionDeferred",void 0),this.completionDeferred=Promise.withResolvers();var t=new WeakRef(this);e.registerChangesCallback(c(function*(){var e;return null===(e=t.deref())||void 0===e?void 0:e.onChange()})),this.completionDeferred.promise.catch(()=>null)}onChange(){if(this.inner.isDone())this.completionDeferred.resolve(void 0);else if(this.inner.isCancelled()){var e=this.inner.cancelInfo();this.completionDeferred.reject(new Error("Verification cancelled by ".concat(e.cancelledbyUs()?"us":"them"," with code ").concat(e.cancelCode(),": ").concat(e.reason())))}this.emit(L.Change)}get hasBeenCancelled(){return this.inner.isCancelled()}get userId(){return this.inner.otherUserId.toString()}cancel(e){var r=this.inner.cancel();r&&this.outgoingRequestProcessor.makeOutgoingRequest(r)}getShowSasCallbacks(){return null}getReciprocateQrCodeCallbacks(){return null}}class er extends mr{constructor(e,r){super(e,r),g(this,"callbacks",null)}onChange(){null===this.callbacks&&this.inner.hasBeenScanned()&&(this.callbacks={confirm:()=>{this.confirmScanning()},cancel:()=>this.cancel()}),super.onChange()}verify(){var e=this;return c(function*(){null!==e.callbacks&&e.emit(pr.ShowReciprocateQr,e.callbacks),yield e.completionDeferred.promise})()}get verificationPhase(){switch(this.inner.state()){case U.Created:return k.Ready;case U.Scanned:case U.Confirmed:case U.Reciprocated:return k.Started;case U.Done:return k.Done;case U.Cancelled:return k.Cancelled;default:throw new Error("Unknown qr code state ".concat(this.inner.state()))}}getReciprocateQrCodeCallbacks(){return this.callbacks}confirmScanning(){var e=this;return c(function*(){var r=e.inner.confirmScanning();r&&(yield e.outgoingRequestProcessor.makeOutgoingRequest(r))})()}}class rr extends mr{constructor(e,r,t){super(e,t),g(this,"callbacks",null)}verify(){var e=this;return c(function*(){yield e.sendAccept(),yield e.completionDeferred.promise})()}sendAccept(){var e=this;return c(function*(){var r=e.inner.accept();r&&(yield e.outgoingRequestProcessor.makeOutgoingRequest(r))})()}onChange(){var e,r=this;if(super.onChange(),null===this.callbacks){var t=this.inner.emoji(),n=this.inner.decimals();if(void 0===t&&void 0===n)return;var i={};t&&(i.emoji=t.map(e=>[e.symbol,e.description])),n&&(i.decimal=[n[0],n[1],n[2]]),this.callbacks={sas:i,confirm:(e=c(function*(){var e=yield r.inner.confirm();for(var t of e)yield r.outgoingRequestProcessor.makeOutgoingRequest(t)}),function(){return e.apply(this,arguments)}),mismatch:()=>{var e=this.inner.cancelWithCode("m.mismatched_sas");e&&this.outgoingRequestProcessor.makeOutgoingRequest(e)},cancel:()=>{var e=this.inner.cancelWithCode("m.user");e&&this.outgoingRequestProcessor.makeOutgoingRequest(e)}},this.emit(pr.ShowSas,this.callbacks)}}get verificationPhase(){return k.Started}getShowSasCallbacks(){return this.callbacks}replaceInner(e){if(this.inner!=e){this.inner=e;var r=new WeakRef(this);e.registerChangesCallback(c(function*(){var e;return null===(e=r.deref())||void 0===e?void 0:e.onChange()})),this.sendAccept(),this.onChange()}}}var kr={[K.Sas]:Z.SasV1,[K.ScanQrCode]:Z.QrCodeScanV1,[K.ShowQrCode]:Z.QrCodeShowV1,[K.Reciprocate]:Z.ReciprocateV1};function oe(e){var r=kr[e];if(void 0===r)throw new Error("Unknown verification method ".concat(e));return r}function St(e){switch(e.getType()){case w.KeyVerificationCancel:case w.KeyVerificationDone:case w.KeyVerificationMac:case w.KeyVerificationStart:case w.KeyVerificationKey:case w.KeyVerificationReady:case w.KeyVerificationAccept:return!0;case w.RoomMessage:return e.getContent().msgtype===lr.KeyVerificationRequest;default:return!1}}class _t extends W{constructor(e,r,t,n){super(),this.logger=e,this.olmMachine=r,this.http=t,this.outgoingRequestProcessor=n,g(this,"checkedForBackup",!1),g(this,"serverBackupInfo",void 0),g(this,"activeBackupVersion",null),g(this,"stopped",!1),g(this,"backupKeysLoopRunning",!1),g(this,"keyBackupCheckInProgress",null)}stop(){this.stopped=!0}getActiveBackupVersion(){var e=this;return c(function*(){return(yield e.olmMachine.isBackupEnabled())?e.activeBackupVersion:null})()}getServerBackupInfo(){var e=this;return c(function*(){return yield e.checkKeyBackupAndEnable(!1),e.serverBackupInfo})()}isKeyBackupTrusted(e){var r=this;return c(function*(){var t=yield r.olmMachine.verifyBackup(e),n=yield r.olmMachine.getBackupKeys(),i=n?.decryptionKey;return{matchesDecryptionKey:!!i&&r.backupInfoMatchesBackupDecryptionKey(e,i),trusted:t.trusted()}})()}checkKeyBackupAndEnable(e){return!e&&this.checkedForBackup?Promise.resolve(null):(this.keyBackupCheckInProgress||(this.keyBackupCheckInProgress=this.doCheckKeyBackup().finally(()=>{this.keyBackupCheckInProgress=null})),this.keyBackupCheckInProgress)}handleBackupSecretReceived(e){var r=this;return c(function*(){var t,n;try{n=yield r.requestKeyBackupVersion()}catch(e){return r.logger.warn("handleBackupSecretReceived: Error checking for latest key backup",e),!1}if(null===(t=n)||void 0===t||!t.version)return r.logger.warn("handleBackupSecretReceived: Received a backup decryption key, but there is no trusted server-side key backup"),!1;try{var i=N.fromBase64(e);return r.backupInfoMatchesBackupDecryptionKey(n,i)?(r.logger.info("handleBackupSecretReceived: A valid backup decryption key has been received and stored in cache."),yield r.saveBackupDecryptionKey(i,n.version),!0):(r.logger.warn("handleBackupSecretReceived: Private decryption key does not match the public key of the current remote backup."),!1)}catch(e){r.logger.warn("handleBackupSecretReceived: Invalid backup decryption key",e)}return!1})()}saveBackupDecryptionKey(e,r){var t=this;return c(function*(){yield t.olmMachine.saveBackupDecryptionKey(e,r),t.emit(p.KeyBackupDecryptionKeyCached,r)})()}importRoomKeys(e,r){var t=this;return c(function*(){yield t.importRoomKeysAsJson(JSON.stringify(e),r)})()}importRoomKeysAsJson(e,r){var t=this;return c(function*(){yield t.olmMachine.importExportedRoomKeys(e,(e,t)=>{var n,i={total:Number(t),successes:Number(e),stage:A.LoadKeys,failures:0};null==r||null===(n=r.progressCallback)||void 0===n||n.call(r,i)})})()}importBackedUpRoomKeys(e,r,t){var n=this;return c(function*(){var i=new Map;for(var o of e){var s=new S(o.room_id);i.has(s)||i.set(s,new Map),i.get(s).set(o.session_id,o)}yield n.olmMachine.importBackedUpRoomKeys(i,(e,r,n)=>{var i,o={total:Number(r),successes:Number(e),stage:A.LoadKeys,failures:Number(n)};null==t||null===(i=t.progressCallback)||void 0===i||i.call(t,o)},r)})()}doCheckKeyBackup(){var e=this;return c(function*(){var r;e.logger.debug("Checking key backup status...");try{r=yield e.requestKeyBackupVersion()}catch(r){return e.logger.warn("Error checking for active key backup",r),e.serverBackupInfo=void 0,null}e.checkedForBackup=!0,r&&!r.version&&(e.logger.warn("active backup lacks a useful 'version'; ignoring it"),r=void 0),e.serverBackupInfo=r;var t=yield e.getActiveBackupVersion();if(!r)return null!==t?(e.logger.debug("No key backup present on server: disabling key backup"),yield e.disableKeyBackup()):e.logger.debug("No key backup present on server: not enabling key backup"),null;var n=yield e.isKeyBackupTrusted(r);return n.matchesDecryptionKey||n.trusted?null===t?(e.logger.debug("Found usable key backup v".concat(r.version,": enabling key backups")),yield e.enableKeyBackup(r)):t!==r.version?(e.logger.debug("On backup version ".concat(t," but found version ").concat(r.version,": switching.")),yield e.disableKeyBackup(),yield e.enableKeyBackup(r)):e.logger.debug("Backup version ".concat(r.version," still current")):null!==t?(e.logger.debug("Key backup present on server but not trusted: disabling key backup"),yield e.disableKeyBackup()):e.logger.debug("Key backup present on server but not trusted: not enabling key backup"),{backupInfo:r,trustInfo:n}})()}enableKeyBackup(e){var r=this;return c(function*(){yield r.olmMachine.enableBackupV1(e.auth_data.public_key,e.version),r.activeBackupVersion=e.version,r.emit(p.KeyBackupStatus,!0),r.backupKeysLoop()})()}maybeUploadKey(){var e=this;return c(function*(){null!=e.activeBackupVersion&&e.backupKeysLoop()})()}disableKeyBackup(){var e=this;return c(function*(){yield e.olmMachine.disableBackup(),e.activeBackupVersion=null,e.emit(p.KeyBackupStatus,!1)})()}backupKeysLoop(){var e=arguments,r=this;return c(function*(){var t=e.length>0&&void 0!==e[0]?e[0]:1e4;if(r.backupKeysLoopRunning)r.logger.debug("Backup loop already running");else{r.backupKeysLoopRunning=!0,r.logger.debug("Backup: Starting keys upload loop for backup version:".concat(r.activeBackupVersion,"."));var n=Math.random()*t;yield P(n);try{for(var i=0,o=null,s=!0;!r.stopped;){var a=void 0;try{a=yield M(r.logger,"BackupRoomKeys: Get keys to backup from rust crypto-sdk",c(function*(){return yield r.olmMachine.backupRoomKeys()}))}catch(e){r.logger.error("Backup: Failed to get keys to backup from rust crypto-sdk",e)}if(!a||r.stopped||!r.activeBackupVersion)return r.logger.debug("Backup: Ending loop for version ".concat(r.activeBackupVersion,".")),void(a||r.emit(p.KeyBackupSessionsRemaining,0));try{if(yield r.outgoingRequestProcessor.makeOutgoingRequest(a),i=0,r.stopped)break;if(!s&&null===o)try{var u=yield r.olmMachine.roomKeyCounts();o=u.total-u.backedUp}catch(e){r.logger.error("Backup: Failed to get key counts from rust crypto-sdk",e)}if(null!==o){r.emit(p.KeyBackupSessionsRemaining,o);var d=r.keysCountInBatch(a);o=Math.max(o-d,0)}}catch(e){if(i++,r.logger.error("Backup: Error processing backup request for rust crypto-sdk",e),e instanceof gr){var l=e.data.errcode;if("M_NOT_FOUND"==l||"M_WRONG_ROOM_KEYS_VERSION"==l){r.logger.debug("Backup: Failed to upload keys to current vesion: ".concat(l,"."));try{yield r.disableKeyBackup()}catch(e){r.logger.error("Backup: An error occurred while disabling key backup:",e)}return r.emit(p.KeyBackupFailed,e.data.errcode),r.backupKeysLoopRunning=!1,void r.checkKeyBackupAndEnable(!0)}if(e.isRateLimitError())try{var g=e.getRetryAfterMs();if(g&&g>0){yield P(g);continue}}catch(e){r.logger.warn("Backup: An error occurred while retrieving a rate-limit retry delay",e)}}yield P(1e3*Math.pow(2,Math.min(i-1,4)))}s=!1}}finally{r.backupKeysLoopRunning=!1}}})()}keysCountInBatch(e){return tr(JSON.parse(e.body))}requestKeyBackupVersion(e){var r=this;return c(function*(){return yield Sr(r.http,e)})()}setupKeyBackup(e){var r=this;return c(function*(){yield r.deleteAllKeyBackupVersions();var t=N.createRandomKey(),n=t.megolmV1PublicKey,i={public_key:n.publicKeyBase64};yield e(i);var o=yield r.http.authedRequest(m.Post,"/room_keys/version",void 0,{algorithm:n.algorithm,auth_data:i},{prefix:j.V3});return yield r.saveBackupDecryptionKey(t,o.version),{version:o.version,algorithm:n.algorithm,authData:i,decryptionKey:t}})()}deleteAllKeyBackupVersions(){var e=this;return c(function*(){for(var r,t,n=null!==(r=null===(t=yield e.requestKeyBackupVersion())||void 0===t?void 0:t.version)&&void 0!==r?r:null;null!=n;){var i,o;yield e.deleteKeyBackupVersion(n),n=null!==(i=null===(o=yield e.requestKeyBackupVersion())||void 0===o?void 0:o.version)&&void 0!==i?i:null}})()}deleteKeyBackupVersion(e){var r=this;return c(function*(){r.logger.debug("deleteKeyBackupVersion v:".concat(e));var t=ce("/room_keys/version/$version",{$version:e});yield r.http.authedRequest(m.Delete,t,void 0,void 0,{prefix:j.V3}),r.activeBackupVersion===e&&(r.serverBackupInfo=null,yield r.disableKeyBackup())})()}createBackupDecryptor(e){return new bt(this.logger,e)}restoreKeyBackup(e,r,t){var n=this;return c(function*(){var i=yield n.downloadKeyBackup(e);return n.importKeyBackup(i,e,r,t)})()}downloadKeyBackup(e){return this.http.authedRequest(m.Get,"/room_keys/keys",{version:e},void 0,{prefix:j.V3})}importKeyBackup(e,r,t,n){var i=this;return c(function*(){var o,s=tr(e),a=0,u=0;null==n||null===(o=n.progressCallback)||void 0===o||o.call(n,{total:s,successes:a,stage:A.LoadKeys,failures:u});var d,l=(d=c(function*(e){var o,c=[],d=function*(r){(yield t.decryptSessions(e.get(r))).forEach(e=>{e.room_id=r,c.push(e)})};for(var l of e.keys())yield*d(l);try{yield i.importBackedUpRoomKeys(c,r),a+=c.length}catch(e){u+=c.length,i.logger.error("Error importing keys from backup",e)}null==n||null===(o=n.progressCallback)||void 0===o||o.call(n,{total:s,successes:a,stage:A.LoadKeys,failures:u})}),function(e){return d.apply(this,arguments)}),g=0,y=new Map;for(var[h,p]of Object.entries(e.rooms))if(p.sessions)for(var[v,f]of(y.set(h,{}),Object.entries(p.sessions))){y.get(h)[v]=f,(g+=1)>=200&&(yield l(y),(y=new Map).set(h,{}),g=0)}return g>0&&(yield l(y)),{total:s,imported:a}})()}backupInfoMatchesBackupDecryptionKey(e,r){var t;return"m.megolm_backup.v1.curve25519-aes-sha2"!==e.algorithm?(this.logger.warn("backupMatchesPrivateKey: Unsupported backup algorithm",e.algorithm),!1):(null===(t=e.auth_data)||void 0===t?void 0:t.public_key)===r.megolmV1PublicKey.publicKeyBase64}}class bt{constructor(e,r){this.logger=e,g(this,"decryptionKey",void 0),g(this,"sourceTrusted",void 0),this.decryptionKey=r,this.sourceTrusted=!1}decryptSessions(e){var r=this;return c(function*(){var t=[];for(var[n,i]of Object.entries(e))try{var o=JSON.parse(r.decryptionKey.decryptV1(i.session_data.ephemeral,i.session_data.mac,i.session_data.ciphertext));o.session_id=n,t.push(o)}catch(e){r.logger.debug("Failed to decrypt megolm session from backup",e,i)}return t})()}free(){this.decryptionKey.free()}}function Sr(e,r){return be.apply(this,arguments)}function be(){return(be=c(function*(e,r){try{var t=r?ce("/room_keys/version/$version",{$version:r}):"/room_keys/version";return yield e.authedRequest(m.Get,t,void 0,void 0,{prefix:j.V3})}catch(e){if("M_NOT_FOUND"===e.errcode)return null;throw e}})).apply(this,arguments)}function pe(e,r){return r.auth_data.public_key===e.megolmV1PublicKey.publicKeyBase64}function tr(e){var r=0;for(var{sessions:t}of Object.values(e.rooms))r+=Object.keys(t).length;return r}class wt{constructor(e,r,t){this.logger=e,this.olmMachine=r,this.outgoingRequestProcessor=t,g(this,"stopped",!1),g(this,"outgoingRequestLoopRunning",!1),g(this,"nextLoopDeferred",void 0)}stop(){this.stopped=!0}doProcessOutgoingRequests(){this.nextLoopDeferred||(this.nextLoopDeferred=Promise.withResolvers());var e=this.nextLoopDeferred.promise;return this.outgoingRequestLoopRunning||this.outgoingRequestLoop().catch(e=>{this.logger.error("Uncaught error in outgoing request loop",e)}),e}outgoingRequestLoop(){var e=this;return c(function*(){if(e.outgoingRequestLoopRunning)throw new Error("Cannot run two outgoing request loops");e.outgoingRequestLoopRunning=!0;try{for(;!e.stopped&&e.nextLoopDeferred;){var r=e.nextLoopDeferred;e.nextLoopDeferred=void 0,yield e.processOutgoingRequests().then(r.resolve,r.reject)}}finally{e.outgoingRequestLoopRunning=!1}e.nextLoopDeferred&&e.nextLoopDeferred.reject(new Error("OutgoingRequestsManager was stopped"))})()}processOutgoingRequests(){var e=this;return c(function*(){if(!e.stopped){var r,t=yield e.olmMachine.outgoingRequests(),n=function*(r){if(e.stopped)return{v:void 0};try{yield M(e.logger,"Make outgoing request ".concat(r.type),c(function*(){yield e.outgoingRequestProcessor.makeOutgoingRequest(r)}))}catch(t){e.logger.error("Failed to process outgoing request ".concat(r.type,": ").concat(t))}};for(var i of t)if(r=yield*n(i))return r.v}})()}}var ee=5e3,D=function(e){return e.MISSING_DECRYPTION_KEY="MISSING_DECRYPTION_KEY",e.NETWORK_ERROR="NETWORK_ERROR",e.STOPPED="STOPPED",e}(D||{});class x extends Error{constructor(e){super("Failed to get key from backup: ".concat(e)),this.code=e,this.name="KeyDownloadError"}}class ir extends Error{constructor(e){super("Failed to get key from backup: rate limited"),this.retryMillis=e,this.name="KeyDownloadRateLimitError"}}class Rt{constructor(e,r,t,n){this.olmMachine=r,this.http=t,this.backupManager=n,g(this,"stopped",!1),g(this,"configuration",null),g(this,"sessionLastCheckAttemptedTime",new Map),g(this,"logger",void 0),g(this,"downloadLoopRunning",!1),g(this,"queuedRequests",[]),g(this,"hasConfigurationProblem",!1),g(this,"currentBackupVersionCheck",null),g(this,"onBackupStatusChanged",()=>{this.hasConfigurationProblem=!1,this.configuration=null,this.getOrCreateBackupConfiguration().then(e=>{e&&this.downloadKeysLoop()})}),this.logger=e.getChild("[PerSessionKeyBackupDownloader]"),n.on(p.KeyBackupStatus,this.onBackupStatusChanged),n.on(p.KeyBackupFailed,this.onBackupStatusChanged),n.on(p.KeyBackupDecryptionKeyCached,this.onBackupStatusChanged)}isKeyBackupDownloadConfigured(){return null!==this.configuration}getServerBackupInfo(){var e=this;return c(function*(){return yield e.backupManager.getServerBackupInfo()})()}onDecryptionKeyMissingError(e,r){this.isAlreadyInQueue(e,r)?this.logger.trace("Not checking key backup for session ".concat(r," as it is already queued")):this.wasRequestedRecently(r)?this.logger.trace("Not checking key backup for session ".concat(r," as it was already requested recently")):(this.queuedRequests.push({roomId:e,megolmSessionId:r}),this.downloadKeysLoop())}stop(){this.stopped=!0,this.backupManager.off(p.KeyBackupStatus,this.onBackupStatusChanged),this.backupManager.off(p.KeyBackupFailed,this.onBackupStatusChanged),this.backupManager.off(p.KeyBackupDecryptionKeyCached,this.onBackupStatusChanged)}isAlreadyInQueue(e,r){return this.queuedRequests.some(t=>t.roomId==e&&t.megolmSessionId==r)}markAsNotFoundInBackup(e){var r=Date.now();this.sessionLastCheckAttemptedTime.set(e,r),this.sessionLastCheckAttemptedTime.size>100&&(this.sessionLastCheckAttemptedTime=new Map(Array.from(this.sessionLastCheckAttemptedTime).filter((e,t)=>Math.max(r-t,0)<ee)))}wasRequestedRecently(e){var r=this.sessionLastCheckAttemptedTime.get(e);return!!r&&Math.max(Date.now()-r,0)<ee}getBackupDecryptionKey(){var e=this;return c(function*(){try{return yield e.olmMachine.getBackupKeys()}catch{return null}})()}requestRoomKeyFromBackup(e,r,t){var n=this;return c(function*(){var i=ce("/room_keys/keys/$roomId/$sessionId",{$roomId:r,$sessionId:t});return yield n.http.authedRequest(m.Get,i,{version:e},void 0,{prefix:j.V3})})()}downloadKeysLoop(){var e=this;return c(function*(){if(!e.downloadLoopRunning&&!e.hasConfigurationProblem){e.downloadLoopRunning=!0;try{for(;e.queuedRequests.length>0;){var r=e.queuedRequests[0];try{var t=yield e.getOrCreateBackupConfiguration();if(!t)return void(e.downloadLoopRunning=!1);var n=yield e.queryKeyBackup(r.roomId,r.megolmSessionId,t);if(e.stopped)return;try{yield e.decryptAndImport(r,n,t)}catch(t){e.logger.error("Error while decrypting and importing key backup for session ".concat(r.megolmSessionId),t)}e.queuedRequests.shift()}catch(t){if(t instanceof x)switch(t.code){case D.MISSING_DECRYPTION_KEY:e.markAsNotFoundInBackup(r.megolmSessionId),e.queuedRequests.shift();break;case D.NETWORK_ERROR:yield P(ee);break;case D.STOPPED:return void(e.downloadLoopRunning=!1)}else t instanceof ir&&(yield P(t.retryMillis))}}}finally{e.downloadLoopRunning=!1}}})()}queryKeyBackup(e,r,t){var n=this;return c(function*(){if(n.logger.debug("Checking key backup for session ".concat(r)),n.stopped)throw new x(D.STOPPED);try{var i=yield n.requestRoomKeyFromBackup(t.backupVersion,e,r);return n.logger.debug("Got key from backup for sessionId:".concat(r)),i}catch(e){if(n.stopped)throw new x(D.STOPPED);if(n.logger.info("No luck requesting key backup for session ".concat(r,": ").concat(e)),e instanceof gr){if("M_NOT_FOUND"==e.data.errcode)throw new x(D.MISSING_DECRYPTION_KEY);if(e.isRateLimitError()){var o;try{var s;o=null!==(s=e.getRetryAfterMs())&&void 0!==s?s:void 0}catch(e){n.logger.warn("Error while retrieving a rate-limit retry delay",e)}throw o&&o>0&&n.logger.info("Rate limited by server, waiting ".concat(o,"ms")),new ir(o??ee)}}throw new x(D.NETWORK_ERROR)}})()}decryptAndImport(e,r,t){var n=this;return c(function*(){var i={[e.megolmSessionId]:r},o=yield t.decryptor.decryptSessions(i);for(var s of o)s.room_id=e.roomId;yield n.backupManager.importBackedUpRoomKeys(o,t.backupVersion)})()}getOrCreateBackupConfiguration(){var e=this;return c(function*(){if(e.configuration)return e.configuration;if(e.hasConfigurationProblem)return null;if(null!=e.currentBackupVersionCheck)return e.logger.debug("Already checking server version, use current promise"),yield e.currentBackupVersionCheck;e.currentBackupVersionCheck=e.internalCheckFromServer();try{return yield e.currentBackupVersionCheck}finally{e.currentBackupVersionCheck=null}})()}internalCheckFromServer(){var e=this;return c(function*(){var r,t,n,i,o=null;try{o=yield e.backupManager.getServerBackupInfo()}catch(r){return e.logger.debug("Backup: error while checking server version: ".concat(r)),e.hasConfigurationProblem=!0,null}if(e.logger.debug("Got current backup version from server: ".concat(null===(r=o)||void 0===r?void 0:r.version)),"m.megolm_backup.v1.curve25519-aes-sha2"!=(null===(t=o)||void 0===t?void 0:t.algorithm))return e.logger.info("Unsupported algorithm ".concat(null===(i=o)||void 0===i?void 0:i.algorithm)),e.hasConfigurationProblem=!0,null;if(null===(n=o)||void 0===n||!n.version)return e.logger.info("No current key backup"),e.hasConfigurationProblem=!0,null;var s=yield e.backupManager.getActiveBackupVersion();if(null==s||o.version!=s)return e.logger.info("The current backup version on the server (".concat(o.version,") is not trusted. Version we are currently backing up to: ").concat(s)),e.hasConfigurationProblem=!0,null;var a=yield e.getBackupDecryptionKey();if(null==a||!a.decryptionKey)return e.logger.debug("Not checking key backup for session (no decryption key)"),e.hasConfigurationProblem=!0,null;if(s!=a.backupVersion)return e.logger.debug("Version for which we have a decryption key (".concat(a.backupVersion,") doesn't match the version we are backing up to (").concat(s,")")),e.hasConfigurationProblem=!0,null;if(o.auth_data.public_key!=a.decryptionKey.megolmV1PublicKey.publicKeyBase64)return e.logger.debug("Key backup on server does not match our decryption key"),e.hasConfigurationProblem=!0,null;var c=e.backupManager.createBackupDecryptor(a.decryptionKey);return e.hasConfigurationProblem=!1,e.configuration={decryptor:c,backupVersion:s},e.configuration})()}}function Kt(e,r){if(!e.private_key_salt||!e.private_key_iterations)throw new Error("Salt and/or iterations not found: this backup cannot be restored with a passphrase");return fr(r,e.private_key_salt,e.private_key_iterations,e.private_key_bits)}function nr(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,n)}return t}function or(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?nr(Object(t),!0).forEach(function(r){g(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):nr(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}var sr=[K.Sas,K.ScanQrCode,K.ShowQrCode,K.Reciprocate];class Et extends W{constructor(e,r,t,n,i,o,s){super(),this.logger=e,this.olmMachine=r,this.http=t,this.userId=n,this.secretStorage=o,this.cryptoCallbacks=s,g(this,"RECOVERY_KEY_DERIVATION_ITERATIONS",5e5),g(this,"_trustCrossSignedDevices",!0),g(this,"deviceIsolationMode",new Br(!1)),g(this,"stopped",!1),g(this,"roomEncryptors",{}),g(this,"eventDecryptor",void 0),g(this,"keyClaimManager",void 0),g(this,"outgoingRequestProcessor",void 0),g(this,"crossSigningIdentity",void 0),g(this,"backupManager",void 0),g(this,"outgoingRequestsManager",void 0),g(this,"perSessionBackupDownloader",void 0),g(this,"dehydratedDeviceManager",void 0),g(this,"reemitter",new dr(this)),g(this,"globalBlacklistUnverifiedDevices",!1),g(this,"_supportedVerificationMethods",sr),this.outgoingRequestProcessor=new yt(e,r,t),this.outgoingRequestsManager=new wt(this.logger,r,this.outgoingRequestProcessor),this.keyClaimManager=new ht(r,this.outgoingRequestProcessor),this.backupManager=new _t(e,r,t,this.outgoingRequestProcessor),this.perSessionBackupDownloader=new Rt(this.logger,this.olmMachine,this.http,this.backupManager),this.dehydratedDeviceManager=new lt(this.logger,r,t,this.outgoingRequestProcessor,o),this.eventDecryptor=new Mt(this.logger,r,this.perSessionBackupDownloader),this.reemitter.reEmit(this.backupManager,[p.KeyBackupStatus,p.KeyBackupSessionsRemaining,p.KeyBackupFailed,p.KeyBackupDecryptionKeyCached]),this.reemitter.reEmit(this.dehydratedDeviceManager,[p.DehydratedDeviceCreated,p.DehydratedDeviceUploaded,p.RehydrationStarted,p.RehydrationProgress,p.RehydrationCompleted,p.RehydrationError,p.DehydrationKeyCached,p.DehydratedDeviceRotationError]),this.crossSigningIdentity=new mt(e,r,this.outgoingRequestProcessor,o),this.checkKeyBackupAndEnable()}getOlmMachineOrThrow(){if(this.stopped)throw new Or;return this.olmMachine}set globalErrorOnUnknownDevices(e){}get globalErrorOnUnknownDevices(){return!1}stop(){this.stopped||(this.stopped=!0,this.keyClaimManager.stop(),this.backupManager.stop(),this.outgoingRequestsManager.stop(),this.perSessionBackupDownloader.stop(),this.dehydratedDeviceManager.stop(),this.olmMachine.close())}encryptEvent(e,r){var t=this;return c(function*(){var r=e.getRoomId(),n=t.roomEncryptors[r];if(!n)throw new Error("Cannot encrypt event in unconfigured room ".concat(r));yield n.encryptEvent(e,t.globalBlacklistUnverifiedDevices,t.deviceIsolationMode)})()}decryptEvent(e){var r=this;return c(function*(){if(!e.getRoomId())throw new Error("to-device event was not decrypted in preprocessToDeviceMessages");return yield r.eventDecryptor.attemptEventDecryption(e,r.deviceIsolationMode)})()}getBackupDecryptor(e,r){var t=this;return c(function*(){if(!(r instanceof Uint8Array))throw new Error("getBackupDecryptor: expects Uint8Array");if("m.megolm_backup.v1.curve25519-aes-sha2"!=e.algorithm)throw new Error("getBackupDecryptor: Unsupported algorithm ".concat(e.algorithm));var n=N.fromBase64(ve(r));if(!pe(n,e))throw new Error("getBackupDecryptor: key backup on server does not match the decryption key");return t.backupManager.createBackupDecryptor(n)})()}importBackedUpRoomKeys(e,r,t){var n=this;return c(function*(){return yield n.backupManager.importBackedUpRoomKeys(e,r,t)})()}maybeAcceptKeyBundle(e,r){var t=this;return c(function*(){var n=new te(t.logger,"maybeAcceptKeyBundle(".concat(e,", ").concat(r,")")),i=yield t.olmMachine.getReceivedRoomKeyBundleData(new S(e),new v(r));if(i){n.info("Fetching key bundle ".concat(i.url));var o,s=qr(t.http.opts.baseUrl,i.url,void 0,void 0,void 0,!1,!0,!0);try{var a=new URL(s);o=yield t.http.authedRequest(m.Get,a.pathname+a.search,{},void 0,{rawResponseBody:!0,prefix:""})}catch(e){throw n.warn("Error downloading encrypted bundle from ".concat(s,":"),e),e}n.info("Received blob of length ".concat(o.size));try{yield t.olmMachine.receiveRoomKeyBundle(i,new Uint8Array(yield o.arrayBuffer()))}catch(e){throw n.warn("Error receiving encrypted bundle:",e),e}}else n.info("No key bundle found for user")})()}getVersion(){var e=Hr();return"Rust SDK ".concat(e.matrix_sdk_crypto," (").concat(e.git_sha,"), Vodozemac ").concat(e.vodozemac)}setDeviceIsolationMode(e){this.deviceIsolationMode=e}isEncryptionEnabledInRoom(e){var r=this;return c(function*(){var t=yield r.olmMachine.getRoomSettings(new S(e));return!!t?.algorithm})()}getOwnDeviceKeys(){var e=this;return c(function*(){var r=e.olmMachine.identityKeys;return{ed25519:r.ed25519.toBase64(),curve25519:r.curve25519.toBase64()}})()}prepareToEncrypt(e){var r=this.roomEncryptors[e.roomId];r&&r.prepareForEncryption(this.globalBlacklistUnverifiedDevices,this.deviceIsolationMode)}forceDiscardSession(e){var r;return null===(r=this.roomEncryptors[e])||void 0===r?void 0:r.forceDiscardSession()}exportRoomKeys(){var e=this;return c(function*(){var r=yield e.olmMachine.exportRoomKeys(()=>!0);return JSON.parse(r)})()}exportRoomKeysAsJson(){var e=this;return c(function*(){return yield e.olmMachine.exportRoomKeys(()=>!0)})()}importRoomKeys(e,r){var t=this;return c(function*(){return yield t.backupManager.importRoomKeys(e,r)})()}importRoomKeysAsJson(e,r){var t=this;return c(function*(){return yield t.backupManager.importRoomKeysAsJson(e,r)})()}userHasCrossSigningKeys(){var e=arguments,r=this;return c(function*(){var t,n=e.length>0&&void 0!==e[0]?e[0]:r.userId,i=e.length>1&&void 0!==e[1]&&e[1],o=yield r.olmMachine.trackedUsers();for(var s of o)if(n===s.toString()){t=s;break}if(void 0!==t){if(n===r.userId){var a=r.olmMachine.queryKeysForUsers([t.clone()]);yield r.outgoingRequestProcessor.makeOutgoingRequest(a)}var c=yield r.olmMachine.getIdentity(t);return c?.free(),void 0!==c}if(i){var u,d=null===(u=(yield r.downloadDeviceList(new Set([n]))).master_keys)||void 0===u?void 0:u[n];return!!d&&!!Object.values(d.keys)[0]}return!1})()}getUserDeviceInfo(e){var r=arguments,t=this;return c(function*(){var n=r.length>1&&void 0!==r[1]&&r[1],i=new Map,o=yield t.getOlmMachineOrThrow().trackedUsers(),s=new Set;o.forEach(e=>s.add(e.toString()));var a=new Set;for(var c of e)s.has(c)?i.set(c,yield t.getUserDevices(c)):a.add(c);if(n&&a.size>=1){var u=yield t.downloadDeviceList(a);Object.entries(u.device_keys).forEach(e=>{var[r,t]=e;return i.set(r,ft(t))})}return i})()}getUserDevices(e){var r=this;return c(function*(){var t=new v(e),n=yield r.olmMachine.getUserDevices(t,1);try{var i=n.devices();try{return new Map(i.map(e=>[e.deviceId.toString(),pt(e,t)]))}finally{i.forEach(e=>e.free())}}finally{n.free()}})()}downloadDeviceList(e){var r=this;return c(function*(){var t={device_keys:{}};return e.forEach(e=>t.device_keys[e]=[]),yield r.http.authedRequest(m.Post,"/_matrix/client/v3/keys/query",void 0,t,{prefix:""})})()}getTrustCrossSignedDevices(){return this._trustCrossSignedDevices}setTrustCrossSignedDevices(e){this._trustCrossSignedDevices=e}setDeviceVerified(e,r){var t=arguments,n=this;return c(function*(){var i=!(t.length>2&&void 0!==t[2])||t[2],o=yield n.olmMachine.getDevice(new v(e),new B(r));if(!o)throw new Error("Unknown device ".concat(e,"|").concat(r));try{yield o.setLocalTrust(i?Je.Verified:Je.Unset)}finally{o.free()}})()}crossSignDevice(e){var r=this;return c(function*(){var t=yield r.olmMachine.getDevice(new v(r.userId),new B(e));if(!t)throw new Error("Unknown device ".concat(e));try{var n=yield t.verify();yield r.outgoingRequestProcessor.makeOutgoingRequest(n)}finally{t.free()}})()}getDeviceVerificationStatus(e,r){var t=this;return c(function*(){var n=yield t.olmMachine.getDevice(new v(e),new B(r));if(!n)return null;try{return new Tr({signedByOwner:n.isCrossSignedByOwner(),crossSigningVerified:n.isCrossSigningTrusted(),localVerified:n.isLocallyTrusted(),trustCrossSignedDevices:t._trustCrossSignedDevices})}finally{n.free()}})()}getUserVerificationStatus(e){var r=this;return c(function*(){var t=yield r.getOlmMachineOrThrow().getIdentity(new v(e));if(void 0===t)return new xe(!1,!1,!1);var n=t.isVerified(),i=t.wasPreviouslyVerified(),o=t instanceof Yr&&t.identityNeedsUserApproval();return t.free(),new xe(n,i,!1,o)})()}pinCurrentUserIdentity(e){var r=this;return c(function*(){var t=yield r.getOlmMachineOrThrow().getIdentity(new v(e));if(void 0===t)throw new Error("Cannot pin identity of unknown user");if(t instanceof Qr)throw new Error("Cannot pin identity of own user");yield t.pinCurrentMasterKey()})()}withdrawVerificationRequirement(e){var r=this;return c(function*(){var t=yield r.getOlmMachineOrThrow().getIdentity(new v(e));if(void 0===t)throw new Error("Cannot withdraw verification of unknown user");yield t.withdrawVerification()})()}isCrossSigningReady(){var e=this;return c(function*(){var{privateKeysInSecretStorage:r,privateKeysCachedLocally:t}=yield e.getCrossSigningStatus(),n=!!t.masterKey&&!!t.selfSigningKey&&!!t.userSigningKey,i=yield e.getOwnIdentity();return!(null==i||!i.isVerified())&&(n||r)})()}getCrossSigningKeyId(){var e=arguments,r=this;return c(function*(){var t=e.length>0&&void 0!==e[0]?e[0]:$.Master,n=yield r.olmMachine.getIdentity(new v(r.userId));if(!n)return null;try{var i,o=yield r.olmMachine.crossSigningStatus();if(!(o.hasMaster&&o.hasUserSigning&&o.hasSelfSigning)||!n.isVerified())return null;switch(t){case $.Master:i=n.masterKey;break;case $.SelfSigning:i=n.selfSigningKey;break;case $.UserSigning:i=n.userSigningKey;break;default:return null}var s=JSON.parse(i);return Object.values(s.keys)[0]}finally{n.free()}})()}bootstrapCrossSigning(e){var r=this;return c(function*(){yield r.crossSigningIdentity.bootstrapCrossSigning(e)})()}isSecretStorageReady(){var e=this;return c(function*(){var r=["m.cross_signing.master","m.cross_signing.user_signing","m.cross_signing.self_signing"];return null!=(yield e.backupManager.getActiveBackupVersion())&&r.push("m.megolm_backup.v1"),vr(e.secretStorage,r)})()}bootstrapSecretStorage(){var e=arguments,r=this;return c(function*(){var{createSecretStorageKey:t,setupNewSecretStorage:n,setupNewKeyBackup:i}=e.length>0&&void 0!==e[0]?e[0]:{},o=n||!(yield r.secretStorageHasAESKey());if(o){if(!t)throw new Error("unable to create a new secret storage key, createSecretStorageKey is not set");r.logger.info("bootstrapSecretStorage: creating new secret storage key");var s=yield t();if(!s)throw new Error("createSecretStorageKey() callback did not return a secret storage key");yield r.addSecretStorageKeyToSecretStorage(s)}var a=yield r.olmMachine.exportCrossSigningKeys();a&&void 0!==a.masterKey&&void 0!==a.self_signing_key&&void 0!==a.userSigningKey&&(o||!(yield Xe(r.secretStorage)))&&(r.logger.info("bootstrapSecretStorage: cross-signing keys not yet exported; doing so now."),yield r.secretStorage.store("m.cross_signing.master",a.masterKey),yield r.secretStorage.store("m.cross_signing.user_signing",a.userSigningKey),yield r.secretStorage.store("m.cross_signing.self_signing",a.self_signing_key)),i?yield r.resetKeyBackup():yield r.saveBackupKeyToStorage()})()}saveBackupKeyToStorage(){var e=this;return c(function*(){var r=yield e.backupManager.getServerBackupInfo();if(r&&r.version){var t=yield e.olmMachine.getBackupKeys();if(t.decryptionKey)if(pe(t.decryptionKey,r)){var n=t.decryptionKey.toBase64();yield e.secretStorage.store("m.megolm_backup.v1",n)}else e.logger.info("Not saving backup key to secret storage: decryption key does not match backup info");else e.logger.info("Not saving backup key to secret storage: no backup key")}else e.logger.info("Not saving backup key to secret storage: no backup info")})()}addSecretStorageKeyToSecretStorage(e){var r=this;return c(function*(){var t,n,i,o,s=yield r.secretStorage.addKey(Ae,{passphrase:null===(t=e.keyInfo)||void 0===t?void 0:t.passphrase,name:null===(n=e.keyInfo)||void 0===n?void 0:n.name,key:e.privateKey});yield r.secretStorage.setDefaultKeyId(s.keyId),null===(i=(o=r.cryptoCallbacks).cacheSecretStorageKey)||void 0===i||i.call(o,s.keyId,s.keyInfo,e.privateKey)})()}secretStorageHasAESKey(){var e=this;return c(function*(){var r=yield e.secretStorage.getKey();if(!r)return!1;var[,t]=r;return t.algorithm===Ae})()}getCrossSigningStatus(){var e=this;return c(function*(){var r=yield e.getOlmMachineOrThrow().getIdentity(new v(e.userId)),t=!!r?.masterKey&&!!r?.selfSigningKey&&!!r?.userSigningKey;r?.free();var n=yield Xe(e.secretStorage),i=yield e.getOlmMachineOrThrow().crossSigningStatus();return{publicKeysOnDevice:t,privateKeysInSecretStorage:n,privateKeysCachedLocally:{masterKey:!!i?.hasMaster,userSigningKey:!!i?.hasUserSigning,selfSigningKey:!!i?.hasSelfSigning}}})()}createRecoveryKeyFromPassphrase(e){var r=this;return c(function*(){if(e){var t=Le(32),n=yield fr(e,t,r.RECOVERY_KEY_DERIVATION_ITERATIONS);return{keyInfo:{passphrase:{algorithm:"m.pbkdf2",iterations:r.RECOVERY_KEY_DERIVATION_ITERATIONS,salt:t}},privateKey:n,encodedPrivateKey:$e(n)}}var i=new Uint8Array(32);return globalThis.crypto.getRandomValues(i),{privateKey:i,encodedPrivateKey:$e(i)}})()}getEncryptionInfoForEvent(e){var r=this;return c(function*(){return r.eventDecryptor.getEncryptionInfoForEvent(e)})()}getVerificationRequestsToDeviceInProgress(e){return this.olmMachine.getVerificationRequests(new v(e)).filter(e=>void 0===e.roomId).map(e=>this.makeVerificationRequest(e))}findVerificationRequestDMInProgress(e,r){if(!r)throw new Error("missing userId");var t=this.olmMachine.getVerificationRequests(new v(r)).find(r=>{var t;return(null===(t=r.roomId)||void 0===t?void 0:t.toString())===e});if(t)return this.makeVerificationRequest(t)}requestVerificationDM(e,r){var t=this;return c(function*(){var n=yield t.olmMachine.getIdentity(new v(e));if(!n)throw new Error("unknown userId ".concat(e));try{var i=t._supportedVerificationMethods.map(e=>oe(e)),o=yield n.verificationRequestContent(i),s=yield t.sendVerificationRequestContent(r,o),a=yield n.requestVerification(new S(r),new $r(s),i);return t.makeVerificationRequest(a)}finally{n.free()}})()}sendVerificationRequestContent(e,r){var t=this;return c(function*(){var n=Le(32),{event_id:i}=yield t.http.authedRequest(m.Put,"/_matrix/client/v3/rooms/".concat(encodeURIComponent(e),"/send/m.room.message/").concat(encodeURIComponent(n)),void 0,r,{prefix:""});return i})()}setSupportedVerificationMethods(e){this._supportedVerificationMethods=e??sr}requestOwnUserVerification(){var e=this;return c(function*(){var r=yield e.olmMachine.getIdentity(new v(e.userId));if(void 0===r)throw new Error("cannot request verification for this device when there is no existing cross-signing key");try{var[t,n]=yield r.requestVerification(e._supportedVerificationMethods.map(oe));return yield e.outgoingRequestProcessor.makeOutgoingRequest(n),e.makeVerificationRequest(t)}finally{r.free()}})()}requestDeviceVerification(e,r){var t=this;return c(function*(){var n=yield t.olmMachine.getDevice(new v(e),new B(r));if(!n)throw new Error("Not a known device");try{var[i,o]=n.requestVerification(t._supportedVerificationMethods.map(oe));return yield t.outgoingRequestProcessor.makeOutgoingRequest(o),t.makeVerificationRequest(i)}finally{n.free()}})()}getSessionBackupPrivateKey(){var e=this;return c(function*(){var r=yield e.olmMachine.getBackupKeys();return r.decryptionKey?fe(r.decryptionKey.toBase64()):null})()}storeSessionBackupPrivateKey(e,r){var t=this;return c(function*(){var n=ve(e);if(!r)throw new Error("storeSessionBackupPrivateKey: version is required");yield t.backupManager.saveBackupDecryptionKey(N.fromBase64(n),r)})()}loadSessionBackupPrivateKeyFromSecretStorage(){var e=this;return c(function*(){var r=yield e.secretStorage.get("m.megolm_backup.v1");if(!r)throw new Error("loadSessionBackupPrivateKeyFromSecretStorage: missing decryption key in secret storage");var t=yield e.backupManager.getServerBackupInfo();if(!t||!t.version)throw new Error("loadSessionBackupPrivateKeyFromSecretStorage: unable to get backup version");var n=N.fromBase64(r);if(!pe(n,t))throw new Error("loadSessionBackupPrivateKeyFromSecretStorage: decryption key does not match backup info");yield e.backupManager.saveBackupDecryptionKey(n,t.version)})()}getActiveSessionBackupVersion(){var e=this;return c(function*(){return yield e.backupManager.getActiveBackupVersion()})()}getKeyBackupInfo(){var e=this;return c(function*(){return(yield e.backupManager.getServerBackupInfo())||null})()}isKeyBackupTrusted(e){var r=this;return c(function*(){return yield r.backupManager.isKeyBackupTrusted(e)})()}checkKeyBackupAndEnable(){var e=this;return c(function*(){return yield e.backupManager.checkKeyBackupAndEnable(!0)})()}deleteKeyBackupVersion(e){var r=this;return c(function*(){yield r.backupManager.deleteKeyBackupVersion(e)})()}resetKeyBackup(){var e=this;return c(function*(){var r=yield e.backupManager.setupKeyBackup(r=>e.signObject(r));(yield e.secretStorageHasAESKey())&&(yield e.secretStorage.store("m.megolm_backup.v1",r.decryptionKey.toBase64())),e.checkKeyBackupAndEnable()})()}disableKeyStorage(){var e=this;return c(function*(){var r=yield e.getKeyBackupInfo();null!=r&&r.version?yield e.deleteKeyBackupVersion(r.version):e.logger.error("Can't delete key backup version: no version available"),yield e.deleteSecretStorage(),yield e.dehydratedDeviceManager.delete()})()}signObject(e){var r=this;return c(function*(){var t=new Map(Object.entries(e.signatures||{})),n=e.unsigned;delete e.signatures,delete e.unsigned;var i=t.get(r.userId)||{},o=at.stringify(e),s=yield r.olmMachine.sign(o),a=JSON.parse(s.asJSON());t.set(r.userId,or(or({},i),a[r.userId])),void 0!==n&&(e.unsigned=n),e.signatures=Object.fromEntries(t.entries())})()}restoreKeyBackupWithPassphrase(e,r){var t=this;return c(function*(){var n=yield t.backupManager.getServerBackupInfo();if(null==n||!n.version)throw new Error("No backup info available");var i=yield Kt(n.auth_data,e);return yield t.storeSessionBackupPrivateKey(i,n.version),t.restoreKeyBackup(r)})()}restoreKeyBackup(e){var r=this;return c(function*(){var t=yield r.olmMachine.getBackupKeys(),{decryptionKey:n,backupVersion:i}=t;if(!n||!i)throw new Error("No decryption key found in crypto store");var o=fe(n.toBase64()),s=yield r.backupManager.requestKeyBackupVersion(i);if(!s)throw new Error("Backup version to restore ".concat(i," not found on server"));var a=yield r.getBackupDecryptor(s,o);try{var c;return null==e||null===(c=e.progressCallback)||void 0===c||c.call(e,{stage:A.Fetch}),yield r.backupManager.restoreKeyBackup(i,a,e)}finally{a.free()}})()}isDehydrationSupported(){var e=this;return c(function*(){return yield e.dehydratedDeviceManager.isSupported()})()}startDehydration(){var e=arguments,r=this;return c(function*(){var t=e.length>0&&void 0!==e[0]?e[0]:{};if(!(yield r.isCrossSigningReady())||!(yield r.isSecretStorageReady()))throw new Error("Device dehydration requires cross-signing and secret storage to be set up");return yield r.dehydratedDeviceManager.start(t||{})})()}importSecretsBundle(e){var r=this;return c(function*(){var t=zr.from_json(e);yield r.getOlmMachineOrThrow().importSecretsBundle(t)})()}exportSecretsBundle(){var e=this;return c(function*(){var r=yield e.getOlmMachineOrThrow().exportSecretsBundle(),t=r.to_json();return r.free(),t})()}encryptToDeviceMessages(e,r,t){var n=this;return c(function*(){var i=new te(n.logger,"encryptToDeviceMessages"),o=new Set(r.map(e=>{var{userId:r}=e;return r}));yield n.keyClaimManager.ensureSessionsForUsers(i,Array.from(o).map(e=>new v(e)));var s,a={batch:[],eventType:w.RoomMessageEncrypted};return yield Promise.all(r.map((s=c(function*(r){var{userId:i,deviceId:o}=r,s=yield n.olmMachine.getDevice(new v(i),new B(o));if(s){var c=JSON.parse(yield s.encryptToDeviceEvent(e,t));a.batch.push({deviceId:o,userId:i,payload:c})}else n.logger.warn("encryptToDeviceMessages: unknown device ".concat(i,":").concat(o))}),function(e){return s.apply(this,arguments)}))),a})()}resetEncryption(e){var r=this;return c(function*(){r.logger.debug("resetEncryption: resetting encryption"),r.dehydratedDeviceManager.delete(),yield r.backupManager.deleteAllKeyBackupVersions(),yield r.deleteSecretStorage(),yield r.crossSigningIdentity.bootstrapCrossSigning({setupNewCrossSigning:!0,authUploadDeviceSigningKeys:e}),yield r.resetKeyBackup(),r.logger.debug("resetEncryption: ended")})()}deleteSecretStorage(){var e=this;return c(function*(){yield e.secretStorage.store("m.cross_signing.master",null),yield e.secretStorage.store("m.cross_signing.self_signing",null),yield e.secretStorage.store("m.cross_signing.user_signing",null),yield e.secretStorage.store("m.megolm_backup.v1",null);var r=yield e.secretStorage.getDefaultKeyId();r&&(yield e.secretStorage.store("m.secret_storage.key.".concat(r),null)),yield e.secretStorage.setDefaultKeyId(null)})()}shareRoomHistoryWithUser(e,r){var t=this;return c(function*(){var n=new te(t.logger,"shareRoomHistoryWithUser(".concat(e,", ").concat(r,")")),i=yield t.getOwnIdentity();if(null!=i&&i.isVerified()){n.info("Sharing message history");var o=yield t.getOlmMachineOrThrow().buildRoomKeyBundle(new S(e));if(o){var s=yield t.http.uploadContent(o.encryptedData);n.info("Uploaded encrypted key blob: ".concat(JSON.stringify(s)));var a=t.getOlmMachineOrThrow().queryKeysForUsers([new v(r)]);yield t.outgoingRequestProcessor.makeOutgoingRequest(a),yield t.keyClaimManager.ensureSessionsForUsers(n,[new v(r)]);var c=yield t.getOlmMachineOrThrow().shareRoomKeyBundleData(new v(r),new S(e),s.content_uri,o.mediaEncryptionInfo,me.identityBasedStrategy());for(var u of c)yield t.outgoingRequestProcessor.makeOutgoingRequest(u)}else n.info("No keys to share")}else n.warn("Not sharing message history as the current device is not verified by our cross-signing identity")})()}receiveSyncChanges(e){var r=this;return c(function*(){var{events:t,oneTimeKeysCounts:n=new Map,unusedFallbackKeys:i,devices:o=new He}=e;return yield r.olmMachine.receiveSyncChanges(t?JSON.stringify(t):"[]",o,n,i)})()}preprocessToDeviceMessages(e){var r=this;return c(function*(){var t=yield r.receiveSyncChanges({events:e}),n=[];for(var i of t){var o=JSON.parse(i.rawEvent);if(o.type===w.KeyVerificationRequest){var s=o.sender,a=o.content.transaction_id;a&&s&&r.onIncomingKeyVerificationRequest(s,a)}switch(i.type){case X.Decrypted:var c,u=i.encryptionInfo;n.push({message:o,encryptionInfo:{sender:u.sender.toString(),senderDevice:null===(c=u.senderDevice)||void 0===c?void 0:c.toString(),senderCurve25519KeyBase64:u.senderCurve25519Key,senderVerified:u.isSenderVerified()}});break;case X.PlainText:n.push({message:o,encryptionInfo:null});case X.UnableToDecrypt:case X.Invalid:}}return n})()}processKeyCounts(e,r){var t=this;return c(function*(){var n=e&&new Map(Object.entries(e)),i=r&&new Set(r);(void 0!==n||void 0!==i)&&(yield t.receiveSyncChanges({oneTimeKeysCounts:n,unusedFallbackKeys:i}))})()}processDeviceLists(e){var r=this;return c(function*(){var t,n,i=new He(null===(t=e.changed)||void 0===t?void 0:t.map(e=>new v(e)),null===(n=e.left)||void 0===n?void 0:n.map(e=>new v(e)));yield r.receiveSyncChanges({devices:i})})()}onCryptoEvent(e,r){var t=this;return c(function*(){var n=r.getContent(),i=new yr;if("m.megolm.v1.aes-sha2"===n.algorithm){i.algorithm=G.MegolmV1AesSha2;try{i.sessionRotationPeriodMs=n.rotation_period_ms,i.sessionRotationPeriodMessages=n.rotation_period_msgs,yield t.olmMachine.setRoomSettings(new S(e.roomId),i)}catch(r){return void t.logger.warn("Room ".concat(e.roomId,": ignoring crypto event which caused error: ").concat(r))}var o=t.roomEncryptors[e.roomId];o?o.onCryptoEvent(n):t.roomEncryptors[e.roomId]=new ct(t.logger.getChild("[".concat(e.roomId," encryption]")),t.olmMachine,t.keyClaimManager,t.outgoingRequestsManager,e,n)}else t.logger.warn("Room ".concat(e.roomId,": ignoring crypto event with invalid algorithm ").concat(n.algorithm))})()}onSyncCompleted(e){this.outgoingRequestsManager.doProcessOutgoingRequests().catch(e=>{this.logger.warn("onSyncCompleted: Error processing outgoing requests",e)})}markAllTrackedUsersAsDirty(){var e=this;return c(function*(){yield e.olmMachine.markAllTrackedUsersAsDirty()})()}onIncomingKeyVerificationRequest(e,r){var t=this.olmMachine.getVerificationRequest(new v(e),r);t?this.emit(p.VerificationRequestReceived,this.makeVerificationRequest(t)):this.logger.info("Ignoring just-received verification request ".concat(r," which did not start a rust-side verification"))}makeVerificationRequest(e){return new kt(this.logger,this.olmMachine,e,this.outgoingRequestProcessor,this._supportedVerificationMethods)}onRoomMembership(e,r,t){var n=this.roomEncryptors[e.getRoomId()];n&&n.onRoomMembership(r)}onRoomKeysUpdated(e){var r=this;return c(function*(){for(var t of e)r.onRoomKeyUpdated(t);r.backupManager.maybeUploadKey()})()}onRoomKeyUpdated(e){var r=this;if(!this.stopped){this.logger.debug("Got update for session ".concat(e.sessionId," from sender ").concat(e.senderKey.toBase64()," in ").concat(e.roomId.toString()));var t=this.eventDecryptor.getEventsPendingRoomKey(e.roomId.toString(),e.sessionId);if(0!==t.length){this.logger.debug("Retrying decryption on events:",t.map(e=>"".concat(e.getId())));var n=function(e){e.attemptDecryption(r,{isRetry:!0}).catch(t=>{r.logger.info("Still unable to decrypt event ".concat(e.getId()," after receiving key"))})};for(var i of t)n(i)}}}onRoomKeysWithheld(e){var r=this;return c(function*(){for(var t of e){r.logger.debug("Got withheld message for session ".concat(t.sessionId," in ").concat(t.roomId.toString()));var n=r.eventDecryptor.getEventsPendingRoomKey(t.roomId.toString(),t.sessionId);if(0===n.length)return;for(var i of(r.logger.debug("Retrying decryption on events:",n.map(e=>"".concat(e.getId()))),n))i.attemptDecryption(r,{isRetry:!0}).catch(e=>{})}})()}onUserIdentityUpdated(e){var r=this;return c(function*(){var t=yield r.getUserVerificationStatus(e.toString());r.emit(p.UserTrustStatusChanged,e.toString(),t),e.toString()===r.userId&&(r.emit(p.KeysChanged,{}),yield r.checkKeyBackupAndEnable())})()}onDevicesUpdated(e){var r=this;return c(function*(){r.emit(p.WillUpdateDevices,e,!1),r.emit(p.DevicesUpdated,e,!1)})()}handleSecretReceived(e,r){var t=this;return c(function*(){return t.logger.debug("onReceiveSecret: Received secret ".concat(e)),"m.megolm_backup.v1"===e&&(yield t.backupManager.handleBackupSecretReceived(r))})()}checkSecrets(e){var r=this;return c(function*(){var t=yield r.olmMachine.getSecretsFromInbox(e);for(var n of t)if(yield r.handleSecretReceived(e,n))break;yield r.olmMachine.deleteSecretsFromInbox(e)})()}onLiveEventFromSync(e){var r=this;return c(function*(){if(!e.isState()&&!e.getUnsigned().transaction_id){var t=(o=c(function*(t){St(e)&&(yield r.onKeyVerificationEvent(t))}),function(e){return o.apply(this,arguments)});if(e.isDecryptionFailure()||e.isEncrypted()){var n=setTimeout(()=>e.off(de.Decrypted,i),3e5),i=(r,o)=>{o||(clearTimeout(n),e.off(de.Decrypted,i),t(r))};e.on(de.Decrypted,i)}else yield t(e)}var o})()}onKeyVerificationEvent(e){var r=this;return c(function*(){var t=e.getRoomId();if(!t)throw new Error("missing roomId in the event");r.logger.debug("Incoming verification event ".concat(e.getId()," type ").concat(e.getType()," from ").concat(e.getSender())),yield r.olmMachine.receiveVerificationEvent(JSON.stringify({event_id:e.getId(),type:e.getType(),sender:e.getSender(),state_key:e.getStateKey(),content:e.getContent(),origin_server_ts:e.getTs()}),new S(t)),e.getType()===w.RoomMessage&&e.getContent().msgtype===lr.KeyVerificationRequest&&r.onIncomingKeyVerificationRequest(e.getSender(),e.getId()),r.outgoingRequestsManager.doProcessOutgoingRequests().catch(e=>{r.logger.warn("onKeyVerificationRequest: Error processing outgoing requests",e)})})()}getOwnIdentity(){var e=this;return c(function*(){return yield e.olmMachine.getIdentity(new v(e.userId))})()}}class Mt{constructor(e,r,t){this.logger=e,this.olmMachine=r,this.perSessionBackupDownloader=t,g(this,"eventsPendingKey",new Fe(()=>new Fe(()=>new Set)))}attemptEventDecryption(e,r){var t=this;return c(function*(){var n;switch(t.addEventToPendingList(e),r.kind){case ae.AllDevicesIsolationMode:n=Ye.Untrusted;break;case ae.OnlySignedDevicesIsolationMode:n=Ye.CrossSignedOrLegacy}try{var i=yield t.olmMachine.decryptRoomEvent(ar(e),new S(e.getRoomId()),new Zr(n));return t.removeEventFromPendingList(e),{clearEvent:JSON.parse(i.event),claimedEd25519Key:i.senderClaimedEd25519Key,senderCurve25519Key:i.senderCurve25519Key,forwardingCurve25519KeyChain:i.forwardingCurve25519KeyChain}}catch(r){if(!(r instanceof Xr))throw new b(_.UNKNOWN_ERROR,"Unknown error");t.onMegolmDecryptionError(e,r,yield t.perSessionBackupDownloader.getServerBackupInfo())}})()}onMegolmDecryptionError(e,r,t){var n=e.getWireContent(),i={sender_key:n.sender_key,session_id:n.session_id};if(r.code===q.MissingRoomKey||r.code===q.UnknownMessageIndex){this.perSessionBackupDownloader.onDecryptionKeyMissingError(e.getRoomId(),n.session_id);var o=e.getMembershipAtEvent();if(o&&o!==se.Join&&o!==se.Invite)throw new b(_.HISTORICAL_MESSAGE_USER_NOT_JOINED,"This message was sent when we were not a member of the room.",i);if(e.getTs()<=this.olmMachine.deviceCreationTimeMs)throw null===t?new b(_.HISTORICAL_MESSAGE_NO_KEY_BACKUP,"This message was sent before this device logged in, and there is no key backup on the server.",i):this.perSessionBackupDownloader.isKeyBackupDownloadConfigured()?new b(_.HISTORICAL_MESSAGE_WORKING_BACKUP,"This message was sent before this device logged in. Key backup is working, but we still do not (yet) have the key.",i):new b(_.HISTORICAL_MESSAGE_BACKUP_UNCONFIGURED,"This message was sent before this device logged in, and key backup is not working.",i)}if(r.maybe_withheld){var s="The sender has disabled encrypting to unverified devices."===r.maybe_withheld?_.MEGOLM_KEY_WITHHELD_FOR_UNVERIFIED_DEVICE:_.MEGOLM_KEY_WITHHELD;throw new b(s,r.maybe_withheld,i)}switch(r.code){case q.MissingRoomKey:throw new b(_.MEGOLM_UNKNOWN_INBOUND_SESSION_ID,"The sender's device has not sent us the keys for this message.",i);case q.UnknownMessageIndex:throw new b(_.OLM_UNKNOWN_MESSAGE_INDEX,"The sender's device has not sent us the keys for this message at this index.",i);case q.SenderIdentityVerificationViolation:throw this.removeEventFromPendingList(e),new b(_.SENDER_IDENTITY_PREVIOUSLY_VERIFIED,"The sender identity is unverified, but was previously verified.");case q.UnknownSenderDevice:throw this.removeEventFromPendingList(e),new b(_.UNKNOWN_SENDER_DEVICE,"The sender device is not known.");case q.UnsignedSenderDevice:throw this.removeEventFromPendingList(e),new b(_.UNSIGNED_SENDER_DEVICE,"The sender identity is not cross-signed.");default:throw new b(_.UNKNOWN_ERROR,r.description,i)}}getEncryptionInfoForEvent(e){var r=this;return c(function*(){if(!e.getClearContent()||e.isDecryptionFailure())return null;if(null!==e.status)return{shieldColour:ne.NONE,shieldReason:null};var t=yield r.olmMachine.getRoomEventEncryptionInfo(ar(e),new S(e.getRoomId()));return Ct(r.logger,t)})()}getEventsPendingRoomKey(e,r){var t=this.eventsPendingKey.get(e);if(!t)return[];var n=t.get(r);return n?[...n]:[]}addEventToPendingList(e){var r=e.getRoomId();r&&this.eventsPendingKey.getOrCreate(r).getOrCreate(e.getWireContent().session_id).add(e)}removeEventFromPendingList(e){var r=e.getRoomId();if(r){var t=this.eventsPendingKey.getOrCreate(r);if(t){var n=t.get(e.getWireContent().session_id);n&&(n.delete(e),0===n.size&&(t.delete(e.getWireContent().session_id),0===t.size&&this.eventsPendingKey.delete(r)))}}}}function ar(e){return JSON.stringify({event_id:e.getId(),type:e.getWireType(),sender:e.getSender(),state_key:e.getStateKey(),content:e.getWireContent(),origin_server_ts:e.getTs()})}function Ct(e,r){if(void 0===r)return null;var t,n,i=r.shieldState(!1);switch(i.color){case Qe.Grey:t=ne.GREY;break;case Qe.None:t=ne.NONE;break;default:t=ne.RED}switch(i.code){case void 0:case null:n=null;break;case T.AuthenticityNotGuaranteed:n=I.AUTHENTICITY_NOT_GUARANTEED;break;case T.UnknownDevice:n=I.UNKNOWN_DEVICE;break;case T.UnsignedDevice:n=I.UNSIGNED_DEVICE;break;case T.UnverifiedIdentity:n=I.UNVERIFIED_IDENTITY;break;case T.SentInClear:n=I.SENT_IN_CLEAR;break;case T.VerificationViolation:n=I.VERIFICATION_VIOLATION;break;case T.MismatchedSender:n=I.MISMATCHED_SENDER;break;default:n=I.UNKNOWN}return{shieldColour:t,shieldReason:n}}function It(e){return we.apply(this,arguments)}function we(){return(we=c(function*(e){var r,{logger:t,legacyStore:n}=e;if(yield hr(),yield n.containsData()){yield n.startup();var i=null;if(yield n.doTxn("readonly",[J.STORE_ACCOUNT],e=>{n.getAccount(e,e=>{i=e})}),i){var o=yield n.getMigrationState();if(!(o>=R.MEGOLM_SESSIONS_MIGRATED)){var s=yield Bt(t,n),a=yield Ot(t,n),c=1+s+a;t.info("Migrating data from legacy crypto store. ".concat(s," olm sessions and ").concat(a," megolm sessions to migrate."));var u=0;l(0);var d=(new TextEncoder).encode(e.legacyPickleKey);o===R.NOT_STARTED&&(t.info("Migrating data from legacy crypto store. Step 1: base data"),yield Dt(e.http,e.userId,e.deviceId,n,d,e.storeHandle,t),o=R.INITIAL_DATA_MIGRATED,yield n.setMigrationState(o)),l(1),o===R.INITIAL_DATA_MIGRATED&&(t.info("Migrating data from legacy crypto store. Step 2: olm sessions (".concat(s," sessions to migrate).")),yield qt(t,n,d,e.storeHandle,l),o=R.OLM_SESSIONS_MIGRATED,yield n.setMigrationState(o)),o===R.OLM_SESSIONS_MIGRATED&&(t.info("Migrating data from legacy crypto store. Step 3: megolm sessions (".concat(a," sessions to migrate).")),yield Tt(t,n,d,e.storeHandle,l),o=R.MEGOLM_SESSIONS_MIGRATED,yield n.setMigrationState(o)),null===(r=e.legacyMigrationProgressListener)||void 0===r||r.call(e,-1,-1),t.info("Migration from legacy crypto store complete")}}else t.debug("Legacy crypto store is not set up (no account found). Not migrating.")}function l(r){var t;u+=r,null===(t=e.legacyMigrationProgressListener)||void 0===t||t.call(e,u,c)}})).apply(this,arguments)}function Dt(e,r,t,n,i,o,s){return Re.apply(this,arguments)}function Re(){return(Re=c(function*(e,r,t,n,i,o,s){var a=new et;a.userId=new v(r),a.deviceId=new B(t),yield n.doTxn("readonly",[J.STORE_ACCOUNT],e=>n.getAccount(e,e=>{a.pickledAccount=e??""}));var c=yield re(n,i,"m.megolm_backup.v1");if(c){for(var u=!1,d=null;!u;)try{d=yield Sr(e),u=!0}catch(e){s.info("Failed to get backup version during migration, retrying in 2 seconds",e),yield P(2e3)}if(d&&"m.megolm_backup.v1.curve25519-aes-sha2"==d.algorithm)try{var l,g=N.fromBase64(c),y=null===(l=d.auth_data)||void 0===l?void 0:l.public_key;g.megolmV1PublicKey.publicKeyBase64==y?(a.backupVersion=d.version,a.backupRecoveryKey=c):s.debug("The backup key to migrate does not match the active backup version","Cached pub key: ".concat(g.megolmV1PublicKey.publicKeyBase64),"Active pub key: ".concat(y))}catch(e){s.warn("Failed to check if the backup key to migrate matches the active backup version",e)}}a.privateCrossSigningMasterKey=yield re(n,i,"master"),a.privateCrossSigningSelfSigningKey=yield re(n,i,"self_signing"),a.privateCrossSigningUserSigningKey=yield re(n,i,"user_signing"),yield Pe.migrateBaseData(a,i,o,s)})).apply(this,arguments)}function Bt(e,r){return Ke.apply(this,arguments)}function Ke(){return(Ke=c(function*(e,r){var t;return e.debug("Counting olm sessions to be migrated"),yield r.doTxn("readonly",[J.STORE_SESSIONS],e=>r.countEndToEndSessions(e,e=>t=e)),t})).apply(this,arguments)}function Ot(e,r){return Ee.apply(this,arguments)}function Ee(){return(Ee=c(function*(e,r){return e.debug("Counting megolm sessions to be migrated"),yield r.countEndToEndInboundGroupSessions()})).apply(this,arguments)}function qt(e,r,t,n,i){return Me.apply(this,arguments)}function Me(){return(Me=c(function*(e,r,t,n,i){for(;;){var o=yield r.getEndToEndSessionsBatch();if(null===o)return;e.debug("Migrating batch of ".concat(o.length," olm sessions"));var s=[];for(var a of o){var c=new rt;c.senderKey=a.deviceKey,c.pickle=a.session,c.lastUseTime=c.creationTime=new Date(a.lastReceivedMessageTs),s.push(c)}yield Pe.migrateOlmSessions(s,t,n,e),yield r.deleteEndToEndSessionsBatch(o),i(o.length)}})).apply(this,arguments)}function Tt(e,r,t,n,i){return Ce.apply(this,arguments)}function Ce(){return(Ce=c(function*(e,r,t,n,i){for(;;){var o=yield r.getEndToEndInboundGroupSessionsBatch();if(null===o)return;e.debug("Migrating batch of ".concat(o.length," megolm sessions"));var s=[];for(var a of o){var c,u=a.sessionData,d=new tt;d.pickle=u.session,d.roomId=new S(u.room_id),d.senderKey=a.senderKey,d.senderSigningKey=null===(c=u.keysClaimed)||void 0===c?void 0:c.ed25519,d.backedUp=!a.needsBackup,d.imported=!0===u.untrusted,s.push(d)}yield Pe.migrateMegolmSessions(s,t,n,e),yield r.deleteEndToEndInboundGroupSessionsBatch(o),i(o.length)}})).apply(this,arguments)}function Pt(e){return Ie.apply(this,arguments)}function Ie(){return(Ie=c(function*(e){var{logger:r,legacyStore:t,olmMachine:n}=e;if((yield t.containsData())&&!((yield t.getMigrationState())>=R.ROOM_SETTINGS_MIGRATED)){var i={};for(var[o,s]of(yield t.doTxn("readwrite",[J.STORE_ROOMS],e=>{t.getEndToEndRooms(e,e=>{i=e})}),r.debug("Migrating ".concat(Object.keys(i).length," sets of room settings")),Object.entries(i)))try{var a=new yr;if("m.megolm.v1.aes-sha2"!==s.algorithm){r.warn("Room ".concat(o,": ignoring room with invalid algorithm ").concat(s.algorithm));continue}a.algorithm=G.MegolmV1AesSha2,a.sessionRotationPeriodMs=s.rotation_period_ms,a.sessionRotationPeriodMessages=s.rotation_period_msgs,yield n.setRoomSettings(new S(o),a)}catch(e){r.warn("Room ".concat(o,": ignoring settings ").concat(JSON.stringify(s)," which caused error ").concat(e))}r.debug("Completed room settings migration"),yield t.setMigrationState(R.ROOM_SETTINGS_MIGRATED)}})).apply(this,arguments)}function re(e,r,t){return De.apply(this,arguments)}function De(){return(De=c(function*(e,r,t){var n=yield new Promise(r=>{e.doTxn("readonly",[J.STORE_ACCOUNT],n=>{e.getSecretStorePrivateKey(n,r,t)})});return n&&n.ciphertext&&n.iv&&n.mac?yield Pr(n,r,t):n instanceof Uint8Array?ve(n):void 0})).apply(this,arguments)}function Ut(e){return Be.apply(this,arguments)}function Be(){return(Be=c(function*(e){var{legacyCryptoStore:r,rustCrypto:t,logger:n}=e,i=yield t.getOwnIdentity();if(i&&!i.isVerified()){var o=yield Nt(r);if(o){var s=JSON.parse(i.masterKey);if(!s.keys||0===Object.keys(s.keys).length)return void n.error("Post Migration | Unexpected error: no master key in the rust session.");var a=Object.values(s.keys)[0];a&&a==o&&(n.info("Post Migration: Migrating legacy trusted MSK: ".concat(o," to locally verified.")),yield i.verify())}}})).apply(this,arguments)}function Nt(e){return Oe.apply(this,arguments)}function Oe(){return(Oe=c(function*(e){var r=null;return yield e.doTxn("readonly","account",t=>{e.getCrossSigningKeys(t,e=>{var t=e?.master;t&&0!=Object.keys(t.keys).length&&(r=Object.values(t.keys)[0])})}),r})).apply(this,arguments)}function cr(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,n)}return t}function Vt(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?cr(Object(t),!0).forEach(function(r){g(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):cr(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function Ft(e){return qe.apply(this,arguments)}function qe(){return(qe=c(function*(e){var r,{logger:t}=e;t.debug("Initialising Rust crypto-sdk WASM artifact"),yield hr(),t.debug("Opening Rust CryptoStore"),r=e.storePrefix?e.storeKey?yield le.openWithKey(e.storePrefix,e.storeKey,t):yield le.open(e.storePrefix,e.storePassphrase,t):yield le.open(null,null,t),e.legacyCryptoStore&&(yield It(Vt({legacyStore:e.legacyCryptoStore,storeHandle:r},e)));var n=yield xt(t,e.http,e.userId,e.deviceId,e.secretStorage,e.cryptoCallbacks,r,e.legacyCryptoStore);return r.free(),t.debug("Completed rust crypto-sdk setup"),n})).apply(this,arguments)}function xt(e,r,t,n,i,o,s,a){return Te.apply(this,arguments)}function Te(){return(Te=c(function*(e,r,t,n,i,o,s,a){e.debug("Init OlmMachine");var c=yield it.initFromStore(new v(t),new B(n),s,e);a&&(yield Pt({logger:e,legacyStore:a,olmMachine:c})),c.roomKeyRequestsEnabled=!1;var u=new Et(e,c,r,t,n,i,o);if((yield c.registerRoomKeyUpdatedCallback(e=>u.onRoomKeysUpdated(e)),yield c.registerRoomKeysWithheldCallback(e=>u.onRoomKeysWithheld(e)),yield c.registerUserIdentityUpdatedCallback(e=>u.onUserIdentityUpdated(e)),yield c.registerDevicesUpdatedCallback(e=>u.onDevicesUpdated(e)),u.checkSecrets("m.megolm_backup.v1"),yield c.registerReceiveSecretCallback((e,r)=>u.checkSecrets(e)),yield c.outgoingRequests(),a&&(yield a.containsData()))&&(yield a.getMigrationState())<R.INITIAL_OWN_KEY_QUERY_DONE){e.debug("Performing initial key query after migration");for(var d=!1;!d;)try{yield u.userHasCrossSigningKeys(t),d=!0}catch(r){e.error("Failed to check for cross-signing keys after migration, retrying",r)}yield Ut({legacyCryptoStore:a,rustCrypto:u,logger:e}),yield a.setMigrationState(R.INITIAL_OWN_KEY_QUERY_DONE)}return u})).apply(this,arguments)}export{Ft as initRustCrypto};