@solarpunkltd/swarm-id 0.8.1 → 0.9.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.
@@ -1,2 +1,2 @@
1
- import{o as t,q as e,r as n,E as r,t as i,x as s,y as a,z as o,B as c,F as d,G as u,H as l,J as h,K as p,L as f,O as y,Q as w,U as g,R as m,V as b,W as v,X as S,Y as k,a as x,c as I,Z as A,_ as C,$ as U,a0 as P,a1 as E,a2 as $,a3 as D,a4 as B,a5 as T,a6 as O,a7 as M,a8 as R,a9 as F,aa as q,ab as L,ac as K,ad as N,ae as H,af as j,ag as W,M as z,ah as G,N as V,ai as J,aj as Z,ak as Y,al as _,am as Q,an as X,ao as tt,ap as et,aq as nt,ar as rt,as as it,at as st,au as at,av as ot,aw as dt,ax as ut,ay as lt,T as ht,az as pt,aA as ft,aB as yt,aC as wt,aD as gt,aE as mt,aF as bt,aG as vt,aH as St,aI as kt,aJ as xt,aK as It,aL as At,aM as Ct,aN as Ut,aO as Pt,aP as Et,aQ as $t,aR as Dt,aS as Bt,aT as Tt,aU as Ot,aV as Mt,aW as Rt,aX as Ft,aY as qt,aZ as Lt,a_ as Kt,a$ as Nt,b0 as Ht,b1 as jt,b2 as Wt,b3 as zt,b4 as Gt,b5 as Vt,b6 as Jt,b7 as Zt,b8 as Yt,b9 as _t,ba as Qt,bb as Xt,bc as te,bd as ee,be as ne,bf as re,bg as ie,bh as se,bi as ae,bj as oe,bk as ce,bl as de,bm as ue,bn as le,bo as he,bp as pe,bq as fe,u as ye,h as we,S as ge,br as me,bs as be,bt as ve,bu as Se,bv as ke,bw as xe,bx as Ie,by as Ae,bz as Ce,bA as Ue,bB as Pe,bC as Ee,bD as $e,bE as De,bF as Be,bG as Te,bH as Oe,bI as Me,bJ as Re,bK as Fe,bL as qe,bM as Le,bN as Ke,bO as Ne,bP as He,bQ as je,bR as We,bS as ze,bT as Ge,bU as Ve,w as Je,bV as Ze,d as Ye,bW as _e,bX as Qe,bY as Xe,bZ as tn,b_ as en,b$ as nn,k as rn,c0 as sn,c1 as an,c2 as on,c3 as cn,D as dn,c4 as un,c5 as ln,l as hn,c6 as pn,c7 as fn,c8 as yn,c9 as wn,ca as gn,cb as mn,cc as bn,cd as vn,P as Sn,ce as kn,cf as xn,g as In,b as An,cg as Cn,ch as Un,ci as Pn,cj as En,ck as $n,cl as Dn,cm as Bn,cn as Tn,n as On,co as Mn,j as Rn}from"./chunks/chat-binding-DO5aGhPl.js";export{cp as BatchIdSchema,cq as PrivateKeySchema,cr as SyncedAccountSchemaV1,cx as calculateStampAmountForDays,cu as createChatBinding,cs as deriveAccountDerivationKey,ct as derivePostageSignerKey,cv as hexAddress,cy as isHttpUrl,cw as withIdleTimeout}from"./chunks/chat-binding-DO5aGhPl.js";class Fn{constructor(t){if(this.bytes=Math.ceil(t),t<0)throw Error("Size must be at least 0")}static fromBytes(t){return new Fn(t)}static fromKilobytes(t){return new Fn(1e3*t)}static fromMegabytes(t){return new Fn(1e3*t*1e3)}static fromGigabytes(t){return new Fn(1e3*t*1e3*1e3)}static parseFromString(t){return Fn.fromBytes(s.Numbers.makeStorage(t,1e3))}toBytes(){return this.bytes}toGigabytes(){return this.bytes/1e3/1e3/1e3}toFormattedString(){return s.Numbers.convertBytes(this.bytes,1e3)}represent(){return this.toFormattedString()}}function qn(t,e){return d.fromPLUR(2n**BigInt(t)*BigInt(e))}function Ln(t,e,n){return BigInt(t.toSeconds())/BigInt(n)*BigInt(e)+1n}function Kn(t,e,n){return c(t.toBytes(),e,n)}function Nn(t,e,n){const r=u(t.batchTTL),i=o.fromSeconds(r),s=l(t.depth,e,n),c=t.utilizationRatio??h(t.utilization,t.depth,t.bucketDepth);return{batchID:new p(t.batchID),utilization:t.utilization,usable:t.usable,label:t.label,depth:t.depth,amount:a(t.amount),bucketDepth:t.bucketDepth,blockNumber:t.blockNumber,immutableFlag:t.immutableFlag,usage:c,usageText:`${Math.round(100*c)}%`,size:Fn.fromBytes(s),remainingSize:Fn.fromBytes(Math.ceil(s*(1-c))),theoreticalSize:Fn.fromBytes(f(t.depth)),duration:i,calculateSize(e,n){const r=l(t.depth,e,n);return Fn.fromBytes(r)},calculateRemainingSize(e,n){const r=l(t.depth,e,n);return Fn.fromBytes(Math.ceil(r*(1-this.usage)))}}}function Hn(t){return{name:function(t){if(!t)throw new v("missing content-disposition header");const e=t.match(/filename\*?=['"]?(?:UTF-\d['"]*)?([^;\r\n"']*)['"]?;?/i);if(e&&e.length>0)return e[1];throw new v("invalid content-disposition header")}(t["content-disposition"]),tagUid:function(t){if(!t)return;return parseInt(t,10)}(t["swarm-tag-uid"]),contentType:t["content-type"]||void 0}}function jn(t,e){const n={};var r;if(!function(t){if(!b({}).safeParse(t).success)return!1;const e=t;return void 0!==e.issuer&&void 0!==e.index&&void 0!==e.signature&&void 0!==e.timestamp&&void 0!==e.batchId}(t)?t&&(t=new p(t),n["swarm-postage-batch-id"]=t.toHex()):n["swarm-postage-stamp"]=(r=t,y(r)).toHex(),!e)return n;const i=e;i.size&&(n["content-length"]=String(i.size)),i.contentType&&(n["content-type"]=String(i.contentType)),i.redundancyLevel&&(n["swarm-redundancy-level"]=String(i.redundancyLevel));const s=w().safeParse(i.act);s.success&&(n["swarm-act"]=String(s.data));const a=w().safeParse(i.pin);a.success&&(n["swarm-pin"]=String(a.data));const o=w().safeParse(i.encrypt);o.success&&(n["swarm-encrypt"]=String(o.data)),i.tag&&(n["swarm-tag"]=String(i.tag));const c=w().safeParse(i.deferred);c.success&&(n["swarm-deferred-upload"]=String(c.data)),i.redundancyStrategy&&(n["swarm-redundancy-strategy"]=String(i.redundancyStrategy));const d=w().safeParse(i.fallback);return d.success&&(n["swarm-redundancy-fallback-mode"]=String(d.data)),i.timeoutMs&&(n["swarm-chunk-retrieval-timeout"]=String(i.timeoutMs)),i.indexDocument&&(n["swarm-index-document"]=String(i.indexDocument)),i.errorDocument&&(n["swarm-error-document"]=String(i.errorDocument)),i.actPublisher&&(n["swarm-act-publisher"]=new g(i.actPublisher).toCompressedHex()),i.actHistoryAddress&&(n["swarm-act-history-address"]=new m(i.actHistoryAddress).toHex()),i.actTimestamp&&(n["swarm-act-timestamp"]=String(i.actTimestamp)),(i.actPublisher||i.actHistoryAddress||i.actTimestamp)&&(n["swarm-act"]="true"),i.gasPrice&&(n["gas-price"]=String(i.gasPrice)),i.gasLimit&&(n["gas-limit"]=String(i.gasLimit)),n}const Wn="chunks";async function zn(e,n,r){n=new m(n);const i=await t(e,{responseType:"arraybuffer",url:`${Wn}/${n}`,headers:jn(null,r)});return new Uint8Array(i.data)}function Gn(t,e){try{return U(t,e)}catch(t){throw new v(t.message)}}async function Vn(e,n,r,i){const a=A.concat(n.span.toUint8Array(),n.payload.toUint8Array());return async function(e,n,r,i,a,o,c){const d=await t(e,{method:"post",url:`soc/${n}/${r}`,data:a,headers:{"content-type":"application/octet-stream",...jn(o,c)},responseType:"json",params:{sig:i.toHex()}});return{reference:S.parse(d.data).reference,tagUid:d.headers["swarm-tag"]?k(d.headers["swarm-tag"]):void 0,historyAddress:d.headers["swarm-act-history-address"]?s.Optional.of(new m(d.headers["swarm-act-history-address"])):s.Optional.empty()}}(e,n.owner,n.identifier,n.signature,a,r,i)}async function Jn(t,e,n,r,i,s){e=new I(e),r=new x(r);return Vn(t,E(i).toSingleOwnerChunk(r,e),n,s)}async function Zn(t,e,n){n=new x(n),e=new r(e);const i=P(n,e);return Gn(await zn(t,i.toHex()),i)}const Yn="balances";const _n="consumed";class Qn{constructor(t){this.context=t}async getAll(e){return async function(e){const n=await t(e,{url:Yn,responseType:"json"});return $.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getPeer(e,n){const r=new B(e);return async function(e,n){const r=await t(e,{url:`${Yn}/${n}`,responseType:"json"});return D.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getAllPastDueConsumption(e){return async function(e){const n=await t(e,{url:_n,responseType:"json"});return $.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getAllPastDueConsumptionForPeer(e,n){const r=new B(e);return async function(e,n){const r=await t(e,{url:`${_n}/${n}`,responseType:"json"});return D.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}}const Xn="chequebook";class tr{constructor(t){this.context=t}async getAllLatest(e){return async function(e){const n=await t(e,{url:`${Xn}/cheque`,responseType:"json"});return R.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getAllLatestForPeer(e,n){const r=new B(e);return async function(e,n){const r=await t(e,{url:`${Xn}/cheque/${n}`,responseType:"json"});return F.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getLastCashoutAction(e,n){const r=new B(e);return async function(e,n){const r=await t(e,{url:`${Xn}/cashout/${n}`,responseType:"json"});return q.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async cashoutLast(e,n,r){const i=new B(e);return n&&(n=L.parse(n)),async function(e,n,r){const i=await t(e,{method:"post",url:`${Xn}/cashout/${n}`,responseType:"json",headers:jn(null,r)});return M.parse(i.data).transactionHash}(this.context.getRequestOptionsForCall(r),i,n)}}class er{constructor(t){this.context=t}async getAddress(e){return async function(e){const n=await t(e,{url:`${Xn}/address`,responseType:"json"});return T.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getBalance(e){return async function(e){const n=await t(e,{url:`${Xn}/balance`,responseType:"json"});return O.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async deposit(e,n,r){const i=e instanceof d?e.toPLURString():a(e,{min:1n,name:"amount"}),s=n?a(e,{min:0n,name:"gasPrice"}):void 0;return async function(e,n,r){const i={};r&&(i["gas-price"]=r);const s=await t(e,{method:"post",url:`${Xn}/deposit`,responseType:"json",params:{amount:n},headers:i});return M.parse(s.data).transactionHash}(this.context.getRequestOptionsForCall(r),i,s)}async withdraw(e,n,r){const i=e instanceof d?e.toPLURString():a(e,{min:1n,name:"amount"}),s=n?a(e,{min:0n,name:"gasPrice"}):void 0;return async function(e,n,r){const i={};r&&(i["gas-price"]=r);const s=await t(e,{method:"post",url:`${Xn}/withdraw`,responseType:"json",params:{amount:n},headers:i});return M.parse(s.data).transactionHash}(this.context.getRequestOptionsForCall(r),i,s)}}class nr{constructor(t){this.context=t}async upload(e,r,i,a){const o="identifier"in r&&"signature"in r&&"owner"in r;if(r=r instanceof Uint8Array?r:r.data,i&&(i=K.parse(i)),r.length<N.LENGTH)throw new H(`Chunk has to have size of at least ${N.LENGTH}.`,r);if(!o&&r.length>j+N.LENGTH)throw new H(`Content Addressed Chunk must not exceed ${j+N.LENGTH} bytes.`,r);if(o&&r.length>j+N.LENGTH+n.LENGTH+x.LENGTH)throw new H(`Single Owner Chunk must not exceed ${j+N.LENGTH+n.LENGTH+x.LENGTH} bytes.`,r);return async function(e,n,r,i){const a=await t(e,{method:"post",url:`${Wn}`,data:n,headers:{"content-type":"application/octet-stream",...jn(r,i)},responseType:"json"});return{reference:S.parse(a.data).reference,tagUid:a.headers["swarm-tag"]?k(a.headers["swarm-tag"]):void 0,historyAddress:a.headers["swarm-act-history-address"]?s.Optional.of(new m(a.headers["swarm-act-history-address"])):s.Optional.empty()}}(this.context.getRequestOptionsForCall(a),r,e,i)}async download(t,e,n){const r=new m(t);return e&&(e=W.parse(e)),zn(this.context.getRequestOptionsForCall(n),r,e)}}async function rr(t,e,n,r,i){for(const s of t.forks.values()){const t=await rr(s.node,e,n,r,i);if(r?.act){let e;t.historyAddress.ifPresent(t=>e=t),e&&(s.node.metadata||(s.node.metadata={}),s.node.metadata["swarm-act-history-address"]=e.toHex())}}const s=await e.data.upload(n,await t.marshal(),r,i);return t.selfAddress=s.reference.toUint8Array(),s}async function ir(t,e,n,r){for(const i of t.forks.values()){if(!i.node.selfAddress)throw Error("MantarayNode#loadRecursively fork.node.selfAddress is not set");let s=n;i.node.metadata&&i.node.metadata["swarm-act-history-address"]&&(s={...n,actHistoryAddress:i.node.metadata["swarm-act-history-address"]});const a=(await e.data.download(i.node.selfAddress,s,r)).toUint8Array(),o=z.unmarshalFromData(a,i.node.selfAddress);i.node.targetAddress=o.targetAddress,i.node.forks=o.forks,i.node.path=i.prefix,i.node.parent=t,await ir(i.node,e,n,r)}}class sr{constructor(t=new z){this.core=t}get obfuscationKey(){return this.core.obfuscationKey}get selfAddress(){return this.core.selfAddress}get targetAddress(){return this.core.targetAddress}get metadata(){return this.core.metadata}get path(){return this.core.path}get forks(){return this.core.forks}get parent(){return this.core.parent}get type(){return this.core.type}get fullPath(){return this.core.fullPath}get fullPathString(){return this.core.fullPathString}getRootMetadata(){const t=this.core.find("/");return t&&t.metadata?s.Optional.of(t.metadata):s.Optional.empty()}getDocsMetadata(){const t=this.core.find("/");return t&&t.metadata?{indexDocument:t.metadata["website-index-document"]??null,errorDocument:t.metadata["website-error-document"]??null}:{indexDocument:null,errorDocument:null}}async resolveFeed(t,e){const n=this.core.find("/");if(!n||!n.metadata)return s.Optional.empty();const r=n.metadata["swarm-feed-owner"],i=n.metadata["swarm-feed-topic"];return r&&i?s.Optional.of(await t.feed.fetchLatestUpdate(i,r,e)):s.Optional.empty()}async marshal(){return this.core.marshal()}static async unmarshal(t,e,n,r){e=new m(e);const i=(await t.data.download(e,n,r)).toUint8Array();return this.unmarshalFromData(i,e.toUint8Array())}static unmarshalFromData(t,e){return new sr(z.unmarshalFromData(t,e))}addFork(t,e,n){this.core.addFork(t,e instanceof A?e.toUint8Array():e,n)}removeFork(t){this.core.removeFork(t)}async calculateSelfAddress(){return this.core.calculateSelfAddress()}async saveRecursively(t,e,n,r){return rr(this.core,t,e,n,r)}async loadRecursively(t,e,n){return ir(this.core,t,e,n)}find(t){return this.core.find(t)}findClosest(t,e){return this.core.findClosest(t,e)}collect(t=[]){return this.core.collect(t)}collectAndMap(){return this.core.collectAndMap()}determineType(){return this.core.determineType()}}function ar(t){return function t(e){return e<=1?e:e+t(Math.ceil(e/128))}(Math.ceil(t/4096))}function or(t){if(!function(t){return!!Array.isArray(t)&&t.every(t=>"object"==typeof t&&t.path&&void 0!==t.size)}(t))throw new H("invalid collection",t)}function dr(t){if(t.webkitRelativePath&&""!==t.webkitRelativePath)return t.webkitRelativePath.replace(/.*?\//i,"");if(t.name)return t.name;throw new TypeError("file is not valid File object")}const ur={aac:"audio/aac",abw:"application/x-abiword",ai:"application/postscript",arc:"application/octet-stream",avi:"video/x-msvideo",azw:"application/vnd.amazon.ebook",bin:"application/octet-stream",bz:"application/x-bzip",bz2:"application/x-bzip2",csh:"application/x-csh",css:"text/css",csv:"text/csv",doc:"application/msword",dll:"application/octet-stream",dmg:"application/x-apple-diskimage",eot:"application/vnd.ms-fontobject",epub:"application/epub+zip",gif:"image/gif",htm:"text/html",html:"text/html",ico:"image/x-icon",ics:"text/calendar",jar:"application/java-archive",jpeg:"image/jpeg",jpg:"image/jpeg",js:"application/javascript",json:"application/json",mid:"audio/midi",midi:"audio/midi",mp2:"audio/mpeg",mp3:"audio/mpeg",mp4:"video/mp4",mpa:"video/mpeg",mpe:"video/mpeg",mpeg:"video/mpeg",mpkg:"application/vnd.apple.installer+xml",odp:"application/vnd.oasis.opendocument.presentation",ods:"application/vnd.oasis.opendocument.spreadsheet",odt:"application/vnd.oasis.opendocument.text",oga:"audio/ogg",ogv:"video/ogg",ogx:"application/ogg",otf:"font/otf",png:"image/png",pdf:"application/pdf",ppt:"application/vnd.ms-powerpoint",rar:"application/x-rar-compressed",rtf:"application/rtf",sh:"application/x-sh",svg:"image/svg+xml",swf:"application/x-shockwave-flash",tar:"application/x-tar",tif:"image/tiff",tiff:"image/tiff",ts:"application/typescript",ttf:"font/ttf",txt:"text/plain",vsd:"application/vnd.visio",wav:"audio/x-wav",weba:"audio/webm",webm:"video/webm",webp:"image/webp",woff:"font/woff",woff2:"font/woff2",xhtml:"application/xhtml+xml",xls:"application/vnd.ms-excel",xlsx:"application/vnd.ms-excel",xml:"application/xml",xul:"application/vnd.mozilla.xul+xml",zip:"application/zip","3gp":"video/3gpp","3gp2":"video/3gpp2","7z":"application/x-7z-compressed"};function lr(t){return["text/html","text/css"].includes(t)?`${t}; charset=utf-8`:t}class hr{constructor(){this.pieces=[],this.currentFileSize=0}get output(){return this.pieces.reduce((t,e)=>{const n=new Uint8Array(t.length+e.length);return n.set(t),n.set(e,t.length),n})}beginFile(t,e){const{name:n,prefix:r,longLink:i}=function(t){if(t.length<=100)return{name:t,prefix:"",longLink:!1};for(let e=t.length-1;e>=0;e--)if("/"===t[e]){const n=t.substring(e+1),r=t.substring(0,e);if(n.length<=100&&r.length<=155)return{name:n,prefix:r,longLink:!1}}const e=t.lastIndexOf("/"),n=(e>=0?t.substring(e+1):t).slice(0,100);return{name:n,prefix:"",longLink:!0}}(t);if(i){const e=(new TextEncoder).encode(t+"\0");this.pieces.push(function(t){const e=new TextEncoder;function n(t,n,i){const s=e.encode(t);r.set(s.slice(0,i),n)}const r=new Uint8Array(512);r.fill(0),n("././@LongLink",0,100),n("0000644\0",100,8),n("0000000\0",108,8),n("0000000\0",116,8),n(t.toString(8).padStart(11,"0")+"\0",124,12),n("00000000000\0",136,12),n(" ",148,8),n("L",156,1),n("ustar\0\0",257,8);let i=0;for(let t=0;t<512;t++)i+=r[t];return n(i.toString(8).padStart(6,"0")+"\0 ",148,8),r}(e.length)),this.pieces.push(e);const n=e.length%512==0?0:512-e.length%512;n>0&&this.pieces.push(new Uint8Array(n))}const s=function(t,e,n){const r=new TextEncoder;function i(t,e,n){const i=r.encode(t);s.set(i.slice(0,n),e)}const s=new Uint8Array(512);s.fill(0,0,512),i(t.slice(0,100).padEnd(100,"\0"),0,100),i("0000777\0",100,8),i("0001750\0",108,8),i("0001750\0",116,8),i(n.toString(8).padStart(11,"0")+"\0",124,12);i(Math.floor((new Date).getTime()/1e3).toString(8).padStart(11,"0")+"\0",136,12),i(" ",148,8),i("0",156,1),i("ustar\0\0",257,8),e&&i(e.slice(0,155).padEnd(155,"\0"),345,155);let a=0;for(let t=0;t<512;t++)a+=s[t];return i(a.toString(8).padStart(6,"0")+"\0 ",148,8),s}(n,r,e);this.pieces.push(s),this.currentFileSize=0}async appendFile(t){this.pieces.push(t),this.currentFileSize+=t.length}async endFile(){const t=this.currentFileSize%512==0?0:512-this.currentFileSize%512;t>0&&this.pieces.push(new Uint8Array(t))}async end(){this.pieces.push(new Uint8Array(1024))}}async function pr(e,n,r,i){const s=new hr;await async function(t,e){for(const n of t){if(!n.file)throw new Error("Invalid collection item");e.beginFile(n.path,n.file.size),await e.appendFile(new Uint8Array(await J(n.file))),await e.endFile()}}(n,s),await s.end();return await t(e,{method:"post",url:"bzz",data:s.output,responseType:"json",headers:{"content-type":"application/x-tar","swarm-collection":"true",...jn(r,i)}})}const fr="bzz";async function yr(e,n,r,i,a){const o=await t(e,{method:"post",url:fr,data:n,headers:jn(r,a),params:{name:i},responseType:"json"});return{reference:S.parse(o.data).reference,tagUid:o.headers["swarm-tag"]?k(o.headers["swarm-tag"]):void 0,historyAddress:o.headers["swarm-act-history-address"]?s.Optional.of(new m(o.headers["swarm-act-history-address"])):s.Optional.empty()}}async function wr(t,e,n,r){or(e);const i=await pr(t,e,n,r);return{reference:S.parse(i.data).reference,tagUid:i.headers["swarm-tag"]?k(i.headers["swarm-tag"]):void 0,historyAddress:i.headers["swarm-act-history-address"]?s.Optional.of(new m(i.headers["swarm-act-history-address"])):s.Optional.empty()}}class gr{constructor(t){this.context=t}async upload(t,e,n,r){const i=new p(t);return or(e),n&&(n=Z.parse(n)),wr(this.context.getRequestOptionsForCall(r),e,i,n)}async uploadFromFileList(t,e,n,r){const i=new p(t);n&&(n=Z.parse(n));const s=function(t){return Array.from(t).map(t=>({path:dr(t),size:t.size,file:t}))}(e);return wr(this.context.getRequestOptionsForCall(r),s,i,n)}async uploadFromDirectory(t,e,n,r){const i=new p(t);n&&(n=Z.parse(n));const s=await async function(){throw new Error("Creating Collection from File System is not supported in browsers!")}();return wr(this.context.getRequestOptionsForCall(r),s,i,n)}async stream(t,e,n,r,i){const a=new p(t);return async function(t,e,n,r,i,a){const o=a?.signal;if(o?.aborted)throw new Error("Request aborted");const c=new s.AsyncQueue(64,64);let d=0,u=0;for(const t of e)d+=ar(t.size);async function l(e){if(!o?.aborted)try{await t.chunk.upload(n,e.build(),i,a),r?.({total:d,processed:++u})}catch(t){if(o?.aborted)return;throw t}}async function h(t){for(const{chunk:e}of t)await c.enqueue(async()=>l(e));return[]}n=new p(n);const f=new sr;for(const t of e){if(o?.aborted)throw new Error("Request aborted");const e=await new Promise((e,n)=>{const r=new G(h);let i=0;const s=new FileReader;s.onerror=()=>{n(s.error)};const a=async()=>{if(o?.aborted)return void n(new Error("Request aborted"));if(i>=t.size){const t=await r.finalize();return await c.enqueue(async()=>l(t)),void e(t)}const a=t.slice(i,i+4096);s.readAsArrayBuffer(a)};s.onload=async t=>{if(!t.target)return void n("No event target");const e=t.target.result;e&&(await r.append(new Uint8Array(e)),i+=4096),a()},a()});await c.drain();const{filename:n,extension:r}=s.Strings.parseFilename(t.name);f.addFork(dr(t),e.hash(),{"Content-Type":lr(ur[r.toLowerCase()]||"application/octet-stream"),Filename:n}),"index.html"===t.name&&f.addFork("/",V,{"website-index-document":"index.html"})}if(o?.aborted)throw new Error("Request aborted");return f.saveRecursively(t,n,i,a)}(this.context.bee,e,a,n,r,this.context.getRequestOptionsForCall(i))}async streamFromDirectory(t,e,n,r,i){new p(t);return async function(){throw new Error("Streaming directories is not supported in browsers!")}(this.context.bee,0,0,0,0,this.context.getRequestOptionsForCall(i))}async hashDirectory(t){return async function(){throw new Error("Hashing directories is not supported in browsers!")}()}}const mr="peers";class br{constructor(t){this.context=t}async checkConnection(e){return async function(e){await t(e,{url:"",responseType:"text"})}(this.context.getRequestOptionsForCall(e))}async isConnected(t){try{await this.checkConnection(t)}catch{return!1}return!0}async isGateway(e){try{return await async function(e){const n=await t(e,{url:"/gateway"});return Y.parse(n.data).gateway}(this.context.getRequestOptionsForCall(e))}catch{return!1}}async getNodeAddresses(e){return async function(e){const n=await t(e,{url:"addresses",responseType:"json"});return _.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getBlocklist(e){return async function(e){const n=await t(e,{url:"blocklist",responseType:"json"});return Q.parse(n.data).peers}(this.context.getRequestOptionsForCall(e))}async getPeers(e){return async function(e){const n=await t(e,{url:mr,responseType:"json"});return X.parse(n.data).peers}(this.context.getRequestOptionsForCall(e))}async removePeer(e,n){const r=new B(e);return async function(e,n){return(await t(e,{url:`${mr}/${n}`,responseType:"json",method:"DELETE"})).data}(this.context.getRequestOptionsForCall(n),r)}async getTopology(e){return async function(e){const n=await t(e,{url:"topology",responseType:"json"});return tt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async ping(e,n){const r=new B(e);return async function(e,n){return(await t(e,{url:`pingpong/${n}`,responseType:"json",method:"POST"})).data}(this.context.getRequestOptionsForCall(n),r)}}const vr="bytes";async function Sr(e,n,r,i){const a=await t(e,{url:vr,method:"post",responseType:"json",data:n,headers:{"content-type":"application/octet-stream",...jn(r,i)}});return{reference:S.parse(a.data).reference,tagUid:a.headers["swarm-tag"]?k(a.headers["swarm-tag"]):void 0,historyAddress:a.headers["swarm-act-history-address"]?s.Optional.of(new m(a.headers["swarm-act-history-address"])):s.Optional.empty()}}async function kr(e,n,r){r&&(r=W.parse(r));const i=await t(e,{responseType:"arraybuffer",url:`${vr}/${n}`,headers:jn(null,r)});return new A(i.data)}const xr="stewardship";class Ir{constructor(t){this.raw=t}toString(){const t=nt().safeParse(this.raw);return t.success&&t.data.includes(".eth")?t.data:new m(this.raw).toHex()}}class Ar{constructor(t){this.context=t}async upload(t,e,n,r){const i=new p(t);return rt(e),n&&(n=it.parse(n)),Sr(this.context.getRequestOptionsForCall(r),e,i,n)}async download(t,e,n){return e&&(e=W.parse(e)),kr(this.context.getRequestOptionsForCall(n),new Ir(t),e)}async downloadReadable(e,n,r){return n&&(n=W.parse(n)),async function(e,n,r){return r&&(r=W.parse(r)),(await t(e,{responseType:"stream",url:`${vr}/${n}`,headers:jn(null,r)})).data}(this.context.getRequestOptionsForCall(r),new Ir(e),n)}async probe(e,n){const r=new m(e);return async function(e,n){const r=await t(e,{url:`${vr}/${n}`,method:"head",responseType:"json"});return{contentLength:parseInt(r.headers["content-length"])}}(this.context.getRequestOptionsForCall(n),r)}async isRetrievable(e,n){const r=new m(e);return async function(e,n){const r=await t(e,{method:"get",responseType:"json",url:`${xr}/${n}`});return et.parse(r.data).isRetrievable}(this.context.getRequestOptionsForCall(n),r)}}const Cr="feeds";function Ur(t){const e=t["swarm-feed-index"],n=t["swarm-feed-index-next"];if(!e)throw new v("Response did not contain expected swarm-feed-index!");if(!n)throw new v("Response did not contain expected swarm-feed-index-next!");return{feedIndex:new st(e),feedIndexNext:new st(n)}}async function Pr(e,n,r,i){const s=await t(e,{responseType:"arraybuffer",url:`${Cr}/${n}/${r}`,params:{...i}});return{payload:new A(s.data),...Ur(s.headers)}}function Er(t,e){return e="number"==typeof e?st.fromBigInt(BigInt(e)):e,new x(at(A.concat(t.toUint8Array(),e.toUint8Array())))}async function $r(t,e,n){try{const r=await Pr(t,e,n);if(!r.feedIndexNext)throw Error("Feed index next is not defined. This should happen when fetching an exact index.");return r.feedIndexNext}catch(t){if(t instanceof lt)return st.fromBigInt(0n);throw t}}async function Dr(t,e,n,r,i,s){const a=Er(n,s?.index??await $r(t,e.publicKey().address(),n));if(r.length>4096){const n=await Sr(t,r,i,s);return async function(t,e,n,r,i,s){return e=new I(e),r=new x(r),Vn(t,i.toSingleOwnerChunk(r,e),n,s)}(t,e,i,a,dt(await zn(t,n.reference)),s)}const o=nt().safeParse(r);return Jn(t,e,i,a,o.success?A.fromUtf8(o.data).toUint8Array():r,s)}function Br(t,e,n){const r=Er(e,n);return new m(at(A.concat(r.toUint8Array(),t.toUint8Array())))}async function Tr(t,e,n,r,i=!1){const a=Br(e,n,r="number"==typeof r?st.fromBigInt(BigInt(r)):r),o=Gn(await zn(t,a.toHex()),a);let c=s.Optional.empty();if(i){const t=A.fromSlice(o.payload.toUint8Array(),0,8);c=s.Optional.of(Number(ot(t.toUint8Array(),"BE")))}return{timestamp:c,payload:new A(o.payload.offset(i?8:0))}}async function Or(t,e,n,r){const i=Br(e,n,r="number"==typeof r?st.fromBigInt(BigInt(r)):r),s=Gn(await zn(t,i),i);return E(s.payload,s.span)}function Mr(e,n,r){const i=async t=>{if(void 0===t?.index)return Pr(e,r,n);const i=await Tr(e,r,n,t.index,t.hasTimestamp??!0),s="number"==typeof t.index?st.fromBigInt(BigInt(t.index)):t.index;return{payload:i.payload,feedIndex:s,feedIndexNext:s.next()}};return{download:i,downloadPayload:async t=>{if(void 0===t?.index)return Pr(e,r,n);const i=await Or(e,r,n,t.index),s=i.span.toBigInt()<=4096n?i.payload:await kr(e,new Ir(i.address)),a="number"==typeof t.index?st.fromBigInt(BigInt(t.index)):t.index;return{payload:s,feedIndex:a,feedIndexNext:a.next()}},downloadReference:async s=>{let a=s?.index;void 0===a&&(a=(await async function(e,n,r){return Ur((await t(e,{responseType:"arraybuffer",url:`${Cr}/${n}/${r}`,params:{"Swarm-Only-Root-Chunk":!0}})).headers)}(e,r,n)).feedIndex);const o=await i({...s,index:a});return{reference:new m(o.payload.toUint8Array()),feedIndex:o.feedIndex,feedIndexNext:o.feedIndexNext??o.feedIndex.next()}},owner:r,topic:n}}function Rr(t,e,n){const r=async(r,i,s)=>async function(t,e,n,r,i,s){r=new m(r);const a=Er(n,s?.index??await $r(t,e.publicKey().address(),n)),o=s?.at??Date.now()/1e3,c=ut(BigInt(Math.floor(o)),"BE");return Jn(t,e,i,a,A.concat(c,r.toUint8Array()),s)}(t,n,e,i,r,s);return{...Mr(t,e,n.publicKey().address()),upload:r,uploadReference:r,uploadPayload:async(r,i,s)=>Dr(t,n,e,i,r,s)}}async function Fr(t,e,n,r,i,a){const o=function(t,e,n){const r=n.toBigInt(),i=[];for(let n=0n;n<=r;n++)i.push(Br(t,e,st.fromBigInt(n)));return i}(e,n,r).map(async e=>async function(t,e,n,r){try{return await t.chunk.download(e,n,r),!0}catch(t){const e=s.Objects.getDeep(t,"status");if(404===e||500===e)return!1;throw t}}(t,e,i,a));return(await Promise.all(o)).every(t=>t)}class qr{constructor(t){this.context=t}makeReader(t,e,n){return Mr(this.context.getRequestOptionsForCall(n),new ht(t),new r(e))}makeWriter(t,e,n){const r=e?new I(e):this.context.signer;if(!r)throw Error("No signer provided");return Rr(this.context.getRequestOptionsForCall(n),new ht(t),r)}async createManifest(e,n,i,s,a){const o=new p(e),c=new ht(n),d=new r(i);return s&&(s=K.parse(s)),async function(e,n,r,i,s){const a=await t(e,{method:"post",responseType:"json",url:`${Cr}/${n}/${r}`,headers:jn(i,s)});return S.parse(a.data).reference}(this.context.getRequestOptionsForCall(a),d,c,o,s)}async fetchLatestUpdate(t,e,n){return Pr(this.context.getRequestOptionsForCall(n),new r(e),new ht(t))}async isRetrievable(t,e,n,i,a){const o=new r(t),c=new ht(e);if(i&&(i=W.parse(i)),!n)try{return await this.makeReader(c,o,a).download(),!0}catch(t){const e=s.Objects.getDeep(t,"status");if(404===e||500===e)return!1;throw t}return Fr(this.context.bee,o,c,n,i,this.context.getRequestOptionsForCall(a))}}class Lr{constructor(t){this.context=t}async upload(t,e,n,r,i){const s=new p(t);if(pt(e),r&&(r=ft.parse(r)),n&&"string"!=typeof n)throw new TypeError("name has to be string or undefined!");if(yt(e)){const t=await J(e),a=n??e.name,o=e.type,c={...r,contentType:o};return yr(this.context.getRequestOptionsForCall(i),t,s,a,c)}return yr(this.context.getRequestOptionsForCall(i),e,s,n,r)}async download(e,n="",r,i){return r&&(r=W.parse(r)),async function(e,n,r="",i){const s=await t(e,{method:"GET",responseType:"arraybuffer",url:`${fr}/${n}/${r}`,headers:jn(null,i)});return{...Hn(s.headers),data:new A(s.data)}}(this.context.getRequestOptionsForCall(i),new Ir(e),n,r)}async downloadReadable(e,n="",r,i){const s=new m(e);return r&&(r=W.parse(r)),async function(e,n,r="",i){n=new m(n);const s=await t(e,{method:"GET",responseType:"stream",url:`${fr}/${n}/${r}`,headers:jn(null,i)});return{...Hn(s.headers),data:s.data}}(this.context.getRequestOptionsForCall(i),s,n,r)}}const Kr="grantee";class Nr{constructor(t){this.context=t}async create(e,n,r){const i=new p(e),s=n.map(t=>new g(t));return async function(e,n,r){const i=await t(e,{method:"post",url:Kr,data:{grantees:r.map(t=>t.toCompressedHex())},headers:jn(n),responseType:"json"}),s=wt.parse(i.data);return{status:i.status,statusText:i.statusText,ref:s.ref,historyref:s.historyref}}(this.context.getRequestOptionsForCall(r),i,s)}async get(e,n){const r=new m(e);return async function(e,n){const r=await t(e,{method:"get",url:`${Kr}/${n}`,responseType:"json"});return{status:r.status,statusText:r.statusText,grantees:gt.parse(r.data)}}(this.context.getRequestOptionsForCall(n),r)}async patch(e,n,r,i,s){const a=new p(e),o=new m(n),c=new m(r),d={add:i.add?.map(t=>new g(t))??[],revoke:i.revoke?.map(t=>new g(t))??[]};return async function(e,n,r,i,s){const a=await t(e,{method:"patch",url:`${Kr}/${r}`,data:{add:s.add.map(t=>t.toCompressedHex()),revoke:s.revoke.map(t=>t.toCompressedHex())},headers:{...jn(n),"swarm-act-history-address":i.toHex()},responseType:"json"}),o=wt.parse(a.data);return{status:a.status,statusText:a.statusText,ref:o.ref,historyref:o.historyref}}(this.context.getRequestOptionsForCall(s),a,o,c,d)}}async function Hr(t){if("string"==typeof t)return(new TextEncoder).encode(t);if(t instanceof ArrayBuffer)return new Uint8Array(t);if(t instanceof Blob)return new Uint8Array(await new Response(t).arrayBuffer());throw new TypeError("unknown websocket data type")}class jr{constructor(t){this.context=t,this.cancelled=new WeakSet}async pssSend(e,n,r,i,s,a){const o=new p(e);rt(i);const c=s?new g(s):void 0;await async function(e,n,r,i,s,a){await t(e,{method:"post",url:`pss/send/${r}/${i}`,data:s,responseType:"json",params:{recipient:a},headers:jn(n)})}(this.context.getRequestOptionsForCall(a),o,n,r,i,c)}pssSubscribe(t,e){e=mt.parse(e);const n=this.openWebSocket(`pss/subscribe/${t.toHex()}`),r={topic:t,cancel:this.makeCancel(n)};return n.onmessage=async t=>{const n=await Hr(t.data);n.length&&e.onMessage(new A(n),r)},n.onerror=t=>{this.isCancelled(n)||e.onError(new v(t.message),r)},n.onclose=()=>{e.onClose(r)},r}async pssReceive(t,e=0){if("number"!=typeof e)throw new TypeError("timeoutMsc parameter has to be a number!");return new Promise((n,r)=>{let i;const s=this.pssSubscribe(t,{onError:t=>{clearTimeout(i),s.cancel(),r(t.message)},onMessage:t=>{clearTimeout(i),s.cancel(),n(t)},onClose:()=>{clearTimeout(i),s.cancel()}});e>0&&(i=setTimeout(()=>{s.cancel(),r(new v("pssReceive timeout"))},e))})}gsocMine(t,e,n=12){const r=new B(t),i=new x(e);for(let t=0n;t<0xffffn;t++){const e=new I(bt(2867n+t)),a=P(i,e.publicKey().address());if(256-s.Binary.proximity(a.toUint8Array(),r.toUint8Array())<=256-n)return e}throw Error("Could not mine a valid signer")}async gsocSend(t,e,n,r,i,s){const a=new p(t),o=new I(e),c=new x(n),d=E(r).toSingleOwnerChunk(c,o);return Vn(this.context.getRequestOptionsForCall(s),d,a,i)}gsocSubscribe(t,e,n){const i=new r(t),s=new x(e);n=vt.parse(n);const a=P(s,i),o=this.openWebSocket(`gsoc/subscribe/${a.toHex()}`),c={address:i,cancel:this.makeCancel(o)};return o.onmessage=async t=>{const e=await Hr(t.data);e.length&&n.onMessage(new A(e),c)},o.onerror=t=>{this.isCancelled(o)||n.onError(new v(t.message),c)},o.onclose=()=>{n.onClose(c)},c}openWebSocket(t){const e=this.context.url.replace(/^http/i,"ws");return"browser"===s.System.whereAmI()?new St(`${e}/${t}`):new St(`${e}/${t}`,{headers:this.context.getRequestOptionsForCall().headers})}makeCancel(t){return()=>{this.cancelled.has(t)||(this.cancelled.add(t),t.terminate?t.terminate():t.close())}}isCancelled(t){return this.cancelled.has(t)}}const Wr="pins";class zr{constructor(t){this.context=t}async add(e,n){const r=new m(e);await async function(e,n){await t(e,{method:"post",responseType:"json",url:`${Wr}/${n}`})}(this.context.getRequestOptionsForCall(n),r)}async remove(e,n){const r=new m(e);await async function(e,n){await t(e,{method:"delete",responseType:"json",url:`${Wr}/${n}`})}(this.context.getRequestOptionsForCall(n),r)}async getAll(e){return async function(e){const n=await t(e,{method:"get",responseType:"json",url:Wr}),{references:r}=kt.parse(n.data);return(r??[]).map(t=>new m(t))}(this.context.getRequestOptionsForCall(e))}async get(e,n){const r=new m(e);return async function(e,n){const r=await t(e,{method:"get",responseType:"json",url:`${Wr}/${n}`});return S.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async reuploadData(e,n,r){const i=new p(e),s=new m(n);await async function(e,n,r){await t(e,{method:"put",url:`${xr}/${r}`,headers:{"swarm-postage-batch-id":n.toHex()}})}(this.context.getRequestOptionsForCall(r),i,s)}}const Gr="settlements";class Vr{constructor(t){this.context=t}async get(e,n){const r=new B(e);return async function(e,n){const r=await t(e,{url:`${Gr}/${n}`,responseType:"json"});return xt.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getAll(e){return async function(e){const n=await t(e,{url:Gr,responseType:"json"});return It.parse(n.data)}(this.context.getRequestOptionsForCall(e))}}class Jr{constructor(t){this.context=t}makeReader(t,e){const n=new r(t);return{owner:n,download:Zn.bind(null,this.context.getRequestOptionsForCall(e),n)}}makeWriter(t,e){const n=t?new I(t):this.context.signer;if(!n)throw Error("No signer provided");return{...this.makeReader(n.publicKey().address(),e),upload:Jn.bind(null,this.context.getRequestOptionsForCall(e),n)}}}const Zr="stake";class Yr{constructor(t){this.context=t}async get(e){return async function(e){const n=await t(e,{method:"get",responseType:"json",url:Zr});return At.parse(n.data).stakedAmount}(this.context.getRequestOptionsForCall(e))}async getWithdrawable(e){return async function(e){const n=await t(e,{method:"get",responseType:"json",url:`${Zr}/withdrawable`});return Ct.parse(n.data).withdrawableAmount}(this.context.getRequestOptionsForCall(e))}async deposit(e,n,r){const i=e instanceof d?e.toPLURString():a(e,{min:1n,name:"amount"});return n&&(n=L.parse(n)),async function(e,n,r){const i=await t(e,{method:"post",responseType:"json",url:`${Zr}/${n}`,headers:jn(null,r)});return Ut.parse(i.data).txHash}(this.context.getRequestOptionsForCall(r),i,n)}async withdrawSurplus(e){return async function(e){const n=await t(e,{method:"delete",responseType:"json",url:`${Zr}/withdrawable`});return Ut.parse(n.data).txHash}(this.context.getRequestOptionsForCall(e))}async migrate(e){return async function(e){const n=await t(e,{method:"delete",responseType:"json",url:Zr});return Ut.parse(n.data).txHash}(this.context.getRequestOptionsForCall(e))}async getRedistributionState(e){return async function(e){const n=await t(e,{method:"get",responseType:"json",url:"redistributionstate"});return Pt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}}const _r="stamps";const Qr="batches";class Xr{constructor(t){this.context=t}async create(e,n,r,i){const s=a(e,{min:0n,name:"amount"});if(r&&(r=Mt.parse(r)),n<Rt||n>Ft)throw new H(`Depth has to be between ${Rt}..${Ft}`,n);const o=await this.context.bee.status.getChainState(),c=17280n*BigInt(o.currentPrice)+1n;if(BigInt(s)<c)throw new H(`Amount has to be at least ${c} (1 day at current price ${o.currentPrice})`,s);const d=await async function(e,n,r,i,s,a){const o={};s&&(o["gas-price"]=s),void 0!==a&&(o.immutable=String(a));const c=await t(e,{method:"post",url:`${_r}/${n}/${r}`,responseType:"json",params:{label:i},headers:o});return Et.parse(c.data).batchID}(this.context.getRequestOptionsForCall(i),s,n,r?.label,r?.gasPrice?.toString(),r?.immutableFlag);return!1!==r?.waitForUsable&&await this.waitForUsable(d,r?.waitForUsableTimeout),d}async updateLabel(e,n,r){const i=new p(e);await async function(e,n,r){await t(e,{method:"patch",url:`${_r}/${n}`,responseType:"json",data:{label:r}})}(this.context.getRequestOptionsForCall(r),i,n)}async calculateTopUpForBZZ(t,e,n){const r=await this.context.bee.status.getChainState(n),i="gnosis"===this.context.network?5:15,s=e.toPLURBigInt()/2n**BigInt(t),c=function(t,e,n){const r=BigInt(a(t));return o.fromSeconds(Number(r*BigInt(n)/BigInt(e)))}(s,r.currentPrice,i);return{amount:s,duration:c}}async topUp(e,n,r){const i=new p(e),s=a(n,{min:1n,name:"amount"});return async function(e,n,r){const i=await t(e,{method:"patch",url:`${_r}/topup/${n}/${r}`,responseType:"json"});return Et.parse(i.data).batchID}(this.context.getRequestOptionsForCall(r),i,s)}async dilute(e,n,r){const i=new p(e),s=qt().int().min(18).max(255).parse(n);return async function(e,n,r){const i=await t(e,{method:"patch",url:`${_r}/dilute/${n}/${r}`,responseType:"json"});return Et.parse(i.data).batchID}(this.context.getRequestOptionsForCall(r),i,s)}async get(e,n,r,i){const s=new p(e);return async function(e,n,r,i){const s=await t(e,{method:"get",url:`${_r}/${n}`,responseType:"json"});return Nn($t.parse(s.data),r,i)}(this.context.getRequestOptionsForCall(n),s,r,i)}async getGlobal(e,n){const r=new p(e);return async function(e,n){const r=await t(e,{method:"get",url:`${Qr}/${n}`,responseType:"json"});return Tt.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getBuckets(e,n){const r=new p(e);return async function(e,n){const r=await t(e,{method:"get",url:`${_r}/${n}/buckets`,responseType:"json"});return Dt.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getAll(e){return async function(e){const n=await t(e,{method:"get",url:_r,responseType:"json"});return Bt.parse(n.data).stamps.map(t=>Nn(t))}(this.context.getRequestOptionsForCall(e))}async getAllGlobal(e){return async function(e){const n=await t(e,{method:"get",url:Qr,responseType:"json"});return Ot.parse(n.data).batches}(this.context.getRequestOptionsForCall(e))}async waitForUsable(t,e=24e4){for(let n=0;n<e;n+=3e3){try{if((await this.get(t)).usable)return}catch{}await s.System.sleepMillis(3e3)}throw new v("Timeout on waiting for postage stamp to become usable")}}class ti{constructor(t){this.context=t}async get(e){return async function(e){const n=await t(e,{method:"get",url:"status",responseType:"json"});return Lt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getHealth(e){return async function(e){const n=await t(e,{method:"get",url:"health",responseType:"json"});return Kt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getReadiness(e){return async function(e){const n=await t(e,{method:"get",url:"readiness"});return Nt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getNodeInfo(e){return async function(e){const n=await t(e,{method:"get",url:"node",responseType:"json"});return Ht.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async isSupportedExactVersion(t){const{version:e}=await this.getHealth(t);return e===zt}async isSupportedApiVersion(t){const{apiVersion:e}=await this.getHealth(t);return Gt(e)===Gt(Vt)}async getVersions(t){const{version:e,apiVersion:n}=await this.getHealth(t);return{supportedBeeVersion:zt,supportedBeeApiVersion:Vt,beeVersion:e,beeApiVersion:n}}async getReserveState(e){return async function(e){const n=await t(e,{method:"get",url:"reservestate",responseType:"json"});return jt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getChainState(e){return async function(e){const n=await t(e,{method:"get",url:"chainstate",responseType:"json"});return Wt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}}class ei{constructor(t){this.context=t}get blockTime(){return"gnosis"===this.context.network?5:15}async buy(t,e,n,r,i,s){const a=Ln(e,(await this.context.bee.status.getChainState(r)).currentPrice,this.blockTime),o=Kn(t,i,s);return n&&(n=Mt.parse(n)),this.context.bee.stamp.create(a,o,n,r)}async getCost(t,e,n,r,i){const s=Ln(e,(await this.context.bee.status.getChainState(n)).currentPrice,this.blockTime);return qn(Kn(t,r,i),s)}async extend(t,e,n,r,i,s){const a=await this.context.bee.stamp.get(t,r),o=Kn(e,i,s),c=await this.context.bee.status.getChainState(r),d=o-a.depth,u=d<=0?1n:2n**BigInt(d),l=Ln(n,c.currentPrice,this.blockTime),h=Ln(a.duration,c.currentPrice,this.blockTime),p=(n.isZero()?h*u:(h+l)*u)-h;let f;if(p>0n&&(f=await this.context.bee.stamp.topUp(a.batchID,p,r)),d>0)return this.context.bee.stamp.dilute(a.batchID,o,r);if(!f)throw new Error("Nothing to extend, both size and duration are already sufficient");return f}async extendSize(t,e,n,r,i){const s=await this.context.bee.status.getChainState(n),a=await this.context.bee.stamp.get(t,n),o=Kn(e,r,i),c=o-a.depth;if(c<=0)throw new H("New depth has to be greater than the original depth",o);const d=Ln(a.duration,s.currentPrice,this.blockTime);return await this.context.bee.stamp.topUp(a.batchID,d*(2n**BigInt(c)-1n)+1n,n),this.context.bee.stamp.dilute(a.batchID,o,n)}async extendDuration(t,e,n){const r=await this.context.bee.stamp.get(t,n),i=Ln(e,(await this.context.bee.status.getChainState(n)).currentPrice,this.blockTime);return this.context.bee.stamp.topUp(r.batchID,i,n)}async getExtensionCost(t,e,n,r,i,s){const a=await this.context.bee.stamp.get(t,r),o=await this.context.bee.status.getChainState(r),c=n.isZero()?0n:Ln(n,o.currentPrice,this.blockTime),d=Kn(e,i,s),u=Ln(a.duration,o.currentPrice,this.blockTime),l=qn(a.depth,u);return qn(Math.max(a.depth,d),u+c).minus(l)}async getSizeExtensionCost(t,e,n,r,i){const s=await this.context.bee.stamp.get(t,n),a=await this.context.bee.status.getChainState(n),o=Kn(e,r,i);if(o-s.depth<=0)throw new H("New depth has to be greater than the original depth",o);const c=Ln(s.duration,a.currentPrice,this.blockTime),d=qn(s.depth,c);return qn(o,c).minus(d)}async getDurationExtensionCost(t,e,n){const r=await this.context.bee.stamp.get(t,n),i=Ln(e,(await this.context.bee.status.getChainState(n)).currentPrice,this.blockTime);return qn(r.depth,i)}async rename(t,e,n){return this.context.bee.stamp.updateLabel(t,e,n)}}const ni="tags";class ri{constructor(t){this.context=t}async create(e){return async function(e){const n=await t(e,{method:"post",url:ni,responseType:"json"});return Jt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getAll(e,n){return e&&(e=Yt.parse(e)),async function(e,n){const r=await t(e,{url:ni,params:{offset:n?.offset,limit:n?.limit},responseType:"json"});return Zt.parse(r.data).tags}(this.context.getRequestOptionsForCall(n),e)}async get(e,n){const r=k(e);return async function(e,n){const r=await t(e,{url:`${ni}/${n}`,responseType:"json"});return Jt.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async delete(e,n){const r=k(e);await async function(e,n){await t(e,{method:"delete",url:`${ni}/${n}`})}(this.context.getRequestOptionsForCall(n),r)}async update(e,n,r){const i=new m(n),s=k(e);await async function(e,n,r){await t(e,{method:"patch",url:`${ni}/${n}`,data:{reference:r}})}(this.context.getRequestOptionsForCall(r),s,i)}}const ii="transactions";class si{constructor(t){this.context=t}async getAll(e){return async function(e){const n=await t(e,{url:ii,responseType:"json"});return _t.parse(n.data).pendingTransactions}(this.context.getRequestOptionsForCall(e))}async get(e,n){const r=new te(e);return async function(e,n){const r=await t(e,{url:`${ii}/${n}`,responseType:"json"});return Qt.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async rebroadcast(e,n){const r=new te(e);return async function(e,n){const r=await t(e,{method:"post",url:`${ii}/${n}`,responseType:"json"});return Xt.parse(r.data).transactionHash}(this.context.getRequestOptionsForCall(n),r)}async cancel(e,n,r){const i=new te(e),s=n?a(n,{min:0n,name:"gasPrice"}):void 0;return async function(e,n,r){const i={};r&&(i["gas-price"]=r);const s=await t(e,{method:"delete",headers:i,url:`${ii}/${n}`,responseType:"json"});return Xt.parse(s.data).transactionHash}(this.context.getRequestOptionsForCall(r),i,s)}}const ai="wallet";class oi{constructor(t){this.context=t}async getBalance(e){return async function(e){const n=await t(e,{method:"get",url:ai,responseType:"json"});return ee.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async withdrawBZZ(e,n,i){const s=e instanceof d?e:d.fromPLUR(e),a=new r(n);return async function(e,n,r){const i=await t(e,{method:"post",url:`${ai}/withdraw/bzz`,responseType:"json",params:{amount:n.toPLURString(),address:r.toHex()}});return ne.parse(i.data).transactionHash}(this.context.getRequestOptionsForCall(i),s,a)}async withdrawDAI(e,n,i){const s=e instanceof re?e:re.fromWei(e),a=new r(n);return async function(e,n,r){const i=await t(e,{method:"post",url:`${ai}/withdraw/nativetoken`,responseType:"json",params:{amount:n.toWeiString(),address:r.toHex()}});return ne.parse(i.data).transactionHash}(this.context.getRequestOptionsForCall(i),s,a)}}const ci=["1","7","9","11","13","15","17","19","20","21","22","23","25","37","42","43","53","69","77","79","87","95","101","102","103","104","109","110","111","113","115","117","119","123","135","137","139","143","161","179","389","427","465","512","513","514","515","526","530","531","532","540","548","554","556","563","587","601","636","989","990","993","995","1719","1720","1723","2049","3659","4045","4190","5060","5061","6000","6566","6665","6666","6667","6668","6669","6679","6697","10080"];function di(t){if(!function(t){try{if("string"!=typeof t)return!1;const e=new URL(t);return"http:"===e.protocol||"https:"===e.protocol}catch(t){return!1}}(t))throw new H("URL is not valid!",t);const e=new URL(t).port;if(e&&!function(t){if("string"!=typeof t)return!1;if(ci.includes(t))return!1;const e=parseInt(t,10);return e>0&&e<65536&&!isNaN(e)}(e))throw new H("Port in URL is considered bad port and cannot be used!",e)}class ui{constructor(t,e){di(t),this.url=function(t){return t.endsWith("/")?t.slice(0,-1):t}(t),e?.signer&&(this.signer=new I(e.signer)),this.network=e?.network??"gnosis",this.requestOptions={baseURL:this.url,timeout:e?.timeout??0,headers:e?.headers,onRequest:e?.onRequest,httpAgent:e?.httpAgent,httpsAgent:e?.httpsAgent};const n={getRequestOptionsForCall:t=>this.getRequestOptionsForCall(t),url:this.url,signer:this.signer,network:this.network,bee:this};this.balance=new Qn(n),this.settlement=new Vr(n),this.transaction=new si(n),this.stake=new Yr(n),this.connectivity=new br(n),this.status=new ti(n),this.wallet=new oi(n),this.stamp=new Xr(n),this.storage=new ei(n),this.chequebook=new er(n),this.cheque=new tr(n),this.tag=new ri(n),this.pin=new zr(n),this.grantee=new Nr(n),this.messaging=new jr(n),this.feed=new qr(n),this.soc=new Jr(n),this.data=new Ar(n),this.chunk=new nr(n),this.file=new Lr(n),this.collection=new gr(n)}makeContentAddressedChunk(t,e){return E(t,e)}unmarshalContentAddressedChunk(t){return dt(t)}makeSingleOwnerChunk(t,e,n,r,i){return function(t,e,n,r,i){r=new x(r),i=new I(i);const s={data:A.concat(e.toUint8Array(),n.toUint8Array()),span:e,payload:n,address:t};return C(s,r,i.toBigInt())}(t,e,n,r,i)}calculateSingleOwnerChunkAddress(t,e){return P(t,e)}unmarshalSingleOwnerChunk(t,e){return Gn(t,e)}async createEnvelope(i,s,a){return i=new p(i),s=new m(s),async function(i,s,a){const o=await t(i,{method:"post",responseType:"json",url:`envelope/${a}`,headers:{"swarm-postage-batch-id":s.toHex()}}),c=e.parse(o.data);return{issuer:new r(c.issuer),index:c.index,timestamp:c.timestamp,signature:new n(c.signature),batchId:s}}(this.getRequestOptionsForCall(a),i,s)}async rchash(e,n,r,s){return async function(e,n,r,s){const a=await t(e,{responseType:"json",url:`rchash/${n}/${r}/${s}`});return i.parse(a.data).durationSeconds}(this.getRequestOptionsForCall(s),e,n,r)}getRequestOptionsForCall(t){return t&&(t=ie.parse(t)),t?s.Objects.deepMerge2(this.requestOptions,t):this.requestOptions}}const li=4096;function hi(t){if(0===t.length)return[new Uint8Array(0)];const e=[];for(let n=0;n<t.length;n+=li)e.push(t.slice(n,Math.min(n+li,t.length)));return e}const pi=se.omit({appSecret:!0,connectedUntil:!0,chatBinding:!0}),fi=ae({type:ce("account-delta"),snapshot:oe.extend({connectedApps:de(pi)})}),yi=ue().min(1).max(100),wi=ue().regex(/^[0-9a-f]{8}$/),gi=he("type",[pe,fi,ae({type:ce("lease-request"),accountId:ue().length(40),batchId:ue().length(64),fromDeviceId:yi,requestId:wi}),ae({type:ce("lease-claim"),accountId:ue().length(40),batchId:ue().length(64),fromDeviceId:yi,requestId:wi}),ae({type:ce("lease-released"),accountId:ue().length(40),batchId:ue().length(64),partition:le().int().min(0),fromDeviceId:yi,requestId:wi.optional()}),ae({type:ce("presence"),accountId:ue().length(40),fromDeviceId:yi})]);class mi{constructor(t){this.local=!0,this.handlers=new Set,this.channelName=function(t){return`swarm-id-bus-v1:${t}`}(t),this.channel=new BroadcastChannel(this.channelName),this.channel.onmessage=t=>{for(const e of this.handlers)e(t.data)}}publish(t){this.channel.postMessage(t)}subscribe(t){return this.handlers.add(t),()=>this.handlers.delete(t)}close(){this.handlers.clear(),this.channel.close()}}class bi{constructor(t){this.handlers=new Set,this.peerLeftHandlers=new Set,this.closed=!1,this.transports=t,this.transportUnsubscribers=t.flatMap(t=>this.listenTo(t))}listenTo(t){const e=[t.subscribe((t,e)=>this.dispatch(t,e))],n=t.onPeerLeft?.(t=>{for(const e of this.peerLeftHandlers)try{e(t)}catch(t){console.error("[AccountBus] Peer-left handler error:",t)}});return n&&e.push(n),e}publish(t,e){if(!this.closed)for(const n of this.transports)e?.localOnly&&!n.local||n.publish(t)}addTransport(t){if(this.closed)return t.close(),()=>{};this.transports.push(t);const e=this.listenTo(t);return this.transportUnsubscribers.push(...e),()=>{for(const t of e)t();t.close(),this.transports=this.transports.filter(e=>e!==t),this.transportUnsubscribers=this.transportUnsubscribers.filter(t=>!e.includes(t))}}subscribe(t){return this.handlers.add(t),()=>this.handlers.delete(t)}onPeerLeft(t){return this.peerLeftHandlers.add(t),()=>this.peerLeftHandlers.delete(t)}close(){this.closed=!0;for(const t of this.transportUnsubscribers)t();this.transportUnsubscribers=[],this.handlers.clear(),this.peerLeftHandlers.clear();for(const t of this.transports)t.close();this.transports=[]}dispatch(t,e){const n=gi.safeParse(t);if(n.success)for(const t of this.handlers)try{t(n.data,e)}catch(t){console.error("[AccountBus] Handler error:",t)}}}const vi=ae({version:le().int().nonnegative(),data:fe()});class Si{getItem(t){if("undefined"!=typeof window&&window.localStorage)return window.localStorage.getItem(t)??void 0}setItem(t,e){"undefined"!=typeof window&&window.localStorage&&window.localStorage.setItem(t,e)}removeItem(t){"undefined"!=typeof window&&window.localStorage&&window.localStorage.removeItem(t)}}const ki="swarm-id-storage-write",xi=new Map;class Ii{constructor(t){this.listeners=new Set,this.options=t}subscribe(t){return this.listeners.add(t),this.boundStorageHandler||this.setupStorageEventListener(),()=>{this.listeners.delete(t),0===this.listeners.size&&this.cleanupStorageEventListener()}}setupStorageEventListener(){"undefined"!=typeof window&&(this.boundStorageHandler=t=>{t.key===this.options.key&&this.reloadAndNotify()},window.addEventListener("storage",this.boundStorageHandler),this.boundSameWindowHandler=t=>{const e=t.detail;e&&e.key===this.options.key&&e.source!==this&&this.reloadAndNotify(e.noRepublish?{noRepublish:!0}:void 0)},window.addEventListener(ki,this.boundSameWindowHandler))}cleanupStorageEventListener(){"undefined"!=typeof window&&(this.boundStorageHandler&&(window.removeEventListener("storage",this.boundStorageHandler),this.boundStorageHandler=void 0),this.boundSameWindowHandler&&(window.removeEventListener(ki,this.boundSameWindowHandler),this.boundSameWindowHandler=void 0))}notifySameWindow(t){"undefined"!=typeof window&&window.dispatchEvent(new CustomEvent(ki,{detail:{key:this.options.key,source:this,noRepublish:t}}))}reloadAndNotify(t){this.options.sealing?this.prime().then(()=>this.notifyListeners(this.load(),t)):this.notifyListeners(this.load(),t)}notifyListeners(t,e){for(const n of this.listeners)try{n(t,e)}catch(t){console.error(`[${this.options.loggerName??"Storage"}] Listener error:`,t)}}load(){const t=this.options.storage.getItem(this.options.key);if(!t)return[];try{const e=JSON.parse(t);return this.parse(e)}catch(t){return console.error(`[${this.options.loggerName??"Storage"}] Load failed:`,t),[]}}parse(t){const e=vi.safeParse(t),n=e.success?e.data.version:0,r=e.success?e.data.data:t,i=this.options.sealing?this.options.sealing.open(r):r,s=this.options.parsers[n];return s?s(i,n):(console.error(`[${this.options.loggerName??"Storage"}] No parser for version ${n}`),[])}async prime(){const t=this.options.sealing;if(t)try{const e=this.storedData();if(void 0===e)return;await t.prime(e)}catch(t){console.error(`[${this.options.loggerName??"Storage"}] Prime failed:`,t)}}storedData(){const t=this.options.storage.getItem(this.options.key);if(!t)return;const e=JSON.parse(t),n=vi.safeParse(e);return n.success?n.data.data:e}save(t,e){let n;try{n=this.serialize(t)}catch(t){return console.error(`[${this.options.loggerName??"Storage"}] Save failed:`,t),Promise.resolve()}if(!this.options.sealing){try{this.write(n,e)}catch(t){console.error(`[${this.options.loggerName??"Storage"}] Save failed:`,t)}return Promise.resolve()}return this.enqueue(async()=>{this.write(await this.seal(n),e)})}update(t,e){return this.enqueue(async()=>{await this.prime();const n=t(this.load());void 0!==n&&this.write(await this.seal(this.serialize(n)),e)})}clear(){const t=()=>{this.options.storage.removeItem(this.options.key),this.notifySameWindow()};return this.options.sealing?this.enqueue(async()=>t()):(t(),Promise.resolve())}serialize(t){return this.options.serializer?t.map(this.options.serializer):t}seal(t){return this.options.sealing?this.options.sealing.seal(t,this.storedData()):Promise.resolve(t)}write(t,e){const n={version:this.options.currentVersion,data:t};this.options.storage.setItem(this.options.key,JSON.stringify(n)),this.notifySameWindow(e?.noRepublish)}enqueue(t){const e=this.options.key,n=(xi.get(e)??Promise.resolve()).then(()=>async function(t,e){if("undefined"==typeof navigator||!navigator.locks)return e();let n=!1;try{await navigator.locks.request(`swarm-id-storage-write-${t}`,{mode:"exclusive"},()=>(n=!0,e()))}catch(t){if(n)throw t;await e()}}(e,t)),r=n.catch(t=>{console.error(`[${this.options.loggerName??"Storage"}] Save failed:`,t)});return xi.set(e,r),n}}const Ai="sealed:v1:",Ci="wrapping-keys",Ui="at-rest-v1";function Pi(){return new Promise((t,e)=>{let n=!1;const r=t=>{n||(n=!0,clearTimeout(i),e(t))},i=setTimeout(()=>r(new Error("IndexedDB open timed out")),1e4),s=indexedDB.open("swarm-id-keys",1);s.onupgradeneeded=()=>{s.result.objectStoreNames.contains(Ci)||s.result.createObjectStore(Ci)},s.onsuccess=()=>{n?s.result.close():(n=!0,clearTimeout(i),t(s.result))},s.onerror=()=>r(s.error),s.onblocked=()=>r(new Error("IndexedDB open was blocked"))})}function Ei(){return{async get(){const t=await Pi();try{const n=t.transaction(Ci,"readonly").objectStore(Ci);return await(e=n.get(Ui),new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error)}))}finally{t.close()}var e},async getOrAdd(t){const e=await Pi();try{return await new Promise((n,r)=>{const i=e.transaction(Ci,"readwrite"),s=i.objectStore(Ci);let a=t;const o=s.get(Ui);o.onsuccess=()=>{o.result?a=o.result:s.add(t,Ui)},i.oncomplete=()=>n(a),i.onerror=()=>r(i.error),i.onabort=()=>r(i.error)})}finally{e.close()}}}}function $i(){let t;return{get:async()=>t,getOrAdd:async e=>(t??(t=e),t)}}let Di,Bi;function Ti(){return Di??(Di=async function(){if("undefined"==typeof indexedDB)return{store:$i(),standsIn:!1};if(!indexedDB)return{store:$i(),standsIn:!0};try{return(await Pi()).close(),{store:Ei(),standsIn:!1}}catch{return{store:$i(),standsIn:!0}}}()),Di}function Oi(){return Bi??(Bi=(async()=>{const{store:t}=await Ti(),e=await t.get();if(e)return e;const n=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return t.getOrAdd(n)})()),Bi.catch(()=>{Bi=void 0}),Bi}const Mi=new Map,Ri=new Map,Fi=new Map;function qi(t){return"string"==typeof t&&t.startsWith(Ai)}async function Li(t){const e=Ri.get(t);if(e)return e;const n=await Oi(),r=crypto.getRandomValues(new Uint8Array(12)),i=new Uint8Array(await crypto.subtle.encrypt({name:"AES-GCM",iv:r},n,(new TextEncoder).encode(t))),s=`${Ai}${ye(r)}${ye(i)}`;return Ri.set(t,s),Mi.set(s,t),s}const Ki=new Set;async function Ni(t){let e;try{e=await Oi()}catch{return void Ki.add(t)}try{const n=we(t.slice(10)),r=(new TextDecoder).decode(await crypto.subtle.decrypt({name:"AES-GCM",iv:n.slice(0,12)},e,n.slice(12)));Mi.set(t,r),Ri.set(r,t)}catch{(await Ti()).standsIn&&Ki.add(t)}}function Hi(t){return Ki.has(t)}async function ji(t){const e=[];for(const n of t){if(!qi(n)||Mi.has(n))continue;let t=Fi.get(n);t||(t=Ni(n).finally(()=>Fi.delete(n)),Fi.set(n,t)),e.push(t)}await Promise.all(e)}function Wi(t){return Mi.get(t)}const zi={AppSliceFullError:"upload-unavailable",PartitionContendedError:"partition-contended",PartitionLeaseLostError:"lease-lost",ReservedSlotError:"invalid-request",TimeoutError:"timeout"},Gi={AppSliceFullError:"app-slice-full"};function Vi(t){try{return new URL(t).pathname}catch{return}}function Ji(t,e){if(t instanceof ge)return t.toWire();if(!(t instanceof Error))return{error:e,code:"internal"};const n={error:t.message,code:"internal"};if(t instanceof lt){n.code="bee-rejected",void 0!==t.status&&(n.status=t.status);const e=function(t){if("string"==typeof t)return t||void 0;if(t&&"object"==typeof t&&"message"in t){const{message:e}=t;if("string"==typeof e)return e}}(t.responseBody);void 0!==e&&(n.beeMessage=e);const r=Vi(t.url);void 0!==r&&(n.url=r)}else if("SocUploadError"===t.name){const{status:e,body:r}=t;n.code="bee-rejected",n.status=e,n.beeMessage=r}else if(t.name in zi){n.code=zi[t.name];const e=Gi[t.name];void 0!==e&&(n.reason=e)}else t instanceof me?n.code="invalid-request":t instanceof TypeError&&/fetch/i.test(t.message)&&(n.code="network");return n}class Zi{constructor(t,e){this.beeUrl=t,this.options=e,this.pendingAcks=[],this.closed=!1,this.concurrency=e?.concurrency??32}getConcurrency(){return this.concurrency}open(){return new Promise((t,e)=>{const n=this.buildWsUrl();this.ws=new WebSocket(n),this.ws.binaryType="arraybuffer",this.ws.onopen=()=>{t()},this.ws.onerror=()=>{const t="WebSocket connection error";this.errorMessage=t,this.rejectAllPending(new Error(t)),e(new Error(t))},this.ws.onmessage=()=>{const t=this.pendingAcks.shift();t&&(clearTimeout(t.timer),t.resolve())},this.ws.onclose=t=>{if(!this.closed){const e=`WebSocket closed unexpectedly: ${t.code} ${t.reason}`;this.errorMessage=e,this.rejectAllPending(new Error(e))}}})}async uploadChunk(t){if(!this.ws||this.ws.readyState!==WebSocket.OPEN)throw new Error(this.errorMessage??"WebSocket is not open");for(;this.pendingAcks.length>=this.concurrency;)await this.waitForAck();return new Promise((e,n)=>{const r=setTimeout(()=>{n(new Error("WebSocket chunk ack timeout"))},9e5);this.pendingAcks.push({resolve:e,reject:n,timer:r});try{this.ws.send(t)}catch(t){this.pendingAcks.pop(),clearTimeout(r),n(t instanceof Error?t:new Error("WebSocket send failed"))}})}async close(){for(;this.pendingAcks.length>0;)await this.waitForAck();this.closed=!0,this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.close()}buildWsUrl(){let t=this.beeUrl;t.startsWith("https://")?t="wss://"+t.slice(8):t.startsWith("http://")&&(t="ws://"+t.slice(7)),t.endsWith("/")&&(t=t.slice(0,-1));let e=t+"/chunks/stream";return this.options?.tag&&(e+=`?swarm-tag=${this.options.tag}`),e}waitForAck(){const t=this.pendingAcks[0];return t?new Promise((e,n)=>{const r=t.resolve;t.resolve=()=>{r(),e()};const i=t.reject;t.reject=t=>{i(t),n(t)}}):Promise.resolve()}rejectAllPending(t){for(const e of this.pendingAcks)clearTimeout(e.timer),e.reject(t);this.pendingAcks=[]}}const Yi=new WeakMap;async function _i(t){if(!Yi.get(t))try{return(await t.tag.create()).uid}catch(e){const n=function(t,e){return"object"==typeof t&&null!==t&&t.status===e}(e,404);return n&&Yi.set(t,!0),void console.warn("[tryCreateTag] Tag creation failed — proceeding without tag"+(n?" (node does not support tags; cached, will not retry on this node)":" (transient; will re-probe on the next upload)"))}}class Qi extends Error{constructor(t,e,n){super(`SOC upload failed: ${t} ${e} - ${n}`),this.name="SocUploadError",this.status=t,this.body=n}}function Xi(t){return"stamper"===t.mode}function ts(t){return"subsidised"===t.mode}function es(t,e){return e?t=>e.stampChunkData(t):e=>Promise.resolve(t.stamp(e))}async function ns(t,e,n,r,i,s){const a=await e(r);await t.chunk.upload(a,n,i,s)}function rs(t,e){const n=t.requestOptions;return{...n?.headers,...e?.headers}}async function is(t,e,n){const r=`${Se(t)}/chunks`,i={"content-type":"application/octet-stream"};void 0!==n?.deferred&&(i["swarm-deferred-upload"]=n.deferred.toString());const s=await fetch(r,{method:"POST",headers:i,body:e});if(!s.ok){const t=await s.text();throw new ge("bee-rejected",`Subsidised chunk upload failed: ${s.status} ${s.statusText} - ${t}`,{status:s.status,beeMessage:t,url:Vi(s.url)})}return{reference:(await s.json()).reference}}async function ss(t,e,n,r,i,s,a=xe){let o=0;await Promise.all(Array.from({length:Math.min(a,n.length)},()=>(async()=>{for(;o<n.length;){const a=n[o++];await ns(t,e,a.data,a.address,r,i),s(a.address)}})()))}async function as(t,e,n,r){const i=await t(r),a=s.Binary.concatBytes(y(i).toUint8Array(),n);await e.uploadChunk(a)}async function os(t,e,n,r){let i=0;const s=e.getConcurrency();await Promise.all(Array.from({length:s},()=>(async()=>{for(;i<n.length;){const s=n[i++];await as(t,e,s.data,s.address),r(s.address)}})()))}async function ds(t,e){if(1===t.length)return new m(t[0].address);const n=[];for(let r=0;r<t.length;r+=128){const i=t.slice(r,Math.min(r+128,t.length));if(1===i.length){n.push(i[0]);continue}const s=new Uint8Array(32*i.length);i.forEach((t,e)=>{s.set(t.address,32*e)});const a=i.reduce((t,e)=>t+(e.span??0n),0n),o=ve(s,a);n.push({address:o.address.toUint8Array(),span:a}),await e(o)}return n.length>1?ds(n,e):new m(n[0].address)}async function us(t,e){if(1===t.length){const e=new Uint8Array(64);return e.set(t[0].address,0),e.set(t[0].key,32),new m(e)}const n=[];for(let r=0;r<t.length;r+=64){const i=t.slice(r,Math.min(r+64,t.length));if(1===i.length){n.push(i[0]);continue}const a=i.reduce((t,e)=>t+e.span,0n),o=new Uint8Array(4096);i.forEach((t,e)=>{o.set(t.address,64*e),o.set(t.key,64*e+32)});const c=N.fromBigInt(a).toUint8Array(),d=s.Binary.concatBytes(c,o),u=Ie(),{key:l,encryptedSpan:h,encryptedData:p}=u.encryptChunk(d),f=s.Binary.concatBytes(h,p),y=await ke(f);await e(f),n.push({address:y.toUint8Array(),key:l,span:a})}if(n.length>1)return us(n,e);const r=new Uint8Array(64);return r.set(n[0].address,0),r.set(n[0].key,32),new m(r)}async function ls(t,e,n){return void 0!==n?.encryptionKey?async function(t,e,n){const r=!0===n?.encryptionKey?void 0:n?.encryptionKey,i=hi(e),{chunks:s,refs:a}=function(t,e){if(e&&t.length>1)throw new Error(`Explicit encryption key is only supported for single-chunk data (up to 4096 bytes), got ${t.length} chunks — pass encryptionKey: true to auto-generate per-chunk keys`);const n=[],r=[];for(const i of t){const t=be(i,e);n.push(t),r.push({address:t.address.toUint8Array(),key:t.encryptionKey,span:BigInt(i.length)})}return{chunks:n,refs:r}}(i,r),o=s.map(t=>({data:t.data,address:t.address.toUint8Array()}));let c=s.length,d=0;const u=[],l=t=>{u.push(t),d++,n?.onProgress?.({total:c,processed:d})};if(ts(t)){const e={deferred:n?.deferred};for(const n of o)await is(t.gatewayUrl,n.data,e),l(n.address);return{reference:(await us(a,async r=>{await is(t.gatewayUrl,r,e);const i=await ke(r);u.push(i.toUint8Array()),c++,d++,n?.onProgress?.({total:c,processed:d})})).toHex(),chunkAddresses:u}}{const{bee:e,stamper:r,workerPool:i}=t,s=n?.tag??await _i(e),h={...n,tag:s,deferred:n?.deferred??!1},p=es(r,i);let f;n?.webSocket&&(f=new Zi(e.url,{tag:s,concurrency:n.webSocket.concurrency}),await f.open());try{f?await os(p,f,o,l):await ss(e,p,o,h,n?.requestOptions,l,n?.httpConcurrency);return{reference:(await us(a,async t=>{const r=await ke(t);u.push(r.toUint8Array()),f?await as(p,f,t,r.toUint8Array()):await ns(e,p,t,r.toUint8Array(),h,n?.requestOptions),c++,d++,n?.onProgress?.({total:c,processed:d})})).toHex(),tagUid:s,chunkAddresses:u}}finally{f&&await f.close()}}}(t,e,n):async function(t,e,n){const r=hi(e),i=[],s=[];for(const t of r){const e=ve(t);i.push(e),s.push({address:e.address.toUint8Array(),span:BigInt(t.length)})}let a=i.length,o=0;const c=()=>n?.onProgress?.({total:a,processed:o});if(ts(t)){const e={deferred:n?.deferred};for(const n of i)await is(t.gatewayUrl,n.data,e),o++,c();let r;return r=1===s.length?new m(s[0].address):await ds(s,async n=>{await is(t.gatewayUrl,n.data,e),a++,o++,c()}),{reference:r.toHex()}}{const{bee:e,stamper:r,workerPool:d}=t,u=n?.tag??await _i(e),l={...n,tag:u,deferred:n?.deferred??!1},h=es(r,d);for(const t of i)await ns(e,h,t.data,t.address.toUint8Array(),l,n?.requestOptions),o++,c();let p;return p=1===s.length?new m(s[0].address):await ds(s,async t=>{await ns(e,h,t.data,t.address.toUint8Array(),l,n?.requestOptions),a++,o++,c()}),{reference:p.toHex(),tagUid:u}}}(t,e,n)}async function hs(t,e,n,r,i){if(r.length<1||r.length>4096)throw new ge("invalid-request",`Invalid data length: ${r.length} (expected 1-4096)`);let a,o,c;if(void 0!==i?.encryptionKey){const t=!0===i.encryptionKey?void 0:i.encryptionKey,e=be(r,t);a=e.address.toUint8Array(),o=e.data,c=e.encryptionKey}else{const t=ve(r);a=t.address.toUint8Array(),o=t.data}const d=e.publicKey().address(),u=s.Binary.concatBytes(n.toUint8Array(),a),l=e.sign(u),h=s.Binary.keccak256(s.Binary.concatBytes(n.toUint8Array(),d.toUint8Array()));if(ts(t)){const e=`${Se(t.gatewayUrl)}/soc/${d.toHex()}/${n.toHex()}?sig=${l.toHex()}`,r={"content-type":"application/octet-stream"};void 0!==i?.deferred&&(r["swarm-deferred-upload"]=i.deferred.toString());const s=await fetch(e,{method:"POST",headers:r,body:o});if(!s.ok){const t=await s.text();throw new Qi(s.status,`${s.statusText} (subsidised)`,t)}return{socAddress:h,encryptionKey:c}}{const{bee:e,stamper:r}=t,s=i?.tag??await _i(e),a=r.stamp(h),u=y(a).toHex(),p=`${e.url}/soc/${d.toHex()}/${n.toHex()}?sig=${l.toHex()}`,f={...rs(e,i?.requestOptions),"content-type":"application/octet-stream","swarm-postage-stamp":u};s&&(f["swarm-tag"]=s.toString()),void 0!==i?.deferred&&(f["swarm-deferred-upload"]=i.deferred.toString()),void 0!==i?.pin&&(f["swarm-pin"]=i.pin.toString());const w=await fetch(p,{method:"POST",headers:f,body:o,signal:i?.requestOptions?.signal});if(!w.ok){const t=await w.text();throw new Qi(w.status,w.statusText,t)}return{socAddress:h,encryptionKey:c,tagUid:s}}}async function ps(t,e,n){if(ts(t))return is(t.gatewayUrl,e,{deferred:n?.deferred});{const{bee:r,stamper:i}=t,s=await ke(e),a=es(i);return await ns(r,a,e,s.toUint8Array(),{deferred:n?.deferred??!1,pin:n?.pin,tag:n?.tag},n?.requestOptions),{reference:ye(s.toUint8Array())}}}function fs(t,e){const n=s.Binary.keccak256((new TextEncoder).encode(`swarm-id-partition-lock-v1:${t.toHex()}:${e}`));return new x(n)}function ys(t,e,n){const r=fs(t,e);return s.Binary.keccak256(s.Binary.concatBytes(r.toUint8Array(),n.toUint8Array()))}function ws(t,e,n){const r=ys(t,e,n);return r[0]<<8|r[1]}const gs=2500,ms=3e4,bs=ms;class vs extends Error{constructor(t="Partition lease was reclaimed by another device."){super(t),this.name="PartitionLeaseLostError"}}class Ss extends Error{constructor(t="This chunk address belongs to the account's own bookkeeping and cannot be stamped for an app."){super(t),this.name="ReservedSlotError"}}class ks extends Error{constructor(t="This bucket's share for app stamps is used up. The rest of it is kept for the account's own uploads."){super(t),this.name="AppSliceFullError"}}const xs=65536,Is=16,As=2,Cs=1e4,Us=4096;function Ps(t){const e=t<=31?2:4,n=Us/e;return{counterByteSize:e,bucketsPerChunk:n,numUtilizationChunks:xs/n}}function Es(t){if(t.length<2)throw new Error("Chunk address must be at least 2 bytes");return t[0]<<8|t[1]}function $s(t,e){if(t<0||t>=xs)throw new Error(`Invalid bucket index: ${t} (must be 0-65535)`);const{bucketsPerChunk:n}=Ps(e);return Math.floor(t/n)}function Ds(t,e,n){const{counterByteSize:r,bucketsPerChunk:i,numUtilizationChunks:s}=Ps(n);if(e<0||e>=s)throw new Error(`Invalid chunk index: ${e} (must be 0-${s-1})`);const a=e*i,o=a+i,c=t.slice(a,o);return 2===r?Ls(c):qs(c)}function Bs(t,e,n,r){const{counterByteSize:i,bucketsPerChunk:s,numUtilizationChunks:a}=Ps(r);if(e<0||e>=a)throw new Error(`Invalid chunk index: ${e} (must be 0-${a-1})`);if(n.length!==Us)throw new Error(`Invalid chunk data length: ${n.length} (expected 4096)`);const o=2===i?function(t){if(t.length%2!=0)throw new Error("Byte array length must be a multiple of 2");const e=new Uint32Array(t.length/2),n=new DataView(t.buffer,t.byteOffset,t.byteLength);for(let t=0;t<e.length;t++)e[t]=n.getUint16(2*t,!0);return e}(n):function(t){if(t.length%4!=0)throw new Error("Byte array length must be a multiple of 4");const e=new Uint32Array(t.length/4),n=new DataView(t.buffer,t.byteOffset,t.byteLength);for(let t=0;t<e.length;t++)e[t]=n.getUint32(4*t,!0);return e}(n);if(o.length!==s)throw new Error(`Invalid chunk counters length: ${o.length} (expected ${s})`);const c=e*s;t.set(o,c)}class Ts{constructor(t){this.dirtyChunks=new Set,this.batchDepth=t}markDirty(t){const e=$s(t,this.batchDepth);this.dirtyChunks.add(e)}markClean(t){this.dirtyChunks.delete(t)}getDirtyChunks(){return Array.from(this.dirtyChunks).sort((t,e)=>t-e)}hasDirtyChunks(){return this.dirtyChunks.size>0}clear(){this.dirtyChunks.clear()}get count(){return this.dirtyChunks.size}}async function Os(t,e,n,r){if(32!==t.length)throw new Error(`Invalid swarmEncryptionKey length: ${t.length} (expected 32)`);const i=(new TextEncoder).encode("swarm-id-util-chunk-v1"),a=e.toUint8Array(),o=new Uint8Array(4);new DataView(o.buffer).setUint32(0,n,!1);const c=new Uint8Array(4);new DataView(c.buffer).setUint32(0,r,!1);const d=s.Binary.concatBytes(i,a,o,c),u=await crypto.subtle.importKey("raw",t,{name:"HMAC",hash:"SHA-256"},!1,["sign"]),l=await crypto.subtle.sign("HMAC",u,d);return new Uint8Array(l)}async function Ms(t){const{swarmEncryptionKey:e,batchId:n,chunkIndex:r,plaintext:i,claimedBuckets:s}=t;let a=t.priorNonce;for(;;){const t=await Os(e,n,r,a),o=be(i,t).address.toUint8Array(),c=Es(o);if(!s.has(c))return s.add(c),{key:t,nonce:a,bucket:c,address:o};a++}}function Rs(t){const e=new Set;for(const n of t.chunks)!n.dirty&&n.contentHash&&e.add(Es(s.Binary.hexToUint8Array(n.contentHash)));return e}async function Fs(t,e,n,r){if(n.length<1||n.length>4096)throw new Error(`Invalid data length: ${n.length} (expected 1-4096)`);if(32!==r.length)throw new Error(`Invalid encryption key length: ${r.length} (expected 32)`);const i=be(n,r),s=i.address.toUint8Array(),a=await _i(t),o={mode:"stamper",bee:t,stamper:e};return await ps(o,i.data,{deferred:!1,tag:a}),s}function qs(t){const e=new ArrayBuffer(4*t.length),n=new DataView(e);for(let e=0;e<t.length;e++)n.setUint32(4*e,t[e],!0);return new Uint8Array(e)}function Ls(t){const e=new ArrayBuffer(2*t.length),n=new DataView(e);for(let e=0;e<t.length;e++){const r=t[e];if(r>65535)throw new Error(`Counter at index ${e} (${r}) exceeds uint16 range; use uint32 codec`);n.setUint16(2*e,r,!0)}return new Uint8Array(e)}function Ks(t){return Math.pow(2,t-16)}function Ns(t,e,n=2){return t<js(e,n)}function Hs(t,e,n){return n+t+n*e}function js(t,e){const n=Ks(t);return Math.floor(n/e)-1}const Ws=(()=>{let t=16;for(;js(t,2)<4;)t+=1;return t})();async function zs(t,e,n,r){const i=await async function(t,e,n){const{cache:r}=n,{counterByteSize:i,bucketsPerChunk:s,numUtilizationChunks:a}=Ps(e),o=await r.getAllChunks(t.toHex());if(o.length===a)try{const n=new Uint32Array(xs),r=[];for(const t of o)Bs(n,t.chunkIndex,t.data,e),r.push({index:t.chunkIndex,contentHash:t.contentHash,lastUpload:t.lastAccess,dirty:!1,nonce:t.nonce});return{batchId:t,batchDepth:e,dataCounters:n,chunks:r,lastSync:Date.now()}}catch(t){console.warn("[BatchUtil] Failed to reconstruct from cache:",t)}const c=new Uint32Array(xs),d=[],u=new Uint32Array(s),l=2===i?Ls(u):qs(u);for(let t=0;t<a;t++){const n=o.find(e=>e.chunkIndex===t);n?(Bs(c,t,n.data,e),d.push({index:t,contentHash:n.contentHash,lastUpload:n.lastAccess,dirty:!1,nonce:n.nonce})):(Bs(c,t,l,e),d.push({index:t,contentHash:"",lastUpload:0,dirty:!0,nonce:0}))}return{batchId:t,batchDepth:e,dataCounters:c,chunks:d,lastSync:Date.now()}}(t,n,r),s=new Ts(n);for(const t of e){const e=Es(t.address.toUint8Array()),r=i.dataCounters[e];if(!Ns(r,n))throw new Error(`Bucket ${e} is full (slot ${r})`);i.dataCounters[e]++,s.markDirty(e)}const a=s.getDirtyChunks();for(const t of a)i.chunks[t].dirty=!0;return{state:i,tracker:s}}class Gs{get buckets(){return this.utilizationState.dataCounters.map(t=>Hs(this.partition??0,t,this.partitionCountValue))}get currentPartition(){return this.partition}get partitionCount(){return this.partitionCountValue}getLocalCounter(){return void 0!==this.partition?this.utilizationState.dataCounters:void 0}getLockSocBuckets(){const t=new Set;for(const e of this.lockSocs??[])t.add(Es(e.address));return t}getProtectedBuckets(){const t=new Set(this.getLockSocBuckets()),e=this.protectedStateBuckets.get(this.partition??0);for(const n of e??[])t.add(n);return t}getCleanChunkBuckets(){return Rs(this.utilizationState)}async setProtectedStateBuckets(t,e){this.protectedStateBuckets.set(t,new Set(e));const n=this.batchId.toHex(),r=await this.cache.getMetadata(n);await this.cache.putMetadata({batchId:n,lastSync:r?.lastSync??Date.now(),chunkCount:r?.chunkCount??0,syncedReferences:r?.syncedReferences,stateChunkBuckets:{...r?.stateChunkBuckets??{},[t]:e}})}bindPartition(t){if(t.localCounter.length!==xs)throw new Error(`localCounter must have 65536 entries, got ${t.localCounter.length}`);this.partition=t.partition,this.partitionCountValue=t.partitionCount,this.utilizationState.dataCounters=t.localCounter,this.leaseStale=!1,this.leaseValidUntil=void 0}bindLockSocs(t){this.lockSocs=t}markReservedUtilizationChunk(t,e){this.reservedUtilizationChunks||(this.reservedUtilizationChunks=new Map),this.reservedUtilizationChunks.set(ye(t),e??this.partition??0)}clearReservedUtilizationChunks(){this.reservedUtilizationChunks=void 0}reserveIntentSocSlot(t,e){this.intentSoc={addressHex:ye(t),slot:e}}clearIntentSocSlot(){this.intentSoc=void 0}async withIntentSocSlot(t,e,n){const r=this.intentSocLock;let i;this.intentSocLock=new Promise(t=>i=t),await r;try{return this.reserveIntentSocSlot(t,e),await n()}finally{this.clearIntentSocSlot(),i()}}unbindPartition(){this.partition=void 0,this.partitionCountValue=1,this.leaseValidUntil=void 0}invalidateLease(){void 0!==this.partition&&(this.leaseStale=!0)}setLeaseValidUntil(t){this.leaseValidUntil=t}leaseLocallyLapsed(){return void 0!==this.leaseValidUntil&&this.now()>=this.leaseValidUntil-2e3}constructor(t,e,n,r,i,s,a){this.dirty=!1,this.dirtyBuckets=new Set,this.partition=void 0,this.partitionCountValue=1,this.lockSocs=void 0,this.reservedUtilizationChunks=void 0,this.intentSoc=void 0,this.intentSocLock=Promise.resolve(),this.leaseStale=!1,this.leaseValidUntil=void 0,this.protectedStateBuckets=new Map,this.signer=t,this.batchId=e,this.depth=n,this.maxSlot=Ks(n),this.cache=r,this.encryptionKey=i,this.utilizationState=s,this.now=a}static async create(t,e,n,r,i,s,a=()=>Date.now()){const o=function(t,e){const n=new Uint32Array(xs),{numUtilizationChunks:r}=Ps(e),i=[];for(let t=0;t<r;t++)i.push({index:t,contentHash:"",lastUpload:0,dirty:!0,nonce:0});return{batchId:t,batchDepth:e,dataCounters:n,chunks:i,lastSync:Date.now()}}(e,n);try{const t=await r.getAllChunks(e.toHex()),{numUtilizationChunks:i}=Ps(n);for(const e of t)e.chunkIndex>=i||Bs(o.dataCounters,e.chunkIndex,e.data,n)}catch(t){console.warn("[UtilizationAwareStamper] Failed to load state from cache, starting with fresh state:",t)}const c=new Gs(new I(t),e,n,r,s,o,a);try{const t=await(r.getMetadata?.(e.toHex()));for(const[e,n]of Object.entries(t?.stateChunkBuckets??{}))c.protectedStateBuckets.set(Number(e),new Set(n))}catch(t){console.warn("[UtilizationAwareStamper] Failed to restore protected state buckets:",t)}const d=ye(s),u=await Ae(d,Ue),l=new I(u).publicKey().address();return c.lockSocs=Array.from({length:2},(t,n)=>({partition:n,address:ys(e,n,l)})),c}reservedSlotFor(t){const e=this.lockSocs?.find(e=>s.Binary.equals(e.address,t));if(e)return e.partition;const n=ye(t),r=this.reservedUtilizationChunks?.get(n);return void 0!==r?r:this.intentSoc?.addressHex===n?this.intentSoc.slot:void 0}requireLiveLease(){if(this.leaseStale||void 0!==this.partition&&this.leaseLocallyLapsed())throw new vs}assignSlot(t){const e=this.reservedSlotFor(t);if(void 0!==e)return e;this.requireLiveLease();const n=Es(t),r=Hs(this.partition??0,this.utilizationState.dataCounters[n],this.partitionCountValue);if(r>=this.maxSlot)throw new Error("Bucket is full");return this.utilizationState.dataCounters[n]++,this.dirtyBuckets.add(n),this.dirty=!0,r}stamp(t,e){return Ce(this.signer,this.batchId,t,this.assignSlot(t),e)}stampDataChunk(t,e){if(void 0!==this.reservedSlotFor(t))throw new Ss;const n=Es(t);if(this.utilizationState.dataCounters[n]>=this.appSliceCapacity())throw new ks;return this.stamp(t,e)}isOwnDataSlot(t,e){if(void 0!==this.reservedSlotFor(t))return!1;const n=this.partitionCountValue,r=e-Hs(this.partition??0,0,n);if(r<0||r%n!==0)return!1;return r/n<this.utilizationState.dataCounters[Es(t)]}restampDataChunk(t,e,n){if(void 0!==this.reservedSlotFor(t))throw new Ss;if(this.requireLiveLease(),!this.isOwnDataSlot(t,e))throw new Error(`Slot ${e} is not a slot this device took in this chunk's bucket.`);return Ce(this.signer,this.batchId,t,e,n)}laneCapacity(){return js(this.depth,this.partitionCountValue)}appSliceCapacity(){return Math.floor(.5*this.laneCapacity())}getState(){return this.buckets}async flush(){if(!this.dirty)return;const t=new Set;for(const e of this.dirtyBuckets){const n=$s(e,this.depth);t.add(n),this.utilizationState.chunks[n].dirty=!0}try{const e=Rs(this.utilizationState);for(const t of this.lockSocs??[])e.add(Es(t.address));for(const t of this.protectedStateBuckets.get(this.partition??0)??[])e.add(t);const n=Array.from(t).sort((t,e)=>t-e);for(const t of n){const n=Ds(this.utilizationState.dataCounters,t,this.depth),r=await Ms({swarmEncryptionKey:this.encryptionKey,batchId:this.batchId,chunkIndex:t,plaintext:n,priorNonce:this.utilizationState.chunks[t].nonce,claimedBuckets:e}),i=s.Binary.uint8ArrayToHex(r.address);await this.cache.putChunk({batchId:this.batchId.toHex(),chunkIndex:t,data:n,contentHash:i,nonce:r.nonce,lastAccess:Date.now()}),this.utilizationState.chunks[t].contentHash=i,this.utilizationState.chunks[t].nonce=r.nonce,this.utilizationState.chunks[t].dirty=!1}this.utilizationState.lastSync=Date.now()}catch(t){throw console.error("[UtilizationAwareStamper] Failed to flush to cache:",t),t}this.dirtyBuckets.clear(),this.dirty=!1}getUtilizationState(){return this.utilizationState}applyUtilizationUpdate(t){for(const{index:e,value:n}of t)e>=0&&e<xs&&n>this.utilizationState.dataCounters[e]&&(this.utilizationState.dataCounters[e]=n)}buildLeaseLocalCounter(){return this.utilizationState.dataCounters.slice()}async getSyncedReference(t){const e=await this.cache.getMetadata(this.batchId.toHex());return e?.syncedReferences?.[t]}async setSyncedReference(t,e){const n=this.batchId.toHex(),r=await this.cache.getMetadata(n);await this.cache.putMetadata({batchId:n,lastSync:r?.lastSync??Date.now(),chunkCount:r?.chunkCount??0,syncedReferences:{...r?.syncedReferences??{},[t]:e},stateChunkBuckets:r?.stateChunkBuckets})}getBucketUpdatesForBroadcast(){return Array.from(this.dirtyBuckets).map(t=>({index:t,value:this.utilizationState.dataCounters[t]}))}}const Vs=t=>{const e=de(fe()).safeParse(t);if(!e.success)return console.error("Parse failed:",e.error.format()),[];const n=[];for(const t of e.data)try{const e=Be.safeParse(t);if(!e.success){console.error("Skipping invalid account record:",e.error.format());continue}n.push(e.data)}catch(t){console.error("Skipping invalid account record:",t)}return n.map(t=>!De(t)&&void 0===t.partitionCount&&t.devices.length>0?{...t,partitionCount:2}:t)};function Js(t){return{id:t.id.toString(),name:t.name,createdAt:t.createdAt,derivationKey:t.derivationKey,publicKey:t.publicKey,defaultPostageStampBatchID:t.defaultPostageStampBatchID?.toString(),devices:t.devices,connectedApps:t.connectedApps.map(t=>_s(Ys(t))),postageStamps:t.postageStamps.map(Qs),settings:t.settings,accountNameAt:t.accountNameAt,defaultStampAt:t.defaultStampAt,settingsAt:t.settingsAt,lastModified:t.lastModified,partitionCount:t.partitionCount}}function Zs(t){return De(t)?{id:t.id.toString(),name:t.name,createdAt:t.createdAt,access:t.access,encryptedSeed:t.encryptedSeed,encryptedState:t.encryptedState,storageWarning:t.storageWarning,soonestDriveExpiry:t.soonestDriveExpiry,signedOutAt:t.signedOutAt}:{...Js(t),connectedApps:t.connectedApps.map(Ys),access:t.access,encryptedSeed:t.encryptedSeed}}function Ys(t){return{appUrl:t.appUrl,appName:t.appName,lastConnectedAt:t.lastConnectedAt,appIcon:t.appIcon,appDescription:t.appDescription,connectedUntil:t.connectedUntil,appSecret:t.appSecret,postageStampBatchID:t.postageStampBatchID?.toString(),postageStampBatchIDAt:t.postageStampBatchIDAt,revokedAt:t.revokedAt,disconnectedAt:t.disconnectedAt,chatBinding:t.chatBinding}}function _s(t){const{appSecret:e,connectedUntil:n,...r}=t;return r}function Qs(t){return{batchID:t.batchID.toString(),signerKey:t.signerKey.toString(),name:t.name,nameUpdatedAt:t.nameUpdatedAt,utilization:t.utilization,usable:t.usable,depth:t.depth,amount:t.amount.toString(),bucketDepth:t.bucketDepth,blockNumber:t.blockNumber,immutableFlag:t.immutableFlag,exists:t.exists,batchTTL:t.batchTTL,createdAt:t.createdAt,updatedAt:t.updatedAt,deletedAt:t.deletedAt}}function Xs(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)}function ta(t){return Array.isArray(t)?t.filter(Xs):[]}function ea(t){return void 0===t.signedOutAt}function na(t){return ea(t)?[t.derivationKey,...ta(t.connectedApps).map(t=>t.appSecret),...ta(t.postageStamps).map(t=>t.signerKey)].filter(t=>void 0!==t):[]}function ra(t){if(!ea(t))return t;const e=t=>qi(t)?Wi(t):void 0;if(na(t).some(t=>void 0===e(t)))return function(t){return{id:t.id,name:t.name,createdAt:t.createdAt,access:t.access,encryptedSeed:t.encryptedSeed,signedOutAt:Date.now()}}(t);const n=t=>void 0===t?void 0:e(t);return{...t,derivationKey:n(t.derivationKey),connectedApps:ta(t.connectedApps).map(t=>void 0===t.appSecret?t:{...t,appSecret:n(t.appSecret)}),postageStamps:ta(t.postageStamps).map(t=>({...t,signerKey:n(t.signerKey)}))}}async function ia(t,e){const n=e.get(t.id),r=void 0!==n&&function(t){return na(t).some(t=>qi(t)&&Hi(t))}(n);if(!ea(t))return r?n:t;if(r&&await async function(){return(await Ti()).standsIn}())throw new Error("This page cannot keep keys for a later visit, and the stored keys may still open on one");return async function(t,e){const n=async t=>"string"==typeof t?e(t):t;return{...t,derivationKey:await n(t.derivationKey),connectedApps:await Promise.all(ta(t.connectedApps).map(async t=>void 0===t.appSecret?t:{...t,appSecret:await n(t.appSecret)})),postageStamps:await Promise.all(ta(t.postageStamps).map(async t=>({...t,signerKey:await n(t.signerKey)})))}}(t,Li)}const sa={seal:(t,e)=>{const n=new Map(ta(e).map(t=>[t.id,t]));return Promise.all(t.map(t=>ia(t,n)))},open:t=>Array.isArray(t)?t.map(t=>Xs(t)?ra(t):t):t,prime:t=>ji(ta(t).flatMap(na).filter(t=>qi(t)))};function aa(){return t={key:$e,currentVersion:1,parsers:{1:Vs},serializer:Zs,loggerName:"AccountsStorage",sealing:sa},new Ii({...t,storage:new Si});var t}function oa(){return{load(){if("undefined"==typeof localStorage)return;const t=localStorage.getItem(Pe);if(t)try{return function(t){const e=Ee.safeParse(t);if(e.success)return e.data;console.error("[NetworkSettingsStorage] Parse failed:",e.error.format())}(JSON.parse(t))}catch(t){return void console.error("[NetworkSettingsStorage] Failed to parse stored data:",t)}},save(t){if("undefined"==typeof localStorage)return void console.warn("[NetworkSettingsStorage] localStorage not available");const e=function(t){return{beeNodeUrl:t.beeNodeUrl,gnosisRpcUrl:t.gnosisRpcUrl}}(t);localStorage.setItem(Pe,JSON.stringify(e))},clear(){"undefined"!=typeof localStorage&&localStorage.removeItem(Pe)}}}function ca(t,e,n){return{version:1,timestamp:n,accountId:e,metadata:{accountName:t.name,defaultPostageStampBatchID:t.defaultPostageStampBatchID?.toHex(),publicKey:t.publicKey,settings:t.settings,accountNameAt:t.accountNameAt??t.createdAt,defaultStampAt:t.defaultStampAt??t.createdAt,settingsAt:t.settingsAt??t.createdAt,createdAt:t.createdAt,lastModified:n,devices:t.devices,partitionCount:t.partitionCount??1},connectedApps:t.connectedApps,postageStamps:t.postageStamps}}function da(t){return ua(ca(t,t.id.toHex(),Date.now()))}function ua(t){const e={version:1,timestamp:(n=t).timestamp,accountId:n.accountId,metadata:{accountName:n.metadata.accountName,defaultPostageStampBatchID:n.metadata.defaultPostageStampBatchID,publicKey:n.metadata.publicKey,settings:n.metadata.settings,accountNameAt:n.metadata.accountNameAt,defaultStampAt:n.metadata.defaultStampAt,settingsAt:n.metadata.settingsAt,createdAt:n.metadata.createdAt,lastModified:n.metadata.lastModified,devices:n.metadata.devices,partitionCount:n.metadata.partitionCount},connectedApps:n.connectedApps.map(Ys),postageStamps:n.postageStamps.map(Qs)};var n;return{...e,connectedApps:e.connectedApps.map(t=>{const{chatBinding:e,...n}=_s(t);return n})}}function la(t,e){const n=new Map(e.map(t=>[t.appUrl,t]));return t.map(t=>{if(t.revokedAt)return t;const e=n.get(t.appUrl);return e?void 0!==t.disconnectedAt&&t.disconnectedAt>e.lastConnectedAt?t:{...t,appSecret:e.appSecret??t.appSecret,connectedUntil:e.connectedUntil??t.connectedUntil}:t})}async function ha(t){return{topic:await Ae(t,"swarm-id/account-bus/topic/v1"),encryptionKey:await Te(t,"swarm-id/account-bus/encryption/v1")}}const pa=2e4;class fa{constructor(){this.seen=new Map}observe(t,e,n){const r=this.seen.get(t)??{at:e,peers:new Set};r.at=e,void 0!==n&&r.peers.add(n),this.seen.set(t,r)}forgetPeer(t){for(const[e,n]of this.seen)n.peers.delete(t)&&0===n.peers.size&&this.seen.delete(e)}liveDeviceIds(t){const e=t-18e4;return[...this.seen].filter(([,t])=>t.at>=e).map(([t])=>t)}clear(){this.seen.clear()}}he("type",[ae({type:ce("join"),topic:ue()}),ae({type:ce("relay"),to:ue(),payload:ue()}),ae({type:ce("signal"),to:ue(),payload:fe()})]);const ya=he("type",[ae({type:ce("welcome"),peerId:ue(),peers:de(ue())}),ae({type:ce("peer-joined"),peerId:ue()}),ae({type:ce("peer-left"),peerId:ue()}),ae({type:ce("relay"),from:ue(),payload:ue()}),ae({type:ce("signal"),from:ue(),payload:fe()})]);async function wa(t,e){const n=crypto.getRandomValues(new Uint8Array(12)),r=(new TextEncoder).encode(t),i=await crypto.subtle.encrypt({name:"AES-GCM",iv:n},e,r),s=new Uint8Array(n.length+i.byteLength);return s.set(n,0),s.set(new Uint8Array(i),n.length),function(t){let e="";for(const n of t)e+=String.fromCharCode(n);return btoa(e)}(s)}async function ga(t,e){const n=function(t){const e=atob(t),n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t);return n}(t),r=n.slice(0,12),i=n.slice(12),s=await crypto.subtle.decrypt({name:"AES-GCM",iv:r},e,i);return(new TextDecoder).decode(s)}const ma=he("kind",[ae({kind:ce("offer"),sdp:ue()}),ae({kind:ce("answer"),sdp:ue()}),ae({kind:ce("ice"),candidate:fe()})]);function ba(){return{remoteDescriptionSet:!1,pendingCandidates:[]}}class va{constructor(t){this.local=!1,this.peers=new Map,this.handlers=new Set,this.peerLeftHandlers=new Set,this.closed=!1,this.reconnectDelayMs=1e3,this.pendingDeliveries=new Set,this.options=t,this.connect()}get peerCount(){return this.peers.size}publish(t){const e=this.deliver(t).catch(t=>{console.error("[SignalingTransport] Publish failed:",t)});this.pendingDeliveries.add(e),e.finally(()=>this.pendingDeliveries.delete(e))}subscribe(t){return this.handlers.add(t),()=>this.handlers.delete(t)}onPeerLeft(t){return this.peerLeftHandlers.add(t),()=>this.peerLeftHandlers.delete(t)}close(){this.closed=!0,void 0!==this.reconnectTimer&&clearTimeout(this.reconnectTimer),0!==this.pendingDeliveries.size?Promise.allSettled([...this.pendingDeliveries]).then(()=>this.shutdown()):this.shutdown()}shutdown(){this.handlers.clear(),this.peerLeftHandlers.clear();for(const t of this.peers.values())t.connection?.close();this.peers.clear(),this.socket?.close()}connect(){const t=new WebSocket(this.options.url);this.socket=t,t.addEventListener("open",()=>{this.sendToServer({type:"join",topic:this.options.topic})}),t.addEventListener("message",t=>{this.reconnectDelayMs=1e3,this.handleServerMessage(String(t.data))}),t.addEventListener("close",t=>{if(1008===t.code)return console.error("[SignalingTransport] Signaling server rejected the topic; not reconnecting."),void(this.closed=!0);this.scheduleReconnect()}),t.addEventListener("error",()=>{})}scheduleReconnect(){if(this.closed)return;for(const t of this.peers.values())t.connection?.close();this.peers.clear();const t=this.reconnectDelayMs/2+Math.random()*(this.reconnectDelayMs/2);this.reconnectTimer=setTimeout(()=>this.connect(),t),this.reconnectDelayMs=Math.min(2*this.reconnectDelayMs,3e4)}async deliver(t){if(0===this.peers.size)return;const e=await wa(JSON.stringify(t),this.options.encryptionKey);for(const[t,n]of this.peers){if("open"===n.dataChannel?.readyState)try{n.dataChannel.send(e);continue}catch(t){console.warn("[SignalingTransport] DataChannel send failed; relaying:",t)}this.sendToServer({type:"relay",to:t,payload:e})}}sendToServer(t){this.socket?.readyState===WebSocket.OPEN&&this.socket.send(JSON.stringify(t))}async handleServerMessage(t){let e;try{e=JSON.parse(t)}catch{return}const n=ya.safeParse(e);if(!n.success)return;const r=n.data;switch(r.type){case"welcome":for(const t of r.peers)this.peers.set(t,ba()),this.initiatePeerConnection(t);return;case"peer-joined":return void this.peers.set(r.peerId,{remoteDescriptionSet:!1,pendingCandidates:[]});case"peer-left":{const t=this.peers.get(r.peerId);t?.connection?.close(),this.peers.delete(r.peerId);for(const t of this.peerLeftHandlers)t(r.peerId);return}case"relay":return void await this.receiveEnvelope(r.payload,r.from);case"signal":return void await this.handleSignal(r.from,r.payload)}}async receiveEnvelope(t,e){let n,r;try{n=await ga(t,this.options.encryptionKey)}catch{return}try{r=JSON.parse(n)}catch{return}for(const t of this.handlers)t(r,e)}async initiatePeerConnection(t){const e=this.options.createPeerConnection;if(e)try{const n=e(),r=this.peers.get(t);if(!r)return;this.adoptConnection(r,n),this.adoptDataChannel(n.createDataChannel("bus"),r,t),this.forwardIceCandidates(n,t);const i=await n.createOffer();await n.setLocalDescription(i),this.sendSignal(t,{kind:"offer",sdp:i.sdp??""})}catch(t){console.error("[SignalingTransport] WebRTC initiate failed:",t)}}async handleSignal(t,e){const n=this.options.createPeerConnection;if(!n)return;const r=ma.safeParse(e);if(!r.success)return;const i=r.data,s=this.peers.get(t);if(s)try{if("offer"===i.kind){const e=n();this.adoptConnection(s,e),e.ondatachannel=e=>{this.adoptDataChannel(e.channel,s,t)},this.forwardIceCandidates(e,t),await e.setRemoteDescription({type:"offer",sdp:i.sdp}),await this.flushPendingCandidates(s,e);const r=await e.createAnswer();return await e.setLocalDescription(r),void this.sendSignal(t,{kind:"answer",sdp:r.sdp??""})}if("answer"===i.kind){const t=s.connection;if(!t)return;return await t.setRemoteDescription({type:"answer",sdp:i.sdp}),void await this.flushPendingCandidates(s,t)}if(!s.remoteDescriptionSet)return void s.pendingCandidates.push(i.candidate);await(s.connection?.addIceCandidate(i.candidate))}catch(t){console.error("[SignalingTransport] WebRTC signal failed:",t)}}adoptConnection(t,e){t.connection?.close(),t.connection=e,t.remoteDescriptionSet=!1,t.pendingCandidates=[]}async flushPendingCandidates(t,e){if(t.connection!==e)return;t.remoteDescriptionSet=!0;const n=t.pendingCandidates;t.pendingCandidates=[];for(const t of n)try{await e.addIceCandidate(t)}catch(t){console.warn("[SignalingTransport] ICE candidate rejected:",t)}}adoptDataChannel(t,e,n){e.dataChannel=t,t.onmessage=t=>{this.receiveEnvelope(String(t.data),n)}}forwardIceCandidates(t,e){t.onicecandidate=t=>{t.candidate&&this.sendSignal(e,{kind:"ice",candidate:t.candidate.toJSON()})}}sendSignal(t,e){this.sendToServer({type:"signal",to:t,payload:e})}}class Sa{constructor(t=1e3){this.pendingUploads=new Map,this.defaultDelay=t}scheduleUpload(t,e,n,r){const i=r??this.defaultDelay,s=this.pendingUploads.get(t);s?.timerId&&(clearTimeout(s.timerId),s.promise.reject(new Error("Upload cancelled by new request")));const a=s?.tracker??e;if(s&&s.tracker!==e)for(const t of e.getDirtyChunks())a.markDirty(1024*t);return new Promise((e,r)=>{const s=setTimeout(async()=>{try{await n(),e()}catch(e){console.error(`[DebouncedUploader] Upload failed for batch ${t}:`,e),r(e instanceof Error?e:new Error(String(e)))}finally{this.pendingUploads.delete(t)}},i);this.pendingUploads.set(t,{tracker:a,timerId:s,uploadFn:n,promise:{resolve:e,reject:r}})})}async flush(t){const e=this.pendingUploads.get(t);if(e){e.timerId&&clearTimeout(e.timerId);try{await e.uploadFn()}finally{this.pendingUploads.delete(t)}}}async flushAll(){const t=Array.from(this.pendingUploads.keys());await Promise.all(t.map(t=>this.flush(t)))}cancel(t){const e=this.pendingUploads.get(t);e&&(e.timerId&&clearTimeout(e.timerId),this.pendingUploads.delete(t))}cancelAll(){for(const t of this.pendingUploads.values())t.timerId&&clearTimeout(t.timerId);this.pendingUploads.clear()}getPendingCount(){return this.pendingUploads.size}hasPending(t){return this.pendingUploads.has(t)}}const ka="AES-GCM",xa=6e5,Ia="swarm-id-seed-encryption-v1";function Aa(){const t=new Uint8Array(32);return crypto.getRandomValues(t),t}async function Ca(t,e){const n=new Uint8Array(12);crypto.getRandomValues(n);const r=await crypto.subtle.encrypt({name:ka,iv:n},e,t),i=new Uint8Array(12+r.byteLength);return i.set(n),i.set(new Uint8Array(r),12),ye(i)}async function Ua(t,e){const n=we(t),r=n.slice(0,12),i=n.slice(12),s=await crypto.subtle.decrypt({name:ka,iv:r},e,i);return new Uint8Array(s)}async function Pa(t,e,n){const r=await crypto.subtle.importKey("raw",t,"HKDF",!1,["deriveKey"]);return crypto.subtle.deriveKey({name:"HKDF",hash:"SHA-256",salt:e,info:(new TextEncoder).encode(n)},r,{name:ka,length:256},!1,["encrypt","decrypt"])}function Ea(t){return Pa(t,new Uint8Array,Ia)}function $a(t,e){return Pa(t,e,Ia)}async function Da(t,e,n=6e5){const r=await crypto.subtle.importKey("raw",(new TextEncoder).encode(t),"PBKDF2",!1,["deriveKey"]);return crypto.subtle.deriveKey({name:"PBKDF2",hash:"SHA-256",salt:e,iterations:n},r,{name:ka,length:256},!1,["encrypt","decrypt"])}const Ba=xa,Ta="chunks",Oa="metadata";class Ma{async open(){if(!this.db)return new Promise((t,e)=>{const n=indexedDB.open("swarm-utilization-store",4);n.onerror=()=>{e(new Error(`Failed to open IndexedDB: ${n.error}`))},n.onblocked=()=>{console.warn("[UtilizationStore] IndexedDB upgrade blocked by another open connection; waiting for it to close")},n.onsuccess=()=>{this.db=n.result,this.db.onversionchange=()=>{this.close()},t()},n.onupgradeneeded=t=>{const e=t.target.result;e.objectStoreNames.contains(Ta)&&e.deleteObjectStore(Ta),e.objectStoreNames.contains(Oa)&&e.deleteObjectStore(Oa);e.createObjectStore(Ta,{keyPath:["batchId","chunkIndex"]}).createIndex("batchId","batchId",{unique:!1}),e.createObjectStore(Oa,{keyPath:"batchId"})}})}async getChunk(t,e){return await this.open(),new Promise((n,r)=>{const i=this.db.transaction([Ta],"readonly").objectStore(Ta).get([t,e]);i.onsuccess=()=>{const r=i.result;r&&this.touchChunk(t,e).catch(t=>{console.warn("[UtilizationStore] Failed to update lastAccess:",t)}),n(r)},i.onerror=()=>{r(new Error(`Failed to get chunk: ${i.error}`))}})}async putChunk(t){return await this.open(),new Promise((e,n)=>{const r=this.db.transaction([Ta],"readwrite").objectStore(Ta),i={...t,lastAccess:Date.now()},s=r.put(i);s.onsuccess=()=>e(),s.onerror=()=>{n(new Error(`Failed to put chunk: ${s.error}`))}})}async getAllChunks(t){return await this.open(),new Promise((e,n)=>{const r=this.db.transaction([Ta],"readonly").objectStore(Ta).index("batchId").getAll(t);r.onsuccess=()=>{const t=r.result;t.sort((t,e)=>t.chunkIndex-e.chunkIndex),e(t)},r.onerror=()=>{n(new Error(`Failed to get all chunks: ${r.error}`))}})}async clearBatch(t){return await this.open(),new Promise((e,n)=>{const r=this.db.transaction([Ta,Oa],"readwrite"),i=r.objectStore(Ta),s=r.objectStore(Oa),a=i.index("batchId").openCursor(t);a.onsuccess=()=>{const t=a.result;t&&(t.delete(),t.continue())},s.delete(t),r.oncomplete=()=>e(),r.onerror=()=>{n(new Error(`Failed to clear batch: ${r.error}`))}})}async touchChunk(t,e){return await this.open(),new Promise((n,r)=>{const i=this.db.transaction([Ta],"readwrite"),s=i.objectStore(Ta),a=s.get([t,e]);a.onsuccess=()=>{const t=a.result;t&&(t.lastAccess=Date.now(),s.put(t))},i.oncomplete=()=>n(),i.onerror=()=>{r(new Error(`Failed to touch chunk: ${i.error}`))}})}async getMetadata(t){return await this.open(),new Promise((e,n)=>{const r=this.db.transaction([Oa],"readonly").objectStore(Oa).get(t);r.onsuccess=()=>e(r.result),r.onerror=()=>{n(new Error(`Failed to get metadata: ${r.error}`))}})}async putMetadata(t){return await this.open(),new Promise((e,n)=>{const r=this.db.transaction([Oa],"readwrite").objectStore(Oa).put(t);r.onsuccess=()=>e(),r.onerror=()=>{n(new Error(`Failed to put metadata: ${r.error}`))}})}close(){this.db&&(this.db.close(),this.db=void 0)}}function Ra(t){return t.publicKey().address().toHex().toLowerCase()}function Fa(t,e){!function(t){const e=qe+Le,n=qe+Ke;if(t.length<e||t.length>n)throw new ge("invalid-request",`Invalid chunk length: ${t.length} bytes (expected span plus payload, ${e} to ${n})`)}(t.data);const n=ke(t.data).toUint8Array();if("content"===t.kind)return{address:n};const r=new I("app"===t.signer?e.appSecret:t.signer.privateKey);if(e.internalOwners.has(Ra(r)))throw new ge("invalid-request","This single-owner chunk would be owned by one of the account's own keys, which never signs for an app.");const i=we(t.identifier),a=r.publicKey().address();return{address:s.Binary.keccak256(s.Binary.concatBytes(i,a.toUint8Array())),owner:a,signature:r.sign(s.Binary.concatBytes(i,n))}}function qa(t){return y(t).toHex()}const La=1/3,Ka=ae({count:le().int().nonnegative(),windowStart:le(),windowCount:le().int().nonnegative(),buckets:Ne(ue(),le().int().nonnegative())});function Na(t,e){return e>=t.windowStart&&e-t.windowStart<6e4}function Ha(t,e){return new ge("upload-unavailable",e,{reason:t})}function ja(t,e){return t.count>=1e4?Ha("app-stamp-count","This app has used its count limit of 10000 stamps on this stamp."):Na(t,e)&&t.windowCount>=60?Ha("app-stamp-rate","This app has reached its rate limit of 60 stamps per 60 seconds. Try again shortly."):void 0}function Wa(t,e){const n=ja(t,e.now);if(n)return n;const r=(i=e.laneCapacity,Math.floor(i*La));var i;return(t.buckets[e.bucket]??0)>=r?Ha("app-bucket-share",`This app has used its bucket share limit of ${r} stamps in this chunk's bucket.`):void 0}function za(t,e){const n=Na(t,e);return{...t,windowStart:n?t.windowStart:e,windowCount:n?t.windowCount+1:1}}function Ga(t,e,n){return{...za(t,n),count:t.count+1,buckets:{...t.buckets,[e]:(t.buckets[e]??0)+1}}}const Va=ae({slot:le().int().nonnegative(),timestampMs:le().int().nonnegative()}),Ja=ae({partition:le().int().nonnegative(),partitionCount:le().int().positive(),slots:Ne(ue(),Va)});function Za(t){return{partition:t.partition,partitionCount:t.partitionCount,slots:{}}}function Ya(t,e){if(null===t)return Za(e);try{const n=Ja.safeParse(JSON.parse(t));return n.success&&n.data.partition===e.partition&&n.data.partitionCount===e.partitionCount?n.data:Za(e)}catch{return Za(e)}}const _a="Stamp worker pool is terminated";class Qa{constructor(t,e,n){this.nextWorker=0,this.nextId=0,this.workers=t,this.size=t.length,this.issuer=e,this.stamper=n,this.batchId=n.batchId,this.assignSlot="assignSlot"in n?t=>n.assignSlot(t):t=>function(t,e){const n=e[0]<<8|e[1],r=t.buckets[n];if(r>=t.maxSlot)throw new Error("Bucket is full");return t.buckets[n]=r+1,r}(n,t)}static async create(t,e,n){const r=n??4,i=new Blob(['!function(){"use strict";var t,n={};var e=(t||(t=1,function(t){var n;async function e(t){return new Promise((n,e)=>t.then(e,n))}async function r(t){return new Promise(n=>setTimeout(()=>{n(!0)},t))}function i(t,n=Math.random){for(let e=t.length-1;e>0;e--){const r=Math.floor(n()*(e+1)),i=t[e];t[e]=t[r],t[r]=i}return t}function o(t,n,e=Math.random){return i(V(0,t.length-1),e).slice(0,n)}function s(t,n,e=Math.random){return Math.floor(e()*(n-t+1))+t}function u(t,n,e){return n>=t.x&&n<t.x+t.width&&e>=t.y&&e<t.y+t.height}function a(t,n=Math.random){return n()<t}function c(t,n=Math.random){return t[Math.floor(t.length*n())]}function l(t){if(!t.length)throw Error("Received empty array");return t[t.length-1]}function f(t,n,e){return e(n.reduce((t,n)=>n(t),t))}function h(t,n){if(null==t)return null;const e=n.split(".");let r=t;for(const t of e){if(null===r[t]||void 0===r[t])return null;r=r[t]}return r}function g(t,n,e){const r=n.split(/\\.|\\[/);let i=t;for(let t=0;t<r.length;t++){const n=r[t],o=t<r.length-1&&r[t+1].includes("]"),s=n.includes("]")?n.replace(/\\[|\\]/g,""):n;if(t===r.length-1)return i[s]=e,e;d(i[s])||(i[s]=o?[]:{}),i=i[s]}return e}function p(t,n){return Math.round(t/n)*n}function d(t,n=!0){return!(!t||n&&!w(t._readableState)||n&&t.constructor&&(t.constructor.isBuffer||"AbortController"==t.constructor.name||"AbortSignal"==t.constructor.name||"Uint8Array"==t.constructor.name||"ArrayBuffer"===t.constructor.name||"ReadableStream"===t.constructor.name))&&"object"==typeof t}function m(t){return d(t)&&!Array.isArray(t)}function y(t){return Array.isArray(t)&&0===t.length}function w(t){return void 0===t}function b(t){return"[object Function]"===Object.prototype.toString.call(t)||"[object AsyncFunction]"===Object.prototype.toString.call(t)}function x(t){return"[object String]"===Object.prototype.toString.call(t)}function $(t){return"number"==typeof t&&isFinite(t)}function v(t){return!0===t||!1===t}function E(t){return"[object Date]"===Object.prototype.toString.call(t)}function M(t){return!x(t)||0===t.trim().length}function A(t){return $(t)&&Number.isInteger(t)&&t>=1}function S(t){return x(t)&&null!==t.match(/^-?\\d+$/)}function k(t){return x(t)&&null!==t.match(/^(0x)?[0-9a-f]+$/i)}Object.defineProperty(t,"__esModule",{value:!0}),t.Vector=t.Cache=t.Assertions=t.Strings=t.Types=t.Objects=t.Dates=t.Promises=t.Numbers=t.System=t.Arrays=t.Random=t.Elliptic=t.Binary=t.Lock=t.Solver=t.RollingValueProvider=t.TrieRouter=t.AsyncQueue=t.PubSubChannel=t.FixedPointNumber=t.MerkleTree=t.Chunk=t.Uint8ArrayWriter=t.Uint8ArrayReader=t.AsyncLazy=t.Lazy=t.Optional=void 0;const O="!@#$%^&*()_+-=[]{}|;:<>?,./".split(""),T="abcdefghijklmnopqrstuvwxyz",B=T+"ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890",j=B+"!@#$%^&*()_+-=[]{}|;:<>?,./",C=["—","\\\\","東","京","都","𝖆","𝖇","𝖈","👾","🙇","💁","🙅","ᚠ","ᛇ","ᚻ","ᛦ"],D="0123456789abcdef";function I(t,n){if(M(t))throw new TypeError(`Expected string${n?.name?` for ${n.name}`:""}, got: `+t);if(n&&(void 0!==n.min&&t.length<n.min||void 0!==n.max&&t.length>n.max))throw RangeError(`Expected string${n?.name?` for ${n.name}`:""} length in range: ${n.min??"-inf"}..${n.max??"inf"}; got: ${t.length}`);return t}function U(t,n){if(void 0!==n.min&&t<n.min||void 0!==n.max&&t>n.max)throw RangeError(`Expected value${n?.name?` for ${n.name}`:""} in range: ${n.min??"-inf"}..${n.max??"inf"}; got: ${t}`)}function F(t,n){if($(t))return n&&U(t,n),t;if(!x(t)||!t.match(/^-?\\d+(\\.\\d+)?$/))throw new TypeError(`Expected number${n?.name?` for ${n.name}`:""}, got: `+t);const e=parseFloat(t);return n&&U(e,n),e}function N(t,n){return Math.trunc(F(t,n))}function P(t,n){if(!m(t))throw new TypeError(`Expected object${n?.name?` for ${n.name}`:""}, got: `+t);return t}function z(t){return x(t)&&null!==t.match(/^https?:\\/\\/.+/)}function L(t){return"bigint"==typeof t}function R(t,n){if(!L(t))throw new TypeError(`Expected bigint${n?.name?` for ${n.name}`:""}, got: `+t);if(void 0!==n?.min&&t<n?.min||void 0!==n?.max&&t>n?.max)throw RangeError(`Expected value${n?.name?` for ${n.name}`:""} in range: ${n.min??"-inf"}..${n.max??"inf"}; got: ${t}`);return t}function W(t,n){for(const[e,r]of Object.entries(n))if(!r(t[e]))throw TypeError(`${e} in value does not exist or match shape`);for(const e of Object.keys(t))if(!n[e])throw TypeError(`${e} exists in value but not in shape`);return!0}function q(t,n){if(m(t)&&m(n))for(const e in n)m(n[e])?(t[e]||(t[e]={}),q(t[e],n[e])):Array.isArray(n[e])?t[e]=[...n[e]]:(null!==n[e]&&void 0!==n[e]||null===t[e]||void 0===t[e])&&(t[e]=n[e]);return t}function H(t,n){const e={};for(const r of t)for(const t of Object.keys(r))e[t]?e[t]=n(e[t],r[t]):e[t]=r[t];return e}function K(t,n){Array.prototype.push.apply(t,n)}function V(t,n){const e=[];for(let r=t;r<=n;r++)e.push(r);return e}function J(t,n=()=>!1){return t.toLowerCase().normalize("NFD").replace(/[\\u0300-\\u036f]/g,"").split("").map(t=>/[a-z0-9]/.test(t)||n(t)?t:"-").join("").replace(/-+/g,"-").replace(/^-|-$/g,"")}function Z(t,n){if(0===n.length)return 0;const e=t.toLowerCase(),r=n.toLowerCase();return t===n?1e4:e.startsWith(r)?1e4-t.length:e.includes(r)?5e3-t.length:new RegExp(".*"+r.split("").join(".*")+".*").test(e)?1e3-t.length:0}const Q={"&amp;":"&","&quot;":\'"\',"&apos;":"\'","&gt;":">","&lt;":"<"};function _(t,n){const e=t.indexOf(n);return-1===e?null:t.slice(0,e)}function G(t,n){const e=t.indexOf(n);return-1===e?null:t.slice(e+n.length)}function X(t,n){const e=t.lastIndexOf(n);return-1===e?null:t.slice(0,e)}function Y(t,n){const e=t.lastIndexOf(n);return-1===e?null:t.slice(e+n.length)}function tt(t,n,e=!1){const r=e?t.lastIndexOf(n):t.indexOf(n);return-1===r?e?[null,t]:[t,null]:[t.slice(0,r),t.slice(r+n.length)]}function nt(t,n){let e=[t];for(const t of n)e=e.flatMap(n=>n.split(t));return e.filter(t=>t)}function et(t){const n=l(t.split(/\\\\|\\//g)),e=n.lastIndexOf(".",n.length-1);return e<=0?"":n.slice(e+1)}function rt(t){const n=l(t.split(/\\\\|\\//g)),e=n.lastIndexOf(".",n.length-1);return e<=0?n:n.slice(0,e)}function it(t){return t.split("\\n").map(t=>t.trim().replace(/\\s+/g," ")).filter(t=>t.length>0).join("\\n")}function ot(t){return t.charAt(0).toUpperCase()+t.slice(1)}function st(t){return t.charAt(0).toLowerCase()+t.slice(1)}function ut(t){if(!t)return!1;const n=t.charCodeAt(0);return n>=65&&n<=90||n>=97&&n<=122}function at(t){if(!t)return!1;const n=t.charCodeAt(0);return n>=48&&n<=57}function ct(t){return ut(t)||at(t)}const lt=" \\n\\t\\r.,?!:;\\"\'`(){}[]~@#$%^&*-+=|<>/\\\\".split("");function ft(t){return lt.includes(t)}function ht(t,n,e=0){const r=n.exec(t.slice(e));return r?{index:r.index,match:r[0]}:null}function gt(t,n,e=!0){if(!e)return n.every(n=>n instanceof RegExp?n.test(t):-1!==t.indexOf(n,0));let r=0;for(const e of n)if(e instanceof RegExp){const n=ht(t,e,r);if(!n)return!1;r=n.index+n.match.length}else{const n=t.indexOf(e,r);if(-1===n)return!1;r=n+e.length}return!0}function pt(t,n,e=0){const r=[];let i=t.indexOf(n,e);for(;-1!==i;)r.push(i),i=t.indexOf(n,i+n.length);return r}function dt(t,n,e=0){let r=-1;for(const i of n){const n=t.indexOf(i,e);-1!==n&&(-1===r||n<r)&&(r=n)}return r}function mt(t,n=0){for(let e=n;e<t.length;e++)if(ft(t[e]))return e;return-1}function yt(t,n=0){for(let e=n;e<t.length;e++)if("#"===t[e]&&ct(t[e+1]))return e;return-1}function wt(t,n,e=0){return t.slice(0,e).lastIndexOf(n)}function bt(t,n=0,e="{",r="}"){let i=1;for(let o=n;o<t.length;o++)if(t.slice(o,o+r.length)===r){if(0===--i)return o}else t.slice(o,o+e.length)===e&&i++;return-1}function xt(t,n){const e=n.wordBoundary?dt(t,[`${n.opening} `,`${n.opening}\\n`],n.start||0):t.indexOf(n.opening,n.start||0);if(-1===e)return null;const r=bt(t,e+n.opening.length,n.opening,n.closing);return-1===r?null:n.exclusive?t.slice(e+n.opening.length,r):t.slice(e,r+n.closing.length)}const $t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",vt="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";function Et(t,n){const e=n.length;let r=0,i=0;const o=[];for(let s=0;s<t.length;s++){const u=t[s];if("="===u)break;const a=n.indexOf(u);if(-1===a)throw new Error(`Invalid character: ${u}`);i=i<<Math.log2(e)|a,r+=Math.log2(e),r>=8&&(r-=8,o.push(i>>r&255))}return new Uint8Array(o)}function Mt(t,n){const e=n.length;let r=0,i=0,o="";for(let s=0;s<t.length;s++)for(i=i<<8|t[s],r+=8;r>=Math.log2(e);)r-=Math.log2(e),o+=n[i>>r&e-1];return r>0&&(o+=n[i<<Math.log2(e)-r&e-1]),o.length%4!=0&&(o+="=".repeat(4-o.length%4)),o}function At(t,n,e){const r=[];for(const i of e)i!==n&&r.push(t.replace(n,i));return r}function St(t){const n=t.lastIndexOf(" ");return-1===n?{line:t,rest:""}:{line:t.slice(0,n),rest:t.slice(n+1)}}function kt(t){const n=t.reduce((t,n)=>t.length<n.length?t:n);let e="";for(let r=0;r<n.length;r++){const i=n[r];if(!t.every(t=>t[r]===i))break;e+=i}return e}function Ot(t,n){return new RegExp(`\\\\b${n}\\\\b`).test(t)}function Tt(t,n,e=[]){let r="";for(;n<t.length&&(ct(t[n])||e.includes(t[n]));)r+=t[n++];return r}function Bt(t,n,e,r="$",i=":"){if(""===e)return t;let o=t.indexOf(`${r}${n}`);for(;-1!==o;){if(t[o+n.length+1]===i)if(t[o+n.length+2]===i)t=t.replace(`${r}${n}${i}${i}`,e);else{const s=Tt(t,o+n.length+2,["_"]);t=t.replace(`${r}${n}${i}${s}`,e)}else t=t.replace(`${r}${n}`,e);o=t.indexOf(`${r}${n}`,o+e.length)}return t}function jt(t,n="$",e=":"){let r=t.indexOf(n);for(;-1!==r;){const i=Tt(t,r+1);if(t[r+i.length+1]===e)if(t[r+i.length+2]===e)t=t.replace(`${n}${i}${e}${e}`,"");else{const o=Tt(t,r+i.length+2);t=t.replace(`${n}${i}${e}${o}`,o)}r=t.indexOf(n,r+1)}return t}function Ct(t,n=!0){const e=Object.entries(t).filter(([t,n])=>null!=n).map(([t,n])=>`${t}=${encodeURIComponent(n)}`).join("&");return e?(n?"?":"")+e:""}function Dt(t){return String(Math.floor(t)).padStart(2,"0")}function It(t){const n=Math.floor(t/36e5);t%=36e5;const e=Math.floor(t/6e4);t%=6e4;const r=Math.floor(t/1e3);return n?`${Dt(n)}:${Dt(e)}:${Dt(r)}`:`${Dt(e)}:${Dt(r)}`}function Ut(t){return Math.floor((E(t)?t.getTime():t)/864e5)}const Ft={today:(t,n)=>Dt(t)+":"+Dt(n),yesterday:()=>"Yesterday",monday:()=>"Mon",tuesday:()=>"Tue",wednesday:()=>"Wed",thursday:()=>"Thu",friday:()=>"Fri",saturday:()=>"Sat",sunday:()=>"Sun",weeks:t=>`${t}w`},Nt={now:()=>"A few seconds",seconds:t=>`${t} seconds`,minutes:t=>`${t} minutes`,hours:t=>`${t} hours`,days:t=>`${t} days`,weeks:t=>`${t} weeks`};function Pt(n,e){const r=e?.now??Date.now(),i=e?.labels||Nt;let o=(r-(t.Types.isDate(n)?n.getTime():n))/1e3;return o<10?i.now():o<120?i.seconds(Math.floor(o)):(o/=60,o<120?i.minutes(Math.floor(o)):(o/=60,o<48?i.hours(Math.floor(o)):(o/=24,o<14?i.days(Math.floor(o)):(o/=7,i.weeks(Math.floor(o))))))}const zt={},Lt={s:1e3,m:6e4,h:36e5,d:864e5},Rt={0:"sunday",1:"monday",2:"tuesday",3:"wednesday",4:"thursday",5:"friday",6:"saturday"};function Wt(t){return{zeroBasedIndex:t,day:Rt[t]}}function qt(t){return Wt(t.getDay())}const Ht={ms:1,milli:1,millis:1,millisecond:1,milliseconds:1,s:1e3,sec:1e3,second:1e3,seconds:1e3,m:6e4,min:6e4,minute:6e4,minutes:6e4,h:36e5,hour:36e5,hours:36e5,d:864e5,day:864e5,days:864e5,w:6048e5,week:6048e5,weeks:6048e5,month:2592e6,months:2592e6,y:31536e6,year:31536e6,years:31536e6},Kt={b:0,byte:0,bytes:0,kb:1,kilobyte:1,kilobytes:1,mb:2,megabyte:2,megabytes:2,gb:3,gigabyte:3,gigabytes:3,tb:4,terabyte:4,terabytes:4},Vt=new Map;function Jt(t,n=!1){t=t.filter(t=>t),n&&x(t[1])&&(t[1]="../"+t[1]);let e="";x(t[0])&&t[0].includes("://")&&(e=_(t[0],"://")??"",t[0]=G(t[0],"://")??"");const r=t.map(t=>String(t)).flatMap(t=>t.split("/")),i=[];for(let t=0;t<r.length;t++)"."!==r[t]&&(".."===r[t]?(!e||i.length>1)&&i.pop():i.push(r[t]));return(e?e+"://":"")+i.join("/").replaceAll(/\\/{2,}/g,"/")}function Zt(t){const n=Object.keys(t).sort((t,n)=>t.localeCompare(n)),e={};for(const r of n)e[r]=_t(t[r]);return e}function Qt(t){const n=[];return t.sort((t,n)=>JSON.stringify(_t(t)).localeCompare(JSON.stringify(_t(n)))).forEach(t=>n.push(_t(t))),n}function _t(t){return Array.isArray(t)?Qt(t):d(t)?Zt(t):t}function Gt(t,n){return JSON.stringify(_t(t))===JSON.stringify(_t(n))}function Xt(t){const n=Object.keys(t);return n[Math.floor(Math.random()*n.length)]}const Yt=[1e3,1e6,1e9,1e12,1e15,1e18,1e21,1e24,1e27,1e30,1e9,1e16,1e18,1e18,1e18,1e33],tn=["thousand","million","billion","trillion","quadrillion","quintillion","sextillion","septillion","octillion","nonillion","gwei","bzz","btc","eth","dai","decillion"],nn=["K","M","B","T","Qa","Qi","Sx","Sp","O","N","gwei","bzz","eth","btc","dai","D"];function en(t){const n=parseFloat(t);if(isNaN(n))throw Error("makeNumber got NaN for input");const e=t.replace(/^-?[0-9.]+/,"").trim(),r=nn.findIndex(t=>t.toLowerCase()===e.toLowerCase());return-1===r?n:n*Yt[r]}function rn(t,n,e){return t<n?n:t>e?e:t}function on(t,n,e){return t+(e?"["+n+"]":(t.length?".":"")+n)}function sn(t,n,e,r,i){if(!d(n))return n;for(const[o,s]of Object.entries(n)){const n=on(e,o,r);Array.isArray(s)?i?sn(t,s,n,!0,i):t[n]=s.map(t=>sn(Array.isArray(t)?[]:{},t,"",!1,i)):d(s)?sn(t,s,n,!1,i):t[n]=s}return t}function un(t,n){const e={};for(const r of t)e[n(r)]=r;return e}function an(t,n){const e=Math.ceil(t.length/n),r=[];for(let n=0;n<t.length;n+=e)r.push(t.slice(n,n+e));return r}function cn(t,n){const e=[],r=Math.ceil(t.length/n);for(let i=0;i<r;i++)e.push(t.slice(i*n,i*n+n));return e}function ln(t,n){return Object.fromEntries(Object.entries(t).sort(n))}function fn(t,n){const e=[];let r=[];return t.forEach((i,o)=>{(0===o||!n(i,t[o-1]))&&(r=[],e.push(r)),r.push(i)}),e}function hn(t,n,e,r=100){if(t.map.has(n)){const e=t.keys.indexOf(n);t.keys.splice(e,1)}if(t.map.set(n,e),t.keys.push(n),t.keys.length>r){const n=t.keys.shift();n&&t.map.delete(n)}}class gn{constructor(t){this.value=t}static of(t){return new gn(t)}static empty(){return new gn(null)}map(t){return new gn(null!==this.value&&void 0!==this.value?t(this.value):null)}mapAsync(t){return null!==this.value&&void 0!==this.value?t(this.value).then(t=>gn.of(t)):Promise.resolve(gn.empty())}ifPresent(t){return null!==this.value&&void 0!==this.value&&t(this.value),this}ifPresentAsync(t){return null!==this.value&&void 0!==this.value?t(this.value).then(()=>this):Promise.resolve(this)}ifAbsent(t){return(null===this.value||void 0===this.value)&&t(),this}ifAbsentAsync(t){return null===this.value||void 0===this.value?t().then(()=>this):Promise.resolve(this)}getOrFallback(t){return this.value??t()}getOrFallbackAsync(t){return null!==this.value&&void 0!==this.value?Promise.resolve(this.value):t()}getOrThrow(){if(null===this.value||void 0===this.value)throw Error("Optional.value is empty");return this.value}}t.Optional=gn,t.Lazy=class{constructor(t){this.supplier=t,this.value=null}get(){return this.value||(this.value=this.supplier()),this.value}},t.AsyncLazy=class{constructor(t){this.supplier=t,this.value=null}async get(){return this.value||(this.value=await this.supplier()),this.value}};class pn{constructor(t){this.value=t,this.children=[]}}function dn(t,n){if(Math.log2(t.length)%1!=0)throw new Error("Array length must be a power of 2");let e=[...t];for(;e.length>1;){const t=[];for(let r=0;r<e.length;r+=2){const i=e[r+1];t.push(n(e[r],i))}e=t}return e[0]}function mn(...t){const n=t.reduce((t,n)=>t+n.length,0),e=new Uint8Array(n);let r=0;return t.forEach(t=>{e.set(t,r),r+=t.length}),e}function yn(t){return 137===t[0]&&80===t[1]&&78===t[2]&&71===t[3]}function wn(t){return 255===t[0]&&216===t[1]}function bn(t){return 87===t[8]&&69===t[9]&&66===t[10]&&80===t[11]}function xn(t,n){const e=new ArrayBuffer(8);return new DataView(e).setBigUint64(0,BigInt(t),"LE"===n),new Uint8Array(e)}function $n(t,n){const e=new Uint8Array(32);let r=t;if("LE"===n){for(let t=0;t<32;t++)e[t]=Number(0xffn&r),r>>=8n;return e}for(let t=31;t>=0;t--)e[t]=Number(0xffn&r),r>>=8n;return e}function vn(t,n){let e=0n;if("LE"===n){for(let n=31;n>=0;n--)e=e<<8n|BigInt(t[n]);return e}for(let n=0;n<32;n++)e=e<<8n|BigInt(t[n]);return e}function En(t,n){const e=[];for(let r=0;r<t.length;r+=n)e.push(t.subarray(r,r+n));return e}const Mn=[0,1,0,32898,2147483648,32906,2147483648,2147516416,0,32907,0,2147483649,2147483648,2147516545,2147483648,32777,0,138,0,136,0,2147516425,0,2147483658,0,2147516555,2147483648,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,0,32778,2147483648,2147483658,2147483648,2147516545,2147483648,32896,0,2147483649,2147483648,2147516424];function An(t){for(let n=0;n<24;n++){const e=t[0]^t[10]^t[20]^t[30]^t[40],r=t[1]^t[11]^t[21]^t[31]^t[41],i=t[2]^t[12]^t[22]^t[32]^t[42],o=t[3]^t[13]^t[23]^t[33]^t[43],s=t[4]^t[14]^t[24]^t[34]^t[44],u=t[5]^t[15]^t[25]^t[35]^t[45],a=t[6]^t[16]^t[26]^t[36]^t[46],c=t[7]^t[17]^t[27]^t[37]^t[47],l=t[8]^t[18]^t[28]^t[38]^t[48],f=t[9]^t[19]^t[29]^t[39]^t[49],h=l^(i<<1|o>>>31),g=f^(o<<1|i>>>31),p=e^(s<<1|u>>>31),d=r^(u<<1|s>>>31),m=i^(a<<1|c>>>31),y=o^(c<<1|a>>>31),w=s^(l<<1|f>>>31),b=u^(f<<1|l>>>31),x=a^(e<<1|r>>>31),$=c^(r<<1|e>>>31);t[0]^=h,t[1]^=g,t[2]^=p,t[3]^=d,t[4]^=m,t[5]^=y,t[6]^=w,t[7]^=b,t[8]^=x,t[9]^=$,t[10]^=h,t[11]^=g,t[12]^=p,t[13]^=d,t[14]^=m,t[15]^=y,t[16]^=w,t[17]^=b,t[18]^=x,t[19]^=$,t[20]^=h,t[21]^=g,t[22]^=p,t[23]^=d,t[24]^=m,t[25]^=y,t[26]^=w,t[27]^=b,t[28]^=x,t[29]^=$,t[30]^=h,t[31]^=g,t[32]^=p,t[33]^=d,t[34]^=m,t[35]^=y,t[36]^=w,t[37]^=b,t[38]^=x,t[39]^=$,t[40]^=h,t[41]^=g,t[42]^=p,t[43]^=d,t[44]^=m,t[45]^=y,t[46]^=w,t[47]^=b,t[48]^=x,t[49]^=$;const v=t[0],E=t[1],M=t[2]<<1|t[3]>>>31,A=t[3]<<1|t[2]>>>31,S=t[5]<<30|t[4]>>>2,k=t[4]<<30|t[5]>>>2,O=t[6]<<28|t[7]>>>4,T=t[7]<<28|t[6]>>>4,B=t[8]<<27|t[9]>>>5,j=t[9]<<27|t[8]>>>5,C=t[11]<<4|t[10]>>>28,D=t[10]<<4|t[11]>>>28,I=t[13]<<12|t[12]>>>20,U=t[12]<<12|t[13]>>>20,F=t[14]<<6|t[15]>>>26,N=t[15]<<6|t[14]>>>26,P=t[17]<<23|t[16]>>>9,z=t[16]<<23|t[17]>>>9,L=t[18]<<20|t[19]>>>12,R=t[19]<<20|t[18]>>>12,W=t[20]<<3|t[21]>>>29,q=t[21]<<3|t[20]>>>29,H=t[22]<<10|t[23]>>>22,K=t[23]<<10|t[22]>>>22,V=t[25]<<11|t[24]>>>21,J=t[24]<<11|t[25]>>>21,Z=t[26]<<25|t[27]>>>7,Q=t[27]<<25|t[26]>>>7,_=t[29]<<7|t[28]>>>25,G=t[28]<<7|t[29]>>>25,X=t[31]<<9|t[30]>>>23,Y=t[30]<<9|t[31]>>>23,tt=t[33]<<13|t[32]>>>19,nt=t[32]<<13|t[33]>>>19,et=t[34]<<15|t[35]>>>17,rt=t[35]<<15|t[34]>>>17,it=t[36]<<21|t[37]>>>11,ot=t[37]<<21|t[36]>>>11,st=t[38]<<8|t[39]>>>24,ut=t[39]<<8|t[38]>>>24,at=t[40]<<18|t[41]>>>14,ct=t[41]<<18|t[40]>>>14,lt=t[42]<<2|t[43]>>>30,ft=t[43]<<2|t[42]>>>30,ht=t[45]<<29|t[44]>>>3,gt=t[44]<<29|t[45]>>>3,pt=t[47]<<24|t[46]>>>8,dt=t[46]<<24|t[47]>>>8,mt=t[48]<<14|t[49]>>>18,yt=t[49]<<14|t[48]>>>18;t[0]=v^~I&V,t[1]=E^~U&J,t[2]=I^~V&it,t[3]=U^~J&ot,t[4]=V^~it&mt,t[5]=J^~ot&yt,t[6]=it^~mt&v,t[7]=ot^~yt&E,t[8]=mt^~v&I,t[9]=yt^~E&U,t[10]=O^~L&W,t[11]=T^~R&q,t[12]=L^~W&tt,t[13]=R^~q&nt,t[14]=W^~tt&ht,t[15]=q^~nt&gt,t[16]=tt^~ht&O,t[17]=nt^~gt&T,t[18]=ht^~O&L,t[19]=gt^~T&R,t[20]=M^~F&Z,t[21]=A^~N&Q,t[22]=F^~Z&st,t[23]=N^~Q&ut,t[24]=Z^~st&at,t[25]=Q^~ut&ct,t[26]=st^~at&M,t[27]=ut^~ct&A,t[28]=at^~M&F,t[29]=ct^~A&N,t[30]=B^~C&H,t[31]=j^~D&K,t[32]=C^~H&et,t[33]=D^~K&rt,t[34]=H^~et&pt,t[35]=K^~rt&dt,t[36]=et^~pt&B,t[37]=rt^~dt&j,t[38]=pt^~B&C,t[39]=dt^~j&D,t[40]=S^~P&_,t[41]=k^~z&G,t[42]=P^~_&X,t[43]=z^~G&Y,t[44]=_^~X&lt,t[45]=G^~Y&ft,t[46]=X^~lt&S,t[47]=Y^~ft&k,t[48]=lt^~S&P,t[49]=ft^~k&z,t[0]^=Mn[2*n],t[1]^=Mn[2*n+1]}}function Sn(t){const n=[];for(let e=0;e<t.length;e+=4)n.push(t[e]|t[e+1]<<8|t[e+2]<<16|t[e+3]<<24);return n}function kn(t,n){if(!t.length){const t=new Uint8Array(136);return t[0]=n,t[135]=128,[Sn(t)]}const e=En(t,136),r=e[e.length-1];if(r.length<136){const t=new Uint8Array(136);t.set(r),t[r.length]=n,t[135]|=128,e[e.length-1]=t}if(136===r.length){const t=new Uint8Array(136);t[0]=n,t[135]=128,e.push(t)}return e.map(Sn)}function On(t,n){for(const e of n){for(let n=0;n<34;n+=2)t[n]^=e[n+1],t[n+1]^=e[n];An(t)}return t}function Tn(t){return new Uint8Array([t[1],t[1]>>-24,t[1]>>-16,t[1]>>-8,t[0],t[0]>>8,t[0]>>16,t[0]>>24,t[3],t[3]>>-24,t[3]>>-16,t[3]>>-8,t[2],t[2]>>8,t[2]>>16,t[2]>>24,t[5],t[5]>>-24,t[5]>>-16,t[5]>>-8,t[4],t[4]>>8,t[4]>>16,t[4]>>24,t[7],t[7]>>-24,t[7]>>-16,t[7]>>-8,t[6],t[6]>>8,t[6]>>16,t[6]>>24])}function Bn(t){return Tn(On(new Array(50).fill(0),kn(t,1)))}function jn(t,n,e=0){if(t.length>=n)return t;const r=new Uint8Array(n);return r.fill(e),r.set(t,n-t.length),r}function Cn(t,n,e=0){if(t.length>=n)return t;const r=new Uint8Array(n);return r.fill(e),r.set(t,0),r}function Dn(t,n){return(t%n+n)%n}function In(t,n){t=Dn(t,n);let[e,r]=[0n,1n],[i,o]=[n,t];for(;0n!==o;){const t=i/o;[e,r]=[r,e-t*r],[i,o]=[o,i-t*o]}if(i>1n)throw new Error("a is not invertible");return e<0n&&(e+=n),e}function Un(t,n){return 0n===Dn(t,n)?0n:n%4n==3n?function(t,n,e){let r=1n;for(t=Dn(t,e);n>0;)n%2n==1n&&(r=Dn(r*t,e)),t=Dn(t*t,e),n/=2n;return r}(t,(n+1n)/4n,n):null}const Fn=0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2fn,Nn=0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n,Pn=0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798n,zn=0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8n;function Ln(t,n,e){if(0n===n)return[0n,0n];const r=Dn(3n*t*t*In(2n*n,e),e),i=Dn(r*r-2n*t,e);return[i,Dn(r*(t-i)-n,e)]}function Rn(t,n,e,r,i){if(0n===t&&0n===n)return[e,r];if(0n===e&&0n===r)return[t,n];if(t===e&&n===Dn(-r,i))return[0n,0n];if(t===e&&n===r)return Ln(t,n,i);const o=Dn((r-n)*In(e-t,i),i),s=Dn(o*o-t-e,i);return[s,Dn(o*(t-s)-n,i)]}function Wn(t,n,e,r){let i=[0n,0n],o=[t,n];const s=e.toString(2);for(const t of s)"0"===t?(o=Rn(i[0],i[1],o[0],o[1],r),i=Ln(i[0],i[1],r)):(i=Rn(i[0],i[1],o[0],o[1],r),o=Ln(o[0],o[1],r));return i}function qn(t,n,e){if(n<=0n||n>=Nn)throw new Error("Invalid private key");if(e||(e=Dn(vn(Bn(mn(Bn($n(n,"BE")),$n(t,"BE"))),"BE"),Nn)),e<=0n||e>=Nn)throw new Error("Invalid nonce");const r=Dn(t,Nn),i=Wn(Pn,zn,e,Fn),o=Dn(i[0],Nn);let s=Dn((r+Dn(o,Nn)*n)*In(e,Nn),Nn);if(0n===o||0n===s)throw new Error("Invalid r or s value");let u=i[1]%2n==0n?27n:28n;return s>Nn/2n&&(s=Nn-s,u=27n===u?28n:27n),[o,s,u]}class Hn{constructor(t){this.cursor=0,this.buffer=t}read(t){const n=this.buffer.subarray(this.cursor,this.cursor+t);return this.cursor+=t,n}max(){return this.buffer.length-this.cursor}}t.Uint8ArrayReader=Hn;class Kn{constructor(t){this.buffer=t,this.cursor=0}write(t){const n=Math.min(this.max(),t.max());return this.buffer.set(t.read(n),this.cursor),this.cursor+=n,n}max(){return this.buffer.length-this.cursor}}t.Uint8ArrayWriter=Kn;class Vn{constructor(t,n=0n){this.span=n,this.writer=new Kn(new Uint8Array(t))}build(){return mn(xn(this.span,"LE"),this.writer.buffer)}hash(){const t=dn(En(this.writer.buffer,32),(t,n)=>Vn.hashFunction(mn(t,n)));return Vn.hashFunction(mn(xn(this.span,"LE"),t))}}t.Chunk=Vn,Vn.hashFunction=Bn;class Jn{constructor(t,n=4096){this.counters=[1],this.capacity=n,this.chunks=[new Vn(n)],this.onChunk=t}static async root(t,e=4096){const r=new n(n.NOOP,e);return await r.append(t),r.finalize()}async append(t,n=0,e=0n){const r=new Hn(t);for(;r.max()>0;){0===this.chunks[n].writer.max()&&await this.elevate(n);const t=this.chunks[n].writer.write(r);e?this.chunks[n].span+=e:this.chunks[0].span+=BigInt(t)}}async elevate(t){this.counters[t]=++this.counters[t]%(this.capacity/32),this.chunks[t+1]||(this.chunks.push(new Vn(this.capacity)),this.counters.push(1)),await this.append(this.chunks[t].hash(),t+1,this.chunks[t].span),await this.onChunk(this.chunks[t]),this.chunks[t]=new Vn(this.capacity)}async finalize(t=0){return this.chunks[t+1]?1===this.counters[t]?(await this.elevate(t+1),this.chunks[t+1]=this.chunks[t],this.finalize(t+1)):(await this.elevate(t),this.finalize(t+1)):(await this.onChunk(this.chunks[t]),this.chunks[t])}}t.MerkleTree=Jn,n=Jn,Jn.NOOP=async t=>{};class Zn{constructor(t,n){if(n<0)throw Error("Scale must be non-negative");this.value=BigInt(t),this.scale=n}static cast(t){if(!t)throw Error("Cannot cast falsy value to FixedPointNumber");if(t instanceof Zn)return t;const n=R(t.value),e=F(t.scale);return new Zn(n,e)}static fromDecimalString(t,n){/e\\-\\d+$/i.test(t)&&(t=parseFloat(t).toFixed(n));let[e,r]=t.split(".");return r=(r||"").padEnd(n,"0").slice(0,n),new Zn(BigInt(e+r),n)}static fromFloat(t,n){return Zn.fromDecimalString(t.toString(),n)}add(t){return this.assertSameScale(t),new Zn(this.value+t.value,this.scale)}subtract(t){return this.assertSameScale(t),new Zn(this.value-t.value,this.scale)}multiply(t){return new Zn(this.value*t,this.scale)}divmod(t){if(0n===t)throw new Error("Division by zero is not allowed");const n=this.value/t,e=this.value%t;return[new Zn(n,this.scale),new Zn(e,this.scale)]}exchange(t,n,e){if("*"===t){const t=this.value*n.value/10n**BigInt(this.scale);return new Zn(t,e)}this.assertSameScale(n);const r=this.value*10n**BigInt(e)/n.value;return new Zn(r,e)}compare(t){return this.assertSameScale(t),this.value>t.value?1:this.value<t.value?-1:0}toDecimalString(){if(0===this.scale)return this.value.toString();const t=this.value.toString();return`${t.slice(0,-this.scale)||"0"}.${t.slice(-this.scale).padStart(this.scale,"0")}`}toString(){return this.value.toString()}toJSON(){return this.toString()}toFloat(){return parseFloat(this.toDecimalString())}assertSameScale(t){if(this.scale!==t.scale)throw new Error(`Scale mismatch: expected ${this.scale}, but got ${t.scale}`)}}function Qn(t,n,e,r){const i=t.findIndex(t=>t===`--${n}`||t.startsWith(`--${n}=`)),o=t[i];if(!o)return(e||{})[r||n||""]||null;if(o.includes("="))return o.split("=")[1];const s=t[i+1];return s&&!s.startsWith("-")?s:(e||{})[r||n||""]||null}function _n(t,n,e,r){const i=Qn(t,n,e,r);if(!i)throw new Error(`Missing argument ${n}`);return i}function Gn(t,n){const e=t[n];t.splice(n,1),t.unshift(e)}function Xn(t,n){return{x:t.x+n.x,y:t.y+n.y}}function Yn(t,n){return{x:t.x*n,y:t.y*n}}function te(t,n,e){return{x:t.x+Math.cos(n)*e,y:t.y+Math.sin(n)*e}}function ne(t,n){return Math.sqrt((t.x-n.x)**2+(t.y-n.y)**2)}function ee(t,n,e="row-first"){const r=[];if("column-first"===e)for(let e=0;e<t.length;e++)for(let i=0;i<t[0].length;i++)n(e,i)&&r.push({x:e,y:i});else for(let e=0;e<t[0].length;e++)for(let i=0;i<t.length;i++)n(i,e)&&r.push({x:i,y:e});return r}function re(t,n,e){return!t[n-1]?.[e]}function ie(t,n,e){return!t[n+1]?.[e]}function oe(t,n,e){return!t[n][e-1]}function se(t,n,e){return!t[n][e+1]}function ue(t,n,e){const r=[];return t[n][e]?function(t,n,e){return t[n+1]?.[e]&&t[n-1]?.[e]&&!t[n][e-1]&&!t[n][e+1]}(t,n,e)||function(t,n,e){return t[n][e+1]&&t[n][e-1]&&!t[n-1]?.[e]&&!t[n+1]?.[e]}(t,n,e)?[]:(!t[n-1]?.[e-1]&&re(t,n,e)&&oe(t,n,e)&&r.push({x:n,y:e}),!t[n+1]?.[e-1]&&ie(t,n,e)&&oe(t,n,e)&&r.push({x:n+1,y:e}),!t[n-1]?.[e+1]&&re(t,n,e)&&se(t,n,e)&&r.push({x:n,y:e+1}),!t[n+1]?.[e+1]&&ie(t,n,e)&&se(t,n,e)&&r.push({x:n+1,y:e+1}),r):(t[n-1]?.[e]&&t[n][e-1]&&r.push({x:n,y:e}),t[n+1]?.[e]&&t[n][e-1]&&r.push({x:n+1,y:e}),t[n-1]?.[e]&&t[n][e+1]&&r.push({x:n,y:e+1}),t[n+1]?.[e]&&t[n][e+1]&&r.push({x:n+1,y:e+1}),r)}function ae(t,n){return n.map(n=>function(t,n){return Math.atan2(n.y-t.y,n.x-t.x)}(t,n)).sort((t,n)=>t-n)}function ce(t,n,e,r){const i=(r.y-e.y)*(n.x-t.x)-(r.x-e.x)*(n.y-t.y);if(0===i)return null;let o=t.y-e.y,s=t.x-e.x;const u=(r.x-e.x)*o-(r.y-e.y)*s,a=(n.x-t.x)*o-(n.y-t.y)*s;return o=u/i,s=a/i,o>0&&o<1&&s>0&&s<1?{x:t.x+o*(n.x-t.x),y:t.y+o*(n.y-t.y)}:null}function le(t,n,e){const r=[],i=te(t,e,1e4);for(const e of n){const n=ce(t,i,e.start,e.end);n&&r.push(n)}return r.length?r.reduce((n,e)=>ne(t,e)<ne(t,n)?e:n):null}t.FixedPointNumber=Zn;class fe{constructor(){this.subscribers=[]}subscribe(t){return this.subscribers.push(t),()=>{this.subscribers=this.subscribers.filter(n=>n!==t)}}publish(t){this.subscribers.forEach(n=>n(t))}clear(){this.subscribers=[]}getSubscriberCount(){return this.subscribers.length}}t.PubSubChannel=fe,t.AsyncQueue=class{constructor(t,n){this.queue=[],this.running=0,this.onProcessed=new fe,this.onDrained=new fe,this.concurrency=t,this.capacity=n}process(){if(this.running>=this.concurrency)return;const t=this.queue.shift();t&&(this.running++,t().finally(()=>{this.running--,this.process(),this.onProcessed.publish(),0===this.running&&this.onDrained.publish()}))}enqueue(t){if(this.queue.length<this.capacity)return this.queue.push(t),this.process(),Promise.resolve();if(this.onProcessed.getSubscriberCount())throw Error("Queue capacity is full");return new Promise(n=>{this.onProcessed.subscribe(()=>{this.queue.length<this.capacity&&(this.queue.push(t),this.process(),this.onProcessed.clear(),n())})})}drain(){if(0===this.running)return Promise.resolve();if(this.onDrained.getSubscriberCount())throw Error("Already draining");return new Promise(t=>{this.onDrained.subscribe(()=>{this.onDrained.clear(),t()})})}};class he{constructor(){this.forks=new Map}insert(t,n){if(0===t.length)return void(this.handler=n);const e=t[0];let r,i=e;if(e.startsWith(":")&&(i=":",r=e.slice(1)),!this.forks.has(i)){const t=new he;r&&(t.variableName=r),this.forks.set(i,t)}this.forks.get(i).insert(t.slice(1),n)}async handle(t,n,e,r){if(0===t.length)return!!this.handler&&(await this.handler(n,e,r),!0);const i=t[0],o=this.forks.get(i);if(o)return o.handle(t.slice(1),n,e,r);const s=this.forks.get(":");if(s)return s.variableName&&r.set(s.variableName,decodeURIComponent(i)),s.handle(t.slice(1),n,e,r);const u=this.forks.get("*");return!!u&&(r.set("wildcard",t.join("/")),!!u.handler&&(await u.handler(n,e,r),!0))}}t.TrieRouter=he,t.RollingValueProvider=class{constructor(t){this.index=0,this.values=t}current(){return this.values[this.index]}next(){return this.index=(this.index+1)%this.values.length,this.values[this.index]}},t.Solver=class{constructor(){this.status="pending",this.steps=[],this.onStatusChange=async()=>{},this.onStepChange=async()=>{},this.onFinish=async()=>{},this.onError=async()=>{},this.context=new Map}getStatus(){return this.status}createInitialState(){return Object.fromEntries(this.steps.map(t=>[t.name,"pending"]))}setHooks(t){t.onStatusChange&&(this.onStatusChange=t.onStatusChange),t.onStepChange&&(this.onStepChange=t.onStepChange),t.onFinish&&(this.onFinish=t.onFinish),t.onError&&(this.onError=t.onError)}addStep(t){if(this.steps.find(n=>n.name===t.name))throw Error(`Step with name ${t.name} already exists`);this.steps.push(t)}async execute(){if("pending"!==this.status)throw Error(`Cannot execute solver in status ${this.status}`);this.status="in-progress",await this.onStatusChange(this.status);let t=this.createInitialState();for(const n of this.steps)try{if(n.transientSkipStepName){const e=t[n.transientSkipStepName];if("skipped"===e||"failed"===e){t={...t,[n.name]:"skipped"},await this.onStepChange(t);continue}}if(n.precondition&&!await n.precondition(this.context)){t={...t,[n.name]:"skipped"},await this.onStepChange(t);continue}t={...t,[n.name]:"in-progress"},await this.onStepChange(t);for(let t=0;"retry"===await n.action(this.context,t);t++);t={...t,[n.name]:"completed"},await this.onStepChange(t)}catch(e){throw t={...t,[n.name]:"failed"},this.status="failed",await this.onStatusChange(this.status),await this.onStepChange(t),await this.onError(e),e}return this.status="completed",await this.onStatusChange(this.status),await this.onFinish(),this.context}},t.Lock=class{constructor(t){this.queryFunction=t.queryFunction,this.lockFunction=t.lockFunction,this.unlockFunction=t.unlockFunction,this.timeoutMillis=t.timeoutMillis}async couldLock(){const t=await this.queryFunction();try{const n=N(t);if(Date.now()<n+this.timeoutMillis)return new Date(n+this.timeoutMillis)}catch{}return await this.lockFunction(Date.now().toString()),!0}async unlock(){await this.unlockFunction()}},t.Binary={hexToUint8Array:function(t){(t.startsWith("0x")||t.startsWith("0X"))&&(t=t.slice(2));const n=t.length/2,e=new Uint8Array(n);for(let r=0;r<n;r++){const n=parseInt(t.slice(2*r,2*r+2),16);e[r]=n}return e},uint8ArrayToHex:function(t){return Array.from(t).map(t=>t.toString(16).padStart(2,"0")).join("")},binaryToUint8Array:function(t){const n=Math.ceil(t.length/8),e=new Uint8Array(n);for(let r=0;r<n;r++){const n=parseInt(t.slice(8*r,8*r+8),2);e[r]=n}return e},uint8ArrayToBinary:function(t){return Array.from(t).map(t=>t.toString(2).padStart(8,"0")).join("")},base64ToUint8Array:function(t){return Et(t,$t)},uint8ArrayToBase64:function(t){return Mt(t,$t)},base32ToUint8Array:function(t){return Et(t,vt)},uint8ArrayToBase32:function(t){return Mt(t,vt)},log2Reduce:dn,partition:En,concatBytes:mn,numberToUint8:function(t){return new Uint8Array([t])},uint8ToNumber:function(t){return t[0]},numberToUint16:function(t,n){const e=new ArrayBuffer(2);return new DataView(e).setUint16(0,t,"LE"===n),new Uint8Array(e)},uint16ToNumber:function(t,n){return new DataView(t.buffer).getUint16(t.byteOffset,"LE"===n)},numberToUint32:function(t,n){const e=new ArrayBuffer(4);return new DataView(e).setUint32(0,t,"LE"===n),new Uint8Array(e)},uint32ToNumber:function(t,n){return new DataView(t.buffer).getUint32(t.byteOffset,"LE"===n)},numberToUint64:xn,uint64ToNumber:function(t,n){return new DataView(t.buffer).getBigUint64(t.byteOffset,"LE"===n)},numberToUint256:$n,uint256ToNumber:vn,sliceBytes:function(t,n){const e=[];let r=0;for(const i of n)e.push(t.subarray(r,r+i)),r+=i;return e},keccak256:Bn,sha3_256:function(t){return Tn(On(new Array(50).fill(0),kn(t,6)))},proximity:function(t,n){const e=Math.min(t.length,n.length);for(let r=0;r<e;r++){const e=t[r]^n[r];for(let t=0;t<8;t++)if(e>>7-t&1)return 8*r+t}return 8*Math.min(t.length,n.length)},commonPrefix:function(t,n){const e=Math.min(t.length,n.length);for(let r=0;r<e;r++)if(t[r]!==n[r])return t.subarray(0,r);return t.subarray(0,e)},setBit:function(t,n,e,r){const i=Math.floor(n/8),o=n%8;1===e?t[i]|=1<<("BE"===r?7-o:o):t[i]&=~(1<<("BE"===r?7-o:o))},getBit:function(t,n,e){const r=n%8;return t[Math.floor(n/8)]>>("BE"===e?7-r:r)&1},indexOf:function(t,n,e=0){for(let r=e;r<t.length;r++)for(let e=0;e<n.length&&t[r+e]===n[e];e++)if(e===n.length-1)return r;return-1},equals:function(t,n){if(t.length!==n.length)return!1;for(let e=0;e<t.length;e++)if(t[e]!==n[e])return!1;return!0},padStart:jn,padStartToMultiple:function(t,n,e=0){const r=t.length%n;return 0===r?t:jn(t,t.length+n-r,e)},padEnd:Cn,padEndToMultiple:function(t,n,e=0){const r=t.length%n;return 0===r?t:Cn(t,t.length+n-r,e)},xorCypher:function(t,n){const e=new Uint8Array(t.length);for(let r=0;r<t.length;r++)e[r]=t[r]^n[r%n.length];return e},isUtf8:function(t){for(let n=0;n<t.length;n++){const e=t[n];if(!(e<128))if(192==(224&e)){if(n+1>=t.length||128!=(192&t[n+1]))return!1;n+=1}else if(224==(240&e)){if(n+2>=t.length||128!=(192&t[n+1])||128!=(192&t[n+2]))return!1;n+=2}else{if(240!=(248&e))return!1;if(n+3>=t.length||128!=(192&t[n+1])||128!=(192&t[n+2])||128!=(192&t[n+3]))return!1;n+=3}}return!0}},t.Elliptic={privateKeyToPublicKey:function(t){if(t<=0n||t>=Nn)throw new Error("Invalid private key");return Wn(Pn,zn,t,Fn)},compressPublicKey:function(t){const n=t[1]%2n==0n?2:3;return new Uint8Array([n,...$n(t[0],"BE")])},publicKeyFromCompressed:function(t){if(33!==t.length||2!==t[0]&&3!==t[0])throw new Error("Invalid compressed public key");const n=vn(t.slice(1),"BE"),e=Un(Dn(n**3n+7n,Fn),Fn);if(!e)throw Error("Invalid x: does not correspond to a valid curve point");const r=Dn(-e,Fn),i=e%2n==0n;return[n,2===t[0]?i?e:r:i?r:e]},publicKeyToAddress:function(t){const n=new Uint8Array(20),e=Bn(mn($n(t[0],"BE"),$n(t[1],"BE")));return n.set(e.subarray(12)),n},signMessage:function(t,n,e){return qn(vn(Bn(t),"BE"),n,e)},signHash:qn,verifySignature:function(t,n,e,r){const i=Dn(vn(Bn(t),"BE"),Nn),o=In(r,Nn),s=Dn(i*o,Nn),u=Dn(e*o,Nn),a=Wn(Pn,zn,s,Fn),c=Wn(n[0],n[1],u,Fn);return e===Dn(Rn(a[0],a[1],c[0],c[1],Fn)[0],Nn)},recoverPublicKey:function(t,n,e,r){const i=Un(Dn(n**3n+7n,Fn),Fn);if(!i)throw new Error("Invalid r: does not correspond to a valid curve point");const o=i%2n==(27n===r?0n:1n)?i:Fn-i,s=Dn(vn(Bn(t),"BE"),Nn),u=Wn(n,o,e,Fn),a=Wn(Pn,zn,s,Fn),c=Rn(u[0],u[1],a[0],Dn(-a[1],Fn),Fn);return Wn(c[0],c[1],In(n,Nn),Fn)},checksumEncode:function(n){const e=t.Binary.uint8ArrayToHex(n),r=t.Binary.uint8ArrayToHex(t.Binary.keccak256(new Uint8Array([...e].map(t=>t.charCodeAt(0)))));let i="0x";for(let t=0;t<e.length;t++)parseInt(r[t],16)>7?i+=e[t].toUpperCase():i+=e[t];return i}},t.Random={intBetween:s,floatBetween:function(t,n,e=Math.random){return e()*(n-t)+t},chance:a,signed:function(){return 2*Math.random()-1},makeSeededRng:function(t){let n=t,e=3405648695,r=3735928559;return function(){return n+=e,e^=n<<7,n*=r,r^=n<<13,n^=e^r,(n>>>0)/4294967296}},point:function(t,n,e,r=Math.random){let i,o;do{i=s(0,t-1,r),o=s(0,n-1,r)}while(e&&u(e,i,o));return[i,o]},procs:function(t,n=Math.random){const e=Math.floor(t);return a(t-e,n)?e+1:e}},t.Arrays={countUnique:function(t,n,e,r,i){const o=n?t.map(n):t,s={};for(const t of o)s[t]=(s[t]||0)+1;const u=r?ln(s,i?(t,n)=>t[1]-n[1]:(t,n)=>n[1]-t[1]):s;return e?Object.keys(u):u},makeUnique:function(t,n){return Object.values(un(t,n))},splitBySize:function(t,n){const e=[];for(let r=0;r<t.length;r+=n)e.push(t.slice(r,r+n));return e},splitByCount:an,index:un,indexCollection:function(t,n){const e={};for(const r of t){const t=n(r);e[t]||(e[t]=[]),e[t].push(r)}return e},onlyOrThrow:function(t){if(1===t.length)return t[0];throw Error(`Expected exactly one element, actual: ${t.length}`)},onlyOrNull:function(t){return 1===t.length?t[0]:null},firstOrThrow:function(t){if(!t.length)throw Error("Received empty array");return t[0]},firstOrNull:function(t){return t.length>0?t[0]:null},shuffle:i,initialize:function(t,n){const e=[];for(let r=0;r<t;r++)e.push(n(r));return e},initialize2D:function(t,n,e){const r=[];for(let i=0;i<t;i++){r.push([]);for(let t=0;t<n;t++)r[i].push(e)}return r},rotate2D:function(t){const n=[];for(let e=0;e<t[0].length;e++){n.push([]);for(let r=0;r<t.length;r++)n[e].push(t[r][e])}return n},containsShape:function(t,n,e,r){if(e<0||r<0||r+n[0].length>t[0].length||e+n.length>t.length)return!1;for(let i=0;i<n.length;i++)for(let o=0;o<n[i].length;o++)if(void 0!==n[i][o]&&t[e+i][r+o]!==n[i][o])return!1;return!0},glue:function(t,n){const e=[];for(let r=0;r<t.length;r++)e.push(t[r]),r<t.length-1&&(b(n)?e.push(n()):e.push(n));return e},pluck:function(t,n){return t.map(t=>t[n])},pick:c,pickMany:function(t,n,e=Math.random){if(n>t.length)throw new Error(`Count (${n}) is greater than array length (${t.length})`);return o(t,n,e).map(n=>t[n])},pickManyUnique:function(t,n,e,r=Math.random){if(n>t.length)throw new Error(`Count (${n}) is greater than array length (${t.length})`);const i=[];for(;i.length<n;){const n=c(t,r);i.some(t=>e(t,n))||i.push(n)}return i},pickWeighted:function(t,n,e){if(void 0===e&&(e=Math.random()),t.length!==n.length)throw new Error("Array length mismatch");let r=n.reduce((t,n)=>t+n,0);const i=e*r;for(let e=0;e<t.length-1;e++)if(r-=n[e],i>=r)return t[e];return l(t)},pickRandomIndices:o,pickGuaranteed:function(n,e,r,o,s,u=Math.random){const a=n.filter(t=>t!==e&&t!==r),c=[];for(null!==e&&c.push(e);a.length&&c.length<o;){const n=t.Random.intBetween(0,a.length-1,u);s(a[n],c)&&c.push(a[n]),a.splice(n,1)}return i(c,u),{values:c,indexOfGuaranteed:null!==e?c.indexOf(e):-1}},last:l,pipe:f,makePipe:function(t,n){return e=>f(e,t,n)},sortWeighted:function(t,n,e=Math.random){const r=n.map(t=>e()*t),i=[];for(let n=0;n<t.length;n++)i.push([t[n],r[n]]);return i.sort((t,n)=>n[1]-t[1]).map(t=>t[0])},pushAll:K,unshiftAll:function(t,n){Array.prototype.unshift.apply(t,n)},filterAndRemove:function(t,n){const e=[];for(let r=t.length-1;r>=0;r--)n(t[r])&&e.push(t.splice(r,1)[0]);return e},merge:function(t,n){const e=Object.keys(n);for(const r of e)Array.isArray(n[r])&&Array.isArray(t[r])&&K(t[r],n[r])},empty:function(t){return t.splice(0,t.length),t},pushToBucket:function(t,n,e){t[n]||(t[n]=[]),t[n].push(e)},unshiftAndLimit:function(t,n,e){for(t.unshift(n);t.length>e;)t.pop()},atRolling:function(t,n){let e=n%t.length;return e<0&&(e+=t.length),t[e]},group:fn,createOscillator:function(t){let n=0;return{next:()=>t[n++%t.length]}},organiseWithLimits:function(t,n,e,r,i){const o={};for(const t of Object.keys(n))o[t]=[];o[r]=[],i&&(t=t.sort(i));for(const i of t){const t=i[e],s=n[t]?t:r;o[s].length>=n[s]?o[r].push(i):o[s].push(i)}return o},tickPlaybook:function(t){if(0===t.length)return null;const n=t[0];return n.ttlMax?--n.ttl<=0&&t.shift():n.ttlMax=n.ttl,{progress:(n.ttlMax-n.ttl)/n.ttlMax,data:n.data}},getArgument:Qn,getBooleanArgument:function(t,n,e,r){const i=t.some(t=>t.endsWith("-"+n)),o=Qn(t,n,e,r);if(!o&&i)return!0;if(!o&&!i)return null;if(["true","1","yes","y","on"].includes(o.toLowerCase()))return!0;if(["false","0","no","n","off"].includes(o.toLowerCase()))return!1;throw Error(`Invalid boolean argument ${n}: ${o}`)},getNumberArgument:function(t,n,e,r){const i=Qn(t,n,e,r);if(!i)return null;try{return en(i)}catch{throw new Error(`Invalid number argument ${n}: ${i}`)}},requireStringArgument:_n,requireNumberArgument:function(t,n,e,r){const i=_n(t,n,e,r);try{return en(i)}catch{throw new Error(`Invalid argument ${n}: ${i}`)}},bringToFront:function(t,n){const e=[...t];return Gn(e,n),e},bringToFrontInPlace:Gn,findInstance:function(t,n){const e=t.find(t=>t instanceof n);return gn.of(e)},filterInstances:function(t,n){return t.filter(t=>t instanceof n)},interleave:function(t,n){const e=[],r=Math.max(t.length,n.length);for(let i=0;i<r;i++)t[i]&&e.push(t[i]),n[i]&&e.push(n[i]);return e},toggle:function(t,n){return t.includes(n)?t.filter(t=>t!==n):[...t,n]},createHierarchy:function(t,n,e,r,i=!1){const o=new Map,s=[];t.forEach(t=>{const e=new pn(t);o.set(t[n],e)}),t.forEach(t=>{const r=o.get(t[n]);if(!r)return;const i=t[e];if(i){const t=o.get(i);t&&t.children.push(r)}else s.push(r)});const u=t=>{t.children.sort((t,n)=>{const e=t.value[r],o=n.value[r];return i?o-e:e-o}),t.children.forEach(u)};return s.forEach(u),s},multicall:function(t){return()=>t.forEach(t=>t())},maxBy:function(t,n){return t.reduce((t,e)=>n(t)>n(e)?t:e)},minBy:function(t,n){return t.reduce((t,e)=>n(t)<n(e)?t:e)},allIndexOf:function(t,n){const e=[];return t.forEach((t,r)=>{n(t)&&e.push(r)}),e}},t.System={sleepMillis:r,forever:async function(t,n,e){for(;;){try{await t()}catch(t){e&&e("Error in forever",t)}await r(n)}},scheduleMany:function(t,n){for(let e=0;e<t.length;e++){const r=t[e],i=n[e],o=Math.max(0,i.getTime()-Date.now());setTimeout(r,o)}},waitFor:async function(t,n){let e=n.requiredConsecutivePasses||1,i=0;for(let o=0;o<n.attempts;o++){try{if(await t()){if(i++,i>=e)return}else i=0}catch{i=0}o<n.attempts-1&&await r(n.waitMillis)}throw Error("Timed out waiting for predicate")},expandError:function(t,n){if(x(t))return t;const e=Object.keys(t);t.message&&!e.includes("message")&&e.push("message");const r=e.map(n=>`${n}: ${t[n]}`).join("; ");return n&&t.stack?r+"\\n"+t.stack:r},runAndSetInterval:function(t,n){t();const e=setInterval(()=>{t()},n);return()=>clearInterval(e)},whereAmI:function(){const t=globalThis.process;return t?!0===t.browser?"browser":"node":"browser"},withRetries:async function(t,n,e,i,o,s){let u=null;for(let a=0;a<=n;a++)try{return await t()}catch(t){if(u=t,a===n)break;const c=e+a/(n-1)*(i-e);o&&o("Error in withRetries, retrying",{attempt:a+1,allowedFailures:n,delayMillis:c,error:t}),s&&s(),await r(c)}throw u}},t.Numbers={make:en,sum:function(t){return t.reduce((t,n)=>t+n,0)},average:function(t){return t.reduce((t,n)=>t+n,0)/t.length},median:function(t){const n=[...t].sort((t,n)=>t-n),e=Math.floor(n.length/2);return n.length%2==0?(n[e]+n[e-1])/2:n[e]},getDistanceFromMidpoint:function(t,n){return t-(n-1)/2},clamp:rn,range:V,interpolate:function(t,n,e){return t+(n-t)*e},createSequence:function(){let t=0;return{next:()=>t++}},increment:function(t,n,e){const r=t+n;return r>e?e:r},decrement:function(t,n,e){const r=t-n;return r<e?e:r},format:function(t,n){const e=n?.longForm??!1,r=n?.unit?` ${n.unit}`:"",i=e?tn:nn,o=n?.precision??1;if(t<Yt[0])return`${t}${r}`;for(let n=0;n<Yt.length-1;n++)if(t<Yt[n+1])return`${(t/Yt[n]).toFixed(o)}${e?" ":""}${i[n]}${r}`;return`${(t/Yt[Yt.length-1]).toFixed(o)}${e?" ":""}${i[Yt.length-1]}${r}`},fromDecimals:function(t,n,e){let r=t.length-n;if(r<=0)return"0."+"0".repeat(-r)+t+(e?" "+e:"");let i=t.substring(0,r);return""===i&&(i="0"),i+"."+t.substring(r)+(e?" "+e:"")},makeStorage:function(t,n=1024){const e=parseFloat(t);if(isNaN(e))throw Error("makeStorage got NaN for input");const r=t.replace(/^-?[0-9.]+/,"").trim().toLowerCase(),i=""===r?0:Kt[r];if(null==i)throw Error(`Unknown unit: "${r}"`);return Math.ceil(e*n**i)},asMegabytes:function(t){return t/1024/1024},convertBytes:function(t,n=1024){return t>=n*n*n*n?(t/n/n/n/n).toFixed(3)+" TB":t>=n*n*n?(t/n/n/n).toFixed(3)+" GB":t>=n*n?(t/n/n).toFixed(3)+" MB":t>=n?(t/n).toFixed(3)+" KB":t+" B"},hexToRgb:function(t){const n=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(t.toLowerCase());if(!n)throw new Error("Invalid hex color: "+t);return[parseInt(n[1],16),parseInt(n[2],16),parseInt(n[3],16)]},rgbToHex:function(t){return"#"+t.map(t=>t.toString(16).padStart(2,"0")).join("")},haversineDistanceToMeters:function(t,n,e,r){const i=t*Math.PI/180,o=e*Math.PI/180,s=(e-t)*Math.PI/180,u=(r-n)*Math.PI/180,a=Math.sin(s/2)*Math.sin(s/2)+Math.cos(i)*Math.cos(o)*Math.sin(u/2)*Math.sin(u/2);return 2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a))*6371e3},roundToNearest:p,formatDistance:function(t){return t>1e3?(t/1e3).toFixed(0)+" km":t>=500?p(t,100)+" m":t>=100?p(t,50)+" m":p(t,10)+" m"},triangularNumber:function(t){return t*(t+1)/2},searchFloat:function(t){const n=t.match(/-?\\d+(\\.\\d+)?/);if(!n)throw Error("No float found in "+t);return parseFloat(n[0])},binomialSample:function(t,n,e=Math.random){const r=t*n,i=Math.sqrt(t*n*(1-n)),o=(e()+e()+e()+e()+e()+e()-3)*Math.SQRT2,s=Math.round(r+i*o);return Math.max(0,Math.min(t,s))},toSignificantDigits:function(t,n){if(!t.includes("."))return t;if(0===parseFloat(t))return"0";const[e,r]=t.split("."),i=e.replace("-",""),o=i.length;if(o>=n)return e;if("0"!==i){const t=n-o,i=r.slice(0,t);return/[1-9]/.test(i)?`${e}.${i.replace(/0+$/,"")}`:e}const s=n+(r.match(/^0*/)?.[0].length??0);return`${e}.${r.slice(0,s)}`}},t.Promises={raceFulfilled:async function(t){return e(Promise.all(t.map(e)))},invert:e,runInParallelBatches:async function(t,n=1){const e=an(t,n),r=[],i=e.map(async t=>{for(const n of t)r.push(await n())});return await Promise.all(i),r}},t.Dates={getTimestamp:function(t,n){const e=new Date(n?.now||Date.now()),r=n?.labels||Ft,i=E(t)?t:new Date(t);if(Ut(e)===Ut(i))return r.today(i.getUTCHours(),i.getUTCMinutes(),i.getUTCHours()>12);if(Ut(e)-Ut(i)===1)return r.yesterday();const o=qt(i);return Ut(e)-Ut(i)<7?r[o.day]():r.weeks(Math.round((e.getTime()-i.getTime())/6048e5))},getTimeDelta:Pt,secondsToHumanTime:function(t,n=Nt){return Pt(0,{now:1e3*t,labels:n})},countCycles:function(t,n,e){const r=(e?.now??Date.now())-t;return{cycles:Math.floor(r/n),remaining:n/(e?.precision??1)-Math.ceil(r%n/(e?.precision??1))}},isoDate:function(t){return(t||new Date).toISOString().slice(0,10)},throttle:function(t,n){return(!zt[t]||Date.now()>zt[t])&&(zt[t]=Date.now()+n,!0)},timeSince:function(t,n,e){return n=E(n)?n.getTime():n,((e=e?E(e)?e.getTime():e:Date.now())-n)/Lt[t]},dateTimeSlug:function(t){return(t||new Date).toISOString().slice(0,19).replace(/T|:/g,"-")},unixTimestamp:function(t){return Math.ceil((t||Date.now())/1e3)},fromUtcString:function(t){const n=new Date(t);return new Date(n.getTime()-6e4*n.getTimezoneOffset())},fromMillis:function(t){return new Date(t)},getProgress:function(t,n,e,r){r||(r=Date.now());const i=r-t,o=i/n,s=o*e;return{deltaMs:i,progress:n/e,baseTimeMs:o,totalTimeMs:s,remainingTimeMs:s-i}},humanizeTime:It,humanizeProgress:function(t){return`[${Math.floor(100*t.progress)}%] ${It(t.deltaMs)} out of ${It(t.totalTimeMs)} (${It(t.remainingTimeMs)} left) [${Math.round(t.baseTimeMs)} ms each]`},createTimeDigits:Dt,mapDayNumber:Wt,getDayInfoFromDate:qt,getDayInfoFromDateTimeString:function(t){return qt(new Date(t))},seconds:function(t){return 1e3*t},minutes:function(t){return 6e4*t},hours:function(t){return 36e5*t},days:function(t){return 864e5*t},make:function(t){const n=parseFloat(t);if(isNaN(n))throw Error("makeDate got NaN for input");const e=t.replace(/^-?[0-9.]+/,"").trim().toLowerCase(),r=""===e?1:Ht[e];if(!r)throw Error(`Unknown unit: "${e}"`);return Math.ceil(n*r)},normalizeTime:function(t){let[n,e]=t.split(":");$(parseInt(n,10))||(n="0"),$(parseInt(e,10))||(e="0");let r=rn(N(n),0,23),i=rn(N(e),0,59);return`${Dt(r)}:${Dt(i)}`},absoluteDays:Ut},t.Objects={safeParse:function(t){try{return JSON.parse(t)}catch{return null}},deleteDeep:function(t,n){const e=X(n,"."),r=Y(n,".");if(!e||!r)return;const i=h(t,e);i&&delete i[r]},getDeep:h,setDeep:g,incrementDeep:function(t,n,e=1){const r=h(t,n)||0;return g(t,n,r+e),r},ensureDeep:function(t,n,e){return h(t,n)||g(t,n,e)},replaceDeep:function(t,n,e){const r=h(t,n);if(!r)throw new Error("Key \'"+n+"\' does not exist.");return g(t,n,e),r},getFirstDeep:function(t,n,e){for(const e of n){const n=h(t,e);if(n)return n}if(e){const n=Object.values(t);if(n.length)return n[0]}return null},deepMergeInPlace:q,deepMerge2:function(t,n){const e={};return q(e,t),q(e,n),e},deepMerge3:function(t,n,e){const r={};return q(r,t),q(r,n),q(r,e),r},mapAllAsync:async function(t,n){const e=[];for(const r of t)e.push(await n(r));return e},cloneWithJson:function(t){return JSON.parse(JSON.stringify(t))},sortObject:Zt,sortArray:Qt,sortAny:_t,deepEquals:Gt,deepEqualsEvery:function(...t){for(let n=1;n<t.length;n++)if(!Gt(t[n-1],t[n]))return!1;return!0},runOn:function(t,n){return n(t),t},ifPresent:function(t,n){t&&n(t)},zip:H,zipSum:function(t){return H(t,(t,n)=>t+n)},removeEmptyArrays:function(t){for(const n of Object.keys(t))(y(t[n])||Array.isArray(t[n])&&t[n].every(t=>null==t))&&delete t[n];return t},removeEmptyValues:function(t){for(const n of Object.entries(t))(null===n[1]||void 0===n[1]||x(n[1])&&M(n[1]))&&delete t[n[0]];return t},flatten:function(t,n=!1,e){return sn({},t,e||"",!1,n)},unflatten:function t(n){if(!d(n))return n;const e=Array.isArray(n)?[]:{};for(const[r,i]of Object.entries(n))Array.isArray(i)?g(e,r,i.map(n=>t(n))):g(e,r,i);return e},match:function(t,n,e){return n[t]?n[t]:e},sort:ln,map:function(t,n){const e={};for(const r of Object.entries(t))e[r[0]]=n(r[1]);return e},mapIterable:function(t,n){const e=[];let r=0;for(const i of t)e.push(n(i,r++));return e},filterKeys:function(t,n){const e={};for(const[r,i]of Object.entries(t))n(r)&&(e[r]=i);return e},filterValues:function(t,n){const e={};for(const[r,i]of Object.entries(t))n(i)&&(e[r]=i);return e},rethrow:async function(t,n){try{return await t()}catch{throw n}},setSomeOnObject:function(t,n,e){null!=e&&(t[n]=e)},setSomeDeep:function(t,n,e,r){const i=h(e,r);null!=i&&g(t,n,i)},flip:function(t){const n={};for(const[e,r]of Object.entries(t))n[r]=e;return n},getAllPermutations:function(t){const n=Object.keys(t),e=n.map(n=>t[n].length),r=e.reduce((t,n)=>t*n);let i=1;const o=[1];for(let t=0;t<e.length-1;t++)i*=e[t],o.push(i);const s=[];for(let e=0;e<r;e++){const r={};for(let i=0;i<n.length;i++){const s=t[n[i]],u=Math.floor(e/o[i])%s.length;r[n[i]]=s[u]}s.push(r)}return s},countTruthyValues:function(t){return Object.values(t).filter(t=>t).length},transformToArray:function(t){const n=[],e=Object.keys(t),r=t[e[0]].length;for(let i=0;i<r;i++){const r={};for(const n of e)r[n]=t[n][i];n.push(r)}return n},setMulti:function(t,n,e){for(const r of t)r[n]=e},incrementMulti:function(t,n,e=1){for(const r of t)r[n]+=e},createBidirectionalMap:function(){return{map:new Map,keys:[]}},createTemporalBidirectionalMap:function(){return{map:new Map,keys:[]}},pushToBidirectionalMap:hn,unshiftToBidirectionalMap:function(t,n,e,r=100){if(t.map.has(n)){const e=t.keys.indexOf(n);t.keys.splice(e,1)}if(t.map.set(n,e),t.keys.unshift(n),t.keys.length>r){const n=t.keys.shift();n&&t.map.delete(n)}},addToTemporalBidirectionalMap:function(t,n,e,r,i=100){hn(t,n,{validUntil:Date.now()+r,data:e},i)},getFromTemporalBidirectionalMap:function(t,n){const e=t.map.get(n);return e&&e.validUntil>Date.now()?e.data:null},createStatefulToggle:function(t){let n;return e=>{const r=e===t&&n!==t;return n=e,r}},diffKeys:function(t,n){const e=Object.keys(t),r=Object.keys(n);return{uniqueToA:e.filter(t=>!r.includes(t)),uniqueToB:r.filter(t=>!e.includes(t))}},pickRandomKey:Xt,mapRandomKey:function(t,n){const e=Xt(t);return t[e]=n(t[e]),e},fromObjectString:function(t){return t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace(/\\r\\n/g,"\\n")).replace(/(\\w+)\\((.+)\\)/g,(t,n,e)=>`${n}(${e.replaceAll(",","&comma;")})`)).replace(/(,)(\\s+})/g,"$2")).replace(/\\.\\.\\..+?,/g,"")).replace(/({\\s+)([a-zA-Z]\\w+),/g,"$1$2: \'$2\',")).replace(/(,\\s+)([a-zA-Z]\\w+),/g,"$1$2: \'$2\',")).replace(/:(.+)\\?(.+):/g,(t,n,e)=>`: (${n.trim()} && ${e.trim()}) ||`)).replace(/([a-zA-Z0-9]+)( ?: ?{)/g,\'"$1"$2\')).replace(/([a-zA-Z0-9]+) ?: ?(.+?)(,|\\n|})/g,(t,n,e,r)=>`"${n}":"${e.trim()}"${r}`)).replace(/("\'|\'")/g,\'"\')).replaceAll("&comma;",","),JSON.parse(t)},toQueryString:Ct,parseQueryString:function(t){const n={},e=t.split("&");for(const t of e){const[e,r]=t.split("=");e&&r&&(n[e]=decodeURIComponent(r))}return n},hasKey:function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},selectMax:function(t,n){let e=null,r=-1/0;for(const[i,o]of Object.entries(t)){const t=n(o);t>r&&(r=t,e=i)}return e?[e,t[e]]:null},reposition:function(t,n,e,r){const i=t.find(t=>t[n]===e),o=t.find(t=>t[n]===e+r);i&&o?(i[n]=e+r,o[n]=e):i&&(i[n]=e+r),t.sort((t,e)=>F(t[n])-F(e[n])),t.forEach((t,e)=>t[n]=e+1)},unwrapSingleKey:function(t){const n=Object.keys(t);if(1===n.length)return t[n[0]];throw new Error("Expected object to have a single key")},parseKeyValues:function(t,n=":"){return Object.fromEntries(t.map(t=>tt(t,n)).map(t=>t[0]&&t[1]?[it(t[0]),it(t[1])]:null).filter(t=>t))},errorMatches:function(t,n){if(!t)return!1;const e=t.message;return"string"==typeof e&&e.includes(n)}},t.Types={isFunction:b,isObject:d,isStrictlyObject:m,isEmptyArray:y,isEmptyObject:function(t){return m(t)&&0===Object.keys(t).length},isUndefined:w,isString:x,isNumber:$,isBoolean:v,isDate:E,isBlank:M,isId:A,isIntegerString:S,isHexString:k,isUrl:z,isBigint:L,isNullable:function(t,n){return null==n||t(n)},asString:I,asHexString:function(t,n){if(!k(t))throw new TypeError(`Expected hex string${n?.name?` for ${n.name}`:""}, got: `+t);if(n?.strictPrefix&&!t.startsWith("0x")&&!t.startsWith("0X"))throw new TypeError(`Expected hex string with 0x prefix${n?.name?` for ${n.name}`:""}, got: `+t);const e=t.replace(/^0x/i,"");if(e.length%2!=0&&!n?.uneven)throw RangeError(`Expected even number of hex digits${n?.name?` for ${n.name}`:""}; got: `+t);if(n&&n.byteLength&&e.length!==2*n.byteLength)throw RangeError(`Expected hex string${n?.name?` for ${n.name}`:""} of byte length ${n.byteLength}; got: `+e);return`0x${e}`},asSafeString:function(t,n){if(!I(t,n).split("").every(t=>"_"===t||ct(t)))throw new TypeError(`Expected safe string${n?.name?` for ${n.name}`:""}, got: `+t);return t},asIntegerString:function(t,n){if(!S(t))throw new TypeError(`Expected integer string${n?.name?` for ${n.name}`:""}, got: `+t);const e=BigInt(t);if(n&&(n.min&&e<n.min||n.max&&e>n.max))throw RangeError(`Expected integer string${n?.name?` for ${n.name}`:""} in range: ${n.min??"-inf"}..${n.max??"inf"}; got: `+e);return t},asNumber:F,asFunction:function(t,n){if(!b(t))throw new TypeError(`Expected function${n?.name?` for ${n.name}`:""}, got: `+t);return t},asInteger:N,asBoolean:function(t,n){if("true"===t)return!0;if("false"===t)return!1;if(!v(t))throw new TypeError(`Expected boolean${n?.name?` for ${n.name}`:""}, got: `+t);return t},asDate:function(t,n){if(!E(t))throw new TypeError(`Expected date${n?.name?` for ${n.name}`:""}, got: `+t);return t},asNullableString:function(t){return M(t)?null:t},asEmptiableString:function(t,n){if(!x(t))throw new TypeError(`Expected string${n?.name?` for ${n.name}`:""}, got: `+t);return t},asId:function(t,n){if(A(t))return t;const e=parseInt(t,10);if(!A(e))throw new TypeError(`Expected id${n?.name?` for ${n.name}`:""}, got: `+t);return e},asTime:function(t,n){if(!x(t))throw new TypeError(`Expected time${n?.name?` for ${n.name}`:""}, got: `+t);const e=t.split(":");if(2!==e.length)throw new TypeError(`Expected time${n?.name?` for ${n.name}`:""}, got: `+t);const r=parseInt(e[0],10),i=parseInt(e[1],10);if(!$(r)||!$(i)||r<0||r>23||i<0||i>59)throw new TypeError(`Expected time, got${n?.name?` for ${n.name}`:""}: `+t);return`${String(r).padStart(2,"0")}:${String(i).padStart(2,"0")}`},asArray:function(t,n){if(!Array.isArray(t))throw new TypeError(`Expected array${n?.name?` for ${n.name}`:""}, got: `+t);return t},asObject:P,asNullableObject:function(t,n){return null===t?null:P(t,n)},asStringMap:function(t,n){const e=P(t,n);for(const r of Object.keys(e))if(!x(e[r]))throw new TypeError(`Expected string map${n?.name?` for ${n.name}`:""}, got: `+t);return e},asNumericDictionary:function(t,n){const e=P(t),r=Object.keys(e),i=Object.values(e);if(!r.every(x)||!i.every($))throw new TypeError(`Expected numeric dictionary${n?.name?` for ${n.name}`:""}, got: `+t);return e},asUrl:function(t,n){if(!z(t))throw new TypeError(`Expected url${n?.name?` for ${n.name}`:""}, got: `+t);return t},asBigint:R,asEmptiable:function(t,n){return""===n?void 0:t(n)},asNullable:function(t,n){return null==n?null:t(n)},asOptional:function(t,n){return null==n?void 0:t(n)},enforceObjectShape:W,enforceArrayShape:function(t,n){return t.every(t=>W(t,n))},isPng:yn,isJpg:wn,isWebp:bn,isImage:function(t){return yn(t)||wn(t)||bn(t)}},t.Strings={tokenizeByCount:function(t,n){return cn(t,Math.ceil(t.length/n))},tokenizeByLength:cn,searchHex:function(t,n){const e=new RegExp(`[0-9a-f]{${n}}`,"i"),r=t.match(e);return r?r[0]:null},searchSubstring:function(t,n,e=O){const r=nt(t,e);for(const t of r)if(n(t))return t;return null},randomHex:function(t,n=Math.random){let e="";for(let r=0;r<t;r++)e+=D[Math.floor(16*n())];return e},randomLetter:function(t,n=Math.random){let e="";for(let r=0;r<t;r++)e+=T[Math.floor(26*n())];return e},randomAlphanumeric:function(t,n=Math.random){let e="";for(let r=0;r<t;r++)e+=B[Math.floor(62*n())];return e},randomRichAscii:function(t,n=Math.random){let e="";for(let r=0;r<t;r++)e+=j[Math.floor(89*n())];return e},randomUnicode:function(t,n=Math.random){let e="";for(let r=0;r<t;r++)e+=C[Math.floor(n()*C.length)];return e},includesAny:function(t,n){return n.some(n=>t.includes(n))},slugify:J,normalForm:function(t){return J(t).replaceAll("-","")},enumify:function(t){return J(t).replace(/-/g,"_").toUpperCase()},escapeHtml:function(t){return t.replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")},decodeHtmlEntities:function(t){let n=t.replace(/&#(\\d+);/g,(t,n)=>String.fromCharCode(n)).replace(/&#x(\\d+);/g,(t,n)=>String.fromCharCode(parseInt(n,16)));for(const[t,e]of Object.entries(Q))n=n.replaceAll(t,e);return n},after:G,afterLast:Y,before:_,beforeLast:X,betweenWide:function(t,n,e){const r=X(t,e);return r?G(r,n):null},betweenNarrow:function(t,n,e){const r=G(t,n);return r?_(r,e):null},getPreLine:function(t){return t.replace(/ +/g," ").replace(/^ /gm,"")},containsWord:Ot,containsWords:function(t,n,e){return"any"===e?n.some(n=>Ot(t,n)):n.every(n=>Ot(t,n))},joinUrl:Jt,getFuzzyMatchScore:Z,sortByFuzzyScore:function(t,n){return t.filter(t=>Z(t,n)).sort((t,e)=>Z(e,n)-Z(t,n))},splitOnce:tt,splitAll:nt,randomize:function(t,n=Math.random){return t.replace(/\\{(.+?)\\}/g,(t,e)=>c(e.split("|"),n))},expand:function t(n){const e=n.match(/\\{(.+?)\\}/);if(!e||!e.index)return[n];const r=e[1].split(","),i=n.slice(0,e.index),o=n.slice(e.index+e[0].length);let s=[];for(const n of r){const e=t(i+n+o);s=s.concat(e)}return s},shrinkTrim:it,capitalize:ot,decapitalize:st,csvEscape:function(t){return t.match(/"|,/)?`"${t.replace(/"/g,\'""\')}"`:t},parseCsv:function(t,n=",",e=\'"\'){const r=[];let i="",o=!1;const s=t.split("");for(const t of s)t!==n||o?t!==e||(i||o)&&!o?i+=t:o=!o:(r.push(i),i="");return r.push(i),r},surroundInOut:function(t,n){return n+t.split("").join(n)+n},getExtension:et,getBasename:rt,normalizeEmail:function(t){let[n,e]=t.split("@");n=it(n.replaceAll(".","").toLowerCase()).replaceAll(" ","");const[r]=n.split("+");if(!r||!e||-1===e.indexOf(".")||e.indexOf(".")===e.length-1)throw new Error("Invalid email");return e=it(e.toLowerCase()).replaceAll(" ",""),`${r}@${e}`},normalizeFilename:function(t){const n=rt(t),e=et(t);return e?`${n}.${e}`:n},parseFilename:function(t){const n=rt(t),e=et(t);return{basename:n,extension:e,filename:e?`${n}.${e}`:n}},camelToTitle:function(t){return ot(t.replace(/([A-Z])/g," $1"))},slugToTitle:function(t){return t.split("-").map(ot).join(" ")},slugToCamel:function(t){return st(t.split("-").map(ot).join(""))},joinHumanly:function(t,n=", ",e=" and "){return t&&t.length?1===t.length?t[0]:2===t.length?`${t[0]}${e}${t[1]}`:`${t.slice(0,t.length-1).join(n)}${e}${t[t.length-1]}`:""},findWeightedPair:bt,extractBlock:xt,extractAllBlocks:function(t,n){const e=[];let r=n.wordBoundary?dt(t,[`${n.opening} `,`${n.opening}\\n`],n.start||0):t.indexOf(n.opening,n.start||0);for(;;){if(-1===r)return e;const i=xt(t,{...n,start:r});if(!i)return e;e.push(i),r=n.wordBoundary?dt(t,[`${n.opening} `,`${n.opening}\\n`],r+i.length):t.indexOf(n.opening,r+i.length)}},replaceBlocks:function(n,e,r){let i=0;for(;;){const o=t.Strings.extractBlock(n,{...r,start:i});if(!o)return n;const s=e(o);i=n.indexOf(o,i)+s.length,n=n.replace(o,s)}},indexOfEarliest:dt,lastIndexOfBefore:wt,parseHtmlAttributes:function(t){const n={},e=t.match(/([a-z\\-]+)="([^"]+)"/g);if(e)for(const t of e){const[e,r]=tt(t,"=");n[e]=r.slice(1,r.length-1)}return n},readNextWord:Tt,readWordsAfterAll:function(t,n,e=[]){const r=pt(t,n),i=[];for(const o of r)i.push(Tt(t,o+n.length,e));return i},resolveVariables:function(t,n,e="$",r=":"){for(const i in n)t=Bt(t,i,n[i],e,r);return t=jt(t)},resolveVariableWithDefaultSyntax:Bt,resolveRemainingVariablesWithDefaults:jt,isLetter:ut,isDigit:at,isLetterOrDigit:ct,isValidObjectPathCharacter:function(t){return ct(t)||"."===t||"["===t||"]"===t||"_"===t},insert:function(t,n,e,r,i){return t.slice(0,n)+r+t.slice(n,n+e)+i+t.slice(n+e)},indexOfRegex:ht,allIndexOf:pt,lineMatches:gt,linesMatchInOrder:function(t,n,e=!0){let r=0;for(const i of n){let n=!1;for(;!n&&r<t.length;)gt(t[r],i,e)&&(n=!0),r++;if(!n)return!1}return!0},represent:function t(n,e="json",r=0){if(n&&b(n.represent)){const t=n.represent();if(x(t))return"json"===e&&0===r?JSON.stringify(t):t}if(d(n,!1)){if(r>1)return"[object Object]";if("json"===e){if(Array.isArray(n)){const e=n.map(n=>t(n,"json",r+1));return 0===r?JSON.stringify(e):e}const e={};n.message&&(e.message=t(n.message,"json",r+1));for(const[i,o]of Object.entries(n))e[i]=t(o,"json",r+1);return 0===r?JSON.stringify(e):e}if("key-value"===e){const e=Object.keys(n);return n.message&&!e.includes("message")&&e.unshift("message"),e.map(e=>`${e}=${JSON.stringify(t(n[e],"json",r+1))}`).join(" ")}}return w(n)&&(n="undefined"),0===r?JSON.stringify(n):n},resolveMarkdownLinks:function(t,n){let e=t.indexOf("](");for(;-1!==e;){const r=wt(t,"[",e),i=t.indexOf(")",e);if(-1!==r&&-1!==i){const[e,o]=t.slice(r+1,i).split("]("),s=n(e,o);t=t.slice(0,r)+s+t.slice(i+1)}e=t.indexOf("](",e+1)}return t},buildUrl:function(t,n,e){return Jt([t,n])+Ct(e||{})},isChinese:function(t){return/^[\\u4E00-\\u9FA5]+$/.test(t)},replaceBetweenStrings:function(t,n,e,r,i=!0){const o=t.indexOf(n),s=t.indexOf(e,o+n.length);if(-1===o||-1===s)throw Error("Start or end not found");return i?t.substring(0,o+n.length)+r+t.substring(s):t.substring(0,o)+r+t.substring(s+e.length)},describeMarkdown:function(t){let n="p";return t.startsWith("#")?(n="h1",t=t.slice(1).trim()):t.startsWith("-")&&(n="li",t=t.slice(1).trim()),{type:n,isCapitalized:t[0]===t[0].toUpperCase(),hasPunctuation:/[.?!]$/.test(t),endsWithColon:/:$/.test(t)}},isBalanced:function(t,n="(",e=")"){let r=0,i=0;for(;i<t.length;)if(t.startsWith(n,i)?(r++,i+=n.length):t.startsWith(e,i)?(r--,i+=e.length):i++,r<0)return!1;return n===e?r%2==0:0===r},textToFormat:function(t){let n=(t=t.normalize("NFD").replace(/[\\u0300-\\u036f]/g,"")).length;for(;(t=t.replace(/(\\w+)[\\s,\']+\\w+/g,"$1")).length!==n;)n=t.length;return t=(t=(t=t.replaceAll(/[A-Z][a-zA-Z0-9]*/g,"A")).replaceAll(/[a-z][a-zA-Z0-9]*/g,"a")).replaceAll(/[\\u4E00-\\u9FA5]+/g,"Z")},splitFormatting:function(t,n){const e=[];let r=0;for(;r<t.length;){const i=t.indexOf(n,r);if(-1===i){e.push({string:t.slice(r),symbol:null});break}const o=t.indexOf(n,i+n.length);if(i>r&&-1!==o&&e.push({string:t.slice(r,i),symbol:null}),-1===o){e.push({string:t.slice(r),symbol:null});break}e.push({string:t.slice(i+n.length,o),symbol:n}),r=o+n.length}return e},splitHashtags:function(t){const n=[];let e=0;for(;e<t.length;){const r=yt(t,e);if(-1===r){n.push({string:t.slice(e),symbol:null});break}const i=mt(t,r+1);if(-1===i){n.push({string:t.slice(e,r),symbol:null}),n.push({string:t.slice(r+1),symbol:"#"});break}r>e&&n.push({string:t.slice(e,r),symbol:null}),n.push({string:t.slice(r+1,i),symbol:"#"}),e=i}return n},splitUrls:function(t){const n=[];let e=0;for(;e<t.length;){const r=dt(t,["http://","https://"],e);if(-1===r){n.push({string:t.slice(e),symbol:null});break}const i=dt(t,[" ","\\n"],r);if(-1===i){r>e&&n.push({string:t.slice(e,r),symbol:null}),n.push({string:t.slice(r),symbol:"http"});break}r>e&&n.push({string:t.slice(e,r),symbol:null}),n.push({string:t.slice(r,i),symbol:"http"}),e=i}return n},route:function(t,n){const e=t.split("/").filter(t=>t),r=n.split("/").filter(t=>t);if(e.length!==r.length)return null;const i={};for(let t=0;t<e.length;t++){const n=e[t];if(n.startsWith(":"))i[n.slice(1)]=r[t];else if(n!==r[t])return null}return i},explodeReplace:At,generateVariants:function(n,e,r,i=Math.random){const o=t.Arrays.shuffle(e.map(n=>({variants:t.Arrays.shuffle(n.variants.map(t=>t),i),avoid:n.avoid})),i),s=[];for(const t of o){const e=t.variants.filter(n=>n!==t.avoid),i=e.find(t=>n.includes(t));if(i&&(K(s,At(n,i,e)),s.length>=r))break}if(s.length<r)for(const t of o){const e=t.variants.find(t=>n.includes(t));if(e&&(K(s,At(n,e,t.variants)),s.length>=r))break}return s.slice(0,r)},replaceWord:function(t,n,e,r=!1){const i=new RegExp(r?`(?<=\\\\s|^)${n}(?=\\\\s|$)`:`\\\\b${n}\\\\b`,"g");return t.replace(i,e)},replacePascalCaseWords:function(t,n){return t.replace(/\\b[A-Z][a-zA-Z0-9]*\\b/g,t=>t.toUpperCase()===t?t:n(t))},stripHtml:function(t){return t.replace(/<[^>]*>/g,"")},breakLine:St,measureTextWidth:function(t,n={}){return[...t].reduce((t,e)=>t+(n[e]||1),0)},toLines:function(t,n,e={}){const r=[];let i="",o=0;for(let s=0;s<t.length;s++){const u=t[s];if(i+=u,o+=e[u]||1,o>n){const{line:t,rest:n}=St(i);r.push(t),i=n,o=n.split("").map(t=>e[t]||1).reduce((t,n)=>t+n,0)}}return i&&r.push(i),r},levenshteinDistance:function(t,n){const e=[];for(let n=0;n<=t.length;n++)e[n]=[n];for(let t=0;t<=n.length;t++)e[0][t]=t;for(let r=1;r<=t.length;r++)for(let i=1;i<=n.length;i++){const o=t[r-1]===n[i-1]?0:1;e[r][i]=Math.min(e[r-1][i]+1,e[r][i-1]+1,e[r-1][i-1]+o)}return e[t.length][n.length]},findCommonPrefix:kt,findCommonDirectory:function(t){const n=kt(t),e=n.lastIndexOf("/");return-1===e?"":n.slice(0,e+1)}},t.Assertions={asEqual:function(t,n){if(t!==n)throw Error(`Expected [${t}] to equal [${n}]`);return[t,n]},asTrue:function(t){if(!0!==t)throw Error(`Expected [true], got: [${t}]`);return t},asTruthy:function(t){if(!t)throw Error(`Expected truthy value, got: [${t}]`);return t},asFalse:function(t){if(!1!==t)throw Error(`Expected [false], got: [${t}]`);return t},asFalsy:function(t){if(t)throw Error(`Expected falsy value, got: [${t}]`);return t},asEither:function(t,n){if(!n.includes(t))throw Error(`Expected any of [${n.join(", ")}], got: [${t}]`);return t}},t.Cache={get:async function(t,n,e,r){const i=Date.now(),o=Vt.get(t);if(o&&o.validUntil>i)return o.value;r?.onMiss?.();try{const r=await e();return Vt.set(t,{value:r,validUntil:i+n}),r}catch(t){throw r?.onFailure?.(t),t}},getDeferred:function(t,n,e,r){const i=Date.now(),o=Vt.get(t);if(o&&o.validUntil>i)return o.value;r?.onMiss?.();const s=e();return Vt.set(t,{value:s,validUntil:i+n}),s.catch(n=>{Vt.delete(t),r?.onFailure?.(n)}),s},delete:function(t){Vt.delete(t)},deleteExpired:function(){const t=Date.now();for(const[n,e]of Vt.entries())e.validUntil<=t&&Vt.delete(n)},size:function(){return Vt.size},clear:function(){Vt.clear()}},t.Vector={addPoint:Xn,subtractPoint:function(t,n){return{x:t.x-n.x,y:t.y-n.y}},multiplyPoint:Yn,normalizePoint:function(t){const n=Math.sqrt(t.x*t.x+t.y*t.y);return{x:t.x/n,y:t.y/n}},pushPoint:te,filterCoordinates:ee,findCorners:function(t,n,e,r){const i=[{x:0,y:0},{x:e,y:0},{x:0,y:r},{x:e,y:r}];for(let n=0;n<t.length;n++)for(let e=0;e<t[0].length;e++){const r=ue(t,n,e);for(const t of r)i.some(n=>n.x===t.x&&n.y===t.y)||i.push(t)}return i.map(t=>({x:t.x*n,y:t.y*n}))},findLines:function(t,n){const e=ee(t,(n,e)=>0===t[n][e]&&0!==t[n][e+1],"row-first").map(t=>({...t,dx:1,dy:0})),r=ee(t,(n,e)=>0===t[n][e]&&0!==t[n][e-1],"row-first").map(t=>({...t,dx:1,dy:0})),i=ee(t,(n,e)=>0===t[n][e]&&0!==t[n-1]?.[e],"column-first").map(t=>({...t,dx:0,dy:1})),o=ee(t,(n,e)=>0===t[n][e]&&0!==t[n+1]?.[e],"column-first").map(t=>({...t,dx:0,dy:1}));return e.forEach(t=>t.y++),o.forEach(t=>t.x++),[...fn([...i,...o],(t,n)=>t.x===n.x&&t.y-1===n.y),...fn([...r,...e],(t,n)=>t.y===n.y&&t.x-1===n.x)].map(t=>({start:t[0],end:l(t)})).map(t=>({start:Yn(t.start,n),end:Yn(Xn(t.end,{x:t.start.dx,y:t.start.dy}),n)}))},raycast:le,raycastCircle:function(t,n,e){const r=ae(t,e),i=[];for(const e of r){const r=le(t,n,e-.001),o=le(t,n,e+.001);r&&i.push(r),o&&i.push(o)}return i},getLineIntersectionPoint:ce}}(n)),n);const r=(new TextEncoder).encode("Ethereum Signed Message:\\n32");let i,o;const s=self;s.onmessage=t=>{s.postMessage(function(t){if("init"===t.type){const n=e.Binary.hexToUint8Array(t.signerKeyHex);i=e.Binary.uint256ToNumber(n,"BE");const[r,s]=e.Elliptic.privateKeyToPublicKey(i),u=e.Binary.concatBytes(e.Binary.numberToUint256(r,"BE"),e.Binary.numberToUint256(s,"BE")),[a,c]=[e.Binary.uint256ToNumber(u.slice(0,32),"BE"),e.Binary.uint256ToNumber(u.slice(32,64),"BE")];return o=e.Elliptic.publicKeyToAddress([a,c]),{type:"ready",issuerHex:e.Binary.uint8ArrayToHex(o)}}const n=e.Binary.concatBytes(r,e.Binary.keccak256(t.message)),[s,u,a]=e.Elliptic.signMessage(n,i),c=e.Binary.concatBytes(e.Binary.numberToUint256(s,"BE"),e.Binary.numberToUint256(u,"BE"),new Uint8Array([Number(a)]));return{type:"signed",id:t.id,signatureHex:e.Binary.uint8ArrayToHex(c)}}(t.data))}}();\n'],{type:"application/javascript"}),a=URL.createObjectURL(i),o=[],c=[];for(let e=0;e<r;e++){const e=new Worker(a,{type:"classic"}),n={worker:e,pending:new Map};e.onmessage=t=>{const e=t.data;if("signed"===e.type){const t=n.pending.get(e.id);t&&(n.pending.delete(e.id),t.resolve(e.signatureHex))}},e.onerror=t=>{for(const[,e]of n.pending)e.reject(new Error(`Stamp worker error: ${t.message}`));n.pending.clear()},o.push(n);const r=new Promise((n,r)=>{const i=e.onmessage,a=e.onerror,o=setTimeout(()=>{r(new Error("Stamp worker init timed out"))},5e3);e.onmessage=t=>{"ready"===t.data.type&&(clearTimeout(o),e.onmessage=i,e.onerror=a,n(s.Binary.hexToUint8Array(t.data.issuerHex)))},e.onerror=()=>{clearTimeout(o),r(new Error("Worker init failed"))},e.postMessage({type:"init",signerKeyHex:t})});c.push(r)}const d=(await Promise.all(c))[0];return URL.revokeObjectURL(a),new Qa(o,d,e)}async stampChunkData(t,e=Date.now()){if(0===this.workers.length)throw new Error(_a);const i=t[0]<<8|t[1],a=this.assignSlot(t),o=new Uint8Array(8),c=new DataView(o.buffer);c.setUint32(0,i,!1),c.setUint32(4,a,!1);const d=new Uint8Array(8);new DataView(d.buffer).setBigUint64(0,1000000n*BigInt(e),!1);const u=s.Binary.concatBytes(t,this.batchId.toUint8Array(),o,d),l=await this.dispatchSign(u),h=s.Binary.hexToUint8Array(l);return{batchId:this.batchId,index:o,issuer:new r(this.issuer),signature:new n(h),timestamp:d}}dispatchSign(t){return new Promise((e,n)=>{const r=this.nextId++,i=this.workers[this.nextWorker++%this.workers.length];i.pending.set(r,{resolve:e,reject:n}),i.worker.postMessage({type:"sign",id:r,message:t})})}terminate(){for(const t of this.workers){t.worker.terminate();for(const[,e]of t.pending)e.reject(new Error(_a));t.pending.clear()}this.workers=[]}}function Xa(t){const e=!1!==t?.encrypt;return{content:e,manifest:e&&!1!==t?.encryptManifest}}function to(t,e,n){const r=[t.postageStampBatchID,e.defaultPostageStampBatchID].filter(t=>void 0!==t).map(t=>t.toHex());return n.filter(t=>r.includes(t.batchID.toHex()))}function eo(t,e=Date.now()){return function(t,e=Date.now()){const n=no(t,e);return void 0!==n&&n<=0}(t,e)?"stamp-expired":!1===t.usable||!1===t.exists?"stamp-not-usable":void 0}function no(t,e=Date.now()){if(void 0===t.batchTTL)return;const n=t.updatedAt??t.createdAt;return t.batchTTL-Math.max(0,Math.floor((e-n)/1e3))}function ro(t,e){const n=t=>Math.max(t.removedAt??0,t.lastSignedInAt??0),r=t=>t.nameUpdatedAt??0,i=new Map;for(const s of[...e,...t]){const t=i.get(s.deviceId);if(!t){i.set(s.deviceId,s);continue}const e=n(s)>=n(t)?s:t,a=e===s?t:s;i.set(s.deviceId,r(a)>r(e)?{...e,name:a.name,nameUpdatedAt:a.nameUpdatedAt}:e)}return Array.from(i.values())}function io(t,e,n){const r=t=>t.appUrl,i=t=>Math.max(t.revokedAt??0,t.disconnectedAt??0,t.lastConnectedAt??0),s=t=>t.postageStampBatchIDAt??0,a=new Map;for(const o of[...e,...t]){const t=a.get(r(o));if(!t){a.set(r(o),o);continue}const e=i(o)>=i(t)?o:t,c=e===o?t:o,d=s(c)>s(e)?{...e,postageStampBatchID:c.postageStampBatchID,postageStampBatchIDAt:c.postageStampBatchIDAt}:e,u=We(e.chatBinding,c.chatBinding,e.appUrl,n);a.set(r(o),u===e.chatBinding?d:{...d,chatBinding:u})}return Array.from(a.values())}function so(t,e){const n=t=>t.batchID.toHex(),r=t=>Math.max(t.deletedAt??0,t.updatedAt??0,t.createdAt),i=t=>t.nameUpdatedAt??0,s=new Map;for(const a of[...e,...t]){const t=s.get(n(a));if(!t){s.set(n(a),a);continue}const e=r(a)>=r(t)?a:t,o=e===a?t:a;s.set(n(a),i(o)>i(e)?{...e,name:o.name,nameUpdatedAt:o.nameUpdatedAt}:e)}return Array.from(s.values())}function ao(t,e){const n=`swarm-write-${t}`;return"undefined"!=typeof navigator&&navigator.locks?navigator.locks.request(n,{mode:"exclusive"},e):e()}const oo="";function co(t){const e=s.Binary.keccak256((new TextEncoder).encode(t));return s.Binary.uint8ArrayToHex(e.slice(0,8))}function uo(t,e){const n=s.Binary.keccak256((new TextEncoder).encode(t));return((n[0]<<24|n[1]<<16|n[2]<<8|n[3])>>>0)%e}function lo(t,e){return t.timestampMs!==e.timestampMs?t.timestampMs<e.timestampMs?-1:1:t.tiebreaker!==e.tiebreaker?t.tiebreaker<e.tiebreaker?-1:1:0}async function ho(t){const{bee:e,backupSigner:n,swarmEncryptionKey:r,batchId:i,partition:s}=t,a=fs(i,s),o=n.publicKey().address();try{const t=await ze(e,o,a,r),n=Ge.safeParse(JSON.parse((new TextDecoder).decode(t.payload)));return n.success?n.data:void console.debug(`[partition-lock] read p=${s}: SOC present but payload failed schema validation — treating as no lock`)}catch(t){const e=t instanceof Error?t.message:String(t);return void console.debug(`[partition-lock] read p=${s}: unreadable — ${e}`)}}async function po(t){const{bee:e,stamper:n,backupSigner:r,swarmEncryptionKey:i,batchId:s,partition:a,payload:o}=t,c=fs(s,a),d=(new TextEncoder).encode(JSON.stringify(o)),u={mode:"stamper",bee:e,stamper:n};await hs(u,r,c,d,{encryptionKey:i})}async function fo(t){const e=t.now??Date.now,n=t.wait??Ve,r=()=>Je(ho(t),t.readTimeoutMs??gs,"lock read timed out").catch(()=>{}),i=t.skipInitialRead?void 0:await r(),s=e();if(i&&i.holderDeviceId!==t.deviceId&&i.holderDeviceId!==oo&&i.leasedUntil>s)return{outcome:"blocked",payload:i};if(t.shouldAbort?.())return{outcome:"aborted",payload:i};const a=t.generation??{timestampMs:s,tiebreaker:co(t.deviceId)},o={holderDeviceId:t.deviceId,generation:a,acquiredAt:s,leasedUntil:s+t.ttlMs};await po({...t,payload:o}),await n(t.guardMs);const c=await r();return c?lo(c.generation,a)>0?{outcome:"lost-race",payload:c}:c.holderDeviceId!==t.deviceId?{outcome:"acquired",payload:o}:{outcome:"acquired",payload:c.leasedUntil>=o.leasedUntil?c:o}:{outcome:"acquired",payload:o}}const yo=gs,wo=bs;function go(t){return Math.floor(t/bs)}function mo(t,e,n,r){const i=s.Binary.keccak256((new TextEncoder).encode(`swarm-id-partition-intent-v1:${t.toHex()}:${e}:${n}:${r}`));return new x(i)}function bo(t,e,n,r,i){const a=mo(t,e,n,r);return s.Binary.keccak256(s.Binary.concatBytes(a.toUint8Array(),i.toUint8Array()))}function vo(t,e,n){const r=s.Binary.keccak256((new TextEncoder).encode(`swarm-id-partition-occupancy-v1:${t.toHex()}:${e}:${n}`));return new x(r)}function So(t,e,n,r){const i=vo(t,e,n);return s.Binary.keccak256(s.Binary.concatBytes(i.toUint8Array(),r.toUint8Array()))}async function ko(t){const e=mo(t.batchId,t.partition,t.deviceId,t.epochBucket),n=t.backupSigner.publicKey().address(),r=bo(t.batchId,t.partition,t.deviceId,t.epochBucket,n),i={deviceId:t.deviceId,generation:t.generation,...void 0!==t.leasedUntil?{leasedUntil:t.leasedUntil}:{}};await xo({bee:t.bee,stamper:t.stamper,backupSigner:t.backupSigner,swarmEncryptionKey:t.swarmEncryptionKey,partition:t.partition,identifier:e,address:r,payload:i})}async function xo(t){const e=(new TextEncoder).encode(JSON.stringify(t.payload)),n={mode:"stamper",bee:t.bee,stamper:t.stamper},r=t.stamper;r instanceof Gs?await r.withIntentSocSlot(t.address,t.partition,()=>hs(n,t.backupSigner,t.identifier,e,{encryptionKey:t.swarmEncryptionKey})):await hs(n,t.backupSigner,t.identifier,e,{encryptionKey:t.swarmEncryptionKey})}const Io=t=>t instanceof Error&&/status code 5\d\d/.test(t.message);async function Ao(t){const e=()=>Je(ze(t.bee,t.owner,t.identifier,t.swarmEncryptionKey),t.timeoutMs??yo,"intent read timed out");for(let n=0;n<2;n++)try{const n=await e(),r=Ze.safeParse(JSON.parse((new TextDecoder).decode(n.payload)));return r.success?(console.debug(`[partition-intent] ${t.logLabel}: FOUND (gen ts=${r.data.generation.timestampMs} leasedUntil=${r.data.leasedUntil??"none"})`),r.data):void console.debug(`[partition-intent] ${t.logLabel}: malformed`)}catch(e){if(Io(e)&&0===n&&!1!==t.retryOn5xx)continue;const r=e instanceof Ye;return void console.debug(`[partition-intent] ${t.logLabel}: ${r?`TIMEOUT (>${t.timeoutMs??yo}ms)`:`missing (${e instanceof Error?e.message:String(e)})`}${Io(e)?" after 5xx retry":""} — treated as no-intent`)}}async function Co(t){return Ao({bee:t.bee,owner:t.backupSigner.publicKey().address(),identifier:mo(t.batchId,t.partition,t.deviceId,t.epochBucket),swarmEncryptionKey:t.swarmEncryptionKey,timeoutMs:t.timeoutMs,retryOn5xx:t.retryOn5xx,logLabel:`read device=${t.deviceId} p=${t.partition} bucket=${t.epochBucket}`})}async function Uo(t){return Ao({bee:t.bee,owner:t.backupSigner.publicKey().address(),identifier:vo(t.batchId,t.partition,t.epochBucket),swarmEncryptionKey:t.swarmEncryptionKey,timeoutMs:t.timeoutMs,logLabel:`occupancy p=${t.partition} bucket=${t.epochBucket}`})}const Po=new Uint8Array(64),Eo=ae({counters:_e(Uint32Array).refine(t=>t.length===xs,{message:"counters must have 65536 entries"})});function $o(t,e){const n=new Uint8Array(4);new DataView(n.buffer).setUint32(0,e,!1);const r=s.Binary.keccak256(s.Binary.concatBytes((new TextEncoder).encode("swarm-id-partition-state-v1"),t.toUint8Array(),n));return new ht(r)}const Do=bs,Bo=Symbol("state-pointer-read-timed-out");function To(t){return Math.floor(t/Do)}const Oo=ae({referenceHex:ue()});function Mo(t,e){const n=new Uint8Array(8);return new DataView(n.buffer).setBigUint64(0,BigInt(e),!1),new x(s.Binary.keccak256(s.Binary.concatBytes(t.toUint8Array(),n)))}async function Ro(t){const e=Mo($o(t.batchId,t.partition),To(t.nowMs)),n=t.backupSigner.publicKey().address(),r=Fo(e,n),i=(new TextEncoder).encode(JSON.stringify({referenceHex:t.referenceHex})),s={mode:"stamper",bee:t.bee,stamper:t.stamper};t.stamper instanceof Gs?await t.stamper.withIntentSocSlot(r,t.partition,()=>hs(s,t.backupSigner,e,i,{encryptionKey:t.swarmEncryptionKey})):await hs(s,t.backupSigner,e,i,{encryptionKey:t.swarmEncryptionKey})}function Fo(t,e){return s.Binary.keccak256(s.Binary.concatBytes(t.toUint8Array(),e.toUint8Array()))}function qo(t,e,n,r){return Fo(Mo($o(t,e),To(r)),n)}async function Lo(t){const e=$o(t.batchId,t.partition),n=new Set,r=To(t.nowMs);if(n.add(r),n.add(r-1),void 0!==t.holderLeasedUntilMs){const e=To(t.holderLeasedUntilMs);for(let r=To(t.holderLeasedUntilMs-ms)-2;r<=e;r++)n.add(r)}const i=Array.from(n).sort((t,e)=>e-t),s=await Promise.all(i.map(async n=>{const r=Mo(e,n);try{const e=await Je(ze(t.bee,t.owner,r,t.swarmEncryptionKey),2500,"state-pointer read timed out"),n=Oo.safeParse(JSON.parse((new TextDecoder).decode(e.payload)));return n.success?n.data:void 0}catch(t){return t instanceof Ye?Bo:void 0}}));for(let t=0;t<s.length;t++){const e=s[t];if(void 0!==e&&e!==Bo){return{pointer:e,inconclusive:s.slice(0,t).some(t=>t===Bo)}}}return{pointer:void 0,inconclusive:s.some(t=>t===Bo)}}async function Ko(t,e,n){const r=await Qe(t,new m(e).toHex()),i=64*n;if(r.length!==i)throw new Error(`reference chunk has ${r.length} bytes, expected ${i} (${n} × 64)`);return Array.from({length:n},(t,e)=>r.slice(64*e,64*(e+1)))}function No(t){for(let e=0;e<t.length;e++)if(0!==t[e])return!1;return!0}function Ho(t,e){let n=be(t);for(;e.has(Es(n.address.toUint8Array()));)n=be(t);const r=n.address.toUint8Array();return e.add(Es(r)),{address:r,reference:n.reference.toUint8Array(),data:n.data}}function jo(t){for(let e=0;e<t.length;e++)if(0!==t[e])return!1;return!0}class Wo{constructor(t){this.opts=t,this.holders=new Map,this.releasedPartitions=new Map,this.lastSeenLeasedUntil=new Map,this.unreadableLocks=new Set,this.closed=!1,this.pendingBeaconPublish=Promise.resolve()}static async fromSwarmEncryptionKey(t){const e=ye(t.swarmEncryptionKey),n=await Ae(e,Ue),r=new I(n);return new Wo({...t,backupSigner:r,get bee(){return t.bee}})}async refreshFromSwarm(t){const e=this.now();this.holders.clear(),this.releasedPartitions.clear(),this.lastSeenLeasedUntil.clear(),this.unreadableLocks.clear();const n=await Promise.all(Array.from({length:t},(t,e)=>Je(ho({bee:this.opts.bee,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e}),2500,"lock read timed out").catch(()=>{this.unreadableLocks.add(e)})));for(let r=0;r<t;r++){const t=n[r];if(!t){console.debug(`[PartitionLease] refresh p=${r}: no readable lock`);continue}if(t.holderDeviceId===oo){console.debug(`[PartitionLease] refresh p=${r}: released sentinel`),this.releasedPartitions.set(r,t.generation),this.lastSeenLeasedUntil.set(r,t.leasedUntil);continue}const i=t.holderDeviceId===this.opts.deviceId?" (self)":"";t.leasedUntil<=e?(console.debug(`[PartitionLease] refresh p=${r}: EXPIRED holder ${t.holderDeviceId}${i} (until ${t.leasedUntil} <= now ${e})`),this.lastSeenLeasedUntil.set(r,t.leasedUntil)):(console.debug(`[PartitionLease] refresh p=${r}: held by ${t.holderDeviceId}${i} until ${t.leasedUntil}`),this.holders.set(r,{deviceId:t.holderDeviceId,generation:t.generation,acquiredAt:t.acquiredAt,leasedUntil:t.leasedUntil}))}const r=Array.from(this.holders.entries()).map(([t,e])=>`${t}->${e.deviceId}`).join(",");console.debug(`[PartitionLease] refresh: live holders={${r}} self=${this.opts.deviceId}`)}async refreshHoldersFromPresence(t){this.applyPresence(await this.readPresence(t))}async readPresence(t){const e=this.now(),n=(this.opts.knownDeviceIds?.()??[]).filter(t=>t!==this.opts.deviceId);if(0===n.length)return[];const r=go(e),i=[r,r-1];return Promise.all(Array.from({length:t}).flatMap((t,e)=>n.flatMap(t=>i.map(async n=>({partition:e,deviceId:t,bucket:n,intent:await Co({bee:this.opts.bee,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e,deviceId:t,epochBucket:n,timeoutMs:this.opts.intentReadTimeoutMs})})))))}applyPresence(t){const e=this.now();for(const{partition:n,deviceId:r,bucket:i,intent:s}of t){if(!s)continue;if(this.releasedPartitions.has(n))continue;if(void 0===s.leasedUntil||s.leasedUntil<=e-wo)continue;const t=s.leasedUntil,a=this.holders.get(n);a&&a.deviceId===this.opts.deviceId||(!a||t>a.leasedUntil)&&(this.holders.set(n,{deviceId:r,generation:s.generation,acquiredAt:a?.acquiredAt??0,leasedUntil:t}),console.debug(`[PartitionLease] presence p=${n}: live holder ${r} (bucket ${i}, leasedUntil ${t})`))}}async refreshHoldersFromOccupancy(t){this.applyOccupancy(await this.readOccupancy(t))}async readOccupancy(t){const e=go(this.now()),n=[e,e-1];return Promise.all(Array.from({length:t}).flatMap((t,e)=>n.map(async t=>({partition:e,occupancy:await Uo({bee:this.opts.bee,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e,epochBucket:t,timeoutMs:this.opts.intentReadTimeoutMs})}))))}applyOccupancy(t){const e=this.now();for(const{partition:n,occupancy:r}of t){if(!r||void 0===r.leasedUntil)continue;if(r.leasedUntil<=e)continue;if(r.deviceId===this.opts.deviceId)continue;if(this.releasedPartitions.has(n))continue;const t=this.holders.get(n);t&&t.deviceId===this.opts.deviceId||(!t||r.leasedUntil>t.leasedUntil)&&(this.holders.set(n,{deviceId:r.deviceId,generation:r.generation,acquiredAt:t?.acquiredAt??0,leasedUntil:r.leasedUntil}),console.debug(`[PartitionLease] occupancy p=${n}: live holder ${r.deviceId} (leasedUntil ${r.leasedUntil})`))}}isActive(t){for(const e of this.holders.values())if(e.deviceId===t)return!0;return!1}heldPartition(){for(const[t,e]of this.holders)if(e.deviceId===this.opts.deviceId)return t}getHolders(){return Array.from(this.holders.entries()).map(([t,e])=>({partition:t,deviceId:e.deviceId,leasedUntil:e.leasedUntil}))}pickFreeOrExpired(t){const e=uo(this.opts.deviceId,t);for(let n=0;n<t;n++){const r=(e+n)%t,i=this.holders.get(r);if(!i||i.deviceId===this.opts.deviceId)return r}}async acquire(t){const{partitionCount:e}=t;if(this.closed=!1,this.publishedReferences=void 0,this.publishedCounter=void 0,this.lastReferenceHex=void 0,this.lastFullPublishEpoch=void 0,e<=1)return{partition:void 0,partitionCount:1,localCounter:new Uint32Array(xs),isReadOnly:!1};const n=this.now(),r=uo(this.opts.deviceId,e),[,i,s,a]=await Promise.all([this.refreshFromSwarm(e),this.readPresence(e),this.readOccupancy(e),this.speculativeStatePointer(r,n)]);this.applyPresence(i),this.applyOccupancy(s);const o=this.heldPartition(),c=o??this.pickFreeOrExpired(e),d=!(this.opts.knownDeviceIds?.()??[]).some(t=>t!==this.opts.deviceId)&&Array.from(this.holders.values()).every(t=>t.deviceId===this.opts.deviceId)&&0===this.releasedPartitions.size&&0===this.lastSeenLeasedUntil.size&&0===this.unreadableLocks.size;return console.debug(`[PartitionLease] acquire: chosen=${c} via=${void 0!==o?"held(re-acquire)":"pickFreeOrExpired"} home=${uo(this.opts.deviceId,e)} liveHolders=${this.holders.size} partitionCount=${e}`),void 0===c?{partition:void 0,partitionCount:e,localCounter:new Uint32Array(xs),isReadOnly:!0}:this.claimPartition({partition:c,partitionCount:e,freshClaim:void 0===o,nowMs:n,speculativePointer:c===r?a:void 0,soloClean:d})}async speculativeStatePointer(t,e){const{batchId:n}=this.opts;try{return await Lo({bee:this.opts.bee,owner:this.opts.backupSigner.publicKey().address(),swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:n,partition:t,nowMs:e})}catch{return}}async claimPartition(t){const{partition:e,partitionCount:n,freshClaim:r}=t,{stamper:i,batchId:a,batchDepth:o}=this.requireWriteContext(),c=i instanceof Gs?await i.getSyncedReference(e):void 0,d=await async function(t,e){const{bee:n,owner:r,swarmEncryptionKey:i,batchId:a,partition:o,batchDepth:c,holderLeasedUntilMs:d,lockUnreadable:u,nowMs:l=Date.now()}=t,h=void 0===d?t.prefetchedPointer:void 0,{pointer:p,inconclusive:f}=h??await Lo({bee:n,owner:r,swarmEncryptionKey:i,batchId:a,partition:o,nowMs:l,holderLeasedUntilMs:d});if(!p)return u||f&&void 0!==d?(console.warn(`[partition-state] partition ${o}: no pointer found but the read was inconclusive (lockUnreadable=${!0===u} pointerTimedOut=${f}); degrading to read-only instead of resuming.`),{unchanged:!1,readFailed:!0}):void 0!==e?{referenceHex:e,unchanged:!0}:{localCounter:new Uint32Array(xs),unchanged:!1};if(f)return console.warn(`[partition-state] partition ${o}: found a pointer but a newer bucket read timed out (a fresher resume point may be hidden); degrading to read-only instead of resuming from a stale candidate.`),{unchanged:!1,readFailed:!0};const y=p.referenceHex,w=new m(y).toUint8Array();if(void 0!==e&&y===e){const{numUtilizationChunks:t}=Ps(c);return{referenceHex:y,unchanged:!0,references:await Ko(n,w,t).catch(()=>{})}}const g=new Uint32Array(xs),b=[Es(w.slice(0,32))];let v=[];try{const{numUtilizationChunks:t}=Ps(c);v=await Ko(n,w,t);const e=await Promise.all(v.map((t,e)=>No(t)?void 0:Qe(n,s.Binary.uint8ArrayToHex(t)).then(n=>({i:e,ref:t,data:n}))));for(const t of e)void 0!==t&&(Bs(g,t.i,t.data,c),b.push(Es(t.ref.slice(0,32))));Eo.parse({counters:g})}catch(t){return console.warn(`[partition-state] reading partition ${o} counter failed; degrading to read-only:`,t),{unchanged:!1,readFailed:!0}}return{localCounter:g,referenceHex:y,unchanged:!1,stateBuckets:b,references:v}}({bee:this.opts.bee,owner:this.opts.backupSigner.publicKey().address(),swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:a,partition:e,batchDepth:o,holderLeasedUntilMs:this.holders.get(e)?.leasedUntil??this.lastSeenLeasedUntil.get(e),lockUnreadable:this.unreadableLocks.has(e),nowMs:t.nowMs,prefetchedPointer:t.speculativePointer},c);if(d.readFailed)return console.debug(`[PartitionLease] Partition ${e} state read failed; falling back to read-only without claiming.`),{partition:void 0,partitionCount:n,localCounter:new Uint32Array(xs),isReadOnly:!0};const u=d.unchanged&&i instanceof Gs?i.buildLeaseLocalCounter():d.localCounter??new Uint32Array(xs),l={timestampMs:this.now(),tiebreaker:co(this.opts.deviceId)},h=this.opts.knownDeviceIds?.()??[],p=h.some(t=>t!==this.opts.deviceId);if(console.debug(`[PartitionLease] claim p=${e} self=${this.opts.deviceId} freshClaim=${r} knownDevices=${h.length} intentRound=${r&&p}`),r&&p){if("lose"===await async function(t){const e=t.knownDeviceIds.filter(e=>e!==t.deviceId);if(0===e.length)return"win";const n=go(t.now),r=n-1;await ko({bee:t.bee,stamper:t.stamper,backupSigner:t.backupSigner,swarmEncryptionKey:t.swarmEncryptionKey,batchId:t.batchId,partition:t.partition,deviceId:t.deviceId,epochBucket:n,generation:t.generation});const i=async()=>{const i=await Promise.all(e.flatMap(e=>[n,r].map(async n=>({rivalId:e,intent:await Co({bee:t.bee,backupSigner:t.backupSigner,swarmEncryptionKey:t.swarmEncryptionKey,batchId:t.batchId,partition:t.partition,deviceId:e,epochBucket:n,timeoutMs:t.timeoutMs,retryOn5xx:!1})}))));for(const e of i){const n=e.intent;if(n)if(void 0===n.leasedUntil){if(lo(n.generation,t.generation)<0)return{rivalId:e.rivalId,reason:"earlier-intent"}}else if(n.leasedUntil>t.now-wo){if(t.releasedGeneration&&lo(n.generation,t.releasedGeneration)<=0)continue;return{rivalId:e.rivalId,reason:"live-beacon"}}}},s=t.guardWindowMs??0,a=t.guardPollMs??2500,o=Date.now()+s;let c,d=0;do{if(d>0&&await Ve(a),d++,c=await i(),c)break}while(Date.now()<o);const u=c?"lose":"win";return console.debug(`[partition-intent] round p=${t.partition} self=${t.deviceId} rivals=${e.length} polls=${d} → ${u}`+(c?` (beaten by ${c.rivalId} via ${c.reason})`:"")),u}({bee:this.opts.bee,stamper:i,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e,deviceId:this.opts.deviceId,generation:l,knownDeviceIds:h,now:this.now(),timeoutMs:this.opts.intentReadTimeoutMs,guardWindowMs:this.opts.intentGuardWindowMs??12e3,guardPollMs:this.opts.intentGuardPollMs??2500,releasedGeneration:this.releasedPartitions.get(e)}))return console.debug(`[PartitionLease] Lost intent round for partition ${e}; falling back to read-only.`),{partition:void 0,partitionCount:n,localCounter:new Uint32Array(xs),isReadOnly:!0}}const f=await fo({bee:this.opts.bee,stamper:i,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e,deviceId:this.opts.deviceId,ttlMs:ms,guardMs:t.soloClean?0:this.opts.guardMs??2e3,wait:this.opts.wait,generation:l,now:()=>this.now(),skipInitialRead:!0});if("acquired"!==f.outcome||!f.payload)return console.debug(`[PartitionLease] Lock acquire for partition ${e} outcome=${f.outcome}; falling back to read-only.`),{partition:void 0,partitionCount:n,localCounter:new Uint32Array(xs),isReadOnly:!0};!d.unchanged&&d.referenceHex&&i instanceof Gs&&(await i.setSyncedReference(e,d.referenceHex),d.stateBuckets&&await i.setProtectedStateBuckets(e,d.stateBuckets)),this.publishedReferences=d.references,this.publishedCounter=u.slice(),this.lastFullPublishEpoch=go(this.now()),this.lastReferenceHex=d.referenceHex;const y=f.payload;return this.self={partition:e,generation:y.generation,acquiredAt:y.acquiredAt,leasedUntil:y.leasedUntil},this.holders.set(e,{deviceId:this.opts.deviceId,generation:y.generation,acquiredAt:y.acquiredAt,leasedUntil:y.leasedUntil}),this.pendingBeaconPublish=this.publishPresenceBeacon(e,y.generation,y.leasedUntil),{partition:e,partitionCount:n,localCounter:u,isReadOnly:!1,lockPayload:y}}get beaconPublishSettled(){return this.pendingBeaconPublish}async refresh(){if(!this.self)return"lost";if(await this.pendingBeaconPublish,!this.self)return"lost";const t=this.self.partition,{stamper:e}=this.requireWriteContext(),n=await fo({bee:this.opts.bee,stamper:e,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:t,deviceId:this.opts.deviceId,ttlMs:ms,guardMs:this.opts.guardMs??2e3,wait:this.opts.wait,generation:this.self.generation,now:()=>this.now(),shouldAbort:()=>this.closed});if(!this.self)return"lost";if("acquired"!==n.outcome||!n.payload)return console.debug(`[PartitionLease] Refresh on partition ${t} returned ${n.outcome}.`),"lost";const r=n.payload;return this.self={partition:t,generation:r.generation,acquiredAt:r.acquiredAt,leasedUntil:r.leasedUntil},await this.publishPresenceBeacon(t,r.generation,r.leasedUntil),await this.foreignBeaconBeatsUs(t,r.generation)||await this.occupancyBeaconBeatsUs(t,r.generation)?(console.debug(`[PartitionLease] Refresh on partition ${t}: an earlier-generation peer holds it; yielding.`),"displaced"):"held"}async foreignBeaconBeatsUs(t,e){const n=this.now(),r=(this.opts.knownDeviceIds?.()??[]).filter(t=>t!==this.opts.deviceId);if(0===r.length)return!1;const i=go(n);return(await Promise.all(r.flatMap(e=>[i,i-1].map(n=>Co({bee:this.opts.bee,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:t,deviceId:e,epochBucket:n,timeoutMs:this.opts.intentReadTimeoutMs}))))).some(r=>void 0!==r?.leasedUntil&&r.leasedUntil>n-wo&&lo(r.generation,e)<0&&this.beaconOutranksRelease(t,r.generation))}beaconOutranksRelease(t,e){const n=this.releasedPartitions.get(t);return void 0===n||lo(e,n)>0}async occupancyBeaconBeatsUs(t,e){const n=this.now(),r=go(n);return(await Promise.all([r,r-1].map(e=>Uo({bee:this.opts.bee,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:t,epochBucket:e,timeoutMs:this.opts.intentReadTimeoutMs})))).some(r=>void 0!==r&&r.deviceId!==this.opts.deviceId&&void 0!==r.leasedUntil&&r.leasedUntil>n-wo&&lo(r.generation,e)<0&&this.beaconOutranksRelease(t,r.generation))}async publishPresenceBeacon(t,e,n){const{stamper:r}=this.requireWriteContext(),i=go(this.now());try{await ko({bee:this.opts.bee,stamper:r,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:t,deviceId:this.opts.deviceId,epochBucket:i,generation:e,leasedUntil:n}),await async function(t){const e=vo(t.batchId,t.partition,t.epochBucket),n=t.backupSigner.publicKey().address(),r=So(t.batchId,t.partition,t.epochBucket,n),i={deviceId:t.deviceId,generation:t.generation,leasedUntil:t.leasedUntil};await xo({bee:t.bee,stamper:t.stamper,backupSigner:t.backupSigner,swarmEncryptionKey:t.swarmEncryptionKey,partition:t.partition,identifier:e,address:r,payload:i})}({bee:this.opts.bee,stamper:r,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:t,deviceId:this.opts.deviceId,epochBucket:i,generation:e,leasedUntil:n})}catch(e){console.debug(`[PartitionLease] presence beacon publish failed for p=${t} (self-heals next tick):`,e)}}async release(t){if(!this.self)return;const{partition:e,generation:n,acquiredAt:r}=this.self;this.closed=!0,await this.pendingBeaconPublish;const{stamper:i}=this.requireWriteContext();await this.flushState(e,t),await async function(t){const e=t.now??Date.now,n=await ho(t);if(n){const e=e=>(console.info(`[partition-lock] Skipping release sentinel for partition ${t.partition}: ${e}.`,n),{outcome:"skipped",observed:n});if(n.holderDeviceId===oo)return e("already released");if(n.holderDeviceId!==t.deviceId)return e("a peer holds the partition");if(lo(n.generation,t.releasedGeneration)>0)return e("a newer own claim exists (successor re-acquired)")}const r={holderDeviceId:oo,generation:t.releasedGeneration,acquiredAt:t.acquiredAt,leasedUntil:e()};return await po({...t,payload:r}),{outcome:"released",observed:n}}({bee:this.opts.bee,stamper:i,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e,deviceId:this.opts.deviceId,releasedGeneration:n,acquiredAt:r,now:()=>this.now()}),this.self=void 0,this.holders.delete(e)}async publishState(t){this.self&&await this.flushState(this.self.partition,t)}async flushState(t,e,n){const{stamper:r,batchId:i,batchDepth:a}=this.requireWriteContext(),o=go(this.now()),c=!0===n?.forceFull||o!==this.lastFullPublishEpoch,d=await async function(t){const{bee:e,stamper:n,batchId:r,batchDepth:i,partition:a,localCounter:o,backupSigner:c,swarmEncryptionKey:d,previousReferences:u,previousCounter:l,deviceId:h,nowMs:p=Date.now()}=t;Eo.parse({counters:o});const{numUtilizationChunks:f}=Ps(i),y={mode:"stamper",bee:e,stamper:n},w=c.publicKey().address(),g=n instanceof Gs?n:void 0,m=o.slice(),b=void 0!==u&&u.length===f&&void 0!==l;if(void 0!==l)for(let t=0;t<xs;t++)if(o[t]<l[t])throw new Error(`[partition-state] publish p=${a}: counter regressed at bucket ${t} (${o[t]} < previous ${l[t]}) — monotonicity violation; refusing to publish a state a takeover could resume past an acked slot.`);const v=Array.from({length:f},(t,e)=>e),S=b?v.filter(t=>!function(t,e){if(t.length!==e.length)return!1;for(let n=0;n<t.length;n++)if(t[n]!==e[n])return!1;return!0}(Ds(o,t,i),Ds(l,t,i))):v.filter(t=>!No(Ds(o,t,i))),k=new Set(S),x=b?u.map(t=>t.slice()):v.map(()=>Po.slice()),I=new Set([ws(r,a,w),...g?.getCleanChunkBuckets()??[]]);if(b)for(let t=0;t<f;t++)k.has(t)||No(x[t])||I.add(Es(x[t].slice(0,32)));const A=p;for(const t of[A,A-Do])I.add(Es(qo(r,a,w,t)));const C=go(A);for(const t of[C,C-1])I.add(Es(So(r,a,t,w))),void 0!==h&&I.add(Es(bo(r,a,h,t,w)));const U=S.map(t=>{const e=Ho(Ds(o,t,i),I);return x[t]=e.reference,g?.markReservedUtilizationChunk(e.address,a),{data:e.data}}),P=Ho(s.Binary.concatBytes(...x),I);g?.markReservedUtilizationChunk(P.address,a);const E=s.Binary.uint8ArrayToHex(P.reference),$=[...S.map(t=>Es(x[t].slice(0,32))),Es(P.address)];if(new Set($).size!==$.length)throw new Error(`[partition-state] publish p=${a}: reserved-slot chunks collided on a bucket — parallel PUTs would race/evict. This is a bucket-selection regression (pickReservedChunkKey / claimedBuckets).`);const D=Date.now();await Promise.all([...U.map(t=>ps(y,t.data,{deferred:!1})),ps(y,P.data,{deferred:!1})]),await Ro({bee:e,stamper:n,backupSigner:c,swarmEncryptionKey:d,batchId:r,partition:a,referenceHex:E,nowMs:A}),console.debug(`[partition-state] publish p=${a} incremental=${b} counterChunks=${U.length}/${f} writes=${U.length+2} durationMs=${Date.now()-D}`),g?.clearReservedUtilizationChunks();const B=x.filter(t=>!No(t)).map(t=>Es(t.slice(0,32)));return B.push(Es(P.address)),{referenceHex:E,stateBuckets:B,references:x,publishedCounter:m}}({bee:this.opts.bee,stamper:r,batchId:i,batchDepth:a,partition:t,localCounter:e,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,previousReferences:c?void 0:this.publishedReferences,previousCounter:c?void 0:this.publishedCounter,deviceId:this.opts.deviceId,nowMs:this.now()});c&&(this.lastFullPublishEpoch=o),this.publishedReferences=d.references,this.publishedCounter=d.publishedCounter,this.lastReferenceHex=d.referenceHex,r instanceof Gs&&(await r.setSyncedReference(t,d.referenceHex),await r.setProtectedStateBuckets(t,d.stateBuckets))}seedReferenceHex(t){this.lastReferenceHex=t}async heartbeatStatePointer(t){if(!this.self||void 0===this.lastReferenceHex)return;const{stamper:e,batchId:n}=this.requireWriteContext();void 0!==t&&this.retainedChunksCollideThisEpoch(this.self.partition)?await this.flushState(this.self.partition,t,{forceFull:!0}):await Ro({bee:this.opts.bee,stamper:e,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:n,partition:this.self.partition,referenceHex:this.lastReferenceHex,nowMs:this.now()})}retainedChunksCollideThisEpoch(t){if(void 0===this.publishedReferences)return!1;const e=this.opts.backupSigner.publicKey().address(),{batchId:n}=this.requireWriteContext(),r=this.now(),i=go(r),s=new Set([ws(n,t,e),Es(qo(n,t,e,r)),Es(So(n,t,i,e)),Es(bo(n,t,this.opts.deviceId,i,e))]);for(const t of this.publishedReferences)if(!jo(t)&&s.has(Es(t.slice(0,32))))return!0;if(void 0!==this.lastReferenceHex){const t=new m(this.lastReferenceHex).toUint8Array().slice(0,32);if(s.has(Es(t)))return!0}return!1}get currentPartition(){return this.self?.partition}get leasedUntil(){return this.self?.leasedUntil}bumpLocalLease(t){this.self&&(this.self={...this.self,leasedUntil:this.now()+t})}adoptIfLive(){if(this.self&&!(this.self.leasedUntil<=this.now()))return this.self={...this.self,leasedUntil:this.now()+ms},this.holders.set(this.self.partition,{deviceId:this.opts.deviceId,generation:this.self.generation,acquiredAt:this.self.acquiredAt,leasedUntil:this.self.leasedUntil}),this.self.partition}serialize(){return{deviceId:this.opts.deviceId,batchId:this.opts.batchId.toHex(),self:this.self}}hydrate(t){t.deviceId===this.opts.deviceId&&t.batchId===this.opts.batchId.toHex()&&(this.self=t.self)}requireWriteContext(){if(!this.opts.stamper||void 0===this.opts.batchDepth)throw new Error("PartitionLease: write operation requires stamper + batchDepth (read-only instance)");return{stamper:this.opts.stamper,batchId:this.opts.batchId,batchDepth:this.opts.batchDepth}}now(){return this.opts.now?this.opts.now():Date.now()}}class zo extends Error{constructor(t="All partitions are held by other devices.",e){super(t),this.accountId=e,this.name="PartitionContendedError"}}function Go(t,e,n){return void 0!==t&&t.holderDeviceId!==n&&t.holderDeviceId!==oo&&t.leasedUntil>e}class Vo{constructor(t){this.readOnly=!1,this.pendingAcquire=!1,this.lastLeaseValidatedAt=0,this.lastLeaseActivityAt=0,this.activeUploadCount=0,this.pointerHeartbeatFailingSince=void 0,this.disposed=!1,this.leaseEpoch=0,this.deps=t}get currentPartition(){return this.partitionLease?.currentPartition}get isReadOnly(){return this.readOnly}get partitionCount(){return this.deps.partitionCount}get stamperRef(){return this.deps.stamper}get accountId(){return this.deps.accountId}get batchId(){return this.deps.batchId}async withWrite(t,e){const n=e?.wait??("persistent"===this.deps.mode?"block":"skip");return this.lockAndFlush(async()=>{await this.ensureLease(n),this.ensureHeldForUpload();const r=await this.buildStamperTarget(e);this.lastLeaseActivityAt=Date.now(),this.activeUploadCount++;try{const e=await t(r);await this.ensureLeaseStillValid();const n=this.deps.stamper.getLocalCounter();if(void 0!==n)await(this.partitionLease?.publishState(n)),this.pointerHeartbeatFailingSince=void 0;else if(void 0!==this.currentPartition)throw new Error(`[BatchWriteCoordinator] Held partition ${this.currentPartition} but the stamper exposed no local counter — cannot publish the slot reservation (ack-after-publish); failing the upload.`);return e}finally{this.activeUploadCount--,this.lastLeaseActivityAt=Date.now()}})}startLease(){this.disposed||"persistent"===this.deps.mode&&(this.deps.partitionCount<=1||(this.pendingAcquire=!0,this.lockAndFlush(()=>this.ensureLease("block")).catch(t=>console.warn("[BatchWriteCoordinator] Background lease warm-up failed:",t))))}teardown(){this.disposed=!0,this.leaseEpoch++,void 0!==this.partitionRefreshTimer&&(clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=void 0),this.slotWait?.wake?.();const t=this.partitionLease,e=t?.currentPartition,n=this.deps.stamper;if(t){const e=n.getLocalCounter();void 0!==e&&this.lock(()=>t.release(e)).catch(t=>console.warn("[BatchWriteCoordinator] Partition lease release failed:",t)),n.invalidateLease(),n.unbindPartition()}this.partitionLease=void 0,this.readOnly=!1,this.lastLeaseValidatedAt=0,this.deps.writeLeaseCache?.(void 0),this.emitLeaseChange(),void 0!==e&&this.deps.onLeaseReleased?.(e)}async ensureLease(t){try{if(this.deps.partitionCount<=1)return;if(this.disposed)throw new Error("BatchWriteCoordinator has been torn down.");if(this.pendingAcquire||this.partitionLease&&!this.readOnly||(this.pendingAcquire=!0),this.pendingAcquire){if(this.pendingAcquire=!1,"skip"===t){if(await this.acquire(),this.readOnly||void 0===this.currentPartition)throw new zo(void 0,this.deps.accountId);return}try{await Je(this.acquireWithSlotWait(),45e3,"Partition lease timed out after 45000ms")}catch(t){throw console.warn("[BatchWriteCoordinator] Partition lease acquisition failed, pausing background work:",t),this.pauseLeaseBackgroundWork(),t}return}await this.ensureLeaseStillValid()}finally{this.emitLeaseChange()}}async acquire(){const{stamper:t,partitionCount:e,swarmEncryptionKey:n}=this.deps;if(e<=1)return void(this.readOnly=!1);if(this.disposed)return;const r=this.leaseEpoch;if(this.deps.refreshKnownDeviceIds?.().catch(t=>console.warn("[BatchWriteCoordinator] Background device-registry refresh failed (using current registry):",t)),this.leaseEpoch===r&&!this.disposed)try{const i=this.deps,s=await Wo.fromSwarmEncryptionKey({get bee(){return i.bee},deviceId:this.deps.deviceId,batchId:new p(this.deps.batchId),batchDepth:t.depth,swarmEncryptionKey:n,stamper:t,knownDeviceIds:this.deps.knownDeviceIds,intentReadTimeoutMs:this.deps.intentReadTimeoutMs,intentGuardWindowMs:this.deps.intentGuardWindowMs,intentGuardPollMs:this.deps.intentGuardPollMs});if(this.leaseEpoch!==r)return;const a=this.deps.readLeaseCache?.();a&&s.hydrate(a);const o=s.adoptIfLive();if(void 0!==o){const n=await t.getSyncedReference(o).catch(()=>{});if(this.leaseEpoch!==r||this.disposed)return;return console.debug(`[BatchWriteCoordinator] Adopted cached lease p=${o} (no acquire/intent round) for device=${this.deps.deviceId}`),this.partitionLease=s,this.readOnly=!1,t.bindPartition({partition:o,partitionCount:e,localCounter:t.buildLeaseLocalCounter()}),this.syncStamperLeaseDeadline(),s.seedReferenceHex(n),this.deps.writeLeaseCache?.(s.serialize()),this.startRefreshTimer(s),this.lastLeaseValidatedAt=Date.now(),this.lastLeaseActivityAt=Date.now(),this.pointerHeartbeatFailingSince=void 0,void this.deps.onLeaseAcquired?.(o)}const c=await s.acquire({partitionCount:e});if(this.leaseEpoch!==r)return;if(this.partitionLease=s,this.readOnly=c.isReadOnly,void 0===c.partition)return c.isReadOnly&&console.warn("[BatchWriteCoordinator] All partitions held; entering read-only mode until a peer releases."),void this.deps.writeLeaseCache?.(s.serialize());t.bindPartition({partition:c.partition,partitionCount:c.partitionCount,localCounter:c.localCounter}),this.syncStamperLeaseDeadline(),this.deps.writeLeaseCache?.(s.serialize()),this.startRefreshTimer(s),this.lastLeaseValidatedAt=Date.now(),this.lastLeaseActivityAt=Date.now(),this.pointerHeartbeatFailingSince=void 0,this.deps.onLeaseAcquired?.(c.partition)}catch(e){if(console.error("[BatchWriteCoordinator] Failed to acquire partition lease:",e),this.leaseEpoch!==r)throw e;throw void 0!==this.partitionRefreshTimer&&(clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=void 0),t.invalidateLease(),t.unbindPartition(),this.partitionLease=void 0,this.readOnly=!1,this.deps.writeLeaseCache?.(void 0),e}}async acquireWithSlotWait(){const t=Date.now()+3e4,e=this.leaseEpoch,n={maybeFree:!1,rescansLeft:0,rescanWindowUsed:!1};this.slotWait=n;try{await this.pollForSlot(t,e,n)}finally{this.slotWait===n&&(this.slotWait=void 0)}}async pollForSlot(t,e,n){for(;;){if(await this.acquire(),this.disposed)return;if(!this.readOnly)return;const r=n.maybeFree;n.maybeFree=!1;const i=r?0:n.rescansLeft>0?1500:Cs;if(Date.now()+i>t)throw new zo("No partition available — all slots are held by other devices.",this.deps.accountId);if(r||(n.rescansLeft>0?(n.rescansLeft--,await this.sleepUntilWoken(n,1500)):(this.deps.onSlotWait?.(),await this.sleepUntilWoken(n,Cs))),this.leaseEpoch!==e)return}}sleepUntilWoken(t,e){return new Promise(n=>{const r=()=>{clearTimeout(i),t.wake=void 0,t.maybeFree=!1,n()},i=setTimeout(r,e);t.wake=r})}syncStamperLeaseDeadline(){this.deps.stamper.setLeaseValidUntil(this.partitionLease?.leasedUntil)}leaseNearExpiry(){const t=this.partitionLease?.leasedUntil;return void 0!==t&&Date.now()>=t-2e3}async ensureLeaseStillValid(){if(!this.partitionLease||this.readOnly)return;const t=this.partitionLease.currentPartition;if(void 0===t)return;if(!this.leaseNearExpiry()&&Date.now()-this.lastLeaseValidatedAt<Cs)return;let e;try{e=await ho({bee:this.deps.bee,backupSigner:this.deps.backupSigner,swarmEncryptionKey:this.deps.swarmEncryptionKey,batchId:new p(this.deps.batchId),partition:t})}catch(t){return void console.warn("[BatchWriteCoordinator] Lease freshness check read failed:",t)}if(Go(e,Date.now(),this.deps.deviceId))throw console.warn(`[BatchWriteCoordinator] Lease freshness check: partition ${t} taken by ${e.holderDeviceId}; demoting.`),this.signalLeaseLost(),this.finalizeDemote(),new Error("Partition lease was reclaimed by another device.");if(void 0!==e&&e.holderDeviceId===oo){let e;try{e=await this.partitionLease.refresh()}catch(t){return void console.warn("[BatchWriteCoordinator] Sentinel re-assert hit a transient error; keeping lease:",t)}if("held"!==e)throw console.warn(`[BatchWriteCoordinator] Sentinel re-assert: partition ${t} taken by a peer; demoting.`),this.signalLeaseLost(),this.finalizeDemote(),new Error("Partition lease was reclaimed by another device.");return this.syncStamperLeaseDeadline(),this.lastLeaseValidatedAt=Date.now(),void this.deps.writeLeaseCache?.(this.partitionLease.serialize())}this.partitionLease.bumpLocalLease(ms),this.syncStamperLeaseDeadline(),this.lastLeaseValidatedAt=Date.now(),this.deps.writeLeaseCache?.(this.partitionLease.serialize())}signalLeaseLost(){this.deps.stamper.invalidateLease()}finalizeDemote(){this.leaseEpoch++,this.deps.stamper.unbindPartition(),void 0!==this.partitionRefreshTimer&&(clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=void 0),this.partitionLease=void 0,this.readOnly=!0,this.lastLeaseValidatedAt=0,this.pointerHeartbeatFailingSince=void 0,this.deps.writeLeaseCache?.(void 0),this.pendingAcquire=!0,this.emitLeaseChange()}startRefreshTimer(t){this.disposed||"persistent"===this.deps.mode&&(void 0!==this.partitionRefreshTimer&&clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=setInterval(()=>{this.refreshTick(t)},Cs))}async refreshTick(t){if(this.disposed||this.partitionLease!==t)return;const e=t.currentPartition;if(void 0===e)return;if((this.deps.knownDeviceIds?.()??[]).some(t=>t!==this.deps.deviceId)&&0===this.activeUploadCount&&Date.now()-this.lastLeaseActivityAt>=3e4)return void await this.lock(async()=>{this.disposed||this.partitionLease===t&&(0!==this.activeUploadCount||Date.now()-this.lastLeaseActivityAt<3e4||await this.yieldIdleLease(t))});let n=!1,r=!1;try{const i=await t.refresh();if("held"===i&&(r=!0),"displaced"===i)n=!0;else if("lost"===i){const t=await ho({bee:this.deps.bee,backupSigner:this.deps.backupSigner,swarmEncryptionKey:this.deps.swarmEncryptionKey,batchId:new p(this.deps.batchId),partition:e});n=Go(t,Date.now(),this.deps.deviceId),!n&&void 0!==t&&t.holderDeviceId===this.deps.deviceId&&t.leasedUntil>Date.now()&&(r=!0)}}catch(t){console.warn("[BatchWriteCoordinator] Lease refresh hit a transient error; keeping lease:",t)}if(n){if(this.disposed||this.partitionLease!==t)return;return console.warn(`[BatchWriteCoordinator] Refresh: partition ${e} taken by a peer; demoting.`),this.signalLeaseLost(),void await this.lock(async()=>{this.disposed||this.partitionLease!==t||this.finalizeDemote()})}if(!this.disposed&&this.partitionLease===t)if(r){if(t.bumpLocalLease(ms),this.syncStamperLeaseDeadline(),this.lastLeaseValidatedAt=Date.now(),this.deps.writeLeaseCache?.(t.serialize()),0===this.activeUploadCount)try{await this.lock(async()=>{this.disposed||this.partitionLease!==t||0===this.activeUploadCount&&await t.heartbeatStatePointer(this.deps.stamper.getLocalCounter())}),this.pointerHeartbeatFailingSince=void 0}catch(n){console.warn("[BatchWriteCoordinator] State-pointer heartbeat failed:",n),this.pointerHeartbeatFailingSince??(this.pointerHeartbeatFailingSince=Date.now()),Date.now()-this.pointerHeartbeatFailingSince>Do&&(console.warn(`[BatchWriteCoordinator] Refresh: partition ${e} state-pointer heartbeat failing persistently; demoting before the resume pointer ages out of the takeover lookup.`),this.signalLeaseLost(),await this.lock(async()=>{this.disposed||this.partitionLease!==t||this.finalizeDemote()}))}}else this.leaseNearExpiry()&&(console.warn(`[BatchWriteCoordinator] Refresh: partition ${e} lease lapsed without a successful renewal; demoting.`),this.signalLeaseLost(),await this.lock(async()=>{this.disposed||this.partitionLease!==t||this.finalizeDemote()}))}async yieldIdleLease(t,e){this.leaseEpoch++;const n=t.currentPartition;void 0!==this.partitionRefreshTimer&&(clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=void 0);const r=this.deps.stamper.getLocalCounter();if(void 0!==r)try{await t.release(r)}catch(t){console.warn("[BatchWriteCoordinator] Idle partition-lease release failed:",t)}this.deps.stamper.unbindPartition(),this.partitionLease=void 0,this.readOnly=!1,this.lastLeaseValidatedAt=0,this.deps.writeLeaseCache?.(void 0),this.emitLeaseChange(),console.info(`[BatchWriteCoordinator] Released idle partition ${n??"?"}; will re-acquire on next write.`),void 0===n||this.disposed||this.deps.onLeaseReleased?.(n,e)}notifySlotMaybeFree(){const t=this.slotWait;t&&(t.rescanWindowUsed||(t.rescanWindowUsed=!0,t.maybeFree=!0,t.rescansLeft=3),t.wake?.())}get canYieldForPeer(){return!this.disposed&&(void 0!==this.partitionLease?.currentPartition&&(0===this.activeUploadCount&&Date.now()-this.lastLeaseActivityAt>=3e3))}async yieldForPeer(t){if(!this.canYieldForPeer)return;const e=this.partitionLease,n=e?.currentPartition;if(!e||void 0===n)return;let r;return await this.lock(async()=>{this.disposed||this.partitionLease!==e||0===this.activeUploadCount&&(Date.now()-this.lastLeaseActivityAt<3e3||(await this.yieldIdleLease(e,t),r=n))}),r}pauseLeaseBackgroundWork(){this.leaseEpoch++,void 0!==this.partitionRefreshTimer&&(clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=void 0),this.partitionLease=void 0,this.readOnly=!1,this.deps.writeLeaseCache?.(void 0)}async buildStamperTarget(t){const e=t?.useWorkers?await(this.deps.getWorkerPool?.(t.workerCount)):void 0;return{mode:"stamper",bee:this.deps.bee,stamper:this.deps.stamper,workerPool:e}}async lockAndFlush(t){return ao(this.deps.batchId,async()=>{try{return await t()}finally{await(this.deps.flushStamperState?.())}})}lock(t){return ao(this.deps.batchId,t)}ensureHeldForUpload(){if(!(this.deps.partitionCount<=1)&&void 0===this.currentPartition)throw new Error("Uploads are unavailable: the postage batch is fully leased by other devices. Sign out of another device or wait for its lease to expire.")}emitLeaseChange(){this.deps.onLeaseChange?.({currentPartition:this.currentPartition,isReadOnly:this.readOnly})}}const Jo=32;class Zo{constructor(t,e){if(this.start=t,this.level=e,e<0||e>Jo)throw new Error(`Epoch level must be between 0 and 32, got ${e}`)}async marshalBinary(){const t=new Uint8Array(9);return new DataView(t.buffer).setBigUint64(0,this.start,!1),t[8]=this.level,s.Binary.keccak256(t)}next(t,e){return this.start+this.length()>e?this.childAt(e):function(t,e){if(0n===e)return new Zo(0n,Jo);const n=t-e;let r=1n,i=0;for(;i<Jo&&(r<n||t/r!==e/r);)r<<=1n,i++;return new Zo(e/r*r,i)}(e,t).childAt(e)}length(){return 1n<<BigInt(this.level)}parent(){const t=this.length()<<1n,e=this.start/t*t;return new Zo(e,this.level+1)}left(){return new Zo(this.start-this.length(),this.level)}childAt(t){const e=this.level-1,n=1n<<BigInt(e);let r=this.start;return(t&n)>0n&&(r|=n),new Zo(r,e)}isLeft(){return 0n===(this.start&this.length())}toString(){return`${this.start}/${this.level}`}}class Yo{constructor(t,e,n,r){this.bee=t,this.topic=e,this.owner=n,this.encryptionKey=r}async findAt(t,e=0n){const n=this.getEpochChunk(t,new Zo(t,0)).catch(()=>{}),[r,i]=await Promise.all([n,this.findAtEpoch(t,new Zo(0n,Jo),void 0)]);if(r)return r;if(i)return i;try{if(void 0===await this.getEpochChunk(t,new Zo(0n,Jo)))return this.findPreviousLeaf(t,e)}catch{}}async findAtEpoch(t,e,n){let r;try{r=await this.getEpochChunk(t,e)}catch{return e.isLeft()?n:this.findAtEpoch(e.start-1n,e.left(),n)}if(r)return 0===e.level?r:this.findAtEpoch(t,e.childAt(t),r);if(e.level>0){const r=await this.findAtEpoch(t,e.childAt(t),n);if(r)return r}return e.isLeft()?n:this.findAtEpoch(e.start-1n,e.left(),n)}async getEpochChunk(t,e){const n=await this.getEpochChunkWithMetadata(t,e);return n?.reference}async findAtWithMetadata(t){const e=new Zo(t,0);try{const n=await this.getEpochChunkWithMetadata(t,e);if(n)return{reference:n.reference,epoch:e,timestamp:n.timestamp}}catch{}return this.findAtEpochWithMetadata(t,new Zo(0n,Jo),void 0)}async findAtEpochWithMetadata(t,e,n){let r;try{r=await this.getEpochChunkWithMetadata(t,e)}catch{return e.isLeft()?n:this.findAtEpochWithMetadata(e.start-1n,e.left(),n)}if(r){const n={reference:r.reference,epoch:e,timestamp:r.timestamp};return 0===e.level?n:this.findAtEpochWithMetadata(t,e.childAt(t),n)}if(e.level>0){const r=await this.findAtEpochWithMetadata(t,e.childAt(t),n);if(r)return r}return e.isLeft()?n:this.findAtEpochWithMetadata(e.start-1n,e.left(),n)}async getEpochChunkWithMetadata(t,e){const n={timeout:2e3},r=await e.marshalBinary(),i=s.Binary.keccak256(s.Binary.concatBytes(this.topic.toUint8Array(),r));let a;if(this.encryptionKey){a=(await ze(this.bee,this.owner,i,this.encryptionKey,n)).payload}else{const t=new m(s.Binary.keccak256(s.Binary.concatBytes(i,this.owner.toUint8Array()))),e=await this.bee.chunk.download(t.toHex(),void 0,n),r=8,o=32+65,c=e.slice(o,o+r),d=new DataView(c.buffer,c.byteOffset,c.byteLength),u=Number(d.getBigUint64(0,!0)),l=o+r;a=e.slice(l,l+u)}if(![40,48,72,80].includes(a.length))return void console.warn(`Unexpected feed payload length: ${a.length}. Expected 40, 48, 72, or 80 bytes.`);const o=48===a.length||80===a.length?8:0,c=a.slice(o,o+8),d=new DataView(c.buffer,c.byteOffset,c.byteLength).getBigUint64(0,!1);return d>t?void 0:{reference:a.slice(o+8),timestamp:d}}findPreviousLeaf(t,e){return async function(t,e,n){if(0n===t)return;const r=e>0n?e:0n,i=t>128n&&t-128n>r?t-128n:r;let s=t-1n;for(;s>=i;){try{const e=await n(t,new Zo(s,0));if(e)return e}catch{}if(0n===s)break;s--}}(t,e,(t,e)=>this.getEpochChunk(t,e))}}class _o{constructor(t,e){this.topic=t,this.signer=e}async update(t,e,n,r,i){if(32!==e.length&&64!==e.length)throw new Error(`Reference must be 32 or 64 bytes, got ${e.length}`);const s=await this.calculateEpoch(t,i,r,n);return{socAddress:await this.uploadEpochChunk(s,t,e,n,r),epoch:{start:s.start,level:s.level},timestamp:t}}async calculateEpoch(t,e,n,r){if(e?.lastEpoch&&void 0!==e.lastTimestamp){return new Zo(e.lastEpoch.start,e.lastEpoch.level).next(e.lastTimestamp,t)}if(!r||!Xi(r))return new Zo(0n,Jo);const i=this.signer.publicKey().address(),s=new Yo(r.bee,this.topic,i,n),a=await s.findAtWithMetadata(t);return a?a.epoch.next(a.timestamp,t):new Zo(0n,Jo)}getOwner(){return this.signer.publicKey().address()}async uploadEpochChunk(t,e,n,r,i){const a=await async function(t,e){const n=await e.marshalBinary();return new x(s.Binary.keccak256(s.Binary.concatBytes(t.toUint8Array(),n)))}(this.topic,t),o=new Uint8Array(8);new DataView(o.buffer).setBigUint64(0,e,!1);const c=s.Binary.concatBytes(o,n);return(await hs(r,this.signer,a,c,{encryptionKey:i,deferred:!1})).socAddress}}function Qo(t){return new Yo(t.bee,t.topic,t.owner,t.encryptionKey)}class Xo{constructor(t,e,n){this.bee=t,this.topic=e,this.owner=n}async findAt(t,e=0n,n){for(let t=0n;;t++){if(!await this.indexExists(t,n))return{current:t>0n?t-1n:void 0,next:t}}}async indexExists(t,e){const n=function(t,e){const n=s.Binary.numberToUint64(e,"BE");return s.Binary.keccak256(s.Binary.concatBytes(t.toUint8Array(),n))}(this.topic,t),r=function(t,e){return new m(s.Binary.keccak256(s.Binary.concatBytes(t,e.toUint8Array())))}(n,this.owner);for(let t=0;t<2;t++)try{return await this.bee.chunk.download(s.Binary.uint8ArrayToHex(r.toUint8Array()),void 0,e),!0}catch{if(0===t)continue;return!1}return!1}}class tc{constructor(t,e,n){this.syncFinder=new Xo(t,e,n)}async findAt(t,e=0n,n){return this.syncFinder.findAt(t,e,n)}}class ec{constructor(t,e,n){this.bee=t,this.topic=e,this.signer=n,this.nextIndex=0n}async update(t,e,n){const r=this.makeIdentifier(this.nextIndex),i={mode:"stamper",bee:this.bee,stamper:e},s=await hs(i,this.signer,r,t,{encryptionKey:n,deferred:!1});return this.nextIndex+=1n,s.socAddress}getOwner(){return this.signer.publicKey().address()}getState(){return{nextIndex:this.nextIndex}}setState(t){this.nextIndex=t.nextIndex}reset(){this.nextIndex=0n}makeIdentifier(t){const e=s.Binary.numberToUint64(t,"BE"),n=s.Binary.keccak256(s.Binary.concatBytes(this.topic.toUint8Array(),e));return new x(n)}}function nc(t){if("object"==typeof t&&null!==t){const e=t.status;if(404===e)return!0;if("number"==typeof e)return!1}const e=t instanceof Error?t.message:String(t);return/404|not found/i.test(e)}const rc=256,ic=new Map,sc="swarm-id-roster-len";function ac(t,e){return`${t}:${e.toHex()}`}function oc(t){const e=ic.get(t);if(void 0!==e)return e;if("undefined"==typeof localStorage)return 0;let n;try{n=localStorage.getItem(`${sc}:${t}`)}catch{return 0}const r=null===n?0:Number.parseInt(n,10),i=Number.isInteger(r)&&r>0?Math.min(r,rc):0;return ic.set(t,i),i}function cc(t,e){const n=Math.min(e,rc);if(!(n<=oc(t))&&(ic.set(t,n),"undefined"!=typeof localStorage))try{localStorage.setItem(`${sc}:${t}`,`${n}`)}catch{}}const dc=gs,uc=Symbol("roster-read-inconclusive");class lc extends Error{constructor(){super("roster scan inconclusive: cannot confirm the roster is empty"),this.name="RosterScanInconclusiveError"}}function hc(t){return ht.fromString(`swarm-id-roster-v1:${t}`)}async function pc(t){const e=function(t,e){const n=s.Binary.numberToUint64(e,"BE");return new x(s.Binary.keccak256(s.Binary.concatBytes(t.toUint8Array(),n)))}(t.topic,t.index);let n,r;try{n=(await Je(t.bee.soc.makeReader(t.owner).download(e),dc,"roster read timed out")).payload.toUint8Array()}catch(r){if(nc(r))return;const i=await async function(t){const e=`${t.bee.url}/soc/${t.owner.toHex()}/${t.identifier.toHex()}`;try{const t=await Je(fetch(e),dc,"roster /soc probe timed out");return t.ok?new Uint8Array(await t.arrayBuffer()):404!==t.status?uc:404===(await t.json()).code?void 0:uc}catch{return uc}}({bee:t.bee,owner:t.owner,identifier:e});if(!(i instanceof Uint8Array))return i;n=i}try{r=await Je(Qe(t.bee,new m(n).toHex()),dc,"roster read timed out")}catch(t){return nc(t)?void 0:uc}try{return Xe.parse(JSON.parse((new TextDecoder).decode(r)))}catch{return}}async function fc(t){const e=hc(t.accountId),n=ac(t.accountId,t.owner),r=oc(n);let i=[],s=0;for(let n=0;n<rc;){const a=n<r?r-n:Math.min(r>0?2:16,rc-n),o=Array.from({length:a},(t,e)=>BigInt(n+e));let c=await Promise.all(o.map(n=>pc({bee:t.bee,topic:e,owner:t.owner,index:n})));if(!c.some(yc)&&c.some(t=>t===uc)&&(c=await Promise.all(o.map((n,r)=>c[r]===uc?pc({bee:t.bee,topic:e,owner:t.owner,index:n}):c[r]))),c.forEach((t,e)=>{yc(t)&&(i=ro(i,[t]),s=n+e+1)}),!c.some(yc)){if(0===i.length&&c.some(t=>t===uc))throw new lc;break}n+=a}return i.length>0&&cc(n,s),i}function yc(t){return void 0!==t&&t!==uc}async function wc(t){let e;try{e=await fc({bee:t.bee,accountId:t.accountId,owner:t.owner})}catch{return}const n=e.find(e=>e.deviceId===t.device.deviceId);void 0!==n&&Boolean(n.removedAt)===Boolean(t.device.removedAt)||await async function(t){const e=hc(t.accountId),{next:n}=await new Xo(t.bee,e,t.owner).findAt(0n);if(!Xi(t.target))return;const r=(new TextEncoder).encode(JSON.stringify(t.device)),i=await ls(t.target,r,{encryptionKey:we(t.encryptionKey)}),s=new m(i.reference).toUint8Array(),a=new ec(t.bee,e,t.accountKey);a.setState({nextIndex:n}),await a.update(s,t.target.stamper),cc(ac(t.accountId,t.owner),Number(n)+1)}(t)}const gc=ae({appSessionDuration:le().optional()}),mc=t=>ae({value:t,at:le()}),bc=ae({version:ce(1),accountId:ue().length(40),deviceId:ue(),timestamp:le(),connectedApps:de(se),postageStamps:de(tn),accountName:mc(ue()),defaultPostageStampBatchID:mc(ue().length(64).optional()),settings:mc(gc.optional()),accountPublicKey:ue(),accountCreatedAt:le(),partitionCount:le().int().min(1).default(1)});function vc(t){const e=t.metadata,n=e.createdAt;return{connectedApps:t.connectedApps,postageStamps:t.postageStamps,accountName:{value:e.accountName,at:e.accountNameAt??n},defaultPostageStampBatchID:{value:e.defaultPostageStampBatchID,at:e.defaultStampAt??n},settings:{value:e.settings,at:e.settingsAt??n},accountPublicKey:e.publicKey,accountCreatedAt:e.createdAt,partitionCount:e.partitionCount??1}}function Sc(t,e){return ht.fromString(`swarm-id-devstate-v1:${t}:${e}`)}async function kc(t){const e=Sc(t.accountId,t.deviceId),n=(r=t.accountId,i=t.deviceId,s=t.view,{version:1,accountId:r,deviceId:i,timestamp:Date.now(),connectedApps:s.connectedApps.map(Ys),postageStamps:s.postageStamps.map(Qs),accountName:s.accountName,defaultPostageStampBatchID:s.defaultPostageStampBatchID,settings:s.settings,accountPublicKey:s.accountPublicKey,accountCreatedAt:s.accountCreatedAt,partitionCount:s.partitionCount});var r,i,s;const a=(new TextEncoder).encode(JSON.stringify(n)),o=await ls(t.target,a,{encryptionKey:we(t.encryptionKey)}),c=o.chunkAddresses??[],d=new m(o.reference).toUint8Array(),u=new _o(e,t.accountKey),l=await u.update(BigInt(Math.floor(Date.now()/1e3)),d,t.target);return c.push(l.socAddress),{reference:o.reference,chunkAddresses:c}}async function xc(t){const e=await kc({accountId:t.accountId,deviceId:t.device.deviceId,accountKey:t.accountKey,encryptionKey:t.encryptionKey,view:t.view,target:t.target});return t.onChunksUploaded&&e.chunkAddresses.length>0&&await t.onChunksUploaded(e.chunkAddresses).catch(t=>{console.error("[publishDeviceState] utilisation hook failed:",t)}),await wc({bee:t.bee,accountKey:t.accountKey,owner:t.owner,encryptionKey:t.encryptionKey,accountId:t.accountId,device:t.device,target:t.target}),{status:"success",reference:e.reference,timestamp:BigInt(Math.floor(Date.now()/1e3)),chunkAddresses:e.chunkAddresses}}async function Ic(t){const e=Sc(t.accountId,t.deviceId),n=new Yo(t.bee,e,t.owner),r=await n.findAt(BigInt(Math.floor(Date.now()/1e3)));if(!r)return;return function(t){const e=JSON.parse((new TextDecoder).decode(t));return bc.parse(e)}(await Qe(t.bee,new m(r).toHex()))}function Ac(t,e){return e.at>=t.at?e:t}function Cc(t,e,n){if(0===t.length)throw new Error("foldAccount requires at least one device-state view");let r=[],i=[],s={value:"",at:0},a={at:0},o={at:0};for(const e of t)r=io(r,e.connectedApps,n),i=so(i,e.postageStamps),s=Ac(s,e.accountName),a=Ac(a,e.defaultPostageStampBatchID),o=Ac(o,e.settings);const c=t[0],d=c?.accountCreatedAt??e.reduce((t,e)=>Math.min(t,e.createdAt),Number.MAX_SAFE_INTEGER),u=t[0].accountPublicKey,l=t.find(t=>t.partitionCount>1)?.partitionCount??c?.partitionCount??1;return{devices:e,connectedApps:r,postageStamps:i,accountName:s.value,defaultPostageStampBatchID:a.value?new p(a.value):void 0,settings:o.value,accountNameAt:s.at,defaultStampAt:a.at,settingsAt:o.at,createdAt:Number.isFinite(d)?d:Date.now(),publicKey:u,partitionCount:l}}const Uc="swarm-id-device-id";function Pc(){const t=localStorage.getItem(Uc);if(t)return t;const e=crypto.randomUUID();return localStorage.setItem(Uc,e),e}function Ec(t,e,n){if(t.some(t=>t.deviceId===e))return t.map(t=>t.deviceId===e&&void 0!==n&&n!==t.name?{...t,name:n,nameUpdatedAt:Date.now()}:t);const r=Date.now();return[...t,{deviceId:e,createdAt:r,lastSignedInAt:r,name:n}]}function $c(){if("undefined"==typeof navigator)return"Unknown Device";const t=navigator.userAgent;let e;e=/iPhone/.test(t)?"iPhone":/iPad/.test(t)?"iPad":/Android/.test(t)?/Mobile/.test(t)?"Android Phone":"Android Tablet":/Macintosh|Mac OS X/.test(t)?"Mac":/Windows/.test(t)?"Windows PC":/Linux/.test(t)?"Linux Desktop":"Unknown Device";const n=function(){const t=navigator.userAgentData,e=t?.brands?.map(t=>t.brand);if(e&&0!==e.length)return e.includes("Brave")?"Brave":e.includes("Microsoft Edge")?"Edge":e.includes("Opera")?"Opera":e.includes("Google Chrome")?"Chrome":e.includes("Chromium")?"Chromium":void 0}();if(n)return`${n} on ${e}`;let r;return r=/Edg\//.test(t)?"Edge":/OPR\/|Opera/.test(t)?"Opera":/Firefox\//.test(t)?"Firefox":/Chrome\//.test(t)?"Chrome":/Safari\//.test(t)?"Safari":"Unknown Browser",`${r} on ${e}`}const Dc=Object.entries({deviceId:"all",createdAt:"all",name:"all",nameUpdatedAt:"all",removedAt:"all",lastSignedInAt:"all"}),Bc=18e5;function Tc(t,e,n){const r=e-n;return t.filter(t=>!t.removedAt&&(t.lastSignedInAt??0)>=r).map(t=>t.deviceId)}function Oc(t){const{bee:e,accountsStore:n,postageStampsStore:i,utilizationStore:a,utilizationUploader:o,liveDeviceIds:c}=t;async function d(t,c){const d=n.getAccount(new r(t));if(!d)return void console.warn("[SyncCoordinator] Account not found for utilization update");const u=d.defaultPostageStampBatchID;if(!u)return void console.warn("[SyncCoordinator] No default stamp, skipping utilization");const l=new p(u),h=i.getStamp(l);if(!h)return void console.warn("[SyncCoordinator] Stamp not found, skipping utilization");const f=c.map(t=>({address:{toUint8Array:()=>t,toHex:()=>Array.from(t).map(t=>t.toString(16).padStart(2,"0")).join("")},data:new Uint8Array(0)}));const y=await en(d.derivationKey),w=await Ae(y,Ue),g=new I(w).publicKey().address(),{state:m,tracker:b}=await zs(l,f,h.depth,{cache:a}),v=function(t,e,n=2){const r=js(e,n);let i=0;for(const e of t.dataCounters)e>i&&(i=e);return r<=0?1:Math.min(1,i/r)}(m,h.depth);if(i.updateStampUtilization(l,v),b.hasDirtyChunks()){const t=await i.getStamper(l,{owner:g,encryptionKey:we(y)});if(!t)return void console.warn("[SyncCoordinator] Cannot create stamper, skipping upload");const n=o.scheduleUpload(l.toHex(),b,async()=>{await async function(t,e){const{bee:n,stamper:r,encryptionKey:i,cache:a,tracker:o,reservedBuckets:c}=e,d=o.getDirtyChunks();if(0===d.length)return;const u=Rs(t);if(c)for(const t of c)u.add(t);const l=r instanceof Gs;for(const e of d){const c=t.chunks[e],d=Ds(t.dataCounters,e,t.batchDepth),h=await Ms({swarmEncryptionKey:i,batchId:t.batchId,chunkIndex:e,plaintext:d,priorNonce:c.nonce,claimedBuckets:u});l&&r.markReservedUtilizationChunk(h.address);try{const i=await Fs(n,r,d,h.key),u=s.Binary.uint8ArrayToHex(i);if(c.contentHash===u&&c.nonce===h.nonce){o.markClean(e);continue}c.contentHash=u,c.lastUpload=Date.now(),c.dirty=!1,c.nonce=h.nonce,await a.putChunk({batchId:t.batchId.toHex(),chunkIndex:e,data:d,contentHash:u,nonce:h.nonce,lastAccess:Date.now()}),o.markClean(e)}catch(t){throw console.error(`[BatchUtil] Failed to upload chunk ${e}:`,t),l&&r.clearReservedUtilizationChunks(),t}}l&&r.clearReservedUtilizationChunks(),t.lastSync=Date.now()}(m,{bee:e,stamper:t,encryptionKey:we(y),cache:a,tracker:b,reservedBuckets:t instanceof Gs?t.getProtectedBuckets():void 0}),t.flush&&await t.flush()});return Je(n,3e4,"Utilization upload timeout (30000ms)")}}return async function(t){const s=performance.now(),a=()=>(new Date).toISOString(),o=await async function(t){const e=n.getAccount(new r(t));if(!e)return void console.warn("[SyncCoordinator] Account not found",t);const s=e.defaultPostageStampBatchID;if(!s)return void console.warn("[SyncCoordinator] No default stamp for account",t);const a=i.getStamp(s);if(!a)return void console.warn("[SyncCoordinator] Default stamp not found");const o=await en(e.derivationKey);return{snapshot:ca(e,t,Date.now()),encryptionKey:o,defaultStamp:a}}(t);if(!o)return;const{snapshot:u,encryptionKey:l,defaultStamp:h}=o,p=u.metadata.partitionCount??1,f=await Ae(l,Ue),y=new I(f),w=y.publicKey().address(),g=await i.getStamper(h.batchID,{owner:w,encryptionKey:we(l)});if(!g){const t=`Cannot create stamper for batch ${h.batchID.toHex()}`;return console.error(`[SyncCoordinator ${a()}] ${t}`),{status:"error",error:t}}if(!(g instanceof Gs)){const t=`Stamper for batch ${h.batchID.toHex()} does not support coordinated writes (expected a UtilizationAwareStamper)`;return console.error(`[SyncCoordinator ${a()}] ${t}`),{status:"error",error:t}}const m=new Vo({bee:e,batchId:h.batchID.toHex(),stamper:g,deviceId:Pc(),accountId:t,knownDeviceIds:()=>[...new Set([...Tc(n.getAccount(new r(t))?.devices??[],Date.now(),Bc),...c?.()??[]])],backupSigner:y,swarmEncryptionKey:we(l),partitionCount:p,mode:"oneshot"});console.log(`[SyncCoordinator ${a()}] Starting sync for ${t} bee.url=${e.url}`);const b=Pc(),v=u.metadata.devices.find(t=>t.deviceId===b)??{deviceId:b,name:$c(),createdAt:Date.now(),lastSignedInAt:Date.now()},S=vc(u);try{const n=await Je(m.withWrite(n=>xc({bee:e,accountId:t,device:v,accountKey:y,owner:w,encryptionKey:l,view:S,target:n,onChunksUploaded:e=>d(t,e)}),{wait:"skip"}),6e4,"Sync timed out after 60000ms");return"error"===n.status&&console.error(`[SyncCoordinator ${a()}] Sync failed (+${(performance.now()-s).toFixed(2)}ms):`,n.error),n}catch(e){return e instanceof zo?void console.warn(`[SyncCoordinator] Skipping sync ${t}: all partitions are held by other devices.`):(console.error(`[SyncCoordinator ${a()}] Sync failed (+${(performance.now()-s).toFixed(2)}ms):`,e),{status:"error",error:e instanceof Error?e.message:String(e)})}}}function Mc(t){const{id:e,derivationKey:n,account:r}=t;return{id:e,name:r.accountName,publicKey:r.publicKey,createdAt:r.createdAt,derivationKey:n,defaultPostageStampBatchID:r.defaultPostageStampBatchID,settings:r.settings,accountNameAt:r.accountNameAt,defaultStampAt:r.defaultStampAt,settingsAt:r.settingsAt,lastModified:t.lastModified??Date.now(),devices:[...r.devices],connectedApps:[...r.connectedApps],postageStamps:[...r.postageStamps],partitionCount:r.partitionCount}}const Rc=new Map;async function Fc(t){const e=`${t.accountId}:${t.derivationKey}`,n=Rc.get(e);if(n)return n;const r=async function(t){const e=await en(t.derivationKey),n=await Ae(e,Ue),r=new I(n).publicKey().address(),i=await fc({bee:t.bee,accountId:t.accountId,owner:r});if(0===i.length)return;const s=(await Promise.all(i.filter(t=>!t.removedAt).map(e=>Ic({bee:t.bee,accountId:t.accountId,deviceId:e.deviceId,owner:r}).catch(()=>{})))).filter(t=>void 0!==t);if(0===s.length)return;const a=Cc(s,i,t.accountId);for(const t of[i,a.devices,a.connectedApps,a.postageStamps])Array.isArray(t)&&Object.freeze(t);return{account:a,devices:i}}(t).finally(()=>{Rc.delete(e)});return Rc.set(e,r),r}async function qc(t){try{const e=await Fc({bee:t.bee,derivationKey:t.derivationKey,accountId:t.accountId});if(!e)return await async function(t){const e=await en(t.derivationKey),n=new I(await Ae(e,Ue)).publicKey().address(),r=await fc({bee:t.bee,accountId:t.accountId,owner:n});return 0===r.length}(t)?"allowed":"unconfirmed";const n=e.account.connectedApps.find(e=>e.appUrl===t.appOrigin);return void 0===n||void 0!==n.revokedAt||void 0!==n.disconnectedAt&&n.disconnectedAt>(t.connectedAt??0)?"ended":"allowed"}catch{return"unconfirmed"}}const Lc="swarm-id-first-party";function Kc(){try{if("undefined"==typeof window||window.self!==window.top)return;localStorage.setItem(Lc,"1")}catch{}}function Nc(){try{return null!==localStorage.getItem(Lc)}catch{return!1}}const Hc="0x45a1502382541cd610cc9068e88727426b696293";function jc(t,e){return function(t){try{const{hostname:e}=new URL(t);return"localhost"===e||"127.0.0.1"===e||"0.0.0.0"===e}catch{return!1}}(t)&&e?e:Hc}const Wc=new RegExp("^[0-9a-f]{64}$");function zc(t){const e=t.startsWith("0x")?t.slice(2):t;if(0===e.length)throw new Error("Empty uint return");return BigInt(`0x${e}`)}async function Gc(t,e,n=Hc){try{const r=function(t){const e=(t.startsWith("0x")?t.slice(2):t).toLowerCase();if(!Wc.test(e))throw new Error(`Invalid batch ID: ${t}`);return e}(e),[i,s,a]=await async function(t,e){return(await rn(t,e.map(t=>({method:"eth_call",params:[{to:t.to,data:t.data},"latest"]})),{timeoutMs:sn})).map(t=>{if("string"!=typeof t)throw new Error("eth_call returned something other than a hex string");return t})}(t,[{to:n,data:`0xc81e25ab${r}`},{to:n,data:"0x51b17cd0"},{to:n,data:"0x053f14da"}]),o=function(t){const e=function(t){const e=t.startsWith("0x")?t.slice(2):t,n=[];for(let t=0;t<e.length;t+=64)n.push(e.slice(t,t+64));return n}(t);if(e.length<6)throw new Error(`Unexpected batches() return length: ${t}`);return{owner:`0x${e[0].slice(24)}`,depth:Number(BigInt(`0x${e[1]}`)),bucketDepth:Number(BigInt(`0x${e[2]}`)),immutableFlag:0n!==BigInt(`0x${e[3]}`),normalisedBalance:BigInt(`0x${e[4]}`),lastUpdatedBlockNumber:BigInt(`0x${e[5]}`)}}(i);return"0x0000000000000000000000000000000000000000"===o.owner?{status:"not-found"}:{status:"found",state:{batch:o,currentTotalOutPayment:zc(s),lastPrice:zc(a)}}}catch{return{status:"error"}}}function Vc(t){const e=t.batch.normalisedBalance-t.currentTotalOutPayment;if(e<=0n)return 0;if(t.lastPrice<=0n)return;const n=e/t.lastPrice;return Number(n*BigInt(nn))}async function Jc(t,e,n=Hc){const r=await async function(t,e,n=Hc){const r=await Gc(t,e,n);return"found"===r.status?r.state:void 0}(t,e,n);if(void 0!==r)return Vc(r)}const Zc=864e5,Yc=7*Zc;function _c(t){return t?.appSessionDuration??Yc}const Qc=32;function Xc(t){if(32!==t.length)throw new Error("Private key must be 32 bytes");const e=on.getPublicKey(t,!1);return{x:e.slice(1,33),y:e.slice(33)}}function td(t,e,n){const r=function(t,e,n){if(32!==t.length)throw new Error("Private key must be 32 bytes");if(e.length!==Qc||n.length!==Qc)throw new Error("Public key coordinates must be 32 bytes each");const r=new Uint8Array(65);return r[0]=4,r.set(e,1),r.set(n,33),on.getSharedSecret(t,r,!0).slice(1)}(t,e,n),i=new Uint8Array(r.length+1);i.set(r),i[r.length]=0;const a=s.Binary.keccak256(i),o=new Uint8Array(r.length+1);o.set(r),o[r.length]=1;return{lookupKey:a,accessKeyDecryptionKey:s.Binary.keccak256(o)}}function ed(t,e){if(32!==e.length)throw new Error("Key must be 32 bytes");const n=new Uint8Array(t.length),r=Math.ceil(t.length/32);for(let i=0;i<r;i++){const r=new Uint8Array(e.length+4);r.set(e),r[e.length]=255&i,r[e.length+1]=i>>8&255,r[e.length+2]=i>>16&255,r[e.length+3]=i>>24&255;const a=s.Binary.keccak256(r),o=s.Binary.keccak256(a),c=32*i,d=Math.min(c+32,t.length);for(let e=c;e<d;e++)n[e]=t[e]^o[e-c]}return n}const nd=ed;function rd(t){if(33!==t.length)throw new Error("Compressed public key must be 33 bytes");const e=t[0];if(2!==e&&3!==e)throw new Error("Invalid compressed public key prefix");const n=on.ProjectivePoint.fromHex(t).toRawBytes(!1);return{x:n.slice(1,33),y:n.slice(33)}}function id(t,e){if(t.length!==Qc||e.length!==Qc)throw new Error("Public key coordinates must be 32 bytes each");const n=1&e[e.length-1]?3:2,r=new Uint8Array(33);return r[0]=n,r.set(t,1),r}function sd(t){const e={entries:{}};for(const n of t){const t=ye(n.lookupKey);e.entries[t]={reference:ye(n.encryptedAccessKey),metadata:{}}}const n=JSON.stringify(e);return(new TextEncoder).encode(n)}function ad(t){const e=(new TextDecoder).decode(t),n=JSON.parse(e),r=[];for(const[t,e]of Object.entries(n.entries))r.push({lookupKey:we(t),encryptedAccessKey:we(e.reference)});return r}function od(t,e){return t.find(t=>{if(t.lookupKey.length!==e.length)return!1;for(let n=0;n<e.length;n++)if(t.lookupKey[n]!==e[n])return!1;return!0})}const cd=65,dd=(new TextEncoder).encode("act-grantee-list");function ud(t){const e=s.Binary.concatBytes(t,dd);return s.Binary.keccak256(e)}function ld(t,e){const n=function(t){const e=new Uint8Array(t.length*cd);for(let n=0;n<t.length;n++){const r=n*cd;e[r]=4,e.set(t[n].x,r+1),e.set(t[n].y,r+1+32)}return e}(t);return function(t,e){return ed(t,ud(e))}(n,e)}function hd(t,e){const n=function(t,e){const n=ud(e);return nd(t,n)}(t,e);return function(t){if(0===t.length)return[];if(t.length%cd!==0)throw new Error(`Invalid grantee list length: ${t.length} is not a multiple of 65`);const e=t.length/cd,n=[];for(let r=0;r<e;r++){const e=r*cd;if(4!==t[e])throw new Error(`Invalid public key prefix at index ${r}: expected 0x04, got 0x${t[e].toString(16)}`);const i=t.slice(e+1,e+1+32),s=t.slice(e+1+32,e+cd);n.push({x:i,y:s})}return n}(n)}const pd=BigInt("9223372036854775807"),fd=new TextEncoder,yd="encryptedglref";let wd=0;function gd(t){return(pd-BigInt(t)).toString()}function md(t){const e=BigInt(t);return Number(pd-e)}function bd(t,e,n,r){const i=gd(e),s=we(n),a=r?{[yd]:r}:void 0;t.addFork(fd.encode(i),s,a)}function vd(t){const e=t.collect();if(0===e.length)return;e.sort((t,e)=>t.fullPathString.localeCompare(e.fullPathString));const n=e[0];return{timestamp:md(n.fullPathString),metadata:{actReference:ye(n.targetAddress),encryptedGranteeListRef:n.metadata?.[yd]}}}async function Sd(t,e){const n=await async function t(n,r){for(const e of n.forks.values())await t(e.node,!1);const i=await n.marshal(),s=await e(i,r);return n.selfAddress=we(s.reference),s}(t,!0);return{rootReference:n.reference,tagUid:n.tagUid}}function kd(t,e){return z.unmarshalFromData(t,e)}async function xd(t,e){await async function t(n){for(const r of n.forks.values()){if(!r.node.selfAddress)throw new Error("Fork node selfAddress is not set");const n=ye(r.node.selfAddress),i=await e(n),s=z.unmarshalFromData(i,r.node.selfAddress);r.node.targetAddress=s.targetAddress,r.node.forks=s.forks,r.node.obfuscationKey=s.obfuscationKey;for(const t of r.node.forks.values())t.node.parent=r.node;await t(r.node)}}(t)}function Id(){const t=Math.floor(Date.now()/1e3);return t<=wd?(wd+=1,wd):(wd=t,t)}function Ad(t){return Array.isArray(t)?t:[t]}function Cd(t,e){for(const n of Ad(e)){const e=Xc(n),r=td(n,e.x,e.y),i=od(t,r.lookupKey);if(i)return{privateKey:n,derived:r,entry:i}}throw new Error("Cannot find publisher entry in ACT")}function Ud(t){let e=!0;for(let n=32;n<t.length;n++)if(0!==t[n]){e=!1;break}return ye(e?t.slice(0,32):t)}async function Pd(t,e,n,r,i,s,a){const o=cn(),c=ed(e,o),d=Xc(n),u=[],l=td(n,d.x,d.y);u.push({lookupKey:l.lookupKey,encryptedAccessKey:ed(o,l.accessKeyDecryptionKey)});for(const t of r){const e=td(n,t.x,t.y);u.push({lookupKey:e.lookupKey,encryptedAccessKey:ed(o,e.accessKeyDecryptionKey)})}const h=sd(u),p=!0===i?.beeCompatible,f=await ls(t,h,{encryptionKey:!p||void 0,pin:i?.pin,deferred:i?.deferred,tag:i?.tag,requestOptions:s}),y=ld(r,n),w=await ls(t,y,{encryptionKey:!0,pin:i?.pin,deferred:i?.deferred,requestOptions:s}),g=Id(),m=new z;bd(m,g,f.reference,w.reference);const b=await Sd(m,async(e,n)=>ls(t,e,{encryptionKey:!p||void 0,pin:i?.pin,deferred:i?.deferred,tag:i?.tag,onProgress:n?a:void 0,requestOptions:s})),v=b.rootReference,S=b.tagUid,k=id(d.x,d.y);return{encryptedReference:ye(c),historyReference:v,granteeListReference:w.reference,publisherPubKey:ye(k),actReference:f.reference,tagUid:S}}async function Ed(t,e,n,r,i,s,a){const o=rd(we(r)),c=kd(await Qe(t,n,void 0,void 0,a),we(n));await xd(c,async e=>Qe(t,e,void 0,void 0,a));const d=s?function(t,e){const n=gd(e),r=t.collect();if(0===r.length)return;r.sort((t,e)=>t.fullPathString.localeCompare(e.fullPathString));for(const t of r)if(t.fullPathString>=n)return{timestamp:md(t.fullPathString),metadata:{actReference:ye(t.targetAddress),encryptedGranteeListRef:t.metadata?.[yd]}};const i=r[r.length-1];return{timestamp:md(i.fullPathString),metadata:{actReference:ye(i.targetAddress),encryptedGranteeListRef:i.metadata?.[yd]}}}(c,s):vd(c);if(!d)throw new Error("No ACT entry found in history");const u=d.metadata.actReference,l=ad(await Qe(t,u,void 0,void 0,a));for(const t of Ad(i)){const n=Xc(t);for(const r of[o,n]){const n=td(t,r.x,r.y),i=od(l,n.lookupKey);if(!i)continue;const s=nd(i.encryptedAccessKey,n.accessKeyDecryptionKey);return Ud(nd(we(e),s))}}throw new Error("Access denied: no ACT entry found for this key")}function $d(t){return rd(we(t))}const Dd="index.bin";function Bd(t){return ca(t,t.id.toHex(),t.lastModified??t.createdAt)}function Td(t){return{version:1,accountId:t.accountId,deviceId:"",timestamp:t.timestamp,...vc(t)}}function Od(){return new ge("upload-unavailable","The account is in subsidised mode: the gateway pays for and stamps every upload, so there is no stamp of the account's to return.",{reason:"subsidised"})}const Md=new Map;function Rd(){return new ge("not-authenticated","This session was ended from the account. Connect again to write.")}class Fd{get stampRefusal(){return this.stampLifetime&&eo(this.stampLifetime)}get beeApiUrl(){return this.siteBeeApiUrl??this.ownBeeApiUrl}dropGatewayForOwnCustomNode(){void 0===this.siteBeeApiUrl&&this.ownBeeApiUrl!==dn&&(this.subsidisedGatewayUrl=void 0)}get bee(){return this.beeClientFor(this.isSubsidisedModeActive()?this.subsidisedGatewayUrl:this.beeApiUrl)}get nodeBee(){return this.beeClientFor(this.beeApiUrl)}get accountBee(){return this.beeClientFor(this.ownBeeApiUrl)}beeClientFor(t){let e=this.beeClients.get(t);return e||(this.beeClients.size>=4&&this.beeClients.clear(),e=new ui(t),this.beeClients.set(t,e)),e}constructor(t){this.parentIdentified=!1,this.parentIdentifyReceived=!1,this.authenticated=!1,this.authLoading=!0,this.storagePartitioned=!1,this.busJoinGeneration=0,this.pendingYields=new Map,this.answeredRequests=new Set,this.pendingLaneUpdates=new Map,this.lastRestampMs=new Map,this.popupMode="window",this.beeClients=new Map,this.unsubscribeStorageListeners=[],this.storageWorkQueue=Promise.resolve(),this.isConnecting=!1,this.presence=new fa,this.stamperInitGeneration=0,this.publishInFlight=!1,this.lastDeviceRegistryRefreshAt=0,this.siteAllowList=t.siteAllowList;const e=oa().load();this.ownBeeApiUrl=e?.beeNodeUrl||dn,this.gnosisRpcUrl=e?.gnosisRpcUrl||un,this.postageStampContractAddress=t.postageStampContractAddress||Hc,this.signalingUrl=t.signalingUrl,this.signalingUrl||console.info("[Proxy] No account-bus signaling URL configured — cross-partition and cross-device coordination is off (docs/Account-Bus.md)."),this.setupMessageListener(),this.setupStorageListeners(),this.bus=new bi([]),this.setupBusListeners(),this.announceReady()}setupStorageListeners(){if(this.unsubscribeStorageListeners.length>0)return;const t=aa();if(this.unsubscribeStorageListeners.push(t.subscribe((t,e)=>{this.enqueueReconcile("handleAccountStorageChange",()=>this.handleAccountStorageChange(e?.noRepublish?"bus":"storage"))})),"undefined"!=typeof window){const t=t=>{t.key===Pe&&(this.partitionAccount||(this.applyNetworkSettings(),this.emitConnectionInfoIfChanged()))};window.addEventListener("storage",t),this.unsubscribeStorageListeners.push(()=>window.removeEventListener("storage",t))}}enqueueReconcile(t,e){this.storageWorkQueue=this.storageWorkQueue.then(()=>e().catch(e=>{console.error(`[Proxy] ${t} failed:`,e)}))}applyNetworkSettings(){this.applyNetworkSettingsValues(oa().load())}applyNetworkSettingsValues(t){this.gnosisRpcUrl=t?.gnosisRpcUrl||un;const e=t?.beeNodeUrl||dn;e!==this.ownBeeApiUrl&&(this.ownBeeApiUrl=e,this.dropGatewayForOwnCustomNode())}async handleAccountStorageChange(t="storage"){await this.reevaluateConnection(t)}async reevaluateConnection(t){if(!this.parentOrigin)return;await aa().prime();const e=this.findConnectionForParent();if(e){const{app:n}=e;this.authenticated&&n.appSecret===this.appSecret?(this.storagePartitioned&&"bus"!==t||await this.refreshStampFromStorage(),this.emitConnectionInfoIfChanged()):await this.authenticateFromStorage(n),"storage"===t&&this.schedulePublish("change")}else!this.authenticated||this.storagePartitioned&&"bus"!==t||("storage"===t&&this.publishAccountDelta({ofEndedConnection:!0}),this.clearAuthData(),this.sendToParent({type:"disconnectResponse",requestId:"bus"===t?"account-delta":"storage-event",success:!0}))}async refreshStampFromStorage(){this.joinAccountBus();const t=this.lookupPostageStampForApp(),e=t?.batchID.toHex(),n=t?.signerKey.toHex(),r=t?await this.lookupAccountForApp():void 0,i=r?`${r.owner.toHex()}-${ye(r.encryptionKey)}`:void 0;var s,a;e===this.postageBatchId&&n===this.signerKey&&i===this.stamperAccountFingerprint&&(s=t,a=this.stampLifetime,void 0===s||void 0===a?s===a:s.batchTTL===a.batchTTL&&(s.updatedAt??s.createdAt)===(a.updatedAt??a.createdAt)&&s.usable===a.usable&&s.exists===a.exists)||(this.setResolvedStamp(t),t&&await this.initializeStamper(t.depth))}setResolvedStamp(t){this.teardownCoordinator(),this.stamper=void 0,this.stamperAccountFingerprint=void 0,this.postageBatchId=t?.batchID.toHex(),this.signerKey=t?.signerKey.toHex(),this.stampLifetime=t}async authenticateFromStorage(t){this.appSecret=t.appSecret,this.chatBinding=void 0,this.authenticated=!0,this.restoredSessionCheck=void 0,this.storagePartitioned=!1,this.partitionAccount=void 0,this.authLoading=!1,this.isConnecting=!1,this.deviceId=Pc(),this.joinAccountBus();const e=this.lookupPostageStampForApp();this.setResolvedStamp(e),e&&await this.initializeStamper(e.depth),this.showAuthButton(),this.sendToParent({type:"authSuccess",origin:this.parentOrigin}),this.emitConnectionInfoIfChanged()}async handlePopupMessage(t){if("setSecret"===t.type){if(!this.pendingChallenge||t.challenge!==this.pendingChallenge)return void console.warn("[Proxy] setSecret challenge mismatch — ignoring");if(t.appOrigin!==this.parentOrigin)return console.warn("[Proxy] setSecret appOrigin mismatch:",t.appOrigin,"!==",this.parentOrigin),void this.endRefusedConnect();this.pendingChallenge=void 0,localStorage.removeItem(ln),this.appSecret=t.data.secret,this.chatBinding=this.acceptHandedOverChatBinding(t.data),this.authenticated=!0,this.restoredSessionCheck=void 0,this.storagePartitioned=!0,this.authLoading=!1,this.isConnecting=!1,this.deviceId=Pc(),await this.hydratePartitionAccount(t.data.account,t.data.secret,t.data.networkSettings,Date.now()),this.reactivateThisDevice(),this.savePartitionSession(t.data),this.showAuthButton(),this.sendToParent({type:"authSuccess",origin:this.parentOrigin}),this.emitConnectionInfoIfChanged()}}endRefusedConnect(){this.isConnecting=!1,this.authLoading=!1,this.showAuthButton()}acceptHandedOverChatBinding(t){if(this.parentOrigin)return hn(t.chatBinding,{site:this.parentOrigin,chatAddress:pn(t.secret),signer:t.account.id.toHex()},{allowLocalHttp:!0})}savePartitionSession(t){if(!this.parentOrigin)return;const e=this.parentOrigin,n=this.partitionAccount?.connectedApps.find(t=>t.appUrl===e),r=n?.connectedUntil??Date.now()+_c(this.partitionAccount?.settings),i={...t,account:Js({...t.account,connectedApps:fn(t.account.connectedApps,e)})};this.writePartitionSession(e,async()=>({version:1,parentOrigin:e,connectedUntil:r,data:await Li(JSON.stringify(i))}))}refreshStoredPartitionAccount(){if(!this.partitionAccount||!this.parentOrigin)return;const t=this.parentOrigin,e=Js(this.partitionAccount);this.writePartitionSession(t,async()=>{const n=await this.openStoredPartitionSession(t);if(n&&"unavailable"!==n)return{...n.record,data:await Li(JSON.stringify({...n.wire,account:e}))}})}clearPartitionSession(){this.parentOrigin&&this.writePartitionSession(this.parentOrigin,async()=>null)}writePartitionSession(t,e){const n=yn(t),r=(Md.get(n)??Promise.resolve()).then(async()=>{const t=await e();void 0!==t&&(null===t?localStorage.removeItem(n):localStorage.setItem(n,JSON.stringify(t)))}).catch(t=>{console.warn("[Proxy] Could not persist the partitioned session:",t)});Md.set(n,r)}async openStoredPartitionSession(t){let e,n=null;try{n=localStorage.getItem(yn(t))}catch{return}if(!n)return;try{e=JSON.parse(n)}catch{return}const r=wn.safeParse(e);if(!r.success||!qi(r.data.data))return;await ji([r.data.data]);const i=Wi(r.data.data);if(void 0===i)return Hi(r.data.data)?"unavailable":void 0;try{return{record:r.data,wire:JSON.parse(i)}}catch{return}}async readPartitionSession(){if(!this.parentOrigin)return;const t=this.parentOrigin;await Md.get(yn(t));let e=null;try{e=localStorage.getItem(yn(t))}catch{return}if(!e)return;const n=await this.openStoredPartitionSession(t);if("unavailable"===n)return;const r=n&&gn.safeParse(n.wire);if(n&&r?.success){if(n.record.parentOrigin===t)if(n.record.connectedUntil<=Date.now())this.clearPartitionSession();else{if(void 0===r.data.chatBinding||this.acceptHandedOverChatBinding(r.data))return{parentOrigin:n.record.parentOrigin,connectedUntil:n.record.connectedUntil,data:r.data};this.clearPartitionSession()}}else this.clearPartitionSession()}async hydratePartitionAccount(t,e,n,r){const i=Date.now(),s={...t.connectedApps.find(t=>t.appUrl===this.parentOrigin)??{appUrl:this.parentOrigin,appName:this.appMetadata?.name??this.parentOrigin,lastConnectedAt:r},appSecret:e,lastConnectedAt:r,connectedUntil:i+_c(t.settings)};this.partitionAccount={...t,connectedApps:[s,...fn(t.connectedApps.filter(t=>t.appUrl!==this.parentOrigin),this.parentOrigin)],access:{type:"password",kdfSalt:"",kdfIterations:0},encryptedSeed:""},this.applyNetworkSettingsValues(n),await this.refreshStampFromStorage()}joinAccountBus(){const t=this.findConnectionForParent();if(!t)return;const{derivationKey:e}=t.account,n=t.account.id.toHex();e!==this.busJoinedKey&&this.ensureAccountBusTransports(e,n)}async ensureAccountBusTransports(t,e){const n=++this.busJoinGeneration;let r;try{r=await ha(t)}catch(t){return console.error("[Proxy] Failed to derive the account bus context:",t),void(n===this.busJoinGeneration&&this.detachBusTransports())}if(n!==this.busJoinGeneration)return;const i=this.busTopic!==r.topic;if(i){this.detachBusTransports();try{this.removeBusLocal=this.bus.addTransport(new mi(r.topic))}catch(t){return void console.error("[Proxy] Failed to attach the local bus transport:",t)}this.busTopic=r.topic,this.presenceTimer=setInterval(()=>this.publishPresence(),2e4)}if(this.busBoundAccountId=e,i&&this.publishPresence(),this.signalingUrl&&!this.removeBusSignaling)try{this.removeBusSignaling=this.bus.addTransport(new va({url:this.signalingUrl,topic:r.topic,encryptionKey:r.encryptionKey,createPeerConnection:"undefined"!=typeof RTCPeerConnection?()=>new RTCPeerConnection:void 0}))}catch(t){return void console.error("[Proxy] Failed to attach the bus signaling transport:",t)}this.busJoinedKey=t}publishPresence(){const t=this.busBoundAccountId,e=this.deviceId;t&&e&&this.bus.publish({type:"presence",accountId:t,fromDeviceId:e})}stopPresence(){void 0!==this.presenceTimer&&(clearInterval(this.presenceTimer),this.presenceTimer=void 0),this.presence.clear()}detachBusTransports(){this.stopPresence(),this.removeBusSignaling?.(),this.removeBusSignaling=void 0,this.removeBusLocal?.(),this.removeBusLocal=void 0,this.busTopic=void 0,this.busJoinedKey=void 0,this.busBoundAccountId=void 0}destroy(){for(const t of this.unsubscribeStorageListeners)t();this.unsubscribeStorageListeners=[],this.teardownCoordinator(),void 0!==this.publishTimer&&(clearTimeout(this.publishTimer),this.publishTimer=void 0),this.busJoinGeneration+=1,this.stopPresence(),this.removeBusLocal=void 0,this.removeBusSignaling=void 0,this.busTopic=void 0,this.busJoinedKey=void 0,this.busBoundAccountId=void 0,this.bus.close()}teardownCoordinator(){this.cancelPendingYields(),this.coordinator?.teardown(),this.coordinator=void 0,this.terminateStampWorkerPool()}terminateStampWorkerPool(){this.stampWorkerPool?.terminate(),this.stampWorkerPool=void 0}static laneKey(t,e,n){return`${t}:${e}/${n}`}bufferLaneUpdate(t){const e=Fd.laneKey(t.batchId,t.partition,t.partitionCount),n=this.pendingLaneUpdates.get(e)??new Map;for(const{index:e,value:r}of t.buckets){const t=n.get(e);(void 0===t||r>t)&&n.set(e,r)}this.pendingLaneUpdates.set(e,n)}applyPendingLaneUpdate(){const t=this.pendingLaneUpdates;this.pendingLaneUpdates=new Map;const e=this.stamper?.currentPartition;if(!this.stamper||!this.postageBatchId||void 0===e)return;const n=t.get(Fd.laneKey(this.postageBatchId,e,this.stamper.partitionCount));n&&this.stamper.applyUtilizationUpdate([...n].map(([t,e])=>({index:t,value:e})))}answerLeaseRequest(t,e,n){const r=this.coordinator;r&&(this.answeredRequests.has(n)||(this.markRequestAnswered(n),this.bus.publish({type:"lease-claim",accountId:t,batchId:e,fromDeviceId:this.requireDeviceId(),requestId:n}),r.yieldForPeer(n).catch(t=>{console.error("[Proxy] Peer lease yield failed:",t)})))}yieldRankDelayMs(t){const e=this.coordinator,n=e?.currentPartition,r=e?.partitionCount??1;if(void 0===n||r<=1)return 0;const i=Number.parseInt(t.slice(0,8),16);return Number.isFinite(i)?(i+n)%r*250:250*(r-1)}standDownFromRequest(t){if(void 0===t)return;this.markRequestAnswered(t);const e=this.pendingYields.get(t);void 0!==e&&(clearTimeout(e),this.pendingYields.delete(t))}markRequestAnswered(t){if(this.answeredRequests.add(t),this.answeredRequests.size<=32)return;const e=this.answeredRequests.values().next().value;void 0!==e&&this.answeredRequests.delete(e)}cancelPendingYields(){for(const t of this.pendingYields.values())clearTimeout(t);this.pendingYields.clear()}setupBusListeners(){this.bus.onPeerLeft(t=>this.presence.forgetPeer(t)),this.bus.subscribe((t,e)=>{switch(t.type){case"utilization-updated":{if(t.batchId!==this.postageBatchId||!this.stamper)return;const e=this.stamper.currentPartition;return void 0===e?void(0===t.partition&&1===t.partitionCount?this.stamper.applyUtilizationUpdate(t.buckets):this.bufferLaneUpdate(t)):void(t.partition===e&&t.partitionCount===this.stamper.partitionCount&&this.stamper.applyUtilizationUpdate(t.buckets))}case"lease-request":{const e=this.coordinator;if(!e||t.accountId!==e.accountId||t.batchId!==e.batchId||t.fromDeviceId===this.deviceId)return;const{requestId:n}=t;if(this.pendingYields.has(n))return;if(this.answeredRequests.has(n))return;if(!e.canYieldForPeer)return;const r=setTimeout(()=>{this.pendingYields.delete(n),this.answerLeaseRequest(t.accountId,t.batchId,n)},this.yieldRankDelayMs(n));return void this.pendingYields.set(n,r)}case"lease-claim":if(t.fromDeviceId===this.deviceId||t.accountId!==this.coordinator?.accountId||t.batchId!==this.coordinator?.batchId)return;return void this.standDownFromRequest(t.requestId);case"lease-released":if(t.fromDeviceId===this.deviceId||t.accountId!==this.coordinator?.accountId||t.batchId!==this.coordinator?.batchId)return;return this.standDownFromRequest(t.requestId),void this.coordinator?.notifySlotMaybeFree();case"account-delta":return void this.applyAccountDelta(t.snapshot);case"presence":if(t.accountId!==this.busBoundAccountId||t.fromDeviceId===this.deviceId)return;return void this.presence.observe(t.fromDeviceId,Date.now(),e)}})}applyAccountDelta(t){const e=this.findConnectionForParent({includeEnded:!0});if(!e||t.accountId!==e.account.id.toHex())return;const{account:n}=e;if(this.partitionAccount){const r=Cc([Td(Bd(n)),Td(t)],ro(n.devices,t.metadata.devices),n.id.toHex()),i=Mc({id:n.id,derivationKey:n.derivationKey,account:r,lastModified:Math.max(n.lastModified??n.createdAt,t.metadata.lastModified)}),s=fn(la(r.connectedApps,n.connectedApps),e.app.appUrl);this.partitionAccount={...this.partitionAccount,...i,connectedApps:s,postageStamps:to(s.find(t=>t.appUrl===e.app.appUrl)??e.app,i,i.postageStamps)},this.refreshStoredPartitionAccount()}this.enqueueReconcile("applyAccountDelta",()=>this.reevaluateConnection("bus"))}createProgressCallback(t,e,n){if(n)return n=>{this.postMessage(t,{type:"uploadProgress",requestId:e,total:n.total,processed:n.processed})}}announceReady(){window.parent&&window.parent!==window&&window.parent.postMessage({type:"proxyInitialized"},"*")}getPostageBatchId(){return this.postageBatchId}getSignerKey(){return this.signerKey}async initializeStamper(t){const{signerKey:e,postageBatchId:n}=this;if(!e||!n)return void console.warn("[Proxy] Cannot initialize stamper: missing signer key or batch ID");const r=++this.stamperInitGeneration,i=()=>this.postageBatchId!==n||this.signerKey!==e||this.stamperInitGeneration!==r,s=await this.lookupAccountForApp();if(i())return;if(!s)return void console.warn("[Proxy] Cannot initialize stamper: account not found");let a;this.utilizationStore||(this.utilizationStore=new Ma);try{a=await Gs.create(e,new p(n),t,this.utilizationStore,s.owner,s.encryptionKey)}catch(t){return void console.error("[Proxy] Failed to create stamper:",t)}if(i())return;this.stamper=a,this.stamperAccountFingerprint=`${s.owner.toHex()}-${ye(s.encryptionKey)}`;const o=function(){try{if("undefined"==typeof localStorage)return;const t=localStorage.getItem("swarm-id-partition-tuning");if(!t)return;const e=JSON.parse(t);if("object"!=typeof e||null===e)return;const n=t=>"number"==typeof t&&Number.isFinite(t)&&t>=0?t:void 0,r=e;return{guardWindowMs:n(r.guardWindowMs),guardPollMs:n(r.guardPollMs),readTimeoutMs:n(r.readTimeoutMs)}}catch{return}}(),c=()=>this.accountBee;this.coordinator=new Vo({get bee(){return c()},batchId:n,stamper:a,deviceId:this.requireDeviceId(),knownDeviceIds:()=>this.knownDeviceIdsForAccount(s.accountId),refreshKnownDeviceIds:()=>this.refreshDeviceRegistryFromSwarm(s.accountId,s.encryptionKey),intentReadTimeoutMs:o?.readTimeoutMs,intentGuardWindowMs:o?.guardWindowMs,intentGuardPollMs:o?.guardPollMs,accountId:s.accountId,backupSigner:new I(Oe(ye(s.encryptionKey),Ue)),swarmEncryptionKey:s.encryptionKey,partitionCount:s.partitionCount,mode:"persistent",readLeaseCache:()=>this.readLeaseCache(s.accountId,n),writeLeaseCache:t=>this.writeLeaseCache(s.accountId,n,t??null),flushStamperState:()=>this.saveStamperStateIfNeeded(),getWorkerPool:t=>this.getOrCreateWorkerPool(t),onLeaseChange:()=>this.emitConnectionInfoIfChanged(),onSlotWait:()=>this.bus.publish({type:"lease-request",accountId:s.accountId,batchId:n,fromDeviceId:this.requireDeviceId(),requestId:crypto.randomUUID().slice(0,8)}),onLeaseAcquired:()=>{this.applyPendingLaneUpdate(),this.schedulePublish("acquired")},onLeaseReleased:(t,e)=>{this.bus.publish({type:"lease-released",accountId:s.accountId,batchId:n,partition:t,fromDeviceId:this.requireDeviceId(),requestId:e})}}),this.startLeaseOnceAllowed(this.coordinator)}startLeaseOnceAllowed(t){const e=this.restoredSessionCheck;e?e.verdict.then(e=>{"allowed"===e&&this.coordinator===t&&t.startLease()}):t.startLease()}requireDeviceId(){return this.deviceId||(this.deviceId=Pc()),this.deviceId}readLeaseCache(t,e){try{const n=localStorage.getItem(mn(t,e));return n?JSON.parse(n):void 0}catch{return}}writeLeaseCache(t,e,n){const r=mn(t,e);null===n?localStorage.removeItem(r):localStorage.setItem(r,JSON.stringify(n))}async getOrCreateWorkerPool(t){const e=t??("undefined"!=typeof navigator&&navigator.hardwareConcurrency?Math.min(navigator.hardwareConcurrency,8):4);if(this.stampWorkerPool?.size===e&&this.stampWorkerPool.stamper===this.stamper)return this.stampWorkerPool;if(this.terminateStampWorkerPool(),this.signerKey&&this.stamper)try{return this.stampWorkerPool=await Qa.create(this.signerKey,this.stamper,e),this.stampWorkerPool}catch(t){return void console.warn("[Proxy] Failed to create StampWorkerPool:",t)}}async saveStamperState(){try{await this.persistStamperState()}catch(t){console.error("[Proxy] Failed to save stamper state:",t)}}async persistStamperState(){if(!this.stamper)return;const t=this.stamper.getBucketUpdatesForBroadcast(),e=this.stamper.currentPartition??0,n=this.stamper.partitionCount;await this.stamper.flush(),this.postageBatchId&&t.length>0&&this.bus.publish({type:"utilization-updated",batchId:this.postageBatchId,partition:e,partitionCount:n,buckets:t},{localOnly:!0})}async withModeAwareWriteLock(t,e){if(this.isSubsidisedModeActive())return e({mode:"subsidised",gatewayUrl:this.subsidisedGatewayUrl});if(!this.coordinator)throw new ge("not-authenticated","Stamper not initialized. Please login first.");return this.coordinator.withWrite(t=>e("stamper"===t.mode?{...t,bee:this.nodeBee}:t),t)}async saveStamperStateIfNeeded(){this.isSubsidisedModeActive()||await this.saveStamperState()}setupMessageListener(){window.addEventListener("message",async t=>{const{type:e}=t.data;if("parentIdentify"===e){if(t.source!==window.parent)return void console.warn("[Proxy] Rejected parentIdentify from non-parent window");const e=bn.safeParse(t.data);if(!e.success)return void console.warn("[Proxy] Invalid parentIdentify message:",e.error);try{await this.handleParentIdentify(e.data,t)}catch(e){console.error("[Proxy] Initialization failed:",e),this.postMessage(t,{type:"initError",error:e instanceof Error?e.message:"Initialization failed"})}return}if(!this.parentIdentified)return void console.warn("[Proxy] Ignoring message - parent not identified yet");if(t.origin===window.location.origin&&"setSecret"===e){const e=vn.safeParse(t.data);return e.success?void await this.handlePopupMessage(e.data):(console.warn("[Proxy] Invalid setSecret payload:",e.error),void this.endRefusedConnect())}if(t.origin!==this.parentOrigin)return void console.warn("[Proxy] Rejected message from unauthorized origin:",t.origin);let n;try{n=Sn.parse(t.data)}catch(t){return void console.warn("[Proxy] Invalid parent message:",t)}try{await this.handleParentMessage(n,t)}catch(e){console.error("[Proxy] Error handling parent message:",e),this.sendErrorToParent(t,n.requestId,e,"Unknown error")}})}async handleParentIdentify(t,e){if(this.parentIdentifyReceived)return void console.error("[Proxy] Parent already identified! Ignoring duplicate.");this.parentIdentifyReceived=!0;const n=await this.siteAllowList.check(e.origin);if(!n.allowed)throw console.warn("[Proxy] Refused parent:",n.message),new Error(n.message);const r=t.popupMode,i=t.metadata,s=t.buttonConfig;this.parentOrigin=e.origin,this.parentIdentified=!0,e.source&&(this.parentWindow=e.source),r&&(this.popupMode=r),i&&(this.appMetadata=i),s&&(this.buttonConfig=s),this.siteBeeApiUrl=t.beeApiUrl,this.siteSubsidisedGatewayUrl=t.subsidisedGatewayUrl,this.subsidisedGatewayUrl=t.subsidisedGatewayUrl,this.dropGatewayForOwnCustomNode(),await this.loadAuthData(),this.postMessage(e,{type:"proxyReady",authenticated:this.authenticated,parentOrigin:this.parentOrigin,storageShared:Nc()}),this.emitConnectionInfoIfChanged()}async handleParentMessage(t,e){switch(t.type){case"parentIdentify":break;case"checkAuth":this.handleCheckAuth(t,e);break;case"disconnect":this.handleDisconnect(t,e);break;case"uploadData":await this.handleUploadData(t,e);break;case"downloadData":await this.handleDownloadData(t,e);break;case"deriveAppSecret":await this.handleDeriveAppSecret(t,e);break;case"getChatKey":await this.handleGetChatKey(t,e);break;case"setBeeApiUrl":this.handleSetBeeApiUrl(t,e);break;case"stampChunk":await this.handleStampChunk(t,e);break;case"uploadFile":await this.handleUploadFile(t,e);break;case"downloadFile":await this.handleDownloadFile(t,e);break;case"uploadFiles":await this.handleUploadFiles(t,e);break;case"listFiles":await this.handleListFiles(t,e);break;case"uploadChunk":await this.handleUploadChunk(t,e);break;case"downloadChunk":await this.handleDownloadChunk(t,e);break;case"isConnected":await this.handleIsConnected(t,e);break;case"getNodeInfo":await this.handleGetNodeInfo(t,e);break;case"gsocMine":this.handleGsocMine(t,e);break;case"gsocSend":await this.handleGsocSend(t,e);break;case"socUpload":await this.handleSocUpload(t,e);break;case"socRawUpload":await this.handleSocRawUpload(t,e);break;case"socDownload":await this.handleSocDownload(t,e);break;case"socRawDownload":await this.handleSocRawDownload(t,e);break;case"socGetOwner":await this.handleSocGetOwner(t,e);break;case"epochFeedDownloadReference":await this.handleEpochFeedDownloadReference(t,e);break;case"epochFeedUploadReference":await this.handleEpochFeedUploadReference(t,e);break;case"feedGetOwner":await this.handleFeedGetOwner(t,e);break;case"seqFeedGetOwner":await this.handleSequentialFeedGetOwner(t,e);break;case"seqFeedDownloadPayload":await this.handleSequentialFeedDownloadPayload(t,e);break;case"seqFeedDownloadRawPayload":await this.handleSequentialFeedDownloadRawPayload(t,e);break;case"seqFeedDownloadReference":await this.handleSequentialFeedDownloadReference(t,e);break;case"seqFeedUploadPayload":await this.handleSequentialFeedUploadPayload(t,e);break;case"seqFeedUploadRawPayload":await this.handleSequentialFeedUploadRawPayload(t,e);break;case"seqFeedUploadReference":await this.handleSequentialFeedUploadReference(t,e);break;case"actUploadData":await this.handleActUploadData(t,e);break;case"actDownloadData":await this.handleActDownloadData(t,e);break;case"actAddGrantees":await this.handleActAddGrantees(t,e);break;case"actRevokeGrantees":await this.handleActRevokeGrantees(t,e);break;case"actGetGrantees":await this.handleActGetGrantees(t,e);break;case"getPostageBatch":await this.handleGetPostageBatch(t,e);break;case"createFeedManifest":await this.handleCreateFeedManifest(t,e);break;case"connect":this.handleConnect(t,e);break;default:const n=t;console.warn("[Proxy] Unhandled message type:",n)}}async loadAuthData(){if(!this.parentOrigin)return void(this.authLoading=!1);await aa().prime();const t=this.lookupAppSecretFromSharedStorage();if(t){const e=this.findConnectionForParent();e&&this.startRestoredSessionCheck({bee:this.accountBee,derivationKey:e.account.derivationKey,accountId:e.account.id.toHex(),appOrigin:this.parentOrigin,connectedAt:e.app.lastConnectedAt}),this.appSecret=t.secret,this.chatBinding=void 0,this.authenticated=!0,this.authLoading=!1,this.showAuthButton(),this.joinAccountBus();const n=this.lookupPostageStampForApp();return this.setResolvedStamp(n),void(n&&await this.initializeStamper(n.depth))}const e=await this.readPartitionSession();e?await this.restorePartitionSession(e):(this.authLoading=!1,this.showAuthButton())}async restorePartitionSession(t){const{data:e}=t,n=e.account.connectedApps.find(t=>t.appUrl===this.parentOrigin)?.lastConnectedAt;this.startRestoredSessionCheck({bee:this.accountBee,derivationKey:e.account.derivationKey,accountId:e.account.id.toHex(),appOrigin:this.parentOrigin,connectedAt:n}),this.appSecret=e.secret,this.chatBinding=this.acceptHandedOverChatBinding(e),this.authenticated=!0,this.storagePartitioned=!0,this.authLoading=!1,this.deviceId=Pc(),await this.hydratePartitionAccount(e.account,e.secret,e.networkSettings,n??Date.now()),this.showAuthButton(),this.emitConnectionInfoIfChanged()}startRestoredSessionCheck(t){const e={input:t,settled:void 0,verdict:qc(t)};this.restoredSessionCheck=e,e.verdict.then(t=>{e.settled=t,this.restoredSessionCheck===e&&("ended"===t?(console.info("[Proxy] The restored session was ended while this page was closed"),this.clearAuthData()):"unconfirmed"===t&&console.warn("[Proxy] Could not confirm the restored session, writes stay refused"),this.emitConnectionInfoIfChanged())})}async awaitRestoredSessionAllowed(){let t=this.restoredSessionCheck;if(!t)return;"unconfirmed"===t.settled&&(this.startRestoredSessionCheck({...t.input,bee:this.accountBee}),t=this.restoredSessionCheck);const e=await t.verdict;if("allowed"!==e){if("ended"===e)throw Rd();throw new ge("upload-unavailable","Could not confirm with Swarm that this session is still allowed to write, so writes are refused until it can be confirmed.",{reason:"session-unconfirmed"})}}async ensureCanWrite(){if("ended"===this.restoredSessionCheck?.settled)throw Rd();this.ensureCanUpload(),await this.awaitRestoredSessionAllowed(),this.ensureCanUpload()}lookupPostageStampForApp(){if(this.parentOrigin)try{const t=this.findConnectionForParent();if(!t)return;const{account:e,app:n}=t;return function(t,e,n){const r=[t.postageStampBatchID,e.defaultPostageStampBatchID];for(const t of r){if(!t)continue;const e=n.find(e=>!e.deletedAt&&e.batchID.equals(t));if(e)return e}}(n,e,e.postageStamps)}catch(t){return void console.error("[Proxy] Error looking up postage stamp:",t)}}async lookupAccountForApp(){if(this.parentOrigin)try{const t=this.findConnectionForParent();if(!t)return;const{account:e}=t,n=await en(e.derivationKey);return{owner:e.id,encryptionKey:we(n),accountId:e.id.toHex(),partitionCount:e.partitionCount??1}}catch(t){return void console.error("[Proxy] Error looking up account:",t)}}knownDeviceIdsForAccount(t){const e=Date.now(),n=this.busBoundAccountId===t?this.presence.liveDeviceIds(e):[];try{const r=this.partitionAccount?.id.toHex()===t?this.partitionAccount:aa().load().find(e=>e.id.toHex()===t);return!r||De(r)?n:[...new Set([...Tc(r.devices,e,Bc),...n])]}catch{return n}}async refreshDeviceRegistryFromSwarm(t,e){const n=Date.now();if(!(n-this.lastDeviceRegistryRefreshAt<8e3)){this.lastDeviceRegistryRefreshAt=n;try{const n=this.partitionAccount?.id.toHex()===t,r=n?void 0:aa();await(r?.prime());const i=r?.load()??[],s=n?this.partitionAccount:i.find(e=>e.id.toHex()===t);if(!s||De(s))return;const a=new I(await Ae(ye(e),Ue)).publicKey().address(),o=await fc({bee:this.accountBee,accountId:s.id.toHex(),owner:a});if(0===o.length)return;const c=Ec(ro(s.devices,o),this.requireDeviceId(),this.announcedDeviceName());(function(t,e,n){if(t.length!==e.length)return!0;const r=new Map(t.map(t=>[t.deviceId,t]));return e.some(t=>{const e=r.get(t.deviceId);if(!e)return!0;const i=t.deviceId===n;return Dc.some(([n,r])=>(!i||"peers-only"!==r)&&e[n]!==t[n])})})(s.devices,c,this.requireDeviceId())&&(n?this.partitionAccount={...s,devices:c}:r.update(e=>e.map(e=>e.id.toHex()===t?{...e,devices:c}:e)).catch(()=>{}))}catch(t){console.warn("[Proxy] Device-registry refresh failed (using current registry):",t)}}}buildAccountStateSnapshot(t){if(!this.parentOrigin)return;const e=this.findConnectionForParent({includeEnded:t.includeEndedConnection});if(!e)return;const{account:n}=e;return!t.requireDefaultStamp||n.defaultPostageStampBatchID?ca(n,n.id.toHex(),Date.now()):void 0}publishAccountDelta(t){const e=this.buildAccountStateSnapshot({requireDefaultStamp:!1,includeEndedConnection:!0===t?.ofEndedConnection});e&&(void 0===this.busBoundAccountId||e.accountId===this.busBoundAccountId?this.bus.publish({type:"account-delta",snapshot:ua(e)}):console.warn(`[Proxy] Account changed since the bus room was joined (snapshot ${e.accountId} vs bus room ${this.busBoundAccountId}); skipping delta.`))}async buildAccountStateSnapshotForPublish(){if(this.parentOrigin)try{const t=this.findConnectionForParent();if(!t)return;const e=this.buildAccountStateSnapshot({requireDefaultStamp:!0,includeEndedConnection:!1});if(!e)return;const n=await en(t.account.derivationKey),r=new I(await Ae(n,Ue)),i=r.publicKey().address();return{snapshot:e,encryptionKey:n,accountKey:r,owner:i}}catch(t){return void console.error("[Proxy] Failed to assemble account-state snapshot:",t)}}schedulePublish(t){"change"!==this.publishReason&&(this.publishReason=t),void 0!==this.publishTimer&&clearTimeout(this.publishTimer),this.publishTimer=setTimeout(()=>{this.publishTimer=void 0;const t=this.publishReason??"acquired";this.publishReason=void 0,this.runAccountStatePublish(t)},1500)}async runAccountStatePublish(t){if(this.publishInFlight)return void this.schedulePublish(t);"change"===t&&this.publishAccountDelta();const e=this.coordinator;if(e&&void 0!==e.currentPartition){this.publishInFlight=!0;try{const n=await this.buildAccountStateSnapshotForPublish();if(!n)return;if(this.coordinator!==e)return;const{snapshot:r,encryptionKey:i,accountKey:s,owner:a}=n;if(r.accountId!==e.accountId)return void console.warn(`[Proxy] Account changed during publish scheduling (snapshot ${r.accountId} vs coordinator ${e.accountId}); skipping publish.`);const o=this.requireDeviceId();if("acquired"===t){const t=(await fc({bee:this.accountBee,accountId:r.accountId,owner:a}).catch(()=>[])).find(t=>t.deviceId===o);if(t?.removedAt){const e=r.metadata.devices.find(t=>t.deviceId===o);if(!(!!e&&!e.removedAt&&(e.lastSignedInAt??0)>t.removedAt))return void console.info(`[Proxy] This device is tombstoned in the roster for ${r.accountId}; not re-announcing.`);console.info(`[Proxy] This device signed in since its removal from ${r.accountId}; announcing the reactivation.`)}else if(t)return void console.info(`[Proxy] Device already in roster for ${r.accountId}; skipping announce publish.`)}const c=r.metadata.devices.find(t=>t.deviceId===o)??{deviceId:o,name:this.announcedDeviceName(),createdAt:Date.now(),lastSignedInAt:Date.now()},d=vc(r);await e.withWrite(t=>xc({bee:this.accountBee,accountId:r.accountId,device:c,accountKey:s,owner:a,encryptionKey:i,view:d,target:t})),console.info(`[Proxy] Published device state for ${r.accountId} (partition ${e.currentPartition})`)}catch(t){console.warn("[Proxy] Account-state publish failed:",t)}finally{this.publishInFlight=!1}}}reactivateThisDevice(){const t=this.partitionAccount,e=this.deviceId;if(!t||!e)return;if(!t.devices.some(t=>t.deviceId===e&&t.removedAt))return;const n=Date.now();this.partitionAccount={...t,devices:t.devices.map(t=>t.deviceId===e?{...t,removedAt:void 0,lastSignedInAt:n}:t)}}announcedDeviceName(){return this.storagePartitioned&&this.parentOrigin?function(t){const e=$c();try{return`${e} · ${new URL(t).host}`}catch{return e}}(this.parentOrigin):$c()}isConnectionValid(t){return!!t.connectedUntil&&t.connectedUntil>Date.now()}findConnectionForParent(t){if(!this.parentOrigin)return;const e=e=>this.isConnectionValid(e)||!0===t?.includeEnded;if(this.partitionAccount){const t=this.partitionAccount.connectedApps.find(t=>t.appUrl===this.parentOrigin&&e(t));return t?{account:this.partitionAccount,app:t}:void 0}const n=aa().load(),r=[];for(const t of n)if(!De(t))for(const n of t.connectedApps)n.appUrl===this.parentOrigin&&e(n)&&r.push({account:t,app:n});return r.sort((t,e)=>Number(this.isConnectionValid(e.app))-Number(this.isConnectionValid(t.app))||e.app.lastConnectedAt-t.app.lastConnectedAt)[0]}lookupAppSecretFromSharedStorage(){if(this.parentOrigin)try{const t=this.findConnectionForParent();if(!t?.app.appSecret)return;return{secret:t.app.appSecret}}catch(t){return void console.error("[Proxy] Error looking up app secret from shared storage:",t)}}clearAuthData(){if(!this.parentOrigin)return;this.clearPartitionSession();const t=`swarm-stamper-${this.parentOrigin}-${this.postageBatchId}`;localStorage.removeItem(t);const e=this.parentOrigin;aa().update(t=>{let n=!1;const r=t.map(t=>{if(De(t))return t;const r=t.connectedApps.map(t=>t.appUrl===e?(n=!0,{...t,connectedUntil:void 0,appSecret:void 0,disconnectedAt:Date.now()}):t);return{...t,connectedApps:r}});return n?r:void 0}).catch(()=>{}),this.authenticated=!1,this.authLoading=!1,this.appSecret=void 0,this.chatBinding=void 0,this.setResolvedStamp(void 0),this.deviceId=void 0,void 0!==this.publishTimer&&(clearTimeout(this.publishTimer),this.publishTimer=void 0),this.pendingLaneUpdates.clear(),this.storagePartitioned=!1,this.partitionAccount=void 0,this.detachBusTransports(),this.busJoinGeneration+=1,this.pendingChallenge=void 0,this.emitConnectionInfoIfChanged(),this.showAuthButton()}sendErrorToParent(t,e,n,r){e&&this.postMessage(t,{type:"error",requestId:e,...Ji(n,r)})}ensureCanUpload(){if(!this.authenticated||!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");if(!this.isSubsidisedModeActive()){if("stamp-expired"===this.stampRefusal)throw new ge("upload-unavailable","The account's drive has expired. Renew it or add another in Swarm ID before uploading.",{reason:"stamp-expired"});if("stamp-not-usable"===this.stampRefusal)throw new ge("upload-unavailable","The account's drive is not usable: its record says the node does not have the batch, or cannot use it. Open the drive in Swarm ID to refresh it, or add another, before uploading.",{reason:"stamp-not-usable"})}}hasUsableUserStamp(){return!(!this.postageBatchId||!this.signerKey)&&(!this.stampRefusal&&!!this.stamper)}isSubsidisedModeActive(){return!!this.subsidisedGatewayUrl&&!this.hasUsableUserStamp()}sendToParent(t){this.parentOrigin&&this.parentWindow?this.parentWindow.postMessage(t,this.parentOrigin):console.warn("[Proxy] Cannot send message to parent - no parent window reference")}postMessage(t,e){t.source?t.source.postMessage(e,{targetOrigin:t.origin}):console.warn("[Proxy] Cannot send message - no event source")}handleCheckAuth(t,e){this.postMessage(e,{type:"authStatusResponse",requestId:t.requestId,authenticated:this.authenticated,origin:this.authenticated?this.parentOrigin:void 0,beeApiUrl:this.siteBeeApiUrl})}identityKeysFor(t){return this.identityKeys?.derivationKey!==t&&(this.identityKeys={derivationKey:t,sharingPublicKey:kn(t).publicKey,postageSignerAddress:new I(xn(t)).publicKey().address().toHex()}),this.identityKeys}buildConnectionInfo(){let t,e;if(this.authenticated&&this.parentOrigin)try{const e=this.findConnectionForParent();if(e){const{account:n}=e,{sharingPublicKey:r,postageSignerAddress:i}=this.identityKeysFor(n.derivationKey);t={id:n.id.toHex(),name:n.name,address:n.id.toHex(),publicKey:n.publicKey,sharingPublicKey:r,postageSignerAddress:i,avatar:In(n.id.toHex())}}}catch(t){console.error("[Proxy] Error looking up identity:",t)}if(this.authenticated&&this.appSecret){const t=we(this.appSecret),{x:n,y:r}=Xc(t),i=id(n,r);e={address:new I(this.appSecret).publicKey().address().toHex(),publicKey:ye(i)}}let n="unavailable";return this.authenticated&&this.appSecret&&"unconfirmed"!==this.restoredSessionCheck?.settled&&(this.hasUsableUserStamp()?n="user-stamp":this.subsidisedGatewayUrl&&(n="subsidised")),{canUpload:"unavailable"!==n,storagePartitioned:this.storagePartitioned||void 0,uploadMode:n,uploadUnavailableReason:"unavailable"===n?this.uploadUnavailableReason():void 0,identity:t,appKey:e,partition:this.coordinator?.currentPartition,chatBinding:this.authenticated?this.chatBinding:void 0,beeApiUrl:this.siteBeeApiUrl}}uploadUnavailableReason(){if(this.authenticated&&this.appSecret)return"unconfirmed"===this.restoredSessionCheck?.settled?"session-unconfirmed":this.postageBatchId&&this.signerKey?this.stampRefusal?this.stampRefusal:this.stamper?void 0:"stamper-failed":"no-stamp"}emitConnectionInfoIfChanged(){if(!this.parentOrigin)return;const t=this.buildConnectionInfo();var e,n;(e=this.lastConnectionInfo,n=t,e&&e.canUpload===n.canUpload&&!!e.storagePartitioned==!!n.storagePartitioned&&e.uploadMode===n.uploadMode&&e.uploadUnavailableReason===n.uploadUnavailableReason&&e.identity?.id===n.identity?.id&&e.identity?.name===n.identity?.name&&e.identity?.address===n.identity?.address&&e.identity?.publicKey===n.identity?.publicKey&&e.identity?.avatar.source===n.identity?.avatar.source&&e.identity?.avatar.url===n.identity?.avatar.url&&e.appKey?.address===n.appKey?.address&&e.appKey?.publicKey===n.appKey?.publicKey&&e.partition===n.partition&&e.chatBinding?.message===n.chatBinding?.message&&e.chatBinding?.signature===n.chatBinding?.signature&&e.beeApiUrl===n.beeApiUrl)||(this.lastConnectionInfo=t,this.sendToParent({type:"connectionInfoChanged",canUpload:t.canUpload,storagePartitioned:t.storagePartitioned,uploadMode:t.uploadMode,uploadUnavailableReason:t.uploadUnavailableReason,identity:t.identity,appKey:t.appKey,partition:t.partition,chatBinding:t.chatBinding,beeApiUrl:t.beeApiUrl}))}async handleIsConnected(t,e){const n=await this.bee.connectivity.isConnected();this.postMessage(e,{type:"isConnectedResponse",requestId:t.requestId,connected:n})}async handleGetNodeInfo(t,e){try{const n=await this.bee.status.getNodeInfo();this.postMessage(e,{type:"getNodeInfoResponse",requestId:t.requestId,beeMode:n.beeMode,chequebookEnabled:n.chequebookEnabled,swapEnabled:n.swapEnabled})}catch(n){this.sendErrorToParent(e,t.requestId,n,"Failed to get node info")}}handleDisconnect(t,e){this.clearAuthData(),this.postMessage(e,{type:"disconnectResponse",requestId:t.requestId,success:!0})}showAuthButton(){if(!this.authButtonContainer||this.isConnecting)return;this.authButtonContainer.innerHTML="";const t=document.createElement("button"),e=this.authenticated,n=this.authLoading,r=this.buttonConfig||{},i=r.loadingText||"⏳ Loading...",s=r.disconnectText||"🔓 Disconnect from Swarm ID",a=r.connectText||"🔐 Login with Swarm ID";n?(t.textContent=i,t.disabled=!0):t.textContent=e?s:a,t.style.width="100%",t.style.height="100%",t.style.display="flex",t.style.alignItems="center",t.style.justifyContent="center",n?(t.style.backgroundColor="#999",t.style.cursor="default"):e?(t.style.backgroundColor="#666",t.style.cursor="pointer"):(t.style.backgroundColor=r.backgroundColor||"#dd7200",t.style.cursor="pointer"),t.style.color=r.color||"white",t.style.border="none",t.style.borderRadius=r.borderRadius||"0",t.style.padding="0",t.style.fontSize=r.fontSize||"14px",t.style.fontWeight=r.fontWeight?.toString()??"600",r.fontFamily&&(t.style.fontFamily=r.fontFamily),t.addEventListener("click",()=>{e?this.handleDisconnectClick():this.handleLoginClick(t)}),this.authButtonContainer.appendChild(t)}handleConnect(t,e){const n=this.openAuthPopup({popupMode:t.popupMode});this.postMessage(e,{type:"connectResponse",requestId:t.requestId,success:n})}openAuthPopup(t){if(!this.parentOrigin)return console.error("[Proxy] Cannot open auth window - parent origin not set"),!1;const e=crypto.randomUUID();this.pendingChallenge=e,localStorage.setItem(ln,e);const n=window.location.pathname.replace(/\/proxy$/,""),r=An(window.location.origin+n,this.parentOrigin,this.appMetadata,{challenge:e}),i=t?.popupMode??this.popupMode;let s=null;if(s="popup"===i?window.open(r,"_blank","width=500,height=600"):window.open(r,"_blank"),!s)return console.warn("[Proxy] Popup was blocked or failed to open"),this.isConnecting=!1,this.showAuthButton(),!1;return setTimeout(()=>{const t=setInterval(()=>{s?.closed&&(clearInterval(t),this.isConnecting&&!this.authenticated&&(this.isConnecting=!1,this.showAuthButton()))},500);setTimeout(()=>{clearInterval(t)},3e5)},2e3),!0}handleLoginClick(t){if(this.isConnecting=!0,t.disabled=!0,t.innerHTML='<span style="display: inline-block; width: 16px; height: 16px; border: 2px solid rgba(255,255,255,.3); border-radius: 50%; border-top-color: white; animation: spin 1s linear infinite;"></span>',!document.getElementById("swarm-id-spinner-style")){const t=document.createElement("style");t.id="swarm-id-spinner-style",t.textContent="@keyframes spin { to { transform: rotate(360deg); } }",document.head.appendChild(t)}this.openAuthPopup()}handleDisconnectClick(){this.clearAuthData(),this.sendToParent({type:"authStatusResponse",requestId:"disconnect",authenticated:!1,origin:void 0})}setAuthButtonContainer(t){this.authButtonContainer=t,this.showAuthButton()}async handleUploadData(t,e){const{requestId:n,data:r,options:i,requestOptions:s,enableProgress:a,useWebSocket:o,useWorkers:c,workerCount:d,concurrency:u}=t;try{await this.ensureCanWrite();const t=this.createProgressCallback(e,n,a),l=await this.withModeAwareWriteLock({useWorkers:c,workerCount:d},async e=>await ls(e,r,{encryptionKey:!!i?.encrypt||void 0,pin:i?.pin,deferred:i?.deferred,tag:i?.tag,webSocket:o?{concurrency:u}:void 0,httpConcurrency:u,onProgress:t,requestOptions:s}));this.postMessage(e,{type:"uploadDataResponse",requestId:n,reference:l.reference,tagUid:l.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Upload failed")}}async handleDownloadData(t,e){const{requestId:n,reference:r,options:i,requestOptions:s}=t;try{const t=await Qe(this.bee,r,i,void 0,s);this.postMessage(e,{type:"downloadDataResponse",requestId:n,data:t})}catch(t){this.sendErrorToParent(e,n,t,"Download failed")}}async handleUploadFile(t,e){const{requestId:n,data:r,name:i,options:s,requestOptions:a,enableProgress:o,useWebSocket:c,useWorkers:d,workerCount:u,concurrency:l}=t,h=i||"index.bin";try{await this.ensureCanWrite();const t=this.createProgressCallback(e,n,o),i=s?.tag??await _i(this.bee),p=await this.withModeAwareWriteLock({useWorkers:d,workerCount:u},async e=>{const n=Xa(s),o=await ls(e,r,{encryptionKey:!!n.content||void 0,pin:s?.pin,deferred:s?.deferred,tag:i,webSocket:c?{concurrency:l}:void 0,httpConcurrency:l,onProgress:t,requestOptions:a}),d=new z,u=we(o.reference);d.addFork(h,u,{"Content-Type":"application/octet-stream",Filename:h}),d.addFork("/",V,{"website-index-document":h});return await He(d,async(t,n)=>(await ps(e,t,{pin:s?.pin,deferred:s?.deferred,tag:i,requestOptions:a}),{tagUid:n?i:void 0}),{encrypt:n.manifest})});this.postMessage(e,{type:"uploadFileResponse",requestId:n,reference:p.rootReference,tagUid:p.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Upload failed")}}async handleDownloadFile(t,e){const{requestId:n,reference:r,path:i,options:s,requestOptions:a}=t;try{const t=await je(this.bee,r,a);let o;if(i)o=i;else{const{indexDocument:e}=new sr(t).getDocsMetadata();if(!e)throw new Error("Manifest does not contain an index document reference");o=e}const c=t.find(o);if(!c)throw new Error(`Path not found in manifest: ${o}`);if(!c.targetAddress)throw new Error(`Path "${o}" does not have a target address`);const d=c.metadata?.Filename||o.split("/").pop()||"file",u=ye(c.targetAddress),l=await Qe(this.bee,u,s,void 0,a);this.postMessage(e,{type:"downloadFileResponse",requestId:n,name:d,data:l})}catch(t){this.sendErrorToParent(e,n,t,"Download failed")}}async handleUploadFiles(t,e){const{requestId:n,files:r,options:i,requestOptions:s,enableProgress:a,useWorkers:o,workerCount:c}=t;try{await this.ensureCanWrite();const t=this.createProgressCallback(e,n,a),d=i?.tag??await _i(this.bee),u=await this.withModeAwareWriteLock({useWorkers:o,workerCount:c},e=>async function(t,e,n){const{content:r,manifest:i}=Xa(n),s={pin:n?.pin,deferred:n?.deferred,tag:n?.tag,requestOptions:n?.requestOptions},a=new Set;for(const{path:t}of e){if(a.has(t))throw new Error(`Duplicate path in folder: ${t}`);a.add(t)}const o=new z;let c=0;for(const i of e){const{reference:a}=await ls(t,i.data,{...s,encryptionKey:!!r||void 0});o.addFork(i.path,we(a),{"Content-Type":i.contentType??"application/octet-stream",Filename:i.path.split("/").pop()??i.path}),c++,n?.onProgress?.({total:e.length,processed:c})}const d={};n?.indexDocument&&(d["website-index-document"]=n.indexDocument),n?.errorDocument&&(d["website-error-document"]=n.errorDocument),Object.keys(d).length>0&&o.addFork("/",V,d);const{rootReference:u,tagUid:l}=await He(o,async(e,r)=>(await ps(t,e,s),{tagUid:r?n?.tag:void 0}),{encrypt:i});return{reference:u,tagUid:l}}(e,r,{...i,tag:d,onProgress:t,requestOptions:s}));this.postMessage(e,{type:"uploadFilesResponse",requestId:n,reference:u.reference,tagUid:u.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Upload failed")}}async handleListFiles(t,e){const{requestId:n,reference:r,requestOptions:i}=t;try{const t=await async function(t,e,n){return(await je(t,e,n)).collect().filter(t=>"/"!==t.fullPathString).map(t=>({path:t.fullPathString,reference:ye(t.targetAddress),contentType:t.metadata?.["Content-Type"]}))}(this.bee,r,i);this.postMessage(e,{type:"listFilesResponse",requestId:n,entries:t})}catch(t){this.sendErrorToParent(e,n,t,"Listing failed")}}async handleUploadChunk(t,e){const{requestId:n,data:r,options:i,requestOptions:s}=t;try{if(await this.ensureCanWrite(),r.length<1||r.length>4096)throw new Error(`Invalid chunk size: ${r.length} bytes. Chunks must be between 1 and 4096 bytes.`);const t=ve(r);await this.withModeAwareWriteLock(void 0,async e=>{await ps(e,t.data,{pin:i?.pin,deferred:i?.deferred??!1,tag:i?.tag,requestOptions:s})}),this.postMessage(e,{type:"uploadChunkResponse",requestId:n,reference:t.address.toHex()})}catch(t){this.sendErrorToParent(e,n,t,"Upload failed")}}async handleDownloadChunk(t,e){const{requestId:n,reference:r,options:i,requestOptions:s}=t;try{const t=await this.bee.chunk.download(r,i,s);this.postMessage(e,{type:"downloadChunkResponse",requestId:n,data:t})}catch(t){this.sendErrorToParent(e,n,t,"Download failed")}}handleGsocMine(t,e){const{requestId:n,targetOverlay:r,identifier:i,proximity:s}=t;try{const t=this.bee.messaging.gsocMine(r,i,s);this.postMessage(e,{type:"gsocMineResponse",requestId:n,signer:t.toHex()})}catch(t){this.sendErrorToParent(e,n,t,"GSOC mine failed")}}async handleGsocSend(t,e){const{requestId:n,signer:r,identifier:i,data:s,options:a}=t;try{await this.ensureCanWrite();const t=new I(r),o=new x(i),c=await this.withModeAwareWriteLock(void 0,async e=>await hs(e,t,o,s,{pin:a?.pin,deferred:a?.deferred,tag:a?.tag}));this.postMessage(e,{type:"gsocSendResponse",requestId:n,reference:ye(c.socAddress),tagUid:c.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"GSOC send failed")}}async handleSocUpload(t,e){const{requestId:n,identifier:r,data:i,signer:s,options:a}=t;try{await this.ensureCanWrite();const t=s??this.appSecret,o=new I(t),c=new x(r),d=await this.withModeAwareWriteLock(void 0,async t=>await hs(t,o,c,i,{encryptionKey:!1!==a?.encrypt||void 0,pin:a?.pin,deferred:a?.deferred,tag:a?.tag}));this.postMessage(e,{type:"socUploadResponse",requestId:n,reference:ye(d.socAddress),tagUid:d.tagUid,encryptionKey:d.encryptionKey?ye(d.encryptionKey):void 0,owner:o.publicKey().address().toHex()})}catch(t){this.sendErrorToParent(e,n,t,"SOC upload failed")}}async handleSocRawUpload(t,e){const{requestId:n,identifier:r,data:i,signer:s,options:a}=t;try{await this.ensureCanWrite();const t=s??this.appSecret,o=new I(t),c=new x(r),d=await this.withModeAwareWriteLock(void 0,async t=>await hs(t,o,c,i,{pin:a?.pin,deferred:a?.deferred,tag:a?.tag}));this.postMessage(e,{type:"socRawUploadResponse",requestId:n,reference:ye(d.socAddress),tagUid:d.tagUid,encryptionKey:void 0,owner:o.publicKey().address().toHex()})}catch(t){this.sendErrorToParent(e,n,t,"SOC raw upload failed")}}async handleSocDownload(t,e){const{requestId:n,owner:r,identifier:i,encryptionKey:s,requestOptions:a}=t;try{let t=r;if(!t){if(!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");t=new I(this.appSecret).publicKey().address().toHex()}const o=await ze(this.bee,t,i,s,a);this.postMessage(e,{type:"socDownloadResponse",requestId:n,data:o.data,identifier:o.identifier,signature:o.signature,span:o.span,payload:o.payload,address:o.address,owner:o.owner})}catch(t){this.sendErrorToParent(e,n,t,"SOC download failed")}}async handleSocRawDownload(t,e){const{requestId:n,owner:r,identifier:i,encryptionKey:s,requestOptions:a}=t;try{let t=r;if(!t){if(!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");t=new I(this.appSecret).publicKey().address().toHex()}const o=s?await ze(this.bee,t,i,s,a):await Cn(this.bee,t,i,a);this.postMessage(e,{type:"socRawDownloadResponse",requestId:n,data:o.data,identifier:o.identifier,signature:o.signature,span:o.span,payload:o.payload,address:o.address,owner:o.owner})}catch(t){this.sendErrorToParent(e,n,t,"SOC raw download failed")}}async handleSocGetOwner(t,e){const{requestId:n}=t;try{if(!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");const t=new I(this.appSecret).publicKey().address().toHex();this.postMessage(e,{type:"socGetOwnerResponse",requestId:n,owner:t})}catch(t){this.sendErrorToParent(e,n,t,"SOC get owner failed")}}async handleDeriveAppSecret(t,e){const{requestId:n,label:r}=t;try{if(!this.authenticated||!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");const t=await Ae(this.appSecret,r);this.postMessage(e,{type:"deriveAppSecretResponse",requestId:n,secret:we(t)})}catch(t){this.sendErrorToParent(e,n,t,"deriveAppSecret failed")}}async handleGetChatKey(t,e){const{requestId:n}=t;try{if(!this.authenticated||!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");this.postMessage(e,{type:"getChatKeyResponse",requestId:n,chatKey:Un(this.appSecret)})}catch(t){this.sendErrorToParent(e,n,t,"getChatKey failed")}}handleSetBeeApiUrl(t,e){this.siteBeeApiUrl=t.beeApiUrl,this.subsidisedGatewayUrl=this.siteSubsidisedGatewayUrl,this.postMessage(e,{type:"setBeeApiUrlResponse",requestId:t.requestId,beeApiUrl:t.beeApiUrl}),this.emitConnectionInfoIfChanged()}async handleStampChunk(t,e){const{requestId:n,chunk:r}=t;try{if(await this.ensureCanWrite(),this.isSubsidisedModeActive())throw Od();const t=Fa(r,{appSecret:this.appSecret,internalOwners:this.accountInternalOwners()}),i=await this.withModeAwareWriteLock(void 0,async e=>{if(!Xi(e))throw Od();if(!(e.stamper instanceof Gs))throw new ge("internal","The write path has no utilization-aware stamper to stamp with.");const n=this.stampWithinAppLimits(e.stamper,t);return await this.persistStamperStateForStamp(),n});i.recordSlot?.(),this.postMessage(e,{type:"stampChunkResponse",requestId:n,address:ye(t.address),stamp:i.marshaled,owner:t.owner?.toHex(),signature:t.signature?.toHex()})}catch(t){this.sendErrorToParent(e,n,t,"stampChunk failed")}}async persistStamperStateForStamp(){try{await this.persistStamperState()}catch(t){throw console.error("[Proxy] Failed to save the stamp's counter:",t),new ge("internal","The stamp counter could not be saved, so no stamp was returned. Try again.")}}stampWithinAppLimits(t,e){if(!this.parentOrigin)throw new ge("not-authenticated","No app has identified itself to this frame.");const n=t.batchId.toHex(),r=Pn(this.parentOrigin,n),i=function(t){if(null===t)return{count:0,windowStart:0,windowCount:0,buckets:{}};try{const e=Ka.safeParse(JSON.parse(t));return e.success?e.data:{count:0,windowStart:0,windowCount:0,buckets:{}}}catch{return{count:0,windowStart:0,windowCount:0,buckets:{}}}}(localStorage.getItem(r)),s=Date.now();if(!e.owner){const n=this.stampNewSlot(t,e.address,i,s);return localStorage.setItem(r,JSON.stringify(n.usage)),{marshaled:n.marshaled}}const a=En(this.parentOrigin,n),o={partition:t.currentPartition??0,partitionCount:t.partitionCount},c=Ya(localStorage.getItem(a),o),d=ye(e.address),u=c.slots[d];let l,h,p,f;if(u&&t.isOwnDataSlot(e.address,u.slot)){const n=ja(i,s);if(n)throw n;l=u.slot;const r=`${a}:${d}`,o=Math.max(u.timestampMs,this.lastRestampMs.get(r)??0);h=function(t,e){return Math.max(e,t+1)}(o,s),p=qa(t.restampDataChunk(e.address,l,h)),this.lastRestampMs.set(r,h),f=za(i,s)}else{const n=this.stampNewSlot(t,e.address,i,s);l=n.slot,h=s,p=n.marshaled,f=n.usage}localStorage.setItem(r,JSON.stringify(f));return{marshaled:p,recordSlot:()=>{const t=Ya(localStorage.getItem(a),o);localStorage.setItem(a,JSON.stringify(function(t,e,n,r){return!(e in t.slots)&&Object.keys(t.slots).length>=256?t:{...t,slots:{...t.slots,[e]:{slot:n,timestampMs:r}}}}(t,d,l,h)))}}}stampNewSlot(t,e,n,r){const i=Es(e),s=Wa(n,{bucket:i,laneCapacity:t.laneCapacity(),now:r});if(s)throw s;const a=t.stampDataChunk(e,r);return{marshaled:qa(a),slot:(o=a.index,new DataView(o.buffer,o.byteOffset,o.byteLength).getUint32(4,!1)),usage:Ga(n,i,r)};var o}accountInternalOwners(){const t=this.findConnectionForParent();if(!t)throw new ge("not-authenticated","No connected account for this app. Please login first.");return function(t){const{derivationKey:e}=t,n=Oe(e,Me),i=[e,n,Oe(n,Ue),Oe(e,Re),Oe(e,Fe)];t.postageSignerKey&&i.push(t.postageSignerKey);const s=new Set(i.map(t=>Ra(new I(t))));return s.add(new r(t.accountAddress).toHex().toLowerCase()),s}({accountAddress:t.account.id.toHex(),derivationKey:t.account.derivationKey,postageSignerKey:this.signerKey})}parseFeedTimestamp(t){if("number"==typeof t)return BigInt(Math.floor(t));if(!/^-?\d+$/.test(t))throw new Error(`Invalid timestamp format: "${t}" (expected decimal integer)`);return BigInt(t)}parseFeedIndex(t){if("number"==typeof t)return BigInt(Math.floor(t));if(!/^-?\d+$/.test(t))throw new Error(`Invalid index format: "${t}" (expected decimal integer)`);return BigInt(t)}makeSequentialFeedIdentifier(t,e){const n=s.Binary.numberToUint64(e,"BE");return s.Binary.keccak256(s.Binary.concatBytes(t,n))}async findLatestSequentialIndex(t,e,n,r){const i={...n,timeout:r??2e3},s=(a={bee:this.bee,topic:new ht(t),owner:e},new tc(a.bee,a.topic,a.owner));var a;return(await s.findAt(0n,0n,i)).current}sequentialNextIndex(t){return t===(1n<<64n)-1n?0n:t+1n}async handleFeedGetOwner(t,e){const{requestId:n}=t;try{if(!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");const t=new I(this.appSecret).publicKey().address().toHex();this.postMessage(e,{type:"feedGetOwnerResponse",requestId:n,owner:t})}catch(t){this.sendErrorToParent(e,n,t,"Feed get owner failed")}}async handleEpochFeedDownloadReference(t,e){const{requestId:n,topic:i,owner:s,at:a,after:o,encryptionKey:c}=t;try{let t=s;if(!t){if(!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");t=new I(this.appSecret).publicKey().address().toHex()}const d=new ht(we(i)),u=new r(t),l=this.parseFeedTimestamp(a),h=void 0!==o?this.parseFeedTimestamp(o):0n,p=c?we(c):void 0;let f;if(p){const t=Qo({bee:this.bee,topic:d,owner:u,encryptionKey:p});f=await t.findAt(l,h)}else{const t=Qo({bee:this.bee,topic:d,owner:u});f=await t.findAt(l,h)}this.postMessage(e,{type:"epochFeedDownloadReferenceResponse",requestId:n,reference:f?ye(f):void 0})}catch(t){this.sendErrorToParent(e,n,t,"Epoch feed download reference failed")}}async handleEpochFeedUploadReference(t,e){const{requestId:n,topic:r,signer:i,at:s,reference:a,encryptionKey:o,hints:c}=t;try{await this.ensureCanWrite();const t=i??this.appSecret,u=new I(t),l=new ht(we(r)),h=u.publicKey().address(),p=this.parseFeedTimestamp(s),f=o?we(o):void 0,y=c?.lastEpoch?{lastEpoch:{start:BigInt(c.lastEpoch.start),level:c.lastEpoch.level},lastTimestamp:c.lastTimestamp?BigInt(c.lastTimestamp):void 0}:void 0,w=we(a);if(32!==w.length&&64!==w.length)throw new Error(`Reference must be 32 or 64 bytes, got ${w.length}`);const g=(d={bee:this.bee,topic:l,owner:h,signer:u},new _o(d.topic,d.signer)),m=await this.withModeAwareWriteLock(void 0,async t=>await g.update(p,w,t,f,y)),b=Qo({bee:this.bee,topic:l,owner:h,encryptionKey:f});await b.findAt(p,p),this.postMessage(e,{type:"epochFeedUploadReferenceResponse",requestId:n,socAddress:ye(m.socAddress),encryptionKey:o||void 0,epoch:{start:m.epoch.start.toString(),level:m.epoch.level},timestamp:m.timestamp.toString()})}catch(t){this.sendErrorToParent(e,n,t,"Epoch feed upload reference failed")}var d}async handleSequentialFeedGetOwner(t,e){const{requestId:n}=t;try{if(!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");const t=new I(this.appSecret).publicKey().address().toHex();this.postMessage(e,{type:"seqFeedGetOwnerResponse",requestId:n,owner:t})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed get owner failed")}}async resolveSequentialOwner(t){if(t)return t;if(!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");return new I(this.appSecret).publicKey().address().toHex()}parseSequentialPayload(t,e){if(!e)return{payload:t};if(t.length<8)return{payload:t,timestamp:void 0};const n=new DataView(t.buffer,t.byteOffset,t.byteLength),r=Number(n.getBigUint64(0,!1));return{payload:t.slice(8),timestamp:r}}async resolveSequentialIndex(t,e,n,r,i=!0,s,a,o=!1,c){if(!o&&!a)throw new ge("invalid-request","Encryption key is required for encrypted feed lookup");if(void 0!==n)return this.parseFeedIndex(n);const d=await this.findLatestSequentialIndex(t,e,s,c);if(void 0===d)throw new Error("Sequential feed has no updates");if(void 0===r)return d;if(!i)throw new Error("Cannot use 'at' without timestamps");const u=this.parseFeedTimestamp(r);for(let n=d;n>=0n;n--){const r=this.makeSequentialFeedIdentifier(t,n),i=new x(r),c=o?a?await ze(this.bee,e,i,a,s):await Cn(this.bee,e,i,s):await ze(this.bee,e,i,a??"",s),d=this.parseSequentialPayload(c.payload,!0);if(void 0!==d.timestamp&&BigInt(d.timestamp)<=u)return n;if(0n===n)break}return d}async handleSequentialFeedDownloadPayload(t,e){const{requestId:n,topic:i,owner:s,index:a,at:o,hasTimestamp:c,encryptionKey:d,lookupTimeoutMs:u,requestOptions:l}=t;try{if(!d)throw new ge("invalid-request","Encryption key is required for downloadPayload");const t=await this.resolveSequentialOwner(s),h=new r(t),p=we(i),f=!1!==c,y=await this.resolveSequentialIndex(p,h,a,o,f,l,d,!1,u),w=this.makeSequentialFeedIdentifier(p,y),g=new x(w),m=await ze(this.bee,h,g,d,l),b=this.parseSequentialPayload(m.payload,f),v=this.sequentialNextIndex(y);this.postMessage(e,{type:"seqFeedDownloadPayloadResponse",requestId:n,payload:b.payload,timestamp:b.timestamp,feedIndex:y.toString(),feedIndexNext:v.toString()})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed download payload failed")}}async handleSequentialFeedDownloadRawPayload(t,e){const{requestId:n,topic:i,owner:s,index:a,at:o,hasTimestamp:c,encryptionKey:d,lookupTimeoutMs:u,requestOptions:l}=t;try{const t=await this.resolveSequentialOwner(s),h=new r(t),p=we(i),f=!1!==c,y=await this.resolveSequentialIndex(p,h,a,o,f,l,d,!0,u),w=this.makeSequentialFeedIdentifier(p,y),g=new x(w),m=d?await ze(this.bee,h,g,d,l):await Cn(this.bee,h,g,l),b=this.parseSequentialPayload(m.payload,f),v=this.sequentialNextIndex(y);this.postMessage(e,{type:"seqFeedDownloadRawPayloadResponse",requestId:n,payload:b.payload,timestamp:b.timestamp,feedIndex:y.toString(),feedIndexNext:v.toString()})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed download raw payload failed")}}async handleSequentialFeedDownloadReference(t,e){const{requestId:n,topic:i,owner:s,index:a,at:o,hasTimestamp:c,encryptionKey:d,lookupTimeoutMs:u,requestOptions:l}=t;try{if(!d)throw new ge("invalid-request","Encryption key is required for downloadReference");const t=await this.resolveSequentialOwner(s),h=new r(t),p=we(i),f=!1!==c,y=await this.resolveSequentialIndex(p,h,a,o,f,l,d,!1,u),w=this.makeSequentialFeedIdentifier(p,y),g=new x(w),m=await ze(this.bee,h,g,d,l),b=this.parseSequentialPayload(m.payload,f);if(32!==b.payload.length&&64!==b.payload.length)throw new Error("Sequential feed update does not contain a reference; use downloadPayload");const v=ye(b.payload),S=this.sequentialNextIndex(y);this.postMessage(e,{type:"seqFeedDownloadReferenceResponse",requestId:n,reference:v,feedIndex:y.toString(),feedIndexNext:S.toString()})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed download reference failed")}}buildSequentialPayload(t,e,n){if(!e)return t;const r=new Uint8Array(8);return new DataView(r.buffer).setBigUint64(0,n,!1),s.Binary.concatBytes(r,t)}async handleSequentialFeedUploadPayload(t,e){const{requestId:n,topic:r,signer:i,data:s,index:a,at:o,hasTimestamp:c,lookupTimeoutMs:d,options:u,requestOptions:l}=t;try{await this.ensureCanWrite();const t=i??this.appSecret,h=new I(t),p=h.publicKey().address(),f=we(r),y=!1!==c,w=void 0!==o?this.parseFeedTimestamp(o):BigInt(Math.floor(Date.now()/1e3));let g;if(void 0!==a)g=this.parseFeedIndex(a);else{const t=await this.findLatestSequentialIndex(f,p,l,d);g=void 0===t?0n:this.sequentialNextIndex(t)}const m=this.buildSequentialPayload(s,y,w);if(m.length<1||m.length>4096)throw new Error(`Invalid payload length: ${m.length} (expected 1-4096)`);const b=this.makeSequentialFeedIdentifier(f,g),v=new x(b),S=await this.withModeAwareWriteLock(void 0,async t=>await hs(t,h,v,m,{encryptionKey:!1!==u?.encrypt||void 0,pin:u?.pin,deferred:u?.deferred,tag:u?.tag}));this.postMessage(e,{type:"seqFeedUploadPayloadResponse",requestId:n,reference:ye(S.socAddress),feedIndex:g.toString(),owner:p.toHex(),encryptionKey:S.encryptionKey?ye(S.encryptionKey):void 0,tagUid:S.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed upload payload failed")}}async handleSequentialFeedUploadRawPayload(t,e){const{requestId:n,topic:r,signer:i,data:s,index:a,at:o,hasTimestamp:c,encryptionKey:d,lookupTimeoutMs:u,options:l,requestOptions:h}=t;try{await this.ensureCanWrite();const t=i??this.appSecret,p=new I(t),f=p.publicKey().address(),y=we(r),w=!1!==c,g=void 0!==o?this.parseFeedTimestamp(o):BigInt(Math.floor(Date.now()/1e3));let m;if(void 0!==a)m=this.parseFeedIndex(a);else{const t=await this.findLatestSequentialIndex(y,f,h,u);m=void 0===t?0n:this.sequentialNextIndex(t)}const b=this.buildSequentialPayload(s,w,g);if(b.length<1||b.length>4096)throw new Error(`Invalid payload length: ${b.length} (expected 1-4096)`);const v=this.makeSequentialFeedIdentifier(y,m),S=new x(v),k=await this.withModeAwareWriteLock(void 0,async t=>await hs(t,p,S,b,{encryptionKey:d?we(d):void 0,pin:l?.pin,deferred:l?.deferred,tag:l?.tag}));this.postMessage(e,{type:"seqFeedUploadRawPayloadResponse",requestId:n,reference:ye(k.socAddress),feedIndex:m.toString(),owner:f.toHex(),encryptionKey:d||void 0,tagUid:k.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed upload raw payload failed")}}async handleSequentialFeedUploadReference(t,e){const{requestId:n,topic:r,signer:i,reference:s,index:a,at:o,hasTimestamp:c,lookupTimeoutMs:d,options:u,requestOptions:l}=t;try{await this.ensureCanWrite();const t=i??this.appSecret,h=new I(t),p=h.publicKey().address(),f=we(r),y=!1!==c,w=void 0!==o?this.parseFeedTimestamp(o):BigInt(Math.floor(Date.now()/1e3));let g;if(void 0!==a)g=this.parseFeedIndex(a);else{const t=await this.findLatestSequentialIndex(f,p,l,d);g=void 0===t?0n:this.sequentialNextIndex(t)}const m=we(s),b=this.buildSequentialPayload(m,y,w);if(b.length<1||b.length>4096)throw new Error(`Invalid payload length: ${b.length} (expected 1-4096)`);const v=this.makeSequentialFeedIdentifier(f,g),S=new x(v),k=await this.withModeAwareWriteLock(void 0,async t=>await hs(t,h,S,b,{encryptionKey:!0,pin:u?.pin,deferred:u?.deferred,tag:u?.tag}));this.postMessage(e,{type:"seqFeedUploadReferenceResponse",requestId:n,reference:ye(k.socAddress),feedIndex:g.toString(),owner:p.toHex(),encryptionKey:k.encryptionKey?ye(k.encryptionKey):void 0,tagUid:k.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed upload reference failed")}}sharingSecret(){const t=this.findConnectionForParent()?.account.derivationKey;return t?kn(t).secret:void 0}actKeys(){const t=we(this.appSecret),e=this.sharingSecret();return e?[t,e]:[t]}async handleActUploadData(t,e){const{requestId:n,data:r,grantees:i,options:s,requestOptions:a,enableProgress:o}=t;try{await this.ensureCanWrite();const t=i.map(t=>$d(t)),c=this.createProgressCallback(e,n,o),d="identity"===s?.publisher?this.sharingSecret():we(this.appSecret);if(!d)throw new Error("No sharing key: this session carries no account");const u=!0===s?.beeCompatible,{actResult:l,contentUpload:h}=await this.withModeAwareWriteLock({useWorkers:!0},async e=>{const n=await ls(e,r,{encryptionKey:!1!==s?.encrypt||void 0,pin:s?.pin,deferred:s?.deferred,tag:s?.tag,onProgress:c,requestOptions:a}),i=new z,o=we(n.reference);i.addFork(Dd,o,{"Content-Type":"application/octet-stream",Filename:Dd}),i.addFork("/",V,{"website-index-document":Dd});const l=await He(i,async t=>(await ps(e,t,{pin:s?.pin,deferred:s?.deferred,tag:s?.tag}),{}),{encrypt:!u}),h=we(l.rootReference);return{actResult:await Pd(e,h,d,t,s,a),contentUpload:n}});this.postMessage(e,{type:"actUploadDataResponse",requestId:n,encryptedReference:l.encryptedReference,historyReference:l.historyReference,granteeListReference:l.granteeListReference,publisherPubKey:l.publisherPubKey,actReference:l.actReference,tagUid:h.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"ACT upload failed")}}async handleActDownloadData(t,e){const{requestId:n,encryptedReference:r,historyReference:i,publisherPubKey:s,timestamp:a,requestOptions:o}=t;try{if(!this.authenticated||!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");const t=await Ed(this.bee,r,i,s,this.actKeys(),a,o),c=await je(this.bee,t,o),{indexDocument:d}=new sr(c).getDocsMetadata();if(!d)throw new Error("Manifest does not contain an index document reference");const u=c.find(d);if(!u)throw new Error(`Content node "${d}" not found in manifest`);if(!u.targetAddress)throw new Error(`Content node "${d}" does not have a target address`);const l=ye(u.targetAddress),h=await Qe(this.bee,l,void 0,void 0,o);this.postMessage(e,{type:"actDownloadDataResponse",requestId:n,data:h})}catch(t){this.sendErrorToParent(e,n,t,"ACT download failed")}}async handleActAddGrantees(t,e){const{requestId:n,historyReference:r,grantees:i,requestOptions:s}=t;try{await this.ensureCanWrite();const t=this.actKeys(),a=i.map(t=>$d(t)),o=await this.withModeAwareWriteLock({useWorkers:!0},async e=>await async function(t,e,n,r,i,s,a,o){const c=64===n.length,d=kd(await Qe(e,n,void 0,void 0,a),we(n));await xd(d,async t=>Qe(e,t,void 0,void 0,a));const u=vd(d);if(!u)throw new Error("History manifest is empty");const l=ad(await Qe(e,u.metadata.actReference,void 0,void 0,a)),{privateKey:h,derived:p,entry:f}=Cd(l,r),y=nd(f.encryptedAccessKey,p.accessKeyDecryptionKey),w=[...l];for(const t of i){const e=td(h,t.x,t.y);w.push({lookupKey:e.lookupKey,encryptedAccessKey:ed(y,e.accessKeyDecryptionKey)})}let g=[];u.metadata.encryptedGranteeListRef&&(g=hd(await Qe(e,u.metadata.encryptedGranteeListRef,void 0,void 0,a),h));const m=[...g,...i],b=sd(w),v=await ls(t,b,{encryptionKey:!c||void 0,pin:s?.pin,deferred:s?.deferred,tag:s?.tag,requestOptions:a}),S=ld(m,h),k=await ls(t,S,{encryptionKey:!0,pin:s?.pin,deferred:s?.deferred,requestOptions:a});bd(d,Id(),v.reference,k.reference);const x=await Sd(d,async(e,n)=>ls(t,e,{encryptionKey:!c||void 0,pin:s?.pin,deferred:s?.deferred,tag:s?.tag,onProgress:n?o:void 0,requestOptions:a})),I=x.rootReference,A=x.tagUid;return{historyReference:I,granteeListReference:k.reference,actReference:v.reference,tagUid:A}}(e,this.bee,r,t,a,void 0,s));this.postMessage(e,{type:"actAddGranteesResponse",requestId:n,historyReference:o.historyReference,granteeListReference:o.granteeListReference,actReference:o.actReference})}catch(t){this.sendErrorToParent(e,n,t,"ACT add grantees failed")}}async handleActRevokeGrantees(t,e){const{requestId:n,historyReference:r,encryptedReference:i,revokeGrantees:s,requestOptions:a}=t;try{await this.ensureCanWrite();const t=this.actKeys(),o=s.map(t=>$d(t)),c=await this.withModeAwareWriteLock({useWorkers:!0},async e=>await async function(t,e,n,r,i,s,a,o,c){const d=64===n.length,u=kd(await Qe(e,n,void 0,void 0,o),we(n));await xd(u,async t=>Qe(e,t,void 0,void 0,o));const l=vd(u);if(!l)throw new Error("History manifest is empty");const h=ad(await Qe(e,l.metadata.actReference,void 0,void 0,o)),{privateKey:p,derived:f,entry:y}=Cd(h,i),w=nd(y.encryptedAccessKey,f.accessKeyDecryptionKey);let g=[];l.metadata.encryptedGranteeListRef&&(g=hd(await Qe(e,l.metadata.encryptedGranteeListRef,void 0,void 0,o),p));const m=g.filter(t=>!s.some(e=>function(t,e){if(t.x.length!==e.x.length||t.y.length!==e.y.length)return!1;for(let n=0;n<t.x.length;n++)if(t.x[n]!==e.x[n])return!1;for(let n=0;n<t.y.length;n++)if(t.y[n]!==e.y[n])return!1;return!0}(t,e))),b=[];b.push({lookupKey:f.lookupKey,encryptedAccessKey:ed(w,f.accessKeyDecryptionKey)});for(const t of m){const e=td(p,t.x,t.y);b.push({lookupKey:e.lookupKey,encryptedAccessKey:ed(w,e.accessKeyDecryptionKey)})}const v=sd(b),S=await ls(t,v,{encryptionKey:!d||void 0,pin:a?.pin,deferred:a?.deferred,tag:a?.tag,requestOptions:o}),k=ld(m,p),x=await ls(t,k,{encryptionKey:!0,pin:a?.pin,deferred:a?.deferred,requestOptions:o});bd(u,Id(),S.reference,x.reference);const I=await Sd(u,async(e,n)=>ls(t,e,{encryptionKey:!d||void 0,pin:a?.pin,deferred:a?.deferred,tag:a?.tag,onProgress:n?c:void 0,requestOptions:o})),A=I.rootReference,C=I.tagUid;return{encryptedReference:r,historyReference:A,granteeListReference:x.reference,actReference:S.reference,tagUid:C}}(e,this.bee,r,i,t,o,void 0,a));this.postMessage(e,{type:"actRevokeGranteesResponse",requestId:n,encryptedReference:c.encryptedReference,historyReference:c.historyReference,granteeListReference:c.granteeListReference,actReference:c.actReference})}catch(t){this.sendErrorToParent(e,n,t,"ACT revoke grantees failed")}}async handleActGetGrantees(t,e){const{requestId:n,historyReference:r,requestOptions:i}=t;try{if(!this.authenticated||!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");const t=this.actKeys(),s=await async function(t,e,n,r){const i=kd(await Qe(t,e,void 0,void 0,r),we(e));await xd(i,async e=>Qe(t,e,void 0,void 0,r));const s=vd(i);if(!s||!s.metadata.encryptedGranteeListRef)return[];const a=await Qe(t,s.metadata.actReference,void 0,void 0,r),{privateKey:o}=Cd(ad(a),n);return hd(await Qe(t,s.metadata.encryptedGranteeListRef,void 0,void 0,r),o).map(t=>{const e=id(t.x,t.y);return ye(e)})}(this.bee,r,t,i);this.postMessage(e,{type:"actGetGranteesResponse",requestId:n,grantees:s})}catch(t){this.sendErrorToParent(e,n,t,"ACT get grantees failed")}}async handleGetPostageBatch(t,e){const n=this.lookupPostageStampForApp();if(!n)return void this.postMessage(e,{type:"getPostageBatchResponse",requestId:t.requestId,postageBatch:void 0});const r=await $n(this.beeApiUrl,n.batchID.toHex());let i=await async function(t,e,n,r){const i=jc(t,r);return await Jc(t,n,i)??await an(e,n)}(this.gnosisRpcUrl,this.beeApiUrl,n.batchID.toHex(),this.postageStampContractAddress);if(void 0===i)try{const t=await Dn();i=Bn(n.amount,t)}catch(t){console.warn("[Proxy] Failed to calculate TTL:",t)}const s={batchID:n.batchID.toHex(),utilization:n.utilization,usable:r?.usable??n.usable,label:"",depth:n.depth,amount:n.amount.toString(),bucketDepth:n.bucketDepth,blockNumber:n.blockNumber,immutableFlag:n.immutableFlag,exists:r?.exists??n.exists,batchTTL:i};this.postMessage(e,{type:"getPostageBatchResponse",requestId:t.requestId,postageBatch:s})}async handleCreateFeedManifest(t,e){const{topic:n,owner:r,feedType:i,uploadOptions:s}=t;let a=r;if(!a&&this.appSecret){const t=new I(this.appSecret);a=t.publicKey().address().toHex()}if(a)try{await this.ensureCanWrite();const r=await this.withModeAwareWriteLock(void 0,async t=>await async function(t,e,n,r,i){const s=n.startsWith("0x")?n.slice(2):n,a="stamper"===t.mode?i?.tag??await _i(t.bee):void 0,o={pin:i?.pin,deferred:i?.deferred,tag:a},c=new z;c.addFork("/",V,{"swarm-feed-owner":s,"swarm-feed-topic":e,"swarm-feed-type":r?.feedType??"Sequence"});const d=c.forks.get(47);if(!d)throw new Error("[FeedManifest] Failed to create '/' fork");const u=d.node,l=await u.marshal(),h=ve(l);await ps(t,h.data,o),u.selfAddress=h.address.toUint8Array();const p=await c.marshal();if(!1!==r?.encrypt){const e=be(p);await ps(t,e.data,o);const n=new Uint8Array(64);return n.set(e.address.toUint8Array(),0),n.set(e.encryptionKey,32),{reference:ye(n),tagUid:a}}{const e=ve(p);return await ps(t,e.data,o),{reference:e.address.toHex(),tagUid:a}}}(t,n,a,{encrypt:!1!==s?.encrypt,feedType:i},s));this.postMessage(e,{type:"createFeedManifestResponse",requestId:t.requestId,reference:r.reference})}catch(n){this.sendErrorToParent(e,t.requestId,n,"Create feed manifest failed")}else this.sendErrorToParent(e,t.requestId,new ge("invalid-request","No owner provided and no app signer available"),"No owner provided and no app signer available")}}function qd(t){return new Fd(t)}async function Ld(t){const e=async()=>{if((void 0===t.graceMs||!Kd(t.cooldownKey,t.graceMs))&&(t.force||!Kd(t.cooldownKey,t.cooldownMs)))try{await t.task()}finally{!function(t){if("undefined"==typeof window||!window.localStorage)return;window.localStorage.setItem(t,String(Date.now()))}(t.cooldownKey)}};"undefined"!=typeof navigator&&navigator.locks?await navigator.locks.request(t.lockName,{mode:"exclusive"},e):await e()}function Kd(t,e){if("undefined"==typeof window||!window.localStorage)return!1;const n=window.localStorage.getItem(t);if(!n)return!1;const r=Number(n);return Number.isFinite(r)&&Date.now()-r<e}const Nd="solarpunkid.eth",Hd="buzz.solarpunk.sites",jd="[SiteAllowList]",Wd=/[\s,]+/,zd=/^[a-z0-9-]+$/,Gd=32,Vd=Yd("resolver(bytes32)"),Jd=Yd("text(bytes32,string)"),Zd=ae({ensName:ue(),recordKey:ue(),origins:de(ue()),fetchedAt:le()});function Yd(t){return ye(Tn((new TextEncoder).encode(t)).slice(0,4))}function _d(t){return t.toString(16).padStart(64,"0")}function Qd(t,e){if("string"==typeof t&&t.length>262146)throw new Error(`${e} answered ${t.length} characters, longer than 131072 bytes of hex data.`);if("string"!=typeof t||!/^0x([0-9a-fA-F]{2})*$/.test(t))throw new Error(`${e} answered something that is not hex data.`);return we(t.slice(2))}function Xd(t,e){if(e+Gd>t.length)throw new Error("The answer ends inside a word.");return BigInt(`0x${ye(t.slice(e,e+Gd))}`)}async function tu(t,e,n){return Rn(t,"eth_call",[{to:e,data:n},"latest"],{timeoutMs:sn})}async function eu(t,e,n){const r=function(t){let e=new Uint8Array(Gd);const n=""===t?[]:t.split(".");for(const t of n.reverse()){const n=new Uint8Array(64);n.set(e),n.set(Tn((new TextEncoder).encode(t)),Gd),e=Tn(n)}return`0x${ye(e)}`}(e),i=function(t){const e=Qd(t,"The registry");if(e.length!==Gd)throw new Error("The registry answered a resolver that is not one word.");if(e.slice(0,12).some(t=>0!==t))throw new Error("The registry answered a resolver that is not an address.");const n=e.slice(12);return n.every(t=>0===t)?void 0:`0x${ye(n)}`}(await tu(t,"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",`0x${Vd}${r.slice(2)}`));if(!i)throw new Error(`${e} has no resolver.`);return function(t){const e=Qd(t,"The resolver"),n=Xd(e,0);if(n>BigInt(e.length))throw new Error("The resolver answered a string offset past its end.");const r=Number(n),i=Xd(e,r),s=BigInt(r+Gd)+i;if(s>BigInt(e.length))throw new Error("The resolver answered a string longer than its answer.");return new TextDecoder("utf-8",{fatal:!0}).decode(e.slice(r+Gd,Number(s)))}(await tu(t,i,function(t,e){const n=(new TextEncoder).encode(e),r=ye(n),i=Math.ceil(n.length/Gd)*Gd*2,s=_d(64);return`0x${Jd}${t.slice(2)}${s}${_d(n.length)}${r.padEnd(i,"0")}`}(r,n)))}function nu(t,e){return{allowed:!1,reason:t,message:{"not-clean":`${e} is not a plain https site address, and Swarm ID serves only the sites on its allow list.`,"not-listed":`${e} is not on Swarm ID's allow list of sites.`,"list-unavailable":`Swarm ID could not read its allow list of sites, so it refused ${e}. It serves no site until the list can be read.`}[t]}}function ru(t){const e=t.now??Date.now,n=function(t){const e=new Set;for(const n of t)On(n,{allowLocalHttp:!0})?e.add(n):console.warn(`${jd} Ignored a dev origin that is not a clean origin:`,n);return e}(t.devOrigins??[]);let r,i;const s=n=>{if(!n||n.ensName!==t.ensName||n.recordKey!==t.recordKey)return!1;const r=e()-n.fetchedAt;return r>=0&&r<6e5},a=async()=>{if(t.rpcUrl)if(function(t){const e=t.split(".");return e.length>=2&&e.every(t=>zd.test(t))}(t.ensName))try{const n=function(t){const e=[];for(const n of t.split(Wd))""!==n&&(On(n)?e.push(n):console.warn(`${jd} Ignored an entry that is not a clean https origin:`,n));return e}(await eu(t.rpcUrl,t.ensName,t.recordKey));return 0===n.length?void console.warn(`${jd} The record names no site, so no site is allowed.`):((e=>{r=e;try{t.storage?.setItem(Mn,JSON.stringify(e))}catch(t){console.warn(`${jd} Could not keep the list in storage:`,t)}})({ensName:t.ensName,recordKey:t.recordKey,origins:n,fetchedAt:e()}),n)}catch(t){return void console.warn(`${jd} Could not read the list, so no site is allowed:`,t)}else console.warn(`${jd} The ENS name is not a plain lower-case name:`,t.ensName);else console.warn(`${jd} No Ethereum endpoint is set, so no site is allowed.`)},o=async()=>{if(s(r))return r.origins;const e=(()=>{try{const e=t.storage?.getItem(Mn);if(!e)return;const n=Zd.safeParse(JSON.parse(e));return n.success?n.data:void 0}catch{return}})();return s(e)?(r=e,e.origins):(i??(i=a().finally(()=>{i=void 0})),i)};return{async check(t){if(n.has(t))return{allowed:!0};if(!On(t))return nu("not-clean",t);const e=await o();return e?e.includes(t)?{allowed:!0}:nu("not-listed",t):nu("list-unavailable",t)}}}export{bi as AccountBus,gn as AuthDataSchema,Is as BUCKET_DEPTH,Zc as DAY,un as DEFAULT_GNOSIS_RPC_URL,Nd as DEFAULT_SITE_ALLOW_LIST_ENS_NAME,Hd as DEFAULT_SITE_ALLOW_LIST_RECORD_KEY,Sa as DebouncedUtilizationUploader,nn as GNOSIS_BLOCK_TIME,Be as LocalAccountSchemaV1,Ws as MIN_USABLE_BATCH_DEPTH,Ee as NetworkSettingsSchemaV1,As as PARTITION_COUNT,Ba as PASSWORD_KDF_ITERATIONS,pa as PRESENCE_INTERVAL_MS,Wo as PartitionLease,tn as PostageStampSchemaV1,fa as PresenceTracker,ln as STORAGE_CHALLENGE_KEY,$e as STORAGE_KEY_ACCOUNTS,Pe as STORAGE_KEY_NETWORK_SETTINGS,va as SignalingTransport,Qi as SocUploadError,Gs as UtilizationAwareStamper,Ma as UtilizationStoreDB,da as accountDeltaSnapshot,_c as appSessionDuration,Vc as calculateContractTTLSeconds,aa as createAccountsStorageManager,oa as createNetworkSettingsStorageManager,ru as createSiteAllowList,Oc as createSyncAccount,Ua as decryptSeed,ha as deriveBusContext,Un as deriveChatKey,Da as deriveKeyFromPassword,Ea as deriveKeyFromPrf,Pa as deriveKeyFromSecret,$a as deriveKeyFromSignature,xn as derivePostageSignerKeySync,Ae as deriveSecret,Oe as deriveSecretSync,kn as deriveSharingKey,en as deriveSwarmEncryptionKey,$c as detectDeviceName,ze as downloadEncryptedSOC,Ca as encryptSeed,Gc as fetchOnChainBatchStateResult,Fc as foldAccountFromSwarm,Mc as foldedToSyncedAccount,Pc as getOrCreateDeviceId,qd as initProxy,De as isSignedOutAccount,mn as leaseCacheStorageKey,Kc as markFirstPartyStorage,io as mergeConnectedApps,Ec as mergeDevices,ro as mergeDevicesList,so as mergePostageStamps,fn as onlySiteChatBinding,Aa as randomSalt,no as remainingLifespanSeconds,la as restoreLocalSessionFields,Ld as runCoalescedAcrossTabs,Qs as serializePostageStamp,Js as serializeSyncedAccount,pn as siteChatAddress,Ve as sleep,to as stampsReachableByApp,hs as uploadSOC};
1
+ import{t,x as e,y as n,E as r,z as i,F as s,G as a,H as o,J as c,K as d,L as u,O as l,Q as h,U as p,V as f,W as y,X as w,Y as g,R as m,Z as b,_ as v,$ as S,a0 as k,a as x,c as I,a1 as A,a2 as C,a3 as U,a4 as P,a5 as E,a6 as $,a7 as D,a8 as B,a9 as T,aa as O,ab as M,ac as R,ad as F,ae as q,af as L,ag as K,ah as N,ai as H,aj as W,ak as j,M as z,al as G,N as V,am as J,an as Z,ao as Y,ap as _,aq as Q,ar as X,as as tt,at as et,au as nt,av as rt,aw as it,ax as st,ay as at,az as ot,aA as ct,aB as dt,aC as ut,T as lt,aD as ht,aE as pt,aF as ft,aG as yt,aH as wt,aI as gt,aJ as mt,aK as bt,aL as vt,aM as St,aN as kt,aO as xt,aP as It,aQ as At,aR as Ct,aS as Ut,aT as Pt,aU as Et,aV as $t,aW as Dt,aX as Bt,aY as Tt,aZ as Ot,a_ as Mt,a$ as Rt,b0 as Ft,b1 as qt,b2 as Lt,b3 as Kt,b4 as Nt,b5 as Ht,b6 as Wt,b7 as jt,b8 as zt,b9 as Gt,ba as Vt,bb as Jt,bc as Zt,bd as Yt,be as _t,bf as Qt,bg as Xt,bh as te,bi as ee,bj as ne,bk as re,bl as ie,bm as se,bn as ae,bo as oe,bp as ce,bq as de,br as ue,bs as le,bt as he,bu as pe,u as fe,j as ye,S as we,bv as ge,bw as me,bx as be,by as ve,bz as Se,bA as ke,bB as xe,bC as Ie,bD as Ae,bE as Ce,bF as Ue,bG as Pe,bH as Ee,bI as $e,bJ as De,bK as Be,bL as Te,bM as Oe,bN as Me,bO as Re,bP as Fe,bQ as qe,bR as Le,bS as Ke,bT as Ne,bU as He,bV as We,bW as je,bX as ze,bY as Ge,bZ as Ve,w as Je,b_ as Ze,e as Ye,b$ as _e,c0 as Qe,c1 as Xe,c2 as tn,c3 as en,c4 as nn,n as rn,c5 as sn,c6 as an,c7 as on,c8 as cn,D as dn,c9 as un,ca as ln,o as hn,cb as pn,cc as fn,cd as yn,ce as wn,cf as gn,cg as mn,ch as bn,ci as vn,cj as Sn,P as kn,ck as xn,cl as In,g as An,cm as Cn,cn as Un,co as Pn,cp as En,cq as $n,cr as Dn,cs as Bn,B as Tn,ct as On,cu as Mn,b as Rn,cv as Fn,q as qn,cw as Ln,m as Kn}from"./chunks/chat-binding-BirKsDU3.js";export{cx as BatchIdSchema,cy as PrivateKeySchema,cz as SyncedAccountSchemaV1,cF as calculateStampAmountForDays,cC as createChatBinding,cA as deriveAccountDerivationKey,cB as derivePostageSignerKey,cD as hexAddress,cG as isHttpUrl,cE as withIdleTimeout}from"./chunks/chat-binding-BirKsDU3.js";class Nn{constructor(t){if(this.bytes=Math.ceil(t),t<0)throw Error("Size must be at least 0")}static fromBytes(t){return new Nn(t)}static fromKilobytes(t){return new Nn(1e3*t)}static fromMegabytes(t){return new Nn(1e3*t*1e3)}static fromGigabytes(t){return new Nn(1e3*t*1e3*1e3)}static parseFromString(t){return Nn.fromBytes(s.Numbers.makeStorage(t,1e3))}toBytes(){return this.bytes}toGigabytes(){return this.bytes/1e3/1e3/1e3}toFormattedString(){return s.Numbers.convertBytes(this.bytes,1e3)}represent(){return this.toFormattedString()}}function Hn(t,e){return d.fromPLUR(2n**BigInt(t)*BigInt(e))}function Wn(t,e,n){return BigInt(t.toSeconds())/BigInt(n)*BigInt(e)+1n}function jn(t,e,n){return c(t.toBytes(),e,n)}function zn(t,e,n){const r=u(t.batchTTL),i=o.fromSeconds(r),s=l(t.depth,e,n),c=t.utilizationRatio??h(t.utilization,t.depth,t.bucketDepth);return{batchID:new p(t.batchID),utilization:t.utilization,usable:t.usable,label:t.label,depth:t.depth,amount:a(t.amount),bucketDepth:t.bucketDepth,blockNumber:t.blockNumber,immutableFlag:t.immutableFlag,usage:c,usageText:`${Math.round(100*c)}%`,size:Nn.fromBytes(s),remainingSize:Nn.fromBytes(Math.ceil(s*(1-c))),theoreticalSize:Nn.fromBytes(f(t.depth)),duration:i,calculateSize(e,n){const r=l(t.depth,e,n);return Nn.fromBytes(r)},calculateRemainingSize(e,n){const r=l(t.depth,e,n);return Nn.fromBytes(Math.ceil(r*(1-this.usage)))}}}function Gn(t){return{name:function(t){if(!t)throw new v("missing content-disposition header");const e=t.match(/filename\*?=['"]?(?:UTF-\d['"]*)?([^;\r\n"']*)['"]?;?/i);if(e&&e.length>0)return e[1];throw new v("invalid content-disposition header")}(t["content-disposition"]),tagUid:function(t){if(!t)return;return parseInt(t,10)}(t["swarm-tag-uid"]),contentType:t["content-type"]||void 0}}function Vn(t,e){const n={};var r;if(!function(t){if(!b({}).safeParse(t).success)return!1;const e=t;return void 0!==e.issuer&&void 0!==e.index&&void 0!==e.signature&&void 0!==e.timestamp&&void 0!==e.batchId}(t)?t&&(t=new p(t),n["swarm-postage-batch-id"]=t.toHex()):n["swarm-postage-stamp"]=(r=t,y(r)).toHex(),!e)return n;const i=e;i.size&&(n["content-length"]=String(i.size)),i.contentType&&(n["content-type"]=String(i.contentType)),i.redundancyLevel&&(n["swarm-redundancy-level"]=String(i.redundancyLevel));const s=w().safeParse(i.act);s.success&&(n["swarm-act"]=String(s.data));const a=w().safeParse(i.pin);a.success&&(n["swarm-pin"]=String(a.data));const o=w().safeParse(i.encrypt);o.success&&(n["swarm-encrypt"]=String(o.data)),i.tag&&(n["swarm-tag"]=String(i.tag));const c=w().safeParse(i.deferred);c.success&&(n["swarm-deferred-upload"]=String(c.data)),i.redundancyStrategy&&(n["swarm-redundancy-strategy"]=String(i.redundancyStrategy));const d=w().safeParse(i.fallback);return d.success&&(n["swarm-redundancy-fallback-mode"]=String(d.data)),i.timeoutMs&&(n["swarm-chunk-retrieval-timeout"]=String(i.timeoutMs)),i.indexDocument&&(n["swarm-index-document"]=String(i.indexDocument)),i.errorDocument&&(n["swarm-error-document"]=String(i.errorDocument)),i.actPublisher&&(n["swarm-act-publisher"]=new g(i.actPublisher).toCompressedHex()),i.actHistoryAddress&&(n["swarm-act-history-address"]=new m(i.actHistoryAddress).toHex()),i.actTimestamp&&(n["swarm-act-timestamp"]=String(i.actTimestamp)),(i.actPublisher||i.actHistoryAddress||i.actTimestamp)&&(n["swarm-act"]="true"),i.gasPrice&&(n["gas-price"]=String(i.gasPrice)),i.gasLimit&&(n["gas-limit"]=String(i.gasLimit)),n}const Jn="chunks";async function Zn(e,n,r){n=new m(n);const i=await t(e,{responseType:"arraybuffer",url:`${Jn}/${n}`,headers:Vn(null,r)});return new Uint8Array(i.data)}function Yn(t,e){try{return U(t,e)}catch(t){throw new v(t.message)}}async function _n(e,n,r,i){const a=A.concat(n.span.toUint8Array(),n.payload.toUint8Array());return async function(e,n,r,i,a,o,c){const d=await t(e,{method:"post",url:`soc/${n}/${r}`,data:a,headers:{"content-type":"application/octet-stream",...Vn(o,c)},responseType:"json",params:{sig:i.toHex()}});return{reference:S.parse(d.data).reference,tagUid:d.headers["swarm-tag"]?k(d.headers["swarm-tag"]):void 0,historyAddress:d.headers["swarm-act-history-address"]?s.Optional.of(new m(d.headers["swarm-act-history-address"])):s.Optional.empty()}}(e,n.owner,n.identifier,n.signature,a,r,i)}async function Qn(t,e,n,r,i,s){e=new I(e),r=new x(r);return _n(t,E(i).toSingleOwnerChunk(r,e),n,s)}async function Xn(t,e,n){n=new x(n),e=new r(e);const i=P(n,e);return Yn(await Zn(t,i.toHex()),i)}const tr="balances";const er="consumed";class nr{constructor(t){this.context=t}async getAll(e){return async function(e){const n=await t(e,{url:tr,responseType:"json"});return $.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getPeer(e,n){const r=new B(e);return async function(e,n){const r=await t(e,{url:`${tr}/${n}`,responseType:"json"});return D.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getAllPastDueConsumption(e){return async function(e){const n=await t(e,{url:er,responseType:"json"});return $.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getAllPastDueConsumptionForPeer(e,n){const r=new B(e);return async function(e,n){const r=await t(e,{url:`${er}/${n}`,responseType:"json"});return D.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}}const rr="chequebook";class ir{constructor(t){this.context=t}async getAllLatest(e){return async function(e){const n=await t(e,{url:`${rr}/cheque`,responseType:"json"});return R.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getAllLatestForPeer(e,n){const r=new B(e);return async function(e,n){const r=await t(e,{url:`${rr}/cheque/${n}`,responseType:"json"});return F.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getLastCashoutAction(e,n){const r=new B(e);return async function(e,n){const r=await t(e,{url:`${rr}/cashout/${n}`,responseType:"json"});return q.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async cashoutLast(e,n,r){const i=new B(e);return n&&(n=L.parse(n)),async function(e,n,r){const i=await t(e,{method:"post",url:`${rr}/cashout/${n}`,responseType:"json",headers:Vn(null,r)});return M.parse(i.data).transactionHash}(this.context.getRequestOptionsForCall(r),i,n)}}class sr{constructor(t){this.context=t}async getAddress(e){return async function(e){const n=await t(e,{url:`${rr}/address`,responseType:"json"});return T.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getBalance(e){return async function(e){const n=await t(e,{url:`${rr}/balance`,responseType:"json"});return O.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async deposit(e,n,r){const i=e instanceof d?e.toPLURString():a(e,{min:1n,name:"amount"}),s=n?a(e,{min:0n,name:"gasPrice"}):void 0;return async function(e,n,r){const i={};r&&(i["gas-price"]=r);const s=await t(e,{method:"post",url:`${rr}/deposit`,responseType:"json",params:{amount:n},headers:i});return M.parse(s.data).transactionHash}(this.context.getRequestOptionsForCall(r),i,s)}async withdraw(e,n,r){const i=e instanceof d?e.toPLURString():a(e,{min:1n,name:"amount"}),s=n?a(e,{min:0n,name:"gasPrice"}):void 0;return async function(e,n,r){const i={};r&&(i["gas-price"]=r);const s=await t(e,{method:"post",url:`${rr}/withdraw`,responseType:"json",params:{amount:n},headers:i});return M.parse(s.data).transactionHash}(this.context.getRequestOptionsForCall(r),i,s)}}class ar{constructor(t){this.context=t}async upload(e,r,i,a){const o="identifier"in r&&"signature"in r&&"owner"in r;if(r=r instanceof Uint8Array?r:r.data,i&&(i=K.parse(i)),r.length<N.LENGTH)throw new H(`Chunk has to have size of at least ${N.LENGTH}.`,r);if(!o&&r.length>W+N.LENGTH)throw new H(`Content Addressed Chunk must not exceed ${W+N.LENGTH} bytes.`,r);if(o&&r.length>W+N.LENGTH+n.LENGTH+x.LENGTH)throw new H(`Single Owner Chunk must not exceed ${W+N.LENGTH+n.LENGTH+x.LENGTH} bytes.`,r);return async function(e,n,r,i){const a=await t(e,{method:"post",url:`${Jn}`,data:n,headers:{"content-type":"application/octet-stream",...Vn(r,i)},responseType:"json"});return{reference:S.parse(a.data).reference,tagUid:a.headers["swarm-tag"]?k(a.headers["swarm-tag"]):void 0,historyAddress:a.headers["swarm-act-history-address"]?s.Optional.of(new m(a.headers["swarm-act-history-address"])):s.Optional.empty()}}(this.context.getRequestOptionsForCall(a),r,e,i)}async download(t,e,n){const r=new m(t);return e&&(e=j.parse(e)),Zn(this.context.getRequestOptionsForCall(n),r,e)}}async function or(t,e,n,r,i){for(const s of t.forks.values()){const t=await or(s.node,e,n,r,i);if(r?.act){let e;t.historyAddress.ifPresent(t=>e=t),e&&(s.node.metadata||(s.node.metadata={}),s.node.metadata["swarm-act-history-address"]=e.toHex())}}const s=await e.data.upload(n,await t.marshal(),r,i);return t.selfAddress=s.reference.toUint8Array(),s}async function cr(t,e,n,r){for(const i of t.forks.values()){if(!i.node.selfAddress)throw Error("MantarayNode#loadRecursively fork.node.selfAddress is not set");let s=n;i.node.metadata&&i.node.metadata["swarm-act-history-address"]&&(s={...n,actHistoryAddress:i.node.metadata["swarm-act-history-address"]});const a=(await e.data.download(i.node.selfAddress,s,r)).toUint8Array(),o=z.unmarshalFromData(a,i.node.selfAddress);i.node.targetAddress=o.targetAddress,i.node.forks=o.forks,i.node.path=i.prefix,i.node.parent=t,await cr(i.node,e,n,r)}}class dr{constructor(t=new z){this.core=t}get obfuscationKey(){return this.core.obfuscationKey}get selfAddress(){return this.core.selfAddress}get targetAddress(){return this.core.targetAddress}get metadata(){return this.core.metadata}get path(){return this.core.path}get forks(){return this.core.forks}get parent(){return this.core.parent}get type(){return this.core.type}get fullPath(){return this.core.fullPath}get fullPathString(){return this.core.fullPathString}getRootMetadata(){const t=this.core.find("/");return t&&t.metadata?s.Optional.of(t.metadata):s.Optional.empty()}getDocsMetadata(){const t=this.core.find("/");return t&&t.metadata?{indexDocument:t.metadata["website-index-document"]??null,errorDocument:t.metadata["website-error-document"]??null}:{indexDocument:null,errorDocument:null}}async resolveFeed(t,e){const n=this.core.find("/");if(!n||!n.metadata)return s.Optional.empty();const r=n.metadata["swarm-feed-owner"],i=n.metadata["swarm-feed-topic"];return r&&i?s.Optional.of(await t.feed.fetchLatestUpdate(i,r,e)):s.Optional.empty()}async marshal(){return this.core.marshal()}static async unmarshal(t,e,n,r){e=new m(e);const i=(await t.data.download(e,n,r)).toUint8Array();return this.unmarshalFromData(i,e.toUint8Array())}static unmarshalFromData(t,e){return new dr(z.unmarshalFromData(t,e))}addFork(t,e,n){this.core.addFork(t,e instanceof A?e.toUint8Array():e,n)}removeFork(t){this.core.removeFork(t)}async calculateSelfAddress(){return this.core.calculateSelfAddress()}async saveRecursively(t,e,n,r){return or(this.core,t,e,n,r)}async loadRecursively(t,e,n){return cr(this.core,t,e,n)}find(t){return this.core.find(t)}findClosest(t,e){return this.core.findClosest(t,e)}collect(t=[]){return this.core.collect(t)}collectAndMap(){return this.core.collectAndMap()}determineType(){return this.core.determineType()}}function ur(t){return function t(e){return e<=1?e:e+t(Math.ceil(e/128))}(Math.ceil(t/4096))}function lr(t){if(!function(t){return!!Array.isArray(t)&&t.every(t=>"object"==typeof t&&t.path&&void 0!==t.size)}(t))throw new H("invalid collection",t)}function hr(t){if(t.webkitRelativePath&&""!==t.webkitRelativePath)return t.webkitRelativePath.replace(/.*?\//i,"");if(t.name)return t.name;throw new TypeError("file is not valid File object")}const pr={aac:"audio/aac",abw:"application/x-abiword",ai:"application/postscript",arc:"application/octet-stream",avi:"video/x-msvideo",azw:"application/vnd.amazon.ebook",bin:"application/octet-stream",bz:"application/x-bzip",bz2:"application/x-bzip2",csh:"application/x-csh",css:"text/css",csv:"text/csv",doc:"application/msword",dll:"application/octet-stream",dmg:"application/x-apple-diskimage",eot:"application/vnd.ms-fontobject",epub:"application/epub+zip",gif:"image/gif",htm:"text/html",html:"text/html",ico:"image/x-icon",ics:"text/calendar",jar:"application/java-archive",jpeg:"image/jpeg",jpg:"image/jpeg",js:"application/javascript",json:"application/json",mid:"audio/midi",midi:"audio/midi",mp2:"audio/mpeg",mp3:"audio/mpeg",mp4:"video/mp4",mpa:"video/mpeg",mpe:"video/mpeg",mpeg:"video/mpeg",mpkg:"application/vnd.apple.installer+xml",odp:"application/vnd.oasis.opendocument.presentation",ods:"application/vnd.oasis.opendocument.spreadsheet",odt:"application/vnd.oasis.opendocument.text",oga:"audio/ogg",ogv:"video/ogg",ogx:"application/ogg",otf:"font/otf",png:"image/png",pdf:"application/pdf",ppt:"application/vnd.ms-powerpoint",rar:"application/x-rar-compressed",rtf:"application/rtf",sh:"application/x-sh",svg:"image/svg+xml",swf:"application/x-shockwave-flash",tar:"application/x-tar",tif:"image/tiff",tiff:"image/tiff",ts:"application/typescript",ttf:"font/ttf",txt:"text/plain",vsd:"application/vnd.visio",wav:"audio/x-wav",weba:"audio/webm",webm:"video/webm",webp:"image/webp",woff:"font/woff",woff2:"font/woff2",xhtml:"application/xhtml+xml",xls:"application/vnd.ms-excel",xlsx:"application/vnd.ms-excel",xml:"application/xml",xul:"application/vnd.mozilla.xul+xml",zip:"application/zip","3gp":"video/3gpp","3gp2":"video/3gpp2","7z":"application/x-7z-compressed"};function fr(t){return["text/html","text/css"].includes(t)?`${t}; charset=utf-8`:t}class yr{constructor(){this.pieces=[],this.currentFileSize=0}get output(){return this.pieces.reduce((t,e)=>{const n=new Uint8Array(t.length+e.length);return n.set(t),n.set(e,t.length),n})}beginFile(t,e){const{name:n,prefix:r,longLink:i}=function(t){if(t.length<=100)return{name:t,prefix:"",longLink:!1};for(let e=t.length-1;e>=0;e--)if("/"===t[e]){const n=t.substring(e+1),r=t.substring(0,e);if(n.length<=100&&r.length<=155)return{name:n,prefix:r,longLink:!1}}const e=t.lastIndexOf("/"),n=(e>=0?t.substring(e+1):t).slice(0,100);return{name:n,prefix:"",longLink:!0}}(t);if(i){const e=(new TextEncoder).encode(t+"\0");this.pieces.push(function(t){const e=new TextEncoder;function n(t,n,i){const s=e.encode(t);r.set(s.slice(0,i),n)}const r=new Uint8Array(512);r.fill(0),n("././@LongLink",0,100),n("0000644\0",100,8),n("0000000\0",108,8),n("0000000\0",116,8),n(t.toString(8).padStart(11,"0")+"\0",124,12),n("00000000000\0",136,12),n(" ",148,8),n("L",156,1),n("ustar\0\0",257,8);let i=0;for(let t=0;t<512;t++)i+=r[t];return n(i.toString(8).padStart(6,"0")+"\0 ",148,8),r}(e.length)),this.pieces.push(e);const n=e.length%512==0?0:512-e.length%512;n>0&&this.pieces.push(new Uint8Array(n))}const s=function(t,e,n){const r=new TextEncoder;function i(t,e,n){const i=r.encode(t);s.set(i.slice(0,n),e)}const s=new Uint8Array(512);s.fill(0,0,512),i(t.slice(0,100).padEnd(100,"\0"),0,100),i("0000777\0",100,8),i("0001750\0",108,8),i("0001750\0",116,8),i(n.toString(8).padStart(11,"0")+"\0",124,12);i(Math.floor((new Date).getTime()/1e3).toString(8).padStart(11,"0")+"\0",136,12),i(" ",148,8),i("0",156,1),i("ustar\0\0",257,8),e&&i(e.slice(0,155).padEnd(155,"\0"),345,155);let a=0;for(let t=0;t<512;t++)a+=s[t];return i(a.toString(8).padStart(6,"0")+"\0 ",148,8),s}(n,r,e);this.pieces.push(s),this.currentFileSize=0}async appendFile(t){this.pieces.push(t),this.currentFileSize+=t.length}async endFile(){const t=this.currentFileSize%512==0?0:512-this.currentFileSize%512;t>0&&this.pieces.push(new Uint8Array(t))}async end(){this.pieces.push(new Uint8Array(1024))}}async function wr(e,n,r,i){const s=new yr;await async function(t,e){for(const n of t){if(!n.file)throw new Error("Invalid collection item");e.beginFile(n.path,n.file.size),await e.appendFile(new Uint8Array(await J(n.file))),await e.endFile()}}(n,s),await s.end();return await t(e,{method:"post",url:"bzz",data:s.output,responseType:"json",headers:{"content-type":"application/x-tar","swarm-collection":"true",...Vn(r,i)}})}const gr="bzz";async function mr(e,n,r,i,a){const o=await t(e,{method:"post",url:gr,data:n,headers:Vn(r,a),params:{name:i},responseType:"json"});return{reference:S.parse(o.data).reference,tagUid:o.headers["swarm-tag"]?k(o.headers["swarm-tag"]):void 0,historyAddress:o.headers["swarm-act-history-address"]?s.Optional.of(new m(o.headers["swarm-act-history-address"])):s.Optional.empty()}}async function br(t,e,n,r){lr(e);const i=await wr(t,e,n,r);return{reference:S.parse(i.data).reference,tagUid:i.headers["swarm-tag"]?k(i.headers["swarm-tag"]):void 0,historyAddress:i.headers["swarm-act-history-address"]?s.Optional.of(new m(i.headers["swarm-act-history-address"])):s.Optional.empty()}}class vr{constructor(t){this.context=t}async upload(t,e,n,r){const i=new p(t);return lr(e),n&&(n=Z.parse(n)),br(this.context.getRequestOptionsForCall(r),e,i,n)}async uploadFromFileList(t,e,n,r){const i=new p(t);n&&(n=Z.parse(n));const s=function(t){return Array.from(t).map(t=>({path:hr(t),size:t.size,file:t}))}(e);return br(this.context.getRequestOptionsForCall(r),s,i,n)}async uploadFromDirectory(t,e,n,r){const i=new p(t);n&&(n=Z.parse(n));const s=await async function(){throw new Error("Creating Collection from File System is not supported in browsers!")}();return br(this.context.getRequestOptionsForCall(r),s,i,n)}async stream(t,e,n,r,i){const a=new p(t);return async function(t,e,n,r,i,a){const o=a?.signal;if(o?.aborted)throw new Error("Request aborted");const c=new s.AsyncQueue(64,64);let d=0,u=0;for(const t of e)d+=ur(t.size);async function l(e){if(!o?.aborted)try{await t.chunk.upload(n,e.build(),i,a),r?.({total:d,processed:++u})}catch(t){if(o?.aborted)return;throw t}}async function h(t){for(const{chunk:e}of t)await c.enqueue(async()=>l(e));return[]}n=new p(n);const f=new dr;for(const t of e){if(o?.aborted)throw new Error("Request aborted");const e=await new Promise((e,n)=>{const r=new G(h);let i=0;const s=new FileReader;s.onerror=()=>{n(s.error)};const a=async()=>{if(o?.aborted)return void n(new Error("Request aborted"));if(i>=t.size){const t=await r.finalize();return await c.enqueue(async()=>l(t)),void e(t)}const a=t.slice(i,i+4096);s.readAsArrayBuffer(a)};s.onload=async t=>{if(!t.target)return void n("No event target");const e=t.target.result;e&&(await r.append(new Uint8Array(e)),i+=4096),a()},a()});await c.drain();const{filename:n,extension:r}=s.Strings.parseFilename(t.name);f.addFork(hr(t),e.hash(),{"Content-Type":fr(pr[r.toLowerCase()]||"application/octet-stream"),Filename:n}),"index.html"===t.name&&f.addFork("/",V,{"website-index-document":"index.html"})}if(o?.aborted)throw new Error("Request aborted");return f.saveRecursively(t,n,i,a)}(this.context.bee,e,a,n,r,this.context.getRequestOptionsForCall(i))}async streamFromDirectory(t,e,n,r,i){new p(t);return async function(){throw new Error("Streaming directories is not supported in browsers!")}(this.context.bee,0,0,0,0,this.context.getRequestOptionsForCall(i))}async hashDirectory(t){return async function(){throw new Error("Hashing directories is not supported in browsers!")}()}}const Sr="peers";class kr{constructor(t){this.context=t}async checkConnection(e){return async function(e){await t(e,{url:"",responseType:"text"})}(this.context.getRequestOptionsForCall(e))}async isConnected(t){try{await this.checkConnection(t)}catch{return!1}return!0}async isGateway(e){try{return await async function(e){const n=await t(e,{url:"/gateway"});return Y.parse(n.data).gateway}(this.context.getRequestOptionsForCall(e))}catch{return!1}}async getNodeAddresses(e){return async function(e){const n=await t(e,{url:"addresses",responseType:"json"});return _.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getBlocklist(e){return async function(e){const n=await t(e,{url:"blocklist",responseType:"json"});return Q.parse(n.data).peers}(this.context.getRequestOptionsForCall(e))}async getPeers(e){return async function(e){const n=await t(e,{url:Sr,responseType:"json"});return X.parse(n.data).peers}(this.context.getRequestOptionsForCall(e))}async removePeer(e,n){const r=new B(e);return async function(e,n){return(await t(e,{url:`${Sr}/${n}`,responseType:"json",method:"DELETE"})).data}(this.context.getRequestOptionsForCall(n),r)}async getTopology(e){return async function(e){const n=await t(e,{url:"topology",responseType:"json"});return tt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async ping(e,n){const r=new B(e);return async function(e,n){return(await t(e,{url:`pingpong/${n}`,responseType:"json",method:"POST"})).data}(this.context.getRequestOptionsForCall(n),r)}}const xr="bytes";async function Ir(e,n,r,i){const a=await t(e,{url:xr,method:"post",responseType:"json",data:n,headers:{"content-type":"application/octet-stream",...Vn(r,i)}});return{reference:S.parse(a.data).reference,tagUid:a.headers["swarm-tag"]?k(a.headers["swarm-tag"]):void 0,historyAddress:a.headers["swarm-act-history-address"]?s.Optional.of(new m(a.headers["swarm-act-history-address"])):s.Optional.empty()}}async function Ar(e,n,r){r&&(r=j.parse(r));const i=await t(e,{responseType:"arraybuffer",url:`${xr}/${n}`,headers:Vn(null,r)});return new A(i.data)}const Cr="stewardship";class Ur{constructor(t){this.raw=t}toString(){const t=nt().safeParse(this.raw);return t.success&&t.data.includes(".eth")?t.data:new m(this.raw).toHex()}}class Pr{constructor(t){this.context=t}async upload(t,e,n,r){const i=new p(t);return rt(e),n&&(n=it.parse(n)),Ir(this.context.getRequestOptionsForCall(r),e,i,n)}async download(t,e,n){return e&&(e=j.parse(e)),Ar(this.context.getRequestOptionsForCall(n),new Ur(t),e)}async downloadReadable(e,n,r){return n&&(n=j.parse(n)),async function(e,n,r){return r&&(r=j.parse(r)),(await t(e,{responseType:"stream",url:`${xr}/${n}`,headers:Vn(null,r)})).data}(this.context.getRequestOptionsForCall(r),new Ur(e),n)}async probe(e,n){const r=new m(e);return async function(e,n){const r=await t(e,{url:`${xr}/${n}`,method:"head",responseType:"json"});return{contentLength:parseInt(r.headers["content-length"])}}(this.context.getRequestOptionsForCall(n),r)}async isRetrievable(e,n){const r=new m(e);return async function(e,n){const r=await t(e,{method:"get",responseType:"json",url:`${Cr}/${n}`});return et.parse(r.data).isRetrievable}(this.context.getRequestOptionsForCall(n),r)}}const Er="feeds";function $r(t){const e=t["swarm-feed-index"],n=t["swarm-feed-index-next"];if(!e)throw new v("Response did not contain expected swarm-feed-index!");if(!n)throw new v("Response did not contain expected swarm-feed-index-next!");return{feedIndex:new st(e),feedIndexNext:new st(n)}}async function Dr(e,n,r,i){const s=await t(e,{responseType:"arraybuffer",url:`${Er}/${n}/${r}`,params:{...i}});return{payload:new A(s.data),...$r(s.headers)}}function Br(t,e){return e="number"==typeof e?st.fromBigInt(BigInt(e)):e,new x(at(A.concat(t.toUint8Array(),e.toUint8Array())))}async function Tr(t,e,n){try{const r=await Dr(t,e,n);if(!r.feedIndexNext)throw Error("Feed index next is not defined. This should happen when fetching an exact index.");return r.feedIndexNext}catch(t){if(t instanceof ut)return st.fromBigInt(0n);throw t}}async function Or(t,e,n,r,i,s){const a=Br(n,s?.index??await Tr(t,e.publicKey().address(),n));if(r.length>4096){const n=await Ir(t,r,i,s);return async function(t,e,n,r,i,s){return e=new I(e),r=new x(r),_n(t,i.toSingleOwnerChunk(r,e),n,s)}(t,e,i,a,ct(await Zn(t,n.reference)),s)}const o=nt().safeParse(r);return Qn(t,e,i,a,o.success?A.fromUtf8(o.data).toUint8Array():r,s)}function Mr(t,e,n){const r=Br(e,n);return new m(at(A.concat(r.toUint8Array(),t.toUint8Array())))}async function Rr(t,e,n,r,i=!1){const a=Mr(e,n,r="number"==typeof r?st.fromBigInt(BigInt(r)):r),o=Yn(await Zn(t,a.toHex()),a);let c=s.Optional.empty();if(i){const t=A.fromSlice(o.payload.toUint8Array(),0,8);c=s.Optional.of(Number(ot(t.toUint8Array(),"BE")))}return{timestamp:c,payload:new A(o.payload.offset(i?8:0))}}async function Fr(t,e,n,r){const i=Mr(e,n,r="number"==typeof r?st.fromBigInt(BigInt(r)):r),s=Yn(await Zn(t,i),i);return E(s.payload,s.span)}function qr(e,n,r){const i=async t=>{if(void 0===t?.index)return Dr(e,r,n);const i=await Rr(e,r,n,t.index,t.hasTimestamp??!0),s="number"==typeof t.index?st.fromBigInt(BigInt(t.index)):t.index;return{payload:i.payload,feedIndex:s,feedIndexNext:s.next()}};return{download:i,downloadPayload:async t=>{if(void 0===t?.index)return Dr(e,r,n);const i=await Fr(e,r,n,t.index),s=i.span.toBigInt()<=4096n?i.payload:await Ar(e,new Ur(i.address)),a="number"==typeof t.index?st.fromBigInt(BigInt(t.index)):t.index;return{payload:s,feedIndex:a,feedIndexNext:a.next()}},downloadReference:async s=>{let a=s?.index;void 0===a&&(a=(await async function(e,n,r){return $r((await t(e,{responseType:"arraybuffer",url:`${Er}/${n}/${r}`,params:{"Swarm-Only-Root-Chunk":!0}})).headers)}(e,r,n)).feedIndex);const o=await i({...s,index:a});return{reference:new m(o.payload.toUint8Array()),feedIndex:o.feedIndex,feedIndexNext:o.feedIndexNext??o.feedIndex.next()}},owner:r,topic:n}}function Lr(t,e,n){const r=async(r,i,s)=>async function(t,e,n,r,i,s){r=new m(r);const a=Br(n,s?.index??await Tr(t,e.publicKey().address(),n)),o=s?.at??Date.now()/1e3,c=dt(BigInt(Math.floor(o)),"BE");return Qn(t,e,i,a,A.concat(c,r.toUint8Array()),s)}(t,n,e,i,r,s);return{...qr(t,e,n.publicKey().address()),upload:r,uploadReference:r,uploadPayload:async(r,i,s)=>Or(t,n,e,i,r,s)}}async function Kr(t,e,n,r,i,a){const o=function(t,e,n){const r=n.toBigInt(),i=[];for(let n=0n;n<=r;n++)i.push(Mr(t,e,st.fromBigInt(n)));return i}(e,n,r).map(async e=>async function(t,e,n,r){try{return await t.chunk.download(e,n,r),!0}catch(t){const e=s.Objects.getDeep(t,"status");if(404===e||500===e)return!1;throw t}}(t,e,i,a));return(await Promise.all(o)).every(t=>t)}class Nr{constructor(t){this.context=t}makeReader(t,e,n){return qr(this.context.getRequestOptionsForCall(n),new lt(t),new r(e))}makeWriter(t,e,n){const r=e?new I(e):this.context.signer;if(!r)throw Error("No signer provided");return Lr(this.context.getRequestOptionsForCall(n),new lt(t),r)}async createManifest(e,n,i,s,a){const o=new p(e),c=new lt(n),d=new r(i);return s&&(s=K.parse(s)),async function(e,n,r,i,s){const a=await t(e,{method:"post",responseType:"json",url:`${Er}/${n}/${r}`,headers:Vn(i,s)});return S.parse(a.data).reference}(this.context.getRequestOptionsForCall(a),d,c,o,s)}async fetchLatestUpdate(t,e,n){return Dr(this.context.getRequestOptionsForCall(n),new r(e),new lt(t))}async isRetrievable(t,e,n,i,a){const o=new r(t),c=new lt(e);if(i&&(i=j.parse(i)),!n)try{return await this.makeReader(c,o,a).download(),!0}catch(t){const e=s.Objects.getDeep(t,"status");if(404===e||500===e)return!1;throw t}return Kr(this.context.bee,o,c,n,i,this.context.getRequestOptionsForCall(a))}}class Hr{constructor(t){this.context=t}async upload(t,e,n,r,i){const s=new p(t);if(ht(e),r&&(r=pt.parse(r)),n&&"string"!=typeof n)throw new TypeError("name has to be string or undefined!");if(ft(e)){const t=await J(e),a=n??e.name,o=e.type,c={...r,contentType:o};return mr(this.context.getRequestOptionsForCall(i),t,s,a,c)}return mr(this.context.getRequestOptionsForCall(i),e,s,n,r)}async download(e,n="",r,i){return r&&(r=j.parse(r)),async function(e,n,r="",i){const s=await t(e,{method:"GET",responseType:"arraybuffer",url:`${gr}/${n}/${r}`,headers:Vn(null,i)});return{...Gn(s.headers),data:new A(s.data)}}(this.context.getRequestOptionsForCall(i),new Ur(e),n,r)}async downloadReadable(e,n="",r,i){const s=new m(e);return r&&(r=j.parse(r)),async function(e,n,r="",i){n=new m(n);const s=await t(e,{method:"GET",responseType:"stream",url:`${gr}/${n}/${r}`,headers:Vn(null,i)});return{...Gn(s.headers),data:s.data}}(this.context.getRequestOptionsForCall(i),s,n,r)}}const Wr="grantee";class jr{constructor(t){this.context=t}async create(e,n,r){const i=new p(e),s=n.map(t=>new g(t));return async function(e,n,r){const i=await t(e,{method:"post",url:Wr,data:{grantees:r.map(t=>t.toCompressedHex())},headers:Vn(n),responseType:"json"}),s=yt.parse(i.data);return{status:i.status,statusText:i.statusText,ref:s.ref,historyref:s.historyref}}(this.context.getRequestOptionsForCall(r),i,s)}async get(e,n){const r=new m(e);return async function(e,n){const r=await t(e,{method:"get",url:`${Wr}/${n}`,responseType:"json"});return{status:r.status,statusText:r.statusText,grantees:wt.parse(r.data)}}(this.context.getRequestOptionsForCall(n),r)}async patch(e,n,r,i,s){const a=new p(e),o=new m(n),c=new m(r),d={add:i.add?.map(t=>new g(t))??[],revoke:i.revoke?.map(t=>new g(t))??[]};return async function(e,n,r,i,s){const a=await t(e,{method:"patch",url:`${Wr}/${r}`,data:{add:s.add.map(t=>t.toCompressedHex()),revoke:s.revoke.map(t=>t.toCompressedHex())},headers:{...Vn(n),"swarm-act-history-address":i.toHex()},responseType:"json"}),o=yt.parse(a.data);return{status:a.status,statusText:a.statusText,ref:o.ref,historyref:o.historyref}}(this.context.getRequestOptionsForCall(s),a,o,c,d)}}async function zr(t){if("string"==typeof t)return(new TextEncoder).encode(t);if(t instanceof ArrayBuffer)return new Uint8Array(t);if(t instanceof Blob)return new Uint8Array(await new Response(t).arrayBuffer());throw new TypeError("unknown websocket data type")}class Gr{constructor(t){this.context=t,this.cancelled=new WeakSet}async pssSend(e,n,r,i,s,a){const o=new p(e);rt(i);const c=s?new g(s):void 0;await async function(e,n,r,i,s,a){await t(e,{method:"post",url:`pss/send/${r}/${i}`,data:s,responseType:"json",params:{recipient:a},headers:Vn(n)})}(this.context.getRequestOptionsForCall(a),o,n,r,i,c)}pssSubscribe(t,e){e=gt.parse(e);const n=this.openWebSocket(`pss/subscribe/${t.toHex()}`),r={topic:t,cancel:this.makeCancel(n)};return n.onmessage=async t=>{const n=await zr(t.data);n.length&&e.onMessage(new A(n),r)},n.onerror=t=>{this.isCancelled(n)||e.onError(new v(t.message),r)},n.onclose=()=>{e.onClose(r)},r}async pssReceive(t,e=0){if("number"!=typeof e)throw new TypeError("timeoutMsc parameter has to be a number!");return new Promise((n,r)=>{let i;const s=this.pssSubscribe(t,{onError:t=>{clearTimeout(i),s.cancel(),r(t.message)},onMessage:t=>{clearTimeout(i),s.cancel(),n(t)},onClose:()=>{clearTimeout(i),s.cancel()}});e>0&&(i=setTimeout(()=>{s.cancel(),r(new v("pssReceive timeout"))},e))})}gsocMine(t,e,n=12){const r=new B(t),i=new x(e);for(let t=0n;t<0xffffn;t++){const e=new I(mt(2867n+t)),a=P(i,e.publicKey().address());if(256-s.Binary.proximity(a.toUint8Array(),r.toUint8Array())<=256-n)return e}throw Error("Could not mine a valid signer")}async gsocSend(t,e,n,r,i,s){const a=new p(t),o=new I(e),c=new x(n),d=E(r).toSingleOwnerChunk(c,o);return _n(this.context.getRequestOptionsForCall(s),d,a,i)}gsocSubscribe(t,e,n){const i=new r(t),s=new x(e);n=bt.parse(n);const a=P(s,i),o=this.openWebSocket(`gsoc/subscribe/${a.toHex()}`),c={address:i,cancel:this.makeCancel(o)};return o.onmessage=async t=>{const e=await zr(t.data);e.length&&n.onMessage(new A(e),c)},o.onerror=t=>{this.isCancelled(o)||n.onError(new v(t.message),c)},o.onclose=()=>{n.onClose(c)},c}openWebSocket(t){const e=this.context.url.replace(/^http/i,"ws");return"browser"===s.System.whereAmI()?new vt(`${e}/${t}`):new vt(`${e}/${t}`,{headers:this.context.getRequestOptionsForCall().headers})}makeCancel(t){return()=>{this.cancelled.has(t)||(this.cancelled.add(t),t.terminate?t.terminate():t.close())}}isCancelled(t){return this.cancelled.has(t)}}const Vr="pins";class Jr{constructor(t){this.context=t}async add(e,n){const r=new m(e);await async function(e,n){await t(e,{method:"post",responseType:"json",url:`${Vr}/${n}`})}(this.context.getRequestOptionsForCall(n),r)}async remove(e,n){const r=new m(e);await async function(e,n){await t(e,{method:"delete",responseType:"json",url:`${Vr}/${n}`})}(this.context.getRequestOptionsForCall(n),r)}async getAll(e){return async function(e){const n=await t(e,{method:"get",responseType:"json",url:Vr}),{references:r}=St.parse(n.data);return(r??[]).map(t=>new m(t))}(this.context.getRequestOptionsForCall(e))}async get(e,n){const r=new m(e);return async function(e,n){const r=await t(e,{method:"get",responseType:"json",url:`${Vr}/${n}`});return S.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async reuploadData(e,n,r){const i=new p(e),s=new m(n);await async function(e,n,r){await t(e,{method:"put",url:`${Cr}/${r}`,headers:{"swarm-postage-batch-id":n.toHex()}})}(this.context.getRequestOptionsForCall(r),i,s)}}const Zr="settlements";class Yr{constructor(t){this.context=t}async get(e,n){const r=new B(e);return async function(e,n){const r=await t(e,{url:`${Zr}/${n}`,responseType:"json"});return kt.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getAll(e){return async function(e){const n=await t(e,{url:Zr,responseType:"json"});return xt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}}class _r{constructor(t){this.context=t}makeReader(t,e){const n=new r(t);return{owner:n,download:Xn.bind(null,this.context.getRequestOptionsForCall(e),n)}}makeWriter(t,e){const n=t?new I(t):this.context.signer;if(!n)throw Error("No signer provided");return{...this.makeReader(n.publicKey().address(),e),upload:Qn.bind(null,this.context.getRequestOptionsForCall(e),n)}}}const Qr="stake";class Xr{constructor(t){this.context=t}async get(e){return async function(e){const n=await t(e,{method:"get",responseType:"json",url:Qr});return It.parse(n.data).stakedAmount}(this.context.getRequestOptionsForCall(e))}async getWithdrawable(e){return async function(e){const n=await t(e,{method:"get",responseType:"json",url:`${Qr}/withdrawable`});return At.parse(n.data).withdrawableAmount}(this.context.getRequestOptionsForCall(e))}async deposit(e,n,r){const i=e instanceof d?e.toPLURString():a(e,{min:1n,name:"amount"});return n&&(n=L.parse(n)),async function(e,n,r){const i=await t(e,{method:"post",responseType:"json",url:`${Qr}/${n}`,headers:Vn(null,r)});return Ct.parse(i.data).txHash}(this.context.getRequestOptionsForCall(r),i,n)}async withdrawSurplus(e){return async function(e){const n=await t(e,{method:"delete",responseType:"json",url:`${Qr}/withdrawable`});return Ct.parse(n.data).txHash}(this.context.getRequestOptionsForCall(e))}async migrate(e){return async function(e){const n=await t(e,{method:"delete",responseType:"json",url:Qr});return Ct.parse(n.data).txHash}(this.context.getRequestOptionsForCall(e))}async getRedistributionState(e){return async function(e){const n=await t(e,{method:"get",responseType:"json",url:"redistributionstate"});return Ut.parse(n.data)}(this.context.getRequestOptionsForCall(e))}}const ti="stamps";const ei="batches";class ni{constructor(t){this.context=t}async create(e,n,r,i){const s=a(e,{min:0n,name:"amount"});if(r&&(r=Ot.parse(r)),n<Mt||n>Rt)throw new H(`Depth has to be between ${Mt}..${Rt}`,n);const o=await this.context.bee.status.getChainState(),c=17280n*BigInt(o.currentPrice)+1n;if(BigInt(s)<c)throw new H(`Amount has to be at least ${c} (1 day at current price ${o.currentPrice})`,s);const d=await async function(e,n,r,i,s,a){const o={};s&&(o["gas-price"]=s),void 0!==a&&(o.immutable=String(a));const c=await t(e,{method:"post",url:`${ti}/${n}/${r}`,responseType:"json",params:{label:i},headers:o});return Pt.parse(c.data).batchID}(this.context.getRequestOptionsForCall(i),s,n,r?.label,r?.gasPrice?.toString(),r?.immutableFlag);return!1!==r?.waitForUsable&&await this.waitForUsable(d,r?.waitForUsableTimeout),d}async updateLabel(e,n,r){const i=new p(e);await async function(e,n,r){await t(e,{method:"patch",url:`${ti}/${n}`,responseType:"json",data:{label:r}})}(this.context.getRequestOptionsForCall(r),i,n)}async calculateTopUpForBZZ(t,e,n){const r=await this.context.bee.status.getChainState(n),i="gnosis"===this.context.network?5:15,s=e.toPLURBigInt()/2n**BigInt(t),c=function(t,e,n){const r=BigInt(a(t));return o.fromSeconds(Number(r*BigInt(n)/BigInt(e)))}(s,r.currentPrice,i);return{amount:s,duration:c}}async topUp(e,n,r){const i=new p(e),s=a(n,{min:1n,name:"amount"});return async function(e,n,r){const i=await t(e,{method:"patch",url:`${ti}/topup/${n}/${r}`,responseType:"json"});return Pt.parse(i.data).batchID}(this.context.getRequestOptionsForCall(r),i,s)}async dilute(e,n,r){const i=new p(e),s=Ft().int().min(18).max(255).parse(n);return async function(e,n,r){const i=await t(e,{method:"patch",url:`${ti}/dilute/${n}/${r}`,responseType:"json"});return Pt.parse(i.data).batchID}(this.context.getRequestOptionsForCall(r),i,s)}async get(e,n,r,i){const s=new p(e);return async function(e,n,r,i){const s=await t(e,{method:"get",url:`${ti}/${n}`,responseType:"json"});return zn(Et.parse(s.data),r,i)}(this.context.getRequestOptionsForCall(n),s,r,i)}async getGlobal(e,n){const r=new p(e);return async function(e,n){const r=await t(e,{method:"get",url:`${ei}/${n}`,responseType:"json"});return Bt.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getBuckets(e,n){const r=new p(e);return async function(e,n){const r=await t(e,{method:"get",url:`${ti}/${n}/buckets`,responseType:"json"});return $t.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getAll(e){return async function(e){const n=await t(e,{method:"get",url:ti,responseType:"json"});return Dt.parse(n.data).stamps.map(t=>zn(t))}(this.context.getRequestOptionsForCall(e))}async getAllGlobal(e){return async function(e){const n=await t(e,{method:"get",url:ei,responseType:"json"});return Tt.parse(n.data).batches}(this.context.getRequestOptionsForCall(e))}async waitForUsable(t,e=24e4){for(let n=0;n<e;n+=3e3){try{if((await this.get(t)).usable)return}catch{}await s.System.sleepMillis(3e3)}throw new v("Timeout on waiting for postage stamp to become usable")}}class ri{constructor(t){this.context=t}async get(e){return async function(e){const n=await t(e,{method:"get",url:"status",responseType:"json"});return qt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getHealth(e){return async function(e){const n=await t(e,{method:"get",url:"health",responseType:"json"});return Lt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getReadiness(e){return async function(e){const n=await t(e,{method:"get",url:"readiness"});return Kt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getNodeInfo(e){return async function(e){const n=await t(e,{method:"get",url:"node",responseType:"json"});return Nt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async isSupportedExactVersion(t){const{version:e}=await this.getHealth(t);return e===jt}async isSupportedApiVersion(t){const{apiVersion:e}=await this.getHealth(t);return zt(e)===zt(Gt)}async getVersions(t){const{version:e,apiVersion:n}=await this.getHealth(t);return{supportedBeeVersion:jt,supportedBeeApiVersion:Gt,beeVersion:e,beeApiVersion:n}}async getReserveState(e){return async function(e){const n=await t(e,{method:"get",url:"reservestate",responseType:"json"});return Ht.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getChainState(e){return async function(e){const n=await t(e,{method:"get",url:"chainstate",responseType:"json"});return Wt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}}class ii{constructor(t){this.context=t}get blockTime(){return"gnosis"===this.context.network?5:15}async buy(t,e,n,r,i,s){const a=Wn(e,(await this.context.bee.status.getChainState(r)).currentPrice,this.blockTime),o=jn(t,i,s);return n&&(n=Ot.parse(n)),this.context.bee.stamp.create(a,o,n,r)}async getCost(t,e,n,r,i){const s=Wn(e,(await this.context.bee.status.getChainState(n)).currentPrice,this.blockTime);return Hn(jn(t,r,i),s)}async extend(t,e,n,r,i,s){const a=await this.context.bee.stamp.get(t,r),o=jn(e,i,s),c=await this.context.bee.status.getChainState(r),d=o-a.depth,u=d<=0?1n:2n**BigInt(d),l=Wn(n,c.currentPrice,this.blockTime),h=Wn(a.duration,c.currentPrice,this.blockTime),p=(n.isZero()?h*u:(h+l)*u)-h;let f;if(p>0n&&(f=await this.context.bee.stamp.topUp(a.batchID,p,r)),d>0)return this.context.bee.stamp.dilute(a.batchID,o,r);if(!f)throw new Error("Nothing to extend, both size and duration are already sufficient");return f}async extendSize(t,e,n,r,i){const s=await this.context.bee.status.getChainState(n),a=await this.context.bee.stamp.get(t,n),o=jn(e,r,i),c=o-a.depth;if(c<=0)throw new H("New depth has to be greater than the original depth",o);const d=Wn(a.duration,s.currentPrice,this.blockTime);return await this.context.bee.stamp.topUp(a.batchID,d*(2n**BigInt(c)-1n)+1n,n),this.context.bee.stamp.dilute(a.batchID,o,n)}async extendDuration(t,e,n){const r=await this.context.bee.stamp.get(t,n),i=Wn(e,(await this.context.bee.status.getChainState(n)).currentPrice,this.blockTime);return this.context.bee.stamp.topUp(r.batchID,i,n)}async getExtensionCost(t,e,n,r,i,s){const a=await this.context.bee.stamp.get(t,r),o=await this.context.bee.status.getChainState(r),c=n.isZero()?0n:Wn(n,o.currentPrice,this.blockTime),d=jn(e,i,s),u=Wn(a.duration,o.currentPrice,this.blockTime),l=Hn(a.depth,u);return Hn(Math.max(a.depth,d),u+c).minus(l)}async getSizeExtensionCost(t,e,n,r,i){const s=await this.context.bee.stamp.get(t,n),a=await this.context.bee.status.getChainState(n),o=jn(e,r,i);if(o-s.depth<=0)throw new H("New depth has to be greater than the original depth",o);const c=Wn(s.duration,a.currentPrice,this.blockTime),d=Hn(s.depth,c);return Hn(o,c).minus(d)}async getDurationExtensionCost(t,e,n){const r=await this.context.bee.stamp.get(t,n),i=Wn(e,(await this.context.bee.status.getChainState(n)).currentPrice,this.blockTime);return Hn(r.depth,i)}async rename(t,e,n){return this.context.bee.stamp.updateLabel(t,e,n)}}const si="tags";class ai{constructor(t){this.context=t}async create(e){return async function(e){const n=await t(e,{method:"post",url:si,responseType:"json"});return Vt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getAll(e,n){return e&&(e=Zt.parse(e)),async function(e,n){const r=await t(e,{url:si,params:{offset:n?.offset,limit:n?.limit},responseType:"json"});return Jt.parse(r.data).tags}(this.context.getRequestOptionsForCall(n),e)}async get(e,n){const r=k(e);return async function(e,n){const r=await t(e,{url:`${si}/${n}`,responseType:"json"});return Vt.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async delete(e,n){const r=k(e);await async function(e,n){await t(e,{method:"delete",url:`${si}/${n}`})}(this.context.getRequestOptionsForCall(n),r)}async update(e,n,r){const i=new m(n),s=k(e);await async function(e,n,r){await t(e,{method:"patch",url:`${si}/${n}`,data:{reference:r}})}(this.context.getRequestOptionsForCall(r),s,i)}}const oi="transactions";class ci{constructor(t){this.context=t}async getAll(e){return async function(e){const n=await t(e,{url:oi,responseType:"json"});return Yt.parse(n.data).pendingTransactions}(this.context.getRequestOptionsForCall(e))}async get(e,n){const r=new Xt(e);return async function(e,n){const r=await t(e,{url:`${oi}/${n}`,responseType:"json"});return _t.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async rebroadcast(e,n){const r=new Xt(e);return async function(e,n){const r=await t(e,{method:"post",url:`${oi}/${n}`,responseType:"json"});return Qt.parse(r.data).transactionHash}(this.context.getRequestOptionsForCall(n),r)}async cancel(e,n,r){const i=new Xt(e),s=n?a(n,{min:0n,name:"gasPrice"}):void 0;return async function(e,n,r){const i={};r&&(i["gas-price"]=r);const s=await t(e,{method:"delete",headers:i,url:`${oi}/${n}`,responseType:"json"});return Qt.parse(s.data).transactionHash}(this.context.getRequestOptionsForCall(r),i,s)}}const di="wallet";class ui{constructor(t){this.context=t}async getBalance(e){return async function(e){const n=await t(e,{method:"get",url:di,responseType:"json"});return te.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async withdrawBZZ(e,n,i){const s=e instanceof d?e:d.fromPLUR(e),a=new r(n);return async function(e,n,r){const i=await t(e,{method:"post",url:`${di}/withdraw/bzz`,responseType:"json",params:{amount:n.toPLURString(),address:r.toHex()}});return ee.parse(i.data).transactionHash}(this.context.getRequestOptionsForCall(i),s,a)}async withdrawDAI(e,n,i){const s=e instanceof ne?e:ne.fromWei(e),a=new r(n);return async function(e,n,r){const i=await t(e,{method:"post",url:`${di}/withdraw/nativetoken`,responseType:"json",params:{amount:n.toWeiString(),address:r.toHex()}});return ee.parse(i.data).transactionHash}(this.context.getRequestOptionsForCall(i),s,a)}}const li=["1","7","9","11","13","15","17","19","20","21","22","23","25","37","42","43","53","69","77","79","87","95","101","102","103","104","109","110","111","113","115","117","119","123","135","137","139","143","161","179","389","427","465","512","513","514","515","526","530","531","532","540","548","554","556","563","587","601","636","989","990","993","995","1719","1720","1723","2049","3659","4045","4190","5060","5061","6000","6566","6665","6666","6667","6668","6669","6679","6697","10080"];function hi(t){if(!function(t){try{if("string"!=typeof t)return!1;const e=new URL(t);return"http:"===e.protocol||"https:"===e.protocol}catch(t){return!1}}(t))throw new H("URL is not valid!",t);const e=new URL(t).port;if(e&&!function(t){if("string"!=typeof t)return!1;if(li.includes(t))return!1;const e=parseInt(t,10);return e>0&&e<65536&&!isNaN(e)}(e))throw new H("Port in URL is considered bad port and cannot be used!",e)}class pi{constructor(t,e){hi(t),this.url=function(t){return t.endsWith("/")?t.slice(0,-1):t}(t),e?.signer&&(this.signer=new I(e.signer)),this.network=e?.network??"gnosis",this.requestOptions={baseURL:this.url,timeout:e?.timeout??0,headers:e?.headers,onRequest:e?.onRequest,httpAgent:e?.httpAgent,httpsAgent:e?.httpsAgent};const n={getRequestOptionsForCall:t=>this.getRequestOptionsForCall(t),url:this.url,signer:this.signer,network:this.network,bee:this};this.balance=new nr(n),this.settlement=new Yr(n),this.transaction=new ci(n),this.stake=new Xr(n),this.connectivity=new kr(n),this.status=new ri(n),this.wallet=new ui(n),this.stamp=new ni(n),this.storage=new ii(n),this.chequebook=new sr(n),this.cheque=new ir(n),this.tag=new ai(n),this.pin=new Jr(n),this.grantee=new jr(n),this.messaging=new Gr(n),this.feed=new Nr(n),this.soc=new _r(n),this.data=new Pr(n),this.chunk=new ar(n),this.file=new Hr(n),this.collection=new vr(n)}makeContentAddressedChunk(t,e){return E(t,e)}unmarshalContentAddressedChunk(t){return ct(t)}makeSingleOwnerChunk(t,e,n,r,i){return function(t,e,n,r,i){r=new x(r),i=new I(i);const s={data:A.concat(e.toUint8Array(),n.toUint8Array()),span:e,payload:n,address:t};return C(s,r,i.toBigInt())}(t,e,n,r,i)}calculateSingleOwnerChunkAddress(t,e){return P(t,e)}unmarshalSingleOwnerChunk(t,e){return Yn(t,e)}async createEnvelope(i,s,a){return i=new p(i),s=new m(s),async function(i,s,a){const o=await t(i,{method:"post",responseType:"json",url:`envelope/${a}`,headers:{"swarm-postage-batch-id":s.toHex()}}),c=e.parse(o.data);return{issuer:new r(c.issuer),index:c.index,timestamp:c.timestamp,signature:new n(c.signature),batchId:s}}(this.getRequestOptionsForCall(a),i,s)}async rchash(e,n,r,s){return async function(e,n,r,s){const a=await t(e,{responseType:"json",url:`rchash/${n}/${r}/${s}`});return i.parse(a.data).durationSeconds}(this.getRequestOptionsForCall(s),e,n,r)}getRequestOptionsForCall(t){return t&&(t=re.parse(t)),t?s.Objects.deepMerge2(this.requestOptions,t):this.requestOptions}}const fi=4096;function yi(t){if(0===t.length)return[new Uint8Array(0)];const e=[];for(let n=0;n<t.length;n+=fi)e.push(t.slice(n,Math.min(n+fi,t.length)));return e}const wi=ie.omit({appSecret:!0,connectedUntil:!0,stampPending:!0,chatBinding:!0}),gi=se({type:oe("account-delta"),snapshot:ae.extend({connectedApps:ce(wi)})}),mi=de().min(1).max(100),bi=de().regex(/^[0-9a-f]{8}$/),vi=le("type",[he,gi,se({type:oe("lease-request"),accountId:de().length(40),batchId:de().length(64),fromDeviceId:mi,requestId:bi}),se({type:oe("lease-claim"),accountId:de().length(40),batchId:de().length(64),fromDeviceId:mi,requestId:bi}),se({type:oe("lease-released"),accountId:de().length(40),batchId:de().length(64),partition:ue().int().min(0),fromDeviceId:mi,requestId:bi.optional()}),se({type:oe("presence"),accountId:de().length(40),fromDeviceId:mi})]);class Si{constructor(t){this.local=!0,this.handlers=new Set,this.channelName=function(t){return`swarm-id-bus-v1:${t}`}(t),this.channel=new BroadcastChannel(this.channelName),this.channel.onmessage=t=>{for(const e of this.handlers)e(t.data)}}publish(t){this.channel.postMessage(t)}subscribe(t){return this.handlers.add(t),()=>this.handlers.delete(t)}close(){this.handlers.clear(),this.channel.close()}}class ki{constructor(t){this.handlers=new Set,this.peerLeftHandlers=new Set,this.closed=!1,this.transports=t,this.transportUnsubscribers=t.flatMap(t=>this.listenTo(t))}listenTo(t){const e=[t.subscribe((t,e)=>this.dispatch(t,e))],n=t.onPeerLeft?.(t=>{for(const e of this.peerLeftHandlers)try{e(t)}catch(t){console.error("[AccountBus] Peer-left handler error:",t)}});return n&&e.push(n),e}publish(t,e){if(!this.closed)for(const n of this.transports)e?.localOnly&&!n.local||n.publish(t)}addTransport(t){if(this.closed)return t.close(),()=>{};this.transports.push(t);const e=this.listenTo(t);return this.transportUnsubscribers.push(...e),()=>{for(const t of e)t();t.close(),this.transports=this.transports.filter(e=>e!==t),this.transportUnsubscribers=this.transportUnsubscribers.filter(t=>!e.includes(t))}}subscribe(t){return this.handlers.add(t),()=>this.handlers.delete(t)}onPeerLeft(t){return this.peerLeftHandlers.add(t),()=>this.peerLeftHandlers.delete(t)}close(){this.closed=!0;for(const t of this.transportUnsubscribers)t();this.transportUnsubscribers=[],this.handlers.clear(),this.peerLeftHandlers.clear();for(const t of this.transports)t.close();this.transports=[]}dispatch(t,e){const n=vi.safeParse(t);if(n.success)for(const t of this.handlers)try{t(n.data,e)}catch(t){console.error("[AccountBus] Handler error:",t)}}}const xi=se({version:ue().int().nonnegative(),data:pe()});class Ii{getItem(t){if("undefined"!=typeof window&&window.localStorage)return window.localStorage.getItem(t)??void 0}setItem(t,e){"undefined"!=typeof window&&window.localStorage&&window.localStorage.setItem(t,e)}removeItem(t){"undefined"!=typeof window&&window.localStorage&&window.localStorage.removeItem(t)}}const Ai="swarm-id-storage-write",Ci=new Map;class Ui{constructor(t){this.listeners=new Set,this.options=t}subscribe(t){return this.listeners.add(t),this.boundStorageHandler||this.setupStorageEventListener(),()=>{this.listeners.delete(t),0===this.listeners.size&&this.cleanupStorageEventListener()}}setupStorageEventListener(){"undefined"!=typeof window&&(this.boundStorageHandler=t=>{t.key===this.options.key&&this.reloadAndNotify()},window.addEventListener("storage",this.boundStorageHandler),this.boundSameWindowHandler=t=>{const e=t.detail;e&&e.key===this.options.key&&e.source!==this&&this.reloadAndNotify(e.noRepublish?{noRepublish:!0}:void 0)},window.addEventListener(Ai,this.boundSameWindowHandler))}cleanupStorageEventListener(){"undefined"!=typeof window&&(this.boundStorageHandler&&(window.removeEventListener("storage",this.boundStorageHandler),this.boundStorageHandler=void 0),this.boundSameWindowHandler&&(window.removeEventListener(Ai,this.boundSameWindowHandler),this.boundSameWindowHandler=void 0))}notifySameWindow(t){"undefined"!=typeof window&&window.dispatchEvent(new CustomEvent(Ai,{detail:{key:this.options.key,source:this,noRepublish:t}}))}reloadAndNotify(t){this.options.sealing?this.prime().then(()=>this.notifyListeners(this.load(),t)):this.notifyListeners(this.load(),t)}notifyListeners(t,e){for(const n of this.listeners)try{n(t,e)}catch(t){console.error(`[${this.options.loggerName??"Storage"}] Listener error:`,t)}}load(){const t=this.options.storage.getItem(this.options.key);if(!t)return[];try{const e=JSON.parse(t);return this.parse(e)}catch(t){return console.error(`[${this.options.loggerName??"Storage"}] Load failed:`,t),[]}}parse(t){const e=xi.safeParse(t),n=e.success?e.data.version:0,r=e.success?e.data.data:t,i=this.options.sealing?this.options.sealing.open(r):r,s=this.options.parsers[n];return s?s(i,n):(console.error(`[${this.options.loggerName??"Storage"}] No parser for version ${n}`),[])}async prime(){const t=this.options.sealing;if(t)try{const e=this.storedData();if(void 0===e)return;await t.prime(e)}catch(t){console.error(`[${this.options.loggerName??"Storage"}] Prime failed:`,t)}}storedData(){const t=this.options.storage.getItem(this.options.key);if(!t)return;const e=JSON.parse(t),n=xi.safeParse(e);return n.success?n.data.data:e}save(t,e){let n;try{n=this.serialize(t)}catch(t){return console.error(`[${this.options.loggerName??"Storage"}] Save failed:`,t),Promise.resolve()}if(!this.options.sealing){try{this.write(n,e)}catch(t){console.error(`[${this.options.loggerName??"Storage"}] Save failed:`,t)}return Promise.resolve()}return this.enqueue(async()=>{this.write(await this.seal(n),e)})}update(t,e){return this.enqueue(async()=>{await this.prime();const n=t(this.load());void 0!==n&&this.write(await this.seal(this.serialize(n)),e)})}clear(){const t=()=>{this.options.storage.removeItem(this.options.key),this.notifySameWindow()};return this.options.sealing?this.enqueue(async()=>t()):(t(),Promise.resolve())}serialize(t){return this.options.serializer?t.map(this.options.serializer):t}seal(t){return this.options.sealing?this.options.sealing.seal(t,this.storedData()):Promise.resolve(t)}write(t,e){const n={version:this.options.currentVersion,data:t};this.options.storage.setItem(this.options.key,JSON.stringify(n)),this.notifySameWindow(e?.noRepublish)}enqueue(t){const e=this.options.key,n=(Ci.get(e)??Promise.resolve()).then(()=>async function(t,e){if("undefined"==typeof navigator||!navigator.locks)return e();let n=!1;try{await navigator.locks.request(`swarm-id-storage-write-${t}`,{mode:"exclusive"},()=>(n=!0,e()))}catch(t){if(n)throw t;await e()}}(e,t)),r=n.catch(t=>{console.error(`[${this.options.loggerName??"Storage"}] Save failed:`,t)});return Ci.set(e,r),n}}const Pi="sealed:v1:",Ei="wrapping-keys",$i="at-rest-v1";function Di(){return new Promise((t,e)=>{let n=!1;const r=t=>{n||(n=!0,clearTimeout(i),e(t))},i=setTimeout(()=>r(new Error("IndexedDB open timed out")),1e4),s=indexedDB.open("swarm-id-keys",1);s.onupgradeneeded=()=>{s.result.objectStoreNames.contains(Ei)||s.result.createObjectStore(Ei)},s.onsuccess=()=>{n?s.result.close():(n=!0,clearTimeout(i),t(s.result))},s.onerror=()=>r(s.error),s.onblocked=()=>r(new Error("IndexedDB open was blocked"))})}function Bi(){return{async get(){const t=await Di();try{const n=t.transaction(Ei,"readonly").objectStore(Ei);return await(e=n.get($i),new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error)}))}finally{t.close()}var e},async getOrAdd(t){const e=await Di();try{return await new Promise((n,r)=>{const i=e.transaction(Ei,"readwrite"),s=i.objectStore(Ei);let a=t;const o=s.get($i);o.onsuccess=()=>{o.result?a=o.result:s.add(t,$i)},i.oncomplete=()=>n(a),i.onerror=()=>r(i.error),i.onabort=()=>r(i.error)})}finally{e.close()}}}}function Ti(){let t;return{get:async()=>t,getOrAdd:async e=>(t??(t=e),t)}}let Oi,Mi;function Ri(){return Oi??(Oi=async function(){if("undefined"==typeof indexedDB)return{store:Ti(),standsIn:!1};if(!indexedDB)return{store:Ti(),standsIn:!0};try{return(await Di()).close(),{store:Bi(),standsIn:!1}}catch{return{store:Ti(),standsIn:!0}}}()),Oi}function Fi(){return Mi??(Mi=(async()=>{const{store:t}=await Ri(),e=await t.get();if(e)return e;const n=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return t.getOrAdd(n)})()),Mi.catch(()=>{Mi=void 0}),Mi}const qi=new Map,Li=new Map,Ki=new Map;function Ni(t){return"string"==typeof t&&t.startsWith(Pi)}async function Hi(t){const e=Li.get(t);if(e)return e;const n=await Fi(),r=crypto.getRandomValues(new Uint8Array(12)),i=new Uint8Array(await crypto.subtle.encrypt({name:"AES-GCM",iv:r},n,(new TextEncoder).encode(t))),s=`${Pi}${fe(r)}${fe(i)}`;return Li.set(t,s),qi.set(s,t),s}const Wi=new Set;async function ji(t){let e;try{e=await Fi()}catch{return void Wi.add(t)}try{const n=ye(t.slice(10)),r=(new TextDecoder).decode(await crypto.subtle.decrypt({name:"AES-GCM",iv:n.slice(0,12)},e,n.slice(12)));qi.set(t,r),Li.set(r,t)}catch{(await Ri()).standsIn&&Wi.add(t)}}function zi(t){return Wi.has(t)}async function Gi(t){const e=[];for(const n of t){if(!Ni(n)||qi.has(n))continue;let t=Ki.get(n);t||(t=ji(n).finally(()=>Ki.delete(n)),Ki.set(n,t)),e.push(t)}await Promise.all(e)}function Vi(t){return qi.get(t)}const Ji={AppSliceFullError:"upload-unavailable",PartitionContendedError:"partition-contended",PartitionLeaseLostError:"lease-lost",ReservedSlotError:"invalid-request",TimeoutError:"timeout"},Zi={AppSliceFullError:"app-slice-full"};function Yi(t){try{return new URL(t).pathname}catch{return}}function _i(t,e){if(t instanceof we)return t.toWire();if(!(t instanceof Error))return{error:e,code:"internal"};const n={error:t.message,code:"internal"};if(t instanceof ut){n.code="bee-rejected",void 0!==t.status&&(n.status=t.status);const e=function(t){if("string"==typeof t)return t||void 0;if(t&&"object"==typeof t&&"message"in t){const{message:e}=t;if("string"==typeof e)return e}}(t.responseBody);void 0!==e&&(n.beeMessage=e);const r=Yi(t.url);void 0!==r&&(n.url=r)}else if("SocUploadError"===t.name){const{status:e,body:r}=t;n.code="bee-rejected",n.status=e,n.beeMessage=r}else if(t.name in Ji){n.code=Ji[t.name];const e=Zi[t.name];void 0!==e&&(n.reason=e)}else t instanceof ge?n.code="invalid-request":t instanceof TypeError&&/fetch/i.test(t.message)&&(n.code="network");return n}class Qi{constructor(t,e){this.beeUrl=t,this.options=e,this.pendingAcks=[],this.closed=!1,this.concurrency=e?.concurrency??32}getConcurrency(){return this.concurrency}open(){return new Promise((t,e)=>{const n=this.buildWsUrl();this.ws=new WebSocket(n),this.ws.binaryType="arraybuffer",this.ws.onopen=()=>{t()},this.ws.onerror=()=>{const t="WebSocket connection error";this.errorMessage=t,this.rejectAllPending(new Error(t)),e(new Error(t))},this.ws.onmessage=()=>{const t=this.pendingAcks.shift();t&&(clearTimeout(t.timer),t.resolve())},this.ws.onclose=t=>{if(!this.closed){const e=`WebSocket closed unexpectedly: ${t.code} ${t.reason}`;this.errorMessage=e,this.rejectAllPending(new Error(e))}}})}async uploadChunk(t){if(!this.ws||this.ws.readyState!==WebSocket.OPEN)throw new Error(this.errorMessage??"WebSocket is not open");for(;this.pendingAcks.length>=this.concurrency;)await this.waitForAck();return new Promise((e,n)=>{const r=setTimeout(()=>{n(new Error("WebSocket chunk ack timeout"))},9e5);this.pendingAcks.push({resolve:e,reject:n,timer:r});try{this.ws.send(t)}catch(t){this.pendingAcks.pop(),clearTimeout(r),n(t instanceof Error?t:new Error("WebSocket send failed"))}})}async close(){for(;this.pendingAcks.length>0;)await this.waitForAck();this.closed=!0,this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.close()}buildWsUrl(){let t=this.beeUrl;t.startsWith("https://")?t="wss://"+t.slice(8):t.startsWith("http://")&&(t="ws://"+t.slice(7)),t.endsWith("/")&&(t=t.slice(0,-1));let e=t+"/chunks/stream";return this.options?.tag&&(e+=`?swarm-tag=${this.options.tag}`),e}waitForAck(){const t=this.pendingAcks[0];return t?new Promise((e,n)=>{const r=t.resolve;t.resolve=()=>{r(),e()};const i=t.reject;t.reject=t=>{i(t),n(t)}}):Promise.resolve()}rejectAllPending(t){for(const e of this.pendingAcks)clearTimeout(e.timer),e.reject(t);this.pendingAcks=[]}}const Xi=new WeakMap;async function ts(t){if(!Xi.get(t))try{return(await t.tag.create()).uid}catch(e){const n=function(t,e){return"object"==typeof t&&null!==t&&t.status===e}(e,404);return n&&Xi.set(t,!0),void console.warn("[tryCreateTag] Tag creation failed — proceeding without tag"+(n?" (node does not support tags; cached, will not retry on this node)":" (transient; will re-probe on the next upload)"))}}class es extends Error{constructor(t,e,n){super(`SOC upload failed: ${t} ${e} - ${n}`),this.name="SocUploadError",this.status=t,this.body=n}}function ns(t){return"stamper"===t.mode}function rs(t){return"subsidised"===t.mode}function is(t,e){return e?t=>e.stampChunkData(t):e=>Promise.resolve(t.stamp(e))}async function ss(t,e,n,r,i,s){const a=await e(r);await t.chunk.upload(a,n,i,s)}function as(t,e){const n=t.requestOptions;return{...n?.headers,...e?.headers}}async function os(t,e,n){const r=`${ve(t)}/chunks`,i={"content-type":"application/octet-stream"};void 0!==n?.deferred&&(i["swarm-deferred-upload"]=n.deferred.toString());const s=await fetch(r,{method:"POST",headers:i,body:e});if(!s.ok){const t=await s.text();throw new we("bee-rejected",`Subsidised chunk upload failed: ${s.status} ${s.statusText} - ${t}`,{status:s.status,beeMessage:t,url:Yi(s.url)})}return{reference:(await s.json()).reference}}async function cs(t,e,n,r,i,s,a=ke){let o=0;await Promise.all(Array.from({length:Math.min(a,n.length)},()=>(async()=>{for(;o<n.length;){const a=n[o++];await ss(t,e,a.data,a.address,r,i),s(a.address)}})()))}async function ds(t,e,n,r){const i=await t(r),a=s.Binary.concatBytes(y(i).toUint8Array(),n);await e.uploadChunk(a)}async function us(t,e,n,r){let i=0;const s=e.getConcurrency();await Promise.all(Array.from({length:s},()=>(async()=>{for(;i<n.length;){const s=n[i++];await ds(t,e,s.data,s.address),r(s.address)}})()))}async function ls(t,e){if(1===t.length)return new m(t[0].address);const n=[];for(let r=0;r<t.length;r+=128){const i=t.slice(r,Math.min(r+128,t.length));if(1===i.length){n.push(i[0]);continue}const s=new Uint8Array(32*i.length);i.forEach((t,e)=>{s.set(t.address,32*e)});const a=i.reduce((t,e)=>t+(e.span??0n),0n),o=be(s,a);n.push({address:o.address.toUint8Array(),span:a}),await e(o)}return n.length>1?ls(n,e):new m(n[0].address)}async function hs(t,e){if(1===t.length){const e=new Uint8Array(64);return e.set(t[0].address,0),e.set(t[0].key,32),new m(e)}const n=[];for(let r=0;r<t.length;r+=64){const i=t.slice(r,Math.min(r+64,t.length));if(1===i.length){n.push(i[0]);continue}const a=i.reduce((t,e)=>t+e.span,0n),o=new Uint8Array(4096);i.forEach((t,e)=>{o.set(t.address,64*e),o.set(t.key,64*e+32)});const c=N.fromBigInt(a).toUint8Array(),d=s.Binary.concatBytes(c,o),u=xe(),{key:l,encryptedSpan:h,encryptedData:p}=u.encryptChunk(d),f=s.Binary.concatBytes(h,p),y=await Se(f);await e(f),n.push({address:y.toUint8Array(),key:l,span:a})}if(n.length>1)return hs(n,e);const r=new Uint8Array(64);return r.set(n[0].address,0),r.set(n[0].key,32),new m(r)}async function ps(t,e,n){return void 0!==n?.encryptionKey?async function(t,e,n){const r=!0===n?.encryptionKey?void 0:n?.encryptionKey,i=yi(e),{chunks:s,refs:a}=function(t,e){if(e&&t.length>1)throw new Error(`Explicit encryption key is only supported for single-chunk data (up to 4096 bytes), got ${t.length} chunks — pass encryptionKey: true to auto-generate per-chunk keys`);const n=[],r=[];for(const i of t){const t=me(i,e);n.push(t),r.push({address:t.address.toUint8Array(),key:t.encryptionKey,span:BigInt(i.length)})}return{chunks:n,refs:r}}(i,r),o=s.map(t=>({data:t.data,address:t.address.toUint8Array()}));let c=s.length,d=0;const u=[],l=t=>{u.push(t),d++,n?.onProgress?.({total:c,processed:d})};if(rs(t)){const e={deferred:n?.deferred};for(const n of o)await os(t.gatewayUrl,n.data,e),l(n.address);return{reference:(await hs(a,async r=>{await os(t.gatewayUrl,r,e);const i=await Se(r);u.push(i.toUint8Array()),c++,d++,n?.onProgress?.({total:c,processed:d})})).toHex(),chunkAddresses:u}}{const{bee:e,stamper:r,workerPool:i}=t,s=n?.tag??await ts(e),h={...n,tag:s,deferred:n?.deferred??!1},p=is(r,i);let f;n?.webSocket&&(f=new Qi(e.url,{tag:s,concurrency:n.webSocket.concurrency}),await f.open());try{f?await us(p,f,o,l):await cs(e,p,o,h,n?.requestOptions,l,n?.httpConcurrency);return{reference:(await hs(a,async t=>{const r=await Se(t);u.push(r.toUint8Array()),f?await ds(p,f,t,r.toUint8Array()):await ss(e,p,t,r.toUint8Array(),h,n?.requestOptions),c++,d++,n?.onProgress?.({total:c,processed:d})})).toHex(),tagUid:s,chunkAddresses:u}}finally{f&&await f.close()}}}(t,e,n):async function(t,e,n){const r=yi(e),i=[],s=[];for(const t of r){const e=be(t);i.push(e),s.push({address:e.address.toUint8Array(),span:BigInt(t.length)})}let a=i.length,o=0;const c=()=>n?.onProgress?.({total:a,processed:o});if(rs(t)){const e={deferred:n?.deferred};for(const n of i)await os(t.gatewayUrl,n.data,e),o++,c();let r;return r=1===s.length?new m(s[0].address):await ls(s,async n=>{await os(t.gatewayUrl,n.data,e),a++,o++,c()}),{reference:r.toHex()}}{const{bee:e,stamper:r,workerPool:d}=t,u=n?.tag??await ts(e),l={...n,tag:u,deferred:n?.deferred??!1},h=is(r,d);for(const t of i)await ss(e,h,t.data,t.address.toUint8Array(),l,n?.requestOptions),o++,c();let p;return p=1===s.length?new m(s[0].address):await ls(s,async t=>{await ss(e,h,t.data,t.address.toUint8Array(),l,n?.requestOptions),a++,o++,c()}),{reference:p.toHex(),tagUid:u}}}(t,e,n)}async function fs(t,e,n,r,i){if(r.length<1||r.length>4096)throw new we("invalid-request",`Invalid data length: ${r.length} (expected 1-4096)`);let a,o,c;if(void 0!==i?.encryptionKey){const t=!0===i.encryptionKey?void 0:i.encryptionKey,e=me(r,t);a=e.address.toUint8Array(),o=e.data,c=e.encryptionKey}else{const t=be(r);a=t.address.toUint8Array(),o=t.data}const d=e.publicKey().address(),u=s.Binary.concatBytes(n.toUint8Array(),a),l=e.sign(u),h=s.Binary.keccak256(s.Binary.concatBytes(n.toUint8Array(),d.toUint8Array()));if(rs(t)){const e=`${ve(t.gatewayUrl)}/soc/${d.toHex()}/${n.toHex()}?sig=${l.toHex()}`,r={"content-type":"application/octet-stream"};void 0!==i?.deferred&&(r["swarm-deferred-upload"]=i.deferred.toString());const s=await fetch(e,{method:"POST",headers:r,body:o});if(!s.ok){const t=await s.text();throw new es(s.status,`${s.statusText} (subsidised)`,t)}return{socAddress:h,encryptionKey:c}}{const{bee:e,stamper:r}=t,s=i?.tag??await ts(e),a=r.stamp(h),u=y(a).toHex(),p=`${e.url}/soc/${d.toHex()}/${n.toHex()}?sig=${l.toHex()}`,f={...as(e,i?.requestOptions),"content-type":"application/octet-stream","swarm-postage-stamp":u};s&&(f["swarm-tag"]=s.toString()),void 0!==i?.deferred&&(f["swarm-deferred-upload"]=i.deferred.toString()),void 0!==i?.pin&&(f["swarm-pin"]=i.pin.toString());const w=await fetch(p,{method:"POST",headers:f,body:o,signal:i?.requestOptions?.signal});if(!w.ok){const t=await w.text();throw new es(w.status,w.statusText,t)}return{socAddress:h,encryptionKey:c,tagUid:s}}}async function ys(t,e,n){if(rs(t))return os(t.gatewayUrl,e,{deferred:n?.deferred});{const{bee:r,stamper:i}=t,s=await Se(e),a=is(i);return await ss(r,a,e,s.toUint8Array(),{deferred:n?.deferred??!1,pin:n?.pin,tag:n?.tag},n?.requestOptions),{reference:fe(s.toUint8Array())}}}function ws(t,e){const n=s.Binary.keccak256((new TextEncoder).encode(`swarm-id-partition-lock-v1:${t.toHex()}:${e}`));return new x(n)}function gs(t,e,n){const r=ws(t,e);return s.Binary.keccak256(s.Binary.concatBytes(r.toUint8Array(),n.toUint8Array()))}function ms(t,e,n){const r=gs(t,e,n);return r[0]<<8|r[1]}const bs=2500,vs=3e4,Ss=vs;class ks extends Error{constructor(t="Partition lease was reclaimed by another device."){super(t),this.name="PartitionLeaseLostError"}}class xs extends Error{constructor(t="This chunk address belongs to the account's own bookkeeping and cannot be stamped for an app."){super(t),this.name="ReservedSlotError"}}class Is extends Error{constructor(t="This bucket's share for app stamps is used up. The rest of it is kept for the account's own uploads."){super(t),this.name="AppSliceFullError"}}const As=65536,Cs=16,Us=2,Ps=1e4,Es=4096;function $s(t){const e=t<=31?2:4,n=Es/e;return{counterByteSize:e,bucketsPerChunk:n,numUtilizationChunks:As/n}}function Ds(t){if(t.length<2)throw new Error("Chunk address must be at least 2 bytes");return t[0]<<8|t[1]}function Bs(t,e){if(t<0||t>=As)throw new Error(`Invalid bucket index: ${t} (must be 0-65535)`);const{bucketsPerChunk:n}=$s(e);return Math.floor(t/n)}function Ts(t,e,n){const{counterByteSize:r,bucketsPerChunk:i,numUtilizationChunks:s}=$s(n);if(e<0||e>=s)throw new Error(`Invalid chunk index: ${e} (must be 0-${s-1})`);const a=e*i,o=a+i,c=t.slice(a,o);return 2===r?Ns(c):Ks(c)}function Os(t,e,n,r){const{counterByteSize:i,bucketsPerChunk:s,numUtilizationChunks:a}=$s(r);if(e<0||e>=a)throw new Error(`Invalid chunk index: ${e} (must be 0-${a-1})`);if(n.length!==Es)throw new Error(`Invalid chunk data length: ${n.length} (expected 4096)`);const o=2===i?function(t){if(t.length%2!=0)throw new Error("Byte array length must be a multiple of 2");const e=new Uint32Array(t.length/2),n=new DataView(t.buffer,t.byteOffset,t.byteLength);for(let t=0;t<e.length;t++)e[t]=n.getUint16(2*t,!0);return e}(n):function(t){if(t.length%4!=0)throw new Error("Byte array length must be a multiple of 4");const e=new Uint32Array(t.length/4),n=new DataView(t.buffer,t.byteOffset,t.byteLength);for(let t=0;t<e.length;t++)e[t]=n.getUint32(4*t,!0);return e}(n);if(o.length!==s)throw new Error(`Invalid chunk counters length: ${o.length} (expected ${s})`);const c=e*s;t.set(o,c)}class Ms{constructor(t){this.dirtyChunks=new Set,this.batchDepth=t}markDirty(t){const e=Bs(t,this.batchDepth);this.dirtyChunks.add(e)}markClean(t){this.dirtyChunks.delete(t)}getDirtyChunks(){return Array.from(this.dirtyChunks).sort((t,e)=>t-e)}hasDirtyChunks(){return this.dirtyChunks.size>0}clear(){this.dirtyChunks.clear()}get count(){return this.dirtyChunks.size}}async function Rs(t,e,n,r){if(32!==t.length)throw new Error(`Invalid swarmEncryptionKey length: ${t.length} (expected 32)`);const i=(new TextEncoder).encode("swarm-id-util-chunk-v1"),a=e.toUint8Array(),o=new Uint8Array(4);new DataView(o.buffer).setUint32(0,n,!1);const c=new Uint8Array(4);new DataView(c.buffer).setUint32(0,r,!1);const d=s.Binary.concatBytes(i,a,o,c),u=await crypto.subtle.importKey("raw",t,{name:"HMAC",hash:"SHA-256"},!1,["sign"]),l=await crypto.subtle.sign("HMAC",u,d);return new Uint8Array(l)}async function Fs(t){const{swarmEncryptionKey:e,batchId:n,chunkIndex:r,plaintext:i,claimedBuckets:s}=t;let a=t.priorNonce;for(;;){const t=await Rs(e,n,r,a),o=me(i,t).address.toUint8Array(),c=Ds(o);if(!s.has(c))return s.add(c),{key:t,nonce:a,bucket:c,address:o};a++}}function qs(t){const e=new Set;for(const n of t.chunks)!n.dirty&&n.contentHash&&e.add(Ds(s.Binary.hexToUint8Array(n.contentHash)));return e}async function Ls(t,e,n,r){if(n.length<1||n.length>4096)throw new Error(`Invalid data length: ${n.length} (expected 1-4096)`);if(32!==r.length)throw new Error(`Invalid encryption key length: ${r.length} (expected 32)`);const i=me(n,r),s=i.address.toUint8Array(),a=await ts(t),o={mode:"stamper",bee:t,stamper:e};return await ys(o,i.data,{deferred:!1,tag:a}),s}function Ks(t){const e=new ArrayBuffer(4*t.length),n=new DataView(e);for(let e=0;e<t.length;e++)n.setUint32(4*e,t[e],!0);return new Uint8Array(e)}function Ns(t){const e=new ArrayBuffer(2*t.length),n=new DataView(e);for(let e=0;e<t.length;e++){const r=t[e];if(r>65535)throw new Error(`Counter at index ${e} (${r}) exceeds uint16 range; use uint32 codec`);n.setUint16(2*e,r,!0)}return new Uint8Array(e)}function Hs(t){return Math.pow(2,t-16)}function Ws(t,e,n=2){return t<zs(e,n)}function js(t,e,n){return n+t+n*e}function zs(t,e){const n=Hs(t);return Math.floor(n/e)-1}const Gs=(()=>{let t=16;for(;zs(t,2)<4;)t+=1;return t})();async function Vs(t,e,n,r){const i=await async function(t,e,n){const{cache:r}=n,{counterByteSize:i,bucketsPerChunk:s,numUtilizationChunks:a}=$s(e),o=await r.getAllChunks(t.toHex());if(o.length===a)try{const n=new Uint32Array(As),r=[];for(const t of o)Os(n,t.chunkIndex,t.data,e),r.push({index:t.chunkIndex,contentHash:t.contentHash,lastUpload:t.lastAccess,dirty:!1,nonce:t.nonce});return{batchId:t,batchDepth:e,dataCounters:n,chunks:r,lastSync:Date.now()}}catch(t){console.warn("[BatchUtil] Failed to reconstruct from cache:",t)}const c=new Uint32Array(As),d=[],u=new Uint32Array(s),l=2===i?Ns(u):Ks(u);for(let t=0;t<a;t++){const n=o.find(e=>e.chunkIndex===t);n?(Os(c,t,n.data,e),d.push({index:t,contentHash:n.contentHash,lastUpload:n.lastAccess,dirty:!1,nonce:n.nonce})):(Os(c,t,l,e),d.push({index:t,contentHash:"",lastUpload:0,dirty:!0,nonce:0}))}return{batchId:t,batchDepth:e,dataCounters:c,chunks:d,lastSync:Date.now()}}(t,n,r),s=new Ms(n);for(const t of e){const e=Ds(t.address.toUint8Array()),r=i.dataCounters[e];if(!Ws(r,n))throw new Error(`Bucket ${e} is full (slot ${r})`);i.dataCounters[e]++,s.markDirty(e)}const a=s.getDirtyChunks();for(const t of a)i.chunks[t].dirty=!0;return{state:i,tracker:s}}class Js{get buckets(){return this.utilizationState.dataCounters.map(t=>js(this.partition??0,t,this.partitionCountValue))}get currentPartition(){return this.partition}get partitionCount(){return this.partitionCountValue}getLocalCounter(){return void 0!==this.partition?this.utilizationState.dataCounters:void 0}getLockSocBuckets(){const t=new Set;for(const e of this.lockSocs??[])t.add(Ds(e.address));return t}getProtectedBuckets(){const t=new Set(this.getLockSocBuckets()),e=this.protectedStateBuckets.get(this.partition??0);for(const n of e??[])t.add(n);return t}getCleanChunkBuckets(){return qs(this.utilizationState)}async setProtectedStateBuckets(t,e){this.protectedStateBuckets.set(t,new Set(e));const n=this.batchId.toHex(),r=await this.cache.getMetadata(n);await this.cache.putMetadata({batchId:n,lastSync:r?.lastSync??Date.now(),chunkCount:r?.chunkCount??0,syncedReferences:r?.syncedReferences,stateChunkBuckets:{...r?.stateChunkBuckets??{},[t]:e}})}bindPartition(t){if(t.localCounter.length!==As)throw new Error(`localCounter must have 65536 entries, got ${t.localCounter.length}`);this.partition=t.partition,this.partitionCountValue=t.partitionCount,this.utilizationState.dataCounters=t.localCounter,this.leaseStale=!1,this.leaseValidUntil=void 0}bindLockSocs(t){this.lockSocs=t}markReservedUtilizationChunk(t,e){this.reservedUtilizationChunks||(this.reservedUtilizationChunks=new Map),this.reservedUtilizationChunks.set(fe(t),e??this.partition??0)}clearReservedUtilizationChunks(){this.reservedUtilizationChunks=void 0}reserveIntentSocSlot(t,e){this.intentSoc={addressHex:fe(t),slot:e}}clearIntentSocSlot(){this.intentSoc=void 0}async withIntentSocSlot(t,e,n){const r=this.intentSocLock;let i;this.intentSocLock=new Promise(t=>i=t),await r;try{return this.reserveIntentSocSlot(t,e),await n()}finally{this.clearIntentSocSlot(),i()}}unbindPartition(){this.partition=void 0,this.partitionCountValue=1,this.leaseValidUntil=void 0}invalidateLease(){void 0!==this.partition&&(this.leaseStale=!0)}setLeaseValidUntil(t){this.leaseValidUntil=t}leaseLocallyLapsed(){return void 0!==this.leaseValidUntil&&this.now()>=this.leaseValidUntil-2e3}constructor(t,e,n,r,i,s,a){this.dirty=!1,this.dirtyBuckets=new Set,this.partition=void 0,this.partitionCountValue=1,this.lockSocs=void 0,this.reservedUtilizationChunks=void 0,this.intentSoc=void 0,this.intentSocLock=Promise.resolve(),this.leaseStale=!1,this.leaseValidUntil=void 0,this.protectedStateBuckets=new Map,this.signer=t,this.batchId=e,this.depth=n,this.maxSlot=Hs(n),this.cache=r,this.encryptionKey=i,this.utilizationState=s,this.now=a}static async create(t,e,n,r,i,s,a=()=>Date.now()){const o=function(t,e){const n=new Uint32Array(As),{numUtilizationChunks:r}=$s(e),i=[];for(let t=0;t<r;t++)i.push({index:t,contentHash:"",lastUpload:0,dirty:!0,nonce:0});return{batchId:t,batchDepth:e,dataCounters:n,chunks:i,lastSync:Date.now()}}(e,n);try{const t=await r.getAllChunks(e.toHex()),{numUtilizationChunks:i}=$s(n);for(const e of t)e.chunkIndex>=i||Os(o.dataCounters,e.chunkIndex,e.data,n)}catch(t){console.warn("[UtilizationAwareStamper] Failed to load state from cache, starting with fresh state:",t)}const c=new Js(new I(t),e,n,r,s,o,a);try{const t=await(r.getMetadata?.(e.toHex()));for(const[e,n]of Object.entries(t?.stateChunkBuckets??{}))c.protectedStateBuckets.set(Number(e),new Set(n))}catch(t){console.warn("[UtilizationAwareStamper] Failed to restore protected state buckets:",t)}const d=fe(s),u=await Ie(d,Ce),l=new I(u).publicKey().address();return c.lockSocs=Array.from({length:2},(t,n)=>({partition:n,address:gs(e,n,l)})),c}reservedSlotFor(t){const e=this.lockSocs?.find(e=>s.Binary.equals(e.address,t));if(e)return e.partition;const n=fe(t),r=this.reservedUtilizationChunks?.get(n);return void 0!==r?r:this.intentSoc?.addressHex===n?this.intentSoc.slot:void 0}requireLiveLease(){if(this.leaseStale||void 0!==this.partition&&this.leaseLocallyLapsed())throw new ks}assignSlot(t){const e=this.reservedSlotFor(t);if(void 0!==e)return e;this.requireLiveLease();const n=Ds(t),r=js(this.partition??0,this.utilizationState.dataCounters[n],this.partitionCountValue);if(r>=this.maxSlot)throw new Error("Bucket is full");return this.utilizationState.dataCounters[n]++,this.dirtyBuckets.add(n),this.dirty=!0,r}stamp(t,e){return Ae(this.signer,this.batchId,t,this.assignSlot(t),e)}stampDataChunk(t,e){if(void 0!==this.reservedSlotFor(t))throw new xs;const n=Ds(t);if(this.utilizationState.dataCounters[n]>=this.appSliceCapacity())throw new Is;return this.stamp(t,e)}isOwnDataSlot(t,e){if(void 0!==this.reservedSlotFor(t))return!1;const n=this.partitionCountValue,r=e-js(this.partition??0,0,n);if(r<0||r%n!==0)return!1;return r/n<this.utilizationState.dataCounters[Ds(t)]}restampDataChunk(t,e,n){if(void 0!==this.reservedSlotFor(t))throw new xs;if(this.requireLiveLease(),!this.isOwnDataSlot(t,e))throw new Error(`Slot ${e} is not a slot this device took in this chunk's bucket.`);return Ae(this.signer,this.batchId,t,e,n)}laneCapacity(){return zs(this.depth,this.partitionCountValue)}appSliceCapacity(){return Math.floor(.5*this.laneCapacity())}getState(){return this.buckets}async flush(){if(!this.dirty)return;const t=new Set;for(const e of this.dirtyBuckets){const n=Bs(e,this.depth);t.add(n),this.utilizationState.chunks[n].dirty=!0}try{const e=qs(this.utilizationState);for(const t of this.lockSocs??[])e.add(Ds(t.address));for(const t of this.protectedStateBuckets.get(this.partition??0)??[])e.add(t);const n=Array.from(t).sort((t,e)=>t-e);for(const t of n){const n=Ts(this.utilizationState.dataCounters,t,this.depth),r=await Fs({swarmEncryptionKey:this.encryptionKey,batchId:this.batchId,chunkIndex:t,plaintext:n,priorNonce:this.utilizationState.chunks[t].nonce,claimedBuckets:e}),i=s.Binary.uint8ArrayToHex(r.address);await this.cache.putChunk({batchId:this.batchId.toHex(),chunkIndex:t,data:n,contentHash:i,nonce:r.nonce,lastAccess:Date.now()}),this.utilizationState.chunks[t].contentHash=i,this.utilizationState.chunks[t].nonce=r.nonce,this.utilizationState.chunks[t].dirty=!1}this.utilizationState.lastSync=Date.now()}catch(t){throw console.error("[UtilizationAwareStamper] Failed to flush to cache:",t),t}this.dirtyBuckets.clear(),this.dirty=!1}getUtilizationState(){return this.utilizationState}applyUtilizationUpdate(t){for(const{index:e,value:n}of t)e>=0&&e<As&&n>this.utilizationState.dataCounters[e]&&(this.utilizationState.dataCounters[e]=n)}buildLeaseLocalCounter(){return this.utilizationState.dataCounters.slice()}async getSyncedReference(t){const e=await this.cache.getMetadata(this.batchId.toHex());return e?.syncedReferences?.[t]}async setSyncedReference(t,e){const n=this.batchId.toHex(),r=await this.cache.getMetadata(n);await this.cache.putMetadata({batchId:n,lastSync:r?.lastSync??Date.now(),chunkCount:r?.chunkCount??0,syncedReferences:{...r?.syncedReferences??{},[t]:e},stateChunkBuckets:r?.stateChunkBuckets})}getBucketUpdatesForBroadcast(){return Array.from(this.dirtyBuckets).map(t=>({index:t,value:this.utilizationState.dataCounters[t]}))}}const Zs=t=>{const e=ce(pe()).safeParse(t);if(!e.success)return console.error("Parse failed:",e.error.format()),[];const n=[];for(const t of e.data)try{const e=De.safeParse(t);if(!e.success){console.error("Skipping invalid account record:",e.error.format());continue}n.push(e.data)}catch(t){console.error("Skipping invalid account record:",t)}return n.map(t=>!$e(t)&&void 0===t.partitionCount&&t.devices.length>0?{...t,partitionCount:2}:t)};function Ys(t){return{id:t.id.toString(),name:t.name,createdAt:t.createdAt,derivationKey:t.derivationKey,publicKey:t.publicKey,defaultPostageStampBatchID:t.defaultPostageStampBatchID?.toString(),devices:t.devices,connectedApps:t.connectedApps.map(t=>Xs(Qs(t))),postageStamps:t.postageStamps.map(ta),settings:t.settings,accountNameAt:t.accountNameAt,defaultStampAt:t.defaultStampAt,settingsAt:t.settingsAt,lastModified:t.lastModified,partitionCount:t.partitionCount}}function _s(t){return $e(t)?{id:t.id.toString(),name:t.name,createdAt:t.createdAt,access:t.access,encryptedSeed:t.encryptedSeed,encryptedState:t.encryptedState,storageWarning:t.storageWarning,soonestDriveExpiry:t.soonestDriveExpiry,signedOutAt:t.signedOutAt}:{...Ys(t),connectedApps:t.connectedApps.map(Qs),access:t.access,encryptedSeed:t.encryptedSeed}}function Qs(t){return{appUrl:t.appUrl,appName:t.appName,lastConnectedAt:t.lastConnectedAt,appIcon:t.appIcon,appDescription:t.appDescription,connectedUntil:t.connectedUntil,appSecret:t.appSecret,postageStampBatchID:t.postageStampBatchID?.toString(),postageStampBatchIDAt:t.postageStampBatchIDAt,stampPending:t.stampPending,revokedAt:t.revokedAt,disconnectedAt:t.disconnectedAt,chatBinding:t.chatBinding}}function Xs(t){const{appSecret:e,connectedUntil:n,stampPending:r,...i}=t;return i}function ta(t){return{batchID:t.batchID.toString(),signerKey:t.signerKey.toString(),name:t.name,nameUpdatedAt:t.nameUpdatedAt,utilization:t.utilization,usable:t.usable,depth:t.depth,amount:t.amount.toString(),bucketDepth:t.bucketDepth,blockNumber:t.blockNumber,immutableFlag:t.immutableFlag,exists:t.exists,batchTTL:t.batchTTL,createdAt:t.createdAt,updatedAt:t.updatedAt,deletedAt:t.deletedAt}}function ea(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)}function na(t){return Array.isArray(t)?t.filter(ea):[]}function ra(t){return void 0===t.signedOutAt}function ia(t){return ra(t)?[t.derivationKey,...na(t.connectedApps).map(t=>t.appSecret),...na(t.postageStamps).map(t=>t.signerKey)].filter(t=>void 0!==t):[]}function sa(t){if(!ra(t))return t;const e=t=>Ni(t)?Vi(t):void 0;if(ia(t).some(t=>void 0===e(t)))return function(t){return{id:t.id,name:t.name,createdAt:t.createdAt,access:t.access,encryptedSeed:t.encryptedSeed,signedOutAt:Date.now()}}(t);const n=t=>void 0===t?void 0:e(t);return{...t,derivationKey:n(t.derivationKey),connectedApps:na(t.connectedApps).map(t=>void 0===t.appSecret?t:{...t,appSecret:n(t.appSecret)}),postageStamps:na(t.postageStamps).map(t=>({...t,signerKey:n(t.signerKey)}))}}async function aa(t,e){const n=e.get(t.id),r=void 0!==n&&function(t){return ia(t).some(t=>Ni(t)&&zi(t))}(n);if(!ra(t))return r?n:t;if(r&&await async function(){return(await Ri()).standsIn}())throw new Error("This page cannot keep keys for a later visit, and the stored keys may still open on one");return async function(t,e){const n=async t=>"string"==typeof t?e(t):t;return{...t,derivationKey:await n(t.derivationKey),connectedApps:await Promise.all(na(t.connectedApps).map(async t=>void 0===t.appSecret?t:{...t,appSecret:await n(t.appSecret)})),postageStamps:await Promise.all(na(t.postageStamps).map(async t=>({...t,signerKey:await n(t.signerKey)})))}}(t,Hi)}const oa={seal:(t,e)=>{const n=new Map(na(e).map(t=>[t.id,t]));return Promise.all(t.map(t=>aa(t,n)))},open:t=>Array.isArray(t)?t.map(t=>ea(t)?sa(t):t):t,prime:t=>Gi(na(t).flatMap(ia).filter(t=>Ni(t)))};function ca(){return t={key:Ee,currentVersion:1,parsers:{1:Zs},serializer:_s,loggerName:"AccountsStorage",sealing:oa},new Ui({...t,storage:new Ii});var t}function da(){return{load(){if("undefined"==typeof localStorage)return;const t=localStorage.getItem(Ue);if(t)try{return function(t){const e=Pe.safeParse(t);if(e.success)return e.data;console.error("[NetworkSettingsStorage] Parse failed:",e.error.format())}(JSON.parse(t))}catch(t){return void console.error("[NetworkSettingsStorage] Failed to parse stored data:",t)}},save(t){if("undefined"==typeof localStorage)return void console.warn("[NetworkSettingsStorage] localStorage not available");const e=function(t){return{beeNodeUrl:t.beeNodeUrl,gnosisRpcUrl:t.gnosisRpcUrl}}(t);localStorage.setItem(Ue,JSON.stringify(e))},clear(){"undefined"!=typeof localStorage&&localStorage.removeItem(Ue)}}}function ua(t,e,n){return{version:1,timestamp:n,accountId:e,metadata:{accountName:t.name,defaultPostageStampBatchID:t.defaultPostageStampBatchID?.toHex(),publicKey:t.publicKey,settings:t.settings,accountNameAt:t.accountNameAt??t.createdAt,defaultStampAt:t.defaultStampAt??t.createdAt,settingsAt:t.settingsAt??t.createdAt,createdAt:t.createdAt,lastModified:n,devices:t.devices,partitionCount:t.partitionCount??1},connectedApps:t.connectedApps,postageStamps:t.postageStamps}}function la(t){return ha(ua(t,t.id.toHex(),Date.now()))}function ha(t){const e={version:1,timestamp:(n=t).timestamp,accountId:n.accountId,metadata:{accountName:n.metadata.accountName,defaultPostageStampBatchID:n.metadata.defaultPostageStampBatchID,publicKey:n.metadata.publicKey,settings:n.metadata.settings,accountNameAt:n.metadata.accountNameAt,defaultStampAt:n.metadata.defaultStampAt,settingsAt:n.metadata.settingsAt,createdAt:n.metadata.createdAt,lastModified:n.metadata.lastModified,devices:n.metadata.devices,partitionCount:n.metadata.partitionCount},connectedApps:n.connectedApps.map(Qs),postageStamps:n.postageStamps.map(ta)};var n;return{...e,connectedApps:e.connectedApps.map(t=>{const{chatBinding:e,...n}=Xs(t);return n})}}function pa(t,e){const n=new Map(e.map(t=>[t.appUrl,t]));return t.map(t=>{if(t.revokedAt)return t;const e=n.get(t.appUrl);return e?void 0!==t.disconnectedAt&&t.disconnectedAt>e.lastConnectedAt?t:{...t,appSecret:e.appSecret??t.appSecret,connectedUntil:e.connectedUntil??t.connectedUntil,stampPending:e.stampPending}:t})}async function fa(t){return{topic:await Ie(t,"swarm-id/account-bus/topic/v1"),encryptionKey:await Be(t,"swarm-id/account-bus/encryption/v1")}}const ya=2e4;class wa{constructor(){this.seen=new Map}observe(t,e,n){const r=this.seen.get(t)??{at:e,peers:new Set};r.at=e,void 0!==n&&r.peers.add(n),this.seen.set(t,r)}forgetPeer(t){for(const[e,n]of this.seen)n.peers.delete(t)&&0===n.peers.size&&this.seen.delete(e)}liveDeviceIds(t){const e=t-18e4;return[...this.seen].filter(([,t])=>t.at>=e).map(([t])=>t)}clear(){this.seen.clear()}}le("type",[se({type:oe("join"),topic:de()}),se({type:oe("relay"),to:de(),payload:de()}),se({type:oe("signal"),to:de(),payload:pe()})]);const ga=le("type",[se({type:oe("welcome"),peerId:de(),peers:ce(de())}),se({type:oe("peer-joined"),peerId:de()}),se({type:oe("peer-left"),peerId:de()}),se({type:oe("relay"),from:de(),payload:de()}),se({type:oe("signal"),from:de(),payload:pe()})]);async function ma(t,e){const n=crypto.getRandomValues(new Uint8Array(12)),r=(new TextEncoder).encode(t),i=await crypto.subtle.encrypt({name:"AES-GCM",iv:n},e,r),s=new Uint8Array(n.length+i.byteLength);return s.set(n,0),s.set(new Uint8Array(i),n.length),function(t){let e="";for(const n of t)e+=String.fromCharCode(n);return btoa(e)}(s)}async function ba(t,e){const n=function(t){const e=atob(t),n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t);return n}(t),r=n.slice(0,12),i=n.slice(12),s=await crypto.subtle.decrypt({name:"AES-GCM",iv:r},e,i);return(new TextDecoder).decode(s)}const va=le("kind",[se({kind:oe("offer"),sdp:de()}),se({kind:oe("answer"),sdp:de()}),se({kind:oe("ice"),candidate:pe()})]);function Sa(){return{remoteDescriptionSet:!1,pendingCandidates:[]}}class ka{constructor(t){this.local=!1,this.peers=new Map,this.handlers=new Set,this.peerLeftHandlers=new Set,this.closed=!1,this.reconnectDelayMs=1e3,this.pendingDeliveries=new Set,this.options=t,this.connect()}get peerCount(){return this.peers.size}publish(t){const e=this.deliver(t).catch(t=>{console.error("[SignalingTransport] Publish failed:",t)});this.pendingDeliveries.add(e),e.finally(()=>this.pendingDeliveries.delete(e))}subscribe(t){return this.handlers.add(t),()=>this.handlers.delete(t)}onPeerLeft(t){return this.peerLeftHandlers.add(t),()=>this.peerLeftHandlers.delete(t)}close(){this.closed=!0,void 0!==this.reconnectTimer&&clearTimeout(this.reconnectTimer),0!==this.pendingDeliveries.size?Promise.allSettled([...this.pendingDeliveries]).then(()=>this.shutdown()):this.shutdown()}shutdown(){this.handlers.clear(),this.peerLeftHandlers.clear();for(const t of this.peers.values())t.connection?.close();this.peers.clear(),this.socket?.close()}connect(){const t=new WebSocket(this.options.url);this.socket=t,t.addEventListener("open",()=>{this.sendToServer({type:"join",topic:this.options.topic})}),t.addEventListener("message",t=>{this.reconnectDelayMs=1e3,this.handleServerMessage(String(t.data))}),t.addEventListener("close",t=>{if(1008===t.code)return console.error("[SignalingTransport] Signaling server rejected the topic; not reconnecting."),void(this.closed=!0);this.scheduleReconnect()}),t.addEventListener("error",()=>{})}scheduleReconnect(){if(this.closed)return;for(const t of this.peers.values())t.connection?.close();this.peers.clear();const t=this.reconnectDelayMs/2+Math.random()*(this.reconnectDelayMs/2);this.reconnectTimer=setTimeout(()=>this.connect(),t),this.reconnectDelayMs=Math.min(2*this.reconnectDelayMs,3e4)}async deliver(t){if(0===this.peers.size)return;const e=await ma(JSON.stringify(t),this.options.encryptionKey);for(const[t,n]of this.peers){if("open"===n.dataChannel?.readyState)try{n.dataChannel.send(e);continue}catch(t){console.warn("[SignalingTransport] DataChannel send failed; relaying:",t)}this.sendToServer({type:"relay",to:t,payload:e})}}sendToServer(t){this.socket?.readyState===WebSocket.OPEN&&this.socket.send(JSON.stringify(t))}async handleServerMessage(t){let e;try{e=JSON.parse(t)}catch{return}const n=ga.safeParse(e);if(!n.success)return;const r=n.data;switch(r.type){case"welcome":for(const t of r.peers)this.peers.set(t,Sa()),this.initiatePeerConnection(t);return;case"peer-joined":return void this.peers.set(r.peerId,{remoteDescriptionSet:!1,pendingCandidates:[]});case"peer-left":{const t=this.peers.get(r.peerId);t?.connection?.close(),this.peers.delete(r.peerId);for(const t of this.peerLeftHandlers)t(r.peerId);return}case"relay":return void await this.receiveEnvelope(r.payload,r.from);case"signal":return void await this.handleSignal(r.from,r.payload)}}async receiveEnvelope(t,e){let n,r;try{n=await ba(t,this.options.encryptionKey)}catch{return}try{r=JSON.parse(n)}catch{return}for(const t of this.handlers)t(r,e)}async initiatePeerConnection(t){const e=this.options.createPeerConnection;if(e)try{const n=e(),r=this.peers.get(t);if(!r)return;this.adoptConnection(r,n),this.adoptDataChannel(n.createDataChannel("bus"),r,t),this.forwardIceCandidates(n,t);const i=await n.createOffer();await n.setLocalDescription(i),this.sendSignal(t,{kind:"offer",sdp:i.sdp??""})}catch(t){console.error("[SignalingTransport] WebRTC initiate failed:",t)}}async handleSignal(t,e){const n=this.options.createPeerConnection;if(!n)return;const r=va.safeParse(e);if(!r.success)return;const i=r.data,s=this.peers.get(t);if(s)try{if("offer"===i.kind){const e=n();this.adoptConnection(s,e),e.ondatachannel=e=>{this.adoptDataChannel(e.channel,s,t)},this.forwardIceCandidates(e,t),await e.setRemoteDescription({type:"offer",sdp:i.sdp}),await this.flushPendingCandidates(s,e);const r=await e.createAnswer();return await e.setLocalDescription(r),void this.sendSignal(t,{kind:"answer",sdp:r.sdp??""})}if("answer"===i.kind){const t=s.connection;if(!t)return;return await t.setRemoteDescription({type:"answer",sdp:i.sdp}),void await this.flushPendingCandidates(s,t)}if(!s.remoteDescriptionSet)return void s.pendingCandidates.push(i.candidate);await(s.connection?.addIceCandidate(i.candidate))}catch(t){console.error("[SignalingTransport] WebRTC signal failed:",t)}}adoptConnection(t,e){t.connection?.close(),t.connection=e,t.remoteDescriptionSet=!1,t.pendingCandidates=[]}async flushPendingCandidates(t,e){if(t.connection!==e)return;t.remoteDescriptionSet=!0;const n=t.pendingCandidates;t.pendingCandidates=[];for(const t of n)try{await e.addIceCandidate(t)}catch(t){console.warn("[SignalingTransport] ICE candidate rejected:",t)}}adoptDataChannel(t,e,n){e.dataChannel=t,t.onmessage=t=>{this.receiveEnvelope(String(t.data),n)}}forwardIceCandidates(t,e){t.onicecandidate=t=>{t.candidate&&this.sendSignal(e,{kind:"ice",candidate:t.candidate.toJSON()})}}sendSignal(t,e){this.sendToServer({type:"signal",to:t,payload:e})}}class xa{constructor(t=1e3){this.pendingUploads=new Map,this.defaultDelay=t}scheduleUpload(t,e,n,r){const i=r??this.defaultDelay,s=this.pendingUploads.get(t);s?.timerId&&(clearTimeout(s.timerId),s.promise.reject(new Error("Upload cancelled by new request")));const a=s?.tracker??e;if(s&&s.tracker!==e)for(const t of e.getDirtyChunks())a.markDirty(1024*t);return new Promise((e,r)=>{const s=setTimeout(async()=>{try{await n(),e()}catch(e){console.error(`[DebouncedUploader] Upload failed for batch ${t}:`,e),r(e instanceof Error?e:new Error(String(e)))}finally{this.pendingUploads.delete(t)}},i);this.pendingUploads.set(t,{tracker:a,timerId:s,uploadFn:n,promise:{resolve:e,reject:r}})})}async flush(t){const e=this.pendingUploads.get(t);if(e){e.timerId&&clearTimeout(e.timerId);try{await e.uploadFn()}finally{this.pendingUploads.delete(t)}}}async flushAll(){const t=Array.from(this.pendingUploads.keys());await Promise.all(t.map(t=>this.flush(t)))}cancel(t){const e=this.pendingUploads.get(t);e&&(e.timerId&&clearTimeout(e.timerId),this.pendingUploads.delete(t))}cancelAll(){for(const t of this.pendingUploads.values())t.timerId&&clearTimeout(t.timerId);this.pendingUploads.clear()}getPendingCount(){return this.pendingUploads.size}hasPending(t){return this.pendingUploads.has(t)}}const Ia="AES-GCM",Aa=6e5,Ca="swarm-id-seed-encryption-v1";function Ua(){const t=new Uint8Array(32);return crypto.getRandomValues(t),t}async function Pa(t,e){const n=new Uint8Array(12);crypto.getRandomValues(n);const r=await crypto.subtle.encrypt({name:Ia,iv:n},e,t),i=new Uint8Array(12+r.byteLength);return i.set(n),i.set(new Uint8Array(r),12),fe(i)}async function Ea(t,e){const n=ye(t),r=n.slice(0,12),i=n.slice(12),s=await crypto.subtle.decrypt({name:Ia,iv:r},e,i);return new Uint8Array(s)}async function $a(t,e,n){const r=await crypto.subtle.importKey("raw",t,"HKDF",!1,["deriveKey"]);return crypto.subtle.deriveKey({name:"HKDF",hash:"SHA-256",salt:e,info:(new TextEncoder).encode(n)},r,{name:Ia,length:256},!1,["encrypt","decrypt"])}function Da(t){return $a(t,new Uint8Array,Ca)}function Ba(t,e){return $a(t,e,Ca)}async function Ta(t,e,n=6e5){const r=await crypto.subtle.importKey("raw",(new TextEncoder).encode(t),"PBKDF2",!1,["deriveKey"]);return crypto.subtle.deriveKey({name:"PBKDF2",hash:"SHA-256",salt:e,iterations:n},r,{name:Ia,length:256},!1,["encrypt","decrypt"])}const Oa=Aa,Ma="chunks",Ra="metadata";class Fa{async open(){if(!this.db)return new Promise((t,e)=>{const n=indexedDB.open("swarm-utilization-store",4);n.onerror=()=>{e(new Error(`Failed to open IndexedDB: ${n.error}`))},n.onblocked=()=>{console.warn("[UtilizationStore] IndexedDB upgrade blocked by another open connection; waiting for it to close")},n.onsuccess=()=>{this.db=n.result,this.db.onversionchange=()=>{this.close()},t()},n.onupgradeneeded=t=>{const e=t.target.result;e.objectStoreNames.contains(Ma)&&e.deleteObjectStore(Ma),e.objectStoreNames.contains(Ra)&&e.deleteObjectStore(Ra);e.createObjectStore(Ma,{keyPath:["batchId","chunkIndex"]}).createIndex("batchId","batchId",{unique:!1}),e.createObjectStore(Ra,{keyPath:"batchId"})}})}async getChunk(t,e){return await this.open(),new Promise((n,r)=>{const i=this.db.transaction([Ma],"readonly").objectStore(Ma).get([t,e]);i.onsuccess=()=>{const r=i.result;r&&this.touchChunk(t,e).catch(t=>{console.warn("[UtilizationStore] Failed to update lastAccess:",t)}),n(r)},i.onerror=()=>{r(new Error(`Failed to get chunk: ${i.error}`))}})}async putChunk(t){return await this.open(),new Promise((e,n)=>{const r=this.db.transaction([Ma],"readwrite").objectStore(Ma),i={...t,lastAccess:Date.now()},s=r.put(i);s.onsuccess=()=>e(),s.onerror=()=>{n(new Error(`Failed to put chunk: ${s.error}`))}})}async getAllChunks(t){return await this.open(),new Promise((e,n)=>{const r=this.db.transaction([Ma],"readonly").objectStore(Ma).index("batchId").getAll(t);r.onsuccess=()=>{const t=r.result;t.sort((t,e)=>t.chunkIndex-e.chunkIndex),e(t)},r.onerror=()=>{n(new Error(`Failed to get all chunks: ${r.error}`))}})}async clearBatch(t){return await this.open(),new Promise((e,n)=>{const r=this.db.transaction([Ma,Ra],"readwrite"),i=r.objectStore(Ma),s=r.objectStore(Ra),a=i.index("batchId").openCursor(t);a.onsuccess=()=>{const t=a.result;t&&(t.delete(),t.continue())},s.delete(t),r.oncomplete=()=>e(),r.onerror=()=>{n(new Error(`Failed to clear batch: ${r.error}`))}})}async touchChunk(t,e){return await this.open(),new Promise((n,r)=>{const i=this.db.transaction([Ma],"readwrite"),s=i.objectStore(Ma),a=s.get([t,e]);a.onsuccess=()=>{const t=a.result;t&&(t.lastAccess=Date.now(),s.put(t))},i.oncomplete=()=>n(),i.onerror=()=>{r(new Error(`Failed to touch chunk: ${i.error}`))}})}async getMetadata(t){return await this.open(),new Promise((e,n)=>{const r=this.db.transaction([Ra],"readonly").objectStore(Ra).get(t);r.onsuccess=()=>e(r.result),r.onerror=()=>{n(new Error(`Failed to get metadata: ${r.error}`))}})}async putMetadata(t){return await this.open(),new Promise((e,n)=>{const r=this.db.transaction([Ra],"readwrite").objectStore(Ra).put(t);r.onsuccess=()=>e(),r.onerror=()=>{n(new Error(`Failed to put metadata: ${r.error}`))}})}close(){this.db&&(this.db.close(),this.db=void 0)}}function qa(t){return t.publicKey().address().toHex().toLowerCase()}function La(t,e){!function(t){const e=Fe+qe,n=Fe+Le;if(t.length<e||t.length>n)throw new we("invalid-request",`Invalid chunk length: ${t.length} bytes (expected span plus payload, ${e} to ${n})`)}(t.data);const n=Se(t.data).toUint8Array();if("content"===t.kind)return{address:n};const r=new I("app"===t.signer?e.appSecret:t.signer.privateKey);if(e.internalOwners.has(qa(r)))throw new we("invalid-request","This single-owner chunk would be owned by one of the account's own keys, which never signs for an app.");const i=ye(t.identifier),a=r.publicKey().address();return{address:s.Binary.keccak256(s.Binary.concatBytes(i,a.toUint8Array())),owner:a,signature:r.sign(s.Binary.concatBytes(i,n))}}function Ka(t){return y(t).toHex()}const Na=1/3,Ha=se({count:ue().int().nonnegative(),windowStart:ue(),windowCount:ue().int().nonnegative(),buckets:Ke(de(),ue().int().nonnegative())});function Wa(t,e){return e>=t.windowStart&&e-t.windowStart<6e4}function ja(t,e){return new we("upload-unavailable",e,{reason:t})}function za(t,e){return t.count>=1e4?ja("app-stamp-count","This app has used its count limit of 10000 stamps on this stamp."):Wa(t,e)&&t.windowCount>=60?ja("app-stamp-rate","This app has reached its rate limit of 60 stamps per 60 seconds. Try again shortly."):void 0}function Ga(t,e){const n=za(t,e.now);if(n)return n;const r=(i=e.laneCapacity,Math.floor(i*Na));var i;return(t.buckets[e.bucket]??0)>=r?ja("app-bucket-share",`This app has used its bucket share limit of ${r} stamps in this chunk's bucket.`):void 0}function Va(t,e){const n=Wa(t,e);return{...t,windowStart:n?t.windowStart:e,windowCount:n?t.windowCount+1:1}}function Ja(t,e,n){return{...Va(t,n),count:t.count+1,buckets:{...t.buckets,[e]:(t.buckets[e]??0)+1}}}const Za=se({slot:ue().int().nonnegative(),timestampMs:ue().int().nonnegative()}),Ya=se({partition:ue().int().nonnegative(),partitionCount:ue().int().positive(),slots:Ke(de(),Za)});function _a(t){return{partition:t.partition,partitionCount:t.partitionCount,slots:{}}}function Qa(t,e){if(null===t)return _a(e);try{const n=Ya.safeParse(JSON.parse(t));return n.success&&n.data.partition===e.partition&&n.data.partitionCount===e.partitionCount?n.data:_a(e)}catch{return _a(e)}}const Xa="Stamp worker pool is terminated";class to{constructor(t,e,n){this.nextWorker=0,this.nextId=0,this.workers=t,this.size=t.length,this.issuer=e,this.stamper=n,this.batchId=n.batchId,this.assignSlot="assignSlot"in n?t=>n.assignSlot(t):t=>function(t,e){const n=e[0]<<8|e[1],r=t.buckets[n];if(r>=t.maxSlot)throw new Error("Bucket is full");return t.buckets[n]=r+1,r}(n,t)}static async create(t,e,n){const r=n??4,i=new Blob(['!function(){"use strict";var t,n={};var e=(t||(t=1,function(t){var n;async function e(t){return new Promise((n,e)=>t.then(e,n))}async function r(t){return new Promise(n=>setTimeout(()=>{n(!0)},t))}function i(t,n=Math.random){for(let e=t.length-1;e>0;e--){const r=Math.floor(n()*(e+1)),i=t[e];t[e]=t[r],t[r]=i}return t}function o(t,n,e=Math.random){return i(V(0,t.length-1),e).slice(0,n)}function s(t,n,e=Math.random){return Math.floor(e()*(n-t+1))+t}function u(t,n,e){return n>=t.x&&n<t.x+t.width&&e>=t.y&&e<t.y+t.height}function a(t,n=Math.random){return n()<t}function c(t,n=Math.random){return t[Math.floor(t.length*n())]}function l(t){if(!t.length)throw Error("Received empty array");return t[t.length-1]}function f(t,n,e){return e(n.reduce((t,n)=>n(t),t))}function h(t,n){if(null==t)return null;const e=n.split(".");let r=t;for(const t of e){if(null===r[t]||void 0===r[t])return null;r=r[t]}return r}function g(t,n,e){const r=n.split(/\\.|\\[/);let i=t;for(let t=0;t<r.length;t++){const n=r[t],o=t<r.length-1&&r[t+1].includes("]"),s=n.includes("]")?n.replace(/\\[|\\]/g,""):n;if(t===r.length-1)return i[s]=e,e;d(i[s])||(i[s]=o?[]:{}),i=i[s]}return e}function p(t,n){return Math.round(t/n)*n}function d(t,n=!0){return!(!t||n&&!w(t._readableState)||n&&t.constructor&&(t.constructor.isBuffer||"AbortController"==t.constructor.name||"AbortSignal"==t.constructor.name||"Uint8Array"==t.constructor.name||"ArrayBuffer"===t.constructor.name||"ReadableStream"===t.constructor.name))&&"object"==typeof t}function m(t){return d(t)&&!Array.isArray(t)}function y(t){return Array.isArray(t)&&0===t.length}function w(t){return void 0===t}function b(t){return"[object Function]"===Object.prototype.toString.call(t)||"[object AsyncFunction]"===Object.prototype.toString.call(t)}function x(t){return"[object String]"===Object.prototype.toString.call(t)}function $(t){return"number"==typeof t&&isFinite(t)}function v(t){return!0===t||!1===t}function E(t){return"[object Date]"===Object.prototype.toString.call(t)}function M(t){return!x(t)||0===t.trim().length}function A(t){return $(t)&&Number.isInteger(t)&&t>=1}function S(t){return x(t)&&null!==t.match(/^-?\\d+$/)}function k(t){return x(t)&&null!==t.match(/^(0x)?[0-9a-f]+$/i)}Object.defineProperty(t,"__esModule",{value:!0}),t.Vector=t.Cache=t.Assertions=t.Strings=t.Types=t.Objects=t.Dates=t.Promises=t.Numbers=t.System=t.Arrays=t.Random=t.Elliptic=t.Binary=t.Lock=t.Solver=t.RollingValueProvider=t.TrieRouter=t.AsyncQueue=t.PubSubChannel=t.FixedPointNumber=t.MerkleTree=t.Chunk=t.Uint8ArrayWriter=t.Uint8ArrayReader=t.AsyncLazy=t.Lazy=t.Optional=void 0;const O="!@#$%^&*()_+-=[]{}|;:<>?,./".split(""),T="abcdefghijklmnopqrstuvwxyz",B=T+"ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890",j=B+"!@#$%^&*()_+-=[]{}|;:<>?,./",C=["—","\\\\","東","京","都","𝖆","𝖇","𝖈","👾","🙇","💁","🙅","ᚠ","ᛇ","ᚻ","ᛦ"],D="0123456789abcdef";function I(t,n){if(M(t))throw new TypeError(`Expected string${n?.name?` for ${n.name}`:""}, got: `+t);if(n&&(void 0!==n.min&&t.length<n.min||void 0!==n.max&&t.length>n.max))throw RangeError(`Expected string${n?.name?` for ${n.name}`:""} length in range: ${n.min??"-inf"}..${n.max??"inf"}; got: ${t.length}`);return t}function U(t,n){if(void 0!==n.min&&t<n.min||void 0!==n.max&&t>n.max)throw RangeError(`Expected value${n?.name?` for ${n.name}`:""} in range: ${n.min??"-inf"}..${n.max??"inf"}; got: ${t}`)}function F(t,n){if($(t))return n&&U(t,n),t;if(!x(t)||!t.match(/^-?\\d+(\\.\\d+)?$/))throw new TypeError(`Expected number${n?.name?` for ${n.name}`:""}, got: `+t);const e=parseFloat(t);return n&&U(e,n),e}function N(t,n){return Math.trunc(F(t,n))}function P(t,n){if(!m(t))throw new TypeError(`Expected object${n?.name?` for ${n.name}`:""}, got: `+t);return t}function z(t){return x(t)&&null!==t.match(/^https?:\\/\\/.+/)}function L(t){return"bigint"==typeof t}function R(t,n){if(!L(t))throw new TypeError(`Expected bigint${n?.name?` for ${n.name}`:""}, got: `+t);if(void 0!==n?.min&&t<n?.min||void 0!==n?.max&&t>n?.max)throw RangeError(`Expected value${n?.name?` for ${n.name}`:""} in range: ${n.min??"-inf"}..${n.max??"inf"}; got: ${t}`);return t}function W(t,n){for(const[e,r]of Object.entries(n))if(!r(t[e]))throw TypeError(`${e} in value does not exist or match shape`);for(const e of Object.keys(t))if(!n[e])throw TypeError(`${e} exists in value but not in shape`);return!0}function q(t,n){if(m(t)&&m(n))for(const e in n)m(n[e])?(t[e]||(t[e]={}),q(t[e],n[e])):Array.isArray(n[e])?t[e]=[...n[e]]:(null!==n[e]&&void 0!==n[e]||null===t[e]||void 0===t[e])&&(t[e]=n[e]);return t}function H(t,n){const e={};for(const r of t)for(const t of Object.keys(r))e[t]?e[t]=n(e[t],r[t]):e[t]=r[t];return e}function K(t,n){Array.prototype.push.apply(t,n)}function V(t,n){const e=[];for(let r=t;r<=n;r++)e.push(r);return e}function J(t,n=()=>!1){return t.toLowerCase().normalize("NFD").replace(/[\\u0300-\\u036f]/g,"").split("").map(t=>/[a-z0-9]/.test(t)||n(t)?t:"-").join("").replace(/-+/g,"-").replace(/^-|-$/g,"")}function Z(t,n){if(0===n.length)return 0;const e=t.toLowerCase(),r=n.toLowerCase();return t===n?1e4:e.startsWith(r)?1e4-t.length:e.includes(r)?5e3-t.length:new RegExp(".*"+r.split("").join(".*")+".*").test(e)?1e3-t.length:0}const Q={"&amp;":"&","&quot;":\'"\',"&apos;":"\'","&gt;":">","&lt;":"<"};function _(t,n){const e=t.indexOf(n);return-1===e?null:t.slice(0,e)}function G(t,n){const e=t.indexOf(n);return-1===e?null:t.slice(e+n.length)}function X(t,n){const e=t.lastIndexOf(n);return-1===e?null:t.slice(0,e)}function Y(t,n){const e=t.lastIndexOf(n);return-1===e?null:t.slice(e+n.length)}function tt(t,n,e=!1){const r=e?t.lastIndexOf(n):t.indexOf(n);return-1===r?e?[null,t]:[t,null]:[t.slice(0,r),t.slice(r+n.length)]}function nt(t,n){let e=[t];for(const t of n)e=e.flatMap(n=>n.split(t));return e.filter(t=>t)}function et(t){const n=l(t.split(/\\\\|\\//g)),e=n.lastIndexOf(".",n.length-1);return e<=0?"":n.slice(e+1)}function rt(t){const n=l(t.split(/\\\\|\\//g)),e=n.lastIndexOf(".",n.length-1);return e<=0?n:n.slice(0,e)}function it(t){return t.split("\\n").map(t=>t.trim().replace(/\\s+/g," ")).filter(t=>t.length>0).join("\\n")}function ot(t){return t.charAt(0).toUpperCase()+t.slice(1)}function st(t){return t.charAt(0).toLowerCase()+t.slice(1)}function ut(t){if(!t)return!1;const n=t.charCodeAt(0);return n>=65&&n<=90||n>=97&&n<=122}function at(t){if(!t)return!1;const n=t.charCodeAt(0);return n>=48&&n<=57}function ct(t){return ut(t)||at(t)}const lt=" \\n\\t\\r.,?!:;\\"\'`(){}[]~@#$%^&*-+=|<>/\\\\".split("");function ft(t){return lt.includes(t)}function ht(t,n,e=0){const r=n.exec(t.slice(e));return r?{index:r.index,match:r[0]}:null}function gt(t,n,e=!0){if(!e)return n.every(n=>n instanceof RegExp?n.test(t):-1!==t.indexOf(n,0));let r=0;for(const e of n)if(e instanceof RegExp){const n=ht(t,e,r);if(!n)return!1;r=n.index+n.match.length}else{const n=t.indexOf(e,r);if(-1===n)return!1;r=n+e.length}return!0}function pt(t,n,e=0){const r=[];let i=t.indexOf(n,e);for(;-1!==i;)r.push(i),i=t.indexOf(n,i+n.length);return r}function dt(t,n,e=0){let r=-1;for(const i of n){const n=t.indexOf(i,e);-1!==n&&(-1===r||n<r)&&(r=n)}return r}function mt(t,n=0){for(let e=n;e<t.length;e++)if(ft(t[e]))return e;return-1}function yt(t,n=0){for(let e=n;e<t.length;e++)if("#"===t[e]&&ct(t[e+1]))return e;return-1}function wt(t,n,e=0){return t.slice(0,e).lastIndexOf(n)}function bt(t,n=0,e="{",r="}"){let i=1;for(let o=n;o<t.length;o++)if(t.slice(o,o+r.length)===r){if(0===--i)return o}else t.slice(o,o+e.length)===e&&i++;return-1}function xt(t,n){const e=n.wordBoundary?dt(t,[`${n.opening} `,`${n.opening}\\n`],n.start||0):t.indexOf(n.opening,n.start||0);if(-1===e)return null;const r=bt(t,e+n.opening.length,n.opening,n.closing);return-1===r?null:n.exclusive?t.slice(e+n.opening.length,r):t.slice(e,r+n.closing.length)}const $t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",vt="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";function Et(t,n){const e=n.length;let r=0,i=0;const o=[];for(let s=0;s<t.length;s++){const u=t[s];if("="===u)break;const a=n.indexOf(u);if(-1===a)throw new Error(`Invalid character: ${u}`);i=i<<Math.log2(e)|a,r+=Math.log2(e),r>=8&&(r-=8,o.push(i>>r&255))}return new Uint8Array(o)}function Mt(t,n){const e=n.length;let r=0,i=0,o="";for(let s=0;s<t.length;s++)for(i=i<<8|t[s],r+=8;r>=Math.log2(e);)r-=Math.log2(e),o+=n[i>>r&e-1];return r>0&&(o+=n[i<<Math.log2(e)-r&e-1]),o.length%4!=0&&(o+="=".repeat(4-o.length%4)),o}function At(t,n,e){const r=[];for(const i of e)i!==n&&r.push(t.replace(n,i));return r}function St(t){const n=t.lastIndexOf(" ");return-1===n?{line:t,rest:""}:{line:t.slice(0,n),rest:t.slice(n+1)}}function kt(t){const n=t.reduce((t,n)=>t.length<n.length?t:n);let e="";for(let r=0;r<n.length;r++){const i=n[r];if(!t.every(t=>t[r]===i))break;e+=i}return e}function Ot(t,n){return new RegExp(`\\\\b${n}\\\\b`).test(t)}function Tt(t,n,e=[]){let r="";for(;n<t.length&&(ct(t[n])||e.includes(t[n]));)r+=t[n++];return r}function Bt(t,n,e,r="$",i=":"){if(""===e)return t;let o=t.indexOf(`${r}${n}`);for(;-1!==o;){if(t[o+n.length+1]===i)if(t[o+n.length+2]===i)t=t.replace(`${r}${n}${i}${i}`,e);else{const s=Tt(t,o+n.length+2,["_"]);t=t.replace(`${r}${n}${i}${s}`,e)}else t=t.replace(`${r}${n}`,e);o=t.indexOf(`${r}${n}`,o+e.length)}return t}function jt(t,n="$",e=":"){let r=t.indexOf(n);for(;-1!==r;){const i=Tt(t,r+1);if(t[r+i.length+1]===e)if(t[r+i.length+2]===e)t=t.replace(`${n}${i}${e}${e}`,"");else{const o=Tt(t,r+i.length+2);t=t.replace(`${n}${i}${e}${o}`,o)}r=t.indexOf(n,r+1)}return t}function Ct(t,n=!0){const e=Object.entries(t).filter(([t,n])=>null!=n).map(([t,n])=>`${t}=${encodeURIComponent(n)}`).join("&");return e?(n?"?":"")+e:""}function Dt(t){return String(Math.floor(t)).padStart(2,"0")}function It(t){const n=Math.floor(t/36e5);t%=36e5;const e=Math.floor(t/6e4);t%=6e4;const r=Math.floor(t/1e3);return n?`${Dt(n)}:${Dt(e)}:${Dt(r)}`:`${Dt(e)}:${Dt(r)}`}function Ut(t){return Math.floor((E(t)?t.getTime():t)/864e5)}const Ft={today:(t,n)=>Dt(t)+":"+Dt(n),yesterday:()=>"Yesterday",monday:()=>"Mon",tuesday:()=>"Tue",wednesday:()=>"Wed",thursday:()=>"Thu",friday:()=>"Fri",saturday:()=>"Sat",sunday:()=>"Sun",weeks:t=>`${t}w`},Nt={now:()=>"A few seconds",seconds:t=>`${t} seconds`,minutes:t=>`${t} minutes`,hours:t=>`${t} hours`,days:t=>`${t} days`,weeks:t=>`${t} weeks`};function Pt(n,e){const r=e?.now??Date.now(),i=e?.labels||Nt;let o=(r-(t.Types.isDate(n)?n.getTime():n))/1e3;return o<10?i.now():o<120?i.seconds(Math.floor(o)):(o/=60,o<120?i.minutes(Math.floor(o)):(o/=60,o<48?i.hours(Math.floor(o)):(o/=24,o<14?i.days(Math.floor(o)):(o/=7,i.weeks(Math.floor(o))))))}const zt={},Lt={s:1e3,m:6e4,h:36e5,d:864e5},Rt={0:"sunday",1:"monday",2:"tuesday",3:"wednesday",4:"thursday",5:"friday",6:"saturday"};function Wt(t){return{zeroBasedIndex:t,day:Rt[t]}}function qt(t){return Wt(t.getDay())}const Ht={ms:1,milli:1,millis:1,millisecond:1,milliseconds:1,s:1e3,sec:1e3,second:1e3,seconds:1e3,m:6e4,min:6e4,minute:6e4,minutes:6e4,h:36e5,hour:36e5,hours:36e5,d:864e5,day:864e5,days:864e5,w:6048e5,week:6048e5,weeks:6048e5,month:2592e6,months:2592e6,y:31536e6,year:31536e6,years:31536e6},Kt={b:0,byte:0,bytes:0,kb:1,kilobyte:1,kilobytes:1,mb:2,megabyte:2,megabytes:2,gb:3,gigabyte:3,gigabytes:3,tb:4,terabyte:4,terabytes:4},Vt=new Map;function Jt(t,n=!1){t=t.filter(t=>t),n&&x(t[1])&&(t[1]="../"+t[1]);let e="";x(t[0])&&t[0].includes("://")&&(e=_(t[0],"://")??"",t[0]=G(t[0],"://")??"");const r=t.map(t=>String(t)).flatMap(t=>t.split("/")),i=[];for(let t=0;t<r.length;t++)"."!==r[t]&&(".."===r[t]?(!e||i.length>1)&&i.pop():i.push(r[t]));return(e?e+"://":"")+i.join("/").replaceAll(/\\/{2,}/g,"/")}function Zt(t){const n=Object.keys(t).sort((t,n)=>t.localeCompare(n)),e={};for(const r of n)e[r]=_t(t[r]);return e}function Qt(t){const n=[];return t.sort((t,n)=>JSON.stringify(_t(t)).localeCompare(JSON.stringify(_t(n)))).forEach(t=>n.push(_t(t))),n}function _t(t){return Array.isArray(t)?Qt(t):d(t)?Zt(t):t}function Gt(t,n){return JSON.stringify(_t(t))===JSON.stringify(_t(n))}function Xt(t){const n=Object.keys(t);return n[Math.floor(Math.random()*n.length)]}const Yt=[1e3,1e6,1e9,1e12,1e15,1e18,1e21,1e24,1e27,1e30,1e9,1e16,1e18,1e18,1e18,1e33],tn=["thousand","million","billion","trillion","quadrillion","quintillion","sextillion","septillion","octillion","nonillion","gwei","bzz","btc","eth","dai","decillion"],nn=["K","M","B","T","Qa","Qi","Sx","Sp","O","N","gwei","bzz","eth","btc","dai","D"];function en(t){const n=parseFloat(t);if(isNaN(n))throw Error("makeNumber got NaN for input");const e=t.replace(/^-?[0-9.]+/,"").trim(),r=nn.findIndex(t=>t.toLowerCase()===e.toLowerCase());return-1===r?n:n*Yt[r]}function rn(t,n,e){return t<n?n:t>e?e:t}function on(t,n,e){return t+(e?"["+n+"]":(t.length?".":"")+n)}function sn(t,n,e,r,i){if(!d(n))return n;for(const[o,s]of Object.entries(n)){const n=on(e,o,r);Array.isArray(s)?i?sn(t,s,n,!0,i):t[n]=s.map(t=>sn(Array.isArray(t)?[]:{},t,"",!1,i)):d(s)?sn(t,s,n,!1,i):t[n]=s}return t}function un(t,n){const e={};for(const r of t)e[n(r)]=r;return e}function an(t,n){const e=Math.ceil(t.length/n),r=[];for(let n=0;n<t.length;n+=e)r.push(t.slice(n,n+e));return r}function cn(t,n){const e=[],r=Math.ceil(t.length/n);for(let i=0;i<r;i++)e.push(t.slice(i*n,i*n+n));return e}function ln(t,n){return Object.fromEntries(Object.entries(t).sort(n))}function fn(t,n){const e=[];let r=[];return t.forEach((i,o)=>{(0===o||!n(i,t[o-1]))&&(r=[],e.push(r)),r.push(i)}),e}function hn(t,n,e,r=100){if(t.map.has(n)){const e=t.keys.indexOf(n);t.keys.splice(e,1)}if(t.map.set(n,e),t.keys.push(n),t.keys.length>r){const n=t.keys.shift();n&&t.map.delete(n)}}class gn{constructor(t){this.value=t}static of(t){return new gn(t)}static empty(){return new gn(null)}map(t){return new gn(null!==this.value&&void 0!==this.value?t(this.value):null)}mapAsync(t){return null!==this.value&&void 0!==this.value?t(this.value).then(t=>gn.of(t)):Promise.resolve(gn.empty())}ifPresent(t){return null!==this.value&&void 0!==this.value&&t(this.value),this}ifPresentAsync(t){return null!==this.value&&void 0!==this.value?t(this.value).then(()=>this):Promise.resolve(this)}ifAbsent(t){return(null===this.value||void 0===this.value)&&t(),this}ifAbsentAsync(t){return null===this.value||void 0===this.value?t().then(()=>this):Promise.resolve(this)}getOrFallback(t){return this.value??t()}getOrFallbackAsync(t){return null!==this.value&&void 0!==this.value?Promise.resolve(this.value):t()}getOrThrow(){if(null===this.value||void 0===this.value)throw Error("Optional.value is empty");return this.value}}t.Optional=gn,t.Lazy=class{constructor(t){this.supplier=t,this.value=null}get(){return this.value||(this.value=this.supplier()),this.value}},t.AsyncLazy=class{constructor(t){this.supplier=t,this.value=null}async get(){return this.value||(this.value=await this.supplier()),this.value}};class pn{constructor(t){this.value=t,this.children=[]}}function dn(t,n){if(Math.log2(t.length)%1!=0)throw new Error("Array length must be a power of 2");let e=[...t];for(;e.length>1;){const t=[];for(let r=0;r<e.length;r+=2){const i=e[r+1];t.push(n(e[r],i))}e=t}return e[0]}function mn(...t){const n=t.reduce((t,n)=>t+n.length,0),e=new Uint8Array(n);let r=0;return t.forEach(t=>{e.set(t,r),r+=t.length}),e}function yn(t){return 137===t[0]&&80===t[1]&&78===t[2]&&71===t[3]}function wn(t){return 255===t[0]&&216===t[1]}function bn(t){return 87===t[8]&&69===t[9]&&66===t[10]&&80===t[11]}function xn(t,n){const e=new ArrayBuffer(8);return new DataView(e).setBigUint64(0,BigInt(t),"LE"===n),new Uint8Array(e)}function $n(t,n){const e=new Uint8Array(32);let r=t;if("LE"===n){for(let t=0;t<32;t++)e[t]=Number(0xffn&r),r>>=8n;return e}for(let t=31;t>=0;t--)e[t]=Number(0xffn&r),r>>=8n;return e}function vn(t,n){let e=0n;if("LE"===n){for(let n=31;n>=0;n--)e=e<<8n|BigInt(t[n]);return e}for(let n=0;n<32;n++)e=e<<8n|BigInt(t[n]);return e}function En(t,n){const e=[];for(let r=0;r<t.length;r+=n)e.push(t.subarray(r,r+n));return e}const Mn=[0,1,0,32898,2147483648,32906,2147483648,2147516416,0,32907,0,2147483649,2147483648,2147516545,2147483648,32777,0,138,0,136,0,2147516425,0,2147483658,0,2147516555,2147483648,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,0,32778,2147483648,2147483658,2147483648,2147516545,2147483648,32896,0,2147483649,2147483648,2147516424];function An(t){for(let n=0;n<24;n++){const e=t[0]^t[10]^t[20]^t[30]^t[40],r=t[1]^t[11]^t[21]^t[31]^t[41],i=t[2]^t[12]^t[22]^t[32]^t[42],o=t[3]^t[13]^t[23]^t[33]^t[43],s=t[4]^t[14]^t[24]^t[34]^t[44],u=t[5]^t[15]^t[25]^t[35]^t[45],a=t[6]^t[16]^t[26]^t[36]^t[46],c=t[7]^t[17]^t[27]^t[37]^t[47],l=t[8]^t[18]^t[28]^t[38]^t[48],f=t[9]^t[19]^t[29]^t[39]^t[49],h=l^(i<<1|o>>>31),g=f^(o<<1|i>>>31),p=e^(s<<1|u>>>31),d=r^(u<<1|s>>>31),m=i^(a<<1|c>>>31),y=o^(c<<1|a>>>31),w=s^(l<<1|f>>>31),b=u^(f<<1|l>>>31),x=a^(e<<1|r>>>31),$=c^(r<<1|e>>>31);t[0]^=h,t[1]^=g,t[2]^=p,t[3]^=d,t[4]^=m,t[5]^=y,t[6]^=w,t[7]^=b,t[8]^=x,t[9]^=$,t[10]^=h,t[11]^=g,t[12]^=p,t[13]^=d,t[14]^=m,t[15]^=y,t[16]^=w,t[17]^=b,t[18]^=x,t[19]^=$,t[20]^=h,t[21]^=g,t[22]^=p,t[23]^=d,t[24]^=m,t[25]^=y,t[26]^=w,t[27]^=b,t[28]^=x,t[29]^=$,t[30]^=h,t[31]^=g,t[32]^=p,t[33]^=d,t[34]^=m,t[35]^=y,t[36]^=w,t[37]^=b,t[38]^=x,t[39]^=$,t[40]^=h,t[41]^=g,t[42]^=p,t[43]^=d,t[44]^=m,t[45]^=y,t[46]^=w,t[47]^=b,t[48]^=x,t[49]^=$;const v=t[0],E=t[1],M=t[2]<<1|t[3]>>>31,A=t[3]<<1|t[2]>>>31,S=t[5]<<30|t[4]>>>2,k=t[4]<<30|t[5]>>>2,O=t[6]<<28|t[7]>>>4,T=t[7]<<28|t[6]>>>4,B=t[8]<<27|t[9]>>>5,j=t[9]<<27|t[8]>>>5,C=t[11]<<4|t[10]>>>28,D=t[10]<<4|t[11]>>>28,I=t[13]<<12|t[12]>>>20,U=t[12]<<12|t[13]>>>20,F=t[14]<<6|t[15]>>>26,N=t[15]<<6|t[14]>>>26,P=t[17]<<23|t[16]>>>9,z=t[16]<<23|t[17]>>>9,L=t[18]<<20|t[19]>>>12,R=t[19]<<20|t[18]>>>12,W=t[20]<<3|t[21]>>>29,q=t[21]<<3|t[20]>>>29,H=t[22]<<10|t[23]>>>22,K=t[23]<<10|t[22]>>>22,V=t[25]<<11|t[24]>>>21,J=t[24]<<11|t[25]>>>21,Z=t[26]<<25|t[27]>>>7,Q=t[27]<<25|t[26]>>>7,_=t[29]<<7|t[28]>>>25,G=t[28]<<7|t[29]>>>25,X=t[31]<<9|t[30]>>>23,Y=t[30]<<9|t[31]>>>23,tt=t[33]<<13|t[32]>>>19,nt=t[32]<<13|t[33]>>>19,et=t[34]<<15|t[35]>>>17,rt=t[35]<<15|t[34]>>>17,it=t[36]<<21|t[37]>>>11,ot=t[37]<<21|t[36]>>>11,st=t[38]<<8|t[39]>>>24,ut=t[39]<<8|t[38]>>>24,at=t[40]<<18|t[41]>>>14,ct=t[41]<<18|t[40]>>>14,lt=t[42]<<2|t[43]>>>30,ft=t[43]<<2|t[42]>>>30,ht=t[45]<<29|t[44]>>>3,gt=t[44]<<29|t[45]>>>3,pt=t[47]<<24|t[46]>>>8,dt=t[46]<<24|t[47]>>>8,mt=t[48]<<14|t[49]>>>18,yt=t[49]<<14|t[48]>>>18;t[0]=v^~I&V,t[1]=E^~U&J,t[2]=I^~V&it,t[3]=U^~J&ot,t[4]=V^~it&mt,t[5]=J^~ot&yt,t[6]=it^~mt&v,t[7]=ot^~yt&E,t[8]=mt^~v&I,t[9]=yt^~E&U,t[10]=O^~L&W,t[11]=T^~R&q,t[12]=L^~W&tt,t[13]=R^~q&nt,t[14]=W^~tt&ht,t[15]=q^~nt&gt,t[16]=tt^~ht&O,t[17]=nt^~gt&T,t[18]=ht^~O&L,t[19]=gt^~T&R,t[20]=M^~F&Z,t[21]=A^~N&Q,t[22]=F^~Z&st,t[23]=N^~Q&ut,t[24]=Z^~st&at,t[25]=Q^~ut&ct,t[26]=st^~at&M,t[27]=ut^~ct&A,t[28]=at^~M&F,t[29]=ct^~A&N,t[30]=B^~C&H,t[31]=j^~D&K,t[32]=C^~H&et,t[33]=D^~K&rt,t[34]=H^~et&pt,t[35]=K^~rt&dt,t[36]=et^~pt&B,t[37]=rt^~dt&j,t[38]=pt^~B&C,t[39]=dt^~j&D,t[40]=S^~P&_,t[41]=k^~z&G,t[42]=P^~_&X,t[43]=z^~G&Y,t[44]=_^~X&lt,t[45]=G^~Y&ft,t[46]=X^~lt&S,t[47]=Y^~ft&k,t[48]=lt^~S&P,t[49]=ft^~k&z,t[0]^=Mn[2*n],t[1]^=Mn[2*n+1]}}function Sn(t){const n=[];for(let e=0;e<t.length;e+=4)n.push(t[e]|t[e+1]<<8|t[e+2]<<16|t[e+3]<<24);return n}function kn(t,n){if(!t.length){const t=new Uint8Array(136);return t[0]=n,t[135]=128,[Sn(t)]}const e=En(t,136),r=e[e.length-1];if(r.length<136){const t=new Uint8Array(136);t.set(r),t[r.length]=n,t[135]|=128,e[e.length-1]=t}if(136===r.length){const t=new Uint8Array(136);t[0]=n,t[135]=128,e.push(t)}return e.map(Sn)}function On(t,n){for(const e of n){for(let n=0;n<34;n+=2)t[n]^=e[n+1],t[n+1]^=e[n];An(t)}return t}function Tn(t){return new Uint8Array([t[1],t[1]>>-24,t[1]>>-16,t[1]>>-8,t[0],t[0]>>8,t[0]>>16,t[0]>>24,t[3],t[3]>>-24,t[3]>>-16,t[3]>>-8,t[2],t[2]>>8,t[2]>>16,t[2]>>24,t[5],t[5]>>-24,t[5]>>-16,t[5]>>-8,t[4],t[4]>>8,t[4]>>16,t[4]>>24,t[7],t[7]>>-24,t[7]>>-16,t[7]>>-8,t[6],t[6]>>8,t[6]>>16,t[6]>>24])}function Bn(t){return Tn(On(new Array(50).fill(0),kn(t,1)))}function jn(t,n,e=0){if(t.length>=n)return t;const r=new Uint8Array(n);return r.fill(e),r.set(t,n-t.length),r}function Cn(t,n,e=0){if(t.length>=n)return t;const r=new Uint8Array(n);return r.fill(e),r.set(t,0),r}function Dn(t,n){return(t%n+n)%n}function In(t,n){t=Dn(t,n);let[e,r]=[0n,1n],[i,o]=[n,t];for(;0n!==o;){const t=i/o;[e,r]=[r,e-t*r],[i,o]=[o,i-t*o]}if(i>1n)throw new Error("a is not invertible");return e<0n&&(e+=n),e}function Un(t,n){return 0n===Dn(t,n)?0n:n%4n==3n?function(t,n,e){let r=1n;for(t=Dn(t,e);n>0;)n%2n==1n&&(r=Dn(r*t,e)),t=Dn(t*t,e),n/=2n;return r}(t,(n+1n)/4n,n):null}const Fn=0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2fn,Nn=0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n,Pn=0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798n,zn=0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8n;function Ln(t,n,e){if(0n===n)return[0n,0n];const r=Dn(3n*t*t*In(2n*n,e),e),i=Dn(r*r-2n*t,e);return[i,Dn(r*(t-i)-n,e)]}function Rn(t,n,e,r,i){if(0n===t&&0n===n)return[e,r];if(0n===e&&0n===r)return[t,n];if(t===e&&n===Dn(-r,i))return[0n,0n];if(t===e&&n===r)return Ln(t,n,i);const o=Dn((r-n)*In(e-t,i),i),s=Dn(o*o-t-e,i);return[s,Dn(o*(t-s)-n,i)]}function Wn(t,n,e,r){let i=[0n,0n],o=[t,n];const s=e.toString(2);for(const t of s)"0"===t?(o=Rn(i[0],i[1],o[0],o[1],r),i=Ln(i[0],i[1],r)):(i=Rn(i[0],i[1],o[0],o[1],r),o=Ln(o[0],o[1],r));return i}function qn(t,n,e){if(n<=0n||n>=Nn)throw new Error("Invalid private key");if(e||(e=Dn(vn(Bn(mn(Bn($n(n,"BE")),$n(t,"BE"))),"BE"),Nn)),e<=0n||e>=Nn)throw new Error("Invalid nonce");const r=Dn(t,Nn),i=Wn(Pn,zn,e,Fn),o=Dn(i[0],Nn);let s=Dn((r+Dn(o,Nn)*n)*In(e,Nn),Nn);if(0n===o||0n===s)throw new Error("Invalid r or s value");let u=i[1]%2n==0n?27n:28n;return s>Nn/2n&&(s=Nn-s,u=27n===u?28n:27n),[o,s,u]}class Hn{constructor(t){this.cursor=0,this.buffer=t}read(t){const n=this.buffer.subarray(this.cursor,this.cursor+t);return this.cursor+=t,n}max(){return this.buffer.length-this.cursor}}t.Uint8ArrayReader=Hn;class Kn{constructor(t){this.buffer=t,this.cursor=0}write(t){const n=Math.min(this.max(),t.max());return this.buffer.set(t.read(n),this.cursor),this.cursor+=n,n}max(){return this.buffer.length-this.cursor}}t.Uint8ArrayWriter=Kn;class Vn{constructor(t,n=0n){this.span=n,this.writer=new Kn(new Uint8Array(t))}build(){return mn(xn(this.span,"LE"),this.writer.buffer)}hash(){const t=dn(En(this.writer.buffer,32),(t,n)=>Vn.hashFunction(mn(t,n)));return Vn.hashFunction(mn(xn(this.span,"LE"),t))}}t.Chunk=Vn,Vn.hashFunction=Bn;class Jn{constructor(t,n=4096){this.counters=[1],this.capacity=n,this.chunks=[new Vn(n)],this.onChunk=t}static async root(t,e=4096){const r=new n(n.NOOP,e);return await r.append(t),r.finalize()}async append(t,n=0,e=0n){const r=new Hn(t);for(;r.max()>0;){0===this.chunks[n].writer.max()&&await this.elevate(n);const t=this.chunks[n].writer.write(r);e?this.chunks[n].span+=e:this.chunks[0].span+=BigInt(t)}}async elevate(t){this.counters[t]=++this.counters[t]%(this.capacity/32),this.chunks[t+1]||(this.chunks.push(new Vn(this.capacity)),this.counters.push(1)),await this.append(this.chunks[t].hash(),t+1,this.chunks[t].span),await this.onChunk(this.chunks[t]),this.chunks[t]=new Vn(this.capacity)}async finalize(t=0){return this.chunks[t+1]?1===this.counters[t]?(await this.elevate(t+1),this.chunks[t+1]=this.chunks[t],this.finalize(t+1)):(await this.elevate(t),this.finalize(t+1)):(await this.onChunk(this.chunks[t]),this.chunks[t])}}t.MerkleTree=Jn,n=Jn,Jn.NOOP=async t=>{};class Zn{constructor(t,n){if(n<0)throw Error("Scale must be non-negative");this.value=BigInt(t),this.scale=n}static cast(t){if(!t)throw Error("Cannot cast falsy value to FixedPointNumber");if(t instanceof Zn)return t;const n=R(t.value),e=F(t.scale);return new Zn(n,e)}static fromDecimalString(t,n){/e\\-\\d+$/i.test(t)&&(t=parseFloat(t).toFixed(n));let[e,r]=t.split(".");return r=(r||"").padEnd(n,"0").slice(0,n),new Zn(BigInt(e+r),n)}static fromFloat(t,n){return Zn.fromDecimalString(t.toString(),n)}add(t){return this.assertSameScale(t),new Zn(this.value+t.value,this.scale)}subtract(t){return this.assertSameScale(t),new Zn(this.value-t.value,this.scale)}multiply(t){return new Zn(this.value*t,this.scale)}divmod(t){if(0n===t)throw new Error("Division by zero is not allowed");const n=this.value/t,e=this.value%t;return[new Zn(n,this.scale),new Zn(e,this.scale)]}exchange(t,n,e){if("*"===t){const t=this.value*n.value/10n**BigInt(this.scale);return new Zn(t,e)}this.assertSameScale(n);const r=this.value*10n**BigInt(e)/n.value;return new Zn(r,e)}compare(t){return this.assertSameScale(t),this.value>t.value?1:this.value<t.value?-1:0}toDecimalString(){if(0===this.scale)return this.value.toString();const t=this.value.toString();return`${t.slice(0,-this.scale)||"0"}.${t.slice(-this.scale).padStart(this.scale,"0")}`}toString(){return this.value.toString()}toJSON(){return this.toString()}toFloat(){return parseFloat(this.toDecimalString())}assertSameScale(t){if(this.scale!==t.scale)throw new Error(`Scale mismatch: expected ${this.scale}, but got ${t.scale}`)}}function Qn(t,n,e,r){const i=t.findIndex(t=>t===`--${n}`||t.startsWith(`--${n}=`)),o=t[i];if(!o)return(e||{})[r||n||""]||null;if(o.includes("="))return o.split("=")[1];const s=t[i+1];return s&&!s.startsWith("-")?s:(e||{})[r||n||""]||null}function _n(t,n,e,r){const i=Qn(t,n,e,r);if(!i)throw new Error(`Missing argument ${n}`);return i}function Gn(t,n){const e=t[n];t.splice(n,1),t.unshift(e)}function Xn(t,n){return{x:t.x+n.x,y:t.y+n.y}}function Yn(t,n){return{x:t.x*n,y:t.y*n}}function te(t,n,e){return{x:t.x+Math.cos(n)*e,y:t.y+Math.sin(n)*e}}function ne(t,n){return Math.sqrt((t.x-n.x)**2+(t.y-n.y)**2)}function ee(t,n,e="row-first"){const r=[];if("column-first"===e)for(let e=0;e<t.length;e++)for(let i=0;i<t[0].length;i++)n(e,i)&&r.push({x:e,y:i});else for(let e=0;e<t[0].length;e++)for(let i=0;i<t.length;i++)n(i,e)&&r.push({x:i,y:e});return r}function re(t,n,e){return!t[n-1]?.[e]}function ie(t,n,e){return!t[n+1]?.[e]}function oe(t,n,e){return!t[n][e-1]}function se(t,n,e){return!t[n][e+1]}function ue(t,n,e){const r=[];return t[n][e]?function(t,n,e){return t[n+1]?.[e]&&t[n-1]?.[e]&&!t[n][e-1]&&!t[n][e+1]}(t,n,e)||function(t,n,e){return t[n][e+1]&&t[n][e-1]&&!t[n-1]?.[e]&&!t[n+1]?.[e]}(t,n,e)?[]:(!t[n-1]?.[e-1]&&re(t,n,e)&&oe(t,n,e)&&r.push({x:n,y:e}),!t[n+1]?.[e-1]&&ie(t,n,e)&&oe(t,n,e)&&r.push({x:n+1,y:e}),!t[n-1]?.[e+1]&&re(t,n,e)&&se(t,n,e)&&r.push({x:n,y:e+1}),!t[n+1]?.[e+1]&&ie(t,n,e)&&se(t,n,e)&&r.push({x:n+1,y:e+1}),r):(t[n-1]?.[e]&&t[n][e-1]&&r.push({x:n,y:e}),t[n+1]?.[e]&&t[n][e-1]&&r.push({x:n+1,y:e}),t[n-1]?.[e]&&t[n][e+1]&&r.push({x:n,y:e+1}),t[n+1]?.[e]&&t[n][e+1]&&r.push({x:n+1,y:e+1}),r)}function ae(t,n){return n.map(n=>function(t,n){return Math.atan2(n.y-t.y,n.x-t.x)}(t,n)).sort((t,n)=>t-n)}function ce(t,n,e,r){const i=(r.y-e.y)*(n.x-t.x)-(r.x-e.x)*(n.y-t.y);if(0===i)return null;let o=t.y-e.y,s=t.x-e.x;const u=(r.x-e.x)*o-(r.y-e.y)*s,a=(n.x-t.x)*o-(n.y-t.y)*s;return o=u/i,s=a/i,o>0&&o<1&&s>0&&s<1?{x:t.x+o*(n.x-t.x),y:t.y+o*(n.y-t.y)}:null}function le(t,n,e){const r=[],i=te(t,e,1e4);for(const e of n){const n=ce(t,i,e.start,e.end);n&&r.push(n)}return r.length?r.reduce((n,e)=>ne(t,e)<ne(t,n)?e:n):null}t.FixedPointNumber=Zn;class fe{constructor(){this.subscribers=[]}subscribe(t){return this.subscribers.push(t),()=>{this.subscribers=this.subscribers.filter(n=>n!==t)}}publish(t){this.subscribers.forEach(n=>n(t))}clear(){this.subscribers=[]}getSubscriberCount(){return this.subscribers.length}}t.PubSubChannel=fe,t.AsyncQueue=class{constructor(t,n){this.queue=[],this.running=0,this.onProcessed=new fe,this.onDrained=new fe,this.concurrency=t,this.capacity=n}process(){if(this.running>=this.concurrency)return;const t=this.queue.shift();t&&(this.running++,t().finally(()=>{this.running--,this.process(),this.onProcessed.publish(),0===this.running&&this.onDrained.publish()}))}enqueue(t){if(this.queue.length<this.capacity)return this.queue.push(t),this.process(),Promise.resolve();if(this.onProcessed.getSubscriberCount())throw Error("Queue capacity is full");return new Promise(n=>{this.onProcessed.subscribe(()=>{this.queue.length<this.capacity&&(this.queue.push(t),this.process(),this.onProcessed.clear(),n())})})}drain(){if(0===this.running)return Promise.resolve();if(this.onDrained.getSubscriberCount())throw Error("Already draining");return new Promise(t=>{this.onDrained.subscribe(()=>{this.onDrained.clear(),t()})})}};class he{constructor(){this.forks=new Map}insert(t,n){if(0===t.length)return void(this.handler=n);const e=t[0];let r,i=e;if(e.startsWith(":")&&(i=":",r=e.slice(1)),!this.forks.has(i)){const t=new he;r&&(t.variableName=r),this.forks.set(i,t)}this.forks.get(i).insert(t.slice(1),n)}async handle(t,n,e,r){if(0===t.length)return!!this.handler&&(await this.handler(n,e,r),!0);const i=t[0],o=this.forks.get(i);if(o)return o.handle(t.slice(1),n,e,r);const s=this.forks.get(":");if(s)return s.variableName&&r.set(s.variableName,decodeURIComponent(i)),s.handle(t.slice(1),n,e,r);const u=this.forks.get("*");return!!u&&(r.set("wildcard",t.join("/")),!!u.handler&&(await u.handler(n,e,r),!0))}}t.TrieRouter=he,t.RollingValueProvider=class{constructor(t){this.index=0,this.values=t}current(){return this.values[this.index]}next(){return this.index=(this.index+1)%this.values.length,this.values[this.index]}},t.Solver=class{constructor(){this.status="pending",this.steps=[],this.onStatusChange=async()=>{},this.onStepChange=async()=>{},this.onFinish=async()=>{},this.onError=async()=>{},this.context=new Map}getStatus(){return this.status}createInitialState(){return Object.fromEntries(this.steps.map(t=>[t.name,"pending"]))}setHooks(t){t.onStatusChange&&(this.onStatusChange=t.onStatusChange),t.onStepChange&&(this.onStepChange=t.onStepChange),t.onFinish&&(this.onFinish=t.onFinish),t.onError&&(this.onError=t.onError)}addStep(t){if(this.steps.find(n=>n.name===t.name))throw Error(`Step with name ${t.name} already exists`);this.steps.push(t)}async execute(){if("pending"!==this.status)throw Error(`Cannot execute solver in status ${this.status}`);this.status="in-progress",await this.onStatusChange(this.status);let t=this.createInitialState();for(const n of this.steps)try{if(n.transientSkipStepName){const e=t[n.transientSkipStepName];if("skipped"===e||"failed"===e){t={...t,[n.name]:"skipped"},await this.onStepChange(t);continue}}if(n.precondition&&!await n.precondition(this.context)){t={...t,[n.name]:"skipped"},await this.onStepChange(t);continue}t={...t,[n.name]:"in-progress"},await this.onStepChange(t);for(let t=0;"retry"===await n.action(this.context,t);t++);t={...t,[n.name]:"completed"},await this.onStepChange(t)}catch(e){throw t={...t,[n.name]:"failed"},this.status="failed",await this.onStatusChange(this.status),await this.onStepChange(t),await this.onError(e),e}return this.status="completed",await this.onStatusChange(this.status),await this.onFinish(),this.context}},t.Lock=class{constructor(t){this.queryFunction=t.queryFunction,this.lockFunction=t.lockFunction,this.unlockFunction=t.unlockFunction,this.timeoutMillis=t.timeoutMillis}async couldLock(){const t=await this.queryFunction();try{const n=N(t);if(Date.now()<n+this.timeoutMillis)return new Date(n+this.timeoutMillis)}catch{}return await this.lockFunction(Date.now().toString()),!0}async unlock(){await this.unlockFunction()}},t.Binary={hexToUint8Array:function(t){(t.startsWith("0x")||t.startsWith("0X"))&&(t=t.slice(2));const n=t.length/2,e=new Uint8Array(n);for(let r=0;r<n;r++){const n=parseInt(t.slice(2*r,2*r+2),16);e[r]=n}return e},uint8ArrayToHex:function(t){return Array.from(t).map(t=>t.toString(16).padStart(2,"0")).join("")},binaryToUint8Array:function(t){const n=Math.ceil(t.length/8),e=new Uint8Array(n);for(let r=0;r<n;r++){const n=parseInt(t.slice(8*r,8*r+8),2);e[r]=n}return e},uint8ArrayToBinary:function(t){return Array.from(t).map(t=>t.toString(2).padStart(8,"0")).join("")},base64ToUint8Array:function(t){return Et(t,$t)},uint8ArrayToBase64:function(t){return Mt(t,$t)},base32ToUint8Array:function(t){return Et(t,vt)},uint8ArrayToBase32:function(t){return Mt(t,vt)},log2Reduce:dn,partition:En,concatBytes:mn,numberToUint8:function(t){return new Uint8Array([t])},uint8ToNumber:function(t){return t[0]},numberToUint16:function(t,n){const e=new ArrayBuffer(2);return new DataView(e).setUint16(0,t,"LE"===n),new Uint8Array(e)},uint16ToNumber:function(t,n){return new DataView(t.buffer).getUint16(t.byteOffset,"LE"===n)},numberToUint32:function(t,n){const e=new ArrayBuffer(4);return new DataView(e).setUint32(0,t,"LE"===n),new Uint8Array(e)},uint32ToNumber:function(t,n){return new DataView(t.buffer).getUint32(t.byteOffset,"LE"===n)},numberToUint64:xn,uint64ToNumber:function(t,n){return new DataView(t.buffer).getBigUint64(t.byteOffset,"LE"===n)},numberToUint256:$n,uint256ToNumber:vn,sliceBytes:function(t,n){const e=[];let r=0;for(const i of n)e.push(t.subarray(r,r+i)),r+=i;return e},keccak256:Bn,sha3_256:function(t){return Tn(On(new Array(50).fill(0),kn(t,6)))},proximity:function(t,n){const e=Math.min(t.length,n.length);for(let r=0;r<e;r++){const e=t[r]^n[r];for(let t=0;t<8;t++)if(e>>7-t&1)return 8*r+t}return 8*Math.min(t.length,n.length)},commonPrefix:function(t,n){const e=Math.min(t.length,n.length);for(let r=0;r<e;r++)if(t[r]!==n[r])return t.subarray(0,r);return t.subarray(0,e)},setBit:function(t,n,e,r){const i=Math.floor(n/8),o=n%8;1===e?t[i]|=1<<("BE"===r?7-o:o):t[i]&=~(1<<("BE"===r?7-o:o))},getBit:function(t,n,e){const r=n%8;return t[Math.floor(n/8)]>>("BE"===e?7-r:r)&1},indexOf:function(t,n,e=0){for(let r=e;r<t.length;r++)for(let e=0;e<n.length&&t[r+e]===n[e];e++)if(e===n.length-1)return r;return-1},equals:function(t,n){if(t.length!==n.length)return!1;for(let e=0;e<t.length;e++)if(t[e]!==n[e])return!1;return!0},padStart:jn,padStartToMultiple:function(t,n,e=0){const r=t.length%n;return 0===r?t:jn(t,t.length+n-r,e)},padEnd:Cn,padEndToMultiple:function(t,n,e=0){const r=t.length%n;return 0===r?t:Cn(t,t.length+n-r,e)},xorCypher:function(t,n){const e=new Uint8Array(t.length);for(let r=0;r<t.length;r++)e[r]=t[r]^n[r%n.length];return e},isUtf8:function(t){for(let n=0;n<t.length;n++){const e=t[n];if(!(e<128))if(192==(224&e)){if(n+1>=t.length||128!=(192&t[n+1]))return!1;n+=1}else if(224==(240&e)){if(n+2>=t.length||128!=(192&t[n+1])||128!=(192&t[n+2]))return!1;n+=2}else{if(240!=(248&e))return!1;if(n+3>=t.length||128!=(192&t[n+1])||128!=(192&t[n+2])||128!=(192&t[n+3]))return!1;n+=3}}return!0}},t.Elliptic={privateKeyToPublicKey:function(t){if(t<=0n||t>=Nn)throw new Error("Invalid private key");return Wn(Pn,zn,t,Fn)},compressPublicKey:function(t){const n=t[1]%2n==0n?2:3;return new Uint8Array([n,...$n(t[0],"BE")])},publicKeyFromCompressed:function(t){if(33!==t.length||2!==t[0]&&3!==t[0])throw new Error("Invalid compressed public key");const n=vn(t.slice(1),"BE"),e=Un(Dn(n**3n+7n,Fn),Fn);if(!e)throw Error("Invalid x: does not correspond to a valid curve point");const r=Dn(-e,Fn),i=e%2n==0n;return[n,2===t[0]?i?e:r:i?r:e]},publicKeyToAddress:function(t){const n=new Uint8Array(20),e=Bn(mn($n(t[0],"BE"),$n(t[1],"BE")));return n.set(e.subarray(12)),n},signMessage:function(t,n,e){return qn(vn(Bn(t),"BE"),n,e)},signHash:qn,verifySignature:function(t,n,e,r){const i=Dn(vn(Bn(t),"BE"),Nn),o=In(r,Nn),s=Dn(i*o,Nn),u=Dn(e*o,Nn),a=Wn(Pn,zn,s,Fn),c=Wn(n[0],n[1],u,Fn);return e===Dn(Rn(a[0],a[1],c[0],c[1],Fn)[0],Nn)},recoverPublicKey:function(t,n,e,r){const i=Un(Dn(n**3n+7n,Fn),Fn);if(!i)throw new Error("Invalid r: does not correspond to a valid curve point");const o=i%2n==(27n===r?0n:1n)?i:Fn-i,s=Dn(vn(Bn(t),"BE"),Nn),u=Wn(n,o,e,Fn),a=Wn(Pn,zn,s,Fn),c=Rn(u[0],u[1],a[0],Dn(-a[1],Fn),Fn);return Wn(c[0],c[1],In(n,Nn),Fn)},checksumEncode:function(n){const e=t.Binary.uint8ArrayToHex(n),r=t.Binary.uint8ArrayToHex(t.Binary.keccak256(new Uint8Array([...e].map(t=>t.charCodeAt(0)))));let i="0x";for(let t=0;t<e.length;t++)parseInt(r[t],16)>7?i+=e[t].toUpperCase():i+=e[t];return i}},t.Random={intBetween:s,floatBetween:function(t,n,e=Math.random){return e()*(n-t)+t},chance:a,signed:function(){return 2*Math.random()-1},makeSeededRng:function(t){let n=t,e=3405648695,r=3735928559;return function(){return n+=e,e^=n<<7,n*=r,r^=n<<13,n^=e^r,(n>>>0)/4294967296}},point:function(t,n,e,r=Math.random){let i,o;do{i=s(0,t-1,r),o=s(0,n-1,r)}while(e&&u(e,i,o));return[i,o]},procs:function(t,n=Math.random){const e=Math.floor(t);return a(t-e,n)?e+1:e}},t.Arrays={countUnique:function(t,n,e,r,i){const o=n?t.map(n):t,s={};for(const t of o)s[t]=(s[t]||0)+1;const u=r?ln(s,i?(t,n)=>t[1]-n[1]:(t,n)=>n[1]-t[1]):s;return e?Object.keys(u):u},makeUnique:function(t,n){return Object.values(un(t,n))},splitBySize:function(t,n){const e=[];for(let r=0;r<t.length;r+=n)e.push(t.slice(r,r+n));return e},splitByCount:an,index:un,indexCollection:function(t,n){const e={};for(const r of t){const t=n(r);e[t]||(e[t]=[]),e[t].push(r)}return e},onlyOrThrow:function(t){if(1===t.length)return t[0];throw Error(`Expected exactly one element, actual: ${t.length}`)},onlyOrNull:function(t){return 1===t.length?t[0]:null},firstOrThrow:function(t){if(!t.length)throw Error("Received empty array");return t[0]},firstOrNull:function(t){return t.length>0?t[0]:null},shuffle:i,initialize:function(t,n){const e=[];for(let r=0;r<t;r++)e.push(n(r));return e},initialize2D:function(t,n,e){const r=[];for(let i=0;i<t;i++){r.push([]);for(let t=0;t<n;t++)r[i].push(e)}return r},rotate2D:function(t){const n=[];for(let e=0;e<t[0].length;e++){n.push([]);for(let r=0;r<t.length;r++)n[e].push(t[r][e])}return n},containsShape:function(t,n,e,r){if(e<0||r<0||r+n[0].length>t[0].length||e+n.length>t.length)return!1;for(let i=0;i<n.length;i++)for(let o=0;o<n[i].length;o++)if(void 0!==n[i][o]&&t[e+i][r+o]!==n[i][o])return!1;return!0},glue:function(t,n){const e=[];for(let r=0;r<t.length;r++)e.push(t[r]),r<t.length-1&&(b(n)?e.push(n()):e.push(n));return e},pluck:function(t,n){return t.map(t=>t[n])},pick:c,pickMany:function(t,n,e=Math.random){if(n>t.length)throw new Error(`Count (${n}) is greater than array length (${t.length})`);return o(t,n,e).map(n=>t[n])},pickManyUnique:function(t,n,e,r=Math.random){if(n>t.length)throw new Error(`Count (${n}) is greater than array length (${t.length})`);const i=[];for(;i.length<n;){const n=c(t,r);i.some(t=>e(t,n))||i.push(n)}return i},pickWeighted:function(t,n,e){if(void 0===e&&(e=Math.random()),t.length!==n.length)throw new Error("Array length mismatch");let r=n.reduce((t,n)=>t+n,0);const i=e*r;for(let e=0;e<t.length-1;e++)if(r-=n[e],i>=r)return t[e];return l(t)},pickRandomIndices:o,pickGuaranteed:function(n,e,r,o,s,u=Math.random){const a=n.filter(t=>t!==e&&t!==r),c=[];for(null!==e&&c.push(e);a.length&&c.length<o;){const n=t.Random.intBetween(0,a.length-1,u);s(a[n],c)&&c.push(a[n]),a.splice(n,1)}return i(c,u),{values:c,indexOfGuaranteed:null!==e?c.indexOf(e):-1}},last:l,pipe:f,makePipe:function(t,n){return e=>f(e,t,n)},sortWeighted:function(t,n,e=Math.random){const r=n.map(t=>e()*t),i=[];for(let n=0;n<t.length;n++)i.push([t[n],r[n]]);return i.sort((t,n)=>n[1]-t[1]).map(t=>t[0])},pushAll:K,unshiftAll:function(t,n){Array.prototype.unshift.apply(t,n)},filterAndRemove:function(t,n){const e=[];for(let r=t.length-1;r>=0;r--)n(t[r])&&e.push(t.splice(r,1)[0]);return e},merge:function(t,n){const e=Object.keys(n);for(const r of e)Array.isArray(n[r])&&Array.isArray(t[r])&&K(t[r],n[r])},empty:function(t){return t.splice(0,t.length),t},pushToBucket:function(t,n,e){t[n]||(t[n]=[]),t[n].push(e)},unshiftAndLimit:function(t,n,e){for(t.unshift(n);t.length>e;)t.pop()},atRolling:function(t,n){let e=n%t.length;return e<0&&(e+=t.length),t[e]},group:fn,createOscillator:function(t){let n=0;return{next:()=>t[n++%t.length]}},organiseWithLimits:function(t,n,e,r,i){const o={};for(const t of Object.keys(n))o[t]=[];o[r]=[],i&&(t=t.sort(i));for(const i of t){const t=i[e],s=n[t]?t:r;o[s].length>=n[s]?o[r].push(i):o[s].push(i)}return o},tickPlaybook:function(t){if(0===t.length)return null;const n=t[0];return n.ttlMax?--n.ttl<=0&&t.shift():n.ttlMax=n.ttl,{progress:(n.ttlMax-n.ttl)/n.ttlMax,data:n.data}},getArgument:Qn,getBooleanArgument:function(t,n,e,r){const i=t.some(t=>t.endsWith("-"+n)),o=Qn(t,n,e,r);if(!o&&i)return!0;if(!o&&!i)return null;if(["true","1","yes","y","on"].includes(o.toLowerCase()))return!0;if(["false","0","no","n","off"].includes(o.toLowerCase()))return!1;throw Error(`Invalid boolean argument ${n}: ${o}`)},getNumberArgument:function(t,n,e,r){const i=Qn(t,n,e,r);if(!i)return null;try{return en(i)}catch{throw new Error(`Invalid number argument ${n}: ${i}`)}},requireStringArgument:_n,requireNumberArgument:function(t,n,e,r){const i=_n(t,n,e,r);try{return en(i)}catch{throw new Error(`Invalid argument ${n}: ${i}`)}},bringToFront:function(t,n){const e=[...t];return Gn(e,n),e},bringToFrontInPlace:Gn,findInstance:function(t,n){const e=t.find(t=>t instanceof n);return gn.of(e)},filterInstances:function(t,n){return t.filter(t=>t instanceof n)},interleave:function(t,n){const e=[],r=Math.max(t.length,n.length);for(let i=0;i<r;i++)t[i]&&e.push(t[i]),n[i]&&e.push(n[i]);return e},toggle:function(t,n){return t.includes(n)?t.filter(t=>t!==n):[...t,n]},createHierarchy:function(t,n,e,r,i=!1){const o=new Map,s=[];t.forEach(t=>{const e=new pn(t);o.set(t[n],e)}),t.forEach(t=>{const r=o.get(t[n]);if(!r)return;const i=t[e];if(i){const t=o.get(i);t&&t.children.push(r)}else s.push(r)});const u=t=>{t.children.sort((t,n)=>{const e=t.value[r],o=n.value[r];return i?o-e:e-o}),t.children.forEach(u)};return s.forEach(u),s},multicall:function(t){return()=>t.forEach(t=>t())},maxBy:function(t,n){return t.reduce((t,e)=>n(t)>n(e)?t:e)},minBy:function(t,n){return t.reduce((t,e)=>n(t)<n(e)?t:e)},allIndexOf:function(t,n){const e=[];return t.forEach((t,r)=>{n(t)&&e.push(r)}),e}},t.System={sleepMillis:r,forever:async function(t,n,e){for(;;){try{await t()}catch(t){e&&e("Error in forever",t)}await r(n)}},scheduleMany:function(t,n){for(let e=0;e<t.length;e++){const r=t[e],i=n[e],o=Math.max(0,i.getTime()-Date.now());setTimeout(r,o)}},waitFor:async function(t,n){let e=n.requiredConsecutivePasses||1,i=0;for(let o=0;o<n.attempts;o++){try{if(await t()){if(i++,i>=e)return}else i=0}catch{i=0}o<n.attempts-1&&await r(n.waitMillis)}throw Error("Timed out waiting for predicate")},expandError:function(t,n){if(x(t))return t;const e=Object.keys(t);t.message&&!e.includes("message")&&e.push("message");const r=e.map(n=>`${n}: ${t[n]}`).join("; ");return n&&t.stack?r+"\\n"+t.stack:r},runAndSetInterval:function(t,n){t();const e=setInterval(()=>{t()},n);return()=>clearInterval(e)},whereAmI:function(){const t=globalThis.process;return t?!0===t.browser?"browser":"node":"browser"},withRetries:async function(t,n,e,i,o,s){let u=null;for(let a=0;a<=n;a++)try{return await t()}catch(t){if(u=t,a===n)break;const c=e+a/(n-1)*(i-e);o&&o("Error in withRetries, retrying",{attempt:a+1,allowedFailures:n,delayMillis:c,error:t}),s&&s(),await r(c)}throw u}},t.Numbers={make:en,sum:function(t){return t.reduce((t,n)=>t+n,0)},average:function(t){return t.reduce((t,n)=>t+n,0)/t.length},median:function(t){const n=[...t].sort((t,n)=>t-n),e=Math.floor(n.length/2);return n.length%2==0?(n[e]+n[e-1])/2:n[e]},getDistanceFromMidpoint:function(t,n){return t-(n-1)/2},clamp:rn,range:V,interpolate:function(t,n,e){return t+(n-t)*e},createSequence:function(){let t=0;return{next:()=>t++}},increment:function(t,n,e){const r=t+n;return r>e?e:r},decrement:function(t,n,e){const r=t-n;return r<e?e:r},format:function(t,n){const e=n?.longForm??!1,r=n?.unit?` ${n.unit}`:"",i=e?tn:nn,o=n?.precision??1;if(t<Yt[0])return`${t}${r}`;for(let n=0;n<Yt.length-1;n++)if(t<Yt[n+1])return`${(t/Yt[n]).toFixed(o)}${e?" ":""}${i[n]}${r}`;return`${(t/Yt[Yt.length-1]).toFixed(o)}${e?" ":""}${i[Yt.length-1]}${r}`},fromDecimals:function(t,n,e){let r=t.length-n;if(r<=0)return"0."+"0".repeat(-r)+t+(e?" "+e:"");let i=t.substring(0,r);return""===i&&(i="0"),i+"."+t.substring(r)+(e?" "+e:"")},makeStorage:function(t,n=1024){const e=parseFloat(t);if(isNaN(e))throw Error("makeStorage got NaN for input");const r=t.replace(/^-?[0-9.]+/,"").trim().toLowerCase(),i=""===r?0:Kt[r];if(null==i)throw Error(`Unknown unit: "${r}"`);return Math.ceil(e*n**i)},asMegabytes:function(t){return t/1024/1024},convertBytes:function(t,n=1024){return t>=n*n*n*n?(t/n/n/n/n).toFixed(3)+" TB":t>=n*n*n?(t/n/n/n).toFixed(3)+" GB":t>=n*n?(t/n/n).toFixed(3)+" MB":t>=n?(t/n).toFixed(3)+" KB":t+" B"},hexToRgb:function(t){const n=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(t.toLowerCase());if(!n)throw new Error("Invalid hex color: "+t);return[parseInt(n[1],16),parseInt(n[2],16),parseInt(n[3],16)]},rgbToHex:function(t){return"#"+t.map(t=>t.toString(16).padStart(2,"0")).join("")},haversineDistanceToMeters:function(t,n,e,r){const i=t*Math.PI/180,o=e*Math.PI/180,s=(e-t)*Math.PI/180,u=(r-n)*Math.PI/180,a=Math.sin(s/2)*Math.sin(s/2)+Math.cos(i)*Math.cos(o)*Math.sin(u/2)*Math.sin(u/2);return 2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a))*6371e3},roundToNearest:p,formatDistance:function(t){return t>1e3?(t/1e3).toFixed(0)+" km":t>=500?p(t,100)+" m":t>=100?p(t,50)+" m":p(t,10)+" m"},triangularNumber:function(t){return t*(t+1)/2},searchFloat:function(t){const n=t.match(/-?\\d+(\\.\\d+)?/);if(!n)throw Error("No float found in "+t);return parseFloat(n[0])},binomialSample:function(t,n,e=Math.random){const r=t*n,i=Math.sqrt(t*n*(1-n)),o=(e()+e()+e()+e()+e()+e()-3)*Math.SQRT2,s=Math.round(r+i*o);return Math.max(0,Math.min(t,s))},toSignificantDigits:function(t,n){if(!t.includes("."))return t;if(0===parseFloat(t))return"0";const[e,r]=t.split("."),i=e.replace("-",""),o=i.length;if(o>=n)return e;if("0"!==i){const t=n-o,i=r.slice(0,t);return/[1-9]/.test(i)?`${e}.${i.replace(/0+$/,"")}`:e}const s=n+(r.match(/^0*/)?.[0].length??0);return`${e}.${r.slice(0,s)}`}},t.Promises={raceFulfilled:async function(t){return e(Promise.all(t.map(e)))},invert:e,runInParallelBatches:async function(t,n=1){const e=an(t,n),r=[],i=e.map(async t=>{for(const n of t)r.push(await n())});return await Promise.all(i),r}},t.Dates={getTimestamp:function(t,n){const e=new Date(n?.now||Date.now()),r=n?.labels||Ft,i=E(t)?t:new Date(t);if(Ut(e)===Ut(i))return r.today(i.getUTCHours(),i.getUTCMinutes(),i.getUTCHours()>12);if(Ut(e)-Ut(i)===1)return r.yesterday();const o=qt(i);return Ut(e)-Ut(i)<7?r[o.day]():r.weeks(Math.round((e.getTime()-i.getTime())/6048e5))},getTimeDelta:Pt,secondsToHumanTime:function(t,n=Nt){return Pt(0,{now:1e3*t,labels:n})},countCycles:function(t,n,e){const r=(e?.now??Date.now())-t;return{cycles:Math.floor(r/n),remaining:n/(e?.precision??1)-Math.ceil(r%n/(e?.precision??1))}},isoDate:function(t){return(t||new Date).toISOString().slice(0,10)},throttle:function(t,n){return(!zt[t]||Date.now()>zt[t])&&(zt[t]=Date.now()+n,!0)},timeSince:function(t,n,e){return n=E(n)?n.getTime():n,((e=e?E(e)?e.getTime():e:Date.now())-n)/Lt[t]},dateTimeSlug:function(t){return(t||new Date).toISOString().slice(0,19).replace(/T|:/g,"-")},unixTimestamp:function(t){return Math.ceil((t||Date.now())/1e3)},fromUtcString:function(t){const n=new Date(t);return new Date(n.getTime()-6e4*n.getTimezoneOffset())},fromMillis:function(t){return new Date(t)},getProgress:function(t,n,e,r){r||(r=Date.now());const i=r-t,o=i/n,s=o*e;return{deltaMs:i,progress:n/e,baseTimeMs:o,totalTimeMs:s,remainingTimeMs:s-i}},humanizeTime:It,humanizeProgress:function(t){return`[${Math.floor(100*t.progress)}%] ${It(t.deltaMs)} out of ${It(t.totalTimeMs)} (${It(t.remainingTimeMs)} left) [${Math.round(t.baseTimeMs)} ms each]`},createTimeDigits:Dt,mapDayNumber:Wt,getDayInfoFromDate:qt,getDayInfoFromDateTimeString:function(t){return qt(new Date(t))},seconds:function(t){return 1e3*t},minutes:function(t){return 6e4*t},hours:function(t){return 36e5*t},days:function(t){return 864e5*t},make:function(t){const n=parseFloat(t);if(isNaN(n))throw Error("makeDate got NaN for input");const e=t.replace(/^-?[0-9.]+/,"").trim().toLowerCase(),r=""===e?1:Ht[e];if(!r)throw Error(`Unknown unit: "${e}"`);return Math.ceil(n*r)},normalizeTime:function(t){let[n,e]=t.split(":");$(parseInt(n,10))||(n="0"),$(parseInt(e,10))||(e="0");let r=rn(N(n),0,23),i=rn(N(e),0,59);return`${Dt(r)}:${Dt(i)}`},absoluteDays:Ut},t.Objects={safeParse:function(t){try{return JSON.parse(t)}catch{return null}},deleteDeep:function(t,n){const e=X(n,"."),r=Y(n,".");if(!e||!r)return;const i=h(t,e);i&&delete i[r]},getDeep:h,setDeep:g,incrementDeep:function(t,n,e=1){const r=h(t,n)||0;return g(t,n,r+e),r},ensureDeep:function(t,n,e){return h(t,n)||g(t,n,e)},replaceDeep:function(t,n,e){const r=h(t,n);if(!r)throw new Error("Key \'"+n+"\' does not exist.");return g(t,n,e),r},getFirstDeep:function(t,n,e){for(const e of n){const n=h(t,e);if(n)return n}if(e){const n=Object.values(t);if(n.length)return n[0]}return null},deepMergeInPlace:q,deepMerge2:function(t,n){const e={};return q(e,t),q(e,n),e},deepMerge3:function(t,n,e){const r={};return q(r,t),q(r,n),q(r,e),r},mapAllAsync:async function(t,n){const e=[];for(const r of t)e.push(await n(r));return e},cloneWithJson:function(t){return JSON.parse(JSON.stringify(t))},sortObject:Zt,sortArray:Qt,sortAny:_t,deepEquals:Gt,deepEqualsEvery:function(...t){for(let n=1;n<t.length;n++)if(!Gt(t[n-1],t[n]))return!1;return!0},runOn:function(t,n){return n(t),t},ifPresent:function(t,n){t&&n(t)},zip:H,zipSum:function(t){return H(t,(t,n)=>t+n)},removeEmptyArrays:function(t){for(const n of Object.keys(t))(y(t[n])||Array.isArray(t[n])&&t[n].every(t=>null==t))&&delete t[n];return t},removeEmptyValues:function(t){for(const n of Object.entries(t))(null===n[1]||void 0===n[1]||x(n[1])&&M(n[1]))&&delete t[n[0]];return t},flatten:function(t,n=!1,e){return sn({},t,e||"",!1,n)},unflatten:function t(n){if(!d(n))return n;const e=Array.isArray(n)?[]:{};for(const[r,i]of Object.entries(n))Array.isArray(i)?g(e,r,i.map(n=>t(n))):g(e,r,i);return e},match:function(t,n,e){return n[t]?n[t]:e},sort:ln,map:function(t,n){const e={};for(const r of Object.entries(t))e[r[0]]=n(r[1]);return e},mapIterable:function(t,n){const e=[];let r=0;for(const i of t)e.push(n(i,r++));return e},filterKeys:function(t,n){const e={};for(const[r,i]of Object.entries(t))n(r)&&(e[r]=i);return e},filterValues:function(t,n){const e={};for(const[r,i]of Object.entries(t))n(i)&&(e[r]=i);return e},rethrow:async function(t,n){try{return await t()}catch{throw n}},setSomeOnObject:function(t,n,e){null!=e&&(t[n]=e)},setSomeDeep:function(t,n,e,r){const i=h(e,r);null!=i&&g(t,n,i)},flip:function(t){const n={};for(const[e,r]of Object.entries(t))n[r]=e;return n},getAllPermutations:function(t){const n=Object.keys(t),e=n.map(n=>t[n].length),r=e.reduce((t,n)=>t*n);let i=1;const o=[1];for(let t=0;t<e.length-1;t++)i*=e[t],o.push(i);const s=[];for(let e=0;e<r;e++){const r={};for(let i=0;i<n.length;i++){const s=t[n[i]],u=Math.floor(e/o[i])%s.length;r[n[i]]=s[u]}s.push(r)}return s},countTruthyValues:function(t){return Object.values(t).filter(t=>t).length},transformToArray:function(t){const n=[],e=Object.keys(t),r=t[e[0]].length;for(let i=0;i<r;i++){const r={};for(const n of e)r[n]=t[n][i];n.push(r)}return n},setMulti:function(t,n,e){for(const r of t)r[n]=e},incrementMulti:function(t,n,e=1){for(const r of t)r[n]+=e},createBidirectionalMap:function(){return{map:new Map,keys:[]}},createTemporalBidirectionalMap:function(){return{map:new Map,keys:[]}},pushToBidirectionalMap:hn,unshiftToBidirectionalMap:function(t,n,e,r=100){if(t.map.has(n)){const e=t.keys.indexOf(n);t.keys.splice(e,1)}if(t.map.set(n,e),t.keys.unshift(n),t.keys.length>r){const n=t.keys.shift();n&&t.map.delete(n)}},addToTemporalBidirectionalMap:function(t,n,e,r,i=100){hn(t,n,{validUntil:Date.now()+r,data:e},i)},getFromTemporalBidirectionalMap:function(t,n){const e=t.map.get(n);return e&&e.validUntil>Date.now()?e.data:null},createStatefulToggle:function(t){let n;return e=>{const r=e===t&&n!==t;return n=e,r}},diffKeys:function(t,n){const e=Object.keys(t),r=Object.keys(n);return{uniqueToA:e.filter(t=>!r.includes(t)),uniqueToB:r.filter(t=>!e.includes(t))}},pickRandomKey:Xt,mapRandomKey:function(t,n){const e=Xt(t);return t[e]=n(t[e]),e},fromObjectString:function(t){return t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace(/\\r\\n/g,"\\n")).replace(/(\\w+)\\((.+)\\)/g,(t,n,e)=>`${n}(${e.replaceAll(",","&comma;")})`)).replace(/(,)(\\s+})/g,"$2")).replace(/\\.\\.\\..+?,/g,"")).replace(/({\\s+)([a-zA-Z]\\w+),/g,"$1$2: \'$2\',")).replace(/(,\\s+)([a-zA-Z]\\w+),/g,"$1$2: \'$2\',")).replace(/:(.+)\\?(.+):/g,(t,n,e)=>`: (${n.trim()} && ${e.trim()}) ||`)).replace(/([a-zA-Z0-9]+)( ?: ?{)/g,\'"$1"$2\')).replace(/([a-zA-Z0-9]+) ?: ?(.+?)(,|\\n|})/g,(t,n,e,r)=>`"${n}":"${e.trim()}"${r}`)).replace(/("\'|\'")/g,\'"\')).replaceAll("&comma;",","),JSON.parse(t)},toQueryString:Ct,parseQueryString:function(t){const n={},e=t.split("&");for(const t of e){const[e,r]=t.split("=");e&&r&&(n[e]=decodeURIComponent(r))}return n},hasKey:function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},selectMax:function(t,n){let e=null,r=-1/0;for(const[i,o]of Object.entries(t)){const t=n(o);t>r&&(r=t,e=i)}return e?[e,t[e]]:null},reposition:function(t,n,e,r){const i=t.find(t=>t[n]===e),o=t.find(t=>t[n]===e+r);i&&o?(i[n]=e+r,o[n]=e):i&&(i[n]=e+r),t.sort((t,e)=>F(t[n])-F(e[n])),t.forEach((t,e)=>t[n]=e+1)},unwrapSingleKey:function(t){const n=Object.keys(t);if(1===n.length)return t[n[0]];throw new Error("Expected object to have a single key")},parseKeyValues:function(t,n=":"){return Object.fromEntries(t.map(t=>tt(t,n)).map(t=>t[0]&&t[1]?[it(t[0]),it(t[1])]:null).filter(t=>t))},errorMatches:function(t,n){if(!t)return!1;const e=t.message;return"string"==typeof e&&e.includes(n)}},t.Types={isFunction:b,isObject:d,isStrictlyObject:m,isEmptyArray:y,isEmptyObject:function(t){return m(t)&&0===Object.keys(t).length},isUndefined:w,isString:x,isNumber:$,isBoolean:v,isDate:E,isBlank:M,isId:A,isIntegerString:S,isHexString:k,isUrl:z,isBigint:L,isNullable:function(t,n){return null==n||t(n)},asString:I,asHexString:function(t,n){if(!k(t))throw new TypeError(`Expected hex string${n?.name?` for ${n.name}`:""}, got: `+t);if(n?.strictPrefix&&!t.startsWith("0x")&&!t.startsWith("0X"))throw new TypeError(`Expected hex string with 0x prefix${n?.name?` for ${n.name}`:""}, got: `+t);const e=t.replace(/^0x/i,"");if(e.length%2!=0&&!n?.uneven)throw RangeError(`Expected even number of hex digits${n?.name?` for ${n.name}`:""}; got: `+t);if(n&&n.byteLength&&e.length!==2*n.byteLength)throw RangeError(`Expected hex string${n?.name?` for ${n.name}`:""} of byte length ${n.byteLength}; got: `+e);return`0x${e}`},asSafeString:function(t,n){if(!I(t,n).split("").every(t=>"_"===t||ct(t)))throw new TypeError(`Expected safe string${n?.name?` for ${n.name}`:""}, got: `+t);return t},asIntegerString:function(t,n){if(!S(t))throw new TypeError(`Expected integer string${n?.name?` for ${n.name}`:""}, got: `+t);const e=BigInt(t);if(n&&(n.min&&e<n.min||n.max&&e>n.max))throw RangeError(`Expected integer string${n?.name?` for ${n.name}`:""} in range: ${n.min??"-inf"}..${n.max??"inf"}; got: `+e);return t},asNumber:F,asFunction:function(t,n){if(!b(t))throw new TypeError(`Expected function${n?.name?` for ${n.name}`:""}, got: `+t);return t},asInteger:N,asBoolean:function(t,n){if("true"===t)return!0;if("false"===t)return!1;if(!v(t))throw new TypeError(`Expected boolean${n?.name?` for ${n.name}`:""}, got: `+t);return t},asDate:function(t,n){if(!E(t))throw new TypeError(`Expected date${n?.name?` for ${n.name}`:""}, got: `+t);return t},asNullableString:function(t){return M(t)?null:t},asEmptiableString:function(t,n){if(!x(t))throw new TypeError(`Expected string${n?.name?` for ${n.name}`:""}, got: `+t);return t},asId:function(t,n){if(A(t))return t;const e=parseInt(t,10);if(!A(e))throw new TypeError(`Expected id${n?.name?` for ${n.name}`:""}, got: `+t);return e},asTime:function(t,n){if(!x(t))throw new TypeError(`Expected time${n?.name?` for ${n.name}`:""}, got: `+t);const e=t.split(":");if(2!==e.length)throw new TypeError(`Expected time${n?.name?` for ${n.name}`:""}, got: `+t);const r=parseInt(e[0],10),i=parseInt(e[1],10);if(!$(r)||!$(i)||r<0||r>23||i<0||i>59)throw new TypeError(`Expected time, got${n?.name?` for ${n.name}`:""}: `+t);return`${String(r).padStart(2,"0")}:${String(i).padStart(2,"0")}`},asArray:function(t,n){if(!Array.isArray(t))throw new TypeError(`Expected array${n?.name?` for ${n.name}`:""}, got: `+t);return t},asObject:P,asNullableObject:function(t,n){return null===t?null:P(t,n)},asStringMap:function(t,n){const e=P(t,n);for(const r of Object.keys(e))if(!x(e[r]))throw new TypeError(`Expected string map${n?.name?` for ${n.name}`:""}, got: `+t);return e},asNumericDictionary:function(t,n){const e=P(t),r=Object.keys(e),i=Object.values(e);if(!r.every(x)||!i.every($))throw new TypeError(`Expected numeric dictionary${n?.name?` for ${n.name}`:""}, got: `+t);return e},asUrl:function(t,n){if(!z(t))throw new TypeError(`Expected url${n?.name?` for ${n.name}`:""}, got: `+t);return t},asBigint:R,asEmptiable:function(t,n){return""===n?void 0:t(n)},asNullable:function(t,n){return null==n?null:t(n)},asOptional:function(t,n){return null==n?void 0:t(n)},enforceObjectShape:W,enforceArrayShape:function(t,n){return t.every(t=>W(t,n))},isPng:yn,isJpg:wn,isWebp:bn,isImage:function(t){return yn(t)||wn(t)||bn(t)}},t.Strings={tokenizeByCount:function(t,n){return cn(t,Math.ceil(t.length/n))},tokenizeByLength:cn,searchHex:function(t,n){const e=new RegExp(`[0-9a-f]{${n}}`,"i"),r=t.match(e);return r?r[0]:null},searchSubstring:function(t,n,e=O){const r=nt(t,e);for(const t of r)if(n(t))return t;return null},randomHex:function(t,n=Math.random){let e="";for(let r=0;r<t;r++)e+=D[Math.floor(16*n())];return e},randomLetter:function(t,n=Math.random){let e="";for(let r=0;r<t;r++)e+=T[Math.floor(26*n())];return e},randomAlphanumeric:function(t,n=Math.random){let e="";for(let r=0;r<t;r++)e+=B[Math.floor(62*n())];return e},randomRichAscii:function(t,n=Math.random){let e="";for(let r=0;r<t;r++)e+=j[Math.floor(89*n())];return e},randomUnicode:function(t,n=Math.random){let e="";for(let r=0;r<t;r++)e+=C[Math.floor(n()*C.length)];return e},includesAny:function(t,n){return n.some(n=>t.includes(n))},slugify:J,normalForm:function(t){return J(t).replaceAll("-","")},enumify:function(t){return J(t).replace(/-/g,"_").toUpperCase()},escapeHtml:function(t){return t.replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")},decodeHtmlEntities:function(t){let n=t.replace(/&#(\\d+);/g,(t,n)=>String.fromCharCode(n)).replace(/&#x(\\d+);/g,(t,n)=>String.fromCharCode(parseInt(n,16)));for(const[t,e]of Object.entries(Q))n=n.replaceAll(t,e);return n},after:G,afterLast:Y,before:_,beforeLast:X,betweenWide:function(t,n,e){const r=X(t,e);return r?G(r,n):null},betweenNarrow:function(t,n,e){const r=G(t,n);return r?_(r,e):null},getPreLine:function(t){return t.replace(/ +/g," ").replace(/^ /gm,"")},containsWord:Ot,containsWords:function(t,n,e){return"any"===e?n.some(n=>Ot(t,n)):n.every(n=>Ot(t,n))},joinUrl:Jt,getFuzzyMatchScore:Z,sortByFuzzyScore:function(t,n){return t.filter(t=>Z(t,n)).sort((t,e)=>Z(e,n)-Z(t,n))},splitOnce:tt,splitAll:nt,randomize:function(t,n=Math.random){return t.replace(/\\{(.+?)\\}/g,(t,e)=>c(e.split("|"),n))},expand:function t(n){const e=n.match(/\\{(.+?)\\}/);if(!e||!e.index)return[n];const r=e[1].split(","),i=n.slice(0,e.index),o=n.slice(e.index+e[0].length);let s=[];for(const n of r){const e=t(i+n+o);s=s.concat(e)}return s},shrinkTrim:it,capitalize:ot,decapitalize:st,csvEscape:function(t){return t.match(/"|,/)?`"${t.replace(/"/g,\'""\')}"`:t},parseCsv:function(t,n=",",e=\'"\'){const r=[];let i="",o=!1;const s=t.split("");for(const t of s)t!==n||o?t!==e||(i||o)&&!o?i+=t:o=!o:(r.push(i),i="");return r.push(i),r},surroundInOut:function(t,n){return n+t.split("").join(n)+n},getExtension:et,getBasename:rt,normalizeEmail:function(t){let[n,e]=t.split("@");n=it(n.replaceAll(".","").toLowerCase()).replaceAll(" ","");const[r]=n.split("+");if(!r||!e||-1===e.indexOf(".")||e.indexOf(".")===e.length-1)throw new Error("Invalid email");return e=it(e.toLowerCase()).replaceAll(" ",""),`${r}@${e}`},normalizeFilename:function(t){const n=rt(t),e=et(t);return e?`${n}.${e}`:n},parseFilename:function(t){const n=rt(t),e=et(t);return{basename:n,extension:e,filename:e?`${n}.${e}`:n}},camelToTitle:function(t){return ot(t.replace(/([A-Z])/g," $1"))},slugToTitle:function(t){return t.split("-").map(ot).join(" ")},slugToCamel:function(t){return st(t.split("-").map(ot).join(""))},joinHumanly:function(t,n=", ",e=" and "){return t&&t.length?1===t.length?t[0]:2===t.length?`${t[0]}${e}${t[1]}`:`${t.slice(0,t.length-1).join(n)}${e}${t[t.length-1]}`:""},findWeightedPair:bt,extractBlock:xt,extractAllBlocks:function(t,n){const e=[];let r=n.wordBoundary?dt(t,[`${n.opening} `,`${n.opening}\\n`],n.start||0):t.indexOf(n.opening,n.start||0);for(;;){if(-1===r)return e;const i=xt(t,{...n,start:r});if(!i)return e;e.push(i),r=n.wordBoundary?dt(t,[`${n.opening} `,`${n.opening}\\n`],r+i.length):t.indexOf(n.opening,r+i.length)}},replaceBlocks:function(n,e,r){let i=0;for(;;){const o=t.Strings.extractBlock(n,{...r,start:i});if(!o)return n;const s=e(o);i=n.indexOf(o,i)+s.length,n=n.replace(o,s)}},indexOfEarliest:dt,lastIndexOfBefore:wt,parseHtmlAttributes:function(t){const n={},e=t.match(/([a-z\\-]+)="([^"]+)"/g);if(e)for(const t of e){const[e,r]=tt(t,"=");n[e]=r.slice(1,r.length-1)}return n},readNextWord:Tt,readWordsAfterAll:function(t,n,e=[]){const r=pt(t,n),i=[];for(const o of r)i.push(Tt(t,o+n.length,e));return i},resolveVariables:function(t,n,e="$",r=":"){for(const i in n)t=Bt(t,i,n[i],e,r);return t=jt(t)},resolveVariableWithDefaultSyntax:Bt,resolveRemainingVariablesWithDefaults:jt,isLetter:ut,isDigit:at,isLetterOrDigit:ct,isValidObjectPathCharacter:function(t){return ct(t)||"."===t||"["===t||"]"===t||"_"===t},insert:function(t,n,e,r,i){return t.slice(0,n)+r+t.slice(n,n+e)+i+t.slice(n+e)},indexOfRegex:ht,allIndexOf:pt,lineMatches:gt,linesMatchInOrder:function(t,n,e=!0){let r=0;for(const i of n){let n=!1;for(;!n&&r<t.length;)gt(t[r],i,e)&&(n=!0),r++;if(!n)return!1}return!0},represent:function t(n,e="json",r=0){if(n&&b(n.represent)){const t=n.represent();if(x(t))return"json"===e&&0===r?JSON.stringify(t):t}if(d(n,!1)){if(r>1)return"[object Object]";if("json"===e){if(Array.isArray(n)){const e=n.map(n=>t(n,"json",r+1));return 0===r?JSON.stringify(e):e}const e={};n.message&&(e.message=t(n.message,"json",r+1));for(const[i,o]of Object.entries(n))e[i]=t(o,"json",r+1);return 0===r?JSON.stringify(e):e}if("key-value"===e){const e=Object.keys(n);return n.message&&!e.includes("message")&&e.unshift("message"),e.map(e=>`${e}=${JSON.stringify(t(n[e],"json",r+1))}`).join(" ")}}return w(n)&&(n="undefined"),0===r?JSON.stringify(n):n},resolveMarkdownLinks:function(t,n){let e=t.indexOf("](");for(;-1!==e;){const r=wt(t,"[",e),i=t.indexOf(")",e);if(-1!==r&&-1!==i){const[e,o]=t.slice(r+1,i).split("]("),s=n(e,o);t=t.slice(0,r)+s+t.slice(i+1)}e=t.indexOf("](",e+1)}return t},buildUrl:function(t,n,e){return Jt([t,n])+Ct(e||{})},isChinese:function(t){return/^[\\u4E00-\\u9FA5]+$/.test(t)},replaceBetweenStrings:function(t,n,e,r,i=!0){const o=t.indexOf(n),s=t.indexOf(e,o+n.length);if(-1===o||-1===s)throw Error("Start or end not found");return i?t.substring(0,o+n.length)+r+t.substring(s):t.substring(0,o)+r+t.substring(s+e.length)},describeMarkdown:function(t){let n="p";return t.startsWith("#")?(n="h1",t=t.slice(1).trim()):t.startsWith("-")&&(n="li",t=t.slice(1).trim()),{type:n,isCapitalized:t[0]===t[0].toUpperCase(),hasPunctuation:/[.?!]$/.test(t),endsWithColon:/:$/.test(t)}},isBalanced:function(t,n="(",e=")"){let r=0,i=0;for(;i<t.length;)if(t.startsWith(n,i)?(r++,i+=n.length):t.startsWith(e,i)?(r--,i+=e.length):i++,r<0)return!1;return n===e?r%2==0:0===r},textToFormat:function(t){let n=(t=t.normalize("NFD").replace(/[\\u0300-\\u036f]/g,"")).length;for(;(t=t.replace(/(\\w+)[\\s,\']+\\w+/g,"$1")).length!==n;)n=t.length;return t=(t=(t=t.replaceAll(/[A-Z][a-zA-Z0-9]*/g,"A")).replaceAll(/[a-z][a-zA-Z0-9]*/g,"a")).replaceAll(/[\\u4E00-\\u9FA5]+/g,"Z")},splitFormatting:function(t,n){const e=[];let r=0;for(;r<t.length;){const i=t.indexOf(n,r);if(-1===i){e.push({string:t.slice(r),symbol:null});break}const o=t.indexOf(n,i+n.length);if(i>r&&-1!==o&&e.push({string:t.slice(r,i),symbol:null}),-1===o){e.push({string:t.slice(r),symbol:null});break}e.push({string:t.slice(i+n.length,o),symbol:n}),r=o+n.length}return e},splitHashtags:function(t){const n=[];let e=0;for(;e<t.length;){const r=yt(t,e);if(-1===r){n.push({string:t.slice(e),symbol:null});break}const i=mt(t,r+1);if(-1===i){n.push({string:t.slice(e,r),symbol:null}),n.push({string:t.slice(r+1),symbol:"#"});break}r>e&&n.push({string:t.slice(e,r),symbol:null}),n.push({string:t.slice(r+1,i),symbol:"#"}),e=i}return n},splitUrls:function(t){const n=[];let e=0;for(;e<t.length;){const r=dt(t,["http://","https://"],e);if(-1===r){n.push({string:t.slice(e),symbol:null});break}const i=dt(t,[" ","\\n"],r);if(-1===i){r>e&&n.push({string:t.slice(e,r),symbol:null}),n.push({string:t.slice(r),symbol:"http"});break}r>e&&n.push({string:t.slice(e,r),symbol:null}),n.push({string:t.slice(r,i),symbol:"http"}),e=i}return n},route:function(t,n){const e=t.split("/").filter(t=>t),r=n.split("/").filter(t=>t);if(e.length!==r.length)return null;const i={};for(let t=0;t<e.length;t++){const n=e[t];if(n.startsWith(":"))i[n.slice(1)]=r[t];else if(n!==r[t])return null}return i},explodeReplace:At,generateVariants:function(n,e,r,i=Math.random){const o=t.Arrays.shuffle(e.map(n=>({variants:t.Arrays.shuffle(n.variants.map(t=>t),i),avoid:n.avoid})),i),s=[];for(const t of o){const e=t.variants.filter(n=>n!==t.avoid),i=e.find(t=>n.includes(t));if(i&&(K(s,At(n,i,e)),s.length>=r))break}if(s.length<r)for(const t of o){const e=t.variants.find(t=>n.includes(t));if(e&&(K(s,At(n,e,t.variants)),s.length>=r))break}return s.slice(0,r)},replaceWord:function(t,n,e,r=!1){const i=new RegExp(r?`(?<=\\\\s|^)${n}(?=\\\\s|$)`:`\\\\b${n}\\\\b`,"g");return t.replace(i,e)},replacePascalCaseWords:function(t,n){return t.replace(/\\b[A-Z][a-zA-Z0-9]*\\b/g,t=>t.toUpperCase()===t?t:n(t))},stripHtml:function(t){return t.replace(/<[^>]*>/g,"")},breakLine:St,measureTextWidth:function(t,n={}){return[...t].reduce((t,e)=>t+(n[e]||1),0)},toLines:function(t,n,e={}){const r=[];let i="",o=0;for(let s=0;s<t.length;s++){const u=t[s];if(i+=u,o+=e[u]||1,o>n){const{line:t,rest:n}=St(i);r.push(t),i=n,o=n.split("").map(t=>e[t]||1).reduce((t,n)=>t+n,0)}}return i&&r.push(i),r},levenshteinDistance:function(t,n){const e=[];for(let n=0;n<=t.length;n++)e[n]=[n];for(let t=0;t<=n.length;t++)e[0][t]=t;for(let r=1;r<=t.length;r++)for(let i=1;i<=n.length;i++){const o=t[r-1]===n[i-1]?0:1;e[r][i]=Math.min(e[r-1][i]+1,e[r][i-1]+1,e[r-1][i-1]+o)}return e[t.length][n.length]},findCommonPrefix:kt,findCommonDirectory:function(t){const n=kt(t),e=n.lastIndexOf("/");return-1===e?"":n.slice(0,e+1)}},t.Assertions={asEqual:function(t,n){if(t!==n)throw Error(`Expected [${t}] to equal [${n}]`);return[t,n]},asTrue:function(t){if(!0!==t)throw Error(`Expected [true], got: [${t}]`);return t},asTruthy:function(t){if(!t)throw Error(`Expected truthy value, got: [${t}]`);return t},asFalse:function(t){if(!1!==t)throw Error(`Expected [false], got: [${t}]`);return t},asFalsy:function(t){if(t)throw Error(`Expected falsy value, got: [${t}]`);return t},asEither:function(t,n){if(!n.includes(t))throw Error(`Expected any of [${n.join(", ")}], got: [${t}]`);return t}},t.Cache={get:async function(t,n,e,r){const i=Date.now(),o=Vt.get(t);if(o&&o.validUntil>i)return o.value;r?.onMiss?.();try{const r=await e();return Vt.set(t,{value:r,validUntil:i+n}),r}catch(t){throw r?.onFailure?.(t),t}},getDeferred:function(t,n,e,r){const i=Date.now(),o=Vt.get(t);if(o&&o.validUntil>i)return o.value;r?.onMiss?.();const s=e();return Vt.set(t,{value:s,validUntil:i+n}),s.catch(n=>{Vt.delete(t),r?.onFailure?.(n)}),s},delete:function(t){Vt.delete(t)},deleteExpired:function(){const t=Date.now();for(const[n,e]of Vt.entries())e.validUntil<=t&&Vt.delete(n)},size:function(){return Vt.size},clear:function(){Vt.clear()}},t.Vector={addPoint:Xn,subtractPoint:function(t,n){return{x:t.x-n.x,y:t.y-n.y}},multiplyPoint:Yn,normalizePoint:function(t){const n=Math.sqrt(t.x*t.x+t.y*t.y);return{x:t.x/n,y:t.y/n}},pushPoint:te,filterCoordinates:ee,findCorners:function(t,n,e,r){const i=[{x:0,y:0},{x:e,y:0},{x:0,y:r},{x:e,y:r}];for(let n=0;n<t.length;n++)for(let e=0;e<t[0].length;e++){const r=ue(t,n,e);for(const t of r)i.some(n=>n.x===t.x&&n.y===t.y)||i.push(t)}return i.map(t=>({x:t.x*n,y:t.y*n}))},findLines:function(t,n){const e=ee(t,(n,e)=>0===t[n][e]&&0!==t[n][e+1],"row-first").map(t=>({...t,dx:1,dy:0})),r=ee(t,(n,e)=>0===t[n][e]&&0!==t[n][e-1],"row-first").map(t=>({...t,dx:1,dy:0})),i=ee(t,(n,e)=>0===t[n][e]&&0!==t[n-1]?.[e],"column-first").map(t=>({...t,dx:0,dy:1})),o=ee(t,(n,e)=>0===t[n][e]&&0!==t[n+1]?.[e],"column-first").map(t=>({...t,dx:0,dy:1}));return e.forEach(t=>t.y++),o.forEach(t=>t.x++),[...fn([...i,...o],(t,n)=>t.x===n.x&&t.y-1===n.y),...fn([...r,...e],(t,n)=>t.y===n.y&&t.x-1===n.x)].map(t=>({start:t[0],end:l(t)})).map(t=>({start:Yn(t.start,n),end:Yn(Xn(t.end,{x:t.start.dx,y:t.start.dy}),n)}))},raycast:le,raycastCircle:function(t,n,e){const r=ae(t,e),i=[];for(const e of r){const r=le(t,n,e-.001),o=le(t,n,e+.001);r&&i.push(r),o&&i.push(o)}return i},getLineIntersectionPoint:ce}}(n)),n);const r=(new TextEncoder).encode("Ethereum Signed Message:\\n32");let i,o;const s=self;s.onmessage=t=>{s.postMessage(function(t){if("init"===t.type){const n=e.Binary.hexToUint8Array(t.signerKeyHex);i=e.Binary.uint256ToNumber(n,"BE");const[r,s]=e.Elliptic.privateKeyToPublicKey(i),u=e.Binary.concatBytes(e.Binary.numberToUint256(r,"BE"),e.Binary.numberToUint256(s,"BE")),[a,c]=[e.Binary.uint256ToNumber(u.slice(0,32),"BE"),e.Binary.uint256ToNumber(u.slice(32,64),"BE")];return o=e.Elliptic.publicKeyToAddress([a,c]),{type:"ready",issuerHex:e.Binary.uint8ArrayToHex(o)}}const n=e.Binary.concatBytes(r,e.Binary.keccak256(t.message)),[s,u,a]=e.Elliptic.signMessage(n,i),c=e.Binary.concatBytes(e.Binary.numberToUint256(s,"BE"),e.Binary.numberToUint256(u,"BE"),new Uint8Array([Number(a)]));return{type:"signed",id:t.id,signatureHex:e.Binary.uint8ArrayToHex(c)}}(t.data))}}();\n'],{type:"application/javascript"}),a=URL.createObjectURL(i),o=[],c=[];for(let e=0;e<r;e++){const e=new Worker(a,{type:"classic"}),n={worker:e,pending:new Map};e.onmessage=t=>{const e=t.data;if("signed"===e.type){const t=n.pending.get(e.id);t&&(n.pending.delete(e.id),t.resolve(e.signatureHex))}},e.onerror=t=>{for(const[,e]of n.pending)e.reject(new Error(`Stamp worker error: ${t.message}`));n.pending.clear()},o.push(n);const r=new Promise((n,r)=>{const i=e.onmessage,a=e.onerror,o=setTimeout(()=>{r(new Error("Stamp worker init timed out"))},5e3);e.onmessage=t=>{"ready"===t.data.type&&(clearTimeout(o),e.onmessage=i,e.onerror=a,n(s.Binary.hexToUint8Array(t.data.issuerHex)))},e.onerror=()=>{clearTimeout(o),r(new Error("Worker init failed"))},e.postMessage({type:"init",signerKeyHex:t})});c.push(r)}const d=(await Promise.all(c))[0];return URL.revokeObjectURL(a),new to(o,d,e)}async stampChunkData(t,e=Date.now()){if(0===this.workers.length)throw new Error(Xa);const i=t[0]<<8|t[1],a=this.assignSlot(t),o=new Uint8Array(8),c=new DataView(o.buffer);c.setUint32(0,i,!1),c.setUint32(4,a,!1);const d=new Uint8Array(8);new DataView(d.buffer).setBigUint64(0,1000000n*BigInt(e),!1);const u=s.Binary.concatBytes(t,this.batchId.toUint8Array(),o,d),l=await this.dispatchSign(u),h=s.Binary.hexToUint8Array(l);return{batchId:this.batchId,index:o,issuer:new r(this.issuer),signature:new n(h),timestamp:d}}dispatchSign(t){return new Promise((e,n)=>{const r=this.nextId++,i=this.workers[this.nextWorker++%this.workers.length];i.pending.set(r,{resolve:e,reject:n}),i.worker.postMessage({type:"sign",id:r,message:t})})}terminate(){for(const t of this.workers){t.worker.terminate();for(const[,e]of t.pending)e.reject(new Error(Xa));t.pending.clear()}this.workers=[]}}function eo(t){const e=!1!==t?.encrypt;return{content:e,manifest:e&&!1!==t?.encryptManifest}}function no(t,e,n){if(t.postageStampBatchID===We)return;const r=[t.postageStampBatchID,e.defaultPostageStampBatchID];for(const t of r){if(!t)continue;const e=n.find(e=>!e.deletedAt&&e.batchID.equals(t));if(e)return e}}function ro(t,e,n){if(t.stampPending||t.postageStampBatchID===We)return[];const r=[t.postageStampBatchID,e.defaultPostageStampBatchID].filter(t=>void 0!==t).map(t=>t.toHex());return n.filter(t=>r.includes(t.batchID.toHex()))}function io(t,e=Date.now()){return function(t,e=Date.now()){const n=so(t,e);return void 0!==n&&n<=0}(t,e)?"stamp-expired":!1===t.usable||!1===t.exists?"stamp-not-usable":void 0}function so(t,e=Date.now()){if(void 0===t.batchTTL)return;const n=t.updatedAt??t.createdAt;return t.batchTTL-Math.max(0,Math.floor((e-n)/1e3))}function ao(t,e){const n=t=>Math.max(t.removedAt??0,t.lastSignedInAt??0),r=t=>t.nameUpdatedAt??0,i=new Map;for(const s of[...e,...t]){const t=i.get(s.deviceId);if(!t){i.set(s.deviceId,s);continue}const e=n(s)>=n(t)?s:t,a=e===s?t:s;i.set(s.deviceId,r(a)>r(e)?{...e,name:a.name,nameUpdatedAt:a.nameUpdatedAt}:e)}return Array.from(i.values())}function oo(t,e,n){const r=t=>t.appUrl,i=t=>Math.max(t.revokedAt??0,t.disconnectedAt??0,t.lastConnectedAt??0),s=t=>t.postageStampBatchIDAt??0,a=new Map;for(const o of[...e,...t]){const t=a.get(r(o));if(!t){a.set(r(o),o);continue}const e=i(o)>=i(t)?o:t,c=e===o?t:o,d=s(c)>s(e)?{...e,postageStampBatchID:c.postageStampBatchID,postageStampBatchIDAt:c.postageStampBatchIDAt}:e,u=je(e.chatBinding,c.chatBinding,e.appUrl,n);a.set(r(o),u===e.chatBinding?d:{...d,chatBinding:u})}return Array.from(a.values())}function co(t,e){const n=t=>t.batchID.toHex(),r=t=>Math.max(t.deletedAt??0,t.updatedAt??0,t.createdAt),i=t=>t.nameUpdatedAt??0,s=new Map;for(const a of[...e,...t]){const t=s.get(n(a));if(!t){s.set(n(a),a);continue}const e=r(a)>=r(t)?a:t,o=e===a?t:a;s.set(n(a),i(o)>i(e)?{...e,name:o.name,nameUpdatedAt:o.nameUpdatedAt}:e)}return Array.from(s.values())}function uo(t,e){const n=`swarm-write-${t}`;return"undefined"!=typeof navigator&&navigator.locks?navigator.locks.request(n,{mode:"exclusive"},e):e()}const lo="";function ho(t){const e=s.Binary.keccak256((new TextEncoder).encode(t));return s.Binary.uint8ArrayToHex(e.slice(0,8))}function po(t,e){const n=s.Binary.keccak256((new TextEncoder).encode(t));return((n[0]<<24|n[1]<<16|n[2]<<8|n[3])>>>0)%e}function fo(t,e){return t.timestampMs!==e.timestampMs?t.timestampMs<e.timestampMs?-1:1:t.tiebreaker!==e.tiebreaker?t.tiebreaker<e.tiebreaker?-1:1:0}async function yo(t){const{bee:e,backupSigner:n,swarmEncryptionKey:r,batchId:i,partition:s}=t,a=ws(i,s),o=n.publicKey().address();try{const t=await ze(e,o,a,r),n=Ge.safeParse(JSON.parse((new TextDecoder).decode(t.payload)));return n.success?n.data:void console.debug(`[partition-lock] read p=${s}: SOC present but payload failed schema validation — treating as no lock`)}catch(t){const e=t instanceof Error?t.message:String(t);return void console.debug(`[partition-lock] read p=${s}: unreadable — ${e}`)}}async function wo(t){const{bee:e,stamper:n,backupSigner:r,swarmEncryptionKey:i,batchId:s,partition:a,payload:o}=t,c=ws(s,a),d=(new TextEncoder).encode(JSON.stringify(o)),u={mode:"stamper",bee:e,stamper:n};await fs(u,r,c,d,{encryptionKey:i})}async function go(t){const e=t.now??Date.now,n=t.wait??Ve,r=()=>Je(yo(t),t.readTimeoutMs??bs,"lock read timed out").catch(()=>{}),i=t.skipInitialRead?void 0:await r(),s=e();if(i&&i.holderDeviceId!==t.deviceId&&i.holderDeviceId!==lo&&i.leasedUntil>s)return{outcome:"blocked",payload:i};if(t.shouldAbort?.())return{outcome:"aborted",payload:i};const a=t.generation??{timestampMs:s,tiebreaker:ho(t.deviceId)},o={holderDeviceId:t.deviceId,generation:a,acquiredAt:s,leasedUntil:s+t.ttlMs};await wo({...t,payload:o}),await n(t.guardMs);const c=await r();return c?fo(c.generation,a)>0?{outcome:"lost-race",payload:c}:c.holderDeviceId!==t.deviceId?{outcome:"acquired",payload:o}:{outcome:"acquired",payload:c.leasedUntil>=o.leasedUntil?c:o}:{outcome:"acquired",payload:o}}const mo=bs,bo=Ss;function vo(t){return Math.floor(t/Ss)}function So(t,e,n,r){const i=s.Binary.keccak256((new TextEncoder).encode(`swarm-id-partition-intent-v1:${t.toHex()}:${e}:${n}:${r}`));return new x(i)}function ko(t,e,n,r,i){const a=So(t,e,n,r);return s.Binary.keccak256(s.Binary.concatBytes(a.toUint8Array(),i.toUint8Array()))}function xo(t,e,n){const r=s.Binary.keccak256((new TextEncoder).encode(`swarm-id-partition-occupancy-v1:${t.toHex()}:${e}:${n}`));return new x(r)}function Io(t,e,n,r){const i=xo(t,e,n);return s.Binary.keccak256(s.Binary.concatBytes(i.toUint8Array(),r.toUint8Array()))}async function Ao(t){const e=So(t.batchId,t.partition,t.deviceId,t.epochBucket),n=t.backupSigner.publicKey().address(),r=ko(t.batchId,t.partition,t.deviceId,t.epochBucket,n),i={deviceId:t.deviceId,generation:t.generation,...void 0!==t.leasedUntil?{leasedUntil:t.leasedUntil}:{}};await Co({bee:t.bee,stamper:t.stamper,backupSigner:t.backupSigner,swarmEncryptionKey:t.swarmEncryptionKey,partition:t.partition,identifier:e,address:r,payload:i})}async function Co(t){const e=(new TextEncoder).encode(JSON.stringify(t.payload)),n={mode:"stamper",bee:t.bee,stamper:t.stamper},r=t.stamper;r instanceof Js?await r.withIntentSocSlot(t.address,t.partition,()=>fs(n,t.backupSigner,t.identifier,e,{encryptionKey:t.swarmEncryptionKey})):await fs(n,t.backupSigner,t.identifier,e,{encryptionKey:t.swarmEncryptionKey})}const Uo=t=>t instanceof Error&&/status code 5\d\d/.test(t.message);async function Po(t){const e=()=>Je(ze(t.bee,t.owner,t.identifier,t.swarmEncryptionKey),t.timeoutMs??mo,"intent read timed out");for(let n=0;n<2;n++)try{const n=await e(),r=Ze.safeParse(JSON.parse((new TextDecoder).decode(n.payload)));return r.success?(console.debug(`[partition-intent] ${t.logLabel}: FOUND (gen ts=${r.data.generation.timestampMs} leasedUntil=${r.data.leasedUntil??"none"})`),r.data):void console.debug(`[partition-intent] ${t.logLabel}: malformed`)}catch(e){if(Uo(e)&&0===n&&!1!==t.retryOn5xx)continue;const r=e instanceof Ye;return void console.debug(`[partition-intent] ${t.logLabel}: ${r?`TIMEOUT (>${t.timeoutMs??mo}ms)`:`missing (${e instanceof Error?e.message:String(e)})`}${Uo(e)?" after 5xx retry":""} — treated as no-intent`)}}async function Eo(t){return Po({bee:t.bee,owner:t.backupSigner.publicKey().address(),identifier:So(t.batchId,t.partition,t.deviceId,t.epochBucket),swarmEncryptionKey:t.swarmEncryptionKey,timeoutMs:t.timeoutMs,retryOn5xx:t.retryOn5xx,logLabel:`read device=${t.deviceId} p=${t.partition} bucket=${t.epochBucket}`})}async function $o(t){return Po({bee:t.bee,owner:t.backupSigner.publicKey().address(),identifier:xo(t.batchId,t.partition,t.epochBucket),swarmEncryptionKey:t.swarmEncryptionKey,timeoutMs:t.timeoutMs,logLabel:`occupancy p=${t.partition} bucket=${t.epochBucket}`})}const Do=new Uint8Array(64),Bo=se({counters:_e(Uint32Array).refine(t=>t.length===As,{message:"counters must have 65536 entries"})});function To(t,e){const n=new Uint8Array(4);new DataView(n.buffer).setUint32(0,e,!1);const r=s.Binary.keccak256(s.Binary.concatBytes((new TextEncoder).encode("swarm-id-partition-state-v1"),t.toUint8Array(),n));return new lt(r)}const Oo=Ss,Mo=Symbol("state-pointer-read-timed-out");function Ro(t){return Math.floor(t/Oo)}const Fo=se({referenceHex:de()});function qo(t,e){const n=new Uint8Array(8);return new DataView(n.buffer).setBigUint64(0,BigInt(e),!1),new x(s.Binary.keccak256(s.Binary.concatBytes(t.toUint8Array(),n)))}async function Lo(t){const e=qo(To(t.batchId,t.partition),Ro(t.nowMs)),n=t.backupSigner.publicKey().address(),r=Ko(e,n),i=(new TextEncoder).encode(JSON.stringify({referenceHex:t.referenceHex})),s={mode:"stamper",bee:t.bee,stamper:t.stamper};t.stamper instanceof Js?await t.stamper.withIntentSocSlot(r,t.partition,()=>fs(s,t.backupSigner,e,i,{encryptionKey:t.swarmEncryptionKey})):await fs(s,t.backupSigner,e,i,{encryptionKey:t.swarmEncryptionKey})}function Ko(t,e){return s.Binary.keccak256(s.Binary.concatBytes(t.toUint8Array(),e.toUint8Array()))}function No(t,e,n,r){return Ko(qo(To(t,e),Ro(r)),n)}async function Ho(t){const e=To(t.batchId,t.partition),n=new Set,r=Ro(t.nowMs);if(n.add(r),n.add(r-1),void 0!==t.holderLeasedUntilMs){const e=Ro(t.holderLeasedUntilMs);for(let r=Ro(t.holderLeasedUntilMs-vs)-2;r<=e;r++)n.add(r)}const i=Array.from(n).sort((t,e)=>e-t),s=await Promise.all(i.map(async n=>{const r=qo(e,n);try{const e=await Je(ze(t.bee,t.owner,r,t.swarmEncryptionKey),2500,"state-pointer read timed out"),n=Fo.safeParse(JSON.parse((new TextDecoder).decode(e.payload)));return n.success?n.data:void 0}catch(t){return t instanceof Ye?Mo:void 0}}));for(let t=0;t<s.length;t++){const e=s[t];if(void 0!==e&&e!==Mo){return{pointer:e,inconclusive:s.slice(0,t).some(t=>t===Mo)}}}return{pointer:void 0,inconclusive:s.some(t=>t===Mo)}}async function Wo(t,e,n){const r=await Qe(t,new m(e).toHex()),i=64*n;if(r.length!==i)throw new Error(`reference chunk has ${r.length} bytes, expected ${i} (${n} × 64)`);return Array.from({length:n},(t,e)=>r.slice(64*e,64*(e+1)))}function jo(t){for(let e=0;e<t.length;e++)if(0!==t[e])return!1;return!0}function zo(t,e){let n=me(t);for(;e.has(Ds(n.address.toUint8Array()));)n=me(t);const r=n.address.toUint8Array();return e.add(Ds(r)),{address:r,reference:n.reference.toUint8Array(),data:n.data}}function Go(t){for(let e=0;e<t.length;e++)if(0!==t[e])return!1;return!0}class Vo{constructor(t){this.opts=t,this.holders=new Map,this.releasedPartitions=new Map,this.lastSeenLeasedUntil=new Map,this.unreadableLocks=new Set,this.closed=!1,this.pendingBeaconPublish=Promise.resolve()}static async fromSwarmEncryptionKey(t){const e=fe(t.swarmEncryptionKey),n=await Ie(e,Ce),r=new I(n);return new Vo({...t,backupSigner:r,get bee(){return t.bee}})}async refreshFromSwarm(t){const e=this.now();this.holders.clear(),this.releasedPartitions.clear(),this.lastSeenLeasedUntil.clear(),this.unreadableLocks.clear();const n=await Promise.all(Array.from({length:t},(t,e)=>Je(yo({bee:this.opts.bee,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e}),2500,"lock read timed out").catch(()=>{this.unreadableLocks.add(e)})));for(let r=0;r<t;r++){const t=n[r];if(!t){console.debug(`[PartitionLease] refresh p=${r}: no readable lock`);continue}if(t.holderDeviceId===lo){console.debug(`[PartitionLease] refresh p=${r}: released sentinel`),this.releasedPartitions.set(r,t.generation),this.lastSeenLeasedUntil.set(r,t.leasedUntil);continue}const i=t.holderDeviceId===this.opts.deviceId?" (self)":"";t.leasedUntil<=e?(console.debug(`[PartitionLease] refresh p=${r}: EXPIRED holder ${t.holderDeviceId}${i} (until ${t.leasedUntil} <= now ${e})`),this.lastSeenLeasedUntil.set(r,t.leasedUntil)):(console.debug(`[PartitionLease] refresh p=${r}: held by ${t.holderDeviceId}${i} until ${t.leasedUntil}`),this.holders.set(r,{deviceId:t.holderDeviceId,generation:t.generation,acquiredAt:t.acquiredAt,leasedUntil:t.leasedUntil}))}const r=Array.from(this.holders.entries()).map(([t,e])=>`${t}->${e.deviceId}`).join(",");console.debug(`[PartitionLease] refresh: live holders={${r}} self=${this.opts.deviceId}`)}async refreshHoldersFromPresence(t){this.applyPresence(await this.readPresence(t))}async readPresence(t){const e=this.now(),n=(this.opts.knownDeviceIds?.()??[]).filter(t=>t!==this.opts.deviceId);if(0===n.length)return[];const r=vo(e),i=[r,r-1];return Promise.all(Array.from({length:t}).flatMap((t,e)=>n.flatMap(t=>i.map(async n=>({partition:e,deviceId:t,bucket:n,intent:await Eo({bee:this.opts.bee,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e,deviceId:t,epochBucket:n,timeoutMs:this.opts.intentReadTimeoutMs})})))))}applyPresence(t){const e=this.now();for(const{partition:n,deviceId:r,bucket:i,intent:s}of t){if(!s)continue;if(this.releasedPartitions.has(n))continue;if(void 0===s.leasedUntil||s.leasedUntil<=e-bo)continue;const t=s.leasedUntil,a=this.holders.get(n);a&&a.deviceId===this.opts.deviceId||(!a||t>a.leasedUntil)&&(this.holders.set(n,{deviceId:r,generation:s.generation,acquiredAt:a?.acquiredAt??0,leasedUntil:t}),console.debug(`[PartitionLease] presence p=${n}: live holder ${r} (bucket ${i}, leasedUntil ${t})`))}}async refreshHoldersFromOccupancy(t){this.applyOccupancy(await this.readOccupancy(t))}async readOccupancy(t){const e=vo(this.now()),n=[e,e-1];return Promise.all(Array.from({length:t}).flatMap((t,e)=>n.map(async t=>({partition:e,occupancy:await $o({bee:this.opts.bee,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e,epochBucket:t,timeoutMs:this.opts.intentReadTimeoutMs})}))))}applyOccupancy(t){const e=this.now();for(const{partition:n,occupancy:r}of t){if(!r||void 0===r.leasedUntil)continue;if(r.leasedUntil<=e)continue;if(r.deviceId===this.opts.deviceId)continue;if(this.releasedPartitions.has(n))continue;const t=this.holders.get(n);t&&t.deviceId===this.opts.deviceId||(!t||r.leasedUntil>t.leasedUntil)&&(this.holders.set(n,{deviceId:r.deviceId,generation:r.generation,acquiredAt:t?.acquiredAt??0,leasedUntil:r.leasedUntil}),console.debug(`[PartitionLease] occupancy p=${n}: live holder ${r.deviceId} (leasedUntil ${r.leasedUntil})`))}}isActive(t){for(const e of this.holders.values())if(e.deviceId===t)return!0;return!1}heldPartition(){for(const[t,e]of this.holders)if(e.deviceId===this.opts.deviceId)return t}getHolders(){return Array.from(this.holders.entries()).map(([t,e])=>({partition:t,deviceId:e.deviceId,leasedUntil:e.leasedUntil}))}pickFreeOrExpired(t){const e=po(this.opts.deviceId,t);for(let n=0;n<t;n++){const r=(e+n)%t,i=this.holders.get(r);if(!i||i.deviceId===this.opts.deviceId)return r}}async acquire(t){const{partitionCount:e}=t;if(this.closed=!1,this.publishedReferences=void 0,this.publishedCounter=void 0,this.lastReferenceHex=void 0,this.lastFullPublishEpoch=void 0,e<=1)return{partition:void 0,partitionCount:1,localCounter:new Uint32Array(As),isReadOnly:!1};const n=this.now(),r=po(this.opts.deviceId,e),[,i,s,a]=await Promise.all([this.refreshFromSwarm(e),this.readPresence(e),this.readOccupancy(e),this.speculativeStatePointer(r,n)]);this.applyPresence(i),this.applyOccupancy(s);const o=this.heldPartition(),c=o??this.pickFreeOrExpired(e),d=!(this.opts.knownDeviceIds?.()??[]).some(t=>t!==this.opts.deviceId)&&Array.from(this.holders.values()).every(t=>t.deviceId===this.opts.deviceId)&&0===this.releasedPartitions.size&&0===this.lastSeenLeasedUntil.size&&0===this.unreadableLocks.size;return console.debug(`[PartitionLease] acquire: chosen=${c} via=${void 0!==o?"held(re-acquire)":"pickFreeOrExpired"} home=${po(this.opts.deviceId,e)} liveHolders=${this.holders.size} partitionCount=${e}`),void 0===c?{partition:void 0,partitionCount:e,localCounter:new Uint32Array(As),isReadOnly:!0}:this.claimPartition({partition:c,partitionCount:e,freshClaim:void 0===o,nowMs:n,speculativePointer:c===r?a:void 0,soloClean:d})}async speculativeStatePointer(t,e){const{batchId:n}=this.opts;try{return await Ho({bee:this.opts.bee,owner:this.opts.backupSigner.publicKey().address(),swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:n,partition:t,nowMs:e})}catch{return}}async claimPartition(t){const{partition:e,partitionCount:n,freshClaim:r}=t,{stamper:i,batchId:a,batchDepth:o}=this.requireWriteContext(),c=i instanceof Js?await i.getSyncedReference(e):void 0,d=await async function(t,e){const{bee:n,owner:r,swarmEncryptionKey:i,batchId:a,partition:o,batchDepth:c,holderLeasedUntilMs:d,lockUnreadable:u,nowMs:l=Date.now()}=t,h=void 0===d?t.prefetchedPointer:void 0,{pointer:p,inconclusive:f}=h??await Ho({bee:n,owner:r,swarmEncryptionKey:i,batchId:a,partition:o,nowMs:l,holderLeasedUntilMs:d});if(!p)return u||f&&void 0!==d?(console.warn(`[partition-state] partition ${o}: no pointer found but the read was inconclusive (lockUnreadable=${!0===u} pointerTimedOut=${f}); degrading to read-only instead of resuming.`),{unchanged:!1,readFailed:!0}):void 0!==e?{referenceHex:e,unchanged:!0}:{localCounter:new Uint32Array(As),unchanged:!1};if(f)return console.warn(`[partition-state] partition ${o}: found a pointer but a newer bucket read timed out (a fresher resume point may be hidden); degrading to read-only instead of resuming from a stale candidate.`),{unchanged:!1,readFailed:!0};const y=p.referenceHex,w=new m(y).toUint8Array();if(void 0!==e&&y===e){const{numUtilizationChunks:t}=$s(c);return{referenceHex:y,unchanged:!0,references:await Wo(n,w,t).catch(()=>{})}}const g=new Uint32Array(As),b=[Ds(w.slice(0,32))];let v=[];try{const{numUtilizationChunks:t}=$s(c);v=await Wo(n,w,t);const e=await Promise.all(v.map((t,e)=>jo(t)?void 0:Qe(n,s.Binary.uint8ArrayToHex(t)).then(n=>({i:e,ref:t,data:n}))));for(const t of e)void 0!==t&&(Os(g,t.i,t.data,c),b.push(Ds(t.ref.slice(0,32))));Bo.parse({counters:g})}catch(t){return console.warn(`[partition-state] reading partition ${o} counter failed; degrading to read-only:`,t),{unchanged:!1,readFailed:!0}}return{localCounter:g,referenceHex:y,unchanged:!1,stateBuckets:b,references:v}}({bee:this.opts.bee,owner:this.opts.backupSigner.publicKey().address(),swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:a,partition:e,batchDepth:o,holderLeasedUntilMs:this.holders.get(e)?.leasedUntil??this.lastSeenLeasedUntil.get(e),lockUnreadable:this.unreadableLocks.has(e),nowMs:t.nowMs,prefetchedPointer:t.speculativePointer},c);if(d.readFailed)return console.debug(`[PartitionLease] Partition ${e} state read failed; falling back to read-only without claiming.`),{partition:void 0,partitionCount:n,localCounter:new Uint32Array(As),isReadOnly:!0};const u=d.unchanged&&i instanceof Js?i.buildLeaseLocalCounter():d.localCounter??new Uint32Array(As),l={timestampMs:this.now(),tiebreaker:ho(this.opts.deviceId)},h=this.opts.knownDeviceIds?.()??[],p=h.some(t=>t!==this.opts.deviceId);if(console.debug(`[PartitionLease] claim p=${e} self=${this.opts.deviceId} freshClaim=${r} knownDevices=${h.length} intentRound=${r&&p}`),r&&p){if("lose"===await async function(t){const e=t.knownDeviceIds.filter(e=>e!==t.deviceId);if(0===e.length)return"win";const n=vo(t.now),r=n-1;await Ao({bee:t.bee,stamper:t.stamper,backupSigner:t.backupSigner,swarmEncryptionKey:t.swarmEncryptionKey,batchId:t.batchId,partition:t.partition,deviceId:t.deviceId,epochBucket:n,generation:t.generation});const i=async()=>{const i=await Promise.all(e.flatMap(e=>[n,r].map(async n=>({rivalId:e,intent:await Eo({bee:t.bee,backupSigner:t.backupSigner,swarmEncryptionKey:t.swarmEncryptionKey,batchId:t.batchId,partition:t.partition,deviceId:e,epochBucket:n,timeoutMs:t.timeoutMs,retryOn5xx:!1})}))));for(const e of i){const n=e.intent;if(n)if(void 0===n.leasedUntil){if(fo(n.generation,t.generation)<0)return{rivalId:e.rivalId,reason:"earlier-intent"}}else if(n.leasedUntil>t.now-bo){if(t.releasedGeneration&&fo(n.generation,t.releasedGeneration)<=0)continue;return{rivalId:e.rivalId,reason:"live-beacon"}}}},s=t.guardWindowMs??0,a=t.guardPollMs??2500,o=Date.now()+s;let c,d=0;do{if(d>0&&await Ve(a),d++,c=await i(),c)break}while(Date.now()<o);const u=c?"lose":"win";return console.debug(`[partition-intent] round p=${t.partition} self=${t.deviceId} rivals=${e.length} polls=${d} → ${u}`+(c?` (beaten by ${c.rivalId} via ${c.reason})`:"")),u}({bee:this.opts.bee,stamper:i,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e,deviceId:this.opts.deviceId,generation:l,knownDeviceIds:h,now:this.now(),timeoutMs:this.opts.intentReadTimeoutMs,guardWindowMs:this.opts.intentGuardWindowMs??12e3,guardPollMs:this.opts.intentGuardPollMs??2500,releasedGeneration:this.releasedPartitions.get(e)}))return console.debug(`[PartitionLease] Lost intent round for partition ${e}; falling back to read-only.`),{partition:void 0,partitionCount:n,localCounter:new Uint32Array(As),isReadOnly:!0}}const f=await go({bee:this.opts.bee,stamper:i,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e,deviceId:this.opts.deviceId,ttlMs:vs,guardMs:t.soloClean?0:this.opts.guardMs??2e3,wait:this.opts.wait,generation:l,now:()=>this.now(),skipInitialRead:!0});if("acquired"!==f.outcome||!f.payload)return console.debug(`[PartitionLease] Lock acquire for partition ${e} outcome=${f.outcome}; falling back to read-only.`),{partition:void 0,partitionCount:n,localCounter:new Uint32Array(As),isReadOnly:!0};!d.unchanged&&d.referenceHex&&i instanceof Js&&(await i.setSyncedReference(e,d.referenceHex),d.stateBuckets&&await i.setProtectedStateBuckets(e,d.stateBuckets)),this.publishedReferences=d.references,this.publishedCounter=u.slice(),this.lastFullPublishEpoch=vo(this.now()),this.lastReferenceHex=d.referenceHex;const y=f.payload;return this.self={partition:e,generation:y.generation,acquiredAt:y.acquiredAt,leasedUntil:y.leasedUntil},this.holders.set(e,{deviceId:this.opts.deviceId,generation:y.generation,acquiredAt:y.acquiredAt,leasedUntil:y.leasedUntil}),this.pendingBeaconPublish=this.publishPresenceBeacon(e,y.generation,y.leasedUntil),{partition:e,partitionCount:n,localCounter:u,isReadOnly:!1,lockPayload:y}}get beaconPublishSettled(){return this.pendingBeaconPublish}async refresh(){if(!this.self)return"lost";if(await this.pendingBeaconPublish,!this.self)return"lost";const t=this.self.partition,{stamper:e}=this.requireWriteContext(),n=await go({bee:this.opts.bee,stamper:e,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:t,deviceId:this.opts.deviceId,ttlMs:vs,guardMs:this.opts.guardMs??2e3,wait:this.opts.wait,generation:this.self.generation,now:()=>this.now(),shouldAbort:()=>this.closed});if(!this.self)return"lost";if("acquired"!==n.outcome||!n.payload)return console.debug(`[PartitionLease] Refresh on partition ${t} returned ${n.outcome}.`),"lost";const r=n.payload;return this.self={partition:t,generation:r.generation,acquiredAt:r.acquiredAt,leasedUntil:r.leasedUntil},await this.publishPresenceBeacon(t,r.generation,r.leasedUntil),await this.foreignBeaconBeatsUs(t,r.generation)||await this.occupancyBeaconBeatsUs(t,r.generation)?(console.debug(`[PartitionLease] Refresh on partition ${t}: an earlier-generation peer holds it; yielding.`),"displaced"):"held"}async foreignBeaconBeatsUs(t,e){const n=this.now(),r=(this.opts.knownDeviceIds?.()??[]).filter(t=>t!==this.opts.deviceId);if(0===r.length)return!1;const i=vo(n);return(await Promise.all(r.flatMap(e=>[i,i-1].map(n=>Eo({bee:this.opts.bee,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:t,deviceId:e,epochBucket:n,timeoutMs:this.opts.intentReadTimeoutMs}))))).some(r=>void 0!==r?.leasedUntil&&r.leasedUntil>n-bo&&fo(r.generation,e)<0&&this.beaconOutranksRelease(t,r.generation))}beaconOutranksRelease(t,e){const n=this.releasedPartitions.get(t);return void 0===n||fo(e,n)>0}async occupancyBeaconBeatsUs(t,e){const n=this.now(),r=vo(n);return(await Promise.all([r,r-1].map(e=>$o({bee:this.opts.bee,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:t,epochBucket:e,timeoutMs:this.opts.intentReadTimeoutMs})))).some(r=>void 0!==r&&r.deviceId!==this.opts.deviceId&&void 0!==r.leasedUntil&&r.leasedUntil>n-bo&&fo(r.generation,e)<0&&this.beaconOutranksRelease(t,r.generation))}async publishPresenceBeacon(t,e,n){const{stamper:r}=this.requireWriteContext(),i=vo(this.now());try{await Ao({bee:this.opts.bee,stamper:r,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:t,deviceId:this.opts.deviceId,epochBucket:i,generation:e,leasedUntil:n}),await async function(t){const e=xo(t.batchId,t.partition,t.epochBucket),n=t.backupSigner.publicKey().address(),r=Io(t.batchId,t.partition,t.epochBucket,n),i={deviceId:t.deviceId,generation:t.generation,leasedUntil:t.leasedUntil};await Co({bee:t.bee,stamper:t.stamper,backupSigner:t.backupSigner,swarmEncryptionKey:t.swarmEncryptionKey,partition:t.partition,identifier:e,address:r,payload:i})}({bee:this.opts.bee,stamper:r,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:t,deviceId:this.opts.deviceId,epochBucket:i,generation:e,leasedUntil:n})}catch(e){console.debug(`[PartitionLease] presence beacon publish failed for p=${t} (self-heals next tick):`,e)}}async release(t){if(!this.self)return;const{partition:e,generation:n,acquiredAt:r}=this.self;this.closed=!0,await this.pendingBeaconPublish;const{stamper:i}=this.requireWriteContext();await this.flushState(e,t),await async function(t){const e=t.now??Date.now,n=await yo(t);if(n){const e=e=>(console.info(`[partition-lock] Skipping release sentinel for partition ${t.partition}: ${e}.`,n),{outcome:"skipped",observed:n});if(n.holderDeviceId===lo)return e("already released");if(n.holderDeviceId!==t.deviceId)return e("a peer holds the partition");if(fo(n.generation,t.releasedGeneration)>0)return e("a newer own claim exists (successor re-acquired)")}const r={holderDeviceId:lo,generation:t.releasedGeneration,acquiredAt:t.acquiredAt,leasedUntil:e()};return await wo({...t,payload:r}),{outcome:"released",observed:n}}({bee:this.opts.bee,stamper:i,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e,deviceId:this.opts.deviceId,releasedGeneration:n,acquiredAt:r,now:()=>this.now()}),this.self=void 0,this.holders.delete(e)}async publishState(t){this.self&&await this.flushState(this.self.partition,t)}async flushState(t,e,n){const{stamper:r,batchId:i,batchDepth:a}=this.requireWriteContext(),o=vo(this.now()),c=!0===n?.forceFull||o!==this.lastFullPublishEpoch,d=await async function(t){const{bee:e,stamper:n,batchId:r,batchDepth:i,partition:a,localCounter:o,backupSigner:c,swarmEncryptionKey:d,previousReferences:u,previousCounter:l,deviceId:h,nowMs:p=Date.now()}=t;Bo.parse({counters:o});const{numUtilizationChunks:f}=$s(i),y={mode:"stamper",bee:e,stamper:n},w=c.publicKey().address(),g=n instanceof Js?n:void 0,m=o.slice(),b=void 0!==u&&u.length===f&&void 0!==l;if(void 0!==l)for(let t=0;t<As;t++)if(o[t]<l[t])throw new Error(`[partition-state] publish p=${a}: counter regressed at bucket ${t} (${o[t]} < previous ${l[t]}) — monotonicity violation; refusing to publish a state a takeover could resume past an acked slot.`);const v=Array.from({length:f},(t,e)=>e),S=b?v.filter(t=>!function(t,e){if(t.length!==e.length)return!1;for(let n=0;n<t.length;n++)if(t[n]!==e[n])return!1;return!0}(Ts(o,t,i),Ts(l,t,i))):v.filter(t=>!jo(Ts(o,t,i))),k=new Set(S),x=b?u.map(t=>t.slice()):v.map(()=>Do.slice()),I=new Set([ms(r,a,w),...g?.getCleanChunkBuckets()??[]]);if(b)for(let t=0;t<f;t++)k.has(t)||jo(x[t])||I.add(Ds(x[t].slice(0,32)));const A=p;for(const t of[A,A-Oo])I.add(Ds(No(r,a,w,t)));const C=vo(A);for(const t of[C,C-1])I.add(Ds(Io(r,a,t,w))),void 0!==h&&I.add(Ds(ko(r,a,h,t,w)));const U=S.map(t=>{const e=zo(Ts(o,t,i),I);return x[t]=e.reference,g?.markReservedUtilizationChunk(e.address,a),{data:e.data}}),P=zo(s.Binary.concatBytes(...x),I);g?.markReservedUtilizationChunk(P.address,a);const E=s.Binary.uint8ArrayToHex(P.reference),$=[...S.map(t=>Ds(x[t].slice(0,32))),Ds(P.address)];if(new Set($).size!==$.length)throw new Error(`[partition-state] publish p=${a}: reserved-slot chunks collided on a bucket — parallel PUTs would race/evict. This is a bucket-selection regression (pickReservedChunkKey / claimedBuckets).`);const D=Date.now();await Promise.all([...U.map(t=>ys(y,t.data,{deferred:!1})),ys(y,P.data,{deferred:!1})]),await Lo({bee:e,stamper:n,backupSigner:c,swarmEncryptionKey:d,batchId:r,partition:a,referenceHex:E,nowMs:A}),console.debug(`[partition-state] publish p=${a} incremental=${b} counterChunks=${U.length}/${f} writes=${U.length+2} durationMs=${Date.now()-D}`),g?.clearReservedUtilizationChunks();const B=x.filter(t=>!jo(t)).map(t=>Ds(t.slice(0,32)));return B.push(Ds(P.address)),{referenceHex:E,stateBuckets:B,references:x,publishedCounter:m}}({bee:this.opts.bee,stamper:r,batchId:i,batchDepth:a,partition:t,localCounter:e,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,previousReferences:c?void 0:this.publishedReferences,previousCounter:c?void 0:this.publishedCounter,deviceId:this.opts.deviceId,nowMs:this.now()});c&&(this.lastFullPublishEpoch=o),this.publishedReferences=d.references,this.publishedCounter=d.publishedCounter,this.lastReferenceHex=d.referenceHex,r instanceof Js&&(await r.setSyncedReference(t,d.referenceHex),await r.setProtectedStateBuckets(t,d.stateBuckets))}seedReferenceHex(t){this.lastReferenceHex=t}async heartbeatStatePointer(t){if(!this.self||void 0===this.lastReferenceHex)return;const{stamper:e,batchId:n}=this.requireWriteContext();void 0!==t&&this.retainedChunksCollideThisEpoch(this.self.partition)?await this.flushState(this.self.partition,t,{forceFull:!0}):await Lo({bee:this.opts.bee,stamper:e,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:n,partition:this.self.partition,referenceHex:this.lastReferenceHex,nowMs:this.now()})}retainedChunksCollideThisEpoch(t){if(void 0===this.publishedReferences)return!1;const e=this.opts.backupSigner.publicKey().address(),{batchId:n}=this.requireWriteContext(),r=this.now(),i=vo(r),s=new Set([ms(n,t,e),Ds(No(n,t,e,r)),Ds(Io(n,t,i,e)),Ds(ko(n,t,this.opts.deviceId,i,e))]);for(const t of this.publishedReferences)if(!Go(t)&&s.has(Ds(t.slice(0,32))))return!0;if(void 0!==this.lastReferenceHex){const t=new m(this.lastReferenceHex).toUint8Array().slice(0,32);if(s.has(Ds(t)))return!0}return!1}get currentPartition(){return this.self?.partition}get leasedUntil(){return this.self?.leasedUntil}bumpLocalLease(t){this.self&&(this.self={...this.self,leasedUntil:this.now()+t})}adoptIfLive(){if(this.self&&!(this.self.leasedUntil<=this.now()))return this.self={...this.self,leasedUntil:this.now()+vs},this.holders.set(this.self.partition,{deviceId:this.opts.deviceId,generation:this.self.generation,acquiredAt:this.self.acquiredAt,leasedUntil:this.self.leasedUntil}),this.self.partition}serialize(){return{deviceId:this.opts.deviceId,batchId:this.opts.batchId.toHex(),self:this.self}}hydrate(t){t.deviceId===this.opts.deviceId&&t.batchId===this.opts.batchId.toHex()&&(this.self=t.self)}requireWriteContext(){if(!this.opts.stamper||void 0===this.opts.batchDepth)throw new Error("PartitionLease: write operation requires stamper + batchDepth (read-only instance)");return{stamper:this.opts.stamper,batchId:this.opts.batchId,batchDepth:this.opts.batchDepth}}now(){return this.opts.now?this.opts.now():Date.now()}}class Jo extends Error{constructor(t="All partitions are held by other devices.",e){super(t),this.accountId=e,this.name="PartitionContendedError"}}function Zo(t,e,n){return void 0!==t&&t.holderDeviceId!==n&&t.holderDeviceId!==lo&&t.leasedUntil>e}class Yo{constructor(t){this.readOnly=!1,this.pendingAcquire=!1,this.lastLeaseValidatedAt=0,this.lastLeaseActivityAt=0,this.activeUploadCount=0,this.pointerHeartbeatFailingSince=void 0,this.disposed=!1,this.leaseEpoch=0,this.deps=t}get currentPartition(){return this.partitionLease?.currentPartition}get isReadOnly(){return this.readOnly}get partitionCount(){return this.deps.partitionCount}get stamperRef(){return this.deps.stamper}get accountId(){return this.deps.accountId}get batchId(){return this.deps.batchId}async withWrite(t,e){const n=e?.wait??("persistent"===this.deps.mode?"block":"skip");return this.lockAndFlush(async()=>{await this.ensureLease(n),this.ensureHeldForUpload();const r=await this.buildStamperTarget(e);this.lastLeaseActivityAt=Date.now(),this.activeUploadCount++;try{const e=await t(r);await this.ensureLeaseStillValid();const n=this.deps.stamper.getLocalCounter();if(void 0!==n)await(this.partitionLease?.publishState(n)),this.pointerHeartbeatFailingSince=void 0;else if(void 0!==this.currentPartition)throw new Error(`[BatchWriteCoordinator] Held partition ${this.currentPartition} but the stamper exposed no local counter — cannot publish the slot reservation (ack-after-publish); failing the upload.`);return e}finally{this.activeUploadCount--,this.lastLeaseActivityAt=Date.now()}})}startLease(){this.disposed||"persistent"===this.deps.mode&&(this.deps.partitionCount<=1||(this.pendingAcquire=!0,this.lockAndFlush(()=>this.ensureLease("block")).catch(t=>console.warn("[BatchWriteCoordinator] Background lease warm-up failed:",t))))}teardown(){this.disposed=!0,this.leaseEpoch++,void 0!==this.partitionRefreshTimer&&(clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=void 0),this.slotWait?.wake?.();const t=this.partitionLease,e=t?.currentPartition,n=this.deps.stamper;if(t){const e=n.getLocalCounter();void 0!==e&&this.lock(()=>t.release(e)).catch(t=>console.warn("[BatchWriteCoordinator] Partition lease release failed:",t)),n.invalidateLease(),n.unbindPartition()}this.partitionLease=void 0,this.readOnly=!1,this.lastLeaseValidatedAt=0,this.deps.writeLeaseCache?.(void 0),this.emitLeaseChange(),void 0!==e&&this.deps.onLeaseReleased?.(e)}async ensureLease(t){try{if(this.deps.partitionCount<=1)return;if(this.disposed)throw new Error("BatchWriteCoordinator has been torn down.");if(this.pendingAcquire||this.partitionLease&&!this.readOnly||(this.pendingAcquire=!0),this.pendingAcquire){if(this.pendingAcquire=!1,"skip"===t){if(await this.acquire(),this.readOnly||void 0===this.currentPartition)throw new Jo(void 0,this.deps.accountId);return}try{await Je(this.acquireWithSlotWait(),45e3,"Partition lease timed out after 45000ms")}catch(t){throw console.warn("[BatchWriteCoordinator] Partition lease acquisition failed, pausing background work:",t),this.pauseLeaseBackgroundWork(),t}return}await this.ensureLeaseStillValid()}finally{this.emitLeaseChange()}}async acquire(){const{stamper:t,partitionCount:e,swarmEncryptionKey:n}=this.deps;if(e<=1)return void(this.readOnly=!1);if(this.disposed)return;const r=this.leaseEpoch;if(this.deps.refreshKnownDeviceIds?.().catch(t=>console.warn("[BatchWriteCoordinator] Background device-registry refresh failed (using current registry):",t)),this.leaseEpoch===r&&!this.disposed)try{const i=this.deps,s=await Vo.fromSwarmEncryptionKey({get bee(){return i.bee},deviceId:this.deps.deviceId,batchId:new p(this.deps.batchId),batchDepth:t.depth,swarmEncryptionKey:n,stamper:t,knownDeviceIds:this.deps.knownDeviceIds,intentReadTimeoutMs:this.deps.intentReadTimeoutMs,intentGuardWindowMs:this.deps.intentGuardWindowMs,intentGuardPollMs:this.deps.intentGuardPollMs});if(this.leaseEpoch!==r)return;const a=this.deps.readLeaseCache?.();a&&s.hydrate(a);const o=s.adoptIfLive();if(void 0!==o){const n=await t.getSyncedReference(o).catch(()=>{});if(this.leaseEpoch!==r||this.disposed)return;return console.debug(`[BatchWriteCoordinator] Adopted cached lease p=${o} (no acquire/intent round) for device=${this.deps.deviceId}`),this.partitionLease=s,this.readOnly=!1,t.bindPartition({partition:o,partitionCount:e,localCounter:t.buildLeaseLocalCounter()}),this.syncStamperLeaseDeadline(),s.seedReferenceHex(n),this.deps.writeLeaseCache?.(s.serialize()),this.startRefreshTimer(s),this.lastLeaseValidatedAt=Date.now(),this.lastLeaseActivityAt=Date.now(),this.pointerHeartbeatFailingSince=void 0,void this.deps.onLeaseAcquired?.(o)}const c=await s.acquire({partitionCount:e});if(this.leaseEpoch!==r)return;if(this.partitionLease=s,this.readOnly=c.isReadOnly,void 0===c.partition)return c.isReadOnly&&console.warn("[BatchWriteCoordinator] All partitions held; entering read-only mode until a peer releases."),void this.deps.writeLeaseCache?.(s.serialize());t.bindPartition({partition:c.partition,partitionCount:c.partitionCount,localCounter:c.localCounter}),this.syncStamperLeaseDeadline(),this.deps.writeLeaseCache?.(s.serialize()),this.startRefreshTimer(s),this.lastLeaseValidatedAt=Date.now(),this.lastLeaseActivityAt=Date.now(),this.pointerHeartbeatFailingSince=void 0,this.deps.onLeaseAcquired?.(c.partition)}catch(e){if(console.error("[BatchWriteCoordinator] Failed to acquire partition lease:",e),this.leaseEpoch!==r)throw e;throw void 0!==this.partitionRefreshTimer&&(clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=void 0),t.invalidateLease(),t.unbindPartition(),this.partitionLease=void 0,this.readOnly=!1,this.deps.writeLeaseCache?.(void 0),e}}async acquireWithSlotWait(){const t=Date.now()+3e4,e=this.leaseEpoch,n={maybeFree:!1,rescansLeft:0,rescanWindowUsed:!1};this.slotWait=n;try{await this.pollForSlot(t,e,n)}finally{this.slotWait===n&&(this.slotWait=void 0)}}async pollForSlot(t,e,n){for(;;){if(await this.acquire(),this.disposed)return;if(!this.readOnly)return;const r=n.maybeFree;n.maybeFree=!1;const i=r?0:n.rescansLeft>0?1500:Ps;if(Date.now()+i>t)throw new Jo("No partition available — all slots are held by other devices.",this.deps.accountId);if(r||(n.rescansLeft>0?(n.rescansLeft--,await this.sleepUntilWoken(n,1500)):(this.deps.onSlotWait?.(),await this.sleepUntilWoken(n,Ps))),this.leaseEpoch!==e)return}}sleepUntilWoken(t,e){return new Promise(n=>{const r=()=>{clearTimeout(i),t.wake=void 0,t.maybeFree=!1,n()},i=setTimeout(r,e);t.wake=r})}syncStamperLeaseDeadline(){this.deps.stamper.setLeaseValidUntil(this.partitionLease?.leasedUntil)}leaseNearExpiry(){const t=this.partitionLease?.leasedUntil;return void 0!==t&&Date.now()>=t-2e3}async ensureLeaseStillValid(){if(!this.partitionLease||this.readOnly)return;const t=this.partitionLease.currentPartition;if(void 0===t)return;if(!this.leaseNearExpiry()&&Date.now()-this.lastLeaseValidatedAt<Ps)return;let e;try{e=await yo({bee:this.deps.bee,backupSigner:this.deps.backupSigner,swarmEncryptionKey:this.deps.swarmEncryptionKey,batchId:new p(this.deps.batchId),partition:t})}catch(t){return void console.warn("[BatchWriteCoordinator] Lease freshness check read failed:",t)}if(Zo(e,Date.now(),this.deps.deviceId))throw console.warn(`[BatchWriteCoordinator] Lease freshness check: partition ${t} taken by ${e.holderDeviceId}; demoting.`),this.signalLeaseLost(),this.finalizeDemote(),new Error("Partition lease was reclaimed by another device.");if(void 0!==e&&e.holderDeviceId===lo){let e;try{e=await this.partitionLease.refresh()}catch(t){return void console.warn("[BatchWriteCoordinator] Sentinel re-assert hit a transient error; keeping lease:",t)}if("held"!==e)throw console.warn(`[BatchWriteCoordinator] Sentinel re-assert: partition ${t} taken by a peer; demoting.`),this.signalLeaseLost(),this.finalizeDemote(),new Error("Partition lease was reclaimed by another device.");return this.syncStamperLeaseDeadline(),this.lastLeaseValidatedAt=Date.now(),void this.deps.writeLeaseCache?.(this.partitionLease.serialize())}this.partitionLease.bumpLocalLease(vs),this.syncStamperLeaseDeadline(),this.lastLeaseValidatedAt=Date.now(),this.deps.writeLeaseCache?.(this.partitionLease.serialize())}signalLeaseLost(){this.deps.stamper.invalidateLease()}finalizeDemote(){this.leaseEpoch++,this.deps.stamper.unbindPartition(),void 0!==this.partitionRefreshTimer&&(clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=void 0),this.partitionLease=void 0,this.readOnly=!0,this.lastLeaseValidatedAt=0,this.pointerHeartbeatFailingSince=void 0,this.deps.writeLeaseCache?.(void 0),this.pendingAcquire=!0,this.emitLeaseChange()}startRefreshTimer(t){this.disposed||"persistent"===this.deps.mode&&(void 0!==this.partitionRefreshTimer&&clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=setInterval(()=>{this.refreshTick(t)},Ps))}async refreshTick(t){if(this.disposed||this.partitionLease!==t)return;const e=t.currentPartition;if(void 0===e)return;if((this.deps.knownDeviceIds?.()??[]).some(t=>t!==this.deps.deviceId)&&0===this.activeUploadCount&&Date.now()-this.lastLeaseActivityAt>=3e4)return void await this.lock(async()=>{this.disposed||this.partitionLease===t&&(0!==this.activeUploadCount||Date.now()-this.lastLeaseActivityAt<3e4||await this.yieldIdleLease(t))});let n=!1,r=!1;try{const i=await t.refresh();if("held"===i&&(r=!0),"displaced"===i)n=!0;else if("lost"===i){const t=await yo({bee:this.deps.bee,backupSigner:this.deps.backupSigner,swarmEncryptionKey:this.deps.swarmEncryptionKey,batchId:new p(this.deps.batchId),partition:e});n=Zo(t,Date.now(),this.deps.deviceId),!n&&void 0!==t&&t.holderDeviceId===this.deps.deviceId&&t.leasedUntil>Date.now()&&(r=!0)}}catch(t){console.warn("[BatchWriteCoordinator] Lease refresh hit a transient error; keeping lease:",t)}if(n){if(this.disposed||this.partitionLease!==t)return;return console.warn(`[BatchWriteCoordinator] Refresh: partition ${e} taken by a peer; demoting.`),this.signalLeaseLost(),void await this.lock(async()=>{this.disposed||this.partitionLease!==t||this.finalizeDemote()})}if(!this.disposed&&this.partitionLease===t)if(r){if(t.bumpLocalLease(vs),this.syncStamperLeaseDeadline(),this.lastLeaseValidatedAt=Date.now(),this.deps.writeLeaseCache?.(t.serialize()),0===this.activeUploadCount)try{await this.lock(async()=>{this.disposed||this.partitionLease!==t||0===this.activeUploadCount&&await t.heartbeatStatePointer(this.deps.stamper.getLocalCounter())}),this.pointerHeartbeatFailingSince=void 0}catch(n){console.warn("[BatchWriteCoordinator] State-pointer heartbeat failed:",n),this.pointerHeartbeatFailingSince??(this.pointerHeartbeatFailingSince=Date.now()),Date.now()-this.pointerHeartbeatFailingSince>Oo&&(console.warn(`[BatchWriteCoordinator] Refresh: partition ${e} state-pointer heartbeat failing persistently; demoting before the resume pointer ages out of the takeover lookup.`),this.signalLeaseLost(),await this.lock(async()=>{this.disposed||this.partitionLease!==t||this.finalizeDemote()}))}}else this.leaseNearExpiry()&&(console.warn(`[BatchWriteCoordinator] Refresh: partition ${e} lease lapsed without a successful renewal; demoting.`),this.signalLeaseLost(),await this.lock(async()=>{this.disposed||this.partitionLease!==t||this.finalizeDemote()}))}async yieldIdleLease(t,e){this.leaseEpoch++;const n=t.currentPartition;void 0!==this.partitionRefreshTimer&&(clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=void 0);const r=this.deps.stamper.getLocalCounter();if(void 0!==r)try{await t.release(r)}catch(t){console.warn("[BatchWriteCoordinator] Idle partition-lease release failed:",t)}this.deps.stamper.unbindPartition(),this.partitionLease=void 0,this.readOnly=!1,this.lastLeaseValidatedAt=0,this.deps.writeLeaseCache?.(void 0),this.emitLeaseChange(),console.info(`[BatchWriteCoordinator] Released idle partition ${n??"?"}; will re-acquire on next write.`),void 0===n||this.disposed||this.deps.onLeaseReleased?.(n,e)}notifySlotMaybeFree(){const t=this.slotWait;t&&(t.rescanWindowUsed||(t.rescanWindowUsed=!0,t.maybeFree=!0,t.rescansLeft=3),t.wake?.())}get canYieldForPeer(){return!this.disposed&&(void 0!==this.partitionLease?.currentPartition&&(0===this.activeUploadCount&&Date.now()-this.lastLeaseActivityAt>=3e3))}async yieldForPeer(t){if(!this.canYieldForPeer)return;const e=this.partitionLease,n=e?.currentPartition;if(!e||void 0===n)return;let r;return await this.lock(async()=>{this.disposed||this.partitionLease!==e||0===this.activeUploadCount&&(Date.now()-this.lastLeaseActivityAt<3e3||(await this.yieldIdleLease(e,t),r=n))}),r}pauseLeaseBackgroundWork(){this.leaseEpoch++,void 0!==this.partitionRefreshTimer&&(clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=void 0),this.partitionLease=void 0,this.readOnly=!1,this.deps.writeLeaseCache?.(void 0)}async buildStamperTarget(t){const e=t?.useWorkers?await(this.deps.getWorkerPool?.(t.workerCount)):void 0;return{mode:"stamper",bee:this.deps.bee,stamper:this.deps.stamper,workerPool:e}}async lockAndFlush(t){return uo(this.deps.batchId,async()=>{try{return await t()}finally{await(this.deps.flushStamperState?.())}})}lock(t){return uo(this.deps.batchId,t)}ensureHeldForUpload(){if(!(this.deps.partitionCount<=1)&&void 0===this.currentPartition)throw new Error("Uploads are unavailable: the postage batch is fully leased by other devices. Sign out of another device or wait for its lease to expire.")}emitLeaseChange(){this.deps.onLeaseChange?.({currentPartition:this.currentPartition,isReadOnly:this.readOnly})}}const _o=32;class Qo{constructor(t,e){if(this.start=t,this.level=e,e<0||e>_o)throw new Error(`Epoch level must be between 0 and 32, got ${e}`)}async marshalBinary(){const t=new Uint8Array(9);return new DataView(t.buffer).setBigUint64(0,this.start,!1),t[8]=this.level,s.Binary.keccak256(t)}next(t,e){return this.start+this.length()>e?this.childAt(e):function(t,e){if(0n===e)return new Qo(0n,_o);const n=t-e;let r=1n,i=0;for(;i<_o&&(r<n||t/r!==e/r);)r<<=1n,i++;return new Qo(e/r*r,i)}(e,t).childAt(e)}length(){return 1n<<BigInt(this.level)}parent(){const t=this.length()<<1n,e=this.start/t*t;return new Qo(e,this.level+1)}left(){return new Qo(this.start-this.length(),this.level)}childAt(t){const e=this.level-1,n=1n<<BigInt(e);let r=this.start;return(t&n)>0n&&(r|=n),new Qo(r,e)}isLeft(){return 0n===(this.start&this.length())}toString(){return`${this.start}/${this.level}`}}class Xo{constructor(t,e,n,r){this.bee=t,this.topic=e,this.owner=n,this.encryptionKey=r}async findAt(t,e=0n){const n=this.getEpochChunk(t,new Qo(t,0)).catch(()=>{}),[r,i]=await Promise.all([n,this.findAtEpoch(t,new Qo(0n,_o),void 0)]);if(r)return r;if(i)return i;try{if(void 0===await this.getEpochChunk(t,new Qo(0n,_o)))return this.findPreviousLeaf(t,e)}catch{}}async findAtEpoch(t,e,n){let r;try{r=await this.getEpochChunk(t,e)}catch{return e.isLeft()?n:this.findAtEpoch(e.start-1n,e.left(),n)}if(r)return 0===e.level?r:this.findAtEpoch(t,e.childAt(t),r);if(e.level>0){const r=await this.findAtEpoch(t,e.childAt(t),n);if(r)return r}return e.isLeft()?n:this.findAtEpoch(e.start-1n,e.left(),n)}async getEpochChunk(t,e){const n=await this.getEpochChunkWithMetadata(t,e);return n?.reference}async findAtWithMetadata(t){const e=new Qo(t,0);try{const n=await this.getEpochChunkWithMetadata(t,e);if(n)return{reference:n.reference,epoch:e,timestamp:n.timestamp}}catch{}return this.findAtEpochWithMetadata(t,new Qo(0n,_o),void 0)}async findAtEpochWithMetadata(t,e,n){let r;try{r=await this.getEpochChunkWithMetadata(t,e)}catch{return e.isLeft()?n:this.findAtEpochWithMetadata(e.start-1n,e.left(),n)}if(r){const n={reference:r.reference,epoch:e,timestamp:r.timestamp};return 0===e.level?n:this.findAtEpochWithMetadata(t,e.childAt(t),n)}if(e.level>0){const r=await this.findAtEpochWithMetadata(t,e.childAt(t),n);if(r)return r}return e.isLeft()?n:this.findAtEpochWithMetadata(e.start-1n,e.left(),n)}async getEpochChunkWithMetadata(t,e){const n={timeout:2e3},r=await e.marshalBinary(),i=s.Binary.keccak256(s.Binary.concatBytes(this.topic.toUint8Array(),r));let a;if(this.encryptionKey){a=(await ze(this.bee,this.owner,i,this.encryptionKey,n)).payload}else{const t=new m(s.Binary.keccak256(s.Binary.concatBytes(i,this.owner.toUint8Array()))),e=await this.bee.chunk.download(t.toHex(),void 0,n),r=8,o=32+65,c=e.slice(o,o+r),d=new DataView(c.buffer,c.byteOffset,c.byteLength),u=Number(d.getBigUint64(0,!0)),l=o+r;a=e.slice(l,l+u)}if(![40,48,72,80].includes(a.length))return void console.warn(`Unexpected feed payload length: ${a.length}. Expected 40, 48, 72, or 80 bytes.`);const o=48===a.length||80===a.length?8:0,c=a.slice(o,o+8),d=new DataView(c.buffer,c.byteOffset,c.byteLength).getBigUint64(0,!1);return d>t?void 0:{reference:a.slice(o+8),timestamp:d}}findPreviousLeaf(t,e){return async function(t,e,n){if(0n===t)return;const r=e>0n?e:0n,i=t>128n&&t-128n>r?t-128n:r;let s=t-1n;for(;s>=i;){try{const e=await n(t,new Qo(s,0));if(e)return e}catch{}if(0n===s)break;s--}}(t,e,(t,e)=>this.getEpochChunk(t,e))}}class tc{constructor(t,e){this.topic=t,this.signer=e}async update(t,e,n,r,i){if(32!==e.length&&64!==e.length)throw new Error(`Reference must be 32 or 64 bytes, got ${e.length}`);const s=await this.calculateEpoch(t,i,r,n);return{socAddress:await this.uploadEpochChunk(s,t,e,n,r),epoch:{start:s.start,level:s.level},timestamp:t}}async calculateEpoch(t,e,n,r){if(e?.lastEpoch&&void 0!==e.lastTimestamp){return new Qo(e.lastEpoch.start,e.lastEpoch.level).next(e.lastTimestamp,t)}if(!r||!ns(r))return new Qo(0n,_o);const i=this.signer.publicKey().address(),s=new Xo(r.bee,this.topic,i,n),a=await s.findAtWithMetadata(t);return a?a.epoch.next(a.timestamp,t):new Qo(0n,_o)}getOwner(){return this.signer.publicKey().address()}async uploadEpochChunk(t,e,n,r,i){const a=await async function(t,e){const n=await e.marshalBinary();return new x(s.Binary.keccak256(s.Binary.concatBytes(t.toUint8Array(),n)))}(this.topic,t),o=new Uint8Array(8);new DataView(o.buffer).setBigUint64(0,e,!1);const c=s.Binary.concatBytes(o,n);return(await fs(r,this.signer,a,c,{encryptionKey:i,deferred:!1})).socAddress}}function ec(t){return new Xo(t.bee,t.topic,t.owner,t.encryptionKey)}class nc{constructor(t,e,n){this.bee=t,this.topic=e,this.owner=n}async findAt(t,e=0n,n){for(let t=0n;;t++){if(!await this.indexExists(t,n))return{current:t>0n?t-1n:void 0,next:t}}}async indexExists(t,e){const n=function(t,e){const n=s.Binary.numberToUint64(e,"BE");return s.Binary.keccak256(s.Binary.concatBytes(t.toUint8Array(),n))}(this.topic,t),r=function(t,e){return new m(s.Binary.keccak256(s.Binary.concatBytes(t,e.toUint8Array())))}(n,this.owner);for(let t=0;t<2;t++)try{return await this.bee.chunk.download(s.Binary.uint8ArrayToHex(r.toUint8Array()),void 0,e),!0}catch{if(0===t)continue;return!1}return!1}}class rc{constructor(t,e,n){this.syncFinder=new nc(t,e,n)}async findAt(t,e=0n,n){return this.syncFinder.findAt(t,e,n)}}class ic{constructor(t,e,n){this.bee=t,this.topic=e,this.signer=n,this.nextIndex=0n}async update(t,e,n){const r=this.makeIdentifier(this.nextIndex),i={mode:"stamper",bee:this.bee,stamper:e},s=await fs(i,this.signer,r,t,{encryptionKey:n,deferred:!1});return this.nextIndex+=1n,s.socAddress}getOwner(){return this.signer.publicKey().address()}getState(){return{nextIndex:this.nextIndex}}setState(t){this.nextIndex=t.nextIndex}reset(){this.nextIndex=0n}makeIdentifier(t){const e=s.Binary.numberToUint64(t,"BE"),n=s.Binary.keccak256(s.Binary.concatBytes(this.topic.toUint8Array(),e));return new x(n)}}function sc(t){if("object"==typeof t&&null!==t){const e=t.status;if(404===e)return!0;if("number"==typeof e)return!1}const e=t instanceof Error?t.message:String(t);return/404|not found/i.test(e)}const ac=256,oc=new Map,cc="swarm-id-roster-len";function dc(t,e){return`${t}:${e.toHex()}`}function uc(t){const e=oc.get(t);if(void 0!==e)return e;if("undefined"==typeof localStorage)return 0;let n;try{n=localStorage.getItem(`${cc}:${t}`)}catch{return 0}const r=null===n?0:Number.parseInt(n,10),i=Number.isInteger(r)&&r>0?Math.min(r,ac):0;return oc.set(t,i),i}function lc(t,e){const n=Math.min(e,ac);if(!(n<=uc(t))&&(oc.set(t,n),"undefined"!=typeof localStorage))try{localStorage.setItem(`${cc}:${t}`,`${n}`)}catch{}}const hc=bs,pc=Symbol("roster-read-inconclusive");class fc extends Error{constructor(){super("roster scan inconclusive: cannot confirm the roster is empty"),this.name="RosterScanInconclusiveError"}}function yc(t){return lt.fromString(`swarm-id-roster-v1:${t}`)}async function wc(t){const e=function(t,e){const n=s.Binary.numberToUint64(e,"BE");return new x(s.Binary.keccak256(s.Binary.concatBytes(t.toUint8Array(),n)))}(t.topic,t.index);let n,r;try{n=(await Je(t.bee.soc.makeReader(t.owner).download(e),hc,"roster read timed out")).payload.toUint8Array()}catch(r){if(sc(r))return;const i=await async function(t){const e=`${t.bee.url}/soc/${t.owner.toHex()}/${t.identifier.toHex()}`;try{const t=await Je(fetch(e),hc,"roster /soc probe timed out");return t.ok?new Uint8Array(await t.arrayBuffer()):404!==t.status?pc:404===(await t.json()).code?void 0:pc}catch{return pc}}({bee:t.bee,owner:t.owner,identifier:e});if(!(i instanceof Uint8Array))return i;n=i}try{r=await Je(Qe(t.bee,new m(n).toHex()),hc,"roster read timed out")}catch(t){return sc(t)?void 0:pc}try{return Xe.parse(JSON.parse((new TextDecoder).decode(r)))}catch{return}}async function gc(t){const e=yc(t.accountId),n=dc(t.accountId,t.owner),r=uc(n);let i=[],s=0;for(let n=0;n<ac;){const a=n<r?r-n:Math.min(r>0?2:16,ac-n),o=Array.from({length:a},(t,e)=>BigInt(n+e));let c=await Promise.all(o.map(n=>wc({bee:t.bee,topic:e,owner:t.owner,index:n})));if(!c.some(mc)&&c.some(t=>t===pc)&&(c=await Promise.all(o.map((n,r)=>c[r]===pc?wc({bee:t.bee,topic:e,owner:t.owner,index:n}):c[r]))),c.forEach((t,e)=>{mc(t)&&(i=ao(i,[t]),s=n+e+1)}),!c.some(mc)){if(0===i.length&&c.some(t=>t===pc))throw new fc;break}n+=a}return i.length>0&&lc(n,s),i}function mc(t){return void 0!==t&&t!==pc}async function bc(t){let e;try{e=await gc({bee:t.bee,accountId:t.accountId,owner:t.owner})}catch{return}const n=e.find(e=>e.deviceId===t.device.deviceId);void 0!==n&&Boolean(n.removedAt)===Boolean(t.device.removedAt)||await async function(t){const e=yc(t.accountId),{next:n}=await new nc(t.bee,e,t.owner).findAt(0n);if(!ns(t.target))return;const r=(new TextEncoder).encode(JSON.stringify(t.device)),i=await ps(t.target,r,{encryptionKey:ye(t.encryptionKey)}),s=new m(i.reference).toUint8Array(),a=new ic(t.bee,e,t.accountKey);a.setState({nextIndex:n}),await a.update(s,t.target.stamper),lc(dc(t.accountId,t.owner),Number(n)+1)}(t)}const vc=se({appSessionDuration:ue().optional()}),Sc=t=>se({value:t,at:ue()}),kc=se({version:oe(1),accountId:de().length(40),deviceId:de(),timestamp:ue(),connectedApps:ce(ie),postageStamps:ce(tn),accountName:Sc(de()),defaultPostageStampBatchID:Sc(de().length(64).optional()),settings:Sc(vc.optional()),accountPublicKey:de(),accountCreatedAt:ue(),partitionCount:ue().int().min(1).default(1)});function xc(t){const e=t.metadata,n=e.createdAt;return{connectedApps:t.connectedApps,postageStamps:t.postageStamps,accountName:{value:e.accountName,at:e.accountNameAt??n},defaultPostageStampBatchID:{value:e.defaultPostageStampBatchID,at:e.defaultStampAt??n},settings:{value:e.settings,at:e.settingsAt??n},accountPublicKey:e.publicKey,accountCreatedAt:e.createdAt,partitionCount:e.partitionCount??1}}function Ic(t,e){return lt.fromString(`swarm-id-devstate-v1:${t}:${e}`)}async function Ac(t){const e=Ic(t.accountId,t.deviceId),n=(r=t.accountId,i=t.deviceId,s=t.view,{version:1,accountId:r,deviceId:i,timestamp:Date.now(),connectedApps:s.connectedApps.map(Qs),postageStamps:s.postageStamps.map(ta),accountName:s.accountName,defaultPostageStampBatchID:s.defaultPostageStampBatchID,settings:s.settings,accountPublicKey:s.accountPublicKey,accountCreatedAt:s.accountCreatedAt,partitionCount:s.partitionCount});var r,i,s;const a=(new TextEncoder).encode(JSON.stringify(n)),o=await ps(t.target,a,{encryptionKey:ye(t.encryptionKey)}),c=o.chunkAddresses??[],d=new m(o.reference).toUint8Array(),u=new tc(e,t.accountKey),l=await u.update(BigInt(Math.floor(Date.now()/1e3)),d,t.target);return c.push(l.socAddress),{reference:o.reference,chunkAddresses:c}}async function Cc(t){const e=await Ac({accountId:t.accountId,deviceId:t.device.deviceId,accountKey:t.accountKey,encryptionKey:t.encryptionKey,view:t.view,target:t.target});return t.onChunksUploaded&&e.chunkAddresses.length>0&&await t.onChunksUploaded(e.chunkAddresses).catch(t=>{console.error("[publishDeviceState] utilisation hook failed:",t)}),await bc({bee:t.bee,accountKey:t.accountKey,owner:t.owner,encryptionKey:t.encryptionKey,accountId:t.accountId,device:t.device,target:t.target}),{status:"success",reference:e.reference,timestamp:BigInt(Math.floor(Date.now()/1e3)),chunkAddresses:e.chunkAddresses}}async function Uc(t){const e=Ic(t.accountId,t.deviceId),n=new Xo(t.bee,e,t.owner),r=await n.findAt(BigInt(Math.floor(Date.now()/1e3)));if(!r)return;return function(t){const e=JSON.parse((new TextDecoder).decode(t));return kc.parse(e)}(await Qe(t.bee,new m(r).toHex()))}function Pc(t,e){return e.at>=t.at?e:t}function Ec(t,e,n){if(0===t.length)throw new Error("foldAccount requires at least one device-state view");let r=[],i=[],s={value:"",at:0},a={at:0},o={at:0};for(const e of t)r=oo(r,e.connectedApps,n),i=co(i,e.postageStamps),s=Pc(s,e.accountName),a=Pc(a,e.defaultPostageStampBatchID),o=Pc(o,e.settings);const c=t[0],d=c?.accountCreatedAt??e.reduce((t,e)=>Math.min(t,e.createdAt),Number.MAX_SAFE_INTEGER),u=t[0].accountPublicKey,l=t.find(t=>t.partitionCount>1)?.partitionCount??c?.partitionCount??1;return{devices:e,connectedApps:r,postageStamps:i,accountName:s.value,defaultPostageStampBatchID:a.value?new p(a.value):void 0,settings:o.value,accountNameAt:s.at,defaultStampAt:a.at,settingsAt:o.at,createdAt:Number.isFinite(d)?d:Date.now(),publicKey:u,partitionCount:l}}const $c="swarm-id-device-id";function Dc(){const t=localStorage.getItem($c);if(t)return t;const e=crypto.randomUUID();return localStorage.setItem($c,e),e}function Bc(t,e,n){if(t.some(t=>t.deviceId===e))return t.map(t=>t.deviceId===e&&void 0!==n&&n!==t.name?{...t,name:n,nameUpdatedAt:Date.now()}:t);const r=Date.now();return[...t,{deviceId:e,createdAt:r,lastSignedInAt:r,name:n}]}function Tc(){if("undefined"==typeof navigator)return"Unknown Device";const t=navigator.userAgent;let e;e=/iPhone/.test(t)?"iPhone":/iPad/.test(t)?"iPad":/Android/.test(t)?/Mobile/.test(t)?"Android Phone":"Android Tablet":/Macintosh|Mac OS X/.test(t)?"Mac":/Windows/.test(t)?"Windows PC":/Linux/.test(t)?"Linux Desktop":"Unknown Device";const n=function(){const t=navigator.userAgentData,e=t?.brands?.map(t=>t.brand);if(e&&0!==e.length)return e.includes("Brave")?"Brave":e.includes("Microsoft Edge")?"Edge":e.includes("Opera")?"Opera":e.includes("Google Chrome")?"Chrome":e.includes("Chromium")?"Chromium":void 0}();if(n)return`${n} on ${e}`;let r;return r=/Edg\//.test(t)?"Edge":/OPR\/|Opera/.test(t)?"Opera":/Firefox\//.test(t)?"Firefox":/Chrome\//.test(t)?"Chrome":/Safari\//.test(t)?"Safari":"Unknown Browser",`${r} on ${e}`}const Oc=Object.entries({deviceId:"all",createdAt:"all",name:"all",nameUpdatedAt:"all",removedAt:"all",lastSignedInAt:"all"}),Mc=18e5;function Rc(t,e,n){const r=e-n;return t.filter(t=>!t.removedAt&&(t.lastSignedInAt??0)>=r).map(t=>t.deviceId)}function Fc(t){const{bee:e,accountsStore:n,postageStampsStore:i,utilizationStore:a,utilizationUploader:o,liveDeviceIds:c}=t;async function d(t,c){const d=n.getAccount(new r(t));if(!d)return void console.warn("[SyncCoordinator] Account not found for utilization update");const u=d.defaultPostageStampBatchID;if(!u)return void console.warn("[SyncCoordinator] No default stamp, skipping utilization");const l=new p(u),h=i.getStamp(l);if(!h)return void console.warn("[SyncCoordinator] Stamp not found, skipping utilization");const f=c.map(t=>({address:{toUint8Array:()=>t,toHex:()=>Array.from(t).map(t=>t.toString(16).padStart(2,"0")).join("")},data:new Uint8Array(0)}));const y=await en(d.derivationKey),w=await Ie(y,Ce),g=new I(w).publicKey().address(),{state:m,tracker:b}=await Vs(l,f,h.depth,{cache:a}),v=function(t,e,n=2){const r=zs(e,n);let i=0;for(const e of t.dataCounters)e>i&&(i=e);return r<=0?1:Math.min(1,i/r)}(m,h.depth);if(i.updateStampUtilization(l,v),b.hasDirtyChunks()){const t=await i.getStamper(l,{owner:g,encryptionKey:ye(y)});if(!t)return void console.warn("[SyncCoordinator] Cannot create stamper, skipping upload");const n=o.scheduleUpload(l.toHex(),b,async()=>{await async function(t,e){const{bee:n,stamper:r,encryptionKey:i,cache:a,tracker:o,reservedBuckets:c}=e,d=o.getDirtyChunks();if(0===d.length)return;const u=qs(t);if(c)for(const t of c)u.add(t);const l=r instanceof Js;for(const e of d){const c=t.chunks[e],d=Ts(t.dataCounters,e,t.batchDepth),h=await Fs({swarmEncryptionKey:i,batchId:t.batchId,chunkIndex:e,plaintext:d,priorNonce:c.nonce,claimedBuckets:u});l&&r.markReservedUtilizationChunk(h.address);try{const i=await Ls(n,r,d,h.key),u=s.Binary.uint8ArrayToHex(i);if(c.contentHash===u&&c.nonce===h.nonce){o.markClean(e);continue}c.contentHash=u,c.lastUpload=Date.now(),c.dirty=!1,c.nonce=h.nonce,await a.putChunk({batchId:t.batchId.toHex(),chunkIndex:e,data:d,contentHash:u,nonce:h.nonce,lastAccess:Date.now()}),o.markClean(e)}catch(t){throw console.error(`[BatchUtil] Failed to upload chunk ${e}:`,t),l&&r.clearReservedUtilizationChunks(),t}}l&&r.clearReservedUtilizationChunks(),t.lastSync=Date.now()}(m,{bee:e,stamper:t,encryptionKey:ye(y),cache:a,tracker:b,reservedBuckets:t instanceof Js?t.getProtectedBuckets():void 0}),t.flush&&await t.flush()});return Je(n,3e4,"Utilization upload timeout (30000ms)")}}return async function(t){const s=performance.now(),a=()=>(new Date).toISOString(),o=await async function(t){const e=n.getAccount(new r(t));if(!e)return void console.warn("[SyncCoordinator] Account not found",t);const s=e.defaultPostageStampBatchID;if(!s)return void console.warn("[SyncCoordinator] No default stamp for account",t);const a=i.getStamp(s);if(!a)return void console.warn("[SyncCoordinator] Default stamp not found");const o=await en(e.derivationKey);return{snapshot:ua(e,t,Date.now()),encryptionKey:o,defaultStamp:a}}(t);if(!o)return;const{snapshot:u,encryptionKey:l,defaultStamp:h}=o,p=u.metadata.partitionCount??1,f=await Ie(l,Ce),y=new I(f),w=y.publicKey().address(),g=await i.getStamper(h.batchID,{owner:w,encryptionKey:ye(l)});if(!g){const t=`Cannot create stamper for batch ${h.batchID.toHex()}`;return console.error(`[SyncCoordinator ${a()}] ${t}`),{status:"error",error:t}}if(!(g instanceof Js)){const t=`Stamper for batch ${h.batchID.toHex()} does not support coordinated writes (expected a UtilizationAwareStamper)`;return console.error(`[SyncCoordinator ${a()}] ${t}`),{status:"error",error:t}}const m=new Yo({bee:e,batchId:h.batchID.toHex(),stamper:g,deviceId:Dc(),accountId:t,knownDeviceIds:()=>[...new Set([...Rc(n.getAccount(new r(t))?.devices??[],Date.now(),Mc),...c?.()??[]])],backupSigner:y,swarmEncryptionKey:ye(l),partitionCount:p,mode:"oneshot"});console.log(`[SyncCoordinator ${a()}] Starting sync for ${t} bee.url=${e.url}`);const b=Dc(),v=u.metadata.devices.find(t=>t.deviceId===b)??{deviceId:b,name:Tc(),createdAt:Date.now(),lastSignedInAt:Date.now()},S=xc(u);try{const n=await Je(m.withWrite(n=>Cc({bee:e,accountId:t,device:v,accountKey:y,owner:w,encryptionKey:l,view:S,target:n,onChunksUploaded:e=>d(t,e)}),{wait:"skip"}),6e4,"Sync timed out after 60000ms");return"error"===n.status&&console.error(`[SyncCoordinator ${a()}] Sync failed (+${(performance.now()-s).toFixed(2)}ms):`,n.error),n}catch(e){return e instanceof Jo?void console.warn(`[SyncCoordinator] Skipping sync ${t}: all partitions are held by other devices.`):(console.error(`[SyncCoordinator ${a()}] Sync failed (+${(performance.now()-s).toFixed(2)}ms):`,e),{status:"error",error:e instanceof Error?e.message:String(e)})}}}function qc(t){const{id:e,derivationKey:n,account:r}=t;return{id:e,name:r.accountName,publicKey:r.publicKey,createdAt:r.createdAt,derivationKey:n,defaultPostageStampBatchID:r.defaultPostageStampBatchID,settings:r.settings,accountNameAt:r.accountNameAt,defaultStampAt:r.defaultStampAt,settingsAt:r.settingsAt,lastModified:t.lastModified??Date.now(),devices:[...r.devices],connectedApps:[...r.connectedApps],postageStamps:[...r.postageStamps],partitionCount:r.partitionCount}}const Lc=new Map;async function Kc(t){const e=`${t.accountId}:${t.derivationKey}`,n=Lc.get(e);if(n)return n;const r=async function(t){const e=await en(t.derivationKey),n=await Ie(e,Ce),r=new I(n).publicKey().address(),i=await gc({bee:t.bee,accountId:t.accountId,owner:r});if(0===i.length)return;const s=(await Promise.all(i.filter(t=>!t.removedAt).map(e=>Uc({bee:t.bee,accountId:t.accountId,deviceId:e.deviceId,owner:r}).catch(()=>{})))).filter(t=>void 0!==t);if(0===s.length)return;const a=Ec(s,i,t.accountId);for(const t of[i,a.devices,a.connectedApps,a.postageStamps])Array.isArray(t)&&Object.freeze(t);return{account:a,devices:i}}(t).finally(()=>{Lc.delete(e)});return Lc.set(e,r),r}async function Nc(t){try{const e=await Kc({bee:t.bee,derivationKey:t.derivationKey,accountId:t.accountId});if(!e)return await async function(t){const e=await en(t.derivationKey),n=new I(await Ie(e,Ce)).publicKey().address(),r=await gc({bee:t.bee,accountId:t.accountId,owner:n});return 0===r.length}(t)?"allowed":"unconfirmed";const n=e.account.connectedApps.find(e=>e.appUrl===t.appOrigin);return void 0===n||void 0!==n.revokedAt||void 0!==n.disconnectedAt&&n.disconnectedAt>(t.connectedAt??0)?"ended":"allowed"}catch{return"unconfirmed"}}const Hc="swarm-id-first-party";async function Wc(){try{if("undefined"==typeof window||window.self!==window.top)return;localStorage.setItem(Hc,await Hi("1"))}catch{}}async function jc(){try{const t=localStorage.getItem(Hc);return!!Ni(t)&&(await Gi([t]),"1"===Vi(t))}catch{return!1}}const zc="0x45a1502382541cd610cc9068e88727426b696293";function Gc(t,e){return function(t){try{const{hostname:e}=new URL(t);return"localhost"===e||"127.0.0.1"===e||"0.0.0.0"===e}catch{return!1}}(t)&&e?e:zc}const Vc=new RegExp("^[0-9a-f]{64}$");function Jc(t){const e=t.startsWith("0x")?t.slice(2):t;if(0===e.length)throw new Error("Empty uint return");return BigInt(`0x${e}`)}async function Zc(t,e,n=zc){try{const r=function(t){const e=(t.startsWith("0x")?t.slice(2):t).toLowerCase();if(!Vc.test(e))throw new Error(`Invalid batch ID: ${t}`);return e}(e),[i,s,a]=await async function(t,e){return(await rn(t,e.map(t=>({method:"eth_call",params:[{to:t.to,data:t.data},"latest"]})),{timeoutMs:sn})).map(t=>{if("string"!=typeof t)throw new Error("eth_call returned something other than a hex string");return t})}(t,[{to:n,data:`0xc81e25ab${r}`},{to:n,data:"0x51b17cd0"},{to:n,data:"0x053f14da"}]),o=function(t){const e=function(t){const e=t.startsWith("0x")?t.slice(2):t,n=[];for(let t=0;t<e.length;t+=64)n.push(e.slice(t,t+64));return n}(t);if(e.length<6)throw new Error(`Unexpected batches() return length: ${t}`);return{owner:`0x${e[0].slice(24)}`,depth:Number(BigInt(`0x${e[1]}`)),bucketDepth:Number(BigInt(`0x${e[2]}`)),immutableFlag:0n!==BigInt(`0x${e[3]}`),normalisedBalance:BigInt(`0x${e[4]}`),lastUpdatedBlockNumber:BigInt(`0x${e[5]}`)}}(i);return"0x0000000000000000000000000000000000000000"===o.owner?{status:"not-found"}:{status:"found",state:{batch:o,currentTotalOutPayment:Jc(s),lastPrice:Jc(a)}}}catch{return{status:"error"}}}function Yc(t){const e=t.batch.normalisedBalance-t.currentTotalOutPayment;if(e<=0n)return 0;if(t.lastPrice<=0n)return;const n=e/t.lastPrice;return Number(n*BigInt(nn))}async function _c(t,e,n=zc){const r=await async function(t,e,n=zc){const r=await Zc(t,e,n);return"found"===r.status?r.state:void 0}(t,e,n);if(void 0!==r)return Yc(r)}const Qc=864e5,Xc=7*Qc;function td(t){return t?.appSessionDuration??Xc}const ed=32;function nd(t){if(32!==t.length)throw new Error("Private key must be 32 bytes");const e=on.getPublicKey(t,!1);return{x:e.slice(1,33),y:e.slice(33)}}function rd(t,e,n){const r=function(t,e,n){if(32!==t.length)throw new Error("Private key must be 32 bytes");if(e.length!==ed||n.length!==ed)throw new Error("Public key coordinates must be 32 bytes each");const r=new Uint8Array(65);return r[0]=4,r.set(e,1),r.set(n,33),on.getSharedSecret(t,r,!0).slice(1)}(t,e,n),i=new Uint8Array(r.length+1);i.set(r),i[r.length]=0;const a=s.Binary.keccak256(i),o=new Uint8Array(r.length+1);o.set(r),o[r.length]=1;return{lookupKey:a,accessKeyDecryptionKey:s.Binary.keccak256(o)}}function id(t,e){if(32!==e.length)throw new Error("Key must be 32 bytes");const n=new Uint8Array(t.length),r=Math.ceil(t.length/32);for(let i=0;i<r;i++){const r=new Uint8Array(e.length+4);r.set(e),r[e.length]=255&i,r[e.length+1]=i>>8&255,r[e.length+2]=i>>16&255,r[e.length+3]=i>>24&255;const a=s.Binary.keccak256(r),o=s.Binary.keccak256(a),c=32*i,d=Math.min(c+32,t.length);for(let e=c;e<d;e++)n[e]=t[e]^o[e-c]}return n}const sd=id;function ad(t){if(33!==t.length)throw new Error("Compressed public key must be 33 bytes");const e=t[0];if(2!==e&&3!==e)throw new Error("Invalid compressed public key prefix");const n=on.ProjectivePoint.fromHex(t).toRawBytes(!1);return{x:n.slice(1,33),y:n.slice(33)}}function od(t,e){if(t.length!==ed||e.length!==ed)throw new Error("Public key coordinates must be 32 bytes each");const n=1&e[e.length-1]?3:2,r=new Uint8Array(33);return r[0]=n,r.set(t,1),r}function cd(t){const e={entries:{}};for(const n of t){const t=fe(n.lookupKey);e.entries[t]={reference:fe(n.encryptedAccessKey),metadata:{}}}const n=JSON.stringify(e);return(new TextEncoder).encode(n)}function dd(t){const e=(new TextDecoder).decode(t),n=JSON.parse(e),r=[];for(const[t,e]of Object.entries(n.entries))r.push({lookupKey:ye(t),encryptedAccessKey:ye(e.reference)});return r}function ud(t,e){return t.find(t=>{if(t.lookupKey.length!==e.length)return!1;for(let n=0;n<e.length;n++)if(t.lookupKey[n]!==e[n])return!1;return!0})}const ld=65,hd=(new TextEncoder).encode("act-grantee-list");function pd(t){const e=s.Binary.concatBytes(t,hd);return s.Binary.keccak256(e)}function fd(t,e){const n=function(t){const e=new Uint8Array(t.length*ld);for(let n=0;n<t.length;n++){const r=n*ld;e[r]=4,e.set(t[n].x,r+1),e.set(t[n].y,r+1+32)}return e}(t);return function(t,e){return id(t,pd(e))}(n,e)}function yd(t,e){const n=function(t,e){const n=pd(e);return sd(t,n)}(t,e);return function(t){if(0===t.length)return[];if(t.length%ld!==0)throw new Error(`Invalid grantee list length: ${t.length} is not a multiple of 65`);const e=t.length/ld,n=[];for(let r=0;r<e;r++){const e=r*ld;if(4!==t[e])throw new Error(`Invalid public key prefix at index ${r}: expected 0x04, got 0x${t[e].toString(16)}`);const i=t.slice(e+1,e+1+32),s=t.slice(e+1+32,e+ld);n.push({x:i,y:s})}return n}(n)}const wd=BigInt("9223372036854775807"),gd=new TextEncoder,md="encryptedglref";let bd=0;function vd(t){return(wd-BigInt(t)).toString()}function Sd(t){const e=BigInt(t);return Number(wd-e)}function kd(t,e,n,r){const i=vd(e),s=ye(n),a=r?{[md]:r}:void 0;t.addFork(gd.encode(i),s,a)}function xd(t){const e=t.collect();if(0===e.length)return;e.sort((t,e)=>t.fullPathString.localeCompare(e.fullPathString));const n=e[0];return{timestamp:Sd(n.fullPathString),metadata:{actReference:fe(n.targetAddress),encryptedGranteeListRef:n.metadata?.[md]}}}async function Id(t,e){const n=await async function t(n,r){for(const e of n.forks.values())await t(e.node,!1);const i=await n.marshal(),s=await e(i,r);return n.selfAddress=ye(s.reference),s}(t,!0);return{rootReference:n.reference,tagUid:n.tagUid}}function Ad(t,e){return z.unmarshalFromData(t,e)}async function Cd(t,e){await async function t(n){for(const r of n.forks.values()){if(!r.node.selfAddress)throw new Error("Fork node selfAddress is not set");const n=fe(r.node.selfAddress),i=await e(n),s=z.unmarshalFromData(i,r.node.selfAddress);r.node.targetAddress=s.targetAddress,r.node.forks=s.forks,r.node.obfuscationKey=s.obfuscationKey;for(const t of r.node.forks.values())t.node.parent=r.node;await t(r.node)}}(t)}function Ud(){const t=Math.floor(Date.now()/1e3);return t<=bd?(bd+=1,bd):(bd=t,t)}function Pd(t){return Array.isArray(t)?t:[t]}function Ed(t,e){for(const n of Pd(e)){const e=nd(n),r=rd(n,e.x,e.y),i=ud(t,r.lookupKey);if(i)return{privateKey:n,derived:r,entry:i}}throw new Error("Cannot find publisher entry in ACT")}function $d(t){let e=!0;for(let n=32;n<t.length;n++)if(0!==t[n]){e=!1;break}return fe(e?t.slice(0,32):t)}async function Dd(t,e,n,r,i,s,a){const o=cn(),c=id(e,o),d=nd(n),u=[],l=rd(n,d.x,d.y);u.push({lookupKey:l.lookupKey,encryptedAccessKey:id(o,l.accessKeyDecryptionKey)});for(const t of r){const e=rd(n,t.x,t.y);u.push({lookupKey:e.lookupKey,encryptedAccessKey:id(o,e.accessKeyDecryptionKey)})}const h=cd(u),p=!0===i?.beeCompatible,f=await ps(t,h,{encryptionKey:!p||void 0,pin:i?.pin,deferred:i?.deferred,tag:i?.tag,requestOptions:s}),y=fd(r,n),w=await ps(t,y,{encryptionKey:!0,pin:i?.pin,deferred:i?.deferred,requestOptions:s}),g=Ud(),m=new z;kd(m,g,f.reference,w.reference);const b=await Id(m,async(e,n)=>ps(t,e,{encryptionKey:!p||void 0,pin:i?.pin,deferred:i?.deferred,tag:i?.tag,onProgress:n?a:void 0,requestOptions:s})),v=b.rootReference,S=b.tagUid,k=od(d.x,d.y);return{encryptedReference:fe(c),historyReference:v,granteeListReference:w.reference,publisherPubKey:fe(k),actReference:f.reference,tagUid:S}}async function Bd(t,e,n,r,i,s,a){const o=ad(ye(r)),c=Ad(await Qe(t,n,void 0,void 0,a),ye(n));await Cd(c,async e=>Qe(t,e,void 0,void 0,a));const d=s?function(t,e){const n=vd(e),r=t.collect();if(0===r.length)return;r.sort((t,e)=>t.fullPathString.localeCompare(e.fullPathString));for(const t of r)if(t.fullPathString>=n)return{timestamp:Sd(t.fullPathString),metadata:{actReference:fe(t.targetAddress),encryptedGranteeListRef:t.metadata?.[md]}};const i=r[r.length-1];return{timestamp:Sd(i.fullPathString),metadata:{actReference:fe(i.targetAddress),encryptedGranteeListRef:i.metadata?.[md]}}}(c,s):xd(c);if(!d)throw new Error("No ACT entry found in history");const u=d.metadata.actReference,l=dd(await Qe(t,u,void 0,void 0,a));for(const t of Pd(i)){const n=nd(t);for(const r of[o,n]){const n=rd(t,r.x,r.y),i=ud(l,n.lookupKey);if(!i)continue;const s=sd(i.encryptedAccessKey,n.accessKeyDecryptionKey);return $d(sd(ye(e),s))}}throw new Error("Access denied: no ACT entry found for this key")}function Td(t){return ad(ye(t))}const Od="index.bin";function Md(t){return ua(t,t.id.toHex(),t.lastModified??t.createdAt)}function Rd(t){return{version:1,accountId:t.accountId,deviceId:"",timestamp:t.timestamp,...xc(t)}}function Fd(){return new we("upload-unavailable","The account is in subsidised mode: the gateway pays for and stamps every upload, so there is no stamp of the account's to return.",{reason:"subsidised"})}const qd=new Map;function Ld(){return new we("not-authenticated","This session was ended from the account. Connect again to write.")}class Kd{get stampRefusal(){return this.stampLifetime&&io(this.stampLifetime)}get beeApiUrl(){return this.siteBeeApiUrl??this.ownBeeApiUrl}dropGatewayForOwnCustomNode(){void 0===this.siteBeeApiUrl&&this.ownBeeApiUrl!==dn&&(this.subsidisedGatewayUrl=void 0)}get bee(){return this.beeClientFor(this.isSubsidisedModeActive()?this.subsidisedGatewayUrl:this.beeApiUrl)}get nodeBee(){return this.beeClientFor(this.beeApiUrl)}get accountBee(){return this.beeClientFor(this.ownBeeApiUrl)}beeClientFor(t){let e=this.beeClients.get(t);return e||(this.beeClients.size>=4&&this.beeClients.clear(),e=new pi(t),this.beeClients.set(t,e)),e}constructor(t){this.parentIdentified=!1,this.parentIdentifyReceived=!1,this.authenticated=!1,this.storagePartitioned=!1,this.busJoinGeneration=0,this.pendingYields=new Map,this.answeredRequests=new Set,this.pendingLaneUpdates=new Map,this.lastRestampMs=new Map,this.beeClients=new Map,this.unsubscribeStorageListeners=[],this.storageWorkQueue=Promise.resolve(),this.presence=new wa,this.stamperInitGeneration=0,this.publishInFlight=!1,this.lastDeviceRegistryRefreshAt=0,this.siteAllowList=t.siteAllowList;const e=da().load();this.ownBeeApiUrl=e?.beeNodeUrl||dn,this.gnosisRpcUrl=e?.gnosisRpcUrl||un,this.postageStampContractAddress=t.postageStampContractAddress||zc,this.signalingUrl=t.signalingUrl,this.signalingUrl||console.info("[Proxy] No account-bus signaling URL configured — cross-partition and cross-device coordination is off (docs/Account-Bus.md)."),this.setupMessageListener(),this.setupStorageListeners(),this.bus=new ki([]),this.setupBusListeners(),this.announceReady()}setupStorageListeners(){if(this.unsubscribeStorageListeners.length>0)return;const t=ca();if(this.unsubscribeStorageListeners.push(t.subscribe((t,e)=>{this.enqueueReconcile("handleAccountStorageChange",()=>this.handleAccountStorageChange(e?.noRepublish?"bus":"storage"))})),"undefined"!=typeof window){const t=t=>{t.key===Ue&&(this.partitionAccount||(this.applyNetworkSettings(),this.emitConnectionInfoIfChanged()))};window.addEventListener("storage",t),this.unsubscribeStorageListeners.push(()=>window.removeEventListener("storage",t))}}enqueueReconcile(t,e){this.storageWorkQueue=this.storageWorkQueue.then(()=>e().catch(e=>{console.error(`[Proxy] ${t} failed:`,e)}))}applyNetworkSettings(){this.applyNetworkSettingsValues(da().load())}applyNetworkSettingsValues(t){this.gnosisRpcUrl=t?.gnosisRpcUrl||un;const e=t?.beeNodeUrl||dn;e!==this.ownBeeApiUrl&&(this.ownBeeApiUrl=e,this.dropGatewayForOwnCustomNode())}async handleAccountStorageChange(t="storage"){await this.reevaluateConnection(t)}async reevaluateConnection(t){if(!this.parentOrigin)return;await ca().prime();const e=this.findConnectionForParent();if(e){const{app:n}=e;this.authenticated&&n.appSecret===this.appSecret?(this.storagePartitioned&&"bus"!==t||await this.refreshStampFromStorage(),this.emitConnectionInfoIfChanged()):await this.authenticateFromStorage(n),"storage"===t&&this.schedulePublish("change")}else!this.authenticated||this.storagePartitioned&&"bus"!==t||("storage"===t&&this.publishAccountDelta({ofEndedConnection:!0}),this.clearAuthData(),this.sendToParent({type:"disconnectResponse",requestId:"bus"===t?"account-delta":"storage-event",success:!0}))}async refreshStampFromStorage(){this.joinAccountBus();const t=this.lookupPostageStampForApp(),e=t?.batchID.toHex(),n=t?.signerKey.toHex(),r=t?await this.lookupAccountForApp():void 0,i=r?`${r.owner.toHex()}-${fe(r.encryptionKey)}`:void 0;var s,a;e===this.postageBatchId&&n===this.signerKey&&i===this.stamperAccountFingerprint&&(s=t,a=this.stampLifetime,void 0===s||void 0===a?s===a:s.batchTTL===a.batchTTL&&(s.updatedAt??s.createdAt)===(a.updatedAt??a.createdAt)&&s.usable===a.usable&&s.exists===a.exists)||(this.setResolvedStamp(t),t&&await this.initializeStamper(t.depth))}setResolvedStamp(t){this.teardownCoordinator(),this.stamper=void 0,this.stamperAccountFingerprint=void 0,this.postageBatchId=t?.batchID.toHex(),this.signerKey=t?.signerKey.toHex(),this.stampLifetime=t}async authenticateFromStorage(t){this.appSecret=t.appSecret,this.chatBinding=void 0,this.authenticated=!0,this.restoredSessionCheck=void 0,this.storagePartitioned=!1,this.partitionAccount=void 0,this.deviceId=Dc(),this.joinAccountBus();const e=this.lookupPostageStampForApp();this.setResolvedStamp(e),e&&await this.initializeStamper(e.depth),this.sendToParent({type:"authSuccess",origin:this.parentOrigin}),this.emitConnectionInfoIfChanged()}async handlePopupMessage(t){if("setSecret"===t.type){if(this.isStampHandover(t))return void await this.adoptHandover(t.data);if(!this.pendingChallenge||t.challenge!==this.pendingChallenge)return void console.warn("[Proxy] setSecret challenge mismatch — ignoring");if(t.appOrigin!==this.parentOrigin)return void console.warn("[Proxy] setSecret appOrigin mismatch:",t.appOrigin,"!==",this.parentOrigin);this.pendingChallenge=void 0,this.handedOverChallenge=t.challenge,localStorage.removeItem(ln),await this.adoptHandover(t.data)}}isSiblingFrame(t){if(!t||t===window)return!1;try{return t.parent===window.parent}catch{return!1}}awaitHandover(t){this.pendingChallenge=t,this.handedOverChallenge=void 0}isStampHandover(t){return this.authenticated&&this.storagePartitioned&&void 0!==this.handedOverChallenge&&t.challenge===this.handedOverChallenge&&t.appOrigin===this.parentOrigin&&t.data.secret===this.appSecret}async adoptHandover(t){this.appSecret=t.secret,this.chatBinding=this.acceptHandedOverChatBinding(t),this.authenticated=!0,this.restoredSessionCheck=void 0,this.storagePartitioned=!0,this.deviceId=Dc(),await this.hydratePartitionAccount(t.account,t.secret,t.networkSettings,Date.now(),t.stampPending),this.reactivateThisDevice(),this.savePartitionSession(t),this.sendToParent({type:"authSuccess",origin:this.parentOrigin}),this.emitConnectionInfoIfChanged()}acceptHandedOverChatBinding(t){if(this.parentOrigin)return hn(t.chatBinding,{site:this.parentOrigin,chatAddress:pn(t.secret),signer:t.account.id.toHex()},{allowLocalHttp:!0})}savePartitionSession(t){if(!this.parentOrigin)return;const e=this.parentOrigin,n=this.partitionAccount?.connectedApps.find(t=>t.appUrl===e),r=n?.connectedUntil??Date.now()+td(this.partitionAccount?.settings),i={...t,account:Ys({...t.account,connectedApps:fn(t.account.connectedApps,e)})};this.writePartitionSession(e,async()=>({version:1,parentOrigin:e,connectedUntil:r,data:await Hi(JSON.stringify(i))}))}refreshStoredPartitionAccount(){if(!this.partitionAccount||!this.parentOrigin)return;const t=this.parentOrigin,e=Ys(this.partitionAccount);this.writePartitionSession(t,async()=>{const n=await this.openStoredPartitionSession(t);if(n&&"unavailable"!==n)return{...n.record,data:await Hi(JSON.stringify({...n.wire,account:e}))}})}clearPartitionSession(){this.parentOrigin&&this.writePartitionSession(this.parentOrigin,async()=>null)}writePartitionSession(t,e){const n=yn(t),r=(qd.get(n)??Promise.resolve()).then(async()=>{const t=await e();void 0!==t&&(null===t?localStorage.removeItem(n):localStorage.setItem(n,JSON.stringify(t)))}).catch(t=>{console.warn("[Proxy] Could not persist the partitioned session:",t)});qd.set(n,r)}async openStoredPartitionSession(t){let e,n=null;try{n=localStorage.getItem(yn(t))}catch{return}if(!n)return;try{e=JSON.parse(n)}catch{return}const r=wn.safeParse(e);if(!r.success||!Ni(r.data.data))return;await Gi([r.data.data]);const i=Vi(r.data.data);if(void 0===i)return zi(r.data.data)?"unavailable":void 0;try{return{record:r.data,wire:JSON.parse(i)}}catch{return}}async readPartitionSession(){if(!this.parentOrigin)return;const t=this.parentOrigin;await qd.get(yn(t));let e=null;try{e=localStorage.getItem(yn(t))}catch{return}if(!e)return;const n=await this.openStoredPartitionSession(t);if("unavailable"===n)return;const r=n&&gn.safeParse(n.wire);if(n&&r?.success){if(n.record.parentOrigin===t)if(n.record.connectedUntil<=Date.now())this.clearPartitionSession();else{if(void 0===r.data.chatBinding||this.acceptHandedOverChatBinding(r.data))return{parentOrigin:n.record.parentOrigin,connectedUntil:n.record.connectedUntil,data:r.data};this.clearPartitionSession()}}else this.clearPartitionSession()}async hydratePartitionAccount(t,e,n,r,i){const s=Date.now(),a={...t.connectedApps.find(t=>t.appUrl===this.parentOrigin)??{appUrl:this.parentOrigin,appName:this.appMetadata?.name??this.parentOrigin,lastConnectedAt:r},appSecret:e,lastConnectedAt:r,connectedUntil:s+td(t.settings),stampPending:i};this.partitionAccount={...t,connectedApps:[a,...fn(t.connectedApps.filter(t=>t.appUrl!==this.parentOrigin),this.parentOrigin)],access:{type:"password",kdfSalt:"",kdfIterations:0},encryptedSeed:""},this.applyNetworkSettingsValues(n),await this.refreshStampFromStorage()}joinAccountBus(){const t=this.findConnectionForParent();if(!t)return;const{derivationKey:e}=t.account,n=t.account.id.toHex();e!==this.busJoinedKey&&this.ensureAccountBusTransports(e,n)}async ensureAccountBusTransports(t,e){const n=++this.busJoinGeneration;let r;try{r=await fa(t)}catch(t){return console.error("[Proxy] Failed to derive the account bus context:",t),void(n===this.busJoinGeneration&&this.detachBusTransports())}if(n!==this.busJoinGeneration)return;const i=this.busTopic!==r.topic;if(i){this.detachBusTransports();try{this.removeBusLocal=this.bus.addTransport(new Si(r.topic))}catch(t){return void console.error("[Proxy] Failed to attach the local bus transport:",t)}this.busTopic=r.topic,this.presenceTimer=setInterval(()=>this.publishPresence(),2e4)}if(this.busBoundAccountId=e,i&&this.publishPresence(),this.signalingUrl&&!this.removeBusSignaling)try{this.removeBusSignaling=this.bus.addTransport(new ka({url:this.signalingUrl,topic:r.topic,encryptionKey:r.encryptionKey,createPeerConnection:"undefined"!=typeof RTCPeerConnection?()=>new RTCPeerConnection:void 0}))}catch(t){return void console.error("[Proxy] Failed to attach the bus signaling transport:",t)}this.busJoinedKey=t}publishPresence(){const t=this.busBoundAccountId,e=this.deviceId;t&&e&&this.bus.publish({type:"presence",accountId:t,fromDeviceId:e})}stopPresence(){void 0!==this.presenceTimer&&(clearInterval(this.presenceTimer),this.presenceTimer=void 0),this.presence.clear()}detachBusTransports(){this.stopPresence(),this.removeBusSignaling?.(),this.removeBusSignaling=void 0,this.removeBusLocal?.(),this.removeBusLocal=void 0,this.busTopic=void 0,this.busJoinedKey=void 0,this.busBoundAccountId=void 0}destroy(){for(const t of this.unsubscribeStorageListeners)t();this.unsubscribeStorageListeners=[],this.teardownCoordinator(),void 0!==this.publishTimer&&(clearTimeout(this.publishTimer),this.publishTimer=void 0),this.busJoinGeneration+=1,this.stopPresence(),this.removeBusLocal=void 0,this.removeBusSignaling=void 0,this.busTopic=void 0,this.busJoinedKey=void 0,this.busBoundAccountId=void 0,this.bus.close()}teardownCoordinator(){this.cancelPendingYields(),this.coordinator?.teardown(),this.coordinator=void 0,this.terminateStampWorkerPool()}terminateStampWorkerPool(){this.stampWorkerPool?.terminate(),this.stampWorkerPool=void 0}static laneKey(t,e,n){return`${t}:${e}/${n}`}bufferLaneUpdate(t){const e=Kd.laneKey(t.batchId,t.partition,t.partitionCount),n=this.pendingLaneUpdates.get(e)??new Map;for(const{index:e,value:r}of t.buckets){const t=n.get(e);(void 0===t||r>t)&&n.set(e,r)}this.pendingLaneUpdates.set(e,n)}applyPendingLaneUpdate(){const t=this.pendingLaneUpdates;this.pendingLaneUpdates=new Map;const e=this.stamper?.currentPartition;if(!this.stamper||!this.postageBatchId||void 0===e)return;const n=t.get(Kd.laneKey(this.postageBatchId,e,this.stamper.partitionCount));n&&this.stamper.applyUtilizationUpdate([...n].map(([t,e])=>({index:t,value:e})))}answerLeaseRequest(t,e,n){const r=this.coordinator;r&&(this.answeredRequests.has(n)||(this.markRequestAnswered(n),this.bus.publish({type:"lease-claim",accountId:t,batchId:e,fromDeviceId:this.requireDeviceId(),requestId:n}),r.yieldForPeer(n).catch(t=>{console.error("[Proxy] Peer lease yield failed:",t)})))}yieldRankDelayMs(t){const e=this.coordinator,n=e?.currentPartition,r=e?.partitionCount??1;if(void 0===n||r<=1)return 0;const i=Number.parseInt(t.slice(0,8),16);return Number.isFinite(i)?(i+n)%r*250:250*(r-1)}standDownFromRequest(t){if(void 0===t)return;this.markRequestAnswered(t);const e=this.pendingYields.get(t);void 0!==e&&(clearTimeout(e),this.pendingYields.delete(t))}markRequestAnswered(t){if(this.answeredRequests.add(t),this.answeredRequests.size<=32)return;const e=this.answeredRequests.values().next().value;void 0!==e&&this.answeredRequests.delete(e)}cancelPendingYields(){for(const t of this.pendingYields.values())clearTimeout(t);this.pendingYields.clear()}setupBusListeners(){this.bus.onPeerLeft(t=>this.presence.forgetPeer(t)),this.bus.subscribe((t,e)=>{switch(t.type){case"utilization-updated":{if(t.batchId!==this.postageBatchId||!this.stamper)return;const e=this.stamper.currentPartition;return void 0===e?void(0===t.partition&&1===t.partitionCount?this.stamper.applyUtilizationUpdate(t.buckets):this.bufferLaneUpdate(t)):void(t.partition===e&&t.partitionCount===this.stamper.partitionCount&&this.stamper.applyUtilizationUpdate(t.buckets))}case"lease-request":{const e=this.coordinator;if(!e||t.accountId!==e.accountId||t.batchId!==e.batchId||t.fromDeviceId===this.deviceId)return;const{requestId:n}=t;if(this.pendingYields.has(n))return;if(this.answeredRequests.has(n))return;if(!e.canYieldForPeer)return;const r=setTimeout(()=>{this.pendingYields.delete(n),this.answerLeaseRequest(t.accountId,t.batchId,n)},this.yieldRankDelayMs(n));return void this.pendingYields.set(n,r)}case"lease-claim":if(t.fromDeviceId===this.deviceId||t.accountId!==this.coordinator?.accountId||t.batchId!==this.coordinator?.batchId)return;return void this.standDownFromRequest(t.requestId);case"lease-released":if(t.fromDeviceId===this.deviceId||t.accountId!==this.coordinator?.accountId||t.batchId!==this.coordinator?.batchId)return;return this.standDownFromRequest(t.requestId),void this.coordinator?.notifySlotMaybeFree();case"account-delta":return void this.applyAccountDelta(t.snapshot);case"presence":if(t.accountId!==this.busBoundAccountId||t.fromDeviceId===this.deviceId)return;return void this.presence.observe(t.fromDeviceId,Date.now(),e)}})}applyAccountDelta(t){const e=this.findConnectionForParent({includeEnded:!0});if(!e||t.accountId!==e.account.id.toHex())return;const{account:n}=e;if(this.partitionAccount){const r=Ec([Rd(Md(n)),Rd(t)],ao(n.devices,t.metadata.devices),n.id.toHex()),i=qc({id:n.id,derivationKey:n.derivationKey,account:r,lastModified:Math.max(n.lastModified??n.createdAt,t.metadata.lastModified)}),s=fn(pa(r.connectedApps,n.connectedApps),e.app.appUrl);this.partitionAccount={...this.partitionAccount,...i,connectedApps:s,postageStamps:ro(s.find(t=>t.appUrl===e.app.appUrl)??e.app,i,i.postageStamps)},this.refreshStoredPartitionAccount()}this.enqueueReconcile("applyAccountDelta",()=>this.reevaluateConnection("bus"))}createProgressCallback(t,e,n){if(n)return n=>{this.postMessage(t,{type:"uploadProgress",requestId:e,total:n.total,processed:n.processed})}}announceReady(){window.parent&&window.parent!==window&&window.parent.postMessage({type:"proxyInitialized"},"*")}getPostageBatchId(){return this.postageBatchId}getSignerKey(){return this.signerKey}async initializeStamper(t){const{signerKey:e,postageBatchId:n}=this;if(!e||!n)return void console.warn("[Proxy] Cannot initialize stamper: missing signer key or batch ID");const r=++this.stamperInitGeneration,i=()=>this.postageBatchId!==n||this.signerKey!==e||this.stamperInitGeneration!==r,s=await this.lookupAccountForApp();if(i())return;if(!s)return void console.warn("[Proxy] Cannot initialize stamper: account not found");let a;this.utilizationStore||(this.utilizationStore=new Fa);try{a=await Js.create(e,new p(n),t,this.utilizationStore,s.owner,s.encryptionKey)}catch(t){return void console.error("[Proxy] Failed to create stamper:",t)}if(i())return;this.stamper=a,this.stamperAccountFingerprint=`${s.owner.toHex()}-${fe(s.encryptionKey)}`;const o=function(){try{if("undefined"==typeof localStorage)return;const t=localStorage.getItem("swarm-id-partition-tuning");if(!t)return;const e=JSON.parse(t);if("object"!=typeof e||null===e)return;const n=t=>"number"==typeof t&&Number.isFinite(t)&&t>=0?t:void 0,r=e;return{guardWindowMs:n(r.guardWindowMs),guardPollMs:n(r.guardPollMs),readTimeoutMs:n(r.readTimeoutMs)}}catch{return}}(),c=()=>this.accountBee;this.coordinator=new Yo({get bee(){return c()},batchId:n,stamper:a,deviceId:this.requireDeviceId(),knownDeviceIds:()=>this.knownDeviceIdsForAccount(s.accountId),refreshKnownDeviceIds:()=>this.refreshDeviceRegistryFromSwarm(s.accountId,s.encryptionKey),intentReadTimeoutMs:o?.readTimeoutMs,intentGuardWindowMs:o?.guardWindowMs,intentGuardPollMs:o?.guardPollMs,accountId:s.accountId,backupSigner:new I(Te(fe(s.encryptionKey),Ce)),swarmEncryptionKey:s.encryptionKey,partitionCount:s.partitionCount,mode:"persistent",readLeaseCache:()=>this.readLeaseCache(s.accountId,n),writeLeaseCache:t=>this.writeLeaseCache(s.accountId,n,t??null),flushStamperState:()=>this.saveStamperStateIfNeeded(),getWorkerPool:t=>this.getOrCreateWorkerPool(t),onLeaseChange:()=>this.emitConnectionInfoIfChanged(),onSlotWait:()=>this.bus.publish({type:"lease-request",accountId:s.accountId,batchId:n,fromDeviceId:this.requireDeviceId(),requestId:crypto.randomUUID().slice(0,8)}),onLeaseAcquired:()=>{this.applyPendingLaneUpdate(),this.schedulePublish("acquired")},onLeaseReleased:(t,e)=>{this.bus.publish({type:"lease-released",accountId:s.accountId,batchId:n,partition:t,fromDeviceId:this.requireDeviceId(),requestId:e})}}),this.startLeaseOnceAllowed(this.coordinator)}startLeaseOnceAllowed(t){const e=this.restoredSessionCheck;e?e.verdict.then(e=>{"allowed"===e&&this.coordinator===t&&t.startLease()}):t.startLease()}requireDeviceId(){return this.deviceId||(this.deviceId=Dc()),this.deviceId}readLeaseCache(t,e){try{const n=localStorage.getItem(mn(t,e));return n?JSON.parse(n):void 0}catch{return}}writeLeaseCache(t,e,n){const r=mn(t,e);null===n?localStorage.removeItem(r):localStorage.setItem(r,JSON.stringify(n))}async getOrCreateWorkerPool(t){const e=t??("undefined"!=typeof navigator&&navigator.hardwareConcurrency?Math.min(navigator.hardwareConcurrency,8):4);if(this.stampWorkerPool?.size===e&&this.stampWorkerPool.stamper===this.stamper)return this.stampWorkerPool;if(this.terminateStampWorkerPool(),this.signerKey&&this.stamper)try{return this.stampWorkerPool=await to.create(this.signerKey,this.stamper,e),this.stampWorkerPool}catch(t){return void console.warn("[Proxy] Failed to create StampWorkerPool:",t)}}async saveStamperState(){try{await this.persistStamperState()}catch(t){console.error("[Proxy] Failed to save stamper state:",t)}}async persistStamperState(){if(!this.stamper)return;const t=this.stamper.getBucketUpdatesForBroadcast(),e=this.stamper.currentPartition??0,n=this.stamper.partitionCount;await this.stamper.flush(),this.postageBatchId&&t.length>0&&this.bus.publish({type:"utilization-updated",batchId:this.postageBatchId,partition:e,partitionCount:n,buckets:t},{localOnly:!0})}async withModeAwareWriteLock(t,e){if(this.isSubsidisedModeActive())return e({mode:"subsidised",gatewayUrl:this.subsidisedGatewayUrl});if(!this.coordinator)throw new we("not-authenticated","Stamper not initialized. Please login first.");return this.coordinator.withWrite(t=>e("stamper"===t.mode?{...t,bee:this.nodeBee}:t),t)}async saveStamperStateIfNeeded(){this.isSubsidisedModeActive()||await this.saveStamperState()}setupMessageListener(){window.addEventListener("message",async t=>{const{type:e}=t.data;if("parentIdentify"===e){if(t.source!==window.parent)return void console.warn("[Proxy] Rejected parentIdentify from non-parent window");const e=bn.safeParse(t.data);if(!e.success)return void console.warn("[Proxy] Invalid parentIdentify message:",e.error);try{await this.handleParentIdentify(e.data,t)}catch(e){console.error("[Proxy] Initialization failed:",e),this.postMessage(t,{type:"initError",error:e instanceof Error?e.message:"Initialization failed"})}return}if(!this.parentIdentified)return void console.warn("[Proxy] Ignoring message - parent not identified yet");if(t.origin===window.location.origin&&"connectWindowOpened"===e){if(!this.isSiblingFrame(t.source))return void console.warn("[Proxy] Ignoring connectWindowOpened from a window that is not a frame beside this one");const e=vn.safeParse(t.data);return void(e.success&&this.awaitHandover(e.data.challenge))}if(t.origin===window.location.origin&&"setSecret"===e){const e=Sn.safeParse(t.data);return e.success?void await this.handlePopupMessage(e.data):void console.warn("[Proxy] Invalid setSecret payload:",e.error)}if(t.origin!==this.parentOrigin)return void console.warn("[Proxy] Rejected message from unauthorized origin:",t.origin);let n;try{n=kn.parse(t.data)}catch(t){return void console.warn("[Proxy] Invalid parent message:",t)}try{await this.handleParentMessage(n,t)}catch(e){console.error("[Proxy] Error handling parent message:",e),this.sendErrorToParent(t,n.requestId,e,"Unknown error")}})}async handleParentIdentify(t,e){if(this.parentIdentifyReceived)return void console.error("[Proxy] Parent already identified! Ignoring duplicate.");this.parentIdentifyReceived=!0;const n=await this.siteAllowList.check(e.origin);if(!n.allowed)throw console.warn("[Proxy] Refused parent:",n.message),new Error(n.message);const r=t.metadata;this.parentOrigin=e.origin,this.parentIdentified=!0,e.source&&(this.parentWindow=e.source),r&&(this.appMetadata=r),this.siteBeeApiUrl=t.beeApiUrl,this.siteSubsidisedGatewayUrl=t.subsidisedGatewayUrl,this.subsidisedGatewayUrl=t.subsidisedGatewayUrl,this.dropGatewayForOwnCustomNode(),await this.loadAuthData();const i=await jc();this.postMessage(e,{type:"proxyReady",authenticated:this.authenticated,parentOrigin:this.parentOrigin,storageShared:i}),this.emitConnectionInfoIfChanged()}async handleParentMessage(t,e){switch(t.type){case"parentIdentify":break;case"checkAuth":this.handleCheckAuth(t,e);break;case"disconnect":this.handleDisconnect(t,e);break;case"uploadData":await this.handleUploadData(t,e);break;case"downloadData":await this.handleDownloadData(t,e);break;case"deriveAppSecret":await this.handleDeriveAppSecret(t,e);break;case"getChatKey":await this.handleGetChatKey(t,e);break;case"setBeeApiUrl":this.handleSetBeeApiUrl(t,e);break;case"stampChunk":await this.handleStampChunk(t,e);break;case"uploadFile":await this.handleUploadFile(t,e);break;case"downloadFile":await this.handleDownloadFile(t,e);break;case"uploadFiles":await this.handleUploadFiles(t,e);break;case"listFiles":await this.handleListFiles(t,e);break;case"uploadChunk":await this.handleUploadChunk(t,e);break;case"downloadChunk":await this.handleDownloadChunk(t,e);break;case"isConnected":await this.handleIsConnected(t,e);break;case"getNodeInfo":await this.handleGetNodeInfo(t,e);break;case"gsocMine":this.handleGsocMine(t,e);break;case"gsocSend":await this.handleGsocSend(t,e);break;case"socUpload":await this.handleSocUpload(t,e);break;case"socRawUpload":await this.handleSocRawUpload(t,e);break;case"socDownload":await this.handleSocDownload(t,e);break;case"socRawDownload":await this.handleSocRawDownload(t,e);break;case"socGetOwner":await this.handleSocGetOwner(t,e);break;case"epochFeedDownloadReference":await this.handleEpochFeedDownloadReference(t,e);break;case"epochFeedUploadReference":await this.handleEpochFeedUploadReference(t,e);break;case"feedGetOwner":await this.handleFeedGetOwner(t,e);break;case"seqFeedGetOwner":await this.handleSequentialFeedGetOwner(t,e);break;case"seqFeedDownloadPayload":await this.handleSequentialFeedDownloadPayload(t,e);break;case"seqFeedDownloadRawPayload":await this.handleSequentialFeedDownloadRawPayload(t,e);break;case"seqFeedDownloadReference":await this.handleSequentialFeedDownloadReference(t,e);break;case"seqFeedUploadPayload":await this.handleSequentialFeedUploadPayload(t,e);break;case"seqFeedUploadRawPayload":await this.handleSequentialFeedUploadRawPayload(t,e);break;case"seqFeedUploadReference":await this.handleSequentialFeedUploadReference(t,e);break;case"actUploadData":await this.handleActUploadData(t,e);break;case"actDownloadData":await this.handleActDownloadData(t,e);break;case"actAddGrantees":await this.handleActAddGrantees(t,e);break;case"actRevokeGrantees":await this.handleActRevokeGrantees(t,e);break;case"actGetGrantees":await this.handleActGetGrantees(t,e);break;case"getPostageBatch":await this.handleGetPostageBatch(t,e);break;case"createFeedManifest":await this.handleCreateFeedManifest(t,e);break;default:const n=t;console.warn("[Proxy] Unhandled message type:",n)}}async loadAuthData(){if(!this.parentOrigin)return;await ca().prime();const t=this.lookupAppSecretFromSharedStorage();if(t){const e=this.findConnectionForParent();e&&this.startRestoredSessionCheck({bee:this.accountBee,derivationKey:e.account.derivationKey,accountId:e.account.id.toHex(),appOrigin:this.parentOrigin,connectedAt:e.app.lastConnectedAt}),this.appSecret=t.secret,this.chatBinding=void 0,this.authenticated=!0,this.joinAccountBus();const n=this.lookupPostageStampForApp();return this.setResolvedStamp(n),void(n&&await this.initializeStamper(n.depth))}const e=await this.readPartitionSession();e&&await this.restorePartitionSession(e)}async restorePartitionSession(t){const{data:e}=t,n=e.account.connectedApps.find(t=>t.appUrl===this.parentOrigin)?.lastConnectedAt;this.startRestoredSessionCheck({bee:this.accountBee,derivationKey:e.account.derivationKey,accountId:e.account.id.toHex(),appOrigin:this.parentOrigin,connectedAt:n}),this.appSecret=e.secret,this.chatBinding=this.acceptHandedOverChatBinding(e),this.authenticated=!0,this.storagePartitioned=!0,this.deviceId=Dc(),await this.hydratePartitionAccount(e.account,e.secret,e.networkSettings,n??Date.now(),e.stampPending),this.emitConnectionInfoIfChanged()}startRestoredSessionCheck(t){const e={input:t,settled:void 0,verdict:Nc(t)};this.restoredSessionCheck=e,e.verdict.then(t=>{e.settled=t,this.restoredSessionCheck===e&&("ended"===t?(console.info("[Proxy] The restored session was ended while this page was closed"),this.clearAuthData()):"unconfirmed"===t&&console.warn("[Proxy] Could not confirm the restored session, writes stay refused"),this.emitConnectionInfoIfChanged())})}async awaitRestoredSessionAllowed(){let t=this.restoredSessionCheck;if(!t)return;"unconfirmed"===t.settled&&(this.startRestoredSessionCheck({...t.input,bee:this.accountBee}),t=this.restoredSessionCheck);const e=await t.verdict;if("allowed"!==e){if("ended"===e)throw Ld();throw new we("upload-unavailable","Could not confirm with Swarm that this session is still allowed to write, so writes are refused until it can be confirmed.",{reason:"session-unconfirmed"})}}async ensureCanWrite(){if("ended"===this.restoredSessionCheck?.settled)throw Ld();this.ensureCanUpload(),await this.awaitRestoredSessionAllowed(),this.ensureCanUpload()}lookupPostageStampForApp(){if(this.parentOrigin)try{const t=this.findConnectionForParent();if(!t)return;const{account:e,app:n}=t;if(n.stampPending)return;return no(n,e,e.postageStamps)}catch(t){return void console.error("[Proxy] Error looking up postage stamp:",t)}}async lookupAccountForApp(){if(this.parentOrigin)try{const t=this.findConnectionForParent();if(!t)return;const{account:e}=t,n=await en(e.derivationKey);return{owner:e.id,encryptionKey:ye(n),accountId:e.id.toHex(),partitionCount:e.partitionCount??1}}catch(t){return void console.error("[Proxy] Error looking up account:",t)}}knownDeviceIdsForAccount(t){const e=Date.now(),n=this.busBoundAccountId===t?this.presence.liveDeviceIds(e):[];try{const r=this.partitionAccount?.id.toHex()===t?this.partitionAccount:ca().load().find(e=>e.id.toHex()===t);return!r||$e(r)?n:[...new Set([...Rc(r.devices,e,Mc),...n])]}catch{return n}}async refreshDeviceRegistryFromSwarm(t,e){const n=Date.now();if(!(n-this.lastDeviceRegistryRefreshAt<8e3)){this.lastDeviceRegistryRefreshAt=n;try{const n=this.partitionAccount?.id.toHex()===t,r=n?void 0:ca();await(r?.prime());const i=r?.load()??[],s=n?this.partitionAccount:i.find(e=>e.id.toHex()===t);if(!s||$e(s))return;const a=new I(await Ie(fe(e),Ce)).publicKey().address(),o=await gc({bee:this.accountBee,accountId:s.id.toHex(),owner:a});if(0===o.length)return;const c=Bc(ao(s.devices,o),this.requireDeviceId(),this.announcedDeviceName());(function(t,e,n){if(t.length!==e.length)return!0;const r=new Map(t.map(t=>[t.deviceId,t]));return e.some(t=>{const e=r.get(t.deviceId);if(!e)return!0;const i=t.deviceId===n;return Oc.some(([n,r])=>(!i||"peers-only"!==r)&&e[n]!==t[n])})})(s.devices,c,this.requireDeviceId())&&(n?this.partitionAccount={...s,devices:c}:r.update(e=>e.map(e=>e.id.toHex()===t?{...e,devices:c}:e)).catch(()=>{}))}catch(t){console.warn("[Proxy] Device-registry refresh failed (using current registry):",t)}}}buildAccountStateSnapshot(t){if(!this.parentOrigin)return;const e=this.findConnectionForParent({includeEnded:t.includeEndedConnection});if(!e)return;const{account:n}=e;return!t.requireDefaultStamp||n.defaultPostageStampBatchID?ua(n,n.id.toHex(),Date.now()):void 0}publishAccountDelta(t){const e=this.buildAccountStateSnapshot({requireDefaultStamp:!1,includeEndedConnection:!0===t?.ofEndedConnection});e&&(void 0===this.busBoundAccountId||e.accountId===this.busBoundAccountId?this.bus.publish({type:"account-delta",snapshot:ha(e)}):console.warn(`[Proxy] Account changed since the bus room was joined (snapshot ${e.accountId} vs bus room ${this.busBoundAccountId}); skipping delta.`))}async buildAccountStateSnapshotForPublish(){if(this.parentOrigin)try{const t=this.findConnectionForParent();if(!t)return;const e=this.buildAccountStateSnapshot({requireDefaultStamp:!0,includeEndedConnection:!1});if(!e)return;const n=await en(t.account.derivationKey),r=new I(await Ie(n,Ce)),i=r.publicKey().address();return{snapshot:e,encryptionKey:n,accountKey:r,owner:i}}catch(t){return void console.error("[Proxy] Failed to assemble account-state snapshot:",t)}}schedulePublish(t){"change"!==this.publishReason&&(this.publishReason=t),void 0!==this.publishTimer&&clearTimeout(this.publishTimer),this.publishTimer=setTimeout(()=>{this.publishTimer=void 0;const t=this.publishReason??"acquired";this.publishReason=void 0,this.runAccountStatePublish(t)},1500)}async runAccountStatePublish(t){if(this.publishInFlight)return void this.schedulePublish(t);"change"===t&&this.publishAccountDelta();const e=this.coordinator;if(e&&void 0!==e.currentPartition){this.publishInFlight=!0;try{const n=await this.buildAccountStateSnapshotForPublish();if(!n)return;if(this.coordinator!==e)return;const{snapshot:r,encryptionKey:i,accountKey:s,owner:a}=n;if(r.accountId!==e.accountId)return void console.warn(`[Proxy] Account changed during publish scheduling (snapshot ${r.accountId} vs coordinator ${e.accountId}); skipping publish.`);const o=this.requireDeviceId();if("acquired"===t){const t=(await gc({bee:this.accountBee,accountId:r.accountId,owner:a}).catch(()=>[])).find(t=>t.deviceId===o);if(t?.removedAt){const e=r.metadata.devices.find(t=>t.deviceId===o);if(!(!!e&&!e.removedAt&&(e.lastSignedInAt??0)>t.removedAt))return void console.info(`[Proxy] This device is tombstoned in the roster for ${r.accountId}; not re-announcing.`);console.info(`[Proxy] This device signed in since its removal from ${r.accountId}; announcing the reactivation.`)}else if(t)return void console.info(`[Proxy] Device already in roster for ${r.accountId}; skipping announce publish.`)}const c=r.metadata.devices.find(t=>t.deviceId===o)??{deviceId:o,name:this.announcedDeviceName(),createdAt:Date.now(),lastSignedInAt:Date.now()},d=xc(r);await e.withWrite(t=>Cc({bee:this.accountBee,accountId:r.accountId,device:c,accountKey:s,owner:a,encryptionKey:i,view:d,target:t})),console.info(`[Proxy] Published device state for ${r.accountId} (partition ${e.currentPartition})`)}catch(t){console.warn("[Proxy] Account-state publish failed:",t)}finally{this.publishInFlight=!1}}}reactivateThisDevice(){const t=this.partitionAccount,e=this.deviceId;if(!t||!e)return;if(!t.devices.some(t=>t.deviceId===e&&t.removedAt))return;const n=Date.now();this.partitionAccount={...t,devices:t.devices.map(t=>t.deviceId===e?{...t,removedAt:void 0,lastSignedInAt:n}:t)}}announcedDeviceName(){return this.storagePartitioned&&this.parentOrigin?function(t){const e=Tc();try{return`${e} · ${new URL(t).host}`}catch{return e}}(this.parentOrigin):Tc()}isConnectionValid(t){return!!t.connectedUntil&&t.connectedUntil>Date.now()}findConnectionForParent(t){if(!this.parentOrigin)return;const e=e=>this.isConnectionValid(e)||!0===t?.includeEnded;if(this.partitionAccount){const t=this.partitionAccount.connectedApps.find(t=>t.appUrl===this.parentOrigin&&e(t));return t?{account:this.partitionAccount,app:t}:void 0}const n=ca().load(),r=[];for(const t of n)if(!$e(t))for(const n of t.connectedApps)n.appUrl===this.parentOrigin&&e(n)&&r.push({account:t,app:n});return r.sort((t,e)=>Number(this.isConnectionValid(e.app))-Number(this.isConnectionValid(t.app))||e.app.lastConnectedAt-t.app.lastConnectedAt)[0]}lookupAppSecretFromSharedStorage(){if(this.parentOrigin)try{const t=this.findConnectionForParent();if(!t?.app.appSecret)return;return{secret:t.app.appSecret}}catch(t){return void console.error("[Proxy] Error looking up app secret from shared storage:",t)}}clearAuthData(){if(!this.parentOrigin)return;this.clearPartitionSession();const t=`swarm-stamper-${this.parentOrigin}-${this.postageBatchId}`;localStorage.removeItem(t);const e=this.parentOrigin;ca().update(t=>{let n=!1;const r=t.map(t=>{if($e(t))return t;const r=t.connectedApps.map(t=>t.appUrl===e?(n=!0,{...t,connectedUntil:void 0,appSecret:void 0,disconnectedAt:Date.now()}):t);return{...t,connectedApps:r}});return n?r:void 0}).catch(()=>{}),this.authenticated=!1,this.appSecret=void 0,this.chatBinding=void 0,this.setResolvedStamp(void 0),this.deviceId=void 0,void 0!==this.publishTimer&&(clearTimeout(this.publishTimer),this.publishTimer=void 0),this.pendingLaneUpdates.clear(),this.storagePartitioned=!1,this.partitionAccount=void 0,this.detachBusTransports(),this.busJoinGeneration+=1,this.pendingChallenge=void 0,this.handedOverChallenge=void 0,this.emitConnectionInfoIfChanged()}sendErrorToParent(t,e,n,r){e&&this.postMessage(t,{type:"error",requestId:e,..._i(n,r)})}ensureCanUpload(){if(!this.authenticated||!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");if(!this.isSubsidisedModeActive()){if(!this.postageBatchId||!this.signerKey)throw new we("upload-unavailable","This site has no drive in Swarm ID. Connect to it again and confirm a drive in the sign-in window, adding one first if the account has none, before uploading.",{reason:"no-stamp"});if("stamp-expired"===this.stampRefusal)throw new we("upload-unavailable","The account's drive has expired. Renew it or add another in Swarm ID before uploading.",{reason:"stamp-expired"});if("stamp-not-usable"===this.stampRefusal)throw new we("upload-unavailable","The account's drive is not usable: its record says the node does not have the batch, or cannot use it. Open the drive in Swarm ID to refresh it, or add another, before uploading.",{reason:"stamp-not-usable"})}}hasUsableUserStamp(){return!(!this.postageBatchId||!this.signerKey)&&(!this.stampRefusal&&!!this.stamper)}isSubsidisedModeActive(){return!!this.subsidisedGatewayUrl&&!this.hasUsableUserStamp()}sendToParent(t){this.parentOrigin&&this.parentWindow?this.parentWindow.postMessage(t,this.parentOrigin):console.warn("[Proxy] Cannot send message to parent - no parent window reference")}postMessage(t,e){t.source?t.source.postMessage(e,{targetOrigin:t.origin}):console.warn("[Proxy] Cannot send message - no event source")}handleCheckAuth(t,e){this.postMessage(e,{type:"authStatusResponse",requestId:t.requestId,authenticated:this.authenticated,origin:this.authenticated?this.parentOrigin:void 0,beeApiUrl:this.siteBeeApiUrl})}identityKeysFor(t){return this.identityKeys?.derivationKey!==t&&(this.identityKeys={derivationKey:t,sharingPublicKey:xn(t).publicKey,postageSignerAddress:new I(In(t)).publicKey().address().toHex()}),this.identityKeys}buildConnectionInfo(){let t,e;if(this.authenticated&&this.parentOrigin)try{const e=this.findConnectionForParent();if(e){const{account:n}=e,{sharingPublicKey:r,postageSignerAddress:i}=this.identityKeysFor(n.derivationKey);t={id:n.id.toHex(),name:n.name,address:n.id.toHex(),publicKey:n.publicKey,sharingPublicKey:r,postageSignerAddress:i,avatar:An(n.id.toHex())}}}catch(t){console.error("[Proxy] Error looking up identity:",t)}if(this.authenticated&&this.appSecret){const t=ye(this.appSecret),{x:n,y:r}=nd(t),i=od(n,r);e={address:new I(this.appSecret).publicKey().address().toHex(),publicKey:fe(i)}}let n="unavailable";return this.authenticated&&this.appSecret&&"unconfirmed"!==this.restoredSessionCheck?.settled&&(this.hasUsableUserStamp()?n="user-stamp":this.subsidisedGatewayUrl&&(n="subsidised")),{canUpload:"unavailable"!==n,storagePartitioned:this.storagePartitioned||void 0,uploadMode:n,uploadUnavailableReason:"unavailable"===n?this.uploadUnavailableReason():void 0,identity:t,appKey:e,partition:this.coordinator?.currentPartition,chatBinding:this.authenticated?this.chatBinding:void 0,beeApiUrl:this.siteBeeApiUrl,postageBatchId:this.authenticated?this.postageBatchId:void 0}}uploadUnavailableReason(){if(this.authenticated&&this.appSecret)return"unconfirmed"===this.restoredSessionCheck?.settled?"session-unconfirmed":this.postageBatchId&&this.signerKey?this.stampRefusal?this.stampRefusal:this.stamper?void 0:"stamper-failed":"no-stamp"}emitConnectionInfoIfChanged(){if(!this.parentOrigin)return;const t=this.buildConnectionInfo();var e,n;(e=this.lastConnectionInfo,n=t,e&&e.canUpload===n.canUpload&&!!e.storagePartitioned==!!n.storagePartitioned&&e.uploadMode===n.uploadMode&&e.uploadUnavailableReason===n.uploadUnavailableReason&&e.identity?.id===n.identity?.id&&e.identity?.name===n.identity?.name&&e.identity?.address===n.identity?.address&&e.identity?.publicKey===n.identity?.publicKey&&e.identity?.avatar.source===n.identity?.avatar.source&&e.identity?.avatar.url===n.identity?.avatar.url&&e.appKey?.address===n.appKey?.address&&e.appKey?.publicKey===n.appKey?.publicKey&&e.partition===n.partition&&e.chatBinding?.message===n.chatBinding?.message&&e.chatBinding?.signature===n.chatBinding?.signature&&e.beeApiUrl===n.beeApiUrl&&e.postageBatchId===n.postageBatchId)||(this.lastConnectionInfo=t,this.sendToParent({type:"connectionInfoChanged",canUpload:t.canUpload,storagePartitioned:t.storagePartitioned,uploadMode:t.uploadMode,uploadUnavailableReason:t.uploadUnavailableReason,identity:t.identity,appKey:t.appKey,partition:t.partition,chatBinding:t.chatBinding,beeApiUrl:t.beeApiUrl,postageBatchId:t.postageBatchId}))}async handleIsConnected(t,e){const n=await this.bee.connectivity.isConnected();this.postMessage(e,{type:"isConnectedResponse",requestId:t.requestId,connected:n})}async handleGetNodeInfo(t,e){try{const n=await this.bee.status.getNodeInfo();this.postMessage(e,{type:"getNodeInfoResponse",requestId:t.requestId,beeMode:n.beeMode,chequebookEnabled:n.chequebookEnabled,swapEnabled:n.swapEnabled})}catch(n){this.sendErrorToParent(e,t.requestId,n,"Failed to get node info")}}handleDisconnect(t,e){this.clearAuthData(),this.postMessage(e,{type:"disconnectResponse",requestId:t.requestId,success:!0})}async handleUploadData(t,e){const{requestId:n,data:r,options:i,requestOptions:s,enableProgress:a,useWebSocket:o,useWorkers:c,workerCount:d,concurrency:u}=t;try{await this.ensureCanWrite();const t=this.createProgressCallback(e,n,a),l=await this.withModeAwareWriteLock({useWorkers:c,workerCount:d},async e=>await ps(e,r,{encryptionKey:!!i?.encrypt||void 0,pin:i?.pin,deferred:i?.deferred,tag:i?.tag,webSocket:o?{concurrency:u}:void 0,httpConcurrency:u,onProgress:t,requestOptions:s}));this.postMessage(e,{type:"uploadDataResponse",requestId:n,reference:l.reference,tagUid:l.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Upload failed")}}async handleDownloadData(t,e){const{requestId:n,reference:r,options:i,requestOptions:s}=t;try{const t=await Qe(this.bee,r,i,void 0,s);this.postMessage(e,{type:"downloadDataResponse",requestId:n,data:t})}catch(t){this.sendErrorToParent(e,n,t,"Download failed")}}async handleUploadFile(t,e){const{requestId:n,data:r,name:i,options:s,requestOptions:a,enableProgress:o,useWebSocket:c,useWorkers:d,workerCount:u,concurrency:l}=t,h=i||"index.bin";try{await this.ensureCanWrite();const t=this.createProgressCallback(e,n,o),i=s?.tag??await ts(this.bee),p=await this.withModeAwareWriteLock({useWorkers:d,workerCount:u},async e=>{const n=eo(s),o=await ps(e,r,{encryptionKey:!!n.content||void 0,pin:s?.pin,deferred:s?.deferred,tag:i,webSocket:c?{concurrency:l}:void 0,httpConcurrency:l,onProgress:t,requestOptions:a}),d=new z,u=ye(o.reference);d.addFork(h,u,{"Content-Type":"application/octet-stream",Filename:h}),d.addFork("/",V,{"website-index-document":h});return await Ne(d,async(t,n)=>(await ys(e,t,{pin:s?.pin,deferred:s?.deferred,tag:i,requestOptions:a}),{tagUid:n?i:void 0}),{encrypt:n.manifest})});this.postMessage(e,{type:"uploadFileResponse",requestId:n,reference:p.rootReference,tagUid:p.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Upload failed")}}async handleDownloadFile(t,e){const{requestId:n,reference:r,path:i,options:s,requestOptions:a}=t;try{const t=await He(this.bee,r,a);let o;if(i)o=i;else{const{indexDocument:e}=new dr(t).getDocsMetadata();if(!e)throw new Error("Manifest does not contain an index document reference");o=e}const c=t.find(o);if(!c)throw new Error(`Path not found in manifest: ${o}`);if(!c.targetAddress)throw new Error(`Path "${o}" does not have a target address`);const d=c.metadata?.Filename||o.split("/").pop()||"file",u=fe(c.targetAddress),l=await Qe(this.bee,u,s,void 0,a);this.postMessage(e,{type:"downloadFileResponse",requestId:n,name:d,data:l})}catch(t){this.sendErrorToParent(e,n,t,"Download failed")}}async handleUploadFiles(t,e){const{requestId:n,files:r,options:i,requestOptions:s,enableProgress:a,useWorkers:o,workerCount:c}=t;try{await this.ensureCanWrite();const t=this.createProgressCallback(e,n,a),d=i?.tag??await ts(this.bee),u=await this.withModeAwareWriteLock({useWorkers:o,workerCount:c},e=>async function(t,e,n){const{content:r,manifest:i}=eo(n),s={pin:n?.pin,deferred:n?.deferred,tag:n?.tag,requestOptions:n?.requestOptions},a=new Set;for(const{path:t}of e){if(a.has(t))throw new Error(`Duplicate path in folder: ${t}`);a.add(t)}const o=new z;let c=0;for(const i of e){const{reference:a}=await ps(t,i.data,{...s,encryptionKey:!!r||void 0});o.addFork(i.path,ye(a),{"Content-Type":i.contentType??"application/octet-stream",Filename:i.path.split("/").pop()??i.path}),c++,n?.onProgress?.({total:e.length,processed:c})}const d={};n?.indexDocument&&(d["website-index-document"]=n.indexDocument),n?.errorDocument&&(d["website-error-document"]=n.errorDocument),Object.keys(d).length>0&&o.addFork("/",V,d);const{rootReference:u,tagUid:l}=await Ne(o,async(e,r)=>(await ys(t,e,s),{tagUid:r?n?.tag:void 0}),{encrypt:i});return{reference:u,tagUid:l}}(e,r,{...i,tag:d,onProgress:t,requestOptions:s}));this.postMessage(e,{type:"uploadFilesResponse",requestId:n,reference:u.reference,tagUid:u.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Upload failed")}}async handleListFiles(t,e){const{requestId:n,reference:r,requestOptions:i}=t;try{const t=await async function(t,e,n){return(await He(t,e,n)).collect().filter(t=>"/"!==t.fullPathString).map(t=>({path:t.fullPathString,reference:fe(t.targetAddress),contentType:t.metadata?.["Content-Type"]}))}(this.bee,r,i);this.postMessage(e,{type:"listFilesResponse",requestId:n,entries:t})}catch(t){this.sendErrorToParent(e,n,t,"Listing failed")}}async handleUploadChunk(t,e){const{requestId:n,data:r,options:i,requestOptions:s}=t;try{if(await this.ensureCanWrite(),r.length<1||r.length>4096)throw new Error(`Invalid chunk size: ${r.length} bytes. Chunks must be between 1 and 4096 bytes.`);const t=be(r);await this.withModeAwareWriteLock(void 0,async e=>{await ys(e,t.data,{pin:i?.pin,deferred:i?.deferred??!1,tag:i?.tag,requestOptions:s})}),this.postMessage(e,{type:"uploadChunkResponse",requestId:n,reference:t.address.toHex()})}catch(t){this.sendErrorToParent(e,n,t,"Upload failed")}}async handleDownloadChunk(t,e){const{requestId:n,reference:r,options:i,requestOptions:s}=t;try{const t=await this.bee.chunk.download(r,i,s);this.postMessage(e,{type:"downloadChunkResponse",requestId:n,data:t})}catch(t){this.sendErrorToParent(e,n,t,"Download failed")}}handleGsocMine(t,e){const{requestId:n,targetOverlay:r,identifier:i,proximity:s}=t;try{const t=this.bee.messaging.gsocMine(r,i,s);this.postMessage(e,{type:"gsocMineResponse",requestId:n,signer:t.toHex()})}catch(t){this.sendErrorToParent(e,n,t,"GSOC mine failed")}}async handleGsocSend(t,e){const{requestId:n,signer:r,identifier:i,data:s,options:a}=t;try{await this.ensureCanWrite();const t=new I(r),o=new x(i),c=await this.withModeAwareWriteLock(void 0,async e=>await fs(e,t,o,s,{pin:a?.pin,deferred:a?.deferred,tag:a?.tag}));this.postMessage(e,{type:"gsocSendResponse",requestId:n,reference:fe(c.socAddress),tagUid:c.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"GSOC send failed")}}async handleSocUpload(t,e){const{requestId:n,identifier:r,data:i,signer:s,options:a}=t;try{await this.ensureCanWrite();const t=s??this.appSecret,o=new I(t),c=new x(r),d=await this.withModeAwareWriteLock(void 0,async t=>await fs(t,o,c,i,{encryptionKey:!1!==a?.encrypt||void 0,pin:a?.pin,deferred:a?.deferred,tag:a?.tag}));this.postMessage(e,{type:"socUploadResponse",requestId:n,reference:fe(d.socAddress),tagUid:d.tagUid,encryptionKey:d.encryptionKey?fe(d.encryptionKey):void 0,owner:o.publicKey().address().toHex()})}catch(t){this.sendErrorToParent(e,n,t,"SOC upload failed")}}async handleSocRawUpload(t,e){const{requestId:n,identifier:r,data:i,signer:s,options:a}=t;try{await this.ensureCanWrite();const t=s??this.appSecret,o=new I(t),c=new x(r),d=await this.withModeAwareWriteLock(void 0,async t=>await fs(t,o,c,i,{pin:a?.pin,deferred:a?.deferred,tag:a?.tag}));this.postMessage(e,{type:"socRawUploadResponse",requestId:n,reference:fe(d.socAddress),tagUid:d.tagUid,encryptionKey:void 0,owner:o.publicKey().address().toHex()})}catch(t){this.sendErrorToParent(e,n,t,"SOC raw upload failed")}}async handleSocDownload(t,e){const{requestId:n,owner:r,identifier:i,encryptionKey:s,requestOptions:a}=t;try{let t=r;if(!t){if(!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");t=new I(this.appSecret).publicKey().address().toHex()}const o=await ze(this.bee,t,i,s,a);this.postMessage(e,{type:"socDownloadResponse",requestId:n,data:o.data,identifier:o.identifier,signature:o.signature,span:o.span,payload:o.payload,address:o.address,owner:o.owner})}catch(t){this.sendErrorToParent(e,n,t,"SOC download failed")}}async handleSocRawDownload(t,e){const{requestId:n,owner:r,identifier:i,encryptionKey:s,requestOptions:a}=t;try{let t=r;if(!t){if(!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");t=new I(this.appSecret).publicKey().address().toHex()}const o=s?await ze(this.bee,t,i,s,a):await Cn(this.bee,t,i,a);this.postMessage(e,{type:"socRawDownloadResponse",requestId:n,data:o.data,identifier:o.identifier,signature:o.signature,span:o.span,payload:o.payload,address:o.address,owner:o.owner})}catch(t){this.sendErrorToParent(e,n,t,"SOC raw download failed")}}async handleSocGetOwner(t,e){const{requestId:n}=t;try{if(!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");const t=new I(this.appSecret).publicKey().address().toHex();this.postMessage(e,{type:"socGetOwnerResponse",requestId:n,owner:t})}catch(t){this.sendErrorToParent(e,n,t,"SOC get owner failed")}}async handleDeriveAppSecret(t,e){const{requestId:n,label:r}=t;try{if(!this.authenticated||!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");const t=await Ie(this.appSecret,r);this.postMessage(e,{type:"deriveAppSecretResponse",requestId:n,secret:ye(t)})}catch(t){this.sendErrorToParent(e,n,t,"deriveAppSecret failed")}}async handleGetChatKey(t,e){const{requestId:n}=t;try{if(!this.authenticated||!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");this.postMessage(e,{type:"getChatKeyResponse",requestId:n,chatKey:Un(this.appSecret)})}catch(t){this.sendErrorToParent(e,n,t,"getChatKey failed")}}handleSetBeeApiUrl(t,e){this.siteBeeApiUrl=t.beeApiUrl,this.subsidisedGatewayUrl=this.siteSubsidisedGatewayUrl,this.postMessage(e,{type:"setBeeApiUrlResponse",requestId:t.requestId,beeApiUrl:t.beeApiUrl}),this.emitConnectionInfoIfChanged()}async handleStampChunk(t,e){const{requestId:n,chunk:r}=t;try{if(await this.ensureCanWrite(),this.isSubsidisedModeActive())throw Fd();const t=La(r,{appSecret:this.appSecret,internalOwners:this.accountInternalOwners()}),i=await this.withModeAwareWriteLock(void 0,async e=>{if(!ns(e))throw Fd();if(!(e.stamper instanceof Js))throw new we("internal","The write path has no utilization-aware stamper to stamp with.");const n=this.stampWithinAppLimits(e.stamper,t);return await this.persistStamperStateForStamp(),n});i.recordSlot?.(),this.postMessage(e,{type:"stampChunkResponse",requestId:n,address:fe(t.address),stamp:i.marshaled,owner:t.owner?.toHex(),signature:t.signature?.toHex()})}catch(t){this.sendErrorToParent(e,n,t,"stampChunk failed")}}async persistStamperStateForStamp(){try{await this.persistStamperState()}catch(t){throw console.error("[Proxy] Failed to save the stamp's counter:",t),new we("internal","The stamp counter could not be saved, so no stamp was returned. Try again.")}}stampWithinAppLimits(t,e){if(!this.parentOrigin)throw new we("not-authenticated","No app has identified itself to this frame.");const n=t.batchId.toHex(),r=Pn(this.parentOrigin,n),i=function(t){if(null===t)return{count:0,windowStart:0,windowCount:0,buckets:{}};try{const e=Ha.safeParse(JSON.parse(t));return e.success?e.data:{count:0,windowStart:0,windowCount:0,buckets:{}}}catch{return{count:0,windowStart:0,windowCount:0,buckets:{}}}}(localStorage.getItem(r)),s=Date.now();if(!e.owner){const n=this.stampNewSlot(t,e.address,i,s);return localStorage.setItem(r,JSON.stringify(n.usage)),{marshaled:n.marshaled}}const a=En(this.parentOrigin,n),o={partition:t.currentPartition??0,partitionCount:t.partitionCount},c=Qa(localStorage.getItem(a),o),d=fe(e.address),u=c.slots[d];let l,h,p,f;if(u&&t.isOwnDataSlot(e.address,u.slot)){const n=za(i,s);if(n)throw n;l=u.slot;const r=`${a}:${d}`,o=Math.max(u.timestampMs,this.lastRestampMs.get(r)??0);h=function(t,e){return Math.max(e,t+1)}(o,s),p=Ka(t.restampDataChunk(e.address,l,h)),this.lastRestampMs.set(r,h),f=Va(i,s)}else{const n=this.stampNewSlot(t,e.address,i,s);l=n.slot,h=s,p=n.marshaled,f=n.usage}localStorage.setItem(r,JSON.stringify(f));return{marshaled:p,recordSlot:()=>{const t=Qa(localStorage.getItem(a),o);localStorage.setItem(a,JSON.stringify(function(t,e,n,r){return!(e in t.slots)&&Object.keys(t.slots).length>=256?t:{...t,slots:{...t.slots,[e]:{slot:n,timestampMs:r}}}}(t,d,l,h)))}}}stampNewSlot(t,e,n,r){const i=Ds(e),s=Ga(n,{bucket:i,laneCapacity:t.laneCapacity(),now:r});if(s)throw s;const a=t.stampDataChunk(e,r);return{marshaled:Ka(a),slot:(o=a.index,new DataView(o.buffer,o.byteOffset,o.byteLength).getUint32(4,!1)),usage:Ja(n,i,r)};var o}accountInternalOwners(){const t=this.findConnectionForParent();if(!t)throw new we("not-authenticated","No connected account for this app. Please login first.");return function(t){const{derivationKey:e}=t,n=Te(e,Oe),i=[e,n,Te(n,Ce),Te(e,Me),Te(e,Re)];t.postageSignerKey&&i.push(t.postageSignerKey);const s=new Set(i.map(t=>qa(new I(t))));return s.add(new r(t.accountAddress).toHex().toLowerCase()),s}({accountAddress:t.account.id.toHex(),derivationKey:t.account.derivationKey,postageSignerKey:this.signerKey})}parseFeedTimestamp(t){if("number"==typeof t)return BigInt(Math.floor(t));if(!/^-?\d+$/.test(t))throw new Error(`Invalid timestamp format: "${t}" (expected decimal integer)`);return BigInt(t)}parseFeedIndex(t){if("number"==typeof t)return BigInt(Math.floor(t));if(!/^-?\d+$/.test(t))throw new Error(`Invalid index format: "${t}" (expected decimal integer)`);return BigInt(t)}makeSequentialFeedIdentifier(t,e){const n=s.Binary.numberToUint64(e,"BE");return s.Binary.keccak256(s.Binary.concatBytes(t,n))}async findLatestSequentialIndex(t,e,n,r){const i={...n,timeout:r??2e3},s=(a={bee:this.bee,topic:new lt(t),owner:e},new rc(a.bee,a.topic,a.owner));var a;return(await s.findAt(0n,0n,i)).current}sequentialNextIndex(t){return t===(1n<<64n)-1n?0n:t+1n}async handleFeedGetOwner(t,e){const{requestId:n}=t;try{if(!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");const t=new I(this.appSecret).publicKey().address().toHex();this.postMessage(e,{type:"feedGetOwnerResponse",requestId:n,owner:t})}catch(t){this.sendErrorToParent(e,n,t,"Feed get owner failed")}}async handleEpochFeedDownloadReference(t,e){const{requestId:n,topic:i,owner:s,at:a,after:o,encryptionKey:c}=t;try{let t=s;if(!t){if(!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");t=new I(this.appSecret).publicKey().address().toHex()}const d=new lt(ye(i)),u=new r(t),l=this.parseFeedTimestamp(a),h=void 0!==o?this.parseFeedTimestamp(o):0n,p=c?ye(c):void 0;let f;if(p){const t=ec({bee:this.bee,topic:d,owner:u,encryptionKey:p});f=await t.findAt(l,h)}else{const t=ec({bee:this.bee,topic:d,owner:u});f=await t.findAt(l,h)}this.postMessage(e,{type:"epochFeedDownloadReferenceResponse",requestId:n,reference:f?fe(f):void 0})}catch(t){this.sendErrorToParent(e,n,t,"Epoch feed download reference failed")}}async handleEpochFeedUploadReference(t,e){const{requestId:n,topic:r,signer:i,at:s,reference:a,encryptionKey:o,hints:c}=t;try{await this.ensureCanWrite();const t=i??this.appSecret,u=new I(t),l=new lt(ye(r)),h=u.publicKey().address(),p=this.parseFeedTimestamp(s),f=o?ye(o):void 0,y=c?.lastEpoch?{lastEpoch:{start:BigInt(c.lastEpoch.start),level:c.lastEpoch.level},lastTimestamp:c.lastTimestamp?BigInt(c.lastTimestamp):void 0}:void 0,w=ye(a);if(32!==w.length&&64!==w.length)throw new Error(`Reference must be 32 or 64 bytes, got ${w.length}`);const g=(d={bee:this.bee,topic:l,owner:h,signer:u},new tc(d.topic,d.signer)),m=await this.withModeAwareWriteLock(void 0,async t=>await g.update(p,w,t,f,y)),b=ec({bee:this.bee,topic:l,owner:h,encryptionKey:f});await b.findAt(p,p),this.postMessage(e,{type:"epochFeedUploadReferenceResponse",requestId:n,socAddress:fe(m.socAddress),encryptionKey:o||void 0,epoch:{start:m.epoch.start.toString(),level:m.epoch.level},timestamp:m.timestamp.toString()})}catch(t){this.sendErrorToParent(e,n,t,"Epoch feed upload reference failed")}var d}async handleSequentialFeedGetOwner(t,e){const{requestId:n}=t;try{if(!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");const t=new I(this.appSecret).publicKey().address().toHex();this.postMessage(e,{type:"seqFeedGetOwnerResponse",requestId:n,owner:t})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed get owner failed")}}async resolveSequentialOwner(t){if(t)return t;if(!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");return new I(this.appSecret).publicKey().address().toHex()}parseSequentialPayload(t,e){if(!e)return{payload:t};if(t.length<8)return{payload:t,timestamp:void 0};const n=new DataView(t.buffer,t.byteOffset,t.byteLength),r=Number(n.getBigUint64(0,!1));return{payload:t.slice(8),timestamp:r}}async resolveSequentialIndex(t,e,n,r,i=!0,s,a,o=!1,c){if(!o&&!a)throw new we("invalid-request","Encryption key is required for encrypted feed lookup");if(void 0!==n)return this.parseFeedIndex(n);const d=await this.findLatestSequentialIndex(t,e,s,c);if(void 0===d)throw new Error("Sequential feed has no updates");if(void 0===r)return d;if(!i)throw new Error("Cannot use 'at' without timestamps");const u=this.parseFeedTimestamp(r);for(let n=d;n>=0n;n--){const r=this.makeSequentialFeedIdentifier(t,n),i=new x(r),c=o?a?await ze(this.bee,e,i,a,s):await Cn(this.bee,e,i,s):await ze(this.bee,e,i,a??"",s),d=this.parseSequentialPayload(c.payload,!0);if(void 0!==d.timestamp&&BigInt(d.timestamp)<=u)return n;if(0n===n)break}return d}async handleSequentialFeedDownloadPayload(t,e){const{requestId:n,topic:i,owner:s,index:a,at:o,hasTimestamp:c,encryptionKey:d,lookupTimeoutMs:u,requestOptions:l}=t;try{if(!d)throw new we("invalid-request","Encryption key is required for downloadPayload");const t=await this.resolveSequentialOwner(s),h=new r(t),p=ye(i),f=!1!==c,y=await this.resolveSequentialIndex(p,h,a,o,f,l,d,!1,u),w=this.makeSequentialFeedIdentifier(p,y),g=new x(w),m=await ze(this.bee,h,g,d,l),b=this.parseSequentialPayload(m.payload,f),v=this.sequentialNextIndex(y);this.postMessage(e,{type:"seqFeedDownloadPayloadResponse",requestId:n,payload:b.payload,timestamp:b.timestamp,feedIndex:y.toString(),feedIndexNext:v.toString()})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed download payload failed")}}async handleSequentialFeedDownloadRawPayload(t,e){const{requestId:n,topic:i,owner:s,index:a,at:o,hasTimestamp:c,encryptionKey:d,lookupTimeoutMs:u,requestOptions:l}=t;try{const t=await this.resolveSequentialOwner(s),h=new r(t),p=ye(i),f=!1!==c,y=await this.resolveSequentialIndex(p,h,a,o,f,l,d,!0,u),w=this.makeSequentialFeedIdentifier(p,y),g=new x(w),m=d?await ze(this.bee,h,g,d,l):await Cn(this.bee,h,g,l),b=this.parseSequentialPayload(m.payload,f),v=this.sequentialNextIndex(y);this.postMessage(e,{type:"seqFeedDownloadRawPayloadResponse",requestId:n,payload:b.payload,timestamp:b.timestamp,feedIndex:y.toString(),feedIndexNext:v.toString()})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed download raw payload failed")}}async handleSequentialFeedDownloadReference(t,e){const{requestId:n,topic:i,owner:s,index:a,at:o,hasTimestamp:c,encryptionKey:d,lookupTimeoutMs:u,requestOptions:l}=t;try{if(!d)throw new we("invalid-request","Encryption key is required for downloadReference");const t=await this.resolveSequentialOwner(s),h=new r(t),p=ye(i),f=!1!==c,y=await this.resolveSequentialIndex(p,h,a,o,f,l,d,!1,u),w=this.makeSequentialFeedIdentifier(p,y),g=new x(w),m=await ze(this.bee,h,g,d,l),b=this.parseSequentialPayload(m.payload,f);if(32!==b.payload.length&&64!==b.payload.length)throw new Error("Sequential feed update does not contain a reference; use downloadPayload");const v=fe(b.payload),S=this.sequentialNextIndex(y);this.postMessage(e,{type:"seqFeedDownloadReferenceResponse",requestId:n,reference:v,feedIndex:y.toString(),feedIndexNext:S.toString()})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed download reference failed")}}buildSequentialPayload(t,e,n){if(!e)return t;const r=new Uint8Array(8);return new DataView(r.buffer).setBigUint64(0,n,!1),s.Binary.concatBytes(r,t)}async handleSequentialFeedUploadPayload(t,e){const{requestId:n,topic:r,signer:i,data:s,index:a,at:o,hasTimestamp:c,lookupTimeoutMs:d,options:u,requestOptions:l}=t;try{await this.ensureCanWrite();const t=i??this.appSecret,h=new I(t),p=h.publicKey().address(),f=ye(r),y=!1!==c,w=void 0!==o?this.parseFeedTimestamp(o):BigInt(Math.floor(Date.now()/1e3));let g;if(void 0!==a)g=this.parseFeedIndex(a);else{const t=await this.findLatestSequentialIndex(f,p,l,d);g=void 0===t?0n:this.sequentialNextIndex(t)}const m=this.buildSequentialPayload(s,y,w);if(m.length<1||m.length>4096)throw new Error(`Invalid payload length: ${m.length} (expected 1-4096)`);const b=this.makeSequentialFeedIdentifier(f,g),v=new x(b),S=await this.withModeAwareWriteLock(void 0,async t=>await fs(t,h,v,m,{encryptionKey:!1!==u?.encrypt||void 0,pin:u?.pin,deferred:u?.deferred,tag:u?.tag}));this.postMessage(e,{type:"seqFeedUploadPayloadResponse",requestId:n,reference:fe(S.socAddress),feedIndex:g.toString(),owner:p.toHex(),encryptionKey:S.encryptionKey?fe(S.encryptionKey):void 0,tagUid:S.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed upload payload failed")}}async handleSequentialFeedUploadRawPayload(t,e){const{requestId:n,topic:r,signer:i,data:s,index:a,at:o,hasTimestamp:c,encryptionKey:d,lookupTimeoutMs:u,options:l,requestOptions:h}=t;try{await this.ensureCanWrite();const t=i??this.appSecret,p=new I(t),f=p.publicKey().address(),y=ye(r),w=!1!==c,g=void 0!==o?this.parseFeedTimestamp(o):BigInt(Math.floor(Date.now()/1e3));let m;if(void 0!==a)m=this.parseFeedIndex(a);else{const t=await this.findLatestSequentialIndex(y,f,h,u);m=void 0===t?0n:this.sequentialNextIndex(t)}const b=this.buildSequentialPayload(s,w,g);if(b.length<1||b.length>4096)throw new Error(`Invalid payload length: ${b.length} (expected 1-4096)`);const v=this.makeSequentialFeedIdentifier(y,m),S=new x(v),k=await this.withModeAwareWriteLock(void 0,async t=>await fs(t,p,S,b,{encryptionKey:d?ye(d):void 0,pin:l?.pin,deferred:l?.deferred,tag:l?.tag}));this.postMessage(e,{type:"seqFeedUploadRawPayloadResponse",requestId:n,reference:fe(k.socAddress),feedIndex:m.toString(),owner:f.toHex(),encryptionKey:d||void 0,tagUid:k.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed upload raw payload failed")}}async handleSequentialFeedUploadReference(t,e){const{requestId:n,topic:r,signer:i,reference:s,index:a,at:o,hasTimestamp:c,lookupTimeoutMs:d,options:u,requestOptions:l}=t;try{await this.ensureCanWrite();const t=i??this.appSecret,h=new I(t),p=h.publicKey().address(),f=ye(r),y=!1!==c,w=void 0!==o?this.parseFeedTimestamp(o):BigInt(Math.floor(Date.now()/1e3));let g;if(void 0!==a)g=this.parseFeedIndex(a);else{const t=await this.findLatestSequentialIndex(f,p,l,d);g=void 0===t?0n:this.sequentialNextIndex(t)}const m=ye(s),b=this.buildSequentialPayload(m,y,w);if(b.length<1||b.length>4096)throw new Error(`Invalid payload length: ${b.length} (expected 1-4096)`);const v=this.makeSequentialFeedIdentifier(f,g),S=new x(v),k=await this.withModeAwareWriteLock(void 0,async t=>await fs(t,h,S,b,{encryptionKey:!0,pin:u?.pin,deferred:u?.deferred,tag:u?.tag}));this.postMessage(e,{type:"seqFeedUploadReferenceResponse",requestId:n,reference:fe(k.socAddress),feedIndex:g.toString(),owner:p.toHex(),encryptionKey:k.encryptionKey?fe(k.encryptionKey):void 0,tagUid:k.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed upload reference failed")}}sharingSecret(){const t=this.findConnectionForParent()?.account.derivationKey;return t?xn(t).secret:void 0}actKeys(){const t=ye(this.appSecret),e=this.sharingSecret();return e?[t,e]:[t]}async handleActUploadData(t,e){const{requestId:n,data:r,grantees:i,options:s,requestOptions:a,enableProgress:o}=t;try{await this.ensureCanWrite();const t=i.map(t=>Td(t)),c=this.createProgressCallback(e,n,o),d="identity"===s?.publisher?this.sharingSecret():ye(this.appSecret);if(!d)throw new Error("No sharing key: this session carries no account");const u=!0===s?.beeCompatible,{actResult:l,contentUpload:h}=await this.withModeAwareWriteLock({useWorkers:!0},async e=>{const n=await ps(e,r,{encryptionKey:!1!==s?.encrypt||void 0,pin:s?.pin,deferred:s?.deferred,tag:s?.tag,onProgress:c,requestOptions:a}),i=new z,o=ye(n.reference);i.addFork(Od,o,{"Content-Type":"application/octet-stream",Filename:Od}),i.addFork("/",V,{"website-index-document":Od});const l=await Ne(i,async t=>(await ys(e,t,{pin:s?.pin,deferred:s?.deferred,tag:s?.tag}),{}),{encrypt:!u}),h=ye(l.rootReference);return{actResult:await Dd(e,h,d,t,s,a),contentUpload:n}});this.postMessage(e,{type:"actUploadDataResponse",requestId:n,encryptedReference:l.encryptedReference,historyReference:l.historyReference,granteeListReference:l.granteeListReference,publisherPubKey:l.publisherPubKey,actReference:l.actReference,tagUid:h.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"ACT upload failed")}}async handleActDownloadData(t,e){const{requestId:n,encryptedReference:r,historyReference:i,publisherPubKey:s,timestamp:a,requestOptions:o}=t;try{if(!this.authenticated||!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");const t=await Bd(this.bee,r,i,s,this.actKeys(),a,o),c=await He(this.bee,t,o),{indexDocument:d}=new dr(c).getDocsMetadata();if(!d)throw new Error("Manifest does not contain an index document reference");const u=c.find(d);if(!u)throw new Error(`Content node "${d}" not found in manifest`);if(!u.targetAddress)throw new Error(`Content node "${d}" does not have a target address`);const l=fe(u.targetAddress),h=await Qe(this.bee,l,void 0,void 0,o);this.postMessage(e,{type:"actDownloadDataResponse",requestId:n,data:h})}catch(t){this.sendErrorToParent(e,n,t,"ACT download failed")}}async handleActAddGrantees(t,e){const{requestId:n,historyReference:r,grantees:i,requestOptions:s}=t;try{await this.ensureCanWrite();const t=this.actKeys(),a=i.map(t=>Td(t)),o=await this.withModeAwareWriteLock({useWorkers:!0},async e=>await async function(t,e,n,r,i,s,a,o){const c=64===n.length,d=Ad(await Qe(e,n,void 0,void 0,a),ye(n));await Cd(d,async t=>Qe(e,t,void 0,void 0,a));const u=xd(d);if(!u)throw new Error("History manifest is empty");const l=dd(await Qe(e,u.metadata.actReference,void 0,void 0,a)),{privateKey:h,derived:p,entry:f}=Ed(l,r),y=sd(f.encryptedAccessKey,p.accessKeyDecryptionKey),w=[...l];for(const t of i){const e=rd(h,t.x,t.y);w.push({lookupKey:e.lookupKey,encryptedAccessKey:id(y,e.accessKeyDecryptionKey)})}let g=[];u.metadata.encryptedGranteeListRef&&(g=yd(await Qe(e,u.metadata.encryptedGranteeListRef,void 0,void 0,a),h));const m=[...g,...i],b=cd(w),v=await ps(t,b,{encryptionKey:!c||void 0,pin:s?.pin,deferred:s?.deferred,tag:s?.tag,requestOptions:a}),S=fd(m,h),k=await ps(t,S,{encryptionKey:!0,pin:s?.pin,deferred:s?.deferred,requestOptions:a});kd(d,Ud(),v.reference,k.reference);const x=await Id(d,async(e,n)=>ps(t,e,{encryptionKey:!c||void 0,pin:s?.pin,deferred:s?.deferred,tag:s?.tag,onProgress:n?o:void 0,requestOptions:a})),I=x.rootReference,A=x.tagUid;return{historyReference:I,granteeListReference:k.reference,actReference:v.reference,tagUid:A}}(e,this.bee,r,t,a,void 0,s));this.postMessage(e,{type:"actAddGranteesResponse",requestId:n,historyReference:o.historyReference,granteeListReference:o.granteeListReference,actReference:o.actReference})}catch(t){this.sendErrorToParent(e,n,t,"ACT add grantees failed")}}async handleActRevokeGrantees(t,e){const{requestId:n,historyReference:r,encryptedReference:i,revokeGrantees:s,requestOptions:a}=t;try{await this.ensureCanWrite();const t=this.actKeys(),o=s.map(t=>Td(t)),c=await this.withModeAwareWriteLock({useWorkers:!0},async e=>await async function(t,e,n,r,i,s,a,o,c){const d=64===n.length,u=Ad(await Qe(e,n,void 0,void 0,o),ye(n));await Cd(u,async t=>Qe(e,t,void 0,void 0,o));const l=xd(u);if(!l)throw new Error("History manifest is empty");const h=dd(await Qe(e,l.metadata.actReference,void 0,void 0,o)),{privateKey:p,derived:f,entry:y}=Ed(h,i),w=sd(y.encryptedAccessKey,f.accessKeyDecryptionKey);let g=[];l.metadata.encryptedGranteeListRef&&(g=yd(await Qe(e,l.metadata.encryptedGranteeListRef,void 0,void 0,o),p));const m=g.filter(t=>!s.some(e=>function(t,e){if(t.x.length!==e.x.length||t.y.length!==e.y.length)return!1;for(let n=0;n<t.x.length;n++)if(t.x[n]!==e.x[n])return!1;for(let n=0;n<t.y.length;n++)if(t.y[n]!==e.y[n])return!1;return!0}(t,e))),b=[];b.push({lookupKey:f.lookupKey,encryptedAccessKey:id(w,f.accessKeyDecryptionKey)});for(const t of m){const e=rd(p,t.x,t.y);b.push({lookupKey:e.lookupKey,encryptedAccessKey:id(w,e.accessKeyDecryptionKey)})}const v=cd(b),S=await ps(t,v,{encryptionKey:!d||void 0,pin:a?.pin,deferred:a?.deferred,tag:a?.tag,requestOptions:o}),k=fd(m,p),x=await ps(t,k,{encryptionKey:!0,pin:a?.pin,deferred:a?.deferred,requestOptions:o});kd(u,Ud(),S.reference,x.reference);const I=await Id(u,async(e,n)=>ps(t,e,{encryptionKey:!d||void 0,pin:a?.pin,deferred:a?.deferred,tag:a?.tag,onProgress:n?c:void 0,requestOptions:o})),A=I.rootReference,C=I.tagUid;return{encryptedReference:r,historyReference:A,granteeListReference:x.reference,actReference:S.reference,tagUid:C}}(e,this.bee,r,i,t,o,void 0,a));this.postMessage(e,{type:"actRevokeGranteesResponse",requestId:n,encryptedReference:c.encryptedReference,historyReference:c.historyReference,granteeListReference:c.granteeListReference,actReference:c.actReference})}catch(t){this.sendErrorToParent(e,n,t,"ACT revoke grantees failed")}}async handleActGetGrantees(t,e){const{requestId:n,historyReference:r,requestOptions:i}=t;try{if(!this.authenticated||!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");const t=this.actKeys(),s=await async function(t,e,n,r){const i=Ad(await Qe(t,e,void 0,void 0,r),ye(e));await Cd(i,async e=>Qe(t,e,void 0,void 0,r));const s=xd(i);if(!s||!s.metadata.encryptedGranteeListRef)return[];const a=await Qe(t,s.metadata.actReference,void 0,void 0,r),{privateKey:o}=Ed(dd(a),n);return yd(await Qe(t,s.metadata.encryptedGranteeListRef,void 0,void 0,r),o).map(t=>{const e=od(t.x,t.y);return fe(e)})}(this.bee,r,t,i);this.postMessage(e,{type:"actGetGranteesResponse",requestId:n,grantees:s})}catch(t){this.sendErrorToParent(e,n,t,"ACT get grantees failed")}}async handleGetPostageBatch(t,e){const n=this.lookupPostageStampForApp();if(!n)return void this.postMessage(e,{type:"getPostageBatchResponse",requestId:t.requestId,postageBatch:void 0});const r=await $n(this.beeApiUrl,n.batchID.toHex());let i=await async function(t,e,n,r){const i=Gc(t,r);return await _c(t,n,i)??await an(e,n)}(this.gnosisRpcUrl,this.beeApiUrl,n.batchID.toHex(),this.postageStampContractAddress);if(void 0===i)try{const t=await Dn();i=Bn(n.amount,t)}catch(t){console.warn("[Proxy] Failed to calculate TTL:",t)}const s={batchID:n.batchID.toHex(),utilization:n.utilization,usable:r?.usable??n.usable,label:"",depth:n.depth,amount:n.amount.toString(),bucketDepth:n.bucketDepth,blockNumber:n.blockNumber,immutableFlag:n.immutableFlag,exists:r?.exists??n.exists,batchTTL:i};this.postMessage(e,{type:"getPostageBatchResponse",requestId:t.requestId,postageBatch:s})}async handleCreateFeedManifest(t,e){const{topic:n,owner:r,feedType:i,uploadOptions:s}=t;let a=r;if(!a&&this.appSecret){const t=new I(this.appSecret);a=t.publicKey().address().toHex()}if(a)try{await this.ensureCanWrite();const r=await this.withModeAwareWriteLock(void 0,async t=>await async function(t,e,n,r,i){const s=n.startsWith("0x")?n.slice(2):n,a="stamper"===t.mode?i?.tag??await ts(t.bee):void 0,o={pin:i?.pin,deferred:i?.deferred,tag:a},c=new z;c.addFork("/",V,{"swarm-feed-owner":s,"swarm-feed-topic":e,"swarm-feed-type":r?.feedType??"Sequence"});const d=c.forks.get(47);if(!d)throw new Error("[FeedManifest] Failed to create '/' fork");const u=d.node,l=await u.marshal(),h=be(l);await ys(t,h.data,o),u.selfAddress=h.address.toUint8Array();const p=await c.marshal();if(!1!==r?.encrypt){const e=me(p);await ys(t,e.data,o);const n=new Uint8Array(64);return n.set(e.address.toUint8Array(),0),n.set(e.encryptionKey,32),{reference:fe(n),tagUid:a}}{const e=be(p);return await ys(t,e.data,o),{reference:e.address.toHex(),tagUid:a}}}(t,n,a,{encrypt:!1!==s?.encrypt,feedType:i},s));this.postMessage(e,{type:"createFeedManifestResponse",requestId:t.requestId,reference:r.reference})}catch(n){this.sendErrorToParent(e,t.requestId,n,"Create feed manifest failed")}else this.sendErrorToParent(e,t.requestId,new we("invalid-request","No owner provided and no app signer available"),"No owner provided and no app signer available")}}function Nd(t){return new Kd(t)}const Hd={"sign-in":"Sign in with Swarm ID","change-stamp":"Change stamp in Swarm ID"},Wd="white",jd="0 none transparent";function zd(t){return void 0===t.borderColor&&void 0===t.borderWidth?{border:jd}:{border:jd,borderWidth:t.borderWidth??"1px",borderStyle:t.borderStyle??"solid",borderColor:t.borderColor??t.color??Wd}}function Gd(t,e,n){const r=n||!0===e.busy,i=!0===e.disabled,s={width:"100%",height:"100%",display:"block",boxSizing:"border-box",margin:"0",padding:"0 12px",...zd(e),borderRadius:e.borderRadius??"0",backgroundColor:e.backgroundColor??"#dd7200",color:e.color??Wd,fontSize:e.fontSize??"14px",fontWeight:e.fontWeight?.toString()??"600",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",outlineOffset:"-3px",cursor:r||i?"default":"pointer",opacity:i?"0.6":"1"};return e.fontFamily&&(s.fontFamily=e.fontFamily),{text:r?e.busyText??"Waiting for Swarm ID":e.text??Hd[t],ariaLabel:e.ariaLabel,disabled:i,busy:r,style:s}}const Vd=/\/button\/?$/;class Jd{constructor(t,e){this.options=t,this.container=e,this.identifyReceived=!1,this.action="sign-in",this.config={},this.popupMode="window",this.storageShared=!1,this.requestedFonts=new Set,this.onMessage=t=>{this.handleMessage(t)},window.addEventListener("message",this.onMessage),window.parent.postMessage({type:Tn},"*")}destroy(){window.removeEventListener("message",this.onMessage),this.stopWatchingWindow()}async handleMessage(t){if(t.source!==window.parent)return;const e=t.data?.type;"buttonIdentify"===e?await this.handleIdentify(t):"buttonUpdate"===e&&this.handleUpdate(t)}async handleIdentify(t){if(this.identifyReceived)return;const e=On.safeParse(t.data);if(!e.success)return void console.warn("[Button] Invalid buttonIdentify message:",e.error);this.identifyReceived=!0;const n=await this.options.siteAllowList.check(t.origin);if(!n.allowed)return console.warn("[Button] Refused parent:",n.message),void window.parent.postMessage({type:"buttonInitError",error:n.message},t.origin);this.storageShared=await jc(),this.parentOrigin=t.origin,this.action=e.data.action,this.config=e.data.config??{},this.metadata=e.data.metadata,this.popupMode=e.data.popupMode??"window",this.loadFontFaces(this.config.fontFaces),this.render(),this.tellParent({type:"buttonReady"})}handleUpdate(t){if(t.origin!==this.parentOrigin)return;const e=Mn.safeParse(t.data);e.success?(this.action=e.data.action,this.config=e.data.config??{},this.loadFontFaces(this.config.fontFaces),this.render()):console.warn("[Button] Invalid buttonUpdate message:",e.error)}loadFontFaces(t){for(const e of t??[]){const t=JSON.stringify([e.family,e.url,e.weight,e.style]);if(this.requestedFonts.has(t))continue;this.requestedFonts.add(t);const n=new URL(e.url);if("http:"===n.protocol&&!this.options.allowLocalHttp){console.warn(`[Button] Font file ${n.href} is not https, so the label keeps its fallback family.`);continue}const r={};void 0!==e.weight&&(r.weight=String(e.weight)),void 0!==e.style&&(r.style=e.style),new FontFace(e.family,`url(${JSON.stringify(n.href)})`,r).load().then(t=>document.fonts.add(t),()=>console.warn(`[Button] Font file ${n.href} did not load, so the label keeps its fallback family. It needs an Access-Control-Allow-Origin naming ${window.location.origin}.`))}}render(){const t=Gd(this.action,this.config,void 0!==this.connectWindow);this.button||(this.button=document.createElement("button"),this.button.type="button",this.button.addEventListener("click",()=>this.openConnectWindow()),this.container.appendChild(this.button));const e=this.button;e.textContent=t.text,e.disabled=t.disabled,t.ariaLabel?e.setAttribute("aria-label",t.ariaLabel):e.removeAttribute("aria-label"),t.busy?(e.setAttribute("aria-busy","true"),e.setAttribute("aria-disabled","true")):(e.removeAttribute("aria-busy"),e.removeAttribute("aria-disabled")),Object.assign(e.style,t.style)}openConnectWindow(){const t=Gd(this.action,this.config,void 0!==this.connectWindow);if(!this.parentOrigin||!this.metadata||t.busy||t.disabled)return;const e=crypto.randomUUID();this.storageShared&&localStorage.setItem(ln,e);const n=window.location.pathname.replace(Vd,""),r=Rn(window.location.origin+n,this.parentOrigin,this.metadata,{challenge:e}),i="popup"===this.popupMode?window.open(r,"_blank","width=500,height=600"):window.open(r,"_blank");if(!i)return this.storageShared&&localStorage.removeItem(ln),void this.tellWindowState("blocked");this.tellSessionFrames({type:"connectWindowOpened",challenge:e}),this.connectWindow=i,this.render(),this.tellWindowState("open"),this.watchWindow(i)}watchWindow(t){this.stopWatchingWindow(),this.watchStart=setTimeout(()=>{this.watchInterval=setInterval(()=>{t.closed&&(this.stopWatchingWindow(),this.connectWindow===t&&(this.connectWindow=void 0,this.render(),this.tellWindowState("closed")))},500)},2e3)}stopWatchingWindow(){clearTimeout(this.watchStart),clearInterval(this.watchInterval),this.watchStart=void 0,this.watchInterval=void 0}tellSessionFrames(t){const e=window.parent.frames;for(let n=0;n<e.length;n++){const r=e[n];r&&r!==window&&r.postMessage(t,window.location.origin)}}tellWindowState(t){this.tellParent({type:"buttonWindowChanged",state:t})}tellParent(t){this.parentOrigin&&window.parent.postMessage(t,this.parentOrigin)}}function Zd(t,e){return new Jd(t,e)}async function Yd(t){const e=async()=>{if((void 0===t.graceMs||!_d(t.cooldownKey,t.graceMs))&&(t.force||!_d(t.cooldownKey,t.cooldownMs)))try{await t.task()}finally{!function(t){if("undefined"==typeof window||!window.localStorage)return;window.localStorage.setItem(t,String(Date.now()))}(t.cooldownKey)}};"undefined"!=typeof navigator&&navigator.locks?await navigator.locks.request(t.lockName,{mode:"exclusive"},e):await e()}function _d(t,e){if("undefined"==typeof window||!window.localStorage)return!1;const n=window.localStorage.getItem(t);if(!n)return!1;const r=Number(n);return Number.isFinite(r)&&Date.now()-r<e}const Qd="solarpunkid.eth",Xd="buzz.solarpunk.sites",tu="[SiteAllowList]",eu=/[\s,]+/,nu=/^[a-z0-9-]+$/,ru=32,iu=ou("resolver(bytes32)"),su=ou("text(bytes32,string)"),au=se({ensName:de(),recordKey:de(),origins:ce(de()),fetchedAt:ue()});function ou(t){return fe(Fn((new TextEncoder).encode(t)).slice(0,4))}function cu(t){return t.toString(16).padStart(64,"0")}function du(t,e){if("string"==typeof t&&t.length>262146)throw new Error(`${e} answered ${t.length} characters, longer than 131072 bytes of hex data.`);if("string"!=typeof t||!/^0x([0-9a-fA-F]{2})*$/.test(t))throw new Error(`${e} answered something that is not hex data.`);return ye(t.slice(2))}function uu(t,e){if(e+ru>t.length)throw new Error("The answer ends inside a word.");return BigInt(`0x${fe(t.slice(e,e+ru))}`)}async function lu(t,e,n){return Kn(t,"eth_call",[{to:e,data:n},"latest"],{timeoutMs:sn})}async function hu(t,e,n){const r=function(t){let e=new Uint8Array(ru);const n=""===t?[]:t.split(".");for(const t of n.reverse()){const n=new Uint8Array(64);n.set(e),n.set(Fn((new TextEncoder).encode(t)),ru),e=Fn(n)}return`0x${fe(e)}`}(e),i=function(t){const e=du(t,"The registry");if(e.length!==ru)throw new Error("The registry answered a resolver that is not one word.");if(e.slice(0,12).some(t=>0!==t))throw new Error("The registry answered a resolver that is not an address.");const n=e.slice(12);return n.every(t=>0===t)?void 0:`0x${fe(n)}`}(await lu(t,"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",`0x${iu}${r.slice(2)}`));if(!i)throw new Error(`${e} has no resolver.`);return function(t){const e=du(t,"The resolver"),n=uu(e,0);if(n>BigInt(e.length))throw new Error("The resolver answered a string offset past its end.");const r=Number(n),i=uu(e,r),s=BigInt(r+ru)+i;if(s>BigInt(e.length))throw new Error("The resolver answered a string longer than its answer.");return new TextDecoder("utf-8",{fatal:!0}).decode(e.slice(r+ru,Number(s)))}(await lu(t,i,function(t,e){const n=(new TextEncoder).encode(e),r=fe(n),i=Math.ceil(n.length/ru)*ru*2,s=cu(64);return`0x${su}${t.slice(2)}${s}${cu(n.length)}${r.padEnd(i,"0")}`}(r,n)))}function pu(t,e){return{allowed:!1,reason:t,message:{"not-clean":`${e} is not a plain https site address, and Swarm ID serves only the sites on its allow list.`,"not-listed":`${e} is not on Swarm ID's allow list of sites.`,"list-unavailable":`Swarm ID could not read its allow list of sites, so it refused ${e}. It serves no site until the list can be read.`}[t]}}function fu(t){const e=t.now??Date.now,n=function(t){const e=new Set;for(const n of t)qn(n,{allowLocalHttp:!0})?e.add(n):console.warn(`${tu} Ignored a dev origin that is not a clean origin:`,n);return e}(t.devOrigins??[]);let r,i;const s=n=>{if(!n||n.ensName!==t.ensName||n.recordKey!==t.recordKey)return!1;const r=e()-n.fetchedAt;return r>=0&&r<6e5},a=async()=>{if(t.rpcUrl)if(function(t){const e=t.split(".");return e.length>=2&&e.every(t=>nu.test(t))}(t.ensName))try{const n=function(t){const e=[];for(const n of t.split(eu))""!==n&&(qn(n)?e.push(n):console.warn(`${tu} Ignored an entry that is not a clean https origin:`,n));return e}(await hu(t.rpcUrl,t.ensName,t.recordKey));return 0===n.length?void console.warn(`${tu} The record names no site, so no site is allowed.`):((e=>{r=e;try{t.storage?.setItem(Ln,JSON.stringify(e))}catch(t){console.warn(`${tu} Could not keep the list in storage:`,t)}})({ensName:t.ensName,recordKey:t.recordKey,origins:n,fetchedAt:e()}),n)}catch(t){return void console.warn(`${tu} Could not read the list, so no site is allowed:`,t)}else console.warn(`${tu} The ENS name is not a plain lower-case name:`,t.ensName);else console.warn(`${tu} No Ethereum endpoint is set, so no site is allowed.`)},o=async()=>{if(s(r))return r.origins;const e=(()=>{try{const e=t.storage?.getItem(Ln);if(!e)return;const n=au.safeParse(JSON.parse(e));return n.success?n.data:void 0}catch{return}})();return s(e)?(r=e,e.origins):(i??(i=a().finally(()=>{i=void 0})),i)};return{async check(t){if(n.has(t))return{allowed:!0};if(!qn(t))return pu("not-clean",t);const e=await o();return e?e.includes(t)?{allowed:!0}:pu("not-listed",t):pu("list-unavailable",t)}}}export{ki as AccountBus,gn as AuthDataSchema,Cs as BUCKET_DEPTH,Qc as DAY,un as DEFAULT_GNOSIS_RPC_URL,Qd as DEFAULT_SITE_ALLOW_LIST_ENS_NAME,Xd as DEFAULT_SITE_ALLOW_LIST_RECORD_KEY,xa as DebouncedUtilizationUploader,nn as GNOSIS_BLOCK_TIME,De as LocalAccountSchemaV1,Gs as MIN_USABLE_BATCH_DEPTH,We as NO_POSTAGE_STAMP,Pe as NetworkSettingsSchemaV1,Us as PARTITION_COUNT,Oa as PASSWORD_KDF_ITERATIONS,ya as PRESENCE_INTERVAL_MS,Vo as PartitionLease,tn as PostageStampSchemaV1,wa as PresenceTracker,ln as STORAGE_CHALLENGE_KEY,Ee as STORAGE_KEY_ACCOUNTS,Ue as STORAGE_KEY_NETWORK_SETTINGS,ka as SignalingTransport,es as SocUploadError,Js as UtilizationAwareStamper,Fa as UtilizationStoreDB,la as accountDeltaSnapshot,td as appSessionDuration,Yc as calculateContractTTLSeconds,ca as createAccountsStorageManager,da as createNetworkSettingsStorageManager,fu as createSiteAllowList,Fc as createSyncAccount,Ea as decryptSeed,fa as deriveBusContext,Un as deriveChatKey,Ta as deriveKeyFromPassword,Da as deriveKeyFromPrf,$a as deriveKeyFromSecret,Ba as deriveKeyFromSignature,In as derivePostageSignerKeySync,Ie as deriveSecret,Te as deriveSecretSync,xn as deriveSharingKey,en as deriveSwarmEncryptionKey,Tc as detectDeviceName,ze as downloadEncryptedSOC,Pa as encryptSeed,Zc as fetchOnChainBatchStateResult,Kc as foldAccountFromSwarm,qc as foldedToSyncedAccount,Dc as getOrCreateDeviceId,Zd as initButtonFrame,Nd as initProxy,$e as isSignedOutAccount,mn as leaseCacheStorageKey,Wc as markFirstPartyStorage,oo as mergeConnectedApps,Bc as mergeDevices,ao as mergeDevicesList,co as mergePostageStamps,fn as onlySiteChatBinding,Ua as randomSalt,so as remainingLifespanSeconds,no as resolveStampForApp,pa as restoreLocalSessionFields,Yd as runCoalescedAcrossTabs,ta as serializePostageStamp,Ys as serializeSyncedAccount,pn as siteChatAddress,Ve as sleep,ro as stampsReachableByApp,fs as uploadSOC};
2
2
  //# sourceMappingURL=internal.esm.js.map