/* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD AND TERSER if you want to view the source, please visit the github repository of this plugin */ "use strict";function Logger(message,level,key3){_logger(message,level,key3)}function __logger(message,baseLevel,flagsOrKey,key3){let level=baseLevel;"string"==typeof flagsOrKey?key3=flagsOrKey:void 0!==flagsOrKey&&(level|=flagsOrKey);_logger(message,level,key3)}function info(message,flagsOrKey,key3){__logger(message,LEVEL_INFO,flagsOrKey,key3)}function isMetaEntry(entry){return"children"in entry}function statusDisplay(status){return status?"EXPERIMENTAL"==status?" (Experimental)":"ALPHA"==status?" (Alpha)":"BETA"==status?" (Beta)":` (${status})`:""}function confName(key3,alt=""){var _a8,_b5;return key3 in configurationNames?`${null==(_a8=configurationNames[key3])?void 0:_a8.name}${statusDisplay(null==(_b5=configurationNames[key3])?void 0:_b5.status)}`:`${alt||""}`}function isValidLength(len){return len>=1&&len<=5}function encodeObjectAsArray(obj){if(Array.isArray(obj))return ARRAY_MARKER+encodeAnyArray(obj,!0);const objArray=[...Object.entries(obj)].flat();return OBJECT_MARKER+encodeAnyArray(objArray,!0)}function decodeObjectFromArray(str){if(str[0]==ARRAY_MARKER)return decodeAnyArray(str.substring(1));if(str[0]==OBJECT_MARKER){const arr=decodeAnyArray(str.substring(1)),entries2=[];for(let i2=0;i2{if(void 0===v2)return"u";if(null===v2)return"n";if(!1===v2)return"f";if(!0===v2)return"t";if("number"==typeof v2){const isFloat=!Number.isInteger(v2),b36=v2.toString(36),strNum=v2.toString(),expression=isFloat||b36.length>strNum.length?"n":"N",encodedStr="N"==expression?b36:strNum,len=encodedStr.length.toString(36),lenLen2=len.length;if(!isValidLength(lenLen2))throw new Error("Number length exceeds maximum encodable length of 5 in base36.");return prefixMapNumber[expression][lenLen2]+len+encodedStr}let str,prefix;if("string"==typeof v2){str=v2;prefix="s"}else{prefix="o";const objectStr=JSON.stringify(v2),containUndefined=-1!==Object.values(v2).indexOf(void 0);if(!safer||containUndefined){const objectEncoded=encodeObjectAsArray(v2);str=containUndefined||objectEncoded.lengthvoid 0!==(null==a2?void 0:a2[key3])&&void 0!==(null==b3?void 0:b3[key3])&&isObjectDifferent(null==a2?void 0:a2[key3],null==b3?void 0:b3[key3])).some(e3=>1==e3):keys3.map(key3=>isObjectDifferent(key3 in a2?a2[key3]:SYMBOL_A,key3 in b3?b3[key3]:SYMBOL_B)).some(e3=>1==e3)}return a2!==b3}function reactiveSource(initialValue){return _reactive({initialValue})}function reactive(expression,initialValue){return _reactive({expression,initialValue})}function resetTopologicalSortCacheFor(ids){ids.forEach(id=>topologicalSortCache.delete(id));topologicalSortCache.forEach((value,key3)=>{ids.includes(key3)||topologicalSortCache.delete(key3)})}function topologicalSort(startNode){if(topologicalSortCache.has(startNode.id)){const ref=topologicalSortCache.get(startNode.id);if(ref){const result2=ref.map(e3=>e3.instance.deref()).filter(e3=>e3);if(result2.length===ref.length)return result2}}const visited=new Set,sorted=[],recursionStack=new Set;(function visit(node){if(!visited.has(node)){if(recursionStack.has(node))throw new Error("Circular dependency detected!");visited.add(node);recursionStack.add(node);for(const dependant of node.dependants)visit(dependant);sorted.push(node);recursionStack.delete(node)}})(startNode);const result=sorted.reverse();topologicalSortCache.set(startNode.id,result.map(e3=>({id:e3.id,instance:new FallbackWeakRef(e3)})));return result}function _reactive({expression,initialValue,isSource}){let value,_isDirty=!1;const id=_reactiveSourceId++,changeHandlers=new Set,instance={id,dependants:new Set,_markDirty(){_isDirty||(_isDirty=!0)},markDirty(){topologicalSort(instance).forEach(node=>node._markDirty())},_rippleChanged(){changeHandlers.forEach(e3=>e3(instance))},rippleChanged(){topologicalSort(instance).forEach(node=>node._rippleChanged())},markClean(){_isDirty=!1},get isDirty(){return _isDirty},get value(){if(context&&!instance.dependants.has(context)){instance.dependants.add(context);resetTopologicalSortCacheFor([instance.id,context.id])}if(_isDirty){if(expression){const oldValue=value,newValue=expression();isObjectDifferent(oldValue,newValue)&&(value=newValue)}instance.markClean()}return value},set value(newValue){if(_isDirty&&!expression)value=newValue;else if(isObjectDifferent(value,newValue)){value=newValue;if(!_isDirty){instance.markDirty();instance.rippleChanged()}}},onChanged(handler){changeHandlers.add(handler)},offChanged(handler){changeHandlers.delete(handler)}};value=function initialize(){const previousContext=context;context=instance;const r4=expression?expression(initialValue):initialValue;context=previousContext;return r4}();return instance}function computed(expression){const v2=reactive(expression);return()=>v2.value}async function isSomeResolved(promises){return 0!=promises.length&&await Promise.race([...promises,Promise.resolve(UNRESOLVED)])!==UNRESOLVED}function fireAndForget(p2){if("function"==typeof p2)return fireAndForget(p2());p2.then(noop).catch(noop)}function yieldMicrotask(){return new Promise(res2=>queueMicrotask(res2))}function yieldAnimationFrame(){return new Promise(res2=>requestAnimationFrame(res2))}function yieldNextAnimationFrame(){return currentYieldingAnimationFrame||(currentYieldingAnimationFrame=(async()=>{const ret=await yieldAnimationFrame();currentYieldingAnimationFrame=void 0;return ret})())}function cancelableDelay(timeout,cancel2=TIMED_OUT_SIGNAL){let timer;const promise=promiseWithResolvers();timer=setTimeout(()=>{timer=void 0;promise.resolve(cancel2)},timeout);return{promise:promise.promise,cancel(){if(timer){clearTimeout(timer);timer=void 0}}}}function serialized(key3,proc){var _a8;const prev=serializedMap.get(key3),p2=promiseWithResolvers();queueCount.set(key3,(null!=(_a8=queueCount.get(key3))?_a8:0)+1);const nextTask=async()=>{try{p2.resolve(await proc())}catch(ex){p2.reject(ex)}finally{const count=queueCount.get(key3)-1;if(0===count){serializedMap.delete(key3);queueCount.delete(key3)}else queueCount.set(key3,count)}};if(prev){const newP=prev.then(()=>nextTask());serializedMap.set(key3,newP)}else serializedMap.set(key3,nextTask());return p2.promise}function shareRunningResult(key3,proc){const prev=shareSerializedMap.get(key3);if(prev)return prev;const p2=promiseWithResolvers();shareSerializedMap.set(key3,p2.promise);const task=async()=>{try{p2.resolve(await proc())}catch(ex){p2.reject(ex)}finally{shareSerializedMap.delete(key3)}};fireAndForget(()=>task());return p2.promise}function skipIfDuplicated(key3,proc){if(skipDuplicatedMap.get(key3))return Promise.resolve(null);const p2=promiseWithResolvers();skipDuplicatedMap.set(key3,p2.promise);const task=async()=>{try{p2.resolve(await proc())}catch(ex){p2.reject(ex)}finally{skipDuplicatedMap.delete(key3)}};fireAndForget(()=>task());return p2.promise}async function scheduleOnceIfDuplicated(key3,proc){if(isLockAcquired(key3)){waitingProcessMap.set(key3,proc);return Promise.resolve(void 0)}return await serialized(key3,proc).then(()=>{const nextProc=waitingProcessMap.get(key3);if(nextProc){waitingProcessMap.delete(key3);return scheduleOnceIfDuplicated(key3,nextProc)}})}function isLockAcquired(key3){var _a8;return(null!=(_a8=queueCount.get(key3))?_a8:0)>0}async function waitForSignal(id,timeout){return await globalSlipBoard.awaitNext(GENERIC_COMPATIBILITY_SIGNAL,id,{timeout})!==TIMED_OUT_SIGNAL}function sendSignal(id){globalSlipBoard.submit(GENERIC_COMPATIBILITY_SIGNAL,id)}function sendValue(id,result){globalSlipBoard.submit(GENERIC_COMPATIBILITY_VALUE,id,result)}function unwrapTaskResult(result){if("ok"in result)return result.ok;if("err"in result)return result.err;throw new Error("Argument Exception: Could not unwrap")}function isTaskWaiting(task){if(task instanceof Promise)return!1;if(task instanceof Function)return!0;throw new Error("Invalid state")}async function wrapEachProcess(key3,task){try{return{key:key3,ok:await task}}catch(ex){return{key:key3,err:ex instanceof Error?ex:new Error(`${ex}`)}}}async function*processAllTasksWithConcurrencyLimit(limit,tasks3){const nowProcessing=new Map;let idx2=0;const pendingTasks=tasks3.reverse();for(;pendingTasks.length>0||nowProcessing.size>0;){L2:for(;nowProcessing.size0;){const task=pendingTasks.pop();if(void 0===task)break L2;idx2++;const wrappedPromise=wrapEachProcess(idx2,isTaskWaiting(task)?task():task);nowProcessing.set(idx2,wrappedPromise)}const done=await Promise.race(nowProcessing.values());nowProcessing.delete(done.key);yield done}}async function mapAllTasksWithConcurrencyLimit(limit,tasks3){const results=new Map;for await(const v2 of processAllTasksWithConcurrencyLimit(limit,tasks3))results.set(v2.key,v2);return[...results.entries()].sort((a2,b3)=>a2[0]-b3[0]).map(e3=>e3[1])}function scheduleTask(key3,timeout,proc,skipIfTaskExist){if(tasks.has(key3)){if(skipIfTaskExist)return;cancelTask(key3)}const newTask=setTimeout(()=>{tasks.delete(key3);proc()},timeout);tasks.set(key3,newTask)}function cancelTask(key3){const old=tasks.get(key3);if(old){clearTimeout(old);tasks.delete(key3)}}function cancelAllTasks(){for(const v2 of tasks.keys())cancelTask(v2)}function cancelPeriodicTask(key3){if(key3 in intervals){clearInterval(intervals[key3]);delete intervals[key3]}}function cancelAllPeriodicTask(){for(const v2 in intervals)cancelPeriodicTask(v2)}function isWaitingForTimeout(key3){return waitingItems.has(key3)}function numeric(str){return isNaN(str)?str.charCodeAt(0):parseInt(str,10)}function escapeBraces(str){return str.replace(slashPattern,escSlash).replace(openPattern,escOpen).replace(closePattern,escClose).replace(commaPattern,escComma).replace(periodPattern,escPeriod)}function unescapeBraces(str){return str.replace(escSlashPattern,"\\").replace(escOpenPattern,"{").replace(escClosePattern,"}").replace(escCommaPattern,",").replace(escPeriodPattern,".")}function parseCommaParts(str){if(!str)return[""];const parts=[],m3=balanced("{","}",str);if(!m3)return str.split(",");const{pre,body,post}=m3,p2=pre.split(",");p2[p2.length-1]+="{"+body+"}";const postParts=parseCommaParts(post);if(post.length){p2[p2.length-1]+=postParts.shift();p2.push.apply(p2,postParts)}parts.push.apply(parts,p2);return parts}function expand(str,options={}){if(!str)return[];const{max:max3=EXPANSION_MAX}=options;"{}"===str.slice(0,2)&&(str="\\{\\}"+str.slice(2));return expand_(escapeBraces(str),max3,!0).map(unescapeBraces)}function embrace(str){return"{"+str+"}"}function isPadded(el){return/^-?0\d/.test(el)}function lte(i2,y2){return i2<=y2}function gte(i2,y2){return i2>=y2}function expand_(str,max3,isTop){const expansions=[],m3=balanced("{","}",str);if(!m3)return[str];const pre=m3.pre,post=m3.post.length?expand_(m3.post,max3,!1):[""];if(/\$$/.test(m3.pre))for(let k2=0;k2=0;if(!isSequence&&!isOptions)return m3.post.match(/,(?!,).*\}/)?expand_(str=m3.pre+"{"+m3.body+escClose+m3.post,max3,!0):[str];let n3,N3;if(isSequence)n3=m3.body.split(/\.\./);else{n3=parseCommaParts(m3.body);if(1===n3.length&&void 0!==n3[0]){n3=expand_(n3[0],max3,!1).map(embrace);if(1===n3.length)return post.map(p2=>m3.pre+n3[0]+p2)}}if(isSequence&&void 0!==n3[0]&&void 0!==n3[1]){const x2=numeric(n3[0]),y2=numeric(n3[1]),width=Math.max(n3[0].length,n3[1].length);let incr=3===n3.length&&void 0!==n3[2]?Math.max(Math.abs(numeric(n3[2])),1):1,test=lte;if(y20){const z2=new Array(need+1).join("0");c3=i2<0?"-"+z2+c3.slice(1):z2+c3}}}N3.push(c3)}}else{N3=[];for(let j2=0;j2Uint8Array.fromBase64(e3).buffer),len=bufItems.reduce((p2,c3)=>p2+c3.byteLength,0),joinedArray=new Uint8Array(len);let offset=0;bufItems.forEach(e3=>{joinedArray.set(new Uint8Array(e3),offset);offset+=e3.byteLength});return joinedArray.buffer}catch(ex){Logger("Base64 Decode error",LOG_LEVEL_VERBOSE);Logger(ex,LOG_LEVEL_VERBOSE);return new ArrayBuffer(0)}}function base64ToArrayBufferInternalBrowser(base64){try{const binary_string=globalThis.atob(base64),len=binary_string.length,bytes=new Uint8Array(len);for(let i2=0;i2{const blob=new Blob([buffer],{type:"application/octet-binary"}),reader=new FileReader;reader.onload=function(evt){var _a8,_b5;const dataURI=(null==(_b5=null==(_a8=evt.target)?void 0:_a8.result)?void 0:_b5.toString())||"";if(0!=buffer.byteLength&&(""==dataURI||"data:"==dataURI))return rej(new TypeError("Could not parse the encoded string"));const result=dataURI.substring(dataURI.indexOf(",")+1);res2(result)};reader.readAsDataURL(blob)})}function writeString(string){if(string.length>128)return te.encode(string);const buffer=new Uint8Array(4*string.length),length=string.length;let index6=0,chr=0,idx2=0;for(;idx2>>6;buffer[index6++]=128|63&chr}else if(chr<55296||chr>57343){buffer[index6++]=224|chr>>>12;buffer[index6++]=128|chr>>>6&63;buffer[index6++]=128|63&chr}else{chr=65536+(chr-55296<<10|string.charCodeAt(idx2++)-56320);buffer[index6++]=240|chr>>>18;buffer[index6++]=128|chr>>>12&63;buffer[index6++]=128|chr>>>6&63;buffer[index6++]=128|63&chr}}return buffer.slice(0,index6)}function readString(buffer){const length=buffer.length;if(length>128)return td.decode(buffer);let index6=0;const end=length;let string="";for(;index6>>10)+55296,56320+(1023&code))}}}string+=String.fromCharCode(...chunk)}return string}function*arrayToChunkedArray(arr,chunkLength){const source2=[...arr];for(;source2.length;){const s2=source2.splice(0,chunkLength);yield s2}}function unique(arr){return[...new Set(arr)]}function createTypedArrayReader(buffer){let offset=0;return{read(length){const result=buffer.slice(offset,offset+length);offset+=length;return result},readAll(){const result=buffer.slice(offset);offset=buffer.length;return result}}}function concatUInt8Array(arrays){const totalLength=arrays.reduce((sum2,arr)=>sum2+arr.length,0),result=new Uint8Array(totalLength);let offset=0;for(const array of arrays){result.set(array,offset);offset+=array.length}return result}function decodeToArrayBuffer(src){if(1==src.length)return _decodeToArrayBuffer(src[0]);const bufItems=src.map(e3=>_decodeToArrayBuffer(e3)),len=bufItems.reduce((p2,c3)=>p2+c3.byteLength,0),joinedArray=new Uint8Array(len);let offset=0;bufItems.forEach(e3=>{joinedArray.set(new Uint8Array(e3),offset);offset+=e3.byteLength});return joinedArray.buffer}function _decodeToArrayBuffer(src){const out=new Uint8Array(src.length),len=src.length;for(let i2=0;i2=38&&char<=126&&58!=char?char:revTable[char]}return out.buffer}function concatUInt8Array2(arrays){const length=arrays.reduce((acc,cur)=>acc+cur.length,0),result=new Uint8Array(length);let pos=0;for(const array of arrays){result.set(array,pos);pos+=array.length}return result}function decodeBinary(src){if(0==src.length)return(new Uint8Array).buffer;if("string"==typeof src){if("%"===src[0])return _decodeToArrayBuffer(src.substring(1))}else if("%"===src[0][0]){const[head2,...last]=src;return decodeToArrayBuffer([head2.substring(1),...last])}return base64ToArrayBuffer(src)}function replaceAll(str,search,replace){return"replaceAll"in String.prototype?str.replaceAll(search,replace):str.split(search).join(replace)}function replaceAllPairs(str,...fromTo){let r4=`${str}`;for(const[from,to]of fromTo)r4=replaceAll(r4,from,to);return r4}function escapeStringToHTML(str){return str?str.replace(/[<>&"'`]/g,match3=>({"<":"<",">":">","&":"&",'"':""","'":"'","`":"`"}[match3])):""}async function arrayBufferToBase64Single2(buffer){try{return await arrayBufferToBase64Single(buffer)}catch(ex){const maybeBuffer=null==globalThis?void 0:globalThis.Buffer;if("function"==typeof(null==maybeBuffer?void 0:maybeBuffer.from)){const view=buffer instanceof Uint8Array?buffer:new Uint8Array(buffer);return maybeBuffer.from(view.buffer,view.byteOffset,view.byteLength).toString("base64")}throw ex}}function versionNumberString2Number(version2){return version2.split(".").reverse().map((e3,i2)=>e3/1*1e3**i2).reduce((prev,current)=>prev+current,0)}function isValidFilenameInWidows(filename){return!/[\u0000-\u001f]|[\\":?<>|*#]/g.test(filename)&&!/(\\|\/)(COM\d|LPT\d|CON|PRN|AUX|NUL|CLOCK$)($|\.)/gi.test(filename)}function isValidFilenameInDarwin(filename){return!/[\u0000-\u001f]|[:]/g.test(filename)}function isValidFilenameInLinux(filename){return!/[\u0000-\u001f]|[:]/g.test(filename)}function isValidFilenameInAndroid(filename){return!/[\u0000-\u001f]|[\\":?<>|*#]/g.test(filename)}function isFilePath(path2){return-1===path2.indexOf(":")}function stripAllPrefixes(prefixedPath){if(isFilePath(prefixedPath))return prefixedPath;const[,body]=expandFilePathPrefix(prefixedPath);return stripAllPrefixes(body)}function addPrefix(path2,prefix){return prefix&&path2.startsWith(prefix)?path2:`${null!=prefix?prefix:""}${path2}`}function expandFilePathPrefix(path2){let[prefix,body]=path2.split(":",2);if(body)prefix+=":";else{body=prefix;prefix=""}return[prefix,body]}function expandDocumentIDPrefix(id){let[prefix,body]=id.split(":",2);if(body)prefix+=":";else{body=prefix;prefix=""}return[prefix,body]}function hashString(key3){return _hashString(key3)}async function path2id_base(filenameSrc,obfuscatePassphrase,caseInsensitive){if(filenameSrc.startsWith(PREFIX_OBFUSCATED))return`${filenameSrc}`;let filename=`${filenameSrc}`;const newPrefix=obfuscatePassphrase?PREFIX_OBFUSCATED:"";caseInsensitive&&(filename=filename.toLowerCase());let x2=filename;x2.startsWith("_")&&(x2="/"+x2);if(!obfuscatePassphrase)return newPrefix+x2;const[prefix,body]=expandFilePathPrefix(x2);if(body.startsWith(PREFIX_OBFUSCATED))return newPrefix+x2;const hashedPassphrase=await hashString(obfuscatePassphrase);return prefix+newPrefix+await hashString(`${hashedPassphrase}:${filename}`)}function id2path_base(id,entry){if(entry&&(null==entry?void 0:entry.path))return id2path_base(entry.path);if(id.startsWith(PREFIX_OBFUSCATED))throw new Error("Entry has been obfuscated!");const[prefix,body]=expandDocumentIDPrefix(id);if(body.startsWith(PREFIX_OBFUSCATED))throw new Error("Entry has been obfuscated!");return body.startsWith("/")?body.substring(1):prefix+body}function getPath(entry){return id2path_base(entry._id,entry)}function stripPrefix(prefixedPath){const[prefix,body]=prefixedPath.split(":",2);return body||prefix}function shouldBeIgnored(filename){return filename==FLAGMD_REDFLAG||filename==FLAGMD_REDFLAG2||filename==FLAGMD_REDFLAG2_HR||filename==FLAGMD_REDFLAG3||filename==FLAGMD_REDFLAG3_HR||!!filename.startsWith(PREFIXMD_LOGFILE)||!!filename.startsWith(PREFIXMD_LOGFILE_UC)}function isPlainText(filename){return!!(filename.endsWith(".md")||filename.endsWith(".txt")||filename.endsWith(".svg")||filename.endsWith(".html")||filename.endsWith(".csv")||filename.endsWith(".css")||filename.endsWith(".js")||filename.endsWith(".xml")||filename.endsWith(".canvas"))}function shouldSplitAsPlainText(filename){return!!filename.endsWith(".md")||!!filename.endsWith(".txt")||!!filename.endsWith(".canvas")}function isAccepted(path2,ignore){if(-1!==path2.indexOf("./")||-1!==path2.indexOf("../"))return!1;const patterns=ignore.map(e3=>e3.trim()).filter(e3=>e3.length>0&&!e3.startsWith("#"));let result;for(const pattern of patterns){if(pattern.endsWith("/")&&minimatch(path2,`${pattern}**`,matchOpts))return!1;const newResult=pattern.startsWith("!");(minimatch(path2,pattern,matchOpts)||!pattern.endsWith("/")&&minimatch(path2,pattern+"/**",matchOpts))&&(result=newResult)}return result}async function isAcceptedAll(path2,ignoreFiles,getList){const intermediatePaths=unique(path2.substring(0,path2.lastIndexOf("/")).split("/").reduce((p2,c3)=>[...p2,p2[p2.length-1]+"/"+c3],[""]).map(e3=>e3.substring(1))).reverse();for(const intermediatePath of intermediatePaths)for(const ignoreFile of ignoreFiles){const ignoreFilePath=intermediatePath+"/"+ignoreFile,list=await getList(ignoreFilePath);if(!1===list)continue;const result=isAccepted(path2.substring(intermediatePath.length?intermediatePath.length+1:0),list);if(void 0!==result)return result}return!0}function Semaphore(limit){let counter=0;const _limit=limit,queue2=[];return{get waiting(){return queue2.length},async tryAcquire(quantity=1,timeout){if(counter<_limit){counter+=quantity;return()=>{this.release(quantity)}}const d4=cancelableDelay(timeout,TIMED_OUT_SIGNAL),aq2=this.acquire(quantity),p2=await Promise.race([d4.promise,aq2]);if(p2===TIMED_OUT_SIGNAL){fireAndForget(()=>aq2.then(release=>release()));return!1}return p2},async acquire(quantity=1){if(counter<_limit){counter+=quantity;return()=>this.release()}const n3=promiseWithResolvers();queue2.push(n3);await n3.promise;return()=>{this.release(quantity)}},release(quantity=1){if(queue2.length>0){const next2=queue2.shift();next2&&fireAndForget(async()=>await yieldMicrotask().then(()=>next2.resolve()))}else counter>0&&(counter-=quantity)}}}function isCloudantURI(uri){return-1!==uri.indexOf(".cloudantnosqldb.")||-1!==uri.indexOf(".cloudant.com")}function isErrorOfMissingDoc(ex){return 404==(ex&&(null==ex?void 0:ex.status))}function sizeToHumanReadable(size){const units=["B","KB","MB","GB","TB"];let i2=0;for(;size>=1024&&i2{p2.then(res2).catch(ex=>isErrorOfMissingDoc(ex)?res2(def):rej(ex))})}function getDocData(doc){return"string"==typeof doc?doc:doc.join("")}function getDocDataAsArray(doc){return"string"==typeof doc?[doc]:doc}function isTextBlob(blob){return"text/plain"===blob.type}function createTextBlob(data){const d4=Array.isArray(data)?data:[data];return new Blob(d4,{endings:"transparent",type:"text/plain"})}function createBinaryBlob(data){return new Blob([data],{endings:"transparent",type:"application/octet-stream"})}function createBlob(data){return data instanceof Blob?data:data instanceof Uint8Array||data instanceof ArrayBuffer?createBinaryBlob(data):createTextBlob(data)}function isTextDocument(doc){return"plain"==doc.type||"plain"==doc.datatype||!!isPlainText(doc.path)}function readAsBlob(doc){return isTextDocument(doc)?createTextBlob(doc.data):createBinaryBlob(decodeBinary(doc.data))}function readContent(doc){return isTextDocument(doc)?getDocData(doc.data):decodeBinary(doc.data)}async function isDocContentSame(docA,docB){const blob1=createBlob(docA),blob2=createBlob(docB);if(blob1.size!=blob2.size)return!1;if(isIndexDBCmpExist)return 0===globalThis.indexedDB.cmp(await blob1.arrayBuffer(),await blob2.arrayBuffer());const length=blob1.size;let i2=0;for(;i2set2.add(e3));return set2}function escapeNewLineFromString(str){return-1===str.indexOf("\n")&&-1===str.indexOf("\r")?str:"\\f"+str.replace(/(\n|\r|\\)/g,m3=>`${map[m3]}`)}function unescapeNewLineFromString(str){return str.startsWith("\\f")?str.substring(2).replace(/(\\n|\\r|\\\\)/g,m3=>`${revMap2[m3]}`):str}function escapeMarkdownValue(value){return"string"==typeof value?replaceAllPairs(value,["|","\\|"],["`","\\`"]):value}function timeDeltaToHumanReadable(delta){const sec=delta/1e3;if(sec<60)return`${sec.toFixed(2)}s`;const min=sec/60;if(min<60)return`${min.toFixed(2)}m`;const hour=min/60;if(hour<24)return`${hour.toFixed(2)}h`;const day=hour/24;return day<365?`${day.toFixed(2)}d`:`${(day/365).toFixed(2)}y`}async function wrapException(func){try{return await func()}catch(ex){return ex instanceof Error?ex:new Error(ex)}}function isDirty(key3,value){if(previousValues.get(key3)===value)return!1;previousValues.set(key3,value);return!0}function isSensibleMargeApplicable(path2){return!!path2.endsWith(".md")}function isObjectMargeApplicable(path2){return!!path2.endsWith(".canvas")||!!path2.endsWith(".json")}function tryParseJSON(str,fallbackValue){try{return JSON.parse(str)}catch(e3){return fallbackValue}}function unorderedArrayToObject(obj){return obj.map(e3=>({[e3.id]:e3})).reduce((p2,c3)=>({...p2,...c3}),{})}function objectToUnorderedArray(obj){const entries2=Object.entries(obj);if(entries2.some(e3=>{var _a8;return e3[0]!=(null==(_a8=e3[1])?void 0:_a8.id)}))throw new Error("Item looks like not unordered array");return entries2.map(e3=>e3[1])}function generatePatchUnorderedArray(from,to){if(from.every(e3=>"object"==typeof e3&&"id"in e3)&&to.every(e3=>"object"==typeof e3&&"id"in e3)){const diff=generatePatchObj(unorderedArrayToObject(from),unorderedArrayToObject(to));return Object.keys(diff).length>0?{[MARK_ISARRAY]:diff}:{}}return{[MARK_SWAPPED]:to}}function generatePatchObj(from,to){const entries2=Object.entries(from),tempMap=new Map(entries2),ret={},newEntries=Object.entries(to);for(const[key3,value]of newEntries)if(tempMap.has(key3)){const v2=tempMap.get(key3);if(typeof v2!=typeof value||Array.isArray(v2)!==Array.isArray(value))ret[key3]={[MARK_SWAPPED]:value};else if(null===v2&&null===value);else if(null===v2&&null!==value)ret[key3]={[MARK_SWAPPED]:value};else if(null!==v2&&null===value)ret[key3]={[MARK_SWAPPED]:value};else if("object"!=typeof v2||"object"!=typeof value||Array.isArray(v2)||Array.isArray(value))if("object"==typeof v2&&"object"==typeof value&&Array.isArray(v2)&&Array.isArray(value)){const wk2=generatePatchUnorderedArray(v2,value);Object.keys(wk2).length>0&&(ret[key3]=wk2)}else"object"!=typeof v2&&"object"!=typeof value?JSON.stringify(tempMap.get(key3))!==JSON.stringify(value)&&(ret[key3]=value):JSON.stringify(tempMap.get(key3))!==JSON.stringify(value)&&(ret[key3]={[MARK_SWAPPED]:value});else{const wk2=generatePatchObj(v2,value);Object.keys(wk2).length>0&&(ret[key3]=wk2)}tempMap.delete(key3)}else{ret[key3]=value;tempMap.delete(key3)}for(const[key3]of tempMap)ret[key3]=MARK_DELETED;return ret}function applyPatch(from,patch){const ret=from,patches=Object.entries(patch);for(const[key3,value]of patches)if(value!=MARK_DELETED)if(null!==value)if("object"==typeof value){if(MARK_SWAPPED in value){ret[key3]=value[MARK_SWAPPED];continue}if(MARK_ISARRAY in value){key3 in ret||(ret[key3]=[]);if(!Array.isArray(ret[key3]))throw new Error("Patch target type is mismatched (array to something)");const appliedArray=objectToUnorderedArray(applyPatch(unorderedArrayToObject(ret[key3]),value[MARK_ISARRAY]));ret[key3]=[...appliedArray]}else{if(!(key3 in ret)){ret[key3]=value;continue}ret[key3]=applyPatch(ret[key3],value)}}else ret[key3]=value;else ret[key3]=null;else delete ret[key3];return ret}function mergeObject(objA,objB){const newEntries=Object.entries(objB),ret={...objA};if(typeof objA!=typeof objB||Array.isArray(objA)!==Array.isArray(objB))return objB;for(const[key3,v2]of newEntries)if(key3 in ret){const value=ret[key3];typeof v2!=typeof value||Array.isArray(v2)!==Array.isArray(value)?ret[key3]=v2:"object"!=typeof v2||"object"!=typeof value||Array.isArray(v2)||Array.isArray(value)?"object"==typeof v2&&"object"==typeof value&&Array.isArray(v2)&&Array.isArray(value)?ret[key3]=[...new Set([...v2,...value])]:ret[key3]=v2:ret[key3]=mergeObject(v2,value)}else ret[key3]=v2;const retSorted=Object.fromEntries(Object.entries(ret).sort((a2,b3)=>a2[0]b3[0]?1:0));return Array.isArray(objA)&&Array.isArray(objB)?Object.values(retSorted):retSorted}function flattenObject(obj,path2=[]){if("object"!=typeof obj)return[[path2.join("."),obj]];if(null===obj)return[[path2.join("."),null]];if(Array.isArray(obj))return[[path2.join("."),JSON.stringify(obj)]];const e3=Object.entries(obj),ret=[];for(const[key3,value]of e3){const p2=flattenObject(value,[...path2,key3]);ret.push(...p2)}return ret}function parseHeaderValues(strHeader){const headers={},lines=strHeader.split("\n");for(const line of lines){const[key3,value]=line.split(":",2).map(e3=>e3.trim());key3&&value&&(headers[key3]=value)}return headers}function parseCustomRegExp(regexp){return regexp.startsWith("!!")?[!0,regexp.slice(2)]:[!1,regexp]}function isValidRegExp(regexp){try{const[,exp]=parseCustomRegExp(regexp);new RegExp(exp);return!0}catch(e3){return!1}}function isInvertedRegExp(regexp){const[negate3]=parseCustomRegExp(regexp);return negate3}function parseCustomRegExpList(list,flags2,delimiter){const d4=null!=delimiter?delimiter:",";return`${null!=list?list:""}`.replace(/\n| /g,"").split(d4).filter(e3=>e3).map(e3=>new CustomRegExp(e3,flags2))}function constructCustomRegExpList(items,delimiter){return items.map(e3=>`${e3}`).join(`${delimiter}`)}function splitCustomRegExpList(list,delimiter){const d4=delimiter;return`${null!=list?list:""}`.split(d4).filter(e3=>e3)}function getFileRegExp(settings,key3){const flagCase=settings.handleFilenameCaseSensitive?"":"i";return parseCustomRegExpList(settings[key3],flagCase,"syncInternalFilesIgnorePatterns"===key3||"syncInternalFilesTargetPatterns"===key3||"syncInternalFileOverwritePatterns"===key3?",":"|[]|")}function copyTo(source2,target){for(const key3 of Object.keys(target))target[key3]=source2[key3]}function pickBucketSyncSettings(setting){return{bucket:setting.bucket,region:setting.region,endpoint:setting.endpoint,accessKey:setting.accessKey,secretKey:setting.secretKey,bucketPrefix:setting.bucketPrefix,forcePathStyle:setting.forcePathStyle,useCustomRequestHandler:setting.useCustomRequestHandler,bucketCustomHeaders:setting.bucketCustomHeaders}}function pickCouchDBSyncSettings(setting){return{couchDB_URI:setting.couchDB_URI,couchDB_USER:setting.couchDB_USER,couchDB_PASSWORD:setting.couchDB_PASSWORD,couchDB_DBNAME:setting.couchDB_DBNAME,useRequestAPI:setting.useRequestAPI,couchDB_CustomHeaders:setting.couchDB_CustomHeaders,jwtAlgorithm:setting.jwtAlgorithm,jwtExpDuration:setting.jwtExpDuration,jwtKey:setting.jwtKey,jwtKid:setting.jwtKid,jwtSub:setting.jwtSub,useJWT:setting.useJWT}}function pickEncryptionSettings(setting){return{E2EEAlgorithm:setting.E2EEAlgorithm,encrypt:setting.encrypt,passphrase:setting.passphrase,usePathObfuscation:setting.usePathObfuscation}}function pickP2PSyncSettings(setting){return{P2P_Enabled:setting.P2P_Enabled,P2P_AppID:setting.P2P_AppID,P2P_roomID:setting.P2P_roomID,P2P_passphrase:setting.P2P_passphrase,P2P_relays:setting.P2P_relays,P2P_AutoStart:setting.P2P_AutoStart,P2P_AutoBroadcast:setting.P2P_AutoBroadcast,P2P_DevicePeerName:setting.P2P_DevicePeerName||"",P2P_turnServers:setting.P2P_turnServers,P2P_turnUsername:setting.P2P_turnUsername,P2P_turnCredential:setting.P2P_turnCredential}}function compareMTime(baseMTime,targetMTime){const truncatedBaseMTime=~~(baseMTime/resolution)*resolution,truncatedTargetMTime=~~(targetMTime/resolution)*resolution;if(truncatedBaseMTime==truncatedTargetMTime)return EVEN;if(truncatedBaseMTime>truncatedTargetMTime)return BASE_IS_NEW;if(truncatedBaseMTime{const isError=msg instanceof Error;if(isError&&level<=LOG_LEVEL_VERBOSE){logFunc(msg,level,key3);return}let formattedMsg="string"==typeof msg?msg:isError?msg.message:JSON.stringify(msg);level{resolve=res2;reject=rej}),resolve,reject}}function to_array(value,n3){if(Array.isArray(value))return value;if(void 0===n3||!(Symbol.iterator in value))return Array.from(value);const array=[];for(const element2 of value){array.push(element2);if(array.length===n3)break}return array}function lifecycle_outside_component(name){if(dev_fallback_default){const error=new Error(`lifecycle_outside_component\n\`${name}(...)\` can only be used during component initialisation\nhttps://svelte.dev/e/lifecycle_outside_component`);error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function async_derived_orphan(){if(dev_fallback_default){const error=new Error("async_derived_orphan\nCannot create a `$derived(...)` with an `await` expression outside of an effect tree\nhttps://svelte.dev/e/async_derived_orphan");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/async_derived_orphan")}function bind_invalid_checkbox_value(){if(dev_fallback_default){const error=new Error("bind_invalid_checkbox_value\nUsing `bind:value` together with a checkbox input is not allowed. Use `bind:checked` instead\nhttps://svelte.dev/e/bind_invalid_checkbox_value");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/bind_invalid_checkbox_value")}function derived_references_self(){if(dev_fallback_default){const error=new Error("derived_references_self\nA derived value cannot reference itself recursively\nhttps://svelte.dev/e/derived_references_self");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/derived_references_self")}function effect_in_teardown(rune){if(dev_fallback_default){const error=new Error(`effect_in_teardown\n\`${rune}\` cannot be used inside an effect cleanup function\nhttps://svelte.dev/e/effect_in_teardown`);error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/effect_in_teardown")}function effect_in_unowned_derived(){if(dev_fallback_default){const error=new Error("effect_in_unowned_derived\nEffect cannot be created inside a `$derived` value that was not itself created inside an effect\nhttps://svelte.dev/e/effect_in_unowned_derived");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function effect_orphan(rune){if(dev_fallback_default){const error=new Error(`effect_orphan\n\`${rune}\` can only be used inside an effect (e.g. during component initialisation)\nhttps://svelte.dev/e/effect_orphan`);error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/effect_orphan")}function effect_update_depth_exceeded(){if(dev_fallback_default){const error=new Error("effect_update_depth_exceeded\nMaximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state\nhttps://svelte.dev/e/effect_update_depth_exceeded");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function flush_sync_in_effect(){if(dev_fallback_default){const error=new Error("flush_sync_in_effect\nCannot use `flushSync` inside an effect\nhttps://svelte.dev/e/flush_sync_in_effect");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/flush_sync_in_effect")}function invalid_snippet(){if(dev_fallback_default){const error=new Error("invalid_snippet\nCould not `{@render}` snippet due to the expression being `null` or `undefined`. Consider using optional chaining `{@render snippet?.()}`\nhttps://svelte.dev/e/invalid_snippet");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/invalid_snippet")}function props_invalid_value(key3){if(dev_fallback_default){const error=new Error(`props_invalid_value\nCannot do \`bind:${key3}={undefined}\` when \`${key3}\` has a fallback value\nhttps://svelte.dev/e/props_invalid_value`);error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/props_invalid_value")}function rune_outside_svelte(rune){if(dev_fallback_default){const error=new Error(`rune_outside_svelte\nThe \`${rune}\` rune is only available inside \`.svelte\` and \`.svelte.js/ts\` files\nhttps://svelte.dev/e/rune_outside_svelte`);error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/rune_outside_svelte")}function set_context_after_init(){if(dev_fallback_default){const error=new Error("set_context_after_init\n`setContext` must be called when a component first initializes, not in a subsequent effect or after an `await` expression\nhttps://svelte.dev/e/set_context_after_init");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/set_context_after_init")}function state_descriptors_fixed(){if(dev_fallback_default){const error=new Error("state_descriptors_fixed\nProperty descriptors defined on `$state` objects must contain `value` and always be `enumerable`, `configurable` and `writable`.\nhttps://svelte.dev/e/state_descriptors_fixed");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function state_prototype_fixed(){if(dev_fallback_default){const error=new Error("state_prototype_fixed\nCannot set prototype of `$state` object\nhttps://svelte.dev/e/state_prototype_fixed");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/state_prototype_fixed")}function state_unsafe_mutation(){if(dev_fallback_default){const error=new Error("state_unsafe_mutation\nUpdating state inside `$derived(...)`, `$inspect(...)` or a template expression is forbidden. If the value should not be reactive, declare it without `$state`\nhttps://svelte.dev/e/state_unsafe_mutation");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function svelte_boundary_reset_onerror(){if(dev_fallback_default){const error=new Error("svelte_boundary_reset_onerror\nA `` `reset` function cannot be called while an error is still being handled\nhttps://svelte.dev/e/svelte_boundary_reset_onerror");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}function await_reactivity_loss(name){dev_fallback_default?console.warn(`%c[svelte] await_reactivity_loss\n%cDetected reactivity loss when reading \`${name}\`. This happens when state is read in an async function after an earlier \`await\`\nhttps://svelte.dev/e/await_reactivity_loss`,bold,normal):console.warn("https://svelte.dev/e/await_reactivity_loss")}function await_waterfall(name,location){dev_fallback_default?console.warn(`%c[svelte] await_waterfall\n%cAn async derived, \`${name}\` (${location}) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\nhttps://svelte.dev/e/await_waterfall`,bold,normal):console.warn("https://svelte.dev/e/await_waterfall")}function hydration_attribute_changed(attribute,html2,value){dev_fallback_default?console.warn(`%c[svelte] hydration_attribute_changed\n%cThe \`${attribute}\` attribute on \`${html2}\` changed its value between server and client renders. The client value, \`${value}\`, will be ignored in favour of the server value\nhttps://svelte.dev/e/hydration_attribute_changed`,bold,normal):console.warn("https://svelte.dev/e/hydration_attribute_changed")}function hydration_mismatch(location){dev_fallback_default?console.warn(`%c[svelte] hydration_mismatch\n%c${location?`Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near ${location}`:"Hydration failed because the initial UI does not match what was rendered on the server"}\nhttps://svelte.dev/e/hydration_mismatch`,bold,normal):console.warn("https://svelte.dev/e/hydration_mismatch")}function lifecycle_double_unmount(){dev_fallback_default?console.warn("%c[svelte] lifecycle_double_unmount\n%cTried to unmount a component that was not mounted\nhttps://svelte.dev/e/lifecycle_double_unmount",bold,normal):console.warn("https://svelte.dev/e/lifecycle_double_unmount")}function select_multiple_invalid_value(){dev_fallback_default?console.warn("%c[svelte] select_multiple_invalid_value\n%cThe `value` property of a `
');$$css={hash:"svelte-o3lsbg",code:".svelte-o3lsbg {box-sizing:border-box;}.logpane.svelte-o3lsbg {display:flex;height:100%;flex-direction:column;}.log.svelte-o3lsbg {overflow-y:scroll;user-select:text;-webkit-user-select:text;padding-bottom:2em;}.log.svelte-o3lsbg > pre:where(.svelte-o3lsbg) {margin:0;}.log.svelte-o3lsbg > pre.wrap-right:where(.svelte-o3lsbg) {word-break:break-all;max-width:100%;width:100%;white-space:normal;}.row.svelte-o3lsbg {display:flex;flex-direction:row;justify-content:flex-end;}.row.svelte-o3lsbg > label:where(.svelte-o3lsbg) {display:flex;align-items:center;min-width:5em;margin-right:1em;}"};delegate(["click"]);SvelteItemView=class extends import_obsidian.ItemView{async onOpen(){await super.onOpen();this.contentEl.empty();await this._dismountComponent();this.component=await this.instantiateComponent(this.contentEl)}async _dismountComponent(){if(this.component){await unmount(this.component);this.component=void 0}}async onClose(){await super.onClose();if(this.component){await unmount(this.component);this.component=void 0}}};LogPaneView=class extends SvelteItemView{constructor(leaf,plugin3){super(leaf);this.icon="view-log";this.title="";this.navigation=!1;this.plugin=plugin3}instantiateComponent(target){return mount(LogPane,{target,props:{close:()=>{this.leaf.detach()}}})}getIcon(){return"view-log"}getViewType(){return"log-log"}getDisplayText(){return $msg("logPane.title")}};secp256k1_CURVE={p:BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),n:BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),h:BigInt("1"),a:BigInt("0"),b:BigInt("7"),Gx:BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),Gy:BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8")};var{p:P,n:N,Gx,Gy,b:_b3}=secp256k1_CURVE;lengths={publicKey:1+(L=32),publicKeyUncompressed:65,signature:64,seed:48};captureTrace=(...args)=>{"captureStackTrace"in Error&&"function"==typeof Error.captureStackTrace&&Error.captureStackTrace(...args)};err=(message="")=>{const e3=new Error(message);captureTrace(e3,err);throw e3};isBig=n3=>"bigint"==typeof n3;isStr=s2=>"string"==typeof s2;isBytes=a2=>a2 instanceof Uint8Array||ArrayBuffer.isView(a2)&&"Uint8Array"===a2.constructor.name;abytes=(value,length,title="")=>{const bytes=isBytes(value),len=null==value?void 0:value.length,needsLen=void 0!==length;(!bytes||needsLen&&len!==length)&&err((title&&`"${title}" `)+"expected Uint8Array"+(needsLen?` of length ${length}`:"")+", got "+(bytes?`length=${len}`:"type="+typeof value));return value};u8n=len=>new Uint8Array(len);padh=(n3,pad2)=>n3.toString(16).padStart(pad2,"0");bytesToHex=b3=>Array.from(abytes(b3)).map(e3=>padh(e3,2)).join("");_ch=ch4=>ch4>=48&&ch4<=57?ch4-48:ch4>=65&&ch4<=70?ch4-55:ch4>=97&&ch4<=102?ch4-87:void 0;hexToBytes=hex=>{const e3="hex invalid";if(!isStr(hex))return err(e3);const hl=hex.length,al2=hl/2;if(hl%2)return err(e3);const array=u8n(al2);for(let ai2=0,hi=0;ai2null==globalThis?void 0:globalThis.crypto;subtle=()=>{var _a8,_b5;return null!=(_b5=null==(_a8=cr())?void 0:_a8.subtle)?_b5:err("crypto.subtle must be defined, consider polyfill")};concatBytes=(...arrs)=>{const r4=u8n(arrs.reduce((sum2,a2)=>sum2+abytes(a2).length,0));let pad2=0;arrs.forEach(a2=>{r4.set(a2,pad2);pad2+=a2.length});return r4};randomBytes=(len=L)=>cr().getRandomValues(u8n(len));big=BigInt;arange=(n3,min,max3,msg="bad number: out of range")=>isBig(n3)&&min<=n3&&n3{const r4=a2%b3;return r4>=BigInt("0")?r4:b3+r4};modN=a2=>M(a2,N);invert=(num,md)=>{(num===BigInt("0")||md<=BigInt("0"))&&err("no inverse n="+num+" mod="+md);let a2=M(num,md),b3=md,x2=BigInt("0"),y2=BigInt("1"),u2=BigInt("1"),v2=BigInt("0");for(;a2!==BigInt("0");){const q2=b3/a2,r4=b3%a2,m3=x2-u2*q2,n3=y2-v2*q2;b3=a2,a2=r4,x2=u2,y2=v2,u2=m3,v2=n3}return b3===BigInt("1")?M(x2,md):err("no inverse")};callHash=name=>{const fn=hashes[name];"function"!=typeof fn&&err("hashes."+name+" not set");return fn};apoint=p2=>p2 instanceof Point?p2:err("Point expected");koblitz=x2=>M(M(x2*x2)*x2+_b3);FpIsValid=n3=>arange(n3,BigInt("0"),P);FpIsValidNot0=n3=>arange(n3,BigInt("1"),P);FnIsValidNot0=n3=>arange(n3,BigInt("1"),N);isEven=y2=>(y2&BigInt("1"))===BigInt("0");u8of=n3=>Uint8Array.of(n3);getPrefix=y2=>u8of(isEven(y2)?2:3);lift_x=x2=>{const c3=koblitz(FpIsValidNot0(x2));let r4=BigInt("1");for(let num=c3,e3=(P+BigInt("1"))/BigInt("4");e3>BigInt("0");e3>>=BigInt("1")){e3&BigInt("1")&&(r4=r4*num%P);num=num*num%P}return M(r4*r4)===c3?r4:err("sqrt invalid")};_Point=class _Point{constructor(X2,Y2,Z2){__publicField(this,"X");__publicField(this,"Y");__publicField(this,"Z");this.X=FpIsValid(X2);this.Y=FpIsValidNot0(Y2);this.Z=FpIsValid(Z2);Object.freeze(this)}static CURVE(){return secp256k1_CURVE}static fromAffine(ap2){const{x:x2,y:y2}=ap2;return x2===BigInt("0")&&y2===BigInt("0")?I:new _Point(x2,y2,BigInt("1"))}static fromBytes(bytes){abytes(bytes);const{publicKey:comp,publicKeyUncompressed:uncomp}=lengths;let p2;const length=bytes.length,head2=bytes[0],tail=bytes.subarray(1),x2=sliceBytesNumBE(tail,0,L);if(length===comp&&(2===head2||3===head2)){let y2=lift_x(x2);const evenY=isEven(y2);isEven(big(head2))!==evenY&&(y2=M(-y2));p2=new _Point(x2,y2,BigInt("1"))}length===uncomp&&4===head2&&(p2=new _Point(x2,sliceBytesNumBE(tail,L,64),BigInt("1")));return p2?p2.assertValidity():err("bad point: not on curve")}static fromHex(hex){return _Point.fromBytes(hexToBytes(hex))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}equals(other){const{X:X1,Y:Y1,Z:Z1}=this,{X:X2,Y:Y2,Z:Z2}=apoint(other),X1Z2=M(X1*Z2),X2Z1=M(X2*Z1),Y1Z2=M(Y1*Z2),Y2Z1=M(Y2*Z1);return X1Z2===X2Z1&&Y1Z2===Y2Z1}is0(){return this.equals(I)}negate(){return new _Point(this.X,M(-this.Y),this.Z)}double(){return this.add(this)}add(other){const{X:X1,Y:Y1,Z:Z1}=this,{X:X2,Y:Y2,Z:Z2}=apoint(other),a2=BigInt("0"),b3=_b3;let X3=BigInt("0"),Y3=BigInt("0"),Z3=BigInt("0");const b32=M(b3*BigInt("3"));let t02=M(X1*X2),t12=M(Y1*Y2),t22=M(Z1*Z2),t32=M(X1+Y1),t42=M(X2+Y2);t32=M(t32*t42);t42=M(t02+t12);t32=M(t32-t42);t42=M(X1+Z1);let t52=M(X2+Z2);t42=M(t42*t52);t52=M(t02+t22);t42=M(t42-t52);t52=M(Y1+Z1);X3=M(Y2+Z2);t52=M(t52*X3);X3=M(t12+t22);t52=M(t52-X3);Z3=M(a2*t42);X3=M(b32*t22);Z3=M(X3+Z3);X3=M(t12-Z3);Z3=M(t12+Z3);Y3=M(X3*Z3);t12=M(t02+t02);t12=M(t12+t02);t22=M(a2*t22);t42=M(b32*t42);t12=M(t12+t22);t22=M(t02-t22);t22=M(a2*t22);t42=M(t42+t22);t02=M(t12*t42);Y3=M(Y3+t02);t02=M(t52*t42);X3=M(t32*X3);X3=M(X3-t02);t02=M(t32*t12);Z3=M(t52*Z3);Z3=M(Z3+t02);return new _Point(X3,Y3,Z3)}subtract(other){return this.add(apoint(other).negate())}multiply(n3,safe=!0){if(!safe&&n3===BigInt("0"))return I;FnIsValidNot0(n3);if(n3===BigInt("1"))return this;if(this.equals(G))return wNAF(n3).p;let p2=I,f4=G;for(let d4=this;n3>BigInt("0");d4=d4.double(),n3>>=BigInt("1"))n3&BigInt("1")?p2=p2.add(d4):safe&&(f4=f4.add(d4));return p2}multiplyUnsafe(scalar){return this.multiply(scalar,!1)}toAffine(){const{X:x2,Y:y2,Z:z2}=this;if(this.equals(I))return{x:BigInt("0"),y:BigInt("0")};if(z2===BigInt("1"))return{x:x2,y:y2};const iz=invert(z2,P);M(z2*iz)!==BigInt("1")&&err("inverse invalid");return{x:M(x2*iz),y:M(y2*iz)}}assertValidity(){const{x:x2,y:y2}=this.toAffine();FpIsValidNot0(x2);FpIsValidNot0(y2);return M(y2*y2)===koblitz(x2)?this:err("bad point: not on curve")}toBytes(isCompressed=!0){const{x:x2,y:y2}=this.assertValidity().toAffine(),x32b=numTo32b(x2);return isCompressed?concatBytes(getPrefix(y2),x32b):concatBytes(u8of(4),x32b,numTo32b(y2))}toHex(isCompressed){return bytesToHex(this.toBytes(isCompressed))}};__publicField(_Point,"BASE");__publicField(_Point,"ZERO");G=new(Point=_Point)(Gx,Gy,BigInt("1"));I=new Point(BigInt("0"),BigInt("1"),BigInt("0"));Point.BASE=G;Point.ZERO=I;doubleScalarMulUns=(R2,u1,u2)=>G.multiply(u1,!1).add(R2.multiply(u2,!1)).assertValidity();bytesToNumBE=b3=>big("0x"+(bytesToHex(b3)||"0"));sliceBytesNumBE=(b3,from,to)=>bytesToNumBE(b3.subarray(from,to));B256=BigInt("2")**BigInt("256");numTo32b=num=>hexToBytes(padh(arange(num,BigInt("0"),B256),64));secretKeyToScalar=secretKey2=>{const num=bytesToNumBE(abytes(secretKey2,L,"secret key"));return arange(num,BigInt("1"),N,"invalid secret key: outside of range")};0;getPublicKey=(privKey,isCompressed=!0)=>G.multiply(secretKeyToScalar(privKey)).toBytes(isCompressed);0;assertSigFormat=format2=>{null==format2||ALL_SIG.includes(format2)||err(`Signature format must be one of: ${ALL_SIG.join(", ")}`);format2===SIG_DER&&err('Signature format "der" is not supported: switch to noble-curves')};0;0;ALL_SIG=[SIG_COMPACT="compact",SIG_RECOVERED="recovered",SIG_DER="der"];hashes={hmacSha256Async:async(key3,message)=>{const s2=subtle(),k2=await s2.importKey("raw",key3,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"]);return u8n(await s2.sign("HMAC",k2,message))},hmacSha256:void 0,sha256Async:async msg=>u8n(await subtle().digest("SHA-256",msg)),sha256:void 0};u8n(0);u8of(0);u8of(1);randomSecretKey=(seed=randomBytes(lengths.seed))=>{abytes(seed);(seed.length1024)&&err("expected 40-1024b");const num=M(bytesToNumBE(seed),N-BigInt("1"));return numTo32b(num+BigInt("1"))};(createKeygen=getPublicKey2=>seed=>{const secretKey2=randomSecretKey(seed);return{secretKey:secretKey2,publicKey:getPublicKey2(secretKey2)}})(getPublicKey);getTag=tag3=>Uint8Array.from("BIP0340/"+tag3,c3=>c3.charCodeAt(0));taggedHash=(tag3,...messages)=>{const fn=callHash("sha256"),tagH=fn(getTag(tag3));return fn(concatBytes(tagH,tagH,...messages))};taggedHashAsync=async(tag3,...messages)=>{const fn=hashes.sha256Async,tagH=await fn(getTag(tag3));return await fn(concatBytes(tagH,tagH,...messages))};extpubSchnorr=priv=>{const d_=secretKeyToScalar(priv),p2=G.multiply(d_),{x:x2,y:y2}=p2.assertValidity().toAffine();return{d:isEven(y2)?d_:modN(-d_),px:numTo32b(x2)}};bytesModN=bytes=>modN(bytesToNumBE(bytes));challenge=(...args)=>bytesModN(taggedHash("challenge",...args));challengeAsync=async(...args)=>bytesModN(await taggedHashAsync("challenge",...args));keygenSchnorr=createKeygen(pubSchnorr=secretKey2=>extpubSchnorr(secretKey2).px);prepSigSchnorr=(message,secretKey2,auxRand)=>{const{px,d:d4}=extpubSchnorr(secretKey2);return{m:abytes(message),px,d:d4,a:abytes(auxRand,L)}};extractK=rand=>{const k_=bytesModN(rand);k_===BigInt("0")&&err("sign failed: k is zero");const{px,d:d4}=extpubSchnorr(numTo32b(k_));return{rx:px,k:d4}};createSigSchnorr=(k2,px,e3,d4)=>concatBytes(px,numTo32b(modN(k2+e3*d4)));E_INVSIG="invalid signature produced";callSyncAsyncFn=(res2,later)=>res2 instanceof Promise?res2.then(later):later(res2);_verifSchnorr=(signature,message,publicKey2,challengeFn)=>{const sig=abytes(signature,64,"signature"),msg=abytes(message,void 0,"message"),pub=abytes(publicKey2,L,"publicKey");try{const x2=bytesToNumBE(pub),y2=lift_x(x2),y_=isEven(y2)?y2:M(-y2),P_=new Point(x2,y_,BigInt("1")).assertValidity(),px=numTo32b(P_.toAffine().x),r4=sliceBytesNumBE(sig,0,L);arange(r4,BigInt("1"),P);const s2=sliceBytesNumBE(sig,L,64);arange(s2,BigInt("1"),N);const i2=concatBytes(numTo32b(r4),px,msg);return callSyncAsyncFn(challengeFn(i2),e3=>{const{x:x3,y:y3}=doubleScalarMulUns(P_,s2,modN(-e3)).toAffine();return!(!isEven(y3)||x3!==r4)})}catch(error){return!1}};schnorr={keygen:keygenSchnorr,getPublicKey:pubSchnorr,sign:(message,secretKey2,auxRand=randomBytes(L))=>{const{m:m3,px,d:d4,a:a2}=prepSigSchnorr(message,secretKey2,auxRand),aux=taggedHash("aux",a2),t9=numTo32b(d4^bytesToNumBE(aux)),rand=taggedHash("nonce",t9,px,m3),{rx,k:k2}=extractK(rand),e3=challenge(rx,px,m3),sig=createSigSchnorr(k2,rx,e3,d4);verifySchnorr(sig,m3,px)||err(E_INVSIG);return sig},verify:verifySchnorr=(s2,m3,p2)=>_verifSchnorr(s2,m3,p2,challenge),signAsync:async(message,secretKey2,auxRand=randomBytes(L))=>{const{m:m3,px,d:d4,a:a2}=prepSigSchnorr(message,secretKey2,auxRand),aux=await taggedHashAsync("aux",a2),t9=numTo32b(d4^bytesToNumBE(aux)),rand=await taggedHashAsync("nonce",t9,px,m3),{rx,k:k2}=extractK(rand),e3=await challengeAsync(rx,px,m3),sig=createSigSchnorr(k2,rx,e3,d4);await verifySchnorrAsync(sig,m3,px)||err(E_INVSIG);return sig},verifyAsync:verifySchnorrAsync=async(s2,m3,p2)=>_verifSchnorr(s2,m3,p2,challengeAsync)};pwindows=Math.ceil(32)+1;precompute=()=>{const points=[];let p2=G,b3=p2;for(let w2=0;w2{const n3=p2.negate();return cnd?n3:p2};wNAF=n3=>{const comp=Gpows||(Gpows=precompute());let p2=I,f4=G;const mask=big(255),shiftBy=big(8);for(let w2=0;w2>=shiftBy;if(wbits2>128){wbits2-=256;n3+=BigInt("1")}const off=128*w2,offF=off,offP=off+Math.abs(wbits2)-1,isEven2=w2%2!=0,isNeg=wbits2<0;0===wbits2?f4=f4.add(ctneg(isEven2,comp[offF])):p2=p2.add(ctneg(isNeg,comp[offP]))}n3!==BigInt("0")&&err("invalid wnaf");return{p:p2,f:f4}};var{floor,random,sin}=Math;libName="Trystero";alloc=(n3,f4)=>Array(n3).fill(void 0).map(f4);selfId=(genId=n3=>alloc(n3,()=>{var _a8;return null!=(_a8="0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"[floor(62*random())])?_a8:""}).join(""))(20);all=Promise.all.bind(Promise);isBrowser="undefined"!=typeof window;var{entries,fromEntries,keys,values}=Object;noOp=()=>{};resetTimer=timer=>{null!==timer&&clearTimeout(timer);return null};mkErr=msg=>new Error(`${libName}: ${msg}`);toErrorMessage=(reason,fallback3)=>reason instanceof Error&&reason.message?reason.message:"string"==typeof reason&&reason?reason:toJson(null!=reason?reason:fallback3);toError=(reason,fallback3)=>reason instanceof Error?reason:mkErr(toErrorMessage(reason,fallback3));encoder=new TextEncoder;decoder=new TextDecoder;encodeBytes=txt=>encoder.encode(txt);decodeBytes=buffer=>decoder.decode(buffer);toHex=buffer=>buffer.reduce((a2,c3)=>a2+c3.toString(16).padStart(2,"0"),"");topicPath=(...parts)=>parts.join("@");shuffle=(xs,seed)=>{const a2=[...xs],rand=()=>{const x2=1e4*sin(seed++);return x2-floor(x2)};let i2=a2.length;for(;i2;){const j2=floor(rand()*i2--),tmp=a2[i2];a2[i2]=a2[j2];a2[j2]=tmp}return a2};getRelays=(config,defaults2,defaultN,deriveFromAppId=!1)=>{var _a8;return config.relayUrls||(deriveFromAppId?shuffle(defaults2,strToNum(config.appId)):defaults2).slice(0,null!=(_a8=config.relayRedundancy)?_a8:defaultN)};toJson=JSON.stringify;fromJson=s2=>{try{return JSON.parse(s2)}catch(e3){throw mkErr(`failed to parse JSON: ${s2}`)}};strToNum=(str,limit=Number.MAX_SAFE_INTEGER)=>str.split("").reduce((a2,c3)=>a2+c3.charCodeAt(0),0)%limit;socketRetryPeriods={};reconnectionLockingPromise=null;resolver=null;pauseRelayReconnection=()=>{reconnectionLockingPromise||(reconnectionLockingPromise=new Promise(resolve=>{resolver=resolve}).finally(()=>{resolver=null;reconnectionLockingPromise=null}))};resumeRelayReconnection=()=>{null==resolver||resolver()};makeSocket=(url,onMessage)=>{const client={},init3=()=>{const socket=new WebSocket(url);socket.onclose=()=>{if(reconnectionLockingPromise)reconnectionLockingPromise.then(init3);else{null!=socketRetryPeriods[url]||(socketRetryPeriods[url]=3333);setTimeout(init3,socketRetryPeriods[url]);socketRetryPeriods[url]*=2}};socket.onmessage=e3=>onMessage(String(e3.data));client.socket=socket;client.url=socket.url;client.ready=new Promise(res2=>socket.onopen=()=>{res2(client);socketRetryPeriods[url]=3333});client.send=data=>{1===socket.readyState&&socket.send(data)}};init3();return client};createRelayManager=getSocket=>{const relays={},keysByRelay=new WeakMap,keyOf=relay=>{const key3=keysByRelay.get(relay);if(!key3)throw mkErr("relay bookkeeping missing registration for relay client");return key3};return{register:(key3,relay)=>{relays[key3]=relay;keysByRelay.set(relay,key3);return relay},keyOf,scoped:()=>{const store={},forKey=key3=>{var _a8;return null!=(_a8=store[key3])?_a8:store[key3]={}};return{forKey,forRelay:relay=>forKey(keyOf(relay))}},getSockets:()=>fromEntries(entries(relays).flatMap(([key3,relay])=>{const socket=getSocket(relay);return socket?[[key3,socket]]:[]}))}};watchOnline=()=>{if(isBrowser){const controller=new AbortController;addEventListener("online",resumeRelayReconnection,{signal:controller.signal});addEventListener("offline",pauseRelayReconnection,{signal:controller.signal});return()=>controller.abort()}return noOp};strToSha1={};pack=buff=>btoa(String.fromCharCode.apply(null,Array.from(new Uint8Array(buff))));unpack=packed=>{const str=atob(packed);return new Uint8Array(str.length).map((_,i2)=>str.charCodeAt(i2)).buffer};hashWith=async(algorithm,str)=>new Uint8Array(await crypto.subtle.digest(algorithm,encodeBytes(str)));sha1=async str=>{var _a8;return null!=(_a8=strToSha1[str])?_a8:strToSha1[str]=Array.from(await hashWith("SHA-1",str)).map(b3=>b3.toString(36)).join("")};genKey=async(secret,appId,roomId)=>crypto.subtle.importKey("raw",await crypto.subtle.digest({name:"SHA-256"},encodeBytes(`${secret}:${appId}:${roomId}`)),{name:"AES-GCM"},!1,["encrypt","decrypt"]);deriveRoomNamespace=async(appId,roomId)=>toHex(await hashWith("SHA-256",`${libName}:${appId}:${roomId}`));encrypt=async(keyP,plaintext)=>{const iv=crypto.getRandomValues(new Uint8Array(16));return iv.join(",")+"$"+pack(await crypto.subtle.encrypt({name:"AES-GCM",iv},await keyP,encodeBytes(plaintext)))};decrypt=async(keyP,raw)=>{var _a8;const[iv,c3]=raw.split("$");return decodeBytes(await crypto.subtle.decrypt({name:"AES-GCM",iv:new Uint8Array(null!=(_a8=null==iv?void 0:iv.split(",").map(Number))?_a8:[])},await keyP,unpack(null!=c3?c3:"")))};OfferPool=class{constructor(makeOffer){__publicField(this,"pool",[]);__publicField(this,"pooled",new Set);__publicField(this,"leased",new Map);__publicField(this,"recycling",new Set);__publicField(this,"cleanupTimer",null);__publicField(this,"active",!1);this.makeOffer=makeOffer}get isActive(){return this.active}warmup(){this.pool=[];this.pooled.clear();alloc(20,this.makeOffer).forEach(p2=>this.push(p2));this.active=!0;this.cleanupTimer=setInterval(()=>{this.pool=this.pool.filter(peer=>{if(peer.isDead){this.pooled.delete(peer);return!1}return!0})},57333)}push(peer){if(!(peer.isDead||this.pooled.has(peer)||this.leased.has(peer))){this.pool.push(peer);this.pooled.add(peer)}}shift(n3){const peers=[];for(;peers.length0;){const peer=this.pool.shift();if(!peer)break;this.pooled.delete(peer);peers.push(peer)}return peers}claimLeased(peer){const timer=this.leased.get(peer);if(timer){resetTimer(timer);this.leased.delete(peer)}}recycle(peer){if(!peer.isDead&&!this.recycling.has(peer))if(peer.connection.remoteDescription)peer.destroy();else if(this.active){this.recycling.add(peer);peer.setHandlers({connect:noOp,close:noOp,error:noOp});peer.getOffer(!0).then(offer=>{offer&&"offer"===offer.type&&!peer.isDead&&this.active?this.push(peer):peer.destroy()}).catch(()=>peer.destroy()).finally(()=>this.recycling.delete(peer))}else peer.destroy()}reclaimLeased(peer){const timer=this.leased.get(peer);if(timer){resetTimer(timer);this.leased.delete(peer);this.recycle(peer)}}lease(peer){this.claimLeased(peer);this.leased.set(peer,setTimeout(()=>{this.leased.delete(peer);this.recycle(peer)},18e4))}checkout(n3,leaseOffers,encryptOffer){const peers=this.shift(n3),missing=Math.max(0,n3-peers.length);missing>0&&peers.push(...alloc(missing,this.makeOffer));const toRecord=async(candidate,didRetry=!1)=>{try{const offer=await encryptOffer(candidate);if(leaseOffers){this.lease(candidate);return{peer:candidate,offer,claim:()=>this.claimLeased(candidate),reclaim:()=>this.reclaimLeased(candidate)}}return{peer:candidate,offer}}catch(err3){this.claimLeased(candidate);this.pooled.delete(candidate);candidate.destroy();if(!didRetry)return toRecord(this.makeOffer(),!0);throw err3}};return all(peers.map(peer=>toRecord(peer)))}getOffers(n3,encryptOffer){return this.checkout(n3,!0,encryptOffer)}destroy(){this.active=!1;if(this.cleanupTimer){clearInterval(this.cleanupTimer);this.cleanupTimer=null}this.pool.forEach(peer=>peer.destroy());this.pool=[];this.pooled.clear();this.leased.forEach((timeout,peer)=>{resetTimer(timeout);peer.destroy()});this.leased.clear();this.recycling.forEach(peer=>peer.destroy());this.recycling.clear()}};overlapRoomPasswordErr=mkErr("incorrect password for overlapping room");createPasswordHandshake=(password,appId,roomId)=>{const hashChallenge=challenge2=>hashWith("SHA-256",`${challenge2}:${password}:${appId}:${roomId}`).then(toHex),run3=async(send,receive,isInitiator)=>{if(!password)return;if(isInitiator){const challenge2=genId(36);await send({__trystero_pw:"challenge",c:challenge2});const{data:data2}=await receive();if(!data2||"object"!=typeof data2||"response"!==data2.__trystero_pw||"string"!=typeof data2.h)throw overlapRoomPasswordErr;const expected=await hashChallenge(challenge2);if(data2.h!==expected)throw overlapRoomPasswordErr;return}const{data}=await receive();if(!data||"object"!=typeof data||"challenge"!==data.__trystero_pw||"string"!=typeof data.c)throw overlapRoomPasswordErr;await send({__trystero_pw:"response",h:await hashChallenge(data.c)})};return{run:run3,compose:userHandshake=>password||userHandshake?async(peerId,send,receive,isInitiator)=>{await run3(send,receive,isInitiator);await(null==userHandshake?void 0:userHandshake(peerId,send,receive,isInitiator))}:void 0}};outOfRangePattern=/out of range/i;rewriteMdnsCandidatesToLoopback=sdp=>sdp.replace(/ (\S+\.local) (\d+) typ host/g," 127.0.0.1 $2 typ host");peer_default=(initiator,{trickleIce,rtcConfig,rtcPolyfill,turnConfig,_test_only_mdnsHostFallbackToLoopback})=>{const pc=new(null!=rtcPolyfill?rtcPolyfill:RTCPeerConnection)({iceServers:defaultIceServers.concat(null!=turnConfig?turnConfig:[]),...rtcConfig}),handlers3={},pendingSignals=[],pendingData=[],shouldTrickleIce=!1!==trickleIce,pendingRemoteCandidates=[],pendingTracks=[];let makingOffer=!1,isSettingRemoteAnswerPending=!1,dataChannel=null,disconnectedCloseTimer=null,didEmitClose=!1;const clearDisconnectedCloseTimer=()=>disconnectedCloseTimer=resetTimer(disconnectedCloseTimer),emitClose=()=>{var _a8;if(!didEmitClose){didEmitClose=!0;clearDisconnectedCloseTimer();null==(_a8=handlers3.close)||_a8.call(handlers3)}},emitSignal=signal=>{handlers3.signal?handlers3.signal(signal):pendingSignals.push(signal)},appendSignalHandler=handler=>{const previousSignalHandler=handlers3.signal;handlers3.signal=signal=>{null==previousSignalHandler||previousSignalHandler(signal);handler(signal)};pendingSignals.length>0&&pendingSignals.splice(0).forEach(signal=>{var _a8;return null==(_a8=handlers3.signal)?void 0:_a8.call(handlers3,signal)})},normalizeSdp=sdp=>_test_only_mdnsHostFallbackToLoopback?rewriteMdnsCandidatesToLoopback(sdp):sdp,normalizeCandidate=candidate=>{if(!_test_only_mdnsHostFallbackToLoopback||"string"!=typeof candidate.candidate)return candidate;const normalizedCandidate=rewriteMdnsCandidatesToLoopback(candidate.candidate);return normalizedCandidate===candidate.candidate?candidate:{...candidate,candidate:normalizedCandidate}},localDescriptionSignal=peerConnection=>{var _a8,_b5,_c3,_d2;return{type:null!=(_b5=null==(_a8=peerConnection.localDescription)?void 0:_a8.type)?_b5:"offer",sdp:normalizeSdp(null!=(_d2=null==(_c3=peerConnection.localDescription)?void 0:_c3.sdp)?_d2:"")}},getRemoteUfrag=()=>{var _a8,_b5,_c3;const sdp=null==(_a8=pc.remoteDescription)?void 0:_a8.sdp;return sdp&&null!=(_c3=null==(_b5=sdp.match(/a=ice-ufrag:([^\s]+)/))?void 0:_b5[1])?_c3:null},getRemoteMediaSectionCount=()=>{var _a8,_b5,_c3;return(null!=(_c3=null==(_b5=null==(_a8=pc.remoteDescription)?void 0:_a8.sdp)?void 0:_b5.match(/^m=/gm))?_c3:[]).length},canApplyRemoteCandidate=candidate=>{if(!pc.remoteDescription)return!1;const remoteMLineCount=getRemoteMediaSectionCount();if("number"==typeof candidate.sdpMLineIndex&&remoteMLineCount>0&&candidate.sdpMLineIndex>=remoteMLineCount)return!1;const remoteUfrag=getRemoteUfrag();return!remoteUfrag||!candidate.usernameFragment||candidate.usernameFragment===remoteUfrag},addIceCandidateSafe=async candidate=>{try{await pc.addIceCandidate(candidate);return!0}catch(err3){if(err3 instanceof Error&&outOfRangePattern.test(err3.message)&&"number"==typeof candidate.sdpMLineIndex)return!1;throw err3}},flushPendingRemoteCandidates=async()=>{if(!pc.remoteDescription||0===pendingRemoteCandidates.length)return;const queuedCandidates=pendingRemoteCandidates.splice(0),stillPending=[];for(const candidate of queuedCandidates)canApplyRemoteCandidate(candidate)&&await addIceCandidateSafe(candidate)||stillPending.push(candidate);stillPending.length>0&&pendingRemoteCandidates.push(...stillPending)},addRemoteCandidate=async candidate=>{canApplyRemoteCandidate(candidate)&&await addIceCandidateSafe(candidate)||pendingRemoteCandidates.push(candidate)},setupDataChannel=channel=>{channel.binaryType="arraybuffer";channel.bufferedAmountLowThreshold=65535;channel.onmessage=e3=>{const data=e3.data;handlers3.data?handlers3.data(data):pendingData.push(data)};channel.onopen=()=>{var _a8;return null==(_a8=handlers3.connect)?void 0:_a8.call(handlers3)};channel.onclose=emitClose;channel.onerror=({error})=>{var _a8;return null==(_a8=handlers3.error)?void 0:_a8.call(handlers3,toError(error,"data channel error"))}},waitForIceGathering=async peerConnection=>{let timeout=null;try{await Promise.race([new Promise(res2=>{const checkState5=()=>{if("complete"===peerConnection.iceGatheringState){peerConnection.removeEventListener("icegatheringstatechange",checkState5);res2()}};peerConnection.addEventListener("icegatheringstatechange",checkState5);checkState5()}),new Promise(res2=>{timeout=setTimeout(res2,15e3)})])}finally{resetTimer(timeout)}return localDescriptionSignal(peerConnection)},emitLocalDescriptionSignal=async()=>{const signal=shouldTrickleIce?localDescriptionSignal(pc):await waitForIceGathering(pc);emitSignal(signal);return signal};if(initiator){dataChannel=pc.createDataChannel("data");setupDataChannel(dataChannel)}else pc.ondatachannel=({channel})=>{dataChannel=channel;setupDataChannel(channel)};const createOffer=async(restartIce=!1)=>{var _a8,_b5;if("closed"!==pc.connectionState)try{makingOffer=!0;if(restartIce){"stable"!==pc.signalingState&&"closed"!==pc.signalingState&&"offer"===(null==(_a8=pc.localDescription)?void 0:_a8.type)&&await pc.setLocalDescription({type:"rollback"});"function"==typeof pc.restartIce&&pc.restartIce()}await pc.setLocalDescription(restartIce?await pc.createOffer({iceRestart:!0}):void 0);return await emitLocalDescriptionSignal()}catch(err3){null==(_b5=handlers3.error)||_b5.call(handlers3,toError(err3,"failed to create local offer"))}finally{makingOffer=!1}};pc.onnegotiationneeded=async()=>createOffer(!1);pc.onicecandidate=({candidate})=>{if(!shouldTrickleIce||!candidate)return;const candidatePayload=normalizeCandidate("function"==typeof candidate.toJSON?candidate.toJSON():{candidate:candidate.candidate,sdpMid:candidate.sdpMid,sdpMLineIndex:candidate.sdpMLineIndex,usernameFragment:candidate.usernameFragment});emitSignal({type:"candidate",sdp:JSON.stringify(candidatePayload)})};pc.onconnectionstatechange=()=>{"connected"!==pc.connectionState&&"connecting"!==pc.connectionState?"disconnected"!==pc.connectionState?"failed"!==pc.connectionState&&"closed"!==pc.connectionState||emitClose():disconnectedCloseTimer||(disconnectedCloseTimer=setTimeout(()=>{disconnectedCloseTimer=null;"disconnected"===pc.connectionState&&emitClose()},5e3)):clearDisconnectedCloseTimer()};pc.ontrack=e3=>{var _a8,_b5;const stream=e3.streams[0];if(stream){if(!handlers3.track&&!handlers3.stream){pendingTracks.push({track:e3.track,stream});return}null==(_a8=handlers3.track)||_a8.call(handlers3,e3.track,stream);null==(_b5=handlers3.stream)||_b5.call(handlers3,stream)}};pc.onremovestream=e3=>{var _a8;return null==(_a8=handlers3.stream)?void 0:_a8.call(handlers3,e3.stream)};const offerPromise=initiator?new Promise(res2=>appendSignalHandler(signal=>{"offer"===signal.type&&res2(signal)})):Promise.resolve();initiator&&queueMicrotask(()=>{var _a8;makingOffer||"stable"!==pc.signalingState||pc.localDescription||"closed"===pc.connectionState||null==(_a8=pc.onnegotiationneeded)||_a8.call(pc,new Event("negotiationneeded"))});return{created:Date.now(),connection:pc,get channel(){return dataChannel},get isDead(){return"closed"===pc.connectionState},getOffer:async(restartIce=!1)=>{var _a8;if(initiator)return restartIce?createOffer(!0):"offer"===(null==(_a8=pc.localDescription)?void 0:_a8.type)?shouldTrickleIce?localDescriptionSignal(pc):waitForIceGathering(pc):offerPromise},async signal(sdp){var _a8,_b5,_c3;if("candidate"!==sdp.type){if("open"!==(null==dataChannel?void 0:dataChannel.readyState)||(null==(_b5=sdp.sdp)?void 0:_b5.includes("a=rtpmap")))try{const rtcSdp={...sdp,sdp:normalizeSdp(sdp.sdp)};if("offer"===sdp.type){if(makingOffer||"stable"!==pc.signalingState&&!isSettingRemoteAnswerPending){if(initiator)return;await all([pc.setLocalDescription({type:"rollback"}),pc.setRemoteDescription(rtcSdp)])}else await pc.setRemoteDescription(rtcSdp);await flushPendingRemoteCandidates();await pc.setLocalDescription();return await emitLocalDescriptionSignal()}if("answer"===sdp.type){isSettingRemoteAnswerPending=!0;try{await pc.setRemoteDescription(rtcSdp);await flushPendingRemoteCandidates()}finally{isSettingRemoteAnswerPending=!1}}}catch(err3){null==(_c3=handlers3.error)||_c3.call(handlers3,toError(err3,"failed to apply remote signal"))}}else try{const candidate=JSON.parse(sdp.sdp);candidate&&"object"==typeof candidate&&await addRemoteCandidate(normalizeCandidate(candidate))}catch(err3){null==(_a8=handlers3.error)||_a8.call(handlers3,toError(err3,"failed to parse remote candidate"))}},sendData:data=>null==dataChannel?void 0:dataChannel.send(data),destroy:()=>{clearDisconnectedCloseTimer();null==dataChannel||dataChannel.close();pc.close();makingOffer=!1;isSettingRemoteAnswerPending=!1;emitClose()},setHandlers:newHandlers=>{const{signal,...restHandlers}=newHandlers;Object.assign(handlers3,restHandlers);handlers3.data&&pendingData.length>0&&pendingData.splice(0).forEach(data=>{var _a8;return null==(_a8=handlers3.data)?void 0:_a8.call(handlers3,data)});signal&&appendSignalHandler(signal);(handlers3.track||handlers3.stream)&&pendingTracks.length>0&&pendingTracks.splice(0).forEach(({track,stream})=>{var _a8,_b5;null==(_a8=handlers3.track)||_a8.call(handlers3,track,stream);null==(_b5=handlers3.stream)||_b5.call(handlers3,stream)})},offerPromise,addStream:stream=>stream.getTracks().forEach(track=>pc.addTrack(track,stream)),removeStream:stream=>pc.getSenders().filter(sender=>sender.track&&stream.getTracks().includes(sender.track)).forEach(sender=>pc.removeTrack(sender)),addTrack:(track,stream)=>pc.addTrack(track,stream),removeTrack:track=>{const sender=pc.getSenders().find(s2=>s2.track===track);sender&&pc.removeTrack(sender)},replaceTrack:(oldTrack,newTrack)=>{const sender=pc.getSenders().find(s2=>s2.track===oldTrack);if(sender)return sender.replaceTrack(newTrack)}}};defaultIceServers=[...alloc(3,(_,i2)=>`stun:stun${i2||""}.l.google.com:19302`),"stun:stun.cloudflare.com:3478"].map(url=>({urls:url}));TypedArray=Object.getPrototypeOf(Uint8Array);chunkSize=16384-(payloadIndex=1+(progressIndex=1+34));internalNs=ns=>"@_"+ns;beforeUnloadRoomCleanups=new Set;cleanupActiveRoomsOnBeforeUnload=()=>beforeUnloadRoomCleanups.forEach(cleanup=>cleanup());registerBeforeUnloadCleanup=cleanup=>{beforeUnloadRoomCleanups.add(cleanup);1===beforeUnloadRoomCleanups.size&&addEventListener("beforeunload",cleanupActiveRoomsOnBeforeUnload);return()=>{beforeUnloadRoomCleanups.delete(cleanup);beforeUnloadRoomCleanups.size||removeEventListener("beforeunload",cleanupActiveRoomsOnBeforeUnload)}};toByteArray=value=>value instanceof ArrayBuffer?new Uint8Array(value):new Uint8Array(value.buffer,value.byteOffset,value.byteLength);toHandshakeErrorMessage=error=>{const message=toErrorMessage(error,"unknown error");return message.startsWith("handshake ")?message:`handshake failed: ${message}`};waitForBufferedAmountLow=(channel,timeoutMs=1e4)=>"open"!==channel.readyState||channel.bufferedAmount<=channel.bufferedAmountLowThreshold?Promise.resolve("open"===channel.readyState):new Promise(res2=>{let settled2=!1,timeout=null;const finish=didDrain=>{if(!settled2){settled2=!0;channel.removeEventListener("bufferedamountlow",onBufferLow);channel.removeEventListener("close",onCloseOrError);channel.removeEventListener("error",onCloseOrError);resetTimer(timeout);res2(didDrain)}},onBufferLow=()=>finish(!0),onCloseOrError=()=>finish(!1);channel.addEventListener("bufferedamountlow",onBufferLow);channel.addEventListener("close",onCloseOrError);channel.addEventListener("error",onCloseOrError);timeout=setTimeout(()=>finish(!1),timeoutMs);"open"===channel.readyState?channel.bufferedAmount<=channel.bufferedAmountLowThreshold&&finish(!0):finish(!1)});room_default=(onPeer,onPeerLeave,onSelfLeave,{onPeerHandshake,onHandshakeError,handshakeTimeoutMs=1e4}={})=>{const peerMap={},activePeerMap={},peerStates={},actions={},actionsCache={},pendingTransmissions={},pendingActionPayloads={},pendingPongs={},pendingStreamMetas={},pendingTrackMetas={},localStreamKeys=new WeakMap,localTrackKeys=new WeakMap,listeners={onPeerJoin:noOp,onPeerLeave:noOp,onPeerStream:noOp,onPeerTrack:noOp};let unregisterBeforeUnloadCleanup=noOp;const iterate2=(targets,f4,{includePending=!1}={})=>(targets?Array.isArray(targets)?targets:[targets]:keys(includePending?peerMap:activePeerMap)).flatMap(id=>{const peer=includePending?peerMap[id]:activePeerMap[id];if(!peer){console.warn(`${libName}: no peer with id ${id} found`);return[]}return[Promise.resolve(f4(id,peer))]}),applyMediaOp=(targets,key3,metadata,sendMeta,op)=>{const payload={k:key3,...void 0===metadata?{}:{m:metadata}};return iterate2(targets,async(id,peer)=>{await sendMeta(payload,id);op(peer)})},makeKeyGetter=map3=>item=>{let key3=map3.get(item);if(!key3){key3=genId(20);map3.set(item,key3)}return key3},getStreamKey=makeKeyGetter(localStreamKeys),getTrackKey=makeKeyGetter(localTrackKeys),getSharedMediaPeer=id=>{var _a8;return null!=(_a8=peerMap[id])?_a8:null},emitStream=(id,key3,stream,metadata)=>{var _a8,_b5;if(activePeerMap[id]){null==(_b5=null==(_a8=getSharedMediaPeer(id))?void 0:_a8.__trysteroSetRemoteStreamByKey)||_b5.call(_a8,key3,stream);listeners.onPeerStream(stream,id,metadata)}},emitTrack=(id,key3,track,stream,metadata)=>{var _a8,_b5;if(activePeerMap[id]){null==(_b5=null==(_a8=getSharedMediaPeer(id))?void 0:_a8.__trysteroSetRemoteTrackByKey)||_b5.call(_a8,key3,track,stream);listeners.onPeerTrack(track,stream,id,metadata)}},clearPeerState=(id,reason=mkErr("peer disconnected"))=>{var _a8;const state2=peerStates[id],err3=toError(reason,"peer disconnected");if(state2){resetTimer(state2.handshakeTimer);state2.pendingHandshakePayloads.length=0;state2.handshakeWaiters.splice(0).forEach(waiter=>waiter.reject(err3));delete peerStates[id]}delete peerMap[id];delete activePeerMap[id];delete pendingTransmissions[id];null==(_a8=pendingPongs[id])||_a8.splice(0).forEach(waiter=>waiter.reject(err3));delete pendingPongs[id];delete pendingStreamMetas[id];delete pendingTrackMetas[id]},exitPeer=(id,peer,reason)=>{const current=peerMap[id];if(!current)return;if(peer&¤t!==peer)return;const wasActive=Boolean(activePeerMap[id]);clearPeerState(id,reason);current.destroy();wasActive&&listeners.onPeerLeave(id);onPeerLeave(id)},makeActionInternal=(type,options={})=>{const cached=actionsCache[type];if(actions[type]&&cached){const cachedOptions=actions[type].options;if(cachedOptions.sendToPending!==Boolean(options.sendToPending)||cachedOptions.receiveWhilePending!==Boolean(options.receiveWhilePending))throw mkErr(`action type "${type}" cannot be redefined`);return cached}if(!type)throw mkErr("action type argument is required");const typeBytes=encodeBytes(type);if(typeBytes.byteLength>32)throw mkErr(`action type string "${type}" (${typeBytes.byteLength}b) exceeds byte limit (32). Hint: choose a shorter name.`);const normalizedOptions={sendToPending:Boolean(options.sendToPending),receiveWhilePending:Boolean(options.receiveWhilePending)},typeBytesPadded=new Uint8Array(32);typeBytesPadded.set(typeBytes);let nonce=0;actions[type]={onComplete:noOp,onProgress:noOp,setOnComplete:f4=>{actions[type].onComplete=f4;const pending3=pendingActionPayloads[type];if(null==pending3?void 0:pending3.length){delete pendingActionPayloads[type];pending3.forEach(({payload,peerId,metadata})=>f4(payload,peerId,metadata))}},setOnProgress:f4=>{actions[type].onProgress=f4},send:async(data,targets,meta,onProgress)=>{const dataType=typeof data;if("undefined"===dataType)throw mkErr("action data cannot be undefined");const isJson="string"!==dataType,isBlob2=data instanceof Blob,isBinary=isBlob2||data instanceof ArrayBuffer||data instanceof TypedArray,hasMeta=void 0!==meta,buffer=isBinary?toByteArray(isBlob2?await data.arrayBuffer():data):encodeBytes(isJson?toJson(data):data),metaEncoded=hasMeta?encodeBytes(toJson(meta)):null,chunkTotal=Math.ceil(buffer.byteLength/chunkSize)+(hasMeta?1:0)||1,chunks=alloc(chunkTotal,(_,i2)=>{var _a8;const isLast=i2===chunkTotal-1,isMeta=Boolean(hasMeta&&0===i2),chunk=new Uint8Array(payloadIndex+(isMeta?null!=(_a8=null==metaEncoded?void 0:metaEncoded.byteLength)?_a8:0:isLast?buffer.byteLength-chunkSize*(chunkTotal-(hasMeta?2:1)):chunkSize));chunk.set(typeBytesPadded);chunk.set([nonce>>8,255&nonce],32);chunk.set([Number(isLast)|Number(isMeta)<<1|Number(isBinary)<<2|Number(isJson)<<3],34);chunk.set([Math.round((i2+1)/chunkTotal*255)],progressIndex);chunk.set(hasMeta?isMeta?null!=metaEncoded?metaEncoded:new Uint8Array:buffer.subarray((i2-1)*chunkSize,i2*chunkSize):buffer.subarray(i2*chunkSize,(i2+1)*chunkSize),payloadIndex);return chunk});nonce=nonce+1&65535;await all(iterate2(targets,async(id,peer)=>{var _a8;const{channel}=peer;let chunkN=0;for(;chunkNchannel.bufferedAmountLowThreshold&&!await waitForBufferedAmountLow(channel))break;const currentPeer=normalizedOptions.sendToPending?peerMap[id]:activePeerMap[id];if(!currentPeer||currentPeer!==peer)break;peer.sendData(chunk);chunkN++;const progressByte=null!=(_a8=chunk[progressIndex])?_a8:255;null==onProgress||onProgress(progressByte/255,id,meta)}},{includePending:normalizedOptions.sendToPending}));return[]},options:normalizedOptions};return actionsCache[type]=[actions[type].send,actions[type].setOnComplete,actions[type].setOnProgress]},handleData=(id,data)=>{var _a8,_b5,_c3,_d2,_f,_h2,_i2,_j,_k;const state2=peerStates[id];if(!state2)return;const buffer=new Uint8Array(data),type=decodeBytes(buffer.subarray(0,32)).replaceAll("\0",""),action2=actions[type];if(!state2.isActive&&!(null==action2?void 0:action2.options.receiveWhilePending))return;const nonce=(null!=(_a8=buffer[32])?_a8:0)<<8|(null!=(_b5=buffer[33])?_b5:0),tag3=null!=(_c3=buffer[34])?_c3:0,progress=null!=(_d2=buffer[progressIndex])?_d2:0,payload=buffer.subarray(payloadIndex),isLast=Boolean(1&tag3),isMeta=Boolean(2&tag3),isBinary=Boolean(4&tag3),isJson=Boolean(8&tag3);null!=pendingTransmissions[id]||(pendingTransmissions[id]={});null!=(_f=pendingTransmissions[id])[type]||(_f[type]={});const target=null!=(_i2=(_h2=pendingTransmissions[id][type])[nonce])?_i2:_h2[nonce]={chunks:[]};isMeta?target.meta=fromJson(decodeBytes(payload)):target.chunks.push(payload);null==action2||action2.onProgress(progress/255,id,target.meta);if(!isLast)return;const full=new Uint8Array(target.chunks.reduce((a2,c3)=>a2+c3.byteLength,0));target.chunks.reduce((a2,c3)=>{full.set(c3,a2);return a2+c3.byteLength},0);delete pendingTransmissions[id][type][nonce];if(isBinary)action2?action2.onComplete(full,id,target.meta):(null!=(_j=pendingActionPayloads[type])?_j:pendingActionPayloads[type]=[]).push({payload:full,peerId:id,...void 0===target.meta?{}:{metadata:target.meta}});else{const text2=decodeBytes(full),decoded=isJson?fromJson(text2):text2;action2?action2.onComplete(decoded,id,target.meta):(null!=(_k=pendingActionPayloads[type])?_k:pendingActionPayloads[type]=[]).push({payload:decoded,peerId:id,...void 0===target.meta?{}:{metadata:target.meta}})}},leave=async()=>{await sendLeave("");await new Promise(res2=>setTimeout(res2,99));entries(peerMap).forEach(([id,peer])=>{peer.destroy();clearPeerState(id,mkErr("room left"))});unregisterBeforeUnloadCleanup();onSelfLeave()},[sendPing,getPing]=makeActionInternal(internalNs("ping")),[sendPong,getPong]=makeActionInternal(internalNs("pong")),[sendSignal2,getSignal]=makeActionInternal(internalNs("signal")),[sendStreamMeta,getStreamMeta]=makeActionInternal(internalNs("stream")),[sendTrackMeta,getTrackMeta]=makeActionInternal(internalNs("track")),[sendLeave,getLeave]=makeActionInternal(internalNs("leave"),{sendToPending:!0,receiveWhilePending:!0}),[sendHandshakeData,getHandshakeData]=makeActionInternal(internalNs("hsdata"),{sendToPending:!0,receiveWhilePending:!0}),[sendHandshakeReady,getHandshakeReady]=makeActionInternal(internalNs("hsready"),{sendToPending:!0,receiveWhilePending:!0}),maybeActivatePeer=(id,peer)=>{const state2=peerStates[id];if(!(!state2||peer&&state2.peer!==peer||state2.isActive)&&state2.didLocalHandshakePass&&state2.didReceiveRemoteReady){state2.isActive=!0;activePeerMap[id]=state2.peer;state2.handshakeTimer=resetTimer(state2.handshakeTimer);listeners.onPeerJoin(id)}},failPeerHandshake=(id,peer,reason)=>{const state2=peerStates[id];if(!state2||state2.peer!==peer)return;const error=toHandshakeErrorMessage(reason);null==onHandshakeError||onHandshakeError(id,error);exitPeer(id,peer,mkErr(error))},markLocalHandshakePassed=(id,peer)=>{const state2=peerStates[id];if(state2&&state2.peer===peer&&!state2.isActive){state2.didLocalHandshakePass=!0;sendHandshakeReady("",id).catch(err3=>failPeerHandshake(id,peer,mkErr(`failed sending handshake readiness: ${toErrorMessage(err3,"unknown send failure")}`)));maybeActivatePeer(id,peer)}},startPeerHandshake=(id,peer)=>{const state2=peerStates[id];if(!state2||state2.peer!==peer)return;state2.handshakeTimer=setTimeout(()=>failPeerHandshake(id,peer,mkErr(`handshake timed out after ${handshakeTimeoutMs}ms`)),handshakeTimeoutMs);const isInitiator=selfId{await sendHandshakeData(data,id,metadata)},()=>new Promise((resolve,reject)=>{const current=peerStates[id];if(!current||current.peer!==peer){reject(mkErr("peer disconnected during handshake"));return}const payload=current.pendingHandshakePayloads.shift();payload?resolve(payload):current.handshakeWaiters.push({resolve,reject:error=>reject(error)})}),isInitiator)).then(()=>markLocalHandshakePassed(id,peer)).catch(err3=>failPeerHandshake(id,peer,toError(err3,"handshake failed")))},toPendingMediaMeta=value=>value&&"object"==typeof value&&!Array.isArray(value)&&"string"==typeof value.k?{key:value.k,...Object.hasOwn(value,"m")?{metadata:value.m}:{}}:null;getPing((_,id)=>sendPong("",id));getPong((_,id)=>{var _a8;const queue2=pendingPongs[id];null==(_a8=null==queue2?void 0:queue2.shift())||_a8.resolve();queue2&&!queue2.length&&delete pendingPongs[id]});getSignal((sdp,id)=>{var _a8;activePeerMap[id]&&(null==(_a8=peerMap[id])||_a8.signal(sdp))});getStreamMeta((meta,id)=>{var _a8,_b5,_c3;if(!activePeerMap[id])return;const parsed=toPendingMediaMeta(meta);if(!parsed)return;(null!=(_a8=pendingStreamMetas[id])?_a8:pendingStreamMetas[id]=[]).push(parsed);const cached=null==(_c3=null==(_b5=getSharedMediaPeer(id))?void 0:_b5.__trysteroGetRemoteStreamByKey)?void 0:_c3.call(_b5,parsed.key);cached&&emitStream(id,parsed.key,cached,parsed.metadata)});getTrackMeta((meta,id)=>{var _a8,_b5,_c3;if(!activePeerMap[id])return;const parsed=toPendingMediaMeta(meta);if(!parsed)return;(null!=(_a8=pendingTrackMetas[id])?_a8:pendingTrackMetas[id]=[]).push(parsed);const cached=null==(_c3=null==(_b5=getSharedMediaPeer(id))?void 0:_b5.__trysteroGetRemoteTrackByKey)?void 0:_c3.call(_b5,parsed.key);cached&&emitTrack(id,parsed.key,cached.track,cached.stream,parsed.metadata)});getLeave((_,id)=>exitPeer(id,void 0,mkErr("peer left room")));getHandshakeData((data,id,metadata)=>{const state2=peerStates[id];if(!state2||state2.isActive)return;const payload=void 0===metadata?{data}:{data,metadata},pending3=state2.handshakeWaiters.shift();pending3?pending3.resolve(payload):state2.pendingHandshakePayloads.push(payload)});getHandshakeReady((_,id)=>{const state2=peerStates[id];if(state2&&!state2.isActive){state2.didReceiveRemoteReady=!0;maybeActivatePeer(id)}});onPeer((peer,id)=>{const existingPeer=peerMap[id];if(existingPeer){if(existingPeer===peer)return;existingPeer.destroy();clearPeerState(id,mkErr("peer replaced"))}peerMap[id]=peer;peerStates[id]={peer,isActive:!1,didLocalHandshakePass:!1,didReceiveRemoteReady:!1,handshakeTimer:null,pendingHandshakePayloads:[],handshakeWaiters:[]};peer.setHandlers({data:d4=>handleData(id,d4),stream:stream=>{var _a8;if(!activePeerMap[id])return;const next2=null==(_a8=pendingStreamMetas[id])?void 0:_a8.shift();next2&&emitStream(id,next2.key,stream,next2.metadata)},track:(track,stream)=>{var _a8;if(!activePeerMap[id])return;const next2=null==(_a8=pendingTrackMetas[id])?void 0:_a8.shift();next2&&emitTrack(id,next2.key,track,stream,next2.metadata)},signal:sdp=>{activePeerMap[id]&&sendSignal2(sdp,id)},close:()=>exitPeer(id,peer,mkErr("peer disconnected")),error:err3=>{console.error(`${libName} peer error:`,err3);exitPeer(id,peer,err3)}});startPeerHandshake(id,peer)});isBrowser&&(unregisterBeforeUnloadCleanup=registerBeforeUnloadCleanup(()=>leave().catch(noOp)));return{makeAction:type=>makeActionInternal(type),leave,ping:async id=>{if(!activePeerMap[id])throw mkErr(`no active peer with id ${id}`);const start=Date.now();await new Promise((resolve,reject)=>{var _a8;const queue2=null!=(_a8=pendingPongs[id])?_a8:pendingPongs[id]=[],clearFromQueue=()=>{const currentQueue=pendingPongs[id];if(!currentQueue)return;const i2=currentQueue.indexOf(waiter);i2>-1&¤tQueue.splice(i2,1);currentQueue.length||delete pendingPongs[id]},waiter={resolve:()=>{clearFromQueue();resolve()},reject:reason=>{clearFromQueue();reject(reason)}};queue2.push(waiter);sendPing("",id).catch(err3=>waiter.reject(toError(err3,"peer disconnected")))});return Date.now()-start},getPeers:()=>fromEntries(entries(activePeerMap).map(([id,peer])=>[id,peer.connection])),addStream:(stream,targets,meta)=>applyMediaOp(targets,getStreamKey(stream),meta,sendStreamMeta,peer=>peer.addStream(stream)),removeStream:(stream,targets)=>{iterate2(targets,(_,peer)=>peer.removeStream(stream))},addTrack:(track,stream,targets,meta)=>applyMediaOp(targets,getTrackKey(track),meta,sendTrackMeta,peer=>peer.addTrack(track,stream)),removeTrack:(track,targets)=>{iterate2(targets,(_,peer)=>peer.removeTrack(track))},replaceTrack:(oldTrack,newTrack,targets,meta)=>applyMediaOp(targets,getTrackKey(newTrack),meta,sendTrackMeta,peer=>peer.replaceTrack(oldTrack,newTrack)),onPeerJoin:f4=>{listeners.onPeerJoin=f4;keys(activePeerMap).forEach(peerId=>f4(peerId))},onPeerLeave:f4=>listeners.onPeerLeave=f4,onPeerStream:f4=>listeners.onPeerStream=f4,onPeerTrack:f4=>listeners.onPeerTrack=f4}};wrapRoomFrame=(roomToken,data)=>{const tokenBytes=encodeBytes(roomToken),frame=new Uint8Array(3+tokenBytes.byteLength+data.byteLength);frame[0]=1;frame[1]=tokenBytes.byteLength>>>8&255;frame[2]=255&tokenBytes.byteLength;frame.set(tokenBytes,3);frame.set(data,3+tokenBytes.byteLength);return frame};wrapRoomPresenceFrame=(roomToken,isPresent)=>{const tokenBytes=encodeBytes(roomToken),frame=new Uint8Array(4+tokenBytes.byteLength);frame[0]=2;frame[1]=Number(isPresent);frame[2]=tokenBytes.byteLength>>>8&255;frame[3]=255&tokenBytes.byteLength;frame.set(tokenBytes,4);return frame};unwrapFrame=data=>{var _a8,_b5,_c3,_d2;const buffer=new Uint8Array(data);if(buffer.byteLength<3)return null;if(1===buffer[0]){const tokenSize2=(null!=(_a8=buffer[1])?_a8:0)<<8|(null!=(_b5=buffer[2])?_b5:0),headerSize2=3+tokenSize2;return tokenSize2<=0||buffer.byteLength{const{connection,channel}=peer;return peer.isDead||"closed"===connection.connectionState||"failed"===connection.connectionState||"closed"===connection.iceConnectionState||"failed"===connection.iceConnectionState||"closing"===(null==channel?void 0:channel.readyState)||"closed"===(null==channel?void 0:channel.readyState)};getConnectedPeerHealth=peer=>{if(isPeerUnderlyingStale(peer))return"stale";const{channel}=peer;return channel&&"open"===channel.readyState?"live":"transient"};SharedPeerManager=class{constructor(){__publicField(this,"byApp",{});__publicField(this,"roomPresenceHandlers",{})}getMap(appId){var _a8,_b5;return null!=(_b5=(_a8=this.byApp)[appId])?_b5:_a8[appId]={}}get(appId,peerId){var _a8;return null==(_a8=this.byApp[appId])?void 0:_a8[peerId]}isPeerStale(peer){return isPeerUnderlyingStale(peer)}getHealth(peer){return this.isPeerStale(peer)?"stale":"live"}setRoomPresenceHandler(appId,handler){this.roomPresenceHandlers[appId]=handler;return()=>{this.roomPresenceHandlers[appId]===handler&&delete this.roomPresenceHandlers[appId]}}sendRoomPresence(shared,roomToken,isPresent){shared.isClosing||shared.peer.isDead||shared.peer.sendData(wrapRoomPresenceFrame(roomToken,isPresent))}clear(appId,peerId,{destroyPeer}){const map3=this.byApp[appId],shared=null==map3?void 0:map3[peerId];if(!shared||shared.isClosing)return;shared.idleTimer=resetTimer(shared.idleTimer);shared.isClosing=!0;destroyPeer&&!shared.peer.isDead&&shared.peer.destroy();const bindings=values(shared.bindings);shared.bindings={};shared.bindingsByToken={};shared.controlRoomId=null;delete map3[peerId];bindings.forEach(binding=>{var _a8,_b5;null==(_b5=(_a8=binding.handlers).close)||_b5.call(_a8);binding.pendingData.length=0;binding.pendingSendData.length=0;binding.pendingTracks.length=0});shared.remoteStreamsByKey.clear();shared.remoteTracksByKey.clear();shared.pendingDataByToken.clear();shared.remoteRoomTokens.clear();0===keys(map3).length&&delete this.byApp[appId]}register(appId,peerId,peer,idleMs){const map3=this.getMap(appId),existing=map3[peerId];if(existing){existing.idleTimer=resetTimer(existing.idleTimer);if(existing.peer===peer)return existing;this.clear(appId,peerId,{destroyPeer:!0})}const shared={appId,peerId,peer,bindings:{},bindingsByToken:{},pendingDataByToken:new Map,remoteRoomTokens:new Set,idleTimer:null,controlRoomId:null,streamOwners:new Map,trackOwners:new Map,remoteStreamsByKey:new Map,remoteTracksByKey:new Map,idleMs,isClosing:!1};peer.setHandlers({data:data=>this.dispatchData(shared,data),signal:signal=>this.dispatchSignal(shared,signal),close:()=>this.clear(appId,peerId,{destroyPeer:!1}),error:err3=>{console.error(`${libName} peer error:`,err3);this.clear(appId,peerId,{destroyPeer:!1})},track:(track,stream)=>this.dispatchTrack(shared,track,stream)});map3[peerId]=shared;return shared}bind(roomId,roomTokenPromise,shared,{onDetach}){const existingBinding=shared.bindings[roomId];if(existingBinding){shared.idleTimer=resetTimer(shared.idleTimer);return{proxy:existingBinding.proxy,isNew:!1}}const binding={roomId,roomToken:null,roomTokenPromise,handlers:{},pendingData:[],pendingSendData:[],pendingTracks:[],detach:noOp,proxy:{}},detachBinding=()=>{var _a9;if(shared.bindings[roomId]){this.pruneRoomOwnership(shared,roomId);delete shared.bindings[roomId];binding.roomToken&&shared.bindingsByToken[binding.roomToken]===binding&&delete shared.bindingsByToken[binding.roomToken];shared.controlRoomId===roomId&&(shared.controlRoomId=null!=(_a9=keys(shared.bindings)[0])?_a9:null);onDetach();this.scheduleIdleTimer(shared)}},proxy2={created:shared.peer.created,get connection(){return shared.peer.connection},get channel(){return shared.peer.channel},get isDead(){return shared.peer.isDead},getOffer:restartIce=>shared.peer.getOffer(restartIce),signal:sdp=>shared.peer.signal(sdp),sendData:data=>{binding.roomToken?shared.peer.sendData(wrapRoomFrame(binding.roomToken,data)):binding.pendingSendData.push(data)},destroy:()=>detachBinding(),setHandlers:newHandlers=>{const{signal,...rest}=newHandlers;Object.assign(binding.handlers,rest);signal&&(binding.handlers.signal=signal);this.flushBindingQueues(binding)},offerPromise:shared.peer.offerPromise,addStream:stream=>{var _a9;const owners=null!=(_a9=shared.streamOwners.get(stream))?_a9:new Set,shouldAttach=0===owners.size;owners.add(roomId);shared.streamOwners.set(stream,owners);shouldAttach&&shared.peer.addStream(stream)},removeStream:stream=>{const owners=shared.streamOwners.get(stream);if(owners){owners.delete(roomId);if(0===owners.size){shared.streamOwners.delete(stream);shared.peer.removeStream(stream)}}},addTrack:(track,stream)=>{var _a9,_b5;const entry=null!=(_a9=shared.trackOwners.get(track))?_a9:{stream,rooms:new Set},shouldAttach=0===entry.rooms.size;entry.stream=stream;entry.rooms.add(roomId);shared.trackOwners.set(track,entry);return shouldAttach?shared.peer.addTrack(track,stream):null!=(_b5=shared.peer.connection.getSenders().find(s2=>s2.track===track))?_b5:shared.peer.addTrack(track,stream)},removeTrack:track=>{const entry=shared.trackOwners.get(track);if(entry){entry.rooms.delete(roomId);if(0===entry.rooms.size){shared.trackOwners.delete(track);shared.peer.removeTrack(track)}}},replaceTrack:(oldTrack,newTrack)=>{var _a9;const oldEntry=shared.trackOwners.get(oldTrack);if(oldEntry){shared.trackOwners.delete(oldTrack);const nextEntry=null!=(_a9=shared.trackOwners.get(newTrack))?_a9:{stream:oldEntry.stream,rooms:new Set};oldEntry.rooms.forEach(room=>nextEntry.rooms.add(room));shared.trackOwners.set(newTrack,nextEntry)}return shared.peer.replaceTrack(oldTrack,newTrack)},__trysteroGetRemoteStreamByKey:key3=>shared.remoteStreamsByKey.get(key3),__trysteroSetRemoteStreamByKey:(key3,stream)=>{shared.remoteStreamsByKey.set(key3,stream)},__trysteroGetRemoteTrackByKey:key3=>shared.remoteTracksByKey.get(key3),__trysteroSetRemoteTrackByKey:(key3,track,stream)=>{shared.remoteTracksByKey.set(key3,{track,stream})}};binding.proxy=proxy2;binding.detach=detachBinding;shared.bindings[roomId]=binding;null!=shared.controlRoomId||(shared.controlRoomId=roomId);shared.idleTimer=resetTimer(shared.idleTimer);roomTokenPromise.then(roomToken=>{if(shared.isClosing||shared.bindings[roomId]!==binding)return;binding.roomToken=roomToken;shared.bindingsByToken[roomToken]=binding;const pendingData=shared.pendingDataByToken.get(roomToken);if(null==pendingData?void 0:pendingData.length){binding.pendingData.push(...pendingData);shared.pendingDataByToken.delete(roomToken)}binding.pendingSendData.splice(0).forEach(payload=>shared.peer.sendData(wrapRoomFrame(roomToken,payload)));this.flushBindingQueues(binding)});return{proxy:proxy2,isNew:!0}}pruneRoomOwnership(shared,roomIdToRemove){shared.streamOwners.forEach((rooms,stream)=>{rooms.delete(roomIdToRemove);if(0===rooms.size){shared.streamOwners.delete(stream);shared.peer.removeStream(stream)}});shared.trackOwners.forEach((entry,track)=>{entry.rooms.delete(roomIdToRemove);if(0===entry.rooms.size){shared.trackOwners.delete(track);shared.peer.removeTrack(track)}})}scheduleIdleTimer(shared){if(!(shared.isClosing||keys(shared.bindings).length>0)){shared.idleTimer=resetTimer(shared.idleTimer);shared.idleTimer=setTimeout(()=>{var _a8;const current=null==(_a8=this.byApp[shared.appId])?void 0:_a8[shared.peerId];!current||keys(current.bindings).length>0||this.clear(shared.appId,shared.peerId,{destroyPeer:!0})},shared.idleMs)}}getSignalBinding(shared){if(shared.controlRoomId){const selected=shared.bindings[shared.controlRoomId];if(null==selected?void 0:selected.handlers.signal)return selected}const fallback3=values(shared.bindings).find(binding=>Boolean(binding.handlers.signal));if(!fallback3)return null;shared.controlRoomId=fallback3.roomId;return fallback3}flushBindingQueues(binding){const{handlers:handlers3}=binding;handlers3.data&&binding.pendingData.length>0&&binding.pendingData.splice(0).forEach(payload=>{var _a8;return null==(_a8=handlers3.data)?void 0:_a8.call(handlers3,payload)});(handlers3.track||handlers3.stream)&&binding.pendingTracks.length&&binding.pendingTracks.splice(0).forEach(({track,stream})=>{var _a8,_b5;null==(_a8=handlers3.track)||_a8.call(handlers3,track,stream);null==(_b5=handlers3.stream)||_b5.call(handlers3,stream)})}dispatchData(shared,data){var _a8,_b5,_c3;const decoded=unwrapFrame(data);if(!decoded)return;if("presence"===decoded.type){decoded.isPresent?shared.remoteRoomTokens.add(decoded.roomToken):shared.remoteRoomTokens.delete(decoded.roomToken);null==(_b5=(_a8=this.roomPresenceHandlers)[shared.appId])||_b5.call(_a8,shared.peerId,decoded.roomToken,decoded.isPresent);return}const binding=shared.bindingsByToken[decoded.roomToken];if(!binding){const pending3=null!=(_c3=shared.pendingDataByToken.get(decoded.roomToken))?_c3:[];pending3.push(decoded.payload);shared.pendingDataByToken.set(decoded.roomToken,pending3);return}binding.handlers.data?binding.handlers.data(decoded.payload):binding.pendingData.push(decoded.payload)}dispatchSignal(shared,signal){var _a8,_b5,_c3;null==(_c3=null==(_a8=this.getSignalBinding(shared))?void 0:(_b5=_a8.handlers).signal)||_c3.call(_b5,signal)}dispatchTrack(shared,track,stream){values(shared.bindings).forEach(binding=>{var _a8,_b5,_c3,_d2;if(binding.handlers.track||binding.handlers.stream){null==(_b5=(_a8=binding.handlers).track)||_b5.call(_a8,track,stream);null==(_d2=(_c3=binding.handlers).stream)||_d2.call(_c3,stream)}else binding.pendingTracks.push({track,stream})})}};publishCipheredSignalingMessage=(ctx,signal,peerTopic,signalPeer,buildPayload,stillValid)=>{ctx.toCipher(signal).then(encryptedSignal=>{!ctx.isLeaving()&&stillValid()&&signalPeer(peerTopic,toJson(buildPayload(encryptedSignal.sdp)))})};makeState=()=>({status:"idle",offerPeer:null,offerId:null,offerSdp:null,offerInitPromise:null,offerAnswered:!1,offerRelays:[],offerSignalRelays:[],offerSignalBacklog:[],offerRelayTimers:[],offerExpiryTimer:null,connectedPeer:null,connectedPeerUnhealthySinceMs:null,answeringExpiryTimer:null,answeringPeer:null,pendingCandidates:{}});getState=(peerStates,peerId)=>{var _a8;return null!=(_a8=peerStates[peerId])?_a8:peerStates[peerId]=makeState()};updateStatus=state2=>{state2.connectedPeer?state2.status="connected":state2.answeringPeer?state2.status="answering":state2.offerPeer||state2.offerRelays.some(Boolean)?state2.status="offering":state2.status="idle"};clearAnswering=(state2,peer)=>{if(state2.answeringPeer===peer){state2.answeringExpiryTimer=resetTimer(state2.answeringExpiryTimer);state2.answeringPeer=null;updateStatus(state2)}};clearConnectedPeer=(state2,peerId,_reason)=>{if(state2.connectedPeer){state2.connectedPeer.isDead||state2.connectedPeer.destroy();state2.connectedPeer=null;state2.connectedPeerUnhealthySinceMs=null;updateStatus(state2)}};clearOfferRelay=(state2,relayId)=>{state2.offerRelayTimers[relayId]=resetTimer(state2.offerRelayTimers[relayId]);if(state2.offerRelays[relayId]){state2.offerRelays[relayId]=void 0;updateStatus(state2)}};clearOfferRelayIfPlaceholder=(state2,relayId)=>{"offer-placeholder"===(null==state2?void 0:state2.offerRelays[relayId])&&clearOfferRelay(state2,relayId)};hasRemoteDescription=peer=>{if(peer.isDead||"closed"===peer.connection.connectionState)return!0;try{return Boolean(peer.connection.remoteDescription)}catch(e3){return!0}};resetOfferState=(state2,offerPool)=>{const previousOfferAnswered=state2.offerAnswered;state2.offerExpiryTimer=resetTimer(state2.offerExpiryTimer);state2.offerInitPromise=null;state2.offerRelays.forEach((_,relayId)=>clearOfferRelay(state2,relayId));state2.offerRelays=[];state2.offerSignalRelays=[];state2.offerRelayTimers=[];state2.offerSignalBacklog=[];state2.offerPeer&&state2.offerPeer!==state2.connectedPeer&&(previousOfferAnswered||hasRemoteDescription(state2.offerPeer)?state2.offerPeer.isDead||state2.offerPeer.destroy():offerPool.recycle(state2.offerPeer));state2.offerPeer=null;state2.offerId=null;state2.offerSdp=null;state2.offerAnswered=!1;updateStatus(state2)};scheduleAnsweringExpiry=(ctx,state2,peerId,peer)=>{resetTimer(state2.answeringExpiryTimer);state2.answeringExpiryTimer=setTimeout(()=>{const current=ctx.peerStates[peerId];if(current&&!current.connectedPeer&¤t.answeringPeer===peer){peer.destroy();clearAnswering(current,peer)}},23333)};flushBufferedCandidates=async(state2,peer,offerId)=>{const bufferKeys=offerId?[offerId,"__legacy__"]:["__legacy__"];for(const key3 of bufferKeys){const buffered=state2.pendingCandidates[key3];if(null==buffered?void 0:buffered.length){delete state2.pendingCandidates[key3];for(const candidate of buffered)await peer.signal(candidate)}}};scheduleOfferExpiry=(ctx,state2,peerId,ttlMs=57333)=>{resetTimer(state2.offerExpiryTimer);const offerId=state2.offerId;state2.offerExpiryTimer=setTimeout(()=>{const current=ctx.peerStates[peerId];current&&!current.connectedPeer&¤t.offerId===offerId&&resetOfferState(current,ctx.offerPool)},ttlMs)};ensureOffer=(ctx,state2,peerId,relayId)=>{if(state2.offerPeer&&state2.offerId&&state2.offerSdp)return Promise.resolve({peer:state2.offerPeer,offer:state2.offerSdp,offerId:state2.offerId});if(state2.offerInitPromise)return state2.offerInitPromise;state2.offerInitPromise=(async()=>{const firstOffer=(await ctx.offerPool.checkout(1,!1,ctx.encryptOffer))[0];if(!firstOffer)throw mkErr("failed to allocate offer peer");const{peer,offer}=firstOffer;state2.offerPeer=peer;state2.offerId=genId(12);state2.offerSdp=offer;state2.offerAnswered=!1;state2.offerSignalBacklog=[];updateStatus(state2);const onOfferPeerClosedOrError=()=>{state2.offerPeer!==peer||state2.connectedPeer||resetOfferState(state2,ctx.offerPool);ctx.disconnectPeer(peer,peerId)};peer.setHandlers({connect:()=>ctx.connectPeer(peer,peerId,relayId),signal:signal=>{if(state2.offerPeer===peer){state2.offerSignalBacklog.push(signal);state2.offerSignalRelays.forEach(sendSignal2=>null==sendSignal2?void 0:sendSignal2(signal))}},close:onOfferPeerClosedOrError,error:onOfferPeerClosedOrError});scheduleOfferExpiry(ctx,state2,peerId);return{peer,offer,offerId:state2.offerId}})().finally(()=>state2.offerInitPromise=null);return state2.offerInitPromise};handleAnnouncement=async(ctx,relayId,peerId,shared,signalPeer)=>{var _a8;if(shared){ctx.attachSharedPeerToRoom(peerId,shared);return}const state2=ctx.peerStates[peerId];if(!state2||state2.connectedPeer||state2.answeringPeer||state2.offerAnswered){clearOfferRelayIfPlaceholder(state2,relayId);return}if("offer-placeholder"!==state2.offerRelays[relayId])return;const[peerTopic,offerInfo]=await all([sha1(topicPath(ctx.rootTopicPlaintext,peerId)),ensureOffer(ctx,state2,peerId,relayId)]);if(ctx.isLeaving())return;if(state2.connectedPeer||state2.answeringPeer||state2.offerAnswered||"offer-placeholder"!==state2.offerRelays[relayId]){clearOfferRelayIfPlaceholder(state2,relayId);return}state2.offerRelayTimers[relayId]=resetTimer(state2.offerRelayTimers[relayId]);state2.offerRelays[relayId]=!0;updateStatus(state2);state2.offerRelayTimers[relayId]=setTimeout(()=>prunePendingOffer(ctx,peerId,relayId),.9*(null!=(_a8=ctx.announceIntervals[relayId])?_a8:ctx.announceIntervalMs));let didSendOffer=!1;state2.offerSignalRelays[relayId]=signal=>{didSendOffer&&(ctx.isLeaving()||state2.connectedPeer||state2.offerPeer!==offerInfo.peer||state2.offerId!==offerInfo.offerId||"candidate"!==signal.type||publishCipheredSignalingMessage(ctx,signal,peerTopic,signalPeer,sdp=>({peerId:selfId,offerId:offerInfo.offerId,candidate:sdp}),()=>!state2.connectedPeer&&state2.offerPeer===offerInfo.peer&&state2.offerId===offerInfo.offerId))};signalPeer(peerTopic,toJson({peerId:selfId,offerId:offerInfo.offerId,offer:offerInfo.offer}));didSendOffer=!0;state2.offerSignalBacklog.forEach(signal=>{var _a9,_b5;return null==(_b5=(_a9=state2.offerSignalRelays)[relayId])?void 0:_b5.call(_a9,signal)})};handleOffer=async(ctx,relayId,peerId,offer,offerId,hasOutgoingOfferHint,signalPeer)=>{var _a8;const state2=getState(ctx.peerStates,peerId);if(state2.answeringPeer||state2.offerAnswered)return;const hasTrackedOutgoingOffer=Boolean(state2.offerPeer||state2.offerRelays.some(Boolean));if((hasTrackedOutgoingOffer||hasOutgoingOfferHint)&&selfId{clearAnswering(state2,answerPeer);ctx.disconnectPeer(answerPeer,peerId)};answerPeer.setHandlers({connect:()=>ctx.connectPeer(answerPeer,peerId,relayId),close:onAnswerPeerClosedOrError,error:onAnswerPeerClosedOrError});let plainOffer;try{plainOffer=await ctx.toPlain({type:"offer",sdp:offer})}catch(e3){clearAnswering(state2,answerPeer);null==(_a8=ctx.onJoinError)||_a8.call(ctx,{error:"incorrect room password when decrypting offer",appId:ctx.appId,peerId,roomId:ctx.roomId});return}if(answerPeer.isDead){clearAnswering(state2,answerPeer);return}const peerTopic=await sha1(topicPath(ctx.rootTopicPlaintext,peerId));if(!ctx.isLeaving()){answerPeer.setHandlers({signal:signal=>{ctx.isLeaving()||state2.answeringPeer!==answerPeer||answerPeer.isDead||"answer"!==signal.type&&"candidate"!==signal.type||publishCipheredSignalingMessage(ctx,signal,peerTopic,signalPeer,sdp=>{const payloadToSend={peerId:selfId};"answer"===signal.type?payloadToSend.answer=sdp:payloadToSend.candidate=sdp;offerId&&(payloadToSend.offerId=offerId);return payloadToSend},()=>state2.answeringPeer===answerPeer&&!answerPeer.isDead)}});await answerPeer.signal(plainOffer);await flushBufferedCandidates(state2,answerPeer,offerId)}};handleCandidate=async(ctx,peerId,candidate,offerId,peer)=>{var _a8,_b5,_c3,_d2;let plainCandidate;try{plainCandidate=await ctx.toPlain({type:"candidate",sdp:candidate})}catch(e3){return}const state2=getState(ctx.peerStates,peerId),offerPeerMatch=offerId&&(null==state2?void 0:state2.offerPeer)&&state2.offerId===offerId?state2.offerPeer:null,answeringPeer=null!=(_a8=null==state2?void 0:state2.answeringPeer)?_a8:null,fallbackOfferPeer=!offerId&&(null==state2?void 0:state2.offerPeer)?state2.offerPeer:null,targetPeer=peer&&!peer.isDead?peer:null!=(_b5=null!=offerPeerMatch?offerPeerMatch:answeringPeer)?_b5:fallbackOfferPeer;if(!targetPeer||targetPeer.isDead){const pendingKey=null!=offerId?offerId:"__legacy__";(null!=(_d2=(_c3=state2.pendingCandidates)[pendingKey])?_d2:_c3[pendingKey]=[]).push(plainCandidate);return}targetPeer.signal(plainCandidate)};handleAnswer=async(ctx,relayId,peerId,answer,offerId,peer)=>{var _a8;let plainAnswer;try{plainAnswer=await ctx.toPlain({type:"answer",sdp:answer})}catch(e3){null==(_a8=ctx.onJoinError)||_a8.call(ctx,{error:"incorrect room password when decrypting answer",appId:ctx.appId,peerId,roomId:ctx.roomId});return}if(peer){ctx.offerPool.claimLeased(peer);peer.setHandlers({connect:()=>ctx.connectPeer(peer,peerId,relayId),close:()=>ctx.disconnectPeer(peer,peerId)});peer.signal(plainAnswer)}else{const state2=ctx.peerStates[peerId];if(!state2||!state2.offerPeer||state2.offerAnswered||offerId&&state2.offerId&&offerId!==state2.offerId||state2.offerPeer.isDead)return;state2.offerAnswered=!0;scheduleOfferExpiry(ctx,state2,peerId,23333);state2.offerPeer.signal(plainAnswer)}};prunePendingOffer=(ctx,peerId,relayId)=>{const state2=ctx.peerStates[peerId];state2&&!state2.connectedPeer&&state2.offerRelays[relayId]&&clearOfferRelay(state2,relayId)};createSignalHandler=ctx=>relayId=>async(topic,msg,signalPeer)=>{var _a8;if(ctx.isLeaving())return;const payload="string"==typeof msg?fromJson(msg):msg,peerId="string"==typeof payload.peerId?payload.peerId:"",offer=payload.offer,answer=payload.answer,candidate=payload.candidate,offerId=payload.offerId,peer=payload.peer,hasOutgoingOfferHint=!0===payload.hasOutgoingOffer;if(peerId===selfId)return;const state2=ctx.peerStates[peerId],connectedPeer=null==state2?void 0:state2.connectedPeer;if(connectedPeer&&state2){const health=getConnectedPeerHealth(connectedPeer);if("live"===health){state2.connectedPeerUnhealthySinceMs=null;return}if("stale"===health)clearConnectedPeer(state2);else{const nowMs=Date.now(),unhealthySinceMs=null!=(_a8=state2.connectedPeerUnhealthySinceMs)?_a8:nowMs;state2.connectedPeerUnhealthySinceMs=unhealthySinceMs;if(nowMs-unhealthySinceMs<7533)return;clearConnectedPeer(state2)}}let shared=ctx.sharedPeers.get(ctx.appId,peerId);if(shared&&"stale"===ctx.sharedPeers.getHealth(shared.peer)){ctx.sharedPeers.clear(ctx.appId,peerId,{destroyPeer:!0});shared=void 0}const isAnnouncement=Boolean(peerId&&!offer&&!answer&&!candidate);if(isAnnouncement&&!shared){const announcePeerState=getState(ctx.peerStates,peerId),shouldLeadOffer=selfId{const occupiedRooms={},roomRegistrations={},roomIdsByToken={},roomPresenceHandlerCleanups={},sharedPeers=new SharedPeerManager,hasActiveRooms=()=>values(occupiedRooms).some(rooms=>keys(rooms).length>0),getRoomRegistrations=appId=>{var _a8;return null!=(_a8=roomRegistrations[appId])?_a8:roomRegistrations[appId]={}},getRoomIdsByToken=appId=>{var _a8;return null!=(_a8=roomIdsByToken[appId])?_a8:roomIdsByToken[appId]={}},advertiseRoomPresence=(shared,roomToken,isPresent)=>{"live"===sharedPeers.getHealth(shared.peer)&&sharedPeers.sendRoomPresence(shared,roomToken,isPresent)},advertiseKnownRoomsToShared=(appId,shared)=>{var _a8;entries(null!=(_a8=roomRegistrations[appId])?_a8:{}).forEach(([roomId,registration])=>{const{roomToken,roomTokenPromise}=registration;roomToken?advertiseRoomPresence(shared,roomToken,!0):roomTokenPromise.then(token=>{var _a9;(null==(_a9=roomRegistrations[appId])?void 0:_a9[roomId])===registration&®istration.roomToken===token&&(sharedPeers.get(appId,shared.peerId)!==shared||shared.isClosing||advertiseRoomPresence(shared,token,!0))})})},advertiseRoomPresenceToAll=(appId,roomToken,isPresent)=>values(sharedPeers.getMap(appId)).forEach(shared=>advertiseRoomPresence(shared,roomToken,isPresent)),ensureRoomPresenceHandler=appId=>{roomPresenceHandlerCleanups[appId]||(roomPresenceHandlerCleanups[appId]=sharedPeers.setRoomPresenceHandler(appId,(peerId,roomToken,isPresent)=>{var _a8,_b5,_c3;if(!isPresent)return;const shared=sharedPeers.get(appId,peerId),roomId=null==(_a8=roomIdsByToken[appId])?void 0:_a8[roomToken];shared&&roomId&&(null==(_c3=null==(_b5=roomRegistrations[appId])?void 0:_b5[roomId])||_c3.attachSharedPeerToRoom(peerId,shared))}))},cleanupRoomPresenceHandler=appId=>{var _a8;if(!(occupiedRooms[appId]&&keys(occupiedRooms[appId]).length>0)){null==(_a8=roomPresenceHandlerCleanups[appId])||_a8.call(roomPresenceHandlerCleanups);delete roomPresenceHandlerCleanups[appId];delete roomRegistrations[appId];delete roomIdsByToken[appId]}};let didInit=!1,initPromises=[],offerPool=null,cleanupWatchOnline=noOp;return(config,roomId,callbacks)=>{var _a8,_b5,_c3,_d2;if(!config)throw mkErr("requires a config map as the first argument");if(callbacks&&"object"!=typeof callbacks)throw mkErr("third argument must be a callbacks object");const{appId}=config,onJoinError=null==callbacks?void 0:callbacks.onJoinError,onPeerHandshake=null==callbacks?void 0:callbacks.onPeerHandshake,handshakeTimeoutMs=null==callbacks?void 0:callbacks.handshakeTimeoutMs;if(!appId)throw mkErr("config map is missing appId field");if(!roomId)throw mkErr("roomId argument required");if(void 0!==handshakeTimeoutMs&&(!Number.isFinite(handshakeTimeoutMs)||handshakeTimeoutMs<=0))throw mkErr("handshakeTimeoutMs must be a positive number");if(null==(_a8=occupiedRooms[appId])?void 0:_a8[roomId])return occupiedRooms[appId][roomId];ensureRoomPresenceHandler(appId);const rootTopicPlaintext=topicPath(libName,appId,roomId),rootTopicP=sha1(rootTopicPlaintext),selfTopicP=sha1(topicPath(rootTopicPlaintext,selfId)),key3=genKey(null!=(_b5=config.password)?_b5:"",appId,roomId),roomNamespacePromise=deriveRoomNamespace(appId,roomId),sharedPeerIdleMs=null!=(_c3=config._test_only_sharedPeerIdleMs)?_c3:123333;let didLeaveRoom=!1;const withKey=f4=>async signal=>({type:signal.type,sdp:await f4(key3,signal.sdp)}),toPlain=withKey(decrypt),toCipher=withKey(encrypt),sharedPeerMap=sharedPeers.getMap(appId);offerPool||(offerPool=new OfferPool(()=>peer_default(!0,config)));const pool2=offerPool,encryptOffer=async peer=>{const plainOffer=await peer.getOffer(Date.now()-peer.created>57333);if(!plainOffer||"offer"!==plainOffer.type)throw mkErr("failed to get offer for peer");return(await toCipher(plainOffer)).sdp},attachSharedPeerToRoom=(peerId,shared)=>{const state2=getState(ctx.peerStates,peerId);state2.answeringExpiryTimer=resetTimer(state2.answeringExpiryTimer);state2.answeringPeer=null;const{proxy:proxy2,isNew}=sharedPeers.bind(roomId,roomNamespacePromise,shared,{onDetach:()=>{const current=ctx.peerStates[peerId];if((null==current?void 0:current.connectedPeer)===shared.peer){current.connectedPeer=null;current.connectedPeerUnhealthySinceMs=null;updateStatus(current)}}});state2.connectedPeer=shared.peer;state2.connectedPeerUnhealthySinceMs=null;updateStatus(state2);isNew&&onPeerConnect(proxy2,peerId);resetOfferState(state2,pool2)},ctx={appId,roomId,config,peerStates:{},rootTopicPlaintext,rootTopicP,selfTopicP,toPlain,toCipher,isLeaving:()=>didLeaveRoom,onJoinError,sharedPeers,offerPool:pool2,encryptOffer,initPeer:peer_default,connectPeer:(peer,peerId,_relayId)=>{if(didLeaveRoom){peer.destroy();return}const state2=getState(ctx.peerStates,peerId);if(state2.connectedPeer){const shared2=sharedPeerMap[peerId];if(shared2&&state2.connectedPeer===shared2.peer&&shared2.bindings[roomId])return;state2.connectedPeer===peer||peer.isDead||peer.destroy();return}let shared=sharedPeerMap[peerId];if(shared&&"stale"===sharedPeers.getHealth(shared.peer)){sharedPeers.clear(appId,peerId,{destroyPeer:!0});shared=void 0}if(shared&&shared.peer!==peer){peer.isDead||peer.destroy();attachSharedPeerToRoom(peerId,shared);return}const isNewShared=!shared;shared||(shared=sharedPeers.register(appId,peerId,peer,sharedPeerIdleMs));attachSharedPeerToRoom(peerId,shared);isNewShared&&advertiseKnownRoomsToShared(appId,shared)},disconnectPeer:(peer,peerId)=>{if(didLeaveRoom)return;const state2=ctx.peerStates[peerId];(null==state2?void 0:state2.connectedPeer)===peer&&clearConnectedPeer(state2)},attachSharedPeerToRoom,announceIntervals:[],announceIntervalMs:5333},handleMessage=createSignalHandler(ctx);if(!didInit){const initRes=init3(config);pool2.warmup();initPromises=(Array.isArray(initRes)?initRes:[initRes]).map(value=>Promise.resolve(value));didInit=!0;cleanupWatchOnline=config.manualRelayReconnection?noOp:watchOnline()}ctx.announceIntervals=initPromises.map(()=>5333);const announceAttemptCounts=initPromises.map(()=>0),announceTimeouts=[],unsubFns=initPromises.map(async(relayP,i2)=>subscribe2(await relayP,await rootTopicP,await selfTopicP,handleMessage(i2),n3=>pool2.getOffers(n3,encryptOffer)));all([rootTopicP,selfTopicP]).then(([rootTopic,selfTopic])=>{if(didLeaveRoom)return;const queueAnnounce=async(relay,i2)=>{var _a9,_b6;if(didLeaveRoom)return;const ms=await announce(relay,rootTopic,selfTopic);if(didLeaveRoom)return;"number"==typeof ms&&(ctx.announceIntervals[i2]=ms);const announceAttempt=null!=(_a9=announceAttemptCounts[i2])?_a9:0;announceAttemptCounts[i2]=announceAttempt+1;const currentInterval=null!=(_b6=ctx.announceIntervals[i2])?_b6:5333,warmupDelay=announceWarmupIntervalsMs[announceAttempt],nextAnnounceDelayMs="number"==typeof warmupDelay?Math.min(currentInterval,warmupDelay):currentInterval;announceTimeouts[i2]=setTimeout(()=>{queueAnnounce(relay,i2)},nextAnnounceDelayMs)};unsubFns.forEach(async(didSub,i2)=>{await didSub;if(didLeaveRoom)return;const relay=await initPromises[i2];relay&&!didLeaveRoom&&queueAnnounce(relay,i2)})});let onPeerConnect=noOp;const{compose}=createPasswordHandshake(null!=(_d2=config.password)?_d2:"",appId,roomId),composedPeerHandshake=compose(onPeerHandshake),roomOptions={...composedPeerHandshake?{onPeerHandshake:composedPeerHandshake}:{},...void 0===handshakeTimeoutMs?{}:{handshakeTimeoutMs},onHandshakeError:(peerId,error)=>null==onJoinError?void 0:onJoinError({error:error.replace(/^handshake failed: /,""),appId,peerId,roomId})};null!=occupiedRooms[appId]||(occupiedRooms[appId]={});const appRoomRegistrations=getRoomRegistrations(appId),joinedRoom=room_default(f4=>onPeerConnect=f4,id=>{if(didLeaveRoom)return;const state2=ctx.peerStates[id];if(null==state2?void 0:state2.connectedPeer){state2.connectedPeer=null;updateStatus(state2)}},()=>{var _a9,_b6;didLeaveRoom=!0;onPeerConnect=noOp;const registration=null==(_a9=roomRegistrations[appId])?void 0:_a9[roomId];if(null==registration?void 0:registration.roomToken){advertiseRoomPresenceToAll(appId,registration.roomToken,!1);null==(_b6=roomIdsByToken[appId])||delete _b6[registration.roomToken];roomIdsByToken[appId]&&!keys(roomIdsByToken[appId]).length&&delete roomIdsByToken[appId]}if(roomRegistrations[appId]){delete roomRegistrations[appId][roomId];keys(roomRegistrations[appId]).length||delete roomRegistrations[appId]}entries(ctx.peerStates).forEach(([peerId,state2])=>{state2.answeringExpiryTimer=resetTimer(state2.answeringExpiryTimer);if(state2.connectedPeer&&!state2.connectedPeer.isDead){const shared=sharedPeerMap[peerId];shared&&shared.peer===state2.connectedPeer||state2.connectedPeer.destroy()}state2.answeringPeer&&!state2.answeringPeer.isDead&&state2.answeringPeer.destroy();resetOfferState(state2,pool2);state2.connectedPeer=null;state2.answeringPeer=null;updateStatus(state2)});if(occupiedRooms[appId]){delete occupiedRooms[appId][roomId];0===keys(occupiedRooms[appId]).length&&delete occupiedRooms[appId]}announceTimeouts.forEach(resetTimer);unsubFns.forEach(async f4=>{(await f4)()});if(!hasActiveRooms()){didInit=!1;pool2.destroy();offerPool=null;cleanupWatchOnline();cleanupRoomPresenceHandler(appId)}},roomOptions),roomRegistration={roomToken:null,roomTokenPromise:roomNamespacePromise,attachSharedPeerToRoom};appRoomRegistrations[roomId]=roomRegistration;roomNamespacePromise.then(roomToken=>{var _a9;if(!didLeaveRoom&&(null==(_a9=roomRegistrations[appId])?void 0:_a9[roomId])===roomRegistration){roomRegistration.roomToken=roomToken;getRoomIdsByToken(appId)[roomToken]=roomId;values(sharedPeerMap).forEach(shared=>{shared.remoteRoomTokens.has(roomToken)&&attachSharedPeerToRoom(shared.peerId,shared)});advertiseRoomPresenceToAll(appId,roomToken,!0)}});return occupiedRooms[appId][roomId]=joinedRoom}};relayManager=createRelayManager(client=>client.socket);var{secretKey,publicKey}=schnorr.keygen();pubkey=toHex(publicKey);subIdToTopic={};msgHandlers={};kindCache={};now2=()=>Math.floor(Date.now()/1e3);topicToKind=topic=>{var _a8;return null!=(_a8=kindCache[topic])?_a8:kindCache[topic]=strToNum(topic,1e4)+2e4};createEvent=async(topic,content)=>{const payload={kind:topicToKind(topic),tags:[["x",topic]],created_at:now2(),content,pubkey},id=await hashWith("SHA-256",toJson([0,payload.pubkey,payload.created_at,payload.kind,payload.tags,payload.content]));return toJson(["EVENT",{...payload,id:toHex(id),sig:toHex(await schnorr.signAsync(id,secretKey))}])};subscribe=(subId,topic)=>{subIdToTopic[subId]=topic;return toJson(["REQ",subId,{kinds:[topicToKind(topic)],since:now2(),["#x"]:[topic]}])};unsubscribe=subId=>{delete subIdToTopic[subId];return toJson(["CLOSE",subId])};joinRoom=strategy_default({init:config=>getRelays(config,defaultRelayUrls,5,!0).map(url=>{const client=relayManager.register(url,makeSocket(url,data=>{var _a8,_b5;const[msgType,subId,payload,relayMsg]=fromJson(data);if("EVENT"!==msgType){const prefix=`${libName}: relay failure from ${client.url} - `;"NOTICE"===msgType?console.warn(prefix+subId):"OK"!==msgType||payload||console.warn(prefix+relayMsg);return}payload&&"object"==typeof payload&&"content"in payload&&(null==(_b5=msgHandlers[subId])||_b5.call(msgHandlers,null!=(_a8=subIdToTopic[subId])?_a8:"",String(payload.content)))}));return client.ready}),subscribe:(client,rootTopic,selfTopic,onMessage)=>{const rootSubId=genId(64),selfSubId=genId(64);msgHandlers[rootSubId]=msgHandlers[selfSubId]=(topic,data)=>{onMessage(topic,data,async(peerTopic,signal)=>{client.send(await createEvent(peerTopic,signal))})};client.send(subscribe(rootSubId,rootTopic));client.send(subscribe(selfSubId,selfTopic));return()=>{client.send(unsubscribe(rootSubId));client.send(unsubscribe(selfSubId));delete msgHandlers[rootSubId];delete msgHandlers[selfSubId]}},announce:async(client,rootTopic)=>client.send(await createEvent(rootTopic,toJson({peerId:selfId})))});getRelaySockets=relayManager.getSockets;defaultRelayUrls=["aaa-api.freefrom.space/v1/ws","antiprimal.net/hot","api.freefrom.space/v1/ws","bagus.my/nostrrelay/0","basspistol.org","bcast.seutoba.com.br","bucket.coracle.social","chorus.almostmachines.dev","chorus.pjv.me","communities.nos.social","freelay.sovbit.host","ftp.halifax.rwth-aachen.de/nostr","hol.is","hornetstorage.net/relay","inbox.mycelium.social","inner.sebastix.social","kanagrovv-pyramid.kozow.com","khatru.nostrver.se","koru.bitcointxoko.org","librerelay.aaroniumii.com","nos.lol","nostr-01.uid.ovh","nostr-01.yakihonne.com","nostr-03.dorafactory.org","nostr-relay.corb.net","nostr.data.haus","nostr.islandarea.net","nostr.klabo.world","nostr.l484.com","nostr.red5d.dev","nostr.robosats.org","nostr.sathoarder.com","nostr.self-determined.de","nostr.tac.lol","nostr.tegila.com.br","nostr.vulpem.com","nostrue.com","orly.musiquay.org","payments.u4er.net/nostr","purplerelay.com","relay-can.zombi.cloudrodion.com","relay-rpi.edufeed.org","relay.agorist.space","relay.angor.io","relay.artio.inf.unibe.ch","relay.binaryrobot.com","relay.bitcoindistrict.org","relay.damus.io","relay.degmods.com","relay.fountain.fm","relay.froth.zone","relay.guggero.org","relay.kcbitcoiners.com","relay.libernet.app","relay.lnau.net","relay.lumina.rocks","relay.mostr.pub","relay.mostro.network","relay.nosto.re","relay.nostr.place","relay.nostrdice.com","relay.notoshi.win","relay.nuts.cash","relay.orangepill.ovh","relay.satlantis.io","relay.sigit.io","relay.toastr.net","relay02.lnfi.network","relay2.angor.io","santo.iguanatech.net","schnorr.me","slick.mjex.me","social.amanah.eblessing.co","staging.yabu.me","strfry.openhoofd.nl","strfry.shock.network","talon.quest","testing.gathr.gives","testnet-relay.samt.st","top.testrelay.top","x.kojira.io","yabu.me/v2"].map(url=>"wss://"+url);ResponsePreventedError=class extends Error{constructor(message){super(`Response prevented: ${message}`)}};DeviceDecisions=(DeviceDecisions2=>{DeviceDecisions2.ACCEPT="accepted";DeviceDecisions2.REJECT="rejected";DeviceDecisions2.IGNORE="ignore";return DeviceDecisions2})(DeviceDecisions||{});StoredMapLike=class{constructor(store,prefix=""){this._cache=new Map;this._prefix="";this._store=store}addPrefix(key3){return`${this._prefix}-${key3}`}async get(key3){if(this._cache.has(key3))return this._cache.get(key3);const value=await this._store.get(this.addPrefix(key3));void 0!==value&&this._cache.set(key3,value);return value}async set(key3,value){try{const ret=await this._store.set(this.addPrefix(key3),value);this._cache.set(key3,value);return ret}catch(e3){this._cache.delete(key3);throw e3}}async delete(key3){try{const ret=await this._store.delete(this.addPrefix(key3));this._cache.delete(key3);return ret}catch(e3){this._cache.delete(key3);throw e3}}async has(key3){return!!this._cache.has(key3)||(await this._store.keys(this.addPrefix(key3),key3)).length>0}};TrysteroReplicatorP2PClient=class{constructor(server,connectedPeerId){this._prevSeq=0;this.waitingInvocations=new Map;this.invocationTimeouts=new Map;this._server=server;this._connectedPeerId=connectedPeerId;this._remoteDB=this._bindRemoteDB()}get remoteDB(){return this._remoteDB}_bindRemoteDB(){return{info:this.bindRemoteFunction("info"),changes:this.bindRemoteFunction("changes"),revsDiff:this.bindRemoteFunction("revsDiff"),bulkDocs:this.bindRemoteFunction("bulkDocs"),bulkGet:this.bindRemoteFunction("bulkGet",4e4),put:this.bindRemoteFunction("put"),get:this.bindRemoteFunction("get")}}get __send(){var _a8;return null==(_a8=this._server)?void 0:_a8.__send.bind(this._server)}generateNewSeq(){const seq=Math.floor(115*Math.random())+1+this._prevSeq;if(!this.waitingInvocations.has(seq)){this._prevSeq=seq%~~(Number.MAX_SAFE_INTEGER/2);return seq}return this.generateNewSeq()}_sendRPC(type,args,timeout=3e4){if(!this.__send)throw new Error("Not connected to any room");const seq=this.generateNewSeq(),p2=promiseWithResolver();this.waitingInvocations.set(seq,p2);const request2={type,direction:"request",seq,args};timeout&&timeout>0&&this.invocationTimeouts.set(seq,setTimeout(()=>{if(this.waitingInvocations.has(seq)){this.waitingInvocations.delete(seq);p2.reject(new Error(`Invocation Timed out: ${type} (${seq}) (Timeout: ${timeout}ms)`))}this.invocationTimeouts.delete(seq)},timeout));this.__send(request2,this._connectedPeerId);return p2.promise}__onResponse(data){const seq=data.seq,type=data.type;if(this.invocationTimeouts.has(seq)){clearTimeout(this.invocationTimeouts.get(seq));this.invocationTimeouts.delete(seq)}const p2=this.waitingInvocations.get(seq);if(p2){this.waitingInvocations.delete(seq);if(data.error){p2.reject(data.error);Logger(`Invoking remote function [ DONE] : ${type} (${seq}) : (Error)`,LOG_LEVEL_VERBOSE)}else p2.resolve(data.data)}else Logger(`Invoking remote function [ERROR] : ${type} (${seq}) : No Handler left. Possibly timed out`,LOG_LEVEL_VERBOSE)}bindRemoteFunction(type,timeout=3e4){return async(...args)=>{if(!this.__send)throw new Error("Not connected to any room");return await this._sendRPC(type,args,timeout)}}async invokeRemoteFunction(type,args,timeout=3e4){if(!this.__send)throw new Error("Not connected to any room");return await this._sendRPC(type,args,timeout)}bindRemoteObjectFunctions(key3,timeout=3e4){return async(...args)=>{if(!this.__send)throw new Error("Not connected to any room");return await this._sendRPC(`${key3.toString()}`,args,timeout)}}async invokeRemoteObjectFunction(key3,args,timeout=3e4){if(!this.__send)throw new Error("Not connected to any room");return await this._sendRPC(`${key3.toString()}`,args,timeout)}close(){this._remoteDB=void 0;this._server=void 0}};epochFNV1a=2166136261;c1=3432918353;c2=461845907;r1=15;r2=13;m=5;n=3864292196;new TextEncoder;Computed=class{constructor(params){Object.defineProperty(this,"_previousArgs",{enumerable:!0,configurable:!0,writable:!0,value:null});Object.defineProperty(this,"_previousResult",{enumerable:!0,configurable:!0,writable:!0,value:null});Object.defineProperty(this,"_evaluation",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_isEqual",{enumerable:!0,configurable:!0,writable:!0,value:(a2,b3)=>this._areArgsEqual(a2,b3)});Object.defineProperty(this,"_shouldForceUpdate",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_updating",{enumerable:!0,configurable:!0,writable:!0,value:Promise.resolve()});this._evaluation=params.evaluation;this._shouldForceUpdate=params.requiresUpdate||(()=>!1);params.isEqual&&(this._isEqual=params.isEqual)}updateValue(...args){return new Promise((resolve,reject)=>{this._updating=this._updating.then(async()=>{try{if(!await this._shouldForceUpdate(args,this._previousArgs,this._previousResult)&&this._previousArgs&&this._isEqual(args,this._previousArgs))return resolve(!1);try{this._previousResult=await this._evaluation(...args)}catch(error){const err3=error instanceof Error?error:new Error(String(error));this._previousResult=err3}finally{this._previousArgs=args}return resolve(!0)}catch(error){return reject(error)}})})}reset(){this._previousArgs=null;this._previousResult=null}async update(...args){await this.updateValue(...args);return this}get value(){if(this._previousResult instanceof Error)throw this._previousResult;return this._previousResult}_areArgsEqual(args1,args2){return JSON.stringify(args1)===JSON.stringify(args2)}};EVENT_SERVER_STATUS="p2p-server-status";EVENT_ADVERTISEMENT_RECEIVED="p2p-advertisement-received";EVENT_DEVICE_LEAVED="p2p-device-leaved";EVENT_REQUEST_STATUS="p2p-request-status";EVENT_P2P_REPLICATOR_STATUS="p2p-replicator-status";TrysteroReplicatorP2PServer=class{constructor(env,_serverPeerId=selfId){this.assignedFunctions=new Map;this.clients=new Map;this._bindingObjects=[];this._knownAdvertisements=new Map;this.temporaryAcceptedPeers=new Map;this._acceptablePeers=new Computed({evaluation:settings=>{var _a8;return`${null!=(_a8=null==settings?void 0:settings.P2P_AutoAcceptingPeers)?_a8:""}`.split(",").map(e3=>e3.trim()).filter(e3=>!!e3).map(e3=>e3.startsWith("~")?new RegExp(e3.substring(1),"i"):new RegExp(`^${e3}$`,"i"))}});this._shouldDenyPeers=new Computed({evaluation:settings=>{var _a8;return`${null!=(_a8=null==settings?void 0:settings.P2P_AutoDenyingPeers)?_a8:""}`.split(",").map(e3=>e3.trim()).filter(e3=>!!e3).map(e3=>e3.startsWith("~")?new RegExp(e3.substring(1),"i"):new RegExp(`^${e3}$`,"i"))}});this.activePeer=new Map;this._env=env;this._serverPeerId=_serverPeerId;eventHub.onEvent(EVENT_PLATFORM_UNLOADED,()=>{this.shutdown()});this.acceptedPeers=new StoredMapLike(this._env.simpleStore,"p2p-device-decisions")}get isDisposed(){return!this._room}get isServing(){return void 0!==this._room}async ensureLeaved(){var _a8;if(this._room){try{await(null==(_a8=this._room)?void 0:_a8.leave())}catch(ex){Logger("Some error has been occurred while leaving the room, but possibly can be ignored",LOG_LEVEL_VERBOSE);Logger(ex,LOG_LEVEL_VERBOSE)}this._room=void 0;eventHub.emitEvent("p2p-disconnected")}}async setRoom(room){var _a8;await(null==(_a8=this._room)?void 0:_a8.leave());this._room=room}async shutdown(){try{await this.close();await this.ensureLeaved()}catch(ex){Logger("Some error has been occurred while shutting down the server",LOG_LEVEL_INFO);Logger(ex,LOG_LEVEL_VERBOSE)}}async dispatchConnectionStatus(){const adsTasks=[...this.knownAdvertisements].map(async e3=>{const isAccepted2=await this.acceptedPeers.get(e3.name),isTemporaryAccepted=this.temporaryAcceptedPeers.get(e3.peerId);return{...e3,isAccepted:isAccepted2,isTemporaryAccepted}}),ads=await Promise.all(adsTasks);eventHub.emitEvent(EVENT_SERVER_STATUS,{isConnected:this.isServing,knownAdvertisements:ads,serverPeerId:this.serverPeerId})}async makeDecision(decision){decision.decision?decision.isTemporary?this.temporaryAcceptedPeers.set(decision.peerId,!0):await this.acceptedPeers.set(decision.name,!0):decision.isTemporary?this.temporaryAcceptedPeers.set(decision.peerId,!1):await this.acceptedPeers.set(decision.name,!1);await this.dispatchConnectionStatus()}async revokeDecision(decision){this.temporaryAcceptedPeers.delete(decision.peerId);await this.acceptedPeers.delete(decision.name);await this.dispatchConnectionStatus()}get room(){return this._room}get serverPeerId(){return this._serverPeerId}get db(){return this._env.db}get confirm(){return this._env.confirm}get settings(){return this._env.settings}get isEnabled(){return this.settings.P2P_Enabled}get deviceInfo(){return{currentPeerId:this._serverPeerId,name:this._env.deviceName,platform:this._env.platform,version:"0.0.0"}}sendAdvertisement(peerId){if(!this.isEnabled)return;const devInfo=this.deviceInfo,data={peerId:devInfo.currentPeerId,name:devInfo.name,platform:devInfo.platform};if(this._sendAdvertisement){Logger(`peerId: ${this.serverPeerId} Sending Advertisement to ${null!=peerId?peerId:"All"}`,LOG_LEVEL_VERBOSE);this._sendAdvertisement(data,peerId)}}get knownAdvertisements(){return[...this._knownAdvertisements.values()]}onAdvertisement(data,peerId){if(this.isEnabled){Logger(`Advertisement from ${peerId}`,LOG_LEVEL_VERBOSE);if(peerId!==this.serverPeerId&&data.peerId!==this.serverPeerId&&data.name!==this.deviceInfo.name&&data.peerId===peerId){this._knownAdvertisements.set(peerId,data);this.dispatchConnectionStatus();eventHub.emitEvent(EVENT_ADVERTISEMENT_RECEIVED,data)}}}confirmUserToAccept(peerId){return shareRunningResult(`confirmUserToAccept-${peerId}`,()=>this._confirmUserToAccept(peerId))}_confirmUserToAccept(peerId){const peerInfo=this._knownAdvertisements.get(peerId);if(!peerInfo)throw new Error("Unknown Peer");const peerName=peerInfo.name,message=`Are you sure to establish connection to ${peerName} (${peerId})?\nYou can chose as follows:\n- Accept: Accept all connections from this peer.\n- Ignore: Reject all connections from this peer.\n- Accept Temporarily: Accept the connection for this session only.\n- Ignore Temporarily: Reject the connection for this session only.\n\n>[!INFO] You can revoke your decision from the Peer-to-Peer Replicator Pane.`;return this.confirm.askSelectStringDialogue(message,["Accept","Ignore","Accept Temporarily","Ignore Temporarily"],{title:"P2P Connection Request",defaultAction:"Ignore Temporarily",timeout:30}).then(decision=>{if("Accept Temporarily"===decision){this.temporaryAcceptedPeers.set(peerId,!0);this.dispatchConnectionStatus();return!0}if("Ignore Temporarily"===decision){this.temporaryAcceptedPeers.set(peerId,!1);this.dispatchConnectionStatus();return!1}if("Accept"===decision){this.temporaryAcceptedPeers.delete(peerId);this.acceptedPeers.set(peerName,!0);this.dispatchConnectionStatus();return!0}if("Ignore"===decision){this.temporaryAcceptedPeers.delete(peerId);this.acceptedPeers.set(peerName,!1);this.dispatchConnectionStatus();return!1}throw new ResponsePreventedError("User Accepting failed")})}async isAcceptablePeer(peerId){if(!this.isEnabled)return;const peerInfo=this._knownAdvertisements.get(peerId);if(!peerInfo)return!1;const peerName=peerInfo.name;if(this.temporaryAcceptedPeers.has(peerId))return this.temporaryAcceptedPeers.get(peerId);const accepted=await this.acceptedPeers.get(peerName);if(null!=accepted)return accepted;const isAcceptable=(await this._acceptablePeers.update(this.settings)).value.some(e3=>e3.test(peerName)),isDeny=(await this._shouldDenyPeers.update(this.settings)).value.some(e3=>e3.test(peerName));if(isAcceptable){if(isDeny)return!1;this.temporaryAcceptedPeers.set(peerId,!0);this.dispatchConnectionStatus();return!0}return!this.settings.P2P_IsHeadless&&await this.confirmUserToAccept(peerId)}async __send(data,peerId){if(this.isEnabled)if(await this.isAcceptablePeer(peerId)){if(this.___send)return await this.___send(data,peerId);Logger("Cannot send response, no send function")}else{Logger(`Invalid Message to ${peerId}`,LOG_LEVEL_VERBOSE);Logger(data,LOG_LEVEL_VERBOSE)}}async processArrivedRPC(data,peerId){if(this.isEnabled){if(!data.type.startsWith("!")&&!await this.isAcceptablePeer(peerId))throw new Error(`Not acceptable peer ${peerId}`);if("response"===data.direction)this.__onResponse(data,peerId);else{if("request"!==data.direction)throw new Error(`Invalid Message from ${peerId}`);await this.__onRequest(data,peerId)}}}onAfterJoinRoom(){Logger("Initializing...",LOG_LEVEL_VERBOSE);const room=this.room;if(!room)throw new Error("This server has been already disconnected");const[send,arrived]=room.makeAction("rpc");this.___send=send;arrived((data,peerId)=>{this.processArrivedRPC(data,peerId).catch(e3=>{Logger(e3.message,LOG_LEVEL_INFO);Logger(e3,LOG_LEVEL_VERBOSE)})});const[adSend,adArrived]=room.makeAction("ad");this._sendAdvertisement=adSend;adArrived((data,peerId)=>{this.onAdvertisement(data,peerId)});room.onPeerJoin(peerId=>{const peer=room.getPeers()[peerId];this.activePeer.set(peerId,peer);this.sendAdvertisement(peerId)});room.onPeerLeave(peerId=>{this._knownAdvertisements.delete(peerId);const peerConn=this.activePeer.get(peerId);if(peerConn){peerConn.close();this.activePeer.delete(peerId)}eventHub.emitEvent(EVENT_DEVICE_LEAVED,peerId);this.dispatchConnectionStatus()});eventHub.emitEvent("p2p-connected");this.dispatchConnectionStatus()}async startService(bindings=[]){if(!this.isEnabled){Logger($msg("P2P.NotEnabled"),LOG_LEVEL_NOTICE);return}const servingDB=createHostingDB(this._env);this._bindingObjects=[...bindings,servingDB];this._bindingObjects.forEach(b3=>{this.serveObject(b3)});await this.sendAdvertisement()}async start(bindings=[]){const passphraseNumbers=mixedHash(this.settings.P2P_passphrase,0),passphrase=passphraseNumbers[0].toString(36)+passphraseNumbers[1].toString(36);await this.shutdown();if(!this.settings.P2P_Enabled){Logger($msg("P2P.NotEnabled"),LOG_LEVEL_NOTICE);return}const relays=this.settings.P2P_relays.split(",").filter(e3=>e3.trim().length>0),turnServers=this.settings.P2P_turnServers.split(",").map(e3=>e3.trim()).filter(e3=>e3.length>0),rtcPolyfill=globalThis.RTCPeerConnection,options={relayUrls:relays,appId:this.settings.P2P_AppID,password:passphrase,manualRelayReconnection:!0,..."function"==typeof rtcPolyfill?{rtcPolyfill}:{},turnConfig:turnServers.length>0?[{urls:turnServers,username:this.settings.P2P_turnUsername,credential:this.settings.P2P_turnCredential}]:[]},room=joinRoom(options,this.settings.P2P_roomID);await this.setRoom(room);this.onAfterJoinRoom();this.dispatchConnectionStatus();await this.startService(bindings)}serveFunction(type,func){this.assignedFunctions.set(type,func)}serveObject(obj){Object.keys(obj).forEach(key3=>{if(key3.toString().startsWith("_"))return;const func=obj[key3].bind(obj);this.assignedFunctions.set(key3.toString(),func)})}__onResponse(data,peerId){const peer=this.clients.get(peerId);peer?peer.__onResponse(data):Logger(`Response from unknown peer ${peerId}`,LOG_LEVEL_VERBOSE)}async __onRequest(data,peerId){try{const func=this.assignedFunctions.get(data.type);if("function"!=typeof func)throw new Error(`Cannot serve function ${data.type}, no function provided or I am only a client`);const r4=await Promise.resolve(func.apply(this,data.args));await this.__send({type:data.type,seq:data.seq,direction:"response",data:r4},peerId)}catch(e3){if(e3 instanceof ResponsePreventedError){Logger(`Serving function: [FAILED] ${data.type}: Response prevented.`,LOG_LEVEL_VERBOSE);return}Logger(`Serving function: [FAILED] ${data.type} sending back the failure information`,LOG_LEVEL_VERBOSE);Logger(e3 instanceof Error?e3.message:e3,LOG_LEVEL_VERBOSE);await this.__send({type:data.type,seq:data.seq,direction:"response",data:void 0,error:e3},peerId)}}async close(){var _a8,_b5;this.assignedFunctions.clear();const peers=null!=(_b5=null==(_a8=this.room)?void 0:_a8.getPeers())?_b5:{};this.clients.forEach(client=>client.close());this.clients.clear();for(const[,peer]of Object.entries(peers))peer.close();await this.ensureLeaved();this._knownAdvertisements.clear();await this.dispatchConnectionStatus()}getConnection(peerId){if(this.clients.has(peerId))return this.clients.get(peerId);if(!this._knownAdvertisements.has(peerId))throw new Error(`Unknown Peer ${peerId}`);const client=new TrysteroReplicatorP2PClient(this,peerId);this.clients.set(peerId,client);return client}};P2PLogCollector=class{constructor(){this.p2pReplicationResult=new Map;this.p2pReplicationLine=reactiveSource("");eventHub.onEvent(EVENT_ADVERTISEMENT_RECEIVED,data=>{this.p2pReplicationResult.set(data.peerId,{peerId:data.peerId,peerName:data.name,fetching:{current:0,max:0,isActive:!1},sending:{current:0,max:0,isActive:!1}});this.updateP2PReplicationLine()});eventHub.onEvent("p2p-connected",()=>{this.p2pReplicationResult.clear();this.updateP2PReplicationLine()});eventHub.onEvent("p2p-disconnected",()=>{this.p2pReplicationResult.clear();this.updateP2PReplicationLine()});eventHub.onEvent(EVENT_DEVICE_LEAVED,peerId=>{this.p2pReplicationResult.delete(peerId);this.updateP2PReplicationLine()});eventHub.onEvent("p2p-replicator-progress",data=>{const prev=this.p2pReplicationResult.get(data.peerId)||{peerId:data.peerId,peerName:data.peerName,fetching:{current:0,max:0,isActive:!1},sending:{current:0,max:0,isActive:!1}};"fetching"in data&&(data.fetching.isActive?prev.fetching=data.fetching:prev.fetching.isActive=!1);"sending"in data&&(data.sending.isActive?prev.sending=data.sending:prev.sending.isActive=!1);this.p2pReplicationResult.set(data.peerId,prev);this.updateP2PReplicationLine()})}updateP2PReplicationLine(){const p2pReplicationResultX=[...this.p2pReplicationResult.values()].sort((a2,b3)=>a2.peerId.localeCompare(b3.peerId)),renderProgress=(current,max3)=>current==max3?`${current}`:`${current} (${max3})`,line=p2pReplicationResultX.map(e3=>`${e3.fetching.isActive||e3.sending.isActive?"⚡":"💤"} ${e3.peerName} ↑ ${renderProgress(e3.sending.current,e3.sending.max)} ↓ ${renderProgress(e3.fetching.current,e3.fetching.max)} `).join("\n");this.p2pReplicationLine.value=line}};LiveSyncError=class _LiveSyncError extends Error{constructor(message,options){super(message);this.name=this.constructor.name;(null==options?void 0:options.cause)&&(this.cause=options.cause instanceof Error?options.cause:new Error(`${options.cause}`));void 0!==(null==options?void 0:options.status)&&(this.overrideStatus=options.status)}get status(){return void 0!==this.overrideStatus?this.overrideStatus:this.cause&&"status"in this.cause?this.cause.status:500}static isCausedBy(error,errorClass){return!!error&&(error instanceof errorClass||!!error.cause&&_LiveSyncError.isCausedBy(error.cause,errorClass))}static fromError(error){if(error instanceof this)return error;const instance=new this(`${this.name}: ${null==error?void 0:error.message}`,{cause:error});(null==error?void 0:error.stack)?instance.stack=error.stack:instance.stack=(new Error).stack;return instance}};CHeader="h:";PSCHeader="ps:";ICHeaderLength=(ICHeader="i:").length;ICXHeader="ix:";PersistentMap=class{flush(){this._save()}_save(){localStorage.setItem(this._key,JSON.stringify([...this._map.entries()]))}_load(suppliedEntries=[]){var _a8;try{const savedSource=null!=(_a8=localStorage.getItem(this._key))?_a8:"",sourceToParse=""===savedSource?"[]":savedSource,obj=JSON.parse(sourceToParse);this._map=new Map([...obj,...suppliedEntries])}catch(ex){console.log(`Map read error : ${this._key}`);console.dir(ex);this._map=new Map([...suppliedEntries])}return Promise.resolve()}_queueSave(){this._setCount--;if(this._setCount<0){this._setCount=100;scheduleTask(`save-map-${this._key}`,0,()=>this._save())}scheduleTask(`save-map-${this._key}`,150,()=>this._save())}delete(key3){const ret=this._map.delete(key3);this._queueSave();return ret}has(key3){return this._map.has(key3)}set(key3,value){this._map.set(key3,value);this._queueSave();return this}clear(){this._map=new Map;this._save()}get(key3,defValue){const v2=this._map.get(key3);return void 0===v2?defValue:v2}constructor(key3,entries2){Object.defineProperty(this,"_setCount",{enumerable:!0,configurable:!0,writable:!0,value:100});Object.defineProperty(this,"_map",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_key",{enumerable:!0,configurable:!0,writable:!0,value:void 0});this._key=key3;this._map=new Map(null!=entries2?entries2:[]);this._load(entries2)}};BasicHeaderGenerator=class{constructor(){this._header=new Computed({evaluation:source2=>{if("username"in source2){const userNameAndPassword=source2.username&&source2.password?`${source2.username}:${source2.password}`:"";return`Basic ${btoa(userNameAndPassword)}`}return""}})}async getBasicHeader(auth){return(await this._header.update(auth)).value}};JWTTokenGenerator=class{constructor(){this._currentCryptoKey=new Computed({evaluation:async auth=>await this._importKey(auth)});this._jwt=new Computed({evaluation:async params=>{const buff=`${btoa(JSON.stringify(params.header))}.${btoa(JSON.stringify(params.payload))}`.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,""),key3=(await this._currentCryptoKey.update(params.credentials)).value;let token="";if("ES256"==params.header.alg||"ES512"==params.header.alg){const digestAlg="ES256"==params.header.alg?"SHA-256":"SHA-512",jwt=await crypto.subtle.sign({name:"ECDSA",hash:{name:digestAlg}},key3,writeString(buff));token=(await arrayBufferToBase64Single2(jwt)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}else{if("HS256"!=params.header.alg&&"HS512"!=params.header.alg)throw new Error("JWT algorithm is not supported.");{const jwt=await crypto.subtle.sign({name:"HMAC",hash:{name:params.header.alg}},key3,writeString(buff));token=(await arrayBufferToBase64Single2(jwt)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}}return{...params,token:`${buff}.${token}`}}});this._jwtParams=new Computed({evaluation(source2){const kid=source2.jwtKid||void 0;if(""==(source2.jwtSub||"").trim())throw new Error("JWT sub is empty");const algorithm=source2.jwtAlgorithm||"";if(!algorithm)throw new Error("JWT algorithm is not configured.");if("HS256"!=algorithm&&"HS512"!=algorithm&&"ES256"!=algorithm&&"ES512"!=algorithm)throw new Error("JWT algorithm is not supported.");const header={alg:source2.jwtAlgorithm||"HS256",typ:"JWT",kid},iat=~~((new Date).getTime()/1e3);return{header,payload:{exp:iat+60*(source2.jwtExpDuration||5),iat,sub:source2.jwtSub||"","_couchdb.roles":["_admin"]},credentials:source2}},requiresUpdate(args,previousArgs,previous){if(!previous||previous instanceof Error)return!0;const margin20p=.1*(previous.payload.exp-previous.payload.iat),margin=Math.min(10,Math.max(margin20p,60)),d4=~~((new Date).getTime()/1e3)+margin;return previous.payload.exp{const authHeaderGen=new AuthorizationHeaderGenerator,requestParam={url:`${baseUri}/${path2}`,method:method||(body?"PUT":"GET"),headers:{authorization:await authHeaderGen.getAuthorizationHeader(credentials),origin:origin2,...customHeaders},contentType:"application/json",body:body?JSON.stringify(body):void 0};return await(0,import_obsidian.requestUrl)(requestParam)};recentLogEntries=reactiveSource([]);(function setGlobalLogFunction(logger2){_logger=logger2})(globalLogFunction=(message,level,key3)=>{const entry={message:message instanceof Error?new LiveSyncError("[Error Logged]: "+message.message,{cause:message}):message,level,key:key3};recentLogEntries.value=[...recentLogEntries.value,entry]});recentLogs=[];ModuleLog=class extends AbstractObsidianModule{constructor(){super(...arguments);this.statusLog=reactiveSource("");this.activeFileStatus=reactiveSource("");this.notifies={};this.p2pLogCollector=new P2PLogCollector;this.nextFrameQueue=void 0;this.logLines=[]}observeForLogs(){function padLeftSpComputed(numI,mark){const formatted=reactiveSource("");let timer,maxLen=1;numI.onChanged(numX=>{const num=numX.value,numLen=`${Math.abs(num)}`.length+1;maxLen=maxLen{formatted.value="";maxLen=1},3e3));formatted.value=` ${mark}${`${padSpaces}${num}`.slice(-maxLen)}`});return computed(()=>formatted.value)}const padSpaces=" ".repeat(10),labelReplication=padLeftSpComputed(this.services.replication.replicationResultCount,"📥"),labelDBCount=padLeftSpComputed(this.services.replication.databaseQueueCount,"📄"),labelStorageCount=padLeftSpComputed(this.services.replication.storageApplyingCount,"💾"),labelChunkCount=padLeftSpComputed(collectingChunks,"🧩"),labelPluginScanCount=padLeftSpComputed(pluginScanningCount,"🔌"),labelConflictProcessCount=padLeftSpComputed(this.services.conflict.conflictProcessQueueCount,"🔩"),labelHiddenFilesCount=padLeftSpComputed(reactive(()=>hiddenFilesEventCount.value-hiddenFilesProcessingCount.value),"⚙️"),queueCountLabelX=reactive(()=>`${labelReplication()}${labelDBCount()}${labelStorageCount()}${labelChunkCount()}${labelPluginScanCount()}${labelHiddenFilesCount()}${labelConflictProcessCount()}`),queueCountLabel=()=>queueCountLabelX.value,requestingStatLabel=computed(()=>0!=this.services.API.requestCount.value-this.services.API.responseCount.value?"📲 ":""),replicationStatLabel=computed(()=>{const e3=this.services.replicator.replicationStatics.value,sent=e3.sent,arrived=e3.arrived,maxPullSeq=e3.maxPullSeq,maxPushSeq=e3.maxPushSeq,lastSyncPullSeq=e3.lastSyncPullSeq,lastSyncPushSeq=e3.lastSyncPushSeq;let pushLast="",pullLast="",w2="";const labels={CONNECTED:"⚡",JOURNAL_SEND:"📦↑",JOURNAL_RECEIVE:"📦↓"};switch(e3.syncStatus){case"CLOSED":case"COMPLETED":case"NOT_CONNECTED":w2="⏹";break;case"STARTED":w2="🌀";break;case"PAUSED":w2="💤";break;case"CONNECTED":case"JOURNAL_SEND":case"JOURNAL_RECEIVE":w2=labels[e3.syncStatus]||"⚡";pushLast=0==lastSyncPushSeq?"":lastSyncPushSeq>=maxPushSeq?" (LIVE)":` (${maxPushSeq-lastSyncPushSeq})`;pullLast=0==lastSyncPullSeq?"":lastSyncPullSeq>=maxPullSeq?" (LIVE)":` (${maxPullSeq-lastSyncPullSeq})`;break;case"ERRORED":w2="⚠";break;default:w2="?"}return{w:w2,sent,pushLast,arrived,pullLast}}),labelProc=padLeftSpComputed(this.services.fileProcessing.processing,"⏳"),labelPend=padLeftSpComputed(this.services.fileProcessing.totalQueued,"🛫"),labelInBatchDelay=padLeftSpComputed(this.services.fileProcessing.batched,"📬"),waitingLabel=computed(()=>`${labelProc()}${labelPend()}${labelInBatchDelay()}`),statusLineLabel=computed(()=>{const{w:w2,sent,pushLast,arrived,pullLast}=replicationStatLabel(),queued=queueCountLabel(),waiting=waitingLabel(),networkActivity=requestingStatLabel(),p2p=this.p2pLogCollector.p2pReplicationLine.value;return{message:`${networkActivity}Sync: ${w2} ↑ ${sent}${pushLast} ↓ ${arrived}${pullLast}${waiting}${queued}${""==p2p?"":"\n"+p2p}`}}),statusBarLabels=reactive(()=>{const scheduleMessage=this.services.appLifecycle.isReloadingScheduled()?"WARNING! RESTARTING OBSIDIAN IS SCHEDULED!\n":"",{message}=statusLineLabel(),fileStatus=this.activeFileStatus.value,status=scheduleMessage+this.statusLog.value;return{message:`${message}${fileStatus&&this.settings.hideFileWarningNotice?" ⛔ SKIP":""}`,status}});this.statusBarLabels=statusBarLabels;const applyToDisplay=throttle(label2=>{this.applyStatusBarText()},20);statusBarLabels.onChanged(label2=>applyToDisplay(label2.value));this.activeFileStatus.onChanged(()=>this.updateMessageArea())}_everyOnload(){eventHub.onEvent("leaf-active-changed",()=>this.onActiveLeafChange());eventHub.onceEvent(EVENT_LAYOUT_READY,()=>this.onActiveLeafChange());eventHub.onEvent(EVENT_ON_UNRESOLVED_ERROR,()=>this.updateMessageArea());return Promise.resolve(!0)}adjustStatusDivPosition(){const mdv=this.app.workspace.getMostRecentLeaf();if(mdv&&this.statusDiv){this.statusDiv.remove();const container=mdv.view.containerEl;container.insertBefore(this.statusDiv,container.lastChild)}}async getActiveFileStatus(){const reason=[],reasonWarn=[],thisFile=this.app.workspace.getActiveFile();if(!thisFile)return"";if(isValidPath(thisFile.path)){const validOnWindows=isValidFilenameInWidows(thisFile.name),validOnDarwin=isValidFilenameInDarwin(thisFile.name),validOnAndroid=isValidFilenameInAndroid(thisFile.name),labels=[];validOnWindows||labels.push("🪟");validOnDarwin||labels.push("🍎");validOnAndroid||labels.push("🤖");labels.length>0&&reasonWarn.push("Some platforms may be unable to process this file correctly: "+labels.join(" "))}else reason.push("This file has an invalid path under the current settings");this.services.vault.shouldCheckCaseInsensitively()&&(await this.core.storageAccess.getFiles()).map(e3=>e3.path).filter(e3=>e3.toLowerCase()==thisFile.path.toLowerCase()).length>1&&reason.push("There are multiple files with the same name (case-insensitive match)");await this.services.vault.isTargetFile(thisFile.path)||reason.push("This file is ignored by the ignore rules");this.services.vault.isFileSizeTooLarge(thisFile.stat.size)&&reason.push("This file size exceeds the configured limit");return[reason.length>0?"Not synchronised: "+reason.join(", "):"",reasonWarn.length>0?"Warning: "+reasonWarn.join(", "):""].filter(e3=>e3).join("\n")}async setFileStatus(){const fileStatus=await this.getActiveFileStatus();this.activeFileStatus.value=fileStatus}async updateMessageArea(){var _a8,_b5;if(!this.messageArea)return;const showStatusOnEditor=null!=(_b5=null==(_a8=this.settings)?void 0:_a8.showStatusOnEditor)&&_b5;this.statusDiv&&(this.statusDiv.style.display=showStatusOnEditor?"":"none");if(!showStatusOnEditor){this.messageArea.innerText="";return}const messageLines=[],fileStatus=this.activeFileStatus.value;fileStatus&&!this.settings.hideFileWarningNotice&&messageLines.push(fileStatus);const stringMessages=(await this.services.appLifecycle.getUnresolvedMessages()).flat().filter(e3=>e3).filter(m3=>"string"==typeof m3),networkMessages=stringMessages.filter(m3=>m3.startsWith(MARK_LOG_NETWORK_ERROR)),otherMessages=stringMessages.filter(m3=>!m3.startsWith(MARK_LOG_NETWORK_ERROR));messageLines.push(...otherMessages);this.settings.networkWarningStyle!==NetworkWarningStyles_ICON&&this.settings.networkWarningStyle!==NetworkWarningStyles_HIDDEN?messageLines.push(...networkMessages):this.settings.networkWarningStyle===NetworkWarningStyles_ICON&&networkMessages.length>0&&messageLines.push("🔗❌");this.messageArea.innerText=messageLines.map(e3=>`⚠️ ${e3}`).join("\n")}onActiveLeafChange(){fireAndForget(async()=>{this.adjustStatusDivPosition();await this.setFileStatus()})}applyStatusBarText(){if(!this.nextFrameQueue){this.nextFrameQueue=requestAnimationFrame(()=>{var _a8,_b5,_c3,_d2;this.nextFrameQueue=void 0;const{message,status}=this.statusBarLabels.value,newMsg=message;let newLog=(null==(_a8=this.settings)?void 0:_a8.showOnlyIconsOnEditor)?"":status;const moduleTagEnd=newLog.indexOf(`]${MARK_LOG_SEPARATOR}`);-1!=moduleTagEnd&&(newLog=newLog.substring(moduleTagEnd+MARK_LOG_SEPARATOR.length+1));null==(_b5=this.statusBar)||_b5.setText(newMsg.split("\n")[0]);this.statusDiv&&(this.statusDiv.style.display=(null==(_c3=this.settings)?void 0:_c3.showStatusOnEditor)?"":"none");if((null==(_d2=this.settings)?void 0:_d2.showStatusOnEditor)&&this.statusDiv){if(this.settings.showLongerLogInsideEditor){const now3=(new Date).getTime();this.logLines=this.logLines.filter(e3=>e3.ttl>now3);const minimumNext=this.logLines.reduce((a2,b3)=>a20&&setTimeout(()=>this.applyStatusBarText(),minimumNext-now3);const recentLogs2=this.logLines.map(e3=>e3.message).reverse().join("\n");isDirty("recentLogs",recentLogs2)&&(this.logHistory.innerText=recentLogs2)}isDirty("newMsg",newMsg)&&(this.statusLine.innerText=newMsg);isDirty("newLog",newLog)&&(this.logMessage.innerText=newLog)}});scheduleTask("log-hide",3e3,()=>{this.statusLog.value=""})}}_allStartOnUnload(){var _a8;this.statusDiv&&this.statusDiv.remove();null==(_a8=document.querySelectorAll(".livesync-status"))||_a8.forEach(e3=>e3.remove());return Promise.resolve(!0)}_everyOnloadStart(){(0,import_obsidian.addIcon)("view-log",'\n \n \n ');this.addRibbonIcon("view-log",$msg("moduleLog.showLog"),()=>{this.services.API.showWindow("log-log")}).addClass("livesync-ribbon-showlog");this.addCommand({id:"view-log",name:"Show log",callback:()=>{this.services.API.showWindow("log-log")}});this.registerView("log-log",leaf=>new LogPaneView(leaf,this.plugin));return Promise.resolve(!0)}_everyOnloadAfterLoadSettings(){var _a8,_b5,_c3;recentLogEntries.onChanged(entries2=>{if(0===entries2.value.length)return;const newEntries=[...entries2.value];recentLogEntries.value=[];newEntries.forEach(e3=>this.__addLog(e3.message,e3.level,e3.key))});eventHub.onEvent("file-renamed",data=>{this.setFileStatus()});document.querySelectorAll(".livesync-status").forEach(e3=>e3.remove());this.observeForLogs();this.statusDiv=this.app.workspace.containerEl.createDiv({cls:"livesync-status"});this.statusLine=this.statusDiv.createDiv({cls:"livesync-status-statusline"});this.messageArea=this.statusDiv.createDiv({cls:"livesync-status-messagearea"});this.logMessage=this.statusDiv.createDiv({cls:"livesync-status-logmessage"});this.logHistory=this.statusDiv.createDiv({cls:"livesync-status-loghistory"});this.statusDiv.style.display=(null==(_a8=this.settings)?void 0:_a8.showStatusOnEditor)?"":"none";eventHub.onEvent(EVENT_LAYOUT_READY,()=>this.adjustStatusDivPosition());if(null==(_b5=this.settings)?void 0:_b5.showStatusOnStatusbar){this.statusBar=this.services.API.addStatusBarItem();null==(_c3=this.statusBar)||_c3.addClass("syncstatusbar")}this.adjustStatusDivPosition();return Promise.resolve(!0)}writeLogToTheFile(now3,vaultName,newMessage){fireAndForget(()=>serialized("writeLog",async()=>{const time2=now3.toISOString().split("T")[0],logDate=`${PREFIXMD_LOGFILE}${time2}.md`;await this.core.storageAccess.isExists(normalizePath(logDate))||await this.core.storageAccess.appendHiddenFile(normalizePath(logDate),"```\n");await this.core.storageAccess.appendHiddenFile(normalizePath(logDate),vaultName+":"+newMessage+"\n")}))}__addLog(message,level=LOG_LEVEL_INFO,key3=""){var _a8,_b5,_c3,_d2,_e2,_f;if(level==LOG_LEVEL_DEBUG)return;if(level<=LOG_LEVEL_INFO&&this.settings&&this.settings.lessInformationInLog)return;if(this.settings&&!this.settings.showVerboseLog&&level==LOG_LEVEL_VERBOSE)return;const vaultName=this.services.vault.getVaultName(),now3=new Date,timestamp=now3.toLocaleString();let errorInfo="";if(message instanceof Error)if(message instanceof LiveSyncError)errorInfo=`${null==(_a8=message.cause)?void 0:_a8.name}:${null==(_b5=message.cause)?void 0:_b5.message}\n[StackTrace]: ${message.stack}\n[CausedBy]: ${null==(_c3=message.cause)?void 0:_c3.stack}`;else{const thisStack=(new Error).stack;errorInfo=`${message.name}:${message.message}\n[StackTrace]: ${message.stack}\n[LogCallStack]: ${thisStack}`}const messageContent="string"==typeof message?message:message instanceof Error?`${errorInfo}`:JSON.stringify(message,null,2),newMessage=timestamp+"->"+messageContent;message instanceof Error?console.error(vaultName+":"+newMessage):level>=LOG_LEVEL_INFO?console.log(vaultName+":"+newMessage):console.debug(vaultName+":"+newMessage);(null==(_d2=this.settings)?void 0:_d2.showOnlyIconsOnEditor)||(this.statusLog.value=messageContent);(null==(_e2=this.settings)?void 0:_e2.writeLogToTheFile)&&this.writeLogToTheFile(now3,vaultName,newMessage);addLog(newMessage);this.logLines.push({ttl:now3.getTime()+3e3,message:newMessage});if(level>=LOG_LEVEL_NOTICE){key3||(key3=messageContent);if(key3 in this.notifies){(null==(_f=this.notifies[key3].notice.noticeEl)?void 0:_f.isShown())||(this.notifies[key3].notice=new import_obsidian.Notice(messageContent,0));cancelTask(`notify-${key3}`);if(key3==messageContent){this.notifies[key3].count++;this.notifies[key3].notice.setMessage(`(${this.notifies[key3].count}):${messageContent}`)}else this.notifies[key3].notice.setMessage(`${messageContent}`)}else{const notify=new import_obsidian.Notice(messageContent,0);this.notifies[key3]={count:0,notice:notify}}const timeout=5e3;key3.startsWith("keepalive-")&&-1===messageContent.indexOf("  ")||scheduleTask(`notify-${key3}`,timeout,()=>{const notify=this.notifies[key3].notice;delete this.notifies[key3];try{notify.hide()}catch(e3){}})}}onBindFunction(core,services){services.API.addLog.setHandler(globalLogFunction);services.appLifecycle.onInitialise.addHandler(this._everyOnloadStart.bind(this));services.appLifecycle.onSettingLoaded.addHandler(this._everyOnloadAfterLoadSettings.bind(this));services.appLifecycle.onLoaded.addHandler(this._everyOnload.bind(this));services.appLifecycle.onBeforeUnload.addHandler(this._allStartOnUnload.bind(this))}};noticeIndex=0;LiveSyncCommands=class{constructor(plugin3,core){this._verbose=(msg,key3)=>{this._log(msg,LOG_LEVEL_VERBOSE,key3)};this._info=(msg,key3)=>{this._log(msg,LOG_LEVEL_INFO,key3)};this._notice=(msg,key3)=>{this._log(msg,LOG_LEVEL_NOTICE,key3)};this._progress=(prefix="",level=LOG_LEVEL_NOTICE)=>{const key3="keepalive-progress-"+noticeIndex++;return{log:msg=>{this._log(prefix+msg,level,key3)},once:msg=>{this._log(prefix+msg,level)},done:(msg="Done")=>{this._log(prefix+msg+"  ",level,key3)}}};this._debug=(msg,key3)=>{this._log(msg,LOG_LEVEL_VERBOSE,key3)};this.plugin=plugin3;this.core=core;this.onBindFunction(this.core,this.core.services);this._log=createInstanceLogFunction(this.constructor.name,this.services.API);__$checkInstanceBinding(this)}get app(){return this.plugin.app}get settings(){return this.core.settings}get localDatabase(){return this.core.localDatabase}get services(){return this.core.services}async path2id(filename,prefix){return await this.services.path.path2id(filename,prefix)}getPath(entry){return this.services.path.getPath(entry)}_isMainReady(){return this.services.appLifecycle.isReady()}_isMainSuspended(){return this.services.appLifecycle.isSuspended()}_isDatabaseReady(){return this.services.database.isDatabaseReady()}onBindFunction(core,services){}};PeriodicProcessor=class{constructor(core,process2){this._timer=void 0;this._core=core;this._process=process2;eventHub.onceEvent("plugin-unloaded",()=>{this.disable()})}async process(){try{await this._process()}catch(ex){Logger(ex)}}enable(interval){this.disable();0!=interval&&(this._timer=this._core.services.API.setInterval(()=>fireAndForget(async()=>{var _a8,_b5;await this.process();(null==(_b5=null==(_a8=this._core.services)?void 0:_a8.control)?void 0:_b5.hasUnloaded())&&this.disable()}),interval))}disable(){if(void 0!==this._timer){this._core.services.API.clearInterval(this._timer);this._timer=void 0}}};root_12=from_html('
Just for a minute, please!
',1);root_4=from_html('');root_6=from_html(" ");root_5=from_html('
');root_10=from_html('');root_2=from_html('
',1);root2=from_html('

',1);$$css2={hash:"svelte-1ah3y1j",code:".spacer.svelte-1ah3y1j {flex-grow:1;}.infos.svelte-1ah3y1j {display:flex;justify-content:space-between;margin:4px 0.5em;}.deleted.svelte-1ah3y1j {text-decoration:line-through;}.svelte-1ah3y1j {box-sizing:border-box;}.scroller.svelte-1ah3y1j {display:flex;flex-direction:column;overflow-y:scroll;max-height:60vh;user-select:text;-webkit-user-select:text;}.json-source.svelte-1ah3y1j {white-space:pre;height:auto;overflow:auto;min-height:var(--font-ui-medium);flex-grow:1;}"};delegate(["click"]);JsonResolveModal=class extends import_obsidian.Modal{constructor(app,filename,docs,callback,nameA,nameB,defaultSelect,keepOrder,hideLocal,title="Conflicted Setting"){super(app);this.title="Conflicted Setting";this.callback=callback;this.filename=filename;this.docs=docs;this.nameA=nameA||"";this.nameB=nameB||"";this.keepOrder=keepOrder||!1;this.defaultSelect=defaultSelect||"";this.title=title;this.hideLocal=null!=hideLocal&&hideLocal;waitForSignal(`cancel-internal-conflict:${filename}`).then(()=>this.close())}async UICallback(keepRev,mergedStr){this.callback&&await this.callback(keepRev,mergedStr);this.close();this.callback=void 0}onOpen(){const{contentEl}=this;this.titleEl.setText(this.title);contentEl.empty();null==this.component&&(this.component=mount(JsonResolvePane,{target:contentEl,props:{docs:this.docs,filename:this.filename,nameA:this.nameA,nameB:this.nameB,defaultSelect:this.defaultSelect,keepOrder:this.keepOrder,hideLocal:this.hideLocal,callback:(keepRev,mergedStr)=>this.UICallback(keepRev,mergedStr)}}))}onClose(){const{contentEl}=this;contentEl.empty();null!=this.callback&&this.callback(void 0);if(null!=this.component){unmount(this.component);this.component=void 0}}};PaceMaker=class{constructor(interval){Object.defineProperty(this,"_interval",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_minimumNext",{enumerable:!0,configurable:!0,writable:!0,value:void 0});this._interval=interval}changeInterval(interval){if(interval!==this._interval){this._interval=interval;this._minimumNext=void 0}}mark(now3=Date.now()){void 0===this._minimumNext?this._minimumNext=now3+this._interval:this._minimumNext=Math.max(this._minimumNext+this._interval,now3+this._interval)}_getPaced(doMark){const now3=Date.now(),prevMinimum=this._minimumNext;doMark&&this.mark(now3);if(void 0!==prevMinimum){const shouldWait=prevMinimum-now3;if(shouldWait>0)return new Promise(resolve=>setTimeout(()=>{resolve()},shouldWait))}return Promise.resolve()}get paced(){return this._getPaced(!0)}get pacedSinceMark(){return this._getPaced(!1)}};NOT_AVAILABLE=Symbol("NotAvailable");READY_PICK_SIGNAL=Symbol("lockReady");READY_POST_SIGNAL=Symbol("lockFull");DISPOSE_ERROR="Inbox has been disposed";SyncInbox=class{constructor(capacity){Object.defineProperty(this,"_capacity",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_buffer",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_writeIdx",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_readIdx",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_wrapAroundCount",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_isDisposed",{enumerable:!0,configurable:!0,writable:!0,value:!1});Object.defineProperty(this,"_disposedPromise",{enumerable:!0,configurable:!0,writable:!0,value:promiseWithResolvers()});if(capacity<=0)throw new Error("Capacity must be greater than 0");this._capacity=~~capacity;let i2=256;for(;i20}get isDisposed(){return this._isDisposed}get onDisposed(){return this._disposedPromise.promise}__fixIdx(){if(this._readIdx>this._wrapAroundCount){this._readIdx=this._readIdx&this._wrapAroundCount;this._writeIdx=this._writeIdx&this._wrapAroundCount}}get state(){return{processed:this._writeIdx,size:this.size,free:this.free,isFull:this.isFull,isRunningOut:this.isRunningOut,isReady:this.isReady}}dispose(){this._readIdx=0;this._writeIdx=0;this._capacity=0;this._buffer.length=1;this._buffer[0]=void 0;this._wrapAroundCount=1;this._isDisposed=!0;this._disposedPromise.resolve()}__onPosted(){this.__onProgress()}__onPicked(){this.__onProgress()}__onProgress(){this.__fixIdx()}tryPost(item){if(this.isFull)return!1;this._writeIdx++;this._buffer[this._writeIdx&this._wrapAroundCount]=item;this.__onPosted();return!0}tryCancelPost(){if(0==this.size)return NOT_AVAILABLE;const pointingIdx=this._writeIdx&this._wrapAroundCount,item=this._buffer[pointingIdx];this._buffer[pointingIdx]=void 0;this._writeIdx--;this.__fixIdx();return item}tryPick(){if(this.isRunningOut)return NOT_AVAILABLE;this._readIdx++;const pointingIdx=this._readIdx&this._wrapAroundCount,item=this._buffer[pointingIdx];this._buffer[pointingIdx]=void 0;this.__onPicked();return item}};Inbox=class extends SyncInbox{constructor(capacity){super(capacity);Object.defineProperty(this,"_lockFull",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_lockReady",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _waitForFree(){for(;0==this.free;){this._lockFull||(this._lockFull=promiseWithResolvers());return await this._lockFull.promise}return READY_POST_SIGNAL}_notifyFree(){var _a8;null==(_a8=this._lockFull)||_a8.resolve(READY_POST_SIGNAL);this._lockFull=void 0}async _waitForReady(){for(;this.isRunningOut;){this._lockReady||(this._lockReady=promiseWithResolvers());return await this._lockReady.promise}return READY_PICK_SIGNAL}_notifyReady(){var _a8;null==(_a8=this._lockReady)||_a8.resolve(READY_PICK_SIGNAL);this._lockReady=void 0}__onPosted(){super.__onPosted();this._notifyReady()}__onPicked(){super.__onPicked();this._notifyFree()}dispose(){super.dispose();if(this._lockFull){this._lockFull.reject(new Error(DISPOSE_ERROR));this._lockFull=void 0}if(this._lockReady){this._lockReady.reject(new Error(DISPOSE_ERROR));this._lockReady=void 0}}async post(item,timeout,cancellation){if(this._isDisposed)throw new Error(DISPOSE_ERROR);do{if(cancellation&&cancellation.length>0&&await isSomeResolved(cancellation))return!1;if(this.tryPost(item))return!0;let p2;const tasks3=[this._waitForFree(),...timeout?[(p2=cancelableDelay(timeout)).promise]:[],...cancellation||[]],r4=await Promise.race(tasks3);null==p2||p2.cancel();if(r4!==READY_POST_SIGNAL)return!1}while(!this._isDisposed);return!1}async pick(timeout,cancellation){if(this._isDisposed)throw new Error(DISPOSE_ERROR);do{if(cancellation&&cancellation.length>0&&await isSomeResolved(cancellation))return NOT_AVAILABLE;const item=this.tryPick();if(item!==NOT_AVAILABLE)return item;let p2;const tasks3=[this._waitForReady(),...timeout?[(p2=cancelableDelay(timeout)).promise]:[],...cancellation||[]],r4=await Promise.race(tasks3);null==p2||p2.cancel();if(r4!==READY_PICK_SIGNAL)return NOT_AVAILABLE}while(!this.isDisposed);return NOT_AVAILABLE}};(function(ClerkState2){ClerkState2.IDLE="idle";ClerkState2.DISPOSED="disposed";ClerkState2.WORKING="working";ClerkState2.STALLED="not-started"})(ClerkState||(ClerkState={}));SENTINEL_FINISHED=Symbol("finished");SENTINEL_FLUSH=Symbol("flush");ClerkBase=class{get state(){return this._state}constructor(params){Object.defineProperty(this,"_inbox",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_name",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_state",{enumerable:!0,configurable:!0,writable:!0,value:ClerkState.STALLED});Object.defineProperty(this,"_totalProcessed",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_totalSuccess",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_totalFailed",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_totalFetched",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_disposed",{enumerable:!0,configurable:!0,writable:!0,value:!1});Object.defineProperty(this,"_disposePromise",{enumerable:!0,configurable:!0,writable:!0,value:promiseWithResolvers()});Object.defineProperty(this,"_onProgress",{enumerable:!0,configurable:!0,writable:!0,value:void 0});const{name,assigned}=params;this._inbox=assigned;this._name=null!=name?name:this.constructor.name;yieldMicrotask().then(()=>this._mainLoop());this._inbox.onDisposed.then(()=>this.dispose())}get stateDetail(){const hasStarted=0!=this._totalFetched,hasAnyUnprocessed=this._totalFetched!=this._totalProcessed,isBusy=0!=this._inbox.state.size||hasAnyUnprocessed;return{totalFetched:this._totalFetched,inboxDetail:this._inbox.state,totalProcessed:this._totalProcessed,state:this._state,hasStarted,isBusy}}onProgress(){var _a8;try{null==(_a8=this._onProgress)||_a8.call(this,this.stateDetail)}catch(e3){}}setOnProgress(callback){this._onProgress=callback}async _mainLoop(){var _a8;this._state=ClerkState.STALLED;this.onProgress();await yieldMicrotask();do{this._state=ClerkState.IDLE;this.onProgress();try{const item=await this._inbox.pick(void 0,[this._disposePromise.promise]);if(item===SENTINEL_FLUSH||item===SENTINEL_FINISHED){await(null==(_a8=this._onSentinel)?void 0:_a8.call(this,item));continue}if(item===NOT_AVAILABLE){if(this._inbox.isDisposed){this._state=ClerkState.DISPOSED;break}continue}this._totalFetched++;this._state=ClerkState.WORKING;this.onProgress();try{await this._onPick(item);this._totalSuccess++}catch(ex){this._totalFailed++;Logger("Error on processing job on clerk");Logger(ex,LOG_LEVEL_VERBOSE)}this._totalProcessed++;this.onProgress()}catch(ex){if(ex instanceof Error&&ex.message!==DISPOSE_ERROR){Logger("Error on picking item on clerk");Logger(ex,LOG_LEVEL_VERBOSE)}}}while(!this._inbox.isDisposed&&!this._disposed);this._state=ClerkState.IDLE;this._disposed?this._state=ClerkState.DISPOSED:this.dispose();this.onProgress()}dispose(){this._disposePromise.resolve();this._disposed=!0;this._state=ClerkState.DISPOSED}get onDisposed(){return this._disposePromise.promise}};Clerk=class extends ClerkBase{async _onPick(item){return await this._job(item)}constructor(params){super(params);Object.defineProperty(this,"_job",{enumerable:!0,configurable:!0,writable:!0,value:void 0});this._job=params.job}};ClerkGroup=class{constructor(params){var _a8;Object.defineProperty(this,"_clerks",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_nameBase",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_assigned",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_hiredCount",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_job",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_instantiate",{enumerable:!0,configurable:!0,writable:!0,value:void 0});const{assigned,job,instantiate,initialMemberCount}=params;this._assigned=assigned;this._instantiate=instantiate;this._job=job;this._nameBase=null!=(_a8=params.name)?_a8:this.constructor.name;this._clerks=[];for(let i2=0;i20)for(let i2=0;i2clerk.stateDetail),totalFetched=states.reduce((acc,state2)=>acc+state2.totalFetched,0),totalProcessed=states.reduce((acc,state2)=>acc+state2.totalProcessed,0),isBusy=states.some(state2=>state2.isBusy),hasStarted=states.some(state2=>state2.hasStarted);return{totalFetched,totalProcessed,inboxDetail:this._assigned.state,isBusy,hasStarted,state:ClerkState.IDLE}}get freeMembers(){return this._clerks.filter(clerk=>clerk.state===ClerkState.IDLE).length}dispose(){this._clerks.forEach(clerk=>clerk.dispose())}};Notifier=class{constructor(){Object.defineProperty(this,"_p",{enumerable:!0,configurable:!0,writable:!0,value:promiseWithResolvers()});Object.defineProperty(this,"isUsed",{enumerable:!0,configurable:!0,writable:!0,value:!1})}notify(){if(this.isUsed){this.isUsed=!1;this._p.promise.finally(noop);this._p.resolve();this._p=promiseWithResolvers()}}get nextNotify(){this.isUsed=!0;return this._p.promise}};allRunningProcessors=new Set([]);QueueProcessor=class{get nowProcessing(){return this.processingEntities}get totalNowProcessing(){var _a8;return this.nowProcessing+((null==(_a8=this._pipeTo)?void 0:_a8.totalNowProcessing)||0)}get remaining(){return this._queue.length+this.processingEntities+this.waitingEntries}get totalRemaining(){var _a8;return this.remaining+((null==(_a8=this._pipeTo)?void 0:_a8.totalRemaining)||0)}updateStatus(setFunc){setFunc();this._updateReactiveSource()}suspend(){this._isSuspended=!0;this._hub.emitEvent("tickSuspended");return this}resume(){this._isSuspended=!1;this._hub.emitEvent("tickResumed");return this}resumePipeLine(){var _a8;null==(_a8=this._pipeTo)||_a8.resumePipeLine();this.resume();return this}startPipeline(){this.root.resumePipeLine();return this}get root(){return void 0===this._root?this:this._root}_initEventHub(){this._hub.onEvent("tickResumed",()=>this._run())}async _waitFor(keys3,timeout){const items=keys3.map(key3=>{const p2=promiseWithResolvers(),releaser=this._hub.onEvent(key3,()=>{p2.resolve(key3)});p2.promise=p2.promise.finally(()=>{releaser()});return p2}),timer=timeout?cancelableDelay(timeout):void 0,tasks3=[...items.map(i2=>i2.promise),...timer?[timer.promise]:[]],ret=await Promise.race(tasks3);items.forEach(i2=>i2.resolve(void 0));return ret}_triggerTickDelay(){this._delayTimer||(this._delayTimer=setTimeout(()=>{this._hub.emitEvent("tickDelayTimeout");this._delayTimer=void 0}))}_clearTickDelay(){if(this._delayTimer){clearTimeout(this._delayTimer);this._delayTimer=void 0}}_notifyIfIdle(){return this.root.__notifyIfIdle()}__notifyIfIdle(){0!=this._processCount||this._canCollectBatch()||this._hub.emitEvent("idle");this._pipeTo&&this._pipeTo.__notifyIfIdle()}_onTick(){if(this._canCollectBatch())if(this._nextProcessNeedsImmediate){this._clearTickDelay();this._nextProcessNeedsImmediate=!1;this._hub.emitEvent("tickImmediate")}else if(this._queue.length>this.yieldThreshold){this._clearTickDelay();this._hub.emitEvent("yielded")}else{if(!this.delay){this._clearTickDelay();this._hub.emitEvent("tickDelayTimeout");return}this._delayTimer||this._triggerTickDelay()}else{this._notifyIfIdle();this._clearTickDelay();this._hub.emitEvent("tickEmpty")}}constructor(processor,params,items,enqueueProcessor){var _a8,_b5,_c3,_d2,_e2,_f,_g;Object.defineProperty(this,"_queue",{enumerable:!0,configurable:!0,writable:!0,value:[]});Object.defineProperty(this,"_processor",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_enqueueProcessor",{enumerable:!0,configurable:!0,writable:!0,value:(queue2,entity)=>(queue2.push(entity),queue2)});Object.defineProperty(this,"_isSuspended",{enumerable:!0,configurable:!0,writable:!0,value:!0});Object.defineProperty(this,"_nextProcessNeedsImmediate",{enumerable:!0,configurable:!0,writable:!0,value:!1});Object.defineProperty(this,"_pipeTo",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_root",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_remainingReactiveSource",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_totalRemainingReactiveSource",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_processingEntitiesReactiveSource",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_keepResultUntilDownstreamConnected",{enumerable:!0,configurable:!0,writable:!0,value:!1});Object.defineProperty(this,"_keptResult",{enumerable:!0,configurable:!0,writable:!0,value:[]});Object.defineProperty(this,"_runOnUpdateBatch",{enumerable:!0,configurable:!0,writable:!0,value:()=>{}});Object.defineProperty(this,"concurrentLimit",{enumerable:!0,configurable:!0,writable:!0,value:1});Object.defineProperty(this,"batchSize",{enumerable:!0,configurable:!0,writable:!0,value:1});Object.defineProperty(this,"yieldThreshold",{enumerable:!0,configurable:!0,writable:!0,value:1});Object.defineProperty(this,"delay",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"maintainDelay",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"interval",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"processingEntities",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"waitingEntries",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_hub",{enumerable:!0,configurable:!0,writable:!0,value:new EventHub});Object.defineProperty(this,"_delayTimer",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_intervalPaceMaker",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_processingBatches",{enumerable:!0,configurable:!0,writable:!0,value:new Set});Object.defineProperty(this,"addProcessingBatch",{enumerable:!0,configurable:!0,writable:!0,value:value=>{const r4=this._processingBatches.add(value);this._updateBatchProcessStatus();return r4}});Object.defineProperty(this,"deleteProcessingBatch",{enumerable:!0,configurable:!0,writable:!0,value:value=>{const r4=this._processingBatches.delete(value);this._updateBatchProcessStatus();return r4}});Object.defineProperty(this,"_processing",{enumerable:!0,configurable:!0,writable:!0,value:!1});Object.defineProperty(this,"_collected",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_clerks",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_processCount",{enumerable:!0,configurable:!0,writable:!0,value:0});this._root=this;this._processor=processor;this.batchSize=null!=(_a8=null==params?void 0:params.batchSize)?_a8:1;this.yieldThreshold=null!=(_c3=null!=(_b5=null==params?void 0:params.yieldThreshold)?_b5:null==params?void 0:params.batchSize)?_c3:0;this.concurrentLimit=null!=(_d2=null==params?void 0:params.concurrentLimit)?_d2:1;this.delay=null!=(_e2=null==params?void 0:params.delay)?_e2:0;this.maintainDelay=null!=(_f=null==params?void 0:params.maintainDelay)&&_f;this.interval=null!=(_g=null==params?void 0:params.interval)?_g:0;(null==params?void 0:params.keepResultUntilDownstreamConnected)&&(this._keepResultUntilDownstreamConnected=params.keepResultUntilDownstreamConnected);(null==params?void 0:params.remainingReactiveSource)&&(this._remainingReactiveSource=null==params?void 0:params.remainingReactiveSource);(null==params?void 0:params.totalRemainingReactiveSource)&&(this._totalRemainingReactiveSource=null==params?void 0:params.totalRemainingReactiveSource);(null==params?void 0:params.processingEntitiesReactiveSource)&&(this._processingEntitiesReactiveSource=null==params?void 0:params.processingEntitiesReactiveSource);void 0!==(null==params?void 0:params.suspended)&&(this._isSuspended=null==params?void 0:params.suspended);enqueueProcessor&&this.replaceEnqueueProcessor(enqueueProcessor);void 0!==(null==params?void 0:params.pipeTo)&&this.pipeTo(params.pipeTo);this._intervalPaceMaker=new PaceMaker(this.interval);items&&this.enqueueAll(items);allRunningProcessors.add(this);this._initClerks();this._initEventHub();this.resume()}replaceEnqueueProcessor(processor){this._enqueueProcessor=processor;return this}modifyQueue(processor){this._queue=processor(this._queue);this._onTick()}clearQueue(){this._queue=[];this._onTick()}onUpdateProgress(proc){this._runOnUpdateBatch=proc;return this}pipeTo(pipeTo){this._pipeTo=pipeTo;this._pipeTo._root=this.root;if(this._keptResult.length>0){const temp=[...this._keptResult];this._keptResult=[];this._pipeTo.enqueueAll(temp)}return pipeTo}isIdle(){return this._isIdle()&&(!this._pipeTo||this._pipeTo.isIdle())}_isIdle(){return 0==this.totalRemaining}async _waitForIdle(){if(this._isSuspended)return Promise.resolve();if(this._isIdle())return Promise.resolve();do{const r4=await this._waitFor(["tickEmpty","tick","tickSuspended","suspended","idle"]);if("tickSuspended"===r4)break;if("suspended"==r4)break;if("tickEmpty"==r4)break;if("idle"==r4)break}while(!this._isIdle());return Promise.resolve()}idleDetectors(){const thisPromise=this._waitForIdle();return this._pipeTo?[thisPromise,...this._pipeTo.idleDetectors()]:[thisPromise]}get isSuspended(){var _a8;return this._isSuspended||(null==(_a8=this._pipeTo)?void 0:_a8.isSuspended)||!1}_updateReactiveSource(){this.root.updateReactiveSource()}updateReactiveSource(){this._pipeTo&&this._pipeTo.updateReactiveSource();this._remainingReactiveSource&&(this._remainingReactiveSource.value=this.remaining);this._totalRemainingReactiveSource&&(this._totalRemainingReactiveSource.value=this.totalRemaining);this._processingEntitiesReactiveSource&&(this._processingEntitiesReactiveSource.value=this.nowProcessing)}_updateBatchProcessStatus(){this._updateReactiveSource();this._runOnUpdateBatch()}_collectBatch(){return this._queue.splice(0,this.batchSize)}_canCollectBatch(){return 0!==this._queue.length}enqueue(entity){this._queue=this._enqueueProcessor(this._queue,entity);this._updateBatchProcessStatus();this._onTick();return this}enqueueAll(entities){let queue2=this._queue;for(const v2 of entities)queue2=this._enqueueProcessor(queue2,v2);this._queue=queue2;this._updateBatchProcessStatus();this._onTick();return this}requestNextFlush(){this._nextProcessNeedsImmediate=!0;this._onTick()}async _waitForSuspended(){}flush(){if(this._isSuspended)return Promise.resolve(!1);this.requestNextFlush();return this.waitForAllDownstream()}async waitForAllDownstream(timeout){const baseTasks=[];timeout&&baseTasks.push(delay(timeout,RESULT_TIMED_OUT));do{const idleTasks=this.idleDetectors(),tasks3=[...baseTasks,Promise.all(idleTasks)];if(await Promise.race(tasks3)===RESULT_TIMED_OUT)return!1}while(!this.isIdle());return!0}waitForAllProcessed(timeout){this.root.startPipeline();return this.root.waitForAllDownstream(timeout)}async waitForAllDoneAndTerminate(timeout){this.root.startPipeline();const r4=await this.root.waitForAllDownstream(timeout);this.terminateAll();return r4}async _runProcessor(items){const ret=await this._processor(items);ret&&(this._pipeTo?this._pipeTo.enqueueAll(ret):this._keepResultUntilDownstreamConnected&&this._keptResult.push(...ret))}async*pump(){do{const ticked=await this._waitFor(["tickImmediate","yielded","tickSuspended","tickDelayTimeout","tickSuspended"]);L2:do{const items=this._collectBatch();if(0==items.length)break L2;yield items}while(this._canCollectBatch());if("tickSuspended"==ticked)break}while(!this._isSuspended)}_initClerks(){this._collected=new Inbox(2*this.concurrentLimit);this._clerks=new ClerkGroup({assigned:this._collected,job:async items=>{const batchLength=items.length;this.updateStatus(()=>{this.processingEntities+=batchLength;this.waitingEntries-=batchLength});await this._intervalPaceMaker.paced;this._processCount++;try{await this._runProcessor(items)}catch(ex){Logger("Processor error!");Logger(ex,LOG_LEVEL_VERBOSE)}this.updateStatus(()=>{this.processingEntities-=batchLength});this._processCount--;0==this._processCount&&this._notifyIfIdle()},initialMemberCount:this.concurrentLimit,instantiate:params=>new Clerk(params)})}async _process(){if(!this._processing&&!this._isSuspended)try{this._processing=!0;do{const batchPump=this.pump();for await(const batch of batchPump){if(!batch||0===batch.length){this._hub.emitEvent("tickEmpty");continue}const batchLength=batch.length;this.updateStatus(()=>{this.waitingEntries+=batchLength});await this._collected.post(batch)}}while(!this._isSuspended);this._hub.emitEvent("suspended")}finally{this._processing=!1}}_run(){this._isSuspended||this._processing||fireAndForget(()=>this._process())}terminateAll(){this.root.terminate()}terminate(){if(this._pipeTo){this._pipeTo.terminate();this._pipeTo=void 0}this._isSuspended=!0;this._enqueueProcessor=()=>[];this._processor=()=>Promise.resolve([]);this.clearQueue();this._hub.emitEvent("tickSuspended");this._hub.emitEvent("tickSuspended");this._hub.emitEvent("tickSuspended");this._collected.dispose();this._clerks.dispose();this._queue.length=0;allRunningProcessors.delete(this)}};HiddenFileSync=class extends LiveSyncCommands{constructor(){super(...arguments);this.periodicInternalFileScanProcessor=new PeriodicProcessor(this.core,async()=>this.isThisModuleEnabled()&&this._isDatabaseReady()&&await this.scanAllStorageChanges(!1));this.semaphore=Semaphore(10);this.conflictResolutionProcessor=new QueueProcessor(async paths=>{var _a8,_b5,_c3;const path2=paths[0];sendSignal(`cancel-internal-conflict:${path2}`);try{const id=await this.path2id(path2,ICHeader),doc=await this.localDatabase.getRaw(id,{conflicts:!0});if(void 0===doc._conflicts)return[];if(0==doc._conflicts.length)return[];this._log(`Hidden file conflicted:${path2}`);const conflicts=doc._conflicts.sort((a2,b3)=>Number(a2.split("-")[0])-Number(b3.split("-")[0])),revA=doc._rev,revB=conflicts[0];if(path2.endsWith(".json")){const conflictedRev=conflicts[0],conflictedRevNo=Number(conflictedRev.split("-")[0]),commonBase=null!=(_c3=null==(_b5=null==(_a8=(await this.localDatabase.getRaw(id,{revs_info:!0}))._revs_info)?void 0:_a8.filter(e3=>"available"==e3.status&&Number(e3.rev.split("-")[0])r4.test(stripAllPrefixes(path2)))){this._log(`Overwrite rule applied for conflicted hidden file: ${path2}`,LOG_LEVEL_INFO);await this.resolveByNewerEntry(id,path2,doc,revA,revB);return[]}return[{path:path2,revA,revB,id,doc}]}await this.resolveByNewerEntry(id,path2,doc,revA,revB);return[]}catch(ex){this._log(`Failed to resolve conflict (Hidden): ${path2}`);this._log(ex,LOG_LEVEL_VERBOSE);return[]}},{suspended:!1,batchSize:1,concurrentLimit:5,delay:10,keepResultUntilDownstreamConnected:!0,yieldThreshold:10,pipeTo:new QueueProcessor(async results=>{const{id,doc,path:path2,revA,revB}=results[0],prefixedPath=addPrefix(path2,ICHeader),docAMerge=await this.localDatabase.getDBEntry(prefixedPath,{rev:revA}),docBMerge=await this.localDatabase.getDBEntry(prefixedPath,{rev:revB});0==docAMerge||0==docBMerge?await this.resolveByNewerEntry(id,path2,doc,revA,revB):await this.showJSONMergeDialogAndMerge(docAMerge,docBMerge)&&this.conflictResolutionProcessor.enqueue(path2)},{suspended:!1,batchSize:1,concurrentLimit:1,delay:10,keepResultUntilDownstreamConnected:!1,yieldThreshold:10})});this.cacheFileRegExps=new Map;this.cacheCustomisationSyncIgnoredFiles=new Map;this.queuedNotificationFiles=new Set}isThisModuleEnabled(){return this.core.settings.syncInternalFiles}get kvDB(){return this.core.kvDB}getConflictedDoc(path2,rev3){return this.core.localDatabase.managers.conflictManager.getConflictedDoc(path2,rev3)}onunload(){var _a8;null==(_a8=this.periodicInternalFileScanProcessor)||_a8.disable()}onload(){this.services.API.addCommand({id:"livesync-sync-internal",name:"(re)initialise hidden files between storage and database",callback:()=>{this.isReady()&&this.initialiseInternalFileSync("safe",!0)}});this.services.API.addCommand({id:"livesync-scaninternal-storage",name:"Scan hidden file changes on the storage",callback:()=>{this.isReady()&&this.scanAllStorageChanges(!0)}});this.services.API.addCommand({id:"livesync-scaninternal-database",name:"Scan hidden file changes on the local database",callback:()=>{this.isReady()&&this.scanAllDatabaseChanges(!0)}});this.services.API.addCommand({id:"livesync-internal-scan-offline-changes",name:"Scan and apply all offline hidden-file changes",callback:()=>{this.isReady()&&this.applyOfflineChanges(!0)}});eventHub.onEvent(EVENT_SETTING_SAVED,()=>{this.updateSettingCache()})}async _everyOnDatabaseInitialized(showNotice){this._fileInfoLastProcessed=await autosaveCache(this.kvDB,"hidden-file-lastProcessed");this._databaseInfoLastProcessed=await autosaveCache(this.kvDB,"hidden-file-lastProcessed-database");this._fileInfoLastKnown=await autosaveCache(this.kvDB,"hidden-file-lastKnown");if(this.isThisModuleEnabled())if(0==this._fileInfoLastProcessed.size&&0==this._fileInfoLastProcessed.size){this._log("No cache found. Performing startup scan.",LOG_LEVEL_VERBOSE);await this.performStartupScan(!0)}else await this.performStartupScan(showNotice);return!0}async _everyBeforeReplicate(showNotice){this.isThisModuleEnabled()&&this._isDatabaseReady()&&this.settings.syncInternalFilesBeforeReplication&&!this.settings.watchInternalFileChanges&&await this.scanAllStorageChanges(showNotice);return!0}_everyOnloadAfterLoadSettings(){this.updateSettingCache();return Promise.resolve(!0)}updateSettingCache(){this.cacheCustomisationSyncIgnoredFiles.clear();this.cacheFileRegExps.clear()}isReady(){return!!this._isMainReady&&!this._isMainSuspended()&&!!this.isThisModuleEnabled()}async performStartupScan(showNotice){await this.applyOfflineChanges(showNotice)}async _everyOnResumeProcess(){var _a8;null==(_a8=this.periodicInternalFileScanProcessor)||_a8.disable();if(this._isMainSuspended())return!0;this.isThisModuleEnabled()&&await this.performStartupScan(!1);this.periodicInternalFileScanProcessor.enable(this.isThisModuleEnabled()&&this.settings.syncInternalFilesInterval?1e3*this.settings.syncInternalFilesInterval:0);return!0}_everyRealizeSettingSyncMode(){var _a8;null==(_a8=this.periodicInternalFileScanProcessor)||_a8.disable();if(this._isMainSuspended())return Promise.resolve(!0);if(!this.services.appLifecycle.isReady())return Promise.resolve(!0);this.periodicInternalFileScanProcessor.enable(this.isThisModuleEnabled()&&this.settings.syncInternalFilesInterval?1e3*this.settings.syncInternalFilesInterval:0);this.cacheFileRegExps.clear();return Promise.resolve(!0)}async _anyProcessOptionalFileEvent(path2){return this.isReady()&&await this.trackStorageFileModification(path2)||!1}_anyGetOptionalConflictCheckMethod(path2){if(isInternalMetadata(path2)){this.queueConflictCheck(path2);return Promise.resolve(!0)}return Promise.resolve(!1)}async _anyProcessOptionalSyncFiles(doc){if(isInternalMetadata(doc._id)){if(this.isThisModuleEnabled()){const unprefixedPath=stripAllPrefixes(this.getPath(doc));if(!await this.isTargetFile(stripAllPrefixes(unprefixedPath))){this._log(`Skipped processing sync file:${unprefixedPath} (Not Hidden File Sync target)`,LOG_LEVEL_VERBOSE);return!0}await this.processReplicationResult(doc)||this._log(`Failed to process sync file:${unprefixedPath}`,LOG_LEVEL_NOTICE)}return!0}return!1}async loadFileWithInfo(path2){var _a8,_b5;const stat=await this.core.storageAccess.statHidden(path2);if(!stat)return{name:null!=(_a8=path2.split("/").pop())?_a8:"",path:path2,stat:{size:0,mtime:0,ctime:0,type:"file"},isInternal:!0,deleted:!0,body:createBlob(new Uint8Array(0))};const content=await this.core.storageAccess.readHiddenFileAuto(path2);return{name:null!=(_b5=path2.split("/").pop())?_b5:"",path:path2,stat,isInternal:!0,deleted:!1,body:createBlob(content)}}statToKey(stat){var _a8,_b5;return`${null!=(_a8=null==stat?void 0:stat.mtime)?_a8:0}-${null!=(_b5=null==stat?void 0:stat.size)?_b5:0}`}docToKey(doc){return`${doc.mtime}-${doc.size}-${doc._rev}-${doc._deleted||doc.deleted?"-0":"-1"}`}async fileToStatKey(file,stat=null){stat||(stat=await this.core.storageAccess.statHidden(file));return this.statToKey(stat)}updateLastProcessedFile(file,keySrc){const key3="string"==typeof keySrc?keySrc:this.statToKey(keySrc),splitted=key3.split("-");"0"!=splitted[0]&&this._fileInfoLastKnown.set(file,Number(splitted[0]));this._fileInfoLastProcessed.set(file,key3)}async updateLastProcessedAsActualFile(file,stat){stat||(stat=await this.core.storageAccess.statHidden(file));this._fileInfoLastProcessed.set(file,this.statToKey(stat))}resetLastProcessedFile(targetFiles){if(targetFiles)for(const key3 of targetFiles)this._fileInfoLastProcessed.delete(key3);else{this._log("Delete all processed mark.",LOG_LEVEL_VERBOSE);this._fileInfoLastProcessed.clear()}}getLastProcessedFileMTime(file){return this._fileInfoLastKnown.get(file)||0}getLastProcessedFileKey(file){return this._fileInfoLastProcessed.get(file)}getLastProcessedDatabaseKey(file){return this._databaseInfoLastProcessed.get(file)}updateLastProcessedDatabase(file,keySrc){const key3="string"==typeof keySrc?keySrc:this.docToKey(keySrc);this._databaseInfoLastProcessed.set(file,key3)}updateLastProcessed(path2,db,stat){this.updateLastProcessedDatabase(path2,db);this.updateLastProcessedFile(path2,this.statToKey(stat));const dbMTime=getComparingMTime(db),storageMTime=getComparingMTime(stat);0==dbMTime||0==storageMTime?this.services.path.unmarkChanges(path2):this.services.path.markChangesAreSame(path2,getComparingMTime(db),getComparingMTime(stat))}updateLastProcessedDeletion(path2,db){this.services.path.unmarkChanges(path2);db&&this.updateLastProcessedDatabase(path2,db);this.updateLastProcessedFile(path2,this.statToKey(null))}async ensureDir(path2){await this.core.storageAccess.isExistsIncludeHidden(path2)||await this.core.storageAccess.ensureDir(path2)}async writeFile(path2,data,opt){await this.core.storageAccess.writeHiddenFileAuto(path2,data,opt);return await this.core.storageAccess.statHidden(path2)}async __removeFile(path2){try{if(!await this.core.storageAccess.isExistsIncludeHidden(path2))return"ALREADY";if(await this.core.storageAccess.removeHidden(path2))return"OK"}catch(ex){this._log(`Failed to remove file:${path2}`);this._log(ex,LOG_LEVEL_VERBOSE)}return!1}async triggerEvent(path2){try{await this.core.storageAccess.triggerHiddenFile(path2)}catch(ex){this._log("Failed to call internal API(reconcileInternalFile)",LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE)}}async updateLastProcessedAsActualDatabase(file,doc){const dbPath=addPrefix(file,ICHeader);doc||(doc=await this.localDatabase.getDBEntryMeta(dbPath));doc&&this._databaseInfoLastProcessed.set(file,this.docToKey(doc))}resetLastProcessedDatabase(targetFiles){if(targetFiles)for(const key3 of targetFiles)this._databaseInfoLastProcessed.delete(key3);else{this._log("Delete all processed mark.",LOG_LEVEL_VERBOSE);this._databaseInfoLastProcessed.clear()}}async adoptCurrentStorageFilesAsProcessed(targetFiles){const allFiles=await this.scanInternalFileNames(),files=targetFiles?allFiles.filter(e3=>targetFiles.some(t9=>-1!==e3.indexOf(t9))):allFiles;for(const file of files)await this.updateLastProcessedAsActualFile(file)}async adoptCurrentDatabaseFilesAsProcessed(targetFiles){const allFiles=await this.getAllDatabaseFiles(),files=targetFiles?allFiles.filter(e3=>targetFiles.some(t9=>-1!==e3.path.indexOf(t9))):allFiles;for(const file of files){const path2=stripAllPrefixes(this.getPath(file));await this.updateLastProcessedAsActualDatabase(path2,file)}}async serializedForEvent(file,fn){hiddenFilesEventCount.value++;const rel=await this.semaphore.acquire();try{return await serialized(`hidden-file-event:${file}`,async()=>{hiddenFilesProcessingCount.value++;try{return await fn()}finally{hiddenFilesProcessingCount.value--}})}finally{rel();hiddenFilesEventCount.value--}}async useStorageFiles(files,showNotice=!1,onlyNew=!1){return await this.trackScannedStorageChanges(files,showNotice,onlyNew,!0)}async trackScannedStorageChanges(processFiles,showNotice=!1,onlyNew=!1,forceWriteAll=!1,includeDeleted=!0){const logLevel=getLogLevel(showNotice),p2=this._progress("[⚙ Storage -> DB ]\n",logLevel),notifyProgress=onlyInNTimes(100,progress=>p2.log(`${progress}/${processFiles.length}`)),processes=processFiles.map(async(file,i2)=>{try{await this.trackStorageFileModification(file,onlyNew,forceWriteAll,includeDeleted);notifyProgress()}catch(ex){p2.once(`Failed to process storage change file:${file}`);this._log(ex,LOG_LEVEL_VERBOSE)}});await Promise.all(processes);p2.done()}async scanAllStorageChanges(showNotice=!1,onlyNew=!1,forceWriteAll=!1,includeDeleted=!0){return await skipIfDuplicated("scanAllStorageChanges",async()=>{const logLevel=getLogLevel(showNotice),p2=this._progress("[⚙ Scanning Storage -> DB ]\n",logLevel);p2.log("Scanning storage files...");const knownNames=[...this._fileInfoLastProcessed.keys()],existNames=await this.scanInternalFileNames(),files=new Set([...knownNames,...existNames]);this._log(`Known/Exist ${knownNames.length}/${existNames.length}, Totally ${files.size} files.`,LOG_LEVEL_VERBOSE);const taskNameAndMeta=[...files].map(async e3=>[e3,await this.core.storageAccess.statHidden(e3)]),processFiles=(await Promise.all(taskNameAndMeta)).filter(([path2,stat])=>!!forceWriteAll||this.getLastProcessedFileKey(path2)!=this.statToKey(stat)).map(([path2,stat])=>path2),staticsMessage=`[Storage hidden file statics]\nKnown files: ${knownNames.length}\nActual files: ${existNames.length}\nAll files: ${files.size}\nOffline Changed files: ${processFiles.length}`;p2.once(staticsMessage);await this.trackScannedStorageChanges(processFiles,showNotice,onlyNew,forceWriteAll,includeDeleted);p2.done()})}async trackStorageFileModification(path2,onlyNew=!1,forceWrite=!1,includeDeleted=!0){if(!await this.isTargetFile(path2)){this._log(`Storage file tracking: Hidden file skipped: ${path2} is filtered out by the defined patterns.`,LOG_LEVEL_VERBOSE);return!1}try{return await this.serializedForEvent(path2,async()=>{let stat=await this.core.storageAccess.statHidden(path2);if(null!=stat&&"file"!=stat.type)return!1;const key3=await this.fileToStatKey(path2,stat),lastKey=this.getLastProcessedFileKey(path2);if(lastKey==key3){this._log(`${path2} Already processed.`,LOG_LEVEL_DEBUG);return!0}const cache2=await this.loadFileWithInfo(path2);if(getComparingMTime(cache2.stat)!=getComparingMTime(stat)){this._log(`Hidden file:${path2} is changed.`,LOG_LEVEL_VERBOSE);stat=cache2.stat}this.updateLastProcessedFile(path2,stat);const lastIsNotFound=!lastKey||lastKey.endsWith("-0-0"),nowIsNotFound=cache2.deleted,type=lastIsNotFound&&nowIsNotFound?"invalid":nowIsNotFound?"delete":"modified";if("invalid"==type)return!1;const storageMTimeActual=getComparingMTime(stat),storageMTime=0==storageMTimeActual?this.getLastProcessedFileMTime(path2):storageMTimeActual;if(onlyNew){const prefixedFileName=addPrefix(path2,ICHeader),filesOnDB=await this.localDatabase.getDBEntryMeta(prefixedFileName);if(compareMTime(storageMTime,getComparingMTime(filesOnDB,includeDeleted))!=TARGET_IS_NEW){this._log(`Hidden file:${path2} is not new.`,LOG_LEVEL_VERBOSE);filesOnDB&&stat&&this.updateLastProcessed(path2,filesOnDB,stat);return!0}}if("delete"==type){this._log(`Deletion detected: ${path2}`);return await this.deleteInternalFileOnDatabase(path2,forceWrite)}if("modified"==type){this._log(`Modification detected:${path2}`,LOG_LEVEL_VERBOSE);const result=await this.storeInternalFileToDatabase(cache2,forceWrite),resultText=void 0===result?"Nothing changed":result?"Updated":"Failed";this._log(`${resultText}: ${path2} ${resultText}`,LOG_LEVEL_VERBOSE);return result}})}catch(ex){this._log(`Failed to process hidden file:${path2}`);this._log(ex,LOG_LEVEL_VERBOSE)}return!0}queueConflictCheck(path2){this.conflictResolutionProcessor.enqueue(path2)}async resolveConflictOnInternalFiles(){const conflicted=this.localDatabase.findEntries(ICHeader,"i;",{conflicts:!0});this.conflictResolutionProcessor.suspend();try{for await(const doc of conflicted)"_conflicts"in doc&&isInternalMetadata(doc._id)&&this.conflictResolutionProcessor.enqueue(doc.path)}catch(ex){this._log("something went wrong on resolving all conflicted internal files");this._log(ex,LOG_LEVEL_VERBOSE)}await this.conflictResolutionProcessor.startPipeline().waitForAllProcessed()}async resolveByNewerEntry(id,path2,currentDoc,currentRev,conflictedRev){var _a8;const conflictedDoc=await this.localDatabase.getRaw(id,{rev:conflictedRev}),delRev=getComparingMTime(currentDoc,!0){this._log("Opening data-merging dialog",LOG_LEVEL_VERBOSE);const docs=[docA,docB],strippedPath=stripAllPrefixes(docA.path),storageFilePath=strippedPath,storeFilePath=strippedPath,displayFilename=`${storeFilePath}`;new JsonResolveModal(this.app,storageFilePath,[docA,docB],async(keep,result)=>{var _a8,_b5;try{let needFlush=!1;if(!result&&!keep){this._log(`Skipped merging: ${displayFilename}`);res2(!1);return}if(result||keep)for(const doc of docs)if(doc._rev!=keep&&await this.localDatabase.deleteDBEntry(this.getPath(doc),{rev:doc._rev})){this._log(`Conflicted revision has been deleted: ${displayFilename}`);needFlush=!0}if(!keep&&result){await this.core.storageAccess.isExistsIncludeHidden(storageFilePath)||await this.core.storageAccess.ensureDir(storageFilePath);const stat=await this.writeFile(storageFilePath,result);if(!stat)throw new Error("Stat failed");const mtime=getComparingMTime(stat);await this.storeInternalFileToDatabase({path:storageFilePath,mtime,ctime:null!=(_a8=null==stat?void 0:stat.ctime)?_a8:mtime,size:null!=(_b5=null==stat?void 0:stat.size)?_b5:0},!0);await this.triggerEvent(storageFilePath);this._log(`STORAGE <-- DB:${displayFilename}: written (hidden,merged)`)}needFlush&&(await this.extractInternalFileFromDatabase(storeFilePath,!1)?this._log(`STORAGE --\x3e DB:${displayFilename}: extracted (hidden,merged)`):this._log(`STORAGE --\x3e DB:${displayFilename}: extracted (hidden,merged) Failed`));res2(!0)}catch(ex){this._log("Could not merge conflicted json");this._log(ex,LOG_LEVEL_VERBOSE);res2(!1)}}).open()})}getDocProps(doc){const id=doc._id,shortenedId=id.substring(0,10),prefixedPath=this.getPath(doc),path2=stripAllPrefixes(prefixedPath),rev3=doc._rev,revDisplay=rev3?displayRev(rev3):"0-NOREVS",shortenedPath=path2.substring(0,10);return{id,rev:rev3,revDisplay,prefixedPath,path:path2,isDeleted:doc._deleted||doc.deleted||!1,shortenedId,shortenedPath}}async processReplicationResult(doc){const info3=this.getDocProps(doc),path2=info3.path,headerLine=`Tracking DB ${info3.path} (${info3.revDisplay}) :`,ret=await this.trackDatabaseFileModification(path2,headerLine);this._log(`${headerLine} Done: ${info3.shortenedId})`,LOG_LEVEL_VERBOSE);return ret}parseRegExpSettings(){const regExpKey=`${this.core.settings.syncInternalFilesTargetPatterns}||${this.core.settings.syncInternalFilesIgnorePatterns}`;let ignoreFilter,targetFilter;if(this.cacheFileRegExps.has(regExpKey)){const cached=this.cacheFileRegExps.get(regExpKey);ignoreFilter=cached[1];targetFilter=cached[0]}else{ignoreFilter=getFileRegExp(this.core.settings,"syncInternalFilesIgnorePatterns");targetFilter=getFileRegExp(this.core.settings,"syncInternalFilesTargetPatterns");this.cacheFileRegExps.clear();this.cacheFileRegExps.set(regExpKey,[targetFilter,ignoreFilter])}return{ignoreFilter,targetFilter}}isTargetFileInPatterns(path2){const{ignoreFilter,targetFilter}=this.parseRegExpSettings();if(ignoreFilter&&ignoreFilter.length>0)for(const pattern of ignoreFilter)if(pattern.test(path2))return!1;if(targetFilter&&targetFilter.length>0){for(const pattern of targetFilter)if(pattern.test(path2))return!0;return!1}return!0}getCustomisationSynchronizationIgnoredFiles(){const configDir=this.services.API.getSystemConfigDir(),key3=JSON.stringify(this.settings.pluginSyncExtendedSetting)+`||${this.settings.usePluginSync}||${configDir}`;if(this.cacheCustomisationSyncIgnoredFiles.has(key3))return this.cacheCustomisationSyncIgnoredFiles.get(key3);this.cacheCustomisationSyncIgnoredFiles.clear();const synchronisedInConfigSync=this.settings.usePluginSync?Object.values(this.settings.pluginSyncExtendedSetting).filter(e3=>e3.mode==MODE_SELECTIVE||e3.mode==MODE_PAUSED).map(e3=>e3.files).flat().map(e3=>`${configDir}/${e3}`.toLowerCase()):[];this.cacheCustomisationSyncIgnoredFiles.set(key3,synchronisedInConfigSync);return synchronisedInConfigSync}isNotIgnoredByCustomisationSync(path2){return!this.getCustomisationSynchronizationIgnoredFiles().some(e3=>path2.startsWith(e3))}isHiddenFileSyncHandlingPath(path2){return path2.startsWith(".")&&!path2.startsWith(".trash")}async isTargetFile(path2){return!!(this.isTargetFileInPatterns(path2)&&this.isNotIgnoredByCustomisationSync(path2)&&this.isHiddenFileSyncHandlingPath(path2))&&!await this.services.vault.isIgnoredByIgnoreFile(path2)}async trackScannedDatabaseChange(processFiles,showNotice=!1,onlyNew=!1,forceWriteAll=!1,includeDeletion=!0){const logLevel=getLogLevel(showNotice),p2=this._progress("[⚙ DB -> Storage ]\n",logLevel),notifyProgress=onlyInNTimes(100,progress=>p2.log(`${progress}/${processFiles.length}`)),processes=processFiles.map(async file=>{try{const path2=stripAllPrefixes(this.getPath(file));await this.isTargetFile(path2)?await this.trackDatabaseFileModification(path2,"[Hidden file scan]",!forceWriteAll,onlyNew,file,includeDeletion):this._log(`Database file tracking: Hidden file skipped: ${path2} is filtered out by the defined patterns.`,LOG_LEVEL_VERBOSE);notifyProgress()}catch(ex){this._log(`Failed to process storage change file:${file}`,logLevel);this._log(ex,LOG_LEVEL_VERBOSE)}});await Promise.all(processes);p2.done()}async applyOfflineChanges(showNotice){const logLevel=getLogLevel(showNotice);return await serialized("applyOfflineChanges",async()=>{const p2=this._progress("[⚙ Apply untracked changes ]\n",logLevel);this._log("Track changes.",logLevel);p2.log("Enumerating local files...");const currentStorageFiles=await this.scanInternalFileNames();p2.log("Enumerating database files...");const currentDatabaseFiles=await this.getAllDatabaseFiles(),allDatabaseMap=Object.fromEntries(currentDatabaseFiles.map(e3=>[stripAllPrefixes(this.getPath(e3)),e3])),currentDatabaseFileNames=[...Object.keys(allDatabaseMap)],untrackedLocal=currentStorageFiles.filter(e3=>!this._fileInfoLastProcessed.has(e3)),untrackedDatabase=currentDatabaseFileNames.filter(e3=>!this._databaseInfoLastProcessed.has(e3)),bothUntracked=untrackedLocal.filter(e3=>-1!==untrackedDatabase.indexOf(e3));p2.log("Applying untracked changes...");const stat=`Tracking statics:\nLocal files: ${currentStorageFiles.length}\nDatabase files: ${currentDatabaseFileNames.length}\nUntracked local files: ${untrackedLocal.length}\nUntracked database files: ${untrackedDatabase.length}\nCommon untracked files: ${bothUntracked.length}`;p2.once(stat);const semaphores2=Semaphore(10),notifyProgress=onlyInNTimes(25,progress=>p2.log(`${progress}/${bothUntracked.length}`)),allProcesses=bothUntracked.map(async file=>{notifyProgress();const rel=await semaphores2.acquire();try{const fileStat=await this.core.storageAccess.statHidden(file);if(null==fileStat){this._log(`Unexpected error: Failed to stat file during applyOfflineChange :${file}`);return}const dbInfo=allDatabaseMap[file];if(dbInfo.deleted||dbInfo._deleted)return;const diff=compareMTime(getComparingMTime(fileStat),getComparingMTime(dbInfo));diff==BASE_IS_NEW?await this.trackStorageFileModification(file,!0):diff==TARGET_IS_NEW?await this.trackDatabaseFileModification(file,"[Apply]",!0,!0,dbInfo):diff==EVEN&&this.updateLastProcessed(file,dbInfo,fileStat)}finally{rel()}});await Promise.all(allProcesses);await this.scanAllStorageChanges(showNotice);await this.scanAllDatabaseChanges(showNotice);p2.done()})}async scanAllDatabaseChanges(showNotice=!1,onlyNew=!1,forceWriteAll=!1,includeDeletion=!0){return await skipIfDuplicated("scanAllDatabaseChanges",async()=>{const databaseFiles=await this.getAllDatabaseFiles(),files=databaseFiles.filter(e3=>{const doc=e3,key3=this.docToKey(doc),path2=stripAllPrefixes(this.getPath(doc));return this.getLastProcessedDatabaseKey(path2)!=key3}),logLevel=getLogLevel(showNotice),staticsMessage=`[Database hidden file statics]\nAll files: ${databaseFiles.length}\nOffline Changed files: ${files.length}`;this._log(staticsMessage,logLevel,"scan-changes");return await this.trackScannedDatabaseChange(files,showNotice,onlyNew,forceWriteAll,includeDeletion)})}async useDatabaseFiles(files,showNotice=!1,onlyNew=!1){const logLevel=getLogLevel(showNotice),p2=this._progress("[⚙ Scanning DB -> Storage ]\n",logLevel);p2.log("Scanning database files...");const notifyProgress=onlyInNTimes(25,progress=>p2.log(`${progress}/${files.length}`)),processFiles=files.map(async file=>{try{const path2=stripAllPrefixes(this.getPath(file));await this.trackDatabaseFileModification(path2,"[Scanning]",!0,onlyNew,file);notifyProgress()}catch(ex){this._log(`Failed to process database changes:${file}`);this._log(ex,LOG_LEVEL_VERBOSE)}});await Promise.all(processFiles);p2.done();return!0}async trackDatabaseFileModification(path2,headerLine,preventDoubleProcess=!1,onlyNew=!1,meta=!1,includeDeletion=!0){return await this.serializedForEvent(path2,async()=>{try{const prefixedPath=addPrefix(path2,ICHeader),docMeta=meta||await this.localDatabase.getDBEntryMeta(prefixedPath,{conflicts:!0},!0);if(!1===docMeta){this._log(`${headerLine}: Failed to read detail of ${path2}`);throw new Error(`Failed to read detail ${path2}`)}if(docMeta._conflicts&&docMeta._conflicts.length>0){this.conflictResolutionProcessor.enqueue(path2);this._log(`${headerLine} Hidden file conflicted, enqueued to resolve`);return!0}await this.extractInternalFileFromDatabase(path2,!1,docMeta,preventDoubleProcess,onlyNew,includeDeletion)&&this._log(`${headerLine} Hidden file processed`)}catch(ex){this._log(`${headerLine} Failed to process hidden file`);this._log(ex,LOG_LEVEL_VERBOSE)}return!0})}notifyConfigChange(){const updatedFolders=[...this.queuedNotificationFiles];this.queuedNotificationFiles.clear();try{const manifests=Object.values(this.app.plugins.manifests),enabledPlugins=this.app.plugins.enabledPlugins,modifiedManifests=manifests.filter(e3=>enabledPlugins.has(e3.id)).filter(e3=>{var _a8;return updatedFolders.indexOf(null!=(_a8=null==e3?void 0:e3.dir)?_a8:"")>=0});for(const manifest of modifiedManifests){const updatePluginId=manifest.id,updatePluginName=manifest.name;this.core.confirm.askInPopup(`updated-${updatePluginId}`,`Files in ${updatePluginName} has been updated!\nPress {HERE} to reload ${updatePluginName}, or press elsewhere to dismiss this message.`,anchor=>{anchor.text="HERE";anchor.addEventListener("click",()=>{fireAndForget(async()=>{this._log(`Unloading plugin: ${updatePluginName}`,LOG_LEVEL_NOTICE,"plugin-reload-"+updatePluginId);await this.app.plugins.unloadPlugin(updatePluginId);await this.app.plugins.loadPlugin(updatePluginId);this._log(`Plugin reloaded: ${updatePluginName}`,LOG_LEVEL_NOTICE,"plugin-reload-"+updatePluginId)})})})}}catch(ex){this._log("Error on checking plugin status.");this._log(ex,LOG_LEVEL_VERBOSE)}updatedFolders.indexOf(this.services.API.getSystemConfigDir())>=0&&(this.services.appLifecycle.isReloadingScheduled()||this.core.confirm.askInPopup("updated-any-hidden","Some setting files have been modified\nPress {HERE} to schedule a reload of Obsidian, or press elsewhere to dismiss this message.",anchor=>{anchor.text="HERE";anchor.addEventListener("click",()=>{this.services.appLifecycle.scheduleRestart()})}))}queueNotification(key3){if(this.settings.suppressNotifyHiddenFilesChange)return;const configDir=this.services.API.getSystemConfigDir();if(!key3.startsWith(configDir))return;const dirName=key3.split("/").slice(0,-1).join("/");this.queuedNotificationFiles.add(dirName);scheduleTask("notify-config-change",1e3,()=>{this.notifyConfigChange()})}async rebuildMerging(showNotice,targetFiles=!1){const logLevel=getLogLevel(showNotice),p2=this._progress("[⚙ Rebuild by Merge ]\n",logLevel);this._log("Rebuilding hidden files from the storage and the local database.",logLevel);p2.log("Enumerating local files...");const currentStorageFilesAll=await this.scanInternalFileNames(),currentStorageFiles=targetFiles?currentStorageFilesAll.filter(e3=>targetFiles.some(f4=>f4==e3)):currentStorageFilesAll;p2.log("Enumerating database files...");const allDatabaseFiles=await this.getAllDatabaseFiles(),allDatabaseMap=new Map(allDatabaseFiles.map(e3=>[stripAllPrefixes(this.getPath(e3)),e3])),currentDatabaseFiles=targetFiles?allDatabaseFiles.filter(e3=>targetFiles.some(f4=>f4==stripAllPrefixes(this.getPath(e3)))):allDatabaseFiles,allFileNames=new Set([...currentStorageFiles,...currentDatabaseFiles.map(e3=>stripAllPrefixes(this.getPath(e3)))]),storageToDatabase=[],databaseToStorage=[],eachProgress=onlyInNTimes(100,progress=>p2.log(`Checking ${progress}/${allFileNames.size}`));for(const file of allFileNames){eachProgress();const mtimeStorage=getComparingMTime(await this.core.storageAccess.statHidden(file)),dbEntry=allDatabaseMap.get(file),diff=compareMTime(mtimeStorage,getComparingMTime(dbEntry));diff==BASE_IS_NEW?storageToDatabase.push(file):diff==TARGET_IS_NEW?databaseToStorage.push(dbEntry):diff==EVEN&&storageToDatabase.push(file)}p2.once(`Storage to Database: ${storageToDatabase.length} files\n Database to Storage: ${databaseToStorage.length} files`);this.resetLastProcessedDatabase(targetFiles);this.resetLastProcessedFile(targetFiles);const processes=[this.useStorageFiles(storageToDatabase,showNotice,!1),this.useDatabaseFiles(databaseToStorage,showNotice,!1)];p2.log("Start processing...");await Promise.all(processes);p2.done();return[...allFileNames]}async rebuildFromStorage(showNotice,targetFiles=!1,onlyNew=!1){const logLevel=getLogLevel(showNotice);this._verbose("Rebuilding hidden files from the storage.");this._log("Rebuilding hidden files from the storage.",logLevel);const p2=this._progress("[⚙ Rebuild by Storage ]\n",logLevel);p2.log("Enumerating local files...");const currentFilesAll=await this.scanInternalFileNames(),currentFiles=targetFiles?currentFilesAll.filter(e3=>targetFiles.some(f4=>f4==e3)):currentFilesAll;p2.once(`Storage to Database: ${currentFiles.length} files.`);p2.log("Start processing...");this.resetLastProcessedFile(targetFiles);await this.useStorageFiles(currentFiles,showNotice,onlyNew);p2.done();return currentFiles}async getAllDatabaseFiles(){const allFiles=(await this.localDatabase.allDocsRaw({startkey:ICHeader,endkey:"i;",include_docs:!0})).rows.filter(e3=>isInternalMetadata(e3.id)).map(e3=>e3.doc),files=[];for(const file of allFiles)await this.isTargetFile(stripAllPrefixes(this.getPath(file)))&&files.push(file);return files}async rebuildFromDatabase(showNotice,targetFiles=!1,onlyNew=!1){const logLevel=getLogLevel(showNotice);this._verbose("Rebuilding hidden files from the local database.");const p2=this._progress("[⚙ Rebuild by Database ]\n",logLevel);p2.log("Enumerating database files...");const allFiles=await this.getAllDatabaseFiles(),currentFiles=targetFiles?allFiles.filter(e3=>targetFiles.some(f4=>f4==stripAllPrefixes(this.getPath(e3)))):allFiles;p2.once(`Database to Storage: ${currentFiles.length} files.`);this.resetLastProcessedDatabase(targetFiles);p2.log("Start processing...");await this.useDatabaseFiles(currentFiles,showNotice,onlyNew);p2.done();return currentFiles}async initialiseInternalFileSync(direction,showMessage,targetFilesSrc=!1){const logLevel=showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,p2=this._progress("[⚙ Initialise]\n",logLevel);p2.log("Initialising hidden files sync...");const targetFiles=!!targetFilesSrc&&targetFilesSrc.map(e3=>stripAllPrefixes(e3));if("pushForce"==direction||"push"==direction){const onlyNew="push"==direction;p2.log("Started: Storage --\x3e Database "+(onlyNew?"(Only New)":""));const updatedFiles=await this.rebuildFromStorage(showMessage,targetFiles,onlyNew);await this.adoptCurrentStorageFilesAsProcessed(updatedFiles);await this.adoptCurrentDatabaseFilesAsProcessed(updatedFiles);await this.scanAllStorageChanges(showMessage,!0,!1);await this.scanAllDatabaseChanges(showMessage,!0,!1)}if("pullForce"==direction||"pull"==direction){const onlyNew="pull"==direction;p2.log("Started: Database --\x3e Storage "+(onlyNew?"(Only New)":""));const updatedFiles=(await this.rebuildFromDatabase(showMessage,targetFiles,onlyNew)).map(e3=>stripAllPrefixes(this.getPath(e3)));await this.adoptCurrentStorageFilesAsProcessed(updatedFiles);await this.adoptCurrentDatabaseFilesAsProcessed(updatedFiles);await this.scanAllDatabaseChanges(showMessage,!0,!1);await this.scanAllStorageChanges(showMessage,!0,!1)}if("safe"==direction){p2.log("Started: Database <--\x3e Storage (by modified date)");const updatedFiles=await this.rebuildMerging(showMessage,targetFiles);await this.adoptCurrentStorageFilesAsProcessed(updatedFiles);await this.adoptCurrentDatabaseFilesAsProcessed(updatedFiles);await this.scanAllStorageChanges(showMessage,!0,!1);await this.scanAllDatabaseChanges(showMessage,!0,!1)}p2.done()}async __loadBaseSaveData(file,includeContent=!0){const prefixedFileName=addPrefix(file,ICHeader),id=await this.path2id(prefixedFileName,ICHeader);try{const old=includeContent?await this.localDatabase.getDBEntry(prefixedFileName,void 0,!1,!0):await this.localDatabase.getDBEntryMeta(prefixedFileName,{conflicts:!0},!0);return!1===old?{_id:id,data:[],path:prefixedFileName,mtime:0,ctime:0,datatype:"newnote",children:[],size:0,deleted:!1,type:"newnote",eden:{}}:old}catch(ex){this._log("Getting base save data failed");this._log(ex,LOG_LEVEL_VERBOSE);return!1}}async storeInternalFileToDatabase(file,forceWrite=!1){const storeFilePath=stripAllPrefixes(file.path),storageFilePath=file.path;if(await this.services.vault.isIgnoredByIgnoreFile(storageFilePath))return;const prefixedFileName=addPrefix(storeFilePath,ICHeader);return await serialized("file-"+prefixedFileName,async()=>{try{const fileInfo="stat"in file&&"body"in file?file:await this.loadFileWithInfo(storeFilePath);if(fileInfo.deleted)throw new Error(`Hidden file:${storeFilePath} is deleted. This should not be occurred.`);const baseData=await this.__loadBaseSaveData(storeFilePath,!0);if(!1===baseData)throw new Error("Failed to load base data");if(baseData._rev&&!forceWrite&&await isDocContentSame(readAsBlob(baseData),fileInfo.body)){this.updateLastProcessed(storeFilePath,baseData,fileInfo.stat);return}const saveData={...baseData,data:fileInfo.body,mtime:fileInfo.stat.mtime,size:fileInfo.stat.size,children:[],deleted:!1,type:baseData.datatype},ret=await this.localDatabase.putDBEntry(saveData);if(ret&&ret.ok){saveData._rev=ret.rev;this.updateLastProcessed(storeFilePath,saveData,fileInfo.stat)}const success=ret&&ret.ok;this._log(`STORAGE --\x3e DB:${storageFilePath}: (hidden) ${success?"Done":"Failed"}`);return success}catch(ex){this._log(`STORAGE --\x3e DB:${storageFilePath}: (hidden) Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}})}async deleteInternalFileOnDatabase(filenameSrc,forceWrite=!1){const storeFilePath=filenameSrc,storageFilePath=filenameSrc,displayFileName=filenameSrc,prefixedFileName=addPrefix(storeFilePath,ICHeader),mtime=(new Date).getTime();if(!await this.services.vault.isIgnoredByIgnoreFile(storageFilePath))return await serialized("file-"+prefixedFileName,async()=>{try{const baseData=await this.__loadBaseSaveData(storeFilePath,!1);if(!1===baseData)throw new Error("Failed to load base data during deleting");if(void 0!==baseData._conflicts)for(const conflictRev of baseData._conflicts){await this.localDatabase.removeRevision(baseData._id,conflictRev);this._log(`STORAGE -x> DB: ${displayFileName}: (hidden) conflict removed ${baseData._rev} => ${conflictRev}`,LOG_LEVEL_VERBOSE)}if(baseData.deleted){this._log(`STORAGE -x> DB: ${displayFileName}: (hidden) already deleted`,LOG_LEVEL_VERBOSE);this.updateLastProcessedDeletion(storeFilePath,baseData);return!0}const saveData={...baseData,mtime,size:0,children:[],deleted:!0,type:baseData.datatype},ret=await this.localDatabase.putRaw(saveData);if(ret&&ret.ok){this._log(`STORAGE -x> DB: ${displayFileName}: (hidden) Done`);saveData._rev=ret.rev;this.updateLastProcessedDeletion(storeFilePath,saveData);return!0}this._log(`STORAGE -x> DB: ${displayFileName}: (hidden) Failed`);return!1}catch(ex){this._log(`STORAGE -x> DB: ${displayFileName}: (hidden) Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}})}async extractInternalFileFromDatabase(storageFilePath,force=!1,metaEntry,preventDoubleProcess=!0,onlyNew=!1,includeDeletion=!0){const prefixedFileName=addPrefix(storageFilePath,ICHeader);if(!await this.services.vault.isIgnoredByIgnoreFile(storageFilePath))return await serialized("file-"+prefixedFileName,async()=>{var _a8,_b5;try{const metaOnDB=metaEntry||await this.localDatabase.getDBEntryMeta(prefixedFileName,{conflicts:!0},!0);if(!1===metaOnDB)throw new Error(`File not found on database.:${storageFilePath}`);if(null==(_a8=null==metaOnDB?void 0:metaOnDB._conflicts)?void 0:_a8.length){this._log(`Hidden file ${storageFilePath} has conflicted revisions, to keep in safe, writing to storage has been prevented`,LOG_LEVEL_INFO);return!1}if(preventDoubleProcess){const key3=this.docToKey(metaOnDB);if(this.getLastProcessedDatabaseKey(storageFilePath)==key3&&!force){this._log(`STORAGE <-- DB: ${storageFilePath}: skipped (hidden, overwrite${force?", force":""}) (Previously processed)`);return}}if(onlyNew){const dbMTime=getComparingMTime(metaOnDB,includeDeletion),storageStat=await this.core.storageAccess.statHidden(storageFilePath),storageMTimeActual=null!=(_b5=null==storageStat?void 0:storageStat.mtime)?_b5:0;if(compareMTime(0==storageMTimeActual?this.getLastProcessedFileMTime(storageFilePath):storageMTimeActual,dbMTime)!=TARGET_IS_NEW){this._log(`STORAGE <-- DB: ${storageFilePath}: skipped (hidden, overwrite${force?", force":""}) (Not new)`);this.updateLastProcessedDatabase(storageFilePath,metaOnDB);storageStat&&this.updateLastProcessedFile(storageFilePath,storageStat);return}}if(metaOnDB.deleted||metaOnDB._deleted){const result=await this.__deleteFile(storageFilePath);if("OK"==result){this.updateLastProcessedDeletion(storageFilePath,metaOnDB);return!0}if("ALREADY"==result){this.updateLastProcessedDatabase(storageFilePath,metaOnDB);return!0}return!1}{const fileOnDB=await this.localDatabase.getDBEntryFromMeta(metaOnDB,!1,!0);if(!1===fileOnDB)throw new Error(`Failed to read file from database:${storageFilePath}`);const resultStat=await this.__writeFile(storageFilePath,fileOnDB,force);if(resultStat){this.updateLastProcessed(storageFilePath,metaOnDB,resultStat);this.queueNotification(storageFilePath);this._log(`STORAGE <-- DB: ${storageFilePath}: written (hidden, overwrite${force?", force":""}) Done`);return!0}}return!1}catch(ex){this._log(`STORAGE <-- DB: ${storageFilePath}: written (hidden, overwrite${force?", force":""}) Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}})}async __checkIsNeedToWriteFile(storageFilePath,content){try{const storageContent=await this.core.storageAccess.readHiddenFileAuto(storageFilePath);return!await isDocContentSame(storageContent,content)}catch(ex){this._log(`Cannot check the content of ${storageFilePath}`);this._log(ex,LOG_LEVEL_VERBOSE);return!0}}async __writeFile(storageFilePath,fileOnDB,force){try{const statBefore=await this.core.storageAccess.statHidden(storageFilePath),isExist=null!=statBefore,writeContent=readContent(fileOnDB);await this.ensureDir(storageFilePath);if(!(force||!isExist||isExist&&await this.__checkIsNeedToWriteFile(storageFilePath,writeContent))){this._log(`STORAGE <-- DB: ${storageFilePath}: skipped (hidden) Not changed`,LOG_LEVEL_DEBUG);return statBefore}const writeResultStat=await this.writeFile(storageFilePath,writeContent,{mtime:fileOnDB.mtime,ctime:fileOnDB.ctime});if(null==writeResultStat){this._log(`STORAGE <-- DB: ${storageFilePath}: written (hidden,new${force?", force":""}) Failed (writeResult)`);return!1}this._log(`STORAGE <-- DB: ${storageFilePath}: written (hidden, overwrite${force?", force":""})`);return writeResultStat}catch(ex){this._log(`STORAGE <-- DB: ${storageFilePath}: written (hidden, overwrite${force?", force":""}) Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}}async __deleteFile(storageFilePath){const result=await this.__removeFile(storageFilePath);if(!1===result){this._log(`STORAGE [!DETAILS]-\n> This feature allows you to synchronize all hidden files without any user interaction.\n> To enable this feature, you should choose one of the following options:\n${opt.enableFetch?"> - Fetch: Use the files stored from other devices. Choose this option if you have already configured hidden file synchronization on those devices and wish to accept their files.\n":""}${opt.enableOverwrite?"> - Overwrite: Use the files from this device. Select this option if you want to overwrite the files stored on other devices.\n":""}> - Merge: Merge the files from this device with those on other devices. Choose this option if you wish to combine files from multiple sources.\n> However, please be reminded that merging may cause conflicts if the files are not identical. Additionally, this process may occur within the same folder, potentially breaking your plug-in or theme settings that comprise multiple files.\n\n\n> [!IMPORTANT]\n> Please keep in mind that enabling this feature alongside customisation sync may override certain behaviors.`,choices=[];(null==opt?void 0:opt.enableFetch)&&choices.push("Fetch");(null==opt?void 0:opt.enableOverwrite)&&choices.push("Overwrite");choices.push("Merge");choices.push("Disable");const ret=await this.core.confirm.confirmWithMessage("Hidden file sync",message,choices,"Disable",40);"Fetch"==ret?await this.configureHiddenFileSync("FETCH"):"Overwrite"==ret?await this.configureHiddenFileSync("OVERWRITE"):"Merge"==ret?await this.configureHiddenFileSync("MERGE"):"Disable"==ret&&await this.configureHiddenFileSync("DISABLE_HIDDEN")}_allSuspendExtraSync(){if(this.core.settings.syncInternalFiles){this._log("Hidden file synchronization have been temporarily disabled. Please enable them after the fetching, if you need them.",LOG_LEVEL_NOTICE);this.core.settings.syncInternalFiles=!1}return Promise.resolve(!0)}async _allConfigureOptionalSyncFeature(mode){await this.configureHiddenFileSync(mode);return!0}async configureHiddenFileSync(mode){if("FETCH"==mode||"OVERWRITE"==mode||"MERGE"==mode||"DISABLE"==mode||"DISABLE_HIDDEN"==mode)if("DISABLE"!=mode&&"DISABLE_HIDDEN"!=mode){this._log("Gathering files for enabling Hidden File Sync",LOG_LEVEL_NOTICE);"FETCH"==mode?await this.initialiseInternalFileSync("pullForce",!0):"OVERWRITE"==mode?await this.initialiseInternalFileSync("pushForce",!0):"MERGE"==mode&&await this.initialiseInternalFileSync("safe",!0);await this.core.services.setting.applyPartial({useAdvancedMode:!0,syncInternalFiles:!0},!0);this._log("Done! Restarting the app is strongly recommended!",LOG_LEVEL_NOTICE)}else await this.core.services.setting.applyPartial({syncInternalFiles:!1},!0)}async scanInternalFileNames(){const findRoot=this.app.vault.getRoot().path;return await this.getFiles(findRoot,path2=>this.isTargetFile(path2))}async scanInternalFiles(){var _a8,_b5,_c3,_d2,_e2,_f;const files=(await this.scanInternalFileNames()).map(async e3=>({path:e3,stat:await this.core.storageAccess.statHidden(e3)})),result=[];for(const f4 of files){const w2=await f4;if(await this.services.vault.isIgnoredByIgnoreFile(w2.path))continue;const mtime=null!=(_b5=null==(_a8=w2.stat)?void 0:_a8.mtime)?_b5:0,ctime=null!=(_d2=null==(_c3=w2.stat)?void 0:_c3.ctime)?_d2:mtime,size=null!=(_f=null==(_e2=w2.stat)?void 0:_e2.size)?_f:0;result.push({...w2,mtime,ctime,size})}return result}async getFiles(path2,checkFunction){let w2;try{w2=await this.app.vault.adapter.list(path2)}catch(ex){this._log(`Could not traverse(HiddenSync):${path2}`,LOG_LEVEL_INFO);this._log(ex,LOG_LEVEL_VERBOSE);return[]}let files=[];for(const file of w2.files)await checkFunction(file)&&files.push(file);for(const v2 of w2.folders)await checkFunction(v2)&&(files=files.concat(await this.getFiles(v2,checkFunction)));return files}onBindFunction(core,services){services.appLifecycle.onSettingLoaded.addHandler(this._everyOnloadAfterLoadSettings.bind(this));services.fileProcessing.processOptionalFileEvent.addHandler(this._anyProcessOptionalFileEvent.bind(this));services.conflict.getOptionalConflictCheckMethod.addHandler(this._anyGetOptionalConflictCheckMethod.bind(this));services.replication.processOptionalSynchroniseResult.addHandler(this._anyProcessOptionalSyncFiles.bind(this));services.setting.onRealiseSetting.addHandler(this._everyRealizeSettingSyncMode.bind(this));services.appLifecycle.onResuming.addHandler(this._everyOnResumeProcess.bind(this));services.replication.onBeforeReplicate.addHandler(this._everyBeforeReplicate.bind(this));services.databaseEvents.onDatabaseInitialised.addHandler(this._everyOnDatabaseInitialized.bind(this));services.setting.suspendExtraSync.addHandler(this._allSuspendExtraSync.bind(this));services.setting.suggestOptionalFeatures.addHandler(this._allAskUsingOptionalSyncFeature.bind(this));services.setting.enableOptionalFeature.addHandler(this._allConfigureOptionalSyncFeature.bind(this));services.vault.isTargetFileInExtra.addHandler(this.isTargetFile.bind(this))}};t=new Uint8Array([0,97,115,109,1,0,0,0,1,48,8,96,3,127,127,127,0,96,3,127,127,127,1,127,96,2,127,127,0,96,2,127,126,0,96,1,127,1,127,96,1,127,1,126,96,3,127,127,126,1,126,96,3,126,127,127,1,126,3,11,10,1,1,2,0,4,6,7,3,0,5,5,3,1,0,1,7,85,9,3,109,101,109,2,0,5,120,120,104,51,50,0,0,6,105,110,105,116,51,50,0,2,8,117,112,100,97,116,101,51,50,0,3,8,100,105,103,101,115,116,51,50,0,4,5,120,120,104,54,52,0,5,6,105,110,105,116,54,52,0,7,8,117,112,100,97,116,101,54,52,0,8,8,100,105,103,101,115,116,54,52,0,9,10,211,23,10,242,1,1,4,127,32,0,32,1,106,33,3,32,1,65,16,79,4,127,32,3,65,16,107,33,6,32,2,65,168,136,141,161,2,106,33,3,32,2,65,247,148,175,175,120,106,33,4,32,2,65,177,243,221,241,121,107,33,5,3,64,32,0,40,2,0,65,247,148,175,175,120,108,32,3,106,65,13,119,65,177,243,221,241,121,108,33,3,32,0,65,4,106,34,0,40,2,0,65,247,148,175,175,120,108,32,4,106,65,13,119,65,177,243,221,241,121,108,33,4,32,0,65,4,106,34,0,40,2,0,65,247,148,175,175,120,108,32,2,106,65,13,119,65,177,243,221,241,121,108,33,2,32,0,65,4,106,34,0,40,2,0,65,247,148,175,175,120,108,32,5,106,65,13,119,65,177,243,221,241,121,108,33,5,32,0,65,4,106,34,0,32,6,77,13,0,11,32,2,65,12,119,32,5,65,18,119,106,32,4,65,7,119,106,32,3,65,1,119,106,5,32,2,65,177,207,217,178,1,106,11,32,1,106,32,0,32,1,65,15,113,16,1,11,146,1,0,32,1,32,2,106,33,2,3,64,32,1,65,4,106,32,2,75,69,4,64,32,1,40,2,0,65,189,220,202,149,124,108,32,0,106,65,17,119,65,175,214,211,190,2,108,33,0,32,1,65,4,106,33,1,12,1,11,11,3,64,32,1,32,2,79,69,4,64,32,1,45,0,0,65,177,207,217,178,1,108,32,0,106,65,11,119,65,177,243,221,241,121,108,33,0,32,1,65,1,106,33,1,12,1,11,11,32,0,65,15,118,32,0,115,65,247,148,175,175,120,108,34,0,32,0,65,13,118,115,65,189,220,202,149,124,108,34,0,32,0,65,16,118,115,11,63,0,32,0,65,8,106,32,1,65,168,136,141,161,2,106,54,2,0,32,0,65,12,106,32,1,65,247,148,175,175,120,106,54,2,0,32,0,65,16,106,32,1,54,2,0,32,0,65,20,106,32,1,65,177,243,221,241,121,107,54,2,0,11,211,4,1,6,127,32,1,32,2,106,33,6,32,0,65,24,106,33,5,32,0,65,40,106,40,2,0,33,3,32,0,32,0,40,2,0,32,2,106,54,2,0,32,0,65,4,106,34,4,32,4,40,2,0,32,2,65,16,79,32,0,40,2,0,65,16,79,114,114,54,2,0,32,2,32,3,106,65,16,73,4,64,32,3,32,5,106,32,1,32,2,252,10,0,0,32,0,65,40,106,32,2,32,3,106,54,2,0,15,11,32,3,4,64,32,3,32,5,106,32,1,65,16,32,3,107,34,2,252,10,0,0,32,0,65,8,106,34,3,40,2,0,32,5,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,4,32,3,32,4,54,2,0,32,0,65,12,106,34,3,40,2,0,32,5,65,4,106,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,4,32,3,32,4,54,2,0,32,0,65,16,106,34,3,40,2,0,32,5,65,8,106,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,4,32,3,32,4,54,2,0,32,0,65,20,106,34,3,40,2,0,32,5,65,12,106,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,4,32,3,32,4,54,2,0,32,0,65,40,106,65,0,54,2,0,32,1,32,2,106,33,1,11,32,1,32,6,65,16,107,77,4,64,32,6,65,16,107,33,8,32,0,65,8,106,40,2,0,33,2,32,0,65,12,106,40,2,0,33,3,32,0,65,16,106,40,2,0,33,4,32,0,65,20,106,40,2,0,33,7,3,64,32,1,40,2,0,65,247,148,175,175,120,108,32,2,106,65,13,119,65,177,243,221,241,121,108,33,2,32,1,65,4,106,34,1,40,2,0,65,247,148,175,175,120,108,32,3,106,65,13,119,65,177,243,221,241,121,108,33,3,32,1,65,4,106,34,1,40,2,0,65,247,148,175,175,120,108,32,4,106,65,13,119,65,177,243,221,241,121,108,33,4,32,1,65,4,106,34,1,40,2,0,65,247,148,175,175,120,108,32,7,106,65,13,119,65,177,243,221,241,121,108,33,7,32,1,65,4,106,34,1,32,8,77,13,0,11,32,0,65,8,106,32,2,54,2,0,32,0,65,12,106,32,3,54,2,0,32,0,65,16,106,32,4,54,2,0,32,0,65,20,106,32,7,54,2,0,11,32,1,32,6,73,4,64,32,5,32,1,32,6,32,1,107,34,1,252,10,0,0,32,0,65,40,106,32,1,54,2,0,11,11,97,1,1,127,32,0,65,16,106,40,2,0,33,1,32,0,65,4,106,40,2,0,4,127,32,1,65,12,119,32,0,65,20,106,40,2,0,65,18,119,106,32,0,65,12,106,40,2,0,65,7,119,106,32,0,65,8,106,40,2,0,65,1,119,106,5,32,1,65,177,207,217,178,1,106,11,32,0,40,2,0,106,32,0,65,24,106,32,0,65,40,106,40,2,0,16,1,11,157,4,2,1,127,3,126,32,0,32,1,106,33,3,32,1,65,32,79,4,126,32,3,65,32,107,33,3,32,2,66,135,149,175,175,152,182,222,155,158,127,124,66,207,214,211,190,210,199,171,217,66,124,33,4,32,2,66,207,214,211,190,210,199,171,217,66,124,33,5,32,2,66,0,124,33,6,32,2,66,135,149,175,175,152,182,222,155,158,127,125,33,2,3,64,32,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,4,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,4,32,0,65,8,106,34,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,5,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,5,32,0,65,8,106,34,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,6,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,6,32,0,65,8,106,34,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,2,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,2,32,0,65,8,106,34,0,32,3,77,13,0,11,32,6,66,12,137,32,2,66,18,137,124,32,5,66,7,137,124,32,4,66,1,137,124,32,4,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,32,5,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,32,6,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,32,2,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,5,32,2,66,197,207,217,178,241,229,186,234,39,124,11,32,1,173,124,32,0,32,1,65,31,113,16,6,11,137,2,0,32,1,32,2,106,33,2,3,64,32,1,65,8,106,32,2,77,4,64,32,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,32,0,133,66,27,137,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,33,0,32,1,65,8,106,33,1,12,1,11,11,32,1,65,4,106,32,2,77,4,64,32,1,53,2,0,66,135,149,175,175,152,182,222,155,158,127,126,32,0,133,66,23,137,66,207,214,211,190,210,199,171,217,66,126,66,249,243,221,241,153,246,153,171,22,124,33,0,32,1,65,4,106,33,1,11,3,64,32,1,32,2,73,4,64,32,1,49,0,0,66,197,207,217,178,241,229,186,234,39,126,32,0,133,66,11,137,66,135,149,175,175,152,182,222,155,158,127,126,33,0,32,1,65,1,106,33,1,12,1,11,11,32,0,66,33,136,32,0,133,66,207,214,211,190,210,199,171,217,66,126,34,0,32,0,66,29,136,133,66,249,243,221,241,153,246,153,171,22,126,34,0,32,0,66,32,136,133,11,88,0,32,0,65,8,106,32,1,66,135,149,175,175,152,182,222,155,158,127,124,66,207,214,211,190,210,199,171,217,66,124,55,3,0,32,0,65,16,106,32,1,66,207,214,211,190,210,199,171,217,66,124,55,3,0,32,0,65,24,106,32,1,55,3,0,32,0,65,32,106,32,1,66,135,149,175,175,152,182,222,155,158,127,125,55,3,0,11,132,5,2,3,127,4,126,32,1,32,2,106,33,5,32,0,65,40,106,33,4,32,0,65,200,0,106,40,2,0,33,3,32,0,32,0,41,3,0,32,2,173,124,55,3,0,32,2,32,3,106,65,32,73,4,64,32,3,32,4,106,32,1,32,2,252,10,0,0,32,0,65,200,0,106,32,2,32,3,106,54,2,0,15,11,32,3,4,64,32,3,32,4,106,32,1,65,32,32,3,107,34,2,252,10,0,0,32,0,65,8,106,34,3,41,3,0,32,4,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,6,32,3,32,6,55,3,0,32,0,65,16,106,34,3,41,3,0,32,4,65,8,106,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,6,32,3,32,6,55,3,0,32,0,65,24,106,34,3,41,3,0,32,4,65,16,106,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,6,32,3,32,6,55,3,0,32,0,65,32,106,34,3,41,3,0,32,4,65,24,106,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,6,32,3,32,6,55,3,0,32,0,65,200,0,106,65,0,54,2,0,32,1,32,2,106,33,1,11,32,1,65,32,106,32,5,77,4,64,32,5,65,32,107,33,2,32,0,65,8,106,41,3,0,33,6,32,0,65,16,106,41,3,0,33,7,32,0,65,24,106,41,3,0,33,8,32,0,65,32,106,41,3,0,33,9,3,64,32,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,6,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,6,32,1,65,8,106,34,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,7,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,7,32,1,65,8,106,34,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,8,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,8,32,1,65,8,106,34,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,9,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,9,32,1,65,8,106,34,1,32,2,77,13,0,11,32,0,65,8,106,32,6,55,3,0,32,0,65,16,106,32,7,55,3,0,32,0,65,24,106,32,8,55,3,0,32,0,65,32,106,32,9,55,3,0,11,32,1,32,5,73,4,64,32,4,32,1,32,5,32,1,107,34,1,252,10,0,0,32,0,65,200,0,106,32,1,54,2,0,11,11,200,2,1,5,126,32,0,65,24,106,41,3,0,33,1,32,0,41,3,0,34,2,66,32,90,4,126,32,0,65,8,106,41,3,0,34,3,66,1,137,32,0,65,16,106,41,3,0,34,4,66,7,137,124,32,1,66,12,137,32,0,65,32,106,41,3,0,34,5,66,18,137,124,124,32,3,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,32,4,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,32,1,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,32,5,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,5,32,1,66,197,207,217,178,241,229,186,234,39,124,11,32,2,124,32,0,65,40,106,32,2,66,31,131,167,16,6,11]);hashFunc=str=>fallbackMixedHashEach(str);!async function initHashFunc(){try{const{h32ToString}=await e();hashFunc=h32ToString;Logger("xxhash for plugin initialised",LOG_LEVEL_VERBOSE)}catch(ex){Logger("Could not initialise xxhash. fallback...",LOG_LEVEL_VERBOSE);Logger(ex);hashFunc=str=>fallbackMixedHashEach(str)}}();globalSlipBoard2=globalSlipBoard;import_diff_match_patch2=__toESM(require_diff_match_patch(),1);ConflictResolveModal=class extends import_obsidian.Modal{constructor(app,filename,diff,pluginPickMode,remoteName){super(app);this.response=CANCELLED;this.isClosed=!1;this.consumed=!1;this.title="Conflicting changes";this.pluginPickMode=!1;this.localName="Base";this.remoteName="Conflicted";this.result=diff;this.filename=filename;this.pluginPickMode=pluginPickMode||!1;if(this.pluginPickMode){this.title="Pick a version";this.remoteName=`${remoteName||"Remote"}`;this.localName="Local"}}onOpen(){const{contentEl}=this;globalSlipBoard2.submit("conflict-resolved",this.filename,CANCELLED);this.offEvent&&this.offEvent();this.offEvent=eventHub.onEvent("conflict-cancelled",path2=>{path2===this.filename&&this.sendResponse(CANCELLED)});this.titleEl.setText(this.title);contentEl.empty();contentEl.createEl("span",{text:this.filename});const div=contentEl.createDiv("");div.addClass("op-scrollable");div.addClass("ls-dialog");let diff="";for(const v2 of this.result.diff){const x1=v2[0],x2=v2[1];x1==import_diff_match_patch2.DIFF_DELETE?diff+=""+escapeStringToHTML(x2).replace(/\n/g,"\n")+"":x1==import_diff_match_patch2.DIFF_EQUAL?diff+=""+escapeStringToHTML(x2).replace(/\n/g,"\n")+"":x1==import_diff_match_patch2.DIFF_INSERT&&(diff+=""+escapeStringToHTML(x2).replace(/\n/g,"\n")+"")}const div2=contentEl.createDiv("");div2.addClass("ls-dialog");const date1=new Date(this.result.left.mtime).toLocaleString()+(this.result.left.deleted?" (Deleted)":""),date2=new Date(this.result.right.mtime).toLocaleString()+(this.result.right.deleted?" (Deleted)":"");div2.innerHTML=`${this.localName}: ${date1}
\n${this.remoteName}: ${date2}
`;contentEl.createEl("button",{text:`Use ${this.localName}`},e3=>e3.addEventListener("click",()=>this.sendResponse(this.result.right.rev))).style.marginRight="4px";contentEl.createEl("button",{text:`Use ${this.remoteName}`},e3=>e3.addEventListener("click",()=>this.sendResponse(this.result.left.rev))).style.marginRight="4px";this.pluginPickMode||(contentEl.createEl("button",{text:"Concat both"},e3=>e3.addEventListener("click",()=>this.sendResponse(LEAVE_TO_SUBSEQUENT))).style.marginRight="4px");contentEl.createEl("button",{text:this.pluginPickMode?"Cancel":"Not now"},e3=>e3.addEventListener("click",()=>this.sendResponse(CANCELLED))).style.marginRight="4px";diff=diff.replace(/\n/g,"
");diff.length>102400?div.innerText="(Too large diff to display)":div.innerHTML=diff}sendResponse(result){this.response=result;this.close()}onClose(){const{contentEl}=this;contentEl.empty();this.offEvent&&this.offEvent();if(!this.consumed){this.consumed=!0;globalSlipBoard2.submit("conflict-resolved",this.filename,this.response)}}async waitForResult(){await delay(100);return await globalSlipBoard2.awaitNext("conflict-resolved",this.filename)}};(function enable_legacy_mode_flag(){legacy_mode_flag=!0})();root_3=from_html("");root_62=from_html('');root_7=from_html('');root_8=from_html('');root_42=from_html(' ',1);root_9=from_html(' ',1);root_11=from_html('');root_122=from_html('');root_22=from_html(' ',1);root_13=from_html(' ',1);root_132=from_html(' All the same or non-existent ',1);$$css3={hash:"svelte-14nm4oc",code:'.spacer.svelte-14nm4oc {min-width:1px;flex-grow:1;}button.svelte-14nm4oc {margin:2px 4px;min-width:3em;max-width:4em;}button.svelte-14nm4oc:disabled {border:none;box-shadow:none;background-color:transparent;visibility:collapse;}button.svelte-14nm4oc:disabled:hover {border:none;box-shadow:none;background-color:transparent;visibility:collapse;}span.message.svelte-14nm4oc {color:var(--text-muted);font-size:var(--font-ui-smaller);padding:0 1em;line-height:var(--line-height-tight);}\n /* span.messages {\n display: flex;\n flex-direction: column;\n align-items: center;\n } */.is-mobile .spacer.svelte-14nm4oc {margin-left:auto;}.chip-wrap.svelte-14nm4oc {display:flex;gap:2px;flex-direction:column;justify-content:center;align-items:flex-start;}.chip.svelte-14nm4oc {display:inline-block;border-radius:2px;font-size:0.8em;padding:0 4px;margin:0 2px;border-color:var(--tag-border-color);background-color:var(--tag-background);color:var(--tag-color);}.chip.svelte-14nm4oc:empty {display:none;}.chip.svelte-14nm4oc:not(:empty)::before {min-width:1.8em;display:inline-block;}.chip.content.svelte-14nm4oc:not(:empty)::before {content:"📄: ";}.chip.version.svelte-14nm4oc:not(:empty)::before {content:"🏷️: ";}.chip.modified.svelte-14nm4oc:not(:empty)::before {content:"📅: ";}'};root_14=from_html('');root_23=from_html(" ");root_32=from_html('
No Items.
');root_82=from_html('
');root_63=from_html('
');root_52=from_html('

');root_133=from_html('
');root_15=from_html('
');root_18=from_html('
');root_16=from_html('
Other files
');root_112=from_html('
MAIN
DATA
',1);root_19=from_html('
');root_92=from_html('
',1);root_43=from_html('

Plugins

',1);root_21=from_html("");root_20=from_html('

Maintenance Commands

');root3=from_html('
',1);$$css4={hash:"svelte-10jah2g",code:".buttonsWrap.svelte-10jah2g {padding-bottom:4px;}h3.svelte-10jah2g {position:sticky;top:0;background-color:var(--modal-background);}.labelrow.svelte-10jah2g {margin-left:0.4em;display:flex;justify-content:flex-start;align-items:center;border-top:1px solid var(--background-modifier-border);padding:4px;flex-wrap:wrap;}.filerow.svelte-10jah2g {margin-left:1.25em;display:flex;justify-content:flex-start;align-items:center;padding-right:4px;flex-wrap:wrap;}.filerow.hideeven.svelte-10jah2g:has(.even),\n .labelrow.hideeven.svelte-10jah2g:has(.even) {display:none;}.noterow.svelte-10jah2g {min-height:2em;display:flex;}button.status.svelte-10jah2g {flex-grow:0;margin:2px 4px;min-width:3em;max-width:4em;}.statusnote.svelte-10jah2g {display:flex;justify-content:flex-end;padding-right:var(--size-4-12);align-items:center;min-width:10em;flex-grow:1;}.list.svelte-10jah2g {overflow-y:auto;}.title.svelte-10jah2g {color:var(--text-normal);font-size:var(--font-ui-medium);line-height:var(--line-height-tight);margin-right:auto;}.body.svelte-10jah2g {\n /* margin-left: 0.4em; */margin-left:auto;display:flex;justify-content:flex-start;align-items:center;\n /* flex-wrap: wrap; */}.filetitle.svelte-10jah2g {color:var(--text-normal);font-size:var(--font-ui-medium);line-height:var(--line-height-tight);margin-right:auto;}.buttons.svelte-10jah2g {display:flex;flex-direction:row;justify-content:flex-end;margin-top:8px;flex-wrap:wrap;}.buttons.svelte-10jah2g > button:where(.svelte-10jah2g) {margin-left:4px;width:auto;}label.svelte-10jah2g {display:flex;justify-content:center;align-items:center;}label.svelte-10jah2g > span:where(.svelte-10jah2g) {margin-right:0.25em;}.is-mobile .title.svelte-10jah2g,\n .is-mobile .filetitle.svelte-10jah2g {width:100%;}.center.svelte-10jah2g {display:flex;justify-content:center;align-items:center;min-height:3em;}.maintenancerow.svelte-10jah2g {display:flex;justify-content:flex-end;align-items:center;}.maintenancerow.svelte-10jah2g label:where(.svelte-10jah2g) {margin-right:0.5em;margin-left:0.5em;}.loading.svelte-10jah2g {transition:height 0.25s ease-in-out;transition-delay:4ms;overflow-y:hidden;flex-shrink:0;display:flex;justify-content:flex-start;align-items:center;}.loading.svelte-10jah2g:empty {height:0px;transition:height 0.25s ease-in-out;transition-delay:1s;}.loading.svelte-10jah2g:not(:empty) {height:2em;transition:height 0.25s ease-in-out;transition-delay:0;}"};PluginDialogModal=class extends import_obsidian.Modal{isOpened(){return null!=this.component}constructor(app,plugin3){super(app);this.plugin=plugin3}onOpen(){const{contentEl}=this;this.contentEl.style.overflow="auto";this.contentEl.style.display="flex";this.contentEl.style.flexDirection="column";this.titleEl.setText("个性化同步(Beta3)");this.component||(this.component=mount(PluginPane,{target:contentEl,props:{plugin:this.plugin,core:this.plugin.core}}))}onClose(){if(this.component){unmount(this.component);this.component=void 0}}};d="​";d2="\n";DUMMY_HEAD=serialize({category:"CONFIG",name:"migrated",files:[],mtime:0,term:"-",displayName:"MIRAGED"});DUMMY_END=d+d2+"‌";pluginList=writable([]);pluginIsEnumerating=writable(!1);pluginV2Progress=writable(0);pluginManifestStore=writable(pluginManifests=new Map);PluginDataExDisplayV2=class{constructor(data){this.files=[];this.documentPath=`${data.documentPath}`;this.category=`${data.category}`;this.name=`${data.name}`;this.term=`${data.term}`;this.files=[...data.files];this.confKey=`${categoryToFolder(this.category,this.term)}${this.name}`;this.applyLoadedManifest()}async setFile(file){const old=this.files.find(e3=>e3.filename==file.filename);if(old){if(old.mtime==file.mtime&&await isDocContentSame(old.data,file.data))return;this.files=this.files.filter(e3=>e3.filename!=file.filename)}this.files.push(file);"manifest.json"==file.filename&&this.applyLoadedManifest()}deleteFile(filename){this.files=this.files.filter(e3=>e3.filename!=filename)}applyLoadedManifest(){const manifest=pluginManifests.get(this.confKey);if(manifest){this._displayName=manifest.name;"PLUGIN_MAIN"!=this.category&&"THEME"!=this.category||(this._version=null==manifest?void 0:manifest.version)}}get displayName(){return this._displayName||this.name}get version(){return this._version}get mtime(){return~~this.files.reduce((a2,b3)=>a2+b3.mtime,0)/this.files.length}};ConfigSync=class extends LiveSyncCommands{constructor(plugin3,core){super(plugin3,core);this.pluginDialog=void 0;this.periodicPluginSweepProcessor=new PeriodicProcessor(this.core,async()=>await this.scanAllConfigFiles(!1));this.pluginList=[];this.addRibbonIcon=this.services.API.addRibbonIcon.bind(this.services.API);this.pluginScanProcessor=new QueueProcessor(async v2=>{const plugin3=v2[0];if(this.useV2){await this.migrateV1ToV2(!1,plugin3);return[]}const path2=plugin3.path||this.getPath(plugin3),oldEntry=this.pluginList.find(e3=>e3.documentPath==path2);if(oldEntry&&oldEntry.mtime==plugin3.mtime)return[];try{const pluginData=await this.loadPluginData(path2);if(pluginData){let newList=[...this.pluginList];newList=newList.filter(x2=>x2.documentPath!=pluginData.documentPath);newList.push(pluginData);this.pluginList=newList;pluginList.set(newList)}return[]}catch(ex){this._log(`Something happened at enumerating customization :${path2}`,LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE)}return[]},{suspended:!1,batchSize:1,concurrentLimit:10,delay:100,yieldThreshold:10,maintainDelay:!1,totalRemainingReactiveSource:pluginScanningCount}).startPipeline();this.pluginScanProcessorV2=new QueueProcessor(async v2=>{const plugin3=v2[0],path2=plugin3.path||this.getPath(plugin3),oldEntry=this.pluginList.find(e3=>e3.documentPath==path2);if(oldEntry&&oldEntry.mtime==plugin3.mtime)return[];try{const pluginData=await this.loadPluginData(path2);if(pluginData){let newList=[...this.pluginList];newList=newList.filter(x2=>x2.documentPath!=pluginData.documentPath);newList.push(pluginData);this.pluginList=newList;pluginList.set(newList)}return[]}catch(ex){this._log(`Something happened at enumerating customization :${path2}`,LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE)}return[]},{suspended:!1,batchSize:1,concurrentLimit:10,delay:100,yieldThreshold:10,maintainDelay:!1,totalRemainingReactiveSource:pluginScanningCount}).startPipeline();this.loadedManifest_mTime=new Map;this.updatingV2Count=0;this.recentProcessedInternalFiles=[];pluginScanningCount.onChanged(e3=>{const total=e3.value;pluginIsEnumerating.set(0!=total)})}get configDir(){return this.core.services.API.getSystemConfigDir()}get kvDB(){return this.core.kvDB}get useV2(){return this.core.settings.usePluginSyncV2}get useSyncPluginEtc(){return this.core.settings.usePluginEtc}isThisModuleEnabled(){return this.core.settings.usePluginSync}showPluginSyncModal(){if(this.isThisModuleEnabled())if(this.pluginDialog)this.pluginDialog.open();else{this.pluginDialog=new PluginDialogModal(this.app,this.plugin);this.pluginDialog.open()}}hidePluginSyncModal(){if(null!=this.pluginDialog){this.pluginDialog.close();this.pluginDialog=void 0}}onunload(){var _a8;this.hidePluginSyncModal();null==(_a8=this.periodicPluginSweepProcessor)||_a8.disable()}onload(){(0,import_obsidian.addIcon)("custom-sync",'\n \n ');this.services.API.addCommand({id:"livesync-plugin-dialog-ex",name:"Show customization sync dialog",callback:()=>{this.showPluginSyncModal()}});this.addRibbonIcon("custom-sync",$msg("cmdConfigSync.showCustomizationSync"),()=>{this.showPluginSyncModal()}).addClass("livesync-ribbon-showcustom");eventHub.onEvent(EVENT_REQUEST_OPEN_PLUGIN_SYNC_DIALOG2,()=>this.showPluginSyncModal())}getFileCategory(filePath){return 2==filePath.split("/").length&&filePath.endsWith(".json")?"CONFIG":4==filePath.split("/").length&&filePath.startsWith(`${this.configDir}/themes/`)?"THEME":filePath.startsWith(`${this.configDir}/snippets/`)&&filePath.endsWith(".css")?"SNIPPET":filePath.startsWith(`${this.configDir}/plugins/`)?filePath.endsWith("/styles.css")||filePath.endsWith("/manifest.json")||filePath.endsWith("/main.js")?"PLUGIN_MAIN":filePath.endsWith("/data.json")?"PLUGIN_DATA":this.useV2&&this.useSyncPluginEtc?"PLUGIN_ETC":"":""}isTargetPath(filePath){return!!filePath.startsWith(this.configDir)&&""!=this.getFileCategory(filePath)}async _everyOnDatabaseInitialized(showNotice){if(!this.isThisModuleEnabled())return!0;try{this._log("Scanning customizations...");await this.scanAllConfigFiles(showNotice);this._log("Scanning customizations : done")}catch(ex){this._log("Scanning customizations : failed");this._log(ex,LOG_LEVEL_VERBOSE)}return!0}async _everyBeforeReplicate(showNotice){if(!this.isThisModuleEnabled())return!0;if(this.settings.autoSweepPlugins){await this.scanAllConfigFiles(showNotice);return!0}return!0}async _everyOnResumeProcess(){if(!this.isThisModuleEnabled())return!0;if(this._isMainSuspended())return!0;this.settings.autoSweepPlugins&&await this.scanAllConfigFiles(!1);this.periodicPluginSweepProcessor.enable(this.settings.autoSweepPluginsPeriodic&&!this.settings.watchInternalFileChanges?6e4:0);return!0}_everyAfterResumeProcess(){const q2=activeDocument.querySelector(".livesync-ribbon-showcustom");null==q2||q2.toggleClass("sls-hidden",!this.isThisModuleEnabled());return Promise.resolve(!0)}async reloadPluginList(showMessage){this.pluginList=[];this.loadedManifest_mTime.clear();pluginList.set(this.pluginList);await this.updatePluginList(showMessage)}async loadPluginData(path2){const wx=await this.localDatabase.getDBEntry(path2,void 0,!1,!1);if(wx){const data=deserialize(getDocDataAsArray(wx.data),{}),xFiles=[];let missingHash=!1;for(const file of data.files){const work={...file,data:[]};if(!file.hash){const hash3=digestHash(getDocDataAsArray(work.data));file.hash=hash3;missingHash=!0}work.data=[file.hash];xFiles.push(work)}if(missingHash){this._log(`Digest created for ${path2} to improve checking`,LOG_LEVEL_VERBOSE);wx.data=serialize(data);fireAndForget(()=>this.localDatabase.putDBEntry(createSavingEntryFromLoadedEntry(wx)))}return{...data,documentPath:this.getPath(wx),files:xFiles}}return!1}filenameToUnifiedKey(path2,termOverRide){const term=termOverRide||this.services.setting.getDeviceAndVaultName(),category=this.getFileCategory(path2),name="CONFIG"==category||"SNIPPET"==category?path2.split("/").slice(-1)[0]:"PLUGIN_ETC"==category?path2.split("/").slice(-2).join("/"):path2.split("/").slice(-2)[0];return`${ICXHeader}${term}/${category}/${name}.md`}filenameWithUnifiedKey(path2,termOverRide){const term=termOverRide||this.services.setting.getDeviceAndVaultName(),category=this.getFileCategory(path2),name="CONFIG"==category||"SNIPPET"==category?path2.split("/").slice(-1)[0]:path2.split("/").slice(-2)[0],baseName="CONFIG"==category||"SNIPPET"==category?name:path2.split("/").slice(3).join("/");return`${ICXHeader}${term}/${category}/${name}%${baseName}`}unifiedKeyPrefixOfTerminal(termOverRide){const term=termOverRide||this.services.setting.getDeviceAndVaultName();return`${ICXHeader}${term}/`}parseUnifiedPath(unifiedPath){const[device,category,...rest]=stripAllPrefixes(unifiedPath).split("/"),relativePath=rest.join("/"),[key3,filename]=relativePath.split("%");return{device,category,key:key3,filename,pathV1:unifiedPath.split("%")[0]+".md"}}async createPluginDataExFileV2(unifiedPathV2,loaded){const{category,key:key3,filename,device}=this.parseUnifiedPath(unifiedPathV2);if(!loaded){const d4=await this.localDatabase.getDBEntry(unifiedPathV2);if(!d4){this._log(`The file ${unifiedPathV2} is not found`,LOG_LEVEL_VERBOSE);return!1}if(!isLoadedEntry(d4)){this._log(`The file ${unifiedPathV2} is not a note`,LOG_LEVEL_VERBOSE);return!1}loaded=d4}const confKey=`${categoryToFolder(category,device)}${key3}`,relativeFilename=`${categoryToFolder(category,"")}${"CONFIG"==category||"SNIPPET"==category?"":key3+"/"}${filename}`.substring(1),dataSrc=getDocData(loaded.data),dataStart=dataSrc.indexOf(DUMMY_END),data=dataSrc.substring(dataStart+DUMMY_END.length),file={...loaded,hash:"",data:[base64ToString(data)],filename:relativeFilename,displayName:filename};if("manifest.json"==filename)if(this.loadedManifest_mTime.get(confKey)!=file.mtime&&null==pluginManifests.get(confKey)){try{const parsedManifest=JSON.parse(base64ToString(data));setManifest(confKey,parsedManifest);this.pluginList.filter(e3=>e3 instanceof PluginDataExDisplayV2&&e3.confKey==confKey).forEach(e3=>e3.applyLoadedManifest());pluginList.set(this.pluginList)}catch(ex){this._log(`The file ${loaded.path} seems to manifest, but could not be decoded as JSON`,LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE)}this.loadedManifest_mTime.set(confKey,file.mtime)}else{this.pluginList.filter(e3=>e3 instanceof PluginDataExDisplayV2&&e3.confKey==confKey).forEach(e3=>e3.applyLoadedManifest());pluginList.set(this.pluginList)}return file}createPluginDataFromV2(unifiedPathV2){const{category,device,key:key3,pathV1}=this.parseUnifiedPath(unifiedPathV2);if(""!=category)return new PluginDataExDisplayV2({documentPath:pathV1,category,name:key3,term:`${device}`,files:[],mtime:0})}async updatePluginListV2(showMessage,unifiedFilenameWithKey){try{this.updatingV2Count++;pluginV2Progress.set(this.updatingV2Count);const{pathV1}=this.parseUnifiedPath(unifiedFilenameWithKey),oldEntry=this.pluginList.find(e3=>e3.documentPath==pathV1);let entry;if(oldEntry&&oldEntry instanceof PluginDataExDisplayV2)oldEntry instanceof PluginDataExDisplayV2&&(entry=oldEntry);else{const newEntry=this.createPluginDataFromV2(unifiedFilenameWithKey);newEntry&&(entry=newEntry)}if(!entry)return;const file=await this.createPluginDataExFileV2(unifiedFilenameWithKey);if(file)await entry.setFile(file);else{entry.deleteFile(unifiedFilenameWithKey);0==entry.files.length&&(this.pluginList=this.pluginList.filter(e3=>e3.documentPath!=pathV1))}const newList=this.pluginList.filter(e3=>e3.documentPath!=entry.documentPath);newList.push(entry);this.pluginList=newList;scheduleTask("updatePluginListV2",100,()=>{pluginList.set(this.pluginList)})}finally{this.updatingV2Count--;pluginV2Progress.set(this.updatingV2Count)}}async migrateV1ToV2(showMessage,entry){var _a8;const v1Path=entry.path;this._log(`Migrating ${entry.path} to V2`,showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);if(entry.deleted){this._log(`The entry ${v1Path} is already deleted`,LOG_LEVEL_VERBOSE);return}if(!v1Path.endsWith(".md")&&!v1Path.startsWith(ICXHeader)){this._log(`The entry ${v1Path} is not a customisation sync binder`,LOG_LEVEL_VERBOSE);return}if(-1!==v1Path.indexOf("%")){this._log(`The entry ${v1Path} is already migrated`,LOG_LEVEL_VERBOSE);return}const loadedEntry=await this.localDatabase.getDBEntry(v1Path);if(!loadedEntry){this._log(`The entry ${v1Path} is not found`,LOG_LEVEL_VERBOSE);return}const pluginData=deserialize(getDocDataAsArray(loadedEntry.data),{}),prefixPath=v1Path.slice(0,-3)+"%",category=pluginData.category;for(const f4 of pluginData.files){const stripTable={CONFIG:0,THEME:2,SNIPPET:1,PLUGIN_MAIN:2,PLUGIN_DATA:2,PLUGIN_ETC:2},deletePrefixCount=null!=(_a8=null==stripTable?void 0:stripTable[category])?_a8:1,relativeFilename=f4.filename.split("/").slice(deletePrefixCount).join("/"),v2Path=prefixPath+relativeFilename;this._log(`Migrating ${v1Path} / ${relativeFilename} to ${v2Path}`,LOG_LEVEL_VERBOSE);const newId=await this.services.path.path2id(v2Path),data=createBlob([DUMMY_HEAD,DUMMY_END,...getDocDataAsArray(f4.data)]),saving={...loadedEntry,_rev:void 0,_id:newId,path:v2Path,data,datatype:"plain",type:"plain",children:[],eden:{}},r4=await this.core.localDatabase.putDBEntry(saving);if(r4&&r4.ok){this._log(`Migrated ${v1Path} / ${f4.filename} to ${v2Path}`,LOG_LEVEL_INFO);await this.deleteConfigOnDatabase(v1Path)?this._log(`Deleted ${v1Path} successfully`,LOG_LEVEL_INFO):this._log(`Failed to delete ${v1Path}`,LOG_LEVEL_NOTICE)}}}async updatePluginList(showMessage,updatedDocumentPath){if(this.isThisModuleEnabled()){try{this.updatingV2Count++;pluginV2Progress.set(this.updatingV2Count);const updatedDocumentId=updatedDocumentPath?await this.path2id(updatedDocumentPath):"",plugins=updatedDocumentPath?this.localDatabase.findEntries(updatedDocumentId,updatedDocumentId+"􏿿",{include_docs:!0,key:updatedDocumentId,limit:1}):this.localDatabase.findEntries(ICXHeader+"",`${ICXHeader}􏿿`,{include_docs:!0});for await(const v2 of plugins){if(v2.deleted||v2._deleted)continue;if(-1!==v2.path.indexOf("%")){fireAndForget(()=>this.updatePluginListV2(showMessage,v2.path));continue}const path2=v2.path||this.getPath(v2);updatedDocumentPath&&updatedDocumentPath!=path2||this.pluginScanProcessor.enqueue(v2)}}finally{pluginIsEnumerating.set(!1);this.updatingV2Count--;pluginV2Progress.set(this.updatingV2Count)}pluginIsEnumerating.set(!1)}else{this.pluginScanProcessor.clearQueue();this.pluginList=[];pluginList.set(this.pluginList)}}async compareUsingDisplayData(dataA,dataB,compareEach=!1){const loadFile=async data=>{if(data instanceof PluginDataExDisplayV2||compareEach)return data.files[0];const loadDoc=await this.localDatabase.getDBEntry(data.documentPath);if(!loadDoc)return!1;const pluginData=deserialize(getDocDataAsArray(loadDoc.data),{});pluginData.documentPath=data.documentPath;const file=pluginData.files[0];return{...loadDoc,...file,datatype:"newnote"}},fileA=await loadFile(dataA),fileB=await loadFile(dataB);this._log(`Comparing: ${dataA.documentPath} <-> ${dataB.documentPath}`,LOG_LEVEL_VERBOSE);if(!fileA||!fileB){this._log(`Could not load ${dataA.name} for comparison: ${fileA?"":dataA.term}${fileB?"":dataB.term}`,LOG_LEVEL_NOTICE);return!1}let path2=stripAllPrefixes(fileA.path.split("/").slice(-1).join("/"));-1!==path2.indexOf("%")&&(path2=path2.split("%")[1]);if(fileA.path.endsWith(".json"))return serialized("config:merge-data",()=>new Promise(res2=>{this._log("Opening data-merging dialog",LOG_LEVEL_VERBOSE);new JsonResolveModal(this.app,path2,[fileA,fileB],async(keep,result)=>{if(null==result)return res2(!1);try{res2(await this.applyData(dataA,result))}catch(ex){this._log("Could not apply merged file");this._log(ex,LOG_LEVEL_VERBOSE);res2(!1)}},"Local",`${dataB.term}`,"B",!0,!0,"Difference between local and remote").open()}));{const dmp=new import_diff_match_patch.diff_match_patch;let docAData=getDocData(fileA.data),docBData=getDocData(fileB.data);"plain"!=(null==fileA?void 0:fileA.datatype)&&(docAData=base64ToString(docAData));"plain"!=(null==fileB?void 0:fileB.datatype)&&(docBData=base64ToString(docBData));const diffMap=dmp.diff_linesToChars_(docAData,docBData),diff=dmp.diff_main(diffMap.chars1,diffMap.chars2,!1);dmp.diff_charsToLines_(diff,diffMap.lineArray);dmp.diff_cleanupSemantic(diff);const diffResult={left:{rev:"A",...fileA,data:docAData},right:{rev:"B",...fileB,data:docBData},diff},d4=new ConflictResolveModal(this.app,path2,diffResult,!0,dataB.term);d4.open();const ret=await d4.waitForResult();if(ret===CANCELLED)return!1;if(ret===LEAVE_TO_SUBSEQUENT)return!1;const resultContent="A"==ret?docAData:"B"==ret?docBData:void 0;return!!resultContent&&await this.applyData(dataA,resultContent)}}async applyDataV2(data,content){const baseDir=this.configDir;try{if(content){const filename=data.files[0].filename;this._log(`Applying ${filename} of ${data.displayName||data.name}..`);const path2=`${baseDir}/${filename}`;await this.core.storageAccess.ensureDir(path2);await this.core.storageAccess.writeHiddenFileAuto(path2,content);await this.storeCustomisationFileV2(path2,this.services.setting.getDeviceAndVaultName())}else{const files=data.files;for(const f4 of files){const stat={mtime:f4.mtime,ctime:f4.ctime},path2=`${baseDir}/${f4.filename}`;this._log(`Applying ${f4.filename} of ${data.displayName||data.name}..`);await this.core.storageAccess.ensureDir(path2);if("newnote"==f4.datatype){let oldData;try{oldData=await this.core.storageAccess.readHiddenFileBinary(path2)}catch(ex){this._log(`Could not read the file ${f4.filename}`,LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE);oldData=new ArrayBuffer(0)}const content2=base64ToArrayBuffer(f4.data);if(await isDocContentSame(oldData,content2)){this._log(`The file ${f4.filename} is already up-to-date`,LOG_LEVEL_VERBOSE);continue}await this.core.storageAccess.writeHiddenFileAuto(path2,content2,stat)}else{let oldData;try{oldData=await this.core.storageAccess.readHiddenFileText(path2)}catch(ex){this._log(`Could not read the file ${f4.filename}`,LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE);oldData=""}const content2=getDocData(f4.data);if(await isDocContentSame(oldData,content2)){this._log(`The file ${f4.filename} is already up-to-date`,LOG_LEVEL_VERBOSE);continue}await this.core.storageAccess.writeHiddenFileAuto(path2,content2,stat)}this._log(`Applied ${f4.filename} of ${data.displayName||data.name}..`);await this.storeCustomisationFileV2(path2,this.services.setting.getDeviceAndVaultName())}}}catch(ex){this._log(`Applying ${data.displayName||data.name}.. Failed`,LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE);return!1}return!0}async applyData(data,content){this._log(`Applying ${data.displayName||data.name}..`);if(data instanceof PluginDataExDisplayV2)return this.applyDataV2(data,content);const baseDir=this.configDir;try{if(!data.documentPath)throw"InternalError: Document path not exist";const dx=await this.localDatabase.getDBEntry(data.documentPath);if(0==dx)throw"Not found on database";const loadedData=deserialize(getDocDataAsArray(dx.data),{});for(const f4 of loadedData.files){this._log(`Applying ${f4.filename} of ${data.displayName||data.name}..`);try{const path2=`${baseDir}/${f4.filename}`;await this.core.storageAccess.ensureDir(path2);if(content)await this.core.storageAccess.writeHiddenFileAuto(path2,content);else{const dt=decodeBinary(f4.data);await this.core.storageAccess.writeHiddenFileAuto(path2,dt)}this._log(`Applying ${f4.filename} of ${data.displayName||data.name}.. Done`)}catch(ex){this._log(`Applying ${f4.filename} of ${data.displayName||data.name}.. Failed`);this._log(ex,LOG_LEVEL_VERBOSE)}}const uPath=`${baseDir}/${loadedData.files[0].filename}`;await this.storeCustomizationFiles(uPath);await this.updatePluginList(!0,uPath);await delay(100);this._log(`Config ${data.displayName||data.name} has been applied`,LOG_LEVEL_NOTICE);if("PLUGIN_DATA"==data.category||"PLUGIN_MAIN"==data.category){const manifests=Object.values(this.app.plugins.manifests),enabledPlugins=this.app.plugins.enabledPlugins,pluginManifest=manifests.find(manifest=>enabledPlugins.has(manifest.id)&&manifest.dir==`${baseDir}/plugins/${data.name}`);if(pluginManifest){this._log(`Unloading plugin: ${pluginManifest.name}`,LOG_LEVEL_NOTICE,"plugin-reload-"+pluginManifest.id);await this.app.plugins.unloadPlugin(pluginManifest.id);await this.app.plugins.loadPlugin(pluginManifest.id);this._log(`Plugin reloaded: ${pluginManifest.name}`,LOG_LEVEL_NOTICE,"plugin-reload-"+pluginManifest.id)}}else"CONFIG"==data.category&&this.services.appLifecycle.askRestart();return!0}catch(ex){this._log(`Applying ${data.displayName||data.name}.. Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}}async deleteData(data){try{if(data.documentPath){const delList=[];if(this.useV2){const deleteList=this.pluginList.filter(e3=>e3.documentPath==data.documentPath).filter(e3=>e3 instanceof PluginDataExDisplayV2).map(e3=>e3.files).flat();for(const e3 of deleteList)delList.push(e3.path)}delList.push(data.documentPath);const p2=delList.map(async e3=>{await this.deleteConfigOnDatabase(e3);await this.updatePluginList(!1,e3)});await Promise.allSettled(p2);this._log(`Deleted: ${data.category}/${data.name} of ${data.category} (${delList.length} items)`,LOG_LEVEL_NOTICE)}return!0}catch(ex){this._log(`Failed to delete: ${data.documentPath}`,LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE);return!1}}async _anyModuleParsedReplicationResultItem(docs){if(!docs._id.startsWith(ICXHeader))return!1;this.isThisModuleEnabled()&&await this.updatePluginList(!1,docs.path?docs.path:this.getPath(docs));if(this.isThisModuleEnabled()&&this.core.settings.notifyPluginOrSettingUpdated&&(!this.pluginDialog||this.pluginDialog&&!this.pluginDialog.isOpened())){const fragment=createFragment(doc=>{doc.createEl("span",void 0,a2=>{a2.appendText("某些配置已就绪,请点击");a2.appendChild(a2.createEl("a",void 0,anchor=>{anchor.text="HERE";anchor.addEventListener("click",()=>{this.showPluginSyncModal()})}));a2.appendText("打开配置同步对话框,或者按其他地方以关闭此消息。")})}),updatedPluginKey="popupUpdated-plugins";scheduleTask(updatedPluginKey,1e3,async()=>{var _a8;const popup=await memoIfNotExist(updatedPluginKey,()=>new import_obsidian.Notice(fragment,0));(null==(_a8=null==popup?void 0:popup.noticeEl)?void 0:_a8.isShown())||memoObject(updatedPluginKey,new import_obsidian.Notice(fragment,0));scheduleTask(updatedPluginKey+"-close",2e4,()=>{var _a9;const popup2=retrieveMemoObject(updatedPluginKey);if(popup2){(null==(_a9=null==popup2?void 0:popup2.noticeEl)?void 0:_a9.isShown())&&popup2.hide();disposeMemoObject(updatedPluginKey)}})})}return!0}async _everyRealizeSettingSyncMode(){var _a8;null==(_a8=this.periodicPluginSweepProcessor)||_a8.disable();if(!this._isMainReady)return!0;if(!this._isMainSuspended())return!0;if(!this.isThisModuleEnabled())return!0;this.settings.autoSweepPlugins&&await this.scanAllConfigFiles(!1);this.periodicPluginSweepProcessor.enable(this.settings.autoSweepPluginsPeriodic&&!this.settings.watchInternalFileChanges?6e4:0);return!0}async makeEntryFromFile(path2){const stat=await this.core.storageAccess.statHidden(path2);let version2,displayName;if(!stat)return!1;const contentBin=await this.core.storageAccess.readHiddenFileBinary(path2);let content;try{content=await arrayBufferToBase64(contentBin);if(path2.toLowerCase().endsWith("/manifest.json")){const v2=readString(new Uint8Array(contentBin));try{const json=JSON.parse(v2);"version"in json&&(version2=`${json.version}`);"name"in json&&(displayName=`${json.name}`)}catch(ex){this._log(`Configuration sync data: ${path2} looks like manifest, but could not read the version`,LOG_LEVEL_INFO);this._log(ex,LOG_LEVEL_VERBOSE)}}}catch(ex){this._log(`The file ${path2} could not be encoded`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}const mtime=stat.mtime;return{filename:path2.substring(this.configDir.length+1),data:content,mtime,size:stat.size,version:version2,displayName}}async storeCustomisationFileV2(path2,term,force=!1){const vf=this.filenameWithUnifiedKey(path2,term);return await serialized(`plugin-${vf}`,async()=>{const prefixedFileName=vf,id=await this.path2id(prefixedFileName),stat=await this.core.storageAccess.statHidden(path2);if(!stat)return!1;const mtime=stat.mtime,content=await this.core.storageAccess.readHiddenFileBinary(path2),contentBlob=createBlob([DUMMY_HEAD,DUMMY_END,...await arrayBufferToBase64(content)]);try{const old=await this.localDatabase.getDBEntryMeta(prefixedFileName,void 0,!1);let saveData;if(!1===old)saveData={_id:id,path:prefixedFileName,data:contentBlob,mtime,ctime:mtime,datatype:"plain",size:contentBlob.size,children:[],deleted:!1,type:"plain",eden:{}};else{if(this.services.path.isMarkedAsSameChanges(prefixedFileName,[old.mtime,mtime+1])==EVEN){this._log(`STORAGE --\x3e DB:${prefixedFileName}: (config) Skipped (Already checked the same)`,LOG_LEVEL_DEBUG);return}const docXDoc=await this.localDatabase.getDBEntryFromMeta(old,!1,!1);if(0==docXDoc)throw"Could not load the document";const dataSrc=getDocData(docXDoc.data),dataStart=dataSrc.indexOf(DUMMY_END),oldContent=dataSrc.substring(dataStart+DUMMY_END.length),oldContentArray=base64ToArrayBuffer(oldContent);if(await isDocContentSame(oldContentArray,content)){this._log(`STORAGE --\x3e DB:${prefixedFileName}: (config) Skipped (the same content)`,LOG_LEVEL_VERBOSE);this.services.path.markChangesAreSame(prefixedFileName,old.mtime,mtime+1);return!0}saveData={...old,data:contentBlob,mtime,size:contentBlob.size,datatype:"plain",children:[],deleted:!1,type:"plain"}}const ret=await this.localDatabase.putDBEntry(saveData);this._log(`STORAGE --\x3e DB:${prefixedFileName}: (config) Done`);fireAndForget(()=>this.updatePluginListV2(!1,this.filenameWithUnifiedKey(path2)));return ret}catch(ex){this._log(`STORAGE --\x3e DB:${prefixedFileName}: (config) Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}})}async storeCustomizationFiles(path2,termOverRide){const term=termOverRide||this.services.setting.getDeviceAndVaultName();if(""==term){this._log("We have to configure the device name",LOG_LEVEL_NOTICE);return}if(this.useV2)return await this.storeCustomisationFileV2(path2,term);const vf=this.filenameToUnifiedKey(path2,term);return await serialized(`plugin-${vf}`,async()=>{const category=this.getFileCategory(path2);let mtime=0,fileTargets=[];const name="CONFIG"==category||"SNIPPET"==category?path2.split("/").reverse()[0]:path2.split("/").reverse()[1],parentPath=path2.split("/").slice(0,-1).join("/"),prefixedFileName=this.filenameToUnifiedKey(path2,term),id=await this.path2id(prefixedFileName),dt={category,files:[],name,mtime:0,term};if("CONFIG"==category||"SNIPPET"==category||"PLUGIN_ETC"==category||"PLUGIN_DATA"==category){fileTargets=[path2];"PLUGIN_ETC"==category&&(dt.displayName=path2.split("/").slice(-1).join("/"))}else"PLUGIN_MAIN"==category?fileTargets=["manifest.json","main.js","styles.css"].map(e3=>`${parentPath}/${e3}`):"THEME"==category&&(fileTargets=["manifest.json","theme.css"].map(e3=>`${parentPath}/${e3}`));for(const target of fileTargets){const data=await this.makeEntryFromFile(target);if(0!=data){data.version&&(dt.version=data.version);data.displayName&&(dt.displayName=data.displayName);mtime=0==mtime?data.mtime:(data.mtime+mtime)/2;dt.files.push(data)}else this._log(`Config: skipped (Possibly is not exist): ${target} `,LOG_LEVEL_VERBOSE)}dt.mtime=mtime;if(0==dt.files.length){this._log(`Nothing left: deleting.. ${path2}`);await this.deleteConfigOnDatabase(prefixedFileName);await this.updatePluginList(!1,prefixedFileName);return}const content=createTextBlob(serialize(dt));try{const old=await this.localDatabase.getDBEntryMeta(prefixedFileName,void 0,!1);let saveData;if(!1===old)saveData={_id:id,path:prefixedFileName,data:content,mtime,ctime:mtime,datatype:"newnote",size:content.size,children:[],deleted:!1,type:"newnote",eden:{}};else{if(old.mtime==mtime)return!0;const oldC=await this.localDatabase.getDBEntryFromMeta(old,!1,!1);if(oldC){const d4=await deserialize(getDocDataAsArray(oldC.data),{});if(d4.files.length==dt.files.length){const diffs=d4.files.map(previous=>({prev:previous,curr:dt.files.find(e3=>e3.filename==previous.filename)})).map(async e3=>{var _a8,_b5;try{return await isDocContentSame(null!=(_b5=null==(_a8=e3.curr)?void 0:_a8.data)?_b5:[],e3.prev.data)}catch(e4){return!1}});if((await Promise.all(diffs)).every(e3=>1==e3)){this._log(`STORAGE --\x3e DB:${prefixedFileName}: (config) Skipped (Same content)`,LOG_LEVEL_VERBOSE);return!0}}}saveData={...old,data:content,mtime,size:content.size,datatype:"newnote",children:[],deleted:!1,type:"newnote"}}const ret=await this.localDatabase.putDBEntry(saveData);await this.updatePluginList(!1,saveData.path);this._log(`STORAGE --\x3e DB:${prefixedFileName}: (config) Done`);return ret}catch(ex){this._log(`STORAGE --\x3e DB:${prefixedFileName}: (config) Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}})}async _anyProcessOptionalFileEvent(path2){return await this.watchVaultRawEventsAsync(path2)}async watchVaultRawEventsAsync(path2){if(!this._isMainReady)return!1;if(this._isMainSuspended())return!1;if(!this.isThisModuleEnabled())return!1;const stat=await this.core.storageAccess.statHidden(path2);if(stat&&"file"!=stat.type)return!1;const configDir=normalizePath(this.configDir);if(Object.values(this.settings.pluginSyncExtendedSetting).filter(e3=>e3.mode!=MODE_SELECTIVE&&e3.mode!=MODE_SHINY).map(e3=>e3.files).flat().map(e3=>`${configDir}/${e3}`.toLowerCase()).some(e3=>e3.startsWith(path2.toLowerCase()))){this._log(`Customization file skipped: ${path2}`,LOG_LEVEL_VERBOSE);return!1}const storageMTime=~~((stat&&stat.mtime||0)/1e3),key3=`${path2}-${storageMTime}`;if(this.recentProcessedInternalFiles.contains(key3))return!0;this.recentProcessedInternalFiles=[key3,...this.recentProcessedInternalFiles].slice(0,100);scheduleTask(this.filenameToUnifiedKey(path2),100,async()=>{await this.storeCustomizationFiles(path2)});return!0}async scanAllConfigFiles(showMessage){await shareRunningResult("scanAllConfigFiles",async()=>{var _a8;const logLevel=showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;this._log("Scanning customizing files.",logLevel,"scan-all-config");const term=this.services.setting.getDeviceAndVaultName();if(""==term){this._log("We have to configure the device name",LOG_LEVEL_NOTICE);return}const filesAll=await this.scanInternalFiles();if(this.useV2){const filesAllUnified=filesAll.filter(e3=>this.isTargetPath(e3)).map(e3=>[this.filenameWithUnifiedKey(e3,term),e3]),localFileMap=new Map(filesAllUnified.map(e3=>[e3[0],e3[1]])),prefix=this.unifiedKeyPrefixOfTerminal(term),entries2=this.localDatabase.findEntries(prefix+"",`${prefix}􏿿`,{include_docs:!0}),tasks3=[],semaphore=Semaphore(10);for await(const item of entries2)-1===item.path.indexOf("%")&&tasks3.push(async()=>{const releaser=await semaphore.acquire();try{const unifiedFilenameWithKey=`${item._id}`,localPath=localFileMap.get(unifiedFilenameWithKey);if(localPath){await this.storeCustomisationFileV2(localPath,term);localFileMap.delete(unifiedFilenameWithKey)}else await this.deleteConfigOnDatabase(unifiedFilenameWithKey)}catch(ex){this._log(`scanAllConfigFiles - Error: ${item._id}`,LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE)}finally{releaser()}});await Promise.all(tasks3.map(e3=>e3()));const taskExtra=[];for(const[,filePath]of localFileMap)taskExtra.push(async()=>{const releaser=await semaphore.acquire();try{await this.storeCustomisationFileV2(filePath,term)}catch(ex){this._log(`scanAllConfigFiles - Error: ${filePath}`,LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE)}finally{releaser()}});await Promise.all(taskExtra.map(e3=>e3()));fireAndForget(()=>this.updatePluginList(!1))}else{const files=filesAll.filter(e3=>this.isTargetPath(e3)).map(e3=>({key:this.filenameToUnifiedKey(e3),file:e3})),virtualPathsOfLocalFiles=[...new Set(files.map(e3=>e3.key))];let deleteCandidate=(await this.localDatabase.allDocsRaw({startkey:ICXHeader+"",endkey:`${ICXHeader}􏿿`,include_docs:!0})).rows.map(e3=>e3.doc).filter(e3=>!e3.deleted).map(e3=>this.getPath(e3)).filter(e3=>e3.startsWith(`${ICXHeader}${term}/`));for(const vp of virtualPathsOfLocalFiles){const p2=null==(_a8=files.find(e3=>e3.key==vp))?void 0:_a8.file;if(p2){await this.storeCustomizationFiles(p2);deleteCandidate=deleteCandidate.filter(e3=>e3!=vp)}else this._log(`scanAllConfigFiles - File not found: ${vp}`,LOG_LEVEL_VERBOSE)}for(const vp of deleteCandidate)await this.deleteConfigOnDatabase(vp);fireAndForget(()=>this.updatePluginList(!1))}})}async deleteConfigOnDatabase(prefixedFileName,forceWrite=!1){const mtime=(new Date).getTime();return await serialized("file-x-"+prefixedFileName,async()=>{try{const old=await this.localDatabase.getDBEntryMeta(prefixedFileName,void 0,!1);let saveData;if(!1===old){this._log(`STORAGE -x> DB:${prefixedFileName}: (config) already deleted (Not found on database)`);return!0}if(old.deleted){this._log(`STORAGE -x> DB:${prefixedFileName}: (config) already deleted`);return!0}saveData={...old,mtime,size:0,children:[],deleted:!0,type:"newnote"};await this.localDatabase.putRaw(saveData);await this.updatePluginList(!1,prefixedFileName);this._log(`STORAGE -x> DB:${prefixedFileName}: (config) Done`);return!0}catch(ex){this._log(`STORAGE -x> DB:${prefixedFileName}: (config) Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}})}async scanInternalFiles(){return(await this.getFiles(this.configDir,2)).filter(e3=>e3.startsWith(".")).filter(e3=>!e3.startsWith(".trash"))}async _allAskUsingOptionalSyncFeature(opt){await this.__askHiddenFileConfiguration(opt);return!0}async __askHiddenFileConfiguration(opt){const choices=[];choices.push("Yes, Enable it");choices.push("No, Disable it");choices.push("Later");const ret=await this.core.confirm.askSelectStringDialogue("Would you like to enable **Customization sync**?\n\n> [!DETAILS]-\n> This feature allows you to sync your customisations -- such as configurations, themes, snippets, and plugins -- across your devices in a fully controlled manner, unlike the fully automatic behaviour of hidden file synchronisation.\n> \n> You may use this feature alongside hidden file synchronisation. When both features are enabled, items configured as `Automatic` in this feature will be managed by **hidden file synchronisation**.\n> Do not worry, you will be prompted to enable or keep disabled **hidden file synchronisation** after this dialogue.\n",choices,{defaultAction:"Later",timeout:40,title:"Customisation sync"});"Yes, Enable it"==ret?await this.configureHiddenFileSync("CUSTOMIZE"):"No, Disable it"==ret&&await this.configureHiddenFileSync("DISABLE_CUSTOM")}_anyGetOptionalConflictCheckMethod(path2){return isPluginMetadata(path2)||isCustomisationSyncMetadata(path2)?Promise.resolve("newer"):Promise.resolve(!1)}_allSuspendExtraSync(){if(this.core.settings.usePluginSync||this.core.settings.autoSweepPlugins){this._log("Customisation sync have been temporarily disabled. Please enable them after the fetching, if you need them.",LOG_LEVEL_NOTICE);this.core.settings.usePluginSync=!1;this.core.settings.autoSweepPlugins=!1}return Promise.resolve(!0)}async _allConfigureOptionalSyncFeature(mode){await this.configureHiddenFileSync(mode);return!0}async configureHiddenFileSync(mode){if("DISABLE"!=mode){if("CUSTOMIZE"==mode){if(!this.services.setting.getDeviceAndVaultName()){let name=await this.core.confirm.askString("Device name","Please set this device name","desktop");if(!name){name=import_obsidian.Platform.isAndroidApp?"android-app":import_obsidian.Platform.isIosApp?"ios":import_obsidian.Platform.isMacOS?"macos":import_obsidian.Platform.isMobileApp?"mobile-app":import_obsidian.Platform.isMobile?"mobile":import_obsidian.Platform.isSafari?"safari":import_obsidian.Platform.isDesktop?"desktop":import_obsidian.Platform.isDesktopApp?"desktop-app":"unknown";name+=Math.random().toString(36).slice(-4)}this.services.setting.setDeviceAndVaultName(name)}await this.core.services.setting.applyPartial({usePluginSync:!0,useAdvancedMode:!0},!0);await this.scanAllConfigFiles(!0)}}else await this.core.services.setting.applyPartial({usePluginSync:!1},!0)}async getFiles(path2,lastDepth){if(-1==lastDepth)return[];let w2;try{w2=await this.app.vault.adapter.list(path2)}catch(ex){this._log(`Could not traverse(ConfigSync):${path2}`,LOG_LEVEL_INFO);this._log(ex,LOG_LEVEL_VERBOSE);return[]}let files=[...w2.files];for(const v2 of w2.folders)files=files.concat(await this.getFiles(v2,lastDepth-1));return files}onBindFunction(core,services){services.fileProcessing.processOptionalFileEvent.addHandler(this._anyProcessOptionalFileEvent.bind(this));services.conflict.getOptionalConflictCheckMethod.addHandler(this._anyGetOptionalConflictCheckMethod.bind(this));services.replication.processVirtualDocument.addHandler(this._anyModuleParsedReplicationResultItem.bind(this));services.setting.onRealiseSetting.addHandler(this._everyRealizeSettingSyncMode.bind(this));services.appLifecycle.onResuming.addHandler(this._everyOnResumeProcess.bind(this));services.appLifecycle.onResumed.addHandler(this._everyAfterResumeProcess.bind(this));services.replication.onBeforeReplicate.addHandler(this._everyBeforeReplicate.bind(this));services.databaseEvents.onDatabaseInitialised.addHandler(this._everyOnDatabaseInitialized.bind(this));services.setting.suspendExtraSync.addHandler(this._allSuspendExtraSync.bind(this));services.setting.suggestOptionalFeatures.addHandler(this._allAskUsingOptionalSyncFeature.bind(this));services.setting.enableOptionalFeature.addHandler(this._allConfigureOptionalSyncFeature.bind(this))}};PREFIX_TRENCH="trench";idx=0;series=`${Date.now()}`;indexes=new Map;inProgress=new Set;failed=new Map;Trench=class{constructor(db,flushExistItems=!0){Object.defineProperty(this,"_db",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_flushTask",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"concealing",{enumerable:!0,configurable:!0,writable:!0,value:new Map});this._db=db;flushExistItems&&(this._flushTask=(async()=>{const keys3=await db.keys(`${PREFIX_TRENCH}-ephemeral`,`${PREFIX_TRENCH}-ephemeral.`);for(const key3 of keys3)await db.delete(key3)})())}async eraseAllEphemerals(){const keys3=await this._db.keys(`${PREFIX_TRENCH}-ephemeral`,`${PREFIX_TRENCH}-ephemeral.`);for(const key3 of keys3)await this._db.delete(key3)}async eraseAllPermanences(){const keys3=await this._db.keys(`${PREFIX_TRENCH}-permanent`,`${PREFIX_TRENCH}-permanent.`);for(const key3 of keys3)await this._db.delete(key3)}conceal(obj){const key3=generateId("ephemeral");this.concealing.set(key3,obj);this._db.set(key3,obj).then(async e3=>{this.concealing.has(key3)?this.concealing.delete(key3):await this._db.delete(key3)});return key3}async bury(key3){this.concealing.has(key3)&&this.concealing.delete(key3);await this._db.delete(key3)}async expose(key3){if(this.concealing.has(key3)){const value=this.concealing.get(key3);this.concealing.delete(key3);return value}const obj=await this._db.get(key3);await this._db.delete(key3);return obj}_evacuate(storeTask,key3){return async()=>{if(this._flushTask){await this._flushTask;this._flushTask=void 0}await storeTask;const item=await this._db.get(key3);await this._db.delete(key3);return item}}evacuatePromise(task){const key3=generateId("ephemeral"),storeTask=(async()=>{const data=await task;await this._db.set(key3,data)})();return this._evacuate(storeTask,key3)}evacuate(obj){if(obj instanceof Promise)return this.evacuatePromise(obj);const key3=generateId("ephemeral"),storeTask=this._db.set(key3,obj);return this._evacuate(storeTask,key3)}async _queue(type,key3,obj,index6){var _a8;if(void 0===index6){index6=null!=(_a8=indexes.get(key3))?_a8:0;indexes.set(key3,index6+1)}const storeKey=createId(type,key3,index6);await this._db.set(storeKey,obj)}async _dequeue(type,key3){const range4=createRange(type,key3),keys3=(await this._db.keys(range4[0],range4[1])).filter(e3=>!inProgress.has(e3));if(0!==keys3.length)return await this.expose(keys3[0])}async _dequeueWithCommit(type,key3){const range4=createRange(type,key3),keysAll=await this._db.keys(range4[0],range4[1]),keys3=keysAll.filter(e3=>!inProgress.has(e3));if(0===keys3.length)return;const storeKey=keys3[0];inProgress.add(storeKey);const previousFailed=failed.get(storeKey)||0,value=await this._db.get(storeKey);return{key:storeKey,value,cancelCount:previousFailed,pendingItems:keysAll.length-1,commit:async()=>{await this._db.delete(storeKey);failed.delete(storeKey);inProgress.delete(storeKey)},cancel:()=>{failed.set(storeKey,(failed.get(storeKey)||0)+1);inProgress.delete(storeKey)}}}queue(key3,obj,index6){return this._queue("ephemeral",key3,obj,index6)}dequeue(key3){return this._dequeue("ephemeral",key3)}dequeueWithCommit(key3){return this._dequeueWithCommit("ephemeral",key3)}queuePermanent(key3,obj,index6){return this._queue("permanent",key3,obj,index6)}dequeuePermanent(key3){return this._dequeue("permanent",key3)}dequeuePermanentWithCommit(key3){return this._dequeueWithCommit("permanent",key3)}};measures=new Map;root_17=from_html('
 
');root4=from_html('

TESTING BENCH: Self-hosted LiveSync

Module Checks

Synchronisation Result Status

 

Performance test

',1);$$css5={hash:"svelte-fa4ppj",code:".svelte-fa4ppj {box-sizing:border-box;}"};TestPaneView=class extends import_obsidian.ItemView{constructor(leaf,plugin3,moduleDev){super(leaf);this.icon="view-log";this.title="Self-hosted LiveSync Test and Results";this.navigation=!0;this.plugin=plugin3;this.moduleDev=moduleDev}getIcon(){return"view-log"}getViewType(){return"ols-pane-test"}getDisplayText(){return"Self-hosted LiveSync Test and Results"}async onOpen(){this.component=new TestPane({target:this.contentEl,props:{plugin:this.plugin,moduleDev:this.moduleDev}});await Promise.resolve()}async onClose(){var _a8;null==(_a8=this.component)||_a8.$destroy();await Promise.resolve()}};ModuleDev=class extends AbstractObsidianModule{constructor(){super(...arguments);this.testResults=writable([])}_everyOnloadStart(){__onMissingTranslation(()=>{});return Promise.resolve(!0)}async onMissingTranslation(key3){const outFile=`missing-translation-${(new Date).toISOString().split("T")[0]}.jsonl`,piece=JSON.stringify({[key3]:{}}),writePiece=piece.substring(1,piece.length-1)+",";try{await this.core.storageAccess.ensureDir(this.app.vault.configDir+"/ls-debug/");await this.core.storageAccess.appendHiddenFile(this.app.vault.configDir+"/ls-debug/"+outFile,writePiece+"\n")}catch(ex){this._log(`Could not write ${outFile}`,LOG_LEVEL_VERBOSE);this._log(`Missing translation: ${writePiece}`,LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE)}}_everyOnloadAfterLoadSettings(){if(!this.settings.enableDebugTools)return Promise.resolve(!0);this.onMissingTranslation=this.onMissingTranslation.bind(this);__onMissingTranslation(key3=>{this.onMissingTranslation(key3)});eventHub.onEvent("document-stub-created",detail=>{fireAndForget(async()=>{const stub=detail.stub,toc2=detail.toc,stubDocX=Object.entries(stub).map(([key3,value])=>[`## ${key3}`,Object.entries(value).map(([key22,value2])=>[`### ${key22}`,[...value2.entries()].map(([key32,value3])=>{var _a8;const isObsolete=value3.is_obsolete?" (obsolete)":"",desc=null!=(_a8=value3.desc)?_a8:"";return`#### ${key32}${isObsolete}\n${value3.key?"Setting key: "+value3.key+"\n":""}${desc}\n`})].flat()).flat()].flat()).flat(),stubDocMD="\n| Icon | Description |\n| :---: | ----------------------------------------------------------------- |\n"+[...toc2.values()].map(e3=>`${e3}`).join("\n")+"\n\n"+stubDocX.join("\n");await this.core.storageAccess.writeHiddenFileAuto(this.app.vault.configDir+"/ls-debug/stub-doc.md",stubDocMD)})});this.plugin;this.registerView("ols-pane-test",leaf=>new TestPaneView(leaf,this.plugin,this));this.addCommand({id:"view-test",name:"Open Test dialogue",callback:()=>{this.services.API.showWindow("ols-pane-test")}});return Promise.resolve(!0)}async _everyOnLayoutReady(){if(!this.settings.enableDebugTools)return Promise.resolve(!0);this.addCommand({id:"test-create-conflict",name:"Create conflict",callback:async()=>{const filename="test-create-conflict.md";if(await this.core.databaseFileAccess.store({name:filename,path:filename,body:new Blob(["# Test create conflict\n\n"],{type:"text/markdown"}),stat:{ctime:(new Date).getTime(),mtime:(new Date).getTime(),size:24,type:"file"}})){const id=await this.services.path.path2id(filename),f4=await this.core.localDatabase.getRaw(id);console.log(f4);console.log(f4._rev);const revConflict=f4._rev.split("-")[0]+"-"+(parseInt(f4._rev.split("-")[1])+1).toString();console.log(await this.core.localDatabase.bulkDocsRaw([f4],{new_edits:!1}));console.log(await this.core.localDatabase.bulkDocsRaw([{...f4,_rev:revConflict}],{new_edits:!1}))}}});await delay(1);return!0}_addTestResult(name,key3,result,summary,message){const logLine=`${name}: ${key3} ${null!=summary?summary:""}`;this.testResults.update(results=>{results.push([result,logLine,null!=message?message:""]);return results})}_everyModuleTest(){return this.settings.enableDebugTools?this.testDone():Promise.resolve(!0)}onBindFunction(core,services){services.appLifecycle.onLayoutReady.addHandler(this._everyOnLayoutReady.bind(this));services.appLifecycle.onInitialise.addHandler(this._everyOnloadStart.bind(this));services.appLifecycle.onSettingLoaded.addHandler(this._everyOnloadAfterLoadSettings.bind(this));services.test.test.addHandler(this._everyModuleTest.bind(this));services.test.addTestResult.setHandler(this._addTestResult.bind(this))}};ModuleInteractiveConflictResolver=class extends AbstractObsidianModule{_everyOnloadStart(){this.addCommand({id:"livesync-conflictcheck",name:"Pick a file to resolve conflict",callback:async()=>{await this.pickFileForResolve()}});this.addCommand({id:"livesync-all-conflictcheck",name:"Resolve all conflicted files",callback:async()=>{await this.allConflictCheck()}});return Promise.resolve(!0)}async _anyResolveConflictByUI(filename,conflictCheckResult){return await serialized("conflict-resolve-ui",async()=>{this._log("Merge:open conflict dialog",LOG_LEVEL_VERBOSE);const dialog=new ConflictResolveModal(this.app,filename,conflictCheckResult);dialog.open();const selected=await dialog.waitForResult();if(selected===CANCELLED){this._log(`Merge: Cancelled ${filename}`,LOG_LEVEL_INFO);return!1}const testDoc=await this.localDatabase.getDBEntry(filename,{conflicts:!0},!1,!0,!0);if(!1===testDoc){this._log(`Merge: Could not read ${filename} from the local database`,LOG_LEVEL_VERBOSE);return!1}if(!testDoc._conflicts){this._log(`Merge: Nothing to do ${filename}`,LOG_LEVEL_VERBOSE);return!1}const toDelete=selected;if(toDelete===LEAVE_TO_SUBSEQUENT){const p2=conflictCheckResult.diff.map(e3=>e3[1]).join(""),delRev=testDoc._conflicts[0];if(!await this.core.databaseFileAccess.storeContent(filename,p2)){this._log(`Concatenated content cannot be stored:${filename}`,LOG_LEVEL_NOTICE);return!1}if(await this.services.conflict.resolveByDeletingRevision(filename,delRev,"UI Concatenated")==MISSING_OR_ERROR){this._log(`Concatenated saved, but cannot delete conflicted revisions: ${filename}, (${displayRev(delRev)})`,LOG_LEVEL_NOTICE);return!1}}else{if("string"!=typeof toDelete){this._log(`Merge: Something went wrong: ${filename}, (${toDelete})`,LOG_LEVEL_NOTICE);return!1}if(await this.services.conflict.resolveByDeletingRevision(filename,toDelete,"UI Selected")==MISSING_OR_ERROR){this._log(`Merge: Something went wrong: ${filename}, (${toDelete})`,LOG_LEVEL_NOTICE);return!1}}this.settings.syncAfterMerge&&!this.services.appLifecycle.isSuspended()&&await this.services.replication.replicateByEvent();await this.services.conflict.queueCheckFor(filename);return!1})}async allConflictCheck(){for(;await this.pickFileForResolve(););}async pickFileForResolve(){const notes=[];for await(const doc of this.localDatabase.findAllDocs({conflicts:!0}))"_conflicts"in doc&¬es.push({id:doc._id,path:this.getPath(doc),dispPath:this.getPathWithoutPrefix(doc),mtime:doc.mtime});notes.sort((a2,b3)=>b3.mtime-a2.mtime);const notesList=notes.map(e3=>e3.dispPath);if(0==notesList.length){this._log("There are no conflicted documents",LOG_LEVEL_NOTICE);return!1}const target=await this.core.confirm.askSelectString("File to resolve conflict",notesList);if(target){const targetItem=notes.find(e3=>e3.dispPath==target);await this.services.conflict.queueCheckFor(targetItem.path);await this.services.conflict.ensureAllProcessed();return!0}return!1}async _allScanStat(){const notes=[];this._log("Checking conflicted files",LOG_LEVEL_VERBOSE);try{for await(const doc of this.localDatabase.findAllDocs({conflicts:!0}))"_conflicts"in doc&¬es.push({path:this.getPath(doc),mtime:doc.mtime});if(notes.length>0){this.core.confirm.askInPopup("conflicting-detected-on-safety",'Some files have been left conflicted! Press {HERE} to resolve them, or you can do it later by "Pick a file to resolve conflict',anchor=>{anchor.text="HERE";anchor.addEventListener("click",()=>{fireAndForget(()=>this.allConflictCheck())})});this._log('Some files have been left conflicted! Please resolve them by "Pick a file to resolve conflict". The list is written in the log.',LOG_LEVEL_VERBOSE);for(const note of notes)this._log(`Conflicted: ${note.path}`)}else this._log("There are no conflicting files",LOG_LEVEL_VERBOSE)}catch(e3){this._log(`Error while scanning conflicted files: ${e3}`,LOG_LEVEL_NOTICE);this._log(e3,LOG_LEVEL_VERBOSE);return!1}return!0}onBindFunction(core,services){services.appLifecycle.onScanningStartupIssues.addHandler(this._allScanStat.bind(this));services.appLifecycle.onInitialise.addHandler(this._everyOnloadStart.bind(this));services.conflict.resolveByUserInteraction.addHandler(this._anyResolveConflictByUI.bind(this))}};ModuleObsidianEvents=class extends AbstractObsidianModule{constructor(){super(...arguments);this.hasFocus=!0;this.isLastHidden=!1;this._totalProcessingCount=void 0}_everyOnloadStart(){this.plugin.registerEvent(this.app.vault.on("rename",(file,oldPath)=>{eventHub.emitEvent("file-renamed",{newPath:file.path,old:oldPath})}));this.plugin.registerEvent(this.app.workspace.on("active-leaf-change",()=>eventHub.emitEvent("leaf-active-changed")));return Promise.resolve(!0)}__performAppReload(){this.services.appLifecycle.performRestart()}swapSaveCommand(){var _a8,_b5;this._log("Modifying callback of the save command",LOG_LEVEL_VERBOSE);const saveCommandDefinition=null==(_b5=null==(_a8=this.app.commands)?void 0:_a8.commands)?void 0:_b5["editor:save-file"],save2=null==saveCommandDefinition?void 0:saveCommandDefinition.callback;if("function"==typeof save2){this.initialCallback=save2;saveCommandDefinition.callback=()=>{scheduleTask("syncOnEditorSave",250,()=>{if(this.services.control.hasUnloaded()){this._log("Unload and remove the handler.",LOG_LEVEL_VERBOSE);saveCommandDefinition.callback=this.initialCallback;this.initialCallback=void 0}else if(this.settings.syncOnEditorSave){this._log("Sync on Editor Save.",LOG_LEVEL_VERBOSE);fireAndForget(()=>this.services.replication.replicateByEvent())}});save2()}}const _this=this;window.CodeMirrorAdapter?window.CodeMirrorAdapter.commands.save=()=>{_this.app.commands.executeCommandById("editor:save-file")}:this._log("CodeMirrorAdapter is not available")}registerWatchEvents(){this.setHasFocus=this.setHasFocus.bind(this);this.watchWindowVisibility=this.watchWindowVisibility.bind(this);this.watchWorkspaceOpen=this.watchWorkspaceOpen.bind(this);this.watchOnline=this.watchOnline.bind(this);this.plugin.registerEvent(this.app.workspace.on("file-open",this.watchWorkspaceOpen));this.plugin.registerDomEvent(document,"visibilitychange",this.watchWindowVisibility);this.plugin.registerDomEvent(window,"focus",()=>this.setHasFocus(!0));this.plugin.registerDomEvent(window,"blur",()=>this.setHasFocus(!1));this.plugin.registerDomEvent(window,"online",this.watchOnline);this.plugin.registerDomEvent(window,"offline",this.watchOnline)}setHasFocus(hasFocus){this.hasFocus=hasFocus;this.watchWindowVisibility()}watchWindowVisibility(){scheduleTask("watch-window-visibility",100,()=>fireAndForget(()=>this.watchWindowVisibilityAsync()))}watchOnline(){scheduleTask("watch-online",500,()=>fireAndForget(()=>this.watchOnlineAsync()))}async watchOnlineAsync(){if(navigator.onLine&&this.localDatabase.needScanning){this.localDatabase.needScanning=!1;await this.services.vault.scanVault()}}async watchWindowVisibilityAsync(){if(this.settings.suspendFileWatching)return;if(!this.settings.isConfigured)return;if(!this.services.appLifecycle.isReady())return;if(this.isLastHidden&&!this.hasFocus)return;const isHidden=document.hidden;if(this.isLastHidden!==isHidden){this.isLastHidden=isHidden;await this.services.fileProcessing.commitPendingFileEvents();if(isHidden)await this.services.appLifecycle.onSuspending();else{if(this.services.appLifecycle.isSuspended())return;if(!this.hasFocus)return;await this.services.appLifecycle.onResuming();await this.services.appLifecycle.onResumed()}}}watchWorkspaceOpen(file){this.settings.suspendFileWatching||this.settings.isConfigured&&this.services.appLifecycle.isReady()&&file&&scheduleTask("watch-workspace-open",500,()=>fireAndForget(()=>this.watchWorkspaceOpenAsync(file)))}async watchWorkspaceOpenAsync(file){if(!this.settings.suspendFileWatching&&this.settings.isConfigured&&this.services.appLifecycle.isReady()){await this.services.fileProcessing.commitPendingFileEvents();if(null!=file){this.settings.syncOnFileOpen&&!this.services.appLifecycle.isSuspended()&&await this.services.replication.replicateByEvent();await this.services.conflict.queueCheckForIfOpen(file.path)}}}_everyOnLayoutReady(){this.swapSaveCommand();this.registerWatchEvents();return Promise.resolve(!0)}_askReload(message){this.services.appLifecycle.isReloadingScheduled()?this._log("Reloading is already scheduled",LOG_LEVEL_VERBOSE):scheduleTask("configReload",250,async()=>{const ret=await this.core.confirm.askSelectStringDialogue(message||"Do you want to restart and reload Obsidian now?",["Yes, schedule a restart after stabilisation","Yes, restart immediately","No, Leave it to me"],{defaultAction:"No, Leave it to me"});"Yes, restart immediately"==ret?this.__performAppReload():"Yes, schedule a restart after stabilisation"==ret&&this.services.appLifecycle.scheduleRestart()})}_scheduleAppReload(){if(!this._totalProcessingCount){const __tick=reactiveSource(0);this._totalProcessingCount=reactive(()=>{const dbCount=this.services.replication.databaseQueueCount.value,replicationCount=this.services.replication.replicationResultCount.value,storageApplyingCount=this.services.replication.storageApplyingCount.value,chunkCount=collectingChunks.value,pluginScanCount=pluginScanningCount.value,hiddenFilesCount=hiddenFilesEventCount.value+hiddenFilesProcessingCount.value,conflictProcessCount=this.services.conflict.conflictProcessQueueCount.value;__tick.value;return dbCount+replicationCount+storageApplyingCount+chunkCount+pluginScanCount+hiddenFilesCount+conflictProcessCount+0+0});this.plugin.registerInterval(setInterval(()=>{__tick.value++},1e3));let stableCheck=3;this._totalProcessingCount.onChanged(e3=>{if(0==e3.value){stableCheck--<=0&&this.__performAppReload();this._log(`Obsidian will be restarted soon! (Within ${stableCheck} seconds)`,LOG_LEVEL_NOTICE,"restart-notice")}else stableCheck=3})}}_isReloadingScheduled(){return void 0!==this._totalProcessingCount}onBindFunction(core,services){services.appLifecycle.onLayoutReady.addHandler(this._everyOnLayoutReady.bind(this));services.appLifecycle.onInitialise.addHandler(this._everyOnloadStart.bind(this));services.appLifecycle.askRestart.setHandler(this._askReload.bind(this));services.appLifecycle.scheduleRestart.setHandler(this._scheduleAppReload.bind(this));services.appLifecycle.isReloadingScheduled.setHandler(this._isReloadingScheduled.bind(this))}};checkRemoteVersion=async(db,migrate,barrier=12)=>{try{const versionInfo=await db.get("obsydian_livesync_version");if("versioninfo"!=versionInfo.type)return!1;const version2=versionInfo.version;if(version2{const vi={_id:"obsydian_livesync_version",version:barrier,type:"versioninfo"},versionInfo=await resolveWithIgnoreKnownError(db.get("obsydian_livesync_version"),vi);if("versioninfo"!=versionInfo.type)return!1;vi._rev=versionInfo._rev;await db.put(vi);return!0};checkSyncInfo=async db=>{try{const syncinfo=await db.get(SYNCINFO_ID);console.log(syncinfo);return!0}catch(ex){if(isErrorOfMissingDoc(ex)){const randomStrSrc="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",temp=[...Array(30)].map(_e2=>Math.floor(Math.random()*randomStrSrc.length)).map(e3=>randomStrSrc[e3]).join(""),newSyncInfo={_id:SYNCINFO_ID,type:"syncinfo",data:temp};return!!await db.put(newSyncInfo)}console.dir(ex);return!1}};SELECTOR_COMPROMISED_CHUNK_1={selector:{_id:{$lt:"h:"},type:"leaf"}};SELECTOR_COMPROMISED_CHUNK_2={selector:{_id:{$gt:"h;"},type:"leaf"}};webcrypto2=globalThis.crypto;SALT=(new TextEncoder).encode("fancySyncForYou!");previousPassphrase="";_nonceV3=new Uint32Array(1);bufV3=new Uint8Array(12);previousDecryptionPassphrase="";UNDEFINED=Symbol("undefined");webcrypto3=globalThis.crypto;IV_LENGTH=12;HKDF_SALT_LENGTH=32;PBKDF2_SALT_LENGTH=32;gcmTagLength=128;HKDF_ENCRYPTED_PREFIX="%=";HKDF_SALTED_ENCRYPTED_PREFIX="%$";deriveMasterKey=function memoWithMap(bufferLength,fn,keyFunction){if(bufferLength<=0)throw new Error("Buffer length must be greater than 0");const cache2=new Map,getKey3=args=>args.length>0&&"string"==typeof args[0]?args[0]:JSON.stringify(args,(key3,value)=>void 0===value?UNDEFINED:value);return function(...args){const key3=keyFunction?keyFunction(args):getKey3(args);if(cache2.has(key3)){const hitPromise=cache2.get(key3);cache2.delete(key3);cache2.set(key3,hitPromise);return hitPromise}const newPromise=fn(...args);cache2.set(key3,newPromise);newPromise.catch(()=>{cache2.get(key3)===newPromise&&cache2.delete(key3)});if(cache2.size>bufferLength){const oldestKey=cache2.keys().next().value;oldestKey&&cache2.delete(oldestKey)}return newPromise}}(10,async(passphrase,pbkdf2Salt)=>{const binaryPassphrase=writeString(passphrase),keyMaterial=await webcrypto3.subtle.importKey("raw",binaryPassphrase,{name:"PBKDF2",length:256},!1,["deriveKey"]),masterKeyRaw=await webcrypto3.subtle.deriveKey({name:"PBKDF2",salt:pbkdf2Salt,iterations:31e4,hash:"SHA-256"},keyMaterial,{name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),masterKeyBuffer=await webcrypto3.subtle.exportKey("raw",masterKeyRaw);return await webcrypto3.subtle.importKey("raw",masterKeyBuffer,{name:"HKDF"},!1,["deriveKey"])},([passphrase,salt])=>`${passphrase}-${uint8ArrayToHexString(salt)}`);webcrypto4=globalThis.crypto;ENCRYPT_V1_PREFIX_PROBABLY="[";ENCRYPT_V2_PREFIX="%";ENCRYPT_V3_PREFIX="%~";KeyBuffs=new Map;decKeyBuffs=new Map;KEY_RECYCLE_COUNT=100;nonceBuffer=new Uint32Array(1);webcrypto5=globalThis.crypto;keyGCCount=5*KEY_RECYCLE_COUNT;decKeyIdx=0;decKeyMin=0;SYMBOL_USED=Symbol("used");SYMBOL_END_OF_DATA=Symbol("endOfData");workerStreams=new Map;writers=new Map;responseBuf=new Map;writerPromise=Promise.resolve();tasks2=new Map;workers=[];key2=0;roundRobinIdx=0;encrypt4=function encryptWorker(input,passphrase,autoCalculateIterations){return encryptionOnWorker({type:"encrypt",input,passphrase,autoCalculateIterations})};decrypt4=function decryptWorker(input,passphrase,autoCalculateIterations){return encryptionOnWorker({type:"decrypt",input,passphrase,autoCalculateIterations})};encryptHKDF=encryptHKDFWorker;decryptHKDF=function decryptHKDFWorker(input,passphrase,pbkdf2Salt){return encryptionHKDFOnWorker({type:"decryptHKDF",input,passphrase,pbkdf2Salt})};Encrypt_HKDF_Header="%=";Encrypt_OLD_Header="%";EncryptionVersions_UNENCRYPTED=0,EncryptionVersions_ENCRYPTED=1,EncryptionVersions_HKDF=2,EncryptionVersions_UNKNOWN=99;ENCRYPTED_META_PREFIX="/\\:";MESSAGE_FALLBACK_DECRYPT_FAILED="Failed to decrypt the data with V1 method. Cannot encrypt with HKDF.";ENCRYPTION_HKDF_FAILED="Encryption with HKDF failed.";DECRYPTION_HKDF_FAILED="Decryption with HKDF failed.";DECRYPTION_FALLBACK_FAILED="Decryption with fallback failed.";preprocessOutgoing=async doc=>await Promise.resolve(doc);enableEncryption=(db,passphrase,useDynamicIterationCount,migrationDecrypt,getPBKDF2Salt,algorithm)=>{const decrypted=new Map,incoming=doc=>algorithm===E2EEAlgorithms.V2?incomingEncryptHKDF(doc,passphrase,useDynamicIterationCount,getPBKDF2Salt):incomingEncryptV1(doc,passphrase,useDynamicIterationCount);preprocessOutgoing=incoming;db.transform({incoming,outgoing:doc=>algorithm!==E2EEAlgorithms.ForceV1?outgoingDecryptHKDF(doc,0,0,passphrase,useDynamicIterationCount,getPBKDF2Salt):outgoingDecryptV1(doc,migrationDecrypt,decrypted,passphrase,useDynamicIterationCount)})};EDEN_ENCRYPTED_KEY="h:++encrypted";EDEN_ENCRYPTED_KEY_HKDF="h:++encrypted-hkdf";LiveSyncAbstractReplicator=class{constructor(env){this.syncStatus="NOT_CONNECTED";this.docArrived=0;this.docSent=0;this.lastSyncPullSeq=0;this.maxPullSeq=0;this.lastSyncPushSeq=0;this.maxPushSeq=0;this.nodeid="";this.remoteLocked=!1;this.remoteCleaned=!1;this.remoteLockedAndDeviceNotAccepted=!1;this.tweakSettingsMismatched=!1;this.updateInfo=()=>{this.env.services.replicator.replicationStatics.value={sent:this.docSent,arrived:this.docArrived,maxPullSeq:this.maxPullSeq,maxPushSeq:this.maxPushSeq,lastSyncPullSeq:this.lastSyncPullSeq,lastSyncPushSeq:this.lastSyncPushSeq,syncStatus:this.syncStatus}};this.env=env}get database(){return this.env.services.database.localDatabase}get rawDatabase(){return this.env.services.database.localDatabase.localDatabase}get currentSettings(){return this.env.services.setting.currentSettings()}sendChunks(setting,remoteDB,showResult,fromSeq){return Promise.resolve(!0)}async ensurePBKDF2Salt(setting,showMessage=!1,useCache=!0){try{const hash3=await this.getReplicationPBKDF2Salt(setting,!useCache);if(0==hash3.length)throw new Error("PBKDF2 salt (Security Seed) is empty");Logger(`PBKDF2 salt (Security Seed): ${await arrayBufferToBase64Single2(hash3)}`,LOG_LEVEL_VERBOSE);return!0}catch(ex){Logger("Failed to obtain PBKDF2 salt (Security Seed) for replication",showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}async initializeDatabaseForReplication(){const db=this.rawDatabase;try{const nodeinfo=await resolveWithIgnoreKnownError(db.get(NODEINFO_DOCID),{_id:NODEINFO_DOCID,type:"nodeinfo",nodeid:"",v20220607:!0});if(""==nodeinfo.nodeid){nodeinfo.nodeid=Math.random().toString(36).slice(-10);await db.put(nodeinfo)}this.nodeid=nodeinfo.nodeid;return!0}catch(ex){Logger(ex)}return!1}};_handlers=new Map;SyncParamsHandlerError=class extends LiveSyncError{};SyncParamsFetchError=class extends SyncParamsHandlerError{};SyncParamsNotFoundError=class extends SyncParamsHandlerError{};SyncParamsUpdateError=class extends SyncParamsHandlerError{};currentVersionRange={min:0,max:2400,current:2};selectorOnDemandPull={selector:{type:{$ne:"leaf"}}};LiveSyncCouchDBReplicator=class extends LiveSyncAbstractReplicator{get isChunkSendingSupported(){return!0}isMobile(){return this.env.services.API.isMobile()}constructor(env){super(env);this.env=env;this.initializeDatabaseForReplication();this.rawDatabase.on("close",()=>{this.closeReplication()})}getInitialSyncParameters(setting){return Promise.resolve({...DEFAULT_SYNC_PARAMETERS,protocolVersion:2})}async getSyncParameters(setting){try{const downloadedSyncParams=await this.fetchRemoteDocument(setting,"_local/obsidian_livesync_sync_parameters");if(!downloadedSyncParams)throw new SyncParamsNotFoundError("Sync parameters not found on remote server");return downloadedSyncParams}catch(ex){Logger("Could not retrieve remote sync parameters",LOG_LEVEL_INFO);throw SyncParamsFetchError.fromError(ex)}}async putSyncParameters(setting,params){try{const ret=await this.putRemoteDocument(setting,params);if(ret.ok)return!0;throw new SyncParamsUpdateError(`Could not store remote sync parameters: ${JSON.stringify(ret)}`)}catch(ex){Logger("Could not store remote sync parameters",LOG_LEVEL_INFO);throw SyncParamsUpdateError.fromError(ex)}}async getReplicationPBKDF2Salt(setting,refresh){const manager=createSyncParamsHanderForServer(`${setting.couchDB_URI}/${setting.couchDB_DBNAME}`,{put:params=>this.putSyncParameters(setting,params),get:()=>this.getSyncParameters(setting),create:()=>this.getInitialSyncParameters(setting)});return await manager.getPBKDF2Salt(refresh)}async migrate(from,to){Logger(`Database updated from ${from} to ${to}`,LOG_LEVEL_NOTICE);return Promise.resolve(!0)}terminateSync(){if(this.controller){this.controller.abort();this.controller=void 0}}async openReplication(setting,keepAlive,showResult,ignoreCleanLock){await this.initializeDatabaseForReplication();if(!keepAlive)return this.openOneShotReplication(setting,showResult,!1,"sync",ignoreCleanLock);this.openContinuousReplication(setting,showResult,!1)}replicationActivated(showResult){this.syncStatus="CONNECTED";this.updateInfo();Logger("Replication activated",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"sync")}async replicationChangeDetected(e3,showResult,docSentOnStart,docArrivedOnStart){try{if("pull"==e3.direction){await this.env.services.replication.parseSynchroniseResult(e3.change.docs);this.docArrived+=e3.change.docs.length}else this.docSent+=e3.change.docs.length;if(showResult){const maxPullSeq=this.maxPullSeq,maxPushSeq=this.maxPushSeq,lastSyncPullSeq=this.lastSyncPullSeq,lastSyncPushSeq=this.lastSyncPushSeq,pushLast=0==lastSyncPushSeq?"":lastSyncPushSeq>=maxPushSeq?" (LIVE)":` (${maxPushSeq-lastSyncPushSeq})`,pullLast=0==lastSyncPullSeq?"":lastSyncPullSeq>=maxPullSeq?" (LIVE)":` (${maxPullSeq-lastSyncPullSeq})`;Logger(`↑${this.docSent-docSentOnStart}${pushLast} ↓${this.docArrived-docArrivedOnStart}${pullLast}`,LOG_LEVEL_NOTICE,"sync")}this.updateInfo()}catch(ex){Logger("Replication callback error",LOG_LEVEL_NOTICE,"sync");Logger(ex,LOG_LEVEL_VERBOSE)}}replicationCompleted(showResult){this.syncStatus="COMPLETED";this.updateInfo();Logger("Replication completed",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,showResult?"sync":"");this.terminateSync()}replicationDenied(e3){this.syncStatus="ERRORED";this.updateInfo();this.terminateSync();Logger("Replication denied",LOG_LEVEL_NOTICE,"sync");Logger(e3,LOG_LEVEL_VERBOSE)}replicationErrored(e3){this.syncStatus="ERRORED";this.terminateSync();this.updateInfo();Logger("Replication error",LOG_LEVEL_NOTICE,"sync");Logger(e3,LOG_LEVEL_VERBOSE)}replicationPaused(){this.syncStatus="PAUSED";this.updateInfo();Logger("Replication paused",LOG_LEVEL_VERBOSE,"sync")}async processSync(syncHandler,showResult,docSentOnStart,docArrivedOnStart,syncMode,retrying,reportCancelledAsDone=!0){const controller=new AbortController;this.controller&&this.controller.abort();this.controller=controller;const gen=genReplication(syncHandler,controller.signal);try{for await(const[type,e3]of gen){const releaser=await globalConcurrencyController.tryAcquire(1,3e6);if(!1===releaser){Logger("Replication stopped for busy.",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"sync");return"FAILED"}releaser();switch(type){case"change":if("direction"in e3){"pull"==e3.direction?this.lastSyncPullSeq=Number(`${e3.change.last_seq}`.split("-")[0]):this.lastSyncPushSeq=Number(`${e3.change.last_seq}`.split("-")[0]);await this.replicationChangeDetected(e3,showResult,docSentOnStart,docArrivedOnStart)}else if("pullOnly"==syncMode){this.lastSyncPullSeq=Number(`${e3.last_seq}`.split("-")[0]);await this.replicationChangeDetected({direction:"pull",change:e3},showResult,docSentOnStart,docArrivedOnStart)}else if("pushOnly"==syncMode){this.lastSyncPushSeq=Number(`${e3.last_seq}`.split("-")[0]);this.updateInfo();await this.replicationChangeDetected({direction:"push",change:e3},showResult,docSentOnStart,docArrivedOnStart)}if(retrying&&this.docSent-docSentOnStart+(this.docArrived-docArrivedOnStart)>2*this.originalSetting.batch_size)return"NEED_RESURRECT";break;case"complete":this.replicationCompleted(showResult);return"DONE";case"active":this.replicationActivated(showResult);break;case"denied":this.replicationDenied(e3);return"FAILED";case"error":this.replicationErrored(e3);Logger("Replication stopped.",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"sync");if(this.env.services.remote.hadLastPostFailedBySize){if(e3&&413==(null==e3?void 0:e3.status)){Logger("Something went wrong during synchronisation. Please check the log!",LOG_LEVEL_NOTICE);return"FAILED"}return"NEED_RETRY"}Logger("Replication error",LOG_LEVEL_NOTICE,"sync");Logger(e3,LOG_LEVEL_VERBOSE);return"FAILED";case"paused":this.replicationPaused();break;case"finally":break;default:Logger(`Unexpected synchronization status:${JSON.stringify(e3)}`)}}return reportCancelledAsDone?"DONE":"CANCELLED"}catch(ex){Logger("Unexpected synchronization exception");Logger(ex,LOG_LEVEL_VERBOSE);return"FAILED"}finally{this.terminateSync();this.controller=void 0}}getEmptyMaxEntry(remoteID){return{_id:`_local/max_seq_on_chunk-${remoteID}`,maxSeq:0,remoteID,seqStatusMap:{},_rev:void 0}}async getLastTransferredSeqOfChunks(localDB,remoteID){const prevMax={_id:`_local/max_seq_on_chunk-${remoteID}`,maxSeq:0,remoteID,seqStatusMap:{},_rev:void 0},previous_max_seq_on_chunk=await wrapException(()=>localDB.get(prevMax._id));return previous_max_seq_on_chunk instanceof Error?prevMax:previous_max_seq_on_chunk}async updateMaxTransferredSeqOnChunks(localDB,remoteID,seqStatusMap){const newMax={_id:"_local/max_seq_on_chunk",maxSeq:0,remoteID,seqStatusMap,_rev:void 0},seqs=Object.keys(seqStatusMap).map(e3=>Number(e3));let maxSeq=0;for(const seq of seqs){if(!seqStatusMap[seq])break;maxSeq=seq}Logger(`Updating max seq on chunk to ${maxSeq}`,LOG_LEVEL_VERBOSE);newMax.maxSeq=maxSeq;const previous_max_seq_on_chunk=await wrapException(()=>localDB.get(newMax._id));if(previous_max_seq_on_chunk instanceof Error)delete newMax._rev;else{newMax._rev=previous_max_seq_on_chunk._rev;newMax.seqStatusMap={...previous_max_seq_on_chunk.seqStatusMap,...seqStatusMap}}await wrapException(()=>localDB.put(newMax));return newMax}async sendChunks(setting,remoteDB,showResult,fromSeq){const trench=new Trench(this.env.services.keyValueDB.openSimpleStore("sc-"),!1);await trench.eraseAllEphemerals();if(!remoteDB){const d4=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof d4){Logger($msg("liveSyncReplicator.couldNotConnectToRemoteDb",{d:d4}),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"fetch");return!1}remoteDB=d4.db}await this.checkReplicationConnectivity(setting,!1,!1,!1,!1);Logger("Bulk sending chunks to remote database...",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"fetch");const remoteMilestone=await remoteDB.get(MILESTONE_DOCID),remoteID=null==remoteMilestone?void 0:remoteMilestone.created,localDB=this.rawDatabase,te5=new TextEncoder;Logger($msg("liveSyncReplicator.checkingLastSyncPoint"),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"fetch");this.syncStatus="CONNECTED";const prev=await this.getLastTransferredSeqOfChunks(localDB,remoteID),seq=null!=fromSeq?fromSeq:prev.maxSeq,localScannedDocs=[],sentMap={},diffChunks=localDB.changes({since:seq,live:!1,include_docs:!0,return_docs:!1,selector:{type:"leaf"}}).on("change",e3=>{const numSeq=Number(e3.seq);prev.seqStatusMap[numSeq]||localScannedDocs.push({id:e3.id,seq:Number(e3.seq)})});await diffChunks;localScannedDocs.sort((a2,b3)=>a2.seq-b3.seq);const idSeqMap=Object.fromEntries(localScannedDocs.map(e3=>[e3.id,e3.seq]));for(const checkDocs of arrayToChunkedArray(localScannedDocs,250)){const remoteDocs=await remoteDB.allDocs({keys:checkDocs.map(e3=>e3.id),include_docs:!1}),remoteDocMap=Object.fromEntries(remoteDocs.rows.map(e3=>[e3.key,"error"in e3?e3.error:e3.value])),sendDocs=checkDocs.filter(e3=>"not_found"==remoteDocMap[e3.id]),sentDocs=checkDocs.filter(e3=>"not_found"!=remoteDocMap[e3.id]);sendDocs.forEach(e3=>sentMap[e3.seq]=!1);sentDocs.forEach(e3=>sentMap[e3.seq]=!0);const sendDocsMap=Object.fromEntries(sendDocs.map(e3=>[e3.id,e3.seq]));if(sendDocs.length>0){const localDocs=await localDB.allDocs({keys:sendDocs.map(e3=>e3.id),include_docs:!0});await trench.queue("send-chunks",localDocs.rows.filter(e3=>"id"in e3).map(e3=>({seq:sendDocsMap[e3.id],doc:e3.doc,id:e3.id})))}}let bulkDocs2=[],bulkDocsSizeBytes=0,bulkDocsSizeCount=0,maxSeq=0;const maxBatchSizeBytes=1024*setting.sendChunksBulkMaxSize*1024,semaphore=Semaphore(4);let sendingDocs=0,sentDocsCount=0;const sendChunks=async(bulkDocs3,bulkDocsSize,seq2)=>{Logger(`Sending ${bulkDocs3.length} (${bulkDocsSize} => ${sizeToHumanReadable(bulkDocsSize)} in plain) chunks to remote database...`,LOG_LEVEL_VERBOSE);const releaser=await semaphore.acquire(1);sendingDocs+=bulkDocs3.length;Logger(`↑ Uploading chunks \n${sendingDocs}/(${sentDocsCount} done)`,showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"send");try{const uploadBulkDocTasks=bulkDocs3.map(e3=>preprocessOutgoing(e3)),uploadBulkDocs=await Promise.all(uploadBulkDocTasks);await remoteDB.bulkDocs(uploadBulkDocs,{new_edits:!1});uploadBulkDocs.forEach(e3=>sentMap[idSeqMap[e3._id]]=!0);await this.updateMaxTransferredSeqOnChunks(localDB,remoteID,sentMap);sentDocsCount+=bulkDocs3.length;Logger(`↑ Uploading chunks \n${sendingDocs}/(${sentDocsCount} done)`,showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"send")}catch(ex){Logger("Bulk sending failed.",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"send");Logger(ex,LOG_LEVEL_VERBOSE);return!1}finally{releaser()}return!0},tasks3=[];for(;;){const nowSendChunks=await trench.dequeue("send-chunks");if(!nowSendChunks||0==nowSendChunks.length)break;for(const chunk of nowSendChunks){const jsonLength=te5.encode(JSON.stringify(chunk.doc)).byteLength+32;if((bulkDocsSizeBytes+jsonLength>maxBatchSizeBytes||bulkDocsSizeCount+1>200)&&bulkDocs2.length>0){tasks3.push(sendChunks([...bulkDocs2],bulkDocsSizeBytes));bulkDocs2=[];bulkDocsSizeBytes=0;bulkDocsSizeCount=0}bulkDocs2.push(chunk.doc);maxSeq=chunk.seq;bulkDocsSizeBytes+=jsonLength;bulkDocsSizeCount+=1}bulkDocs2.length>0&&tasks3.push(sendChunks([...bulkDocs2],bulkDocsSizeBytes));if((await Promise.all(tasks3.map(async e3=>{try{await e3}catch(ex){Logger("Bulk sending failed.",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"send");Logger(ex,LOG_LEVEL_VERBOSE);return!1}}))).some(e3=>!1===e3))return!1}return!0}async openOneShotReplication(setting,showResult,retrying,syncMode,ignoreCleanLock=!1){if(!1===await this.ensurePBKDF2Salt(setting,showResult,!retrying))return!1;const next2=await shareRunningResult("oneShotReplication",async()=>{if(this.controller){Logger($msg("liveSyncReplicator.replicationInProgress"),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"sync");return!1}const localDB=this.rawDatabase;Logger($msg("liveSyncReplicator.oneShotSyncBegin",{syncMode}));const ret=await this.checkReplicationConnectivity(setting,!1,retrying,showResult,ignoreCleanLock);if(!1===ret){Logger($msg("liveSyncReplicator.couldNotConnectToServer"),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"sync");return!1}this.maxPullSeq=Number(`${ret.info.update_seq}`.split("-")[0]);this.maxPushSeq=Number(`${(await localDB.info()).update_seq}`.split("-")[0]);showResult&&Logger($msg("liveSyncReplicator.checkingLastSyncPoint"),LOG_LEVEL_NOTICE,"sync");const{db,syncOptionBase}=ret;this.syncStatus="STARTED";this.updateInfo();const docArrivedOnStart=this.docArrived,docSentOnStart=this.docSent;retrying||(this.originalSetting=setting);this.terminateSync();const syncHandler="sync"==syncMode?localDB.sync(db,{...syncOptionBase}):"pullOnly"==syncMode?localDB.replicate.from(db,{...syncOptionBase,...setting.readChunksOnline?selectorOnDemandPull:{}}):"pushOnly"==syncMode?localDB.replicate.to(db,{...syncOptionBase}):void 0,syncResult=await this.processSync(syncHandler,showResult,docSentOnStart,docArrivedOnStart,syncMode,retrying,!1);if("DONE"==syncResult)return!0;if("CANCELLED"==syncResult)return!1;if("FAILED"==syncResult)return!1;if("NEED_RESURRECT"==syncResult){this.terminateSync();return async()=>await this.openOneShotReplication(this.originalSetting,showResult,!1,syncMode,ignoreCleanLock)}if("NEED_RETRY"==syncResult){const tempSetting=JSON.parse(JSON.stringify(setting));tempSetting.batch_size=Math.ceil(tempSetting.batch_size/2)+2;tempSetting.batches_limit=Math.ceil(tempSetting.batches_limit/2)+2;if(tempSetting.batch_size<=5&&tempSetting.batches_limit<=5){Logger($msg("liveSyncReplicator.cantReplicateLowerValue"),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}Logger($msg("liveSyncReplicator.retryLowerBatchSize",{batch_size:tempSetting.batch_size.toString(),batches_limit:tempSetting.batches_limit.toString()}),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return async()=>await this.openOneShotReplication(tempSetting,showResult,!0,syncMode,ignoreCleanLock)}return!1});return"boolean"==typeof next2?next2:await next2()}replicateAllToServer(setting,showingNotice){return this.openOneShotReplication(setting,null!=showingNotice&&showingNotice,!1,"pushOnly")}replicateAllFromServer(setting,showingNotice){return this.openOneShotReplication(setting,null!=showingNotice&&showingNotice,!1,"pullOnly")}async checkReplicationConnectivity(setting,keepAlive,skipCheck,showResult,ignoreCleanLock=!1){if(""!=setting.versionUpFlash){Logger($msg("Replicator.Message.VersionUpFlash"),LOG_LEVEL_NOTICE);return!1}const uri=setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME);if(this.controller){Logger("Another replication running.");return!1}const dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri,dbRet}),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}if(!skipCheck){if(!await checkRemoteVersion(dbRet.db,this.migrate.bind(this),12)){Logger($msg("liveSyncReplicator.remoteDbCorrupted"),LOG_LEVEL_NOTICE);return!1}this.remoteCleaned=!1;this.remoteLocked=!1;this.remoteLockedAndDeviceNotAccepted=!1;this.tweakSettingsMismatched=!1;this.preferredTweakValue=void 0;const progress=`${dbRet.info.update_seq}`,info3={app_version:this.env.services.API.getAppVersion(),plugin_version:this.env.services.API.getPluginVersion(),vault_name:this.env.services.vault.vaultName(),device_name:this.env.services.vault.getVaultName(),progress},ensure=await ensureDatabaseIsCompatible(dbRet.db,setting,this.nodeid,currentVersionRange,info3);if("INCOMPATIBLE"==ensure){Logger("The remote database has no compatibility with the running version. Please upgrade the plugin.",LOG_LEVEL_NOTICE);return!1}if("NODE_LOCKED"==ensure){Logger("The remote database has been rebuilt or corrupted since we have synchronized last time. Fetch rebuilt DB, explicit unlocking or chunk clean-up is required.",LOG_LEVEL_NOTICE);this.remoteLockedAndDeviceNotAccepted=!0;this.remoteLocked=!0;return!1}if("LOCKED"==ensure)this.remoteLocked=!0;else if("NODE_CLEANED"==ensure){if(!ignoreCleanLock){Logger("The remote database has been cleaned up. Fetch rebuilt DB, explicit unlocking or chunk clean-up is required.",LOG_LEVEL_NOTICE);this.remoteLockedAndDeviceNotAccepted=!0;this.remoteLocked=!0;this.remoteCleaned=!0;return!1}this.remoteLocked=!0}else if("OK"==ensure);else if("MISMATCHED"==ensure[0]){Logger("Configuration mismatching between the clients has been detected. This can be harmful or extra capacity consumption. We have to make these value unified. When replication is initiated manually via the command palette or ribbon, a dialogue box will open to address this.",LOG_LEVEL_NOTICE);this.tweakSettingsMismatched=!0;this.preferredTweakValue=ensure[1];return!1}}const syncOptionBase={batches_limit:setting.batches_limit,batch_size:setting.batch_size,push:{}};setting.readChunksOnline&&(syncOptionBase.pull={...selectorOnDemandPull});const syncOption=keepAlive?{live:!0,retry:!0,heartbeat:!setting.useTimeouts&&3e4,...syncOptionBase}:{...syncOptionBase};return{db:dbRet.db,info:dbRet.info,syncOptionBase,syncOption}}async openContinuousReplication(setting,showResult,retrying){const next2=await shareRunningResult("continuousReplication",async()=>{if(this.controller){Logger($msg("liveSyncReplicator.replicationInProgress"),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}const localDB=this.rawDatabase;Logger($msg("liveSyncReplicator.beforeLiveSync"));if(await this.openOneShotReplication(setting,showResult,!1,"pullOnly")){Logger($msg("liveSyncReplicator.liveSyncBegin"));const ret=await this.checkReplicationConnectivity(setting,!0,!0,showResult);if(!1===ret){Logger($msg("liveSyncReplicator.couldNotConnectToServer"),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}showResult&&Logger($msg("liveSyncReplicator.checkingLastSyncPoint"),LOG_LEVEL_NOTICE,"sync");const{db,syncOption}=ret;this.syncStatus="STARTED";this.maxPullSeq=Number(`${ret.info.update_seq}`.split("-")[0]);this.maxPushSeq=Number(`${(await localDB.info()).update_seq}`.split("-")[0]);this.updateInfo();const docArrivedOnStart=this.docArrived,docSentOnStart=this.docSent;retrying||(this.originalSetting=setting);this.terminateSync();const syncHandler=localDB.sync(db,{...syncOption}),syncMode="sync",syncResult=await this.processSync(syncHandler,showResult,docSentOnStart,docArrivedOnStart,syncMode,retrying);if("DONE"==syncResult)return!0;if("FAILED"==syncResult)return!1;if("NEED_RESURRECT"==syncResult){this.terminateSync();return async()=>await this.openContinuousReplication(this.originalSetting,showResult,!1)}if("NEED_RETRY"==syncResult){const tempSetting=JSON.parse(JSON.stringify(setting));tempSetting.batch_size=Math.ceil(tempSetting.batch_size/2)+2;tempSetting.batches_limit=Math.ceil(tempSetting.batches_limit/2)+2;if(tempSetting.batch_size<=5&&tempSetting.batches_limit<=5){Logger($msg("liveSyncReplicator.cantReplicateLowerValue"),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}Logger($msg("liveSyncReplicator.retryLowerBatchSize",{batch_size:tempSetting.batch_size.toString(),batches_limit:tempSetting.batches_limit.toString()}),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return async()=>await this.openContinuousReplication(tempSetting,showResult,!0)}}return!1});return"boolean"==typeof next2?next2:await next2()}closeReplication(){if(this.controller){this.controller.abort();this.controller=void 0;this.syncStatus="CLOSED";Logger($msg("liveSyncReplicator.replicationClosed"));this.updateInfo()}}async tryResetRemoteDatabase(setting){this.closeReplication();const con=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"!=typeof con){try{await con.db.destroy();Logger($msg("liveSyncReplicator.remoteDbDestroyed"),LOG_LEVEL_NOTICE);await this.tryCreateRemoteDatabase(setting)}catch(ex){Logger($msg("liveSyncReplicator.remoteDbDestroyError"),LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_NOTICE)}clearHandlers();await this.ensurePBKDF2Salt(setting,!0,!1)}}async tryCreateRemoteDatabase(setting){this.closeReplication();if("string"!=typeof await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0)){clearHandlers();await this.ensurePBKDF2Salt(setting,!0,!1);Logger($msg("liveSyncReplicator.remoteDbCreatedOrConnected"),LOG_LEVEL_NOTICE)}}async markRemoteLocked(setting,locked,lockByClean){const uri=setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri,dbRet}),LOG_LEVEL_NOTICE);return}if(!await checkRemoteVersion(dbRet.db,this.migrate.bind(this),12)){Logger($msg("liveSyncReplicator.remoteDbCorrupted"),LOG_LEVEL_NOTICE);return}const defInitPoint={_id:MILESTONE_DOCID,type:"milestoneinfo",created:new Date/1,locked,cleaned:lockByClean,accepted_nodes:[this.nodeid],node_chunk_info:{[this.nodeid]:currentVersionRange},node_info:{},tweak_values:{}},remoteMilestone={...defInitPoint,...await resolveWithIgnoreKnownError(dbRet.db.get(MILESTONE_DOCID),defInitPoint)};remoteMilestone.node_chunk_info={...defInitPoint.node_chunk_info,...remoteMilestone.node_chunk_info};remoteMilestone.accepted_nodes=[this.nodeid];remoteMilestone.locked=locked;remoteMilestone.cleaned=remoteMilestone.cleaned||lockByClean;Logger($msg(locked?"liveSyncReplicator.lockRemoteDb":"liveSyncReplicator.unlockRemoteDb"),LOG_LEVEL_NOTICE);await dbRet.db.put(remoteMilestone)}async markRemoteResolved(setting){const uri=setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri,dbRet}),LOG_LEVEL_NOTICE);return}if(!await checkRemoteVersion(dbRet.db,this.migrate.bind(this),12)){Logger($msg("liveSyncReplicator.remoteDbCorrupted"),LOG_LEVEL_NOTICE);return}const defInitPoint={_id:MILESTONE_DOCID,type:"milestoneinfo",created:new Date/1,locked:!1,accepted_nodes:[this.nodeid],node_info:{},node_chunk_info:{[this.nodeid]:currentVersionRange},tweak_values:{}},remoteMilestone={...defInitPoint,...await resolveWithIgnoreKnownError(dbRet.db.get(MILESTONE_DOCID),defInitPoint)};remoteMilestone.node_chunk_info={...defInitPoint.node_chunk_info,...remoteMilestone.node_chunk_info};remoteMilestone.accepted_nodes=Array.from(new Set([...remoteMilestone.accepted_nodes,this.nodeid]));Logger($msg("liveSyncReplicator.markDeviceResolved"),LOG_LEVEL_NOTICE);(await dbRet.db.put(remoteMilestone)).ok?Logger($msg("liveSyncReplicator.remoteDbMarkedResolved"),LOG_LEVEL_VERBOSE):Logger($msg("liveSyncReplicator.couldNotMarkResolveRemoteDb"),LOG_LEVEL_NOTICE)}connectRemoteCouchDBWithSetting(settings,isMobile,performSetup=!1,skipInfo=!1){if(settings.encrypt&&""==settings.passphrase&&!settings.permitEmptyPassphrase)return"Empty passphrases cannot be used without explicit permission";const customHeaders=parseHeaderValues(settings.couchDB_CustomHeaders),auth=settings.useJWT?{jwtAlgorithm:settings.jwtAlgorithm,jwtKey:settings.jwtKey,jwtExpDuration:settings.jwtExpDuration,jwtKid:settings.jwtKid,jwtSub:settings.jwtSub,type:"jwt"}:{username:settings.couchDB_USER,password:settings.couchDB_PASSWORD,type:"basic"};return this.env.services.remote.connect(settings.couchDB_URI+(""==settings.couchDB_DBNAME?"":"/"+settings.couchDB_DBNAME),auth,settings.disableRequestURI||isMobile,settings.encrypt?settings.passphrase:settings.encrypt,settings.useDynamicIterationCount,performSetup,skipInfo,settings.enableCompression,customHeaders,settings.useRequestAPI,async()=>await this.getReplicationPBKDF2Salt(settings))}async _ensureConnection(settings){const ret=await this.connectRemoteCouchDBWithSetting(settings,this.isMobile(),!1,!0);if("string"==typeof ret)throw new Error(`${$msg("liveSyncReplicator.couldNotConnectToServer")}:${ret}`);return ret.db}async fetchRemoteDocument(settings,id,db){try{const connDB=null!=db?db:await this._ensureConnection(settings);return await connDB.get(id)}catch(ex){if("status"in ex&&404==ex.status)return!1;throw ex}}async putRemoteDocument(settings,doc,db){const connDB=null!=db?db:await this._ensureConnection(settings);return await connDB.put(doc)}async fetchRemoteChunks(missingChunks,showResult){const ret=await this.connectRemoteCouchDBWithSetting(this.currentSettings,this.isMobile(),!1,!0);if("string"==typeof ret){Logger(`${$msg("liveSyncReplicator.couldNotConnectToServer")} ${ret} `,showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"fetch");return!1}const remoteChunks=await ret.db.allDocs({keys:missingChunks,include_docs:!0});if(remoteChunks.rows.some(e3=>"error"in e3)){Logger("Some chunks are not exists both on remote and local database.",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"fetch");Logger(`Missing chunks: ${missingChunks.join(",")}`,LOG_LEVEL_VERBOSE);Logger(`Error chunks: ${remoteChunks.rows.filter(e3=>"error"in e3).map(e3=>e3.key).join(",")}`,LOG_LEVEL_VERBOSE);return!1}return remoteChunks.rows.map(e3=>e3.doc)}async tryConnectRemote(setting,showResult=!0){const db=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof db){Logger($msg("liveSyncReplicator.couldNotConnectTo",{uri:setting.couchDB_URI,name:setting.couchDB_DBNAME,db}),LOG_LEVEL_NOTICE);return!1}Logger(`Connected to ${db.info.db_name} successfully`,LOG_LEVEL_NOTICE);return!0}async resetRemoteTweakSettings(setting){const uri=setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"!=typeof dbRet)if(await checkRemoteVersion(dbRet.db,this.migrate.bind(this),12))try{const remoteMilestone=await dbRet.db.get(MILESTONE_DOCID);remoteMilestone.tweak_values={};await dbRet.db.put(remoteMilestone);Logger("tweak values on the remote database have been cleared",LOG_LEVEL_VERBOSE)}catch(ex){Logger("Could not retrieve remote milestone",LOG_LEVEL_NOTICE);throw ex}else Logger($msg("liveSyncReplicator.remoteDbCorrupted"),LOG_LEVEL_NOTICE);else Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri,dbRet}),LOG_LEVEL_NOTICE)}async setPreferredRemoteTweakSettings(setting){const uri=setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"!=typeof dbRet)if(await checkRemoteVersion(dbRet.db,this.migrate.bind(this),12))try{const remoteMilestone=await dbRet.db.get(MILESTONE_DOCID);remoteMilestone.tweak_values[DEVICE_ID_PREFERRED]=extractObject(TweakValuesTemplate,{...setting});await dbRet.db.put(remoteMilestone);Logger("Preferred tweak values has been registered",LOG_LEVEL_VERBOSE)}catch(ex){Logger("Could not retrieve remote milestone",LOG_LEVEL_NOTICE);throw ex}else Logger($msg("liveSyncReplicator.remoteDbCorrupted"),LOG_LEVEL_NOTICE);else Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri,dbRet}),LOG_LEVEL_NOTICE)}async getRemotePreferredTweakValues(setting){var _a8;const uri=setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri,dbRet}),LOG_LEVEL_NOTICE);return!1}if(!await checkRemoteVersion(dbRet.db,this.migrate.bind(this),12)){Logger($msg("liveSyncReplicator.remoteDbCorrupted"),LOG_LEVEL_NOTICE);return!1}try{const remoteMilestone=await dbRet.db.get(MILESTONE_DOCID);if(!remoteMilestone)throw new Error("Remote milestone not found");return(null==(_a8=null==remoteMilestone?void 0:remoteMilestone.tweak_values)?void 0:_a8[DEVICE_ID_PREFERRED])||!1}catch(ex){Logger("Could not retrieve remote milestone",LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}async compactRemote(setting){const uri=setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri,dbRet}),LOG_LEVEL_NOTICE);return!1}return(await dbRet.db.compact({interval:1e3})).ok}async getRemoteStatus(setting){var _a8;const dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri:setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet}),LOG_LEVEL_NOTICE);return!1}const info3=await dbRet.db.info();return{...info3,estimatedSize:(null==(_a8=null==info3?void 0:info3.sizes)?void 0:_a8.file)||0}}async countCompromisedChunks(setting=this.currentSettings){const dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri:setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet}),LOG_LEVEL_NOTICE);return!1}return await countCompromisedChunks(dbRet.db)}async getConnectedDeviceList(setting=this.currentSettings){const dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri:setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet}),LOG_LEVEL_NOTICE);return!1}const milestoneDoc=await dbRet.db.get(MILESTONE_DOCID);if(!milestoneDoc){Logger("Could not retrieve remote milestone",LOG_LEVEL_NOTICE);return!1}return{node_info:milestoneDoc.node_info,accepted_nodes:milestoneDoc.accepted_nodes||[]}}};OnDialogSettingsDefault={configPassphrase:"",preset:"",syncMode:"ONEVENTS",dummy:0,deviceAndVaultName:""};SettingInformation={liveSync:{name:"Sync Mode"},couchDB_URI:{name:"Server URI",placeHolder:"https://........"},couchDB_USER:{name:"Username",desc:"username"},couchDB_PASSWORD:{name:"Password",desc:"password",isHidden:!0},couchDB_DBNAME:{name:"Database Name"},passphrase:{name:"Passphrase",desc:"Encryption passphrase. If changed, you should overwrite the server's database with the new (encrypted) files.",isHidden:!0},showStatusOnEditor:{name:"Show status inside the editor",desc:"Requires restart of Obsidian."},showOnlyIconsOnEditor:{name:"Show status as icons only"},showStatusOnStatusbar:{name:"Show status on the status bar",desc:"Requires restart of Obsidian."},lessInformationInLog:{name:"Show only notifications",desc:"Disables logging, only shows notifications. Please disable if you report an issue."},showVerboseLog:{name:"Verbose Log",desc:"Show verbose log. Please enable if you report an issue."},hashCacheMaxCount:{name:"Memory cache size (by total items)"},hashCacheMaxAmount:{name:"Memory cache size (by total characters)",desc:"(Mega chars)"},writeCredentialsForSettingSync:{name:"Write credentials in the file",desc:"(Not recommended) If set, credentials will be stored in the file."},notifyAllSettingSyncFile:{name:"Notify all setting files"},configPassphrase:{name:"Passphrase of sensitive configuration items",desc:"This passphrase will not be copied to another device. It will be set to `Default` until you configure it again."},configPassphraseStore:{name:"Encrypting sensitive configuration items"},syncOnSave:{name:"Sync on Save",desc:"Starts synchronisation when a file is saved."},syncOnEditorSave:{name:"Sync on Editor Save",desc:"When you save a file in the editor, start a sync automatically"},syncOnFileOpen:{name:"Sync on File Open",desc:"Forces the file to be synced when opened."},syncOnStart:{name:"Sync on Startup",desc:"Automatically Sync all files when opening Obsidian."},syncAfterMerge:{name:"Sync after merging file",desc:"Sync automatically after merging files"},trashInsteadDelete:{name:"Use the trash bin",desc:"Move remotely deleted files to the trash, instead of deleting."},doNotDeleteFolder:{name:"Keep empty folder",desc:"Should we keep folders that don't have any files inside?"},resolveConflictsByNewerFile:{name:"(BETA) Always overwrite with a newer file",desc:"Testing only - Resolve file conflicts by syncing newer copies of the file, this can overwrite modified files. Be Warned."},checkConflictOnlyOnOpen:{name:"Delay conflict resolution of inactive files",desc:"Should we only check for conflicts when a file is opened?"},showMergeDialogOnlyOnActive:{name:"Delay merge conflict prompt for inactive files.",desc:"Should we prompt you about conflicting files when a file is opened?"},disableMarkdownAutoMerge:{name:"Always prompt merge conflicts",desc:"Should we prompt you for every single merge, even if we can safely merge automatcially?"},writeDocumentsIfConflicted:{name:"Apply Latest Change if Conflicting",desc:"Enable this option to automatically apply the most recent change to documents even when it conflicts"},syncInternalFilesInterval:{name:"Scan hidden files periodically",desc:"Seconds, 0 to disable"},batchSave:{name:"Batch database update",desc:"Reducing the frequency with which on-disk changes are reflected into the DB"},readChunksOnline:{name:"Fetch chunks on demand",desc:"(ex. Read chunks online) If this option is enabled, LiveSync reads chunks online directly instead of replicating them locally. Increasing Custom chunk size is recommended."},syncMaxSizeInMB:{name:"Maximum file size",desc:"(MB) If this is set, changes to local and remote files that are larger than this will be skipped. If the file becomes smaller again, a newer one will be used."},useIgnoreFiles:{name:"(Beta) Use ignore files",desc:"If this is set, changes to local files which are matched by the ignore files will be skipped. Remote changes are determined using local ignore files."},ignoreFiles:{name:"Ignore files",desc:"Comma separated `.gitignore, .dockerignore`"},batch_size:{name:"Batch size",desc:"Number of changes to sync at a time. Defaults to 50. Minimum is 2."},batches_limit:{name:"Batch limit",desc:"Number of batches to process at a time. Defaults to 40. Minimum is 2. This along with batch size controls how many docs are kept in memory at a time."},useTimeouts:{name:"Use timeouts instead of heartbeats",desc:"If this option is enabled, PouchDB will hold the connection open for 60 seconds, and if no change arrives in that time, close and reopen the socket, instead of holding it open indefinitely. Useful when a proxy limits request duration but can increase resource usage."},concurrencyOfReadChunksOnline:{name:"Batch size of on-demand fetching"},minimumIntervalOfReadChunksOnline:{name:"The delay for consecutive on-demand fetches"},suspendFileWatching:{name:"Suspend file watching",desc:"Stop watching for file changes."},suspendParseReplicationResult:{name:"Suspend database reflecting",desc:"Stop reflecting database changes to storage files."},writeLogToTheFile:{name:"Write logs into the file",desc:"Warning! This will have a serious impact on performance. And the logs will not be synchronised under the default name. Please be careful with logs; they often contain your confidential information."},deleteMetadataOfDeletedFiles:{name:"Do not keep metadata of deleted files."},useIndexedDBAdapter:{name:"(Obsolete) Use an old adapter for compatibility",desc:"Before v0.17.16, we used an old adapter for the local database. Now the new adapter is preferred. However, it needs local database rebuilding. Please disable this toggle when you have enough time. If leave it enabled, also while fetching from the remote database, you will be asked to disable this.",obsolete:!0},watchInternalFileChanges:{name:"Scan changes on customization sync",desc:"Do not use internal API"},doNotSuspendOnFetching:{name:"Fetch database with previous behaviour"},disableCheckingConfigMismatch:{name:"Do not check configuration mismatch before replication"},usePluginSync:{name:"Enable customization sync"},autoSweepPlugins:{name:"Scan customization automatically",desc:"Scan customization before replicating."},autoSweepPluginsPeriodic:{name:"Scan customization periodically",desc:"Scan customization every 1 minute."},notifyPluginOrSettingUpdated:{name:"Notify customized",desc:"Notify when other device has newly customized."},remoteType:{name:"Active Remote Type",desc:"Remote server type"},endpoint:{name:"Endpoint URL",placeHolder:"https://........"},accessKey:{name:"Access Key"},secretKey:{name:"Secret Key",isHidden:!0},region:{name:"Region",placeHolder:"auto"},bucket:{name:"Bucket Name"},useCustomRequestHandler:{name:"Use Custom HTTP Handler",desc:"Enable this if your Object Storage doesn't support CORS"},maxChunksInEden:{name:"Maximum Incubating Chunks",desc:"The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks."},maxTotalLengthInEden:{name:"Maximum Incubating Chunk Size",desc:"The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks."},maxAgeInEden:{name:"Maximum Incubation Period",desc:"The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks."},settingSyncFile:{name:"Filename",desc:"Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform."},preset:{name:"Presets",desc:"Apply preset configuration"},syncMode:{name:"Sync Mode"},periodicReplicationInterval:{name:"Periodic Sync interval",desc:"Interval (sec)"},syncInternalFilesBeforeReplication:{name:"Scan for hidden files before replication"},automaticallyDeleteMetadataOfDeletedFiles:{name:"Delete old metadata of deleted files on start-up",desc:"(Days passed, 0 to disable automatic-deletion)"},additionalSuffixOfDatabaseName:{name:"Database suffix",desc:"LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured."},hashAlg:{name:(null==(_a6=configurationNames.hashAlg)?void 0:_a6.name)||"",desc:"xxhash64 is the current default."},deviceAndVaultName:{name:"Device name",desc:"Unique name between all synchronized devices. To edit this setting, please disable customization sync once."},displayLanguage:{name:"Display Language",desc:'Not all messages have been translated. And, please revert to "Default" when reporting errors.'},enableChunkSplitterV2:{name:"Use splitting-limit-capped chunk splitter",desc:"If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker."},disableWorkerForGeneratingChunks:{name:"Do not split chunks in the background",desc:"If disabled(toggled), chunks will be split on the UI thread (Previous behaviour)."},processSmallFilesInUIThread:{name:"Process small files in the foreground",desc:"If enabled, the file under 1kb will be processed in the UI thread."},batchSaveMinimumDelay:{name:"Minimum delay for batch database updating",desc:"Seconds. Saving to the local database will be delayed until this value after we stop typing or saving."},batchSaveMaximumDelay:{name:"Maximum delay for batch database updating",desc:"Saving will be performed forcefully after this number of seconds."},notifyThresholdOfRemoteStorageSize:{name:"Notify when the estimated remote storage size exceeds on start up",desc:"MB (0 to disable)."},usePluginSyncV2:{name:"Enable per-file customization sync",desc:"If enabled, efficient per-file customization sync will be used. A minor migration is required when enabling this feature, and all devices must be updated to v0.23.18. Enabling this feature will result in losing compatibility with older versions."},handleFilenameCaseSensitive:{name:"Handle files as Case-Sensitive",desc:"If this enabled, All files are handled as case-Sensitive (Previous behaviour)."},doNotUseFixedRevisionForChunks:{name:"Compute revisions for chunks",desc:"If this enabled, all chunks will be stored with the revision made from its content."},sendChunksBulkMaxSize:{name:"Maximum size of chunks to send in one request",desc:"MB"},useAdvancedMode:{name:"Enable advanced features"},usePowerUserMode:{name:"Enable poweruser features"},useEdgeCaseMode:{name:"Enable edge case treatment features"},enableDebugTools:{name:"Enable Developers' Debug Tools.",desc:"While enabled, it causes very performance impact but debugging replication testing and other features will be enabled. Please disable this if you have not read the source code. Requires restart of Obsidian."},suppressNotifyHiddenFilesChange:{name:"Suppress notification of hidden files change",desc:"If enabled, the notification of hidden files change will be suppressed."},syncMinimumInterval:{name:"Minimum interval for syncing",desc:"The minimum interval for automatic synchronisation on event."},useRequestAPI:{name:"Use Request API to avoid `inevitable` CORS problem",desc:"If enabled, the request API will be used to avoid `inevitable` CORS problems. This is a workaround and may not work in all cases. PLEASE READ THE DOCUMENTATION BEFORE USING THIS OPTION. This is a less-secure option."},hideFileWarningNotice:{name:"Show status icon instead of file warnings banner",desc:"If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown."},networkWarningStyle:{name:"Network warning style",desc:"How to display network errors when the sync server is unreachable."},bucketPrefix:{name:"File prefix on the bucket",desc:"Effectively a directory. Should end with `/`. e.g., `vault-name/`."},chunkSplitterVersion:{name:"Chunk Splitter",desc:"Now we can choose how to split the chunks; V3 is the most efficient. If you have troubled, please make this Default or Legacy."},processSizeMismatchedFiles:{name:"Process files even if seems to be corrupted",desc:"You can enable this setting to process the files with size mismatches, these files can be created by some APIs or integrations."},forcePathStyle:{name:"Enable forcePathStyle",desc:"If enabled, the forcePathStyle option will be used for bucket operations."},P2P_AutoBroadcast:{name:"Automatically broadcast changes to connected peers",desc:"If enabled, changes will be automatically broadcasted to all connected peers. Notified peers will start fetching the changes."},P2P_AutoStart:{name:"Automatically start P2P connection on launch",desc:"If enabled, the P2P connection will be automatically started when the application launches."},P2P_Enabled:{name:"Enable P2P Synchronization"},maxMTimeForReflectEvents:{name:"Maximum file modification time for reflected file events",desc:"Files with modification times greater than this value (in seconds since the Unix epoch) will not have their events reflected. Set to 0 to disable this limit."}};setLevelClass=(el,level)=>{switch(level){case LEVEL_POWER_USER:el.addClass("sls-setting-poweruser");break;case LEVEL_ADVANCED:el.addClass("sls-setting-advanced");break;case LEVEL_EDGE_CASE:el.addClass("sls-setting-edgecase");break;default:}};LiveSyncSetting=class _LiveSyncSetting extends import_obsidian.Setting{constructor(containerEl){super(containerEl);this.watchDirtyKeys=[];this.holdValue=!1;this.descBuf="";this.nameBuf="";this.placeHolderBuf="";this.hasPassword=!1;this.updateHandlers=new Set;this.prevStatus={};_LiveSyncSetting.env.settingComponents.push(this)}_createDocStub(key3,value){var _a8,_b5,_c3,_d2;{const paneName=findAttrFromParent(this.settingEl,"data-pane"),panelName=findAttrFromParent(this.settingEl,"data-panel");createStub("string"==typeof this.nameBuf?this.nameBuf:null!=(_b5=null==(_a8=this.nameBuf.textContent)?void 0:_a8.toString())?_b5:"",key3,"string"==typeof value?value:null!=(_d2=null==(_c3=value.textContent)?void 0:_c3.toString())?_d2:"",panelName,paneName)}}setDesc(desc){this.descBuf=desc;this._createDocStub("desc",desc);super.setDesc(desc);return this}setName(name){this.nameBuf=name;this._createDocStub("name",name);super.setName(name);return this}setAuto(key3,opt){this.autoWireSetting(key3,opt);return this}autoWireSetting(key3,opt){const conf=getConfig(key3);if(!conf)return;const name=`${conf.name}${statusDisplay(conf.status)}`;this.setName(name);conf.desc&&this.setDesc(conf.desc);this._createDocStub("key",key3);conf.obsolete&&this._createDocStub("is_obsolete","true");conf.level&&this._createDocStub("level",conf.level);this.holdValue=(null==opt?void 0:opt.holdValue)||this.holdValue;this.selfKey=key3;(conf.obsolete||(null==opt?void 0:opt.obsolete))&&this.settingEl.toggleClass("sls-setting-obsolete",!0);(null==opt?void 0:opt.onUpdate)&&this.addOnUpdate(opt.onUpdate);const stat=this._getComputedStatus();!1===stat.visibility&&this.settingEl.toggleClass("sls-setting-hidden",!stat.visibility);return conf}autoWireComponent(component2,conf,opt){this.placeHolderBuf=(null==conf?void 0:conf.placeHolder)||(null==opt?void 0:opt.placeHolder)||"";(null==conf?void 0:conf.level)==LEVEL_ADVANCED?this.settingEl.toggleClass("sls-setting-advanced",!0):(null==conf?void 0:conf.level)==LEVEL_POWER_USER&&this.settingEl.toggleClass("sls-setting-poweruser",!0);this.placeHolderBuf&&component2 instanceof import_obsidian.TextComponent&&component2.setPlaceholder(this.placeHolderBuf);(null==opt?void 0:opt.onUpdate)&&this.addOnUpdate(opt.onUpdate)}async commitValue(value){const key3=this.selfKey;if(void 0!==key3&&value!=_LiveSyncSetting.env.editingSettings[key3]){_LiveSyncSetting.env.editingSettings[key3]=value;this.holdValue||await _LiveSyncSetting.env.saveSettings([key3])}_LiveSyncSetting.env.requestUpdate()}autoWireText(key3,opt){const conf=this.autoWireSetting(key3,opt);this.addText(text2=>{this.autoWiredComponent=text2;const setValue=wrapMemo(value=>{text2.setValue(value)});this.invalidateValue=()=>setValue(`${_LiveSyncSetting.env.editingSettings[key3]}`);this.invalidateValue();text2.onChange(async value=>{await this.commitValue(value)});if(null==opt?void 0:opt.isPassword){text2.inputEl.setAttribute("type","password");this.hasPassword=!0}this.autoWireComponent(this.autoWiredComponent,conf,opt)});return this}autoWireTextArea(key3,opt){const conf=this.autoWireSetting(key3,opt);this.addTextArea(text2=>{this.autoWiredComponent=text2;const setValue=wrapMemo(value=>{text2.setValue(value)});this.invalidateValue=()=>setValue(`${_LiveSyncSetting.env.editingSettings[key3]}`);this.invalidateValue();text2.onChange(async value=>{await this.commitValue(value)});if(null==opt?void 0:opt.isPassword){text2.inputEl.setAttribute("type","password");this.hasPassword=!0}this.autoWireComponent(this.autoWiredComponent,conf,opt)});return this}autoWireNumeric(key3,opt){const conf=this.autoWireSetting(key3,opt);this.addText(text2=>{this.autoWiredComponent=text2;void 0!==opt.clampMin&&text2.inputEl.setAttribute("min",`${opt.clampMin}`);void 0!==opt.clampMax&&text2.inputEl.setAttribute("max",`${opt.clampMax}`);let lastError=!1;const setValue=wrapMemo(value=>{text2.setValue(value)});this.invalidateValue=()=>{lastError||setValue(`${_LiveSyncSetting.env.editingSettings[key3]}`)};this.invalidateValue();text2.onChange(async TextValue=>{var _a8,_b5;const value=Number(TextValue);let hasError=!1;isNaN(value)&&(hasError=!0);void 0!==opt.clampMax&&opt.clampMaxvalue&&(opt.acceptZero&&0==value||(hasError=!0));if(hasError){this.setTooltip($msg("liveSyncSetting.valueShouldBeInRange",{min:(null==(_a8=opt.clampMin)?void 0:_a8.toString())||"~",max:(null==(_b5=opt.clampMax)?void 0:_b5.toString())||"~"}));text2.inputEl.toggleClass("sls-item-invalid-value",!0);lastError=!0;return!1}lastError=!1;this.setTooltip("");text2.inputEl.toggleClass("sls-item-invalid-value",!1);await this.commitValue(value)});text2.inputEl.setAttr("type","number");this.autoWireComponent(this.autoWiredComponent,conf,opt)});return this}autoWireToggle(key3,opt){const conf=this.autoWireSetting(key3,opt);this.addToggle(toggle=>{this.autoWiredComponent=toggle;const setValue=wrapMemo(value=>{toggle.setValue((null==opt?void 0:opt.invert)?!value:value)});this.invalidateValue=()=>{var _a8;return setValue(null!=(_a8=_LiveSyncSetting.env.editingSettings[key3])&&_a8)};this.invalidateValue();toggle.onChange(async value=>{await this.commitValue((null==opt?void 0:opt.invert)?!value:value)});this.autoWireComponent(this.autoWiredComponent,conf,opt)});return this}autoWireDropDown(key3,opt){const conf=this.autoWireSetting(key3,opt);this.addDropdown(dropdown=>{this.autoWiredComponent=dropdown;const setValue=wrapMemo(value=>{dropdown.setValue(value)});dropdown.addOptions(opt.options);this.invalidateValue=()=>setValue(_LiveSyncSetting.env.editingSettings[key3]||"");this.invalidateValue();dropdown.onChange(async value=>{await this.commitValue(value)});this.autoWireComponent(this.autoWiredComponent,conf,opt)});return this}addApplyButton(keys3,text2){this.addButton(button=>{this.applyButtonComponent=button;this.watchDirtyKeys=unique([...keys3,...this.watchDirtyKeys]);button.setButtonText(null!=text2?text2:$msg("liveSyncSettings.btnApply"));button.onClick(async()=>{await _LiveSyncSetting.env.saveSettings(keys3);_LiveSyncSetting.env.reloadAllSettings()});_LiveSyncSetting.env.requestUpdate()});return this}addOnUpdate(func){this.updateHandlers.add(func);return this}_getComputedStatus(){let newConf={};for(const handler of this.updateHandlers)newConf={...newConf,...handler()};return newConf}_applyOnUpdateHandlers(){if(this.updateHandlers.size>0){const newConf=this._getComputedStatus(),keys3=Object.keys(newConf);for(const k2 of keys3)if(!(k2 in this.prevStatus)||this.prevStatus[k2]!=newConf[k2])switch(k2){case"visibility":this.settingEl.toggleClass("sls-setting-hidden",!newConf[k2]);this.prevStatus[k2]=newConf[k2];break;case"classes":break;case"disabled":this.setDisabled(newConf[k2]||!1);this.settingEl.toggleClass("sls-setting-disabled",newConf[k2]||!1);this.prevStatus[k2]=newConf[k2];break;case"isCta":{const component2=this.autoWiredComponent;component2 instanceof import_obsidian.ButtonComponent&&(newConf[k2]?component2.setCta():component2.removeCta());this.prevStatus[k2]=newConf[k2]}break;case"isWarning":{const component2=this.autoWiredComponent;component2 instanceof import_obsidian.ButtonComponent&&newConf[k2]&&component2.setWarning();this.prevStatus[k2]=newConf[k2]}break}}}_onUpdate(){var _a8,_b5;if(this.applyButtonComponent){const isDirty2=_LiveSyncSetting.env.isSomeDirty(this.watchDirtyKeys);this.applyButtonComponent.setDisabled(!isDirty2);isDirty2?this.applyButtonComponent.setCta():this.applyButtonComponent.removeCta()}this.selfKey&&!_LiveSyncSetting.env.isDirty(this.selfKey)&&this.invalidateValue&&this.invalidateValue();if(this.holdValue&&this.selfKey){const isDirty2=_LiveSyncSetting.env.isDirty(this.selfKey),alt=isDirty2?$msg("liveSyncSetting.originalValue",{value:String(null!=(_b5=null==(_a8=_LiveSyncSetting.env.initialSettings)?void 0:_a8[this.selfKey])?_b5:"")}):"";this.controlEl.toggleClass("sls-item-dirty",isDirty2);if(!this.hasPassword){this.nameEl.toggleClass("sls-item-dirty-help",isDirty2);this.setTooltip(alt,{delay:10,placement:"right"})}}this._applyOnUpdateHandlers()}};AutoClosableModal=class extends import_obsidian.Modal{_closeByUnload(){eventHub.off("plugin-unloaded",this._closeByUnload);this.close()}constructor(app){super(app);this._closeByUnload=this._closeByUnload.bind(this);eventHub.once("plugin-unloaded",this._closeByUnload)}onClose(){eventHub.off("plugin-unloaded",this._closeByUnload)}};InputStringDialog=class extends AutoClosableModal{constructor(app,title,key3,placeholder,isPassword,onSubmit){super(app);this.result=!1;this.isManuallyClosed=!1;this.isPassword=!1;this.onSubmit=onSubmit;this.title=title;this.placeholder=placeholder;this.key=key3;this.isPassword=isPassword}onOpen(){const{contentEl}=this;this.titleEl.setText(this.title);const formEl=contentEl.createDiv();new import_obsidian.Setting(formEl).setName(this.key).setClass(this.isPassword?"password-input":"normal-input").addText(text2=>text2.onChange(value=>{this.result=value}));new import_obsidian.Setting(formEl).addButton(btn=>btn.setButtonText("请提供插件名称,然后我会开始翻译工作。").setCta().onClick(()=>{this.isManuallyClosed=!0;this.close()})).addButton(btn=>btn.setButtonText("取消").setCta().onClick(()=>{this.close()}))}onClose(){super.onClose();const{contentEl}=this;contentEl.empty();this.isManuallyClosed?this.onSubmit(this.result):this.onSubmit(!1)}};PopoverSelectString=class extends import_obsidian.FuzzySuggestModal{constructor(app,note,placeholder,getItemsFun,callback){super(app);this.callback=()=>{};this.getItemsFun=()=>["yes","no"];this._app=app;this.setPlaceholder((null!=placeholder?placeholder:"y/n) ")+note);getItemsFun&&(this.getItemsFun=getItemsFun);this.callback=callback}getItems(){return this.getItemsFun()}getItemText(item){return item}onChooseItem(item,evt){var _a8;null==(_a8=this.callback)||_a8.call(this,item);this.callback=void 0}onClose(){setTimeout(()=>{if(this.callback){this.callback("");this.callback=void 0}},100)}};MessageBox=class extends AutoClosableModal{constructor(plugin3,title,contentMd,buttons,defaultAction,timeout,wideButton,onSubmit){super(plugin3.app);this.result=!1;this.isManuallyClosed=!1;this.timer=void 0;this.plugin=plugin3;this.title=title;this.contentMd=contentMd;this.buttons=buttons;this.onSubmit=onSubmit;this.defaultAction=defaultAction;this.timeout=timeout;this.wideButton=wideButton;this.timeout&&(this.timer=setInterval(()=>{var _a8,_b5;if(void 0!==this.timeout){this.timeout--;if(this.timeout<0){if(this.timer){clearInterval(this.timer);null==(_a8=this.defaultButtonComponent)||_a8.setButtonText(`${defaultAction}`);this.timer=void 0}this.result=defaultAction;this.isManuallyClosed=!0;this.close()}else null==(_b5=this.defaultButtonComponent)||_b5.setButtonText(`( ${this.timeout} ) ${defaultAction}`)}},1e3))}onOpen(){const{contentEl}=this;this.titleEl.setText(this.title);const div=contentEl.createDiv();div.style.userSelect="text";div.style.webkitUserSelect="text";import_obsidian.MarkdownRenderer.render(this.plugin.app,this.contentMd,div,"/",this.plugin);const buttonSetting=new import_obsidian.Setting(contentEl),labelWrapper=contentEl.createDiv();labelWrapper.addClass("sls-dialogue-note-wrapper");labelWrapper.createEl("label",{text:"To stop the countdown, tap anywhere on the dialogue"}).addClass("sls-dialogue-note-countdown");if(!this.timeout||!this.timer){labelWrapper.empty();labelWrapper.style.display="none"}buttonSetting.infoEl.style.display="none";buttonSetting.controlEl.style.flexWrap="wrap";if(this.wideButton){buttonSetting.controlEl.style.flexDirection="column";buttonSetting.controlEl.style.alignItems="center";buttonSetting.controlEl.style.justifyContent="center";buttonSetting.controlEl.style.flexGrow="1"}contentEl.addEventListener("click",()=>{var _a8;if(this.timer){labelWrapper.empty();labelWrapper.style.display="none";clearInterval(this.timer);this.timer=void 0;null==(_a8=this.defaultButtonComponent)||_a8.setButtonText(`${this.defaultAction}`)}});for(const button of this.buttons)buttonSetting.addButton(btn=>{btn.setButtonText(button).onClick(()=>{this.isManuallyClosed=!0;this.result=button;if(this.timer){clearInterval(this.timer);this.timer=void 0}this.close()});if(button==this.defaultAction){this.defaultButtonComponent=btn;btn.setCta()}if(this.wideButton){btn.buttonEl.style.flexGrow="1";btn.buttonEl.style.width="100%"}return btn})}onClose(){super.onClose();const{contentEl}=this;contentEl.empty();if(this.timer){clearInterval(this.timer);this.timer=void 0}this.isManuallyClosed?this.onSubmit(this.result):this.onSubmit(!1)}};askYesNo=(app,message)=>new Promise(res2=>{new PopoverSelectString(app,message,void 0,void 0,result=>res2(result)).open()});askSelectString=(app,message,items)=>{const getItemsFun=()=>items;return new Promise(res2=>{new PopoverSelectString(app,message,"",getItemsFun,result=>res2(result)).open()})};askString=(app,title,key3,placeholder,isPassword=!1)=>new Promise(res2=>{new InputStringDialog(app,title,key3,placeholder,isPassword,result=>res2(result)).open()});getHttpHandlerExtensionConfiguration=runtimeConfig=>({setHttpHandler(handler){runtimeConfig.httpHandler=handler},httpHandler:()=>runtimeConfig.httpHandler,updateHttpClientConfig(key3,value){var _a8;null==(_a8=runtimeConfig.httpHandler)||_a8.updateHttpClientConfig(key3,value)},httpHandlerConfigs:()=>runtimeConfig.httpHandler.httpHandlerConfigs()});resolveHttpHandlerRuntimeConfig=httpHandlerExtensionConfiguration=>({httpHandler:httpHandlerExtensionConfiguration.httpHandler()});(function(EndpointURLScheme2){EndpointURLScheme2.HTTP="http";EndpointURLScheme2.HTTPS="https"})(EndpointURLScheme||(EndpointURLScheme={}));(function(AlgorithmId2){AlgorithmId2.MD5="md5";AlgorithmId2.CRC32="crc32";AlgorithmId2.CRC32C="crc32c";AlgorithmId2.SHA1="sha1";AlgorithmId2.SHA256="sha256"})(AlgorithmId||(AlgorithmId={}));SMITHY_CONTEXT_KEY="__smithy_context";HttpRequest=class _HttpRequest{constructor(options){__publicField(this,"method");__publicField(this,"protocol");__publicField(this,"hostname");__publicField(this,"port");__publicField(this,"path");__publicField(this,"query");__publicField(this,"headers");__publicField(this,"username");__publicField(this,"password");__publicField(this,"fragment");__publicField(this,"body");this.method=options.method||"GET";this.hostname=options.hostname||"localhost";this.port=options.port;this.query=options.query||{};this.headers=options.headers||{};this.body=options.body;this.protocol=options.protocol?":"!==options.protocol.slice(-1)?`${options.protocol}:`:options.protocol:"https:";this.path=options.path?"/"!==options.path.charAt(0)?`/${options.path}`:options.path:"/";this.username=options.username;this.password=options.password;this.fragment=options.fragment}static clone(request2){const cloned=new _HttpRequest({...request2,headers:{...request2.headers}});cloned.query&&(cloned.query=cloneQuery(cloned.query));return cloned}static isInstance(request2){if(!request2)return!1;const req=request2;return"method"in req&&"protocol"in req&&"hostname"in req&&"path"in req&&"object"==typeof req.query&&"object"==typeof req.headers}clone(){return _HttpRequest.clone(this)}};HttpResponse=class{constructor(options){__publicField(this,"statusCode");__publicField(this,"reason");__publicField(this,"headers");__publicField(this,"body");this.statusCode=options.statusCode;this.reason=options.reason;this.headers=options.headers||{};this.body=options.body}static isInstance(response){if(!response)return!1;const resp=response;return"number"==typeof resp.statusCode&&"object"==typeof resp.headers}};addExpectContinueMiddlewareOptions={step:"build",tags:["SET_EXPECT_HEADER","EXPECT_HEADER"],name:"addExpectContinueMiddleware",override:!0};getAddExpectContinuePlugin=options=>({applyToStack:clientStack=>{clientStack.add(addExpectContinueMiddleware(options),addExpectContinueMiddlewareOptions)}});(function(ChecksumAlgorithm2){ChecksumAlgorithm2.MD5="MD5";ChecksumAlgorithm2.CRC32="CRC32";ChecksumAlgorithm2.CRC32C="CRC32C";ChecksumAlgorithm2.CRC64NVME="CRC64NVME";ChecksumAlgorithm2.SHA1="SHA1";ChecksumAlgorithm2.SHA256="SHA256"})(ChecksumAlgorithm||(ChecksumAlgorithm={}));(function(ChecksumLocation2){ChecksumLocation2.HEADER="header";ChecksumLocation2.TRAILER="trailer"})(ChecksumLocation||(ChecksumLocation={}));DEFAULT_CHECKSUM_ALGORITHM=ChecksumAlgorithm.CRC32;getDateHeader=response=>{var _a8,_b5,_c3;return HttpResponse.isInstance(response)?null!=(_c3=null==(_a8=response.headers)?void 0:_a8.date)?_c3:null==(_b5=response.headers)?void 0:_b5.Date:void 0};getSkewCorrectedDate=systemClockOffset=>new Date(Date.now()+systemClockOffset);isClockSkewed=(clockTime,systemClockOffset)=>Math.abs(getSkewCorrectedDate(systemClockOffset).getTime()-clockTime)>=3e5;getUpdatedSystemClockOffset=(clockTime,currentSystemClockOffset)=>{const clockTimeInMs=Date.parse(clockTime);return isClockSkewed(clockTimeInMs,currentSystemClockOffset)?clockTimeInMs-Date.now():currentSystemClockOffset};throwSigningPropertyError=(name,property)=>{if(!property)throw new Error(`Property \`${name}\` is not resolved for AWS SDK SigV4Auth`);return property};validateSigningProperties=async signingProperties=>{var _a8,_b5,_c3;const context2=throwSigningPropertyError("context",signingProperties.context),config=throwSigningPropertyError("config",signingProperties.config),authScheme=null==(_c3=null==(_b5=null==(_a8=context2.endpointV2)?void 0:_a8.properties)?void 0:_b5.authSchemes)?void 0:_c3[0],signerFunction=throwSigningPropertyError("signer",config.signer);return{config,signer:await signerFunction(authScheme),signingRegion:null==signingProperties?void 0:signingProperties.signingRegion,signingRegionSet:null==signingProperties?void 0:signingProperties.signingRegionSet,signingName:null==signingProperties?void 0:signingProperties.signingName}};AwsSdkSigV4Signer=class{async sign(httpRequest,identity,signingProperties){var _a8,_b5,_c3,_d2;if(!HttpRequest.isInstance(httpRequest))throw new Error("The request is not an instance of `HttpRequest` and cannot be signed");const validatedProps=await validateSigningProperties(signingProperties),{config,signer}=validatedProps;let{signingRegion,signingName}=validatedProps;const handlerExecutionContext=signingProperties.context;if(null!=(_b5=null==(_a8=null==handlerExecutionContext?void 0:handlerExecutionContext.authSchemes)?void 0:_a8.length)&&_b5){const[first,second]=handlerExecutionContext.authSchemes;if("sigv4a"===(null==first?void 0:first.name)&&"sigv4"===(null==second?void 0:second.name)){signingRegion=null!=(_c3=null==second?void 0:second.signingRegion)?_c3:signingRegion;signingName=null!=(_d2=null==second?void 0:second.signingName)?_d2:signingName}}return await signer.sign(httpRequest,{signingDate:getSkewCorrectedDate(config.systemClockOffset),signingRegion,signingService:signingName})}errorHandler(signingProperties){return error=>{var _a8;const serverTime=null!=(_a8=error.ServerTime)?_a8:getDateHeader(error.$response);if(serverTime){const config=throwSigningPropertyError("config",signingProperties.config),initialSystemClockOffset=config.systemClockOffset;config.systemClockOffset=getUpdatedSystemClockOffset(serverTime,config.systemClockOffset);config.systemClockOffset!==initialSystemClockOffset&&error.$metadata&&(error.$metadata.clockSkewCorrected=!0)}throw error}}successHandler(httpResponse,signingProperties){const dateHeader=getDateHeader(httpResponse);if(dateHeader){const config=throwSigningPropertyError("config",signingProperties.config);config.systemClockOffset=getUpdatedSystemClockOffset(dateHeader,config.systemClockOffset)}}};AwsSdkSigV4ASigner=class extends AwsSdkSigV4Signer{async sign(httpRequest,identity,signingProperties){var _a8,_b5;if(!HttpRequest.isInstance(httpRequest))throw new Error("The request is not an instance of `HttpRequest` and cannot be signed");const{config,signer,signingRegion,signingRegionSet,signingName}=await validateSigningProperties(signingProperties),configResolvedSigningRegionSet=await(null==(_a8=config.sigv4aSigningRegionSet)?void 0:_a8.call(config)),multiRegionOverride=(null!=(_b5=null!=configResolvedSigningRegionSet?configResolvedSigningRegionSet:signingRegionSet)?_b5:[signingRegion]).join(",");return await signer.sign(httpRequest,{signingDate:getSkewCorrectedDate(config.systemClockOffset),signingRegion:multiRegionOverride,signingService:signingName})}};getSmithyContext=context2=>context2.__smithy_context||(context2.__smithy_context={});normalizeProvider=input=>{if("function"==typeof input)return input;const promisified=Promise.resolve(input);return()=>promisified};resolveAuthOptions=(candidateAuthOptions,authSchemePreference)=>{if(!authSchemePreference||0===authSchemePreference.length)return candidateAuthOptions;const preferredAuthOptions=[];for(const preferredSchemeName of authSchemePreference)for(const candidateAuthOption of candidateAuthOptions)candidateAuthOption.schemeId.split("#")[1]===preferredSchemeName&&preferredAuthOptions.push(candidateAuthOption);for(const candidateAuthOption of candidateAuthOptions)preferredAuthOptions.find(({schemeId})=>schemeId===candidateAuthOption.schemeId)||preferredAuthOptions.push(candidateAuthOption);return preferredAuthOptions};httpAuthSchemeMiddleware=(config,mwOptions)=>(next2,context2)=>async args=>{var _a8;const options=config.httpAuthSchemeProvider(await mwOptions.httpAuthSchemeParametersProvider(config,context2,args.input)),authSchemePreference=config.authSchemePreference?await config.authSchemePreference():[],resolvedOptions=resolveAuthOptions(options,authSchemePreference),authSchemes=convertHttpAuthSchemesToMap(config.httpAuthSchemes),smithyContext=getSmithyContext(context2),failureReasons=[];for(const option of resolvedOptions){const scheme=authSchemes.get(option.schemeId);if(!scheme){failureReasons.push(`HttpAuthScheme \`${option.schemeId}\` was not enabled for this service.`);continue}const identityProvider=scheme.identityProvider(await mwOptions.identityProviderConfigProvider(config));if(!identityProvider){failureReasons.push(`HttpAuthScheme \`${option.schemeId}\` did not have an IdentityProvider configured.`);continue}const{identityProperties={},signingProperties={}}=(null==(_a8=option.propertiesExtractor)?void 0:_a8.call(option,config,context2))||{};option.identityProperties=Object.assign(option.identityProperties||{},identityProperties);option.signingProperties=Object.assign(option.signingProperties||{},signingProperties);smithyContext.selectedHttpAuthScheme={httpAuthOption:option,identity:await identityProvider(option.identityProperties),signer:scheme.signer};break}if(!smithyContext.selectedHttpAuthScheme)throw new Error(failureReasons.join("\n"));return next2(args)};httpAuthSchemeEndpointRuleSetMiddlewareOptions={step:"serialize",tags:["HTTP_AUTH_SCHEME"],name:"httpAuthSchemeMiddleware",override:!0,relation:"before",toMiddleware:"endpointV2Middleware"};getHttpAuthSchemeEndpointRuleSetPlugin=(config,{httpAuthSchemeParametersProvider,identityProviderConfigProvider})=>({applyToStack:clientStack=>{clientStack.addRelativeTo(httpAuthSchemeMiddleware(config,{httpAuthSchemeParametersProvider,identityProviderConfigProvider}),httpAuthSchemeEndpointRuleSetMiddlewareOptions)}});defaultErrorHandler=signingProperties=>error=>{throw error};defaultSuccessHandler=(httpResponse,signingProperties)=>{};httpSigningMiddleware=config=>(next2,context2)=>async args=>{if(!HttpRequest.isInstance(args.request))return next2(args);const scheme=getSmithyContext(context2).selectedHttpAuthScheme;if(!scheme)throw new Error("No HttpAuthScheme was selected: unable to sign request");const{httpAuthOption:{signingProperties={}},identity,signer}=scheme,output=await next2({...args,request:await signer.sign(args.request,identity,signingProperties)}).catch((signer.errorHandler||defaultErrorHandler)(signingProperties));(signer.successHandler||defaultSuccessHandler)(output.response,signingProperties);return output};httpSigningMiddlewareOptions={step:"finalizeRequest",tags:["HTTP_SIGNING"],name:"httpSigningMiddleware",aliases:["apiKeyMiddleware","tokenMiddleware","awsAuthMiddleware"],override:!0,relation:"after",toMiddleware:"retryMiddleware"};getHttpSigningPlugin=config=>({applyToStack:clientStack=>{clientStack.addRelativeTo(httpSigningMiddleware(),httpSigningMiddlewareOptions)}});normalizeProvider2=input=>{if("function"==typeof input)return input;const promisified=Promise.resolve(input);return()=>promisified};makePagedClientRequest=async(CommandCtor,client,input,withCommand=_=>_,...args)=>{var _a8;let command=new CommandCtor(input);command=null!=(_a8=withCommand(command))?_a8:command;return await client.send(command,...args)};get3=(fromObject,path2)=>{let cursor=fromObject;const pathComponents=path2.split(".");for(const step of pathComponents){if(!cursor||"object"!=typeof cursor)return;cursor=cursor[step]}return cursor};chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";alphabetByEncoding=Object.entries(chars).reduce((acc,[i2,c3])=>{acc[c3]=Number(i2);return acc},{});alphabetByValue=chars.split("");bitsPerLetter=6;bitsPerByte=8;maxLetterValue=63;fromBase64=input=>{let totalByteLength=input.length/4*3;"=="===input.slice(-2)?totalByteLength-=2:"="===input.slice(-1)&&totalByteLength--;const out=new ArrayBuffer(totalByteLength),dataView=new DataView(out);for(let i2=0;i2>=bitsPerLetter;const chunkOffset=i2/4*3;bits2>>=bitLength%bitsPerByte;const byteLength=Math.floor(bitLength/bitsPerByte);for(let k2=0;k2>offset)}}return new Uint8Array(out)};init_dist_es();init_dist_es();Uint8ArrayBlobAdapter=class _Uint8ArrayBlobAdapter extends Uint8Array{static fromString(source2,encoding="utf-8"){if("string"==typeof source2)return"base64"===encoding?_Uint8ArrayBlobAdapter.mutate(fromBase64(source2)):_Uint8ArrayBlobAdapter.mutate(fromUtf8(source2));throw new Error(`Unsupported conversion from ${typeof source2} to Uint8ArrayBlobAdapter.`)}static mutate(source2){Object.setPrototypeOf(source2,_Uint8ArrayBlobAdapter.prototype);return source2}transformToString(encoding="utf-8"){return"base64"===encoding?toBase64(this):toUtf8(this)}};ReadableStreamRef="function"==typeof ReadableStream?ReadableStream:function(){};ChecksumStream=class extends ReadableStreamRef{};isReadableStream=stream=>{var _a8;return"function"==typeof ReadableStream&&((null==(_a8=null==stream?void 0:stream.constructor)?void 0:_a8.name)===ReadableStream.name||stream instanceof ReadableStream)};createChecksumStream=({expectedChecksum,checksum,source:source2,checksumSourceLocation,base64Encoder})=>{var _a8,_b5;if(!isReadableStream(source2))throw new Error(`@smithy/util-stream: unsupported source type ${null!=(_b5=null==(_a8=null==source2?void 0:source2.constructor)?void 0:_a8.name)?_b5:source2} in ChecksumStream.`);const encoder2=null!=base64Encoder?base64Encoder:toBase64;if("function"!=typeof TransformStream)throw new Error("@smithy/util-stream: unable to instantiate ChecksumStream because API unavailable: ReadableStream/TransformStream.");const transform2=new TransformStream({start(){},async transform(chunk,controller){checksum.update(chunk);controller.enqueue(chunk)},async flush(controller){const digest=await checksum.digest(),received=encoder2(digest);if(expectedChecksum!==received){const error=new Error(`Checksum mismatch: expected "${expectedChecksum}" but received "${received}" in response header "${checksumSourceLocation}".`);controller.error(error)}else controller.terminate()}});source2.pipeThrough(transform2);const readable2=transform2.readable;Object.setPrototypeOf(readable2,ChecksumStream.prototype);return readable2};ByteArrayCollector=class{constructor(allocByteArray){__publicField(this,"allocByteArray");__publicField(this,"byteLength",0);__publicField(this,"byteArrays",[]);this.allocByteArray=allocByteArray}push(byteArray){this.byteArrays.push(byteArray);this.byteLength+=byteArray.byteLength}flush(){if(1===this.byteArrays.length){const bytes=this.byteArrays[0];this.reset();return bytes}const aggregation=this.allocByteArray(this.byteLength);let cursor=0;for(let i2=0;i2new Uint8Array(size2))];let mode=-1;const pull=async controller=>{const{value,done}=await reader.read(),chunk=value;if(done){if(-1!==mode){const remainder=flush(buffers,mode);sizeOf(remainder)>0&&controller.enqueue(remainder)}controller.close()}else{const chunkMode=modeOf(chunk,!1);if(mode!==chunkMode){mode>=0&&controller.enqueue(flush(buffers,mode));mode=chunkMode}if(-1===mode){controller.enqueue(chunk);return}const chunkSize2=sizeOf(chunk);bytesSeen+=chunkSize2;const bufferSize=sizeOf(buffers[mode]);if(chunkSize2>=size&&0===bufferSize)controller.enqueue(chunk);else{const newSize=merge(buffers,mode,chunk);if(!streamBufferingLoggedWarning&&bytesSeen>2*size){streamBufferingLoggedWarning=!0;null==logger2||logger2.warn(`@smithy/util-stream - stream chunk size ${chunkSize2} is below threshold of ${size}, automatically buffering.`)}newSize>=size?controller.enqueue(flush(buffers,mode)):await pull(controller)}}};return new ReadableStream({pull})};getAwsChunkedEncodingStream=(readableStream,options)=>{const{base64Encoder,bodyLengthChecker,checksumAlgorithmFn,checksumLocationName,streamHasher}=options,checksumRequired=void 0!==base64Encoder&&void 0!==bodyLengthChecker&&void 0!==checksumAlgorithmFn&&void 0!==checksumLocationName&&void 0!==streamHasher,digest=checksumRequired?streamHasher(checksumAlgorithmFn,readableStream):void 0,reader=readableStream.getReader();return new ReadableStream({async pull(controller){const{value,done}=await reader.read();if(done){controller.enqueue("0\r\n");if(checksumRequired){const checksum=base64Encoder(await digest);controller.enqueue(`${checksumLocationName}:${checksum}\r\n`);controller.enqueue("\r\n")}controller.close()}else controller.enqueue(`${(bodyLengthChecker(value)||0).toString(16)}\r\n${value}\r\n`)}})};escapeUri=uri=>encodeURIComponent(uri).replace(/[!'()*]/g,hexEncode);hexEncode=c3=>`%${c3.charCodeAt(0).toString(16).toUpperCase()}`;keepAliveSupport={supported:void 0};FetchHttpHandler=class _FetchHttpHandler{constructor(options){__publicField(this,"config");__publicField(this,"configProvider");if("function"==typeof options)this.configProvider=options().then(opts=>opts||{});else{this.config=null!=options?options:{};this.configProvider=Promise.resolve(this.config)}void 0===keepAliveSupport.supported&&(keepAliveSupport.supported=Boolean("undefined"!=typeof Request&&"keepalive"in createRequest("https://[::1]")))}static create(instanceOrOptions){return"function"==typeof(null==instanceOrOptions?void 0:instanceOrOptions.handle)?instanceOrOptions:new _FetchHttpHandler(instanceOrOptions)}destroy(){}async handle(request2,{abortSignal,requestTimeout:requestTimeout2}={}){var _a8,_b5,_c3;this.config||(this.config=await this.configProvider);const requestTimeoutInMs=null!=requestTimeout2?requestTimeout2:this.config.requestTimeout,keepAlive=!0===this.config.keepAlive,credentials=this.config.credentials;if(null==abortSignal?void 0:abortSignal.aborted){const abortError=buildAbortError(abortSignal);return Promise.reject(abortError)}let path2=request2.path;const queryString=buildQueryString(request2.query||{});queryString&&(path2+=`?${queryString}`);request2.fragment&&(path2+=`#${request2.fragment}`);let auth="";null==request2.username&&null==request2.password||(auth=`${null!=(_a8=request2.username)?_a8:""}:${null!=(_b5=request2.password)?_b5:""}@`);const{port,method}=request2,url=`${request2.protocol}//${auth}${request2.hostname}${port?`:${port}`:""}${path2}`,body="GET"===method||"HEAD"===method?void 0:request2.body,requestOptions={body,headers:new Headers(request2.headers),method,credentials};(null==(_c3=this.config)?void 0:_c3.cache)&&(requestOptions.cache=this.config.cache);body&&(requestOptions.duplex="half");"undefined"!=typeof AbortController&&(requestOptions.signal=abortSignal);keepAliveSupport.supported&&(requestOptions.keepalive=keepAlive);"function"==typeof this.config.requestInit&&Object.assign(requestOptions,this.config.requestInit(request2));let removeSignalEventListener=()=>{};const fetchRequest=createRequest(url,requestOptions),raceOfPromises=[fetch(fetchRequest).then(response=>{const fetchHeaders=response.headers,transformedHeaders={};for(const pair of fetchHeaders.entries())transformedHeaders[pair[0]]=pair[1];return null!=response.body?{response:new HttpResponse({headers:transformedHeaders,reason:response.statusText,statusCode:response.status,body:response.body})}:response.blob().then(body2=>({response:new HttpResponse({headers:transformedHeaders,reason:response.statusText,statusCode:response.status,body:body2})}))}),requestTimeout(requestTimeoutInMs)];abortSignal&&raceOfPromises.push(new Promise((resolve,reject)=>{const onAbort=()=>{const abortError=buildAbortError(abortSignal);reject(abortError)};if("function"==typeof abortSignal.addEventListener){const signal=abortSignal;signal.addEventListener("abort",onAbort,{once:!0});removeSignalEventListener=()=>signal.removeEventListener("abort",onAbort)}else abortSignal.onabort=onAbort}));return Promise.race(raceOfPromises).finally(removeSignalEventListener)}updateHttpClientConfig(key3,value){this.config=void 0;this.configProvider=this.configProvider.then(config=>{config[key3]=value;return config})}httpHandlerConfigs(){var _a8;return null!=(_a8=this.config)?_a8:{}}};streamCollector=async stream=>{var _a8;return"function"==typeof Blob&&stream instanceof Blob||"Blob"===(null==(_a8=stream.constructor)?void 0:_a8.name)?void 0!==Blob.prototype.arrayBuffer?new Uint8Array(await stream.arrayBuffer()):collectBlob(stream):collectStream(stream)};SHORT_TO_HEX={};HEX_TO_SHORT={};for(let i2=0;i2<256;i2++){let encodedByte=i2.toString(16).toLowerCase();1===encodedByte.length&&(encodedByte=`0${encodedByte}`);SHORT_TO_HEX[i2]=encodedByte;HEX_TO_SHORT[encodedByte]=i2}init_dist_es();sdkStreamMixin=stream=>{var _a8,_b5;if(!isBlobInstance(stream)&&!isReadableStream(stream)){const name=(null==(_b5=null==(_a8=null==stream?void 0:stream.__proto__)?void 0:_a8.constructor)?void 0:_b5.name)||stream;throw new Error(`Unexpected stream implementation, expect Blob or ReadableStream, got ${name}`)}let transformed=!1;const transformToByteArray=async()=>{if(transformed)throw new Error("The stream has already been transformed.");transformed=!0;return await streamCollector(stream)},blobToWebStream=blob=>{if("function"!=typeof blob.stream)throw new Error("Cannot transform payload Blob to web stream. Please make sure the Blob.stream() is polyfilled.\nIf you are using React Native, this API is not yet supported, see: https://react-native.canny.io/feature-requests/p/fetch-streaming-body");return blob.stream()};return Object.assign(stream,{transformToByteArray,transformToString:async encoding=>{const buf=await transformToByteArray();if("base64"===encoding)return toBase64(buf);if("hex"===encoding)return toHex2(buf);if(void 0===encoding||"utf8"===encoding||"utf-8"===encoding)return toUtf8(buf);if("function"==typeof TextDecoder)return new TextDecoder(encoding).decode(buf);throw new Error("TextDecoder is not available, please make sure polyfill is provided.")},transformToWebStream:()=>{if(transformed)throw new Error("The stream has already been transformed.");transformed=!0;if(isBlobInstance(stream))return blobToWebStream(stream);if(isReadableStream(stream))return stream;throw new Error(`Cannot transform payload to web stream, got ${stream}`)}})};isBlobInstance=stream=>"function"==typeof Blob&&stream instanceof Blob;collectBody=async(streamBody=new Uint8Array,context2)=>{if(streamBody instanceof Uint8Array)return Uint8ArrayBlobAdapter.mutate(streamBody);if(!streamBody)return Uint8ArrayBlobAdapter.mutate(new Uint8Array);const fromContext=context2.streamCollector(streamBody);return Uint8ArrayBlobAdapter.mutate(await fromContext)};deref=schemaRef=>"function"==typeof schemaRef?schemaRef():schemaRef;operation=(namespace,name,traits,input,output)=>({name,namespace,traits,input,output});schemaDeserializationMiddleware=config=>(next2,context2)=>async args=>{var _a8,_b5,_c3,_d2;const{response}=await next2(args),{operationSchema}=getSmithyContext(context2),[,ns,n3,t9,i2,o2]=null!=operationSchema?operationSchema:[];try{return{response,output:await config.protocol.deserializeResponse(operation(ns,n3,t9,i2,o2),{...config,...context2},response)}}catch(error){Object.defineProperty(error,"$response",{value:response,enumerable:!1,writable:!1,configurable:!1});if(!("$metadata"in error)){const hint="Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object.";try{error.message+="\n "+hint}catch(e3){context2.logger&&"NoOpLogger"!==(null==(_b5=null==(_a8=context2.logger)?void 0:_a8.constructor)?void 0:_b5.name)?null==(_d2=null==(_c3=context2.logger)?void 0:_c3.warn)||_d2.call(_c3,hint):console.warn(hint)}void 0!==error.$responseBodyText&&error.$response&&(error.$response.body=error.$responseBodyText);try{if(HttpResponse.isInstance(response)){const{headers={}}=response,headerEntries=Object.entries(headers);error.$metadata={httpStatusCode:response.statusCode,requestId:findHeader(/^x-[\w-]+-request-?id$/,headerEntries),extendedRequestId:findHeader(/^x-[\w-]+-id-2$/,headerEntries),cfId:findHeader(/^x-[\w-]+-cf-id$/,headerEntries)}}}catch(e3){}}throw error}};findHeader=(pattern,headers)=>(headers.find(([k2])=>k2.match(pattern))||[void 0,void 0])[1];parseUrl=url=>{if("string"==typeof url)return parseUrl(new URL(url));const{hostname,pathname,port,protocol,search}=url;let query3;search&&(query3=parseQueryString(search));return{hostname,port:port?parseInt(port):void 0,protocol,path:pathname,query:query3}};toEndpointV1=endpoint=>{if("object"==typeof endpoint){if("url"in endpoint){const v1Endpoint=parseUrl(endpoint.url);if(endpoint.headers){v1Endpoint.headers={};for(const[name,values2]of Object.entries(endpoint.headers))v1Endpoint.headers[name.toLowerCase()]=values2.join(", ")}return v1Endpoint}return endpoint}return parseUrl(endpoint)};schemaSerializationMiddleware=config=>(next2,context2)=>async args=>{const{operationSchema}=getSmithyContext(context2),[,ns,n3,t9,i2,o2]=null!=operationSchema?operationSchema:[],endpoint=context2.endpointV2?async()=>toEndpointV1(context2.endpointV2):config.endpoint,request2=await config.protocol.serializeRequest(operation(ns,n3,t9,i2,o2),args.input,{...config,...context2,endpoint});return next2({...args,request:request2})};deserializerMiddlewareOption={name:"deserializerMiddleware",step:"deserialize",tags:["DESERIALIZER"],override:!0};serializerMiddlewareOption={name:"serializerMiddleware",step:"serialize",tags:["SERIALIZER"],override:!0};traitsCache=[];anno_it=Symbol.for("@smithy/nor-struct-it"),anno_ns=Symbol.for("@smithy/ns");simpleSchemaCacheN=[];simpleSchemaCacheS={};_NormalizedSchema=class _NormalizedSchema{constructor(ref,memberName){__publicField(this,"ref");__publicField(this,"memberName");__publicField(this,"symbol",_NormalizedSchema.symbol);__publicField(this,"name");__publicField(this,"schema");__publicField(this,"_isMemberSchema");__publicField(this,"traits");__publicField(this,"memberTraits");__publicField(this,"normalizedTraits");var _a8;this.ref=ref;this.memberName=memberName;const traitStack=[];let _ref=ref,schema=ref;this._isMemberSchema=!1;for(;isMemberSchema(_ref);){traitStack.push(_ref[1]);_ref=_ref[0];schema=deref(_ref);this._isMemberSchema=!0}if(traitStack.length>0){this.memberTraits={};for(let i2=traitStack.length-1;i2>=0;--i2){const traitSet=traitStack[i2];Object.assign(this.memberTraits,translateTraits(traitSet))}}else this.memberTraits=0;if(schema instanceof _NormalizedSchema){const computedMemberTraits=this.memberTraits;Object.assign(this,schema);this.memberTraits=Object.assign({},computedMemberTraits,schema.getMemberTraits(),this.getMemberTraits());this.normalizedTraits=void 0;this.memberName=null!=memberName?memberName:schema.memberName;return}this.schema=deref(schema);if(isStaticSchema(this.schema)){this.name=`${this.schema[1]}#${this.schema[2]}`;this.traits=this.schema[3]}else{this.name=null!=(_a8=this.memberName)?_a8:String(schema);this.traits=0}if(this._isMemberSchema&&!memberName)throw new Error(`@smithy/core/schema - NormalizedSchema member init ${this.getName(!0)} missing member name.`)}static[Symbol.hasInstance](lhs){const isPrototype=this.prototype.isPrototypeOf(lhs);return isPrototype||"object"!=typeof lhs||null===lhs?isPrototype:lhs.symbol===this.symbol}static of(ref){const keyAble="function"==typeof ref||"object"==typeof ref&&null!==ref;if("number"==typeof ref){if(simpleSchemaCacheN[ref])return simpleSchemaCacheN[ref]}else if("string"==typeof ref){if(simpleSchemaCacheS[ref])return simpleSchemaCacheS[ref]}else if(keyAble&&ref[anno_ns])return ref[anno_ns];const sc=deref(ref);if(sc instanceof _NormalizedSchema)return sc;if(isMemberSchema(sc)){const[ns2,traits]=sc;if(ns2 instanceof _NormalizedSchema){Object.assign(ns2.getMergedTraits(),translateTraits(traits));return ns2}throw new Error(`@smithy/core/schema - may not init unwrapped member schema=${JSON.stringify(ref,null,2)}.`)}const ns=new _NormalizedSchema(sc);return keyAble?ref[anno_ns]=ns:"string"==typeof sc?simpleSchemaCacheS[sc]=ns:"number"==typeof sc?simpleSchemaCacheN[sc]=ns:ns}getSchema(){const sc=this.schema;return Array.isArray(sc)&&0===sc[0]?sc[4]:sc}getName(withNamespace=!1){const{name}=this;return!withNamespace&&name&&name.includes("#")?name.split("#")[1]:name||void 0}getMemberName(){return this.memberName}isMemberSchema(){return this._isMemberSchema}isListSchema(){const sc=this.getSchema();return"number"==typeof sc?sc>=64&&sc<128:1===sc[0]}isMapSchema(){const sc=this.getSchema();return"number"==typeof sc?sc>=128&&sc<=255:2===sc[0]}isStructSchema(){const sc=this.getSchema();if("object"!=typeof sc)return!1;const id=sc[0];return 3===id||-3===id||4===id}isUnionSchema(){const sc=this.getSchema();return"object"==typeof sc&&4===sc[0]}isBlobSchema(){const sc=this.getSchema();return 21===sc||42===sc}isTimestampSchema(){const sc=this.getSchema();return"number"==typeof sc&&sc>=4&&sc<=7}isUnitSchema(){return"unit"===this.getSchema()}isDocumentSchema(){return 15===this.getSchema()}isStringSchema(){return 0===this.getSchema()}isBooleanSchema(){return 2===this.getSchema()}isNumericSchema(){return 1===this.getSchema()}isBigIntegerSchema(){return 17===this.getSchema()}isBigDecimalSchema(){return 19===this.getSchema()}isStreaming(){const{streaming}=this.getMergedTraits();return!!streaming||42===this.getSchema()}isIdempotencyToken(){return!!this.getMergedTraits().idempotencyToken}getMergedTraits(){var _a8;return null!=(_a8=this.normalizedTraits)?_a8:this.normalizedTraits={...this.getOwnTraits(),...this.getMemberTraits()}}getMemberTraits(){return translateTraits(this.memberTraits)}getOwnTraits(){return translateTraits(this.traits)}getKeySchema(){var _a8;const[isDoc,isMap]=[this.isDocumentSchema(),this.isMapSchema()];if(!isDoc&&!isMap)throw new Error(`@smithy/core/schema - cannot get key for non-map: ${this.getName(!0)}`);const schema=this.getSchema();return member([isDoc?15:null!=(_a8=schema[4])?_a8:0,0],"key")}getValueSchema(){const sc=this.getSchema(),[isDoc,isMap,isList]=[this.isDocumentSchema(),this.isMapSchema(),this.isListSchema()],memberSchema="number"==typeof sc?63&sc:sc&&"object"==typeof sc&&(isMap||isList)?sc[3+sc[0]]:isDoc?15:void 0;if(null!=memberSchema)return member([memberSchema,0],isMap?"value":"member");throw new Error(`@smithy/core/schema - ${this.getName(!0)} has no value member.`)}getMemberSchema(memberName){const struct=this.getSchema();if(this.isStructSchema()&&struct[4].includes(memberName)){const i2=struct[4].indexOf(memberName),memberSchema=struct[5][i2];return member(isMemberSchema(memberSchema)?memberSchema:[memberSchema,0],memberName)}if(this.isDocumentSchema())return member([15,0],memberName);throw new Error(`@smithy/core/schema - ${this.getName(!0)} has no member=${memberName}.`)}getMemberSchemas(){const buffer={};try{for(const[k2,v2]of this.structIterator())buffer[k2]=v2}catch(ignored){}return buffer}getEventStreamMember(){if(this.isStructSchema())for(const[memberName,memberSchema]of this.structIterator())if(memberSchema.isStreaming()&&memberSchema.isStructSchema())return memberName;return""}*structIterator(){if(this.isUnitSchema())return;if(!this.isStructSchema())throw new Error("@smithy/core/schema - cannot iterate non-struct schema.");const struct=this.getSchema(),z2=struct[4].length;let it=struct[anno_it];if(it&&z2===it.length)yield*it;else{it=Array(z2);for(let i2=0;i2Array.isArray(sc)&&2===sc.length;isStaticSchema=sc=>Array.isArray(sc)&&sc.length>=5;_TypeRegistry=class _TypeRegistry{constructor(namespace,schemas=new Map,exceptions=new Map){__publicField(this,"namespace");__publicField(this,"schemas");__publicField(this,"exceptions");this.namespace=namespace;this.schemas=schemas;this.exceptions=exceptions}static for(namespace){_TypeRegistry.registries.has(namespace)||_TypeRegistry.registries.set(namespace,new _TypeRegistry(namespace));return _TypeRegistry.registries.get(namespace)}copyFrom(other){const{schemas,exceptions}=this;for(const[k2,v2]of other.schemas)schemas.has(k2)||schemas.set(k2,v2);for(const[k2,v2]of other.exceptions)exceptions.has(k2)||exceptions.set(k2,v2)}register(shapeId,schema){const qualifiedName=this.normalizeShapeId(shapeId);for(const r4 of[this,_TypeRegistry.for(qualifiedName.split("#")[0])])r4.schemas.set(qualifiedName,schema)}getSchema(shapeId){const id=this.normalizeShapeId(shapeId);if(!this.schemas.has(id))throw new Error(`@smithy/core/schema - schema not found for ${id}`);return this.schemas.get(id)}registerError(es,ctor){const $error=es,ns=$error[1];for(const r4 of[this,_TypeRegistry.for(ns)]){r4.schemas.set(ns+"#"+$error[2],$error);r4.exceptions.set($error,ctor)}}getErrorCtor(es){const $error=es;return this.exceptions.has($error)?this.exceptions.get($error):_TypeRegistry.for($error[1]).exceptions.get($error)}getBaseException(){for(const exceptionKey of this.exceptions.keys())if(Array.isArray(exceptionKey)){const[,ns,name]=exceptionKey,id=ns+"#"+name;if(id.startsWith("smithy.ts.sdk.synthetic.")&&id.endsWith("ServiceException"))return exceptionKey}}find(predicate){return[...this.schemas.values()].find(predicate)}clear(){this.schemas.clear();this.exceptions.clear()}normalizeShapeId(shapeId){return shapeId.includes("#")?shapeId:this.namespace+"#"+shapeId}};__publicField(_TypeRegistry,"registries",new Map);TypeRegistry=_TypeRegistry;expectNumber=value=>{if(null!=value){if("string"==typeof value){const parsed=parseFloat(value);if(!Number.isNaN(parsed)){String(parsed)!==String(value)&&logger.warn(stackTraceWarning(`Expected number but observed string: ${value}`));return parsed}}if("number"==typeof value)return value;throw new TypeError(`Expected number, got ${typeof value}: ${value}`)}};MAX_FLOAT=Math.ceil(2**127*(2-2**-23));expectFloat32=value=>{const expected=expectNumber(value);if(void 0!==expected&&!Number.isNaN(expected)&&expected!==1/0&&expected!==-1/0&&Math.abs(expected)>MAX_FLOAT)throw new TypeError(`Expected 32-bit float, got ${value}`);return expected};expectLong=value=>{if(null!=value){if(Number.isInteger(value)&&!Number.isNaN(value))return value;throw new TypeError(`Expected integer, got ${typeof value}: ${value}`)}};expectShort=value=>expectSizedInt(value,16);expectByte=value=>expectSizedInt(value,8);expectSizedInt=(value,size)=>{const expected=expectLong(value);if(void 0!==expected&&castInt(expected,size)!==expected)throw new TypeError(`Expected ${size}-bit integer, got ${value}`);return expected};castInt=(value,size)=>{switch(size){case 32:return Int32Array.of(value)[0];case 16:return Int16Array.of(value)[0];case 8:return Int8Array.of(value)[0]}};strictParseFloat32=value=>expectFloat32("string"==typeof value?parseNumber(value):value);NUMBER_REGEX=/(-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?)|(-?Infinity)|(NaN)/g;parseNumber=value=>{const matches=value.match(NUMBER_REGEX);if(null===matches||matches[0].length!==value.length)throw new TypeError("Expected real number, got implicit NaN");return parseFloat(value)};strictParseShort=value=>expectShort("string"==typeof value?parseNumber(value):value);strictParseByte=value=>expectByte("string"==typeof value?parseNumber(value):value);stackTraceWarning=message=>String(new TypeError(message).stack||message).split("\n").slice(0,5).filter(s2=>!s2.includes("stackTraceWarning")).join("\n");logger={warn:console.warn};DAYS=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];MONTHS=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];new RegExp(/^(\d{4})-(\d{2})-(\d{2})[tT](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?[zZ]$/);new RegExp(/^(\d{4})-(\d{2})-(\d{2})[tT](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?(([-+]\d{2}\:\d{2})|[zZ])$/);IMF_FIXDATE=new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d{2}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? GMT$/);RFC_850_DATE=new RegExp(/^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d{2})-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d{2}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? GMT$/);ASC_TIME=new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( [1-9]|\d{2}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? (\d{4})$/);parseRfc7231DateTime=value=>{if(null==value)return;if("string"!=typeof value)throw new TypeError("RFC-7231 date-times must be expressed as strings");let match3=IMF_FIXDATE.exec(value);if(match3){const[_,dayStr,monthStr,yearStr,hours,minutes,seconds,fractionalMilliseconds]=match3;return buildDate(strictParseShort(stripLeadingZeroes(yearStr)),parseMonthByShortName(monthStr),parseDateValue(dayStr,"day",1,31),{hours,minutes,seconds,fractionalMilliseconds})}match3=RFC_850_DATE.exec(value);if(match3){const[_,dayStr,monthStr,yearStr,hours,minutes,seconds,fractionalMilliseconds]=match3;return adjustRfc850Year(buildDate(parseTwoDigitYear(yearStr),parseMonthByShortName(monthStr),parseDateValue(dayStr,"day",1,31),{hours,minutes,seconds,fractionalMilliseconds}))}match3=ASC_TIME.exec(value);if(match3){const[_,monthStr,dayStr,hours,minutes,seconds,fractionalMilliseconds,yearStr]=match3;return buildDate(strictParseShort(stripLeadingZeroes(yearStr)),parseMonthByShortName(monthStr),parseDateValue(dayStr.trimLeft(),"day",1,31),{hours,minutes,seconds,fractionalMilliseconds})}throw new TypeError("Invalid RFC-7231 date-time value")};buildDate=(year2,month,day,time2)=>{const adjustedMonth=month-1;validateDayOfMonth(year2,adjustedMonth,day);return new Date(Date.UTC(year2,adjustedMonth,day,parseDateValue(time2.hours,"hour",0,23),parseDateValue(time2.minutes,"minute",0,59),parseDateValue(time2.seconds,"seconds",0,60),parseMilliseconds(time2.fractionalMilliseconds)))};parseTwoDigitYear=value=>{const thisYear=(new Date).getUTCFullYear(),valueInThisCentury=100*Math.floor(thisYear/100)+strictParseShort(stripLeadingZeroes(value));return valueInThisCenturyinput.getTime()-(new Date).getTime()>15768e8?new Date(Date.UTC(input.getUTCFullYear()-100,input.getUTCMonth(),input.getUTCDate(),input.getUTCHours(),input.getUTCMinutes(),input.getUTCSeconds(),input.getUTCMilliseconds())):input;parseMonthByShortName=value=>{const monthIdx=MONTHS.indexOf(value);if(monthIdx<0)throw new TypeError(`Invalid month: ${value}`);return monthIdx+1};DAYS_IN_MONTH=[31,28,31,30,31,30,31,31,30,31,30,31];validateDayOfMonth=(year2,month,day)=>{let maxDays=DAYS_IN_MONTH[month];1===month&&isLeapYear(year2)&&(maxDays=29);if(day>maxDays)throw new TypeError(`Invalid day for ${MONTHS[month]} in ${year2}: ${day}`)};isLeapYear=year2=>year2%4==0&&(year2%100!=0||year2%400==0);parseDateValue=(value,type,lower,upper)=>{const dateVal=strictParseByte(stripLeadingZeroes(value));if(dateValupper)throw new TypeError(`${type} must be between ${lower} and ${upper}, inclusive`);return dateVal};parseMilliseconds=value=>null==value?0:1e3*strictParseFloat32("0."+value);stripLeadingZeroes=value=>{let idx2=0;for(;idx2i2.toString(16).padStart(2,"0"));v4=()=>{if(randomUUID)return randomUUID();const rnds=new Uint8Array(16);crypto.getRandomValues(rnds);rnds[6]=15&rnds[6]|64;rnds[8]=63&rnds[8]|128;return decimalToHex[rnds[0]]+decimalToHex[rnds[1]]+decimalToHex[rnds[2]]+decimalToHex[rnds[3]]+"-"+decimalToHex[rnds[4]]+decimalToHex[rnds[5]]+"-"+decimalToHex[rnds[6]]+decimalToHex[rnds[7]]+"-"+decimalToHex[rnds[8]]+decimalToHex[rnds[9]]+"-"+decimalToHex[rnds[10]]+decimalToHex[rnds[11]]+decimalToHex[rnds[12]]+decimalToHex[rnds[13]]+decimalToHex[rnds[14]]+decimalToHex[rnds[15]]};(LazyJsonString=function LazyJsonString2(val){return Object.assign(new String(val),{deserializeJSON:()=>JSON.parse(String(val)),toString:()=>String(val),toJSON:()=>String(val)})}).from=object=>object&&"object"==typeof object&&(object instanceof LazyJsonString||"deserializeJSON"in object)?object:"string"==typeof object||Object.getPrototypeOf(object)===String.prototype?LazyJsonString(String(object)):LazyJsonString(JSON.stringify(object));LazyJsonString.fromObject=LazyJsonString.from;ddd="(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)(?:[ne|u?r]?s?day)?";mmm="(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)";time="(\\d?\\d):(\\d{2}):(\\d{2})(?:\\.(\\d+))?";RFC3339_WITH_OFFSET2=new RegExp(/^(\d{4})-(\d\d)-(\d\d)[tT](\d\d):(\d\d):(\d\d)(\.(\d+))?(([-+]\d\d:\d\d)|[zZ])$/);IMF_FIXDATE2=new RegExp(`^${ddd}, (\\d?\\d) ${mmm} (\\d{4}) ${time} GMT$`);RFC_850_DATE2=new RegExp(`^${ddd}, (\\d?\\d)-${mmm}-(\\d\\d) ${time} GMT$`);ASC_TIME2=new RegExp(`^${ddd} ${mmm} ( [1-9]|\\d\\d) ${time} (\\d{4})$`);months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];_parseEpochTimestamp=value=>{if(null==value)return;let num=NaN;if("number"==typeof value)num=value;else if("string"==typeof value){if(!/^-?\d*\.?\d+$/.test(value))throw new TypeError("parseEpochTimestamp - numeric string invalid.");num=Number.parseFloat(value)}else"object"==typeof value&&1===value.tag&&(num=value.value);if(isNaN(num)||Math.abs(num)===1/0)throw new TypeError("Epoch timestamps must be valid finite numbers.");return new Date(Math.round(1e3*num))};_parseRfc3339DateTimeWithOffset=value=>{if(null==value)return;if("string"!=typeof value)throw new TypeError("RFC3339 timestamps must be strings");const matches=RFC3339_WITH_OFFSET2.exec(value);if(!matches)throw new TypeError(`Invalid RFC3339 timestamp format ${value}`);const[,yearStr,monthStr,dayStr,hours,minutes,seconds,,ms,offsetStr]=matches;range3(monthStr,1,12);range3(dayStr,1,31);range3(hours,0,23);range3(minutes,0,59);range3(seconds,0,60);const date2=new Date(Date.UTC(Number(yearStr),Number(monthStr)-1,Number(dayStr),Number(hours),Number(minutes),Number(seconds),Number(ms)?Math.round(1e3*parseFloat(`0.${ms}`)):0));date2.setUTCFullYear(Number(yearStr));if("Z"!=offsetStr.toUpperCase()){const[,sign2,offsetH,offsetM]=/([+-])(\d\d):(\d\d)/.exec(offsetStr)||[void 0,"+",0,0],scalar="-"===sign2?1:-1;date2.setTime(date2.getTime()+scalar*(60*Number(offsetH)*60*1e3+60*Number(offsetM)*1e3))}return date2};_parseRfc7231DateTime=value=>{if(null==value)return;if("string"!=typeof value)throw new TypeError("RFC7231 timestamps must be strings.");let day,month,year2,hour,minute,second,fraction,matches;if(matches=IMF_FIXDATE2.exec(value))[,day,month,year2,hour,minute,second,fraction]=matches;else if(matches=RFC_850_DATE2.exec(value)){[,day,month,year2,hour,minute,second,fraction]=matches;year2=(Number(year2)+1900).toString()}else(matches=ASC_TIME2.exec(value))&&([,month,day,hour,minute,second,fraction,year2]=matches);if(year2&&second){const timestamp=Date.UTC(Number(year2),months.indexOf(month),Number(day),Number(hour),Number(minute),Number(second),fraction?Math.round(1e3*parseFloat(`0.${fraction}`)):0);range3(day,1,31);range3(hour,0,23);range3(minute,0,59);range3(second,0,60);const date2=new Date(timestamp);date2.setUTCFullYear(Number(year2));return date2}throw new TypeError(`Invalid RFC7231 date-time value ${value}.`)};splitHeader=value=>{const z2=value.length,values2=[];let prevChar,withinQuotes=!1,anchor=0;for(let i2=0;i2{const z3=(v2=v2.trim()).length;if(z3<2)return v2;'"'===v2[0]&&'"'===v2[z3-1]&&(v2=v2.slice(1,z3-1));return v2.replace(/\\"/g,'"')})};format=/^-?\d*(\.\d+)?$/;NumericValue=class _NumericValue{constructor(string,type){__publicField(this,"string");__publicField(this,"type");this.string=string;this.type=type;if(!format.test(string))throw new Error('@smithy/core/serde - NumericValue must only contain [0-9], at most one decimal point ".", and an optional negation prefix "-".')}toString(){return this.string}static[Symbol.hasInstance](object){if(!object||"object"!=typeof object)return!1;const _nv=object;return _NumericValue.prototype.isPrototypeOf(object)||"bigDecimal"===_nv.type&&format.test(_nv.string)}};SerdeContext=class{constructor(){__publicField(this,"serdeContext")}setSerdeContext(serdeContext){this.serdeContext=serdeContext}};HttpProtocol=class extends SerdeContext{constructor(options){var _a8;super();__publicField(this,"options");__publicField(this,"compositeErrorRegistry");this.options=options;this.compositeErrorRegistry=TypeRegistry.for(options.defaultNamespace);for(const etr of null!=(_a8=options.errorTypeRegistries)?_a8:[])this.compositeErrorRegistry.copyFrom(etr)}getRequestType(){return HttpRequest}getResponseType(){return HttpResponse}setSerdeContext(serdeContext){this.serdeContext=serdeContext;this.serializer.setSerdeContext(serdeContext);this.deserializer.setSerdeContext(serdeContext);this.getPayloadCodec()&&this.getPayloadCodec().setSerdeContext(serdeContext)}updateServiceEndpoint(request2,endpoint){if("url"in endpoint){request2.protocol=endpoint.url.protocol;request2.hostname=endpoint.url.hostname;request2.port=endpoint.url.port?Number(endpoint.url.port):void 0;request2.path=endpoint.url.pathname;request2.fragment=endpoint.url.hash||void 0;request2.username=endpoint.url.username||void 0;request2.password=endpoint.url.password||void 0;request2.query||(request2.query={});for(const[k2,v2]of endpoint.url.searchParams.entries())request2.query[k2]=v2;if(endpoint.headers)for(const[name,values2]of Object.entries(endpoint.headers))request2.headers[name]=values2.join(", ");return request2}request2.protocol=endpoint.protocol;request2.hostname=endpoint.hostname;request2.port=endpoint.port?Number(endpoint.port):void 0;request2.path=endpoint.path;request2.query={...endpoint.query};if(endpoint.headers)for(const[name,value]of Object.entries(endpoint.headers))request2.headers[name]=value;return request2}setHostPrefix(request2,operationSchema,input){var _a8,_b5,_c3;if(null==(_a8=this.serdeContext)?void 0:_a8.disableHostPrefix)return;const inputNs=NormalizedSchema.of(operationSchema.input),opTraits=translateTraits(null!=(_b5=operationSchema.traits)?_b5:{});if(opTraits.endpoint){let hostPrefix=null==(_c3=opTraits.endpoint)?void 0:_c3[0];if("string"==typeof hostPrefix){const hostLabelInputs=[...inputNs.structIterator()].filter(([,member2])=>member2.getMergedTraits().hostLabel);for(const[name]of hostLabelInputs){const replacement=input[name];if("string"!=typeof replacement)throw new Error(`@smithy/core/schema - ${name} in input must be a string as hostLabel.`);hostPrefix=hostPrefix.replace(`{${name}}`,replacement)}request2.hostname=hostPrefix+request2.hostname}}}deserializeMetadata(output){var _a8,_b5;return{httpStatusCode:output.statusCode,requestId:null!=(_b5=null!=(_a8=output.headers["x-amzn-requestid"])?_a8:output.headers["x-amzn-request-id"])?_b5:output.headers["x-amz-request-id"],extendedRequestId:output.headers["x-amz-id-2"],cfId:output.headers["x-amz-cf-id"]}}async serializeEventStream({eventStream,requestSchema,initialRequest}){return(await this.loadEventStreamCapability()).serializeEventStream({eventStream,requestSchema,initialRequest})}async deserializeEventStream({response,responseSchema,initialResponseContainer}){return(await this.loadEventStreamCapability()).deserializeEventStream({response,responseSchema,initialResponseContainer})}async loadEventStreamCapability(){const{EventStreamSerde:EventStreamSerde2}=await Promise.resolve().then(()=>(init_event_streams(),event_streams_exports));return new EventStreamSerde2({marshaller:this.getEventStreamMarshaller(),serializer:this.serializer,deserializer:this.deserializer,serdeContext:this.serdeContext,defaultContentType:this.getDefaultContentType()})}getDefaultContentType(){throw new Error(`@smithy/core/protocols - ${this.constructor.name} getDefaultContentType() implementation missing.`)}async deserializeHttpMessage(schema,context2,response,arg4,arg5){return[]}getEventStreamMarshaller(){const context2=this.serdeContext;if(!context2.eventStreamMarshaller)throw new Error("@smithy/core - HttpProtocol: eventStreamMarshaller missing in serdeContext.");return context2.eventStreamMarshaller}};HttpBindingProtocol=class extends HttpProtocol{async serializeRequest(operationSchema,_input,context2){var _a8,_b5;const input={...null!=_input?_input:{}},serializer=this.serializer,query3={},headers={},endpoint=await context2.endpoint(),ns=NormalizedSchema.of(null==operationSchema?void 0:operationSchema.input),payloadMemberNames=[],payloadMemberSchemas=[];let payload,hasNonHttpBindingMember=!1;const request2=new HttpRequest({protocol:"",hostname:"",port:void 0,path:"",fragment:void 0,query:query3,headers,body:void 0});if(endpoint){this.updateServiceEndpoint(request2,endpoint);this.setHostPrefix(request2,operationSchema,input);const opTraits=translateTraits(operationSchema.traits);if(opTraits.http){request2.method=opTraits.http[0];const[path2,search]=opTraits.http[1].split("?");"/"==request2.path?request2.path=path2:request2.path+=path2;const traitSearchParams=new URLSearchParams(null!=search?search:"");Object.assign(query3,Object.fromEntries(traitSearchParams))}}for(const[memberName,memberNs]of ns.structIterator()){const memberTraits=null!=(_a8=memberNs.getMergedTraits())?_a8:{},inputMemberValue=input[memberName];if(null!=inputMemberValue||memberNs.isIdempotencyToken())if(memberTraits.httpPayload){if(memberNs.isStreaming())memberNs.isStructSchema()?input[memberName]&&(payload=await this.serializeEventStream({eventStream:input[memberName],requestSchema:ns})):payload=inputMemberValue;else{serializer.write(memberNs,inputMemberValue);payload=serializer.flush()}delete input[memberName]}else if(memberTraits.httpLabel){serializer.write(memberNs,inputMemberValue);const replacement=serializer.flush();request2.path.includes(`{${memberName}+}`)?request2.path=request2.path.replace(`{${memberName}+}`,replacement.split("/").map(extendedEncodeURIComponent).join("/")):request2.path.includes(`{${memberName}}`)&&(request2.path=request2.path.replace(`{${memberName}}`,extendedEncodeURIComponent(replacement)));delete input[memberName]}else if(memberTraits.httpHeader){serializer.write(memberNs,inputMemberValue);headers[memberTraits.httpHeader.toLowerCase()]=String(serializer.flush());delete input[memberName]}else if("string"==typeof memberTraits.httpPrefixHeaders){for(const[key3,val]of Object.entries(inputMemberValue)){const amalgam=memberTraits.httpPrefixHeaders+key3;serializer.write([memberNs.getValueSchema(),{httpHeader:amalgam}],val);headers[amalgam.toLowerCase()]=serializer.flush()}delete input[memberName]}else if(memberTraits.httpQuery||memberTraits.httpQueryParams){this.serializeQuery(memberNs,inputMemberValue,query3);delete input[memberName]}else{hasNonHttpBindingMember=!0;payloadMemberNames.push(memberName);payloadMemberSchemas.push(memberNs)}else if(memberTraits.httpLabel&&(request2.path.includes(`{${memberName}+}`)||request2.path.includes(`{${memberName}}`)))throw new Error(`No value provided for input HTTP label: ${memberName}.`)}if(hasNonHttpBindingMember&&input){const[namespace,name]=(null!=(_b5=ns.getName(!0))?_b5:"#Unknown").split("#"),requiredMembers=ns.getSchema()[6],payloadSchema=[3,namespace,name,ns.getMergedTraits(),payloadMemberNames,payloadMemberSchemas,void 0];requiredMembers?payloadSchema[6]=requiredMembers:payloadSchema.pop();serializer.write(payloadSchema,input);payload=serializer.flush()}request2.headers=headers;request2.query=query3;request2.body=payload;return request2}serializeQuery(ns,data,query3){const serializer=this.serializer,traits=ns.getMergedTraits();if(traits.httpQueryParams){for(const[key3,val]of Object.entries(data))if(!(key3 in query3)){const valueSchema=ns.getValueSchema();Object.assign(valueSchema.getMergedTraits(),{...traits,httpQuery:key3,httpQueryParams:void 0});this.serializeQuery(valueSchema,val,query3)}}else if(ns.isListSchema()){const sparse=!!ns.getMergedTraits().sparse,buffer=[];for(const item of data){serializer.write([ns.getValueSchema(),traits],item);const serializable=serializer.flush();(sparse||void 0!==serializable)&&buffer.push(serializable)}query3[traits.httpQuery]=buffer}else{serializer.write([ns,traits],data);query3[traits.httpQuery]=serializer.flush()}}async deserializeResponse(operationSchema,context2,response){const deserializer=this.deserializer,ns=NormalizedSchema.of(operationSchema.output),dataObject={};if(response.statusCode>=300){const bytes=await collectBody(response.body,context2);bytes.byteLength>0&&Object.assign(dataObject,await deserializer.read(15,bytes));await this.handleError(operationSchema,context2,response,dataObject,this.deserializeMetadata(response));throw new Error("@smithy/core/protocols - HTTP Protocol error handler failed to throw.")}for(const header in response.headers){const value=response.headers[header];delete response.headers[header];response.headers[header.toLowerCase()]=value}const nonHttpBindingMembers=await this.deserializeHttpMessage(ns,context2,response,dataObject);if(nonHttpBindingMembers.length){const bytes=await collectBody(response.body,context2);if(bytes.byteLength>0){const dataFromBody=await deserializer.read(ns,bytes);for(const member2 of nonHttpBindingMembers)null!=dataFromBody[member2]&&(dataObject[member2]=dataFromBody[member2])}}else nonHttpBindingMembers.discardResponseBody&&await collectBody(response.body,context2);dataObject.$metadata=this.deserializeMetadata(response);return dataObject}async deserializeHttpMessage(schema,context2,response,arg4,arg5){let dataObject;dataObject=arg4 instanceof Set?arg5:arg4;let discardResponseBody=!0;const deserializer=this.deserializer,ns=NormalizedSchema.of(schema),nonHttpBindingMembers=[];for(const[memberName,memberSchema]of ns.structIterator()){const memberTraits=memberSchema.getMemberTraits();if(memberTraits.httpPayload){discardResponseBody=!1;if(memberSchema.isStreaming()){const isEventStream=memberSchema.isStructSchema();dataObject[memberName]=isEventStream?await this.deserializeEventStream({response,responseSchema:ns}):sdkStreamMixin(response.body)}else if(response.body){const bytes=await collectBody(response.body,context2);bytes.byteLength>0&&(dataObject[memberName]=await deserializer.read(memberSchema,bytes))}}else if(memberTraits.httpHeader){const key3=String(memberTraits.httpHeader).toLowerCase(),value=response.headers[key3];if(null!=value)if(memberSchema.isListSchema()){const headerListValueSchema=memberSchema.getValueSchema();headerListValueSchema.getMergedTraits().httpHeader=key3;let sections;sections=headerListValueSchema.isTimestampSchema()&&4===headerListValueSchema.getSchema()?splitEvery(value,",",2):splitHeader(value);const list=[];for(const section of sections)list.push(await deserializer.read(headerListValueSchema,section.trim()));dataObject[memberName]=list}else dataObject[memberName]=await deserializer.read(memberSchema,value)}else if(void 0!==memberTraits.httpPrefixHeaders){dataObject[memberName]={};for(const[header,value]of Object.entries(response.headers))if(header.startsWith(memberTraits.httpPrefixHeaders)){const valueSchema=memberSchema.getValueSchema();valueSchema.getMergedTraits().httpHeader=header;dataObject[memberName][header.slice(memberTraits.httpPrefixHeaders.length)]=await deserializer.read(valueSchema,value)}}else memberTraits.httpResponseCode?dataObject[memberName]=response.statusCode:nonHttpBindingMembers.push(memberName)}nonHttpBindingMembers.discardResponseBody=discardResponseBody;return nonHttpBindingMembers}};init_dist_es();FromStringShapeDeserializer=class extends SerdeContext{constructor(settings){super();__publicField(this,"settings");this.settings=settings}read(_schema,data){var _a8,_b5;const ns=NormalizedSchema.of(_schema);if(ns.isListSchema())return splitHeader(data).map(item=>this.read(ns.getValueSchema(),item));if(ns.isBlobSchema())return(null!=(_b5=null==(_a8=this.serdeContext)?void 0:_a8.base64Decoder)?_b5:fromBase64)(data);if(ns.isTimestampSchema())switch(determineTimestampFormat(ns,this.settings)){case 5:return _parseRfc3339DateTimeWithOffset(data);case 6:return _parseRfc7231DateTime(data);case 7:return _parseEpochTimestamp(data);default:console.warn("Missing timestamp format, parsing value with Date constructor:",data);return new Date(data)}if(ns.isStringSchema()){const mediaType=ns.getMergedTraits().mediaType;let intermediateValue=data;if(mediaType){ns.getMergedTraits().httpHeader&&(intermediateValue=this.base64ToUtf8(intermediateValue));("application/json"===mediaType||mediaType.endsWith("+json"))&&(intermediateValue=LazyJsonString.from(intermediateValue));return intermediateValue}}return ns.isNumericSchema()?Number(data):ns.isBigIntegerSchema()?BigInt(data):ns.isBigDecimalSchema()?new NumericValue(data,"bigDecimal"):ns.isBooleanSchema()?"true"===String(data).toLowerCase():data}base64ToUtf8(base64String){var _a8,_b5,_c3,_d2;return(null!=(_b5=null==(_a8=this.serdeContext)?void 0:_a8.utf8Encoder)?_b5:toUtf8)((null!=(_d2=null==(_c3=this.serdeContext)?void 0:_c3.base64Decoder)?_d2:fromBase64)(base64String))}};init_dist_es();HttpInterceptingShapeDeserializer=class extends SerdeContext{constructor(codecDeserializer,codecSettings){super();__publicField(this,"codecDeserializer");__publicField(this,"stringDeserializer");this.codecDeserializer=codecDeserializer;this.stringDeserializer=new FromStringShapeDeserializer(codecSettings)}setSerdeContext(serdeContext){this.stringDeserializer.setSerdeContext(serdeContext);this.codecDeserializer.setSerdeContext(serdeContext);this.serdeContext=serdeContext}read(schema,data){var _a8,_b5,_c3,_d2;const ns=NormalizedSchema.of(schema),traits=ns.getMergedTraits(),toString=null!=(_b5=null==(_a8=this.serdeContext)?void 0:_a8.utf8Encoder)?_b5:toUtf8;if(traits.httpHeader||traits.httpResponseCode)return this.stringDeserializer.read(ns,toString(data));if(traits.httpPayload){if(ns.isBlobSchema()){const toBytes=null!=(_d2=null==(_c3=this.serdeContext)?void 0:_c3.utf8Decoder)?_d2:fromUtf8;return"string"==typeof data?toBytes(data):data}if(ns.isStringSchema())return"byteLength"in data?toString(data):data}return this.codecDeserializer.read(ns,data)}};ToStringShapeSerializer=class extends SerdeContext{constructor(settings){super();__publicField(this,"settings");__publicField(this,"stringBuffer","");this.settings=settings}write(schema,value){var _a8,_b5,_c3,_d2;const ns=NormalizedSchema.of(schema);switch(typeof value){case"object":if(null===value){this.stringBuffer="null";return}if(ns.isTimestampSchema()){if(!(value instanceof Date))throw new Error(`@smithy/core/protocols - received non-Date value ${value} when schema expected Date in ${ns.getName(!0)}`);switch(determineTimestampFormat(ns,this.settings)){case 5:this.stringBuffer=value.toISOString().replace(".000Z","Z");break;case 6:this.stringBuffer=dateToUtcString(value);break;case 7:this.stringBuffer=String(value.getTime()/1e3);break;default:console.warn("Missing timestamp format, using epoch seconds",value);this.stringBuffer=String(value.getTime()/1e3)}return}if(ns.isBlobSchema()&&"byteLength"in value){this.stringBuffer=(null!=(_b5=null==(_a8=this.serdeContext)?void 0:_a8.base64Encoder)?_b5:toBase64)(value);return}if(ns.isListSchema()&&Array.isArray(value)){let buffer="";for(const item of value){this.write([ns.getValueSchema(),ns.getMergedTraits()],item);const headerItem=this.flush();""!==buffer&&(buffer+=", ");buffer+=ns.getValueSchema().isTimestampSchema()?headerItem:quoteHeader(headerItem)}this.stringBuffer=buffer;return}this.stringBuffer=JSON.stringify(value,null,2);break;case"string":const mediaType=ns.getMergedTraits().mediaType;let intermediateValue=value;if(mediaType){("application/json"===mediaType||mediaType.endsWith("+json"))&&(intermediateValue=LazyJsonString.from(intermediateValue));if(ns.getMergedTraits().httpHeader){this.stringBuffer=(null!=(_d2=null==(_c3=this.serdeContext)?void 0:_c3.base64Encoder)?_d2:toBase64)(intermediateValue.toString());return}}this.stringBuffer=value;break;default:ns.isIdempotencyToken()?this.stringBuffer=v4():this.stringBuffer=String(value)}}flush(){const buffer=this.stringBuffer;this.stringBuffer="";return buffer}};HttpInterceptingShapeSerializer=class{constructor(codecSerializer,codecSettings,stringSerializer=new ToStringShapeSerializer(codecSettings)){__publicField(this,"codecSerializer");__publicField(this,"stringSerializer");__publicField(this,"buffer");this.codecSerializer=codecSerializer;this.stringSerializer=stringSerializer}setSerdeContext(serdeContext){this.codecSerializer.setSerdeContext(serdeContext);this.stringSerializer.setSerdeContext(serdeContext)}write(schema,value){const ns=NormalizedSchema.of(schema),traits=ns.getMergedTraits();if(!(traits.httpHeader||traits.httpLabel||traits.httpQuery))return this.codecSerializer.write(ns,value);this.stringSerializer.write(ns,value);this.buffer=this.stringSerializer.flush()}flush(){if(void 0!==this.buffer){const buffer=this.buffer;this.buffer=void 0;return buffer}return this.codecSerializer.flush()}};DefaultIdentityProviderConfig=class{constructor(config){__publicField(this,"authSchemes",new Map);for(const[key3,value]of Object.entries(config))void 0!==value&&this.authSchemes.set(key3,value)}getIdentityProvider(schemeId){return this.authSchemes.get(schemeId)}};isIdentityExpired=(()=>function isIdentityExpired2(identity){return doesIdentityRequireRefresh(identity)&&identity.expiration.getTime()-Date.now()<3e5})();doesIdentityRequireRefresh=identity=>void 0!==identity.expiration;memoizeIdentityProvider=(provider,isExpired,requiresRefresh)=>{if(void 0===provider)return;const normalizedProvider="function"!=typeof provider?async()=>Promise.resolve(provider):provider;let resolved,pending3,hasResult,isConstant=!1;const coalesceProvider=async options=>{pending3||(pending3=normalizedProvider(options));try{resolved=await pending3;hasResult=!0;isConstant=!1}finally{pending3=void 0}return resolved};return void 0===isExpired?async options=>{hasResult&&!(null==options?void 0:options.forceRefresh)||(resolved=await coalesceProvider(options));return resolved}:async options=>{hasResult&&!(null==options?void 0:options.forceRefresh)||(resolved=await coalesceProvider(options));if(isConstant)return resolved;if(!requiresRefresh(resolved)){isConstant=!0;return resolved}if(isExpired(resolved)){await coalesceProvider(options);return resolved}return resolved}};Error;memoize=(provider,isExpired,requiresRefresh)=>{let resolved,pending3,hasResult,isConstant=!1;const coalesceProvider=async()=>{pending3||(pending3=provider());try{resolved=await pending3;hasResult=!0;isConstant=!1}finally{pending3=void 0}return resolved};return void 0===isExpired?async options=>{hasResult&&!(null==options?void 0:options.forceRefresh)||(resolved=await coalesceProvider());return resolved}:async options=>{hasResult&&!(null==options?void 0:options.forceRefresh)||(resolved=await coalesceProvider());if(isConstant)return resolved;if(requiresRefresh&&!requiresRefresh(resolved)){isConstant=!0;return resolved}if(isExpired(resolved)){await coalesceProvider();return resolved}return resolved}};resolveAwsSdkSigV4AConfig=config=>{config.sigv4aSigningRegionSet=normalizeProvider2(config.sigv4aSigningRegionSet);return config};AMZ_DATE_HEADER=(AMZ_DATE_QUERY_PARAM="X-Amz-Date").toLowerCase();GENERATED_HEADERS=["authorization",AMZ_DATE_HEADER,"date"];SIGNATURE_HEADER="X-Amz-Signature".toLowerCase();TOKEN_HEADER="X-Amz-Security-Token".toLowerCase();ALWAYS_UNSIGNABLE_HEADERS={authorization:!0,"cache-control":!0,connection:!0,expect:!0,from:!0,"keep-alive":!0,"max-forwards":!0,pragma:!0,referer:!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0,"user-agent":!0,"x-amzn-trace-id":!0};PROXY_HEADER_PATTERN=/^proxy-/;SEC_HEADER_PATTERN=/^sec-/;EVENT_ALGORITHM_IDENTIFIER="AWS4-HMAC-SHA256-PAYLOAD";init_dist_es();signingKeyCache={};cacheQueue=[];createScope=(shortDate,region,service)=>`${shortDate}/${region}/${service}/aws4_request`;getSigningKey=async(sha256Constructor,credentials,shortDate,region,service)=>{const cacheKey=`${shortDate}:${region}:${service}:${toHex2(await hmac(sha256Constructor,credentials.secretAccessKey,credentials.accessKeyId))}:${credentials.sessionToken}`;if(cacheKey in signingKeyCache)return signingKeyCache[cacheKey];cacheQueue.push(cacheKey);for(;cacheQueue.length>50;)delete signingKeyCache[cacheQueue.shift()];let key3=`AWS4${credentials.secretAccessKey}`;for(const signable of[shortDate,region,service,"aws4_request"])key3=await hmac(sha256Constructor,key3,signable);return signingKeyCache[cacheKey]=key3};hmac=(ctor,secret,data)=>{const hash3=new ctor(secret);hash3.update(toUint8Array(data));return hash3.digest()};getCanonicalHeaders=({headers},unsignableHeaders,signableHeaders)=>{const canonical={};for(const headerName of Object.keys(headers).sort()){if(null==headers[headerName])continue;const canonicalHeaderName=headerName.toLowerCase();(canonicalHeaderName in ALWAYS_UNSIGNABLE_HEADERS||(null==unsignableHeaders?void 0:unsignableHeaders.has(canonicalHeaderName))||PROXY_HEADER_PATTERN.test(canonicalHeaderName)||SEC_HEADER_PATTERN.test(canonicalHeaderName))&&(!signableHeaders||signableHeaders&&!signableHeaders.has(canonicalHeaderName))||(canonical[canonicalHeaderName]=headers[headerName].trim().replace(/\s+/g," "))}return canonical};isArrayBuffer=arg=>"function"==typeof ArrayBuffer&&arg instanceof ArrayBuffer||"[object ArrayBuffer]"===Object.prototype.toString.call(arg);init_dist_es();getPayloadHash=async({headers,body},hashConstructor)=>{for(const headerName of Object.keys(headers))if("x-amz-content-sha256"===headerName.toLowerCase())return headers[headerName];if(null==body)return"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";if("string"==typeof body||ArrayBuffer.isView(body)||isArrayBuffer(body)){const hashCtor=new hashConstructor;hashCtor.update(toUint8Array(body));return toHex2(await hashCtor.digest())}return"UNSIGNED-PAYLOAD"};init_dist_es();HeaderFormatter=class{format(headers){const chunks=[];for(const headerName of Object.keys(headers)){const bytes=fromUtf8(headerName);chunks.push(Uint8Array.from([bytes.byteLength]),bytes,this.formatHeaderValue(headers[headerName]))}const out=new Uint8Array(chunks.reduce((carry,bytes)=>carry+bytes.byteLength,0));let position=0;for(const chunk of chunks){out.set(chunk,position);position+=chunk.byteLength}return out}formatHeaderValue(header){switch(header.type){case"boolean":return Uint8Array.from([header.value?0:1]);case"byte":return Uint8Array.from([2,header.value]);case"short":const shortView=new DataView(new ArrayBuffer(3));shortView.setUint8(0,3);shortView.setInt16(1,header.value,!1);return new Uint8Array(shortView.buffer);case"integer":const intView=new DataView(new ArrayBuffer(5));intView.setUint8(0,4);intView.setInt32(1,header.value,!1);return new Uint8Array(intView.buffer);case"long":const longBytes=new Uint8Array(9);longBytes[0]=5;longBytes.set(header.value.bytes,1);return longBytes;case"binary":const binView=new DataView(new ArrayBuffer(3+header.value.byteLength));binView.setUint8(0,6);binView.setUint16(1,header.value.byteLength,!1);const binBytes=new Uint8Array(binView.buffer);binBytes.set(header.value,3);return binBytes;case"string":const utf8Bytes=fromUtf8(header.value),strView=new DataView(new ArrayBuffer(3+utf8Bytes.byteLength));strView.setUint8(0,7);strView.setUint16(1,utf8Bytes.byteLength,!1);const strBytes=new Uint8Array(strView.buffer);strBytes.set(utf8Bytes,3);return strBytes;case"timestamp":const tsBytes=new Uint8Array(9);tsBytes[0]=8;tsBytes.set(Int64.fromNumber(header.value.valueOf()).bytes,1);return tsBytes;case"uuid":if(!UUID_PATTERN.test(header.value))throw new Error(`Invalid UUID received: ${header.value}`);const uuidBytes=new Uint8Array(17);uuidBytes[0]=9;uuidBytes.set(fromHex(header.value.replace(/\-/g,"")),1);return uuidBytes}}};(function(HEADER_VALUE_TYPE3){HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.boolTrue=0]="boolTrue";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.boolFalse=1]="boolFalse";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.byte=2]="byte";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.short=3]="short";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.integer=4]="integer";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.long=5]="long";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.byteArray=6]="byteArray";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.string=7]="string";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.timestamp=8]="timestamp";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.uuid=9]="uuid"})(HEADER_VALUE_TYPE||(HEADER_VALUE_TYPE={}));UUID_PATTERN=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;Int64=class _Int64{constructor(bytes){__publicField(this,"bytes");this.bytes=bytes;if(8!==bytes.byteLength)throw new Error("Int64 buffers must be exactly 8 bytes")}static fromNumber(number){if(number>0x8000000000000000||number<-0x8000000000000000)throw new Error(`${number} is too large (or, if negative, too small) to represent as an Int64`);const bytes=new Uint8Array(8);for(let i2=7,remaining=Math.abs(Math.round(number));i2>-1&&remaining>0;i2--,remaining/=256)bytes[i2]=remaining;number<0&&negate(bytes);return new _Int64(bytes)}valueOf(){const bytes=this.bytes.slice(0),negative=128&bytes[0];negative&&negate(bytes);return parseInt(toHex2(bytes),16)*(negative?-1:1)}toString(){return String(this.valueOf())}};hasHeader=(soughtHeader,headers)=>{soughtHeader=soughtHeader.toLowerCase();for(const headerName of Object.keys(headers))if(soughtHeader===headerName.toLowerCase())return!0;return!1};moveHeadersToQuery=(request2,options={})=>{var _a8,_b5;const{headers,query:query3={}}=HttpRequest.clone(request2);for(const name of Object.keys(headers)){const lname=name.toLowerCase();if("x-amz-"===lname.slice(0,6)&&!(null==(_a8=options.unhoistableHeaders)?void 0:_a8.has(lname))||(null==(_b5=options.hoistableHeaders)?void 0:_b5.has(lname))){query3[name]=headers[name];delete headers[name]}}return{...request2,headers,query:query3}};prepareRequest=request2=>{request2=HttpRequest.clone(request2);for(const headerName of Object.keys(request2.headers))GENERATED_HEADERS.indexOf(headerName.toLowerCase())>-1&&delete request2.headers[headerName];return request2};getCanonicalQuery=({query:query3={}})=>{const keys3=[],serialized2={};for(const key3 of Object.keys(query3)){if(key3.toLowerCase()===SIGNATURE_HEADER)continue;const encodedKey=escapeUri(key3);keys3.push(encodedKey);const value=query3[key3];"string"==typeof value?serialized2[encodedKey]=`${encodedKey}=${escapeUri(value)}`:Array.isArray(value)&&(serialized2[encodedKey]=value.slice(0).reduce((encoded,value2)=>encoded.concat([`${encodedKey}=${escapeUri(value2)}`]),[]).sort().join("&"))}return keys3.sort().map(key3=>serialized2[key3]).filter(serialized3=>serialized3).join("&")};iso8601=time2=>toDate(time2).toISOString().replace(/\.\d{3}Z$/,"Z");toDate=time2=>"number"==typeof time2?new Date(1e3*time2):"string"==typeof time2?Number(time2)?new Date(1e3*Number(time2)):new Date(time2):time2;init_dist_es();SignatureV4Base=class{constructor({applyChecksum,credentials,region,service,sha256,uriEscapePath=!0}){__publicField(this,"service");__publicField(this,"regionProvider");__publicField(this,"credentialProvider");__publicField(this,"sha256");__publicField(this,"uriEscapePath");__publicField(this,"applyChecksum");this.service=service;this.sha256=sha256;this.uriEscapePath=uriEscapePath;this.applyChecksum="boolean"!=typeof applyChecksum||applyChecksum;this.regionProvider=normalizeProvider(region);this.credentialProvider=normalizeProvider(credentials)}createCanonicalRequest(request2,canonicalHeaders,payloadHash){const sortedHeaders=Object.keys(canonicalHeaders).sort();return`${request2.method}\n${this.getCanonicalPath(request2)}\n${getCanonicalQuery(request2)}\n${sortedHeaders.map(name=>`${name}:${canonicalHeaders[name]}`).join("\n")}\n\n${sortedHeaders.join(";")}\n${payloadHash}`}async createStringToSign(longDate,credentialScope,canonicalRequest,algorithmIdentifier){const hash3=new this.sha256;hash3.update(toUint8Array(canonicalRequest));return`${algorithmIdentifier}\n${longDate}\n${credentialScope}\n${toHex2(await hash3.digest())}`}getCanonicalPath({path:path2}){if(this.uriEscapePath){const normalizedPathSegments=[];for(const pathSegment of path2.split("/"))0!==(null==pathSegment?void 0:pathSegment.length)&&"."!==pathSegment&&(".."===pathSegment?normalizedPathSegments.pop():normalizedPathSegments.push(pathSegment));const normalizedPath=`${(null==path2?void 0:path2.startsWith("/"))?"/":""}${normalizedPathSegments.join("/")}${normalizedPathSegments.length>0&&(null==path2?void 0:path2.endsWith("/"))?"/":""}`;return escapeUri(normalizedPath).replace(/%2F/g,"/")}return path2}validateResolvedCredentials(credentials){if("object"!=typeof credentials||"string"!=typeof credentials.accessKeyId||"string"!=typeof credentials.secretAccessKey)throw new Error("Resolved credential object is not valid")}formatDate(now3){const longDate=iso8601(now3).replace(/[\-:]/g,"");return{longDate,shortDate:longDate.slice(0,8)}}getCanonicalHeaderList(headers){return Object.keys(headers).sort().join(";")}};init_dist_es();SignatureV4=class extends SignatureV4Base{constructor({applyChecksum,credentials,region,service,sha256,uriEscapePath=!0}){super({applyChecksum,credentials,region,service,sha256,uriEscapePath});__publicField(this,"headerFormatter",new HeaderFormatter)}async presign(originalRequest,options={}){const{signingDate=new Date,expiresIn=3600,unsignableHeaders,unhoistableHeaders,signableHeaders,hoistableHeaders,signingRegion,signingService}=options,credentials=await this.credentialProvider();this.validateResolvedCredentials(credentials);const region=null!=signingRegion?signingRegion:await this.regionProvider(),{longDate,shortDate}=this.formatDate(signingDate);if(expiresIn>604800)return Promise.reject("Signature version 4 presigned URLs must have an expiration date less than one week in the future");const scope=createScope(shortDate,region,null!=signingService?signingService:this.service),request2=moveHeadersToQuery(prepareRequest(originalRequest),{unhoistableHeaders,hoistableHeaders});credentials.sessionToken&&(request2.query["X-Amz-Security-Token"]=credentials.sessionToken);request2.query["X-Amz-Algorithm"]="AWS4-HMAC-SHA256";request2.query["X-Amz-Credential"]=`${credentials.accessKeyId}/${scope}`;request2.query[AMZ_DATE_QUERY_PARAM]=longDate;request2.query["X-Amz-Expires"]=expiresIn.toString(10);const canonicalHeaders=getCanonicalHeaders(request2,unsignableHeaders,signableHeaders);request2.query["X-Amz-SignedHeaders"]=this.getCanonicalHeaderList(canonicalHeaders);request2.query["X-Amz-Signature"]=await this.getSignature(longDate,scope,this.getSigningKey(credentials,region,shortDate,signingService),this.createCanonicalRequest(request2,canonicalHeaders,await getPayloadHash(originalRequest,this.sha256)));return request2}async sign(toSign,options){return"string"==typeof toSign?this.signString(toSign,options):toSign.headers&&toSign.payload?this.signEvent(toSign,options):toSign.message?this.signMessage(toSign,options):this.signRequest(toSign,options)}async signEvent({headers,payload},{signingDate=new Date,priorSignature,signingRegion,signingService}){const region=null!=signingRegion?signingRegion:await this.regionProvider(),{shortDate,longDate}=this.formatDate(signingDate),scope=createScope(shortDate,region,null!=signingService?signingService:this.service),hashedPayload=await getPayloadHash({headers:{},body:payload},this.sha256),hash3=new this.sha256;hash3.update(headers);const hashedHeaders=toHex2(await hash3.digest()),stringToSign=[EVENT_ALGORITHM_IDENTIFIER,longDate,scope,priorSignature,hashedHeaders,hashedPayload].join("\n");return this.signString(stringToSign,{signingDate,signingRegion:region,signingService})}async signMessage(signableMessage,{signingDate=new Date,signingRegion,signingService}){return this.signEvent({headers:this.headerFormatter.format(signableMessage.message.headers),payload:signableMessage.message.body},{signingDate,signingRegion,signingService,priorSignature:signableMessage.priorSignature}).then(signature=>({message:signableMessage.message,signature}))}async signString(stringToSign,{signingDate=new Date,signingRegion,signingService}={}){const credentials=await this.credentialProvider();this.validateResolvedCredentials(credentials);const region=null!=signingRegion?signingRegion:await this.regionProvider(),{shortDate}=this.formatDate(signingDate),hash3=new this.sha256(await this.getSigningKey(credentials,region,shortDate,signingService));hash3.update(toUint8Array(stringToSign));return toHex2(await hash3.digest())}async signRequest(requestToSign,{signingDate=new Date,signableHeaders,unsignableHeaders,signingRegion,signingService}={}){const credentials=await this.credentialProvider();this.validateResolvedCredentials(credentials);const region=null!=signingRegion?signingRegion:await this.regionProvider(),request2=prepareRequest(requestToSign),{longDate,shortDate}=this.formatDate(signingDate),scope=createScope(shortDate,region,null!=signingService?signingService:this.service);request2.headers[AMZ_DATE_HEADER]=longDate;credentials.sessionToken&&(request2.headers[TOKEN_HEADER]=credentials.sessionToken);const payloadHash=await getPayloadHash(request2,this.sha256);!hasHeader("x-amz-content-sha256",request2.headers)&&this.applyChecksum&&(request2.headers["x-amz-content-sha256"]=payloadHash);const canonicalHeaders=getCanonicalHeaders(request2,unsignableHeaders,signableHeaders),signature=await this.getSignature(longDate,scope,this.getSigningKey(credentials,region,shortDate,signingService),this.createCanonicalRequest(request2,canonicalHeaders,payloadHash));request2.headers.authorization=`AWS4-HMAC-SHA256 Credential=${credentials.accessKeyId}/${scope}, SignedHeaders=${this.getCanonicalHeaderList(canonicalHeaders)}, Signature=${signature}`;return request2}async getSignature(longDate,credentialScope,keyPromise,canonicalRequest){const stringToSign=await this.createStringToSign(longDate,credentialScope,canonicalRequest,"AWS4-HMAC-SHA256"),hash3=new this.sha256(await keyPromise);hash3.update(toUint8Array(stringToSign));return toHex2(await hash3.digest())}getSigningKey(credentials,region,shortDate,service){return getSigningKey(this.sha256,credentials,shortDate,region,service||this.service)}};resolveAwsSdkSigV4Config=config=>{let resolvedCredentials,inputCredentials=config.credentials,isUserSupplied=!!config.credentials;Object.defineProperty(config,"credentials",{set(credentials){credentials&&credentials!==inputCredentials&&credentials!==resolvedCredentials&&(isUserSupplied=!0);inputCredentials=credentials;const memoizedProvider=normalizeCredentialProvider(config,{credentials:inputCredentials,credentialDefaultProvider:config.credentialDefaultProvider}),boundProvider=bindCallerConfig(config,memoizedProvider);if(isUserSupplied&&!boundProvider.attributed){const isCredentialObject="object"==typeof inputCredentials&&null!==inputCredentials;resolvedCredentials=async options=>{const attributedCreds=await boundProvider(options);return!isCredentialObject||attributedCreds.$source&&0!==Object.keys(attributedCreds.$source).length?attributedCreds:setCredentialFeature(attributedCreds,"CREDENTIALS_CODE","e")};resolvedCredentials.memoized=boundProvider.memoized;resolvedCredentials.configBound=boundProvider.configBound;resolvedCredentials.attributed=!0}else resolvedCredentials=boundProvider},get:()=>resolvedCredentials,enumerable:!0,configurable:!0});config.credentials=inputCredentials;const{signingEscapePath=!0,systemClockOffset=config.systemClockOffset||0,sha256}=config;let signer;signer=config.signer?normalizeProvider2(config.signer):config.regionInfoProvider?()=>normalizeProvider2(config.region)().then(async region=>[await config.regionInfoProvider(region,{useFipsEndpoint:await config.useFipsEndpoint(),useDualstackEndpoint:await config.useDualstackEndpoint()})||{},region]).then(([regionInfo,region])=>{const{signingRegion,signingService}=regionInfo;config.signingRegion=config.signingRegion||signingRegion||region;config.signingName=config.signingName||signingService||config.serviceId;const params={...config,credentials:config.credentials,region:config.signingRegion,service:config.signingName,sha256,uriEscapePath:signingEscapePath};return new(config.signerConstructor||SignatureV4)(params)}):async authScheme=>{const signingRegion=(authScheme=Object.assign({},{name:"sigv4",signingName:config.signingName||config.defaultSigningName,signingRegion:await normalizeProvider2(config.region)(),properties:{}},authScheme)).signingRegion,signingService=authScheme.signingName;config.signingRegion=config.signingRegion||signingRegion;config.signingName=config.signingName||signingService||config.serviceId;const params={...config,credentials:config.credentials,region:config.signingRegion,service:config.signingName,sha256,uriEscapePath:signingEscapePath};return new(config.signerConstructor||SignatureV4)(params)};return Object.assign(config,{systemClockOffset,signingEscapePath,signer})};TEXT_ENCODER="function"==typeof TextEncoder?new TextEncoder:null;calculateBodyLength=body=>{if("string"==typeof body){if(TEXT_ENCODER)return TEXT_ENCODER.encode(body).byteLength;let len=body.length;for(let i2=len-1;i2>=0;i2--){const code=body.charCodeAt(i2);code>127&&code<=2047?len++:code>2047&&code<=65535&&(len+=2);code>=56320&&code<=57343&&i2--}return len}if("number"==typeof body.byteLength)return body.byteLength;if("number"==typeof body.size)return body.size;throw new Error(`Body Length computation failed for ${body}`)};getAllAliases=(name,aliases)=>{const _aliases=[];name&&_aliases.push(name);if(aliases)for(const alias of aliases)_aliases.push(alias);return _aliases};getMiddlewareNameWithAliases=(name,aliases)=>`${name||"anonymous"}${aliases&&aliases.length>0?` (a.k.a. ${aliases.join(",")})`:""}`;constructStack=()=>{let absoluteEntries=[],relativeEntries=[],identifyOnResolve=!1;const entriesNameSet=new Set,sort=entries2=>entries2.sort((a2,b3)=>stepWeights[b3.step]-stepWeights[a2.step]||priorityWeights[b3.priority||"normal"]-priorityWeights[a2.priority||"normal"]),removeByName=toRemove=>{let isRemoved=!1;const filterCb=entry=>{const aliases=getAllAliases(entry.name,entry.aliases);if(aliases.includes(toRemove)){isRemoved=!0;for(const alias of aliases)entriesNameSet.delete(alias);return!1}return!0};absoluteEntries=absoluteEntries.filter(filterCb);relativeEntries=relativeEntries.filter(filterCb);return isRemoved},removeByReference=toRemove=>{let isRemoved=!1;const filterCb=entry=>{if(entry.middleware===toRemove){isRemoved=!0;for(const alias of getAllAliases(entry.name,entry.aliases))entriesNameSet.delete(alias);return!1}return!0};absoluteEntries=absoluteEntries.filter(filterCb);relativeEntries=relativeEntries.filter(filterCb);return isRemoved},cloneTo=toStack=>{var _a8;absoluteEntries.forEach(entry=>{toStack.add(entry.middleware,{...entry})});relativeEntries.forEach(entry=>{toStack.addRelativeTo(entry.middleware,{...entry})});null==(_a8=toStack.identifyOnResolve)||_a8.call(toStack,stack2.identifyOnResolve());return toStack},expandRelativeMiddlewareList=from=>{const expandedMiddlewareList=[];from.before.forEach(entry=>{0===entry.before.length&&0===entry.after.length?expandedMiddlewareList.push(entry):expandedMiddlewareList.push(...expandRelativeMiddlewareList(entry))});expandedMiddlewareList.push(from);from.after.reverse().forEach(entry=>{0===entry.before.length&&0===entry.after.length?expandedMiddlewareList.push(entry):expandedMiddlewareList.push(...expandRelativeMiddlewareList(entry))});return expandedMiddlewareList},getMiddlewareList=(debug2=!1)=>{const normalizedAbsoluteEntries=[],normalizedRelativeEntries=[],normalizedEntriesNameMap={};absoluteEntries.forEach(entry=>{const normalizedEntry={...entry,before:[],after:[]};for(const alias of getAllAliases(normalizedEntry.name,normalizedEntry.aliases))normalizedEntriesNameMap[alias]=normalizedEntry;normalizedAbsoluteEntries.push(normalizedEntry)});relativeEntries.forEach(entry=>{const normalizedEntry={...entry,before:[],after:[]};for(const alias of getAllAliases(normalizedEntry.name,normalizedEntry.aliases))normalizedEntriesNameMap[alias]=normalizedEntry;normalizedRelativeEntries.push(normalizedEntry)});normalizedRelativeEntries.forEach(entry=>{if(entry.toMiddleware){const toMiddleware=normalizedEntriesNameMap[entry.toMiddleware];if(void 0===toMiddleware){if(debug2)return;throw new Error(`${entry.toMiddleware} is not found when adding ${getMiddlewareNameWithAliases(entry.name,entry.aliases)} middleware ${entry.relation} ${entry.toMiddleware}`)}"after"===entry.relation&&toMiddleware.after.push(entry);"before"===entry.relation&&toMiddleware.before.push(entry)}});return sort(normalizedAbsoluteEntries).map(expandRelativeMiddlewareList).reduce((wholeList,expandedMiddlewareList)=>{wholeList.push(...expandedMiddlewareList);return wholeList},[])},stack2={add:(middleware,options={})=>{const{name,override,aliases:_aliases}=options,entry={step:"initialize",priority:"normal",middleware,...options},aliases=getAllAliases(name,_aliases);if(aliases.length>0){if(aliases.some(alias=>entriesNameSet.has(alias))){if(!override)throw new Error(`Duplicate middleware name '${getMiddlewareNameWithAliases(name,_aliases)}'`);for(const alias of aliases){const toOverrideIndex=absoluteEntries.findIndex(entry2=>{var _a8;return entry2.name===alias||(null==(_a8=entry2.aliases)?void 0:_a8.some(a2=>a2===alias))});if(-1===toOverrideIndex)continue;const toOverride=absoluteEntries[toOverrideIndex];if(toOverride.step!==entry.step||entry.priority!==toOverride.priority)throw new Error(`"${getMiddlewareNameWithAliases(toOverride.name,toOverride.aliases)}" middleware with ${toOverride.priority} priority in ${toOverride.step} step cannot be overridden by "${getMiddlewareNameWithAliases(name,_aliases)}" middleware with ${entry.priority} priority in ${entry.step} step.`);absoluteEntries.splice(toOverrideIndex,1)}}for(const alias of aliases)entriesNameSet.add(alias)}absoluteEntries.push(entry)},addRelativeTo:(middleware,options)=>{const{name,override,aliases:_aliases}=options,entry={middleware,...options},aliases=getAllAliases(name,_aliases);if(aliases.length>0){if(aliases.some(alias=>entriesNameSet.has(alias))){if(!override)throw new Error(`Duplicate middleware name '${getMiddlewareNameWithAliases(name,_aliases)}'`);for(const alias of aliases){const toOverrideIndex=relativeEntries.findIndex(entry2=>{var _a8;return entry2.name===alias||(null==(_a8=entry2.aliases)?void 0:_a8.some(a2=>a2===alias))});if(-1===toOverrideIndex)continue;const toOverride=relativeEntries[toOverrideIndex];if(toOverride.toMiddleware!==entry.toMiddleware||toOverride.relation!==entry.relation)throw new Error(`"${getMiddlewareNameWithAliases(toOverride.name,toOverride.aliases)}" middleware ${toOverride.relation} "${toOverride.toMiddleware}" middleware cannot be overridden by "${getMiddlewareNameWithAliases(name,_aliases)}" middleware ${entry.relation} "${entry.toMiddleware}" middleware.`);relativeEntries.splice(toOverrideIndex,1)}}for(const alias of aliases)entriesNameSet.add(alias)}relativeEntries.push(entry)},clone:()=>cloneTo(constructStack()),use:plugin3=>{plugin3.applyToStack(stack2)},remove:toRemove=>"string"==typeof toRemove?removeByName(toRemove):removeByReference(toRemove),removeByTag:toRemove=>{let isRemoved=!1;const filterCb=entry=>{const{tags,name,aliases:_aliases}=entry;if(tags&&tags.includes(toRemove)){const aliases=getAllAliases(name,_aliases);for(const alias of aliases)entriesNameSet.delete(alias);isRemoved=!0;return!1}return!0};absoluteEntries=absoluteEntries.filter(filterCb);relativeEntries=relativeEntries.filter(filterCb);return isRemoved},concat:from=>{var _a8,_b5;const cloned=cloneTo(constructStack());cloned.use(from);cloned.identifyOnResolve(identifyOnResolve||cloned.identifyOnResolve()||null!=(_b5=null==(_a8=from.identifyOnResolve)?void 0:_a8.call(from))&&_b5);return cloned},applyToStack:cloneTo,identify:()=>getMiddlewareList(!0).map(mw=>{var _a8;const step=null!=(_a8=mw.step)?_a8:mw.relation+" "+mw.toMiddleware;return getMiddlewareNameWithAliases(mw.name,mw.aliases)+" - "+step}),identifyOnResolve(toggle){"boolean"==typeof toggle&&(identifyOnResolve=toggle);return identifyOnResolve},resolve:(handler,context2)=>{for(const middleware of getMiddlewareList().map(entry=>entry.middleware).reverse())handler=middleware(handler,context2);identifyOnResolve&&console.log(stack2.identify());return handler}};return stack2};stepWeights={initialize:5,serialize:4,build:3,finalizeRequest:2,deserialize:1};priorityWeights={high:3,normal:2,low:1};Client=class{constructor(config){__publicField(this,"config");__publicField(this,"middlewareStack",constructStack());__publicField(this,"initConfig");__publicField(this,"handlers");this.config=config;const{protocol,protocolSettings}=config;protocolSettings&&"function"==typeof protocol&&(config.protocol=new protocol(protocolSettings))}send(command,optionsOrCb,cb2){const options="function"!=typeof optionsOrCb?optionsOrCb:void 0,callback="function"==typeof optionsOrCb?optionsOrCb:cb2;let handler;if(void 0===options&&!0===this.config.cacheMiddleware){this.handlers||(this.handlers=new WeakMap);const handlers3=this.handlers;if(handlers3.has(command.constructor))handler=handlers3.get(command.constructor);else{handler=command.resolveMiddleware(this.middlewareStack,this.config,options);handlers3.set(command.constructor,handler)}}else{delete this.handlers;handler=command.resolveMiddleware(this.middlewareStack,this.config,options)}if(!callback)return handler(command).then(result=>result.output);handler(command).then(result=>callback(null,result.output),err3=>callback(err3)).catch(()=>{})}destroy(){var _a8,_b5,_c3;null==(_c3=null==(_b5=null==(_a8=this.config)?void 0:_a8.requestHandler)?void 0:_b5.destroy)||_c3.call(_b5);delete this.handlers}};SENSITIVE_STRING="***SensitiveInformation***";Command=class{constructor(){__publicField(this,"middlewareStack",constructStack());__publicField(this,"schema")}static classBuilder(){return new ClassBuilder}resolveMiddlewareWithContext(clientStack,configuration,options,{middlewareFn,clientName,commandName,inputFilterSensitiveLog,outputFilterSensitiveLog,smithyContext,additionalContext,CommandCtor}){for(const mw of middlewareFn.bind(this)(CommandCtor,clientStack,configuration,options))this.middlewareStack.use(mw);const stack2=clientStack.concat(this.middlewareStack),{logger:logger2}=configuration,handlerExecutionContext={logger:logger2,clientName,commandName,inputFilterSensitiveLog,outputFilterSensitiveLog,[SMITHY_CONTEXT_KEY]:{commandInstance:this,...smithyContext},...additionalContext},{requestHandler}=configuration;return stack2.resolve(request2=>requestHandler.handle(request2.request,options||{}),handlerExecutionContext)}};ClassBuilder=class{constructor(){__publicField(this,"_init",()=>{});__publicField(this,"_ep",{});__publicField(this,"_middlewareFn",()=>[]);__publicField(this,"_commandName","");__publicField(this,"_clientName","");__publicField(this,"_additionalContext",{});__publicField(this,"_smithyContext",{});__publicField(this,"_inputFilterSensitiveLog");__publicField(this,"_outputFilterSensitiveLog");__publicField(this,"_serializer",null);__publicField(this,"_deserializer",null);__publicField(this,"_operationSchema")}init(cb2){this._init=cb2}ep(endpointParameterInstructions){this._ep=endpointParameterInstructions;return this}m(middlewareSupplier){this._middlewareFn=middlewareSupplier;return this}s(service,operation2,smithyContext={}){this._smithyContext={service,operation:operation2,...smithyContext};return this}c(additionalContext={}){this._additionalContext=additionalContext;return this}n(clientName,commandName){this._clientName=clientName;this._commandName=commandName;return this}f(inputFilter=_=>_,outputFilter=_=>_){this._inputFilterSensitiveLog=inputFilter;this._outputFilterSensitiveLog=outputFilter;return this}ser(serializer){this._serializer=serializer;return this}de(deserializer){this._deserializer=deserializer;return this}sc(operation2){this._operationSchema=operation2;this._smithyContext.operationSchema=operation2;return this}build(){const closure=this;let CommandRef;return CommandRef=class extends Command{constructor(...[input]){super();__publicField(this,"input");__publicField(this,"serialize",closure._serializer);__publicField(this,"deserialize",closure._deserializer);this.input=null!=input?input:{};closure._init(this);this.schema=closure._operationSchema}static getEndpointParameterInstructions(){return closure._ep}resolveMiddleware(stack2,configuration,options){var _a8,_b5,_c3,_d2;const op=closure._operationSchema,input=null!=(_a8=null==op?void 0:op[4])?_a8:null==op?void 0:op.input,output=null!=(_b5=null==op?void 0:op[5])?_b5:null==op?void 0:op.output;return this.resolveMiddlewareWithContext(stack2,configuration,options,{CommandCtor:CommandRef,middlewareFn:closure._middlewareFn,clientName:closure._clientName,commandName:closure._commandName,inputFilterSensitiveLog:null!=(_c3=closure._inputFilterSensitiveLog)?_c3:op?schemaLogFilter.bind(null,input):_=>_,outputFilterSensitiveLog:null!=(_d2=closure._outputFilterSensitiveLog)?_d2:op?schemaLogFilter.bind(null,output):_=>_,smithyContext:closure._smithyContext,additionalContext:closure._additionalContext})}}}};createAggregatedClient=(commands2,Client2,options)=>{for(const[command,CommandCtor]of Object.entries(commands2)){const methodImpl=async function(args,optionsOrCb,cb2){const command2=new CommandCtor(args);if("function"==typeof optionsOrCb)this.send(command2,optionsOrCb);else{if("function"!=typeof cb2)return this.send(command2,optionsOrCb);if("object"!=typeof optionsOrCb)throw new Error("Expected http options but got "+typeof optionsOrCb);this.send(command2,optionsOrCb||{},cb2)}},methodName=(command[0].toLowerCase()+command.slice(1)).replace(/Command$/,"");Client2.prototype[methodName]=methodImpl}const{paginators:paginators2={},waiters:waiters2={}}=null!=options?options:{};for(const[paginatorName,paginatorFn]of Object.entries(paginators2))void 0===Client2.prototype[paginatorName]&&(Client2.prototype[paginatorName]=function(commandInput={},paginationConfiguration,...rest){return paginatorFn({...paginationConfiguration,client:this},commandInput,...rest)});for(const[waiterName,waiterFn]of Object.entries(waiters2))void 0===Client2.prototype[waiterName]&&(Client2.prototype[waiterName]=async function(commandInput={},waiterConfiguration,...rest){let config=waiterConfiguration;"number"==typeof waiterConfiguration&&(config={maxWaitTime:waiterConfiguration});return waiterFn({...config,client:this},commandInput,...rest)})};ServiceException=class _ServiceException extends Error{constructor(options){super(options.message);__publicField(this,"$fault");__publicField(this,"$response");__publicField(this,"$retryable");__publicField(this,"$metadata");Object.setPrototypeOf(this,Object.getPrototypeOf(this).constructor.prototype);this.name=options.name;this.$fault=options.$fault;this.$metadata=options.$metadata}static isInstance(value){if(!value)return!1;const candidate=value;return _ServiceException.prototype.isPrototypeOf(candidate)||Boolean(candidate.$fault)&&Boolean(candidate.$metadata)&&("client"===candidate.$fault||"server"===candidate.$fault)}static[Symbol.hasInstance](instance){if(!instance)return!1;const candidate=instance;return this===_ServiceException?_ServiceException.isInstance(instance):!!_ServiceException.isInstance(instance)&&(candidate.name&&this.name?this.prototype.isPrototypeOf(instance)||candidate.name===this.name:this.prototype.isPrototypeOf(instance))}};decorateServiceException=(exception,additions={})=>{Object.entries(additions).filter(([,v2])=>void 0!==v2).forEach(([k2,v2])=>{null!=exception[k2]&&""!==exception[k2]||(exception[k2]=v2)});const message=exception.message||exception.Message||"UnknownError";exception.message=message;delete exception.Message;return exception};loadConfigsForDefaultMode=mode=>{switch(mode){case"standard":return{retryMode:"standard",connectionTimeout:3100};case"in-region":return{retryMode:"standard",connectionTimeout:1100};case"cross-region":return{retryMode:"standard",connectionTimeout:3100};case"mobile":return{retryMode:"standard",connectionTimeout:3e4};default:return{}}};knownAlgorithms=Object.values(AlgorithmId);getChecksumConfiguration2=runtimeConfig=>{var _a8;const checksumAlgorithms=[];for(const id in AlgorithmId){const algorithmId=AlgorithmId[id];void 0!==runtimeConfig[algorithmId]&&checksumAlgorithms.push({algorithmId:()=>algorithmId,checksumConstructor:()=>runtimeConfig[algorithmId]})}for(const[id,ChecksumCtor]of Object.entries(null!=(_a8=runtimeConfig.checksumAlgorithms)?_a8:{}))checksumAlgorithms.push({algorithmId:()=>id,checksumConstructor:()=>ChecksumCtor});return{addChecksumAlgorithm(algo2){var _a9;runtimeConfig.checksumAlgorithms=null!=(_a9=runtimeConfig.checksumAlgorithms)?_a9:{};const id=algo2.algorithmId(),ctor=algo2.checksumConstructor();knownAlgorithms.includes(id)?runtimeConfig.checksumAlgorithms[id.toUpperCase()]=ctor:runtimeConfig.checksumAlgorithms[id]=ctor;checksumAlgorithms.push(algo2)},checksumAlgorithms:()=>checksumAlgorithms}};resolveChecksumRuntimeConfig2=clientConfig=>{const runtimeConfig={};clientConfig.checksumAlgorithms().forEach(checksumAlgorithm=>{const id=checksumAlgorithm.algorithmId();knownAlgorithms.includes(id)&&(runtimeConfig[id]=checksumAlgorithm.checksumConstructor())});return runtimeConfig};getRetryConfiguration=runtimeConfig=>({setRetryStrategy(retryStrategy){runtimeConfig.retryStrategy=retryStrategy},retryStrategy:()=>runtimeConfig.retryStrategy});resolveRetryRuntimeConfig=retryStrategyConfiguration=>{const runtimeConfig={};runtimeConfig.retryStrategy=retryStrategyConfiguration.retryStrategy();return runtimeConfig};getDefaultExtensionConfiguration=runtimeConfig=>Object.assign(getChecksumConfiguration2(runtimeConfig),getRetryConfiguration(runtimeConfig));resolveDefaultRuntimeConfig=config=>Object.assign(resolveChecksumRuntimeConfig2(config),resolveRetryRuntimeConfig(config));getValueFromTextNode=obj=>{for(const key3 in obj)obj.hasOwnProperty(key3)&&void 0!==obj[key3]["#text"]?obj[key3]=obj[key3]["#text"]:"object"==typeof obj[key3]&&null!==obj[key3]&&(obj[key3]=getValueFromTextNode(obj[key3]));return obj};NoOpLogger=class{trace(){}debug(){}info(){}warn(){}error(){}};ProtocolLib=class{constructor(queryCompat=!1){__publicField(this,"queryCompat");__publicField(this,"errorRegistry");this.queryCompat=queryCompat}resolveRestContentType(defaultContentType,inputSchema){const members=inputSchema.getMemberSchemas(),httpPayloadMember=Object.values(members).find(m3=>!!m3.getMergedTraits().httpPayload);return httpPayloadMember?httpPayloadMember.getMergedTraits().mediaType||(httpPayloadMember.isStringSchema()?"text/plain":httpPayloadMember.isBlobSchema()?"application/octet-stream":defaultContentType):!inputSchema.isUnitSchema()&&Object.values(members).find(m3=>{const{httpQuery,httpQueryParams,httpHeader,httpLabel,httpPrefixHeaders}=m3.getMergedTraits();return!(httpQuery||httpQueryParams||httpHeader||httpLabel||void 0!==httpPrefixHeaders)})?defaultContentType:void 0}async getErrorSchemaOrThrowBaseException(errorIdentifier,defaultNamespace,response,dataObject,metadata,getErrorSchema){var _a8,_b5,_c3,_d2,_e2,_f,_g,_h2,_i2;let errorName=errorIdentifier;errorIdentifier.includes("#")&&([,errorName]=errorIdentifier.split("#"));const errorMetadata={$metadata:metadata,$fault:response.statusCode<500?"client":"server"};if(!this.errorRegistry)throw new Error("@aws-sdk/core/protocols - error handler not initialized.");try{return{errorSchema:null!=(_a8=null==getErrorSchema?void 0:getErrorSchema(this.errorRegistry,errorName))?_a8:this.errorRegistry.getSchema(errorIdentifier),errorMetadata}}catch(e3){dataObject.message=null!=(_c3=null!=(_b5=dataObject.message)?_b5:dataObject.Message)?_c3:"UnknownError";const synthetic=this.errorRegistry,baseExceptionSchema=synthetic.getBaseException();if(baseExceptionSchema){const ErrorCtor=null!=(_d2=synthetic.getErrorCtor(baseExceptionSchema))?_d2:Error;throw this.decorateServiceException(Object.assign(new ErrorCtor({name:errorName}),errorMetadata),dataObject)}const d4=dataObject,message=null!=(_i2=null!=(_g=null!=(_e2=null==d4?void 0:d4.message)?_e2:null==d4?void 0:d4.Message)?_g:null==(_f=null==d4?void 0:d4.Error)?void 0:_f.Message)?_i2:null==(_h2=null==d4?void 0:d4.Error)?void 0:_h2.message;throw this.decorateServiceException(Object.assign(new Error(message),{name:errorName},errorMetadata),dataObject)}}compose(composite,errorIdentifier,defaultNamespace){let namespace=defaultNamespace;errorIdentifier.includes("#")&&([namespace]=errorIdentifier.split("#"));const staticRegistry=TypeRegistry.for(namespace),defaultSyntheticRegistry=TypeRegistry.for("smithy.ts.sdk.synthetic."+defaultNamespace);composite.copyFrom(staticRegistry);composite.copyFrom(defaultSyntheticRegistry);this.errorRegistry=composite}decorateServiceException(exception,additions={}){var _a8,_b5,_c3,_d2,_e2,_f,_g;if(this.queryCompat){const msg=null!=(_a8=exception.Message)?_a8:additions.Message,error=decorateServiceException(exception,additions);msg&&(error.message=msg);error.Error={...error.Error,Type:null==(_b5=error.Error)?void 0:_b5.Type,Code:null==(_c3=error.Error)?void 0:_c3.Code,Message:null!=(_g=null!=(_f=null==(_d2=error.Error)?void 0:_d2.message)?_f:null==(_e2=error.Error)?void 0:_e2.Message)?_g:msg};const reqId=error.$metadata.requestId;reqId&&(error.RequestId=reqId);return error}return decorateServiceException(exception,additions)}setQueryCompatError(output,response){var _a8;const queryErrorHeader=null==(_a8=response.headers)?void 0:_a8["x-amzn-query-error"];if(void 0!==output&&null!=queryErrorHeader){const[Code,Type]=queryErrorHeader.split(";"),entries2=Object.entries(output),Error2={Code,Type};Object.assign(output,Error2);for(const[k2,v2]of entries2)Error2["message"===k2?"Message":k2]=v2;delete Error2.__type;output.Error=Error2}}queryCompatOutput(queryCompatErrorData,errorData){queryCompatErrorData.Error&&(errorData.Error=queryCompatErrorData.Error);queryCompatErrorData.Type&&(errorData.Type=queryCompatErrorData.Type);queryCompatErrorData.Code&&(errorData.Code=queryCompatErrorData.Code)}findQueryCompatibleError(registry,errorName){try{return registry.getSchema(errorName)}catch(e3){return registry.find(schema=>{var _a8;return(null==(_a8=NormalizedSchema.of(schema).getMergedTraits().awsQueryError)?void 0:_a8[0])===errorName})}}};SerdeContextConfig=class{constructor(){__publicField(this,"serdeContext")}setSerdeContext(serdeContext){this.serdeContext=serdeContext}};UnionSerde=class{constructor(from,to){__publicField(this,"from");__publicField(this,"to");__publicField(this,"keys");this.from=from;this.to=to;this.keys=new Set(Object.keys(this.from).filter(k2=>"__type"!==k2))}mark(key3){this.keys.delete(key3)}hasUnknown(){return 1===this.keys.size&&0===Object.keys(this.to).length}writeUnknown(){if(this.hasUnknown()){const k2=this.keys.values().next().value,v2=this.from[k2];this.to.$unknown=[k2,v2]}}};init_dist_es();ATTR_ESCAPE_RE=/[&<>"]/g;ATTR_ESCAPE_MAP={"&":"&","<":"<",">":">",'"':"""};ELEMENT_ESCAPE_RE=/[&"'<>\r\n\u0085\u2028]/g;ELEMENT_ESCAPE_MAP={"&":"&",'"':""","'":"'","<":"<",">":">","\r":" ","\n":" ","…":"…","\u2028":"
"};XmlText=class{constructor(value){__publicField(this,"value");this.value=value}toString(){return escapeElement(""+this.value)}};XmlNode=class _XmlNode{constructor(name,children=[]){__publicField(this,"name");__publicField(this,"children");__publicField(this,"attributes",{});this.name=name;this.children=children}static of(name,childText,withName){const node=new _XmlNode(name);void 0!==childText&&node.addChildNode(new XmlText(childText));void 0!==withName&&node.withName(withName);return node}withName(name){this.name=name;return this}addAttribute(name,value){this.attributes[name]=value;return this}addChildNode(child2){this.children.push(child2);return this}removeAttribute(name){delete this.attributes[name];return this}n(name){this.name=name;return this}c(child2){this.children.push(child2);return this}a(name,value){null!=value&&(this.attributes[name]=value);return this}cc(input,field,withName=field){if(null!=input[field]){const node=_XmlNode.of(field,input[field]).withName(withName);this.c(node)}}l(input,listName,memberName,valueProvider){null!=input[listName]&&valueProvider().map(node=>{node.withName(memberName);this.c(node)})}lc(input,listName,memberName,valueProvider){if(null!=input[listName]){const nodes=valueProvider(),containerNode=new _XmlNode(memberName);nodes.map(node=>{containerNode.c(node)});this.c(containerNode)}}toString(){const hasChildren=Boolean(this.children.length);let xmlText=`<${this.name}`;const attributes=this.attributes;for(const attributeName of Object.keys(attributes)){const attribute=attributes[attributeName];null!=attribute&&(xmlText+=` ${attributeName}="${escapeAttribute(""+attribute)}"`)}return xmlText+(hasChildren?`>${this.children.map(c3=>c3.toString()).join("")}`:"/>")}};init_dist_es();XmlShapeDeserializer=class extends SerdeContextConfig{constructor(settings){super();__publicField(this,"settings");__publicField(this,"stringDeserializer");this.settings=settings;this.stringDeserializer=new FromStringShapeDeserializer(settings)}setSerdeContext(serdeContext){this.serdeContext=serdeContext;this.stringDeserializer.setSerdeContext(serdeContext)}read(schema,bytes,key3){var _a8,_b5;const ns=NormalizedSchema.of(schema),memberSchemas=ns.getMemberSchemas();if(ns.isStructSchema()&&ns.isMemberSchema()&&Object.values(memberSchemas).find(memberNs=>!!memberNs.getMemberTraits().eventPayload)){const output={},memberName=Object.keys(memberSchemas)[0];memberSchemas[memberName].isBlobSchema()?output[memberName]=bytes:output[memberName]=this.read(memberSchemas[memberName],bytes);return output}const xmlString=(null!=(_b5=null==(_a8=this.serdeContext)?void 0:_a8.utf8Encoder)?_b5:toUtf8)(bytes),parsedObject=this.parseXml(xmlString);return this.readSchema(schema,key3?parsedObject[key3]:parsedObject)}readSchema(_schema,value){var _a8,_b5,_c3,_d2,_e2,_f;const ns=NormalizedSchema.of(_schema);if(ns.isUnitSchema())return;const traits=ns.getMergedTraits();if(ns.isListSchema()&&!Array.isArray(value))return this.readSchema(ns,[value]);if(null==value)return value;if("object"==typeof value){const flat=!!traits.xmlFlattened;if(ns.isListSchema()){const listValue=ns.getValueSchema(),buffer2=[],sourceKey=null!=(_a8=listValue.getMergedTraits().xmlName)?_a8:"member",source2=flat?value:(null!=(_b5=value[0])?_b5:value)[sourceKey];if(null==source2)return buffer2;const sourceArray=Array.isArray(source2)?source2:[source2];for(const v2 of sourceArray)buffer2.push(this.readSchema(listValue,v2));return buffer2}const buffer={};if(ns.isMapSchema()){const keyNs=ns.getKeySchema(),memberNs=ns.getValueSchema();let entries2;entries2=flat?Array.isArray(value)?value:[value]:Array.isArray(value.entry)?value.entry:[value.entry];const keyProperty=null!=(_c3=keyNs.getMergedTraits().xmlName)?_c3:"key",valueProperty=null!=(_d2=memberNs.getMergedTraits().xmlName)?_d2:"value";for(const entry of entries2){const key3=entry[keyProperty],value2=entry[valueProperty];buffer[key3]=this.readSchema(memberNs,value2)}return buffer}if(ns.isStructSchema()){const union=ns.isUnionSchema();let unionSerde;union&&(unionSerde=new UnionSerde(value,buffer));for(const[memberName,memberSchema]of ns.structIterator()){const memberTraits=memberSchema.getMergedTraits(),xmlObjectKey=memberTraits.httpPayload?null!=(_f=memberTraits.xmlName)?_f:memberSchema.getName():null!=(_e2=memberSchema.getMemberTraits().xmlName)?_e2:memberName;union&&unionSerde.mark(xmlObjectKey);null!=value[xmlObjectKey]&&(buffer[memberName]=this.readSchema(memberSchema,value[xmlObjectKey]))}union&&unionSerde.writeUnknown();return buffer}if(ns.isDocumentSchema())return value;throw new Error(`@aws-sdk/core/protocols - xml deserializer unhandled schema type for ${ns.getName(!0)}`)}return ns.isListSchema()?[]:ns.isMapSchema()||ns.isStructSchema()?{}:this.stringDeserializer.read(ns,value)}parseXml(xml){if(xml.length){let parsedObj;try{parsedObj=parseXML(xml)}catch(e3){e3&&"object"==typeof e3&&Object.defineProperty(e3,"$responseBodyText",{value:xml});throw e3}const textNodeName="#text",key3=Object.keys(parsedObj)[0],parsedObjToReturn=parsedObj[key3];if(parsedObjToReturn[textNodeName]){parsedObjToReturn[key3]=parsedObjToReturn[textNodeName];delete parsedObjToReturn[textNodeName]}return getValueFromTextNode(parsedObjToReturn)}return{}}};loadRestXmlErrorCode=(output,data)=>{var _a8;return void 0!==(null==(_a8=null==data?void 0:data.Error)?void 0:_a8.Code)?data.Error.Code:void 0!==(null==data?void 0:data.Code)?data.Code:404==output.statusCode?"NotFound":void 0};XmlShapeSerializer=class extends SerdeContextConfig{constructor(settings){super();__publicField(this,"settings");__publicField(this,"stringBuffer");__publicField(this,"byteBuffer");__publicField(this,"buffer");this.settings=settings}write(schema,value){var _a8,_b5;const ns=NormalizedSchema.of(schema);if(ns.isStringSchema()&&"string"==typeof value)this.stringBuffer=value;else if(ns.isBlobSchema())this.byteBuffer="byteLength"in value?value:(null!=(_b5=null==(_a8=this.serdeContext)?void 0:_a8.base64Decoder)?_b5:fromBase64)(value);else{this.buffer=this.writeStruct(ns,value,void 0);const traits=ns.getMergedTraits();traits.httpPayload&&!traits.xmlName&&this.buffer.withName(ns.getName())}}flush(){var _a8;if(void 0!==this.byteBuffer){const bytes=this.byteBuffer;delete this.byteBuffer;return bytes}if(void 0!==this.stringBuffer){const str=this.stringBuffer;delete this.stringBuffer;return str}const buffer=this.buffer;this.settings.xmlNamespace&&((null==(_a8=null==buffer?void 0:buffer.attributes)?void 0:_a8.xmlns)||buffer.addAttribute("xmlns",this.settings.xmlNamespace));delete this.buffer;return buffer.toString()}writeStruct(ns,value,parentXmlns){var _a8,_b5,_c3,_d2;const traits=ns.getMergedTraits(),name=ns.isMemberSchema()&&!traits.httpPayload?null!=(_a8=ns.getMemberTraits().xmlName)?_a8:ns.getMemberName():null!=(_b5=traits.xmlName)?_b5:ns.getName();if(!name||!ns.isStructSchema())throw new Error(`@aws-sdk/core/protocols - xml serializer, cannot write struct with empty name or non-struct, schema=${ns.getName(!0)}.`);const structXmlNode=XmlNode.of(name),[xmlnsAttr,xmlns]=this.getXmlnsAttribute(ns,parentXmlns);for(const[memberName,memberSchema]of ns.structIterator()){const val=value[memberName];if(null!=val||memberSchema.isIdempotencyToken()){if(memberSchema.getMergedTraits().xmlAttribute){structXmlNode.addAttribute(null!=(_c3=memberSchema.getMergedTraits().xmlName)?_c3:memberName,this.writeSimple(memberSchema,val));continue}if(memberSchema.isListSchema())this.writeList(memberSchema,val,structXmlNode,xmlns);else if(memberSchema.isMapSchema())this.writeMap(memberSchema,val,structXmlNode,xmlns);else if(memberSchema.isStructSchema())structXmlNode.addChildNode(this.writeStruct(memberSchema,val,xmlns));else{const memberNode=XmlNode.of(null!=(_d2=memberSchema.getMergedTraits().xmlName)?_d2:memberSchema.getMemberName());this.writeSimpleInto(memberSchema,val,memberNode,xmlns);structXmlNode.addChildNode(memberNode)}}}const{$unknown}=value;if($unknown&&ns.isUnionSchema()&&Array.isArray($unknown)&&1===Object.keys(value).length){const[k2,v2]=$unknown,node=XmlNode.of(k2);if("string"!=typeof v2){if(!(value instanceof XmlNode||value instanceof XmlText))throw new Error("@aws-sdk - $unknown union member in XML requires value of type string, @aws-sdk/xml-builder::XmlNode or XmlText.");structXmlNode.addChildNode(value)}this.writeSimpleInto(0,v2,node,xmlns);structXmlNode.addChildNode(node)}xmlns&&structXmlNode.addAttribute(xmlnsAttr,xmlns);return structXmlNode}writeList(listMember,array,container,parentXmlns){var _a8;if(!listMember.isMemberSchema())throw new Error(`@aws-sdk/core/protocols - xml serializer, cannot write non-member list: ${listMember.getName(!0)}`);const listTraits=listMember.getMergedTraits(),listValueSchema=listMember.getValueSchema(),listValueTraits=listValueSchema.getMergedTraits(),sparse=!!listValueTraits.sparse,flat=!!listTraits.xmlFlattened,[xmlnsAttr,xmlns]=this.getXmlnsAttribute(listMember,parentXmlns),writeItem=(container2,value)=>{var _a9,_b5,_c3,_d2;if(listValueSchema.isListSchema())this.writeList(listValueSchema,Array.isArray(value)?value:[value],container2,xmlns);else if(listValueSchema.isMapSchema())this.writeMap(listValueSchema,value,container2,xmlns);else if(listValueSchema.isStructSchema()){const struct=this.writeStruct(listValueSchema,value,xmlns);container2.addChildNode(struct.withName(flat?null!=(_a9=listTraits.xmlName)?_a9:listMember.getMemberName():null!=(_b5=listValueTraits.xmlName)?_b5:"member"))}else{const listItemNode=XmlNode.of(flat?null!=(_c3=listTraits.xmlName)?_c3:listMember.getMemberName():null!=(_d2=listValueTraits.xmlName)?_d2:"member");this.writeSimpleInto(listValueSchema,value,listItemNode,xmlns);container2.addChildNode(listItemNode)}};if(flat)for(const value of array)(sparse||null!=value)&&writeItem(container,value);else{const listNode=XmlNode.of(null!=(_a8=listTraits.xmlName)?_a8:listMember.getMemberName());xmlns&&listNode.addAttribute(xmlnsAttr,xmlns);for(const value of array)(sparse||null!=value)&&writeItem(listNode,value);container.addChildNode(listNode)}}writeMap(mapMember,map3,container,parentXmlns,containerIsMap=!1){var _a8,_b5,_c3,_d2;if(!mapMember.isMemberSchema())throw new Error(`@aws-sdk/core/protocols - xml serializer, cannot write non-member map: ${mapMember.getName(!0)}`);const mapTraits=mapMember.getMergedTraits(),mapKeySchema=mapMember.getKeySchema(),keyTag=null!=(_a8=mapKeySchema.getMergedTraits().xmlName)?_a8:"key",mapValueSchema=mapMember.getValueSchema(),mapValueTraits=mapValueSchema.getMergedTraits(),valueTag=null!=(_b5=mapValueTraits.xmlName)?_b5:"value",sparse=!!mapValueTraits.sparse,flat=!!mapTraits.xmlFlattened,[xmlnsAttr,xmlns]=this.getXmlnsAttribute(mapMember,parentXmlns),addKeyValue=(entry,key3,val)=>{const keyNode=XmlNode.of(keyTag,key3),[keyXmlnsAttr,keyXmlns]=this.getXmlnsAttribute(mapKeySchema,xmlns);keyXmlns&&keyNode.addAttribute(keyXmlnsAttr,keyXmlns);entry.addChildNode(keyNode);let valueNode=XmlNode.of(valueTag);mapValueSchema.isListSchema()?this.writeList(mapValueSchema,val,valueNode,xmlns):mapValueSchema.isMapSchema()?this.writeMap(mapValueSchema,val,valueNode,xmlns,!0):mapValueSchema.isStructSchema()?valueNode=this.writeStruct(mapValueSchema,val,xmlns):this.writeSimpleInto(mapValueSchema,val,valueNode,xmlns);entry.addChildNode(valueNode)};if(flat){for(const[key3,val]of Object.entries(map3))if(sparse||null!=val){const entry=XmlNode.of(null!=(_c3=mapTraits.xmlName)?_c3:mapMember.getMemberName());addKeyValue(entry,key3,val);container.addChildNode(entry)}}else{let mapNode;if(!containerIsMap){mapNode=XmlNode.of(null!=(_d2=mapTraits.xmlName)?_d2:mapMember.getMemberName());xmlns&&mapNode.addAttribute(xmlnsAttr,xmlns);container.addChildNode(mapNode)}for(const[key3,val]of Object.entries(map3))if(sparse||null!=val){const entry=XmlNode.of("entry");addKeyValue(entry,key3,val);(containerIsMap?container:mapNode).addChildNode(entry)}}}writeSimple(_schema,value){var _a8,_b5;if(null===value)throw new Error("@aws-sdk/core/protocols - (XML serializer) cannot write null value.");const ns=NormalizedSchema.of(_schema);let nodeContents=null;if(value&&"object"==typeof value)if(ns.isBlobSchema())nodeContents=(null!=(_b5=null==(_a8=this.serdeContext)?void 0:_a8.base64Encoder)?_b5:toBase64)(value);else{if(!(ns.isTimestampSchema()&&value instanceof Date)){if(ns.isBigDecimalSchema()&&value)return value instanceof NumericValue?value.string:String(value);throw ns.isMapSchema()||ns.isListSchema()?new Error("@aws-sdk/core/protocols - xml serializer, cannot call _write() on List/Map schema, call writeList or writeMap() instead."):new Error(`@aws-sdk/core/protocols - xml serializer, unhandled schema type for object value and schema: ${ns.getName(!0)}`)}switch(determineTimestampFormat(ns,this.settings)){case 5:nodeContents=value.toISOString().replace(".000Z","Z");break;case 6:nodeContents=dateToUtcString(value);break;case 7:nodeContents=String(value.getTime()/1e3);break;default:console.warn("Missing timestamp format, using http date",value);nodeContents=dateToUtcString(value);break}}(ns.isBooleanSchema()||ns.isNumericSchema()||ns.isBigIntegerSchema()||ns.isBigDecimalSchema())&&(nodeContents=String(value));ns.isStringSchema()&&(nodeContents=void 0===value&&ns.isIdempotencyToken()?v4():String(value));if(null===nodeContents)throw new Error(`Unhandled schema-value pair ${ns.getName(!0)}=${value}`);return nodeContents}writeSimpleInto(_schema,value,into,parentXmlns){const nodeContents=this.writeSimple(_schema,value),ns=NormalizedSchema.of(_schema),content=new XmlText(nodeContents),[xmlnsAttr,xmlns]=this.getXmlnsAttribute(ns,parentXmlns);xmlns&&into.addAttribute(xmlnsAttr,xmlns);into.addChildNode(content)}getXmlnsAttribute(ns,parentXmlns){var _a8;const traits=ns.getMergedTraits(),[prefix,xmlns]=null!=(_a8=traits.xmlNamespace)?_a8:[];return xmlns&&xmlns!==parentXmlns?[prefix?`xmlns:${prefix}`:"xmlns",xmlns]:[void 0,void 0]}};XmlCodec=class extends SerdeContextConfig{constructor(settings){super();__publicField(this,"settings");this.settings=settings}createSerializer(){const serializer=new XmlShapeSerializer(this.settings);serializer.setSerdeContext(this.serdeContext);return serializer}createDeserializer(){const deserializer=new XmlShapeDeserializer(this.settings);deserializer.setSerdeContext(this.serdeContext);return deserializer}};AwsRestXmlProtocol=class extends HttpBindingProtocol{constructor(options){super(options);__publicField(this,"codec");__publicField(this,"serializer");__publicField(this,"deserializer");__publicField(this,"mixin",new ProtocolLib);const settings={timestampFormat:{useTrait:!0,default:5},httpBindings:!0,xmlNamespace:options.xmlNamespace,serviceNamespace:options.defaultNamespace};this.codec=new XmlCodec(settings);this.serializer=new HttpInterceptingShapeSerializer(this.codec.createSerializer(),settings);this.deserializer=new HttpInterceptingShapeDeserializer(this.codec.createDeserializer(),settings);this.compositeErrorRegistry}getPayloadCodec(){return this.codec}getShapeId(){return"aws.protocols#restXml"}async serializeRequest(operationSchema,input,context2){const request2=await super.serializeRequest(operationSchema,input,context2),inputSchema=NormalizedSchema.of(operationSchema.input);if(!request2.headers["content-type"]){const contentType=this.mixin.resolveRestContentType(this.getDefaultContentType(),inputSchema);contentType&&(request2.headers["content-type"]=contentType)}"string"!=typeof request2.body||request2.headers["content-type"]!==this.getDefaultContentType()||request2.body.startsWith("'+request2.body);return request2}async deserializeResponse(operationSchema,context2,response){return super.deserializeResponse(operationSchema,context2,response)}async handleError(operationSchema,context2,response,dataObject,metadata){var _a8,_b5,_c3,_d2,_e2,_f,_g,_h2,_i2,_j,_k;const errorIdentifier=null!=(_a8=loadRestXmlErrorCode(response,dataObject))?_a8:"Unknown";this.mixin.compose(this.compositeErrorRegistry,errorIdentifier,this.options.defaultNamespace);if(dataObject.Error&&"object"==typeof dataObject.Error)for(const key3 of Object.keys(dataObject.Error)){dataObject[key3]=dataObject.Error[key3];"message"===key3.toLowerCase()&&(dataObject.message=dataObject.Error[key3])}dataObject.RequestId&&!metadata.requestId&&(metadata.requestId=dataObject.RequestId);const{errorSchema,errorMetadata}=await this.mixin.getErrorSchemaOrThrowBaseException(errorIdentifier,this.options.defaultNamespace,response,dataObject,metadata),ns=NormalizedSchema.of(errorSchema),message=null!=(_g=null!=(_f=null!=(_e2=null!=(_d2=null==(_b5=dataObject.Error)?void 0:_b5.message)?_d2:null==(_c3=dataObject.Error)?void 0:_c3.Message)?_e2:dataObject.message)?_f:dataObject.Message)?_g:"UnknownError",exception=new(null!=(_h2=this.compositeErrorRegistry.getErrorCtor(errorSchema))?_h2:Error)(message);await this.deserializeHttpMessage(errorSchema,context2,response,dataObject);const output={};for(const[name,member2]of ns.structIterator()){const target=null!=(_i2=member2.getMergedTraits().xmlName)?_i2:name,value=null!=(_k=null==(_j=dataObject.Error)?void 0:_j[target])?_k:dataObject[target];output[name]=this.codec.createDeserializer().readSchema(member2,value)}throw this.mixin.decorateServiceException(Object.assign(exception,errorMetadata,{$fault:ns.getMergedTraits().error,message},output),dataObject)}getDefaultContentType(){return"application/xml"}hasUnstructuredPayloadBinding(ns){for(const[,member2]of ns.structIterator())if(member2.getMergedTraits().httpPayload)return!(member2.isStructSchema()||member2.isMapSchema()||member2.isListSchema());return!1}};getChecksumAlgorithmForRequest=(input,{requestChecksumRequired,requestAlgorithmMember,requestChecksumCalculation})=>requestAlgorithmMember?input[requestAlgorithmMember]?input[requestAlgorithmMember]:void 0:"WHEN_SUPPORTED"===requestChecksumCalculation||requestChecksumRequired?DEFAULT_CHECKSUM_ALGORITHM:void 0;getChecksumLocationName=algorithm=>algorithm===ChecksumAlgorithm.MD5?"content-md5":`x-amz-checksum-${algorithm.toLowerCase()}`;hasHeader2=(header,headers)=>{const soughtHeader=header.toLowerCase();for(const headerName of Object.keys(headers))if(soughtHeader===headerName.toLowerCase())return!0;return!1};hasHeaderWithPrefix=(headerPrefix,headers)=>{const soughtHeaderPrefix=headerPrefix.toLowerCase();for(const headerName of Object.keys(headers))if(headerName.toLowerCase().startsWith(soughtHeaderPrefix))return!0;return!1};isStreaming=body=>void 0!==body&&"string"!=typeof body&&!ArrayBuffer.isView(body)&&!isArrayBuffer(body);__assign=function(){__assign=Object.assign||function __assign2(t9){var s2,i2,n3,p2;for(i2=1,n3=arguments.length;i2(new TextEncoder).encode(input);fromUtf83="undefined"!=typeof Buffer&&Buffer.from?function(input){return Buffer.from(input,"utf8")}:fromUtf82;AwsCrc32c=function(){function AwsCrc32c2(){this.crc32c=new Crc32c}AwsCrc32c2.prototype.update=function(toHash){isEmptyData(toHash)||this.crc32c.update(convertToBuffer(toHash))};AwsCrc32c2.prototype.digest=function(){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(_a8){return[2,numToUint8(this.crc32c.digest())]})})};AwsCrc32c2.prototype.reset=function(){this.crc32c=new Crc32c};return AwsCrc32c2}();Crc32c=function(){function Crc32c2(){this.checksum=4294967295}Crc32c2.prototype.update=function(data){var e_1,_a8,data_1,data_1_1,byte;try{for(data_1_1=(data_1=__values(data)).next();!data_1_1.done;data_1_1=data_1.next()){byte=data_1_1.value;this.checksum=this.checksum>>>8^lookupTable[255&(this.checksum^byte)]}}catch(e_1_1){e_1={error:e_1_1}}finally{try{data_1_1&&!data_1_1.done&&(_a8=data_1.return)&&_a8.call(data_1)}finally{if(e_1)throw e_1.error}}return this};Crc32c2.prototype.digest=function(){return(4294967295^this.checksum)>>>0};return Crc32c2}();lookupTable=uint32ArrayFrom([0,4067132163,3778769143,324072436,3348797215,904991772,648144872,3570033899,2329499855,2024987596,1809983544,2575936315,1296289744,3207089363,2893594407,1578318884,274646895,3795141740,4049975192,51262619,3619967088,632279923,922689671,3298075524,2592579488,1760304291,2075979607,2312596564,1562183871,2943781820,3156637768,1313733451,549293790,3537243613,3246849577,871202090,3878099393,357341890,102525238,4101499445,2858735121,1477399826,1264559846,3107202533,1845379342,2677391885,2361733625,2125378298,820201905,3263744690,3520608582,598981189,4151959214,85089709,373468761,3827903834,3124367742,1213305469,1526817161,2842354314,2107672161,2412447074,2627466902,1861252501,1098587580,3004210879,2688576843,1378610760,2262928035,1955203488,1742404180,2511436119,3416409459,969524848,714683780,3639785095,205050476,4266873199,3976438427,526918040,1361435347,2739821008,2954799652,1114974503,2529119692,1691668175,2005155131,2247081528,3690758684,697762079,986182379,3366744552,476452099,3993867776,4250756596,255256311,1640403810,2477592673,2164122517,1922457750,2791048317,1412925310,1197962378,3037525897,3944729517,427051182,170179418,4165941337,746937522,3740196785,3451792453,1070968646,1905808397,2213795598,2426610938,1657317369,3053634322,1147748369,1463399397,2773627110,4215344322,153784257,444234805,3893493558,1021025245,3467647198,3722505002,797665321,2197175160,1889384571,1674398607,2443626636,1164749927,3070701412,2757221520,1446797203,137323447,4198817972,3910406976,461344835,3484808360,1037989803,781091935,3705997148,2460548119,1623424788,1939049696,2180517859,1429367560,2807687179,3020495871,1180866812,410100952,3927582683,4182430767,186734380,3756733383,763408580,1053836080,3434856499,2722870694,1344288421,1131464017,2971354706,1708204729,2545590714,2229949006,1988219213,680717673,3673779818,3383336350,1002577565,4010310262,493091189,238226049,4233660802,2987750089,1082061258,1395524158,2705686845,1972364758,2279892693,2494862625,1725896226,952904198,3399985413,3656866545,731699698,4283874585,222117402,510512622,3959836397,3280807620,837199303,582374963,3504198960,68661723,4135334616,3844915500,390545967,1230274059,3141532936,2825850620,1510247935,2395924756,2091215383,1878366691,2644384480,3553878443,565732008,854102364,3229815391,340358836,3861050807,4117890627,119113024,1493875044,2875275879,3090270611,1247431312,2660249211,1828433272,2141937292,2378227087,3811616794,291187481,34330861,4032846830,615137029,3603020806,3314634738,939183345,1776939221,2609017814,2295496738,2058945313,2926798794,1545135305,1330124605,3173225534,4084100981,17165430,307568514,3762199681,888469610,3332340585,3587147933,665062302,2042050490,2346497209,2559330125,1793573966,3190661285,1279665062,1595330642,2910671697]);generateCRC64NVMETable=()=>{const tables=new Array(8);for(let slice=0;slice<8;slice++){const table2=new Array(512);for(let i2=0;i2<256;i2++){let crc2=BigInt(i2);for(let j2=0;j2<8*(slice+1);j2++)crc2&BigInt("1")?crc2=crc2>>BigInt("1")^BigInt("0x9a6c9329ac4bc9b5"):crc2>>=BigInt("1");table2[2*i2]=Number(crc2>>BigInt("32")&BigInt("0xffffffff"));table2[2*i2+1]=Number(crc2&BigInt("0xffffffff"))}tables[slice]=new Uint32Array(table2)}return tables};ensureTablesInitialized=()=>{if(!CRC64_NVME_REVERSED_TABLE){CRC64_NVME_REVERSED_TABLE=generateCRC64NVMETable();[t0,t1,t2,t3,t4,t5,t6,t7]=CRC64_NVME_REVERSED_TABLE}};Crc64Nvme=class{constructor(){__publicField(this,"c1",0);__publicField(this,"c2",0);ensureTablesInitialized();this.reset()}update(data){const len=data.length;let i2=0,crc1=this.c1,crc2=this.c2;for(;i2+8<=len;){const idx0=(255&(crc2^data[i2++]))<<1,idx1=(255&(crc2>>>8^data[i2++]))<<1,idx2=(255&(crc2>>>16^data[i2++]))<<1,idx3=(255&(crc2>>>24^data[i2++]))<<1,idx4=(255&(crc1^data[i2++]))<<1,idx5=(255&(crc1>>>8^data[i2++]))<<1,idx6=(255&(crc1>>>16^data[i2++]))<<1,idx7=(255&(crc1>>>24^data[i2++]))<<1;crc1=t7[idx0]^t6[idx1]^t5[idx2]^t4[idx3]^t3[idx4]^t2[idx5]^t1[idx6]^t0[idx7];crc2=t7[idx0+1]^t6[idx1+1]^t5[idx2+1]^t4[idx3+1]^t3[idx4+1]^t2[idx5+1]^t1[idx6+1]^t0[idx7+1]}for(;i2>>8|(255&crc1)<<24)>>>0;crc1=crc1>>>8^t0[idx2];crc2^=t0[idx2+1];i2++}this.c1=crc1;this.c2=crc2}async digest(){const c12=4294967295^this.c1,c22=4294967295^this.c2;return new Uint8Array([c12>>>24,c12>>>16&255,c12>>>8&255,255&c12,c22>>>24,c22>>>16&255,c22>>>8&255,255&c22])}reset(){this.c1=4294967295;this.c2=4294967295}};AwsCrc32=function(){function AwsCrc322(){this.crc32=new Crc32}AwsCrc322.prototype.update=function(toHash){isEmptyData(toHash)||this.crc32.update(convertToBuffer(toHash))};AwsCrc322.prototype.digest=function(){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(_a8){return[2,numToUint8(this.crc32.digest())]})})};AwsCrc322.prototype.reset=function(){this.crc32=new Crc32};return AwsCrc322}();Crc32=function(){function Crc322(){this.checksum=4294967295}Crc322.prototype.update=function(data){var e_1,_a8,data_1,data_1_1,byte;try{for(data_1_1=(data_1=__values(data)).next();!data_1_1.done;data_1_1=data_1.next()){byte=data_1_1.value;this.checksum=this.checksum>>>8^lookupTable2[255&(this.checksum^byte)]}}catch(e_1_1){e_1={error:e_1_1}}finally{try{data_1_1&&!data_1_1.done&&(_a8=data_1.return)&&_a8.call(data_1)}finally{if(e_1)throw e_1.error}}return this};Crc322.prototype.digest=function(){return(4294967295^this.checksum)>>>0};return Crc322}();lookupTable2=uint32ArrayFrom([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);getCrc32ChecksumAlgorithmFunction=()=>AwsCrc32;CLIENT_SUPPORTED_ALGORITHMS=[ChecksumAlgorithm.CRC32,ChecksumAlgorithm.CRC32C,ChecksumAlgorithm.CRC64NVME,ChecksumAlgorithm.SHA1,ChecksumAlgorithm.SHA256];PRIORITY_ORDER_ALGORITHMS=[ChecksumAlgorithm.SHA256,ChecksumAlgorithm.SHA1,ChecksumAlgorithm.CRC32,ChecksumAlgorithm.CRC32C,ChecksumAlgorithm.CRC64NVME];selectChecksumAlgorithmFunction=(checksumAlgorithm,config)=>{var _a8,_b5,_c3,_d2,_f,_g;const{checksumAlgorithms={}}=config;switch(checksumAlgorithm){case ChecksumAlgorithm.MD5:return null!=(_a8=null==checksumAlgorithms?void 0:checksumAlgorithms.MD5)?_a8:config.md5;case ChecksumAlgorithm.CRC32:return null!=(_b5=null==checksumAlgorithms?void 0:checksumAlgorithms.CRC32)?_b5:getCrc32ChecksumAlgorithmFunction();case ChecksumAlgorithm.CRC32C:return null!=(_c3=null==checksumAlgorithms?void 0:checksumAlgorithms.CRC32C)?_c3:AwsCrc32c;case ChecksumAlgorithm.CRC64NVME:return null!=(_d2=null==checksumAlgorithms?void 0:checksumAlgorithms.CRC64NVME)?_d2:Crc64Nvme;case ChecksumAlgorithm.SHA1:return null!=(_f=null==checksumAlgorithms?void 0:checksumAlgorithms.SHA1)?_f:config.sha1;case ChecksumAlgorithm.SHA256:return null!=(_g=null==checksumAlgorithms?void 0:checksumAlgorithms.SHA256)?_g:config.sha256;default:if(null==checksumAlgorithms?void 0:checksumAlgorithms[checksumAlgorithm])return checksumAlgorithms[checksumAlgorithm];throw new Error(`The checksum algorithm "${checksumAlgorithm}" is not supported by the client. Select one of ${CLIENT_SUPPORTED_ALGORITHMS}, or provide an implementation to the client constructor checksums field.`)}};init_dist_es();stringHasher=(checksumAlgorithmFn,body)=>{const hash3=new checksumAlgorithmFn;hash3.update(toUint8Array(body||""));return hash3.digest()};flexibleChecksumsMiddlewareOptions={name:"flexibleChecksumsMiddleware",step:"build",tags:["BODY_CHECKSUM"],override:!0};flexibleChecksumsMiddleware=(config,middlewareConfig)=>(next2,context2)=>async args=>{if(!HttpRequest.isInstance(args.request))return next2(args);if(hasHeaderWithPrefix("x-amz-checksum-",args.request.headers))return next2(args);const{request:request2,input}=args,{body:requestBody,headers}=request2,{base64Encoder,streamHasher}=config,{requestChecksumRequired,requestAlgorithmMember}=middlewareConfig,requestChecksumCalculation=await config.requestChecksumCalculation(),requestAlgorithmMemberName=null==requestAlgorithmMember?void 0:requestAlgorithmMember.name,requestAlgorithmMemberHttpHeader=null==requestAlgorithmMember?void 0:requestAlgorithmMember.httpHeader;if(requestAlgorithmMemberName&&!input[requestAlgorithmMemberName]&&("WHEN_SUPPORTED"===requestChecksumCalculation||requestChecksumRequired)){input[requestAlgorithmMemberName]=DEFAULT_CHECKSUM_ALGORITHM;requestAlgorithmMemberHttpHeader&&(headers[requestAlgorithmMemberHttpHeader]=DEFAULT_CHECKSUM_ALGORITHM)}const checksumAlgorithm=getChecksumAlgorithmForRequest(input,{requestChecksumRequired,requestAlgorithmMember:null==requestAlgorithmMember?void 0:requestAlgorithmMember.name,requestChecksumCalculation});let updatedBody=requestBody,updatedHeaders=headers;if(checksumAlgorithm){switch(checksumAlgorithm){case ChecksumAlgorithm.CRC32:setFeature(context2,"FLEXIBLE_CHECKSUMS_REQ_CRC32","U");break;case ChecksumAlgorithm.CRC32C:setFeature(context2,"FLEXIBLE_CHECKSUMS_REQ_CRC32C","V");break;case ChecksumAlgorithm.CRC64NVME:setFeature(context2,"FLEXIBLE_CHECKSUMS_REQ_CRC64","W");break;case ChecksumAlgorithm.SHA1:setFeature(context2,"FLEXIBLE_CHECKSUMS_REQ_SHA1","X");break;case ChecksumAlgorithm.SHA256:setFeature(context2,"FLEXIBLE_CHECKSUMS_REQ_SHA256","Y");break}const checksumLocationName=getChecksumLocationName(checksumAlgorithm),checksumAlgorithmFn=selectChecksumAlgorithmFunction(checksumAlgorithm,config);if(isStreaming(requestBody)){const{getAwsChunkedEncodingStream:getAwsChunkedEncodingStream2,bodyLengthChecker}=config;updatedBody=getAwsChunkedEncodingStream2("number"==typeof config.requestStreamBufferSize&&config.requestStreamBufferSize>=8192?createBufferedReadable(requestBody,config.requestStreamBufferSize,context2.logger):requestBody,{base64Encoder,bodyLengthChecker,checksumLocationName,checksumAlgorithmFn,streamHasher});updatedHeaders={...headers,"content-encoding":headers["content-encoding"]?`${headers["content-encoding"]},aws-chunked`:"aws-chunked","transfer-encoding":"chunked","x-amz-decoded-content-length":headers["content-length"],"x-amz-content-sha256":"STREAMING-UNSIGNED-PAYLOAD-TRAILER","x-amz-trailer":checksumLocationName};delete updatedHeaders["content-length"]}else if(!hasHeader2(checksumLocationName,headers)){const rawChecksum=await stringHasher(checksumAlgorithmFn,requestBody);updatedHeaders={...headers,[checksumLocationName]:base64Encoder(rawChecksum)}}}try{return await next2({...args,request:{...request2,headers:updatedHeaders,body:updatedBody}})}catch(e3){if(e3 instanceof Error&&"InvalidChunkSizeError"===e3.name)try{e3.message.endsWith(".")||(e3.message+=".");e3.message+=" Set [requestStreamBufferSize=number e.g. 65_536] in client constructor to instruct AWS SDK to buffer your input stream."}catch(ignored){}throw e3}};flexibleChecksumsInputMiddlewareOptions={name:"flexibleChecksumsInputMiddleware",toMiddleware:"serializerMiddleware",relation:"before",tags:["BODY_CHECKSUM"],override:!0};flexibleChecksumsInputMiddleware=(config,middlewareConfig)=>(next2,context2)=>async args=>{const input=args.input,{requestValidationModeMember}=middlewareConfig,requestChecksumCalculation=await config.requestChecksumCalculation(),responseChecksumValidation=await config.responseChecksumValidation();switch(requestChecksumCalculation){case"WHEN_REQUIRED":setFeature(context2,"FLEXIBLE_CHECKSUMS_REQ_WHEN_REQUIRED","a");break;case"WHEN_SUPPORTED":setFeature(context2,"FLEXIBLE_CHECKSUMS_REQ_WHEN_SUPPORTED","Z");break}switch(responseChecksumValidation){case"WHEN_REQUIRED":setFeature(context2,"FLEXIBLE_CHECKSUMS_RES_WHEN_REQUIRED","c");break;case"WHEN_SUPPORTED":setFeature(context2,"FLEXIBLE_CHECKSUMS_RES_WHEN_SUPPORTED","b");break}requestValidationModeMember&&!input[requestValidationModeMember]&&"WHEN_SUPPORTED"===responseChecksumValidation&&(input[requestValidationModeMember]="ENABLED");return next2(args)};getChecksumAlgorithmListForResponse=(responseAlgorithms=[])=>{const validChecksumAlgorithms=[];let i2=PRIORITY_ORDER_ALGORITHMS.length;for(const algorithm of responseAlgorithms){const priority=PRIORITY_ORDER_ALGORITHMS.indexOf(algorithm);-1!==priority?validChecksumAlgorithms[priority]=algorithm:validChecksumAlgorithms[i2++]=algorithm}return validChecksumAlgorithms.filter(Boolean)};isChecksumWithPartNumber=checksum=>{const lastHyphenIndex=checksum.lastIndexOf("-");if(-1!==lastHyphenIndex){const numberPart=checksum.slice(lastHyphenIndex+1);if(!numberPart.startsWith("0")){const number=parseInt(numberPart,10);if(!isNaN(number)&&number>=1&&number<=1e4)return!0}}return!1};getChecksum=async(body,{checksumAlgorithmFn,base64Encoder})=>base64Encoder(await stringHasher(checksumAlgorithmFn,body));validateChecksumFromResponse=async(response,{config,responseAlgorithms,logger:logger2})=>{const checksumAlgorithms=getChecksumAlgorithmListForResponse(responseAlgorithms),{body:responseBody,headers:responseHeaders}=response;for(const algorithm of checksumAlgorithms){const responseHeader=getChecksumLocationName(algorithm),checksumFromResponse=responseHeaders[responseHeader];if(checksumFromResponse){let checksumAlgorithmFn;try{checksumAlgorithmFn=selectChecksumAlgorithmFunction(algorithm,config)}catch(error){if(algorithm===ChecksumAlgorithm.CRC64NVME){null==logger2||logger2.warn(`Skipping ${ChecksumAlgorithm.CRC64NVME} checksum validation: ${error.message}`);continue}throw error}const{base64Encoder}=config;if(isStreaming(responseBody)){response.body=createChecksumStream({expectedChecksum:checksumFromResponse,checksumSourceLocation:responseHeader,checksum:new checksumAlgorithmFn,source:responseBody,base64Encoder});return}const checksum=await getChecksum(responseBody,{checksumAlgorithmFn,base64Encoder});if(checksum===checksumFromResponse)break;throw new Error(`Checksum mismatch: expected "${checksum}" but received "${checksumFromResponse}" in response header "${responseHeader}".`)}}};flexibleChecksumsResponseMiddlewareOptions={name:"flexibleChecksumsResponseMiddleware",toMiddleware:"deserializerMiddleware",relation:"after",tags:["BODY_CHECKSUM"],override:!0};flexibleChecksumsResponseMiddleware=(config,middlewareConfig)=>(next2,context2)=>async args=>{var _a8;if(!HttpRequest.isInstance(args.request))return next2(args);const input=args.input,result=await next2(args),response=result.response,{requestValidationModeMember,responseAlgorithms}=middlewareConfig;if(requestValidationModeMember&&"ENABLED"===input[requestValidationModeMember]){const{clientName,commandName}=context2,customChecksumAlgorithms=Object.keys(null!=(_a8=config.checksumAlgorithms)?_a8:{}).filter(algorithm=>{const responseHeader=getChecksumLocationName(algorithm);return void 0!==response.headers[responseHeader]}),algoList=getChecksumAlgorithmListForResponse([...null!=responseAlgorithms?responseAlgorithms:[],...customChecksumAlgorithms]);if("S3Client"===clientName&&"GetObjectCommand"===commandName&&algoList.every(algorithm=>{const responseHeader=getChecksumLocationName(algorithm),checksumFromResponse=response.headers[responseHeader];return!checksumFromResponse||isChecksumWithPartNumber(checksumFromResponse)}))return result;await validateChecksumFromResponse(response,{config,responseAlgorithms:algoList,logger:context2.logger})}return result};getFlexibleChecksumsPlugin=(config,middlewareConfig)=>({applyToStack:clientStack=>{clientStack.add(flexibleChecksumsMiddleware(config,middlewareConfig),flexibleChecksumsMiddlewareOptions);clientStack.addRelativeTo(flexibleChecksumsInputMiddleware(config,middlewareConfig),flexibleChecksumsInputMiddlewareOptions);clientStack.addRelativeTo(flexibleChecksumsResponseMiddleware(config,middlewareConfig),flexibleChecksumsResponseMiddlewareOptions)}});resolveFlexibleChecksumsConfig=input=>{var _a8;const{requestChecksumCalculation,responseChecksumValidation,requestStreamBufferSize}=input;return Object.assign(input,{requestChecksumCalculation:normalizeProvider(null!=requestChecksumCalculation?requestChecksumCalculation:"WHEN_SUPPORTED"),responseChecksumValidation:normalizeProvider(null!=responseChecksumValidation?responseChecksumValidation:"WHEN_SUPPORTED"),requestStreamBufferSize:Number(null!=requestStreamBufferSize?requestStreamBufferSize:0),checksumAlgorithms:null!=(_a8=input.checksumAlgorithms)?_a8:{}})};hostHeaderMiddleware=options=>next2=>async args=>{if(!HttpRequest.isInstance(args.request))return next2(args);const{request:request2}=args,{handlerProtocol=""}=options.requestHandler.metadata||{};if(handlerProtocol.indexOf("h2")>=0&&!request2.headers[":authority"]){delete request2.headers.host;request2.headers[":authority"]=request2.hostname+(request2.port?":"+request2.port:"")}else if(!request2.headers.host){let host=request2.hostname;null!=request2.port&&(host+=`:${request2.port}`);request2.headers.host=host}return next2(args)};hostHeaderMiddlewareOptions={name:"hostHeaderMiddleware",step:"build",priority:"low",tags:["HOST"],override:!0};getHostHeaderPlugin=options=>({applyToStack:clientStack=>{clientStack.add(hostHeaderMiddleware(options),hostHeaderMiddlewareOptions)}});loggerMiddleware=()=>(next2,context2)=>async args=>{var _a8,_b5;try{const response=await next2(args),{clientName,commandName,logger:logger2,dynamoDbDocumentClientOptions={}}=context2,{overrideInputFilterSensitiveLog,overrideOutputFilterSensitiveLog}=dynamoDbDocumentClientOptions,inputFilterSensitiveLog=null!=overrideInputFilterSensitiveLog?overrideInputFilterSensitiveLog:context2.inputFilterSensitiveLog,outputFilterSensitiveLog=null!=overrideOutputFilterSensitiveLog?overrideOutputFilterSensitiveLog:context2.outputFilterSensitiveLog,{$metadata,...outputWithoutMetadata}=response.output;null==(_a8=null==logger2?void 0:logger2.info)||_a8.call(logger2,{clientName,commandName,input:inputFilterSensitiveLog(args.input),output:outputFilterSensitiveLog(outputWithoutMetadata),metadata:$metadata});return response}catch(error){const{clientName,commandName,logger:logger2,dynamoDbDocumentClientOptions={}}=context2,{overrideInputFilterSensitiveLog}=dynamoDbDocumentClientOptions,inputFilterSensitiveLog=null!=overrideInputFilterSensitiveLog?overrideInputFilterSensitiveLog:context2.inputFilterSensitiveLog;null==(_b5=null==logger2?void 0:logger2.error)||_b5.call(logger2,{clientName,commandName,input:inputFilterSensitiveLog(args.input),error,metadata:error.$metadata});throw error}};loggerMiddlewareOptions={name:"loggerMiddleware",tags:["LOGGER"],step:"initialize",override:!0};getLoggerPlugin=options=>({applyToStack:clientStack=>{clientStack.add(loggerMiddleware(),loggerMiddlewareOptions)}});recursionDetectionMiddlewareOptions={step:"build",tags:["RECURSION_DETECTION"],name:"recursionDetectionMiddleware",override:!0,priority:"low"};recursionDetectionMiddleware=()=>next2=>async args=>next2(args);getRecursionDetectionPlugin=options=>({applyToStack:clientStack=>{clientStack.add(recursionDetectionMiddleware(),recursionDetectionMiddlewareOptions)}});CONTENT_LENGTH_HEADER="content-length";DECODED_CONTENT_LENGTH_HEADER="x-amz-decoded-content-length";checkContentLengthHeaderMiddlewareOptions={step:"finalizeRequest",tags:["CHECK_CONTENT_LENGTH_HEADER"],name:"getCheckContentLengthHeaderPlugin",override:!0};getCheckContentLengthHeaderPlugin=unused=>({applyToStack:clientStack=>{clientStack.add(checkContentLengthHeader(),checkContentLengthHeaderMiddlewareOptions)}});regionRedirectEndpointMiddleware=config=>(next2,context2)=>async args=>{const originalRegion=await config.region(),regionProviderRef=config.region;let unlock=()=>{};if(context2.__s3RegionRedirect){Object.defineProperty(config,"region",{writable:!1,value:async()=>context2.__s3RegionRedirect});unlock=()=>Object.defineProperty(config,"region",{writable:!0,value:regionProviderRef})}try{const result=await next2(args);if(context2.__s3RegionRedirect){unlock();if(originalRegion!==await config.region())throw new Error("Region was not restored following S3 region redirect.")}return result}catch(e3){unlock();throw e3}};regionRedirectEndpointMiddlewareOptions={tags:["REGION_REDIRECT","S3"],name:"regionRedirectEndpointMiddleware",override:!0,relation:"before",toMiddleware:"endpointV2Middleware"};regionRedirectMiddlewareOptions={step:"initialize",tags:["REGION_REDIRECT","S3"],name:"regionRedirectMiddleware",override:!0};getRegionRedirectMiddlewarePlugin=clientConfig=>({applyToStack:clientStack=>{clientStack.add(regionRedirectMiddleware(clientConfig),regionRedirectMiddlewareOptions);clientStack.addRelativeTo(regionRedirectEndpointMiddleware(clientConfig),regionRedirectEndpointMiddlewareOptions)}});s3ExpiresMiddleware=config=>(next2,context2)=>async args=>{var _a8;const result=await next2(args),{response}=result;if(HttpResponse.isInstance(response)&&response.headers.expires){response.headers.expiresstring=response.headers.expires;try{parseRfc7231DateTime(response.headers.expires)}catch(e3){null==(_a8=context2.logger)||_a8.warn(`AWS SDK Warning for ${context2.clientName}::${context2.commandName} response parsing (${response.headers.expires}): ${e3}`);delete response.headers.expires}}return result};s3ExpiresMiddlewareOptions={tags:["S3"],name:"s3ExpiresMiddleware",override:!0,relation:"after",toMiddleware:"deserializerMiddleware"};getS3ExpiresMiddlewarePlugin=clientConfig=>({applyToStack:clientStack=>{clientStack.addRelativeTo(s3ExpiresMiddleware(),s3ExpiresMiddlewareOptions)}});_S3ExpressIdentityCache=class _S3ExpressIdentityCache{constructor(data={}){__publicField(this,"data");__publicField(this,"lastPurgeTime",Date.now());this.data=data}get(key3){const entry=this.data[key3];if(entry)return entry}set(key3,entry){this.data[key3]=entry;return entry}delete(key3){delete this.data[key3]}async purgeExpired(){const now3=Date.now();if(!(this.lastPurgeTime+_S3ExpressIdentityCache.EXPIRED_CREDENTIAL_PURGE_INTERVAL_MS>now3))for(const key3 in this.data){const entry=this.data[key3];if(!entry.isRefreshing){const credential=await entry.identity;credential.expiration&&credential.expiration.getTime(){var _a8,_b5,_c3,_d2;if((null!=(_b5=null==(_a8=identity.expiration)?void 0:_a8.getTime())?_b5:0){cache2.set(key3,new S3ExpressIdentityCacheEntry(Promise.resolve(id)))})}return identity}):cache2.set(key3,new S3ExpressIdentityCacheEntry(this.getIdentity(key3))).identity}async getIdentity(key3){var _a8,_b5;await this.cache.purgeExpired().catch(error=>{console.warn("Error while clearing expired entries in S3ExpressIdentityCache: \n"+error)});const session=await this.createSessionFn(key3);if(!(null==(_a8=session.Credentials)?void 0:_a8.AccessKeyId)||!(null==(_b5=session.Credentials)?void 0:_b5.SecretAccessKey))throw new Error("s3#createSession response credential missing AccessKeyId or SecretAccessKey.");return{accessKeyId:session.Credentials.AccessKeyId,secretAccessKey:session.Credentials.SecretAccessKey,sessionToken:session.Credentials.SessionToken,expiration:session.Credentials.Expiration?new Date(session.Credentials.Expiration):void 0}}};__publicField(_S3ExpressIdentityProviderImpl,"REFRESH_WINDOW_MS",6e4);S3ExpressIdentityProviderImpl=_S3ExpressIdentityProviderImpl;(function(SelectorType2){SelectorType2.ENV="env";SelectorType2.CONFIG="shared config entry"})(SelectorType||(SelectorType={}));SESSION_TOKEN_HEADER=(SESSION_TOKEN_QUERY_PARAM="X-Amz-S3session-Token").toLowerCase();SignatureV4S3Express=class extends SignatureV4{async signWithCredentials(requestToSign,credentials,options){const credentialsWithoutSessionToken=getCredentialsWithoutSessionToken(credentials);requestToSign.headers[SESSION_TOKEN_HEADER]=credentials.sessionToken;setSingleOverride(this,credentialsWithoutSessionToken);return this.signRequest(requestToSign,null!=options?options:{})}async presignWithCredentials(requestToSign,credentials,options){var _a8;const credentialsWithoutSessionToken=getCredentialsWithoutSessionToken(credentials);delete requestToSign.headers[SESSION_TOKEN_HEADER];requestToSign.headers[SESSION_TOKEN_QUERY_PARAM]=credentials.sessionToken;requestToSign.query=null!=(_a8=requestToSign.query)?_a8:{};requestToSign.query[SESSION_TOKEN_QUERY_PARAM]=credentials.sessionToken;setSingleOverride(this,credentialsWithoutSessionToken);return this.presign(requestToSign,options)}};s3ExpressMiddleware=options=>(next2,context2)=>async args=>{var _a8,_b5,_c3,_d2,_e2;if(context2.endpointV2){const endpoint=context2.endpointV2,isS3ExpressAuth="sigv4-s3express"===(null==(_c3=null==(_b5=null==(_a8=endpoint.properties)?void 0:_a8.authSchemes)?void 0:_b5[0])?void 0:_c3.name);if("S3Express"===(null==(_d2=endpoint.properties)?void 0:_d2.backend)||"Directory"===(null==(_e2=endpoint.properties)?void 0:_e2.bucketType)){setFeature(context2,"S3_EXPRESS_BUCKET","J");context2.isS3ExpressBucket=!0}if(isS3ExpressAuth){const requestBucket=args.input.Bucket;if(requestBucket){const s3ExpressIdentity=await options.s3ExpressIdentityProvider.getS3ExpressIdentity(await options.credentials(),{Bucket:requestBucket});context2.s3ExpressIdentity=s3ExpressIdentity;HttpRequest.isInstance(args.request)&&s3ExpressIdentity.sessionToken&&(args.request.headers[SESSION_TOKEN_HEADER]=s3ExpressIdentity.sessionToken)}}}return next2(args)};s3ExpressMiddlewareOptions={name:"s3ExpressMiddleware",step:"build",tags:["S3","S3_EXPRESS"],override:!0};getS3ExpressPlugin=options=>({applyToStack:clientStack=>{clientStack.add(s3ExpressMiddleware(options),s3ExpressMiddlewareOptions)}});signS3Express=async(s3ExpressIdentity,signingOptions,request2,sigV4MultiRegionSigner)=>{const signedRequest=await sigV4MultiRegionSigner.signWithCredentials(request2,s3ExpressIdentity,{});if(signedRequest.headers["X-Amz-Security-Token"]||signedRequest.headers["x-amz-security-token"])throw new Error("X-Amz-Security-Token must not be set for s3-express requests.");return signedRequest};defaultErrorHandler2=signingProperties=>error=>{throw error};defaultSuccessHandler2=(httpResponse,signingProperties)=>{};s3ExpressHttpSigningMiddleware=config=>(next2,context2)=>async args=>{if(!HttpRequest.isInstance(args.request))return next2(args);const scheme=getSmithyContext(context2).selectedHttpAuthScheme;if(!scheme)throw new Error("No HttpAuthScheme was selected: unable to sign request");const{httpAuthOption:{signingProperties={}},identity,signer}=scheme;let request2;request2=context2.s3ExpressIdentity?await signS3Express(context2.s3ExpressIdentity,0,args.request,await config.signer()):await signer.sign(args.request,identity,signingProperties);const output=await next2({...args,request:request2}).catch((signer.errorHandler||defaultErrorHandler2)(signingProperties));(signer.successHandler||defaultSuccessHandler2)(output.response,signingProperties);return output};getS3ExpressHttpSigningPlugin=config=>({applyToStack:clientStack=>{clientStack.addRelativeTo(s3ExpressHttpSigningMiddleware(config),httpSigningMiddlewareOptions)}});resolveS3Config=(input,{session})=>{const[s3ClientProvider,CreateSessionCommandCtor]=session,{forcePathStyle,useAccelerateEndpoint,disableMultiregionAccessPoints,followRegionRedirects,s3ExpressIdentityProvider,bucketEndpoint,expectContinueHeader}=input;return Object.assign(input,{forcePathStyle:null!=forcePathStyle&&forcePathStyle,useAccelerateEndpoint:null!=useAccelerateEndpoint&&useAccelerateEndpoint,disableMultiregionAccessPoints:null!=disableMultiregionAccessPoints&&disableMultiregionAccessPoints,followRegionRedirects:null!=followRegionRedirects&&followRegionRedirects,s3ExpressIdentityProvider:null!=s3ExpressIdentityProvider?s3ExpressIdentityProvider:new S3ExpressIdentityProviderImpl(async key3=>s3ClientProvider().send(new CreateSessionCommandCtor({Bucket:key3}))),bucketEndpoint:null!=bucketEndpoint&&bucketEndpoint,expectContinueHeader:null!=expectContinueHeader?expectContinueHeader:2097152})};THROW_IF_EMPTY_BODY={CopyObjectCommand:!0,UploadPartCopyCommand:!0,CompleteMultipartUploadCommand:!0};throw200ExceptionsMiddleware=config=>(next2,context2)=>async args=>{const result=await next2(args),{response}=result;if(!HttpResponse.isInstance(response))return result;const{statusCode,body:sourceBody}=response;if(statusCode<200||statusCode>=300)return result;if("function"!=typeof(null==sourceBody?void 0:sourceBody.stream)&&"function"!=typeof(null==sourceBody?void 0:sourceBody.pipe)&&"function"!=typeof(null==sourceBody?void 0:sourceBody.tee))return result;let bodyCopy=sourceBody,body=sourceBody;!sourceBody||"object"!=typeof sourceBody||sourceBody instanceof Uint8Array||([bodyCopy,body]=await splitStream(sourceBody));response.body=body;const bodyBytes=await collectBody2(bodyCopy,{streamCollector:async stream=>headStream(stream,3e3)});"function"==typeof(null==bodyCopy?void 0:bodyCopy.destroy)&&bodyCopy.destroy();const bodyStringTail=config.utf8Encoder(bodyBytes.subarray(bodyBytes.length-16));if(0===bodyBytes.length&&THROW_IF_EMPTY_BODY[context2.commandName]){const err3=new Error("S3 aborted request");err3.name="InternalError";throw err3}bodyStringTail&&bodyStringTail.endsWith("")&&(response.statusCode=400);return result};collectBody2=(streamBody=new Uint8Array,context2)=>streamBody instanceof Uint8Array?Promise.resolve(streamBody):context2.streamCollector(streamBody)||Promise.resolve(new Uint8Array);throw200ExceptionsMiddlewareOptions={relation:"after",toMiddleware:"deserializerMiddleware",tags:["THROW_200_EXCEPTIONS","S3"],name:"throw200ExceptionsMiddleware",override:!0};getThrow200ExceptionsPlugin=config=>({applyToStack:clientStack=>{clientStack.addRelativeTo(throw200ExceptionsMiddleware(config),throw200ExceptionsMiddlewareOptions)}});validate=str=>"string"==typeof str&&0===str.indexOf("arn:")&&str.split(":").length>=6;bucketEndpointMiddlewareOptions={name:"bucketEndpointMiddleware",override:!0,relation:"after",toMiddleware:"endpointV2Middleware"};validateBucketNameMiddlewareOptions={step:"initialize",tags:["VALIDATE_BUCKET_NAME"],name:"validateBucketNameMiddleware",override:!0};getValidateBucketNamePlugin=options=>({applyToStack:clientStack=>{clientStack.add(validateBucketNameMiddleware(options),validateBucketNameMiddlewareOptions);clientStack.addRelativeTo(bucketEndpointMiddleware(options),bucketEndpointMiddlewareOptions)}});S3RestXmlProtocol=class extends AwsRestXmlProtocol{async serializeRequest(operationSchema,input,context2){var _a8;const request2=await super.serializeRequest(operationSchema,input,context2),ns=NormalizedSchema.of(operationSchema.input);let bucketMemberIndex=0;const requiredMemberCount=null!=(_a8=ns.getSchema()[6])?_a8:0;if(input&&"object"==typeof input)for(const[memberName,memberNs]of ns.structIterator()){if(++bucketMemberIndex>requiredMemberCount)break;if("Bucket"===memberName){if(!input.Bucket&&memberNs.getMergedTraits().httpLabel)throw new Error("No value provided for input HTTP label: Bucket.");break}}return request2}};DEFAULT_UA_APP_ID=void 0;EndpointCache=class{constructor({size,params}){__publicField(this,"capacity");__publicField(this,"data",new Map);__publicField(this,"parameters",[]);this.capacity=null!=size?size:50;params&&(this.parameters=params)}get(endpointParams,resolver2){const key3=this.hash(endpointParams);if(!1===key3)return resolver2();if(!this.data.has(key3)){if(this.data.size>this.capacity+10){const keys3=this.data.keys();let i2=0;for(;;){const{value,done}=keys3.next();this.data.delete(value);if(done||++i2>10)break}}this.data.set(key3,resolver2())}return this.data.get(key3)}size(){return this.data.size}hash(endpointParams){var _a8;let buffer="";const{parameters}=this;if(0===parameters.length)return!1;for(const param of parameters){const val=String(null!=(_a8=endpointParams[param])?_a8:"");if(val.includes("|;"))return!1;buffer+=val+"|;"}return buffer}};IP_V4_REGEX=new RegExp("^(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}$");isIpAddress=value=>IP_V4_REGEX.test(value)||value.startsWith("[")&&value.endsWith("]");VALID_HOST_LABEL_REGEX=new RegExp("^(?!.*-$)(?!-)[a-zA-Z0-9-]{1,63}$");isValidHostLabel=(value,allowSubDomains=!1)=>{if(!allowSubDomains)return VALID_HOST_LABEL_REGEX.test(value);const labels=value.split(".");for(const label2 of labels)if(!isValidHostLabel(label2))return!1;return!0};customEndpointFunctions={};EndpointError=class extends Error{constructor(message){super(message);this.name="EndpointError"}};booleanEquals=(value1,value2)=>value1===value2;getAttrPathList=path2=>{const parts=path2.split("."),pathList=[];for(const part of parts){const squareBracketIndex=part.indexOf("[");if(-1!==squareBracketIndex){if(part.indexOf("]")!==part.length-1)throw new EndpointError(`Path: '${path2}' does not end with ']'`);const arrayIndex=part.slice(squareBracketIndex+1,-1);if(Number.isNaN(parseInt(arrayIndex)))throw new EndpointError(`Invalid array index: '${arrayIndex}' in path: '${path2}'`);0!==squareBracketIndex&&pathList.push(part.slice(0,squareBracketIndex));pathList.push(arrayIndex)}else pathList.push(part)}return pathList};getAttr=(value,path2)=>getAttrPathList(path2).reduce((acc,index6)=>{if("object"!=typeof acc)throw new EndpointError(`Index '${index6}' in '${path2}' not found in '${JSON.stringify(value)}'`);return Array.isArray(acc)?acc[parseInt(index6)]:acc[index6]},value);isSet=value=>null!=value;not=value=>!value;DEFAULT_PORTS={[EndpointURLScheme.HTTP]:80,[EndpointURLScheme.HTTPS]:443};endpointFunctions={booleanEquals,getAttr,isSet,isValidHostLabel,not,parseURL:value=>{const whatwgURL=(()=>{try{if(value instanceof URL)return value;if("object"==typeof value&&"hostname"in value){const{hostname:hostname2,port,protocol:protocol2="",path:path2="",query:query3={}}=value,url=new URL(`${protocol2}//${hostname2}${port?`:${port}`:""}${path2}`);url.search=Object.entries(query3).map(([k2,v2])=>`${k2}=${v2}`).join("&");return url}return new URL(value)}catch(error){return null}})();if(!whatwgURL){console.error(`Unable to parse ${JSON.stringify(value)} as a whatwg URL.`);return null}const urlString=whatwgURL.href,{host,hostname,pathname,protocol,search}=whatwgURL;if(search)return null;const scheme=protocol.slice(0,-1);if(!Object.values(EndpointURLScheme).includes(scheme))return null;const isIp=isIpAddress(hostname);return{scheme,authority:`${host}${urlString.includes(`${host}:${DEFAULT_PORTS[scheme]}`)||"string"==typeof value&&value.includes(`${host}:${DEFAULT_PORTS[scheme]}`)?`:${DEFAULT_PORTS[scheme]}`:""}`,path:pathname,normalizedPath:pathname.endsWith("/")?pathname:`${pathname}/`,isIp}},stringEquals:(value1,value2)=>value1===value2,substring:(input,start,stop,reverse)=>start>=stop||input.lengthencodeURIComponent(value).replace(/[!*'()]/g,c3=>`%${c3.charCodeAt(0).toString(16).toUpperCase()}`)};evaluateTemplate=(template,options)=>{const evaluatedTemplateArr=[],templateContext={...options.endpointParams,...options.referenceRecord};let currentIndex=0;for(;currentIndex({...options.endpointParams,...options.referenceRecord}[ref]);evaluateExpression=(obj,keyName,options)=>{if("string"==typeof obj)return evaluateTemplate(obj,options);if(obj.fn)return group.callFunction(obj,options);if(obj.ref)return getReferenceValue(obj,options);throw new EndpointError(`'${keyName}': ${String(obj)} is not a string, function or reference.`)};callFunction=({fn,argv},options)=>{const evaluatedArgs=argv.map(arg=>["boolean","number"].includes(typeof arg)?arg:group.evaluateExpression(arg,"arg",options)),fnSegments=fn.split(".");return fnSegments[0]in customEndpointFunctions&&null!=fnSegments[1]?customEndpointFunctions[fnSegments[0]][fnSegments[1]](...evaluatedArgs):endpointFunctions[fn](...evaluatedArgs)};group={evaluateExpression,callFunction};evaluateCondition=({assign:assign2,...fnArgs},options)=>{var _a8,_b5;if(assign2&&assign2 in options.referenceRecord)throw new EndpointError(`'${assign2}' is already defined in Reference Record.`);const value=callFunction(fnArgs,options);null==(_b5=null==(_a8=options.logger)?void 0:_a8.debug)||_b5.call(_a8,`endpoints evaluateCondition: ${toDebugString(fnArgs)} = ${toDebugString(value)}`);return{result:""===value||!!value,...null!=assign2&&{toAssign:{name:assign2,value}}}};evaluateConditions=(conditions=[],options)=>{var _a8,_b5;const conditionsReferenceRecord={};for(const condition of conditions){const{result,toAssign}=evaluateCondition(condition,{...options,referenceRecord:{...options.referenceRecord,...conditionsReferenceRecord}});if(!result)return{result};if(toAssign){conditionsReferenceRecord[toAssign.name]=toAssign.value;null==(_b5=null==(_a8=options.logger)?void 0:_a8.debug)||_b5.call(_a8,`endpoints assign: ${toAssign.name} := ${toDebugString(toAssign.value)}`)}}return{result:!0,referenceRecord:conditionsReferenceRecord}};getEndpointHeaders=(headers,options)=>Object.entries(headers).reduce((acc,[headerKey,headerVal])=>({...acc,[headerKey]:headerVal.map(headerValEntry=>{const processedExpr=evaluateExpression(headerValEntry,"Header value entry",options);if("string"!=typeof processedExpr)throw new EndpointError(`Header '${headerKey}' value '${processedExpr}' is not a string`);return processedExpr})}),{});getEndpointProperties=(properties,options)=>Object.entries(properties).reduce((acc,[propertyKey,propertyVal])=>({...acc,[propertyKey]:group2.getEndpointProperty(propertyVal,options)}),{});getEndpointProperty=(property,options)=>{if(Array.isArray(property))return property.map(propertyEntry=>getEndpointProperty(propertyEntry,options));switch(typeof property){case"string":return evaluateTemplate(property,options);case"object":if(null===property)throw new EndpointError(`Unexpected endpoint property: ${property}`);return group2.getEndpointProperties(property,options);case"boolean":return property;default:throw new EndpointError("Unexpected endpoint property type: "+typeof property)}};group2={getEndpointProperty,getEndpointProperties};getEndpointUrl=(endpointUrl,options)=>{const expression=evaluateExpression(endpointUrl,"Endpoint URL",options);if("string"==typeof expression)try{return new URL(expression)}catch(error){console.error(`Failed to construct URL with ${expression}`,error);throw error}throw new EndpointError("Endpoint URL must be a string, got "+typeof expression)};evaluateEndpointRule=(endpointRule,options)=>{var _a8,_b5;const{conditions,endpoint}=endpointRule,{result,referenceRecord}=evaluateConditions(conditions,options);if(!result)return;const endpointRuleOptions={...options,referenceRecord:{...options.referenceRecord,...referenceRecord}},{url,properties,headers}=endpoint;null==(_b5=null==(_a8=options.logger)?void 0:_a8.debug)||_b5.call(_a8,`endpoints Resolving endpoint from template: ${toDebugString(endpoint)}`);return{...null!=headers&&{headers:getEndpointHeaders(headers,endpointRuleOptions)},...null!=properties&&{properties:getEndpointProperties(properties,endpointRuleOptions)},url:getEndpointUrl(url,endpointRuleOptions)}};evaluateErrorRule=(errorRule,options)=>{const{conditions,error}=errorRule,{result,referenceRecord}=evaluateConditions(conditions,options);if(result)throw new EndpointError(evaluateExpression(error,"Error",{...options,referenceRecord:{...options.referenceRecord,...referenceRecord}}))};evaluateRules=(rules,options)=>{for(const rule of rules)if("endpoint"===rule.type){const endpointOrUndefined=evaluateEndpointRule(rule,options);if(endpointOrUndefined)return endpointOrUndefined}else if("error"===rule.type)evaluateErrorRule(rule,options);else{if("tree"!==rule.type)throw new EndpointError(`Unknown endpoint rule: ${rule}`);{const endpointOrUndefined=group3.evaluateTreeRule(rule,options);if(endpointOrUndefined)return endpointOrUndefined}}throw new EndpointError("Rules evaluation failed")};evaluateTreeRule=(treeRule,options)=>{const{conditions,rules}=treeRule,{result,referenceRecord}=evaluateConditions(conditions,options);if(result)return group3.evaluateRules(rules,{...options,referenceRecord:{...options.referenceRecord,...referenceRecord}})};group3={evaluateRules,evaluateTreeRule};resolveEndpoint=(ruleSetObject,options)=>{var _a8,_b5,_c3,_d2,_e2;const{endpointParams,logger:logger2}=options,{parameters,rules}=ruleSetObject;null==(_b5=null==(_a8=options.logger)?void 0:_a8.debug)||_b5.call(_a8,`endpoints Initial EndpointParams: ${toDebugString(endpointParams)}`);const paramsWithDefault=Object.entries(parameters).filter(([,v2])=>null!=v2.default).map(([k2,v2])=>[k2,v2.default]);if(paramsWithDefault.length>0)for(const[paramKey,paramDefaultValue]of paramsWithDefault)endpointParams[paramKey]=null!=(_c3=endpointParams[paramKey])?_c3:paramDefaultValue;const requiredParams=Object.entries(parameters).filter(([,v2])=>v2.required).map(([k2])=>k2);for(const requiredParam of requiredParams)if(null==endpointParams[requiredParam])throw new EndpointError(`Missing required parameter: '${requiredParam}'`);const endpoint=evaluateRules(rules,{endpointParams,logger:logger2,referenceRecord:{}});null==(_e2=null==(_d2=options.logger)?void 0:_d2.debug)||_e2.call(_d2,`endpoints Resolved endpoint: ${toDebugString(endpoint)}`);return endpoint};selectedPartitionsInfo={partitions:[{id:"aws",outputs:{dnsSuffix:"amazonaws.com",dualStackDnsSuffix:"api.aws",implicitGlobalRegion:"us-east-1",name:"aws",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^(us|eu|ap|sa|ca|me|af|il|mx)\\-\\w+\\-\\d+$",regions:{"af-south-1":{description:"Africa (Cape Town)"},"ap-east-1":{description:"Asia Pacific (Hong Kong)"},"ap-east-2":{description:"Asia Pacific (Taipei)"},"ap-northeast-1":{description:"Asia Pacific (Tokyo)"},"ap-northeast-2":{description:"Asia Pacific (Seoul)"},"ap-northeast-3":{description:"Asia Pacific (Osaka)"},"ap-south-1":{description:"Asia Pacific (Mumbai)"},"ap-south-2":{description:"Asia Pacific (Hyderabad)"},"ap-southeast-1":{description:"Asia Pacific (Singapore)"},"ap-southeast-2":{description:"Asia Pacific (Sydney)"},"ap-southeast-3":{description:"Asia Pacific (Jakarta)"},"ap-southeast-4":{description:"Asia Pacific (Melbourne)"},"ap-southeast-5":{description:"Asia Pacific (Malaysia)"},"ap-southeast-6":{description:"Asia Pacific (New Zealand)"},"ap-southeast-7":{description:"Asia Pacific (Thailand)"},"aws-global":{description:"aws global region"},"ca-central-1":{description:"Canada (Central)"},"ca-west-1":{description:"Canada West (Calgary)"},"eu-central-1":{description:"Europe (Frankfurt)"},"eu-central-2":{description:"Europe (Zurich)"},"eu-north-1":{description:"Europe (Stockholm)"},"eu-south-1":{description:"Europe (Milan)"},"eu-south-2":{description:"Europe (Spain)"},"eu-west-1":{description:"Europe (Ireland)"},"eu-west-2":{description:"Europe (London)"},"eu-west-3":{description:"Europe (Paris)"},"il-central-1":{description:"Israel (Tel Aviv)"},"me-central-1":{description:"Middle East (UAE)"},"me-south-1":{description:"Middle East (Bahrain)"},"mx-central-1":{description:"Mexico (Central)"},"sa-east-1":{description:"South America (Sao Paulo)"},"us-east-1":{description:"US East (N. Virginia)"},"us-east-2":{description:"US East (Ohio)"},"us-west-1":{description:"US West (N. California)"},"us-west-2":{description:"US West (Oregon)"}}},{id:"aws-cn",outputs:{dnsSuffix:"amazonaws.com.cn",dualStackDnsSuffix:"api.amazonwebservices.com.cn",implicitGlobalRegion:"cn-northwest-1",name:"aws-cn",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^cn\\-\\w+\\-\\d+$",regions:{"aws-cn-global":{description:"aws-cn global region"},"cn-north-1":{description:"China (Beijing)"},"cn-northwest-1":{description:"China (Ningxia)"}}},{id:"aws-eusc",outputs:{dnsSuffix:"amazonaws.eu",dualStackDnsSuffix:"api.amazonwebservices.eu",implicitGlobalRegion:"eusc-de-east-1",name:"aws-eusc",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^eusc\\-(de)\\-\\w+\\-\\d+$",regions:{"eusc-de-east-1":{description:"AWS European Sovereign Cloud (Germany)"}}},{id:"aws-iso",outputs:{dnsSuffix:"c2s.ic.gov",dualStackDnsSuffix:"api.aws.ic.gov",implicitGlobalRegion:"us-iso-east-1",name:"aws-iso",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^us\\-iso\\-\\w+\\-\\d+$",regions:{"aws-iso-global":{description:"aws-iso global region"},"us-iso-east-1":{description:"US ISO East"},"us-iso-west-1":{description:"US ISO WEST"}}},{id:"aws-iso-b",outputs:{dnsSuffix:"sc2s.sgov.gov",dualStackDnsSuffix:"api.aws.scloud",implicitGlobalRegion:"us-isob-east-1",name:"aws-iso-b",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^us\\-isob\\-\\w+\\-\\d+$",regions:{"aws-iso-b-global":{description:"aws-iso-b global region"},"us-isob-east-1":{description:"US ISOB East (Ohio)"},"us-isob-west-1":{description:"US ISOB West"}}},{id:"aws-iso-e",outputs:{dnsSuffix:"cloud.adc-e.uk",dualStackDnsSuffix:"api.cloud-aws.adc-e.uk",implicitGlobalRegion:"eu-isoe-west-1",name:"aws-iso-e",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^eu\\-isoe\\-\\w+\\-\\d+$",regions:{"aws-iso-e-global":{description:"aws-iso-e global region"},"eu-isoe-west-1":{description:"EU ISOE West"}}},{id:"aws-iso-f",outputs:{dnsSuffix:"csp.hci.ic.gov",dualStackDnsSuffix:"api.aws.hci.ic.gov",implicitGlobalRegion:"us-isof-south-1",name:"aws-iso-f",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^us\\-isof\\-\\w+\\-\\d+$",regions:{"aws-iso-f-global":{description:"aws-iso-f global region"},"us-isof-east-1":{description:"US ISOF EAST"},"us-isof-south-1":{description:"US ISOF SOUTH"}}},{id:"aws-us-gov",outputs:{dnsSuffix:"amazonaws.com",dualStackDnsSuffix:"api.aws",implicitGlobalRegion:"us-gov-west-1",name:"aws-us-gov",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^us\\-gov\\-\\w+\\-\\d+$",regions:{"aws-us-gov-global":{description:"aws-us-gov global region"},"us-gov-east-1":{description:"AWS GovCloud (US-East)"},"us-gov-west-1":{description:"AWS GovCloud (US-West)"}}}],version:"1.1"};getUserAgentPrefix=()=>"";awsEndpointFunctions={isVirtualHostableS3Bucket:isVirtualHostableS3Bucket=(value,allowSubDomains=!1)=>{if(allowSubDomains){for(const label2 of value.split("."))if(!isVirtualHostableS3Bucket(label2))return!1;return!0}return!(!isValidHostLabel(value)||value.length<3||value.length>63||value!==value.toLowerCase()||isIpAddress(value))},parseArn:value=>{const segments=value.split(":");if(segments.length<6)return null;const[arn,partition2,service,region,accountId,...resourcePath]=segments;return"arn"!==arn||""===partition2||""===service||""===resourcePath.join(":")?null:{partition:partition2,service,region,accountId,resourceId:resourcePath.map(resource=>resource.split("/")).flat()}},partition:value=>{const{partitions}=selectedPartitionsInfo;for(const partition2 of partitions){const{regions,outputs}=partition2;for(const[region,regionData]of Object.entries(regions))if(region===value)return{...outputs,...regionData}}for(const partition2 of partitions){const{regionRegex,outputs}=partition2;if(new RegExp(regionRegex).test(value))return{...outputs}}const DEFAULT_PARTITION=partitions.find(partition2=>"aws"===partition2.id);if(!DEFAULT_PARTITION)throw new Error("Provided region was not found in the partition array or regex, and default partition with id 'aws' doesn't exist.");return{...DEFAULT_PARTITION.outputs}}};customEndpointFunctions.aws=awsEndpointFunctions;(function(RETRY_MODES2){RETRY_MODES2.STANDARD="standard";RETRY_MODES2.ADAPTIVE="adaptive"})(RETRY_MODES||(RETRY_MODES={}));DEFAULT_RETRY_MODE=RETRY_MODES.STANDARD;THROTTLING_ERROR_CODES=["BandwidthLimitExceeded","EC2ThrottledException","LimitExceededException","PriorRequestNotComplete","ProvisionedThroughputExceededException","RequestLimitExceeded","RequestThrottled","RequestThrottledException","SlowDown","ThrottledException","Throttling","ThrottlingException","TooManyRequestsException","TransactionInProgressException"];TRANSIENT_ERROR_CODES=["TimeoutError","RequestTimeout","RequestTimeoutException"];TRANSIENT_ERROR_STATUS_CODES=[500,502,503,504];NODEJS_TIMEOUT_ERROR_CODES=["ECONNRESET","ECONNREFUSED","EPIPE","ETIMEDOUT"];NODEJS_NETWORK_ERROR_CODES=["EHOSTUNREACH","ENETUNREACH","ENOTFOUND"];isRetryableByTrait=error=>void 0!==(null==error?void 0:error.$retryable);isClockSkewCorrectedError=error=>{var _a8;return null==(_a8=error.$metadata)?void 0:_a8.clockSkewCorrected};isBrowserNetworkError=error=>!!(error&&error instanceof TypeError)&&new Set(["Failed to fetch","NetworkError when attempting to fetch resource","The Internet connection appears to be offline","Load failed","Network request failed"]).has(error.message);isThrottlingError=error=>{var _a8,_b5;return 429===(null==(_a8=error.$metadata)?void 0:_a8.httpStatusCode)||THROTTLING_ERROR_CODES.includes(error.name)||1==(null==(_b5=error.$retryable)?void 0:_b5.throttling)};isTransientError=(error,depth=0)=>{var _a8;return isRetryableByTrait(error)||isClockSkewCorrectedError(error)||TRANSIENT_ERROR_CODES.includes(error.name)||NODEJS_TIMEOUT_ERROR_CODES.includes((null==error?void 0:error.code)||"")||NODEJS_NETWORK_ERROR_CODES.includes((null==error?void 0:error.code)||"")||TRANSIENT_ERROR_STATUS_CODES.includes((null==(_a8=error.$metadata)?void 0:_a8.httpStatusCode)||0)||isBrowserNetworkError(error)||void 0!==error.cause&&depth<=10&&isTransientError(error.cause,depth+1)};isServerError=error=>{var _a8;if(void 0!==(null==(_a8=error.$metadata)?void 0:_a8.httpStatusCode)){const statusCode=error.$metadata.httpStatusCode;return 500<=statusCode&&statusCode<=599&&!isTransientError(error)}return!1};_DefaultRateLimiter=class _DefaultRateLimiter{constructor(options){__publicField(this,"beta");__publicField(this,"minCapacity");__publicField(this,"minFillRate");__publicField(this,"scaleConstant");__publicField(this,"smooth");__publicField(this,"currentCapacity",0);__publicField(this,"enabled",!1);__publicField(this,"lastMaxRate",0);__publicField(this,"measuredTxRate",0);__publicField(this,"requestCount",0);__publicField(this,"fillRate");__publicField(this,"lastThrottleTime");__publicField(this,"lastTimestamp",0);__publicField(this,"lastTxRateBucket");__publicField(this,"maxCapacity");__publicField(this,"timeWindow",0);var _a8,_b5,_c3,_d2,_e2;this.beta=null!=(_a8=null==options?void 0:options.beta)?_a8:.7;this.minCapacity=null!=(_b5=null==options?void 0:options.minCapacity)?_b5:1;this.minFillRate=null!=(_c3=null==options?void 0:options.minFillRate)?_c3:.5;this.scaleConstant=null!=(_d2=null==options?void 0:options.scaleConstant)?_d2:.4;this.smooth=null!=(_e2=null==options?void 0:options.smooth)?_e2:.8;const currentTimeInSeconds=this.getCurrentTimeInSeconds();this.lastThrottleTime=currentTimeInSeconds;this.lastTxRateBucket=Math.floor(this.getCurrentTimeInSeconds());this.fillRate=this.minFillRate;this.maxCapacity=this.minCapacity}getCurrentTimeInSeconds(){return Date.now()/1e3}async getSendToken(){return this.acquireTokenBucket(1)}async acquireTokenBucket(amount){if(this.enabled){this.refillTokenBucket();if(amount>this.currentCapacity){const delay2=(amount-this.currentCapacity)/this.fillRate*1e3;await new Promise(resolve=>_DefaultRateLimiter.setTimeoutFn(resolve,delay2))}this.currentCapacity=this.currentCapacity-amount}}refillTokenBucket(){const timestamp=this.getCurrentTimeInSeconds();if(!this.lastTimestamp){this.lastTimestamp=timestamp;return}const fillAmount=(timestamp-this.lastTimestamp)*this.fillRate;this.currentCapacity=Math.min(this.maxCapacity,this.currentCapacity+fillAmount);this.lastTimestamp=timestamp}updateClientSendingRate(response){let calculatedRate;this.updateMeasuredRate();if(isThrottlingError(response)){const rateToUse=this.enabled?Math.min(this.measuredTxRate,this.fillRate):this.measuredTxRate;this.lastMaxRate=rateToUse;this.calculateTimeWindow();this.lastThrottleTime=this.getCurrentTimeInSeconds();calculatedRate=this.cubicThrottle(rateToUse);this.enableTokenBucket()}else{this.calculateTimeWindow();calculatedRate=this.cubicSuccess(this.getCurrentTimeInSeconds())}const newRate=Math.min(calculatedRate,2*this.measuredTxRate);this.updateTokenBucketRate(newRate)}calculateTimeWindow(){this.timeWindow=this.getPrecise(Math.pow(this.lastMaxRate*(1-this.beta)/this.scaleConstant,1/3))}cubicThrottle(rateToUse){return this.getPrecise(rateToUse*this.beta)}cubicSuccess(timestamp){return this.getPrecise(this.scaleConstant*Math.pow(timestamp-this.lastThrottleTime-this.timeWindow,3)+this.lastMaxRate)}enableTokenBucket(){this.enabled=!0}updateTokenBucketRate(newRate){this.refillTokenBucket();this.fillRate=Math.max(newRate,this.minFillRate);this.maxCapacity=Math.max(newRate,this.minCapacity);this.currentCapacity=Math.min(this.currentCapacity,this.maxCapacity)}updateMeasuredRate(){const t9=this.getCurrentTimeInSeconds(),timeBucket=Math.floor(2*t9)/2;this.requestCount++;if(timeBucket>this.lastTxRateBucket){const currentRate=this.requestCount/(timeBucket-this.lastTxRateBucket);this.measuredTxRate=this.getPrecise(currentRate*this.smooth+this.measuredTxRate*(1-this.smooth));this.requestCount=0;this.lastTxRateBucket=timeBucket}}getPrecise(num){return parseFloat(num.toFixed(8))}};__publicField(_DefaultRateLimiter,"setTimeoutFn",setTimeout);DefaultRateLimiter=_DefaultRateLimiter;getDefaultRetryBackoffStrategy=()=>{let delayBase=100;return{computeNextBackoffDelay:attempts=>Math.floor(Math.min(2e4,Math.random()*2**attempts*delayBase)),setDelayBase:delay2=>{delayBase=delay2}}};createDefaultRetryToken=({retryDelay,retryCount,retryCost})=>({getRetryCount:()=>retryCount,getRetryDelay:()=>Math.min(2e4,retryDelay),getRetryCost:()=>retryCost});StandardRetryStrategy=class{constructor(maxAttempts){__publicField(this,"maxAttempts");__publicField(this,"mode",RETRY_MODES.STANDARD);__publicField(this,"capacity",500);__publicField(this,"retryBackoffStrategy",getDefaultRetryBackoffStrategy());__publicField(this,"maxAttemptsProvider");this.maxAttempts=maxAttempts;this.maxAttemptsProvider="function"==typeof maxAttempts?maxAttempts:async()=>maxAttempts}async acquireInitialRetryToken(retryTokenScope){return createDefaultRetryToken({retryDelay:100,retryCount:0})}async refreshRetryTokenForRetry(token,errorInfo){const maxAttempts=await this.getMaxAttempts();if(this.shouldRetry(token,errorInfo,maxAttempts)){const errorType=errorInfo.errorType;this.retryBackoffStrategy.setDelayBase("THROTTLING"===errorType?500:100);const delayFromErrorType=this.retryBackoffStrategy.computeNextBackoffDelay(token.getRetryCount()),retryDelay=errorInfo.retryAfterHint?Math.max(errorInfo.retryAfterHint.getTime()-Date.now()||0,delayFromErrorType):delayFromErrorType,capacityCost=this.getCapacityCost(errorType);this.capacity-=capacityCost;return createDefaultRetryToken({retryDelay,retryCount:token.getRetryCount()+1,retryCost:capacityCost})}throw new Error("No retry token available")}recordSuccess(token){var _a8;this.capacity=Math.max(500,this.capacity+(null!=(_a8=token.getRetryCost())?_a8:1))}getCapacity(){return this.capacity}async getMaxAttempts(){try{return await this.maxAttemptsProvider()}catch(error){console.warn("Max attempts provider could not resolve. Using default of 3");return 3}}shouldRetry(tokenToRenew,errorInfo,maxAttempts){return tokenToRenew.getRetryCount()+1=this.getCapacityCost(errorInfo.errorType)&&this.isRetryableError(errorInfo.errorType)}getCapacityCost(errorType){return"TRANSIENT"===errorType?10:5}isRetryableError(errorType){return"THROTTLING"===errorType||"TRANSIENT"===errorType}};AdaptiveRetryStrategy=class{constructor(maxAttemptsProvider,options){__publicField(this,"maxAttemptsProvider");__publicField(this,"rateLimiter");__publicField(this,"standardRetryStrategy");__publicField(this,"mode",RETRY_MODES.ADAPTIVE);this.maxAttemptsProvider=maxAttemptsProvider;const{rateLimiter}=null!=options?options:{};this.rateLimiter=null!=rateLimiter?rateLimiter:new DefaultRateLimiter;this.standardRetryStrategy=new StandardRetryStrategy(maxAttemptsProvider)}async acquireInitialRetryToken(retryTokenScope){await this.rateLimiter.getSendToken();return this.standardRetryStrategy.acquireInitialRetryToken(retryTokenScope)}async refreshRetryTokenForRetry(tokenToRenew,errorInfo){this.rateLimiter.updateClientSendingRate(errorInfo);return this.standardRetryStrategy.refreshRetryTokenForRetry(tokenToRenew,errorInfo)}recordSuccess(token){this.rateLimiter.updateClientSendingRate({});this.standardRetryStrategy.recordSuccess(token)}};ConfiguredRetryStrategy=class extends StandardRetryStrategy{constructor(maxAttempts,computeNextBackoffDelay=100){super("function"==typeof maxAttempts?maxAttempts:async()=>maxAttempts);__publicField(this,"computeNextBackoffDelay");this.computeNextBackoffDelay="number"==typeof computeNextBackoffDelay?()=>computeNextBackoffDelay:computeNextBackoffDelay}async refreshRetryTokenForRetry(tokenToRenew,errorInfo){const token=await super.refreshRetryTokenForRetry(tokenToRenew,errorInfo);token.getRetryDelay=()=>this.computeNextBackoffDelay(token.getRetryCount());return token}};ACCOUNT_ID_ENDPOINT_REGEX=/\d{12}\.ddb/;UA_NAME_ESCAPE_REGEX=/[^!$%&'*+\-.^_`|~\w]/g;UA_VALUE_ESCAPE_REGEX=/[^!$%&'*+\-.^_`|~\w#]/g;BYTE_LIMIT=1024;userAgentMiddleware=options=>(next2,context2)=>async args=>{var _a8,_b5,_c3,_d2;const{request:request2}=args;if(!HttpRequest.isInstance(request2))return next2(args);const{headers}=request2,userAgent=(null==(_a8=null==context2?void 0:context2.userAgent)?void 0:_a8.map(escapeUserAgent))||[],defaultUserAgent2=(await options.defaultUserAgentProvider()).map(escapeUserAgent);await checkFeatures(context2,options,args);const awsContext=context2;defaultUserAgent2.push(`m/${encodeFeatures(Object.assign({},null==(_b5=context2.__smithy_context)?void 0:_b5.features,null==(_c3=awsContext.__aws_sdk_context)?void 0:_c3.features))}`);const customUserAgent=(null==(_d2=null==options?void 0:options.customUserAgent)?void 0:_d2.map(escapeUserAgent))||[],appId=await options.userAgentAppId();appId&&defaultUserAgent2.push(escapeUserAgent(["app",`${appId}`]));const prefix=getUserAgentPrefix(),sdkUserAgentValue=(prefix?[prefix]:[]).concat([...defaultUserAgent2,...userAgent,...customUserAgent]).join(" "),normalUAValue=[...defaultUserAgent2.filter(section=>section.startsWith("aws-sdk-")),...customUserAgent].join(" ");if("browser"!==options.runtime){normalUAValue&&(headers["x-amz-user-agent"]=headers["x-amz-user-agent"]?`${headers["user-agent"]} ${normalUAValue}`:normalUAValue);headers["user-agent"]=sdkUserAgentValue}else headers["x-amz-user-agent"]=sdkUserAgentValue;return next2({...args,request:request2})};escapeUserAgent=userAgentPair=>{var _a8;const name=userAgentPair[0].split("/").map(part=>part.replace(UA_NAME_ESCAPE_REGEX,"-")).join("/"),version2=null==(_a8=userAgentPair[1])?void 0:_a8.replace(UA_VALUE_ESCAPE_REGEX,"-"),prefixSeparatorIndex=name.indexOf("/"),prefix=name.substring(0,prefixSeparatorIndex);let uaName=name.substring(prefixSeparatorIndex+1);"api"===prefix&&(uaName=uaName.toLowerCase());return[prefix,uaName,version2].filter(item=>item&&item.length>0).reduce((acc,item,index6)=>{switch(index6){case 0:return item;case 1:return`${acc}/${item}`;default:return`${acc}#${item}`}},"")};getUserAgentMiddlewareOptions={name:"getUserAgentMiddleware",step:"build",priority:"low",tags:["SET_USER_AGENT","USER_AGENT"],override:!0};getUserAgentPlugin=config=>({applyToStack:clientStack=>{clientStack.add(userAgentMiddleware(config),getUserAgentMiddlewareOptions)}});validRegions=new Set;checkRegion=(region,check=isValidHostLabel)=>{if(validRegions.has(region)||check(region))validRegions.add(region);else{if("*"!==region)throw new Error(`Region not accepted: region="${region}" is not a valid hostname component.`);console.warn('@smithy/config-resolver WARN - Please use the caller region instead of "*". See "sigv4a" in https://github.com/aws/aws-sdk-js-v3/blob/main/supplemental-docs/CLIENTS.md.')}};isFipsRegion=region=>"string"==typeof region&&(region.startsWith("fips-")||region.endsWith("-fips"));getRealRegion=region=>isFipsRegion(region)?["fips-aws-global","aws-fips"].includes(region)?"us-east-1":region.replace(/fips-(dkr-|prod-)?|-fips/,""):region;resolveRegionConfig=input=>{const{region,useFipsEndpoint}=input;if(!region)throw new Error("Region is missing");return Object.assign(input,{region:async()=>{const providedRegion="function"==typeof region?await region():region,realRegion=getRealRegion(providedRegion);checkRegion(realRegion);return realRegion},useFipsEndpoint:async()=>{const providedRegion="string"==typeof region?region:await region();return!!isFipsRegion(providedRegion)||("function"!=typeof useFipsEndpoint?Promise.resolve(!!useFipsEndpoint):useFipsEndpoint())}})};resolveEventStreamSerdeConfig=input=>Object.assign(input,{eventStreamMarshaller:input.eventStreamSerdeProvider(input)});CONTENT_LENGTH_HEADER2="content-length";contentLengthMiddlewareOptions={step:"build",tags:["SET_CONTENT_LENGTH","CONTENT_LENGTH"],name:"contentLengthMiddleware",override:!0};getContentLengthPlugin=options=>({applyToStack:clientStack=>{clientStack.add(contentLengthMiddleware(options.bodyLengthChecker),contentLengthMiddlewareOptions)}});resolveParamsForS3=async endpointParams=>{const bucket=(null==endpointParams?void 0:endpointParams.Bucket)||"";"string"==typeof endpointParams.Bucket&&(endpointParams.Bucket=bucket.replace(/#/g,encodeURIComponent("#")).replace(/\?/g,encodeURIComponent("?")));if(isArnBucketName(bucket)){if(!0===endpointParams.ForcePathStyle)throw new Error("Path-style addressing cannot be used with ARN buckets")}else(!isDnsCompatibleBucketName(bucket)||-1!==bucket.indexOf(".")&&!String(endpointParams.Endpoint).startsWith("http:")||bucket.toLowerCase()!==bucket||bucket.length<3)&&(endpointParams.ForcePathStyle=!0);if(endpointParams.DisableMultiRegionAccessPoints){endpointParams.disableMultiRegionAccessPoints=!0;endpointParams.DisableMRAP=!0}return endpointParams};DOMAIN_PATTERN=/^[a-z0-9][a-z0-9\.\-]{1,61}[a-z0-9]$/;IP_ADDRESS_PATTERN=/(\d+\.){3}\d+/;DOTS_PATTERN=/\.\./;isDnsCompatibleBucketName=bucketName=>DOMAIN_PATTERN.test(bucketName)&&!IP_ADDRESS_PATTERN.test(bucketName)&&!DOTS_PATTERN.test(bucketName);isArnBucketName=bucketName=>{const[arn,partition2,service,,,bucket]=bucketName.split(":"),isArn="arn"===arn&&bucketName.split(":").length>=6,isValidArn=Boolean(isArn&&partition2&&service&&bucket);if(isArn&&!isValidArn)throw new Error(`Invalid ARN: ${bucketName} was an invalid ARN.`);return isValidArn};createConfigValueProvider=(configKey,canonicalEndpointParamKey,config,isClientContextParam=!1)=>{const configProvider=async()=>{var _a8,_b5;let configValue;if(isClientContextParam){const clientContextParams=config.clientContextParams,nestedValue=null==clientContextParams?void 0:clientContextParams[configKey];configValue=null!=(_a8=null!=nestedValue?nestedValue:config[configKey])?_a8:config[canonicalEndpointParamKey]}else configValue=null!=(_b5=config[configKey])?_b5:config[canonicalEndpointParamKey];return"function"==typeof configValue?configValue():configValue};return"credentialScope"===configKey||"CredentialScope"===canonicalEndpointParamKey?async()=>{var _a8;const credentials="function"==typeof config.credentials?await config.credentials():config.credentials;return null!=(_a8=null==credentials?void 0:credentials.credentialScope)?_a8:null==credentials?void 0:credentials.CredentialScope}:"accountId"===configKey||"AccountId"===canonicalEndpointParamKey?async()=>{var _a8;const credentials="function"==typeof config.credentials?await config.credentials():config.credentials;return null!=(_a8=null==credentials?void 0:credentials.accountId)?_a8:null==credentials?void 0:credentials.AccountId}:"endpoint"===configKey||"endpoint"===canonicalEndpointParamKey?async()=>{if(!1===config.isCustomEndpoint)return;const endpoint=await configProvider();if(endpoint&&"object"==typeof endpoint){if("url"in endpoint)return endpoint.url.href;if("hostname"in endpoint){const{protocol,hostname,port,path:path2}=endpoint;return`${protocol}//${hostname}${port?":"+port:""}${path2}`}}return endpoint}:configProvider};getEndpointFromConfig=async serviceId=>{};toEndpointV12=endpoint=>{if("object"==typeof endpoint){if("url"in endpoint){const v1Endpoint=parseUrl(endpoint.url);if(endpoint.headers){v1Endpoint.headers={};for(const[name,values2]of Object.entries(endpoint.headers))v1Endpoint.headers[name.toLowerCase()]=values2.join(", ")}return v1Endpoint}return endpoint}return parseUrl(endpoint)};getEndpointFromInstructions=async(commandInput,instructionsSupplier,clientConfig,context2)=>{if(!clientConfig.isCustomEndpoint){let endpointFromConfig;endpointFromConfig=clientConfig.serviceConfiguredEndpoint?await clientConfig.serviceConfiguredEndpoint():await getEndpointFromConfig(clientConfig.serviceId);if(endpointFromConfig){clientConfig.endpoint=()=>Promise.resolve(toEndpointV12(endpointFromConfig));clientConfig.isCustomEndpoint=!0}}const endpointParams=await resolveParams(commandInput,instructionsSupplier,clientConfig);if("function"!=typeof clientConfig.endpointProvider)throw new Error("config.endpointProvider is not set.");const endpoint=clientConfig.endpointProvider(endpointParams,context2);if(clientConfig.isCustomEndpoint&&clientConfig.endpoint){const customEndpoint=await clientConfig.endpoint();if(null==customEndpoint?void 0:customEndpoint.headers){null!=endpoint.headers||(endpoint.headers={});for(const[name,value]of Object.entries(customEndpoint.headers))endpoint.headers[name]=Array.isArray(value)?value:[value]}}return endpoint};resolveParams=async(commandInput,instructionsSupplier,clientConfig)=>{var _a8;const endpointParams={},instructions=(null==(_a8=null==instructionsSupplier?void 0:instructionsSupplier.getEndpointParameterInstructions)?void 0:_a8.call(instructionsSupplier))||{};for(const[name,instruction]of Object.entries(instructions))switch(instruction.type){case"staticContextParams":endpointParams[name]=instruction.value;break;case"contextParams":endpointParams[name]=commandInput[instruction.name];break;case"clientContextParams":case"builtInParams":endpointParams[name]=await createConfigValueProvider(instruction.name,name,clientConfig,"builtInParams"!==instruction.type)();break;case"operationContextParams":endpointParams[name]=instruction.get(commandInput);break;default:throw new Error("Unrecognized endpoint parameter instruction: "+JSON.stringify(instruction))}0===Object.keys(instructions).length&&Object.assign(endpointParams,clientConfig);"s3"===String(clientConfig.serviceId).toLowerCase()&&await resolveParamsForS3(endpointParams);return endpointParams};endpointMiddleware=({config,instructions})=>(next2,context2)=>async args=>{var _a8,_b5,_c3;config.isCustomEndpoint&&setFeature2(context2,"ENDPOINT_OVERRIDE","N");const endpoint=await getEndpointFromInstructions(args.input,{getEndpointParameterInstructions:()=>instructions},{...config},context2);context2.endpointV2=endpoint;context2.authSchemes=null==(_a8=endpoint.properties)?void 0:_a8.authSchemes;const authScheme=null==(_b5=context2.authSchemes)?void 0:_b5[0];if(authScheme){context2.signing_region=authScheme.signingRegion;context2.signing_service=authScheme.signingName;const smithyContext=getSmithyContext(context2),httpAuthOption=null==(_c3=null==smithyContext?void 0:smithyContext.selectedHttpAuthScheme)?void 0:_c3.httpAuthOption;httpAuthOption&&(httpAuthOption.signingProperties=Object.assign(httpAuthOption.signingProperties||{},{signing_region:authScheme.signingRegion,signingRegion:authScheme.signingRegion,signing_service:authScheme.signingName,signingName:authScheme.signingName,signingRegionSet:authScheme.signingRegionSet},authScheme.properties))}return next2({...args})};endpointMiddlewareOptions={step:"serialize",tags:["ENDPOINT_PARAMETERS","ENDPOINT_V2","ENDPOINT"],name:"endpointV2Middleware",override:!0,relation:"before",toMiddleware:"serializerMiddleware"};getEndpointPlugin=(config,instructions)=>({applyToStack:clientStack=>{clientStack.addRelativeTo(endpointMiddleware({config,instructions}),endpointMiddlewareOptions)}});resolveEndpointConfig=input=>{var _a8;const tls=null==(_a8=input.tls)||_a8,{endpoint,useDualstackEndpoint,useFipsEndpoint}=input,customEndpointProvider=null!=endpoint?async()=>toEndpointV12(await normalizeProvider(endpoint)()):void 0,isCustomEndpoint=!!endpoint,resolvedConfig=Object.assign(input,{endpoint:customEndpointProvider,tls,isCustomEndpoint,useDualstackEndpoint:normalizeProvider(null!=useDualstackEndpoint&&useDualstackEndpoint),useFipsEndpoint:normalizeProvider(null!=useFipsEndpoint&&useFipsEndpoint)});let configuredEndpointPromise;resolvedConfig.serviceConfiguredEndpoint=async()=>{input.serviceId&&!configuredEndpointPromise&&(configuredEndpointPromise=getEndpointFromConfig(input.serviceId));return configuredEndpointPromise};return resolvedConfig};asSdkError=error=>error instanceof Error?error:error instanceof Object?Object.assign(new Error,error):"string"==typeof error?new Error(error):new Error(`AWS SDK error wrapper for ${error}`);resolveRetryConfig=input=>{var _a8;const{retryStrategy,retryMode}=input,maxAttempts=normalizeProvider(null!=(_a8=input.maxAttempts)?_a8:3);let controller=retryStrategy?Promise.resolve(retryStrategy):void 0;const getDefault=async()=>await normalizeProvider(retryMode)()===RETRY_MODES.ADAPTIVE?new AdaptiveRetryStrategy(maxAttempts):new StandardRetryStrategy(maxAttempts);return Object.assign(input,{maxAttempts,retryStrategy:()=>null!=controller?controller:controller=getDefault()})};isStreamingPayload=request2=>(null==request2?void 0:request2.body)instanceof ReadableStream;retryMiddleware=options=>(next2,context2)=>async args=>{var _a8;let retryStrategy=await options.retryStrategy();const maxAttempts=await options.maxAttempts();if(!isRetryStrategyV2(retryStrategy)){(null==retryStrategy?void 0:retryStrategy.mode)&&(context2.userAgent=[...context2.userAgent||[],["cfg/retry-mode",retryStrategy.mode]]);return retryStrategy.retry(next2,args)}{let retryToken=await retryStrategy.acquireInitialRetryToken(context2.partition_id),lastError=new Error,attempts=0,totalRetryDelay=0;const{request:request2}=args,isRequest=HttpRequest.isInstance(request2);isRequest&&(request2.headers["amz-sdk-invocation-id"]=v4());for(;;)try{isRequest&&(request2.headers["amz-sdk-request"]=`attempt=${attempts+1}; max=${maxAttempts}`);const{response,output}=await next2(args);retryStrategy.recordSuccess(retryToken);output.$metadata.attempts=attempts+1;output.$metadata.totalRetryDelay=totalRetryDelay;return{response,output}}catch(e3){const retryErrorInfo=getRetryErrorInfo(e3);lastError=asSdkError(e3);if(isRequest&&isStreamingPayload(request2)){null==(_a8=context2.logger instanceof NoOpLogger?console:context2.logger)||_a8.warn("An error was encountered in a non-retryable streaming request.");throw lastError}try{retryToken=await retryStrategy.refreshRetryTokenForRetry(retryToken,retryErrorInfo)}catch(refreshError){lastError.$metadata||(lastError.$metadata={});lastError.$metadata.attempts=attempts+1;lastError.$metadata.totalRetryDelay=totalRetryDelay;throw lastError}attempts=retryToken.getRetryCount();const delay2=retryToken.getRetryDelay();totalRetryDelay+=delay2;await new Promise(resolve=>setTimeout(resolve,delay2))}}};isRetryStrategyV2=retryStrategy=>void 0!==retryStrategy.acquireInitialRetryToken&&void 0!==retryStrategy.refreshRetryTokenForRetry&&void 0!==retryStrategy.recordSuccess;getRetryErrorInfo=error=>{const errorInfo={error,errorType:getRetryErrorType(error)},retryAfterHint=getRetryAfterHint(error.$response);retryAfterHint&&(errorInfo.retryAfterHint=retryAfterHint);return errorInfo};getRetryErrorType=error=>isThrottlingError(error)?"THROTTLING":isTransientError(error)?"TRANSIENT":isServerError(error)?"SERVER_ERROR":"CLIENT_ERROR";retryMiddlewareOptions={name:"retryMiddleware",tags:["RETRY"],step:"finalizeRequest",priority:"high",override:!0};getRetryPlugin=options=>({applyToStack:clientStack=>{clientStack.add(retryMiddleware(options),retryMiddlewareOptions)}});getRetryAfterHint=response=>{if(!HttpResponse.isInstance(response))return;const retryAfterHeaderName=Object.keys(response.headers).find(key3=>"retry-after"===key3.toLowerCase());if(!retryAfterHeaderName)return;const retryAfter=response.headers[retryAfterHeaderName],retryAfterSeconds=Number(retryAfter);return Number.isNaN(retryAfterSeconds)?new Date(retryAfter):new Date(1e3*retryAfterSeconds)};SignatureV4MultiRegion=class{constructor(options){__publicField(this,"sigv4aSigner");__publicField(this,"sigv4Signer");__publicField(this,"signerOptions");this.sigv4Signer=new SignatureV4S3Express(options);this.signerOptions=options}static sigv4aDependency(){return"none"}async sign(requestToSign,options={}){return"*"===options.signingRegion?this.getSigv4aSigner().sign(requestToSign,options):this.sigv4Signer.sign(requestToSign,options)}async signWithCredentials(requestToSign,credentials,options={}){if("*"===options.signingRegion){this.getSigv4aSigner();throw new Error('signWithCredentials with signingRegion \'*\' is only supported when using the CRT dependency @aws-sdk/signature-v4-crt. Please check whether you have installed the "@aws-sdk/signature-v4-crt" package explicitly. You must also register the package by calling [require("@aws-sdk/signature-v4-crt");] or an ESM equivalent such as [import "@aws-sdk/signature-v4-crt";]. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt')}return this.sigv4Signer.signWithCredentials(requestToSign,credentials,options)}async presign(originalRequest,options={}){if("*"===options.signingRegion){this.getSigv4aSigner();throw new Error('presign with signingRegion \'*\' is only supported when using the CRT dependency @aws-sdk/signature-v4-crt. Please check whether you have installed the "@aws-sdk/signature-v4-crt" package explicitly. You must also register the package by calling [require("@aws-sdk/signature-v4-crt");] or an ESM equivalent such as [import "@aws-sdk/signature-v4-crt";]. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt')}return this.sigv4Signer.presign(originalRequest,options)}async presignWithCredentials(originalRequest,credentials,options={}){if("*"===options.signingRegion)throw new Error("Method presignWithCredentials is not supported for [signingRegion=*].");return this.sigv4Signer.presignWithCredentials(originalRequest,credentials,options)}getSigv4aSigner(){if(!this.sigv4aSigner){const CrtSignerV4=null,JsSigV4aSigner=null;if("node"===this.signerOptions.runtime){if(!CrtSignerV4&&!JsSigV4aSigner)throw new Error("Neither CRT nor JS SigV4a implementation is available. Please load either @aws-sdk/signature-v4-crt or @aws-sdk/signature-v4a. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt");if(CrtSignerV4&&"function"==typeof CrtSignerV4)this.sigv4aSigner=new CrtSignerV4({...this.signerOptions,signingAlgorithm:1});else{if(!JsSigV4aSigner||"function"!=typeof JsSigV4aSigner)throw new Error("Available SigV4a implementation is not a valid constructor. Please ensure you've properly imported @aws-sdk/signature-v4-crt or @aws-sdk/signature-v4a.For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt");this.sigv4aSigner=new JsSigV4aSigner({...this.signerOptions})}}else{if(!JsSigV4aSigner||"function"!=typeof JsSigV4aSigner)throw new Error("JS SigV4a implementation is not available or not a valid constructor. Please check whether you have installed the @aws-sdk/signature-v4a package explicitly. The CRT implementation is not available for browsers. You must also register the package by calling [require('@aws-sdk/signature-v4a');] or an ESM equivalent such as [import '@aws-sdk/signature-v4a';]. For more information please go to https://github.com/aws/aws-sdk-js-v3#using-javascript-non-crt-implementation-of-sigv4a");this.sigv4aSigner=new JsSigV4aSigner({...this.signerOptions})}}return this.sigv4aSigner}};cs="required",ct="type",cu="rules",cv="conditions",cw="fn",cx="argv",cy="ref",cz="assign",cA="url",cB="properties",cC="backend",cD="authSchemes",cE="disableDoubleEncoding",cF="signingName",cG="signingRegion",cH="headers",cI="signingRegionSet";c=!0,d3="isSet",e2="booleanEquals",f="error",g="aws.partition",h="stringEquals",i="getAttr",j="name",k="substring",l="bucketSuffix",m2="parseURL",n2="endpoint",o="tree",p="aws.isVirtualHostableS3Bucket",q="{url#scheme}://{Bucket}.{url#authority}{url#path}",r3="not",s="accessPointSuffix",t8="{url#scheme}://{url#authority}{url#path}",u="hardwareType",v="regionPrefix",w="bucketAliasSuffix",x="outpostId",y="isValidHostLabel",z="sigv4a",A="s3-outposts",B="s3",C2="{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}",D="https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}",E="https://{Bucket}.s3.{partitionResult#dnsSuffix}",F="aws.parseArn",G2="bucketArn",H="arnType",J="s3-object-lambda",K="accesspoint",L3="accessPointName",M2="{url#scheme}://{accessPointName}-{bucketArn#accountId}.{url#authority}{url#path}",N2="mrapPartition",O="outpostType",P2="arnPrefix",Q="{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}",R="https://s3.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",S="https://s3.{partitionResult#dnsSuffix}",T={[cs]:!1,[ct]:"string"},U={[cs]:!0,default:!1,[ct]:"boolean"},V={[cs]:!1,[ct]:"boolean"},W2={[cw]:e2,[cx]:[{[cy]:"Accelerate"},!0]},X={[cw]:e2,[cx]:[{[cy]:"UseFIPS"},!0]},Y={[cw]:e2,[cx]:[{[cy]:"UseDualStack"},!0]},Z={[cw]:d3,[cx]:[{[cy]:"Endpoint"}]},aa={[cw]:g,[cx]:[{[cy]:"Region"}],[cz]:"partitionResult"},ab={[cw]:h,[cx]:[{[cw]:i,[cx]:[{[cy]:"partitionResult"},j]},"aws-cn"]},ac={[cw]:d3,[cx]:[{[cy]:"Bucket"}]},ad={[cy]:"Bucket"},ae={[cv]:[W2],[f]:"S3Express does not support S3 Accelerate.",[ct]:f},af={[cv]:[Z,{[cw]:m2,[cx]:[{[cy]:"Endpoint"}],[cz]:"url"}],[cu]:[{[cv]:[{[cw]:d3,[cx]:[{[cy]:"DisableS3ExpressSessionAuth"}]},{[cw]:e2,[cx]:[{[cy]:"DisableS3ExpressSessionAuth"},!0]}],[cu]:[{[cv]:[{[cw]:e2,[cx]:[{[cw]:i,[cx]:[{[cy]:"url"},"isIp"]},!0]}],[cu]:[{[cv]:[{[cw]:"uriEncode",[cx]:[ad],[cz]:"uri_encoded_bucket"}],[cu]:[{[n2]:{[cA]:"{url#scheme}://{url#authority}/{uri_encoded_bucket}{url#path}",[cB]:{[cC]:"S3Express",[cD]:[{[cE]:!0,[j]:"sigv4",[cF]:"s3express",[cG]:"{Region}"}]},[cH]:{}},[ct]:n2}],[ct]:o}],[ct]:o},{[cv]:[{[cw]:p,[cx]:[ad,!1]}],[cu]:[{[n2]:{[cA]:q,[cB]:{[cC]:"S3Express",[cD]:[{[cE]:!0,[j]:"sigv4",[cF]:"s3express",[cG]:"{Region}"}]},[cH]:{}},[ct]:n2}],[ct]:o},{[f]:"S3Express bucket name is not a valid virtual hostable name.",[ct]:f}],[ct]:o},{[cv]:[{[cw]:e2,[cx]:[{[cw]:i,[cx]:[{[cy]:"url"},"isIp"]},!0]}],[cu]:[{[cv]:[{[cw]:"uriEncode",[cx]:[ad],[cz]:"uri_encoded_bucket"}],[cu]:[{[n2]:{[cA]:"{url#scheme}://{url#authority}/{uri_encoded_bucket}{url#path}",[cB]:{[cC]:"S3Express",[cD]:[{[cE]:!0,[j]:"sigv4-s3express",[cF]:"s3express",[cG]:"{Region}"}]},[cH]:{}},[ct]:n2}],[ct]:o}],[ct]:o},{[cv]:[{[cw]:p,[cx]:[ad,!1]}],[cu]:[{[n2]:{[cA]:q,[cB]:{[cC]:"S3Express",[cD]:[{[cE]:!0,[j]:"sigv4-s3express",[cF]:"s3express",[cG]:"{Region}"}]},[cH]:{}},[ct]:n2}],[ct]:o},{[f]:"S3Express bucket name is not a valid virtual hostable name.",[ct]:f}],[ct]:o},ag={[cw]:m2,[cx]:[{[cy]:"Endpoint"}],[cz]:"url"},ah={[cw]:e2,[cx]:[{[cw]:i,[cx]:[{[cy]:"url"},"isIp"]},!0]},ai={[cy]:"url"},aj={[cw]:"uriEncode",[cx]:[ad],[cz]:"uri_encoded_bucket"},ak={[cC]:"S3Express",[cD]:[{[cE]:!0,[j]:"sigv4",[cF]:"s3express",[cG]:"{Region}"}]},al={},am={[cw]:p,[cx]:[ad,!1]},an={[f]:"S3Express bucket name is not a valid virtual hostable name.",[ct]:f},ao={[cw]:d3,[cx]:[{[cy]:"UseS3ExpressControlEndpoint"}]},ap={[cw]:e2,[cx]:[{[cy]:"UseS3ExpressControlEndpoint"},!0]},aq={[cw]:r3,[cx]:[Z]},ar={[cw]:e2,[cx]:[{[cy]:"UseDualStack"},!1]},as={[cw]:e2,[cx]:[{[cy]:"UseFIPS"},!1]},at={[f]:"Unrecognized S3Express bucket name format.",[ct]:f},au={[cw]:r3,[cx]:[ac]},av={[cy]:u},aw={[cv]:[aq],[f]:"Expected a endpoint to be specified but no endpoint was found",[ct]:f},ax={[cD]:[{[cE]:!0,[j]:z,[cF]:A,[cI]:["*"]},{[cE]:!0,[j]:"sigv4",[cF]:A,[cG]:"{Region}"}]},ay={[cw]:e2,[cx]:[{[cy]:"ForcePathStyle"},!1]},az={[cy]:"ForcePathStyle"},aA={[cw]:e2,[cx]:[{[cy]:"Accelerate"},!1]},aB={[cw]:h,[cx]:[{[cy]:"Region"},"aws-global"]},aC={[cD]:[{[cE]:!0,[j]:"sigv4",[cF]:B,[cG]:"us-east-1"}]},aD={[cw]:r3,[cx]:[aB]},aE={[cw]:e2,[cx]:[{[cy]:"UseGlobalEndpoint"},!0]},aF={[cA]:"https://{Bucket}.s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}",[cB]:{[cD]:[{[cE]:!0,[j]:"sigv4",[cF]:B,[cG]:"{Region}"}]},[cH]:{}},aG={[cD]:[{[cE]:!0,[j]:"sigv4",[cF]:B,[cG]:"{Region}"}]},aH={[cw]:e2,[cx]:[{[cy]:"UseGlobalEndpoint"},!1]},aI={[cA]:"https://{Bucket}.s3-fips.{Region}.{partitionResult#dnsSuffix}",[cB]:aG,[cH]:{}},aJ={[cA]:"https://{Bucket}.s3-accelerate.dualstack.{partitionResult#dnsSuffix}",[cB]:aG,[cH]:{}},aK={[cA]:"https://{Bucket}.s3.dualstack.{Region}.{partitionResult#dnsSuffix}",[cB]:aG,[cH]:{}},aL={[cw]:e2,[cx]:[{[cw]:i,[cx]:[ai,"isIp"]},!1]},aM={[cA]:C2,[cB]:aG,[cH]:{}},aN={[cA]:q,[cB]:aG,[cH]:{}},aO={[n2]:aN,[ct]:n2},aP={[cA]:D,[cB]:aG,[cH]:{}},aQ={[cA]:"https://{Bucket}.s3.{Region}.{partitionResult#dnsSuffix}",[cB]:aG,[cH]:{}},aR={[f]:"Invalid region: region was not a valid DNS name.",[ct]:f},aS={[cy]:G2},aT={[cy]:H},aU={[cw]:i,[cx]:[aS,"service"]},aV={[cy]:L3},aW={[cv]:[Y],[f]:"S3 Object Lambda does not support Dual-stack",[ct]:f},aX={[cv]:[W2],[f]:"S3 Object Lambda does not support S3 Accelerate",[ct]:f},aY={[cv]:[{[cw]:d3,[cx]:[{[cy]:"DisableAccessPoints"}]},{[cw]:e2,[cx]:[{[cy]:"DisableAccessPoints"},!0]}],[f]:"Access points are not supported for this operation",[ct]:f},aZ={[cv]:[{[cw]:d3,[cx]:[{[cy]:"UseArnRegion"}]},{[cw]:e2,[cx]:[{[cy]:"UseArnRegion"},!1]},{[cw]:r3,[cx]:[{[cw]:h,[cx]:[{[cw]:i,[cx]:[aS,"region"]},"{Region}"]}]}],[f]:"Invalid configuration: region from ARN `{bucketArn#region}` does not match client region `{Region}` and UseArnRegion is `false`",[ct]:f},ba={[cw]:i,[cx]:[{[cy]:"bucketPartition"},j]},bb={[cw]:i,[cx]:[aS,"accountId"]},bc={[cD]:[{[cE]:!0,[j]:"sigv4",[cF]:J,[cG]:"{bucketArn#region}"}]},bd={[f]:"Invalid ARN: The access point name may only contain a-z, A-Z, 0-9 and `-`. Found: `{accessPointName}`",[ct]:f},be={[f]:"Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`",[ct]:f},bf={[f]:"Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)",[ct]:f},bg={[f]:"Client was configured for partition `{partitionResult#name}` but ARN (`{Bucket}`) has `{bucketPartition#name}`",[ct]:f},bh={[f]:"Invalid ARN: The ARN may only contain a single resource component after `accesspoint`.",[ct]:f},bi={[f]:"Invalid ARN: Expected a resource of the format `accesspoint:` but no name was provided",[ct]:f},bj={[cD]:[{[cE]:!0,[j]:"sigv4",[cF]:B,[cG]:"{bucketArn#region}"}]},bk={[cD]:[{[cE]:!0,[j]:z,[cF]:A,[cI]:["*"]},{[cE]:!0,[j]:"sigv4",[cF]:A,[cG]:"{bucketArn#region}"}]},bl={[cw]:F,[cx]:[ad]},bm={[cA]:"https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cB]:aG,[cH]:{}},bn={[cA]:"https://s3-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cB]:aG,[cH]:{}},bo={[cA]:"https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cB]:aG,[cH]:{}},bp={[cA]:Q,[cB]:aG,[cH]:{}},bq={[cA]:"https://s3.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cB]:aG,[cH]:{}},br={[cy]:"UseObjectLambdaEndpoint"},bs={[cD]:[{[cE]:!0,[j]:"sigv4",[cF]:J,[cG]:"{Region}"}]},bt={[cA]:"https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}",[cB]:aG,[cH]:{}},bu={[cA]:"https://s3-fips.{Region}.{partitionResult#dnsSuffix}",[cB]:aG,[cH]:{}},bv={[cA]:"https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}",[cB]:aG,[cH]:{}},bw={[cA]:t8,[cB]:aG,[cH]:{}},bx={[cA]:"https://s3.{Region}.{partitionResult#dnsSuffix}",[cB]:aG,[cH]:{}},by=[{[cy]:"Region"}],bz=[{[cy]:"Endpoint"}],bA=[ad],bB=[W2],bC=[Z,ag],bD=[{[cw]:d3,[cx]:[{[cy]:"DisableS3ExpressSessionAuth"}]},{[cw]:e2,[cx]:[{[cy]:"DisableS3ExpressSessionAuth"},!0]}],bE=[aj],bF=[am],bG=[aa],bH=[X,Y],bI=[X,ar],bJ=[as,Y],bK=[as,ar],bL=[{[cw]:k,[cx]:[ad,6,14,!0],[cz]:"s3expressAvailabilityZoneId"},{[cw]:k,[cx]:[ad,14,16,!0],[cz]:"s3expressAvailabilityZoneDelim"},{[cw]:h,[cx]:[{[cy]:"s3expressAvailabilityZoneDelim"},"--"]}],bM=[{[cv]:[X,Y],[n2]:{[cA]:"https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",[cB]:ak,[cH]:{}},[ct]:n2},{[cv]:bI,[n2]:{[cA]:"https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",[cB]:ak,[cH]:{}},[ct]:n2},{[cv]:bJ,[n2]:{[cA]:"https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",[cB]:ak,[cH]:{}},[ct]:n2},{[cv]:bK,[n2]:{[cA]:"https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",[cB]:ak,[cH]:{}},[ct]:n2}],bN=[{[cw]:k,[cx]:[ad,6,15,!0],[cz]:"s3expressAvailabilityZoneId"},{[cw]:k,[cx]:[ad,15,17,!0],[cz]:"s3expressAvailabilityZoneDelim"},{[cw]:h,[cx]:[{[cy]:"s3expressAvailabilityZoneDelim"},"--"]}],bO=[{[cw]:k,[cx]:[ad,6,19,!0],[cz]:"s3expressAvailabilityZoneId"},{[cw]:k,[cx]:[ad,19,21,!0],[cz]:"s3expressAvailabilityZoneDelim"},{[cw]:h,[cx]:[{[cy]:"s3expressAvailabilityZoneDelim"},"--"]}],bP=[{[cw]:k,[cx]:[ad,6,20,!0],[cz]:"s3expressAvailabilityZoneId"},{[cw]:k,[cx]:[ad,20,22,!0],[cz]:"s3expressAvailabilityZoneDelim"},{[cw]:h,[cx]:[{[cy]:"s3expressAvailabilityZoneDelim"},"--"]}],bQ=[{[cw]:k,[cx]:[ad,6,26,!0],[cz]:"s3expressAvailabilityZoneId"},{[cw]:k,[cx]:[ad,26,28,!0],[cz]:"s3expressAvailabilityZoneDelim"},{[cw]:h,[cx]:[{[cy]:"s3expressAvailabilityZoneDelim"},"--"]}],bR=[{[cv]:[X,Y],[n2]:{[cA]:"https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",[cB]:{[cC]:"S3Express",[cD]:[{[cE]:!0,[j]:"sigv4-s3express",[cF]:"s3express",[cG]:"{Region}"}]},[cH]:{}},[ct]:n2},{[cv]:bI,[n2]:{[cA]:"https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",[cB]:{[cC]:"S3Express",[cD]:[{[cE]:!0,[j]:"sigv4-s3express",[cF]:"s3express",[cG]:"{Region}"}]},[cH]:{}},[ct]:n2},{[cv]:bJ,[n2]:{[cA]:"https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",[cB]:{[cC]:"S3Express",[cD]:[{[cE]:!0,[j]:"sigv4-s3express",[cF]:"s3express",[cG]:"{Region}"}]},[cH]:{}},[ct]:n2},{[cv]:bK,[n2]:{[cA]:"https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",[cB]:{[cC]:"S3Express",[cD]:[{[cE]:!0,[j]:"sigv4-s3express",[cF]:"s3express",[cG]:"{Region}"}]},[cH]:{}},[ct]:n2}],bS=[ad,0,7,!0],bT=[{[cw]:k,[cx]:[ad,7,15,!0],[cz]:"s3expressAvailabilityZoneId"},{[cw]:k,[cx]:[ad,15,17,!0],[cz]:"s3expressAvailabilityZoneDelim"},{[cw]:h,[cx]:[{[cy]:"s3expressAvailabilityZoneDelim"},"--"]}],bU=[{[cw]:k,[cx]:[ad,7,16,!0],[cz]:"s3expressAvailabilityZoneId"},{[cw]:k,[cx]:[ad,16,18,!0],[cz]:"s3expressAvailabilityZoneDelim"},{[cw]:h,[cx]:[{[cy]:"s3expressAvailabilityZoneDelim"},"--"]}],bV=[{[cw]:k,[cx]:[ad,7,20,!0],[cz]:"s3expressAvailabilityZoneId"},{[cw]:k,[cx]:[ad,20,22,!0],[cz]:"s3expressAvailabilityZoneDelim"},{[cw]:h,[cx]:[{[cy]:"s3expressAvailabilityZoneDelim"},"--"]}],bW=[{[cw]:k,[cx]:[ad,7,21,!0],[cz]:"s3expressAvailabilityZoneId"},{[cw]:k,[cx]:[ad,21,23,!0],[cz]:"s3expressAvailabilityZoneDelim"},{[cw]:h,[cx]:[{[cy]:"s3expressAvailabilityZoneDelim"},"--"]}],bX=[{[cw]:k,[cx]:[ad,7,27,!0],[cz]:"s3expressAvailabilityZoneId"},{[cw]:k,[cx]:[ad,27,29,!0],[cz]:"s3expressAvailabilityZoneDelim"},{[cw]:h,[cx]:[{[cy]:"s3expressAvailabilityZoneDelim"},"--"]}],bY=[ac],bZ=[{[cw]:y,[cx]:[{[cy]:x},!1]}],ca=[{[cw]:h,[cx]:[{[cy]:v},"beta"]}],cb=["*"],cc=[{[cw]:y,[cx]:[{[cy]:"Region"},!1]}],cd=[{[cw]:h,[cx]:[{[cy]:"Region"},"us-east-1"]}],ce=[{[cw]:h,[cx]:[aT,K]}],cf=[{[cw]:i,[cx]:[aS,"resourceId[1]"],[cz]:L3},{[cw]:r3,[cx]:[{[cw]:h,[cx]:[aV,""]}]}],cg=[aS,"resourceId[1]"],ch=[Y],ci=[{[cw]:r3,[cx]:[{[cw]:h,[cx]:[{[cw]:i,[cx]:[aS,"region"]},""]}]}],cj=[{[cw]:r3,[cx]:[{[cw]:d3,[cx]:[{[cw]:i,[cx]:[aS,"resourceId[2]"]}]}]}],ck=[aS,"resourceId[2]"],cl=[{[cw]:g,[cx]:[{[cw]:i,[cx]:[aS,"region"]}],[cz]:"bucketPartition"}],cm=[{[cw]:h,[cx]:[ba,{[cw]:i,[cx]:[{[cy]:"partitionResult"},j]}]}],cn=[{[cw]:y,[cx]:[{[cw]:i,[cx]:[aS,"region"]},!0]}],co=[{[cw]:y,[cx]:[bb,!1]}],cp=[{[cw]:y,[cx]:[aV,!1]}],cq=[X],cr2=[{[cw]:y,[cx]:[{[cy]:"Region"},!0]}];ruleSet={version:"1.0",parameters:{Bucket:T,Region:T,UseFIPS:U,UseDualStack:U,Endpoint:T,ForcePathStyle:U,Accelerate:U,UseGlobalEndpoint:U,UseObjectLambdaEndpoint:V,Key:T,Prefix:T,CopySource:T,DisableAccessPoints:V,DisableMultiRegionAccessPoints:U,UseArnRegion:V,UseS3ExpressControlEndpoint:V,DisableS3ExpressSessionAuth:V},[cu]:[{[cv]:[{[cw]:d3,[cx]:by}],[cu]:[{[cv]:[W2,X],error:"Accelerate cannot be used with FIPS",[ct]:f},{[cv]:[Y,Z],error:"Cannot set dual-stack in combination with a custom endpoint.",[ct]:f},{[cv]:[Z,X],error:"A custom endpoint cannot be combined with FIPS",[ct]:f},{[cv]:[Z,W2],error:"A custom endpoint cannot be combined with S3 Accelerate",[ct]:f},{[cv]:[X,aa,ab],error:"Partition does not support FIPS",[ct]:f},{[cv]:[ac,{[cw]:k,[cx]:[ad,0,6,c],[cz]:l},{[cw]:h,[cx]:[{[cy]:l},"--x-s3"]}],[cu]:[ae,af,{[cv]:[ao,ap],[cu]:[{[cv]:bG,[cu]:[{[cv]:[aj,aq],[cu]:[{[cv]:bH,endpoint:{[cA]:"https://s3express-control-fips.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cB]:ak,[cH]:al},[ct]:n2},{[cv]:bI,endpoint:{[cA]:"https://s3express-control-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cB]:ak,[cH]:al},[ct]:n2},{[cv]:bJ,endpoint:{[cA]:"https://s3express-control.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cB]:ak,[cH]:al},[ct]:n2},{[cv]:bK,endpoint:{[cA]:"https://s3express-control.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cB]:ak,[cH]:al},[ct]:n2}],[ct]:o}],[ct]:o}],[ct]:o},{[cv]:bF,[cu]:[{[cv]:bG,[cu]:[{[cv]:bD,[cu]:[{[cv]:bL,[cu]:bM,[ct]:o},{[cv]:bN,[cu]:bM,[ct]:o},{[cv]:bO,[cu]:bM,[ct]:o},{[cv]:bP,[cu]:bM,[ct]:o},{[cv]:bQ,[cu]:bM,[ct]:o},at],[ct]:o},{[cv]:bL,[cu]:bR,[ct]:o},{[cv]:bN,[cu]:bR,[ct]:o},{[cv]:bO,[cu]:bR,[ct]:o},{[cv]:bP,[cu]:bR,[ct]:o},{[cv]:bQ,[cu]:bR,[ct]:o},at],[ct]:o}],[ct]:o},an],[ct]:o},{[cv]:[ac,{[cw]:k,[cx]:bS,[cz]:s},{[cw]:h,[cx]:[{[cy]:s},"--xa-s3"]}],[cu]:[ae,af,{[cv]:bF,[cu]:[{[cv]:bG,[cu]:[{[cv]:bD,[cu]:[{[cv]:bT,[cu]:bM,[ct]:o},{[cv]:bU,[cu]:bM,[ct]:o},{[cv]:bV,[cu]:bM,[ct]:o},{[cv]:bW,[cu]:bM,[ct]:o},{[cv]:bX,[cu]:bM,[ct]:o},at],[ct]:o},{[cv]:bT,[cu]:bR,[ct]:o},{[cv]:bU,[cu]:bR,[ct]:o},{[cv]:bV,[cu]:bR,[ct]:o},{[cv]:bW,[cu]:bR,[ct]:o},{[cv]:bX,[cu]:bR,[ct]:o},at],[ct]:o}],[ct]:o},an],[ct]:o},{[cv]:[au,ao,ap],[cu]:[{[cv]:bG,[cu]:[{[cv]:bC,endpoint:{[cA]:t8,[cB]:ak,[cH]:al},[ct]:n2},{[cv]:bH,endpoint:{[cA]:"https://s3express-control-fips.dualstack.{Region}.{partitionResult#dnsSuffix}",[cB]:ak,[cH]:al},[ct]:n2},{[cv]:bI,endpoint:{[cA]:"https://s3express-control-fips.{Region}.{partitionResult#dnsSuffix}",[cB]:ak,[cH]:al},[ct]:n2},{[cv]:bJ,endpoint:{[cA]:"https://s3express-control.dualstack.{Region}.{partitionResult#dnsSuffix}",[cB]:ak,[cH]:al},[ct]:n2},{[cv]:bK,endpoint:{[cA]:"https://s3express-control.{Region}.{partitionResult#dnsSuffix}",[cB]:ak,[cH]:al},[ct]:n2}],[ct]:o}],[ct]:o},{[cv]:[ac,{[cw]:k,[cx]:[ad,49,50,c],[cz]:u},{[cw]:k,[cx]:[ad,8,12,c],[cz]:v},{[cw]:k,[cx]:bS,[cz]:w},{[cw]:k,[cx]:[ad,32,49,c],[cz]:x},{[cw]:g,[cx]:by,[cz]:"regionPartition"},{[cw]:h,[cx]:[{[cy]:w},"--op-s3"]}],[cu]:[{[cv]:bZ,[cu]:[{[cv]:bF,[cu]:[{[cv]:[{[cw]:h,[cx]:[av,"e"]}],[cu]:[{[cv]:ca,[cu]:[aw,{[cv]:bC,endpoint:{[cA]:"https://{Bucket}.ec2.{url#authority}",[cB]:ax,[cH]:al},[ct]:n2}],[ct]:o},{endpoint:{[cA]:"https://{Bucket}.ec2.s3-outposts.{Region}.{regionPartition#dnsSuffix}",[cB]:ax,[cH]:al},[ct]:n2}],[ct]:o},{[cv]:[{[cw]:h,[cx]:[av,"o"]}],[cu]:[{[cv]:ca,[cu]:[aw,{[cv]:bC,endpoint:{[cA]:"https://{Bucket}.op-{outpostId}.{url#authority}",[cB]:ax,[cH]:al},[ct]:n2}],[ct]:o},{endpoint:{[cA]:"https://{Bucket}.op-{outpostId}.s3-outposts.{Region}.{regionPartition#dnsSuffix}",[cB]:ax,[cH]:al},[ct]:n2}],[ct]:o},{error:'Unrecognized hardware type: "Expected hardware type o or e but got {hardwareType}"',[ct]:f}],[ct]:o},{error:"Invalid Outposts Bucket alias - it must be a valid bucket name.",[ct]:f}],[ct]:o},{error:"Invalid ARN: The outpost Id must only contain a-z, A-Z, 0-9 and `-`.",[ct]:f}],[ct]:o},{[cv]:bY,[cu]:[{[cv]:[Z,{[cw]:r3,[cx]:[{[cw]:d3,[cx]:[{[cw]:m2,[cx]:bz}]}]}],error:"Custom endpoint `{Endpoint}` was not a valid URI",[ct]:f},{[cv]:[ay,am],[cu]:[{[cv]:bG,[cu]:[{[cv]:cc,[cu]:[{[cv]:[W2,ab],error:"S3 Accelerate cannot be used in this region",[ct]:f},{[cv]:[Y,X,aA,aq,aB],endpoint:{[cA]:"https://{Bucket}.s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}",[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[Y,X,aA,aq,aD,aE],[cu]:[{endpoint:aF,[ct]:n2}],[ct]:o},{[cv]:[Y,X,aA,aq,aD,aH],endpoint:aF,[ct]:n2},{[cv]:[ar,X,aA,aq,aB],endpoint:{[cA]:"https://{Bucket}.s3-fips.us-east-1.{partitionResult#dnsSuffix}",[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[ar,X,aA,aq,aD,aE],[cu]:[{endpoint:aI,[ct]:n2}],[ct]:o},{[cv]:[ar,X,aA,aq,aD,aH],endpoint:aI,[ct]:n2},{[cv]:[Y,as,W2,aq,aB],endpoint:{[cA]:"https://{Bucket}.s3-accelerate.dualstack.us-east-1.{partitionResult#dnsSuffix}",[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[Y,as,W2,aq,aD,aE],[cu]:[{endpoint:aJ,[ct]:n2}],[ct]:o},{[cv]:[Y,as,W2,aq,aD,aH],endpoint:aJ,[ct]:n2},{[cv]:[Y,as,aA,aq,aB],endpoint:{[cA]:"https://{Bucket}.s3.dualstack.us-east-1.{partitionResult#dnsSuffix}",[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[Y,as,aA,aq,aD,aE],[cu]:[{endpoint:aK,[ct]:n2}],[ct]:o},{[cv]:[Y,as,aA,aq,aD,aH],endpoint:aK,[ct]:n2},{[cv]:[ar,as,aA,Z,ag,ah,aB],endpoint:{[cA]:C2,[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[ar,as,aA,Z,ag,aL,aB],endpoint:{[cA]:q,[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[ar,as,aA,Z,ag,ah,aD,aE],[cu]:[{[cv]:cd,endpoint:aM,[ct]:n2},{endpoint:aM,[ct]:n2}],[ct]:o},{[cv]:[ar,as,aA,Z,ag,aL,aD,aE],[cu]:[{[cv]:cd,endpoint:aN,[ct]:n2},aO],[ct]:o},{[cv]:[ar,as,aA,Z,ag,ah,aD,aH],endpoint:aM,[ct]:n2},{[cv]:[ar,as,aA,Z,ag,aL,aD,aH],endpoint:aN,[ct]:n2},{[cv]:[ar,as,W2,aq,aB],endpoint:{[cA]:D,[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[ar,as,W2,aq,aD,aE],[cu]:[{[cv]:cd,endpoint:aP,[ct]:n2},{endpoint:aP,[ct]:n2}],[ct]:o},{[cv]:[ar,as,W2,aq,aD,aH],endpoint:aP,[ct]:n2},{[cv]:[ar,as,aA,aq,aB],endpoint:{[cA]:E,[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[ar,as,aA,aq,aD,aE],[cu]:[{[cv]:cd,endpoint:{[cA]:E,[cB]:aG,[cH]:al},[ct]:n2},{endpoint:aQ,[ct]:n2}],[ct]:o},{[cv]:[ar,as,aA,aq,aD,aH],endpoint:aQ,[ct]:n2}],[ct]:o},aR],[ct]:o}],[ct]:o},{[cv]:[Z,ag,{[cw]:h,[cx]:[{[cw]:i,[cx]:[ai,"scheme"]},"http"]},{[cw]:p,[cx]:[ad,c]},ay,as,ar,aA],[cu]:[{[cv]:bG,[cu]:[{[cv]:cc,[cu]:[aO],[ct]:o},aR],[ct]:o}],[ct]:o},{[cv]:[ay,{[cw]:F,[cx]:bA,[cz]:G2}],[cu]:[{[cv]:[{[cw]:i,[cx]:[aS,"resourceId[0]"],[cz]:H},{[cw]:r3,[cx]:[{[cw]:h,[cx]:[aT,""]}]}],[cu]:[{[cv]:[{[cw]:h,[cx]:[aU,J]}],[cu]:[{[cv]:ce,[cu]:[{[cv]:cf,[cu]:[aW,aX,{[cv]:ci,[cu]:[aY,{[cv]:cj,[cu]:[aZ,{[cv]:cl,[cu]:[{[cv]:bG,[cu]:[{[cv]:cm,[cu]:[{[cv]:cn,[cu]:[{[cv]:[{[cw]:h,[cx]:[bb,""]}],error:"Invalid ARN: Missing account id",[ct]:f},{[cv]:co,[cu]:[{[cv]:cp,[cu]:[{[cv]:bC,endpoint:{[cA]:M2,[cB]:bc,[cH]:al},[ct]:n2},{[cv]:cq,endpoint:{[cA]:"https://{accessPointName}-{bucketArn#accountId}.s3-object-lambda-fips.{bucketArn#region}.{bucketPartition#dnsSuffix}",[cB]:bc,[cH]:al},[ct]:n2},{endpoint:{[cA]:"https://{accessPointName}-{bucketArn#accountId}.s3-object-lambda.{bucketArn#region}.{bucketPartition#dnsSuffix}",[cB]:bc,[cH]:al},[ct]:n2}],[ct]:o},bd],[ct]:o},be],[ct]:o},bf],[ct]:o},bg],[ct]:o}],[ct]:o}],[ct]:o},bh],[ct]:o},{error:"Invalid ARN: bucket ARN is missing a region",[ct]:f}],[ct]:o},bi],[ct]:o},{error:"Invalid ARN: Object Lambda ARNs only support `accesspoint` arn types, but found: `{arnType}`",[ct]:f}],[ct]:o},{[cv]:ce,[cu]:[{[cv]:cf,[cu]:[{[cv]:ci,[cu]:[{[cv]:ce,[cu]:[{[cv]:ci,[cu]:[aY,{[cv]:cj,[cu]:[aZ,{[cv]:cl,[cu]:[{[cv]:bG,[cu]:[{[cv]:[{[cw]:h,[cx]:[ba,"{partitionResult#name}"]}],[cu]:[{[cv]:cn,[cu]:[{[cv]:[{[cw]:h,[cx]:[aU,B]}],[cu]:[{[cv]:co,[cu]:[{[cv]:cp,[cu]:[{[cv]:bB,error:"Access Points do not support S3 Accelerate",[ct]:f},{[cv]:bH,endpoint:{[cA]:"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint-fips.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}",[cB]:bj,[cH]:al},[ct]:n2},{[cv]:bI,endpoint:{[cA]:"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint-fips.{bucketArn#region}.{bucketPartition#dnsSuffix}",[cB]:bj,[cH]:al},[ct]:n2},{[cv]:bJ,endpoint:{[cA]:"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}",[cB]:bj,[cH]:al},[ct]:n2},{[cv]:[as,ar,Z,ag],endpoint:{[cA]:M2,[cB]:bj,[cH]:al},[ct]:n2},{[cv]:bK,endpoint:{[cA]:"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint.{bucketArn#region}.{bucketPartition#dnsSuffix}",[cB]:bj,[cH]:al},[ct]:n2}],[ct]:o},bd],[ct]:o},be],[ct]:o},{error:"Invalid ARN: The ARN was not for the S3 service, found: {bucketArn#service}",[ct]:f}],[ct]:o},bf],[ct]:o},bg],[ct]:o}],[ct]:o}],[ct]:o},bh],[ct]:o}],[ct]:o}],[ct]:o},{[cv]:[{[cw]:y,[cx]:[aV,c]}],[cu]:[{[cv]:ch,error:"S3 MRAP does not support dual-stack",[ct]:f},{[cv]:cq,error:"S3 MRAP does not support FIPS",[ct]:f},{[cv]:bB,error:"S3 MRAP does not support S3 Accelerate",[ct]:f},{[cv]:[{[cw]:e2,[cx]:[{[cy]:"DisableMultiRegionAccessPoints"},c]}],error:"Invalid configuration: Multi-Region Access Point ARNs are disabled.",[ct]:f},{[cv]:[{[cw]:g,[cx]:by,[cz]:N2}],[cu]:[{[cv]:[{[cw]:h,[cx]:[{[cw]:i,[cx]:[{[cy]:N2},j]},{[cw]:i,[cx]:[aS,"partition"]}]}],[cu]:[{endpoint:{[cA]:"https://{accessPointName}.accesspoint.s3-global.{mrapPartition#dnsSuffix}",[cB]:{[cD]:[{[cE]:c,name:z,[cF]:B,[cI]:cb}]},[cH]:al},[ct]:n2}],[ct]:o},{error:"Client was configured for partition `{mrapPartition#name}` but bucket referred to partition `{bucketArn#partition}`",[ct]:f}],[ct]:o}],[ct]:o},{error:"Invalid Access Point Name",[ct]:f}],[ct]:o},bi],[ct]:o},{[cv]:[{[cw]:h,[cx]:[aU,A]}],[cu]:[{[cv]:ch,error:"S3 Outposts does not support Dual-stack",[ct]:f},{[cv]:cq,error:"S3 Outposts does not support FIPS",[ct]:f},{[cv]:bB,error:"S3 Outposts does not support S3 Accelerate",[ct]:f},{[cv]:[{[cw]:d3,[cx]:[{[cw]:i,[cx]:[aS,"resourceId[4]"]}]}],error:"Invalid Arn: Outpost Access Point ARN contains sub resources",[ct]:f},{[cv]:[{[cw]:i,[cx]:cg,[cz]:x}],[cu]:[{[cv]:bZ,[cu]:[aZ,{[cv]:cl,[cu]:[{[cv]:bG,[cu]:[{[cv]:cm,[cu]:[{[cv]:cn,[cu]:[{[cv]:co,[cu]:[{[cv]:[{[cw]:i,[cx]:ck,[cz]:O}],[cu]:[{[cv]:[{[cw]:i,[cx]:[aS,"resourceId[3]"],[cz]:L3}],[cu]:[{[cv]:[{[cw]:h,[cx]:[{[cy]:O},K]}],[cu]:[{[cv]:bC,endpoint:{[cA]:"https://{accessPointName}-{bucketArn#accountId}.{outpostId}.{url#authority}",[cB]:bk,[cH]:al},[ct]:n2},{endpoint:{[cA]:"https://{accessPointName}-{bucketArn#accountId}.{outpostId}.s3-outposts.{bucketArn#region}.{bucketPartition#dnsSuffix}",[cB]:bk,[cH]:al},[ct]:n2}],[ct]:o},{error:"Expected an outpost type `accesspoint`, found {outpostType}",[ct]:f}],[ct]:o},{error:"Invalid ARN: expected an access point name",[ct]:f}],[ct]:o},{error:"Invalid ARN: Expected a 4-component resource",[ct]:f}],[ct]:o},be],[ct]:o},bf],[ct]:o},bg],[ct]:o}],[ct]:o}],[ct]:o},{error:"Invalid ARN: The outpost Id may only contain a-z, A-Z, 0-9 and `-`. Found: `{outpostId}`",[ct]:f}],[ct]:o},{error:"Invalid ARN: The Outpost Id was not set",[ct]:f}],[ct]:o},{error:"Invalid ARN: Unrecognized format: {Bucket} (type: {arnType})",[ct]:f}],[ct]:o},{error:"Invalid ARN: No ARN type specified",[ct]:f}],[ct]:o},{[cv]:[{[cw]:k,[cx]:[ad,0,4,!1],[cz]:P2},{[cw]:h,[cx]:[{[cy]:P2},"arn:"]},{[cw]:r3,[cx]:[{[cw]:d3,[cx]:[bl]}]}],error:"Invalid ARN: `{Bucket}` was not a valid ARN",[ct]:f},{[cv]:[{[cw]:e2,[cx]:[az,c]},bl],error:"Path-style addressing cannot be used with ARN buckets",[ct]:f},{[cv]:bE,[cu]:[{[cv]:bG,[cu]:[{[cv]:[aA],[cu]:[{[cv]:[Y,aq,X,aB],endpoint:{[cA]:"https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[Y,aq,X,aD,aE],[cu]:[{endpoint:bm,[ct]:n2}],[ct]:o},{[cv]:[Y,aq,X,aD,aH],endpoint:bm,[ct]:n2},{[cv]:[ar,aq,X,aB],endpoint:{[cA]:"https://s3-fips.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[ar,aq,X,aD,aE],[cu]:[{endpoint:bn,[ct]:n2}],[ct]:o},{[cv]:[ar,aq,X,aD,aH],endpoint:bn,[ct]:n2},{[cv]:[Y,aq,as,aB],endpoint:{[cA]:"https://s3.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[Y,aq,as,aD,aE],[cu]:[{endpoint:bo,[ct]:n2}],[ct]:o},{[cv]:[Y,aq,as,aD,aH],endpoint:bo,[ct]:n2},{[cv]:[ar,Z,ag,as,aB],endpoint:{[cA]:Q,[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[ar,Z,ag,as,aD,aE],[cu]:[{[cv]:cd,endpoint:bp,[ct]:n2},{endpoint:bp,[ct]:n2}],[ct]:o},{[cv]:[ar,Z,ag,as,aD,aH],endpoint:bp,[ct]:n2},{[cv]:[ar,aq,as,aB],endpoint:{[cA]:R,[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[ar,aq,as,aD,aE],[cu]:[{[cv]:cd,endpoint:{[cA]:R,[cB]:aG,[cH]:al},[ct]:n2},{endpoint:bq,[ct]:n2}],[ct]:o},{[cv]:[ar,aq,as,aD,aH],endpoint:bq,[ct]:n2}],[ct]:o},{error:"Path-style addressing cannot be used with S3 Accelerate",[ct]:f}],[ct]:o}],[ct]:o}],[ct]:o},{[cv]:[{[cw]:d3,[cx]:[br]},{[cw]:e2,[cx]:[br,c]}],[cu]:[{[cv]:bG,[cu]:[{[cv]:cr2,[cu]:[aW,aX,{[cv]:bC,endpoint:{[cA]:t8,[cB]:bs,[cH]:al},[ct]:n2},{[cv]:cq,endpoint:{[cA]:"https://s3-object-lambda-fips.{Region}.{partitionResult#dnsSuffix}",[cB]:bs,[cH]:al},[ct]:n2},{endpoint:{[cA]:"https://s3-object-lambda.{Region}.{partitionResult#dnsSuffix}",[cB]:bs,[cH]:al},[ct]:n2}],[ct]:o},aR],[ct]:o}],[ct]:o},{[cv]:[au],[cu]:[{[cv]:bG,[cu]:[{[cv]:cr2,[cu]:[{[cv]:[X,Y,aq,aB],endpoint:{[cA]:"https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}",[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[X,Y,aq,aD,aE],[cu]:[{endpoint:bt,[ct]:n2}],[ct]:o},{[cv]:[X,Y,aq,aD,aH],endpoint:bt,[ct]:n2},{[cv]:[X,ar,aq,aB],endpoint:{[cA]:"https://s3-fips.us-east-1.{partitionResult#dnsSuffix}",[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[X,ar,aq,aD,aE],[cu]:[{endpoint:bu,[ct]:n2}],[ct]:o},{[cv]:[X,ar,aq,aD,aH],endpoint:bu,[ct]:n2},{[cv]:[as,Y,aq,aB],endpoint:{[cA]:"https://s3.dualstack.us-east-1.{partitionResult#dnsSuffix}",[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[as,Y,aq,aD,aE],[cu]:[{endpoint:bv,[ct]:n2}],[ct]:o},{[cv]:[as,Y,aq,aD,aH],endpoint:bv,[ct]:n2},{[cv]:[as,ar,Z,ag,aB],endpoint:{[cA]:t8,[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[as,ar,Z,ag,aD,aE],[cu]:[{[cv]:cd,endpoint:bw,[ct]:n2},{endpoint:bw,[ct]:n2}],[ct]:o},{[cv]:[as,ar,Z,ag,aD,aH],endpoint:bw,[ct]:n2},{[cv]:[as,ar,aq,aB],endpoint:{[cA]:S,[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[as,ar,aq,aD,aE],[cu]:[{[cv]:cd,endpoint:{[cA]:S,[cB]:aG,[cH]:al},[ct]:n2},{endpoint:bx,[ct]:n2}],[ct]:o},{[cv]:[as,ar,aq,aD,aH],endpoint:bx,[ct]:n2}],[ct]:o},aR],[ct]:o}],[ct]:o}],[ct]:o},{error:"A region must be set when sending requests to S3.",[ct]:f}]};cache=new EndpointCache({size:50,params:["Accelerate","Bucket","DisableAccessPoints","DisableMultiRegionAccessPoints","DisableS3ExpressSessionAuth","Endpoint","ForcePathStyle","Region","UseArnRegion","UseDualStack","UseFIPS","UseGlobalEndpoint","UseObjectLambdaEndpoint","UseS3ExpressControlEndpoint"]});defaultEndpointResolver=(endpointParams,context2={})=>cache.get(endpointParams,()=>resolveEndpoint(ruleSet,{endpointParams,logger:context2.logger}));customEndpointFunctions.aws=awsEndpointFunctions;defaultS3HttpAuthSchemeParametersProvider=(defaultHttpAuthSchemeParametersProvider=>async(config,context2,input)=>{var _a8,_b5,_c3;if(!input)throw new Error("Could not find `input` for `defaultEndpointRuleSetHttpAuthSchemeParametersProvider`");const defaultParameters=await defaultHttpAuthSchemeParametersProvider(config,context2),instructionsFn=null==(_c3=null==(_b5=null==(_a8=getSmithyContext(context2))?void 0:_a8.commandInstance)?void 0:_b5.constructor)?void 0:_c3.getEndpointParameterInstructions;if(!instructionsFn)throw new Error(`getEndpointParameterInstructions() is not defined on '${context2.commandName}'`);const endpointParameters=await resolveParams(input,{getEndpointParameterInstructions:instructionsFn},config);return Object.assign(defaultParameters,endpointParameters)})(async(config,context2,input)=>({operation:getSmithyContext(context2).operation,region:await normalizeProvider(config.region)()||(()=>{throw new Error("expected `region` to be configured for `aws.auth#sigv4`")})()}));defaultS3HttpAuthSchemeProvider=((defaultEndpointResolver2,defaultHttpAuthSchemeResolver,createHttpAuthOptionFunctions)=>authParameters=>{var _a8;const authSchemes=null==(_a8=defaultEndpointResolver2(authParameters).properties)?void 0:_a8.authSchemes;if(!authSchemes)return defaultHttpAuthSchemeResolver(authParameters);const options=[];for(const scheme of authSchemes){const{name:resolvedName,properties={},...rest}=scheme,name=resolvedName.toLowerCase();resolvedName!==name&&console.warn(`HttpAuthScheme has been normalized with lowercasing: '${resolvedName}' to '${name}'`);let schemeId;if("sigv4a"===name){schemeId="aws.auth#sigv4a";const sigv4Present=authSchemes.find(s2=>{const name2=s2.name.toLowerCase();return"sigv4a"!==name2&&name2.startsWith("sigv4")});if("none"===SignatureV4MultiRegion.sigv4aDependency()&&sigv4Present)continue}else{if(!name.startsWith("sigv4"))throw new Error(`Unknown HttpAuthScheme found in '@smithy.rules#endpointRuleSet': '${name}'`);schemeId="aws.auth#sigv4"}const createOption=createHttpAuthOptionFunctions[schemeId];if(!createOption)throw new Error(`Could not find HttpAuthOption create function for '${schemeId}'`);const option=createOption(authParameters);option.schemeId=schemeId;option.signingProperties={...option.signingProperties||{},...rest,...properties};options.push(option)}return options})(defaultEndpointResolver,authParameters=>{const options=[];switch(authParameters.operation){default:options.push(createAwsAuthSigv4HttpAuthOption(authParameters));options.push(createAwsAuthSigv4aHttpAuthOption(authParameters))}return options},{"aws.auth#sigv4":createAwsAuthSigv4HttpAuthOption,"aws.auth#sigv4a":createAwsAuthSigv4aHttpAuthOption});resolveHttpAuthSchemeConfig=config=>{var _a8;const config_0=resolveAwsSdkSigV4Config(config),config_1=resolveAwsSdkSigV4AConfig(config_0);return Object.assign(config_1,{authSchemePreference:normalizeProvider(null!=(_a8=config.authSchemePreference)?_a8:[])})};resolveClientEndpointParameters=options=>{var _a8,_b5,_c3,_d2,_e2,_f,_g;return Object.assign(options,{useFipsEndpoint:null!=(_a8=options.useFipsEndpoint)&&_a8,useDualstackEndpoint:null!=(_b5=options.useDualstackEndpoint)&&_b5,forcePathStyle:null!=(_c3=options.forcePathStyle)&&_c3,useAccelerateEndpoint:null!=(_d2=options.useAccelerateEndpoint)&&_d2,useGlobalEndpoint:null!=(_e2=options.useGlobalEndpoint)&&_e2,disableMultiregionAccessPoints:null!=(_f=options.disableMultiregionAccessPoints)&&_f,defaultSigningName:"s3",clientContextParams:null!=(_g=options.clientContextParams)?_g:{}})};commonParams={ForcePathStyle:{type:"clientContextParams",name:"forcePathStyle"},UseArnRegion:{type:"clientContextParams",name:"useArnRegion"},DisableMultiRegionAccessPoints:{type:"clientContextParams",name:"disableMultiregionAccessPoints"},Accelerate:{type:"clientContextParams",name:"useAccelerateEndpoint"},DisableS3ExpressSessionAuth:{type:"clientContextParams",name:"disableS3ExpressSessionAuth"},UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}};S3ServiceException=class _S3ServiceException extends ServiceException{constructor(options){super(options);Object.setPrototypeOf(this,_S3ServiceException.prototype)}};NoSuchUpload=class _NoSuchUpload extends S3ServiceException{constructor(opts){super({name:"NoSuchUpload",$fault:"client",...opts});__publicField(this,"name","NoSuchUpload");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_NoSuchUpload.prototype)}};AccessDenied=class _AccessDenied extends S3ServiceException{constructor(opts){super({name:"AccessDenied",$fault:"client",...opts});__publicField(this,"name","AccessDenied");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_AccessDenied.prototype)}};ObjectNotInActiveTierError=class _ObjectNotInActiveTierError extends S3ServiceException{constructor(opts){super({name:"ObjectNotInActiveTierError",$fault:"client",...opts});__publicField(this,"name","ObjectNotInActiveTierError");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_ObjectNotInActiveTierError.prototype)}};BucketAlreadyExists=class _BucketAlreadyExists extends S3ServiceException{constructor(opts){super({name:"BucketAlreadyExists",$fault:"client",...opts});__publicField(this,"name","BucketAlreadyExists");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_BucketAlreadyExists.prototype)}};BucketAlreadyOwnedByYou=class _BucketAlreadyOwnedByYou extends S3ServiceException{constructor(opts){super({name:"BucketAlreadyOwnedByYou",$fault:"client",...opts});__publicField(this,"name","BucketAlreadyOwnedByYou");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_BucketAlreadyOwnedByYou.prototype)}};NoSuchBucket=class _NoSuchBucket extends S3ServiceException{constructor(opts){super({name:"NoSuchBucket",$fault:"client",...opts});__publicField(this,"name","NoSuchBucket");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_NoSuchBucket.prototype)}};InvalidObjectState=class _InvalidObjectState extends S3ServiceException{constructor(opts){super({name:"InvalidObjectState",$fault:"client",...opts});__publicField(this,"name","InvalidObjectState");__publicField(this,"$fault","client");__publicField(this,"StorageClass");__publicField(this,"AccessTier");Object.setPrototypeOf(this,_InvalidObjectState.prototype);this.StorageClass=opts.StorageClass;this.AccessTier=opts.AccessTier}};NoSuchKey=class _NoSuchKey extends S3ServiceException{constructor(opts){super({name:"NoSuchKey",$fault:"client",...opts});__publicField(this,"name","NoSuchKey");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_NoSuchKey.prototype)}};NotFound=class _NotFound extends S3ServiceException{constructor(opts){super({name:"NotFound",$fault:"client",...opts});__publicField(this,"name","NotFound");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_NotFound.prototype)}};EncryptionTypeMismatch=class _EncryptionTypeMismatch extends S3ServiceException{constructor(opts){super({name:"EncryptionTypeMismatch",$fault:"client",...opts});__publicField(this,"name","EncryptionTypeMismatch");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_EncryptionTypeMismatch.prototype)}};InvalidRequest=class _InvalidRequest extends S3ServiceException{constructor(opts){super({name:"InvalidRequest",$fault:"client",...opts});__publicField(this,"name","InvalidRequest");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_InvalidRequest.prototype)}};InvalidWriteOffset=class _InvalidWriteOffset extends S3ServiceException{constructor(opts){super({name:"InvalidWriteOffset",$fault:"client",...opts});__publicField(this,"name","InvalidWriteOffset");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_InvalidWriteOffset.prototype)}};TooManyParts=class _TooManyParts extends S3ServiceException{constructor(opts){super({name:"TooManyParts",$fault:"client",...opts});__publicField(this,"name","TooManyParts");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_TooManyParts.prototype)}};IdempotencyParameterMismatch=class _IdempotencyParameterMismatch extends S3ServiceException{constructor(opts){super({name:"IdempotencyParameterMismatch",$fault:"client",...opts});__publicField(this,"name","IdempotencyParameterMismatch");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_IdempotencyParameterMismatch.prototype)}};ObjectAlreadyInActiveTierError=class _ObjectAlreadyInActiveTierError extends S3ServiceException{constructor(opts){super({name:"ObjectAlreadyInActiveTierError",$fault:"client",...opts});__publicField(this,"name","ObjectAlreadyInActiveTierError");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_ObjectAlreadyInActiveTierError.prototype)}};_AC="AccelerateConfiguration";_ACL="AccessControlList";_ACLn="AnalyticsConfigurationList";_ACP="AccessControlPolicy";_ACT="AccessControlTranslation";_ACn="AnalyticsConfiguration";_AIMU="AbortIncompleteMultipartUpload";_AR="AcceptRanges";_AS="AbacStatus";_AT="AccessTier";_B="Bucket";_BA="BucketArn";_BET="BlockedEncryptionTypes";_BGR="BypassGovernanceRetention";_BKE="BucketKeyEnabled";_BLS="BucketLoggingStatus";_BP="BytesProcessed";_BPA="BlockPublicAcls";_BPP="BlockPublicPolicy";_BR="BucketRegion";_BRy="BytesReturned";_BS="BytesScanned";_Bo="Body";_Bu="Buckets";_C="Checksum";_CA="ChecksumAlgorithm";_CBC="CreateBucketConfiguration";_CC="CacheControl";_CCRC="ChecksumCRC32";_CCRCC="ChecksumCRC32C";_CCRCNVME="ChecksumCRC64NVME";_CC_="Cache-Control";_CD_="Content-Disposition";_CDo="ContentDisposition";_CE_="Content-Encoding";_CEo="ContentEncoding";_CL="ContentLanguage";_CL_="Content-Language";_CL__="Content-Length";_CLo="ContentLength";_CM="Content-MD5";_CMD="ContentMD5";_CMUo="CompleteMultipartUpload";_COR="CopyObjectResult";_CORSC="CORSConfiguration";_CPR="CopyPartResult";_CPom="CommonPrefixes";_CR="ContentRange";_CR_="Content-Range";_CS="CopySource";_CSHA="ChecksumSHA1";_CSHAh="ChecksumSHA256";_CSIM="CopySourceIfMatch";_CSIMS="CopySourceIfModifiedSince";_CSINM="CopySourceIfNoneMatch";_CSIUS="CopySourceIfUnmodifiedSince";_CSSSECA="CopySourceSSECustomerAlgorithm";_CSSSECK="CopySourceSSECustomerKey";_CSVI="CopySourceVersionId";_CSo="ConfigurationState";_CT="ChecksumType";_CT_="Content-Type";_CTo="ContentType";_CTon="ContinuationToken";_Cr="Credentials";_D="Days";_DM="DeleteMarker";_DMR="DeleteMarkerReplication";_DMe="DeleteMarkers";_DN="DisplayName";_DRe="DefaultRetention";_DRes="DestinationResult";_De="Delete";_Deli="Delimiter";_Des="Destination";_E="Expiration";_EBC="EventBridgeConfiguration";_EBO="ExpectedBucketOwner";_EC="EncryptionConfiguration";_EDr="ErrorDocument";_EM="ErrorMessage";_EOR="ExistingObjectReplication";_ES="ExpiresString";_ESBO="ExpectedSourceBucketOwner";_ET="EncryptionType";_ETa="ETag";_ETn="EncodingType";_ETx="ExpressionType";_En="Encryption";_Err="Error";_Ev="Events";_Ex="Expires";_F="Filter";_FD="FieldDelimiter";_FR="FilterRule";_G="Grants";_GBMCR="GetBucketMetadataConfigurationResult";_GBMTCR="GetBucketMetadataTableConfigurationResult";_GFC="GrantFullControl";_GJP="GlacierJobParameters";_GR="GrantRead";_GRACP="GrantReadACP";_GW="GrantWrite";_GWACP="GrantWriteACP";_I="Id";_IC="InventoryConfiguration";_ICL="InventoryConfigurationList";_IDn="IndexDocument";_IM="IfMatch";_IMS_="If-Modified-Since";_IM_="If-Match";_INM="IfNoneMatch";_INM_="If-None-Match";_IPA="IgnorePublicAcls";_IS="InputSerialization";_IT="IsTruncated";_ITC="IntelligentTieringConfiguration";_ITCL="IntelligentTieringConfigurationList";_ITCR="InventoryTableConfigurationResult";_ITCn="InventoryTableConfiguration";_IUS="IfUnmodifiedSince";_IUS_="If-Unmodified-Since";_In="Initiator";_JTC="JournalTableConfiguration";_JTCR="JournalTableConfigurationResult";_K="Key";_KM="KeyMarker";_L="Location";_LBRi="ListBucketResult";_LC="LocationConstraint";_LCi="LifecycleConfiguration";_LE="LoggingEnabled";_LH="LegalHold";_LM="LastModified";_LM_="Last-Modified";_M="Metadata";_MC="MetadataConfiguration";_MCL="MetricsConfigurationList";_MCR="MetadataConfigurationResult";_MCe="MetricsConfiguration";_ME="MetadataEntry";_MK="MaxKeys";_MM="MissingMeta";_MP="MaxParts";_MTC="MetadataTableConfiguration";_MTCR="MetadataTableConfigurationResult";_MU="MultipartUpload";_N="Name";_NC="NotificationConfiguration";_NCT="NextContinuationToken";_ND="NoncurrentDays";_NKM="NextKeyMarker";_NNV="NewerNoncurrentVersions";_NPNM="NextPartNumberMarker";_NVE="NoncurrentVersionExpiration";_NVTo="NoncurrentVersionTransition";_O="Owner";_OC="OwnershipControls";_OE="ObjectEncryption";_OL="OutputLocation";_OLC="ObjectLockConfiguration";_OLLHS="ObjectLockLegalHoldStatus";_OLM="ObjectLockMode";_OLRUD="ObjectLockRetainUntilDate";_OO="ObjectOwnership";_OOA="OptionalObjectAttributes";_OSGT="ObjectSizeGreaterThan";_OSLT="ObjectSizeLessThan";_OSu="OutputSerialization";_P="Prefix";_PABC="PublicAccessBlockConfiguration";_PC="PartsCount";_PN="PartNumber";_PNM="PartNumberMarker";_PP="PartitionedPrefix";_PS="PolicyStatus";_Pa="Parts";_Pe="Permission";_QC="QuoteCharacter";_QCue="QueueConfiguration";_QEC="QuoteEscapeCharacter";_R="Rules";_RART="RedirectAllRequestsTo";_RC="RequestCharged";_RCC="ResponseCacheControl";_RCD="ResponseContentDisposition";_RCE="ResponseContentEncoding";_RCL="ResponseContentLanguage";_RCT="ResponseContentType";_RCe="ReplicationConfiguration";_RD="RecordDelimiter";_RE="ResponseExpires";_REe="RecordExpiration";_RM="ReplicaModifications";_RP="RequestPayer";_RPB="RestrictPublicBuckets";_RPC="RequestPaymentConfiguration";_RPe="RequestProgress";_RR="RoutingRules";_RRes="RestoreRequest";_RS="ReplicationStatus";_RSe="RestoreStatus";_RT="ReplicationTime";_Ra="Range";_Re="Restore";_Ret="Retention";_Ru="Rule";_S="Status";_SA="StartAfter";_SAK="SecretAccessKey";_SBD="S3BucketDestination";_SC="StorageClass";_SCA="StorageClassAnalysis";_SK="SSE-KMS";_SKEO="SseKmsEncryptedObjects";_SP="SelectParameters";_SPi="SimplePrefix";_SSC="SourceSelectionCriteria";_SSE="ServerSideEncryption";_SSEC="ServerSideEncryptionConfiguration";_SSECA="SSECustomerAlgorithm";_SSECK="SSECustomerKey";_SSECKMD="SSECustomerKeyMD5";_SSEKMSEC="SSEKMSEncryptionContext";_SSEKMSKI="SSEKMSKeyId";_ST="SessionToken";_STD="S3TablesDestination";_STDR="S3TablesDestinationResult";_Si="Size";_T="Tags";_TA="TableArn";_TBA="TableBucketArn";_TC="TagCount";_TCop="TopicConfiguration";_TDMOS="TransitionDefaultMinimumObjectSize";_TG="TargetGrants";_TN="TableNamespace";_TNa="TableName";_TOKF="TargetObjectKeyFormat";_TS="TagSet";_Ta="Tag";_Tag="Tagging";_Ty="Type";_UI="UploadId";_UIM="UploadIdMarker";_UM="UserMetadata";_V="Value";_VC="VersioningConfiguration";_VI="VersionId";_VIM="VersionIdMarker";_WC="WebsiteConfiguration";_WRL="WebsiteRedirectLocation";_ar="accept-ranges";_c2="client";_ct="continuation-token";_d="delimiter";_e="error";_eP="eventPayload";_en="endpoint";_et="encoding-type";_h="http";_hC="httpChecksum";_hE="httpError";_hH="httpHeader";_hL="hostLabel";_hP="httpPayload";_hPH="httpPrefixHeaders";_hQ="httpQuery";_hi="http://www.w3.org/2001/XMLSchema-instance";_i="id";_iT="idempotencyToken";_km="key-marker";_mk="max-keys";_p="prefix";_pN="partNumber";_rcc="response-cache-control";_rcd="response-content-disposition";_rce="response-content-encoding";_rcl="response-content-language";_rct="response-content-type";_re="response-expires";_st="streaming";_uI="uploadId";_vI="versionId";_xA="xmlAttribute";_xF="xmlFlattened";_xN="xmlName";_xNm="xmlNamespace";_xaa="x-amz-acl";_xaad="x-amz-abort-date";_xaari="x-amz-abort-rule-id";_xaba="x-amz-bucket-arn";_xabgr="x-amz-bypass-governance-retention";_xabolt="x-amz-bucket-object-lock-token";_xaca="x-amz-checksum-algorithm";_xacc="x-amz-checksum-crc32";_xacc_="x-amz-checksum-crc32c";_xacc__="x-amz-checksum-crc64nvme";_xacm="x-amz-checksum-mode";_xacs="x-amz-checksum-sha1";_xacs_="x-amz-checksum-sha256";_xacsim="x-amz-copy-source-if-match";_xacsims="x-amz-copy-source-if-modified-since";_xacsinm="x-amz-copy-source-if-none-match";_xacsius="x-amz-copy-source-if-unmodified-since";_xacssseca="x-amz-copy-source-server-side-encryption-customer-algorithm";_xacssseck="x-amz-copy-source-server-side-encryption-customer-key";_xacssseckM="x-amz-copy-source-server-side-encryption-customer-key-MD5";_xacsvi="x-amz-copy-source-version-id";_xact="x-amz-checksum-type";_xadm="x-amz-delete-marker";_xae="x-amz-expiration";_xaebo="x-amz-expected-bucket-owner";_xagfc="x-amz-grant-full-control";_xagr="x-amz-grant-read";_xagra="x-amz-grant-read-acp";_xagw="x-amz-grant-write";_xagwa="x-amz-grant-write-acp";_xam="x-amz-meta-";_xamm="x-amz-missing-meta";_xampc="x-amz-mp-parts-count";_xaollh="x-amz-object-lock-legal-hold";_xaolm="x-amz-object-lock-mode";_xaolrud="x-amz-object-lock-retain-until-date";_xaooa="x-amz-optional-object-attributes";_xar="x-amz-restore";_xarc="x-amz-request-charged";_xarp="x-amz-request-payer";_xars="x-amz-replication-status";_xasc="x-amz-storage-class";_xasca="x-amz-sdk-checksum-algorithm";_xasebo="x-amz-source-expected-bucket-owner";_xasse="x-amz-server-side-encryption";_xasseakki="x-amz-server-side-encryption-aws-kms-key-id";_xassebke="x-amz-server-side-encryption-bucket-key-enabled";_xassec="x-amz-server-side-encryption-context";_xasseca="x-amz-server-side-encryption-customer-algorithm";_xasseck="x-amz-server-side-encryption-customer-key";_xasseckM="x-amz-server-side-encryption-customer-key-MD5";_xat="x-amz-tagging";_xatc="x-amz-tagging-count";_xatdmos="x-amz-transition-default-minimum-object-size";_xavi="x-amz-version-id";_xawrl="x-amz-website-redirect-location";n0="com.amazonaws.s3";S3ServiceException$=[-3,"smithy.ts.sdk.synthetic.com.amazonaws.s3","S3ServiceException",0,[],[]];(_s_registry=TypeRegistry.for("smithy.ts.sdk.synthetic.com.amazonaws.s3")).registerError(S3ServiceException$,S3ServiceException);n0_registry=TypeRegistry.for(n0);AccessDenied$=[-3,n0,"AccessDenied",{[_e]:_c2,[_hE]:403},[],[]];n0_registry.registerError(AccessDenied$,AccessDenied);BucketAlreadyExists$=[-3,n0,"BucketAlreadyExists",{[_e]:_c2,[_hE]:409},[],[]];n0_registry.registerError(BucketAlreadyExists$,BucketAlreadyExists);BucketAlreadyOwnedByYou$=[-3,n0,"BucketAlreadyOwnedByYou",{[_e]:_c2,[_hE]:409},[],[]];n0_registry.registerError(BucketAlreadyOwnedByYou$,BucketAlreadyOwnedByYou);EncryptionTypeMismatch$=[-3,n0,"EncryptionTypeMismatch",{[_e]:_c2,[_hE]:400},[],[]];n0_registry.registerError(EncryptionTypeMismatch$,EncryptionTypeMismatch);IdempotencyParameterMismatch$=[-3,n0,"IdempotencyParameterMismatch",{[_e]:_c2,[_hE]:400},[],[]];n0_registry.registerError(IdempotencyParameterMismatch$,IdempotencyParameterMismatch);InvalidObjectState$=[-3,n0,"InvalidObjectState",{[_e]:_c2,[_hE]:403},[_SC,_AT],[0,0]];n0_registry.registerError(InvalidObjectState$,InvalidObjectState);InvalidRequest$=[-3,n0,"InvalidRequest",{[_e]:_c2,[_hE]:400},[],[]];n0_registry.registerError(InvalidRequest$,InvalidRequest);InvalidWriteOffset$=[-3,n0,"InvalidWriteOffset",{[_e]:_c2,[_hE]:400},[],[]];n0_registry.registerError(InvalidWriteOffset$,InvalidWriteOffset);NoSuchBucket$=[-3,n0,"NoSuchBucket",{[_e]:_c2,[_hE]:404},[],[]];n0_registry.registerError(NoSuchBucket$,NoSuchBucket);NoSuchKey$=[-3,n0,"NoSuchKey",{[_e]:_c2,[_hE]:404},[],[]];n0_registry.registerError(NoSuchKey$,NoSuchKey);NoSuchUpload$=[-3,n0,"NoSuchUpload",{[_e]:_c2,[_hE]:404},[],[]];n0_registry.registerError(NoSuchUpload$,NoSuchUpload);NotFound$=[-3,n0,"NotFound",{[_e]:_c2},[],[]];n0_registry.registerError(NotFound$,NotFound);ObjectAlreadyInActiveTierError$=[-3,n0,"ObjectAlreadyInActiveTierError",{[_e]:_c2,[_hE]:403},[],[]];n0_registry.registerError(ObjectAlreadyInActiveTierError$,ObjectAlreadyInActiveTierError);ObjectNotInActiveTierError$=[-3,n0,"ObjectNotInActiveTierError",{[_e]:_c2,[_hE]:403},[],[]];n0_registry.registerError(ObjectNotInActiveTierError$,ObjectNotInActiveTierError);TooManyParts$=[-3,n0,"TooManyParts",{[_e]:_c2,[_hE]:400},[],[]];n0_registry.registerError(TooManyParts$,TooManyParts);errorTypeRegistries=[_s_registry,n0_registry];CopySourceSSECustomerKey=[0,n0,_CSSSECK,8,0];NonEmptyKmsKeyArnString=[0,n0,"NonEmptyKmsKeyArnString",8,0];SessionCredentialValue=[0,n0,"SessionCredentialValue",8,0];SSECustomerKey=[0,n0,_SSECK,8,0];SSEKMSEncryptionContext=[0,n0,_SSEKMSEC,8,0];SSEKMSKeyId=[0,n0,_SSEKMSKI,8,0];StreamingBlob=[0,n0,"StreamingBlob",{[_st]:1},42];AbacStatus$=[3,n0,_AS,0,[_S],[0]];AbortIncompleteMultipartUpload$=[3,n0,_AIMU,0,["DaysAfterInitiation"],[1]];AbortMultipartUploadOutput$=[3,n0,"AbortMultipartUploadOutput",0,[_RC],[[0,{[_hH]:_xarc}]]];AbortMultipartUploadRequest$=[3,n0,"AbortMultipartUploadRequest",0,[_B,_K,_UI,_RP,_EBO,"IfMatchInitiatedTime"],[[0,1],[0,1],[0,{[_hQ]:_uI}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}],[6,{[_hH]:"x-amz-if-match-initiated-time"}]],3];AccelerateConfiguration$=[3,n0,_AC,0,[_S],[0]];AccessControlPolicy$=[3,n0,_ACP,0,[_G,_O],[[()=>Grants,{[_xN]:_ACL}],()=>Owner$]];AccessControlTranslation$=[3,n0,_ACT,0,[_O],[0],1];AnalyticsAndOperator$=[3,n0,"AnalyticsAndOperator",0,[_P,_T],[0,[()=>TagSet,{[_xF]:1,[_xN]:_Ta}]]];AnalyticsConfiguration$=[3,n0,_ACn,0,[_I,_SCA,_F],[0,()=>StorageClassAnalysis$,[()=>AnalyticsFilter$,0]],2];AnalyticsExportDestination$=[3,n0,"AnalyticsExportDestination",0,[_SBD],[()=>AnalyticsS3BucketDestination$],1];AnalyticsS3BucketDestination$=[3,n0,"AnalyticsS3BucketDestination",0,["Format",_B,"BucketAccountId",_P],[0,0,0,0],2];BlockedEncryptionTypes$=[3,n0,_BET,0,[_ET],[[()=>EncryptionTypeList,{[_xF]:1}]]];Bucket$=[3,n0,_B,0,[_N,"CreationDate",_BR,_BA],[0,4,0,0]];BucketInfo$=[3,n0,"BucketInfo",0,["DataRedundancy",_Ty],[0,0]];BucketLifecycleConfiguration$=[3,n0,"BucketLifecycleConfiguration",0,[_R],[[()=>LifecycleRules,{[_xF]:1,[_xN]:_Ru}]],1];BucketLoggingStatus$=[3,n0,_BLS,0,[_LE],[[()=>LoggingEnabled$,0]]];Checksum$=[3,n0,_C,0,[_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh,_CT],[0,0,0,0,0,0]];CommonPrefix$=[3,n0,"CommonPrefix",0,[_P],[0]];CompletedMultipartUpload$=[3,n0,"CompletedMultipartUpload",0,[_Pa],[[()=>CompletedPartList,{[_xF]:1,[_xN]:"Part"}]]];CompletedPart$=[3,n0,"CompletedPart",0,[_ETa,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh,_PN],[0,0,0,0,0,0,1]];CompleteMultipartUploadOutput$=[3,n0,"CompleteMultipartUploadOutput",{[_xN]:"CompleteMultipartUploadResult"},[_L,_B,_K,_E,_ETa,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh,_CT,_SSE,_VI,_SSEKMSKI,_BKE,_RC],[0,0,0,[0,{[_hH]:_xae}],0,0,0,0,0,0,0,[0,{[_hH]:_xasse}],[0,{[_hH]:_xavi}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[2,{[_hH]:_xassebke}],[0,{[_hH]:_xarc}]]];CompleteMultipartUploadRequest$=[3,n0,"CompleteMultipartUploadRequest",0,[_B,_K,_UI,_MU,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh,_CT,"MpuObjectSize",_RP,_EBO,_IM,_INM,_SSECA,_SSECK,_SSECKMD],[[0,1],[0,1],[0,{[_hQ]:_uI}],[()=>CompletedMultipartUpload$,{[_hP]:1,[_xN]:_CMUo}],[0,{[_hH]:_xacc}],[0,{[_hH]:_xacc_}],[0,{[_hH]:_xacc__}],[0,{[_hH]:_xacs}],[0,{[_hH]:_xacs_}],[0,{[_hH]:_xact}],[1,{[_hH]:"x-amz-mp-object-size"}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_IM_}],[0,{[_hH]:_INM_}],[0,{[_hH]:_xasseca}],[()=>SSECustomerKey,{[_hH]:_xasseck}],[0,{[_hH]:_xasseckM}]],3];Condition$=[3,n0,"Condition",0,["HttpErrorCodeReturnedEquals","KeyPrefixEquals"],[0,0]];ContinuationEvent$=[3,n0,"ContinuationEvent",0,[],[]];CopyObjectOutput$=[3,n0,"CopyObjectOutput",0,[_COR,_E,_CSVI,_VI,_SSE,_SSECA,_SSECKMD,_SSEKMSKI,_SSEKMSEC,_BKE,_RC],[[()=>CopyObjectResult$,16],[0,{[_hH]:_xae}],[0,{[_hH]:_xacsvi}],[0,{[_hH]:_xavi}],[0,{[_hH]:_xasse}],[0,{[_hH]:_xasseca}],[0,{[_hH]:_xasseckM}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[()=>SSEKMSEncryptionContext,{[_hH]:_xassec}],[2,{[_hH]:_xassebke}],[0,{[_hH]:_xarc}]]];CopyObjectRequest$=[3,n0,"CopyObjectRequest",0,[_B,_CS,_K,"ACL",_CC,_CA,_CDo,_CEo,_CL,_CTo,_CSIM,_CSIMS,_CSINM,_CSIUS,_Ex,_GFC,_GR,_GRACP,_GWACP,_IM,_INM,_M,"MetadataDirective","TaggingDirective",_SSE,_SC,_WRL,_SSECA,_SSECK,_SSECKMD,_SSEKMSKI,_SSEKMSEC,_BKE,_CSSSECA,_CSSSECK,"CopySourceSSECustomerKeyMD5",_RP,_Tag,_OLM,_OLRUD,_OLLHS,_EBO,_ESBO],[[0,1],[0,{[_hH]:"x-amz-copy-source"}],[0,1],[0,{[_hH]:_xaa}],[0,{[_hH]:_CC_}],[0,{[_hH]:_xaca}],[0,{[_hH]:_CD_}],[0,{[_hH]:_CE_}],[0,{[_hH]:_CL_}],[0,{[_hH]:_CT_}],[0,{[_hH]:_xacsim}],[4,{[_hH]:_xacsims}],[0,{[_hH]:_xacsinm}],[4,{[_hH]:_xacsius}],[4,{[_hH]:_Ex}],[0,{[_hH]:_xagfc}],[0,{[_hH]:_xagr}],[0,{[_hH]:_xagra}],[0,{[_hH]:_xagwa}],[0,{[_hH]:_IM_}],[0,{[_hH]:_INM_}],[128,{[_hPH]:_xam}],[0,{[_hH]:"x-amz-metadata-directive"}],[0,{[_hH]:"x-amz-tagging-directive"}],[0,{[_hH]:_xasse}],[0,{[_hH]:_xasc}],[0,{[_hH]:_xawrl}],[0,{[_hH]:_xasseca}],[()=>SSECustomerKey,{[_hH]:_xasseck}],[0,{[_hH]:_xasseckM}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[()=>SSEKMSEncryptionContext,{[_hH]:_xassec}],[2,{[_hH]:_xassebke}],[0,{[_hH]:_xacssseca}],[()=>CopySourceSSECustomerKey,{[_hH]:_xacssseck}],[0,{[_hH]:_xacssseckM}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xat}],[0,{[_hH]:_xaolm}],[5,{[_hH]:_xaolrud}],[0,{[_hH]:_xaollh}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xasebo}]],3];CopyObjectResult$=[3,n0,_COR,0,[_ETa,_LM,_CT,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh],[0,4,0,0,0,0,0,0]];CopyPartResult$=[3,n0,_CPR,0,[_ETa,_LM,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh],[0,4,0,0,0,0,0]];CORSConfiguration$=[3,n0,_CORSC,0,["CORSRules"],[[()=>CORSRules,{[_xF]:1,[_xN]:"CORSRule"}]],1];CORSRule$=[3,n0,"CORSRule",0,["AllowedMethods","AllowedOrigins","ID","AllowedHeaders","ExposeHeaders","MaxAgeSeconds"],[[64,{[_xF]:1,[_xN]:"AllowedMethod"}],[64,{[_xF]:1,[_xN]:"AllowedOrigin"}],0,[64,{[_xF]:1,[_xN]:"AllowedHeader"}],[64,{[_xF]:1,[_xN]:"ExposeHeader"}],1],2];CreateBucketConfiguration$=[3,n0,_CBC,0,[_LC,_L,_B,_T],[0,()=>LocationInfo$,()=>BucketInfo$,[()=>TagSet,0]]];CreateBucketMetadataConfigurationRequest$=[3,n0,"CreateBucketMetadataConfigurationRequest",0,[_B,_MC,_CMD,_CA,_EBO],[[0,1],[()=>MetadataConfiguration$,{[_hP]:1,[_xN]:_MC}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];CreateBucketMetadataTableConfigurationRequest$=[3,n0,"CreateBucketMetadataTableConfigurationRequest",0,[_B,_MTC,_CMD,_CA,_EBO],[[0,1],[()=>MetadataTableConfiguration$,{[_hP]:1,[_xN]:_MTC}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];CreateBucketOutput$=[3,n0,"CreateBucketOutput",0,[_L,_BA],[[0,{[_hH]:_L}],[0,{[_hH]:_xaba}]]];CreateBucketRequest$=[3,n0,"CreateBucketRequest",0,[_B,"ACL",_CBC,_GFC,_GR,_GRACP,_GW,_GWACP,"ObjectLockEnabledForBucket",_OO,"BucketNamespace"],[[0,1],[0,{[_hH]:_xaa}],[()=>CreateBucketConfiguration$,{[_hP]:1,[_xN]:_CBC}],[0,{[_hH]:_xagfc}],[0,{[_hH]:_xagr}],[0,{[_hH]:_xagra}],[0,{[_hH]:_xagw}],[0,{[_hH]:_xagwa}],[2,{[_hH]:"x-amz-bucket-object-lock-enabled"}],[0,{[_hH]:"x-amz-object-ownership"}],[0,{[_hH]:"x-amz-bucket-namespace"}]],1];CreateMultipartUploadOutput$=[3,n0,"CreateMultipartUploadOutput",{[_xN]:"InitiateMultipartUploadResult"},["AbortDate","AbortRuleId",_B,_K,_UI,_SSE,_SSECA,_SSECKMD,_SSEKMSKI,_SSEKMSEC,_BKE,_RC,_CA,_CT],[[4,{[_hH]:_xaad}],[0,{[_hH]:_xaari}],[0,{[_xN]:_B}],0,0,[0,{[_hH]:_xasse}],[0,{[_hH]:_xasseca}],[0,{[_hH]:_xasseckM}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[()=>SSEKMSEncryptionContext,{[_hH]:_xassec}],[2,{[_hH]:_xassebke}],[0,{[_hH]:_xarc}],[0,{[_hH]:_xaca}],[0,{[_hH]:_xact}]]];CreateMultipartUploadRequest$=[3,n0,"CreateMultipartUploadRequest",0,[_B,_K,"ACL",_CC,_CDo,_CEo,_CL,_CTo,_Ex,_GFC,_GR,_GRACP,_GWACP,_M,_SSE,_SC,_WRL,_SSECA,_SSECK,_SSECKMD,_SSEKMSKI,_SSEKMSEC,_BKE,_RP,_Tag,_OLM,_OLRUD,_OLLHS,_EBO,_CA,_CT],[[0,1],[0,1],[0,{[_hH]:_xaa}],[0,{[_hH]:_CC_}],[0,{[_hH]:_CD_}],[0,{[_hH]:_CE_}],[0,{[_hH]:_CL_}],[0,{[_hH]:_CT_}],[4,{[_hH]:_Ex}],[0,{[_hH]:_xagfc}],[0,{[_hH]:_xagr}],[0,{[_hH]:_xagra}],[0,{[_hH]:_xagwa}],[128,{[_hPH]:_xam}],[0,{[_hH]:_xasse}],[0,{[_hH]:_xasc}],[0,{[_hH]:_xawrl}],[0,{[_hH]:_xasseca}],[()=>SSECustomerKey,{[_hH]:_xasseck}],[0,{[_hH]:_xasseckM}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[()=>SSEKMSEncryptionContext,{[_hH]:_xassec}],[2,{[_hH]:_xassebke}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xat}],[0,{[_hH]:_xaolm}],[5,{[_hH]:_xaolrud}],[0,{[_hH]:_xaollh}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xaca}],[0,{[_hH]:_xact}]],2];CreateSessionOutput$=[3,n0,"CreateSessionOutput",{[_xN]:"CreateSessionResult"},[_Cr,_SSE,_SSEKMSKI,_SSEKMSEC,_BKE],[[()=>SessionCredentials$,{[_xN]:_Cr}],[0,{[_hH]:_xasse}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[()=>SSEKMSEncryptionContext,{[_hH]:_xassec}],[2,{[_hH]:_xassebke}]],1];CreateSessionRequest$=[3,n0,"CreateSessionRequest",0,[_B,"SessionMode",_SSE,_SSEKMSKI,_SSEKMSEC,_BKE],[[0,1],[0,{[_hH]:"x-amz-create-session-mode"}],[0,{[_hH]:_xasse}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[()=>SSEKMSEncryptionContext,{[_hH]:_xassec}],[2,{[_hH]:_xassebke}]],1];CSVInput$=[3,n0,"CSVInput",0,["FileHeaderInfo","Comments",_QEC,_RD,_FD,_QC,"AllowQuotedRecordDelimiter"],[0,0,0,0,0,0,2]];CSVOutput$=[3,n0,"CSVOutput",0,["QuoteFields",_QEC,_RD,_FD,_QC],[0,0,0,0,0]];DefaultRetention$=[3,n0,_DRe,0,["Mode",_D,"Years"],[0,1,1]];Delete$=[3,n0,_De,0,["Objects","Quiet"],[[()=>ObjectIdentifierList,{[_xF]:1,[_xN]:"Object"}],2],1];DeleteBucketAnalyticsConfigurationRequest$=[3,n0,"DeleteBucketAnalyticsConfigurationRequest",0,[_B,_I,_EBO],[[0,1],[0,{[_hQ]:_i}],[0,{[_hH]:_xaebo}]],2];DeleteBucketCorsRequest$=[3,n0,"DeleteBucketCorsRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];DeleteBucketEncryptionRequest$=[3,n0,"DeleteBucketEncryptionRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];DeleteBucketIntelligentTieringConfigurationRequest$=[3,n0,"DeleteBucketIntelligentTieringConfigurationRequest",0,[_B,_I,_EBO],[[0,1],[0,{[_hQ]:_i}],[0,{[_hH]:_xaebo}]],2];DeleteBucketInventoryConfigurationRequest$=[3,n0,"DeleteBucketInventoryConfigurationRequest",0,[_B,_I,_EBO],[[0,1],[0,{[_hQ]:_i}],[0,{[_hH]:_xaebo}]],2];DeleteBucketLifecycleRequest$=[3,n0,"DeleteBucketLifecycleRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];DeleteBucketMetadataConfigurationRequest$=[3,n0,"DeleteBucketMetadataConfigurationRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];DeleteBucketMetadataTableConfigurationRequest$=[3,n0,"DeleteBucketMetadataTableConfigurationRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];DeleteBucketMetricsConfigurationRequest$=[3,n0,"DeleteBucketMetricsConfigurationRequest",0,[_B,_I,_EBO],[[0,1],[0,{[_hQ]:_i}],[0,{[_hH]:_xaebo}]],2];DeleteBucketOwnershipControlsRequest$=[3,n0,"DeleteBucketOwnershipControlsRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];DeleteBucketPolicyRequest$=[3,n0,"DeleteBucketPolicyRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];DeleteBucketReplicationRequest$=[3,n0,"DeleteBucketReplicationRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];DeleteBucketRequest$=[3,n0,"DeleteBucketRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];DeleteBucketTaggingRequest$=[3,n0,"DeleteBucketTaggingRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];DeleteBucketWebsiteRequest$=[3,n0,"DeleteBucketWebsiteRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];DeletedObject$=[3,n0,"DeletedObject",0,[_K,_VI,_DM,"DeleteMarkerVersionId"],[0,0,2,0]];DeleteMarkerEntry$=[3,n0,"DeleteMarkerEntry",0,[_O,_K,_VI,"IsLatest",_LM],[()=>Owner$,0,0,2,4]];DeleteMarkerReplication$=[3,n0,_DMR,0,[_S],[0]];DeleteObjectOutput$=[3,n0,"DeleteObjectOutput",0,[_DM,_VI,_RC],[[2,{[_hH]:_xadm}],[0,{[_hH]:_xavi}],[0,{[_hH]:_xarc}]]];DeleteObjectRequest$=[3,n0,"DeleteObjectRequest",0,[_B,_K,"MFA",_VI,_RP,_BGR,_EBO,_IM,"IfMatchLastModifiedTime","IfMatchSize"],[[0,1],[0,1],[0,{[_hH]:"x-amz-mfa"}],[0,{[_hQ]:_vI}],[0,{[_hH]:_xarp}],[2,{[_hH]:_xabgr}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_IM_}],[6,{[_hH]:"x-amz-if-match-last-modified-time"}],[1,{[_hH]:"x-amz-if-match-size"}]],2];DeleteObjectsOutput$=[3,n0,"DeleteObjectsOutput",{[_xN]:"DeleteResult"},["Deleted",_RC,"Errors"],[[()=>DeletedObjects,{[_xF]:1}],[0,{[_hH]:_xarc}],[()=>Errors,{[_xF]:1,[_xN]:_Err}]]];DeleteObjectsRequest$=[3,n0,"DeleteObjectsRequest",0,[_B,_De,"MFA",_RP,_BGR,_EBO,_CA],[[0,1],[()=>Delete$,{[_hP]:1,[_xN]:_De}],[0,{[_hH]:"x-amz-mfa"}],[0,{[_hH]:_xarp}],[2,{[_hH]:_xabgr}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xasca}]],2];DeleteObjectTaggingOutput$=[3,n0,"DeleteObjectTaggingOutput",0,[_VI],[[0,{[_hH]:_xavi}]]];DeleteObjectTaggingRequest$=[3,n0,"DeleteObjectTaggingRequest",0,[_B,_K,_VI,_EBO],[[0,1],[0,1],[0,{[_hQ]:_vI}],[0,{[_hH]:_xaebo}]],2];DeletePublicAccessBlockRequest$=[3,n0,"DeletePublicAccessBlockRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];Destination$=[3,n0,_Des,0,[_B,"Account",_SC,_ACT,_EC,_RT,"Metrics"],[0,0,0,()=>AccessControlTranslation$,()=>EncryptionConfiguration$,()=>ReplicationTime$,()=>Metrics$],1];DestinationResult$=[3,n0,_DRes,0,["TableBucketType",_TBA,_TN],[0,0,0]];Encryption$=[3,n0,_En,0,[_ET,"KMSKeyId","KMSContext"],[0,[()=>SSEKMSKeyId,0],0],1];EncryptionConfiguration$=[3,n0,_EC,0,["ReplicaKmsKeyID"],[0]];EndEvent$=[3,n0,"EndEvent",0,[],[]];_Error$=[3,n0,_Err,0,[_K,_VI,"Code","Message"],[0,0,0,0]];ErrorDetails$=[3,n0,"ErrorDetails",0,["ErrorCode",_EM],[0,0]];ErrorDocument$=[3,n0,_EDr,0,[_K],[0],1];EventBridgeConfiguration$=[3,n0,_EBC,0,[],[]];ExistingObjectReplication$=[3,n0,_EOR,0,[_S],[0],1];FilterRule$=[3,n0,_FR,0,[_N,_V],[0,0]];GetBucketAbacOutput$=[3,n0,"GetBucketAbacOutput",0,[_AS],[[()=>AbacStatus$,16]]];GetBucketAbacRequest$=[3,n0,"GetBucketAbacRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketAccelerateConfigurationOutput$=[3,n0,"GetBucketAccelerateConfigurationOutput",{[_xN]:_AC},[_S,_RC],[0,[0,{[_hH]:_xarc}]]];GetBucketAccelerateConfigurationRequest$=[3,n0,"GetBucketAccelerateConfigurationRequest",0,[_B,_EBO,_RP],[[0,1],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xarp}]],1];GetBucketAclOutput$=[3,n0,"GetBucketAclOutput",{[_xN]:_ACP},[_O,_G],[()=>Owner$,[()=>Grants,{[_xN]:_ACL}]]];GetBucketAclRequest$=[3,n0,"GetBucketAclRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketAnalyticsConfigurationOutput$=[3,n0,"GetBucketAnalyticsConfigurationOutput",0,[_ACn],[[()=>AnalyticsConfiguration$,16]]];GetBucketAnalyticsConfigurationRequest$=[3,n0,"GetBucketAnalyticsConfigurationRequest",0,[_B,_I,_EBO],[[0,1],[0,{[_hQ]:_i}],[0,{[_hH]:_xaebo}]],2];GetBucketCorsOutput$=[3,n0,"GetBucketCorsOutput",{[_xN]:_CORSC},["CORSRules"],[[()=>CORSRules,{[_xF]:1,[_xN]:"CORSRule"}]]];GetBucketCorsRequest$=[3,n0,"GetBucketCorsRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketEncryptionOutput$=[3,n0,"GetBucketEncryptionOutput",0,[_SSEC],[[()=>ServerSideEncryptionConfiguration$,16]]];GetBucketEncryptionRequest$=[3,n0,"GetBucketEncryptionRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketIntelligentTieringConfigurationOutput$=[3,n0,"GetBucketIntelligentTieringConfigurationOutput",0,[_ITC],[[()=>IntelligentTieringConfiguration$,16]]];GetBucketIntelligentTieringConfigurationRequest$=[3,n0,"GetBucketIntelligentTieringConfigurationRequest",0,[_B,_I,_EBO],[[0,1],[0,{[_hQ]:_i}],[0,{[_hH]:_xaebo}]],2];GetBucketInventoryConfigurationOutput$=[3,n0,"GetBucketInventoryConfigurationOutput",0,[_IC],[[()=>InventoryConfiguration$,16]]];GetBucketInventoryConfigurationRequest$=[3,n0,"GetBucketInventoryConfigurationRequest",0,[_B,_I,_EBO],[[0,1],[0,{[_hQ]:_i}],[0,{[_hH]:_xaebo}]],2];GetBucketLifecycleConfigurationOutput$=[3,n0,"GetBucketLifecycleConfigurationOutput",{[_xN]:_LCi},[_R,_TDMOS],[[()=>LifecycleRules,{[_xF]:1,[_xN]:_Ru}],[0,{[_hH]:_xatdmos}]]];GetBucketLifecycleConfigurationRequest$=[3,n0,"GetBucketLifecycleConfigurationRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketLocationOutput$=[3,n0,"GetBucketLocationOutput",{[_xN]:_LC},[_LC],[0]];GetBucketLocationRequest$=[3,n0,"GetBucketLocationRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketLoggingOutput$=[3,n0,"GetBucketLoggingOutput",{[_xN]:_BLS},[_LE],[[()=>LoggingEnabled$,0]]];GetBucketLoggingRequest$=[3,n0,"GetBucketLoggingRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketMetadataConfigurationOutput$=[3,n0,"GetBucketMetadataConfigurationOutput",0,[_GBMCR],[[()=>GetBucketMetadataConfigurationResult$,16]]];GetBucketMetadataConfigurationRequest$=[3,n0,"GetBucketMetadataConfigurationRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketMetadataConfigurationResult$=[3,n0,_GBMCR,0,[_MCR],[()=>MetadataConfigurationResult$],1];GetBucketMetadataTableConfigurationOutput$=[3,n0,"GetBucketMetadataTableConfigurationOutput",0,[_GBMTCR],[[()=>GetBucketMetadataTableConfigurationResult$,16]]];GetBucketMetadataTableConfigurationRequest$=[3,n0,"GetBucketMetadataTableConfigurationRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketMetadataTableConfigurationResult$=[3,n0,_GBMTCR,0,[_MTCR,_S,_Err],[()=>MetadataTableConfigurationResult$,0,()=>ErrorDetails$],2];GetBucketMetricsConfigurationOutput$=[3,n0,"GetBucketMetricsConfigurationOutput",0,[_MCe],[[()=>MetricsConfiguration$,16]]];GetBucketMetricsConfigurationRequest$=[3,n0,"GetBucketMetricsConfigurationRequest",0,[_B,_I,_EBO],[[0,1],[0,{[_hQ]:_i}],[0,{[_hH]:_xaebo}]],2];GetBucketNotificationConfigurationRequest$=[3,n0,"GetBucketNotificationConfigurationRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketOwnershipControlsOutput$=[3,n0,"GetBucketOwnershipControlsOutput",0,[_OC],[[()=>OwnershipControls$,16]]];GetBucketOwnershipControlsRequest$=[3,n0,"GetBucketOwnershipControlsRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketPolicyOutput$=[3,n0,"GetBucketPolicyOutput",0,["Policy"],[[0,16]]];GetBucketPolicyRequest$=[3,n0,"GetBucketPolicyRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketPolicyStatusOutput$=[3,n0,"GetBucketPolicyStatusOutput",0,[_PS],[[()=>PolicyStatus$,16]]];GetBucketPolicyStatusRequest$=[3,n0,"GetBucketPolicyStatusRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketReplicationOutput$=[3,n0,"GetBucketReplicationOutput",0,[_RCe],[[()=>ReplicationConfiguration$,16]]];GetBucketReplicationRequest$=[3,n0,"GetBucketReplicationRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketRequestPaymentOutput$=[3,n0,"GetBucketRequestPaymentOutput",{[_xN]:_RPC},["Payer"],[0]];GetBucketRequestPaymentRequest$=[3,n0,"GetBucketRequestPaymentRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketTaggingOutput$=[3,n0,"GetBucketTaggingOutput",{[_xN]:_Tag},[_TS],[[()=>TagSet,0]],1];GetBucketTaggingRequest$=[3,n0,"GetBucketTaggingRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketVersioningOutput$=[3,n0,"GetBucketVersioningOutput",{[_xN]:_VC},[_S,"MFADelete"],[0,[0,{[_xN]:"MfaDelete"}]]];GetBucketVersioningRequest$=[3,n0,"GetBucketVersioningRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketWebsiteOutput$=[3,n0,"GetBucketWebsiteOutput",{[_xN]:_WC},[_RART,_IDn,_EDr,_RR],[()=>RedirectAllRequestsTo$,()=>IndexDocument$,()=>ErrorDocument$,[()=>RoutingRules,0]]];GetBucketWebsiteRequest$=[3,n0,"GetBucketWebsiteRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetObjectAclOutput$=[3,n0,"GetObjectAclOutput",{[_xN]:_ACP},[_O,_G,_RC],[()=>Owner$,[()=>Grants,{[_xN]:_ACL}],[0,{[_hH]:_xarc}]]];GetObjectAclRequest$=[3,n0,"GetObjectAclRequest",0,[_B,_K,_VI,_RP,_EBO],[[0,1],[0,1],[0,{[_hQ]:_vI}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}]],2];GetObjectAttributesOutput$=[3,n0,"GetObjectAttributesOutput",{[_xN]:"GetObjectAttributesResponse"},[_DM,_LM,_VI,_RC,_ETa,_C,"ObjectParts",_SC,"ObjectSize"],[[2,{[_hH]:_xadm}],[4,{[_hH]:_LM_}],[0,{[_hH]:_xavi}],[0,{[_hH]:_xarc}],0,()=>Checksum$,[()=>GetObjectAttributesParts$,0],0,1]];GetObjectAttributesParts$=[3,n0,"GetObjectAttributesParts",0,["TotalPartsCount",_PNM,_NPNM,_MP,_IT,_Pa],[[1,{[_xN]:_PC}],0,0,1,2,[()=>PartsList,{[_xF]:1,[_xN]:"Part"}]]];GetObjectAttributesRequest$=[3,n0,"GetObjectAttributesRequest",0,[_B,_K,"ObjectAttributes",_VI,_MP,_PNM,_SSECA,_SSECK,_SSECKMD,_RP,_EBO],[[0,1],[0,1],[64,{[_hH]:"x-amz-object-attributes"}],[0,{[_hQ]:_vI}],[1,{[_hH]:"x-amz-max-parts"}],[0,{[_hH]:"x-amz-part-number-marker"}],[0,{[_hH]:_xasseca}],[()=>SSECustomerKey,{[_hH]:_xasseck}],[0,{[_hH]:_xasseckM}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}]],3];GetObjectLegalHoldOutput$=[3,n0,"GetObjectLegalHoldOutput",0,[_LH],[[()=>ObjectLockLegalHold$,{[_hP]:1,[_xN]:_LH}]]];GetObjectLegalHoldRequest$=[3,n0,"GetObjectLegalHoldRequest",0,[_B,_K,_VI,_RP,_EBO],[[0,1],[0,1],[0,{[_hQ]:_vI}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}]],2];GetObjectLockConfigurationOutput$=[3,n0,"GetObjectLockConfigurationOutput",0,[_OLC],[[()=>ObjectLockConfiguration$,16]]];GetObjectLockConfigurationRequest$=[3,n0,"GetObjectLockConfigurationRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetObjectOutput$=[3,n0,"GetObjectOutput",0,[_Bo,_DM,_AR,_E,_Re,_LM,_CLo,_ETa,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh,_CT,_MM,_VI,_CC,_CDo,_CEo,_CL,_CR,_CTo,_Ex,_ES,_WRL,_SSE,_M,_SSECA,_SSECKMD,_SSEKMSKI,_BKE,_SC,_RC,_RS,_PC,_TC,_OLM,_OLRUD,_OLLHS],[[()=>StreamingBlob,16],[2,{[_hH]:_xadm}],[0,{[_hH]:_ar}],[0,{[_hH]:_xae}],[0,{[_hH]:_xar}],[4,{[_hH]:_LM_}],[1,{[_hH]:_CL__}],[0,{[_hH]:_ETa}],[0,{[_hH]:_xacc}],[0,{[_hH]:_xacc_}],[0,{[_hH]:_xacc__}],[0,{[_hH]:_xacs}],[0,{[_hH]:_xacs_}],[0,{[_hH]:_xact}],[1,{[_hH]:_xamm}],[0,{[_hH]:_xavi}],[0,{[_hH]:_CC_}],[0,{[_hH]:_CD_}],[0,{[_hH]:_CE_}],[0,{[_hH]:_CL_}],[0,{[_hH]:_CR_}],[0,{[_hH]:_CT_}],[4,{[_hH]:_Ex}],[0,{[_hH]:_ES}],[0,{[_hH]:_xawrl}],[0,{[_hH]:_xasse}],[128,{[_hPH]:_xam}],[0,{[_hH]:_xasseca}],[0,{[_hH]:_xasseckM}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[2,{[_hH]:_xassebke}],[0,{[_hH]:_xasc}],[0,{[_hH]:_xarc}],[0,{[_hH]:_xars}],[1,{[_hH]:_xampc}],[1,{[_hH]:_xatc}],[0,{[_hH]:_xaolm}],[5,{[_hH]:_xaolrud}],[0,{[_hH]:_xaollh}]]];GetObjectRequest$=[3,n0,"GetObjectRequest",0,[_B,_K,_IM,"IfModifiedSince",_INM,_IUS,_Ra,_RCC,_RCD,_RCE,_RCL,_RCT,_RE,_VI,_SSECA,_SSECK,_SSECKMD,_RP,_PN,_EBO,"ChecksumMode"],[[0,1],[0,1],[0,{[_hH]:_IM_}],[4,{[_hH]:_IMS_}],[0,{[_hH]:_INM_}],[4,{[_hH]:_IUS_}],[0,{[_hH]:_Ra}],[0,{[_hQ]:_rcc}],[0,{[_hQ]:_rcd}],[0,{[_hQ]:_rce}],[0,{[_hQ]:_rcl}],[0,{[_hQ]:_rct}],[6,{[_hQ]:_re}],[0,{[_hQ]:_vI}],[0,{[_hH]:_xasseca}],[()=>SSECustomerKey,{[_hH]:_xasseck}],[0,{[_hH]:_xasseckM}],[0,{[_hH]:_xarp}],[1,{[_hQ]:_pN}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xacm}]],2];GetObjectRetentionOutput$=[3,n0,"GetObjectRetentionOutput",0,[_Ret],[[()=>ObjectLockRetention$,{[_hP]:1,[_xN]:_Ret}]]];GetObjectRetentionRequest$=[3,n0,"GetObjectRetentionRequest",0,[_B,_K,_VI,_RP,_EBO],[[0,1],[0,1],[0,{[_hQ]:_vI}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}]],2];GetObjectTaggingOutput$=[3,n0,"GetObjectTaggingOutput",{[_xN]:_Tag},[_TS,_VI],[[()=>TagSet,0],[0,{[_hH]:_xavi}]],1];GetObjectTaggingRequest$=[3,n0,"GetObjectTaggingRequest",0,[_B,_K,_VI,_EBO,_RP],[[0,1],[0,1],[0,{[_hQ]:_vI}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xarp}]],2];GetObjectTorrentOutput$=[3,n0,"GetObjectTorrentOutput",0,[_Bo,_RC],[[()=>StreamingBlob,16],[0,{[_hH]:_xarc}]]];GetObjectTorrentRequest$=[3,n0,"GetObjectTorrentRequest",0,[_B,_K,_RP,_EBO],[[0,1],[0,1],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}]],2];GetPublicAccessBlockOutput$=[3,n0,"GetPublicAccessBlockOutput",0,[_PABC],[[()=>PublicAccessBlockConfiguration$,16]]];GetPublicAccessBlockRequest$=[3,n0,"GetPublicAccessBlockRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GlacierJobParameters$=[3,n0,_GJP,0,["Tier"],[0],1];Grant$=[3,n0,"Grant",0,["Grantee",_Pe],[[()=>Grantee$,{[_xNm]:["xsi",_hi]}],0]];Grantee$=[3,n0,"Grantee",0,[_Ty,_DN,"EmailAddress","ID","URI"],[[0,{[_xA]:1,[_xN]:"xsi:type"}],0,0,0,0],1];HeadBucketOutput$=[3,n0,"HeadBucketOutput",0,[_BA,"BucketLocationType","BucketLocationName",_BR,"AccessPointAlias"],[[0,{[_hH]:_xaba}],[0,{[_hH]:"x-amz-bucket-location-type"}],[0,{[_hH]:"x-amz-bucket-location-name"}],[0,{[_hH]:"x-amz-bucket-region"}],[2,{[_hH]:"x-amz-access-point-alias"}]]];HeadBucketRequest$=[3,n0,"HeadBucketRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];HeadObjectOutput$=[3,n0,"HeadObjectOutput",0,[_DM,_AR,_E,_Re,"ArchiveStatus",_LM,_CLo,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh,_CT,_ETa,_MM,_VI,_CC,_CDo,_CEo,_CL,_CTo,_CR,_Ex,_ES,_WRL,_SSE,_M,_SSECA,_SSECKMD,_SSEKMSKI,_BKE,_SC,_RC,_RS,_PC,_TC,_OLM,_OLRUD,_OLLHS],[[2,{[_hH]:_xadm}],[0,{[_hH]:_ar}],[0,{[_hH]:_xae}],[0,{[_hH]:_xar}],[0,{[_hH]:"x-amz-archive-status"}],[4,{[_hH]:_LM_}],[1,{[_hH]:_CL__}],[0,{[_hH]:_xacc}],[0,{[_hH]:_xacc_}],[0,{[_hH]:_xacc__}],[0,{[_hH]:_xacs}],[0,{[_hH]:_xacs_}],[0,{[_hH]:_xact}],[0,{[_hH]:_ETa}],[1,{[_hH]:_xamm}],[0,{[_hH]:_xavi}],[0,{[_hH]:_CC_}],[0,{[_hH]:_CD_}],[0,{[_hH]:_CE_}],[0,{[_hH]:_CL_}],[0,{[_hH]:_CT_}],[0,{[_hH]:_CR_}],[4,{[_hH]:_Ex}],[0,{[_hH]:_ES}],[0,{[_hH]:_xawrl}],[0,{[_hH]:_xasse}],[128,{[_hPH]:_xam}],[0,{[_hH]:_xasseca}],[0,{[_hH]:_xasseckM}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[2,{[_hH]:_xassebke}],[0,{[_hH]:_xasc}],[0,{[_hH]:_xarc}],[0,{[_hH]:_xars}],[1,{[_hH]:_xampc}],[1,{[_hH]:_xatc}],[0,{[_hH]:_xaolm}],[5,{[_hH]:_xaolrud}],[0,{[_hH]:_xaollh}]]];HeadObjectRequest$=[3,n0,"HeadObjectRequest",0,[_B,_K,_IM,"IfModifiedSince",_INM,_IUS,_Ra,_RCC,_RCD,_RCE,_RCL,_RCT,_RE,_VI,_SSECA,_SSECK,_SSECKMD,_RP,_PN,_EBO,"ChecksumMode"],[[0,1],[0,1],[0,{[_hH]:_IM_}],[4,{[_hH]:_IMS_}],[0,{[_hH]:_INM_}],[4,{[_hH]:_IUS_}],[0,{[_hH]:_Ra}],[0,{[_hQ]:_rcc}],[0,{[_hQ]:_rcd}],[0,{[_hQ]:_rce}],[0,{[_hQ]:_rcl}],[0,{[_hQ]:_rct}],[6,{[_hQ]:_re}],[0,{[_hQ]:_vI}],[0,{[_hH]:_xasseca}],[()=>SSECustomerKey,{[_hH]:_xasseck}],[0,{[_hH]:_xasseckM}],[0,{[_hH]:_xarp}],[1,{[_hQ]:_pN}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xacm}]],2];IndexDocument$=[3,n0,_IDn,0,["Suffix"],[0],1];Initiator$=[3,n0,_In,0,["ID",_DN],[0,0]];InputSerialization$=[3,n0,_IS,0,["CSV","CompressionType","JSON","Parquet"],[()=>CSVInput$,0,()=>JSONInput$,()=>ParquetInput$]];IntelligentTieringAndOperator$=[3,n0,"IntelligentTieringAndOperator",0,[_P,_T],[0,[()=>TagSet,{[_xF]:1,[_xN]:_Ta}]]];IntelligentTieringConfiguration$=[3,n0,_ITC,0,[_I,_S,"Tierings",_F],[0,0,[()=>TieringList,{[_xF]:1,[_xN]:"Tiering"}],[()=>IntelligentTieringFilter$,0]],3];IntelligentTieringFilter$=[3,n0,"IntelligentTieringFilter",0,[_P,_Ta,"And"],[0,()=>Tag$,[()=>IntelligentTieringAndOperator$,0]]];InventoryConfiguration$=[3,n0,_IC,0,[_Des,"IsEnabled",_I,"IncludedObjectVersions","Schedule",_F,"OptionalFields"],[[()=>InventoryDestination$,0],2,0,0,()=>InventorySchedule$,()=>InventoryFilter$,[()=>InventoryOptionalFields,0]],5];InventoryDestination$=[3,n0,"InventoryDestination",0,[_SBD],[[()=>InventoryS3BucketDestination$,0]],1];InventoryEncryption$=[3,n0,"InventoryEncryption",0,["SSES3","SSEKMS"],[[()=>SSES3$,{[_xN]:"SSE-S3"}],[()=>SSEKMS$,{[_xN]:_SK}]]];InventoryFilter$=[3,n0,"InventoryFilter",0,[_P],[0],1];InventoryS3BucketDestination$=[3,n0,"InventoryS3BucketDestination",0,[_B,"Format","AccountId",_P,_En],[0,0,0,0,[()=>InventoryEncryption$,0]],2];InventorySchedule$=[3,n0,"InventorySchedule",0,["Frequency"],[0],1];InventoryTableConfiguration$=[3,n0,_ITCn,0,[_CSo,_EC],[0,()=>MetadataTableEncryptionConfiguration$],1];InventoryTableConfigurationResult$=[3,n0,_ITCR,0,[_CSo,"TableStatus",_Err,_TNa,_TA],[0,0,()=>ErrorDetails$,0,0],1];InventoryTableConfigurationUpdates$=[3,n0,"InventoryTableConfigurationUpdates",0,[_CSo,_EC],[0,()=>MetadataTableEncryptionConfiguration$],1];JournalTableConfiguration$=[3,n0,_JTC,0,[_REe,_EC],[()=>RecordExpiration$,()=>MetadataTableEncryptionConfiguration$],1];JournalTableConfigurationResult$=[3,n0,_JTCR,0,["TableStatus",_TNa,_REe,_Err,_TA],[0,0,()=>RecordExpiration$,()=>ErrorDetails$,0],3];JournalTableConfigurationUpdates$=[3,n0,"JournalTableConfigurationUpdates",0,[_REe],[()=>RecordExpiration$],1];JSONInput$=[3,n0,"JSONInput",0,[_Ty],[0]];JSONOutput$=[3,n0,"JSONOutput",0,[_RD],[0]];LambdaFunctionConfiguration$=[3,n0,"LambdaFunctionConfiguration",0,["LambdaFunctionArn",_Ev,_I,_F],[[0,{[_xN]:"CloudFunction"}],[64,{[_xF]:1,[_xN]:"Event"}],0,[()=>NotificationConfigurationFilter$,0]],2];LifecycleExpiration$=[3,n0,"LifecycleExpiration",0,["Date",_D,"ExpiredObjectDeleteMarker"],[5,1,2]];LifecycleRule$=[3,n0,"LifecycleRule",0,[_S,_E,"ID",_P,_F,"Transitions","NoncurrentVersionTransitions",_NVE,_AIMU],[0,()=>LifecycleExpiration$,0,0,[()=>LifecycleRuleFilter$,0],[()=>TransitionList,{[_xF]:1,[_xN]:"Transition"}],[()=>NoncurrentVersionTransitionList,{[_xF]:1,[_xN]:_NVTo}],()=>NoncurrentVersionExpiration$,()=>AbortIncompleteMultipartUpload$],1];LifecycleRuleAndOperator$=[3,n0,"LifecycleRuleAndOperator",0,[_P,_T,_OSGT,_OSLT],[0,[()=>TagSet,{[_xF]:1,[_xN]:_Ta}],1,1]];LifecycleRuleFilter$=[3,n0,"LifecycleRuleFilter",0,[_P,_Ta,_OSGT,_OSLT,"And"],[0,()=>Tag$,1,1,[()=>LifecycleRuleAndOperator$,0]]];ListBucketAnalyticsConfigurationsOutput$=[3,n0,"ListBucketAnalyticsConfigurationsOutput",{[_xN]:"ListBucketAnalyticsConfigurationResult"},[_IT,_CTon,_NCT,_ACLn],[2,0,0,[()=>AnalyticsConfigurationList,{[_xF]:1,[_xN]:_ACn}]]];ListBucketAnalyticsConfigurationsRequest$=[3,n0,"ListBucketAnalyticsConfigurationsRequest",0,[_B,_CTon,_EBO],[[0,1],[0,{[_hQ]:_ct}],[0,{[_hH]:_xaebo}]],1];ListBucketIntelligentTieringConfigurationsOutput$=[3,n0,"ListBucketIntelligentTieringConfigurationsOutput",0,[_IT,_CTon,_NCT,_ITCL],[2,0,0,[()=>IntelligentTieringConfigurationList,{[_xF]:1,[_xN]:_ITC}]]];ListBucketIntelligentTieringConfigurationsRequest$=[3,n0,"ListBucketIntelligentTieringConfigurationsRequest",0,[_B,_CTon,_EBO],[[0,1],[0,{[_hQ]:_ct}],[0,{[_hH]:_xaebo}]],1];ListBucketInventoryConfigurationsOutput$=[3,n0,"ListBucketInventoryConfigurationsOutput",{[_xN]:"ListInventoryConfigurationsResult"},[_CTon,_ICL,_IT,_NCT],[0,[()=>InventoryConfigurationList,{[_xF]:1,[_xN]:_IC}],2,0]];ListBucketInventoryConfigurationsRequest$=[3,n0,"ListBucketInventoryConfigurationsRequest",0,[_B,_CTon,_EBO],[[0,1],[0,{[_hQ]:_ct}],[0,{[_hH]:_xaebo}]],1];ListBucketMetricsConfigurationsOutput$=[3,n0,"ListBucketMetricsConfigurationsOutput",{[_xN]:"ListMetricsConfigurationsResult"},[_IT,_CTon,_NCT,_MCL],[2,0,0,[()=>MetricsConfigurationList,{[_xF]:1,[_xN]:_MCe}]]];ListBucketMetricsConfigurationsRequest$=[3,n0,"ListBucketMetricsConfigurationsRequest",0,[_B,_CTon,_EBO],[[0,1],[0,{[_hQ]:_ct}],[0,{[_hH]:_xaebo}]],1];ListBucketsOutput$=[3,n0,"ListBucketsOutput",{[_xN]:"ListAllMyBucketsResult"},[_Bu,_O,_CTon,_P],[[()=>Buckets,0],()=>Owner$,0,0]];ListBucketsRequest$=[3,n0,"ListBucketsRequest",0,["MaxBuckets",_CTon,_P,_BR],[[1,{[_hQ]:"max-buckets"}],[0,{[_hQ]:_ct}],[0,{[_hQ]:_p}],[0,{[_hQ]:"bucket-region"}]]];ListDirectoryBucketsOutput$=[3,n0,"ListDirectoryBucketsOutput",{[_xN]:"ListAllMyDirectoryBucketsResult"},[_Bu,_CTon],[[()=>Buckets,0],0]];ListDirectoryBucketsRequest$=[3,n0,"ListDirectoryBucketsRequest",0,[_CTon,"MaxDirectoryBuckets"],[[0,{[_hQ]:_ct}],[1,{[_hQ]:"max-directory-buckets"}]]];ListMultipartUploadsOutput$=[3,n0,"ListMultipartUploadsOutput",{[_xN]:"ListMultipartUploadsResult"},[_B,_KM,_UIM,_NKM,_P,_Deli,"NextUploadIdMarker","MaxUploads",_IT,"Uploads",_CPom,_ETn,_RC],[0,0,0,0,0,0,0,1,2,[()=>MultipartUploadList,{[_xF]:1,[_xN]:"Upload"}],[()=>CommonPrefixList,{[_xF]:1}],0,[0,{[_hH]:_xarc}]]];ListMultipartUploadsRequest$=[3,n0,"ListMultipartUploadsRequest",0,[_B,_Deli,_ETn,_KM,"MaxUploads",_P,_UIM,_EBO,_RP],[[0,1],[0,{[_hQ]:_d}],[0,{[_hQ]:_et}],[0,{[_hQ]:_km}],[1,{[_hQ]:"max-uploads"}],[0,{[_hQ]:_p}],[0,{[_hQ]:"upload-id-marker"}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xarp}]],1];ListObjectsOutput$=[3,n0,"ListObjectsOutput",{[_xN]:_LBRi},[_IT,"Marker","NextMarker","Contents",_N,_P,_Deli,_MK,_CPom,_ETn,_RC],[2,0,0,[()=>ObjectList,{[_xF]:1}],0,0,0,1,[()=>CommonPrefixList,{[_xF]:1}],0,[0,{[_hH]:_xarc}]]];ListObjectsRequest$=[3,n0,"ListObjectsRequest",0,[_B,_Deli,_ETn,"Marker",_MK,_P,_RP,_EBO,_OOA],[[0,1],[0,{[_hQ]:_d}],[0,{[_hQ]:_et}],[0,{[_hQ]:"marker"}],[1,{[_hQ]:_mk}],[0,{[_hQ]:_p}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}],[64,{[_hH]:_xaooa}]],1];ListObjectsV2Output$=[3,n0,"ListObjectsV2Output",{[_xN]:_LBRi},[_IT,"Contents",_N,_P,_Deli,_MK,_CPom,_ETn,"KeyCount",_CTon,_NCT,_SA,_RC],[2,[()=>ObjectList,{[_xF]:1}],0,0,0,1,[()=>CommonPrefixList,{[_xF]:1}],0,1,0,0,0,[0,{[_hH]:_xarc}]]];ListObjectsV2Request$=[3,n0,"ListObjectsV2Request",0,[_B,_Deli,_ETn,_MK,_P,_CTon,"FetchOwner",_SA,_RP,_EBO,_OOA],[[0,1],[0,{[_hQ]:_d}],[0,{[_hQ]:_et}],[1,{[_hQ]:_mk}],[0,{[_hQ]:_p}],[0,{[_hQ]:_ct}],[2,{[_hQ]:"fetch-owner"}],[0,{[_hQ]:"start-after"}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}],[64,{[_hH]:_xaooa}]],1];ListObjectVersionsOutput$=[3,n0,"ListObjectVersionsOutput",{[_xN]:"ListVersionsResult"},[_IT,_KM,_VIM,_NKM,"NextVersionIdMarker","Versions",_DMe,_N,_P,_Deli,_MK,_CPom,_ETn,_RC],[2,0,0,0,0,[()=>ObjectVersionList,{[_xF]:1,[_xN]:"Version"}],[()=>DeleteMarkers,{[_xF]:1,[_xN]:_DM}],0,0,0,1,[()=>CommonPrefixList,{[_xF]:1}],0,[0,{[_hH]:_xarc}]]];ListObjectVersionsRequest$=[3,n0,"ListObjectVersionsRequest",0,[_B,_Deli,_ETn,_KM,_MK,_P,_VIM,_EBO,_RP,_OOA],[[0,1],[0,{[_hQ]:_d}],[0,{[_hQ]:_et}],[0,{[_hQ]:_km}],[1,{[_hQ]:_mk}],[0,{[_hQ]:_p}],[0,{[_hQ]:"version-id-marker"}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xarp}],[64,{[_hH]:_xaooa}]],1];ListPartsOutput$=[3,n0,"ListPartsOutput",{[_xN]:"ListPartsResult"},["AbortDate","AbortRuleId",_B,_K,_UI,_PNM,_NPNM,_MP,_IT,_Pa,_In,_O,_SC,_RC,_CA,_CT],[[4,{[_hH]:_xaad}],[0,{[_hH]:_xaari}],0,0,0,0,0,1,2,[()=>Parts,{[_xF]:1,[_xN]:"Part"}],()=>Initiator$,()=>Owner$,0,[0,{[_hH]:_xarc}],0,0]];ListPartsRequest$=[3,n0,"ListPartsRequest",0,[_B,_K,_UI,_MP,_PNM,_RP,_EBO,_SSECA,_SSECK,_SSECKMD],[[0,1],[0,1],[0,{[_hQ]:_uI}],[1,{[_hQ]:"max-parts"}],[0,{[_hQ]:"part-number-marker"}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xasseca}],[()=>SSECustomerKey,{[_hH]:_xasseck}],[0,{[_hH]:_xasseckM}]],3];LocationInfo$=[3,n0,"LocationInfo",0,[_Ty,_N],[0,0]];LoggingEnabled$=[3,n0,_LE,0,["TargetBucket","TargetPrefix",_TG,_TOKF],[0,0,[()=>TargetGrants,0],[()=>TargetObjectKeyFormat$,0]],2];MetadataConfiguration$=[3,n0,_MC,0,[_JTC,_ITCn],[()=>JournalTableConfiguration$,()=>InventoryTableConfiguration$],1];MetadataConfigurationResult$=[3,n0,_MCR,0,[_DRes,_JTCR,_ITCR],[()=>DestinationResult$,()=>JournalTableConfigurationResult$,()=>InventoryTableConfigurationResult$],1];MetadataEntry$=[3,n0,_ME,0,[_N,_V],[0,0]];MetadataTableConfiguration$=[3,n0,_MTC,0,[_STD],[()=>S3TablesDestination$],1];MetadataTableConfigurationResult$=[3,n0,_MTCR,0,[_STDR],[()=>S3TablesDestinationResult$],1];MetadataTableEncryptionConfiguration$=[3,n0,"MetadataTableEncryptionConfiguration",0,["SseAlgorithm","KmsKeyArn"],[0,0],1];Metrics$=[3,n0,"Metrics",0,[_S,"EventThreshold"],[0,()=>ReplicationTimeValue$],1];MetricsAndOperator$=[3,n0,"MetricsAndOperator",0,[_P,_T,"AccessPointArn"],[0,[()=>TagSet,{[_xF]:1,[_xN]:_Ta}],0]];MetricsConfiguration$=[3,n0,_MCe,0,[_I,_F],[0,[()=>MetricsFilter$,0]],1];MultipartUpload$=[3,n0,_MU,0,[_UI,_K,"Initiated",_SC,_O,_In,_CA,_CT],[0,0,4,0,()=>Owner$,()=>Initiator$,0,0]];NoncurrentVersionExpiration$=[3,n0,_NVE,0,[_ND,_NNV],[1,1]];NoncurrentVersionTransition$=[3,n0,_NVTo,0,[_ND,_SC,_NNV],[1,0,1]];NotificationConfiguration$=[3,n0,_NC,0,["TopicConfigurations","QueueConfigurations","LambdaFunctionConfigurations",_EBC],[[()=>TopicConfigurationList,{[_xF]:1,[_xN]:_TCop}],[()=>QueueConfigurationList,{[_xF]:1,[_xN]:_QCue}],[()=>LambdaFunctionConfigurationList,{[_xF]:1,[_xN]:"CloudFunctionConfiguration"}],()=>EventBridgeConfiguration$]];NotificationConfigurationFilter$=[3,n0,"NotificationConfigurationFilter",0,[_K],[[()=>S3KeyFilter$,{[_xN]:"S3Key"}]]];_Object$=[3,n0,"Object",0,[_K,_LM,_ETa,_CA,_CT,_Si,_SC,_O,_RSe],[0,4,0,[64,{[_xF]:1}],0,1,0,()=>Owner$,()=>RestoreStatus$]];ObjectIdentifier$=[3,n0,"ObjectIdentifier",0,[_K,_VI,_ETa,"LastModifiedTime",_Si],[0,0,0,6,1],1];ObjectLockConfiguration$=[3,n0,_OLC,0,["ObjectLockEnabled",_Ru],[0,()=>ObjectLockRule$]];ObjectLockLegalHold$=[3,n0,"ObjectLockLegalHold",0,[_S],[0]];ObjectLockRetention$=[3,n0,"ObjectLockRetention",0,["Mode","RetainUntilDate"],[0,5]];ObjectLockRule$=[3,n0,"ObjectLockRule",0,[_DRe],[()=>DefaultRetention$]];ObjectPart$=[3,n0,"ObjectPart",0,[_PN,_Si,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh],[1,1,0,0,0,0,0]];ObjectVersion$=[3,n0,"ObjectVersion",0,[_ETa,_CA,_CT,_Si,_SC,_K,_VI,"IsLatest",_LM,_O,_RSe],[0,[64,{[_xF]:1}],0,1,0,0,0,2,4,()=>Owner$,()=>RestoreStatus$]];OutputLocation$=[3,n0,_OL,0,["S3"],[[()=>S3Location$,0]]];OutputSerialization$=[3,n0,_OSu,0,["CSV","JSON"],[()=>CSVOutput$,()=>JSONOutput$]];Owner$=[3,n0,_O,0,[_DN,"ID"],[0,0]];OwnershipControls$=[3,n0,_OC,0,[_R],[[()=>OwnershipControlsRules,{[_xF]:1,[_xN]:_Ru}]],1];OwnershipControlsRule$=[3,n0,"OwnershipControlsRule",0,[_OO],[0],1];ParquetInput$=[3,n0,"ParquetInput",0,[],[]];Part$=[3,n0,"Part",0,[_PN,_LM,_ETa,_Si,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh],[1,4,0,1,0,0,0,0,0]];PartitionedPrefix$=[3,n0,_PP,{[_xN]:_PP},["PartitionDateSource"],[0]];PolicyStatus$=[3,n0,_PS,0,["IsPublic"],[[2,{[_xN]:"IsPublic"}]]];Progress$=[3,n0,"Progress",0,[_BS,_BP,_BRy],[1,1,1]];ProgressEvent$=[3,n0,"ProgressEvent",0,["Details"],[[()=>Progress$,{[_eP]:1}]]];PublicAccessBlockConfiguration$=[3,n0,_PABC,0,[_BPA,_IPA,_BPP,_RPB],[[2,{[_xN]:_BPA}],[2,{[_xN]:_IPA}],[2,{[_xN]:_BPP}],[2,{[_xN]:_RPB}]]];PutBucketAbacRequest$=[3,n0,"PutBucketAbacRequest",0,[_B,_AS,_CMD,_CA,_EBO],[[0,1],[()=>AbacStatus$,{[_hP]:1,[_xN]:_AS}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];PutBucketAccelerateConfigurationRequest$=[3,n0,"PutBucketAccelerateConfigurationRequest",0,[_B,_AC,_EBO,_CA],[[0,1],[()=>AccelerateConfiguration$,{[_hP]:1,[_xN]:_AC}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xasca}]],2];PutBucketAclRequest$=[3,n0,"PutBucketAclRequest",0,[_B,"ACL",_ACP,_CMD,_CA,_GFC,_GR,_GRACP,_GW,_GWACP,_EBO],[[0,1],[0,{[_hH]:_xaa}],[()=>AccessControlPolicy$,{[_hP]:1,[_xN]:_ACP}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xagfc}],[0,{[_hH]:_xagr}],[0,{[_hH]:_xagra}],[0,{[_hH]:_xagw}],[0,{[_hH]:_xagwa}],[0,{[_hH]:_xaebo}]],1];PutBucketAnalyticsConfigurationRequest$=[3,n0,"PutBucketAnalyticsConfigurationRequest",0,[_B,_I,_ACn,_EBO],[[0,1],[0,{[_hQ]:_i}],[()=>AnalyticsConfiguration$,{[_hP]:1,[_xN]:_ACn}],[0,{[_hH]:_xaebo}]],3];PutBucketCorsRequest$=[3,n0,"PutBucketCorsRequest",0,[_B,_CORSC,_CMD,_CA,_EBO],[[0,1],[()=>CORSConfiguration$,{[_hP]:1,[_xN]:_CORSC}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];PutBucketEncryptionRequest$=[3,n0,"PutBucketEncryptionRequest",0,[_B,_SSEC,_CMD,_CA,_EBO],[[0,1],[()=>ServerSideEncryptionConfiguration$,{[_hP]:1,[_xN]:_SSEC}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];PutBucketIntelligentTieringConfigurationRequest$=[3,n0,"PutBucketIntelligentTieringConfigurationRequest",0,[_B,_I,_ITC,_EBO],[[0,1],[0,{[_hQ]:_i}],[()=>IntelligentTieringConfiguration$,{[_hP]:1,[_xN]:_ITC}],[0,{[_hH]:_xaebo}]],3];PutBucketInventoryConfigurationRequest$=[3,n0,"PutBucketInventoryConfigurationRequest",0,[_B,_I,_IC,_EBO],[[0,1],[0,{[_hQ]:_i}],[()=>InventoryConfiguration$,{[_hP]:1,[_xN]:_IC}],[0,{[_hH]:_xaebo}]],3];PutBucketLifecycleConfigurationOutput$=[3,n0,"PutBucketLifecycleConfigurationOutput",0,[_TDMOS],[[0,{[_hH]:_xatdmos}]]];PutBucketLifecycleConfigurationRequest$=[3,n0,"PutBucketLifecycleConfigurationRequest",0,[_B,_CA,_LCi,_EBO,_TDMOS],[[0,1],[0,{[_hH]:_xasca}],[()=>BucketLifecycleConfiguration$,{[_hP]:1,[_xN]:_LCi}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xatdmos}]],1];PutBucketLoggingRequest$=[3,n0,"PutBucketLoggingRequest",0,[_B,_BLS,_CMD,_CA,_EBO],[[0,1],[()=>BucketLoggingStatus$,{[_hP]:1,[_xN]:_BLS}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];PutBucketMetricsConfigurationRequest$=[3,n0,"PutBucketMetricsConfigurationRequest",0,[_B,_I,_MCe,_EBO],[[0,1],[0,{[_hQ]:_i}],[()=>MetricsConfiguration$,{[_hP]:1,[_xN]:_MCe}],[0,{[_hH]:_xaebo}]],3];PutBucketNotificationConfigurationRequest$=[3,n0,"PutBucketNotificationConfigurationRequest",0,[_B,_NC,_EBO,"SkipDestinationValidation"],[[0,1],[()=>NotificationConfiguration$,{[_hP]:1,[_xN]:_NC}],[0,{[_hH]:_xaebo}],[2,{[_hH]:"x-amz-skip-destination-validation"}]],2];PutBucketOwnershipControlsRequest$=[3,n0,"PutBucketOwnershipControlsRequest",0,[_B,_OC,_CMD,_EBO,_CA],[[0,1],[()=>OwnershipControls$,{[_hP]:1,[_xN]:_OC}],[0,{[_hH]:_CM}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xasca}]],2];PutBucketPolicyRequest$=[3,n0,"PutBucketPolicyRequest",0,[_B,"Policy",_CMD,_CA,"ConfirmRemoveSelfBucketAccess",_EBO],[[0,1],[0,16],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[2,{[_hH]:"x-amz-confirm-remove-self-bucket-access"}],[0,{[_hH]:_xaebo}]],2];PutBucketReplicationRequest$=[3,n0,"PutBucketReplicationRequest",0,[_B,_RCe,_CMD,_CA,"Token",_EBO],[[0,1],[()=>ReplicationConfiguration$,{[_hP]:1,[_xN]:_RCe}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xabolt}],[0,{[_hH]:_xaebo}]],2];PutBucketRequestPaymentRequest$=[3,n0,"PutBucketRequestPaymentRequest",0,[_B,_RPC,_CMD,_CA,_EBO],[[0,1],[()=>RequestPaymentConfiguration$,{[_hP]:1,[_xN]:_RPC}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];PutBucketTaggingRequest$=[3,n0,"PutBucketTaggingRequest",0,[_B,_Tag,_CMD,_CA,_EBO],[[0,1],[()=>Tagging$,{[_hP]:1,[_xN]:_Tag}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];PutBucketVersioningRequest$=[3,n0,"PutBucketVersioningRequest",0,[_B,_VC,_CMD,_CA,"MFA",_EBO],[[0,1],[()=>VersioningConfiguration$,{[_hP]:1,[_xN]:_VC}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:"x-amz-mfa"}],[0,{[_hH]:_xaebo}]],2];PutBucketWebsiteRequest$=[3,n0,"PutBucketWebsiteRequest",0,[_B,_WC,_CMD,_CA,_EBO],[[0,1],[()=>WebsiteConfiguration$,{[_hP]:1,[_xN]:_WC}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];PutObjectAclOutput$=[3,n0,"PutObjectAclOutput",0,[_RC],[[0,{[_hH]:_xarc}]]];PutObjectAclRequest$=[3,n0,"PutObjectAclRequest",0,[_B,_K,"ACL",_ACP,_CMD,_CA,_GFC,_GR,_GRACP,_GW,_GWACP,_RP,_VI,_EBO],[[0,1],[0,1],[0,{[_hH]:_xaa}],[()=>AccessControlPolicy$,{[_hP]:1,[_xN]:_ACP}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xagfc}],[0,{[_hH]:_xagr}],[0,{[_hH]:_xagra}],[0,{[_hH]:_xagw}],[0,{[_hH]:_xagwa}],[0,{[_hH]:_xarp}],[0,{[_hQ]:_vI}],[0,{[_hH]:_xaebo}]],2];PutObjectLegalHoldOutput$=[3,n0,"PutObjectLegalHoldOutput",0,[_RC],[[0,{[_hH]:_xarc}]]];PutObjectLegalHoldRequest$=[3,n0,"PutObjectLegalHoldRequest",0,[_B,_K,_LH,_RP,_VI,_CMD,_CA,_EBO],[[0,1],[0,1],[()=>ObjectLockLegalHold$,{[_hP]:1,[_xN]:_LH}],[0,{[_hH]:_xarp}],[0,{[_hQ]:_vI}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];PutObjectLockConfigurationOutput$=[3,n0,"PutObjectLockConfigurationOutput",0,[_RC],[[0,{[_hH]:_xarc}]]];PutObjectLockConfigurationRequest$=[3,n0,"PutObjectLockConfigurationRequest",0,[_B,_OLC,_RP,"Token",_CMD,_CA,_EBO],[[0,1],[()=>ObjectLockConfiguration$,{[_hP]:1,[_xN]:_OLC}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xabolt}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],1];PutObjectOutput$=[3,n0,"PutObjectOutput",0,[_E,_ETa,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh,_CT,_SSE,_VI,_SSECA,_SSECKMD,_SSEKMSKI,_SSEKMSEC,_BKE,_Si,_RC],[[0,{[_hH]:_xae}],[0,{[_hH]:_ETa}],[0,{[_hH]:_xacc}],[0,{[_hH]:_xacc_}],[0,{[_hH]:_xacc__}],[0,{[_hH]:_xacs}],[0,{[_hH]:_xacs_}],[0,{[_hH]:_xact}],[0,{[_hH]:_xasse}],[0,{[_hH]:_xavi}],[0,{[_hH]:_xasseca}],[0,{[_hH]:_xasseckM}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[()=>SSEKMSEncryptionContext,{[_hH]:_xassec}],[2,{[_hH]:_xassebke}],[1,{[_hH]:"x-amz-object-size"}],[0,{[_hH]:_xarc}]]];PutObjectRequest$=[3,n0,"PutObjectRequest",0,[_B,_K,"ACL",_Bo,_CC,_CDo,_CEo,_CL,_CLo,_CMD,_CTo,_CA,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh,_Ex,_IM,_INM,_GFC,_GR,_GRACP,_GWACP,"WriteOffsetBytes",_M,_SSE,_SC,_WRL,_SSECA,_SSECK,_SSECKMD,_SSEKMSKI,_SSEKMSEC,_BKE,_RP,_Tag,_OLM,_OLRUD,_OLLHS,_EBO],[[0,1],[0,1],[0,{[_hH]:_xaa}],[()=>StreamingBlob,16],[0,{[_hH]:_CC_}],[0,{[_hH]:_CD_}],[0,{[_hH]:_CE_}],[0,{[_hH]:_CL_}],[1,{[_hH]:_CL__}],[0,{[_hH]:_CM}],[0,{[_hH]:_CT_}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xacc}],[0,{[_hH]:_xacc_}],[0,{[_hH]:_xacc__}],[0,{[_hH]:_xacs}],[0,{[_hH]:_xacs_}],[4,{[_hH]:_Ex}],[0,{[_hH]:_IM_}],[0,{[_hH]:_INM_}],[0,{[_hH]:_xagfc}],[0,{[_hH]:_xagr}],[0,{[_hH]:_xagra}],[0,{[_hH]:_xagwa}],[1,{[_hH]:"x-amz-write-offset-bytes"}],[128,{[_hPH]:_xam}],[0,{[_hH]:_xasse}],[0,{[_hH]:_xasc}],[0,{[_hH]:_xawrl}],[0,{[_hH]:_xasseca}],[()=>SSECustomerKey,{[_hH]:_xasseck}],[0,{[_hH]:_xasseckM}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[()=>SSEKMSEncryptionContext,{[_hH]:_xassec}],[2,{[_hH]:_xassebke}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xat}],[0,{[_hH]:_xaolm}],[5,{[_hH]:_xaolrud}],[0,{[_hH]:_xaollh}],[0,{[_hH]:_xaebo}]],2];PutObjectRetentionOutput$=[3,n0,"PutObjectRetentionOutput",0,[_RC],[[0,{[_hH]:_xarc}]]];PutObjectRetentionRequest$=[3,n0,"PutObjectRetentionRequest",0,[_B,_K,_Ret,_RP,_VI,_BGR,_CMD,_CA,_EBO],[[0,1],[0,1],[()=>ObjectLockRetention$,{[_hP]:1,[_xN]:_Ret}],[0,{[_hH]:_xarp}],[0,{[_hQ]:_vI}],[2,{[_hH]:_xabgr}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];PutObjectTaggingOutput$=[3,n0,"PutObjectTaggingOutput",0,[_VI],[[0,{[_hH]:_xavi}]]];PutObjectTaggingRequest$=[3,n0,"PutObjectTaggingRequest",0,[_B,_K,_Tag,_VI,_CMD,_CA,_EBO,_RP],[[0,1],[0,1],[()=>Tagging$,{[_hP]:1,[_xN]:_Tag}],[0,{[_hQ]:_vI}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xarp}]],3];PutPublicAccessBlockRequest$=[3,n0,"PutPublicAccessBlockRequest",0,[_B,_PABC,_CMD,_CA,_EBO],[[0,1],[()=>PublicAccessBlockConfiguration$,{[_hP]:1,[_xN]:_PABC}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];QueueConfiguration$=[3,n0,_QCue,0,["QueueArn",_Ev,_I,_F],[[0,{[_xN]:"Queue"}],[64,{[_xF]:1,[_xN]:"Event"}],0,[()=>NotificationConfigurationFilter$,0]],2];RecordExpiration$=[3,n0,_REe,0,[_E,_D],[0,1],1];RecordsEvent$=[3,n0,"RecordsEvent",0,["Payload"],[[21,{[_eP]:1}]]];Redirect$=[3,n0,"Redirect",0,["HostName","HttpRedirectCode","Protocol","ReplaceKeyPrefixWith","ReplaceKeyWith"],[0,0,0,0,0]];RedirectAllRequestsTo$=[3,n0,_RART,0,["HostName","Protocol"],[0,0],1];RenameObjectOutput$=[3,n0,"RenameObjectOutput",0,[],[]];RenameObjectRequest$=[3,n0,"RenameObjectRequest",0,[_B,_K,"RenameSource","DestinationIfMatch","DestinationIfNoneMatch","DestinationIfModifiedSince","DestinationIfUnmodifiedSince","SourceIfMatch","SourceIfNoneMatch","SourceIfModifiedSince","SourceIfUnmodifiedSince","ClientToken"],[[0,1],[0,1],[0,{[_hH]:"x-amz-rename-source"}],[0,{[_hH]:_IM_}],[0,{[_hH]:_INM_}],[4,{[_hH]:_IMS_}],[4,{[_hH]:_IUS_}],[0,{[_hH]:"x-amz-rename-source-if-match"}],[0,{[_hH]:"x-amz-rename-source-if-none-match"}],[6,{[_hH]:"x-amz-rename-source-if-modified-since"}],[6,{[_hH]:"x-amz-rename-source-if-unmodified-since"}],[0,{[_hH]:"x-amz-client-token",[_iT]:1}]],3];ReplicaModifications$=[3,n0,_RM,0,[_S],[0],1];ReplicationConfiguration$=[3,n0,_RCe,0,["Role",_R],[0,[()=>ReplicationRules,{[_xF]:1,[_xN]:_Ru}]],2];ReplicationRule$=[3,n0,"ReplicationRule",0,[_S,_Des,"ID","Priority",_P,_F,_SSC,_EOR,_DMR],[0,()=>Destination$,0,1,0,[()=>ReplicationRuleFilter$,0],()=>SourceSelectionCriteria$,()=>ExistingObjectReplication$,()=>DeleteMarkerReplication$],2];ReplicationRuleAndOperator$=[3,n0,"ReplicationRuleAndOperator",0,[_P,_T],[0,[()=>TagSet,{[_xF]:1,[_xN]:_Ta}]]];ReplicationRuleFilter$=[3,n0,"ReplicationRuleFilter",0,[_P,_Ta,"And"],[0,()=>Tag$,[()=>ReplicationRuleAndOperator$,0]]];ReplicationTime$=[3,n0,_RT,0,[_S,"Time"],[0,()=>ReplicationTimeValue$],2];ReplicationTimeValue$=[3,n0,"ReplicationTimeValue",0,["Minutes"],[1]];RequestPaymentConfiguration$=[3,n0,_RPC,0,["Payer"],[0],1];RequestProgress$=[3,n0,_RPe,0,["Enabled"],[2]];RestoreObjectOutput$=[3,n0,"RestoreObjectOutput",0,[_RC,"RestoreOutputPath"],[[0,{[_hH]:_xarc}],[0,{[_hH]:"x-amz-restore-output-path"}]]];RestoreObjectRequest$=[3,n0,"RestoreObjectRequest",0,[_B,_K,_VI,_RRes,_RP,_CA,_EBO],[[0,1],[0,1],[0,{[_hQ]:_vI}],[()=>RestoreRequest$,{[_hP]:1,[_xN]:_RRes}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];RestoreRequest$=[3,n0,_RRes,0,[_D,_GJP,_Ty,"Tier","Description",_SP,_OL],[1,()=>GlacierJobParameters$,0,0,0,()=>SelectParameters$,[()=>OutputLocation$,0]]];RestoreStatus$=[3,n0,_RSe,0,["IsRestoreInProgress","RestoreExpiryDate"],[2,4]];RoutingRule$=[3,n0,"RoutingRule",0,["Redirect","Condition"],[()=>Redirect$,()=>Condition$],1];S3KeyFilter$=[3,n0,"S3KeyFilter",0,["FilterRules"],[[()=>FilterRuleList,{[_xF]:1,[_xN]:_FR}]]];S3Location$=[3,n0,"S3Location",0,["BucketName",_P,_En,"CannedACL",_ACL,_Tag,_UM,_SC],[0,0,[()=>Encryption$,0],0,[()=>Grants,0],[()=>Tagging$,0],[()=>UserMetadata,0],0],2];S3TablesDestination$=[3,n0,_STD,0,[_TBA,_TNa],[0,0],2];S3TablesDestinationResult$=[3,n0,_STDR,0,[_TBA,_TNa,_TA,_TN],[0,0,0,0],4];ScanRange$=[3,n0,"ScanRange",0,["Start","End"],[1,1]];SelectObjectContentOutput$=[3,n0,"SelectObjectContentOutput",0,["Payload"],[[()=>SelectObjectContentEventStream$,16]]];SelectObjectContentRequest$=[3,n0,"SelectObjectContentRequest",0,[_B,_K,"Expression",_ETx,_IS,_OSu,_SSECA,_SSECK,_SSECKMD,_RPe,"ScanRange",_EBO],[[0,1],[0,1],0,0,()=>InputSerialization$,()=>OutputSerialization$,[0,{[_hH]:_xasseca}],[()=>SSECustomerKey,{[_hH]:_xasseck}],[0,{[_hH]:_xasseckM}],()=>RequestProgress$,()=>ScanRange$,[0,{[_hH]:_xaebo}]],6];SelectParameters$=[3,n0,_SP,0,[_IS,_ETx,"Expression",_OSu],[()=>InputSerialization$,0,0,()=>OutputSerialization$],4];ServerSideEncryptionByDefault$=[3,n0,"ServerSideEncryptionByDefault",0,["SSEAlgorithm","KMSMasterKeyID"],[0,[()=>SSEKMSKeyId,0]],1];ServerSideEncryptionConfiguration$=[3,n0,_SSEC,0,[_R],[[()=>ServerSideEncryptionRules,{[_xF]:1,[_xN]:_Ru}]],1];ServerSideEncryptionRule$=[3,n0,"ServerSideEncryptionRule",0,["ApplyServerSideEncryptionByDefault",_BKE,_BET],[[()=>ServerSideEncryptionByDefault$,0],2,[()=>BlockedEncryptionTypes$,0]]];SessionCredentials$=[3,n0,"SessionCredentials",0,["AccessKeyId",_SAK,_ST,_E],[[0,{[_xN]:"AccessKeyId"}],[()=>SessionCredentialValue,{[_xN]:_SAK}],[()=>SessionCredentialValue,{[_xN]:_ST}],[4,{[_xN]:_E}]],4];SimplePrefix$=[3,n0,_SPi,{[_xN]:_SPi},[],[]];SourceSelectionCriteria$=[3,n0,_SSC,0,[_SKEO,_RM],[()=>SseKmsEncryptedObjects$,()=>ReplicaModifications$]];SSEKMS$=[3,n0,"SSEKMS",{[_xN]:_SK},["KeyId"],[[()=>SSEKMSKeyId,0]],1];SseKmsEncryptedObjects$=[3,n0,_SKEO,0,[_S],[0],1];SSEKMSEncryption$=[3,n0,"SSEKMSEncryption",{[_xN]:_SK},["KMSKeyArn",_BKE],[[()=>NonEmptyKmsKeyArnString,0],2],1];SSES3$=[3,n0,"SSES3",{[_xN]:"SSE-S3"},[],[]];Stats$=[3,n0,"Stats",0,[_BS,_BP,_BRy],[1,1,1]];StatsEvent$=[3,n0,"StatsEvent",0,["Details"],[[()=>Stats$,{[_eP]:1}]]];StorageClassAnalysis$=[3,n0,_SCA,0,["DataExport"],[()=>StorageClassAnalysisDataExport$]];StorageClassAnalysisDataExport$=[3,n0,"StorageClassAnalysisDataExport",0,["OutputSchemaVersion",_Des],[0,()=>AnalyticsExportDestination$],2];Tag$=[3,n0,_Ta,0,[_K,_V],[0,0],2];Tagging$=[3,n0,_Tag,0,[_TS],[[()=>TagSet,0]],1];TargetGrant$=[3,n0,"TargetGrant",0,["Grantee",_Pe],[[()=>Grantee$,{[_xNm]:["xsi",_hi]}],0]];TargetObjectKeyFormat$=[3,n0,_TOKF,0,[_SPi,_PP],[[()=>SimplePrefix$,{[_xN]:_SPi}],[()=>PartitionedPrefix$,{[_xN]:_PP}]]];Tiering$=[3,n0,"Tiering",0,[_D,_AT],[1,0],2];TopicConfiguration$=[3,n0,_TCop,0,["TopicArn",_Ev,_I,_F],[[0,{[_xN]:"Topic"}],[64,{[_xF]:1,[_xN]:"Event"}],0,[()=>NotificationConfigurationFilter$,0]],2];Transition$=[3,n0,"Transition",0,["Date",_D,_SC],[5,1,0]];UpdateBucketMetadataInventoryTableConfigurationRequest$=[3,n0,"UpdateBucketMetadataInventoryTableConfigurationRequest",0,[_B,_ITCn,_CMD,_CA,_EBO],[[0,1],[()=>InventoryTableConfigurationUpdates$,{[_hP]:1,[_xN]:_ITCn}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];UpdateBucketMetadataJournalTableConfigurationRequest$=[3,n0,"UpdateBucketMetadataJournalTableConfigurationRequest",0,[_B,_JTC,_CMD,_CA,_EBO],[[0,1],[()=>JournalTableConfigurationUpdates$,{[_hP]:1,[_xN]:_JTC}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];UpdateObjectEncryptionRequest$=[3,n0,"UpdateObjectEncryptionRequest",0,[_B,_K,_OE,_VI,_RP,_EBO,_CMD,_CA],[[0,1],[0,1],[()=>ObjectEncryption$,16],[0,{[_hQ]:_vI}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}]],3];UpdateObjectEncryptionResponse$=[3,n0,"UpdateObjectEncryptionResponse",0,[_RC],[[0,{[_hH]:_xarc}]]];UploadPartCopyOutput$=[3,n0,"UploadPartCopyOutput",0,[_CSVI,_CPR,_SSE,_SSECA,_SSECKMD,_SSEKMSKI,_BKE,_RC],[[0,{[_hH]:_xacsvi}],[()=>CopyPartResult$,16],[0,{[_hH]:_xasse}],[0,{[_hH]:_xasseca}],[0,{[_hH]:_xasseckM}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[2,{[_hH]:_xassebke}],[0,{[_hH]:_xarc}]]];UploadPartCopyRequest$=[3,n0,"UploadPartCopyRequest",0,[_B,_CS,_K,_PN,_UI,_CSIM,_CSIMS,_CSINM,_CSIUS,"CopySourceRange",_SSECA,_SSECK,_SSECKMD,_CSSSECA,_CSSSECK,"CopySourceSSECustomerKeyMD5",_RP,_EBO,_ESBO],[[0,1],[0,{[_hH]:"x-amz-copy-source"}],[0,1],[1,{[_hQ]:_pN}],[0,{[_hQ]:_uI}],[0,{[_hH]:_xacsim}],[4,{[_hH]:_xacsims}],[0,{[_hH]:_xacsinm}],[4,{[_hH]:_xacsius}],[0,{[_hH]:"x-amz-copy-source-range"}],[0,{[_hH]:_xasseca}],[()=>SSECustomerKey,{[_hH]:_xasseck}],[0,{[_hH]:_xasseckM}],[0,{[_hH]:_xacssseca}],[()=>CopySourceSSECustomerKey,{[_hH]:_xacssseck}],[0,{[_hH]:_xacssseckM}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xasebo}]],5];UploadPartOutput$=[3,n0,"UploadPartOutput",0,[_SSE,_ETa,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh,_SSECA,_SSECKMD,_SSEKMSKI,_BKE,_RC],[[0,{[_hH]:_xasse}],[0,{[_hH]:_ETa}],[0,{[_hH]:_xacc}],[0,{[_hH]:_xacc_}],[0,{[_hH]:_xacc__}],[0,{[_hH]:_xacs}],[0,{[_hH]:_xacs_}],[0,{[_hH]:_xasseca}],[0,{[_hH]:_xasseckM}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[2,{[_hH]:_xassebke}],[0,{[_hH]:_xarc}]]];UploadPartRequest$=[3,n0,"UploadPartRequest",0,[_B,_K,_PN,_UI,_Bo,_CLo,_CMD,_CA,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh,_SSECA,_SSECK,_SSECKMD,_RP,_EBO],[[0,1],[0,1],[1,{[_hQ]:_pN}],[0,{[_hQ]:_uI}],[()=>StreamingBlob,16],[1,{[_hH]:_CL__}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xacc}],[0,{[_hH]:_xacc_}],[0,{[_hH]:_xacc__}],[0,{[_hH]:_xacs}],[0,{[_hH]:_xacs_}],[0,{[_hH]:_xasseca}],[()=>SSECustomerKey,{[_hH]:_xasseck}],[0,{[_hH]:_xasseckM}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}]],4];VersioningConfiguration$=[3,n0,_VC,0,["MFADelete",_S],[[0,{[_xN]:"MfaDelete"}],0]];WebsiteConfiguration$=[3,n0,_WC,0,[_EDr,_IDn,_RART,_RR],[()=>ErrorDocument$,()=>IndexDocument$,()=>RedirectAllRequestsTo$,[()=>RoutingRules,0]]];WriteGetObjectResponseRequest$=[3,n0,"WriteGetObjectResponseRequest",0,["RequestRoute","RequestToken",_Bo,"StatusCode","ErrorCode",_EM,_AR,_CC,_CDo,_CEo,_CL,_CLo,_CR,_CTo,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh,_DM,_ETa,_Ex,_E,_LM,_MM,_M,_OLM,_OLLHS,_OLRUD,_PC,_RS,_RC,_Re,_SSE,_SSECA,_SSEKMSKI,_SSECKMD,_SC,_TC,_VI,_BKE],[[0,{[_hL]:1,[_hH]:"x-amz-request-route"}],[0,{[_hH]:"x-amz-request-token"}],[()=>StreamingBlob,16],[1,{[_hH]:"x-amz-fwd-status"}],[0,{[_hH]:"x-amz-fwd-error-code"}],[0,{[_hH]:"x-amz-fwd-error-message"}],[0,{[_hH]:"x-amz-fwd-header-accept-ranges"}],[0,{[_hH]:"x-amz-fwd-header-Cache-Control"}],[0,{[_hH]:"x-amz-fwd-header-Content-Disposition"}],[0,{[_hH]:"x-amz-fwd-header-Content-Encoding"}],[0,{[_hH]:"x-amz-fwd-header-Content-Language"}],[1,{[_hH]:_CL__}],[0,{[_hH]:"x-amz-fwd-header-Content-Range"}],[0,{[_hH]:"x-amz-fwd-header-Content-Type"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-checksum-crc32"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-checksum-crc32c"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-checksum-crc64nvme"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-checksum-sha1"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-checksum-sha256"}],[2,{[_hH]:"x-amz-fwd-header-x-amz-delete-marker"}],[0,{[_hH]:"x-amz-fwd-header-ETag"}],[4,{[_hH]:"x-amz-fwd-header-Expires"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-expiration"}],[4,{[_hH]:"x-amz-fwd-header-Last-Modified"}],[1,{[_hH]:"x-amz-fwd-header-x-amz-missing-meta"}],[128,{[_hPH]:_xam}],[0,{[_hH]:"x-amz-fwd-header-x-amz-object-lock-mode"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-object-lock-legal-hold"}],[5,{[_hH]:"x-amz-fwd-header-x-amz-object-lock-retain-until-date"}],[1,{[_hH]:"x-amz-fwd-header-x-amz-mp-parts-count"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-replication-status"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-request-charged"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-restore"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-server-side-encryption"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-server-side-encryption-customer-algorithm"}],[()=>SSEKMSKeyId,{[_hH]:"x-amz-fwd-header-x-amz-server-side-encryption-aws-kms-key-id"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-server-side-encryption-customer-key-MD5"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-storage-class"}],[1,{[_hH]:"x-amz-fwd-header-x-amz-tagging-count"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-version-id"}],[2,{[_hH]:"x-amz-fwd-header-x-amz-server-side-encryption-bucket-key-enabled"}]],2];AnalyticsConfigurationList=[1,n0,_ACLn,0,[()=>AnalyticsConfiguration$,0]];Buckets=[1,n0,_Bu,0,[()=>Bucket$,{[_xN]:_B}]];CommonPrefixList=[1,n0,"CommonPrefixList",0,()=>CommonPrefix$];CompletedPartList=[1,n0,"CompletedPartList",0,()=>CompletedPart$];CORSRules=[1,n0,"CORSRules",0,[()=>CORSRule$,0]];DeletedObjects=[1,n0,"DeletedObjects",0,()=>DeletedObject$];DeleteMarkers=[1,n0,_DMe,0,()=>DeleteMarkerEntry$];EncryptionTypeList=[1,n0,"EncryptionTypeList",0,[0,{[_xN]:_ET}]];Errors=[1,n0,"Errors",0,()=>_Error$];FilterRuleList=[1,n0,"FilterRuleList",0,()=>FilterRule$];Grants=[1,n0,_G,0,[()=>Grant$,{[_xN]:"Grant"}]];IntelligentTieringConfigurationList=[1,n0,_ITCL,0,[()=>IntelligentTieringConfiguration$,0]];InventoryConfigurationList=[1,n0,_ICL,0,[()=>InventoryConfiguration$,0]];InventoryOptionalFields=[1,n0,"InventoryOptionalFields",0,[0,{[_xN]:"Field"}]];LambdaFunctionConfigurationList=[1,n0,"LambdaFunctionConfigurationList",0,[()=>LambdaFunctionConfiguration$,0]];LifecycleRules=[1,n0,"LifecycleRules",0,[()=>LifecycleRule$,0]];MetricsConfigurationList=[1,n0,_MCL,0,[()=>MetricsConfiguration$,0]];MultipartUploadList=[1,n0,"MultipartUploadList",0,()=>MultipartUpload$];NoncurrentVersionTransitionList=[1,n0,"NoncurrentVersionTransitionList",0,()=>NoncurrentVersionTransition$];ObjectIdentifierList=[1,n0,"ObjectIdentifierList",0,()=>ObjectIdentifier$];ObjectList=[1,n0,"ObjectList",0,[()=>_Object$,0]];ObjectVersionList=[1,n0,"ObjectVersionList",0,[()=>ObjectVersion$,0]];OwnershipControlsRules=[1,n0,"OwnershipControlsRules",0,()=>OwnershipControlsRule$];Parts=[1,n0,_Pa,0,()=>Part$];PartsList=[1,n0,"PartsList",0,()=>ObjectPart$];QueueConfigurationList=[1,n0,"QueueConfigurationList",0,[()=>QueueConfiguration$,0]];ReplicationRules=[1,n0,"ReplicationRules",0,[()=>ReplicationRule$,0]];RoutingRules=[1,n0,_RR,0,[()=>RoutingRule$,{[_xN]:"RoutingRule"}]];ServerSideEncryptionRules=[1,n0,"ServerSideEncryptionRules",0,[()=>ServerSideEncryptionRule$,0]];TagSet=[1,n0,_TS,0,[()=>Tag$,{[_xN]:_Ta}]];TargetGrants=[1,n0,_TG,0,[()=>TargetGrant$,{[_xN]:"Grant"}]];TieringList=[1,n0,"TieringList",0,()=>Tiering$];TopicConfigurationList=[1,n0,"TopicConfigurationList",0,[()=>TopicConfiguration$,0]];TransitionList=[1,n0,"TransitionList",0,()=>Transition$];UserMetadata=[1,n0,_UM,0,[()=>MetadataEntry$,{[_xN]:_ME}]];AnalyticsFilter$=[4,n0,"AnalyticsFilter",0,[_P,_Ta,"And"],[0,()=>Tag$,[()=>AnalyticsAndOperator$,0]]];MetricsFilter$=[4,n0,"MetricsFilter",0,[_P,_Ta,"AccessPointArn","And"],[0,()=>Tag$,0,[()=>MetricsAndOperator$,0]]];ObjectEncryption$=[4,n0,_OE,0,["SSEKMS"],[[()=>SSEKMSEncryption$,{[_xN]:_SK}]]];SelectObjectContentEventStream$=[4,n0,"SelectObjectContentEventStream",{[_st]:1},["Records","Stats","Progress","Cont","End"],[[()=>RecordsEvent$,0],[()=>StatsEvent$,0],[()=>ProgressEvent$,0],()=>ContinuationEvent$,()=>EndEvent$]];AbortMultipartUpload$=[9,n0,"AbortMultipartUpload",{[_h]:["DELETE","/{Key+}?x-id=AbortMultipartUpload",204]},()=>AbortMultipartUploadRequest$,()=>AbortMultipartUploadOutput$];CompleteMultipartUpload$=[9,n0,_CMUo,{[_h]:["POST","/{Key+}",200]},()=>CompleteMultipartUploadRequest$,()=>CompleteMultipartUploadOutput$];CopyObject$=[9,n0,"CopyObject",{[_h]:["PUT","/{Key+}?x-id=CopyObject",200]},()=>CopyObjectRequest$,()=>CopyObjectOutput$];CreateBucket$=[9,n0,"CreateBucket",{[_h]:["PUT","/",200]},()=>CreateBucketRequest$,()=>CreateBucketOutput$];CreateBucketMetadataConfiguration$=[9,n0,"CreateBucketMetadataConfiguration",{[_hC]:"-",[_h]:["POST","/?metadataConfiguration",200]},()=>CreateBucketMetadataConfigurationRequest$,()=>"unit"];CreateBucketMetadataTableConfiguration$=[9,n0,"CreateBucketMetadataTableConfiguration",{[_hC]:"-",[_h]:["POST","/?metadataTable",200]},()=>CreateBucketMetadataTableConfigurationRequest$,()=>"unit"];CreateMultipartUpload$=[9,n0,"CreateMultipartUpload",{[_h]:["POST","/{Key+}?uploads",200]},()=>CreateMultipartUploadRequest$,()=>CreateMultipartUploadOutput$];CreateSession$=[9,n0,"CreateSession",{[_h]:["GET","/?session",200]},()=>CreateSessionRequest$,()=>CreateSessionOutput$];DeleteBucket$=[9,n0,"DeleteBucket",{[_h]:["DELETE","/",204]},()=>DeleteBucketRequest$,()=>"unit"];DeleteBucketAnalyticsConfiguration$=[9,n0,"DeleteBucketAnalyticsConfiguration",{[_h]:["DELETE","/?analytics",204]},()=>DeleteBucketAnalyticsConfigurationRequest$,()=>"unit"];DeleteBucketCors$=[9,n0,"DeleteBucketCors",{[_h]:["DELETE","/?cors",204]},()=>DeleteBucketCorsRequest$,()=>"unit"];DeleteBucketEncryption$=[9,n0,"DeleteBucketEncryption",{[_h]:["DELETE","/?encryption",204]},()=>DeleteBucketEncryptionRequest$,()=>"unit"];DeleteBucketIntelligentTieringConfiguration$=[9,n0,"DeleteBucketIntelligentTieringConfiguration",{[_h]:["DELETE","/?intelligent-tiering",204]},()=>DeleteBucketIntelligentTieringConfigurationRequest$,()=>"unit"];DeleteBucketInventoryConfiguration$=[9,n0,"DeleteBucketInventoryConfiguration",{[_h]:["DELETE","/?inventory",204]},()=>DeleteBucketInventoryConfigurationRequest$,()=>"unit"];DeleteBucketLifecycle$=[9,n0,"DeleteBucketLifecycle",{[_h]:["DELETE","/?lifecycle",204]},()=>DeleteBucketLifecycleRequest$,()=>"unit"];DeleteBucketMetadataConfiguration$=[9,n0,"DeleteBucketMetadataConfiguration",{[_h]:["DELETE","/?metadataConfiguration",204]},()=>DeleteBucketMetadataConfigurationRequest$,()=>"unit"];DeleteBucketMetadataTableConfiguration$=[9,n0,"DeleteBucketMetadataTableConfiguration",{[_h]:["DELETE","/?metadataTable",204]},()=>DeleteBucketMetadataTableConfigurationRequest$,()=>"unit"];DeleteBucketMetricsConfiguration$=[9,n0,"DeleteBucketMetricsConfiguration",{[_h]:["DELETE","/?metrics",204]},()=>DeleteBucketMetricsConfigurationRequest$,()=>"unit"];DeleteBucketOwnershipControls$=[9,n0,"DeleteBucketOwnershipControls",{[_h]:["DELETE","/?ownershipControls",204]},()=>DeleteBucketOwnershipControlsRequest$,()=>"unit"];DeleteBucketPolicy$=[9,n0,"DeleteBucketPolicy",{[_h]:["DELETE","/?policy",204]},()=>DeleteBucketPolicyRequest$,()=>"unit"];DeleteBucketReplication$=[9,n0,"DeleteBucketReplication",{[_h]:["DELETE","/?replication",204]},()=>DeleteBucketReplicationRequest$,()=>"unit"];DeleteBucketTagging$=[9,n0,"DeleteBucketTagging",{[_h]:["DELETE","/?tagging",204]},()=>DeleteBucketTaggingRequest$,()=>"unit"];DeleteBucketWebsite$=[9,n0,"DeleteBucketWebsite",{[_h]:["DELETE","/?website",204]},()=>DeleteBucketWebsiteRequest$,()=>"unit"];DeleteObject$=[9,n0,"DeleteObject",{[_h]:["DELETE","/{Key+}?x-id=DeleteObject",204]},()=>DeleteObjectRequest$,()=>DeleteObjectOutput$];DeleteObjects$=[9,n0,"DeleteObjects",{[_hC]:"-",[_h]:["POST","/?delete",200]},()=>DeleteObjectsRequest$,()=>DeleteObjectsOutput$];DeleteObjectTagging$=[9,n0,"DeleteObjectTagging",{[_h]:["DELETE","/{Key+}?tagging",204]},()=>DeleteObjectTaggingRequest$,()=>DeleteObjectTaggingOutput$];DeletePublicAccessBlock$=[9,n0,"DeletePublicAccessBlock",{[_h]:["DELETE","/?publicAccessBlock",204]},()=>DeletePublicAccessBlockRequest$,()=>"unit"];GetBucketAbac$=[9,n0,"GetBucketAbac",{[_h]:["GET","/?abac",200]},()=>GetBucketAbacRequest$,()=>GetBucketAbacOutput$];GetBucketAccelerateConfiguration$=[9,n0,"GetBucketAccelerateConfiguration",{[_h]:["GET","/?accelerate",200]},()=>GetBucketAccelerateConfigurationRequest$,()=>GetBucketAccelerateConfigurationOutput$];GetBucketAcl$=[9,n0,"GetBucketAcl",{[_h]:["GET","/?acl",200]},()=>GetBucketAclRequest$,()=>GetBucketAclOutput$];GetBucketAnalyticsConfiguration$=[9,n0,"GetBucketAnalyticsConfiguration",{[_h]:["GET","/?analytics&x-id=GetBucketAnalyticsConfiguration",200]},()=>GetBucketAnalyticsConfigurationRequest$,()=>GetBucketAnalyticsConfigurationOutput$];GetBucketCors$=[9,n0,"GetBucketCors",{[_h]:["GET","/?cors",200]},()=>GetBucketCorsRequest$,()=>GetBucketCorsOutput$];GetBucketEncryption$=[9,n0,"GetBucketEncryption",{[_h]:["GET","/?encryption",200]},()=>GetBucketEncryptionRequest$,()=>GetBucketEncryptionOutput$];GetBucketIntelligentTieringConfiguration$=[9,n0,"GetBucketIntelligentTieringConfiguration",{[_h]:["GET","/?intelligent-tiering&x-id=GetBucketIntelligentTieringConfiguration",200]},()=>GetBucketIntelligentTieringConfigurationRequest$,()=>GetBucketIntelligentTieringConfigurationOutput$];GetBucketInventoryConfiguration$=[9,n0,"GetBucketInventoryConfiguration",{[_h]:["GET","/?inventory&x-id=GetBucketInventoryConfiguration",200]},()=>GetBucketInventoryConfigurationRequest$,()=>GetBucketInventoryConfigurationOutput$];GetBucketLifecycleConfiguration$=[9,n0,"GetBucketLifecycleConfiguration",{[_h]:["GET","/?lifecycle",200]},()=>GetBucketLifecycleConfigurationRequest$,()=>GetBucketLifecycleConfigurationOutput$];GetBucketLocation$=[9,n0,"GetBucketLocation",{[_h]:["GET","/?location",200]},()=>GetBucketLocationRequest$,()=>GetBucketLocationOutput$];GetBucketLogging$=[9,n0,"GetBucketLogging",{[_h]:["GET","/?logging",200]},()=>GetBucketLoggingRequest$,()=>GetBucketLoggingOutput$];GetBucketMetadataConfiguration$=[9,n0,"GetBucketMetadataConfiguration",{[_h]:["GET","/?metadataConfiguration",200]},()=>GetBucketMetadataConfigurationRequest$,()=>GetBucketMetadataConfigurationOutput$];GetBucketMetadataTableConfiguration$=[9,n0,"GetBucketMetadataTableConfiguration",{[_h]:["GET","/?metadataTable",200]},()=>GetBucketMetadataTableConfigurationRequest$,()=>GetBucketMetadataTableConfigurationOutput$];GetBucketMetricsConfiguration$=[9,n0,"GetBucketMetricsConfiguration",{[_h]:["GET","/?metrics&x-id=GetBucketMetricsConfiguration",200]},()=>GetBucketMetricsConfigurationRequest$,()=>GetBucketMetricsConfigurationOutput$];GetBucketNotificationConfiguration$=[9,n0,"GetBucketNotificationConfiguration",{[_h]:["GET","/?notification",200]},()=>GetBucketNotificationConfigurationRequest$,()=>NotificationConfiguration$];GetBucketOwnershipControls$=[9,n0,"GetBucketOwnershipControls",{[_h]:["GET","/?ownershipControls",200]},()=>GetBucketOwnershipControlsRequest$,()=>GetBucketOwnershipControlsOutput$];GetBucketPolicy$=[9,n0,"GetBucketPolicy",{[_h]:["GET","/?policy",200]},()=>GetBucketPolicyRequest$,()=>GetBucketPolicyOutput$];GetBucketPolicyStatus$=[9,n0,"GetBucketPolicyStatus",{[_h]:["GET","/?policyStatus",200]},()=>GetBucketPolicyStatusRequest$,()=>GetBucketPolicyStatusOutput$];GetBucketReplication$=[9,n0,"GetBucketReplication",{[_h]:["GET","/?replication",200]},()=>GetBucketReplicationRequest$,()=>GetBucketReplicationOutput$];GetBucketRequestPayment$=[9,n0,"GetBucketRequestPayment",{[_h]:["GET","/?requestPayment",200]},()=>GetBucketRequestPaymentRequest$,()=>GetBucketRequestPaymentOutput$];GetBucketTagging$=[9,n0,"GetBucketTagging",{[_h]:["GET","/?tagging",200]},()=>GetBucketTaggingRequest$,()=>GetBucketTaggingOutput$];GetBucketVersioning$=[9,n0,"GetBucketVersioning",{[_h]:["GET","/?versioning",200]},()=>GetBucketVersioningRequest$,()=>GetBucketVersioningOutput$];GetBucketWebsite$=[9,n0,"GetBucketWebsite",{[_h]:["GET","/?website",200]},()=>GetBucketWebsiteRequest$,()=>GetBucketWebsiteOutput$];GetObject$=[9,n0,"GetObject",{[_hC]:"-",[_h]:["GET","/{Key+}?x-id=GetObject",200]},()=>GetObjectRequest$,()=>GetObjectOutput$];GetObjectAcl$=[9,n0,"GetObjectAcl",{[_h]:["GET","/{Key+}?acl",200]},()=>GetObjectAclRequest$,()=>GetObjectAclOutput$];GetObjectAttributes$=[9,n0,"GetObjectAttributes",{[_h]:["GET","/{Key+}?attributes",200]},()=>GetObjectAttributesRequest$,()=>GetObjectAttributesOutput$];GetObjectLegalHold$=[9,n0,"GetObjectLegalHold",{[_h]:["GET","/{Key+}?legal-hold",200]},()=>GetObjectLegalHoldRequest$,()=>GetObjectLegalHoldOutput$];GetObjectLockConfiguration$=[9,n0,"GetObjectLockConfiguration",{[_h]:["GET","/?object-lock",200]},()=>GetObjectLockConfigurationRequest$,()=>GetObjectLockConfigurationOutput$];GetObjectRetention$=[9,n0,"GetObjectRetention",{[_h]:["GET","/{Key+}?retention",200]},()=>GetObjectRetentionRequest$,()=>GetObjectRetentionOutput$];GetObjectTagging$=[9,n0,"GetObjectTagging",{[_h]:["GET","/{Key+}?tagging",200]},()=>GetObjectTaggingRequest$,()=>GetObjectTaggingOutput$];GetObjectTorrent$=[9,n0,"GetObjectTorrent",{[_h]:["GET","/{Key+}?torrent",200]},()=>GetObjectTorrentRequest$,()=>GetObjectTorrentOutput$];GetPublicAccessBlock$=[9,n0,"GetPublicAccessBlock",{[_h]:["GET","/?publicAccessBlock",200]},()=>GetPublicAccessBlockRequest$,()=>GetPublicAccessBlockOutput$];HeadBucket$=[9,n0,"HeadBucket",{[_h]:["HEAD","/",200]},()=>HeadBucketRequest$,()=>HeadBucketOutput$];HeadObject$=[9,n0,"HeadObject",{[_h]:["HEAD","/{Key+}",200]},()=>HeadObjectRequest$,()=>HeadObjectOutput$];ListBucketAnalyticsConfigurations$=[9,n0,"ListBucketAnalyticsConfigurations",{[_h]:["GET","/?analytics&x-id=ListBucketAnalyticsConfigurations",200]},()=>ListBucketAnalyticsConfigurationsRequest$,()=>ListBucketAnalyticsConfigurationsOutput$];ListBucketIntelligentTieringConfigurations$=[9,n0,"ListBucketIntelligentTieringConfigurations",{[_h]:["GET","/?intelligent-tiering&x-id=ListBucketIntelligentTieringConfigurations",200]},()=>ListBucketIntelligentTieringConfigurationsRequest$,()=>ListBucketIntelligentTieringConfigurationsOutput$];ListBucketInventoryConfigurations$=[9,n0,"ListBucketInventoryConfigurations",{[_h]:["GET","/?inventory&x-id=ListBucketInventoryConfigurations",200]},()=>ListBucketInventoryConfigurationsRequest$,()=>ListBucketInventoryConfigurationsOutput$];ListBucketMetricsConfigurations$=[9,n0,"ListBucketMetricsConfigurations",{[_h]:["GET","/?metrics&x-id=ListBucketMetricsConfigurations",200]},()=>ListBucketMetricsConfigurationsRequest$,()=>ListBucketMetricsConfigurationsOutput$];ListBuckets$=[9,n0,"ListBuckets",{[_h]:["GET","/?x-id=ListBuckets",200]},()=>ListBucketsRequest$,()=>ListBucketsOutput$];ListDirectoryBuckets$=[9,n0,"ListDirectoryBuckets",{[_h]:["GET","/?x-id=ListDirectoryBuckets",200]},()=>ListDirectoryBucketsRequest$,()=>ListDirectoryBucketsOutput$];ListMultipartUploads$=[9,n0,"ListMultipartUploads",{[_h]:["GET","/?uploads",200]},()=>ListMultipartUploadsRequest$,()=>ListMultipartUploadsOutput$];ListObjects$=[9,n0,"ListObjects",{[_h]:["GET","/",200]},()=>ListObjectsRequest$,()=>ListObjectsOutput$];ListObjectsV2$=[9,n0,"ListObjectsV2",{[_h]:["GET","/?list-type=2",200]},()=>ListObjectsV2Request$,()=>ListObjectsV2Output$];ListObjectVersions$=[9,n0,"ListObjectVersions",{[_h]:["GET","/?versions",200]},()=>ListObjectVersionsRequest$,()=>ListObjectVersionsOutput$];ListParts$=[9,n0,"ListParts",{[_h]:["GET","/{Key+}?x-id=ListParts",200]},()=>ListPartsRequest$,()=>ListPartsOutput$];PutBucketAbac$=[9,n0,"PutBucketAbac",{[_hC]:"-",[_h]:["PUT","/?abac",200]},()=>PutBucketAbacRequest$,()=>"unit"];PutBucketAccelerateConfiguration$=[9,n0,"PutBucketAccelerateConfiguration",{[_hC]:"-",[_h]:["PUT","/?accelerate",200]},()=>PutBucketAccelerateConfigurationRequest$,()=>"unit"];PutBucketAcl$=[9,n0,"PutBucketAcl",{[_hC]:"-",[_h]:["PUT","/?acl",200]},()=>PutBucketAclRequest$,()=>"unit"];PutBucketAnalyticsConfiguration$=[9,n0,"PutBucketAnalyticsConfiguration",{[_h]:["PUT","/?analytics",200]},()=>PutBucketAnalyticsConfigurationRequest$,()=>"unit"];PutBucketCors$=[9,n0,"PutBucketCors",{[_hC]:"-",[_h]:["PUT","/?cors",200]},()=>PutBucketCorsRequest$,()=>"unit"];PutBucketEncryption$=[9,n0,"PutBucketEncryption",{[_hC]:"-",[_h]:["PUT","/?encryption",200]},()=>PutBucketEncryptionRequest$,()=>"unit"];PutBucketIntelligentTieringConfiguration$=[9,n0,"PutBucketIntelligentTieringConfiguration",{[_h]:["PUT","/?intelligent-tiering",200]},()=>PutBucketIntelligentTieringConfigurationRequest$,()=>"unit"];PutBucketInventoryConfiguration$=[9,n0,"PutBucketInventoryConfiguration",{[_h]:["PUT","/?inventory",200]},()=>PutBucketInventoryConfigurationRequest$,()=>"unit"];PutBucketLifecycleConfiguration$=[9,n0,"PutBucketLifecycleConfiguration",{[_hC]:"-",[_h]:["PUT","/?lifecycle",200]},()=>PutBucketLifecycleConfigurationRequest$,()=>PutBucketLifecycleConfigurationOutput$];PutBucketLogging$=[9,n0,"PutBucketLogging",{[_hC]:"-",[_h]:["PUT","/?logging",200]},()=>PutBucketLoggingRequest$,()=>"unit"];PutBucketMetricsConfiguration$=[9,n0,"PutBucketMetricsConfiguration",{[_h]:["PUT","/?metrics",200]},()=>PutBucketMetricsConfigurationRequest$,()=>"unit"];PutBucketNotificationConfiguration$=[9,n0,"PutBucketNotificationConfiguration",{[_h]:["PUT","/?notification",200]},()=>PutBucketNotificationConfigurationRequest$,()=>"unit"];PutBucketOwnershipControls$=[9,n0,"PutBucketOwnershipControls",{[_hC]:"-",[_h]:["PUT","/?ownershipControls",200]},()=>PutBucketOwnershipControlsRequest$,()=>"unit"];PutBucketPolicy$=[9,n0,"PutBucketPolicy",{[_hC]:"-",[_h]:["PUT","/?policy",200]},()=>PutBucketPolicyRequest$,()=>"unit"];PutBucketReplication$=[9,n0,"PutBucketReplication",{[_hC]:"-",[_h]:["PUT","/?replication",200]},()=>PutBucketReplicationRequest$,()=>"unit"];PutBucketRequestPayment$=[9,n0,"PutBucketRequestPayment",{[_hC]:"-",[_h]:["PUT","/?requestPayment",200]},()=>PutBucketRequestPaymentRequest$,()=>"unit"];PutBucketTagging$=[9,n0,"PutBucketTagging",{[_hC]:"-",[_h]:["PUT","/?tagging",200]},()=>PutBucketTaggingRequest$,()=>"unit"];PutBucketVersioning$=[9,n0,"PutBucketVersioning",{[_hC]:"-",[_h]:["PUT","/?versioning",200]},()=>PutBucketVersioningRequest$,()=>"unit"];PutBucketWebsite$=[9,n0,"PutBucketWebsite",{[_hC]:"-",[_h]:["PUT","/?website",200]},()=>PutBucketWebsiteRequest$,()=>"unit"];PutObject$=[9,n0,"PutObject",{[_hC]:"-",[_h]:["PUT","/{Key+}?x-id=PutObject",200]},()=>PutObjectRequest$,()=>PutObjectOutput$];PutObjectAcl$=[9,n0,"PutObjectAcl",{[_hC]:"-",[_h]:["PUT","/{Key+}?acl",200]},()=>PutObjectAclRequest$,()=>PutObjectAclOutput$];PutObjectLegalHold$=[9,n0,"PutObjectLegalHold",{[_hC]:"-",[_h]:["PUT","/{Key+}?legal-hold",200]},()=>PutObjectLegalHoldRequest$,()=>PutObjectLegalHoldOutput$];PutObjectLockConfiguration$=[9,n0,"PutObjectLockConfiguration",{[_hC]:"-",[_h]:["PUT","/?object-lock",200]},()=>PutObjectLockConfigurationRequest$,()=>PutObjectLockConfigurationOutput$];PutObjectRetention$=[9,n0,"PutObjectRetention",{[_hC]:"-",[_h]:["PUT","/{Key+}?retention",200]},()=>PutObjectRetentionRequest$,()=>PutObjectRetentionOutput$];PutObjectTagging$=[9,n0,"PutObjectTagging",{[_hC]:"-",[_h]:["PUT","/{Key+}?tagging",200]},()=>PutObjectTaggingRequest$,()=>PutObjectTaggingOutput$];PutPublicAccessBlock$=[9,n0,"PutPublicAccessBlock",{[_hC]:"-",[_h]:["PUT","/?publicAccessBlock",200]},()=>PutPublicAccessBlockRequest$,()=>"unit"];RenameObject$=[9,n0,"RenameObject",{[_h]:["PUT","/{Key+}?renameObject",200]},()=>RenameObjectRequest$,()=>RenameObjectOutput$];RestoreObject$=[9,n0,"RestoreObject",{[_hC]:"-",[_h]:["POST","/{Key+}?restore",200]},()=>RestoreObjectRequest$,()=>RestoreObjectOutput$];SelectObjectContent$=[9,n0,"SelectObjectContent",{[_h]:["POST","/{Key+}?select&select-type=2",200]},()=>SelectObjectContentRequest$,()=>SelectObjectContentOutput$];UpdateBucketMetadataInventoryTableConfiguration$=[9,n0,"UpdateBucketMetadataInventoryTableConfiguration",{[_hC]:"-",[_h]:["PUT","/?metadataInventoryTable",200]},()=>UpdateBucketMetadataInventoryTableConfigurationRequest$,()=>"unit"];UpdateBucketMetadataJournalTableConfiguration$=[9,n0,"UpdateBucketMetadataJournalTableConfiguration",{[_hC]:"-",[_h]:["PUT","/?metadataJournalTable",200]},()=>UpdateBucketMetadataJournalTableConfigurationRequest$,()=>"unit"];UpdateObjectEncryption$=[9,n0,"UpdateObjectEncryption",{[_hC]:"-",[_h]:["PUT","/{Key+}?encryption",200]},()=>UpdateObjectEncryptionRequest$,()=>UpdateObjectEncryptionResponse$];UploadPart$=[9,n0,"UploadPart",{[_hC]:"-",[_h]:["PUT","/{Key+}?x-id=UploadPart",200]},()=>UploadPartRequest$,()=>UploadPartOutput$];UploadPartCopy$=[9,n0,"UploadPartCopy",{[_h]:["PUT","/{Key+}?x-id=UploadPartCopy",200]},()=>UploadPartCopyRequest$,()=>UploadPartCopyOutput$];WriteGetObjectResponse$=[9,n0,"WriteGetObjectResponse",{[_en]:["{RequestRoute}."],[_h]:["POST","/WriteGetObjectResponse",200]},()=>WriteGetObjectResponseRequest$,()=>"unit"];CreateSessionCommand=class extends(Command.classBuilder().ep({...commonParams,DisableS3ExpressSessionAuth:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","CreateSession",{}).n("S3Client","CreateSessionCommand").sc(CreateSession$).build()){};fromUtf84=input=>(new TextEncoder).encode(input);SHA_1_HMAC_ALGO={name:"HMAC",hash:SHA_1_HASH={name:"SHA-1"}};EMPTY_DATA_SHA_1=new Uint8Array([218,57,163,238,94,107,75,13,50,85,191,239,149,96,24,144,175,216,7,9]);fallbackWindow={};Sha1=function(){function Sha13(secret){this.toHash=new Uint8Array(0);if(void 0!==secret){this.key=new Promise(function(resolve,reject){locateWindow().crypto.subtle.importKey("raw",convertToBuffer2(secret),SHA_1_HMAC_ALGO,!1,["sign"]).then(resolve,reject)});this.key.catch(function(){})}}Sha13.prototype.update=function(data){var update2,typedArray;if(!isEmptyData2(data)){update2=convertToBuffer2(data);(typedArray=new Uint8Array(this.toHash.byteLength+update2.byteLength)).set(this.toHash,0);typedArray.set(update2,this.toHash.byteLength);this.toHash=typedArray}};Sha13.prototype.digest=function(){var _this=this;return this.key?this.key.then(function(key3){return locateWindow().crypto.subtle.sign(SHA_1_HMAC_ALGO,key3,_this.toHash).then(function(data){return new Uint8Array(data)})}):isEmptyData2(this.toHash)?Promise.resolve(EMPTY_DATA_SHA_1):Promise.resolve().then(function(){return locateWindow().crypto.subtle.digest(SHA_1_HASH,_this.toHash)}).then(function(data){return Promise.resolve(new Uint8Array(data))})};Sha13.prototype.reset=function(){this.toHash=new Uint8Array(0)};return Sha13}();subtleCryptoMethods=["decrypt","digest","encrypt","exportKey","generateKey","importKey","sign","verify"];Sha12=function(){function Sha13(secret){if(!supportsWebCrypto(locateWindow()))throw new Error("SHA1 not supported");this.hash=new Sha1(secret)}Sha13.prototype.update=function(data,encoding){this.hash.update(convertToBuffer(data))};Sha13.prototype.digest=function(){return this.hash.digest()};Sha13.prototype.reset=function(){this.hash.reset()};return Sha13}();SHA_256_HMAC_ALGO={name:"HMAC",hash:SHA_256_HASH={name:"SHA-256"}};EMPTY_DATA_SHA_256=new Uint8Array([227,176,196,66,152,252,28,20,154,251,244,200,153,111,185,36,39,174,65,228,100,155,147,76,164,149,153,27,120,82,184,85]);Sha256=function(){function Sha2564(secret){this.toHash=new Uint8Array(0);this.secret=secret;this.reset()}Sha2564.prototype.update=function(data){var update2,typedArray;if(!isEmptyData(data)){update2=convertToBuffer(data);(typedArray=new Uint8Array(this.toHash.byteLength+update2.byteLength)).set(this.toHash,0);typedArray.set(update2,this.toHash.byteLength);this.toHash=typedArray}};Sha2564.prototype.digest=function(){var _this=this;return this.key?this.key.then(function(key3){return locateWindow().crypto.subtle.sign(SHA_256_HMAC_ALGO,key3,_this.toHash).then(function(data){return new Uint8Array(data)})}):isEmptyData(this.toHash)?Promise.resolve(EMPTY_DATA_SHA_256):Promise.resolve().then(function(){return locateWindow().crypto.subtle.digest(SHA_256_HASH,_this.toHash)}).then(function(data){return Promise.resolve(new Uint8Array(data))})};Sha2564.prototype.reset=function(){var _this=this;this.toHash=new Uint8Array(0);if(this.secret&&void 0!==this.secret){this.key=new Promise(function(resolve,reject){locateWindow().crypto.subtle.importKey("raw",convertToBuffer(_this.secret),SHA_256_HMAC_ALGO,!1,["sign"]).then(resolve,reject)});this.key.catch(function(){})}};return Sha2564}();BLOCK_SIZE=64;KEY=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);INIT=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225];MAX_HASHABLE_LENGTH=Math.pow(2,53)-1;RawSha256=function(){function RawSha2562(){this.state=Int32Array.from(INIT);this.temp=new Int32Array(64);this.buffer=new Uint8Array(64);this.bufferLength=0;this.bytesHashed=0;this.finished=!1}RawSha2562.prototype.update=function(data){var position,byteLength;if(this.finished)throw new Error("Attempted to update an already finished hash.");position=0;byteLength=data.byteLength;this.bytesHashed+=byteLength;if(8*this.bytesHashed>MAX_HASHABLE_LENGTH)throw new Error("Cannot hash more than 2^53 - 1 bits");for(;byteLength>0;){this.buffer[this.bufferLength++]=data[position++];byteLength--;if(this.bufferLength===BLOCK_SIZE){this.hashBuffer();this.bufferLength=0}}};RawSha2562.prototype.digest=function(){var bitsHashed,bufferView,undecoratedLength,i2,out;if(!this.finished){bitsHashed=8*this.bytesHashed;bufferView=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength);undecoratedLength=this.bufferLength;bufferView.setUint8(this.bufferLength++,128);if(undecoratedLength%BLOCK_SIZE>=BLOCK_SIZE-8){for(i2=this.bufferLength;i2>>24&255;out[4*i2+1]=this.state[i2]>>>16&255;out[4*i2+2]=this.state[i2]>>>8&255;out[4*i2+3]=this.state[i2]>>>0&255}return out};RawSha2562.prototype.hashBuffer=function(){var i2,u2,t1_1,t2_1,t12,t22,buffer=this.buffer,state2=this.state,state0=state2[0],state1=state2[1],state22=state2[2],state3=state2[3],state4=state2[4],state5=state2[5],state6=state2[6],state7=state2[7];for(i2=0;i2>>17|u2<<15)^(u2>>>19|u2<<13)^u2>>>10;t2_1=((u2=this.temp[i2-15])>>>7|u2<<25)^(u2>>>18|u2<<14)^u2>>>3;this.temp[i2]=(t1_1+this.temp[i2-7]|0)+(t2_1+this.temp[i2-16]|0)}t12=(((state4>>>6|state4<<26)^(state4>>>11|state4<<21)^(state4>>>25|state4<<7))+(state4&state5^~state4&state6)|0)+(state7+(KEY[i2]+this.temp[i2]|0)|0)|0;t22=((state0>>>2|state0<<30)^(state0>>>13|state0<<19)^(state0>>>22|state0<<10))+(state0&state1^state0&state22^state1&state22)|0;state7=state6;state6=state5;state5=state4;state4=state3+t12|0;state3=state22;state22=state1;state1=state0;state0=t12+t22|0}state2[0]+=state0;state2[1]+=state1;state2[2]+=state22;state2[3]+=state3;state2[4]+=state4;state2[5]+=state5;state2[6]+=state6;state2[7]+=state7};return RawSha2562}();Sha2562=function(){function Sha2564(secret){this.secret=secret;this.hash=new RawSha256;this.reset()}Sha2564.prototype.update=function(toHash){if(!isEmptyData(toHash)&&!this.error)try{this.hash.update(convertToBuffer(toHash))}catch(e3){this.error=e3}};Sha2564.prototype.digestSync=function(){if(this.error)throw this.error;if(this.outer){this.outer.finished||this.outer.update(this.hash.digest());return this.outer.digest()}return this.hash.digest()};Sha2564.prototype.digest=function(){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(_a8){return[2,this.digestSync()]})})};Sha2564.prototype.reset=function(){var inner,outer,i2;this.hash=new RawSha256;if(this.secret){this.outer=new RawSha256;inner=bufferFromSecret(this.secret);(outer=new Uint8Array(BLOCK_SIZE)).set(inner);for(i2=0;i2async config=>{var _a8,_b5,_c3,_d2,_e2,_f,_g,_h2,_i2,_j;const navigator2="undefined"!=typeof window?window.navigator:void 0,uaString=null!=(_a8=null==navigator2?void 0:navigator2.userAgent)?_a8:"",osName=null!=(_d2=null!=(_c3=null==(_b5=null==navigator2?void 0:navigator2.userAgentData)?void 0:_b5.platform)?_c3:fallback2.os(uaString))?_d2:"other",brands=null!=(_f=null==(_e2=null==navigator2?void 0:navigator2.userAgentData)?void 0:_e2.brands)?_f:[],brand=brands[brands.length-1],browserName=null!=(_h2=null!=(_g=null==brand?void 0:brand.brand)?_g:fallback2.browser(uaString))?_h2:"unknown",browserVersion=null!=(_i2=null==brand?void 0:brand.version)?_i2:"unknown",sections=[["aws-sdk-js",clientVersion],["ua","2.1"],[`os/${osName}`,void 0],["lang/js"],["md/browser",`${browserName}_${browserVersion}`]];serviceId&§ions.push([`api/${serviceId}`,clientVersion]);const appId=await(null==(_j=null==config?void 0:config.userAgentAppId)?void 0:_j.call(config));appId&§ions.push([`app/${appId}`]);return sections};fallback2={os:ua=>/iPhone|iPad|iPod/.test(ua)?"iOS":/Macintosh|Mac OS X/.test(ua)?"macOS":/Windows NT/.test(ua)?"Windows":/Android/.test(ua)?"Android":/Linux/.test(ua)?"Linux":void 0,browser:ua=>/EdgiOS|EdgA|Edg\//.test(ua)?"Microsoft Edge":/Firefox\//.test(ua)?"Firefox":/Chrome\//.test(ua)?"Chrome":/Safari\//.test(ua)?"Safari":void 0};Int642=class _Int64{constructor(bytes){__publicField(this,"bytes");this.bytes=bytes;if(8!==bytes.byteLength)throw new Error("Int64 buffers must be exactly 8 bytes")}static fromNumber(number){if(number>0x8000000000000000||number<-0x8000000000000000)throw new Error(`${number} is too large (or, if negative, too small) to represent as an Int64`);const bytes=new Uint8Array(8);for(let i2=7,remaining=Math.abs(Math.round(number));i2>-1&&remaining>0;i2--,remaining/=256)bytes[i2]=remaining;number<0&&negate2(bytes);return new _Int64(bytes)}valueOf(){const bytes=this.bytes.slice(0),negative=128&bytes[0];negative&&negate2(bytes);return parseInt(toHex2(bytes),16)*(negative?-1:1)}toString(){return String(this.valueOf())}};HeaderMarshaller=class{constructor(toUtf82,fromUtf85){__publicField(this,"toUtf8");__publicField(this,"fromUtf8");this.toUtf8=toUtf82;this.fromUtf8=fromUtf85}format(headers){const chunks=[];for(const headerName of Object.keys(headers)){const bytes=this.fromUtf8(headerName);chunks.push(Uint8Array.from([bytes.byteLength]),bytes,this.formatHeaderValue(headers[headerName]))}const out=new Uint8Array(chunks.reduce((carry,bytes)=>carry+bytes.byteLength,0));let position=0;for(const chunk of chunks){out.set(chunk,position);position+=chunk.byteLength}return out}formatHeaderValue(header){switch(header.type){case"boolean":return Uint8Array.from([header.value?0:1]);case"byte":return Uint8Array.from([2,header.value]);case"short":const shortView=new DataView(new ArrayBuffer(3));shortView.setUint8(0,3);shortView.setInt16(1,header.value,!1);return new Uint8Array(shortView.buffer);case"integer":const intView=new DataView(new ArrayBuffer(5));intView.setUint8(0,4);intView.setInt32(1,header.value,!1);return new Uint8Array(intView.buffer);case"long":const longBytes=new Uint8Array(9);longBytes[0]=5;longBytes.set(header.value.bytes,1);return longBytes;case"binary":const binView=new DataView(new ArrayBuffer(3+header.value.byteLength));binView.setUint8(0,6);binView.setUint16(1,header.value.byteLength,!1);const binBytes=new Uint8Array(binView.buffer);binBytes.set(header.value,3);return binBytes;case"string":const utf8Bytes=this.fromUtf8(header.value),strView=new DataView(new ArrayBuffer(3+utf8Bytes.byteLength));strView.setUint8(0,7);strView.setUint16(1,utf8Bytes.byteLength,!1);const strBytes=new Uint8Array(strView.buffer);strBytes.set(utf8Bytes,3);return strBytes;case"timestamp":const tsBytes=new Uint8Array(9);tsBytes[0]=8;tsBytes.set(Int642.fromNumber(header.value.valueOf()).bytes,1);return tsBytes;case"uuid":if(!UUID_PATTERN2.test(header.value))throw new Error(`Invalid UUID received: ${header.value}`);const uuidBytes=new Uint8Array(17);uuidBytes[0]=9;uuidBytes.set(fromHex(header.value.replace(/\-/g,"")),1);return uuidBytes}}parse(headers){const out={};let position=0;for(;positionmessage,isEndOfStream:()=>isEndOfStream}}getAvailableMessages(){const messages=this.messageBuffer;this.messageBuffer=[];const isEndOfStream=this.isEndOfStream;return{getMessages:()=>messages,isEndOfStream:()=>isEndOfStream}}encode({headers:rawHeaders,body}){const headers=this.headerMarshaller.format(rawHeaders),length=headers.byteLength+body.byteLength+16,out=new Uint8Array(length),view=new DataView(out.buffer,out.byteOffset,out.byteLength),checksum=new Crc32;view.setUint32(0,length,!1);view.setUint32(4,headers.byteLength,!1);view.setUint32(8,checksum.update(out.subarray(0,8)).digest(),!1);out.set(headers,12);out.set(body,headers.byteLength+12);view.setUint32(length-4,checksum.update(out.subarray(8,length-4)).digest(),!1);return out}decode(message){const{headers,body}=splitMessage(message);return{headers:this.headerMarshaller.parse(headers),body}}formatHeaders(rawHeaders){return this.headerMarshaller.format(rawHeaders)}};MessageDecoderStream=class{constructor(options){__publicField(this,"options");this.options=options}[Symbol.asyncIterator](){return this.asyncIterator()}async*asyncIterator(){for await(const bytes of this.options.inputStream){const decoded=this.options.decoder.decode(bytes);yield decoded}}};MessageEncoderStream=class{constructor(options){__publicField(this,"options");this.options=options}[Symbol.asyncIterator](){return this.asyncIterator()}async*asyncIterator(){for await(const msg of this.options.messageStream){const encoded=this.options.encoder.encode(msg);yield encoded}this.options.includeEndFrame&&(yield new Uint8Array(0))}};SmithyMessageDecoderStream=class{constructor(options){__publicField(this,"options");this.options=options}[Symbol.asyncIterator](){return this.asyncIterator()}async*asyncIterator(){for await(const message of this.options.messageStream){const deserialized=await this.options.deserializer(message);void 0!==deserialized&&(yield deserialized)}}};SmithyMessageEncoderStream=class{constructor(options){__publicField(this,"options");this.options=options}[Symbol.asyncIterator](){return this.asyncIterator()}async*asyncIterator(){for await(const chunk of this.options.inputStream){const payloadBuf=this.options.serializer(chunk);yield payloadBuf}}};EventStreamMarshaller=class{constructor({utf8Encoder,utf8Decoder}){__publicField(this,"eventStreamCodec");__publicField(this,"utfEncoder");this.eventStreamCodec=new EventStreamCodec(utf8Encoder,utf8Decoder);this.utfEncoder=utf8Encoder}deserialize(body,deserializer){const inputStream=getChunkedStream(body);return new SmithyMessageDecoderStream({messageStream:new MessageDecoderStream({inputStream,decoder:this.eventStreamCodec}),deserializer:getMessageUnmarshaller(deserializer,this.utfEncoder)})}serialize(inputStream,serializer){return new MessageEncoderStream({messageStream:new SmithyMessageEncoderStream({inputStream,serializer}),encoder:this.eventStreamCodec,includeEndFrame:!0})}};readableStreamtoIterable=readableStream=>({[Symbol.asyncIterator]:async function*(){const reader=readableStream.getReader();try{for(;;){const{done,value}=await reader.read();if(done)return;yield value}}finally{reader.releaseLock()}}});iterableToReadableStream=asyncIterable=>{const iterator=asyncIterable[Symbol.asyncIterator]();return new ReadableStream({async pull(controller){const{done,value}=await iterator.next();if(done)return controller.close();controller.enqueue(value)}})};EventStreamMarshaller2=class{constructor({utf8Encoder,utf8Decoder}){__publicField(this,"universalMarshaller");this.universalMarshaller=new EventStreamMarshaller({utf8Decoder,utf8Encoder})}deserialize(body,deserializer){const bodyIterable=isReadableStream2(body)?readableStreamtoIterable(body):body;return this.universalMarshaller.deserialize(bodyIterable,deserializer)}serialize(input,serializer){const serialziedIterable=this.universalMarshaller.serialize(input,serializer);return"function"==typeof ReadableStream?iterableToReadableStream(serialziedIterable):serialziedIterable}};isReadableStream2=body=>"function"==typeof ReadableStream&&body instanceof ReadableStream;eventStreamSerdeProvider=options=>new EventStreamMarshaller2(options);blobHasher=async function blobHasher2(hashCtor,blob){const hash3=new hashCtor;await blobReader(blob,chunk=>{hash3.update(chunk)});return hash3.digest()};invalidProvider=message=>()=>Promise.reject(message);INIT2=[1732584193,4023233417,2562383102,271733878];init_dist_es();Md5=class{constructor(){__publicField(this,"state");__publicField(this,"buffer");__publicField(this,"bufferLength");__publicField(this,"bytesHashed");__publicField(this,"finished");this.reset()}update(sourceData){if(isEmptyData3(sourceData))return;if(this.finished)throw new Error("Attempted to update an already finished hash.");const data=convertToBuffer3(sourceData);let position=0,{byteLength}=data;this.bytesHashed+=byteLength;for(;byteLength>0;){this.buffer.setUint8(this.bufferLength++,data[position++]);byteLength--;if(64===this.bufferLength){this.hashBuffer();this.bufferLength=0}}}async digest(){if(!this.finished){const{buffer,bufferLength:undecoratedLength,bytesHashed}=this,bitsHashed=8*bytesHashed;buffer.setUint8(this.bufferLength++,128);if(undecoratedLength%64>=56){for(let i2=this.bufferLength;i2<64;i2++)buffer.setUint8(i2,0);this.hashBuffer();this.bufferLength=0}for(let i2=this.bufferLength;i2<56;i2++)buffer.setUint8(i2,0);buffer.setUint32(56,bitsHashed>>>0,!0);buffer.setUint32(60,Math.floor(bitsHashed/4294967296),!0);this.hashBuffer();this.finished=!0}const out=new DataView(new ArrayBuffer(16));for(let i2=0;i2<4;i2++)out.setUint32(4*i2,this.state[i2],!0);return new Uint8Array(out.buffer,out.byteOffset,out.byteLength)}hashBuffer(){const{buffer,state:state2}=this;let a2=state2[0],b3=state2[1],c3=state2[2],d4=state2[3];a2=ff(a2,b3,c3,d4,buffer.getUint32(0,!0),7,3614090360);d4=ff(d4,a2,b3,c3,buffer.getUint32(4,!0),12,3905402710);c3=ff(c3,d4,a2,b3,buffer.getUint32(8,!0),17,606105819);b3=ff(b3,c3,d4,a2,buffer.getUint32(12,!0),22,3250441966);a2=ff(a2,b3,c3,d4,buffer.getUint32(16,!0),7,4118548399);d4=ff(d4,a2,b3,c3,buffer.getUint32(20,!0),12,1200080426);c3=ff(c3,d4,a2,b3,buffer.getUint32(24,!0),17,2821735955);b3=ff(b3,c3,d4,a2,buffer.getUint32(28,!0),22,4249261313);a2=ff(a2,b3,c3,d4,buffer.getUint32(32,!0),7,1770035416);d4=ff(d4,a2,b3,c3,buffer.getUint32(36,!0),12,2336552879);c3=ff(c3,d4,a2,b3,buffer.getUint32(40,!0),17,4294925233);b3=ff(b3,c3,d4,a2,buffer.getUint32(44,!0),22,2304563134);a2=ff(a2,b3,c3,d4,buffer.getUint32(48,!0),7,1804603682);d4=ff(d4,a2,b3,c3,buffer.getUint32(52,!0),12,4254626195);c3=ff(c3,d4,a2,b3,buffer.getUint32(56,!0),17,2792965006);b3=ff(b3,c3,d4,a2,buffer.getUint32(60,!0),22,1236535329);a2=gg(a2,b3,c3,d4,buffer.getUint32(4,!0),5,4129170786);d4=gg(d4,a2,b3,c3,buffer.getUint32(24,!0),9,3225465664);c3=gg(c3,d4,a2,b3,buffer.getUint32(44,!0),14,643717713);b3=gg(b3,c3,d4,a2,buffer.getUint32(0,!0),20,3921069994);a2=gg(a2,b3,c3,d4,buffer.getUint32(20,!0),5,3593408605);d4=gg(d4,a2,b3,c3,buffer.getUint32(40,!0),9,38016083);c3=gg(c3,d4,a2,b3,buffer.getUint32(60,!0),14,3634488961);b3=gg(b3,c3,d4,a2,buffer.getUint32(16,!0),20,3889429448);a2=gg(a2,b3,c3,d4,buffer.getUint32(36,!0),5,568446438);d4=gg(d4,a2,b3,c3,buffer.getUint32(56,!0),9,3275163606);c3=gg(c3,d4,a2,b3,buffer.getUint32(12,!0),14,4107603335);b3=gg(b3,c3,d4,a2,buffer.getUint32(32,!0),20,1163531501);a2=gg(a2,b3,c3,d4,buffer.getUint32(52,!0),5,2850285829);d4=gg(d4,a2,b3,c3,buffer.getUint32(8,!0),9,4243563512);c3=gg(c3,d4,a2,b3,buffer.getUint32(28,!0),14,1735328473);b3=gg(b3,c3,d4,a2,buffer.getUint32(48,!0),20,2368359562);a2=hh(a2,b3,c3,d4,buffer.getUint32(20,!0),4,4294588738);d4=hh(d4,a2,b3,c3,buffer.getUint32(32,!0),11,2272392833);c3=hh(c3,d4,a2,b3,buffer.getUint32(44,!0),16,1839030562);b3=hh(b3,c3,d4,a2,buffer.getUint32(56,!0),23,4259657740);a2=hh(a2,b3,c3,d4,buffer.getUint32(4,!0),4,2763975236);d4=hh(d4,a2,b3,c3,buffer.getUint32(16,!0),11,1272893353);c3=hh(c3,d4,a2,b3,buffer.getUint32(28,!0),16,4139469664);b3=hh(b3,c3,d4,a2,buffer.getUint32(40,!0),23,3200236656);a2=hh(a2,b3,c3,d4,buffer.getUint32(52,!0),4,681279174);d4=hh(d4,a2,b3,c3,buffer.getUint32(0,!0),11,3936430074);c3=hh(c3,d4,a2,b3,buffer.getUint32(12,!0),16,3572445317);b3=hh(b3,c3,d4,a2,buffer.getUint32(24,!0),23,76029189);a2=hh(a2,b3,c3,d4,buffer.getUint32(36,!0),4,3654602809);d4=hh(d4,a2,b3,c3,buffer.getUint32(48,!0),11,3873151461);c3=hh(c3,d4,a2,b3,buffer.getUint32(60,!0),16,530742520);b3=hh(b3,c3,d4,a2,buffer.getUint32(8,!0),23,3299628645);a2=ii(a2,b3,c3,d4,buffer.getUint32(0,!0),6,4096336452);d4=ii(d4,a2,b3,c3,buffer.getUint32(28,!0),10,1126891415);c3=ii(c3,d4,a2,b3,buffer.getUint32(56,!0),15,2878612391);b3=ii(b3,c3,d4,a2,buffer.getUint32(20,!0),21,4237533241);a2=ii(a2,b3,c3,d4,buffer.getUint32(48,!0),6,1700485571);d4=ii(d4,a2,b3,c3,buffer.getUint32(12,!0),10,2399980690);c3=ii(c3,d4,a2,b3,buffer.getUint32(40,!0),15,4293915773);b3=ii(b3,c3,d4,a2,buffer.getUint32(4,!0),21,2240044497);a2=ii(a2,b3,c3,d4,buffer.getUint32(32,!0),6,1873313359);d4=ii(d4,a2,b3,c3,buffer.getUint32(60,!0),10,4264355552);c3=ii(c3,d4,a2,b3,buffer.getUint32(24,!0),15,2734768916);b3=ii(b3,c3,d4,a2,buffer.getUint32(52,!0),21,1309151649);a2=ii(a2,b3,c3,d4,buffer.getUint32(16,!0),6,4149444226);d4=ii(d4,a2,b3,c3,buffer.getUint32(44,!0),10,3174756917);c3=ii(c3,d4,a2,b3,buffer.getUint32(8,!0),15,718787259);b3=ii(b3,c3,d4,a2,buffer.getUint32(36,!0),21,3951481745);state2[0]=a2+state2[0]&4294967295;state2[1]=b3+state2[1]&4294967295;state2[2]=c3+state2[2]&4294967295;state2[3]=d4+state2[3]&4294967295}reset(){this.state=Uint32Array.from(INIT2);this.buffer=new DataView(new ArrayBuffer(64));this.bufferLength=0;this.bytesHashed=0;this.finished=!1}};DEFAULTS_MODE_OPTIONS=["in-region","cross-region","mobile","standard","legacy"];resolveDefaultsModeConfig=({defaultsMode}={})=>memoize(async()=>{const mode="function"==typeof defaultsMode?await defaultsMode():defaultsMode;switch(null==mode?void 0:mode.toLowerCase()){case"auto":return Promise.resolve(useMobileConfiguration()?"mobile":"standard");case"mobile":case"in-region":case"cross-region":case"standard":case"legacy":return Promise.resolve(null==mode?void 0:mode.toLocaleLowerCase());case void 0:return Promise.resolve("legacy");default:throw new Error(`Invalid parameter for "defaultsMode", expect ${DEFAULTS_MODE_OPTIONS.join(", ")}, got ${mode}`)}});useMobileConfiguration=()=>{var _a8;const navigator2=null==window?void 0:window.navigator;if(null==navigator2?void 0:navigator2.connection){const{effectiveType,rtt,downlink}=null==navigator2?void 0:navigator2.connection;if("string"==typeof effectiveType&&"4g"!==effectiveType||Number(rtt)>100||Number(downlink)<10)return!0}return(null==(_a8=null==navigator2?void 0:navigator2.userAgentData)?void 0:_a8.mobile)||"number"==typeof(null==navigator2?void 0:navigator2.maxTouchPoints)&&(null==navigator2?void 0:navigator2.maxTouchPoints)>1};init_dist_es();getRuntimeConfig=config=>{var _a8,_b5,_c3,_d2,_e2,_f,_g,_h2,_i2,_j,_k,_l,_m2,_n,_o,_p2,_q,_r,_s2;return{apiVersion:"2006-03-01",base64Decoder:null!=(_a8=null==config?void 0:config.base64Decoder)?_a8:fromBase64,base64Encoder:null!=(_b5=null==config?void 0:config.base64Encoder)?_b5:toBase64,disableHostPrefix:null!=(_c3=null==config?void 0:config.disableHostPrefix)&&_c3,endpointProvider:null!=(_d2=null==config?void 0:config.endpointProvider)?_d2:defaultEndpointResolver,extensions:null!=(_e2=null==config?void 0:config.extensions)?_e2:[],getAwsChunkedEncodingStream:null!=(_f=null==config?void 0:config.getAwsChunkedEncodingStream)?_f:getAwsChunkedEncodingStream,httpAuthSchemeProvider:null!=(_g=null==config?void 0:config.httpAuthSchemeProvider)?_g:defaultS3HttpAuthSchemeProvider,httpAuthSchemes:null!=(_h2=null==config?void 0:config.httpAuthSchemes)?_h2:[{schemeId:"aws.auth#sigv4",identityProvider:ipc=>ipc.getIdentityProvider("aws.auth#sigv4"),signer:new AwsSdkSigV4Signer},{schemeId:"aws.auth#sigv4a",identityProvider:ipc=>ipc.getIdentityProvider("aws.auth#sigv4a"),signer:new AwsSdkSigV4ASigner}],logger:null!=(_i2=null==config?void 0:config.logger)?_i2:new NoOpLogger,protocol:null!=(_j=null==config?void 0:config.protocol)?_j:S3RestXmlProtocol,protocolSettings:null!=(_k=null==config?void 0:config.protocolSettings)?_k:{defaultNamespace:"com.amazonaws.s3",errorTypeRegistries,xmlNamespace:"http://s3.amazonaws.com/doc/2006-03-01/",version:"2006-03-01",serviceTarget:"AmazonS3"},sdkStreamMixin:null!=(_l=null==config?void 0:config.sdkStreamMixin)?_l:sdkStreamMixin,serviceId:null!=(_m2=null==config?void 0:config.serviceId)?_m2:"S3",signerConstructor:null!=(_n=null==config?void 0:config.signerConstructor)?_n:SignatureV4MultiRegion,signingEscapePath:null!=(_o=null==config?void 0:config.signingEscapePath)&&_o,urlParser:null!=(_p2=null==config?void 0:config.urlParser)?_p2:parseUrl,useArnRegion:null!=(_q=null==config?void 0:config.useArnRegion)?_q:void 0,utf8Decoder:null!=(_r=null==config?void 0:config.utf8Decoder)?_r:fromUtf8,utf8Encoder:null!=(_s2=null==config?void 0:config.utf8Encoder)?_s2:toUtf8}};getRuntimeConfig2=config=>{var _a8,_b5,_c3,_d2,_e2,_f,_g,_h2,_i2,_j,_k,_l,_m2,_n,_o;const defaultsMode=resolveDefaultsModeConfig(config),defaultConfigProvider=()=>defaultsMode().then(loadConfigsForDefaultMode),clientSharedValues=getRuntimeConfig(config);return{...clientSharedValues,...config,runtime:"browser",defaultsMode,bodyLengthChecker:null!=(_a8=null==config?void 0:config.bodyLengthChecker)?_a8:calculateBodyLength,credentialDefaultProvider:null!=(_b5=null==config?void 0:config.credentialDefaultProvider)?_b5:_=>()=>Promise.reject(new Error("Credential is missing")),defaultUserAgentProvider:null!=(_c3=null==config?void 0:config.defaultUserAgentProvider)?_c3:createDefaultUserAgentProvider({serviceId:clientSharedValues.serviceId,clientVersion:"3.1017.0"}),eventStreamSerdeProvider:null!=(_d2=null==config?void 0:config.eventStreamSerdeProvider)?_d2:eventStreamSerdeProvider,maxAttempts:null!=(_e2=null==config?void 0:config.maxAttempts)?_e2:3,md5:null!=(_f=null==config?void 0:config.md5)?_f:Md5,region:null!=(_g=null==config?void 0:config.region)?_g:invalidProvider("Region is missing"),requestHandler:FetchHttpHandler.create(null!=(_h2=null==config?void 0:config.requestHandler)?_h2:defaultConfigProvider),retryMode:null!=(_i2=null==config?void 0:config.retryMode)?_i2:async()=>(await defaultConfigProvider()).retryMode||DEFAULT_RETRY_MODE,sha1:null!=(_j=null==config?void 0:config.sha1)?_j:Sha12,sha256:null!=(_k=null==config?void 0:config.sha256)?_k:Sha2563,streamCollector:null!=(_l=null==config?void 0:config.streamCollector)?_l:streamCollector,streamHasher:null!=(_m2=null==config?void 0:config.streamHasher)?_m2:blobHasher,useDualstackEndpoint:null!=(_n=null==config?void 0:config.useDualstackEndpoint)?_n:()=>Promise.resolve(!1),useFipsEndpoint:null!=(_o=null==config?void 0:config.useFipsEndpoint)?_o:()=>Promise.resolve(!1)}};getAwsRegionExtensionConfiguration=runtimeConfig=>({setRegion(region){runtimeConfig.region=region},region:()=>runtimeConfig.region});resolveAwsRegionExtensionConfiguration=awsRegionExtensionConfiguration=>({region:awsRegionExtensionConfiguration.region()});getHttpAuthExtensionConfiguration=runtimeConfig=>{const _httpAuthSchemes=runtimeConfig.httpAuthSchemes;let _httpAuthSchemeProvider=runtimeConfig.httpAuthSchemeProvider,_credentials=runtimeConfig.credentials;return{setHttpAuthScheme(httpAuthScheme){const index6=_httpAuthSchemes.findIndex(scheme=>scheme.schemeId===httpAuthScheme.schemeId);-1===index6?_httpAuthSchemes.push(httpAuthScheme):_httpAuthSchemes.splice(index6,1,httpAuthScheme)},httpAuthSchemes:()=>_httpAuthSchemes,setHttpAuthSchemeProvider(httpAuthSchemeProvider){_httpAuthSchemeProvider=httpAuthSchemeProvider},httpAuthSchemeProvider:()=>_httpAuthSchemeProvider,setCredentials(credentials){_credentials=credentials},credentials:()=>_credentials}};resolveHttpAuthRuntimeConfig=config=>({httpAuthSchemes:config.httpAuthSchemes(),httpAuthSchemeProvider:config.httpAuthSchemeProvider(),credentials:config.credentials()});resolveRuntimeExtensions=(runtimeConfig,extensions)=>{const extensionConfiguration=Object.assign(getAwsRegionExtensionConfiguration(runtimeConfig),getDefaultExtensionConfiguration(runtimeConfig),getHttpHandlerExtensionConfiguration(runtimeConfig),getHttpAuthExtensionConfiguration(runtimeConfig));extensions.forEach(extension=>extension.configure(extensionConfiguration));return Object.assign(runtimeConfig,resolveAwsRegionExtensionConfiguration(extensionConfiguration),resolveDefaultRuntimeConfig(extensionConfiguration),resolveHttpHandlerRuntimeConfig(extensionConfiguration),resolveHttpAuthRuntimeConfig(extensionConfiguration))};S3Client=class extends Client{constructor(...[configuration]){const _config_0=getRuntimeConfig2(configuration||{});super(_config_0);__publicField(this,"config");this.initConfig=_config_0;const _config_2=resolveUserAgentConfig(resolveClientEndpointParameters(_config_0)),_config_3=resolveFlexibleChecksumsConfig(_config_2),_config_4=resolveRetryConfig(_config_3),_config_6=resolveHostHeaderConfig(resolveRegionConfig(_config_4)),_config_7=resolveEndpointConfig(_config_6),_config_8=resolveEventStreamSerdeConfig(_config_7),_config_9=resolveHttpAuthSchemeConfig(_config_8),_config_10=resolveS3Config(_config_9,{session:[()=>this,CreateSessionCommand]}),_config_11=resolveRuntimeExtensions(_config_10,(null==configuration?void 0:configuration.extensions)||[]);this.config=_config_11;this.middlewareStack.use(getSchemaSerdePlugin(this.config));this.middlewareStack.use(getUserAgentPlugin(this.config));this.middlewareStack.use(getRetryPlugin(this.config));this.middlewareStack.use(getContentLengthPlugin(this.config));this.middlewareStack.use(getHostHeaderPlugin(this.config));this.middlewareStack.use(getLoggerPlugin(this.config));this.middlewareStack.use(getRecursionDetectionPlugin(this.config));this.middlewareStack.use(getHttpAuthSchemeEndpointRuleSetPlugin(this.config,{httpAuthSchemeParametersProvider:defaultS3HttpAuthSchemeParametersProvider,identityProviderConfigProvider:async config=>new DefaultIdentityProviderConfig({"aws.auth#sigv4":config.credentials,"aws.auth#sigv4a":config.credentials})}));this.middlewareStack.use(getHttpSigningPlugin(this.config));this.middlewareStack.use(getValidateBucketNamePlugin(this.config));this.middlewareStack.use(getAddExpectContinuePlugin(this.config));this.middlewareStack.use(getRegionRedirectMiddlewarePlugin(this.config));this.middlewareStack.use(getS3ExpressPlugin(this.config));this.middlewareStack.use(getS3ExpressHttpSigningPlugin(this.config))}destroy(){super.destroy()}};AbortMultipartUploadCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","AbortMultipartUpload",{}).n("S3Client","AbortMultipartUploadCommand").sc(AbortMultipartUpload$).build()){};ssecMiddlewareOptions={name:"ssecMiddleware",step:"initialize",tags:["SSE"],override:!0};getSsecPlugin=config=>({applyToStack:clientStack=>{clientStack.add(ssecMiddleware(config),ssecMiddlewareOptions)}});CompleteMultipartUploadCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]}).s("AmazonS3","CompleteMultipartUpload",{}).n("S3Client","CompleteMultipartUploadCommand").sc(CompleteMultipartUpload$).build()){};CopyObjectCommand=class extends(Command.classBuilder().ep({...commonParams,DisableS3ExpressSessionAuth:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"},CopySource:{type:"contextParams",name:"CopySource"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]}).s("AmazonS3","CopyObject",{}).n("S3Client","CopyObjectCommand").sc(CopyObject$).build()){};locationConstraintMiddlewareOptions={step:"initialize",tags:["LOCATION_CONSTRAINT","CREATE_BUCKET_CONFIGURATION"],name:"locationConstraintMiddleware",override:!0};getLocationConstraintPlugin=config=>({applyToStack:clientStack=>{clientStack.add(locationConstraintMiddleware(config),locationConstraintMiddlewareOptions)}});CreateBucketCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},DisableAccessPoints:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getLocationConstraintPlugin(config)]}).s("AmazonS3","CreateBucket",{}).n("S3Client","CreateBucketCommand").sc(CreateBucket$).build()){};CreateBucketMetadataConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","CreateBucketMetadataConfiguration",{}).n("S3Client","CreateBucketMetadataConfigurationCommand").sc(CreateBucketMetadataConfiguration$).build()){};CreateBucketMetadataTableConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","CreateBucketMetadataTableConfiguration",{}).n("S3Client","CreateBucketMetadataTableConfigurationCommand").sc(CreateBucketMetadataTableConfiguration$).build()){};CreateMultipartUploadCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]}).s("AmazonS3","CreateMultipartUpload",{}).n("S3Client","CreateMultipartUploadCommand").sc(CreateMultipartUpload$).build()){};DeleteBucketAnalyticsConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketAnalyticsConfiguration",{}).n("S3Client","DeleteBucketAnalyticsConfigurationCommand").sc(DeleteBucketAnalyticsConfiguration$).build()){};DeleteBucketCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucket",{}).n("S3Client","DeleteBucketCommand").sc(DeleteBucket$).build()){};DeleteBucketCorsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketCors",{}).n("S3Client","DeleteBucketCorsCommand").sc(DeleteBucketCors$).build()){};DeleteBucketEncryptionCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketEncryption",{}).n("S3Client","DeleteBucketEncryptionCommand").sc(DeleteBucketEncryption$).build()){};DeleteBucketIntelligentTieringConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketIntelligentTieringConfiguration",{}).n("S3Client","DeleteBucketIntelligentTieringConfigurationCommand").sc(DeleteBucketIntelligentTieringConfiguration$).build()){};DeleteBucketInventoryConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketInventoryConfiguration",{}).n("S3Client","DeleteBucketInventoryConfigurationCommand").sc(DeleteBucketInventoryConfiguration$).build()){};DeleteBucketLifecycleCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketLifecycle",{}).n("S3Client","DeleteBucketLifecycleCommand").sc(DeleteBucketLifecycle$).build()){};DeleteBucketMetadataConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketMetadataConfiguration",{}).n("S3Client","DeleteBucketMetadataConfigurationCommand").sc(DeleteBucketMetadataConfiguration$).build()){};DeleteBucketMetadataTableConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketMetadataTableConfiguration",{}).n("S3Client","DeleteBucketMetadataTableConfigurationCommand").sc(DeleteBucketMetadataTableConfiguration$).build()){};DeleteBucketMetricsConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketMetricsConfiguration",{}).n("S3Client","DeleteBucketMetricsConfigurationCommand").sc(DeleteBucketMetricsConfiguration$).build()){};DeleteBucketOwnershipControlsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketOwnershipControls",{}).n("S3Client","DeleteBucketOwnershipControlsCommand").sc(DeleteBucketOwnershipControls$).build()){};DeleteBucketPolicyCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketPolicy",{}).n("S3Client","DeleteBucketPolicyCommand").sc(DeleteBucketPolicy$).build()){};DeleteBucketReplicationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketReplication",{}).n("S3Client","DeleteBucketReplicationCommand").sc(DeleteBucketReplication$).build()){};DeleteBucketTaggingCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketTagging",{}).n("S3Client","DeleteBucketTaggingCommand").sc(DeleteBucketTagging$).build()){};DeleteBucketWebsiteCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketWebsite",{}).n("S3Client","DeleteBucketWebsiteCommand").sc(DeleteBucketWebsite$).build()){};DeleteObjectCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","DeleteObject",{}).n("S3Client","DeleteObjectCommand").sc(DeleteObject$).build()){};DeleteObjectsCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0}),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","DeleteObjects",{}).n("S3Client","DeleteObjectsCommand").sc(DeleteObjects$).build()){};DeleteObjectTaggingCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","DeleteObjectTagging",{}).n("S3Client","DeleteObjectTaggingCommand").sc(DeleteObjectTagging$).build()){};DeletePublicAccessBlockCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeletePublicAccessBlock",{}).n("S3Client","DeletePublicAccessBlockCommand").sc(DeletePublicAccessBlock$).build()){};GetBucketAbacCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketAbac",{}).n("S3Client","GetBucketAbacCommand").sc(GetBucketAbac$).build()){};GetBucketAccelerateConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketAccelerateConfiguration",{}).n("S3Client","GetBucketAccelerateConfigurationCommand").sc(GetBucketAccelerateConfiguration$).build()){};GetBucketAclCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketAcl",{}).n("S3Client","GetBucketAclCommand").sc(GetBucketAcl$).build()){};GetBucketAnalyticsConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketAnalyticsConfiguration",{}).n("S3Client","GetBucketAnalyticsConfigurationCommand").sc(GetBucketAnalyticsConfiguration$).build()){};GetBucketCorsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketCors",{}).n("S3Client","GetBucketCorsCommand").sc(GetBucketCors$).build()){};GetBucketEncryptionCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketEncryption",{}).n("S3Client","GetBucketEncryptionCommand").sc(GetBucketEncryption$).build()){};GetBucketIntelligentTieringConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketIntelligentTieringConfiguration",{}).n("S3Client","GetBucketIntelligentTieringConfigurationCommand").sc(GetBucketIntelligentTieringConfiguration$).build()){};GetBucketInventoryConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketInventoryConfiguration",{}).n("S3Client","GetBucketInventoryConfigurationCommand").sc(GetBucketInventoryConfiguration$).build()){};GetBucketLifecycleConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketLifecycleConfiguration",{}).n("S3Client","GetBucketLifecycleConfigurationCommand").sc(GetBucketLifecycleConfiguration$).build()){};GetBucketLocationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketLocation",{}).n("S3Client","GetBucketLocationCommand").sc(GetBucketLocation$).build()){};GetBucketLoggingCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketLogging",{}).n("S3Client","GetBucketLoggingCommand").sc(GetBucketLogging$).build()){};GetBucketMetadataConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketMetadataConfiguration",{}).n("S3Client","GetBucketMetadataConfigurationCommand").sc(GetBucketMetadataConfiguration$).build()){};GetBucketMetadataTableConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketMetadataTableConfiguration",{}).n("S3Client","GetBucketMetadataTableConfigurationCommand").sc(GetBucketMetadataTableConfiguration$).build()){};GetBucketMetricsConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketMetricsConfiguration",{}).n("S3Client","GetBucketMetricsConfigurationCommand").sc(GetBucketMetricsConfiguration$).build()){};GetBucketNotificationConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketNotificationConfiguration",{}).n("S3Client","GetBucketNotificationConfigurationCommand").sc(GetBucketNotificationConfiguration$).build()){};GetBucketOwnershipControlsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketOwnershipControls",{}).n("S3Client","GetBucketOwnershipControlsCommand").sc(GetBucketOwnershipControls$).build()){};GetBucketPolicyCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketPolicy",{}).n("S3Client","GetBucketPolicyCommand").sc(GetBucketPolicy$).build()){};GetBucketPolicyStatusCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketPolicyStatus",{}).n("S3Client","GetBucketPolicyStatusCommand").sc(GetBucketPolicyStatus$).build()){};GetBucketReplicationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketReplication",{}).n("S3Client","GetBucketReplicationCommand").sc(GetBucketReplication$).build()){};GetBucketRequestPaymentCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketRequestPayment",{}).n("S3Client","GetBucketRequestPaymentCommand").sc(GetBucketRequestPayment$).build()){};GetBucketTaggingCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketTagging",{}).n("S3Client","GetBucketTaggingCommand").sc(GetBucketTagging$).build()){};GetBucketVersioningCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketVersioning",{}).n("S3Client","GetBucketVersioningCommand").sc(GetBucketVersioning$).build()){};GetBucketWebsiteCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketWebsite",{}).n("S3Client","GetBucketWebsiteCommand").sc(GetBucketWebsite$).build()){};GetObjectAclCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetObjectAcl",{}).n("S3Client","GetObjectAclCommand").sc(GetObjectAcl$).build()){};GetObjectAttributesCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]}).s("AmazonS3","GetObjectAttributes",{}).n("S3Client","GetObjectAttributesCommand").sc(GetObjectAttributes$).build()){};GetObjectCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestChecksumRequired:!1,requestValidationModeMember:"ChecksumMode",responseAlgorithms:["CRC64NVME","CRC32","CRC32C","SHA256","SHA1"]}),getSsecPlugin(config),getS3ExpiresMiddlewarePlugin()]}).s("AmazonS3","GetObject",{}).n("S3Client","GetObjectCommand").sc(GetObject$).build()){};GetObjectLegalHoldCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetObjectLegalHold",{}).n("S3Client","GetObjectLegalHoldCommand").sc(GetObjectLegalHold$).build()){};GetObjectLockConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetObjectLockConfiguration",{}).n("S3Client","GetObjectLockConfigurationCommand").sc(GetObjectLockConfiguration$).build()){};GetObjectRetentionCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetObjectRetention",{}).n("S3Client","GetObjectRetentionCommand").sc(GetObjectRetention$).build()){};GetObjectTaggingCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetObjectTagging",{}).n("S3Client","GetObjectTaggingCommand").sc(GetObjectTagging$).build()){};GetObjectTorrentCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","GetObjectTorrent",{}).n("S3Client","GetObjectTorrentCommand").sc(GetObjectTorrent$).build()){};GetPublicAccessBlockCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetPublicAccessBlock",{}).n("S3Client","GetPublicAccessBlockCommand").sc(GetPublicAccessBlock$).build()){};HeadBucketCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","HeadBucket",{}).n("S3Client","HeadBucketCommand").sc(HeadBucket$).build()){};HeadObjectCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config),getS3ExpiresMiddlewarePlugin()]}).s("AmazonS3","HeadObject",{}).n("S3Client","HeadObjectCommand").sc(HeadObject$).build()){};ListBucketAnalyticsConfigurationsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","ListBucketAnalyticsConfigurations",{}).n("S3Client","ListBucketAnalyticsConfigurationsCommand").sc(ListBucketAnalyticsConfigurations$).build()){};ListBucketIntelligentTieringConfigurationsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","ListBucketIntelligentTieringConfigurations",{}).n("S3Client","ListBucketIntelligentTieringConfigurationsCommand").sc(ListBucketIntelligentTieringConfigurations$).build()){};ListBucketInventoryConfigurationsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","ListBucketInventoryConfigurations",{}).n("S3Client","ListBucketInventoryConfigurationsCommand").sc(ListBucketInventoryConfigurations$).build()){};ListBucketMetricsConfigurationsCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","ListBucketMetricsConfigurations",{}).n("S3Client","ListBucketMetricsConfigurationsCommand").sc(ListBucketMetricsConfigurations$).build()){};ListBucketsCommand=class extends(Command.classBuilder().ep(commonParams).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","ListBuckets",{}).n("S3Client","ListBucketsCommand").sc(ListBuckets$).build()){};ListDirectoryBucketsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","ListDirectoryBuckets",{}).n("S3Client","ListDirectoryBucketsCommand").sc(ListDirectoryBuckets$).build()){};ListMultipartUploadsCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Prefix:{type:"contextParams",name:"Prefix"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","ListMultipartUploads",{}).n("S3Client","ListMultipartUploadsCommand").sc(ListMultipartUploads$).build()){};ListObjectsCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Prefix:{type:"contextParams",name:"Prefix"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","ListObjects",{}).n("S3Client","ListObjectsCommand").sc(ListObjects$).build()){};ListObjectsV2Command=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Prefix:{type:"contextParams",name:"Prefix"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","ListObjectsV2",{}).n("S3Client","ListObjectsV2Command").sc(ListObjectsV2$).build()){};ListObjectVersionsCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Prefix:{type:"contextParams",name:"Prefix"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","ListObjectVersions",{}).n("S3Client","ListObjectVersionsCommand").sc(ListObjectVersions$).build()){};ListPartsCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]}).s("AmazonS3","ListParts",{}).n("S3Client","ListPartsCommand").sc(ListParts$).build()){};PutBucketAbacCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!1})]}).s("AmazonS3","PutBucketAbac",{}).n("S3Client","PutBucketAbacCommand").sc(PutBucketAbac$).build()){};PutBucketAccelerateConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!1})]}).s("AmazonS3","PutBucketAccelerateConfiguration",{}).n("S3Client","PutBucketAccelerateConfigurationCommand").sc(PutBucketAccelerateConfiguration$).build()){};PutBucketAclCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutBucketAcl",{}).n("S3Client","PutBucketAclCommand").sc(PutBucketAcl$).build()){};PutBucketAnalyticsConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","PutBucketAnalyticsConfiguration",{}).n("S3Client","PutBucketAnalyticsConfigurationCommand").sc(PutBucketAnalyticsConfiguration$).build()){};PutBucketCorsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutBucketCors",{}).n("S3Client","PutBucketCorsCommand").sc(PutBucketCors$).build()){};PutBucketEncryptionCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutBucketEncryption",{}).n("S3Client","PutBucketEncryptionCommand").sc(PutBucketEncryption$).build()){};PutBucketIntelligentTieringConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","PutBucketIntelligentTieringConfiguration",{}).n("S3Client","PutBucketIntelligentTieringConfigurationCommand").sc(PutBucketIntelligentTieringConfiguration$).build()){};PutBucketInventoryConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","PutBucketInventoryConfiguration",{}).n("S3Client","PutBucketInventoryConfigurationCommand").sc(PutBucketInventoryConfiguration$).build()){};PutBucketLifecycleConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0}),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","PutBucketLifecycleConfiguration",{}).n("S3Client","PutBucketLifecycleConfigurationCommand").sc(PutBucketLifecycleConfiguration$).build()){};PutBucketLoggingCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutBucketLogging",{}).n("S3Client","PutBucketLoggingCommand").sc(PutBucketLogging$).build()){};PutBucketMetricsConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","PutBucketMetricsConfiguration",{}).n("S3Client","PutBucketMetricsConfigurationCommand").sc(PutBucketMetricsConfiguration$).build()){};PutBucketNotificationConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","PutBucketNotificationConfiguration",{}).n("S3Client","PutBucketNotificationConfigurationCommand").sc(PutBucketNotificationConfiguration$).build()){};PutBucketOwnershipControlsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutBucketOwnershipControls",{}).n("S3Client","PutBucketOwnershipControlsCommand").sc(PutBucketOwnershipControls$).build()){};PutBucketPolicyCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutBucketPolicy",{}).n("S3Client","PutBucketPolicyCommand").sc(PutBucketPolicy$).build()){};PutBucketReplicationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutBucketReplication",{}).n("S3Client","PutBucketReplicationCommand").sc(PutBucketReplication$).build()){};PutBucketRequestPaymentCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutBucketRequestPayment",{}).n("S3Client","PutBucketRequestPaymentCommand").sc(PutBucketRequestPayment$).build()){};PutBucketTaggingCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutBucketTagging",{}).n("S3Client","PutBucketTaggingCommand").sc(PutBucketTagging$).build()){};PutBucketVersioningCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutBucketVersioning",{}).n("S3Client","PutBucketVersioningCommand").sc(PutBucketVersioning$).build()){};PutBucketWebsiteCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutBucketWebsite",{}).n("S3Client","PutBucketWebsiteCommand").sc(PutBucketWebsite$).build()){};PutObjectAclCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0}),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","PutObjectAcl",{}).n("S3Client","PutObjectAclCommand").sc(PutObjectAcl$).build()){};PutObjectCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!1}),getCheckContentLengthHeaderPlugin(),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]}).s("AmazonS3","PutObject",{}).n("S3Client","PutObjectCommand").sc(PutObject$).build()){};PutObjectLegalHoldCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0}),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","PutObjectLegalHold",{}).n("S3Client","PutObjectLegalHoldCommand").sc(PutObjectLegalHold$).build()){};PutObjectLockConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0}),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","PutObjectLockConfiguration",{}).n("S3Client","PutObjectLockConfigurationCommand").sc(PutObjectLockConfiguration$).build()){};PutObjectRetentionCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0}),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","PutObjectRetention",{}).n("S3Client","PutObjectRetentionCommand").sc(PutObjectRetention$).build()){};PutObjectTaggingCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0}),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","PutObjectTagging",{}).n("S3Client","PutObjectTaggingCommand").sc(PutObjectTagging$).build()){};PutPublicAccessBlockCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutPublicAccessBlock",{}).n("S3Client","PutPublicAccessBlockCommand").sc(PutPublicAccessBlock$).build()){};RenameObjectCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","RenameObject",{}).n("S3Client","RenameObjectCommand").sc(RenameObject$).build()){};RestoreObjectCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!1}),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","RestoreObject",{}).n("S3Client","RestoreObjectCommand").sc(RestoreObject$).build()){};SelectObjectContentCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]}).s("AmazonS3","SelectObjectContent",{eventStream:{output:!0}}).n("S3Client","SelectObjectContentCommand").sc(SelectObjectContent$).build()){};UpdateBucketMetadataInventoryTableConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","UpdateBucketMetadataInventoryTableConfiguration",{}).n("S3Client","UpdateBucketMetadataInventoryTableConfigurationCommand").sc(UpdateBucketMetadataInventoryTableConfiguration$).build()){};UpdateBucketMetadataJournalTableConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","UpdateBucketMetadataJournalTableConfiguration",{}).n("S3Client","UpdateBucketMetadataJournalTableConfigurationCommand").sc(UpdateBucketMetadataJournalTableConfiguration$).build()){};UpdateObjectEncryptionCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0}),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","UpdateObjectEncryption",{}).n("S3Client","UpdateObjectEncryptionCommand").sc(UpdateObjectEncryption$).build()){};UploadPartCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!1}),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]}).s("AmazonS3","UploadPart",{}).n("S3Client","UploadPartCommand").sc(UploadPart$).build()){};UploadPartCopyCommand=class extends(Command.classBuilder().ep({...commonParams,DisableS3ExpressSessionAuth:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]}).s("AmazonS3","UploadPartCopy",{}).n("S3Client","UploadPartCopyCommand").sc(UploadPartCopy$).build()){};WriteGetObjectResponseCommand=class extends(Command.classBuilder().ep({...commonParams,UseObjectLambdaEndpoint:{type:"staticContextParams",value:!0}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","WriteGetObjectResponse",{}).n("S3Client","WriteGetObjectResponseCommand").sc(WriteGetObjectResponse$).build()){};paginateListBuckets=createPaginator(S3Client,ListBucketsCommand,"ContinuationToken","ContinuationToken","MaxBuckets");paginateListDirectoryBuckets=createPaginator(S3Client,ListDirectoryBucketsCommand,"ContinuationToken","ContinuationToken","MaxDirectoryBuckets");paginateListObjectsV2=createPaginator(S3Client,ListObjectsV2Command,"ContinuationToken","NextContinuationToken","MaxKeys");paginateListParts=createPaginator(S3Client,ListPartsCommand,"PartNumberMarker","NextPartNumberMarker","MaxParts");getCircularReplacer=()=>{const seen=new WeakSet;return(key3,value)=>{if("object"==typeof value&&null!==value){if(seen.has(value))return"[Circular]";seen.add(value)}return value}};sleep=seconds=>new Promise(resolve=>setTimeout(resolve,1e3*seconds));waiterServiceDefaults={minDelay:2,maxDelay:120};(function(WaiterState2){WaiterState2.ABORTED="ABORTED";WaiterState2.FAILURE="FAILURE";WaiterState2.SUCCESS="SUCCESS";WaiterState2.RETRY="RETRY";WaiterState2.TIMEOUT="TIMEOUT"})(WaiterState||(WaiterState={}));checkExceptions=result=>{if(result.state===WaiterState.ABORTED){const abortError=new Error(`${JSON.stringify({...result,reason:"Request was aborted"},getCircularReplacer())}`);abortError.name="AbortError";throw abortError}if(result.state===WaiterState.TIMEOUT){const timeoutError=new Error(`${JSON.stringify({...result,reason:"Waiter has timed out"},getCircularReplacer())}`);timeoutError.name="TimeoutError";throw timeoutError}if(result.state!==WaiterState.SUCCESS)throw new Error(`${JSON.stringify(result,getCircularReplacer())}`);return result};exponentialBackoffWithJitter=(minDelay,maxDelay,attemptCeiling,attempt)=>attempt>attemptCeiling?maxDelay:randomInRange(minDelay,minDelay*2**(attempt-1));randomInRange=(min,max3)=>min+Math.random()*(max3-min);runPolling=async({minDelay,maxDelay,maxWaitTime,abortController,client,abortSignal},input,acceptorChecks)=>{var _a8;const observedResponses={},{state:state2,reason}=await acceptorChecks(client,input);if(reason){const message=createMessageFromResponse(reason);observedResponses[message]|=0;observedResponses[message]+=1}if(state2!==WaiterState.RETRY)return{state:state2,reason,observedResponses};let currentAttempt=1;const waitUntil=Date.now()+1e3*maxWaitTime,attemptCeiling=Math.log(maxDelay/minDelay)/Math.log(2)+1;for(;;){if((null==(_a8=null==abortController?void 0:abortController.signal)?void 0:_a8.aborted)||(null==abortSignal?void 0:abortSignal.aborted)){const message="AbortController signal aborted.";observedResponses[message]|=0;observedResponses[message]+=1;return{state:WaiterState.ABORTED,observedResponses}}const delay2=exponentialBackoffWithJitter(minDelay,maxDelay,attemptCeiling,currentAttempt);if(Date.now()+1e3*delay2>waitUntil)return{state:WaiterState.TIMEOUT,observedResponses};await sleep(delay2);const{state:state3,reason:reason2}=await acceptorChecks(client,input);if(reason2){const message=createMessageFromResponse(reason2);observedResponses[message]|=0;observedResponses[message]+=1}if(state3!==WaiterState.RETRY)return{state:state3,reason:reason2,observedResponses};currentAttempt+=1}};createMessageFromResponse=reason=>{var _a8,_b5,_c3,_d2,_e2,_f;return(null==reason?void 0:reason.$responseBodyText)?`Deserialization error for body: ${reason.$responseBodyText}`:(null==(_a8=null==reason?void 0:reason.$metadata)?void 0:_a8.httpStatusCode)?reason.$response||reason.message?`${null!=(_d2=null!=(_c3=null==(_b5=reason.$response)?void 0:_b5.statusCode)?_c3:reason.$metadata.httpStatusCode)?_d2:"Unknown"}: ${reason.message}`:`${reason.$metadata.httpStatusCode}: OK`:String(null!=(_f=null!=(_e2=null==reason?void 0:reason.message)?_e2:JSON.stringify(reason,getCircularReplacer()))?_f:"Unknown")};validateWaiterOptions=options=>{if(options.maxWaitTime<=0)throw new Error("WaiterConfiguration.maxWaitTime must be greater than 0");if(options.minDelay<=0)throw new Error("WaiterConfiguration.minDelay must be greater than 0");if(options.maxDelay<=0)throw new Error("WaiterConfiguration.maxDelay must be greater than 0");if(options.maxWaitTime<=options.minDelay)throw new Error(`WaiterConfiguration.maxWaitTime [${options.maxWaitTime}] must be greater than WaiterConfiguration.minDelay [${options.minDelay}] for this waiter`);if(options.maxDelay{let onAbort;const promise=new Promise(resolve=>{onAbort=()=>resolve({state:WaiterState.ABORTED});"function"==typeof abortSignal.addEventListener?abortSignal.addEventListener("abort",onAbort):abortSignal.onabort=onAbort});return{clearListener(){"function"==typeof abortSignal.removeEventListener&&abortSignal.removeEventListener("abort",onAbort)},aborted:promise}};createWaiter=async(options,input,acceptorChecks)=>{var _a8;const params={...waiterServiceDefaults,...options};validateWaiterOptions(params);const exitConditions=[runPolling(params,input,acceptorChecks)],finalize=[];if(options.abortSignal){const{aborted:aborted2,clearListener}=abortTimeout(options.abortSignal);finalize.push(clearListener);exitConditions.push(aborted2)}if(null==(_a8=options.abortController)?void 0:_a8.signal){const{aborted:aborted2,clearListener}=abortTimeout(options.abortController.signal);finalize.push(clearListener);exitConditions.push(aborted2)}return Promise.race(exitConditions).then(result=>{for(const fn of finalize)fn();return result})};checkState=async(client,input)=>{let reason;try{reason=await client.send(new HeadBucketCommand(input));return{state:WaiterState.SUCCESS,reason}}catch(exception){reason=exception;if(exception.name&&"NotFound"==exception.name)return{state:WaiterState.RETRY,reason}}return{state:WaiterState.RETRY,reason}};checkState2=async(client,input)=>{let reason;try{reason=await client.send(new HeadBucketCommand(input))}catch(exception){reason=exception;if(exception.name&&"NotFound"==exception.name)return{state:WaiterState.SUCCESS,reason}}return{state:WaiterState.RETRY,reason}};checkState3=async(client,input)=>{let reason;try{reason=await client.send(new HeadObjectCommand(input));return{state:WaiterState.SUCCESS,reason}}catch(exception){reason=exception;if(exception.name&&"NotFound"==exception.name)return{state:WaiterState.RETRY,reason}}return{state:WaiterState.RETRY,reason}};checkState4=async(client,input)=>{let reason;try{reason=await client.send(new HeadObjectCommand(input))}catch(exception){reason=exception;if(exception.name&&"NotFound"==exception.name)return{state:WaiterState.SUCCESS,reason}}return{state:WaiterState.RETRY,reason}};paginators={paginateListBuckets,paginateListDirectoryBuckets,paginateListObjectsV2,paginateListParts};waiters={waitUntilBucketExists:async(params,input)=>{const result=await createWaiter({minDelay:5,maxDelay:120,...params},input,checkState);return checkExceptions(result)},waitUntilBucketNotExists:async(params,input)=>{const result=await createWaiter({minDelay:5,maxDelay:120,...params},input,checkState2);return checkExceptions(result)},waitUntilObjectExists:async(params,input)=>{const result=await createWaiter({minDelay:5,maxDelay:120,...params},input,checkState3);return checkExceptions(result)},waitUntilObjectNotExists:async(params,input)=>{const result=await createWaiter({minDelay:5,maxDelay:120,...params},input,checkState4);return checkExceptions(result)}};createAggregatedClient({AbortMultipartUploadCommand,CompleteMultipartUploadCommand,CopyObjectCommand,CreateBucketCommand,CreateBucketMetadataConfigurationCommand,CreateBucketMetadataTableConfigurationCommand,CreateMultipartUploadCommand,CreateSessionCommand,DeleteBucketCommand,DeleteBucketAnalyticsConfigurationCommand,DeleteBucketCorsCommand,DeleteBucketEncryptionCommand,DeleteBucketIntelligentTieringConfigurationCommand,DeleteBucketInventoryConfigurationCommand,DeleteBucketLifecycleCommand,DeleteBucketMetadataConfigurationCommand,DeleteBucketMetadataTableConfigurationCommand,DeleteBucketMetricsConfigurationCommand,DeleteBucketOwnershipControlsCommand,DeleteBucketPolicyCommand,DeleteBucketReplicationCommand,DeleteBucketTaggingCommand,DeleteBucketWebsiteCommand,DeleteObjectCommand,DeleteObjectsCommand,DeleteObjectTaggingCommand,DeletePublicAccessBlockCommand,GetBucketAbacCommand,GetBucketAccelerateConfigurationCommand,GetBucketAclCommand,GetBucketAnalyticsConfigurationCommand,GetBucketCorsCommand,GetBucketEncryptionCommand,GetBucketIntelligentTieringConfigurationCommand,GetBucketInventoryConfigurationCommand,GetBucketLifecycleConfigurationCommand,GetBucketLocationCommand,GetBucketLoggingCommand,GetBucketMetadataConfigurationCommand,GetBucketMetadataTableConfigurationCommand,GetBucketMetricsConfigurationCommand,GetBucketNotificationConfigurationCommand,GetBucketOwnershipControlsCommand,GetBucketPolicyCommand,GetBucketPolicyStatusCommand,GetBucketReplicationCommand,GetBucketRequestPaymentCommand,GetBucketTaggingCommand,GetBucketVersioningCommand,GetBucketWebsiteCommand,GetObjectCommand,GetObjectAclCommand,GetObjectAttributesCommand,GetObjectLegalHoldCommand,GetObjectLockConfigurationCommand,GetObjectRetentionCommand,GetObjectTaggingCommand,GetObjectTorrentCommand,GetPublicAccessBlockCommand,HeadBucketCommand,HeadObjectCommand,ListBucketAnalyticsConfigurationsCommand,ListBucketIntelligentTieringConfigurationsCommand,ListBucketInventoryConfigurationsCommand,ListBucketMetricsConfigurationsCommand,ListBucketsCommand,ListDirectoryBucketsCommand,ListMultipartUploadsCommand,ListObjectsCommand,ListObjectsV2Command,ListObjectVersionsCommand,ListPartsCommand,PutBucketAbacCommand,PutBucketAccelerateConfigurationCommand,PutBucketAclCommand,PutBucketAnalyticsConfigurationCommand,PutBucketCorsCommand,PutBucketEncryptionCommand,PutBucketIntelligentTieringConfigurationCommand,PutBucketInventoryConfigurationCommand,PutBucketLifecycleConfigurationCommand,PutBucketLoggingCommand,PutBucketMetricsConfigurationCommand,PutBucketNotificationConfigurationCommand,PutBucketOwnershipControlsCommand,PutBucketPolicyCommand,PutBucketReplicationCommand,PutBucketRequestPaymentCommand,PutBucketTaggingCommand,PutBucketVersioningCommand,PutBucketWebsiteCommand,PutObjectCommand,PutObjectAclCommand,PutObjectLegalHoldCommand,PutObjectLockConfigurationCommand,PutObjectRetentionCommand,PutObjectTaggingCommand,PutPublicAccessBlockCommand,RenameObjectCommand,RestoreObjectCommand,SelectObjectContentCommand,UpdateBucketMetadataInventoryTableConfigurationCommand,UpdateBucketMetadataJournalTableConfigurationCommand,UpdateObjectEncryptionCommand,UploadPartCommand,UploadPartCopyCommand,WriteGetObjectResponseCommand},S3=class extends S3Client{},{paginators,waiters});applyMd5BodyChecksumMiddleware=options=>next2=>async args=>{const{request:request2}=args;if(HttpRequest.isInstance(request2)){const{body,headers}=request2;if(!hasHeader3("content-md5",headers)){let digest;if(void 0===body||"string"==typeof body||ArrayBuffer.isView(body)||isArrayBuffer(body)){const hash3=new options.md5;hash3.update(body||"");digest=hash3.digest()}else digest=options.streamHasher(options.md5,body);const cloned=HttpRequest.clone(request2);cloned.headers={...headers,"content-md5":options.base64Encoder(await digest)};return next2({...args,request:cloned})}}return next2(args)};hasHeader3=(soughtHeader,headers)=>{soughtHeader=soughtHeader.toLowerCase();for(const headerName of Object.keys(headers))if(soughtHeader===headerName.toLowerCase())return!0;return!1};ch2={};wk=function(c3,id,msg,transfer,cb2){var w2=new Worker(ch2[id]||(ch2[id]=URL.createObjectURL(new Blob([c3+';addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'],{type:"text/javascript"}))));w2.onmessage=function(e3){var err3,d4=e3.data,ed=d4.$e$;if(ed){(err3=new Error(ed[0])).code=ed[1];err3.stack=ed[2];cb2(err3,null)}else cb2(null,d4)};w2.postMessage(msg,transfer);return w2};u8=Uint8Array,u16=Uint16Array,i32=Int32Array;fleb=new u8([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]);fdeb=new u8([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]);clim=new u8([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);freb=function(eb,start){var i2,r4,j2,b3=new u16(31);for(i2=0;i2<31;++i2)b3[i2]=start+=1<>1|(21845&i2)<<1))>>2|(13107&x2)<<2))>>4|(3855&x2)<<4;rev[i2]=((65280&x2)>>8|(255&x2)<<8)>>1}hMap=function(cd2,mb,r4){for(var le,co2,rvb,sv,r_1,v2,m3,s2=cd2.length,i2=0,l2=new u16(mb);i2>rvb]=sv}}else{co2=new u16(s2);for(i2=0;i2>15-cd2[i2])}return co2};flt=new u8(288);for(i2=0;i2<144;++i2)flt[i2]=8;for(i2=144;i2<256;++i2)flt[i2]=9;for(i2=256;i2<280;++i2)flt[i2]=7;for(i2=280;i2<288;++i2)flt[i2]=8;fdt=new u8(32);for(i2=0;i2<32;++i2)fdt[i2]=5;flm=hMap(flt,9,0),flrm=hMap(flt,9,1);fdm=hMap(fdt,5,0),fdrm=hMap(fdt,5,1);max=function(a2){var i2,m3=a2[0];for(i2=1;i2m3&&(m3=a2[i2]);return m3};bits=function(d4,p2,m3){var o2=p2/8|0;return(d4[o2]|d4[o2+1]<<8)>>(7&p2)&m3};bits16=function(d4,p2){var o2=p2/8|0;return(d4[o2]|d4[o2+1]<<8|d4[o2+2]<<16)>>(7&p2)};shft=function(p2){return(p2+7)/8|0};slc=function(v2,s2,e3){(null==s2||s2<0)&&(s2=0);(null==e3||e3>v2.length)&&(e3=v2.length);return new u8(v2.subarray(s2,e3))};ec=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"];err2=function(ind,msg,nt){var e3=new Error(msg||ec[ind]);e3.code=ind;Error.captureStackTrace&&Error.captureStackTrace(e3,err2);if(!nt)throw e3;return e3};inflt=function(dat,st,buf,dict){var noBuf,resize,noSt,cbuf,final,pos,bt2,lm,dm,lbt,dbt,tbts,type,s2,l2,t9,hLit,hcLen,tl,ldt,clt,i2,clb,clbmsk,clm,r4,c3,n3,lt,dt,lms,dms,lpos,sym,add,b3,d4,dsym,end,shift,dend,sl=dat.length,dl=dict?dict.length:0;if(!sl||st.f&&!st.l)return buf||new u8(0);resize=(noBuf=!buf)||2!=st.i;noSt=st.i;noBuf&&(buf=new u8(3*sl));cbuf=function(l3){var nbuf,bl2=buf.length;if(l3>bl2){(nbuf=new u8(Math.max(2*bl2,l3))).set(buf);buf=nbuf}};final=st.f||0,pos=st.p||0,bt2=st.b||0,lm=st.l,dm=st.d,lbt=st.m,dbt=st.n;tbts=8*sl;do{if(!lm){final=bits(dat,pos,1);type=bits(dat,pos+1,3);pos+=3;if(!type){if((t9=(s2=shft(pos)+4)+(l2=dat[s2-4]|dat[s2-3]<<8))>sl){noSt&&err2(0);break}resize&&cbuf(bt2+l2);buf.set(dat.subarray(s2,t9),bt2);st.b=bt2+=l2,st.p=pos=8*t9,st.f=final;continue}if(1==type)lm=flrm,dm=fdrm,lbt=9,dbt=5;else if(2==type){hLit=bits(dat,pos,31)+257,hcLen=bits(dat,pos+10,15)+4;tl=hLit+bits(dat,pos+5,31)+1;pos+=14;ldt=new u8(tl);clt=new u8(19);for(i2=0;i2>4)<16)ldt[i2++]=s2;else{c3=0,n3=0;16==s2?(n3=3+bits(dat,pos,3),pos+=2,c3=ldt[i2-1]):17==s2?(n3=3+bits(dat,pos,7),pos+=3):18==s2&&(n3=11+bits(dat,pos,127),pos+=7);for(;n3--;)ldt[i2++]=c3}}lt=ldt.subarray(0,hLit),dt=ldt.subarray(hLit);lbt=max(lt);dbt=max(dt);lm=hMap(lt,lbt,1);dm=hMap(dt,dbt,1)}else err2(1);if(pos>tbts){noSt&&err2(0);break}}resize&&cbuf(bt2+131072);lms=(1<>4;if((pos+=15&c3)>tbts){noSt&&err2(0);break}c3||err2(2);if(sym<256)buf[bt2++]=sym;else{if(256==sym){lpos=pos,lm=null;break}add=sym-254;if(sym>264){b3=fleb[i2=sym-257];add=bits(dat,pos,(1<>4;d4||err2(3);pos+=15&d4;dt=fd[dsym];if(dsym>3){b3=fdeb[dsym];dt+=bits16(dat,pos)&(1<tbts){noSt&&err2(0);break}resize&&cbuf(bt2+131072);end=bt2+add;if(bt2>8};wbits16=function(d4,p2,v2){v2<<=7&p2;var o2=p2/8|0;d4[o2]|=v2;d4[o2+1]|=v2>>8;d4[o2+2]|=v2>>16};hTree=function(d4,mb){var i2,s2,t22,v2,l2,r4,i0,i1,i22,maxSym,tr,mbt,dt,lft,cst,i2_1,i2_2,i2_3,t9=[];for(i2=0;i2maxSym&&(maxSym=t22[i2].s);tr=new u16(maxSym+1);if((mbt=ln(t9[i1-1],tr,0))>mb){i2=0,dt=0;cst=1<<(lft=mbt-mb);t22.sort(function(a2,b3){return tr[b3.s]-tr[a2.s]||a2.f-b3.f});for(;i2mb))break;dt+=cst-(1<>=lft;for(;dt>0;){i2_2=t22[i2].s;tr[i2_2]=0&&dt;--i2){i2_3=t22[i2].s;if(tr[i2_3]==mb){--tr[i2_3];++dt}}mbt=mb}return{t:new u8(tr),l:mbt}};ln=function(n3,l2,d4){return-1==n3.s?Math.max(ln(n3.l,l2,d4+1),ln(n3.r,l2,d4+1)):l2[n3.s]=d4};lc=function(c3){for(var cl2,cli,cln,cls,w2,i2,s2=c3.length;s2&&!c3[--s2];);cl2=new u16(++s2);cli=0,cln=c3[0],cls=1;w2=function(v2){cl2[cli++]=v2};for(i2=1;i2<=s2;++i2)if(c3[i2]==cln&&i2!=s2)++cls;else{if(!cln&&cls>2){for(;cls>138;cls-=138)w2(32754);if(cls>2){w2(cls>10?cls-11<<5|28690:cls-3<<5|12305);cls=0}}else if(cls>3){w2(cln),--cls;for(;cls>6;cls-=6)w2(8304);cls>2&&(w2(cls-3<<5|8208),cls=0)}for(;cls--;)w2(cln);cls=1;cln=c3[i2]}return{c:cl2.subarray(0,cli),n:s2}};clen=function(cf2,cl2){var i2,l2=0;for(i2=0;i2>8;out[o2+2]=255^out[o2];out[o2+3]=255^out[o2+1];for(i2=0;i24&&!lct[clim[nlcc-1]];--nlcc);flen=bl2+5<<3;ftlen=clen(lf,flt)+clen(df,fdt)+eb;dtlen=clen(lf,dlt)+clen(df,ddt)+eb+14+3*nlcc+clen(lcfreq,lct)+2*lcfreq[16]+3*lcfreq[17]+7*lcfreq[18];if(bs2>=0&&flen<=ftlen&&flen<=dtlen)return wfblk(out,p2,dat.subarray(bs2,bs2+bl2));wbits(out,p2,1+(dtlen15&&(wbits(out,p2,clct[i2]>>5&127),p2+=clct[i2]>>12)}}}else lm=flm,ll=flt,dm=fdm,dl=fdt;for(i2=0;i2255){wbits16(out,p2,lm[257+(len=sym>>18&31)]),p2+=ll[len+257];len>7&&(wbits(out,p2,sym>>23&31),p2+=fleb[len]);wbits16(out,p2,dm[dst=31&sym]),p2+=dl[dst];dst>3&&(wbits16(out,p2,sym>>5&8191),p2+=fdeb[dst])}else wbits16(out,p2,lm[sym]),p2+=ll[sym];wbits16(out,p2,lm[256]);return p2+ll[256]};deo=new i32([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]);et=new u8(0);dflt=function(dat,lvl,plvl,pre,post,st){var opt,n3,c3,msk_1,prev,head2,bs1_1,bs2_1,hsh,syms,lf,df,lc_1,eb,i2,li,wi,bs2,hv,imod,pimod,rem,j2,l2,d4,ch_1,dif,maxn,maxd,ml,nl,mmd,md,ti,cd2,lin,din,e3,s2=st.z||dat.length,o2=new u8(pre+s2+5*(1+Math.ceil(s2/7e3))+post),w2=o2.subarray(pre,o2.length-post),lst=st.l,pos=7&(st.r||0);if(lvl){pos&&(w2[0]=st.r>>3);n3=(opt=deo[lvl-1])>>13,c3=8191&opt;msk_1=(1<7e3||li>24576)&&(rem>423||!lst)){pos=wblk(dat,w2,0,syms,lf,df,eb,li,bs2,i2-bs2,pos);li=lc_1=eb=0,bs2=i2;for(j2=0;j2<286;++j2)lf[j2]=0;for(j2=0;j2<30;++j2)df[j2]=0}l2=2,d4=0,ch_1=c3,dif=imod-pimod&32767;if(rem>2&&hv==hsh(i2-dif)){maxn=Math.min(n3,rem)-1;maxd=Math.min(32767,i2);ml=Math.min(258,rem);for(;dif<=maxd&&--ch_1&&imod!=pimod;){if(dat[i2+l2]==dat[i2+l2-dif]){nl=0;for(;nll2){l2=nl,d4=dif;if(nl>maxn)break;mmd=Math.min(dif,nl-2);md=0;for(j2=0;j2md&&(md=cd2,pimod=ti)}}dif+=(imod=pimod)-(pimod=prev[imod])&32767}}if(d4){syms[li++]=268435456|revfl[l2]<<18|revfd[d4];lin=31&revfl[l2],din=31&revfd[d4];eb+=fleb[lin]+fdeb[din];++lf[257+lin];++df[din];wi=i2+l2;++lc_1}else{syms[li++]=dat[i2];++lf[dat[i2]]}}}for(i2=Math.max(i2,wi);i2=s2){w2[pos/8|0]=lst;e3=s2}pos=wfblk(w2,pos+1,dat.subarray(i2,e3))}st.i=s2}return slc(o2,0,pre+shft(pos)+post)};0;0;dopt=function(dat,opt,pre,post,st){var dict,newDat;if(!st){st={l:1};if(opt.dictionary){dict=opt.dictionary.subarray(-32768);(newDat=new u8(dict.length+dat.length)).set(dict);newDat.set(dat,dict.length);dat=newDat;st.w=dict.length}}return dflt(dat,null==opt.level?6:opt.level,null==opt.mem?st.l?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(dat.length)))):20:12+opt.mem,pre,post,st)};mrg=function(a2,b3){var k2,o2={};for(k2 in a2)o2[k2]=a2[k2];for(k2 in b3)o2[k2]=b3[k2];return o2};wcln=function(fn,fnStr,td3){var i2,v2,k2,st_1,spInd,t9,dt=fn(),st=fn.toString(),ks=st.slice(st.indexOf("[")+1,st.lastIndexOf("]")).replace(/\s+/g,"").split(",");for(i2=0;i2{db.transform({incoming:async doc=>compress?await compressDoc(doc):doc,outgoing:async doc=>await decompressDoc(doc)})};MARK_SHIFT_COMPRESSED="LZ";CheckPointInfoDefault={lastLocalSeq:0,journalEpoch:"",knownIDs:new Set,sentIDs:new Set,receivedFiles:new Set,sentFiles:new Set};DatabaseReadLayer=class{constructor(database){this.database=database}isChunkDoc(doc){return doc&&"string"==typeof doc._id&&"leaf"===doc.type}getError(error){return error instanceof Error?error:"error"in error&&error.error instanceof Error?error.error:void 0}isMissingError(error){return"status"in error&&404===error.status||"error"in error&&"not_found"===error.error||"error"in error&&this.isMissingError(error.error)}async read(ids,options,next2){if(0===ids.length)return[];const resultMap=new Map,remainingIds=[];try{const results=await this.database.allDocs({keys:ids,include_docs:!0});for(const row of results.rows)if("doc"in row&&row.doc&&this.isChunkDoc(row.doc)){const chunk=row.doc;resultMap.set(chunk._id,chunk)}else{if(!this.isMissingError(row))throw new LiveSyncError(`Failed to read chunk ${row.key}`,{status:404,cause:this.getError(row)});{const idFromRow="string"==typeof row.key?row.key:void 0;idFromRow&&remainingIds.push(idFromRow)}}}catch(error){if(error instanceof LiveSyncError)throw error;Logger(`Database read error: ${error}`,LOG_LEVEL_VERBOSE);return ids.map(()=>!1)}if(0===remainingIds.length)return ids.map(id=>{var _a8;return null!=(_a8=resultMap.get(id))&&_a8});const nextResults=await next2(remainingIds),nextResultMap=new Map(remainingIds.map((id,index6)=>[id,nextResults[index6]]));return[...ids.map(id=>{var _a8,_b5;return null!=(_b5=null!=(_a8=resultMap.get(id))?_a8:nextResultMap.get(id))&&_b5})]}};CacheLayer=class{constructor(maxCacheSize){this.caches=new Map;this.allocCount=0;this.derefCount=0;this.maxCacheSize=maxCacheSize}getCachedChunk(id){if(!this.caches.has(id))return!1;const weakRef=this.caches.get(id);if(weakRef){const cachedChunk=weakRef.deref();if(cachedChunk)return cachedChunk;this.derefCount++;this.deleteCachedChunk(id);return!1}return!1}getChunkIDFromCache(data){for(const[id,weakRef]of this.caches){const chunk=weakRef.deref();if(chunk){if(chunk.data===data)return id}else{this.derefCount++;this.deleteCachedChunk(id)}}return!1}cacheChunk(chunk){if(this.getCachedChunk(chunk._id))this.reorderChunk(chunk._id);else{this.caches.set(chunk._id,new FallbackWeakRef(chunk));this.allocCount++;if(this.caches.size>this.maxCacheSize)do{const firstKey=this.caches.keys().next().value;firstKey&&this.caches.delete(firstKey)}while(this.caches.size>this.maxCacheSize)}}reorderChunk(id){const chunk=this.getCachedChunk(id);if(chunk){this.caches.delete(id);this.caches.set(id,new FallbackWeakRef(chunk))}}deleteCachedChunk(id){this.caches.has(id)&&this.caches.delete(id)}clearCaches(){this.caches.clear();this.allocCount=0;this.derefCount=0}tearDown(){this.clearCaches()}getStatistics(){return{size:this.caches.size,allocCount:this.allocCount,derefCount:this.derefCount}}async read(ids,options,next2){if(options.skipCache)return next2(ids);const resultMap=new Map,remainingIds=[];for(const id of ids){const cached=this.getCachedChunk(id);if(cached){this.reorderChunk(id);resultMap.set(id,cached)}else remainingIds.push(id)}if(0===remainingIds.length)return ids.map(id=>resultMap.get(id)||!1);const nextResults=await next2(remainingIds),nextResultMap=new Map(remainingIds.map((id,index6)=>[id,nextResults[index6]]));return ids.map(id=>{var _a8,_b5;return null!=(_b5=null!=(_a8=resultMap.get(id))?_a8:nextResultMap.get(id))&&_b5})}async write(chunks,options,origin2,next2){const filtered=[],cachedCount=chunks.length;for(const chunk of chunks)this.getCachedChunk(chunk._id)?this.reorderChunk(chunk._id):filtered.push(chunk);const result=await next2(filtered);if(result.result&&!options.skipCache)for(const chunk of chunks)this.cacheChunk(chunk);result.processed&&(result.processed.cached=cachedCount-filtered.length);return result}};ArrivalWaitLayer=class{constructor(eventEmitter2){this.waitingMap=new Map;this.DEFAULT_TIMEOUT=15e3;this.eventEmitter=eventEmitter2}enqueueWaiting(id,timeout){const previous=this.waitingMap.get(id);if(previous)return previous.resolver.promise;const resolver2=promiseWithResolvers();this.waitingMap.set(id,{resolver:resolver2});return this.withTimeout(resolver2.promise,timeout,()=>{const current=this.waitingMap.get(id);current&¤t.resolver===resolver2&&this.waitingMap.delete(id);return!1})}withTimeout(proc,timeout,onTimedOut){return new Promise((resolve,reject)=>{const timer=setTimeout(()=>{resolve(onTimedOut())},timeout);proc.then(resolve).catch(reject).finally(()=>{clearTimeout(timer)})})}onChunkArrived(doc,deleted=!1){const id=doc._id;if(this.waitingMap.has(id)){const queue2=this.waitingMap.get(id);this.waitingMap.delete(id);doc._deleted||deleted?queue2.resolver.resolve(!1):queue2.resolver.resolve(doc)}}onMissingChunk(id){if(this.waitingMap.has(id)){const queue2=this.waitingMap.get(id);this.waitingMap.delete(id);queue2.resolver.resolve(!1)}}async read(ids,options,next2){var _a8;const timeout=null!=(_a8=options.timeout)?_a8:this.DEFAULT_TIMEOUT;if(timeout<=0||0===ids.length)return ids.map(()=>!1);const tasks3=ids.map(id=>this.enqueueWaiting(id,timeout));options.preventRemoteRequest||this.eventEmitter("missingChunks",ids);return await Promise.all(tasks3)}clearWaiting(){for(const[,queue2]of this.waitingMap.entries())queue2.resolver.resolve(!1);this.waitingMap.clear()}tearDown(){this.clearWaiting()}getWaitingCount(){return this.waitingMap.size}};DatabaseWriteLayer=class{constructor(database){this.database=database}async write(chunks,options=void 0,origin2,next2){if(0===chunks.length)return next2([]);try{const result=await this.database.bulkDocs(chunks,{new_edits:!(null==options?void 0:options.force)}),failed2=result.filter(res2=>"error"in res2);if(failed2.some(res2=>409!==res2.status))throw new LiveSyncError(`Failed to write chunks: ${failed2.map(res2=>res2.error).join(", ")}`,{status:500});const conflictedChunkIDs=failed2.filter(res2=>"string"==typeof res2.id).map(res2=>res2.id),nextResult=await next2(chunks),writeResult={result:!0,processed:{cached:nextResult.processed.cached,hotPack:nextResult.processed.hotPack,written:result.length-failed2.length,duplicated:conflictedChunkIDs.length}};conflictedChunkIDs.length;return writeResult}catch(error){if(error instanceof LiveSyncError)throw error;throw new LiveSyncError(`Database write layer error: ${error}`,{status:500,cause:error})}}};LayeredChunkManager=class{constructor(options){this.eventTarget=new EventTarget;this.abort=new AbortController;this.initialised=Promise.resolve();this.onChunkArrivedHandler=this.onChunkArrived.bind(this);this.onChangeHandler=this.onChange.bind(this);this.onMissingChunkRemoteHandler=this.onMissingChunkRemote.bind(this);this.concurrentTransactions=0;this.stabilised=Promise.resolve();this.options=options;const maxCacheSize=10*options.settingService.currentSettings().hashCacheMaxCount;this.cacheLayer=new CacheLayer(maxCacheSize);this.arrivalWaitLayer=new ArrivalWaitLayer((eventName,data)=>{"missingChunks"===eventName&&this.emitEvent(EVENT_MISSING_CHUNKS,data)});this.readLayers=[this.cacheLayer,new DatabaseReadLayer(this.database),this.arrivalWaitLayer];this.writeLayers=[new DatabaseWriteLayer(this.database),this.cacheLayer];this.offChangeHandler=this.changeManager.addCallback(this.onChangeHandler);this.addListener(EVENT_CHUNK_FETCHED,this.onChunkArrivedHandler,{signal:this.abort.signal});this.addListener(EVENT_MISSING_CHUNK_REMOTE,this.onMissingChunkRemoteHandler,{signal:this.abort.signal});this.initialised=this._initialise()}get changeManager(){return this.options.changeManager}get database(){return this.options.database}get cacheStatistics(){return this.cacheLayer.getStatistics()}addListener(type,listener,options){const callback=ev=>{listener.call(this,ev.detail)};this.eventTarget.addEventListener(type,callback,options);return()=>{this.eventTarget.removeEventListener(type,callback,options)}}emitEvent(type,detail){const event2=new CustomEvent(type,{detail});this.eventTarget.dispatchEvent(event2)}async _initialise(){Logger("ChunkManager initialised",LOG_LEVEL_VERBOSE);return await Promise.resolve()}destroy(){const layers=unique([...this.readLayers,...this.writeLayers]);this.abort.abort();this.offChangeHandler();for(const layer of layers)layer.tearDown&&layer.tearDown()}getCachedChunk(id){return this.cacheLayer.getCachedChunk(id)}getChunkIDFromCache(data){return this.cacheLayer.getChunkIDFromCache(data)}cacheChunk(chunk){this.cacheLayer.cacheChunk(chunk)}clearCaches(){this.cacheLayer.clearCaches()}async read(ids,options,preloadedChunks){const order=[...ids],resultMap=new Map(ids.map(id=>[id,!1])),readIds=new Set([...resultMap.keys()]);if(preloadedChunks)for(const[id,chunk]of Object.entries(preloadedChunks))if(this.isChunkDoc(chunk)){this.cacheLayer.cacheChunk(chunk);resultMap.set(id,chunk);readIds.delete(id)}const results=await this.executeReadPipeline([...readIds],options);for(let i2=0;i2resultMap.get(id)||!1)}executeReadPipeline(ids,options){let layerIndex=0;const layers=this.readLayers,executeNextLayer=remaining=>{if(layerIndex>=layers.length)return Promise.resolve(remaining.map(()=>!1));const layer=layers[layerIndex];layerIndex++;return layer.read(remaining,options,executeNextLayer)};return executeNextLayer(ids)}async write(chunks,options,origin2){return await this.executeWritePipeline(chunks,options,origin2)}executeWritePipeline(chunks,options,origin2){let layerIndex=0;const layers=this.writeLayers,executeNextLayer=remaining=>{if(layerIndex>=layers.length)return Promise.resolve({result:!0,processed:{cached:0,hotPack:0,written:0,duplicated:0}});const layer=layers[layerIndex];layerIndex++;return layer.write(remaining,options,origin2,executeNextLayer)};return executeNextLayer(chunks)}isChunkDoc(doc){return doc&&"string"==typeof doc._id&&"leaf"===doc.type}onChunkArrived(doc,deleted=!1){this.arrivalWaitLayer.onChunkArrived(doc,deleted)}onChange(change){const doc=change.doc;doc&&doc._id&&"leaf"===doc.type&&this.onChunkArrived(doc,change.deleted)}onMissingChunkRemote(id){this.arrivalWaitLayer.onMissingChunk(id)}async transaction(callback){await this.initialised;await this.stabilised;this.concurrentTransactions++;try{return await callback()}finally{this.concurrentTransactions--;if(0===this.concurrentTransactions){Logger("All transactions completed. Performing stabilisation.",LOG_LEVEL_VERBOSE);await this._stabilise()}else Logger(`Transaction completed. Remaining: ${this.concurrentTransactions}`,LOG_LEVEL_VERBOSE)}}async _stabilise(){const pr=promiseWithResolvers();this.stabilised=pr.promise;try{await this.__stabilise()}finally{pr.resolve()}}__stabilise(){return Promise.resolve()}};EVENT_MISSING_CHUNKS="missingChunks";EVENT_MISSING_CHUNK_REMOTE="missingChunkRemote";EVENT_CHUNK_FETCHED="chunkFetched";ChunkFetcher=class{constructor(options){this.queue=[];this.abort=new AbortController;this.onEventHandler=this.onEvent.bind(this);this.currentProcessing=0;this.previousRequestTime=0;this.options=options;this.chunkManager.addListener(EVENT_MISSING_CHUNKS,this.onEventHandler,{signal:this.abort.signal})}get chunkManager(){return this.options.chunkManager}get interval(){return this.options.settingService.currentSettings().minimumIntervalOfReadChunksOnline||DEFAULT_SETTINGS.minimumIntervalOfReadChunksOnline}get concurrency(){return this.options.settingService.currentSettings().concurrencyOfReadChunksOnline||DEFAULT_SETTINGS.concurrencyOfReadChunksOnline}destroy(){this.abort.abort();this.queue=[]}onEvent(ids){this.queue=unique([...this.queue,...ids]);this.canRequestMore()&&setTimeout(()=>{this.requestMissingChunks()},1)}canRequestMore(){return this.currentProcessing0}async requestMissingChunks(){if(this.canRequestMore())try{let isValidChunk2=function(chunk){return chunk&&"string"==typeof(null==chunk?void 0:chunk._id)&&"string"==typeof(null==chunk?void 0:chunk.data)};this.currentProcessing++;const requestIDs=this.queue.splice(0,100),now3=Date.now(),timeSinceLastRequest=now3-this.previousRequestTime;this.previousRequestTime=now3;const timeToWait=Math.max(this.interval-timeSinceLastRequest,0);timeToWait>0&&await delay(timeToWait);const replicator=this.options.replicatorService.getActiveReplicator();if(!replicator){Logger("No active replicator was found to request missing chunks.");return}const fetched=await replicator.fetchRemoteChunks(requestIDs,!1);if(!fetched){Logger(`No chunks were found for the following IDs: ${requestIDs.join(", ")}`);for(const chunkID of requestIDs)this.chunkManager.emitEvent(EVENT_MISSING_CHUNK_REMOTE,chunkID);return}const chunks=fetched.filter(chunk=>isValidChunk2(chunk));if(chunks.length!==fetched.length){Logger(`Some fetched chunks are invalid and will be ignored: (${fetched.length-chunks.length} / ${fetched.length}).`,LOG_LEVEL_VERBOSE);for(const chunk of fetched)isValidChunk2(chunk)||Logger(`Invalid chunk: ${JSON.stringify(chunk)}`,LOG_LEVEL_VERBOSE)}0===chunks.length&&Logger(`No valid chunks were found for the following IDs: ${requestIDs.join(", ")}`);const missingIDs=requestIDs.filter(id=>!chunks.some(chunk=>chunk._id===id));try{if(0===chunks.length)return;Logger(`Writing fetched chunks (${chunks.length}) to the database...`);!0===(await this.chunkManager.write(chunks,{skipCache:!0,force:!0},"ChunkFetcher")).result?Logger(`Fetched chunks were stored successfully: ${chunks.length}`,LOG_LEVEL_VERBOSE):Logger(`Fetched chunks could not be stored: ${chunks.map(chunk=>chunk._id).join(", ")}`,LOG_LEVEL_VERBOSE)}catch(error){Logger(`An error occurred while storing fetched chunks: ${error}`,LOG_LEVEL_VERBOSE)}finally{for(const chunk of chunks)this.chunkManager.emitEvent(EVENT_CHUNK_FETCHED,chunk);for(const chunkID of missingIDs)this.chunkManager.emitEvent(EVENT_MISSING_CHUNK_REMOTE,chunkID)}}finally{this.currentProcessing--;this.previousRequestTime=Date.now();this.queue.length>0&&setTimeout(()=>{this.requestMissingChunks()},0)}}};ContentSplitterCore=class{constructor(params){this.options=params;this.initialised=this.initialise(params)}};ContentSplitterBase=class extends ContentSplitterCore{initialise(_options3){this.options=_options3;return Promise.resolve(!0)}static isAvailableFor(setting){return!1}getParamsFor(entry){const settings=this.options.settingService.currentSettings(),pieceSize=Math.floor(102400*(1*(settings.customChunkSize||0)+1)),minimumChunkSize=settings.minimumChunkSize,path2=entry.path,plainSplit=shouldSplitAsPlainText(path2),blob=entry.data instanceof Blob?entry.data:createTextBlob(entry.data);let useWorker=!0;settings.disableWorkerForGeneratingChunks&&(useWorker=!1);useWorker&&settings.processSmallFilesInUIThread&&blob.size<=1024&&(useWorker=!1);return{blob,path:path2,pieceSize,plainSplit,minimumChunkSize,useWorker,useSegmenter:"v2-segmenter"===settings.chunkSplitterVersion}}async splitContent(entry){await this.initialised;const options=this.getParamsFor(entry);return await this.processSplit(options)}};charNewLine="\n".charCodeAt(0);segmenter="Segmenter"in Intl?function wrapByDefault(func,onError){try{return func()}catch(ex){return onError(ex)}}(()=>new Intl.Segmenter(navigator.language,{granularity:"sentence"}),err3=>{Logger(`Failed to create Intl.Segmenter: ${err3.message}`,LOG_LEVEL_VERBOSE)}):void 0;MAX_ITEMS=100;ContentSplitterRabinKarp=class extends ContentSplitterBase{static isAvailableFor(setting){return"v3-rabin-karp"===setting.settingService.currentSettings().chunkSplitterVersion}async processSplit(options){return options.useWorker?splitPieces2WorkerRabinKarp(options.blob,options.pieceSize,options.plainSplit,options.minimumChunkSize,options.path)():(await splitPiecesRabinKarp(options.blob,options.pieceSize,options.plainSplit,options.minimumChunkSize,options.path))()}};ContentSplitters=[class extends ContentSplitterBase{static isAvailableFor(setting){const settings=setting.settingService.currentSettings();return"v1"===settings.chunkSplitterVersion||""===settings.chunkSplitterVersion||void 0===settings.chunkSplitterVersion}async processSplit(options){return options.useWorker?splitPieces2Worker(options.blob,options.pieceSize,options.plainSplit,options.minimumChunkSize,options.path,options.useSegmenter)():(await splitPieces2(options.blob,options.pieceSize,options.plainSplit,options.minimumChunkSize,options.path,options.useSegmenter))()}},class extends ContentSplitterBase{static isAvailableFor(setting){const settings=setting.settingService.currentSettings();return"v2"===settings.chunkSplitterVersion||"v2-segmenter"===settings.chunkSplitterVersion}async processSplit(options){return options.useWorker?splitPieces2WorkerV2(options.blob,options.pieceSize,options.plainSplit,options.minimumChunkSize,options.path,options.useSegmenter)():(await splitPieces2V2(options.blob,options.pieceSize,options.plainSplit,options.minimumChunkSize,options.path,options.useSegmenter))()}},ContentSplitterRabinKarp];ContentSplitter=class extends ContentSplitterCore{constructor(options){super(options)}initialise(options){for(const Splitter of ContentSplitters)if(Splitter.isAvailableFor(options)){this._activeSplitter=new Splitter(options);break}if(!this._activeSplitter)throw new Error("ContentSplitter: No available splitter for settings!!");return this._activeSplitter.initialise(options)}async splitContent(entry){await this.initialised;return this._activeSplitter.splitContent(entry)}};ChangeManager=class{constructor(options){this._callbacks=[];this._database=options.database;this.setupListener()}addCallback(callback){const callbackHandler=new FallbackWeakRef(callback);this._callbacks.push(callbackHandler);return()=>{this._callbacks=this._callbacks.filter(cb2=>cb2!==callbackHandler)}}removeCallback(callback){this._callbacks=this._callbacks.filter(cb2=>cb2.deref()!==callback)}async _onChange(changeResponse){var _a8;if(this._callbacks.length){this._callbacks=this._callbacks.filter(callback=>void 0!==callback.deref());for(const callback of this._callbacks)try{const cb2=callback.deref();if(!cb2)continue;await Promise.resolve(cb2(changeResponse))}catch(err3){null==(_a8=this._changes)||_a8.emit("error",err3)}}}setupListener(){if(this._changes){const changes4=this._changes;this._changes=void 0;changes4.removeAllListeners();changes4.cancel()}const changes3=this._database.changes({since:"now",live:!0,include_docs:!0});changes3.on("change",change=>{this._onChange(change)});changes3.on("error",err3=>{Logger("ChangeManager Error watching changes");Logger(err3,LOG_LEVEL_VERBOSE)});this._changes=changes3}teardown(){var _a8,_b5;null==(_a8=this._changes)||_a8.removeAllListeners();null==(_b5=this._changes)||_b5.cancel();this._changes=void 0}restartWatch(){this.teardown();this.setupListener()}};import_diff_match_patch3=__toESM(require_diff_match_patch(),1);ConflictManager=class{constructor(options){this.options=options}get database(){return this.options.database}async getConflictedDoc(path2,rev3){try{const doc=await this.options.entryManager.getDBEntry(path2,{rev:rev3},!1,!0,!0);if(!1===doc)return!1;let data=getDocData(doc.data);"newnote"==doc.datatype?data=readString(new Uint8Array(decodeBinary(doc.data))):doc.datatype;return{deleted:doc.deleted||doc._deleted,ctime:doc.ctime,mtime:doc.mtime,rev:rev3,data}}catch(ex){if(isErrorOfMissingDoc(ex))return!1}return!1}async mergeSensibly(path2,baseRev,currentRev,conflictedRev){function splitDiffPiece(src){const ret=[];do{const d4=src.shift();if(void 0===d4)return ret;const pieces=d4[1].split(/([^\n]*\n)/).filter(f4=>""!=f4);if(void 0===d4)break;d4[0]!=import_diff_match_patch3.DIFF_DELETE&&ret.push(...pieces.map(e3=>[d4[0],e3]));if(d4[0]==import_diff_match_patch3.DIFF_DELETE){const nd=src.shift();if(void 0!==nd){const piecesPair=nd[1].split(/([^\n]*\n)/).filter(f4=>""!=f4);if(nd[0]==import_diff_match_patch3.DIFF_INSERT){for(const pt of pieces){ret.push([d4[0],pt]);const pairP=piecesPair.shift();void 0!==pairP&&ret.push([import_diff_match_patch3.DIFF_INSERT,pairP])}ret.push(...piecesPair.map(e3=>[nd[0],e3]))}else{ret.push(...pieces.map(e3=>[d4[0],e3]));ret.push(...piecesPair.map(e3=>[nd[0],e3]))}}else ret.push(...pieces.map(e3=>[0,e3]))}}while(src.length>0);return ret}var _a8,_b5,_c3,_d2;const baseLeaf=await this.getConflictedDoc(path2,baseRev),leftLeaf=await this.getConflictedDoc(path2,currentRev),rightLeaf=await this.getConflictedDoc(path2,conflictedRev);let autoMerge=!1;if(0==baseLeaf||0==leftLeaf||0==rightLeaf)return!1;if(leftLeaf.deleted&&rightLeaf.deleted)return!1;const dmp=new import_diff_match_patch3.diff_match_patch,mapLeft=dmp.diff_linesToChars_(baseLeaf.data,leftLeaf.data),diffLeftSrc=dmp.diff_main(mapLeft.chars1,mapLeft.chars2,!1);dmp.diff_charsToLines_(diffLeftSrc,mapLeft.lineArray);const mapRight=dmp.diff_linesToChars_(baseLeaf.data,rightLeaf.data),diffRightSrc=dmp.diff_main(mapRight.chars1,mapRight.chars2,!1);dmp.diff_charsToLines_(diffRightSrc,mapRight.lineArray);const diffLeft=splitDiffPiece(diffLeftSrc),diffRight=splitDiffPiece(diffRightSrc);let rightIdx=0,leftIdx=0;const merged=[];autoMerge=!0;LOOP_MERGE:do{if(leftIdx>=diffLeft.length&&rightIdx>=diffRight.length)break LOOP_MERGE;const leftItem=null!=(_a8=diffLeft[leftIdx])?_a8:[0,""],rightItem=null!=(_b5=diffRight[rightIdx])?_b5:[0,""];leftIdx++;rightIdx++;if(leftItem[0]!=import_diff_match_patch3.DIFF_EQUAL||rightItem[0]!=import_diff_match_patch3.DIFF_EQUAL||leftItem[1]!=rightItem[1]){if(leftItem[0]==import_diff_match_patch3.DIFF_DELETE&&rightItem[0]==import_diff_match_patch3.DIFF_DELETE&&leftItem[1]==rightItem[1]){const nextLeftIdx=leftIdx,nextRightIdx=rightIdx,[nextLeftItem,nextRightItem]=[null!=(_c3=diffLeft[nextLeftIdx])?_c3:[0,""],null!=(_d2=diffRight[nextRightIdx])?_d2:[0,""]];if(nextLeftItem[0]==import_diff_match_patch3.DIFF_INSERT&&nextRightItem[0]==import_diff_match_patch3.DIFF_INSERT&&nextLeftItem[1]!=nextRightItem[1]){autoMerge=!1;break}merged.push(leftItem);continue}if(leftItem[0]!=import_diff_match_patch3.DIFF_INSERT||rightItem[0]!=import_diff_match_patch3.DIFF_INSERT)if(leftItem[0]!=import_diff_match_patch3.DIFF_INSERT){if(rightItem[0]!=import_diff_match_patch3.DIFF_INSERT){if(rightItem[1]!=leftItem[1]){Logger(`MERGING PANIC:${leftItem[0]},${leftItem[1]} == ${rightItem[0]},${rightItem[1]}`,LOG_LEVEL_VERBOSE);autoMerge=!1;break LOOP_MERGE}if(leftItem[0]==import_diff_match_patch3.DIFF_DELETE){if(rightItem[0]==import_diff_match_patch3.DIFF_EQUAL){merged.push(leftItem);continue}autoMerge=!1;break LOOP_MERGE}if(rightItem[0]==import_diff_match_patch3.DIFF_DELETE){if(leftItem[0]==import_diff_match_patch3.DIFF_EQUAL){merged.push(rightItem);continue}autoMerge=!1;break LOOP_MERGE}Logger(`Weird condition:${leftItem[0]},${leftItem[1]} == ${rightItem[0]},${rightItem[1]}`,LOG_LEVEL_VERBOSE);break LOOP_MERGE}leftIdx--;merged.push(rightItem)}else{rightIdx--;merged.push(leftItem)}else{if(leftItem[1]==rightItem[1]){merged.push(leftItem);continue}if(leftLeaf.mtime<=rightLeaf.mtime){merged.push(leftItem);merged.push(rightItem);continue}merged.push(rightItem);merged.push(leftItem)}}else merged.push(leftItem)}while(leftIdxa2.mtime-b3.mtime);let newObj={...baseObj};for(const patch of patches)newObj=applyPatch(newObj,patch.patch);Logger("Object merge is applicable!",LOG_LEVEL_VERBOSE);return JSON.stringify(newObj.data)}catch(ex){Logger("Could not merge object");Logger(ex,LOG_LEVEL_VERBOSE);return!1}}async tryAutoMergeSensibly(path2,test,conflicts){var _a8,_b5,_c3;const conflictedRev=conflicts[0],conflictedRevNo=Number(conflictedRev.split("-")[0]),commonBase=null!=(_c3=null==(_b5=null==(_a8=((await this.database.get(await this.options.pathService.path2id(path2),{revs_info:!0}))._revs_info||[]).filter(e3=>"available"==e3.status&&Number(e3.rev.split("-")[0])e3[0]!=import_diff_match_patch3.DIFF_DELETE).map(e3=>e3[1]).join("");Logger(`Sensible merge:${path2}`,LOG_LEVEL_INFO)}else Logger("Sensible merge is not applicable.",LOG_LEVEL_VERBOSE)}else if(isObjectMargeApplicable(path2)){const result=await this.mergeObject(path2,commonBase,test._rev,conflictedRev);if(result){Logger(`Object merge:${path2}`,LOG_LEVEL_INFO);p2=result}else Logger("Object merge is not applicable..",LOG_LEVEL_VERBOSE)}if(void 0!==p2)return{result:p2,conflictedRev}}return!1}async tryAutoMerge(path2,enableMarkdownAutoMerge){const test=await this.options.entryManager.getDBEntry(path2,{conflicts:!0,revs_info:!0},!1,!1,!0);if(!1===test)return{ok:MISSING_OR_ERROR};if(null==test)return{ok:MISSING_OR_ERROR};if(!test._conflicts)return{ok:NOT_CONFLICTED};if(0==test._conflicts.length)return{ok:NOT_CONFLICTED};const conflicts=test._conflicts.sort((a2,b3)=>Number(a2.split("-")[0])-Number(b3.split("-")[0]));if((isSensibleMargeApplicable(path2)||isObjectMargeApplicable(path2))&&enableMarkdownAutoMerge){const autoMergeResult=await this.tryAutoMergeSensibly(path2,test,conflicts);if(!1!==autoMergeResult)return autoMergeResult}const leftLeaf=await this.getConflictedDoc(path2,test._rev),rightLeaf=await this.getConflictedDoc(path2,conflicts[0]);return{leftRev:test._rev,rightRev:conflicts[0],leftLeaf,rightLeaf}}};EntryManager=class{constructor(options){this.options=options}get localDatabase(){return this.options.database}get hashManager(){return this.options.hashManager}get chunkManager(){return this.options.chunkManager}get splitter(){return this.options.splitter}get serviceHost(){return{services:{setting:this.options.settingService,path:this.options.pathService},serviceModules:{}}}get isOnDemandChunkEnabled(){const settings=this.options.settingService.currentSettings();return settings.remoteType===REMOTE_COUCHDB&&!settings.useOnlyLocalChunk}isTargetFile(filenameSrc){return isTargetFile(this.serviceHost,filenameSrc)}async prepareChunk(piece){return await prepareChunk(this,piece)}async getDBEntryMeta(path2,opt,includeDeleted=!1){return await getDBEntryMetaByPath(this.serviceHost,this,path2,opt,includeDeleted)}async getDBEntry(path2,opt,dump=!1,waitForReady=!0,includeDeleted=!1){return await getDBEntryByPath(this.serviceHost,this,path2,opt,dump,waitForReady,includeDeleted)}async getDBEntryFromMeta(meta,dump=!1,waitForReady=!0){return await getDBEntryFromMeta(this.serviceHost,this,meta,dump,waitForReady)}async deleteDBEntry(path2,opt){return await deleteDBEntryByPath(this.serviceHost,this,path2,opt)}async putDBEntry(note,onlyChunks){return await putDBEntry(this.serviceHost,this,note,onlyChunks)}};HashManagerCore=class{constructor(options){this.useEncryption=!1;this.hashedPassphrase="";this.hashedPassphrase32=0;this.options=options;this.settingService=options.settingService;this.applyOptions(options)}applyOptions(options){var _a8;options&&(this.options=options);const settings=this.options.settingService.currentSettings();this.useEncryption=null!=(_a8=settings.encrypt)&&_a8;const passphrase=settings.passphrase||"",usingLetters=~~(passphrase.length/4*3),passphraseForHash="a83hrf7fy7sa8g31"+passphrase.substring(0,usingLetters);this.hashedPassphrase=fallbackMixedHashEach(passphraseForHash);this.hashedPassphrase32=mixedHash(passphraseForHash,305419896)[0]}initialise(){if(this.initialiseTask)return this.initialiseTask;this.initialiseTask=this.processInitialise();return this.initialiseTask}async computeHash(piece){return this.useEncryption?"+"+await this.computeHashWithEncryption(piece):await this.computeHashWithoutEncryption(piece)}static isAvailableFor(hashAlg){return!1}};XXHashHashManager=class extends HashManagerCore{constructor(options){super(options)}async processInitialise(){this.xxhash=await e();return!0}};XXHash32RawHashManager=class extends XXHashHashManager{static isAvailableFor(hashAlg){return""===hashAlg}computeHashWithEncryption(piece){return Promise.resolve((this.xxhash.h32Raw((new TextEncoder).encode(piece))^this.hashedPassphrase32^piece.length).toString(36))}computeHashWithoutEncryption(piece){return Promise.resolve((this.xxhash.h32Raw((new TextEncoder).encode(piece))^piece.length).toString(36))}};XXHash64HashManager=class extends XXHashHashManager{static isAvailableFor(hashAlg){return"xxhash64"===hashAlg}computeHashWithEncryption(piece){return Promise.resolve(this.xxhash.h64(`${piece}-${this.hashedPassphrase}-${piece.length}`).toString(36))}computeHashWithoutEncryption(piece){return Promise.resolve(this.xxhash.h64(`${piece}-${piece.length}`).toString(36))}};FallbackWasmHashManager=class extends XXHashHashManager{static isAvailableFor(hashAlg){return!0}computeHashWithEncryption(piece){return Promise.resolve(this.xxhash.h32(`${piece}-${this.hashedPassphrase}-${piece.length}`).toString(36))}computeHashWithoutEncryption(piece){return Promise.resolve(this.xxhash.h32(`${piece}-${piece.length}`).toString(36))}};PureJSHashManager=class extends HashManagerCore{static isAvailableFor(hashAlg){return"mixed-purejs"===hashAlg}processInitialise(){return Promise.resolve(!0)}computeHashWithEncryption(input){return Promise.resolve(fallbackMixedHashEach(`${input}${this.hashedPassphrase}${input.length}`))}computeHashWithoutEncryption(input){return Promise.resolve(fallbackMixedHashEach(`${input}-${input.length}`))}};HashManagers=[XXHash64HashManager,XXHash32RawHashManager,class extends HashManagerCore{static isAvailableFor(hashAlg){return"sha1"===hashAlg}processInitialise(){return Promise.resolve(!0)}computeHashWithEncryption(input){return sha12(`${input}-${this.hashedPassphrase}-${input.length}`)}computeHashWithoutEncryption(input){return sha12(`${input}-${input.length}`)}},PureJSHashManager,FallbackWasmHashManager,class extends PureJSHashManager{static isAvailableFor(_hashAlg){return!0}}];HashManager=class extends HashManagerCore{constructor(options){super(options);this.manager=void 0}static isAvailableFor(hashAlg){return HashManagers.some(manager=>manager.isAvailableFor(hashAlg))}async setManager(){const settings=this.options.settingService.currentSettings();for(const Manager of HashManagers)if(Manager.isAvailableFor(settings.hashAlg)){this.manager=new Manager(this.options);return await this.manager.initialise()}throw new Error(`HashManager for ${settings.hashAlg} is not available`)}async processInitialise(){const settings=this.options.settingService.currentSettings();if(await this.setManager()){Logger(`HashManager for ${settings.hashAlg} has been initialised`,LOG_LEVEL_VERBOSE);return!0}Logger(`HashManager for ${settings.hashAlg} failed to initialise`);throw new Error(`HashManager for ${settings.hashAlg} failed to initialise`)}async computeHash(piece){return await this.manager.computeHash(piece)}computeHashWithoutEncryption(piece){return this.manager.computeHashWithoutEncryption(piece)}computeHashWithEncryption(piece){return this.manager.computeHashWithEncryption(piece)}};LiveSyncManagers=class{constructor(options){this.options=options;this._APIService=options.APIService;this._pathService=options.pathService;this._replicatorService=options.replicatorService;this._settingService=options.settingService;this.log=createInstanceLogFunction("LiveSyncManagers",this._APIService);const{changeManager,hashManager,splitter,chunkManager,chunkFetcher,entryManager,conflictManager}=this.getManagerMembers();this.changeManager=changeManager;this.hashManager=hashManager;this.splitter=splitter;this.chunkManager=chunkManager;this.chunkFetcher=chunkFetcher;this.entryManager=entryManager;this.conflictManager=conflictManager}async teardownManagers(){this.log("Teardown LiveSync Managers...",LOG_LEVEL_VERBOSE);if(this.changeManager){this.changeManager.teardown();this.changeManager=void 0}if(this.chunkFetcher){this.chunkFetcher.destroy();this.chunkFetcher=void 0}if(this.chunkManager){this.chunkManager.destroy();this.chunkManager=void 0}this.log("Teardown LiveSync Managers... Done");return await Promise.resolve()}getManagerMembers(){this.log("Creating LiveSync Managers...");const database=this.options.databaseService.localDatabase.localDatabase,changeManager=new ChangeManager({database}),hashManager=new HashManager({settingService:this.options.settingService}),splitter=new ContentSplitter({settingService:this.options.settingService}),chunkManager=new LayeredChunkManager({changeManager,database,settingService:this.options.settingService}),chunkFetcher=new ChunkFetcher({chunkManager,replicatorService:this.options.replicatorService,settingService:this.options.settingService}),entryManager=new EntryManager({database,hashManager,chunkManager,splitter,pathService:this._pathService,settingService:this.options.settingService}),conflictManager=new ConflictManager({entryManager,database,pathService:this._pathService});this.log("LiveSync Managers have been created");return{changeManager,hashManager,splitter,chunkManager,chunkFetcher,entryManager,conflictManager}}async initialise(){this.log("Initialising LiveSync Managers...",LOG_LEVEL_VERBOSE);await this.splitter.initialise({settingService:this.options.settingService});await this.hashManager.initialise();this.log("LiveSync Manager has been initialised")}async reinitialise(){await this.teardownManagers();const{changeManager,hashManager,splitter,chunkManager,chunkFetcher,entryManager,conflictManager}=this.getManagerMembers();this.changeManager=changeManager;this.hashManager=hashManager;this.splitter=splitter;this.chunkManager=chunkManager;this.chunkFetcher=chunkFetcher;this.entryManager=entryManager;this.conflictManager=conflictManager;await this.initialise()}clearCaches(){var _a8;null==(_a8=this.chunkManager)||_a8.clearCaches()}async prepareHashFunction(){this.hashManager=new HashManager({settingService:this.options.settingService});await this.hashManager.initialise()}};LiveSyncLocalDB=class{constructor(dbname,env){this.isReady=!1;this.needScanning=!1;this.auth={username:"",password:""};this.dbname=dbname;this.env=env;this._log=createInstanceLogFunction("LiveSyncLocalDB",this.env.services.API);this.refreshSettings()}get managers(){if(!this._managers)throw new Error("Managers are not ready yet.");return this._managers}clearCaches(){var _a8;null==(_a8=this._managers)||_a8.clearCaches()}async _prepareHashFunctions(){var _a8;await(null==(_a8=this._managers)?void 0:_a8.prepareHashFunction())}onunload(){this.env.services.databaseEvents.onUnloadDatabase(this);this.localDatabase.removeAllListeners()}refreshSettings(){const settings=this.env.services.setting.currentSettings();this.settings=settings;this._prepareHashFunctions()}async close(){var _a8;this._log("Database closed (by close)");this.isReady=!1;null==(_a8=this.offRemoteChunkFetchedHandler)||_a8.call(this);null!=this.localDatabase&&await this.localDatabase.close();await this.env.services.databaseEvents.onUnloadDatabase(this)}onNewLeaf(chunk){var _a8;null==(_a8=this.managers.chunkManager)||_a8.emitEvent(EVENT_CHUNK_FETCHED,chunk)}async initializeDatabase(){await this._prepareHashFunctions();if(null!=this.localDatabase){this.localDatabase.removeAllListeners();await this.localDatabase.close()}this.localDatabase=null;this.localDatabase=this.env.services.database.createPouchDBInstance(this.dbname+SuffixDatabaseName,{auto_compaction:!1,revs_limit:100,deterministic_revs:!0});const manager=new LiveSyncManagers({database:this.localDatabase,APIService:this.env.services.API,pathService:this.env.services.path,replicatorService:this.env.services.replicator,settingService:this.env.services.setting,databaseService:this.env.services.database});this._managers=manager;await this.env.services.databaseEvents.onDatabaseInitialisation(this)||this._log("Initializing Database has been failed on some module",LOG_LEVEL_NOTICE);this._log("Opening Database...");this._log("Database info",LOG_LEVEL_VERBOSE);this._log(JSON.stringify(await this.localDatabase.info(),null,2),LOG_LEVEL_VERBOSE);await this.managers.initialise();this.localDatabase.on("close",()=>{var _a8;this._log("Database closed.");this.isReady=!1;this.localDatabase.removeAllListeners();null==(_a8=this.env.services.replicator.getActiveReplicator())||_a8.closeReplication();this.managers.teardownManagers()});const _instance2=new FallbackWeakRef(this),unload=eventHub.onEvent("remote-chunk-fetched",chunk=>{var _a8;null==_instance2.deref()&&unload();null==(_a8=_instance2.deref())||_a8.onNewLeaf(chunk)});this.offRemoteChunkFetchedHandler=unload;this.isReady=!0;if(!await this.env.services.databaseEvents.onDatabaseHasReady()){this._log("Some module has prevented the database from being ready. The database is initialised but not ready for use.",LOG_LEVEL_NOTICE);return!1}this._log("Database is now ready.");return!0}async allChunks(includeDeleted=!1){const used=new Set,existing=new Map;let since=0;for(;;){const changes3=await this.localDatabase.changes({since,limit:100,include_docs:!0,conflicts:!0,style:includeDeleted?"all_docs":"main_only"});if(0==changes3.results.length)break;for(const change of changes3.results){const doc=change.doc;if("leaf"==doc.type){if(doc._deleted&&!includeDeleted)continue;existing.set(doc._id,doc)}if("children"in doc){if(change.deleted&&(!doc._conflicts||0==doc._conflicts.length))continue;doc.children.forEach(e3=>used.add(e3));if(doc._conflicts){const mineRevInfo=(await this.localDatabase.get(doc._id,{revs:!0,revs_info:!0}))._revs_info||[],keepRevs=new Set;for(const conflict of doc._conflicts){const conflictedRevInfo=(await this.localDatabase.get(doc._id,{rev:conflict,revs:!0,revs_info:!0}))._revs_info||[],diffRevs=mineRevInfo.filter(e3=>!conflictedRevInfo.some(f4=>f4.rev==e3.rev&&f4.status==e3.status)),diffRevs2=conflictedRevInfo.filter(e3=>!mineRevInfo.some(f4=>f4.rev==e3.rev&&f4.status==e3.status)),diffRevs3=diffRevs.concat(diffRevs2),sameRevs=mineRevInfo.filter(e3=>conflictedRevInfo.some(f4=>f4.rev==e3.rev&&f4.status==e3.status)).filter(e3=>"available"==e3.status).sort((a2,b3)=>getNoFromRev(b3.rev)-getNoFromRev(a2.rev)),sameRevsTop=sameRevs.length>0?[sameRevs[0].rev]:[];[...diffRevs3.filter(e3=>"available"==e3.status).map(e3=>e3.rev),...sameRevsTop].forEach(e3=>keepRevs.add(e3))}const detail=await this.localDatabase.bulkGet({docs:[...keepRevs.values()].map(e3=>({id:doc._id,rev:e3}))});for(const e3 of detail.results)if("docs"in e3){const docs=e3.docs;for(const doc2 of docs)"ok"in doc2&&"children"in doc2.ok&&doc2.ok.children.forEach(e4=>used.add(e4))}}}}since=changes3.results[changes3.results.length-1].seq}return{used,existing}}async resetDatabase(){var _a8;await this.managers.teardownManagers();null==(_a8=this.env.services.replicator.getActiveReplicator())||_a8.closeReplication();if(!await this.env.services.databaseEvents.onResetDatabase(this)){Logger("Database reset has been prevented or failed on some modules.",LOG_LEVEL_NOTICE);return!1}Logger("Database closed for reset Database.");this.isReady=!1;await this.localDatabase.destroy();this.localDatabase=null;await this.initializeDatabase();this._log("Local Database Reset",LOG_LEVEL_NOTICE);return!0}async*findEntries(startKey,endKey,opt){let nextKey=startKey;""==endKey&&(endKey="􏿿");let req=this.allDocsRaw({limit:100,startkey:nextKey,endkey:endKey,include_docs:!0,...opt});do{const docs=await req;if(0===docs.rows.length)break;nextKey=`${docs.rows[docs.rows.length-1].id}`;req=this.allDocsRaw({limit:100,skip:1,startkey:nextKey,endkey:endKey,include_docs:!0,...opt});for(const row of docs.rows){const doc=row.doc;"type"in doc&&("newnote"!=doc.type&&"plain"!=doc.type||(yield doc))}}while(""!=nextKey)}async*findAllDocs(opt){const targets=[()=>this.findEntries("","_",null!=opt?opt:{}),()=>this.findEntries("_􏿿","h:",null!=opt?opt:{}),()=>this.findEntries("h:􏿿","",null!=opt?opt:{})];for(const targetFun of targets)yield*targetFun()}async*findEntryNames(startKey,endKey,opt){let nextKey=startKey;""==endKey&&(endKey="􏿿");let req=this.allDocsRaw({limit:100,startkey:nextKey,endkey:endKey,...opt});do{const docs=await req;if(0==docs.rows.length){nextKey="";break}nextKey=`${docs.rows[docs.rows.length-1].key}`;req=this.allDocsRaw({limit:100,skip:1,startkey:nextKey,endkey:endKey,...opt});for(const row of docs.rows)yield row.id}while(""!=nextKey)}async*findAllDocNames(opt){const targets=[()=>this.findEntryNames("","_",null!=opt?opt:{}),()=>this.findEntryNames("_􏿿","h:",null!=opt?opt:{}),()=>this.findEntryNames("h:􏿿","i:",null!=opt?opt:{}),()=>this.findEntryNames("i:􏿿","ix:",null!=opt?opt:{}),()=>this.findEntryNames("ix:􏿿","ps:",null!=opt?opt:{}),()=>this.findEntryNames("ps:􏿿","",null!=opt?opt:{})];for(const targetFun of targets){const target=targetFun();for await(const f4 of target)f4.startsWith("_")||"obsydian_livesync_version"!=f4&&(yield f4)}}async*findAllNormalDocs(opt){const targets=[()=>this.findEntries("","_",null!=opt?opt:{}),()=>this.findEntries("_􏿿","h:",null!=opt?opt:{}),()=>this.findEntries("h:􏿿","i:",null!=opt?opt:{}),()=>this.findEntries("i:􏿿","ix:",null!=opt?opt:{}),()=>this.findEntries("ix:􏿿","ps:",null!=opt?opt:{}),()=>this.findEntries("ps:􏿿","",null!=opt?opt:{})];for(const targetFun of targets){const target=targetFun();for await(const f4 of target)f4._id.startsWith("_")||"newnote"!=f4.type&&"plain"!=f4.type||(yield f4)}}async removeRevision(docId,revision){try{const doc=await this.localDatabase.get(docId,{rev:revision});doc._deleted=!0;await this.localDatabase.put(doc);return!0}catch(ex){isErrorOfMissingDoc(ex)&&Logger(`Remove revision: Missing target revision, ${docId}-${revision}`,LOG_LEVEL_VERBOSE)}return!1}getRaw(docId,options){return this.localDatabase.get(docId,options||{})}removeRaw(docId,revision,options){return this.localDatabase.remove(docId,revision,options||{})}putRaw(doc,options){return this.localDatabase.put(doc,options||{})}allDocsRaw(options){return this.localDatabase.allDocs(options)}bulkDocsRaw(docs,options){return this.localDatabase.bulkDocs(docs,options||{})}isTargetFile(filenameSrc){return this.managers.entryManager.isTargetFile(filenameSrc)}async getDBEntryMeta(path2,opt,includeDeleted=!1){return await this.managers.entryManager.getDBEntryMeta(path2,opt,includeDeleted)}async getDBEntry(path2,opt,dump=!1,waitForReady=!0,includeDeleted=!1){return await this.managers.entryManager.getDBEntry(path2,opt,dump,waitForReady,includeDeleted)}async getDBEntryFromMeta(meta,dump=!1,waitForReady=!0){return await this.managers.entryManager.getDBEntryFromMeta(meta,dump,waitForReady)}async deleteDBEntry(path2,opt){return await this.managers.entryManager.deleteDBEntry(path2,opt)}async putDBEntry(note,onlyChunks){return await this.managers.entryManager.putDBEntry(note,onlyChunks)}async getConflictedDoc(path2,rev3){return await this.managers.conflictManager.getConflictedDoc(path2,rev3)}async tryAutoMerge(path2,enableMarkdownAutoMerge){return await this.managers.conflictManager.tryAutoMerge(path2,enableMarkdownAutoMerge)}};RECORD_SPLIT="\n";UNIT_SPLIT="";te4=new TextEncoder;JournalSyncAbstract=class{constructor(settings,store,env){this.hash="";this.batchSize=100;this.requestedStop=!1;this.notifier=new Notifier;this._currentCheckPointInfo={...CheckPointInfoDefault};this.isPacking=!1;this.isDownloading=!1;this._settings=settings;this.env=env;this.processReplication=async docs=>await env.services.replication.parseSynchroniseResult(docs);this.store=store;this.hash=this.getHash(settings);this.trench=new Trench(store);clearHandlers()}get id(){return this._settings.accessKey}get key(){return this._settings.secretKey}get bucket(){return this._settings.bucket}get endpoint(){return this._settings.endpoint}get prefix(){return this._settings.bucketPrefix}get region(){return this._settings.region}get forcePathStyle(){return this._settings.forcePathStyle}get db(){return this.env.services.database.localDatabase.localDatabase}get currentSettings(){return this.env.services.setting.currentSettings()}get useCustomRequestHandler(){return this._settings.useCustomRequestHandler}get customHeaders(){return 0==this._settings.bucketCustomHeaders.length?[]:Object.entries(parseHeaderValues(this._settings.bucketCustomHeaders))}getInitialSyncParameters(){return Promise.resolve({...DEFAULT_SYNC_PARAMETERS,protocolVersion:2,pbkdf2salt:""})}async getSyncParameters(){try{const downloadedSyncParams=await this.downloadJson("_obsidian_livesync_journal_sync_parameters.json");if(!downloadedSyncParams)throw new SyncParamsNotFoundError("Missing sync parameters");return downloadedSyncParams}catch(ex){Logger("Could not retrieve remote sync parameters",LOG_LEVEL_INFO);throw SyncParamsFetchError.fromError(ex)}}async putSyncParameters(params){try{if(await this.uploadJson("_obsidian_livesync_journal_sync_parameters.json",params))return!0;throw new SyncParamsUpdateError("Could not store remote sync parameters")}catch(ex){Logger("Could not upload sync parameters",LOG_LEVEL_INFO);Logger(ex,LOG_LEVEL_VERBOSE);throw SyncParamsUpdateError.fromError(ex)}}getHash(settings){return btoa(encodeURI([settings.endpoint,`${settings.bucket}${settings.bucketPrefix}`,settings.region].join()))}applyNewConfig(settings,store,env){this._settings=settings;this.env=env;this.processReplication=async docs=>await env.services.replication.parseSynchroniseResult(docs);this.store=store;this.hash=this.getHash(settings);clearHandlers()}updateInfo(info3){var _a8,_b5,_c3,_d2,_e2,_f,_g;const old=this.env.services.replicator.replicationStatics.value;this.env.services.replicator.replicationStatics.value={sent:null!=(_a8=info3.sent)?_a8:old.sent,arrived:null!=(_b5=info3.arrived)?_b5:old.arrived,maxPullSeq:null!=(_c3=info3.maxPullSeq)?_c3:old.maxPullSeq,maxPushSeq:null!=(_d2=info3.maxPushSeq)?_d2:old.maxPushSeq,lastSyncPullSeq:null!=(_e2=info3.lastSyncPullSeq)?_e2:old.lastSyncPullSeq,lastSyncPushSeq:null!=(_f=info3.lastSyncPushSeq)?_f:old.lastSyncPushSeq,syncStatus:null!=(_g=info3.syncStatus)?_g:old.syncStatus}}async updateCheckPointInfo(func){const checkPointKey=`bucketsync-checkpoint-${this.hash}`,newInfo=func(await this.getCheckpointInfo());this._currentCheckPointInfo=newInfo;await this.store.set(checkPointKey,newInfo);return newInfo}async getCheckpointInfo(){const checkPointKey=`bucketsync-checkpoint-${this.hash}`,old=await this.store.get(checkPointKey)||{},items=["knownIDs","sentIDs","receivedFiles","sentFiles"];for(const key3 of items){if(!(key3 in old))continue;const value=old[key3];value instanceof Set||(Array.isArray(value)?old[key3]=new Set(value):old[key3]=value&&"object"==typeof value?new Set(Object.keys(value)):new Set)}this._currentCheckPointInfo={...CheckPointInfoDefault,...old};return this._currentCheckPointInfo}async resetAllCaches(){await this.trench.eraseAllPermanences();clearHandlers()}async resetCheckpointInfo(){await this.updateCheckPointInfo(info3=>({...CheckPointInfoDefault}));clearHandlers()}getJournalEpochFromSyncParams(params){return`${params.protocolVersion}:${params.pbkdf2salt}`}async ensureCheckpointCachesAreFresh(){let journalEpoch="";try{const params=await this.getSyncParameters();journalEpoch=this.getJournalEpochFromSyncParams(params)}catch(e3){return}const current=await this.getCheckpointInfo();if(current.journalEpoch===journalEpoch)return;const lastSentFile=[...current.sentFiles].sort().pop();if(!lastSentFile){await this.updateCheckPointInfo(info3=>({...info3,journalEpoch}));return}let remoteWipeConfirmed;try{remoteWipeConfirmed=(await this.listFiles(lastSentFile.slice(0,-1),1))[0]!==lastSentFile}catch(e3){remoteWipeConfirmed=!0}if(remoteWipeConfirmed){Logger("Journal epoch changed and remote wipe confirmed. Clearing dedupe caches.",LOG_LEVEL_NOTICE);await this.updateCheckPointInfo(info3=>({...info3,journalEpoch,knownIDs:new Set,sentIDs:new Set,receivedFiles:new Set,sentFiles:new Set}));clearHandlers()}else{await this.updateCheckPointInfo(info3=>({...info3,journalEpoch}));Logger("Journal epoch changed (remote files still present). Epoch updated; caches kept.",LOG_LEVEL_NOTICE)}}getRemoteKey(){return this.getHash(this._settings)}async getReplicationPBKDF2Salt(refresh){const manager=createSyncParamsHanderForServer(this.getRemoteKey(),{put:params=>this.putSyncParameters(params),get:()=>this.getSyncParameters(),create:()=>this.getInitialSyncParameters()});return await manager.getPBKDF2Salt(refresh)}isEncryptionPrevented(fileName){return!!fileName.endsWith("_obsidian_livesync_journal_sync_parameters.json")}async decryptDataV2(encrypted,set2){const salt=await this.getReplicationPBKDF2Salt();return await decryptBinary(encrypted,set2.passphrase,salt)}async decryptDataV1(encrypted,set2){return await decryptBinary2(encrypted,set2.passphrase,set2.useDynamicIterationCount)}async decryptDownloaded(key3,encrypted,set2){const u2=new Uint8Array(encrypted);try{return!set2.encrypt||""==set2.passphrase||this.isEncryptionPrevented(key3)?u2:set2.E2EEAlgorithm===E2EEAlgorithms.ForceV1?await this.decryptDataV1(u2,set2):await this.decryptDataV2(u2,set2)}catch(ex){Logger(`Failed to decrypt in v2. Falling back to v1: ${key3}`,LOG_LEVEL_INFO);try{const r4=await this.decryptDataV1(u2,set2);Logger(`Decrypted in v1: ${key3}`,LOG_LEVEL_VERBOSE);return r4}catch(ex2){Logger(`Could not decrypt in v1: ${key3}`,LOG_LEVEL_VERBOSE);Logger(ex,LOG_LEVEL_VERBOSE);Logger(ex2,LOG_LEVEL_VERBOSE);throw ex2}}}async encryptForUpload(key3,data,set2){if(!set2.encrypt||""==set2.passphrase||this.isEncryptionPrevented(key3))return data;if(set2.E2EEAlgorithm===E2EEAlgorithms.V2){const salt=await this.getReplicationPBKDF2Salt();return await encryptBinary(data,set2.passphrase,salt)}return await encryptBinary2(data,set2.passphrase,set2.useDynamicIterationCount)}async _createJournalPack(override){const checkPointInfo=await this.getCheckpointInfo(),from=override||checkPointInfo.lastLocalSeq;Logger(`Journal reading from seq:${from}`,LOG_LEVEL_VERBOSE);let knownKeyCount=0;const allChangesTask=this.db.changes({live:!1,since:override||from,conflicts:!0,limit:this.batchSize,return_docs:!0,attachments:!1,style:"all_docs"}),allChanges=await allChangesTask;if(0==allChanges.results.length)return{changes:[],hasNext:!1,packLastSeq:allChanges.last_seq};const bd2=await this.db.bulkGet({docs:allChanges.results.map(e3=>e3.changes.map(change=>({id:e3.id,rev:change.rev}))).flat(),revs:!0}),packLastSeq=allChanges.last_seq,hasNext=packLastSeq<(await this.db.info()).update_seq,docChanges=bd2.results.map(e3=>e3.docs).flat().filter(e3=>"ok"in e3).map(e3=>e3.ok).filter(doc=>{const key3=this.getDocKey(doc);if(this._currentCheckPointInfo.knownIDs.has(key3)){knownKeyCount++;return!1}if(this._currentCheckPointInfo.sentIDs.has(key3)){knownKeyCount++;return!1}return!0});Logger(`Checked ${allChanges.results.length} changed entries, selected ${docChanges.length} docs (${knownKeyCount} keys already known)`,LOG_LEVEL_DEBUG);return{changes:docChanges,hasNext,packLastSeq}}getDocKey(doc){return doc&&doc._id.startsWith("h:")?doc._id:doc._id+"-"+doc._rev}async uploadQueued(showMessage=!1,wrapUp=!1){return await shareRunningResult("upload_queue",async()=>{const TASK_TITLE="Uploading journal:",logLevel=showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;let uploaded=0;do{const queued=await this.trench.dequeuePermanentWithCommit("upload_queue");if(!queued){if(this.isPacking){Logger(`${TASK_TITLE} Queue run out, but process is running. wait for the next.`,LOG_LEVEL_VERBOSE);await Promise.race([this.notifier.nextNotify,delay(3e3)]);continue}uploaded?Logger(`${TASK_TITLE}: ${uploaded} files have been uploaded!`,logLevel,"send_journal"):wrapUp||Logger("No files needs to be uploaded!",logLevel,"send_journal");return!0}const{key:key3,value,commit,cancel:cancel2,cancelCount,pendingItems}=queued;this.updateInfo({sent:uploaded,maxPushSeq:pendingItems+uploaded,lastSyncPushSeq:1});Logger(`${TASK_TITLE} ${uploaded} / ${pendingItems+uploaded}${0!=cancelCount?`\nRETRY:${cancelCount}`:""}`,logLevel,"send_journal");Logger(`${TASK_TITLE} ${key3} ${0!=cancelCount?`TRY:${cancelCount}`:""} ${pendingItems} left`,LOG_LEVEL_VERBOSE);if(cancelCount>3){Logger(`${TASK_TITLE} Something went wrong on processing queue ${key3}.`,LOG_LEVEL_NOTICE);return!1}const filename=`${Date.now()}-docs.jsonl.gz`,mime="application/octet-stream",blob=new Blob([value],{type:mime});try{if(!await this.uploadFile(filename,blob,mime))throw new Error("Could not send journalPack to the bucket");await commit();uploaded++;await this.updateCheckPointInfo(info3=>({...info3,sentFiles:info3.sentFiles.add(filename)}));Logger(`${TASK_TITLE}: Uploaded ${key3} as ${filename}`,LOG_LEVEL_INFO)}catch(ex){Logger(`${TASK_TITLE} Could not send journalPack to the bucket (${key3} as ${filename})`,LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE);Logger(`${TASK_TITLE} Uploading ${key3} cancelled for retry`,LOG_LEVEL_VERBOSE);cancel2();await delay(1e3);continue}}while(0==this.requestedStop)})}async packAndCompress(showMessage=!1){return await shareRunningResult("create_send_data",async()=>{try{this.isPacking=!0;const MSG_KEY="pack_journal",logLevel=showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;this.requestedStop=!1;const checkPointInfo=await this.getCheckpointInfo(),max3=(await this.db.info()).update_seq,sentIDs=checkPointInfo.sentIDs,maxOutBufLength=250,maxBinarySize=10485760;let currentLastSeq=checkPointInfo.lastLocalSeq,binarySize=0;const outBuf=[];let isFinished=!1;const startSeq=checkPointInfo.lastLocalSeq,seqToProcess=max3-startSeq;Logger("Packing Journal: Start sending",logLevel,MSG_KEY);do{if(this.requestedStop){Logger("Packing Journal : Stop requested",logLevel,MSG_KEY);isFinished=!0;break}const{changes:changes3,hasNext,packLastSeq}=await this._createJournalPack(currentLastSeq),currentSeq=packLastSeq-startSeq;if(0==changes3.length)Logger(`Packing Journal: No sendable docs in this batch (${currentSeq} / ${seqToProcess}); continuing while there are newer changes.`,LOG_LEVEL_VERBOSE);else{Logger(`Packing Journal: ${currentSeq} / ${seqToProcess}`,logLevel,MSG_KEY);for(const row of changes3){const serialized2=serializeDoc(row);sentIDs.add(this.getDocKey(row));binarySize+=serialized2.length;outBuf.push(serialized2);if(outBuf.length>maxOutBufLength||binarySize>maxBinarySize){const sendBuf=concatUInt8Array2(outBuf),orgLen=sendBuf.byteLength,bin=await wrappedDeflate(sendBuf,{consume:!0,level:8});Logger(`Packing Journal: Compressed ${orgLen} bytes to ${bin.byteLength} bytes (${0!=orgLen?Math.ceil(bin.byteLength/orgLen*100):"--"}%)`,LOG_LEVEL_VERBOSE);await this.trench.queuePermanent("upload_queue",bin);this.notifier.notify();outBuf.length=0;binarySize=0}}}if(outBuf.length>0){const sendBuf=concatUInt8Array2(outBuf),orgLen=sendBuf.byteLength,bin=await wrappedDeflate(sendBuf,{consume:!0,level:8});Logger(`Packing Journal: Compressed ${orgLen} bytes to ${bin.byteLength} bytes (${0!=orgLen?Math.ceil(bin.byteLength/orgLen*100):"--"}%)`,LOG_LEVEL_VERBOSE);await this.trench.queuePermanent("upload_queue",bin);this.notifier.notify()}await this.updateCheckPointInfo(info3=>({...info3,lastLocalSeq:packLastSeq,sentIDs}));currentLastSeq=packLastSeq;if(!hasNext){isFinished=!0;break}}while(0==this.requestedStop&&!isFinished);Logger(0!=seqToProcess?`Packing Journal: Packaging ${seqToProcess}`:"Packing Journal: No journals to be packed!",logLevel,MSG_KEY);this.notifier.notify();return!0}finally{this.isPacking=!1;this.notifier.notify()}})}async sendLocalJournal(showMessage=!1){this.updateInfo({syncStatus:"JOURNAL_SEND"});if((await Promise.all([this.packAndCompress(showMessage),this.uploadQueued(showMessage)])).every(e3=>e3)&&await this.uploadQueued(showMessage,!0)){this.updateInfo({syncStatus:"COMPLETED"});return!0}this.updateInfo({syncStatus:"ERRORED"});return!1}async _getRemoteJournals(){const StartAfter=[...(await this.getCheckpointInfo()).receivedFiles.keys()].sort((a2,b3)=>b3.localeCompare(a2,void 0,{numeric:!0}))[0],files=(await this.listFiles(StartAfter)).filter(e3=>!e3.startsWith("_"));return files?files.sort((a2,b3)=>a2.localeCompare(b3,void 0,{numeric:!0})):[]}async processDocuments(allDocs2){let applyTotal=0,wholeItems=0;try{const chunks=[],docs=[];allDocs2.forEach(e3=>{e3._id.startsWith("h:")?chunks.push(e3):docs.push(e3)});try{const e22=(await this.db.allDocs({include_docs:!0,keys:[...chunks.map(e3=>e3._id)]})).rows.map(e3=>{var _a8;return null!=(_a8=e3.id)?_a8:void 0}),existChunks=new Set(e22.filter(e3=>void 0!==e3)),saveChunks=chunks.filter(e3=>!existChunks.has(e3._id)).map(e3=>({...e3,_rev:void 0})),ret=await this.db.bulkDocs(saveChunks,{new_edits:!0}),saveError=ret.filter(e3=>"error"in e3).map(e3=>e3.id);saveChunks.filter(e3=>-1===saveError.indexOf(e3._id)).forEach(doc=>eventHub.emitEvent("remote-chunk-fetched",doc));await this.updateCheckPointInfo(info3=>({...info3,knownIDs:setAllItems(info3.knownIDs,chunks.map(e3=>this.getDocKey(e3)))}));Logger(`Saved ${ret.length} chunks in transferred ${chunks.length} chunks (Error:${saveError.length})`,LOG_LEVEL_VERBOSE)}catch(ex){Logger("Applying chunks failed",LOG_LEVEL_INFO);Logger(ex,LOG_LEVEL_VERBOSE)}const docsRevs=docs.map(e3=>[e3._id,[e3._rev]]).reduce((acc,[id,revs])=>{var _a8;return{...acc,[id]:[...null!=(_a8=acc[id])?_a8:[],...revs]}},{}),diffRevs=await this.db.revsDiff(docsRevs),saveDocs=docs.filter(e3=>{var _a8,_b5;return e3._id in diffRevs&&"missing"in diffRevs[e3._id]&&-1!==(null!=(_b5=null==(_a8=diffRevs[e3._id].missing)?void 0:_a8.indexOf(e3._rev))?_b5:0)});Logger(`Applying ${saveDocs.length} docs (Total transferred:${docs.length}, docs:${allDocs2.length})`,LOG_LEVEL_VERBOSE);await this.db.bulkDocs(saveDocs,{new_edits:!1});await this.processReplication(saveDocs);await this.updateCheckPointInfo(info3=>({...info3,knownIDs:setAllItems(info3.knownIDs,docs.map(e3=>this.getDocKey(e3)))}));applyTotal+=saveDocs.length;wholeItems+=docs.length;Logger(`Applied ${applyTotal} of ${wholeItems} docs (${wholeItems-applyTotal} skipped)`,LOG_LEVEL_VERBOSE);return!0}catch(ex){Logger("Applying journal failed",LOG_LEVEL_INFO);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}async processDownloadedJournals(showMessage=!1,wrapUp=!1){return await shareRunningResult("process_downloaded_journals",async()=>{const logLevel=showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,TASK_TITLE="Processing journal:";let downloaded=0;do{const queued=await this.trench.dequeuePermanentWithCommit("parse_file");if(!queued){if(this.isDownloading){Logger(`${TASK_TITLE} Queue run out, but process is running. wait for the next.`,LOG_LEVEL_VERBOSE);await Promise.race([this.notifier.nextNotify,delay(3e3)]);continue}downloaded?Logger(`${TASK_TITLE} ${downloaded} files have been uploaded!`,logLevel,"send_journal"):wrapUp||Logger(`${TASK_TITLE} No files needs to be processed!`,logLevel,"send_journal");return!0}const{key:key3,value,commit,cancel:cancel2,cancelCount,pendingItems}=queued;this.updateInfo({arrived:downloaded,maxPullSeq:pendingItems+downloaded,lastSyncPullSeq:1});Logger(`${TASK_TITLE} ${downloaded} / ${pendingItems+downloaded}${0!=cancelCount?`\nRETRY:${cancelCount}`:""}`,logLevel,"processjournal");if(cancelCount>3){Logger(`${TASK_TITLE} Something went wrong on processing queue ${key3}.`,LOG_LEVEL_NOTICE);return!1}const compressed=new Uint8Array(value),decompressed=await wrappedInflate(compressed,{consume:!0});if(0==decompressed.length){await commit();downloaded++;Logger(`${TASK_TITLE}: ${key3} has been processed`,LOG_LEVEL_INFO);continue}let idxFrom=0,idxTo=0;const d4=new TextDecoder,result=[];do{idxTo=decompressed.indexOf(10,idxFrom);if(-1==idxTo)break;const piece=decompressed.slice(idxFrom,idxTo),strPiece=d4.decode(piece);if(strPiece.startsWith("~")){const[key4,data]=strPiece.substring(1).split(UNIT_SPLIT);result.push({_id:key4,data:unescapeNewLineFromString(data),type:"leaf",_rev:""})}else result.push(JSON.parse(strPiece));idxFrom=idxTo+1}while(idxTo>0);try{if(!await this.processDocuments(result))throw new Error("Could not process downloaded journals");await commit();downloaded++;Logger(`${TASK_TITLE}: ${key3} has been processed`,LOG_LEVEL_INFO)}catch(ex){Logger(`${TASK_TITLE}: Could not process downloaded journals`,LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE);Logger(`${TASK_TITLE}: ${key3} cancelled for retry`,LOG_LEVEL_VERBOSE);cancel2();await delay(1e3);continue}}while(0==this.requestedStop);return!0})}async downloadRemoteJournals(showMessage=!1){return await shareRunningResult("downloadRemoteJournals",async()=>{try{this.isDownloading=!0;const logLevel=showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;Logger("Receiving Journal: Getting list of remote journal",logLevel,"receivejournal");const files=await this._getRemoteJournals();if(0==files.length){Logger("Receiving Journal: No journals needs to be downloaded",logLevel,"receivejournal");return!0}let count=0;for(const key3 of files){count++;Logger(`Receiving Journal: ${count} / ${files.length}`,logLevel,"receivejournal");if(this.requestedStop){Logger(`Receiving canceled: ${key3}`,logLevel);return!1}if(this._currentCheckPointInfo.sentFiles.has(key3)){Logger(`Receiving Journal: ${key3} is own sent file`,LOG_LEVEL_VERBOSE);await this.updateCheckPointInfo(info3=>({...info3,receivedFiles:info3.receivedFiles.add(key3)}))}else try{const data=await this.downloadFile(key3);if(!1===data)throw new Error("Download Error");await this.trench.queuePermanent("parse_file",data);await this.updateCheckPointInfo(info3=>({...info3,receivedFiles:info3.receivedFiles.add(key3)}));this.notifier.notify()}catch(ex){Logger(`Could not download ${key3}`,logLevel);Logger(ex,LOG_LEVEL_DEBUG);return!1}}}finally{this.isDownloading=!1;this.notifier.notify()}this.notifier.notify();return!0})}async receiveRemoteJournal(showMessage=!1){this.updateInfo({syncStatus:"JOURNAL_RECEIVE"});this.requestedStop=!1;if((await Promise.all([this.downloadRemoteJournals(showMessage),this.processDownloadedJournals(showMessage)])).every(e3=>e3)&&await this.processDownloadedJournals(showMessage,!0)){this.updateInfo({syncStatus:"COMPLETED"});return!0}this.updateInfo({syncStatus:"ERRORED"});return!1}async sync(showResult=!1){var _a8;return null!=(_a8=await shareRunningResult("replicate",async()=>{this.requestedStop=!1;const receiveResult=await this.receiveRemoteJournal(showResult);if(!this.requestedStop){if(!receiveResult){Logger("Could not receive remote journal, so we prevent sending local journals to prevent unwanted mass transfers",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return}return await this.sendLocalJournal(showResult)}}))&&_a8}requestStop(){this.requestedStop=!0}};JournalSyncMinio=class extends JournalSyncAbstract{_getClient(){if(this._instance)return this._instance;const ep=this.endpoint?{endpoint:this.endpoint,forcePathStyle:this.forcePathStyle}:{};this._instance=new S3({region:this.region,...ep,credentials:{accessKeyId:this.id,secretAccessKey:this.key},maxAttempts:4,retryStrategy:new ConfiguredRetryStrategy(4,attempt=>100+1e3*attempt),requestHandler:this.useCustomRequestHandler?this.env.services.API.getCustomFetchHandler():void 0,requestChecksumCalculation:"WHEN_REQUIRED",responseChecksumValidation:"WHEN_REQUIRED"});const bucketCustomHeaders=this.customHeaders;this._instance.middlewareStack.add((next2,context2)=>args=>{bucketCustomHeaders.forEach(([key3,value])=>{key3&&value&&(args.request.headers[key3]=value)});return next2(args)},{name:"addBucketCustomHeadersMiddleware",step:"build"});const arrayBufferToBase64Sync=buffer=>btoa(String.fromCharCode(...new Uint8Array(buffer)));this._instance.middlewareStack.add(applyMd5BodyChecksumMiddleware({md5:Md5,base64Encoder:data=>arrayBufferToBase64Sync(data.buffer),streamHasher:(hashConstructor,stream)=>{const result=promiseWithResolver(),hash3=new hashConstructor;stream.on("data",chunk=>{hash3.update(chunk)});stream.on("end",()=>{result.resolve(hash3.digest())});return result.promise}}),{step:"build",name:"applyMd5BodyChecksumMiddlewareForDeleteObjects"});clearHandlers();return this._instance}async resetBucket(){var _a8;const client=this._getClient();let files=[],deleteCount=0,errorCount=0;try{do{files=await this.listFiles("",100);if(0==files.length)break;const cmd2=new DeleteObjectsCommand({Bucket:this.bucket,Delete:{Objects:files.map(e3=>({Key:`${this.prefix}${e3}`}))}}),r5=await client.send(cmd2),{Deleted,Errors:Errors2}=r5;deleteCount+=(null==Deleted?void 0:Deleted.length)||0;errorCount+=(null==Errors2?void 0:Errors2.length)||0;Logger(`${deleteCount} items has been deleted!${0!=errorCount?` (${errorCount} items failed to delete)`:""}`,LOG_LEVEL_NOTICE,"reset-bucket")}while(0!=files.length);clearHandlers()}catch(ex){Logger("WARNING! Could not delete files. you should try it once or remake the bucket manually",LOG_LEVEL_NOTICE,"reset-bucket");Logger(ex,LOG_LEVEL_VERBOSE)}const journals=await this._getRemoteJournals();if(0==journals.length){Logger("Nothing to delete!",LOG_LEVEL_NOTICE);return!0}const cmd=new DeleteObjectsCommand({Bucket:this.bucket,Delete:{Objects:journals.map(e3=>({Key:e3}))}}),r4=await client.send(cmd);Logger(`${(null==(_a8=null==r4?void 0:r4.Deleted)?void 0:_a8.length)||0} items has been deleted!`,LOG_LEVEL_NOTICE);await this.resetCheckpointInfo();return!0}async uploadJson(key3,body){try{return await this.uploadFile(key3,new Blob([JSON.stringify(body)]),"application/json")}catch(ex){Logger(`Could not upload json ${key3}`);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}async downloadJson(key3){try{const ret=await this.downloadFile(key3,!0);return!!ret&&JSON.parse((new TextDecoder).decode(ret))}catch(ex){Logger(`Could not download json ${key3}`);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}async uploadFile(key3,blob,mime){try{const buf=new Uint8Array(await blob.arrayBuffer()),set2=this.currentSettings,u2=await this.encryptForUpload(key3,buf,set2),client=this._getClient(),cmd=new PutObjectCommand({Bucket:this.bucket,Key:`${this.prefix}${key3}`,Body:u2,ContentType:mime});if(await client.send(cmd))return!0}catch(ex){Logger(`Could not upload ${key3}`);Logger(ex,LOG_LEVEL_VERBOSE)}return!1}async downloadFile(key3,ignoreCache=!1){const client=this._getClient(),cmd=new GetObjectCommand({Bucket:this.bucket,Key:`${this.prefix}${key3}`,...ignoreCache?{ResponseCacheControl:"no-cache"}:{}}),r4=await client.send(cmd),set2=this.currentSettings;try{if(r4.Body){const u2=new Uint8Array(await r4.Body.transformToByteArray());try{return await this.decryptDownloaded(key3,u2,set2)}catch(ex){Logger(`Could not decrypt downloaded file ${key3}`,LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}}catch(ex){Logger(`Could not download ${key3}`);Logger(ex,LOG_LEVEL_VERBOSE)}return!1}async listFiles(from,limit){const client=this._getClient(),objects=await client.listObjectsV2({Bucket:this.bucket,Prefix:this.prefix,StartAfter:`${this.prefix||""}${from||""}`,...limit?{MaxKeys:limit}:{}});return objects.Contents?objects.Contents.filter(e3=>{var _a8;return null==(_a8=e3.Key)?void 0:_a8.startsWith(this.prefix)}).map(e3=>{var _a8;return null==(_a8=e3.Key)?void 0:_a8.substring(this.prefix.length)}):[]}async isAvailable(){const client=this._getClient(),cmd=new HeadBucketCommand({Bucket:this.bucket});try{await client.send(cmd);return!0}catch(ex){Logger("Could not connected to the remote bucket",LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}async getUsage(){const client=this._getClient();try{const objects=await client.listObjectsV2({Bucket:this.bucket});return objects.Contents?{estimatedSize:objects.Contents.reduce((acc,e3)=>acc+(e3.Size||0),0)}:{}}catch(ex){Logger("Could not get status of the remote bucket",LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}};updateInformation="# 0.25\nSince 19th July, 2025 (beta1 in 0.25.0-beta1, 13th July, 2025)\n\nThe head note of 0.25 is now in [updates_old.md](https://github.com/vrtmrz/obsidian-livesync/blob/main/updates_old.md). Because 0.25 got a lot of updates, thankfully, compatibility is kept and we do not need breaking changes! In other words, when get enough stabled. The next version will be v1.0.0. Even though it my hope.\n\n## 0.25.57\n\n9th April, 2026\n\n- Packing a batch during the journal sync now continues even if the batch contains no items to upload.\n- No unexpected error (about a replicator) during the early stage of initialisation.\n- Now error messages are kept hidden if the show status inside the editor is disabled (related: #829).\n- Fixed an issue where devices could no longer upload after another device performed 'Fresh Start Wipe' and 'Overwrite remote' in Object Storage mode (#848).\n - Each device's local deduplication caches (`knownIDs`, `sentIDs`, `receivedFiles`, `sentFiles`) now track the remote journal epoch (derived from the encryption parameters stored on the remote).\n - When the epoch changes, the plugin verifies whether the device's last uploaded file still exists on the remote. If the file is gone, it confirms a remote wipe and automatically clears the stale caches. If the file is still present (e.g. a protocol upgrade without a wipe), the caches are preserved, and only the epoch is updated. This means normal upgrades never cause unnecessary re-processing.\n\n### Translations\n\n- Russian translation has been added! Thank you so much for the contribution, @vipka1n! (#845)\n\n### New features\n\n- Now we can configure multiple Remote Databases of the same type, e.g, multiple CouchDBs or S3 remotes.\n - A user interface for managing multiple remote databases has been added to the settings dialogue. I think no explanation is needed for the UI, but please let me know if you have any questions.\n- We can switch between multiple Remote Databases in the settings dialogue.\n\n### CLI\n\n#### Fixed\n\n- Replication progress is now correctly saved and restored in the CLI (related: #846).\n\n## ~~0.25.55~~ 0.25.56\n\n30th March, 2026\n\n### Fixed\n\n- No longer `Peer-to-Peer Sync is not enabled. We cannot open a new connection.` error occurs when we have not enabled P2P sync and are not expected to use it (#830).\n\n### CLI\n\n- Fixed incomplete localStorage support in the CLI (#831). Thank you so much @rewse !\n- Fixed the issue where the CLI could not be connected to the remote which had been locked once (#833), also thanks to @rewse !\n\n## 0.25.54\n\n18th March, 2026\n\n### Fixed\n\n- Remote storage size check now works correctly again (#818).\n- Some buttons on the settings dialogue now respond correctly again (#827).\n\n### Refactored\n\n- P2P replicator has been refactored to be a little more robust and easier to understand.\n- Delete items which are no longer used that might cause potential problems\n\n### CLI\n\n- Fixed the corrupted display of the help message.\n- Remove some unnecessary code.\n\n### WebApp\n\n- Fixed the issue where the detail level was not being applied in the log pane.\n- Pop-ups are now shown.\n- Add coverage for the test.\n- Pop-ups are now shown in the web app as well.\n\n## 0.25.53\n\n17th March, 2026\n\nI did wonder whether I should have released a minor version update, but when I actually tested it, compatibility seemed to be intact, so I didn’t. Hmm.\n\n### Fixed\n\n#### P2P Synchronisation\n\n- Fixed flaky timing issues in P2P synchronisation.\n- No longer unexpected `Unhandled Rejections` during P2P operations (waiting for acceptance).\n\n#### Journal Sync\n\n- Fixed an issue where some conflicts cannot be resolved in Journal Sync.\n- Many minor fixes have been made for better stability and reliability.\n\n### Tests\n\n- Rewrite P2P end-to-end tests to use the CLI as a host.\n\n### CLI\n\nWe have previously developed FileSystem LiveSync and various other components in a separate repository, but updates have been significantly delayed, and we have been plagued by compatibility issues. Now, a CLI tool using the same core logic is emerging. This does not directly manipulate the file system, but it offers a more convenient way of working and can also communicate with Object Storage. We can also resolve conflicts. Please refer to the code in `src/apps/cli` for the [self-hosted-livesync-cli](./src/apps/cli/README.md) for more details.\n- Add `self-hosted-livesync-cli` to `src/apps/cli` as a headless and dedicated version.\n- P2P sync and Object Storage are also supported in the CLI.\n - Yes, we have finally managed to 'get one file'.\n - Also, no more need for a [LiveSync PeerServer](https://github.com/vrtmrz/livesync-serverpeer) for virtual environments! The CLI can do it.\n\n- Now binary files are also supported in the CLI.\n\n### Refactored or internal changes\n\n- ServiceFileAccessBase now correctly handles the reading of binary files.\n- HeadlessAPIService now correctly provides the online status (always online) to the plug-in.\n- Non-worker version of bgWorker now correctly handles some functions.\n- Separated `ObsidianLiveSyncPlugin` into `ObsidianLiveSyncPlugin` and `LiveSyncBaseCore`.\n- Now `LiveSyncCore` indicates the type specified version of `LiveSyncBaseCore`.\n- Referencing `plugin.xxx` has been rewritten to referencing the corresponding service or `core.xxx`.\n- Offline change scanner and the local database preparation have been separated.\n- Set default priority for processFileEvent and processSynchroniseResult for the place to add hooks.\n- ControlService now provides the readiness for processing operations.\n- DatabaseService is now able to modify database opening options on derived classes.\n- Now `useOfflineScanner`, `useCheckRemoteSize`, and `useRedFlagFeatures` are set from `main.ts`, instead of `LiveSyncBaseCore`.\n- Storage Access APIs are now yielding Promises. This is to allow more limited storage platforms to be supported.\n- Journal Replicator now yields true after the replication is done.\n\n### R&D\n\n- Browser-version of Self-hosted LiveSync is now in development. This is not intended for public use now, but I will eventually make it available for testing.\n- We can see the code in `src/apps/webapp` for the browser version.\n\n## 0.25.52\n\n9th March, 2026\n\nExcuses: Too much `I`.\nWhilst I had a fever, I could not figure it out at all, but once I felt better, I spotted the problem in about thirty seconds. I apologise for causing you concern. I am grateful for your patience.\nI would like to devise a mechanism for running simple test scenarios. Now that we have got the Obsidian CLI up and running, it seems the perfect opportunity.\n\nTo improve the bus factor, we really need to organise the source code more thoroughly. Your cooperation and contributions would be greatly appreciated.\n\n### Fixed\n\n- No longer unexpected deletion-propagation occurs when the parent directory is not empty (#813).\n\n### Revert reversions\n\n- Reverted the reversion of ModuleCheckRemoteSize. Now it is back to the service feature.\n\n## 0.25.51\n\n7th March, 2026\n\n### Reverted\n\n- Reverted to ModuleRedFlag and ModuleInitializerFile to the previous version because of some unexpected issues. (#813)\n - I will re-implement them in the future with better design and tests.\n\n## 0.25.50\n\n3rd March, 2026\n\nNote: 0.25.49 has been skipped because of too verbose logging (credentials are logged in verbose level, but I realised that could lead to unexpected exposure on issue reporting). Please bump to 0.25.50 to get the fix if you are on 0.25.49. (No expected behaviour changes except the logging).\n\n### Fixed\n\n- No longer deleted files are not clickable in the Global History pane.\n- Diff view now uses more specific classes (#803).\n- A message of configuration mismatching slightly added for better understanding.\n - Now it says `When replication is initiated manually via the command palette or ribbon, a dialogue box will open to address this.` to make it clear that the user can fix the issue by themselves.\n\n### Refactored\n\n- `ModuleRedFlag` has been refactored to `serviceFeatures/redFlag` and also tested.\n- `ModuleInitializerFile` has been refactored to `lib/serviceFeatures/offlineScanner` and also tested.\n\n## 0.25.48\n\n2nd March, 2026\n\nNo behavioural changes except unidentified faults. Please report if you find any unexpected behaviour after this update.\n\n### Refactored\n\n- Many storage-related functions have been refactored for better maintainability and testability.\n - Now all platform-specific logics are supplied as adapters, and the core logic has become platform-agnostic.\n - Quite a number of tests have been added for the core logic, and the platform-specific logics are also tested with mocked adapters.\n\n## 0.25.47\n\n27th February, 2026\n\nPhew, the financial year is still not over yet, but I have got some time to work on the plug-in again!\n\n### Fixed and refactored\n\n- Fixed the inexplicable behaviour when retrieving chunks from the network.\n - The chunk manager has been layered to be responsible for its own areas and duties. e.g., `DatabaseWriteLayer`, `DatabaseReadLayer`, `NetworkLayer`, `CacheLayer`, and `ArrivalWaitLayer`.\n - All layers have been tested now!\n - `LayeredChunkManager` has been implemented to manage these layers. Also tested.\n - `EntryManager` has been mostly rewritten and also tested.\n\n- Now we can configure `Never warn` for remote storage size notification again.\n\n### Tests\n\n- The following test has been added:\n - `ConflictManager`.\n\n## 0.25.46\n\n26th February, 2026\n\n### Fixed\n\n- Unexpected errors no longer occurred when the plug-in was unloaded.\n- Hidden File Sync now respects selectors.\n- Registering protocol-handlers now works safely without causing unexpected errors.\n\n### Refactored\n\n- `ModuleCheckRemoteSize` has been ported to a serviceFeature, and tests have also been added.\n- Some unnecessary things have been removed.\n- LiveSyncManagers has now explicit dependencies.\n- LiveSyncLocalDB is now responsible for LiveSyncManagers, not accepting the managers as dependencies.\n - This is to avoid circular dependencies and clarify the ownership of the managers.\n- ChangeManager has been refactored. This had a potential issue, so something had been fixed, possibly.\n- Some tests have been ported from Deno's test runner to Vitest to accumulate coverage.\n\n## 0.25.45\n\n25th February, 2026\n\nAs a result of recent refactoring, we are able to write tests more easily now!\n\n### Refactored\n\n- `ModuleTargetFilter`, which was responsible for checking if a file is a target file, has been ported to a serviceFeature.\n - And also tests have been added. The middleware-style-power.\n- `ModuleObsidianAPI` has been removed and implemented in `APIService` and `RemoteService`.\n- Now `APIService` is responsible for the network-online-status, not `databaseService.managers.networkManager`.\n\n\nFull notes are in\n[updates_old.md](https://github.com/vrtmrz/obsidian-livesync/blob/main/updates_old.md).\n";lastVersion=~~(versionNumberString2Number("0.25.57")/1e3);CONTEXT_DIALOG_CONTROLS="svelte-dialog-controls";SvelteDialogManagerBase=class{get context(){return this._context}get dependents(){return this._dependents}constructor(c3,dependents){this._context=c3;this._dependents=dependents}async open(component2,initialData){return await this.openSvelteDialog(component2,initialData)}async openWithExplicitCancel(component2,initialData){for(let i2=0;i2<10;i2++){const ret=await this.openSvelteDialog(component2,initialData);if(void 0!==ret)return ret;if(this.dependents.control.hasUnloaded())throw new Error("Operation cancelled due to app shutdown.");Logger("Please select 'Cancel' explicitly to cancel this operation.",LOG_LEVEL_NOTICE)}throw new Error("Operation Forcibly cancelled by user.")}};root_110=from_html("

");root5=from_html('

');$$css6={hash:"svelte-1gf4irx",code:".dialog-header.svelte-1gf4irx {display:none;}"};root_111=from_html("

");root6=from_html("
");root7=from_html("");delegate(["click"]);root_113=from_html("

");root8=from_html('
');$$css7={hash:"svelte-o7k4lc",code:".question-container.svelte-o7k4lc {border-bottom:2px solid var(--interactive-accent);margin-bottom:0.5lh;padding-bottom:0.5lh;}"};root9=from_html('
');$$css8={hash:"svelte-1h8m5at",code:'.option-container.svelte-1h8m5at {border:1px solid transparent;border-radius:0.25lh;padding:0.5rem;}.option-container.selected.svelte-1h8m5at {border-color:var(--interactive-accent);}.choice-row.svelte-1h8m5at {display:flex;align-items:center;gap:0.5rem;\n /* margin-top: 1rem; */cursor:pointer;}.choice-row.svelte-1h8m5at span.choice-title:where(.svelte-1h8m5at) {width:auto;}.choice-row.svelte-1h8m5at input[type="radio"]:where(.svelte-1h8m5at) {\n /* width: 1.2rem;\n height: 1.2rem; */cursor:pointer;}.choice-notes.svelte-1h8m5at {margin-left:2rem;margin-top:0.25rem;color:var(--text-muted);font-size:0.9rem;}.option-container.selected.svelte-1h8m5at .choice-notes:where(.svelte-1h8m5at) {color:var(--text-normal);}'};root10=from_html('
');root11=from_html('
');root12=from_html('
');root_44=from_html(" ",1);root_24=from_html(" ",1);root_72=from_html(" ",1);root13=from_html(" ",1);root_25=from_html("

");root_114=from_html("
");root14=from_html('
');root15=from_html('
',1);$$css9={hash:"svelte-2n6uv8",code:'.choice-row.svelte-2n6uv8 {display:flex;align-items:center;gap:0.5rem;margin-top:1rem;cursor:pointer;}.choice-row.svelte-2n6uv8 span.choice-title:where(.svelte-2n6uv8) {width:auto;}.choice-row.svelte-2n6uv8 input[type="checkbox"]:where(.svelte-2n6uv8) {\n /* width: 1.2rem;\n height: 1.2rem; */cursor:pointer;}.choice-notes.svelte-2n6uv8 {margin-left:2rem;margin-top:0.25rem;color:var(--text-muted);font-size:0.9rem;}'};root_45=from_html(" ",1);root_26=from_html(" ",1);root_73=from_html(" ",1);root16=from_html(" ",1);root_46=from_html(" ",1);root_27=from_html(" ",1);root_83=from_html(" ",1);root17=from_html(" ",1);root_28=from_html("
  1. On this device, please keep this Vault open.
  2. On the source device, open Obsidian.
  3. On the source device, from the command palette, run the 'Show settings as a QR code' command.
  4. On this device, switch to the camera app or use a QR code scanner to scan the displayed QR code.
");root18=from_html(" ",1);root19=from_html('');root20=from_html(' ',1);root_115=from_html('Please enter the Setup URI that was generated during server installation or on another device, along with the vault\n passphrase.
Note that you can generate a new Setup URI by running the "Copy settings as a new Setup URI" command in the command palette.',1);root_29=from_html('');root_74=from_html(" ",1);root21=from_html(" ",1);root_116=from_html("

The connection to the server has been configured successfully. As the next step, the synchronisation data on the server will be built based on the current data on this device.

IMPORTANT
After restarting, the data on this device will be uploaded to the server as the 'master copy'. Please be aware that\n any unintended data currently on the server will be completely overwritten.

",1);root_47=from_html(" ",1);root22=from_html(" ",1);root_117=from_html("

The connection to the server has been configured successfully. As the next step, the latest synchronisation data will be downloaded from the server to this device.

PLEASE NOTE
After restarting, the database on this device will be rebuilt using data from the server. If there are any unsynchronised\n files in this vault, conflicts may occur with the server data.

",1);root_48=from_html(" ",1);root23=from_html(" ",1);root_118=from_html("The connection to the server has been configured successfully. As the next step, the local database, that is to say the synchronisation information, must be reconstituted.",1);root_210=from_html(" ",1);root_102=from_html(" ",1);root24=from_html(" ",1);root_33=from_html(" ",1);root_119=from_html(" ",1);root_75=from_html(" ",1);root25=from_html(" ",1);checkConfig=async editingSettings=>{var _a8,_b5,_c3,_d2,_e2,_f,_g,_h2,_i2,_j,_k,_l,_m2,_n;const result=[],addMessage=(msg,classes=[])=>{result.push({message:msg,classes})},addSuccess=(msg,value)=>{result.push({message:msg,result:"ok",value})},_addError=(message,fixMessage,fix,value)=>{result.push({message,result:"error",fixMessage,fix,value})},addErrorMessage=(msg,classes=[])=>{result.push({message:msg,result:"error",classes})},addError=(message,fixMessage,key3,expected)=>{_addError(message,fixMessage,async()=>{await updateRemoteSetting(editingSettings,key3,expected)})};addMessage($msg("obsidianLiveSyncSettingTab.logCheckingDbConfig"));try{if(isCloudantURI(editingSettings.couchDB_URI)){addMessage($msg("obsidianLiveSyncSettingTab.logCannotUseCloudant"));return result}const customHeaders=parseHeaderValues(editingSettings.couchDB_CustomHeaders),credential=generateCredentialObject(editingSettings),r4=await requestToCouchDBWithCredentials(editingSettings.couchDB_URI,credential,window.origin,void 0,void 0,void 0,customHeaders),responseConfig=r4.json;addMessage($msg("obsidianLiveSyncSettingTab.msgNotice"),["ob-btn-config-head"]);addMessage($msg("obsidianLiveSyncSettingTab.msgIfConfigNotPersistent"),["ob-btn-config-info"]);addMessage($msg("obsidianLiveSyncSettingTab.msgConfigCheck"),["ob-btn-config-head"]);const serverBanner=null!=(_b5=null!=(_a8=r4.headers.server)?_a8:r4.headers.Server)?_b5:"unknown";addMessage($msg("obsidianLiveSyncSettingTab.serverVersion",{info:serverBanner}));const versionMatch=serverBanner.match(/CouchDB(\/([0-9.]+))?/),versionStr=versionMatch?versionMatch[2]:"0.0.0";editingSettings.couchDB_USER in responseConfig.admins?addSuccess($msg("obsidianLiveSyncSettingTab.okAdminPrivileges")):addSuccess($msg("obsidianLiveSyncSettingTab.warnNoAdmin"));isGreaterThanOrEqual(versionStr,"3.2.0")?"true"!=(null==(_c3=null==responseConfig?void 0:responseConfig.chttpd)?void 0:_c3.require_valid_user)?addError($msg("obsidianLiveSyncSettingTab.errRequireValidUser"),$msg("obsidianLiveSyncSettingTab.msgSetRequireValidUser"),"chttpd/require_valid_user","true"):addSuccess($msg("obsidianLiveSyncSettingTab.okRequireValidUser")):"true"!=(null==(_d2=null==responseConfig?void 0:responseConfig.chttpd_auth)?void 0:_d2.require_valid_user)?addError($msg("obsidianLiveSyncSettingTab.errRequireValidUserAuth"),$msg("obsidianLiveSyncSettingTab.msgSetRequireValidUserAuth"),"chttpd_auth/require_valid_user","true"):addSuccess($msg("obsidianLiveSyncSettingTab.okRequireValidUserAuth"));(null==responseConfig?void 0:responseConfig.httpd["WWW-Authenticate"])?addSuccess($msg("obsidianLiveSyncSettingTab.okWwwAuth")):addError($msg("obsidianLiveSyncSettingTab.errMissingWwwAuth"),$msg("obsidianLiveSyncSettingTab.msgSetWwwAuth"),"httpd/WWW-Authenticate",'Basic realm="couchdb"');isGreaterThanOrEqual(versionStr,"3.2.0")?"true"!=(null==(_e2=null==responseConfig?void 0:responseConfig.chttpd)?void 0:_e2.enable_cors)?addError($msg("obsidianLiveSyncSettingTab.errEnableCorsChttpd"),$msg("obsidianLiveSyncSettingTab.msgEnableCorsChttpd"),"chttpd/enable_cors","true"):addSuccess($msg("obsidianLiveSyncSettingTab.okEnableCorsChttpd")):"true"!=(null==(_f=null==responseConfig?void 0:responseConfig.httpd)?void 0:_f.enable_cors)?addError($msg("obsidianLiveSyncSettingTab.errEnableCors"),$msg("obsidianLiveSyncSettingTab.msgEnableCors"),"httpd/enable_cors","true"):addSuccess($msg("obsidianLiveSyncSettingTab.okEnableCors"));if(!isCloudantURI(editingSettings.couchDB_URI)){Number(null!=(_h2=null==(_g=null==responseConfig?void 0:responseConfig.chttpd)?void 0:_g.max_http_request_size)?_h2:0)<4294967296?addError($msg("obsidianLiveSyncSettingTab.errMaxRequestSize"),$msg("obsidianLiveSyncSettingTab.msgSetMaxRequestSize"),"chttpd/max_http_request_size","4294967296"):addSuccess($msg("obsidianLiveSyncSettingTab.okMaxRequestSize"));Number(null!=(_j=null==(_i2=null==responseConfig?void 0:responseConfig.couchdb)?void 0:_i2.max_document_size)?_j:0)<5e7?addError($msg("obsidianLiveSyncSettingTab.errMaxDocumentSize"),$msg("obsidianLiveSyncSettingTab.msgSetMaxDocSize"),"couchdb/max_document_size","50000000"):addSuccess($msg("obsidianLiveSyncSettingTab.okMaxDocumentSize"))}"true"!=(null==(_k=null==responseConfig?void 0:responseConfig.cors)?void 0:_k.credentials)?addError($msg("obsidianLiveSyncSettingTab.errCorsCredentials"),$msg("obsidianLiveSyncSettingTab.msgSetCorsCredentials"),"cors/credentials","true"):addSuccess($msg("obsidianLiveSyncSettingTab.okCorsCredentials"));const ConfiguredOrigins=((null!=(_m2=null==(_l=null==responseConfig?void 0:responseConfig.cors)?void 0:_l.origins)?_m2:"")+"").split(",");if("*"==(null==(_n=null==responseConfig?void 0:responseConfig.cors)?void 0:_n.origins)||-1!==ConfiguredOrigins.indexOf("app://obsidian.md")&&-1!==ConfiguredOrigins.indexOf("capacitor://localhost")&&-1!==ConfiguredOrigins.indexOf("http://localhost"))addSuccess($msg("obsidianLiveSyncSettingTab.okCorsOrigins"));else{const fixedValue=[...new Set([...ConfiguredOrigins.map(e3=>e3.trim()),"app://obsidian.md","capacitor://localhost","http://localhost"])].join(",");addError($msg("obsidianLiveSyncSettingTab.errCorsOrigins"),$msg("obsidianLiveSyncSettingTab.msgSetCorsOrigins"),"cors/origins",fixedValue)}addMessage($msg("obsidianLiveSyncSettingTab.msgConnectionCheck"),["ob-btn-config-head"]);addMessage($msg("obsidianLiveSyncSettingTab.msgCurrentOrigin",{origin:window.location.origin}));const origins=["app://obsidian.md","capacitor://localhost","http://localhost"];for(const org of origins){const rr=await requestToCouchDBWithCredentials(editingSettings.couchDB_URI,credential,org,void 0,void 0,void 0,customHeaders),responseHeaders=Object.fromEntries(Object.entries(rr.headers).map(e3=>{e3[0]=`${e3[0]}`.toLowerCase();return e3}));addMessage($msg("obsidianLiveSyncSettingTab.msgOriginCheck",{org}));"true"!=responseHeaders["access-control-allow-credentials"]?addErrorMessage($msg("obsidianLiveSyncSettingTab.errCorsNotAllowingCredentials")):addSuccess($msg("obsidianLiveSyncSettingTab.okCorsCredentialsForOrigin"));responseHeaders["access-control-allow-origin"]!=org?addErrorMessage($msg("obsidianLiveSyncSettingTab.warnCorsOriginUnmatched",{from:origin,to:responseHeaders["access-control-allow-origin"]})):addSuccess($msg("obsidianLiveSyncSettingTab.okCorsOriginMatched"))}addMessage($msg("obsidianLiveSyncSettingTab.msgDone"),["ob-btn-config-head"]);addMessage($msg("obsidianLiveSyncSettingTab.msgConnectionProxyNote"),["ob-btn-config-info"]);addMessage($msg("obsidianLiveSyncSettingTab.logCheckingConfigDone"))}catch(ex){if(401==(null==ex?void 0:ex.status)){addErrorMessage($msg("obsidianLiveSyncSettingTab.errAccessForbidden"));addErrorMessage($msg("obsidianLiveSyncSettingTab.errCannotContinueTest"));addMessage($msg("obsidianLiveSyncSettingTab.logCheckingConfigDone"))}else{addErrorMessage($msg("obsidianLiveSyncSettingTab.logCheckingConfigFailed"));Logger(ex)}}return result};on_click2=(_,fixIssue,issue)=>fixIssue(issue());root_211=from_html('
');root_120=from_html('
');root_84=from_html("

Issue detection log:

",1);root26=from_html('
',1);$$css10={hash:"svelte-a38xug",code:"\n /* Make .check-result a CSS Grid: let .message expand and keep .operations at minimum width, aligned to the right */.check-results.svelte-a38xug {\n /* Adjust spacing as required */margin-top:0.75rem;}.check-result.svelte-a38xug {display:grid;grid-template-columns:1fr auto; /* message takes remaining space, operations use minimum width */align-items:center; /* vertically centre align */gap:0.5rem 1rem;padding:0rem 0.5rem;border-radius:0;box-shadow:none;border-left:0.5em solid var(--interactive-accent);margin-bottom:0.25lh;}.check-result.error.svelte-a38xug {border-left:0.5em solid var(--text-error);}.check-result.success.svelte-a38xug {border-left:0.5em solid var(--text-success);}.check-result.svelte-a38xug .message:where(.svelte-a38xug) {\n /* Wrap long messages */white-space:normal;word-break:break-word;font-size:0.95rem;color:var(--text-normal);}.check-result.svelte-a38xug .operations:where(.svelte-a38xug) {\n /* Centre the button(s) vertically and align to the right */display:flex;align-items:center;justify-content:flex-end;gap:0.5rem;}\n\n /* For small screens: move .operations below and stack vertically */\n @media (max-width: 520px) {.check-result.svelte-a38xug {grid-template-columns:1fr;grid-auto-rows:auto;}.check-result.svelte-a38xug .operations:where(.svelte-a38xug) {justify-content:flex-start;margin-top:0.5rem;}\n }"};delegate(["click"]);root_212=from_html('');root_49=from_html('');root_64=from_html('');root_85=from_html('');root_1110=from_html('');root_134=from_html('');root_142=from_html("");root_152=from_html('');root_162=from_html('');root_182=from_html('');root_192=from_html('');root_123=from_html(" ",1);root_242=from_html(" ",1);root27=from_html("
",1);root_213=from_html('');root_410=from_html('');root_65=from_html('');root_76=from_html('');root_86=from_html('');root_93=from_html('');root_1111=from_html('');root_143=from_html('');root_183=from_html(" ",1);root28=from_html(" ",1);new(PouchError=class extends Error{constructor(status,error,reason){super();this.status=status;this.name=error;this.message=reason;this.error=!0}toString(){return JSON.stringify({status:this.status,name:this.name,message:this.message,reason:this.reason})}})(401,"unauthorized","Name or password is incorrect.");MISSING_BULK_DOCS=new PouchError(400,"bad_request","Missing JSON list of 'docs'");MISSING_DOC=new PouchError(404,"not_found","missing");REV_CONFLICT=new PouchError(409,"conflict","Document update conflict");INVALID_ID=new PouchError(400,"bad_request","_id field must contain a string");MISSING_ID=new PouchError(412,"missing_id","_id is required for puts");RESERVED_ID=new PouchError(400,"bad_request","Only reserved document ids may start with underscore.");new PouchError(412,"precondition_failed","Database not open");UNKNOWN_ERROR=new PouchError(500,"unknown_error","Database encountered an unknown error");BAD_ARG=new PouchError(500,"badarg","Some query argument is invalid");new PouchError(400,"invalid_request","Request was invalid");QUERY_PARSE_ERROR=new PouchError(400,"query_parse_error","Some query parameter is invalid");DOC_VALIDATION=new PouchError(500,"doc_validation","Bad special document member");BAD_REQUEST=new PouchError(400,"bad_request","Something wrong with the request");NOT_AN_OBJECT=new PouchError(400,"bad_request","Document must be a JSON object");new PouchError(404,"not_found","Database not found");IDB_ERROR=new PouchError(500,"indexed_db_went_bad","unknown");new PouchError(500,"web_sql_went_bad","unknown");new PouchError(500,"levelDB_went_went_bad","unknown");new PouchError(403,"forbidden","Forbidden by design doc validate_doc_update function");INVALID_REV=new PouchError(400,"bad_request","Invalid rev format");new PouchError(412,"file_exists","The database could not be created, the file already exists.");MISSING_STUB=new PouchError(412,"missing_stub","A pre-existing attachment stub wasn't found");new PouchError(413,"invalid_url","Provided URL is invalid");rnds8=new Uint8Array(16);regex_default=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;validate_default=function validate2(uuid2){return"string"==typeof uuid2&®ex_default.test(uuid2)};byteToHex=[];for(i2=0;i2<256;++i2)byteToHex.push((i2+256).toString(16).substr(1));stringify_default=function stringify(arr){var offset=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,uuid2=(byteToHex[arr[offset+0]]+byteToHex[arr[offset+1]]+byteToHex[arr[offset+2]]+byteToHex[arr[offset+3]]+"-"+byteToHex[arr[offset+4]]+byteToHex[arr[offset+5]]+"-"+byteToHex[arr[offset+6]]+byteToHex[arr[offset+7]]+"-"+byteToHex[arr[offset+8]]+byteToHex[arr[offset+9]]+"-"+byteToHex[arr[offset+10]]+byteToHex[arr[offset+11]]+byteToHex[arr[offset+12]]+byteToHex[arr[offset+13]]+byteToHex[arr[offset+14]]+byteToHex[arr[offset+15]]).toLowerCase();if(!validate_default(uuid2))throw TypeError("Stringified UUID is invalid");return uuid2};v4_default=function v42(options,buf,offset){var rnds,i2;(rnds=(options=options||{}).random||(options.rng||rng)())[6]=15&rnds[6]|64;rnds[8]=63&rnds[8]|128;if(buf){offset=offset||0;for(i2=0;i2<16;++i2)buf[offset+i2]=rnds[i2];return buf}return stringify_default(rnds)};thisAtob=function(str){return atob(str)};thisBtoa=function(str){return btoa(str)};import_spark_md5=__toESM(require_spark_md5());setImmediateShim=self.setImmediate||self.setTimeout;MD5_CHUNK_SIZE=32768;import_events16=__toESM(require_events());funcToString=Function.prototype.toString;objectCtorString=funcToString.call(Object);MAX_NUM_CONCURRENT_REQUESTS=6;try{localStorage.setItem("_pouch_check_localstorage",1);hasLocal=!!localStorage.getItem("_pouch_check_localstorage")}catch(e3){hasLocal=!1}nextTick="function"==typeof queueMicrotask?queueMicrotask:function nextTick2(fn){Promise.resolve().then(fn)};Changes=class extends import_events16.default{constructor(){super();this._listeners={};hasLocalStorage()&&addEventListener("storage",e3=>{this.emit(e3.key)})}addListener(dbName,id,db,opts){function eventFunction(){if(self3._listeners[id])if(inprogress)inprogress="waiting";else{inprogress=!0;var changesOpts=pick(opts,["style","include_docs","attachments","conflicts","filter","doc_ids","view","since","query_params","binary","return_docs"]);db.changes(changesOpts).on("change",function(c3){if(c3.seq>opts.since&&!opts.cancelled){opts.since=c3.seq;opts.onChange(c3)}}).on("complete",function(){"waiting"===inprogress&&nextTick(eventFunction);inprogress=!1}).on("error",function onError(){inprogress=!1})}}var inprogress,self3;if(!this._listeners[id]){inprogress=!1;self3=this;this._listeners[id]=eventFunction;this.on(dbName,eventFunction)}}removeListener(dbName,id){if(id in this._listeners){super.removeListener(dbName,this._listeners[id]);delete this._listeners[id]}}notifyLocalWindows(dbName){hasLocalStorage()&&(localStorage[dbName]="a"===localStorage[dbName]?"b":"a")}notify(dbName){this.emit(dbName);this.notifyLocalWindows(dbName)}};(function f2(){}).name;keys2=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];qName="queryKey";qParser=/(?:^|&)([^&=]*)=?([^&]*)/g;parser2=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;uuid=v4_default;f3=fetch;h2=Headers;MIN_MAGNITUDE=-324;MAGNITUDE_DIGITS=3;SEP="";combinationFields=["$or","$nor","$not"];matchers={$elemMatch:function(doc,userValue,parsedField,docFieldValue){return!!Array.isArray(docFieldValue)&&0!==docFieldValue.length&&("object"==typeof docFieldValue[0]&&null!==docFieldValue[0]?docFieldValue.some(function(val){return rowFilter(val,userValue,Object.keys(userValue))}):docFieldValue.some(function(val){return matchSelector(userValue,doc,parsedField,val)}))},$allMatch:function(doc,userValue,parsedField,docFieldValue){return!!Array.isArray(docFieldValue)&&0!==docFieldValue.length&&("object"==typeof docFieldValue[0]&&null!==docFieldValue[0]?docFieldValue.every(function(val){return rowFilter(val,userValue,Object.keys(userValue))}):docFieldValue.every(function(val){return matchSelector(userValue,doc,parsedField,val)}))},$eq:function(doc,userValue,parsedField,docFieldValue){return fieldIsNotUndefined(docFieldValue)&&0===collate(docFieldValue,userValue)},$gte:function(doc,userValue,parsedField,docFieldValue){return fieldIsNotUndefined(docFieldValue)&&collate(docFieldValue,userValue)>=0},$gt:function(doc,userValue,parsedField,docFieldValue){return fieldIsNotUndefined(docFieldValue)&&collate(docFieldValue,userValue)>0},$lte:function(doc,userValue,parsedField,docFieldValue){return fieldIsNotUndefined(docFieldValue)&&collate(docFieldValue,userValue)<=0},$lt:function(doc,userValue,parsedField,docFieldValue){return fieldIsNotUndefined(docFieldValue)&&collate(docFieldValue,userValue)<0},$exists:function(doc,userValue,parsedField,docFieldValue){return userValue?fieldIsNotUndefined(docFieldValue):!fieldIsNotUndefined(docFieldValue)},$mod:function(doc,userValue,parsedField,docFieldValue){return fieldExists(docFieldValue)&&modField(docFieldValue,userValue)},$ne:function(doc,userValue,parsedField,docFieldValue){return userValue.every(function(neValue){return 0!==collate(docFieldValue,neValue)})},$in:function(doc,userValue,parsedField,docFieldValue){return fieldExists(docFieldValue)&&arrayContainsValue(docFieldValue,userValue)},$nin:function(doc,userValue,parsedField,docFieldValue){return fieldExists(docFieldValue)&&!arrayContainsValue(docFieldValue,userValue)},$size:function(doc,userValue,parsedField,docFieldValue){return fieldExists(docFieldValue)&&Array.isArray(docFieldValue)&&arraySize(docFieldValue,userValue)},$all:function(doc,userValue,parsedField,docFieldValue){return Array.isArray(docFieldValue)&&arrayContainsAllValues(docFieldValue,userValue)},$regex:function(doc,userValue,parsedField,docFieldValue){return fieldExists(docFieldValue)&&"string"==typeof docFieldValue&&userValue.every(function(regexValue){return regexMatch(docFieldValue,regexValue)})},$type:function(doc,userValue,parsedField,docFieldValue){return typeMatch(docFieldValue,userValue)}};index_browser_es_default=function applyChangesFilterPlugin(PouchDB2){PouchDB2._changesFilterPlugin={validate:validate3,normalize,shouldFilter,filter:filter2}};import_events17=__toESM(require_events());Changes2=class extends import_events17.default{constructor(db,opts,callback){var complete,promise;super();this.db=db;opts=opts?clone2(opts):{};complete=opts.complete=once2((err3,resp)=>{err3?listenerCount(this,"error")>0&&this.emit("error",err3):this.emit("complete",resp);this.removeAllListeners();db.removeListener("destroyed",onDestroy2)});if(callback){this.on("complete",function(resp){callback(null,resp)});this.on("error",callback)}const onDestroy2=()=>{this.cancel()};db.once("destroyed",onDestroy2);opts.onChange=(change,pending3,lastSeq)=>{this.isCancelled||tryCatchInChangeListener(this,change,pending3,lastSeq)};promise=new Promise(function(fulfill,reject){opts.complete=function(err3,res2){err3?reject(err3):fulfill(res2)}});this.once("cancel",function(){db.removeListener("destroyed",onDestroy2);opts.complete(null,{status:"cancelled"})});this.then=promise.then.bind(promise);this.catch=promise.catch.bind(promise);this.then(function(result){complete(null,result)},complete);db.taskqueue.isReady?this.validateChanges(opts):db.taskqueue.addTask(failed2=>{failed2?opts.complete(failed2):this.isCancelled?this.emit("cancel"):this.validateChanges(opts)})}cancel(){this.isCancelled=!0;this.db.taskqueue.isReady&&this.emit("cancel")}validateChanges(opts){var callback=opts.complete;PouchDB._changesFilterPlugin?PouchDB._changesFilterPlugin.validate(opts,err3=>{if(err3)return callback(err3);this.doChanges(opts)}):this.doChanges(opts)}doChanges(opts){var newPromise,callback=opts.complete;"live"in(opts=clone2(opts))&&!("continuous"in opts)&&(opts.continuous=opts.live);opts.processChange=processChange;"latest"===opts.since&&(opts.since="now");opts.since||(opts.since=0);if("now"!==opts.since){if(PouchDB._changesFilterPlugin){PouchDB._changesFilterPlugin.normalize(opts);if(PouchDB._changesFilterPlugin.shouldFilter(this,opts))return PouchDB._changesFilterPlugin.filter(this,opts)}else["doc_ids","filter","selector","view"].forEach(function(key3){key3 in opts&&guardedConsole("warn",'The "'+key3+'" option was passed in to changes/replicate, but pouchdb-changes-filter plugin is not installed, so it was ignored. Please install the plugin to enable filtering.')});"descending"in opts||(opts.descending=!1);opts.limit=0===opts.limit?1:opts.limit;opts.complete=callback;if((newPromise=this.db._changes(opts))&&"function"==typeof newPromise.cancel){const cancel2=this.cancel;this.cancel=(...args)=>{newPromise.cancel();cancel2.apply(this,args)}}}else this.db.info().then(info3=>{if(this.isCancelled)callback(null,{status:"cancelled"});else{opts.since=info3.update_seq;this.doChanges(opts)}},callback)}};validRevRegex=/^\d+-[^-]*$/;AbstractPouchDB=class extends import_events17.default{_setup(){this.post=adapterFun("post",function(doc,opts,callback){if("function"==typeof opts){callback=opts;opts={}}if(isNotSingleDoc(doc))return callback(createError(NOT_AN_OBJECT));this.bulkDocs({docs:[doc]},opts,yankError(callback,doc._id))}).bind(this);this.put=adapterFun("put",function(doc,opts,cb2){if("function"==typeof opts){cb2=opts;opts={}}if(isNotSingleDoc(doc))return cb2(createError(NOT_AN_OBJECT));invalidIdError(doc._id);if("_rev"in doc&&!isValidRev(doc._rev))return cb2(createError(INVALID_REV));if(isLocalId(doc._id)&&"function"==typeof this._putLocal)return doc._deleted?this._removeLocal(doc,cb2):this._putLocal(doc,cb2);const putDoc=next2=>{"function"==typeof this._put&&!1!==opts.new_edits?this._put(doc,opts,next2):this.bulkDocs({docs:[doc]},opts,yankError(next2,doc._id))};if(opts.force&&doc._rev){(function transformForceOptionToNewEditsOption(){var parts=doc._rev.split("-"),oldRevId=parts[1],newRevNum=parseInt(parts[0],10)+1,newRevId=rev2();doc._revisions={start:newRevNum,ids:[newRevId,oldRevId]};doc._rev=newRevNum+"-"+newRevId;opts.new_edits=!1})();putDoc(function(err3){var result=err3?null:{ok:!0,id:doc._id,rev:doc._rev};cb2(err3,result)})}else putDoc(cb2)}).bind(this);this.putAttachment=adapterFun("putAttachment",function(docId,attachmentId,rev$$1,blob,type){function createAttachment(doc){var prevrevpos="_rev"in doc?parseInt(doc._rev,10):0;doc._attachments=doc._attachments||{};doc._attachments[attachmentId]={content_type:type,data:blob,revpos:++prevrevpos};return api.put(doc)}var api=this;if("function"==typeof type){type=blob;blob=rev$$1;rev$$1=null}if(void 0===type){type=blob;blob=rev$$1;rev$$1=null}type||guardedConsole("warn","Attachment",attachmentId,"on document",docId,"is missing content_type");return api.get(docId).then(function(doc){if(doc._rev!==rev$$1)throw createError(REV_CONFLICT);return createAttachment(doc)},function(err3){if(err3.reason===MISSING_DOC.message)return createAttachment({_id:docId});throw err3})}).bind(this);this.removeAttachment=adapterFun("removeAttachment",function(docId,attachmentId,rev$$1,callback){this.get(docId,(err3,obj)=>{if(err3)callback(err3);else if(obj._rev===rev$$1){if(!obj._attachments)return callback();delete obj._attachments[attachmentId];0===Object.keys(obj._attachments).length&&delete obj._attachments;this.put(obj,callback)}else callback(createError(REV_CONFLICT))})}).bind(this);this.remove=adapterFun("remove",function(docOrId,optsOrRev,opts,callback){var doc,newDoc;if("string"==typeof optsOrRev){doc={_id:docOrId,_rev:optsOrRev};if("function"==typeof opts){callback=opts;opts={}}}else{doc=docOrId;if("function"==typeof optsOrRev){callback=optsOrRev;opts={}}else{callback=opts;opts=optsOrRev}}(opts=opts||{}).was_delete=!0;(newDoc={_id:doc._id,_rev:doc._rev||opts.rev})._deleted=!0;if(isLocalId(newDoc._id)&&"function"==typeof this._removeLocal)return this._removeLocal(doc,callback);this.bulkDocs({docs:[newDoc]},opts,yankError(callback,newDoc._id))}).bind(this);this.revsDiff=adapterFun("revsDiff",function(req,opts,callback){function addToMissing(id,revId){missing.has(id)||missing.set(id,{missing:[]});missing.get(id).missing.push(revId)}function processDoc(id,rev_tree){var missingForId=req[id].slice(0);traverseRevTree(rev_tree,function(isLeaf,pos,revHash,ctx,opts2){var rev$$1=pos+"-"+revHash,idx2=missingForId.indexOf(rev$$1);if(-1!==idx2){missingForId.splice(idx2,1);"available"!==opts2.status&&addToMissing(id,rev$$1)}});missingForId.forEach(function(rev$$1){addToMissing(id,rev$$1)})}var ids,count,missing;if("function"==typeof opts){callback=opts;opts={}}if(!(ids=Object.keys(req)).length)return callback(null,{});count=0;missing=new Map;ids.forEach(function(id){this._getRevisionTree(id,function(err3,rev_tree){if(err3&&404===err3.status&&"missing"===err3.message)missing.set(id,{missing:req[id]});else{if(err3)return callback(err3);processDoc(id,rev_tree)}if(++count===ids.length){var missingObj={};missing.forEach(function(value,key3){missingObj[key3]=value});return callback(null,missingObj)}})},this)}).bind(this);this.bulkGet=adapterFun("bulkGet",function(opts,callback){bulkGet(this,opts,callback)}).bind(this);this.compactDocument=adapterFun("compactDocument",function(docId,maxHeight,callback){this._getRevisionTree(docId,(err3,revTree)=>{var height,candidates,revs;if(err3)return callback(err3);height=computeHeight(revTree);candidates=[];revs=[];Object.keys(height).forEach(function(rev$$1){height[rev$$1]>maxHeight&&candidates.push(rev$$1)});traverseRevTree(revTree,function(isLeaf,pos,revHash,ctx,opts){var rev$$1=pos+"-"+revHash;"available"===opts.status&&-1!==candidates.indexOf(rev$$1)&&revs.push(rev$$1)});this._doCompaction(docId,revs,callback)})}).bind(this);this.compact=adapterFun("compact",function(opts,callback){if("function"==typeof opts){callback=opts;opts={}}opts=opts||{};this._compactionQueue=this._compactionQueue||[];this._compactionQueue.push({opts,callback});1===this._compactionQueue.length&&doNextCompaction(this)}).bind(this);this.get=adapterFun("get",function(id,opts,cb2){var leaves,i2;if("function"==typeof opts){cb2=opts;opts={}}opts=opts||{};if("string"!=typeof id)return cb2(createError(INVALID_ID));if(isLocalId(id)&&"function"==typeof this._getLocal)return this._getLocal(id,cb2);leaves=[];const finishOpenRevs=()=>{var result=[],count=leaves.length;if(!count)return cb2(null,result);leaves.forEach(leaf=>{this.get(id,{rev:leaf,revs:opts.revs,latest:opts.latest,attachments:opts.attachments,binary:opts.binary},function(err3,doc){var existing,i3,l3;if(err3)result.push({missing:leaf});else{for(i3=0,l3=result.length;i3{var doc,metadata,ctx,conflicts,splittedRev,revNo,revHash,paths,path2,i3,currentPath,howMany,pos,attachments,count,key3;if(err3){err3.docId=id;return cb2(err3)}doc=result.doc;metadata=result.metadata;ctx=result.ctx;opts.conflicts&&(conflicts=collectConflicts(metadata)).length&&(doc._conflicts=conflicts);isDeleted(metadata,doc._rev)&&(doc._deleted=!0);if(opts.revs||opts.revs_info){splittedRev=doc._rev.split("-");revNo=parseInt(splittedRev[0],10);revHash=splittedRev[1];paths=rootToLeaf(metadata.rev_tree);path2=null;for(i3=0;i3x2.id===revHash);(hashIndex===revNo-1||!path2&&-1!==hashIndex)&&(path2=currentPath)}if(!path2){(err3=new Error("invalid rev tree")).docId=id;return cb2(err3)}const pathId=doc._rev.split("-")[1],indexOfRev=path2.ids.findIndex(x2=>x2.id===pathId)+1;howMany=path2.ids.length-indexOfRev;path2.ids.splice(indexOfRev,howMany);path2.ids.reverse();opts.revs&&(doc._revisions={start:path2.pos+path2.ids.length-1,ids:path2.ids.map(function(rev$$1){return rev$$1.id})});if(opts.revs_info){pos=path2.pos+path2.ids.length;doc._revs_info=path2.ids.map(function(rev$$1){return{rev:--pos+"-"+rev$$1.id,status:rev$$1.opts.status}})}}if(opts.attachments&&doc._attachments){attachments=doc._attachments;if(0===(count=Object.keys(attachments).length))return cb2(null,doc);Object.keys(attachments).forEach(key4=>{this._getAttachment(doc._id,key4,attachments[key4],{binary:opts.binary,metadata,ctx},function(err4,data){var att=doc._attachments[key4];att.data=data;delete att.stub;delete att.length;--count||cb2(null,doc)})})}else{if(doc._attachments)for(key3 in doc._attachments)Object.prototype.hasOwnProperty.call(doc._attachments,key3)&&(doc._attachments[key3].stub=!0);cb2(null,doc)}});if("all"===opts.open_revs)this._getRevisionTree(id,function(err3,rev_tree){if(err3)return cb2(err3);leaves=collectLeaves(rev_tree).map(function(leaf){return leaf.rev});finishOpenRevs()});else{if(!Array.isArray(opts.open_revs))return cb2(createError(UNKNOWN_ERROR,"function_clause"));leaves=opts.open_revs;for(i2=0;i2{if(err3)return callback(err3);if(!res2.doc._attachments||!res2.doc._attachments[attachmentId])return callback(createError(MISSING_DOC));opts.ctx=res2.ctx;opts.binary=!0;opts.metadata=res2.metadata;this._getAttachment(docId,attachmentId,res2.doc._attachments[attachmentId],opts,callback)})}).bind(this);this.allDocs=adapterFun("allDocs",function(opts,callback){if("function"==typeof opts){callback=opts;opts={}}opts.skip=void 0!==opts.skip?opts.skip:0;opts.start_key&&(opts.startkey=opts.start_key);opts.end_key&&(opts.endkey=opts.end_key);if("keys"in opts){if(!Array.isArray(opts.keys))return callback(new TypeError("options.keys must be an array"));var incompatibleOpt=["startkey","endkey","key"].filter(function(incompatibleOpt2){return incompatibleOpt2 in opts})[0];if(incompatibleOpt){callback(createError(QUERY_PARSE_ERROR,"Query parameter `"+incompatibleOpt+"` is not compatible with multi-get"));return}if(!isRemote(this)){allDocsKeysParse(opts);if(0===opts.keys.length)return this._allDocs({limit:0},callback)}}return this._allDocs(opts,callback)}).bind(this);this.close=adapterFun("close",function(callback){this._closed=!0;this.emit("closed");return this._close(callback)}).bind(this);this.info=adapterFun("info",function(callback){this._info((err3,info3)=>{if(err3)return callback(err3);info3.db_name=info3.db_name||this.name;info3.auto_compaction=!(!this.auto_compaction||isRemote(this));info3.adapter=this.adapter;callback(null,info3)})}).bind(this);this.id=adapterFun("id",function(callback){return this._id(callback)}).bind(this);this.bulkDocs=adapterFun("bulkDocs",function(req,opts,callback){var i2,attachmentError,adapter,ids;if("function"==typeof opts){callback=opts;opts={}}opts=opts||{};Array.isArray(req)&&(req={docs:req});if(!req||!req.docs||!Array.isArray(req.docs))return callback(createError(MISSING_BULK_DOCS));for(i2=0;i2{this._destroy(opts,(err3,resp)=>{if(err3)return callback(err3);this._destroyed=!0;this.emit("destroyed");callback(null,resp||{ok:!0})})};if(isRemote(this))return destroyDb();this.get("_local/_pouch_dependentDbs",(err3,localDoc)=>{var dependentDbs,PouchDB2,deletedMap;if(err3)return 404!==err3.status?callback(err3):destroyDb();dependentDbs=localDoc.dependentDbs;PouchDB2=this.constructor;deletedMap=Object.keys(dependentDbs).map(name=>{var trueName=usePrefix?name.replace(new RegExp("^"+PouchDB2.prefix),""):name;return new PouchDB2(trueName,this.__opts).destroy()});Promise.all(deletedMap).then(destroyDb,callback)})}).bind(this)}_compact(opts,callback){var taskId,changesOpts={return_docs:!1,last_seq:opts.last_seq||0,since:opts.last_seq||0},promises=[],compactedDocs=0;const onChange=row=>{this.activeTasks.update(taskId,{completed_items:++compactedDocs});promises.push(this.compactDocument(row.id,0))},onError=err3=>{this.activeTasks.remove(taskId,err3);callback(err3)},onComplete=resp=>{var lastSeq=resp.last_seq;Promise.all(promises).then(()=>upsert(this,"_local/compaction",doc=>{if(!doc.last_seq||doc.last_seq{this.activeTasks.remove(taskId);callback(null,{ok:!0})}).catch(onError)};this.info().then(info3=>{taskId=this.activeTasks.add({name:"database_compaction",total_items:info3.update_seq-changesOpts.last_seq});this.changes(changesOpts).on("change",onChange).on("complete",onComplete).on("error",onError)})}changes(opts,callback){if("function"==typeof opts){callback=opts;opts={}}(opts=opts||{}).return_docs="return_docs"in opts?opts.return_docs:!opts.live;return new Changes2(this,opts,callback)}type(){return"function"==typeof this._type?this._type():this.adapter}};AbstractPouchDB.prototype.purge=adapterFun("_purge",function(docId,rev$$1,callback){if(void 0===this._purge)return callback(createError(UNKNOWN_ERROR,"Purge is not implemented in the "+this.adapter+" adapter."));var self3=this;self3._getRevisionTree(docId,(error,revs)=>{if(error)return callback(error);if(!revs)return callback(createError(MISSING_DOC));let path2;try{path2=findPathToLeaf(revs,rev$$1)}catch(error2){return callback(error2.message||error2)}self3._purge(docId,path2,(error2,result)=>{if(error2)return callback(error2);appendPurgeSeq(self3,docId,rev$$1).then(function(){return callback(null,result)})})})});TaskQueue=class{constructor(){this.isReady=!1;this.failed=!1;this.queue=[]}execute(){var fun;if(this.failed)for(;fun=this.queue.shift();)fun(this.failed);else for(;fun=this.queue.shift();)fun()}fail(err3){this.failed=err3;this.execute()}ready(db){this.isReady=!0;this.db=db;this.execute()}addTask(fun){this.queue.push(fun);this.failed&&this.execute()}};PouchInternal=class extends AbstractPouchDB{constructor(name,opts){super();this._setup(name,opts)}_setup(name,opts){var backend;super._setup();opts=opts||{};if(name&&"object"==typeof name){name=(opts=name).name;delete opts.name}void 0===opts.deterministic_revs&&(opts.deterministic_revs=!0);this.__opts=opts=clone2(opts);this.auto_compaction=opts.auto_compaction;this.purged_infos_limit=opts.purged_infos_limit||1e3;this.prefix=PouchDB.prefix;if("string"!=typeof name)throw new Error("Missing/invalid DB name");backend=parseAdapter((opts.prefix||"")+name,opts);opts.name=backend.name;opts.adapter=opts.adapter||backend.adapter;this.name=name;this._adapter=opts.adapter;PouchDB.emit("debug",["adapter","Picked adapter: ",opts.adapter]);if(!PouchDB.adapters[opts.adapter]||!PouchDB.adapters[opts.adapter].valid())throw new Error("Invalid Adapter: "+opts.adapter);if(opts.view_adapter&&(!PouchDB.adapters[opts.view_adapter]||!PouchDB.adapters[opts.view_adapter].valid()))throw new Error("Invalid View Adapter: "+opts.view_adapter);this.taskqueue=new TaskQueue;this.adapter=opts.adapter;PouchDB.adapters[opts.adapter].call(this,opts,err3=>{if(err3)return this.taskqueue.fail(err3);prepareForDestruction(this);this.emit("created",this);PouchDB.emit("created",this.name);this.taskqueue.ready(this)})}};PouchDB=createClass(PouchInternal,function(name,opts){PouchInternal.prototype._setup.call(this,name,opts)});ActiveTasks=class{constructor(){this.tasks={}}list(){return Object.values(this.tasks)}add(task){const id=v4_default();this.tasks[id]={id,name:task.name,total_items:task.total_items,created_at:(new Date).toJSON()};return id}get(id){return this.tasks[id]}remove(id,reason){delete this.tasks[id];return this.tasks}update(id,updatedTask){const task=this.tasks[id];if(void 0!==task){const mergedTask={id:task.id,name:task.name,created_at:task.created_at,total_items:updatedTask.total_items||task.total_items,completed_items:updatedTask.completed_items||task.completed_items,updated_at:(new Date).toJSON()};this.tasks[id]=mergedTask}return this.tasks}};PouchDB.adapters={};PouchDB.preferredAdapters=[];PouchDB.prefix="_pouch_";eventEmitter=new import_events17.default;(function setUpEventEmitter(Pouch){Object.keys(import_events17.default.prototype).forEach(function(key3){"function"==typeof import_events17.default.prototype[key3]&&(Pouch[key3]=eventEmitter[key3].bind(eventEmitter))});var destructListeners=Pouch._destructionListeners=new Map;Pouch.on("ref",function onConstructorRef(db){destructListeners.has(db.name)||destructListeners.set(db.name,[]);destructListeners.get(db.name).push(db)});Pouch.on("unref",function onConstructorUnref(db){var dbList,pos;if(destructListeners.has(db.name)&&!((pos=(dbList=destructListeners.get(db.name)).indexOf(db))<0)){dbList.splice(pos,1);dbList.length>1?destructListeners.set(db.name,dbList):destructListeners.delete(db.name)}});Pouch.on("destroyed",function onConstructorDestroyed(name){if(destructListeners.has(name)){var dbList=destructListeners.get(name);destructListeners.delete(name);dbList.forEach(function(db){db.emit("destroyed",!0)})}})})(PouchDB);PouchDB.adapter=function(id,obj,addToPreferredAdapters){if(obj.valid()){PouchDB.adapters[id]=obj;addToPreferredAdapters&&PouchDB.preferredAdapters.push(id)}};PouchDB.plugin=function(obj){if("function"==typeof obj)obj(PouchDB);else{if("object"!=typeof obj||0===Object.keys(obj).length)throw new Error('Invalid plugin: got "'+obj+'", expected an object or a function');Object.keys(obj).forEach(function(id){PouchDB.prototype[id]=obj[id]})}this.__defaults&&(PouchDB.__defaults=Object.assign({},this.__defaults));return PouchDB};PouchDB.defaults=function(defaultOpts){let PouchWithDefaults=createClass(PouchDB,function(name,opts){opts=opts||{};if(name&&"object"==typeof name){name=(opts=name).name;delete opts.name}opts=Object.assign({},PouchWithDefaults.__defaults,opts);PouchDB.call(this,name,opts)});PouchWithDefaults.preferredAdapters=PouchDB.preferredAdapters.slice();Object.keys(PouchDB).forEach(function(key3){key3 in PouchWithDefaults||(PouchWithDefaults[key3]=PouchDB[key3])});PouchWithDefaults.__defaults=Object.assign({},this.__defaults,defaultOpts);return PouchWithDefaults};PouchDB.fetch=function(url,opts){return f3(url,opts)};PouchDB.prototype.activeTasks=PouchDB.activeTasks=new ActiveTasks;PouchDB.plugin(index_browser_es_default);PouchDB.version="9.0.0";index_es_default=PouchDB;import_vuvuzela=__toESM(require_vuvuzela());reservedWords=toObject(["_id","_rev","_access","_attachments","_deleted","_revisions","_revs_info","_conflicts","_deleted_conflicts","_local_seq","_rev_tree","_replication_id","_replication_state","_replication_state_time","_replication_state_reason","_replication_stats","_removed"]);dataWords=toObject(["_access","_attachments","_replication_id","_replication_state","_replication_state_time","_replication_state_reason","_replication_stats"]);ADAPTER_VERSION=5;DOC_STORE="document-store";BY_SEQ_STORE="by-sequence";ATTACH_STORE="attach-store";ATTACH_AND_SEQ_STORE="attach-seq-store";META_STORE="meta-store";LOCAL_STORE="local-store";DETECT_BLOB_SUPPORT_STORE="detect-blob-support";changesHandler$1=new Changes;running=!1;queue=[];cachedDBs=new Map;openReqList=new Map;IdbPouch.valid=function(){try{return"undefined"!=typeof indexedDB&&"undefined"!=typeof IDBKeyRange}catch(e3){return!1}};index_es_default2=function index2(PouchDB2){PouchDB2.adapter("idb",IdbPouch,!0)};IDB_NULL=Number.MIN_SAFE_INTEGER;IDB_FALSE=Number.MIN_SAFE_INTEGER+1;IDB_TRUE=Number.MIN_SAFE_INTEGER+2;TEST_KEY_INVALID=/^[^a-zA-Z$]|[^a-zA-Z0-9$]+/;TEST_PATH_INVALID=/\\.|(^|\.)[^a-zA-Z$]|[^a-zA-Z0-9$.]+/;KEY_INVALID=new RegExp(TEST_KEY_INVALID.source,"g");PATH_INVALID=new RegExp(TEST_PATH_INVALID.source,"g");SLASH="\\".charCodeAt(0);IS_DOT=".".charCodeAt(0);DOC_STORE2="docs";META_LOCAL_STORE="meta";POUCHDB_IDB_VERSION=2;versionMultiplier=Math.pow(10,13);BINARY_ATTACHMENTS=!1;COUCH_COLLATE_LO=null;COUCH_COLLATE_HI="￿";IDB_COLLATE_LO=Number.NEGATIVE_INFINITY;IDB_COLLATE_HI=[[[[[[[[[[[[]]]]]]]]]]]];ADAPTER_NAME="indexeddb";idbChanges=new Changes;openDatabases={};IndexeddbPouch.valid=function(){return!0};index_es_default3=function index3(PouchDB2){PouchDB2.adapter(ADAPTER_NAME,IndexeddbPouch,!0)};CHANGES_BATCH_SIZE=25;MAX_SIMULTANEOUS_REVS=50;CHANGES_TIMEOUT_BUFFER=5e3;DEFAULT_HEARTBEAT=1e4;supportsBulkGetMap={};HttpPouch.valid=function(){return!0};index_es_default4=function index4(PouchDB2){PouchDB2.adapter("http",HttpPouch,!1);PouchDB2.adapter("https",HttpPouch,!1)};QueryParseError=class _QueryParseError extends Error{constructor(message){super();this.status=400;this.name="query_parse_error";this.message=message;this.error=!0;try{Error.captureStackTrace(this,_QueryParseError)}catch(e3){}}};NotFoundError=class _NotFoundError extends Error{constructor(message){super();this.status=404;this.name="not_found";this.message=message;this.error=!0;try{Error.captureStackTrace(this,_NotFoundError)}catch(e3){}}};BuiltInError=class _BuiltInError extends Error{constructor(message){super();this.status=500;this.name="invalid_value";this.message=message;this.error=!0;try{Error.captureStackTrace(this,_BuiltInError)}catch(e3){}}};persistentQueues={};tempViewQueue=new(TaskQueue2=class{constructor(){this.promise=Promise.resolve()}add(promiseFactory){this.promise=this.promise.catch(()=>{}).then(()=>promiseFactory());return this.promise}finish(){return this.promise}});index_es_default5=function createAbstractMapReduce(localDocName2,mapper3,reducer3,ddocValidator3){function tryMap(db,fun,doc){try{fun(doc)}catch(e3){emitError(db,e3,{fun,doc})}}function tryReduce(db,fun,keys3,values2,rereduce){try{return{output:fun(keys3,values2,rereduce)}}catch(e3){emitError(db,e3,{fun,keys:keys3,values:values2,rereduce});return{error:e3}}}function sortByKeyThenValue(x2,y2){const keyCompare=collate(x2.key,y2.key);return 0!==keyCompare?keyCompare:collate(x2.value,y2.value)}function sliceResults(results,limit,skip){skip=skip||0;return"number"==typeof limit?results.slice(skip,limit+skip):skip>0?results.slice(skip):results}function rowToDocId(row){const val=row.value;return val&&"object"==typeof val&&val._id||row.id}function readAttachmentsAsBlobOrBuffer2(res2){for(const row of res2.rows){const atts=row.doc&&row.doc._attachments;if(atts)for(const filename of Object.keys(atts)){const att=atts[filename];atts[filename].data=b64ToBluffer(att.data,att.content_type)}}}function postprocessAttachments(opts){return function(res2){opts.include_docs&&opts.attachments&&opts.binary&&readAttachmentsAsBlobOrBuffer2(res2);return res2}}function addHttpParam(paramName,opts,params,asJson){let val=opts[paramName];if(void 0!==val){asJson&&(val=encodeURIComponent(JSON.stringify(val)));params.push(paramName+"="+val)}}function coerceInteger(integerCandidate){if(void 0!==integerCandidate){const asNumber=Number(integerCandidate);return isNaN(asNumber)||asNumber!==parseInt(integerCandidate,10)?integerCandidate:asNumber}}function coerceOptions(opts){opts.group_level=coerceInteger(opts.group_level);opts.limit=coerceInteger(opts.limit);opts.skip=coerceInteger(opts.skip);return opts}function checkPositiveInteger(number){if(number){if("number"!=typeof number)return new QueryParseError(`Invalid value for integer: "${number}"`);if(number<0)return new QueryParseError(`Invalid value for positive integer: "${number}"`)}}function checkQueryParseError(options,fun){const startkeyName=options.descending?"endkey":"startkey",endkeyName=options.descending?"startkey":"endkey";if(void 0!==options[startkeyName]&&void 0!==options[endkeyName]&&collate(options[startkeyName],options[endkeyName])>0)throw new QueryParseError("No rows can match your key range, reverse your start_key and end_key or set {descending : true}");if(fun.reduce&&!1!==options.reduce){if(options.include_docs)throw new QueryParseError("{include_docs:true} is invalid for reduce");if(options.keys&&options.keys.length>1&&!options.group&&!options.group_level)throw new QueryParseError("Multi-key fetches for reduce views must use {group: true}")}for(const optionName of["group_level","limit","skip"]){const error=checkPositiveInteger(options[optionName]);if(error)throw error}}async function httpQuery(db,fun,opts){let body,ok,params=[],method="GET";addHttpParam("reduce",opts,params);addHttpParam("include_docs",opts,params);addHttpParam("attachments",opts,params);addHttpParam("limit",opts,params);addHttpParam("descending",opts,params);addHttpParam("group",opts,params);addHttpParam("group_level",opts,params);addHttpParam("skip",opts,params);addHttpParam("stale",opts,params);addHttpParam("conflicts",opts,params);addHttpParam("startkey",opts,params,!0);addHttpParam("start_key",opts,params,!0);addHttpParam("endkey",opts,params,!0);addHttpParam("end_key",opts,params,!0);addHttpParam("inclusive_end",opts,params);addHttpParam("key",opts,params,!0);addHttpParam("update_seq",opts,params);params=params.join("&");params=""===params?"":"?"+params;if(void 0!==opts.keys){const MAX_URL_LENGTH=2e3,keysAsString=`keys=${encodeURIComponent(JSON.stringify(opts.keys))}`;if(keysAsString.length+params.length+1<=MAX_URL_LENGTH)params+=("?"===params[0]?"&":"?")+keysAsString;else{method="POST";"string"==typeof fun?body={keys:opts.keys}:fun.keys=opts.keys}}if("string"==typeof fun){const parts=parseViewName(fun),response2=await db.fetch("_design/"+parts[0]+"/_view/"+parts[1]+params,{headers:new h2({"Content-Type":"application/json"}),method,body:JSON.stringify(body)});ok=response2.ok;const result2=await response2.json();if(!ok){result2.status=response2.status;throw generateErrorFromResponse(result2)}for(const row of result2.rows)if(row.value&&row.value.error&&"builtin_reduce_error"===row.value.error)throw new Error(row.reason);return new Promise(function(resolve){resolve(result2)}).then(postprocessAttachments(opts))}body=body||{};for(const key3 of Object.keys(fun))Array.isArray(fun[key3])?body[key3]=fun[key3]:body[key3]=fun[key3].toString();const response=await db.fetch("_temp_view"+params,{headers:new h2({"Content-Type":"application/json"}),method:"POST",body:JSON.stringify(body)});ok=response.ok;const result=await response.json();if(!ok){result.status=response.status;throw generateErrorFromResponse(result)}return new Promise(function(resolve){resolve(result)}).then(postprocessAttachments(opts))}function customQuery(db,fun,opts){return new Promise(function(resolve,reject){db._query(fun,opts,function(err3,res2){if(err3)return reject(err3);resolve(res2)})})}function customViewCleanup(db){return new Promise(function(resolve,reject){db._viewCleanup(function(err3,res2){if(err3)return reject(err3);resolve(res2)})})}function defaultsTo(value){return function(reason){if(404===reason.status)return value;throw reason}}async function getDocsToPersist(docId,view,docIdsToChangesAndEmits){const metaDocId="_local/doc_"+docId,defaultMetaDoc={_id:metaDocId,keys:[]},docData=docIdsToChangesAndEmits.get(docId),indexableKeysToKeyValues=docData[0],changes3=docData[1],metaDoc=await function getMetaDoc(){return isGenOne(changes3)?Promise.resolve(defaultMetaDoc):view.db.get(metaDocId).catch(defaultsTo(defaultMetaDoc))}();return function processKeyValueDocs(metaDoc2,kvDocsRes){const kvDocs=[],oldKeys=new Set;for(const row of kvDocsRes.rows){const doc=row.doc;if(doc){kvDocs.push(doc);oldKeys.add(doc._id);doc._deleted=!indexableKeysToKeyValues.has(doc._id);if(!doc._deleted){const keyValue=indexableKeysToKeyValues.get(doc._id);"value"in keyValue&&(doc.value=keyValue.value)}}}const newKeys=mapToKeysArray(indexableKeysToKeyValues);for(const key3 of newKeys)if(!oldKeys.has(key3)){const kvDoc={_id:key3},keyValue=indexableKeysToKeyValues.get(key3);"value"in keyValue&&(kvDoc.value=keyValue.value);kvDocs.push(kvDoc)}metaDoc2.keys=uniq(newKeys.concat(metaDoc2.keys));kvDocs.push(metaDoc2);return kvDocs}(metaDoc,await function getKeyValueDocs(metaDoc2){return metaDoc2.keys.length?view.db.allDocs({keys:metaDoc2.keys,include_docs:!0}):Promise.resolve({rows:[]})}(metaDoc))}function updatePurgeSeq(view){return view.sourceDB.get("_local/purges").then(function(res2){const purgeSeq=res2.purgeSeq;return view.db.get("_local/purgeSeq").then(function(res3){return res3._rev}).catch(defaultsTo(void 0)).then(function(rev3){return view.db.put({_id:"_local/purgeSeq",_rev:rev3,purgeSeq})})}).catch(function(err3){if(404!==err3.status)throw err3})}function saveKeyValues(view,docIdsToChangesAndEmits,seq){return view.db.get("_local/lastSeq").catch(defaultsTo({_id:"_local/lastSeq",seq:0})).then(function(lastSeqDoc){var docIds=mapToKeysArray(docIdsToChangesAndEmits);return Promise.all(docIds.map(function(docId){return getDocsToPersist(docId,view,docIdsToChangesAndEmits)})).then(function(listOfDocsToPersist){var docsToPersist=listOfDocsToPersist.flat();lastSeqDoc.seq=seq;docsToPersist.push(lastSeqDoc);return view.db.bulkDocs({docs:docsToPersist})}).then(()=>updatePurgeSeq(view))})}function getQueue(view){const viewName="string"==typeof view?view:view.name;let queue2=persistentQueues[viewName];queue2||(queue2=persistentQueues[viewName]=new TaskQueue2);return queue2}async function updateView(view,opts){return sequentialize(getQueue(view),function(){return updateViewInQueue(view,opts)})()}async function updateViewInQueue(view,opts){function processChange2(docIdsToChangesAndEmits,seq){return function(){return saveKeyValues(view,docIdsToChangesAndEmits,seq)}}async function processNextBatch(){return processBatch(await view.sourceDB.changes({return_docs:!0,conflicts:!0,include_docs:!0,style:"all_docs",since:currentSeq,limit:opts.changes_batch_size}),await getRecentPurges())}function getRecentPurges(){return view.db.get("_local/purgeSeq").then(function(res2){return res2.purgeSeq}).catch(defaultsTo(-1)).then(function(purgeSeq){return view.sourceDB.get("_local/purges").then(function(res2){const recentPurges=res2.purges.filter(function(purge2,index6){return index6>purgeSeq}).map(purge2=>purge2.docId),uniquePurges=recentPurges.filter(function(docId,index6){return recentPurges.indexOf(docId)===index6});return Promise.all(uniquePurges.map(function(docId){return view.sourceDB.get(docId).then(function(doc2){return{docId,doc:doc2}}).catch(defaultsTo({docId}))}))}).catch(defaultsTo([]))})}function processBatch(response,purges){const results=response.results;if(!results.length&&!purges.length)return;for(const purge2 of purges)if(results.findIndex(function(change){return change.id===purge2.docId})<0){const entry={_id:purge2.docId,doc:{_id:purge2.docId,_deleted:1},changes:[]};if(purge2.doc){entry.doc=purge2.doc;entry.changes.push({rev:purge2.doc._rev})}results.push(entry)}const docIdsToChangesAndEmits=createDocIdsToChangesAndEmits(results);queue2.add(processChange2(docIdsToChangesAndEmits,currentSeq));indexed_docs+=results.length;const progress2={view:view.name,last_seq:response.last_seq,results_count:results.length,indexed_docs};view.sourceDB.emit("indexing",progress2);view.sourceDB.activeTasks.update(taskId,{completed_items:indexed_docs});return results.length0&&0===collate(emittedKeyValue.key,lastKey)&&complexKey.push(i2);indexableKeysToKeyValues.set(toIndexableString(complexKey),emittedKeyValue);lastKey=emittedKeyValue.key}return indexableKeysToKeyValues}let mapResults,doc,taskId;const mapFun=mapper3(view.mapFun,function emit2(key3,value){const output={id:doc._id,key:normalizeKey(key3)};null!=value&&(output.value=normalizeKey(value));mapResults.push(output)});let currentSeq=view.seq||0,indexed_docs=0;const progress={view:view.name,indexed_docs};view.sourceDB.emit("indexing",progress);const queue2=new TaskQueue2;try{await function createTask(){return view.sourceDB.info().then(function(info3){taskId=view.sourceDB.activeTasks.add({name:"view_indexing",total_items:info3.update_seq-currentSeq})})}();await processNextBatch();await queue2.finish();view.seq=currentSeq;view.sourceDB.activeTasks.remove(taskId)}catch(error){view.sourceDB.activeTasks.remove(taskId,error)}}function reduceView(view,results,options){0===options.group_level&&delete options.group_level;const shouldGroup=options.group||options.group_level,reduceFun=reducer3(view.reduceFun),groups=[],lvl=isNaN(options.group_level)?Number.POSITIVE_INFINITY:options.group_level;for(const result of results){const last=groups[groups.length-1];let groupKey=shouldGroup?result.key:null;shouldGroup&&Array.isArray(groupKey)&&(groupKey=groupKey.slice(0,lvl));if(last&&0===collate(last.groupKey,groupKey)){last.keys.push([result.key,result.id]);last.values.push(result.value)}else groups.push({keys:[[result.key,result.id]],values:[result.value],groupKey})}results=[];for(const group4 of groups){const reduceTry=tryReduce(view.sourceDB,reduceFun,group4.keys,group4.values,!1);if(reduceTry.error&&reduceTry.error instanceof BuiltInError)throw reduceTry.error;results.push({value:reduceTry.error?null:reduceTry.output,key:group4.groupKey})}return{rows:sliceResults(results,options.limit,options.skip)}}function queryView(view,opts){return sequentialize(getQueue(view),function(){return queryViewInQueue(view,opts)})()}async function queryViewInQueue(view,opts){async function fetchFromView(viewOpts){viewOpts.include_docs=!0;const res2=await view.db.allDocs(viewOpts);totalRows=res2.total_rows;return res2.rows.map(function(result){if("value"in result.doc&&"object"==typeof result.doc.value&&null!==result.doc.value){const keys3=Object.keys(result.doc.value).sort(),expectedKeys=["id","key","value"];if(!(keys3expectedKeys))return result.doc.value}const parsedKeyAndDocId=parseIndexableString(result.doc._id);return{key:parsedKeyAndDocId[0],id:parsedKeyAndDocId[1],value:"value"in result.doc?result.doc.value:null}})}async function onMapResultsReady(rows){let finalResults;finalResults=shouldReduce?reduceView(view,rows,opts):void 0===opts.keys?{total_rows:totalRows,offset:skip,rows}:{total_rows:totalRows,offset:skip,rows:sliceResults(rows,opts.limit,opts.skip)};opts.update_seq&&(finalResults.update_seq=view.seq);if(opts.include_docs){const docIds=uniq(rows.map(rowToDocId)),allDocsRes=await view.sourceDB.allDocs({keys:docIds,include_docs:!0,conflicts:opts.conflicts,attachments:opts.attachments,binary:opts.binary}),docIdsToDocs=new Map;for(const row of allDocsRes.rows)docIdsToDocs.set(row.id,row.doc);for(const row of rows){const docId=rowToDocId(row),doc=docIdsToDocs.get(docId);doc&&(row.doc=doc)}}return finalResults}let totalRows;const shouldReduce=view.reduceFun&&!1!==opts.reduce,skip=opts.skip||0;if(void 0!==opts.keys&&!opts.keys.length){opts.limit=0;delete opts.keys}if(void 0!==opts.keys){const fetchPromises=opts.keys.map(function(key3){const viewOpts={startkey:toIndexableString([key3]),endkey:toIndexableString([key3,{}])};opts.update_seq&&(viewOpts.update_seq=!0);return fetchFromView(viewOpts)});return onMapResultsReady((await Promise.all(fetchPromises)).flat())}{const viewOpts={descending:opts.descending};opts.update_seq&&(viewOpts.update_seq=!0);let startkey,endkey;"start_key"in opts&&(startkey=opts.start_key);"startkey"in opts&&(startkey=opts.startkey);"end_key"in opts&&(endkey=opts.end_key);"endkey"in opts&&(endkey=opts.endkey);void 0!==startkey&&(viewOpts.startkey=opts.descending?toIndexableString([startkey,{}]):toIndexableString([startkey]));if(void 0!==endkey){let inclusiveEnd=!1!==opts.inclusive_end;opts.descending&&(inclusiveEnd=!inclusiveEnd);viewOpts.endkey=toIndexableString(inclusiveEnd?[endkey,{}]:[endkey])}if(void 0!==opts.key){const keyStart=toIndexableString([opts.key]),keyEnd=toIndexableString([opts.key,{}]);if(viewOpts.descending){viewOpts.endkey=keyStart;viewOpts.startkey=keyEnd}else{viewOpts.startkey=keyStart;viewOpts.endkey=keyEnd}}if(!shouldReduce){"number"==typeof opts.limit&&(viewOpts.limit=opts.limit);viewOpts.skip=skip}return onMapResultsReady(await fetchFromView(viewOpts))}}async function httpViewCleanup(db){return(await db.fetch("_view_cleanup",{headers:new h2({"Content-Type":"application/json"}),method:"POST"})).json()}async function localViewCleanup(db){try{const metaDoc=await db.get("_local/"+localDocName2),docsToViews=new Map;for(const fullViewName of Object.keys(metaDoc.views)){const parts=parseViewName(fullViewName),designDocName="_design/"+parts[0],viewName=parts[1];let views=docsToViews.get(designDocName);if(!views){views=new Set;docsToViews.set(designDocName,views)}views.add(viewName)}const opts={keys:mapToKeysArray(docsToViews),include_docs:!0},res2=await db.allDocs(opts),viewsToStatus={};for(const row of res2.rows){const ddocName=row.key.substring(8);for(const viewName of docsToViews.get(row.key)){let fullViewName=ddocName+"/"+viewName;metaDoc.views[fullViewName]||(fullViewName=viewName);const viewDBNames=Object.keys(metaDoc.views[fullViewName]),statusIsGood=row.doc&&row.doc.views&&row.doc.views[viewName];for(const viewDBName of viewDBNames)viewsToStatus[viewDBName]=viewsToStatus[viewDBName]||statusIsGood}}const destroyPromises=Object.keys(viewsToStatus).filter(function(viewDBName){return!viewsToStatus[viewDBName]}).map(function(viewDBName){return sequentialize(getQueue(viewDBName),function(){return new db.constructor(viewDBName,db.__opts).destroy()})()});return Promise.all(destroyPromises).then(function(){return{ok:!0}})}catch(err3){if(404===err3.status)return{ok:!0};throw err3}}async function queryPromised(db,fun,opts){if("function"==typeof db._query)return customQuery(db,fun,opts);if(isRemote(db))return httpQuery(db,fun,opts);const updateViewOpts={changes_batch_size:db.__opts.view_update_changes_batch_size||50};if("string"!=typeof fun){checkQueryParseError(opts,fun);tempViewQueue.add(async function(){const view=await createView(db,"temp_view/temp_view",fun.map,fun.reduce,!0,localDocName2);return fin(updateView(view,updateViewOpts).then(function(){return queryView(view,opts)}),function(){return view.db.destroy()})});return tempViewQueue.finish()}{const fullViewName=fun,parts=parseViewName(fullViewName),designDocName=parts[0],viewName=parts[1],doc=await db.get("_design/"+designDocName);if(!(fun=doc.views&&doc.views[viewName]))throw new NotFoundError(`ddoc ${doc._id} has no view named ${viewName}`);ddocValidator3(doc,viewName);checkQueryParseError(opts,fun);const view=await createView(db,fullViewName,fun.map,fun.reduce,!1,localDocName2);if("ok"===opts.stale||"update_after"===opts.stale){"update_after"===opts.stale&&nextTick(function(){updateView(view,updateViewOpts)});return queryView(view,opts)}await updateView(view,updateViewOpts);return queryView(view,opts)}}return{query:function abstractQuery(fun,opts,callback){const db=this;if("function"==typeof opts){callback=opts;opts={}}opts=opts?coerceOptions(opts):{};"function"==typeof fun&&(fun={map:fun});const promise=Promise.resolve().then(function(){return queryPromised(db,fun,opts)});promisedCallback(promise,callback);return promise},viewCleanup:callbackify(function(){const db=this;return"function"==typeof db._viewCleanup?customViewCleanup(db):isRemote(db)?httpViewCleanup(db):localViewCleanup(db)})}};log2=guardedConsole.bind(null,"log");isArray=Array.isArray;toJSON=JSON.parse;builtInReduce__sum=function(keys3,values2){return sum(values2)},builtInReduce__count=function(keys3,values2){return values2.length},builtInReduce__stats=function(keys3,values2){return{sum:sum(values2),min:Math.min.apply(null,values2),max:Math.max.apply(null,values2),count:values2.length,sumsqr:function sumsqr(values3){var i2,len,num,_sumsqr=0;for(i2=0,len=values3.length;i2{this.once("complete",fulfill);this.once("error",reject)});this.then=function(resolve,reject){return promise.then(resolve,reject)};this.catch=function(reject){return promise.catch(reject)};this.catch(function(){})}cancel(){this.cancelled=!0;this.state="cancelled";this.emit("cancel")}ready(src,target){function cleanup(){src.removeListener("destroyed",onDestroy2);target.removeListener("destroyed",onDestroy2)}if(this._readyCalled)return;this._readyCalled=!0;const onDestroy2=()=>{this.cancel()};src.once("destroyed",onDestroy2);target.once("destroyed",onDestroy2);this.once("complete",cleanup);this.once("error",cleanup)}};Sync=class extends import_events18.default{constructor(src,target,opts,callback){function addOneListener(ee,event2,listener){-1==ee.listeners(event2).indexOf(listener)&&ee.on(event2,listener)}super();this.canceled=!1;const optsPush=opts.push?Object.assign({},opts,opts.push):opts,optsPull=opts.pull?Object.assign({},opts,opts.pull):opts;this.push=replicateWrapper(src,target,optsPush);this.pull=replicateWrapper(target,src,optsPull);this.pushPaused=!0;this.pullPaused=!0;const pullChange=change=>{this.emit("change",{direction:"pull",change})},pushChange=change=>{this.emit("change",{direction:"push",change})},pushDenied=doc=>{this.emit("denied",{direction:"push",doc})},pullDenied=doc=>{this.emit("denied",{direction:"pull",doc})},pushPaused=()=>{this.pushPaused=!0;this.pullPaused&&this.emit("paused")},pullPaused=()=>{this.pullPaused=!0;this.pushPaused&&this.emit("paused")},pushActive=()=>{this.pushPaused=!1;this.pullPaused&&this.emit("active",{direction:"push"})},pullActive=()=>{this.pullPaused=!1;this.pushPaused&&this.emit("active",{direction:"pull"})};let removed={};const removeAll=type=>(event2,func)=>{if("change"===event2&&(func===pullChange||func===pushChange)||"denied"===event2&&(func===pullDenied||func===pushDenied)||"paused"===event2&&(func===pullPaused||func===pushPaused)||"active"===event2&&(func===pullActive||func===pushActive)){event2 in removed||(removed[event2]={});removed[event2][type]=!0;2===Object.keys(removed[event2]).length&&this.removeAllListeners(event2)}};if(opts.live){this.push.on("complete",this.pull.cancel.bind(this.pull));this.pull.on("complete",this.push.cancel.bind(this.push))}this.on("newListener",function(event2){if("change"===event2){addOneListener(this.pull,"change",pullChange);addOneListener(this.push,"change",pushChange)}else if("denied"===event2){addOneListener(this.pull,"denied",pullDenied);addOneListener(this.push,"denied",pushDenied)}else if("active"===event2){addOneListener(this.pull,"active",pullActive);addOneListener(this.push,"active",pushActive)}else if("paused"===event2){addOneListener(this.pull,"paused",pullPaused);addOneListener(this.push,"paused",pushPaused)}});this.on("removeListener",function(event2){if("change"===event2){this.pull.removeListener("change",pullChange);this.push.removeListener("change",pushChange)}else if("denied"===event2){this.pull.removeListener("denied",pullDenied);this.push.removeListener("denied",pushDenied)}else if("active"===event2){this.pull.removeListener("active",pullActive);this.push.removeListener("active",pushActive)}else if("paused"===event2){this.pull.removeListener("paused",pullPaused);this.push.removeListener("paused",pushPaused)}});this.pull.on("removeListener",removeAll("pull"));this.push.on("removeListener",removeAll("push"));const promise=Promise.all([this.push,this.pull]).then(resp=>{const out={push:resp[0],pull:resp[1]};this.emit("complete",out);callback&&callback(null,out);this.removeAllListeners();return out},err3=>{this.cancel();callback?callback(err3):this.emit("error",err3);this.removeAllListeners();if(callback)throw err3});this.then=function(success,err3){return promise.then(success,err3)};this.catch=function(err3){return promise.catch(err3)}}cancel(){if(!this.canceled){this.canceled=!0;this.push.cancel();this.pull.cancel()}}};index_es_default8=function replication(PouchDB2){PouchDB2.replicate=replicateWrapper;PouchDB2.sync=sync;Object.defineProperty(PouchDB2.prototype,"replicate",{get:function(){var self3=this;void 0===this.replicateMethods&&(this.replicateMethods={from:function(other,opts,callback){return self3.constructor.replicate(other,self3,opts,callback)},to:function(other,opts,callback){return self3.constructor.replicate(self3,other,opts,callback)}});return this.replicateMethods}});PouchDB2.prototype.sync=function(dbName,opts,callback){return this.constructor.sync(this,dbName,opts,callback)}};nativeFlat=(...args)=>args.flat(1/0);polyFlat=(...args)=>{let res2=[];for(const subArr of args)Array.isArray(subArr)?res2=res2.concat(polyFlat(...subArr)):res2.push(subArr);return res2};flatten2="function"==typeof Array.prototype.flat?nativeFlat:polyFlat;requireValidation=["$all","$allMatch","$and","$elemMatch","$exists","$in","$mod","$nin","$nor","$not","$or","$regex","$size","$type"];arrayTypeComparisonOperators=["$in","$nin","$mod","$all"];equalityOperators=["$eq","$gt","$gte","$lt","$lte"];abstractMapper=index_es_default5("indexes",function mapper2(mapFunDef,emit2){return createMapper(Object.keys(mapFunDef.fields),emit2,mapFunDef.partial_filter_selector)},function reducer2(){throw new Error("reduce not supported")},function ddocValidator2(ddoc,viewName){const view=ddoc.views[viewName];if(!view.map||!view.map.fields)throw new Error("ddoc "+ddoc._id+" with view "+viewName+" doesn't have map.fields defined. maybe it wasn't created by this plugin?")});ddocIdPrefix=/^_design\//;SHORT_CIRCUIT_QUERY={queryOpts:{limit:0,startkey:COLLATE_HI={"￿":{}},endkey:COLLATE_LO=null},inMemoryFields:[]};logicalMatchers=["$eq","$gt","$gte","$lt","$lte"];(plugin2={}).createIndex=resolveToCallback(async function(requestDef){if("object"!=typeof requestDef)throw new Error("you must provide an index to create");return(isRemote(this)?createIndex:createIndex$1)(this,requestDef)});plugin2.find=resolveToCallback(async function(requestDef){if("object"!=typeof requestDef)throw new Error("you must provide search parameters to find()");return(isRemote(this)?find:find$1)(this,requestDef)});plugin2.explain=resolveToCallback(async function(requestDef){if("object"!=typeof requestDef)throw new Error("you must provide search parameters to explain()");return(isRemote(this)?explain:explain$1)(this,requestDef)});plugin2.getIndexes=resolveToCallback(async function(){return(isRemote(this)?getIndexes:getIndexes$1)(this)});plugin2.deleteIndex=resolveToCallback(async function(indexDef){if("object"!=typeof indexDef)throw new Error("you must provide an index to delete");return(isRemote(this)?deleteIndex:deleteIndex$1)(this,indexDef)});index_browser_es_default3=plugin2;import_transform_pouch=__toESM(require_transform_pouch(),1);index_es_default.plugin(index_es_default2).plugin(index_es_default3).plugin(index_es_default4).plugin(index_browser_es_default2).plugin(index_es_default8).plugin(index_browser_es_default3).plugin(import_transform_pouch.default);index_es_default.prototype.purgeMulti=adapterFun("_purgeMulti",function(docs,callback){if(void 0===this._purge)return callback(createError(UNKNOWN_ERROR,"Purge is not implemented in the "+this.adapter+" adapter."));const self3=this,tasks3=docs.map(param=>()=>new Promise((res2,rej)=>{const[docId,rev$$1]=param;self3._getRevisionTree(docId,(error,revs)=>{if(error)return res2([param,error]);if(!revs)return res2([param,createError(MISSING_DOC)]);let path2;try{path2=findPathToLeaf(revs,rev$$1)}catch(error2){return res2([param,error2.message||error2])}self3._purge(docId,path2,(error2,result)=>res2(error2?[param,error2]:[param,result]))})}));(async()=>{const retAll=(await mapAllTasksWithConcurrencyLimit(1,tasks3)).map(e3=>unwrapTaskResult(e3));await appendPurgeSeqs(self3,retAll.filter(e3=>"ok"in e3[1]).map(e3=>e3[0]));return Object.fromEntries(retAll.map(e3=>[e3[0][0],e3[1]]))})().then(result=>callback(void 0,result)).catch(error=>callback(error))});TrysteroReplicator=class{constructor(env,server){this._onSetup=!1;this.lastSeq="";this._isBroadcasting=!1;this.availableReplicationPairs=new Set;this._replicateToPeers=new Set;this._replicateFromPeers=new Set;this._watchingPeers=new Set;this._env=env;if(server)this.server=server;else try{if(!this.settings.P2P_Enabled){Logger("P2P is not enabled",LOG_LEVEL_VERBOSE);return}if(!this.settings.P2P_AppID)throw new Error("P2P App ID is not provided. We need it to establish the P2P connection");if(!this.settings.P2P_roomID||!this.settings.P2P_passphrase)throw new Error("Room ID and/or P2P Passphrase have not provided. We need them to establish the P2P connection");if(!this.settings.P2P_relays||0===this.settings.P2P_relays.length)throw new Error("No relay URIs provided. We need them to establish the P2P connection");this.server=new TrysteroReplicatorP2PServer(env)}catch(e3){Logger(e3 instanceof Error?e3.message:"Error while creating TrysteroReplicator",LOG_LEVEL_NOTICE);Logger(e3,LOG_LEVEL_VERBOSE);throw e3}}replicationStatus(){return{}}get settings(){return this._env.settings}get db(){return this._env.db}get deviceName(){return this._env.deviceName}get platform(){return this._env.platform}get confirm(){return this._env.confirm}async close(){var _a8;this.requestStatus();await(null==(_a8=this.server)?void 0:_a8.shutdown());this._replicateFromPeers.clear();this._replicateToPeers.clear();this._watchingPeers.clear();this.requestStatus();this.disconnectFromServer()}async open(){var _a8;this.allowReconnection();await(null==(_a8=this.server)?void 0:_a8.start([this.getCommands()]));this.dispatchStatus();this.settings.P2P_AutoBroadcast&&this.enableBroadcastChanges()}async makeSureOpened(){var _a8;(null==(_a8=this.server)?void 0:_a8.isServing)||await this.open()}get autoSyncPeers(){return this.settings.P2P_AutoSyncPeers.split(",").map(e3=>e3.trim()).filter(e3=>e3.length>0).map(e3=>e3.startsWith("~")?new RegExp(e3.substring(1),"i"):new RegExp(`^${e3}$`,"i"))}get autoWatchPeers(){return this.settings.P2P_AutoWatchPeers.split(",").map(e3=>e3.trim()).filter(e3=>e3.length>0).map(e3=>e3.startsWith("~")?new RegExp(e3.substring(1),"i"):new RegExp(`^${e3}$`,"i"))}async onNewPeer(peer){const peerName=peer.name;this.autoSyncPeers.some(e3=>e3.test(peerName))&&await this.sync(peer.peerId);this.autoWatchPeers.some(e3=>e3.test(peerName))&&this.watchPeer(peer.peerId)}onPeerLeaved(peerId){this.unwatchPeer(peerId)}setOnSetup(){this._onSetup=!0}clearOnSetup(){this._onSetup=!1}async getTweakSettings(fromPeerId){var _a8;const allSettings=JSON.parse(JSON.stringify(this.settings));for(const key3 in allSettings)"encrypt"!=key3&&("passphrase"!=key3?key3 in TweakValuesShouldMatchedTemplate||delete allSettings[key3]:allSettings[key3]=await getHashedStringWithCurrentTime(null!=(_a8=allSettings[key3])?_a8:""));return allSettings}getCommands(){return{reqSync:async fromPeerId=>this._onSetup?{error:new Error("The setup is in progress")}:await this.replicateFrom(fromPeerId),"!reqAuth":async fromPeerId=>{var _a8;return await(null==(_a8=this.server)?void 0:_a8.isAcceptablePeer(fromPeerId))},getTweakSettings:async fromPeerId=>await this.getTweakSettings(fromPeerId),onProgress:async fromPeerId=>{if(this._onSetup)return{error:new Error("The setup is in progress")};await this.onUpdateDatabase(fromPeerId)},getAllConfig:async fromPeerId=>{if(this._onSetup)return{error:new Error("The setup is in progress")};const passphrase=await skipIfDuplicated(`getAllConfig-${fromPeerId}`,async()=>await this.confirm.askString("Passphrase required",$msg("P2P.AskPassphraseForShare"),"something you only know",!0)),setting={...this.settings,configPassphraseStore:"",encryptedCouchDBConnection:"",encryptedPassphrase:"",pluginSyncExtendedSetting:{}};if(!passphrase||""==passphrase.trim()){Logger("Passphrase is required to transfer the configuration. The peer cannot be decrypt the config\nIf you repeatedly receive unintended configuration-sharing requests, change the RPC channel immediately. It allows you to leave the connection and disappear, while they are trying brute force attack for the decoy on their local.",LOG_LEVEL_NOTICE);return encrypt5(JSON.stringify(Object.fromEntries(Object.entries(setting).map(([key3,value])=>[key3,"******".repeat(Math.ceil(10*Math.random())+2)]))),Math.random().toString(36).substring(7))}return encrypt5(JSON.stringify(setting),passphrase.trim())},onProgressAcknowledged:async(fromPeerId,info3)=>{try{await this.onProgressAcknowledged(fromPeerId,info3)}catch(e3){Logger("Error while acknowledging the progress",LOG_LEVEL_VERBOSE);Logger(e3,LOG_LEVEL_VERBOSE)}},getIsBroadcasting:()=>Promise.resolve(this._isBroadcasting),requestBroadcasting:async peerId=>{if(this._onSetup)return{error:new Error("The setup is in progress")};if(this._isBroadcasting)return!0;"yes"===await skipIfDuplicated(`requested-${peerId}`,async()=>await this.confirm.askYesNoDialog("The remote peer requested to broadcast the changes. Do you want to allow it?",{defaultOption:"No"}))&&this.enableBroadcastChanges()}}}async requestAuthenticate(peerId){if(!this.server)return!1;try{const connection=this.server.getConnection(peerId),selfPeerId=this.server.serverPeerId;return await connection.invokeRemoteObjectFunction("!reqAuth",[selfPeerId],2e4)}catch(e3){Logger("Error while requesting authentication",LOG_LEVEL_VERBOSE);Logger(e3,LOG_LEVEL_VERBOSE);return!1}}async selectPeer(){if(!this.server)return!1;const knownPeers=this.server.knownAdvertisements;if(0===knownPeers.length){Logger("No known peers",LOG_LEVEL_VERBOSE);return!1}const peers=[...Object.entries(knownPeers)].map(([peerId,info3])=>`${info3.peerId} : (${info3.name})`),selectedPeer=await this.confirm.askSelectString("Select a peer to replicate",peers);return!!selectedPeer&&selectedPeer.split(" ")[0]}async requestSynchroniseToPeer(peerId){await delay(25);if(!this.server)throw new Error("Server is not available");const conn=this.server.getConnection(peerId);return await conn.invokeRemoteFunction("reqSync",[this.server.serverPeerId],0)}async requestSynchroniseToAllAvailablePeers(){await scheduleOnceIfDuplicated("requestSynchroniseToAllAvailablePeers",async()=>{await delay(25);const replications=[...this.availableReplicationPairs].map(peerId=>this.requestSynchroniseToPeer(peerId));await Promise.all(replications)})}dispatchStatus(){eventHub.emitEvent(EVENT_P2P_REPLICATOR_STATUS,{isBroadcasting:this._isBroadcasting,replicatingTo:[...this._replicateToPeers],replicatingFrom:[...this._replicateFromPeers],watchingPeers:[...this._watchingPeers]})}requestStatus(){var _a8;this.dispatchStatus();null==(_a8=this.server)||_a8.dispatchConnectionStatus()}disableBroadcastChanges(){var _a8;null==(_a8=this.changes)||_a8.cancel();this._isBroadcasting=!1;this.dispatchStatus()}enableBroadcastChanges(){if(this._isBroadcasting)return;this._isBroadcasting=!0;this.dispatchStatus();if(this.changes){this.changes.cancel();this.changes.removeAllListeners()}this.changes=this.db.changes({since:"now",live:!0,include_docs:!1,selector:{_id:{$gt:"_local/"}}});this.changes.on("change",async change=>{this.lastSeq=change.seq;await this.notifyProgress()});const closeChanges=reason=>{var _a8,_b5;if(reason)if(reason instanceof Error){Logger("Error while broadcasting the changes",LOG_LEVEL_INFO);Logger(reason,LOG_LEVEL_VERBOSE)}else{Logger("Broadcasting the changes has been finished",LOG_LEVEL_INFO);Logger(reason,LOG_LEVEL_VERBOSE)}null==(_a8=this.changes)||_a8.cancel();null==(_b5=this.changes)||_b5.removeAllListeners();this.changes=void 0;this._isBroadcasting=!1;this.dispatchStatus()};this.changes.on("error",closeChanges);this.changes.on("complete",closeChanges);fireAndForget(async()=>await this.notifyProgress())}get knownAdvertisements(){var _a8,_b5;return null!=(_b5=null==(_a8=this.server)?void 0:_a8.knownAdvertisements)?_b5:[]}async sync(remotePeer,showNotice=!1){const from=await this.replicateFrom(remotePeer,showNotice);if(!from||from.error){Logger("Error while replicating from the remote",LOG_LEVEL_VERBOSE);Logger(from.error,LOG_LEVEL_VERBOSE);return from}const logLevel=showNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;Logger(`P2P Replication has been requested to ${remotePeer}`,logLevel,"p2p-replicator");const res2=await this.requestSynchroniseToPeer(remotePeer);res2.ok&&Logger("P2P Replication has been done",logLevel,"p2p-replicator");if(res2.error){Logger("Error while syncing from the remote",logLevel,"p2p-replicator");Logger(res2.error,LOG_LEVEL_VERBOSE)}}async replicateTo(){await this.makeSureOpened();const remotePeer=await this.selectPeer();if(remotePeer){Logger(`P2P Replicating to ${remotePeer}`,LOG_LEVEL_INFO);try{if(this._replicateToPeers.has(remotePeer)){Logger(`Replication to ${remotePeer} is already in progress`,LOG_LEVEL_VERBOSE);return}this._replicateToPeers.add(remotePeer);this.dispatchStatus();return await this.requestSynchroniseToPeer(remotePeer)}finally{this._replicateToPeers.delete(remotePeer);this.dispatchStatus()}}else Logger("No peer selected",LOG_LEVEL_VERBOSE)}dispatchReplicationProgress(peerId,info3){this.onReplicationProgress(peerId,info3)}onReplicationProgress(peerId,info3){var _a8,_b5;const stat={peerId,peerName:(null==(_b5=null==(_a8=this.server)?void 0:_a8._knownAdvertisements.get(peerId))?void 0:_b5.name)||peerId,fetching:{max:0,current:0,isActive:!1}};info3&&(stat.fetching={max:info3.maxSeqInBatch,current:info3.lastSeq,isActive:!0});eventHub.emitEvent("p2p-replicator-progress",stat);return!0}onProgressAcknowledged(peerId,info3){var _a8,_b5;const ack={peerId,peerName:(null==(_b5=null==(_a8=this.server)?void 0:_a8._knownAdvertisements.get(peerId))?void 0:_b5.name)||peerId,sending:{max:0,current:0,isActive:!1}};info3&&(ack.sending={max:info3.maxSeqInBatch,current:info3.lastSeq,isActive:!0});eventHub.emitEvent("p2p-replicator-progress",ack);return!0}acknowledgeProgress(remotePeerId,info3){this.server&&this.server.getConnection(remotePeerId).invokeRemoteFunction("onProgressAcknowledged",[this.server.serverPeerId,info3],500).catch(ex=>{Logger("Error while acknowledging the progress",LOG_LEVEL_VERBOSE);Logger(ex,LOG_LEVEL_VERBOSE)})}async replicateFrom(remotePeer,showNotice=!1,fromStart=!1){const logLevel=showNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;Logger(`P2P Requesting Authentication to ${remotePeer}`,logLevel,"p2p-replicator");if(!0!==await this.requestAuthenticate(remotePeer)){Logger("Peer rejected the connection",LOG_LEVEL_NOTICE,"p2p-replicator");return{error:new Error("Peer rejected the connection")}}if(!0!==await this.checkTweakValues(remotePeer)){Logger("Tweak values are not matched",LOG_LEVEL_NOTICE,"p2p-replicator");return{error:new Error("Tweak values are not matched")}}Logger(`P2P Replicating from ${remotePeer}`,logLevel,"p2p-replicator");if(this._replicateFromPeers.has(remotePeer)){Logger(`Replication from ${remotePeer} is already in progress`,LOG_LEVEL_NOTICE,"p2p-replicator");return{error:new Error("Replication from this peer is already in progress")}}this._replicateFromPeers.add(remotePeer);this.dispatchStatus();try{if(!this.server)throw new Error("Server is not available");const remoteDB=this.server.getConnection(remotePeer).remoteDB;Logger(`P2P replicateFrom preparing remote DB info for ${remotePeer}`,LOG_LEVEL_VERBOSE,"p2p-replicator");const remoteDBInfo=await remoteDB.info();Logger(`P2P replicateFrom remote DB info for ${remotePeer}: ${remoteDBInfo.db_name} seq=${remoteDBInfo.update_seq}`,LOG_LEVEL_VERBOSE,"p2p-replicator");const localDBInfo=await this.db.info();Logger(`P2P replicateFrom local DB info for ${remotePeer}: ${localDBInfo.db_name} seq=${localDBInfo.update_seq}`,LOG_LEVEL_VERBOSE,"p2p-replicator");Logger(`P2P replicateFrom entering replicateShim for ${remotePeer}`,LOG_LEVEL_VERBOSE,"p2p-replicator");await replicateShim(this.db,remoteDB,async(docs,info3)=>{await this._env.processReplicatedDocs(docs);this.dispatchReplicationProgress(remotePeer,info3);this.acknowledgeProgress(remotePeer,info3);this.notifyProgress(remotePeer);Logger(`P2P Replication from ${remotePeer}\n${info3.lastSeq} / ${info3.maxSeqInBatch})`,logLevel,"p2p-replicator")},{live:!1,rewind:fromStart});Logger(`P2P replicateFrom replicateShim returned for ${remotePeer}`,LOG_LEVEL_VERBOSE,"p2p-replicator");this.acknowledgeProgress(remotePeer,void 0);Logger(`P2P Replication from ${remotePeer} has been completed`,logLevel,"p2p-replicator")}catch(e3){Logger("Error while P2P replicating",logLevel,"p2p-replicator");Logger(e3,LOG_LEVEL_VERBOSE);return{error:e3}}finally{this._replicateFromPeers.delete(remotePeer);this.dispatchStatus()}return{ok:!0}}notifyProgress(excludePeerId){if(this._isBroadcasting&&this.server){for(const peer of this.server.knownAdvertisements){const peerId=peer.peerId;peerId!==excludePeerId&&serialized(`notifyProgress-${peerId}`,async()=>{var _a8,_b5,_c3;if(await(null==(_a8=this.server)?void 0:_a8.isAcceptablePeer(peerId)))try{return await(null==(_c3=this.server)?void 0:_c3.getConnection(peerId).invokeRemoteFunction("onProgress",[null==(_b5=this.server)?void 0:_b5.serverPeerId],0))}catch(e3){Logger(`Error while notifying progress to ${peerId}`,LOG_LEVEL_VERBOSE);Logger(e3,LOG_LEVEL_VERBOSE)}else Logger(`Peer ${peerId} is not acceptable to notify progress`,LOG_LEVEL_VERBOSE)})}return Promise.resolve()}}async requestBroadcastChanges(peerId){var _a8;return await(null==(_a8=this.server)?void 0:_a8.getConnection(peerId).invokeRemoteFunction("requestBroadcasting",[this.server.serverPeerId],0))}async getRemoteIsBroadcasting(peerId){var _a8;try{return await(null==(_a8=this.server)?void 0:_a8.getConnection(peerId).invokeRemoteFunction("getIsBroadcasting",[],0))}catch(e3){Logger("Error while getting remote is broadcasting",LOG_LEVEL_VERBOSE);Logger(e3,LOG_LEVEL_VERBOSE)}}watchPeer(peerId){this._watchingPeers.add(peerId);this.dispatchStatus()}unwatchPeer(peerId){this._watchingPeers.delete(peerId);this.dispatchStatus()}async onUpdateDatabase(fromPeerId){if(this._watchingPeers.has(fromPeerId)){Logger(`Progress notification from ${fromPeerId}`,LOG_LEVEL_VERBOSE);return await serialized(`onProgress-${fromPeerId}`,async()=>await this.replicateFrom(fromPeerId))}return!1}async getRemoteConfig(peerId){if(!this.server){Logger("Server is not available",LOG_LEVEL_NOTICE);return!1}const connection=this.server.getConnection(peerId),encryptedConfig=await connection.invokeRemoteFunction("getAllConfig",[this.server.serverPeerId],0),passphrase=await this.confirm.askString("Passphrase required",$msg("P2P.AskPassphraseForDecrypt"),"something you only know",!0);if(!passphrase||""==passphrase.trim()){Logger("Passphrase is required to decrypt the configuration. The config cannot be decrypted",LOG_LEVEL_NOTICE);return!1}try{return JSON.parse(await decrypt5(encryptedConfig,passphrase))}catch(e3){Logger("Error while decrypting the configuration",LOG_LEVEL_NOTICE);Logger(e3,LOG_LEVEL_VERBOSE);return!1}}async checkTweakValues(peerId){var _a8;if(!this.server){Logger("Server is not available",LOG_LEVEL_NOTICE);return!1}const peerPlatform=null==(_a8=this.server.knownAdvertisements.find(e3=>e3.peerId==peerId))?void 0:_a8.platform;if(null==peerPlatform){Logger("Peer is not found",LOG_LEVEL_NOTICE);return!1}if("pseudo-replicator"===this.platform)return!0;if("pseudo-replicator"===peerPlatform)return!0;const connection=this.server.getConnection(peerId),tweakValues=await connection.invokeRemoteObjectFunction("getTweakSettings",[this.server.serverPeerId],5e3),thisTweakValues=await this.getTweakSettings("");if(!isObjectDifferent(thisTweakValues,tweakValues))return!0;if(thisTweakValues.passphrase!==tweakValues.passphrase){Logger("Replication cancelled: Passphrase is not matched\nCannot replicate to a remote database until the problem is resolved.",LOG_LEVEL_NOTICE);return!1}Logger("Some mismatched configuration have been detected... Please check settings for efficient replication.",LOG_LEVEL_NOTICE);return!0}async replicateFromCommand(showResult=!1){null===await skipIfDuplicated("replicateFromCommand",async()=>{var _a8;const logLevel=showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;if(!this._env.settings.P2P_Enabled){Logger($msg("P2P.NotEnabled"),logLevel);return Promise.resolve(!1)}const peers=this._env.settings.P2P_SyncOnReplication.split(",").map(e3=>e3.trim()).filter(e3=>e3);if(0==peers.length){Logger($msg("P2P.NoAutoSyncPeers"),logLevel);return Promise.resolve(!1)}for(const peer of peers){const peerId=null==(_a8=this.knownAdvertisements.find(e3=>e3.name==peer))?void 0:_a8.peerId;if(peerId){Logger($msg("P2P.SyncStartedWith",{name:peer}),logLevel);await this.sync(peerId,showResult)}else Logger($msg("P2P.SeemsOffline",{name:peer}),logLevel)}Logger($msg("P2P.SyncCompleted"),logLevel);return Promise.resolve(!0)})&&Logger($msg("P2P.SyncAlreadyRunning"),LOG_LEVEL_NOTICE)}disconnectFromServer(){const connections=getRelaySockets(),sockets=Object.entries(connections);pauseRelayReconnection();sockets.forEach(([,s2])=>{s2.close();s2.onclose=()=>{var _a8;null==(_a8=this.server)||_a8.dispatchConnectionStatus()}});this.pauseServe()}async pauseServe(){var _a8,_b5;await(null==(_a8=this.server)?void 0:_a8.close());await(null==(_b5=this.server)?void 0:_b5.dispatchConnectionStatus())}allowReconnection(){resumeRelayReconnection()}};root_214=from_html('');on_click3=(_,setDefaultRelay)=>setDefaultRelay();root_34=from_html(' ',1);on_click_1=(__1,generateDefaultGroupId)=>generateDefaultGroupId();root_411=from_html(' ',1);root_66=from_html("The Group ID and passphrase are used to identify your group of devices. Make sure to use the same Group ID and\n passphrase on all devices you want to synchronise.
Note that the Group ID is not limited to the generated format; you can use any string as the Group ID.",1);root_77=from_html('');root_87=from_html('');root_103=from_html('');root_153=from_html('');root_163=from_html('');root_124=from_html(" ",1);root_215=from_html(" ",1);root29=from_html(" ",1);delegate(["click"]);root_216=from_html(' ',1);root_35=from_html("Enabling end-to-end encryption ensures that your data is encrypted on your device before being sent to the remote\n server. This means that even if someone gains access to the server, they won't be able to read your data without the\n passphrase. Make sure to remember your passphrase, as it will be required to decrypt your data on other devices.
Also, please note that if you are using Peer-to-Peer synchronization, this configuration will be used when you switch\n to other methods and connect to a remote server in the future.",1);root_53=from_html('');root_94=from_html("");root_88=from_html("");root_78=from_html(" ",1);root_125=from_html("

Please be aware that the End-to-End Encryption passphrase is not validated until the synchronisation process\n actually commences. This is a security measure designed to protect your data.

Therefore, we ask that you exercise extreme caution when configuring server information manually. If an\n incorrect passphrase is entered, the data on the server will become corrupted.

Please understand that this is intended behaviour.

",1);root_135=from_html(" ",1);root30=from_html(" ",1);import_qrcode_generator=__toESM(require_qrcode(),1);OutputFormat=(OutputFormat2=>{OutputFormat2[OutputFormat2.SVG=0]="SVG";OutputFormat2[OutputFormat2.ASCII=1]="ASCII";return OutputFormat2})(OutputFormat||{});necessaryErasureProperties=["configPassphraseStore","encryptedCouchDBConnection","encryptedPassphrase"];UserMode=(UserMode2=>{UserMode2.NewUser="new-user";UserMode2.ExistingUser="existing-user";UserMode2.Unknown="unknown";UserMode2.Update="unknown";return UserMode2})(UserMode||{});SetupManager=class extends AbstractModule{get dialogManager(){return this.services.UI.dialogManager}async startOnBoarding(){const isUserNewOrExisting=await this.dialogManager.openWithExplicitCancel(Intro);if("new-user"===isUserNewOrExisting)await this.onOnboard("new-user");else if("existing-user"===isUserNewOrExisting)await this.onOnboard("existing-user");else if("cancelled"===isUserNewOrExisting){this._log("Onboarding cancelled by user.",LOG_LEVEL_NOTICE);return!1}return!1}async onOnboard(userMode){const originalSetting="new-user"===userMode?DEFAULT_SETTINGS:this.core.settings;if("new-user"===userMode){const method=await this.dialogManager.openWithExplicitCancel(SelectMethodNewUser);if("use-setup-uri"===method)await this.onUseSetupURI(userMode);else if("configure-manually"===method)await this.onConfigureManually(originalSetting,userMode);else if("cancelled"===method){this._log("Onboarding cancelled by user.",LOG_LEVEL_NOTICE);return!1}}else if("existing-user"===userMode){const method=await this.dialogManager.openWithExplicitCancel(SelectMethodExisting);if("use-setup-uri"===method)await this.onUseSetupURI(userMode);else if("configure-manually"===method)await this.onConfigureManually(originalSetting,userMode);else if("scan-qr-code"===method)await this.onPromptQRCodeInstruction();else if("cancelled"===method){this._log("Onboarding cancelled by user.",LOG_LEVEL_NOTICE);return!1}}return!1}async onUseSetupURI(userMode,setupURI=""){const newSetting=await this.dialogManager.openWithExplicitCancel(UseSetupURI,setupURI);if("cancelled"===newSetting){this._log("Setup URI dialog cancelled.",LOG_LEVEL_NOTICE);return!1}this._log("Setup URI dialog closed.",LOG_LEVEL_VERBOSE);return await this.onConfirmApplySettingsFromWizard(newSetting,userMode)}async onCouchDBManualSetup(userMode,currentSetting,activate=!0){const originalSetting=JSON.parse(JSON.stringify(currentSetting)),baseSetting=JSON.parse(JSON.stringify(originalSetting)),couchConf=await this.dialogManager.openWithExplicitCancel(SetupRemoteCouchDB,originalSetting);if("cancelled"===couchConf){this._log("Manual configuration cancelled.",LOG_LEVEL_NOTICE);return await this.onOnboard(userMode)}const newSetting={...baseSetting,...couchConf};activate&&(newSetting.remoteType=REMOTE_COUCHDB);return await this.onConfirmApplySettingsFromWizard(newSetting,userMode,activate)}async onBucketManualSetup(userMode,currentSetting,activate=!0){const bucketConf=await this.dialogManager.openWithExplicitCancel(SetupRemoteBucket,currentSetting);if("cancelled"===bucketConf){this._log("Manual configuration cancelled.",LOG_LEVEL_NOTICE);return await this.onOnboard(userMode)}const newSetting={...currentSetting,...bucketConf};activate&&(newSetting.remoteType=REMOTE_MINIO);return await this.onConfirmApplySettingsFromWizard(newSetting,userMode,activate)}async onP2PManualSetup(userMode,currentSetting,activate=!0){const p2pConf=await this.dialogManager.openWithExplicitCancel(SetupRemoteP2P,currentSetting);if("cancelled"===p2pConf){this._log("Manual configuration cancelled.",LOG_LEVEL_NOTICE);return await this.onOnboard(userMode)}const newSetting={...currentSetting,...p2pConf};activate&&(newSetting.remoteType=REMOTE_P2P);return await this.onConfirmApplySettingsFromWizard(newSetting,userMode,activate)}async onlyE2EEConfiguration(userMode,currentSetting){const e2eeConf=await this.dialogManager.openWithExplicitCancel(SetupRemoteE2EE,currentSetting);if("cancelled"===e2eeConf){this._log("E2EE configuration cancelled.",LOG_LEVEL_NOTICE);return await!1}const newSetting={...currentSetting,...e2eeConf};return await this.onConfirmApplySettingsFromWizard(newSetting,userMode)}async onConfigureManually(originalSetting,userMode){const e2eeConf=await this.dialogManager.openWithExplicitCancel(SetupRemoteE2EE,originalSetting);if("cancelled"===e2eeConf){this._log("Manual configuration cancelled.",LOG_LEVEL_NOTICE);return await this.onOnboard(userMode)}const currentSetting={...originalSetting,...e2eeConf};return await this.onSelectServer(currentSetting,userMode)}async onSelectServer(currentSetting,userMode){const method=await this.dialogManager.openWithExplicitCancel(SetupRemote);if("couchdb"===method)return await this.onCouchDBManualSetup(userMode,currentSetting,!0);if("bucket"===method)return await this.onBucketManualSetup(userMode,currentSetting,!0);if("p2p"===method)return await this.onP2PManualSetup(userMode,currentSetting,!0);if("cancelled"===method){this._log("Manual configuration cancelled.",LOG_LEVEL_NOTICE);if("unknown"!==userMode)return await this.onOnboard(userMode)}return!1}async onConfirmApplySettingsFromWizard(newConf,_userMode,activate=!0,extra=()=>{}){newConf=await this.services.setting.adjustSettings({...this.settings,...newConf});let userMode=_userMode;if("unknown"===userMode){if(!1===isObjectDifferent(this.settings,newConf,!0)){this._log("No changes in settings detected. Skipping applying settings from wizard.",LOG_LEVEL_NOTICE);return!0}const patch=generatePatchObj(this.settings,newConf);console.log("Changes:");console.dir(patch);if(!activate){extra();await this.applySetting(newConf,"existing-user");this._log("Setting Applied",LOG_LEVEL_NOTICE);return!0}if(!1===isObjectDifferent({...this.settings,P2P_DevicePeerName:""},{...newConf,P2P_DevicePeerName:""},!0)){extra();await this.applySetting(newConf,"existing-user");this._log("Settings from wizard applied.",LOG_LEVEL_NOTICE);return!0}{const userModeResult=await this.dialogManager.openWithExplicitCancel(OutroAskUserMode);if("new-user"===userModeResult)userMode="new-user";else if("existing-user"===userModeResult)userMode="existing-user";else{if("compatible-existing-user"===userModeResult){extra();await this.applySetting(newConf,"existing-user");this._log("Settings from wizard applied.",LOG_LEVEL_NOTICE);return!0}if("cancelled"===userModeResult){this._log("User cancelled applying settings from wizard.",LOG_LEVEL_NOTICE);return!1}}}}const component2="new-user"===userMode?OutroNewUser:OutroExistingUser,confirm=await this.dialogManager.openWithExplicitCancel(component2);if("cancelled"===confirm){this._log("User cancelled applying settings from wizard..",LOG_LEVEL_NOTICE);return!1}if(confirm){extra();await this.applySetting(newConf,userMode);"new-user"===userMode?await this.core.rebuilder.scheduleRebuild():await this.core.rebuilder.scheduleFetch()}return!1}async onPromptQRCodeInstruction(){const qrResult=await this.dialogManager.open(ScanQRCode);this._log("QR Code dialog closed.",LOG_LEVEL_VERBOSE);this._log(`QR Code result: ${qrResult}`,LOG_LEVEL_VERBOSE);return!1}async decodeQR(qr){const newSettings=decodeSettingsFromQRCodeData(qr);return await this.onConfirmApplySettingsFromWizard(newSettings,"unknown")}async applySetting(newConf,userMode){this.services.setting.clearUsedPassphrase();await this.services.setting.applyExternalSettings(newConf,!0);return!0}};SveltePanel=class{constructor(component2,mountTo,valueStore){this._componentValue=writable(void 0);this._componentValue=null!=valueStore?valueStore:writable(void 0);this._mountedComponent=mount(component2,{target:mountTo,props:{port:this._componentValue}});return this}destroy(){this._mountedComponent&&unmount(this._mountedComponent)}get componentValue(){return get2(this._componentValue)}set componentValue(value){this._componentValue.set(value)}};root_121=from_html('
',1);root31=from_html('
');$$css11={hash:"svelte-xi83q0",code:'.info-panel.svelte-xi83q0 {padding:0.6rem;flex-grow:1;}\n\n /* Main Grid (Info Items) 120px to 1fr, repeat */.info-grid.svelte-xi83q0 {display:grid;grid-template-columns:minmax(120px, 1fr) 1fr;column-count:2;gap:0.6rem;margin-top:0.5rem;grid-area:"info-key" "info-value";}.info-entry.svelte-xi83q0 {display:grid;gap:0.5rem;border-radius:6px;box-sizing:border-box;min-height:1.2em;}.info-key.svelte-xi83q0 {font-weight:600;align-items:center;border-top:1px solid var(--background-modifier-hover);border-bottom:1px solid var(--background-modifier-hover);grid-area:"info-key";}.info-item.svelte-xi83q0 {align-items:start;padding:0.5rem;background:var(--background-modifier-hover, rgba(0, 0, 0, 0.03));grid-area:"info-value";}.value.svelte-xi83q0 {white-space:pre-wrap;word-break:break-word;color:var(--text-normal, #e6e6e6);min-height:1em;}\n\n @container (max-width: 340px) {.info-grid.svelte-xi83q0 {grid-template-columns:1fr;}.info-item.svelte-xi83q0 {grid-template-columns:1fr;}\n }'};ConnectionStringParser=class{static parse(uriString){const url=new URL(uriString),protocol=url.protocol.replace(":","");switch(protocol){case"sls+http":case"sls+https":return{type:"couchdb",settings:this.parseCouchDB(url)};case"sls+s3":return{type:"s3",settings:this.parseS3(url)};case"sls+p2p":return{type:"p2p",settings:this.parseP2P(url)};default:throw new Error(`Unsupported protocol: ${protocol}`)}}static serialize(config){switch(config.type){case"couchdb":return this.serializeCouchDB(config.settings);case"s3":return this.serializeS3(config.settings);case"p2p":return this.serializeP2P(config.settings);default:throw new Error(`Unsupported type: ${config.type}`)}}static parseCouchDB(url){return{couchDB_URI:`${(url.protocol.split("+")[1]||"https").replace(":","")}://${url.host}${"/"===url.pathname?"":url.pathname}`,couchDB_USER:decodeURIComponent(url.username),couchDB_PASSWORD:decodeURIComponent(url.password),couchDB_DBNAME:url.searchParams.get("db")||"",couchDB_CustomHeaders:url.searchParams.get("headers")||"",useJWT:"true"===url.searchParams.get("useJWT"),jwtAlgorithm:url.searchParams.get("jwtAlg")||"",jwtKey:url.searchParams.get("jwtKey")||"",jwtKid:url.searchParams.get("jwtKid")||"",jwtSub:url.searchParams.get("jwtSub")||"",jwtExpDuration:parseInt(url.searchParams.get("jwtExp")||"5"),useRequestAPI:"true"===url.searchParams.get("useRequestAPI")}}static serializeCouchDB(settings){const url=new URL(settings.couchDB_URI),newUrl=new URL(`sls+${url.protocol.replace(":","")}://${url.host}${url.pathname}`);newUrl.username=encodeURIComponent(settings.couchDB_USER);newUrl.password=encodeURIComponent(settings.couchDB_PASSWORD);newUrl.searchParams.set("db",settings.couchDB_DBNAME);settings.couchDB_CustomHeaders&&newUrl.searchParams.set("headers",settings.couchDB_CustomHeaders);if(settings.useJWT){newUrl.searchParams.set("useJWT","true");newUrl.searchParams.set("jwtAlg",settings.jwtAlgorithm);settings.jwtKey&&newUrl.searchParams.set("jwtKey",settings.jwtKey);settings.jwtKid&&newUrl.searchParams.set("jwtKid",settings.jwtKid);settings.jwtSub&&newUrl.searchParams.set("jwtSub",settings.jwtSub);newUrl.searchParams.set("jwtExp",`${settings.jwtExpDuration||5}`)}settings.useRequestAPI&&newUrl.searchParams.set("useRequestAPI","true");return newUrl.toString()}static parseS3(url){const endpoint=url.searchParams.get("endpoint")||`https://${url.host}`;return{accessKey:decodeURIComponent(url.username),secretKey:decodeURIComponent(url.password),endpoint,bucket:url.searchParams.get("bucket")||"",region:url.searchParams.get("region")||"auto",bucketPrefix:url.searchParams.get("prefix")||"",useCustomRequestHandler:"true"===url.searchParams.get("useProxy"),bucketCustomHeaders:url.searchParams.get("headers")||"",forcePathStyle:"false"!==url.searchParams.get("pathStyle")}}static serializeS3(settings){const url=new URL(settings.endpoint),newUrl=new URL(`sls+s3://${url.host}`);newUrl.username=encodeURIComponent(settings.accessKey);newUrl.password=encodeURIComponent(settings.secretKey);newUrl.searchParams.set("endpoint",settings.endpoint);newUrl.searchParams.set("bucket",settings.bucket);newUrl.searchParams.set("region",settings.region);settings.bucketPrefix&&newUrl.searchParams.set("prefix",settings.bucketPrefix);settings.bucketCustomHeaders&&newUrl.searchParams.set("headers",settings.bucketCustomHeaders);settings.useCustomRequestHandler&&newUrl.searchParams.set("useProxy","true");settings.forcePathStyle||newUrl.searchParams.set("pathStyle","false");return newUrl.toString()}static parseP2P(url){return{P2P_Enabled:"false"!==url.searchParams.get("enabled"),P2P_roomID:decodeURIComponent(url.host),P2P_passphrase:decodeURIComponent(url.password),P2P_relays:url.searchParams.get("relays")||"",P2P_AppID:url.searchParams.get("appId")||"self-hosted-livesync",P2P_AutoStart:"true"===url.searchParams.get("autoStart"),P2P_AutoBroadcast:"true"===url.searchParams.get("autoBroadcast"),P2P_turnServers:url.searchParams.get("turnServers")||"",P2P_turnUsername:url.searchParams.get("turnUser")||"",P2P_turnCredential:url.searchParams.get("turnPass")||""}}static serializeP2P(settings){const newUrl=new URL(`sls+p2p://${encodeURIComponent(settings.P2P_roomID)}`);newUrl.password=encodeURIComponent(settings.P2P_passphrase);settings.P2P_Enabled||newUrl.searchParams.set("enabled","false");newUrl.searchParams.set("relays",settings.P2P_relays);newUrl.searchParams.set("appId",settings.P2P_AppID);settings.P2P_AutoStart&&newUrl.searchParams.set("autoStart","true");settings.P2P_AutoBroadcast&&newUrl.searchParams.set("autoBroadcast","true");settings.P2P_turnServers&&newUrl.searchParams.set("turnServers",settings.P2P_turnServers);settings.P2P_turnUsername&&newUrl.searchParams.set("turnUser",settings.P2P_turnUsername);settings.P2P_turnCredential&&newUrl.searchParams.set("turnPass",settings.P2P_turnCredential);return newUrl.toString()}};root_126=from_html('
  • ');root32=from_html('
    ');$$css12={hash:"svelte-9kxeje",code:"label.svelte-9kxeje {min-width:4em;width:4em;display:inline-flex;flex-direction:row;justify-content:flex-end;}ul.svelte-9kxeje {flex-grow:1;display:inline-flex;flex-direction:column;list-style-type:none;margin-block-start:0;margin-block-end:0;margin-inline-start:0;margin-inline-end:0;padding-inline-start:0;}li.svelte-9kxeje {padding:var(--size-2-1) var(--size-4-1);display:inline-flex;flex-grow:1;align-items:center;justify-content:flex-end;gap:var(--size-4-2);}li.svelte-9kxeje input:where(.svelte-9kxeje) {min-width:10em;}button.iconbutton.svelte-9kxeje {max-width:4em;}.chip.svelte-9kxeje {background-color:var(--tag-background);color:var(--tag-color);padding:var(--size-2-1) var(--size-4-1);border-radius:0.5em;font-size:0.8em;}.chip.svelte-9kxeje:empty {display:none;}"};EVENT_REQUEST_SHOW_HISTORY="show-history";toc=new Set;stubs={};ObsidianLiveSyncSettingTab=class extends import_obsidian.PluginSettingTab{constructor(app,plugin3){super(app,plugin3);this.selectedScreen="";this.settingComponents=[];this.controlledElementFunc=[];this.onSavedHandlers=[];this.inWizard=!1;this.isShown=!1;this.manifestVersion="0.25.57";this.lastVersion=~~(versionNumberString2Number(this.manifestVersion)/1e3);this.screenElements={};this.enableOnlySyncDisabled=enableOnly(()=>!this.isAnySyncEnabled());this.onlyOnP2POrCouchDB=()=>({visibility:this.isConfiguredAs("remoteType",REMOTE_P2P)||this.isConfiguredAs("remoteType",REMOTE_COUCHDB)});this.onlyOnCouchDB=()=>({visibility:this.isConfiguredAs("remoteType",REMOTE_COUCHDB)});this.onlyOnMinIO=()=>({visibility:this.isConfiguredAs("remoteType",REMOTE_MINIO)});this.onlyOnOnlyP2P=()=>({visibility:this.isConfiguredAs("remoteType",REMOTE_P2P)});this.onlyOnCouchDBOrMinIO=()=>({visibility:this.isConfiguredAs("remoteType",REMOTE_COUCHDB)||this.isConfiguredAs("remoteType",REMOTE_MINIO)});this.checkWorkingPassphrase=async()=>{if(this.editingSettings.remoteType==REMOTE_MINIO)return!0;const settingForCheck={...this.editingSettings},replicator=this.services.replicator.getNewReplicator(settingForCheck);if(!(replicator instanceof LiveSyncCouchDBReplicator))return!0;const db=await replicator.connectRemoteCouchDBWithSetting(settingForCheck,this.services.API.isMobile(),!0);if("string"==typeof db){Logger($msg("obsidianLiveSyncSettingTab.logCheckPassphraseFailed",{db}),LOG_LEVEL_NOTICE);return!1}if(await checkSyncInfo(db.db))return!0;Logger($msg("obsidianLiveSyncSettingTab.logPassphraseNotCompatible"),LOG_LEVEL_NOTICE);return!1};this.isPassphraseValid=async()=>{if(this.editingSettings.encrypt&&""==this.editingSettings.passphrase){Logger($msg("obsidianLiveSyncSettingTab.logEncryptionNoPassphrase"),LOG_LEVEL_NOTICE);return!1}if(this.editingSettings.encrypt&&!await testCrypt()){Logger($msg("obsidianLiveSyncSettingTab.logEncryptionNoSupport"),LOG_LEVEL_NOTICE);return!1}return!0};this.rebuildDB=async method=>{if(this.editingSettings.encrypt&&""==this.editingSettings.passphrase)Logger($msg("obsidianLiveSyncSettingTab.logEncryptionNoPassphrase"),LOG_LEVEL_NOTICE);else if(!this.editingSettings.encrypt||await testCrypt()){this.editingSettings.encrypt||(this.editingSettings.passphrase="");this.applyAllSettings();await this.services.setting.suspendAllSync();await this.services.setting.suspendExtraSync();this.reloadAllSettings();this.editingSettings.isConfigured=!0;Logger($msg("obsidianLiveSyncSettingTab.logRebuildNote"),LOG_LEVEL_NOTICE);await this.saveAllDirtySettings();this.closeSetting();await delay(2e3);await this.core.rebuilder.$performRebuildDB(method)}else Logger($msg("obsidianLiveSyncSettingTab.logEncryptionNoSupport"),LOG_LEVEL_NOTICE)};this.plugin=plugin3;LiveSyncSetting.env=this;eventHub.onEvent("reload-setting-tab",()=>{this.requestReload()})}get core(){return this.plugin.core}get services(){return this.core.services}get editingSettings(){this._editingSettings||this.reloadAllSettings();return this._editingSettings}set editingSettings(v2){this._editingSettings||this.reloadAllSettings();this._editingSettings=v2}applySetting(keys3){for(const k2 of keys3)if(this.isDirty(k2)&&!(k2 in OnDialogSettingsDefault)){this.core.settings[k2]=this.editingSettings[k2];this.initialSettings[k2]=this.core.settings[k2]}keys3.forEach(e3=>this.refreshSetting(e3))}applyAllSettings(){var _a8;const changedKeys=Object.keys(null!=(_a8=this.editingSettings)?_a8:{}).filter(e3=>this.isDirty(e3));this.applySetting(changedKeys);this.reloadAllSettings()}async saveLocalSetting(key3){var _a8,_b5,_c3,_d2;if("configPassphrase"==key3){localStorage.setItem("ls-setting-passphrase",null!=(_b5=null==(_a8=this.editingSettings)?void 0:_a8[key3])?_b5:"");return await Promise.resolve()}if("deviceAndVaultName"==key3){this.services.setting.setDeviceAndVaultName(null!=(_d2=null==(_c3=this.editingSettings)?void 0:_c3[key3])?_d2:"");this.services.setting.saveDeviceAndVaultName();return await Promise.resolve()}}async saveSettings(keys3){let hasChanged=!1;const appliedKeys=[];for(const k2 of keys3)if(this.isDirty(k2)){appliedKeys.push(k2);if(k2 in OnDialogSettingsDefault){await this.saveLocalSetting(k2);this.initialSettings[k2]=this.editingSettings[k2]}else{this.core.settings[k2]=this.editingSettings[k2];this.initialSettings[k2]=this.core.settings[k2];hasChanged=!0}}hasChanged&&await this.services.setting.saveSettingData();const handlers3=this.onSavedHandlers.filter(e3=>-1!==appliedKeys.indexOf(e3.key)).map(e3=>e3.handler(this.editingSettings[e3.key]));await Promise.all(handlers3);keys3.forEach(e3=>this.refreshSetting(e3))}async saveAllDirtySettings(){var _a8;const changedKeys=Object.keys(null!=(_a8=this.editingSettings)?_a8:{}).filter(e3=>this.isDirty(e3));await this.saveSettings(changedKeys);this.reloadAllSettings()}requestUpdate(){scheduleTask("update-setting",10,()=>{for(const setting of this.settingComponents)setting._onUpdate();for(const func of this.controlledElementFunc)func()})}reloadAllLocalSettings(){const ret={...OnDialogSettingsDefault};ret.configPassphrase=localStorage.getItem("ls-setting-passphrase")||"";ret.preset="";ret.deviceAndVaultName=this.services.setting.getDeviceAndVaultName();return ret}computeAllLocalSettings(){var _a8,_b5;return{syncMode:(null==(_a8=this.editingSettings)?void 0:_a8.liveSync)?"LIVESYNC":(null==(_b5=this.editingSettings)?void 0:_b5.periodicReplication)?"PERIODIC":"ONEVENTS"}}reloadAllSettings(skipUpdate=!1){const localSetting=this.reloadAllLocalSettings();this._editingSettings={...this.core.settings,...localSetting};this._editingSettings={...this.editingSettings,...this.computeAllLocalSettings()};this.initialSettings={...this.editingSettings};skipUpdate||this.requestUpdate()}refreshSetting(key3){const localSetting=this.reloadAllLocalSettings();if(key3 in this.core.settings)if(key3 in localSetting){this.initialSettings[key3]=localSetting[key3];this.editingSettings[key3]=localSetting[key3]}else{this.initialSettings[key3]=this.core.settings[key3];this.editingSettings[key3]=this.initialSettings[key3]}this.editingSettings={...this.editingSettings,...this.computeAllLocalSettings()};this.requestUpdate()}isDirty(key3){var _a8;return isObjectDifferent(this.editingSettings[key3],null==(_a8=this.initialSettings)?void 0:_a8[key3])}isSomeDirty(keys3){return keys3.some(e3=>this.isDirty(e3))}isConfiguredAs(key3,value){return!!this.editingSettings&&this.editingSettings[key3]==value}async testConnection(settingOverride={}){const trialSetting={...this.editingSettings,...settingOverride},replicator=await this.services.replicator.getNewReplicator(trialSetting);if(!replicator){Logger("No replicator available for the current settings.",LOG_LEVEL_NOTICE);return}await replicator.tryConnectRemote(trialSetting);const status=await replicator.getRemoteStatus(trialSetting);status&&status.estimatedSize&&Logger($msg("obsidianLiveSyncSettingTab.logEstimatedSize",{size:sizeToHumanReadable(status.estimatedSize)}),LOG_LEVEL_NOTICE)}closeSetting(){this.plugin.app.setting.close()}handleElement(element2,func){const updateFunc=((element3,func2)=>{const prev={};return()=>{const newValue=func2(),keys3=Object.keys(newValue);for(const k2 of keys3)if(prev[k2]!==newValue[k2]){"visibility"==k2&&element3.toggleClass("sls-setting-hidden",!newValue[k2]);prev[k2]=newValue[k2]}}})(element2,func);this.controlledElementFunc.push(updateFunc);updateFunc()}createEl(el,tag3,o2,callback,func){const element2=el.createEl(tag3,o2,callback);func&&this.handleElement(element2,func);return element2}addEl(el,tag3,o2,callback,func){const elm=this.createEl(el,tag3,o2,callback,func);return Promise.resolve(elm)}addOnSaved(key3,func){this.onSavedHandlers.push({key:key3,handler:func})}resetEditingSettings(){this._editingSettings=void 0;this.initialSettings=void 0}hide(){this.isShown=!1}requestReload(){var _a8;if(this.isShown){const newConf=this.core.settings,keys3=Object.keys(newConf);let hasLoaded=!1;for(const k2 of keys3)if(isObjectDifferent(newConf[k2],null==(_a8=this.initialSettings)?void 0:_a8[k2]))if(this.isDirty(k2))this.core.confirm.askInPopup(`config-reloaded-${k2}`,$msg("obsidianLiveSyncSettingTab.msgSettingModified",{setting:getConfName(k2)}),anchor=>{anchor.text=$msg("obsidianLiveSyncSettingTab.optionHere");anchor.addEventListener("click",()=>{this.refreshSetting(k2);this.display()})});else{this.refreshSetting(k2);if(k2 in OnDialogSettingsDefault)continue;hasLoaded=!0}hasLoaded?this.display():this.requestUpdate()}else this.reloadAllSettings(!0)}changeDisplay(screen){for(const k2 in this.screenElements)k2==screen?this.screenElements[k2].forEach(element2=>element2.removeClass("setting-collapsed")):this.screenElements[k2].forEach(element2=>element2.addClass("setting-collapsed"));this.menuEl&&this.menuEl.querySelectorAll(".sls-setting-label").forEach(element2=>{if(element2.hasClass(`c-${screen}`)){element2.addClass("selected");element2.querySelector("input[type=radio]").checked=!0}else{element2.removeClass("selected");element2.querySelector("input[type=radio]").checked=!1}});this.selectedScreen=screen}async enableMinimalSetup(){this.editingSettings.liveSync=!1;this.editingSettings.periodicReplication=!1;this.editingSettings.syncOnSave=!1;this.editingSettings.syncOnEditorSave=!1;this.editingSettings.syncOnStart=!1;this.editingSettings.syncOnFileOpen=!1;this.editingSettings.syncAfterMerge=!1;this.core.replicator.closeReplication();await this.saveAllDirtySettings();this.containerEl.addClass("isWizard");this.inWizard=!0;this.changeDisplay("20")}addScreenElement(key3,element2){key3 in this.screenElements||(this.screenElements[key3]=[]);this.screenElements[key3].push(element2)}selectPane(event2){const target=event2.target;if("INPUT"==target.tagName){const value=target.getAttribute("value");value&&this.selectedScreen!=value&&this.changeDisplay(value)}}isNeedRebuildLocal(){return this.isSomeDirty(["useIndexedDBAdapter","doNotUseFixedRevisionForChunks","handleFilenameCaseSensitive","passphrase","useDynamicIterationCount","usePathObfuscation","encrypt"])}isNeedRebuildRemote(){return this.isSomeDirty(["doNotUseFixedRevisionForChunks","handleFilenameCaseSensitive","passphrase","useDynamicIterationCount","usePathObfuscation","encrypt"])}isAnySyncEnabled(){var _a8,_b5,_c3,_d2;return!(this.isConfiguredAs("isConfigured",!1)||!this.isConfiguredAs("liveSync",!0)&&!this.isConfiguredAs("periodicReplication",!0)&&!this.isConfiguredAs("syncOnFileOpen",!0)&&!this.isConfiguredAs("syncOnSave",!0)&&!this.isConfiguredAs("syncOnEditorSave",!0)&&!this.isConfiguredAs("syncOnStart",!0)&&!this.isConfiguredAs("syncAfterMerge",!0)&&!this.isConfiguredAs("syncOnFileOpen",!0)&&"CONNECTED"!=(null==(_b5=null==(_a8=this.core)?void 0:_a8.replicator)?void 0:_b5.syncStatus)&&"PAUSED"!=(null==(_d2=null==(_c3=this.core)?void 0:_c3.replicator)?void 0:_d2.syncStatus))}async confirmRebuild(){if(!await this.isPassphraseValid()){Logger("Passphrase is not valid, please fix it.",LOG_LEVEL_NOTICE);return}const OPTION_FETCH=$msg("obsidianLiveSyncSettingTab.optionFetchFromRemote"),OPTION_REBUILD_BOTH=$msg("obsidianLiveSyncSettingTab.optionRebuildBoth"),OPTION_ONLY_SETTING=$msg("obsidianLiveSyncSettingTab.optionSaveOnlySettings"),OPTION_CANCEL=$msg("obsidianLiveSyncSettingTab.optionCancel"),title=$msg("obsidianLiveSyncSettingTab.titleRebuildRequired"),note=$msg("obsidianLiveSyncSettingTab.msgRebuildRequired",{OPTION_REBUILD_BOTH,OPTION_FETCH,OPTION_ONLY_SETTING}),buttons=[OPTION_FETCH,OPTION_REBUILD_BOTH,OPTION_ONLY_SETTING,OPTION_CANCEL],result=await confirmWithMessage(this.plugin,title,note,buttons,OPTION_CANCEL,0);if(result!=OPTION_CANCEL&&(result!=OPTION_FETCH||await this.checkWorkingPassphrase()||"yes"==await this.core.confirm.askYesNoDialog($msg("obsidianLiveSyncSettingTab.msgAreYouSureProceed"),{defaultOption:"No"}))){this.editingSettings.encrypt||(this.editingSettings.passphrase="");await this.saveAllDirtySettings();await this.applyAllSettings();if(result==OPTION_FETCH){await this.core.storageAccess.writeFileAuto(FLAGMD_REDFLAG3_HR,"");this.services.appLifecycle.scheduleRestart();this.closeSetting()}else if(result==OPTION_REBUILD_BOTH){await this.core.storageAccess.writeFileAuto(FLAGMD_REDFLAG2_HR,"");this.services.appLifecycle.scheduleRestart();this.closeSetting()}else result==OPTION_ONLY_SETTING&&await this.services.setting.saveSettingData()}}display(){const changeDisplay=this.changeDisplay.bind(this),{containerEl}=this;this.settingComponents.length=0;this.controlledElementFunc.length=0;this.onSavedHandlers.length=0;this.screenElements={};null!=this._editingSettings&&null!=this.initialSettings||this.reloadAllSettings();if(void 0===this.editingSettings||null==this.initialSettings)return;this.isShown=!0;containerEl.empty();containerEl.addClass("sls-setting");containerEl.removeClass("isWizard");setStyle(containerEl,"menu-setting-poweruser",()=>this.isConfiguredAs("usePowerUserMode",!0));setStyle(containerEl,"menu-setting-advanced",()=>this.isConfiguredAs("useAdvancedMode",!0));setStyle(containerEl,"menu-setting-edgecase",()=>this.isConfiguredAs("useEdgeCaseMode",!0));const menuWrapper=this.createEl(containerEl,"div",{cls:"sls-setting-menu-wrapper"});this.menuEl&&this.menuEl.remove();this.menuEl=menuWrapper.createDiv("");this.menuEl.addClass("sls-setting-menu");const menuTabs=this.menuEl.querySelectorAll(".sls-setting-label");this.createEl(menuWrapper,"div",{cls:"sls-setting-menu-buttons"},el=>{el.addClass("wizardHidden");el.createEl("label",{text:$msg("obsidianLiveSyncSettingTab.msgChangesNeedToBeApplied")});this.addEl(el,"button",{text:$msg("obsidianLiveSyncSettingTab.optionApply"),cls:"mod-warning"},buttonEl=>{buttonEl.addEventListener("click",()=>fireAndForget(async()=>await this.confirmRebuild()))})},visibleOnly(()=>this.isNeedRebuildLocal()||this.isNeedRebuildRemote()));let paneNo=0;const addPane=(parentEl,title,icon,order,wizardHidden,level)=>{const el=this.createEl(parentEl,"div",{text:""});{const mdTitle=`${paneNo++}. ${title}${getLevelStr(null!=level?level:"")}`;el.setAttribute("data-pane",mdTitle);toc.add(`| ${icon} | [${mdTitle}](#${mdTitle.toLowerCase().replace(/ /g,"-").replace(/[^\w\s-]/g,"")}) | `)}setLevelClass(el,level);el.createEl("h3",{text:title,cls:"sls-setting-pane-title"});this.menuEl&&this.menuEl.createEl("label",{cls:`sls-setting-label c-${order} ${wizardHidden?"wizardHidden":""}`},el2=>{setLevelClass(el2,level);const inputEl=el2.createEl("input",{type:"radio",name:"disp",value:`${order}`,cls:"sls-setting-tab"});el2.createEl("div",{cls:"sls-setting-menu-btn",text:icon,title});inputEl.addEventListener("change",evt=>this.selectPane(evt));inputEl.addEventListener("click",evt=>this.selectPane(evt))});this.addScreenElement(`${order}`,el);return Promise.resolve(el)},panelNoMap={},addPanel=(parentEl,title,callback,func,level)=>{const el=this.createEl(parentEl,"div",{text:""},callback,func);{const paneNo2=findAttrFromParent(parentEl,"data-pane");paneNo2 in panelNoMap||(panelNoMap[paneNo2]=0);panelNoMap[paneNo2]+=1;const panelNo=panelNoMap[paneNo2];el.setAttribute("data-panel",`${panelNo}. ${title}${getLevelStr(null!=level?level:"")}`)}setLevelClass(el,level);this.createEl(el,"h4",{text:title,cls:"sls-setting-panel-title"});return Promise.resolve(el)};menuTabs.forEach(element2=>{const e3=element2.querySelector(".sls-setting-tab");e3&&e3.addEventListener("change",event2=>{menuTabs.forEach(element3=>element3.removeClass("selected"));this.changeDisplay(event2.currentTarget.value);element2.addClass("selected")})});const bindPane=paneFunc=>paneEl=>{paneFunc.call(this,paneEl,{addPane,addPanel})};addPane(containerEl,$msg("obsidianLiveSyncSettingTab.panelChangeLog"),"💬",100,!1).then(bindPane(paneChangeLog));addPane(containerEl,$msg("obsidianLiveSyncSettingTab.panelSetup"),"🧙‍♂️",110,!1).then(bindPane(paneSetup));addPane(containerEl,$msg("obsidianLiveSyncSettingTab.panelGeneralSettings"),"⚙️",20,!1).then(bindPane(paneGeneral));addPane(containerEl,$msg("obsidianLiveSyncSettingTab.panelRemoteConfiguration"),"🛰️",0,!1).then(bindPane(paneRemoteConfig));addPane(containerEl,$msg("obsidianLiveSyncSettingTab.titleSyncSettings"),"🔄",30,!1).then(bindPane(paneSyncSettings));addPane(containerEl,"Selector","🚦",33,!1,LEVEL_ADVANCED).then(bindPane(paneSelector));addPane(containerEl,"Customization sync","🔌",60,!1,LEVEL_ADVANCED).then(bindPane(paneCustomisationSync));addPane(containerEl,"Hatch","🧰",50,!0).then(bindPane(paneHatch));addPane(containerEl,"Advanced","🔧",46,!1,LEVEL_ADVANCED).then(bindPane(paneAdvanced));addPane(containerEl,"Power users","💪",47,!0,LEVEL_POWER_USER).then(bindPane(panePowerUsers));addPane(containerEl,"Patches","🩹",51,!1,LEVEL_EDGE_CASE).then(bindPane(panePatches));addPane(containerEl,"Maintenance","🎛️",70,!0).then(bindPane(paneMaintenance));yieldNextAnimationFrame().then(()=>{""==this.selectedScreen?this.lastVersion!=this.editingSettings.lastReadUpdates?this.editingSettings.isConfigured?changeDisplay("100"):changeDisplay("110"):this.isAnySyncEnabled()?changeDisplay("20"):changeDisplay("110"):changeDisplay(this.selectedScreen);this.requestUpdate()})}getMinioJournalSyncClient(){return new JournalSyncMinio(this.core.settings,this.core.simpleStore,this.core)}async resetRemoteBucket(){const minioJournal=this.getMinioJournalSyncClient();await minioJournal.resetBucket()}};ModuleObsidianSettingDialogue=class extends AbstractObsidianModule{_everyOnloadStart(){this.settingTab=new ObsidianLiveSyncSettingTab(this.app,this.plugin);this.plugin.addSettingTab(this.settingTab);eventHub.onEvent("request-open-settings",()=>this.openSetting());eventHub.onEvent("request-open-setting-wizard",()=>{this.openSetting();this.settingTab.enableMinimalSetup()});return Promise.resolve(!0)}openSetting(){this.app.setting.open();this.app.setting.openTabById("obsidian-livesync")}get appId(){return`${"appId"in this.app?this.app.appId:""}`}onBindFunction(core,services){services.appLifecycle.onInitialise.addHandler(this._everyOnloadStart.bind(this))}};DocumentHistoryModal=class extends import_obsidian.Modal{constructor(app,core,plugin3,file,id,revision){super(app);this.showDiff=!1;this.revs_info=[];this.currentText="";this.currentDeleted=!1;this.BlobURLs=new Map;this.plugin=plugin3;this.core=core;this.file=file instanceof import_obsidian.TFile?getPathFromTFile(file):file;this.id=id;this.initialRev=revision;!file&&id&&(this.file=this.services.path.id2path(id));"1"==localStorage.getItem("ols-history-highlightdiff")&&(this.showDiff=!0)}get services(){return this.core.services}async loadFile(initialRev){var _a8,_b5;this.id||(this.id=await this.services.path.path2id(this.file));const db=this.core.localDatabase;try{const w2=await db.getRaw(this.id,{revs_info:!0});this.revs_info=null!=(_b5=null==(_a8=w2._revs_info)?void 0:_a8.filter(e3=>"available"==(null==e3?void 0:e3.status)))?_b5:[];this.range.max=`${Math.max(this.revs_info.length-1,0)}`;this.range.value=this.range.max;this.fileInfo.setText(`${this.file} / ${this.revs_info.length} 修订版本`);await this.loadRevs(initialRev)}catch(ex){if(isErrorOfMissingDoc(ex)){this.range.max="0";this.range.value="";this.range.disabled=!0;this.contentView.setText("We don't have any history for this note.")}else{this.contentView.setText("Error while loading file.");Logger(ex,LOG_LEVEL_VERBOSE)}}}async loadRevs(initialRev){if(0==this.revs_info.length)return;if(initialRev){const rIndex=this.revs_info.findIndex(e3=>e3.rev==initialRev);rIndex>=0&&(this.range.value=""+(this.revs_info.length-1-rIndex))}const index6=this.revs_info.length-1-this.range.value/1,rev3=this.revs_info[index6];await this.showExactRev(rev3.rev)}revokeURL(key3){const v2=this.BlobURLs.get(key3);v2&&URL.revokeObjectURL(v2);this.BlobURLs.delete(key3)}generateBlobURL(key3,data){this.revokeURL(key3);const v2=URL.createObjectURL(new Blob([data],{endings:"transparent",type:"application/octet-stream"}));this.BlobURLs.set(key3,v2);return v2}async showExactRev(rev3){const db=this.core.localDatabase,w2=await db.getDBEntry(this.file,{rev:rev3},!1,!1,!0);this.currentText="";this.currentDeleted=!1;if(!1===w2){this.currentDeleted=!0;this.info.innerHTML="";this.contentView.innerHTML=`Could not read this revision
    (${rev3})`}else{this.currentDoc=w2;this.info.innerHTML=`Modified:${new Date(w2.mtime).toLocaleString()}`;let result;const w1data=readDocument(w2);this.currentDeleted=!!w2.deleted;if(this.showDiff){const prevRevIdx=this.revs_info.length-1-(this.range.value/1-1);if(prevRevIdx>=0&&prevRevIdx"+escapeStringToHTML(x2)+"":x1==import_diff_match_patch.DIFF_EQUAL?result+=""+escapeStringToHTML(x2)+"":x1==import_diff_match_patch.DIFF_INSERT&&(result+=""+escapeStringToHTML(x2)+"")}result=result.replace(/\n/g,"
    ")}else if(isImage(this.file)){result=`
    \n
    \n \n \n
    \n
    `;this.contentView.removeClass("op-pre")}}}if(null==result)if("string"!=typeof w1data){if(isImage(this.file)){result=`
    \n
    \n\n
    \n
    `;this.contentView.removeClass("op-pre")}}else result=escapeStringToHTML(w1data);null==result&&(result="string"==typeof w1data?escapeStringToHTML(w1data):"Binary file");this.contentView.innerHTML=(this.currentDeleted?"(At this revision, the file has been deleted)\n":"")+result}}onOpen(){const{contentEl}=this;this.titleEl.setText("文档历史");contentEl.empty();this.fileInfo=contentEl.createDiv("");this.fileInfo.addClass("op-info");const divView=contentEl.createDiv("");divView.addClass("op-flex");divView.createEl("input",{type:"range"},e3=>{this.range=e3;e3.addEventListener("change",e4=>{scheduleOnceIfDuplicated("loadRevs",()=>this.loadRevs())});e3.addEventListener("input",e4=>{scheduleOnceIfDuplicated("loadRevs",()=>this.loadRevs())})});contentEl.createDiv("",e3=>{e3.createEl("label",{},label2=>{label2.appendChild(createEl("input",{type:"checkbox"},checkbox=>{this.showDiff&&(checkbox.checked=!0);checkbox.addEventListener("input",evt=>{this.showDiff=checkbox.checked;localStorage.setItem("ols-history-highlightdiff",1==this.showDiff?"1":"");scheduleOnceIfDuplicated("loadRevs",()=>this.loadRevs())})}));label2.appendText("高亮差异")})}).addClass("op-info");this.info=contentEl.createDiv("");this.info.addClass("op-info");fireAndForget(async()=>await this.loadFile(this.initialRev));const div=contentEl.createDiv({text:"Loading old revisions..."});this.contentView=div;div.addClass("op-scrollable");div.addClass("op-pre");const buttons=contentEl.createDiv("");buttons.createEl("button",{text:"Copy to clipboard"},e3=>{e3.addClass("mod-cta");e3.addEventListener("click",()=>{fireAndForget(async()=>{await navigator.clipboard.writeText(this.currentText);Logger("Old content copied to clipboard",LOG_LEVEL_NOTICE)})})});const focusFile=async path2=>{const targetFile=this.plugin.app.vault.getFileByPath(path2);if(targetFile){const leaf=this.plugin.app.workspace.getLeaf(!1);await leaf.openFile(targetFile)}else Logger("Unable to display the file in the editor",LOG_LEVEL_NOTICE)};buttons.createEl("button",{text:"Back to this revision"},e3=>{e3.addClass("mod-cta");e3.addEventListener("click",()=>{fireAndForget(async()=>{const pathToWrite=stripPrefix(this.file);if(!isValidPath(pathToWrite)){Logger("Path is not valid to write content.",LOG_LEVEL_INFO);return}if(!this.currentDoc){Logger("No active file loaded.",LOG_LEVEL_INFO);return}const d4=readContent(this.currentDoc);await this.core.storageAccess.writeHiddenFileAuto(pathToWrite,d4);await focusFile(pathToWrite);this.close()})})})}onClose(){const{contentEl}=this;contentEl.empty();this.BlobURLs.forEach(value=>{console.log(value);value&&URL.revokeObjectURL(value)})}};ModuleObsidianDocumentHistory=class extends AbstractObsidianModule{_everyOnloadStart(){this.addCommand({id:"livesync-history",name:"Show history",callback:()=>{const file=this.services.vault.getActiveFilePath();file&&this.showHistory(file,void 0)}});this.addCommand({id:"livesync-filehistory",name:"Pick a file to show history",callback:()=>{fireAndForget(async()=>await this.fileHistory())}});eventHub.onEvent(EVENT_REQUEST_SHOW_HISTORY,({file,fileOnDB})=>{this.showHistory(file,fileOnDB._id)});return Promise.resolve(!0)}showHistory(file,id){new DocumentHistoryModal(this.app,this.core,this.plugin,file,id).open()}async fileHistory(){const notes=[];for await(const doc of this.localDatabase.findAllDocs())notes.push({id:doc._id,path:this.getPath(doc),dispPath:this.getPath(doc),mtime:doc.mtime});notes.sort((a2,b3)=>b3.mtime-a2.mtime);const notesList=notes.map(e3=>e3.dispPath),target=await this.core.confirm.askSelectString("File to view History",notesList);if(target){const targetId=notes.find(e3=>e3.dispPath==target);this.showHistory(targetId.path,targetId.id)}}onBindFunction(core,services){services.appLifecycle.onInitialise.addHandler(this._everyOnloadStart.bind(this))}};root_127=from_html('
    Gathering information...
    ');root_217=from_html('Chunks');root_36=from_html('
    ');root_412=from_html('
    ');root_67=from_html(' ');root_79=from_html(' ');root_89=from_html(' ');root_104=from_html(' ');root_54=from_html('
    ');root_1112=from_html('
    ');root_128=from_html('
    ');root33=from_html('

    Vault history

    DatePathRevStat
    ');$$css13={hash:"svelte-1ddarry",code:".svelte-1ddarry {box-sizing:border-box;}.globalhistory.svelte-1ddarry {margin-bottom:2em;}table.svelte-1ddarry {width:100%;}.more.svelte-1ddarry > div:where(.svelte-1ddarry) {display:flex;}.more.svelte-1ddarry > div:where(.svelte-1ddarry) > button:where(.svelte-1ddarry) {flex-grow:1;}th.svelte-1ddarry {position:sticky;top:0;backdrop-filter:blur(10px);}td.mtime.svelte-1ddarry {white-space:break-spaces;}td.path.svelte-1ddarry {word-break:break-word;}.row.svelte-1ddarry {display:flex;flex-direction:row;flex-wrap:wrap;}.row.svelte-1ddarry > label:where(.svelte-1ddarry) {display:flex;align-items:center;min-width:5em;}.row.svelte-1ddarry > input:where(.svelte-1ddarry) {flex-grow:1;}.filenames.svelte-1ddarry {display:flex;flex-direction:column;}.filenames.svelte-1ddarry > .path:where(.svelte-1ddarry) {font-size:70%;}.rev.svelte-1ddarry {text-overflow:ellipsis;max-width:3em;display:inline-block;overflow:hidden;white-space:nowrap;}"};GlobalHistoryView=class extends SvelteItemView{constructor(leaf,plugin3){super(leaf);this.icon="clock";this.title="";this.navigation=!0;this.plugin=plugin3}instantiateComponent(target){return mount(GlobalHistory,{target,props:{plugin:this.plugin,core:this.plugin.core}})}getIcon(){return"clock"}getViewType(){return"global-history"}getDisplayText(){return"Vault history"}};ModuleObsidianGlobalHistory=class extends AbstractObsidianModule{_everyOnloadStart(){this.addCommand({id:"livesync-global-history",name:"Show vault history",callback:()=>{this.showGlobalHistory()}});this.registerView("global-history",leaf=>new GlobalHistoryView(leaf,this.plugin));return Promise.resolve(!0)}showGlobalHistory(){this.services.API.showWindow("global-history")}onBindFunction(core,services){services.appLifecycle.onInitialise.addHandler(this._everyOnloadStart.bind(this))}};ModuleIntegratedTest=class extends AbstractObsidianModule{async waitFor(proc,timeout=1e4){await delay(100);const start=Date.now();for(;!await proc();){if(timeout>0&&Date.now()-start>timeout){this._log("Timeout");return!1}await delay(500)}return!0}waitWithReplicating(proc,timeout=1e4){return this.waitFor(async()=>{await this.tryReplicate();return await proc()},timeout)}async storageContentIsEqual(file,content){try{return await this.readStorageContent(file)===content}catch(e3){this._log(`Error: ${e3}`);return!1}}async assert(proc){if(!await proc()){this._log("Assertion failed");return!1}return!0}async __orDie(key3,proc){if(!await this._test(key3,proc))throw new Error(`${key3}`);return!0}tryReplicate(){if(!this.settings.liveSync)return shareRunningResult("replicate-test",async()=>{await this.services.replication.replicate()})}async readStorageContent(file){if(await this.core.storageAccess.isExistsIncludeHidden(file))return await this.core.storageAccess.readHiddenFileText(file)}async __proceed(no,title){const stepContent=`Step ${no}`;await this.services.conflict.resolveByNewest("_STEP.md");await this.core.storageAccess.writeFileAuto("_STEP.md",stepContent);await this.__orDie(`Wait for acknowledge ${no}`,async()=>!!await this.waitWithReplicating(async()=>await this.storageContentIsEqual("_STEP_ACK.md",stepContent),2e4));return!0}async __join(no,title){const stepContent=`Step ${no}`;await this.__orDie(`Wait for step ${no} (${title})`,async()=>!!await this.waitWithReplicating(async()=>await this.storageContentIsEqual("_STEP.md",stepContent),2e4));await this.services.conflict.resolveByNewest("_STEP_ACK.md");await this.core.storageAccess.writeFileAuto("_STEP_ACK.md",stepContent);await this.tryReplicate();return!0}async performStep({step,title,isGameChanger,proc,check}){if(isGameChanger){await this.__proceed(step,title);try{await proc()}catch(e3){this._log(`Error: ${e3}`);return!1}return await this.__orDie(`Step ${step} - ${title}`,async()=>await this.waitWithReplicating(check))}return await this.__join(step,title)}async nonLiveTestRunner(isLeader,testMain){const storage=this.core.storageAccess;let testFileName;this.addTestResult("-------Starting ... ",!0,`Test as ${isLeader?"Leader":"Receiver"} command file IT.md`);isLeader&&await this.__proceed(0,"start");await this.tryReplicate();await this.performStep({step:0,title:"Make sure that command File Not Exists",isGameChanger:isLeader,proc:async()=>await storage.removeHidden("IT.md"),check:async()=>!await storage.isExistsIncludeHidden("IT.md")});await this.performStep({step:1,title:"Make sure that command File Not Exists On Receiver",isGameChanger:!isLeader,proc:async()=>await storage.removeHidden("ITx.md"),check:async()=>!await storage.isExistsIncludeHidden("ITx.md")});await this.performStep({step:2,title:"Decide the test file name",isGameChanger:isLeader,proc:async()=>{testFileName=Date.now()+"-"+Math.ceil(1e3*Math.random())+".md";await storage.writeFileAuto("IT.md",testFileName)},check:()=>Promise.resolve(!0)});await this.performStep({step:3,title:"Wait for the command file to be arrived",isGameChanger:!isLeader,proc:async()=>{},check:async()=>await storage.isExistsIncludeHidden("IT.md")});await this.performStep({step:4,title:"Send the response file",isGameChanger:!isLeader,proc:async()=>{await storage.writeHiddenFileAuto("ITx.md","!")},check:()=>Promise.resolve(!0)});await this.performStep({step:5,title:"Wait for the response file to be arrived",isGameChanger:isLeader,proc:async()=>{},check:async()=>await storage.isExistsIncludeHidden("ITx.md")});await this.performStep({step:6,title:"Proceed to begin the test",isGameChanger:isLeader,proc:async()=>{},check:()=>Promise.resolve(!0)});await this.performStep({step:6,title:"Begin the test",isGameChanger:!0,proc:async()=>{},check:()=>Promise.resolve(!0)});try{this.addTestResult("** Main------",!0,"");if(isLeader)return await testMain(testFileName,!0);{const testFileName2=await this.readStorageContent("IT.md");this.addTestResult("testFileName",!0,`Request client to use :${testFileName2}`);return await testMain(testFileName2,!1)}}finally{this.addTestResult("Teardown",!0,`Deleting ${testFileName}`);await storage.removeHidden(testFileName)}return!0}async testBasic(filename,isLeader){const storage=this.core.storageAccess,database=this.core.databaseFileAccess;await this.addTestResult("---**Starting Basic Test**---",!0,`Test as ${isLeader?"Leader":"Receiver"} command file ${filename}`);await this.performStep({step:0,title:"Make sure that file is not exist",isGameChanger:!isLeader,proc:async()=>{},check:async()=>!await storage.isExists(filename)});await this.performStep({step:1,title:"Write a file",isGameChanger:isLeader,proc:async()=>await storage.writeFileAuto(filename,"Hello World"),check:async()=>await storage.isExists(filename)});await this.performStep({step:2,title:"Make sure the file is arrived",isGameChanger:!isLeader,proc:async()=>{},check:async()=>await storage.isExists(filename)});await this.performStep({step:3,title:"Update to Hello World 2",isGameChanger:isLeader,proc:async()=>await storage.writeFileAuto(filename,"Hello World 2"),check:async()=>await this.storageContentIsEqual(filename,"Hello World 2")});await this.performStep({step:4,title:"Make sure the modified file is arrived",isGameChanger:!isLeader,proc:async()=>{},check:async()=>await this.storageContentIsEqual(filename,"Hello World 2")});await this.performStep({step:5,title:"Update to Hello World 3",isGameChanger:!isLeader,proc:async()=>await storage.writeFileAuto(filename,"Hello World 3"),check:async()=>await this.storageContentIsEqual(filename,"Hello World 3")});await this.performStep({step:6,title:"Make sure the modified file is arrived",isGameChanger:isLeader,proc:async()=>{},check:async()=>await this.storageContentIsEqual(filename,"Hello World 3")});await this.performStep({step:7,title:"Update to Multiline",isGameChanger:isLeader,proc:async()=>await storage.writeFileAuto(filename,"Line1:A\nLine2:B\nLine3:C\nLine4:D"),check:async()=>await this.storageContentIsEqual(filename,"Line1:A\nLine2:B\nLine3:C\nLine4:D")});await this.performStep({step:8,title:"Make sure the modified file is arrived",isGameChanger:!isLeader,proc:async()=>{},check:async()=>await this.storageContentIsEqual(filename,"Line1:A\nLine2:B\nLine3:C\nLine4:D")});if(!this.settings.liveSync){const multiLineContentL="Line1:A\nLine2:B\nLine3:C!\nLine4:D",multiLineContentC="Line1:A\nLine2:bbbbb\nLine3:C\nLine4:D";await this.performStep({step:9,title:"Progress to be conflicted",isGameChanger:isLeader,proc:async()=>{},check:()=>Promise.resolve(!0)});await storage.writeFileAuto(filename,isLeader?multiLineContentL:multiLineContentC);await this.performStep({step:10,title:"Update As Conflicted",isGameChanger:!isLeader,proc:async()=>{},check:()=>Promise.resolve(!0)});await this.performStep({step:10,title:"Make sure Automatically resolved",isGameChanger:isLeader,proc:async()=>{},check:async()=>0===(await database.getConflictedRevs(filename)).length});await this.performStep({step:11,title:"Make sure Automatically resolved",isGameChanger:!isLeader,proc:async()=>{},check:async()=>0===(await database.getConflictedRevs(filename)).length});const sensiblyMergedContent="Line1:A\nLine2:bbbbb\nLine3:C!\nLine4:D";await this.performStep({step:12,title:"Make sure Sensibly Merged on Leader",isGameChanger:isLeader,proc:async()=>{},check:async()=>await this.storageContentIsEqual(filename,sensiblyMergedContent)});await this.performStep({step:13,title:"Make sure Sensibly Merged on Receiver",isGameChanger:!isLeader,proc:async()=>{},check:async()=>await this.storageContentIsEqual(filename,sensiblyMergedContent)})}await this.performStep({step:14,title:"Delete File",isGameChanger:isLeader,proc:async()=>{await storage.removeHidden(filename)},check:async()=>!await storage.isExists(filename)});await this.performStep({step:15,title:"Make sure File is deleted",isGameChanger:!isLeader,proc:async()=>{},check:async()=>!await storage.isExists(filename)});this._log("The Basic Test has been completed",LOG_LEVEL_NOTICE);return!0}async testBasicEvent(isLeader){this.settings.liveSync=!1;await this.saveSettings();await this._test("basic",async()=>await this.nonLiveTestRunner(isLeader,(t9,l2)=>this.testBasic(t9,l2)))}async testBasicLive(isLeader){this.settings.liveSync=!0;await this.saveSettings();await this._test("basic",async()=>await this.nonLiveTestRunner(isLeader,(t9,l2)=>this.testBasic(t9,l2)))}async _everyModuleTestMultiDevice(){if(!this.settings.enableDebugTools)return Promise.resolve(!0);const isLeader=-1===this.core.services.vault.vaultName().indexOf("recv");this.addTestResult("-------",!0,"Test as "+(isLeader?"Leader":"Receiver"));try{this._log("Starting Test");await this.testBasicEvent(isLeader);this.settings.remoteType==REMOTE_MINIO&&await this.testBasicLive(isLeader)}catch(e3){this._log(e3);this._log(`Error: ${e3}`);return Promise.resolve(!1)}return Promise.resolve(!0)}onBindFunction(core,services){services.test.testMultiDevice.addHandler(this._everyModuleTestMultiDevice.bind(this))}};ModuleReplicateTest=class extends AbstractObsidianModule{constructor(){super(...arguments);this.testRootPath="_test/";this.testInfoPath="_testinfo/";this.watchIsSynchronised=!1}get isLeader(){return this.services.vault.getVaultName().indexOf("dev")>=0&&this.services.vault.vaultName().indexOf("recv")<0}get nameByKind(){return this.isLeader?this.isLeader?"LEADER":void 0:"RECV"}get pairName(){return this.isLeader?"RECV":this.isLeader?void 0:"LEADER"}async readFileContent(file){try{return await this.core.storageAccess.readHiddenFileText(file)}catch(e3){return""}}async dumpList(){if(this.settings.syncInternalFiles){this._log("Write file list (Include Hidden)");await this.__dumpFileListIncludeHidden("files.md")}else{this._log("Write file list");await this.__dumpFileList("files.md")}}async _everyBeforeReplicate(showMessage){if(!this.settings.enableDebugTools)return Promise.resolve(!0);await this.dumpList();return!0}_everyOnloadAfterLoadSettings(){if(!this.settings.enableDebugTools)return Promise.resolve(!0);this.addCommand({id:"dump-file-structure-normal",name:"Dump Structure (Normal)",callback:()=>{this.__dumpFileList("files.md").finally(()=>{this.refreshSyncStatus()})}});this.addCommand({id:"dump-file-structure-ih",name:"Dump Structure (Include Hidden)",callback:()=>{this.__dumpFileListIncludeHidden("files.md")}});this.addCommand({id:"dump-file-structure-auto",name:"Dump Structure",callback:()=>{this.dumpList()}});this.addCommand({id:"dump-file-test",name:"Perform Test (Dev) "+(this.isLeader?"(Leader)":"(Recv)"),callback:()=>{this.performTestManually()}});this.addCommand({id:"watch-sync-result",name:"Watch sync result is matched between devices",callback:()=>{this.watchIsSynchronised=!this.watchIsSynchronised;this.refreshSyncStatus()}});this.app.vault.on("modify",async file=>{file.path.startsWith(this.testInfoPath)?await this.refreshSyncStatus():scheduleTask("dumpStatus",125,async()=>{await this.dumpList();return!0})});this.statusBarSyncStatus=this.plugin.addStatusBarItem();return Promise.resolve(!0)}async getSyncStatusAsText(){const fileMine=this.testInfoPath+this.nameByKind+"/files.md",filePair=this.testInfoPath+this.pairName+"/files.md",mine=(0,import_obsidian.parseYaml)(await this.readFileContent(fileMine)),pair=(0,import_obsidian.parseYaml)(await this.readFileContent(filePair)),result=[];mine.length!=pair.length&&result.push(`File count is different: ${mine.length} vs ${pair.length}`);const filesAll=new Set([...mine.map(e3=>e3.path),...pair.map(e3=>e3.path)]);for(const file of filesAll){const mineFile=mine.find(e3=>e3.path==file),pairFile=pair.find(e3=>e3.path==file);if(mineFile&&pairFile){mineFile.size!=pairFile.size&&result.push(`Size is different: ${file} ${mineFile.size} vs ${pairFile.size}`);mineFile.hash!=pairFile.hash&&result.push(`Hash is different: ${file} ${mineFile.hash} vs ${pairFile.hash}`)}else result.push(`File not found: ${file}`)}eventHub.emitEvent("debug-sync-status",result);return result.join("\n")}async refreshSyncStatus(){if(this.watchIsSynchronised){const syncStatus=await this.getSyncStatusAsText();if(syncStatus){this.statusBarSyncStatus.setText("Sync Status: Having Error");this._log(`Sync Status: Having Error\n${syncStatus}`,LOG_LEVEL_INFO)}else this.statusBarSyncStatus.setText("Sync Status: Synchronised")}else this.statusBarSyncStatus.setText("")}async __dumpFileList(outFile){if(!this.core||!this.core.storageAccess){this._log("No storage access",LOG_LEVEL_INFO);return}const files=await this.core.storageAccess.getFiles(),out=[],webcrypto6=await getWebCrypto();for(const file of files){if(!await this.services.vault.isTargetFile(file.path))continue;if(file.path.startsWith(this.testInfoPath))continue;const stat=await this.core.storageAccess.stat(file.path);if(stat){const hashSrc=await this.core.storageAccess.readHiddenFileBinary(file.path),hash3=await webcrypto6.subtle.digest("SHA-1",hashSrc),hashStr=uint8ArrayToHexString(new Uint8Array(hash3)),item={path:file.path,name:file.name,size:stat.size,mtime:stat.mtime,hash:hashStr};out.push(item)}}out.sort((a2,b3)=>a2.path.localeCompare(b3.path));if(outFile){outFile=this.testInfoPath+this.nameByKind+"/"+outFile;await this.core.storageAccess.ensureDir(outFile);await this.core.storageAccess.writeHiddenFileAuto(outFile,(0,import_obsidian.stringifyYaml)(out))}this._log(`Dumped ${out.length} files`,LOG_LEVEL_INFO)}async __dumpFileListIncludeHidden(outFile){const ignorePatterns=getFileRegExp(this.core.settings,"syncInternalFilesIgnorePatterns"),targetPatterns=getFileRegExp(this.core.settings,"syncInternalFilesTargetPatterns"),out=[],files=await this.core.storageAccess.getFilesIncludeHidden("",targetPatterns,ignorePatterns),webcrypto6=await getWebCrypto();for(const file of files){if(file.startsWith(this.testInfoPath))continue;const stat=await this.core.storageAccess.statHidden(file);if(stat){const hashSrc=await this.core.storageAccess.readHiddenFileBinary(file),hash3=await webcrypto6.subtle.digest("SHA-1",hashSrc),hashStr=uint8ArrayToHexString(new Uint8Array(hash3)),item={path:file,name:file.split("/").pop(),size:stat.size,mtime:stat.mtime,hash:hashStr};out.push(item)}}out.sort((a2,b3)=>a2.path.localeCompare(b3.path));if(outFile){outFile=this.testInfoPath+this.nameByKind+"/"+outFile;await this.core.storageAccess.ensureDir(outFile);await this.core.storageAccess.writeHiddenFileAuto(outFile,(0,import_obsidian.stringifyYaml)(out))}this._log(`Dumped ${out.length} files`,LOG_LEVEL_NOTICE)}async collectTestFiles(){const files=["README.md","docs/adding_translations.md","docs/design_docs_of_journalsync.md","docs/design_docs_of_keep_newborn_chunks.md","docs/design_docs_of_prefixed_hidden_file_sync.md","docs/design_docs_of_sharing_tweak_value.md","docs/quick_setup_cn.md","docs/quick_setup_ja.md","docs/quick_setup.md","docs/settings_ja.md","docs/settings.md","docs/setup_cloudant_ja.md","docs/setup_cloudant.md","docs/setup_flyio.md","docs/setup_own_server_cn.md","docs/setup_own_server_ja.md","docs/setup_own_server.md","docs/tech_info_ja.md","docs/tech_info.md","docs/terms.md","docs/troubleshooting.md","images/1.png","images/2.png","images/corrupted_data.png","images/hatch.png","images/lock_pattern1.png","images/lock_pattern2.png","images/quick_setup_1.png","images/quick_setup_2.png","images/quick_setup_3.png","images/quick_setup_3b.png","images/quick_setup_4.png","images/quick_setup_5.png","images/quick_setup_6.png","images/quick_setup_7.png","images/quick_setup_8.png","images/quick_setup_9_1.png","images/quick_setup_9_2.png","images/quick_setup_10.png","images/remote_db_setting.png","images/write_logs_into_the_file.png"];for(const file of files){const remote="https://raw.githubusercontent.com/vrtmrz/obsidian-livesync/refs/heads/main/"+file,local=this.testRootPath+file;try{const f4=(await(0,import_obsidian.requestUrl)(remote)).arrayBuffer;await this.core.storageAccess.ensureDir(local);await this.core.storageAccess.writeHiddenFileAuto(local,f4)}catch(ex){this._log(`Could not fetch ${remote}`,LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE)}}await this.dumpList()}async waitFor(proc,timeout=1e4){await delay(100);const start=Date.now();for(;!await proc();){if(timeout>0&&Date.now()-start>timeout){this._log("Timeout");return!1}await delay(500)}return!0}async testConflictedManually1(){await this.services.replication.replicate();this.isLeader&&await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"wonka.md","Resolve! \n*****, the amazing chocolatier!!");await this.services.replication.replicate();await this.services.replication.replicate();if("no"==await this.core.confirm.askYesNoDialog("Ready to begin the test conflict Manually 1?",{timeout:30,defaultOption:"Yes"}))return;const fileA="Resolve to KEEP THIS\nWilly Wonka, Willy Wonka, the amazing chocolatier!!";this.isLeader?await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"wonka.md",fileA):await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"wonka.md","Resolve to DISCARD THIS\nCharlie Bucket, Charlie Bucket, the amazing chocolatier!!");if("no"!=await this.core.confirm.askYesNoDialog("Ready to check the result of Manually 1?",{timeout:30,defaultOption:"Yes"})){await this.services.replication.replicate();await this.services.replication.replicate();return!!await this.waitFor(async()=>{await this.services.replication.replicate();return 1==await this.__assertStorageContent(this.testRootPath+"wonka.md",fileA,!1,!0)},3e4)||await this.__assertStorageContent(this.testRootPath+"wonka.md",fileA,!1,!0)}}async testConflictedManually2(){await this.services.replication.replicate();this.isLeader&&await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"concat.md","Resolve To concatenate\nABCDEFG");await this.services.replication.replicate();await this.services.replication.replicate();if("no"==await this.core.confirm.askYesNoDialog("Ready to begin the test conflict Manually 2?",{timeout:30,defaultOption:"Yes"}))return;const concatenated="Resolve to Concatenate\nABCDEFGHIJKLMNOPQRSTUVWXYZ";this.isLeader?await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"concat.md","Resolve to Concatenate\nABCDEFGHIJKLMNOPQRSTYZ"):await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"concat.md","Resolve to Concatenate\nAJKLMNOPQRSTUVWXYZ");if("no"!=await this.core.confirm.askYesNoDialog("Ready to test conflict Manually 2?",{timeout:30,defaultOption:"Yes"})){await this.services.replication.replicate();await this.services.replication.replicate();return!!await this.waitFor(async()=>{await this.services.replication.replicate();return 1==await this.__assertStorageContent(this.testRootPath+"concat.md",concatenated,!1,!0)},3e4)||await this.__assertStorageContent(this.testRootPath+"concat.md",concatenated,!1,!0)}}async testConflictAutomatic(){if(this.isLeader){const baseDoc="Tasks!\n- [ ] Task 1\n- [ ] Task 2\n- [ ] Task 3\n- [ ] Task 4\n";await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"task.md",baseDoc)}await delay(100);await this.services.replication.replicate();await this.services.replication.replicate();if("no"!=await this.core.confirm.askYesNoDialog("Ready to test conflict?",{timeout:30,defaultOption:"Yes"})){this.isLeader?await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"task.md","Tasks!\n- [ ] Task 1\n- [v] Task 2\n- [ ] Task 3\n- [ ] Task 4\n"):await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"task.md","Tasks!\n- [ ] Task 1\n- [ ] Task 2\n- [v] Task 3\n- [ ] Task 4\n");await this.services.replication.replicate();await this.services.replication.replicate();await delay(1e3);if("no"!=await this.core.confirm.askYesNoDialog("Ready to check result?",{timeout:30,defaultOption:"Yes"})){await this.services.replication.replicate();await this.services.replication.replicate();return this.__assertStorageContent(this.testRootPath+"task.md","Tasks!\n- [ ] Task 1\n- [v] Task 2\n- [v] Task 3\n- [ ] Task 4\n",!1,!0)}}}async checkConflictResolution(){this._log("Before testing conflicted files, resolve all once",LOG_LEVEL_NOTICE);await this.services.conflict.resolveAllConflictedFilesByNewerOnes();await this.services.conflict.resolveAllConflictedFilesByNewerOnes();await this.services.replication.replicate();await delay(1e3);if(!await this.testConflictAutomatic()){this._log("Conflict resolution (Auto) failed",LOG_LEVEL_NOTICE);return!1}if(!await this.testConflictedManually1()){this._log("Conflict resolution (Manual1) failed",LOG_LEVEL_NOTICE);return!1}if(!await this.testConflictedManually2()){this._log("Conflict resolution (Manual2) failed",LOG_LEVEL_NOTICE);return!1}return!0}async __assertStorageContent(fileName,content,inverted=!1,showResult=!1){try{const fileContent=await this.core.storageAccess.readHiddenFileText(fileName);let result=fileContent===content;inverted&&(result=!result);if(result)return!0;showResult&&this._log(`Content is not same \n Expected:${content}\n Actual:${fileContent}`,LOG_LEVEL_VERBOSE);return`Content is not same \n Expected:${content}\n Actual:${fileContent}`}catch(e3){this._log(`Cannot assert storage content: ${e3}`);return!1}}async performTestManually(){if(!this.settings.enableDebugTools)return Promise.resolve(!0);await this.checkConflictResolution()}async _everyModuleTestMultiDevice(){if(!this.settings.enableDebugTools)return Promise.resolve(!0);await this._test("Conflict resolution",async()=>await this.checkConflictResolution());return this.testDone()}onBindFunction(core,services){services.appLifecycle.onSettingLoaded.addHandler(this._everyOnloadAfterLoadSettings.bind(this));services.replication.onBeforeReplicate.addHandler(this._everyBeforeReplicate.bind(this));services.test.testMultiDevice.addHandler(this._everyModuleTestMultiDevice.bind(this))}};LocalDatabaseMaintenance=class extends LiveSyncCommands{onunload(){}onload(){this.plugin.addCommand({id:"analyse-database",name:"Analyse Database Usage (advanced)",icon:"database-search",callback:async()=>{await this.analyseDatabase()}});this.plugin.addCommand({id:"gc-v3",name:"Garbage Collection V3 (advanced, beta)",icon:"trash-2",callback:async()=>{await this.gcv3()}});eventHub.onEvent(EVENT_ANALYSE_DB_USAGE,()=>this.analyseDatabase());eventHub.onEvent(EVENT_REQUEST_PERFORM_GC_V3,()=>this.gcv3())}async allChunks(includeDeleted=!1){const p2=this._progress("",LOG_LEVEL_NOTICE);p2.log("Retrieving chunks informations..");try{return await this.localDatabase.allChunks(includeDeleted)}finally{p2.done()}}get database(){return this.localDatabase.localDatabase}clearHash(){this.localDatabase.clearCaches()}async confirm(title,message,affirmative="Yes",negative="No"){return await this.core.confirm.askSelectStringDialogue(message,[affirmative,negative],{title,defaultAction:affirmative})===affirmative}isAvailable(){if(!this.settings.doNotUseFixedRevisionForChunks){this._notice("Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.");return!1}if(this.settings.readChunksOnline){this._notice("Please disable 'Read chunks online' in settings to use Garbage Collection.");return!1}return!0}async resurrectChunks(){if(!this.isAvailable())return;const{used,existing}=await this.allChunks(!0),excessiveDeletions=[...existing].filter(([key3,e3])=>e3._deleted).filter(([key3,e3])=>used.has(e3._id)).map(([key3,e3])=>e3),completelyLostChunks=[],dataLostChunks=[...existing].filter(([key3,e3])=>e3._deleted&&""===e3.data).map(([key3,e3])=>e3).filter(e3=>used.has(e3._id));for(const e3 of dataLostChunks){let resurrected=null;const availableRevs=((await this.database.get(e3._id,{rev:e3._rev,revs:!0,revs_info:!0,conflicts:!0}))._revs_info||[]).filter(e4=>"available"==e4.status).map(e4=>e4.rev).sort((a2,b3)=>getNoFromRev(a2)-getNoFromRev(b3));for(const rev3 of availableRevs){const revDoc=await this.database.get(e3._id,{rev:rev3});if("leaf"==revDoc.type&&""!==revDoc.data){resurrected=revDoc.data;break}}null!==resurrected?excessiveDeletions.push({...e3,data:resurrected,_deleted:!1}):completelyLostChunks.push(e3._id)}const resurrectChunks=excessiveDeletions.filter(e3=>""!==e3.data).map(e3=>({...e3,_deleted:!1}));if(0==resurrectChunks.length){this._notice("No chunks are found to be resurrected.");return}const message=`We have following chunks that are deleted but still used in the database.\n\n- Completely lost chunks: ${completelyLostChunks.length}\n- Resurrectable chunks: ${resurrectChunks.length}\n\nDo you want to resurrect these chunks?`;if(await this.confirm("Resurrect Chunks",message,"Resurrect","Cancel")){const result=await this.database.bulkDocs(resurrectChunks);this.clearHash();const resurrectedChunks=result.filter(e3=>"ok"in e3).map(e3=>e3.id);this._notice(`Resurrected chunks: ${resurrectedChunks.length} / ${resurrectChunks.length}`)}else this._notice("Resurrect operation is cancelled.")}async commitFileDeletion(){if(!this.isAvailable())return;const p2=this._progress("",LOG_LEVEL_NOTICE);p2.log("Searching for deleted files..");const deletedDocs=(await this.database.allDocs({include_docs:!0})).rows.filter(e3=>{var _a8,_b5,_c3;return("newnote"==(null==(_a8=e3.doc)?void 0:_a8.type)||"plain"==(null==(_b5=e3.doc)?void 0:_b5.type))&&(null==(_c3=e3.doc)?void 0:_c3.deleted)});if(0==deletedDocs.length){p2.done("No deleted files found.");return}p2.log(`Found ${deletedDocs.length} deleted files.`);const message=`We have following files that are marked as deleted.\n\n- Deleted files: ${deletedDocs.length}\n\nAre you sure to delete these files permanently?\n\nNote: **Make sure to synchronise all devices before deletion.**\n\n> [!Note]\n> This operation affects the database permanently. Deleted files will not be recovered after this operation.\n> And, the chunks that are used in the deleted files will be ready for compaction.`,deletingDocs=deletedDocs.map(e3=>({...e3.doc,_deleted:!0}));if(await this.confirm("Delete Files",message,"Delete","Cancel")){const result=await this.database.bulkDocs(deletingDocs);this.clearHash();p2.done(`Deleted ${result.filter(e3=>"ok"in e3).length} / ${deletedDocs.length} files.`)}else p2.done("Deletion operation is cancelled.")}async commitChunkDeletion(){if(!this.isAvailable())return;const{existing}=await this.allChunks(!0),deletedChunks=[...existing].filter(([key3,e3])=>e3._deleted&&""!==e3.data).map(([key3,e3])=>e3),deletedNotVacantChunks=deletedChunks.map(e3=>({...e3,data:"",_deleted:!0})),humanSize=sizeToHumanReadable(deletedChunks.reduce((acc,e3)=>acc+e3.data.length,0)),message=`We have following chunks that are marked as deleted.\n\n- Deleted chunks: ${deletedNotVacantChunks.length} (${humanSize})\n\nAre you sure to delete these chunks permanently?\n\nNote: **Make sure to synchronise all devices before deletion.**\n\n> [!Note]\n> This operation finally reduces the capacity of the remote.`;if(0!=deletedNotVacantChunks.length)if(await this.confirm("Delete Chunks",message,"Delete","Cancel")){const result=await this.database.bulkDocs(deletedNotVacantChunks);this.clearHash();this._notice(`Deleted chunks: ${result.filter(e3=>"ok"in e3).length} / ${deletedNotVacantChunks.length}`)}else this._notice("Deletion operation is cancelled.");else this._notice("No deleted chunks found.")}async markUnusedChunks(){if(!this.isAvailable())return;const{used,existing}=await this.allChunks(),deleteChunks=[...existing].filter(([key3,e3])=>!used.has(e3._id)).map(([key3,e3])=>e3).map(e3=>({...e3,_deleted:!0})),humanSize=sizeToHumanReadable(deleteChunks.reduce((acc,e3)=>acc+e3.data.length,0));if(0==deleteChunks.length){this._notice("No unused chunks found.");return}const message=`We have following chunks that are not used from any files.\n\n- Chunks: ${deleteChunks.length} (${humanSize})\n\nAre you sure to mark these chunks to be deleted?\n\nNote: **Make sure to synchronise all devices before deletion.**\n\n> [!Note]\n> This operation will not reduces the capacity of the remote until permanent deletion.`;if(await this.confirm("Mark unused chunks",message,"Mark","Cancel")){const result=await this.database.bulkDocs(deleteChunks);this.clearHash();this._notice(`Marked chunks: ${result.filter(e3=>"ok"in e3).length} / ${deleteChunks.length}`)}}async removeUnusedChunks(){const{used,existing}=await this.allChunks(),unusedChunks=[...existing].filter(([key3,e3])=>!used.has(e3._id)).map(([key3,e3])=>e3),deleteChunks=unusedChunks.map(e3=>({...e3,data:"",_deleted:!0})),humanSize=sizeToHumanReadable(unusedChunks.reduce((acc,e3)=>acc+e3.data.length,0));if(0==deleteChunks.length){this._notice("No unused chunks found.");return}const message=`We have following chunks that are not used from any files.\n\n- Chunks: ${deleteChunks.length} (${humanSize})\n\nAre you sure to delete these chunks?\n\nNote: **Make sure to synchronise all devices before deletion.**\n\n> [!Note]\n> Chunks referenced from deleted files are not deleted. Please run "Commit File Deletion" before this operation.`;if(await this.confirm("Mark unused chunks",message,"Mark","Cancel")){const result=await this.database.bulkDocs(deleteChunks);this._notice(`Deleted chunks: ${result.filter(e3=>"ok"in e3).length} / ${deleteChunks.length}`);this.clearHash()}}async scanUnusedChunks(){const kvDB=this.core.kvDB,chunkSet=await kvDB.get("chunk-set")||new Set,chunkUsageMap=await kvDB.get("doc-usage-map")||new Map,unusedSet=new Set([...chunkSet]);for(const[,revIdMap]of chunkUsageMap){const sortedRevId=[...revIdMap.entries()].sort((a2,b3)=>getNoFromRev(b3[0])-getNoFromRev(a2[0]));sortedRevId.length;sortedRevId.slice(0,10).forEach(e3=>e3[1].forEach(ee=>unusedSet.delete(ee)))}return{chunkSet,chunkUsageMap,unusedSet}}async trackChanges(fromStart=!1,showNotice=!1){if(!this.isAvailable())return;const logLevel=showNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,kvDB=this.core.kvDB,previousSeq=fromStart?"":await kvDB.get("gc-seq"),chunkSet=await kvDB.get("chunk-set")||new Set,chunkUsageMap=await kvDB.get("doc-usage-map")||new Map,db=this.localDatabase.localDatabase,verbose2=msg=>this._verbose(msg),processDoc=async(doc,isDeleted2)=>{if(!("children"in doc))return;const id=doc._id,rev3=doc._rev,deleted=doc._deleted||isDeleted2,softDeleted=doc.deleted,children=doc.children||[];chunkUsageMap.has(id)||chunkUsageMap.set(id,new Map);for(const chunkId of children)deleted?chunkUsageMap.get(id).delete(rev3):chunkUsageMap.get(id).set(rev3,(chunkUsageMap.get(id).get(rev3)||new Set).add(chunkId));verbose2(`Tracking chunk: ${id}/${rev3} (${null==doc?void 0:doc.path}), deleted: ${deleted?"yes":"no"} Soft-Deleted:${softDeleted?"yes":"no"}`);return await Promise.resolve()},saveState=async seq=>{await kvDB.set("gc-seq",seq);await kvDB.set("chunk-set",chunkSet);await kvDB.set("doc-usage-map",chunkUsageMap)},processDocRevisions=async doc=>{var _a8;try{const oldRevisions=await db.get(doc._id,{revs:!0,revs_info:!0,conflicts:!0}),allRevs=(null==(_a8=oldRevisions._revs_info)?void 0:_a8.length)||0,info3=(oldRevisions._revs_info||[]).filter(e3=>"available"==e3.status&&e3.rev!=doc._rev).filter(info4=>{var _a9;return!(null==(_a9=chunkUsageMap.get(doc._id))?void 0:_a9.has(info4.rev))}),infoLength=info3.length;this._log(`Found ${allRevs} old revisions for ${doc._id} . ${infoLength} items to check `);if(info3.length>0){const oldDocs=await Promise.all(info3.filter(revInfo=>"available"==revInfo.status).map(revInfo=>db.get(doc._id,{rev:revInfo.rev}))).then(docs=>docs.filter(doc2=>doc2));for(const oldDoc of oldDocs)await processDoc(oldDoc,!1)}}catch(ex){if(404==(null==ex?void 0:ex.status))this._log(`No revisions found for ${doc._id}`,LOG_LEVEL_VERBOSE);else{this._log(`Error finding revisions for ${doc._id}`);this._verbose(ex)}}},processChange2=async(doc,isDeleted2,seq)=>{if("leaf"===doc.type){if(isDeleted2)return;chunkSet.add(doc._id)}else if("children"in doc){await processDoc(doc,isDeleted2);await serialized("x-process-doc",async()=>await processDocRevisions(doc))}};let i2=0;await db.changes({since:previousSeq||"",live:!1,conflicts:!0,include_docs:!0,style:"all_docs",return_docs:!1}).on("change",async change=>{var _a8;await processChange2(change.doc,null!=(_a8=change.deleted)&&_a8,change.seq);i2++%100==0&&await saveState(change.seq)}).on("complete",async info3=>{await saveState(info3.last_seq)});const result=await this.scanUnusedChunks(),message=`Total chunks: ${result.chunkSet.size}\nUnused chunks: ${result.unusedSet.size}`;this._log(message,logLevel)}async performGC(showingNotice=!1){var _a8;if(!this.isAvailable())return;await this.trackChanges(!1,showingNotice);const logLevel=showingNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;if("Yes, delete chunks"!==await this.core.confirm.askSelectStringDialogue("This function deletes unused chunks from the device. If there are differences between devices, some chunks may be missing when resolving conflicts.\nBe sure to synchronise before executing.\n\nHowever, if you have deleted them, you may be able to recover them by performing Hatch -> Recreate missing chunks for all files.\n\nAre you ready to delete unused chunks?",["Yes, delete chunks","Cancel"],{title:"Are all devices synchronised?",defaultAction:"Cancel"})){this._log("User cancelled chunk deletion",logLevel);return}const{unusedSet,chunkSet}=await this.scanUnusedChunks(),deleteChunks=await this.database.allDocs({keys:[...unusedSet],include_docs:!0});for(const chunk of deleteChunks.rows)(null==(_a8=null==chunk?void 0:chunk.value)?void 0:_a8.deleted)&&chunkSet.delete(chunk.key);const deleteDocs=deleteChunks.rows.filter(e3=>"doc"in e3).map(e3=>({...e3.doc,_deleted:!0}));this._log(`Deleting chunks: ${deleteDocs.length}`,logLevel);const deleteChunkBatch=arrayToChunkedArray(deleteDocs,100);let successCount=0,errored=0;for(const batch of deleteChunkBatch){const results=await this.database.bulkDocs(batch);for(const result2 of results)if("ok"in result2){chunkSet.delete(result2.id);successCount++}else{this._log(`Failed to delete doc: ${result2.id}`,LOG_LEVEL_VERBOSE);errored++}this._log(`Deleting chunks: ${successCount} `,logLevel,"gc-preforming")}const message=`Garbage Collection completed.\nSuccess: ${successCount}, Errored: ${errored}`;this._log(message,logLevel);const kvDB=this.core.kvDB;await kvDB.set("chunk-set",chunkSet)}async analyseDatabase(){if(!this.isAvailable())return;const db=this.localDatabase.localDatabase,chunkMap=new Map,docMap=new Map,info3=await db.info(),maxSeq=new Number(info3.update_seq);let processed=0,read=0,errored=0;const ft=[],fetchRevision=async(id,rev3,seq)=>{try{processed++;const doc=await db.get(id,{rev:rev3});if(doc){if("children"in doc){const id2=doc._id,rev4=doc._rev,children=doc.children||[],set2=docMap.get(id2)||new Set;set2.add({id:id2,rev:rev4,chunks:new Set(children),uniqueChunks:new Set,sharedChunks:new Set,path:doc.path});docMap.set(id2,set2)}else if("leaf"===doc.type){const id2=doc._id;if(chunkMap.has(id2))return;if(doc._deleted)return;const length=doc.data.length,set2=chunkMap.get(id2)||new Set;set2.add({id:id2,length,refCount:0});chunkMap.set(id2,set2)}read++}else{this._log(`Analysing Database: not found: ${id} / ${rev3}`);errored++}}catch(error){this._log(`Error fetching document ${id} / ${rev3}: $`,LOG_LEVEL_NOTICE);this._log(error,LOG_LEVEL_VERBOSE);errored++}processed%100==0&&this._log(`Analysing database: ${read} (${errored}) / ${maxSeq} `,LOG_LEVEL_NOTICE,"db-analyse")},IDs=this.localDatabase.findEntryNames("","",{});for await(const id of IDs){const revInfos=(await this.localDatabase.getRaw(id,{revs:!0,revs_info:!0,conflicts:!0}))._revs_info||[];for(const revInfo of revInfos)"available"==revInfo.status&&ft.push(fetchRevision(id,revInfo.rev))}await Promise.all(ft);for(const[,docRevs]of docMap)for(const docRev of docRevs)for(const chunkId of docRev.chunks){const chunkInfos=chunkMap.get(chunkId);if(chunkInfos)for(const chunkInfo of chunkInfos){0===chunkInfo.refCount?docRev.uniqueChunks.add(chunkId):docRev.sharedChunks.add(chunkId);chunkInfo.refCount++}}const result=[],getTotalSize=ids=>[...ids].reduce((acc,chunkId)=>{const chunkInfos=chunkMap.get(chunkId);if(chunkInfos)for(const chunkInfo of chunkInfos)acc+=chunkInfo.length;return acc},0);for(const doc of docMap.values())for(const rev3 of doc){const title=`${rev3.path} (${rev3.rev})`,id=rev3.id,revStr=`${getNoFromRev(rev3.rev)}`,revHash=rev3.rev.split("-")[1].substring(0,6),path2=rev3.path,uniqueChunkCount=rev3.uniqueChunks.size,sharedChunkCount=rev3.sharedChunks.size,uniqueChunkSize=getTotalSize(rev3.uniqueChunks),sharedChunkSize=getTotalSize(rev3.sharedChunks);result.push({title,path:path2,rev:revStr,revHash,id,uniqueChunkCount,sharedChunkCount,uniqueChunkSize,sharedChunkSize})}const orphanChunks=[...chunkMap.entries()].filter(([chunkId,infos])=>0===[...infos].reduce((acc,info4)=>acc+info4.refCount,0)),orphanChunkSize=orphanChunks.reduce((acc,[chunkId,infos])=>{for(const info4 of infos)acc+=info4.length;return acc},0);result.push({title:"__orphan",id:"__orphan",path:"__orphan",rev:"1",revHash:"xxxxx",uniqueChunkCount:orphanChunks.length,sharedChunkCount:0,uniqueChunkSize:orphanChunkSize,sharedChunkSize:0});const csvSrc=result.map(e3=>[`${e3.title.replace(/"/g,'""')}"`,`${e3.id}`,`${e3.path}`,`${e3.rev}`,`${e3.revHash}`,`${e3.uniqueChunkCount}`,`${e3.sharedChunkCount}`,`${e3.uniqueChunkSize}`,`${e3.sharedChunkSize}`].join("\t"));csvSrc.unshift(Object.values({title:"Title",id:"Document ID",path:"Path",rev:"Revision No",revHash:"Revision Hash",uniqueChunkCount:"Unique Chunk Count",sharedChunkCount:"Shared Chunk Count",uniqueChunkSize:"Unique Chunk Size",sharedChunkSize:"Shared Chunk Size"}).join("\t"));const csv=csvSrc.join("\n");await this.services.UI.promptCopyToClipboard("Database Analysis data (TSV):",csv)}async compactDatabase(){const replicator=this.core.replicator,remote=await replicator.connectRemoteCouchDBWithSetting(this.settings,!1,!1,!0);if(!remote){this._notice("Failed to connect to remote for compaction.","gc-compact");return}if("string"==typeof remote){this._notice(`Failed to connect to remote for compaction. ${remote}`,"gc-compact");return}const compactResult=await remote.db.compact({interval:1e3});let timeout=12e4;for(;;){const status=await remote.db.info();if(!("compact_running"in status)||!(null==status?void 0:status.compact_running))break;this._notice("Compaction in progress on remote database...","gc-compact");await delay(2e3);timeout-=2e3;if(timeout<=0){this._notice("Compaction on remote database timed out.","gc-compact");break}}compactResult&&"ok"in compactResult?this._notice("Compaction on remote database completed successfully.","gc-compact"):this._notice("Compaction on remote database failed.","gc-compact")}async compactDatabaseWithRevLimit(){return!1}async gcv3(){if(!this.isAvailable())return;const replicator=this.core.replicator;if(!await replicator.openOneShotReplication(this.settings,!1,!1,"sync")){this._notice("Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.");return}const OPTION_CANCEL="Cancel Garbage Collection",info3=await this.core.replicator.getConnectedDeviceList();if(!info3){this._notice("No connected device information found. Cancelling Garbage Collection.");return}const{accepted_nodes,node_info}=info3,infoMissingNodes=[];for(const node of accepted_nodes)node in node_info||infoMissingNodes.push(node);if(infoMissingNodes.length>0){const message2=`The following accepted nodes are missing its node information:\n- ${infoMissingNodes.join("\n- ")}\n\nThis indicates that they have not been connected for some time or have been left on an older version.\nIt is preferable to update all devices if possible. If you have any devices that are no longer in use, you can clear all accepted nodes by locking the remote once.`,OPTION_IGNORE="Ignore and Proceed",buttons2=[OPTION_CANCEL,OPTION_IGNORE],result2=await this.core.confirm.askSelectStringDialogue(message2,buttons2,{title:"Node Information Missing",defaultAction:OPTION_CANCEL});if(result2===OPTION_CANCEL){this._notice("Garbage Collection cancelled by user.");return}result2===OPTION_IGNORE&&this._notice("Proceeding with Garbage Collection, ignoring missing nodes.")}const progressValues=Object.values(node_info).map(e3=>e3.progress.split("-")[0]).map(e3=>parseInt(e3)),maxProgress=Math.max(...progressValues),minProgress=Math.min(...progressValues),progressDifference=maxProgress-minProgress,detail=`> [!INFO]- The connected devices have been detected as follows:\n${Object.entries(node_info).map(([nodeId,nodeData])=>`> - Device: ${nodeData.device_name} (Node ID: ${nodeId})\n> - Obsidian version: ${nodeData.app_version}\n> - Plug-in version: ${nodeData.plugin_version}\n> - Progress: ${nodeData.progress.split("-")[0]}`).join("\n")}\n`,message=0!=progressDifference?`Some devices have differing progress values (max: ${maxProgress}, min: ${minProgress}).\nThis may indicate that some devices have not completed synchronisation, which could lead to conflicts. Strongly recommend confirming that all devices are synchronised before proceeding.`:`All devices have the same progress value (${maxProgress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.`,buttons=["Proceed Garbage Collection",OPTION_CANCEL],defaultAction=0!=progressDifference?OPTION_CANCEL:"Proceed Garbage Collection";if("Proceed Garbage Collection"!==await this.core.confirm.askSelectStringDialogue(message+"\n\n"+detail,buttons,{title:"Garbage Collection Confirmation",defaultAction})){this._notice("Garbage Collection cancelled by user.");return}this._notice("Proceeding with Garbage Collection.");const gcStartTime=Date.now(),localDatabase=this.localDatabase.localDatabase,usedChunks=new Set,allChunks=new Map,IDs=this.localDatabase.findEntryNames("","",{});let i2=0;const doc_count=(await localDatabase.info()).doc_count;for await(const id of IDs){const doc=await this.localDatabase.getRaw(id);i2++;i2%100==0&&this._notice(`Garbage Collection: Scanned ${i2} / ~${doc_count} `,"gc-scanning");if(doc)if("children"in doc){const children=doc.children||[];for(const chunkId of children)usedChunks.add(chunkId)}else"leaf"===doc.type&&allChunks.set(doc._id,doc._rev)}this._notice(`Garbage Collection: Scanning completed. Total chunks: ${allChunks.size}, Used chunks: ${usedChunks.size}`,"gc-scanning");const unusedChunks=[...allChunks.keys()].filter(e3=>!usedChunks.has(e3));this._notice(`Garbage Collection: Found ${unusedChunks.length} unused chunks to delete.`,"gc-scanning");const deleteChunkDocs=unusedChunks.map(chunkId=>({_id:chunkId,_deleted:!0,_rev:allChunks.get(chunkId)})),deletedCount=(await localDatabase.bulkDocs(deleteChunkDocs)).filter(e3=>"ok"in e3).length,gcEndTime=Date.now();this._notice(`Garbage Collection completed. Deleted chunks: ${deletedCount} / ${unusedChunks.length}. Time taken: ${(gcEndTime-gcStartTime)/1e3} seconds.`);if(await replicator.openOneShotReplication(this.settings,!1,!1,"pushOnly")){await this.compactDatabase();this.clearHash()}else this._notice("Failed to start replication after Garbage Collection.")}};ServiceContext=class{};ServiceBase=class{constructor(context2){this.context=context2}};ControlService=class extends ServiceBase{constructor(context2,dependencies){super(context2);this._unloaded=!1;this.services=dependencies;this._log=createInstanceLogFunction("ControlService",this.services.APIService);this._activated=promiseWithResolvers();this.services.appLifecycleService.onLoaded.addHandler(()=>{this.onActivated();return Promise.resolve(!0)})}hasUnloaded(){return this._unloaded}get activated(){return this._activated.promise}onActivated(){this._activated.resolve(!0)}async applySettings(){await this.services.appLifecycleService.onSuspending();await this.services.settingService.onBeforeRealiseSetting();this.services.databaseService.localDatabase.refreshSettings();await this.services.fileProcessingService.commitPendingFileEvents();await this.services.settingService.onRealiseSetting();if(!this.services.appLifecycleService.isSuspended()){await this.services.appLifecycleService.onResuming();await this.services.appLifecycleService.onResumed();await this.services.settingService.onSettingRealised()}}async _onLiveSyncUnload(){eventHub.emitEvent("plugin-unloaded");await this.services.appLifecycleService.onBeforeUnload();await this.services.appLifecycleService.onAppUnload();cancelAllPeriodicTask();cancelAllTasks();stopAllRunningProcessors();await this.services.appLifecycleService.onUnload();this._unloaded=!0;const localDatabase=this.services.databaseService.localDatabaseDirect;if(null!=localDatabase){const activeReplicator=this.services.replicatorService.getActiveReplicator();activeReplicator&&activeReplicator.closeReplication();localDatabase.onunload();await localDatabase.close()}eventHub.emitEvent(EVENT_PLATFORM_UNLOADED);eventHub.offAll();this._log($msg("moduleLiveSyncMain.logUnloadingPlugin"))}async onLoad(){if(!await this.services.appLifecycleService.onLoad()){this._log("Self-hosted LiveSync cannot be initialised, exiting loading.",128);return!1}return!0}async onReady(){return await this.services.appLifecycleService.onReady()}async onUnload(){return await this._onLiveSyncUnload()}};PathService=class extends ServiceBase{get settings(){return this.settingService.currentSettings()}constructor(context2,dependencies){super(context2);this.settingService=dependencies.settingService}_id2path(id,entry){const temp=id2path_base(id,entry).split(":"),path2=temp.pop(),normalizedPath=this.normalizePath(path2);temp.push(normalizedPath);return temp.join(":")}async _path2id(filename,obfuscatePassphrase,caseInsensitive){const temp=filename.split(":"),path2=temp.pop(),normalizedPath=this.normalizePath(path2);temp.push(normalizedPath);const fixedPath=temp.join(":");return await path2id_base(fixedPath,obfuscatePassphrase,caseInsensitive)}id2path(id,entry,stripPrefix2){const tempId=this._id2path(id,entry);return stripPrefix2&&isInternalMetadata(tempId)?stripInternalMetadataPrefix(tempId):tempId}async path2id(filename,prefix){const destPath=addPrefix(filename,null!=prefix?prefix:""),setting=this.settings;return await this._path2id(destPath,setting.usePathObfuscation?setting.passphrase:"",!setting.handleFilenameCaseSensitive)}getPath(entry){return this.id2path(entry._id,entry)}};ServiceHub=class{constructor(context2,services={}){this._injected={};this.context=context2;this._injected=services}get API(){return this._injected.API||this._api}get path(){return this._injected.path||this._path}get database(){return this._injected.database||this._database}get databaseEvents(){return this._injected.databaseEvents||this._databaseEvents}get replicator(){return this._injected.replicator||this._replicator}get fileProcessing(){return this._injected.fileProcessing||this._fileProcessing}get replication(){return this._injected.replication||this._replication}get remote(){return this._injected.remote||this._remote}get conflict(){return this._injected.conflict||this._conflict}get appLifecycle(){return this._injected.appLifecycle||this._appLifecycle}get setting(){return this._injected.setting||this._setting}get tweakValue(){return this._injected.tweakValue||this._tweakValue}get vault(){return this._injected.vault||this._vault}get test(){return this._injected.test||this._test}get UI(){return this._injected.ui||this._ui}get config(){return this._injected.config||this._config}get keyValueDB(){return this._injected.keyValueDB||this._keyValueDB}get control(){return this._injected.control||this._control}};APIService=class extends ServiceBase{constructor(){super(...arguments);this.requestCount=reactiveSource(0);this.responseCount=reactiveSource(0)}get isOnline(){return!("navigator"in globalThis)||navigator.onLine}webCompatFetch(req,opts){return fetch(req,opts)}nativeFetch(req,opts){throw new Error("nativeFetch is not implemented for this platform")}setInterval(handler,timeout){return globalThis.setInterval(handler,timeout)}clearInterval(timerId){globalThis.clearInterval(timerId)}getSystemConfigDir(){return".livesync"}};Binder=class{constructor(name,initialCallback){this._callback=null;this._name=name;initialCallback&&(this._callback=initialCallback)}assign(callback,override=!1){if(this._callback&&!override)throw new Error(`Handler ${this._name} is already assigned.`);this._callback=callback;return()=>{this._callback=null}}invoke(...args){if(this._callback)return this._callback(...args);throw new Error(`Handler ${this._name} is not assigned.`)}};LazyBinder=class{constructor(name,initialCallback){this._callbackPromise=promiseWithResolvers();this._callback=null;this._name=name;if(initialCallback){this._callback=initialCallback;this._callbackPromise.resolve()}}assign(callback,override=!1){if(this._callback&&!override)throw new Error(`Handler ${this._name} is already assigned.`);this._callback=callback;this._callbackPromise.resolve();return()=>{this._callback=null;this._callbackPromise=promiseWithResolvers()}}async invoke(...args){await this._callbackPromise.promise;if(this._callback)return await this._callback(...args);throw new Error(`Handler ${this._name} is not assigned.`)}};MultiBinder=class{constructor(name){this._callbackMap=new Map;this._isCallbackDirty=!1;this._maxUsedPriority=0;this._sortedCallbacks=[];this._name=name}addHandler(callback,priority=0,allowSwap=!1){this._callbackMap.set(callback,[priority,this._maxUsedPriority++]);this._isCallbackDirty=!0;return()=>{this.removeHandler(callback);this._isCallbackDirty=!0}}removeHandler(callback){this._callbackMap.delete(callback);this._isCallbackDirty=!0}use(callback,priority=0){return this.addHandler(callback,priority)}get _callbacks(){if(this._isCallbackDirty){this._sortedCallbacks=Array.from(this._callbackMap.entries()).sort((a2,b3)=>{const[priorityA,registerOrderA]=a2[1],[priorityB,registerOrderB]=b3[1];return priorityA!==priorityB?priorityA-priorityB:registerOrderA-registerOrderB}).map(entry=>entry[0]);this._isCallbackDirty=!1}return this._sortedCallbacks}};DispatchParallel=class extends MultiBinder{dispatch(...args){const promises=[...this._callbacks].map(async callback=>{try{return await Promise.resolve(callback(...args))}catch(error){return error instanceof Error?error:new Error(String(error))}});return Promise.all(promises)}};BooleanHandlerBase=class extends MultiBinder{};AllHandler=class extends BooleanHandlerBase{async invoke(...args){const _callbacks2=[...this._callbacks];for(const callback of _callbacks2)try{if(!1===await Promise.resolve(callback(...args)))return!1}catch(error){Logger(`AllHandler ${this._name} treated error as failure: ${error}`,LOG_LEVEL_VERBOSE);Logger(error,LOG_LEVEL_VERBOSE);return!1}return!0}};ParallelAllHandler=class extends BooleanHandlerBase{async invoke(...args){const promises=[...this._callbacks].map(async callback=>{try{return await Promise.resolve(callback(...args))}catch(error){Logger(`ParallelAllHandler ${this._name} treated error as failure: ${error}`,LOG_LEVEL_VERBOSE);return!1}});return(await Promise.all(promises)).every(res2=>!0===res2)}};AnySuccessHandler=class extends BooleanHandlerBase{async invoke(...args){const _callbacks2=[...this._callbacks];for(const callback of _callbacks2)try{if(!0===await Promise.resolve(callback(...args)))return!0}catch(error){Logger(`FirstSuccessHandler ${this._name} ignored error: ${error}`,LOG_LEVEL_VERBOSE)}return!1}};FirstResultHandler=class extends MultiBinder{async invoke(...args){const _callbacks2=[...this._callbacks];for(const callback of _callbacks2)try{const result=await Promise.resolve(callback(...args));if(void 0!==result&&!1!==result)return result}catch(error){Logger(`FirstResultHandler ${this._name} ignored error: ${error}`,LOG_LEVEL_VERBOSE)}return!1}};InjectableAPIService=class extends APIService{constructor(){super(...arguments);this.addLog=handlers2().binder("addLog")}getPlatform(){return"unknown"}getCrypto(){if("undefined"!=typeof crypto)return crypto;throw new Error("Crypto API is not available in this environment.")}};AppLifecycleService=class extends ServiceBase{constructor(context2,dependencies){super(context2);this.onLayoutReady=handlers2().bailFirstFailure("onLayoutReady");this.onFirstInitialise=handlers2().bailFirstFailure("onFirstInitialise");this.onReady=handlers2().bailFirstFailure("onReady");this.onWireUpEvents=handlers2().bailFirstFailure("onWireUpEvents");this.onInitialise=handlers2().bailFirstFailure("onInitialise");this.onLoad=handlers2().bailFirstFailure("onLoad");this.onSettingLoaded=handlers2().bailFirstFailure("onSettingLoaded");this.onLoaded=handlers2().bailFirstFailure("onLoaded");this.onScanningStartupIssues=handlers2().all("onScanningStartupIssues");this.onAppUnload=handlers2().dispatchParallel("onAppUnload");this.onBeforeUnload=handlers2().all("onBeforeUnload");this.onUnload=handlers2().all("onUnload");this.onSuspending=handlers2().bailFirstFailure("onSuspending");this.onResuming=handlers2().bailFirstFailure("onResuming");this.onResumed=handlers2().bailFirstFailure("onResumed");this._isSuspended=!1;this._isReady=!1;this.getUnresolvedMessages=handlers2().dispatchParallel("getUnresolvedMessages");this.settingService=dependencies.settingService}isSuspended(){const settings=this.settingService.currentSettings();return this._isSuspended||!(null==settings?void 0:settings.isConfigured)}setSuspended(suspend){this._isSuspended=suspend}isReady(){return this._isReady}markIsReady(){this._isReady=!0}resetIsReady(){this._isReady=!1}};AppLifecycleServiceBase=class extends AppLifecycleService{constructor(){super(...arguments);this.askRestart=handlers2().binder("askRestart");this.scheduleRestart=handlers2().binder("scheduleRestart");this.isReloadingScheduled=handlers2().binder("isReloadingScheduled")}};ConflictService=class extends ServiceBase{constructor(){super(...arguments);this.getOptionalConflictCheckMethod=handlers2().firstResult("getOptionalConflictCheckMethod");this.resolveByUserInteraction=handlers2().firstResult("resolveByUserInteraction");this.conflictProcessQueueCount=reactiveSource(0)}};InjectableConflictService=class extends ConflictService{constructor(){super(...arguments);this.queueCheckForIfOpen=handlers2().binder("queueCheckForIfOpen");this.queueCheckFor=handlers2().binder("queueCheckFor");this.ensureAllProcessed=handlers2().binder("ensureAllProcessed");this.resolveByDeletingRevision=handlers2().binder("resolveByDeletingRevision");this.resolve=handlers2().binder("resolve");this.resolveByNewest=handlers2().binder("resolveByNewest");this.resolveAllConflictedFilesByNewerOnes=handlers2().binder("resolveAllConflictedFilesByNewerOnes")}};DatabaseEventService=class extends ServiceBase{constructor(){super(...arguments);this.onUnloadDatabase=handlers2().all("onUnloadDatabase");this.onCloseDatabase=handlers2().all("onCloseDatabase");this.onDatabaseInitialisation=handlers2().bailFirstFailure("onDatabaseInitialisation");this.onDatabaseInitialised=handlers2().bailFirstFailure("onDatabaseInitialised");this.onResetDatabase=handlers2().bailFirstFailure("onResetDatabase");this.onDatabaseHasReady=handlers2().bailFirstFailure("onDatabaseHasReady");this.initialiseDatabase=handlers2().bailFirstFailure("initialiseDatabase")}};InjectableDatabaseEventService=class extends DatabaseEventService{};FileProcessingService=class extends ServiceBase{constructor(){super(...arguments);this.processFileEvent=handlers2().anySuccess("processFileEvent");this.processOptionalFileEvent=handlers2().anySuccess("processOptionalFileEvent");this.commitPendingFileEvents=handlers2().bailFirstFailure("commitPendingFileEvents");this.batched=reactiveSource(0);this.totalQueued=reactiveSource(0);this.processing=reactiveSource(0);this.totalStorageFileEventCount=0}onStorageFileEvent(){this.totalStorageFileEventCount++}};InjectableFileProcessingService=class extends FileProcessingService{};UnresolvedErrorManager=class{constructor(appLifecycleService){this._log=createInstanceLogFunction("UnresolvedErrorManager");this._occurredErrors=new Set;this.appLifecycleService=appLifecycleService;this.appLifecycleService.getUnresolvedMessages.addHandler(this._reportUnresolvedMessages.bind(this))}showError(msg,max_log_level=LEVEL_NOTICE){const level=this._occurredErrors.has(msg)?LEVEL_INFO:max_log_level;this._log(msg,level);if(!this._occurredErrors.has(msg)){this._occurredErrors.add(msg);eventHub.emitEvent(EVENT_ON_UNRESOLVED_ERROR)}}clearError(msg){if(this._occurredErrors.has(msg)){this._occurredErrors.delete(msg);eventHub.emitEvent(EVENT_ON_UNRESOLVED_ERROR)}}clearErrors(){this._occurredErrors.clear();eventHub.emitEvent(EVENT_ON_UNRESOLVED_ERROR)}countErrors(needle){return Array.from(this._occurredErrors).filter(error=>"string"==typeof error&&-1!==error.indexOf(needle)).length}_reportUnresolvedMessages(){return Promise.resolve(Array.from(this._occurredErrors))}};RemoteService=class extends ServiceBase{constructor(context2,dependencies){super(context2);this._authHeader=new AuthorizationHeaderGenerator;this.last_successful_post=!1;this._APIService=dependencies.APIService;this._appLifecycleService=dependencies.appLifecycle;this._settingService=dependencies.setting;this._log=createInstanceLogFunction("RemoteService",dependencies.APIService);this._unresolvedErrors=new UnresolvedErrorManager(this._appLifecycleService)}get hadLastPostFailedBySize(){return!this.last_successful_post}showError(msg,max_log_level=LOG_LEVEL_NOTICE){this._unresolvedErrors.showError(msg,max_log_level)}clearErrors(){this._unresolvedErrors.clearErrors()}async performFetch(req,opts,fetchMethod=0){var _a8;const fetchFunction=1===fetchMethod?this._APIService.nativeFetch.bind(this._APIService):this._APIService.webCompatFetch.bind(this._APIService);this._APIService.requestCount.value=this._APIService.requestCount.value+1;const response=await fetchFunction(req,opts),method=null!=(_a8=null==opts?void 0:opts.method)?_a8:"GET";this.last_successful_post="POST"!=method&&"PUT"!=method||response.ok;const url=new URL("string"==typeof req?req:req.url),localURL=`${url.protocol}//${url.host}${url.pathname}`;this._log(`[REQ] (${method}) ${localURL} -> ${response.status}`,LOG_LEVEL_DEBUG);if(2!==Math.floor(response.status/100))if(404==response.status)"GET"===method&&-1===url.pathname.indexOf("/_local/")&&this._log("Just checkpoint or some server information has been missing. The 404 error shown above is not an error.",LOG_LEVEL_VERBOSE);else{const r4=response.clone();this._log(`The request may have failed. The reason sent by the server: ${r4.status}: ${r4.statusText}`,LOG_LEVEL_NOTICE);try{const result=await r4.text();this._log(result,LOG_LEVEL_VERBOSE)}catch(_){this._log("Could not fetch response body",LOG_LEVEL_VERBOSE);this._log(_,LOG_LEVEL_VERBOSE)}}else this.clearErrors();return response}async connect(uri,auth,disableRequestURI,passphrase,useDynamicIterationCount,performSetup,skipInfo,compression,customHeaders,useRequestAPI,getPBKDF2Salt){if(!isValidRemoteCouchDBURI(uri))return"Remote URI is not valid";if(uri.toLowerCase()!=uri)return"Remote URI and database name could not contain capital letters.";if(-1!==uri.indexOf(" "))return"Remote URI and database name could not contain spaces.";if(!this._APIService.isOnline)return"Network is offline";const conf={adapter:"http",auth:"username"in auth?auth:void 0,skip_setup:!performSetup,fetch:async(url,opts)=>{var _a8;const authHeader=await this._authHeader.getAuthorizationHeader(auth);let size="";const localURL=url.toString().substring(uri.length),method=null!=(_a8=null==opts?void 0:opts.method)?_a8:"GET";if(null==opts?void 0:opts.body){const opts_length=opts.body.toString().length;if(opts_length>1e7&&isCloudantURI(uri)){this.last_successful_post=!1;this._log("This request should fail on IBM Cloudant.",LOG_LEVEL_VERBOSE);throw new Error("This request should fail on IBM Cloudant.")}size=` (${opts_length})`}try{const headers=new Headers(null==opts?void 0:opts.headers);if(customHeaders)for(const[key3,value]of Object.entries(customHeaders))key3&&value&&headers.append(key3,value);"username"in auth||headers.append("authorization",authHeader);try{this._APIService.requestCount.value=this._APIService.requestCount.value+1;return await this.performFetch(url,{...opts,headers},useRequestAPI?1:0)}catch(ex){if(ex instanceof TypeError){if(useRequestAPI){this._log("Failed to request by API.");throw ex}this._log("Failed to fetch by native fetch API. Trying to fetch by API to get more information.");const resp2=await this.performFetch(url,{...opts,headers},1);if(resp2.status/100==2){this.showError("The request was successful by API. But the native fetch API failed! Please check CORS settings on the remote database!. While this condition, you cannot enable LiveSync",LOG_LEVEL_NOTICE);return resp2}const r22=resp2.clone(),msg=await r22.text();this.showError(`Failed to fetch by API. ${resp2.status}: ${msg}`,LOG_LEVEL_NOTICE);return resp2}throw ex}}catch(ex){this._log(`HTTP:${method}${size} to:${localURL} -> failed`,LOG_LEVEL_VERBOSE);const msg=ex instanceof Error?`${null==ex?void 0:ex.name}:${null==ex?void 0:ex.message}`:null==ex?void 0:ex.toString();this.showError(`${MARK_LOG_NETWORK_ERROR}Network Error: Failed to fetch: ${msg}`);this._log(ex,LOG_LEVEL_VERBOSE);-1!==url.toString().indexOf("_bulk_docs")&&(this.last_successful_post=!1);this._log(ex);throw ex}finally{this._APIService.responseCount.value=this._APIService.responseCount.value+1}}},setting=this._settingService.currentSettings(),db=new index_es_default(uri,conf);replicationFilter(db,compression);disableEncryption();"false"!==passphrase&&"string"==typeof passphrase&&enableEncryption(db,passphrase,useDynamicIterationCount,!1,getPBKDF2Salt,setting.E2EEAlgorithm);if(skipInfo)return{db,info:{db_name:"",doc_count:0,update_seq:""}};try{const info3=await db.info();return{db,info:info3}}catch(ex){const msg=`${null==ex?void 0:ex.name}:${null==ex?void 0:ex.message}`;this._log(ex,LOG_LEVEL_VERBOSE);return msg}}};InjectableRemoteService=class extends RemoteService{};ReplicationService=class extends ServiceBase{constructor(context2,dependencies){super(context2);this.processSynchroniseResult=handlers2().anySuccess("processSynchroniseResult");this.processOptionalSynchroniseResult=handlers2().anySuccess("processOptionalSynchroniseResult");this.parseSynchroniseResult=handlers2().all("parseSynchroniseResult");this.processVirtualDocument=handlers2().anySuccess("processVirtualDocument");this.onBeforeReplicate=handlers2().bailFirstFailure("onBeforeReplicate");this.onCheckReplicationReady=handlers2().bailFirstFailure("onCheckReplicationReady");this.onReplicationFailed=handlers2().bailFirstFailure("onReplicationFailed");this.previousReplicated=0;this.checkConnectionFailure=handlers2().firstResult("checkConnectionFailure");this.databaseQueueCount=reactiveSource(0);this.storageApplyingCount=reactiveSource(0);this.replicationResultCount=reactiveSource(0);this.appLifecycleService=dependencies.appLifecycleService;this.settingService=dependencies.settingService;this.replicatorService=dependencies.replicatorService;this.APIService=dependencies.APIService;this.fileProcessing=dependencies.fileProcessingService;this.databaseService=dependencies.databaseService;this._log=createInstanceLogFunction("ReplicationService",dependencies.APIService);this._unresolvedErrorManager=new UnresolvedErrorManager(dependencies.appLifecycleService)}showError(msg,max_log_level=LOG_LEVEL_NOTICE){this._unresolvedErrorManager.showError(msg,max_log_level)}clearErrors(){this._unresolvedErrorManager.clearErrors()}async isReplicationReady(showMessage=!1){if(!this.appLifecycleService.isReady()){this._log("Not ready");return!1}const currentSettings=this.settingService.currentSettings();if(isLockAcquired("cleanup")){this._log($msg("Replicator.Message.Cleaned"),LOG_LEVEL_NOTICE);return!1}if(""!=currentSettings.versionUpFlash){this._log($msg("Replicator.Message.VersionUpFlash"),LOG_LEVEL_NOTICE);return!1}if(!await this.fileProcessing.commitPendingFileEvents()){this.showError($msg("Replicator.Message.Pending"),LOG_LEVEL_NOTICE);return!1}if(!this.APIService.isOnline){this.showError("Network is offline",showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}if(!await this.onBeforeReplicate(showMessage)){(await this.appLifecycleService.getUnresolvedMessages()).flat().some(e3=>"string"==typeof e3&&-1!==e3.indexOf(MARK_LOG_NETWORK_ERROR))?this._log($msg("Replicator.Message.SomeModuleFailed"),LOG_LEVEL_INFO):this.showError($msg("Replicator.Message.SomeModuleFailed"),LOG_LEVEL_NOTICE);return!1}this.clearErrors();return!0}async performReplication(showMessage){const activeReplicator=this.replicatorService.getActiveReplicator();if(!activeReplicator){this._log("No active replicator found",showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}const settings=this.settingService.currentSettings();return await activeReplicator.openReplication(settings,!1,!!showMessage,!1)||await this.onReplicationFailed(showMessage)}async replicate(showMessage){try{return!!await this.isReplicationReady(showMessage)&&await this.performReplication(showMessage)}finally{this.previousReplicated=Date.now()}}replicateByEvent(showMessage){return shareRunningResult("replication",async()=>{const least=this.settingService.currentSettings().syncMinimumInterval;if(least>0){const now3=Date.now(),elapsed=now3-this.previousReplicated;if(elapsedawait activeReplicator.markRemoteLocked(currentSettings,!0,lockByClean))}async markUnlocked(){return await this._getReplicatorAndPerform("marking remote unlocked",async(currentSettings,activeReplicator)=>await activeReplicator.markRemoteLocked(currentSettings,!1,!1))}async markResolved(){return await this._getReplicatorAndPerform("marking remote resolved",async(currentSettings,activeReplicator)=>await activeReplicator.markRemoteResolved(currentSettings))}};InjectableReplicationService=class extends ReplicationService{};ReplicatorService=class extends ServiceBase{constructor(context2,dependencies){super(context2);this.dependencies=dependencies;this._log=createInstanceLogFunction("ReplicatorService");this.onCloseActiveReplication=handlers2().anySuccess("onCloseActiveReplication");this.getNewReplicator=handlers2().firstResult("getNewReplicator");this.onReplicatorInitialised=handlers2().bailFirstFailure("onReplicatorInitialised");this.replicationStatics=reactiveSource({...DEFAULT_REPLICATION_STATICS});this.appLifecycleService=dependencies.appLifecycleService;this._unresolvedErrorManager=new UnresolvedErrorManager(dependencies.appLifecycleService);this.settingService=dependencies.settingService;this.settingService.onRealiseSetting.addHandler(this._initialiseReplicator.bind(this));this.databaseEventService=dependencies.databaseEventService;this.databaseEventService.onResetDatabase.addHandler(this.disposeReplicator.bind(this));this.databaseEventService.onDatabaseInitialisation.addHandler(this.disposeReplicator.bind(this));this.databaseEventService.onDatabaseInitialised.addHandler(this.reinitialiseReplicator.bind(this));this.databaseEventService.onDatabaseHasReady.addHandler(this.reinitialiseReplicator.bind(this));this.appLifecycleService.onSuspending.addHandler(this.suspendReplication.bind(this))}suspendReplication(){const activeReplicator=this._activeReplicator;activeReplicator&&activeReplicator.closeReplication();return Promise.resolve(!0)}async reinitialiseReplicator(){await this.disposeReplicator();await yieldMicrotask();return this._initialiseReplicator()}async disposeReplicator(){this._log("Detect database reset, closing active replicator if exists.");this._activeReplicator&&await this._activeReplicator.closeReplication();this._activeReplicator=void 0;this._replicatorType=void 0;return!0}async _initialiseReplicator(){const message=$msg("Replicator.Message.InitialiseFatalError"),setting=this.settingService.currentSettings();if(!setting){this._activeReplicator=void 0;this._replicatorType=void 0;this._unresolvedErrorManager.showError(message,LOG_LEVEL_NOTICE);return!1}const replicatorType=setting.remoteType;if(replicatorType===this._replicatorType&&this._activeReplicator){this._unresolvedErrorManager.clearError(message);this._log("Active replicator has been kept",LOG_LEVEL_VERBOSE);return!0}{this._log("Acquiring new replicator");const newReplicator=await this.getNewReplicator();if(!newReplicator){this._unresolvedErrorManager.showError(message,LOG_LEVEL_NOTICE);return!1}if(this._activeReplicator){await this._activeReplicator.closeReplication();this._log("Active replicator closed",LOG_LEVEL_VERBOSE)}this._activeReplicator=newReplicator;this._replicatorType=replicatorType;this.replicationStatics.value={...DEFAULT_REPLICATION_STATICS};await yieldMicrotask();if(!await this.onReplicatorInitialised()){this._log("Failed to initialise the replicator, onReplicatorInitialised reported some problems.");this._activeReplicator=void 0;this._replicatorType=void 0;this._unresolvedErrorManager.showError(message,LOG_LEVEL_NOTICE);return!1}const remoteTypeDisplay=replicatorType===RemoteTypes_REMOTE_COUCHDB?"CouchDB":replicatorType;this._log(`Replicator (${remoteTypeDisplay}) initialised and activated`,LOG_LEVEL_VERBOSE);this._unresolvedErrorManager.clearError(message);return!0}}getActiveReplicator(){const message="No replicator has been activated or has not been initialised yet.";if(this._activeReplicator){this._unresolvedErrorManager.clearError(message);return this._activeReplicator}this._unresolvedErrorManager.showError(message,LOG_LEVEL_NOTICE)}};InjectableReplicatorService=class extends ReplicatorService{};TestService=class extends ServiceBase{constructor(){super(...arguments);this.test=handlers2().bailFirstFailure("test");this.testMultiDevice=handlers2().bailFirstFailure("testMultiDevice")}};InjectableTestService=class extends TestService{constructor(){super(...arguments);this.addTestResult=handlers2().binder("addTestResult")}};TweakValueService=class extends ServiceBase{};InjectableTweakValueService=class extends TweakValueService{constructor(){super(...arguments);this.fetchRemotePreferred=handlers2().binder("fetchRemotePreferred");this.checkAndAskResolvingMismatched=handlers2().binder("checkAndAskResolvingMismatched");this.askResolvingMismatched=handlers2().binder("askResolvingMismatched");this.checkAndAskUseRemoteConfiguration=handlers2().binder("checkAndAskUseRemoteConfiguration");this.askUseRemoteConfiguration=handlers2().binder("askUseRemoteConfiguration")}};VaultService=class extends ServiceBase{constructor(context2,dependencies){super(context2);this.scanVault=handlers2().bailFirstFailure("scanVault");this.isIgnoredByIgnoreFile=handlers2().anySuccess("isIgnoredByIgnoreFile");this.isTargetFile=handlers2().bailFirstFailure("isTargetFile");this.isTargetFileInExtra=handlers2().anySuccess("isTargetFileInExtra");this.settingService=dependencies.settingService;this.APIService=dependencies.APIService}get settings(){return this.settingService.currentSettings()}vaultName(){return this.APIService.getSystemVaultName()}getVaultName(){return this.vaultName()+(this.settings.additionalSuffixOfDatabaseName?"-"+this.settings.additionalSuffixOfDatabaseName:"")}isFileSizeTooLarge(size){const maxSize=this.settings.syncMaxSizeInMB;return maxSize>0&&size>0&&1024*maxSize*1024constructors.some(c3=>object instanceof c3);transactionDoneMap=new WeakMap;transformCache=new WeakMap;reverseTransformCache=new WeakMap;idbProxyTraps={get(target,prop2,receiver){if(target instanceof IDBTransaction){if("done"===prop2)return transactionDoneMap.get(target);if("store"===prop2)return receiver.objectStoreNames[1]?void 0:receiver.objectStore(receiver.objectStoreNames[0])}return wrap(target[prop2])},set(target,prop2,value){target[prop2]=value;return!0},has:(target,prop2)=>target instanceof IDBTransaction&&("done"===prop2||"store"===prop2)||prop2 in target};unwrap=value=>reverseTransformCache.get(value);readMethods=["get","getKey","getAll","getAllKeys","count"];writeMethods=["put","add","delete","clear"];cachedMethods=new Map;replaceTraps(oldTraps=>({...oldTraps,get:(target,prop2,receiver)=>getMethod(target,prop2)||oldTraps.get(target,prop2,receiver),has:(target,prop2)=>!!getMethod(target,prop2)||oldTraps.has(target,prop2)}));advanceMethodProps=["continue","continuePrimaryKey","advance"];methodMap={};advanceResults=new WeakMap;ittrProxiedCursorToOriginalProxy=new WeakMap;cursorIteratorTraps={get(target,prop2){if(!advanceMethodProps.includes(prop2))return target[prop2];let cachedFunc=methodMap[prop2];cachedFunc||(cachedFunc=methodMap[prop2]=function(...args){advanceResults.set(this,ittrProxiedCursorToOriginalProxy.get(this)[prop2](...args))});return cachedFunc}};replaceTraps(oldTraps=>({...oldTraps,get:(target,prop2,receiver)=>isIteratorProp(target,prop2)?iterate:oldTraps.get(target,prop2,receiver),has:(target,prop2)=>isIteratorProp(target,prop2)||oldTraps.has(target,prop2)}));databaseCache=new Map;IDBKeyValueDatabase=class{constructor(dbKey){this._dbPromise=null;this._isDestroyed=!1;this.destroyedPromise=null;this.dbKey=dbKey;this.storeKey=dbKey}get isDestroyed(){return this._isDestroyed}get ensuredDestroyed(){return this.destroyedPromise?this.destroyedPromise:Promise.resolve()}async getIsReady(){await this.ensureDB();return!1===this.isDestroyed}ensureDB(){if(this._isDestroyed)throw new Error("Database is destroyed");if(this._dbPromise)return this._dbPromise;this._dbPromise=openDB(this.dbKey,void 0,{upgrade:(db,_oldVersion,_newVersion,_transaction,_event)=>{if(!db.objectStoreNames.contains(this.storeKey))return db.createObjectStore(this.storeKey)},blocking:(currentVersion,blockedVersion,event2)=>{Logger(`Blocking database open for ${this.dbKey}: currentVersion=${currentVersion}, blockedVersion=${blockedVersion}`,LOG_LEVEL_VERBOSE);this.closeDB(!0)},blocked:(currentVersion,blockedVersion,event2)=>{Logger(`Database open blocked for ${this.dbKey}: currentVersion=${currentVersion}, blockedVersion=${blockedVersion}`,LOG_LEVEL_VERBOSE)},terminated:()=>{Logger(`Database connection terminated for ${this.dbKey}`,LOG_LEVEL_VERBOSE);this._dbPromise=null}}).catch(e3=>{this._dbPromise=null;throw e3});return this._dbPromise}async closeDB(setDestroyed=!1){if(this._dbPromise){const tempPromise=this._dbPromise;this._dbPromise=null;try{(await tempPromise).close()}catch(e3){Logger("Error closing database");Logger(e3,LOG_LEVEL_VERBOSE)}}this._dbPromise=null;if(setDestroyed){this._isDestroyed=!0;this.destroyedPromise=Promise.resolve()}}get DB(){return this._isDestroyed?Promise.reject(new Error("Database is destroyed")):this.ensureDB()}async get(key3){const db=await this.DB;return await db.get(this.storeKey,key3)}async set(key3,value){const db=await this.DB;await db.put(this.storeKey,value,key3);return key3}async del(key3){const db=await this.DB;return await db.delete(this.storeKey,key3)}async clear(){const db=await this.DB;return await db.clear(this.storeKey)}async keys(query3,count){const db=await this.DB;return await db.getAllKeys(this.storeKey,query3,count)}async close(){await this.closeDB()}async destroy(){this._isDestroyed=!0;this.destroyedPromise=(async()=>{await this.closeDB();await deleteDB(this.dbKey,{blocked:()=>{Logger(`Database delete blocked for ${this.dbKey}`)}})})();await this.destroyedPromise}};KeyValueDBService=class extends ServiceBase{constructor(context2,dependencies){super(context2);this._log=createInstanceLogFunction("KeyValueDBService");this.databaseEvents=dependencies.databaseEvents;this.vault=dependencies.vault;this.appLifecycle=dependencies.appLifecycle;this.databaseEvents.onResetDatabase.addHandler(this._everyOnResetDatabase.bind(this));this.appLifecycle.onSettingLoaded.addHandler(this._everyOnloadAfterLoadSettings.bind(this));this.databaseEvents.onDatabaseInitialisation.addHandler(this._everyOnInitializeDatabase.bind(this));this.databaseEvents.onUnloadDatabase.addHandler(this._onOtherDatabaseUnload.bind(this));this.databaseEvents.onCloseDatabase.addHandler(this._onOtherDatabaseClose.bind(this))}get simpleStore(){if(!this._simpleStore)throw new Error("SimpleStore is not initialized yet");return this._simpleStore}get kvDB(){if(!this._kvDB)throw new Error("KeyValueDB is not initialized yet");return this._kvDB}async _everyOnResetDatabase(any){var _a8,_b5;try{const kvDBKey="queued-files";await(null==(_a8=this._kvDB)?void 0:_a8.del(kvDBKey));await(null==(_b5=this._kvDB)?void 0:_b5.destroy());await yieldMicrotask();this._kvDB=await OpenKeyValueDatabase(this.vault.getVaultName()+"-livesync-kv");await delay(100)}catch(e3){this._kvDB=void 0;this._log("Failed to reset KeyValueDB",LOG_LEVEL_NOTICE);this._log(e3,LOG_LEVEL_VERBOSE);return!1}return!0}async tryCloseKvDB(){var _a8;try{await(null==(_a8=this._kvDB)?void 0:_a8.close());return!0}catch(e3){this._log("Failed to close KeyValueDB",LOG_LEVEL_VERBOSE);this._log(e3);return!1}}async openKeyValueDB(){await delay(10);try{await this.tryCloseKvDB();await delay(10);await yieldMicrotask();this._kvDB=await OpenKeyValueDatabase(this.vault.getVaultName()+"-livesync-kv");await yieldMicrotask();await delay(100)}catch(e3){this._kvDB=void 0;this._log("Failed to open KeyValueDB",LOG_LEVEL_NOTICE);this._log(e3,LOG_LEVEL_VERBOSE);return!1}return!0}async _onOtherDatabaseUnload(){this._kvDB&&await this.tryCloseKvDB();return Promise.resolve(!0)}async _onOtherDatabaseClose(){this._kvDB&&await this.tryCloseKvDB();return Promise.resolve(!0)}_everyOnInitializeDatabase(any){return this.openKeyValueDB()}async _everyOnloadAfterLoadSettings(){if(!await this.openKeyValueDB())return!1;this._simpleStore=this.openSimpleStore("os");return Promise.resolve(!0)}openSimpleStore(kind){const getDB=()=>{if(!this._kvDB)throw new Error("KeyValueDB is not initialized yet");return this._kvDB},prefix=`${kind}-`;return{get:async key3=>await getDB().get(`${prefix}${key3}`),set:async(key3,value)=>{await getDB().set(`${prefix}${key3}`,value)},delete:async key3=>{await getDB().del(`${prefix}${key3}`)},keys:async(from,to,count)=>(await getDB().keys(IDBKeyRange.bound(`${prefix}${from||""}`,`${prefix}${to||""}`),count)).map(e3=>e3.toString()).filter(e3=>e3.startsWith(prefix)).map(e3=>e3.substring(prefix.length)),db:Promise.resolve(getDB())}}};ObsidianDatabaseEventService=class extends InjectableDatabaseEventService{};ObsidianReplicatorService=class extends InjectableReplicatorService{};ObsidianFileProcessingService=class extends InjectableFileProcessingService{};ObsidianReplicationService=class extends InjectableReplicationService{};ObsidianRemoteService=class extends InjectableRemoteService{};ObsidianConflictService=class extends InjectableConflictService{};ObsidianTweakValueService=class extends InjectableTweakValueService{};ObsidianTestService=class extends InjectableTestService{};ObsidianConfigService=class extends ConfigServiceBrowserCompat{};ObsidianKeyValueDBService=class extends KeyValueDBService{};ObsidianControlService=class extends ControlService{};SettingService=class extends ServiceBase{constructor(context2,dependencies){super(context2);this.deviceAndVaultName="";this.onBeforeRealiseSetting=handlers2().bailFirstFailure("onBeforeRealiseSetting");this.onSettingRealised=handlers2().bailFirstFailure("onSettingRealised");this.onRealiseSetting=handlers2().bailFirstFailure("onRealiseSetting");this.suspendAllSync=handlers2().all("suspendAllSync");this.suspendExtraSync=handlers2().all("suspendExtraSync");this.suggestOptionalFeatures=handlers2().all("suggestOptionalFeatures");this.enableOptionalFeature=handlers2().all("enableOptionalFeature");this.onSettingLoaded=handlers2().dispatchParallel("onSettingLoaded");this.onSettingChanged=handlers2().dispatchParallel("onSettingChanged");this.onSettingSaved=handlers2().dispatchParallel("onSettingSaved");this.usedPassphrase="";this.APIService=dependencies.APIService;this._log=createInstanceLogFunction("SettingService",this.APIService)}get settings(){return this._settings}set settings(value){this._settings=value}adjustSettings(settings){migrateLegacyRemoteConfigurationsInPlace(settings,message=>{this._log(message,LOG_LEVEL_NOTICE)})&&this._log("Legacy remote configuration has been migrated to the remote configuration list.",LOG_LEVEL_NOTICE);settings.disableRequestURI=!0;settings.gcDelay=0;settings.useHistory=!0;"workingEncrypt"in settings&&delete settings.workingEncrypt;"workingPassphrase"in settings&&delete settings.workingPassphrase;""==settings.chunkSplitterVersion?settings.enableChunkSplitterV2?settings.useSegmenter?settings.chunkSplitterVersion="v2-segmenter":settings.chunkSplitterVersion="v2":settings.chunkSplitterVersion="":settings.chunkSplitterVersion in ChunkAlgorithmNames||(settings.chunkSplitterVersion="");return Promise.resolve(settings)}getDeviceAndVaultName(){return this.deviceAndVaultName}setDeviceAndVaultName(name){this.deviceAndVaultName=name}saveDeviceAndVaultName(){const lsKey="obsidian-live-sync-vaultanddevicename-"+this.APIService.getSystemVaultName()+this.additionalSuffixOfDatabaseName();this.setItem(lsKey,this.deviceAndVaultName)}additionalSuffixOfDatabaseName(){var _a8;const suffix=null==(_a8=this.settings)?void 0:_a8.additionalSuffixOfDatabaseName;if(void 0===suffix){this._log("too early to get additionalSuffixOfDatabaseName, returning empty string");return""}return`-${suffix}`}getKey(key3){return`${this.APIService.getSystemVaultName()}${this.additionalSuffixOfDatabaseName()}-${key3}`}setSmallConfig(key3,value){const dbKey=this.getKey(key3);this.setItem(dbKey,value)}getSmallConfig(key3){const dbKey=this.getKey(key3);return this.getItem(dbKey)}deleteSmallConfig(key3){const dbKey=this.getKey(key3);this.deleteItem(dbKey)}async saveSettingData(){this.saveDeviceAndVaultName();const settings={...this.settings,remoteConfigurations:Object.fromEntries(Object.entries(this.settings.remoteConfigurations||{}).map(([id,config])=>[id,{...config}]))};settings.deviceAndVaultName="";if(settings.P2P_DevicePeerName&&""!==settings.P2P_DevicePeerName.trim()){this._log("Saving device peer name to small config");this.setSmallConfig(SETTING_KEY_P2P_DEVICE_NAME,settings.P2P_DevicePeerName.trim());settings.P2P_DevicePeerName=""}if(""!=this.usedPassphrase||await this.getPassphrase(settings)){if(""!=settings.couchDB_PASSWORD||""!=settings.couchDB_URI||""!=settings.couchDB_USER||settings.couchDB_DBNAME){const connectionSetting={couchDB_DBNAME:settings.couchDB_DBNAME,couchDB_PASSWORD:settings.couchDB_PASSWORD,couchDB_URI:settings.couchDB_URI,couchDB_USER:settings.couchDB_USER,accessKey:settings.accessKey,bucket:settings.bucket,endpoint:settings.endpoint,region:settings.region,secretKey:settings.secretKey,useCustomRequestHandler:settings.useCustomRequestHandler,bucketCustomHeaders:settings.bucketCustomHeaders,couchDB_CustomHeaders:settings.couchDB_CustomHeaders,useJWT:settings.useJWT,jwtKey:settings.jwtKey,jwtAlgorithm:settings.jwtAlgorithm,jwtKid:settings.jwtKid,jwtExpDuration:settings.jwtExpDuration,jwtSub:settings.jwtSub,useRequestAPI:settings.useRequestAPI,bucketPrefix:settings.bucketPrefix,forcePathStyle:settings.forcePathStyle};settings.encryptedCouchDBConnection=await this.encryptConfigurationItem(JSON.stringify(connectionSetting),settings);settings.couchDB_PASSWORD="";settings.couchDB_DBNAME="";settings.couchDB_URI="";settings.couchDB_USER="";settings.accessKey="";settings.bucket="";settings.region="";settings.secretKey="";settings.endpoint=""}if(settings.encrypt&&""!=settings.passphrase){settings.encryptedPassphrase=await this.encryptConfigurationItem(settings.passphrase,settings);settings.passphrase=""}await this.encryptRemoteConfigurationUris(settings)}else this._log("Failed to retrieve passphrase. data.json contains unencrypted items!",LOG_LEVEL_NOTICE);await this.saveData(settings);this.onSettingSaved(settings)}async encryptRemoteConfigurationUris(settings){const configs=settings.remoteConfigurations||{};for(const[id,config]of Object.entries(configs)){if(config.isEncrypted||""===config.uri.trim())continue;const encryptedURI=await this.encryptConfigurationItem(config.uri,settings);""!==encryptedURI?configs[id]={...config,uri:encryptedURI,isEncrypted:!0}:this._log(`Failed to encrypt remote configuration '${id}'. This entry will be saved in plain text.`,128)}}async decryptRemoteConfigurationUris(settings,passphrase){const configs=settings.remoteConfigurations||{};for(const[id,config]of Object.entries(configs)){if(!config.isEncrypted)continue;const decryptedURI=await this.decryptConfigurationItem(config.uri,passphrase);if(!1!==decryptedURI)configs[id]={...config,uri:decryptedURI,isEncrypted:!1};else{try{ConnectionStringParser.parse(config.uri);configs[id]={...config,isEncrypted:!1};this._log(`Remote configuration '${id}' had a plain-text URI marked as encrypted. The flag has been repaired.`,LOG_LEVEL_NOTICE);continue}catch(e3){}this._log(`Failed to decrypt remote configuration '${id}'. Verify passphrase and configuration.`,128)}}}currentSettings(){return this.settings}updateSettings(updateFn,saveImmediately){try{const updated=updateFn(this.settings);this.settings=updated}catch(ex){this._log("Error in update function: "+ex,128);return Promise.reject(ex)}return saveImmediately?this.saveSettingData():Promise.resolve()}async applyExternalSettings(partial,saveImmediately){try{this.settings=await this.adjustSettings({...this.settings,...partial})}catch(ex){this._log("Error in applying external settings: "+ex,128);return Promise.reject(ex)}return saveImmediately?this.saveSettingData():Promise.resolve()}applyPartial(partial,saveImmediately){try{this.settings={...this.settings,...partial}}catch(ex){this._log("Error in applying partial settings: "+ex,128);return Promise.reject(ex)}return saveImmediately?this.saveSettingData():Promise.resolve()}getPassphrase(settings){const methods={"":()=>Promise.resolve("*"),LOCALSTORAGE:()=>{var _a8;return Promise.resolve(null!=(_a8=this.getItem("ls-setting-passphrase"))&&_a8)},ASK_AT_LAUNCH:()=>this.APIService.confirm.askString("Passphrase","passphrase","")},method=settings.configPassphraseStore;return(method in methods?methods[method]:methods[""])()}clearUsedPassphrase(){this.usedPassphrase=""}async decryptConfigurationItem(encrypted,passphrase){try{const dec=await decryptString(encrypted,passphrase+"rHGMPtr6oWw7VSa3W3wpa8fT8U");if(dec){this.usedPassphrase=passphrase;return dec}}catch(ex){this._log(`Failed to decrypt configuration item: ${ex}`,LOG_LEVEL_NOTICE)}return!1}async encryptConfigurationItem(src,settings){if(""!=this.usedPassphrase)return await encryptString(src,this.usedPassphrase+"rHGMPtr6oWw7VSa3W3wpa8fT8U");const passphrase=await this.getPassphrase(settings);if(!1===passphrase){this._log("Failed to obtain passphrase when saving data.json! Please verify the configuration.",128);return""}const dec=await encryptString(src,passphrase+"rHGMPtr6oWw7VSa3W3wpa8fT8U");if(dec){this.usedPassphrase=passphrase;return dec}return""}async decryptSettings(settings){const passphrase=await this.getPassphrase(settings);if(!1===passphrase){this._log("No passphrase found for data.json! Verify configuration before syncing.",128);Object.values(settings.remoteConfigurations||{}).some(config=>config.isEncrypted)&&this._log("Encrypted remote configurations found, but passphrase is unavailable. Verify configuration before syncing.",128)}else{if(settings.encryptedCouchDBConnection){const keys3=["couchDB_URI","couchDB_USER","couchDB_PASSWORD","couchDB_DBNAME","accessKey","bucket","endpoint","region","secretKey"],decrypted=this.tryDecodeJson(await this.decryptConfigurationItem(settings.encryptedCouchDBConnection,passphrase));if(decrypted)for(const key3 of keys3)key3 in decrypted&&(settings[key3]=decrypted[key3]);else{this._log("Failed to decrypt passphrase from data.json! Ensure configuration is correct before syncing with remote.",128);for(const key3 of keys3)settings[key3]=""}}if(settings.encrypt&&settings.encryptedPassphrase){const encrypted=settings.encryptedPassphrase,decrypted=await this.decryptConfigurationItem(encrypted,passphrase);if(decrypted)settings.passphrase=decrypted;else{this._log("Failed to decrypt passphrase from data.json! Ensure configuration is correct before syncing with remote.",128);settings.passphrase=""}}await this.decryptRemoteConfigurationUris(settings,passphrase)}return settings}async loadSettings(){var _a8,_b5;const settings=Object.assign({},DEFAULT_SETTINGS,await this.loadData()),hadRemoteConfigurations=Object.keys(null!=(_a8=settings.remoteConfigurations)?_a8:{}).length>0;if(void 0===settings.isConfigured)if(JSON.stringify(settings)!==JSON.stringify(DEFAULT_SETTINGS))settings.isConfigured=!0;else{const appId=this.APIService.getAppID();settings.additionalSuffixOfDatabaseName=appId;settings.isConfigured=!1}this.settings=await this.decryptSettings(settings);setLang(this.settings.displayLanguage);await this.adjustSettings(this.settings);const shouldPersistMigratedRemoteConfigurations=!hadRemoteConfigurations&&Object.keys(null!=(_b5=this.settings.remoteConfigurations)?_b5:{}).length>0,lsKey="obsidian-live-sync-vaultanddevicename-"+this.APIService.getSystemVaultName()+this.additionalSuffixOfDatabaseName();if(""!=this.settings.deviceAndVaultName&&!this.getItem(lsKey)){this.setDeviceAndVaultName(this.settings.deviceAndVaultName);this.saveDeviceAndVaultName();this.settings.deviceAndVaultName=""}if(isCloudantURI(this.settings.couchDB_URI)&&0!=this.settings.customChunkSize){this._log("Configuration issues detected and automatically resolved. However, unsynchronized data may exist. Consider rebuilding if necessary.",LOG_LEVEL_NOTICE);this.settings.customChunkSize=0}this.setDeviceAndVaultName(this.getItem(lsKey)||"");if(""==this.getDeviceAndVaultName()&&this.settings.usePluginSync){this._log("Device name missing. Disabling plug-in sync.",LOG_LEVEL_NOTICE);this.settings.usePluginSync=!1}shouldPersistMigratedRemoteConfigurations&&await this.saveSettingData();const dispatch=this.settings;this.onSettingLoaded(dispatch);this.onSettingChanged(dispatch)}tryDecodeJson(encoded){try{return!!encoded&&JSON.parse(encoded)}catch(e3){return!1}}};ObsidianSettingService=class extends SettingService{constructor(context2,dependencies){super(context2,dependencies);this.onSettingSaved.addHandler(settings=>{eventHub.emitEvent(EVENT_SETTING_SAVED,settings);return Promise.resolve(!0)});this.onSettingLoaded.addHandler(settings=>{eventHub.emitEvent("reload-setting-tab");return Promise.resolve(!0)})}setItem(key3,value){return localStorage.setItem(key3,value)}getItem(key3){var _a8;return null!=(_a8=localStorage.getItem(key3))?_a8:""}deleteItem(key3){localStorage.removeItem(key3)}async saveData(data){return await this.context.liveSyncPlugin.saveData(data)}async loadData(){return await this.context.liveSyncPlugin.loadData()}};DatabaseService=class extends ServiceBase{constructor(context2,dependencies){super(context2);this._log=createInstanceLogFunction("InjectableDatabaseService");this._localDatabase=null;this.onOpenDatabase=handlers2().bailFirstFailure("onOpenDatabase");this.onDatabaseReset=handlers2().bailFirstFailure("onDatabaseReset");this.services=dependencies}get localDatabase(){if(!this._localDatabase)throw new Error("Local database is not ready yet.");return this._localDatabase}get localDatabaseDirect(){return this._localDatabase}modifyDatabaseOptions(settings,name,options){const optionPass={...options};if(settings.useIndexedDBAdapter){optionPass.adapter="indexeddb";optionPass.purged_infos_limit=1;return{name:name+ExtraSuffixIndexedDB,options:optionPass}}return{name,options:optionPass}}createPouchDBInstance(name,options){const settings=this.services.setting.currentSettings(),optionPass=this.modifyDatabaseOptions(settings,null!=name?name:"",null!=options?options:{});return new index_es_default(optionPass.name,optionPass.options)}async openDatabase(params){null!=this._localDatabase&&await this._localDatabase.close();const vaultName=this.services.vault.getVaultName();this._log($msg("moduleLocalDatabase.logWaitingForReady"));const env={services:{...this.services,...params,database:this}};this._localDatabase=new LiveSyncLocalDB(vaultName,env);await this.onOpenDatabase(vaultName);return await this.localDatabase.initializeDatabase()}isDatabaseReady(){return null!=this._localDatabase&&this._localDatabase.isReady}async resetDatabase(){return this._localDatabase?await this._localDatabase.resetDatabase():Promise.resolve(!0)}};ObsidianDatabaseService=class extends DatabaseService{__onOpenDatabase(vaultName){initializeStores(vaultName);return Promise.resolve(!0)}constructor(context2,dependencies){super(context2,dependencies);this.onOpenDatabase.addHandler(this.__onOpenDatabase.bind(this))}};ObsHttpHandler=class extends FetchHttpHandler{constructor(options,reverseProxyNoSignUrl){super(options);this.requestTimeoutInMs=void 0===options?void 0:options.requestTimeout;this.reverseProxyNoSignUrl=reverseProxyNoSignUrl}async handle(request2,{abortSignal}={}){if(null==abortSignal?void 0:abortSignal.aborted){const abortError=new Error("Request aborted");abortError.name="AbortError";return Promise.reject(abortError)}let path2=request2.path;if(request2.query){const queryString=buildQueryString(request2.query);queryString&&(path2+=`?${queryString}`)}const{port,method}=request2;let url=`${request2.protocol}//${request2.hostname}${port?`:${port}`:""}${path2}`;if(void 0!==this.reverseProxyNoSignUrl&&""!==this.reverseProxyNoSignUrl){const urlObj=new URL(url);urlObj.host=this.reverseProxyNoSignUrl;url=urlObj.href}const body="GET"===method||"HEAD"===method?void 0:request2.body,transformedHeaders={};for(const key3 of Object.keys(request2.headers)){const keyLower=key3.toLowerCase();"host"!==keyLower&&"content-length"!==keyLower&&(transformedHeaders[keyLower]=request2.headers[key3])}let contentType;void 0!==transformedHeaders["content-type"]&&(contentType=transformedHeaders["content-type"]);let transformedBody=body;ArrayBuffer.isView(body)&&(transformedBody=new Uint8Array(body.buffer).buffer);const param={body:transformedBody,headers:transformedHeaders,method,url,contentType},raceOfPromises=[(0,import_obsidian.requestUrl)(param).then(rsp=>{const headers=rsp.headers,headersLower={};for(const key3 of Object.keys(headers))headersLower[key3.toLowerCase()]=headers[key3];const stream=new ReadableStream({start(controller){controller.enqueue(new Uint8Array(rsp.arrayBuffer));controller.close()}});return{response:new HttpResponse({headers:headersLower,statusCode:rsp.status,body:stream})}}),requestTimeout(this.requestTimeoutInMs)];abortSignal&&raceOfPromises.push(new Promise((resolve,reject)=>{abortSignal.onabort=()=>{const abortError=new Error("Request aborted");abortError.name="AbortError";reject(abortError)}}));return Promise.race(raceOfPromises)}};ObsidianConfirm=class{get _app(){return this._context.app}get _plugin(){return this._context.plugin}constructor(context2){this._context=context2}askYesNo(message){return askYesNo(this._app,message)}askString(title,key3,placeholder,isPassword=!1){return askString(this._app,title,key3,placeholder,isPassword)}async askYesNoDialog(message,opt={title:"Confirmation"}){const defaultTitle=$msg("moduleInputUIObsidian.defaultTitleConfirmation"),yesLabel=$msg("moduleInputUIObsidian.optionYes"),noLabel=$msg("moduleInputUIObsidian.optionNo"),defaultOption="Yes"===opt.defaultOption?yesLabel:noLabel;return await confirmWithMessageWithWideButton(this._plugin,opt.title||defaultTitle,message,[yesLabel,noLabel],defaultOption,opt.timeout)===yesLabel?"yes":"no"}askSelectString(message,items){return askSelectString(this._app,message,items)}askSelectStringDialogue(message,buttons,opt){const defaultTitle=$msg("moduleInputUIObsidian.defaultTitleSelect");return confirmWithMessageWithWideButton(this._plugin,opt.title||defaultTitle,message,buttons,opt.defaultAction,opt.timeout)}askInPopup(key3,dialogText,anchorCallback){const fragment=createFragment(doc=>{const[beforeText,afterText]=dialogText.split("{HERE}",2);doc.createEl("span",void 0,a2=>{a2.appendText(beforeText);a2.appendChild(a2.createEl("a",void 0,anchor=>{anchorCallback(anchor)}));a2.appendText(afterText)})}),popupKey="popup-"+key3;scheduleTask(popupKey,1e3,async()=>{var _a8;const popup=await memoIfNotExist(popupKey,()=>new import_obsidian.Notice(fragment,0));(null==(_a8=null==popup?void 0:popup.noticeEl)?void 0:_a8.isShown())||memoObject(popupKey,new import_obsidian.Notice(fragment,0));scheduleTask(popupKey+"-close",2e4,()=>{var _a9;const popup2=retrieveMemoObject(popupKey);if(popup2){(null==(_a9=null==popup2?void 0:popup2.noticeEl)?void 0:_a9.isShown())&&popup2.hide();disposeMemoObject(popupKey)}})})}confirmWithMessage(title,contentMd,buttons,defaultAction,timeout){return confirmWithMessage(this._plugin,title,contentMd,buttons,defaultAction,timeout)}};import_obsidian3=require("obsidian");ObsidianAPIService=class extends InjectableAPIService{constructor(context2){super(context2);this._confirmInstance=new ObsidianConfirm(context2)}getCustomFetchHandler(){this._customHandler||(this._customHandler=new ObsHttpHandler(void 0,void 0));return this._customHandler}async showWindow(viewType){const leaves=this.app.workspace.getLeavesOfType(viewType);0==leaves.length?await this.app.workspace.getLeaf(!0).setViewState({type:viewType,active:!0}):await leaves[0].setViewState({type:viewType,active:!0});leaves.length>0&&await this.app.workspace.revealLeaf(leaves[0])}get app(){return this.context.app}getPlatform(){return import_obsidian3.Platform.isAndroidApp?"android-app":import_obsidian3.Platform.isIosApp?"ios":import_obsidian3.Platform.isMacOS?"macos":import_obsidian3.Platform.isMobileApp?"mobile-app":import_obsidian3.Platform.isMobile?"mobile":import_obsidian3.Platform.isSafari?"safari":import_obsidian3.Platform.isDesktop?"desktop":import_obsidian3.Platform.isDesktopApp?"desktop-app":"unknown-obsidian"}isMobile(){return this.app.isMobile}getAppID(){return`${"appId"in this.app?this.app.appId:""}`}getSystemVaultName(){return this.app.vault.getName()}getAppVersion(){var _a8,_b5;const match3=(null!=(_b5=null==(_a8=globalThis.navigator)?void 0:_a8.userAgent)?_b5:"").match(/obsidian\/([0-9]+\.[0-9]+\.[0-9]+)/);return match3&&match3.length>=2?match3[1]:"0.0.0"}getPluginVersion(){return this.context.plugin.manifest.version}get confirm(){return this._confirmInstance}addCommand(command){return this.context.plugin.addCommand(command)}registerWindow(type,factory){return this.context.plugin.registerView(type,factory)}addRibbonIcon(icon,title,callback){return this.context.plugin.addRibbonIcon(icon,title,callback)}registerProtocolHandler(action2,handler){return this.context.plugin.registerObsidianProtocolHandler(action2,handler)}async nativeFetch(req,opts){var _a8,_b5;const url="string"==typeof req?req:req.url;let body;const method="string"==typeof(null==opts?void 0:opts.method)?opts.method:req instanceof Request&&"string"==typeof req.method?req.method:"GET";"string"!=typeof req?(null==opts?void 0:opts.body)?body="string"==typeof opts.body?opts.body:await new Response(opts.body).arrayBuffer():req.body&&(body=await new Response(req.body).arrayBuffer()):body=null==opts?void 0:opts.body;const reqHeaders=new Headers(req instanceof Request?req.headers:{}),optHeaders={};reqHeaders.forEach((value,key3)=>{optHeaders[key3]=value});if(opts&&"headers"in opts)if(opts.headers instanceof Headers)opts.headers.forEach((value,key3)=>{optHeaders[key3]=value});else for(const[key3,value]of Object.entries(opts.headers))optHeaders[key3]=value;const transformedHeaders={...optHeaders};delete transformedHeaders.host;delete transformedHeaders.Host;delete transformedHeaders["content-length"];delete transformedHeaders["Content-Length"];const requestParam={url,method,body,headers:transformedHeaders,contentType:null!=(_b5=null!=(_a8=transformedHeaders["content-type"])?_a8:transformedHeaders["Content-Type"])?_b5:"application/json"},r4=await(0,import_obsidian.requestUrl)({...requestParam,throw:!1});return new Response(r4.arrayBuffer,{headers:r4.headers,status:r4.status,statusText:`${r4.status}`})}addStatusBarItem(){return this.context.plugin.addStatusBarItem()}setInterval(handler,timeout){const timerId=globalThis.setInterval(handler,timeout);this.context.plugin.registerInterval(timerId);return timerId}getSystemConfigDir(){return this.app.vault.configDir}};ObsidianAppLifecycleService=class extends AppLifecycleServiceBase{performRestart(){this.context.plugin.app.commands.executeCommandById("app:reload")}};ObsidianPathService=class extends PathService{markChangesAreSame(old,newMtime,oldMtime){return markChangesAreSame(old,newMtime,oldMtime)}unmarkChanges(file){return unmarkChanges(file)}compareFileFreshness(baseFile,checkTarget){return compareFileFreshness(baseFile,checkTarget)}isMarkedAsSameChanges(file,mtimes){return isMarkedAsSameChanges(file,mtimes)}normalizePath(path2){return normalizePath(path2)}};ObsidianVaultService=class extends InjectableVaultService{vaultName(){return this.context.app.vault.getName()}getActiveFilePath(){const file=this.context.app.workspace.getActiveFile();if(file)return getPathFromTFile(file)}isStorageInsensitive(){var _a8;return null==(_a8=this.context.app.vault.adapter.insensitive)||_a8}shouldCheckCaseInsensitively(){return!this.isStorageInsensitive()&&super.shouldCheckCaseInsensitively()}isValidPath(path2){return isValidPath(path2)}};UIService=class extends ServiceBase{constructor(context2,dependents){super(context2);this._dialogManager=dependents.dialogManager;this._APIService=dependents.APIService}get dialogManager(){return this._dialogManager}async promptCopyToClipboard(title,value){const param={title,dataToCopy:value};return"ok"===await this._dialogManager.open(this.dialogToCopy,param)}showMarkdownDialog(title,contentMD,buttons,defaultAction){return this._APIService.confirm.askSelectStringDialogue(contentMD,buttons,{title,defaultAction:null!=defaultAction?defaultAction:buttons[0],timeout:0})}get confirm(){return this._APIService.confirm}};root34=from_html('
    ');$$css14={hash:"svelte-3n2ufb",code:'.dialog-host.svelte-3n2ufb {padding:20px;gap:0.5em;display:flex;flex-direction:column;padding-bottom:var(--keyboard-height, 0px);}.dialog-host.svelte-3n2ufb button {margin-left:10px;}.dialog-host.svelte-3n2ufb .button-group {display:flex;flex-direction:column;gap:10px;margin-top:20px;}.dialog-host.svelte-3n2ufb .row {display:flex;flex-direction:row;justify-items:center;align-items:center;flex-wrap:wrap;}.dialog-host.svelte-3n2ufb .row > input[type="text"],\n .dialog-host.svelte-3n2ufb .row > input[type="password"],\n .dialog-host.svelte-3n2ufb .row > textarea,\n .dialog-host.svelte-3n2ufb .row > select {flex:1;margin-left:10px;min-width:10em;}.dialog-host.svelte-3n2ufb .row > input[type="password"] {-webkit-text-security:disc;}.dialog-host.svelte-3n2ufb .row > input[type="checkbox"] {margin-left:10px;margin-right:10px;}.dialog-host.svelte-3n2ufb label > span {display:block;width:8em;}.dialog-host.svelte-3n2ufb .note,\n .dialog-host.svelte-3n2ufb .note-important,\n .dialog-host.svelte-3n2ufb .note-error {padding:10px;margin-top:4px;margin-bottom:0.5lh;border-left:4px solid;}.dialog-host.svelte-3n2ufb .note {background-color:var(--interactive-hover);border-left-color:var(--interactive-accent);}.dialog-host.svelte-3n2ufb .note-important {background-color:var(--interactive-hover);border-left-color:var(--text-warning);}.dialog-host.svelte-3n2ufb .note-error {background-color:var(--interactive-hover);border-left-color:var(--text-error);}.dialog-host.svelte-3n2ufb hr {margin:0.7lh 0;}.dialog-host.svelte-3n2ufb details {gap:0.5em;padding-left:0.5em;border-left:2px solid var(--interactive-accent);}.dialog-host.svelte-3n2ufb summary::marker {display:none;content:"";}.dialog-host.svelte-3n2ufb summary {border-left:4px solid var(--interactive-accent);padding-left:0.5em;cursor:pointer;outline:none;}.dialog-host.svelte-3n2ufb details > summary::after {content:"⏷";float:right;margin-right:0.5em;}.dialog-host.svelte-3n2ufb details[open] > summary::after {content:"⏶";float:right;margin-right:0.5em;}.dialog-host.svelte-3n2ufb input:invalid,\n .dialog-host.svelte-3n2ufb textarea:invalid {border-color:var(--background-modifier-error);}.dialog-host.svelte-3n2ufb .sub-section {margin-left:1em;display:flex;flex-direction:column;gap:0.5em;}.dialog-host.svelte-3n2ufb .row > input[type="text"]:disabled,\n .dialog-host.svelte-3n2ufb .row > input[type="password"]:disabled,\n .dialog-host.svelte-3n2ufb .row > textarea:disabled,\n .dialog-host.svelte-3n2ufb .row > select:disabled {background-color:var(--background-secondary);}'};SvelteDialogBase=function SvelteDialogMixIn(TBase,d4){return class SvelteDialog extends TBase{constructor(...args){super(...args);this.title="Self-hosted LiveSync - Setup Wizard"}get context(){return this._context}initDialog(context2,dependents,component2,initialData){this._context=context2;this.dependents=dependents;this.component=component2;this.initialData=initialData}resolveResult(){var _a8;null==(_a8=this.resultPromiseWithResolvers)||_a8.resolve(this.result);this.resultPromiseWithResolvers=void 0}onOpen(){const{contentEl}=this;contentEl.empty();const dialog=this;this.resultPromiseWithResolvers&&this.resultPromiseWithResolvers.reject("Dialog opened again");const pr=promiseWithResolvers();eventHub.once("plugin-unloaded",()=>{if(this.resultPromiseWithResolvers===pr){pr.reject("Plugin unloaded");this.close()}});this.resultPromiseWithResolvers=pr;this.mountedComponent=mount(d4,{target:contentEl,props:{onSetupContext:props=>{setupDialogContext({...props,context:this.context,services:this.dependents})},setTitle:title=>{dialog.setTitle(title)},closeDialog:()=>{dialog.close()},setResult:result=>{this.result=result},getInitialData:()=>this.initialData,mountComponent:this.component}})}waitForClose(){if(!this.resultPromiseWithResolvers)throw new Error("Dialog not opened yet");return this.resultPromiseWithResolvers.promise}onClose(){this.resolveResult();fireAndForget(async()=>{this.mountedComponent&&await unmount(this.mountedComponent)})}}}(import_obsidian.Modal,function DialogHost($$anchor,$$props){var div;push($$props,!0);append_styles($$anchor,$$css14);const contextProps={setTitle:$$props.setTitle,closeDialog:$$props.closeDialog,setResult:$$props.setResult,getInitialData:$$props.getInitialData};null===$$props.onSetupContext||void 0===$$props.onSetupContext||$$props.onSetupContext(contextProps);let thisElement;(0,$$props.mountComponent)(child(div=root34()),{setResult:result=>{$$props.setResult(result);$$props.closeDialog()},get getInitialData(){return $$props.getInitialData}});reset(div);bind_this(div,$$value=>thisElement=$$value,()=>thisElement);append($$anchor,div);pop()});SvelteDialogObsidian=class extends SvelteDialogBase{constructor(context2,dependents,component2,initialData){super(context2.app);this.initDialog(context2,dependents,component2,initialData)}};ObsidianSvelteDialogManager=class extends SvelteDialogManagerBase{async openSvelteDialog(component2,initialData){const dialog=new SvelteDialogObsidian(this.context,this.dependents,component2,initialData);dialog.open();return await dialog.waitForClose()}};on_click4=(_,copyToClipboard)=>copyToClipboard();root_218=from_html(' ',1);root35=from_html(" ",1);$$css15={hash:"svelte-u2ix67",code:"textarea.svelte-u2ix67 {resize:none;}"};delegate(["click"]);ObsidianUIService=class extends UIService{get dialogToCopy(){return DialogueToCopy}constructor(context2,dependents){const obsidianConfirm=dependents.APIService.confirm,obsidianSvelteDialogManager=new ObsidianSvelteDialogManager(context2,{appLifecycle:dependents.appLifecycle,config:dependents.config,replicator:dependents.replicator,confirm:obsidianConfirm,control:dependents.control});super(context2,{appLifecycle:dependents.appLifecycle,dialogManager:obsidianSvelteDialogManager,APIService:dependents.APIService})}};ObsidianServiceHub=class extends InjectableServiceHub{constructor(plugin3){const context2=new ObsidianServiceContext(plugin3.app,plugin3,plugin3),API=new ObsidianAPIService(context2),conflict=new ObsidianConflictService(context2),fileProcessing=new ObsidianFileProcessingService(context2),tweakValue=new ObsidianTweakValueService(context2),setting=new ObsidianSettingService(context2,{APIService:API}),appLifecycle=new ObsidianAppLifecycleService(context2,{settingService:setting}),remote=new ObsidianRemoteService(context2,{APIService:API,appLifecycle,setting}),vault=new ObsidianVaultService(context2,{settingService:setting,APIService:API}),test=new ObsidianTestService(context2),databaseEvents=new ObsidianDatabaseEventService(context2),path2=new ObsidianPathService(context2,{settingService:setting}),database=new ObsidianDatabaseService(context2,{path:path2,vault,setting,API}),keyValueDB=new ObsidianKeyValueDBService(context2,{appLifecycle,databaseEvents,vault}),config=new ObsidianConfigService(context2,{settingService:setting,APIService:API}),replicator=new ObsidianReplicatorService(context2,{settingService:setting,appLifecycleService:appLifecycle,databaseEventService:databaseEvents}),replication2=new ObsidianReplicationService(context2,{APIService:API,appLifecycleService:appLifecycle,replicatorService:replicator,settingService:setting,fileProcessingService:fileProcessing,databaseService:database}),control=new ObsidianControlService(context2,{appLifecycleService:appLifecycle,databaseService:database,fileProcessingService:fileProcessing,settingService:setting,APIService:API,replicatorService:replicator});super(context2,{appLifecycle,conflict,database,databaseEvents,fileProcessing,replication:replication2,replicator,remote,setting,tweakValue,vault,test,ui:new ObsidianUIService(context2,{appLifecycle,config,replicator,APIService:API,control}),path:path2,API,config,keyValueDB,control})}};ServiceModuleBase=class{get name(){return this.constructor.name}constructor(services){this._log=createInstanceLogFunction(this.name,services.API)}};ServiceRebuilder=class extends ServiceModuleBase{constructor(services){super(services);this.appLifecycle=services.appLifecycle;this.API=services.API;this.UI=services.UI;this.setting=services.setting;this.remote=services.remote;this.databaseEvents=services.databaseEvents;this.storageAccess=services.storageAccess;this.replicator=services.replicator;this.vault=services.vault;this.replication=services.replication;this.database=services.database;this.fileHandler=services.fileHandler;this.control=services.control;services.database.onDatabaseReset.addHandler(this._onResetLocalDatabase.bind(this));services.setting.suspendAllSync.addHandler(this._allSuspendAllSync.bind(this))}async $performRebuildDB(method){"localOnly"==method&&await this.$fetchLocal();"localOnlyWithChunks"==method&&await this.$fetchLocal(!0);"remoteOnly"==method&&await this.$rebuildRemote();"rebuildBothByThisDevice"==method&&await this.$rebuildEverything()}async informOptionalFeatures(){await this.UI.showMarkdownDialog("All optional features are disabled","Customisation Sync and Hidden File Sync will all be disabled.\nPlease enable them from the settings screen after setup is complete.",["OK"])}async askUsingOptionalFeature(opt){"yes"==await this.UI.confirm.askYesNoDialog("Do you want to enable extra features? If you are new to Self-hosted LiveSync, try the core feature first!",{title:"Enable extra features",defaultOption:"No",timeout:15})&&await this.setting.suggestOptionalFeatures(opt)}async rebuildRemote(){await this.setting.suspendExtraSync();await this.setting.applyPartial({isConfigured:!0,notifyThresholdOfRemoteStorageSize:DEFAULT_SETTINGS.notifyThresholdOfRemoteStorageSize});await this.control.applySettings();await this.replication.markLocked();await this._tryResetRemoteDatabase();await this.replication.markLocked();await delay(500);await delay(1e3);await this.replication.replicateAllToRemote(!0);await delay(1e3);await this.replication.replicateAllToRemote(!0,!0);await this.informOptionalFeatures()}$rebuildRemote(){return this.rebuildRemote()}async rebuildEverything(){await this.setting.suspendExtraSync();await this.setting.applyPartial({isConfigured:!0,notifyThresholdOfRemoteStorageSize:DEFAULT_SETTINGS.notifyThresholdOfRemoteStorageSize});await this.control.applySettings();await this.resetLocalDatabase();await delay(1e3);await this.databaseEvents.initialiseDatabase(!0,!0,!0);await this.replication.markLocked();await this._tryResetRemoteDatabase();await this.replication.markLocked();await delay(500);await delay(1e3);await this.replication.replicateAllToRemote(!0);await delay(1e3);await this.replication.replicateAllToRemote(!0,!0);await this.informOptionalFeatures()}$rebuildEverything(){return this.rebuildEverything()}$fetchLocal(makeLocalChunkBeforeSync,preventMakeLocalFilesBeforeSync){return this.fetchLocal(makeLocalChunkBeforeSync,preventMakeLocalFilesBeforeSync)}async scheduleRebuild(){try{await this.storageAccess.writeFileAuto(FlagFilesHumanReadable_REBUILD_ALL,"")}catch(ex){this._log(`Could not create ${FlagFilesHumanReadable_REBUILD_ALL}`,LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE)}this.appLifecycle.performRestart()}async scheduleFetch(){try{await this.storageAccess.writeFileAuto(FlagFilesHumanReadable_FETCH_ALL,"")}catch(ex){this._log(`Could not create ${FlagFilesHumanReadable_FETCH_ALL}`,LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE)}this.appLifecycle.performRestart()}async _tryResetRemoteDatabase(){const currentReplicator=this.replicator.getActiveReplicator(),settings=this.setting.currentSettings();currentReplicator?await currentReplicator.tryResetRemoteDatabase(settings):this._log("No active replicator found when trying to reset remote database.",LOG_LEVEL_NOTICE)}_onResetLocalDatabase(){this.storageAccess.clearTouched();return Promise.resolve(!0)}async suspendAllSync(){await this.setting.applyPartial({liveSync:!1,periodicReplication:!1,syncOnSave:!1,syncOnEditorSave:!1,syncOnStart:!1,syncOnFileOpen:!1,syncAfterMerge:!1});await this.setting.suspendExtraSync()}async suspendReflectingDatabase(){const settings=this.setting.currentSettings();if(!settings.doNotSuspendOnFetching&&settings.remoteType!=REMOTE_MINIO){this._log("Suspending reflection: Database and storage changes will not be reflected in each other until completely finished the fetching.",LOG_LEVEL_NOTICE);await this.setting.applyPartial({suspendParseReplicationResult:!0,suspendFileWatching:!0});await this.setting.saveSettingData()}}async resumeReflectingDatabase(){const settings=this.setting.currentSettings();if(!settings.doNotSuspendOnFetching&&settings.remoteType!=REMOTE_MINIO){this._log("Database and storage reflection has been resumed!",LOG_LEVEL_NOTICE);await this.setting.applyPartial({suspendParseReplicationResult:!1,suspendFileWatching:!1});await this.vault.scanVault(!0);await this.replication.onBeforeReplicate(!1);await this.setting.saveSettingData()}}async fetchLocal(makeLocalChunkBeforeSync,preventMakeLocalFilesBeforeSync){await this.setting.suspendExtraSync();await this.setting.applyPartial({isConfigured:!0,notifyThresholdOfRemoteStorageSize:DEFAULT_SETTINGS.notifyThresholdOfRemoteStorageSize});const settings=this.setting.currentSettings();if(settings.maxMTimeForReflectEvents>0){const ask=`Your settings restrict file reflection times to no later than ${new Date(settings.maxMTimeForReflectEvents)}.\n\n**This is a recovery configuration.**\n\nThis operation should only be performed on an empty vault.\nAre you sure you wish to proceed?`,CANCEL="Cancel operation",CLEARANDPROCEED="Clear restriction and proceed",choices=["I understand, proceed",CLEARANDPROCEED,CANCEL],ret=await this.UI.confirm.askSelectStringDialogue(ask,choices,{title:"Confirm restricted fetch",defaultAction:CANCEL,timeout:0});if(ret==CLEARANDPROCEED){await this.setting.applyPartial({maxMTimeForReflectEvents:0});await this.setting.saveSettingData()}if(ret==CANCEL)return}await this.suspendReflectingDatabase();await this.control.applySettings();await this.resetLocalDatabase();await delay(1e3);await this.database.openDatabase({databaseEvents:this.databaseEvents,replicator:this.replicator});this.appLifecycle.markIsReady();makeLocalChunkBeforeSync?await this.fileHandler.createAllChunks(!0):preventMakeLocalFilesBeforeSync||await this.databaseEvents.initialiseDatabase(!0,!0,!0);await this.replication.markResolved();await delay(500);await this.replication.replicateAllFromRemote(!0);await delay(1e3);await this.replication.replicateAllFromRemote(!0);await this.resumeReflectingDatabase();await this.informOptionalFeatures()}async fetchLocalWithRebuild(){return await this.fetchLocal(!0)}async _allSuspendAllSync(){await this.suspendAllSync();return!0}async resetLocalDatabase(){const settings=this.setting.currentSettings();settings.isConfigured&&""==settings.additionalSuffixOfDatabaseName&&await this.database.resetDatabase();const suffix=this.API.getAppID()||"";await this.setting.applyPartial({additionalSuffixOfDatabaseName:suffix});await this.database.resetDatabase();eventHub.emitEvent(EVENT_DATABASE_REBUILT)}};ServiceDatabaseFileAccessBase=class extends ServiceModuleBase{constructor(services){super(services);this.vault=services.vault;this.storageAccess=services.storageAccess;this.database=services.database;this.path=services.path}async checkIsTargetFile(file){const path2=getStoragePathFromUXFileInfo(file);if(!await this.vault.isTargetFile(path2)){this._log(`File is not target: ${path2}`,LOG_LEVEL_VERBOSE);return!1}if(shouldBeIgnored(path2)){this._log(`File should be ignored: ${path2}`,LOG_LEVEL_VERBOSE);return!1}return!0}async delete(file,rev3){if(!await this.checkIsTargetFile(file))return!0;const fullPath=getDatabasePathFromUXFileInfo(file);try{this._log(`deleteDB By path:${fullPath}`);return await this.deleteFromDBbyPath(fullPath,rev3)}catch(ex){this._log(`Failed to delete ${fullPath}`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}}async createChunks(file,force=!1,skipCheck){return await this.__store(file,force,skipCheck,!0)}async store(file,force=!1,skipCheck){return await this.__store(file,force,skipCheck,!1)}async storeContent(path2,content){const blob=createTextBlob(content),bytes=(await blob.arrayBuffer()).byteLength,isInternal=!!path2.startsWith(".")||void 0,dummyUXFileInfo={name:path2.split("/").pop(),path:path2,stat:{size:bytes,ctime:Date.now(),mtime:Date.now(),type:"file"},body:blob,isInternal};return await this.__store(dummyUXFileInfo,!0,!1,!1)}async __store(file,force=!1,skipCheck,onlyChunks){if(!skipCheck&&!await this.checkIsTargetFile(file))return!0;if(!file){this._log("File seems bad",LOG_LEVEL_VERBOSE);return!1}const possiblyLarge=!isPlainText(file.name),content=file.body,datatype=determineTypeFromBlob(content),idPrefix=file.isInternal?ICHeader:"",fullPath=getStoragePathFromUXFileInfo(file),fullPathOnDB=getDatabasePathFromUXFileInfo(file);possiblyLarge&&this._log(`Processing: ${fullPath}`,LOG_LEVEL_VERBOSE);if(file.isInternal)if(file.deleted)file.stat={size:0,ctime:Date.now(),mtime:Date.now(),type:"file"};else if(null==file.stat){const stat=await this.storageAccess.statHidden(file.path);if(!stat){this._log(`Internal file not found: ${fullPath}`,LOG_LEVEL_VERBOSE);return!1}file.stat=stat}const d4={_id:idPrefix+await this.path.path2id(fullPath),path:fullPathOnDB,data:content,ctime:file.stat.ctime,mtime:file.stat.mtime,size:file.stat.size,children:[],datatype,type:datatype,eden:{}},msg=`STORAGE -> DB (${datatype}) `;if(await serialized("file-"+fullPath,async()=>{if(force){this._log(msg+"Force writing "+fullPath,LOG_LEVEL_VERBOSE);return!1}try{const old=await this.database.localDatabase.getDBEntry(d4.path,void 0,!1,!0,!1);if(!1!==old){const oldData={data:old.data,deleted:old._deleted||old.deleted},newData={data:d4.data,deleted:d4._deleted||d4.deleted};if(oldData.deleted!=newData.deleted)return!1;if(!await isDocContentSame(old.data,newData.data))return!1;this._log(msg+"Skipped (not changed) "+fullPath+(d4._deleted||d4.deleted?" (deleted)":""),LOG_LEVEL_VERBOSE);this.path.markChangesAreSame(old,d4.mtime,old.mtime);return!0}}catch(ex){this._log(msg+"Error, Could not check the diff for the old one."+(force?"force writing.":"")+fullPath+(d4._deleted||d4.deleted?" (deleted)":""),LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE);return!force}return!1})){this._log(msg+" Skip "+fullPath,LOG_LEVEL_VERBOSE);return!0}const ret=await this.database.localDatabase.putDBEntry(d4,onlyChunks);if(!1!==ret){this._log(msg+fullPath);eventHub.emitEvent("file-saved")}return 0!=ret}async getConflictedRevs(file){if(!await this.checkIsTargetFile(file))return[];const filename=getDatabasePathFromUXFileInfo(file),doc=await this.database.localDatabase.getDBEntryMeta(filename,{conflicts:!0},!0);return!1===doc?[]:doc._conflicts||[]}async fetch(file,rev3,waitForReady,skipCheck=!1){if(skipCheck&&!await this.checkIsTargetFile(file))return!1;const entry=await this.fetchEntry(file,rev3,waitForReady,!0);if(!1===entry)return!1;const data=createBlob(readContent(entry)),path2=stripAllPrefixes(entry.path),fileInfo={name:path2.split("/").pop(),path:path2,stat:{size:entry.size,ctime:entry.ctime,mtime:entry.mtime,type:"file"},body:data,deleted:entry.deleted||entry._deleted};isInternalMetadata(entry.path)&&(fileInfo.isInternal=!0);return fileInfo}async fetchEntryMeta(file,rev3,skipCheck=!1){const dbFileName=getDatabasePathFromUXFileInfo(file);if(skipCheck&&!await this.checkIsTargetFile(file))return!1;const doc=await this.database.localDatabase.getDBEntryMeta(dbFileName,rev3?{rev:rev3}:void 0,!0);return!1!==doc&&doc}async fetchEntryFromMeta(meta,waitForReady=!0,skipCheck=!1){if(skipCheck&&!await this.checkIsTargetFile(meta.path))return!1;const doc=await this.database.localDatabase.getDBEntryFromMeta(meta,!1,waitForReady);return!1!==doc&&doc}async fetchEntry(file,rev3,waitForReady=!0,skipCheck=!1){if(skipCheck&&!await this.checkIsTargetFile(file))return!1;const entry=await this.fetchEntryMeta(file,rev3,!0);return!1!==entry&&await this.fetchEntryFromMeta(entry,waitForReady,!0)}async deleteFromDBbyPath(fullPath,rev3){if(!await this.checkIsTargetFile(fullPath)){this._log(`deleteFromDBbyPath: File is not target: ${fullPath}`);return!0}const opt=rev3?{rev:rev3}:void 0,ret=await this.database.localDatabase.deleteDBEntry(fullPath,opt);eventHub.emitEvent("file-saved");return ret}};ServiceDatabaseFileAccess=class extends ServiceDatabaseFileAccessBase{};StorageEventManager=class{};ServiceFileAccessBase=class extends ServiceModuleBase{constructor(services){super(services);this.vault=services.vault;this.setting=services.setting;this.vaultManager=services.storageEventManager;this.vaultAccess=services.vaultAccess;services.appLifecycle.onFirstInitialise.addHandler(this._everyOnFirstInitialize.bind(this));services.fileProcessing.commitPendingFileEvents.addHandler(this._everyCommitPendingFileEvent.bind(this))}restoreState(){return this.vaultManager.restoreState()}async _everyOnFirstInitialize(){await this.vaultManager.beginWatch();return Promise.resolve(!0)}async _everyCommitPendingFileEvent(){await this.vaultManager.waitForIdle();return Promise.resolve(!0)}normalisePath(path2){return this.vaultAccess.normalisePath(path2)}async writeFileAuto(path2,data,opt){const file=await this.vaultAccess.getAbstractFileByPath(path2);if(this.vaultAccess.isFile(file))return this.vaultAccess.vaultModify(file,data,opt);if(null!==file){this._log(`Could not write file (Possibly already exists as a folder): ${path2}`,LOG_LEVEL_VERBOSE);return!1}if(!path2.endsWith(".md")){await this.vaultAccess.adapterWrite(path2,data,opt);return await this.vaultAccess.adapterExists(path2)}try{return null!==await this.vaultAccess.vaultCreate(path2,data,opt)}catch(ex){if(ex instanceof Error&&"File already exists."===ex.message){await this.vaultAccess.adapterWrite(path2,data,opt);return await this.vaultAccess.adapterExists(path2)}throw ex}}async readFileAuto(path2){const file=await this.vaultAccess.getAbstractFileByPath(path2);if(this.vaultAccess.isFile(file))return this.vaultAccess.vaultReadAuto(file);throw new Error(`Could not read file (Possibly does not exist): ${path2}`)}async readFileText(path2){const file=await this.vaultAccess.getAbstractFileByPath(path2);if(this.vaultAccess.isFile(file))return this.vaultAccess.vaultRead(file);throw new Error(`Could not read file (Possibly does not exist): ${path2}`)}async isExists(path2){return this.vaultAccess.isFile(await this.vaultAccess.getAbstractFileByPath(path2))}async writeHiddenFileAuto(path2,data,opt){try{await this.vaultAccess.adapterWrite(path2,data,opt);return!0}catch(e3){this._log(`Could not write hidden file: ${path2}`,LOG_LEVEL_VERBOSE);this._log(e3,LOG_LEVEL_VERBOSE);return!1}}async appendHiddenFile(path2,data,opt){try{await this.vaultAccess.adapterAppend(path2,data,opt);return!0}catch(e3){this._log(`Could not append hidden file: ${path2}`,LOG_LEVEL_VERBOSE);this._log(e3,LOG_LEVEL_VERBOSE);return!1}}async stat(path2){const file=await this.vaultAccess.getAbstractFileByPath(path2);if(null===file)return Promise.resolve(null);if(this.vaultAccess.isFile(file)){const fileWithStat=file;return Promise.resolve({ctime:fileWithStat.stat.ctime,mtime:fileWithStat.stat.mtime,size:fileWithStat.stat.size,type:"file"})}throw new Error(`Could not stat file (Possibly does not exist): ${path2}`)}statHidden(path2){return this.vaultAccess.tryAdapterStat(path2)}async removeHidden(path2){try{await this.vaultAccess.adapterRemove(path2);return null===this.vaultAccess.tryAdapterStat(path2)}catch(e3){this._log(`Could not remove hidden file: ${path2}`,LOG_LEVEL_VERBOSE);this._log(e3,LOG_LEVEL_VERBOSE);return!1}}async readHiddenFileAuto(path2){return await this.vaultAccess.adapterReadAuto(path2)}async readHiddenFileText(path2){return await this.vaultAccess.adapterRead(path2)}async readHiddenFileBinary(path2){return await this.vaultAccess.adapterReadBinary(path2)}async isExistsIncludeHidden(path2){return null!==await this.vaultAccess.tryAdapterStat(path2)}async ensureDir(path2){try{await this.vaultAccess.ensureDirectory(path2);return!0}catch(e3){this._log(`Could not ensure directory: ${path2}`,LOG_LEVEL_VERBOSE);this._log(e3,LOG_LEVEL_VERBOSE);return!1}}async _triggerFileEvent(event2,path2){const file=await this.vaultAccess.getAbstractFileByPath(path2);null!==file&&this.vaultAccess.trigger(event2,file)}triggerFileEvent(event2,path2){fireAndForget(async()=>await this._triggerFileEvent(event2,path2))}async triggerHiddenFile(path2){await this.vaultAccess.reconcileInternalFile(path2)}async getFileStub(path2){const file=await this.vaultAccess.getAbstractFileByPath(path2);return this.vaultAccess.isFile(file)?this.vaultAccess.nativeFileToUXFileInfoStub(file):null}async readStubContent(stub){const file=await this.vaultAccess.getAbstractFileByPath(stub.path);if(!this.vaultAccess.isFile(file)){this._log(`Could not read file (Possibly does not exist or a folder): ${stub.path}`,LOG_LEVEL_VERBOSE);return!1}const data=await this.vaultAccess.vaultReadAuto(file);return{...stub,...this.vaultAccess.nativeFileToUXFileInfoStub(file),body:createBlob(data)}}async getStub(path2){const file=await this.vaultAccess.getAbstractFileByPath(path2);return this.vaultAccess.isFile(file)?this.vaultAccess.nativeFileToUXFileInfoStub(file):this.vaultAccess.isFolder(file)?this.vaultAccess.nativeFolderToUXFolder(file):null}async getFiles(){return(await this.vaultAccess.getFiles()).map(f4=>this.vaultAccess.nativeFileToUXFileInfoStub(f4))}async getFileNames(){return(await this.vaultAccess.getFiles()).map(f4=>f4.path)}async getFilesIncludeHidden(basePath,includeFilter,excludeFilter,skipFolder=[".git",".trash","node_modules"]){var _a8;let w2;try{w2=await this.vaultAccess.adapterList(basePath)}catch(ex){this._log(`Could not traverse(getFilesIncludeHidden):${basePath}`,LOG_LEVEL_INFO);this._log(ex,LOG_LEVEL_VERBOSE);return[]}skipFolder=skipFolder.map(e3=>e3.toLowerCase());let files=[];for(const file of w2.files)includeFilter&&includeFilter.length>0&&!includeFilter.some(e3=>e3.test(file))||excludeFilter&&excludeFilter.some(ee=>ee.test(file))||await this.vault.isIgnoredByIgnoreFile(file)||files.push(file);for(const v2 of w2.folders){const folderName=(null!=(_a8=v2.split("/").pop())?_a8:"").toLowerCase();skipFolder.some(e3=>folderName===e3)||excludeFilter&&excludeFilter.some(e3=>e3.test(v2))||await this.vault.isIgnoredByIgnoreFile(v2)||(files=files.concat(await this.getFilesIncludeHidden(v2,includeFilter,excludeFilter,skipFolder)))}return files}async touched(file){const path2="string"==typeof file?file:file.path;await this.vaultAccess.touch(path2)}async recentlyTouched(file){const xFile="string"==typeof file?await this.vaultAccess.getAbstractFileByPath(file):file;return null!==xFile&&!this.vaultAccess.isFolder(xFile)&&this.vaultAccess.recentlyTouched(xFile)}clearTouched(){this.vaultAccess.clearTouched()}async delete(file,force){const xPath="string"==typeof file?file:file.path,xFile=await this.vaultAccess.getAbstractFileByPath(xPath);return null===xFile?Promise.resolve():this.vaultAccess.isFile(xFile)||this.vaultAccess.isFolder(xFile)?this.vaultAccess.delete(xFile,force):Promise.resolve()}async trash(file,system){const xPath="string"==typeof file?file:file.path,xFile=await this.vaultAccess.getAbstractFileByPath(xPath);return null===xFile?Promise.resolve():this.vaultAccess.isFile(xFile)||this.vaultAccess.isFolder(xFile)?this.vaultAccess.trash(xFile,system):Promise.resolve()}async __deleteVaultItem(file){var _a8,_b5,_c3,_d2;const filePath=this.vaultAccess.getPath(file);if(this.vaultAccess.isFile(file)&&!await this.vault.isTargetFile(filePath))return;const dir=file.parent,settings=this.setting.currentSettings();settings.trashInsteadDelete?await this.vaultAccess.trash(file,!1):await this.vaultAccess.delete(file,!0);this._log(`xxx <- STORAGE (deleted) ${filePath}`);if(dir){this._log(`files: ${null!=(_b5=null==(_a8=null==dir?void 0:dir.children)?void 0:_a8.length)?_b5:"unknown"}`);if(0===(null!=(_d2=null==(_c3=null==dir?void 0:dir.children)?void 0:_c3.length)?_d2:0)&&!settings.doNotDeleteFolder){this._log(`All files under the parent directory (${dir.path}) have been deleted, so delete this one.`);await this.__deleteVaultItem(dir)}}}async deleteVaultItem(fileSrc){const path2="string"==typeof fileSrc?fileSrc:fileSrc.path,file=await this.vaultAccess.getAbstractFileByPath(path2);if(null!==file)return this.vaultAccess.isFile(file)||this.vaultAccess.isFolder(file)?await this.__deleteVaultItem(file):void 0}};ServiceFileAccessObsidian=class extends ServiceFileAccessBase{};StorageAccessManager=class{constructor(){this.processingFiles=new Set;this.touchedFiles=[]}processWriteFile(file,proc){const path2="string"==typeof file?file:file.path;return serialized(`file-lock:${path2}`,async()=>{try{this.processingFiles.add(path2);return await proc()}finally{this.processingFiles.delete(path2)}})}processReadFile(file,proc){const path2="string"==typeof file?file:file.path;return serialized(`file-lock:${path2}`,async()=>{try{this.processingFiles.add(path2);return await proc()}finally{this.processingFiles.delete(path2)}})}isFileProcessing(file){const path2="string"==typeof file?file:file.path;return this.processingFiles.has(path2)}touch(file){const key3="stat"in file?`${file.path}-${file.stat.mtime}-${file.stat.size}`:`${file.path}-${file.mtime}-${file.size}`;this.touchedFiles.unshift(key3);this.touchedFiles=this.touchedFiles.slice(0,100)}recentlyTouched(file){const key3="stat"in file?`${file.path}-${file.stat.mtime}-${file.stat.size}`:`${file.path}-${file.mtime}-${file.size}`;return-1!=this.touchedFiles.indexOf(key3)}clearTouched(){this.touchedFiles=[]}};ServiceFileHandlerBase=class extends ServiceModuleBase{constructor(services){super(services);this.databaseFileAccess=services.databaseFileAccess;this.storageAccess=services.storageAccess;this.conflict=services.conflict;this.path=services.path;this.setting=services.setting;this.vault=services.vault;services.fileProcessing.processFileEvent.addHandler(this._anyHandlerProcessesFileEvent.bind(this),100);services.replication.processSynchroniseResult.addHandler(this._anyProcessReplicatedDoc.bind(this),100)}get db(){return this.databaseFileAccess}get storage(){return this.storageAccess}getPath(entry){return this.path.getPath(entry)}getPathWithoutPrefix(entry){return stripAllPrefixes(this.path.getPath(entry))}async readFileFromStub(file){if("body"in file&&file.body)return file;const readFile=await this.storage.readStubContent(file);if(!readFile)throw new Error(`File ${file.path} is not exist on the storage`);return readFile}async infoToStub(info3){return null==info3?null:"string"==typeof info3?await this.storage.getFileStub(info3):info3}async storeFileToDB(info3,force=!1,onlyChunks=!1){const file=await this.infoToStub(info3);if(null==file){this._log(`File ${info3} is not exist on the storage`,LOG_LEVEL_VERBOSE);return!1}if(file.isInternal){this._log(`Internal file ${file.path} is not allowed to be processed on processFileEvent`,LOG_LEVEL_VERBOSE);return!1}const entry=await this.db.fetchEntry(file,void 0,!0,!0);if(!entry||entry.deleted||entry._deleted){const readFile=await this.readFileFromStub(file);return onlyChunks?await this.db.createChunks(readFile,!1,!0):await this.db.store(readFile)}let shouldApplied=!1;if(force||onlyChunks){const readFile=await this.readFileFromStub(file);return onlyChunks?await this.db.createChunks(readFile,!0,!0):await this.db.store(readFile,!0,!0)}{this.path.compareFileFreshness(file,entry)!==EVEN&&(shouldApplied=!0);let readFile;if(!shouldApplied){readFile=await this.readFileFromStub(file);if(!readFile){this._log(`File ${file.path} is not exist on the storage`,LOG_LEVEL_NOTICE);return!1}await isDocContentSame(getDocDataAsArray(entry.data),readFile.body)?this.path.markChangesAreSame(readFile,readFile.stat.mtime,entry.mtime):shouldApplied=!0}if(!shouldApplied){this._log(`File ${file.path} is not changed`,LOG_LEVEL_VERBOSE);return!0}readFile||(readFile=await this.readFileFromStub(file));return onlyChunks?await this.db.createChunks(readFile,!1,!0):await this.db.store(readFile,!1,!0)}}async deleteFileFromDB(info3){const file=await this.infoToStub(info3);if(null==file){this._log(`File ${info3} is not exist on the storage`,LOG_LEVEL_VERBOSE);return!1}if(file.isInternal){this._log(`Internal file ${file.path} is not allowed to be processed on processFileEvent`,LOG_LEVEL_VERBOSE);return!1}const entry=await this.db.fetchEntry(file,void 0,!0,!0);if(!entry||entry.deleted||entry._deleted){this._log(`File ${file.path} is not exist or already deleted on the database`,LOG_LEVEL_VERBOSE);return!1}return(await this.db.getConflictedRevs(file)).length>0?await this.db.delete(file,entry._rev):await this.db.delete(file)}async deleteRevisionFromDB(info3,rev3){return await this.db.delete(info3,rev3)}async resolveConflictedByDeletingRevision(info3,rev3){const path2=getStoragePathFromUXFileInfo(info3);if(!await this.deleteRevisionFromDB(info3,rev3)){this._log(`Failed to delete the conflicted revision ${rev3} of ${path2}`,LOG_LEVEL_VERBOSE);return!1}if(!await this.dbToStorageWithSpecificRev(info3,rev3,!0)){this._log(`Failed to apply the resolved revision ${rev3} of ${path2} to the storage`,LOG_LEVEL_VERBOSE);return!1}}async dbToStorageWithSpecificRev(info3,rev3,force){const file=await this.infoToStub(info3);if(null==file){this._log(`File ${info3} is not exist on the storage`,LOG_LEVEL_VERBOSE);return!1}const docEntry=await this.db.fetchEntryMeta(file,rev3,!0);if(!docEntry){this._log(`File ${file.path} is not exist on the database`,LOG_LEVEL_VERBOSE);return!1}return await this.dbToStorage(docEntry,file,force)}async dbToStorage(entryInfo,info3,force){const mode=null==await this.infoToStub(info3)?"create":"modify",pathFromEntryInfo="string"==typeof entryInfo?entryInfo:this.getPath(entryInfo),docEntry=await this.db.fetchEntryMeta(pathFromEntryInfo,void 0,!0);if(!docEntry){this._log(`File ${pathFromEntryInfo} is not exist on the database`,LOG_LEVEL_VERBOSE);return!1}const path2=this.getPath(docEntry),settings=this.setting.currentSettings();if((await this.db.getConflictedRevs(path2)).length>0&&!settings.writeDocumentsIfConflicted){await this.conflict.queueCheckForIfOpen(path2);return!0}const existDoc=await this.storage.getStub(path2);if(existDoc&&existDoc.isFolder){this._log(`Folder ${path2} is already exist on the storage as a folder`,LOG_LEVEL_VERBOSE);return!0}const existOnDB=!(docEntry._deleted||docEntry.deleted),existOnStorage=null!=existDoc;if(!existOnDB&&!existOnStorage){this._log(`File ${path2} seems to be deleted, but already not on storage`,LOG_LEVEL_VERBOSE);return!0}if(!existOnDB&&existOnStorage){await this.storage.deleteVaultItem(path2);return!0}const docRead=await this.db.fetchEntryFromMeta(docEntry);if(!docRead){this._log(`File ${path2} is not exist on the database`,LOG_LEVEL_VERBOSE);return!1}if(!settings.processSizeMismatchedFiles&&0!=docRead.size&&docRead.size!==readAsBlob(docRead).size){this._log(`File ${path2} seems to be corrupted! Writing prevented. (${docRead.size} != ${readAsBlob(docRead).size})`,LOG_LEVEL_NOTICE);return!1}const docData=readContent(docRead);if(existOnStorage&&!force){let shouldApplied=!1;this.path.compareFileFreshness(existDoc,docEntry)!==EVEN&&(shouldApplied=!0);if(!shouldApplied){const readFile=await this.readFileFromStub(existDoc);if(await isDocContentSame(docData,readFile.body)){shouldApplied=!1;this.path.markChangesAreSame(docRead,docRead.mtime,existDoc.stat.mtime)}else shouldApplied=!0}if(!shouldApplied){this._log(`File ${docRead.path} is not changed`,LOG_LEVEL_VERBOSE);return!0}}else this._log(`File ${docRead.path} ${existOnStorage?"(new) ":""} ${force?" (forced)":""}`,LOG_LEVEL_VERBOSE);await this.storage.ensureDir(path2);const ret=await this.storage.writeFileAuto(path2,docData,{ctime:docRead.ctime,mtime:docRead.mtime});await this.storage.touched(path2);this.storage.triggerFileEvent(mode,path2);return ret}async _anyHandlerProcessesFileEvent(item){const eventItem=item.args,type=item.type,path2=eventItem.file.path;if(!await this.vault.isTargetFile(path2)){this._log(`File ${path2} is not the target file`,LOG_LEVEL_VERBOSE);return!1}if(shouldBeIgnored(path2)){this._log(`File ${path2} should be ignored`,LOG_LEVEL_VERBOSE);return!1}const lockKey=`processFileEvent-${path2}`;return await serialized(lockKey,async()=>{switch(type){case"CREATE":case"CHANGED":return await this.storeFileToDB(item.args.file);case"DELETE":return await this.deleteFileFromDB(item.args.file);case"INTERNAL":return!1;default:this._log(`Unsupported event type: ${type}`,LOG_LEVEL_VERBOSE);return!1}})}async _anyProcessReplicatedDoc(entry){return await serialized(entry.path,async()=>{var _a8,_b5;if(!await this.vault.isTargetFile(entry.path)){this._log(`File ${entry.path} is not the target file`,LOG_LEVEL_VERBOSE);return!1}if(this.vault.isFileSizeTooLarge(entry.size)){this._log(`File ${entry.path} is too large (on database) to be processed`,LOG_LEVEL_VERBOSE);return!1}if(shouldBeIgnored(entry.path)){this._log(`File ${entry.path} should be ignored`,LOG_LEVEL_VERBOSE);return!1}const path2=this.getPath(entry),targetFile=await this.storage.getStub(this.getPathWithoutPrefix(entry));if(targetFile&&targetFile.isFolder){this._log(`${path2} is already exist as the folder`);return!0}{if(targetFile&&this.vault.isFileSizeTooLarge(targetFile.stat.size)){this._log(`File ${targetFile.path} is too large (on storage) to be processed`,LOG_LEVEL_VERBOSE);return!1}this._log(`Processing ${path2} (${entry._id.substring(0,8)} :${null==(_a8=entry._rev)?void 0:_a8.substring(0,5)}) : Started...`,LOG_LEVEL_VERBOSE);eventHub.emitEvent("conflict-cancelled",path2);const ret=await this.dbToStorage(entry,targetFile);this._log(`Processing ${path2} (${entry._id.substring(0,8)} :${null==(_b5=entry._rev)?void 0:_b5.substring(0,5)}) : Done`);return ret}})}async createAllChunks(showingNotice){this._log("Collecting local files on the storage",LOG_LEVEL_VERBOSE);const semaphore=Semaphore(10);let processed=0;const filesStorageSrc=await this.storage.getFiles(),incProcessed=()=>{processed++;processed%25==0&&this._log(`Creating missing chunks: ${processed} of ${total} files`,showingNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"chunkCreation")},total=filesStorageSrc.length,procAllChunks=filesStorageSrc.map(async file=>{if(!await this.vault.isTargetFile(file)){incProcessed();return!0}if(this.vault.isFileSizeTooLarge(file.stat.size)){incProcessed();return!0}if(shouldBeIgnored(file.path)){incProcessed();return!0}const release=await semaphore.acquire();incProcessed();try{await this.storeFileToDB(file,!1,!0)}catch(ex){this._log(ex,LOG_LEVEL_VERBOSE)}finally{release()}});await Promise.all(procAllChunks);this._log(`Creating chunks Done: ${processed} of ${total} files`,showingNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"chunkCreation")}};ServiceFileHandler=class extends ServiceFileHandlerBase{};FileAccessBase=class{constructor(adapter,dependencies){this.adapter=adapter;this.storageAccessManager=dependencies.storageAccessManager;this.vaultService=dependencies.vaultService;this.settingService=dependencies.settingService;this.APIService=dependencies.APIService;this.path=dependencies.pathService;this._log=createInstanceLogFunction("FileAccess",this.APIService)}isFile(file){return this.adapter.typeGuard.isFile(file)}isFolder(item){return this.adapter.typeGuard.isFolder(item)}getPath(file){return this.adapter.path.getPath(file)}nativeFileToUXFileInfoStub(file){return this.adapter.conversion.nativeFileToUXFileInfoStub(file)}nativeFolderToUXFolder(file){return this.adapter.conversion.nativeFolderToUXFolder(file)}normalisePath(path2){return this.adapter.path.normalisePath(path2)}_writeOp(file,callback){const path2=this.getPath(file);return this.storageAccessManager.processWriteFile(path2,async()=>await callback(path2,file))}_readOp(file,callback){const path2=this.getPath(file);return this.storageAccessManager.processReadFile(path2,async()=>await callback(path2,file))}async tryAdapterStat(file){return await this._readOp(file,async path2=>await this.adapter.storage.trystat(path2))}async adapterStat(file){return await this._readOp(file,async path2=>await this.adapter.storage.stat(path2))}async adapterExists(file){return await this._readOp(file,async path2=>await this.adapter.storage.exists(path2))}async adapterRemove(file){return await this._writeOp(file,async path2=>await this.adapter.storage.remove(path2))}async adapterRead(file){return await this._readOp(file,async path2=>await this.adapter.storage.read(path2))}async adapterReadBinary(file){return await this._readOp(file,async path2=>await this.adapter.storage.readBinary(path2))}async adapterReadAuto(file){return isPlainText(this.getPath(file))?await this._readOp(file,async path3=>await this.adapter.storage.read(path3)):await this._readOp(file,async path3=>await this.adapter.storage.readBinary(path3))}async adapterWrite(file,data,options){return"string"==typeof data?await this._writeOp(file,async path2=>await this.adapter.storage.write(path2,data,options)):await this._writeOp(file,async path2=>await this.adapter.storage.writeBinary(path2,toArrayBuffer(data),options))}adapterList(basePath){return this.adapter.storage.list(basePath)}async vaultCacheRead(file){return await this._readOp(file,async path2=>await this.adapter.vault.cachedRead(file))}vaultRead(file){return this._readOp(file,async path2=>await this.adapter.vault.read(file))}vaultReadBinary(file){return this._readOp(file,async path2=>await this.adapter.vault.readBinary(file))}async vaultReadAuto(file){const path2=this.getPath(file);return isPlainText(path2)?await this._readOp(path2,async path3=>await this.adapter.vault.read(file)):await this._readOp(path2,async path3=>await this.adapter.vault.readBinary(file))}async vaultModify(file,data,options){return"string"==typeof data?await this._writeOp(file,async path2=>{const oldData=await this.adapter.vault.read(file);if(data===oldData){const stat=await this.adapter.statFromNative(file);options&&options.mtime&&this.path.markChangesAreSame(path2,stat.mtime,options.mtime);return!0}await this.adapter.vault.modify(file,data,options);return!0}):await this._writeOp(file,async path2=>{const oldData=await this.adapter.vault.readBinary(file);if(await isDocContentSame(createBinaryBlob(oldData),createBinaryBlob(data))){const stat=await this.adapter.statFromNative(file);options&&options.mtime&&this.path.markChangesAreSame(path2,stat.mtime,options.mtime);return!0}await this.adapter.vault.modifyBinary(file,toArrayBuffer(data),options);return!0})}async vaultCreate(path2,data,options){return"string"==typeof data?await this._writeOp(path2,()=>this.adapter.vault.create(path2,data,options)):await this._writeOp(path2,()=>this.adapter.vault.createBinary(path2,toArrayBuffer(data),options))}trigger(name,...data){return this.adapter.vault.trigger(name,...data)}async reconcileInternalFile(path2){return await this.adapter.reconcileInternalFile(path2)}async adapterAppend(normalizedPath,data,options){return await this.adapter.storage.append(normalizedPath,data,options)}async delete(file,force){return await this._writeOp(file,async(path2,file2)=>await this.adapter.vault.delete(file2,force))}async trash(file,force){return await this._writeOp(file,async(path2,file2)=>await this.adapter.vault.trash(file2,force))}isStorageInsensitive(){return this.vaultService.isStorageInsensitive()}async getAbstractFileByPath(path2){return!this.settingService.currentSettings().handleFilenameCaseSensitive||this.isStorageInsensitive()?await this.adapter.getAbstractFileByPathInsensitive(path2):await this.adapter.getAbstractFileByPath(path2)}async getFiles(){return await this.adapter.getFiles()}async ensureDirectory(fullPath){const pathElements=fullPath.split("/");pathElements.pop();let c3="";for(const v2 of pathElements){c3+=v2;try{await this.adapter.storage.mkdir(c3)}catch(ex){if("Folder already exists."==(null==ex?void 0:ex.message));else{this._log("Folder Create Error");this._log(ex)}}c3+="/"}}async touch(file){const path2=this.getPath(file),statOrg=this.isFile(file)?file.stat:await this.adapter.storage.stat(path2);return this.storageAccessManager.touch({path:path2,stat:statOrg||{ctime:0,mtime:0,size:0}})}recentlyTouched(file){const path2=file.path;return this.storageAccessManager.recentlyTouched({...file,path:path2})}clearTouched(){return this.storageAccessManager.clearTouched()}};ObsidianConversionAdapter=class{nativeFileToUXFileInfoStub(file){return TFileToUXFileInfoStub(file)}nativeFolderToUXFolder(folder){return TFolderToUXFileInfoStub(folder)}};ObsidianPathAdapter=class{getPath(file){return"string"==typeof file?file:file.path}normalisePath(path2){return normalizePath(path2)}};ObsidianStorageAdapter=class{constructor(app){this.app=app}async exists(path2){return await this.app.vault.adapter.exists(path2)}async trystat(path2){return await this.app.vault.adapter.exists(path2)?await this.app.vault.adapter.stat(path2):null}async stat(path2){return await this.app.vault.adapter.stat(path2)}async mkdir(path2){await this.app.vault.adapter.mkdir(path2)}async remove(path2){await this.app.vault.adapter.remove(path2)}async read(path2){return await this.app.vault.adapter.read(path2)}async readBinary(path2){return await this.app.vault.adapter.readBinary(path2)}async write(path2,data,options){return await this.app.vault.adapter.write(path2,data,options)}async writeBinary(path2,data,options){return await this.app.vault.adapter.writeBinary(path2,toArrayBuffer(data),options)}async append(path2,data,options){return await this.app.vault.adapter.append(path2,data,options)}list(basePath){return Promise.resolve(this.app.vault.adapter.list(basePath))}};import_obsidian4=require("obsidian");ObsidianTypeGuardAdapter=class{isFile(file){return file instanceof import_obsidian4.TFile}isFolder(item){return item instanceof import_obsidian4.TFolder}};ObsidianVaultAdapter=class{constructor(app){this.app=app}async read(file){return await this.app.vault.read(file)}async cachedRead(file){return await this.app.vault.cachedRead(file)}async readBinary(file){return await this.app.vault.readBinary(file)}async modify(file,data,options){return await this.app.vault.modify(file,data,options)}async modifyBinary(file,data,options){return await this.app.vault.modifyBinary(file,toArrayBuffer(data),options)}async create(path2,data,options){return await this.app.vault.create(path2,data,options)}async createBinary(path2,data,options){return await this.app.vault.createBinary(path2,toArrayBuffer(data),options)}async delete(file,force=!1){return await this.app.vault.delete(file,force)}async trash(file,force=!1){return await this.app.vault.trash(file,force)}trigger(name,...data){return this.app.vault.trigger(name,...data)}};ObsidianFileSystemAdapter=class{constructor(app){this.app=app;this.path=new ObsidianPathAdapter;this.typeGuard=new ObsidianTypeGuardAdapter;this.conversion=new ObsidianConversionAdapter;this.storage=new ObsidianStorageAdapter(app);this.vault=new ObsidianVaultAdapter(app)}getAbstractFileByPath(path2){return Promise.resolve(this.app.vault.getAbstractFileByPath(path2))}getAbstractFileByPathInsensitive(path2){return Promise.resolve(this.app.vault.getAbstractFileByPathInsensitive(path2))}getFiles(){return Promise.resolve(this.app.vault.getFiles())}statFromNative(file){return Promise.resolve({...file.stat,type:"file"})}async reconcileInternalFile(path2){var _a8,_b5;return await Promise.resolve(null==(_b5=(_a8=this.app.vault.adapter).reconcileInternalFile)?void 0:_b5.call(_a8,path2))}};FileAccessObsidian=class extends FileAccessBase{constructor(app,dependencies){super(new ObsidianFileSystemAdapter(app),dependencies)}};StorageEventManagerBase=class extends StorageEventManager{constructor(adapter,dependencies){super();this.snapShotRestored=null;this.bufferedQueuedItems=[];this.triggerTakeSnapshot=throttle(()=>this._triggerTakeSnapshot(),100);this.concurrentProcessing=Semaphore(5);this._waitingMap=new Map;this._waitForIdle=null;this.processingCount=0;this.adapter=adapter;this.setting=dependencies.setting;this.vaultService=dependencies.vaultService;this.fileProcessing=dependencies.fileProcessing;this.storageAccess=dependencies.storageAccessManager;this._log=createInstanceLogFunction("StorageEventManager",dependencies.APIService)}get shouldBatchSave(){var _a8,_b5;return(null==(_a8=this.settings)?void 0:_a8.batchSave)&&1!=(null==(_b5=this.settings)?void 0:_b5.liveSync)}get batchSaveMinimumDelay(){var _a8,_b5;return null!=(_b5=null==(_a8=this.settings)?void 0:_a8.batchSaveMinimumDelay)?_b5:DEFAULT_SETTINGS.batchSaveMinimumDelay}get batchSaveMaximumDelay(){var _a8,_b5;return null!=(_b5=null==(_a8=this.settings)?void 0:_a8.batchSaveMaximumDelay)?_b5:DEFAULT_SETTINGS.batchSaveMaximumDelay}get settings(){return this.setting.currentSettings()}_saveSnapshot(snapshot2){return this.adapter.persistence.saveSnapshot(snapshot2)}_loadSnapshot(){return this.adapter.persistence.loadSnapshot()}isFolder(file){return this.adapter.typeGuard.isFolder(file)}isFile(file){return this.adapter.typeGuard.isFile(file)}updateStatus(){const totalItems=this.bufferedQueuedItems.filter(e3=>"args"in e3).filter(e3=>!e3.cancelled).length+this.concurrentProcessing.waiting,processing=this.processingCount,batchedCount=this._waitingMap.size;this.adapter.status.updateStatus({batched:batchedCount,processing,totalQueued:totalItems+batchedCount+processing})}restoreState(){this.snapShotRestored=this._restoreFromSnapshot();return this.snapShotRestored}async appendQueue(params,ctx){var _a8;const settings=this.settings;if(settings.isConfigured&&!(settings.suspendFileWatching||settings.maxMTimeForReflectEvents>0)){this.fileProcessing.onStorageFileEvent();for(const param of params){if(shouldBeIgnored(param.file.path))continue;const atomicKey=[0,0,0,0,0,0].map(e3=>`${Math.floor(1e5*Math.random())}`).join("-"),type=param.type,file=param.file,oldPath=param.oldPath;if("INTERNAL"!==type){const size=file.stat.size;if(this.vaultService.isFileSizeTooLarge(size)&&("CREATE"==type||"CHANGED"==type)){this._log(`The storage file has been changed but exceeds the maximum size. Skipping: ${param.file.path}`,LOG_LEVEL_NOTICE);continue}}if(this.isFolder(file)){this._log(`Folder event skipped: ${file.path}`,LOG_LEVEL_VERBOSE);continue}if(!await this.vaultService.isTargetFile(file.path))continue;if(this.isFile(file)&&("CREATE"==type||"CHANGED"==type)){await delay(10);if(this.storageAccess.recentlyTouched({path:file.path,stat:null!=(_a8=file.stat)?_a8:{ctime:0,mtime:0,size:0}}))continue}let cache2;param.cachedData&&(cache2=param.cachedData);this.enqueue({type,args:{file,oldPath,cache:cache2,ctx},skipBatchWait:param.skipBatchWait,key:atomicKey})}}}enqueue(newItem){"DELETE"==newItem.type&&this.bufferedQueuedItems.push({type:"SENTINEL_FLUSH"});this.updateStatus();this.bufferedQueuedItems.push(newItem);fireAndForget(()=>this._takeSnapshot().then(()=>this.runQueuedEvents()))}_triggerTakeSnapshot(){this._takeSnapshot()}waitForIdle(){if(0===this._waitingMap.size)return Promise.resolve();if(this._waitForIdle)return this._waitForIdle;const promises=[...this._waitingMap.entries()].map(([key3,waitInfo])=>new Promise(resolve=>{waitInfo.canProceed.promise.then(()=>{this._log(`Processing ${key3}: Wait for idle completed`,LOG_LEVEL_DEBUG)}).catch(e3=>{this._log(`Processing ${key3}: Wait for idle error`,LOG_LEVEL_INFO);this._log(e3,LOG_LEVEL_VERBOSE)}).finally(()=>{resolve()});this._proceedWaiting(key3)})),waitPromise=Promise.all(promises).then(()=>{this._waitForIdle=null;this._log("All wait for idle completed",LOG_LEVEL_VERBOSE)});this._waitForIdle=waitPromise;return waitPromise}_proceedWaiting(key3){const waitInfo=this._waitingMap.get(key3);if(waitInfo){waitInfo.canProceed.resolve(!0);clearTimeout(waitInfo.timerHandler);this._waitingMap.delete(key3)}this.triggerTakeSnapshot()}_cancelWaiting(key3){const waitInfo=this._waitingMap.get(key3);if(waitInfo){waitInfo.canProceed.resolve(!1);clearTimeout(waitInfo.timerHandler);this._waitingMap.delete(key3)}this.triggerTakeSnapshot()}_addWaiting(key3,event2,waitedSince){if(this._waitingMap.has(key3))throw new Error(`Already waiting for key: ${key3}`);const resolver2=promiseWithResolvers(),now3=Date.now(),since=null!=waitedSince?waitedSince:now3,elapsed=now3-since,maxDelay=1e3*this.batchSaveMaximumDelay,remainingDelay=Math.max(0,maxDelay-elapsed),nextDelay=Math.min(remainingDelay,1e3*this.batchSaveMinimumDelay);elapsed>=maxDelay?this._log(`Processing ${key3}: Batch save maximum delay already exceeded: ${event2.type}`,LOG_LEVEL_DEBUG):this._log(`Processing ${key3}: Adding waiting for batch save: ${event2.type} (${nextDelay}ms)`,LOG_LEVEL_DEBUG);const waitInfo={since,type:event2.type,event:event2,canProceed:resolver2,timerHandler:setTimeout(()=>{this._log(`Processing ${key3}: Batch save timeout reached: ${event2.type}`,LOG_LEVEL_DEBUG);this._proceedWaiting(key3)},nextDelay)};this._waitingMap.set(key3,waitInfo);this.triggerTakeSnapshot();return waitInfo}async processFileEvent(fei){const releaser=await this.concurrentProcessing.acquire();try{this.updateStatus();const filename=fei.args.file.path,waitingKey=`${filename}`,previous=this._waitingMap.get(waitingKey);let isShouldBeCancelled=fei.skipBatchWait||!1,previousPromise=Promise.resolve(!0),waitPromise=Promise.resolve(!0);if(previous){previousPromise=previous.canProceed.promise;isShouldBeCancelled&&this._log(`Processing ${filename}: Requested to perform immediately, cancelling previous waiting: ${fei.type}`,LOG_LEVEL_DEBUG);if(!isShouldBeCancelled&&"DELETE"===fei.type){this._log(`Processing ${filename}: DELETE requested, cancelling previous waiting: ${fei.type}`,LOG_LEVEL_DEBUG);isShouldBeCancelled=!0}if(!isShouldBeCancelled&&previous.type===fei.type){this._log(`Processing ${filename}: Cancelling previous waiting: ${fei.type}`,LOG_LEVEL_DEBUG);isShouldBeCancelled=!0}if(isShouldBeCancelled){this._cancelWaiting(waitingKey);this._log(`Processing ${filename}: Previous cancelled: ${fei.type}`,LOG_LEVEL_DEBUG);isShouldBeCancelled=!0}if(!isShouldBeCancelled){this._log(`Processing ${filename}: Waiting for previous to complete: ${fei.type}`,LOG_LEVEL_DEBUG);this._proceedWaiting(waitingKey);this._log(`Processing ${filename}: Previous completed: ${fei.type}`,LOG_LEVEL_DEBUG)}}await previousPromise;if(this.shouldBatchSave&&!fei.skipBatchWait){"CREATE"==fei.type||"CHANGED"==fei.type?waitPromise=this._addWaiting(waitingKey,fei,null==previous?void 0:previous.since).canProceed.promise:fei.type;this._log(`Processing ${filename}: Waiting for batch save: ${fei.type}`,LOG_LEVEL_DEBUG);if(!await waitPromise){this._log(`Processing ${filename}: Cancelled by new queue: ${fei.type}`,LOG_LEVEL_DEBUG);return}}await this.requestProcessQueue(fei)}finally{await this._takeSnapshot();releaser()}}async _takeSnapshot(){const snapShot=[...[...this._waitingMap.values()].map(e3=>e3.event),...this.bufferedQueuedItems];await this._saveSnapshot(snapShot);this.updateStatus()}async _restoreFromSnapshot(){const snapShot=await this._loadSnapshot();if(snapShot&&Array.isArray(snapShot)&&snapShot.length>0){this._log(`Restoring storage operation snapshot: ${snapShot.length} items`,LOG_LEVEL_VERBOSE);this.bufferedQueuedItems=snapShot.map(e3=>({...e3,skipBatchWait:!0}));this.updateStatus();await this.runQueuedEvents()}else this._log("No snapshot to restore",LOG_LEVEL_VERBOSE)}runQueuedEvents(){return skipIfDuplicated("storage-event-manager-run-queued-events",async()=>{do{if(0===this.bufferedQueuedItems.length)break;const fei=this.bufferedQueuedItems.shift();await this._takeSnapshot();this.updateStatus();(await this.concurrentProcessing.acquire())();this.updateStatus();if("SENTINEL_FLUSH"!==fei.type)fireAndForget(()=>this.processFileEvent(fei));else{this._log("Waiting for idle",LOG_LEVEL_VERBOSE);await this.waitForIdle();this.updateStatus()}}while(this.bufferedQueuedItems.length>0)})}async requestProcessQueue(fei){try{this.processingCount++;this.updateStatus();await this.handleFileEvent(fei);await this._takeSnapshot()}finally{this.processingCount--;this.updateStatus()}}isWaiting(filename){return isWaitingForTimeout(`storage-event-manager-batchsave-${filename}`)}async handleFileEvent(queue2){const file=queue2.args.file,lockKey=`handleFile:${file.path}`,ret=await serialized(lockKey,async()=>{if(queue2.cancelled)this._log(`File event cancelled before processing: ${file.path}`,LOG_LEVEL_INFO);else if("INTERNAL"==queue2.type||file.isInternal)await this.fileProcessing.processOptionalFileEvent(file.path);else{const last=0;if("DELETE"==queue2.type)await this.fileProcessing.processFileEvent(queue2);else{if(file.stat.mtime==last){this._log(`File has been already scanned on ${queue2.type}, skip: ${file.path}`,LOG_LEVEL_VERBOSE);return}if(!await this.fileProcessing.processFileEvent(queue2)){this._log(`STORAGE -> DB: Handler failed, cancel the relative operations: ${file.path}`,LOG_LEVEL_INFO);this.cancelRelativeEvent(queue2);return}}}});this.updateStatus();return ret}cancelRelativeEvent(item){this._cancelWaiting(item.args.file.path)}async beginWatch(){await this.snapShotRestored;await this.adapter.watch.beginWatch({onCreate:(file,ctx)=>this.watchVaultCreate(file,ctx),onChange:(file,ctx)=>this.watchVaultChange(file,ctx),onDelete:(file,ctx)=>this.watchVaultDelete(file,ctx),onRename:(file,oldPath,ctx)=>this.watchVaultRename(file,oldPath,ctx),onRaw:path2=>this.watchVaultRawEvents(path2),onEditorChange:(editor,info3)=>this.watchEditorChange(editor,info3)})}watchEditorChange(editor,info3){if(!("path"in info3))return;if(!this.shouldBatchSave)return;const file=null==info3?void 0:info3.file;if(!file)return;const path2=this.adapter.typeGuard.isFile(file)?file.path:info3.path;if(!path2)return;if(this.storageAccess.isFileProcessing(path2))return;if(!this.isWaiting(path2))return;const data=null==info3?void 0:info3.data,fi={type:"CHANGED",file:this.adapter.converter.toFileInfo(file),cachedData:data};this.appendQueue([fi])}watchVaultCreate(file,ctx){if(this.adapter.typeGuard.isFolder(file))return;const path2=file.path;if(this.storageAccess.isFileProcessing(path2))return;const fileInfo=this.adapter.converter.toFileInfo(file);this.appendQueue([{type:"CREATE",file:fileInfo}],ctx)}watchVaultChange(file,ctx){if(this.adapter.typeGuard.isFolder(file))return;const path2=file.path;if(this.storageAccess.isFileProcessing(path2))return;const fileInfo=this.adapter.converter.toFileInfo(file);this.appendQueue([{type:"CHANGED",file:fileInfo}],ctx)}watchVaultDelete(file,ctx){if(this.adapter.typeGuard.isFolder(file))return;const path2=file.path;if(this.storageAccess.isFileProcessing(path2))return;const fileInfo=this.adapter.converter.toFileInfo(file,!0);this.appendQueue([{type:"DELETE",file:fileInfo}],ctx)}watchVaultRename(file,oldPath,ctx){if(this.adapter.typeGuard.isFile(file)){const fileInfo=this.adapter.converter.toFileInfo(file);this.appendQueue([{type:"DELETE",file:{path:oldPath,name:fileInfo.name,stat:fileInfo.stat,deleted:!0},skipBatchWait:!0},{type:"CREATE",file:fileInfo,skipBatchWait:!0}],ctx)}}watchVaultRawEvents(path2){this.storageAccess.isFileProcessing(path2)||this.settings&&(this.settings.useIgnoreFiles?this.vaultService.isTargetFile(path2).then(()=>this._watchVaultRawEvents(path2)):this._watchVaultRawEvents(path2))}async _watchVaultRawEvents(path2){}};ObsidianTypeGuardAdapter2=class{isFile(file){return file instanceof import_obsidian.TFile||!(!file||"object"!=typeof file||!("isFolder"in file))&&!file.isFolder}isFolder(item){return item instanceof import_obsidian.TFolder||!(!item||"object"!=typeof item||!("isFolder"in item))&&!!item.isFolder}};ObsidianPersistenceAdapter=class{constructor(core){this.core=core}async saveSnapshot(snapshot2){await this.core.kvDB.set("storage-event-manager-snapshot",snapshot2)}async loadSnapshot(){return await this.core.kvDB.get("storage-event-manager-snapshot")}};ObsidianStatusAdapter=class{constructor(fileProcessing){this.fileProcessing=fileProcessing}updateStatus(status){this.fileProcessing.batched.value=status.batched;this.fileProcessing.processing.value=status.processing;this.fileProcessing.totalQueued.value=status.totalQueued}};ObsidianConverterAdapter=class{toFileInfo(file,deleted){return TFileToUXFileInfoStub(file,deleted)}toInternalFileInfo(path2){return InternalFileToUXFileInfoStub(path2)}};ObsidianWatchAdapter=class{constructor(plugin3){this.plugin=plugin3}beginWatch(handlers3){var _a8;const plugin3=this.plugin,boundHandlers={onCreate:handlers3.onCreate.bind(handlers3),onChange:handlers3.onChange.bind(handlers3),onDelete:handlers3.onDelete.bind(handlers3),onRename:handlers3.onRename.bind(handlers3),onRaw:handlers3.onRaw.bind(handlers3),onEditorChange:null==(_a8=handlers3.onEditorChange)?void 0:_a8.bind(handlers3)};plugin3.registerEvent(plugin3.app.vault.on("create",boundHandlers.onCreate));plugin3.registerEvent(plugin3.app.vault.on("modify",boundHandlers.onChange));plugin3.registerEvent(plugin3.app.vault.on("delete",boundHandlers.onDelete));plugin3.registerEvent(plugin3.app.vault.on("rename",boundHandlers.onRename));plugin3.registerEvent(plugin3.app.vault.on("raw",boundHandlers.onRaw));boundHandlers.onEditorChange&&plugin3.registerEvent(plugin3.app.workspace.on("editor-change",boundHandlers.onEditorChange));return Promise.resolve()}};ObsidianStorageEventManagerAdapter=class{constructor(plugin3,core,fileProcessing){this.typeGuard=new ObsidianTypeGuardAdapter2;this.persistence=new ObsidianPersistenceAdapter(core);this.watch=new ObsidianWatchAdapter(plugin3);this.status=new ObsidianStatusAdapter(fileProcessing);this.converter=new ObsidianConverterAdapter}};StorageEventManagerObsidian=class extends StorageEventManagerBase{constructor(plugin3,core,dependencies){super(new ObsidianStorageEventManagerAdapter(plugin3,core,dependencies.fileProcessing),dependencies);this.core=core}async _watchVaultRawEvents(path2){(this.settings.syncInternalFiles||this.settings.usePluginSync)&&this.settings.watchInternalFileChanges&&path2.startsWith(this.core.services.API.getSystemConfigDir())&&(path2.endsWith("/")||await this.vaultService.isTargetFileInExtra(path2)&&this.appendQueue([{type:"INTERNAL",file:this.adapter.converter.toInternalFileInfo(path2),skipBatchWait:!0}],null))}};ModulePeriodicProcess=class extends AbstractModule{constructor(){super(...arguments);this.periodicSyncProcessor=new PeriodicProcessor(this.core,async()=>await this.services.replication.replicate())}disablePeriodic(){var _a8;null==(_a8=this.periodicSyncProcessor)||_a8.disable();return Promise.resolve(!0)}resumePeriodic(){this.periodicSyncProcessor.enable(this.settings.periodicReplication?1e3*this.settings.periodicReplicationInterval:0);return Promise.resolve(!0)}_allOnUnload(){return this.disablePeriodic()}_everyBeforeRealizeSetting(){return this.disablePeriodic()}_everyBeforeSuspendProcess(){return this.disablePeriodic()}_everyAfterResumeProcess(){return this.resumePeriodic()}_everyAfterRealizeSetting(){return this.resumePeriodic()}onBindFunction(core,services){services.appLifecycle.onUnload.addHandler(this._allOnUnload.bind(this));services.setting.onBeforeRealiseSetting.addHandler(this._everyBeforeRealizeSetting.bind(this));services.setting.onSettingRealised.addHandler(this._everyAfterRealizeSetting.bind(this));services.appLifecycle.onSuspending.addHandler(this._everyBeforeSuspendProcess.bind(this));services.appLifecycle.onResumed.addHandler(this._everyAfterResumeProcess.bind(this))}};ReplicateResultProcessor=class{constructor(replicator){this._suspended=!1;this.triggerTakeSnapshot=throttle(()=>this._triggerTakeSnapshot(),50);this._restoreFromSnapshot=void 0;this._queuedChanges=[];this._processingChanges=[];this._semaphore=Semaphore(10);this._isRunningProcessQueue=!1;this.replicator=replicator}log(message,level=LOG_LEVEL_INFO){Logger(`[ReplicateResultProcessor] ${message}`,level)}logError(e3){Logger(e3,LOG_LEVEL_VERBOSE)}get localDatabase(){return this.replicator.core.localDatabase}get services(){return this.replicator.core.services}get core(){return this.replicator.core}getPath(entry){return this.services.path.getPath(entry)}suspend(){this._suspended=!0}resume(){this._suspended=!1;fireAndForget(()=>this.runProcessQueue())}get isSuspended(){return this._suspended||!this.core.services.appLifecycle.isReady||this.replicator.settings.suspendParseReplicationResult||this.core.services.appLifecycle.isSuspended()}async _takeSnapshot(){const snapshot2={queued:this._queuedChanges.slice(),processing:this._processingChanges.slice()};await this.core.kvDB.set("replicationResultProcessorSnapshot",snapshot2);this.log(`Snapshot taken. Queued: ${snapshot2.queued.length}, Processing: ${snapshot2.processing.length}`,LOG_LEVEL_DEBUG);this.reportStatus()}_triggerTakeSnapshot(){fireAndForget(()=>this._takeSnapshot())}async restoreFromSnapshot(){const snapshot2=await this.core.kvDB.get("replicationResultProcessorSnapshot");if(snapshot2){const newQueue=[...snapshot2.processing,...snapshot2.queued,...this._queuedChanges];this._queuedChanges=[];this.enqueueAll(newQueue);this.log(`Restored from snapshot (${snapshot2.processing.length+snapshot2.queued.length} items)`,LOG_LEVEL_INFO)}}restoreFromSnapshotOnce(){this._restoreFromSnapshot||(this._restoreFromSnapshot=this.restoreFromSnapshot());return this._restoreFromSnapshot}async withCounting(proc,countValue){countValue.value++;try{return await proc()}finally{countValue.value--}}reportStatus(){this.services.replication.replicationResultCount.value=this._queuedChanges.length+this._processingChanges.length}enqueueAll(changes3){for(const change of changes3)this.processIfNonDocumentChange(change)||this.enqueueChange(change)}processIfNonDocumentChange(change){if(!change){this.log("Received empty change",LOG_LEVEL_VERBOSE);return!0}if(isChunk(change._id)){this.localDatabase.onNewLeaf(change);this.log(`Processed chunk: ${shortenId(change._id)}`,LOG_LEVEL_DEBUG);return!0}if("versioninfo"==change.type){this.log(`Version info document received: ${change._id}`,LOG_LEVEL_VERBOSE);if(change.version>12){this.core.replicator.closeReplication();this.log("Remote database updated to incompatible version. update your Self-hosted LiveSync plugin.",LOG_LEVEL_NOTICE)}return!0}if(change._id==SYNCINFO_ID||change._id.startsWith("_design")){this.log(`Skipped system document: ${change._id}`,LOG_LEVEL_VERBOSE);return!0}return!1}enqueueChange(doc){var _a8;const old=this._queuedChanges.find(e3=>e3._id==doc._id),docNote=`${"path"in doc?this.getPath(doc):""} (${shortenId(doc._id)}, ${shortenRev(doc._rev)})`;if(old){if(old._rev==doc._rev){this.log(`[Enqueue] skipped (Already queued): ${docNote}`,LOG_LEVEL_VERBOSE);return}const oldRev=null!=(_a8=old._rev)?_a8:"";if((!0===old._deleted||"deleted"in old&&!0===old.deleted)==(!0===doc._deleted||"deleted"in doc&&!0===doc.deleted)){this._queuedChanges=this._queuedChanges.filter(e3=>e3._id!=doc._id);this.log(`[Enqueue] requeued: ${docNote} (from rev: ${shortenRev(oldRev)})`,LOG_LEVEL_VERBOSE)}}this._queuedChanges.push(doc);this.triggerTakeSnapshot();this.triggerProcessQueue()}triggerProcessQueue(){fireAndForget(()=>this.runProcessQueue())}async runProcessQueue(){if(!this._isRunningProcessQueue&&!this.isSuspended&&0!=this._queuedChanges.length)try{this._isRunningProcessQueue=!0;for(;this._queuedChanges.length>0;){if(this.isSuspended){this.log(`Processing has got suspended. Remaining items in queue: ${this._queuedChanges.length}`,LOG_LEVEL_INFO);break}(await this._semaphore.acquire())();const doc=this._queuedChanges.shift();if(doc){this._processingChanges.push(doc);this.parseDocumentChange(doc)}this.triggerTakeSnapshot()}}finally{this._isRunningProcessQueue=!1}}async parseDocumentChange(change){var _a8;try{if(isAnyNote(change)){const docMtime=null!=(_a8=change.mtime)?_a8:0,maxMTime=this.replicator.settings.maxMTimeForReflectEvents;if(maxMTime>0&&docMtime>maxMTime){const docPath=this.getPath(change);this.log(`Processing ${docPath} has been skipped due to modification time (${new Date(1e3*docMtime).toISOString()}) exceeding the limit`,LOG_LEVEL_INFO);return}}if(await this.services.replication.processVirtualDocument(change))return;if(isAnyNote(change)){const docPath=this.getPath(change);if(!await this.services.vault.isTargetFile(docPath)){this.log(`Skipped: ${docPath}`,LOG_LEVEL_VERBOSE);return}const size=change.size;if(this.services.vault.isFileSizeTooLarge(size)){this.log(`Processing ${docPath} has been skipped due to file size exceeding the limit`,LOG_LEVEL_NOTICE);return}return await this.applyToDatabase(change)}this.log(`Skipped unexpected non-note document: ${change._id}`,LOG_LEVEL_INFO);return}finally{this._processingChanges=this._processingChanges.filter(e3=>e3!==change);this.triggerTakeSnapshot()}}applyToDatabase(doc){return this.withCounting(async()=>{let releaser;try{releaser=await this._semaphore.acquire();await this._applyToDatabase(doc)}catch(e3){this.log("Error while processing replication result",LOG_LEVEL_NOTICE);this.logError(e3)}finally{releaser&&releaser()}},this.services.replication.databaseQueueCount)}_applyToDatabase(doc_){const dbDoc=doc_,path2=this.getPath(dbDoc);return serialized(`replication-process:${dbDoc._id}`,async()=>{const docNote=`${path2} (${shortenId(dbDoc._id)}, ${shortenRev(dbDoc._rev)})`;if(!await this.checkIsChangeRequiredForDatabaseProcessing(dbDoc)){this.log(`Skipped (Not latest): ${docNote}`,LOG_LEVEL_VERBOSE);return}const doc=!0===dbDoc._deleted||"deleted"in dbDoc&&!0===dbDoc.deleted?{...dbDoc,data:""}:await this.localDatabase.getDBEntryFromMeta({...dbDoc},!1,!0);if(doc)if(await this.services.replication.processOptionalSynchroniseResult(dbDoc))this.log(`Processed by other processor: ${docNote}`,LOG_LEVEL_DEBUG);else if(this.services.vault.isValidPath(this.getPath(doc))){await this.applyToStorage(doc);this.log(`Processed: ${docNote}`,LOG_LEVEL_DEBUG)}else this.log(`Unprocessed (Invalid path): ${docNote}`,LOG_LEVEL_VERBOSE);else this.log(`Failed to gather content of ${docNote}`,LOG_LEVEL_NOTICE)})}applyToStorage(entry){return this.withCounting(async()=>{await this.services.replication.processSynchroniseResult(entry)},this.services.replication.storageApplyingCount)}async checkIsChangeRequiredForDatabaseProcessing(dbDoc){var _a8,_b5,_c3,_d2;const path2=this.getPath(dbDoc);try{const savedDoc=await this.localDatabase.getRaw(dbDoc._id,{conflicts:!0,revs_info:!0}),newRev=null!=(_a8=dbDoc._rev)?_a8:"",latestRev=null!=(_b5=savedDoc._rev)?_b5:"",revisions=null!=(_d2=null==(_c3=savedDoc._revs_info)?void 0:_c3.map(e3=>e3.rev))?_d2:[];return!(!(savedDoc._conflicts&&savedDoc._conflicts.length>0)&&newRev!=latestRev&&revisions.indexOf(newRev)>=0)}catch(e3){if("status"in e3&&404==e3.status)return!0;this.log(`Failed to get existing document for ${path2} (${shortenId(dbDoc._id)}, ${shortenRev(dbDoc._rev)}) `,LOG_LEVEL_NOTICE);this.logError(e3);return!1}}};ModuleReplicator=class extends AbstractModule{constructor(){super(...arguments);this.processor=new ReplicateResultProcessor(this);this._unresolvedErrorManager=new UnresolvedErrorManager(this.core.services.appLifecycle)}clearErrors(){this._unresolvedErrorManager.clearErrors()}_everyOnloadAfterLoadSettings(){eventHub.onEvent("file-saved",()=>{this.settings.syncOnSave&&!this.core.services.appLifecycle.isSuspended()&&scheduleTask("perform-replicate-after-save",250,()=>this.services.replication.replicateByEvent())});eventHub.onEvent(EVENT_SETTING_SAVED,setting=>{this.core.settings.suspendParseReplicationResult?this.processor.suspend():this.processor.resume()});return Promise.resolve(!0)}_onReplicatorInitialised(){clearHandlers();return Promise.resolve(!0)}_everyOnDatabaseInitialized(showNotice){fireAndForget(()=>this.processor.restoreFromSnapshotOnce());return Promise.resolve(!0)}async _everyBeforeReplicate(showMessage){await this.processor.restoreFromSnapshotOnce();this.clearErrors();return!0}async cleaned(showMessage){Logger("The remote database has been cleaned.",showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);await skipIfDuplicated("cleanup",async()=>{var _a8;const message=`The remote database has been cleaned up.\nTo synchronize, this device must be also cleaned up. ${await purgeUnreferencedChunks(this.localDatabase.localDatabase,!0)} chunk(s) will be erased from this device.\nHowever, If there are many chunks to be deleted, maybe fetching again is faster.\nWe will lose the history of this device if we fetch the remote database again.\nEven if you choose to clean up, you will see this option again if you exit Obsidian and then synchronise again.`,ret=await this.core.confirm.confirmWithMessage("Cleaned",message,["Fetch again","Cleanup","Dismiss"],"Dismiss",30);"Fetch again"==ret&&await this.core.rebuilder.$performRebuildDB("localOnly");if("Cleanup"==ret){const replicator=this.services.replicator.getActiveReplicator();if(!(replicator instanceof LiveSyncCouchDBReplicator))return;const remoteDB=await replicator.connectRemoteCouchDBWithSetting(this.settings,this.services.API.isMobile(),!0);if("string"==typeof remoteDB){Logger(remoteDB,LOG_LEVEL_NOTICE);return!1}await purgeUnreferencedChunks(this.localDatabase.localDatabase,!1);this.localDatabase.clearCaches();if(await this.core.replicator.openReplication(this.settings,!1,showMessage,!0)){await balanceChunkPurgedDBs(this.localDatabase.localDatabase,remoteDB.db);await purgeUnreferencedChunks(this.localDatabase.localDatabase,!1);this.localDatabase.clearCaches();await(null==(_a8=this.services.replicator.getActiveReplicator())?void 0:_a8.markRemoteResolved(this.settings));Logger("The local database has been cleaned up.",showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO)}else Logger("Replication has been cancelled. Please try it again.",showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO)}})}async onReplicationFailed(showMessage=!1){const activeReplicator=this.services.replicator.getActiveReplicator();if(!activeReplicator){Logger("No active replicator found",LOG_LEVEL_INFO);return!1}if(activeReplicator.tweakSettingsMismatched&&activeReplicator.preferredTweakValue)await this.services.tweakValue.askResolvingMismatched(activeReplicator.preferredTweakValue);else if(activeReplicator.remoteLockedAndDeviceNotAccepted)if(activeReplicator.remoteCleaned&&this.settings.useIndexedDBAdapter)await this.cleaned(showMessage);else{const message=$msg("Replicator.Dialogue.Locked.Message"),CHOICE_FETCH=$msg("Replicator.Dialogue.Locked.Action.Fetch"),CHOICE_DISMISS=$msg("Replicator.Dialogue.Locked.Action.Dismiss"),CHOICE_UNLOCK=$msg("Replicator.Dialogue.Locked.Action.Unlock"),ret=await this.core.confirm.askSelectStringDialogue(message,[CHOICE_FETCH,CHOICE_UNLOCK,CHOICE_DISMISS],{title:$msg("Replicator.Dialogue.Locked.Title"),defaultAction:CHOICE_DISMISS,timeout:60});if(ret==CHOICE_FETCH){this._log($msg("Replicator.Dialogue.Locked.Message.Fetch"),LOG_LEVEL_NOTICE);await this.core.rebuilder.scheduleFetch();this.services.appLifecycle.scheduleRestart();return!1}if(ret==CHOICE_UNLOCK){await activeReplicator.markRemoteResolved(this.settings);this._log($msg("Replicator.Dialogue.Locked.Message.Unlocked"),LOG_LEVEL_NOTICE);return!1}}return!1}_parseReplicationResult(docs){this.processor.enqueueAll(docs);return Promise.resolve(!0)}onBindFunction(core,services){services.replicator.onReplicatorInitialised.addHandler(this._onReplicatorInitialised.bind(this));services.databaseEvents.onDatabaseInitialised.addHandler(this._everyOnDatabaseInitialized.bind(this));services.appLifecycle.onSettingLoaded.addHandler(this._everyOnloadAfterLoadSettings.bind(this));services.replication.parseSynchroniseResult.addHandler(this._parseReplicationResult.bind(this));const isOnlineAndCanReplicateWithHost=isOnlineAndCanReplicate.bind(null,this._unresolvedErrorManager,{services:{API:services.API},serviceModules:{}}),canReplicateWithPBKDF2WithHost=canReplicateWithPBKDF2.bind(null,this._unresolvedErrorManager,{services:{replicator:services.replicator,setting:services.setting},serviceModules:{}});services.replication.onBeforeReplicate.addHandler(isOnlineAndCanReplicateWithHost,10);services.replication.onBeforeReplicate.addHandler(canReplicateWithPBKDF2WithHost,20);services.replication.onBeforeReplicate.addHandler(this._everyBeforeReplicate.bind(this),100);services.replication.onReplicationFailed.addHandler(this.onReplicationFailed.bind(this))}};ModuleReplicatorCouchDB=class extends AbstractModule{_anyNewReplicator(settingOverride={}){const settings={...this.settings,...settingOverride};return settings.remoteType==REMOTE_MINIO||settings.remoteType==REMOTE_P2P?Promise.resolve(!1):Promise.resolve(new LiveSyncCouchDBReplicator(this.core))}_everyAfterResumeProcess(){if(this.services.appLifecycle.isSuspended())return Promise.resolve(!0);if(!this.services.appLifecycle.isReady())return Promise.resolve(!0);if(this.settings.remoteType!=REMOTE_MINIO&&this.settings.remoteType!=REMOTE_P2P){const LiveSyncEnabled=this.settings.liveSync,continuous=LiveSyncEnabled,eventualOnStart=!LiveSyncEnabled&&this.settings.syncOnStart;(LiveSyncEnabled||eventualOnStart)&&fireAndForget(async()=>{await this.services.replication.isReplicationReady(!1)&&this.core.replicator.openReplication(this.settings,continuous,!1,!1)})}return Promise.resolve(!0)}onBindFunction(core,services){services.replicator.getNewReplicator.addHandler(this._anyNewReplicator.bind(this));services.appLifecycle.onResumed.addHandler(this._everyAfterResumeProcess.bind(this))}};MILSTONE_DOCID="_00000000-milestone.json";currentVersionRange2={min:0,max:2,current:2};LiveSyncJournalReplicator=class extends LiveSyncAbstractReplicator{get isChunkSendingSupported(){return!1}get client(){return this.setupJournalSyncClient()}get simpleStore(){return this.env.services.keyValueDB.simpleStore}async getReplicationPBKDF2Salt(setting,refresh){return await this.client.getReplicationPBKDF2Salt(refresh)}setupJournalSyncClient(){const settings=this.currentSettings;this._client?this._client.applyNewConfig(settings,this.simpleStore,this.env):this._client=new JournalSyncMinio(settings,this.simpleStore,this.env);return this._client}async ensureBucketIsCompatible(deviceNodeID,currentVersionRange3){const downloadedMilestone=await this.client.downloadJson(MILSTONE_DOCID),cPointInfo=await this.client.getCheckpointInfo(),progress=[...(null==cPointInfo?void 0:cPointInfo.receivedFiles)||[]].sort().pop()||"";return await ensureRemoteIsCompatible(downloadedMilestone,this.currentSettings,deviceNodeID,currentVersionRange3,{app_version:this.env.services.API.getAppVersion(),plugin_version:this.env.services.API.getPluginVersion(),vault_name:this.env.services.vault.vaultName(),device_name:this.env.services.vault.getVaultName(),progress},async info3=>{await this.client.uploadJson(MILSTONE_DOCID,info3)})}constructor(env){super(env);this.env=env;fireAndForget(()=>this.initializeDatabaseForReplication());this.rawDatabase.on("close",()=>{this.closeReplication()})}async migrate(from,to){Logger(`Database updated from ${from} to ${to}`,LOG_LEVEL_NOTICE);return Promise.resolve(!0)}terminateSync(){this.client.requestStop()}async openReplication(setting,_,showResult,ignoreCleanLock=!1){if(!await this.checkReplicationConnectivity(!1,ignoreCleanLock,showResult))return!1;await this.client.sync(showResult);return!0}async replicateAllToServer(setting,showingNotice){return!!await this.checkReplicationConnectivity(!1,!1,!!showingNotice)&&await this.client.sendLocalJournal(showingNotice)}async replicateAllFromServer(setting,showingNotice){return!!await this.checkReplicationConnectivity(!1,!1,!!showingNotice)&&await this.client.receiveRemoteJournal(showingNotice)}async checkReplicationConnectivity(skipCheck,ignoreCleanLock=!1,showMessage=!1){if(!await this.client.isAvailable())return!1;if(!skipCheck){await this.client.ensureCheckpointCachesAreFresh();this.remoteCleaned=!1;this.remoteLocked=!1;this.remoteLockedAndDeviceNotAccepted=!1;this.tweakSettingsMismatched=!1;const ensure=await this.ensureBucketIsCompatible(this.nodeid,currentVersionRange2);if("INCOMPATIBLE"==ensure){Logger("The remote database has no compatibility with the running version. Please upgrade the plugin.",LOG_LEVEL_NOTICE);return!1}if("NODE_LOCKED"==ensure){Logger("The remote database has been rebuilt or corrupted since we have synchronized last time. Fetch rebuilt DB, explicit unlocking or chunk clean-up is required.",LOG_LEVEL_NOTICE);this.remoteLockedAndDeviceNotAccepted=!0;this.remoteLocked=!0;return!1}if("LOCKED"==ensure)this.remoteLocked=!0;else if("NODE_CLEANED"==ensure){if(!ignoreCleanLock){Logger("The remote database has been cleaned up. Fetch rebuilt DB, explicit unlocking or chunk clean-up is required.",LOG_LEVEL_NOTICE);this.remoteLockedAndDeviceNotAccepted=!0;this.remoteLocked=!0;this.remoteCleaned=!0;return!1}this.remoteLocked=!0}else if("OK"==ensure);else if("MISMATCHED"==ensure[0]){Logger("Configuration mismatching between the clients has been detected. This can be harmful or extra capacity consumption. We have to make these value unified. When replication is initiated manually via the command palette or ribbon, a dialogue box will open to address this.",LOG_LEVEL_NOTICE);this.tweakSettingsMismatched=!0;this.preferredTweakValue=ensure[1];return!1}}return!0}async fetchRemoteChunks(missingChunks,showResult){return Promise.resolve([])}closeReplication(){this.client.requestStop();this.syncStatus="CLOSED";Logger("Replication closed");this.updateInfo()}async tryResetRemoteDatabase(setting){this.closeReplication();try{await this.client.resetBucket();clearHandlers();Logger("Remote Bucket Cleared",LOG_LEVEL_NOTICE);await this.tryCreateRemoteDatabase(setting)}catch(ex){Logger("Something happened on Remote Bucket Clear",LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_NOTICE)}}async tryCreateRemoteDatabase(setting){this.closeReplication();Logger("Remote Database Created or Connected",LOG_LEVEL_NOTICE);clearHandlers();await this.ensurePBKDF2Salt(setting,!0,!1);return await Promise.resolve()}async markRemoteLocked(setting,locked,lockByClean){const defInitPoint={_id:MILSTONE_DOCID,type:"milestoneinfo",created:new Date/1,locked,cleaned:lockByClean,accepted_nodes:[this.nodeid],node_chunk_info:{[this.nodeid]:currentVersionRange2},node_info:{},tweak_values:{}},remoteMilestone={...defInitPoint,...await this.client.downloadJson(MILSTONE_DOCID)||{}};remoteMilestone.node_chunk_info={...defInitPoint.node_chunk_info,...remoteMilestone.node_chunk_info};remoteMilestone.accepted_nodes=[this.nodeid];remoteMilestone.locked=locked;remoteMilestone.cleaned=remoteMilestone.cleaned||lockByClean;Logger(locked?"Lock remote bucket to prevent data corruption":"Unlock remote bucket to prevent data corruption",LOG_LEVEL_NOTICE);await this.client.uploadJson(MILSTONE_DOCID,remoteMilestone)}async markRemoteResolved(setting){const defInitPoint={_id:MILSTONE_DOCID,type:"milestoneinfo",created:new Date/1,locked:!1,accepted_nodes:[this.nodeid],node_chunk_info:{[this.nodeid]:currentVersionRange2},node_info:{},tweak_values:{}},remoteMilestone={...defInitPoint,...await this.client.downloadJson(MILSTONE_DOCID)||{}};remoteMilestone.node_chunk_info={...defInitPoint.node_chunk_info,...remoteMilestone.node_chunk_info};remoteMilestone.accepted_nodes=Array.from(new Set([...remoteMilestone.accepted_nodes,this.nodeid]));Logger("Mark this device as 'resolved'.",LOG_LEVEL_NOTICE);await this.client.uploadJson(MILSTONE_DOCID,remoteMilestone)}async tryConnectRemote(setting,showResult=!0){const endpoint=setting.endpoint,testClient=new JournalSyncMinio(setting,this.simpleStore,this.env);try{await testClient.listFiles("",1);Logger(`Connected to ${endpoint} successfully!`,LOG_LEVEL_NOTICE);return!0}catch(ex){Logger(`Error! Could not connected to ${endpoint}\n${ex.message}`,LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_NOTICE);return!1}}async resetRemoteTweakSettings(setting){try{const remoteMilestone=await this.client.downloadJson(MILSTONE_DOCID);if(!remoteMilestone)throw new Error("Missing remote milestone");remoteMilestone.tweak_values={};Logger("tweak values on the remote database have been cleared",LOG_LEVEL_VERBOSE);await this.client.uploadJson(MILSTONE_DOCID,remoteMilestone)}catch(ex){Logger("Could not retrieve remote milestone",LOG_LEVEL_NOTICE);throw ex}}async setPreferredRemoteTweakSettings(setting){try{const remoteMilestone=await this.client.downloadJson(MILSTONE_DOCID);if(!remoteMilestone)throw new Error("Missing remote milestone");remoteMilestone.tweak_values[DEVICE_ID_PREFERRED]=extractObject(TweakValuesTemplate,{...setting});Logger("tweak values on the remote database have been cleared",LOG_LEVEL_VERBOSE);await this.client.uploadJson(MILSTONE_DOCID,remoteMilestone)}catch(ex){Logger("Could not retrieve remote milestone",LOG_LEVEL_NOTICE);throw ex}}async getRemotePreferredTweakValues(setting){var _a8;try{const remoteMilestone=await this.client.downloadJson(MILSTONE_DOCID);if(!remoteMilestone)throw new Error("Missing remote milestone");return(null==(_a8=null==remoteMilestone?void 0:remoteMilestone.tweak_values)?void 0:_a8[DEVICE_ID_PREFERRED])||!1}catch(ex){Logger("Could not retrieve remote milestone",LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}async getRemoteStatus(setting){const testClient=new JournalSyncMinio(setting,this.simpleStore,this.env);return await testClient.getUsage()}countCompromisedChunks(){Logger("Bucket Sync Replicator cannot count compromised chunks",LOG_LEVEL_VERBOSE);return Promise.resolve(0)}getConnectedDeviceList(setting){return Promise.resolve(!1)}};ModuleReplicatorMinIO=class extends AbstractModule{_anyNewReplicator(settingOverride={}){return{...this.settings,...settingOverride}.remoteType==REMOTE_MINIO?Promise.resolve(new LiveSyncJournalReplicator(this.core)):Promise.resolve(!1)}onBindFunction(core,services){services.replicator.getNewReplicator.addHandler(this._anyNewReplicator.bind(this))}};ModuleConflictChecker=class extends AbstractModule{constructor(){super(...arguments);this.conflictResolveQueue=new QueueProcessor(async filenames=>{const filename=filenames[0];return await this.services.conflict.resolve(filename)},{suspended:!1,batchSize:1,concurrentLimit:10,delay:0,keepResultUntilDownstreamConnected:!1}).replaceEnqueueProcessor((queue2,newEntity)=>{sendValue("cancel-resolve-conflict:"+newEntity,!0);return[...[...queue2].filter(e3=>e3!=newEntity),newEntity]});this.conflictCheckQueue=new QueueProcessor(files=>{const filename=files[0];return Promise.resolve([filename])},{suspended:!1,batchSize:1,concurrentLimit:10,delay:0,keepResultUntilDownstreamConnected:!0,pipeTo:this.conflictResolveQueue,totalRemainingReactiveSource:this.services.conflict.conflictProcessQueueCount})}async _queueConflictCheckIfOpen(file){const path2=file;if(this.settings.checkConflictOnlyOnOpen){const af2=this.services.vault.getActiveFilePath();if(af2&&af2!=path2){this._log(`${file} is conflicted, merging process has been postponed.`,LOG_LEVEL_NOTICE);return}}await this.services.conflict.queueCheckFor(path2)}async _queueConflictCheck(file){const optionalConflictResult=await this.services.conflict.getOptionalConflictCheckMethod(file);1!=optionalConflictResult&&("newer"===optionalConflictResult?await this.services.conflict.resolveByNewest(file):this.conflictCheckQueue.enqueue(file))}_waitForAllConflictProcessed(){return this.conflictResolveQueue.waitForAllProcessed()}onBindFunction(core,services){services.conflict.queueCheckForIfOpen.setHandler(this._queueConflictCheckIfOpen.bind(this));services.conflict.queueCheckFor.setHandler(this._queueConflictCheck.bind(this));services.conflict.ensureAllProcessed.setHandler(this._waitForAllConflictProcessed.bind(this))}};import_diff_match_patch4=__toESM(require_diff_match_patch(),1);ModuleConflictResolver=class extends AbstractModule{async _resolveConflictByDeletingRev(path2,deleteRevision,subTitle=""){const title=`Resolving ${subTitle?`[${subTitle}]`:""}:`;if(!await this.core.fileHandler.deleteRevisionFromDB(path2,deleteRevision)){this._log(`${title} Could not delete conflicted revision ${displayRev(deleteRevision)} of ${path2}`,LOG_LEVEL_NOTICE);return MISSING_OR_ERROR}eventHub.emitEvent("conflict-cancelled",path2);this._log(`${title} Conflicted revision has been deleted ${displayRev(deleteRevision)} ${path2}`,LOG_LEVEL_INFO);if(0!=(await this.core.databaseFileAccess.getConflictedRevs(path2)).length){this._log(`${title} some conflicts are left in ${path2}`,LOG_LEVEL_INFO);return AUTO_MERGED}if(isPluginMetadata(path2)||isCustomisationSyncMetadata(path2)){this._log(`${title} ${path2} is a plugin metadata file, no need to write to storage`,LOG_LEVEL_INFO);return AUTO_MERGED}if(!await this.core.fileHandler.dbToStorage(path2,stripAllPrefixes(path2),!0)){this._log(`Could not write the resolved content to the storage: ${path2}`,LOG_LEVEL_NOTICE);return MISSING_OR_ERROR}const level=-1!==subTitle.indexOf("same")?LOG_LEVEL_INFO:LOG_LEVEL_NOTICE;this._log(`${path2} has been merged automatically`,level);return AUTO_MERGED}async checkConflictAndPerformAutoMerge(path2){const ret=await this.localDatabase.tryAutoMerge(path2,!this.settings.disableMarkdownAutoMerge);if("ok"in ret)return ret.ok;if("result"in ret){const p2=ret.result;if(!await this.core.databaseFileAccess.storeContent(path2,p2)){this._log(`Merged content cannot be stored:${path2}`,LOG_LEVEL_NOTICE);return MISSING_OR_ERROR}return await this.services.conflict.resolveByDeletingRevision(path2,ret.conflictedRev,"Sensible")}const{rightRev,leftLeaf,rightLeaf}=ret;if(0==leftLeaf){this._log(`could not get current revisions:${path2}`,LOG_LEVEL_NOTICE);return MISSING_OR_ERROR}if(0==rightLeaf)return await this.services.conflict.resolveByDeletingRevision(path2,rightRev,"MISSING OLD REV");const isSame=leftLeaf.data==rightLeaf.data&&leftLeaf.deleted==rightLeaf.deleted,isBinary=!isPlainText(path2),alwaysNewer=this.settings.resolveConflictsByNewerFile;if(isSame||isBinary||alwaysNewer){let loser=leftLeaf;compareMTime(leftLeaf.mtime,rightLeaf.mtime)!=TARGET_IS_NEW&&(loser=rightLeaf);const subTitle=[isSame?"same":"",isBinary?"binary":"",alwaysNewer?"alwaysNewer":""].filter(e3=>e3.trim()).join(",");return await this.services.conflict.resolveByDeletingRevision(path2,loser.rev,subTitle)}const dmp=new import_diff_match_patch4.default,diff=dmp.diff_main(leftLeaf.data,rightLeaf.data);dmp.diff_cleanupSemantic(diff);this._log(`conflict(s) found:${path2}`);return{left:leftLeaf,right:rightLeaf,diff}}async _resolveConflict(filename){return await serialized(`conflict-resolve:${filename}`,async()=>{const conflictCheckResult=await this.checkConflictAndPerformAutoMerge(filename);if(conflictCheckResult!==MISSING_OR_ERROR&&conflictCheckResult!==NOT_CONFLICTED&&conflictCheckResult!==CANCELLED)if(conflictCheckResult!==AUTO_MERGED){if(this.settings.showMergeDialogOnlyOnActive){const af2=this.services.vault.getActiveFilePath();if(af2&&af2!=filename){this._log(`[conflict] ${filename} is conflicted. Merging process has been postponed to the file have got opened.`,LOG_LEVEL_NOTICE);return}}this._log("[conflict] Manual merge required!");eventHub.emitEvent("conflict-cancelled",filename);await this.services.conflict.resolveByUserInteraction(filename,conflictCheckResult)}else{this.settings.syncAfterMerge&&!this.services.appLifecycle.isSuspended()&&await this.services.replication.replicateByEvent();this._log("[conflict] Automatically merged, but we have to check it again");await this.services.conflict.queueCheckFor(filename)}else this._log(`[conflict] Not conflicted or cancelled: ${filename}`,LOG_LEVEL_VERBOSE)})}async _anyResolveConflictByNewest(filename){const currentRev=await this.core.databaseFileAccess.fetchEntryMeta(filename,void 0,!0);if(0==currentRev){this._log(`Could not get current revision of ${filename}`);return Promise.resolve(!1)}const revs=await this.core.databaseFileAccess.getConflictedRevs(filename);if(0==revs.length)return Promise.resolve(!0);const mTimeAndRev=[[currentRev.mtime,currentRev._rev],...await Promise.all(revs.map(async rev3=>{const leaf=await this.core.databaseFileAccess.fetchEntryMeta(filename,rev3);return 0==leaf?[0,rev3]:[leaf.mtime,rev3]}))].sort((a2,b3)=>{const diff=b3[0]-a2[0];return 0==diff?a2[1].localeCompare(b3[1],"en",{numeric:!0}):diff});this._log(`Resolving conflict by newest: ${filename} (Newest: ${new Date(mTimeAndRev[0][0]).toLocaleString()}) (${mTimeAndRev.length} revisions exists)`);for(let i2=1;i2v2).join("\n")}),CHOICE_USE_REMOTE=$msg("TweakMismatchResolve.Action.UseRemote"),CHOICE_USE_REMOTE_WITH_REBUILD=$msg("TweakMismatchResolve.Action.UseRemoteWithRebuild"),CHOICE_USE_REMOTE_PREVENT_REBUILD=$msg("TweakMismatchResolve.Action.UseRemoteAcceptIncompatible"),CHOICE_USE_MINE=$msg("TweakMismatchResolve.Action.UseMine"),CHOICE_USE_MINE_WITH_REBUILD=$msg("TweakMismatchResolve.Action.UseMineWithRebuild"),CHOICE_USE_MINE_PREVENT_REBUILD=$msg("TweakMismatchResolve.Action.UseMineAcceptIncompatible"),CHOICE_DISMISS=$msg("TweakMismatchResolve.Action.Dismiss"),CHOICE_AND_VALUES=[];if(rebuildRequired){CHOICE_AND_VALUES.push([CHOICE_USE_REMOTE_WITH_REBUILD,[preferred,!0]]);CHOICE_AND_VALUES.push([CHOICE_USE_MINE_WITH_REBUILD,[!0,!0]]);CHOICE_AND_VALUES.push([CHOICE_USE_REMOTE_PREVENT_REBUILD,[preferred,!1]]);CHOICE_AND_VALUES.push([CHOICE_USE_MINE_PREVENT_REBUILD,[!0,!1]])}else if(rebuildRecommended){CHOICE_AND_VALUES.push([CHOICE_USE_REMOTE,[preferred,!1]]);CHOICE_AND_VALUES.push([CHOICE_USE_MINE,[!0,!1]]);CHOICE_AND_VALUES.push([CHOICE_USE_REMOTE_WITH_REBUILD,[!0,!0]]);CHOICE_AND_VALUES.push([CHOICE_USE_MINE_WITH_REBUILD,[!0,!0]])}else{CHOICE_AND_VALUES.push([CHOICE_USE_REMOTE,[preferred,!1]]);CHOICE_AND_VALUES.push([CHOICE_USE_MINE,[!0,!1]])}CHOICE_AND_VALUES.push([CHOICE_DISMISS,[!1,!1]]);const CHOICES=Object.fromEntries(CHOICE_AND_VALUES),retKey=await this.core.confirm.askSelectStringDialogue(message,Object.keys(CHOICES),{title:$msg("TweakMismatchResolve.Title.TweakResolving"),timeout:60,defaultAction:CHOICE_DISMISS});return retKey?CHOICES[retKey]:[!1,!1]}async _askResolvingMismatchedTweaks(){if(!this.core.replicator.tweakSettingsMismatched)return"OK";const tweaks=this.core.replicator.preferredTweakValue;if(!tweaks)return"IGNORE";const preferred=extractObject(TweakValuesShouldMatchedTemplate,tweaks),[conf,rebuildRequired]=await this.services.tweakValue.checkAndAskResolvingMismatched(preferred);if(!conf)return"IGNORE";if(!0===conf){await this.core.replicator.setPreferredRemoteTweakSettings(this.settings);rebuildRequired&&await this.core.rebuilder.$rebuildRemote();Logger("Tweak values on the remote server have been updated. Your other device will see this message.",LOG_LEVEL_NOTICE);return"CHECKAGAIN"}if(conf){this.settings={...this.settings,...conf};await this.core.replicator.setPreferredRemoteTweakSettings(this.settings);await this.services.setting.saveSettingData();rebuildRequired&&await this.core.rebuilder.$fetchLocal();Logger("Configuration has been updated as configured by the other device.",LOG_LEVEL_NOTICE);return"CHECKAGAIN"}return"IGNORE"}async _fetchRemotePreferredTweakValues(trialSetting){const replicator=await this.services.replicator.getNewReplicator(trialSetting);if(!replicator){this._log("The remote type is not supported for fetching preferred tweak values.",LOG_LEVEL_NOTICE);return!1}if(await replicator.tryConnectRemote(trialSetting)){const preferred=await replicator.getRemotePreferredTweakValues(trialSetting);if(preferred)return preferred;this._log("Failed to get the preferred tweak values from the remote server.",LOG_LEVEL_NOTICE);return!1}this._log("Failed to connect to the remote server.",LOG_LEVEL_NOTICE);return!1}async _checkAndAskUseRemoteConfiguration(trialSetting){const preferred=await this.services.tweakValue.fetchRemotePreferred(trialSetting);return preferred?await this.services.tweakValue.askUseRemoteConfiguration(trialSetting,preferred):{result:!1,requireFetch:!1}}async _askUseRemoteConfiguration(trialSetting,preferred){const items=Object.entries(TweakValuesShouldMatchedTemplate);let rebuildRequired=!1,rebuildRecommended=!1,differenceCount=0;const tableRows=[];for(const v2 of items){const key3=v2[0],remoteValueForDisplay=escapeMarkdownValue(preferred[key3]),currentValueForDisplay=`${escapeMarkdownValue(null==trialSetting?void 0:trialSetting[key3])}`;if((null==trialSetting?void 0:trialSetting[key3])!==preferred[key3]){-1!==IncompatibleChanges.indexOf(key3)&&(rebuildRequired=!0);for(const pattern of IncompatibleChangesInSpecificPattern){if(pattern.key!==key3)continue;const isFromConditionMet="from"in pattern&&pattern.from===(null==trialSetting?void 0:trialSetting[key3]),isToConditionMet="to"in pattern&&pattern.to===preferred[key3];(isFromConditionMet||isToConditionMet)&&(pattern.isRecommendation?rebuildRecommended=!0:rebuildRequired=!0)}-1!==CompatibleButLossyChanges.indexOf(key3)&&(rebuildRecommended=!0);tableRows.push($msg("TweakMismatchResolve.Table.Row",{name:confName(key3),self:currentValueForDisplay,remote:remoteValueForDisplay}));differenceCount++}}if(0===differenceCount){this._log("The settings in the remote database are the same as the local database.",LOG_LEVEL_NOTICE);return{result:!1,requireFetch:!1}}const additionalMessage=rebuildRequired&&this.core.settings.isConfigured?$msg("TweakMismatchResolve.Message.UseRemote.WarningRebuildRequired"):"",additionalMessage2=rebuildRecommended&&this.core.settings.isConfigured?$msg("TweakMismatchResolve.Message.UseRemote.WarningRebuildRecommended"):"",table2=$msg("TweakMismatchResolve.Table",{rows:tableRows.join("\n")}),message=$msg("TweakMismatchResolve.Message.Main",{table:table2,additionalMessage:[additionalMessage,additionalMessage2].filter(v2=>v2).join("\n")}),CHOICE_USE_REMOTE=$msg("TweakMismatchResolve.Action.UseConfigured"),CHOICE_DISMISS=$msg("TweakMismatchResolve.Action.Dismiss"),CHOICES=[CHOICE_USE_REMOTE,CHOICE_DISMISS],retKey=await this.core.confirm.askSelectStringDialogue(message,CHOICES,{title:$msg("TweakMismatchResolve.Title.UseRemoteConfig"),timeout:0,defaultAction:CHOICE_DISMISS});return retKey?retKey===CHOICE_DISMISS?{result:!1,requireFetch:!1}:retKey===CHOICE_USE_REMOTE?{result:{...trialSetting,...preferred},requireFetch:rebuildRequired}:{result:!1,requireFetch:!1}:{result:!1,requireFetch:!1}}onBindFunction(core,services){services.tweakValue.fetchRemotePreferred.setHandler(this._fetchRemotePreferredTweakValues.bind(this));services.tweakValue.checkAndAskResolvingMismatched.setHandler(this._checkAndAskResolvingMismatchedTweaks.bind(this));services.tweakValue.askResolvingMismatched.setHandler(this._askResolvingMismatchedTweaks.bind(this));services.tweakValue.checkAndAskUseRemoteConfiguration.setHandler(this._checkAndAskUseRemoteConfiguration.bind(this));services.tweakValue.askUseRemoteConfiguration.setHandler(this._askUseRemoteConfiguration.bind(this));services.replication.checkConnectionFailure.addHandler(this._anyAfterConnectCheckFailed.bind(this))}};ModuleLiveSyncMain=class extends AbstractModule{async _onLiveSyncReady(){if(!await this.core.services.appLifecycle.onLayoutReady())return!1;eventHub.emitEvent(EVENT_LAYOUT_READY);if(this.settings.suspendFileWatching||this.settings.suspendParseReplicationResult){const ANSWER_KEEP=$msg("moduleLiveSyncMain.optionKeepLiveSyncDisabled"),ANSWER_RESUME=$msg("moduleLiveSyncMain.optionResumeAndRestart"),message=$msg("moduleLiveSyncMain.msgScramEnabled",{fileWatchingStatus:this.settings.suspendFileWatching?"suspended":"active",parseReplicationStatus:this.settings.suspendParseReplicationResult?"suspended":"active"});if(await this.core.confirm.askSelectStringDialogue(message,[ANSWER_KEEP,ANSWER_RESUME],{defaultAction:ANSWER_KEEP,title:$msg("moduleLiveSyncMain.titleScramEnabled")})==ANSWER_RESUME){this.settings.suspendFileWatching=!1;this.settings.suspendParseReplicationResult=!1;await this.saveSettings();this.services.appLifecycle.scheduleRestart();return!1}}if(!await this.services.databaseEvents.initialiseDatabase(!1,!1))return!1;if(!await this.core.services.appLifecycle.onFirstInitialise())return!1;await this.services.control.applySettings();fireAndForget(async()=>{this._log($msg("moduleLiveSyncMain.logAdditionalSafetyScan"),LOG_LEVEL_VERBOSE);await this.services.appLifecycle.onScanningStartupIssues()?this._log($msg("moduleLiveSyncMain.logSafetyScanCompleted"),LOG_LEVEL_VERBOSE):this._log($msg("moduleLiveSyncMain.logSafetyScanFailed"),LOG_LEVEL_NOTICE)});return!0}_wireUpEvents(){eventHub.onEvent(EVENT_SETTING_SAVED,settings=>{fireAndForget(async()=>{var _a8,_b5,_c3;try{await this.core.services.control.applySettings();void 0!==(null!=(_b5=null==(_a8=this.core.services.setting.currentSettings())?void 0:_a8.displayLanguage)?_b5:void 0)&&setLang(null==(_c3=this.core.services.setting.currentSettings())?void 0:_c3.displayLanguage);eventHub.emitEvent("reload-setting-tab")}catch(e3){this._log("Error in Setting Save Event",LOG_LEVEL_NOTICE);this._log(e3,LOG_LEVEL_VERBOSE)}})});return Promise.resolve(!0)}async _onLiveSyncLoad(){initialiseWorkerModule();await this.services.appLifecycle.onWireUpEvents();eventHub.emitEvent("plugin-loaded");this._log($msg("moduleLiveSyncMain.logLoadingPlugin"));if(!await this.services.appLifecycle.onInitialise()){this._log($msg("moduleLiveSyncMain.logPluginInitCancelled"),LOG_LEVEL_NOTICE);return!1}this._log($msg("moduleLiveSyncMain.logPluginVersion",{manifestVersion:"0.25.57",packageVersion:"0.25.57"}));await this.services.setting.loadSettings();if(!await this.services.appLifecycle.onSettingLoaded()){this._log($msg("moduleLiveSyncMain.logPluginInitCancelled"),LOG_LEVEL_NOTICE);return!1}const lsKey="obsidian-live-sync-ver"+this.services.vault.getVaultName(),last_version=localStorage.getItem(lsKey);~~(versionNumberString2Number("0.25.57")/1e3)>this.settings.lastReadUpdates&&this.settings.isConfigured&&this._log($msg("moduleLiveSyncMain.logReadChangelog"),LOG_LEVEL_NOTICE);if(last_version&&Number(last_version)<12){this.settings.liveSync=!1;this.settings.syncOnSave=!1;this.settings.syncOnEditorSave=!1;this.settings.syncOnStart=!1;this.settings.syncOnFileOpen=!1;this.settings.syncAfterMerge=!1;this.settings.periodicReplication=!1;this.settings.versionUpFlash=$msg("moduleLiveSyncMain.logVersionUpdate");await this.saveSettings()}localStorage.setItem(lsKey,"12");await this.services.database.openDatabase({databaseEvents:this.services.databaseEvents,replicator:this.services.replicator});await this.core.services.appLifecycle.onLoaded();await Promise.all(this.core.addOns.map(e3=>e3.onload()));return!0}onBindFunction(core,services){super.onBindFunction(core,services);services.appLifecycle.onReady.addHandler(this._onLiveSyncReady.bind(this));services.appLifecycle.onWireUpEvents.addHandler(this._wireUpEvents.bind(this));services.appLifecycle.onLoad.addHandler(this._onLiveSyncLoad.bind(this))}};ModuleBasicMenu=class extends AbstractModule{_everyOnloadStart(){this.addCommand({id:"livesync-replicate",name:"Replicate now",callback:async()=>{await this.services.replication.replicate()}});this.addCommand({id:"livesync-dump",name:"Dump information of this doc ",callback:()=>{const file=this.services.vault.getActiveFilePath();file&&fireAndForget(()=>this.localDatabase.getDBEntry(file,{},!0,!1))}});this.addCommand({id:"livesync-toggle",name:"Toggle LiveSync",callback:async()=>{if(this.settings.liveSync){this.settings.liveSync=!1;this._log("LiveSync Disabled.",LOG_LEVEL_NOTICE)}else{this.settings.liveSync=!0;this._log("LiveSync Enabled.",LOG_LEVEL_NOTICE)}await this.services.control.applySettings();await this.services.setting.saveSettingData()}});this.addCommand({id:"livesync-suspendall",name:"Toggle All Sync.",callback:async()=>{if(this.services.appLifecycle.isSuspended()){this.services.appLifecycle.setSuspended(!1);this._log("Self-hosted LiveSync resumed",LOG_LEVEL_NOTICE)}else{this.services.appLifecycle.setSuspended(!0);this._log("Self-hosted LiveSync suspended",LOG_LEVEL_NOTICE)}await this.services.control.applySettings();await this.services.setting.saveSettingData()}});this.addCommand({id:"livesync-scan-files",name:"Scan storage and database again",callback:async()=>{await this.services.vault.scanVault(!0)}});this.addCommand({id:"livesync-runbatch",name:"Run pended batch processes",callback:async()=>{await this.services.fileProcessing.commitPendingFileEvents()}});this.addCommand({id:"livesync-abortsync",name:"Abort synchronization immediately",callback:()=>{this.core.replicator.terminateSync()}});return Promise.resolve(!0)}onBindFunction(core,services){services.appLifecycle.onInitialise.addHandler(this._everyOnloadStart.bind(this))}};LiveSyncBaseCore=class{constructor(serviceHub,serviceModuleInitialiser,extraModuleInitialiser,addOnsInitialiser,featuresInitialiser){this.addOns=[];this._services=void 0;this.modules=[];this._services=serviceHub;this._serviceModules=serviceModuleInitialiser(this,serviceHub);const extraModules=extraModuleInitialiser(this);this.registerModules(extraModules);this.initialiseServiceFeatures();featuresInitialiser(this);const addOns=addOnsInitialiser(this);for(const addOn of addOns)this._registerAddOn(addOn);this.bindModuleFunctions()}_registerAddOn(addOn){this.addOns.push(addOn);this.services.appLifecycle.onUnload.addHandler(()=>Promise.resolve(addOn.onunload()).then(()=>!0))}getAddOn(cls){for(const addon of this.addOns)if(addon.constructor.name==cls)return addon}get services(){if(!this._services)throw new Error("Services not initialised yet");return this._services}get serviceModules(){return this._serviceModules}getModule(constructor){for(const module2 of this.modules)if(module2.constructor===constructor)return module2;throw new Error(`Module ${constructor} not found or not loaded.`)}_registerModule(module2){this.modules.push(module2)}registerModules(extraModules=[]){this._registerModule(new ModuleLiveSyncMain(this));this._registerModule(new ModuleConflictChecker(this));this._registerModule(new ModuleReplicatorMinIO(this));this._registerModule(new ModuleReplicatorCouchDB(this));this._registerModule(new ModuleReplicator(this));this._registerModule(new ModuleConflictResolver(this));this._registerModule(new ModulePeriodicProcess(this));this._registerModule(new ModuleResolvingMismatchedTweaks(this));this._registerModule(new ModuleBasicMenu(this));for(const module2 of extraModules)this._registerModule(module2)}bindModuleFunctions(){var _a8,_b5;for(const module2 of this.modules)if(module2 instanceof AbstractModule){module2.onBindFunction(this,this.services);__$checkInstanceBinding(module2)}else this.services.API.addLog(`Module ${null!=(_b5=null==(_a8=null==module2?void 0:module2.constructor)?void 0:_a8.name)?_b5:"unknown"} does not have onBindFunction, skipping binding.`,LOG_LEVEL_INFO)}get confirm(){return this.services.UI.confirm}get settings(){return this.services.setting.settings}set settings(value){this.services.setting.settings=value}getSettings(){return this.settings}get localDatabase(){return this.services.database.localDatabase}getDatabase(){return this.localDatabase.localDatabase}get simpleStore(){return this.services.keyValueDB.simpleStore}get replicator(){return this.services.replicator.getActiveReplicator()}get kvDB(){return this.services.keyValueDB.kvDB}get storageAccess(){return this.serviceModules.storageAccess}get databaseFileAccess(){return this.serviceModules.databaseFileAccess}get fileHandler(){return this.serviceModules.fileHandler}get rebuilder(){return this.serviceModules.rebuilder}initialiseServiceFeatures(){useTargetFilters(this);usePrepareDatabaseForUse(this);useRemoteConfigurationMigration(this)}};ModuleObsidianMenu=class extends AbstractModule{_everyOnloadStart(){(0,import_obsidian.addIcon)("replicate",'\n \n \n \n \n ');this.addRibbonIcon("replicate",$msg("moduleObsidianMenu.replicate"),async()=>{await this.services.replication.replicate(!0)}).addClass("livesync-ribbon-replicate");this.addCommand({id:"livesync-checkdoc-conflicted",name:"Resolve if conflicted.",editorCallback:(editor,view)=>{const file=view.file;file&&this.services.conflict.queueCheckForIfOpen(file.path)}});return Promise.resolve(!0)}onBindFunction(core,services){services.appLifecycle.onInitialise.addHandler(this._everyOnloadStart.bind(this))}};SETTING_HEADER="````yaml:livesync-setting\n";ModuleObsidianSettingsAsMarkdown=class extends AbstractModule{_everyOnloadStart(){this.addCommand({id:"livesync-export-config",name:"Write setting markdown manually",checkCallback:checking=>{if(checking)return""!=this.settings.settingSyncFile;fireAndForget(async()=>{await this.services.setting.saveSettingData()})}});this.addCommand({id:"livesync-import-config",name:"Parse setting file",editorCheckCallback:(checking,editor,ctx)=>{if(checking){const doc=editor.getValue();return""!=this.extractSettingFromWholeText(doc).body}if(ctx.file){const file=ctx.file;fireAndForget(async()=>await this.checkAndApplySettingFromMarkdown(file.path,!1))}}});eventHub.onEvent("event-file-changed",info3=>{fireAndForget(()=>this.checkAndApplySettingFromMarkdown(info3.file,info3.automated))});eventHub.onEvent(EVENT_SETTING_SAVED,settings=>{""!=settings.settingSyncFile&&fireAndForget(()=>this.saveSettingToMarkdown(settings.settingSyncFile))});return Promise.resolve(!0)}extractSettingFromWholeText(data){if(-1===data.indexOf(SETTING_HEADER))return{preamble:data,body:"",postscript:""};const startMarkerPos=data.indexOf(SETTING_HEADER),dataStartPos=-1==startMarkerPos?data.length:startMarkerPos,endMarkerPos=-1==startMarkerPos?data.length:data.indexOf("\n````",dataStartPos),dataEndPos=-1==endMarkerPos?data.length:endMarkerPos,body=data.substring(dataStartPos+26,dataEndPos);return{preamble:data.substring(0,dataStartPos),body,postscript:data.substring(dataEndPos+5+1)}}async parseSettingFromMarkdown(filename,data){if(!await this.core.storageAccess.isExists(filename))return{preamble:"",body:"",postscript:""};if(data)return this.extractSettingFromWholeText(data);const parseData=null!=data?data:await this.core.storageAccess.readFileText(filename);return this.extractSettingFromWholeText(parseData)}async checkAndApplySettingFromMarkdown(filename,automated){if(automated&&!this.settings.notifyAllSettingSyncFile&&(!this.settings.settingSyncFile||this.settings.settingSyncFile!=filename)){this._log(`Setting file (${filename}) does not match the current configuration. skipped.`,LOG_LEVEL_DEBUG);return}const{body}=await this.parseSettingFromMarkdown(filename);let newSetting={};try{newSetting=(0,import_obsidian.parseYaml)(body)}catch(ex){this._log("Could not parse YAML",LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE);return}if("settingSyncFile"in newSetting&&newSetting.settingSyncFile!=filename){this._log("This setting file seems to backed up one. Please fix the filename or settingSyncFile value.",automated?LOG_LEVEL_INFO:LOG_LEVEL_NOTICE);return}let settingToApply={...DEFAULT_SETTINGS};settingToApply={...settingToApply,...newSetting};if(!(null==settingToApply?void 0:settingToApply.writeCredentialsForSettingSync)){settingToApply.couchDB_USER=this.settings.couchDB_USER;settingToApply.couchDB_PASSWORD=this.settings.couchDB_PASSWORD;settingToApply.passphrase=this.settings.passphrase}if(!isObjectDifferent(this.generateSettingForMarkdown(this.settings,settingToApply.writeCredentialsForSettingSync),this.generateSettingForMarkdown(settingToApply))){this._log("Setting markdown has been detected, but not changed.",automated?LOG_LEVEL_INFO:LOG_LEVEL_NOTICE);return}const addMsg=this.settings.settingSyncFile!=filename?" (This is not-active file)":"";this.core.confirm.askInPopup("apply-setting-from-md",`Setting markdown ${filename}${addMsg} has been detected. Apply this from {HERE}.`,anchor=>{anchor.text="HERE";anchor.addEventListener("click",()=>{fireAndForget(async()=>{const APPLY_AND_RESTART="Apply settings and restart obsidian",APPLY_AND_REBUILD="Apply settings and restart obsidian with red_flag_rebuild.md",APPLY_AND_FETCH="Apply settings and restart obsidian with red_flag_fetch.md",result=await this.core.confirm.askSelectStringDialogue("Ready for apply the setting.",[APPLY_AND_RESTART,"Apply settings",APPLY_AND_FETCH,APPLY_AND_REBUILD,"Cancel"],{defaultAction:APPLY_AND_RESTART});if("Apply settings"==result||result==APPLY_AND_RESTART||result==APPLY_AND_REBUILD||result==APPLY_AND_FETCH){await this.services.setting.applyExternalSettings(settingToApply,!0);this.services.setting.clearUsedPassphrase();if("Apply settings"==result){this._log("Loaded settings have been applied!",LOG_LEVEL_NOTICE);return}result==APPLY_AND_REBUILD&&await this.core.rebuilder.scheduleRebuild();result==APPLY_AND_FETCH&&await this.core.rebuilder.scheduleFetch();this.services.appLifecycle.performRestart()}})})})}generateSettingForMarkdown(settings,keepCredential){const saveData={...settings||this.settings};delete saveData.encryptedCouchDBConnection;delete saveData.encryptedPassphrase;delete saveData.additionalSuffixOfDatabaseName;if(!saveData.writeCredentialsForSettingSync&&!keepCredential){delete saveData.couchDB_USER;delete saveData.couchDB_PASSWORD;delete saveData.passphrase;delete saveData.jwtKey;delete saveData.jwtKid;delete saveData.jwtSub;delete saveData.couchDB_CustomHeaders;delete saveData.bucketCustomHeaders}return saveData}async saveSettingToMarkdown(filename){const saveData=this.generateSettingForMarkdown();if(!await this.core.storageAccess.isExists(filename)){await this.core.storageAccess.ensureDir(filename);const initialContent='This file contains Self-hosted LiveSync settings as YAML.\nExcept for the `livesync-setting` code block, we can add a note for free.\n\nIf the name of this file matches the value of the "settingSyncFile" setting inside the `livesync-setting` block, LiveSync will tell us whenever the settings change. We can decide to accept or decline the remote setting. (In other words, we can back up this file by renaming it to another name).\n\nWe can perform a command in this file.\n- `Parse setting file` : load the setting from the file.\n\n**Note** Please handle it with all of your care if you have configured to write credentials in.\n\n\n';await this.core.storageAccess.writeFileAuto(filename,initialContent+SETTING_HEADER+"\n\n````")}const data=await this.core.storageAccess.readFileText(filename),{preamble,body,postscript}=this.extractSettingFromWholeText(data),newBody=(0,import_obsidian.stringifyYaml)(saveData);if(newBody==body)this._log("Markdown setting: Nothing had been changed",LOG_LEVEL_VERBOSE);else{await this.core.storageAccess.writeFileAuto(filename,preamble+SETTING_HEADER+newBody+"\n````"+postscript);this._log(`Markdown setting: ${filename} has been updated!`,LOG_LEVEL_VERBOSE)}}onBindFunction(core,services){services.appLifecycle.onInitialise.addHandler(this._everyOnloadStart.bind(this))}};ConditionType=(ConditionType2=>{ConditionType2.PLATFORM_CASE_INSENSITIVE="platform-case-insensitive";ConditionType2.PLATFORM_CASE_SENSITIVE="platform-case-sensitive";ConditionType2.REMOTE_CASE_SENSITIVE="remote-case-sensitive";return ConditionType2})(ConditionType||{});RuleLevel=(RuleLevel2=>{RuleLevel2[RuleLevel2.Must=0]="Must";RuleLevel2[RuleLevel2.Necessary=1]="Necessary";RuleLevel2[RuleLevel2.Recommended=2]="Recommended";RuleLevel2[RuleLevel2.Optional=3]="Optional";return RuleLevel2})(RuleLevel||{});DoctorRegulationV0_25_27={version:"0.25.27",rules:{sendChunksBulk:{value:!1,reason:"This is an obsolete setting and we should not enable this no more",level:0},sendChunksBulkMaxSize:{value:1,reason:"This is an obsolete setting and we should not enable this no more",level:0},doNotUseFixedRevisionForChunks:{value:!0,reason:"This value has been reverted at v0.24.16 for garbage collection of chunks.",level:2},handleFilenameCaseSensitive:{value:!1,reason:"If Self-hosted LiveSync is Case-Sensitive, unexpected file operations may occur when synchronising with Windows, Android or other devices. This value should only be enabled if all devices have a Case-Sensitive file system.",requireRebuild:!0,level:2},useIndexedDBAdapter:{value:!0,requireRebuildLocal:!0,level:3,reason:"The old option is active. This is not a performance-appropriate setting."},useEden:{reason:"This option is no longer recommended.",level:3,value:!1},hashAlg:{obsoleteValues:["sha1","xxhash32",""],value:"xxhash64",level:1,reason:"The hash function is set to the old fallback. This should be retried. This may result in a change to the new fallback."},disableCheckingConfigMismatch:{value:!1,level:2,reason:"If you disabled an older version of the dialogue because it was hard to understand, try it once in the latest version."},enableCompression:{value:!1,level:2,requireRebuild:!0,reason:"This option will be sunset soon."},usePluginSyncV2:{value:!0,level:2,reason:"This option is now enabled by default. If you have problems with the new plugin, please report them."},chunkSplitterVersion:{value:"v3-rabin-karp",valueDisplay:ChunkAlgorithmNames["v3-rabin-karp"],level:2,reason:"Chunk splitting has been optimised for more effective de-duplication. This is the new default value."},customChunkSize:{min:55,value:60,valueDisplay:"60 (detected on if less than 55)",level:2,detectionFunc:settings=>"v3-rabin-karp"===(null==settings?void 0:settings.chunkSplitterVersion)&&!isCloudantURI((null==settings?void 0:settings.couchDB_URI)||""),reason:"With the V3 Rabin-Karp chunk splitter and Self-hosted CouchDB, the chunk size is set to 60 (means around 6MB) by default. This is in effect the maximum chunk size, which in practice is divided more finely."},E2EEAlgorithm:{value:E2EEAlgorithms.V2,valueDisplay:E2EEAlgorithmNames[E2EEAlgorithms.V2],level:2,reasonFunc:_=>$msg("Doctor.RULES.E2EE_V02500.REASON")},useIndexedDBAdapter:void 0}};DoctorRegulation=DoctorRegulationV0_25_27;RebuildOptions_AutomaticAcceptable=0,RebuildOptions_ConfirmIfRequired=1,RebuildOptions_SkipEvenIfRequired=2;ModuleMigration=class extends AbstractModule{async migrateUsingDoctor(skipRebuild=!1,activateReason="updated",forceRescan=!1){const{shouldRebuild,shouldRebuildLocal,isModified,settings}=await performDoctorConsultation(this.core,this.settings,{localRebuild:skipRebuild?RebuildOptions_SkipEvenIfRequired:RebuildOptions_AutomaticAcceptable,remoteRebuild:skipRebuild?RebuildOptions_SkipEvenIfRequired:RebuildOptions_AutomaticAcceptable,activateReason,forceRescan});if(isModified){this.settings=settings;await this.saveSettings()}if(!skipRebuild){if(shouldRebuild){await this.core.rebuilder.scheduleRebuild();this.services.appLifecycle.performRestart();return!1}if(shouldRebuildLocal){await this.core.rebuilder.scheduleFetch();this.services.appLifecycle.performRestart();return!1}}return!0}async migrateDisableBulkSend(){if(this.settings.sendChunksBulk){this._log($msg("moduleMigration.logBulkSendCorrupted"),LOG_LEVEL_NOTICE);this.settings.sendChunksBulk=!1;this.settings.sendChunksBulkMaxSize=1;await this.saveSettings()}}async initialMessage(){const manager=this.core.getModule(SetupManager);return await manager.startOnBoarding()}async askAgainForSetupURI(){const message=$msg("moduleMigration.msgRecommendSetupUri",{URI_DOC:$msg("moduleMigration.docUri")}),USE_MINIMAL=$msg("moduleMigration.optionSetupWizard"),USE_P2P=$msg("moduleMigration.optionSetupViaP2P"),USE_SETUP=$msg("moduleMigration.optionManualSetup"),NEXT=$msg("moduleMigration.optionRemindNextLaunch"),ret=await this.core.confirm.askSelectStringDialogue(message,[USE_MINIMAL,USE_SETUP,USE_P2P,NEXT],{title:$msg("moduleMigration.titleRecommendSetupUri"),defaultAction:USE_MINIMAL});if(ret===USE_MINIMAL){eventHub.emitEvent("request-open-setting-wizard");return!1}if(ret===USE_P2P){eventHub.emitEvent(EVENT_REQUEST_OPEN_P2P);return!1}if(ret===USE_SETUP){eventHub.emitEvent("request-open-settings");return!1}return!1}async hasIncompleteDocs(force=!1){if(await this.core.kvDB.get("checkIncompleteDocs")&&!force){this._log("Incomplete docs check already done, skipping.",LOG_LEVEL_VERBOSE);return Promise.resolve(!0)}this._log("Checking for incomplete documents...",LOG_LEVEL_NOTICE,"check-incomplete");const errorFiles=[];for await(const metaDoc of this.localDatabase.findAllNormalDocs({conflicts:!0})){const path2=this.getPath(metaDoc);if(!isValidPath(path2))continue;if(!await this.services.vault.isTargetFile(path2))continue;if(!isMetaEntry(metaDoc))continue;const doc=await this.localDatabase.getDBEntryFromMeta(metaDoc);if(!doc||!isLoadedEntry(doc))continue;if(isDeletedEntry(doc))continue;const isConflicted=(null==metaDoc?void 0:metaDoc._conflicts)&&metaDoc._conflicts.length>0;let storageFileContent;try{storageFileContent=await this.core.storageAccess.readHiddenFileBinary(path2)}catch(e3){Logger(`Failed to read file ${path2}: Possibly unprocessed or missing`);Logger(e3,LOG_LEVEL_VERBOSE);continue}const sizeOnStorage=storageFileContent.byteLength,recordedSize=doc.size,actualSize=readAsBlob(doc).size;if(recordedSize!==actualSize||sizeOnStorage!==actualSize||sizeOnStorage!==recordedSize||isConflicted){const contentMatched=await isDocContentSame(doc.data,storageFileContent);errorFiles.push({path:path2,recordedSize,actualSize,storageSize:sizeOnStorage,contentMatched,isConflicted});Logger(`Size mismatch for ${path2}: ${recordedSize} (DB Recorded) , ${actualSize} (DB Stored) , ${sizeOnStorage} (Storage Stored), ${contentMatched?"Content Matched":"Content Mismatched"} ${isConflicted?"Conflicted":"Not Conflicted"}`)}}if(0==errorFiles.length){Logger("No size mismatches found",LOG_LEVEL_NOTICE);await this.core.kvDB.set("checkIncompleteDocs",!0);return Promise.resolve(!0)}Logger(`Found ${errorFiles.length} size mismatches`,LOG_LEVEL_NOTICE);const recoverable=errorFiles.filter(e3=>e3.recordedSize===e3.storageSize&&!e3.isConflicted),unrecoverable=errorFiles.filter(e3=>e3.recordedSize!==e3.storageSize||e3.isConflicted),fileInfo=e3=>`${e3.path} (M: ${e3.recordedSize}, A: ${e3.actualSize}, S: ${e3.storageSize}) ${e3.isConflicted?"(Conflicted)":""}`,messageUnrecoverable=unrecoverable.length>0?$msg("moduleMigration.fix0256.messageUnrecoverable",{filesNotRecoverable:unrecoverable.map(e3=>`- ${fileInfo(e3)}`).join("\n")}):"",message=$msg("moduleMigration.fix0256.message",{files:recoverable.map(e3=>`- ${fileInfo(e3)}`).join("\n"),messageUnrecoverable}),CHECK_IT_LATER=$msg("moduleMigration.fix0256.buttons.checkItLater"),FIX=$msg("moduleMigration.fix0256.buttons.fix"),DISMISS=$msg("moduleMigration.fix0256.buttons.DismissForever"),ret=await this.core.confirm.askSelectStringDialogue(message,[CHECK_IT_LATER,FIX,DISMISS],{title:$msg("moduleMigration.fix0256.title"),defaultAction:CHECK_IT_LATER});if(ret==FIX)for(const file of recoverable){const stubFile=await this.core.storageAccess.getFileStub(file.path);if(null!=stubFile){stubFile.stat.mtime=Date.now();await this.core.fileHandler.storeFileToDB(stubFile,!0,!1)?Logger(`Successfully restored ${file.path} from storage`):Logger(`Failed to restore ${file.path} from storage`,LOG_LEVEL_NOTICE)}else Logger(`Could not find stub file for ${file.path}`,LOG_LEVEL_NOTICE)}else ret===DISMISS&&await this.core.kvDB.set("checkIncompleteDocs",!0);return Promise.resolve(!0)}async hasCompromisedChunks(){Logger("Checking for compromised chunks...",LOG_LEVEL_VERBOSE);if(!this.settings.encrypt)return!0;const localCompromised=await countCompromisedChunks(this.localDatabase.localDatabase),remote=this.services.replicator.getActiveReplicator(),remoteCompromised=this.services.API.isOnline?await(null==remote?void 0:remote.countCompromisedChunks()):0;if(!1===localCompromised){Logger("Failed to count compromised chunks in local database",LOG_LEVEL_NOTICE);return!1}if(!1===remoteCompromised){Logger("Failed to count compromised chunks in remote database",LOG_LEVEL_NOTICE);return!1}if(0===remoteCompromised&&0===localCompromised)return!0;Logger(`Found compromised chunks : ${localCompromised} in local, ${remoteCompromised} in remote`,LOG_LEVEL_NOTICE);const title=$msg("moduleMigration.insecureChunkExist.title"),msg=$msg("moduleMigration.insecureChunkExist.message"),REBUILD=$msg("moduleMigration.insecureChunkExist.buttons.rebuild"),FETCH=$msg("moduleMigration.insecureChunkExist.buttons.fetch"),DISMISS=$msg("moduleMigration.insecureChunkExist.buttons.later"),buttons=[REBUILD,FETCH,DISMISS];0!=remoteCompromised&&buttons.splice(buttons.indexOf(FETCH),1);const result=await this.core.confirm.askSelectStringDialogue(msg,buttons,{title,defaultAction:DISMISS,timeout:0});if(result===REBUILD){await this.core.rebuilder.scheduleRebuild();this.services.appLifecycle.performRestart();return!1}if(result===FETCH){await this.core.rebuilder.scheduleFetch();this.services.appLifecycle.performRestart();return!1}this._log($msg("moduleMigration.insecureChunkExist.laterMessage"),LOG_LEVEL_NOTICE);return!0}async _everyOnFirstInitialize(){if(!this.localDatabase.isReady){this._log($msg("moduleMigration.logLocalDatabaseNotReady"),LOG_LEVEL_NOTICE);return!1}if(this.settings.isConfigured){if(!await this.hasCompromisedChunks())return!1;if(!await this.hasIncompleteDocs())return!1;if(!await this.migrateUsingDoctor(!1))return!1;await this.migrateDisableBulkSend()}if(!this.settings.isConfigured){if(!await this.initialMessage()){this._log($msg("moduleMigration.logSetupCancelled"),LOG_LEVEL_NOTICE);return!1}if(!await this.migrateUsingDoctor(!0))return!1}return!0}_everyOnLayoutReady(){eventHub.onEvent(EVENT_REQUEST_RUN_DOCTOR,async reason=>{await this.migrateUsingDoctor(!1,reason,!0)});eventHub.onEvent(EVENT_REQUEST_RUN_FIX_INCOMPLETE,async()=>{await this.hasIncompleteDocs(!0)});return Promise.resolve(!0)}onBindFunction(core,services){super.onBindFunction(core,services);services.appLifecycle.onLayoutReady.addHandler(this._everyOnLayoutReady.bind(this));services.appLifecycle.onFirstInitialise.addHandler(this._everyOnFirstInitialize.bind(this))}};enableI18nFeature=function createServiceFeature(featureFunction){return featureFunction}(async({services:{setting,API}})=>{let isChanged=!1;const settings=setting.currentSettings();if(""==settings.displayLanguage){const obsidianLanguage=(0,import_obsidian.getLanguage)();if(-1!==SUPPORTED_I18N_LANGS.indexOf(obsidianLanguage)&&obsidianLanguage!=settings.displayLanguage){await setting.applyPartial({displayLanguage:obsidianLanguage});isChanged=!0;setLang(settings.displayLanguage)}else if(""==settings.displayLanguage){await setting.applyPartial({displayLanguage:"def"});setLang(settings.displayLanguage);await setting.saveSettingData()}}if(isChanged){const revert2=$msg("dialog.yourLanguageAvailable.btnRevertToDefault");if(await API.confirm.askSelectStringDialogue($msg("dialog.yourLanguageAvailable"),["OK",revert2],{defaultAction:"OK",title:$msg("dialog.yourLanguageAvailable.Title")})==revert2){await setting.applyPartial({displayLanguage:"def"});setLang(settings.displayLanguage)}await setting.saveSettingData()}return!0});root_219=from_html("If you have unsynchronised changes in your Vault on this device, they will likely diverge from the server's\n versions after the reset. This may result in a large number of file conflicts.
    Furthermore, if conflicts are already present in the server data, they will be synchronised to this device as they are,\n and you will need to resolve them locally.",1);root_413=from_html("To minimise the creation of new conflicts, please select the option that best describes the\n current state of your Vault. The application will then check your files in the most appropriate way based on\n your selection.",1);root_810=from_html("(e.g., after editing many files whilst offline) ",1);root_55=from_html(" ",1);root_37=from_html(" ",1);root_154=from_html("It is strongly advised to create a backup before proceeding. Continuing without a backup may lead\n to data loss.
    If you understand the risks and still wish to proceed, select so.",1);root_136=from_html(" ",1);root_105=from_html(" ",1);root_184=from_html(" ",1);root36=from_html("

    ",1);root_129=from_html("This procedure will first delete all existing synchronisation data from the server. Following this, the server data\n will be completely rebuilt, using the current state of your Vault on this device (including its local database) as the single, authoritative master copy.",1);root_414=from_html(" ",1);root_38=from_html(" ",1);root_144=from_html("You should create a new synchronisation destination and rebuild your data there.
    After that,\n synchronise to a brand new vault on each other device with the new remote one by one.
    ");root_1210=from_html(" ",1);root_95=from_html(" ",1);root_172=from_html(" ",1);root37=from_html("
    ",1);LiveSyncTrysteroReplicator=class extends LiveSyncAbstractReplicator{get rawReplicator(){return this._replicator}get rawHost(){return this._p2pHost}get isChunkSendingSupported(){return!1}getReplicationPBKDF2Salt(_setting,_refresh){return Promise.resolve(new Uint8Array(32))}terminateSync(){}_buildEnv(){const services=this.env.services;return{get settings(){return services.setting.currentSettings()},get db(){return services.database.localDatabase.localDatabase},get simpleStore(){return services.keyValueDB.openSimpleStore("p2p-sync")},get deviceName(){return services.config.getSmallConfig(SETTING_KEY_P2P_DEVICE_NAME)||services.vault.getVaultName()},get platform(){return services.API.getPlatform()},get confirm(){return services.API.confirm},processReplicatedDocs:async docs=>{await services.replication.parseSynchroniseResult(docs)}}}async open(){var _a8;if((!this._replicator||!(null==(_a8=this._p2pHost)?void 0:_a8.isServing))&&this.env.services.setting.currentSettings().P2P_Enabled)try{const env=this._buildEnv(),host=new TrysteroReplicatorP2PServer(env),replicator=new TrysteroReplicator(env,host);this._p2pHost=host;this._replicator=replicator;await replicator.open()}catch(e3){Logger(e3 instanceof Error?e3.message:"Error while opening P2P connection",LOG_LEVEL_NOTICE);Logger(e3,LOG_LEVEL_VERBOSE);this._p2pHost=void 0;this._replicator=void 0}}async close(){if(this._replicator){this._replicator.disableBroadcastChanges();await this._replicator.close();this._replicator=void 0}this._p2pHost=void 0}closeReplication(){var _a8;null==(_a8=this._replicator)||_a8.disconnectFromServer()}get server(){var _a8;return null==(_a8=this._replicator)?void 0:_a8.server}get knownAdvertisements(){var _a8,_b5;return null!=(_b5=null==(_a8=this._replicator)?void 0:_a8.knownAdvertisements)?_b5:[]}enableBroadcastChanges(){var _a8;null==(_a8=this._replicator)||_a8.enableBroadcastChanges()}disableBroadcastChanges(){var _a8;null==(_a8=this._replicator)||_a8.disableBroadcastChanges()}requestStatus(){var _a8;null==(_a8=this._replicator)||_a8.requestStatus()}onNewPeer(peer){var _a8;return null==(_a8=this._replicator)?void 0:_a8.onNewPeer(peer)}onPeerLeaved(peerId){var _a8;null==(_a8=this._replicator)||_a8.onPeerLeaved(peerId)}async replicateFromCommand(showResult=!1){var _a8;await(null==(_a8=this._replicator)?void 0:_a8.replicateFromCommand(showResult))}async replicateFrom(peerId,showNotice=!1){if(!this._replicator)throw new Error("P2P replicator is not open");return await this._replicator.replicateFrom(peerId,showNotice)}async requestSynchroniseToPeer(peerId){if(!this._replicator)throw new Error("P2P replicator is not open");return await this._replicator.requestSynchroniseToPeer(peerId)}async getRemoteConfig(peerId){if(!this._replicator)throw new Error("P2P replicator is not open");return await this._replicator.getRemoteConfig(peerId)}watchPeer(peerId){var _a8;null==(_a8=this._replicator)||_a8.watchPeer(peerId)}unwatchPeer(peerId){var _a8;null==(_a8=this._replicator)||_a8.unwatchPeer(peerId)}async sync(peerId,showNotice=!1){if(!this._replicator)throw new Error("P2P replicator is not open");return await this._replicator.sync(peerId,showNotice)}async makeDecision(decision){var _a8,_b5;await(null==(_b5=null==(_a8=this._replicator)?void 0:_a8.server)?void 0:_b5.makeDecision(decision))}async revokeDecision(decision){var _a8,_b5;await(null==(_b5=null==(_a8=this._replicator)?void 0:_a8.server)?void 0:_b5.revokeDecision(decision))}async makeSureOpened(){var _a8;this._replicator&&(null==(_a8=this._p2pHost)?void 0:_a8.isServing)||await this.open()}async openReplication(_setting,_keepAlive,showResult,_ignoreCleanLock){const logLevel=showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;if(!this._replicator){Logger($msg("P2P.ReplicatorInstanceMissing"),logLevel);return!1}await this._replicator.makeSureOpened();await this._replicator.replicateFromCommand(showResult)}tryConnectRemote(_setting,_showResult){return Promise.resolve(!1)}replicateAllToServer(_setting,_showingNotice,_sendChunksInBulkDisabled){return Promise.resolve(!1)}async selectPeer(settingPeerName,r4,logLevel){var _a8,_b5,_c3,_d2,_e2;const knownPeersOrg=null!=(_b5=null==(_a8=r4.server)?void 0:_a8.knownAdvertisements)?_b5:[];let knownPeers;if(0!=knownPeersOrg.length)knownPeers=knownPeersOrg;else{Logger($msg("P2P.NoKnownPeers"),logLevel);await Promise.race([delay(5e3),eventHub.waitFor(EVENT_ADVERTISEMENT_RECEIVED)]);knownPeers=null!=(_d2=null==(_c3=r4.server)?void 0:_c3.knownAdvertisements)?_d2:[]}const message="Rebuild from which peer?"+(settingPeerName?"\n [*] indicates the peer you have selected before.":""),confirm=this.env.services.UI.confirm,options=[...knownPeers.map(e3=>e3.name+" "+(e3.name==settingPeerName?"[*]":"")+" ("+e3.peerId+")"),"Refresh List","Cancel"],selected=await confirm.askSelectStringDialogue(message,options,{title:"Select a peer to fetch from",defaultAction:"Refresh List"});if(!selected||"Cancel"==selected)return!1;if("Refresh List"==selected){await Promise.race([delay(1e3),eventHub.waitFor(EVENT_ADVERTISEMENT_RECEIVED)]);return this.selectPeer(settingPeerName,r4,logLevel)}const selectedPeerName=selected.split(" ")[0],peerId=null==(_e2=knownPeers.find(e3=>e3.name==selectedPeerName))?void 0:_e2.peerId;if(!peerId){Logger("Failed to find peerId for "+selectedPeerName,logLevel);return!1}return peerId}async tryUntilSuccess(func,repeat,logLevel){if(!this.env.services.UI.confirm){Logger("Cannot find confirm instance.",logLevel);return Promise.reject("Cannot find confirm instance.")}let result;for(;!result;)for(let i2=0;i2{var _a9;await this.makeSureOpened();return null!=(_a9=this._replicator)&&_a9},10,logLevel);if(!1===r4){Logger("Failed to open P2P connection.",logLevel);return!1}const peerId=await this.selectPeer(peerFrom,r4,logLevel);if(!1===peerId){Logger("Failed to connect peer.",logLevel);return!1}this.env.services.setting.currentSettings().P2P_RebuildFrom="";Logger("Fetching from peer "+peerId+".",logLevel);const rep=await r4.replicateFrom(peerId,showingNotice);if(rep.ok){Logger("P2P Fetching has been succeed from "+peerId+".",logLevel);return!0}Logger("Failed to fetch from peer "+peerId+".",logLevel);Logger(rep.error,LOG_LEVEL_VERBOSE);return!1}finally{null==(_a8=this._replicator)||_a8.clearOnSetup()}}tryResetRemoteDatabase(_setting){throw new Error("P2P replication does not support database reset.")}tryCreateRemoteDatabase(_setting){throw new Error("P2P replication does not support database reset.")}markRemoteLocked(_setting,_locked,_lockByClean){throw new Error("P2P replication does not support database lock.")}markRemoteResolved(_setting){Logger("Trying resolving remote-database-lock but P2P replication does not support database lock. This operation has been ignored",LOG_LEVEL_INFO);return Promise.resolve()}resetRemoteTweakSettings(_setting){throw new Error("P2P replication does not support resetting tweaks.")}setPreferredRemoteTweakSettings(_setting){Logger("Trying setting tweak values but P2P replication does not support to do this. This operation has been ignored",LOG_LEVEL_INFO);return Promise.resolve()}fetchRemoteChunks(_missingChunks,_showResult){return Promise.resolve(!1)}getRemoteStatus(_setting){Logger("Trying to get remote status but P2P replication does not support to do this. This operation has been ignored",LOG_LEVEL_INFO);return Promise.resolve(!1)}getRemotePreferredTweakValues(_setting){Logger("Trying to get tweak values but P2P replication does not support to do this. This operation has been ignored",LOG_LEVEL_INFO);return Promise.resolve(!1)}countCompromisedChunks(){Logger("P2P Replicator cannot count compromised chunks",LOG_LEVEL_VERBOSE);return Promise.resolve(0)}getConnectedDeviceList(_setting){Logger("Trying to get connected device list but P2P replication does not support to do this. This operation has been ignored",LOG_LEVEL_INFO);return Promise.resolve(!1)}constructor(env){super(env);this.env=env}};EVENT_P2P_PEER_SHOW_EXTRA_MENU="p2p-peer-show-extra-menu";AcceptedStatus=(AcceptedStatus2=>{AcceptedStatus2.UNKNOWN="Unknown";AcceptedStatus2.ACCEPTED="Accepted";AcceptedStatus2.DENIED="Denied";AcceptedStatus2.ACCEPTED_IN_SESSION="Accepted in session";AcceptedStatus2.DENIED_IN_SESSION="Denied in session";return AcceptedStatus2})(AcceptedStatus||{});ConnectionStatus=(ConnectionStatus2=>{ConnectionStatus2.CONNECTED="Connected";ConnectionStatus2.CONNECTED_LIVE="Connected(live)";ConnectionStatus2.DISCONNECTED="Disconnected";return ConnectionStatus2})(ConnectionStatus||{});root_220=from_html(" ");root_130=from_html('
    ');root_39=from_html(' ');on_click5=(__3,makeDecision)=>makeDecision(!0,!0);on_click_12=(__4,makeDecision)=>makeDecision(!0,!1);root_56=from_html(' ',1);on_click_2=(__5,makeDecision)=>makeDecision(!1,!0);on_click_3=(__6,makeDecision)=>makeDecision(!1,!1);root_68=from_html(' ',1);root_415=from_html(" ",1);on_click_4=(__7,revokeDecision)=>revokeDecision();root_710=from_html('');root_96=from_html('');root_106=from_html('');root_811=from_html('
    ');root38=from_html('
    ');$$css16={hash:"svelte-8nqxsr",code:"tr.svelte-8nqxsr:nth-child(odd) {background-color:var(--background-primary-alt);}.info.svelte-8nqxsr {display:flex;flex-direction:column;justify-content:center;align-items:center;padding:var(--size-4-1) var(--size-4-1);}.peer-id.svelte-8nqxsr {font-size:0.8em;}.status-chips.svelte-8nqxsr {display:flex;flex-direction:column;justify-content:center;align-items:center;\n /* min-width: 10em; */}.buttons.svelte-8nqxsr {display:flex;flex-direction:column;justify-content:center;align-items:center;}.buttons.svelte-8nqxsr .row:where(.svelte-8nqxsr) {display:flex;justify-content:center;align-items:center;flex-wrap:wrap;\n /* padding: var(--size-4-1) var(--size-4-1); */}.chip.svelte-8nqxsr {display:inline-block;padding:4px 8px;margin:4px;border-radius:4px;font-size:0.75em;font-weight:bold;background-color:var(--tag-background);border:var(--tag-border-width) solid var(--tag-border-color);}.chip.connected.svelte-8nqxsr {background-color:var(--background-modifier-success);color:var(--text-normal);}.chip.connected-live.svelte-8nqxsr {background-color:var(--background-modifier-success);border-color:var(--background-modifier-success);color:var(--text-normal);}.chip.accepted.svelte-8nqxsr {background-color:var(--background-modifier-success);color:var(--text-normal);}.chip.waiting.svelte-8nqxsr {background-color:var(--background-secondary);}.chip.unknown.svelte-8nqxsr {background-color:var(--background-primary);color:var(--text-warning);}.chip.denied.svelte-8nqxsr {background-color:var(--background-modifier-error);color:var(--text-error);}.chip.attr.svelte-8nqxsr {background-color:var(--background-secondary);}.button.svelte-8nqxsr {margin:var(--size-4-1);}.button.affirmative.svelte-8nqxsr {background-color:var(--interactive-accent);color:var(--text-normal);}.button.affirmative.svelte-8nqxsr:hover {background-color:var(--interactive-accent-hover);}.button.negative.svelte-8nqxsr {background-color:var(--background-modifier-error);color:var(--text-error);}.button.negative.svelte-8nqxsr:hover {background-color:var(--background-modifier-error-hover);}"};delegate(["click"]);root_131=from_html('

    ');on_click6=(__5,useDefaultRelay)=>useDefaultRelay();on_click_13=(__6,chooseRandom)=>chooseRandom();root_310=from_html('
    Enable P2P Replicator
    Relay settings
    Room ID This can isolate your connections between devices. Use the same Room ID for the same\n devices.
    Password This password is used to encrypt the connection. Use something long enough.
    This device name Device name to identify the device. Please use shorter one for the stable peer\n detection, i.e., "iphone-16" or "macbook-2021".
    Auto Connect
    Start change-broadcasting on Connect
    ');root_416=from_html('

    No Connection

    ');root_57=from_html('

    ');root_69=from_html("");root_97=from_html("");root_107=from_html("");root_711=from_html('
    Broadcasting?

    If you want to use `LiveSync`, you should broadcast changes. All `watching` peers which\n detects this will start the replication for fetching.
    However, This should not be enabled if you want to increase your secrecy more.

    ',1);root39=from_html('

    Peer to Peer Replicator

    Connection Settings

    Signaling Server Connection

    Peers

    NameActionCommand
    ');$$css17={hash:"svelte-2cmos",code:"article.svelte-2cmos {max-width:100%;}article.svelte-2cmos p:where(.svelte-2cmos) {user-select:text;-webkit-user-select:text;}h2.svelte-2cmos {margin-top:var(--size-4-1);margin-bottom:var(--size-4-1);padding-bottom:var(--size-4-1);border-bottom:1px solid var(--background-modifier-border);}label.is-dirty.svelte-2cmos {background-color:var(--background-modifier-error);}input.svelte-2cmos {background-color:transparent;}th.svelte-2cmos {\n /* display: flex;\n justify-content: center;\n align-items: center; */min-height:var(--input-height);}td.svelte-2cmos {min-height:var(--input-height);}td.svelte-2cmos > label:where(.svelte-2cmos) {display:flex;flex-direction:row;align-items:center;justify-content:flex-start;min-height:var(--input-height);}td.svelte-2cmos > label:where(.svelte-2cmos) > :where(.svelte-2cmos) {margin:auto var(--size-4-1);}table.peers.svelte-2cmos {width:100%;}.important.svelte-2cmos {color:var(--text-error);font-size:1.2em;font-weight:bold;}.important-sub.svelte-2cmos {color:var(--text-warning);}.settings.svelte-2cmos label:where(.svelte-2cmos) {display:flex;flex-direction:row;align-items:center;justify-content:flex-start;flex-wrap:wrap;}"};delegate(["click"]);VIEW_TYPE_P2P="p2p-replicator";P2PReplicatorPaneView=class extends SvelteItemView{constructor(leaf,core,p2pResult){super(leaf);this.icon="waypoints";this.title="";this.navigation=!1;this.core=core;this._p2pResult=p2pResult;eventHub.onEvent(EVENT_P2P_PEER_SHOW_EXTRA_MENU,({peer,event:event2})=>{this.m&&this.m.hide();this.m=(new import_obsidian.Menu).addItem(item=>item.setTitle("📥 Only Fetch").onClick(()=>this.replicateFrom(peer))).addItem(item=>item.setTitle("📤 Only Send").onClick(()=>this.replicateTo(peer))).addSeparator().addItem(item=>{item.setTitle("🔧 Get Configuration").onClick(async()=>{await this.getRemoteConfig(peer)})}).addSeparator().addItem(item=>{const mark=peer.syncOnConnect?"checkmark":null;item.setTitle("Toggle Sync on connect").onClick(async()=>{await this.toggleProp(peer,"syncOnConnect")}).setIcon(mark)}).addItem(item=>{const mark=peer.watchOnConnect?"checkmark":null;item.setTitle("Toggle Watch on connect").onClick(async()=>{await this.toggleProp(peer,"watchOnConnect")}).setIcon(mark)}).addItem(item=>{const mark=peer.syncOnReplicationCommand?"checkmark":null;item.setTitle("Toggle Sync on `Replicate now` command").onClick(async()=>{await this.toggleProp(peer,"syncOnReplicationCommand")}).setIcon(mark)});this.m.showAtPosition({x:event2.x,y:event2.y})})}getIcon(){return"waypoints"}get replicator(){return this._p2pResult.replicator}async replicateFrom(peer){await this.replicator.replicateFrom(peer.peerId)}async replicateTo(peer){await this.replicator.requestSynchroniseToPeer(peer.peerId)}async getRemoteConfig(peer){Logger(`Requesting remote config for ${peer.name}. Please input the passphrase on the remote device`,LOG_LEVEL_NOTICE);const remoteConfig=await this.replicator.getRemoteConfig(peer.peerId);if(remoteConfig){Logger(`Remote config for ${peer.name} is retrieved successfully`);const DROP="Yes, and drop local database",KEEP="Yes, but keep local database",CANCEL="No, cancel",yn=await this.core.confirm.askSelectStringDialogue("Do you really want to apply the remote config? This will overwrite your current config immediately and restart.\nAnd you can also drop the local database to rebuild from the remote device.",[DROP,KEEP,CANCEL],{defaultAction:CANCEL,title:"Apply Remote Config "});if(yn===DROP||yn===KEEP){if(yn===DROP&&remoteConfig.remoteType!==REMOTE_P2P&&"yes"===await this.core.confirm.askYesNoDialog('Do you want to set the remote type to "P2P Sync" to rebuild by "P2P replication"?',{title:"Rebuild from remote device"})){remoteConfig.remoteType=REMOTE_P2P;remoteConfig.P2P_RebuildFrom=peer.name}await this.core.services.setting.applyExternalSettings(remoteConfig);yn===DROP?await this.core.rebuilder.scheduleFetch():this.core.services.appLifecycle.scheduleRestart()}else Logger(`Cancelled\nRemote config for ${peer.name} is not applied`,LOG_LEVEL_NOTICE)}else Logger(`Cannot retrieve remote config for ${peer.peerId}`)}async toggleProp(peer,prop2){const targetSetting={syncOnConnect:"P2P_AutoSyncPeers",watchOnConnect:"P2P_AutoWatchPeers",syncOnReplicationCommand:"P2P_SyncOnReplication"}[prop2],currentSettingAll=this.core.services.setting.currentSettings(),currentSetting={[targetSetting]:currentSettingAll?currentSettingAll[targetSetting]:""};peer[prop2]?currentSetting[targetSetting]=removeFromList(peer.name,currentSetting[targetSetting]):currentSetting[targetSetting]=addToList(peer.name,currentSetting[targetSetting]);await this.core.services.setting.applyPartial(currentSetting,!0)}getViewType(){return VIEW_TYPE_P2P}getDisplayText(){return"Peer-to-Peer Replicator"}async onClose(){await super.onClose();this.m&&this.m.hide()}instantiateComponent(target){return mount(P2PReplicatorPane,{target,props:{cmdSync:this._p2pResult.replicator,core:this.core}})}};ObsidianLiveSyncPlugin=class extends import_obsidian.Plugin{initialiseServiceModules(core,services){const storageAccessManager=new StorageAccessManager,vaultAccess=new FileAccessObsidian(this.app,{storageAccessManager,vaultService:services.vault,settingService:services.setting,APIService:services.API,pathService:services.path}),storageEventManager=new StorageEventManagerObsidian(this,core,{fileProcessing:services.fileProcessing,setting:services.setting,vaultService:services.vault,storageAccessManager,APIService:services.API}),storageAccess=new ServiceFileAccessObsidian({API:services.API,setting:services.setting,fileProcessing:services.fileProcessing,vault:services.vault,appLifecycle:services.appLifecycle,storageEventManager,storageAccessManager,vaultAccess}),databaseFileAccess=new ServiceDatabaseFileAccess({API:services.API,database:services.database,path:services.path,storageAccess,vault:services.vault}),fileHandler=new ServiceFileHandler({API:services.API,databaseFileAccess,conflict:services.conflict,setting:services.setting,fileProcessing:services.fileProcessing,vault:services.vault,path:services.path,replication:services.replication,storageAccess});return{rebuilder:new ServiceRebuilder({API:services.API,database:services.database,appLifecycle:services.appLifecycle,setting:services.setting,remote:services.remote,databaseEvents:services.databaseEvents,replication:services.replication,replicator:services.replicator,UI:services.UI,vault:services.vault,fileHandler,storageAccess,control:services.control}),fileHandler,databaseFileAccess,storageAccess}}async saveSettings(){await this.core.services.setting.saveSettingData()}constructor(app,manifest){super(app,manifest);import_obsidian.Notice;const serviceHub=new ObsidianServiceHub(this);this.core=new LiveSyncBaseCore(serviceHub,(core,serviceHub2)=>this.initialiseServiceModules(core,serviceHub2),core=>[new ModuleObsidianEvents(this,core),new ModuleObsidianSettingDialogue(this,core),new ModuleObsidianMenu(core),new ModuleObsidianSettingsAsMarkdown(core),new ModuleLog(this,core),new ModuleObsidianDocumentHistory(this,core),new ModuleInteractiveConflictResolver(this,core),new ModuleObsidianGlobalHistory(this,core),new ModuleDev(this,core),new ModuleReplicateTest(this,core),new ModuleIntegratedTest(this,core),new SetupManager(core),new ModuleMigration(core)],core=>[new ConfigSync(this,core),new HiddenFileSync(this,core),new LocalDatabaseMaintenance(this,core)],core=>{const featuresInitialiser=enableI18nFeature;core.services.appLifecycle.onLayoutReady.addHandler(()=>featuresInitialiser(core));const setupManager=core.getModule(SetupManager);useRemoteConfiguration(core);useSetupProtocolFeature(core,setupManager);useSetupQRCodeFeature(core);useSetupURIFeature(core);useSetupManagerHandlersFeature(core,setupManager);useOfflineScanner(core);useRedFlagFeatures(core);useCheckRemoteSize(core);const replicator=useP2PReplicatorFeature(core);useP2PReplicatorCommands(core,replicator);useP2PReplicatorUI(core,core,replicator)})}async _startUp(){if(!await this.core.services.control.onLoad())return;const onReady=this.core.services.control.onReady.bind(this.core.services.control);this.app.workspace.onLayoutReady(onReady)}onload(){this._startUp()}onunload(){this.core.services.control.onUnload()}}; /* nosourcemap */