@solarpunkltd/swarm-id 0.8.0 → 0.8.2

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{n as t,o as e,q as n,E as r,r as i,t as s,x as a,y as o,z as c,B as d,F as u,G as l,H as h,J as p,K as f,L as y,O as g,Q as w,R as m,U as b,V as v,W as S,X as k,a as x,c as I,Y as A,Z as C,_ as U,$ as P,a0 as E,a1 as $,a2 as D,a3 as T,a4 as B,a5 as O,a6 as M,a7 as R,a8 as q,a9 as F,aa as L,ab as K,ac as N,ad as H,ae as j,af as W,M as z,ag as G,N as V,ah as J,ai as Z,aj as Y,ak as _,al as Q,am as X,an as tt,ao as et,ap as nt,aq as rt,ar as it,as as st,at,au as ot,av as dt,aw as ut,ax as lt,T as ht,ay as pt,az as ft,aA as yt,aB as gt,aC as wt,aD as mt,aE as bt,aF as vt,aG as St,aH as kt,aI as xt,aJ as It,aK as At,aL as Ct,aM as Ut,aN as Pt,aO as Et,aP as $t,aQ as Dt,aR as Tt,aS as Bt,aT as Ot,aU as Mt,aV as Rt,aW as qt,aX as Ft,aY as Lt,aZ as Kt,a_ as Nt,a$ as Ht,b0 as jt,b1 as Wt,b2 as zt,b3 as Gt,b4 as Vt,b5 as Jt,b6 as Zt,b7 as Yt,b8 as _t,b9 as Qt,ba as Xt,bb as te,bc as ee,bd as ne,be as re,bf as ie,bg as se,bh as ae,bi as oe,bj as ce,bk as de,bl as ue,bm as le,bn as he,bo as pe,bp as fe,u as ye,h as ge,S as we,bq as me,br as be,bs as ve,bt as Se,bu as ke,bv as xe,bw as Ie,bx as Ae,by as Ce,bz as Ue,bA as Pe,bB as Ee,bC as $e,bD as De,bE as Te,bF as Be,bG as Oe,bH as Me,bI as Re,bJ as qe,bK as Fe,bL as Le,bM as Ke,bN as Ne,bO as He,bP as je,bQ as We,bR as ze,bS as Ge,bT as Ve,w as Je,bU as Ze,d as Ye,bV as _e,bW as Qe,bX as Xe,bY as tn,bZ as en,b_ as nn,i as rn,b$ as sn,c0 as an,c1 as on,c2 as cn,D as dn,c3 as un,c4 as ln,k as hn,c5 as pn,c6 as fn,c7 as yn,c8 as gn,c9 as wn,ca as mn,cb as bn,cc as vn,P as Sn,cd as kn,ce as xn,g as In,b as An,cf as Cn,cg as Un,ch as Pn,ci as En,cj as $n,ck as Dn,cl as Tn,cm as Bn,m as On,cn as Mn,j as Rn}from"./chunks/chat-binding-DlH_ZkTn.js";export{co as BatchIdSchema,cp as PrivateKeySchema,cq as SyncedAccountSchemaV1,cw as calculateStampAmountForDays,ct as createChatBinding,cr as deriveAccountDerivationKey,cs as derivePostageSignerKey,cu as hexAddress,cx as isHttpUrl,cv as withIdleTimeout}from"./chunks/chat-binding-DlH_ZkTn.js";class qn{constructor(t){if(this.bytes=Math.ceil(t),t<0)throw Error("Size must be at least 0")}static fromBytes(t){return new qn(t)}static fromKilobytes(t){return new qn(1e3*t)}static fromMegabytes(t){return new qn(1e3*t*1e3)}static fromGigabytes(t){return new qn(1e3*t*1e3*1e3)}static parseFromString(t){return qn.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 Fn(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:qn.fromBytes(s),remainingSize:qn.fromBytes(Math.ceil(s*(1-c))),theoreticalSize:qn.fromBytes(f(t.depth)),duration:i,calculateSize(e,n){const r=l(t.depth,e,n);return qn.fromBytes(r)},calculateRemainingSize(e,n){const r=l(t.depth,e,n);return qn.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=g().safeParse(i.act);s.success&&(n["swarm-act"]=String(s.data));const a=g().safeParse(i.pin);a.success&&(n["swarm-pin"]=String(a.data));const o=g().safeParse(i.encrypt);o.success&&(n["swarm-encrypt"]=String(o.data)),i.tag&&(n["swarm-tag"]=String(i.tag));const c=g().safeParse(i.deferred);c.success&&(n["swarm-deferred-upload"]=String(c.data)),i.redundancyStrategy&&(n["swarm-redundancy-strategy"]=String(i.redundancyStrategy));const d=g().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 w(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 T(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 T(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 T(e);return async function(e,n){const r=await t(e,{url:`${Xn}/cheque/${n}`,responseType:"json"});return q.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getLastCashoutAction(e,n){const r=new T(e);return async function(e,n){const r=await t(e,{url:`${Xn}/cashout/${n}`,responseType:"json"});return F.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async cashoutLast(e,n,r){const i=new T(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 B.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 gr(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 wr{constructor(t){this.context=t}async upload(t,e,n,r){const i=new p(t);return or(e),n&&(n=Z.parse(n)),gr(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 gr(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 gr(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 T(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 T(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 Tr(t,e,n){const r=Er(e,n);return new m(at(A.concat(r.toUint8Array(),t.toUint8Array())))}async function Br(t,e,n,r,i=!1){const a=Tr(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=Tr(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 Br(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 qr(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(Tr(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 Fr{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 qr(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 w(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=gt.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: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 w(t))??[],revoke:i.revoke?.map(t=>new w(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=gt.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 w(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 T(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 T(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>qt)throw new H(`Depth has to be between ${Rt}..${qt}`,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=Ft().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 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:`${_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 Tt.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 Fn(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=Fn(a.depth,u);return Fn(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=Fn(s.depth,c);return Fn(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 Fn(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 Fr(n),this.soc=new Jr(n),this.data=new Ar(n),this.chunk=new nr(n),this.file=new Lr(n),this.collection=new wr(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),gi=ue().regex(/^[0-9a-f]{8}$/),wi=he("type",[pe,fi,ae({type:ce("lease-request"),accountId:ue().length(40),batchId:ue().length(64),fromDeviceId:yi,requestId:gi}),ae({type:ce("lease-claim"),accountId:ue().length(40),batchId:ue().length(64),fromDeviceId:yi,requestId:gi}),ae({type:ce("lease-released"),accountId:ue().length(40),batchId:ue().length(64),partition:le().int().min(0),fromDeviceId:yi,requestId:gi.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=wi.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,Ti;function Bi(){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 Ti??(Ti=(async()=>{const{store:t}=await Bi(),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)})()),Ti.catch(()=>{Ti=void 0}),Ti}const Mi=new Map,Ri=new Map,qi=new Map;function Fi(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=ge(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 Bi()).standsIn&&Ki.add(t)}}function Hi(t){return Ki.has(t)}async function ji(t){const e=[];for(const n of t){if(!Fi(n)||Mi.has(n))continue;let t=qi.get(n);t||(t=Ni(n).finally(()=>qi.delete(n)),qi.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 we)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 we("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 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=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 g=await fetch(p,{method:"POST",headers:f,body:o,signal:i?.requestOptions?.signal});if(!g.ok){const t=await g.text();throw new Qi(g.status,g.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 gs(t,e,n){const r=ys(t,e,n);return r[0]<<8|r[1]}const ws=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):Fs(c)}function Ts(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 Bs{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 qs(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 Fs(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)Ts(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):Fs(u);for(let t=0;t<a;t++){const n=o.find(e=>e.chunkIndex===t);n?(Ts(c,t,n.data,e),d.push({index:t,contentHash:n.contentHash,lastUpload:n.lastAccess,dirty:!1,nonce:n.nonce})):(Ts(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 Bs(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||Ts(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=Te.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=>Fi(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=>Fi(t)&&Hi(t))}(n);if(!ea(t))return r?n:t;if(r&&await async function(){return(await Bi()).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=>Fi(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 Be(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 ga(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 wa(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 ga(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 wa(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=ge(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 Ta=xa,Ba="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(Ba)&&e.deleteObjectStore(Ba),e.objectStoreNames.contains(Oa)&&e.deleteObjectStore(Oa);e.createObjectStore(Ba,{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([Ba],"readonly").objectStore(Ba).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([Ba],"readwrite").objectStore(Ba),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([Ba],"readonly").objectStore(Ba).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([Ba,Oa],"readwrite"),i=r.objectStore(Ba),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([Ba],"readwrite"),s=i.objectStore(Ba),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 qa(t,e){!function(t){const e=Fe+Le,n=Fe+Ke;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=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 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=ge(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 Fa(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 we("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 uo(t){const e=s.Binary.keccak256((new TextEncoder).encode(t));return s.Binary.uint8ArrayToHex(e.slice(0,8))}function lo(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 ho(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 po(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 fo(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 yo(t){const e=t.now??Date.now,n=t.wait??Ve,r=()=>Je(po(t),t.readTimeoutMs??ws,"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:uo(t.deviceId)},o={holderDeviceId:t.deviceId,generation:a,acquiredAt:s,leasedUntil:s+t.ttlMs};await fo({...t,payload:o}),await n(t.guardMs);const c=await r();return c?ho(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 go=ws,wo=bs;function mo(t){return Math.floor(t/bs)}function bo(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 vo(t,e,n,r,i){const a=bo(t,e,n,r);return s.Binary.keccak256(s.Binary.concatBytes(a.toUint8Array(),i.toUint8Array()))}function So(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 ko(t,e,n,r){const i=So(t,e,n);return s.Binary.keccak256(s.Binary.concatBytes(i.toUint8Array(),r.toUint8Array()))}async function xo(t){const e=bo(t.batchId,t.partition,t.deviceId,t.epochBucket),n=t.backupSigner.publicKey().address(),r=vo(t.batchId,t.partition,t.deviceId,t.epochBucket,n),i={deviceId:t.deviceId,generation:t.generation,...void 0!==t.leasedUntil?{leasedUntil:t.leasedUntil}:{}};await Io({bee:t.bee,stamper:t.stamper,backupSigner:t.backupSigner,swarmEncryptionKey:t.swarmEncryptionKey,partition:t.partition,identifier:e,address:r,payload:i})}async function Io(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 Ao=t=>t instanceof Error&&/status code 5\d\d/.test(t.message);async function Co(t){const e=()=>Je(ze(t.bee,t.owner,t.identifier,t.swarmEncryptionKey),t.timeoutMs??go,"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(Ao(e)&&0===n&&!1!==t.retryOn5xx)continue;const r=e instanceof Ye;return void console.debug(`[partition-intent] ${t.logLabel}: ${r?`TIMEOUT (>${t.timeoutMs??go}ms)`:`missing (${e instanceof Error?e.message:String(e)})`}${Ao(e)?" after 5xx retry":""} — treated as no-intent`)}}async function Uo(t){return Co({bee:t.bee,owner:t.backupSigner.publicKey().address(),identifier:bo(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 Po(t){return Co({bee:t.bee,owner:t.backupSigner.publicKey().address(),identifier:So(t.batchId,t.partition,t.epochBucket),swarmEncryptionKey:t.swarmEncryptionKey,timeoutMs:t.timeoutMs,logLabel:`occupancy p=${t.partition} bucket=${t.epochBucket}`})}const Eo=new Uint8Array(64),$o=ae({counters:_e(Uint32Array).refine(t=>t.length===xs,{message:"counters must have 65536 entries"})});function Do(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 To=bs,Bo=Symbol("state-pointer-read-timed-out");function Oo(t){return Math.floor(t/To)}const Mo=ae({referenceHex:ue()});function Ro(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 qo(t){const e=Ro(Do(t.batchId,t.partition),Oo(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 Lo(t,e,n,r){return Fo(Ro(Do(t,e),Oo(r)),n)}async function Ko(t){const e=Do(t.batchId,t.partition),n=new Set,r=Oo(t.nowMs);if(n.add(r),n.add(r-1),void 0!==t.holderLeasedUntilMs){const e=Oo(t.holderLeasedUntilMs);for(let r=Oo(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=Ro(e,n);try{const e=await Je(ze(t.bee,t.owner,r,t.swarmEncryptionKey),2500,"state-pointer read timed out"),n=Mo.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 No(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 Ho(t){for(let e=0;e<t.length;e++)if(0!==t[e])return!1;return!0}function jo(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 Wo(t){for(let e=0;e<t.length;e++)if(0!==t[e])return!1;return!0}class zo{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 zo({...t,backupSigner:r})}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(po({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=mo(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 Uo({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=mo(this.now()),n=[e,e-1];return Promise.all(Array.from({length:t}).flatMap((t,e)=>n.map(async t=>({partition:e,occupancy:await Po({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=lo(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=lo(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=${lo(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 Ko({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 Ko({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,g=new m(y).toUint8Array();if(void 0!==e&&y===e){const{numUtilizationChunks:t}=Ps(c);return{referenceHex:y,unchanged:!0,references:await No(n,g,t).catch(()=>{})}}const w=new Uint32Array(xs),b=[Es(g.slice(0,32))];let v=[];try{const{numUtilizationChunks:t}=Ps(c);v=await No(n,g,t);const e=await Promise.all(v.map((t,e)=>Ho(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&&(Ts(w,t.i,t.data,c),b.push(Es(t.ref.slice(0,32))));$o.parse({counters:w})}catch(t){return console.warn(`[partition-state] reading partition ${o} counter failed; degrading to read-only:`,t),{unchanged:!1,readFailed:!0}}return{localCounter:w,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:uo(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=mo(t.now),r=n-1;await xo({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 Uo({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(ho(n.generation,t.generation)<0)return{rivalId:e.rivalId,reason:"earlier-intent"}}else if(n.leasedUntil>t.now-wo){if(t.releasedGeneration&&ho(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 yo({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=mo(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 yo({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=mo(n);return(await Promise.all(r.flatMap(e=>[i,i-1].map(n=>Uo({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&&ho(r.generation,e)<0&&this.beaconOutranksRelease(t,r.generation))}beaconOutranksRelease(t,e){const n=this.releasedPartitions.get(t);return void 0===n||ho(e,n)>0}async occupancyBeaconBeatsUs(t,e){const n=this.now(),r=mo(n);return(await Promise.all([r,r-1].map(e=>Po({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&&ho(r.generation,e)<0&&this.beaconOutranksRelease(t,r.generation))}async publishPresenceBeacon(t,e,n){const{stamper:r}=this.requireWriteContext(),i=mo(this.now());try{await xo({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=So(t.batchId,t.partition,t.epochBucket),n=t.backupSigner.publicKey().address(),r=ko(t.batchId,t.partition,t.epochBucket,n),i={deviceId:t.deviceId,generation:t.generation,leasedUntil:t.leasedUntil};await Io({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 po(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(ho(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 fo({...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=mo(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;$o.parse({counters:o});const{numUtilizationChunks:f}=Ps(i),y={mode:"stamper",bee:e,stamper:n},g=c.publicKey().address(),w=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=>!Ho(Ds(o,t,i))),k=new Set(S),x=b?u.map(t=>t.slice()):v.map(()=>Eo.slice()),I=new Set([gs(r,a,g),...w?.getCleanChunkBuckets()??[]]);if(b)for(let t=0;t<f;t++)k.has(t)||Ho(x[t])||I.add(Es(x[t].slice(0,32)));const A=p;for(const t of[A,A-To])I.add(Es(Lo(r,a,g,t)));const C=mo(A);for(const t of[C,C-1])I.add(Es(ko(r,a,t,g))),void 0!==h&&I.add(Es(vo(r,a,h,t,g)));const U=S.map(t=>{const e=jo(Ds(o,t,i),I);return x[t]=e.reference,w?.markReservedUtilizationChunk(e.address,a),{data:e.data}}),P=jo(s.Binary.concatBytes(...x),I);w?.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 qo({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}`),w?.clearReservedUtilizationChunks();const T=x.filter(t=>!Ho(t)).map(t=>Es(t.slice(0,32)));return T.push(Es(P.address)),{referenceHex:E,stateBuckets:T,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 qo({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=mo(r),s=new Set([gs(n,t,e),Es(Lo(n,t,e,r)),Es(ko(n,t,i,e)),Es(vo(n,t,this.opts.deviceId,i,e))]);for(const t of this.publishedReferences)if(!Wo(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 Go extends Error{constructor(t="All partitions are held by other devices.",e){super(t),this.accountId=e,this.name="PartitionContendedError"}}function Vo(t,e,n){return void 0!==t&&t.holderDeviceId!==n&&t.holderDeviceId!==oo&&t.leasedUntil>e}class Jo{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 Go(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=await zo.fromSwarmEncryptionKey({bee:this.deps.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 s=this.deps.readLeaseCache?.();s&&i.hydrate(s);const a=i.adoptIfLive();if(void 0!==a){const n=await t.getSyncedReference(a).catch(()=>{});if(this.leaseEpoch!==r||this.disposed)return;return console.debug(`[BatchWriteCoordinator] Adopted cached lease p=${a} (no acquire/intent round) for device=${this.deps.deviceId}`),this.partitionLease=i,this.readOnly=!1,t.bindPartition({partition:a,partitionCount:e,localCounter:t.buildLeaseLocalCounter()}),this.syncStamperLeaseDeadline(),i.seedReferenceHex(n),this.deps.writeLeaseCache?.(i.serialize()),this.startRefreshTimer(i),this.lastLeaseValidatedAt=Date.now(),this.lastLeaseActivityAt=Date.now(),this.pointerHeartbeatFailingSince=void 0,void this.deps.onLeaseAcquired?.(a)}const o=await i.acquire({partitionCount:e});if(this.leaseEpoch!==r)return;if(this.partitionLease=i,this.readOnly=o.isReadOnly,void 0===o.partition)return o.isReadOnly&&console.warn("[BatchWriteCoordinator] All partitions held; entering read-only mode until a peer releases."),void this.deps.writeLeaseCache?.(i.serialize());t.bindPartition({partition:o.partition,partitionCount:o.partitionCount,localCounter:o.localCounter}),this.syncStamperLeaseDeadline(),this.deps.writeLeaseCache?.(i.serialize()),this.startRefreshTimer(i),this.lastLeaseValidatedAt=Date.now(),this.lastLeaseActivityAt=Date.now(),this.pointerHeartbeatFailingSince=void 0,this.deps.onLeaseAcquired?.(o.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 Go("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 po({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(Vo(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 po({bee:this.deps.bee,backupSigner:this.deps.backupSigner,swarmEncryptionKey:this.deps.swarmEncryptionKey,batchId:new p(this.deps.batchId),partition:e});n=Vo(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>To&&(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 Zo=32;class Yo{constructor(t,e){if(this.start=t,this.level=e,e<0||e>Zo)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 Yo(0n,Zo);const n=t-e;let r=1n,i=0;for(;i<Zo&&(r<n||t/r!==e/r);)r<<=1n,i++;return new Yo(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 Yo(e,this.level+1)}left(){return new Yo(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 Yo(r,e)}isLeft(){return 0n===(this.start&this.length())}toString(){return`${this.start}/${this.level}`}}class _o{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 Yo(t,0)).catch(()=>{}),[r,i]=await Promise.all([n,this.findAtEpoch(t,new Yo(0n,Zo),void 0)]);if(r)return r;if(i)return i;try{if(void 0===await this.getEpochChunk(t,new Yo(0n,Zo)))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 Yo(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 Yo(0n,Zo),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 Yo(s,0));if(e)return e}catch{}if(0n===s)break;s--}}(t,e,(t,e)=>this.getEpochChunk(t,e))}}class Qo{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 Yo(e.lastEpoch.start,e.lastEpoch.level).next(e.lastTimestamp,t)}if(!r||!Xi(r))return new Yo(0n,Zo);const i=this.signer.publicKey().address(),s=new _o(r.bee,this.topic,i,n),a=await s.findAtWithMetadata(t);return a?a.epoch.next(a.timestamp,t):new Yo(0n,Zo)}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 Xo(t){return new _o(t.bee,t.topic,t.owner,t.encryptionKey)}class tc{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 ec{constructor(t,e,n){this.syncFinder=new tc(t,e,n)}async findAt(t,e=0n,n){return this.syncFinder.findAt(t,e,n)}}class nc{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 rc(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 ic=256,sc=new Map,ac="swarm-id-roster-len";function oc(t,e){return`${t}:${e.toHex()}`}function cc(t){const e=sc.get(t);if(void 0!==e)return e;if("undefined"==typeof localStorage)return 0;let n;try{n=localStorage.getItem(`${ac}:${t}`)}catch{return 0}const r=null===n?0:Number.parseInt(n,10),i=Number.isInteger(r)&&r>0?Math.min(r,ic):0;return sc.set(t,i),i}function dc(t,e){const n=Math.min(e,ic);if(!(n<=cc(t))&&(sc.set(t,n),"undefined"!=typeof localStorage))try{localStorage.setItem(`${ac}:${t}`,`${n}`)}catch{}}const uc=ws,lc=Symbol("roster-read-inconclusive");class hc extends Error{constructor(){super("roster scan inconclusive: cannot confirm the roster is empty"),this.name="RosterScanInconclusiveError"}}function pc(t){return ht.fromString(`swarm-id-roster-v1:${t}`)}async function fc(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),uc,"roster read timed out")).payload.toUint8Array()}catch(r){if(rc(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),uc,"roster /soc probe timed out");return t.ok?new Uint8Array(await t.arrayBuffer()):404!==t.status?lc:404===(await t.json()).code?void 0:lc}catch{return lc}}({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()),uc,"roster read timed out")}catch(t){return rc(t)?void 0:lc}try{return Xe.parse(JSON.parse((new TextDecoder).decode(r)))}catch{return}}async function yc(t){const e=pc(t.accountId),n=oc(t.accountId,t.owner),r=cc(n);let i=[],s=0;for(let n=0;n<ic;){const a=n<r?r-n:Math.min(r>0?2:16,ic-n),o=Array.from({length:a},(t,e)=>BigInt(n+e));let c=await Promise.all(o.map(n=>fc({bee:t.bee,topic:e,owner:t.owner,index:n})));if(!c.some(gc)&&c.some(t=>t===lc)&&(c=await Promise.all(o.map((n,r)=>c[r]===lc?fc({bee:t.bee,topic:e,owner:t.owner,index:n}):c[r]))),c.forEach((t,e)=>{gc(t)&&(i=ro(i,[t]),s=n+e+1)}),!c.some(gc)){if(0===i.length&&c.some(t=>t===lc))throw new hc;break}n+=a}return i.length>0&&dc(n,s),i}function gc(t){return void 0!==t&&t!==lc}async function wc(t){let e;try{e=await yc({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=pc(t.accountId),{next:n}=await new tc(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:ge(t.encryptionKey)}),s=new m(i.reference).toUint8Array(),a=new nc(t.bee,e,t.accountKey);a.setState({nextIndex:n}),await a.update(s,t.target.stamper),dc(oc(t.accountId,t.owner),Number(n)+1)}(t)}const mc=ae({appSessionDuration:le().optional()}),bc=t=>ae({value:t,at:le()}),vc=ae({version:ce(1),accountId:ue().length(40),deviceId:ue(),timestamp:le(),connectedApps:de(se),postageStamps:de(tn),accountName:bc(ue()),defaultPostageStampBatchID:bc(ue().length(64).optional()),settings:bc(mc.optional()),accountPublicKey:ue(),accountCreatedAt:le(),partitionCount:le().int().min(1).default(1)});function Sc(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 kc(t,e){return ht.fromString(`swarm-id-devstate-v1:${t}:${e}`)}async function xc(t){const e=kc(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:ge(t.encryptionKey)}),c=o.chunkAddresses??[],d=new m(o.reference).toUint8Array(),u=new Qo(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 Ic(t){const e=await xc({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 Ac(t){const e=kc(t.accountId,t.deviceId),n=new _o(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 vc.parse(e)}(await Qe(t.bee,new m(r).toHex()))}function Cc(t,e){return e.at>=t.at?e:t}function Uc(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=Cc(s,e.accountName),a=Cc(a,e.defaultPostageStampBatchID),o=Cc(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 Pc="swarm-id-device-id";function Ec(){const t=localStorage.getItem(Pc);if(t)return t;const e=crypto.randomUUID();return localStorage.setItem(Pc,e),e}function $c(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 Dc(){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 Tc=Object.entries({deviceId:"all",createdAt:"all",name:"all",nameUpdatedAt:"all",removedAt:"all",lastSignedInAt:"all"}),Bc=18e5;function Oc(t,e,n){const r=e-n;return t.filter(t=>!t.removedAt&&(t.lastSignedInAt??0)>=r).map(t=>t.deviceId)}function Mc(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),g=await Ae(y,Ue),w=new I(g).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:w,encryptionKey:ge(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 qs(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:ge(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),g=y.publicKey().address(),w=await i.getStamper(h.batchID,{owner:g,encryptionKey:ge(l)});if(!w){const t=`Cannot create stamper for batch ${h.batchID.toHex()}`;return console.error(`[SyncCoordinator ${a()}] ${t}`),{status:"error",error:t}}if(!(w 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 Jo({bee:e,batchId:h.batchID.toHex(),stamper:w,deviceId:Ec(),accountId:t,knownDeviceIds:()=>[...new Set([...Oc(n.getAccount(new r(t))?.devices??[],Date.now(),Bc),...c?.()??[]])],backupSigner:y,swarmEncryptionKey:ge(l),partitionCount:p,mode:"oneshot"});console.log(`[SyncCoordinator ${a()}] Starting sync for ${t} bee.url=${e.url}`);const b=Ec(),v=u.metadata.devices.find(t=>t.deviceId===b)??{deviceId:b,name:Dc(),createdAt:Date.now(),lastSignedInAt:Date.now()},S=Sc(u);try{const n=await Je(m.withWrite(n=>Ic({bee:e,accountId:t,device:v,accountKey:y,owner:g,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 Go?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 Rc(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 qc=new Map;async function Fc(t){const e=`${t.accountId}:${t.derivationKey}`,n=qc.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 yc({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=>Ac({bee:t.bee,accountId:t.accountId,deviceId:e.deviceId,owner:r}).catch(()=>{})))).filter(t=>void 0!==t);if(0===s.length)return;const a=Uc(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(()=>{qc.delete(e)});return qc.set(e,r),r}async function Lc(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 yc({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 Kc="swarm-id-first-party";function Nc(){try{if("undefined"==typeof window||window.self!==window.top)return;localStorage.setItem(Kc,"1")}catch{}}function Hc(){try{return null!==localStorage.getItem(Kc)}catch{return!1}}const jc="0x45a1502382541cd610cc9068e88727426b696293";function Wc(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:jc}const zc=new RegExp("^[0-9a-f]{64}$");function Gc(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 Vc(t,e,n=jc){try{const r=function(t){const e=(t.startsWith("0x")?t.slice(2):t).toLowerCase();if(!zc.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:Gc(s),lastPrice:Gc(a)}}}catch{return{status:"error"}}}function Jc(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 Zc(t,e,n=jc){const r=await async function(t,e,n=jc){const r=await Vc(t,e,n);return"found"===r.status?r.state:void 0}(t,e,n);if(void 0!==r)return Jc(r)}const Yc=864e5,_c=7*Yc;function Qc(t){return t?.appSessionDuration??_c}const Xc=32;function td(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 ed(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!==Xc||n.length!==Xc)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 nd(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 rd=nd;function id(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 sd(t,e){if(t.length!==Xc||e.length!==Xc)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 ad(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 od(t){const e=(new TextDecoder).decode(t),n=JSON.parse(e),r=[];for(const[t,e]of Object.entries(n.entries))r.push({lookupKey:ge(t),encryptedAccessKey:ge(e.reference)});return r}function cd(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 dd=65,ud=(new TextEncoder).encode("act-grantee-list");function ld(t){const e=s.Binary.concatBytes(t,ud);return s.Binary.keccak256(e)}function hd(t,e){const n=function(t){const e=new Uint8Array(t.length*dd);for(let n=0;n<t.length;n++){const r=n*dd;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 nd(t,ld(e))}(n,e)}function pd(t,e){const n=function(t,e){const n=ld(e);return rd(t,n)}(t,e);return function(t){if(0===t.length)return[];if(t.length%dd!==0)throw new Error(`Invalid grantee list length: ${t.length} is not a multiple of 65`);const e=t.length/dd,n=[];for(let r=0;r<e;r++){const e=r*dd;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+dd);n.push({x:i,y:s})}return n}(n)}const fd=BigInt("9223372036854775807"),yd=new TextEncoder,gd="encryptedglref";let wd=0;function md(t){return(fd-BigInt(t)).toString()}function bd(t){const e=BigInt(t);return Number(fd-e)}function vd(t,e,n,r){const i=md(e),s=ge(n),a=r?{[gd]:r}:void 0;t.addFork(yd.encode(i),s,a)}function Sd(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:bd(n.fullPathString),metadata:{actReference:ye(n.targetAddress),encryptedGranteeListRef:n.metadata?.[gd]}}}async function kd(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=ge(s.reference),s}(t,!0);return{rootReference:n.reference,tagUid:n.tagUid}}function xd(t,e){return z.unmarshalFromData(t,e)}async function Id(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 Ad(){const t=Math.floor(Date.now()/1e3);return t<=wd?(wd+=1,wd):(wd=t,t)}function Cd(t){return Array.isArray(t)?t:[t]}function Ud(t,e){for(const n of Cd(e)){const e=td(n),r=ed(n,e.x,e.y),i=cd(t,r.lookupKey);if(i)return{privateKey:n,derived:r,entry:i}}throw new Error("Cannot find publisher entry in ACT")}function Pd(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 Ed(t,e,n,r,i,s,a){const o=cn(),c=nd(e,o),d=td(n),u=[],l=ed(n,d.x,d.y);u.push({lookupKey:l.lookupKey,encryptedAccessKey:nd(o,l.accessKeyDecryptionKey)});for(const t of r){const e=ed(n,t.x,t.y);u.push({lookupKey:e.lookupKey,encryptedAccessKey:nd(o,e.accessKeyDecryptionKey)})}const h=ad(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=hd(r,n),g=await ls(t,y,{encryptionKey:!0,pin:i?.pin,deferred:i?.deferred,requestOptions:s}),w=Ad(),m=new z;vd(m,w,f.reference,g.reference);const b=await kd(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=sd(d.x,d.y);return{encryptedReference:ye(c),historyReference:v,granteeListReference:g.reference,publisherPubKey:ye(k),actReference:f.reference,tagUid:S}}async function $d(t,e,n,r,i,s,a){const o=id(ge(r)),c=xd(await Qe(t,n,void 0,void 0,a),ge(n));await Id(c,async e=>Qe(t,e,void 0,void 0,a));const d=s?function(t,e){const n=md(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:bd(t.fullPathString),metadata:{actReference:ye(t.targetAddress),encryptedGranteeListRef:t.metadata?.[gd]}};const i=r[r.length-1];return{timestamp:bd(i.fullPathString),metadata:{actReference:ye(i.targetAddress),encryptedGranteeListRef:i.metadata?.[gd]}}}(c,s):Sd(c);if(!d)throw new Error("No ACT entry found in history");const u=d.metadata.actReference,l=od(await Qe(t,u,void 0,void 0,a));for(const t of Cd(i)){const n=td(t);for(const r of[o,n]){const n=ed(t,r.x,r.y),i=cd(l,n.lookupKey);if(!i)continue;const s=rd(i.encryptedAccessKey,n.accessKeyDecryptionKey);return Pd(rd(ge(e),s))}}throw new Error("Access denied: no ACT entry found for this key")}function Dd(t){return id(ge(t))}const Td="index.bin";function Bd(t){return ca(t,t.id.toHex(),t.lastModified??t.createdAt)}function Od(t){return{version:1,accountId:t.accountId,deviceId:"",timestamp:t.timestamp,...Sc(t)}}function Md(){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 Rd=new Map;function qd(){return new we("not-authenticated","This session was ended from the account. Connect again to write.")}class Fd{get stampRefusal(){return this.stampLifetime&&eo(this.stampLifetime)}get bee(){return this.beeClientFor(this.isSubsidisedModeActive()?this.subsidisedGatewayUrl:this.beeApiUrl)}get nodeBee(){return this.beeClientFor(this.beeApiUrl)}beeClientFor(t){return this.beeClient?.url!==t&&(this.beeClient={url:t,bee:new ui(t)}),this.beeClient.bee}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.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.beeApiUrl=e?.beeNodeUrl||dn,this.gnosisRpcUrl=e?.gnosisRpcUrl||un,this.postageStampContractAddress=t.postageStampContractAddress||jc,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())};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.beeApiUrl&&(this.beeApiUrl=e,this.beeApiUrl!==dn&&(this.subsidisedGatewayUrl=void 0))}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=Ec(),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=Ec(),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()+Qc(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=(Rd.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)});Rd.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=gn.safeParse(e);if(!r.success||!Fi(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 Rd.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&&wn.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+Qc(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=Uc([Od(Bd(n)),Od(t)],ro(n.devices,t.metadata.devices),n.id.toHex()),i=Rc({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}}();this.coordinator=new Jo({bee:this.nodeBee,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=Ec()),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 we("not-authenticated","Stamper not initialized. Please login first.");return this.coordinator.withWrite(e,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);const a=t.subsidisedGatewayUrl;a&&(this.subsidisedGatewayUrl=a),this.beeApiUrl!==dn&&this.subsidisedGatewayUrl&&(this.subsidisedGatewayUrl=void 0),await this.loadAuthData(),this.postMessage(e,{type:"proxyReady",authenticated:this.authenticated,parentOrigin:this.parentOrigin,storageShared:Hc()}),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"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.bee,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.bee,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=Ec(),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:Lc(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),t=this.restoredSessionCheck);const e=await t.verdict;if("allowed"!==e){if("ended"===e)throw qd();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 qd();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:ge(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([...Oc(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 yc({bee:this.nodeBee,accountId:s.id.toHex(),owner:a});if(0===o.length)return;const c=$c(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 Tc.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 yc({bee:this.nodeBee,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=Sc(r);await e.withWrite(t=>Ic({bee:this.nodeBee,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=Dc();try{return`${e} · ${new URL(t).host}`}catch{return e}}(this.parentOrigin):Dc()}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 we("not-authenticated","Not authenticated. Please login first.");if(!this.isSubsidisedModeActive()){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.beeApiUrl})}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=ge(this.appSecret),{x:n,y:r}=td(t),i=sd(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}}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)||(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}))}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=ge(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,ge(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 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 Ae(this.appSecret,r);this.postMessage(e,{type:"deriveAppSecretResponse",requestId:n,secret:ge(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")}}async handleStampChunk(t,e){const{requestId:n,chunk:r}=t;try{if(await this.ensureCanWrite(),this.isSubsidisedModeActive())throw Md();const t=qa(r,{appSecret:this.appSecret,internalOwners:this.accountInternalOwners()}),i=await this.withModeAwareWriteLock(void 0,async e=>{if(!Xi(e))throw Md();if(!(e.stamper instanceof Gs))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: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 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=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=Fa(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:Fa(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 we("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,qe)];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 ec(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 ht(ge(i)),u=new r(t),l=this.parseFeedTimestamp(a),h=void 0!==o?this.parseFeedTimestamp(o):0n,p=c?ge(c):void 0;let f;if(p){const t=Xo({bee:this.bee,topic:d,owner:u,encryptionKey:p});f=await t.findAt(l,h)}else{const t=Xo({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(ge(r)),h=u.publicKey().address(),p=this.parseFeedTimestamp(s),f=o?ge(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,g=ge(a);if(32!==g.length&&64!==g.length)throw new Error(`Reference must be 32 or 64 bytes, got ${g.length}`);const w=(d={bee:this.bee,topic:l,owner:h,signer:u},new Qo(d.topic,d.signer)),m=await this.withModeAwareWriteLock(void 0,async t=>await w.update(p,g,t,f,y)),b=Xo({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 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=ge(i),f=!1!==c,y=await this.resolveSequentialIndex(p,h,a,o,f,l,d,!1,u),g=this.makeSequentialFeedIdentifier(p,y),w=new x(g),m=await ze(this.bee,h,w,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=ge(i),f=!1!==c,y=await this.resolveSequentialIndex(p,h,a,o,f,l,d,!0,u),g=this.makeSequentialFeedIdentifier(p,y),w=new x(g),m=d?await ze(this.bee,h,w,d,l):await Cn(this.bee,h,w,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=ge(i),f=!1!==c,y=await this.resolveSequentialIndex(p,h,a,o,f,l,d,!1,u),g=this.makeSequentialFeedIdentifier(p,y),w=new x(g),m=await ze(this.bee,h,w,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=ge(r),y=!1!==c,g=void 0!==o?this.parseFeedTimestamp(o):BigInt(Math.floor(Date.now()/1e3));let w;if(void 0!==a)w=this.parseFeedIndex(a);else{const t=await this.findLatestSequentialIndex(f,p,l,d);w=void 0===t?0n:this.sequentialNextIndex(t)}const m=this.buildSequentialPayload(s,y,g);if(m.length<1||m.length>4096)throw new Error(`Invalid payload length: ${m.length} (expected 1-4096)`);const b=this.makeSequentialFeedIdentifier(f,w),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:w.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=ge(r),g=!1!==c,w=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,g,w);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?ge(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=ge(r),y=!1!==c,g=void 0!==o?this.parseFeedTimestamp(o):BigInt(Math.floor(Date.now()/1e3));let w;if(void 0!==a)w=this.parseFeedIndex(a);else{const t=await this.findLatestSequentialIndex(f,p,l,d);w=void 0===t?0n:this.sequentialNextIndex(t)}const m=ge(s),b=this.buildSequentialPayload(m,y,g);if(b.length<1||b.length>4096)throw new Error(`Invalid payload length: ${b.length} (expected 1-4096)`);const v=this.makeSequentialFeedIdentifier(f,w),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:w.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=ge(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=>Dd(t)),c=this.createProgressCallback(e,n,o),d="identity"===s?.publisher?this.sharingSecret():ge(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=ge(n.reference);i.addFork(Td,o,{"Content-Type":"application/octet-stream",Filename:Td}),i.addFork("/",V,{"website-index-document":Td});const l=await He(i,async t=>(await ps(e,t,{pin:s?.pin,deferred:s?.deferred,tag:s?.tag}),{}),{encrypt:!u}),h=ge(l.rootReference);return{actResult:await Ed(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 $d(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=>Dd(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=xd(await Qe(e,n,void 0,void 0,a),ge(n));await Id(d,async t=>Qe(e,t,void 0,void 0,a));const u=Sd(d);if(!u)throw new Error("History manifest is empty");const l=od(await Qe(e,u.metadata.actReference,void 0,void 0,a)),{privateKey:h,derived:p,entry:f}=Ud(l,r),y=rd(f.encryptedAccessKey,p.accessKeyDecryptionKey),g=[...l];for(const t of i){const e=ed(h,t.x,t.y);g.push({lookupKey:e.lookupKey,encryptedAccessKey:nd(y,e.accessKeyDecryptionKey)})}let w=[];u.metadata.encryptedGranteeListRef&&(w=pd(await Qe(e,u.metadata.encryptedGranteeListRef,void 0,void 0,a),h));const m=[...w,...i],b=ad(g),v=await ls(t,b,{encryptionKey:!c||void 0,pin:s?.pin,deferred:s?.deferred,tag:s?.tag,requestOptions:a}),S=hd(m,h),k=await ls(t,S,{encryptionKey:!0,pin:s?.pin,deferred:s?.deferred,requestOptions:a});vd(d,Ad(),v.reference,k.reference);const x=await kd(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=>Dd(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=xd(await Qe(e,n,void 0,void 0,o),ge(n));await Id(u,async t=>Qe(e,t,void 0,void 0,o));const l=Sd(u);if(!l)throw new Error("History manifest is empty");const h=od(await Qe(e,l.metadata.actReference,void 0,void 0,o)),{privateKey:p,derived:f,entry:y}=Ud(h,i),g=rd(y.encryptedAccessKey,f.accessKeyDecryptionKey);let w=[];l.metadata.encryptedGranteeListRef&&(w=pd(await Qe(e,l.metadata.encryptedGranteeListRef,void 0,void 0,o),p));const m=w.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:nd(g,f.accessKeyDecryptionKey)});for(const t of m){const e=ed(p,t.x,t.y);b.push({lookupKey:e.lookupKey,encryptedAccessKey:nd(g,e.accessKeyDecryptionKey)})}const v=ad(b),S=await ls(t,v,{encryptionKey:!d||void 0,pin:a?.pin,deferred:a?.deferred,tag:a?.tag,requestOptions:o}),k=hd(m,p),x=await ls(t,k,{encryptionKey:!0,pin:a?.pin,deferred:a?.deferred,requestOptions:o});vd(u,Ad(),S.reference,x.reference);const I=await kd(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 we("not-authenticated","Not authenticated. Please login first.");const t=this.actKeys(),s=await async function(t,e,n,r){const i=xd(await Qe(t,e,void 0,void 0,r),ge(e));await Id(i,async e=>Qe(t,e,void 0,void 0,r));const s=Sd(i);if(!s||!s.metadata.encryptedGranteeListRef)return[];const a=await Qe(t,s.metadata.actReference,void 0,void 0,r),{privateKey:o}=Ud(od(a),n);return pd(await Qe(t,s.metadata.encryptedGranteeListRef,void 0,void 0,r),o).map(t=>{const e=sd(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=Wc(t,r);return await Zc(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=Tn(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 we("invalid-request","No owner provided and no app signer available"),"No owner provided and no app signer available")}}function Ld(t){return new Fd(t)}async function Kd(t){const e=async()=>{if((void 0===t.graceMs||!Nd(t.cooldownKey,t.graceMs))&&(t.force||!Nd(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 Nd(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 Hd="solarpunkid.eth",jd="buzz.solarpunk.sites",Wd="[SiteAllowList]",zd=/[\s,]+/,Gd=/^[a-z0-9-]+$/,Vd=32,Jd=_d("resolver(bytes32)"),Zd=_d("text(bytes32,string)"),Yd=ae({ensName:ue(),recordKey:ue(),origins:de(ue()),fetchedAt:le()});function _d(t){return ye(Bn((new TextEncoder).encode(t)).slice(0,4))}function Qd(t){return t.toString(16).padStart(64,"0")}function Xd(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 ge(t.slice(2))}function tu(t,e){if(e+Vd>t.length)throw new Error("The answer ends inside a word.");return BigInt(`0x${ye(t.slice(e,e+Vd))}`)}async function eu(t,e,n){return Rn(t,"eth_call",[{to:e,data:n},"latest"],{timeoutMs:sn})}async function nu(t,e,n){const r=function(t){let e=new Uint8Array(Vd);const n=""===t?[]:t.split(".");for(const t of n.reverse()){const n=new Uint8Array(64);n.set(e),n.set(Bn((new TextEncoder).encode(t)),Vd),e=Bn(n)}return`0x${ye(e)}`}(e),i=function(t){const e=Xd(t,"The registry");if(e.length!==Vd)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 eu(t,"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",`0x${Jd}${r.slice(2)}`));if(!i)throw new Error(`${e} has no resolver.`);return function(t){const e=Xd(t,"The resolver"),n=tu(e,0);if(n>BigInt(e.length))throw new Error("The resolver answered a string offset past its end.");const r=Number(n),i=tu(e,r),s=BigInt(r+Vd)+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+Vd,Number(s)))}(await eu(t,i,function(t,e){const n=(new TextEncoder).encode(e),r=ye(n),i=Math.ceil(n.length/Vd)*Vd*2,s=Qd(64);return`0x${Zd}${t.slice(2)}${s}${Qd(n.length)}${r.padEnd(i,"0")}`}(r,n)))}function ru(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 iu(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(`${Wd} 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=>Gd.test(t))}(t.ensName))try{const n=function(t){const e=[];for(const n of t.split(zd))""!==n&&(On(n)?e.push(n):console.warn(`${Wd} Ignored an entry that is not a clean https origin:`,n));return e}(await nu(t.rpcUrl,t.ensName,t.recordKey));return 0===n.length?void console.warn(`${Wd} 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(`${Wd} 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(`${Wd} Could not read the list, so no site is allowed:`,t)}else console.warn(`${Wd} The ENS name is not a plain lower-case name:`,t.ensName);else console.warn(`${Wd} 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=Yd.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 ru("not-clean",t);const e=await o();return e?e.includes(t)?{allowed:!0}:ru("not-listed",t):ru("list-unavailable",t)}}}export{bi as AccountBus,wn as AuthDataSchema,Is as BUCKET_DEPTH,Yc as DAY,un as DEFAULT_GNOSIS_RPC_URL,Hd as DEFAULT_SITE_ALLOW_LIST_ENS_NAME,jd as DEFAULT_SITE_ALLOW_LIST_RECORD_KEY,Sa as DebouncedUtilizationUploader,nn as GNOSIS_BLOCK_TIME,Te as LocalAccountSchemaV1,Ws as MIN_USABLE_BATCH_DEPTH,Ee as NetworkSettingsSchemaV1,As as PARTITION_COUNT,Ta as PASSWORD_KDF_ITERATIONS,pa as PRESENCE_INTERVAL_MS,zo 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,Qc as appSessionDuration,Jc as calculateContractTTLSeconds,aa as createAccountsStorageManager,oa as createNetworkSettingsStorageManager,iu as createSiteAllowList,Mc 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,Dc as detectDeviceName,ze as downloadEncryptedSOC,Ca as encryptSeed,Vc as fetchOnChainBatchStateResult,Fc as foldAccountFromSwarm,Rc as foldedToSyncedAccount,Ec as getOrCreateDeviceId,Ld as initProxy,De as isSignedOutAccount,mn as leaseCacheStorageKey,Nc as markFirstPartyStorage,io as mergeConnectedApps,$c as mergeDevices,ro as mergeDevicesList,so as mergePostageStamps,fn as onlySiteChatBinding,Aa as randomSalt,no as remainingLifespanSeconds,la as restoreLocalSessionFields,Kd as runCoalescedAcrossTabs,Qs as serializePostageStamp,Js as serializeSyncedAccount,pn as siteChatAddress,Ve as sleep,to as stampsReachableByApp,hs as uploadSOC};
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 g,U as w,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 B,a4 as D,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 gt,aD as wt,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 Bt,aS as Dt,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 ge,S as we,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 Be,bF as De,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,bV as Je,w as Ze,bW as Ye,d as _e,bX as Qe,bY as Xe,bZ as tn,b_ as en,b$ as nn,c0 as rn,k as sn,c1 as an,c2 as on,c3 as cn,c4 as dn,D as un,c5 as ln,c6 as hn,l as pn,c7 as fn,c8 as yn,c9 as gn,ca as wn,cb as mn,cc as bn,cd as vn,ce as Sn,P as kn,cf as xn,cg as In,g as An,b as Cn,ch as Un,ci as Pn,cj as En,ck as $n,cl as Bn,cm as Dn,cn as Tn,co as On,n as Mn,cp as Rn,j as Fn}from"./chunks/chat-binding-DgECjSWW.js";export{cq as BatchIdSchema,cr as PrivateKeySchema,cs as SyncedAccountSchemaV1,cy as calculateStampAmountForDays,cv as createChatBinding,ct as deriveAccountDerivationKey,cu as derivePostageSignerKey,cw as hexAddress,cz as isHttpUrl,cx as withIdleTimeout}from"./chunks/chat-binding-DgECjSWW.js";class qn{constructor(t){if(this.bytes=Math.ceil(t),t<0)throw Error("Size must be at least 0")}static fromBytes(t){return new qn(t)}static fromKilobytes(t){return new qn(1e3*t)}static fromMegabytes(t){return new qn(1e3*t*1e3)}static fromGigabytes(t){return new qn(1e3*t*1e3*1e3)}static parseFromString(t){return qn.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 Ln(t,e){return d.fromPLUR(2n**BigInt(t)*BigInt(e))}function Kn(t,e,n){return BigInt(t.toSeconds())/BigInt(n)*BigInt(e)+1n}function Nn(t,e,n){return c(t.toBytes(),e,n)}function Hn(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:qn.fromBytes(s),remainingSize:qn.fromBytes(Math.ceil(s*(1-c))),theoreticalSize:qn.fromBytes(f(t.depth)),duration:i,calculateSize(e,n){const r=l(t.depth,e,n);return qn.fromBytes(r)},calculateRemainingSize(e,n){const r=l(t.depth,e,n);return qn.fromBytes(Math.ceil(r*(1-this.usage)))}}}function jn(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 Wn(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=g().safeParse(i.act);s.success&&(n["swarm-act"]=String(s.data));const a=g().safeParse(i.pin);a.success&&(n["swarm-pin"]=String(a.data));const o=g().safeParse(i.encrypt);o.success&&(n["swarm-encrypt"]=String(o.data)),i.tag&&(n["swarm-tag"]=String(i.tag));const c=g().safeParse(i.deferred);c.success&&(n["swarm-deferred-upload"]=String(c.data)),i.redundancyStrategy&&(n["swarm-redundancy-strategy"]=String(i.redundancyStrategy));const d=g().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 w(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 zn="chunks";async function Gn(e,n,r){n=new m(n);const i=await t(e,{responseType:"arraybuffer",url:`${zn}/${n}`,headers:Wn(null,r)});return new Uint8Array(i.data)}function Vn(t,e){try{return U(t,e)}catch(t){throw new v(t.message)}}async function Jn(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",...Wn(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 Zn(t,e,n,r,i,s){e=new I(e),r=new x(r);return Jn(t,E(i).toSingleOwnerChunk(r,e),n,s)}async function Yn(t,e,n){n=new x(n),e=new r(e);const i=P(n,e);return Vn(await Gn(t,i.toHex()),i)}const _n="balances";const Qn="consumed";class Xn{constructor(t){this.context=t}async getAll(e){return async function(e){const n=await t(e,{url:_n,responseType:"json"});return $.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getPeer(e,n){const r=new D(e);return async function(e,n){const r=await t(e,{url:`${_n}/${n}`,responseType:"json"});return B.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getAllPastDueConsumption(e){return async function(e){const n=await t(e,{url:Qn,responseType:"json"});return $.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getAllPastDueConsumptionForPeer(e,n){const r=new D(e);return async function(e,n){const r=await t(e,{url:`${Qn}/${n}`,responseType:"json"});return B.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}}const tr="chequebook";class er{constructor(t){this.context=t}async getAllLatest(e){return async function(e){const n=await t(e,{url:`${tr}/cheque`,responseType:"json"});return R.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getAllLatestForPeer(e,n){const r=new D(e);return async function(e,n){const r=await t(e,{url:`${tr}/cheque/${n}`,responseType:"json"});return F.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getLastCashoutAction(e,n){const r=new D(e);return async function(e,n){const r=await t(e,{url:`${tr}/cashout/${n}`,responseType:"json"});return q.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async cashoutLast(e,n,r){const i=new D(e);return n&&(n=L.parse(n)),async function(e,n,r){const i=await t(e,{method:"post",url:`${tr}/cashout/${n}`,responseType:"json",headers:Wn(null,r)});return M.parse(i.data).transactionHash}(this.context.getRequestOptionsForCall(r),i,n)}}class nr{constructor(t){this.context=t}async getAddress(e){return async function(e){const n=await t(e,{url:`${tr}/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:`${tr}/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:`${tr}/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:`${tr}/withdraw`,responseType:"json",params:{amount:n},headers:i});return M.parse(s.data).transactionHash}(this.context.getRequestOptionsForCall(r),i,s)}}class rr{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:`${zn}`,data:n,headers:{"content-type":"application/octet-stream",...Wn(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)),Gn(this.context.getRequestOptionsForCall(n),r,e)}}async function ir(t,e,n,r,i){for(const s of t.forks.values()){const t=await ir(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 sr(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 sr(i.node,e,n,r)}}class ar{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 ar(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 ir(this.core,t,e,n,r)}async loadRecursively(t,e,n){return sr(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 or(t){return function t(e){return e<=1?e:e+t(Math.ceil(e/128))}(Math.ceil(t/4096))}function dr(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 ur(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 lr={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 hr(t){return["text/html","text/css"].includes(t)?`${t}; charset=utf-8`:t}class pr{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 fr(e,n,r,i){const s=new pr;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",...Wn(r,i)}})}const yr="bzz";async function gr(e,n,r,i,a){const o=await t(e,{method:"post",url:yr,data:n,headers:Wn(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){dr(e);const i=await fr(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 mr{constructor(t){this.context=t}async upload(t,e,n,r){const i=new p(t);return dr(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:ur(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+=or(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 ar;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(ur(t),e.hash(),{"Content-Type":hr(lr[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 br="peers";class vr{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:br,responseType:"json"});return X.parse(n.data).peers}(this.context.getRequestOptionsForCall(e))}async removePeer(e,n){const r=new D(e);return async function(e,n){return(await t(e,{url:`${br}/${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 D(e);return async function(e,n){return(await t(e,{url:`pingpong/${n}`,responseType:"json",method:"POST"})).data}(this.context.getRequestOptionsForCall(n),r)}}const Sr="bytes";async function kr(e,n,r,i){const a=await t(e,{url:Sr,method:"post",responseType:"json",data:n,headers:{"content-type":"application/octet-stream",...Wn(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 xr(e,n,r){r&&(r=W.parse(r));const i=await t(e,{responseType:"arraybuffer",url:`${Sr}/${n}`,headers:Wn(null,r)});return new A(i.data)}const Ir="stewardship";class Ar{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 Cr{constructor(t){this.context=t}async upload(t,e,n,r){const i=new p(t);return rt(e),n&&(n=it.parse(n)),kr(this.context.getRequestOptionsForCall(r),e,i,n)}async download(t,e,n){return e&&(e=W.parse(e)),xr(this.context.getRequestOptionsForCall(n),new Ar(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:`${Sr}/${n}`,headers:Wn(null,r)})).data}(this.context.getRequestOptionsForCall(r),new Ar(e),n)}async probe(e,n){const r=new m(e);return async function(e,n){const r=await t(e,{url:`${Sr}/${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:`${Ir}/${n}`});return et.parse(r.data).isRetrievable}(this.context.getRequestOptionsForCall(n),r)}}const Ur="feeds";function Pr(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 Er(e,n,r,i){const s=await t(e,{responseType:"arraybuffer",url:`${Ur}/${n}/${r}`,params:{...i}});return{payload:new A(s.data),...Pr(s.headers)}}function $r(t,e){return e="number"==typeof e?st.fromBigInt(BigInt(e)):e,new x(at(A.concat(t.toUint8Array(),e.toUint8Array())))}async function Br(t,e,n){try{const r=await Er(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=$r(n,s?.index??await Br(t,e.publicKey().address(),n));if(r.length>4096){const n=await kr(t,r,i,s);return async function(t,e,n,r,i,s){return e=new I(e),r=new x(r),Jn(t,i.toSingleOwnerChunk(r,e),n,s)}(t,e,i,a,dt(await Gn(t,n.reference)),s)}const o=nt().safeParse(r);return Zn(t,e,i,a,o.success?A.fromUtf8(o.data).toUint8Array():r,s)}function Tr(t,e,n){const r=$r(e,n);return new m(at(A.concat(r.toUint8Array(),t.toUint8Array())))}async function Or(t,e,n,r,i=!1){const a=Tr(e,n,r="number"==typeof r?st.fromBigInt(BigInt(r)):r),o=Vn(await Gn(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 Mr(t,e,n,r){const i=Tr(e,n,r="number"==typeof r?st.fromBigInt(BigInt(r)):r),s=Vn(await Gn(t,i),i);return E(s.payload,s.span)}function Rr(e,n,r){const i=async t=>{if(void 0===t?.index)return Er(e,r,n);const i=await Or(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 Er(e,r,n);const i=await Mr(e,r,n,t.index),s=i.span.toBigInt()<=4096n?i.payload:await xr(e,new Ar(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 Pr((await t(e,{responseType:"arraybuffer",url:`${Ur}/${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 Fr(t,e,n){const r=async(r,i,s)=>async function(t,e,n,r,i,s){r=new m(r);const a=$r(n,s?.index??await Br(t,e.publicKey().address(),n)),o=s?.at??Date.now()/1e3,c=ut(BigInt(Math.floor(o)),"BE");return Zn(t,e,i,a,A.concat(c,r.toUint8Array()),s)}(t,n,e,i,r,s);return{...Rr(t,e,n.publicKey().address()),upload:r,uploadReference:r,uploadPayload:async(r,i,s)=>Dr(t,n,e,i,r,s)}}async function qr(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(Tr(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 Lr{constructor(t){this.context=t}makeReader(t,e,n){return Rr(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 Fr(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:`${Ur}/${n}/${r}`,headers:Wn(i,s)});return S.parse(a.data).reference}(this.context.getRequestOptionsForCall(a),d,c,o,s)}async fetchLatestUpdate(t,e,n){return Er(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 qr(this.context.bee,o,c,n,i,this.context.getRequestOptionsForCall(a))}}class Kr{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 gr(this.context.getRequestOptionsForCall(i),t,s,a,c)}return gr(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:`${yr}/${n}/${r}`,headers:Wn(null,i)});return{...jn(s.headers),data:new A(s.data)}}(this.context.getRequestOptionsForCall(i),new Ar(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:`${yr}/${n}/${r}`,headers:Wn(null,i)});return{...jn(s.headers),data:s.data}}(this.context.getRequestOptionsForCall(i),s,n,r)}}const Nr="grantee";class Hr{constructor(t){this.context=t}async create(e,n,r){const i=new p(e),s=n.map(t=>new w(t));return async function(e,n,r){const i=await t(e,{method:"post",url:Nr,data:{grantees:r.map(t=>t.toCompressedHex())},headers:Wn(n),responseType:"json"}),s=gt.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:`${Nr}/${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 w(t))??[],revoke:i.revoke?.map(t=>new w(t))??[]};return async function(e,n,r,i,s){const a=await t(e,{method:"patch",url:`${Nr}/${r}`,data:{add:s.add.map(t=>t.toCompressedHex()),revoke:s.revoke.map(t=>t.toCompressedHex())},headers:{...Wn(n),"swarm-act-history-address":i.toHex()},responseType:"json"}),o=gt.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 jr(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 Wr{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 w(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:Wn(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 jr(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 D(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 Jn(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 jr(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 zr="pins";class Gr{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:`${zr}/${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:`${zr}/${n}`})}(this.context.getRequestOptionsForCall(n),r)}async getAll(e){return async function(e){const n=await t(e,{method:"get",responseType:"json",url:zr}),{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:`${zr}/${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:`${Ir}/${r}`,headers:{"swarm-postage-batch-id":n.toHex()}})}(this.context.getRequestOptionsForCall(r),i,s)}}const Vr="settlements";class Jr{constructor(t){this.context=t}async get(e,n){const r=new D(e);return async function(e,n){const r=await t(e,{url:`${Vr}/${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:Vr,responseType:"json"});return It.parse(n.data)}(this.context.getRequestOptionsForCall(e))}}class Zr{constructor(t){this.context=t}makeReader(t,e){const n=new r(t);return{owner:n,download:Yn.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:Zn.bind(null,this.context.getRequestOptionsForCall(e),n)}}}const Yr="stake";class _r{constructor(t){this.context=t}async get(e){return async function(e){const n=await t(e,{method:"get",responseType:"json",url:Yr});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:`${Yr}/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:`${Yr}/${n}`,headers:Wn(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:`${Yr}/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:Yr});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 Qr="stamps";const Xr="batches";class ti{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:`${Qr}/${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:`${Qr}/${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:`${Qr}/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:`${Qr}/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:`${Qr}/${n}`,responseType:"json"});return Hn($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:`${Xr}/${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:`${Qr}/${n}/buckets`,responseType:"json"});return Bt.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getAll(e){return async function(e){const n=await t(e,{method:"get",url:Qr,responseType:"json"});return Dt.parse(n.data).stamps.map(t=>Hn(t))}(this.context.getRequestOptionsForCall(e))}async getAllGlobal(e){return async function(e){const n=await t(e,{method:"get",url:Xr,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 ei{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 ni{constructor(t){this.context=t}get blockTime(){return"gnosis"===this.context.network?5:15}async buy(t,e,n,r,i,s){const a=Kn(e,(await this.context.bee.status.getChainState(r)).currentPrice,this.blockTime),o=Nn(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=Kn(e,(await this.context.bee.status.getChainState(n)).currentPrice,this.blockTime);return Ln(Nn(t,r,i),s)}async extend(t,e,n,r,i,s){const a=await this.context.bee.stamp.get(t,r),o=Nn(e,i,s),c=await this.context.bee.status.getChainState(r),d=o-a.depth,u=d<=0?1n:2n**BigInt(d),l=Kn(n,c.currentPrice,this.blockTime),h=Kn(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=Nn(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=Kn(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=Kn(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:Kn(n,o.currentPrice,this.blockTime),d=Nn(e,i,s),u=Kn(a.duration,o.currentPrice,this.blockTime),l=Ln(a.depth,u);return Ln(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=Nn(e,r,i);if(o-s.depth<=0)throw new H("New depth has to be greater than the original depth",o);const c=Kn(s.duration,a.currentPrice,this.blockTime),d=Ln(s.depth,c);return Ln(o,c).minus(d)}async getDurationExtensionCost(t,e,n){const r=await this.context.bee.stamp.get(t,n),i=Kn(e,(await this.context.bee.status.getChainState(n)).currentPrice,this.blockTime);return Ln(r.depth,i)}async rename(t,e,n){return this.context.bee.stamp.updateLabel(t,e,n)}}const ri="tags";class ii{constructor(t){this.context=t}async create(e){return async function(e){const n=await t(e,{method:"post",url:ri,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:ri,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:`${ri}/${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:`${ri}/${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:`${ri}/${n}`,data:{reference:r}})}(this.context.getRequestOptionsForCall(r),s,i)}}const si="transactions";class ai{constructor(t){this.context=t}async getAll(e){return async function(e){const n=await t(e,{url:si,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:`${si}/${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:`${si}/${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:`${si}/${n}`,responseType:"json"});return Xt.parse(s.data).transactionHash}(this.context.getRequestOptionsForCall(r),i,s)}}const oi="wallet";class ci{constructor(t){this.context=t}async getBalance(e){return async function(e){const n=await t(e,{method:"get",url:oi,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:`${oi}/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:`${oi}/withdraw/nativetoken`,responseType:"json",params:{amount:n.toWeiString(),address:r.toHex()}});return ne.parse(i.data).transactionHash}(this.context.getRequestOptionsForCall(i),s,a)}}const di=["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 ui(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(di.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 li{constructor(t,e){ui(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 Xn(n),this.settlement=new Jr(n),this.transaction=new ai(n),this.stake=new _r(n),this.connectivity=new vr(n),this.status=new ei(n),this.wallet=new ci(n),this.stamp=new ti(n),this.storage=new ni(n),this.chequebook=new nr(n),this.cheque=new er(n),this.tag=new ii(n),this.pin=new Gr(n),this.grantee=new Hr(n),this.messaging=new Wr(n),this.feed=new Lr(n),this.soc=new Zr(n),this.data=new Cr(n),this.chunk=new rr(n),this.file=new Kr(n),this.collection=new mr(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 Vn(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 hi=4096;function pi(t){if(0===t.length)return[new Uint8Array(0)];const e=[];for(let n=0;n<t.length;n+=hi)e.push(t.slice(n,Math.min(n+hi,t.length)));return e}const fi=se.omit({appSecret:!0,connectedUntil:!0,stampPending:!0,chatBinding:!0}),yi=ae({type:ce("account-delta"),snapshot:oe.extend({connectedApps:de(fi)})}),gi=ue().min(1).max(100),wi=ue().regex(/^[0-9a-f]{8}$/),mi=he("type",[pe,yi,ae({type:ce("lease-request"),accountId:ue().length(40),batchId:ue().length(64),fromDeviceId:gi,requestId:wi}),ae({type:ce("lease-claim"),accountId:ue().length(40),batchId:ue().length(64),fromDeviceId:gi,requestId:wi}),ae({type:ce("lease-released"),accountId:ue().length(40),batchId:ue().length(64),partition:le().int().min(0),fromDeviceId:gi,requestId:wi.optional()}),ae({type:ce("presence"),accountId:ue().length(40),fromDeviceId:gi})]);class bi{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 vi{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=mi.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 Si=ae({version:le().int().nonnegative(),data:fe()});class ki{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 xi="swarm-id-storage-write",Ii=new Map;class Ai{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(xi,this.boundSameWindowHandler))}cleanupStorageEventListener(){"undefined"!=typeof window&&(this.boundStorageHandler&&(window.removeEventListener("storage",this.boundStorageHandler),this.boundStorageHandler=void 0),this.boundSameWindowHandler&&(window.removeEventListener(xi,this.boundSameWindowHandler),this.boundSameWindowHandler=void 0))}notifySameWindow(t){"undefined"!=typeof window&&window.dispatchEvent(new CustomEvent(xi,{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=Si.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=Si.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=(Ii.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 Ii.set(e,r),n}}const Ci="sealed:v1:",Ui="wrapping-keys",Pi="at-rest-v1";function Ei(){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(Ui)||s.result.createObjectStore(Ui)},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 $i(){return{async get(){const t=await Ei();try{const n=t.transaction(Ui,"readonly").objectStore(Ui);return await(e=n.get(Pi),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 Ei();try{return await new Promise((n,r)=>{const i=e.transaction(Ui,"readwrite"),s=i.objectStore(Ui);let a=t;const o=s.get(Pi);o.onsuccess=()=>{o.result?a=o.result:s.add(t,Pi)},i.oncomplete=()=>n(a),i.onerror=()=>r(i.error),i.onabort=()=>r(i.error)})}finally{e.close()}}}}function Bi(){let t;return{get:async()=>t,getOrAdd:async e=>(t??(t=e),t)}}let Di,Ti;function Oi(){return Di??(Di=async function(){if("undefined"==typeof indexedDB)return{store:Bi(),standsIn:!1};if(!indexedDB)return{store:Bi(),standsIn:!0};try{return(await Ei()).close(),{store:$i(),standsIn:!1}}catch{return{store:Bi(),standsIn:!0}}}()),Di}function Mi(){return Ti??(Ti=(async()=>{const{store:t}=await Oi(),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)})()),Ti.catch(()=>{Ti=void 0}),Ti}const Ri=new Map,Fi=new Map,qi=new Map;function Li(t){return"string"==typeof t&&t.startsWith(Ci)}async function Ki(t){const e=Fi.get(t);if(e)return e;const n=await Mi(),r=crypto.getRandomValues(new Uint8Array(12)),i=new Uint8Array(await crypto.subtle.encrypt({name:"AES-GCM",iv:r},n,(new TextEncoder).encode(t))),s=`${Ci}${ye(r)}${ye(i)}`;return Fi.set(t,s),Ri.set(s,t),s}const Ni=new Set;async function Hi(t){let e;try{e=await Mi()}catch{return void Ni.add(t)}try{const n=ge(t.slice(10)),r=(new TextDecoder).decode(await crypto.subtle.decrypt({name:"AES-GCM",iv:n.slice(0,12)},e,n.slice(12)));Ri.set(t,r),Fi.set(r,t)}catch{(await Oi()).standsIn&&Ni.add(t)}}function ji(t){return Ni.has(t)}async function Wi(t){const e=[];for(const n of t){if(!Li(n)||Ri.has(n))continue;let t=qi.get(n);t||(t=Hi(n).finally(()=>qi.delete(n)),qi.set(n,t)),e.push(t)}await Promise.all(e)}function zi(t){return Ri.get(t)}const Gi={AppSliceFullError:"upload-unavailable",PartitionContendedError:"partition-contended",PartitionLeaseLostError:"lease-lost",ReservedSlotError:"invalid-request",TimeoutError:"timeout"},Vi={AppSliceFullError:"app-slice-full"};function Ji(t){try{return new URL(t).pathname}catch{return}}function Zi(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 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=Ji(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 Gi){n.code=Gi[t.name];const e=Vi[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 Yi{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 _i=new WeakMap;async function Qi(t){if(!_i.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&&_i.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 Xi extends Error{constructor(t,e,n){super(`SOC upload failed: ${t} ${e} - ${n}`),this.name="SocUploadError",this.status=t,this.body=n}}function ts(t){return"stamper"===t.mode}function es(t){return"subsidised"===t.mode}function ns(t,e){return e?t=>e.stampChunkData(t):e=>Promise.resolve(t.stamp(e))}async function rs(t,e,n,r,i,s){const a=await e(r);await t.chunk.upload(a,n,i,s)}function is(t,e){const n=t.requestOptions;return{...n?.headers,...e?.headers}}async function ss(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 we("bee-rejected",`Subsidised chunk upload failed: ${s.status} ${s.statusText} - ${t}`,{status:s.status,beeMessage:t,url:Ji(s.url)})}return{reference:(await s.json()).reference}}async function as(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 rs(t,e,a.data,a.address,r,i),s(a.address)}})()))}async function os(t,e,n,r){const i=await t(r),a=s.Binary.concatBytes(y(i).toUint8Array(),n);await e.uploadChunk(a)}async function ds(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 os(t,e,s.data,s.address),r(s.address)}})()))}async function us(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?us(n,e):new m(n[0].address)}async function ls(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 ls(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 hs(t,e,n){return void 0!==n?.encryptionKey?async function(t,e,n){const r=!0===n?.encryptionKey?void 0:n?.encryptionKey,i=pi(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(es(t)){const e={deferred:n?.deferred};for(const n of o)await ss(t.gatewayUrl,n.data,e),l(n.address);return{reference:(await ls(a,async r=>{await ss(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 Qi(e),h={...n,tag:s,deferred:n?.deferred??!1},p=ns(r,i);let f;n?.webSocket&&(f=new Yi(e.url,{tag:s,concurrency:n.webSocket.concurrency}),await f.open());try{f?await ds(p,f,o,l):await as(e,p,o,h,n?.requestOptions,l,n?.httpConcurrency);return{reference:(await ls(a,async t=>{const r=await ke(t);u.push(r.toUint8Array()),f?await os(p,f,t,r.toUint8Array()):await rs(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=pi(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(es(t)){const e={deferred:n?.deferred};for(const n of i)await ss(t.gatewayUrl,n.data,e),o++,c();let r;return r=1===s.length?new m(s[0].address):await us(s,async n=>{await ss(t.gatewayUrl,n.data,e),a++,o++,c()}),{reference:r.toHex()}}{const{bee:e,stamper:r,workerPool:d}=t,u=n?.tag??await Qi(e),l={...n,tag:u,deferred:n?.deferred??!1},h=ns(r,d);for(const t of i)await rs(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 us(s,async t=>{await rs(e,h,t.data,t.address.toUint8Array(),l,n?.requestOptions),a++,o++,c()}),{reference:p.toHex(),tagUid:u}}}(t,e,n)}async function ps(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=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(es(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 Xi(s.status,`${s.statusText} (subsidised)`,t)}return{socAddress:h,encryptionKey:c}}{const{bee:e,stamper:r}=t,s=i?.tag??await Qi(e),a=r.stamp(h),u=y(a).toHex(),p=`${e.url}/soc/${d.toHex()}/${n.toHex()}?sig=${l.toHex()}`,f={...is(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 g=await fetch(p,{method:"POST",headers:f,body:o,signal:i?.requestOptions?.signal});if(!g.ok){const t=await g.text();throw new Xi(g.status,g.statusText,t)}return{socAddress:h,encryptionKey:c,tagUid:s}}}async function fs(t,e,n){if(es(t))return ss(t.gatewayUrl,e,{deferred:n?.deferred});{const{bee:r,stamper:i}=t,s=await ke(e),a=ns(i);return await rs(r,a,e,s.toUint8Array(),{deferred:n?.deferred??!1,pin:n?.pin,tag:n?.tag},n?.requestOptions),{reference:ye(s.toUint8Array())}}}function ys(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=ys(t,e);return s.Binary.keccak256(s.Binary.concatBytes(r.toUint8Array(),n.toUint8Array()))}function ws(t,e,n){const r=gs(t,e,n);return r[0]<<8|r[1]}const ms=2500,bs=3e4,vs=bs;class Ss extends Error{constructor(t="Partition lease was reclaimed by another device."){super(t),this.name="PartitionLeaseLostError"}}class ks 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 xs 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 Is=65536,As=16,Cs=2,Us=1e4,Ps=4096;function Es(t){const e=t<=31?2:4,n=Ps/e;return{counterByteSize:e,bucketsPerChunk:n,numUtilizationChunks:Is/n}}function $s(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>=Is)throw new Error(`Invalid bucket index: ${t} (must be 0-65535)`);const{bucketsPerChunk:n}=Es(e);return Math.floor(t/n)}function Ds(t,e,n){const{counterByteSize:r,bucketsPerChunk:i,numUtilizationChunks:s}=Es(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?Ks(c):Ls(c)}function Ts(t,e,n,r){const{counterByteSize:i,bucketsPerChunk:s,numUtilizationChunks:a}=Es(r);if(e<0||e>=a)throw new Error(`Invalid chunk index: ${e} (must be 0-${a-1})`);if(n.length!==Ps)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 Os{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 Ms(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 Rs(t){const{swarmEncryptionKey:e,batchId:n,chunkIndex:r,plaintext:i,claimedBuckets:s}=t;let a=t.priorNonce;for(;;){const t=await Ms(e,n,r,a),o=be(i,t).address.toUint8Array(),c=$s(o);if(!s.has(c))return s.add(c),{key:t,nonce:a,bucket:c,address:o};a++}}function Fs(t){const e=new Set;for(const n of t.chunks)!n.dirty&&n.contentHash&&e.add($s(s.Binary.hexToUint8Array(n.contentHash)));return e}async function qs(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 Qi(t),o={mode:"stamper",bee:t,stamper:e};return await fs(o,i.data,{deferred:!1,tag:a}),s}function Ls(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 Ks(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 Ns(t){return Math.pow(2,t-16)}function Hs(t,e,n=2){return t<Ws(e,n)}function js(t,e,n){return n+t+n*e}function Ws(t,e){const n=Ns(t);return Math.floor(n/e)-1}const zs=(()=>{let t=16;for(;Ws(t,2)<4;)t+=1;return t})();async function Gs(t,e,n,r){const i=await async function(t,e,n){const{cache:r}=n,{counterByteSize:i,bucketsPerChunk:s,numUtilizationChunks:a}=Es(e),o=await r.getAllChunks(t.toHex());if(o.length===a)try{const n=new Uint32Array(Is),r=[];for(const t of o)Ts(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(Is),d=[],u=new Uint32Array(s),l=2===i?Ks(u):Ls(u);for(let t=0;t<a;t++){const n=o.find(e=>e.chunkIndex===t);n?(Ts(c,t,n.data,e),d.push({index:t,contentHash:n.contentHash,lastUpload:n.lastAccess,dirty:!1,nonce:n.nonce})):(Ts(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 Os(n);for(const t of e){const e=$s(t.address.toUint8Array()),r=i.dataCounters[e];if(!Hs(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 Vs{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($s(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 Fs(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!==Is)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=Ns(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(Is),{numUtilizationChunks:r}=Es(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}=Es(n);for(const e of t)e.chunkIndex>=i||Ts(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 Vs(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: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=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 Ss}assignSlot(t){const e=this.reservedSlotFor(t);if(void 0!==e)return e;this.requireLiveLease();const n=$s(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 Ce(this.signer,this.batchId,t,this.assignSlot(t),e)}stampDataChunk(t,e){if(void 0!==this.reservedSlotFor(t))throw new ks;const n=$s(t);if(this.utilizationState.dataCounters[n]>=this.appSliceCapacity())throw new xs;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[$s(t)]}restampDataChunk(t,e,n){if(void 0!==this.reservedSlotFor(t))throw new ks;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 Ws(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=Fs(this.utilizationState);for(const t of this.lockSocs??[])e.add($s(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 Rs({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<Is&&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 Js=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=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=>!Be(t)&&void 0===t.partitionCount&&t.devices.length>0?{...t,partitionCount:2}:t)};function Zs(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=>Qs(_s(t))),postageStamps:t.postageStamps.map(Xs),settings:t.settings,accountNameAt:t.accountNameAt,defaultStampAt:t.defaultStampAt,settingsAt:t.settingsAt,lastModified:t.lastModified,partitionCount:t.partitionCount}}function Ys(t){return Be(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}:{...Zs(t),connectedApps:t.connectedApps.map(_s),access:t.access,encryptedSeed:t.encryptedSeed}}function _s(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 Qs(t){const{appSecret:e,connectedUntil:n,stampPending:r,...i}=t;return i}function Xs(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 ta(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)}function ea(t){return Array.isArray(t)?t.filter(ta):[]}function na(t){return void 0===t.signedOutAt}function ra(t){return na(t)?[t.derivationKey,...ea(t.connectedApps).map(t=>t.appSecret),...ea(t.postageStamps).map(t=>t.signerKey)].filter(t=>void 0!==t):[]}function ia(t){if(!na(t))return t;const e=t=>Li(t)?zi(t):void 0;if(ra(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:ea(t.connectedApps).map(t=>void 0===t.appSecret?t:{...t,appSecret:n(t.appSecret)}),postageStamps:ea(t.postageStamps).map(t=>({...t,signerKey:n(t.signerKey)}))}}async function sa(t,e){const n=e.get(t.id),r=void 0!==n&&function(t){return ra(t).some(t=>Li(t)&&ji(t))}(n);if(!na(t))return r?n:t;if(r&&await async function(){return(await Oi()).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(ea(t.connectedApps).map(async t=>void 0===t.appSecret?t:{...t,appSecret:await n(t.appSecret)})),postageStamps:await Promise.all(ea(t.postageStamps).map(async t=>({...t,signerKey:await n(t.signerKey)})))}}(t,Ki)}const aa={seal:(t,e)=>{const n=new Map(ea(e).map(t=>[t.id,t]));return Promise.all(t.map(t=>sa(t,n)))},open:t=>Array.isArray(t)?t.map(t=>ta(t)?ia(t):t):t,prime:t=>Wi(ea(t).flatMap(ra).filter(t=>Li(t)))};function oa(){return t={key:$e,currentVersion:1,parsers:{1:Js},serializer:Ys,loggerName:"AccountsStorage",sealing:aa},new Ai({...t,storage:new ki});var t}function ca(){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 da(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 ua(t){return la(da(t,t.id.toHex(),Date.now()))}function la(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(_s),postageStamps:n.postageStamps.map(Xs)};var n;return{...e,connectedApps:e.connectedApps.map(t=>{const{chatBinding:e,...n}=Qs(t);return n})}}function ha(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 pa(t){return{topic:await Ae(t,"swarm-id/account-bus/topic/v1"),encryptionKey:await Te(t,"swarm-id/account-bus/encryption/v1")}}const fa=2e4;class ya{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 ga=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 ma(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 ba=he("kind",[ae({kind:ce("offer"),sdp:ue()}),ae({kind:ce("answer"),sdp:ue()}),ae({kind:ce("ice"),candidate:fe()})]);function va(){return{remoteDescriptionSet:!1,pendingCandidates:[]}}class Sa{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=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,va()),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 ma(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=ba.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 ka{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 xa="AES-GCM",Ia=6e5,Aa="swarm-id-seed-encryption-v1";function Ca(){const t=new Uint8Array(32);return crypto.getRandomValues(t),t}async function Ua(t,e){const n=new Uint8Array(12);crypto.getRandomValues(n);const r=await crypto.subtle.encrypt({name:xa,iv:n},e,t),i=new Uint8Array(12+r.byteLength);return i.set(n),i.set(new Uint8Array(r),12),ye(i)}async function Pa(t,e){const n=ge(t),r=n.slice(0,12),i=n.slice(12),s=await crypto.subtle.decrypt({name:xa,iv:r},e,i);return new Uint8Array(s)}async function Ea(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:xa,length:256},!1,["encrypt","decrypt"])}function $a(t){return Ea(t,new Uint8Array,Aa)}function Ba(t,e){return Ea(t,e,Aa)}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:xa,length:256},!1,["encrypt","decrypt"])}const Ta=Ia,Oa="chunks",Ma="metadata";class Ra{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(Oa)&&e.deleteObjectStore(Oa),e.objectStoreNames.contains(Ma)&&e.deleteObjectStore(Ma);e.createObjectStore(Oa,{keyPath:["batchId","chunkIndex"]}).createIndex("batchId","batchId",{unique:!1}),e.createObjectStore(Ma,{keyPath:"batchId"})}})}async getChunk(t,e){return await this.open(),new Promise((n,r)=>{const i=this.db.transaction([Oa],"readonly").objectStore(Oa).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([Oa],"readwrite").objectStore(Oa),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([Oa],"readonly").objectStore(Oa).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([Oa,Ma],"readwrite"),i=r.objectStore(Oa),s=r.objectStore(Ma),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([Oa],"readwrite"),s=i.objectStore(Oa),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([Ma],"readonly").objectStore(Ma).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([Ma],"readwrite").objectStore(Ma).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 Fa(t){return t.publicKey().address().toHex().toLowerCase()}function qa(t,e){!function(t){const e=qe+Le,n=qe+Ke;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=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(Fa(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=ge(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 La(t){return y(t).toHex()}const Ka=1/3,Na=ae({count:le().int().nonnegative(),windowStart:le(),windowCount:le().int().nonnegative(),buckets:Ne(ue(),le().int().nonnegative())});function Ha(t,e){return e>=t.windowStart&&e-t.windowStart<6e4}function ja(t,e){return new we("upload-unavailable",e,{reason:t})}function Wa(t,e){return t.count>=1e4?ja("app-stamp-count","This app has used its count limit of 10000 stamps on this stamp."):Ha(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 za(t,e){const n=Wa(t,e.now);if(n)return n;const r=(i=e.laneCapacity,Math.floor(i*Ka));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 Ga(t,e){const n=Ha(t,e);return{...t,windowStart:n?t.windowStart:e,windowCount:n?t.windowCount+1:1}}function Va(t,e,n){return{...Ga(t,n),count:t.count+1,buckets:{...t.buckets,[e]:(t.buckets[e]??0)+1}}}const Ja=ae({slot:le().int().nonnegative(),timestampMs:le().int().nonnegative()}),Za=ae({partition:le().int().nonnegative(),partitionCount:le().int().positive(),slots:Ne(ue(),Ja)});function Ya(t){return{partition:t.partition,partitionCount:t.partitionCount,slots:{}}}function _a(t,e){if(null===t)return Ya(e);try{const n=Za.safeParse(JSON.parse(t));return n.success&&n.data.partition===e.partition&&n.data.partitionCount===e.partitionCount?n.data:Ya(e)}catch{return Ya(e)}}const Qa="Stamp worker pool is terminated";class Xa{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 Xa(o,d,e)}async stampChunkData(t,e=Date.now()){if(0===this.workers.length)throw new Error(Qa);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(Qa));t.pending.clear()}this.workers=[]}}function to(t){const e=!1!==t?.encrypt;return{content:e,manifest:e&&!1!==t?.encryptManifest}}function eo(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 no(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 ro(t,e=Date.now()){return function(t,e=Date.now()){const n=io(t,e);return void 0!==n&&n<=0}(t,e)?"stamp-expired":!1===t.usable||!1===t.exists?"stamp-not-usable":void 0}function io(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 so(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 ao(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=ze(e.chatBinding,c.chatBinding,e.appUrl,n);a.set(r(o),u===e.chatBinding?d:{...d,chatBinding:u})}return Array.from(a.values())}function oo(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 co(t,e){const n=`swarm-write-${t}`;return"undefined"!=typeof navigator&&navigator.locks?navigator.locks.request(n,{mode:"exclusive"},e):e()}const uo="";function lo(t){const e=s.Binary.keccak256((new TextEncoder).encode(t));return s.Binary.uint8ArrayToHex(e.slice(0,8))}function ho(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 po(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 fo(t){const{bee:e,backupSigner:n,swarmEncryptionKey:r,batchId:i,partition:s}=t,a=ys(i,s),o=n.publicKey().address();try{const t=await Ge(e,o,a,r),n=Ve.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 yo(t){const{bee:e,stamper:n,backupSigner:r,swarmEncryptionKey:i,batchId:s,partition:a,payload:o}=t,c=ys(s,a),d=(new TextEncoder).encode(JSON.stringify(o)),u={mode:"stamper",bee:e,stamper:n};await ps(u,r,c,d,{encryptionKey:i})}async function go(t){const e=t.now??Date.now,n=t.wait??Je,r=()=>Ze(fo(t),t.readTimeoutMs??ms,"lock read timed out").catch(()=>{}),i=t.skipInitialRead?void 0:await r(),s=e();if(i&&i.holderDeviceId!==t.deviceId&&i.holderDeviceId!==uo&&i.leasedUntil>s)return{outcome:"blocked",payload:i};if(t.shouldAbort?.())return{outcome:"aborted",payload:i};const a=t.generation??{timestampMs:s,tiebreaker:lo(t.deviceId)},o={holderDeviceId:t.deviceId,generation:a,acquiredAt:s,leasedUntil:s+t.ttlMs};await yo({...t,payload:o}),await n(t.guardMs);const c=await r();return c?po(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 wo=ms,mo=vs;function bo(t){return Math.floor(t/vs)}function vo(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 So(t,e,n,r,i){const a=vo(t,e,n,r);return s.Binary.keccak256(s.Binary.concatBytes(a.toUint8Array(),i.toUint8Array()))}function ko(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 xo(t,e,n,r){const i=ko(t,e,n);return s.Binary.keccak256(s.Binary.concatBytes(i.toUint8Array(),r.toUint8Array()))}async function Io(t){const e=vo(t.batchId,t.partition,t.deviceId,t.epochBucket),n=t.backupSigner.publicKey().address(),r=So(t.batchId,t.partition,t.deviceId,t.epochBucket,n),i={deviceId:t.deviceId,generation:t.generation,...void 0!==t.leasedUntil?{leasedUntil:t.leasedUntil}:{}};await Ao({bee:t.bee,stamper:t.stamper,backupSigner:t.backupSigner,swarmEncryptionKey:t.swarmEncryptionKey,partition:t.partition,identifier:e,address:r,payload:i})}async function Ao(t){const e=(new TextEncoder).encode(JSON.stringify(t.payload)),n={mode:"stamper",bee:t.bee,stamper:t.stamper},r=t.stamper;r instanceof Vs?await r.withIntentSocSlot(t.address,t.partition,()=>ps(n,t.backupSigner,t.identifier,e,{encryptionKey:t.swarmEncryptionKey})):await ps(n,t.backupSigner,t.identifier,e,{encryptionKey:t.swarmEncryptionKey})}const Co=t=>t instanceof Error&&/status code 5\d\d/.test(t.message);async function Uo(t){const e=()=>Ze(Ge(t.bee,t.owner,t.identifier,t.swarmEncryptionKey),t.timeoutMs??wo,"intent read timed out");for(let n=0;n<2;n++)try{const n=await e(),r=Ye.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(Co(e)&&0===n&&!1!==t.retryOn5xx)continue;const r=e instanceof _e;return void console.debug(`[partition-intent] ${t.logLabel}: ${r?`TIMEOUT (>${t.timeoutMs??wo}ms)`:`missing (${e instanceof Error?e.message:String(e)})`}${Co(e)?" after 5xx retry":""} — treated as no-intent`)}}async function Po(t){return Uo({bee:t.bee,owner:t.backupSigner.publicKey().address(),identifier:vo(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 Eo(t){return Uo({bee:t.bee,owner:t.backupSigner.publicKey().address(),identifier:ko(t.batchId,t.partition,t.epochBucket),swarmEncryptionKey:t.swarmEncryptionKey,timeoutMs:t.timeoutMs,logLabel:`occupancy p=${t.partition} bucket=${t.epochBucket}`})}const $o=new Uint8Array(64),Bo=ae({counters:Qe(Uint32Array).refine(t=>t.length===Is,{message:"counters must have 65536 entries"})});function Do(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 To=vs,Oo=Symbol("state-pointer-read-timed-out");function Mo(t){return Math.floor(t/To)}const Ro=ae({referenceHex:ue()});function Fo(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 qo(t){const e=Fo(Do(t.batchId,t.partition),Mo(t.nowMs)),n=t.backupSigner.publicKey().address(),r=Lo(e,n),i=(new TextEncoder).encode(JSON.stringify({referenceHex:t.referenceHex})),s={mode:"stamper",bee:t.bee,stamper:t.stamper};t.stamper instanceof Vs?await t.stamper.withIntentSocSlot(r,t.partition,()=>ps(s,t.backupSigner,e,i,{encryptionKey:t.swarmEncryptionKey})):await ps(s,t.backupSigner,e,i,{encryptionKey:t.swarmEncryptionKey})}function Lo(t,e){return s.Binary.keccak256(s.Binary.concatBytes(t.toUint8Array(),e.toUint8Array()))}function Ko(t,e,n,r){return Lo(Fo(Do(t,e),Mo(r)),n)}async function No(t){const e=Do(t.batchId,t.partition),n=new Set,r=Mo(t.nowMs);if(n.add(r),n.add(r-1),void 0!==t.holderLeasedUntilMs){const e=Mo(t.holderLeasedUntilMs);for(let r=Mo(t.holderLeasedUntilMs-bs)-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=Fo(e,n);try{const e=await Ze(Ge(t.bee,t.owner,r,t.swarmEncryptionKey),2500,"state-pointer read timed out"),n=Ro.safeParse(JSON.parse((new TextDecoder).decode(e.payload)));return n.success?n.data:void 0}catch(t){return t instanceof _e?Oo:void 0}}));for(let t=0;t<s.length;t++){const e=s[t];if(void 0!==e&&e!==Oo){return{pointer:e,inconclusive:s.slice(0,t).some(t=>t===Oo)}}}return{pointer:void 0,inconclusive:s.some(t=>t===Oo)}}async function Ho(t,e,n){const r=await Xe(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 Wo(t,e){let n=be(t);for(;e.has($s(n.address.toUint8Array()));)n=be(t);const r=n.address.toUint8Array();return e.add($s(r)),{address:r,reference:n.reference.toUint8Array(),data:n.data}}function zo(t){for(let e=0;e<t.length;e++)if(0!==t[e])return!1;return!0}class Go{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 Go({...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)=>Ze(fo({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===uo){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=bo(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 Po({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-mo)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=bo(this.now()),n=[e,e-1];return Promise.all(Array.from({length:t}).flatMap((t,e)=>n.map(async t=>({partition:e,occupancy:await Eo({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=ho(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(Is),isReadOnly:!1};const n=this.now(),r=ho(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=${ho(this.opts.deviceId,e)} liveHolders=${this.holders.size} partitionCount=${e}`),void 0===c?{partition:void 0,partitionCount:e,localCounter:new Uint32Array(Is),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 No({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 Vs?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 No({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(Is),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,g=new m(y).toUint8Array();if(void 0!==e&&y===e){const{numUtilizationChunks:t}=Es(c);return{referenceHex:y,unchanged:!0,references:await Ho(n,g,t).catch(()=>{})}}const w=new Uint32Array(Is),b=[$s(g.slice(0,32))];let v=[];try{const{numUtilizationChunks:t}=Es(c);v=await Ho(n,g,t);const e=await Promise.all(v.map((t,e)=>jo(t)?void 0:Xe(n,s.Binary.uint8ArrayToHex(t)).then(n=>({i:e,ref:t,data:n}))));for(const t of e)void 0!==t&&(Ts(w,t.i,t.data,c),b.push($s(t.ref.slice(0,32))));Bo.parse({counters:w})}catch(t){return console.warn(`[partition-state] reading partition ${o} counter failed; degrading to read-only:`,t),{unchanged:!1,readFailed:!0}}return{localCounter:w,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(Is),isReadOnly:!0};const u=d.unchanged&&i instanceof Vs?i.buildLeaseLocalCounter():d.localCounter??new Uint32Array(Is),l={timestampMs:this.now(),tiebreaker:lo(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=bo(t.now),r=n-1;await Io({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 Po({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(po(n.generation,t.generation)<0)return{rivalId:e.rivalId,reason:"earlier-intent"}}else if(n.leasedUntil>t.now-mo){if(t.releasedGeneration&&po(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 Je(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(Is),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:bs,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(Is),isReadOnly:!0};!d.unchanged&&d.referenceHex&&i instanceof Vs&&(await i.setSyncedReference(e,d.referenceHex),d.stateBuckets&&await i.setProtectedStateBuckets(e,d.stateBuckets)),this.publishedReferences=d.references,this.publishedCounter=u.slice(),this.lastFullPublishEpoch=bo(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:bs,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=bo(n);return(await Promise.all(r.flatMap(e=>[i,i-1].map(n=>Po({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-mo&&po(r.generation,e)<0&&this.beaconOutranksRelease(t,r.generation))}beaconOutranksRelease(t,e){const n=this.releasedPartitions.get(t);return void 0===n||po(e,n)>0}async occupancyBeaconBeatsUs(t,e){const n=this.now(),r=bo(n);return(await Promise.all([r,r-1].map(e=>Eo({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-mo&&po(r.generation,e)<0&&this.beaconOutranksRelease(t,r.generation))}async publishPresenceBeacon(t,e,n){const{stamper:r}=this.requireWriteContext(),i=bo(this.now());try{await Io({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=ko(t.batchId,t.partition,t.epochBucket),n=t.backupSigner.publicKey().address(),r=xo(t.batchId,t.partition,t.epochBucket,n),i={deviceId:t.deviceId,generation:t.generation,leasedUntil:t.leasedUntil};await Ao({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 fo(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===uo)return e("already released");if(n.holderDeviceId!==t.deviceId)return e("a peer holds the partition");if(po(n.generation,t.releasedGeneration)>0)return e("a newer own claim exists (successor re-acquired)")}const r={holderDeviceId:uo,generation:t.releasedGeneration,acquiredAt:t.acquiredAt,leasedUntil:e()};return await yo({...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=bo(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}=Es(i),y={mode:"stamper",bee:e,stamper:n},g=c.publicKey().address(),w=n instanceof Vs?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<Is;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=>!jo(Ds(o,t,i))),k=new Set(S),x=b?u.map(t=>t.slice()):v.map(()=>$o.slice()),I=new Set([ws(r,a,g),...w?.getCleanChunkBuckets()??[]]);if(b)for(let t=0;t<f;t++)k.has(t)||jo(x[t])||I.add($s(x[t].slice(0,32)));const A=p;for(const t of[A,A-To])I.add($s(Ko(r,a,g,t)));const C=bo(A);for(const t of[C,C-1])I.add($s(xo(r,a,t,g))),void 0!==h&&I.add($s(So(r,a,h,t,g)));const U=S.map(t=>{const e=Wo(Ds(o,t,i),I);return x[t]=e.reference,w?.markReservedUtilizationChunk(e.address,a),{data:e.data}}),P=Wo(s.Binary.concatBytes(...x),I);w?.markReservedUtilizationChunk(P.address,a);const E=s.Binary.uint8ArrayToHex(P.reference),$=[...S.map(t=>$s(x[t].slice(0,32))),$s(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 B=Date.now();await Promise.all([...U.map(t=>fs(y,t.data,{deferred:!1})),fs(y,P.data,{deferred:!1})]),await qo({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()-B}`),w?.clearReservedUtilizationChunks();const D=x.filter(t=>!jo(t)).map(t=>$s(t.slice(0,32)));return D.push($s(P.address)),{referenceHex:E,stateBuckets:D,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 Vs&&(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 qo({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=bo(r),s=new Set([ws(n,t,e),$s(Ko(n,t,e,r)),$s(xo(n,t,i,e)),$s(So(n,t,this.opts.deviceId,i,e))]);for(const t of this.publishedReferences)if(!zo(t)&&s.has($s(t.slice(0,32))))return!0;if(void 0!==this.lastReferenceHex){const t=new m(this.lastReferenceHex).toUint8Array().slice(0,32);if(s.has($s(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()+bs},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 Vo extends Error{constructor(t="All partitions are held by other devices.",e){super(t),this.accountId=e,this.name="PartitionContendedError"}}function Jo(t,e,n){return void 0!==t&&t.holderDeviceId!==n&&t.holderDeviceId!==uo&&t.leasedUntil>e}class Zo{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 Vo(void 0,this.deps.accountId);return}try{await Ze(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 Go.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:Us;if(Date.now()+i>t)throw new Vo("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,Us))),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<Us)return;let e;try{e=await fo({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(Jo(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===uo){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(bs),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)},Us))}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 fo({bee:this.deps.bee,backupSigner:this.deps.backupSigner,swarmEncryptionKey:this.deps.swarmEncryptionKey,batchId:new p(this.deps.batchId),partition:e});n=Jo(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(bs),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>To&&(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 co(this.deps.batchId,async()=>{try{return await t()}finally{await(this.deps.flushStamperState?.())}})}lock(t){return co(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 Yo=32;class _o{constructor(t,e){if(this.start=t,this.level=e,e<0||e>Yo)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 _o(0n,Yo);const n=t-e;let r=1n,i=0;for(;i<Yo&&(r<n||t/r!==e/r);)r<<=1n,i++;return new _o(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 _o(e,this.level+1)}left(){return new _o(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 _o(r,e)}isLeft(){return 0n===(this.start&this.length())}toString(){return`${this.start}/${this.level}`}}class Qo{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 _o(t,0)).catch(()=>{}),[r,i]=await Promise.all([n,this.findAtEpoch(t,new _o(0n,Yo),void 0)]);if(r)return r;if(i)return i;try{if(void 0===await this.getEpochChunk(t,new _o(0n,Yo)))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 _o(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 _o(0n,Yo),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 Ge(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 _o(s,0));if(e)return e}catch{}if(0n===s)break;s--}}(t,e,(t,e)=>this.getEpochChunk(t,e))}}class Xo{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 _o(e.lastEpoch.start,e.lastEpoch.level).next(e.lastTimestamp,t)}if(!r||!ts(r))return new _o(0n,Yo);const i=this.signer.publicKey().address(),s=new Qo(r.bee,this.topic,i,n),a=await s.findAtWithMetadata(t);return a?a.epoch.next(a.timestamp,t):new _o(0n,Yo)}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 ps(r,this.signer,a,c,{encryptionKey:i,deferred:!1})).socAddress}}function tc(t){return new Qo(t.bee,t.topic,t.owner,t.encryptionKey)}class ec{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 nc{constructor(t,e,n){this.syncFinder=new ec(t,e,n)}async findAt(t,e=0n,n){return this.syncFinder.findAt(t,e,n)}}class rc{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 ps(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 ic(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 sc=256,ac=new Map,oc="swarm-id-roster-len";function cc(t,e){return`${t}:${e.toHex()}`}function dc(t){const e=ac.get(t);if(void 0!==e)return e;if("undefined"==typeof localStorage)return 0;let n;try{n=localStorage.getItem(`${oc}:${t}`)}catch{return 0}const r=null===n?0:Number.parseInt(n,10),i=Number.isInteger(r)&&r>0?Math.min(r,sc):0;return ac.set(t,i),i}function uc(t,e){const n=Math.min(e,sc);if(!(n<=dc(t))&&(ac.set(t,n),"undefined"!=typeof localStorage))try{localStorage.setItem(`${oc}:${t}`,`${n}`)}catch{}}const lc=ms,hc=Symbol("roster-read-inconclusive");class pc extends Error{constructor(){super("roster scan inconclusive: cannot confirm the roster is empty"),this.name="RosterScanInconclusiveError"}}function fc(t){return ht.fromString(`swarm-id-roster-v1:${t}`)}async function yc(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 Ze(t.bee.soc.makeReader(t.owner).download(e),lc,"roster read timed out")).payload.toUint8Array()}catch(r){if(ic(r))return;const i=await async function(t){const e=`${t.bee.url}/soc/${t.owner.toHex()}/${t.identifier.toHex()}`;try{const t=await Ze(fetch(e),lc,"roster /soc probe timed out");return t.ok?new Uint8Array(await t.arrayBuffer()):404!==t.status?hc:404===(await t.json()).code?void 0:hc}catch{return hc}}({bee:t.bee,owner:t.owner,identifier:e});if(!(i instanceof Uint8Array))return i;n=i}try{r=await Ze(Xe(t.bee,new m(n).toHex()),lc,"roster read timed out")}catch(t){return ic(t)?void 0:hc}try{return tn.parse(JSON.parse((new TextDecoder).decode(r)))}catch{return}}async function gc(t){const e=fc(t.accountId),n=cc(t.accountId,t.owner),r=dc(n);let i=[],s=0;for(let n=0;n<sc;){const a=n<r?r-n:Math.min(r>0?2:16,sc-n),o=Array.from({length:a},(t,e)=>BigInt(n+e));let c=await Promise.all(o.map(n=>yc({bee:t.bee,topic:e,owner:t.owner,index:n})));if(!c.some(wc)&&c.some(t=>t===hc)&&(c=await Promise.all(o.map((n,r)=>c[r]===hc?yc({bee:t.bee,topic:e,owner:t.owner,index:n}):c[r]))),c.forEach((t,e)=>{wc(t)&&(i=so(i,[t]),s=n+e+1)}),!c.some(wc)){if(0===i.length&&c.some(t=>t===hc))throw new pc;break}n+=a}return i.length>0&&uc(n,s),i}function wc(t){return void 0!==t&&t!==hc}async function mc(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=fc(t.accountId),{next:n}=await new ec(t.bee,e,t.owner).findAt(0n);if(!ts(t.target))return;const r=(new TextEncoder).encode(JSON.stringify(t.device)),i=await hs(t.target,r,{encryptionKey:ge(t.encryptionKey)}),s=new m(i.reference).toUint8Array(),a=new rc(t.bee,e,t.accountKey);a.setState({nextIndex:n}),await a.update(s,t.target.stamper),uc(cc(t.accountId,t.owner),Number(n)+1)}(t)}const bc=ae({appSessionDuration:le().optional()}),vc=t=>ae({value:t,at:le()}),Sc=ae({version:ce(1),accountId:ue().length(40),deviceId:ue(),timestamp:le(),connectedApps:de(se),postageStamps:de(en),accountName:vc(ue()),defaultPostageStampBatchID:vc(ue().length(64).optional()),settings:vc(bc.optional()),accountPublicKey:ue(),accountCreatedAt:le(),partitionCount:le().int().min(1).default(1)});function kc(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 xc(t,e){return ht.fromString(`swarm-id-devstate-v1:${t}:${e}`)}async function Ic(t){const e=xc(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(_s),postageStamps:s.postageStamps.map(Xs),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 hs(t.target,a,{encryptionKey:ge(t.encryptionKey)}),c=o.chunkAddresses??[],d=new m(o.reference).toUint8Array(),u=new Xo(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 Ac(t){const e=await Ic({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 mc({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 Cc(t){const e=xc(t.accountId,t.deviceId),n=new Qo(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 Sc.parse(e)}(await Xe(t.bee,new m(r).toHex()))}function Uc(t,e){return e.at>=t.at?e:t}function Pc(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=ao(r,e.connectedApps,n),i=oo(i,e.postageStamps),s=Uc(s,e.accountName),a=Uc(a,e.defaultPostageStampBatchID),o=Uc(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 Ec="swarm-id-device-id";function $c(){const t=localStorage.getItem(Ec);if(t)return t;const e=crypto.randomUUID();return localStorage.setItem(Ec,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 Dc(){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 Tc=Object.entries({deviceId:"all",createdAt:"all",name:"all",nameUpdatedAt:"all",removedAt:"all",lastSignedInAt:"all"}),Oc=18e5;function Mc(t,e,n){const r=e-n;return t.filter(t=>!t.removedAt&&(t.lastSignedInAt??0)>=r).map(t=>t.deviceId)}function Rc(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 nn(d.derivationKey),g=await Ae(y,Ue),w=new I(g).publicKey().address(),{state:m,tracker:b}=await Gs(l,f,h.depth,{cache:a}),v=function(t,e,n=2){const r=Ws(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:w,encryptionKey:ge(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=Fs(t);if(c)for(const t of c)u.add(t);const l=r instanceof Vs;for(const e of d){const c=t.chunks[e],d=Ds(t.dataCounters,e,t.batchDepth),h=await Rs({swarmEncryptionKey:i,batchId:t.batchId,chunkIndex:e,plaintext:d,priorNonce:c.nonce,claimedBuckets:u});l&&r.markReservedUtilizationChunk(h.address);try{const i=await qs(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:ge(y),cache:a,tracker:b,reservedBuckets:t instanceof Vs?t.getProtectedBuckets():void 0}),t.flush&&await t.flush()});return Ze(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 nn(e.derivationKey);return{snapshot:da(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),g=y.publicKey().address(),w=await i.getStamper(h.batchID,{owner:g,encryptionKey:ge(l)});if(!w){const t=`Cannot create stamper for batch ${h.batchID.toHex()}`;return console.error(`[SyncCoordinator ${a()}] ${t}`),{status:"error",error:t}}if(!(w instanceof Vs)){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 Zo({bee:e,batchId:h.batchID.toHex(),stamper:w,deviceId:$c(),accountId:t,knownDeviceIds:()=>[...new Set([...Mc(n.getAccount(new r(t))?.devices??[],Date.now(),Oc),...c?.()??[]])],backupSigner:y,swarmEncryptionKey:ge(l),partitionCount:p,mode:"oneshot"});console.log(`[SyncCoordinator ${a()}] Starting sync for ${t} bee.url=${e.url}`);const b=$c(),v=u.metadata.devices.find(t=>t.deviceId===b)??{deviceId:b,name:Dc(),createdAt:Date.now(),lastSignedInAt:Date.now()},S=kc(u);try{const n=await Ze(m.withWrite(n=>Ac({bee:e,accountId:t,device:v,accountKey:y,owner:g,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 Vo?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 Fc(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 qc=new Map;async function Lc(t){const e=`${t.accountId}:${t.derivationKey}`,n=qc.get(e);if(n)return n;const r=async function(t){const e=await nn(t.derivationKey),n=await Ae(e,Ue),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=>Cc({bee:t.bee,accountId:t.accountId,deviceId:e.deviceId,owner:r}).catch(()=>{})))).filter(t=>void 0!==t);if(0===s.length)return;const a=Pc(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(()=>{qc.delete(e)});return qc.set(e,r),r}async function Kc(t){try{const e=await Lc({bee:t.bee,derivationKey:t.derivationKey,accountId:t.accountId});if(!e)return await async function(t){const e=await nn(t.derivationKey),n=new I(await Ae(e,Ue)).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 Nc="swarm-id-first-party";function Hc(){try{if("undefined"==typeof window||window.self!==window.top)return;localStorage.setItem(Nc,"1")}catch{}}function jc(){try{return null!==localStorage.getItem(Nc)}catch{return!1}}const Wc="0x45a1502382541cd610cc9068e88727426b696293";function zc(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:Wc}const Gc=new RegExp("^[0-9a-f]{64}$");function Vc(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 Jc(t,e,n=Wc){try{const r=function(t){const e=(t.startsWith("0x")?t.slice(2):t).toLowerCase();if(!Gc.test(e))throw new Error(`Invalid batch ID: ${t}`);return e}(e),[i,s,a]=await async function(t,e){return(await sn(t,e.map(t=>({method:"eth_call",params:[{to:t.to,data:t.data},"latest"]})),{timeoutMs:an})).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:Vc(s),lastPrice:Vc(a)}}}catch{return{status:"error"}}}function Zc(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(rn))}async function Yc(t,e,n=Wc){const r=await async function(t,e,n=Wc){const r=await Jc(t,e,n);return"found"===r.status?r.state:void 0}(t,e,n);if(void 0!==r)return Zc(r)}const _c=864e5,Qc=7*_c;function Xc(t){return t?.appSessionDuration??Qc}const td=32;function ed(t){if(32!==t.length)throw new Error("Private key must be 32 bytes");const e=cn.getPublicKey(t,!1);return{x:e.slice(1,33),y:e.slice(33)}}function nd(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!==td||n.length!==td)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),cn.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 rd(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 id=rd;function sd(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=cn.ProjectivePoint.fromHex(t).toRawBytes(!1);return{x:n.slice(1,33),y:n.slice(33)}}function ad(t,e){if(t.length!==td||e.length!==td)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 od(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 cd(t){const e=(new TextDecoder).decode(t),n=JSON.parse(e),r=[];for(const[t,e]of Object.entries(n.entries))r.push({lookupKey:ge(t),encryptedAccessKey:ge(e.reference)});return r}function dd(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 ud=65,ld=(new TextEncoder).encode("act-grantee-list");function hd(t){const e=s.Binary.concatBytes(t,ld);return s.Binary.keccak256(e)}function pd(t,e){const n=function(t){const e=new Uint8Array(t.length*ud);for(let n=0;n<t.length;n++){const r=n*ud;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 rd(t,hd(e))}(n,e)}function fd(t,e){const n=function(t,e){const n=hd(e);return id(t,n)}(t,e);return function(t){if(0===t.length)return[];if(t.length%ud!==0)throw new Error(`Invalid grantee list length: ${t.length} is not a multiple of 65`);const e=t.length/ud,n=[];for(let r=0;r<e;r++){const e=r*ud;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+ud);n.push({x:i,y:s})}return n}(n)}const yd=BigInt("9223372036854775807"),gd=new TextEncoder,wd="encryptedglref";let md=0;function bd(t){return(yd-BigInt(t)).toString()}function vd(t){const e=BigInt(t);return Number(yd-e)}function Sd(t,e,n,r){const i=bd(e),s=ge(n),a=r?{[wd]:r}:void 0;t.addFork(gd.encode(i),s,a)}function kd(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:vd(n.fullPathString),metadata:{actReference:ye(n.targetAddress),encryptedGranteeListRef:n.metadata?.[wd]}}}async function xd(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=ge(s.reference),s}(t,!0);return{rootReference:n.reference,tagUid:n.tagUid}}function Id(t,e){return z.unmarshalFromData(t,e)}async function Ad(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 Cd(){const t=Math.floor(Date.now()/1e3);return t<=md?(md+=1,md):(md=t,t)}function Ud(t){return Array.isArray(t)?t:[t]}function Pd(t,e){for(const n of Ud(e)){const e=ed(n),r=nd(n,e.x,e.y),i=dd(t,r.lookupKey);if(i)return{privateKey:n,derived:r,entry:i}}throw new Error("Cannot find publisher entry in ACT")}function Ed(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 $d(t,e,n,r,i,s,a){const o=dn(),c=rd(e,o),d=ed(n),u=[],l=nd(n,d.x,d.y);u.push({lookupKey:l.lookupKey,encryptedAccessKey:rd(o,l.accessKeyDecryptionKey)});for(const t of r){const e=nd(n,t.x,t.y);u.push({lookupKey:e.lookupKey,encryptedAccessKey:rd(o,e.accessKeyDecryptionKey)})}const h=od(u),p=!0===i?.beeCompatible,f=await hs(t,h,{encryptionKey:!p||void 0,pin:i?.pin,deferred:i?.deferred,tag:i?.tag,requestOptions:s}),y=pd(r,n),g=await hs(t,y,{encryptionKey:!0,pin:i?.pin,deferred:i?.deferred,requestOptions:s}),w=Cd(),m=new z;Sd(m,w,f.reference,g.reference);const b=await xd(m,async(e,n)=>hs(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=ad(d.x,d.y);return{encryptedReference:ye(c),historyReference:v,granteeListReference:g.reference,publisherPubKey:ye(k),actReference:f.reference,tagUid:S}}async function Bd(t,e,n,r,i,s,a){const o=sd(ge(r)),c=Id(await Xe(t,n,void 0,void 0,a),ge(n));await Ad(c,async e=>Xe(t,e,void 0,void 0,a));const d=s?function(t,e){const n=bd(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:vd(t.fullPathString),metadata:{actReference:ye(t.targetAddress),encryptedGranteeListRef:t.metadata?.[wd]}};const i=r[r.length-1];return{timestamp:vd(i.fullPathString),metadata:{actReference:ye(i.targetAddress),encryptedGranteeListRef:i.metadata?.[wd]}}}(c,s):kd(c);if(!d)throw new Error("No ACT entry found in history");const u=d.metadata.actReference,l=cd(await Xe(t,u,void 0,void 0,a));for(const t of Ud(i)){const n=ed(t);for(const r of[o,n]){const n=nd(t,r.x,r.y),i=dd(l,n.lookupKey);if(!i)continue;const s=id(i.encryptedAccessKey,n.accessKeyDecryptionKey);return Ed(id(ge(e),s))}}throw new Error("Access denied: no ACT entry found for this key")}function Dd(t){return sd(ge(t))}const Td="index.bin";function Od(t){return da(t,t.id.toHex(),t.lastModified??t.createdAt)}function Md(t){return{version:1,accountId:t.accountId,deviceId:"",timestamp:t.timestamp,...kc(t)}}function Rd(){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 Fd=new Map;function qd(){return new we("not-authenticated","This session was ended from the account. Connect again to write.")}class Ld{get stampRefusal(){return this.stampLifetime&&ro(this.stampLifetime)}get beeApiUrl(){return this.siteBeeApiUrl??this.ownBeeApiUrl}dropGatewayForOwnCustomNode(){void 0===this.siteBeeApiUrl&&this.ownBeeApiUrl!==un&&(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 li(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 ya,this.stamperInitGeneration=0,this.publishInFlight=!1,this.lastDeviceRegistryRefreshAt=0,this.siteAllowList=t.siteAllowList;const e=ca().load();this.ownBeeApiUrl=e?.beeNodeUrl||un,this.gnosisRpcUrl=e?.gnosisRpcUrl||ln,this.postageStampContractAddress=t.postageStampContractAddress||Wc,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 vi([]),this.setupBusListeners(),this.announceReady()}setupStorageListeners(){if(this.unsubscribeStorageListeners.length>0)return;const t=oa();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(ca().load())}applyNetworkSettingsValues(t){this.gnosisRpcUrl=t?.gnosisRpcUrl||ln;const e=t?.beeNodeUrl||un;e!==this.ownBeeApiUrl&&(this.ownBeeApiUrl=e,this.dropGatewayForOwnCustomNode())}async handleAccountStorageChange(t="storage"){await this.reevaluateConnection(t)}async reevaluateConnection(t){if(!this.parentOrigin)return;await oa().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=$c(),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.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 console.warn("[Proxy] setSecret appOrigin mismatch:",t.appOrigin,"!==",this.parentOrigin),void this.endRefusedConnect();this.pendingChallenge=void 0,this.handedOverChallenge=t.challenge,localStorage.removeItem(hn),await this.adoptHandover(t.data)}}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.authLoading=!1,this.isConnecting=!1,this.deviceId=$c(),await this.hydratePartitionAccount(t.account,t.secret,t.networkSettings,Date.now(),t.stampPending),this.reactivateThisDevice(),this.savePartitionSession(t),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 pn(t.chatBinding,{site:this.parentOrigin,chatAddress:fn(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()+Xc(this.partitionAccount?.settings),i={...t,account:Zs({...t.account,connectedApps:yn(t.account.connectedApps,e)})};this.writePartitionSession(e,async()=>({version:1,parentOrigin:e,connectedUntil:r,data:await Ki(JSON.stringify(i))}))}refreshStoredPartitionAccount(){if(!this.partitionAccount||!this.parentOrigin)return;const t=this.parentOrigin,e=Zs(this.partitionAccount);this.writePartitionSession(t,async()=>{const n=await this.openStoredPartitionSession(t);if(n&&"unavailable"!==n)return{...n.record,data:await Ki(JSON.stringify({...n.wire,account:e}))}})}clearPartitionSession(){this.parentOrigin&&this.writePartitionSession(this.parentOrigin,async()=>null)}writePartitionSession(t,e){const n=gn(t),r=(Fd.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)});Fd.set(n,r)}async openStoredPartitionSession(t){let e,n=null;try{n=localStorage.getItem(gn(t))}catch{return}if(!n)return;try{e=JSON.parse(n)}catch{return}const r=wn.safeParse(e);if(!r.success||!Li(r.data.data))return;await Wi([r.data.data]);const i=zi(r.data.data);if(void 0===i)return ji(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 Fd.get(gn(t));let e=null;try{e=localStorage.getItem(gn(t))}catch{return}if(!e)return;const n=await this.openStoredPartitionSession(t);if("unavailable"===n)return;const r=n&&mn.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+Xc(t.settings),stampPending:i};this.partitionAccount={...t,connectedApps:[a,...yn(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 pa(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 bi(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 Sa({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=Ld.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(Ld.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=Pc([Md(Od(n)),Md(t)],so(n.devices,t.metadata.devices),n.id.toHex()),i=Fc({id:n.id,derivationKey:n.derivationKey,account:r,lastModified:Math.max(n.lastModified??n.createdAt,t.metadata.lastModified)}),s=yn(ha(r.connectedApps,n.connectedApps),e.app.appUrl);this.partitionAccount={...this.partitionAccount,...i,connectedApps:s,postageStamps:no(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 Ra);try{a=await Vs.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 Zo({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=$c()),this.deviceId}readLeaseCache(t,e){try{const n=localStorage.getItem(bn(t,e));return n?JSON.parse(n):void 0}catch{return}}writeLeaseCache(t,e,n){const r=bn(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 Xa.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=vn.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=Sn.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=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.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:jc()}),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 oa().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=$c(),await this.hydratePartitionAccount(e.account,e.secret,e.networkSettings,n??Date.now(),e.stampPending),this.showAuthButton(),this.emitConnectionInfoIfChanged()}startRestoredSessionCheck(t){const e={input:t,settled:void 0,verdict:Kc(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 qd();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 qd();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 eo(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 nn(e.derivationKey);return{owner:e.id,encryptionKey:ge(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:oa().load().find(e=>e.id.toHex()===t);return!r||Be(r)?n:[...new Set([...Mc(r.devices,e,Oc),...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:oa();await(r?.prime());const i=r?.load()??[],s=n?this.partitionAccount:i.find(e=>e.id.toHex()===t);if(!s||Be(s))return;const a=new I(await Ae(ye(e),Ue)).publicKey().address(),o=await gc({bee:this.accountBee,accountId:s.id.toHex(),owner:a});if(0===o.length)return;const c=Bc(so(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 Tc.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?da(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:la(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 nn(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 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=kc(r);await e.withWrite(t=>Ac({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=Dc();try{return`${e} · ${new URL(t).host}`}catch{return e}}(this.parentOrigin):Dc()}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=oa().load(),r=[];for(const t of n)if(!Be(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;oa().update(t=>{let n=!1;const r=t.map(t=>{if(Be(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.handedOverChallenge=void 0,this.emitConnectionInfoIfChanged(),this.showAuthButton()}sendErrorToParent(t,e,n,r){e&&this.postMessage(t,{type:"error",requestId:e,...Zi(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=ge(this.appSecret),{x:n,y:r}=ed(t),i=ad(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,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})}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,this.handedOverChallenge=void 0,localStorage.setItem(hn,e);const n=window.location.pathname.replace(/\/proxy$/,""),r=Cn(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 hs(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 Xe(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 Qi(this.bee),p=await this.withModeAwareWriteLock({useWorkers:d,workerCount:u},async e=>{const n=to(s),o=await hs(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=ge(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 fs(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 ar(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 Xe(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 Qi(this.bee),u=await this.withModeAwareWriteLock({useWorkers:o,workerCount:c},e=>async function(t,e,n){const{content:r,manifest:i}=to(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 hs(t,i.data,{...s,encryptionKey:!!r||void 0});o.addFork(i.path,ge(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 fs(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 fs(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 ps(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 ps(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 ps(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 we("not-authenticated","Not authenticated. Please login first.");t=new I(this.appSecret).publicKey().address().toHex()}const o=await Ge(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 Ge(this.bee,t,i,s,a):await Un(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 Ae(this.appSecret,r);this.postMessage(e,{type:"deriveAppSecretResponse",requestId:n,secret:ge(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:Pn(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 Rd();const t=qa(r,{appSecret:this.appSecret,internalOwners:this.accountInternalOwners()}),i=await this.withModeAwareWriteLock(void 0,async e=>{if(!ts(e))throw Rd();if(!(e.stamper instanceof Vs))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: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 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=En(this.parentOrigin,n),i=function(t){if(null===t)return{count:0,windowStart:0,windowCount:0,buckets:{}};try{const e=Na.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=$n(this.parentOrigin,n),o={partition:t.currentPartition??0,partitionCount:t.partitionCount},c=_a(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=Wa(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=La(t.restampDataChunk(e.address,l,h)),this.lastRestampMs.set(r,h),f=Ga(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=_a(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=$s(e),s=za(n,{bucket:i,laneCapacity:t.laneCapacity(),now:r});if(s)throw s;const a=t.stampDataChunk(e,r);return{marshaled:La(a),slot:(o=a.index,new DataView(o.buffer,o.byteOffset,o.byteLength).getUint32(4,!1)),usage:Va(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=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=>Fa(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 nc(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 ht(ge(i)),u=new r(t),l=this.parseFeedTimestamp(a),h=void 0!==o?this.parseFeedTimestamp(o):0n,p=c?ge(c):void 0;let f;if(p){const t=tc({bee:this.bee,topic:d,owner:u,encryptionKey:p});f=await t.findAt(l,h)}else{const t=tc({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(ge(r)),h=u.publicKey().address(),p=this.parseFeedTimestamp(s),f=o?ge(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,g=ge(a);if(32!==g.length&&64!==g.length)throw new Error(`Reference must be 32 or 64 bytes, got ${g.length}`);const w=(d={bee:this.bee,topic:l,owner:h,signer:u},new Xo(d.topic,d.signer)),m=await this.withModeAwareWriteLock(void 0,async t=>await w.update(p,g,t,f,y)),b=tc({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 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 Ge(this.bee,e,i,a,s):await Un(this.bee,e,i,s):await Ge(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=ge(i),f=!1!==c,y=await this.resolveSequentialIndex(p,h,a,o,f,l,d,!1,u),g=this.makeSequentialFeedIdentifier(p,y),w=new x(g),m=await Ge(this.bee,h,w,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=ge(i),f=!1!==c,y=await this.resolveSequentialIndex(p,h,a,o,f,l,d,!0,u),g=this.makeSequentialFeedIdentifier(p,y),w=new x(g),m=d?await Ge(this.bee,h,w,d,l):await Un(this.bee,h,w,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=ge(i),f=!1!==c,y=await this.resolveSequentialIndex(p,h,a,o,f,l,d,!1,u),g=this.makeSequentialFeedIdentifier(p,y),w=new x(g),m=await Ge(this.bee,h,w,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=ge(r),y=!1!==c,g=void 0!==o?this.parseFeedTimestamp(o):BigInt(Math.floor(Date.now()/1e3));let w;if(void 0!==a)w=this.parseFeedIndex(a);else{const t=await this.findLatestSequentialIndex(f,p,l,d);w=void 0===t?0n:this.sequentialNextIndex(t)}const m=this.buildSequentialPayload(s,y,g);if(m.length<1||m.length>4096)throw new Error(`Invalid payload length: ${m.length} (expected 1-4096)`);const b=this.makeSequentialFeedIdentifier(f,w),v=new x(b),S=await this.withModeAwareWriteLock(void 0,async t=>await ps(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:w.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=ge(r),g=!1!==c,w=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,g,w);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 ps(t,p,S,b,{encryptionKey:d?ge(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=ge(r),y=!1!==c,g=void 0!==o?this.parseFeedTimestamp(o):BigInt(Math.floor(Date.now()/1e3));let w;if(void 0!==a)w=this.parseFeedIndex(a);else{const t=await this.findLatestSequentialIndex(f,p,l,d);w=void 0===t?0n:this.sequentialNextIndex(t)}const m=ge(s),b=this.buildSequentialPayload(m,y,g);if(b.length<1||b.length>4096)throw new Error(`Invalid payload length: ${b.length} (expected 1-4096)`);const v=this.makeSequentialFeedIdentifier(f,w),S=new x(v),k=await this.withModeAwareWriteLock(void 0,async t=>await ps(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:w.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?xn(t).secret:void 0}actKeys(){const t=ge(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=>Dd(t)),c=this.createProgressCallback(e,n,o),d="identity"===s?.publisher?this.sharingSecret():ge(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 hs(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=ge(n.reference);i.addFork(Td,o,{"Content-Type":"application/octet-stream",Filename:Td}),i.addFork("/",V,{"website-index-document":Td});const l=await He(i,async t=>(await fs(e,t,{pin:s?.pin,deferred:s?.deferred,tag:s?.tag}),{}),{encrypt:!u}),h=ge(l.rootReference);return{actResult:await $d(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 je(this.bee,t,o),{indexDocument:d}=new ar(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 Xe(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=>Dd(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=Id(await Xe(e,n,void 0,void 0,a),ge(n));await Ad(d,async t=>Xe(e,t,void 0,void 0,a));const u=kd(d);if(!u)throw new Error("History manifest is empty");const l=cd(await Xe(e,u.metadata.actReference,void 0,void 0,a)),{privateKey:h,derived:p,entry:f}=Pd(l,r),y=id(f.encryptedAccessKey,p.accessKeyDecryptionKey),g=[...l];for(const t of i){const e=nd(h,t.x,t.y);g.push({lookupKey:e.lookupKey,encryptedAccessKey:rd(y,e.accessKeyDecryptionKey)})}let w=[];u.metadata.encryptedGranteeListRef&&(w=fd(await Xe(e,u.metadata.encryptedGranteeListRef,void 0,void 0,a),h));const m=[...w,...i],b=od(g),v=await hs(t,b,{encryptionKey:!c||void 0,pin:s?.pin,deferred:s?.deferred,tag:s?.tag,requestOptions:a}),S=pd(m,h),k=await hs(t,S,{encryptionKey:!0,pin:s?.pin,deferred:s?.deferred,requestOptions:a});Sd(d,Cd(),v.reference,k.reference);const x=await xd(d,async(e,n)=>hs(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=>Dd(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=Id(await Xe(e,n,void 0,void 0,o),ge(n));await Ad(u,async t=>Xe(e,t,void 0,void 0,o));const l=kd(u);if(!l)throw new Error("History manifest is empty");const h=cd(await Xe(e,l.metadata.actReference,void 0,void 0,o)),{privateKey:p,derived:f,entry:y}=Pd(h,i),g=id(y.encryptedAccessKey,f.accessKeyDecryptionKey);let w=[];l.metadata.encryptedGranteeListRef&&(w=fd(await Xe(e,l.metadata.encryptedGranteeListRef,void 0,void 0,o),p));const m=w.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:rd(g,f.accessKeyDecryptionKey)});for(const t of m){const e=nd(p,t.x,t.y);b.push({lookupKey:e.lookupKey,encryptedAccessKey:rd(g,e.accessKeyDecryptionKey)})}const v=od(b),S=await hs(t,v,{encryptionKey:!d||void 0,pin:a?.pin,deferred:a?.deferred,tag:a?.tag,requestOptions:o}),k=pd(m,p),x=await hs(t,k,{encryptionKey:!0,pin:a?.pin,deferred:a?.deferred,requestOptions:o});Sd(u,Cd(),S.reference,x.reference);const I=await xd(u,async(e,n)=>hs(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=Id(await Xe(t,e,void 0,void 0,r),ge(e));await Ad(i,async e=>Xe(t,e,void 0,void 0,r));const s=kd(i);if(!s||!s.metadata.encryptedGranteeListRef)return[];const a=await Xe(t,s.metadata.actReference,void 0,void 0,r),{privateKey:o}=Pd(cd(a),n);return fd(await Xe(t,s.metadata.encryptedGranteeListRef,void 0,void 0,r),o).map(t=>{const e=ad(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 Bn(this.beeApiUrl,n.batchID.toHex());let i=await async function(t,e,n,r){const i=zc(t,r);return await Yc(t,n,i)??await on(e,n)}(this.gnosisRpcUrl,this.beeApiUrl,n.batchID.toHex(),this.postageStampContractAddress);if(void 0===i)try{const t=await Dn();i=Tn(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 Qi(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 fs(t,h.data,o),u.selfAddress=h.address.toUint8Array();const p=await c.marshal();if(!1!==r?.encrypt){const e=be(p);await fs(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 fs(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 Kd(t){return new Ld(t)}async function Nd(t){const e=async()=>{if((void 0===t.graceMs||!Hd(t.cooldownKey,t.graceMs))&&(t.force||!Hd(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 Hd(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 jd="solarpunkid.eth",Wd="buzz.solarpunk.sites",zd="[SiteAllowList]",Gd=/[\s,]+/,Vd=/^[a-z0-9-]+$/,Jd=32,Zd=Qd("resolver(bytes32)"),Yd=Qd("text(bytes32,string)"),_d=ae({ensName:ue(),recordKey:ue(),origins:de(ue()),fetchedAt:le()});function Qd(t){return ye(On((new TextEncoder).encode(t)).slice(0,4))}function Xd(t){return t.toString(16).padStart(64,"0")}function tu(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 ge(t.slice(2))}function eu(t,e){if(e+Jd>t.length)throw new Error("The answer ends inside a word.");return BigInt(`0x${ye(t.slice(e,e+Jd))}`)}async function nu(t,e,n){return Fn(t,"eth_call",[{to:e,data:n},"latest"],{timeoutMs:an})}async function ru(t,e,n){const r=function(t){let e=new Uint8Array(Jd);const n=""===t?[]:t.split(".");for(const t of n.reverse()){const n=new Uint8Array(64);n.set(e),n.set(On((new TextEncoder).encode(t)),Jd),e=On(n)}return`0x${ye(e)}`}(e),i=function(t){const e=tu(t,"The registry");if(e.length!==Jd)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 nu(t,"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",`0x${Zd}${r.slice(2)}`));if(!i)throw new Error(`${e} has no resolver.`);return function(t){const e=tu(t,"The resolver"),n=eu(e,0);if(n>BigInt(e.length))throw new Error("The resolver answered a string offset past its end.");const r=Number(n),i=eu(e,r),s=BigInt(r+Jd)+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+Jd,Number(s)))}(await nu(t,i,function(t,e){const n=(new TextEncoder).encode(e),r=ye(n),i=Math.ceil(n.length/Jd)*Jd*2,s=Xd(64);return`0x${Yd}${t.slice(2)}${s}${Xd(n.length)}${r.padEnd(i,"0")}`}(r,n)))}function iu(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 su(t){const e=t.now??Date.now,n=function(t){const e=new Set;for(const n of t)Mn(n,{allowLocalHttp:!0})?e.add(n):console.warn(`${zd} 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=>Vd.test(t))}(t.ensName))try{const n=function(t){const e=[];for(const n of t.split(Gd))""!==n&&(Mn(n)?e.push(n):console.warn(`${zd} Ignored an entry that is not a clean https origin:`,n));return e}(await ru(t.rpcUrl,t.ensName,t.recordKey));return 0===n.length?void console.warn(`${zd} The record names no site, so no site is allowed.`):((e=>{r=e;try{t.storage?.setItem(Rn,JSON.stringify(e))}catch(t){console.warn(`${zd} 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(`${zd} Could not read the list, so no site is allowed:`,t)}else console.warn(`${zd} The ENS name is not a plain lower-case name:`,t.ensName);else console.warn(`${zd} 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(Rn);if(!e)return;const n=_d.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(!Mn(t))return iu("not-clean",t);const e=await o();return e?e.includes(t)?{allowed:!0}:iu("not-listed",t):iu("list-unavailable",t)}}}export{vi as AccountBus,mn as AuthDataSchema,As as BUCKET_DEPTH,_c as DAY,ln as DEFAULT_GNOSIS_RPC_URL,jd as DEFAULT_SITE_ALLOW_LIST_ENS_NAME,Wd as DEFAULT_SITE_ALLOW_LIST_RECORD_KEY,ka as DebouncedUtilizationUploader,rn as GNOSIS_BLOCK_TIME,De as LocalAccountSchemaV1,zs as MIN_USABLE_BATCH_DEPTH,We as NO_POSTAGE_STAMP,Ee as NetworkSettingsSchemaV1,Cs as PARTITION_COUNT,Ta as PASSWORD_KDF_ITERATIONS,fa as PRESENCE_INTERVAL_MS,Go as PartitionLease,en as PostageStampSchemaV1,ya as PresenceTracker,hn as STORAGE_CHALLENGE_KEY,$e as STORAGE_KEY_ACCOUNTS,Pe as STORAGE_KEY_NETWORK_SETTINGS,Sa as SignalingTransport,Xi as SocUploadError,Vs as UtilizationAwareStamper,Ra as UtilizationStoreDB,ua as accountDeltaSnapshot,Xc as appSessionDuration,Zc as calculateContractTTLSeconds,oa as createAccountsStorageManager,ca as createNetworkSettingsStorageManager,su as createSiteAllowList,Rc as createSyncAccount,Pa as decryptSeed,pa as deriveBusContext,Pn as deriveChatKey,Da as deriveKeyFromPassword,$a as deriveKeyFromPrf,Ea as deriveKeyFromSecret,Ba as deriveKeyFromSignature,In as derivePostageSignerKeySync,Ae as deriveSecret,Oe as deriveSecretSync,xn as deriveSharingKey,nn as deriveSwarmEncryptionKey,Dc as detectDeviceName,Ge as downloadEncryptedSOC,Ua as encryptSeed,Jc as fetchOnChainBatchStateResult,Lc as foldAccountFromSwarm,Fc as foldedToSyncedAccount,$c as getOrCreateDeviceId,Kd as initProxy,Be as isSignedOutAccount,bn as leaseCacheStorageKey,Hc as markFirstPartyStorage,ao as mergeConnectedApps,Bc as mergeDevices,so as mergeDevicesList,oo as mergePostageStamps,yn as onlySiteChatBinding,Ca as randomSalt,io as remainingLifespanSeconds,eo as resolveStampForApp,ha as restoreLocalSessionFields,Nd as runCoalescedAcrossTabs,Xs as serializePostageStamp,Zs as serializeSyncedAccount,fn as siteChatAddress,Je as sleep,no as stampsReachableByApp,ps as uploadSOC};
2
2
  //# sourceMappingURL=internal.esm.js.map