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