@interncom/diplomatic 0.11.4 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.mjs +2 -2
- package/dist/cli/shared/binary.d.ts +4 -0
- package/dist/cli/shared/codecs/bundleHost.d.ts +11 -0
- package/dist/cli/shared/codecs/identityBundle.d.ts +25 -0
- package/dist/cli/shared/codecs/pairPackage.d.ts +15 -0
- package/dist/cli/shared/crypto/enclave.d.ts +113 -2
- package/dist/cli/shared/crypto/entropy.d.ts +11 -0
- package/dist/cli/shared/seed.d.ts +25 -0
- package/dist/cli/shared/types.d.ts +4 -6
- package/dist/cli/shared/webauthn/common.d.ts +38 -0
- package/dist/cli/shared/webauthn/largeBlob.d.ts +19 -0
- package/dist/cli/shared/webauthn/prf.d.ts +33 -0
- package/dist/cli/shared/worker/embeddedWorkerSource.d.ts +1 -0
- package/dist/cli/shared/worker/spawn.d.ts +5 -0
- package/dist/cli/src/index.d.ts +10 -8
- package/dist/web/client.d.ts +3 -2
- package/dist/web/identity/pairPackage.d.ts +31 -0
- package/dist/web/index.d.ts +18 -6
- package/dist/web/index.mjs +1 -1
- package/dist/web/openClient.d.ts +14 -109
- package/dist/web/passkey/largeBlob.d.ts +17 -0
- package/dist/web/passkey/prf-store.d.ts +62 -0
- package/dist/web/passkey/seed.d.ts +13 -99
- package/dist/web/passkey/webauthn.d.ts +1 -0
- package/dist/web/react/useClient.d.ts +13 -20
- package/dist/web/shared/binary.d.ts +4 -0
- package/dist/web/shared/codecs/bundleHost.d.ts +11 -0
- package/dist/web/shared/codecs/identityBundle.d.ts +25 -0
- package/dist/web/shared/codecs/pairPackage.d.ts +15 -0
- package/dist/web/shared/codecs/pairPackageEnvelope.d.ts +18 -0
- package/dist/web/shared/crypto/enclave.d.ts +113 -2
- package/dist/web/shared/crypto/entropy.d.ts +11 -0
- package/dist/web/shared/seed.d.ts +25 -0
- package/dist/web/shared/types.d.ts +4 -6
- package/dist/web/shared/webauthn/common.d.ts +38 -0
- package/dist/web/shared/webauthn/largeBlob.d.ts +19 -0
- package/dist/web/shared/webauthn/prf.d.ts +33 -0
- package/dist/web/shared/worker/embeddedWorkerSource.d.ts +1 -0
- package/dist/web/shared/worker/spawn.d.ts +5 -0
- package/dist/web/stores/idb/seed.d.ts +24 -6
- package/dist/web/stores/memory/seed.d.ts +3 -4
- package/dist/web/types.d.ts +13 -7
- package/dist/web/worker/client.d.ts +26 -48
- package/dist/web/worker.mjs +1 -1
- package/package.json +1 -5
package/dist/web/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function zQ($){let V=$.length,Q=0,Z=0;while(Z<V){let J=$.charCodeAt(Z++);if((J&4294967168)===0){Q++;continue}else if((J&4294965248)===0)Q+=2;else{if(J>=55296&&J<=56319){if(Z<V){let W=$.charCodeAt(Z);if((W&64512)===56320)++Z,J=((J&1023)<<10)+(W&1023)+65536}}if((J&4294901760)===0)Q+=3;else Q+=4}}return Q}function kZ($,V,Q){let Z=$.length,J=Q,W=0;while(W<Z){let Y=$.charCodeAt(W++);if((Y&4294967168)===0){V[J++]=Y;continue}else if((Y&4294965248)===0)V[J++]=Y>>6&31|192;else{if(Y>=55296&&Y<=56319){if(W<Z){let X=$.charCodeAt(W);if((X&64512)===56320)++W,Y=((Y&1023)<<10)+(X&1023)+65536}}if((Y&4294901760)===0)V[J++]=Y>>12&15|224,V[J++]=Y>>6&63|128;else V[J++]=Y>>18&7|240,V[J++]=Y>>12&63|128,V[J++]=Y>>6&63|128}V[J++]=Y&63|128}}var gZ=new TextEncoder,vZ=50;function iZ($,V,Q){gZ.encodeInto($,V.subarray(Q))}function RQ($,V,Q){if($.length>vZ)iZ($,V,Q);else kZ($,V,Q)}var yZ=4096;function ZV($,V,Q){let Z=V,J=Z+Q,W=[],Y="";while(Z<J){let X=$[Z++];if((X&128)===0)W.push(X);else if((X&224)===192){let G=$[Z++]&63;W.push((X&31)<<6|G)}else if((X&240)===224){let G=$[Z++]&63,K=$[Z++]&63;W.push((X&31)<<12|G<<6|K)}else if((X&248)===240){let G=$[Z++]&63,K=$[Z++]&63,R=$[Z++]&63,I=(X&7)<<18|G<<12|K<<6|R;if(I>65535)I-=65536,W.push(I>>>10&1023|55296),I=56320|I&1023;W.push(I)}else W.push(X);if(W.length>=yZ)Y+=String.fromCharCode(...W),W.length=0}if(W.length>0)Y+=String.fromCharCode(...W);return Y}var uZ=new TextDecoder,bZ=200;function hZ($,V,Q){let Z=$.subarray(V,V+Q);return uZ.decode(Z)}function IQ($,V,Q){if(Q>bZ)return hZ($,V,Q);else return ZV($,V,Q)}class l0{type;data;constructor($,V){this.type=$,this.data=V}}class V0 extends Error{constructor($){super($);let V=Object.create(V0.prototype);Object.setPrototypeOf(this,V),Object.defineProperty(this,"name",{configurable:!0,enumerable:!1,value:V0.name})}}var p0=4294967295;function NQ($,V,Q){let Z=Q/4294967296,J=Q;$.setUint32(V,Z),$.setUint32(V+4,J)}function C$($,V,Q){let Z=Math.floor(Q/4294967296),J=Q;$.setUint32(V,Z),$.setUint32(V+4,J)}function w$($,V){let Q=$.getInt32(V),Z=$.getUint32(V+4);return Q*4294967296+Z}function UQ($,V){let Q=$.getUint32(V),Z=$.getUint32(V+4);return Q*4294967296+Z}var lZ=-1,pZ=4294967295,nZ=17179869183;function cZ({sec:$,nsec:V}){if($>=0&&V>=0&&$<=nZ)if(V===0&&$<=pZ){let Q=new Uint8Array(4);return new DataView(Q.buffer).setUint32(0,$),Q}else{let Q=$/4294967296,Z=$&4294967295,J=new Uint8Array(8),W=new DataView(J.buffer);return W.setUint32(0,V<<2|Q&3),W.setUint32(4,Z),J}else{let Q=new Uint8Array(12),Z=new DataView(Q.buffer);return Z.setUint32(0,V),C$(Z,4,$),Q}}function dZ($){let V=$.getTime(),Q=Math.floor(V/1000),Z=(V-Q*1000)*1e6,J=Math.floor(Z/1e9);return{sec:Q+J,nsec:Z-J*1e9}}function rZ($){if($ instanceof Date){let V=dZ($);return cZ(V)}else return null}function oZ($){let V=new DataView($.buffer,$.byteOffset,$.byteLength);switch($.byteLength){case 4:{let Q=V.getUint32(0),Z=0;return{sec:Q,nsec:0}}case 8:{let Q=V.getUint32(0),Z=V.getUint32(4),J=(Q&3)*4294967296+Z,W=Q>>>2;return{sec:J,nsec:W}}case 12:{let Q=w$(V,4),Z=V.getUint32(0);return{sec:Q,nsec:Z}}default:throw new V0(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${$.length}`)}}function aZ($){let V=oZ($);return new Date(V.sec*1000+V.nsec/1e6)}var OQ={type:lZ,encode:rZ,decode:aZ};class n0{static defaultCodec=new n0;__brand;builtInEncoders=[];builtInDecoders=[];encoders=[];decoders=[];constructor(){this.register(OQ)}register({type:$,encode:V,decode:Q}){if($>=0)this.encoders[$]=V,this.decoders[$]=Q;else{let Z=-1-$;this.builtInEncoders[Z]=V,this.builtInDecoders[Z]=Q}}tryToEncode($,V){for(let Q=0;Q<this.builtInEncoders.length;Q++){let Z=this.builtInEncoders[Q];if(Z!=null){let J=Z($,V);if(J!=null){let W=-1-Q;return new l0(W,J)}}}for(let Q=0;Q<this.encoders.length;Q++){let Z=this.encoders[Q];if(Z!=null){let J=Z($,V);if(J!=null)return new l0(Q,J)}}if($ instanceof l0)return $;return null}decode($,V,Q){let Z=V<0?this.builtInDecoders[-1-V]:this.decoders[V];if(Z)return Z($,V,Q);else return new l0(V,$)}}function sZ($){return $ instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&$ instanceof SharedArrayBuffer}function W$($){if($ instanceof Uint8Array)return $;else if(ArrayBuffer.isView($))return new Uint8Array($.buffer,$.byteOffset,$.byteLength);else if(sZ($))return new Uint8Array($);else return Uint8Array.from($)}var tZ=100,eZ=2048;class T${extensionCodec;context;useBigInt64;maxDepth;initialBufferSize;sortKeys;forceFloat32;ignoreUndefined;forceIntegerToFloat;pos;view;bytes;entered=!1;constructor($){this.extensionCodec=$?.extensionCodec??n0.defaultCodec,this.context=$?.context,this.useBigInt64=$?.useBigInt64??!1,this.maxDepth=$?.maxDepth??tZ,this.initialBufferSize=$?.initialBufferSize??eZ,this.sortKeys=$?.sortKeys??!1,this.forceFloat32=$?.forceFloat32??!1,this.ignoreUndefined=$?.ignoreUndefined??!1,this.forceIntegerToFloat=$?.forceIntegerToFloat??!1,this.pos=0,this.view=new DataView(new ArrayBuffer(this.initialBufferSize)),this.bytes=new Uint8Array(this.view.buffer)}clone(){return new T$({extensionCodec:this.extensionCodec,context:this.context,useBigInt64:this.useBigInt64,maxDepth:this.maxDepth,initialBufferSize:this.initialBufferSize,sortKeys:this.sortKeys,forceFloat32:this.forceFloat32,ignoreUndefined:this.ignoreUndefined,forceIntegerToFloat:this.forceIntegerToFloat})}reinitializeState(){this.pos=0}encodeSharedRef($){if(this.entered)return this.clone().encodeSharedRef($);try{return this.entered=!0,this.reinitializeState(),this.doEncode($,1),this.bytes.subarray(0,this.pos)}finally{this.entered=!1}}encode($){if(this.entered)return this.clone().encode($);try{return this.entered=!0,this.reinitializeState(),this.doEncode($,1),this.bytes.slice(0,this.pos)}finally{this.entered=!1}}doEncode($,V){if(V>this.maxDepth)throw Error(`Too deep objects in depth ${V}`);if($==null)this.encodeNil();else if(typeof $==="boolean")this.encodeBoolean($);else if(typeof $==="number")if(!this.forceIntegerToFloat)this.encodeNumber($);else this.encodeNumberAsFloat($);else if(typeof $==="string")this.encodeString($);else if(this.useBigInt64&&typeof $==="bigint")this.encodeBigInt64($);else this.encodeObject($,V)}ensureBufferSizeToWrite($){let V=this.pos+$;if(this.view.byteLength<V)this.resizeBuffer(V*2)}resizeBuffer($){let V=new ArrayBuffer($),Q=new Uint8Array(V),Z=new DataView(V);Q.set(this.bytes),this.view=Z,this.bytes=Q}encodeNil(){this.writeU8(192)}encodeBoolean($){if($===!1)this.writeU8(194);else this.writeU8(195)}encodeNumber($){if(!this.forceIntegerToFloat&&Number.isSafeInteger($))if($>=0)if($<128)this.writeU8($);else if($<256)this.writeU8(204),this.writeU8($);else if($<65536)this.writeU8(205),this.writeU16($);else if($<4294967296)this.writeU8(206),this.writeU32($);else if(!this.useBigInt64)this.writeU8(207),this.writeU64($);else this.encodeNumberAsFloat($);else if($>=-32)this.writeU8(224|$+32);else if($>=-128)this.writeU8(208),this.writeI8($);else if($>=-32768)this.writeU8(209),this.writeI16($);else if($>=-2147483648)this.writeU8(210),this.writeI32($);else if(!this.useBigInt64)this.writeU8(211),this.writeI64($);else this.encodeNumberAsFloat($);else this.encodeNumberAsFloat($)}encodeNumberAsFloat($){if(this.forceFloat32)this.writeU8(202),this.writeF32($);else this.writeU8(203),this.writeF64($)}encodeBigInt64($){if($>=BigInt(0))this.writeU8(207),this.writeBigUint64($);else this.writeU8(211),this.writeBigInt64($)}writeStringHeader($){if($<32)this.writeU8(160+$);else if($<256)this.writeU8(217),this.writeU8($);else if($<65536)this.writeU8(218),this.writeU16($);else if($<4294967296)this.writeU8(219),this.writeU32($);else throw Error(`Too long string: ${$} bytes in UTF-8`)}encodeString($){let Q=zQ($);this.ensureBufferSizeToWrite(5+Q),this.writeStringHeader(Q),RQ($,this.bytes,this.pos),this.pos+=Q}encodeObject($,V){let Q=this.extensionCodec.tryToEncode($,this.context);if(Q!=null)this.encodeExtension(Q);else if(Array.isArray($))this.encodeArray($,V);else if(ArrayBuffer.isView($))this.encodeBinary($);else if(typeof $==="object")this.encodeMap($,V);else throw Error(`Unrecognized object: ${Object.prototype.toString.apply($)}`)}encodeBinary($){let V=$.byteLength;if(V<256)this.writeU8(196),this.writeU8(V);else if(V<65536)this.writeU8(197),this.writeU16(V);else if(V<4294967296)this.writeU8(198),this.writeU32(V);else throw Error(`Too large binary: ${V}`);let Q=W$($);this.writeU8a(Q)}encodeArray($,V){let Q=$.length;if(Q<16)this.writeU8(144+Q);else if(Q<65536)this.writeU8(220),this.writeU16(Q);else if(Q<4294967296)this.writeU8(221),this.writeU32(Q);else throw Error(`Too large array: ${Q}`);for(let Z of $)this.doEncode(Z,V+1)}countWithoutUndefined($,V){let Q=0;for(let Z of V)if($[Z]!==void 0)Q++;return Q}encodeMap($,V){let Q=Object.keys($);if(this.sortKeys)Q.sort();let Z=this.ignoreUndefined?this.countWithoutUndefined($,Q):Q.length;if(Z<16)this.writeU8(128+Z);else if(Z<65536)this.writeU8(222),this.writeU16(Z);else if(Z<4294967296)this.writeU8(223),this.writeU32(Z);else throw Error(`Too large map object: ${Z}`);for(let J of Q){let W=$[J];if(!(this.ignoreUndefined&&W===void 0))this.encodeString(J),this.doEncode(W,V+1)}}encodeExtension($){if(typeof $.data==="function"){let Q=$.data(this.pos+6),Z=Q.length;if(Z>=4294967296)throw Error(`Too large extension object: ${Z}`);this.writeU8(201),this.writeU32(Z),this.writeI8($.type),this.writeU8a(Q);return}let V=$.data.length;if(V===1)this.writeU8(212);else if(V===2)this.writeU8(213);else if(V===4)this.writeU8(214);else if(V===8)this.writeU8(215);else if(V===16)this.writeU8(216);else if(V<256)this.writeU8(199),this.writeU8(V);else if(V<65536)this.writeU8(200),this.writeU16(V);else if(V<4294967296)this.writeU8(201),this.writeU32(V);else throw Error(`Too large extension object: ${V}`);this.writeI8($.type),this.writeU8a($.data)}writeU8($){this.ensureBufferSizeToWrite(1),this.view.setUint8(this.pos,$),this.pos++}writeU8a($){let V=$.length;this.ensureBufferSizeToWrite(V),this.bytes.set($,this.pos),this.pos+=V}writeI8($){this.ensureBufferSizeToWrite(1),this.view.setInt8(this.pos,$),this.pos++}writeU16($){this.ensureBufferSizeToWrite(2),this.view.setUint16(this.pos,$),this.pos+=2}writeI16($){this.ensureBufferSizeToWrite(2),this.view.setInt16(this.pos,$),this.pos+=2}writeU32($){this.ensureBufferSizeToWrite(4),this.view.setUint32(this.pos,$),this.pos+=4}writeI32($){this.ensureBufferSizeToWrite(4),this.view.setInt32(this.pos,$),this.pos+=4}writeF32($){this.ensureBufferSizeToWrite(4),this.view.setFloat32(this.pos,$),this.pos+=4}writeF64($){this.ensureBufferSizeToWrite(8),this.view.setFloat64(this.pos,$),this.pos+=8}writeU64($){this.ensureBufferSizeToWrite(8),NQ(this.view,this.pos,$),this.pos+=8}writeI64($){this.ensureBufferSizeToWrite(8),C$(this.view,this.pos,$),this.pos+=8}writeBigUint64($){this.ensureBufferSizeToWrite(8),this.view.setBigUint64(this.pos,$),this.pos+=8}writeBigInt64($){this.ensureBufferSizeToWrite(8),this.view.setBigInt64(this.pos,$),this.pos+=8}}function f0($,V){return new T$(V).encodeSharedRef($)}function A$($){return`${$<0?"-":""}0x${Math.abs($).toString(16).padStart(2,"0")}`}var $J=16,VJ=16;class JV{hit=0;miss=0;caches;maxKeyLength;maxLengthPerKey;constructor($=$J,V=VJ){this.maxKeyLength=$,this.maxLengthPerKey=V,this.caches=[];for(let Q=0;Q<this.maxKeyLength;Q++)this.caches.push([])}canBeCached($){return $>0&&$<=this.maxKeyLength}find($,V,Q){let Z=this.caches[Q-1];$:for(let J of Z){let W=J.bytes;for(let Y=0;Y<Q;Y++)if(W[Y]!==$[V+Y])continue $;return J.str}return null}store($,V){let Q=this.caches[$.length-1],Z={bytes:$,str:V};if(Q.length>=this.maxLengthPerKey)Q[Math.random()*Q.length|0]=Z;else Q.push(Z)}decode($,V,Q){let Z=this.find($,V,Q);if(Z!=null)return this.hit++,Z;this.miss++;let J=ZV($,V,Q),W=Uint8Array.prototype.slice.call($,V,V+Q);return this.store(W,J),J}}var WV="array",X$="map_key",MQ="map_value",QJ=($)=>{if(typeof $==="string"||typeof $==="number")return $;throw new V0("The type of key must be string or number but "+typeof $)};class qQ{stack=[];stackHeadPosition=-1;get length(){return this.stackHeadPosition+1}top(){return this.stack[this.stackHeadPosition]}pushArrayState($){let V=this.getUninitializedStateFromPool();V.type=WV,V.position=0,V.size=$,V.array=Array($)}pushMapState($){let V=this.getUninitializedStateFromPool();V.type=X$,V.readCount=0,V.size=$,V.map={}}getUninitializedStateFromPool(){if(this.stackHeadPosition++,this.stackHeadPosition===this.stack.length){let $={type:void 0,size:0,array:void 0,position:0,readCount:0,map:void 0,key:null};this.stack.push($)}return this.stack[this.stackHeadPosition]}release($){if(this.stack[this.stackHeadPosition]!==$)throw Error("Invalid stack state. Released state is not on top of the stack.");if($.type===WV){let Q=$;Q.size=0,Q.array=void 0,Q.position=0,Q.type=void 0}if($.type===X$||$.type===MQ){let Q=$;Q.size=0,Q.map=void 0,Q.readCount=0,Q.type=void 0}this.stackHeadPosition--}reset(){this.stack.length=0,this.stackHeadPosition=-1}}var Y$=-1,YV=new DataView(new ArrayBuffer(0)),ZJ=new Uint8Array(YV.buffer);try{YV.getInt8(0)}catch($){if(!($ instanceof RangeError))throw Error("This module is not supported in the current JavaScript engine because DataView does not throw RangeError on out-of-bounds access")}var FQ=RangeError("Insufficient data"),JJ=new JV;class D${extensionCodec;context;useBigInt64;rawStrings;maxStrLength;maxBinLength;maxArrayLength;maxMapLength;maxExtLength;keyDecoder;mapKeyConverter;totalPos=0;pos=0;view=YV;bytes=ZJ;headByte=Y$;stack=new qQ;entered=!1;constructor($){this.extensionCodec=$?.extensionCodec??n0.defaultCodec,this.context=$?.context,this.useBigInt64=$?.useBigInt64??!1,this.rawStrings=$?.rawStrings??!1,this.maxStrLength=$?.maxStrLength??p0,this.maxBinLength=$?.maxBinLength??p0,this.maxArrayLength=$?.maxArrayLength??p0,this.maxMapLength=$?.maxMapLength??p0,this.maxExtLength=$?.maxExtLength??p0,this.keyDecoder=$?.keyDecoder!==void 0?$.keyDecoder:JJ,this.mapKeyConverter=$?.mapKeyConverter??QJ}clone(){return new D$({extensionCodec:this.extensionCodec,context:this.context,useBigInt64:this.useBigInt64,rawStrings:this.rawStrings,maxStrLength:this.maxStrLength,maxBinLength:this.maxBinLength,maxArrayLength:this.maxArrayLength,maxMapLength:this.maxMapLength,maxExtLength:this.maxExtLength,keyDecoder:this.keyDecoder})}reinitializeState(){this.totalPos=0,this.headByte=Y$,this.stack.reset()}setBuffer($){let V=W$($);this.bytes=V,this.view=new DataView(V.buffer,V.byteOffset,V.byteLength),this.pos=0}appendBuffer($){if(this.headByte===Y$&&!this.hasRemaining(1))this.setBuffer($);else{let V=this.bytes.subarray(this.pos),Q=W$($),Z=new Uint8Array(V.length+Q.length);Z.set(V),Z.set(Q,V.length),this.setBuffer(Z)}}hasRemaining($){return this.view.byteLength-this.pos>=$}createExtraByteError($){let{view:V,pos:Q}=this;return RangeError(`Extra ${V.byteLength-Q} of ${V.byteLength} byte(s) found at buffer[${$}]`)}decode($){if(this.entered)return this.clone().decode($);try{this.entered=!0,this.reinitializeState(),this.setBuffer($);let V=this.doDecodeSync();if(this.hasRemaining(1))throw this.createExtraByteError(this.pos);return V}finally{this.entered=!1}}*decodeMulti($){if(this.entered){yield*this.clone().decodeMulti($);return}try{this.entered=!0,this.reinitializeState(),this.setBuffer($);while(this.hasRemaining(1))yield this.doDecodeSync()}finally{this.entered=!1}}async decodeAsync($){if(this.entered)return this.clone().decodeAsync($);try{this.entered=!0;let V=!1,Q;for await(let Y of $){if(V)throw this.entered=!1,this.createExtraByteError(this.totalPos);this.appendBuffer(Y);try{Q=this.doDecodeSync(),V=!0}catch(X){if(!(X instanceof RangeError))throw X}this.totalPos+=this.pos}if(V){if(this.hasRemaining(1))throw this.createExtraByteError(this.totalPos);return Q}let{headByte:Z,pos:J,totalPos:W}=this;throw RangeError(`Insufficient data in parsing ${A$(Z)} at ${W} (${J} in the current buffer)`)}finally{this.entered=!1}}decodeArrayStream($){return this.decodeMultiAsync($,!0)}decodeStream($){return this.decodeMultiAsync($,!1)}async*decodeMultiAsync($,V){if(this.entered){yield*this.clone().decodeMultiAsync($,V);return}try{this.entered=!0;let Q=V,Z=-1;for await(let J of $){if(V&&Z===0)throw this.createExtraByteError(this.totalPos);if(this.appendBuffer(J),Q)Z=this.readArraySize(),Q=!1,this.complete();try{while(!0)if(yield this.doDecodeSync(),--Z===0)break}catch(W){if(!(W instanceof RangeError))throw W}this.totalPos+=this.pos}}finally{this.entered=!1}}doDecodeSync(){$:while(!0){let $=this.readHeadByte(),V;if($>=224)V=$-256;else if($<192)if($<128)V=$;else if($<144){let Z=$-128;if(Z!==0){this.pushMapState(Z),this.complete();continue $}else V={}}else if($<160){let Z=$-144;if(Z!==0){this.pushArrayState(Z),this.complete();continue $}else V=[]}else{let Z=$-160;V=this.decodeString(Z,0)}else if($===192)V=null;else if($===194)V=!1;else if($===195)V=!0;else if($===202)V=this.readF32();else if($===203)V=this.readF64();else if($===204)V=this.readU8();else if($===205)V=this.readU16();else if($===206)V=this.readU32();else if($===207)if(this.useBigInt64)V=this.readU64AsBigInt();else V=this.readU64();else if($===208)V=this.readI8();else if($===209)V=this.readI16();else if($===210)V=this.readI32();else if($===211)if(this.useBigInt64)V=this.readI64AsBigInt();else V=this.readI64();else if($===217){let Z=this.lookU8();V=this.decodeString(Z,1)}else if($===218){let Z=this.lookU16();V=this.decodeString(Z,2)}else if($===219){let Z=this.lookU32();V=this.decodeString(Z,4)}else if($===220){let Z=this.readU16();if(Z!==0){this.pushArrayState(Z),this.complete();continue $}else V=[]}else if($===221){let Z=this.readU32();if(Z!==0){this.pushArrayState(Z),this.complete();continue $}else V=[]}else if($===222){let Z=this.readU16();if(Z!==0){this.pushMapState(Z),this.complete();continue $}else V={}}else if($===223){let Z=this.readU32();if(Z!==0){this.pushMapState(Z),this.complete();continue $}else V={}}else if($===196){let Z=this.lookU8();V=this.decodeBinary(Z,1)}else if($===197){let Z=this.lookU16();V=this.decodeBinary(Z,2)}else if($===198){let Z=this.lookU32();V=this.decodeBinary(Z,4)}else if($===212)V=this.decodeExtension(1,0);else if($===213)V=this.decodeExtension(2,0);else if($===214)V=this.decodeExtension(4,0);else if($===215)V=this.decodeExtension(8,0);else if($===216)V=this.decodeExtension(16,0);else if($===199){let Z=this.lookU8();V=this.decodeExtension(Z,1)}else if($===200){let Z=this.lookU16();V=this.decodeExtension(Z,2)}else if($===201){let Z=this.lookU32();V=this.decodeExtension(Z,4)}else throw new V0(`Unrecognized type byte: ${A$($)}`);this.complete();let Q=this.stack;while(Q.length>0){let Z=Q.top();if(Z.type===WV)if(Z.array[Z.position]=V,Z.position++,Z.position===Z.size)V=Z.array,Q.release(Z);else continue $;else if(Z.type===X$){if(V==="__proto__")throw new V0("The key __proto__ is not allowed");Z.key=this.mapKeyConverter(V),Z.type=MQ;continue $}else if(Z.map[Z.key]=V,Z.readCount++,Z.readCount===Z.size)V=Z.map,Q.release(Z);else{Z.key=null,Z.type=X$;continue $}}return V}}readHeadByte(){if(this.headByte===Y$)this.headByte=this.readU8();return this.headByte}complete(){this.headByte=Y$}readArraySize(){let $=this.readHeadByte();switch($){case 220:return this.readU16();case 221:return this.readU32();default:if($<160)return $-144;else throw new V0(`Unrecognized array type byte: ${A$($)}`)}}pushMapState($){if($>this.maxMapLength)throw new V0(`Max length exceeded: map length (${$}) > maxMapLengthLength (${this.maxMapLength})`);this.stack.pushMapState($)}pushArrayState($){if($>this.maxArrayLength)throw new V0(`Max length exceeded: array length (${$}) > maxArrayLength (${this.maxArrayLength})`);this.stack.pushArrayState($)}decodeString($,V){if(!this.rawStrings||this.stateIsMapKey())return this.decodeUtf8String($,V);return this.decodeBinary($,V)}decodeUtf8String($,V){if($>this.maxStrLength)throw new V0(`Max length exceeded: UTF-8 byte length (${$}) > maxStrLength (${this.maxStrLength})`);if(this.bytes.byteLength<this.pos+V+$)throw FQ;let Q=this.pos+V,Z;if(this.stateIsMapKey()&&this.keyDecoder?.canBeCached($))Z=this.keyDecoder.decode(this.bytes,Q,$);else Z=IQ(this.bytes,Q,$);return this.pos+=V+$,Z}stateIsMapKey(){if(this.stack.length>0)return this.stack.top().type===X$;return!1}decodeBinary($,V){if($>this.maxBinLength)throw new V0(`Max length exceeded: bin length (${$}) > maxBinLength (${this.maxBinLength})`);if(!this.hasRemaining($+V))throw FQ;let Q=this.pos+V,Z=this.bytes.subarray(Q,Q+$);return this.pos+=V+$,Z}decodeExtension($,V){if($>this.maxExtLength)throw new V0(`Max length exceeded: ext length (${$}) > maxExtLength (${this.maxExtLength})`);let Q=this.view.getInt8(this.pos+V),Z=this.decodeBinary($,V+1);return this.extensionCodec.decode(Z,Q,this.context)}lookU8(){return this.view.getUint8(this.pos)}lookU16(){return this.view.getUint16(this.pos)}lookU32(){return this.view.getUint32(this.pos)}readU8(){let $=this.view.getUint8(this.pos);return this.pos++,$}readI8(){let $=this.view.getInt8(this.pos);return this.pos++,$}readU16(){let $=this.view.getUint16(this.pos);return this.pos+=2,$}readI16(){let $=this.view.getInt16(this.pos);return this.pos+=2,$}readU32(){let $=this.view.getUint32(this.pos);return this.pos+=4,$}readI32(){let $=this.view.getInt32(this.pos);return this.pos+=4,$}readU64(){let $=UQ(this.view,this.pos);return this.pos+=8,$}readI64(){let $=w$(this.view,this.pos);return this.pos+=8,$}readU64AsBigInt(){let $=this.view.getBigUint64(this.pos);return this.pos+=8,$}readI64AsBigInt(){let $=this.view.getBigInt64(this.pos);return this.pos+=8,$}readF32(){let $=this.view.getFloat32(this.pos);return this.pos+=4,$}readF64(){let $=this.view.getFloat64(this.pos);return this.pos+=8,$}}function XV($,V){return new D$(V).decode($)}class A0{listeners=new Map;addEventListener($,V){let Q=this.listeners.get($);if(!Q)Q=new Set,this.listeners.set($,Q);return Q.add(V),()=>{this.removeEventListener($,V)}}removeEventListener($,V){let Q=this.listeners.get($);if(Q){if(Q.delete(V),Q.size===0)this.listeners.delete($)}}emit($,V){let Q=this.listeners.get($);if(Q){let Z=Array.from(Q);for(let J of Z)J(V)}}emitAll($){let V=Array.from(this.listeners.keys());for(let Q of V)this.emit(Q,$)}}class I0{getter;static eventName="update";emitter;constructor($){this.getter=$;this.emitter=new A0}get=()=>this.getter();async emit(){let $=await this.getter();queueMicrotask(()=>this.emitter.emit(I0.eventName,$))}listen($){return this.emitter.addEventListener(I0.eventName,$),()=>{this.emitter.removeEventListener(I0.eventName,$)}}}var D0=64;var HQ=32,_0=8;var _$=32;var PQ=30000,CQ=512,_;((w)=>{w[w.Success=0]="Success";w[w.InvalidSignature=3]="InvalidSignature";w[w.ClockOutOfSync=4]="ClockOutOfSync";w[w.UserNotRegistered=5]="UserNotRegistered";w[w.ServerMisconfigured=6]="ServerMisconfigured";w[w.MissingBody=7]="MissingBody";w[w.ExtraBodyContent=8]="ExtraBodyContent";w[w.MissingParam=9]="MissingParam";w[w.InvalidParam=10]="InvalidParam";w[w.InvalidRequest=11]="InvalidRequest";w[w.InternalError=12]="InternalError";w[w.NotFound=13]="NotFound";w[w.InvalidMessage=14]="InvalidMessage";w[w.NoChange=15]="NoChange";w[w.DatabaseClosed=16]="DatabaseClosed";w[w.StorageError=17]="StorageError";w[w.DatabaseError=18]="DatabaseError";w[w.HashMismatch=19]="HashMismatch";w[w.DecryptionError=20]="DecryptionError";w[w.NotImplemented=21]="NotImplemented";w[w.MissingSeed=22]="MissingSeed";w[w.OutOfBounds=23]="OutOfBounds";w[w.HostError=24]="HostError";w[w.CommunicationError=25]="CommunicationError";w[w.VarLimitExceeded=26]="VarLimitExceeded";w[w.InvalidResponse=27]="InvalidResponse";w[w.ConnectionClosed=28]="ConnectionClosed"})(_||={});function O($){return[$,0]}function z($){return[void 0,$]}function WJ($){if($<0)console.info("N",$),console.trace();if(typeof $!=="bigint")$=BigInt($);if($<0n)return z(10);let V=[];while($>0n){let Q=Number($&0x7fn);if($>>=7n,$>0n)V.push(Q|128);else V.push(Q)}if(V.length===0)return O(new Uint8Array([0]));if(V.length>8)return z(26);return O(new Uint8Array(V))}function YJ($,V=0){let Q=0n,Z=0,J=V;while(!0){if(J>=$.length)return z(14);let W=$[J++];if(W===void 0)return z(14);if(Q|=BigInt(W&127)<<BigInt(Z),(W&128)===0){if(J-V>8)return z(26);return O({value:Q>0x1fffffffffffffn?Q:Number(Q),bytesRead:J-V})}if(Z+=7,Z>=56)return z(26)}}class k{data;pos=0;constructor($){this.data=$}static async fromResponse($){let V=await $.arrayBuffer(),Q=new Uint8Array(V);return new k(Q)}readBigInt(){if(this.pos+8>this.data.length)return z(7);let $=new DataView(this.data.buffer,this.data.byteOffset+this.pos).getBigUint64(0,!1);return this.pos+=8,O($)}readDate(){let[$,V]=this.readVarInt();if(V!==0)return z(V);return O(new Date($))}readVarInt(){let[$,V]=YJ(this.data,this.pos);if(V!==0)return z(V);this.pos+=$.bytesRead;let Q=$.value;return O(typeof Q==="bigint"?Number(Q):Q)}readVarString(){let[$,V]=this.readVarInt();if(V!==0)return z(V);let[Q,Z]=this.readBytes($);if(Z!==0)return z(Z);let J=new TextDecoder().decode(Q);return O(J)}readBytes($){if($<0)return z(10);if(this.pos+$>this.data.length)return z(23);let V=this.data.slice(this.pos,this.pos+$);return this.pos+=$,O(V)}readVarBytes(){let[$,V]=this.readVarInt();if(V!==0)return z(V);return this.readBytes($)}readStruct($){return $.decode(this)}readStructs($){let V=[];while(!this.done()){let[Q,Z]=this.readStruct($);if(Z!==0)return z(Z);V.push(Q)}return O(V)}readBytesSeq($){let V=[];while(!this.done()){let[Q,Z]=this.readBytes($);if(Z!==0)return z(Z);V.push(Q)}return O(V)}done(){return this.pos>=this.data.length}consumed(){return this.pos}}class g{parts=[];writeBigInt($){let V=new Uint8Array(8);new DataView(V.buffer).setBigUint64(0,$,!1),this.parts.push(V)}writeDate($){let V=$.getTime();return this.writeVarInt(V)}writeVarInt($){let[V,Q]=WJ($);if(Q!==0)return Q;return this.parts.push(V),0}writeVarString($){let V=new TextEncoder().encode($),Q=this.writeVarInt(V.length);if(Q!==0)return Q;return this.writeBytes(V),0}prependBytes($){this.parts.unshift($)}writeBytes($){this.parts.push($)}writeVarBytes($){let V=this.writeVarInt($.length);if(V!==0)return V;return this.writeBytes($),0}writeStruct($,V){return $.encode(this,V)}writeStructs($,V){for(let Q of V){let Z=this.writeStruct($,Q);if(Z!==0)return Z}return 0}writeBytesSeq($){for(let V of $)this.writeBytes(V)}result(){let $=this.parts.reduce((Z,J)=>Z+J.length,0),V=new Uint8Array($),Q=0;for(let Z of this.parts)V.set(Z,Q),Q+=Z.length;return V}*scan(){for(let $ of this.parts)yield $}}async function GV($,V){let Q=new g,Z=Q.writeDate(V);if(Z!==0)return z(Z);let J=Q.result(),W=await $.sign(J);return O({pubKey:$.publicKey,sig:W,timestamp:V})}async function j0($,V,Q){let Z=Q.now().getTime(),J=$.timestamp.getTime();if(Math.abs(Z-J)>PQ)return 4;let Y=new g;Y.writeDate($.timestamp);let X=Y.result();if(!await V.checkSigEd25519($.sig,X,$.pubKey))return 3;return 0}var o={encode($,V){let Q=$.writeVarBytes(V.id);if(Q!==0)return Q;let Z=$.writeDate(V.ts);if(Z!==0)return Z;return 0},decode($){let[V,Q]=$.readVarBytes();if(Q!==0)return z(Q);let[Z,J]=$.readDate();if(J!==0)return z(J);return O({id:V,ts:Z})}};function c0($){let V=new g,Q=V.writeStruct(o,$);if(Q!==0)return z(Q);let Z=V.result();return O(Z)}async function XJ($){return c0({id:$,ts:new Date(0)})}var X0={encode($,V){let Q=$.writeVarBytes(V.eid);if(Q!==0)return Q;let Z=$.writeVarInt(V.off);if(Z!==0)return Z;let J=$.writeVarInt(V.ctr);if(J!==0)return J;let W=$.writeVarInt(V.len);if(W!==0)return W;if(V.hsh)$.writeBytes(V.hsh);return 0},decode($){let[V,Q]=$.readVarBytes();if(Q!==0)return z(Q);let Z=new k(V),[,J]=o.decode(Z);if(J!==0)return z(J);let[W,Y]=$.readVarInt();if(Y!==0)return z(Y);let[X,G]=$.readVarInt();if(G!==0)return z(G);let[K,R]=$.readVarInt();if(R!==0)return z(R);let I;if(K>0){let[N,U]=$.readBytes(_$);if(U!==0)return z(U);I=N}return O({eid:V,off:W,ctr:X,len:K,hsh:I})}};function t($){return Array.from($).map((Q)=>Q.toString(16).padStart(2,"0")).join("")}function L0($){if($.length%2!==0)throw Error("Invalid hex string");let V=new Uint8Array($.length/2);for(let Q=0;Q<$.length;Q+=2)V[Q/2]=Number.parseInt($.substr(Q,2),16);return V}function e($,V){if($===V)return!0;if($.byteLength!==V.byteLength)return!1;return $.every((Q,Z)=>Q===V[Z])}var L;if(typeof Uint8Array.prototype.toBase64==="function")L=($)=>$.toBase64();else L=($)=>btoa(String.fromCharCode(...$));var Q0;if(typeof Uint8Array.fromBase64==="function")Q0=($)=>Uint8Array.fromBase64($);else Q0=($)=>Uint8Array.from(atob($),(V)=>V.charCodeAt(0));function j$($,V){let Q=new Uint8Array($.length+V.length);return Q.set($,0),Q.set(V,$.length),Q}function wQ($,V,Q){return Q.checkSigEd25519($.sig,$.headCph,V)}async function TQ($,V,Q,Z){let J;if($.bod&&$.len>0)J=await Q.blake3($.bod);let W=new g,Y=X0.encode(W,{...$,hsh:J});if(Y!==0)return z(Y);let X=W.result(),G=await V.kdmFor(X),K=Z.deriveCipher(G,"encrypt"),R=await K.encrypt(X),I=$.bod?await K.encrypt($.bod):new Uint8Array(0),N=await V.sign(R);return O({sig:N,kdm:G,headCph:R,bodyCph:I})}async function KV($,V,Q,Z,J){let W=new k($),[Y,X]=X0.decode(W);if(X!==0)return z(14);let G;try{G=V&&V.length>0?await Q.decrypt(V):void 0}catch{return z(20)}let K=Y.hsh&&G===void 0,R=Y.hsh===void 0&&G!==void 0;if(K||R)return z(19);if(Y.hsh&&G){let N=await Z.blake3(G);if(!e(N,Y.hsh))return z(19)}let I=J??await Z.blake3($);return O({msgHead:Y,bod:G,headHash:I})}class M0{now(){return new Date}}function AQ($,V,Q,Z){let J=V.getTime()-$.getTime(),W=Q.getTime()-Z.getTime();return(J+W)/2}var G$={encode($,V){if($.writeVarInt(V.quota),V.quota>0){if(V.usage===void 0)return 9;$.writeVarInt(V.usage)}return 0},decode($){let[V,Q]=$.readVarInt();if(Q!==0)return z(Q);let Z;if(V>0){let[J,W]=$.readVarInt();if(W!==0)return z(W);Z=J}return O({quota:V,usage:Z})}};var zV={encode($,V){$.writeBytes(new Uint8Array([V.status]));let Q=$.writeDate(V.timeRcvd);if(Q!==0)return Q;let Z=$.writeDate(V.timeSent);if(Z!==0)return Z;let J=$.writeVarInt(V.subscription.term);if(J!==0)return J;let W=$.writeVarInt(V.subscription.elapsed);if(W!==0)return W;let Y=$.writeStruct(G$,V.subscription.stat);if(Y!==0)return Y;let X=$.writeStruct(G$,V.subscription.dyn);if(X!==0)return X;return 0},decode($){let[V,Q]=$.readBytes(1);if(Q!==0)return z(Q);let Z=V[0],[J,W]=$.readDate();if(W!==0)return z(W);let[Y,X]=$.readDate();if(X!==0)return z(X);let[G,K]=$.readVarInt();if(K!==0)return z(K);let[R,I]=$.readVarInt();if(I!==0)return z(I);let[N,U]=$.readStruct(G$);if(U!==0)return z(U);let[M,F]=$.readStruct(G$);if(F!==0)return z(F);return O({status:Z,timeRcvd:J,timeSent:Y,subscription:{term:G,elapsed:R,stat:N,dyn:M}})}};var RV={encode($,V){let Q=$.writeVarBytes(V.headCph);if(Q!==0)return Q;let Z=$.writeVarInt(V.seq);if(Z!==0)return Z;return 0},decode($){let[V,Q]=$.readVarBytes();if(Q!==0)return z(Q);let[Z,J]=$.readVarInt();if(J!==0)return z(J);return O({headCph:V,seq:Z})}};var Y0={encode($,V){$.writeBytes(V.pubKey),$.writeBytes(V.sig);let Q=$.writeDate(V.timestamp);if(Q!==0)return Q;return 0},decode($){let[V,Q]=$.readBytes(HQ);if(Q!==0)return z(Q);let[Z,J]=$.readBytes(D0);if(J!==0)return z(J);let[W,Y]=$.readDate();if(Y!==0)return z(Y);return O({pubKey:V,sig:Z,timestamp:W})}};var DQ={async encodeReq($,V,Q,Z,J){let W=J.writeStruct(Y0,Q);if(W!==0)return W;for(let Y of Z)J.writeVarInt(Y);return 0},async handleReq($,V,Q){let{clock:Z,crypto:J,storage:W}=$,[Y,X]=V.readStruct(Y0);if(X!==0)return X;let G=await j0(Y,J,Z);if(G!==0)return G;let{pubKey:K}=Y,[R,I]=await W.hasUser(K);if(I!==0)return I;if(!R)return 5;let[N,U]=V.readVarInt();if(U!==0)return U;if(!V.done())return 8;let[M,F]=await W.listHeads(K,N);if(F!==0)return F;return Q.writeStructs(RV,M)},decodeResp($){return $.readStructs(RV)}};var IV={encode($,V){$.writeVarInt(V.seq);let Q=$.writeVarBytes(V.bodyCph);if(Q!==0)return Q;return 0},decode($){let[V,Q]=$.readVarInt();if(Q!==0)return z(Q);let[Z,J]=$.readVarBytes();if(J!==0)return z(J);return O({seq:V,bodyCph:Z})}};var _Q={async encodeReq($,V,Q,Z,J){let W=J.writeStruct(Y0,Q);if(W!==0)return W;for(let Y of Z){let X=J.writeVarInt(Y);if(X!==0)return X}return 0},async handleReq($,V,Q){let{clock:Z,crypto:J,storage:W}=$,[Y,X]=V.readStruct(Y0);if(X!==0)return X;let G=await j0(Y,J,Z);if(G!==0)return G;let{pubKey:K}=Y,[R,I]=await W.hasUser(K);if(I!==0)return I;if(!R)return 5;let N=[];while(!V.done()){let[F,q]=V.readVarInt();if(q!==0)return q;N.push(F)}console.info(`PULL: ${N.length} bags`);let[U,M]=await W.getBodies(K,N);if(M!==0)return M;if(!U)return 17;for(let{seq:F,bodyCph:q}of U){let C={seq:F,bodyCph:q},P=Q.writeStruct(IV,C);if(P!==0)return P}return 0},decodeResp($){return $.readStructs(IV)}};var NV={encode($,V){$.writeBytes(V.sig),$.writeBytes(V.kdm);let Q=$.writeVarBytes(V.headCph);if(Q!==0)return Q;let Z=$.writeVarBytes(V.bodyCph);if(Z!==0)return Z;return 0},decode($){let[V,Q]=$.readBytes(D0);if(Q!==0)return z(Q);let[Z,J]=$.readBytes(_0);if(J!==0)return z(J);let[W,Y]=$.readVarBytes();if(Y!==0)return z(Y);let[X,G]=$.readVarBytes();if(G!==0)return z(G);return O({sig:V,kdm:Z,headCph:W,bodyCph:X})}};var L$={encode($,V){let Q=$.writeVarInt(V.seq);if(Q!==0)return Q;let Z=$.writeVarBytes(V.headCph);if(Z!==0)return Z;let J=V.bodyCph?V.bodyCph.length:0,W=$.writeVarInt(J);if(W!==0)return W;if(J>0){if(!V.bodyCph)return 10;$.writeBytes(V.bodyCph)}return 0},decode($){let[V,Q]=$.readVarInt();if(Q!==0)return z(Q);let[Z,J]=$.readVarBytes();if(J!==0)return z(J);let[W,Y]=$.readVarInt();if(Y!==0)return z(Y);let X;if(W>0){let[G,K]=$.readBytes(W);if(K!==0)return z(K);X=G}return O({seq:V,headCph:Z,bodyCph:X})}};var x$={encode($,V){$.writeBytes(V.sig),$.writeBytes(V.kdm);let Q=$.writeVarBytes(V.headCph);if(Q!==0)return Q;return 0},decode($){let[V,Q]=$.readBytes(D0);if(Q!==0)return z(Q);let[Z,J]=$.readBytes(_0);if(J!==0)return z(J);let[W,Y]=$.readVarBytes();if(Y!==0)return z(Y);return O({sig:V,kdm:Z,headCph:W})}};var S$={encode($,V){if($.writeVarInt(V.idx),$.writeBytes(new Uint8Array([V.status])),V.status===0)$.writeVarInt(V.seq);return 0},decode($){let[V,Q]=$.readVarInt();if(Q!==0)return z(Q);let[Z,J]=$.readBytes(1);if(J!==0)return z(J);let W=Z[0];if(W!==0)return O({idx:V,status:W});let[Y,X]=$.readVarInt();if(X!==0)return z(X);return O({idx:V,status:W,seq:Y})}};var jQ={async encodeReq($,V,Q,Z,J){let W=J.writeStruct(Y0,Q);if(W!==0)return W;let Y=J.writeStructs(NV,Z);if(Y!==0)return Y;return 0},async handleReq($,V,Q){let{clock:Z,crypto:J,storage:W,notifier:Y}=$,[X,G]=V.readStruct(Y0);if(G!==0)return G;let K=await j0(X,J,Z);if(K!==0)return K;let{pubKey:R}=X,[I,N]=await W.hasUser(R);if(N!==0)return N;if(!I)return 5;let[U,M]=V.readStructs(NV);if(M!==0)return M;console.info(`PUSH: ${U.length} bags`);let F=[],q=[];for(let H=0;H<U.length;H++){let D=U[H];if(!await wQ(D,R,J)){let B={idx:H,status:3},m=Q.writeStruct(S$,B);if(m!==0)return m;continue}F.push(H),q.push(D)}let[C,P]=await W.setBags(R,q);if(P!==0)return P;if(!C||C.length!==q.length)return 17;let T=[];for(let H=0;H<q.length;H++){let D=q[H],S=F[H],B=C[H],m=new g,f=m.writeStruct(x$,D);if(f!==0)return f;let i=m.result(),w={seq:B,headCph:i};if(U.length===1&&D.bodyCph.length<=CQ)w.bodyCph=D.bodyCph;T.push(w);let b={idx:S,status:0,seq:B},l=Q.writeStruct(S$,b);if(l!==0)return l}if(T.length>0){let H=new g,D=H.writeStructs(L$,T);if(D!==0)return D;let S=H.result();await Promise.resolve(Y.push(R,S))}return 0},decodeResp($){return $.readStructs(S$)}};var LQ={async encodeReq($,V,Q,Z,J){return J.writeStruct(Y0,Q)},async handleReq($,V,Q){let{clock:Z,crypto:J,storage:W}=$,[Y,X]=V.readStruct(Y0);if(X!==0)return X;let G=await j0(Y,J,Z);if(G!==0)return G;let{pubKey:K}=Y;if(!V.done())return 8;let[R,I]=await W.addUser(K);if(I!==0)return I;return 0},decodeResp($){return O(void 0)}};class UV{url;websocket;constructor($){this.url=$}connected(){return this.websocket!==void 0&&this.websocket.readyState===WebSocket.OPEN}async connect($,V,Q=()=>{},Z=()=>{}){let{url:J}=this;if(this.websocket)this.websocket.close(),this.websocket=void 0;let W=new g;W.writeStruct(Y0,$);let Y=W.result(),X=t(Y);return J.searchParams.set("t",X),this.websocket=new WebSocket(J),this.websocket.binaryType="arraybuffer",this.websocket.onopen=()=>{console.log("CONNECTED"),Z()},this.websocket.onclose=()=>{console.log("DISCONNECTED"),this.websocket=void 0,Q()},this.websocket.onmessage=(G)=>{let K=new Uint8Array(G.data);V(K)},this.websocket.onerror=(G)=>{console.log(`ERROR: ${JSON.stringify(G)}`),this.websocket=void 0,Q()},Promise.resolve(0)}disconnect(){this.websocket?.close(),this.websocket=void 0}}var a={user:{path:"/user",endpoint:LQ,name:0},push:{path:"/push",endpoint:jQ,name:2},peek:{path:"/peek",endpoint:DQ,name:1},pull:{path:"/pull",endpoint:_Q,name:3}},GJ={0:a.user,2:a.push,1:a.peek,3:a.pull},P8={[a.user.path]:a.user,[a.push.path]:a.push,[a.peek.path]:a.peek,[a.pull.path]:a.pull};class OV{url;listener;constructor($){this.url=$;this.listener=new UV($)}async call($,V){let{path:Q}=GJ[$],Z=new URL(Q,this.url);try{return await KJ(Z,V)}catch{return z(25)}}}var f$=($)=>{return new OV($.handle)};async function KJ($,V){let Q=await fetch($,{method:"POST",body:V.result().slice()});if(!Q.ok)return z(24);let Z=await k.fromResponse(Q);return O(Z)}class E${enclave;crypto;host;clock;transport;updateHostMeta;constructor($,V,Q,Z,J,W){this.enclave=$;this.crypto=V;this.host=Q;this.clock=Z;this.transport=J;this.updateHostMeta=W}async call($,V){let{clock:Q,transport:Z}=this,{endpoint:J,name:W}=$,Y=await this.identity(),X=Q.now(),[G,K]=await GV(Y,X);if(K!==0)return z(K);let R=new g,I=await J.encodeReq(this,Y,G,V,R);if(I!==0)return z(I);let N=Q.now(),[U,M]=await Z.call(W,R),F=Q.now();if(M!==0)return z(M);let[q,C]=U.readStruct(zV);if(C!==0)return z(C);if(q.status!==0)return z(q.status);let T={clockOffset:AQ(N,q.timeRcvd,q.timeSent,F),subscription:q.subscription},H=await this.updateHostMeta(T);if(H!==0)return z(H);return J.decodeResp(U)}identity=()=>{let{host:$,enclave:V}=this;return V.deriveIdentity($.label,$.idx??0)};seal=async($)=>{let{crypto:V,enclave:Q}=this,Z=await this.identity();return TQ($,Z,V,Q)};register=()=>this.call(a.user,[]);peek=($)=>this.call(a.peek,[$]);push=($)=>this.call(a.push,$);pull=($)=>this.call(a.pull,$);listen=async($,V,Q)=>{let{clock:Z,transport:J}=this,{listener:W}=J,Y=await this.identity(),X=Z.now(),[G,K]=await GV(Y,X);if(K!==0)return K;return await W.connect(G,$,V,Q)};isConnected(){let $=this.transport?.listener;if($&&typeof $.connected==="function")return $.connected();return!0}closeListener(){this.transport?.listener?.disconnect()}}var FV={encode($,V){let Q=$.writeVarString(V.lbl);if(Q!==0)return Q;let Z=$.writeVarInt(V.idx);if(Z!==0)return Z;let J=$.writeVarInt(V.num);if(J!==0)return J;return $.writeBytes(V.hsh),$.writeBytes(V.sig),0},decode($){let[V,Q]=$.readVarString();if(Q!==0)return z(Q);let[Z,J]=$.readVarInt();if(J!==0)return z(J);let[W,Y]=$.readVarInt();if(Y!==0)return z(Y);let[X,G]=$.readBytes(_$);if(G!==0)return z(G);let[K,R]=$.readBytes(D0);if(R!==0)return z(R);return O({lbl:V,idx:Z,num:W,hsh:X,sig:K})}};var MV={encode($,V){let Q=$.writeStruct(FV,V.head);if(Q!==0)return Q;let Z=$.writeVarBytes(V.indexEnc);if(Z!==0)return Z;let J=$.writeVarBytes(V.bodyEnc);if(J!==0)return J;return 0},decode($){let[V,Q]=$.readStruct(FV);if(Q!==0)return z(Q);let[Z,J]=$.readVarBytes();if(J!==0)return z(J);let[W,Y]=$.readVarBytes();if(Y!==0)return z(Y);return O({head:V,indexEnc:Z,bodyEnc:W})}};var qV={encode($,V){$.writeBytes(V.kdm);let Q=$.writeVarBytes(V.headCph);if(Q!==0)return Q;let Z=$.writeVarInt(V.lenBody);if(Z!==0)return Z;if(V.lenBody>0&&V.offBody!==void 0){let J=$.writeVarInt(V.offBody);if(J!==0)return J}return 0},decode($){let[V,Q]=$.readBytes(_0);if(Q!==0)return z(Q);let[Z,J]=$.readVarBytes();if(J!==0)return z(J);let[W,Y]=$.readVarInt();if(Y!==0)return z(Y);let X;if(W>0){let[G,K]=$.readVarInt();if(K!==0)return z(K);X=G}return O({kdm:V,headCph:Z,lenBody:W,offBody:X})}};async function xQ($,V,Q,Z,J){let W=await J.deriveIdentity($,V),Y=new g,X=new g,G=0,K=0;for(let C of Q){let P=new g,T=P.writeStruct(X0,C.head);if(T!==0)return z(T);let H=P.result(),D=await W.kdmFor(H),S=J.deriveCipher(D,"encrypt"),B=await S.encrypt(H),m=C.body?await S.encrypt(C.body):new Uint8Array(0),f=C.head.len>0&&C.head.hsh!==void 0?m.length:0,i={kdm:D,headCph:B,lenBody:f,offBody:f>0?K:void 0},w=Y.writeStruct(qV,i);if(w!==0)return z(w);if(C.body)X.writeBytes(m),K+=m.length;G++}let R=X.result(),I=Y.result(),N=await Z.blake3(I),U=await W.sign(N),M={lbl:$,idx:V,num:G,hsh:N,sig:U},F=new g;F.writeStruct(MV,{head:M,indexEnc:I,bodyEnc:R});let q=F.result();return O(q)}async function SQ($,V,Q){let[Z,J]=MV.decode(new k($));if(J!==0)return z(J);let{head:W,indexEnc:Y,bodyEnc:X}=Z,G=await Q.deriveIdentity(W.lbl,W.idx);if(!await V.checkSigEd25519(W.sig,W.hsh,G.publicKey))return z(3);let R=await V.blake3(Y);if(!e(R,W.hsh))return z(19);let I=new k(Y),N=[];for(let M=0;M<W.num;M++){let[F,q]=I.readStruct(qV);if(q!==0)return z(q);N.push(F)}if(N.length!==W.num)return z(14);let U=[];for(let M of N){let F=Q.deriveCipher(M.kdm,"decrypt"),q;try{q=await F.decrypt(M.headCph)}catch{return z(20)}let[C,P]=X0.decode(new k(q));if(P!==0)return z(P);let T;if(M.lenBody>0&&M.offBody!==void 0){if(C.hsh===void 0)return z(14);let H=X.slice(M.offBody,M.offBody+M.lenBody);try{T=await F.decrypt(H)}catch{return z(20)}let D=await V.blake3(T);if(!e(D,C.hsh))return z(19)}U.push({head:C,body:T})}return O(U)}async function fQ({now:$,bod:V,crypto:Q}){let Z=await Q.genRandomBytes(8),J=new g,W=J.writeStruct(o,{id:Z,ts:$});if(W!==0)return z(W);let Y=J.result();return m$({now:$,eid:Y,ctr:0,bod:V,crypto:Q})}async function m$({now:$,eid:V,ctr:Q,bod:Z,crypto:J}){let W=new k(V),[Y,X]=o.decode(W);if(X!==0)return z(X);let G=$.getTime()-Y.ts.getTime(),K,R=Z?.length??0;if(Z&&R>0)K=await J.blake3(Z);return O({eid:V,off:G,ctr:Q,len:R,hsh:K})}function EQ($,V){let Q=$.length<V.length?$.length:V.length;for(let Z=0;Z<Q;Z++)if($[Z]!==V[Z])return $[Z]-V[Z];return $.length-V.length}async function d0($,V){let Q=Array.from($);Q.sort(EQ);let Z=0;for(let Y of Q)Z+=Y.length;let J=new Uint8Array(Z),W=0;for(let Y of Q)J.set(Y,W),W+=Y.length;return V.blake3(J)}function mQ($){let V=new g,Q=V.writeVarBytes($.eid);if(Q!==0)return z(Q);let Z=V.writeDate($.updatedAt);if(Z!==0)return z(Z);let J=V.writeVarInt($.ctr);if(J!==0)return z(J);return O(V.result())}async function K$($,V){let Q=[];for(let Z of $){let[J,W]=mQ(Z);if(W!==0||!J)return z(W);Q.push(J)}return O(await d0(Q,V))}var RG=Symbol("EntityID");function BQ($){return"type"in $}var IG=Symbol("MasterSeed"),NG=Symbol("DerivationSeed"),UG=Symbol("PublicKey"),OG=Symbol("PrivateKey"),FG=Symbol("HostSpecificKeyPair"),MG=Symbol("Hash");function zJ($){if(!$)return!1;if(typeof $!=="object")return!1;if("body"in $===!1)return!1;if("type"in $===!1)return!1;return!0}function RJ($){if(!$.bod||$.bod.length===0){let Z={off:$.off,ctr:$.ctr,eid:$.eid};return O(Z)}let V=XV($.bod);if(zJ(V)===!1)return console.warn("msg body invalid",V),z(14);let Q={off:$.off,ctr:$.ctr,eid:$.eid,gid:V.gid,pid:V.pid,tags:V.tags,type:V.type,body:V.body};return O(Q)}class z${applier;emitter=new A0;clearer;onDirtyEids;cacheDriven;peerIngest;constructor($,V,Q,Z){this.applier=$;this.clearer=V,this.onDirtyEids=Q,this.cacheDriven=Z?.cacheDriven??!1,this.peerIngest=Z?.peerIngest}apply=async($)=>{let V=[],Q=[];for(let X of $){let[G,K]=RJ(X);if(Q.push(K),K!==0)continue;V.push(G)}let{stats:Z,types:J,eids:W}=await this.applier(V),Y=[];for(let X=0;X<$.length;X++){let G=Q[X],K=Z[X];if(G!==0){Y.push(G);continue}if(K!==0){Y.push(K);continue}Y.push(0)}if(!this.cacheDriven)for(let X of J)this.emitter.emit(X,null);if(W.length>0)this.onDirtyEids?.(W);return Y};clear=async()=>{let $=await this.clearer();if($!==0)return $;return this.emitter.emitAll(null),$};notify=($)=>{for(let V of $)this.emitter.emit(V,null)};refresh=async($)=>{if(this.peerIngest){await this.peerIngest($);return}};on=($,V)=>{this.emitter.addEventListener($,V)};off=($,V)=>{this.emitter.removeEventListener($,V)}}var HV={apply:async function($){return $.map(()=>0)},clear:async function(){return 0},notify:function($){},refresh:async function($){},on:function($,V){},off:function($,V){}};var n="entities",B$="entity_type_created_at",CV="entity_type_updated_at",wV="entity_type_group_id",TV="entity_type_parent_id",r0="entity_tags",kQ="db",gQ=13;function IJ($){return"typ"in $}function NJ($){let V={bod:$.body,crd:$.createdAt,...$.ctr!==0?{ctr:$.ctr}:{},eid:L($.eid),gid:$.gid,pid:$.pid?L($.pid):void 0,tgs:$.tags,typ:$.type,upd:$.updatedAt};if(V.gid===void 0)delete V.gid;if(V.pid===void 0)delete V.pid;if(V.tgs===void 0)delete V.tgs;if(V.ctr===void 0)delete V.ctr;return V}function UJ($){if(!u($))return{eid:L($.eid),upd:$.updatedAt,...$.ctr!==0?{ctr:$.ctr}:{}};return NJ($)}function o0($){return{body:$.bod,createdAt:$.crd,updatedAt:$.upd,ctr:$.ctr??0,type:$.typ,eid:Q0($.eid),gid:$.gid,pid:$.pid?Q0($.pid):void 0,...$.tgs!==void 0?{tags:$.tgs}:{}}}function PV($){if(IJ($))return o0($);return{eid:Q0($.eid),updatedAt:$.upd,ctr:$.ctr??0}}class AV{db;opening;async init(){await this.ensureDb()}async ensureDb(){if(this.db)return this.db;if(this.opening)return this.opening;return this.opening=FJ().then(($)=>{return $.onversionchange=()=>{if($.close(),this.db===$)this.db=void 0},this.db=$,this.opening=void 0,$},($)=>{throw this.opening=void 0,$}),this.opening}apply=async($)=>{let V=new Set,Q=[],Z;try{Z=await this.ensureDb()}catch{return{stats:$.map(()=>16),types:V,eids:Q}}let J=Z.transaction(n,"readwrite"),W=J.objectStore(n);return new Promise((Y)=>{let X=Array($.length).fill(0);if($.length<1){Y({stats:[],types:V,eids:Q});return}J.oncomplete=()=>{Y({stats:X,types:V,eids:Q})},J.onerror=()=>{for(let K=0;K<X.length;K++)if(X[K]===void 0)X[K]=18;Y({stats:X,types:V,eids:Q})};let G=new Map;for(let K=0;K<$.length;K++){let R=$[K],I=L(R.eid),N={op:R,index:K},U=G.get(I);if(U)U.push(N);else G.set(I,[N])}for(let[K,R]of G){if(R.length<1)continue;let I=W.get(K);I.onsuccess=()=>{let N=I.result,U=N?PV(N):void 0,M=!1;for(let{op:F,index:q}of R){let[C,P]=a0(U,F);if(P!==0){X[q]=P;continue}if(C===void 0){X[q]=12;continue}M=!0;for(let T of s0(U,C))V.add(T);U=C}if(M)Q.push(R[0].op.eid);if(U){let F=W.put(UJ(U));F.onerror=(q)=>{q.preventDefault();for(let{index:C}of R)X[C]=18}}},I.onerror=()=>{for(let{index:N}of R)X[N]=18}}})};async clear(){let $;try{$=await this.ensureDb()}catch{return 16}let V=$.transaction(n,"readwrite"),Q=V.objectStore(n);return new Promise((Z)=>{V.oncomplete=()=>Z(0),V.onerror=()=>Z(18),Q.clear()})}async getRow($){let V;try{V=await this.ensureDb()}catch{return z(16)}let Q=L($),J=V.transaction(n,"readonly").objectStore(n);return new Promise((W)=>{let Y=J.get(Q);Y.onsuccess=()=>{let X=Y.result;if(!X)W(O(void 0));else W(O(PV(X)))},Y.onerror=()=>W(z(18))})}async getEnt($){let[V,Q]=await this.getRow($);if(Q!==0)return z(Q);if(V===void 0||!u(V))return O(void 0);return O(V)}async getAllOfTypeUpdatedBetween($,V,Q){let Z;try{Z=await this.ensureDb()}catch{return z(16)}let W=Z.transaction(n,"readonly").objectStore(n).index(CV);return new Promise((Y)=>{let X=W.getAll(IDBKeyRange.bound([$,V],[$,Q]));X.onsuccess=()=>{let G=X.result;Y(O(G.map(o0)))},X.onerror=()=>Y(z(18))})}async getGroupMembers($,V){let Q;try{Q=await this.ensureDb()}catch{return z(16)}let J=Q.transaction(n,"readonly").objectStore(n).index(wV);return new Promise((W)=>{let Y=J.getAll(IDBKeyRange.only([$,V]));Y.onsuccess=()=>{let X=Y.result;W(O(X.map(o0)))},Y.onerror=()=>W(z(18))})}async getAllOfType($){let V;try{V=await this.ensureDb()}catch{return z(16)}let Z=V.transaction(n,"readonly").objectStore(n).index(B$);return new Promise((J)=>{let W=Z.getAll(IDBKeyRange.bound([$],[$,[]]));W.onsuccess=()=>{let Y=W.result;J(O(Y.map(o0)))},W.onerror=()=>J(z(18))})}async getByTag($,V){let Q;try{Q=await this.ensureDb()}catch{return z(16)}let J=Q.transaction(n,"readonly").objectStore(n).index(r0);return new Promise((W)=>{let Y=J.getAll(IDBKeyRange.only(V));Y.onsuccess=()=>{let G=Y.result.filter((K)=>K.typ===$).map(o0);W(O(G))},Y.onerror=()=>W(z(18))})}async getAllEntities($){if("pid"in $){let V;try{V=await this.ensureDb()}catch{return z(16)}let Q=L($.pid),J=V.transaction(n,"readonly").objectStore(n).index(TV);return new Promise((W)=>{let Y=J.getAll(IDBKeyRange.only([$.type,Q]));Y.onsuccess=()=>{let G=Y.result.map(o0);W(O(G))},Y.onerror=()=>W(z(18))})}else if("gid"in $)return await this.getGroupMembers($.type,$.gid);else if("tag"in $)return await this.getByTag($.type,$.tag);else if("updatedBetween"in $)return await this.getAllOfTypeUpdatedBetween($.type,$.updatedBetween.start,$.updatedBetween.end);return await this.getAllOfType($.type)}async getEntities($){let[V,Q]=await this.getAllEntities($);if(Q!==0)return z(Q);return O(V)}async countEntities({type:$}){let V;try{V=await this.ensureDb()}catch{return z(16)}let Z=V.transaction(n,"readonly").objectStore(n).index(B$);return new Promise((J)=>{let W=IDBKeyRange.bound([$],[$,[]]),Y=Z.count(W);Y.onsuccess=()=>J(O(Y.result)),Y.onerror=()=>J(z(18))})}async checksum($){let V;try{V=await this.ensureDb()}catch{return z(16)}let Z=V.transaction(n,"readonly").objectStore(n),J=[];return new Promise((W)=>{let Y=Z.openCursor();Y.onsuccess=()=>{let X=Y.result;if(X){let G=X.value;J.push(R$(PV(G))),X.continue()}else K$(J,$).then(W)},Y.onerror=()=>W(z(18))})}}function OJ($,V){if(!$.objectStoreNames.contains(n))$.createObjectStore(n,{keyPath:"eid",autoIncrement:!1});let Q=V.objectStore(n);if(!Q.indexNames.contains(B$))Q.createIndex(B$,["typ","crd"],{unique:!1});if(!Q.indexNames.contains(CV))Q.createIndex(CV,["typ","upd"],{unique:!1});if(!Q.indexNames.contains(wV))Q.createIndex(wV,["typ","gid"],{unique:!1});if(!Q.indexNames.contains(TV))Q.createIndex(TV,["typ","pid"],{unique:!1});if(Q.indexNames.contains(r0)){if(Q.index(r0).keyPath!=="tgs")Q.deleteIndex(r0)}if(!Q.indexNames.contains(r0))Q.createIndex(r0,"tgs",{unique:!1,multiEntry:!0})}function FJ(){return new Promise(($,V)=>{let Q=indexedDB.open(kQ,gQ);Q.onupgradeneeded=()=>{let{result:Z,transaction:J}=Q;if(!J){V(Error("Transaction is null during EntDB upgrade"));return}try{OJ(Z,J)}catch(W){V(W instanceof Error?W:Error(String(W)))}},Q.onblocked=()=>{console.warn(`[DIPLOMATIC] EntDB IDB upgrade blocked (${kQ} → v${gQ}); waiting for other connections to close`)},Q.onsuccess=()=>$(Q.result),Q.onerror=()=>V(Q.error??Error("EntDB IndexedDB open failed"))})}async function vQ(){let $=new AV;return await $.init(),$}class k${ents=new Map;useIndex;byType=new Map;byTypePid=new Map;byTypeGid=new Map;byTypeTag=new Map;constructor($=[],V){this.useIndex=V?.indexes!==!1;for(let Q of $)this.put(Q)}put($){let V=L($.eid),Q=this.ents.get(V);if(Q!==void 0&&u(Q))this.unindex(V,Q);if(this.ents.set(V,$),u($))this.index(V,$)}del($){let V=this.ents.get($);if(V===void 0)return;if(u(V))this.unindex($,V);this.ents.delete($)}index($,V){if(!this.useIndex)return;let Q=this.byType.get(V.type);if(!Q)Q=new Map,this.byType.set(V.type,Q);if(Q.set($,V),V.pid){let Z=L(V.pid),J=this.byTypePid.get(V.type);if(!J)J=new Map,this.byTypePid.set(V.type,J);let W=J.get(Z);if(!W)W=new Map,J.set(Z,W);W.set($,V)}if(typeof V.gid==="string"){let Z=this.byTypeGid.get(V.type);if(!Z)Z=new Map,this.byTypeGid.set(V.type,Z);let J=Z.get(V.gid);if(!J)J=new Map,Z.set(V.gid,J);J.set($,V)}if(V.tags){let Z=this.byTypeTag.get(V.type);if(!Z)Z=new Map,this.byTypeTag.set(V.type,Z);for(let J of V.tags){let W=Z.get(J);if(!W)W=new Map,Z.set(J,W);W.set($,V)}}}unindex($,V){if(!this.useIndex)return;let Q=this.byType.get(V.type);if(Q){if(Q.delete($),Q.size===0)this.byType.delete(V.type)}if(V.pid){let Z=L(V.pid),J=this.byTypePid.get(V.type),W=J?.get(Z);if(W){if(W.delete($),W.size===0)J?.delete(Z)}if(J&&J.size===0)this.byTypePid.delete(V.type)}if(typeof V.gid==="string"){let Z=this.byTypeGid.get(V.type),J=Z?.get(V.gid);if(J){if(J.delete($),J.size===0)Z?.delete(V.gid)}if(Z&&Z.size===0)this.byTypeGid.delete(V.type)}if(V.tags){let Z=this.byTypeTag.get(V.type);if(Z){for(let J of V.tags){let W=Z.get(J);if(W){if(W.delete($),W.size===0)Z.delete(J)}}if(Z.size===0)this.byTypeTag.delete(V.type)}}}clearIndexes(){this.byType.clear(),this.byTypePid.clear(),this.byTypeGid.clear(),this.byTypeTag.clear()}bucketList($){if(!$||$.size===0)return[];let V=[];for(let Q of $.values())V.push(Q);return V}async apply($){let V=new Set,Q=[],Z=[];for(let J of $){let W=L(J.eid),Y=this.ents.get(W),[X,G]=a0(Y,J);if(G!==0){Z.push(G);continue}if(X===void 0){Z.push(12);continue}for(let K of s0(Y,X))V.add(K);this.put(X),Q.push(J.eid),Z.push(0)}return{stats:Z,types:V,eids:Q}}async clear(){return this.ents.clear(),this.clearIndexes(),0}async getRow($){let V=L($),Q=this.ents.get(V);return O(Q)}async getEnt($){let[V,Q]=await this.getRow($);if(Q!==0)return z(Q);if(V===void 0||!u(V))return O(void 0);return O(V)}async getAllEntities({type:$,gid:V,pid:Q,tag:Z,updatedBetween:J}){if(this.useIndex){if(Q!==void 0){let Y=L(Q);return O(this.bucketList(this.byTypePid.get($)?.get(Y)))}if(V!==void 0)return O(this.bucketList(this.byTypeGid.get($)?.get(V)));if(Z!==void 0)return O(this.bucketList(this.byTypeTag.get($)?.get(Z)));if(J!==void 0){let Y=[],X=this.byType.get($);if(X){for(let G of X.values())if(G.updatedAt>=J.start&&G.updatedAt<=J.end)Y.push(G)}return O(Y)}return O(this.bucketList(this.byType.get($)))}let W=[];if(Q!==void 0){for(let Y of this.ents.values())if(u(Y)&&Y.type===$&&Y.pid&&e(Y.pid,Q))W.push(Y)}else if(V!==void 0){for(let Y of this.ents.values())if(u(Y)&&Y.type===$&&(typeof Y.gid==="string"&&Y.gid===V))W.push(Y)}else if(Z!==void 0){for(let Y of this.ents.values())if(u(Y)&&Y.type===$&&Y.tags&&Y.tags.includes(Z))W.push(Y)}else if(J!==void 0){for(let Y of this.ents.values())if(u(Y)&&Y.type===$&&Y.updatedAt>=J.start&&Y.updatedAt<=J.end)W.push(Y)}else for(let Y of this.ents.values())if(u(Y)&&Y.type===$)W.push(Y);return O(W)}async getEntities($){let[V,Q]=await this.getAllEntities($);if(Q!==0)return z(Q);return O(V)}async countEntities({type:$}){if(this.useIndex)return O(this.byType.get($)?.size??0);let V=0;for(let Q of this.ents.values())if(u(Q)&&Q.type===$)V+=1;return O(V)}async checksum($){let V=[];for(let Q of this.ents.values())V.push(R$(Q));return K$(V,$)}}async function DV($){let V=await vQ();if($?.cache===!1)return V;return new I$(V,void 0,{indexes:$?.indexes})}class I${mem;durable;warmed=new Set;listeners=new Set;chain=Promise.resolve();constructor($,V,Q){if(this.durable=$,this.mem=new k$(V??[],{indexes:Q?.indexes}),V)for(let Z of V)this.warmed.add(Z.type)}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}emit($){if($.size<1)return;for(let V of this.listeners)V($)}run($){let V=this.chain.then($,$);return this.chain=V.then(()=>{return},()=>{return}),V}apply($){return this.run(async()=>{await this.pullEids($.map((W)=>W.eid));let V=wJ(this.mem,$);this.emit(V.types);let Q=await this.durable.apply($),{changed:Z,status:J}=await this.pullEids($.map((W)=>W.eid));if(this.emit(Z),J!==0)return{stats:$.map(()=>J),types:Q.types,eids:Q.eids};return Q})}clear(){return this.run(async()=>{let $=await this.durable.clear();if($!==0)return $;let V=this.mem.ents.size>0;return await this.mem.clear(),this.warmed.clear(),0})}ingestFromDurable($){return this.run(async()=>{let{changed:V,status:Q}=await this.pullEids($);return this.emit(V),Q})}async pullEids($){let V=new Set,Q=new Set;for(let Z of $){let J=L(Z);if(Q.has(J))continue;Q.add(J);let W=this.mem.ents.get(J),[Y,X]=await this.durable.getRow(Z);if(X!==0)return{changed:V,status:X};if(Y){if(this.mem.put(Y),!W||!MJ(W,Y)){if(u(Y))V.add(Y.type);if(W!==void 0&&u(W))V.add(W.type)}}else if(W!==void 0){if(this.mem.del(J),u(W))V.add(W.type)}}return{changed:V,status:0}}async warmType($){if(this.warmed.has($))return 0;let[V,Q]=await this.durable.getEntities({type:$});if(Q!==0)return Q;if(V)for(let Z of V){let J=L(Z.eid),W=this.mem.ents.get(J);if(!W||CJ(Z,W))this.mem.put(Z)}return this.warmed.add($),0}async getRow($){let V=L($);if(this.mem.ents.has(V))return this.mem.getRow($);return this.run(async()=>{if(this.mem.ents.has(V))return this.mem.getRow($);let[Q,Z]=await this.durable.getRow($);if(Z!==0)return z(Z);if(Q)this.mem.put(Q);return O(Q)})}async getEnt($){let[V,Q]=await this.getRow($);if(Q!==0)return z(Q);if(V===void 0||!u(V))return O(void 0);return O(V)}async getEntities($){if(!this.warmed.has($.type)){let V=await this.run(()=>this.warmType($.type));if(V!==0)return z(V)}return this.mem.getEntities($)}async countEntities({type:$}){if(!this.warmed.has($)){let V=await this.run(()=>this.warmType($));if(V!==0)return z(V)}return this.mem.countEntities({type:$})}async checksum($){return this.durable.checksum($)}}function MJ($,V){if(u($)!==u(V))return!1;if($.ctr!==V.ctr)return!1;if($.updatedAt.getTime()!==V.updatedAt.getTime())return!1;if(!e($.eid,V.eid))return!1;if(!u($)||!u(V))return!0;if($.createdAt.getTime()!==V.createdAt.getTime())return!1;if($.type!==V.type)return!1;if($.gid!==V.gid)return!1;if(!HJ($.pid,V.pid))return!1;if(!qJ($.tags,V.tags))return!1;return PJ($.body,V.body)}function qJ($,V){if($===V)return!0;if($===void 0||V===void 0)return!1;if($.length!==V.length)return!1;for(let Q=0;Q<$.length;Q++)if($[Q]!==V[Q])return!1;return!0}function HJ($,V){if($===void 0&&V===void 0)return!0;if($===void 0||V===void 0)return!1;return e($,V)}function PJ($,V){if(Object.is($,V))return!0;if($ instanceof Uint8Array&&V instanceof Uint8Array)return e($,V);if($ instanceof Date&&V instanceof Date)return $.getTime()===V.getTime();try{return e(f0($),f0(V))}catch{return!1}}function CJ($,V){let Q=$.updatedAt.getTime(),Z=V.updatedAt.getTime();if(Q!==Z)return Q>Z;return $.ctr>V.ctr}function wJ($,V){let Q=new Set,Z=[];for(let J of V){let W=L(J.eid),Y=$.ents.get(W),[X,G]=a0(Y,J);if(G!==0){Z.push(G);continue}if(X===void 0){Z.push(12);continue}for(let K of s0(Y,X))Q.add(K);$.put(X),Z.push(0)}return{stats:Z,types:Q}}function g$($){if($ instanceof I$){let V=new z$((Q)=>$.apply(Q),()=>$.clear(),void 0,{cacheDriven:!0,peerIngest:async(Q)=>{await $.ingestFromDurable(Q)}});return $.subscribe((Q)=>V.notify(Q)),V}return new z$((V)=>$.apply(V),()=>$.clear())}function u($){return"type"in $}function TJ($){return!u($)}function iQ($){if(!Array.isArray($)||$.length===0)return;let V=new Set,Q=[];for(let Z of $){if(typeof Z!=="string"||Z.length===0)continue;if(V.has(Z))continue;V.add(Z),Q.push(Z)}return Q.length>0?Q:void 0}function R$($){return{eid:$.eid,ctr:$.ctr,updatedAt:$.updatedAt}}function _V($){let V=new k($.eid),[Q,Z]=V.readStruct(o);if(Z!==0)return z(Z);return O({eid:$.eid,ctr:$.ctr,updatedAt:new Date(Q.ts.getTime()+$.off)})}function a0($,V){let Q=new k(V.eid),[Z,J]=Q.readStruct(o);if(J!==0)return z(J);let W=new Date(Z.ts.getTime()+V.off);if($!==void 0&&W<=$.updatedAt)return z(15);if(BQ(V)){let Y=iQ(V.tags);return O({eid:V.eid,gid:V.gid,pid:V.pid,...Y!==void 0?{tags:Y}:{},type:V.type,createdAt:Z.ts,updatedAt:W,ctr:V.ctr,body:V.body})}return O({eid:V.eid,updatedAt:W,ctr:V.ctr})}function s0($,V){let Q=new Set;if($!==void 0&&u($))Q.add($.type);if(u(V))Q.add(V.type);return[...Q]}var AJ={getEnt:async()=>z(21),getRow:async()=>z(21),getEntities:async($)=>z(21),countEntities:async()=>z(21),checksum:async()=>z(21),apply:async($)=>({stats:$.map(()=>21),types:new Set,eids:[]}),clear:async()=>21};class v${inflight=null;again=!1;run($){if(this.again=!0,this.inflight)return this.inflight;return this.inflight=this.drain($),this.inflight}async flush(){if(!this.inflight)return;try{await this.inflight}catch{}}async drain($){try{this.again=!1;let V=await $();while(this.again)this.again=!1,V=await $();return V}finally{this.inflight=null}}}var i$=100;class N${timer=null;delayMs;work;tail=new v$;constructor($,V){this.delayMs=$<0?0:$,this.work=V}schedule(){if(this.delayMs<=0){this.fire();return}if(this.timer!==null)clearTimeout(this.timer);this.timer=setTimeout(()=>{this.timer=null,this.fire()},this.delayMs)}async flush(){if(this.timer!==null)clearTimeout(this.timer),this.timer=null,this.fire();await this.tail.flush()}cancel(){if(this.timer!==null)clearTimeout(this.timer),this.timer=null}fire(){return this.tail.run(this.work)}}function yQ($){let V=new k($.eid),[Q,Z]=o.decode(V);if(Z!==0)return;return Q.ts.getTime()+$.off}function DJ($,V){let Q=yQ($),Z=yQ(V);if(Q===void 0&&Z===void 0)return 0;if(Q===void 0)return 1;if(Z===void 0)return-1;if(Z!==Q)return Z-Q;return V.ctr-$.ctr}function t0($,V){return $.slice().sort((Q,Z)=>DJ(V(Q),V(Z)))}var E0={phase:"idle"},e0=50;function y$($,V,Q){if($<=0||V<=0)return!1;if($===1||$===V)return!0;return $%Q===0}function u$($,V){if(typeof navigator.msSaveOrOpenBlob==="function"){navigator.msSaveOrOpenBlob($,V);return}let Q=URL.createObjectURL($),Z=document.createElement("a");Z.href=Q,Z.download=V,document.body.appendChild(Z),Z.click(),document.body.removeChild(Z),URL.revokeObjectURL(Q)}function uQ($,V,Q){let Z=[],J=[],W=0;for(let Y of $){let X=V(Y);if(J.length>0&&W+X>Q)Z.push(J),J=[],W=0;if(J.push(Y),W+=X,W>=Q)Z.push(J),J=[],W=0}if(J.length>0)Z.push(J);return Z}async function jV($,V,Q){let Z=$.length;if(Z<1)return[];let J=Array(Z),W=0,Y=Math.min(Math.max(1,V),Z),X=async()=>{while(!0){let K=W;if(W+=1,K>=Z)return;J[K]=await Q($[K],K)}},G=[];for(let K=0;K<Y;K++)G.push(X());return await Promise.all(G),J}async function b$($,V,Q,Z){let J=new k($.headCph),[W,Y]=J.readStruct(x$);if(Y!==0)return z(Y);let{sig:X,kdm:G,headCph:K}=W;if(!await Z.checkSigEd25519(X,K,V))return z(3);let I=Q.deriveCipher(G,"decrypt"),N;try{N=await I.decrypt(K)}catch{return z(20)}return O({kdm:G,headEnc:N})}var q0="f",x0="t",N0="e";function _J($){return $===q0||$===x0||$===N0}function $$($){if($===!0||$===x0)return x0;if($===N0)return N0;return q0}function jJ($){return $$($.apld)===q0}function LV($){return $!==0&&$!==15&&$!==18&&$!==17}function m0($,V,Q){if($.apld=V,V===N0&&Q!==void 0)$.err=Q;else delete $.err}async function S0($,V,Q,Z){let J=Z?.body!==!1,W=$$(V.apld),Y=V.body,X=Y?.length??0,G;if(J&&Y&&X>0)G=await Q.blake3(Y);let K={eid:V.eid,off:V.off??0,ctr:V.ctr??0,len:X,hsh:G},R={hash:$,head:K,apld:W};if(J&&Y!==void 0)R.body=Y;if(W===N0&&V.err!==void 0)R.err=V.err;return R}var xV=1048576,SV=1048576,hQ=64;function LJ($){return $.sig.length+$.kdm.length+$.headCph.length+$.bodyCph.length}async function xJ($,V,Q,Z,J){if(Z.length<1)return 0;let[W,Y]=await $.push(Z);if(Y!==0)return Y;if(!W)return 27;for(let G of W){if(G.status!==0){console.error("push err",G);continue}let K=J[G.idx];if(!K){console.error("no hash",G);continue}await V.uploads.deq(Q,[K])}let X=await V.hosts.get(Q);if(X){let G=X.lastSeq,K=G,R=[];for(let I of W)if(I.status===0)R.push(I.seq);R.sort((I,N)=>I-N);for(let I of R)if(I===G+1)G=I;if(G>K)await V.hosts.touch(Q,G)}return 0}async function bQ($,V){if(V.length<1)return O([]);let Q=new Map,Z=[];for(let X of V)Q.set(X.seq,X),Z.push(X.seq);let[J,W]=await $.pull(Z);if(W!==0)return z(W);if(!J)return z(27);let Y=[];for(let{seq:X,bodyCph:G}of J){let K=Q.get(X);if(!K)continue;Y.push({dl:K,bodyCph:G})}return O(Y)}async function SJ($,V,Q,Z){if(Z.length<1)return O({parts:[],hashes:[]});let J=[],W=[],Y=[],X=new Map;for(let{dl:K,bodyCph:R}of Z){let{head:I,kdm:N,seq:U,host:M}=K,[F,q]=await lQ(K,Q);if(q!==0||!F){let f=X.get(M)??[];f.push(U),X.set(M,f);continue}let{headEnc:C,headEncHash:P}=F,T=V.deriveCipher(N,"decrypt"),[H,D]=await KV(C,R,T,Q,P);if(D!==0||!H){let f=X.get(M)??[];f.push(U),X.set(M,f);continue}let S={head:I,body:H.bod},B=H.headHash;Y.push({key:B,data:cQ(S)}),J.push(S),W.push(B);let m=X.get(M)??[];m.push(U),X.set(M,m)}let G=await $.messages.add(Y);for(let[K,R]of X)await $.downloads.deq(K,R);for(let K=0;K<G.length;K++){let R=G[K];if(R!==0&&R!==15)console.error("ERR storing",_[R],"for message",K)}return O({parts:J,hashes:W})}async function lQ($,V){let Q=$.headEnc;if(!Q){let J=new g,W=J.writeStruct(X0,$.head);if(W!==0)return z(W);Q=J.result()}if($.headEncHash)return O({headEnc:Q,headEncHash:$.headEncHash});let Z=await V.blake3(Q);return O({headEnc:Q,headEncHash:Z})}async function pQ($,V,Q){let Z=new Set;for(let Y of V)Z.add(L(Y));if(Z.size<1)return;let J=Array.from(await $.downloads.list());if(J.length<1)return;let W=new Map;for(let Y of J){let X;if(Y.headEncHash)X=L(Y.headEncHash);else{let[K,R]=await lQ(Y,Q);if(R!==0||!K)continue;X=L(K.headEncHash)}if(!Z.has(X))continue;let G=W.get(Y.host)??[];G.push(Y.seq),W.set(Y.host,G)}for(let[Y,X]of W)await $.downloads.deq(Y,X)}async function fV({conn:$,store:V,enclave:Q,host:Z,crypto:J,onProgress:W,peekProgressEvery:Y,peekConcurrency:X}){let G=await $.identity(),K=[],[R,I]=await $.peek(Z.lastSeq);if(I!==0)return I;let N=R.length,U=Y??e0,M=X??hQ;if(W&&N>0)W({phase:"peek",host:Z.label,done:0,total:N});let F=0,q=await jV(R,M,async(P)=>{let[T,H]=await b$(P,G.publicKey,Q,J),D;if(H!==0||!T)D={ok:!1,seq:P.seq,stat:H};else{let S=await J.blake3(T.headEnc);D={ok:!0,seq:P.seq,kdm:T.kdm,headEnc:T.headEnc,headEncHash:S}}if(F+=1,W&&y$(F,N,U))W({phase:"peek",host:Z.label,done:F,total:N});return D}),C=new Set;for(let P of q){if(!P.ok){console.error("peek: decrypting item head",P.stat);continue}let T=L(P.headEncHash);if(await V.messages.has(P.headEncHash)){console.info("peek: local msg; skip download, deq upload"),await V.uploads.deq(Z.label,[P.headEncHash]),await V.downloads.deq(Z.label,[P.seq]);continue}if(C.has(T)){await V.downloads.deq(Z.label,[P.seq]);continue}let D=new k(P.headEnc),[S,B]=D.readStruct(X0);if(B!==0){console.error("peek: reading item head",B);continue}C.add(T),K.push({kdm:P.kdm,head:S,seq:P.seq,host:Z.label,headEnc:P.headEnc,headEncHash:P.headEncHash})}if(await V.downloads.enq(K),R.length>0){let P=Math.max(...R.map((T)=>T.seq));await V.hosts.recordStats(Z.label,{lastSeq:P})}if(W)W({phase:"peek",host:Z.label,done:N,total:N});return 0}async function nQ({conn:$,store:V,host:Q,maxPushBytes:Z,onProgress:J}){let W=Z??xV,Y=await V.uploads.list(Q.label),X=Y.length,G=0;if(J&&X>0)J({phase:"push",host:Q.label,done:0,total:X});let K=[],R=[],I=0,N=async()=>{if(K.length<1)return 0;let U=K.length,M=await xJ($,V,Q.label,K,R);if(K=[],R=[],I=0,M===0){if(G+=U,J)J({phase:"push",host:Q.label,done:G,total:X})}return M};for(let U of Y){let M=await V.messages.get(U);if(!M){G+=1;continue}let F={...M.head,bod:M.body},[q,C]=await $.seal(F);if(C!==0)return C;if(!q)return 12;let P=LJ(q);if(K.length>0&&I+P>W){let T=await N();if(T!==0)return T}if(K.push(q),R.push(U),I+=P,I>=W){let T=await N();if(T!==0)return T}}return N()}async function EV({conn:$,store:V,enclave:Q,host:Z,crypto:J,maxPullBytes:W,onProgress:Y},X){let G=W??SV,K=await V.downloads.list(),R=Array.from(K).filter((q)=>q.host===Z.label);if(R.length<1)return 15;let I=t0(R,(q)=>q.head),N=uQ(I,(q)=>q.head.len,G),U=I.length,M=0;if(Y)Y({phase:"pull",host:Z.label,done:0,total:U});let F=bQ($,N[0]);for(let q=0;q<N.length;q++){let[C,P]=await F;if(P!==0||!C)return P;if(M+=N[q].length,Y)Y({phase:"pull",host:Z.label,done:M,total:U});let T=N[q+1];if(T)F=bQ($,T);if(Y)Y({phase:"open",host:Z.label,done:M,total:U});let H=t0(C,(S)=>S.dl.head),[,D]=await SJ(V,Q,J,H);if(D!==0)return D;if(X){if(Y)Y({phase:"exec",host:Z.label,done:M,total:U});await X()}}return 0}function cQ({head:$,body:V}){let Q={eid:$.eid,body:V,apld:q0};if($.off!==0)Q.off=$.off;if($.ctr!==0)Q.ctr=$.ctr;return Q}async function dQ($,{conn:V,store:Q,enclave:Z,host:J,crypto:W,onProgress:Y},X){let G=J.label,K=await V.identity(),R=new k($),[I,N]=R.readStructs(L$);if(N!==0){console.error("Failed decoding notif",_[N]);return}let U=!1,F=(await Q.hosts.get(G))?.lastSeq,q=[],C=!1;for(let H of I){let[D,S]=await b$({seq:H.seq,headCph:H.headCph},K.publicKey,Z,W);if(S!==0){console.error("Failed decrypting notif",_[S]);continue}let B=await W.blake3(D.headEnc);if(await Q.messages.has(B))continue;let m=new k(D.headEnc),[f,i]=m.readStruct(X0);if(i!==0){console.error("Failed to parse head",_[i]);continue}if(!H.bodyCph&&f.len>0)C=!0,await Q.downloads.enq([{seq:H.seq,host:G,kdm:D.kdm,head:f,headEnc:D.headEnc,headEncHash:B}]);else q.push({...D,head:f,bodyCph:H.bodyCph,headEncHash:B});if(F===void 0||H.seq!==F+1)console.log("out of seq",H.seq,F),U=!0;else F=H.seq}if(F!==void 0)await Q.hosts.touch(J.label,F);let P=[];for(let H of q){let D=Z.deriveCipher(H.kdm,"decrypt"),[S,B]=await KV(H.headEnc,H.bodyCph,D,W);if(B!==0){console.error("Failed to open body",_[B]);continue}P.push({key:H.headEncHash,data:cQ({head:H.head,body:S.bod})})}let T=await Q.messages.add(P);for(let H=0;H<T.length;H++){let D=T[H];if(D!==0&&D!==15)console.error("ERR storing",_[D],"for message",H)}if(Y&&P.length>0)Y({phase:"open",host:J.label,done:P.length,total:P.length});if(U||C||P.length>0)X()}async function mV($,V={}){let Q=V.pull!==!1,Z=V.push===!0,{conn:J,store:W,enclave:Y,host:X,crypto:G,onProgress:K,peekProgressEvery:R,peekConcurrency:I}=$,N=await J.identity(),[U,M]=await J.peek(0);if(M!==0)return z(M);let F=U.length,q=R??e0,C=I??hQ;if(K&&F>0)K({phase:"peek",host:X.label,done:0,total:F});let P=0,T=await jV(U,C,async(x)=>{let[v,E]=await b$(x,N.publicKey,Y,G),y;if(E!==0||!v)y={ok:!1,seq:x.seq,stat:E};else{let j=await G.blake3(v.headEnc);y={ok:!0,seq:x.seq,kdm:v.kdm,headEnc:v.headEnc,headEncHash:j}}if(P+=1,K&&y$(P,F,q))K({phase:"peek",host:X.label,done:P,total:F});return y}),H=new Map;for(let x of T){if(!x.ok)continue;let v=L(x.headEncHash),E=H.get(v);if(E)E.count+=1;else H.set(v,{hash:x.headEncHash,count:1,sample:x})}let D=0,S=[];for(let x of H.values()){if(x.count>1)D+=x.count-1;S.push(x.hash)}let B=U.length,m=H.size,f=await d0(S,G),i=[],w=0;for(let x of H.values()){if(await W.messages.has(x.hash)){await W.uploads.deq(X.label,[x.hash]);continue}if(w+=1,!Q)continue;let E=x.sample,y=new k(E.headEnc),[j,c]=y.readStruct(X0);if(c!==0){console.error("reconcile: reading msg header",c);continue}i.push({kdm:E.kdm,head:j,seq:E.seq,host:X.label,headEnc:E.headEnc,headEncHash:E.headEncHash})}if(i.length>0)await W.downloads.enq(i);let b=0;if(Z){let x=await W.messages.listKeys(),v=new Set(H.keys()),E=[];for(let y of x)if(!v.has(L(y)))b+=1,E.push(y);if(E.length>0)await W.uploads.enq(X.label,E)}else{let x=await W.messages.listKeys(),v=new Set(H.keys());for(let E of x)if(!v.has(L(E)))b+=1}let l=U.length>0?Math.max(...U.map((x)=>x.seq)):0;if(await W.hosts.recordStats(X.label,{setLastSeq:l}),K)K({phase:"peek",host:X.label,done:F,total:F});return O({msgcheck:f,numBags:B,uniqueMsgs:m,numDupes:D,missingLocal:w,missingHost:b})}class B0{clock;state;store;transport;crypto;forceSkewHandlingByDefault;onScheduleSync;connections=new Map;applyChain=Promise.resolve();syncRuns=new v$;clientState;xferState;maxPushBytes;maxPullBytes;peekProgressEvery=e0;lastProgress=E0;scheduledSync;constructor($,V,Q,Z,J,W=!0,Y=xV,X=SV,G){this.clock=$;this.state=V;this.store=Q;this.transport=Z;this.crypto=J;this.forceSkewHandlingByDefault=W;this.onScheduleSync=G;this.maxPushBytes=Y,this.maxPullBytes=X,this.clientState=new I0(()=>this.getClientState()),this.xferState=new I0(()=>this.getXferState()),this.scheduledSync=new N$(i$,async()=>{try{console.info("Running scheduled sync"),await this.sync()}catch(K){console.error("Debounced sync failed:",K)}})}emitProgress=($)=>{this.lastProgress=$,this.xferState.emit()};async setSeed($,V){await this.store.seed.save($,V),this.clientState.emit()}async getClientState(){let{store:$,connections:V}=this,Q=await $.seed.load(),Z=await $.hosts.list(),J=!1;for(let W of V.values())if(W.isConnected()){J=!0;break}return{hasSeed:Q!==void 0,hasHost:Array.from(Z).length>0,connected:J}}async getXferState(){let{uploads:$,downloads:V}=this.store,Q=await $.count();return{numDownloads:await V.count(),numUploads:Q,progress:this.lastProgress}}apply=($,V)=>{return this.enqueueApplyJob(()=>this.doApply($,V))};async doApply($,V={enqueueUpload:!0,triggerUpload:!0}){let Q=[],Z=[];for(let{head:W,body:Y}of $){let X=new g;X.writeStruct(X0,W);let G=X.result(),K=await this.crypto.blake3(G),R={eid:W.eid,body:Y,apld:q0};if(W.off!==0)R.off=W.off;if(W.ctr!==0)R.ctr=W.ctr;Q.push(K),Z.push({key:K,data:R})}await this.store.messages.add(Z),await pQ(this.store,Q,this.crypto);let J=await this.doApplyHashes(Q);if(V.enqueueUpload){let W=[];for(let Y=0;Y<Q.length;Y++){let X=J[Y];if(X===0||X===15)W.push(Q[Y])}if(W.length>0){let Y=await this.store.hosts.list();for(let X of Y)await this.store.uploads.enq(X.label,W);this.xferState.emit()}}if(V.triggerUpload)this.scheduleSync();return J}enqueueApplyJob($){let V=this.applyChain.then($,$);return this.applyChain=V.then(()=>{return},()=>{return}),V}drainApplyQueue(){return this.enqueueApplyJob(()=>this.doDrainApplyQueue())}async doDrainApplyQueue(){let $=await this.store.messages.list({apld:q0});if($.length<1)return[];let V=t0($,(Q)=>Q.head);return this.applyStored(V)}applyHashes=($)=>{return this.enqueueApplyJob(()=>this.doApplyHashes($))};async doApplyHashes($){let V=[];for(let J of $){let W=await this.store.messages.get(J);if(W)V.push(W)}let Q=await this.applyStored(V),Z=new Map;for(let J=0;J<V.length;J++)Z.set(L(V[J].hash),Q[J]??12);return $.map((J)=>Z.get(L(J))??13)}async applyStored($){if($.length<1)return[];let V=$.map((W)=>({...W.head,bod:W.body})),Q=await this.state.apply(V),Z=[],J=[];for(let W=0;W<$.length;W++){let Y=Q[W];if(Y===0||Y===15)Z.push($[W].hash);else if(Y!==void 0&&LV(Y))J.push({key:$[W].hash,err:Y})}if(Z.length>0)await this.store.messages.markApplied(Z);if(J.length>0)await this.store.messages.markFailed(J);return Q}async insertRaw($){let{clock:V,crypto:Q}=this,[Z,J]=await fQ({now:V.now(),bod:$,crypto:Q});if(J!==0)return z(J);let Y=(await this.apply([{head:Z,body:$}]))[0];if(Y!==0&&Y!==15)return z(Y??12);return O(Z)}async makeUpdate($,V){let{clock:Q,crypto:Z}=this,J=Q.now();if($.updatedAt.getTime()>J.getTime())return z(4);let W=$.ctr+1,[Y,X]=await m$({now:J,eid:$.eid,ctr:W,bod:V,crypto:Z});if(X!==0)return z(X);return O({head:Y,body:V})}async updateWithSkew($,V,Q){if(Q===!1)return z(4);let{clock:Z,crypto:J}=this,W=Z.now(),Y=new k($.eid),[X,G]=Y.readStruct(o);if(G!==0)return z(G);let K=$.updatedAt.getTime()-X.ts.getTime(),R={eid:$.eid,off:K+1,ctr:$.ctr+1,len:0},N=(await this.apply([{head:R,body:void 0}]))[0];if(N!==0&&N!==15)return z(N??12);if(V===void 0)return O(R);let[U,M]=c0({id:X.id,ts:W});if(M!==0)return z(M);let[F,q]=await m$({now:W,eid:U,ctr:0,bod:V,crypto:J});if(q!==0)return z(q);let P=(await this.apply([{head:F,body:V}]))[0];if(P!==0&&P!==15)return z(P??12);return O(F)}async updateRaw($,V,Q=this.forceSkewHandlingByDefault){if($.updatedAt.getTime()>this.clock.now().getTime())return this.updateWithSkew($,V,Q);return this.enqueueApplyJob(async()=>{let[Z,J]=await this.makeUpdate($,V);if(J!==0)return z(J);let Y=(await this.doApply([Z]))[0];if(Y!==0&&Y!==15)return z(Y??12);return O(Z.head)})}async insert($){let{body:V,type:Q,gid:Z,pid:J,tags:W}=$,X=f0({body:V,type:Q,gid:Z,pid:J,tags:W});return this.insertRaw(X)}async update($){let{prior:V,body:Q,type:Z,gid:J,pid:W,tags:Y,force:X}=$,K=f0({body:Q,type:Z,gid:J,pid:W,tags:Y});return this.updateRaw(V,K,X??this.forceSkewHandlingByDefault)}async delete($){let V=$.force??!0;if("prior"in $)return this.updateRaw($.prior,void 0,V);let[Q,Z]=await this.revFromArchive($.eid);if(Z!==0)return z(Z);return this.updateRaw(Q,void 0,V)}async revFromArchive($){let V=await this.store.messages.last($);if(V)return _V(V.head);let Q=new k($),[Z,J]=Q.readStruct(o);if(J!==0)return z(J);return O({eid:$,ctr:-1,updatedAt:Z.ts})}async genEID($){let{clock:V,crypto:Q}=this,Z=V.now();if($!==void 0)return c0({id:$,ts:Z});let J=await Q.genRandomBytes(8);return c0({id:J,ts:Z})}sync(){return this.syncRuns.run(()=>this.doSync())}async doSync(){let{connections:$,crypto:V,store:Q}=this,Z=await Q.seed.load();if(!Z)return 22;await this.drainApplyQueue();for(let[J,W]of $){let Y=await Q.hosts.get(J);if(!Y)continue;let X={conn:W,store:Q,enclave:Z,host:Y,crypto:V,maxPushBytes:this.maxPushBytes,maxPullBytes:this.maxPullBytes,onProgress:this.emitProgress,peekProgressEvery:this.peekProgressEvery},G=await fV(X);if(G!==0)return console.error(`Failed to peek: ${G}`),this.emitProgress({phase:"idle"}),G;this.xferState.emit();let K=await nQ(X);if(K!==0)return console.error(`Failed to push: ${K}`),this.emitProgress({phase:"idle"}),K;this.xferState.emit();let R=await EV(X,async()=>{await this.drainApplyQueue()});if(R!==0&&R!==15)return console.error(`Failed to pull: ${R}`),this.emitProgress({phase:"idle"}),R;this.xferState.emit()}return this.emitProgress({phase:"idle"}),0}async rebuild($){if(this.scheduledSync.cancel(),await this.syncRuns.flush(),$?.checkHost??!0){let Q=await this.repull();if(Q!==0)return Q}return this.enqueueApplyJob(()=>this.replay())}async msgcheck(){let $=await this.store.messages.listKeys();return d0($,this.crypto)}listMsgs($){return this.store.messages.list($)}countMsgs($){return this.store.messages.count($)}async reconcile($,V){this.scheduledSync.cancel(),await this.syncRuns.flush();let{connections:Q,crypto:Z,store:J}=this,W=await J.seed.load();if(!W)return z(22);let Y=await J.hosts.get($);if(!Y)return z(13);let X=Q.get($);if(!X||!X.isConnected()){if(await this.connectToHost(Y,!1,!1),Y=await J.hosts.get($),!Y)return z(13);X=Q.get($)}if(!X)return z(12);let G={conn:X,store:J,enclave:W,crypto:Z,maxPushBytes:this.maxPushBytes,maxPullBytes:this.maxPullBytes,onProgress:this.emitProgress,peekProgressEvery:this.peekProgressEvery},[K,R]=await mV({...G,host:Y},V);if(this.xferState.emit(),R!==0)return this.emitProgress({phase:"idle"}),z(R);if(!K)return this.emitProgress({phase:"idle"}),z(12);if(V?.sync===!1)return this.emitProgress({phase:"idle"}),O(K);let I=await this.sync();if(I!==0)return z(I);let N=await J.hosts.get($);if(!N)return z(13);let[U,M]=await mV({...G,host:N},{pull:!1,push:!1});if(this.xferState.emit(),this.emitProgress({phase:"idle"}),M!==0)return z(M);if(!U)return z(12);return O(U)}async repull(){let{connections:$,crypto:V,store:Q}=this,Z=await Q.seed.load();if(!Z)return 22;let J=Array.from(await Q.hosts.list());if(J.length<1)return 0;for(let W of J){let Y=$.get(W.label);if(!Y||!Y.isConnected())await this.connectToHost(W,!1,!1)}for(let[W,Y]of $){let X=await Q.hosts.get(W);if(!X)continue;let G={conn:Y,store:Q,enclave:Z,host:{...X,lastSeq:0},crypto:V,maxPushBytes:this.maxPushBytes,maxPullBytes:this.maxPullBytes,onProgress:this.emitProgress,peekProgressEvery:this.peekProgressEvery},K=await fV(G);if(K!==0)return console.error(`rebuild: failed to peek: ${K}`),this.emitProgress({phase:"idle"}),K;this.xferState.emit();let R=await EV(G);if(R!==0&&R!==15)return console.error(`rebuild: failed to pull: ${R}`),this.emitProgress({phase:"idle"}),R;this.xferState.emit()}return this.emitProgress({phase:"idle"}),0}async replay(){let $=await this.state.clear();if($!==0)return $;let V=await this.store.messages.list(),Q=t0(V,(W)=>W.head),Z=Q.length;if(Z<1)return this.emitProgress({phase:"idle"}),0;let J=0;while(J<Q.length){let W=0,Y=0,X=J;for(let K=J;K<Q.length&&Y<100&&W<102400;K++)W+=Q[K].head.len,Y++,X=K+1;let G=Q.slice(J,X);await this.applyStored(G),this.emitProgress({phase:"exec",done:X,total:Z}),J=X}return this.emitProgress({phase:"idle"}),0}async wipe($){let V=$?.msgs!==!1,Q=$?.ents!==!1,Z=$?.meta!==!1,J=$?.seed===!0;this.scheduledSync.cancel(),await this.disconnect(),await this.syncRuns.flush();let{store:W}=this;if(Z)await W.hosts.wipe(),await W.uploads.wipe(),await W.downloads.wipe();if(V)await W.messages.wipe();if(J)await W.seed.wipe();if(Q)await this.state.clear();this.lastProgress=E0,this.clientState.emit(),this.xferState.emit()}import=async($,V)=>{let{crypto:Q,store:Z}=this,J=V?.onProgress,W=await Z.seed.load();if(!W)return 22;console.time("import: decoding file...");let Y=await $.bytes(),[X,G]=await SQ(Y,Q,W);if(G!==0)return G;console.timeEnd("import: decoding file...");let K=0;while(K<X.length){let R=0,I=0,N=K;for(let F=K;F<X.length&&I<100&&R<102400;F++)R+=X[F].head.len,I++,N=F+1;let U=X.slice(K,N);console.time(`import: applying [${K}, ${N}]`);let M=await this.apply(U,{enqueueUpload:!0,triggerUpload:!1});console.timeEnd(`import: applying [${K}, ${N}]`);for(let F=0;F<U.length;F++){let q=M[F];if(q!==0&&q!==15)console.warn(`failed to import msg ${K+F}: ${_[q]}`)}if(J)queueMicrotask(()=>J(N,X.length,0));this.emitProgress({phase:"import",done:N,total:X.length}),K=N}return this.scheduleSync(),this.emitProgress({phase:"idle"}),0};scheduleSync=()=>{if(this.onScheduleSync){this.onScheduleSync();return}this.scheduledSync.schedule()};async exportBytes(){let{crypto:$,store:V}=this,Q=await V.seed.load();if(!Q)return z(22);let Z=await V.messages.list();return xQ("export",0,Z,$,Q)}async export($){let[V,Q]=await this.exportBytes();if(Q!==0)return Q;if(!V)return 12;let Z=new Blob([V.slice()]);return u$(Z,$),0}async link($,V=!0){if(await this.store.hosts.add($),this.clientState.emit(),V){let Q=await this.store.hosts.get($.label);if(Q)await this.connectToHost(Q)}}async unlink($){await this.store.hosts.del($),this.clientState.emit()}async hosts(){return Array.from(await this.store.hosts.list())}connectToHost=async($,V=!0,Q=!0)=>{let{clock:Z,connections:J,crypto:W,store:Y,transport:X}=this,G=J.get($.label);if(G){if(G.isConnected())return;try{G.closeListener()}catch{}J.delete($.label)}let K=await Y.seed.load();if(!K)return;console.info(`Connecting to ${$.handle} (${$.label})`);let R=new E$(K,W,$,Z,X($),(I)=>Y.hosts.set($.label,I));if(await R.register(),V)await R.listen(async(I)=>{let N={conn:R,store:Y,enclave:K,host:$,crypto:W,maxPushBytes:this.maxPushBytes,maxPullBytes:this.maxPullBytes,onProgress:this.emitProgress,peekProgressEvery:this.peekProgressEvery};return dQ(I,N,this.scheduleSync)},()=>this.clientState.emit(),()=>this.clientState.emit());if(J.set($.label,R),this.clientState.emit(),Q)this.scheduleSync()};async connect($=!0,V=!0){let{connectToHost:Q,scheduleSync:Z,store:J}=this;if(!await J.seed.load())return;await this.drainApplyQueue();let Y=await J.hosts.list();for(let X of Y)await Q(X,$,!1);if(V)Z()}disconnect=async()=>{for(let $ of this.connections.values())try{$.closeListener()}catch{}this.connections.clear(),this.clientState.emit()}}var k0=typeof globalThis==="object"&&"crypto"in globalThis?globalThis.crypto:void 0;function h$($){if(!Number.isSafeInteger($)||$<0)throw Error("positive integer expected, got "+$)}function BV($){return $ instanceof Uint8Array||ArrayBuffer.isView($)&&$.constructor.name==="Uint8Array"}function d($,...V){if(!BV($))throw Error("Uint8Array expected");if(V.length>0&&!V.includes($.length))throw Error("Uint8Array expected of length "+V+", got length="+$.length)}function kV($,V=!0){if($.destroyed)throw Error("Hash instance has been destroyed");if(V&&$.finished)throw Error("Hash#digest() has already been called")}function rQ($,V){d($);let Q=V.outputLen;if($.length<Q)throw Error("digestInto() expects output buffer of length at least "+Q)}function gV($){if(typeof $!=="boolean")throw Error(`boolean expected, not ${$}`)}/*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) */var H0=($)=>new Uint32Array($.buffer,$.byteOffset,Math.floor($.byteLength/4));var fJ=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!fJ)throw Error("Non little-endian hardware is not supported");function EJ($){if(typeof $!=="string")throw Error("string expected");return new Uint8Array(new TextEncoder().encode($))}function l$($){if(typeof $==="string")$=EJ($);else if(BV($))$=p$($);else throw Error("Uint8Array expected, got "+typeof $);return $}function oQ($,V){if(V==null||typeof V!=="object")throw Error("options must be defined");return Object.assign($,V)}function aQ($,V){if($.length!==V.length)return!1;let Q=0;for(let Z=0;Z<$.length;Z++)Q|=$[Z]^V[Z];return Q===0}var sQ=($,V)=>{function Q(Z,...J){if(d(Z),$.nonceLength!==void 0){let R=J[0];if(!R)throw Error("nonce / iv required");if($.varSizeNonce)d(R);else d(R,$.nonceLength)}let W=$.tagLength;if(W&&J[1]!==void 0)d(J[1]);let Y=V(Z,...J),X=(R,I)=>{if(I!==void 0){if(R!==2)throw Error("cipher output not supported");d(I)}},G=!1;return{encrypt(R,I){if(G)throw Error("cannot encrypt() twice with same key + nonce");return G=!0,d(R),X(Y.encrypt.length,I),Y.encrypt(R,I)},decrypt(R,I){if(d(R),W&&R.length<W)throw Error("invalid ciphertext length: smaller than tagLength="+W);return X(Y.decrypt.length,I),Y.decrypt(R,I)}}}return Object.assign(Q,$),Q};function vV($,V,Q=!0){if(V===void 0)return new Uint8Array($);if(V.length!==$)throw Error("invalid output length, expected "+$+", got: "+V.length);if(Q&&!mJ(V))throw Error("invalid output, must be aligned");return V}function mJ($){return $.byteOffset%4===0}function p$($){return Uint8Array.from($)}function U0(...$){for(let V=0;V<$.length;V++)$[V].fill(0)}function n$($=32){if(k0&&typeof k0.getRandomValues==="function")return k0.getRandomValues(new Uint8Array($));if(k0&&typeof k0.randomBytes==="function")return k0.randomBytes($);throw Error("crypto.getRandomValues must be defined")}var eQ=($)=>Uint8Array.from($.split("").map((V)=>V.charCodeAt(0))),BJ=eQ("expand 16-byte k"),kJ=eQ("expand 32-byte k"),gJ=H0(BJ),vJ=H0(kJ);function A($,V){return $<<V|$>>>32-V}function iV($){return $.byteOffset%4===0}var c$=64,iJ=16,$Z=4294967295,tQ=new Uint32Array;function yJ($,V,Q,Z,J,W,Y,X){let G=J.length,K=new Uint8Array(c$),R=H0(K),I=iV(J)&&iV(W),N=I?H0(J):tQ,U=I?H0(W):tQ;for(let M=0;M<G;Y++){if($(V,Q,Z,R,Y,X),Y>=$Z)throw Error("arx: counter overflow");let F=Math.min(c$,G-M);if(I&&F===c$){let q=M/4;if(M%4!==0)throw Error("arx: invalid block position");for(let C=0,P;C<iJ;C++)P=q+C,U[P]=N[P]^R[C];M+=c$;continue}for(let q=0,C;q<F;q++)C=M+q,W[C]=J[C]^K[q];M+=F}}function VZ($,V){let{allowShortKeys:Q,extendNonceFn:Z,counterLength:J,counterRight:W,rounds:Y}=oQ({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},V);if(typeof $!=="function")throw Error("core must be a function");return h$(J),h$(Y),gV(W),gV(Q),(X,G,K,R,I=0)=>{d(X),d(G),d(K);let N=K.length;if(R===void 0)R=new Uint8Array(N);if(d(R),h$(I),I<0||I>=$Z)throw Error("arx: counter overflow");if(R.length<N)throw Error(`arx: output (${R.length}) is shorter than data (${N})`);let U=[],M=X.length,F,q;if(M===32)U.push(F=p$(X)),q=vJ;else if(M===16&&Q)F=new Uint8Array(32),F.set(X),F.set(X,16),q=gJ,U.push(F);else throw Error(`arx: invalid 32-byte key, got length=${M}`);if(!iV(G))U.push(G=p$(G));let C=H0(F);if(Z){if(G.length!==24)throw Error("arx: extended nonce must be 24 bytes");Z(q,C,H0(G.subarray(0,16)),C),G=G.subarray(16)}let P=16-J;if(P!==G.length)throw Error(`arx: nonce must be ${P} or 16 bytes`);if(P!==12){let H=new Uint8Array(12);H.set(G,W?0:12-G.length),G=H,U.push(G)}let T=H0(G);return yJ($,q,C,T,K,R,I,Y),U0(...U),R}}var s=($,V)=>$[V++]&255|($[V++]&255)<<8;class QZ{constructor($){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,$=l$($),d($,32);let V=s($,0),Q=s($,2),Z=s($,4),J=s($,6),W=s($,8),Y=s($,10),X=s($,12),G=s($,14);this.r[0]=V&8191,this.r[1]=(V>>>13|Q<<3)&8191,this.r[2]=(Q>>>10|Z<<6)&7939,this.r[3]=(Z>>>7|J<<9)&8191,this.r[4]=(J>>>4|W<<12)&255,this.r[5]=W>>>1&8190,this.r[6]=(W>>>14|Y<<2)&8191,this.r[7]=(Y>>>11|X<<5)&8065,this.r[8]=(X>>>8|G<<8)&8191,this.r[9]=G>>>5&127;for(let K=0;K<8;K++)this.pad[K]=s($,16+2*K)}process($,V,Q=!1){let Z=Q?0:2048,{h:J,r:W}=this,Y=W[0],X=W[1],G=W[2],K=W[3],R=W[4],I=W[5],N=W[6],U=W[7],M=W[8],F=W[9],q=s($,V+0),C=s($,V+2),P=s($,V+4),T=s($,V+6),H=s($,V+8),D=s($,V+10),S=s($,V+12),B=s($,V+14),m=J[0]+(q&8191),f=J[1]+((q>>>13|C<<3)&8191),i=J[2]+((C>>>10|P<<6)&8191),w=J[3]+((P>>>7|T<<9)&8191),b=J[4]+((T>>>4|H<<12)&8191),l=J[5]+(H>>>1&8191),x=J[6]+((H>>>14|D<<2)&8191),v=J[7]+((D>>>11|S<<5)&8191),E=J[8]+((S>>>8|B<<8)&8191),y=J[9]+(B>>>5|Z),j=0,c=j+m*Y+f*(5*F)+i*(5*M)+w*(5*U)+b*(5*N);j=c>>>13,c&=8191,c+=l*(5*I)+x*(5*R)+v*(5*K)+E*(5*G)+y*(5*X),j+=c>>>13,c&=8191;let $0=j+m*X+f*Y+i*(5*F)+w*(5*M)+b*(5*U);j=$0>>>13,$0&=8191,$0+=l*(5*N)+x*(5*I)+v*(5*R)+E*(5*K)+y*(5*G),j+=$0>>>13,$0&=8191;let W0=j+m*G+f*X+i*Y+w*(5*F)+b*(5*M);j=W0>>>13,W0&=8191,W0+=l*(5*U)+x*(5*N)+v*(5*I)+E*(5*R)+y*(5*K),j+=W0>>>13,W0&=8191;let p=j+m*K+f*G+i*X+w*Y+b*(5*F);j=p>>>13,p&=8191,p+=l*(5*M)+x*(5*U)+v*(5*N)+E*(5*I)+y*(5*R),j+=p>>>13,p&=8191;let F0=j+m*R+f*K+i*G+w*X+b*Y;j=F0>>>13,F0&=8191,F0+=l*(5*F)+x*(5*M)+v*(5*U)+E*(5*N)+y*(5*I),j+=F0>>>13,F0&=8191;let i0=j+m*I+f*R+i*K+w*G+b*X;j=i0>>>13,i0&=8191,i0+=l*Y+x*(5*F)+v*(5*M)+E*(5*U)+y*(5*N),j+=i0>>>13,i0&=8191;let y0=j+m*N+f*I+i*R+w*K+b*G;j=y0>>>13,y0&=8191,y0+=l*X+x*Y+v*(5*F)+E*(5*M)+y*(5*U),j+=y0>>>13,y0&=8191;let u0=j+m*U+f*N+i*I+w*R+b*K;j=u0>>>13,u0&=8191,u0+=l*G+x*X+v*Y+E*(5*F)+y*(5*M),j+=u0>>>13,u0&=8191;let b0=j+m*M+f*U+i*N+w*I+b*R;j=b0>>>13,b0&=8191,b0+=l*K+x*G+v*X+E*Y+y*(5*F),j+=b0>>>13,b0&=8191;let h0=j+m*F+f*M+i*U+w*N+b*I;j=h0>>>13,h0&=8191,h0+=l*R+x*K+v*G+E*X+y*Y,j+=h0>>>13,h0&=8191,j=(j<<2)+j|0,j=j+c|0,c=j&8191,j=j>>>13,$0+=j,J[0]=c,J[1]=$0,J[2]=W0,J[3]=p,J[4]=F0,J[5]=i0,J[6]=y0,J[7]=u0,J[8]=b0,J[9]=h0}finalize(){let{h:$,pad:V}=this,Q=new Uint16Array(10),Z=$[1]>>>13;$[1]&=8191;for(let Y=2;Y<10;Y++)$[Y]+=Z,Z=$[Y]>>>13,$[Y]&=8191;$[0]+=Z*5,Z=$[0]>>>13,$[0]&=8191,$[1]+=Z,Z=$[1]>>>13,$[1]&=8191,$[2]+=Z,Q[0]=$[0]+5,Z=Q[0]>>>13,Q[0]&=8191;for(let Y=1;Y<10;Y++)Q[Y]=$[Y]+Z,Z=Q[Y]>>>13,Q[Y]&=8191;Q[9]-=8192;let J=(Z^1)-1;for(let Y=0;Y<10;Y++)Q[Y]&=J;J=~J;for(let Y=0;Y<10;Y++)$[Y]=$[Y]&J|Q[Y];$[0]=($[0]|$[1]<<13)&65535,$[1]=($[1]>>>3|$[2]<<10)&65535,$[2]=($[2]>>>6|$[3]<<7)&65535,$[3]=($[3]>>>9|$[4]<<4)&65535,$[4]=($[4]>>>12|$[5]<<1|$[6]<<14)&65535,$[5]=($[6]>>>2|$[7]<<11)&65535,$[6]=($[7]>>>5|$[8]<<8)&65535,$[7]=($[8]>>>8|$[9]<<5)&65535;let W=$[0]+V[0];$[0]=W&65535;for(let Y=1;Y<8;Y++)W=($[Y]+V[Y]|0)+(W>>>16)|0,$[Y]=W&65535;U0(Q)}update($){kV(this);let{buffer:V,blockLen:Q}=this;$=l$($);let Z=$.length;for(let J=0;J<Z;){let W=Math.min(Q-this.pos,Z-J);if(W===Q){for(;Q<=Z-J;J+=Q)this.process($,J);continue}if(V.set($.subarray(J,J+W),this.pos),this.pos+=W,J+=W,this.pos===Q)this.process(V,0,!1),this.pos=0}return this}destroy(){U0(this.h,this.r,this.buffer,this.pad)}digestInto($){kV(this),rQ($,this),this.finished=!0;let{buffer:V,h:Q}=this,{pos:Z}=this;if(Z){V[Z++]=1;for(;Z<16;Z++)V[Z]=0;this.process(V,0,!0)}this.finalize();let J=0;for(let W=0;W<8;W++)$[J++]=Q[W]>>>0,$[J++]=Q[W]>>>8;return $}digest(){let{buffer:$,outputLen:V}=this;this.digestInto($);let Q=$.slice(0,V);return this.destroy(),Q}}function uJ($){let V=(Z,J)=>$(J).update(l$(Z)).digest(),Q=$(new Uint8Array(32));return V.outputLen=Q.outputLen,V.blockLen=Q.blockLen,V.create=(Z)=>$(Z),V}var yV=uJ(($)=>new QZ($));function bJ($,V,Q,Z,J,W=20){let Y=$[0],X=V[0],G=V[1],K=V[2],R=V[3],I=$[1],N=Q[0],U=Q[1],M=J,F=0,q=$[2],C=V[4],P=V[5],T=V[6],H=V[7],D=$[3],S=Y,B=X,m=G,f=K,i=R,w=I,b=N,l=U,x=M,v=F,E=q,y=C,j=P,c=T,$0=H,W0=D;for(let F0=0;F0<W;F0+=2)i^=A(S+j|0,7),x^=A(i+S|0,9),j^=A(x+i|0,13),S^=A(j+x|0,18),v^=A(w+B|0,7),c^=A(v+w|0,9),B^=A(c+v|0,13),w^=A(B+c|0,18),$0^=A(E+b|0,7),m^=A($0+E|0,9),b^=A(m+$0|0,13),E^=A(b+m|0,18),f^=A(W0+y|0,7),l^=A(f+W0|0,9),y^=A(l+f|0,13),W0^=A(y+l|0,18),B^=A(S+f|0,7),m^=A(B+S|0,9),f^=A(m+B|0,13),S^=A(f+m|0,18),b^=A(w+i|0,7),l^=A(b+w|0,9),i^=A(l+b|0,13),w^=A(i+l|0,18),y^=A(E+v|0,7),x^=A(y+E|0,9),v^=A(x+y|0,13),E^=A(v+x|0,18),j^=A(W0+$0|0,7),c^=A(j+W0|0,9),$0^=A(c+j|0,13),W0^=A($0+c|0,18);let p=0;Z[p++]=Y+S|0,Z[p++]=X+B|0,Z[p++]=G+m|0,Z[p++]=K+f|0,Z[p++]=R+i|0,Z[p++]=I+w|0,Z[p++]=N+b|0,Z[p++]=U+l|0,Z[p++]=M+x|0,Z[p++]=F+v|0,Z[p++]=q+E|0,Z[p++]=C+y|0,Z[p++]=P+j|0,Z[p++]=T+c|0,Z[p++]=H+$0|0,Z[p++]=D+W0|0}function hJ($,V,Q,Z){let J=$[0],W=V[0],Y=V[1],X=V[2],G=V[3],K=$[1],R=Q[0],I=Q[1],N=Q[2],U=Q[3],M=$[2],F=V[4],q=V[5],C=V[6],P=V[7],T=$[3];for(let D=0;D<20;D+=2)G^=A(J+q|0,7),N^=A(G+J|0,9),q^=A(N+G|0,13),J^=A(q+N|0,18),U^=A(K+W|0,7),C^=A(U+K|0,9),W^=A(C+U|0,13),K^=A(W+C|0,18),P^=A(M+R|0,7),Y^=A(P+M|0,9),R^=A(Y+P|0,13),M^=A(R+Y|0,18),X^=A(T+F|0,7),I^=A(X+T|0,9),F^=A(I+X|0,13),T^=A(F+I|0,18),W^=A(J+X|0,7),Y^=A(W+J|0,9),X^=A(Y+W|0,13),J^=A(X+Y|0,18),R^=A(K+G|0,7),I^=A(R+K|0,9),G^=A(I+R|0,13),K^=A(G+I|0,18),F^=A(M+U|0,7),N^=A(F+M|0,9),U^=A(N+F|0,13),M^=A(U+N|0,18),q^=A(T+P|0,7),C^=A(q+T|0,9),P^=A(C+q|0,13),T^=A(P+C|0,18);let H=0;Z[H++]=J,Z[H++]=K,Z[H++]=M,Z[H++]=T,Z[H++]=R,Z[H++]=I,Z[H++]=N,Z[H++]=U}var uV=VZ(bJ,{counterRight:!0,extendNonceFn:hJ}),bV=sQ({blockSize:64,nonceLength:24,tagLength:16},($,V)=>{return{encrypt(Q,Z){Z=vV(Q.length+32,Z,!1);let J=Z.subarray(0,32),W=Z.subarray(32);Z.set(Q,32),U0(J),uV($,V,Z,Z);let Y=yV(W,J);return Z.set(Y,16),U0(Z.subarray(0,16),Y),Z.subarray(16)},decrypt(Q,Z){d(Q),Z=vV(Q.length+32,Z,!1);let J=Z.subarray(0,32),W=Z.subarray(32,48),Y=Z.subarray(48);Z.set(Q,32),U0(J);let X=uV($,V,J,J),G=yV(Y,X);if(!aQ(W,G))throw Error("invalid tag");return uV($,V,Z.subarray(16),Z.subarray(16)),U0(J,W,G),Y}}});/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function lJ($){return $ instanceof Uint8Array||ArrayBuffer.isView($)&&$.constructor.name==="Uint8Array"}function U$($){if(!Number.isSafeInteger($)||$<0)throw Error("positive integer expected, got "+$)}function g0($,...V){if(!lJ($))throw Error("Uint8Array expected");if(V.length>0&&!V.includes($.length))throw Error("Uint8Array expected of length "+V+", got length="+$.length)}function O$($,V=!0){if($.destroyed)throw Error("Hash instance has been destroyed");if(V&&$.finished)throw Error("Hash#digest() has already been called")}function d$($,V){g0($);let Q=V.outputLen;if($.length<Q)throw Error("digestInto() expects output buffer of length at least "+Q)}function ZZ($){return new Uint8Array($.buffer,$.byteOffset,$.byteLength)}function V$($){return new Uint32Array($.buffer,$.byteOffset,Math.floor($.byteLength/4))}function Q$(...$){for(let V=0;V<$.length;V++)$[V].fill(0)}function F$($,V){return $<<32-V|$>>>V}var JZ=(()=>new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68)();function WZ($){return $<<24&4278190080|$<<8&16711680|$>>>8&65280|$>>>24&255}var YZ=JZ?($)=>$:($)=>WZ($);function pJ($){for(let V=0;V<$.length;V++)$[V]=WZ($[V]);return $}var Z0=JZ?($)=>$:pJ;function nJ($){if(typeof $!=="string")throw Error("string expected");return new Uint8Array(new TextEncoder().encode($))}function Z$($){if(typeof $==="string")$=nJ($);return g0($),$}class hV{}function XZ($){let V=(Z,J)=>$(J).update(Z$(Z)).digest(),Q=$({});return V.outputLen=Q.outputLen,V.blockLen=Q.blockLen,V.create=(Z)=>$(Z),V}var GZ=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var r$=BigInt(4294967295),KZ=BigInt(32);function lV($,V=!1){if(V)return{h:Number($&r$),l:Number($>>KZ&r$)};return{h:Number($>>KZ&r$)|0,l:Number($&r$)|0}}function P0($,V,Q,Z,J){return $=$+V+J|0,Z=F$(Z^$,16),Q=Q+Z|0,V=F$(V^Q,12),{a:$,b:V,c:Q,d:Z}}function C0($,V,Q,Z,J){return $=$+V+J|0,Z=F$(Z^$,8),Q=Q+Z|0,V=F$(V^Q,7),{a:$,b:V,c:Q,d:Z}}class pV extends hV{constructor($,V){super();this.finished=!1,this.destroyed=!1,this.length=0,this.pos=0,U$($),U$(V),this.blockLen=$,this.outputLen=V,this.buffer=new Uint8Array($),this.buffer32=V$(this.buffer)}update($){O$(this),$=Z$($),g0($);let{blockLen:V,buffer:Q,buffer32:Z}=this,J=$.length,W=$.byteOffset,Y=$.buffer;for(let X=0;X<J;){if(this.pos===V)Z0(Z),this.compress(Z,0,!1),Z0(Z),this.pos=0;let G=Math.min(V-this.pos,J-X),K=W+X;if(G===V&&!(K%4)&&X+G<J){let R=new Uint32Array(Y,K,Math.floor((J-X)/4));Z0(R);for(let I=0;X+V<J;I+=Z.length,X+=V)this.length+=V,this.compress(R,I,!1);Z0(R);continue}Q.set($.subarray(X,X+G),this.pos),this.pos+=G,this.length+=G,X+=G}return this}digestInto($){O$(this),d$($,this);let{pos:V,buffer32:Q}=this;this.finished=!0,Q$(this.buffer.subarray(V)),Z0(Q),this.compress(Q,0,!0),Z0(Q);let Z=V$($);this.get().forEach((J,W)=>Z[W]=YZ(J))}digest(){let{buffer:$,outputLen:V}=this;this.digestInto($);let Q=$.slice(0,V);return this.destroy(),Q}_cloneInto($){let{buffer:V,length:Q,finished:Z,destroyed:J,outputLen:W,pos:Y}=this;return $||($=new this.constructor({dkLen:W})),$.set(...this.get()),$.buffer.set(V),$.destroyed=J,$.finished=Z,$.length=Q,$.pos=Y,$.outputLen=W,$}clone(){return this._cloneInto()}}function nV($,V,Q,Z,J,W,Y,X,G,K,R,I,N,U,M,F,q,C,P,T){let H=0;for(let D=0;D<Z;D++)({a:J,b:G,c:N,d:q}=P0(J,G,N,q,Q[V+$[H++]])),{a:J,b:G,c:N,d:q}=C0(J,G,N,q,Q[V+$[H++]]),{a:W,b:K,c:U,d:C}=P0(W,K,U,C,Q[V+$[H++]]),{a:W,b:K,c:U,d:C}=C0(W,K,U,C,Q[V+$[H++]]),{a:Y,b:R,c:M,d:P}=P0(Y,R,M,P,Q[V+$[H++]]),{a:Y,b:R,c:M,d:P}=C0(Y,R,M,P,Q[V+$[H++]]),{a:X,b:I,c:F,d:T}=P0(X,I,F,T,Q[V+$[H++]]),{a:X,b:I,c:F,d:T}=C0(X,I,F,T,Q[V+$[H++]]),{a:J,b:K,c:M,d:T}=P0(J,K,M,T,Q[V+$[H++]]),{a:J,b:K,c:M,d:T}=C0(J,K,M,T,Q[V+$[H++]]),{a:W,b:R,c:F,d:q}=P0(W,R,F,q,Q[V+$[H++]]),{a:W,b:R,c:F,d:q}=C0(W,R,F,q,Q[V+$[H++]]),{a:Y,b:I,c:N,d:C}=P0(Y,I,N,C,Q[V+$[H++]]),{a:Y,b:I,c:N,d:C}=C0(Y,I,N,C,Q[V+$[H++]]),{a:X,b:G,c:U,d:P}=P0(X,G,U,P,Q[V+$[H++]]),{a:X,b:G,c:U,d:P}=C0(X,G,U,P,Q[V+$[H++]]);return{v0:J,v1:W,v2:Y,v3:X,v4:G,v5:K,v6:R,v7:I,v8:N,v9:U,v10:M,v11:F,v12:q,v13:C,v14:P,v15:T}}var O0={CHUNK_START:1,CHUNK_END:2,PARENT:4,ROOT:8,KEYED_HASH:16,DERIVE_KEY_CONTEXT:32,DERIVE_KEY_MATERIAL:64},w0=GZ.slice(),zZ=(()=>{let $=Array.from({length:16},(Z,J)=>J),V=(Z)=>[2,6,3,10,7,0,4,13,1,11,12,5,9,14,15,8].map((J)=>Z[J]),Q=[];for(let Z=0,J=$;Z<7;Z++,J=V(J))Q.push(...J);return Uint8Array.from(Q)})();class cV extends pV{constructor($={},V=0){super(64,$.dkLen===void 0?32:$.dkLen);this.chunkPos=0,this.chunksDone=0,this.flags=0,this.stack=[],this.posOut=0,this.bufferOut32=new Uint32Array(16),this.chunkOut=0,this.enableXOF=!0;let{key:Q,context:Z}=$,J=Z!==void 0;if(Q!==void 0){if(J)throw Error('Only "key" or "context" can be specified at same time');let W=Z$(Q).slice();g0(W,32),this.IV=V$(W),Z0(this.IV),this.flags=V|O0.KEYED_HASH}else if(J){let W=Z$(Z),Y=new cV({dkLen:32},O0.DERIVE_KEY_CONTEXT).update(W).digest();this.IV=V$(Y),Z0(this.IV),this.flags=V|O0.DERIVE_KEY_MATERIAL}else this.IV=w0.slice(),this.flags=V;this.state=this.IV.slice(),this.bufferOut=ZZ(this.bufferOut32)}get(){return[]}set(){}b2Compress($,V,Q,Z=0){let{state:J,pos:W}=this,{h:Y,l:X}=lV(BigInt($),!0),{v0:G,v1:K,v2:R,v3:I,v4:N,v5:U,v6:M,v7:F,v8:q,v9:C,v10:P,v11:T,v12:H,v13:D,v14:S,v15:B}=nV(zZ,Z,Q,7,J[0],J[1],J[2],J[3],J[4],J[5],J[6],J[7],w0[0],w0[1],w0[2],w0[3],Y,X,W,V);J[0]=G^q,J[1]=K^C,J[2]=R^P,J[3]=I^T,J[4]=N^H,J[5]=U^D,J[6]=M^S,J[7]=F^B}compress($,V=0,Q=!1){let Z=this.flags;if(!this.chunkPos)Z|=O0.CHUNK_START;if(this.chunkPos===15||Q)Z|=O0.CHUNK_END;if(!Q)this.pos=this.blockLen;if(this.b2Compress(this.chunksDone,Z,$,V),this.chunkPos+=1,this.chunkPos===16||Q){let J=this.state;this.state=this.IV.slice();for(let W,Y=this.chunksDone+1;Q||!(Y&1);Y>>=1){if(!(W=this.stack.pop()))break;this.buffer32.set(W,0),this.buffer32.set(J,8),this.pos=this.blockLen,this.b2Compress(0,this.flags|O0.PARENT,this.buffer32,0),J=this.state,this.state=this.IV.slice()}this.chunksDone++,this.chunkPos=0,this.stack.push(J)}this.pos=0}_cloneInto($){$=super._cloneInto($);let{IV:V,flags:Q,state:Z,chunkPos:J,posOut:W,chunkOut:Y,stack:X,chunksDone:G}=this;return $.state.set(Z.slice()),$.stack=X.map((K)=>Uint32Array.from(K)),$.IV.set(V),$.flags=Q,$.chunkPos=J,$.chunksDone=G,$.posOut=W,$.chunkOut=Y,$.enableXOF=this.enableXOF,$.bufferOut32.set(this.bufferOut32),$}destroy(){this.destroyed=!0,Q$(this.state,this.buffer32,this.IV,this.bufferOut32),Q$(...this.stack)}b2CompressOut(){let{state:$,pos:V,flags:Q,buffer32:Z,bufferOut32:J}=this,{h:W,l:Y}=lV(BigInt(this.chunkOut++));Z0(Z);let{v0:X,v1:G,v2:K,v3:R,v4:I,v5:N,v6:U,v7:M,v8:F,v9:q,v10:C,v11:P,v12:T,v13:H,v14:D,v15:S}=nV(zZ,0,Z,7,$[0],$[1],$[2],$[3],$[4],$[5],$[6],$[7],w0[0],w0[1],w0[2],w0[3],Y,W,V,Q);J[0]=X^F,J[1]=G^q,J[2]=K^C,J[3]=R^P,J[4]=I^T,J[5]=N^H,J[6]=U^D,J[7]=M^S,J[8]=$[0]^F,J[9]=$[1]^q,J[10]=$[2]^C,J[11]=$[3]^P,J[12]=$[4]^T,J[13]=$[5]^H,J[14]=$[6]^D,J[15]=$[7]^S,Z0(Z),Z0(J),this.posOut=0}finish(){if(this.finished)return;this.finished=!0,Q$(this.buffer.subarray(this.pos));let $=this.flags|O0.ROOT;if(this.stack.length)$|=O0.PARENT,Z0(this.buffer32),this.compress(this.buffer32,0,!0),Z0(this.buffer32),this.chunksDone=0,this.pos=this.blockLen;else $|=(!this.chunkPos?O0.CHUNK_START:0)|O0.CHUNK_END;this.flags=$,this.b2CompressOut()}writeInto($){O$(this,!1),g0($),this.finish();let{blockLen:V,bufferOut:Q}=this;for(let Z=0,J=$.length;Z<J;){if(this.posOut>=V)this.b2CompressOut();let W=Math.min(V-this.posOut,J-Z);$.set(Q.subarray(this.posOut,this.posOut+W),Z),this.posOut+=W,Z+=W}return $}xofInto($){if(!this.enableXOF)throw Error("XOF is not possible after digest call");return this.writeInto($)}xof($){return U$($),this.xofInto(new Uint8Array($))}digestInto($){if(d$($,this),this.finished)throw Error("digest() was already called");return this.enableXOF=!1,this.writeInto($),this.destroy(),$}digest(){return this.digestInto(new Uint8Array(this.outputLen))}}var RZ=XZ(($)=>new cV($));var dV=new Uint8Array([48,46,2,1,0,48,5,6,3,43,101,112,4,34,4,32]);function IZ($){let V=new Uint8Array(dV.length+32);return V.set(dV),V.set($.subarray(0,32),dV.length),V}function NZ($){return typeof $==="string"?new TextEncoder().encode($):$}function J$($){let V=new ArrayBuffer($.byteLength);return new Uint8Array(V).set($),V}class rV{verifyKeys=new Map;signKeys=new Map;async genRandomBytes($){return n$($)}async gen256BitSecureRandomSeed(){return n$(32)}async encryptXSalsa20Poly1305Combined($,V){let Q=n$(24),J=bV(V,Q).encrypt($);return new Uint8Array([...Q,...J])}async decryptXSalsa20Poly1305Combined($,V){let Q=$.slice(0,24),Z=$.slice(24);return bV(V,Q).decrypt(Z)}async deriveEd25519KeyPair($){let V=$,Q=IZ(V),Z=await globalThis.crypto.subtle.importKey("pkcs8",J$(Q),{name:"Ed25519"},!0,["sign"]),J=await globalThis.crypto.subtle.exportKey("jwk",Z);if(typeof J.x!=="string")throw Error("Ed25519 JWK missing x");let W=await globalThis.crypto.subtle.importKey("jwk",{kty:"OKP",crv:"Ed25519",x:J.x},{name:"Ed25519"},!0,["verify"]),Y=new Uint8Array(await globalThis.crypto.subtle.exportKey("raw",W)),X=new Uint8Array(64);return X.set(V,0),X.set(Y,32),this.signKeys.set(t(V),Z),this.verifyKeys.set(t(Y),W),{keyType:"ed25519",privateKey:X,publicKey:Y}}async importSignKey($){let V=$.subarray(0,32),Q=t(V),Z=this.signKeys.get(Q);if(Z)return Z;let J=IZ(V),W=await globalThis.crypto.subtle.importKey("pkcs8",J$(J),{name:"Ed25519"},!1,["sign"]);return this.signKeys.set(Q,W),W}async importVerifyKey($){let V=t($),Q=this.verifyKeys.get(V);if(Q)return Q;let Z=await globalThis.crypto.subtle.importKey("raw",J$($),{name:"Ed25519"},!1,["verify"]);return this.verifyKeys.set(V,Z),Z}async signEd25519($,V){let Q=NZ($),Z=await this.importSignKey(V),J=await globalThis.crypto.subtle.sign({name:"Ed25519"},Z,J$(Q));return new Uint8Array(J)}async checkSigEd25519($,V,Q){let Z=NZ(V);try{let J=await this.importVerifyKey(Q);return await globalThis.crypto.subtle.verify({name:"Ed25519"},J,J$($),J$(Z))}catch{return!1}}async blake3($){return RZ($)}}var cJ=new rV,r=cJ;import{useEffect as s$,useState as VQ}from"react";class oV{db;constructor($){this.db=$}async enq($){let V=[...$];if(V.length===0)return;let Q=this.db.transaction(G0,"readwrite"),Z=Q.objectStore(G0);return new Promise((J,W)=>{Q.oncomplete=()=>J(),Q.onerror=()=>W(Q.error);for(let Y of V){let X=`${Y.host}:${Y.seq}`;Z.put(Y,X)}})}async deq($,V){let Q=[...V];if(Q.length===0)return;let Z=this.db.transaction(G0,"readwrite"),J=Z.objectStore(G0);return new Promise((W,Y)=>{Z.oncomplete=()=>W(),Z.onerror=()=>Y(Z.error);for(let X of Q){let G=`${$}:${X}`;J.delete(G)}})}async list(){let V=this.db.transaction(G0,"readonly").objectStore(G0);return new Promise((Q,Z)=>{let J=V.getAll();J.onsuccess=()=>Q(J.result),J.onerror=()=>Z(J.error)})}async count(){let V=this.db.transaction(G0,"readonly").objectStore(G0);return new Promise((Q,Z)=>{let J=V.count();J.onsuccess=()=>Q(J.result),J.onerror=()=>Z(J.error)})}async wipe(){let $=this.db.transaction(G0,"readwrite"),V=$.objectStore(G0);return new Promise((Q,Z)=>{$.oncomplete=()=>Q(),$.onerror=()=>Z($.error),V.clear()})}}function UZ($){return{label:$.label,handle:new URL($.handle),idx:$.idx,lastSeq:$.lastSeq||0,clockOffset:$.clockOffset,subscription:$.subscription}}function dJ($,V){let Q={...$};if(V.setLastSeq!==void 0)Q.lastSeq=V.setLastSeq;else if(V.lastSeq!==void 0){let Z=Q.lastSeq||0;if(V.lastSeq>Z)Q.lastSeq=V.lastSeq}return delete Q.numBags,delete Q.numDupes,Q}class aV{db;constructor($){this.db=$}async add($){return this.put({...$,lastSeq:0})}async put($){let V={...$,handle:$.handle.toString(),lastSeq:$.lastSeq??0},Q=this.db.transaction(J0,"readwrite"),Z=Q.objectStore(J0);return new Promise((J,W)=>{Q.oncomplete=()=>J(),Q.onerror=()=>W(Q.error),Z.put(V)})}async touch($,V){return this.recordStats($,{lastSeq:V})}async recordStats($,V){let Q=this.db.transaction(J0,"readwrite"),Z=Q.objectStore(J0);return new Promise((J,W)=>{Q.oncomplete=()=>J(),Q.onerror=()=>W(Q.error);let Y=Z.get($);Y.onsuccess=()=>{let X=Y.result;if(!X)return;Z.put(dJ(X,V))}})}async get($){let Q=this.db.transaction(J0,"readonly").objectStore(J0);return new Promise((Z,J)=>{let W=Q.get($);W.onsuccess=()=>{let Y=W.result;if(!Y)Z(void 0);else Z(UZ(Y))},W.onerror=()=>J(W.error)})}async set($,V){let Q=await this.get($);if(!Q)return 13;try{return await this.put({...Q,...V}),0}catch{return 18}}async del($){let V=this.db.transaction(J0,"readwrite"),Q=V.objectStore(J0);return new Promise((Z,J)=>{V.oncomplete=()=>Z(),V.onerror=()=>J(V.error),Q.delete($)})}async list(){let V=this.db.transaction(J0,"readonly").objectStore(J0);return new Promise((Q,Z)=>{let J=V.getAll();J.onsuccess=()=>{let W=J.result;Q(W.map(UZ))},J.onerror=()=>Z(J.error)})}async wipe(){let $=this.db.transaction(J0,"readwrite"),V=$.objectStore(J0);return new Promise((Q,Z)=>{$.oncomplete=()=>Q(),$.onerror=()=>Z($.error),V.clear()})}}class sV{crypto;db;constructor($,V){this.crypto=V;this.db=$}async add($){let V=this.db.transaction(h,"readwrite"),Q=V.objectStore(h);return new Promise((Z)=>{if($.length===0){Z([]);return}let J=Array($.length).fill(0);V.oncomplete=()=>Z(J),V.onerror=()=>{for(let W=0;W<J.length;W++)J[W]=18;Z(J)};for(let W=0;W<$.length;W++){let{key:Y,data:X}=$[W],G=L(Y),K=Q.put(X,G);K.onerror=(R)=>{R.preventDefault(),J[W]=18}}})}async del($){let V=[...$];if(V.length===0)return;let Q=this.db.transaction(h,"readwrite"),Z=Q.objectStore(h);return new Promise((J,W)=>{Q.oncomplete=()=>J(),Q.onerror=()=>W(Q.error);for(let Y of V){let X=L(Y);Z.delete(X)}})}async get($){let Q=this.db.transaction(h,"readonly").objectStore(h);return new Promise((Z,J)=>{let W=L($),Y=Q.get(W);Y.onsuccess=async()=>{let X=Y.result;if(X)Z(await S0($,X,this.crypto));else Z(void 0)},Y.onerror=()=>J(Y.error)})}async has($){return await this.get($)!==void 0}async list($){let V=$?.apld,Q=$?.body!==!1,J=this.db.transaction(h,"readonly").objectStore(h);return new Promise((W,Y)=>{let X=[],G=V===void 0?J.openCursor():J.index(M$).openCursor(IDBKeyRange.only(V));G.onsuccess=(K)=>{let R=K.target.result;if(R){let I=V===void 0?R.key:R.primaryKey,N=R.value;X.push({hash:Q0(I),data:N}),R.continue()}else Promise.all(X.map(({hash:I,data:N})=>S0(I,N,this.crypto,{body:Q}))).then(W).catch(Y)},G.onerror=()=>Y(G.error)})}async count($){let Q=this.db.transaction(h,"readonly").objectStore(h);return new Promise((Z,J)=>{let W=$===void 0?Q.count():Q.index(M$).count(IDBKeyRange.only($));W.onsuccess=()=>Z(W.result),W.onerror=()=>J(W.error)})}async listKeys(){let V=this.db.transaction(h,"readonly").objectStore(h);return new Promise((Q,Z)=>{let J=[],W=V.openKeyCursor();W.onsuccess=(Y)=>{let X=Y.target.result;if(X)J.push(Q0(X.key)),X.continue();else Q(J)},W.onerror=()=>Z(W.error)})}async last($){let Q=this.db.transaction(h,"readonly").objectStore(h);return new Promise((Z,J)=>{let W,Y=Q.openCursor();Y.onsuccess=async(X)=>{let G=X.target.result;if(G){let{key:K,value:R}=G;if(e($,R.eid)){if(!W||(R.ctr??0)>(W.data.ctr??0)||(R.ctr??0)===(W.data.ctr??0)&&(R.off??0)>(W.data.off??0))W={key:K,data:R}}G.continue()}else if(W){let K=Q0(W.key);Z(await S0(K,W.data,this.crypto))}else Z(void 0)},Y.onerror=()=>J(Y.error)})}async markApplied($){let V=[...$];if(V.length===0)return;let Q=this.db.transaction(h,"readwrite"),Z=Q.objectStore(h);return new Promise((J,W)=>{Q.oncomplete=()=>J(),Q.onerror=()=>W(Q.error);for(let Y of V){let X=L(Y),G=Z.get(X);G.onsuccess=()=>{let K=G.result;if(!K)return;m0(K,x0),Z.put(K,X)},G.onerror=(K)=>{K.preventDefault()}}})}async markFailed($){let V=[...$];if(V.length===0)return;let Q=this.db.transaction(h,"readwrite"),Z=Q.objectStore(h);return new Promise((J,W)=>{Q.oncomplete=()=>J(),Q.onerror=()=>W(Q.error);for(let{key:Y,err:X}of V){let G=L(Y),K=Z.get(G);K.onsuccess=()=>{let R=K.result;if(!R)return;m0(R,N0,X),Z.put(R,G)},K.onerror=(R)=>{R.preventDefault()}}})}async wipe(){let $=this.db.transaction(h,"readwrite"),V=$.objectStore(h);return new Promise((Q,Z)=>{$.oncomplete=()=>Q(),$.onerror=()=>Z($.error),V.clear()})}}class R0{#V;#$;constructor($,V){this.#V=$,this.#$=V}deriveCipher($,V){let Q=$.slice(),Z=(Y)=>this.#Q(Q,Y),J=(Y)=>this.#Z(Q,Y);return{encrypt:Object.freeze({encrypt:Z}),decrypt:Object.freeze({decrypt:J}),both:Object.freeze({encrypt:Z,decrypt:J})}[V]}async deriveIdentity($,V=0){let Q=$,Z=V,J=await this.#W(Q,Z);return Object.freeze({publicKey:J.publicKey,sign:(W)=>this.#X(Q,Z,W),kdmFor:(W)=>this.#G(Q,Z,W)})}async#Q($,V){let Q=await this.#J($);return this.#$.encryptXSalsa20Poly1305Combined(V,Q)}async#Z($,V){let Q=await this.#J($);return this.#$.decryptXSalsa20Poly1305Combined(V,Q)}async#J($){return this.#$.blake3(j$(this.#V,$))}async#Y($,V){let Q=new TextEncoder().encode($),Z=new Uint8Array(8);return new DataView(Z.buffer).setBigUint64(0,BigInt(V),!1),await this.#J(j$(Q,Z))}async#W($,V){let Q=await this.#Y($,V);return this.#$.deriveEd25519KeyPair(Q)}async#X($,V,Q){let Z=await this.#W($,V);return this.#$.signEd25519(Q,Z.privateKey)}async#G($,V,Q){let Z=await this.#W($,V),J=j$(Z.privateKey,Q);return(await this.#$.blake3(J)).slice(0,_0)}}class tV{enclave;db;constructor($){this.db=$}async save($,V){if(V?.persist!==!0)return this.enclave=new R0($,r),this.enclave;let Q=t($),Z=this.db.transaction(T0,"readwrite"),J=Z.objectStore(T0);return new Promise((W,Y)=>{Z.oncomplete=()=>{this.enclave=new R0($,r),W(this.enclave)},Z.onerror=()=>Y(Z.error),J.put(Q,"seed")})}async load(){if(this.enclave)return this.enclave;let V=this.db.transaction(T0,"readonly").objectStore(T0);return new Promise((Q,Z)=>{let J=V.get("seed");J.onsuccess=()=>{let W=J.result;if(!W)Q(void 0);else{let Y=L0(W);this.enclave=new R0(Y,r),Q(this.enclave)}},J.onerror=()=>Z(J.error)})}async wipe(){this.enclave=void 0;let $=this.db.transaction(T0,"readwrite"),V=$.objectStore(T0);return new Promise((Q,Z)=>{$.oncomplete=()=>Q(),$.onerror=()=>Z($.error),V.put("","seed"),V.delete("seed")})}}class eV{db;constructor($){this.db=$}async enq($,V){let Q=[...V];if(Q.length===0)return;let Z=this.db.transaction(K0,"readwrite"),J=Z.objectStore(K0);return new Promise((W,Y)=>{Z.oncomplete=()=>W(),Z.onerror=()=>Y(Z.error);for(let X of Q){let G=t(X);J.put({host:$,hash:G})}})}async deq($,V){let Q=[...V];if(Q.length===0)return;let Z=this.db.transaction(K0,"readwrite"),J=Z.objectStore(K0);return new Promise((W,Y)=>{Z.oncomplete=()=>W(),Z.onerror=()=>Y(Z.error);for(let X of Q){let G=t(X);J.delete([$,G])}})}async list($){let Q=this.db.transaction(K0,"readonly").objectStore(K0);return new Promise((Z,J)=>{let W=Q.getAll();W.onsuccess=()=>{let X=W.result.filter((G)=>G.host===$).map((G)=>G.hash);Z(X.map((G)=>L0(G)))},W.onerror=()=>J(W.error)})}async count(){let V=this.db.transaction(K0,"readonly").objectStore(K0);return new Promise((Q,Z)=>{let J=V.count();J.onsuccess=()=>Q(J.result),J.onerror=()=>Z(J.error)})}async wipe(){let $=this.db.transaction(K0,"readwrite"),V=$.objectStore(K0);return new Promise((Q,Z)=>{$.oncomplete=()=>Q(),$.onerror=()=>Z($.error),V.clear()})}}var T0="seedMeta",J0="hosts",K0="uploadQueue",G0="downloadQueue",h="messages",M$="apld",OZ=3,FZ="diplomatic-store-db";class $Q{seed;hosts;uploads;downloads;messages;db;constructor($,V){this.db=$,this.seed=new tV($),this.hosts=new aV($),this.uploads=new eV($),this.downloads=new oV($),this.messages=new sV($,V)}async wipe(){await this.hosts.wipe(),await this.uploads.wipe(),await this.downloads.wipe(),await this.messages.wipe()}}async function rJ(){return new Promise(($,V)=>{let Q=indexedDB.open(FZ,OZ);Q.onupgradeneeded=()=>{let{result:Z,transaction:J}=Q;if(!Z.objectStoreNames.contains(T0))Z.createObjectStore(T0);if(!Z.objectStoreNames.contains(J0))Z.createObjectStore(J0,{keyPath:"label"});if(!Z.objectStoreNames.contains(K0))Z.createObjectStore(K0,{keyPath:["host","hash"]});if(!Z.objectStoreNames.contains(G0))Z.createObjectStore(G0);let W;if(!Z.objectStoreNames.contains(h))W=Z.createObjectStore(h);else{if(!J)throw Error("missing upgrade transaction for messages store");W=J.objectStore(h)}if(!W.indexNames.contains(M$))W.createIndex(M$,"apld",{unique:!1})},Q.onblocked=()=>{console.warn(`[DIPLOMATIC] protocol store IDB upgrade blocked (${FZ} → v${OZ}); waiting for other connections to close`)},Q.onsuccess=()=>{let Z=Q.result;Z.onversionchange=()=>{Z.close()},$(Z)},Q.onerror=()=>V(Q.error??Error("protocol store IndexedDB open failed"))})}async function o$($){let V=await rJ();if(typeof navigator<"u"&&navigator.storage?.persist)try{await Promise.race([navigator.storage.persist(),new Promise((Q)=>{setTimeout(()=>Q(!1),2000)})])}catch{}return new $Q(V,$)}function MZ($){if(!$||typeof $!=="object")return!1;if(!("kind"in $))return!1;return typeof $.kind==="string"}function qZ($){if(typeof $!=="number")return;return $}function HZ($){if(!$||typeof $!=="object")return;if(!("hasSeed"in $)||!("hasHost"in $)||!("connected"in $))return;if(typeof $.hasSeed!=="boolean"||typeof $.hasHost!=="boolean"||typeof $.connected!=="boolean")return;return{hasSeed:$.hasSeed,hasHost:$.hasHost,connected:$.connected}}function oJ($){if(!$||typeof $!=="object")return;if(!("phase"in $))return;let V=aJ($.phase);if(V===void 0)return;let Q={phase:V};if("host"in $&&typeof $.host==="string")Q.host=$.host;if("done"in $&&typeof $.done==="number")Q.done=$.done;if("total"in $&&typeof $.total==="number")Q.total=$.total;if("bytesDone"in $&&typeof $.bytesDone==="number")Q.bytesDone=$.bytesDone;if("bytesTotal"in $&&typeof $.bytesTotal==="number")Q.bytesTotal=$.bytesTotal;return Q}function aJ($){if($==="peek"||$==="pull"||$==="open"||$==="exec"||$==="push"||$==="import"||$==="idle"||$==="apply")return $==="apply"?"exec":$;return}function PZ($){if(!$||typeof $!=="object")return;if(!("numUploads"in $)||!("numDownloads"in $))return;if(typeof $.numUploads!=="number"||typeof $.numDownloads!=="number")return;let V={phase:"idle"};if("progress"in $){let Q=oJ($.progress);if(Q===void 0)return;V=Q}return{numUploads:$.numUploads,numDownloads:$.numDownloads,progress:V}}var z0="[DIPLOMATIC]";class H${worker;state;store;local;nextId=1;pending=new Map;ready;resolveReady;rejectReady;scheduledSync;cachedClientState={hasSeed:!1,hasHost:!1,connected:!1};cachedXferState={numUploads:0,numDownloads:0,progress:E0};clientState;xferState;constructor($,V,Q,Z,J){this.worker=$,this.state=V,this.store=Q,this.clientState=new I0(async()=>this.cachedClientState),this.xferState=new I0(async()=>this.cachedXferState),this.scheduledSync=new N$(J,async()=>{try{await this.request({id:this.allocId(),op:"sync"})}catch(W){console.error(`${z0} worker sync after local write failed`,W)}}),this.local=new B0(Z,V,Q,()=>{throw Error(`${z0} local writer has no transport (use worker for network)`)},r,!0,void 0,void 0,()=>{this.scheduledSync.schedule()}),this.local.xferState.listen((W)=>{this.cachedXferState={numUploads:W.numUploads,numDownloads:W.numDownloads,progress:this.cachedXferState.progress},this.xferState.emit()}),this.ready=new Promise((W,Y)=>{this.resolveReady=W,this.rejectReady=Y}),this.worker.onmessage=(W)=>{this.onMessage(W.data)},this.worker.onerror=(W)=>{console.error(`${z0} worker error`,W),this.failReady(Error(`${z0} worker failed to load`))},this.worker.onmessageerror=()=>{this.failReady(Error(`${z0} worker message error`))}}failReady($){let V=this.rejectReady;if(this.rejectReady=void 0,this.resolveReady=void 0,V)V($)}async flushScheduledSync(){await this.scheduledSync.flush()}static async connect($,V,Q){let Z=Q.clock??new M0,J=Q.syncDebounceMs??i$,W=new H$(Q.worker,$,V,Z,J),Y=Q.readyTimeoutMs??15000,X;try{let G=W.probeReady();if(await Promise.race([W.ready,G,new Promise((K,R)=>{X=setTimeout(()=>{R(Error(`${z0} worker ready timeout after ${Y}ms`))},Y)})]),X!==void 0)clearTimeout(X),X=void 0;G.catch(()=>{}),await W.hydrateStateFromStore(V),await W.pullRemoteState()}catch(G){throw W.terminate(),G}finally{if(X!==void 0)clearTimeout(X)}return W}async hydrateStateFromStore($){let V=await $.seed.load(),Q=await $.hosts.list();this.cachedClientState={hasSeed:V!==void 0,hasHost:Array.from(Q).length>0,connected:!1};let Z=await $.uploads.count(),J=await $.downloads.count();this.cachedXferState={numUploads:Z,numDownloads:J,progress:E0}}async pullRemoteState(){let $=await this.request({id:this.allocId(),op:"getClientState"}),V=HZ($);if(V!==void 0)this.cachedClientState=V;let Q=await this.request({id:this.allocId(),op:"getXferState"}),Z=PZ(Q);if(Z!==void 0)this.cachedXferState=Z}markReady(){let $=this.resolveReady;if(this.resolveReady=void 0,this.rejectReady=void 0,$)$()}probeReady(){return new Promise(($,V)=>{let Q=this.allocId();this.pending.set(Q,{resolve:(Z)=>{if(Z==="pong"){this.markReady(),$();return}V(Error(`${z0} worker probe ping failed`))},reject:V}),this.worker.postMessage({id:Q,op:"ping"})})}async ping(){if(await this.ready,await this.request({id:this.allocId(),op:"ping"})!=="pong")throw Error(`${z0} worker ping failed`)}terminate(){this.scheduledSync.cancel(),this.worker.terminate();for(let[,$]of this.pending)$.reject(Error(`${z0} worker terminated`));this.pending.clear()}onMessage($){if(!MZ($))return;let V=$;switch(V.kind){case"ready":{this.markReady();return}case"initError":{this.failReady(Error(`${z0} worker init failed: ${V.message}`));return}case"clientState":{this.cachedClientState=V.state,this.clientState.emit();return}case"xferState":{this.cachedXferState=V.state,this.xferState.emit();return}case"dirty":{this.state.refresh(V.eids.map(tJ));return}case"wiped":{this.state.clear();return}case"reply":{let Q=this.pending.get(V.id);if(!Q)return;if(this.pending.delete(V.id),V.ok)Q.resolve(V.result);else Q.reject(new q$(V.status));return}default:return}}allocId(){let $=this.nextId;return this.nextId+=1,$}request($,V){return new Promise((Q,Z)=>{if(this.pending.set($.id,{resolve:Q,reject:Z}),V&&V.length>0)this.worker.postMessage($,V);else this.worker.postMessage($)})}async requestStatus($,V){try{let Q=await this.request($,V),Z=qZ(Q);if(Z!==void 0)return Z;return 0}catch(Q){if(Q instanceof q$)return Q.status;return 12}}serializeHost($){return{handle:$.handle.href,label:$.label,idx:$.idx??0}}async setSeed($,V){await this.ready,await this.local.setSeed($,V),this.cachedClientState={...this.cachedClientState,hasSeed:!0},this.clientState.emit();let Q=$.slice();await this.request({id:this.allocId(),op:"setSeed",seed:Q,persist:V?.persist},[Q.buffer])}async link($,V=!0){await this.ready,await this.local.link($,!1),await this.request({id:this.allocId(),op:"link",host:this.serializeHost($),connect:V})}async unlink($){await this.ready,await this.local.unlink($),await this.request({id:this.allocId(),op:"unlink",label:$})}async hosts(){return await this.ready,this.local.hosts()}async connect($=!0,V=!0){await this.ready,await this.request({id:this.allocId(),op:"connect",listen:$,sync:V})}async disconnect(){await this.ready,await this.request({id:this.allocId(),op:"disconnect"})}async insertRaw($){return await this.ready,this.local.insertRaw($)}async updateRaw($,V,Q){return await this.ready,this.local.updateRaw($,V,Q)}async insert($){return await this.ready,this.local.insert($)}async update($){return await this.ready,this.local.update($)}async delete($){return await this.ready,this.local.delete($)}async genEID($){return await this.ready,this.local.genEID($)}async sync(){return await this.ready,this.requestStatus({id:this.allocId(),op:"sync"})}async rebuild($){return await this.ready,this.scheduledSync.cancel(),await this.scheduledSync.flush(),this.requestStatus({id:this.allocId(),op:"rebuild",checkHost:$?.checkHost})}async listMsgs($){return await this.ready,this.local.listMsgs($)}async countMsgs($){return await this.ready,this.local.countMsgs($)}async reconcile($,V){await this.ready;try{let Q=await this.request({id:this.allocId(),op:"reconcile",hostLabel:$,pull:V?.pull,push:V?.push,sync:V?.sync});if(!sJ(Q))return z(12);return O(Q)}catch(Q){if(Q instanceof q$&&Q.status!==0)return z(Q.status);return z(12)}}async msgcheck(){await this.ready;let $=await this.request({id:this.allocId(),op:"msgcheck"});if(!($ instanceof Uint8Array))throw Error(`${z0} msgcheck: expected Uint8Array`);return $}async entcheck(){await this.ready;let $=await this.request({id:this.allocId(),op:"entcheck"});if(!($ instanceof Uint8Array))throw Error(`${z0} entcheck: expected Uint8Array`);return $}async wipe($){await this.ready,await this.local.wipe($),await this.request({id:this.allocId(),op:"wipe",msgs:$?.msgs,ents:$?.ents,meta:$?.meta,seed:$?.seed}),await this.hydrateStateFromStore(this.store),this.clientState.emit(),this.xferState.emit()}async import($){await this.ready;let V=new Uint8Array(await $.arrayBuffer());return this.requestStatus({id:this.allocId(),op:"import",bytes:V},[V.buffer])}async export($,V){await this.ready;try{let Q=await this.request({id:this.allocId(),op:"export"});if(!(Q instanceof Uint8Array))return 12;let Z=new Blob([Q.slice()]);return u$(Z,$),0}catch(Q){if(Q instanceof q$)return Q.status;return 12}}}class q$ extends Error{status;constructor($){super(`WorkerReplyError: ${_[$]}`);this.status=$;this.name="WorkerReplyError"}}function sJ($){if(!$||typeof $!=="object")return!1;let V=$;return V.msgcheck instanceof Uint8Array&&V.msgcheck.length===32&&typeof V.numBags==="number"&&typeof V.numDupes==="number"}function tJ($){return $}var v0="[DIPLOMATIC]";async function a$($){let V=$.clock??new M0;if($.worker!==void 0&&eJ($)!==void 0)throw Error(`${v0} worker path requires IndexedDB on both sides; do not pass store (got a custom store)`);if($.worker===void 0){console.info(`${v0} sync on main thread `+"(no worker — app did not request a worker)");let J=await CZ($.store);return $W(V,$.state,J)}if(typeof Worker>"u")throw Error(`${v0} worker was provided but Worker API is unavailable`);let Q=await CZ(void 0);console.info(`${v0} attaching app-provided sync worker…`);let Z=await H$.connect($.state,Q,{worker:$.worker,readyTimeoutMs:$.readyTimeoutMs,clock:V,syncDebounceMs:$.syncDebounceMs});return await Z.ping(),console.info(`${v0} sync worker active (network + EntDB writes off main; local mutates on main; dirty signals only)`),{client:Z,mode:"worker",dispose:()=>{console.info(`${v0} terminating sync worker`),Z.terminate()}}}function eJ($){if("store"in $)return $.store;return}async function $W($,V,Q){let Z=new B0($,V,Q,f$,r);return{client:Z,mode:"main",dispose:()=>{Z.disconnect()}}}async function CZ($){if($!==void 0)return $;if(typeof indexedDB>"u")throw Error(`${v0} IndexedDB is unavailable; pass store explicitly (e.g. new MemoryStore(crypto))`);return o$(r)}function VW($){let[V,Q]=VQ();return s$(()=>{async function Z(){let W=await $.clientState.get();Q(W)}let J=$.clientState.listen(Z);return Z(),()=>{J()}},[$]),V}function QW($){let[V,Q]=VQ();return s$(()=>{async function Z(){let W=await $.xferState.get();Q(W)}let J=$.xferState.listen(Z);return Z(),()=>{J()}},[$]),V}function ZW($){s$(()=>{async function V(){try{await $.connect(),await $.sync()}catch(W){console.error("reconnectAndSync failed",W)}}function Q(){V()}function Z(){if(typeof document<"u"&&document.visibilityState==="visible")V()}function J(){V()}if(globalThis.addEventListener("online",Q),typeof document<"u")document.addEventListener("visibilitychange",Z);return globalThis.addEventListener("focus",J),globalThis.addEventListener("pageshow",J),()=>{if(globalThis.removeEventListener("online",Q),typeof document<"u")document.removeEventListener("visibilitychange",Z);globalThis.removeEventListener("focus",J),globalThis.removeEventListener("pageshow",J)}},[$])}function JW($={}){let V=$.clock??new M0,{seed:Q,host:Z,readyTimeoutMs:J}=$,W=$.worker,Y="store"in $?$.store:void 0,[X,G]=VQ({stateMgr:HV});return s$(()=>{let K=!1,R;return(async()=>{let I=await DV();if(K)return;let N=g$(I),U=W!==void 0?await a$({state:N,clock:V,worker:W,readyTimeoutMs:J}):await a$({state:N,clock:V,store:Y,readyTimeoutMs:J});if(K){U.dispose();return}R=U.dispose;let{client:M,mode:F}=U;if(Q)await M.setSeed(Q);if(Z)await M.link(Z);if(K){R();return}G({client:M,entDB:I,stateMgr:N,mode:F,error:void 0})})().catch((I)=>{let N=I instanceof Error?I:Error(String(I));if(console.error("[DIPLOMATIC] useClient init failed",N),!K)G((U)=>({...U,client:void 0,error:N}))}),()=>{K=!0,R?.()}},[V,Q,Z,W,Y,J]),X}import{use as WW,useEffect as wZ,useRef as YW,useState as XW}from"react";function TZ($,V,Q){let[Z,J]=XW();return wZ(()=>{async function W(){let Y=await Q();J(Y)}return W(),$.on(V,W),()=>{$.off(V,W)}},[$,V,Q]),Z}function GW($,V,Q){let Z=YW(Q());return wZ(()=>{async function J(){Z.current=Q()}return $.on(V,J),()=>{$.off(V,J)}},[$,V,Q]),WW(Z.current)}function AZ($,V){return`${$}:${V}`}class QQ{queue=new Map;async enq($){for(let V of $){let Q=AZ(V.host,V.seq);this.queue.set(Q,V)}}async deq($,V){for(let Q of V){let Z=AZ($,Q);this.queue.delete(Z)}}async list(){let $=[];for(let V of this.queue.values())$.push(V);return $}async count(){return this.queue.size}async wipe(){this.queue.clear()}}function KW($,V){if(V.setLastSeq!==void 0)$.lastSeq=V.setLastSeq;else if(V.lastSeq!==void 0&&V.lastSeq>$.lastSeq)$.lastSeq=V.lastSeq}class ZQ{hosts=new Map;async add($){let V={...$,lastSeq:0};this.hosts.set($.label,V)}async touch($,V){await this.recordStats($,{lastSeq:V})}async recordStats($,V){let Q=this.hosts.get($);if(!Q)return;KW(Q,V),this.hosts.set($,{...Q})}async get($){return this.hosts.get($)}async set($,V){let Q=this.hosts.get($);if(!Q)return 13;return this.hosts.set($,{...Q,...V}),0}async del($){this.hosts.delete($)}async list(){return this.hosts.values()}async wipe(){this.hosts.clear()}}class JQ{crypto;messages=new Map;constructor($){this.crypto=$}async add($){let V=[];for(let{key:Q,data:Z}of $)this.messages.set(L(Q),Z),V.push(0);return V}async del($){for(let V of $)this.messages.delete(L(V))}async get($){let V=this.messages.get(L($));if(V)return await S0($,V,this.crypto);return}async has($){return this.messages.has(L($))}async list($){let V=$?.apld,Q=$?.body!==!1,Z=[];for(let[J,W]of this.messages){if(V!==void 0&&$$(W.apld)!==V)continue;let Y=Q0(J);Z.push(await S0(Y,W,this.crypto,{body:Q}))}return Z}async count($){if($===void 0)return this.messages.size;let V=0;for(let Q of this.messages.values())if($$(Q.apld)===$)V++;return V}async listKeys(){let $=[];for(let V of this.messages.keys())$.push(Q0(V));return $}async last($){let V;for(let[Q,Z]of this.messages){if(e($,Z.eid)===!1)continue;let J=Q0(Q);if(V===void 0)V={hash:J,data:Z};else if((Z.ctr??0)>(V.data.ctr??0)||(Z.ctr??0)===(V.data.ctr??0)&&(Z.off??0)>(V.data.off??0))V={hash:J,data:Z}}if(V)return await S0(V.hash,V.data,this.crypto);return}async markApplied($){for(let V of $){let Q=this.messages.get(L(V));if(!Q)continue;m0(Q,x0)}}async markFailed($){for(let{key:V,err:Q}of $){let Z=this.messages.get(L(V));if(!Z)continue;m0(Z,N0,Q)}}async wipe(){this.messages.clear()}}class WQ{enclave;async save($,V){return this.enclave=new R0($,r),this.enclave}async load(){return this.enclave}async wipe(){this.enclave=void 0}}class YQ{queue=new Map;async enq($,V){let Q=this.queue.get($)||new Set;this.queue.set($,Q);for(let Z of V)Q.add(t(Z))}async deq($,V){let Q=this.queue.get($);if(Q)for(let Z of V)Q.delete(t(Z))}async list($){let V=this.queue.get($);if(!V)return[];let Q=[];for(let Z of V)Q.push(L0(Z));return Q}async count(){let $=0;for(let V of this.queue.values())$+=V.size;return $}async wipe(){this.queue.clear()}}class DZ{seed=new WQ;hosts=new ZQ;uploads=new YQ;downloads=new QQ;messages;constructor($){this.messages=new JQ($)}async wipe(){await this.hosts.wipe(),await this.uploads.wipe(),await this.downloads.wipe(),await this.messages.wipe()}}class _Z{singletonType;latest;latestOff=-1;emitter=new A0;constructor($){this.singletonType=$}async apply($){for(let V of $){let Q=new k(V.eid),[Z,J]=Q.readStruct(o);if(J!==0)continue;let W=new g;W.writeVarString(this.singletonType);let Y=W.result();if(Z.id.length===Y.length&&Z.id.every((X,G)=>X===Y[G])){if(this.latest===void 0||V.off>this.latestOff)this.latestOff=V.off,this.latest=V.bod,this.emitter.emit(this.singletonType,null)}}return $.map(()=>0)}clear=async()=>{return this.latest=void 0,this.latestOff=-1,this.emitter.emit(this.singletonType,null),0};notify=($)=>{for(let V of $)if(V===this.singletonType)this.emitter.emit(this.singletonType,null)};refresh=async($)=>{this.notify([this.singletonType])};on=($,V)=>{this.emitter.addEventListener($,V)};off=($,V)=>{this.emitter.removeEventListener($,V)}}var XQ=32,t$=32,zW=new Set(["co.uk","org.uk","ac.uk","gov.uk","com.au","net.au","org.au","co.nz","co.jp","com.br","com.mx","co.kr","com.sg","co.in","com.hk","github.io","pages.dev","workers.dev","web.app","firebaseapp.com","azurewebsites.net"]);function RW($){if(/^\d{1,3}(\.\d{1,3}){3}$/.test($))return!0;if($.includes(":"))return!0;return!1}function jZ($){let V=$.trim().toLowerCase().replace(/\.$/,"");if(V===""||V==="localhost"||V.endsWith(".localhost"))return V||"localhost";if(RW(V))return V;let Q=V.split(".").filter(Boolean);if(Q.length<=2)return V;let Z=`${Q[Q.length-2]}.${Q[Q.length-1]}`;if(zW.has(Z)&&Q.length>=3)return Q.slice(-3).join(".");return Z}function P$($){let V=new Uint8Array($);return crypto.getRandomValues(V),V}function IW($){let V=new Uint8Array($.byteLength);return V.set($),V}function GQ($){return IW($).buffer}function LZ($){if($.byteLength!==XQ)throw Error(`largeBlob: seed must be ${XQ} bytes`);return $}function e$($){if($?.rpId!==void 0)return $.rpId;if(typeof location>"u")throw Error("largeBlob: rpId required outside browser");return jZ(location.hostname)}function $V(){if(typeof navigator>"u"||!navigator.credentials||typeof PublicKeyCredential>"u")throw Error("largeBlob: WebAuthn unavailable")}function VV($){if($===null||$.type!=="public-key"||!("rawId"in $)||typeof $.getClientExtensionResults!=="function")throw Error("largeBlob: expected public-key credential");return $}function xZ(){if(typeof navigator>"u")return!1;let $=navigator.userAgent;if(/Chrom(e|ium)|Edg\/|EdgiOS|OPR\/|Firefox|FxiOS|CriOS|Android/.test($))return!1;if(/Safari\//.test($))return!0;return navigator.vendor==="Apple Computer, Inc."&&/AppleWebKit/.test($)}async function NW(){if(typeof PublicKeyCredential>"u")return!1;if(xZ())return!0;let $=PublicKeyCredential.getClientCapabilities;if(typeof $!=="function")return!0;let V=await $.call(PublicKeyCredential),Q="extension:largeBlob";if(Q in V)return V[Q]===!0;return!0}async function KQ($){$V();let V=$?.userName??"diplomatic-seed",Q={residentKey:"required",requireResidentKey:!0,userVerification:"required"};if($?.authenticatorAttachment!==void 0)Q.authenticatorAttachment=$.authenticatorAttachment;else if(xZ())Q.authenticatorAttachment="platform";let Z=await navigator.credentials.create({publicKey:{challenge:P$(t$),rp:{id:e$($),name:$?.rpName??"DIPLOMATIC"},user:{id:P$(16),name:V,displayName:V},pubKeyCredParams:[{type:"public-key",alg:-7},{type:"public-key",alg:-8},{type:"public-key",alg:-257}],authenticatorSelection:Q,extensions:{largeBlob:{support:"preferred"}}}}),J=VV(Z);if(J.getClientExtensionResults().largeBlob?.supported!==!0)throw Error("largeBlob: unsupported by authenticator. Use Apple Passwords / iCloud Keychain (Safari platform) or a largeBlob-capable security key in Chrome. "+"An empty passkey may have been created — remove it in Passwords if listed.");return new Uint8Array(J.rawId)}async function QV($,V,Q){$V(),LZ(V);let Z=await navigator.credentials.get({publicKey:{challenge:P$(t$),rpId:e$(Q),allowCredentials:[{type:"public-key",id:GQ($)}],userVerification:"required",extensions:{largeBlob:{write:GQ(V)}}}});if(VV(Z).getClientExtensionResults().largeBlob?.written!==!0)throw Error("largeBlob: write not accepted. On Safari, create and write must be two separate button clicks. Confirm the passkey is iCloud Keychain / platform, not a manager without largeBlob.")}async function SZ($,V){let Q=new Uint8Array(XQ);await QV($,Q,V)}async function fZ($,V){return(await EZ($,V)).seed}async function EZ($,V){$V();let Q=await navigator.credentials.get({publicKey:{challenge:P$(t$),rpId:e$(V),allowCredentials:[{type:"public-key",id:GQ($)}],userVerification:"required",extensions:{largeBlob:{read:!0}}}});return mZ(VV(Q))}async function UW($){$V();let V=await navigator.credentials.get({publicKey:{challenge:P$(t$),rpId:e$($),userVerification:"required",extensions:{largeBlob:{read:!0}}}});return mZ(VV(V))}function mZ($){let V=$.getClientExtensionResults().largeBlob?.blob;if(V===void 0)throw Error("largeBlob: missing blob (credential has no seed storage, or largeBlob did not sync)");let Q=new Uint8Array(V);if(Q.every((Z)=>Z===0))throw Error("largeBlob: seed was cleared");return{seed:LZ(Q),credId:new Uint8Array($.rawId)}}async function OW($,V){let Q=await KQ(V);return await QV(Q,$,V),Q}class BZ{#V;#$;#Q;#Z;constructor($){if(this.#Q=$?.rpId,this.#Z=$?.rpName,$?.credId!==void 0)this.#$=$.credId.slice()}get credId(){if(this.#$===void 0)return;return this.#$.slice()}setCredId($){this.#$=$===void 0?void 0:$.slice()}async save($,V){if(V?.persist!==!0)return this.#V=new R0($,r),this.#V;let Q={rpId:this.#Q,rpName:this.#Z},Z=this.#$;if(Z===void 0)Z=await KQ(Q),this.#$=Z;return await QV(Z,$,Q),this.#V=new R0($,r),this.#V}async load(){return this.#V}async unlock(){let $=this.#$;if($===void 0)throw Error("largeBlob: no credential id");let V=await fZ($,{rpId:this.#Q});return this.#V=new R0(V,r),this.#V}async wipe(){let $=this.#$;if($!==void 0)await SZ($,{rpId:this.#Q});this.#V=void 0,this.#$=void 0}}async function H9($,V){let Q=await o$(r),Z=new B0(new M0,$,Q,f$,r);return{client:Z,setSeed:async(W)=>{let Y=L0(W);await Q.seed.save(Y),await Q.hosts.add({handle:V,label:"host",idx:0}),await Z.connect()}}}export{QV as writeLargeBlobSeed,ZW as useSyncOnResume,GW as useStateWatcherSuspense,TZ as useStateWatcher,QW as useClientXferState,VW as useClientState,JW as useClient,OW as storeSeedLargeBlob,y$ as shouldEmitItemProgress,m0 as setApld,_V as revFromHead,R$ as revFromEntity,EZ as readLargeBlobUnlock,fZ as readLargeBlobSeed,o$ as openIDBStore,DV as openEntDB,a$ as openDiplomaticClient,HV as nullStateManager,AJ as nullEntDB,iQ as normalizeTags,NW as largeBlobCapable,TJ as isTombstone,LV as isTerminalApplyFailure,jJ as isPendingApply,u as isLiveEnt,_J as isApldState,E0 as idleProgress,L0 as htob,f$ as hostHTTPTransport,H9 as genWebClient,XJ as genSingletonEID,g$ as entStateManager,mQ as encodeEntRev,o as eidCodec,UW as discoverLargeBlobSeed,jZ as defaultWebAuthnRpId,e0 as defaultPeekProgressEvery,r as crypto,KQ as createLargeBlobCred,EQ as cmpBytes,SZ as clearLargeBlobSeed,d0 as checksumSet,K$ as checksumEntRevs,t as btoh,L as btob64,Q0 as b64tob,$$ as apldFromStored,H$ as WorkerClient,A0 as TypedEventEmitter,B0 as SyncClient,_ as Status,z$ as StateManager,_Z as SingletonStateManager,BZ as PasskeySeedStore,DZ as MemoryStore,$Q as IDBStore,OV as HTTPTransport,AV as EntIDB,k$ as EntDBMemory,g as Encoder,k as Decoder,M0 as Clock,I$ as CachedEntDB,q0 as APLD_PENDING,N0 as APLD_ERROR,x0 as APLD_APPLIED};
|
|
1
|
+
function Ae(i){let r=i.length,n=0,e=0;while(e<r){let t=i.charCodeAt(e++);if((t&4294967168)===0){n++;continue}else if((t&4294965248)===0)n+=2;else{if(t>=55296&&t<=56319){if(e<r){let $=i.charCodeAt(e);if(($&64512)===56320)++e,t=((t&1023)<<10)+($&1023)+65536}}if((t&4294901760)===0)n+=3;else n+=4}}return n}function J$(i,r,n){let e=i.length,t=n,$=0;while($<e){let f=i.charCodeAt($++);if((f&4294967168)===0){r[t++]=f;continue}else if((f&4294965248)===0)r[t++]=f>>6&31|192;else{if(f>=55296&&f<=56319){if($<e){let Z=i.charCodeAt($);if((Z&64512)===56320)++$,f=((f&1023)<<10)+(Z&1023)+65536}}if((f&4294901760)===0)r[t++]=f>>12&15|224,r[t++]=f>>6&63|128;else r[t++]=f>>18&7|240,r[t++]=f>>12&63|128,r[t++]=f>>6&63|128}r[t++]=f&63|128}}var h$=new TextEncoder,Q$=50;function w$(i,r,n){h$.encodeInto(i,r.subarray(n))}function Te(i,r,n){if(i.length>Q$)w$(i,r,n);else J$(i,r,n)}var u$=4096;function Fn(i,r,n){let e=r,t=e+n,$=[],f="";while(e<t){let Z=i[e++];if((Z&128)===0)$.push(Z);else if((Z&224)===192){let J=i[e++]&63;$.push((Z&31)<<6|J)}else if((Z&240)===224){let J=i[e++]&63,h=i[e++]&63;$.push((Z&31)<<12|J<<6|h)}else if((Z&248)===240){let J=i[e++]&63,h=i[e++]&63,Q=i[e++]&63,w=(Z&7)<<18|J<<12|h<<6|Q;if(w>65535)w-=65536,$.push(w>>>10&1023|55296),w=56320|w&1023;$.push(w)}else $.push(Z);if($.length>=u$)f+=String.fromCharCode(...$),$.length=0}if($.length>0)f+=String.fromCharCode(...$);return f}var V$=new TextDecoder,Y$=200;function X$(i,r,n){let e=i.subarray(r,r+n);return V$.decode(e)}function De(i,r,n){if(n>Y$)return X$(i,r,n);else return Fn(i,r,n)}class vi{type;data;constructor(i,r){this.type=i,this.data=r}}class ni extends Error{constructor(i){super(i);let r=Object.create(ni.prototype);Object.setPrototypeOf(this,r),Object.defineProperty(this,"name",{configurable:!0,enumerable:!1,value:ni.name})}}var bi=4294967295;function pe(i,r,n){let e=n/4294967296,t=n;i.setUint32(r,e),i.setUint32(r+4,t)}function pr(i,r,n){let e=Math.floor(n/4294967296),t=n;i.setUint32(r,e),i.setUint32(r+4,t)}function xr(i,r){let n=i.getInt32(r),e=i.getUint32(r+4);return n*4294967296+e}function xe(i,r){let n=i.getUint32(r),e=i.getUint32(r+4);return n*4294967296+e}var c$=-1,W$=4294967295,I$=17179869183;function g$({sec:i,nsec:r}){if(i>=0&&r>=0&&i<=I$)if(r===0&&i<=W$){let n=new Uint8Array(4);return new DataView(n.buffer).setUint32(0,i),n}else{let n=i/4294967296,e=i&4294967295,t=new Uint8Array(8),$=new DataView(t.buffer);return $.setUint32(0,r<<2|n&3),$.setUint32(4,e),t}else{let n=new Uint8Array(12),e=new DataView(n.buffer);return e.setUint32(0,r),pr(e,4,i),n}}function z$(i){let r=i.getTime(),n=Math.floor(r/1000),e=(r-n*1000)*1e6,t=Math.floor(e/1e9);return{sec:n+t,nsec:e-t*1e9}}function U$(i){if(i instanceof Date){let r=z$(i);return g$(r)}else return null}function K$(i){let r=new DataView(i.buffer,i.byteOffset,i.byteLength);switch(i.byteLength){case 4:{let n=r.getUint32(0),e=0;return{sec:n,nsec:0}}case 8:{let n=r.getUint32(0),e=r.getUint32(4),t=(n&3)*4294967296+e,$=n>>>2;return{sec:t,nsec:$}}case 12:{let n=xr(r,4),e=r.getUint32(0);return{sec:n,nsec:e}}default:throw new ni(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${i.length}`)}}function G$(i){let r=K$(i);return new Date(r.sec*1000+r.nsec/1e6)}var je={type:c$,encode:U$,decode:G$};class ir{static defaultCodec=new ir;__brand;builtInEncoders=[];builtInDecoders=[];encoders=[];decoders=[];constructor(){this.register(je)}register({type:i,encode:r,decode:n}){if(i>=0)this.encoders[i]=r,this.decoders[i]=n;else{let e=-1-i;this.builtInEncoders[e]=r,this.builtInDecoders[e]=n}}tryToEncode(i,r){for(let n=0;n<this.builtInEncoders.length;n++){let e=this.builtInEncoders[n];if(e!=null){let t=e(i,r);if(t!=null){let $=-1-n;return new vi($,t)}}}for(let n=0;n<this.encoders.length;n++){let e=this.encoders[n];if(e!=null){let t=e(i,r);if(t!=null)return new vi(n,t)}}if(i instanceof vi)return i;return null}decode(i,r,n){let e=r<0?this.builtInDecoders[-1-r]:this.decoders[r];if(e)return e(i,r,n);else return new vi(r,i)}}function o$(i){return i instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&i instanceof SharedArrayBuffer}function Wr(i){if(i instanceof Uint8Array)return i;else if(ArrayBuffer.isView(i))return new Uint8Array(i.buffer,i.byteOffset,i.byteLength);else if(o$(i))return new Uint8Array(i);else return Uint8Array.from(i)}var m$=100,a$=2048;class jr{extensionCodec;context;useBigInt64;maxDepth;initialBufferSize;sortKeys;forceFloat32;ignoreUndefined;forceIntegerToFloat;pos;view;bytes;entered=!1;constructor(i){this.extensionCodec=i?.extensionCodec??ir.defaultCodec,this.context=i?.context,this.useBigInt64=i?.useBigInt64??!1,this.maxDepth=i?.maxDepth??m$,this.initialBufferSize=i?.initialBufferSize??a$,this.sortKeys=i?.sortKeys??!1,this.forceFloat32=i?.forceFloat32??!1,this.ignoreUndefined=i?.ignoreUndefined??!1,this.forceIntegerToFloat=i?.forceIntegerToFloat??!1,this.pos=0,this.view=new DataView(new ArrayBuffer(this.initialBufferSize)),this.bytes=new Uint8Array(this.view.buffer)}clone(){return new jr({extensionCodec:this.extensionCodec,context:this.context,useBigInt64:this.useBigInt64,maxDepth:this.maxDepth,initialBufferSize:this.initialBufferSize,sortKeys:this.sortKeys,forceFloat32:this.forceFloat32,ignoreUndefined:this.ignoreUndefined,forceIntegerToFloat:this.forceIntegerToFloat})}reinitializeState(){this.pos=0}encodeSharedRef(i){if(this.entered)return this.clone().encodeSharedRef(i);try{return this.entered=!0,this.reinitializeState(),this.doEncode(i,1),this.bytes.subarray(0,this.pos)}finally{this.entered=!1}}encode(i){if(this.entered)return this.clone().encode(i);try{return this.entered=!0,this.reinitializeState(),this.doEncode(i,1),this.bytes.slice(0,this.pos)}finally{this.entered=!1}}doEncode(i,r){if(r>this.maxDepth)throw Error(`Too deep objects in depth ${r}`);if(i==null)this.encodeNil();else if(typeof i==="boolean")this.encodeBoolean(i);else if(typeof i==="number")if(!this.forceIntegerToFloat)this.encodeNumber(i);else this.encodeNumberAsFloat(i);else if(typeof i==="string")this.encodeString(i);else if(this.useBigInt64&&typeof i==="bigint")this.encodeBigInt64(i);else this.encodeObject(i,r)}ensureBufferSizeToWrite(i){let r=this.pos+i;if(this.view.byteLength<r)this.resizeBuffer(r*2)}resizeBuffer(i){let r=new ArrayBuffer(i),n=new Uint8Array(r),e=new DataView(r);n.set(this.bytes),this.view=e,this.bytes=n}encodeNil(){this.writeU8(192)}encodeBoolean(i){if(i===!1)this.writeU8(194);else this.writeU8(195)}encodeNumber(i){if(!this.forceIntegerToFloat&&Number.isSafeInteger(i))if(i>=0)if(i<128)this.writeU8(i);else if(i<256)this.writeU8(204),this.writeU8(i);else if(i<65536)this.writeU8(205),this.writeU16(i);else if(i<4294967296)this.writeU8(206),this.writeU32(i);else if(!this.useBigInt64)this.writeU8(207),this.writeU64(i);else this.encodeNumberAsFloat(i);else if(i>=-32)this.writeU8(224|i+32);else if(i>=-128)this.writeU8(208),this.writeI8(i);else if(i>=-32768)this.writeU8(209),this.writeI16(i);else if(i>=-2147483648)this.writeU8(210),this.writeI32(i);else if(!this.useBigInt64)this.writeU8(211),this.writeI64(i);else this.encodeNumberAsFloat(i);else this.encodeNumberAsFloat(i)}encodeNumberAsFloat(i){if(this.forceFloat32)this.writeU8(202),this.writeF32(i);else this.writeU8(203),this.writeF64(i)}encodeBigInt64(i){if(i>=BigInt(0))this.writeU8(207),this.writeBigUint64(i);else this.writeU8(211),this.writeBigInt64(i)}writeStringHeader(i){if(i<32)this.writeU8(160+i);else if(i<256)this.writeU8(217),this.writeU8(i);else if(i<65536)this.writeU8(218),this.writeU16(i);else if(i<4294967296)this.writeU8(219),this.writeU32(i);else throw Error(`Too long string: ${i} bytes in UTF-8`)}encodeString(i){let n=Ae(i);this.ensureBufferSizeToWrite(5+n),this.writeStringHeader(n),Te(i,this.bytes,this.pos),this.pos+=n}encodeObject(i,r){let n=this.extensionCodec.tryToEncode(i,this.context);if(n!=null)this.encodeExtension(n);else if(Array.isArray(i))this.encodeArray(i,r);else if(ArrayBuffer.isView(i))this.encodeBinary(i);else if(typeof i==="object")this.encodeMap(i,r);else throw Error(`Unrecognized object: ${Object.prototype.toString.apply(i)}`)}encodeBinary(i){let r=i.byteLength;if(r<256)this.writeU8(196),this.writeU8(r);else if(r<65536)this.writeU8(197),this.writeU16(r);else if(r<4294967296)this.writeU8(198),this.writeU32(r);else throw Error(`Too large binary: ${r}`);let n=Wr(i);this.writeU8a(n)}encodeArray(i,r){let n=i.length;if(n<16)this.writeU8(144+n);else if(n<65536)this.writeU8(220),this.writeU16(n);else if(n<4294967296)this.writeU8(221),this.writeU32(n);else throw Error(`Too large array: ${n}`);for(let e of i)this.doEncode(e,r+1)}countWithoutUndefined(i,r){let n=0;for(let e of r)if(i[e]!==void 0)n++;return n}encodeMap(i,r){let n=Object.keys(i);if(this.sortKeys)n.sort();let e=this.ignoreUndefined?this.countWithoutUndefined(i,n):n.length;if(e<16)this.writeU8(128+e);else if(e<65536)this.writeU8(222),this.writeU16(e);else if(e<4294967296)this.writeU8(223),this.writeU32(e);else throw Error(`Too large map object: ${e}`);for(let t of n){let $=i[t];if(!(this.ignoreUndefined&&$===void 0))this.encodeString(t),this.doEncode($,r+1)}}encodeExtension(i){if(typeof i.data==="function"){let n=i.data(this.pos+6),e=n.length;if(e>=4294967296)throw Error(`Too large extension object: ${e}`);this.writeU8(201),this.writeU32(e),this.writeI8(i.type),this.writeU8a(n);return}let r=i.data.length;if(r===1)this.writeU8(212);else if(r===2)this.writeU8(213);else if(r===4)this.writeU8(214);else if(r===8)this.writeU8(215);else if(r===16)this.writeU8(216);else if(r<256)this.writeU8(199),this.writeU8(r);else if(r<65536)this.writeU8(200),this.writeU16(r);else if(r<4294967296)this.writeU8(201),this.writeU32(r);else throw Error(`Too large extension object: ${r}`);this.writeI8(i.type),this.writeU8a(i.data)}writeU8(i){this.ensureBufferSizeToWrite(1),this.view.setUint8(this.pos,i),this.pos++}writeU8a(i){let r=i.length;this.ensureBufferSizeToWrite(r),this.bytes.set(i,this.pos),this.pos+=r}writeI8(i){this.ensureBufferSizeToWrite(1),this.view.setInt8(this.pos,i),this.pos++}writeU16(i){this.ensureBufferSizeToWrite(2),this.view.setUint16(this.pos,i),this.pos+=2}writeI16(i){this.ensureBufferSizeToWrite(2),this.view.setInt16(this.pos,i),this.pos+=2}writeU32(i){this.ensureBufferSizeToWrite(4),this.view.setUint32(this.pos,i),this.pos+=4}writeI32(i){this.ensureBufferSizeToWrite(4),this.view.setInt32(this.pos,i),this.pos+=4}writeF32(i){this.ensureBufferSizeToWrite(4),this.view.setFloat32(this.pos,i),this.pos+=4}writeF64(i){this.ensureBufferSizeToWrite(8),this.view.setFloat64(this.pos,i),this.pos+=8}writeU64(i){this.ensureBufferSizeToWrite(8),pe(this.view,this.pos,i),this.pos+=8}writeI64(i){this.ensureBufferSizeToWrite(8),pr(this.view,this.pos,i),this.pos+=8}writeBigUint64(i){this.ensureBufferSizeToWrite(8),this.view.setBigUint64(this.pos,i),this.pos+=8}writeBigInt64(i){this.ensureBufferSizeToWrite(8),this.view.setBigInt64(this.pos,i),this.pos+=8}}function Di(i,r){return new jr(r).encodeSharedRef(i)}function Lr(i){return`${i<0?"-":""}0x${Math.abs(i).toString(16).padStart(2,"0")}`}var d$=16,F$=16;class Rn{hit=0;miss=0;caches;maxKeyLength;maxLengthPerKey;constructor(i=d$,r=F$){this.maxKeyLength=i,this.maxLengthPerKey=r,this.caches=[];for(let n=0;n<this.maxKeyLength;n++)this.caches.push([])}canBeCached(i){return i>0&&i<=this.maxKeyLength}find(i,r,n){let e=this.caches[n-1];i:for(let t of e){let $=t.bytes;for(let f=0;f<n;f++)if($[f]!==i[r+f])continue i;return t.str}return null}store(i,r){let n=this.caches[i.length-1],e={bytes:i,str:r};if(n.length>=this.maxLengthPerKey)n[Math.random()*n.length|0]=e;else n.push(e)}decode(i,r,n){let e=this.find(i,r,n);if(e!=null)return this.hit++,e;this.miss++;let t=Fn(i,r,n),$=Uint8Array.prototype.slice.call(i,r,r+n);return this.store($,t),t}}var Nn="array",gr="map_key",se="map_value",R$=(i)=>{if(typeof i==="string"||typeof i==="number")return i;throw new ni("The type of key must be string or number but "+typeof i)};class ke{stack=[];stackHeadPosition=-1;get length(){return this.stackHeadPosition+1}top(){return this.stack[this.stackHeadPosition]}pushArrayState(i){let r=this.getUninitializedStateFromPool();r.type=Nn,r.position=0,r.size=i,r.array=Array(i)}pushMapState(i){let r=this.getUninitializedStateFromPool();r.type=gr,r.readCount=0,r.size=i,r.map={}}getUninitializedStateFromPool(){if(this.stackHeadPosition++,this.stackHeadPosition===this.stack.length){let i={type:void 0,size:0,array:void 0,position:0,readCount:0,map:void 0,key:null};this.stack.push(i)}return this.stack[this.stackHeadPosition]}release(i){if(this.stack[this.stackHeadPosition]!==i)throw Error("Invalid stack state. Released state is not on top of the stack.");if(i.type===Nn){let n=i;n.size=0,n.array=void 0,n.position=0,n.type=void 0}if(i.type===gr||i.type===se){let n=i;n.size=0,n.map=void 0,n.readCount=0,n.type=void 0}this.stackHeadPosition--}reset(){this.stack.length=0,this.stackHeadPosition=-1}}var Ir=-1,On=new DataView(new ArrayBuffer(0)),N$=new Uint8Array(On.buffer);try{On.getInt8(0)}catch(i){if(!(i instanceof RangeError))throw Error("This module is not supported in the current JavaScript engine because DataView does not throw RangeError on out-of-bounds access")}var Le=RangeError("Insufficient data"),O$=new Rn;class sr{extensionCodec;context;useBigInt64;rawStrings;maxStrLength;maxBinLength;maxArrayLength;maxMapLength;maxExtLength;keyDecoder;mapKeyConverter;totalPos=0;pos=0;view=On;bytes=N$;headByte=Ir;stack=new ke;entered=!1;constructor(i){this.extensionCodec=i?.extensionCodec??ir.defaultCodec,this.context=i?.context,this.useBigInt64=i?.useBigInt64??!1,this.rawStrings=i?.rawStrings??!1,this.maxStrLength=i?.maxStrLength??bi,this.maxBinLength=i?.maxBinLength??bi,this.maxArrayLength=i?.maxArrayLength??bi,this.maxMapLength=i?.maxMapLength??bi,this.maxExtLength=i?.maxExtLength??bi,this.keyDecoder=i?.keyDecoder!==void 0?i.keyDecoder:O$,this.mapKeyConverter=i?.mapKeyConverter??R$}clone(){return new sr({extensionCodec:this.extensionCodec,context:this.context,useBigInt64:this.useBigInt64,rawStrings:this.rawStrings,maxStrLength:this.maxStrLength,maxBinLength:this.maxBinLength,maxArrayLength:this.maxArrayLength,maxMapLength:this.maxMapLength,maxExtLength:this.maxExtLength,keyDecoder:this.keyDecoder})}reinitializeState(){this.totalPos=0,this.headByte=Ir,this.stack.reset()}setBuffer(i){let r=Wr(i);this.bytes=r,this.view=new DataView(r.buffer,r.byteOffset,r.byteLength),this.pos=0}appendBuffer(i){if(this.headByte===Ir&&!this.hasRemaining(1))this.setBuffer(i);else{let r=this.bytes.subarray(this.pos),n=Wr(i),e=new Uint8Array(r.length+n.length);e.set(r),e.set(n,r.length),this.setBuffer(e)}}hasRemaining(i){return this.view.byteLength-this.pos>=i}createExtraByteError(i){let{view:r,pos:n}=this;return RangeError(`Extra ${r.byteLength-n} of ${r.byteLength} byte(s) found at buffer[${i}]`)}decode(i){if(this.entered)return this.clone().decode(i);try{this.entered=!0,this.reinitializeState(),this.setBuffer(i);let r=this.doDecodeSync();if(this.hasRemaining(1))throw this.createExtraByteError(this.pos);return r}finally{this.entered=!1}}*decodeMulti(i){if(this.entered){yield*this.clone().decodeMulti(i);return}try{this.entered=!0,this.reinitializeState(),this.setBuffer(i);while(this.hasRemaining(1))yield this.doDecodeSync()}finally{this.entered=!1}}async decodeAsync(i){if(this.entered)return this.clone().decodeAsync(i);try{this.entered=!0;let r=!1,n;for await(let f of i){if(r)throw this.entered=!1,this.createExtraByteError(this.totalPos);this.appendBuffer(f);try{n=this.doDecodeSync(),r=!0}catch(Z){if(!(Z instanceof RangeError))throw Z}this.totalPos+=this.pos}if(r){if(this.hasRemaining(1))throw this.createExtraByteError(this.totalPos);return n}let{headByte:e,pos:t,totalPos:$}=this;throw RangeError(`Insufficient data in parsing ${Lr(e)} at ${$} (${t} in the current buffer)`)}finally{this.entered=!1}}decodeArrayStream(i){return this.decodeMultiAsync(i,!0)}decodeStream(i){return this.decodeMultiAsync(i,!1)}async*decodeMultiAsync(i,r){if(this.entered){yield*this.clone().decodeMultiAsync(i,r);return}try{this.entered=!0;let n=r,e=-1;for await(let t of i){if(r&&e===0)throw this.createExtraByteError(this.totalPos);if(this.appendBuffer(t),n)e=this.readArraySize(),n=!1,this.complete();try{while(!0)if(yield this.doDecodeSync(),--e===0)break}catch($){if(!($ instanceof RangeError))throw $}this.totalPos+=this.pos}}finally{this.entered=!1}}doDecodeSync(){i:while(!0){let i=this.readHeadByte(),r;if(i>=224)r=i-256;else if(i<192)if(i<128)r=i;else if(i<144){let e=i-128;if(e!==0){this.pushMapState(e),this.complete();continue i}else r={}}else if(i<160){let e=i-144;if(e!==0){this.pushArrayState(e),this.complete();continue i}else r=[]}else{let e=i-160;r=this.decodeString(e,0)}else if(i===192)r=null;else if(i===194)r=!1;else if(i===195)r=!0;else if(i===202)r=this.readF32();else if(i===203)r=this.readF64();else if(i===204)r=this.readU8();else if(i===205)r=this.readU16();else if(i===206)r=this.readU32();else if(i===207)if(this.useBigInt64)r=this.readU64AsBigInt();else r=this.readU64();else if(i===208)r=this.readI8();else if(i===209)r=this.readI16();else if(i===210)r=this.readI32();else if(i===211)if(this.useBigInt64)r=this.readI64AsBigInt();else r=this.readI64();else if(i===217){let e=this.lookU8();r=this.decodeString(e,1)}else if(i===218){let e=this.lookU16();r=this.decodeString(e,2)}else if(i===219){let e=this.lookU32();r=this.decodeString(e,4)}else if(i===220){let e=this.readU16();if(e!==0){this.pushArrayState(e),this.complete();continue i}else r=[]}else if(i===221){let e=this.readU32();if(e!==0){this.pushArrayState(e),this.complete();continue i}else r=[]}else if(i===222){let e=this.readU16();if(e!==0){this.pushMapState(e),this.complete();continue i}else r={}}else if(i===223){let e=this.readU32();if(e!==0){this.pushMapState(e),this.complete();continue i}else r={}}else if(i===196){let e=this.lookU8();r=this.decodeBinary(e,1)}else if(i===197){let e=this.lookU16();r=this.decodeBinary(e,2)}else if(i===198){let e=this.lookU32();r=this.decodeBinary(e,4)}else if(i===212)r=this.decodeExtension(1,0);else if(i===213)r=this.decodeExtension(2,0);else if(i===214)r=this.decodeExtension(4,0);else if(i===215)r=this.decodeExtension(8,0);else if(i===216)r=this.decodeExtension(16,0);else if(i===199){let e=this.lookU8();r=this.decodeExtension(e,1)}else if(i===200){let e=this.lookU16();r=this.decodeExtension(e,2)}else if(i===201){let e=this.lookU32();r=this.decodeExtension(e,4)}else throw new ni(`Unrecognized type byte: ${Lr(i)}`);this.complete();let n=this.stack;while(n.length>0){let e=n.top();if(e.type===Nn)if(e.array[e.position]=r,e.position++,e.position===e.size)r=e.array,n.release(e);else continue i;else if(e.type===gr){if(r==="__proto__")throw new ni("The key __proto__ is not allowed");e.key=this.mapKeyConverter(r),e.type=se;continue i}else if(e.map[e.key]=r,e.readCount++,e.readCount===e.size)r=e.map,n.release(e);else{e.key=null,e.type=gr;continue i}}return r}}readHeadByte(){if(this.headByte===Ir)this.headByte=this.readU8();return this.headByte}complete(){this.headByte=Ir}readArraySize(){let i=this.readHeadByte();switch(i){case 220:return this.readU16();case 221:return this.readU32();default:if(i<160)return i-144;else throw new ni(`Unrecognized array type byte: ${Lr(i)}`)}}pushMapState(i){if(i>this.maxMapLength)throw new ni(`Max length exceeded: map length (${i}) > maxMapLengthLength (${this.maxMapLength})`);this.stack.pushMapState(i)}pushArrayState(i){if(i>this.maxArrayLength)throw new ni(`Max length exceeded: array length (${i}) > maxArrayLength (${this.maxArrayLength})`);this.stack.pushArrayState(i)}decodeString(i,r){if(!this.rawStrings||this.stateIsMapKey())return this.decodeUtf8String(i,r);return this.decodeBinary(i,r)}decodeUtf8String(i,r){if(i>this.maxStrLength)throw new ni(`Max length exceeded: UTF-8 byte length (${i}) > maxStrLength (${this.maxStrLength})`);if(this.bytes.byteLength<this.pos+r+i)throw Le;let n=this.pos+r,e;if(this.stateIsMapKey()&&this.keyDecoder?.canBeCached(i))e=this.keyDecoder.decode(this.bytes,n,i);else e=De(this.bytes,n,i);return this.pos+=r+i,e}stateIsMapKey(){if(this.stack.length>0)return this.stack.top().type===gr;return!1}decodeBinary(i,r){if(i>this.maxBinLength)throw new ni(`Max length exceeded: bin length (${i}) > maxBinLength (${this.maxBinLength})`);if(!this.hasRemaining(i+r))throw Le;let n=this.pos+r,e=this.bytes.subarray(n,n+i);return this.pos+=r+i,e}decodeExtension(i,r){if(i>this.maxExtLength)throw new ni(`Max length exceeded: ext length (${i}) > maxExtLength (${this.maxExtLength})`);let n=this.view.getInt8(this.pos+r),e=this.decodeBinary(i,r+1);return this.extensionCodec.decode(e,n,this.context)}lookU8(){return this.view.getUint8(this.pos)}lookU16(){return this.view.getUint16(this.pos)}lookU32(){return this.view.getUint32(this.pos)}readU8(){let i=this.view.getUint8(this.pos);return this.pos++,i}readI8(){let i=this.view.getInt8(this.pos);return this.pos++,i}readU16(){let i=this.view.getUint16(this.pos);return this.pos+=2,i}readI16(){let i=this.view.getInt16(this.pos);return this.pos+=2,i}readU32(){let i=this.view.getUint32(this.pos);return this.pos+=4,i}readI32(){let i=this.view.getInt32(this.pos);return this.pos+=4,i}readU64(){let i=xe(this.view,this.pos);return this.pos+=8,i}readI64(){let i=xr(this.view,this.pos);return this.pos+=8,i}readU64AsBigInt(){let i=this.view.getBigUint64(this.pos);return this.pos+=8,i}readI64AsBigInt(){let i=this.view.getBigInt64(this.pos);return this.pos+=8,i}readF32(){let i=this.view.getFloat32(this.pos);return this.pos+=4,i}readF64(){let i=this.view.getFloat64(this.pos);return this.pos+=8,i}}function yn(i,r){return new sr(r).decode(i)}class di{listeners=new Map;addEventListener(i,r){let n=this.listeners.get(i);if(!n)n=new Set,this.listeners.set(i,n);return n.add(r),()=>{this.removeEventListener(i,r)}}removeEventListener(i,r){let n=this.listeners.get(i);if(n){if(n.delete(r),n.size===0)this.listeners.delete(i)}}emit(i,r){let n=this.listeners.get(i);if(n){let e=Array.from(n);for(let t of e)t(r)}}emitAll(i){let r=Array.from(this.listeners.keys());for(let n of r)this.emit(n,i)}}class Vi{getter;static eventName="update";emitter;constructor(i){this.getter=i;this.emitter=new di}get=()=>this.getter();async emit(){let i=await this.getter();queueMicrotask(()=>this.emitter.emit(Vi.eventName,i))}listen(i){return this.emitter.addEventListener(Vi.eventName,i),()=>{this.emitter.removeEventListener(Vi.eventName,i)}}}var Fi=64;var Be=32,Ri=8;var kr=32;var _e=30000,Se=512,G;((U)=>{U[U.Success=0]="Success";U[U.InvalidSignature=3]="InvalidSignature";U[U.ClockOutOfSync=4]="ClockOutOfSync";U[U.UserNotRegistered=5]="UserNotRegistered";U[U.ServerMisconfigured=6]="ServerMisconfigured";U[U.MissingBody=7]="MissingBody";U[U.ExtraBodyContent=8]="ExtraBodyContent";U[U.MissingParam=9]="MissingParam";U[U.InvalidParam=10]="InvalidParam";U[U.InvalidRequest=11]="InvalidRequest";U[U.InternalError=12]="InternalError";U[U.NotFound=13]="NotFound";U[U.InvalidMessage=14]="InvalidMessage";U[U.NoChange=15]="NoChange";U[U.DatabaseClosed=16]="DatabaseClosed";U[U.StorageError=17]="StorageError";U[U.DatabaseError=18]="DatabaseError";U[U.HashMismatch=19]="HashMismatch";U[U.DecryptionError=20]="DecryptionError";U[U.NotImplemented=21]="NotImplemented";U[U.MissingSeed=22]="MissingSeed";U[U.OutOfBounds=23]="OutOfBounds";U[U.HostError=24]="HostError";U[U.CommunicationError=25]="CommunicationError";U[U.VarLimitExceeded=26]="VarLimitExceeded";U[U.InvalidResponse=27]="InvalidResponse";U[U.ConnectionClosed=28]="ConnectionClosed"})(G||={});function u(i){return[i,0]}function l(i){return[void 0,i]}function y$(i){if(i<0)console.info("N",i),console.trace();if(typeof i!=="bigint")i=BigInt(i);if(i<0n)return l(10);let r=[];while(i>0n){let n=Number(i&0x7fn);if(i>>=7n,i>0n)r.push(n|128);else r.push(n)}if(r.length===0)return u(new Uint8Array([0]));if(r.length>8)return l(26);return u(new Uint8Array(r))}function P$(i,r=0){let n=0n,e=0,t=r;while(!0){if(t>=i.length)return l(14);let $=i[t++];if($===void 0)return l(14);if(n|=BigInt($&127)<<BigInt(e),($&128)===0){if(t-r>8)return l(26);return u({value:n>0x1fffffffffffffn?n:Number(n),bytesRead:t-r})}if(e+=7,e>=56)return l(26)}}class N{data;pos=0;constructor(i){this.data=i}static async fromResponse(i){let r=await i.arrayBuffer(),n=new Uint8Array(r);return new N(n)}readBigInt(){if(this.pos+8>this.data.length)return l(7);let i=new DataView(this.data.buffer,this.data.byteOffset+this.pos).getBigUint64(0,!1);return this.pos+=8,u(i)}readDate(){let[i,r]=this.readVarInt();if(r!==0)return l(r);return u(new Date(i))}readVarInt(){let[i,r]=P$(this.data,this.pos);if(r!==0)return l(r);this.pos+=i.bytesRead;let n=i.value;return u(typeof n==="bigint"?Number(n):n)}readVarString(){let[i,r]=this.readVarInt();if(r!==0)return l(r);let[n,e]=this.readBytes(i);if(e!==0)return l(e);let t=new TextDecoder().decode(n);return u(t)}readBytes(i){if(i<0)return l(10);if(this.pos+i>this.data.length)return l(23);let r=this.data.slice(this.pos,this.pos+i);return this.pos+=i,u(r)}readVarBytes(){let[i,r]=this.readVarInt();if(r!==0)return l(r);return this.readBytes(i)}readStruct(i){return i.decode(this)}readStructs(i){let r=[];while(!this.done()){let[n,e]=this.readStruct(i);if(e!==0)return l(e);r.push(n)}return u(r)}readBytesSeq(i){let r=[];while(!this.done()){let[n,e]=this.readBytes(i);if(e!==0)return l(e);r.push(n)}return u(r)}done(){return this.pos>=this.data.length}consumed(){return this.pos}}class O{parts=[];writeBigInt(i){let r=new Uint8Array(8);new DataView(r.buffer).setBigUint64(0,i,!1),this.parts.push(r)}writeDate(i){let r=i.getTime();return this.writeVarInt(r)}writeVarInt(i){let[r,n]=y$(i);if(n!==0)return n;return this.parts.push(r),0}writeVarString(i){let r=new TextEncoder().encode(i),n=this.writeVarInt(r.length);if(n!==0)return n;return this.writeBytes(r),0}prependBytes(i){this.parts.unshift(i)}writeBytes(i){this.parts.push(i)}writeVarBytes(i){let r=this.writeVarInt(i.length);if(r!==0)return r;return this.writeBytes(i),0}writeStruct(i,r){return i.encode(this,r)}writeStructs(i,r){for(let n of r){let e=this.writeStruct(i,n);if(e!==0)return e}return 0}writeBytesSeq(i){for(let r of i)this.writeBytes(r)}result(){let i=this.parts.reduce((e,t)=>e+t.length,0),r=new Uint8Array(i),n=0;for(let e of this.parts)r.set(e,n),n+=e.length;return r}*scan(){for(let i of this.parts)yield i}}async function Pn(i,r){let n=new O,e=n.writeDate(r);if(e!==0)return l(e);let t=n.result(),$=await i.sign(t);return u({pubKey:i.publicKey,sig:$,timestamp:r})}async function Ni(i,r,n){let e=n.now().getTime(),t=i.timestamp.getTime();if(Math.abs(e-t)>_e)return 4;let f=new O;f.writeDate(i.timestamp);let Z=f.result();if(!await r.checkSigEd25519(i.sig,Z,i.pubKey))return 3;return 0}var _={encode(i,r){let n=i.writeVarBytes(r.id);if(n!==0)return n;let e=i.writeDate(r.ts);if(e!==0)return e;return 0},decode(i){let[r,n]=i.readVarBytes();if(n!==0)return l(n);let[e,t]=i.readDate();if(t!==0)return l(t);return u({id:r,ts:e})}};function rr(i){let r=new O,n=r.writeStruct(_,i);if(n!==0)return l(n);let e=r.result();return u(e)}async function q$(i){return rr({id:i,ts:new Date(0)})}var li={encode(i,r){let n=i.writeVarBytes(r.eid);if(n!==0)return n;let e=i.writeVarInt(r.off);if(e!==0)return e;let t=i.writeVarInt(r.ctr);if(t!==0)return t;let $=i.writeVarInt(r.len);if($!==0)return $;if(r.hsh)i.writeBytes(r.hsh);return 0},decode(i){let[r,n]=i.readVarBytes();if(n!==0)return l(n);let e=new N(r),[,t]=_.decode(e);if(t!==0)return l(t);let[$,f]=i.readVarInt();if(f!==0)return l(f);let[Z,J]=i.readVarInt();if(J!==0)return l(J);let[h,Q]=i.readVarInt();if(Q!==0)return l(Q);let w;if(h>0){let[V,Y]=i.readBytes(kr);if(Y!==0)return l(Y);w=V}return u({eid:r,off:$,ctr:Z,len:h,hsh:w})}};function fi(i){return Array.from(i).map((n)=>n.toString(16).padStart(2,"0")).join("")}function Oi(i){if(i.length%2!==0)throw Error("Invalid hex string");let r=new Uint8Array(i.length/2);for(let n=0;n<i.length;n+=2)r[n/2]=Number.parseInt(i.substr(n,2),16);return r}function b(i,r){if(i===r)return!0;if(i.byteLength!==r.byteLength)return!1;return i.every((n,e)=>n===r[e])}var d;if(typeof Uint8Array.prototype.toBase64==="function")d=(i)=>i.toBase64();else d=(i)=>btoa(String.fromCharCode(...i));var v;if(typeof Uint8Array.fromBase64==="function")v=(i)=>Uint8Array.fromBase64(i);else v=(i)=>Uint8Array.from(atob(i),(r)=>r.charCodeAt(0));function qn(i){return d(i).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function Cn(i){let r=i.length%4===0?"":"=".repeat(4-i.length%4),n=i.replace(/-/g,"+").replace(/_/g,"/")+r;return v(n)}function zr(i,r){let n=new Uint8Array(i.length+r.length);return n.set(i,0),n.set(r,i.length),n}function Ee(i,r,n){return n.checkSigEd25519(i.sig,i.headCph,r)}async function ve(i,r,n,e){let t;if(i.bod&&i.len>0)t=await n.blake3(i.bod);let $=new O,f=li.encode($,{...i,hsh:t});if(f!==0)return l(f);let Z=$.result(),J=await r.kdmFor(Z),h=e.deriveCipher(J,"encrypt"),Q=await h.encrypt(Z),w=i.bod?await h.encrypt(i.bod):new Uint8Array(0),V=await r.sign(Q);return u({sig:V,kdm:J,headCph:Q,bodyCph:w})}async function Mn(i,r,n,e,t){let $=new N(i),[f,Z]=li.decode($);if(Z!==0)return l(14);let J;try{J=r&&r.length>0?await n.decrypt(r):void 0}catch{return l(20)}let h=f.hsh&&J===void 0,Q=f.hsh===void 0&&J!==void 0;if(h||Q)return l(19);if(f.hsh&&J){let V=await e.blake3(J);if(!b(V,f.hsh))return l(19)}let w=t??await e.blake3(i);return u({msgHead:f,bod:J,headHash:w})}class Ii{now(){return new Date}}function be(i,r,n,e){let t=r.getTime()-i.getTime(),$=n.getTime()-e.getTime();return(t+$)/2}var Ur={encode(i,r){if(i.writeVarInt(r.quota),r.quota>0){if(r.usage===void 0)return 9;i.writeVarInt(r.usage)}return 0},decode(i){let[r,n]=i.readVarInt();if(n!==0)return l(n);let e;if(r>0){let[t,$]=i.readVarInt();if($!==0)return l($);e=t}return u({quota:r,usage:e})}};var Hn={encode(i,r){i.writeBytes(new Uint8Array([r.status]));let n=i.writeDate(r.timeRcvd);if(n!==0)return n;let e=i.writeDate(r.timeSent);if(e!==0)return e;let t=i.writeVarInt(r.subscription.term);if(t!==0)return t;let $=i.writeVarInt(r.subscription.elapsed);if($!==0)return $;let f=i.writeStruct(Ur,r.subscription.stat);if(f!==0)return f;let Z=i.writeStruct(Ur,r.subscription.dyn);if(Z!==0)return Z;return 0},decode(i){let[r,n]=i.readBytes(1);if(n!==0)return l(n);let e=r[0],[t,$]=i.readDate();if($!==0)return l($);let[f,Z]=i.readDate();if(Z!==0)return l(Z);let[J,h]=i.readVarInt();if(h!==0)return l(h);let[Q,w]=i.readVarInt();if(w!==0)return l(w);let[V,Y]=i.readStruct(Ur);if(Y!==0)return l(Y);let[X,c]=i.readStruct(Ur);if(c!==0)return l(c);return u({status:e,timeRcvd:t,timeSent:f,subscription:{term:J,elapsed:Q,stat:V,dyn:X}})}};var An={encode(i,r){let n=i.writeVarBytes(r.headCph);if(n!==0)return n;let e=i.writeVarInt(r.seq);if(e!==0)return e;return 0},decode(i){let[r,n]=i.readVarBytes();if(n!==0)return l(n);let[e,t]=i.readVarInt();if(t!==0)return l(t);return u({headCph:r,seq:e})}};var Zi={encode(i,r){i.writeBytes(r.pubKey),i.writeBytes(r.sig);let n=i.writeDate(r.timestamp);if(n!==0)return n;return 0},decode(i){let[r,n]=i.readBytes(Be);if(n!==0)return l(n);let[e,t]=i.readBytes(Fi);if(t!==0)return l(t);let[$,f]=i.readDate();if(f!==0)return l(f);return u({pubKey:r,sig:e,timestamp:$})}};var it={async encodeReq(i,r,n,e,t){let $=t.writeStruct(Zi,n);if($!==0)return $;for(let f of e)t.writeVarInt(f);return 0},async handleReq(i,r,n){let{clock:e,crypto:t,storage:$}=i,[f,Z]=r.readStruct(Zi);if(Z!==0)return Z;let J=await Ni(f,t,e);if(J!==0)return J;let{pubKey:h}=f,[Q,w]=await $.hasUser(h);if(w!==0)return w;if(!Q)return 5;let[V,Y]=r.readVarInt();if(Y!==0)return Y;if(!r.done())return 8;let[X,c]=await $.listHeads(h,V);if(c!==0)return c;return n.writeStructs(An,X)},decodeResp(i){return i.readStructs(An)}};var Tn={encode(i,r){i.writeVarInt(r.seq);let n=i.writeVarBytes(r.bodyCph);if(n!==0)return n;return 0},decode(i){let[r,n]=i.readVarInt();if(n!==0)return l(n);let[e,t]=i.readVarBytes();if(t!==0)return l(t);return u({seq:r,bodyCph:e})}};var rt={async encodeReq(i,r,n,e,t){let $=t.writeStruct(Zi,n);if($!==0)return $;for(let f of e){let Z=t.writeVarInt(f);if(Z!==0)return Z}return 0},async handleReq(i,r,n){let{clock:e,crypto:t,storage:$}=i,[f,Z]=r.readStruct(Zi);if(Z!==0)return Z;let J=await Ni(f,t,e);if(J!==0)return J;let{pubKey:h}=f,[Q,w]=await $.hasUser(h);if(w!==0)return w;if(!Q)return 5;let V=[];while(!r.done()){let[c,W]=r.readVarInt();if(W!==0)return W;V.push(c)}console.info(`PULL: ${V.length} bags`);let[Y,X]=await $.getBodies(h,V);if(X!==0)return X;if(!Y)return 17;for(let{seq:c,bodyCph:W}of Y){let z={seq:c,bodyCph:W},g=n.writeStruct(Tn,z);if(g!==0)return g}return 0},decodeResp(i){return i.readStructs(Tn)}};var Dn={encode(i,r){i.writeBytes(r.sig),i.writeBytes(r.kdm);let n=i.writeVarBytes(r.headCph);if(n!==0)return n;let e=i.writeVarBytes(r.bodyCph);if(e!==0)return e;return 0},decode(i){let[r,n]=i.readBytes(Fi);if(n!==0)return l(n);let[e,t]=i.readBytes(Ri);if(t!==0)return l(t);let[$,f]=i.readVarBytes();if(f!==0)return l(f);let[Z,J]=i.readVarBytes();if(J!==0)return l(J);return u({sig:r,kdm:e,headCph:$,bodyCph:Z})}};var Br={encode(i,r){let n=i.writeVarInt(r.seq);if(n!==0)return n;let e=i.writeVarBytes(r.headCph);if(e!==0)return e;let t=r.bodyCph?r.bodyCph.length:0,$=i.writeVarInt(t);if($!==0)return $;if(t>0){if(!r.bodyCph)return 10;i.writeBytes(r.bodyCph)}return 0},decode(i){let[r,n]=i.readVarInt();if(n!==0)return l(n);let[e,t]=i.readVarBytes();if(t!==0)return l(t);let[$,f]=i.readVarInt();if(f!==0)return l(f);let Z;if($>0){let[J,h]=i.readBytes($);if(h!==0)return l(h);Z=J}return u({seq:r,headCph:e,bodyCph:Z})}};var _r={encode(i,r){i.writeBytes(r.sig),i.writeBytes(r.kdm);let n=i.writeVarBytes(r.headCph);if(n!==0)return n;return 0},decode(i){let[r,n]=i.readBytes(Fi);if(n!==0)return l(n);let[e,t]=i.readBytes(Ri);if(t!==0)return l(t);let[$,f]=i.readVarBytes();if(f!==0)return l(f);return u({sig:r,kdm:e,headCph:$})}};var Sr={encode(i,r){if(i.writeVarInt(r.idx),i.writeBytes(new Uint8Array([r.status])),r.status===0)i.writeVarInt(r.seq);return 0},decode(i){let[r,n]=i.readVarInt();if(n!==0)return l(n);let[e,t]=i.readBytes(1);if(t!==0)return l(t);let $=e[0];if($!==0)return u({idx:r,status:$});let[f,Z]=i.readVarInt();if(Z!==0)return l(Z);return u({idx:r,status:$,seq:f})}};var nt={async encodeReq(i,r,n,e,t){let $=t.writeStruct(Zi,n);if($!==0)return $;let f=t.writeStructs(Dn,e);if(f!==0)return f;return 0},async handleReq(i,r,n){let{clock:e,crypto:t,storage:$,notifier:f}=i,[Z,J]=r.readStruct(Zi);if(J!==0)return J;let h=await Ni(Z,t,e);if(h!==0)return h;let{pubKey:Q}=Z,[w,V]=await $.hasUser(Q);if(V!==0)return V;if(!w)return 5;let[Y,X]=r.readStructs(Dn);if(X!==0)return X;console.info(`PUSH: ${Y.length} bags`);let c=[],W=[];for(let I=0;I<Y.length;I++){let m=Y[I];if(!await Ee(m,Q,t)){let C={idx:I,status:3},q=n.writeStruct(Sr,C);if(q!==0)return q;continue}c.push(I),W.push(m)}let[z,g]=await $.setBags(Q,W);if(g!==0)return g;if(!z||z.length!==W.length)return 17;let K=[];for(let I=0;I<W.length;I++){let m=W[I],R=c[I],C=z[I],q=new O,y=q.writeStruct(_r,m);if(y!==0)return y;let H=q.result(),U={seq:C,headCph:H};if(Y.length===1&&m.bodyCph.length<=Se)U.bodyCph=m.bodyCph;K.push(U);let D={idx:R,status:0,seq:C},x=n.writeStruct(Sr,D);if(x!==0)return x}if(K.length>0){let I=new O,m=I.writeStructs(Br,K);if(m!==0)return m;let R=I.result();await Promise.resolve(f.push(Q,R))}return 0},decodeResp(i){return i.readStructs(Sr)}};var et={async encodeReq(i,r,n,e,t){return t.writeStruct(Zi,n)},async handleReq(i,r,n){let{clock:e,crypto:t,storage:$}=i,[f,Z]=r.readStruct(Zi);if(Z!==0)return Z;let J=await Ni(f,t,e);if(J!==0)return J;let{pubKey:h}=f;if(!r.done())return 8;let[Q,w]=await $.addUser(h);if(w!==0)return w;return 0},decodeResp(i){return u(void 0)}};class pn{url;websocket;constructor(i){this.url=i}connected(){return this.websocket!==void 0&&this.websocket.readyState===WebSocket.OPEN}async connect(i,r,n=()=>{},e=()=>{}){let{url:t}=this;if(this.websocket)this.websocket.close(),this.websocket=void 0;let $=new O;$.writeStruct(Zi,i);let f=$.result(),Z=fi(f);return t.searchParams.set("t",Z),this.websocket=new WebSocket(t),this.websocket.binaryType="arraybuffer",this.websocket.onopen=()=>{console.log("CONNECTED"),e()},this.websocket.onclose=()=>{console.log("DISCONNECTED"),this.websocket=void 0,n()},this.websocket.onmessage=(J)=>{let h=new Uint8Array(J.data);r(h)},this.websocket.onerror=(J)=>{console.log(`ERROR: ${JSON.stringify(J)}`),this.websocket=void 0,n()},Promise.resolve(0)}disconnect(){this.websocket?.close(),this.websocket=void 0}}var S={user:{path:"/user",endpoint:et,name:0},push:{path:"/push",endpoint:nt,name:2},peek:{path:"/peek",endpoint:it,name:1},pull:{path:"/pull",endpoint:rt,name:3}},C$={0:S.user,2:S.push,1:S.peek,3:S.pull},_l={[S.user.path]:S.user,[S.push.path]:S.push,[S.peek.path]:S.peek,[S.pull.path]:S.pull};class xn{url;listener;constructor(i){this.url=i;this.listener=new pn(i)}async call(i,r){let{path:n}=C$[i],e=new URL(n,this.url);try{return await M$(e,r)}catch{return l(25)}}}var Er=(i)=>{return new xn(i.handle)};async function M$(i,r){let n=await fetch(i,{method:"POST",body:r.result().slice()});if(!n.ok)return l(24);let e=await N.fromResponse(n);return u(e)}class vr{enclave;crypto;host;clock;transport;updateHostMeta;constructor(i,r,n,e,t,$){this.enclave=i;this.crypto=r;this.host=n;this.clock=e;this.transport=t;this.updateHostMeta=$}async call(i,r){let{clock:n,transport:e}=this,{endpoint:t,name:$}=i,f=await this.identity(),Z=n.now(),[J,h]=await Pn(f,Z);if(h!==0)return l(h);let Q=new O,w=await t.encodeReq(this,f,J,r,Q);if(w!==0)return l(w);let V=n.now(),[Y,X]=await e.call($,Q),c=n.now();if(X!==0)return l(X);let[W,z]=Y.readStruct(Hn);if(z!==0)return l(z);if(W.status!==0)return l(W.status);let K={clockOffset:be(V,W.timeRcvd,W.timeSent,c),subscription:W.subscription},I=await this.updateHostMeta(K);if(I!==0)return l(I);return t.decodeResp(Y)}identity=()=>{let{host:i,enclave:r}=this;return r.deriveIdentity(i.label,i.idx??0)};seal=async(i)=>{let{crypto:r,enclave:n}=this,e=await this.identity();return ve(i,e,r,n)};register=()=>this.call(S.user,[]);peek=(i)=>this.call(S.peek,[i]);push=(i)=>this.call(S.push,i);pull=(i)=>this.call(S.pull,i);listen=async(i,r,n)=>{let{clock:e,transport:t}=this,{listener:$}=t,f=await this.identity(),Z=e.now(),[J,h]=await Pn(f,Z);if(h!==0)return h;return await $.connect(J,i,r,n)};isConnected(){let i=this.transport?.listener;if(i&&typeof i.connected==="function")return i.connected();return!0}closeListener(){this.transport?.listener?.disconnect()}}var jn={encode(i,r){let n=i.writeVarString(r.lbl);if(n!==0)return n;let e=i.writeVarInt(r.idx);if(e!==0)return e;let t=i.writeVarInt(r.num);if(t!==0)return t;return i.writeBytes(r.hsh),i.writeBytes(r.sig),0},decode(i){let[r,n]=i.readVarString();if(n!==0)return l(n);let[e,t]=i.readVarInt();if(t!==0)return l(t);let[$,f]=i.readVarInt();if(f!==0)return l(f);let[Z,J]=i.readBytes(kr);if(J!==0)return l(J);let[h,Q]=i.readBytes(Fi);if(Q!==0)return l(Q);return u({lbl:r,idx:e,num:$,hsh:Z,sig:h})}};var Ln={encode(i,r){let n=i.writeStruct(jn,r.head);if(n!==0)return n;let e=i.writeVarBytes(r.indexEnc);if(e!==0)return e;let t=i.writeVarBytes(r.bodyEnc);if(t!==0)return t;return 0},decode(i){let[r,n]=i.readStruct(jn);if(n!==0)return l(n);let[e,t]=i.readVarBytes();if(t!==0)return l(t);let[$,f]=i.readVarBytes();if(f!==0)return l(f);return u({head:r,indexEnc:e,bodyEnc:$})}};var sn={encode(i,r){i.writeBytes(r.kdm);let n=i.writeVarBytes(r.headCph);if(n!==0)return n;let e=i.writeVarInt(r.lenBody);if(e!==0)return e;if(r.lenBody>0&&r.offBody!==void 0){let t=i.writeVarInt(r.offBody);if(t!==0)return t}return 0},decode(i){let[r,n]=i.readBytes(Ri);if(n!==0)return l(n);let[e,t]=i.readVarBytes();if(t!==0)return l(t);let[$,f]=i.readVarInt();if(f!==0)return l(f);let Z;if($>0){let[J,h]=i.readVarInt();if(h!==0)return l(h);Z=J}return u({kdm:r,headCph:e,lenBody:$,offBody:Z})}};async function tt(i,r,n,e,t){let $=await t.deriveIdentity(i,r),f=new O,Z=new O,J=0,h=0;for(let z of n){let g=new O,K=g.writeStruct(li,z.head);if(K!==0)return l(K);let I=g.result(),m=await $.kdmFor(I),R=t.deriveCipher(m,"encrypt"),C=await R.encrypt(I),q=z.body?await R.encrypt(z.body):new Uint8Array(0),y=z.head.len>0&&z.head.hsh!==void 0?q.length:0,H={kdm:m,headCph:C,lenBody:y,offBody:y>0?h:void 0},U=f.writeStruct(sn,H);if(U!==0)return l(U);if(z.body)Z.writeBytes(q),h+=q.length;J++}let Q=Z.result(),w=f.result(),V=await e.blake3(w),Y=await $.sign(V),X={lbl:i,idx:r,num:J,hsh:V,sig:Y},c=new O;c.writeStruct(Ln,{head:X,indexEnc:w,bodyEnc:Q});let W=c.result();return u(W)}async function $t(i,r,n){let[e,t]=Ln.decode(new N(i));if(t!==0)return l(t);let{head:$,indexEnc:f,bodyEnc:Z}=e,J=await n.deriveIdentity($.lbl,$.idx);if(!await r.checkSigEd25519($.sig,$.hsh,J.publicKey))return l(3);let Q=await r.blake3(f);if(!b(Q,$.hsh))return l(19);let w=new N(f),V=[];for(let X=0;X<$.num;X++){let[c,W]=w.readStruct(sn);if(W!==0)return l(W);V.push(c)}if(V.length!==$.num)return l(14);let Y=[];for(let X of V){let c=n.deriveCipher(X.kdm,"decrypt"),W;try{W=await c.decrypt(X.headCph)}catch{return l(20)}let[z,g]=li.decode(new N(W));if(g!==0)return l(g);let K;if(X.lenBody>0&&X.offBody!==void 0){if(z.hsh===void 0)return l(14);let I=Z.slice(X.offBody,X.offBody+X.lenBody);try{K=await c.decrypt(I)}catch{return l(20)}let m=await r.blake3(K);if(!b(m,z.hsh))return l(19)}Y.push({head:z,body:K})}return u(Y)}async function ft({now:i,bod:r,crypto:n}){let e=await n.genRandomBytes(8),t=new O,$=t.writeStruct(_,{id:e,ts:i});if($!==0)return l($);let f=t.result();return br({now:i,eid:f,ctr:0,bod:r,crypto:n})}async function br({now:i,eid:r,ctr:n,bod:e,crypto:t}){let $=new N(r),[f,Z]=_.decode($);if(Z!==0)return l(Z);let J=i.getTime()-f.ts.getTime(),h,Q=e?.length??0;if(e&&Q>0)h=await t.blake3(e);return u({eid:r,off:J,ctr:n,len:Q,hsh:h})}function Zt(i,r){let n=i.length<r.length?i.length:r.length;for(let e=0;e<n;e++)if(i[e]!==r[e])return i[e]-r[e];return i.length-r.length}async function nr(i,r){let n=Array.from(i);n.sort(Zt);let e=0;for(let f of n)e+=f.length;let t=new Uint8Array(e),$=0;for(let f of n)t.set(f,$),$+=f.length;return r.blake3(t)}function lt(i){let r=new O,n=r.writeVarBytes(i.eid);if(n!==0)return l(n);let e=r.writeDate(i.updatedAt);if(e!==0)return l(e);let t=r.writeVarInt(i.ctr);if(t!==0)return l(t);return u(r.result())}async function Kr(i,r){let n=[];for(let e of i){let[t,$]=lt(e);if($!==0||!t)return l($);n.push(t)}return u(await nr(n,r))}var pJ=Symbol("MasterSeed"),xJ=Symbol("SealedMasterKey"),ui=32,kn=24+ui+16;function ii(i){if(i.byteLength!==ui)return l(10);return u(i)}function gi(i){if(i.byteLength!==kn)return l(10);return u(i)}var LJ=Symbol("EntityID");function Jt(i){return"type"in i}var sJ=Symbol("DerivationSeed"),kJ=Symbol("PublicKey"),BJ=Symbol("PrivateKey"),_J=Symbol("HostSpecificKeyPair"),SJ=Symbol("Hash");function H$(i){if(!i)return!1;if(typeof i!=="object")return!1;if("body"in i===!1)return!1;if("type"in i===!1)return!1;return!0}function A$(i){if(!i.bod||i.bod.length===0){let e={off:i.off,ctr:i.ctr,eid:i.eid};return u(e)}let r=yn(i.bod);if(H$(r)===!1)return console.warn("msg body invalid",r),l(14);let n={off:i.off,ctr:i.ctr,eid:i.eid,gid:r.gid,pid:r.pid,tags:r.tags,type:r.type,body:r.body};return u(n)}class Gr{applier;emitter=new di;clearer;onDirtyEids;cacheDriven;peerIngest;constructor(i,r,n,e){this.applier=i;this.clearer=r,this.onDirtyEids=n,this.cacheDriven=e?.cacheDriven??!1,this.peerIngest=e?.peerIngest}apply=async(i)=>{let r=[],n=[];for(let Z of i){let[J,h]=A$(Z);if(n.push(h),h!==0)continue;r.push(J)}let{stats:e,types:t,eids:$}=await this.applier(r),f=[];for(let Z=0;Z<i.length;Z++){let J=n[Z],h=e[Z];if(J!==0){f.push(J);continue}if(h!==0){f.push(h);continue}f.push(0)}if(!this.cacheDriven)for(let Z of t)this.emitter.emit(Z,null);if($.length>0)this.onDirtyEids?.($);return f};clear=async()=>{let i=await this.clearer();if(i!==0)return i;return this.emitter.emitAll(null),i};notify=(i)=>{for(let r of i)this.emitter.emit(r,null)};refresh=async(i)=>{if(this.peerIngest){await this.peerIngest(i);return}};on=(i,r)=>{this.emitter.addEventListener(i,r)};off=(i,r)=>{this.emitter.removeEventListener(i,r)}}var Bn={apply:async function(i){return i.map(()=>0)},clear:async function(){return 0},notify:function(i){},refresh:async function(i){},on:function(i,r){},off:function(i,r){}};var L="entities",rn="entity_type_created_at",Sn="entity_type_updated_at",En="entity_type_group_id",vn="entity_type_parent_id",er="entity_tags",ht="db",Qt=13;function T$(i){return"typ"in i}function D$(i){let r={bod:i.body,crd:i.createdAt,...i.ctr!==0?{ctr:i.ctr}:{},eid:d(i.eid),gid:i.gid,pid:i.pid?d(i.pid):void 0,tgs:i.tags,typ:i.type,upd:i.updatedAt};if(r.gid===void 0)delete r.gid;if(r.pid===void 0)delete r.pid;if(r.tgs===void 0)delete r.tgs;if(r.ctr===void 0)delete r.ctr;return r}function p$(i){if(!T(i))return{eid:d(i.eid),upd:i.updatedAt,...i.ctr!==0?{ctr:i.ctr}:{}};return D$(i)}function tr(i){return{body:i.bod,createdAt:i.crd,updatedAt:i.upd,ctr:i.ctr??0,type:i.typ,eid:v(i.eid),gid:i.gid,pid:i.pid?v(i.pid):void 0,...i.tgs!==void 0?{tags:i.tgs}:{}}}function _n(i){if(T$(i))return tr(i);return{eid:v(i.eid),updatedAt:i.upd,ctr:i.ctr??0}}class bn{db;opening;async init(){await this.ensureDb()}async ensureDb(){if(this.db)return this.db;if(this.opening)return this.opening;return this.opening=j$().then((i)=>{return i.onversionchange=()=>{if(i.close(),this.db===i)this.db=void 0},this.db=i,this.opening=void 0,i},(i)=>{throw this.opening=void 0,i}),this.opening}apply=async(i)=>{let r=new Set,n=[],e;try{e=await this.ensureDb()}catch{return{stats:i.map(()=>16),types:r,eids:n}}let t=e.transaction(L,"readwrite"),$=t.objectStore(L);return new Promise((f)=>{let Z=Array(i.length).fill(0);if(i.length<1){f({stats:[],types:r,eids:n});return}t.oncomplete=()=>{f({stats:Z,types:r,eids:n})},t.onerror=()=>{for(let h=0;h<Z.length;h++)if(Z[h]===void 0)Z[h]=18;f({stats:Z,types:r,eids:n})};let J=new Map;for(let h=0;h<i.length;h++){let Q=i[h],w=d(Q.eid),V={op:Q,index:h},Y=J.get(w);if(Y)Y.push(V);else J.set(w,[V])}for(let[h,Q]of J){if(Q.length<1)continue;let w=$.get(h);w.onsuccess=()=>{let V=w.result,Y=V?_n(V):void 0,X=!1;for(let{op:c,index:W}of Q){let[z,g]=$r(Y,c);if(g!==0){Z[W]=g;continue}if(z===void 0){Z[W]=12;continue}X=!0;for(let K of fr(Y,z))r.add(K);Y=z}if(X)n.push(Q[0].op.eid);if(Y){let c=$.put(p$(Y));c.onerror=(W)=>{W.preventDefault();for(let{index:z}of Q)Z[z]=18}}},w.onerror=()=>{for(let{index:V}of Q)Z[V]=18}}})};async clear(){let i;try{i=await this.ensureDb()}catch{return 16}let r=i.transaction(L,"readwrite"),n=r.objectStore(L);return new Promise((e)=>{r.oncomplete=()=>e(0),r.onerror=()=>e(18),n.clear()})}async getRow(i){let r;try{r=await this.ensureDb()}catch{return l(16)}let n=d(i),t=r.transaction(L,"readonly").objectStore(L);return new Promise(($)=>{let f=t.get(n);f.onsuccess=()=>{let Z=f.result;if(!Z)$(u(void 0));else $(u(_n(Z)))},f.onerror=()=>$(l(18))})}async getEnt(i){let[r,n]=await this.getRow(i);if(n!==0)return l(n);if(r===void 0||!T(r))return u(void 0);return u(r)}async getAllOfTypeUpdatedBetween(i,r,n){let e;try{e=await this.ensureDb()}catch{return l(16)}let $=e.transaction(L,"readonly").objectStore(L).index(Sn);return new Promise((f)=>{let Z=$.getAll(IDBKeyRange.bound([i,r],[i,n]));Z.onsuccess=()=>{let J=Z.result;f(u(J.map(tr)))},Z.onerror=()=>f(l(18))})}async getGroupMembers(i,r){let n;try{n=await this.ensureDb()}catch{return l(16)}let t=n.transaction(L,"readonly").objectStore(L).index(En);return new Promise(($)=>{let f=t.getAll(IDBKeyRange.only([i,r]));f.onsuccess=()=>{let Z=f.result;$(u(Z.map(tr)))},f.onerror=()=>$(l(18))})}async getAllOfType(i){let r;try{r=await this.ensureDb()}catch{return l(16)}let e=r.transaction(L,"readonly").objectStore(L).index(rn);return new Promise((t)=>{let $=e.getAll(IDBKeyRange.bound([i],[i,[]]));$.onsuccess=()=>{let f=$.result;t(u(f.map(tr)))},$.onerror=()=>t(l(18))})}async getByTag(i,r){let n;try{n=await this.ensureDb()}catch{return l(16)}let t=n.transaction(L,"readonly").objectStore(L).index(er);return new Promise(($)=>{let f=t.getAll(IDBKeyRange.only(r));f.onsuccess=()=>{let J=f.result.filter((h)=>h.typ===i).map(tr);$(u(J))},f.onerror=()=>$(l(18))})}async getAllEntities(i){if("pid"in i){let r;try{r=await this.ensureDb()}catch{return l(16)}let n=d(i.pid),t=r.transaction(L,"readonly").objectStore(L).index(vn);return new Promise(($)=>{let f=t.getAll(IDBKeyRange.only([i.type,n]));f.onsuccess=()=>{let J=f.result.map(tr);$(u(J))},f.onerror=()=>$(l(18))})}else if("gid"in i)return await this.getGroupMembers(i.type,i.gid);else if("tag"in i)return await this.getByTag(i.type,i.tag);else if("updatedBetween"in i)return await this.getAllOfTypeUpdatedBetween(i.type,i.updatedBetween.start,i.updatedBetween.end);return await this.getAllOfType(i.type)}async getEntities(i){let[r,n]=await this.getAllEntities(i);if(n!==0)return l(n);return u(r)}async countEntities({type:i}){let r;try{r=await this.ensureDb()}catch{return l(16)}let e=r.transaction(L,"readonly").objectStore(L).index(rn);return new Promise((t)=>{let $=IDBKeyRange.bound([i],[i,[]]),f=e.count($);f.onsuccess=()=>t(u(f.result)),f.onerror=()=>t(l(18))})}async checksum(i){let r;try{r=await this.ensureDb()}catch{return l(16)}let e=r.transaction(L,"readonly").objectStore(L),t=[];return new Promise(($)=>{let f=e.openCursor();f.onsuccess=()=>{let Z=f.result;if(Z){let J=Z.value;t.push(or(_n(J))),Z.continue()}else Kr(t,i).then($)},f.onerror=()=>$(l(18))})}}function x$(i,r){if(!i.objectStoreNames.contains(L))i.createObjectStore(L,{keyPath:"eid",autoIncrement:!1});let n=r.objectStore(L);if(!n.indexNames.contains(rn))n.createIndex(rn,["typ","crd"],{unique:!1});if(!n.indexNames.contains(Sn))n.createIndex(Sn,["typ","upd"],{unique:!1});if(!n.indexNames.contains(En))n.createIndex(En,["typ","gid"],{unique:!1});if(!n.indexNames.contains(vn))n.createIndex(vn,["typ","pid"],{unique:!1});if(n.indexNames.contains(er)){if(n.index(er).keyPath!=="tgs")n.deleteIndex(er)}if(!n.indexNames.contains(er))n.createIndex(er,"tgs",{unique:!1,multiEntry:!0})}function j$(){return new Promise((i,r)=>{let n=indexedDB.open(ht,Qt);n.onupgradeneeded=()=>{let{result:e,transaction:t}=n;if(!t){r(Error("Transaction is null during EntDB upgrade"));return}try{x$(e,t)}catch($){r($ instanceof Error?$:Error(String($)))}},n.onblocked=()=>{console.warn(`[DIPLOMATIC] EntDB IDB upgrade blocked (${ht} → v${Qt}); waiting for other connections to close`)},n.onsuccess=()=>i(n.result),n.onerror=()=>r(n.error??Error("EntDB IndexedDB open failed"))})}async function wt(){let i=new bn;return await i.init(),i}class nn{ents=new Map;useIndex;byType=new Map;byTypePid=new Map;byTypeGid=new Map;byTypeTag=new Map;constructor(i=[],r){this.useIndex=r?.indexes!==!1;for(let n of i)this.put(n)}put(i){let r=d(i.eid),n=this.ents.get(r);if(n!==void 0&&T(n))this.unindex(r,n);if(this.ents.set(r,i),T(i))this.index(r,i)}del(i){let r=this.ents.get(i);if(r===void 0)return;if(T(r))this.unindex(i,r);this.ents.delete(i)}index(i,r){if(!this.useIndex)return;let n=this.byType.get(r.type);if(!n)n=new Map,this.byType.set(r.type,n);if(n.set(i,r),r.pid){let e=d(r.pid),t=this.byTypePid.get(r.type);if(!t)t=new Map,this.byTypePid.set(r.type,t);let $=t.get(e);if(!$)$=new Map,t.set(e,$);$.set(i,r)}if(typeof r.gid==="string"){let e=this.byTypeGid.get(r.type);if(!e)e=new Map,this.byTypeGid.set(r.type,e);let t=e.get(r.gid);if(!t)t=new Map,e.set(r.gid,t);t.set(i,r)}if(r.tags){let e=this.byTypeTag.get(r.type);if(!e)e=new Map,this.byTypeTag.set(r.type,e);for(let t of r.tags){let $=e.get(t);if(!$)$=new Map,e.set(t,$);$.set(i,r)}}}unindex(i,r){if(!this.useIndex)return;let n=this.byType.get(r.type);if(n){if(n.delete(i),n.size===0)this.byType.delete(r.type)}if(r.pid){let e=d(r.pid),t=this.byTypePid.get(r.type),$=t?.get(e);if($){if($.delete(i),$.size===0)t?.delete(e)}if(t&&t.size===0)this.byTypePid.delete(r.type)}if(typeof r.gid==="string"){let e=this.byTypeGid.get(r.type),t=e?.get(r.gid);if(t){if(t.delete(i),t.size===0)e?.delete(r.gid)}if(e&&e.size===0)this.byTypeGid.delete(r.type)}if(r.tags){let e=this.byTypeTag.get(r.type);if(e){for(let t of r.tags){let $=e.get(t);if($){if($.delete(i),$.size===0)e.delete(t)}}if(e.size===0)this.byTypeTag.delete(r.type)}}}clearIndexes(){this.byType.clear(),this.byTypePid.clear(),this.byTypeGid.clear(),this.byTypeTag.clear()}bucketList(i){if(!i||i.size===0)return[];let r=[];for(let n of i.values())r.push(n);return r}async apply(i){let r=new Set,n=[],e=[];for(let t of i){let $=d(t.eid),f=this.ents.get($),[Z,J]=$r(f,t);if(J!==0){e.push(J);continue}if(Z===void 0){e.push(12);continue}for(let h of fr(f,Z))r.add(h);this.put(Z),n.push(t.eid),e.push(0)}return{stats:e,types:r,eids:n}}async clear(){return this.ents.clear(),this.clearIndexes(),0}async getRow(i){let r=d(i),n=this.ents.get(r);return u(n)}async getEnt(i){let[r,n]=await this.getRow(i);if(n!==0)return l(n);if(r===void 0||!T(r))return u(void 0);return u(r)}async getAllEntities({type:i,gid:r,pid:n,tag:e,updatedBetween:t}){if(this.useIndex){if(n!==void 0){let f=d(n);return u(this.bucketList(this.byTypePid.get(i)?.get(f)))}if(r!==void 0)return u(this.bucketList(this.byTypeGid.get(i)?.get(r)));if(e!==void 0)return u(this.bucketList(this.byTypeTag.get(i)?.get(e)));if(t!==void 0){let f=[],Z=this.byType.get(i);if(Z){for(let J of Z.values())if(J.updatedAt>=t.start&&J.updatedAt<=t.end)f.push(J)}return u(f)}return u(this.bucketList(this.byType.get(i)))}let $=[];if(n!==void 0){for(let f of this.ents.values())if(T(f)&&f.type===i&&f.pid&&b(f.pid,n))$.push(f)}else if(r!==void 0){for(let f of this.ents.values())if(T(f)&&f.type===i&&(typeof f.gid==="string"&&f.gid===r))$.push(f)}else if(e!==void 0){for(let f of this.ents.values())if(T(f)&&f.type===i&&f.tags&&f.tags.includes(e))$.push(f)}else if(t!==void 0){for(let f of this.ents.values())if(T(f)&&f.type===i&&f.updatedAt>=t.start&&f.updatedAt<=t.end)$.push(f)}else for(let f of this.ents.values())if(T(f)&&f.type===i)$.push(f);return u($)}async getEntities(i){let[r,n]=await this.getAllEntities(i);if(n!==0)return l(n);return u(r)}async countEntities({type:i}){if(this.useIndex)return u(this.byType.get(i)?.size??0);let r=0;for(let n of this.ents.values())if(T(n)&&n.type===i)r+=1;return u(r)}async checksum(i){let r=[];for(let n of this.ents.values())r.push(or(n));return Kr(r,i)}}async function ie(i){let r=await wt();if(i?.cache===!1)return r;return new mr(r,void 0,{indexes:i?.indexes})}class mr{mem;durable;warmed=new Set;listeners=new Set;chain=Promise.resolve();constructor(i,r,n){if(this.durable=i,this.mem=new nn(r??[],{indexes:n?.indexes}),r)for(let e of r)this.warmed.add(e.type)}subscribe(i){return this.listeners.add(i),()=>{this.listeners.delete(i)}}emit(i){if(i.size<1)return;for(let r of this.listeners)r(i)}run(i){let r=this.chain.then(i,i);return this.chain=r.then(()=>{return},()=>{return}),r}apply(i){return this.run(async()=>{await this.pullEids(i.map(($)=>$.eid));let r=S$(this.mem,i);this.emit(r.types);let n=await this.durable.apply(i),{changed:e,status:t}=await this.pullEids(i.map(($)=>$.eid));if(this.emit(e),t!==0)return{stats:i.map(()=>t),types:n.types,eids:n.eids};return n})}clear(){return this.run(async()=>{let i=await this.durable.clear();if(i!==0)return i;let r=this.mem.ents.size>0;return await this.mem.clear(),this.warmed.clear(),0})}ingestFromDurable(i){return this.run(async()=>{let{changed:r,status:n}=await this.pullEids(i);return this.emit(r),n})}async pullEids(i){let r=new Set,n=new Set;for(let e of i){let t=d(e);if(n.has(t))continue;n.add(t);let $=this.mem.ents.get(t),[f,Z]=await this.durable.getRow(e);if(Z!==0)return{changed:r,status:Z};if(f){if(this.mem.put(f),!$||!L$($,f)){if(T(f))r.add(f.type);if($!==void 0&&T($))r.add($.type)}}else if($!==void 0){if(this.mem.del(t),T($))r.add($.type)}}return{changed:r,status:0}}async warmType(i){if(this.warmed.has(i))return 0;let[r,n]=await this.durable.getEntities({type:i});if(n!==0)return n;if(r)for(let e of r){let t=d(e.eid),$=this.mem.ents.get(t);if(!$||_$(e,$))this.mem.put(e)}return this.warmed.add(i),0}async getRow(i){let r=d(i);if(this.mem.ents.has(r))return this.mem.getRow(i);return this.run(async()=>{if(this.mem.ents.has(r))return this.mem.getRow(i);let[n,e]=await this.durable.getRow(i);if(e!==0)return l(e);if(n)this.mem.put(n);return u(n)})}async getEnt(i){let[r,n]=await this.getRow(i);if(n!==0)return l(n);if(r===void 0||!T(r))return u(void 0);return u(r)}async getEntities(i){if(!this.warmed.has(i.type)){let r=await this.run(()=>this.warmType(i.type));if(r!==0)return l(r)}return this.mem.getEntities(i)}async countEntities({type:i}){if(!this.warmed.has(i)){let r=await this.run(()=>this.warmType(i));if(r!==0)return l(r)}return this.mem.countEntities({type:i})}async checksum(i){return this.durable.checksum(i)}}function L$(i,r){if(T(i)!==T(r))return!1;if(i.ctr!==r.ctr)return!1;if(i.updatedAt.getTime()!==r.updatedAt.getTime())return!1;if(!b(i.eid,r.eid))return!1;if(!T(i)||!T(r))return!0;if(i.createdAt.getTime()!==r.createdAt.getTime())return!1;if(i.type!==r.type)return!1;if(i.gid!==r.gid)return!1;if(!k$(i.pid,r.pid))return!1;if(!s$(i.tags,r.tags))return!1;return B$(i.body,r.body)}function s$(i,r){if(i===r)return!0;if(i===void 0||r===void 0)return!1;if(i.length!==r.length)return!1;for(let n=0;n<i.length;n++)if(i[n]!==r[n])return!1;return!0}function k$(i,r){if(i===void 0&&r===void 0)return!0;if(i===void 0||r===void 0)return!1;return b(i,r)}function B$(i,r){if(Object.is(i,r))return!0;if(i instanceof Uint8Array&&r instanceof Uint8Array)return b(i,r);if(i instanceof Date&&r instanceof Date)return i.getTime()===r.getTime();try{return b(Di(i),Di(r))}catch{return!1}}function _$(i,r){let n=i.updatedAt.getTime(),e=r.updatedAt.getTime();if(n!==e)return n>e;return i.ctr>r.ctr}function S$(i,r){let n=new Set,e=[];for(let t of r){let $=d(t.eid),f=i.ents.get($),[Z,J]=$r(f,t);if(J!==0){e.push(J);continue}if(Z===void 0){e.push(12);continue}for(let h of fr(f,Z))n.add(h);i.put(Z),e.push(0)}return{stats:e,types:n}}function en(i){if(i instanceof mr){let r=new Gr((n)=>i.apply(n),()=>i.clear(),void 0,{cacheDriven:!0,peerIngest:async(n)=>{await i.ingestFromDurable(n)}});return i.subscribe((n)=>r.notify(n)),r}return new Gr((r)=>i.apply(r),()=>i.clear())}function T(i){return"type"in i}function E$(i){return!T(i)}function ut(i){if(!Array.isArray(i)||i.length===0)return;let r=new Set,n=[];for(let e of i){if(typeof e!=="string"||e.length===0)continue;if(r.has(e))continue;r.add(e),n.push(e)}return n.length>0?n:void 0}function or(i){return{eid:i.eid,ctr:i.ctr,updatedAt:i.updatedAt}}function re(i){let r=new N(i.eid),[n,e]=r.readStruct(_);if(e!==0)return l(e);return u({eid:i.eid,ctr:i.ctr,updatedAt:new Date(n.ts.getTime()+i.off)})}function $r(i,r){let n=new N(r.eid),[e,t]=n.readStruct(_);if(t!==0)return l(t);let $=new Date(e.ts.getTime()+r.off);if(i!==void 0&&$<=i.updatedAt)return l(15);if(Jt(r)){let f=ut(r.tags);return u({eid:r.eid,gid:r.gid,pid:r.pid,...f!==void 0?{tags:f}:{},type:r.type,createdAt:e.ts,updatedAt:$,ctr:r.ctr,body:r.body})}return u({eid:r.eid,updatedAt:$,ctr:r.ctr})}function fr(i,r){let n=new Set;if(i!==void 0&&T(i))n.add(i.type);if(T(r))n.add(r.type);return[...n]}var v$={getEnt:async()=>l(21),getRow:async()=>l(21),getEntities:async(i)=>l(21),countEntities:async()=>l(21),checksum:async()=>l(21),apply:async(i)=>({stats:i.map(()=>21),types:new Set,eids:[]}),clear:async()=>21};class tn{inflight=null;again=!1;run(i){if(this.again=!0,this.inflight)return this.inflight;return this.inflight=this.drain(i),this.inflight}async flush(){if(!this.inflight)return;try{await this.inflight}catch{}}async drain(i){try{this.again=!1;let r=await i();while(this.again)this.again=!1,r=await i();return r}finally{this.inflight=null}}}var $n=100;class ar{timer=null;delayMs;work;tail=new tn;constructor(i,r){this.delayMs=i<0?0:i,this.work=r}schedule(){if(this.delayMs<=0){this.fire();return}if(this.timer!==null)clearTimeout(this.timer);this.timer=setTimeout(()=>{this.timer=null,this.fire()},this.delayMs)}async flush(){if(this.timer!==null)clearTimeout(this.timer),this.timer=null,this.fire();await this.tail.flush()}cancel(){if(this.timer!==null)clearTimeout(this.timer),this.timer=null}fire(){return this.tail.run(this.work)}}function Vt(i){let r=new N(i.eid),[n,e]=_.decode(r);if(e!==0)return;return n.ts.getTime()+i.off}function b$(i,r){let n=Vt(i),e=Vt(r);if(n===void 0&&e===void 0)return 0;if(n===void 0)return 1;if(e===void 0)return-1;if(e!==n)return e-n;return r.ctr-i.ctr}function Zr(i,r){return i.slice().sort((n,e)=>b$(r(n),r(e)))}var pi={phase:"idle"},lr=50;function fn(i,r,n){if(i<=0||r<=0)return!1;if(i===1||i===r)return!0;return i%n===0}function Zn(i,r){if(typeof navigator.msSaveOrOpenBlob==="function"){navigator.msSaveOrOpenBlob(i,r);return}let n=URL.createObjectURL(i),e=document.createElement("a");e.href=n,e.download=r,document.body.appendChild(e),e.click(),document.body.removeChild(e),URL.revokeObjectURL(n)}function Yt(i,r,n){let e=[],t=[],$=0;for(let f of i){let Z=r(f);if(t.length>0&&$+Z>n)e.push(t),t=[],$=0;if(t.push(f),$+=Z,$>=n)e.push(t),t=[],$=0}if(t.length>0)e.push(t);return e}async function ne(i,r,n){let e=i.length;if(e<1)return[];let t=Array(e),$=0,f=Math.min(Math.max(1,r),e),Z=async()=>{while(!0){let h=$;if($+=1,h>=e)return;t[h]=await n(i[h],h)}},J=[];for(let h=0;h<f;h++)J.push(Z());return await Promise.all(J),t}async function ln(i,r,n,e){let t=new N(i.headCph),[$,f]=t.readStruct(_r);if(f!==0)return l(f);let{sig:Z,kdm:J,headCph:h}=$;if(!await e.checkSigEd25519(Z,h,r))return l(3);let w=n.deriveCipher(J,"decrypt"),V;try{V=await w.decrypt(h)}catch{return l(20)}return u({kdm:J,headEnc:V})}var zi="f",yi="t",Yi="e";function i0(i){return i===zi||i===yi||i===Yi}function Jr(i){if(i===!0||i===yi)return yi;if(i===Yi)return Yi;return zi}function r0(i){return Jr(i.apld)===zi}function ee(i){return i!==0&&i!==15&&i!==18&&i!==17}function xi(i,r,n){if(i.apld=r,r===Yi&&n!==void 0)i.err=n;else delete i.err}async function Pi(i,r,n,e){let t=e?.body!==!1,$=Jr(r.apld),f=r.body,Z=f?.length??0,J;if(t&&f&&Z>0)J=await n.blake3(f);let h={eid:r.eid,off:r.off??0,ctr:r.ctr??0,len:Z,hsh:J},Q={hash:i,head:h,apld:$};if(t&&f!==void 0)Q.body=f;if($===Yi&&r.err!==void 0)Q.err=r.err;return Q}var te=1048576,$e=1048576,ct=64;function n0(i){return i.sig.length+i.kdm.length+i.headCph.length+i.bodyCph.length}async function e0(i,r,n,e,t){if(e.length<1)return 0;let[$,f]=await i.push(e);if(f!==0)return f;if(!$)return 27;for(let J of $){if(J.status!==0){console.error("push err",J);continue}let h=t[J.idx];if(!h){console.error("no hash",J);continue}await r.uploads.deq(n,[h])}let Z=await r.hosts.get(n);if(Z){let J=Z.lastSeq,h=J,Q=[];for(let w of $)if(w.status===0)Q.push(w.seq);Q.sort((w,V)=>w-V);for(let w of Q)if(w===J+1)J=w;if(J>h)await r.hosts.touch(n,J)}return 0}async function Xt(i,r){if(r.length<1)return u([]);let n=new Map,e=[];for(let Z of r)n.set(Z.seq,Z),e.push(Z.seq);let[t,$]=await i.pull(e);if($!==0)return l($);if(!t)return l(27);let f=[];for(let{seq:Z,bodyCph:J}of t){let h=n.get(Z);if(!h)continue;f.push({dl:h,bodyCph:J})}return u(f)}async function t0(i,r,n,e){if(e.length<1)return u({parts:[],hashes:[]});let t=[],$=[],f=[],Z=new Map;for(let{dl:h,bodyCph:Q}of e){let{head:w,kdm:V,seq:Y,host:X}=h,[c,W]=await Wt(h,n);if(W!==0||!c){let y=Z.get(X)??[];y.push(Y),Z.set(X,y);continue}let{headEnc:z,headEncHash:g}=c,K=r.deriveCipher(V,"decrypt"),[I,m]=await Mn(z,Q,K,n,g);if(m!==0||!I){let y=Z.get(X)??[];y.push(Y),Z.set(X,y);continue}let R={head:w,body:I.bod},C=I.headHash;f.push({key:C,data:zt(R)}),t.push(R),$.push(C);let q=Z.get(X)??[];q.push(Y),Z.set(X,q)}let J=await i.messages.add(f);for(let[h,Q]of Z)await i.downloads.deq(h,Q);for(let h=0;h<J.length;h++){let Q=J[h];if(Q!==0&&Q!==15)console.error("ERR storing",G[Q],"for message",h)}return u({parts:t,hashes:$})}async function Wt(i,r){let n=i.headEnc;if(!n){let t=new O,$=t.writeStruct(li,i.head);if($!==0)return l($);n=t.result()}if(i.headEncHash)return u({headEnc:n,headEncHash:i.headEncHash});let e=await r.blake3(n);return u({headEnc:n,headEncHash:e})}async function It(i,r,n){let e=new Set;for(let f of r)e.add(d(f));if(e.size<1)return;let t=Array.from(await i.downloads.list());if(t.length<1)return;let $=new Map;for(let f of t){let Z;if(f.headEncHash)Z=d(f.headEncHash);else{let[h,Q]=await Wt(f,n);if(Q!==0||!h)continue;Z=d(h.headEncHash)}if(!e.has(Z))continue;let J=$.get(f.host)??[];J.push(f.seq),$.set(f.host,J)}for(let[f,Z]of $)await i.downloads.deq(f,Z)}async function fe({conn:i,store:r,enclave:n,host:e,crypto:t,onProgress:$,peekProgressEvery:f,peekConcurrency:Z}){let J=await i.identity(),h=[],[Q,w]=await i.peek(e.lastSeq);if(w!==0)return w;let V=Q.length,Y=f??lr,X=Z??ct;if($&&V>0)$({phase:"peek",host:e.label,done:0,total:V});let c=0,W=await ne(Q,X,async(g)=>{let[K,I]=await ln(g,J.publicKey,n,t),m;if(I!==0||!K)m={ok:!1,seq:g.seq,stat:I};else{let R=await t.blake3(K.headEnc);m={ok:!0,seq:g.seq,kdm:K.kdm,headEnc:K.headEnc,headEncHash:R}}if(c+=1,$&&fn(c,V,Y))$({phase:"peek",host:e.label,done:c,total:V});return m}),z=new Set;for(let g of W){if(!g.ok){console.error("peek: decrypting item head",g.stat);continue}let K=d(g.headEncHash);if(await r.messages.has(g.headEncHash)){console.info("peek: local msg; skip download, deq upload"),await r.uploads.deq(e.label,[g.headEncHash]),await r.downloads.deq(e.label,[g.seq]);continue}if(z.has(K)){await r.downloads.deq(e.label,[g.seq]);continue}let m=new N(g.headEnc),[R,C]=m.readStruct(li);if(C!==0){console.error("peek: reading item head",C);continue}z.add(K),h.push({kdm:g.kdm,head:R,seq:g.seq,host:e.label,headEnc:g.headEnc,headEncHash:g.headEncHash})}if(await r.downloads.enq(h),Q.length>0){let g=Math.max(...Q.map((K)=>K.seq));await r.hosts.recordStats(e.label,{lastSeq:g})}if($)$({phase:"peek",host:e.label,done:V,total:V});return 0}async function gt({conn:i,store:r,host:n,maxPushBytes:e,onProgress:t}){let $=e??te,f=await r.uploads.list(n.label),Z=f.length,J=0;if(t&&Z>0)t({phase:"push",host:n.label,done:0,total:Z});let h=[],Q=[],w=0,V=async()=>{if(h.length<1)return 0;let Y=h.length,X=await e0(i,r,n.label,h,Q);if(h=[],Q=[],w=0,X===0){if(J+=Y,t)t({phase:"push",host:n.label,done:J,total:Z})}return X};for(let Y of f){let X=await r.messages.get(Y);if(!X){J+=1;continue}let c={...X.head,bod:X.body},[W,z]=await i.seal(c);if(z!==0)return z;if(!W)return 12;let g=n0(W);if(h.length>0&&w+g>$){let K=await V();if(K!==0)return K}if(h.push(W),Q.push(Y),w+=g,w>=$){let K=await V();if(K!==0)return K}}return V()}async function Ze({conn:i,store:r,enclave:n,host:e,crypto:t,maxPullBytes:$,onProgress:f},Z){let J=$??$e,h=await r.downloads.list(),Q=Array.from(h).filter((W)=>W.host===e.label);if(Q.length<1)return 15;let w=Zr(Q,(W)=>W.head),V=Yt(w,(W)=>W.head.len,J),Y=w.length,X=0;if(f)f({phase:"pull",host:e.label,done:0,total:Y});let c=Xt(i,V[0]);for(let W=0;W<V.length;W++){let[z,g]=await c;if(g!==0||!z)return g;if(X+=V[W].length,f)f({phase:"pull",host:e.label,done:X,total:Y});let K=V[W+1];if(K)c=Xt(i,K);if(f)f({phase:"open",host:e.label,done:X,total:Y});let I=Zr(z,(R)=>R.dl.head),[,m]=await t0(r,n,t,I);if(m!==0)return m;if(Z){if(f)f({phase:"exec",host:e.label,done:X,total:Y});await Z()}}return 0}function zt({head:i,body:r}){let n={eid:i.eid,body:r,apld:zi};if(i.off!==0)n.off=i.off;if(i.ctr!==0)n.ctr=i.ctr;return n}async function Ut(i,{conn:r,store:n,enclave:e,host:t,crypto:$,onProgress:f},Z){let J=t.label,h=await r.identity(),Q=new N(i),[w,V]=Q.readStructs(Br);if(V!==0){console.error("Failed decoding notif",G[V]);return}let Y=!1,c=(await n.hosts.get(J))?.lastSeq,W=[],z=!1;for(let I of w){let[m,R]=await ln({seq:I.seq,headCph:I.headCph},h.publicKey,e,$);if(R!==0){console.error("Failed decrypting notif",G[R]);continue}let C=await $.blake3(m.headEnc);if(await n.messages.has(C))continue;let q=new N(m.headEnc),[y,H]=q.readStruct(li);if(H!==0){console.error("Failed to parse head",G[H]);continue}if(!I.bodyCph&&y.len>0)z=!0,await n.downloads.enq([{seq:I.seq,host:J,kdm:m.kdm,head:y,headEnc:m.headEnc,headEncHash:C}]);else W.push({...m,head:y,bodyCph:I.bodyCph,headEncHash:C});if(c===void 0||I.seq!==c+1)console.log("out of seq",I.seq,c),Y=!0;else c=I.seq}if(c!==void 0)await n.hosts.touch(t.label,c);let g=[];for(let I of W){let m=e.deriveCipher(I.kdm,"decrypt"),[R,C]=await Mn(I.headEnc,I.bodyCph,m,$);if(C!==0){console.error("Failed to open body",G[C]);continue}g.push({key:I.headEncHash,data:zt({head:I.head,body:R.bod})})}let K=await n.messages.add(g);for(let I=0;I<K.length;I++){let m=K[I];if(m!==0&&m!==15)console.error("ERR storing",G[m],"for message",I)}if(f&&g.length>0)f({phase:"open",host:t.label,done:g.length,total:g.length});if(Y||z||g.length>0)Z()}async function le(i,r={}){let n=r.pull!==!1,e=r.push===!0,{conn:t,store:$,enclave:f,host:Z,crypto:J,onProgress:h,peekProgressEvery:Q,peekConcurrency:w}=i,V=await t.identity(),[Y,X]=await t.peek(0);if(X!==0)return l(X);let c=Y.length,W=Q??lr,z=w??ct;if(h&&c>0)h({phase:"peek",host:Z.label,done:0,total:c});let g=0,K=await ne(Y,z,async(F)=>{let[M,P]=await ln(F,V.publicKey,f,J),A;if(P!==0||!M)A={ok:!1,seq:F.seq,stat:P};else{let a=await J.blake3(M.headEnc);A={ok:!0,seq:F.seq,kdm:M.kdm,headEnc:M.headEnc,headEncHash:a}}if(g+=1,h&&fn(g,c,W))h({phase:"peek",host:Z.label,done:g,total:c});return A}),I=new Map;for(let F of K){if(!F.ok)continue;let M=d(F.headEncHash),P=I.get(M);if(P)P.count+=1;else I.set(M,{hash:F.headEncHash,count:1,sample:F})}let m=0,R=[];for(let F of I.values()){if(F.count>1)m+=F.count-1;R.push(F.hash)}let C=Y.length,q=I.size,y=await nr(R,J),H=[],U=0;for(let F of I.values()){if(await $.messages.has(F.hash)){await $.uploads.deq(Z.label,[F.hash]);continue}if(U+=1,!n)continue;let P=F.sample,A=new N(P.headEnc),[a,k]=A.readStruct(li);if(k!==0){console.error("reconcile: reading msg header",k);continue}H.push({kdm:P.kdm,head:a,seq:P.seq,host:Z.label,headEnc:P.headEnc,headEncHash:P.headEncHash})}if(H.length>0)await $.downloads.enq(H);let D=0;if(e){let F=await $.messages.listKeys(),M=new Set(I.keys()),P=[];for(let A of F)if(!M.has(d(A)))D+=1,P.push(A);if(P.length>0)await $.uploads.enq(Z.label,P)}else{let F=await $.messages.listKeys(),M=new Set(I.keys());for(let P of F)if(!M.has(d(P)))D+=1}let x=Y.length>0?Math.max(...Y.map((F)=>F.seq)):0;if(await $.hosts.recordStats(Z.label,{setLastSeq:x}),h)h({phase:"peek",host:Z.label,done:c,total:c});return u({msgcheck:y,numBags:C,uniqueMsgs:q,numDupes:m,missingLocal:U,missingHost:D})}class ji{clock;state;store;transport;crypto;forceSkewHandlingByDefault;onScheduleSync;connections=new Map;applyChain=Promise.resolve();syncRuns=new tn;clientState;xferState;maxPushBytes;maxPullBytes;peekProgressEvery=lr;lastProgress=pi;scheduledSync;constructor(i,r,n,e,t,$=!0,f=te,Z=$e,J){this.clock=i;this.state=r;this.store=n;this.transport=e;this.crypto=t;this.forceSkewHandlingByDefault=$;this.onScheduleSync=J;this.maxPushBytes=f,this.maxPullBytes=Z,this.clientState=new Vi(()=>this.getClientState()),this.xferState=new Vi(()=>this.getXferState()),this.scheduledSync=new ar($n,async()=>{try{console.info("Running scheduled sync"),await this.sync()}catch(h){console.error("Debounced sync failed:",h)}})}emitProgress=(i)=>{this.lastProgress=i,this.xferState.emit()};async setSeed(i,r){await this.store.seed.save(i,r),this.clientState.emit()}async getClientState(){let{store:i,connections:r}=this,n=await i.seed.load(),e=await i.hosts.list(),t=!1;for(let $ of r.values())if($.isConnected()){t=!0;break}return{hasSeed:n!==void 0,hasHost:Array.from(e).length>0,connected:t}}async getXferState(){let{uploads:i,downloads:r}=this.store,n=await i.count();return{numDownloads:await r.count(),numUploads:n,progress:this.lastProgress}}apply=(i,r)=>{return this.enqueueApplyJob(()=>this.doApply(i,r))};async doApply(i,r={enqueueUpload:!0,triggerUpload:!0}){let n=[],e=[];for(let{head:$,body:f}of i){let Z=new O;Z.writeStruct(li,$);let J=Z.result(),h=await this.crypto.blake3(J),Q={eid:$.eid,body:f,apld:zi};if($.off!==0)Q.off=$.off;if($.ctr!==0)Q.ctr=$.ctr;n.push(h),e.push({key:h,data:Q})}await this.store.messages.add(e),await It(this.store,n,this.crypto);let t=await this.doApplyHashes(n);if(r.enqueueUpload){let $=[];for(let f=0;f<n.length;f++){let Z=t[f];if(Z===0||Z===15)$.push(n[f])}if($.length>0){let f=await this.store.hosts.list();for(let Z of f)await this.store.uploads.enq(Z.label,$);this.xferState.emit()}}if(r.triggerUpload)this.scheduleSync();return t}enqueueApplyJob(i){let r=this.applyChain.then(i,i);return this.applyChain=r.then(()=>{return},()=>{return}),r}drainApplyQueue(){return this.enqueueApplyJob(()=>this.doDrainApplyQueue())}async doDrainApplyQueue(){let i=await this.store.messages.list({apld:zi});if(i.length<1)return[];let r=Zr(i,(n)=>n.head);return this.applyStored(r)}applyHashes=(i)=>{return this.enqueueApplyJob(()=>this.doApplyHashes(i))};async doApplyHashes(i){let r=[];for(let t of i){let $=await this.store.messages.get(t);if($)r.push($)}let n=await this.applyStored(r),e=new Map;for(let t=0;t<r.length;t++)e.set(d(r[t].hash),n[t]??12);return i.map((t)=>e.get(d(t))??13)}async applyStored(i){if(i.length<1)return[];let r=i.map(($)=>({...$.head,bod:$.body})),n=await this.state.apply(r),e=[],t=[];for(let $=0;$<i.length;$++){let f=n[$];if(f===0||f===15)e.push(i[$].hash);else if(f!==void 0&&ee(f))t.push({key:i[$].hash,err:f})}if(e.length>0)await this.store.messages.markApplied(e);if(t.length>0)await this.store.messages.markFailed(t);return n}async insertRaw(i){let{clock:r,crypto:n}=this,[e,t]=await ft({now:r.now(),bod:i,crypto:n});if(t!==0)return l(t);let f=(await this.apply([{head:e,body:i}]))[0];if(f!==0&&f!==15)return l(f??12);return u(e)}async makeUpdate(i,r){let{clock:n,crypto:e}=this,t=n.now();if(i.updatedAt.getTime()>t.getTime())return l(4);let $=i.ctr+1,[f,Z]=await br({now:t,eid:i.eid,ctr:$,bod:r,crypto:e});if(Z!==0)return l(Z);return u({head:f,body:r})}async updateWithSkew(i,r,n){if(n===!1)return l(4);let{clock:e,crypto:t}=this,$=e.now(),f=new N(i.eid),[Z,J]=f.readStruct(_);if(J!==0)return l(J);let h=i.updatedAt.getTime()-Z.ts.getTime(),Q={eid:i.eid,off:h+1,ctr:i.ctr+1,len:0},V=(await this.apply([{head:Q,body:void 0}]))[0];if(V!==0&&V!==15)return l(V??12);if(r===void 0)return u(Q);let[Y,X]=rr({id:Z.id,ts:$});if(X!==0)return l(X);let[c,W]=await br({now:$,eid:Y,ctr:0,bod:r,crypto:t});if(W!==0)return l(W);let g=(await this.apply([{head:c,body:r}]))[0];if(g!==0&&g!==15)return l(g??12);return u(c)}async updateRaw(i,r,n=this.forceSkewHandlingByDefault){if(i.updatedAt.getTime()>this.clock.now().getTime())return this.updateWithSkew(i,r,n);return this.enqueueApplyJob(async()=>{let[e,t]=await this.makeUpdate(i,r);if(t!==0)return l(t);let f=(await this.doApply([e]))[0];if(f!==0&&f!==15)return l(f??12);return u(e.head)})}async insert(i){let{body:r,type:n,gid:e,pid:t,tags:$}=i,Z=Di({body:r,type:n,gid:e,pid:t,tags:$});return this.insertRaw(Z)}async update(i){let{prior:r,body:n,type:e,gid:t,pid:$,tags:f,force:Z}=i,h=Di({body:n,type:e,gid:t,pid:$,tags:f});return this.updateRaw(r,h,Z??this.forceSkewHandlingByDefault)}async delete(i){let r=i.force??!0;if("prior"in i)return this.updateRaw(i.prior,void 0,r);let[n,e]=await this.revFromArchive(i.eid);if(e!==0)return l(e);return this.updateRaw(n,void 0,r)}async revFromArchive(i){let r=await this.store.messages.last(i);if(r)return re(r.head);let n=new N(i),[e,t]=n.readStruct(_);if(t!==0)return l(t);return u({eid:i,ctr:-1,updatedAt:e.ts})}async genEID(i){let{clock:r,crypto:n}=this,e=r.now();if(i!==void 0)return rr({id:i,ts:e});let t=await n.genRandomBytes(8);return rr({id:t,ts:e})}sync(){return this.syncRuns.run(()=>this.doSync())}async doSync(){let{connections:i,crypto:r,store:n}=this,e=await n.seed.load();if(!e)return 22;await this.drainApplyQueue();for(let[t,$]of i){let f=await n.hosts.get(t);if(!f)continue;let Z={conn:$,store:n,enclave:e,host:f,crypto:r,maxPushBytes:this.maxPushBytes,maxPullBytes:this.maxPullBytes,onProgress:this.emitProgress,peekProgressEvery:this.peekProgressEvery},J=await fe(Z);if(J!==0)return console.error(`Failed to peek: ${J}`),this.emitProgress({phase:"idle"}),J;this.xferState.emit();let h=await gt(Z);if(h!==0)return console.error(`Failed to push: ${h}`),this.emitProgress({phase:"idle"}),h;this.xferState.emit();let Q=await Ze(Z,async()=>{await this.drainApplyQueue()});if(Q!==0&&Q!==15)return console.error(`Failed to pull: ${Q}`),this.emitProgress({phase:"idle"}),Q;this.xferState.emit()}return this.emitProgress({phase:"idle"}),0}async rebuild(i){if(this.scheduledSync.cancel(),await this.syncRuns.flush(),i?.checkHost??!0){let n=await this.repull();if(n!==0)return n}return this.enqueueApplyJob(()=>this.replay())}async msgcheck(){let i=await this.store.messages.listKeys();return nr(i,this.crypto)}listMsgs(i){return this.store.messages.list(i)}countMsgs(i){return this.store.messages.count(i)}async reconcile(i,r){this.scheduledSync.cancel(),await this.syncRuns.flush();let{connections:n,crypto:e,store:t}=this,$=await t.seed.load();if(!$)return l(22);let f=await t.hosts.get(i);if(!f)return l(13);let Z=n.get(i);if(!Z||!Z.isConnected()){if(await this.connectToHost(f,!1,!1),f=await t.hosts.get(i),!f)return l(13);Z=n.get(i)}if(!Z)return l(12);let J={conn:Z,store:t,enclave:$,crypto:e,maxPushBytes:this.maxPushBytes,maxPullBytes:this.maxPullBytes,onProgress:this.emitProgress,peekProgressEvery:this.peekProgressEvery},[h,Q]=await le({...J,host:f},r);if(this.xferState.emit(),Q!==0)return this.emitProgress({phase:"idle"}),l(Q);if(!h)return this.emitProgress({phase:"idle"}),l(12);if(r?.sync===!1)return this.emitProgress({phase:"idle"}),u(h);let w=await this.sync();if(w!==0)return l(w);let V=await t.hosts.get(i);if(!V)return l(13);let[Y,X]=await le({...J,host:V},{pull:!1,push:!1});if(this.xferState.emit(),this.emitProgress({phase:"idle"}),X!==0)return l(X);if(!Y)return l(12);return u(Y)}async repull(){let{connections:i,crypto:r,store:n}=this,e=await n.seed.load();if(!e)return 22;let t=Array.from(await n.hosts.list());if(t.length<1)return 0;for(let $ of t){let f=i.get($.label);if(!f||!f.isConnected())await this.connectToHost($,!1,!1)}for(let[$,f]of i){let Z=await n.hosts.get($);if(!Z)continue;let J={conn:f,store:n,enclave:e,host:{...Z,lastSeq:0},crypto:r,maxPushBytes:this.maxPushBytes,maxPullBytes:this.maxPullBytes,onProgress:this.emitProgress,peekProgressEvery:this.peekProgressEvery},h=await fe(J);if(h!==0)return console.error(`rebuild: failed to peek: ${h}`),this.emitProgress({phase:"idle"}),h;this.xferState.emit();let Q=await Ze(J);if(Q!==0&&Q!==15)return console.error(`rebuild: failed to pull: ${Q}`),this.emitProgress({phase:"idle"}),Q;this.xferState.emit()}return this.emitProgress({phase:"idle"}),0}async replay(){let i=await this.state.clear();if(i!==0)return i;let r=await this.store.messages.list(),n=Zr(r,($)=>$.head),e=n.length;if(e<1)return this.emitProgress({phase:"idle"}),0;let t=0;while(t<n.length){let $=0,f=0,Z=t;for(let h=t;h<n.length&&f<100&&$<102400;h++)$+=n[h].head.len,f++,Z=h+1;let J=n.slice(t,Z);await this.applyStored(J),this.emitProgress({phase:"exec",done:Z,total:e}),t=Z}return this.emitProgress({phase:"idle"}),0}async wipe(i){let r=i?.msgs!==!1,n=i?.ents!==!1,e=i?.meta!==!1,t=i?.seed===!0;this.scheduledSync.cancel(),await this.disconnect(),await this.syncRuns.flush();let{store:$}=this;if(e)await $.hosts.wipe(),await $.uploads.wipe(),await $.downloads.wipe();if(r)await $.messages.wipe();if(t)await $.seed.wipe();if(n)await this.state.clear();this.lastProgress=pi,this.clientState.emit(),this.xferState.emit()}import=async(i,r)=>{let{crypto:n,store:e}=this,t=r?.onProgress,$=await e.seed.load();if(!$)return 22;console.time("import: decoding file...");let f=await i.bytes(),[Z,J]=await $t(f,n,$);if(J!==0)return J;console.timeEnd("import: decoding file...");let h=0;while(h<Z.length){let Q=0,w=0,V=h;for(let c=h;c<Z.length&&w<100&&Q<102400;c++)Q+=Z[c].head.len,w++,V=c+1;let Y=Z.slice(h,V);console.time(`import: applying [${h}, ${V}]`);let X=await this.apply(Y,{enqueueUpload:!0,triggerUpload:!1});console.timeEnd(`import: applying [${h}, ${V}]`);for(let c=0;c<Y.length;c++){let W=X[c];if(W!==0&&W!==15)console.warn(`failed to import msg ${h+c}: ${G[W]}`)}if(t)queueMicrotask(()=>t(V,Z.length,0));this.emitProgress({phase:"import",done:V,total:Z.length}),h=V}return this.scheduleSync(),this.emitProgress({phase:"idle"}),0};scheduleSync=()=>{if(this.onScheduleSync){this.onScheduleSync();return}this.scheduledSync.schedule()};async exportBytes(){let{crypto:i,store:r}=this,n=await r.seed.load();if(!n)return l(22);let e=await r.messages.list();return tt("export",0,e,i,n)}async export(i){let[r,n]=await this.exportBytes();if(n!==0)return n;if(!r)return 12;let e=new Blob([r.slice()]);return Zn(e,i),0}async link(i,r=!0){if(await this.store.hosts.add(i),this.clientState.emit(),r){let n=await this.store.hosts.get(i.label);if(n)await this.connectToHost(n)}}async unlink(i){await this.store.hosts.del(i),this.clientState.emit()}async hosts(){return Array.from(await this.store.hosts.list())}connectToHost=async(i,r=!0,n=!0)=>{let{clock:e,connections:t,crypto:$,store:f,transport:Z}=this,J=t.get(i.label);if(J){if(J.isConnected())return;try{J.closeListener()}catch{}t.delete(i.label)}let h=await f.seed.load();if(!h)return;console.info(`Connecting to ${i.handle} (${i.label})`);let Q=new vr(h,$,i,e,Z(i),(w)=>f.hosts.set(i.label,w));if(await Q.register(),r)await Q.listen(async(w)=>{let V={conn:Q,store:f,enclave:h,host:i,crypto:$,maxPushBytes:this.maxPushBytes,maxPullBytes:this.maxPullBytes,onProgress:this.emitProgress,peekProgressEvery:this.peekProgressEvery};return Ut(w,V,this.scheduleSync)},()=>this.clientState.emit(),()=>this.clientState.emit());if(t.set(i.label,Q),this.clientState.emit(),n)this.scheduleSync()};async connect(i=!0,r=!0){let{connectToHost:n,scheduleSync:e,store:t}=this;if(!await t.seed.load())return;await this.drainApplyQueue();let f=await t.hosts.list();for(let Z of f)await n(Z,i,!1);if(r)e()}disconnect=async()=>{for(let i of this.connections.values())try{i.closeListener()}catch{}this.connections.clear(),this.clientState.emit()}}var Li=typeof globalThis==="object"&&"crypto"in globalThis?globalThis.crypto:void 0;function Jn(i){if(!Number.isSafeInteger(i)||i<0)throw Error("positive integer expected, got "+i)}function Je(i){return i instanceof Uint8Array||ArrayBuffer.isView(i)&&i.constructor.name==="Uint8Array"}function B(i,...r){if(!Je(i))throw Error("Uint8Array expected");if(r.length>0&&!r.includes(i.length))throw Error("Uint8Array expected of length "+r+", got length="+i.length)}function he(i,r=!0){if(i.destroyed)throw Error("Hash instance has been destroyed");if(r&&i.finished)throw Error("Hash#digest() has already been called")}function Kt(i,r){B(i);let n=r.outputLen;if(i.length<n)throw Error("digestInto() expects output buffer of length at least "+n)}function Qe(i){if(typeof i!=="boolean")throw Error(`boolean expected, not ${i}`)}/*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) */var Ui=(i)=>new Uint32Array(i.buffer,i.byteOffset,Math.floor(i.byteLength/4));var $0=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!$0)throw Error("Non little-endian hardware is not supported");function f0(i){if(typeof i!=="string")throw Error("string expected");return new Uint8Array(new TextEncoder().encode(i))}function hn(i){if(typeof i==="string")i=f0(i);else if(Je(i))i=Qn(i);else throw Error("Uint8Array expected, got "+typeof i);return i}function Gt(i,r){if(r==null||typeof r!=="object")throw Error("options must be defined");return Object.assign(i,r)}function ot(i,r){if(i.length!==r.length)return!1;let n=0;for(let e=0;e<i.length;e++)n|=i[e]^r[e];return n===0}var mt=(i,r)=>{function n(e,...t){if(B(e),i.nonceLength!==void 0){let Q=t[0];if(!Q)throw Error("nonce / iv required");if(i.varSizeNonce)B(Q);else B(Q,i.nonceLength)}let $=i.tagLength;if($&&t[1]!==void 0)B(t[1]);let f=r(e,...t),Z=(Q,w)=>{if(w!==void 0){if(Q!==2)throw Error("cipher output not supported");B(w)}},J=!1;return{encrypt(Q,w){if(J)throw Error("cannot encrypt() twice with same key + nonce");return J=!0,B(Q),Z(f.encrypt.length,w),f.encrypt(Q,w)},decrypt(Q,w){if(B(Q),$&&Q.length<$)throw Error("invalid ciphertext length: smaller than tagLength="+$);return Z(f.decrypt.length,w),f.decrypt(Q,w)}}}return Object.assign(n,i),n};function we(i,r,n=!0){if(r===void 0)return new Uint8Array(i);if(r.length!==i)throw Error("invalid output length, expected "+i+", got: "+r.length);if(n&&!Z0(r))throw Error("invalid output, must be aligned");return r}function Z0(i){return i.byteOffset%4===0}function Qn(i){return Uint8Array.from(i)}function Xi(...i){for(let r=0;r<i.length;r++)i[r].fill(0)}function wn(i=32){if(Li&&typeof Li.getRandomValues==="function")return Li.getRandomValues(new Uint8Array(i));if(Li&&typeof Li.randomBytes==="function")return Li.randomBytes(i);throw Error("crypto.getRandomValues must be defined")}var dt=(i)=>Uint8Array.from(i.split("").map((r)=>r.charCodeAt(0))),l0=dt("expand 16-byte k"),J0=dt("expand 32-byte k"),h0=Ui(l0),Q0=Ui(J0);function o(i,r){return i<<r|i>>>32-r}function ue(i){return i.byteOffset%4===0}var un=64,w0=16,Ft=4294967295,at=new Uint32Array;function u0(i,r,n,e,t,$,f,Z){let J=t.length,h=new Uint8Array(un),Q=Ui(h),w=ue(t)&&ue($),V=w?Ui(t):at,Y=w?Ui($):at;for(let X=0;X<J;f++){if(i(r,n,e,Q,f,Z),f>=Ft)throw Error("arx: counter overflow");let c=Math.min(un,J-X);if(w&&c===un){let W=X/4;if(X%4!==0)throw Error("arx: invalid block position");for(let z=0,g;z<w0;z++)g=W+z,Y[g]=V[g]^Q[z];X+=un;continue}for(let W=0,z;W<c;W++)z=X+W,$[z]=t[z]^h[W];X+=c}}function Rt(i,r){let{allowShortKeys:n,extendNonceFn:e,counterLength:t,counterRight:$,rounds:f}=Gt({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},r);if(typeof i!=="function")throw Error("core must be a function");return Jn(t),Jn(f),Qe($),Qe(n),(Z,J,h,Q,w=0)=>{B(Z),B(J),B(h);let V=h.length;if(Q===void 0)Q=new Uint8Array(V);if(B(Q),Jn(w),w<0||w>=Ft)throw Error("arx: counter overflow");if(Q.length<V)throw Error(`arx: output (${Q.length}) is shorter than data (${V})`);let Y=[],X=Z.length,c,W;if(X===32)Y.push(c=Qn(Z)),W=Q0;else if(X===16&&n)c=new Uint8Array(32),c.set(Z),c.set(Z,16),W=h0,Y.push(c);else throw Error(`arx: invalid 32-byte key, got length=${X}`);if(!ue(J))Y.push(J=Qn(J));let z=Ui(c);if(e){if(J.length!==24)throw Error("arx: extended nonce must be 24 bytes");e(W,z,Ui(J.subarray(0,16)),z),J=J.subarray(16)}let g=16-t;if(g!==J.length)throw Error(`arx: nonce must be ${g} or 16 bytes`);if(g!==12){let I=new Uint8Array(12);I.set(J,$?0:12-J.length),J=I,Y.push(J)}let K=Ui(J);return u0(i,W,z,K,h,Q,w,f),Xi(...Y),Q}}var E=(i,r)=>i[r++]&255|(i[r++]&255)<<8;class Nt{constructor(i){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,i=hn(i),B(i,32);let r=E(i,0),n=E(i,2),e=E(i,4),t=E(i,6),$=E(i,8),f=E(i,10),Z=E(i,12),J=E(i,14);this.r[0]=r&8191,this.r[1]=(r>>>13|n<<3)&8191,this.r[2]=(n>>>10|e<<6)&7939,this.r[3]=(e>>>7|t<<9)&8191,this.r[4]=(t>>>4|$<<12)&255,this.r[5]=$>>>1&8190,this.r[6]=($>>>14|f<<2)&8191,this.r[7]=(f>>>11|Z<<5)&8065,this.r[8]=(Z>>>8|J<<8)&8191,this.r[9]=J>>>5&127;for(let h=0;h<8;h++)this.pad[h]=E(i,16+2*h)}process(i,r,n=!1){let e=n?0:2048,{h:t,r:$}=this,f=$[0],Z=$[1],J=$[2],h=$[3],Q=$[4],w=$[5],V=$[6],Y=$[7],X=$[8],c=$[9],W=E(i,r+0),z=E(i,r+2),g=E(i,r+4),K=E(i,r+6),I=E(i,r+8),m=E(i,r+10),R=E(i,r+12),C=E(i,r+14),q=t[0]+(W&8191),y=t[1]+((W>>>13|z<<3)&8191),H=t[2]+((z>>>10|g<<6)&8191),U=t[3]+((g>>>7|K<<9)&8191),D=t[4]+((K>>>4|I<<12)&8191),x=t[5]+(I>>>1&8191),F=t[6]+((I>>>14|m<<2)&8191),M=t[7]+((m>>>11|R<<5)&8191),P=t[8]+((R>>>8|C<<8)&8191),A=t[9]+(C>>>5|e),a=0,k=a+q*f+y*(5*c)+H*(5*X)+U*(5*Y)+D*(5*V);a=k>>>13,k&=8191,k+=x*(5*w)+F*(5*Q)+M*(5*h)+P*(5*J)+A*(5*Z),a+=k>>>13,k&=8191;let ri=a+q*Z+y*f+H*(5*c)+U*(5*X)+D*(5*Y);a=ri>>>13,ri&=8191,ri+=x*(5*V)+F*(5*w)+M*(5*Q)+P*(5*h)+A*(5*J),a+=ri>>>13,ri&=8191;let $i=a+q*J+y*Z+H*f+U*(5*c)+D*(5*X);a=$i>>>13,$i&=8191,$i+=x*(5*Y)+F*(5*V)+M*(5*w)+P*(5*Q)+A*(5*h),a+=$i>>>13,$i&=8191;let j=a+q*h+y*J+H*Z+U*f+D*(5*c);a=j>>>13,j&=8191,j+=x*(5*X)+F*(5*Y)+M*(5*V)+P*(5*w)+A*(5*Q),a+=j>>>13,j&=8191;let Wi=a+q*Q+y*h+H*J+U*Z+D*f;a=Wi>>>13,Wi&=8191,Wi+=x*(5*c)+F*(5*X)+M*(5*Y)+P*(5*V)+A*(5*w),a+=Wi>>>13,Wi&=8191;let ki=a+q*w+y*Q+H*h+U*J+D*Z;a=ki>>>13,ki&=8191,ki+=x*f+F*(5*c)+M*(5*X)+P*(5*Y)+A*(5*V),a+=ki>>>13,ki&=8191;let Bi=a+q*V+y*w+H*Q+U*h+D*J;a=Bi>>>13,Bi&=8191,Bi+=x*Z+F*f+M*(5*c)+P*(5*X)+A*(5*Y),a+=Bi>>>13,Bi&=8191;let _i=a+q*Y+y*V+H*w+U*Q+D*h;a=_i>>>13,_i&=8191,_i+=x*J+F*Z+M*f+P*(5*c)+A*(5*X),a+=_i>>>13,_i&=8191;let Si=a+q*X+y*Y+H*V+U*w+D*Q;a=Si>>>13,Si&=8191,Si+=x*h+F*J+M*Z+P*f+A*(5*c),a+=Si>>>13,Si&=8191;let Ei=a+q*c+y*X+H*Y+U*V+D*w;a=Ei>>>13,Ei&=8191,Ei+=x*Q+F*h+M*J+P*Z+A*f,a+=Ei>>>13,Ei&=8191,a=(a<<2)+a|0,a=a+k|0,k=a&8191,a=a>>>13,ri+=a,t[0]=k,t[1]=ri,t[2]=$i,t[3]=j,t[4]=Wi,t[5]=ki,t[6]=Bi,t[7]=_i,t[8]=Si,t[9]=Ei}finalize(){let{h:i,pad:r}=this,n=new Uint16Array(10),e=i[1]>>>13;i[1]&=8191;for(let f=2;f<10;f++)i[f]+=e,e=i[f]>>>13,i[f]&=8191;i[0]+=e*5,e=i[0]>>>13,i[0]&=8191,i[1]+=e,e=i[1]>>>13,i[1]&=8191,i[2]+=e,n[0]=i[0]+5,e=n[0]>>>13,n[0]&=8191;for(let f=1;f<10;f++)n[f]=i[f]+e,e=n[f]>>>13,n[f]&=8191;n[9]-=8192;let t=(e^1)-1;for(let f=0;f<10;f++)n[f]&=t;t=~t;for(let f=0;f<10;f++)i[f]=i[f]&t|n[f];i[0]=(i[0]|i[1]<<13)&65535,i[1]=(i[1]>>>3|i[2]<<10)&65535,i[2]=(i[2]>>>6|i[3]<<7)&65535,i[3]=(i[3]>>>9|i[4]<<4)&65535,i[4]=(i[4]>>>12|i[5]<<1|i[6]<<14)&65535,i[5]=(i[6]>>>2|i[7]<<11)&65535,i[6]=(i[7]>>>5|i[8]<<8)&65535,i[7]=(i[8]>>>8|i[9]<<5)&65535;let $=i[0]+r[0];i[0]=$&65535;for(let f=1;f<8;f++)$=(i[f]+r[f]|0)+($>>>16)|0,i[f]=$&65535;Xi(n)}update(i){he(this);let{buffer:r,blockLen:n}=this;i=hn(i);let e=i.length;for(let t=0;t<e;){let $=Math.min(n-this.pos,e-t);if($===n){for(;n<=e-t;t+=n)this.process(i,t);continue}if(r.set(i.subarray(t,t+$),this.pos),this.pos+=$,t+=$,this.pos===n)this.process(r,0,!1),this.pos=0}return this}destroy(){Xi(this.h,this.r,this.buffer,this.pad)}digestInto(i){he(this),Kt(i,this),this.finished=!0;let{buffer:r,h:n}=this,{pos:e}=this;if(e){r[e++]=1;for(;e<16;e++)r[e]=0;this.process(r,0,!0)}this.finalize();let t=0;for(let $=0;$<8;$++)i[t++]=n[$]>>>0,i[t++]=n[$]>>>8;return i}digest(){let{buffer:i,outputLen:r}=this;this.digestInto(i);let n=i.slice(0,r);return this.destroy(),n}}function V0(i){let r=(e,t)=>i(t).update(hn(e)).digest(),n=i(new Uint8Array(32));return r.outputLen=n.outputLen,r.blockLen=n.blockLen,r.create=(e)=>i(e),r}var Ve=V0((i)=>new Nt(i));function Y0(i,r,n,e,t,$=20){let f=i[0],Z=r[0],J=r[1],h=r[2],Q=r[3],w=i[1],V=n[0],Y=n[1],X=t,c=0,W=i[2],z=r[4],g=r[5],K=r[6],I=r[7],m=i[3],R=f,C=Z,q=J,y=h,H=Q,U=w,D=V,x=Y,F=X,M=c,P=W,A=z,a=g,k=K,ri=I,$i=m;for(let Wi=0;Wi<$;Wi+=2)H^=o(R+a|0,7),F^=o(H+R|0,9),a^=o(F+H|0,13),R^=o(a+F|0,18),M^=o(U+C|0,7),k^=o(M+U|0,9),C^=o(k+M|0,13),U^=o(C+k|0,18),ri^=o(P+D|0,7),q^=o(ri+P|0,9),D^=o(q+ri|0,13),P^=o(D+q|0,18),y^=o($i+A|0,7),x^=o(y+$i|0,9),A^=o(x+y|0,13),$i^=o(A+x|0,18),C^=o(R+y|0,7),q^=o(C+R|0,9),y^=o(q+C|0,13),R^=o(y+q|0,18),D^=o(U+H|0,7),x^=o(D+U|0,9),H^=o(x+D|0,13),U^=o(H+x|0,18),A^=o(P+M|0,7),F^=o(A+P|0,9),M^=o(F+A|0,13),P^=o(M+F|0,18),a^=o($i+ri|0,7),k^=o(a+$i|0,9),ri^=o(k+a|0,13),$i^=o(ri+k|0,18);let j=0;e[j++]=f+R|0,e[j++]=Z+C|0,e[j++]=J+q|0,e[j++]=h+y|0,e[j++]=Q+H|0,e[j++]=w+U|0,e[j++]=V+D|0,e[j++]=Y+x|0,e[j++]=X+F|0,e[j++]=c+M|0,e[j++]=W+P|0,e[j++]=z+A|0,e[j++]=g+a|0,e[j++]=K+k|0,e[j++]=I+ri|0,e[j++]=m+$i|0}function X0(i,r,n,e){let t=i[0],$=r[0],f=r[1],Z=r[2],J=r[3],h=i[1],Q=n[0],w=n[1],V=n[2],Y=n[3],X=i[2],c=r[4],W=r[5],z=r[6],g=r[7],K=i[3];for(let m=0;m<20;m+=2)J^=o(t+W|0,7),V^=o(J+t|0,9),W^=o(V+J|0,13),t^=o(W+V|0,18),Y^=o(h+$|0,7),z^=o(Y+h|0,9),$^=o(z+Y|0,13),h^=o($+z|0,18),g^=o(X+Q|0,7),f^=o(g+X|0,9),Q^=o(f+g|0,13),X^=o(Q+f|0,18),Z^=o(K+c|0,7),w^=o(Z+K|0,9),c^=o(w+Z|0,13),K^=o(c+w|0,18),$^=o(t+Z|0,7),f^=o($+t|0,9),Z^=o(f+$|0,13),t^=o(Z+f|0,18),Q^=o(h+J|0,7),w^=o(Q+h|0,9),J^=o(w+Q|0,13),h^=o(J+w|0,18),c^=o(X+Y|0,7),V^=o(c+X|0,9),Y^=o(V+c|0,13),X^=o(Y+V|0,18),W^=o(K+g|0,7),z^=o(W+K|0,9),g^=o(z+W|0,13),K^=o(g+z|0,18);let I=0;e[I++]=t,e[I++]=h,e[I++]=X,e[I++]=K,e[I++]=Q,e[I++]=w,e[I++]=V,e[I++]=Y}var Ye=Rt(Y0,{counterRight:!0,extendNonceFn:X0}),Xe=mt({blockSize:64,nonceLength:24,tagLength:16},(i,r)=>{return{encrypt(n,e){e=we(n.length+32,e,!1);let t=e.subarray(0,32),$=e.subarray(32);e.set(n,32),Xi(t),Ye(i,r,e,e);let f=Ve($,t);return e.set(f,16),Xi(e.subarray(0,16),f),e.subarray(16)},decrypt(n,e){B(n),e=we(n.length+32,e,!1);let t=e.subarray(0,32),$=e.subarray(32,48),f=e.subarray(48);e.set(n,32),Xi(t);let Z=Ye(i,r,t,t),J=Ve(f,Z);if(!ot($,J))throw Error("invalid tag");return Ye(i,r,e.subarray(16),e.subarray(16)),Xi(t,$,J),f}}});/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function c0(i){return i instanceof Uint8Array||ArrayBuffer.isView(i)&&i.constructor.name==="Uint8Array"}function dr(i){if(!Number.isSafeInteger(i)||i<0)throw Error("positive integer expected, got "+i)}function si(i,...r){if(!c0(i))throw Error("Uint8Array expected");if(r.length>0&&!r.includes(i.length))throw Error("Uint8Array expected of length "+r+", got length="+i.length)}function Fr(i,r=!0){if(i.destroyed)throw Error("Hash instance has been destroyed");if(r&&i.finished)throw Error("Hash#digest() has already been called")}function Vn(i,r){si(i);let n=r.outputLen;if(i.length<n)throw Error("digestInto() expects output buffer of length at least "+n)}function Ot(i){return new Uint8Array(i.buffer,i.byteOffset,i.byteLength)}function hr(i){return new Uint32Array(i.buffer,i.byteOffset,Math.floor(i.byteLength/4))}function Qr(...i){for(let r=0;r<i.length;r++)i[r].fill(0)}function Rr(i,r){return i<<32-r|i>>>r}var yt=(()=>new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68)();function Pt(i){return i<<24&4278190080|i<<8&16711680|i>>>8&65280|i>>>24&255}var qt=yt?(i)=>i:(i)=>Pt(i);function W0(i){for(let r=0;r<i.length;r++)i[r]=Pt(i[r]);return i}var ei=yt?(i)=>i:W0;function I0(i){if(typeof i!=="string")throw Error("string expected");return new Uint8Array(new TextEncoder().encode(i))}function wr(i){if(typeof i==="string")i=I0(i);return si(i),i}class ce{}function Ct(i){let r=(e,t)=>i(t).update(wr(e)).digest(),n=i({});return r.outputLen=n.outputLen,r.blockLen=n.blockLen,r.create=(e)=>i(e),r}var Mt=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var Yn=BigInt(4294967295),Ht=BigInt(32);function We(i,r=!1){if(r)return{h:Number(i&Yn),l:Number(i>>Ht&Yn)};return{h:Number(i>>Ht&Yn)|0,l:Number(i&Yn)|0}}function Ki(i,r,n,e,t){return i=i+r+t|0,e=Rr(e^i,16),n=n+e|0,r=Rr(r^n,12),{a:i,b:r,c:n,d:e}}function Gi(i,r,n,e,t){return i=i+r+t|0,e=Rr(e^i,8),n=n+e|0,r=Rr(r^n,7),{a:i,b:r,c:n,d:e}}class Ie extends ce{constructor(i,r){super();this.finished=!1,this.destroyed=!1,this.length=0,this.pos=0,dr(i),dr(r),this.blockLen=i,this.outputLen=r,this.buffer=new Uint8Array(i),this.buffer32=hr(this.buffer)}update(i){Fr(this),i=wr(i),si(i);let{blockLen:r,buffer:n,buffer32:e}=this,t=i.length,$=i.byteOffset,f=i.buffer;for(let Z=0;Z<t;){if(this.pos===r)ei(e),this.compress(e,0,!1),ei(e),this.pos=0;let J=Math.min(r-this.pos,t-Z),h=$+Z;if(J===r&&!(h%4)&&Z+J<t){let Q=new Uint32Array(f,h,Math.floor((t-Z)/4));ei(Q);for(let w=0;Z+r<t;w+=e.length,Z+=r)this.length+=r,this.compress(Q,w,!1);ei(Q);continue}n.set(i.subarray(Z,Z+J),this.pos),this.pos+=J,this.length+=J,Z+=J}return this}digestInto(i){Fr(this),Vn(i,this);let{pos:r,buffer32:n}=this;this.finished=!0,Qr(this.buffer.subarray(r)),ei(n),this.compress(n,0,!0),ei(n);let e=hr(i);this.get().forEach((t,$)=>e[$]=qt(t))}digest(){let{buffer:i,outputLen:r}=this;this.digestInto(i);let n=i.slice(0,r);return this.destroy(),n}_cloneInto(i){let{buffer:r,length:n,finished:e,destroyed:t,outputLen:$,pos:f}=this;return i||(i=new this.constructor({dkLen:$})),i.set(...this.get()),i.buffer.set(r),i.destroyed=t,i.finished=e,i.length=n,i.pos=f,i.outputLen=$,i}clone(){return this._cloneInto()}}function ge(i,r,n,e,t,$,f,Z,J,h,Q,w,V,Y,X,c,W,z,g,K){let I=0;for(let m=0;m<e;m++)({a:t,b:J,c:V,d:W}=Ki(t,J,V,W,n[r+i[I++]])),{a:t,b:J,c:V,d:W}=Gi(t,J,V,W,n[r+i[I++]]),{a:$,b:h,c:Y,d:z}=Ki($,h,Y,z,n[r+i[I++]]),{a:$,b:h,c:Y,d:z}=Gi($,h,Y,z,n[r+i[I++]]),{a:f,b:Q,c:X,d:g}=Ki(f,Q,X,g,n[r+i[I++]]),{a:f,b:Q,c:X,d:g}=Gi(f,Q,X,g,n[r+i[I++]]),{a:Z,b:w,c,d:K}=Ki(Z,w,c,K,n[r+i[I++]]),{a:Z,b:w,c,d:K}=Gi(Z,w,c,K,n[r+i[I++]]),{a:t,b:h,c:X,d:K}=Ki(t,h,X,K,n[r+i[I++]]),{a:t,b:h,c:X,d:K}=Gi(t,h,X,K,n[r+i[I++]]),{a:$,b:Q,c,d:W}=Ki($,Q,c,W,n[r+i[I++]]),{a:$,b:Q,c,d:W}=Gi($,Q,c,W,n[r+i[I++]]),{a:f,b:w,c:V,d:z}=Ki(f,w,V,z,n[r+i[I++]]),{a:f,b:w,c:V,d:z}=Gi(f,w,V,z,n[r+i[I++]]),{a:Z,b:J,c:Y,d:g}=Ki(Z,J,Y,g,n[r+i[I++]]),{a:Z,b:J,c:Y,d:g}=Gi(Z,J,Y,g,n[r+i[I++]]);return{v0:t,v1:$,v2:f,v3:Z,v4:J,v5:h,v6:Q,v7:w,v8:V,v9:Y,v10:X,v11:c,v12:W,v13:z,v14:g,v15:K}}var ci={CHUNK_START:1,CHUNK_END:2,PARENT:4,ROOT:8,KEYED_HASH:16,DERIVE_KEY_CONTEXT:32,DERIVE_KEY_MATERIAL:64},oi=Mt.slice(),At=(()=>{let i=Array.from({length:16},(e,t)=>t),r=(e)=>[2,6,3,10,7,0,4,13,1,11,12,5,9,14,15,8].map((t)=>e[t]),n=[];for(let e=0,t=i;e<7;e++,t=r(t))n.push(...t);return Uint8Array.from(n)})();class ze extends Ie{constructor(i={},r=0){super(64,i.dkLen===void 0?32:i.dkLen);this.chunkPos=0,this.chunksDone=0,this.flags=0,this.stack=[],this.posOut=0,this.bufferOut32=new Uint32Array(16),this.chunkOut=0,this.enableXOF=!0;let{key:n,context:e}=i,t=e!==void 0;if(n!==void 0){if(t)throw Error('Only "key" or "context" can be specified at same time');let $=wr(n).slice();si($,32),this.IV=hr($),ei(this.IV),this.flags=r|ci.KEYED_HASH}else if(t){let $=wr(e),f=new ze({dkLen:32},ci.DERIVE_KEY_CONTEXT).update($).digest();this.IV=hr(f),ei(this.IV),this.flags=r|ci.DERIVE_KEY_MATERIAL}else this.IV=oi.slice(),this.flags=r;this.state=this.IV.slice(),this.bufferOut=Ot(this.bufferOut32)}get(){return[]}set(){}b2Compress(i,r,n,e=0){let{state:t,pos:$}=this,{h:f,l:Z}=We(BigInt(i),!0),{v0:J,v1:h,v2:Q,v3:w,v4:V,v5:Y,v6:X,v7:c,v8:W,v9:z,v10:g,v11:K,v12:I,v13:m,v14:R,v15:C}=ge(At,e,n,7,t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],oi[0],oi[1],oi[2],oi[3],f,Z,$,r);t[0]=J^W,t[1]=h^z,t[2]=Q^g,t[3]=w^K,t[4]=V^I,t[5]=Y^m,t[6]=X^R,t[7]=c^C}compress(i,r=0,n=!1){let e=this.flags;if(!this.chunkPos)e|=ci.CHUNK_START;if(this.chunkPos===15||n)e|=ci.CHUNK_END;if(!n)this.pos=this.blockLen;if(this.b2Compress(this.chunksDone,e,i,r),this.chunkPos+=1,this.chunkPos===16||n){let t=this.state;this.state=this.IV.slice();for(let $,f=this.chunksDone+1;n||!(f&1);f>>=1){if(!($=this.stack.pop()))break;this.buffer32.set($,0),this.buffer32.set(t,8),this.pos=this.blockLen,this.b2Compress(0,this.flags|ci.PARENT,this.buffer32,0),t=this.state,this.state=this.IV.slice()}this.chunksDone++,this.chunkPos=0,this.stack.push(t)}this.pos=0}_cloneInto(i){i=super._cloneInto(i);let{IV:r,flags:n,state:e,chunkPos:t,posOut:$,chunkOut:f,stack:Z,chunksDone:J}=this;return i.state.set(e.slice()),i.stack=Z.map((h)=>Uint32Array.from(h)),i.IV.set(r),i.flags=n,i.chunkPos=t,i.chunksDone=J,i.posOut=$,i.chunkOut=f,i.enableXOF=this.enableXOF,i.bufferOut32.set(this.bufferOut32),i}destroy(){this.destroyed=!0,Qr(this.state,this.buffer32,this.IV,this.bufferOut32),Qr(...this.stack)}b2CompressOut(){let{state:i,pos:r,flags:n,buffer32:e,bufferOut32:t}=this,{h:$,l:f}=We(BigInt(this.chunkOut++));ei(e);let{v0:Z,v1:J,v2:h,v3:Q,v4:w,v5:V,v6:Y,v7:X,v8:c,v9:W,v10:z,v11:g,v12:K,v13:I,v14:m,v15:R}=ge(At,0,e,7,i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],oi[0],oi[1],oi[2],oi[3],f,$,r,n);t[0]=Z^c,t[1]=J^W,t[2]=h^z,t[3]=Q^g,t[4]=w^K,t[5]=V^I,t[6]=Y^m,t[7]=X^R,t[8]=i[0]^c,t[9]=i[1]^W,t[10]=i[2]^z,t[11]=i[3]^g,t[12]=i[4]^K,t[13]=i[5]^I,t[14]=i[6]^m,t[15]=i[7]^R,ei(e),ei(t),this.posOut=0}finish(){if(this.finished)return;this.finished=!0,Qr(this.buffer.subarray(this.pos));let i=this.flags|ci.ROOT;if(this.stack.length)i|=ci.PARENT,ei(this.buffer32),this.compress(this.buffer32,0,!0),ei(this.buffer32),this.chunksDone=0,this.pos=this.blockLen;else i|=(!this.chunkPos?ci.CHUNK_START:0)|ci.CHUNK_END;this.flags=i,this.b2CompressOut()}writeInto(i){Fr(this,!1),si(i),this.finish();let{blockLen:r,bufferOut:n}=this;for(let e=0,t=i.length;e<t;){if(this.posOut>=r)this.b2CompressOut();let $=Math.min(r-this.posOut,t-e);i.set(n.subarray(this.posOut,this.posOut+$),e),this.posOut+=$,e+=$}return i}xofInto(i){if(!this.enableXOF)throw Error("XOF is not possible after digest call");return this.writeInto(i)}xof(i){return dr(i),this.xofInto(new Uint8Array(i))}digestInto(i){if(Vn(i,this),this.finished)throw Error("digest() was already called");return this.enableXOF=!1,this.writeInto(i),this.destroy(),i}digest(){return this.digestInto(new Uint8Array(this.outputLen))}}var Tt=Ct((i)=>new ze(i));var Ue=new Uint8Array([48,46,2,1,0,48,5,6,3,43,101,112,4,34,4,32]);function Dt(i){let r=new Uint8Array(Ue.length+32);return r.set(Ue),r.set(i.subarray(0,32),Ue.length),r}function pt(i){return typeof i==="string"?new TextEncoder().encode(i):i}function ur(i){let r=new ArrayBuffer(i.byteLength);return new Uint8Array(r).set(i),r}class Ke{verifyKeys=new Map;signKeys=new Map;async genRandomBytes(i){return wn(i)}async gen256BitSecureRandomSeed(){return wn(32)}async encryptXSalsa20Poly1305Combined(i,r){let n=wn(24),t=Xe(r,n).encrypt(i);return new Uint8Array([...n,...t])}async decryptXSalsa20Poly1305Combined(i,r){let n=i.slice(0,24),e=i.slice(24);return Xe(r,n).decrypt(e)}async deriveEd25519KeyPair(i){let r=i,n=Dt(r),e=await globalThis.crypto.subtle.importKey("pkcs8",ur(n),{name:"Ed25519"},!0,["sign"]),t=await globalThis.crypto.subtle.exportKey("jwk",e);if(typeof t.x!=="string")throw Error("Ed25519 JWK missing x");let $=await globalThis.crypto.subtle.importKey("jwk",{kty:"OKP",crv:"Ed25519",x:t.x},{name:"Ed25519"},!0,["verify"]),f=new Uint8Array(await globalThis.crypto.subtle.exportKey("raw",$)),Z=new Uint8Array(64);return Z.set(r,0),Z.set(f,32),this.signKeys.set(fi(r),e),this.verifyKeys.set(fi(f),$),{keyType:"ed25519",privateKey:Z,publicKey:f}}async importSignKey(i){let r=i.subarray(0,32),n=fi(r),e=this.signKeys.get(n);if(e)return e;let t=Dt(r),$=await globalThis.crypto.subtle.importKey("pkcs8",ur(t),{name:"Ed25519"},!1,["sign"]);return this.signKeys.set(n,$),$}async importVerifyKey(i){let r=fi(i),n=this.verifyKeys.get(r);if(n)return n;let e=await globalThis.crypto.subtle.importKey("raw",ur(i),{name:"Ed25519"},!1,["verify"]);return this.verifyKeys.set(r,e),e}async signEd25519(i,r){let n=pt(i),e=await this.importSignKey(r),t=await globalThis.crypto.subtle.sign({name:"Ed25519"},e,ur(n));return new Uint8Array(t)}async checkSigEd25519(i,r,n){let e=pt(r);try{let t=await this.importVerifyKey(n);return await globalThis.crypto.subtle.verify({name:"Ed25519"},t,ur(i),ur(e))}catch{return!1}}async blake3(i){return Tt(i)}}var g0=new Ke,mi=g0;import{useEffect as an,useState as ye}from"react";class Ge{db;constructor(i){this.db=i}async enq(i){let r=[...i];if(r.length===0)return;let n=this.db.transaction(Ji,"readwrite"),e=n.objectStore(Ji);return new Promise((t,$)=>{n.oncomplete=()=>t(),n.onerror=()=>$(n.error);for(let f of r){let Z=`${f.host}:${f.seq}`;e.put(f,Z)}})}async deq(i,r){let n=[...r];if(n.length===0)return;let e=this.db.transaction(Ji,"readwrite"),t=e.objectStore(Ji);return new Promise(($,f)=>{e.oncomplete=()=>$(),e.onerror=()=>f(e.error);for(let Z of n){let J=`${i}:${Z}`;t.delete(J)}})}async list(){let r=this.db.transaction(Ji,"readonly").objectStore(Ji);return new Promise((n,e)=>{let t=r.getAll();t.onsuccess=()=>n(t.result),t.onerror=()=>e(t.error)})}async count(){let r=this.db.transaction(Ji,"readonly").objectStore(Ji);return new Promise((n,e)=>{let t=r.count();t.onsuccess=()=>n(t.result),t.onerror=()=>e(t.error)})}async wipe(){let i=this.db.transaction(Ji,"readwrite"),r=i.objectStore(Ji);return new Promise((n,e)=>{i.oncomplete=()=>n(),i.onerror=()=>e(i.error),r.clear()})}}function xt(i){return{label:i.label,handle:new URL(i.handle),idx:i.idx,lastSeq:i.lastSeq||0,clockOffset:i.clockOffset,subscription:i.subscription}}function z0(i,r){let n={...i};if(r.setLastSeq!==void 0)n.lastSeq=r.setLastSeq;else if(r.lastSeq!==void 0){let e=n.lastSeq||0;if(r.lastSeq>e)n.lastSeq=r.lastSeq}return delete n.numBags,delete n.numDupes,n}class oe{db;constructor(i){this.db=i}async add(i){return this.put({...i,lastSeq:0})}async put(i){let r={...i,handle:i.handle.toString(),lastSeq:i.lastSeq??0},n=this.db.transaction(ti,"readwrite"),e=n.objectStore(ti);return new Promise((t,$)=>{n.oncomplete=()=>t(),n.onerror=()=>$(n.error),e.put(r)})}async touch(i,r){return this.recordStats(i,{lastSeq:r})}async recordStats(i,r){let n=this.db.transaction(ti,"readwrite"),e=n.objectStore(ti);return new Promise((t,$)=>{n.oncomplete=()=>t(),n.onerror=()=>$(n.error);let f=e.get(i);f.onsuccess=()=>{let Z=f.result;if(!Z)return;e.put(z0(Z,r))}})}async get(i){let n=this.db.transaction(ti,"readonly").objectStore(ti);return new Promise((e,t)=>{let $=n.get(i);$.onsuccess=()=>{let f=$.result;if(!f)e(void 0);else e(xt(f))},$.onerror=()=>t($.error)})}async set(i,r){let n=await this.get(i);if(!n)return 13;try{return await this.put({...n,...r}),0}catch{return 18}}async del(i){let r=this.db.transaction(ti,"readwrite"),n=r.objectStore(ti);return new Promise((e,t)=>{r.oncomplete=()=>e(),r.onerror=()=>t(r.error),n.delete(i)})}async list(){let r=this.db.transaction(ti,"readonly").objectStore(ti);return new Promise((n,e)=>{let t=r.getAll();t.onsuccess=()=>{let $=t.result;n($.map(xt))},t.onerror=()=>e(t.error)})}async wipe(){let i=this.db.transaction(ti,"readwrite"),r=i.objectStore(ti);return new Promise((n,e)=>{i.oncomplete=()=>n(),i.onerror=()=>e(i.error),r.clear()})}}class me{crypto;db;constructor(i,r){this.crypto=r;this.db=i}async add(i){let r=this.db.transaction(p,"readwrite"),n=r.objectStore(p);return new Promise((e)=>{if(i.length===0){e([]);return}let t=Array(i.length).fill(0);r.oncomplete=()=>e(t),r.onerror=()=>{for(let $=0;$<t.length;$++)t[$]=18;e(t)};for(let $=0;$<i.length;$++){let{key:f,data:Z}=i[$],J=d(f),h=n.put(Z,J);h.onerror=(Q)=>{Q.preventDefault(),t[$]=18}}})}async del(i){let r=[...i];if(r.length===0)return;let n=this.db.transaction(p,"readwrite"),e=n.objectStore(p);return new Promise((t,$)=>{n.oncomplete=()=>t(),n.onerror=()=>$(n.error);for(let f of r){let Z=d(f);e.delete(Z)}})}async get(i){let n=this.db.transaction(p,"readonly").objectStore(p);return new Promise((e,t)=>{let $=d(i),f=n.get($);f.onsuccess=async()=>{let Z=f.result;if(Z)e(await Pi(i,Z,this.crypto));else e(void 0)},f.onerror=()=>t(f.error)})}async has(i){return await this.get(i)!==void 0}async list(i){let r=i?.apld,n=i?.body!==!1,t=this.db.transaction(p,"readonly").objectStore(p);return new Promise(($,f)=>{let Z=[],J=r===void 0?t.openCursor():t.index(Nr).openCursor(IDBKeyRange.only(r));J.onsuccess=(h)=>{let Q=h.target.result;if(Q){let w=r===void 0?Q.key:Q.primaryKey,V=Q.value;Z.push({hash:v(w),data:V}),Q.continue()}else Promise.all(Z.map(({hash:w,data:V})=>Pi(w,V,this.crypto,{body:n}))).then($).catch(f)},J.onerror=()=>f(J.error)})}async count(i){let n=this.db.transaction(p,"readonly").objectStore(p);return new Promise((e,t)=>{let $=i===void 0?n.count():n.index(Nr).count(IDBKeyRange.only(i));$.onsuccess=()=>e($.result),$.onerror=()=>t($.error)})}async listKeys(){let r=this.db.transaction(p,"readonly").objectStore(p);return new Promise((n,e)=>{let t=[],$=r.openKeyCursor();$.onsuccess=(f)=>{let Z=f.target.result;if(Z)t.push(v(Z.key)),Z.continue();else n(t)},$.onerror=()=>e($.error)})}async last(i){let n=this.db.transaction(p,"readonly").objectStore(p);return new Promise((e,t)=>{let $,f=n.openCursor();f.onsuccess=async(Z)=>{let J=Z.target.result;if(J){let{key:h,value:Q}=J;if(b(i,Q.eid)){if(!$||(Q.ctr??0)>($.data.ctr??0)||(Q.ctr??0)===($.data.ctr??0)&&(Q.off??0)>($.data.off??0))$={key:h,data:Q}}J.continue()}else if($){let h=v($.key);e(await Pi(h,$.data,this.crypto))}else e(void 0)},f.onerror=()=>t(f.error)})}async markApplied(i){let r=[...i];if(r.length===0)return;let n=this.db.transaction(p,"readwrite"),e=n.objectStore(p);return new Promise((t,$)=>{n.oncomplete=()=>t(),n.onerror=()=>$(n.error);for(let f of r){let Z=d(f),J=e.get(Z);J.onsuccess=()=>{let h=J.result;if(!h)return;xi(h,yi),e.put(h,Z)},J.onerror=(h)=>{h.preventDefault()}}})}async markFailed(i){let r=[...i];if(r.length===0)return;let n=this.db.transaction(p,"readwrite"),e=n.objectStore(p);return new Promise((t,$)=>{n.oncomplete=()=>t(),n.onerror=()=>$(n.error);for(let{key:f,err:Z}of r){let J=d(f),h=e.get(J);h.onsuccess=()=>{let Q=h.result;if(!Q)return;xi(Q,Yi,Z),e.put(Q,J)},h.onerror=(Q)=>{Q.preventDefault()}}})}async wipe(){let i=this.db.transaction(p,"readwrite"),r=i.objectStore(p);return new Promise((n,e)=>{i.oncomplete=()=>n(),i.onerror=()=>e(i.error),r.clear()})}}var qi={encode(i,r){let n=i.writeVarString(r.handle);if(n!==0)return n;let e=i.writeVarString(r.label);if(e!==0)return e;return i.writeVarInt(r.idx??0)},decode(i){let[r,n]=i.readVarString();if(n!==0)return l(n);let[e,t]=i.readVarString();if(t!==0)return l(t);let[$,f]=i.readVarInt();if(f!==0)return l(f);return u({handle:r,label:e,idx:$})}};var Or=1,Xn={encode(i,r){if(r.v!==Or)return 10;let[,n]=ii(r.masterSeed);if(n!==0)return n;let e=i.writeVarInt(r.v);if(e!==0)return e;i.writeBytes(r.masterSeed);let t=i.writeVarInt(r.hosts.length);if(t!==0)return t;for(let $ of r.hosts){let f=i.writeStruct(qi,$);if(f!==0)return f}return 0},decode(i){let[r,n]=i.readVarInt();if(n!==0)return l(n);if(r!==Or)return l(14);let[e,t]=i.readBytes(ui);if(t!==0)return l(t);if(e===void 0)return l(14);let[$,f]=ii(e);if(f!==0)return l(f);if($===void 0)return l(14);let[Z,J]=i.readVarInt();if(J!==0)return l(J);if(Z===void 0||Z<0)return l(10);let h=[];for(let Q=0;Q<Z;Q++){let[w,V]=i.readStruct(qi);if(V!==0)return l(V);if(w===void 0)return l(14);h.push(w)}return u({v:Or,masterSeed:$,hosts:h})}};function ae(i,r){let[n,e]=ii(i);if(e!==0)return l(e);if(n===void 0)return l(10);let[t,$]=ii(n.slice());if($!==0)return l($);if(t===void 0)return l(10);return u({v:Or,masterSeed:t,hosts:r.map((f)=>({handle:f.handle,label:f.label,idx:f.idx??0}))})}var yr={encode(i,r){let[,n]=ii(r.masterSeed);if(n!==0)return n;i.writeBytes(r.masterSeed);let e=i.writeVarInt(r.hosts.length);if(e!==0)return e;for(let t of r.hosts){let $=i.writeStruct(qi,t);if($!==0)return $}return 0},decode(i){let[r,n]=i.readBytes(ui);if(n!==0)return l(n);if(r===void 0)return l(14);let[e,t]=ii(r);if(t!==0)return l(t);if(e===void 0)return l(14);let[$,f]=i.readVarInt();if(f!==0)return l(f);if($===void 0||$<0)return l(10);let Z=[];for(let J=0;J<$;J++){let[h,Q]=i.readStruct(qi);if(Q!==0)return l(Q);if(h===void 0)return l(14);Z.push(h)}return u({masterSeed:e,hosts:Z})}};function ai(i){let r=new Uint8Array(i);if(i>0)crypto.getRandomValues(r);return r}var Ci=32,jt=-7,Lt=-8,st=-257,Pr=[{type:"public-key",alg:jt},{type:"public-key",alg:Lt},{type:"public-key",alg:st}];function cn(i){return i.trim().toLowerCase().replace(/\.$/,"")||"localhost"}function Mi(i){let r=new Uint8Array(i.byteLength);return r.set(i),r}function Hi(i){if(i?.rpId!==void 0)return u(i.rpId);if(typeof location>"u")return l(9);return u(cn(location.hostname))}function Ai(){if(typeof navigator>"u"||!navigator.credentials||typeof PublicKeyCredential>"u")return 24;return 0}function Ti(i){if(i===null||i.type!=="public-key"||!("rawId"in i)||typeof i.getClientExtensionResults!=="function")return l(27);return u(i)}async function qr(i){if(typeof PublicKeyCredential>"u")return!1;let r=PublicKeyCredential.getClientCapabilities;if(typeof r!=="function")return!0;let n=await r.call(PublicKeyCredential);if(i in n)return n[i]===!0;return!0}function kt(){return qr("extension:largeBlob")}async function Wn(i){let r=Ai();if(r!==0)return l(r);let[n,e]=Hi(i);if(e!==0)return l(e);if(n===void 0)return l(9);let t=i?.userName??"diplomatic-seed",$={residentKey:"required",requireResidentKey:!0,userVerification:"required"};if(i?.authenticatorAttachment!==void 0)$.authenticatorAttachment=i.authenticatorAttachment;let f={largeBlob:{support:"required"}},Z;try{Z=await navigator.credentials.create({publicKey:{challenge:ai(Ci),rp:{id:n,name:i?.rpName??"DIPLOMATIC"},user:{id:ai(16),name:t,displayName:t},pubKeyCredParams:Pr,authenticatorSelection:$,extensions:f}})}catch{return l(24)}let[J,h]=Ti(Z);if(h!==0)return l(h);if(J===void 0)return l(27);if(J.getClientExtensionResults().largeBlob?.supported!==!0)return l(24);return u(new Uint8Array(J.rawId))}async function Cr(i,r,n){let e=Ai();if(e!==0)return e;let[t,$]=Hi(n);if($!==0)return $;if(t===void 0)return 9;let f={largeBlob:{write:Mi(r)}},Z;try{Z=await navigator.credentials.get({publicKey:{challenge:ai(Ci),rpId:t,allowCredentials:[{type:"public-key",id:Mi(i)}],userVerification:"required",extensions:f}})}catch{return 24}let[J,h]=Ti(Z);if(h!==0)return h;if(J===void 0)return 27;if(J.getClientExtensionResults().largeBlob?.written!==!0)return 24;return 0}async function In(i,r){let n=Ai();if(n!==0)return l(n);let[e,t]=Hi(r);if(t!==0)return l(t);if(e===void 0)return l(9);let $={largeBlob:{read:!0}},f;try{let w={challenge:ai(Ci),rpId:e,userVerification:"required",extensions:$};if(i!==void 0)w.allowCredentials=[{type:"public-key",id:Mi(i)}];f=await navigator.credentials.get({publicKey:w})}catch{return l(24)}let[Z,J]=Ti(f);if(J!==0)return l(J);if(Z===void 0)return l(27);let Q=Z.getClientExtensionResults().largeBlob?.blob;if(Q===void 0)return l(7);return u({blob:new Uint8Array(Q),credId:new Uint8Array(Z.rawId)})}var Mr=new TextEncoder().encode("diplomatic.prf.v1"),de=32;async function U0(){return qr("extension:prf")}async function Fe(i){let r=Ai();if(r!==0)return l(r);let[n,e]=Hi(i);if(e!==0)return l(e);if(n===void 0)return l(9);let t=i?.userName??"diplomatic-prf",$={residentKey:"required",requireResidentKey:!0,userVerification:"required",authenticatorAttachment:i?.authenticatorAttachment??"platform"},f;try{f=await navigator.credentials.create({publicKey:{challenge:ai(Ci),rp:{id:n,name:i?.rpName??"DIPLOMATIC"},user:{id:ai(16),name:t,displayName:t},pubKeyCredParams:Pr,authenticatorSelection:$,extensions:{prf:{}}}})}catch{return l(24)}let[Z,J]=Ti(f);if(J!==0)return l(J);if(Z===void 0)return l(27);let h=Z.getClientExtensionResults();return u({credId:new Uint8Array(Z.rawId),prfEnabled:h.prf?.enabled===!0})}async function Vr(i){let r=Ai();if(r!==0)return l(r);let[n,e]=Hi(i);if(e!==0)return l(e);if(n===void 0)return l(9);let t=i?.salt??Mr,$=Mi(t),f={challenge:ai(Ci),rpId:n,userVerification:"required",extensions:{prf:{eval:{first:$}}}};if(i?.credId!==void 0)f.allowCredentials=[{type:"public-key",id:Mi(i.credId)}];let Z;try{Z=await navigator.credentials.get({publicKey:f})}catch{return l(24)}let[J,h]=Ti(Z);if(h!==0)return l(h);if(J===void 0)return l(27);let Q=J.getClientExtensionResults().prf?.results;if(Q?.first===void 0)return l(7);let w=Q.first,V=w instanceof ArrayBuffer?new Uint8Array(w):new Uint8Array(w.buffer,w.byteOffset,w.byteLength),Y=V.byteLength>=de?V.slice(0,de):V;if(Y.byteLength!==de)return l(27);return u({prf:Y,credId:new Uint8Array(J.rawId)})}var gn='var w0=64;var XJ=32,T0=8;var I$=32;var WJ=30000,GJ=512,j;((w)=>{w[w.Success=0]="Success";w[w.InvalidSignature=3]="InvalidSignature";w[w.ClockOutOfSync=4]="ClockOutOfSync";w[w.UserNotRegistered=5]="UserNotRegistered";w[w.ServerMisconfigured=6]="ServerMisconfigured";w[w.MissingBody=7]="MissingBody";w[w.ExtraBodyContent=8]="ExtraBodyContent";w[w.MissingParam=9]="MissingParam";w[w.InvalidParam=10]="InvalidParam";w[w.InvalidRequest=11]="InvalidRequest";w[w.InternalError=12]="InternalError";w[w.NotFound=13]="NotFound";w[w.InvalidMessage=14]="InvalidMessage";w[w.NoChange=15]="NoChange";w[w.DatabaseClosed=16]="DatabaseClosed";w[w.StorageError=17]="StorageError";w[w.DatabaseError=18]="DatabaseError";w[w.HashMismatch=19]="HashMismatch";w[w.DecryptionError=20]="DecryptionError";w[w.NotImplemented=21]="NotImplemented";w[w.MissingSeed=22]="MissingSeed";w[w.OutOfBounds=23]="OutOfBounds";w[w.HostError=24]="HostError";w[w.CommunicationError=25]="CommunicationError";w[w.VarLimitExceeded=26]="VarLimitExceeded";w[w.InvalidResponse=27]="InvalidResponse";w[w.ConnectionClosed=28]="ConnectionClosed"})(j||={});function zJ($){if(!$||typeof $!=="object")return!1;if(!("op"in $)||!("id"in $))return!1;return typeof $.op==="string"&&typeof $.id==="number"}function KJ($){let Z=$.length,J=0,Q=0;while(Q<Z){let V=$.charCodeAt(Q++);if((V&4294967168)===0){J++;continue}else if((V&4294965248)===0)J+=2;else{if(V>=55296&&V<=56319){if(Q<Z){let Y=$.charCodeAt(Q);if((Y&64512)===56320)++Q,V=((V&1023)<<10)+(Y&1023)+65536}}if((V&4294901760)===0)J+=3;else J+=4}}return J}function LQ($,Z,J){let Q=$.length,V=J,Y=0;while(Y<Q){let X=$.charCodeAt(Y++);if((X&4294967168)===0){Z[V++]=X;continue}else if((X&4294965248)===0)Z[V++]=X>>6&31|192;else{if(X>=55296&&X<=56319){if(Y<Q){let W=$.charCodeAt(Y);if((W&64512)===56320)++Y,X=((X&1023)<<10)+(W&1023)+65536}}if((X&4294901760)===0)Z[V++]=X>>12&15|224,Z[V++]=X>>6&63|128;else Z[V++]=X>>18&7|240,Z[V++]=X>>12&63|128,Z[V++]=X>>6&63|128}Z[V++]=X&63|128}}var xQ=new TextEncoder,fQ=50;function kQ($,Z,J){xQ.encodeInto($,Z.subarray(J))}function FJ($,Z,J){if($.length>fQ)kQ($,Z,J);else LQ($,Z,J)}var BQ=4096;function e$($,Z,J){let Q=Z,V=Q+J,Y=[],X="";while(Q<V){let W=$[Q++];if((W&128)===0)Y.push(W);else if((W&224)===192){let z=$[Q++]&63;Y.push((W&31)<<6|z)}else if((W&240)===224){let z=$[Q++]&63,K=$[Q++]&63;Y.push((W&31)<<12|z<<6|K)}else if((W&248)===240){let z=$[Q++]&63,K=$[Q++]&63,F=$[Q++]&63,N=(W&7)<<18|z<<12|K<<6|F;if(N>65535)N-=65536,Y.push(N>>>10&1023|55296),N=56320|N&1023;Y.push(N)}else Y.push(W);if(Y.length>=BQ)X+=String.fromCharCode(...Y),Y.length=0}if(Y.length>0)X+=String.fromCharCode(...Y);return X}var EQ=new TextDecoder,mQ=200;function gQ($,Z,J){let Q=$.subarray(Z,Z+J);return EQ.decode(Q)}function NJ($,Z,J){if(J>mQ)return gQ($,Z,J);else return e$($,Z,J)}class u0{type;data;constructor($,Z){this.type=$,this.data=Z}}class s extends Error{constructor($){super($);let Z=Object.create(s.prototype);Object.setPrototypeOf(this,Z),Object.defineProperty(this,"name",{configurable:!0,enumerable:!1,value:s.name})}}var l0=4294967295;function RJ($,Z,J){let Q=J/4294967296,V=J;$.setUint32(Z,Q),$.setUint32(Z+4,V)}function H$($,Z,J){let Q=Math.floor(J/4294967296),V=J;$.setUint32(Z,Q),$.setUint32(Z+4,V)}function M$($,Z){let J=$.getInt32(Z),Q=$.getUint32(Z+4);return J*4294967296+Q}function UJ($,Z){let J=$.getUint32(Z),Q=$.getUint32(Z+4);return J*4294967296+Q}var SQ=-1,vQ=4294967295,bQ=17179869183;function yQ({sec:$,nsec:Z}){if($>=0&&Z>=0&&$<=bQ)if(Z===0&&$<=vQ){let J=new Uint8Array(4);return new DataView(J.buffer).setUint32(0,$),J}else{let J=$/4294967296,Q=$&4294967295,V=new Uint8Array(8),Y=new DataView(V.buffer);return Y.setUint32(0,Z<<2|J&3),Y.setUint32(4,Q),V}else{let J=new Uint8Array(12),Q=new DataView(J.buffer);return Q.setUint32(0,Z),H$(Q,4,$),J}}function iQ($){let Z=$.getTime(),J=Math.floor(Z/1000),Q=(Z-J*1000)*1e6,V=Math.floor(Q/1e9);return{sec:J+V,nsec:Q-V*1e9}}function hQ($){if($ instanceof Date){let Z=iQ($);return yQ(Z)}else return null}function uQ($){let Z=new DataView($.buffer,$.byteOffset,$.byteLength);switch($.byteLength){case 4:{let J=Z.getUint32(0),Q=0;return{sec:J,nsec:0}}case 8:{let J=Z.getUint32(0),Q=Z.getUint32(4),V=(J&3)*4294967296+Q,Y=J>>>2;return{sec:V,nsec:Y}}case 12:{let J=M$(Z,4),Q=Z.getUint32(0);return{sec:J,nsec:Q}}default:throw new s(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${$.length}`)}}function lQ($){let Z=uQ($);return new Date(Z.sec*1000+Z.nsec/1e6)}var OJ={type:SQ,encode:hQ,decode:lQ};class p0{static defaultCodec=new p0;__brand;builtInEncoders=[];builtInDecoders=[];encoders=[];decoders=[];constructor(){this.register(OJ)}register({type:$,encode:Z,decode:J}){if($>=0)this.encoders[$]=Z,this.decoders[$]=J;else{let Q=-1-$;this.builtInEncoders[Q]=Z,this.builtInDecoders[Q]=J}}tryToEncode($,Z){for(let J=0;J<this.builtInEncoders.length;J++){let Q=this.builtInEncoders[J];if(Q!=null){let V=Q($,Z);if(V!=null){let Y=-1-J;return new u0(Y,V)}}}for(let J=0;J<this.encoders.length;J++){let Q=this.encoders[J];if(Q!=null){let V=Q($,Z);if(V!=null)return new u0(J,V)}}if($ instanceof u0)return $;return null}decode($,Z,J){let Q=Z<0?this.builtInDecoders[-1-Z]:this.decoders[Z];if(Q)return Q($,Z,J);else return new u0(Z,$)}}function pQ($){return $ instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&$ instanceof SharedArrayBuffer}function Q$($){if($ instanceof Uint8Array)return $;else if(ArrayBuffer.isView($))return new Uint8Array($.buffer,$.byteOffset,$.byteLength);else if(pQ($))return new Uint8Array($);else return Uint8Array.from($)}var nQ=100,cQ=2048;class C${extensionCodec;context;useBigInt64;maxDepth;initialBufferSize;sortKeys;forceFloat32;ignoreUndefined;forceIntegerToFloat;pos;view;bytes;entered=!1;constructor($){this.extensionCodec=$?.extensionCodec??p0.defaultCodec,this.context=$?.context,this.useBigInt64=$?.useBigInt64??!1,this.maxDepth=$?.maxDepth??nQ,this.initialBufferSize=$?.initialBufferSize??cQ,this.sortKeys=$?.sortKeys??!1,this.forceFloat32=$?.forceFloat32??!1,this.ignoreUndefined=$?.ignoreUndefined??!1,this.forceIntegerToFloat=$?.forceIntegerToFloat??!1,this.pos=0,this.view=new DataView(new ArrayBuffer(this.initialBufferSize)),this.bytes=new Uint8Array(this.view.buffer)}clone(){return new C$({extensionCodec:this.extensionCodec,context:this.context,useBigInt64:this.useBigInt64,maxDepth:this.maxDepth,initialBufferSize:this.initialBufferSize,sortKeys:this.sortKeys,forceFloat32:this.forceFloat32,ignoreUndefined:this.ignoreUndefined,forceIntegerToFloat:this.forceIntegerToFloat})}reinitializeState(){this.pos=0}encodeSharedRef($){if(this.entered)return this.clone().encodeSharedRef($);try{return this.entered=!0,this.reinitializeState(),this.doEncode($,1),this.bytes.subarray(0,this.pos)}finally{this.entered=!1}}encode($){if(this.entered)return this.clone().encode($);try{return this.entered=!0,this.reinitializeState(),this.doEncode($,1),this.bytes.slice(0,this.pos)}finally{this.entered=!1}}doEncode($,Z){if(Z>this.maxDepth)throw Error(`Too deep objects in depth ${Z}`);if($==null)this.encodeNil();else if(typeof $==="boolean")this.encodeBoolean($);else if(typeof $==="number")if(!this.forceIntegerToFloat)this.encodeNumber($);else this.encodeNumberAsFloat($);else if(typeof $==="string")this.encodeString($);else if(this.useBigInt64&&typeof $==="bigint")this.encodeBigInt64($);else this.encodeObject($,Z)}ensureBufferSizeToWrite($){let Z=this.pos+$;if(this.view.byteLength<Z)this.resizeBuffer(Z*2)}resizeBuffer($){let Z=new ArrayBuffer($),J=new Uint8Array(Z),Q=new DataView(Z);J.set(this.bytes),this.view=Q,this.bytes=J}encodeNil(){this.writeU8(192)}encodeBoolean($){if($===!1)this.writeU8(194);else this.writeU8(195)}encodeNumber($){if(!this.forceIntegerToFloat&&Number.isSafeInteger($))if($>=0)if($<128)this.writeU8($);else if($<256)this.writeU8(204),this.writeU8($);else if($<65536)this.writeU8(205),this.writeU16($);else if($<4294967296)this.writeU8(206),this.writeU32($);else if(!this.useBigInt64)this.writeU8(207),this.writeU64($);else this.encodeNumberAsFloat($);else if($>=-32)this.writeU8(224|$+32);else if($>=-128)this.writeU8(208),this.writeI8($);else if($>=-32768)this.writeU8(209),this.writeI16($);else if($>=-2147483648)this.writeU8(210),this.writeI32($);else if(!this.useBigInt64)this.writeU8(211),this.writeI64($);else this.encodeNumberAsFloat($);else this.encodeNumberAsFloat($)}encodeNumberAsFloat($){if(this.forceFloat32)this.writeU8(202),this.writeF32($);else this.writeU8(203),this.writeF64($)}encodeBigInt64($){if($>=BigInt(0))this.writeU8(207),this.writeBigUint64($);else this.writeU8(211),this.writeBigInt64($)}writeStringHeader($){if($<32)this.writeU8(160+$);else if($<256)this.writeU8(217),this.writeU8($);else if($<65536)this.writeU8(218),this.writeU16($);else if($<4294967296)this.writeU8(219),this.writeU32($);else throw Error(`Too long string: ${$} bytes in UTF-8`)}encodeString($){let J=KJ($);this.ensureBufferSizeToWrite(5+J),this.writeStringHeader(J),FJ($,this.bytes,this.pos),this.pos+=J}encodeObject($,Z){let J=this.extensionCodec.tryToEncode($,this.context);if(J!=null)this.encodeExtension(J);else if(Array.isArray($))this.encodeArray($,Z);else if(ArrayBuffer.isView($))this.encodeBinary($);else if(typeof $==="object")this.encodeMap($,Z);else throw Error(`Unrecognized object: ${Object.prototype.toString.apply($)}`)}encodeBinary($){let Z=$.byteLength;if(Z<256)this.writeU8(196),this.writeU8(Z);else if(Z<65536)this.writeU8(197),this.writeU16(Z);else if(Z<4294967296)this.writeU8(198),this.writeU32(Z);else throw Error(`Too large binary: ${Z}`);let J=Q$($);this.writeU8a(J)}encodeArray($,Z){let J=$.length;if(J<16)this.writeU8(144+J);else if(J<65536)this.writeU8(220),this.writeU16(J);else if(J<4294967296)this.writeU8(221),this.writeU32(J);else throw Error(`Too large array: ${J}`);for(let Q of $)this.doEncode(Q,Z+1)}countWithoutUndefined($,Z){let J=0;for(let Q of Z)if($[Q]!==void 0)J++;return J}encodeMap($,Z){let J=Object.keys($);if(this.sortKeys)J.sort();let Q=this.ignoreUndefined?this.countWithoutUndefined($,J):J.length;if(Q<16)this.writeU8(128+Q);else if(Q<65536)this.writeU8(222),this.writeU16(Q);else if(Q<4294967296)this.writeU8(223),this.writeU32(Q);else throw Error(`Too large map object: ${Q}`);for(let V of J){let Y=$[V];if(!(this.ignoreUndefined&&Y===void 0))this.encodeString(V),this.doEncode(Y,Z+1)}}encodeExtension($){if(typeof $.data==="function"){let J=$.data(this.pos+6),Q=J.length;if(Q>=4294967296)throw Error(`Too large extension object: ${Q}`);this.writeU8(201),this.writeU32(Q),this.writeI8($.type),this.writeU8a(J);return}let Z=$.data.length;if(Z===1)this.writeU8(212);else if(Z===2)this.writeU8(213);else if(Z===4)this.writeU8(214);else if(Z===8)this.writeU8(215);else if(Z===16)this.writeU8(216);else if(Z<256)this.writeU8(199),this.writeU8(Z);else if(Z<65536)this.writeU8(200),this.writeU16(Z);else if(Z<4294967296)this.writeU8(201),this.writeU32(Z);else throw Error(`Too large extension object: ${Z}`);this.writeI8($.type),this.writeU8a($.data)}writeU8($){this.ensureBufferSizeToWrite(1),this.view.setUint8(this.pos,$),this.pos++}writeU8a($){let Z=$.length;this.ensureBufferSizeToWrite(Z),this.bytes.set($,this.pos),this.pos+=Z}writeI8($){this.ensureBufferSizeToWrite(1),this.view.setInt8(this.pos,$),this.pos++}writeU16($){this.ensureBufferSizeToWrite(2),this.view.setUint16(this.pos,$),this.pos+=2}writeI16($){this.ensureBufferSizeToWrite(2),this.view.setInt16(this.pos,$),this.pos+=2}writeU32($){this.ensureBufferSizeToWrite(4),this.view.setUint32(this.pos,$),this.pos+=4}writeI32($){this.ensureBufferSizeToWrite(4),this.view.setInt32(this.pos,$),this.pos+=4}writeF32($){this.ensureBufferSizeToWrite(4),this.view.setFloat32(this.pos,$),this.pos+=4}writeF64($){this.ensureBufferSizeToWrite(8),this.view.setFloat64(this.pos,$),this.pos+=8}writeU64($){this.ensureBufferSizeToWrite(8),RJ(this.view,this.pos,$),this.pos+=8}writeI64($){this.ensureBufferSizeToWrite(8),H$(this.view,this.pos,$),this.pos+=8}writeBigUint64($){this.ensureBufferSizeToWrite(8),this.view.setBigUint64(this.pos,$),this.pos+=8}writeBigInt64($){this.ensureBufferSizeToWrite(8),this.view.setBigInt64(this.pos,$),this.pos+=8}}function _0($,Z){return new C$(Z).encodeSharedRef($)}function P$($){return`${$<0?"-":""}0x${Math.abs($).toString(16).padStart(2,"0")}`}var dQ=16,rQ=16;class $Z{hit=0;miss=0;caches;maxKeyLength;maxLengthPerKey;constructor($=dQ,Z=rQ){this.maxKeyLength=$,this.maxLengthPerKey=Z,this.caches=[];for(let J=0;J<this.maxKeyLength;J++)this.caches.push([])}canBeCached($){return $>0&&$<=this.maxKeyLength}find($,Z,J){let Q=this.caches[J-1];$:for(let V of Q){let Y=V.bytes;for(let X=0;X<J;X++)if(Y[X]!==$[Z+X])continue $;return V.str}return null}store($,Z){let J=this.caches[$.length-1],Q={bytes:$,str:Z};if(J.length>=this.maxLengthPerKey)J[Math.random()*J.length|0]=Q;else J.push(Q)}decode($,Z,J){let Q=this.find($,Z,J);if(Q!=null)return this.hit++,Q;this.miss++;let V=e$($,Z,J),Y=Uint8Array.prototype.slice.call($,Z,Z+J);return this.store(Y,V),V}}var ZZ="array",Y$="map_key",IJ="map_value",oQ=($)=>{if(typeof $==="string"||typeof $==="number")return $;throw new s("The type of key must be string or number but "+typeof $)};class HJ{stack=[];stackHeadPosition=-1;get length(){return this.stackHeadPosition+1}top(){return this.stack[this.stackHeadPosition]}pushArrayState($){let Z=this.getUninitializedStateFromPool();Z.type=ZZ,Z.position=0,Z.size=$,Z.array=Array($)}pushMapState($){let Z=this.getUninitializedStateFromPool();Z.type=Y$,Z.readCount=0,Z.size=$,Z.map={}}getUninitializedStateFromPool(){if(this.stackHeadPosition++,this.stackHeadPosition===this.stack.length){let $={type:void 0,size:0,array:void 0,position:0,readCount:0,map:void 0,key:null};this.stack.push($)}return this.stack[this.stackHeadPosition]}release($){if(this.stack[this.stackHeadPosition]!==$)throw Error("Invalid stack state. Released state is not on top of the stack.");if($.type===ZZ){let J=$;J.size=0,J.array=void 0,J.position=0,J.type=void 0}if($.type===Y$||$.type===IJ){let J=$;J.size=0,J.map=void 0,J.readCount=0,J.type=void 0}this.stackHeadPosition--}reset(){this.stack.length=0,this.stackHeadPosition=-1}}var V$=-1,JZ=new DataView(new ArrayBuffer(0)),aQ=new Uint8Array(JZ.buffer);try{JZ.getInt8(0)}catch($){if(!($ instanceof RangeError))throw Error("This module is not supported in the current JavaScript engine because DataView does not throw RangeError on out-of-bounds access")}var qJ=RangeError("Insufficient data"),sQ=new $Z;class w${extensionCodec;context;useBigInt64;rawStrings;maxStrLength;maxBinLength;maxArrayLength;maxMapLength;maxExtLength;keyDecoder;mapKeyConverter;totalPos=0;pos=0;view=JZ;bytes=aQ;headByte=V$;stack=new HJ;entered=!1;constructor($){this.extensionCodec=$?.extensionCodec??p0.defaultCodec,this.context=$?.context,this.useBigInt64=$?.useBigInt64??!1,this.rawStrings=$?.rawStrings??!1,this.maxStrLength=$?.maxStrLength??l0,this.maxBinLength=$?.maxBinLength??l0,this.maxArrayLength=$?.maxArrayLength??l0,this.maxMapLength=$?.maxMapLength??l0,this.maxExtLength=$?.maxExtLength??l0,this.keyDecoder=$?.keyDecoder!==void 0?$.keyDecoder:sQ,this.mapKeyConverter=$?.mapKeyConverter??oQ}clone(){return new w$({extensionCodec:this.extensionCodec,context:this.context,useBigInt64:this.useBigInt64,rawStrings:this.rawStrings,maxStrLength:this.maxStrLength,maxBinLength:this.maxBinLength,maxArrayLength:this.maxArrayLength,maxMapLength:this.maxMapLength,maxExtLength:this.maxExtLength,keyDecoder:this.keyDecoder})}reinitializeState(){this.totalPos=0,this.headByte=V$,this.stack.reset()}setBuffer($){let Z=Q$($);this.bytes=Z,this.view=new DataView(Z.buffer,Z.byteOffset,Z.byteLength),this.pos=0}appendBuffer($){if(this.headByte===V$&&!this.hasRemaining(1))this.setBuffer($);else{let Z=this.bytes.subarray(this.pos),J=Q$($),Q=new Uint8Array(Z.length+J.length);Q.set(Z),Q.set(J,Z.length),this.setBuffer(Q)}}hasRemaining($){return this.view.byteLength-this.pos>=$}createExtraByteError($){let{view:Z,pos:J}=this;return RangeError(`Extra ${Z.byteLength-J} of ${Z.byteLength} byte(s) found at buffer[${$}]`)}decode($){if(this.entered)return this.clone().decode($);try{this.entered=!0,this.reinitializeState(),this.setBuffer($);let Z=this.doDecodeSync();if(this.hasRemaining(1))throw this.createExtraByteError(this.pos);return Z}finally{this.entered=!1}}*decodeMulti($){if(this.entered){yield*this.clone().decodeMulti($);return}try{this.entered=!0,this.reinitializeState(),this.setBuffer($);while(this.hasRemaining(1))yield this.doDecodeSync()}finally{this.entered=!1}}async decodeAsync($){if(this.entered)return this.clone().decodeAsync($);try{this.entered=!0;let Z=!1,J;for await(let X of $){if(Z)throw this.entered=!1,this.createExtraByteError(this.totalPos);this.appendBuffer(X);try{J=this.doDecodeSync(),Z=!0}catch(W){if(!(W instanceof RangeError))throw W}this.totalPos+=this.pos}if(Z){if(this.hasRemaining(1))throw this.createExtraByteError(this.totalPos);return J}let{headByte:Q,pos:V,totalPos:Y}=this;throw RangeError(`Insufficient data in parsing ${P$(Q)} at ${Y} (${V} in the current buffer)`)}finally{this.entered=!1}}decodeArrayStream($){return this.decodeMultiAsync($,!0)}decodeStream($){return this.decodeMultiAsync($,!1)}async*decodeMultiAsync($,Z){if(this.entered){yield*this.clone().decodeMultiAsync($,Z);return}try{this.entered=!0;let J=Z,Q=-1;for await(let V of $){if(Z&&Q===0)throw this.createExtraByteError(this.totalPos);if(this.appendBuffer(V),J)Q=this.readArraySize(),J=!1,this.complete();try{while(!0)if(yield this.doDecodeSync(),--Q===0)break}catch(Y){if(!(Y instanceof RangeError))throw Y}this.totalPos+=this.pos}}finally{this.entered=!1}}doDecodeSync(){$:while(!0){let $=this.readHeadByte(),Z;if($>=224)Z=$-256;else if($<192)if($<128)Z=$;else if($<144){let Q=$-128;if(Q!==0){this.pushMapState(Q),this.complete();continue $}else Z={}}else if($<160){let Q=$-144;if(Q!==0){this.pushArrayState(Q),this.complete();continue $}else Z=[]}else{let Q=$-160;Z=this.decodeString(Q,0)}else if($===192)Z=null;else if($===194)Z=!1;else if($===195)Z=!0;else if($===202)Z=this.readF32();else if($===203)Z=this.readF64();else if($===204)Z=this.readU8();else if($===205)Z=this.readU16();else if($===206)Z=this.readU32();else if($===207)if(this.useBigInt64)Z=this.readU64AsBigInt();else Z=this.readU64();else if($===208)Z=this.readI8();else if($===209)Z=this.readI16();else if($===210)Z=this.readI32();else if($===211)if(this.useBigInt64)Z=this.readI64AsBigInt();else Z=this.readI64();else if($===217){let Q=this.lookU8();Z=this.decodeString(Q,1)}else if($===218){let Q=this.lookU16();Z=this.decodeString(Q,2)}else if($===219){let Q=this.lookU32();Z=this.decodeString(Q,4)}else if($===220){let Q=this.readU16();if(Q!==0){this.pushArrayState(Q),this.complete();continue $}else Z=[]}else if($===221){let Q=this.readU32();if(Q!==0){this.pushArrayState(Q),this.complete();continue $}else Z=[]}else if($===222){let Q=this.readU16();if(Q!==0){this.pushMapState(Q),this.complete();continue $}else Z={}}else if($===223){let Q=this.readU32();if(Q!==0){this.pushMapState(Q),this.complete();continue $}else Z={}}else if($===196){let Q=this.lookU8();Z=this.decodeBinary(Q,1)}else if($===197){let Q=this.lookU16();Z=this.decodeBinary(Q,2)}else if($===198){let Q=this.lookU32();Z=this.decodeBinary(Q,4)}else if($===212)Z=this.decodeExtension(1,0);else if($===213)Z=this.decodeExtension(2,0);else if($===214)Z=this.decodeExtension(4,0);else if($===215)Z=this.decodeExtension(8,0);else if($===216)Z=this.decodeExtension(16,0);else if($===199){let Q=this.lookU8();Z=this.decodeExtension(Q,1)}else if($===200){let Q=this.lookU16();Z=this.decodeExtension(Q,2)}else if($===201){let Q=this.lookU32();Z=this.decodeExtension(Q,4)}else throw new s(`Unrecognized type byte: ${P$($)}`);this.complete();let J=this.stack;while(J.length>0){let Q=J.top();if(Q.type===ZZ)if(Q.array[Q.position]=Z,Q.position++,Q.position===Q.size)Z=Q.array,J.release(Q);else continue $;else if(Q.type===Y$){if(Z==="__proto__")throw new s("The key __proto__ is not allowed");Q.key=this.mapKeyConverter(Z),Q.type=IJ;continue $}else if(Q.map[Q.key]=Z,Q.readCount++,Q.readCount===Q.size)Z=Q.map,J.release(Q);else{Q.key=null,Q.type=Y$;continue $}}return Z}}readHeadByte(){if(this.headByte===V$)this.headByte=this.readU8();return this.headByte}complete(){this.headByte=V$}readArraySize(){let $=this.readHeadByte();switch($){case 220:return this.readU16();case 221:return this.readU32();default:if($<160)return $-144;else throw new s(`Unrecognized array type byte: ${P$($)}`)}}pushMapState($){if($>this.maxMapLength)throw new s(`Max length exceeded: map length (${$}) > maxMapLengthLength (${this.maxMapLength})`);this.stack.pushMapState($)}pushArrayState($){if($>this.maxArrayLength)throw new s(`Max length exceeded: array length (${$}) > maxArrayLength (${this.maxArrayLength})`);this.stack.pushArrayState($)}decodeString($,Z){if(!this.rawStrings||this.stateIsMapKey())return this.decodeUtf8String($,Z);return this.decodeBinary($,Z)}decodeUtf8String($,Z){if($>this.maxStrLength)throw new s(`Max length exceeded: UTF-8 byte length (${$}) > maxStrLength (${this.maxStrLength})`);if(this.bytes.byteLength<this.pos+Z+$)throw qJ;let J=this.pos+Z,Q;if(this.stateIsMapKey()&&this.keyDecoder?.canBeCached($))Q=this.keyDecoder.decode(this.bytes,J,$);else Q=NJ(this.bytes,J,$);return this.pos+=Z+$,Q}stateIsMapKey(){if(this.stack.length>0)return this.stack.top().type===Y$;return!1}decodeBinary($,Z){if($>this.maxBinLength)throw new s(`Max length exceeded: bin length (${$}) > maxBinLength (${this.maxBinLength})`);if(!this.hasRemaining($+Z))throw qJ;let J=this.pos+Z,Q=this.bytes.subarray(J,J+$);return this.pos+=Z+$,Q}decodeExtension($,Z){if($>this.maxExtLength)throw new s(`Max length exceeded: ext length (${$}) > maxExtLength (${this.maxExtLength})`);let J=this.view.getInt8(this.pos+Z),Q=this.decodeBinary($,Z+1);return this.extensionCodec.decode(Q,J,this.context)}lookU8(){return this.view.getUint8(this.pos)}lookU16(){return this.view.getUint16(this.pos)}lookU32(){return this.view.getUint32(this.pos)}readU8(){let $=this.view.getUint8(this.pos);return this.pos++,$}readI8(){let $=this.view.getInt8(this.pos);return this.pos++,$}readU16(){let $=this.view.getUint16(this.pos);return this.pos+=2,$}readI16(){let $=this.view.getInt16(this.pos);return this.pos+=2,$}readU32(){let $=this.view.getUint32(this.pos);return this.pos+=4,$}readI32(){let $=this.view.getInt32(this.pos);return this.pos+=4,$}readU64(){let $=UJ(this.view,this.pos);return this.pos+=8,$}readI64(){let $=M$(this.view,this.pos);return this.pos+=8,$}readU64AsBigInt(){let $=this.view.getBigUint64(this.pos);return this.pos+=8,$}readI64AsBigInt(){let $=this.view.getBigInt64(this.pos);return this.pos+=8,$}readF32(){let $=this.view.getFloat32(this.pos);return this.pos+=4,$}readF64(){let $=this.view.getFloat64(this.pos);return this.pos+=8,$}}function QZ($,Z){return new w$(Z).decode($)}class X${listeners=new Map;addEventListener($,Z){let J=this.listeners.get($);if(!J)J=new Set,this.listeners.set($,J);return J.add(Z),()=>{this.removeEventListener($,Z)}}removeEventListener($,Z){let J=this.listeners.get($);if(J){if(J.delete(Z),J.size===0)this.listeners.delete($)}}emit($,Z){let J=this.listeners.get($);if(J){let Q=Array.from(J);for(let V of Q)V(Z)}}emitAll($){let Z=Array.from(this.listeners.keys());for(let J of Z)this.emit(J,$)}}class L0{getter;static eventName="update";emitter;constructor($){this.getter=$;this.emitter=new X$}get=()=>this.getter();async emit(){let $=await this.getter();queueMicrotask(()=>this.emitter.emit(L0.eventName,$))}listen($){return this.emitter.addEventListener(L0.eventName,$),()=>{this.emitter.removeEventListener(L0.eventName,$)}}}function R($){return[$,0]}function G($){return[void 0,$]}function tQ($){if($<0)console.info("N",$),console.trace();if(typeof $!=="bigint")$=BigInt($);if($<0n)return G(10);let Z=[];while($>0n){let J=Number($&0x7fn);if($>>=7n,$>0n)Z.push(J|128);else Z.push(J)}if(Z.length===0)return R(new Uint8Array([0]));if(Z.length>8)return G(26);return R(new Uint8Array(Z))}function eQ($,Z=0){let J=0n,Q=0,V=Z;while(!0){if(V>=$.length)return G(14);let Y=$[V++];if(Y===void 0)return G(14);if(J|=BigInt(Y&127)<<BigInt(Q),(Y&128)===0){if(V-Z>8)return G(26);return R({value:J>0x1fffffffffffffn?J:Number(J),bytesRead:V-Z})}if(Q+=7,Q>=56)return G(26)}}class g{data;pos=0;constructor($){this.data=$}static async fromResponse($){let Z=await $.arrayBuffer(),J=new Uint8Array(Z);return new g(J)}readBigInt(){if(this.pos+8>this.data.length)return G(7);let $=new DataView(this.data.buffer,this.data.byteOffset+this.pos).getBigUint64(0,!1);return this.pos+=8,R($)}readDate(){let[$,Z]=this.readVarInt();if(Z!==0)return G(Z);return R(new Date($))}readVarInt(){let[$,Z]=eQ(this.data,this.pos);if(Z!==0)return G(Z);this.pos+=$.bytesRead;let J=$.value;return R(typeof J==="bigint"?Number(J):J)}readVarString(){let[$,Z]=this.readVarInt();if(Z!==0)return G(Z);let[J,Q]=this.readBytes($);if(Q!==0)return G(Q);let V=new TextDecoder().decode(J);return R(V)}readBytes($){if($<0)return G(10);if(this.pos+$>this.data.length)return G(23);let Z=this.data.slice(this.pos,this.pos+$);return this.pos+=$,R(Z)}readVarBytes(){let[$,Z]=this.readVarInt();if(Z!==0)return G(Z);return this.readBytes($)}readStruct($){return $.decode(this)}readStructs($){let Z=[];while(!this.done()){let[J,Q]=this.readStruct($);if(Q!==0)return G(Q);Z.push(J)}return R(Z)}readBytesSeq($){let Z=[];while(!this.done()){let[J,Q]=this.readBytes($);if(Q!==0)return G(Q);Z.push(J)}return R(Z)}done(){return this.pos>=this.data.length}consumed(){return this.pos}}class S{parts=[];writeBigInt($){let Z=new Uint8Array(8);new DataView(Z.buffer).setBigUint64(0,$,!1),this.parts.push(Z)}writeDate($){let Z=$.getTime();return this.writeVarInt(Z)}writeVarInt($){let[Z,J]=tQ($);if(J!==0)return J;return this.parts.push(Z),0}writeVarString($){let Z=new TextEncoder().encode($),J=this.writeVarInt(Z.length);if(J!==0)return J;return this.writeBytes(Z),0}prependBytes($){this.parts.unshift($)}writeBytes($){this.parts.push($)}writeVarBytes($){let Z=this.writeVarInt($.length);if(Z!==0)return Z;return this.writeBytes($),0}writeStruct($,Z){return $.encode(this,Z)}writeStructs($,Z){for(let J of Z){let Q=this.writeStruct($,J);if(Q!==0)return Q}return 0}writeBytesSeq($){for(let Z of $)this.writeBytes(Z)}result(){let $=this.parts.reduce((Q,V)=>Q+V.length,0),Z=new Uint8Array($),J=0;for(let Q of this.parts)Z.set(Q,J),J+=Q.length;return Z}*scan(){for(let $ of this.parts)yield $}}async function VZ($,Z){let J=new S,Q=J.writeDate(Z);if(Q!==0)return G(Q);let V=J.result(),Y=await $.sign(V);return R({pubKey:$.publicKey,sig:Y,timestamp:Z})}async function D0($,Z,J){let Q=J.now().getTime(),V=$.timestamp.getTime();if(Math.abs(Q-V)>WJ)return 4;let X=new S;X.writeDate($.timestamp);let W=X.result();if(!await Z.checkSigEd25519($.sig,W,$.pubKey))return 3;return 0}var Q0={encode($,Z){let J=$.writeVarBytes(Z.id);if(J!==0)return J;let Q=$.writeDate(Z.ts);if(Q!==0)return Q;return 0},decode($){let[Z,J]=$.readVarBytes();if(J!==0)return G(J);let[Q,V]=$.readDate();if(V!==0)return G(V);return R({id:Z,ts:Q})}};function T$($){let Z=new S,J=Z.writeStruct(Q0,$);if(J!==0)return G(J);let Q=Z.result();return R(Q)}var X0={encode($,Z){let J=$.writeVarBytes(Z.eid);if(J!==0)return J;let Q=$.writeVarInt(Z.off);if(Q!==0)return Q;let V=$.writeVarInt(Z.ctr);if(V!==0)return V;let Y=$.writeVarInt(Z.len);if(Y!==0)return Y;if(Z.hsh)$.writeBytes(Z.hsh);return 0},decode($){let[Z,J]=$.readVarBytes();if(J!==0)return G(J);let Q=new g(Z),[,V]=Q0.decode(Q);if(V!==0)return G(V);let[Y,X]=$.readVarInt();if(X!==0)return G(X);let[W,z]=$.readVarInt();if(z!==0)return G(z);let[K,F]=$.readVarInt();if(F!==0)return G(F);let N;if(K>0){let[U,O]=$.readBytes(I$);if(O!==0)return G(O);N=U}return R({eid:Z,off:Y,ctr:W,len:K,hsh:N})}};function N0($){return Array.from($).map((J)=>J.toString(16).padStart(2,"0")).join("")}function D$($){if($.length%2!==0)throw Error("Invalid hex string");let Z=new Uint8Array($.length/2);for(let J=0;J<$.length;J+=2)Z[J/2]=Number.parseInt($.substr(J,2),16);return Z}function V0($,Z){if($===Z)return!0;if($.byteLength!==Z.byteLength)return!1;return $.every((J,Q)=>J===Z[Q])}var f;if(typeof Uint8Array.prototype.toBase64==="function")f=($)=>$.toBase64();else f=($)=>btoa(String.fromCharCode(...$));var F0;if(typeof Uint8Array.fromBase64==="function")F0=($)=>Uint8Array.fromBase64($);else F0=($)=>Uint8Array.from(atob($),(Z)=>Z.charCodeAt(0));function W$($,Z){let J=new Uint8Array($.length+Z.length);return J.set($,0),J.set(Z,$.length),J}function MJ($,Z,J){return J.checkSigEd25519($.sig,$.headCph,Z)}async function CJ($,Z,J,Q){let V;if($.bod&&$.len>0)V=await J.blake3($.bod);let Y=new S,X=X0.encode(Y,{...$,hsh:V});if(X!==0)return G(X);let W=Y.result(),z=await Z.kdmFor(W),K=Q.deriveCipher(z,"encrypt"),F=await K.encrypt(W),N=$.bod?await K.encrypt($.bod):new Uint8Array(0),U=await Z.sign(F);return R({sig:U,kdm:z,headCph:F,bodyCph:N})}async function YZ($,Z,J,Q,V){let Y=new g($),[X,W]=X0.decode(Y);if(W!==0)return G(14);let z;try{z=Z&&Z.length>0?await J.decrypt(Z):void 0}catch{return G(20)}let K=X.hsh&&z===void 0,F=X.hsh===void 0&&z!==void 0;if(K||F)return G(19);if(X.hsh&&z){let U=await Q.blake3(z);if(!V0(U,X.hsh))return G(19)}let N=V??await Q.blake3($);return R({msgHead:X,bod:z,headHash:N})}class XZ{now(){return new Date}}function PJ($,Z,J,Q){let V=Z.getTime()-$.getTime(),Y=J.getTime()-Q.getTime();return(V+Y)/2}var G$={encode($,Z){if($.writeVarInt(Z.quota),Z.quota>0){if(Z.usage===void 0)return 9;$.writeVarInt(Z.usage)}return 0},decode($){let[Z,J]=$.readVarInt();if(J!==0)return G(J);let Q;if(Z>0){let[V,Y]=$.readVarInt();if(Y!==0)return G(Y);Q=V}return R({quota:Z,usage:Q})}};var WZ={encode($,Z){$.writeBytes(new Uint8Array([Z.status]));let J=$.writeDate(Z.timeRcvd);if(J!==0)return J;let Q=$.writeDate(Z.timeSent);if(Q!==0)return Q;let V=$.writeVarInt(Z.subscription.term);if(V!==0)return V;let Y=$.writeVarInt(Z.subscription.elapsed);if(Y!==0)return Y;let X=$.writeStruct(G$,Z.subscription.stat);if(X!==0)return X;let W=$.writeStruct(G$,Z.subscription.dyn);if(W!==0)return W;return 0},decode($){let[Z,J]=$.readBytes(1);if(J!==0)return G(J);let Q=Z[0],[V,Y]=$.readDate();if(Y!==0)return G(Y);let[X,W]=$.readDate();if(W!==0)return G(W);let[z,K]=$.readVarInt();if(K!==0)return G(K);let[F,N]=$.readVarInt();if(N!==0)return G(N);let[U,O]=$.readStruct(G$);if(O!==0)return G(O);let[q,I]=$.readStruct(G$);if(I!==0)return G(I);return R({status:Q,timeRcvd:V,timeSent:X,subscription:{term:z,elapsed:F,stat:U,dyn:q}})}};var GZ={encode($,Z){let J=$.writeVarBytes(Z.headCph);if(J!==0)return J;let Q=$.writeVarInt(Z.seq);if(Q!==0)return Q;return 0},decode($){let[Z,J]=$.readVarBytes();if(J!==0)return G(J);let[Q,V]=$.readVarInt();if(V!==0)return G(V);return R({headCph:Z,seq:Q})}};var Y0={encode($,Z){$.writeBytes(Z.pubKey),$.writeBytes(Z.sig);let J=$.writeDate(Z.timestamp);if(J!==0)return J;return 0},decode($){let[Z,J]=$.readBytes(XJ);if(J!==0)return G(J);let[Q,V]=$.readBytes(w0);if(V!==0)return G(V);let[Y,X]=$.readDate();if(X!==0)return G(X);return R({pubKey:Z,sig:Q,timestamp:Y})}};var wJ={async encodeReq($,Z,J,Q,V){let Y=V.writeStruct(Y0,J);if(Y!==0)return Y;for(let X of Q)V.writeVarInt(X);return 0},async handleReq($,Z,J){let{clock:Q,crypto:V,storage:Y}=$,[X,W]=Z.readStruct(Y0);if(W!==0)return W;let z=await D0(X,V,Q);if(z!==0)return z;let{pubKey:K}=X,[F,N]=await Y.hasUser(K);if(N!==0)return N;if(!F)return 5;let[U,O]=Z.readVarInt();if(O!==0)return O;if(!Z.done())return 8;let[q,I]=await Y.listHeads(K,U);if(I!==0)return I;return J.writeStructs(GZ,q)},decodeResp($){return $.readStructs(GZ)}};var zZ={encode($,Z){$.writeVarInt(Z.seq);let J=$.writeVarBytes(Z.bodyCph);if(J!==0)return J;return 0},decode($){let[Z,J]=$.readVarInt();if(J!==0)return G(J);let[Q,V]=$.readVarBytes();if(V!==0)return G(V);return R({seq:Z,bodyCph:Q})}};var TJ={async encodeReq($,Z,J,Q,V){let Y=V.writeStruct(Y0,J);if(Y!==0)return Y;for(let X of Q){let W=V.writeVarInt(X);if(W!==0)return W}return 0},async handleReq($,Z,J){let{clock:Q,crypto:V,storage:Y}=$,[X,W]=Z.readStruct(Y0);if(W!==0)return W;let z=await D0(X,V,Q);if(z!==0)return z;let{pubKey:K}=X,[F,N]=await Y.hasUser(K);if(N!==0)return N;if(!F)return 5;let U=[];while(!Z.done()){let[I,H]=Z.readVarInt();if(H!==0)return H;U.push(I)}console.info(`PULL: ${U.length} bags`);let[O,q]=await Y.getBodies(K,U);if(q!==0)return q;if(!O)return 17;for(let{seq:I,bodyCph:H}of O){let P={seq:I,bodyCph:H},C=J.writeStruct(zZ,P);if(C!==0)return C}return 0},decodeResp($){return $.readStructs(zZ)}};var KZ={encode($,Z){$.writeBytes(Z.sig),$.writeBytes(Z.kdm);let J=$.writeVarBytes(Z.headCph);if(J!==0)return J;let Q=$.writeVarBytes(Z.bodyCph);if(Q!==0)return Q;return 0},decode($){let[Z,J]=$.readBytes(w0);if(J!==0)return G(J);let[Q,V]=$.readBytes(T0);if(V!==0)return G(V);let[Y,X]=$.readVarBytes();if(X!==0)return G(X);let[W,z]=$.readVarBytes();if(z!==0)return G(z);return R({sig:Z,kdm:Q,headCph:Y,bodyCph:W})}};var j$={encode($,Z){let J=$.writeVarInt(Z.seq);if(J!==0)return J;let Q=$.writeVarBytes(Z.headCph);if(Q!==0)return Q;let V=Z.bodyCph?Z.bodyCph.length:0,Y=$.writeVarInt(V);if(Y!==0)return Y;if(V>0){if(!Z.bodyCph)return 10;$.writeBytes(Z.bodyCph)}return 0},decode($){let[Z,J]=$.readVarInt();if(J!==0)return G(J);let[Q,V]=$.readVarBytes();if(V!==0)return G(V);let[Y,X]=$.readVarInt();if(X!==0)return G(X);let W;if(Y>0){let[z,K]=$.readBytes(Y);if(K!==0)return G(K);W=z}return R({seq:Z,headCph:Q,bodyCph:W})}};var A$={encode($,Z){$.writeBytes(Z.sig),$.writeBytes(Z.kdm);let J=$.writeVarBytes(Z.headCph);if(J!==0)return J;return 0},decode($){let[Z,J]=$.readBytes(w0);if(J!==0)return G(J);let[Q,V]=$.readBytes(T0);if(V!==0)return G(V);let[Y,X]=$.readVarBytes();if(X!==0)return G(X);return R({sig:Z,kdm:Q,headCph:Y})}};var _$={encode($,Z){if($.writeVarInt(Z.idx),$.writeBytes(new Uint8Array([Z.status])),Z.status===0)$.writeVarInt(Z.seq);return 0},decode($){let[Z,J]=$.readVarInt();if(J!==0)return G(J);let[Q,V]=$.readBytes(1);if(V!==0)return G(V);let Y=Q[0];if(Y!==0)return R({idx:Z,status:Y});let[X,W]=$.readVarInt();if(W!==0)return G(W);return R({idx:Z,status:Y,seq:X})}};var DJ={async encodeReq($,Z,J,Q,V){let Y=V.writeStruct(Y0,J);if(Y!==0)return Y;let X=V.writeStructs(KZ,Q);if(X!==0)return X;return 0},async handleReq($,Z,J){let{clock:Q,crypto:V,storage:Y,notifier:X}=$,[W,z]=Z.readStruct(Y0);if(z!==0)return z;let K=await D0(W,V,Q);if(K!==0)return K;let{pubKey:F}=W,[N,U]=await Y.hasUser(F);if(U!==0)return U;if(!N)return 5;let[O,q]=Z.readStructs(KZ);if(q!==0)return q;console.info(`PUSH: ${O.length} bags`);let I=[],H=[];for(let M=0;M<O.length;M++){let A=O[M];if(!await MJ(A,F,V)){let m={idx:M,status:3},E=J.writeStruct(_$,m);if(E!==0)return E;continue}I.push(M),H.push(A)}let[P,C]=await Y.setBags(F,H);if(C!==0)return C;if(!P||P.length!==H.length)return 17;let T=[];for(let M=0;M<H.length;M++){let A=H[M],x=I[M],m=P[M],E=new S,k=E.writeStruct(A$,A);if(k!==0)return k;let b=E.result(),w={seq:m,headCph:b};if(O.length===1&&A.bodyCph.length<=GJ)w.bodyCph=A.bodyCph;T.push(w);let h={idx:x,status:0,seq:m},l=J.writeStruct(_$,h);if(l!==0)return l}if(T.length>0){let M=new S,A=M.writeStructs(j$,T);if(A!==0)return A;let x=M.result();await Promise.resolve(X.push(F,x))}return 0},decodeResp($){return $.readStructs(_$)}};var jJ={async encodeReq($,Z,J,Q,V){return V.writeStruct(Y0,J)},async handleReq($,Z,J){let{clock:Q,crypto:V,storage:Y}=$,[X,W]=Z.readStruct(Y0);if(W!==0)return W;let z=await D0(X,V,Q);if(z!==0)return z;let{pubKey:K}=X;if(!Z.done())return 8;let[F,N]=await Y.addUser(K);if(N!==0)return N;return 0},decodeResp($){return R(void 0)}};class FZ{url;websocket;constructor($){this.url=$}connected(){return this.websocket!==void 0&&this.websocket.readyState===WebSocket.OPEN}async connect($,Z,J=()=>{},Q=()=>{}){let{url:V}=this;if(this.websocket)this.websocket.close(),this.websocket=void 0;let Y=new S;Y.writeStruct(Y0,$);let X=Y.result(),W=N0(X);return V.searchParams.set("t",W),this.websocket=new WebSocket(V),this.websocket.binaryType="arraybuffer",this.websocket.onopen=()=>{console.log("CONNECTED"),Q()},this.websocket.onclose=()=>{console.log("DISCONNECTED"),this.websocket=void 0,J()},this.websocket.onmessage=(z)=>{let K=new Uint8Array(z.data);Z(K)},this.websocket.onerror=(z)=>{console.log(`ERROR: ${JSON.stringify(z)}`),this.websocket=void 0,J()},Promise.resolve(0)}disconnect(){this.websocket?.close(),this.websocket=void 0}}var r={user:{path:"/user",endpoint:jJ,name:0},push:{path:"/push",endpoint:DJ,name:2},peek:{path:"/peek",endpoint:wJ,name:1},pull:{path:"/pull",endpoint:TJ,name:3}},$V={0:r.user,2:r.push,1:r.peek,3:r.pull},QW={[r.user.path]:r.user,[r.push.path]:r.push,[r.peek.path]:r.peek,[r.pull.path]:r.pull};class AJ{url;listener;constructor($){this.url=$;this.listener=new FZ($)}async call($,Z){let{path:J}=$V[$],Q=new URL(J,this.url);try{return await ZV(Q,Z)}catch{return G(25)}}}var _J=($)=>{return new AJ($.handle)};async function ZV($,Z){let J=await fetch($,{method:"POST",body:Z.result().slice()});if(!J.ok)return G(24);let Q=await g.fromResponse(J);return R(Q)}class L${enclave;crypto;host;clock;transport;updateHostMeta;constructor($,Z,J,Q,V,Y){this.enclave=$;this.crypto=Z;this.host=J;this.clock=Q;this.transport=V;this.updateHostMeta=Y}async call($,Z){let{clock:J,transport:Q}=this,{endpoint:V,name:Y}=$,X=await this.identity(),W=J.now(),[z,K]=await VZ(X,W);if(K!==0)return G(K);let F=new S,N=await V.encodeReq(this,X,z,Z,F);if(N!==0)return G(N);let U=J.now(),[O,q]=await Q.call(Y,F),I=J.now();if(q!==0)return G(q);let[H,P]=O.readStruct(WZ);if(P!==0)return G(P);if(H.status!==0)return G(H.status);let T={clockOffset:PJ(U,H.timeRcvd,H.timeSent,I),subscription:H.subscription},M=await this.updateHostMeta(T);if(M!==0)return G(M);return V.decodeResp(O)}identity=()=>{let{host:$,enclave:Z}=this;return Z.deriveIdentity($.label,$.idx??0)};seal=async($)=>{let{crypto:Z,enclave:J}=this,Q=await this.identity();return CJ($,Q,Z,J)};register=()=>this.call(r.user,[]);peek=($)=>this.call(r.peek,[$]);push=($)=>this.call(r.push,$);pull=($)=>this.call(r.pull,$);listen=async($,Z,J)=>{let{clock:Q,transport:V}=this,{listener:Y}=V,X=await this.identity(),W=Q.now(),[z,K]=await VZ(X,W);if(K!==0)return K;return await Y.connect(z,$,Z,J)};isConnected(){let $=this.transport?.listener;if($&&typeof $.connected==="function")return $.connected();return!0}closeListener(){this.transport?.listener?.disconnect()}}var NZ={encode($,Z){let J=$.writeVarString(Z.lbl);if(J!==0)return J;let Q=$.writeVarInt(Z.idx);if(Q!==0)return Q;let V=$.writeVarInt(Z.num);if(V!==0)return V;return $.writeBytes(Z.hsh),$.writeBytes(Z.sig),0},decode($){let[Z,J]=$.readVarString();if(J!==0)return G(J);let[Q,V]=$.readVarInt();if(V!==0)return G(V);let[Y,X]=$.readVarInt();if(X!==0)return G(X);let[W,z]=$.readBytes(I$);if(z!==0)return G(z);let[K,F]=$.readBytes(w0);if(F!==0)return G(F);return R({lbl:Z,idx:Q,num:Y,hsh:W,sig:K})}};var RZ={encode($,Z){let J=$.writeStruct(NZ,Z.head);if(J!==0)return J;let Q=$.writeVarBytes(Z.indexEnc);if(Q!==0)return Q;let V=$.writeVarBytes(Z.bodyEnc);if(V!==0)return V;return 0},decode($){let[Z,J]=$.readStruct(NZ);if(J!==0)return G(J);let[Q,V]=$.readVarBytes();if(V!==0)return G(V);let[Y,X]=$.readVarBytes();if(X!==0)return G(X);return R({head:Z,indexEnc:Q,bodyEnc:Y})}};var UZ={encode($,Z){$.writeBytes(Z.kdm);let J=$.writeVarBytes(Z.headCph);if(J!==0)return J;let Q=$.writeVarInt(Z.lenBody);if(Q!==0)return Q;if(Z.lenBody>0&&Z.offBody!==void 0){let V=$.writeVarInt(Z.offBody);if(V!==0)return V}return 0},decode($){let[Z,J]=$.readBytes(T0);if(J!==0)return G(J);let[Q,V]=$.readVarBytes();if(V!==0)return G(V);let[Y,X]=$.readVarInt();if(X!==0)return G(X);let W;if(Y>0){let[z,K]=$.readVarInt();if(K!==0)return G(K);W=z}return R({kdm:Z,headCph:Q,lenBody:Y,offBody:W})}};async function LJ($,Z,J,Q,V){let Y=await V.deriveIdentity($,Z),X=new S,W=new S,z=0,K=0;for(let P of J){let C=new S,T=C.writeStruct(X0,P.head);if(T!==0)return G(T);let M=C.result(),A=await Y.kdmFor(M),x=V.deriveCipher(A,"encrypt"),m=await x.encrypt(M),E=P.body?await x.encrypt(P.body):new Uint8Array(0),k=P.head.len>0&&P.head.hsh!==void 0?E.length:0,b={kdm:A,headCph:m,lenBody:k,offBody:k>0?K:void 0},w=X.writeStruct(UZ,b);if(w!==0)return G(w);if(P.body)W.writeBytes(E),K+=E.length;z++}let F=W.result(),N=X.result(),U=await Q.blake3(N),O=await Y.sign(U),q={lbl:$,idx:Z,num:z,hsh:U,sig:O},I=new S;I.writeStruct(RZ,{head:q,indexEnc:N,bodyEnc:F});let H=I.result();return R(H)}async function xJ($,Z,J){let[Q,V]=RZ.decode(new g($));if(V!==0)return G(V);let{head:Y,indexEnc:X,bodyEnc:W}=Q,z=await J.deriveIdentity(Y.lbl,Y.idx);if(!await Z.checkSigEd25519(Y.sig,Y.hsh,z.publicKey))return G(3);let F=await Z.blake3(X);if(!V0(F,Y.hsh))return G(19);let N=new g(X),U=[];for(let q=0;q<Y.num;q++){let[I,H]=N.readStruct(UZ);if(H!==0)return G(H);U.push(I)}if(U.length!==Y.num)return G(14);let O=[];for(let q of U){let I=J.deriveCipher(q.kdm,"decrypt"),H;try{H=await I.decrypt(q.headCph)}catch{return G(20)}let[P,C]=X0.decode(new g(H));if(C!==0)return G(C);let T;if(q.lenBody>0&&q.offBody!==void 0){if(P.hsh===void 0)return G(14);let M=W.slice(q.offBody,q.offBody+q.lenBody);try{T=await I.decrypt(M)}catch{return G(20)}let A=await Z.blake3(T);if(!V0(A,P.hsh))return G(19)}O.push({head:P,body:T})}return R(O)}async function fJ({now:$,bod:Z,crypto:J}){let Q=await J.genRandomBytes(8),V=new S,Y=V.writeStruct(Q0,{id:Q,ts:$});if(Y!==0)return G(Y);let X=V.result();return x$({now:$,eid:X,ctr:0,bod:Z,crypto:J})}async function x$({now:$,eid:Z,ctr:J,bod:Q,crypto:V}){let Y=new g(Z),[X,W]=Q0.decode(Y);if(W!==0)return G(W);let z=$.getTime()-X.ts.getTime(),K,F=Q?.length??0;if(Q&&F>0)K=await V.blake3(Q);return R({eid:Z,off:z,ctr:J,len:F,hsh:K})}function JV($,Z){let J=$.length<Z.length?$.length:Z.length;for(let Q=0;Q<J;Q++)if($[Q]!==Z[Q])return $[Q]-Z[Q];return $.length-Z.length}async function z$($,Z){let J=Array.from($);J.sort(JV);let Q=0;for(let X of J)Q+=X.length;let V=new Uint8Array(Q),Y=0;for(let X of J)V.set(X,Y),Y+=X.length;return Z.blake3(V)}function QV($){let Z=new S,J=Z.writeVarBytes($.eid);if(J!==0)return G(J);let Q=Z.writeDate($.updatedAt);if(Q!==0)return G(Q);let V=Z.writeVarInt($.ctr);if(V!==0)return G(V);return R(Z.result())}async function f$($,Z){let J=[];for(let Q of $){let[V,Y]=QV(Q);if(Y!==0||!V)return G(Y);J.push(V)}return R(await z$(J,Z))}var aW=Symbol("MasterSeed"),sW=Symbol("SealedMasterKey"),R0=32,kJ=24+R0+16;function t($){if($.byteLength!==R0)return G(10);return R($)}function j0($){if($.byteLength!==kJ)return G(10);return R($)}var eW=Symbol("EntityID");function BJ($){return"type"in $}var $G=Symbol("DerivationSeed"),ZG=Symbol("PublicKey"),JG=Symbol("PrivateKey"),QG=Symbol("HostSpecificKeyPair"),VG=Symbol("Hash");function VV($){if(!$)return!1;if(typeof $!=="object")return!1;if("body"in $===!1)return!1;if("type"in $===!1)return!1;return!0}function YV($){if(!$.bod||$.bod.length===0){let Q={off:$.off,ctr:$.ctr,eid:$.eid};return R(Q)}let Z=QZ($.bod);if(VV(Z)===!1)return console.warn("msg body invalid",Z),G(14);let J={off:$.off,ctr:$.ctr,eid:$.eid,gid:Z.gid,pid:Z.pid,tags:Z.tags,type:Z.type,body:Z.body};return R(J)}class k${applier;emitter=new X$;clearer;onDirtyEids;cacheDriven;peerIngest;constructor($,Z,J,Q){this.applier=$;this.clearer=Z,this.onDirtyEids=J,this.cacheDriven=Q?.cacheDriven??!1,this.peerIngest=Q?.peerIngest}apply=async($)=>{let Z=[],J=[];for(let W of $){let[z,K]=YV(W);if(J.push(K),K!==0)continue;Z.push(z)}let{stats:Q,types:V,eids:Y}=await this.applier(Z),X=[];for(let W=0;W<$.length;W++){let z=J[W],K=Q[W];if(z!==0){X.push(z);continue}if(K!==0){X.push(K);continue}X.push(0)}if(!this.cacheDriven)for(let W of V)this.emitter.emit(W,null);if(Y.length>0)this.onDirtyEids?.(Y);return X};clear=async()=>{let $=await this.clearer();if($!==0)return $;return this.emitter.emitAll(null),$};notify=($)=>{for(let Z of $)this.emitter.emit(Z,null)};refresh=async($)=>{if(this.peerIngest){await this.peerIngest($);return}};on=($,Z)=>{this.emitter.addEventListener($,Z)};off=($,Z)=>{this.emitter.removeEventListener($,Z)}}var n="entities",B$="entity_type_created_at",qZ="entity_type_updated_at",IZ="entity_type_group_id",HZ="entity_type_parent_id",n0="entity_tags",EJ="db",mJ=13;function XV($){return"typ"in $}function WV($){let Z={bod:$.body,crd:$.createdAt,...$.ctr!==0?{ctr:$.ctr}:{},eid:f($.eid),gid:$.gid,pid:$.pid?f($.pid):void 0,tgs:$.tags,typ:$.type,upd:$.updatedAt};if(Z.gid===void 0)delete Z.gid;if(Z.pid===void 0)delete Z.pid;if(Z.tgs===void 0)delete Z.tgs;if(Z.ctr===void 0)delete Z.ctr;return Z}function GV($){if(!i($))return{eid:f($.eid),upd:$.updatedAt,...$.ctr!==0?{ctr:$.ctr}:{}};return WV($)}function c0($){return{body:$.bod,createdAt:$.crd,updatedAt:$.upd,ctr:$.ctr??0,type:$.typ,eid:F0($.eid),gid:$.gid,pid:$.pid?F0($.pid):void 0,...$.tgs!==void 0?{tags:$.tgs}:{}}}function OZ($){if(XV($))return c0($);return{eid:F0($.eid),updatedAt:$.upd,ctr:$.ctr??0}}class gJ{db;opening;async init(){await this.ensureDb()}async ensureDb(){if(this.db)return this.db;if(this.opening)return this.opening;return this.opening=KV().then(($)=>{return $.onversionchange=()=>{if($.close(),this.db===$)this.db=void 0},this.db=$,this.opening=void 0,$},($)=>{throw this.opening=void 0,$}),this.opening}apply=async($)=>{let Z=new Set,J=[],Q;try{Q=await this.ensureDb()}catch{return{stats:$.map(()=>16),types:Z,eids:J}}let V=Q.transaction(n,"readwrite"),Y=V.objectStore(n);return new Promise((X)=>{let W=Array($.length).fill(0);if($.length<1){X({stats:[],types:Z,eids:J});return}V.oncomplete=()=>{X({stats:W,types:Z,eids:J})},V.onerror=()=>{for(let K=0;K<W.length;K++)if(W[K]===void 0)W[K]=18;X({stats:W,types:Z,eids:J})};let z=new Map;for(let K=0;K<$.length;K++){let F=$[K],N=f(F.eid),U={op:F,index:K},O=z.get(N);if(O)O.push(U);else z.set(N,[U])}for(let[K,F]of z){if(F.length<1)continue;let N=Y.get(K);N.onsuccess=()=>{let U=N.result,O=U?OZ(U):void 0,q=!1;for(let{op:I,index:H}of F){let[P,C]=d0(O,I);if(C!==0){W[H]=C;continue}if(P===void 0){W[H]=12;continue}q=!0;for(let T of r0(O,P))Z.add(T);O=P}if(q)J.push(F[0].op.eid);if(O){let I=Y.put(GV(O));I.onerror=(H)=>{H.preventDefault();for(let{index:P}of F)W[P]=18}}},N.onerror=()=>{for(let{index:U}of F)W[U]=18}}})};async clear(){let $;try{$=await this.ensureDb()}catch{return 16}let Z=$.transaction(n,"readwrite"),J=Z.objectStore(n);return new Promise((Q)=>{Z.oncomplete=()=>Q(0),Z.onerror=()=>Q(18),J.clear()})}async getRow($){let Z;try{Z=await this.ensureDb()}catch{return G(16)}let J=f($),V=Z.transaction(n,"readonly").objectStore(n);return new Promise((Y)=>{let X=V.get(J);X.onsuccess=()=>{let W=X.result;if(!W)Y(R(void 0));else Y(R(OZ(W)))},X.onerror=()=>Y(G(18))})}async getEnt($){let[Z,J]=await this.getRow($);if(J!==0)return G(J);if(Z===void 0||!i(Z))return R(void 0);return R(Z)}async getAllOfTypeUpdatedBetween($,Z,J){let Q;try{Q=await this.ensureDb()}catch{return G(16)}let Y=Q.transaction(n,"readonly").objectStore(n).index(qZ);return new Promise((X)=>{let W=Y.getAll(IDBKeyRange.bound([$,Z],[$,J]));W.onsuccess=()=>{let z=W.result;X(R(z.map(c0)))},W.onerror=()=>X(G(18))})}async getGroupMembers($,Z){let J;try{J=await this.ensureDb()}catch{return G(16)}let V=J.transaction(n,"readonly").objectStore(n).index(IZ);return new Promise((Y)=>{let X=V.getAll(IDBKeyRange.only([$,Z]));X.onsuccess=()=>{let W=X.result;Y(R(W.map(c0)))},X.onerror=()=>Y(G(18))})}async getAllOfType($){let Z;try{Z=await this.ensureDb()}catch{return G(16)}let Q=Z.transaction(n,"readonly").objectStore(n).index(B$);return new Promise((V)=>{let Y=Q.getAll(IDBKeyRange.bound([$],[$,[]]));Y.onsuccess=()=>{let X=Y.result;V(R(X.map(c0)))},Y.onerror=()=>V(G(18))})}async getByTag($,Z){let J;try{J=await this.ensureDb()}catch{return G(16)}let V=J.transaction(n,"readonly").objectStore(n).index(n0);return new Promise((Y)=>{let X=V.getAll(IDBKeyRange.only(Z));X.onsuccess=()=>{let z=X.result.filter((K)=>K.typ===$).map(c0);Y(R(z))},X.onerror=()=>Y(G(18))})}async getAllEntities($){if("pid"in $){let Z;try{Z=await this.ensureDb()}catch{return G(16)}let J=f($.pid),V=Z.transaction(n,"readonly").objectStore(n).index(HZ);return new Promise((Y)=>{let X=V.getAll(IDBKeyRange.only([$.type,J]));X.onsuccess=()=>{let z=X.result.map(c0);Y(R(z))},X.onerror=()=>Y(G(18))})}else if("gid"in $)return await this.getGroupMembers($.type,$.gid);else if("tag"in $)return await this.getByTag($.type,$.tag);else if("updatedBetween"in $)return await this.getAllOfTypeUpdatedBetween($.type,$.updatedBetween.start,$.updatedBetween.end);return await this.getAllOfType($.type)}async getEntities($){let[Z,J]=await this.getAllEntities($);if(J!==0)return G(J);return R(Z)}async countEntities({type:$}){let Z;try{Z=await this.ensureDb()}catch{return G(16)}let Q=Z.transaction(n,"readonly").objectStore(n).index(B$);return new Promise((V)=>{let Y=IDBKeyRange.bound([$],[$,[]]),X=Q.count(Y);X.onsuccess=()=>V(R(X.result)),X.onerror=()=>V(G(18))})}async checksum($){let Z;try{Z=await this.ensureDb()}catch{return G(16)}let Q=Z.transaction(n,"readonly").objectStore(n),V=[];return new Promise((Y)=>{let X=Q.openCursor();X.onsuccess=()=>{let W=X.result;if(W){let z=W.value;V.push(E$(OZ(z))),W.continue()}else f$(V,$).then(Y)},X.onerror=()=>Y(G(18))})}}function zV($,Z){if(!$.objectStoreNames.contains(n))$.createObjectStore(n,{keyPath:"eid",autoIncrement:!1});let J=Z.objectStore(n);if(!J.indexNames.contains(B$))J.createIndex(B$,["typ","crd"],{unique:!1});if(!J.indexNames.contains(qZ))J.createIndex(qZ,["typ","upd"],{unique:!1});if(!J.indexNames.contains(IZ))J.createIndex(IZ,["typ","gid"],{unique:!1});if(!J.indexNames.contains(HZ))J.createIndex(HZ,["typ","pid"],{unique:!1});if(J.indexNames.contains(n0)){if(J.index(n0).keyPath!=="tgs")J.deleteIndex(n0)}if(!J.indexNames.contains(n0))J.createIndex(n0,"tgs",{unique:!1,multiEntry:!0})}function KV(){return new Promise(($,Z)=>{let J=indexedDB.open(EJ,mJ);J.onupgradeneeded=()=>{let{result:Q,transaction:V}=J;if(!V){Z(Error("Transaction is null during EntDB upgrade"));return}try{zV(Q,V)}catch(Y){Z(Y instanceof Error?Y:Error(String(Y)))}},J.onblocked=()=>{console.warn(`[DIPLOMATIC] EntDB IDB upgrade blocked (${EJ} → v${mJ}); waiting for other connections to close`)},J.onsuccess=()=>$(J.result),J.onerror=()=>Z(J.error??Error("EntDB IndexedDB open failed"))})}async function SJ(){let $=new gJ;return await $.init(),$}class MZ{ents=new Map;useIndex;byType=new Map;byTypePid=new Map;byTypeGid=new Map;byTypeTag=new Map;constructor($=[],Z){this.useIndex=Z?.indexes!==!1;for(let J of $)this.put(J)}put($){let Z=f($.eid),J=this.ents.get(Z);if(J!==void 0&&i(J))this.unindex(Z,J);if(this.ents.set(Z,$),i($))this.index(Z,$)}del($){let Z=this.ents.get($);if(Z===void 0)return;if(i(Z))this.unindex($,Z);this.ents.delete($)}index($,Z){if(!this.useIndex)return;let J=this.byType.get(Z.type);if(!J)J=new Map,this.byType.set(Z.type,J);if(J.set($,Z),Z.pid){let Q=f(Z.pid),V=this.byTypePid.get(Z.type);if(!V)V=new Map,this.byTypePid.set(Z.type,V);let Y=V.get(Q);if(!Y)Y=new Map,V.set(Q,Y);Y.set($,Z)}if(typeof Z.gid==="string"){let Q=this.byTypeGid.get(Z.type);if(!Q)Q=new Map,this.byTypeGid.set(Z.type,Q);let V=Q.get(Z.gid);if(!V)V=new Map,Q.set(Z.gid,V);V.set($,Z)}if(Z.tags){let Q=this.byTypeTag.get(Z.type);if(!Q)Q=new Map,this.byTypeTag.set(Z.type,Q);for(let V of Z.tags){let Y=Q.get(V);if(!Y)Y=new Map,Q.set(V,Y);Y.set($,Z)}}}unindex($,Z){if(!this.useIndex)return;let J=this.byType.get(Z.type);if(J){if(J.delete($),J.size===0)this.byType.delete(Z.type)}if(Z.pid){let Q=f(Z.pid),V=this.byTypePid.get(Z.type),Y=V?.get(Q);if(Y){if(Y.delete($),Y.size===0)V?.delete(Q)}if(V&&V.size===0)this.byTypePid.delete(Z.type)}if(typeof Z.gid==="string"){let Q=this.byTypeGid.get(Z.type),V=Q?.get(Z.gid);if(V){if(V.delete($),V.size===0)Q?.delete(Z.gid)}if(Q&&Q.size===0)this.byTypeGid.delete(Z.type)}if(Z.tags){let Q=this.byTypeTag.get(Z.type);if(Q){for(let V of Z.tags){let Y=Q.get(V);if(Y){if(Y.delete($),Y.size===0)Q.delete(V)}}if(Q.size===0)this.byTypeTag.delete(Z.type)}}}clearIndexes(){this.byType.clear(),this.byTypePid.clear(),this.byTypeGid.clear(),this.byTypeTag.clear()}bucketList($){if(!$||$.size===0)return[];let Z=[];for(let J of $.values())Z.push(J);return Z}async apply($){let Z=new Set,J=[],Q=[];for(let V of $){let Y=f(V.eid),X=this.ents.get(Y),[W,z]=d0(X,V);if(z!==0){Q.push(z);continue}if(W===void 0){Q.push(12);continue}for(let K of r0(X,W))Z.add(K);this.put(W),J.push(V.eid),Q.push(0)}return{stats:Q,types:Z,eids:J}}async clear(){return this.ents.clear(),this.clearIndexes(),0}async getRow($){let Z=f($),J=this.ents.get(Z);return R(J)}async getEnt($){let[Z,J]=await this.getRow($);if(J!==0)return G(J);if(Z===void 0||!i(Z))return R(void 0);return R(Z)}async getAllEntities({type:$,gid:Z,pid:J,tag:Q,updatedBetween:V}){if(this.useIndex){if(J!==void 0){let X=f(J);return R(this.bucketList(this.byTypePid.get($)?.get(X)))}if(Z!==void 0)return R(this.bucketList(this.byTypeGid.get($)?.get(Z)));if(Q!==void 0)return R(this.bucketList(this.byTypeTag.get($)?.get(Q)));if(V!==void 0){let X=[],W=this.byType.get($);if(W){for(let z of W.values())if(z.updatedAt>=V.start&&z.updatedAt<=V.end)X.push(z)}return R(X)}return R(this.bucketList(this.byType.get($)))}let Y=[];if(J!==void 0){for(let X of this.ents.values())if(i(X)&&X.type===$&&X.pid&&V0(X.pid,J))Y.push(X)}else if(Z!==void 0){for(let X of this.ents.values())if(i(X)&&X.type===$&&(typeof X.gid==="string"&&X.gid===Z))Y.push(X)}else if(Q!==void 0){for(let X of this.ents.values())if(i(X)&&X.type===$&&X.tags&&X.tags.includes(Q))Y.push(X)}else if(V!==void 0){for(let X of this.ents.values())if(i(X)&&X.type===$&&X.updatedAt>=V.start&&X.updatedAt<=V.end)Y.push(X)}else for(let X of this.ents.values())if(i(X)&&X.type===$)Y.push(X);return R(Y)}async getEntities($){let[Z,J]=await this.getAllEntities($);if(J!==0)return G(J);return R(Z)}async countEntities({type:$}){if(this.useIndex)return R(this.byType.get($)?.size??0);let Z=0;for(let J of this.ents.values())if(i(J)&&J.type===$)Z+=1;return R(Z)}async checksum($){let Z=[];for(let J of this.ents.values())Z.push(E$(J));return f$(Z,$)}}async function vJ($){let Z=await SJ();if($?.cache===!1)return Z;return new CZ(Z,void 0,{indexes:$?.indexes})}class CZ{mem;durable;warmed=new Set;listeners=new Set;chain=Promise.resolve();constructor($,Z,J){if(this.durable=$,this.mem=new MZ(Z??[],{indexes:J?.indexes}),Z)for(let Q of Z)this.warmed.add(Q.type)}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}emit($){if($.size<1)return;for(let Z of this.listeners)Z($)}run($){let Z=this.chain.then($,$);return this.chain=Z.then(()=>{return},()=>{return}),Z}apply($){return this.run(async()=>{await this.pullEids($.map((Y)=>Y.eid));let Z=qV(this.mem,$);this.emit(Z.types);let J=await this.durable.apply($),{changed:Q,status:V}=await this.pullEids($.map((Y)=>Y.eid));if(this.emit(Q),V!==0)return{stats:$.map(()=>V),types:J.types,eids:J.eids};return J})}clear(){return this.run(async()=>{let $=await this.durable.clear();if($!==0)return $;let Z=this.mem.ents.size>0;return await this.mem.clear(),this.warmed.clear(),0})}ingestFromDurable($){return this.run(async()=>{let{changed:Z,status:J}=await this.pullEids($);return this.emit(Z),J})}async pullEids($){let Z=new Set,J=new Set;for(let Q of $){let V=f(Q);if(J.has(V))continue;J.add(V);let Y=this.mem.ents.get(V),[X,W]=await this.durable.getRow(Q);if(W!==0)return{changed:Z,status:W};if(X){if(this.mem.put(X),!Y||!FV(Y,X)){if(i(X))Z.add(X.type);if(Y!==void 0&&i(Y))Z.add(Y.type)}}else if(Y!==void 0){if(this.mem.del(V),i(Y))Z.add(Y.type)}}return{changed:Z,status:0}}async warmType($){if(this.warmed.has($))return 0;let[Z,J]=await this.durable.getEntities({type:$});if(J!==0)return J;if(Z)for(let Q of Z){let V=f(Q.eid),Y=this.mem.ents.get(V);if(!Y||OV(Q,Y))this.mem.put(Q)}return this.warmed.add($),0}async getRow($){let Z=f($);if(this.mem.ents.has(Z))return this.mem.getRow($);return this.run(async()=>{if(this.mem.ents.has(Z))return this.mem.getRow($);let[J,Q]=await this.durable.getRow($);if(Q!==0)return G(Q);if(J)this.mem.put(J);return R(J)})}async getEnt($){let[Z,J]=await this.getRow($);if(J!==0)return G(J);if(Z===void 0||!i(Z))return R(void 0);return R(Z)}async getEntities($){if(!this.warmed.has($.type)){let Z=await this.run(()=>this.warmType($.type));if(Z!==0)return G(Z)}return this.mem.getEntities($)}async countEntities({type:$}){if(!this.warmed.has($)){let Z=await this.run(()=>this.warmType($));if(Z!==0)return G(Z)}return this.mem.countEntities({type:$})}async checksum($){return this.durable.checksum($)}}function FV($,Z){if(i($)!==i(Z))return!1;if($.ctr!==Z.ctr)return!1;if($.updatedAt.getTime()!==Z.updatedAt.getTime())return!1;if(!V0($.eid,Z.eid))return!1;if(!i($)||!i(Z))return!0;if($.createdAt.getTime()!==Z.createdAt.getTime())return!1;if($.type!==Z.type)return!1;if($.gid!==Z.gid)return!1;if(!RV($.pid,Z.pid))return!1;if(!NV($.tags,Z.tags))return!1;return UV($.body,Z.body)}function NV($,Z){if($===Z)return!0;if($===void 0||Z===void 0)return!1;if($.length!==Z.length)return!1;for(let J=0;J<$.length;J++)if($[J]!==Z[J])return!1;return!0}function RV($,Z){if($===void 0&&Z===void 0)return!0;if($===void 0||Z===void 0)return!1;return V0($,Z)}function UV($,Z){if(Object.is($,Z))return!0;if($ instanceof Uint8Array&&Z instanceof Uint8Array)return V0($,Z);if($ instanceof Date&&Z instanceof Date)return $.getTime()===Z.getTime();try{return V0(_0($),_0(Z))}catch{return!1}}function OV($,Z){let J=$.updatedAt.getTime(),Q=Z.updatedAt.getTime();if(J!==Q)return J>Q;return $.ctr>Z.ctr}function qV($,Z){let J=new Set,Q=[];for(let V of Z){let Y=f(V.eid),X=$.ents.get(Y),[W,z]=d0(X,V);if(z!==0){Q.push(z);continue}if(W===void 0){Q.push(12);continue}for(let K of r0(X,W))J.add(K);$.put(W),Q.push(0)}return{stats:Q,types:J}}function i($){return"type"in $}function IV($){if(!Array.isArray($)||$.length===0)return;let Z=new Set,J=[];for(let Q of $){if(typeof Q!=="string"||Q.length===0)continue;if(Z.has(Q))continue;Z.add(Q),J.push(Q)}return J.length>0?J:void 0}function E$($){return{eid:$.eid,ctr:$.ctr,updatedAt:$.updatedAt}}function bJ($){let Z=new g($.eid),[J,Q]=Z.readStruct(Q0);if(Q!==0)return G(Q);return R({eid:$.eid,ctr:$.ctr,updatedAt:new Date(J.ts.getTime()+$.off)})}function d0($,Z){let J=new g(Z.eid),[Q,V]=J.readStruct(Q0);if(V!==0)return G(V);let Y=new Date(Q.ts.getTime()+Z.off);if($!==void 0&&Y<=$.updatedAt)return G(15);if(BJ(Z)){let X=IV(Z.tags);return R({eid:Z.eid,gid:Z.gid,pid:Z.pid,...X!==void 0?{tags:X}:{},type:Z.type,createdAt:Q.ts,updatedAt:Y,ctr:Z.ctr,body:Z.body})}return R({eid:Z.eid,updatedAt:Y,ctr:Z.ctr})}function r0($,Z){let J=new Set;if($!==void 0&&i($))J.add($.type);if(i(Z))J.add(Z.type);return[...J]}class m${inflight=null;again=!1;run($){if(this.again=!0,this.inflight)return this.inflight;return this.inflight=this.drain($),this.inflight}async flush(){if(!this.inflight)return;try{await this.inflight}catch{}}async drain($){try{this.again=!1;let Z=await $();while(this.again)this.again=!1,Z=await $();return Z}finally{this.inflight=null}}}var yJ=100;class PZ{timer=null;delayMs;work;tail=new m$;constructor($,Z){this.delayMs=$<0?0:$,this.work=Z}schedule(){if(this.delayMs<=0){this.fire();return}if(this.timer!==null)clearTimeout(this.timer);this.timer=setTimeout(()=>{this.timer=null,this.fire()},this.delayMs)}async flush(){if(this.timer!==null)clearTimeout(this.timer),this.timer=null,this.fire();await this.tail.flush()}cancel(){if(this.timer!==null)clearTimeout(this.timer),this.timer=null}fire(){return this.tail.run(this.work)}}function iJ($){let Z=new g($.eid),[J,Q]=Q0.decode(Z);if(Q!==0)return;return J.ts.getTime()+$.off}function HV($,Z){let J=iJ($),Q=iJ(Z);if(J===void 0&&Q===void 0)return 0;if(J===void 0)return 1;if(Q===void 0)return-1;if(Q!==J)return Q-J;return Z.ctr-$.ctr}function o0($,Z){return $.slice().sort((J,Q)=>HV(Z(J),Z(Q)))}var wZ={phase:"idle"},K$=50;function TZ($,Z,J){if($<=0||Z<=0)return!1;if($===1||$===Z)return!0;return $%J===0}function hJ($,Z){if(typeof navigator.msSaveOrOpenBlob==="function"){navigator.msSaveOrOpenBlob($,Z);return}let J=URL.createObjectURL($),Q=document.createElement("a");Q.href=J,Q.download=Z,document.body.appendChild(Q),Q.click(),document.body.removeChild(Q),URL.revokeObjectURL(J)}function uJ($,Z,J){let Q=[],V=[],Y=0;for(let X of $){let W=Z(X);if(V.length>0&&Y+W>J)Q.push(V),V=[],Y=0;if(V.push(X),Y+=W,Y>=J)Q.push(V),V=[],Y=0}if(V.length>0)Q.push(V);return Q}async function DZ($,Z,J){let Q=$.length;if(Q<1)return[];let V=Array(Q),Y=0,X=Math.min(Math.max(1,Z),Q),W=async()=>{while(!0){let K=Y;if(Y+=1,K>=Q)return;V[K]=await J($[K],K)}},z=[];for(let K=0;K<X;K++)z.push(W());return await Promise.all(z),V}async function g$($,Z,J,Q){let V=new g($.headCph),[Y,X]=V.readStruct(A$);if(X!==0)return G(X);let{sig:W,kdm:z,headCph:K}=Y;if(!await Q.checkSigEd25519(W,K,Z))return G(3);let N=J.deriveCipher(z,"decrypt"),U;try{U=await N.decrypt(K)}catch{return G(20)}return R({kdm:z,headEnc:U})}var s0="f",S$="t",a0="e";function MV($){if($===!0||$===S$)return S$;if($===a0)return a0;return s0}function lJ($){return $!==0&&$!==15&&$!==18&&$!==17}function jZ($,Z,J){if($.apld=Z,Z===a0&&J!==void 0)$.err=J;else delete $.err}async function v$($,Z,J,Q){let V=Q?.body!==!1,Y=MV(Z.apld),X=Z.body,W=X?.length??0,z;if(V&&X&&W>0)z=await J.blake3(X);let K={eid:Z.eid,off:Z.off??0,ctr:Z.ctr??0,len:W,hsh:z},F={hash:$,head:K,apld:Y};if(V&&X!==void 0)F.body=X;if(Y===a0&&Z.err!==void 0)F.err=Z.err;return F}var AZ=1048576,_Z=1048576,nJ=64;function CV($){return $.sig.length+$.kdm.length+$.headCph.length+$.bodyCph.length}async function PV($,Z,J,Q,V){if(Q.length<1)return 0;let[Y,X]=await $.push(Q);if(X!==0)return X;if(!Y)return 27;for(let z of Y){if(z.status!==0){console.error("push err",z);continue}let K=V[z.idx];if(!K){console.error("no hash",z);continue}await Z.uploads.deq(J,[K])}let W=await Z.hosts.get(J);if(W){let z=W.lastSeq,K=z,F=[];for(let N of Y)if(N.status===0)F.push(N.seq);F.sort((N,U)=>N-U);for(let N of F)if(N===z+1)z=N;if(z>K)await Z.hosts.touch(J,z)}return 0}async function pJ($,Z){if(Z.length<1)return R([]);let J=new Map,Q=[];for(let W of Z)J.set(W.seq,W),Q.push(W.seq);let[V,Y]=await $.pull(Q);if(Y!==0)return G(Y);if(!V)return G(27);let X=[];for(let{seq:W,bodyCph:z}of V){let K=J.get(W);if(!K)continue;X.push({dl:K,bodyCph:z})}return R(X)}async function wV($,Z,J,Q){if(Q.length<1)return R({parts:[],hashes:[]});let V=[],Y=[],X=[],W=new Map;for(let{dl:K,bodyCph:F}of Q){let{head:N,kdm:U,seq:O,host:q}=K,[I,H]=await cJ(K,J);if(H!==0||!I){let k=W.get(q)??[];k.push(O),W.set(q,k);continue}let{headEnc:P,headEncHash:C}=I,T=Z.deriveCipher(U,"decrypt"),[M,A]=await YZ(P,F,T,J,C);if(A!==0||!M){let k=W.get(q)??[];k.push(O),W.set(q,k);continue}let x={head:N,body:M.bod},m=M.headHash;X.push({key:m,data:oJ(x)}),V.push(x),Y.push(m);let E=W.get(q)??[];E.push(O),W.set(q,E)}let z=await $.messages.add(X);for(let[K,F]of W)await $.downloads.deq(K,F);for(let K=0;K<z.length;K++){let F=z[K];if(F!==0&&F!==15)console.error("ERR storing",j[F],"for message",K)}return R({parts:V,hashes:Y})}async function cJ($,Z){let J=$.headEnc;if(!J){let V=new S,Y=V.writeStruct(X0,$.head);if(Y!==0)return G(Y);J=V.result()}if($.headEncHash)return R({headEnc:J,headEncHash:$.headEncHash});let Q=await Z.blake3(J);return R({headEnc:J,headEncHash:Q})}async function dJ($,Z,J){let Q=new Set;for(let X of Z)Q.add(f(X));if(Q.size<1)return;let V=Array.from(await $.downloads.list());if(V.length<1)return;let Y=new Map;for(let X of V){let W;if(X.headEncHash)W=f(X.headEncHash);else{let[K,F]=await cJ(X,J);if(F!==0||!K)continue;W=f(K.headEncHash)}if(!Q.has(W))continue;let z=Y.get(X.host)??[];z.push(X.seq),Y.set(X.host,z)}for(let[X,W]of Y)await $.downloads.deq(X,W)}async function LZ({conn:$,store:Z,enclave:J,host:Q,crypto:V,onProgress:Y,peekProgressEvery:X,peekConcurrency:W}){let z=await $.identity(),K=[],[F,N]=await $.peek(Q.lastSeq);if(N!==0)return N;let U=F.length,O=X??K$,q=W??nJ;if(Y&&U>0)Y({phase:"peek",host:Q.label,done:0,total:U});let I=0,H=await DZ(F,q,async(C)=>{let[T,M]=await g$(C,z.publicKey,J,V),A;if(M!==0||!T)A={ok:!1,seq:C.seq,stat:M};else{let x=await V.blake3(T.headEnc);A={ok:!0,seq:C.seq,kdm:T.kdm,headEnc:T.headEnc,headEncHash:x}}if(I+=1,Y&&TZ(I,U,O))Y({phase:"peek",host:Q.label,done:I,total:U});return A}),P=new Set;for(let C of H){if(!C.ok){console.error("peek: decrypting item head",C.stat);continue}let T=f(C.headEncHash);if(await Z.messages.has(C.headEncHash)){console.info("peek: local msg; skip download, deq upload"),await Z.uploads.deq(Q.label,[C.headEncHash]),await Z.downloads.deq(Q.label,[C.seq]);continue}if(P.has(T)){await Z.downloads.deq(Q.label,[C.seq]);continue}let A=new g(C.headEnc),[x,m]=A.readStruct(X0);if(m!==0){console.error("peek: reading item head",m);continue}P.add(T),K.push({kdm:C.kdm,head:x,seq:C.seq,host:Q.label,headEnc:C.headEnc,headEncHash:C.headEncHash})}if(await Z.downloads.enq(K),F.length>0){let C=Math.max(...F.map((T)=>T.seq));await Z.hosts.recordStats(Q.label,{lastSeq:C})}if(Y)Y({phase:"peek",host:Q.label,done:U,total:U});return 0}async function rJ({conn:$,store:Z,host:J,maxPushBytes:Q,onProgress:V}){let Y=Q??AZ,X=await Z.uploads.list(J.label),W=X.length,z=0;if(V&&W>0)V({phase:"push",host:J.label,done:0,total:W});let K=[],F=[],N=0,U=async()=>{if(K.length<1)return 0;let O=K.length,q=await PV($,Z,J.label,K,F);if(K=[],F=[],N=0,q===0){if(z+=O,V)V({phase:"push",host:J.label,done:z,total:W})}return q};for(let O of X){let q=await Z.messages.get(O);if(!q){z+=1;continue}let I={...q.head,bod:q.body},[H,P]=await $.seal(I);if(P!==0)return P;if(!H)return 12;let C=CV(H);if(K.length>0&&N+C>Y){let T=await U();if(T!==0)return T}if(K.push(H),F.push(O),N+=C,N>=Y){let T=await U();if(T!==0)return T}}return U()}async function xZ({conn:$,store:Z,enclave:J,host:Q,crypto:V,maxPullBytes:Y,onProgress:X},W){let z=Y??_Z,K=await Z.downloads.list(),F=Array.from(K).filter((H)=>H.host===Q.label);if(F.length<1)return 15;let N=o0(F,(H)=>H.head),U=uJ(N,(H)=>H.head.len,z),O=N.length,q=0;if(X)X({phase:"pull",host:Q.label,done:0,total:O});let I=pJ($,U[0]);for(let H=0;H<U.length;H++){let[P,C]=await I;if(C!==0||!P)return C;if(q+=U[H].length,X)X({phase:"pull",host:Q.label,done:q,total:O});let T=U[H+1];if(T)I=pJ($,T);if(X)X({phase:"open",host:Q.label,done:q,total:O});let M=o0(P,(x)=>x.dl.head),[,A]=await wV(Z,J,V,M);if(A!==0)return A;if(W){if(X)X({phase:"exec",host:Q.label,done:q,total:O});await W()}}return 0}function oJ({head:$,body:Z}){let J={eid:$.eid,body:Z,apld:s0};if($.off!==0)J.off=$.off;if($.ctr!==0)J.ctr=$.ctr;return J}async function aJ($,{conn:Z,store:J,enclave:Q,host:V,crypto:Y,onProgress:X},W){let z=V.label,K=await Z.identity(),F=new g($),[N,U]=F.readStructs(j$);if(U!==0){console.error("Failed decoding notif",j[U]);return}let O=!1,I=(await J.hosts.get(z))?.lastSeq,H=[],P=!1;for(let M of N){let[A,x]=await g$({seq:M.seq,headCph:M.headCph},K.publicKey,Q,Y);if(x!==0){console.error("Failed decrypting notif",j[x]);continue}let m=await Y.blake3(A.headEnc);if(await J.messages.has(m))continue;let E=new g(A.headEnc),[k,b]=E.readStruct(X0);if(b!==0){console.error("Failed to parse head",j[b]);continue}if(!M.bodyCph&&k.len>0)P=!0,await J.downloads.enq([{seq:M.seq,host:z,kdm:A.kdm,head:k,headEnc:A.headEnc,headEncHash:m}]);else H.push({...A,head:k,bodyCph:M.bodyCph,headEncHash:m});if(I===void 0||M.seq!==I+1)console.log("out of seq",M.seq,I),O=!0;else I=M.seq}if(I!==void 0)await J.hosts.touch(V.label,I);let C=[];for(let M of H){let A=Q.deriveCipher(M.kdm,"decrypt"),[x,m]=await YZ(M.headEnc,M.bodyCph,A,Y);if(m!==0){console.error("Failed to open body",j[m]);continue}C.push({key:M.headEncHash,data:oJ({head:M.head,body:x.bod})})}let T=await J.messages.add(C);for(let M=0;M<T.length;M++){let A=T[M];if(A!==0&&A!==15)console.error("ERR storing",j[A],"for message",M)}if(X&&C.length>0)X({phase:"open",host:V.label,done:C.length,total:C.length});if(O||P||C.length>0)W()}async function fZ($,Z={}){let J=Z.pull!==!1,Q=Z.push===!0,{conn:V,store:Y,enclave:X,host:W,crypto:z,onProgress:K,peekProgressEvery:F,peekConcurrency:N}=$,U=await V.identity(),[O,q]=await V.peek(0);if(q!==0)return G(q);let I=O.length,H=F??K$,P=N??nJ;if(K&&I>0)K({phase:"peek",host:W.label,done:0,total:I});let C=0,T=await DZ(O,P,async(L)=>{let[v,B]=await g$(L,U.publicKey,X,z),y;if(B!==0||!v)y={ok:!1,seq:L.seq,stat:B};else{let _=await z.blake3(v.headEnc);y={ok:!0,seq:L.seq,kdm:v.kdm,headEnc:v.headEnc,headEncHash:_}}if(C+=1,K&&TZ(C,I,H))K({phase:"peek",host:W.label,done:C,total:I});return y}),M=new Map;for(let L of T){if(!L.ok)continue;let v=f(L.headEncHash),B=M.get(v);if(B)B.count+=1;else M.set(v,{hash:L.headEncHash,count:1,sample:L})}let A=0,x=[];for(let L of M.values()){if(L.count>1)A+=L.count-1;x.push(L.hash)}let m=O.length,E=M.size,k=await z$(x,z),b=[],w=0;for(let L of M.values()){if(await Y.messages.has(L.hash)){await Y.uploads.deq(W.label,[L.hash]);continue}if(w+=1,!J)continue;let B=L.sample,y=new g(B.headEnc),[_,c]=y.readStruct(X0);if(c!==0){console.error("reconcile: reading msg header",c);continue}b.push({kdm:B.kdm,head:_,seq:B.seq,host:W.label,headEnc:B.headEnc,headEncHash:B.headEncHash})}if(b.length>0)await Y.downloads.enq(b);let h=0;if(Q){let L=await Y.messages.listKeys(),v=new Set(M.keys()),B=[];for(let y of L)if(!v.has(f(y)))h+=1,B.push(y);if(B.length>0)await Y.uploads.enq(W.label,B)}else{let L=await Y.messages.listKeys(),v=new Set(M.keys());for(let B of L)if(!v.has(f(B)))h+=1}let l=O.length>0?Math.max(...O.map((L)=>L.seq)):0;if(await Y.hosts.recordStats(W.label,{setLastSeq:l}),K)K({phase:"peek",host:W.label,done:I,total:I});return R({msgcheck:k,numBags:m,uniqueMsgs:E,numDupes:A,missingLocal:w,missingHost:h})}class kZ{clock;state;store;transport;crypto;forceSkewHandlingByDefault;onScheduleSync;connections=new Map;applyChain=Promise.resolve();syncRuns=new m$;clientState;xferState;maxPushBytes;maxPullBytes;peekProgressEvery=K$;lastProgress=wZ;scheduledSync;constructor($,Z,J,Q,V,Y=!0,X=AZ,W=_Z,z){this.clock=$;this.state=Z;this.store=J;this.transport=Q;this.crypto=V;this.forceSkewHandlingByDefault=Y;this.onScheduleSync=z;this.maxPushBytes=X,this.maxPullBytes=W,this.clientState=new L0(()=>this.getClientState()),this.xferState=new L0(()=>this.getXferState()),this.scheduledSync=new PZ(yJ,async()=>{try{console.info("Running scheduled sync"),await this.sync()}catch(K){console.error("Debounced sync failed:",K)}})}emitProgress=($)=>{this.lastProgress=$,this.xferState.emit()};async setSeed($,Z){await this.store.seed.save($,Z),this.clientState.emit()}async getClientState(){let{store:$,connections:Z}=this,J=await $.seed.load(),Q=await $.hosts.list(),V=!1;for(let Y of Z.values())if(Y.isConnected()){V=!0;break}return{hasSeed:J!==void 0,hasHost:Array.from(Q).length>0,connected:V}}async getXferState(){let{uploads:$,downloads:Z}=this.store,J=await $.count();return{numDownloads:await Z.count(),numUploads:J,progress:this.lastProgress}}apply=($,Z)=>{return this.enqueueApplyJob(()=>this.doApply($,Z))};async doApply($,Z={enqueueUpload:!0,triggerUpload:!0}){let J=[],Q=[];for(let{head:Y,body:X}of $){let W=new S;W.writeStruct(X0,Y);let z=W.result(),K=await this.crypto.blake3(z),F={eid:Y.eid,body:X,apld:s0};if(Y.off!==0)F.off=Y.off;if(Y.ctr!==0)F.ctr=Y.ctr;J.push(K),Q.push({key:K,data:F})}await this.store.messages.add(Q),await dJ(this.store,J,this.crypto);let V=await this.doApplyHashes(J);if(Z.enqueueUpload){let Y=[];for(let X=0;X<J.length;X++){let W=V[X];if(W===0||W===15)Y.push(J[X])}if(Y.length>0){let X=await this.store.hosts.list();for(let W of X)await this.store.uploads.enq(W.label,Y);this.xferState.emit()}}if(Z.triggerUpload)this.scheduleSync();return V}enqueueApplyJob($){let Z=this.applyChain.then($,$);return this.applyChain=Z.then(()=>{return},()=>{return}),Z}drainApplyQueue(){return this.enqueueApplyJob(()=>this.doDrainApplyQueue())}async doDrainApplyQueue(){let $=await this.store.messages.list({apld:s0});if($.length<1)return[];let Z=o0($,(J)=>J.head);return this.applyStored(Z)}applyHashes=($)=>{return this.enqueueApplyJob(()=>this.doApplyHashes($))};async doApplyHashes($){let Z=[];for(let V of $){let Y=await this.store.messages.get(V);if(Y)Z.push(Y)}let J=await this.applyStored(Z),Q=new Map;for(let V=0;V<Z.length;V++)Q.set(f(Z[V].hash),J[V]??12);return $.map((V)=>Q.get(f(V))??13)}async applyStored($){if($.length<1)return[];let Z=$.map((Y)=>({...Y.head,bod:Y.body})),J=await this.state.apply(Z),Q=[],V=[];for(let Y=0;Y<$.length;Y++){let X=J[Y];if(X===0||X===15)Q.push($[Y].hash);else if(X!==void 0&&lJ(X))V.push({key:$[Y].hash,err:X})}if(Q.length>0)await this.store.messages.markApplied(Q);if(V.length>0)await this.store.messages.markFailed(V);return J}async insertRaw($){let{clock:Z,crypto:J}=this,[Q,V]=await fJ({now:Z.now(),bod:$,crypto:J});if(V!==0)return G(V);let X=(await this.apply([{head:Q,body:$}]))[0];if(X!==0&&X!==15)return G(X??12);return R(Q)}async makeUpdate($,Z){let{clock:J,crypto:Q}=this,V=J.now();if($.updatedAt.getTime()>V.getTime())return G(4);let Y=$.ctr+1,[X,W]=await x$({now:V,eid:$.eid,ctr:Y,bod:Z,crypto:Q});if(W!==0)return G(W);return R({head:X,body:Z})}async updateWithSkew($,Z,J){if(J===!1)return G(4);let{clock:Q,crypto:V}=this,Y=Q.now(),X=new g($.eid),[W,z]=X.readStruct(Q0);if(z!==0)return G(z);let K=$.updatedAt.getTime()-W.ts.getTime(),F={eid:$.eid,off:K+1,ctr:$.ctr+1,len:0},U=(await this.apply([{head:F,body:void 0}]))[0];if(U!==0&&U!==15)return G(U??12);if(Z===void 0)return R(F);let[O,q]=T$({id:W.id,ts:Y});if(q!==0)return G(q);let[I,H]=await x$({now:Y,eid:O,ctr:0,bod:Z,crypto:V});if(H!==0)return G(H);let C=(await this.apply([{head:I,body:Z}]))[0];if(C!==0&&C!==15)return G(C??12);return R(I)}async updateRaw($,Z,J=this.forceSkewHandlingByDefault){if($.updatedAt.getTime()>this.clock.now().getTime())return this.updateWithSkew($,Z,J);return this.enqueueApplyJob(async()=>{let[Q,V]=await this.makeUpdate($,Z);if(V!==0)return G(V);let X=(await this.doApply([Q]))[0];if(X!==0&&X!==15)return G(X??12);return R(Q.head)})}async insert($){let{body:Z,type:J,gid:Q,pid:V,tags:Y}=$,W=_0({body:Z,type:J,gid:Q,pid:V,tags:Y});return this.insertRaw(W)}async update($){let{prior:Z,body:J,type:Q,gid:V,pid:Y,tags:X,force:W}=$,K=_0({body:J,type:Q,gid:V,pid:Y,tags:X});return this.updateRaw(Z,K,W??this.forceSkewHandlingByDefault)}async delete($){let Z=$.force??!0;if("prior"in $)return this.updateRaw($.prior,void 0,Z);let[J,Q]=await this.revFromArchive($.eid);if(Q!==0)return G(Q);return this.updateRaw(J,void 0,Z)}async revFromArchive($){let Z=await this.store.messages.last($);if(Z)return bJ(Z.head);let J=new g($),[Q,V]=J.readStruct(Q0);if(V!==0)return G(V);return R({eid:$,ctr:-1,updatedAt:Q.ts})}async genEID($){let{clock:Z,crypto:J}=this,Q=Z.now();if($!==void 0)return T$({id:$,ts:Q});let V=await J.genRandomBytes(8);return T$({id:V,ts:Q})}sync(){return this.syncRuns.run(()=>this.doSync())}async doSync(){let{connections:$,crypto:Z,store:J}=this,Q=await J.seed.load();if(!Q)return 22;await this.drainApplyQueue();for(let[V,Y]of $){let X=await J.hosts.get(V);if(!X)continue;let W={conn:Y,store:J,enclave:Q,host:X,crypto:Z,maxPushBytes:this.maxPushBytes,maxPullBytes:this.maxPullBytes,onProgress:this.emitProgress,peekProgressEvery:this.peekProgressEvery},z=await LZ(W);if(z!==0)return console.error(`Failed to peek: ${z}`),this.emitProgress({phase:"idle"}),z;this.xferState.emit();let K=await rJ(W);if(K!==0)return console.error(`Failed to push: ${K}`),this.emitProgress({phase:"idle"}),K;this.xferState.emit();let F=await xZ(W,async()=>{await this.drainApplyQueue()});if(F!==0&&F!==15)return console.error(`Failed to pull: ${F}`),this.emitProgress({phase:"idle"}),F;this.xferState.emit()}return this.emitProgress({phase:"idle"}),0}async rebuild($){if(this.scheduledSync.cancel(),await this.syncRuns.flush(),$?.checkHost??!0){let J=await this.repull();if(J!==0)return J}return this.enqueueApplyJob(()=>this.replay())}async msgcheck(){let $=await this.store.messages.listKeys();return z$($,this.crypto)}listMsgs($){return this.store.messages.list($)}countMsgs($){return this.store.messages.count($)}async reconcile($,Z){this.scheduledSync.cancel(),await this.syncRuns.flush();let{connections:J,crypto:Q,store:V}=this,Y=await V.seed.load();if(!Y)return G(22);let X=await V.hosts.get($);if(!X)return G(13);let W=J.get($);if(!W||!W.isConnected()){if(await this.connectToHost(X,!1,!1),X=await V.hosts.get($),!X)return G(13);W=J.get($)}if(!W)return G(12);let z={conn:W,store:V,enclave:Y,crypto:Q,maxPushBytes:this.maxPushBytes,maxPullBytes:this.maxPullBytes,onProgress:this.emitProgress,peekProgressEvery:this.peekProgressEvery},[K,F]=await fZ({...z,host:X},Z);if(this.xferState.emit(),F!==0)return this.emitProgress({phase:"idle"}),G(F);if(!K)return this.emitProgress({phase:"idle"}),G(12);if(Z?.sync===!1)return this.emitProgress({phase:"idle"}),R(K);let N=await this.sync();if(N!==0)return G(N);let U=await V.hosts.get($);if(!U)return G(13);let[O,q]=await fZ({...z,host:U},{pull:!1,push:!1});if(this.xferState.emit(),this.emitProgress({phase:"idle"}),q!==0)return G(q);if(!O)return G(12);return R(O)}async repull(){let{connections:$,crypto:Z,store:J}=this,Q=await J.seed.load();if(!Q)return 22;let V=Array.from(await J.hosts.list());if(V.length<1)return 0;for(let Y of V){let X=$.get(Y.label);if(!X||!X.isConnected())await this.connectToHost(Y,!1,!1)}for(let[Y,X]of $){let W=await J.hosts.get(Y);if(!W)continue;let z={conn:X,store:J,enclave:Q,host:{...W,lastSeq:0},crypto:Z,maxPushBytes:this.maxPushBytes,maxPullBytes:this.maxPullBytes,onProgress:this.emitProgress,peekProgressEvery:this.peekProgressEvery},K=await LZ(z);if(K!==0)return console.error(`rebuild: failed to peek: ${K}`),this.emitProgress({phase:"idle"}),K;this.xferState.emit();let F=await xZ(z);if(F!==0&&F!==15)return console.error(`rebuild: failed to pull: ${F}`),this.emitProgress({phase:"idle"}),F;this.xferState.emit()}return this.emitProgress({phase:"idle"}),0}async replay(){let $=await this.state.clear();if($!==0)return $;let Z=await this.store.messages.list(),J=o0(Z,(Y)=>Y.head),Q=J.length;if(Q<1)return this.emitProgress({phase:"idle"}),0;let V=0;while(V<J.length){let Y=0,X=0,W=V;for(let K=V;K<J.length&&X<100&&Y<102400;K++)Y+=J[K].head.len,X++,W=K+1;let z=J.slice(V,W);await this.applyStored(z),this.emitProgress({phase:"exec",done:W,total:Q}),V=W}return this.emitProgress({phase:"idle"}),0}async wipe($){let Z=$?.msgs!==!1,J=$?.ents!==!1,Q=$?.meta!==!1,V=$?.seed===!0;this.scheduledSync.cancel(),await this.disconnect(),await this.syncRuns.flush();let{store:Y}=this;if(Q)await Y.hosts.wipe(),await Y.uploads.wipe(),await Y.downloads.wipe();if(Z)await Y.messages.wipe();if(V)await Y.seed.wipe();if(J)await this.state.clear();this.lastProgress=wZ,this.clientState.emit(),this.xferState.emit()}import=async($,Z)=>{let{crypto:J,store:Q}=this,V=Z?.onProgress,Y=await Q.seed.load();if(!Y)return 22;console.time("import: decoding file...");let X=await $.bytes(),[W,z]=await xJ(X,J,Y);if(z!==0)return z;console.timeEnd("import: decoding file...");let K=0;while(K<W.length){let F=0,N=0,U=K;for(let I=K;I<W.length&&N<100&&F<102400;I++)F+=W[I].head.len,N++,U=I+1;let O=W.slice(K,U);console.time(`import: applying [${K}, ${U}]`);let q=await this.apply(O,{enqueueUpload:!0,triggerUpload:!1});console.timeEnd(`import: applying [${K}, ${U}]`);for(let I=0;I<O.length;I++){let H=q[I];if(H!==0&&H!==15)console.warn(`failed to import msg ${K+I}: ${j[H]}`)}if(V)queueMicrotask(()=>V(U,W.length,0));this.emitProgress({phase:"import",done:U,total:W.length}),K=U}return this.scheduleSync(),this.emitProgress({phase:"idle"}),0};scheduleSync=()=>{if(this.onScheduleSync){this.onScheduleSync();return}this.scheduledSync.schedule()};async exportBytes(){let{crypto:$,store:Z}=this,J=await Z.seed.load();if(!J)return G(22);let Q=await Z.messages.list();return LJ("export",0,Q,$,J)}async export($){let[Z,J]=await this.exportBytes();if(J!==0)return J;if(!Z)return 12;let Q=new Blob([Z.slice()]);return hJ(Q,$),0}async link($,Z=!0){if(await this.store.hosts.add($),this.clientState.emit(),Z){let J=await this.store.hosts.get($.label);if(J)await this.connectToHost(J)}}async unlink($){await this.store.hosts.del($),this.clientState.emit()}async hosts(){return Array.from(await this.store.hosts.list())}connectToHost=async($,Z=!0,J=!0)=>{let{clock:Q,connections:V,crypto:Y,store:X,transport:W}=this,z=V.get($.label);if(z){if(z.isConnected())return;try{z.closeListener()}catch{}V.delete($.label)}let K=await X.seed.load();if(!K)return;console.info(`Connecting to ${$.handle} (${$.label})`);let F=new L$(K,Y,$,Q,W($),(N)=>X.hosts.set($.label,N));if(await F.register(),Z)await F.listen(async(N)=>{let U={conn:F,store:X,enclave:K,host:$,crypto:Y,maxPushBytes:this.maxPushBytes,maxPullBytes:this.maxPullBytes,onProgress:this.emitProgress,peekProgressEvery:this.peekProgressEvery};return aJ(N,U,this.scheduleSync)},()=>this.clientState.emit(),()=>this.clientState.emit());if(V.set($.label,F),this.clientState.emit(),J)this.scheduleSync()};async connect($=!0,Z=!0){let{connectToHost:J,scheduleSync:Q,store:V}=this;if(!await V.seed.load())return;await this.drainApplyQueue();let X=await V.hosts.list();for(let W of X)await J(W,$,!1);if(Z)Q()}disconnect=async()=>{for(let $ of this.connections.values())try{$.closeListener()}catch{}this.connections.clear(),this.clientState.emit()}}var x0=typeof globalThis==="object"&&"crypto"in globalThis?globalThis.crypto:void 0;function b$($){if(!Number.isSafeInteger($)||$<0)throw Error("positive integer expected, got "+$)}function BZ($){return $ instanceof Uint8Array||ArrayBuffer.isView($)&&$.constructor.name==="Uint8Array"}function d($,...Z){if(!BZ($))throw Error("Uint8Array expected");if(Z.length>0&&!Z.includes($.length))throw Error("Uint8Array expected of length "+Z+", got length="+$.length)}function EZ($,Z=!0){if($.destroyed)throw Error("Hash instance has been destroyed");if(Z&&$.finished)throw Error("Hash#digest() has already been called")}function sJ($,Z){d($);let J=Z.outputLen;if($.length<J)throw Error("digestInto() expects output buffer of length at least "+J)}function mZ($){if(typeof $!=="boolean")throw Error(`boolean expected, not ${$}`)}/*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) */var I0=($)=>new Uint32Array($.buffer,$.byteOffset,Math.floor($.byteLength/4));var TV=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!TV)throw Error("Non little-endian hardware is not supported");function DV($){if(typeof $!=="string")throw Error("string expected");return new Uint8Array(new TextEncoder().encode($))}function y$($){if(typeof $==="string")$=DV($);else if(BZ($))$=i$($);else throw Error("Uint8Array expected, got "+typeof $);return $}function tJ($,Z){if(Z==null||typeof Z!=="object")throw Error("options must be defined");return Object.assign($,Z)}function eJ($,Z){if($.length!==Z.length)return!1;let J=0;for(let Q=0;Q<$.length;Q++)J|=$[Q]^Z[Q];return J===0}var $Q=($,Z)=>{function J(Q,...V){if(d(Q),$.nonceLength!==void 0){let F=V[0];if(!F)throw Error("nonce / iv required");if($.varSizeNonce)d(F);else d(F,$.nonceLength)}let Y=$.tagLength;if(Y&&V[1]!==void 0)d(V[1]);let X=Z(Q,...V),W=(F,N)=>{if(N!==void 0){if(F!==2)throw Error("cipher output not supported");d(N)}},z=!1;return{encrypt(F,N){if(z)throw Error("cannot encrypt() twice with same key + nonce");return z=!0,d(F),W(X.encrypt.length,N),X.encrypt(F,N)},decrypt(F,N){if(d(F),Y&&F.length<Y)throw Error("invalid ciphertext length: smaller than tagLength="+Y);return W(X.decrypt.length,N),X.decrypt(F,N)}}}return Object.assign(J,$),J};function gZ($,Z,J=!0){if(Z===void 0)return new Uint8Array($);if(Z.length!==$)throw Error("invalid output length, expected "+$+", got: "+Z.length);if(J&&!jV(Z))throw Error("invalid output, must be aligned");return Z}function jV($){return $.byteOffset%4===0}function i$($){return Uint8Array.from($)}function U0(...$){for(let Z=0;Z<$.length;Z++)$[Z].fill(0)}function h$($=32){if(x0&&typeof x0.getRandomValues==="function")return x0.getRandomValues(new Uint8Array($));if(x0&&typeof x0.randomBytes==="function")return x0.randomBytes($);throw Error("crypto.getRandomValues must be defined")}var JQ=($)=>Uint8Array.from($.split("").map((Z)=>Z.charCodeAt(0))),AV=JQ("expand 16-byte k"),_V=JQ("expand 32-byte k"),LV=I0(AV),xV=I0(_V);function D($,Z){return $<<Z|$>>>32-Z}function SZ($){return $.byteOffset%4===0}var u$=64,fV=16,QQ=4294967295,ZQ=new Uint32Array;function kV($,Z,J,Q,V,Y,X,W){let z=V.length,K=new Uint8Array(u$),F=I0(K),N=SZ(V)&&SZ(Y),U=N?I0(V):ZQ,O=N?I0(Y):ZQ;for(let q=0;q<z;X++){if($(Z,J,Q,F,X,W),X>=QQ)throw Error("arx: counter overflow");let I=Math.min(u$,z-q);if(N&&I===u$){let H=q/4;if(q%4!==0)throw Error("arx: invalid block position");for(let P=0,C;P<fV;P++)C=H+P,O[C]=U[C]^F[P];q+=u$;continue}for(let H=0,P;H<I;H++)P=q+H,Y[P]=V[P]^K[H];q+=I}}function VQ($,Z){let{allowShortKeys:J,extendNonceFn:Q,counterLength:V,counterRight:Y,rounds:X}=tJ({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},Z);if(typeof $!=="function")throw Error("core must be a function");return b$(V),b$(X),mZ(Y),mZ(J),(W,z,K,F,N=0)=>{d(W),d(z),d(K);let U=K.length;if(F===void 0)F=new Uint8Array(U);if(d(F),b$(N),N<0||N>=QQ)throw Error("arx: counter overflow");if(F.length<U)throw Error(`arx: output (${F.length}) is shorter than data (${U})`);let O=[],q=W.length,I,H;if(q===32)O.push(I=i$(W)),H=xV;else if(q===16&&J)I=new Uint8Array(32),I.set(W),I.set(W,16),H=LV,O.push(I);else throw Error(`arx: invalid 32-byte key, got length=${q}`);if(!SZ(z))O.push(z=i$(z));let P=I0(I);if(Q){if(z.length!==24)throw Error("arx: extended nonce must be 24 bytes");Q(H,P,I0(z.subarray(0,16)),P),z=z.subarray(16)}let C=16-V;if(C!==z.length)throw Error(`arx: nonce must be ${C} or 16 bytes`);if(C!==12){let M=new Uint8Array(12);M.set(z,Y?0:12-z.length),z=M,O.push(z)}let T=I0(z);return kV($,H,P,T,K,F,N,X),U0(...O),F}}var o=($,Z)=>$[Z++]&255|($[Z++]&255)<<8;class YQ{constructor($){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,$=y$($),d($,32);let Z=o($,0),J=o($,2),Q=o($,4),V=o($,6),Y=o($,8),X=o($,10),W=o($,12),z=o($,14);this.r[0]=Z&8191,this.r[1]=(Z>>>13|J<<3)&8191,this.r[2]=(J>>>10|Q<<6)&7939,this.r[3]=(Q>>>7|V<<9)&8191,this.r[4]=(V>>>4|Y<<12)&255,this.r[5]=Y>>>1&8190,this.r[6]=(Y>>>14|X<<2)&8191,this.r[7]=(X>>>11|W<<5)&8065,this.r[8]=(W>>>8|z<<8)&8191,this.r[9]=z>>>5&127;for(let K=0;K<8;K++)this.pad[K]=o($,16+2*K)}process($,Z,J=!1){let Q=J?0:2048,{h:V,r:Y}=this,X=Y[0],W=Y[1],z=Y[2],K=Y[3],F=Y[4],N=Y[5],U=Y[6],O=Y[7],q=Y[8],I=Y[9],H=o($,Z+0),P=o($,Z+2),C=o($,Z+4),T=o($,Z+6),M=o($,Z+8),A=o($,Z+10),x=o($,Z+12),m=o($,Z+14),E=V[0]+(H&8191),k=V[1]+((H>>>13|P<<3)&8191),b=V[2]+((P>>>10|C<<6)&8191),w=V[3]+((C>>>7|T<<9)&8191),h=V[4]+((T>>>4|M<<12)&8191),l=V[5]+(M>>>1&8191),L=V[6]+((M>>>14|A<<2)&8191),v=V[7]+((A>>>11|x<<5)&8191),B=V[8]+((x>>>8|m<<8)&8191),y=V[9]+(m>>>5|Q),_=0,c=_+E*X+k*(5*I)+b*(5*q)+w*(5*O)+h*(5*U);_=c>>>13,c&=8191,c+=l*(5*N)+L*(5*F)+v*(5*K)+B*(5*z)+y*(5*W),_+=c>>>13,c&=8191;let a=_+E*W+k*X+b*(5*I)+w*(5*q)+h*(5*O);_=a>>>13,a&=8191,a+=l*(5*U)+L*(5*N)+v*(5*F)+B*(5*K)+y*(5*z),_+=a>>>13,a&=8191;let J0=_+E*z+k*W+b*X+w*(5*I)+h*(5*q);_=J0>>>13,J0&=8191,J0+=l*(5*O)+L*(5*U)+v*(5*N)+B*(5*F)+y*(5*K),_+=J0>>>13,J0&=8191;let p=_+E*K+k*z+b*W+w*X+h*(5*I);_=p>>>13,p&=8191,p+=l*(5*q)+L*(5*O)+v*(5*U)+B*(5*N)+y*(5*F),_+=p>>>13,p&=8191;let q0=_+E*F+k*K+b*z+w*W+h*X;_=q0>>>13,q0&=8191,q0+=l*(5*I)+L*(5*q)+v*(5*O)+B*(5*U)+y*(5*N),_+=q0>>>13,q0&=8191;let v0=_+E*N+k*F+b*K+w*z+h*W;_=v0>>>13,v0&=8191,v0+=l*X+L*(5*I)+v*(5*q)+B*(5*O)+y*(5*U),_+=v0>>>13,v0&=8191;let b0=_+E*U+k*N+b*F+w*K+h*z;_=b0>>>13,b0&=8191,b0+=l*W+L*X+v*(5*I)+B*(5*q)+y*(5*O),_+=b0>>>13,b0&=8191;let y0=_+E*O+k*U+b*N+w*F+h*K;_=y0>>>13,y0&=8191,y0+=l*z+L*W+v*X+B*(5*I)+y*(5*q),_+=y0>>>13,y0&=8191;let i0=_+E*q+k*O+b*U+w*N+h*F;_=i0>>>13,i0&=8191,i0+=l*K+L*z+v*W+B*X+y*(5*I),_+=i0>>>13,i0&=8191;let h0=_+E*I+k*q+b*O+w*U+h*N;_=h0>>>13,h0&=8191,h0+=l*F+L*K+v*z+B*W+y*X,_+=h0>>>13,h0&=8191,_=(_<<2)+_|0,_=_+c|0,c=_&8191,_=_>>>13,a+=_,V[0]=c,V[1]=a,V[2]=J0,V[3]=p,V[4]=q0,V[5]=v0,V[6]=b0,V[7]=y0,V[8]=i0,V[9]=h0}finalize(){let{h:$,pad:Z}=this,J=new Uint16Array(10),Q=$[1]>>>13;$[1]&=8191;for(let X=2;X<10;X++)$[X]+=Q,Q=$[X]>>>13,$[X]&=8191;$[0]+=Q*5,Q=$[0]>>>13,$[0]&=8191,$[1]+=Q,Q=$[1]>>>13,$[1]&=8191,$[2]+=Q,J[0]=$[0]+5,Q=J[0]>>>13,J[0]&=8191;for(let X=1;X<10;X++)J[X]=$[X]+Q,Q=J[X]>>>13,J[X]&=8191;J[9]-=8192;let V=(Q^1)-1;for(let X=0;X<10;X++)J[X]&=V;V=~V;for(let X=0;X<10;X++)$[X]=$[X]&V|J[X];$[0]=($[0]|$[1]<<13)&65535,$[1]=($[1]>>>3|$[2]<<10)&65535,$[2]=($[2]>>>6|$[3]<<7)&65535,$[3]=($[3]>>>9|$[4]<<4)&65535,$[4]=($[4]>>>12|$[5]<<1|$[6]<<14)&65535,$[5]=($[6]>>>2|$[7]<<11)&65535,$[6]=($[7]>>>5|$[8]<<8)&65535,$[7]=($[8]>>>8|$[9]<<5)&65535;let Y=$[0]+Z[0];$[0]=Y&65535;for(let X=1;X<8;X++)Y=($[X]+Z[X]|0)+(Y>>>16)|0,$[X]=Y&65535;U0(J)}update($){EZ(this);let{buffer:Z,blockLen:J}=this;$=y$($);let Q=$.length;for(let V=0;V<Q;){let Y=Math.min(J-this.pos,Q-V);if(Y===J){for(;J<=Q-V;V+=J)this.process($,V);continue}if(Z.set($.subarray(V,V+Y),this.pos),this.pos+=Y,V+=Y,this.pos===J)this.process(Z,0,!1),this.pos=0}return this}destroy(){U0(this.h,this.r,this.buffer,this.pad)}digestInto($){EZ(this),sJ($,this),this.finished=!0;let{buffer:Z,h:J}=this,{pos:Q}=this;if(Q){Z[Q++]=1;for(;Q<16;Q++)Z[Q]=0;this.process(Z,0,!0)}this.finalize();let V=0;for(let Y=0;Y<8;Y++)$[V++]=J[Y]>>>0,$[V++]=J[Y]>>>8;return $}digest(){let{buffer:$,outputLen:Z}=this;this.digestInto($);let J=$.slice(0,Z);return this.destroy(),J}}function BV($){let Z=(Q,V)=>$(V).update(y$(Q)).digest(),J=$(new Uint8Array(32));return Z.outputLen=J.outputLen,Z.blockLen=J.blockLen,Z.create=(Q)=>$(Q),Z}var vZ=BV(($)=>new YQ($));function EV($,Z,J,Q,V,Y=20){let X=$[0],W=Z[0],z=Z[1],K=Z[2],F=Z[3],N=$[1],U=J[0],O=J[1],q=V,I=0,H=$[2],P=Z[4],C=Z[5],T=Z[6],M=Z[7],A=$[3],x=X,m=W,E=z,k=K,b=F,w=N,h=U,l=O,L=q,v=I,B=H,y=P,_=C,c=T,a=M,J0=A;for(let q0=0;q0<Y;q0+=2)b^=D(x+_|0,7),L^=D(b+x|0,9),_^=D(L+b|0,13),x^=D(_+L|0,18),v^=D(w+m|0,7),c^=D(v+w|0,9),m^=D(c+v|0,13),w^=D(m+c|0,18),a^=D(B+h|0,7),E^=D(a+B|0,9),h^=D(E+a|0,13),B^=D(h+E|0,18),k^=D(J0+y|0,7),l^=D(k+J0|0,9),y^=D(l+k|0,13),J0^=D(y+l|0,18),m^=D(x+k|0,7),E^=D(m+x|0,9),k^=D(E+m|0,13),x^=D(k+E|0,18),h^=D(w+b|0,7),l^=D(h+w|0,9),b^=D(l+h|0,13),w^=D(b+l|0,18),y^=D(B+v|0,7),L^=D(y+B|0,9),v^=D(L+y|0,13),B^=D(v+L|0,18),_^=D(J0+a|0,7),c^=D(_+J0|0,9),a^=D(c+_|0,13),J0^=D(a+c|0,18);let p=0;Q[p++]=X+x|0,Q[p++]=W+m|0,Q[p++]=z+E|0,Q[p++]=K+k|0,Q[p++]=F+b|0,Q[p++]=N+w|0,Q[p++]=U+h|0,Q[p++]=O+l|0,Q[p++]=q+L|0,Q[p++]=I+v|0,Q[p++]=H+B|0,Q[p++]=P+y|0,Q[p++]=C+_|0,Q[p++]=T+c|0,Q[p++]=M+a|0,Q[p++]=A+J0|0}function mV($,Z,J,Q){let V=$[0],Y=Z[0],X=Z[1],W=Z[2],z=Z[3],K=$[1],F=J[0],N=J[1],U=J[2],O=J[3],q=$[2],I=Z[4],H=Z[5],P=Z[6],C=Z[7],T=$[3];for(let A=0;A<20;A+=2)z^=D(V+H|0,7),U^=D(z+V|0,9),H^=D(U+z|0,13),V^=D(H+U|0,18),O^=D(K+Y|0,7),P^=D(O+K|0,9),Y^=D(P+O|0,13),K^=D(Y+P|0,18),C^=D(q+F|0,7),X^=D(C+q|0,9),F^=D(X+C|0,13),q^=D(F+X|0,18),W^=D(T+I|0,7),N^=D(W+T|0,9),I^=D(N+W|0,13),T^=D(I+N|0,18),Y^=D(V+W|0,7),X^=D(Y+V|0,9),W^=D(X+Y|0,13),V^=D(W+X|0,18),F^=D(K+z|0,7),N^=D(F+K|0,9),z^=D(N+F|0,13),K^=D(z+N|0,18),I^=D(q+O|0,7),U^=D(I+q|0,9),O^=D(U+I|0,13),q^=D(O+U|0,18),H^=D(T+C|0,7),P^=D(H+T|0,9),C^=D(P+H|0,13),T^=D(C+P|0,18);let M=0;Q[M++]=V,Q[M++]=K,Q[M++]=q,Q[M++]=T,Q[M++]=F,Q[M++]=N,Q[M++]=U,Q[M++]=O}var bZ=VQ(EV,{counterRight:!0,extendNonceFn:mV}),yZ=$Q({blockSize:64,nonceLength:24,tagLength:16},($,Z)=>{return{encrypt(J,Q){Q=gZ(J.length+32,Q,!1);let V=Q.subarray(0,32),Y=Q.subarray(32);Q.set(J,32),U0(V),bZ($,Z,Q,Q);let X=vZ(Y,V);return Q.set(X,16),U0(Q.subarray(0,16),X),Q.subarray(16)},decrypt(J,Q){d(J),Q=gZ(J.length+32,Q,!1);let V=Q.subarray(0,32),Y=Q.subarray(32,48),X=Q.subarray(48);Q.set(J,32),U0(V);let W=bZ($,Z,V,V),z=vZ(X,W);if(!eJ(Y,z))throw Error("invalid tag");return bZ($,Z,Q.subarray(16),Q.subarray(16)),U0(V,Y,z),X}}});/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function gV($){return $ instanceof Uint8Array||ArrayBuffer.isView($)&&$.constructor.name==="Uint8Array"}function F$($){if(!Number.isSafeInteger($)||$<0)throw Error("positive integer expected, got "+$)}function f0($,...Z){if(!gV($))throw Error("Uint8Array expected");if(Z.length>0&&!Z.includes($.length))throw Error("Uint8Array expected of length "+Z+", got length="+$.length)}function N$($,Z=!0){if($.destroyed)throw Error("Hash instance has been destroyed");if(Z&&$.finished)throw Error("Hash#digest() has already been called")}function l$($,Z){f0($);let J=Z.outputLen;if($.length<J)throw Error("digestInto() expects output buffer of length at least "+J)}function XQ($){return new Uint8Array($.buffer,$.byteOffset,$.byteLength)}function t0($){return new Uint32Array($.buffer,$.byteOffset,Math.floor($.byteLength/4))}function e0(...$){for(let Z=0;Z<$.length;Z++)$[Z].fill(0)}function R$($,Z){return $<<32-Z|$>>>Z}var WQ=(()=>new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68)();function GQ($){return $<<24&4278190080|$<<8&16711680|$>>>8&65280|$>>>24&255}var zQ=WQ?($)=>$:($)=>GQ($);function SV($){for(let Z=0;Z<$.length;Z++)$[Z]=GQ($[Z]);return $}var e=WQ?($)=>$:SV;function vV($){if(typeof $!=="string")throw Error("string expected");return new Uint8Array(new TextEncoder().encode($))}function $$($){if(typeof $==="string")$=vV($);return f0($),$}class iZ{}function KQ($){let Z=(Q,V)=>$(V).update($$(Q)).digest(),J=$({});return Z.outputLen=J.outputLen,Z.blockLen=J.blockLen,Z.create=(Q)=>$(Q),Z}var FQ=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var p$=BigInt(4294967295),NQ=BigInt(32);function hZ($,Z=!1){if(Z)return{h:Number($&p$),l:Number($>>NQ&p$)};return{h:Number($>>NQ&p$)|0,l:Number($&p$)|0}}function H0($,Z,J,Q,V){return $=$+Z+V|0,Q=R$(Q^$,16),J=J+Q|0,Z=R$(Z^J,12),{a:$,b:Z,c:J,d:Q}}function M0($,Z,J,Q,V){return $=$+Z+V|0,Q=R$(Q^$,8),J=J+Q|0,Z=R$(Z^J,7),{a:$,b:Z,c:J,d:Q}}class uZ extends iZ{constructor($,Z){super();this.finished=!1,this.destroyed=!1,this.length=0,this.pos=0,F$($),F$(Z),this.blockLen=$,this.outputLen=Z,this.buffer=new Uint8Array($),this.buffer32=t0(this.buffer)}update($){N$(this),$=$$($),f0($);let{blockLen:Z,buffer:J,buffer32:Q}=this,V=$.length,Y=$.byteOffset,X=$.buffer;for(let W=0;W<V;){if(this.pos===Z)e(Q),this.compress(Q,0,!1),e(Q),this.pos=0;let z=Math.min(Z-this.pos,V-W),K=Y+W;if(z===Z&&!(K%4)&&W+z<V){let F=new Uint32Array(X,K,Math.floor((V-W)/4));e(F);for(let N=0;W+Z<V;N+=Q.length,W+=Z)this.length+=Z,this.compress(F,N,!1);e(F);continue}J.set($.subarray(W,W+z),this.pos),this.pos+=z,this.length+=z,W+=z}return this}digestInto($){N$(this),l$($,this);let{pos:Z,buffer32:J}=this;this.finished=!0,e0(this.buffer.subarray(Z)),e(J),this.compress(J,0,!0),e(J);let Q=t0($);this.get().forEach((V,Y)=>Q[Y]=zQ(V))}digest(){let{buffer:$,outputLen:Z}=this;this.digestInto($);let J=$.slice(0,Z);return this.destroy(),J}_cloneInto($){let{buffer:Z,length:J,finished:Q,destroyed:V,outputLen:Y,pos:X}=this;return $||($=new this.constructor({dkLen:Y})),$.set(...this.get()),$.buffer.set(Z),$.destroyed=V,$.finished=Q,$.length=J,$.pos=X,$.outputLen=Y,$}clone(){return this._cloneInto()}}function lZ($,Z,J,Q,V,Y,X,W,z,K,F,N,U,O,q,I,H,P,C,T){let M=0;for(let A=0;A<Q;A++)({a:V,b:z,c:U,d:H}=H0(V,z,U,H,J[Z+$[M++]])),{a:V,b:z,c:U,d:H}=M0(V,z,U,H,J[Z+$[M++]]),{a:Y,b:K,c:O,d:P}=H0(Y,K,O,P,J[Z+$[M++]]),{a:Y,b:K,c:O,d:P}=M0(Y,K,O,P,J[Z+$[M++]]),{a:X,b:F,c:q,d:C}=H0(X,F,q,C,J[Z+$[M++]]),{a:X,b:F,c:q,d:C}=M0(X,F,q,C,J[Z+$[M++]]),{a:W,b:N,c:I,d:T}=H0(W,N,I,T,J[Z+$[M++]]),{a:W,b:N,c:I,d:T}=M0(W,N,I,T,J[Z+$[M++]]),{a:V,b:K,c:q,d:T}=H0(V,K,q,T,J[Z+$[M++]]),{a:V,b:K,c:q,d:T}=M0(V,K,q,T,J[Z+$[M++]]),{a:Y,b:F,c:I,d:H}=H0(Y,F,I,H,J[Z+$[M++]]),{a:Y,b:F,c:I,d:H}=M0(Y,F,I,H,J[Z+$[M++]]),{a:X,b:N,c:U,d:P}=H0(X,N,U,P,J[Z+$[M++]]),{a:X,b:N,c:U,d:P}=M0(X,N,U,P,J[Z+$[M++]]),{a:W,b:z,c:O,d:C}=H0(W,z,O,C,J[Z+$[M++]]),{a:W,b:z,c:O,d:C}=M0(W,z,O,C,J[Z+$[M++]]);return{v0:V,v1:Y,v2:X,v3:W,v4:z,v5:K,v6:F,v7:N,v8:U,v9:O,v10:q,v11:I,v12:H,v13:P,v14:C,v15:T}}var O0={CHUNK_START:1,CHUNK_END:2,PARENT:4,ROOT:8,KEYED_HASH:16,DERIVE_KEY_CONTEXT:32,DERIVE_KEY_MATERIAL:64},C0=FQ.slice(),RQ=(()=>{let $=Array.from({length:16},(Q,V)=>V),Z=(Q)=>[2,6,3,10,7,0,4,13,1,11,12,5,9,14,15,8].map((V)=>Q[V]),J=[];for(let Q=0,V=$;Q<7;Q++,V=Z(V))J.push(...V);return Uint8Array.from(J)})();class pZ extends uZ{constructor($={},Z=0){super(64,$.dkLen===void 0?32:$.dkLen);this.chunkPos=0,this.chunksDone=0,this.flags=0,this.stack=[],this.posOut=0,this.bufferOut32=new Uint32Array(16),this.chunkOut=0,this.enableXOF=!0;let{key:J,context:Q}=$,V=Q!==void 0;if(J!==void 0){if(V)throw Error(\'Only "key" or "context" can be specified at same time\');let Y=$$(J).slice();f0(Y,32),this.IV=t0(Y),e(this.IV),this.flags=Z|O0.KEYED_HASH}else if(V){let Y=$$(Q),X=new pZ({dkLen:32},O0.DERIVE_KEY_CONTEXT).update(Y).digest();this.IV=t0(X),e(this.IV),this.flags=Z|O0.DERIVE_KEY_MATERIAL}else this.IV=C0.slice(),this.flags=Z;this.state=this.IV.slice(),this.bufferOut=XQ(this.bufferOut32)}get(){return[]}set(){}b2Compress($,Z,J,Q=0){let{state:V,pos:Y}=this,{h:X,l:W}=hZ(BigInt($),!0),{v0:z,v1:K,v2:F,v3:N,v4:U,v5:O,v6:q,v7:I,v8:H,v9:P,v10:C,v11:T,v12:M,v13:A,v14:x,v15:m}=lZ(RQ,Q,J,7,V[0],V[1],V[2],V[3],V[4],V[5],V[6],V[7],C0[0],C0[1],C0[2],C0[3],X,W,Y,Z);V[0]=z^H,V[1]=K^P,V[2]=F^C,V[3]=N^T,V[4]=U^M,V[5]=O^A,V[6]=q^x,V[7]=I^m}compress($,Z=0,J=!1){let Q=this.flags;if(!this.chunkPos)Q|=O0.CHUNK_START;if(this.chunkPos===15||J)Q|=O0.CHUNK_END;if(!J)this.pos=this.blockLen;if(this.b2Compress(this.chunksDone,Q,$,Z),this.chunkPos+=1,this.chunkPos===16||J){let V=this.state;this.state=this.IV.slice();for(let Y,X=this.chunksDone+1;J||!(X&1);X>>=1){if(!(Y=this.stack.pop()))break;this.buffer32.set(Y,0),this.buffer32.set(V,8),this.pos=this.blockLen,this.b2Compress(0,this.flags|O0.PARENT,this.buffer32,0),V=this.state,this.state=this.IV.slice()}this.chunksDone++,this.chunkPos=0,this.stack.push(V)}this.pos=0}_cloneInto($){$=super._cloneInto($);let{IV:Z,flags:J,state:Q,chunkPos:V,posOut:Y,chunkOut:X,stack:W,chunksDone:z}=this;return $.state.set(Q.slice()),$.stack=W.map((K)=>Uint32Array.from(K)),$.IV.set(Z),$.flags=J,$.chunkPos=V,$.chunksDone=z,$.posOut=Y,$.chunkOut=X,$.enableXOF=this.enableXOF,$.bufferOut32.set(this.bufferOut32),$}destroy(){this.destroyed=!0,e0(this.state,this.buffer32,this.IV,this.bufferOut32),e0(...this.stack)}b2CompressOut(){let{state:$,pos:Z,flags:J,buffer32:Q,bufferOut32:V}=this,{h:Y,l:X}=hZ(BigInt(this.chunkOut++));e(Q);let{v0:W,v1:z,v2:K,v3:F,v4:N,v5:U,v6:O,v7:q,v8:I,v9:H,v10:P,v11:C,v12:T,v13:M,v14:A,v15:x}=lZ(RQ,0,Q,7,$[0],$[1],$[2],$[3],$[4],$[5],$[6],$[7],C0[0],C0[1],C0[2],C0[3],X,Y,Z,J);V[0]=W^I,V[1]=z^H,V[2]=K^P,V[3]=F^C,V[4]=N^T,V[5]=U^M,V[6]=O^A,V[7]=q^x,V[8]=$[0]^I,V[9]=$[1]^H,V[10]=$[2]^P,V[11]=$[3]^C,V[12]=$[4]^T,V[13]=$[5]^M,V[14]=$[6]^A,V[15]=$[7]^x,e(Q),e(V),this.posOut=0}finish(){if(this.finished)return;this.finished=!0,e0(this.buffer.subarray(this.pos));let $=this.flags|O0.ROOT;if(this.stack.length)$|=O0.PARENT,e(this.buffer32),this.compress(this.buffer32,0,!0),e(this.buffer32),this.chunksDone=0,this.pos=this.blockLen;else $|=(!this.chunkPos?O0.CHUNK_START:0)|O0.CHUNK_END;this.flags=$,this.b2CompressOut()}writeInto($){N$(this,!1),f0($),this.finish();let{blockLen:Z,bufferOut:J}=this;for(let Q=0,V=$.length;Q<V;){if(this.posOut>=Z)this.b2CompressOut();let Y=Math.min(Z-this.posOut,V-Q);$.set(J.subarray(this.posOut,this.posOut+Y),Q),this.posOut+=Y,Q+=Y}return $}xofInto($){if(!this.enableXOF)throw Error("XOF is not possible after digest call");return this.writeInto($)}xof($){return F$($),this.xofInto(new Uint8Array($))}digestInto($){if(l$($,this),this.finished)throw Error("digest() was already called");return this.enableXOF=!1,this.writeInto($),this.destroy(),$}digest(){return this.digestInto(new Uint8Array(this.outputLen))}}var UQ=KQ(($)=>new pZ($));var nZ=new Uint8Array([48,46,2,1,0,48,5,6,3,43,101,112,4,34,4,32]);function OQ($){let Z=new Uint8Array(nZ.length+32);return Z.set(nZ),Z.set($.subarray(0,32),nZ.length),Z}function qQ($){return typeof $==="string"?new TextEncoder().encode($):$}function Z$($){let Z=new ArrayBuffer($.byteLength);return new Uint8Array(Z).set($),Z}class cZ{verifyKeys=new Map;signKeys=new Map;async genRandomBytes($){return h$($)}async gen256BitSecureRandomSeed(){return h$(32)}async encryptXSalsa20Poly1305Combined($,Z){let J=h$(24),V=yZ(Z,J).encrypt($);return new Uint8Array([...J,...V])}async decryptXSalsa20Poly1305Combined($,Z){let J=$.slice(0,24),Q=$.slice(24);return yZ(Z,J).decrypt(Q)}async deriveEd25519KeyPair($){let Z=$,J=OQ(Z),Q=await globalThis.crypto.subtle.importKey("pkcs8",Z$(J),{name:"Ed25519"},!0,["sign"]),V=await globalThis.crypto.subtle.exportKey("jwk",Q);if(typeof V.x!=="string")throw Error("Ed25519 JWK missing x");let Y=await globalThis.crypto.subtle.importKey("jwk",{kty:"OKP",crv:"Ed25519",x:V.x},{name:"Ed25519"},!0,["verify"]),X=new Uint8Array(await globalThis.crypto.subtle.exportKey("raw",Y)),W=new Uint8Array(64);return W.set(Z,0),W.set(X,32),this.signKeys.set(N0(Z),Q),this.verifyKeys.set(N0(X),Y),{keyType:"ed25519",privateKey:W,publicKey:X}}async importSignKey($){let Z=$.subarray(0,32),J=N0(Z),Q=this.signKeys.get(J);if(Q)return Q;let V=OQ(Z),Y=await globalThis.crypto.subtle.importKey("pkcs8",Z$(V),{name:"Ed25519"},!1,["sign"]);return this.signKeys.set(J,Y),Y}async importVerifyKey($){let Z=N0($),J=this.verifyKeys.get(Z);if(J)return J;let Q=await globalThis.crypto.subtle.importKey("raw",Z$($),{name:"Ed25519"},!1,["verify"]);return this.verifyKeys.set(Z,Q),Q}async signEd25519($,Z){let J=qQ($),Q=await this.importSignKey(Z),V=await globalThis.crypto.subtle.sign({name:"Ed25519"},Q,Z$(J));return new Uint8Array(V)}async checkSigEd25519($,Z,J){let Q=qQ(Z);try{let V=await this.importVerifyKey(J);return await globalThis.crypto.subtle.verify({name:"Ed25519"},V,Z$($),Z$(Q))}catch{return!1}}async blake3($){return UQ($)}}var bV=new cZ,U$=bV;var k0={encode($,Z){let J=$.writeVarString(Z.handle);if(J!==0)return J;let Q=$.writeVarString(Z.label);if(Q!==0)return Q;return $.writeVarInt(Z.idx??0)},decode($){let[Z,J]=$.readVarString();if(J!==0)return G(J);let[Q,V]=$.readVarString();if(V!==0)return G(V);let[Y,X]=$.readVarInt();if(X!==0)return G(X);return R({handle:Z,label:Q,idx:Y})}};var n$=1,dZ={encode($,Z){if(Z.v!==n$)return 10;let[,J]=t(Z.masterSeed);if(J!==0)return J;let Q=$.writeVarInt(Z.v);if(Q!==0)return Q;$.writeBytes(Z.masterSeed);let V=$.writeVarInt(Z.hosts.length);if(V!==0)return V;for(let Y of Z.hosts){let X=$.writeStruct(k0,Y);if(X!==0)return X}return 0},decode($){let[Z,J]=$.readVarInt();if(J!==0)return G(J);if(Z!==n$)return G(14);let[Q,V]=$.readBytes(R0);if(V!==0)return G(V);if(Q===void 0)return G(14);let[Y,X]=t(Q);if(X!==0)return G(X);if(Y===void 0)return G(14);let[W,z]=$.readVarInt();if(z!==0)return G(z);if(W===void 0||W<0)return G(10);let K=[];for(let F=0;F<W;F++){let[N,U]=$.readStruct(k0);if(U!==0)return G(U);if(N===void 0)return G(14);K.push(N)}return R({v:n$,masterSeed:Y,hosts:K})}};function IQ($,Z){let[J,Q]=t($);if(Q!==0)return G(Q);if(J===void 0)return G(10);let[V,Y]=t(J.slice());if(Y!==0)return G(Y);if(V===void 0)return G(10);return R({v:n$,masterSeed:V,hosts:Z.map((X)=>({handle:X.handle,label:X.label,idx:X.idx??0}))})}var rZ={encode($,Z){let[,J]=t(Z.masterSeed);if(J!==0)return J;$.writeBytes(Z.masterSeed);let Q=$.writeVarInt(Z.hosts.length);if(Q!==0)return Q;for(let V of Z.hosts){let Y=$.writeStruct(k0,V);if(Y!==0)return Y}return 0},decode($){let[Z,J]=$.readBytes(R0);if(J!==0)return G(J);if(Z===void 0)return G(14);let[Q,V]=t(Z);if(V!==0)return G(V);if(Q===void 0)return G(14);let[Y,X]=$.readVarInt();if(X!==0)return G(X);if(Y===void 0||Y<0)return G(10);let W=[];for(let z=0;z<Y;z++){let[K,F]=$.readStruct(k0);if(F!==0)return G(F);if(K===void 0)return G(14);W.push(K)}return R({masterSeed:Q,hosts:W})}};function P0($){let Z=new Uint8Array($);if($>0)crypto.getRandomValues(Z);return Z}var B0=32,yV=-7,iV=-8,hV=-257,c$=[{type:"public-key",alg:yV},{type:"public-key",alg:iV},{type:"public-key",alg:hV}];function uV($){return $.trim().toLowerCase().replace(/\\.$/,"")||"localhost"}function E0($){let Z=new Uint8Array($.byteLength);return Z.set($),Z}function m0($){if($?.rpId!==void 0)return R($.rpId);if(typeof location>"u")return G(9);return R(uV(location.hostname))}function g0(){if(typeof navigator>"u"||!navigator.credentials||typeof PublicKeyCredential>"u")return 24;return 0}function S0($){if($===null||$.type!=="public-key"||!("rawId"in $)||typeof $.getClientExtensionResults!=="function")return G(27);return R($)}async function HQ($){let Z=g0();if(Z!==0)return G(Z);let[J,Q]=m0($);if(Q!==0)return G(Q);if(J===void 0)return G(9);let V=$?.userName??"diplomatic-seed",Y={residentKey:"required",requireResidentKey:!0,userVerification:"required"};if($?.authenticatorAttachment!==void 0)Y.authenticatorAttachment=$.authenticatorAttachment;let X={largeBlob:{support:"required"}},W;try{W=await navigator.credentials.create({publicKey:{challenge:P0(B0),rp:{id:J,name:$?.rpName??"DIPLOMATIC"},user:{id:P0(16),name:V,displayName:V},pubKeyCredParams:c$,authenticatorSelection:Y,extensions:X}})}catch{return G(24)}let[z,K]=S0(W);if(K!==0)return G(K);if(z===void 0)return G(27);if(z.getClientExtensionResults().largeBlob?.supported!==!0)return G(24);return R(new Uint8Array(z.rawId))}async function oZ($,Z,J){let Q=g0();if(Q!==0)return Q;let[V,Y]=m0(J);if(Y!==0)return Y;if(V===void 0)return 9;let X={largeBlob:{write:E0(Z)}},W;try{W=await navigator.credentials.get({publicKey:{challenge:P0(B0),rpId:V,allowCredentials:[{type:"public-key",id:E0($)}],userVerification:"required",extensions:X}})}catch{return 24}let[z,K]=S0(W);if(K!==0)return K;if(z===void 0)return 27;if(z.getClientExtensionResults().largeBlob?.written!==!0)return 24;return 0}async function MQ($,Z){let J=g0();if(J!==0)return G(J);let[Q,V]=m0(Z);if(V!==0)return G(V);if(Q===void 0)return G(9);let Y={largeBlob:{read:!0}},X;try{let N={challenge:P0(B0),rpId:Q,userVerification:"required",extensions:Y};if($!==void 0)N.allowCredentials=[{type:"public-key",id:E0($)}];X=await navigator.credentials.get({publicKey:N})}catch{return G(24)}let[W,z]=S0(X);if(z!==0)return G(z);if(W===void 0)return G(27);let F=W.getClientExtensionResults().largeBlob?.blob;if(F===void 0)return G(7);return R({blob:new Uint8Array(F),credId:new Uint8Array(W.rawId)})}var d$=new TextEncoder().encode("diplomatic.prf.v1"),aZ=32;async function CQ($){let Z=g0();if(Z!==0)return G(Z);let[J,Q]=m0($);if(Q!==0)return G(Q);if(J===void 0)return G(9);let V=$?.userName??"diplomatic-prf",Y={residentKey:"required",requireResidentKey:!0,userVerification:"required",authenticatorAttachment:$?.authenticatorAttachment??"platform"},X;try{X=await navigator.credentials.create({publicKey:{challenge:P0(B0),rp:{id:J,name:$?.rpName??"DIPLOMATIC"},user:{id:P0(16),name:V,displayName:V},pubKeyCredParams:c$,authenticatorSelection:Y,extensions:{prf:{}}}})}catch{return G(24)}let[W,z]=S0(X);if(z!==0)return G(z);if(W===void 0)return G(27);let K=W.getClientExtensionResults();return R({credId:new Uint8Array(W.rawId),prfEnabled:K.prf?.enabled===!0})}async function O$($){let Z=g0();if(Z!==0)return G(Z);let[J,Q]=m0($);if(Q!==0)return G(Q);if(J===void 0)return G(9);let V=$?.salt??d$,Y=E0(V),X={challenge:P0(B0),rpId:J,userVerification:"required",extensions:{prf:{eval:{first:Y}}}};if($?.credId!==void 0)X.allowCredentials=[{type:"public-key",id:E0($.credId)}];let W;try{W=await navigator.credentials.get({publicKey:X})}catch{return G(24)}let[z,K]=S0(W);if(K!==0)return G(K);if(z===void 0)return G(27);let F=z.getClientExtensionResults().prf?.results;if(F?.first===void 0)return G(7);let N=F.first,U=N instanceof ArrayBuffer?new Uint8Array(N):new Uint8Array(N.buffer,N.byteOffset,N.byteLength),O=U.byteLength>=aZ?U.slice(0,aZ):U;if(O.byteLength!==aZ)return G(27);return R({prf:O,credId:new Uint8Array(z.rawId)})}var r$="";var o$;function pV(){if(o$!==void 0)return o$;if(typeof r$!=="string"||r$.length===0)throw Error("[DIPLOMATIC] worker source not embedded; run pkg build before spawn");let $=new Blob([r$],{type:"text/javascript"});return o$=URL.createObjectURL($),o$}function PQ(){if(typeof Worker>"u")throw Error("[DIPLOMATIC] Worker API unavailable; cannot spawn sync worker");return new Worker(pV(),{type:"module"})}var nV=new TextEncoder().encode("diplomatic.wrap.v1"),cV=32,dV=16;class $0{#J;#$;constructor($,Z){this.#J=$,this.#$=Z}static async fromRandom($){let Z=await $.gen256BitSecureRandomSeed(),[J,Q]=t(Z);if(Q!==0||J===void 0)throw Error(`enclave: invalid random seed (${Q})`);return new $0(J,$)}static fromBytes($,Z){let[J,Q]=t(Z);if(Q!==0)return G(Q);if(J===void 0)return G(10);let[V,Y]=t(J.slice());if(Y!==0)return G(Y);if(V===void 0)return G(10);return R(new $0(V,$))}async sealWithPasskey($){let Z=$?.salt??d$,J=$?.credId;if(J===void 0&&$?.createCredIfNeeded===!0){let[Y,X]=await CQ({rpId:$?.rpId,rpName:$?.rpName,userName:$?.userName??"diplomatic-prf"});if(X!==0)return G(X);if(Y===void 0)return G(24);if(!Y.prfEnabled)return G(24);J=Y.credId}let[Q,V]=await O$({rpId:$?.rpId,rpName:$?.rpName,credId:J,salt:Z});if(V!==0)return G(V);if(Q===void 0)return G(7);try{let[Y,X]=await this.#Z(Q.prf);if(X!==0)return G(X);if(Y===void 0)return G(12);return R({sealedMaster:Y,salt:Z.slice(),credId:Q.credId.slice()})}finally{Q.prf.fill(0)}}static async unsealWithPasskey($,Z,J){let[Q,V]=await O$({rpId:J.rpId,rpName:J.rpName,credId:J.credId,salt:J.salt});if(V!==0)return G(V);if(Q===void 0)return G(7);try{return await $0.#V($,Z,Q.prf)}finally{Q.prf.fill(0)}}async persistToLargeBlob($=[],Z){let J=Z?.credId;if(J===void 0){let[Y,X]=await HQ(Z);if(X!==0)return G(X);if(Y===void 0)return G(24);J=Y}let[Q,V]=this.#Q($);if(V!==0)return G(V);if(Q===void 0)return G(12);try{let Y=await oZ(J,Q,Z);if(Y!==0)return G(Y);return R(J)}finally{Q.fill(0)}}static async fromLargeBlob($,Z){let[J,Q]=await MQ(Z?.credId,Z);if(Q!==0)return G(Q);if(J===void 0)return G(7);try{return $0.#W($,J.blob,J.credId)}finally{J.blob.fill(0)}}static async clearLargeBlob($,Z){return oZ($,new Uint8Array(R0),Z)}async sealPairPackageBody($,Z){let J=Z?.salt??d$,[Q,V]=await O$({rpId:Z?.rpId,rpName:Z?.rpName,credId:Z?.credId,salt:J});if(V!==0)return G(V);if(Q===void 0)return G(7);try{let[Y,X]=await a$(this.#$,Q.prf);if(X!==0)return G(X);if(Y===void 0)return G(12);let[W,z]=t(this.#J.slice());if(z!==0)return G(z);if(W===void 0)return G(10);let K={masterSeed:W,hosts:$.map((q)=>({handle:q.handle,label:q.label,idx:q.idx??0}))},F=new S,N=F.writeStruct(rZ,K);if(N!==0)return W.fill(0),G(N);let U=F.result();W.fill(0);let O;try{O=await this.#$.encryptXSalsa20Poly1305Combined(U,Y)}catch{return U.fill(0),G(12)}return U.fill(0),R({body:O,salt:J.slice(),credId:Q.credId.slice()})}finally{Q.prf.fill(0)}}static async openPairPackageBody($,Z,J){let[Q,V]=await O$({rpId:J.rpId,rpName:J.rpName,credId:J.credId,salt:J.salt});if(V!==0)return G(V);if(Q===void 0)return G(7);try{let[Y,X]=await a$($,Q.prf);if(X!==0)return G(X);if(Y===void 0)return G(12);let W;try{W=await $.decryptXSalsa20Poly1305Combined(Z,Y)}catch{return G(20)}let z=new g(W),[K,F]=z.readStruct(rZ);if(W.fill(0),F!==0)return G(F);if(K===void 0)return G(14);let[N,U]=$0.fromBytes($,K.masterSeed);if(K.masterSeed.fill(0),U!==0)return G(U);if(N===void 0)return G(12);let[O,q]=await N.#Z(Q.prf);if(q!==0)return G(q);if(O===void 0)return G(12);return R({enclave:N,hosts:K.hosts.map((I)=>({...I})),sealedMaster:O,credId:Q.credId.slice()})}finally{Q.prf.fill(0)}}spawnSyncWorker($){let Z=PQ(),J=this.#J.slice();return Z.postMessage({id:$.id,op:"setSeed",seed:J,persist:$.persist},[J.buffer]),Z}deriveCipher($,Z){let J=$.slice(),Q=(X)=>this.#G(J,X),V=(X)=>this.#z(J,X);return{encrypt:Object.freeze({encrypt:Q}),decrypt:Object.freeze({decrypt:V}),both:Object.freeze({encrypt:Q,decrypt:V})}[Z]}async deriveIdentity($,Z=0){let J=$,Q=Z,V=await this.#X(J,Q);return Object.freeze({publicKey:V.publicKey,sign:(Y)=>this.#F(J,Q,Y),kdmFor:(Y)=>this.#N(J,Q,Y)})}async#Z($){let[Z,J]=await a$(this.#$,$);if(J!==0)return G(J);if(Z===void 0)return G(12);try{let Q=await this.#$.encryptXSalsa20Poly1305Combined(this.#J,Z);return j0(Q)}catch{return G(12)}}static async#V($,Z,J){let[,Q]=j0(Z);if(Q!==0)return G(Q);let[V,Y]=await a$($,J);if(Y!==0)return G(Y);if(V===void 0)return G(12);try{let X=await $.decryptXSalsa20Poly1305Combined(Z,V);return $0.fromBytes($,X)}catch{return G(20)}}#Q($){let[Z,J]=t(this.#J.slice());if(J!==0)return G(J);if(Z===void 0)return G(10);let[Q,V]=IQ(Z,$);if(V!==0)return Z.fill(0),G(V);if(Q===void 0)return Z.fill(0),G(12);Z.fill(0);let Y=new S,X=Y.writeStruct(dZ,Q);if(Q.masterSeed.fill(0),X!==0)return G(X);return R(Y.result())}static#W($,Z,J){if(Z.byteLength===0||Z.every((z)=>z===0))return G(22);if(Z.byteLength===R0){let[z,K]=$0.fromBytes($,Z);if(K!==0)return G(K);if(z===void 0)return G(12);return R({enclave:z,hosts:[],credId:J})}let Q=new g(Z),[V,Y]=Q.readStruct(dZ);if(Y!==0)return G(Y);if(V===void 0)return G(14);let[X,W]=$0.fromBytes($,V.masterSeed);if(V.masterSeed.fill(0),W!==0)return G(W);if(X===void 0)return G(12);return R({enclave:X,hosts:V.hosts.map((z)=>({...z})),credId:J})}async#G($,Z){let J=await this.#Y($);return this.#$.encryptXSalsa20Poly1305Combined(Z,J)}async#z($,Z){let J=await this.#Y($);return this.#$.decryptXSalsa20Poly1305Combined(Z,J)}async#Y($){return this.#$.blake3(W$(this.#J,$))}async#K($,Z){let J=new TextEncoder().encode($),Q=new Uint8Array(8);return new DataView(Q.buffer).setBigUint64(0,BigInt(Z),!1),await this.#Y(W$(J,Q))}async#X($,Z){let J=await this.#K($,Z);return this.#$.deriveEd25519KeyPair(J)}async#F($,Z,J){let Q=await this.#X($,Z);return this.#$.signEd25519(J,Q.privateKey)}async#N($,Z,J){let Q=await this.#X($,Z),V=W$(Q.privateKey,J);return(await this.#$.blake3(V)).slice(0,T0)}}async function a$($,Z){if(Z.byteLength<dV)return G(10);let J=await $.blake3(W$(Z,nV));return R(J.slice(0,cV))}class sZ{db;constructor($){this.db=$}async enq($){let Z=[...$];if(Z.length===0)return;let J=this.db.transaction(W0,"readwrite"),Q=J.objectStore(W0);return new Promise((V,Y)=>{J.oncomplete=()=>V(),J.onerror=()=>Y(J.error);for(let X of Z){let W=`${X.host}:${X.seq}`;Q.put(X,W)}})}async deq($,Z){let J=[...Z];if(J.length===0)return;let Q=this.db.transaction(W0,"readwrite"),V=Q.objectStore(W0);return new Promise((Y,X)=>{Q.oncomplete=()=>Y(),Q.onerror=()=>X(Q.error);for(let W of J){let z=`${$}:${W}`;V.delete(z)}})}async list(){let Z=this.db.transaction(W0,"readonly").objectStore(W0);return new Promise((J,Q)=>{let V=Z.getAll();V.onsuccess=()=>J(V.result),V.onerror=()=>Q(V.error)})}async count(){let Z=this.db.transaction(W0,"readonly").objectStore(W0);return new Promise((J,Q)=>{let V=Z.count();V.onsuccess=()=>J(V.result),V.onerror=()=>Q(V.error)})}async wipe(){let $=this.db.transaction(W0,"readwrite"),Z=$.objectStore(W0);return new Promise((J,Q)=>{$.oncomplete=()=>J(),$.onerror=()=>Q($.error),Z.clear()})}}function wQ($){return{label:$.label,handle:new URL($.handle),idx:$.idx,lastSeq:$.lastSeq||0,clockOffset:$.clockOffset,subscription:$.subscription}}function rV($,Z){let J={...$};if(Z.setLastSeq!==void 0)J.lastSeq=Z.setLastSeq;else if(Z.lastSeq!==void 0){let Q=J.lastSeq||0;if(Z.lastSeq>Q)J.lastSeq=Z.lastSeq}return delete J.numBags,delete J.numDupes,J}class tZ{db;constructor($){this.db=$}async add($){return this.put({...$,lastSeq:0})}async put($){let Z={...$,handle:$.handle.toString(),lastSeq:$.lastSeq??0},J=this.db.transaction(Z0,"readwrite"),Q=J.objectStore(Z0);return new Promise((V,Y)=>{J.oncomplete=()=>V(),J.onerror=()=>Y(J.error),Q.put(Z)})}async touch($,Z){return this.recordStats($,{lastSeq:Z})}async recordStats($,Z){let J=this.db.transaction(Z0,"readwrite"),Q=J.objectStore(Z0);return new Promise((V,Y)=>{J.oncomplete=()=>V(),J.onerror=()=>Y(J.error);let X=Q.get($);X.onsuccess=()=>{let W=X.result;if(!W)return;Q.put(rV(W,Z))}})}async get($){let J=this.db.transaction(Z0,"readonly").objectStore(Z0);return new Promise((Q,V)=>{let Y=J.get($);Y.onsuccess=()=>{let X=Y.result;if(!X)Q(void 0);else Q(wQ(X))},Y.onerror=()=>V(Y.error)})}async set($,Z){let J=await this.get($);if(!J)return 13;try{return await this.put({...J,...Z}),0}catch{return 18}}async del($){let Z=this.db.transaction(Z0,"readwrite"),J=Z.objectStore(Z0);return new Promise((Q,V)=>{Z.oncomplete=()=>Q(),Z.onerror=()=>V(Z.error),J.delete($)})}async list(){let Z=this.db.transaction(Z0,"readonly").objectStore(Z0);return new Promise((J,Q)=>{let V=Z.getAll();V.onsuccess=()=>{let Y=V.result;J(Y.map(wQ))},V.onerror=()=>Q(V.error)})}async wipe(){let $=this.db.transaction(Z0,"readwrite"),Z=$.objectStore(Z0);return new Promise((J,Q)=>{$.oncomplete=()=>J(),$.onerror=()=>Q($.error),Z.clear()})}}class eZ{crypto;db;constructor($,Z){this.crypto=Z;this.db=$}async add($){let Z=this.db.transaction(u,"readwrite"),J=Z.objectStore(u);return new Promise((Q)=>{if($.length===0){Q([]);return}let V=Array($.length).fill(0);Z.oncomplete=()=>Q(V),Z.onerror=()=>{for(let Y=0;Y<V.length;Y++)V[Y]=18;Q(V)};for(let Y=0;Y<$.length;Y++){let{key:X,data:W}=$[Y],z=f(X),K=J.put(W,z);K.onerror=(F)=>{F.preventDefault(),V[Y]=18}}})}async del($){let Z=[...$];if(Z.length===0)return;let J=this.db.transaction(u,"readwrite"),Q=J.objectStore(u);return new Promise((V,Y)=>{J.oncomplete=()=>V(),J.onerror=()=>Y(J.error);for(let X of Z){let W=f(X);Q.delete(W)}})}async get($){let J=this.db.transaction(u,"readonly").objectStore(u);return new Promise((Q,V)=>{let Y=f($),X=J.get(Y);X.onsuccess=async()=>{let W=X.result;if(W)Q(await v$($,W,this.crypto));else Q(void 0)},X.onerror=()=>V(X.error)})}async has($){return await this.get($)!==void 0}async list($){let Z=$?.apld,J=$?.body!==!1,V=this.db.transaction(u,"readonly").objectStore(u);return new Promise((Y,X)=>{let W=[],z=Z===void 0?V.openCursor():V.index(q$).openCursor(IDBKeyRange.only(Z));z.onsuccess=(K)=>{let F=K.target.result;if(F){let N=Z===void 0?F.key:F.primaryKey,U=F.value;W.push({hash:F0(N),data:U}),F.continue()}else Promise.all(W.map(({hash:N,data:U})=>v$(N,U,this.crypto,{body:J}))).then(Y).catch(X)},z.onerror=()=>X(z.error)})}async count($){let J=this.db.transaction(u,"readonly").objectStore(u);return new Promise((Q,V)=>{let Y=$===void 0?J.count():J.index(q$).count(IDBKeyRange.only($));Y.onsuccess=()=>Q(Y.result),Y.onerror=()=>V(Y.error)})}async listKeys(){let Z=this.db.transaction(u,"readonly").objectStore(u);return new Promise((J,Q)=>{let V=[],Y=Z.openKeyCursor();Y.onsuccess=(X)=>{let W=X.target.result;if(W)V.push(F0(W.key)),W.continue();else J(V)},Y.onerror=()=>Q(Y.error)})}async last($){let J=this.db.transaction(u,"readonly").objectStore(u);return new Promise((Q,V)=>{let Y,X=J.openCursor();X.onsuccess=async(W)=>{let z=W.target.result;if(z){let{key:K,value:F}=z;if(V0($,F.eid)){if(!Y||(F.ctr??0)>(Y.data.ctr??0)||(F.ctr??0)===(Y.data.ctr??0)&&(F.off??0)>(Y.data.off??0))Y={key:K,data:F}}z.continue()}else if(Y){let K=F0(Y.key);Q(await v$(K,Y.data,this.crypto))}else Q(void 0)},X.onerror=()=>V(X.error)})}async markApplied($){let Z=[...$];if(Z.length===0)return;let J=this.db.transaction(u,"readwrite"),Q=J.objectStore(u);return new Promise((V,Y)=>{J.oncomplete=()=>V(),J.onerror=()=>Y(J.error);for(let X of Z){let W=f(X),z=Q.get(W);z.onsuccess=()=>{let K=z.result;if(!K)return;jZ(K,S$),Q.put(K,W)},z.onerror=(K)=>{K.preventDefault()}}})}async markFailed($){let Z=[...$];if(Z.length===0)return;let J=this.db.transaction(u,"readwrite"),Q=J.objectStore(u);return new Promise((V,Y)=>{J.oncomplete=()=>V(),J.onerror=()=>Y(J.error);for(let{key:X,err:W}of Z){let z=f(X),K=Q.get(z);K.onsuccess=()=>{let F=K.result;if(!F)return;jZ(F,a0,W),Q.put(F,z)},K.onerror=(F)=>{F.preventDefault()}}})}async wipe(){let $=this.db.transaction(u,"readwrite"),Z=$.objectStore(u);return new Promise((J,Q)=>{$.oncomplete=()=>J(),$.onerror=()=>Q($.error),Z.clear()})}}class $J{#J;#$;#Z;#V;#Q;constructor($){if(this.#J=$.crypto,this.#Q=$.persistMeta,this.#V={rpId:$.rpId,rpName:$.rpName},$.meta!==void 0)this.#Z=J$($.meta)}get meta(){return this.#Z===void 0?void 0:J$(this.#Z)}setMeta($){this.#Z=$===void 0?void 0:J$($)}async save($,Z){if(Z?.persist===!0)return Promise.reject(Error("prf-store: use wrapAndSave(enclave) to persist sealed master"));return this.#$=$,this.#$}async wrapAndSave($,Z){let[J,Q]=await $.sealWithPasskey({...this.#V,salt:Z?.salt,credId:Z?.credId??this.#Z?.credId,createCredIfNeeded:Z?.createCredIfNeeded??Z?.credId===void 0,userName:"diplomatic-prf"});if(Q!==0)return G(Q);if(J===void 0)return G(12);let V={sealedMaster:J.sealedMaster,salt:J.salt,credId:J.credId};return this.#Z=V,this.#$=$,await this.#Q(J$(V)),R(this.#$)}async load(){return this.#$}async unlock(){let $=this.#Z;if($===void 0)return G(22);let[Z,J]=await $0.unsealWithPasskey(this.#J,$.sealedMaster,{...this.#V,salt:$.salt,credId:$.credId});if(J!==0)return G(J);if(Z===void 0)return G(12);return this.#$=Z,R(Z)}async adoptSealed($,Z){return this.#Z=J$(Z),this.#$=$,await this.#Q(J$(Z)),R(this.#$)}async wipe(){this.#$=void 0,this.#Z=void 0,await this.#Q(void 0)}}function J$($){let[Z,J]=j0($.sealedMaster.slice());return{sealedMaster:J===0&&Z!==void 0?Z:$.sealedMaster,salt:$.salt.slice(),credId:$.credId===void 0?void 0:$.credId.slice()}}var ZJ="seed",s$="prfMeta";class JJ{enclave;db;#J;constructor($,Z){this.db=$,this.#J=Z}async save($,Z){return this.enclave=$,this.enclave}async load(){if(this.enclave)return this.enclave;let $=await this.#$();if($===void 0||$==="")return;let Z=D$($),[J,Q]=$0.fromBytes(this.#J,Z);if(Z.fill(0),await this.#Z(),Q!==0||J===void 0)return;return this.enclave=J,this.enclave}async clearSession(){this.enclave=void 0,await this.#Z()}async wipe(){this.enclave=void 0;let $=this.db.transaction(G0,"readwrite"),Z=$.objectStore(G0);return new Promise((J,Q)=>{$.oncomplete=()=>J(),$.onerror=()=>Q($.error),Z.delete(ZJ),Z.delete(s$)})}async loadPrfMeta(){let Z=this.db.transaction(G0,"readonly").objectStore(G0);return new Promise((J,Q)=>{let V=Z.get(s$);V.onsuccess=()=>{J(oV(V.result))},V.onerror=()=>Q(V.error)})}async persistPrfMeta($){let Z=this.db.transaction(G0,"readwrite"),J=Z.objectStore(G0);return new Promise((Q,V)=>{if(Z.oncomplete=()=>Q(),Z.onerror=()=>V(Z.error),$===void 0){J.delete(s$);return}let Y={sealedMaster:$.sealedMaster.slice(),salt:$.salt.slice(),credId:$.credId===void 0?void 0:$.credId.slice()};J.put(Y,s$)})}async hasPrfMeta(){return await this.loadPrfMeta()!==void 0}async openPrfStore($){let Z=await this.loadPrfMeta();return new $J({crypto:$.crypto??this.#J,rpId:$.rpId,rpName:$.rpName,meta:Z,persistMeta:(J)=>this.persistPrfMeta(J)})}#$(){let Z=this.db.transaction(G0,"readonly").objectStore(G0);return new Promise((J,Q)=>{let V=Z.get(ZJ);V.onsuccess=()=>{let Y=V.result;J(typeof Y==="string"&&Y.length>0?Y:void 0)},V.onerror=()=>Q(V.error)})}#Z(){let $=this.db.transaction(G0,"readwrite"),Z=$.objectStore(G0);return new Promise((J,Q)=>{$.oncomplete=()=>J(),$.onerror=()=>Q($.error),Z.delete(ZJ)})}}function oV($){if($===void 0||$===null||typeof $!=="object")return;let Z=$;if(!(Z.sealedMaster instanceof Uint8Array)||!(Z.salt instanceof Uint8Array))return;let[J,Q]=j0(Z.sealedMaster);if(Q!==0||J===void 0)return;return{sealedMaster:J,salt:Z.salt.slice(),credId:Z.credId instanceof Uint8Array?Z.credId.slice():void 0}}class QJ{db;constructor($){this.db=$}async enq($,Z){let J=[...Z];if(J.length===0)return;let Q=this.db.transaction(z0,"readwrite"),V=Q.objectStore(z0);return new Promise((Y,X)=>{Q.oncomplete=()=>Y(),Q.onerror=()=>X(Q.error);for(let W of J){let z=N0(W);V.put({host:$,hash:z})}})}async deq($,Z){let J=[...Z];if(J.length===0)return;let Q=this.db.transaction(z0,"readwrite"),V=Q.objectStore(z0);return new Promise((Y,X)=>{Q.oncomplete=()=>Y(),Q.onerror=()=>X(Q.error);for(let W of J){let z=N0(W);V.delete([$,z])}})}async list($){let J=this.db.transaction(z0,"readonly").objectStore(z0);return new Promise((Q,V)=>{let Y=J.getAll();Y.onsuccess=()=>{let W=Y.result.filter((z)=>z.host===$).map((z)=>z.hash);Q(W.map((z)=>D$(z)))},Y.onerror=()=>V(Y.error)})}async count(){let Z=this.db.transaction(z0,"readonly").objectStore(z0);return new Promise((J,Q)=>{let V=Z.count();V.onsuccess=()=>J(V.result),V.onerror=()=>Q(V.error)})}async wipe(){let $=this.db.transaction(z0,"readwrite"),Z=$.objectStore(z0);return new Promise((J,Q)=>{$.oncomplete=()=>J(),$.onerror=()=>Q($.error),Z.clear()})}}var G0="seedMeta",Z0="hosts",z0="uploadQueue",W0="downloadQueue",u="messages",q$="apld",TQ=3,DQ="diplomatic-store-db";class jQ{seed;hosts;uploads;downloads;messages;db;constructor($,Z){this.db=$,this.seed=new JJ($,Z),this.hosts=new tZ($),this.uploads=new QJ($),this.downloads=new sZ($),this.messages=new eZ($,Z)}async wipe(){await this.hosts.wipe(),await this.uploads.wipe(),await this.downloads.wipe(),await this.messages.wipe()}}async function aV(){return new Promise(($,Z)=>{let J=indexedDB.open(DQ,TQ);J.onupgradeneeded=()=>{let{result:Q,transaction:V}=J;if(!Q.objectStoreNames.contains(G0))Q.createObjectStore(G0);if(!Q.objectStoreNames.contains(Z0))Q.createObjectStore(Z0,{keyPath:"label"});if(!Q.objectStoreNames.contains(z0))Q.createObjectStore(z0,{keyPath:["host","hash"]});if(!Q.objectStoreNames.contains(W0))Q.createObjectStore(W0);let Y;if(!Q.objectStoreNames.contains(u))Y=Q.createObjectStore(u);else{if(!V)throw Error("missing upgrade transaction for messages store");Y=V.objectStore(u)}if(!Y.indexNames.contains(q$))Y.createIndex(q$,"apld",{unique:!1})},J.onblocked=()=>{console.warn(`[DIPLOMATIC] protocol store IDB upgrade blocked (${DQ} → v${TQ}); waiting for other connections to close`)},J.onsuccess=()=>{let Q=J.result;Q.onversionchange=()=>{Q.close()},$(Q)},J.onerror=()=>Z(J.error??Error("protocol store IndexedDB open failed"))})}async function AQ($){let Z=await aV();if(typeof navigator<"u"&&navigator.storage?.persist)try{await Promise.race([navigator.storage.persist(),new Promise((J)=>{setTimeout(()=>J(!1),2000)})])}catch{}return new jQ(Z,$)}class VJ{client;entDB;post;whenReady;resolveReady;rejectReady;constructor($){this.post=$,this.whenReady=new Promise((Z,J)=>{this.resolveReady=Z,this.rejectReady=J})}async init(){try{let $=await AQ(U$),Z=await vJ({cache:!1}),J=new k$(Z.apply,()=>Z.clear(),(Y)=>{if(Y.length<1)return;this.post({kind:"dirty",eids:Y.map((X)=>X.slice())})}),Q=J.clear;J.clear=async()=>{let Y=await Q();if(Y===0)this.post({kind:"wiped"});return Y};let V=new kZ(new XZ,J,$,_J,U$);this.client=V,this.entDB=Z,V.clientState.listen(()=>{this.emitClientState()}),V.xferState.listen(()=>{this.emitXferState()}),await this.emitClientState(),await this.emitXferState(),this.post({kind:"ready"}),this.markReady()}catch($){let Z=$ instanceof Error?$:Error(String($));throw this.post({kind:"initError",message:Z.message}),this.failReady(Z),Z}}markReady(){let $=this.resolveReady;if(this.resolveReady=void 0,this.rejectReady=void 0,$)$()}failReady($){let Z=this.rejectReady;if(this.resolveReady=void 0,this.rejectReady=void 0,Z)Z($)}requireClient(){if(!this.client)throw Error("WorkerRuntime not initialized");return this.client}async emitClientState(){let $=this.client;if(!$)return;let Z=await $.clientState.get();this.post({kind:"clientState",state:Z})}async emitXferState(){let $=this.client;if(!$)return;let Z=await $.xferState.get();this.post({kind:"xferState",state:Z})}hostFromSerialized($){return{handle:new URL($.handle),label:$.label,idx:$.idx}}async handle($){await this.whenReady;let Z=this.requireClient();switch($.op){case"ping":return"pong";case"setSeed":{let[J,Q]=$0.fromBytes(U$,$.seed);if(Q!==0||J===void 0)throw new K0(Q);await Z.setSeed(J,{persist:$.persist});return}case"link":{await Z.link(this.hostFromSerialized($.host),$.connect??!0);return}case"unlink":{await Z.unlink($.label);return}case"connect":{await Z.connect($.listen??!0,$.sync??!0);return}case"disconnect":{await Z.disconnect();return}case"sync":return await Z.sync();case"rebuild":return await Z.rebuild({checkHost:$.checkHost??!0});case"reconcile":{let[J,Q]=await Z.reconcile($.hostLabel,{pull:$.pull,push:$.push,sync:$.sync});if(Q!==0)throw new K0(Q);if(!J)throw new K0(12);return J}case"msgcheck":return await Z.msgcheck();case"entcheck":{let J=this.entDB;if(!J)throw new K0(12);let[Q,V]=await J.checksum(U$);if(V!==0)throw new K0(V);if(!Q)throw new K0(12);return Q}case"wipe":{await Z.wipe({msgs:$.msgs,ents:$.ents,meta:$.meta,seed:$.seed});return}case"import":{let J=$.bytes.slice(),Q=new Blob([J]),V=new File([Q],"import.dip");return await Z.import(V)}case"export":{let[J,Q]=await Z.exportBytes();if(Q!==0)throw new K0(Q);if(!J)throw new K0(12);return J}case"getClientState":return await Z.clientState.get();case"getXferState":return await Z.xferState.get();default:{let J=$;throw Error("unknown worker command")}}}}class K0 extends Error{status;constructor($){super(`WorkerStatusError: ${j[$]}`);this.status=$;this.name="WorkerStatusError"}}function t$($,Z){return{kind:"reply",id:$,ok:!0,result:Z}}function YJ($,Z){return{kind:"reply",id:$,ok:!1,status:Z}}var A0=globalThis,_Q=new VJ(($,Z)=>{if(Z&&Z.length>0)A0.postMessage($,Z);else A0.postMessage($)});A0.onmessage=($)=>{let Z=$.data;if(!zJ(Z))return;sV(Z)};async function sV($){try{let Z=await _Q.handle($);if(($.op==="export"||$.op==="msgcheck"||$.op==="entcheck")&&Z instanceof Uint8Array){let J=Z.slice();A0.postMessage(t$($.id,J),[J.buffer]);return}if($.op==="reconcile"&&Z&&typeof Z==="object"&&"msgcheck"in Z&&Z.msgcheck instanceof Uint8Array){let J=Z.msgcheck.slice(),Q={...Z,msgcheck:J};A0.postMessage(t$($.id,Q),[J.buffer]);return}A0.postMessage(t$($.id,Z))}catch(Z){if(Z instanceof K0){A0.postMessage(YJ($.id,Z.status));return}console.error("worker command failed",Z),A0.postMessage(YJ($.id,12))}}_Q.init().catch(($)=>{console.error("worker init failed",$)});\n';var zn;function K0(){if(zn!==void 0)return zn;if(typeof gn!=="string"||gn.length===0)throw Error("[DIPLOMATIC] worker source not embedded; run pkg build before spawn");let i=new Blob([gn],{type:"text/javascript"});return zn=URL.createObjectURL(i),zn}function Bt(){if(typeof Worker>"u")throw Error("[DIPLOMATIC] Worker API unavailable; cannot spawn sync worker");return new Worker(K0(),{type:"module"})}var G0=new TextEncoder().encode("diplomatic.wrap.v1"),o0=32,m0=16;class s{#n;#i;constructor(i,r){this.#n=i,this.#i=r}static async fromRandom(i){let r=await i.gen256BitSecureRandomSeed(),[n,e]=ii(r);if(e!==0||n===void 0)throw Error(`enclave: invalid random seed (${e})`);return new s(n,i)}static fromBytes(i,r){let[n,e]=ii(r);if(e!==0)return l(e);if(n===void 0)return l(10);let[t,$]=ii(n.slice());if($!==0)return l($);if(t===void 0)return l(10);return u(new s(t,i))}async sealWithPasskey(i){let r=i?.salt??Mr,n=i?.credId;if(n===void 0&&i?.createCredIfNeeded===!0){let[$,f]=await Fe({rpId:i?.rpId,rpName:i?.rpName,userName:i?.userName??"diplomatic-prf"});if(f!==0)return l(f);if($===void 0)return l(24);if(!$.prfEnabled)return l(24);n=$.credId}let[e,t]=await Vr({rpId:i?.rpId,rpName:i?.rpName,credId:n,salt:r});if(t!==0)return l(t);if(e===void 0)return l(7);try{let[$,f]=await this.#r(e.prf);if(f!==0)return l(f);if($===void 0)return l(12);return u({sealedMaster:$,salt:r.slice(),credId:e.credId.slice()})}finally{e.prf.fill(0)}}static async unsealWithPasskey(i,r,n){let[e,t]=await Vr({rpId:n.rpId,rpName:n.rpName,credId:n.credId,salt:n.salt});if(t!==0)return l(t);if(e===void 0)return l(7);try{return await s.#e(i,r,e.prf)}finally{e.prf.fill(0)}}async persistToLargeBlob(i=[],r){let n=r?.credId;if(n===void 0){let[$,f]=await Wn(r);if(f!==0)return l(f);if($===void 0)return l(24);n=$}let[e,t]=this.#t(i);if(t!==0)return l(t);if(e===void 0)return l(12);try{let $=await Cr(n,e,r);if($!==0)return l($);return u(n)}finally{e.fill(0)}}static async fromLargeBlob(i,r){let[n,e]=await In(r?.credId,r);if(e!==0)return l(e);if(n===void 0)return l(7);try{return s.#Z(i,n.blob,n.credId)}finally{n.blob.fill(0)}}static async clearLargeBlob(i,r){return Cr(i,new Uint8Array(ui),r)}async sealPairPackageBody(i,r){let n=r?.salt??Mr,[e,t]=await Vr({rpId:r?.rpId,rpName:r?.rpName,credId:r?.credId,salt:n});if(t!==0)return l(t);if(e===void 0)return l(7);try{let[$,f]=await Hr(this.#i,e.prf);if(f!==0)return l(f);if($===void 0)return l(12);let[Z,J]=ii(this.#n.slice());if(J!==0)return l(J);if(Z===void 0)return l(10);let h={masterSeed:Z,hosts:i.map((X)=>({handle:X.handle,label:X.label,idx:X.idx??0}))},Q=new O,w=Q.writeStruct(yr,h);if(w!==0)return Z.fill(0),l(w);let V=Q.result();Z.fill(0);let Y;try{Y=await this.#i.encryptXSalsa20Poly1305Combined(V,$)}catch{return V.fill(0),l(12)}return V.fill(0),u({body:Y,salt:n.slice(),credId:e.credId.slice()})}finally{e.prf.fill(0)}}static async openPairPackageBody(i,r,n){let[e,t]=await Vr({rpId:n.rpId,rpName:n.rpName,credId:n.credId,salt:n.salt});if(t!==0)return l(t);if(e===void 0)return l(7);try{let[$,f]=await Hr(i,e.prf);if(f!==0)return l(f);if($===void 0)return l(12);let Z;try{Z=await i.decryptXSalsa20Poly1305Combined(r,$)}catch{return l(20)}let J=new N(Z),[h,Q]=J.readStruct(yr);if(Z.fill(0),Q!==0)return l(Q);if(h===void 0)return l(14);let[w,V]=s.fromBytes(i,h.masterSeed);if(h.masterSeed.fill(0),V!==0)return l(V);if(w===void 0)return l(12);let[Y,X]=await w.#r(e.prf);if(X!==0)return l(X);if(Y===void 0)return l(12);return u({enclave:w,hosts:h.hosts.map((c)=>({...c})),sealedMaster:Y,credId:e.credId.slice()})}finally{e.prf.fill(0)}}spawnSyncWorker(i){let r=Bt(),n=this.#n.slice();return r.postMessage({id:i.id,op:"setSeed",seed:n,persist:i.persist},[n.buffer]),r}deriveCipher(i,r){let n=i.slice(),e=(f)=>this.#l(n,f),t=(f)=>this.#J(n,f);return{encrypt:Object.freeze({encrypt:e}),decrypt:Object.freeze({decrypt:t}),both:Object.freeze({encrypt:e,decrypt:t})}[r]}async deriveIdentity(i,r=0){let n=i,e=r,t=await this.#f(n,e);return Object.freeze({publicKey:t.publicKey,sign:($)=>this.#Q(n,e,$),kdmFor:($)=>this.#w(n,e,$)})}async#r(i){let[r,n]=await Hr(this.#i,i);if(n!==0)return l(n);if(r===void 0)return l(12);try{let e=await this.#i.encryptXSalsa20Poly1305Combined(this.#n,r);return gi(e)}catch{return l(12)}}static async#e(i,r,n){let[,e]=gi(r);if(e!==0)return l(e);let[t,$]=await Hr(i,n);if($!==0)return l($);if(t===void 0)return l(12);try{let f=await i.decryptXSalsa20Poly1305Combined(r,t);return s.fromBytes(i,f)}catch{return l(20)}}#t(i){let[r,n]=ii(this.#n.slice());if(n!==0)return l(n);if(r===void 0)return l(10);let[e,t]=ae(r,i);if(t!==0)return r.fill(0),l(t);if(e===void 0)return r.fill(0),l(12);r.fill(0);let $=new O,f=$.writeStruct(Xn,e);if(e.masterSeed.fill(0),f!==0)return l(f);return u($.result())}static#Z(i,r,n){if(r.byteLength===0||r.every((J)=>J===0))return l(22);if(r.byteLength===ui){let[J,h]=s.fromBytes(i,r);if(h!==0)return l(h);if(J===void 0)return l(12);return u({enclave:J,hosts:[],credId:n})}let e=new N(r),[t,$]=e.readStruct(Xn);if($!==0)return l($);if(t===void 0)return l(14);let[f,Z]=s.fromBytes(i,t.masterSeed);if(t.masterSeed.fill(0),Z!==0)return l(Z);if(f===void 0)return l(12);return u({enclave:f,hosts:t.hosts.map((J)=>({...J})),credId:n})}async#l(i,r){let n=await this.#$(i);return this.#i.encryptXSalsa20Poly1305Combined(r,n)}async#J(i,r){let n=await this.#$(i);return this.#i.decryptXSalsa20Poly1305Combined(r,n)}async#$(i){return this.#i.blake3(zr(this.#n,i))}async#h(i,r){let n=new TextEncoder().encode(i),e=new Uint8Array(8);return new DataView(e.buffer).setBigUint64(0,BigInt(r),!1),await this.#$(zr(n,e))}async#f(i,r){let n=await this.#h(i,r);return this.#i.deriveEd25519KeyPair(n)}async#Q(i,r,n){let e=await this.#f(i,r);return this.#i.signEd25519(n,e.privateKey)}async#w(i,r,n){let e=await this.#f(i,r),t=zr(e.privateKey,n);return(await this.#i.blake3(t)).slice(0,Ri)}}async function Hr(i,r){if(r.byteLength<m0)return l(10);let n=await i.blake3(zr(r,G0));return u(n.slice(0,o0))}class Un{#n;#i;#r;#e;#t;constructor(i){if(this.#n=i.crypto,this.#t=i.persistMeta,this.#e={rpId:i.rpId,rpName:i.rpName},i.meta!==void 0)this.#r=Yr(i.meta)}get meta(){return this.#r===void 0?void 0:Yr(this.#r)}setMeta(i){this.#r=i===void 0?void 0:Yr(i)}async save(i,r){if(r?.persist===!0)return Promise.reject(Error("prf-store: use wrapAndSave(enclave) to persist sealed master"));return this.#i=i,this.#i}async wrapAndSave(i,r){let[n,e]=await i.sealWithPasskey({...this.#e,salt:r?.salt,credId:r?.credId??this.#r?.credId,createCredIfNeeded:r?.createCredIfNeeded??r?.credId===void 0,userName:"diplomatic-prf"});if(e!==0)return l(e);if(n===void 0)return l(12);let t={sealedMaster:n.sealedMaster,salt:n.salt,credId:n.credId};return this.#r=t,this.#i=i,await this.#t(Yr(t)),u(this.#i)}async load(){return this.#i}async unlock(){let i=this.#r;if(i===void 0)return l(22);let[r,n]=await s.unsealWithPasskey(this.#n,i.sealedMaster,{...this.#e,salt:i.salt,credId:i.credId});if(n!==0)return l(n);if(r===void 0)return l(12);return this.#i=r,u(r)}async adoptSealed(i,r){return this.#r=Yr(r),this.#i=i,await this.#t(Yr(r)),u(this.#i)}async wipe(){this.#i=void 0,this.#r=void 0,await this.#t(void 0)}}function Yr(i){let[r,n]=gi(i.sealedMaster.slice());return{sealedMaster:n===0&&r!==void 0?r:i.sealedMaster,salt:i.salt.slice(),credId:i.credId===void 0?void 0:i.credId.slice()}}var Re="seed",Kn="prfMeta";class Gn{enclave;db;#n;constructor(i,r){this.db=i,this.#n=r}async save(i,r){return this.enclave=i,this.enclave}async load(){if(this.enclave)return this.enclave;let i=await this.#i();if(i===void 0||i==="")return;let r=Oi(i),[n,e]=s.fromBytes(this.#n,r);if(r.fill(0),await this.#r(),e!==0||n===void 0)return;return this.enclave=n,this.enclave}async clearSession(){this.enclave=void 0,await this.#r()}async wipe(){this.enclave=void 0;let i=this.db.transaction(hi,"readwrite"),r=i.objectStore(hi);return new Promise((n,e)=>{i.oncomplete=()=>n(),i.onerror=()=>e(i.error),r.delete(Re),r.delete(Kn)})}async loadPrfMeta(){let r=this.db.transaction(hi,"readonly").objectStore(hi);return new Promise((n,e)=>{let t=r.get(Kn);t.onsuccess=()=>{n(a0(t.result))},t.onerror=()=>e(t.error)})}async persistPrfMeta(i){let r=this.db.transaction(hi,"readwrite"),n=r.objectStore(hi);return new Promise((e,t)=>{if(r.oncomplete=()=>e(),r.onerror=()=>t(r.error),i===void 0){n.delete(Kn);return}let $={sealedMaster:i.sealedMaster.slice(),salt:i.salt.slice(),credId:i.credId===void 0?void 0:i.credId.slice()};n.put($,Kn)})}async hasPrfMeta(){return await this.loadPrfMeta()!==void 0}async openPrfStore(i){let r=await this.loadPrfMeta();return new Un({crypto:i.crypto??this.#n,rpId:i.rpId,rpName:i.rpName,meta:r,persistMeta:(n)=>this.persistPrfMeta(n)})}#i(){let r=this.db.transaction(hi,"readonly").objectStore(hi);return new Promise((n,e)=>{let t=r.get(Re);t.onsuccess=()=>{let $=t.result;n(typeof $==="string"&&$.length>0?$:void 0)},t.onerror=()=>e(t.error)})}#r(){let i=this.db.transaction(hi,"readwrite"),r=i.objectStore(hi);return new Promise((n,e)=>{i.oncomplete=()=>n(),i.onerror=()=>e(i.error),r.delete(Re)})}}function a0(i){if(i===void 0||i===null||typeof i!=="object")return;let r=i;if(!(r.sealedMaster instanceof Uint8Array)||!(r.salt instanceof Uint8Array))return;let[n,e]=gi(r.sealedMaster);if(e!==0||n===void 0)return;return{sealedMaster:n,salt:r.salt.slice(),credId:r.credId instanceof Uint8Array?r.credId.slice():void 0}}class Ne{db;constructor(i){this.db=i}async enq(i,r){let n=[...r];if(n.length===0)return;let e=this.db.transaction(Qi,"readwrite"),t=e.objectStore(Qi);return new Promise(($,f)=>{e.oncomplete=()=>$(),e.onerror=()=>f(e.error);for(let Z of n){let J=fi(Z);t.put({host:i,hash:J})}})}async deq(i,r){let n=[...r];if(n.length===0)return;let e=this.db.transaction(Qi,"readwrite"),t=e.objectStore(Qi);return new Promise(($,f)=>{e.oncomplete=()=>$(),e.onerror=()=>f(e.error);for(let Z of n){let J=fi(Z);t.delete([i,J])}})}async list(i){let n=this.db.transaction(Qi,"readonly").objectStore(Qi);return new Promise((e,t)=>{let $=n.getAll();$.onsuccess=()=>{let Z=$.result.filter((J)=>J.host===i).map((J)=>J.hash);e(Z.map((J)=>Oi(J)))},$.onerror=()=>t($.error)})}async count(){let r=this.db.transaction(Qi,"readonly").objectStore(Qi);return new Promise((n,e)=>{let t=r.count();t.onsuccess=()=>n(t.result),t.onerror=()=>e(t.error)})}async wipe(){let i=this.db.transaction(Qi,"readwrite"),r=i.objectStore(Qi);return new Promise((n,e)=>{i.oncomplete=()=>n(),i.onerror=()=>e(i.error),r.clear()})}}var hi="seedMeta",ti="hosts",Qi="uploadQueue",Ji="downloadQueue",p="messages",Nr="apld",_t=3,St="diplomatic-store-db";class Oe{seed;hosts;uploads;downloads;messages;db;constructor(i,r){this.db=i,this.seed=new Gn(i,r),this.hosts=new oe(i),this.uploads=new Ne(i),this.downloads=new Ge(i),this.messages=new me(i,r)}async wipe(){await this.hosts.wipe(),await this.uploads.wipe(),await this.downloads.wipe(),await this.messages.wipe()}}async function d0(){return new Promise((i,r)=>{let n=indexedDB.open(St,_t);n.onupgradeneeded=()=>{let{result:e,transaction:t}=n;if(!e.objectStoreNames.contains(hi))e.createObjectStore(hi);if(!e.objectStoreNames.contains(ti))e.createObjectStore(ti,{keyPath:"label"});if(!e.objectStoreNames.contains(Qi))e.createObjectStore(Qi,{keyPath:["host","hash"]});if(!e.objectStoreNames.contains(Ji))e.createObjectStore(Ji);let $;if(!e.objectStoreNames.contains(p))$=e.createObjectStore(p);else{if(!t)throw Error("missing upgrade transaction for messages store");$=t.objectStore(p)}if(!$.indexNames.contains(Nr))$.createIndex(Nr,"apld",{unique:!1})},n.onblocked=()=>{console.warn(`[DIPLOMATIC] protocol store IDB upgrade blocked (${St} → v${_t}); waiting for other connections to close`)},n.onsuccess=()=>{let e=n.result;e.onversionchange=()=>{e.close()},i(e)},n.onerror=()=>r(n.error??Error("protocol store IndexedDB open failed"))})}async function on(i){let r=await d0();if(typeof navigator<"u"&&navigator.storage?.persist)try{await Promise.race([navigator.storage.persist(),new Promise((n)=>{setTimeout(()=>n(!1),2000)})])}catch{}return new Oe(r,i)}function Et(i){if(!i||typeof i!=="object")return!1;if(!("kind"in i))return!1;return typeof i.kind==="string"}function vt(i){if(typeof i!=="number")return;return i}function bt(i){if(!i||typeof i!=="object")return;if(!("hasSeed"in i)||!("hasHost"in i)||!("connected"in i))return;if(typeof i.hasSeed!=="boolean"||typeof i.hasHost!=="boolean"||typeof i.connected!=="boolean")return;return{hasSeed:i.hasSeed,hasHost:i.hasHost,connected:i.connected}}function F0(i){if(!i||typeof i!=="object")return;if(!("phase"in i))return;let r=R0(i.phase);if(r===void 0)return;let n={phase:r};if("host"in i&&typeof i.host==="string")n.host=i.host;if("done"in i&&typeof i.done==="number")n.done=i.done;if("total"in i&&typeof i.total==="number")n.total=i.total;if("bytesDone"in i&&typeof i.bytesDone==="number")n.bytesDone=i.bytesDone;if("bytesTotal"in i&&typeof i.bytesTotal==="number")n.bytesTotal=i.bytesTotal;return n}function R0(i){if(i==="peek"||i==="pull"||i==="open"||i==="exec"||i==="push"||i==="import"||i==="idle"||i==="apply")return i==="apply"?"exec":i;return}function i$(i){if(!i||typeof i!=="object")return;if(!("numUploads"in i)||!("numDownloads"in i))return;if(typeof i.numUploads!=="number"||typeof i.numDownloads!=="number")return;let r={phase:"idle"};if("progress"in i){let n=F0(i.progress);if(n===void 0)return;r=n}return{numUploads:i.numUploads,numDownloads:i.numDownloads,progress:r}}var wi="[DIPLOMATIC]";class Tr{worker;state;store;local;nextId=1;pending=new Map;readyTimeoutMs;scheduledSync;cachedClientState={hasSeed:!1,hasHost:!1,connected:!1};cachedXferState={numUploads:0,numDownloads:0,progress:pi};clientState;xferState;constructor(i,r,n,e,t){this.state=i,this.store=r,this.readyTimeoutMs=t,this.clientState=new Vi(async()=>this.cachedClientState),this.xferState=new Vi(async()=>this.cachedXferState),this.scheduledSync=new ar(e,async()=>{if(!this.worker)return;try{await this.request({id:this.allocId(),op:"sync"})}catch($){console.error(`${wi} worker sync after local write failed`,$)}}),this.local=new ji(n,i,r,()=>{throw Error(`${wi} local writer has no transport (use worker for network)`)},mi,!0,void 0,void 0,()=>{this.scheduledSync.schedule()}),this.local.xferState.listen(($)=>{this.cachedXferState={numUploads:$.numUploads,numDownloads:$.numDownloads,progress:this.cachedXferState.progress},this.xferState.emit()})}bindWorker(i){let r=this.worker;if(r){r.onmessage=null,r.onerror=null,r.onmessageerror=null;try{r.terminate()}catch{}}this.worker=i,i.onmessage=(n)=>{this.onMessage(n.data)},i.onerror=(n)=>{console.error(`${wi} worker error`,n),this.failPending(Error(`${wi} worker failed to load`))},i.onmessageerror=()=>{this.failPending(Error(`${wi} worker message error`))}}failPending(i){for(let[,r]of this.pending)r.reject(i);this.pending.clear()}async flushScheduledSync(){await this.scheduledSync.flush()}static async open(i,r,n={}){let e=n.clock??new Ii,t=n.syncDebounceMs??$n,$=n.readyTimeoutMs??15000,f=new Tr(i,r,e,t,$);return await f.hydrateStateFromStore(r),f}async hydrateStateFromStore(i){let r=await i.seed.load(),n=await i.hosts.list();this.cachedClientState={hasSeed:r!==void 0,hasHost:Array.from(n).length>0,connected:!1};let e=await i.uploads.count(),t=await i.downloads.count();this.cachedXferState={numUploads:e,numDownloads:t,progress:pi}}async pullRemoteState(){let i=await this.request({id:this.allocId(),op:"getClientState"}),r=bt(i);if(r!==void 0)this.cachedClientState=r;let n=await this.request({id:this.allocId(),op:"getXferState"}),e=i$(n);if(e!==void 0)this.cachedXferState=e}requireWorker(){if(!this.worker)throw Error(`${wi} no sync worker; call setSeed first`);return this.worker}async ping(){if(await this.request({id:this.allocId(),op:"ping"})!=="pong")throw Error(`${wi} worker ping failed`)}terminate(){this.scheduledSync.cancel();let i=this.worker;if(this.worker=void 0,i)try{i.terminate()}catch{}this.failPending(Error(`${wi} worker terminated`))}onMessage(i){if(!Et(i))return;let r=i;switch(r.kind){case"ready":return;case"initError":{this.failPending(Error(`${wi} worker init failed: ${r.message}`));return}case"clientState":{this.cachedClientState=r.state,this.clientState.emit();return}case"xferState":{this.cachedXferState=r.state,this.xferState.emit();return}case"dirty":{this.state.refresh(r.eids.map(O0));return}case"wiped":{this.state.clear();return}case"reply":{let n=this.pending.get(r.id);if(!n)return;if(this.pending.delete(r.id),r.ok)n.resolve(r.result);else n.reject(new Ar(r.status));return}default:return}}allocId(){let i=this.nextId;return this.nextId+=1,i}request(i,r){let n=this.requireWorker();return new Promise((e,t)=>{if(this.pending.set(i.id,{resolve:e,reject:t}),r&&r.length>0)n.postMessage(i,r);else n.postMessage(i)})}async requestStatus(i,r){try{let n=await this.request(i,r),e=vt(n);if(e!==void 0)return e;return 0}catch(n){if(n instanceof Ar)return n.status;return 12}}serializeHost(i){return{handle:i.handle.href,label:i.label,idx:i.idx??0}}async setSeed(i,r){await this.local.setSeed(i,r),this.cachedClientState={...this.cachedClientState,hasSeed:!0},this.clientState.emit();let n=this.allocId(),e=this.readyTimeoutMs;await new Promise((t,$)=>{let f,Z=(J)=>{if(f!==void 0)clearTimeout(f);J()};this.pending.set(n,{resolve:(J)=>Z(()=>t(J)),reject:(J)=>Z(()=>$(J))}),f=setTimeout(()=>{this.pending.delete(n),$(Error(`${wi} setSeed worker timeout after ${e}ms`))},e);try{let J=i.spawnSyncWorker({id:n,persist:r?.persist});this.bindWorker(J)}catch(J){if(this.pending.delete(n),f!==void 0)clearTimeout(f);$(J instanceof Error?J:Error(String(J)))}});try{await this.pullRemoteState()}catch{}}async link(i,r=!0){await this.local.link(i,!1),await this.request({id:this.allocId(),op:"link",host:this.serializeHost(i),connect:r})}async unlink(i){if(await this.local.unlink(i),!this.worker)return;await this.request({id:this.allocId(),op:"unlink",label:i})}async hosts(){return this.local.hosts()}async connect(i=!0,r=!0){await this.request({id:this.allocId(),op:"connect",listen:i,sync:r})}async disconnect(){if(!this.worker)return;await this.request({id:this.allocId(),op:"disconnect"})}async insertRaw(i){return this.local.insertRaw(i)}async updateRaw(i,r,n){return this.local.updateRaw(i,r,n)}async insert(i){return this.local.insert(i)}async update(i){return this.local.update(i)}async delete(i){return this.local.delete(i)}async genEID(i){return this.local.genEID(i)}async sync(){return this.requestStatus({id:this.allocId(),op:"sync"})}async rebuild(i){return this.scheduledSync.cancel(),await this.scheduledSync.flush(),this.requestStatus({id:this.allocId(),op:"rebuild",checkHost:i?.checkHost})}async listMsgs(i){return this.local.listMsgs(i)}async countMsgs(i){return this.local.countMsgs(i)}async reconcile(i,r){try{let n=await this.request({id:this.allocId(),op:"reconcile",hostLabel:i,pull:r?.pull,push:r?.push,sync:r?.sync});if(!N0(n))return l(12);return u(n)}catch(n){if(n instanceof Ar&&n.status!==0)return l(n.status);return l(12)}}async msgcheck(){let i=await this.request({id:this.allocId(),op:"msgcheck"});if(!(i instanceof Uint8Array))throw Error(`${wi} msgcheck: expected Uint8Array`);return i}async entcheck(){let i=await this.request({id:this.allocId(),op:"entcheck"});if(!(i instanceof Uint8Array))throw Error(`${wi} entcheck: expected Uint8Array`);return i}async wipe(i){if(await this.local.wipe(i),this.worker)await this.request({id:this.allocId(),op:"wipe",msgs:i?.msgs,ents:i?.ents,meta:i?.meta,seed:i?.seed});await this.hydrateStateFromStore(this.store),this.clientState.emit(),this.xferState.emit()}async import(i){let r=new Uint8Array(await i.arrayBuffer());return this.requestStatus({id:this.allocId(),op:"import",bytes:r},[r.buffer])}async export(i,r){try{let n=await this.request({id:this.allocId(),op:"export"});if(!(n instanceof Uint8Array))return 12;let e=new Blob([n.slice()]);return Zn(e,i),0}catch(n){if(n instanceof Ar)return n.status;return 12}}}class Ar extends Error{status;constructor(i){super(`WorkerReplyError: ${G[i]}`);this.status=i;this.name="WorkerReplyError"}}function N0(i){if(!i||typeof i!=="object")return!1;let r=i;return r.msgcheck instanceof Uint8Array&&r.msgcheck.length===32&&typeof r.numBags==="number"&&typeof r.numDupes==="number"}function O0(i){return i}var Xr="[DIPLOMATIC]";async function mn(i){let r=i.clock??new Ii;if(i.worker===!0&&y0(i)!==void 0)throw Error(`${Xr} worker path requires IndexedDB on both sides; do not pass store (got a custom store)`);if(i.worker!==!0){console.info(`${Xr} sync on main thread `+"(no worker — app did not request a worker)");let t=await r$(i.store);return P0(r,i.state,t)}if(typeof Worker>"u")throw Error(`${Xr} worker: true but Worker API is unavailable`);let n=await r$(void 0),e=await Tr.open(i.state,n,{readyTimeoutMs:i.readyTimeoutMs,clock:r,syncDebounceMs:i.syncDebounceMs});return console.info(`${Xr} worker-mode client open (sync Worker starts on setSeed via Enclave)`),{client:e,mode:"worker",dispose:()=>{console.info(`${Xr} terminating sync worker`),e.terminate()}}}function y0(i){if("store"in i)return i.store;return}async function P0(i,r,n){let e=new ji(i,r,n,Er,mi);return{client:e,mode:"main",dispose:()=>{e.disconnect()}}}async function r$(i){if(i!==void 0)return i;if(typeof indexedDB>"u")throw Error(`${Xr} IndexedDB is unavailable; pass store explicitly (e.g. new MemoryStore(crypto))`);return on(mi)}function q0(i){let[r,n]=ye();return an(()=>{async function e(){let $=await i.clientState.get();n($)}let t=i.clientState.listen(e);return e(),()=>{t()}},[i]),r}function C0(i){let[r,n]=ye();return an(()=>{async function e(){let $=await i.xferState.get();n($)}let t=i.xferState.listen(e);return e(),()=>{t()}},[i]),r}function M0(i){an(()=>{async function r(){try{await i.connect(),await i.sync()}catch($){console.error("reconnectAndSync failed",$)}}function n(){r()}function e(){if(typeof document<"u"&&document.visibilityState==="visible")r()}function t(){r()}if(globalThis.addEventListener("online",n),typeof document<"u")document.addEventListener("visibilitychange",e);return globalThis.addEventListener("focus",t),globalThis.addEventListener("pageshow",t),()=>{if(globalThis.removeEventListener("online",n),typeof document<"u")document.removeEventListener("visibilitychange",e);globalThis.removeEventListener("focus",t),globalThis.removeEventListener("pageshow",t)}},[i])}function H0(i={}){let r=i.clock??new Ii,{seed:n,host:e,readyTimeoutMs:t}=i,$=i.worker===!0,f="store"in i?i.store:void 0,[Z,J]=ye({stateMgr:Bn});return an(()=>{let h=!1,Q;return(async()=>{let w=await ie();if(h)return;let V=en(w),Y=$?await mn({state:V,clock:r,worker:!0,readyTimeoutMs:t}):await mn({state:V,clock:r,store:f,readyTimeoutMs:t});if(h){Y.dispose();return}Q=Y.dispose;let{client:X,mode:c}=Y;if(n)await X.setSeed(n);if(e)await X.link(e);if(h){Q();return}J({client:X,entDB:w,stateMgr:V,mode:c,error:void 0})})().catch((w)=>{let V=w instanceof Error?w:Error(String(w));if(console.error("[DIPLOMATIC] useClient init failed",V),!h)J((Y)=>({...Y,client:void 0,error:V}))}),()=>{h=!0,Q?.()}},[r,n,e,$,f,t]),Z}import{use as A0,useEffect as n$,useRef as T0,useState as D0}from"react";function e$(i,r,n){let[e,t]=D0();return n$(()=>{async function $(){let f=await n();t(f)}return $(),i.on(r,$),()=>{i.off(r,$)}},[i,r,n]),e}function p0(i,r,n){let e=T0(n());return n$(()=>{async function t(){e.current=n()}return i.on(r,t),()=>{i.off(r,t)}},[i,r,n]),A0(e.current)}function t$(i,r){return`${i}:${r}`}class Pe{queue=new Map;async enq(i){for(let r of i){let n=t$(r.host,r.seq);this.queue.set(n,r)}}async deq(i,r){for(let n of r){let e=t$(i,n);this.queue.delete(e)}}async list(){let i=[];for(let r of this.queue.values())i.push(r);return i}async count(){return this.queue.size}async wipe(){this.queue.clear()}}function x0(i,r){if(r.setLastSeq!==void 0)i.lastSeq=r.setLastSeq;else if(r.lastSeq!==void 0&&r.lastSeq>i.lastSeq)i.lastSeq=r.lastSeq}class qe{hosts=new Map;async add(i){let r={...i,lastSeq:0};this.hosts.set(i.label,r)}async touch(i,r){await this.recordStats(i,{lastSeq:r})}async recordStats(i,r){let n=this.hosts.get(i);if(!n)return;x0(n,r),this.hosts.set(i,{...n})}async get(i){return this.hosts.get(i)}async set(i,r){let n=this.hosts.get(i);if(!n)return 13;return this.hosts.set(i,{...n,...r}),0}async del(i){this.hosts.delete(i)}async list(){return this.hosts.values()}async wipe(){this.hosts.clear()}}class Ce{crypto;messages=new Map;constructor(i){this.crypto=i}async add(i){let r=[];for(let{key:n,data:e}of i)this.messages.set(d(n),e),r.push(0);return r}async del(i){for(let r of i)this.messages.delete(d(r))}async get(i){let r=this.messages.get(d(i));if(r)return await Pi(i,r,this.crypto);return}async has(i){return this.messages.has(d(i))}async list(i){let r=i?.apld,n=i?.body!==!1,e=[];for(let[t,$]of this.messages){if(r!==void 0&&Jr($.apld)!==r)continue;let f=v(t);e.push(await Pi(f,$,this.crypto,{body:n}))}return e}async count(i){if(i===void 0)return this.messages.size;let r=0;for(let n of this.messages.values())if(Jr(n.apld)===i)r++;return r}async listKeys(){let i=[];for(let r of this.messages.keys())i.push(v(r));return i}async last(i){let r;for(let[n,e]of this.messages){if(b(i,e.eid)===!1)continue;let t=v(n);if(r===void 0)r={hash:t,data:e};else if((e.ctr??0)>(r.data.ctr??0)||(e.ctr??0)===(r.data.ctr??0)&&(e.off??0)>(r.data.off??0))r={hash:t,data:e}}if(r)return await Pi(r.hash,r.data,this.crypto);return}async markApplied(i){for(let r of i){let n=this.messages.get(d(r));if(!n)continue;xi(n,yi)}}async markFailed(i){for(let{key:r,err:n}of i){let e=this.messages.get(d(r));if(!e)continue;xi(e,Yi,n)}}async wipe(){this.messages.clear()}}class Me{enclave;async save(i,r){return this.enclave=i,this.enclave}async load(){return this.enclave}async wipe(){this.enclave=void 0}}class He{queue=new Map;async enq(i,r){let n=this.queue.get(i)||new Set;this.queue.set(i,n);for(let e of r)n.add(fi(e))}async deq(i,r){let n=this.queue.get(i);if(n)for(let e of r)n.delete(fi(e))}async list(i){let r=this.queue.get(i);if(!r)return[];let n=[];for(let e of r)n.push(Oi(e));return n}async count(){let i=0;for(let r of this.queue.values())i+=r.size;return i}async wipe(){this.queue.clear()}}class $${seed=new Me;hosts=new qe;uploads=new He;downloads=new Pe;messages;constructor(i){this.messages=new Ce(i)}async wipe(){await this.hosts.wipe(),await this.uploads.wipe(),await this.downloads.wipe(),await this.messages.wipe()}}class f${singletonType;latest;latestOff=-1;emitter=new di;constructor(i){this.singletonType=i}async apply(i){for(let r of i){let n=new N(r.eid),[e,t]=n.readStruct(_);if(t!==0)continue;let $=new O;$.writeVarString(this.singletonType);let f=$.result();if(e.id.length===f.length&&e.id.every((Z,J)=>Z===f[J])){if(this.latest===void 0||r.off>this.latestOff)this.latestOff=r.off,this.latest=r.bod,this.emitter.emit(this.singletonType,null)}}return i.map(()=>0)}clear=async()=>{return this.latest=void 0,this.latestOff=-1,this.emitter.emit(this.singletonType,null),0};notify=(i)=>{for(let r of i)if(r===this.singletonType)this.emitter.emit(this.singletonType,null)};refresh=async(i)=>{this.notify([this.singletonType])};on=(i,r)=>{this.emitter.addEventListener(i,r)};off=(i,r)=>{this.emitter.removeEventListener(i,r)}}var Z$={capable(){return kt()},async createCred(i){return Wn(i)},async write(i,r,n){return Cr(i,r,n)},async read(i,r){let[n,e]=await In(i,r);if(e!==0||n===void 0)return l(e);return u(n.blob)}};class l${#n;#i;#r;#e;#t;constructor(i){if(this.#n=i.crypto,this.#e=i.rpId,this.#t=i.rpName,i.credId!==void 0)this.#r=i.credId.slice()}get credId(){if(this.#r===void 0)return;return this.#r.slice()}setCredId(i){this.#r=i===void 0?void 0:i.slice()}async save(i,r){if(r?.persist!==!0)return this.#i=i,this.#i;let[n,e]=await i.persistToLargeBlob([],{rpId:this.#e,rpName:this.#t,credId:this.#r});if(e!==0||n===void 0)return Promise.reject(Error(`persistToLargeBlob status ${e}`));return this.#r=n,this.#i=i,this.#i}async load(){return this.#i}async unlock(){let i=this.#r;if(i===void 0)return l(22);let[r,n]=await s.fromLargeBlob(this.#n,{rpId:this.#e,rpName:this.#t,credId:i});if(n!==0||r===void 0)return l(n);return this.#i=r.enclave,u(r.enclave)}async wipe(){let i=this.#r;if(i!==void 0){let r=await s.clearLargeBlob(i,{rpId:this.#e});if(r!==0)return Promise.reject(Error(`clearLargeBlob status ${r}`))}this.#i=void 0,this.#r=void 0}}var cr=1,Dr={encode(i,r){let n=i.writeVarInt(r.v);if(n!==0)return n;let e=i.writeVarBytes(r.salt);if(e!==0)return e;let t=i.writeVarBytes(r.credId);if(t!==0)return t;return i.writeVarBytes(r.body)},decode(i){let[r,n]=i.readVarInt();if(n!==0)return l(n);if(r===void 0)return l(14);let[e,t]=i.readVarBytes();if(t!==0)return l(t);if(e===void 0)return l(14);let[$,f]=i.readVarBytes();if(f!==0)return l(f);if($===void 0)return l(14);let[Z,J]=i.readVarBytes();if(J!==0)return l(J);if(Z===void 0)return l(14);return u({v:r,salt:e,credId:$,body:Z})}};var dn={PREFIX:"dip1:",VERSION:cr,async seal(i,r,n,e){let[t,$]=await r.sealPairPackageBody(n,e);if($!==0)return l($);if(t===void 0)return l(12);let f=new O,Z=f.writeStruct(Dr,{v:cr,salt:t.salt,credId:t.credId,body:t.body});if(Z!==0)return l(Z);return u(dn.PREFIX+qn(f.result()))},async open(i,r,n){let e=r.trim();if(!e.startsWith(dn.PREFIX))return l(10);let t;try{t=Cn(e.slice(dn.PREFIX.length))}catch{return l(10)}let $=new N(t),[f,Z]=$.readStruct(Dr);if(Z!==0)return l(Z);if(f===void 0)return l(14);if(f.v!==cr)return l(14);let[J,h]=await s.openPairPackageBody(i,f.body,{...n,salt:f.salt,credId:f.credId.byteLength>0?f.credId:void 0});if(h!==0)return l(h);if(J===void 0)return l(12);return u({enclave:J.enclave,hosts:J.hosts,salt:f.salt.slice(),credId:J.credId,sealedMaster:J.sealedMaster})}};async function cX(i,r){let n=await on(mi),e=new ji(new Ii,i,n,Er,mi);return{client:e,setSeed:async($)=>{let[f,Z]=s.fromBytes(mi,Oi($));if(Z!==0||f===void 0)throw Error(`invalid seed (${Z})`);await n.seed.save(f),await n.hosts.add({handle:r,label:"host",idx:0}),await e.connect()}}}export{M0 as useSyncOnResume,p0 as useStateWatcherSuspense,e$ as useStateWatcher,C0 as useClientXferState,q0 as useClientState,H0 as useClient,fn as shouldEmitItemProgress,xi as setApld,Hr as sealKeyFromPrf,re as revFromHead,or as revFromEntity,U0 as prfCapable,yr as pairPackagePlainCodec,Dr as pairPackageEnvelopeCodec,on as openIDBStore,ie as openEntDB,mn as openDiplomaticClient,Bn as nullStateManager,v$ as nullEntDB,ut as normalizeTags,E$ as isTombstone,ee as isTerminalApplyFailure,r0 as isPendingApply,T as isLiveEnt,i0 as isApldState,pi as idleProgress,Xn as identityBundleCodec,Oi as htob,Er as hostHTTPTransport,cX as genWebClient,q$ as genSingletonEID,Vr as evalPrf,en as entStateManager,lt as encodeEntRev,_ as eidCodec,cn as defaultWebAuthnRpId,lr as defaultPeekProgressEvery,mi as crypto,Fe as createPrfCred,ae as createIdentityBundle,Zt as cmpBytes,nr as checksumSet,Kr as checksumEntRevs,qi as bundleHostCodec,fi as btoh,qn as btob64url,d as btob64,Cn as b64urltob,v as b64tob,gi as asSealedMasterKey,ii as asMasterSeed,Jr as apldFromStored,Tr as WorkerClient,di as TypedEventEmitter,ji as SyncClient,G as Status,Gr as StateManager,f$ as SingletonStateManager,kn as SEALED_MASTER_KEY_LEN,Un as PrfSeedStore,l$ as PasskeySeedStore,dn as PairPackage,cr as PAIR_PACKAGE_VERSION,$$ as MemoryStore,ui as MASTER_SEED_LEN,Z$ as LargeBlob,Or as IDENTITY_BUNDLE_VERSION,Oe as IDBStore,Gn as IDBSeedStore,xn as HTTPTransport,bn as EntIDB,nn as EntDBMemory,O as Encoder,s as Enclave,N as Decoder,Mr as DEFAULT_PRF_SALT,Ii as Clock,mr as CachedEntDB,zi as APLD_PENDING,Yi as APLD_ERROR,yi as APLD_APPLIED};
|