@solarpunkltd/swarm-id 0.8.2 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -7
- package/dist/chunks/{chat-binding-DgECjSWW.js → chat-binding-BirKsDU3.js} +9 -9
- package/dist/chunks/{chat-binding-DgECjSWW.js.map → chat-binding-BirKsDU3.js.map} +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/internal.d.ts +1 -0
- package/dist/internal.esm.js +1 -1
- package/dist/internal.esm.js.map +1 -1
- package/dist/swarm-id-button-frame.d.ts +77 -0
- package/dist/swarm-id-client.d.ts +64 -69
- package/dist/swarm-id-proxy.d.ts +18 -49
- package/dist/swarm-id.esm.js +1 -1
- package/dist/swarm-id.esm.js.map +1 -1
- package/dist/types.d.ts +330 -59
- package/dist/utils/button-view.d.ts +16 -0
- package/dist/utils/storage-probe.d.ts +20 -10
- package/package.json +1 -1
package/dist/internal.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{o as t,q as e,r as n,E as r,t as i,x as s,y as a,z as o,B as c,F as d,G as u,H as l,J as h,K as p,L as f,O as y,Q as 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={"&":"&",""":\'"\',"'":"\'",">":">","<":"<"};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>,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<,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(",",",")})`)).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(",",","),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,"<").replace(/>/g,">").replace(/"/g,""")},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};
|
|
1
|
+
import{t,x as e,y as n,E as r,z as i,F as s,G as a,H as o,J as c,K as d,L as u,O as l,Q as h,U as p,V as f,W as y,X as w,Y as g,R as m,Z as b,_ as v,$ as S,a0 as k,a as x,c as I,a1 as A,a2 as C,a3 as U,a4 as P,a5 as E,a6 as $,a7 as D,a8 as B,a9 as T,aa as O,ab as M,ac as R,ad as F,ae as q,af as L,ag as K,ah as N,ai as H,aj as W,ak as j,M as z,al as G,N as V,am as J,an as Z,ao as Y,ap as _,aq as Q,ar as X,as as tt,at as et,au as nt,av as rt,aw as it,ax as st,ay as at,az as ot,aA as ct,aB as dt,aC as ut,T as lt,aD as ht,aE as pt,aF as ft,aG as yt,aH as wt,aI as gt,aJ as mt,aK as bt,aL as vt,aM as St,aN as kt,aO as xt,aP as It,aQ as At,aR as Ct,aS as Ut,aT as Pt,aU as Et,aV as $t,aW as Dt,aX as Bt,aY as Tt,aZ as Ot,a_ as Mt,a$ as Rt,b0 as Ft,b1 as qt,b2 as Lt,b3 as Kt,b4 as Nt,b5 as Ht,b6 as Wt,b7 as jt,b8 as zt,b9 as Gt,ba as Vt,bb as Jt,bc as Zt,bd as Yt,be as _t,bf as Qt,bg as Xt,bh as te,bi as ee,bj as ne,bk as re,bl as ie,bm as se,bn as ae,bo as oe,bp as ce,bq as de,br as ue,bs as le,bt as he,bu as pe,u as fe,j as ye,S as we,bv as ge,bw as me,bx as be,by as ve,bz as Se,bA as ke,bB as xe,bC as Ie,bD as Ae,bE as Ce,bF as Ue,bG as Pe,bH as Ee,bI as $e,bJ as De,bK as Be,bL as Te,bM as Oe,bN as Me,bO as Re,bP as Fe,bQ as qe,bR as Le,bS as Ke,bT as Ne,bU as He,bV as We,bW as je,bX as ze,bY as Ge,bZ as Ve,w as Je,b_ as Ze,e as Ye,b$ as _e,c0 as Qe,c1 as Xe,c2 as tn,c3 as en,c4 as nn,n as rn,c5 as sn,c6 as an,c7 as on,c8 as cn,D as dn,c9 as un,ca as ln,o as hn,cb as pn,cc as fn,cd as yn,ce as wn,cf as gn,cg as mn,ch as bn,ci as vn,cj as Sn,P as kn,ck as xn,cl as In,g as An,cm as Cn,cn as Un,co as Pn,cp as En,cq as $n,cr as Dn,cs as Bn,B as Tn,ct as On,cu as Mn,b as Rn,cv as Fn,q as qn,cw as Ln,m as Kn}from"./chunks/chat-binding-BirKsDU3.js";export{cx as BatchIdSchema,cy as PrivateKeySchema,cz as SyncedAccountSchemaV1,cF as calculateStampAmountForDays,cC as createChatBinding,cA as deriveAccountDerivationKey,cB as derivePostageSignerKey,cD as hexAddress,cG as isHttpUrl,cE as withIdleTimeout}from"./chunks/chat-binding-BirKsDU3.js";class Nn{constructor(t){if(this.bytes=Math.ceil(t),t<0)throw Error("Size must be at least 0")}static fromBytes(t){return new Nn(t)}static fromKilobytes(t){return new Nn(1e3*t)}static fromMegabytes(t){return new Nn(1e3*t*1e3)}static fromGigabytes(t){return new Nn(1e3*t*1e3*1e3)}static parseFromString(t){return Nn.fromBytes(s.Numbers.makeStorage(t,1e3))}toBytes(){return this.bytes}toGigabytes(){return this.bytes/1e3/1e3/1e3}toFormattedString(){return s.Numbers.convertBytes(this.bytes,1e3)}represent(){return this.toFormattedString()}}function Hn(t,e){return d.fromPLUR(2n**BigInt(t)*BigInt(e))}function Wn(t,e,n){return BigInt(t.toSeconds())/BigInt(n)*BigInt(e)+1n}function jn(t,e,n){return c(t.toBytes(),e,n)}function zn(t,e,n){const r=u(t.batchTTL),i=o.fromSeconds(r),s=l(t.depth,e,n),c=t.utilizationRatio??h(t.utilization,t.depth,t.bucketDepth);return{batchID:new p(t.batchID),utilization:t.utilization,usable:t.usable,label:t.label,depth:t.depth,amount:a(t.amount),bucketDepth:t.bucketDepth,blockNumber:t.blockNumber,immutableFlag:t.immutableFlag,usage:c,usageText:`${Math.round(100*c)}%`,size:Nn.fromBytes(s),remainingSize:Nn.fromBytes(Math.ceil(s*(1-c))),theoreticalSize:Nn.fromBytes(f(t.depth)),duration:i,calculateSize(e,n){const r=l(t.depth,e,n);return Nn.fromBytes(r)},calculateRemainingSize(e,n){const r=l(t.depth,e,n);return Nn.fromBytes(Math.ceil(r*(1-this.usage)))}}}function Gn(t){return{name:function(t){if(!t)throw new v("missing content-disposition header");const e=t.match(/filename\*?=['"]?(?:UTF-\d['"]*)?([^;\r\n"']*)['"]?;?/i);if(e&&e.length>0)return e[1];throw new v("invalid content-disposition header")}(t["content-disposition"]),tagUid:function(t){if(!t)return;return parseInt(t,10)}(t["swarm-tag-uid"]),contentType:t["content-type"]||void 0}}function Vn(t,e){const n={};var r;if(!function(t){if(!b({}).safeParse(t).success)return!1;const e=t;return void 0!==e.issuer&&void 0!==e.index&&void 0!==e.signature&&void 0!==e.timestamp&&void 0!==e.batchId}(t)?t&&(t=new p(t),n["swarm-postage-batch-id"]=t.toHex()):n["swarm-postage-stamp"]=(r=t,y(r)).toHex(),!e)return n;const i=e;i.size&&(n["content-length"]=String(i.size)),i.contentType&&(n["content-type"]=String(i.contentType)),i.redundancyLevel&&(n["swarm-redundancy-level"]=String(i.redundancyLevel));const s=w().safeParse(i.act);s.success&&(n["swarm-act"]=String(s.data));const a=w().safeParse(i.pin);a.success&&(n["swarm-pin"]=String(a.data));const o=w().safeParse(i.encrypt);o.success&&(n["swarm-encrypt"]=String(o.data)),i.tag&&(n["swarm-tag"]=String(i.tag));const c=w().safeParse(i.deferred);c.success&&(n["swarm-deferred-upload"]=String(c.data)),i.redundancyStrategy&&(n["swarm-redundancy-strategy"]=String(i.redundancyStrategy));const d=w().safeParse(i.fallback);return d.success&&(n["swarm-redundancy-fallback-mode"]=String(d.data)),i.timeoutMs&&(n["swarm-chunk-retrieval-timeout"]=String(i.timeoutMs)),i.indexDocument&&(n["swarm-index-document"]=String(i.indexDocument)),i.errorDocument&&(n["swarm-error-document"]=String(i.errorDocument)),i.actPublisher&&(n["swarm-act-publisher"]=new g(i.actPublisher).toCompressedHex()),i.actHistoryAddress&&(n["swarm-act-history-address"]=new m(i.actHistoryAddress).toHex()),i.actTimestamp&&(n["swarm-act-timestamp"]=String(i.actTimestamp)),(i.actPublisher||i.actHistoryAddress||i.actTimestamp)&&(n["swarm-act"]="true"),i.gasPrice&&(n["gas-price"]=String(i.gasPrice)),i.gasLimit&&(n["gas-limit"]=String(i.gasLimit)),n}const Jn="chunks";async function Zn(e,n,r){n=new m(n);const i=await t(e,{responseType:"arraybuffer",url:`${Jn}/${n}`,headers:Vn(null,r)});return new Uint8Array(i.data)}function Yn(t,e){try{return U(t,e)}catch(t){throw new v(t.message)}}async function _n(e,n,r,i){const a=A.concat(n.span.toUint8Array(),n.payload.toUint8Array());return async function(e,n,r,i,a,o,c){const d=await t(e,{method:"post",url:`soc/${n}/${r}`,data:a,headers:{"content-type":"application/octet-stream",...Vn(o,c)},responseType:"json",params:{sig:i.toHex()}});return{reference:S.parse(d.data).reference,tagUid:d.headers["swarm-tag"]?k(d.headers["swarm-tag"]):void 0,historyAddress:d.headers["swarm-act-history-address"]?s.Optional.of(new m(d.headers["swarm-act-history-address"])):s.Optional.empty()}}(e,n.owner,n.identifier,n.signature,a,r,i)}async function Qn(t,e,n,r,i,s){e=new I(e),r=new x(r);return _n(t,E(i).toSingleOwnerChunk(r,e),n,s)}async function Xn(t,e,n){n=new x(n),e=new r(e);const i=P(n,e);return Yn(await Zn(t,i.toHex()),i)}const tr="balances";const er="consumed";class nr{constructor(t){this.context=t}async getAll(e){return async function(e){const n=await t(e,{url:tr,responseType:"json"});return $.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getPeer(e,n){const r=new B(e);return async function(e,n){const r=await t(e,{url:`${tr}/${n}`,responseType:"json"});return D.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getAllPastDueConsumption(e){return async function(e){const n=await t(e,{url:er,responseType:"json"});return $.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getAllPastDueConsumptionForPeer(e,n){const r=new B(e);return async function(e,n){const r=await t(e,{url:`${er}/${n}`,responseType:"json"});return D.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}}const rr="chequebook";class ir{constructor(t){this.context=t}async getAllLatest(e){return async function(e){const n=await t(e,{url:`${rr}/cheque`,responseType:"json"});return R.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getAllLatestForPeer(e,n){const r=new B(e);return async function(e,n){const r=await t(e,{url:`${rr}/cheque/${n}`,responseType:"json"});return F.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getLastCashoutAction(e,n){const r=new B(e);return async function(e,n){const r=await t(e,{url:`${rr}/cashout/${n}`,responseType:"json"});return q.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async cashoutLast(e,n,r){const i=new B(e);return n&&(n=L.parse(n)),async function(e,n,r){const i=await t(e,{method:"post",url:`${rr}/cashout/${n}`,responseType:"json",headers:Vn(null,r)});return M.parse(i.data).transactionHash}(this.context.getRequestOptionsForCall(r),i,n)}}class sr{constructor(t){this.context=t}async getAddress(e){return async function(e){const n=await t(e,{url:`${rr}/address`,responseType:"json"});return T.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getBalance(e){return async function(e){const n=await t(e,{url:`${rr}/balance`,responseType:"json"});return O.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async deposit(e,n,r){const i=e instanceof d?e.toPLURString():a(e,{min:1n,name:"amount"}),s=n?a(e,{min:0n,name:"gasPrice"}):void 0;return async function(e,n,r){const i={};r&&(i["gas-price"]=r);const s=await t(e,{method:"post",url:`${rr}/deposit`,responseType:"json",params:{amount:n},headers:i});return M.parse(s.data).transactionHash}(this.context.getRequestOptionsForCall(r),i,s)}async withdraw(e,n,r){const i=e instanceof d?e.toPLURString():a(e,{min:1n,name:"amount"}),s=n?a(e,{min:0n,name:"gasPrice"}):void 0;return async function(e,n,r){const i={};r&&(i["gas-price"]=r);const s=await t(e,{method:"post",url:`${rr}/withdraw`,responseType:"json",params:{amount:n},headers:i});return M.parse(s.data).transactionHash}(this.context.getRequestOptionsForCall(r),i,s)}}class ar{constructor(t){this.context=t}async upload(e,r,i,a){const o="identifier"in r&&"signature"in r&&"owner"in r;if(r=r instanceof Uint8Array?r:r.data,i&&(i=K.parse(i)),r.length<N.LENGTH)throw new H(`Chunk has to have size of at least ${N.LENGTH}.`,r);if(!o&&r.length>W+N.LENGTH)throw new H(`Content Addressed Chunk must not exceed ${W+N.LENGTH} bytes.`,r);if(o&&r.length>W+N.LENGTH+n.LENGTH+x.LENGTH)throw new H(`Single Owner Chunk must not exceed ${W+N.LENGTH+n.LENGTH+x.LENGTH} bytes.`,r);return async function(e,n,r,i){const a=await t(e,{method:"post",url:`${Jn}`,data:n,headers:{"content-type":"application/octet-stream",...Vn(r,i)},responseType:"json"});return{reference:S.parse(a.data).reference,tagUid:a.headers["swarm-tag"]?k(a.headers["swarm-tag"]):void 0,historyAddress:a.headers["swarm-act-history-address"]?s.Optional.of(new m(a.headers["swarm-act-history-address"])):s.Optional.empty()}}(this.context.getRequestOptionsForCall(a),r,e,i)}async download(t,e,n){const r=new m(t);return e&&(e=j.parse(e)),Zn(this.context.getRequestOptionsForCall(n),r,e)}}async function or(t,e,n,r,i){for(const s of t.forks.values()){const t=await or(s.node,e,n,r,i);if(r?.act){let e;t.historyAddress.ifPresent(t=>e=t),e&&(s.node.metadata||(s.node.metadata={}),s.node.metadata["swarm-act-history-address"]=e.toHex())}}const s=await e.data.upload(n,await t.marshal(),r,i);return t.selfAddress=s.reference.toUint8Array(),s}async function cr(t,e,n,r){for(const i of t.forks.values()){if(!i.node.selfAddress)throw Error("MantarayNode#loadRecursively fork.node.selfAddress is not set");let s=n;i.node.metadata&&i.node.metadata["swarm-act-history-address"]&&(s={...n,actHistoryAddress:i.node.metadata["swarm-act-history-address"]});const a=(await e.data.download(i.node.selfAddress,s,r)).toUint8Array(),o=z.unmarshalFromData(a,i.node.selfAddress);i.node.targetAddress=o.targetAddress,i.node.forks=o.forks,i.node.path=i.prefix,i.node.parent=t,await cr(i.node,e,n,r)}}class dr{constructor(t=new z){this.core=t}get obfuscationKey(){return this.core.obfuscationKey}get selfAddress(){return this.core.selfAddress}get targetAddress(){return this.core.targetAddress}get metadata(){return this.core.metadata}get path(){return this.core.path}get forks(){return this.core.forks}get parent(){return this.core.parent}get type(){return this.core.type}get fullPath(){return this.core.fullPath}get fullPathString(){return this.core.fullPathString}getRootMetadata(){const t=this.core.find("/");return t&&t.metadata?s.Optional.of(t.metadata):s.Optional.empty()}getDocsMetadata(){const t=this.core.find("/");return t&&t.metadata?{indexDocument:t.metadata["website-index-document"]??null,errorDocument:t.metadata["website-error-document"]??null}:{indexDocument:null,errorDocument:null}}async resolveFeed(t,e){const n=this.core.find("/");if(!n||!n.metadata)return s.Optional.empty();const r=n.metadata["swarm-feed-owner"],i=n.metadata["swarm-feed-topic"];return r&&i?s.Optional.of(await t.feed.fetchLatestUpdate(i,r,e)):s.Optional.empty()}async marshal(){return this.core.marshal()}static async unmarshal(t,e,n,r){e=new m(e);const i=(await t.data.download(e,n,r)).toUint8Array();return this.unmarshalFromData(i,e.toUint8Array())}static unmarshalFromData(t,e){return new dr(z.unmarshalFromData(t,e))}addFork(t,e,n){this.core.addFork(t,e instanceof A?e.toUint8Array():e,n)}removeFork(t){this.core.removeFork(t)}async calculateSelfAddress(){return this.core.calculateSelfAddress()}async saveRecursively(t,e,n,r){return or(this.core,t,e,n,r)}async loadRecursively(t,e,n){return cr(this.core,t,e,n)}find(t){return this.core.find(t)}findClosest(t,e){return this.core.findClosest(t,e)}collect(t=[]){return this.core.collect(t)}collectAndMap(){return this.core.collectAndMap()}determineType(){return this.core.determineType()}}function ur(t){return function t(e){return e<=1?e:e+t(Math.ceil(e/128))}(Math.ceil(t/4096))}function lr(t){if(!function(t){return!!Array.isArray(t)&&t.every(t=>"object"==typeof t&&t.path&&void 0!==t.size)}(t))throw new H("invalid collection",t)}function hr(t){if(t.webkitRelativePath&&""!==t.webkitRelativePath)return t.webkitRelativePath.replace(/.*?\//i,"");if(t.name)return t.name;throw new TypeError("file is not valid File object")}const pr={aac:"audio/aac",abw:"application/x-abiword",ai:"application/postscript",arc:"application/octet-stream",avi:"video/x-msvideo",azw:"application/vnd.amazon.ebook",bin:"application/octet-stream",bz:"application/x-bzip",bz2:"application/x-bzip2",csh:"application/x-csh",css:"text/css",csv:"text/csv",doc:"application/msword",dll:"application/octet-stream",dmg:"application/x-apple-diskimage",eot:"application/vnd.ms-fontobject",epub:"application/epub+zip",gif:"image/gif",htm:"text/html",html:"text/html",ico:"image/x-icon",ics:"text/calendar",jar:"application/java-archive",jpeg:"image/jpeg",jpg:"image/jpeg",js:"application/javascript",json:"application/json",mid:"audio/midi",midi:"audio/midi",mp2:"audio/mpeg",mp3:"audio/mpeg",mp4:"video/mp4",mpa:"video/mpeg",mpe:"video/mpeg",mpeg:"video/mpeg",mpkg:"application/vnd.apple.installer+xml",odp:"application/vnd.oasis.opendocument.presentation",ods:"application/vnd.oasis.opendocument.spreadsheet",odt:"application/vnd.oasis.opendocument.text",oga:"audio/ogg",ogv:"video/ogg",ogx:"application/ogg",otf:"font/otf",png:"image/png",pdf:"application/pdf",ppt:"application/vnd.ms-powerpoint",rar:"application/x-rar-compressed",rtf:"application/rtf",sh:"application/x-sh",svg:"image/svg+xml",swf:"application/x-shockwave-flash",tar:"application/x-tar",tif:"image/tiff",tiff:"image/tiff",ts:"application/typescript",ttf:"font/ttf",txt:"text/plain",vsd:"application/vnd.visio",wav:"audio/x-wav",weba:"audio/webm",webm:"video/webm",webp:"image/webp",woff:"font/woff",woff2:"font/woff2",xhtml:"application/xhtml+xml",xls:"application/vnd.ms-excel",xlsx:"application/vnd.ms-excel",xml:"application/xml",xul:"application/vnd.mozilla.xul+xml",zip:"application/zip","3gp":"video/3gpp","3gp2":"video/3gpp2","7z":"application/x-7z-compressed"};function fr(t){return["text/html","text/css"].includes(t)?`${t}; charset=utf-8`:t}class yr{constructor(){this.pieces=[],this.currentFileSize=0}get output(){return this.pieces.reduce((t,e)=>{const n=new Uint8Array(t.length+e.length);return n.set(t),n.set(e,t.length),n})}beginFile(t,e){const{name:n,prefix:r,longLink:i}=function(t){if(t.length<=100)return{name:t,prefix:"",longLink:!1};for(let e=t.length-1;e>=0;e--)if("/"===t[e]){const n=t.substring(e+1),r=t.substring(0,e);if(n.length<=100&&r.length<=155)return{name:n,prefix:r,longLink:!1}}const e=t.lastIndexOf("/"),n=(e>=0?t.substring(e+1):t).slice(0,100);return{name:n,prefix:"",longLink:!0}}(t);if(i){const e=(new TextEncoder).encode(t+"\0");this.pieces.push(function(t){const e=new TextEncoder;function n(t,n,i){const s=e.encode(t);r.set(s.slice(0,i),n)}const r=new Uint8Array(512);r.fill(0),n("././@LongLink",0,100),n("0000644\0",100,8),n("0000000\0",108,8),n("0000000\0",116,8),n(t.toString(8).padStart(11,"0")+"\0",124,12),n("00000000000\0",136,12),n(" ",148,8),n("L",156,1),n("ustar\0\0",257,8);let i=0;for(let t=0;t<512;t++)i+=r[t];return n(i.toString(8).padStart(6,"0")+"\0 ",148,8),r}(e.length)),this.pieces.push(e);const n=e.length%512==0?0:512-e.length%512;n>0&&this.pieces.push(new Uint8Array(n))}const s=function(t,e,n){const r=new TextEncoder;function i(t,e,n){const i=r.encode(t);s.set(i.slice(0,n),e)}const s=new Uint8Array(512);s.fill(0,0,512),i(t.slice(0,100).padEnd(100,"\0"),0,100),i("0000777\0",100,8),i("0001750\0",108,8),i("0001750\0",116,8),i(n.toString(8).padStart(11,"0")+"\0",124,12);i(Math.floor((new Date).getTime()/1e3).toString(8).padStart(11,"0")+"\0",136,12),i(" ",148,8),i("0",156,1),i("ustar\0\0",257,8),e&&i(e.slice(0,155).padEnd(155,"\0"),345,155);let a=0;for(let t=0;t<512;t++)a+=s[t];return i(a.toString(8).padStart(6,"0")+"\0 ",148,8),s}(n,r,e);this.pieces.push(s),this.currentFileSize=0}async appendFile(t){this.pieces.push(t),this.currentFileSize+=t.length}async endFile(){const t=this.currentFileSize%512==0?0:512-this.currentFileSize%512;t>0&&this.pieces.push(new Uint8Array(t))}async end(){this.pieces.push(new Uint8Array(1024))}}async function wr(e,n,r,i){const s=new yr;await async function(t,e){for(const n of t){if(!n.file)throw new Error("Invalid collection item");e.beginFile(n.path,n.file.size),await e.appendFile(new Uint8Array(await J(n.file))),await e.endFile()}}(n,s),await s.end();return await t(e,{method:"post",url:"bzz",data:s.output,responseType:"json",headers:{"content-type":"application/x-tar","swarm-collection":"true",...Vn(r,i)}})}const gr="bzz";async function mr(e,n,r,i,a){const o=await t(e,{method:"post",url:gr,data:n,headers:Vn(r,a),params:{name:i},responseType:"json"});return{reference:S.parse(o.data).reference,tagUid:o.headers["swarm-tag"]?k(o.headers["swarm-tag"]):void 0,historyAddress:o.headers["swarm-act-history-address"]?s.Optional.of(new m(o.headers["swarm-act-history-address"])):s.Optional.empty()}}async function br(t,e,n,r){lr(e);const i=await wr(t,e,n,r);return{reference:S.parse(i.data).reference,tagUid:i.headers["swarm-tag"]?k(i.headers["swarm-tag"]):void 0,historyAddress:i.headers["swarm-act-history-address"]?s.Optional.of(new m(i.headers["swarm-act-history-address"])):s.Optional.empty()}}class vr{constructor(t){this.context=t}async upload(t,e,n,r){const i=new p(t);return lr(e),n&&(n=Z.parse(n)),br(this.context.getRequestOptionsForCall(r),e,i,n)}async uploadFromFileList(t,e,n,r){const i=new p(t);n&&(n=Z.parse(n));const s=function(t){return Array.from(t).map(t=>({path:hr(t),size:t.size,file:t}))}(e);return br(this.context.getRequestOptionsForCall(r),s,i,n)}async uploadFromDirectory(t,e,n,r){const i=new p(t);n&&(n=Z.parse(n));const s=await async function(){throw new Error("Creating Collection from File System is not supported in browsers!")}();return br(this.context.getRequestOptionsForCall(r),s,i,n)}async stream(t,e,n,r,i){const a=new p(t);return async function(t,e,n,r,i,a){const o=a?.signal;if(o?.aborted)throw new Error("Request aborted");const c=new s.AsyncQueue(64,64);let d=0,u=0;for(const t of e)d+=ur(t.size);async function l(e){if(!o?.aborted)try{await t.chunk.upload(n,e.build(),i,a),r?.({total:d,processed:++u})}catch(t){if(o?.aborted)return;throw t}}async function h(t){for(const{chunk:e}of t)await c.enqueue(async()=>l(e));return[]}n=new p(n);const f=new dr;for(const t of e){if(o?.aborted)throw new Error("Request aborted");const e=await new Promise((e,n)=>{const r=new G(h);let i=0;const s=new FileReader;s.onerror=()=>{n(s.error)};const a=async()=>{if(o?.aborted)return void n(new Error("Request aborted"));if(i>=t.size){const t=await r.finalize();return await c.enqueue(async()=>l(t)),void e(t)}const a=t.slice(i,i+4096);s.readAsArrayBuffer(a)};s.onload=async t=>{if(!t.target)return void n("No event target");const e=t.target.result;e&&(await r.append(new Uint8Array(e)),i+=4096),a()},a()});await c.drain();const{filename:n,extension:r}=s.Strings.parseFilename(t.name);f.addFork(hr(t),e.hash(),{"Content-Type":fr(pr[r.toLowerCase()]||"application/octet-stream"),Filename:n}),"index.html"===t.name&&f.addFork("/",V,{"website-index-document":"index.html"})}if(o?.aborted)throw new Error("Request aborted");return f.saveRecursively(t,n,i,a)}(this.context.bee,e,a,n,r,this.context.getRequestOptionsForCall(i))}async streamFromDirectory(t,e,n,r,i){new p(t);return async function(){throw new Error("Streaming directories is not supported in browsers!")}(this.context.bee,0,0,0,0,this.context.getRequestOptionsForCall(i))}async hashDirectory(t){return async function(){throw new Error("Hashing directories is not supported in browsers!")}()}}const Sr="peers";class kr{constructor(t){this.context=t}async checkConnection(e){return async function(e){await t(e,{url:"",responseType:"text"})}(this.context.getRequestOptionsForCall(e))}async isConnected(t){try{await this.checkConnection(t)}catch{return!1}return!0}async isGateway(e){try{return await async function(e){const n=await t(e,{url:"/gateway"});return Y.parse(n.data).gateway}(this.context.getRequestOptionsForCall(e))}catch{return!1}}async getNodeAddresses(e){return async function(e){const n=await t(e,{url:"addresses",responseType:"json"});return _.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getBlocklist(e){return async function(e){const n=await t(e,{url:"blocklist",responseType:"json"});return Q.parse(n.data).peers}(this.context.getRequestOptionsForCall(e))}async getPeers(e){return async function(e){const n=await t(e,{url:Sr,responseType:"json"});return X.parse(n.data).peers}(this.context.getRequestOptionsForCall(e))}async removePeer(e,n){const r=new B(e);return async function(e,n){return(await t(e,{url:`${Sr}/${n}`,responseType:"json",method:"DELETE"})).data}(this.context.getRequestOptionsForCall(n),r)}async getTopology(e){return async function(e){const n=await t(e,{url:"topology",responseType:"json"});return tt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async ping(e,n){const r=new B(e);return async function(e,n){return(await t(e,{url:`pingpong/${n}`,responseType:"json",method:"POST"})).data}(this.context.getRequestOptionsForCall(n),r)}}const xr="bytes";async function Ir(e,n,r,i){const a=await t(e,{url:xr,method:"post",responseType:"json",data:n,headers:{"content-type":"application/octet-stream",...Vn(r,i)}});return{reference:S.parse(a.data).reference,tagUid:a.headers["swarm-tag"]?k(a.headers["swarm-tag"]):void 0,historyAddress:a.headers["swarm-act-history-address"]?s.Optional.of(new m(a.headers["swarm-act-history-address"])):s.Optional.empty()}}async function Ar(e,n,r){r&&(r=j.parse(r));const i=await t(e,{responseType:"arraybuffer",url:`${xr}/${n}`,headers:Vn(null,r)});return new A(i.data)}const Cr="stewardship";class Ur{constructor(t){this.raw=t}toString(){const t=nt().safeParse(this.raw);return t.success&&t.data.includes(".eth")?t.data:new m(this.raw).toHex()}}class Pr{constructor(t){this.context=t}async upload(t,e,n,r){const i=new p(t);return rt(e),n&&(n=it.parse(n)),Ir(this.context.getRequestOptionsForCall(r),e,i,n)}async download(t,e,n){return e&&(e=j.parse(e)),Ar(this.context.getRequestOptionsForCall(n),new Ur(t),e)}async downloadReadable(e,n,r){return n&&(n=j.parse(n)),async function(e,n,r){return r&&(r=j.parse(r)),(await t(e,{responseType:"stream",url:`${xr}/${n}`,headers:Vn(null,r)})).data}(this.context.getRequestOptionsForCall(r),new Ur(e),n)}async probe(e,n){const r=new m(e);return async function(e,n){const r=await t(e,{url:`${xr}/${n}`,method:"head",responseType:"json"});return{contentLength:parseInt(r.headers["content-length"])}}(this.context.getRequestOptionsForCall(n),r)}async isRetrievable(e,n){const r=new m(e);return async function(e,n){const r=await t(e,{method:"get",responseType:"json",url:`${Cr}/${n}`});return et.parse(r.data).isRetrievable}(this.context.getRequestOptionsForCall(n),r)}}const Er="feeds";function $r(t){const e=t["swarm-feed-index"],n=t["swarm-feed-index-next"];if(!e)throw new v("Response did not contain expected swarm-feed-index!");if(!n)throw new v("Response did not contain expected swarm-feed-index-next!");return{feedIndex:new st(e),feedIndexNext:new st(n)}}async function Dr(e,n,r,i){const s=await t(e,{responseType:"arraybuffer",url:`${Er}/${n}/${r}`,params:{...i}});return{payload:new A(s.data),...$r(s.headers)}}function Br(t,e){return e="number"==typeof e?st.fromBigInt(BigInt(e)):e,new x(at(A.concat(t.toUint8Array(),e.toUint8Array())))}async function Tr(t,e,n){try{const r=await Dr(t,e,n);if(!r.feedIndexNext)throw Error("Feed index next is not defined. This should happen when fetching an exact index.");return r.feedIndexNext}catch(t){if(t instanceof ut)return st.fromBigInt(0n);throw t}}async function Or(t,e,n,r,i,s){const a=Br(n,s?.index??await Tr(t,e.publicKey().address(),n));if(r.length>4096){const n=await Ir(t,r,i,s);return async function(t,e,n,r,i,s){return e=new I(e),r=new x(r),_n(t,i.toSingleOwnerChunk(r,e),n,s)}(t,e,i,a,ct(await Zn(t,n.reference)),s)}const o=nt().safeParse(r);return Qn(t,e,i,a,o.success?A.fromUtf8(o.data).toUint8Array():r,s)}function Mr(t,e,n){const r=Br(e,n);return new m(at(A.concat(r.toUint8Array(),t.toUint8Array())))}async function Rr(t,e,n,r,i=!1){const a=Mr(e,n,r="number"==typeof r?st.fromBigInt(BigInt(r)):r),o=Yn(await Zn(t,a.toHex()),a);let c=s.Optional.empty();if(i){const t=A.fromSlice(o.payload.toUint8Array(),0,8);c=s.Optional.of(Number(ot(t.toUint8Array(),"BE")))}return{timestamp:c,payload:new A(o.payload.offset(i?8:0))}}async function Fr(t,e,n,r){const i=Mr(e,n,r="number"==typeof r?st.fromBigInt(BigInt(r)):r),s=Yn(await Zn(t,i),i);return E(s.payload,s.span)}function qr(e,n,r){const i=async t=>{if(void 0===t?.index)return Dr(e,r,n);const i=await Rr(e,r,n,t.index,t.hasTimestamp??!0),s="number"==typeof t.index?st.fromBigInt(BigInt(t.index)):t.index;return{payload:i.payload,feedIndex:s,feedIndexNext:s.next()}};return{download:i,downloadPayload:async t=>{if(void 0===t?.index)return Dr(e,r,n);const i=await Fr(e,r,n,t.index),s=i.span.toBigInt()<=4096n?i.payload:await Ar(e,new Ur(i.address)),a="number"==typeof t.index?st.fromBigInt(BigInt(t.index)):t.index;return{payload:s,feedIndex:a,feedIndexNext:a.next()}},downloadReference:async s=>{let a=s?.index;void 0===a&&(a=(await async function(e,n,r){return $r((await t(e,{responseType:"arraybuffer",url:`${Er}/${n}/${r}`,params:{"Swarm-Only-Root-Chunk":!0}})).headers)}(e,r,n)).feedIndex);const o=await i({...s,index:a});return{reference:new m(o.payload.toUint8Array()),feedIndex:o.feedIndex,feedIndexNext:o.feedIndexNext??o.feedIndex.next()}},owner:r,topic:n}}function Lr(t,e,n){const r=async(r,i,s)=>async function(t,e,n,r,i,s){r=new m(r);const a=Br(n,s?.index??await Tr(t,e.publicKey().address(),n)),o=s?.at??Date.now()/1e3,c=dt(BigInt(Math.floor(o)),"BE");return Qn(t,e,i,a,A.concat(c,r.toUint8Array()),s)}(t,n,e,i,r,s);return{...qr(t,e,n.publicKey().address()),upload:r,uploadReference:r,uploadPayload:async(r,i,s)=>Or(t,n,e,i,r,s)}}async function Kr(t,e,n,r,i,a){const o=function(t,e,n){const r=n.toBigInt(),i=[];for(let n=0n;n<=r;n++)i.push(Mr(t,e,st.fromBigInt(n)));return i}(e,n,r).map(async e=>async function(t,e,n,r){try{return await t.chunk.download(e,n,r),!0}catch(t){const e=s.Objects.getDeep(t,"status");if(404===e||500===e)return!1;throw t}}(t,e,i,a));return(await Promise.all(o)).every(t=>t)}class Nr{constructor(t){this.context=t}makeReader(t,e,n){return qr(this.context.getRequestOptionsForCall(n),new lt(t),new r(e))}makeWriter(t,e,n){const r=e?new I(e):this.context.signer;if(!r)throw Error("No signer provided");return Lr(this.context.getRequestOptionsForCall(n),new lt(t),r)}async createManifest(e,n,i,s,a){const o=new p(e),c=new lt(n),d=new r(i);return s&&(s=K.parse(s)),async function(e,n,r,i,s){const a=await t(e,{method:"post",responseType:"json",url:`${Er}/${n}/${r}`,headers:Vn(i,s)});return S.parse(a.data).reference}(this.context.getRequestOptionsForCall(a),d,c,o,s)}async fetchLatestUpdate(t,e,n){return Dr(this.context.getRequestOptionsForCall(n),new r(e),new lt(t))}async isRetrievable(t,e,n,i,a){const o=new r(t),c=new lt(e);if(i&&(i=j.parse(i)),!n)try{return await this.makeReader(c,o,a).download(),!0}catch(t){const e=s.Objects.getDeep(t,"status");if(404===e||500===e)return!1;throw t}return Kr(this.context.bee,o,c,n,i,this.context.getRequestOptionsForCall(a))}}class Hr{constructor(t){this.context=t}async upload(t,e,n,r,i){const s=new p(t);if(ht(e),r&&(r=pt.parse(r)),n&&"string"!=typeof n)throw new TypeError("name has to be string or undefined!");if(ft(e)){const t=await J(e),a=n??e.name,o=e.type,c={...r,contentType:o};return mr(this.context.getRequestOptionsForCall(i),t,s,a,c)}return mr(this.context.getRequestOptionsForCall(i),e,s,n,r)}async download(e,n="",r,i){return r&&(r=j.parse(r)),async function(e,n,r="",i){const s=await t(e,{method:"GET",responseType:"arraybuffer",url:`${gr}/${n}/${r}`,headers:Vn(null,i)});return{...Gn(s.headers),data:new A(s.data)}}(this.context.getRequestOptionsForCall(i),new Ur(e),n,r)}async downloadReadable(e,n="",r,i){const s=new m(e);return r&&(r=j.parse(r)),async function(e,n,r="",i){n=new m(n);const s=await t(e,{method:"GET",responseType:"stream",url:`${gr}/${n}/${r}`,headers:Vn(null,i)});return{...Gn(s.headers),data:s.data}}(this.context.getRequestOptionsForCall(i),s,n,r)}}const Wr="grantee";class jr{constructor(t){this.context=t}async create(e,n,r){const i=new p(e),s=n.map(t=>new g(t));return async function(e,n,r){const i=await t(e,{method:"post",url:Wr,data:{grantees:r.map(t=>t.toCompressedHex())},headers:Vn(n),responseType:"json"}),s=yt.parse(i.data);return{status:i.status,statusText:i.statusText,ref:s.ref,historyref:s.historyref}}(this.context.getRequestOptionsForCall(r),i,s)}async get(e,n){const r=new m(e);return async function(e,n){const r=await t(e,{method:"get",url:`${Wr}/${n}`,responseType:"json"});return{status:r.status,statusText:r.statusText,grantees:wt.parse(r.data)}}(this.context.getRequestOptionsForCall(n),r)}async patch(e,n,r,i,s){const a=new p(e),o=new m(n),c=new m(r),d={add:i.add?.map(t=>new g(t))??[],revoke:i.revoke?.map(t=>new g(t))??[]};return async function(e,n,r,i,s){const a=await t(e,{method:"patch",url:`${Wr}/${r}`,data:{add:s.add.map(t=>t.toCompressedHex()),revoke:s.revoke.map(t=>t.toCompressedHex())},headers:{...Vn(n),"swarm-act-history-address":i.toHex()},responseType:"json"}),o=yt.parse(a.data);return{status:a.status,statusText:a.statusText,ref:o.ref,historyref:o.historyref}}(this.context.getRequestOptionsForCall(s),a,o,c,d)}}async function zr(t){if("string"==typeof t)return(new TextEncoder).encode(t);if(t instanceof ArrayBuffer)return new Uint8Array(t);if(t instanceof Blob)return new Uint8Array(await new Response(t).arrayBuffer());throw new TypeError("unknown websocket data type")}class Gr{constructor(t){this.context=t,this.cancelled=new WeakSet}async pssSend(e,n,r,i,s,a){const o=new p(e);rt(i);const c=s?new g(s):void 0;await async function(e,n,r,i,s,a){await t(e,{method:"post",url:`pss/send/${r}/${i}`,data:s,responseType:"json",params:{recipient:a},headers:Vn(n)})}(this.context.getRequestOptionsForCall(a),o,n,r,i,c)}pssSubscribe(t,e){e=gt.parse(e);const n=this.openWebSocket(`pss/subscribe/${t.toHex()}`),r={topic:t,cancel:this.makeCancel(n)};return n.onmessage=async t=>{const n=await zr(t.data);n.length&&e.onMessage(new A(n),r)},n.onerror=t=>{this.isCancelled(n)||e.onError(new v(t.message),r)},n.onclose=()=>{e.onClose(r)},r}async pssReceive(t,e=0){if("number"!=typeof e)throw new TypeError("timeoutMsc parameter has to be a number!");return new Promise((n,r)=>{let i;const s=this.pssSubscribe(t,{onError:t=>{clearTimeout(i),s.cancel(),r(t.message)},onMessage:t=>{clearTimeout(i),s.cancel(),n(t)},onClose:()=>{clearTimeout(i),s.cancel()}});e>0&&(i=setTimeout(()=>{s.cancel(),r(new v("pssReceive timeout"))},e))})}gsocMine(t,e,n=12){const r=new B(t),i=new x(e);for(let t=0n;t<0xffffn;t++){const e=new I(mt(2867n+t)),a=P(i,e.publicKey().address());if(256-s.Binary.proximity(a.toUint8Array(),r.toUint8Array())<=256-n)return e}throw Error("Could not mine a valid signer")}async gsocSend(t,e,n,r,i,s){const a=new p(t),o=new I(e),c=new x(n),d=E(r).toSingleOwnerChunk(c,o);return _n(this.context.getRequestOptionsForCall(s),d,a,i)}gsocSubscribe(t,e,n){const i=new r(t),s=new x(e);n=bt.parse(n);const a=P(s,i),o=this.openWebSocket(`gsoc/subscribe/${a.toHex()}`),c={address:i,cancel:this.makeCancel(o)};return o.onmessage=async t=>{const e=await zr(t.data);e.length&&n.onMessage(new A(e),c)},o.onerror=t=>{this.isCancelled(o)||n.onError(new v(t.message),c)},o.onclose=()=>{n.onClose(c)},c}openWebSocket(t){const e=this.context.url.replace(/^http/i,"ws");return"browser"===s.System.whereAmI()?new vt(`${e}/${t}`):new vt(`${e}/${t}`,{headers:this.context.getRequestOptionsForCall().headers})}makeCancel(t){return()=>{this.cancelled.has(t)||(this.cancelled.add(t),t.terminate?t.terminate():t.close())}}isCancelled(t){return this.cancelled.has(t)}}const Vr="pins";class Jr{constructor(t){this.context=t}async add(e,n){const r=new m(e);await async function(e,n){await t(e,{method:"post",responseType:"json",url:`${Vr}/${n}`})}(this.context.getRequestOptionsForCall(n),r)}async remove(e,n){const r=new m(e);await async function(e,n){await t(e,{method:"delete",responseType:"json",url:`${Vr}/${n}`})}(this.context.getRequestOptionsForCall(n),r)}async getAll(e){return async function(e){const n=await t(e,{method:"get",responseType:"json",url:Vr}),{references:r}=St.parse(n.data);return(r??[]).map(t=>new m(t))}(this.context.getRequestOptionsForCall(e))}async get(e,n){const r=new m(e);return async function(e,n){const r=await t(e,{method:"get",responseType:"json",url:`${Vr}/${n}`});return S.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async reuploadData(e,n,r){const i=new p(e),s=new m(n);await async function(e,n,r){await t(e,{method:"put",url:`${Cr}/${r}`,headers:{"swarm-postage-batch-id":n.toHex()}})}(this.context.getRequestOptionsForCall(r),i,s)}}const Zr="settlements";class Yr{constructor(t){this.context=t}async get(e,n){const r=new B(e);return async function(e,n){const r=await t(e,{url:`${Zr}/${n}`,responseType:"json"});return kt.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getAll(e){return async function(e){const n=await t(e,{url:Zr,responseType:"json"});return xt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}}class _r{constructor(t){this.context=t}makeReader(t,e){const n=new r(t);return{owner:n,download:Xn.bind(null,this.context.getRequestOptionsForCall(e),n)}}makeWriter(t,e){const n=t?new I(t):this.context.signer;if(!n)throw Error("No signer provided");return{...this.makeReader(n.publicKey().address(),e),upload:Qn.bind(null,this.context.getRequestOptionsForCall(e),n)}}}const Qr="stake";class Xr{constructor(t){this.context=t}async get(e){return async function(e){const n=await t(e,{method:"get",responseType:"json",url:Qr});return It.parse(n.data).stakedAmount}(this.context.getRequestOptionsForCall(e))}async getWithdrawable(e){return async function(e){const n=await t(e,{method:"get",responseType:"json",url:`${Qr}/withdrawable`});return At.parse(n.data).withdrawableAmount}(this.context.getRequestOptionsForCall(e))}async deposit(e,n,r){const i=e instanceof d?e.toPLURString():a(e,{min:1n,name:"amount"});return n&&(n=L.parse(n)),async function(e,n,r){const i=await t(e,{method:"post",responseType:"json",url:`${Qr}/${n}`,headers:Vn(null,r)});return Ct.parse(i.data).txHash}(this.context.getRequestOptionsForCall(r),i,n)}async withdrawSurplus(e){return async function(e){const n=await t(e,{method:"delete",responseType:"json",url:`${Qr}/withdrawable`});return Ct.parse(n.data).txHash}(this.context.getRequestOptionsForCall(e))}async migrate(e){return async function(e){const n=await t(e,{method:"delete",responseType:"json",url:Qr});return Ct.parse(n.data).txHash}(this.context.getRequestOptionsForCall(e))}async getRedistributionState(e){return async function(e){const n=await t(e,{method:"get",responseType:"json",url:"redistributionstate"});return Ut.parse(n.data)}(this.context.getRequestOptionsForCall(e))}}const ti="stamps";const ei="batches";class ni{constructor(t){this.context=t}async create(e,n,r,i){const s=a(e,{min:0n,name:"amount"});if(r&&(r=Ot.parse(r)),n<Mt||n>Rt)throw new H(`Depth has to be between ${Mt}..${Rt}`,n);const o=await this.context.bee.status.getChainState(),c=17280n*BigInt(o.currentPrice)+1n;if(BigInt(s)<c)throw new H(`Amount has to be at least ${c} (1 day at current price ${o.currentPrice})`,s);const d=await async function(e,n,r,i,s,a){const o={};s&&(o["gas-price"]=s),void 0!==a&&(o.immutable=String(a));const c=await t(e,{method:"post",url:`${ti}/${n}/${r}`,responseType:"json",params:{label:i},headers:o});return Pt.parse(c.data).batchID}(this.context.getRequestOptionsForCall(i),s,n,r?.label,r?.gasPrice?.toString(),r?.immutableFlag);return!1!==r?.waitForUsable&&await this.waitForUsable(d,r?.waitForUsableTimeout),d}async updateLabel(e,n,r){const i=new p(e);await async function(e,n,r){await t(e,{method:"patch",url:`${ti}/${n}`,responseType:"json",data:{label:r}})}(this.context.getRequestOptionsForCall(r),i,n)}async calculateTopUpForBZZ(t,e,n){const r=await this.context.bee.status.getChainState(n),i="gnosis"===this.context.network?5:15,s=e.toPLURBigInt()/2n**BigInt(t),c=function(t,e,n){const r=BigInt(a(t));return o.fromSeconds(Number(r*BigInt(n)/BigInt(e)))}(s,r.currentPrice,i);return{amount:s,duration:c}}async topUp(e,n,r){const i=new p(e),s=a(n,{min:1n,name:"amount"});return async function(e,n,r){const i=await t(e,{method:"patch",url:`${ti}/topup/${n}/${r}`,responseType:"json"});return Pt.parse(i.data).batchID}(this.context.getRequestOptionsForCall(r),i,s)}async dilute(e,n,r){const i=new p(e),s=Ft().int().min(18).max(255).parse(n);return async function(e,n,r){const i=await t(e,{method:"patch",url:`${ti}/dilute/${n}/${r}`,responseType:"json"});return Pt.parse(i.data).batchID}(this.context.getRequestOptionsForCall(r),i,s)}async get(e,n,r,i){const s=new p(e);return async function(e,n,r,i){const s=await t(e,{method:"get",url:`${ti}/${n}`,responseType:"json"});return zn(Et.parse(s.data),r,i)}(this.context.getRequestOptionsForCall(n),s,r,i)}async getGlobal(e,n){const r=new p(e);return async function(e,n){const r=await t(e,{method:"get",url:`${ei}/${n}`,responseType:"json"});return Bt.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getBuckets(e,n){const r=new p(e);return async function(e,n){const r=await t(e,{method:"get",url:`${ti}/${n}/buckets`,responseType:"json"});return $t.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getAll(e){return async function(e){const n=await t(e,{method:"get",url:ti,responseType:"json"});return Dt.parse(n.data).stamps.map(t=>zn(t))}(this.context.getRequestOptionsForCall(e))}async getAllGlobal(e){return async function(e){const n=await t(e,{method:"get",url:ei,responseType:"json"});return Tt.parse(n.data).batches}(this.context.getRequestOptionsForCall(e))}async waitForUsable(t,e=24e4){for(let n=0;n<e;n+=3e3){try{if((await this.get(t)).usable)return}catch{}await s.System.sleepMillis(3e3)}throw new v("Timeout on waiting for postage stamp to become usable")}}class ri{constructor(t){this.context=t}async get(e){return async function(e){const n=await t(e,{method:"get",url:"status",responseType:"json"});return qt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getHealth(e){return async function(e){const n=await t(e,{method:"get",url:"health",responseType:"json"});return Lt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getReadiness(e){return async function(e){const n=await t(e,{method:"get",url:"readiness"});return Kt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getNodeInfo(e){return async function(e){const n=await t(e,{method:"get",url:"node",responseType:"json"});return Nt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async isSupportedExactVersion(t){const{version:e}=await this.getHealth(t);return e===jt}async isSupportedApiVersion(t){const{apiVersion:e}=await this.getHealth(t);return zt(e)===zt(Gt)}async getVersions(t){const{version:e,apiVersion:n}=await this.getHealth(t);return{supportedBeeVersion:jt,supportedBeeApiVersion:Gt,beeVersion:e,beeApiVersion:n}}async getReserveState(e){return async function(e){const n=await t(e,{method:"get",url:"reservestate",responseType:"json"});return Ht.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getChainState(e){return async function(e){const n=await t(e,{method:"get",url:"chainstate",responseType:"json"});return Wt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}}class ii{constructor(t){this.context=t}get blockTime(){return"gnosis"===this.context.network?5:15}async buy(t,e,n,r,i,s){const a=Wn(e,(await this.context.bee.status.getChainState(r)).currentPrice,this.blockTime),o=jn(t,i,s);return n&&(n=Ot.parse(n)),this.context.bee.stamp.create(a,o,n,r)}async getCost(t,e,n,r,i){const s=Wn(e,(await this.context.bee.status.getChainState(n)).currentPrice,this.blockTime);return Hn(jn(t,r,i),s)}async extend(t,e,n,r,i,s){const a=await this.context.bee.stamp.get(t,r),o=jn(e,i,s),c=await this.context.bee.status.getChainState(r),d=o-a.depth,u=d<=0?1n:2n**BigInt(d),l=Wn(n,c.currentPrice,this.blockTime),h=Wn(a.duration,c.currentPrice,this.blockTime),p=(n.isZero()?h*u:(h+l)*u)-h;let f;if(p>0n&&(f=await this.context.bee.stamp.topUp(a.batchID,p,r)),d>0)return this.context.bee.stamp.dilute(a.batchID,o,r);if(!f)throw new Error("Nothing to extend, both size and duration are already sufficient");return f}async extendSize(t,e,n,r,i){const s=await this.context.bee.status.getChainState(n),a=await this.context.bee.stamp.get(t,n),o=jn(e,r,i),c=o-a.depth;if(c<=0)throw new H("New depth has to be greater than the original depth",o);const d=Wn(a.duration,s.currentPrice,this.blockTime);return await this.context.bee.stamp.topUp(a.batchID,d*(2n**BigInt(c)-1n)+1n,n),this.context.bee.stamp.dilute(a.batchID,o,n)}async extendDuration(t,e,n){const r=await this.context.bee.stamp.get(t,n),i=Wn(e,(await this.context.bee.status.getChainState(n)).currentPrice,this.blockTime);return this.context.bee.stamp.topUp(r.batchID,i,n)}async getExtensionCost(t,e,n,r,i,s){const a=await this.context.bee.stamp.get(t,r),o=await this.context.bee.status.getChainState(r),c=n.isZero()?0n:Wn(n,o.currentPrice,this.blockTime),d=jn(e,i,s),u=Wn(a.duration,o.currentPrice,this.blockTime),l=Hn(a.depth,u);return Hn(Math.max(a.depth,d),u+c).minus(l)}async getSizeExtensionCost(t,e,n,r,i){const s=await this.context.bee.stamp.get(t,n),a=await this.context.bee.status.getChainState(n),o=jn(e,r,i);if(o-s.depth<=0)throw new H("New depth has to be greater than the original depth",o);const c=Wn(s.duration,a.currentPrice,this.blockTime),d=Hn(s.depth,c);return Hn(o,c).minus(d)}async getDurationExtensionCost(t,e,n){const r=await this.context.bee.stamp.get(t,n),i=Wn(e,(await this.context.bee.status.getChainState(n)).currentPrice,this.blockTime);return Hn(r.depth,i)}async rename(t,e,n){return this.context.bee.stamp.updateLabel(t,e,n)}}const si="tags";class ai{constructor(t){this.context=t}async create(e){return async function(e){const n=await t(e,{method:"post",url:si,responseType:"json"});return Vt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getAll(e,n){return e&&(e=Zt.parse(e)),async function(e,n){const r=await t(e,{url:si,params:{offset:n?.offset,limit:n?.limit},responseType:"json"});return Jt.parse(r.data).tags}(this.context.getRequestOptionsForCall(n),e)}async get(e,n){const r=k(e);return async function(e,n){const r=await t(e,{url:`${si}/${n}`,responseType:"json"});return Vt.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async delete(e,n){const r=k(e);await async function(e,n){await t(e,{method:"delete",url:`${si}/${n}`})}(this.context.getRequestOptionsForCall(n),r)}async update(e,n,r){const i=new m(n),s=k(e);await async function(e,n,r){await t(e,{method:"patch",url:`${si}/${n}`,data:{reference:r}})}(this.context.getRequestOptionsForCall(r),s,i)}}const oi="transactions";class ci{constructor(t){this.context=t}async getAll(e){return async function(e){const n=await t(e,{url:oi,responseType:"json"});return Yt.parse(n.data).pendingTransactions}(this.context.getRequestOptionsForCall(e))}async get(e,n){const r=new Xt(e);return async function(e,n){const r=await t(e,{url:`${oi}/${n}`,responseType:"json"});return _t.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async rebroadcast(e,n){const r=new Xt(e);return async function(e,n){const r=await t(e,{method:"post",url:`${oi}/${n}`,responseType:"json"});return Qt.parse(r.data).transactionHash}(this.context.getRequestOptionsForCall(n),r)}async cancel(e,n,r){const i=new Xt(e),s=n?a(n,{min:0n,name:"gasPrice"}):void 0;return async function(e,n,r){const i={};r&&(i["gas-price"]=r);const s=await t(e,{method:"delete",headers:i,url:`${oi}/${n}`,responseType:"json"});return Qt.parse(s.data).transactionHash}(this.context.getRequestOptionsForCall(r),i,s)}}const di="wallet";class ui{constructor(t){this.context=t}async getBalance(e){return async function(e){const n=await t(e,{method:"get",url:di,responseType:"json"});return te.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async withdrawBZZ(e,n,i){const s=e instanceof d?e:d.fromPLUR(e),a=new r(n);return async function(e,n,r){const i=await t(e,{method:"post",url:`${di}/withdraw/bzz`,responseType:"json",params:{amount:n.toPLURString(),address:r.toHex()}});return ee.parse(i.data).transactionHash}(this.context.getRequestOptionsForCall(i),s,a)}async withdrawDAI(e,n,i){const s=e instanceof ne?e:ne.fromWei(e),a=new r(n);return async function(e,n,r){const i=await t(e,{method:"post",url:`${di}/withdraw/nativetoken`,responseType:"json",params:{amount:n.toWeiString(),address:r.toHex()}});return ee.parse(i.data).transactionHash}(this.context.getRequestOptionsForCall(i),s,a)}}const li=["1","7","9","11","13","15","17","19","20","21","22","23","25","37","42","43","53","69","77","79","87","95","101","102","103","104","109","110","111","113","115","117","119","123","135","137","139","143","161","179","389","427","465","512","513","514","515","526","530","531","532","540","548","554","556","563","587","601","636","989","990","993","995","1719","1720","1723","2049","3659","4045","4190","5060","5061","6000","6566","6665","6666","6667","6668","6669","6679","6697","10080"];function hi(t){if(!function(t){try{if("string"!=typeof t)return!1;const e=new URL(t);return"http:"===e.protocol||"https:"===e.protocol}catch(t){return!1}}(t))throw new H("URL is not valid!",t);const e=new URL(t).port;if(e&&!function(t){if("string"!=typeof t)return!1;if(li.includes(t))return!1;const e=parseInt(t,10);return e>0&&e<65536&&!isNaN(e)}(e))throw new H("Port in URL is considered bad port and cannot be used!",e)}class pi{constructor(t,e){hi(t),this.url=function(t){return t.endsWith("/")?t.slice(0,-1):t}(t),e?.signer&&(this.signer=new I(e.signer)),this.network=e?.network??"gnosis",this.requestOptions={baseURL:this.url,timeout:e?.timeout??0,headers:e?.headers,onRequest:e?.onRequest,httpAgent:e?.httpAgent,httpsAgent:e?.httpsAgent};const n={getRequestOptionsForCall:t=>this.getRequestOptionsForCall(t),url:this.url,signer:this.signer,network:this.network,bee:this};this.balance=new nr(n),this.settlement=new Yr(n),this.transaction=new ci(n),this.stake=new Xr(n),this.connectivity=new kr(n),this.status=new ri(n),this.wallet=new ui(n),this.stamp=new ni(n),this.storage=new ii(n),this.chequebook=new sr(n),this.cheque=new ir(n),this.tag=new ai(n),this.pin=new Jr(n),this.grantee=new jr(n),this.messaging=new Gr(n),this.feed=new Nr(n),this.soc=new _r(n),this.data=new Pr(n),this.chunk=new ar(n),this.file=new Hr(n),this.collection=new vr(n)}makeContentAddressedChunk(t,e){return E(t,e)}unmarshalContentAddressedChunk(t){return ct(t)}makeSingleOwnerChunk(t,e,n,r,i){return function(t,e,n,r,i){r=new x(r),i=new I(i);const s={data:A.concat(e.toUint8Array(),n.toUint8Array()),span:e,payload:n,address:t};return C(s,r,i.toBigInt())}(t,e,n,r,i)}calculateSingleOwnerChunkAddress(t,e){return P(t,e)}unmarshalSingleOwnerChunk(t,e){return Yn(t,e)}async createEnvelope(i,s,a){return i=new p(i),s=new m(s),async function(i,s,a){const o=await t(i,{method:"post",responseType:"json",url:`envelope/${a}`,headers:{"swarm-postage-batch-id":s.toHex()}}),c=e.parse(o.data);return{issuer:new r(c.issuer),index:c.index,timestamp:c.timestamp,signature:new n(c.signature),batchId:s}}(this.getRequestOptionsForCall(a),i,s)}async rchash(e,n,r,s){return async function(e,n,r,s){const a=await t(e,{responseType:"json",url:`rchash/${n}/${r}/${s}`});return i.parse(a.data).durationSeconds}(this.getRequestOptionsForCall(s),e,n,r)}getRequestOptionsForCall(t){return t&&(t=re.parse(t)),t?s.Objects.deepMerge2(this.requestOptions,t):this.requestOptions}}const fi=4096;function yi(t){if(0===t.length)return[new Uint8Array(0)];const e=[];for(let n=0;n<t.length;n+=fi)e.push(t.slice(n,Math.min(n+fi,t.length)));return e}const wi=ie.omit({appSecret:!0,connectedUntil:!0,stampPending:!0,chatBinding:!0}),gi=se({type:oe("account-delta"),snapshot:ae.extend({connectedApps:ce(wi)})}),mi=de().min(1).max(100),bi=de().regex(/^[0-9a-f]{8}$/),vi=le("type",[he,gi,se({type:oe("lease-request"),accountId:de().length(40),batchId:de().length(64),fromDeviceId:mi,requestId:bi}),se({type:oe("lease-claim"),accountId:de().length(40),batchId:de().length(64),fromDeviceId:mi,requestId:bi}),se({type:oe("lease-released"),accountId:de().length(40),batchId:de().length(64),partition:ue().int().min(0),fromDeviceId:mi,requestId:bi.optional()}),se({type:oe("presence"),accountId:de().length(40),fromDeviceId:mi})]);class Si{constructor(t){this.local=!0,this.handlers=new Set,this.channelName=function(t){return`swarm-id-bus-v1:${t}`}(t),this.channel=new BroadcastChannel(this.channelName),this.channel.onmessage=t=>{for(const e of this.handlers)e(t.data)}}publish(t){this.channel.postMessage(t)}subscribe(t){return this.handlers.add(t),()=>this.handlers.delete(t)}close(){this.handlers.clear(),this.channel.close()}}class ki{constructor(t){this.handlers=new Set,this.peerLeftHandlers=new Set,this.closed=!1,this.transports=t,this.transportUnsubscribers=t.flatMap(t=>this.listenTo(t))}listenTo(t){const e=[t.subscribe((t,e)=>this.dispatch(t,e))],n=t.onPeerLeft?.(t=>{for(const e of this.peerLeftHandlers)try{e(t)}catch(t){console.error("[AccountBus] Peer-left handler error:",t)}});return n&&e.push(n),e}publish(t,e){if(!this.closed)for(const n of this.transports)e?.localOnly&&!n.local||n.publish(t)}addTransport(t){if(this.closed)return t.close(),()=>{};this.transports.push(t);const e=this.listenTo(t);return this.transportUnsubscribers.push(...e),()=>{for(const t of e)t();t.close(),this.transports=this.transports.filter(e=>e!==t),this.transportUnsubscribers=this.transportUnsubscribers.filter(t=>!e.includes(t))}}subscribe(t){return this.handlers.add(t),()=>this.handlers.delete(t)}onPeerLeft(t){return this.peerLeftHandlers.add(t),()=>this.peerLeftHandlers.delete(t)}close(){this.closed=!0;for(const t of this.transportUnsubscribers)t();this.transportUnsubscribers=[],this.handlers.clear(),this.peerLeftHandlers.clear();for(const t of this.transports)t.close();this.transports=[]}dispatch(t,e){const n=vi.safeParse(t);if(n.success)for(const t of this.handlers)try{t(n.data,e)}catch(t){console.error("[AccountBus] Handler error:",t)}}}const xi=se({version:ue().int().nonnegative(),data:pe()});class Ii{getItem(t){if("undefined"!=typeof window&&window.localStorage)return window.localStorage.getItem(t)??void 0}setItem(t,e){"undefined"!=typeof window&&window.localStorage&&window.localStorage.setItem(t,e)}removeItem(t){"undefined"!=typeof window&&window.localStorage&&window.localStorage.removeItem(t)}}const Ai="swarm-id-storage-write",Ci=new Map;class Ui{constructor(t){this.listeners=new Set,this.options=t}subscribe(t){return this.listeners.add(t),this.boundStorageHandler||this.setupStorageEventListener(),()=>{this.listeners.delete(t),0===this.listeners.size&&this.cleanupStorageEventListener()}}setupStorageEventListener(){"undefined"!=typeof window&&(this.boundStorageHandler=t=>{t.key===this.options.key&&this.reloadAndNotify()},window.addEventListener("storage",this.boundStorageHandler),this.boundSameWindowHandler=t=>{const e=t.detail;e&&e.key===this.options.key&&e.source!==this&&this.reloadAndNotify(e.noRepublish?{noRepublish:!0}:void 0)},window.addEventListener(Ai,this.boundSameWindowHandler))}cleanupStorageEventListener(){"undefined"!=typeof window&&(this.boundStorageHandler&&(window.removeEventListener("storage",this.boundStorageHandler),this.boundStorageHandler=void 0),this.boundSameWindowHandler&&(window.removeEventListener(Ai,this.boundSameWindowHandler),this.boundSameWindowHandler=void 0))}notifySameWindow(t){"undefined"!=typeof window&&window.dispatchEvent(new CustomEvent(Ai,{detail:{key:this.options.key,source:this,noRepublish:t}}))}reloadAndNotify(t){this.options.sealing?this.prime().then(()=>this.notifyListeners(this.load(),t)):this.notifyListeners(this.load(),t)}notifyListeners(t,e){for(const n of this.listeners)try{n(t,e)}catch(t){console.error(`[${this.options.loggerName??"Storage"}] Listener error:`,t)}}load(){const t=this.options.storage.getItem(this.options.key);if(!t)return[];try{const e=JSON.parse(t);return this.parse(e)}catch(t){return console.error(`[${this.options.loggerName??"Storage"}] Load failed:`,t),[]}}parse(t){const e=xi.safeParse(t),n=e.success?e.data.version:0,r=e.success?e.data.data:t,i=this.options.sealing?this.options.sealing.open(r):r,s=this.options.parsers[n];return s?s(i,n):(console.error(`[${this.options.loggerName??"Storage"}] No parser for version ${n}`),[])}async prime(){const t=this.options.sealing;if(t)try{const e=this.storedData();if(void 0===e)return;await t.prime(e)}catch(t){console.error(`[${this.options.loggerName??"Storage"}] Prime failed:`,t)}}storedData(){const t=this.options.storage.getItem(this.options.key);if(!t)return;const e=JSON.parse(t),n=xi.safeParse(e);return n.success?n.data.data:e}save(t,e){let n;try{n=this.serialize(t)}catch(t){return console.error(`[${this.options.loggerName??"Storage"}] Save failed:`,t),Promise.resolve()}if(!this.options.sealing){try{this.write(n,e)}catch(t){console.error(`[${this.options.loggerName??"Storage"}] Save failed:`,t)}return Promise.resolve()}return this.enqueue(async()=>{this.write(await this.seal(n),e)})}update(t,e){return this.enqueue(async()=>{await this.prime();const n=t(this.load());void 0!==n&&this.write(await this.seal(this.serialize(n)),e)})}clear(){const t=()=>{this.options.storage.removeItem(this.options.key),this.notifySameWindow()};return this.options.sealing?this.enqueue(async()=>t()):(t(),Promise.resolve())}serialize(t){return this.options.serializer?t.map(this.options.serializer):t}seal(t){return this.options.sealing?this.options.sealing.seal(t,this.storedData()):Promise.resolve(t)}write(t,e){const n={version:this.options.currentVersion,data:t};this.options.storage.setItem(this.options.key,JSON.stringify(n)),this.notifySameWindow(e?.noRepublish)}enqueue(t){const e=this.options.key,n=(Ci.get(e)??Promise.resolve()).then(()=>async function(t,e){if("undefined"==typeof navigator||!navigator.locks)return e();let n=!1;try{await navigator.locks.request(`swarm-id-storage-write-${t}`,{mode:"exclusive"},()=>(n=!0,e()))}catch(t){if(n)throw t;await e()}}(e,t)),r=n.catch(t=>{console.error(`[${this.options.loggerName??"Storage"}] Save failed:`,t)});return Ci.set(e,r),n}}const Pi="sealed:v1:",Ei="wrapping-keys",$i="at-rest-v1";function Di(){return new Promise((t,e)=>{let n=!1;const r=t=>{n||(n=!0,clearTimeout(i),e(t))},i=setTimeout(()=>r(new Error("IndexedDB open timed out")),1e4),s=indexedDB.open("swarm-id-keys",1);s.onupgradeneeded=()=>{s.result.objectStoreNames.contains(Ei)||s.result.createObjectStore(Ei)},s.onsuccess=()=>{n?s.result.close():(n=!0,clearTimeout(i),t(s.result))},s.onerror=()=>r(s.error),s.onblocked=()=>r(new Error("IndexedDB open was blocked"))})}function Bi(){return{async get(){const t=await Di();try{const n=t.transaction(Ei,"readonly").objectStore(Ei);return await(e=n.get($i),new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error)}))}finally{t.close()}var e},async getOrAdd(t){const e=await Di();try{return await new Promise((n,r)=>{const i=e.transaction(Ei,"readwrite"),s=i.objectStore(Ei);let a=t;const o=s.get($i);o.onsuccess=()=>{o.result?a=o.result:s.add(t,$i)},i.oncomplete=()=>n(a),i.onerror=()=>r(i.error),i.onabort=()=>r(i.error)})}finally{e.close()}}}}function Ti(){let t;return{get:async()=>t,getOrAdd:async e=>(t??(t=e),t)}}let Oi,Mi;function Ri(){return Oi??(Oi=async function(){if("undefined"==typeof indexedDB)return{store:Ti(),standsIn:!1};if(!indexedDB)return{store:Ti(),standsIn:!0};try{return(await Di()).close(),{store:Bi(),standsIn:!1}}catch{return{store:Ti(),standsIn:!0}}}()),Oi}function Fi(){return Mi??(Mi=(async()=>{const{store:t}=await Ri(),e=await t.get();if(e)return e;const n=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return t.getOrAdd(n)})()),Mi.catch(()=>{Mi=void 0}),Mi}const qi=new Map,Li=new Map,Ki=new Map;function Ni(t){return"string"==typeof t&&t.startsWith(Pi)}async function Hi(t){const e=Li.get(t);if(e)return e;const n=await Fi(),r=crypto.getRandomValues(new Uint8Array(12)),i=new Uint8Array(await crypto.subtle.encrypt({name:"AES-GCM",iv:r},n,(new TextEncoder).encode(t))),s=`${Pi}${fe(r)}${fe(i)}`;return Li.set(t,s),qi.set(s,t),s}const Wi=new Set;async function ji(t){let e;try{e=await Fi()}catch{return void Wi.add(t)}try{const n=ye(t.slice(10)),r=(new TextDecoder).decode(await crypto.subtle.decrypt({name:"AES-GCM",iv:n.slice(0,12)},e,n.slice(12)));qi.set(t,r),Li.set(r,t)}catch{(await Ri()).standsIn&&Wi.add(t)}}function zi(t){return Wi.has(t)}async function Gi(t){const e=[];for(const n of t){if(!Ni(n)||qi.has(n))continue;let t=Ki.get(n);t||(t=ji(n).finally(()=>Ki.delete(n)),Ki.set(n,t)),e.push(t)}await Promise.all(e)}function Vi(t){return qi.get(t)}const Ji={AppSliceFullError:"upload-unavailable",PartitionContendedError:"partition-contended",PartitionLeaseLostError:"lease-lost",ReservedSlotError:"invalid-request",TimeoutError:"timeout"},Zi={AppSliceFullError:"app-slice-full"};function Yi(t){try{return new URL(t).pathname}catch{return}}function _i(t,e){if(t instanceof we)return t.toWire();if(!(t instanceof Error))return{error:e,code:"internal"};const n={error:t.message,code:"internal"};if(t instanceof ut){n.code="bee-rejected",void 0!==t.status&&(n.status=t.status);const e=function(t){if("string"==typeof t)return t||void 0;if(t&&"object"==typeof t&&"message"in t){const{message:e}=t;if("string"==typeof e)return e}}(t.responseBody);void 0!==e&&(n.beeMessage=e);const r=Yi(t.url);void 0!==r&&(n.url=r)}else if("SocUploadError"===t.name){const{status:e,body:r}=t;n.code="bee-rejected",n.status=e,n.beeMessage=r}else if(t.name in Ji){n.code=Ji[t.name];const e=Zi[t.name];void 0!==e&&(n.reason=e)}else t instanceof ge?n.code="invalid-request":t instanceof TypeError&&/fetch/i.test(t.message)&&(n.code="network");return n}class Qi{constructor(t,e){this.beeUrl=t,this.options=e,this.pendingAcks=[],this.closed=!1,this.concurrency=e?.concurrency??32}getConcurrency(){return this.concurrency}open(){return new Promise((t,e)=>{const n=this.buildWsUrl();this.ws=new WebSocket(n),this.ws.binaryType="arraybuffer",this.ws.onopen=()=>{t()},this.ws.onerror=()=>{const t="WebSocket connection error";this.errorMessage=t,this.rejectAllPending(new Error(t)),e(new Error(t))},this.ws.onmessage=()=>{const t=this.pendingAcks.shift();t&&(clearTimeout(t.timer),t.resolve())},this.ws.onclose=t=>{if(!this.closed){const e=`WebSocket closed unexpectedly: ${t.code} ${t.reason}`;this.errorMessage=e,this.rejectAllPending(new Error(e))}}})}async uploadChunk(t){if(!this.ws||this.ws.readyState!==WebSocket.OPEN)throw new Error(this.errorMessage??"WebSocket is not open");for(;this.pendingAcks.length>=this.concurrency;)await this.waitForAck();return new Promise((e,n)=>{const r=setTimeout(()=>{n(new Error("WebSocket chunk ack timeout"))},9e5);this.pendingAcks.push({resolve:e,reject:n,timer:r});try{this.ws.send(t)}catch(t){this.pendingAcks.pop(),clearTimeout(r),n(t instanceof Error?t:new Error("WebSocket send failed"))}})}async close(){for(;this.pendingAcks.length>0;)await this.waitForAck();this.closed=!0,this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.close()}buildWsUrl(){let t=this.beeUrl;t.startsWith("https://")?t="wss://"+t.slice(8):t.startsWith("http://")&&(t="ws://"+t.slice(7)),t.endsWith("/")&&(t=t.slice(0,-1));let e=t+"/chunks/stream";return this.options?.tag&&(e+=`?swarm-tag=${this.options.tag}`),e}waitForAck(){const t=this.pendingAcks[0];return t?new Promise((e,n)=>{const r=t.resolve;t.resolve=()=>{r(),e()};const i=t.reject;t.reject=t=>{i(t),n(t)}}):Promise.resolve()}rejectAllPending(t){for(const e of this.pendingAcks)clearTimeout(e.timer),e.reject(t);this.pendingAcks=[]}}const Xi=new WeakMap;async function ts(t){if(!Xi.get(t))try{return(await t.tag.create()).uid}catch(e){const n=function(t,e){return"object"==typeof t&&null!==t&&t.status===e}(e,404);return n&&Xi.set(t,!0),void console.warn("[tryCreateTag] Tag creation failed — proceeding without tag"+(n?" (node does not support tags; cached, will not retry on this node)":" (transient; will re-probe on the next upload)"))}}class es extends Error{constructor(t,e,n){super(`SOC upload failed: ${t} ${e} - ${n}`),this.name="SocUploadError",this.status=t,this.body=n}}function ns(t){return"stamper"===t.mode}function rs(t){return"subsidised"===t.mode}function is(t,e){return e?t=>e.stampChunkData(t):e=>Promise.resolve(t.stamp(e))}async function ss(t,e,n,r,i,s){const a=await e(r);await t.chunk.upload(a,n,i,s)}function as(t,e){const n=t.requestOptions;return{...n?.headers,...e?.headers}}async function os(t,e,n){const r=`${ve(t)}/chunks`,i={"content-type":"application/octet-stream"};void 0!==n?.deferred&&(i["swarm-deferred-upload"]=n.deferred.toString());const s=await fetch(r,{method:"POST",headers:i,body:e});if(!s.ok){const t=await s.text();throw new we("bee-rejected",`Subsidised chunk upload failed: ${s.status} ${s.statusText} - ${t}`,{status:s.status,beeMessage:t,url:Yi(s.url)})}return{reference:(await s.json()).reference}}async function cs(t,e,n,r,i,s,a=ke){let o=0;await Promise.all(Array.from({length:Math.min(a,n.length)},()=>(async()=>{for(;o<n.length;){const a=n[o++];await ss(t,e,a.data,a.address,r,i),s(a.address)}})()))}async function ds(t,e,n,r){const i=await t(r),a=s.Binary.concatBytes(y(i).toUint8Array(),n);await e.uploadChunk(a)}async function us(t,e,n,r){let i=0;const s=e.getConcurrency();await Promise.all(Array.from({length:s},()=>(async()=>{for(;i<n.length;){const s=n[i++];await ds(t,e,s.data,s.address),r(s.address)}})()))}async function ls(t,e){if(1===t.length)return new m(t[0].address);const n=[];for(let r=0;r<t.length;r+=128){const i=t.slice(r,Math.min(r+128,t.length));if(1===i.length){n.push(i[0]);continue}const s=new Uint8Array(32*i.length);i.forEach((t,e)=>{s.set(t.address,32*e)});const a=i.reduce((t,e)=>t+(e.span??0n),0n),o=be(s,a);n.push({address:o.address.toUint8Array(),span:a}),await e(o)}return n.length>1?ls(n,e):new m(n[0].address)}async function hs(t,e){if(1===t.length){const e=new Uint8Array(64);return e.set(t[0].address,0),e.set(t[0].key,32),new m(e)}const n=[];for(let r=0;r<t.length;r+=64){const i=t.slice(r,Math.min(r+64,t.length));if(1===i.length){n.push(i[0]);continue}const a=i.reduce((t,e)=>t+e.span,0n),o=new Uint8Array(4096);i.forEach((t,e)=>{o.set(t.address,64*e),o.set(t.key,64*e+32)});const c=N.fromBigInt(a).toUint8Array(),d=s.Binary.concatBytes(c,o),u=xe(),{key:l,encryptedSpan:h,encryptedData:p}=u.encryptChunk(d),f=s.Binary.concatBytes(h,p),y=await Se(f);await e(f),n.push({address:y.toUint8Array(),key:l,span:a})}if(n.length>1)return hs(n,e);const r=new Uint8Array(64);return r.set(n[0].address,0),r.set(n[0].key,32),new m(r)}async function ps(t,e,n){return void 0!==n?.encryptionKey?async function(t,e,n){const r=!0===n?.encryptionKey?void 0:n?.encryptionKey,i=yi(e),{chunks:s,refs:a}=function(t,e){if(e&&t.length>1)throw new Error(`Explicit encryption key is only supported for single-chunk data (up to 4096 bytes), got ${t.length} chunks — pass encryptionKey: true to auto-generate per-chunk keys`);const n=[],r=[];for(const i of t){const t=me(i,e);n.push(t),r.push({address:t.address.toUint8Array(),key:t.encryptionKey,span:BigInt(i.length)})}return{chunks:n,refs:r}}(i,r),o=s.map(t=>({data:t.data,address:t.address.toUint8Array()}));let c=s.length,d=0;const u=[],l=t=>{u.push(t),d++,n?.onProgress?.({total:c,processed:d})};if(rs(t)){const e={deferred:n?.deferred};for(const n of o)await os(t.gatewayUrl,n.data,e),l(n.address);return{reference:(await hs(a,async r=>{await os(t.gatewayUrl,r,e);const i=await Se(r);u.push(i.toUint8Array()),c++,d++,n?.onProgress?.({total:c,processed:d})})).toHex(),chunkAddresses:u}}{const{bee:e,stamper:r,workerPool:i}=t,s=n?.tag??await ts(e),h={...n,tag:s,deferred:n?.deferred??!1},p=is(r,i);let f;n?.webSocket&&(f=new Qi(e.url,{tag:s,concurrency:n.webSocket.concurrency}),await f.open());try{f?await us(p,f,o,l):await cs(e,p,o,h,n?.requestOptions,l,n?.httpConcurrency);return{reference:(await hs(a,async t=>{const r=await Se(t);u.push(r.toUint8Array()),f?await ds(p,f,t,r.toUint8Array()):await ss(e,p,t,r.toUint8Array(),h,n?.requestOptions),c++,d++,n?.onProgress?.({total:c,processed:d})})).toHex(),tagUid:s,chunkAddresses:u}}finally{f&&await f.close()}}}(t,e,n):async function(t,e,n){const r=yi(e),i=[],s=[];for(const t of r){const e=be(t);i.push(e),s.push({address:e.address.toUint8Array(),span:BigInt(t.length)})}let a=i.length,o=0;const c=()=>n?.onProgress?.({total:a,processed:o});if(rs(t)){const e={deferred:n?.deferred};for(const n of i)await os(t.gatewayUrl,n.data,e),o++,c();let r;return r=1===s.length?new m(s[0].address):await ls(s,async n=>{await os(t.gatewayUrl,n.data,e),a++,o++,c()}),{reference:r.toHex()}}{const{bee:e,stamper:r,workerPool:d}=t,u=n?.tag??await ts(e),l={...n,tag:u,deferred:n?.deferred??!1},h=is(r,d);for(const t of i)await ss(e,h,t.data,t.address.toUint8Array(),l,n?.requestOptions),o++,c();let p;return p=1===s.length?new m(s[0].address):await ls(s,async t=>{await ss(e,h,t.data,t.address.toUint8Array(),l,n?.requestOptions),a++,o++,c()}),{reference:p.toHex(),tagUid:u}}}(t,e,n)}async function fs(t,e,n,r,i){if(r.length<1||r.length>4096)throw new we("invalid-request",`Invalid data length: ${r.length} (expected 1-4096)`);let a,o,c;if(void 0!==i?.encryptionKey){const t=!0===i.encryptionKey?void 0:i.encryptionKey,e=me(r,t);a=e.address.toUint8Array(),o=e.data,c=e.encryptionKey}else{const t=be(r);a=t.address.toUint8Array(),o=t.data}const d=e.publicKey().address(),u=s.Binary.concatBytes(n.toUint8Array(),a),l=e.sign(u),h=s.Binary.keccak256(s.Binary.concatBytes(n.toUint8Array(),d.toUint8Array()));if(rs(t)){const e=`${ve(t.gatewayUrl)}/soc/${d.toHex()}/${n.toHex()}?sig=${l.toHex()}`,r={"content-type":"application/octet-stream"};void 0!==i?.deferred&&(r["swarm-deferred-upload"]=i.deferred.toString());const s=await fetch(e,{method:"POST",headers:r,body:o});if(!s.ok){const t=await s.text();throw new es(s.status,`${s.statusText} (subsidised)`,t)}return{socAddress:h,encryptionKey:c}}{const{bee:e,stamper:r}=t,s=i?.tag??await ts(e),a=r.stamp(h),u=y(a).toHex(),p=`${e.url}/soc/${d.toHex()}/${n.toHex()}?sig=${l.toHex()}`,f={...as(e,i?.requestOptions),"content-type":"application/octet-stream","swarm-postage-stamp":u};s&&(f["swarm-tag"]=s.toString()),void 0!==i?.deferred&&(f["swarm-deferred-upload"]=i.deferred.toString()),void 0!==i?.pin&&(f["swarm-pin"]=i.pin.toString());const w=await fetch(p,{method:"POST",headers:f,body:o,signal:i?.requestOptions?.signal});if(!w.ok){const t=await w.text();throw new es(w.status,w.statusText,t)}return{socAddress:h,encryptionKey:c,tagUid:s}}}async function ys(t,e,n){if(rs(t))return os(t.gatewayUrl,e,{deferred:n?.deferred});{const{bee:r,stamper:i}=t,s=await Se(e),a=is(i);return await ss(r,a,e,s.toUint8Array(),{deferred:n?.deferred??!1,pin:n?.pin,tag:n?.tag},n?.requestOptions),{reference:fe(s.toUint8Array())}}}function ws(t,e){const n=s.Binary.keccak256((new TextEncoder).encode(`swarm-id-partition-lock-v1:${t.toHex()}:${e}`));return new x(n)}function gs(t,e,n){const r=ws(t,e);return s.Binary.keccak256(s.Binary.concatBytes(r.toUint8Array(),n.toUint8Array()))}function ms(t,e,n){const r=gs(t,e,n);return r[0]<<8|r[1]}const bs=2500,vs=3e4,Ss=vs;class ks extends Error{constructor(t="Partition lease was reclaimed by another device."){super(t),this.name="PartitionLeaseLostError"}}class xs extends Error{constructor(t="This chunk address belongs to the account's own bookkeeping and cannot be stamped for an app."){super(t),this.name="ReservedSlotError"}}class Is extends Error{constructor(t="This bucket's share for app stamps is used up. The rest of it is kept for the account's own uploads."){super(t),this.name="AppSliceFullError"}}const As=65536,Cs=16,Us=2,Ps=1e4,Es=4096;function $s(t){const e=t<=31?2:4,n=Es/e;return{counterByteSize:e,bucketsPerChunk:n,numUtilizationChunks:As/n}}function Ds(t){if(t.length<2)throw new Error("Chunk address must be at least 2 bytes");return t[0]<<8|t[1]}function Bs(t,e){if(t<0||t>=As)throw new Error(`Invalid bucket index: ${t} (must be 0-65535)`);const{bucketsPerChunk:n}=$s(e);return Math.floor(t/n)}function Ts(t,e,n){const{counterByteSize:r,bucketsPerChunk:i,numUtilizationChunks:s}=$s(n);if(e<0||e>=s)throw new Error(`Invalid chunk index: ${e} (must be 0-${s-1})`);const a=e*i,o=a+i,c=t.slice(a,o);return 2===r?Ns(c):Ks(c)}function Os(t,e,n,r){const{counterByteSize:i,bucketsPerChunk:s,numUtilizationChunks:a}=$s(r);if(e<0||e>=a)throw new Error(`Invalid chunk index: ${e} (must be 0-${a-1})`);if(n.length!==Es)throw new Error(`Invalid chunk data length: ${n.length} (expected 4096)`);const o=2===i?function(t){if(t.length%2!=0)throw new Error("Byte array length must be a multiple of 2");const e=new Uint32Array(t.length/2),n=new DataView(t.buffer,t.byteOffset,t.byteLength);for(let t=0;t<e.length;t++)e[t]=n.getUint16(2*t,!0);return e}(n):function(t){if(t.length%4!=0)throw new Error("Byte array length must be a multiple of 4");const e=new Uint32Array(t.length/4),n=new DataView(t.buffer,t.byteOffset,t.byteLength);for(let t=0;t<e.length;t++)e[t]=n.getUint32(4*t,!0);return e}(n);if(o.length!==s)throw new Error(`Invalid chunk counters length: ${o.length} (expected ${s})`);const c=e*s;t.set(o,c)}class Ms{constructor(t){this.dirtyChunks=new Set,this.batchDepth=t}markDirty(t){const e=Bs(t,this.batchDepth);this.dirtyChunks.add(e)}markClean(t){this.dirtyChunks.delete(t)}getDirtyChunks(){return Array.from(this.dirtyChunks).sort((t,e)=>t-e)}hasDirtyChunks(){return this.dirtyChunks.size>0}clear(){this.dirtyChunks.clear()}get count(){return this.dirtyChunks.size}}async function Rs(t,e,n,r){if(32!==t.length)throw new Error(`Invalid swarmEncryptionKey length: ${t.length} (expected 32)`);const i=(new TextEncoder).encode("swarm-id-util-chunk-v1"),a=e.toUint8Array(),o=new Uint8Array(4);new DataView(o.buffer).setUint32(0,n,!1);const c=new Uint8Array(4);new DataView(c.buffer).setUint32(0,r,!1);const d=s.Binary.concatBytes(i,a,o,c),u=await crypto.subtle.importKey("raw",t,{name:"HMAC",hash:"SHA-256"},!1,["sign"]),l=await crypto.subtle.sign("HMAC",u,d);return new Uint8Array(l)}async function Fs(t){const{swarmEncryptionKey:e,batchId:n,chunkIndex:r,plaintext:i,claimedBuckets:s}=t;let a=t.priorNonce;for(;;){const t=await Rs(e,n,r,a),o=me(i,t).address.toUint8Array(),c=Ds(o);if(!s.has(c))return s.add(c),{key:t,nonce:a,bucket:c,address:o};a++}}function qs(t){const e=new Set;for(const n of t.chunks)!n.dirty&&n.contentHash&&e.add(Ds(s.Binary.hexToUint8Array(n.contentHash)));return e}async function Ls(t,e,n,r){if(n.length<1||n.length>4096)throw new Error(`Invalid data length: ${n.length} (expected 1-4096)`);if(32!==r.length)throw new Error(`Invalid encryption key length: ${r.length} (expected 32)`);const i=me(n,r),s=i.address.toUint8Array(),a=await ts(t),o={mode:"stamper",bee:t,stamper:e};return await ys(o,i.data,{deferred:!1,tag:a}),s}function Ks(t){const e=new ArrayBuffer(4*t.length),n=new DataView(e);for(let e=0;e<t.length;e++)n.setUint32(4*e,t[e],!0);return new Uint8Array(e)}function Ns(t){const e=new ArrayBuffer(2*t.length),n=new DataView(e);for(let e=0;e<t.length;e++){const r=t[e];if(r>65535)throw new Error(`Counter at index ${e} (${r}) exceeds uint16 range; use uint32 codec`);n.setUint16(2*e,r,!0)}return new Uint8Array(e)}function Hs(t){return Math.pow(2,t-16)}function Ws(t,e,n=2){return t<zs(e,n)}function js(t,e,n){return n+t+n*e}function zs(t,e){const n=Hs(t);return Math.floor(n/e)-1}const Gs=(()=>{let t=16;for(;zs(t,2)<4;)t+=1;return t})();async function Vs(t,e,n,r){const i=await async function(t,e,n){const{cache:r}=n,{counterByteSize:i,bucketsPerChunk:s,numUtilizationChunks:a}=$s(e),o=await r.getAllChunks(t.toHex());if(o.length===a)try{const n=new Uint32Array(As),r=[];for(const t of o)Os(n,t.chunkIndex,t.data,e),r.push({index:t.chunkIndex,contentHash:t.contentHash,lastUpload:t.lastAccess,dirty:!1,nonce:t.nonce});return{batchId:t,batchDepth:e,dataCounters:n,chunks:r,lastSync:Date.now()}}catch(t){console.warn("[BatchUtil] Failed to reconstruct from cache:",t)}const c=new Uint32Array(As),d=[],u=new Uint32Array(s),l=2===i?Ns(u):Ks(u);for(let t=0;t<a;t++){const n=o.find(e=>e.chunkIndex===t);n?(Os(c,t,n.data,e),d.push({index:t,contentHash:n.contentHash,lastUpload:n.lastAccess,dirty:!1,nonce:n.nonce})):(Os(c,t,l,e),d.push({index:t,contentHash:"",lastUpload:0,dirty:!0,nonce:0}))}return{batchId:t,batchDepth:e,dataCounters:c,chunks:d,lastSync:Date.now()}}(t,n,r),s=new Ms(n);for(const t of e){const e=Ds(t.address.toUint8Array()),r=i.dataCounters[e];if(!Ws(r,n))throw new Error(`Bucket ${e} is full (slot ${r})`);i.dataCounters[e]++,s.markDirty(e)}const a=s.getDirtyChunks();for(const t of a)i.chunks[t].dirty=!0;return{state:i,tracker:s}}class Js{get buckets(){return this.utilizationState.dataCounters.map(t=>js(this.partition??0,t,this.partitionCountValue))}get currentPartition(){return this.partition}get partitionCount(){return this.partitionCountValue}getLocalCounter(){return void 0!==this.partition?this.utilizationState.dataCounters:void 0}getLockSocBuckets(){const t=new Set;for(const e of this.lockSocs??[])t.add(Ds(e.address));return t}getProtectedBuckets(){const t=new Set(this.getLockSocBuckets()),e=this.protectedStateBuckets.get(this.partition??0);for(const n of e??[])t.add(n);return t}getCleanChunkBuckets(){return qs(this.utilizationState)}async setProtectedStateBuckets(t,e){this.protectedStateBuckets.set(t,new Set(e));const n=this.batchId.toHex(),r=await this.cache.getMetadata(n);await this.cache.putMetadata({batchId:n,lastSync:r?.lastSync??Date.now(),chunkCount:r?.chunkCount??0,syncedReferences:r?.syncedReferences,stateChunkBuckets:{...r?.stateChunkBuckets??{},[t]:e}})}bindPartition(t){if(t.localCounter.length!==As)throw new Error(`localCounter must have 65536 entries, got ${t.localCounter.length}`);this.partition=t.partition,this.partitionCountValue=t.partitionCount,this.utilizationState.dataCounters=t.localCounter,this.leaseStale=!1,this.leaseValidUntil=void 0}bindLockSocs(t){this.lockSocs=t}markReservedUtilizationChunk(t,e){this.reservedUtilizationChunks||(this.reservedUtilizationChunks=new Map),this.reservedUtilizationChunks.set(fe(t),e??this.partition??0)}clearReservedUtilizationChunks(){this.reservedUtilizationChunks=void 0}reserveIntentSocSlot(t,e){this.intentSoc={addressHex:fe(t),slot:e}}clearIntentSocSlot(){this.intentSoc=void 0}async withIntentSocSlot(t,e,n){const r=this.intentSocLock;let i;this.intentSocLock=new Promise(t=>i=t),await r;try{return this.reserveIntentSocSlot(t,e),await n()}finally{this.clearIntentSocSlot(),i()}}unbindPartition(){this.partition=void 0,this.partitionCountValue=1,this.leaseValidUntil=void 0}invalidateLease(){void 0!==this.partition&&(this.leaseStale=!0)}setLeaseValidUntil(t){this.leaseValidUntil=t}leaseLocallyLapsed(){return void 0!==this.leaseValidUntil&&this.now()>=this.leaseValidUntil-2e3}constructor(t,e,n,r,i,s,a){this.dirty=!1,this.dirtyBuckets=new Set,this.partition=void 0,this.partitionCountValue=1,this.lockSocs=void 0,this.reservedUtilizationChunks=void 0,this.intentSoc=void 0,this.intentSocLock=Promise.resolve(),this.leaseStale=!1,this.leaseValidUntil=void 0,this.protectedStateBuckets=new Map,this.signer=t,this.batchId=e,this.depth=n,this.maxSlot=Hs(n),this.cache=r,this.encryptionKey=i,this.utilizationState=s,this.now=a}static async create(t,e,n,r,i,s,a=()=>Date.now()){const o=function(t,e){const n=new Uint32Array(As),{numUtilizationChunks:r}=$s(e),i=[];for(let t=0;t<r;t++)i.push({index:t,contentHash:"",lastUpload:0,dirty:!0,nonce:0});return{batchId:t,batchDepth:e,dataCounters:n,chunks:i,lastSync:Date.now()}}(e,n);try{const t=await r.getAllChunks(e.toHex()),{numUtilizationChunks:i}=$s(n);for(const e of t)e.chunkIndex>=i||Os(o.dataCounters,e.chunkIndex,e.data,n)}catch(t){console.warn("[UtilizationAwareStamper] Failed to load state from cache, starting with fresh state:",t)}const c=new Js(new I(t),e,n,r,s,o,a);try{const t=await(r.getMetadata?.(e.toHex()));for(const[e,n]of Object.entries(t?.stateChunkBuckets??{}))c.protectedStateBuckets.set(Number(e),new Set(n))}catch(t){console.warn("[UtilizationAwareStamper] Failed to restore protected state buckets:",t)}const d=fe(s),u=await Ie(d,Ce),l=new I(u).publicKey().address();return c.lockSocs=Array.from({length:2},(t,n)=>({partition:n,address:gs(e,n,l)})),c}reservedSlotFor(t){const e=this.lockSocs?.find(e=>s.Binary.equals(e.address,t));if(e)return e.partition;const n=fe(t),r=this.reservedUtilizationChunks?.get(n);return void 0!==r?r:this.intentSoc?.addressHex===n?this.intentSoc.slot:void 0}requireLiveLease(){if(this.leaseStale||void 0!==this.partition&&this.leaseLocallyLapsed())throw new ks}assignSlot(t){const e=this.reservedSlotFor(t);if(void 0!==e)return e;this.requireLiveLease();const n=Ds(t),r=js(this.partition??0,this.utilizationState.dataCounters[n],this.partitionCountValue);if(r>=this.maxSlot)throw new Error("Bucket is full");return this.utilizationState.dataCounters[n]++,this.dirtyBuckets.add(n),this.dirty=!0,r}stamp(t,e){return Ae(this.signer,this.batchId,t,this.assignSlot(t),e)}stampDataChunk(t,e){if(void 0!==this.reservedSlotFor(t))throw new xs;const n=Ds(t);if(this.utilizationState.dataCounters[n]>=this.appSliceCapacity())throw new Is;return this.stamp(t,e)}isOwnDataSlot(t,e){if(void 0!==this.reservedSlotFor(t))return!1;const n=this.partitionCountValue,r=e-js(this.partition??0,0,n);if(r<0||r%n!==0)return!1;return r/n<this.utilizationState.dataCounters[Ds(t)]}restampDataChunk(t,e,n){if(void 0!==this.reservedSlotFor(t))throw new xs;if(this.requireLiveLease(),!this.isOwnDataSlot(t,e))throw new Error(`Slot ${e} is not a slot this device took in this chunk's bucket.`);return Ae(this.signer,this.batchId,t,e,n)}laneCapacity(){return zs(this.depth,this.partitionCountValue)}appSliceCapacity(){return Math.floor(.5*this.laneCapacity())}getState(){return this.buckets}async flush(){if(!this.dirty)return;const t=new Set;for(const e of this.dirtyBuckets){const n=Bs(e,this.depth);t.add(n),this.utilizationState.chunks[n].dirty=!0}try{const e=qs(this.utilizationState);for(const t of this.lockSocs??[])e.add(Ds(t.address));for(const t of this.protectedStateBuckets.get(this.partition??0)??[])e.add(t);const n=Array.from(t).sort((t,e)=>t-e);for(const t of n){const n=Ts(this.utilizationState.dataCounters,t,this.depth),r=await Fs({swarmEncryptionKey:this.encryptionKey,batchId:this.batchId,chunkIndex:t,plaintext:n,priorNonce:this.utilizationState.chunks[t].nonce,claimedBuckets:e}),i=s.Binary.uint8ArrayToHex(r.address);await this.cache.putChunk({batchId:this.batchId.toHex(),chunkIndex:t,data:n,contentHash:i,nonce:r.nonce,lastAccess:Date.now()}),this.utilizationState.chunks[t].contentHash=i,this.utilizationState.chunks[t].nonce=r.nonce,this.utilizationState.chunks[t].dirty=!1}this.utilizationState.lastSync=Date.now()}catch(t){throw console.error("[UtilizationAwareStamper] Failed to flush to cache:",t),t}this.dirtyBuckets.clear(),this.dirty=!1}getUtilizationState(){return this.utilizationState}applyUtilizationUpdate(t){for(const{index:e,value:n}of t)e>=0&&e<As&&n>this.utilizationState.dataCounters[e]&&(this.utilizationState.dataCounters[e]=n)}buildLeaseLocalCounter(){return this.utilizationState.dataCounters.slice()}async getSyncedReference(t){const e=await this.cache.getMetadata(this.batchId.toHex());return e?.syncedReferences?.[t]}async setSyncedReference(t,e){const n=this.batchId.toHex(),r=await this.cache.getMetadata(n);await this.cache.putMetadata({batchId:n,lastSync:r?.lastSync??Date.now(),chunkCount:r?.chunkCount??0,syncedReferences:{...r?.syncedReferences??{},[t]:e},stateChunkBuckets:r?.stateChunkBuckets})}getBucketUpdatesForBroadcast(){return Array.from(this.dirtyBuckets).map(t=>({index:t,value:this.utilizationState.dataCounters[t]}))}}const Zs=t=>{const e=ce(pe()).safeParse(t);if(!e.success)return console.error("Parse failed:",e.error.format()),[];const n=[];for(const t of e.data)try{const e=De.safeParse(t);if(!e.success){console.error("Skipping invalid account record:",e.error.format());continue}n.push(e.data)}catch(t){console.error("Skipping invalid account record:",t)}return n.map(t=>!$e(t)&&void 0===t.partitionCount&&t.devices.length>0?{...t,partitionCount:2}:t)};function Ys(t){return{id:t.id.toString(),name:t.name,createdAt:t.createdAt,derivationKey:t.derivationKey,publicKey:t.publicKey,defaultPostageStampBatchID:t.defaultPostageStampBatchID?.toString(),devices:t.devices,connectedApps:t.connectedApps.map(t=>Xs(Qs(t))),postageStamps:t.postageStamps.map(ta),settings:t.settings,accountNameAt:t.accountNameAt,defaultStampAt:t.defaultStampAt,settingsAt:t.settingsAt,lastModified:t.lastModified,partitionCount:t.partitionCount}}function _s(t){return $e(t)?{id:t.id.toString(),name:t.name,createdAt:t.createdAt,access:t.access,encryptedSeed:t.encryptedSeed,encryptedState:t.encryptedState,storageWarning:t.storageWarning,soonestDriveExpiry:t.soonestDriveExpiry,signedOutAt:t.signedOutAt}:{...Ys(t),connectedApps:t.connectedApps.map(Qs),access:t.access,encryptedSeed:t.encryptedSeed}}function Qs(t){return{appUrl:t.appUrl,appName:t.appName,lastConnectedAt:t.lastConnectedAt,appIcon:t.appIcon,appDescription:t.appDescription,connectedUntil:t.connectedUntil,appSecret:t.appSecret,postageStampBatchID:t.postageStampBatchID?.toString(),postageStampBatchIDAt:t.postageStampBatchIDAt,stampPending:t.stampPending,revokedAt:t.revokedAt,disconnectedAt:t.disconnectedAt,chatBinding:t.chatBinding}}function Xs(t){const{appSecret:e,connectedUntil:n,stampPending:r,...i}=t;return i}function ta(t){return{batchID:t.batchID.toString(),signerKey:t.signerKey.toString(),name:t.name,nameUpdatedAt:t.nameUpdatedAt,utilization:t.utilization,usable:t.usable,depth:t.depth,amount:t.amount.toString(),bucketDepth:t.bucketDepth,blockNumber:t.blockNumber,immutableFlag:t.immutableFlag,exists:t.exists,batchTTL:t.batchTTL,createdAt:t.createdAt,updatedAt:t.updatedAt,deletedAt:t.deletedAt}}function ea(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)}function na(t){return Array.isArray(t)?t.filter(ea):[]}function ra(t){return void 0===t.signedOutAt}function ia(t){return ra(t)?[t.derivationKey,...na(t.connectedApps).map(t=>t.appSecret),...na(t.postageStamps).map(t=>t.signerKey)].filter(t=>void 0!==t):[]}function sa(t){if(!ra(t))return t;const e=t=>Ni(t)?Vi(t):void 0;if(ia(t).some(t=>void 0===e(t)))return function(t){return{id:t.id,name:t.name,createdAt:t.createdAt,access:t.access,encryptedSeed:t.encryptedSeed,signedOutAt:Date.now()}}(t);const n=t=>void 0===t?void 0:e(t);return{...t,derivationKey:n(t.derivationKey),connectedApps:na(t.connectedApps).map(t=>void 0===t.appSecret?t:{...t,appSecret:n(t.appSecret)}),postageStamps:na(t.postageStamps).map(t=>({...t,signerKey:n(t.signerKey)}))}}async function aa(t,e){const n=e.get(t.id),r=void 0!==n&&function(t){return ia(t).some(t=>Ni(t)&&zi(t))}(n);if(!ra(t))return r?n:t;if(r&&await async function(){return(await Ri()).standsIn}())throw new Error("This page cannot keep keys for a later visit, and the stored keys may still open on one");return async function(t,e){const n=async t=>"string"==typeof t?e(t):t;return{...t,derivationKey:await n(t.derivationKey),connectedApps:await Promise.all(na(t.connectedApps).map(async t=>void 0===t.appSecret?t:{...t,appSecret:await n(t.appSecret)})),postageStamps:await Promise.all(na(t.postageStamps).map(async t=>({...t,signerKey:await n(t.signerKey)})))}}(t,Hi)}const oa={seal:(t,e)=>{const n=new Map(na(e).map(t=>[t.id,t]));return Promise.all(t.map(t=>aa(t,n)))},open:t=>Array.isArray(t)?t.map(t=>ea(t)?sa(t):t):t,prime:t=>Gi(na(t).flatMap(ia).filter(t=>Ni(t)))};function ca(){return t={key:Ee,currentVersion:1,parsers:{1:Zs},serializer:_s,loggerName:"AccountsStorage",sealing:oa},new Ui({...t,storage:new Ii});var t}function da(){return{load(){if("undefined"==typeof localStorage)return;const t=localStorage.getItem(Ue);if(t)try{return function(t){const e=Pe.safeParse(t);if(e.success)return e.data;console.error("[NetworkSettingsStorage] Parse failed:",e.error.format())}(JSON.parse(t))}catch(t){return void console.error("[NetworkSettingsStorage] Failed to parse stored data:",t)}},save(t){if("undefined"==typeof localStorage)return void console.warn("[NetworkSettingsStorage] localStorage not available");const e=function(t){return{beeNodeUrl:t.beeNodeUrl,gnosisRpcUrl:t.gnosisRpcUrl}}(t);localStorage.setItem(Ue,JSON.stringify(e))},clear(){"undefined"!=typeof localStorage&&localStorage.removeItem(Ue)}}}function ua(t,e,n){return{version:1,timestamp:n,accountId:e,metadata:{accountName:t.name,defaultPostageStampBatchID:t.defaultPostageStampBatchID?.toHex(),publicKey:t.publicKey,settings:t.settings,accountNameAt:t.accountNameAt??t.createdAt,defaultStampAt:t.defaultStampAt??t.createdAt,settingsAt:t.settingsAt??t.createdAt,createdAt:t.createdAt,lastModified:n,devices:t.devices,partitionCount:t.partitionCount??1},connectedApps:t.connectedApps,postageStamps:t.postageStamps}}function la(t){return ha(ua(t,t.id.toHex(),Date.now()))}function ha(t){const e={version:1,timestamp:(n=t).timestamp,accountId:n.accountId,metadata:{accountName:n.metadata.accountName,defaultPostageStampBatchID:n.metadata.defaultPostageStampBatchID,publicKey:n.metadata.publicKey,settings:n.metadata.settings,accountNameAt:n.metadata.accountNameAt,defaultStampAt:n.metadata.defaultStampAt,settingsAt:n.metadata.settingsAt,createdAt:n.metadata.createdAt,lastModified:n.metadata.lastModified,devices:n.metadata.devices,partitionCount:n.metadata.partitionCount},connectedApps:n.connectedApps.map(Qs),postageStamps:n.postageStamps.map(ta)};var n;return{...e,connectedApps:e.connectedApps.map(t=>{const{chatBinding:e,...n}=Xs(t);return n})}}function pa(t,e){const n=new Map(e.map(t=>[t.appUrl,t]));return t.map(t=>{if(t.revokedAt)return t;const e=n.get(t.appUrl);return e?void 0!==t.disconnectedAt&&t.disconnectedAt>e.lastConnectedAt?t:{...t,appSecret:e.appSecret??t.appSecret,connectedUntil:e.connectedUntil??t.connectedUntil,stampPending:e.stampPending}:t})}async function fa(t){return{topic:await Ie(t,"swarm-id/account-bus/topic/v1"),encryptionKey:await Be(t,"swarm-id/account-bus/encryption/v1")}}const ya=2e4;class wa{constructor(){this.seen=new Map}observe(t,e,n){const r=this.seen.get(t)??{at:e,peers:new Set};r.at=e,void 0!==n&&r.peers.add(n),this.seen.set(t,r)}forgetPeer(t){for(const[e,n]of this.seen)n.peers.delete(t)&&0===n.peers.size&&this.seen.delete(e)}liveDeviceIds(t){const e=t-18e4;return[...this.seen].filter(([,t])=>t.at>=e).map(([t])=>t)}clear(){this.seen.clear()}}le("type",[se({type:oe("join"),topic:de()}),se({type:oe("relay"),to:de(),payload:de()}),se({type:oe("signal"),to:de(),payload:pe()})]);const ga=le("type",[se({type:oe("welcome"),peerId:de(),peers:ce(de())}),se({type:oe("peer-joined"),peerId:de()}),se({type:oe("peer-left"),peerId:de()}),se({type:oe("relay"),from:de(),payload:de()}),se({type:oe("signal"),from:de(),payload:pe()})]);async function ma(t,e){const n=crypto.getRandomValues(new Uint8Array(12)),r=(new TextEncoder).encode(t),i=await crypto.subtle.encrypt({name:"AES-GCM",iv:n},e,r),s=new Uint8Array(n.length+i.byteLength);return s.set(n,0),s.set(new Uint8Array(i),n.length),function(t){let e="";for(const n of t)e+=String.fromCharCode(n);return btoa(e)}(s)}async function ba(t,e){const n=function(t){const e=atob(t),n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t);return n}(t),r=n.slice(0,12),i=n.slice(12),s=await crypto.subtle.decrypt({name:"AES-GCM",iv:r},e,i);return(new TextDecoder).decode(s)}const va=le("kind",[se({kind:oe("offer"),sdp:de()}),se({kind:oe("answer"),sdp:de()}),se({kind:oe("ice"),candidate:pe()})]);function Sa(){return{remoteDescriptionSet:!1,pendingCandidates:[]}}class ka{constructor(t){this.local=!1,this.peers=new Map,this.handlers=new Set,this.peerLeftHandlers=new Set,this.closed=!1,this.reconnectDelayMs=1e3,this.pendingDeliveries=new Set,this.options=t,this.connect()}get peerCount(){return this.peers.size}publish(t){const e=this.deliver(t).catch(t=>{console.error("[SignalingTransport] Publish failed:",t)});this.pendingDeliveries.add(e),e.finally(()=>this.pendingDeliveries.delete(e))}subscribe(t){return this.handlers.add(t),()=>this.handlers.delete(t)}onPeerLeft(t){return this.peerLeftHandlers.add(t),()=>this.peerLeftHandlers.delete(t)}close(){this.closed=!0,void 0!==this.reconnectTimer&&clearTimeout(this.reconnectTimer),0!==this.pendingDeliveries.size?Promise.allSettled([...this.pendingDeliveries]).then(()=>this.shutdown()):this.shutdown()}shutdown(){this.handlers.clear(),this.peerLeftHandlers.clear();for(const t of this.peers.values())t.connection?.close();this.peers.clear(),this.socket?.close()}connect(){const t=new WebSocket(this.options.url);this.socket=t,t.addEventListener("open",()=>{this.sendToServer({type:"join",topic:this.options.topic})}),t.addEventListener("message",t=>{this.reconnectDelayMs=1e3,this.handleServerMessage(String(t.data))}),t.addEventListener("close",t=>{if(1008===t.code)return console.error("[SignalingTransport] Signaling server rejected the topic; not reconnecting."),void(this.closed=!0);this.scheduleReconnect()}),t.addEventListener("error",()=>{})}scheduleReconnect(){if(this.closed)return;for(const t of this.peers.values())t.connection?.close();this.peers.clear();const t=this.reconnectDelayMs/2+Math.random()*(this.reconnectDelayMs/2);this.reconnectTimer=setTimeout(()=>this.connect(),t),this.reconnectDelayMs=Math.min(2*this.reconnectDelayMs,3e4)}async deliver(t){if(0===this.peers.size)return;const e=await ma(JSON.stringify(t),this.options.encryptionKey);for(const[t,n]of this.peers){if("open"===n.dataChannel?.readyState)try{n.dataChannel.send(e);continue}catch(t){console.warn("[SignalingTransport] DataChannel send failed; relaying:",t)}this.sendToServer({type:"relay",to:t,payload:e})}}sendToServer(t){this.socket?.readyState===WebSocket.OPEN&&this.socket.send(JSON.stringify(t))}async handleServerMessage(t){let e;try{e=JSON.parse(t)}catch{return}const n=ga.safeParse(e);if(!n.success)return;const r=n.data;switch(r.type){case"welcome":for(const t of r.peers)this.peers.set(t,Sa()),this.initiatePeerConnection(t);return;case"peer-joined":return void this.peers.set(r.peerId,{remoteDescriptionSet:!1,pendingCandidates:[]});case"peer-left":{const t=this.peers.get(r.peerId);t?.connection?.close(),this.peers.delete(r.peerId);for(const t of this.peerLeftHandlers)t(r.peerId);return}case"relay":return void await this.receiveEnvelope(r.payload,r.from);case"signal":return void await this.handleSignal(r.from,r.payload)}}async receiveEnvelope(t,e){let n,r;try{n=await ba(t,this.options.encryptionKey)}catch{return}try{r=JSON.parse(n)}catch{return}for(const t of this.handlers)t(r,e)}async initiatePeerConnection(t){const e=this.options.createPeerConnection;if(e)try{const n=e(),r=this.peers.get(t);if(!r)return;this.adoptConnection(r,n),this.adoptDataChannel(n.createDataChannel("bus"),r,t),this.forwardIceCandidates(n,t);const i=await n.createOffer();await n.setLocalDescription(i),this.sendSignal(t,{kind:"offer",sdp:i.sdp??""})}catch(t){console.error("[SignalingTransport] WebRTC initiate failed:",t)}}async handleSignal(t,e){const n=this.options.createPeerConnection;if(!n)return;const r=va.safeParse(e);if(!r.success)return;const i=r.data,s=this.peers.get(t);if(s)try{if("offer"===i.kind){const e=n();this.adoptConnection(s,e),e.ondatachannel=e=>{this.adoptDataChannel(e.channel,s,t)},this.forwardIceCandidates(e,t),await e.setRemoteDescription({type:"offer",sdp:i.sdp}),await this.flushPendingCandidates(s,e);const r=await e.createAnswer();return await e.setLocalDescription(r),void this.sendSignal(t,{kind:"answer",sdp:r.sdp??""})}if("answer"===i.kind){const t=s.connection;if(!t)return;return await t.setRemoteDescription({type:"answer",sdp:i.sdp}),void await this.flushPendingCandidates(s,t)}if(!s.remoteDescriptionSet)return void s.pendingCandidates.push(i.candidate);await(s.connection?.addIceCandidate(i.candidate))}catch(t){console.error("[SignalingTransport] WebRTC signal failed:",t)}}adoptConnection(t,e){t.connection?.close(),t.connection=e,t.remoteDescriptionSet=!1,t.pendingCandidates=[]}async flushPendingCandidates(t,e){if(t.connection!==e)return;t.remoteDescriptionSet=!0;const n=t.pendingCandidates;t.pendingCandidates=[];for(const t of n)try{await e.addIceCandidate(t)}catch(t){console.warn("[SignalingTransport] ICE candidate rejected:",t)}}adoptDataChannel(t,e,n){e.dataChannel=t,t.onmessage=t=>{this.receiveEnvelope(String(t.data),n)}}forwardIceCandidates(t,e){t.onicecandidate=t=>{t.candidate&&this.sendSignal(e,{kind:"ice",candidate:t.candidate.toJSON()})}}sendSignal(t,e){this.sendToServer({type:"signal",to:t,payload:e})}}class xa{constructor(t=1e3){this.pendingUploads=new Map,this.defaultDelay=t}scheduleUpload(t,e,n,r){const i=r??this.defaultDelay,s=this.pendingUploads.get(t);s?.timerId&&(clearTimeout(s.timerId),s.promise.reject(new Error("Upload cancelled by new request")));const a=s?.tracker??e;if(s&&s.tracker!==e)for(const t of e.getDirtyChunks())a.markDirty(1024*t);return new Promise((e,r)=>{const s=setTimeout(async()=>{try{await n(),e()}catch(e){console.error(`[DebouncedUploader] Upload failed for batch ${t}:`,e),r(e instanceof Error?e:new Error(String(e)))}finally{this.pendingUploads.delete(t)}},i);this.pendingUploads.set(t,{tracker:a,timerId:s,uploadFn:n,promise:{resolve:e,reject:r}})})}async flush(t){const e=this.pendingUploads.get(t);if(e){e.timerId&&clearTimeout(e.timerId);try{await e.uploadFn()}finally{this.pendingUploads.delete(t)}}}async flushAll(){const t=Array.from(this.pendingUploads.keys());await Promise.all(t.map(t=>this.flush(t)))}cancel(t){const e=this.pendingUploads.get(t);e&&(e.timerId&&clearTimeout(e.timerId),this.pendingUploads.delete(t))}cancelAll(){for(const t of this.pendingUploads.values())t.timerId&&clearTimeout(t.timerId);this.pendingUploads.clear()}getPendingCount(){return this.pendingUploads.size}hasPending(t){return this.pendingUploads.has(t)}}const Ia="AES-GCM",Aa=6e5,Ca="swarm-id-seed-encryption-v1";function Ua(){const t=new Uint8Array(32);return crypto.getRandomValues(t),t}async function Pa(t,e){const n=new Uint8Array(12);crypto.getRandomValues(n);const r=await crypto.subtle.encrypt({name:Ia,iv:n},e,t),i=new Uint8Array(12+r.byteLength);return i.set(n),i.set(new Uint8Array(r),12),fe(i)}async function Ea(t,e){const n=ye(t),r=n.slice(0,12),i=n.slice(12),s=await crypto.subtle.decrypt({name:Ia,iv:r},e,i);return new Uint8Array(s)}async function $a(t,e,n){const r=await crypto.subtle.importKey("raw",t,"HKDF",!1,["deriveKey"]);return crypto.subtle.deriveKey({name:"HKDF",hash:"SHA-256",salt:e,info:(new TextEncoder).encode(n)},r,{name:Ia,length:256},!1,["encrypt","decrypt"])}function Da(t){return $a(t,new Uint8Array,Ca)}function Ba(t,e){return $a(t,e,Ca)}async function Ta(t,e,n=6e5){const r=await crypto.subtle.importKey("raw",(new TextEncoder).encode(t),"PBKDF2",!1,["deriveKey"]);return crypto.subtle.deriveKey({name:"PBKDF2",hash:"SHA-256",salt:e,iterations:n},r,{name:Ia,length:256},!1,["encrypt","decrypt"])}const Oa=Aa,Ma="chunks",Ra="metadata";class Fa{async open(){if(!this.db)return new Promise((t,e)=>{const n=indexedDB.open("swarm-utilization-store",4);n.onerror=()=>{e(new Error(`Failed to open IndexedDB: ${n.error}`))},n.onblocked=()=>{console.warn("[UtilizationStore] IndexedDB upgrade blocked by another open connection; waiting for it to close")},n.onsuccess=()=>{this.db=n.result,this.db.onversionchange=()=>{this.close()},t()},n.onupgradeneeded=t=>{const e=t.target.result;e.objectStoreNames.contains(Ma)&&e.deleteObjectStore(Ma),e.objectStoreNames.contains(Ra)&&e.deleteObjectStore(Ra);e.createObjectStore(Ma,{keyPath:["batchId","chunkIndex"]}).createIndex("batchId","batchId",{unique:!1}),e.createObjectStore(Ra,{keyPath:"batchId"})}})}async getChunk(t,e){return await this.open(),new Promise((n,r)=>{const i=this.db.transaction([Ma],"readonly").objectStore(Ma).get([t,e]);i.onsuccess=()=>{const r=i.result;r&&this.touchChunk(t,e).catch(t=>{console.warn("[UtilizationStore] Failed to update lastAccess:",t)}),n(r)},i.onerror=()=>{r(new Error(`Failed to get chunk: ${i.error}`))}})}async putChunk(t){return await this.open(),new Promise((e,n)=>{const r=this.db.transaction([Ma],"readwrite").objectStore(Ma),i={...t,lastAccess:Date.now()},s=r.put(i);s.onsuccess=()=>e(),s.onerror=()=>{n(new Error(`Failed to put chunk: ${s.error}`))}})}async getAllChunks(t){return await this.open(),new Promise((e,n)=>{const r=this.db.transaction([Ma],"readonly").objectStore(Ma).index("batchId").getAll(t);r.onsuccess=()=>{const t=r.result;t.sort((t,e)=>t.chunkIndex-e.chunkIndex),e(t)},r.onerror=()=>{n(new Error(`Failed to get all chunks: ${r.error}`))}})}async clearBatch(t){return await this.open(),new Promise((e,n)=>{const r=this.db.transaction([Ma,Ra],"readwrite"),i=r.objectStore(Ma),s=r.objectStore(Ra),a=i.index("batchId").openCursor(t);a.onsuccess=()=>{const t=a.result;t&&(t.delete(),t.continue())},s.delete(t),r.oncomplete=()=>e(),r.onerror=()=>{n(new Error(`Failed to clear batch: ${r.error}`))}})}async touchChunk(t,e){return await this.open(),new Promise((n,r)=>{const i=this.db.transaction([Ma],"readwrite"),s=i.objectStore(Ma),a=s.get([t,e]);a.onsuccess=()=>{const t=a.result;t&&(t.lastAccess=Date.now(),s.put(t))},i.oncomplete=()=>n(),i.onerror=()=>{r(new Error(`Failed to touch chunk: ${i.error}`))}})}async getMetadata(t){return await this.open(),new Promise((e,n)=>{const r=this.db.transaction([Ra],"readonly").objectStore(Ra).get(t);r.onsuccess=()=>e(r.result),r.onerror=()=>{n(new Error(`Failed to get metadata: ${r.error}`))}})}async putMetadata(t){return await this.open(),new Promise((e,n)=>{const r=this.db.transaction([Ra],"readwrite").objectStore(Ra).put(t);r.onsuccess=()=>e(),r.onerror=()=>{n(new Error(`Failed to put metadata: ${r.error}`))}})}close(){this.db&&(this.db.close(),this.db=void 0)}}function qa(t){return t.publicKey().address().toHex().toLowerCase()}function La(t,e){!function(t){const e=Fe+qe,n=Fe+Le;if(t.length<e||t.length>n)throw new we("invalid-request",`Invalid chunk length: ${t.length} bytes (expected span plus payload, ${e} to ${n})`)}(t.data);const n=Se(t.data).toUint8Array();if("content"===t.kind)return{address:n};const r=new I("app"===t.signer?e.appSecret:t.signer.privateKey);if(e.internalOwners.has(qa(r)))throw new we("invalid-request","This single-owner chunk would be owned by one of the account's own keys, which never signs for an app.");const i=ye(t.identifier),a=r.publicKey().address();return{address:s.Binary.keccak256(s.Binary.concatBytes(i,a.toUint8Array())),owner:a,signature:r.sign(s.Binary.concatBytes(i,n))}}function Ka(t){return y(t).toHex()}const Na=1/3,Ha=se({count:ue().int().nonnegative(),windowStart:ue(),windowCount:ue().int().nonnegative(),buckets:Ke(de(),ue().int().nonnegative())});function Wa(t,e){return e>=t.windowStart&&e-t.windowStart<6e4}function ja(t,e){return new we("upload-unavailable",e,{reason:t})}function za(t,e){return t.count>=1e4?ja("app-stamp-count","This app has used its count limit of 10000 stamps on this stamp."):Wa(t,e)&&t.windowCount>=60?ja("app-stamp-rate","This app has reached its rate limit of 60 stamps per 60 seconds. Try again shortly."):void 0}function Ga(t,e){const n=za(t,e.now);if(n)return n;const r=(i=e.laneCapacity,Math.floor(i*Na));var i;return(t.buckets[e.bucket]??0)>=r?ja("app-bucket-share",`This app has used its bucket share limit of ${r} stamps in this chunk's bucket.`):void 0}function Va(t,e){const n=Wa(t,e);return{...t,windowStart:n?t.windowStart:e,windowCount:n?t.windowCount+1:1}}function Ja(t,e,n){return{...Va(t,n),count:t.count+1,buckets:{...t.buckets,[e]:(t.buckets[e]??0)+1}}}const Za=se({slot:ue().int().nonnegative(),timestampMs:ue().int().nonnegative()}),Ya=se({partition:ue().int().nonnegative(),partitionCount:ue().int().positive(),slots:Ke(de(),Za)});function _a(t){return{partition:t.partition,partitionCount:t.partitionCount,slots:{}}}function Qa(t,e){if(null===t)return _a(e);try{const n=Ya.safeParse(JSON.parse(t));return n.success&&n.data.partition===e.partition&&n.data.partitionCount===e.partitionCount?n.data:_a(e)}catch{return _a(e)}}const Xa="Stamp worker pool is terminated";class to{constructor(t,e,n){this.nextWorker=0,this.nextId=0,this.workers=t,this.size=t.length,this.issuer=e,this.stamper=n,this.batchId=n.batchId,this.assignSlot="assignSlot"in n?t=>n.assignSlot(t):t=>function(t,e){const n=e[0]<<8|e[1],r=t.buckets[n];if(r>=t.maxSlot)throw new Error("Bucket is full");return t.buckets[n]=r+1,r}(n,t)}static async create(t,e,n){const r=n??4,i=new Blob(['!function(){"use strict";var t,n={};var e=(t||(t=1,function(t){var n;async function e(t){return new Promise((n,e)=>t.then(e,n))}async function r(t){return new Promise(n=>setTimeout(()=>{n(!0)},t))}function i(t,n=Math.random){for(let e=t.length-1;e>0;e--){const r=Math.floor(n()*(e+1)),i=t[e];t[e]=t[r],t[r]=i}return t}function o(t,n,e=Math.random){return i(V(0,t.length-1),e).slice(0,n)}function s(t,n,e=Math.random){return Math.floor(e()*(n-t+1))+t}function u(t,n,e){return n>=t.x&&n<t.x+t.width&&e>=t.y&&e<t.y+t.height}function a(t,n=Math.random){return n()<t}function c(t,n=Math.random){return t[Math.floor(t.length*n())]}function l(t){if(!t.length)throw Error("Received empty array");return t[t.length-1]}function f(t,n,e){return e(n.reduce((t,n)=>n(t),t))}function h(t,n){if(null==t)return null;const e=n.split(".");let r=t;for(const t of e){if(null===r[t]||void 0===r[t])return null;r=r[t]}return r}function g(t,n,e){const r=n.split(/\\.|\\[/);let i=t;for(let t=0;t<r.length;t++){const n=r[t],o=t<r.length-1&&r[t+1].includes("]"),s=n.includes("]")?n.replace(/\\[|\\]/g,""):n;if(t===r.length-1)return i[s]=e,e;d(i[s])||(i[s]=o?[]:{}),i=i[s]}return e}function p(t,n){return Math.round(t/n)*n}function d(t,n=!0){return!(!t||n&&!w(t._readableState)||n&&t.constructor&&(t.constructor.isBuffer||"AbortController"==t.constructor.name||"AbortSignal"==t.constructor.name||"Uint8Array"==t.constructor.name||"ArrayBuffer"===t.constructor.name||"ReadableStream"===t.constructor.name))&&"object"==typeof t}function m(t){return d(t)&&!Array.isArray(t)}function y(t){return Array.isArray(t)&&0===t.length}function w(t){return void 0===t}function b(t){return"[object Function]"===Object.prototype.toString.call(t)||"[object AsyncFunction]"===Object.prototype.toString.call(t)}function x(t){return"[object String]"===Object.prototype.toString.call(t)}function $(t){return"number"==typeof t&&isFinite(t)}function v(t){return!0===t||!1===t}function E(t){return"[object Date]"===Object.prototype.toString.call(t)}function M(t){return!x(t)||0===t.trim().length}function A(t){return $(t)&&Number.isInteger(t)&&t>=1}function S(t){return x(t)&&null!==t.match(/^-?\\d+$/)}function k(t){return x(t)&&null!==t.match(/^(0x)?[0-9a-f]+$/i)}Object.defineProperty(t,"__esModule",{value:!0}),t.Vector=t.Cache=t.Assertions=t.Strings=t.Types=t.Objects=t.Dates=t.Promises=t.Numbers=t.System=t.Arrays=t.Random=t.Elliptic=t.Binary=t.Lock=t.Solver=t.RollingValueProvider=t.TrieRouter=t.AsyncQueue=t.PubSubChannel=t.FixedPointNumber=t.MerkleTree=t.Chunk=t.Uint8ArrayWriter=t.Uint8ArrayReader=t.AsyncLazy=t.Lazy=t.Optional=void 0;const O="!@#$%^&*()_+-=[]{}|;:<>?,./".split(""),T="abcdefghijklmnopqrstuvwxyz",B=T+"ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890",j=B+"!@#$%^&*()_+-=[]{}|;:<>?,./",C=["—","\\\\","東","京","都","𝖆","𝖇","𝖈","👾","🙇","💁","🙅","ᚠ","ᛇ","ᚻ","ᛦ"],D="0123456789abcdef";function I(t,n){if(M(t))throw new TypeError(`Expected string${n?.name?` for ${n.name}`:""}, got: `+t);if(n&&(void 0!==n.min&&t.length<n.min||void 0!==n.max&&t.length>n.max))throw RangeError(`Expected string${n?.name?` for ${n.name}`:""} length in range: ${n.min??"-inf"}..${n.max??"inf"}; got: ${t.length}`);return t}function U(t,n){if(void 0!==n.min&&t<n.min||void 0!==n.max&&t>n.max)throw RangeError(`Expected value${n?.name?` for ${n.name}`:""} in range: ${n.min??"-inf"}..${n.max??"inf"}; got: ${t}`)}function F(t,n){if($(t))return n&&U(t,n),t;if(!x(t)||!t.match(/^-?\\d+(\\.\\d+)?$/))throw new TypeError(`Expected number${n?.name?` for ${n.name}`:""}, got: `+t);const e=parseFloat(t);return n&&U(e,n),e}function N(t,n){return Math.trunc(F(t,n))}function P(t,n){if(!m(t))throw new TypeError(`Expected object${n?.name?` for ${n.name}`:""}, got: `+t);return t}function z(t){return x(t)&&null!==t.match(/^https?:\\/\\/.+/)}function L(t){return"bigint"==typeof t}function R(t,n){if(!L(t))throw new TypeError(`Expected bigint${n?.name?` for ${n.name}`:""}, got: `+t);if(void 0!==n?.min&&t<n?.min||void 0!==n?.max&&t>n?.max)throw RangeError(`Expected value${n?.name?` for ${n.name}`:""} in range: ${n.min??"-inf"}..${n.max??"inf"}; got: ${t}`);return t}function W(t,n){for(const[e,r]of Object.entries(n))if(!r(t[e]))throw TypeError(`${e} in value does not exist or match shape`);for(const e of Object.keys(t))if(!n[e])throw TypeError(`${e} exists in value but not in shape`);return!0}function q(t,n){if(m(t)&&m(n))for(const e in n)m(n[e])?(t[e]||(t[e]={}),q(t[e],n[e])):Array.isArray(n[e])?t[e]=[...n[e]]:(null!==n[e]&&void 0!==n[e]||null===t[e]||void 0===t[e])&&(t[e]=n[e]);return t}function H(t,n){const e={};for(const r of t)for(const t of Object.keys(r))e[t]?e[t]=n(e[t],r[t]):e[t]=r[t];return e}function K(t,n){Array.prototype.push.apply(t,n)}function V(t,n){const e=[];for(let r=t;r<=n;r++)e.push(r);return e}function J(t,n=()=>!1){return t.toLowerCase().normalize("NFD").replace(/[\\u0300-\\u036f]/g,"").split("").map(t=>/[a-z0-9]/.test(t)||n(t)?t:"-").join("").replace(/-+/g,"-").replace(/^-|-$/g,"")}function Z(t,n){if(0===n.length)return 0;const e=t.toLowerCase(),r=n.toLowerCase();return t===n?1e4:e.startsWith(r)?1e4-t.length:e.includes(r)?5e3-t.length:new RegExp(".*"+r.split("").join(".*")+".*").test(e)?1e3-t.length:0}const Q={"&":"&",""":\'"\',"'":"\'",">":">","<":"<"};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>,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<,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(",",",")})`)).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(",",","),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,"<").replace(/>/g,">").replace(/"/g,""")},decodeHtmlEntities:function(t){let n=t.replace(/&#(\\d+);/g,(t,n)=>String.fromCharCode(n)).replace(/&#x(\\d+);/g,(t,n)=>String.fromCharCode(parseInt(n,16)));for(const[t,e]of Object.entries(Q))n=n.replaceAll(t,e);return n},after:G,afterLast:Y,before:_,beforeLast:X,betweenWide:function(t,n,e){const r=X(t,e);return r?G(r,n):null},betweenNarrow:function(t,n,e){const r=G(t,n);return r?_(r,e):null},getPreLine:function(t){return t.replace(/ +/g," ").replace(/^ /gm,"")},containsWord:Ot,containsWords:function(t,n,e){return"any"===e?n.some(n=>Ot(t,n)):n.every(n=>Ot(t,n))},joinUrl:Jt,getFuzzyMatchScore:Z,sortByFuzzyScore:function(t,n){return t.filter(t=>Z(t,n)).sort((t,e)=>Z(e,n)-Z(t,n))},splitOnce:tt,splitAll:nt,randomize:function(t,n=Math.random){return t.replace(/\\{(.+?)\\}/g,(t,e)=>c(e.split("|"),n))},expand:function t(n){const e=n.match(/\\{(.+?)\\}/);if(!e||!e.index)return[n];const r=e[1].split(","),i=n.slice(0,e.index),o=n.slice(e.index+e[0].length);let s=[];for(const n of r){const e=t(i+n+o);s=s.concat(e)}return s},shrinkTrim:it,capitalize:ot,decapitalize:st,csvEscape:function(t){return t.match(/"|,/)?`"${t.replace(/"/g,\'""\')}"`:t},parseCsv:function(t,n=",",e=\'"\'){const r=[];let i="",o=!1;const s=t.split("");for(const t of s)t!==n||o?t!==e||(i||o)&&!o?i+=t:o=!o:(r.push(i),i="");return r.push(i),r},surroundInOut:function(t,n){return n+t.split("").join(n)+n},getExtension:et,getBasename:rt,normalizeEmail:function(t){let[n,e]=t.split("@");n=it(n.replaceAll(".","").toLowerCase()).replaceAll(" ","");const[r]=n.split("+");if(!r||!e||-1===e.indexOf(".")||e.indexOf(".")===e.length-1)throw new Error("Invalid email");return e=it(e.toLowerCase()).replaceAll(" ",""),`${r}@${e}`},normalizeFilename:function(t){const n=rt(t),e=et(t);return e?`${n}.${e}`:n},parseFilename:function(t){const n=rt(t),e=et(t);return{basename:n,extension:e,filename:e?`${n}.${e}`:n}},camelToTitle:function(t){return ot(t.replace(/([A-Z])/g," $1"))},slugToTitle:function(t){return t.split("-").map(ot).join(" ")},slugToCamel:function(t){return st(t.split("-").map(ot).join(""))},joinHumanly:function(t,n=", ",e=" and "){return t&&t.length?1===t.length?t[0]:2===t.length?`${t[0]}${e}${t[1]}`:`${t.slice(0,t.length-1).join(n)}${e}${t[t.length-1]}`:""},findWeightedPair:bt,extractBlock:xt,extractAllBlocks:function(t,n){const e=[];let r=n.wordBoundary?dt(t,[`${n.opening} `,`${n.opening}\\n`],n.start||0):t.indexOf(n.opening,n.start||0);for(;;){if(-1===r)return e;const i=xt(t,{...n,start:r});if(!i)return e;e.push(i),r=n.wordBoundary?dt(t,[`${n.opening} `,`${n.opening}\\n`],r+i.length):t.indexOf(n.opening,r+i.length)}},replaceBlocks:function(n,e,r){let i=0;for(;;){const o=t.Strings.extractBlock(n,{...r,start:i});if(!o)return n;const s=e(o);i=n.indexOf(o,i)+s.length,n=n.replace(o,s)}},indexOfEarliest:dt,lastIndexOfBefore:wt,parseHtmlAttributes:function(t){const n={},e=t.match(/([a-z\\-]+)="([^"]+)"/g);if(e)for(const t of e){const[e,r]=tt(t,"=");n[e]=r.slice(1,r.length-1)}return n},readNextWord:Tt,readWordsAfterAll:function(t,n,e=[]){const r=pt(t,n),i=[];for(const o of r)i.push(Tt(t,o+n.length,e));return i},resolveVariables:function(t,n,e="$",r=":"){for(const i in n)t=Bt(t,i,n[i],e,r);return t=jt(t)},resolveVariableWithDefaultSyntax:Bt,resolveRemainingVariablesWithDefaults:jt,isLetter:ut,isDigit:at,isLetterOrDigit:ct,isValidObjectPathCharacter:function(t){return ct(t)||"."===t||"["===t||"]"===t||"_"===t},insert:function(t,n,e,r,i){return t.slice(0,n)+r+t.slice(n,n+e)+i+t.slice(n+e)},indexOfRegex:ht,allIndexOf:pt,lineMatches:gt,linesMatchInOrder:function(t,n,e=!0){let r=0;for(const i of n){let n=!1;for(;!n&&r<t.length;)gt(t[r],i,e)&&(n=!0),r++;if(!n)return!1}return!0},represent:function t(n,e="json",r=0){if(n&&b(n.represent)){const t=n.represent();if(x(t))return"json"===e&&0===r?JSON.stringify(t):t}if(d(n,!1)){if(r>1)return"[object Object]";if("json"===e){if(Array.isArray(n)){const e=n.map(n=>t(n,"json",r+1));return 0===r?JSON.stringify(e):e}const e={};n.message&&(e.message=t(n.message,"json",r+1));for(const[i,o]of Object.entries(n))e[i]=t(o,"json",r+1);return 0===r?JSON.stringify(e):e}if("key-value"===e){const e=Object.keys(n);return n.message&&!e.includes("message")&&e.unshift("message"),e.map(e=>`${e}=${JSON.stringify(t(n[e],"json",r+1))}`).join(" ")}}return w(n)&&(n="undefined"),0===r?JSON.stringify(n):n},resolveMarkdownLinks:function(t,n){let e=t.indexOf("](");for(;-1!==e;){const r=wt(t,"[",e),i=t.indexOf(")",e);if(-1!==r&&-1!==i){const[e,o]=t.slice(r+1,i).split("]("),s=n(e,o);t=t.slice(0,r)+s+t.slice(i+1)}e=t.indexOf("](",e+1)}return t},buildUrl:function(t,n,e){return Jt([t,n])+Ct(e||{})},isChinese:function(t){return/^[\\u4E00-\\u9FA5]+$/.test(t)},replaceBetweenStrings:function(t,n,e,r,i=!0){const o=t.indexOf(n),s=t.indexOf(e,o+n.length);if(-1===o||-1===s)throw Error("Start or end not found");return i?t.substring(0,o+n.length)+r+t.substring(s):t.substring(0,o)+r+t.substring(s+e.length)},describeMarkdown:function(t){let n="p";return t.startsWith("#")?(n="h1",t=t.slice(1).trim()):t.startsWith("-")&&(n="li",t=t.slice(1).trim()),{type:n,isCapitalized:t[0]===t[0].toUpperCase(),hasPunctuation:/[.?!]$/.test(t),endsWithColon:/:$/.test(t)}},isBalanced:function(t,n="(",e=")"){let r=0,i=0;for(;i<t.length;)if(t.startsWith(n,i)?(r++,i+=n.length):t.startsWith(e,i)?(r--,i+=e.length):i++,r<0)return!1;return n===e?r%2==0:0===r},textToFormat:function(t){let n=(t=t.normalize("NFD").replace(/[\\u0300-\\u036f]/g,"")).length;for(;(t=t.replace(/(\\w+)[\\s,\']+\\w+/g,"$1")).length!==n;)n=t.length;return t=(t=(t=t.replaceAll(/[A-Z][a-zA-Z0-9]*/g,"A")).replaceAll(/[a-z][a-zA-Z0-9]*/g,"a")).replaceAll(/[\\u4E00-\\u9FA5]+/g,"Z")},splitFormatting:function(t,n){const e=[];let r=0;for(;r<t.length;){const i=t.indexOf(n,r);if(-1===i){e.push({string:t.slice(r),symbol:null});break}const o=t.indexOf(n,i+n.length);if(i>r&&-1!==o&&e.push({string:t.slice(r,i),symbol:null}),-1===o){e.push({string:t.slice(r),symbol:null});break}e.push({string:t.slice(i+n.length,o),symbol:n}),r=o+n.length}return e},splitHashtags:function(t){const n=[];let e=0;for(;e<t.length;){const r=yt(t,e);if(-1===r){n.push({string:t.slice(e),symbol:null});break}const i=mt(t,r+1);if(-1===i){n.push({string:t.slice(e,r),symbol:null}),n.push({string:t.slice(r+1),symbol:"#"});break}r>e&&n.push({string:t.slice(e,r),symbol:null}),n.push({string:t.slice(r+1,i),symbol:"#"}),e=i}return n},splitUrls:function(t){const n=[];let e=0;for(;e<t.length;){const r=dt(t,["http://","https://"],e);if(-1===r){n.push({string:t.slice(e),symbol:null});break}const i=dt(t,[" ","\\n"],r);if(-1===i){r>e&&n.push({string:t.slice(e,r),symbol:null}),n.push({string:t.slice(r),symbol:"http"});break}r>e&&n.push({string:t.slice(e,r),symbol:null}),n.push({string:t.slice(r,i),symbol:"http"}),e=i}return n},route:function(t,n){const e=t.split("/").filter(t=>t),r=n.split("/").filter(t=>t);if(e.length!==r.length)return null;const i={};for(let t=0;t<e.length;t++){const n=e[t];if(n.startsWith(":"))i[n.slice(1)]=r[t];else if(n!==r[t])return null}return i},explodeReplace:At,generateVariants:function(n,e,r,i=Math.random){const o=t.Arrays.shuffle(e.map(n=>({variants:t.Arrays.shuffle(n.variants.map(t=>t),i),avoid:n.avoid})),i),s=[];for(const t of o){const e=t.variants.filter(n=>n!==t.avoid),i=e.find(t=>n.includes(t));if(i&&(K(s,At(n,i,e)),s.length>=r))break}if(s.length<r)for(const t of o){const e=t.variants.find(t=>n.includes(t));if(e&&(K(s,At(n,e,t.variants)),s.length>=r))break}return s.slice(0,r)},replaceWord:function(t,n,e,r=!1){const i=new RegExp(r?`(?<=\\\\s|^)${n}(?=\\\\s|$)`:`\\\\b${n}\\\\b`,"g");return t.replace(i,e)},replacePascalCaseWords:function(t,n){return t.replace(/\\b[A-Z][a-zA-Z0-9]*\\b/g,t=>t.toUpperCase()===t?t:n(t))},stripHtml:function(t){return t.replace(/<[^>]*>/g,"")},breakLine:St,measureTextWidth:function(t,n={}){return[...t].reduce((t,e)=>t+(n[e]||1),0)},toLines:function(t,n,e={}){const r=[];let i="",o=0;for(let s=0;s<t.length;s++){const u=t[s];if(i+=u,o+=e[u]||1,o>n){const{line:t,rest:n}=St(i);r.push(t),i=n,o=n.split("").map(t=>e[t]||1).reduce((t,n)=>t+n,0)}}return i&&r.push(i),r},levenshteinDistance:function(t,n){const e=[];for(let n=0;n<=t.length;n++)e[n]=[n];for(let t=0;t<=n.length;t++)e[0][t]=t;for(let r=1;r<=t.length;r++)for(let i=1;i<=n.length;i++){const o=t[r-1]===n[i-1]?0:1;e[r][i]=Math.min(e[r-1][i]+1,e[r][i-1]+1,e[r-1][i-1]+o)}return e[t.length][n.length]},findCommonPrefix:kt,findCommonDirectory:function(t){const n=kt(t),e=n.lastIndexOf("/");return-1===e?"":n.slice(0,e+1)}},t.Assertions={asEqual:function(t,n){if(t!==n)throw Error(`Expected [${t}] to equal [${n}]`);return[t,n]},asTrue:function(t){if(!0!==t)throw Error(`Expected [true], got: [${t}]`);return t},asTruthy:function(t){if(!t)throw Error(`Expected truthy value, got: [${t}]`);return t},asFalse:function(t){if(!1!==t)throw Error(`Expected [false], got: [${t}]`);return t},asFalsy:function(t){if(t)throw Error(`Expected falsy value, got: [${t}]`);return t},asEither:function(t,n){if(!n.includes(t))throw Error(`Expected any of [${n.join(", ")}], got: [${t}]`);return t}},t.Cache={get:async function(t,n,e,r){const i=Date.now(),o=Vt.get(t);if(o&&o.validUntil>i)return o.value;r?.onMiss?.();try{const r=await e();return Vt.set(t,{value:r,validUntil:i+n}),r}catch(t){throw r?.onFailure?.(t),t}},getDeferred:function(t,n,e,r){const i=Date.now(),o=Vt.get(t);if(o&&o.validUntil>i)return o.value;r?.onMiss?.();const s=e();return Vt.set(t,{value:s,validUntil:i+n}),s.catch(n=>{Vt.delete(t),r?.onFailure?.(n)}),s},delete:function(t){Vt.delete(t)},deleteExpired:function(){const t=Date.now();for(const[n,e]of Vt.entries())e.validUntil<=t&&Vt.delete(n)},size:function(){return Vt.size},clear:function(){Vt.clear()}},t.Vector={addPoint:Xn,subtractPoint:function(t,n){return{x:t.x-n.x,y:t.y-n.y}},multiplyPoint:Yn,normalizePoint:function(t){const n=Math.sqrt(t.x*t.x+t.y*t.y);return{x:t.x/n,y:t.y/n}},pushPoint:te,filterCoordinates:ee,findCorners:function(t,n,e,r){const i=[{x:0,y:0},{x:e,y:0},{x:0,y:r},{x:e,y:r}];for(let n=0;n<t.length;n++)for(let e=0;e<t[0].length;e++){const r=ue(t,n,e);for(const t of r)i.some(n=>n.x===t.x&&n.y===t.y)||i.push(t)}return i.map(t=>({x:t.x*n,y:t.y*n}))},findLines:function(t,n){const e=ee(t,(n,e)=>0===t[n][e]&&0!==t[n][e+1],"row-first").map(t=>({...t,dx:1,dy:0})),r=ee(t,(n,e)=>0===t[n][e]&&0!==t[n][e-1],"row-first").map(t=>({...t,dx:1,dy:0})),i=ee(t,(n,e)=>0===t[n][e]&&0!==t[n-1]?.[e],"column-first").map(t=>({...t,dx:0,dy:1})),o=ee(t,(n,e)=>0===t[n][e]&&0!==t[n+1]?.[e],"column-first").map(t=>({...t,dx:0,dy:1}));return e.forEach(t=>t.y++),o.forEach(t=>t.x++),[...fn([...i,...o],(t,n)=>t.x===n.x&&t.y-1===n.y),...fn([...r,...e],(t,n)=>t.y===n.y&&t.x-1===n.x)].map(t=>({start:t[0],end:l(t)})).map(t=>({start:Yn(t.start,n),end:Yn(Xn(t.end,{x:t.start.dx,y:t.start.dy}),n)}))},raycast:le,raycastCircle:function(t,n,e){const r=ae(t,e),i=[];for(const e of r){const r=le(t,n,e-.001),o=le(t,n,e+.001);r&&i.push(r),o&&i.push(o)}return i},getLineIntersectionPoint:ce}}(n)),n);const r=(new TextEncoder).encode("Ethereum Signed Message:\\n32");let i,o;const s=self;s.onmessage=t=>{s.postMessage(function(t){if("init"===t.type){const n=e.Binary.hexToUint8Array(t.signerKeyHex);i=e.Binary.uint256ToNumber(n,"BE");const[r,s]=e.Elliptic.privateKeyToPublicKey(i),u=e.Binary.concatBytes(e.Binary.numberToUint256(r,"BE"),e.Binary.numberToUint256(s,"BE")),[a,c]=[e.Binary.uint256ToNumber(u.slice(0,32),"BE"),e.Binary.uint256ToNumber(u.slice(32,64),"BE")];return o=e.Elliptic.publicKeyToAddress([a,c]),{type:"ready",issuerHex:e.Binary.uint8ArrayToHex(o)}}const n=e.Binary.concatBytes(r,e.Binary.keccak256(t.message)),[s,u,a]=e.Elliptic.signMessage(n,i),c=e.Binary.concatBytes(e.Binary.numberToUint256(s,"BE"),e.Binary.numberToUint256(u,"BE"),new Uint8Array([Number(a)]));return{type:"signed",id:t.id,signatureHex:e.Binary.uint8ArrayToHex(c)}}(t.data))}}();\n'],{type:"application/javascript"}),a=URL.createObjectURL(i),o=[],c=[];for(let e=0;e<r;e++){const e=new Worker(a,{type:"classic"}),n={worker:e,pending:new Map};e.onmessage=t=>{const e=t.data;if("signed"===e.type){const t=n.pending.get(e.id);t&&(n.pending.delete(e.id),t.resolve(e.signatureHex))}},e.onerror=t=>{for(const[,e]of n.pending)e.reject(new Error(`Stamp worker error: ${t.message}`));n.pending.clear()},o.push(n);const r=new Promise((n,r)=>{const i=e.onmessage,a=e.onerror,o=setTimeout(()=>{r(new Error("Stamp worker init timed out"))},5e3);e.onmessage=t=>{"ready"===t.data.type&&(clearTimeout(o),e.onmessage=i,e.onerror=a,n(s.Binary.hexToUint8Array(t.data.issuerHex)))},e.onerror=()=>{clearTimeout(o),r(new Error("Worker init failed"))},e.postMessage({type:"init",signerKeyHex:t})});c.push(r)}const d=(await Promise.all(c))[0];return URL.revokeObjectURL(a),new to(o,d,e)}async stampChunkData(t,e=Date.now()){if(0===this.workers.length)throw new Error(Xa);const i=t[0]<<8|t[1],a=this.assignSlot(t),o=new Uint8Array(8),c=new DataView(o.buffer);c.setUint32(0,i,!1),c.setUint32(4,a,!1);const d=new Uint8Array(8);new DataView(d.buffer).setBigUint64(0,1000000n*BigInt(e),!1);const u=s.Binary.concatBytes(t,this.batchId.toUint8Array(),o,d),l=await this.dispatchSign(u),h=s.Binary.hexToUint8Array(l);return{batchId:this.batchId,index:o,issuer:new r(this.issuer),signature:new n(h),timestamp:d}}dispatchSign(t){return new Promise((e,n)=>{const r=this.nextId++,i=this.workers[this.nextWorker++%this.workers.length];i.pending.set(r,{resolve:e,reject:n}),i.worker.postMessage({type:"sign",id:r,message:t})})}terminate(){for(const t of this.workers){t.worker.terminate();for(const[,e]of t.pending)e.reject(new Error(Xa));t.pending.clear()}this.workers=[]}}function eo(t){const e=!1!==t?.encrypt;return{content:e,manifest:e&&!1!==t?.encryptManifest}}function no(t,e,n){if(t.postageStampBatchID===We)return;const r=[t.postageStampBatchID,e.defaultPostageStampBatchID];for(const t of r){if(!t)continue;const e=n.find(e=>!e.deletedAt&&e.batchID.equals(t));if(e)return e}}function ro(t,e,n){if(t.stampPending||t.postageStampBatchID===We)return[];const r=[t.postageStampBatchID,e.defaultPostageStampBatchID].filter(t=>void 0!==t).map(t=>t.toHex());return n.filter(t=>r.includes(t.batchID.toHex()))}function io(t,e=Date.now()){return function(t,e=Date.now()){const n=so(t,e);return void 0!==n&&n<=0}(t,e)?"stamp-expired":!1===t.usable||!1===t.exists?"stamp-not-usable":void 0}function so(t,e=Date.now()){if(void 0===t.batchTTL)return;const n=t.updatedAt??t.createdAt;return t.batchTTL-Math.max(0,Math.floor((e-n)/1e3))}function ao(t,e){const n=t=>Math.max(t.removedAt??0,t.lastSignedInAt??0),r=t=>t.nameUpdatedAt??0,i=new Map;for(const s of[...e,...t]){const t=i.get(s.deviceId);if(!t){i.set(s.deviceId,s);continue}const e=n(s)>=n(t)?s:t,a=e===s?t:s;i.set(s.deviceId,r(a)>r(e)?{...e,name:a.name,nameUpdatedAt:a.nameUpdatedAt}:e)}return Array.from(i.values())}function oo(t,e,n){const r=t=>t.appUrl,i=t=>Math.max(t.revokedAt??0,t.disconnectedAt??0,t.lastConnectedAt??0),s=t=>t.postageStampBatchIDAt??0,a=new Map;for(const o of[...e,...t]){const t=a.get(r(o));if(!t){a.set(r(o),o);continue}const e=i(o)>=i(t)?o:t,c=e===o?t:o,d=s(c)>s(e)?{...e,postageStampBatchID:c.postageStampBatchID,postageStampBatchIDAt:c.postageStampBatchIDAt}:e,u=je(e.chatBinding,c.chatBinding,e.appUrl,n);a.set(r(o),u===e.chatBinding?d:{...d,chatBinding:u})}return Array.from(a.values())}function co(t,e){const n=t=>t.batchID.toHex(),r=t=>Math.max(t.deletedAt??0,t.updatedAt??0,t.createdAt),i=t=>t.nameUpdatedAt??0,s=new Map;for(const a of[...e,...t]){const t=s.get(n(a));if(!t){s.set(n(a),a);continue}const e=r(a)>=r(t)?a:t,o=e===a?t:a;s.set(n(a),i(o)>i(e)?{...e,name:o.name,nameUpdatedAt:o.nameUpdatedAt}:e)}return Array.from(s.values())}function uo(t,e){const n=`swarm-write-${t}`;return"undefined"!=typeof navigator&&navigator.locks?navigator.locks.request(n,{mode:"exclusive"},e):e()}const lo="";function ho(t){const e=s.Binary.keccak256((new TextEncoder).encode(t));return s.Binary.uint8ArrayToHex(e.slice(0,8))}function po(t,e){const n=s.Binary.keccak256((new TextEncoder).encode(t));return((n[0]<<24|n[1]<<16|n[2]<<8|n[3])>>>0)%e}function fo(t,e){return t.timestampMs!==e.timestampMs?t.timestampMs<e.timestampMs?-1:1:t.tiebreaker!==e.tiebreaker?t.tiebreaker<e.tiebreaker?-1:1:0}async function yo(t){const{bee:e,backupSigner:n,swarmEncryptionKey:r,batchId:i,partition:s}=t,a=ws(i,s),o=n.publicKey().address();try{const t=await ze(e,o,a,r),n=Ge.safeParse(JSON.parse((new TextDecoder).decode(t.payload)));return n.success?n.data:void console.debug(`[partition-lock] read p=${s}: SOC present but payload failed schema validation — treating as no lock`)}catch(t){const e=t instanceof Error?t.message:String(t);return void console.debug(`[partition-lock] read p=${s}: unreadable — ${e}`)}}async function wo(t){const{bee:e,stamper:n,backupSigner:r,swarmEncryptionKey:i,batchId:s,partition:a,payload:o}=t,c=ws(s,a),d=(new TextEncoder).encode(JSON.stringify(o)),u={mode:"stamper",bee:e,stamper:n};await fs(u,r,c,d,{encryptionKey:i})}async function go(t){const e=t.now??Date.now,n=t.wait??Ve,r=()=>Je(yo(t),t.readTimeoutMs??bs,"lock read timed out").catch(()=>{}),i=t.skipInitialRead?void 0:await r(),s=e();if(i&&i.holderDeviceId!==t.deviceId&&i.holderDeviceId!==lo&&i.leasedUntil>s)return{outcome:"blocked",payload:i};if(t.shouldAbort?.())return{outcome:"aborted",payload:i};const a=t.generation??{timestampMs:s,tiebreaker:ho(t.deviceId)},o={holderDeviceId:t.deviceId,generation:a,acquiredAt:s,leasedUntil:s+t.ttlMs};await wo({...t,payload:o}),await n(t.guardMs);const c=await r();return c?fo(c.generation,a)>0?{outcome:"lost-race",payload:c}:c.holderDeviceId!==t.deviceId?{outcome:"acquired",payload:o}:{outcome:"acquired",payload:c.leasedUntil>=o.leasedUntil?c:o}:{outcome:"acquired",payload:o}}const mo=bs,bo=Ss;function vo(t){return Math.floor(t/Ss)}function So(t,e,n,r){const i=s.Binary.keccak256((new TextEncoder).encode(`swarm-id-partition-intent-v1:${t.toHex()}:${e}:${n}:${r}`));return new x(i)}function ko(t,e,n,r,i){const a=So(t,e,n,r);return s.Binary.keccak256(s.Binary.concatBytes(a.toUint8Array(),i.toUint8Array()))}function xo(t,e,n){const r=s.Binary.keccak256((new TextEncoder).encode(`swarm-id-partition-occupancy-v1:${t.toHex()}:${e}:${n}`));return new x(r)}function Io(t,e,n,r){const i=xo(t,e,n);return s.Binary.keccak256(s.Binary.concatBytes(i.toUint8Array(),r.toUint8Array()))}async function Ao(t){const e=So(t.batchId,t.partition,t.deviceId,t.epochBucket),n=t.backupSigner.publicKey().address(),r=ko(t.batchId,t.partition,t.deviceId,t.epochBucket,n),i={deviceId:t.deviceId,generation:t.generation,...void 0!==t.leasedUntil?{leasedUntil:t.leasedUntil}:{}};await Co({bee:t.bee,stamper:t.stamper,backupSigner:t.backupSigner,swarmEncryptionKey:t.swarmEncryptionKey,partition:t.partition,identifier:e,address:r,payload:i})}async function Co(t){const e=(new TextEncoder).encode(JSON.stringify(t.payload)),n={mode:"stamper",bee:t.bee,stamper:t.stamper},r=t.stamper;r instanceof Js?await r.withIntentSocSlot(t.address,t.partition,()=>fs(n,t.backupSigner,t.identifier,e,{encryptionKey:t.swarmEncryptionKey})):await fs(n,t.backupSigner,t.identifier,e,{encryptionKey:t.swarmEncryptionKey})}const Uo=t=>t instanceof Error&&/status code 5\d\d/.test(t.message);async function Po(t){const e=()=>Je(ze(t.bee,t.owner,t.identifier,t.swarmEncryptionKey),t.timeoutMs??mo,"intent read timed out");for(let n=0;n<2;n++)try{const n=await e(),r=Ze.safeParse(JSON.parse((new TextDecoder).decode(n.payload)));return r.success?(console.debug(`[partition-intent] ${t.logLabel}: FOUND (gen ts=${r.data.generation.timestampMs} leasedUntil=${r.data.leasedUntil??"none"})`),r.data):void console.debug(`[partition-intent] ${t.logLabel}: malformed`)}catch(e){if(Uo(e)&&0===n&&!1!==t.retryOn5xx)continue;const r=e instanceof Ye;return void console.debug(`[partition-intent] ${t.logLabel}: ${r?`TIMEOUT (>${t.timeoutMs??mo}ms)`:`missing (${e instanceof Error?e.message:String(e)})`}${Uo(e)?" after 5xx retry":""} — treated as no-intent`)}}async function Eo(t){return Po({bee:t.bee,owner:t.backupSigner.publicKey().address(),identifier:So(t.batchId,t.partition,t.deviceId,t.epochBucket),swarmEncryptionKey:t.swarmEncryptionKey,timeoutMs:t.timeoutMs,retryOn5xx:t.retryOn5xx,logLabel:`read device=${t.deviceId} p=${t.partition} bucket=${t.epochBucket}`})}async function $o(t){return Po({bee:t.bee,owner:t.backupSigner.publicKey().address(),identifier:xo(t.batchId,t.partition,t.epochBucket),swarmEncryptionKey:t.swarmEncryptionKey,timeoutMs:t.timeoutMs,logLabel:`occupancy p=${t.partition} bucket=${t.epochBucket}`})}const Do=new Uint8Array(64),Bo=se({counters:_e(Uint32Array).refine(t=>t.length===As,{message:"counters must have 65536 entries"})});function To(t,e){const n=new Uint8Array(4);new DataView(n.buffer).setUint32(0,e,!1);const r=s.Binary.keccak256(s.Binary.concatBytes((new TextEncoder).encode("swarm-id-partition-state-v1"),t.toUint8Array(),n));return new lt(r)}const Oo=Ss,Mo=Symbol("state-pointer-read-timed-out");function Ro(t){return Math.floor(t/Oo)}const Fo=se({referenceHex:de()});function qo(t,e){const n=new Uint8Array(8);return new DataView(n.buffer).setBigUint64(0,BigInt(e),!1),new x(s.Binary.keccak256(s.Binary.concatBytes(t.toUint8Array(),n)))}async function Lo(t){const e=qo(To(t.batchId,t.partition),Ro(t.nowMs)),n=t.backupSigner.publicKey().address(),r=Ko(e,n),i=(new TextEncoder).encode(JSON.stringify({referenceHex:t.referenceHex})),s={mode:"stamper",bee:t.bee,stamper:t.stamper};t.stamper instanceof Js?await t.stamper.withIntentSocSlot(r,t.partition,()=>fs(s,t.backupSigner,e,i,{encryptionKey:t.swarmEncryptionKey})):await fs(s,t.backupSigner,e,i,{encryptionKey:t.swarmEncryptionKey})}function Ko(t,e){return s.Binary.keccak256(s.Binary.concatBytes(t.toUint8Array(),e.toUint8Array()))}function No(t,e,n,r){return Ko(qo(To(t,e),Ro(r)),n)}async function Ho(t){const e=To(t.batchId,t.partition),n=new Set,r=Ro(t.nowMs);if(n.add(r),n.add(r-1),void 0!==t.holderLeasedUntilMs){const e=Ro(t.holderLeasedUntilMs);for(let r=Ro(t.holderLeasedUntilMs-vs)-2;r<=e;r++)n.add(r)}const i=Array.from(n).sort((t,e)=>e-t),s=await Promise.all(i.map(async n=>{const r=qo(e,n);try{const e=await Je(ze(t.bee,t.owner,r,t.swarmEncryptionKey),2500,"state-pointer read timed out"),n=Fo.safeParse(JSON.parse((new TextDecoder).decode(e.payload)));return n.success?n.data:void 0}catch(t){return t instanceof Ye?Mo:void 0}}));for(let t=0;t<s.length;t++){const e=s[t];if(void 0!==e&&e!==Mo){return{pointer:e,inconclusive:s.slice(0,t).some(t=>t===Mo)}}}return{pointer:void 0,inconclusive:s.some(t=>t===Mo)}}async function Wo(t,e,n){const r=await Qe(t,new m(e).toHex()),i=64*n;if(r.length!==i)throw new Error(`reference chunk has ${r.length} bytes, expected ${i} (${n} × 64)`);return Array.from({length:n},(t,e)=>r.slice(64*e,64*(e+1)))}function jo(t){for(let e=0;e<t.length;e++)if(0!==t[e])return!1;return!0}function zo(t,e){let n=me(t);for(;e.has(Ds(n.address.toUint8Array()));)n=me(t);const r=n.address.toUint8Array();return e.add(Ds(r)),{address:r,reference:n.reference.toUint8Array(),data:n.data}}function Go(t){for(let e=0;e<t.length;e++)if(0!==t[e])return!1;return!0}class Vo{constructor(t){this.opts=t,this.holders=new Map,this.releasedPartitions=new Map,this.lastSeenLeasedUntil=new Map,this.unreadableLocks=new Set,this.closed=!1,this.pendingBeaconPublish=Promise.resolve()}static async fromSwarmEncryptionKey(t){const e=fe(t.swarmEncryptionKey),n=await Ie(e,Ce),r=new I(n);return new Vo({...t,backupSigner:r,get bee(){return t.bee}})}async refreshFromSwarm(t){const e=this.now();this.holders.clear(),this.releasedPartitions.clear(),this.lastSeenLeasedUntil.clear(),this.unreadableLocks.clear();const n=await Promise.all(Array.from({length:t},(t,e)=>Je(yo({bee:this.opts.bee,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e}),2500,"lock read timed out").catch(()=>{this.unreadableLocks.add(e)})));for(let r=0;r<t;r++){const t=n[r];if(!t){console.debug(`[PartitionLease] refresh p=${r}: no readable lock`);continue}if(t.holderDeviceId===lo){console.debug(`[PartitionLease] refresh p=${r}: released sentinel`),this.releasedPartitions.set(r,t.generation),this.lastSeenLeasedUntil.set(r,t.leasedUntil);continue}const i=t.holderDeviceId===this.opts.deviceId?" (self)":"";t.leasedUntil<=e?(console.debug(`[PartitionLease] refresh p=${r}: EXPIRED holder ${t.holderDeviceId}${i} (until ${t.leasedUntil} <= now ${e})`),this.lastSeenLeasedUntil.set(r,t.leasedUntil)):(console.debug(`[PartitionLease] refresh p=${r}: held by ${t.holderDeviceId}${i} until ${t.leasedUntil}`),this.holders.set(r,{deviceId:t.holderDeviceId,generation:t.generation,acquiredAt:t.acquiredAt,leasedUntil:t.leasedUntil}))}const r=Array.from(this.holders.entries()).map(([t,e])=>`${t}->${e.deviceId}`).join(",");console.debug(`[PartitionLease] refresh: live holders={${r}} self=${this.opts.deviceId}`)}async refreshHoldersFromPresence(t){this.applyPresence(await this.readPresence(t))}async readPresence(t){const e=this.now(),n=(this.opts.knownDeviceIds?.()??[]).filter(t=>t!==this.opts.deviceId);if(0===n.length)return[];const r=vo(e),i=[r,r-1];return Promise.all(Array.from({length:t}).flatMap((t,e)=>n.flatMap(t=>i.map(async n=>({partition:e,deviceId:t,bucket:n,intent:await Eo({bee:this.opts.bee,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e,deviceId:t,epochBucket:n,timeoutMs:this.opts.intentReadTimeoutMs})})))))}applyPresence(t){const e=this.now();for(const{partition:n,deviceId:r,bucket:i,intent:s}of t){if(!s)continue;if(this.releasedPartitions.has(n))continue;if(void 0===s.leasedUntil||s.leasedUntil<=e-bo)continue;const t=s.leasedUntil,a=this.holders.get(n);a&&a.deviceId===this.opts.deviceId||(!a||t>a.leasedUntil)&&(this.holders.set(n,{deviceId:r,generation:s.generation,acquiredAt:a?.acquiredAt??0,leasedUntil:t}),console.debug(`[PartitionLease] presence p=${n}: live holder ${r} (bucket ${i}, leasedUntil ${t})`))}}async refreshHoldersFromOccupancy(t){this.applyOccupancy(await this.readOccupancy(t))}async readOccupancy(t){const e=vo(this.now()),n=[e,e-1];return Promise.all(Array.from({length:t}).flatMap((t,e)=>n.map(async t=>({partition:e,occupancy:await $o({bee:this.opts.bee,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e,epochBucket:t,timeoutMs:this.opts.intentReadTimeoutMs})}))))}applyOccupancy(t){const e=this.now();for(const{partition:n,occupancy:r}of t){if(!r||void 0===r.leasedUntil)continue;if(r.leasedUntil<=e)continue;if(r.deviceId===this.opts.deviceId)continue;if(this.releasedPartitions.has(n))continue;const t=this.holders.get(n);t&&t.deviceId===this.opts.deviceId||(!t||r.leasedUntil>t.leasedUntil)&&(this.holders.set(n,{deviceId:r.deviceId,generation:r.generation,acquiredAt:t?.acquiredAt??0,leasedUntil:r.leasedUntil}),console.debug(`[PartitionLease] occupancy p=${n}: live holder ${r.deviceId} (leasedUntil ${r.leasedUntil})`))}}isActive(t){for(const e of this.holders.values())if(e.deviceId===t)return!0;return!1}heldPartition(){for(const[t,e]of this.holders)if(e.deviceId===this.opts.deviceId)return t}getHolders(){return Array.from(this.holders.entries()).map(([t,e])=>({partition:t,deviceId:e.deviceId,leasedUntil:e.leasedUntil}))}pickFreeOrExpired(t){const e=po(this.opts.deviceId,t);for(let n=0;n<t;n++){const r=(e+n)%t,i=this.holders.get(r);if(!i||i.deviceId===this.opts.deviceId)return r}}async acquire(t){const{partitionCount:e}=t;if(this.closed=!1,this.publishedReferences=void 0,this.publishedCounter=void 0,this.lastReferenceHex=void 0,this.lastFullPublishEpoch=void 0,e<=1)return{partition:void 0,partitionCount:1,localCounter:new Uint32Array(As),isReadOnly:!1};const n=this.now(),r=po(this.opts.deviceId,e),[,i,s,a]=await Promise.all([this.refreshFromSwarm(e),this.readPresence(e),this.readOccupancy(e),this.speculativeStatePointer(r,n)]);this.applyPresence(i),this.applyOccupancy(s);const o=this.heldPartition(),c=o??this.pickFreeOrExpired(e),d=!(this.opts.knownDeviceIds?.()??[]).some(t=>t!==this.opts.deviceId)&&Array.from(this.holders.values()).every(t=>t.deviceId===this.opts.deviceId)&&0===this.releasedPartitions.size&&0===this.lastSeenLeasedUntil.size&&0===this.unreadableLocks.size;return console.debug(`[PartitionLease] acquire: chosen=${c} via=${void 0!==o?"held(re-acquire)":"pickFreeOrExpired"} home=${po(this.opts.deviceId,e)} liveHolders=${this.holders.size} partitionCount=${e}`),void 0===c?{partition:void 0,partitionCount:e,localCounter:new Uint32Array(As),isReadOnly:!0}:this.claimPartition({partition:c,partitionCount:e,freshClaim:void 0===o,nowMs:n,speculativePointer:c===r?a:void 0,soloClean:d})}async speculativeStatePointer(t,e){const{batchId:n}=this.opts;try{return await Ho({bee:this.opts.bee,owner:this.opts.backupSigner.publicKey().address(),swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:n,partition:t,nowMs:e})}catch{return}}async claimPartition(t){const{partition:e,partitionCount:n,freshClaim:r}=t,{stamper:i,batchId:a,batchDepth:o}=this.requireWriteContext(),c=i instanceof Js?await i.getSyncedReference(e):void 0,d=await async function(t,e){const{bee:n,owner:r,swarmEncryptionKey:i,batchId:a,partition:o,batchDepth:c,holderLeasedUntilMs:d,lockUnreadable:u,nowMs:l=Date.now()}=t,h=void 0===d?t.prefetchedPointer:void 0,{pointer:p,inconclusive:f}=h??await Ho({bee:n,owner:r,swarmEncryptionKey:i,batchId:a,partition:o,nowMs:l,holderLeasedUntilMs:d});if(!p)return u||f&&void 0!==d?(console.warn(`[partition-state] partition ${o}: no pointer found but the read was inconclusive (lockUnreadable=${!0===u} pointerTimedOut=${f}); degrading to read-only instead of resuming.`),{unchanged:!1,readFailed:!0}):void 0!==e?{referenceHex:e,unchanged:!0}:{localCounter:new Uint32Array(As),unchanged:!1};if(f)return console.warn(`[partition-state] partition ${o}: found a pointer but a newer bucket read timed out (a fresher resume point may be hidden); degrading to read-only instead of resuming from a stale candidate.`),{unchanged:!1,readFailed:!0};const y=p.referenceHex,w=new m(y).toUint8Array();if(void 0!==e&&y===e){const{numUtilizationChunks:t}=$s(c);return{referenceHex:y,unchanged:!0,references:await Wo(n,w,t).catch(()=>{})}}const g=new Uint32Array(As),b=[Ds(w.slice(0,32))];let v=[];try{const{numUtilizationChunks:t}=$s(c);v=await Wo(n,w,t);const e=await Promise.all(v.map((t,e)=>jo(t)?void 0:Qe(n,s.Binary.uint8ArrayToHex(t)).then(n=>({i:e,ref:t,data:n}))));for(const t of e)void 0!==t&&(Os(g,t.i,t.data,c),b.push(Ds(t.ref.slice(0,32))));Bo.parse({counters:g})}catch(t){return console.warn(`[partition-state] reading partition ${o} counter failed; degrading to read-only:`,t),{unchanged:!1,readFailed:!0}}return{localCounter:g,referenceHex:y,unchanged:!1,stateBuckets:b,references:v}}({bee:this.opts.bee,owner:this.opts.backupSigner.publicKey().address(),swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:a,partition:e,batchDepth:o,holderLeasedUntilMs:this.holders.get(e)?.leasedUntil??this.lastSeenLeasedUntil.get(e),lockUnreadable:this.unreadableLocks.has(e),nowMs:t.nowMs,prefetchedPointer:t.speculativePointer},c);if(d.readFailed)return console.debug(`[PartitionLease] Partition ${e} state read failed; falling back to read-only without claiming.`),{partition:void 0,partitionCount:n,localCounter:new Uint32Array(As),isReadOnly:!0};const u=d.unchanged&&i instanceof Js?i.buildLeaseLocalCounter():d.localCounter??new Uint32Array(As),l={timestampMs:this.now(),tiebreaker:ho(this.opts.deviceId)},h=this.opts.knownDeviceIds?.()??[],p=h.some(t=>t!==this.opts.deviceId);if(console.debug(`[PartitionLease] claim p=${e} self=${this.opts.deviceId} freshClaim=${r} knownDevices=${h.length} intentRound=${r&&p}`),r&&p){if("lose"===await async function(t){const e=t.knownDeviceIds.filter(e=>e!==t.deviceId);if(0===e.length)return"win";const n=vo(t.now),r=n-1;await Ao({bee:t.bee,stamper:t.stamper,backupSigner:t.backupSigner,swarmEncryptionKey:t.swarmEncryptionKey,batchId:t.batchId,partition:t.partition,deviceId:t.deviceId,epochBucket:n,generation:t.generation});const i=async()=>{const i=await Promise.all(e.flatMap(e=>[n,r].map(async n=>({rivalId:e,intent:await Eo({bee:t.bee,backupSigner:t.backupSigner,swarmEncryptionKey:t.swarmEncryptionKey,batchId:t.batchId,partition:t.partition,deviceId:e,epochBucket:n,timeoutMs:t.timeoutMs,retryOn5xx:!1})}))));for(const e of i){const n=e.intent;if(n)if(void 0===n.leasedUntil){if(fo(n.generation,t.generation)<0)return{rivalId:e.rivalId,reason:"earlier-intent"}}else if(n.leasedUntil>t.now-bo){if(t.releasedGeneration&&fo(n.generation,t.releasedGeneration)<=0)continue;return{rivalId:e.rivalId,reason:"live-beacon"}}}},s=t.guardWindowMs??0,a=t.guardPollMs??2500,o=Date.now()+s;let c,d=0;do{if(d>0&&await Ve(a),d++,c=await i(),c)break}while(Date.now()<o);const u=c?"lose":"win";return console.debug(`[partition-intent] round p=${t.partition} self=${t.deviceId} rivals=${e.length} polls=${d} → ${u}`+(c?` (beaten by ${c.rivalId} via ${c.reason})`:"")),u}({bee:this.opts.bee,stamper:i,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e,deviceId:this.opts.deviceId,generation:l,knownDeviceIds:h,now:this.now(),timeoutMs:this.opts.intentReadTimeoutMs,guardWindowMs:this.opts.intentGuardWindowMs??12e3,guardPollMs:this.opts.intentGuardPollMs??2500,releasedGeneration:this.releasedPartitions.get(e)}))return console.debug(`[PartitionLease] Lost intent round for partition ${e}; falling back to read-only.`),{partition:void 0,partitionCount:n,localCounter:new Uint32Array(As),isReadOnly:!0}}const f=await go({bee:this.opts.bee,stamper:i,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e,deviceId:this.opts.deviceId,ttlMs:vs,guardMs:t.soloClean?0:this.opts.guardMs??2e3,wait:this.opts.wait,generation:l,now:()=>this.now(),skipInitialRead:!0});if("acquired"!==f.outcome||!f.payload)return console.debug(`[PartitionLease] Lock acquire for partition ${e} outcome=${f.outcome}; falling back to read-only.`),{partition:void 0,partitionCount:n,localCounter:new Uint32Array(As),isReadOnly:!0};!d.unchanged&&d.referenceHex&&i instanceof Js&&(await i.setSyncedReference(e,d.referenceHex),d.stateBuckets&&await i.setProtectedStateBuckets(e,d.stateBuckets)),this.publishedReferences=d.references,this.publishedCounter=u.slice(),this.lastFullPublishEpoch=vo(this.now()),this.lastReferenceHex=d.referenceHex;const y=f.payload;return this.self={partition:e,generation:y.generation,acquiredAt:y.acquiredAt,leasedUntil:y.leasedUntil},this.holders.set(e,{deviceId:this.opts.deviceId,generation:y.generation,acquiredAt:y.acquiredAt,leasedUntil:y.leasedUntil}),this.pendingBeaconPublish=this.publishPresenceBeacon(e,y.generation,y.leasedUntil),{partition:e,partitionCount:n,localCounter:u,isReadOnly:!1,lockPayload:y}}get beaconPublishSettled(){return this.pendingBeaconPublish}async refresh(){if(!this.self)return"lost";if(await this.pendingBeaconPublish,!this.self)return"lost";const t=this.self.partition,{stamper:e}=this.requireWriteContext(),n=await go({bee:this.opts.bee,stamper:e,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:t,deviceId:this.opts.deviceId,ttlMs:vs,guardMs:this.opts.guardMs??2e3,wait:this.opts.wait,generation:this.self.generation,now:()=>this.now(),shouldAbort:()=>this.closed});if(!this.self)return"lost";if("acquired"!==n.outcome||!n.payload)return console.debug(`[PartitionLease] Refresh on partition ${t} returned ${n.outcome}.`),"lost";const r=n.payload;return this.self={partition:t,generation:r.generation,acquiredAt:r.acquiredAt,leasedUntil:r.leasedUntil},await this.publishPresenceBeacon(t,r.generation,r.leasedUntil),await this.foreignBeaconBeatsUs(t,r.generation)||await this.occupancyBeaconBeatsUs(t,r.generation)?(console.debug(`[PartitionLease] Refresh on partition ${t}: an earlier-generation peer holds it; yielding.`),"displaced"):"held"}async foreignBeaconBeatsUs(t,e){const n=this.now(),r=(this.opts.knownDeviceIds?.()??[]).filter(t=>t!==this.opts.deviceId);if(0===r.length)return!1;const i=vo(n);return(await Promise.all(r.flatMap(e=>[i,i-1].map(n=>Eo({bee:this.opts.bee,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:t,deviceId:e,epochBucket:n,timeoutMs:this.opts.intentReadTimeoutMs}))))).some(r=>void 0!==r?.leasedUntil&&r.leasedUntil>n-bo&&fo(r.generation,e)<0&&this.beaconOutranksRelease(t,r.generation))}beaconOutranksRelease(t,e){const n=this.releasedPartitions.get(t);return void 0===n||fo(e,n)>0}async occupancyBeaconBeatsUs(t,e){const n=this.now(),r=vo(n);return(await Promise.all([r,r-1].map(e=>$o({bee:this.opts.bee,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:t,epochBucket:e,timeoutMs:this.opts.intentReadTimeoutMs})))).some(r=>void 0!==r&&r.deviceId!==this.opts.deviceId&&void 0!==r.leasedUntil&&r.leasedUntil>n-bo&&fo(r.generation,e)<0&&this.beaconOutranksRelease(t,r.generation))}async publishPresenceBeacon(t,e,n){const{stamper:r}=this.requireWriteContext(),i=vo(this.now());try{await Ao({bee:this.opts.bee,stamper:r,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:t,deviceId:this.opts.deviceId,epochBucket:i,generation:e,leasedUntil:n}),await async function(t){const e=xo(t.batchId,t.partition,t.epochBucket),n=t.backupSigner.publicKey().address(),r=Io(t.batchId,t.partition,t.epochBucket,n),i={deviceId:t.deviceId,generation:t.generation,leasedUntil:t.leasedUntil};await Co({bee:t.bee,stamper:t.stamper,backupSigner:t.backupSigner,swarmEncryptionKey:t.swarmEncryptionKey,partition:t.partition,identifier:e,address:r,payload:i})}({bee:this.opts.bee,stamper:r,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:t,deviceId:this.opts.deviceId,epochBucket:i,generation:e,leasedUntil:n})}catch(e){console.debug(`[PartitionLease] presence beacon publish failed for p=${t} (self-heals next tick):`,e)}}async release(t){if(!this.self)return;const{partition:e,generation:n,acquiredAt:r}=this.self;this.closed=!0,await this.pendingBeaconPublish;const{stamper:i}=this.requireWriteContext();await this.flushState(e,t),await async function(t){const e=t.now??Date.now,n=await yo(t);if(n){const e=e=>(console.info(`[partition-lock] Skipping release sentinel for partition ${t.partition}: ${e}.`,n),{outcome:"skipped",observed:n});if(n.holderDeviceId===lo)return e("already released");if(n.holderDeviceId!==t.deviceId)return e("a peer holds the partition");if(fo(n.generation,t.releasedGeneration)>0)return e("a newer own claim exists (successor re-acquired)")}const r={holderDeviceId:lo,generation:t.releasedGeneration,acquiredAt:t.acquiredAt,leasedUntil:e()};return await wo({...t,payload:r}),{outcome:"released",observed:n}}({bee:this.opts.bee,stamper:i,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e,deviceId:this.opts.deviceId,releasedGeneration:n,acquiredAt:r,now:()=>this.now()}),this.self=void 0,this.holders.delete(e)}async publishState(t){this.self&&await this.flushState(this.self.partition,t)}async flushState(t,e,n){const{stamper:r,batchId:i,batchDepth:a}=this.requireWriteContext(),o=vo(this.now()),c=!0===n?.forceFull||o!==this.lastFullPublishEpoch,d=await async function(t){const{bee:e,stamper:n,batchId:r,batchDepth:i,partition:a,localCounter:o,backupSigner:c,swarmEncryptionKey:d,previousReferences:u,previousCounter:l,deviceId:h,nowMs:p=Date.now()}=t;Bo.parse({counters:o});const{numUtilizationChunks:f}=$s(i),y={mode:"stamper",bee:e,stamper:n},w=c.publicKey().address(),g=n instanceof Js?n:void 0,m=o.slice(),b=void 0!==u&&u.length===f&&void 0!==l;if(void 0!==l)for(let t=0;t<As;t++)if(o[t]<l[t])throw new Error(`[partition-state] publish p=${a}: counter regressed at bucket ${t} (${o[t]} < previous ${l[t]}) — monotonicity violation; refusing to publish a state a takeover could resume past an acked slot.`);const v=Array.from({length:f},(t,e)=>e),S=b?v.filter(t=>!function(t,e){if(t.length!==e.length)return!1;for(let n=0;n<t.length;n++)if(t[n]!==e[n])return!1;return!0}(Ts(o,t,i),Ts(l,t,i))):v.filter(t=>!jo(Ts(o,t,i))),k=new Set(S),x=b?u.map(t=>t.slice()):v.map(()=>Do.slice()),I=new Set([ms(r,a,w),...g?.getCleanChunkBuckets()??[]]);if(b)for(let t=0;t<f;t++)k.has(t)||jo(x[t])||I.add(Ds(x[t].slice(0,32)));const A=p;for(const t of[A,A-Oo])I.add(Ds(No(r,a,w,t)));const C=vo(A);for(const t of[C,C-1])I.add(Ds(Io(r,a,t,w))),void 0!==h&&I.add(Ds(ko(r,a,h,t,w)));const U=S.map(t=>{const e=zo(Ts(o,t,i),I);return x[t]=e.reference,g?.markReservedUtilizationChunk(e.address,a),{data:e.data}}),P=zo(s.Binary.concatBytes(...x),I);g?.markReservedUtilizationChunk(P.address,a);const E=s.Binary.uint8ArrayToHex(P.reference),$=[...S.map(t=>Ds(x[t].slice(0,32))),Ds(P.address)];if(new Set($).size!==$.length)throw new Error(`[partition-state] publish p=${a}: reserved-slot chunks collided on a bucket — parallel PUTs would race/evict. This is a bucket-selection regression (pickReservedChunkKey / claimedBuckets).`);const D=Date.now();await Promise.all([...U.map(t=>ys(y,t.data,{deferred:!1})),ys(y,P.data,{deferred:!1})]),await Lo({bee:e,stamper:n,backupSigner:c,swarmEncryptionKey:d,batchId:r,partition:a,referenceHex:E,nowMs:A}),console.debug(`[partition-state] publish p=${a} incremental=${b} counterChunks=${U.length}/${f} writes=${U.length+2} durationMs=${Date.now()-D}`),g?.clearReservedUtilizationChunks();const B=x.filter(t=>!jo(t)).map(t=>Ds(t.slice(0,32)));return B.push(Ds(P.address)),{referenceHex:E,stateBuckets:B,references:x,publishedCounter:m}}({bee:this.opts.bee,stamper:r,batchId:i,batchDepth:a,partition:t,localCounter:e,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,previousReferences:c?void 0:this.publishedReferences,previousCounter:c?void 0:this.publishedCounter,deviceId:this.opts.deviceId,nowMs:this.now()});c&&(this.lastFullPublishEpoch=o),this.publishedReferences=d.references,this.publishedCounter=d.publishedCounter,this.lastReferenceHex=d.referenceHex,r instanceof Js&&(await r.setSyncedReference(t,d.referenceHex),await r.setProtectedStateBuckets(t,d.stateBuckets))}seedReferenceHex(t){this.lastReferenceHex=t}async heartbeatStatePointer(t){if(!this.self||void 0===this.lastReferenceHex)return;const{stamper:e,batchId:n}=this.requireWriteContext();void 0!==t&&this.retainedChunksCollideThisEpoch(this.self.partition)?await this.flushState(this.self.partition,t,{forceFull:!0}):await Lo({bee:this.opts.bee,stamper:e,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:n,partition:this.self.partition,referenceHex:this.lastReferenceHex,nowMs:this.now()})}retainedChunksCollideThisEpoch(t){if(void 0===this.publishedReferences)return!1;const e=this.opts.backupSigner.publicKey().address(),{batchId:n}=this.requireWriteContext(),r=this.now(),i=vo(r),s=new Set([ms(n,t,e),Ds(No(n,t,e,r)),Ds(Io(n,t,i,e)),Ds(ko(n,t,this.opts.deviceId,i,e))]);for(const t of this.publishedReferences)if(!Go(t)&&s.has(Ds(t.slice(0,32))))return!0;if(void 0!==this.lastReferenceHex){const t=new m(this.lastReferenceHex).toUint8Array().slice(0,32);if(s.has(Ds(t)))return!0}return!1}get currentPartition(){return this.self?.partition}get leasedUntil(){return this.self?.leasedUntil}bumpLocalLease(t){this.self&&(this.self={...this.self,leasedUntil:this.now()+t})}adoptIfLive(){if(this.self&&!(this.self.leasedUntil<=this.now()))return this.self={...this.self,leasedUntil:this.now()+vs},this.holders.set(this.self.partition,{deviceId:this.opts.deviceId,generation:this.self.generation,acquiredAt:this.self.acquiredAt,leasedUntil:this.self.leasedUntil}),this.self.partition}serialize(){return{deviceId:this.opts.deviceId,batchId:this.opts.batchId.toHex(),self:this.self}}hydrate(t){t.deviceId===this.opts.deviceId&&t.batchId===this.opts.batchId.toHex()&&(this.self=t.self)}requireWriteContext(){if(!this.opts.stamper||void 0===this.opts.batchDepth)throw new Error("PartitionLease: write operation requires stamper + batchDepth (read-only instance)");return{stamper:this.opts.stamper,batchId:this.opts.batchId,batchDepth:this.opts.batchDepth}}now(){return this.opts.now?this.opts.now():Date.now()}}class Jo extends Error{constructor(t="All partitions are held by other devices.",e){super(t),this.accountId=e,this.name="PartitionContendedError"}}function Zo(t,e,n){return void 0!==t&&t.holderDeviceId!==n&&t.holderDeviceId!==lo&&t.leasedUntil>e}class Yo{constructor(t){this.readOnly=!1,this.pendingAcquire=!1,this.lastLeaseValidatedAt=0,this.lastLeaseActivityAt=0,this.activeUploadCount=0,this.pointerHeartbeatFailingSince=void 0,this.disposed=!1,this.leaseEpoch=0,this.deps=t}get currentPartition(){return this.partitionLease?.currentPartition}get isReadOnly(){return this.readOnly}get partitionCount(){return this.deps.partitionCount}get stamperRef(){return this.deps.stamper}get accountId(){return this.deps.accountId}get batchId(){return this.deps.batchId}async withWrite(t,e){const n=e?.wait??("persistent"===this.deps.mode?"block":"skip");return this.lockAndFlush(async()=>{await this.ensureLease(n),this.ensureHeldForUpload();const r=await this.buildStamperTarget(e);this.lastLeaseActivityAt=Date.now(),this.activeUploadCount++;try{const e=await t(r);await this.ensureLeaseStillValid();const n=this.deps.stamper.getLocalCounter();if(void 0!==n)await(this.partitionLease?.publishState(n)),this.pointerHeartbeatFailingSince=void 0;else if(void 0!==this.currentPartition)throw new Error(`[BatchWriteCoordinator] Held partition ${this.currentPartition} but the stamper exposed no local counter — cannot publish the slot reservation (ack-after-publish); failing the upload.`);return e}finally{this.activeUploadCount--,this.lastLeaseActivityAt=Date.now()}})}startLease(){this.disposed||"persistent"===this.deps.mode&&(this.deps.partitionCount<=1||(this.pendingAcquire=!0,this.lockAndFlush(()=>this.ensureLease("block")).catch(t=>console.warn("[BatchWriteCoordinator] Background lease warm-up failed:",t))))}teardown(){this.disposed=!0,this.leaseEpoch++,void 0!==this.partitionRefreshTimer&&(clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=void 0),this.slotWait?.wake?.();const t=this.partitionLease,e=t?.currentPartition,n=this.deps.stamper;if(t){const e=n.getLocalCounter();void 0!==e&&this.lock(()=>t.release(e)).catch(t=>console.warn("[BatchWriteCoordinator] Partition lease release failed:",t)),n.invalidateLease(),n.unbindPartition()}this.partitionLease=void 0,this.readOnly=!1,this.lastLeaseValidatedAt=0,this.deps.writeLeaseCache?.(void 0),this.emitLeaseChange(),void 0!==e&&this.deps.onLeaseReleased?.(e)}async ensureLease(t){try{if(this.deps.partitionCount<=1)return;if(this.disposed)throw new Error("BatchWriteCoordinator has been torn down.");if(this.pendingAcquire||this.partitionLease&&!this.readOnly||(this.pendingAcquire=!0),this.pendingAcquire){if(this.pendingAcquire=!1,"skip"===t){if(await this.acquire(),this.readOnly||void 0===this.currentPartition)throw new Jo(void 0,this.deps.accountId);return}try{await Je(this.acquireWithSlotWait(),45e3,"Partition lease timed out after 45000ms")}catch(t){throw console.warn("[BatchWriteCoordinator] Partition lease acquisition failed, pausing background work:",t),this.pauseLeaseBackgroundWork(),t}return}await this.ensureLeaseStillValid()}finally{this.emitLeaseChange()}}async acquire(){const{stamper:t,partitionCount:e,swarmEncryptionKey:n}=this.deps;if(e<=1)return void(this.readOnly=!1);if(this.disposed)return;const r=this.leaseEpoch;if(this.deps.refreshKnownDeviceIds?.().catch(t=>console.warn("[BatchWriteCoordinator] Background device-registry refresh failed (using current registry):",t)),this.leaseEpoch===r&&!this.disposed)try{const i=this.deps,s=await Vo.fromSwarmEncryptionKey({get bee(){return i.bee},deviceId:this.deps.deviceId,batchId:new p(this.deps.batchId),batchDepth:t.depth,swarmEncryptionKey:n,stamper:t,knownDeviceIds:this.deps.knownDeviceIds,intentReadTimeoutMs:this.deps.intentReadTimeoutMs,intentGuardWindowMs:this.deps.intentGuardWindowMs,intentGuardPollMs:this.deps.intentGuardPollMs});if(this.leaseEpoch!==r)return;const a=this.deps.readLeaseCache?.();a&&s.hydrate(a);const o=s.adoptIfLive();if(void 0!==o){const n=await t.getSyncedReference(o).catch(()=>{});if(this.leaseEpoch!==r||this.disposed)return;return console.debug(`[BatchWriteCoordinator] Adopted cached lease p=${o} (no acquire/intent round) for device=${this.deps.deviceId}`),this.partitionLease=s,this.readOnly=!1,t.bindPartition({partition:o,partitionCount:e,localCounter:t.buildLeaseLocalCounter()}),this.syncStamperLeaseDeadline(),s.seedReferenceHex(n),this.deps.writeLeaseCache?.(s.serialize()),this.startRefreshTimer(s),this.lastLeaseValidatedAt=Date.now(),this.lastLeaseActivityAt=Date.now(),this.pointerHeartbeatFailingSince=void 0,void this.deps.onLeaseAcquired?.(o)}const c=await s.acquire({partitionCount:e});if(this.leaseEpoch!==r)return;if(this.partitionLease=s,this.readOnly=c.isReadOnly,void 0===c.partition)return c.isReadOnly&&console.warn("[BatchWriteCoordinator] All partitions held; entering read-only mode until a peer releases."),void this.deps.writeLeaseCache?.(s.serialize());t.bindPartition({partition:c.partition,partitionCount:c.partitionCount,localCounter:c.localCounter}),this.syncStamperLeaseDeadline(),this.deps.writeLeaseCache?.(s.serialize()),this.startRefreshTimer(s),this.lastLeaseValidatedAt=Date.now(),this.lastLeaseActivityAt=Date.now(),this.pointerHeartbeatFailingSince=void 0,this.deps.onLeaseAcquired?.(c.partition)}catch(e){if(console.error("[BatchWriteCoordinator] Failed to acquire partition lease:",e),this.leaseEpoch!==r)throw e;throw void 0!==this.partitionRefreshTimer&&(clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=void 0),t.invalidateLease(),t.unbindPartition(),this.partitionLease=void 0,this.readOnly=!1,this.deps.writeLeaseCache?.(void 0),e}}async acquireWithSlotWait(){const t=Date.now()+3e4,e=this.leaseEpoch,n={maybeFree:!1,rescansLeft:0,rescanWindowUsed:!1};this.slotWait=n;try{await this.pollForSlot(t,e,n)}finally{this.slotWait===n&&(this.slotWait=void 0)}}async pollForSlot(t,e,n){for(;;){if(await this.acquire(),this.disposed)return;if(!this.readOnly)return;const r=n.maybeFree;n.maybeFree=!1;const i=r?0:n.rescansLeft>0?1500:Ps;if(Date.now()+i>t)throw new Jo("No partition available — all slots are held by other devices.",this.deps.accountId);if(r||(n.rescansLeft>0?(n.rescansLeft--,await this.sleepUntilWoken(n,1500)):(this.deps.onSlotWait?.(),await this.sleepUntilWoken(n,Ps))),this.leaseEpoch!==e)return}}sleepUntilWoken(t,e){return new Promise(n=>{const r=()=>{clearTimeout(i),t.wake=void 0,t.maybeFree=!1,n()},i=setTimeout(r,e);t.wake=r})}syncStamperLeaseDeadline(){this.deps.stamper.setLeaseValidUntil(this.partitionLease?.leasedUntil)}leaseNearExpiry(){const t=this.partitionLease?.leasedUntil;return void 0!==t&&Date.now()>=t-2e3}async ensureLeaseStillValid(){if(!this.partitionLease||this.readOnly)return;const t=this.partitionLease.currentPartition;if(void 0===t)return;if(!this.leaseNearExpiry()&&Date.now()-this.lastLeaseValidatedAt<Ps)return;let e;try{e=await yo({bee:this.deps.bee,backupSigner:this.deps.backupSigner,swarmEncryptionKey:this.deps.swarmEncryptionKey,batchId:new p(this.deps.batchId),partition:t})}catch(t){return void console.warn("[BatchWriteCoordinator] Lease freshness check read failed:",t)}if(Zo(e,Date.now(),this.deps.deviceId))throw console.warn(`[BatchWriteCoordinator] Lease freshness check: partition ${t} taken by ${e.holderDeviceId}; demoting.`),this.signalLeaseLost(),this.finalizeDemote(),new Error("Partition lease was reclaimed by another device.");if(void 0!==e&&e.holderDeviceId===lo){let e;try{e=await this.partitionLease.refresh()}catch(t){return void console.warn("[BatchWriteCoordinator] Sentinel re-assert hit a transient error; keeping lease:",t)}if("held"!==e)throw console.warn(`[BatchWriteCoordinator] Sentinel re-assert: partition ${t} taken by a peer; demoting.`),this.signalLeaseLost(),this.finalizeDemote(),new Error("Partition lease was reclaimed by another device.");return this.syncStamperLeaseDeadline(),this.lastLeaseValidatedAt=Date.now(),void this.deps.writeLeaseCache?.(this.partitionLease.serialize())}this.partitionLease.bumpLocalLease(vs),this.syncStamperLeaseDeadline(),this.lastLeaseValidatedAt=Date.now(),this.deps.writeLeaseCache?.(this.partitionLease.serialize())}signalLeaseLost(){this.deps.stamper.invalidateLease()}finalizeDemote(){this.leaseEpoch++,this.deps.stamper.unbindPartition(),void 0!==this.partitionRefreshTimer&&(clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=void 0),this.partitionLease=void 0,this.readOnly=!0,this.lastLeaseValidatedAt=0,this.pointerHeartbeatFailingSince=void 0,this.deps.writeLeaseCache?.(void 0),this.pendingAcquire=!0,this.emitLeaseChange()}startRefreshTimer(t){this.disposed||"persistent"===this.deps.mode&&(void 0!==this.partitionRefreshTimer&&clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=setInterval(()=>{this.refreshTick(t)},Ps))}async refreshTick(t){if(this.disposed||this.partitionLease!==t)return;const e=t.currentPartition;if(void 0===e)return;if((this.deps.knownDeviceIds?.()??[]).some(t=>t!==this.deps.deviceId)&&0===this.activeUploadCount&&Date.now()-this.lastLeaseActivityAt>=3e4)return void await this.lock(async()=>{this.disposed||this.partitionLease===t&&(0!==this.activeUploadCount||Date.now()-this.lastLeaseActivityAt<3e4||await this.yieldIdleLease(t))});let n=!1,r=!1;try{const i=await t.refresh();if("held"===i&&(r=!0),"displaced"===i)n=!0;else if("lost"===i){const t=await yo({bee:this.deps.bee,backupSigner:this.deps.backupSigner,swarmEncryptionKey:this.deps.swarmEncryptionKey,batchId:new p(this.deps.batchId),partition:e});n=Zo(t,Date.now(),this.deps.deviceId),!n&&void 0!==t&&t.holderDeviceId===this.deps.deviceId&&t.leasedUntil>Date.now()&&(r=!0)}}catch(t){console.warn("[BatchWriteCoordinator] Lease refresh hit a transient error; keeping lease:",t)}if(n){if(this.disposed||this.partitionLease!==t)return;return console.warn(`[BatchWriteCoordinator] Refresh: partition ${e} taken by a peer; demoting.`),this.signalLeaseLost(),void await this.lock(async()=>{this.disposed||this.partitionLease!==t||this.finalizeDemote()})}if(!this.disposed&&this.partitionLease===t)if(r){if(t.bumpLocalLease(vs),this.syncStamperLeaseDeadline(),this.lastLeaseValidatedAt=Date.now(),this.deps.writeLeaseCache?.(t.serialize()),0===this.activeUploadCount)try{await this.lock(async()=>{this.disposed||this.partitionLease!==t||0===this.activeUploadCount&&await t.heartbeatStatePointer(this.deps.stamper.getLocalCounter())}),this.pointerHeartbeatFailingSince=void 0}catch(n){console.warn("[BatchWriteCoordinator] State-pointer heartbeat failed:",n),this.pointerHeartbeatFailingSince??(this.pointerHeartbeatFailingSince=Date.now()),Date.now()-this.pointerHeartbeatFailingSince>Oo&&(console.warn(`[BatchWriteCoordinator] Refresh: partition ${e} state-pointer heartbeat failing persistently; demoting before the resume pointer ages out of the takeover lookup.`),this.signalLeaseLost(),await this.lock(async()=>{this.disposed||this.partitionLease!==t||this.finalizeDemote()}))}}else this.leaseNearExpiry()&&(console.warn(`[BatchWriteCoordinator] Refresh: partition ${e} lease lapsed without a successful renewal; demoting.`),this.signalLeaseLost(),await this.lock(async()=>{this.disposed||this.partitionLease!==t||this.finalizeDemote()}))}async yieldIdleLease(t,e){this.leaseEpoch++;const n=t.currentPartition;void 0!==this.partitionRefreshTimer&&(clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=void 0);const r=this.deps.stamper.getLocalCounter();if(void 0!==r)try{await t.release(r)}catch(t){console.warn("[BatchWriteCoordinator] Idle partition-lease release failed:",t)}this.deps.stamper.unbindPartition(),this.partitionLease=void 0,this.readOnly=!1,this.lastLeaseValidatedAt=0,this.deps.writeLeaseCache?.(void 0),this.emitLeaseChange(),console.info(`[BatchWriteCoordinator] Released idle partition ${n??"?"}; will re-acquire on next write.`),void 0===n||this.disposed||this.deps.onLeaseReleased?.(n,e)}notifySlotMaybeFree(){const t=this.slotWait;t&&(t.rescanWindowUsed||(t.rescanWindowUsed=!0,t.maybeFree=!0,t.rescansLeft=3),t.wake?.())}get canYieldForPeer(){return!this.disposed&&(void 0!==this.partitionLease?.currentPartition&&(0===this.activeUploadCount&&Date.now()-this.lastLeaseActivityAt>=3e3))}async yieldForPeer(t){if(!this.canYieldForPeer)return;const e=this.partitionLease,n=e?.currentPartition;if(!e||void 0===n)return;let r;return await this.lock(async()=>{this.disposed||this.partitionLease!==e||0===this.activeUploadCount&&(Date.now()-this.lastLeaseActivityAt<3e3||(await this.yieldIdleLease(e,t),r=n))}),r}pauseLeaseBackgroundWork(){this.leaseEpoch++,void 0!==this.partitionRefreshTimer&&(clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=void 0),this.partitionLease=void 0,this.readOnly=!1,this.deps.writeLeaseCache?.(void 0)}async buildStamperTarget(t){const e=t?.useWorkers?await(this.deps.getWorkerPool?.(t.workerCount)):void 0;return{mode:"stamper",bee:this.deps.bee,stamper:this.deps.stamper,workerPool:e}}async lockAndFlush(t){return uo(this.deps.batchId,async()=>{try{return await t()}finally{await(this.deps.flushStamperState?.())}})}lock(t){return uo(this.deps.batchId,t)}ensureHeldForUpload(){if(!(this.deps.partitionCount<=1)&&void 0===this.currentPartition)throw new Error("Uploads are unavailable: the postage batch is fully leased by other devices. Sign out of another device or wait for its lease to expire.")}emitLeaseChange(){this.deps.onLeaseChange?.({currentPartition:this.currentPartition,isReadOnly:this.readOnly})}}const _o=32;class Qo{constructor(t,e){if(this.start=t,this.level=e,e<0||e>_o)throw new Error(`Epoch level must be between 0 and 32, got ${e}`)}async marshalBinary(){const t=new Uint8Array(9);return new DataView(t.buffer).setBigUint64(0,this.start,!1),t[8]=this.level,s.Binary.keccak256(t)}next(t,e){return this.start+this.length()>e?this.childAt(e):function(t,e){if(0n===e)return new Qo(0n,_o);const n=t-e;let r=1n,i=0;for(;i<_o&&(r<n||t/r!==e/r);)r<<=1n,i++;return new Qo(e/r*r,i)}(e,t).childAt(e)}length(){return 1n<<BigInt(this.level)}parent(){const t=this.length()<<1n,e=this.start/t*t;return new Qo(e,this.level+1)}left(){return new Qo(this.start-this.length(),this.level)}childAt(t){const e=this.level-1,n=1n<<BigInt(e);let r=this.start;return(t&n)>0n&&(r|=n),new Qo(r,e)}isLeft(){return 0n===(this.start&this.length())}toString(){return`${this.start}/${this.level}`}}class Xo{constructor(t,e,n,r){this.bee=t,this.topic=e,this.owner=n,this.encryptionKey=r}async findAt(t,e=0n){const n=this.getEpochChunk(t,new Qo(t,0)).catch(()=>{}),[r,i]=await Promise.all([n,this.findAtEpoch(t,new Qo(0n,_o),void 0)]);if(r)return r;if(i)return i;try{if(void 0===await this.getEpochChunk(t,new Qo(0n,_o)))return this.findPreviousLeaf(t,e)}catch{}}async findAtEpoch(t,e,n){let r;try{r=await this.getEpochChunk(t,e)}catch{return e.isLeft()?n:this.findAtEpoch(e.start-1n,e.left(),n)}if(r)return 0===e.level?r:this.findAtEpoch(t,e.childAt(t),r);if(e.level>0){const r=await this.findAtEpoch(t,e.childAt(t),n);if(r)return r}return e.isLeft()?n:this.findAtEpoch(e.start-1n,e.left(),n)}async getEpochChunk(t,e){const n=await this.getEpochChunkWithMetadata(t,e);return n?.reference}async findAtWithMetadata(t){const e=new Qo(t,0);try{const n=await this.getEpochChunkWithMetadata(t,e);if(n)return{reference:n.reference,epoch:e,timestamp:n.timestamp}}catch{}return this.findAtEpochWithMetadata(t,new Qo(0n,_o),void 0)}async findAtEpochWithMetadata(t,e,n){let r;try{r=await this.getEpochChunkWithMetadata(t,e)}catch{return e.isLeft()?n:this.findAtEpochWithMetadata(e.start-1n,e.left(),n)}if(r){const n={reference:r.reference,epoch:e,timestamp:r.timestamp};return 0===e.level?n:this.findAtEpochWithMetadata(t,e.childAt(t),n)}if(e.level>0){const r=await this.findAtEpochWithMetadata(t,e.childAt(t),n);if(r)return r}return e.isLeft()?n:this.findAtEpochWithMetadata(e.start-1n,e.left(),n)}async getEpochChunkWithMetadata(t,e){const n={timeout:2e3},r=await e.marshalBinary(),i=s.Binary.keccak256(s.Binary.concatBytes(this.topic.toUint8Array(),r));let a;if(this.encryptionKey){a=(await ze(this.bee,this.owner,i,this.encryptionKey,n)).payload}else{const t=new m(s.Binary.keccak256(s.Binary.concatBytes(i,this.owner.toUint8Array()))),e=await this.bee.chunk.download(t.toHex(),void 0,n),r=8,o=32+65,c=e.slice(o,o+r),d=new DataView(c.buffer,c.byteOffset,c.byteLength),u=Number(d.getBigUint64(0,!0)),l=o+r;a=e.slice(l,l+u)}if(![40,48,72,80].includes(a.length))return void console.warn(`Unexpected feed payload length: ${a.length}. Expected 40, 48, 72, or 80 bytes.`);const o=48===a.length||80===a.length?8:0,c=a.slice(o,o+8),d=new DataView(c.buffer,c.byteOffset,c.byteLength).getBigUint64(0,!1);return d>t?void 0:{reference:a.slice(o+8),timestamp:d}}findPreviousLeaf(t,e){return async function(t,e,n){if(0n===t)return;const r=e>0n?e:0n,i=t>128n&&t-128n>r?t-128n:r;let s=t-1n;for(;s>=i;){try{const e=await n(t,new Qo(s,0));if(e)return e}catch{}if(0n===s)break;s--}}(t,e,(t,e)=>this.getEpochChunk(t,e))}}class tc{constructor(t,e){this.topic=t,this.signer=e}async update(t,e,n,r,i){if(32!==e.length&&64!==e.length)throw new Error(`Reference must be 32 or 64 bytes, got ${e.length}`);const s=await this.calculateEpoch(t,i,r,n);return{socAddress:await this.uploadEpochChunk(s,t,e,n,r),epoch:{start:s.start,level:s.level},timestamp:t}}async calculateEpoch(t,e,n,r){if(e?.lastEpoch&&void 0!==e.lastTimestamp){return new Qo(e.lastEpoch.start,e.lastEpoch.level).next(e.lastTimestamp,t)}if(!r||!ns(r))return new Qo(0n,_o);const i=this.signer.publicKey().address(),s=new Xo(r.bee,this.topic,i,n),a=await s.findAtWithMetadata(t);return a?a.epoch.next(a.timestamp,t):new Qo(0n,_o)}getOwner(){return this.signer.publicKey().address()}async uploadEpochChunk(t,e,n,r,i){const a=await async function(t,e){const n=await e.marshalBinary();return new x(s.Binary.keccak256(s.Binary.concatBytes(t.toUint8Array(),n)))}(this.topic,t),o=new Uint8Array(8);new DataView(o.buffer).setBigUint64(0,e,!1);const c=s.Binary.concatBytes(o,n);return(await fs(r,this.signer,a,c,{encryptionKey:i,deferred:!1})).socAddress}}function ec(t){return new Xo(t.bee,t.topic,t.owner,t.encryptionKey)}class nc{constructor(t,e,n){this.bee=t,this.topic=e,this.owner=n}async findAt(t,e=0n,n){for(let t=0n;;t++){if(!await this.indexExists(t,n))return{current:t>0n?t-1n:void 0,next:t}}}async indexExists(t,e){const n=function(t,e){const n=s.Binary.numberToUint64(e,"BE");return s.Binary.keccak256(s.Binary.concatBytes(t.toUint8Array(),n))}(this.topic,t),r=function(t,e){return new m(s.Binary.keccak256(s.Binary.concatBytes(t,e.toUint8Array())))}(n,this.owner);for(let t=0;t<2;t++)try{return await this.bee.chunk.download(s.Binary.uint8ArrayToHex(r.toUint8Array()),void 0,e),!0}catch{if(0===t)continue;return!1}return!1}}class rc{constructor(t,e,n){this.syncFinder=new nc(t,e,n)}async findAt(t,e=0n,n){return this.syncFinder.findAt(t,e,n)}}class ic{constructor(t,e,n){this.bee=t,this.topic=e,this.signer=n,this.nextIndex=0n}async update(t,e,n){const r=this.makeIdentifier(this.nextIndex),i={mode:"stamper",bee:this.bee,stamper:e},s=await fs(i,this.signer,r,t,{encryptionKey:n,deferred:!1});return this.nextIndex+=1n,s.socAddress}getOwner(){return this.signer.publicKey().address()}getState(){return{nextIndex:this.nextIndex}}setState(t){this.nextIndex=t.nextIndex}reset(){this.nextIndex=0n}makeIdentifier(t){const e=s.Binary.numberToUint64(t,"BE"),n=s.Binary.keccak256(s.Binary.concatBytes(this.topic.toUint8Array(),e));return new x(n)}}function sc(t){if("object"==typeof t&&null!==t){const e=t.status;if(404===e)return!0;if("number"==typeof e)return!1}const e=t instanceof Error?t.message:String(t);return/404|not found/i.test(e)}const ac=256,oc=new Map,cc="swarm-id-roster-len";function dc(t,e){return`${t}:${e.toHex()}`}function uc(t){const e=oc.get(t);if(void 0!==e)return e;if("undefined"==typeof localStorage)return 0;let n;try{n=localStorage.getItem(`${cc}:${t}`)}catch{return 0}const r=null===n?0:Number.parseInt(n,10),i=Number.isInteger(r)&&r>0?Math.min(r,ac):0;return oc.set(t,i),i}function lc(t,e){const n=Math.min(e,ac);if(!(n<=uc(t))&&(oc.set(t,n),"undefined"!=typeof localStorage))try{localStorage.setItem(`${cc}:${t}`,`${n}`)}catch{}}const hc=bs,pc=Symbol("roster-read-inconclusive");class fc extends Error{constructor(){super("roster scan inconclusive: cannot confirm the roster is empty"),this.name="RosterScanInconclusiveError"}}function yc(t){return lt.fromString(`swarm-id-roster-v1:${t}`)}async function wc(t){const e=function(t,e){const n=s.Binary.numberToUint64(e,"BE");return new x(s.Binary.keccak256(s.Binary.concatBytes(t.toUint8Array(),n)))}(t.topic,t.index);let n,r;try{n=(await Je(t.bee.soc.makeReader(t.owner).download(e),hc,"roster read timed out")).payload.toUint8Array()}catch(r){if(sc(r))return;const i=await async function(t){const e=`${t.bee.url}/soc/${t.owner.toHex()}/${t.identifier.toHex()}`;try{const t=await Je(fetch(e),hc,"roster /soc probe timed out");return t.ok?new Uint8Array(await t.arrayBuffer()):404!==t.status?pc:404===(await t.json()).code?void 0:pc}catch{return pc}}({bee:t.bee,owner:t.owner,identifier:e});if(!(i instanceof Uint8Array))return i;n=i}try{r=await Je(Qe(t.bee,new m(n).toHex()),hc,"roster read timed out")}catch(t){return sc(t)?void 0:pc}try{return Xe.parse(JSON.parse((new TextDecoder).decode(r)))}catch{return}}async function gc(t){const e=yc(t.accountId),n=dc(t.accountId,t.owner),r=uc(n);let i=[],s=0;for(let n=0;n<ac;){const a=n<r?r-n:Math.min(r>0?2:16,ac-n),o=Array.from({length:a},(t,e)=>BigInt(n+e));let c=await Promise.all(o.map(n=>wc({bee:t.bee,topic:e,owner:t.owner,index:n})));if(!c.some(mc)&&c.some(t=>t===pc)&&(c=await Promise.all(o.map((n,r)=>c[r]===pc?wc({bee:t.bee,topic:e,owner:t.owner,index:n}):c[r]))),c.forEach((t,e)=>{mc(t)&&(i=ao(i,[t]),s=n+e+1)}),!c.some(mc)){if(0===i.length&&c.some(t=>t===pc))throw new fc;break}n+=a}return i.length>0&&lc(n,s),i}function mc(t){return void 0!==t&&t!==pc}async function bc(t){let e;try{e=await gc({bee:t.bee,accountId:t.accountId,owner:t.owner})}catch{return}const n=e.find(e=>e.deviceId===t.device.deviceId);void 0!==n&&Boolean(n.removedAt)===Boolean(t.device.removedAt)||await async function(t){const e=yc(t.accountId),{next:n}=await new nc(t.bee,e,t.owner).findAt(0n);if(!ns(t.target))return;const r=(new TextEncoder).encode(JSON.stringify(t.device)),i=await ps(t.target,r,{encryptionKey:ye(t.encryptionKey)}),s=new m(i.reference).toUint8Array(),a=new ic(t.bee,e,t.accountKey);a.setState({nextIndex:n}),await a.update(s,t.target.stamper),lc(dc(t.accountId,t.owner),Number(n)+1)}(t)}const vc=se({appSessionDuration:ue().optional()}),Sc=t=>se({value:t,at:ue()}),kc=se({version:oe(1),accountId:de().length(40),deviceId:de(),timestamp:ue(),connectedApps:ce(ie),postageStamps:ce(tn),accountName:Sc(de()),defaultPostageStampBatchID:Sc(de().length(64).optional()),settings:Sc(vc.optional()),accountPublicKey:de(),accountCreatedAt:ue(),partitionCount:ue().int().min(1).default(1)});function xc(t){const e=t.metadata,n=e.createdAt;return{connectedApps:t.connectedApps,postageStamps:t.postageStamps,accountName:{value:e.accountName,at:e.accountNameAt??n},defaultPostageStampBatchID:{value:e.defaultPostageStampBatchID,at:e.defaultStampAt??n},settings:{value:e.settings,at:e.settingsAt??n},accountPublicKey:e.publicKey,accountCreatedAt:e.createdAt,partitionCount:e.partitionCount??1}}function Ic(t,e){return lt.fromString(`swarm-id-devstate-v1:${t}:${e}`)}async function Ac(t){const e=Ic(t.accountId,t.deviceId),n=(r=t.accountId,i=t.deviceId,s=t.view,{version:1,accountId:r,deviceId:i,timestamp:Date.now(),connectedApps:s.connectedApps.map(Qs),postageStamps:s.postageStamps.map(ta),accountName:s.accountName,defaultPostageStampBatchID:s.defaultPostageStampBatchID,settings:s.settings,accountPublicKey:s.accountPublicKey,accountCreatedAt:s.accountCreatedAt,partitionCount:s.partitionCount});var r,i,s;const a=(new TextEncoder).encode(JSON.stringify(n)),o=await ps(t.target,a,{encryptionKey:ye(t.encryptionKey)}),c=o.chunkAddresses??[],d=new m(o.reference).toUint8Array(),u=new tc(e,t.accountKey),l=await u.update(BigInt(Math.floor(Date.now()/1e3)),d,t.target);return c.push(l.socAddress),{reference:o.reference,chunkAddresses:c}}async function Cc(t){const e=await Ac({accountId:t.accountId,deviceId:t.device.deviceId,accountKey:t.accountKey,encryptionKey:t.encryptionKey,view:t.view,target:t.target});return t.onChunksUploaded&&e.chunkAddresses.length>0&&await t.onChunksUploaded(e.chunkAddresses).catch(t=>{console.error("[publishDeviceState] utilisation hook failed:",t)}),await bc({bee:t.bee,accountKey:t.accountKey,owner:t.owner,encryptionKey:t.encryptionKey,accountId:t.accountId,device:t.device,target:t.target}),{status:"success",reference:e.reference,timestamp:BigInt(Math.floor(Date.now()/1e3)),chunkAddresses:e.chunkAddresses}}async function Uc(t){const e=Ic(t.accountId,t.deviceId),n=new Xo(t.bee,e,t.owner),r=await n.findAt(BigInt(Math.floor(Date.now()/1e3)));if(!r)return;return function(t){const e=JSON.parse((new TextDecoder).decode(t));return kc.parse(e)}(await Qe(t.bee,new m(r).toHex()))}function Pc(t,e){return e.at>=t.at?e:t}function Ec(t,e,n){if(0===t.length)throw new Error("foldAccount requires at least one device-state view");let r=[],i=[],s={value:"",at:0},a={at:0},o={at:0};for(const e of t)r=oo(r,e.connectedApps,n),i=co(i,e.postageStamps),s=Pc(s,e.accountName),a=Pc(a,e.defaultPostageStampBatchID),o=Pc(o,e.settings);const c=t[0],d=c?.accountCreatedAt??e.reduce((t,e)=>Math.min(t,e.createdAt),Number.MAX_SAFE_INTEGER),u=t[0].accountPublicKey,l=t.find(t=>t.partitionCount>1)?.partitionCount??c?.partitionCount??1;return{devices:e,connectedApps:r,postageStamps:i,accountName:s.value,defaultPostageStampBatchID:a.value?new p(a.value):void 0,settings:o.value,accountNameAt:s.at,defaultStampAt:a.at,settingsAt:o.at,createdAt:Number.isFinite(d)?d:Date.now(),publicKey:u,partitionCount:l}}const $c="swarm-id-device-id";function Dc(){const t=localStorage.getItem($c);if(t)return t;const e=crypto.randomUUID();return localStorage.setItem($c,e),e}function Bc(t,e,n){if(t.some(t=>t.deviceId===e))return t.map(t=>t.deviceId===e&&void 0!==n&&n!==t.name?{...t,name:n,nameUpdatedAt:Date.now()}:t);const r=Date.now();return[...t,{deviceId:e,createdAt:r,lastSignedInAt:r,name:n}]}function Tc(){if("undefined"==typeof navigator)return"Unknown Device";const t=navigator.userAgent;let e;e=/iPhone/.test(t)?"iPhone":/iPad/.test(t)?"iPad":/Android/.test(t)?/Mobile/.test(t)?"Android Phone":"Android Tablet":/Macintosh|Mac OS X/.test(t)?"Mac":/Windows/.test(t)?"Windows PC":/Linux/.test(t)?"Linux Desktop":"Unknown Device";const n=function(){const t=navigator.userAgentData,e=t?.brands?.map(t=>t.brand);if(e&&0!==e.length)return e.includes("Brave")?"Brave":e.includes("Microsoft Edge")?"Edge":e.includes("Opera")?"Opera":e.includes("Google Chrome")?"Chrome":e.includes("Chromium")?"Chromium":void 0}();if(n)return`${n} on ${e}`;let r;return r=/Edg\//.test(t)?"Edge":/OPR\/|Opera/.test(t)?"Opera":/Firefox\//.test(t)?"Firefox":/Chrome\//.test(t)?"Chrome":/Safari\//.test(t)?"Safari":"Unknown Browser",`${r} on ${e}`}const Oc=Object.entries({deviceId:"all",createdAt:"all",name:"all",nameUpdatedAt:"all",removedAt:"all",lastSignedInAt:"all"}),Mc=18e5;function Rc(t,e,n){const r=e-n;return t.filter(t=>!t.removedAt&&(t.lastSignedInAt??0)>=r).map(t=>t.deviceId)}function Fc(t){const{bee:e,accountsStore:n,postageStampsStore:i,utilizationStore:a,utilizationUploader:o,liveDeviceIds:c}=t;async function d(t,c){const d=n.getAccount(new r(t));if(!d)return void console.warn("[SyncCoordinator] Account not found for utilization update");const u=d.defaultPostageStampBatchID;if(!u)return void console.warn("[SyncCoordinator] No default stamp, skipping utilization");const l=new p(u),h=i.getStamp(l);if(!h)return void console.warn("[SyncCoordinator] Stamp not found, skipping utilization");const f=c.map(t=>({address:{toUint8Array:()=>t,toHex:()=>Array.from(t).map(t=>t.toString(16).padStart(2,"0")).join("")},data:new Uint8Array(0)}));const y=await en(d.derivationKey),w=await Ie(y,Ce),g=new I(w).publicKey().address(),{state:m,tracker:b}=await Vs(l,f,h.depth,{cache:a}),v=function(t,e,n=2){const r=zs(e,n);let i=0;for(const e of t.dataCounters)e>i&&(i=e);return r<=0?1:Math.min(1,i/r)}(m,h.depth);if(i.updateStampUtilization(l,v),b.hasDirtyChunks()){const t=await i.getStamper(l,{owner:g,encryptionKey:ye(y)});if(!t)return void console.warn("[SyncCoordinator] Cannot create stamper, skipping upload");const n=o.scheduleUpload(l.toHex(),b,async()=>{await async function(t,e){const{bee:n,stamper:r,encryptionKey:i,cache:a,tracker:o,reservedBuckets:c}=e,d=o.getDirtyChunks();if(0===d.length)return;const u=qs(t);if(c)for(const t of c)u.add(t);const l=r instanceof Js;for(const e of d){const c=t.chunks[e],d=Ts(t.dataCounters,e,t.batchDepth),h=await Fs({swarmEncryptionKey:i,batchId:t.batchId,chunkIndex:e,plaintext:d,priorNonce:c.nonce,claimedBuckets:u});l&&r.markReservedUtilizationChunk(h.address);try{const i=await Ls(n,r,d,h.key),u=s.Binary.uint8ArrayToHex(i);if(c.contentHash===u&&c.nonce===h.nonce){o.markClean(e);continue}c.contentHash=u,c.lastUpload=Date.now(),c.dirty=!1,c.nonce=h.nonce,await a.putChunk({batchId:t.batchId.toHex(),chunkIndex:e,data:d,contentHash:u,nonce:h.nonce,lastAccess:Date.now()}),o.markClean(e)}catch(t){throw console.error(`[BatchUtil] Failed to upload chunk ${e}:`,t),l&&r.clearReservedUtilizationChunks(),t}}l&&r.clearReservedUtilizationChunks(),t.lastSync=Date.now()}(m,{bee:e,stamper:t,encryptionKey:ye(y),cache:a,tracker:b,reservedBuckets:t instanceof Js?t.getProtectedBuckets():void 0}),t.flush&&await t.flush()});return Je(n,3e4,"Utilization upload timeout (30000ms)")}}return async function(t){const s=performance.now(),a=()=>(new Date).toISOString(),o=await async function(t){const e=n.getAccount(new r(t));if(!e)return void console.warn("[SyncCoordinator] Account not found",t);const s=e.defaultPostageStampBatchID;if(!s)return void console.warn("[SyncCoordinator] No default stamp for account",t);const a=i.getStamp(s);if(!a)return void console.warn("[SyncCoordinator] Default stamp not found");const o=await en(e.derivationKey);return{snapshot:ua(e,t,Date.now()),encryptionKey:o,defaultStamp:a}}(t);if(!o)return;const{snapshot:u,encryptionKey:l,defaultStamp:h}=o,p=u.metadata.partitionCount??1,f=await Ie(l,Ce),y=new I(f),w=y.publicKey().address(),g=await i.getStamper(h.batchID,{owner:w,encryptionKey:ye(l)});if(!g){const t=`Cannot create stamper for batch ${h.batchID.toHex()}`;return console.error(`[SyncCoordinator ${a()}] ${t}`),{status:"error",error:t}}if(!(g instanceof Js)){const t=`Stamper for batch ${h.batchID.toHex()} does not support coordinated writes (expected a UtilizationAwareStamper)`;return console.error(`[SyncCoordinator ${a()}] ${t}`),{status:"error",error:t}}const m=new Yo({bee:e,batchId:h.batchID.toHex(),stamper:g,deviceId:Dc(),accountId:t,knownDeviceIds:()=>[...new Set([...Rc(n.getAccount(new r(t))?.devices??[],Date.now(),Mc),...c?.()??[]])],backupSigner:y,swarmEncryptionKey:ye(l),partitionCount:p,mode:"oneshot"});console.log(`[SyncCoordinator ${a()}] Starting sync for ${t} bee.url=${e.url}`);const b=Dc(),v=u.metadata.devices.find(t=>t.deviceId===b)??{deviceId:b,name:Tc(),createdAt:Date.now(),lastSignedInAt:Date.now()},S=xc(u);try{const n=await Je(m.withWrite(n=>Cc({bee:e,accountId:t,device:v,accountKey:y,owner:w,encryptionKey:l,view:S,target:n,onChunksUploaded:e=>d(t,e)}),{wait:"skip"}),6e4,"Sync timed out after 60000ms");return"error"===n.status&&console.error(`[SyncCoordinator ${a()}] Sync failed (+${(performance.now()-s).toFixed(2)}ms):`,n.error),n}catch(e){return e instanceof Jo?void console.warn(`[SyncCoordinator] Skipping sync ${t}: all partitions are held by other devices.`):(console.error(`[SyncCoordinator ${a()}] Sync failed (+${(performance.now()-s).toFixed(2)}ms):`,e),{status:"error",error:e instanceof Error?e.message:String(e)})}}}function qc(t){const{id:e,derivationKey:n,account:r}=t;return{id:e,name:r.accountName,publicKey:r.publicKey,createdAt:r.createdAt,derivationKey:n,defaultPostageStampBatchID:r.defaultPostageStampBatchID,settings:r.settings,accountNameAt:r.accountNameAt,defaultStampAt:r.defaultStampAt,settingsAt:r.settingsAt,lastModified:t.lastModified??Date.now(),devices:[...r.devices],connectedApps:[...r.connectedApps],postageStamps:[...r.postageStamps],partitionCount:r.partitionCount}}const Lc=new Map;async function Kc(t){const e=`${t.accountId}:${t.derivationKey}`,n=Lc.get(e);if(n)return n;const r=async function(t){const e=await en(t.derivationKey),n=await Ie(e,Ce),r=new I(n).publicKey().address(),i=await gc({bee:t.bee,accountId:t.accountId,owner:r});if(0===i.length)return;const s=(await Promise.all(i.filter(t=>!t.removedAt).map(e=>Uc({bee:t.bee,accountId:t.accountId,deviceId:e.deviceId,owner:r}).catch(()=>{})))).filter(t=>void 0!==t);if(0===s.length)return;const a=Ec(s,i,t.accountId);for(const t of[i,a.devices,a.connectedApps,a.postageStamps])Array.isArray(t)&&Object.freeze(t);return{account:a,devices:i}}(t).finally(()=>{Lc.delete(e)});return Lc.set(e,r),r}async function Nc(t){try{const e=await Kc({bee:t.bee,derivationKey:t.derivationKey,accountId:t.accountId});if(!e)return await async function(t){const e=await en(t.derivationKey),n=new I(await Ie(e,Ce)).publicKey().address(),r=await gc({bee:t.bee,accountId:t.accountId,owner:n});return 0===r.length}(t)?"allowed":"unconfirmed";const n=e.account.connectedApps.find(e=>e.appUrl===t.appOrigin);return void 0===n||void 0!==n.revokedAt||void 0!==n.disconnectedAt&&n.disconnectedAt>(t.connectedAt??0)?"ended":"allowed"}catch{return"unconfirmed"}}const Hc="swarm-id-first-party";async function Wc(){try{if("undefined"==typeof window||window.self!==window.top)return;localStorage.setItem(Hc,await Hi("1"))}catch{}}async function jc(){try{const t=localStorage.getItem(Hc);return!!Ni(t)&&(await Gi([t]),"1"===Vi(t))}catch{return!1}}const zc="0x45a1502382541cd610cc9068e88727426b696293";function Gc(t,e){return function(t){try{const{hostname:e}=new URL(t);return"localhost"===e||"127.0.0.1"===e||"0.0.0.0"===e}catch{return!1}}(t)&&e?e:zc}const Vc=new RegExp("^[0-9a-f]{64}$");function Jc(t){const e=t.startsWith("0x")?t.slice(2):t;if(0===e.length)throw new Error("Empty uint return");return BigInt(`0x${e}`)}async function Zc(t,e,n=zc){try{const r=function(t){const e=(t.startsWith("0x")?t.slice(2):t).toLowerCase();if(!Vc.test(e))throw new Error(`Invalid batch ID: ${t}`);return e}(e),[i,s,a]=await async function(t,e){return(await rn(t,e.map(t=>({method:"eth_call",params:[{to:t.to,data:t.data},"latest"]})),{timeoutMs:sn})).map(t=>{if("string"!=typeof t)throw new Error("eth_call returned something other than a hex string");return t})}(t,[{to:n,data:`0xc81e25ab${r}`},{to:n,data:"0x51b17cd0"},{to:n,data:"0x053f14da"}]),o=function(t){const e=function(t){const e=t.startsWith("0x")?t.slice(2):t,n=[];for(let t=0;t<e.length;t+=64)n.push(e.slice(t,t+64));return n}(t);if(e.length<6)throw new Error(`Unexpected batches() return length: ${t}`);return{owner:`0x${e[0].slice(24)}`,depth:Number(BigInt(`0x${e[1]}`)),bucketDepth:Number(BigInt(`0x${e[2]}`)),immutableFlag:0n!==BigInt(`0x${e[3]}`),normalisedBalance:BigInt(`0x${e[4]}`),lastUpdatedBlockNumber:BigInt(`0x${e[5]}`)}}(i);return"0x0000000000000000000000000000000000000000"===o.owner?{status:"not-found"}:{status:"found",state:{batch:o,currentTotalOutPayment:Jc(s),lastPrice:Jc(a)}}}catch{return{status:"error"}}}function Yc(t){const e=t.batch.normalisedBalance-t.currentTotalOutPayment;if(e<=0n)return 0;if(t.lastPrice<=0n)return;const n=e/t.lastPrice;return Number(n*BigInt(nn))}async function _c(t,e,n=zc){const r=await async function(t,e,n=zc){const r=await Zc(t,e,n);return"found"===r.status?r.state:void 0}(t,e,n);if(void 0!==r)return Yc(r)}const Qc=864e5,Xc=7*Qc;function td(t){return t?.appSessionDuration??Xc}const ed=32;function nd(t){if(32!==t.length)throw new Error("Private key must be 32 bytes");const e=on.getPublicKey(t,!1);return{x:e.slice(1,33),y:e.slice(33)}}function rd(t,e,n){const r=function(t,e,n){if(32!==t.length)throw new Error("Private key must be 32 bytes");if(e.length!==ed||n.length!==ed)throw new Error("Public key coordinates must be 32 bytes each");const r=new Uint8Array(65);return r[0]=4,r.set(e,1),r.set(n,33),on.getSharedSecret(t,r,!0).slice(1)}(t,e,n),i=new Uint8Array(r.length+1);i.set(r),i[r.length]=0;const a=s.Binary.keccak256(i),o=new Uint8Array(r.length+1);o.set(r),o[r.length]=1;return{lookupKey:a,accessKeyDecryptionKey:s.Binary.keccak256(o)}}function id(t,e){if(32!==e.length)throw new Error("Key must be 32 bytes");const n=new Uint8Array(t.length),r=Math.ceil(t.length/32);for(let i=0;i<r;i++){const r=new Uint8Array(e.length+4);r.set(e),r[e.length]=255&i,r[e.length+1]=i>>8&255,r[e.length+2]=i>>16&255,r[e.length+3]=i>>24&255;const a=s.Binary.keccak256(r),o=s.Binary.keccak256(a),c=32*i,d=Math.min(c+32,t.length);for(let e=c;e<d;e++)n[e]=t[e]^o[e-c]}return n}const sd=id;function ad(t){if(33!==t.length)throw new Error("Compressed public key must be 33 bytes");const e=t[0];if(2!==e&&3!==e)throw new Error("Invalid compressed public key prefix");const n=on.ProjectivePoint.fromHex(t).toRawBytes(!1);return{x:n.slice(1,33),y:n.slice(33)}}function od(t,e){if(t.length!==ed||e.length!==ed)throw new Error("Public key coordinates must be 32 bytes each");const n=1&e[e.length-1]?3:2,r=new Uint8Array(33);return r[0]=n,r.set(t,1),r}function cd(t){const e={entries:{}};for(const n of t){const t=fe(n.lookupKey);e.entries[t]={reference:fe(n.encryptedAccessKey),metadata:{}}}const n=JSON.stringify(e);return(new TextEncoder).encode(n)}function dd(t){const e=(new TextDecoder).decode(t),n=JSON.parse(e),r=[];for(const[t,e]of Object.entries(n.entries))r.push({lookupKey:ye(t),encryptedAccessKey:ye(e.reference)});return r}function ud(t,e){return t.find(t=>{if(t.lookupKey.length!==e.length)return!1;for(let n=0;n<e.length;n++)if(t.lookupKey[n]!==e[n])return!1;return!0})}const ld=65,hd=(new TextEncoder).encode("act-grantee-list");function pd(t){const e=s.Binary.concatBytes(t,hd);return s.Binary.keccak256(e)}function fd(t,e){const n=function(t){const e=new Uint8Array(t.length*ld);for(let n=0;n<t.length;n++){const r=n*ld;e[r]=4,e.set(t[n].x,r+1),e.set(t[n].y,r+1+32)}return e}(t);return function(t,e){return id(t,pd(e))}(n,e)}function yd(t,e){const n=function(t,e){const n=pd(e);return sd(t,n)}(t,e);return function(t){if(0===t.length)return[];if(t.length%ld!==0)throw new Error(`Invalid grantee list length: ${t.length} is not a multiple of 65`);const e=t.length/ld,n=[];for(let r=0;r<e;r++){const e=r*ld;if(4!==t[e])throw new Error(`Invalid public key prefix at index ${r}: expected 0x04, got 0x${t[e].toString(16)}`);const i=t.slice(e+1,e+1+32),s=t.slice(e+1+32,e+ld);n.push({x:i,y:s})}return n}(n)}const wd=BigInt("9223372036854775807"),gd=new TextEncoder,md="encryptedglref";let bd=0;function vd(t){return(wd-BigInt(t)).toString()}function Sd(t){const e=BigInt(t);return Number(wd-e)}function kd(t,e,n,r){const i=vd(e),s=ye(n),a=r?{[md]:r}:void 0;t.addFork(gd.encode(i),s,a)}function xd(t){const e=t.collect();if(0===e.length)return;e.sort((t,e)=>t.fullPathString.localeCompare(e.fullPathString));const n=e[0];return{timestamp:Sd(n.fullPathString),metadata:{actReference:fe(n.targetAddress),encryptedGranteeListRef:n.metadata?.[md]}}}async function Id(t,e){const n=await async function t(n,r){for(const e of n.forks.values())await t(e.node,!1);const i=await n.marshal(),s=await e(i,r);return n.selfAddress=ye(s.reference),s}(t,!0);return{rootReference:n.reference,tagUid:n.tagUid}}function Ad(t,e){return z.unmarshalFromData(t,e)}async function Cd(t,e){await async function t(n){for(const r of n.forks.values()){if(!r.node.selfAddress)throw new Error("Fork node selfAddress is not set");const n=fe(r.node.selfAddress),i=await e(n),s=z.unmarshalFromData(i,r.node.selfAddress);r.node.targetAddress=s.targetAddress,r.node.forks=s.forks,r.node.obfuscationKey=s.obfuscationKey;for(const t of r.node.forks.values())t.node.parent=r.node;await t(r.node)}}(t)}function Ud(){const t=Math.floor(Date.now()/1e3);return t<=bd?(bd+=1,bd):(bd=t,t)}function Pd(t){return Array.isArray(t)?t:[t]}function Ed(t,e){for(const n of Pd(e)){const e=nd(n),r=rd(n,e.x,e.y),i=ud(t,r.lookupKey);if(i)return{privateKey:n,derived:r,entry:i}}throw new Error("Cannot find publisher entry in ACT")}function $d(t){let e=!0;for(let n=32;n<t.length;n++)if(0!==t[n]){e=!1;break}return fe(e?t.slice(0,32):t)}async function Dd(t,e,n,r,i,s,a){const o=cn(),c=id(e,o),d=nd(n),u=[],l=rd(n,d.x,d.y);u.push({lookupKey:l.lookupKey,encryptedAccessKey:id(o,l.accessKeyDecryptionKey)});for(const t of r){const e=rd(n,t.x,t.y);u.push({lookupKey:e.lookupKey,encryptedAccessKey:id(o,e.accessKeyDecryptionKey)})}const h=cd(u),p=!0===i?.beeCompatible,f=await ps(t,h,{encryptionKey:!p||void 0,pin:i?.pin,deferred:i?.deferred,tag:i?.tag,requestOptions:s}),y=fd(r,n),w=await ps(t,y,{encryptionKey:!0,pin:i?.pin,deferred:i?.deferred,requestOptions:s}),g=Ud(),m=new z;kd(m,g,f.reference,w.reference);const b=await Id(m,async(e,n)=>ps(t,e,{encryptionKey:!p||void 0,pin:i?.pin,deferred:i?.deferred,tag:i?.tag,onProgress:n?a:void 0,requestOptions:s})),v=b.rootReference,S=b.tagUid,k=od(d.x,d.y);return{encryptedReference:fe(c),historyReference:v,granteeListReference:w.reference,publisherPubKey:fe(k),actReference:f.reference,tagUid:S}}async function Bd(t,e,n,r,i,s,a){const o=ad(ye(r)),c=Ad(await Qe(t,n,void 0,void 0,a),ye(n));await Cd(c,async e=>Qe(t,e,void 0,void 0,a));const d=s?function(t,e){const n=vd(e),r=t.collect();if(0===r.length)return;r.sort((t,e)=>t.fullPathString.localeCompare(e.fullPathString));for(const t of r)if(t.fullPathString>=n)return{timestamp:Sd(t.fullPathString),metadata:{actReference:fe(t.targetAddress),encryptedGranteeListRef:t.metadata?.[md]}};const i=r[r.length-1];return{timestamp:Sd(i.fullPathString),metadata:{actReference:fe(i.targetAddress),encryptedGranteeListRef:i.metadata?.[md]}}}(c,s):xd(c);if(!d)throw new Error("No ACT entry found in history");const u=d.metadata.actReference,l=dd(await Qe(t,u,void 0,void 0,a));for(const t of Pd(i)){const n=nd(t);for(const r of[o,n]){const n=rd(t,r.x,r.y),i=ud(l,n.lookupKey);if(!i)continue;const s=sd(i.encryptedAccessKey,n.accessKeyDecryptionKey);return $d(sd(ye(e),s))}}throw new Error("Access denied: no ACT entry found for this key")}function Td(t){return ad(ye(t))}const Od="index.bin";function Md(t){return ua(t,t.id.toHex(),t.lastModified??t.createdAt)}function Rd(t){return{version:1,accountId:t.accountId,deviceId:"",timestamp:t.timestamp,...xc(t)}}function Fd(){return new we("upload-unavailable","The account is in subsidised mode: the gateway pays for and stamps every upload, so there is no stamp of the account's to return.",{reason:"subsidised"})}const qd=new Map;function Ld(){return new we("not-authenticated","This session was ended from the account. Connect again to write.")}class Kd{get stampRefusal(){return this.stampLifetime&&io(this.stampLifetime)}get beeApiUrl(){return this.siteBeeApiUrl??this.ownBeeApiUrl}dropGatewayForOwnCustomNode(){void 0===this.siteBeeApiUrl&&this.ownBeeApiUrl!==dn&&(this.subsidisedGatewayUrl=void 0)}get bee(){return this.beeClientFor(this.isSubsidisedModeActive()?this.subsidisedGatewayUrl:this.beeApiUrl)}get nodeBee(){return this.beeClientFor(this.beeApiUrl)}get accountBee(){return this.beeClientFor(this.ownBeeApiUrl)}beeClientFor(t){let e=this.beeClients.get(t);return e||(this.beeClients.size>=4&&this.beeClients.clear(),e=new pi(t),this.beeClients.set(t,e)),e}constructor(t){this.parentIdentified=!1,this.parentIdentifyReceived=!1,this.authenticated=!1,this.storagePartitioned=!1,this.busJoinGeneration=0,this.pendingYields=new Map,this.answeredRequests=new Set,this.pendingLaneUpdates=new Map,this.lastRestampMs=new Map,this.beeClients=new Map,this.unsubscribeStorageListeners=[],this.storageWorkQueue=Promise.resolve(),this.presence=new wa,this.stamperInitGeneration=0,this.publishInFlight=!1,this.lastDeviceRegistryRefreshAt=0,this.siteAllowList=t.siteAllowList;const e=da().load();this.ownBeeApiUrl=e?.beeNodeUrl||dn,this.gnosisRpcUrl=e?.gnosisRpcUrl||un,this.postageStampContractAddress=t.postageStampContractAddress||zc,this.signalingUrl=t.signalingUrl,this.signalingUrl||console.info("[Proxy] No account-bus signaling URL configured — cross-partition and cross-device coordination is off (docs/Account-Bus.md)."),this.setupMessageListener(),this.setupStorageListeners(),this.bus=new ki([]),this.setupBusListeners(),this.announceReady()}setupStorageListeners(){if(this.unsubscribeStorageListeners.length>0)return;const t=ca();if(this.unsubscribeStorageListeners.push(t.subscribe((t,e)=>{this.enqueueReconcile("handleAccountStorageChange",()=>this.handleAccountStorageChange(e?.noRepublish?"bus":"storage"))})),"undefined"!=typeof window){const t=t=>{t.key===Ue&&(this.partitionAccount||(this.applyNetworkSettings(),this.emitConnectionInfoIfChanged()))};window.addEventListener("storage",t),this.unsubscribeStorageListeners.push(()=>window.removeEventListener("storage",t))}}enqueueReconcile(t,e){this.storageWorkQueue=this.storageWorkQueue.then(()=>e().catch(e=>{console.error(`[Proxy] ${t} failed:`,e)}))}applyNetworkSettings(){this.applyNetworkSettingsValues(da().load())}applyNetworkSettingsValues(t){this.gnosisRpcUrl=t?.gnosisRpcUrl||un;const e=t?.beeNodeUrl||dn;e!==this.ownBeeApiUrl&&(this.ownBeeApiUrl=e,this.dropGatewayForOwnCustomNode())}async handleAccountStorageChange(t="storage"){await this.reevaluateConnection(t)}async reevaluateConnection(t){if(!this.parentOrigin)return;await ca().prime();const e=this.findConnectionForParent();if(e){const{app:n}=e;this.authenticated&&n.appSecret===this.appSecret?(this.storagePartitioned&&"bus"!==t||await this.refreshStampFromStorage(),this.emitConnectionInfoIfChanged()):await this.authenticateFromStorage(n),"storage"===t&&this.schedulePublish("change")}else!this.authenticated||this.storagePartitioned&&"bus"!==t||("storage"===t&&this.publishAccountDelta({ofEndedConnection:!0}),this.clearAuthData(),this.sendToParent({type:"disconnectResponse",requestId:"bus"===t?"account-delta":"storage-event",success:!0}))}async refreshStampFromStorage(){this.joinAccountBus();const t=this.lookupPostageStampForApp(),e=t?.batchID.toHex(),n=t?.signerKey.toHex(),r=t?await this.lookupAccountForApp():void 0,i=r?`${r.owner.toHex()}-${fe(r.encryptionKey)}`:void 0;var s,a;e===this.postageBatchId&&n===this.signerKey&&i===this.stamperAccountFingerprint&&(s=t,a=this.stampLifetime,void 0===s||void 0===a?s===a:s.batchTTL===a.batchTTL&&(s.updatedAt??s.createdAt)===(a.updatedAt??a.createdAt)&&s.usable===a.usable&&s.exists===a.exists)||(this.setResolvedStamp(t),t&&await this.initializeStamper(t.depth))}setResolvedStamp(t){this.teardownCoordinator(),this.stamper=void 0,this.stamperAccountFingerprint=void 0,this.postageBatchId=t?.batchID.toHex(),this.signerKey=t?.signerKey.toHex(),this.stampLifetime=t}async authenticateFromStorage(t){this.appSecret=t.appSecret,this.chatBinding=void 0,this.authenticated=!0,this.restoredSessionCheck=void 0,this.storagePartitioned=!1,this.partitionAccount=void 0,this.deviceId=Dc(),this.joinAccountBus();const e=this.lookupPostageStampForApp();this.setResolvedStamp(e),e&&await this.initializeStamper(e.depth),this.sendToParent({type:"authSuccess",origin:this.parentOrigin}),this.emitConnectionInfoIfChanged()}async handlePopupMessage(t){if("setSecret"===t.type){if(this.isStampHandover(t))return void await this.adoptHandover(t.data);if(!this.pendingChallenge||t.challenge!==this.pendingChallenge)return void console.warn("[Proxy] setSecret challenge mismatch — ignoring");if(t.appOrigin!==this.parentOrigin)return void console.warn("[Proxy] setSecret appOrigin mismatch:",t.appOrigin,"!==",this.parentOrigin);this.pendingChallenge=void 0,this.handedOverChallenge=t.challenge,localStorage.removeItem(ln),await this.adoptHandover(t.data)}}isSiblingFrame(t){if(!t||t===window)return!1;try{return t.parent===window.parent}catch{return!1}}awaitHandover(t){this.pendingChallenge=t,this.handedOverChallenge=void 0}isStampHandover(t){return this.authenticated&&this.storagePartitioned&&void 0!==this.handedOverChallenge&&t.challenge===this.handedOverChallenge&&t.appOrigin===this.parentOrigin&&t.data.secret===this.appSecret}async adoptHandover(t){this.appSecret=t.secret,this.chatBinding=this.acceptHandedOverChatBinding(t),this.authenticated=!0,this.restoredSessionCheck=void 0,this.storagePartitioned=!0,this.deviceId=Dc(),await this.hydratePartitionAccount(t.account,t.secret,t.networkSettings,Date.now(),t.stampPending),this.reactivateThisDevice(),this.savePartitionSession(t),this.sendToParent({type:"authSuccess",origin:this.parentOrigin}),this.emitConnectionInfoIfChanged()}acceptHandedOverChatBinding(t){if(this.parentOrigin)return hn(t.chatBinding,{site:this.parentOrigin,chatAddress:pn(t.secret),signer:t.account.id.toHex()},{allowLocalHttp:!0})}savePartitionSession(t){if(!this.parentOrigin)return;const e=this.parentOrigin,n=this.partitionAccount?.connectedApps.find(t=>t.appUrl===e),r=n?.connectedUntil??Date.now()+td(this.partitionAccount?.settings),i={...t,account:Ys({...t.account,connectedApps:fn(t.account.connectedApps,e)})};this.writePartitionSession(e,async()=>({version:1,parentOrigin:e,connectedUntil:r,data:await Hi(JSON.stringify(i))}))}refreshStoredPartitionAccount(){if(!this.partitionAccount||!this.parentOrigin)return;const t=this.parentOrigin,e=Ys(this.partitionAccount);this.writePartitionSession(t,async()=>{const n=await this.openStoredPartitionSession(t);if(n&&"unavailable"!==n)return{...n.record,data:await Hi(JSON.stringify({...n.wire,account:e}))}})}clearPartitionSession(){this.parentOrigin&&this.writePartitionSession(this.parentOrigin,async()=>null)}writePartitionSession(t,e){const n=yn(t),r=(qd.get(n)??Promise.resolve()).then(async()=>{const t=await e();void 0!==t&&(null===t?localStorage.removeItem(n):localStorage.setItem(n,JSON.stringify(t)))}).catch(t=>{console.warn("[Proxy] Could not persist the partitioned session:",t)});qd.set(n,r)}async openStoredPartitionSession(t){let e,n=null;try{n=localStorage.getItem(yn(t))}catch{return}if(!n)return;try{e=JSON.parse(n)}catch{return}const r=wn.safeParse(e);if(!r.success||!Ni(r.data.data))return;await Gi([r.data.data]);const i=Vi(r.data.data);if(void 0===i)return zi(r.data.data)?"unavailable":void 0;try{return{record:r.data,wire:JSON.parse(i)}}catch{return}}async readPartitionSession(){if(!this.parentOrigin)return;const t=this.parentOrigin;await qd.get(yn(t));let e=null;try{e=localStorage.getItem(yn(t))}catch{return}if(!e)return;const n=await this.openStoredPartitionSession(t);if("unavailable"===n)return;const r=n&&gn.safeParse(n.wire);if(n&&r?.success){if(n.record.parentOrigin===t)if(n.record.connectedUntil<=Date.now())this.clearPartitionSession();else{if(void 0===r.data.chatBinding||this.acceptHandedOverChatBinding(r.data))return{parentOrigin:n.record.parentOrigin,connectedUntil:n.record.connectedUntil,data:r.data};this.clearPartitionSession()}}else this.clearPartitionSession()}async hydratePartitionAccount(t,e,n,r,i){const s=Date.now(),a={...t.connectedApps.find(t=>t.appUrl===this.parentOrigin)??{appUrl:this.parentOrigin,appName:this.appMetadata?.name??this.parentOrigin,lastConnectedAt:r},appSecret:e,lastConnectedAt:r,connectedUntil:s+td(t.settings),stampPending:i};this.partitionAccount={...t,connectedApps:[a,...fn(t.connectedApps.filter(t=>t.appUrl!==this.parentOrigin),this.parentOrigin)],access:{type:"password",kdfSalt:"",kdfIterations:0},encryptedSeed:""},this.applyNetworkSettingsValues(n),await this.refreshStampFromStorage()}joinAccountBus(){const t=this.findConnectionForParent();if(!t)return;const{derivationKey:e}=t.account,n=t.account.id.toHex();e!==this.busJoinedKey&&this.ensureAccountBusTransports(e,n)}async ensureAccountBusTransports(t,e){const n=++this.busJoinGeneration;let r;try{r=await fa(t)}catch(t){return console.error("[Proxy] Failed to derive the account bus context:",t),void(n===this.busJoinGeneration&&this.detachBusTransports())}if(n!==this.busJoinGeneration)return;const i=this.busTopic!==r.topic;if(i){this.detachBusTransports();try{this.removeBusLocal=this.bus.addTransport(new Si(r.topic))}catch(t){return void console.error("[Proxy] Failed to attach the local bus transport:",t)}this.busTopic=r.topic,this.presenceTimer=setInterval(()=>this.publishPresence(),2e4)}if(this.busBoundAccountId=e,i&&this.publishPresence(),this.signalingUrl&&!this.removeBusSignaling)try{this.removeBusSignaling=this.bus.addTransport(new ka({url:this.signalingUrl,topic:r.topic,encryptionKey:r.encryptionKey,createPeerConnection:"undefined"!=typeof RTCPeerConnection?()=>new RTCPeerConnection:void 0}))}catch(t){return void console.error("[Proxy] Failed to attach the bus signaling transport:",t)}this.busJoinedKey=t}publishPresence(){const t=this.busBoundAccountId,e=this.deviceId;t&&e&&this.bus.publish({type:"presence",accountId:t,fromDeviceId:e})}stopPresence(){void 0!==this.presenceTimer&&(clearInterval(this.presenceTimer),this.presenceTimer=void 0),this.presence.clear()}detachBusTransports(){this.stopPresence(),this.removeBusSignaling?.(),this.removeBusSignaling=void 0,this.removeBusLocal?.(),this.removeBusLocal=void 0,this.busTopic=void 0,this.busJoinedKey=void 0,this.busBoundAccountId=void 0}destroy(){for(const t of this.unsubscribeStorageListeners)t();this.unsubscribeStorageListeners=[],this.teardownCoordinator(),void 0!==this.publishTimer&&(clearTimeout(this.publishTimer),this.publishTimer=void 0),this.busJoinGeneration+=1,this.stopPresence(),this.removeBusLocal=void 0,this.removeBusSignaling=void 0,this.busTopic=void 0,this.busJoinedKey=void 0,this.busBoundAccountId=void 0,this.bus.close()}teardownCoordinator(){this.cancelPendingYields(),this.coordinator?.teardown(),this.coordinator=void 0,this.terminateStampWorkerPool()}terminateStampWorkerPool(){this.stampWorkerPool?.terminate(),this.stampWorkerPool=void 0}static laneKey(t,e,n){return`${t}:${e}/${n}`}bufferLaneUpdate(t){const e=Kd.laneKey(t.batchId,t.partition,t.partitionCount),n=this.pendingLaneUpdates.get(e)??new Map;for(const{index:e,value:r}of t.buckets){const t=n.get(e);(void 0===t||r>t)&&n.set(e,r)}this.pendingLaneUpdates.set(e,n)}applyPendingLaneUpdate(){const t=this.pendingLaneUpdates;this.pendingLaneUpdates=new Map;const e=this.stamper?.currentPartition;if(!this.stamper||!this.postageBatchId||void 0===e)return;const n=t.get(Kd.laneKey(this.postageBatchId,e,this.stamper.partitionCount));n&&this.stamper.applyUtilizationUpdate([...n].map(([t,e])=>({index:t,value:e})))}answerLeaseRequest(t,e,n){const r=this.coordinator;r&&(this.answeredRequests.has(n)||(this.markRequestAnswered(n),this.bus.publish({type:"lease-claim",accountId:t,batchId:e,fromDeviceId:this.requireDeviceId(),requestId:n}),r.yieldForPeer(n).catch(t=>{console.error("[Proxy] Peer lease yield failed:",t)})))}yieldRankDelayMs(t){const e=this.coordinator,n=e?.currentPartition,r=e?.partitionCount??1;if(void 0===n||r<=1)return 0;const i=Number.parseInt(t.slice(0,8),16);return Number.isFinite(i)?(i+n)%r*250:250*(r-1)}standDownFromRequest(t){if(void 0===t)return;this.markRequestAnswered(t);const e=this.pendingYields.get(t);void 0!==e&&(clearTimeout(e),this.pendingYields.delete(t))}markRequestAnswered(t){if(this.answeredRequests.add(t),this.answeredRequests.size<=32)return;const e=this.answeredRequests.values().next().value;void 0!==e&&this.answeredRequests.delete(e)}cancelPendingYields(){for(const t of this.pendingYields.values())clearTimeout(t);this.pendingYields.clear()}setupBusListeners(){this.bus.onPeerLeft(t=>this.presence.forgetPeer(t)),this.bus.subscribe((t,e)=>{switch(t.type){case"utilization-updated":{if(t.batchId!==this.postageBatchId||!this.stamper)return;const e=this.stamper.currentPartition;return void 0===e?void(0===t.partition&&1===t.partitionCount?this.stamper.applyUtilizationUpdate(t.buckets):this.bufferLaneUpdate(t)):void(t.partition===e&&t.partitionCount===this.stamper.partitionCount&&this.stamper.applyUtilizationUpdate(t.buckets))}case"lease-request":{const e=this.coordinator;if(!e||t.accountId!==e.accountId||t.batchId!==e.batchId||t.fromDeviceId===this.deviceId)return;const{requestId:n}=t;if(this.pendingYields.has(n))return;if(this.answeredRequests.has(n))return;if(!e.canYieldForPeer)return;const r=setTimeout(()=>{this.pendingYields.delete(n),this.answerLeaseRequest(t.accountId,t.batchId,n)},this.yieldRankDelayMs(n));return void this.pendingYields.set(n,r)}case"lease-claim":if(t.fromDeviceId===this.deviceId||t.accountId!==this.coordinator?.accountId||t.batchId!==this.coordinator?.batchId)return;return void this.standDownFromRequest(t.requestId);case"lease-released":if(t.fromDeviceId===this.deviceId||t.accountId!==this.coordinator?.accountId||t.batchId!==this.coordinator?.batchId)return;return this.standDownFromRequest(t.requestId),void this.coordinator?.notifySlotMaybeFree();case"account-delta":return void this.applyAccountDelta(t.snapshot);case"presence":if(t.accountId!==this.busBoundAccountId||t.fromDeviceId===this.deviceId)return;return void this.presence.observe(t.fromDeviceId,Date.now(),e)}})}applyAccountDelta(t){const e=this.findConnectionForParent({includeEnded:!0});if(!e||t.accountId!==e.account.id.toHex())return;const{account:n}=e;if(this.partitionAccount){const r=Ec([Rd(Md(n)),Rd(t)],ao(n.devices,t.metadata.devices),n.id.toHex()),i=qc({id:n.id,derivationKey:n.derivationKey,account:r,lastModified:Math.max(n.lastModified??n.createdAt,t.metadata.lastModified)}),s=fn(pa(r.connectedApps,n.connectedApps),e.app.appUrl);this.partitionAccount={...this.partitionAccount,...i,connectedApps:s,postageStamps:ro(s.find(t=>t.appUrl===e.app.appUrl)??e.app,i,i.postageStamps)},this.refreshStoredPartitionAccount()}this.enqueueReconcile("applyAccountDelta",()=>this.reevaluateConnection("bus"))}createProgressCallback(t,e,n){if(n)return n=>{this.postMessage(t,{type:"uploadProgress",requestId:e,total:n.total,processed:n.processed})}}announceReady(){window.parent&&window.parent!==window&&window.parent.postMessage({type:"proxyInitialized"},"*")}getPostageBatchId(){return this.postageBatchId}getSignerKey(){return this.signerKey}async initializeStamper(t){const{signerKey:e,postageBatchId:n}=this;if(!e||!n)return void console.warn("[Proxy] Cannot initialize stamper: missing signer key or batch ID");const r=++this.stamperInitGeneration,i=()=>this.postageBatchId!==n||this.signerKey!==e||this.stamperInitGeneration!==r,s=await this.lookupAccountForApp();if(i())return;if(!s)return void console.warn("[Proxy] Cannot initialize stamper: account not found");let a;this.utilizationStore||(this.utilizationStore=new Fa);try{a=await Js.create(e,new p(n),t,this.utilizationStore,s.owner,s.encryptionKey)}catch(t){return void console.error("[Proxy] Failed to create stamper:",t)}if(i())return;this.stamper=a,this.stamperAccountFingerprint=`${s.owner.toHex()}-${fe(s.encryptionKey)}`;const o=function(){try{if("undefined"==typeof localStorage)return;const t=localStorage.getItem("swarm-id-partition-tuning");if(!t)return;const e=JSON.parse(t);if("object"!=typeof e||null===e)return;const n=t=>"number"==typeof t&&Number.isFinite(t)&&t>=0?t:void 0,r=e;return{guardWindowMs:n(r.guardWindowMs),guardPollMs:n(r.guardPollMs),readTimeoutMs:n(r.readTimeoutMs)}}catch{return}}(),c=()=>this.accountBee;this.coordinator=new Yo({get bee(){return c()},batchId:n,stamper:a,deviceId:this.requireDeviceId(),knownDeviceIds:()=>this.knownDeviceIdsForAccount(s.accountId),refreshKnownDeviceIds:()=>this.refreshDeviceRegistryFromSwarm(s.accountId,s.encryptionKey),intentReadTimeoutMs:o?.readTimeoutMs,intentGuardWindowMs:o?.guardWindowMs,intentGuardPollMs:o?.guardPollMs,accountId:s.accountId,backupSigner:new I(Te(fe(s.encryptionKey),Ce)),swarmEncryptionKey:s.encryptionKey,partitionCount:s.partitionCount,mode:"persistent",readLeaseCache:()=>this.readLeaseCache(s.accountId,n),writeLeaseCache:t=>this.writeLeaseCache(s.accountId,n,t??null),flushStamperState:()=>this.saveStamperStateIfNeeded(),getWorkerPool:t=>this.getOrCreateWorkerPool(t),onLeaseChange:()=>this.emitConnectionInfoIfChanged(),onSlotWait:()=>this.bus.publish({type:"lease-request",accountId:s.accountId,batchId:n,fromDeviceId:this.requireDeviceId(),requestId:crypto.randomUUID().slice(0,8)}),onLeaseAcquired:()=>{this.applyPendingLaneUpdate(),this.schedulePublish("acquired")},onLeaseReleased:(t,e)=>{this.bus.publish({type:"lease-released",accountId:s.accountId,batchId:n,partition:t,fromDeviceId:this.requireDeviceId(),requestId:e})}}),this.startLeaseOnceAllowed(this.coordinator)}startLeaseOnceAllowed(t){const e=this.restoredSessionCheck;e?e.verdict.then(e=>{"allowed"===e&&this.coordinator===t&&t.startLease()}):t.startLease()}requireDeviceId(){return this.deviceId||(this.deviceId=Dc()),this.deviceId}readLeaseCache(t,e){try{const n=localStorage.getItem(mn(t,e));return n?JSON.parse(n):void 0}catch{return}}writeLeaseCache(t,e,n){const r=mn(t,e);null===n?localStorage.removeItem(r):localStorage.setItem(r,JSON.stringify(n))}async getOrCreateWorkerPool(t){const e=t??("undefined"!=typeof navigator&&navigator.hardwareConcurrency?Math.min(navigator.hardwareConcurrency,8):4);if(this.stampWorkerPool?.size===e&&this.stampWorkerPool.stamper===this.stamper)return this.stampWorkerPool;if(this.terminateStampWorkerPool(),this.signerKey&&this.stamper)try{return this.stampWorkerPool=await to.create(this.signerKey,this.stamper,e),this.stampWorkerPool}catch(t){return void console.warn("[Proxy] Failed to create StampWorkerPool:",t)}}async saveStamperState(){try{await this.persistStamperState()}catch(t){console.error("[Proxy] Failed to save stamper state:",t)}}async persistStamperState(){if(!this.stamper)return;const t=this.stamper.getBucketUpdatesForBroadcast(),e=this.stamper.currentPartition??0,n=this.stamper.partitionCount;await this.stamper.flush(),this.postageBatchId&&t.length>0&&this.bus.publish({type:"utilization-updated",batchId:this.postageBatchId,partition:e,partitionCount:n,buckets:t},{localOnly:!0})}async withModeAwareWriteLock(t,e){if(this.isSubsidisedModeActive())return e({mode:"subsidised",gatewayUrl:this.subsidisedGatewayUrl});if(!this.coordinator)throw new we("not-authenticated","Stamper not initialized. Please login first.");return this.coordinator.withWrite(t=>e("stamper"===t.mode?{...t,bee:this.nodeBee}:t),t)}async saveStamperStateIfNeeded(){this.isSubsidisedModeActive()||await this.saveStamperState()}setupMessageListener(){window.addEventListener("message",async t=>{const{type:e}=t.data;if("parentIdentify"===e){if(t.source!==window.parent)return void console.warn("[Proxy] Rejected parentIdentify from non-parent window");const e=bn.safeParse(t.data);if(!e.success)return void console.warn("[Proxy] Invalid parentIdentify message:",e.error);try{await this.handleParentIdentify(e.data,t)}catch(e){console.error("[Proxy] Initialization failed:",e),this.postMessage(t,{type:"initError",error:e instanceof Error?e.message:"Initialization failed"})}return}if(!this.parentIdentified)return void console.warn("[Proxy] Ignoring message - parent not identified yet");if(t.origin===window.location.origin&&"connectWindowOpened"===e){if(!this.isSiblingFrame(t.source))return void console.warn("[Proxy] Ignoring connectWindowOpened from a window that is not a frame beside this one");const e=vn.safeParse(t.data);return void(e.success&&this.awaitHandover(e.data.challenge))}if(t.origin===window.location.origin&&"setSecret"===e){const e=Sn.safeParse(t.data);return e.success?void await this.handlePopupMessage(e.data):void console.warn("[Proxy] Invalid setSecret payload:",e.error)}if(t.origin!==this.parentOrigin)return void console.warn("[Proxy] Rejected message from unauthorized origin:",t.origin);let n;try{n=kn.parse(t.data)}catch(t){return void console.warn("[Proxy] Invalid parent message:",t)}try{await this.handleParentMessage(n,t)}catch(e){console.error("[Proxy] Error handling parent message:",e),this.sendErrorToParent(t,n.requestId,e,"Unknown error")}})}async handleParentIdentify(t,e){if(this.parentIdentifyReceived)return void console.error("[Proxy] Parent already identified! Ignoring duplicate.");this.parentIdentifyReceived=!0;const n=await this.siteAllowList.check(e.origin);if(!n.allowed)throw console.warn("[Proxy] Refused parent:",n.message),new Error(n.message);const r=t.metadata;this.parentOrigin=e.origin,this.parentIdentified=!0,e.source&&(this.parentWindow=e.source),r&&(this.appMetadata=r),this.siteBeeApiUrl=t.beeApiUrl,this.siteSubsidisedGatewayUrl=t.subsidisedGatewayUrl,this.subsidisedGatewayUrl=t.subsidisedGatewayUrl,this.dropGatewayForOwnCustomNode(),await this.loadAuthData();const i=await jc();this.postMessage(e,{type:"proxyReady",authenticated:this.authenticated,parentOrigin:this.parentOrigin,storageShared:i}),this.emitConnectionInfoIfChanged()}async handleParentMessage(t,e){switch(t.type){case"parentIdentify":break;case"checkAuth":this.handleCheckAuth(t,e);break;case"disconnect":this.handleDisconnect(t,e);break;case"uploadData":await this.handleUploadData(t,e);break;case"downloadData":await this.handleDownloadData(t,e);break;case"deriveAppSecret":await this.handleDeriveAppSecret(t,e);break;case"getChatKey":await this.handleGetChatKey(t,e);break;case"setBeeApiUrl":this.handleSetBeeApiUrl(t,e);break;case"stampChunk":await this.handleStampChunk(t,e);break;case"uploadFile":await this.handleUploadFile(t,e);break;case"downloadFile":await this.handleDownloadFile(t,e);break;case"uploadFiles":await this.handleUploadFiles(t,e);break;case"listFiles":await this.handleListFiles(t,e);break;case"uploadChunk":await this.handleUploadChunk(t,e);break;case"downloadChunk":await this.handleDownloadChunk(t,e);break;case"isConnected":await this.handleIsConnected(t,e);break;case"getNodeInfo":await this.handleGetNodeInfo(t,e);break;case"gsocMine":this.handleGsocMine(t,e);break;case"gsocSend":await this.handleGsocSend(t,e);break;case"socUpload":await this.handleSocUpload(t,e);break;case"socRawUpload":await this.handleSocRawUpload(t,e);break;case"socDownload":await this.handleSocDownload(t,e);break;case"socRawDownload":await this.handleSocRawDownload(t,e);break;case"socGetOwner":await this.handleSocGetOwner(t,e);break;case"epochFeedDownloadReference":await this.handleEpochFeedDownloadReference(t,e);break;case"epochFeedUploadReference":await this.handleEpochFeedUploadReference(t,e);break;case"feedGetOwner":await this.handleFeedGetOwner(t,e);break;case"seqFeedGetOwner":await this.handleSequentialFeedGetOwner(t,e);break;case"seqFeedDownloadPayload":await this.handleSequentialFeedDownloadPayload(t,e);break;case"seqFeedDownloadRawPayload":await this.handleSequentialFeedDownloadRawPayload(t,e);break;case"seqFeedDownloadReference":await this.handleSequentialFeedDownloadReference(t,e);break;case"seqFeedUploadPayload":await this.handleSequentialFeedUploadPayload(t,e);break;case"seqFeedUploadRawPayload":await this.handleSequentialFeedUploadRawPayload(t,e);break;case"seqFeedUploadReference":await this.handleSequentialFeedUploadReference(t,e);break;case"actUploadData":await this.handleActUploadData(t,e);break;case"actDownloadData":await this.handleActDownloadData(t,e);break;case"actAddGrantees":await this.handleActAddGrantees(t,e);break;case"actRevokeGrantees":await this.handleActRevokeGrantees(t,e);break;case"actGetGrantees":await this.handleActGetGrantees(t,e);break;case"getPostageBatch":await this.handleGetPostageBatch(t,e);break;case"createFeedManifest":await this.handleCreateFeedManifest(t,e);break;default:const n=t;console.warn("[Proxy] Unhandled message type:",n)}}async loadAuthData(){if(!this.parentOrigin)return;await ca().prime();const t=this.lookupAppSecretFromSharedStorage();if(t){const e=this.findConnectionForParent();e&&this.startRestoredSessionCheck({bee:this.accountBee,derivationKey:e.account.derivationKey,accountId:e.account.id.toHex(),appOrigin:this.parentOrigin,connectedAt:e.app.lastConnectedAt}),this.appSecret=t.secret,this.chatBinding=void 0,this.authenticated=!0,this.joinAccountBus();const n=this.lookupPostageStampForApp();return this.setResolvedStamp(n),void(n&&await this.initializeStamper(n.depth))}const e=await this.readPartitionSession();e&&await this.restorePartitionSession(e)}async restorePartitionSession(t){const{data:e}=t,n=e.account.connectedApps.find(t=>t.appUrl===this.parentOrigin)?.lastConnectedAt;this.startRestoredSessionCheck({bee:this.accountBee,derivationKey:e.account.derivationKey,accountId:e.account.id.toHex(),appOrigin:this.parentOrigin,connectedAt:n}),this.appSecret=e.secret,this.chatBinding=this.acceptHandedOverChatBinding(e),this.authenticated=!0,this.storagePartitioned=!0,this.deviceId=Dc(),await this.hydratePartitionAccount(e.account,e.secret,e.networkSettings,n??Date.now(),e.stampPending),this.emitConnectionInfoIfChanged()}startRestoredSessionCheck(t){const e={input:t,settled:void 0,verdict:Nc(t)};this.restoredSessionCheck=e,e.verdict.then(t=>{e.settled=t,this.restoredSessionCheck===e&&("ended"===t?(console.info("[Proxy] The restored session was ended while this page was closed"),this.clearAuthData()):"unconfirmed"===t&&console.warn("[Proxy] Could not confirm the restored session, writes stay refused"),this.emitConnectionInfoIfChanged())})}async awaitRestoredSessionAllowed(){let t=this.restoredSessionCheck;if(!t)return;"unconfirmed"===t.settled&&(this.startRestoredSessionCheck({...t.input,bee:this.accountBee}),t=this.restoredSessionCheck);const e=await t.verdict;if("allowed"!==e){if("ended"===e)throw Ld();throw new we("upload-unavailable","Could not confirm with Swarm that this session is still allowed to write, so writes are refused until it can be confirmed.",{reason:"session-unconfirmed"})}}async ensureCanWrite(){if("ended"===this.restoredSessionCheck?.settled)throw Ld();this.ensureCanUpload(),await this.awaitRestoredSessionAllowed(),this.ensureCanUpload()}lookupPostageStampForApp(){if(this.parentOrigin)try{const t=this.findConnectionForParent();if(!t)return;const{account:e,app:n}=t;if(n.stampPending)return;return no(n,e,e.postageStamps)}catch(t){return void console.error("[Proxy] Error looking up postage stamp:",t)}}async lookupAccountForApp(){if(this.parentOrigin)try{const t=this.findConnectionForParent();if(!t)return;const{account:e}=t,n=await en(e.derivationKey);return{owner:e.id,encryptionKey:ye(n),accountId:e.id.toHex(),partitionCount:e.partitionCount??1}}catch(t){return void console.error("[Proxy] Error looking up account:",t)}}knownDeviceIdsForAccount(t){const e=Date.now(),n=this.busBoundAccountId===t?this.presence.liveDeviceIds(e):[];try{const r=this.partitionAccount?.id.toHex()===t?this.partitionAccount:ca().load().find(e=>e.id.toHex()===t);return!r||$e(r)?n:[...new Set([...Rc(r.devices,e,Mc),...n])]}catch{return n}}async refreshDeviceRegistryFromSwarm(t,e){const n=Date.now();if(!(n-this.lastDeviceRegistryRefreshAt<8e3)){this.lastDeviceRegistryRefreshAt=n;try{const n=this.partitionAccount?.id.toHex()===t,r=n?void 0:ca();await(r?.prime());const i=r?.load()??[],s=n?this.partitionAccount:i.find(e=>e.id.toHex()===t);if(!s||$e(s))return;const a=new I(await Ie(fe(e),Ce)).publicKey().address(),o=await gc({bee:this.accountBee,accountId:s.id.toHex(),owner:a});if(0===o.length)return;const c=Bc(ao(s.devices,o),this.requireDeviceId(),this.announcedDeviceName());(function(t,e,n){if(t.length!==e.length)return!0;const r=new Map(t.map(t=>[t.deviceId,t]));return e.some(t=>{const e=r.get(t.deviceId);if(!e)return!0;const i=t.deviceId===n;return Oc.some(([n,r])=>(!i||"peers-only"!==r)&&e[n]!==t[n])})})(s.devices,c,this.requireDeviceId())&&(n?this.partitionAccount={...s,devices:c}:r.update(e=>e.map(e=>e.id.toHex()===t?{...e,devices:c}:e)).catch(()=>{}))}catch(t){console.warn("[Proxy] Device-registry refresh failed (using current registry):",t)}}}buildAccountStateSnapshot(t){if(!this.parentOrigin)return;const e=this.findConnectionForParent({includeEnded:t.includeEndedConnection});if(!e)return;const{account:n}=e;return!t.requireDefaultStamp||n.defaultPostageStampBatchID?ua(n,n.id.toHex(),Date.now()):void 0}publishAccountDelta(t){const e=this.buildAccountStateSnapshot({requireDefaultStamp:!1,includeEndedConnection:!0===t?.ofEndedConnection});e&&(void 0===this.busBoundAccountId||e.accountId===this.busBoundAccountId?this.bus.publish({type:"account-delta",snapshot:ha(e)}):console.warn(`[Proxy] Account changed since the bus room was joined (snapshot ${e.accountId} vs bus room ${this.busBoundAccountId}); skipping delta.`))}async buildAccountStateSnapshotForPublish(){if(this.parentOrigin)try{const t=this.findConnectionForParent();if(!t)return;const e=this.buildAccountStateSnapshot({requireDefaultStamp:!0,includeEndedConnection:!1});if(!e)return;const n=await en(t.account.derivationKey),r=new I(await Ie(n,Ce)),i=r.publicKey().address();return{snapshot:e,encryptionKey:n,accountKey:r,owner:i}}catch(t){return void console.error("[Proxy] Failed to assemble account-state snapshot:",t)}}schedulePublish(t){"change"!==this.publishReason&&(this.publishReason=t),void 0!==this.publishTimer&&clearTimeout(this.publishTimer),this.publishTimer=setTimeout(()=>{this.publishTimer=void 0;const t=this.publishReason??"acquired";this.publishReason=void 0,this.runAccountStatePublish(t)},1500)}async runAccountStatePublish(t){if(this.publishInFlight)return void this.schedulePublish(t);"change"===t&&this.publishAccountDelta();const e=this.coordinator;if(e&&void 0!==e.currentPartition){this.publishInFlight=!0;try{const n=await this.buildAccountStateSnapshotForPublish();if(!n)return;if(this.coordinator!==e)return;const{snapshot:r,encryptionKey:i,accountKey:s,owner:a}=n;if(r.accountId!==e.accountId)return void console.warn(`[Proxy] Account changed during publish scheduling (snapshot ${r.accountId} vs coordinator ${e.accountId}); skipping publish.`);const o=this.requireDeviceId();if("acquired"===t){const t=(await gc({bee:this.accountBee,accountId:r.accountId,owner:a}).catch(()=>[])).find(t=>t.deviceId===o);if(t?.removedAt){const e=r.metadata.devices.find(t=>t.deviceId===o);if(!(!!e&&!e.removedAt&&(e.lastSignedInAt??0)>t.removedAt))return void console.info(`[Proxy] This device is tombstoned in the roster for ${r.accountId}; not re-announcing.`);console.info(`[Proxy] This device signed in since its removal from ${r.accountId}; announcing the reactivation.`)}else if(t)return void console.info(`[Proxy] Device already in roster for ${r.accountId}; skipping announce publish.`)}const c=r.metadata.devices.find(t=>t.deviceId===o)??{deviceId:o,name:this.announcedDeviceName(),createdAt:Date.now(),lastSignedInAt:Date.now()},d=xc(r);await e.withWrite(t=>Cc({bee:this.accountBee,accountId:r.accountId,device:c,accountKey:s,owner:a,encryptionKey:i,view:d,target:t})),console.info(`[Proxy] Published device state for ${r.accountId} (partition ${e.currentPartition})`)}catch(t){console.warn("[Proxy] Account-state publish failed:",t)}finally{this.publishInFlight=!1}}}reactivateThisDevice(){const t=this.partitionAccount,e=this.deviceId;if(!t||!e)return;if(!t.devices.some(t=>t.deviceId===e&&t.removedAt))return;const n=Date.now();this.partitionAccount={...t,devices:t.devices.map(t=>t.deviceId===e?{...t,removedAt:void 0,lastSignedInAt:n}:t)}}announcedDeviceName(){return this.storagePartitioned&&this.parentOrigin?function(t){const e=Tc();try{return`${e} · ${new URL(t).host}`}catch{return e}}(this.parentOrigin):Tc()}isConnectionValid(t){return!!t.connectedUntil&&t.connectedUntil>Date.now()}findConnectionForParent(t){if(!this.parentOrigin)return;const e=e=>this.isConnectionValid(e)||!0===t?.includeEnded;if(this.partitionAccount){const t=this.partitionAccount.connectedApps.find(t=>t.appUrl===this.parentOrigin&&e(t));return t?{account:this.partitionAccount,app:t}:void 0}const n=ca().load(),r=[];for(const t of n)if(!$e(t))for(const n of t.connectedApps)n.appUrl===this.parentOrigin&&e(n)&&r.push({account:t,app:n});return r.sort((t,e)=>Number(this.isConnectionValid(e.app))-Number(this.isConnectionValid(t.app))||e.app.lastConnectedAt-t.app.lastConnectedAt)[0]}lookupAppSecretFromSharedStorage(){if(this.parentOrigin)try{const t=this.findConnectionForParent();if(!t?.app.appSecret)return;return{secret:t.app.appSecret}}catch(t){return void console.error("[Proxy] Error looking up app secret from shared storage:",t)}}clearAuthData(){if(!this.parentOrigin)return;this.clearPartitionSession();const t=`swarm-stamper-${this.parentOrigin}-${this.postageBatchId}`;localStorage.removeItem(t);const e=this.parentOrigin;ca().update(t=>{let n=!1;const r=t.map(t=>{if($e(t))return t;const r=t.connectedApps.map(t=>t.appUrl===e?(n=!0,{...t,connectedUntil:void 0,appSecret:void 0,disconnectedAt:Date.now()}):t);return{...t,connectedApps:r}});return n?r:void 0}).catch(()=>{}),this.authenticated=!1,this.appSecret=void 0,this.chatBinding=void 0,this.setResolvedStamp(void 0),this.deviceId=void 0,void 0!==this.publishTimer&&(clearTimeout(this.publishTimer),this.publishTimer=void 0),this.pendingLaneUpdates.clear(),this.storagePartitioned=!1,this.partitionAccount=void 0,this.detachBusTransports(),this.busJoinGeneration+=1,this.pendingChallenge=void 0,this.handedOverChallenge=void 0,this.emitConnectionInfoIfChanged()}sendErrorToParent(t,e,n,r){e&&this.postMessage(t,{type:"error",requestId:e,..._i(n,r)})}ensureCanUpload(){if(!this.authenticated||!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");if(!this.isSubsidisedModeActive()){if(!this.postageBatchId||!this.signerKey)throw new we("upload-unavailable","This site has no drive in Swarm ID. Connect to it again and confirm a drive in the sign-in window, adding one first if the account has none, before uploading.",{reason:"no-stamp"});if("stamp-expired"===this.stampRefusal)throw new we("upload-unavailable","The account's drive has expired. Renew it or add another in Swarm ID before uploading.",{reason:"stamp-expired"});if("stamp-not-usable"===this.stampRefusal)throw new we("upload-unavailable","The account's drive is not usable: its record says the node does not have the batch, or cannot use it. Open the drive in Swarm ID to refresh it, or add another, before uploading.",{reason:"stamp-not-usable"})}}hasUsableUserStamp(){return!(!this.postageBatchId||!this.signerKey)&&(!this.stampRefusal&&!!this.stamper)}isSubsidisedModeActive(){return!!this.subsidisedGatewayUrl&&!this.hasUsableUserStamp()}sendToParent(t){this.parentOrigin&&this.parentWindow?this.parentWindow.postMessage(t,this.parentOrigin):console.warn("[Proxy] Cannot send message to parent - no parent window reference")}postMessage(t,e){t.source?t.source.postMessage(e,{targetOrigin:t.origin}):console.warn("[Proxy] Cannot send message - no event source")}handleCheckAuth(t,e){this.postMessage(e,{type:"authStatusResponse",requestId:t.requestId,authenticated:this.authenticated,origin:this.authenticated?this.parentOrigin:void 0,beeApiUrl:this.siteBeeApiUrl})}identityKeysFor(t){return this.identityKeys?.derivationKey!==t&&(this.identityKeys={derivationKey:t,sharingPublicKey:xn(t).publicKey,postageSignerAddress:new I(In(t)).publicKey().address().toHex()}),this.identityKeys}buildConnectionInfo(){let t,e;if(this.authenticated&&this.parentOrigin)try{const e=this.findConnectionForParent();if(e){const{account:n}=e,{sharingPublicKey:r,postageSignerAddress:i}=this.identityKeysFor(n.derivationKey);t={id:n.id.toHex(),name:n.name,address:n.id.toHex(),publicKey:n.publicKey,sharingPublicKey:r,postageSignerAddress:i,avatar:An(n.id.toHex())}}}catch(t){console.error("[Proxy] Error looking up identity:",t)}if(this.authenticated&&this.appSecret){const t=ye(this.appSecret),{x:n,y:r}=nd(t),i=od(n,r);e={address:new I(this.appSecret).publicKey().address().toHex(),publicKey:fe(i)}}let n="unavailable";return this.authenticated&&this.appSecret&&"unconfirmed"!==this.restoredSessionCheck?.settled&&(this.hasUsableUserStamp()?n="user-stamp":this.subsidisedGatewayUrl&&(n="subsidised")),{canUpload:"unavailable"!==n,storagePartitioned:this.storagePartitioned||void 0,uploadMode:n,uploadUnavailableReason:"unavailable"===n?this.uploadUnavailableReason():void 0,identity:t,appKey:e,partition:this.coordinator?.currentPartition,chatBinding:this.authenticated?this.chatBinding:void 0,beeApiUrl:this.siteBeeApiUrl,postageBatchId:this.authenticated?this.postageBatchId:void 0}}uploadUnavailableReason(){if(this.authenticated&&this.appSecret)return"unconfirmed"===this.restoredSessionCheck?.settled?"session-unconfirmed":this.postageBatchId&&this.signerKey?this.stampRefusal?this.stampRefusal:this.stamper?void 0:"stamper-failed":"no-stamp"}emitConnectionInfoIfChanged(){if(!this.parentOrigin)return;const t=this.buildConnectionInfo();var e,n;(e=this.lastConnectionInfo,n=t,e&&e.canUpload===n.canUpload&&!!e.storagePartitioned==!!n.storagePartitioned&&e.uploadMode===n.uploadMode&&e.uploadUnavailableReason===n.uploadUnavailableReason&&e.identity?.id===n.identity?.id&&e.identity?.name===n.identity?.name&&e.identity?.address===n.identity?.address&&e.identity?.publicKey===n.identity?.publicKey&&e.identity?.avatar.source===n.identity?.avatar.source&&e.identity?.avatar.url===n.identity?.avatar.url&&e.appKey?.address===n.appKey?.address&&e.appKey?.publicKey===n.appKey?.publicKey&&e.partition===n.partition&&e.chatBinding?.message===n.chatBinding?.message&&e.chatBinding?.signature===n.chatBinding?.signature&&e.beeApiUrl===n.beeApiUrl&&e.postageBatchId===n.postageBatchId)||(this.lastConnectionInfo=t,this.sendToParent({type:"connectionInfoChanged",canUpload:t.canUpload,storagePartitioned:t.storagePartitioned,uploadMode:t.uploadMode,uploadUnavailableReason:t.uploadUnavailableReason,identity:t.identity,appKey:t.appKey,partition:t.partition,chatBinding:t.chatBinding,beeApiUrl:t.beeApiUrl,postageBatchId:t.postageBatchId}))}async handleIsConnected(t,e){const n=await this.bee.connectivity.isConnected();this.postMessage(e,{type:"isConnectedResponse",requestId:t.requestId,connected:n})}async handleGetNodeInfo(t,e){try{const n=await this.bee.status.getNodeInfo();this.postMessage(e,{type:"getNodeInfoResponse",requestId:t.requestId,beeMode:n.beeMode,chequebookEnabled:n.chequebookEnabled,swapEnabled:n.swapEnabled})}catch(n){this.sendErrorToParent(e,t.requestId,n,"Failed to get node info")}}handleDisconnect(t,e){this.clearAuthData(),this.postMessage(e,{type:"disconnectResponse",requestId:t.requestId,success:!0})}async handleUploadData(t,e){const{requestId:n,data:r,options:i,requestOptions:s,enableProgress:a,useWebSocket:o,useWorkers:c,workerCount:d,concurrency:u}=t;try{await this.ensureCanWrite();const t=this.createProgressCallback(e,n,a),l=await this.withModeAwareWriteLock({useWorkers:c,workerCount:d},async e=>await ps(e,r,{encryptionKey:!!i?.encrypt||void 0,pin:i?.pin,deferred:i?.deferred,tag:i?.tag,webSocket:o?{concurrency:u}:void 0,httpConcurrency:u,onProgress:t,requestOptions:s}));this.postMessage(e,{type:"uploadDataResponse",requestId:n,reference:l.reference,tagUid:l.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Upload failed")}}async handleDownloadData(t,e){const{requestId:n,reference:r,options:i,requestOptions:s}=t;try{const t=await Qe(this.bee,r,i,void 0,s);this.postMessage(e,{type:"downloadDataResponse",requestId:n,data:t})}catch(t){this.sendErrorToParent(e,n,t,"Download failed")}}async handleUploadFile(t,e){const{requestId:n,data:r,name:i,options:s,requestOptions:a,enableProgress:o,useWebSocket:c,useWorkers:d,workerCount:u,concurrency:l}=t,h=i||"index.bin";try{await this.ensureCanWrite();const t=this.createProgressCallback(e,n,o),i=s?.tag??await ts(this.bee),p=await this.withModeAwareWriteLock({useWorkers:d,workerCount:u},async e=>{const n=eo(s),o=await ps(e,r,{encryptionKey:!!n.content||void 0,pin:s?.pin,deferred:s?.deferred,tag:i,webSocket:c?{concurrency:l}:void 0,httpConcurrency:l,onProgress:t,requestOptions:a}),d=new z,u=ye(o.reference);d.addFork(h,u,{"Content-Type":"application/octet-stream",Filename:h}),d.addFork("/",V,{"website-index-document":h});return await Ne(d,async(t,n)=>(await ys(e,t,{pin:s?.pin,deferred:s?.deferred,tag:i,requestOptions:a}),{tagUid:n?i:void 0}),{encrypt:n.manifest})});this.postMessage(e,{type:"uploadFileResponse",requestId:n,reference:p.rootReference,tagUid:p.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Upload failed")}}async handleDownloadFile(t,e){const{requestId:n,reference:r,path:i,options:s,requestOptions:a}=t;try{const t=await He(this.bee,r,a);let o;if(i)o=i;else{const{indexDocument:e}=new dr(t).getDocsMetadata();if(!e)throw new Error("Manifest does not contain an index document reference");o=e}const c=t.find(o);if(!c)throw new Error(`Path not found in manifest: ${o}`);if(!c.targetAddress)throw new Error(`Path "${o}" does not have a target address`);const d=c.metadata?.Filename||o.split("/").pop()||"file",u=fe(c.targetAddress),l=await Qe(this.bee,u,s,void 0,a);this.postMessage(e,{type:"downloadFileResponse",requestId:n,name:d,data:l})}catch(t){this.sendErrorToParent(e,n,t,"Download failed")}}async handleUploadFiles(t,e){const{requestId:n,files:r,options:i,requestOptions:s,enableProgress:a,useWorkers:o,workerCount:c}=t;try{await this.ensureCanWrite();const t=this.createProgressCallback(e,n,a),d=i?.tag??await ts(this.bee),u=await this.withModeAwareWriteLock({useWorkers:o,workerCount:c},e=>async function(t,e,n){const{content:r,manifest:i}=eo(n),s={pin:n?.pin,deferred:n?.deferred,tag:n?.tag,requestOptions:n?.requestOptions},a=new Set;for(const{path:t}of e){if(a.has(t))throw new Error(`Duplicate path in folder: ${t}`);a.add(t)}const o=new z;let c=0;for(const i of e){const{reference:a}=await ps(t,i.data,{...s,encryptionKey:!!r||void 0});o.addFork(i.path,ye(a),{"Content-Type":i.contentType??"application/octet-stream",Filename:i.path.split("/").pop()??i.path}),c++,n?.onProgress?.({total:e.length,processed:c})}const d={};n?.indexDocument&&(d["website-index-document"]=n.indexDocument),n?.errorDocument&&(d["website-error-document"]=n.errorDocument),Object.keys(d).length>0&&o.addFork("/",V,d);const{rootReference:u,tagUid:l}=await Ne(o,async(e,r)=>(await ys(t,e,s),{tagUid:r?n?.tag:void 0}),{encrypt:i});return{reference:u,tagUid:l}}(e,r,{...i,tag:d,onProgress:t,requestOptions:s}));this.postMessage(e,{type:"uploadFilesResponse",requestId:n,reference:u.reference,tagUid:u.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Upload failed")}}async handleListFiles(t,e){const{requestId:n,reference:r,requestOptions:i}=t;try{const t=await async function(t,e,n){return(await He(t,e,n)).collect().filter(t=>"/"!==t.fullPathString).map(t=>({path:t.fullPathString,reference:fe(t.targetAddress),contentType:t.metadata?.["Content-Type"]}))}(this.bee,r,i);this.postMessage(e,{type:"listFilesResponse",requestId:n,entries:t})}catch(t){this.sendErrorToParent(e,n,t,"Listing failed")}}async handleUploadChunk(t,e){const{requestId:n,data:r,options:i,requestOptions:s}=t;try{if(await this.ensureCanWrite(),r.length<1||r.length>4096)throw new Error(`Invalid chunk size: ${r.length} bytes. Chunks must be between 1 and 4096 bytes.`);const t=be(r);await this.withModeAwareWriteLock(void 0,async e=>{await ys(e,t.data,{pin:i?.pin,deferred:i?.deferred??!1,tag:i?.tag,requestOptions:s})}),this.postMessage(e,{type:"uploadChunkResponse",requestId:n,reference:t.address.toHex()})}catch(t){this.sendErrorToParent(e,n,t,"Upload failed")}}async handleDownloadChunk(t,e){const{requestId:n,reference:r,options:i,requestOptions:s}=t;try{const t=await this.bee.chunk.download(r,i,s);this.postMessage(e,{type:"downloadChunkResponse",requestId:n,data:t})}catch(t){this.sendErrorToParent(e,n,t,"Download failed")}}handleGsocMine(t,e){const{requestId:n,targetOverlay:r,identifier:i,proximity:s}=t;try{const t=this.bee.messaging.gsocMine(r,i,s);this.postMessage(e,{type:"gsocMineResponse",requestId:n,signer:t.toHex()})}catch(t){this.sendErrorToParent(e,n,t,"GSOC mine failed")}}async handleGsocSend(t,e){const{requestId:n,signer:r,identifier:i,data:s,options:a}=t;try{await this.ensureCanWrite();const t=new I(r),o=new x(i),c=await this.withModeAwareWriteLock(void 0,async e=>await fs(e,t,o,s,{pin:a?.pin,deferred:a?.deferred,tag:a?.tag}));this.postMessage(e,{type:"gsocSendResponse",requestId:n,reference:fe(c.socAddress),tagUid:c.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"GSOC send failed")}}async handleSocUpload(t,e){const{requestId:n,identifier:r,data:i,signer:s,options:a}=t;try{await this.ensureCanWrite();const t=s??this.appSecret,o=new I(t),c=new x(r),d=await this.withModeAwareWriteLock(void 0,async t=>await fs(t,o,c,i,{encryptionKey:!1!==a?.encrypt||void 0,pin:a?.pin,deferred:a?.deferred,tag:a?.tag}));this.postMessage(e,{type:"socUploadResponse",requestId:n,reference:fe(d.socAddress),tagUid:d.tagUid,encryptionKey:d.encryptionKey?fe(d.encryptionKey):void 0,owner:o.publicKey().address().toHex()})}catch(t){this.sendErrorToParent(e,n,t,"SOC upload failed")}}async handleSocRawUpload(t,e){const{requestId:n,identifier:r,data:i,signer:s,options:a}=t;try{await this.ensureCanWrite();const t=s??this.appSecret,o=new I(t),c=new x(r),d=await this.withModeAwareWriteLock(void 0,async t=>await fs(t,o,c,i,{pin:a?.pin,deferred:a?.deferred,tag:a?.tag}));this.postMessage(e,{type:"socRawUploadResponse",requestId:n,reference:fe(d.socAddress),tagUid:d.tagUid,encryptionKey:void 0,owner:o.publicKey().address().toHex()})}catch(t){this.sendErrorToParent(e,n,t,"SOC raw upload failed")}}async handleSocDownload(t,e){const{requestId:n,owner:r,identifier:i,encryptionKey:s,requestOptions:a}=t;try{let t=r;if(!t){if(!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");t=new I(this.appSecret).publicKey().address().toHex()}const o=await ze(this.bee,t,i,s,a);this.postMessage(e,{type:"socDownloadResponse",requestId:n,data:o.data,identifier:o.identifier,signature:o.signature,span:o.span,payload:o.payload,address:o.address,owner:o.owner})}catch(t){this.sendErrorToParent(e,n,t,"SOC download failed")}}async handleSocRawDownload(t,e){const{requestId:n,owner:r,identifier:i,encryptionKey:s,requestOptions:a}=t;try{let t=r;if(!t){if(!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");t=new I(this.appSecret).publicKey().address().toHex()}const o=s?await ze(this.bee,t,i,s,a):await Cn(this.bee,t,i,a);this.postMessage(e,{type:"socRawDownloadResponse",requestId:n,data:o.data,identifier:o.identifier,signature:o.signature,span:o.span,payload:o.payload,address:o.address,owner:o.owner})}catch(t){this.sendErrorToParent(e,n,t,"SOC raw download failed")}}async handleSocGetOwner(t,e){const{requestId:n}=t;try{if(!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");const t=new I(this.appSecret).publicKey().address().toHex();this.postMessage(e,{type:"socGetOwnerResponse",requestId:n,owner:t})}catch(t){this.sendErrorToParent(e,n,t,"SOC get owner failed")}}async handleDeriveAppSecret(t,e){const{requestId:n,label:r}=t;try{if(!this.authenticated||!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");const t=await Ie(this.appSecret,r);this.postMessage(e,{type:"deriveAppSecretResponse",requestId:n,secret:ye(t)})}catch(t){this.sendErrorToParent(e,n,t,"deriveAppSecret failed")}}async handleGetChatKey(t,e){const{requestId:n}=t;try{if(!this.authenticated||!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");this.postMessage(e,{type:"getChatKeyResponse",requestId:n,chatKey:Un(this.appSecret)})}catch(t){this.sendErrorToParent(e,n,t,"getChatKey failed")}}handleSetBeeApiUrl(t,e){this.siteBeeApiUrl=t.beeApiUrl,this.subsidisedGatewayUrl=this.siteSubsidisedGatewayUrl,this.postMessage(e,{type:"setBeeApiUrlResponse",requestId:t.requestId,beeApiUrl:t.beeApiUrl}),this.emitConnectionInfoIfChanged()}async handleStampChunk(t,e){const{requestId:n,chunk:r}=t;try{if(await this.ensureCanWrite(),this.isSubsidisedModeActive())throw Fd();const t=La(r,{appSecret:this.appSecret,internalOwners:this.accountInternalOwners()}),i=await this.withModeAwareWriteLock(void 0,async e=>{if(!ns(e))throw Fd();if(!(e.stamper instanceof Js))throw new we("internal","The write path has no utilization-aware stamper to stamp with.");const n=this.stampWithinAppLimits(e.stamper,t);return await this.persistStamperStateForStamp(),n});i.recordSlot?.(),this.postMessage(e,{type:"stampChunkResponse",requestId:n,address:fe(t.address),stamp:i.marshaled,owner:t.owner?.toHex(),signature:t.signature?.toHex()})}catch(t){this.sendErrorToParent(e,n,t,"stampChunk failed")}}async persistStamperStateForStamp(){try{await this.persistStamperState()}catch(t){throw console.error("[Proxy] Failed to save the stamp's counter:",t),new we("internal","The stamp counter could not be saved, so no stamp was returned. Try again.")}}stampWithinAppLimits(t,e){if(!this.parentOrigin)throw new we("not-authenticated","No app has identified itself to this frame.");const n=t.batchId.toHex(),r=Pn(this.parentOrigin,n),i=function(t){if(null===t)return{count:0,windowStart:0,windowCount:0,buckets:{}};try{const e=Ha.safeParse(JSON.parse(t));return e.success?e.data:{count:0,windowStart:0,windowCount:0,buckets:{}}}catch{return{count:0,windowStart:0,windowCount:0,buckets:{}}}}(localStorage.getItem(r)),s=Date.now();if(!e.owner){const n=this.stampNewSlot(t,e.address,i,s);return localStorage.setItem(r,JSON.stringify(n.usage)),{marshaled:n.marshaled}}const a=En(this.parentOrigin,n),o={partition:t.currentPartition??0,partitionCount:t.partitionCount},c=Qa(localStorage.getItem(a),o),d=fe(e.address),u=c.slots[d];let l,h,p,f;if(u&&t.isOwnDataSlot(e.address,u.slot)){const n=za(i,s);if(n)throw n;l=u.slot;const r=`${a}:${d}`,o=Math.max(u.timestampMs,this.lastRestampMs.get(r)??0);h=function(t,e){return Math.max(e,t+1)}(o,s),p=Ka(t.restampDataChunk(e.address,l,h)),this.lastRestampMs.set(r,h),f=Va(i,s)}else{const n=this.stampNewSlot(t,e.address,i,s);l=n.slot,h=s,p=n.marshaled,f=n.usage}localStorage.setItem(r,JSON.stringify(f));return{marshaled:p,recordSlot:()=>{const t=Qa(localStorage.getItem(a),o);localStorage.setItem(a,JSON.stringify(function(t,e,n,r){return!(e in t.slots)&&Object.keys(t.slots).length>=256?t:{...t,slots:{...t.slots,[e]:{slot:n,timestampMs:r}}}}(t,d,l,h)))}}}stampNewSlot(t,e,n,r){const i=Ds(e),s=Ga(n,{bucket:i,laneCapacity:t.laneCapacity(),now:r});if(s)throw s;const a=t.stampDataChunk(e,r);return{marshaled:Ka(a),slot:(o=a.index,new DataView(o.buffer,o.byteOffset,o.byteLength).getUint32(4,!1)),usage:Ja(n,i,r)};var o}accountInternalOwners(){const t=this.findConnectionForParent();if(!t)throw new we("not-authenticated","No connected account for this app. Please login first.");return function(t){const{derivationKey:e}=t,n=Te(e,Oe),i=[e,n,Te(n,Ce),Te(e,Me),Te(e,Re)];t.postageSignerKey&&i.push(t.postageSignerKey);const s=new Set(i.map(t=>qa(new I(t))));return s.add(new r(t.accountAddress).toHex().toLowerCase()),s}({accountAddress:t.account.id.toHex(),derivationKey:t.account.derivationKey,postageSignerKey:this.signerKey})}parseFeedTimestamp(t){if("number"==typeof t)return BigInt(Math.floor(t));if(!/^-?\d+$/.test(t))throw new Error(`Invalid timestamp format: "${t}" (expected decimal integer)`);return BigInt(t)}parseFeedIndex(t){if("number"==typeof t)return BigInt(Math.floor(t));if(!/^-?\d+$/.test(t))throw new Error(`Invalid index format: "${t}" (expected decimal integer)`);return BigInt(t)}makeSequentialFeedIdentifier(t,e){const n=s.Binary.numberToUint64(e,"BE");return s.Binary.keccak256(s.Binary.concatBytes(t,n))}async findLatestSequentialIndex(t,e,n,r){const i={...n,timeout:r??2e3},s=(a={bee:this.bee,topic:new lt(t),owner:e},new rc(a.bee,a.topic,a.owner));var a;return(await s.findAt(0n,0n,i)).current}sequentialNextIndex(t){return t===(1n<<64n)-1n?0n:t+1n}async handleFeedGetOwner(t,e){const{requestId:n}=t;try{if(!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");const t=new I(this.appSecret).publicKey().address().toHex();this.postMessage(e,{type:"feedGetOwnerResponse",requestId:n,owner:t})}catch(t){this.sendErrorToParent(e,n,t,"Feed get owner failed")}}async handleEpochFeedDownloadReference(t,e){const{requestId:n,topic:i,owner:s,at:a,after:o,encryptionKey:c}=t;try{let t=s;if(!t){if(!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");t=new I(this.appSecret).publicKey().address().toHex()}const d=new lt(ye(i)),u=new r(t),l=this.parseFeedTimestamp(a),h=void 0!==o?this.parseFeedTimestamp(o):0n,p=c?ye(c):void 0;let f;if(p){const t=ec({bee:this.bee,topic:d,owner:u,encryptionKey:p});f=await t.findAt(l,h)}else{const t=ec({bee:this.bee,topic:d,owner:u});f=await t.findAt(l,h)}this.postMessage(e,{type:"epochFeedDownloadReferenceResponse",requestId:n,reference:f?fe(f):void 0})}catch(t){this.sendErrorToParent(e,n,t,"Epoch feed download reference failed")}}async handleEpochFeedUploadReference(t,e){const{requestId:n,topic:r,signer:i,at:s,reference:a,encryptionKey:o,hints:c}=t;try{await this.ensureCanWrite();const t=i??this.appSecret,u=new I(t),l=new lt(ye(r)),h=u.publicKey().address(),p=this.parseFeedTimestamp(s),f=o?ye(o):void 0,y=c?.lastEpoch?{lastEpoch:{start:BigInt(c.lastEpoch.start),level:c.lastEpoch.level},lastTimestamp:c.lastTimestamp?BigInt(c.lastTimestamp):void 0}:void 0,w=ye(a);if(32!==w.length&&64!==w.length)throw new Error(`Reference must be 32 or 64 bytes, got ${w.length}`);const g=(d={bee:this.bee,topic:l,owner:h,signer:u},new tc(d.topic,d.signer)),m=await this.withModeAwareWriteLock(void 0,async t=>await g.update(p,w,t,f,y)),b=ec({bee:this.bee,topic:l,owner:h,encryptionKey:f});await b.findAt(p,p),this.postMessage(e,{type:"epochFeedUploadReferenceResponse",requestId:n,socAddress:fe(m.socAddress),encryptionKey:o||void 0,epoch:{start:m.epoch.start.toString(),level:m.epoch.level},timestamp:m.timestamp.toString()})}catch(t){this.sendErrorToParent(e,n,t,"Epoch feed upload reference failed")}var d}async handleSequentialFeedGetOwner(t,e){const{requestId:n}=t;try{if(!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");const t=new I(this.appSecret).publicKey().address().toHex();this.postMessage(e,{type:"seqFeedGetOwnerResponse",requestId:n,owner:t})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed get owner failed")}}async resolveSequentialOwner(t){if(t)return t;if(!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");return new I(this.appSecret).publicKey().address().toHex()}parseSequentialPayload(t,e){if(!e)return{payload:t};if(t.length<8)return{payload:t,timestamp:void 0};const n=new DataView(t.buffer,t.byteOffset,t.byteLength),r=Number(n.getBigUint64(0,!1));return{payload:t.slice(8),timestamp:r}}async resolveSequentialIndex(t,e,n,r,i=!0,s,a,o=!1,c){if(!o&&!a)throw new we("invalid-request","Encryption key is required for encrypted feed lookup");if(void 0!==n)return this.parseFeedIndex(n);const d=await this.findLatestSequentialIndex(t,e,s,c);if(void 0===d)throw new Error("Sequential feed has no updates");if(void 0===r)return d;if(!i)throw new Error("Cannot use 'at' without timestamps");const u=this.parseFeedTimestamp(r);for(let n=d;n>=0n;n--){const r=this.makeSequentialFeedIdentifier(t,n),i=new x(r),c=o?a?await ze(this.bee,e,i,a,s):await Cn(this.bee,e,i,s):await ze(this.bee,e,i,a??"",s),d=this.parseSequentialPayload(c.payload,!0);if(void 0!==d.timestamp&&BigInt(d.timestamp)<=u)return n;if(0n===n)break}return d}async handleSequentialFeedDownloadPayload(t,e){const{requestId:n,topic:i,owner:s,index:a,at:o,hasTimestamp:c,encryptionKey:d,lookupTimeoutMs:u,requestOptions:l}=t;try{if(!d)throw new we("invalid-request","Encryption key is required for downloadPayload");const t=await this.resolveSequentialOwner(s),h=new r(t),p=ye(i),f=!1!==c,y=await this.resolveSequentialIndex(p,h,a,o,f,l,d,!1,u),w=this.makeSequentialFeedIdentifier(p,y),g=new x(w),m=await ze(this.bee,h,g,d,l),b=this.parseSequentialPayload(m.payload,f),v=this.sequentialNextIndex(y);this.postMessage(e,{type:"seqFeedDownloadPayloadResponse",requestId:n,payload:b.payload,timestamp:b.timestamp,feedIndex:y.toString(),feedIndexNext:v.toString()})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed download payload failed")}}async handleSequentialFeedDownloadRawPayload(t,e){const{requestId:n,topic:i,owner:s,index:a,at:o,hasTimestamp:c,encryptionKey:d,lookupTimeoutMs:u,requestOptions:l}=t;try{const t=await this.resolveSequentialOwner(s),h=new r(t),p=ye(i),f=!1!==c,y=await this.resolveSequentialIndex(p,h,a,o,f,l,d,!0,u),w=this.makeSequentialFeedIdentifier(p,y),g=new x(w),m=d?await ze(this.bee,h,g,d,l):await Cn(this.bee,h,g,l),b=this.parseSequentialPayload(m.payload,f),v=this.sequentialNextIndex(y);this.postMessage(e,{type:"seqFeedDownloadRawPayloadResponse",requestId:n,payload:b.payload,timestamp:b.timestamp,feedIndex:y.toString(),feedIndexNext:v.toString()})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed download raw payload failed")}}async handleSequentialFeedDownloadReference(t,e){const{requestId:n,topic:i,owner:s,index:a,at:o,hasTimestamp:c,encryptionKey:d,lookupTimeoutMs:u,requestOptions:l}=t;try{if(!d)throw new we("invalid-request","Encryption key is required for downloadReference");const t=await this.resolveSequentialOwner(s),h=new r(t),p=ye(i),f=!1!==c,y=await this.resolveSequentialIndex(p,h,a,o,f,l,d,!1,u),w=this.makeSequentialFeedIdentifier(p,y),g=new x(w),m=await ze(this.bee,h,g,d,l),b=this.parseSequentialPayload(m.payload,f);if(32!==b.payload.length&&64!==b.payload.length)throw new Error("Sequential feed update does not contain a reference; use downloadPayload");const v=fe(b.payload),S=this.sequentialNextIndex(y);this.postMessage(e,{type:"seqFeedDownloadReferenceResponse",requestId:n,reference:v,feedIndex:y.toString(),feedIndexNext:S.toString()})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed download reference failed")}}buildSequentialPayload(t,e,n){if(!e)return t;const r=new Uint8Array(8);return new DataView(r.buffer).setBigUint64(0,n,!1),s.Binary.concatBytes(r,t)}async handleSequentialFeedUploadPayload(t,e){const{requestId:n,topic:r,signer:i,data:s,index:a,at:o,hasTimestamp:c,lookupTimeoutMs:d,options:u,requestOptions:l}=t;try{await this.ensureCanWrite();const t=i??this.appSecret,h=new I(t),p=h.publicKey().address(),f=ye(r),y=!1!==c,w=void 0!==o?this.parseFeedTimestamp(o):BigInt(Math.floor(Date.now()/1e3));let g;if(void 0!==a)g=this.parseFeedIndex(a);else{const t=await this.findLatestSequentialIndex(f,p,l,d);g=void 0===t?0n:this.sequentialNextIndex(t)}const m=this.buildSequentialPayload(s,y,w);if(m.length<1||m.length>4096)throw new Error(`Invalid payload length: ${m.length} (expected 1-4096)`);const b=this.makeSequentialFeedIdentifier(f,g),v=new x(b),S=await this.withModeAwareWriteLock(void 0,async t=>await fs(t,h,v,m,{encryptionKey:!1!==u?.encrypt||void 0,pin:u?.pin,deferred:u?.deferred,tag:u?.tag}));this.postMessage(e,{type:"seqFeedUploadPayloadResponse",requestId:n,reference:fe(S.socAddress),feedIndex:g.toString(),owner:p.toHex(),encryptionKey:S.encryptionKey?fe(S.encryptionKey):void 0,tagUid:S.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed upload payload failed")}}async handleSequentialFeedUploadRawPayload(t,e){const{requestId:n,topic:r,signer:i,data:s,index:a,at:o,hasTimestamp:c,encryptionKey:d,lookupTimeoutMs:u,options:l,requestOptions:h}=t;try{await this.ensureCanWrite();const t=i??this.appSecret,p=new I(t),f=p.publicKey().address(),y=ye(r),w=!1!==c,g=void 0!==o?this.parseFeedTimestamp(o):BigInt(Math.floor(Date.now()/1e3));let m;if(void 0!==a)m=this.parseFeedIndex(a);else{const t=await this.findLatestSequentialIndex(y,f,h,u);m=void 0===t?0n:this.sequentialNextIndex(t)}const b=this.buildSequentialPayload(s,w,g);if(b.length<1||b.length>4096)throw new Error(`Invalid payload length: ${b.length} (expected 1-4096)`);const v=this.makeSequentialFeedIdentifier(y,m),S=new x(v),k=await this.withModeAwareWriteLock(void 0,async t=>await fs(t,p,S,b,{encryptionKey:d?ye(d):void 0,pin:l?.pin,deferred:l?.deferred,tag:l?.tag}));this.postMessage(e,{type:"seqFeedUploadRawPayloadResponse",requestId:n,reference:fe(k.socAddress),feedIndex:m.toString(),owner:f.toHex(),encryptionKey:d||void 0,tagUid:k.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed upload raw payload failed")}}async handleSequentialFeedUploadReference(t,e){const{requestId:n,topic:r,signer:i,reference:s,index:a,at:o,hasTimestamp:c,lookupTimeoutMs:d,options:u,requestOptions:l}=t;try{await this.ensureCanWrite();const t=i??this.appSecret,h=new I(t),p=h.publicKey().address(),f=ye(r),y=!1!==c,w=void 0!==o?this.parseFeedTimestamp(o):BigInt(Math.floor(Date.now()/1e3));let g;if(void 0!==a)g=this.parseFeedIndex(a);else{const t=await this.findLatestSequentialIndex(f,p,l,d);g=void 0===t?0n:this.sequentialNextIndex(t)}const m=ye(s),b=this.buildSequentialPayload(m,y,w);if(b.length<1||b.length>4096)throw new Error(`Invalid payload length: ${b.length} (expected 1-4096)`);const v=this.makeSequentialFeedIdentifier(f,g),S=new x(v),k=await this.withModeAwareWriteLock(void 0,async t=>await fs(t,h,S,b,{encryptionKey:!0,pin:u?.pin,deferred:u?.deferred,tag:u?.tag}));this.postMessage(e,{type:"seqFeedUploadReferenceResponse",requestId:n,reference:fe(k.socAddress),feedIndex:g.toString(),owner:p.toHex(),encryptionKey:k.encryptionKey?fe(k.encryptionKey):void 0,tagUid:k.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed upload reference failed")}}sharingSecret(){const t=this.findConnectionForParent()?.account.derivationKey;return t?xn(t).secret:void 0}actKeys(){const t=ye(this.appSecret),e=this.sharingSecret();return e?[t,e]:[t]}async handleActUploadData(t,e){const{requestId:n,data:r,grantees:i,options:s,requestOptions:a,enableProgress:o}=t;try{await this.ensureCanWrite();const t=i.map(t=>Td(t)),c=this.createProgressCallback(e,n,o),d="identity"===s?.publisher?this.sharingSecret():ye(this.appSecret);if(!d)throw new Error("No sharing key: this session carries no account");const u=!0===s?.beeCompatible,{actResult:l,contentUpload:h}=await this.withModeAwareWriteLock({useWorkers:!0},async e=>{const n=await ps(e,r,{encryptionKey:!1!==s?.encrypt||void 0,pin:s?.pin,deferred:s?.deferred,tag:s?.tag,onProgress:c,requestOptions:a}),i=new z,o=ye(n.reference);i.addFork(Od,o,{"Content-Type":"application/octet-stream",Filename:Od}),i.addFork("/",V,{"website-index-document":Od});const l=await Ne(i,async t=>(await ys(e,t,{pin:s?.pin,deferred:s?.deferred,tag:s?.tag}),{}),{encrypt:!u}),h=ye(l.rootReference);return{actResult:await Dd(e,h,d,t,s,a),contentUpload:n}});this.postMessage(e,{type:"actUploadDataResponse",requestId:n,encryptedReference:l.encryptedReference,historyReference:l.historyReference,granteeListReference:l.granteeListReference,publisherPubKey:l.publisherPubKey,actReference:l.actReference,tagUid:h.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"ACT upload failed")}}async handleActDownloadData(t,e){const{requestId:n,encryptedReference:r,historyReference:i,publisherPubKey:s,timestamp:a,requestOptions:o}=t;try{if(!this.authenticated||!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");const t=await Bd(this.bee,r,i,s,this.actKeys(),a,o),c=await He(this.bee,t,o),{indexDocument:d}=new dr(c).getDocsMetadata();if(!d)throw new Error("Manifest does not contain an index document reference");const u=c.find(d);if(!u)throw new Error(`Content node "${d}" not found in manifest`);if(!u.targetAddress)throw new Error(`Content node "${d}" does not have a target address`);const l=fe(u.targetAddress),h=await Qe(this.bee,l,void 0,void 0,o);this.postMessage(e,{type:"actDownloadDataResponse",requestId:n,data:h})}catch(t){this.sendErrorToParent(e,n,t,"ACT download failed")}}async handleActAddGrantees(t,e){const{requestId:n,historyReference:r,grantees:i,requestOptions:s}=t;try{await this.ensureCanWrite();const t=this.actKeys(),a=i.map(t=>Td(t)),o=await this.withModeAwareWriteLock({useWorkers:!0},async e=>await async function(t,e,n,r,i,s,a,o){const c=64===n.length,d=Ad(await Qe(e,n,void 0,void 0,a),ye(n));await Cd(d,async t=>Qe(e,t,void 0,void 0,a));const u=xd(d);if(!u)throw new Error("History manifest is empty");const l=dd(await Qe(e,u.metadata.actReference,void 0,void 0,a)),{privateKey:h,derived:p,entry:f}=Ed(l,r),y=sd(f.encryptedAccessKey,p.accessKeyDecryptionKey),w=[...l];for(const t of i){const e=rd(h,t.x,t.y);w.push({lookupKey:e.lookupKey,encryptedAccessKey:id(y,e.accessKeyDecryptionKey)})}let g=[];u.metadata.encryptedGranteeListRef&&(g=yd(await Qe(e,u.metadata.encryptedGranteeListRef,void 0,void 0,a),h));const m=[...g,...i],b=cd(w),v=await ps(t,b,{encryptionKey:!c||void 0,pin:s?.pin,deferred:s?.deferred,tag:s?.tag,requestOptions:a}),S=fd(m,h),k=await ps(t,S,{encryptionKey:!0,pin:s?.pin,deferred:s?.deferred,requestOptions:a});kd(d,Ud(),v.reference,k.reference);const x=await Id(d,async(e,n)=>ps(t,e,{encryptionKey:!c||void 0,pin:s?.pin,deferred:s?.deferred,tag:s?.tag,onProgress:n?o:void 0,requestOptions:a})),I=x.rootReference,A=x.tagUid;return{historyReference:I,granteeListReference:k.reference,actReference:v.reference,tagUid:A}}(e,this.bee,r,t,a,void 0,s));this.postMessage(e,{type:"actAddGranteesResponse",requestId:n,historyReference:o.historyReference,granteeListReference:o.granteeListReference,actReference:o.actReference})}catch(t){this.sendErrorToParent(e,n,t,"ACT add grantees failed")}}async handleActRevokeGrantees(t,e){const{requestId:n,historyReference:r,encryptedReference:i,revokeGrantees:s,requestOptions:a}=t;try{await this.ensureCanWrite();const t=this.actKeys(),o=s.map(t=>Td(t)),c=await this.withModeAwareWriteLock({useWorkers:!0},async e=>await async function(t,e,n,r,i,s,a,o,c){const d=64===n.length,u=Ad(await Qe(e,n,void 0,void 0,o),ye(n));await Cd(u,async t=>Qe(e,t,void 0,void 0,o));const l=xd(u);if(!l)throw new Error("History manifest is empty");const h=dd(await Qe(e,l.metadata.actReference,void 0,void 0,o)),{privateKey:p,derived:f,entry:y}=Ed(h,i),w=sd(y.encryptedAccessKey,f.accessKeyDecryptionKey);let g=[];l.metadata.encryptedGranteeListRef&&(g=yd(await Qe(e,l.metadata.encryptedGranteeListRef,void 0,void 0,o),p));const m=g.filter(t=>!s.some(e=>function(t,e){if(t.x.length!==e.x.length||t.y.length!==e.y.length)return!1;for(let n=0;n<t.x.length;n++)if(t.x[n]!==e.x[n])return!1;for(let n=0;n<t.y.length;n++)if(t.y[n]!==e.y[n])return!1;return!0}(t,e))),b=[];b.push({lookupKey:f.lookupKey,encryptedAccessKey:id(w,f.accessKeyDecryptionKey)});for(const t of m){const e=rd(p,t.x,t.y);b.push({lookupKey:e.lookupKey,encryptedAccessKey:id(w,e.accessKeyDecryptionKey)})}const v=cd(b),S=await ps(t,v,{encryptionKey:!d||void 0,pin:a?.pin,deferred:a?.deferred,tag:a?.tag,requestOptions:o}),k=fd(m,p),x=await ps(t,k,{encryptionKey:!0,pin:a?.pin,deferred:a?.deferred,requestOptions:o});kd(u,Ud(),S.reference,x.reference);const I=await Id(u,async(e,n)=>ps(t,e,{encryptionKey:!d||void 0,pin:a?.pin,deferred:a?.deferred,tag:a?.tag,onProgress:n?c:void 0,requestOptions:o})),A=I.rootReference,C=I.tagUid;return{encryptedReference:r,historyReference:A,granteeListReference:x.reference,actReference:S.reference,tagUid:C}}(e,this.bee,r,i,t,o,void 0,a));this.postMessage(e,{type:"actRevokeGranteesResponse",requestId:n,encryptedReference:c.encryptedReference,historyReference:c.historyReference,granteeListReference:c.granteeListReference,actReference:c.actReference})}catch(t){this.sendErrorToParent(e,n,t,"ACT revoke grantees failed")}}async handleActGetGrantees(t,e){const{requestId:n,historyReference:r,requestOptions:i}=t;try{if(!this.authenticated||!this.appSecret)throw new we("not-authenticated","Not authenticated. Please login first.");const t=this.actKeys(),s=await async function(t,e,n,r){const i=Ad(await Qe(t,e,void 0,void 0,r),ye(e));await Cd(i,async e=>Qe(t,e,void 0,void 0,r));const s=xd(i);if(!s||!s.metadata.encryptedGranteeListRef)return[];const a=await Qe(t,s.metadata.actReference,void 0,void 0,r),{privateKey:o}=Ed(dd(a),n);return yd(await Qe(t,s.metadata.encryptedGranteeListRef,void 0,void 0,r),o).map(t=>{const e=od(t.x,t.y);return fe(e)})}(this.bee,r,t,i);this.postMessage(e,{type:"actGetGranteesResponse",requestId:n,grantees:s})}catch(t){this.sendErrorToParent(e,n,t,"ACT get grantees failed")}}async handleGetPostageBatch(t,e){const n=this.lookupPostageStampForApp();if(!n)return void this.postMessage(e,{type:"getPostageBatchResponse",requestId:t.requestId,postageBatch:void 0});const r=await $n(this.beeApiUrl,n.batchID.toHex());let i=await async function(t,e,n,r){const i=Gc(t,r);return await _c(t,n,i)??await an(e,n)}(this.gnosisRpcUrl,this.beeApiUrl,n.batchID.toHex(),this.postageStampContractAddress);if(void 0===i)try{const t=await Dn();i=Bn(n.amount,t)}catch(t){console.warn("[Proxy] Failed to calculate TTL:",t)}const s={batchID:n.batchID.toHex(),utilization:n.utilization,usable:r?.usable??n.usable,label:"",depth:n.depth,amount:n.amount.toString(),bucketDepth:n.bucketDepth,blockNumber:n.blockNumber,immutableFlag:n.immutableFlag,exists:r?.exists??n.exists,batchTTL:i};this.postMessage(e,{type:"getPostageBatchResponse",requestId:t.requestId,postageBatch:s})}async handleCreateFeedManifest(t,e){const{topic:n,owner:r,feedType:i,uploadOptions:s}=t;let a=r;if(!a&&this.appSecret){const t=new I(this.appSecret);a=t.publicKey().address().toHex()}if(a)try{await this.ensureCanWrite();const r=await this.withModeAwareWriteLock(void 0,async t=>await async function(t,e,n,r,i){const s=n.startsWith("0x")?n.slice(2):n,a="stamper"===t.mode?i?.tag??await ts(t.bee):void 0,o={pin:i?.pin,deferred:i?.deferred,tag:a},c=new z;c.addFork("/",V,{"swarm-feed-owner":s,"swarm-feed-topic":e,"swarm-feed-type":r?.feedType??"Sequence"});const d=c.forks.get(47);if(!d)throw new Error("[FeedManifest] Failed to create '/' fork");const u=d.node,l=await u.marshal(),h=be(l);await ys(t,h.data,o),u.selfAddress=h.address.toUint8Array();const p=await c.marshal();if(!1!==r?.encrypt){const e=me(p);await ys(t,e.data,o);const n=new Uint8Array(64);return n.set(e.address.toUint8Array(),0),n.set(e.encryptionKey,32),{reference:fe(n),tagUid:a}}{const e=be(p);return await ys(t,e.data,o),{reference:e.address.toHex(),tagUid:a}}}(t,n,a,{encrypt:!1!==s?.encrypt,feedType:i},s));this.postMessage(e,{type:"createFeedManifestResponse",requestId:t.requestId,reference:r.reference})}catch(n){this.sendErrorToParent(e,t.requestId,n,"Create feed manifest failed")}else this.sendErrorToParent(e,t.requestId,new we("invalid-request","No owner provided and no app signer available"),"No owner provided and no app signer available")}}function Nd(t){return new Kd(t)}const Hd={"sign-in":"Sign in with Swarm ID","change-stamp":"Change stamp in Swarm ID"},Wd="white",jd="0 none transparent";function zd(t){return void 0===t.borderColor&&void 0===t.borderWidth?{border:jd}:{border:jd,borderWidth:t.borderWidth??"1px",borderStyle:t.borderStyle??"solid",borderColor:t.borderColor??t.color??Wd}}function Gd(t,e,n){const r=n||!0===e.busy,i=!0===e.disabled,s={width:"100%",height:"100%",display:"block",boxSizing:"border-box",margin:"0",padding:"0 12px",...zd(e),borderRadius:e.borderRadius??"0",backgroundColor:e.backgroundColor??"#dd7200",color:e.color??Wd,fontSize:e.fontSize??"14px",fontWeight:e.fontWeight?.toString()??"600",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",outlineOffset:"-3px",cursor:r||i?"default":"pointer",opacity:i?"0.6":"1"};return e.fontFamily&&(s.fontFamily=e.fontFamily),{text:r?e.busyText??"Waiting for Swarm ID":e.text??Hd[t],ariaLabel:e.ariaLabel,disabled:i,busy:r,style:s}}const Vd=/\/button\/?$/;class Jd{constructor(t,e){this.options=t,this.container=e,this.identifyReceived=!1,this.action="sign-in",this.config={},this.popupMode="window",this.storageShared=!1,this.requestedFonts=new Set,this.onMessage=t=>{this.handleMessage(t)},window.addEventListener("message",this.onMessage),window.parent.postMessage({type:Tn},"*")}destroy(){window.removeEventListener("message",this.onMessage),this.stopWatchingWindow()}async handleMessage(t){if(t.source!==window.parent)return;const e=t.data?.type;"buttonIdentify"===e?await this.handleIdentify(t):"buttonUpdate"===e&&this.handleUpdate(t)}async handleIdentify(t){if(this.identifyReceived)return;const e=On.safeParse(t.data);if(!e.success)return void console.warn("[Button] Invalid buttonIdentify message:",e.error);this.identifyReceived=!0;const n=await this.options.siteAllowList.check(t.origin);if(!n.allowed)return console.warn("[Button] Refused parent:",n.message),void window.parent.postMessage({type:"buttonInitError",error:n.message},t.origin);this.storageShared=await jc(),this.parentOrigin=t.origin,this.action=e.data.action,this.config=e.data.config??{},this.metadata=e.data.metadata,this.popupMode=e.data.popupMode??"window",this.loadFontFaces(this.config.fontFaces),this.render(),this.tellParent({type:"buttonReady"})}handleUpdate(t){if(t.origin!==this.parentOrigin)return;const e=Mn.safeParse(t.data);e.success?(this.action=e.data.action,this.config=e.data.config??{},this.loadFontFaces(this.config.fontFaces),this.render()):console.warn("[Button] Invalid buttonUpdate message:",e.error)}loadFontFaces(t){for(const e of t??[]){const t=JSON.stringify([e.family,e.url,e.weight,e.style]);if(this.requestedFonts.has(t))continue;this.requestedFonts.add(t);const n=new URL(e.url);if("http:"===n.protocol&&!this.options.allowLocalHttp){console.warn(`[Button] Font file ${n.href} is not https, so the label keeps its fallback family.`);continue}const r={};void 0!==e.weight&&(r.weight=String(e.weight)),void 0!==e.style&&(r.style=e.style),new FontFace(e.family,`url(${JSON.stringify(n.href)})`,r).load().then(t=>document.fonts.add(t),()=>console.warn(`[Button] Font file ${n.href} did not load, so the label keeps its fallback family. It needs an Access-Control-Allow-Origin naming ${window.location.origin}.`))}}render(){const t=Gd(this.action,this.config,void 0!==this.connectWindow);this.button||(this.button=document.createElement("button"),this.button.type="button",this.button.addEventListener("click",()=>this.openConnectWindow()),this.container.appendChild(this.button));const e=this.button;e.textContent=t.text,e.disabled=t.disabled,t.ariaLabel?e.setAttribute("aria-label",t.ariaLabel):e.removeAttribute("aria-label"),t.busy?(e.setAttribute("aria-busy","true"),e.setAttribute("aria-disabled","true")):(e.removeAttribute("aria-busy"),e.removeAttribute("aria-disabled")),Object.assign(e.style,t.style)}openConnectWindow(){const t=Gd(this.action,this.config,void 0!==this.connectWindow);if(!this.parentOrigin||!this.metadata||t.busy||t.disabled)return;const e=crypto.randomUUID();this.storageShared&&localStorage.setItem(ln,e);const n=window.location.pathname.replace(Vd,""),r=Rn(window.location.origin+n,this.parentOrigin,this.metadata,{challenge:e}),i="popup"===this.popupMode?window.open(r,"_blank","width=500,height=600"):window.open(r,"_blank");if(!i)return this.storageShared&&localStorage.removeItem(ln),void this.tellWindowState("blocked");this.tellSessionFrames({type:"connectWindowOpened",challenge:e}),this.connectWindow=i,this.render(),this.tellWindowState("open"),this.watchWindow(i)}watchWindow(t){this.stopWatchingWindow(),this.watchStart=setTimeout(()=>{this.watchInterval=setInterval(()=>{t.closed&&(this.stopWatchingWindow(),this.connectWindow===t&&(this.connectWindow=void 0,this.render(),this.tellWindowState("closed")))},500)},2e3)}stopWatchingWindow(){clearTimeout(this.watchStart),clearInterval(this.watchInterval),this.watchStart=void 0,this.watchInterval=void 0}tellSessionFrames(t){const e=window.parent.frames;for(let n=0;n<e.length;n++){const r=e[n];r&&r!==window&&r.postMessage(t,window.location.origin)}}tellWindowState(t){this.tellParent({type:"buttonWindowChanged",state:t})}tellParent(t){this.parentOrigin&&window.parent.postMessage(t,this.parentOrigin)}}function Zd(t,e){return new Jd(t,e)}async function Yd(t){const e=async()=>{if((void 0===t.graceMs||!_d(t.cooldownKey,t.graceMs))&&(t.force||!_d(t.cooldownKey,t.cooldownMs)))try{await t.task()}finally{!function(t){if("undefined"==typeof window||!window.localStorage)return;window.localStorage.setItem(t,String(Date.now()))}(t.cooldownKey)}};"undefined"!=typeof navigator&&navigator.locks?await navigator.locks.request(t.lockName,{mode:"exclusive"},e):await e()}function _d(t,e){if("undefined"==typeof window||!window.localStorage)return!1;const n=window.localStorage.getItem(t);if(!n)return!1;const r=Number(n);return Number.isFinite(r)&&Date.now()-r<e}const Qd="solarpunkid.eth",Xd="buzz.solarpunk.sites",tu="[SiteAllowList]",eu=/[\s,]+/,nu=/^[a-z0-9-]+$/,ru=32,iu=ou("resolver(bytes32)"),su=ou("text(bytes32,string)"),au=se({ensName:de(),recordKey:de(),origins:ce(de()),fetchedAt:ue()});function ou(t){return fe(Fn((new TextEncoder).encode(t)).slice(0,4))}function cu(t){return t.toString(16).padStart(64,"0")}function du(t,e){if("string"==typeof t&&t.length>262146)throw new Error(`${e} answered ${t.length} characters, longer than 131072 bytes of hex data.`);if("string"!=typeof t||!/^0x([0-9a-fA-F]{2})*$/.test(t))throw new Error(`${e} answered something that is not hex data.`);return ye(t.slice(2))}function uu(t,e){if(e+ru>t.length)throw new Error("The answer ends inside a word.");return BigInt(`0x${fe(t.slice(e,e+ru))}`)}async function lu(t,e,n){return Kn(t,"eth_call",[{to:e,data:n},"latest"],{timeoutMs:sn})}async function hu(t,e,n){const r=function(t){let e=new Uint8Array(ru);const n=""===t?[]:t.split(".");for(const t of n.reverse()){const n=new Uint8Array(64);n.set(e),n.set(Fn((new TextEncoder).encode(t)),ru),e=Fn(n)}return`0x${fe(e)}`}(e),i=function(t){const e=du(t,"The registry");if(e.length!==ru)throw new Error("The registry answered a resolver that is not one word.");if(e.slice(0,12).some(t=>0!==t))throw new Error("The registry answered a resolver that is not an address.");const n=e.slice(12);return n.every(t=>0===t)?void 0:`0x${fe(n)}`}(await lu(t,"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",`0x${iu}${r.slice(2)}`));if(!i)throw new Error(`${e} has no resolver.`);return function(t){const e=du(t,"The resolver"),n=uu(e,0);if(n>BigInt(e.length))throw new Error("The resolver answered a string offset past its end.");const r=Number(n),i=uu(e,r),s=BigInt(r+ru)+i;if(s>BigInt(e.length))throw new Error("The resolver answered a string longer than its answer.");return new TextDecoder("utf-8",{fatal:!0}).decode(e.slice(r+ru,Number(s)))}(await lu(t,i,function(t,e){const n=(new TextEncoder).encode(e),r=fe(n),i=Math.ceil(n.length/ru)*ru*2,s=cu(64);return`0x${su}${t.slice(2)}${s}${cu(n.length)}${r.padEnd(i,"0")}`}(r,n)))}function pu(t,e){return{allowed:!1,reason:t,message:{"not-clean":`${e} is not a plain https site address, and Swarm ID serves only the sites on its allow list.`,"not-listed":`${e} is not on Swarm ID's allow list of sites.`,"list-unavailable":`Swarm ID could not read its allow list of sites, so it refused ${e}. It serves no site until the list can be read.`}[t]}}function fu(t){const e=t.now??Date.now,n=function(t){const e=new Set;for(const n of t)qn(n,{allowLocalHttp:!0})?e.add(n):console.warn(`${tu} Ignored a dev origin that is not a clean origin:`,n);return e}(t.devOrigins??[]);let r,i;const s=n=>{if(!n||n.ensName!==t.ensName||n.recordKey!==t.recordKey)return!1;const r=e()-n.fetchedAt;return r>=0&&r<6e5},a=async()=>{if(t.rpcUrl)if(function(t){const e=t.split(".");return e.length>=2&&e.every(t=>nu.test(t))}(t.ensName))try{const n=function(t){const e=[];for(const n of t.split(eu))""!==n&&(qn(n)?e.push(n):console.warn(`${tu} Ignored an entry that is not a clean https origin:`,n));return e}(await hu(t.rpcUrl,t.ensName,t.recordKey));return 0===n.length?void console.warn(`${tu} The record names no site, so no site is allowed.`):((e=>{r=e;try{t.storage?.setItem(Ln,JSON.stringify(e))}catch(t){console.warn(`${tu} Could not keep the list in storage:`,t)}})({ensName:t.ensName,recordKey:t.recordKey,origins:n,fetchedAt:e()}),n)}catch(t){return void console.warn(`${tu} Could not read the list, so no site is allowed:`,t)}else console.warn(`${tu} The ENS name is not a plain lower-case name:`,t.ensName);else console.warn(`${tu} No Ethereum endpoint is set, so no site is allowed.`)},o=async()=>{if(s(r))return r.origins;const e=(()=>{try{const e=t.storage?.getItem(Ln);if(!e)return;const n=au.safeParse(JSON.parse(e));return n.success?n.data:void 0}catch{return}})();return s(e)?(r=e,e.origins):(i??(i=a().finally(()=>{i=void 0})),i)};return{async check(t){if(n.has(t))return{allowed:!0};if(!qn(t))return pu("not-clean",t);const e=await o();return e?e.includes(t)?{allowed:!0}:pu("not-listed",t):pu("list-unavailable",t)}}}export{ki as AccountBus,gn as AuthDataSchema,Cs as BUCKET_DEPTH,Qc as DAY,un as DEFAULT_GNOSIS_RPC_URL,Qd as DEFAULT_SITE_ALLOW_LIST_ENS_NAME,Xd as DEFAULT_SITE_ALLOW_LIST_RECORD_KEY,xa as DebouncedUtilizationUploader,nn as GNOSIS_BLOCK_TIME,De as LocalAccountSchemaV1,Gs as MIN_USABLE_BATCH_DEPTH,We as NO_POSTAGE_STAMP,Pe as NetworkSettingsSchemaV1,Us as PARTITION_COUNT,Oa as PASSWORD_KDF_ITERATIONS,ya as PRESENCE_INTERVAL_MS,Vo as PartitionLease,tn as PostageStampSchemaV1,wa as PresenceTracker,ln as STORAGE_CHALLENGE_KEY,Ee as STORAGE_KEY_ACCOUNTS,Ue as STORAGE_KEY_NETWORK_SETTINGS,ka as SignalingTransport,es as SocUploadError,Js as UtilizationAwareStamper,Fa as UtilizationStoreDB,la as accountDeltaSnapshot,td as appSessionDuration,Yc as calculateContractTTLSeconds,ca as createAccountsStorageManager,da as createNetworkSettingsStorageManager,fu as createSiteAllowList,Fc as createSyncAccount,Ea as decryptSeed,fa as deriveBusContext,Un as deriveChatKey,Ta as deriveKeyFromPassword,Da as deriveKeyFromPrf,$a as deriveKeyFromSecret,Ba as deriveKeyFromSignature,In as derivePostageSignerKeySync,Ie as deriveSecret,Te as deriveSecretSync,xn as deriveSharingKey,en as deriveSwarmEncryptionKey,Tc as detectDeviceName,ze as downloadEncryptedSOC,Pa as encryptSeed,Zc as fetchOnChainBatchStateResult,Kc as foldAccountFromSwarm,qc as foldedToSyncedAccount,Dc as getOrCreateDeviceId,Zd as initButtonFrame,Nd as initProxy,$e as isSignedOutAccount,mn as leaseCacheStorageKey,Wc as markFirstPartyStorage,oo as mergeConnectedApps,Bc as mergeDevices,ao as mergeDevicesList,co as mergePostageStamps,fn as onlySiteChatBinding,Ua as randomSalt,so as remainingLifespanSeconds,no as resolveStampForApp,pa as restoreLocalSessionFields,Yd as runCoalescedAcrossTabs,ta as serializePostageStamp,Ys as serializeSyncedAccount,pn as siteChatAddress,Ve as sleep,ro as stampsReachableByApp,fs as uploadSOC};
|
|
2
2
|
//# sourceMappingURL=internal.esm.js.map
|