import{ci as t,cj as e,ck as i,cl as r,cm as n,cn as s,co as o,cp as a}from"./main-AsE4IKjj.js";var h=Array.isArray;function u(){for(var r,n=[],s=0;s0&&!e.includes(t.length))throw new Error("Uint8Array expected of length "+e+", got length="+t.length)}function c(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function d(...t){for(let e=0;e>>e}function p(t){return"string"==typeof t&&(t=function(t){if("string"!=typeof t)throw new Error("string expected");return new Uint8Array((new TextEncoder).encode(t))}(t)),l(t),t}class m{}function w(t){const e=e=>t().update(p(e)).digest(),i=t();return e.outputLen=i.outputLen,e.blockLen=i.blockLen,e.create=()=>t(),e}function b(t,e,i){return t&e^~t&i}function y(t,e,i){return t&e^t&i^e&i}class E extends m{constructor(t,e,i,r){super(),this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.blockLen=t,this.outputLen=e,this.padOffset=i,this.isLE=r,this.buffer=new Uint8Array(t),this.view=f(this.buffer)}update(t){c(this),l(t=p(t));const{view:e,buffer:i,blockLen:r}=this,n=t.length;for(let s=0;sr-s&&(this.process(i,0),s=0);for(let l=s;l>n&s),a=Number(i&s),h=r?4:0,u=r?0:4;t.setUint32(e+h,o,r),t.setUint32(e+u,a,r)}(i,r-8,BigInt(8*this.length),n),this.process(i,0);const o=f(t),a=this.outputLen;if(a%4)throw new Error("_sha2: outputLen should be aligned to 32bit");const h=a/4,u=this.get();if(h>u.length)throw new Error("_sha2: outputLen bigger than state");for(let l=0;l>>3,r=g(e,17)^g(e,19)^e>>>10;A[l]=r+A[l-7]+i+A[l-16]|0}let{A:i,B:r,C:n,D:s,E:o,F:a,G:h,H:u}=this;for(let l=0;l<64;l++){const t=u+(g(o,6)^g(o,11)^g(o,25))+b(o,a,h)+x[l]+A[l]|0,e=(g(i,2)^g(i,13)^g(i,22))+y(i,r,n)|0;u=h,h=a,a=o,o=s+t|0,s=n,n=r,r=i,i=t+e|0}i=i+this.A|0,r=r+this.B|0,n=n+this.C|0,s=s+this.D|0,o=o+this.E|0,a=a+this.F|0,h=h+this.G|0,u=u+this.H|0,this.set(i,r,n,s,o,a,h,u)}roundClean(){d(A)}destroy(){this.set(0,0,0,0,0,0,0,0),d(this.buffer)}}const U=w(()=>new L),I=32;class B{_raw;length;constructor(t){this._raw=new Uint8Array(t||512),this.length=t?t.length:0}unwrap(){return this._raw.subarray(0,this.length)}get capacity(){return this._raw.byteLength}extend(t){if(t instanceof B&&(t=t.unwrap()),"number"!=typeof t.length)throw Error("bad length");const e=t.length+this.length;if(this.capacity>>=7;e.reverse();for(let i=0;iU.create().update(t).digest()}setToZero(){this.buf=new Uint8Array(I)}add(t){let e=0,i=0,r=new DataView(this.buf.buffer),n=new DataView(t.buffer);for(let s=0;s<8;s++){let t=4*s,o=r.getUint32(t,!0);o+=e,o+=n.getUint32(t,!0),o>4294967295&&(i=1),r.setUint32(t,4294967295&o,!0),e=i,i=0}}negate(){let t=new DataView(this.buf.buffer);for(let i=0;i<8;i++){let e=4*i;t.setUint32(e,~t.getUint32(e,!0))}let e=new Uint8Array(I);e[0]=1,this.add(e)}async getFingerprint(t){let e=new B;return e.extend(this.buf),e.extend(T(t)),(await this.sha256(e.unwrap())).subarray(0,16)}}class k{items;sealed;constructor(){this.items=[],this.sealed=!1}insert(t,e){if(this.sealed)throw Error("already sealed");if((e=M(e)).byteLength!==I)throw Error("bad id size for added item");this.items.push({timestamp:t,id:e})}seal(){if(this.sealed)throw Error("already sealed");this.sealed=!0,this.items.sort(G);for(let t=1;t=this.items.length)throw Error("out of range");return this.items[t]}iterate(t,e,i){this._checkSealed(),this._checkBounds(t,e);for(let r=t;rG(t,i)<0)}async fingerprint(t,e){let i=new S;return i.setToZero(),this.iterate(t,e,t=>(i.add(t.id),!0)),await i.getFingerprint(e-t)}_checkSealed(){if(!this.sealed)throw Error("not sealed")}_checkBounds(t,e){if(t>e||e>this.items.length)throw Error("bad range")}_binarySearch(t,e,i,r){let n=i-e;for(;n>0;){let i=e,s=Math.floor(n/2);i+=s,r(t[i])?(e=++i,n-=s+1):n=s}return e}}class v{storage;frameSizeLimit;lastTimestampIn;lastTimestampOut;isInitiator;wantUint8ArrayOutput;constructor(t,e=0){if(0!==e&&e<4096)throw Error("frameSizeLimit too small");this.storage=t,this.frameSizeLimit=e,this.lastTimestampIn=0,this.lastTimestampOut=0}_bound(t,e){return{timestamp:t,id:e||new Uint8Array(0)}}async initiate(){if(this.isInitiator)throw Error("already initiated");this.isInitiator=!0;let t=new B;return t.extend([97]),await this.splitRange(0,this.storage.size(),this._bound(Number.MAX_VALUE),t),this._renderOutput(t)}setInitiator(){this.isInitiator=!0}async reconcile(t){let e=[],i=[],r=new B(M(t));this.lastTimestampIn=this.lastTimestampOut=0;let n=new B;n.extend([97]);let s=N(r,1)[0];if(s<96||s>111)throw Error("invalid negentropy protocol version byte");if(97!==s){if(this.isInitiator)throw Error("unsupported negentropy protocol version requested: "+(s-96));return[this._renderOutput(n),e,i]}let o=this.storage.size(),a=this._bound(0),h=0,u=!1;for(;0!==r.length;){let t=new B,s=()=>{u&&(u=!1,t.extend(this.encodeBound(a)),t.extend(T(0)))},l=this.decodeBound(r),c=O(r),d=h,f=this.storage.findLowerBound(h,o,l);if(0===c)u=!0;else if(1===c)0!==F(N(r,16),await this.storage.fingerprint(d,f))?(s(),await this.splitRange(d,f,l,t)):u=!0;else{if(2!==c)throw Error("unexpected mode");{let o=O(r),a={};for(let t=0;t{let i=t.id;return a[i]?delete a[i]:this.isInitiator&&e.push(this.wantUint8ArrayOutput?i:z(i)),!0});for(let t of Object.values(a))i.push(this.wantUint8ArrayOutput?t:z(t))}else{s();let e=new B,i=0,r=l;this.storage.iterate(d,f,(t,s)=>this.exceededFrameSizeLimit(n.length+e.length)?(r=t,f=s,!1):(e.extend(t.id),i++,!0)),t.extend(this.encodeBound(r)),t.extend(T(2)),t.extend(T(i)),t.extend(e),n.extend(t),t=new B}}}if(this.exceededFrameSizeLimit(n.length+t.length)){let t=await this.storage.fingerprint(f,o);n.extend(this.encodeBound(this._bound(Number.MAX_VALUE))),n.extend(T(1)),n.extend(t);break}n.extend(t),h=f,a=l}return[1===n.length&&this.isInitiator?null:this._renderOutput(n),e,i]}async splitRange(t,e,i,r){let n=e-t;if(n<32)r.extend(this.encodeBound(i)),r.extend(T(2)),r.extend(T(n)),this.storage.iterate(t,e,t=>(r.extend(t.id),!0));else{let s=Math.floor(n/16),o=n%16,a=t;for(let t=0;t<16;t++){let n,h=s+(t(r===a-1?t=i:e=i,!0)),n=this.getMinimalBound(t,e)}r.extend(this.encodeBound(n)),r.extend(T(1)),r.extend(u)}}}_renderOutput(t){let e=t.unwrap();return this.wantUint8ArrayOutput?e:z(e)}exceededFrameSizeLimit(t){return this.frameSizeLimit&&t>this.frameSizeLimit-200}decodeTimestampIn(t){let e=O(t);return e=0===e?Number.MAX_VALUE:e-1,this.lastTimestampIn===Number.MAX_VALUE||e===Number.MAX_VALUE?(this.lastTimestampIn=Number.MAX_VALUE,Number.MAX_VALUE):(e+=this.lastTimestampIn,this.lastTimestampIn=e,e)}decodeBound(t){let e=this.decodeTimestampIn(t),i=O(t);if(i>I)throw Error("bound key too long");return{timestamp:e,id:N(t,i)}}encodeTimestampOut(t){if(t===Number.MAX_VALUE)return this.lastTimestampOut=Number.MAX_VALUE,T(0);let e=t;return t-=this.lastTimestampOut,this.lastTimestampOut=e,T(t+1)}encodeBound(t){let e=new B;return e.extend(this.encodeTimestampOut(t.timestamp)),e.extend(T(t.id.length)),e.extend(t.id),e}getMinimalBound(t,e){if(e.timestamp!==t.timestamp)return this._bound(e.timestamp);{let i=0,r=e.id,n=t.id;for(let t=0;t>>4&15]+t[15&e]}function z(t){let e="";for(let i=0,r=t.length;ie[i])return 1}return t.byteLength>e.byteLength?1:t.byteLength(C("Sending initial message",c,n,f),["NEG-OPEN",c,n,f]),()=>(C("Closing sync",c),["NEG-CLOSE",c]),t=>("NEG-MSG"===t[0]||"NEG-ERR"===t[0])&&t[1]===c).pipe(s(t=>{if("NEG-ERR"===t[0])throw new Error(t[2]);return t[2]}),o());if(l?.signal?.aborted)return!1;const m=new e(t=>{if(l?.signal?.aborted)return t.next("abort"),void t.complete();const e=()=>{t.next("abort"),t.complete()};return l?.signal?.addEventListener("abort",e),()=>l?.signal?.removeEventListener("abort",e)}),w=p.subscribe({next:t=>C(t),error:()=>{}});try{for(;g&&!0!==l?.signal?.aborted;)try{const t=await a(u(p.pipe(s(t=>({type:"message",data:t}))),m.pipe(s(()=>({type:"abort"})))));if("abort"===t.type||l?.signal?.aborted)return w.unsubscribe(),!1;const[e,i,r]=await d.reconcile(t.data);await h(i,r),g=e}catch(b){if(l?.signal?.aborted)return w.unsubscribe(),!1;throw b}}catch(b){throw w.unsubscribe(),b}finally{w.unsubscribe()}return!0}export{D as buildStorageFromFilter,X as buildStorageVector,H as negentropySync};