@solarpunkltd/swarm-id 0.0.0-stage → 0.8.1
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/LICENSE +202 -0
- package/README.md +89 -2
- package/dist/bus/account-bus.d.ts +104 -0
- package/dist/bus/account-delta.d.ts +52 -0
- package/dist/bus/bus-context.d.ts +7 -0
- package/dist/bus/envelope.d.ts +9 -0
- package/dist/bus/messages.d.ts +241 -0
- package/dist/bus/presence.d.ts +62 -0
- package/dist/bus/signaling-transport.d.ts +79 -0
- package/dist/chunk/bmt.d.ts +16 -0
- package/dist/chunk/cac.d.ts +17 -0
- package/dist/chunk/constants.d.ts +10 -0
- package/dist/chunk/encrypted-cac.d.ts +47 -0
- package/dist/chunk/encryption.d.ts +85 -0
- package/dist/chunk/index.d.ts +5 -0
- package/dist/chunks/chat-binding-DO5aGhPl.js +23 -0
- package/dist/chunks/chat-binding-DO5aGhPl.js.map +1 -0
- package/dist/errors.d.ts +35 -0
- package/dist/index.d.ts +27 -0
- package/dist/internal.d.ts +49 -0
- package/dist/internal.esm.js +2 -0
- package/dist/internal.esm.js.map +1 -0
- package/dist/proxy/act/act.d.ts +58 -0
- package/dist/proxy/act/crypto.d.ts +46 -0
- package/dist/proxy/act/grantee-list.d.ts +81 -0
- package/dist/proxy/act/history.d.ts +182 -0
- package/dist/proxy/act/index.d.ts +114 -0
- package/dist/proxy/app-stamp-limits.d.ts +62 -0
- package/dist/proxy/chunk-upload-stream.d.ts +37 -0
- package/dist/proxy/chunking.d.ts +15 -0
- package/dist/proxy/collection.d.ts +38 -0
- package/dist/proxy/download-data.d.ts +27 -0
- package/dist/proxy/errors.d.ts +8 -0
- package/dist/proxy/feed-manifest.d.ts +60 -0
- package/dist/proxy/feeds/epochs/async-finder.d.ts +70 -0
- package/dist/proxy/feeds/epochs/epoch.d.ts +79 -0
- package/dist/proxy/feeds/epochs/finder.d.ts +60 -0
- package/dist/proxy/feeds/epochs/index.d.ts +30 -0
- package/dist/proxy/feeds/epochs/types.d.ts +110 -0
- package/dist/proxy/feeds/epochs/updater.d.ts +76 -0
- package/dist/proxy/feeds/epochs/utils.d.ts +21 -0
- package/dist/proxy/feeds/index.d.ts +4 -0
- package/dist/proxy/feeds/sequence/async-finder.d.ts +14 -0
- package/dist/proxy/feeds/sequence/finder.d.ts +11 -0
- package/dist/proxy/feeds/sequence/index.d.ts +22 -0
- package/dist/proxy/feeds/sequence/types.d.ts +82 -0
- package/dist/proxy/feeds/sequence/updater.d.ts +20 -0
- package/dist/proxy/index.d.ts +5 -0
- package/dist/proxy/manifest-builder.d.ts +164 -0
- package/dist/proxy/mantaray.d.ts +76 -0
- package/dist/proxy/soc-restamp-slots.d.ts +48 -0
- package/dist/proxy/stamp-chunk.d.ts +45 -0
- package/dist/proxy/stamp-worker-handler.d.ts +32 -0
- package/dist/proxy/stamp-worker-pool.d.ts +52 -0
- package/dist/proxy/stamp-worker.d.ts +1 -0
- package/dist/proxy/types.d.ts +38 -0
- package/dist/proxy/upload.d.ts +207 -0
- package/dist/schemas.d.ts +671 -0
- package/dist/stamp-worker.iife.js +1 -0
- package/dist/storage/debounced-uploader.d.ts +61 -0
- package/dist/storage/utilization-store.d.ts +113 -0
- package/dist/swarm-id-client.d.ts +1143 -0
- package/dist/swarm-id-proxy.d.ts +1079 -0
- package/dist/swarm-id.esm.js +2 -0
- package/dist/swarm-id.esm.js.map +1 -0
- package/dist/sync/batch-write-coordinator.d.ts +348 -0
- package/dist/sync/device-roster.d.ts +59 -0
- package/dist/sync/device-state.d.ts +199 -0
- package/dist/sync/fold-account-from-swarm.d.ts +53 -0
- package/dist/sync/index.d.ts +11 -0
- package/dist/sync/merge-snapshot.d.ts +57 -0
- package/dist/sync/partition-intent.d.ts +218 -0
- package/dist/sync/partition-lease.d.ts +531 -0
- package/dist/sync/partition-lock.d.ts +218 -0
- package/dist/sync/partition-state.d.ts +287 -0
- package/dist/sync/session-check.d.ts +29 -0
- package/dist/sync/store-interfaces.d.ts +48 -0
- package/dist/sync/sync-account.d.ts +45 -0
- package/dist/sync/timing-constants.d.ts +32 -0
- package/dist/sync/types.d.ts +18 -0
- package/dist/types.d.ts +3042 -0
- package/dist/utils/account-state-snapshot.d.ts +43 -0
- package/dist/utils/active-devices.d.ts +45 -0
- package/dist/utils/avatar.d.ts +30 -0
- package/dist/utils/batch-utilization.d.ts +840 -0
- package/dist/utils/batch-write-lock.d.ts +12 -0
- package/dist/utils/bee-error.d.ts +11 -0
- package/dist/utils/chat-binding.d.ts +113 -0
- package/dist/utils/coalesced-task.d.ts +28 -0
- package/dist/utils/collection.d.ts +6 -0
- package/dist/utils/connection-info.d.ts +11 -0
- package/dist/utils/constants.d.ts +28 -0
- package/dist/utils/device-id.d.ts +109 -0
- package/dist/utils/hex.d.ts +31 -0
- package/dist/utils/json-rpc.d.ts +34 -0
- package/dist/utils/key-derivation.d.ts +124 -0
- package/dist/utils/lock-soc.d.ts +35 -0
- package/dist/utils/postage-contract.d.ts +143 -0
- package/dist/utils/postage-stamp-association.d.ts +39 -0
- package/dist/utils/promise.d.ts +37 -0
- package/dist/utils/sealed-values.d.ts +23 -0
- package/dist/utils/seed-encryption.d.ts +17 -0
- package/dist/utils/site-allow-list.d.ts +54 -0
- package/dist/utils/stamp-lifespan.d.ts +37 -0
- package/dist/utils/storage-managers.d.ts +62 -0
- package/dist/utils/storage-probe.d.ts +40 -0
- package/dist/utils/tag.d.ts +11 -0
- package/dist/utils/ttl.d.ts +120 -0
- package/dist/utils/url.d.ts +55 -0
- package/dist/utils/versioned-storage.d.ts +183 -0
- package/package.json +91 -3
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{o as t,q as e,r as n,E as r,t as i,x as s,y as a,z as o,B as c,F as d,G as u,H as l,J as h,K as p,L as f,O as y,Q as w,U as g,R as m,V as b,W as v,X as S,Y as k,a as x,c as I,Z as A,_ as C,$ as U,a0 as P,a1 as E,a2 as $,a3 as D,a4 as B,a5 as T,a6 as O,a7 as M,a8 as R,a9 as F,aa as q,ab as L,ac as K,ad as N,ae as H,af as j,ag as W,M as z,ah as G,N as V,ai as J,aj as Z,ak as Y,al as _,am as Q,an as X,ao as tt,ap as et,aq as nt,ar as rt,as as it,at as st,au as at,av as ot,aw as dt,ax as ut,ay as lt,T as ht,az as pt,aA as ft,aB as yt,aC as wt,aD as gt,aE as mt,aF as bt,aG as vt,aH as St,aI as kt,aJ as xt,aK as It,aL as At,aM as Ct,aN as Ut,aO as Pt,aP as Et,aQ as $t,aR as Dt,aS as Bt,aT as Tt,aU as Ot,aV as Mt,aW as Rt,aX as Ft,aY as qt,aZ as Lt,a_ as Kt,a$ as Nt,b0 as Ht,b1 as jt,b2 as Wt,b3 as zt,b4 as Gt,b5 as Vt,b6 as Jt,b7 as Zt,b8 as Yt,b9 as _t,ba as Qt,bb as Xt,bc as te,bd as ee,be as ne,bf as re,bg as ie,bh as se,bi as ae,bj as oe,bk as ce,bl as de,bm as ue,bn as le,bo as he,bp as pe,bq as fe,u as ye,h as we,S as ge,br as me,bs as be,bt as ve,bu as Se,bv as ke,bw as xe,bx as Ie,by as Ae,bz as Ce,bA as Ue,bB as Pe,bC as Ee,bD as $e,bE as De,bF as Be,bG as Te,bH as Oe,bI as Me,bJ as Re,bK as Fe,bL as qe,bM as Le,bN as Ke,bO as Ne,bP as He,bQ as je,bR as We,bS as ze,bT as Ge,bU as Ve,w as Je,bV as Ze,d as Ye,bW as _e,bX as Qe,bY as Xe,bZ as tn,b_ as en,b$ as nn,k as rn,c0 as sn,c1 as an,c2 as on,c3 as cn,D as dn,c4 as un,c5 as ln,l as hn,c6 as pn,c7 as fn,c8 as yn,c9 as wn,ca as gn,cb as mn,cc as bn,cd as vn,P as Sn,ce as kn,cf as xn,g as In,b as An,cg as Cn,ch as Un,ci as Pn,cj as En,ck as $n,cl as Dn,cm as Bn,cn as Tn,n as On,co as Mn,j as Rn}from"./chunks/chat-binding-DO5aGhPl.js";export{cp as BatchIdSchema,cq as PrivateKeySchema,cr as SyncedAccountSchemaV1,cx as calculateStampAmountForDays,cu as createChatBinding,cs as deriveAccountDerivationKey,ct as derivePostageSignerKey,cv as hexAddress,cy as isHttpUrl,cw as withIdleTimeout}from"./chunks/chat-binding-DO5aGhPl.js";class Fn{constructor(t){if(this.bytes=Math.ceil(t),t<0)throw Error("Size must be at least 0")}static fromBytes(t){return new Fn(t)}static fromKilobytes(t){return new Fn(1e3*t)}static fromMegabytes(t){return new Fn(1e3*t*1e3)}static fromGigabytes(t){return new Fn(1e3*t*1e3*1e3)}static parseFromString(t){return Fn.fromBytes(s.Numbers.makeStorage(t,1e3))}toBytes(){return this.bytes}toGigabytes(){return this.bytes/1e3/1e3/1e3}toFormattedString(){return s.Numbers.convertBytes(this.bytes,1e3)}represent(){return this.toFormattedString()}}function qn(t,e){return d.fromPLUR(2n**BigInt(t)*BigInt(e))}function Ln(t,e,n){return BigInt(t.toSeconds())/BigInt(n)*BigInt(e)+1n}function Kn(t,e,n){return c(t.toBytes(),e,n)}function Nn(t,e,n){const r=u(t.batchTTL),i=o.fromSeconds(r),s=l(t.depth,e,n),c=t.utilizationRatio??h(t.utilization,t.depth,t.bucketDepth);return{batchID:new p(t.batchID),utilization:t.utilization,usable:t.usable,label:t.label,depth:t.depth,amount:a(t.amount),bucketDepth:t.bucketDepth,blockNumber:t.blockNumber,immutableFlag:t.immutableFlag,usage:c,usageText:`${Math.round(100*c)}%`,size:Fn.fromBytes(s),remainingSize:Fn.fromBytes(Math.ceil(s*(1-c))),theoreticalSize:Fn.fromBytes(f(t.depth)),duration:i,calculateSize(e,n){const r=l(t.depth,e,n);return Fn.fromBytes(r)},calculateRemainingSize(e,n){const r=l(t.depth,e,n);return Fn.fromBytes(Math.ceil(r*(1-this.usage)))}}}function Hn(t){return{name:function(t){if(!t)throw new v("missing content-disposition header");const e=t.match(/filename\*?=['"]?(?:UTF-\d['"]*)?([^;\r\n"']*)['"]?;?/i);if(e&&e.length>0)return e[1];throw new v("invalid content-disposition header")}(t["content-disposition"]),tagUid:function(t){if(!t)return;return parseInt(t,10)}(t["swarm-tag-uid"]),contentType:t["content-type"]||void 0}}function jn(t,e){const n={};var r;if(!function(t){if(!b({}).safeParse(t).success)return!1;const e=t;return void 0!==e.issuer&&void 0!==e.index&&void 0!==e.signature&&void 0!==e.timestamp&&void 0!==e.batchId}(t)?t&&(t=new p(t),n["swarm-postage-batch-id"]=t.toHex()):n["swarm-postage-stamp"]=(r=t,y(r)).toHex(),!e)return n;const i=e;i.size&&(n["content-length"]=String(i.size)),i.contentType&&(n["content-type"]=String(i.contentType)),i.redundancyLevel&&(n["swarm-redundancy-level"]=String(i.redundancyLevel));const s=w().safeParse(i.act);s.success&&(n["swarm-act"]=String(s.data));const a=w().safeParse(i.pin);a.success&&(n["swarm-pin"]=String(a.data));const o=w().safeParse(i.encrypt);o.success&&(n["swarm-encrypt"]=String(o.data)),i.tag&&(n["swarm-tag"]=String(i.tag));const c=w().safeParse(i.deferred);c.success&&(n["swarm-deferred-upload"]=String(c.data)),i.redundancyStrategy&&(n["swarm-redundancy-strategy"]=String(i.redundancyStrategy));const d=w().safeParse(i.fallback);return d.success&&(n["swarm-redundancy-fallback-mode"]=String(d.data)),i.timeoutMs&&(n["swarm-chunk-retrieval-timeout"]=String(i.timeoutMs)),i.indexDocument&&(n["swarm-index-document"]=String(i.indexDocument)),i.errorDocument&&(n["swarm-error-document"]=String(i.errorDocument)),i.actPublisher&&(n["swarm-act-publisher"]=new g(i.actPublisher).toCompressedHex()),i.actHistoryAddress&&(n["swarm-act-history-address"]=new m(i.actHistoryAddress).toHex()),i.actTimestamp&&(n["swarm-act-timestamp"]=String(i.actTimestamp)),(i.actPublisher||i.actHistoryAddress||i.actTimestamp)&&(n["swarm-act"]="true"),i.gasPrice&&(n["gas-price"]=String(i.gasPrice)),i.gasLimit&&(n["gas-limit"]=String(i.gasLimit)),n}const Wn="chunks";async function zn(e,n,r){n=new m(n);const i=await t(e,{responseType:"arraybuffer",url:`${Wn}/${n}`,headers:jn(null,r)});return new Uint8Array(i.data)}function Gn(t,e){try{return U(t,e)}catch(t){throw new v(t.message)}}async function Vn(e,n,r,i){const a=A.concat(n.span.toUint8Array(),n.payload.toUint8Array());return async function(e,n,r,i,a,o,c){const d=await t(e,{method:"post",url:`soc/${n}/${r}`,data:a,headers:{"content-type":"application/octet-stream",...jn(o,c)},responseType:"json",params:{sig:i.toHex()}});return{reference:S.parse(d.data).reference,tagUid:d.headers["swarm-tag"]?k(d.headers["swarm-tag"]):void 0,historyAddress:d.headers["swarm-act-history-address"]?s.Optional.of(new m(d.headers["swarm-act-history-address"])):s.Optional.empty()}}(e,n.owner,n.identifier,n.signature,a,r,i)}async function Jn(t,e,n,r,i,s){e=new I(e),r=new x(r);return Vn(t,E(i).toSingleOwnerChunk(r,e),n,s)}async function Zn(t,e,n){n=new x(n),e=new r(e);const i=P(n,e);return Gn(await zn(t,i.toHex()),i)}const Yn="balances";const _n="consumed";class Qn{constructor(t){this.context=t}async getAll(e){return async function(e){const n=await t(e,{url:Yn,responseType:"json"});return $.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getPeer(e,n){const r=new B(e);return async function(e,n){const r=await t(e,{url:`${Yn}/${n}`,responseType:"json"});return D.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getAllPastDueConsumption(e){return async function(e){const n=await t(e,{url:_n,responseType:"json"});return $.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getAllPastDueConsumptionForPeer(e,n){const r=new B(e);return async function(e,n){const r=await t(e,{url:`${_n}/${n}`,responseType:"json"});return D.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}}const Xn="chequebook";class tr{constructor(t){this.context=t}async getAllLatest(e){return async function(e){const n=await t(e,{url:`${Xn}/cheque`,responseType:"json"});return R.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getAllLatestForPeer(e,n){const r=new B(e);return async function(e,n){const r=await t(e,{url:`${Xn}/cheque/${n}`,responseType:"json"});return F.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getLastCashoutAction(e,n){const r=new B(e);return async function(e,n){const r=await t(e,{url:`${Xn}/cashout/${n}`,responseType:"json"});return q.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async cashoutLast(e,n,r){const i=new B(e);return n&&(n=L.parse(n)),async function(e,n,r){const i=await t(e,{method:"post",url:`${Xn}/cashout/${n}`,responseType:"json",headers:jn(null,r)});return M.parse(i.data).transactionHash}(this.context.getRequestOptionsForCall(r),i,n)}}class er{constructor(t){this.context=t}async getAddress(e){return async function(e){const n=await t(e,{url:`${Xn}/address`,responseType:"json"});return T.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getBalance(e){return async function(e){const n=await t(e,{url:`${Xn}/balance`,responseType:"json"});return O.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async deposit(e,n,r){const i=e instanceof d?e.toPLURString():a(e,{min:1n,name:"amount"}),s=n?a(e,{min:0n,name:"gasPrice"}):void 0;return async function(e,n,r){const i={};r&&(i["gas-price"]=r);const s=await t(e,{method:"post",url:`${Xn}/deposit`,responseType:"json",params:{amount:n},headers:i});return M.parse(s.data).transactionHash}(this.context.getRequestOptionsForCall(r),i,s)}async withdraw(e,n,r){const i=e instanceof d?e.toPLURString():a(e,{min:1n,name:"amount"}),s=n?a(e,{min:0n,name:"gasPrice"}):void 0;return async function(e,n,r){const i={};r&&(i["gas-price"]=r);const s=await t(e,{method:"post",url:`${Xn}/withdraw`,responseType:"json",params:{amount:n},headers:i});return M.parse(s.data).transactionHash}(this.context.getRequestOptionsForCall(r),i,s)}}class nr{constructor(t){this.context=t}async upload(e,r,i,a){const o="identifier"in r&&"signature"in r&&"owner"in r;if(r=r instanceof Uint8Array?r:r.data,i&&(i=K.parse(i)),r.length<N.LENGTH)throw new H(`Chunk has to have size of at least ${N.LENGTH}.`,r);if(!o&&r.length>j+N.LENGTH)throw new H(`Content Addressed Chunk must not exceed ${j+N.LENGTH} bytes.`,r);if(o&&r.length>j+N.LENGTH+n.LENGTH+x.LENGTH)throw new H(`Single Owner Chunk must not exceed ${j+N.LENGTH+n.LENGTH+x.LENGTH} bytes.`,r);return async function(e,n,r,i){const a=await t(e,{method:"post",url:`${Wn}`,data:n,headers:{"content-type":"application/octet-stream",...jn(r,i)},responseType:"json"});return{reference:S.parse(a.data).reference,tagUid:a.headers["swarm-tag"]?k(a.headers["swarm-tag"]):void 0,historyAddress:a.headers["swarm-act-history-address"]?s.Optional.of(new m(a.headers["swarm-act-history-address"])):s.Optional.empty()}}(this.context.getRequestOptionsForCall(a),r,e,i)}async download(t,e,n){const r=new m(t);return e&&(e=W.parse(e)),zn(this.context.getRequestOptionsForCall(n),r,e)}}async function rr(t,e,n,r,i){for(const s of t.forks.values()){const t=await rr(s.node,e,n,r,i);if(r?.act){let e;t.historyAddress.ifPresent(t=>e=t),e&&(s.node.metadata||(s.node.metadata={}),s.node.metadata["swarm-act-history-address"]=e.toHex())}}const s=await e.data.upload(n,await t.marshal(),r,i);return t.selfAddress=s.reference.toUint8Array(),s}async function ir(t,e,n,r){for(const i of t.forks.values()){if(!i.node.selfAddress)throw Error("MantarayNode#loadRecursively fork.node.selfAddress is not set");let s=n;i.node.metadata&&i.node.metadata["swarm-act-history-address"]&&(s={...n,actHistoryAddress:i.node.metadata["swarm-act-history-address"]});const a=(await e.data.download(i.node.selfAddress,s,r)).toUint8Array(),o=z.unmarshalFromData(a,i.node.selfAddress);i.node.targetAddress=o.targetAddress,i.node.forks=o.forks,i.node.path=i.prefix,i.node.parent=t,await ir(i.node,e,n,r)}}class sr{constructor(t=new z){this.core=t}get obfuscationKey(){return this.core.obfuscationKey}get selfAddress(){return this.core.selfAddress}get targetAddress(){return this.core.targetAddress}get metadata(){return this.core.metadata}get path(){return this.core.path}get forks(){return this.core.forks}get parent(){return this.core.parent}get type(){return this.core.type}get fullPath(){return this.core.fullPath}get fullPathString(){return this.core.fullPathString}getRootMetadata(){const t=this.core.find("/");return t&&t.metadata?s.Optional.of(t.metadata):s.Optional.empty()}getDocsMetadata(){const t=this.core.find("/");return t&&t.metadata?{indexDocument:t.metadata["website-index-document"]??null,errorDocument:t.metadata["website-error-document"]??null}:{indexDocument:null,errorDocument:null}}async resolveFeed(t,e){const n=this.core.find("/");if(!n||!n.metadata)return s.Optional.empty();const r=n.metadata["swarm-feed-owner"],i=n.metadata["swarm-feed-topic"];return r&&i?s.Optional.of(await t.feed.fetchLatestUpdate(i,r,e)):s.Optional.empty()}async marshal(){return this.core.marshal()}static async unmarshal(t,e,n,r){e=new m(e);const i=(await t.data.download(e,n,r)).toUint8Array();return this.unmarshalFromData(i,e.toUint8Array())}static unmarshalFromData(t,e){return new sr(z.unmarshalFromData(t,e))}addFork(t,e,n){this.core.addFork(t,e instanceof A?e.toUint8Array():e,n)}removeFork(t){this.core.removeFork(t)}async calculateSelfAddress(){return this.core.calculateSelfAddress()}async saveRecursively(t,e,n,r){return rr(this.core,t,e,n,r)}async loadRecursively(t,e,n){return ir(this.core,t,e,n)}find(t){return this.core.find(t)}findClosest(t,e){return this.core.findClosest(t,e)}collect(t=[]){return this.core.collect(t)}collectAndMap(){return this.core.collectAndMap()}determineType(){return this.core.determineType()}}function ar(t){return function t(e){return e<=1?e:e+t(Math.ceil(e/128))}(Math.ceil(t/4096))}function or(t){if(!function(t){return!!Array.isArray(t)&&t.every(t=>"object"==typeof t&&t.path&&void 0!==t.size)}(t))throw new H("invalid collection",t)}function dr(t){if(t.webkitRelativePath&&""!==t.webkitRelativePath)return t.webkitRelativePath.replace(/.*?\//i,"");if(t.name)return t.name;throw new TypeError("file is not valid File object")}const ur={aac:"audio/aac",abw:"application/x-abiword",ai:"application/postscript",arc:"application/octet-stream",avi:"video/x-msvideo",azw:"application/vnd.amazon.ebook",bin:"application/octet-stream",bz:"application/x-bzip",bz2:"application/x-bzip2",csh:"application/x-csh",css:"text/css",csv:"text/csv",doc:"application/msword",dll:"application/octet-stream",dmg:"application/x-apple-diskimage",eot:"application/vnd.ms-fontobject",epub:"application/epub+zip",gif:"image/gif",htm:"text/html",html:"text/html",ico:"image/x-icon",ics:"text/calendar",jar:"application/java-archive",jpeg:"image/jpeg",jpg:"image/jpeg",js:"application/javascript",json:"application/json",mid:"audio/midi",midi:"audio/midi",mp2:"audio/mpeg",mp3:"audio/mpeg",mp4:"video/mp4",mpa:"video/mpeg",mpe:"video/mpeg",mpeg:"video/mpeg",mpkg:"application/vnd.apple.installer+xml",odp:"application/vnd.oasis.opendocument.presentation",ods:"application/vnd.oasis.opendocument.spreadsheet",odt:"application/vnd.oasis.opendocument.text",oga:"audio/ogg",ogv:"video/ogg",ogx:"application/ogg",otf:"font/otf",png:"image/png",pdf:"application/pdf",ppt:"application/vnd.ms-powerpoint",rar:"application/x-rar-compressed",rtf:"application/rtf",sh:"application/x-sh",svg:"image/svg+xml",swf:"application/x-shockwave-flash",tar:"application/x-tar",tif:"image/tiff",tiff:"image/tiff",ts:"application/typescript",ttf:"font/ttf",txt:"text/plain",vsd:"application/vnd.visio",wav:"audio/x-wav",weba:"audio/webm",webm:"video/webm",webp:"image/webp",woff:"font/woff",woff2:"font/woff2",xhtml:"application/xhtml+xml",xls:"application/vnd.ms-excel",xlsx:"application/vnd.ms-excel",xml:"application/xml",xul:"application/vnd.mozilla.xul+xml",zip:"application/zip","3gp":"video/3gpp","3gp2":"video/3gpp2","7z":"application/x-7z-compressed"};function lr(t){return["text/html","text/css"].includes(t)?`${t}; charset=utf-8`:t}class hr{constructor(){this.pieces=[],this.currentFileSize=0}get output(){return this.pieces.reduce((t,e)=>{const n=new Uint8Array(t.length+e.length);return n.set(t),n.set(e,t.length),n})}beginFile(t,e){const{name:n,prefix:r,longLink:i}=function(t){if(t.length<=100)return{name:t,prefix:"",longLink:!1};for(let e=t.length-1;e>=0;e--)if("/"===t[e]){const n=t.substring(e+1),r=t.substring(0,e);if(n.length<=100&&r.length<=155)return{name:n,prefix:r,longLink:!1}}const e=t.lastIndexOf("/"),n=(e>=0?t.substring(e+1):t).slice(0,100);return{name:n,prefix:"",longLink:!0}}(t);if(i){const e=(new TextEncoder).encode(t+"\0");this.pieces.push(function(t){const e=new TextEncoder;function n(t,n,i){const s=e.encode(t);r.set(s.slice(0,i),n)}const r=new Uint8Array(512);r.fill(0),n("././@LongLink",0,100),n("0000644\0",100,8),n("0000000\0",108,8),n("0000000\0",116,8),n(t.toString(8).padStart(11,"0")+"\0",124,12),n("00000000000\0",136,12),n(" ",148,8),n("L",156,1),n("ustar\0\0",257,8);let i=0;for(let t=0;t<512;t++)i+=r[t];return n(i.toString(8).padStart(6,"0")+"\0 ",148,8),r}(e.length)),this.pieces.push(e);const n=e.length%512==0?0:512-e.length%512;n>0&&this.pieces.push(new Uint8Array(n))}const s=function(t,e,n){const r=new TextEncoder;function i(t,e,n){const i=r.encode(t);s.set(i.slice(0,n),e)}const s=new Uint8Array(512);s.fill(0,0,512),i(t.slice(0,100).padEnd(100,"\0"),0,100),i("0000777\0",100,8),i("0001750\0",108,8),i("0001750\0",116,8),i(n.toString(8).padStart(11,"0")+"\0",124,12);i(Math.floor((new Date).getTime()/1e3).toString(8).padStart(11,"0")+"\0",136,12),i(" ",148,8),i("0",156,1),i("ustar\0\0",257,8),e&&i(e.slice(0,155).padEnd(155,"\0"),345,155);let a=0;for(let t=0;t<512;t++)a+=s[t];return i(a.toString(8).padStart(6,"0")+"\0 ",148,8),s}(n,r,e);this.pieces.push(s),this.currentFileSize=0}async appendFile(t){this.pieces.push(t),this.currentFileSize+=t.length}async endFile(){const t=this.currentFileSize%512==0?0:512-this.currentFileSize%512;t>0&&this.pieces.push(new Uint8Array(t))}async end(){this.pieces.push(new Uint8Array(1024))}}async function pr(e,n,r,i){const s=new hr;await async function(t,e){for(const n of t){if(!n.file)throw new Error("Invalid collection item");e.beginFile(n.path,n.file.size),await e.appendFile(new Uint8Array(await J(n.file))),await e.endFile()}}(n,s),await s.end();return await t(e,{method:"post",url:"bzz",data:s.output,responseType:"json",headers:{"content-type":"application/x-tar","swarm-collection":"true",...jn(r,i)}})}const fr="bzz";async function yr(e,n,r,i,a){const o=await t(e,{method:"post",url:fr,data:n,headers:jn(r,a),params:{name:i},responseType:"json"});return{reference:S.parse(o.data).reference,tagUid:o.headers["swarm-tag"]?k(o.headers["swarm-tag"]):void 0,historyAddress:o.headers["swarm-act-history-address"]?s.Optional.of(new m(o.headers["swarm-act-history-address"])):s.Optional.empty()}}async function wr(t,e,n,r){or(e);const i=await pr(t,e,n,r);return{reference:S.parse(i.data).reference,tagUid:i.headers["swarm-tag"]?k(i.headers["swarm-tag"]):void 0,historyAddress:i.headers["swarm-act-history-address"]?s.Optional.of(new m(i.headers["swarm-act-history-address"])):s.Optional.empty()}}class gr{constructor(t){this.context=t}async upload(t,e,n,r){const i=new p(t);return or(e),n&&(n=Z.parse(n)),wr(this.context.getRequestOptionsForCall(r),e,i,n)}async uploadFromFileList(t,e,n,r){const i=new p(t);n&&(n=Z.parse(n));const s=function(t){return Array.from(t).map(t=>({path:dr(t),size:t.size,file:t}))}(e);return wr(this.context.getRequestOptionsForCall(r),s,i,n)}async uploadFromDirectory(t,e,n,r){const i=new p(t);n&&(n=Z.parse(n));const s=await async function(){throw new Error("Creating Collection from File System is not supported in browsers!")}();return wr(this.context.getRequestOptionsForCall(r),s,i,n)}async stream(t,e,n,r,i){const a=new p(t);return async function(t,e,n,r,i,a){const o=a?.signal;if(o?.aborted)throw new Error("Request aborted");const c=new s.AsyncQueue(64,64);let d=0,u=0;for(const t of e)d+=ar(t.size);async function l(e){if(!o?.aborted)try{await t.chunk.upload(n,e.build(),i,a),r?.({total:d,processed:++u})}catch(t){if(o?.aborted)return;throw t}}async function h(t){for(const{chunk:e}of t)await c.enqueue(async()=>l(e));return[]}n=new p(n);const f=new sr;for(const t of e){if(o?.aborted)throw new Error("Request aborted");const e=await new Promise((e,n)=>{const r=new G(h);let i=0;const s=new FileReader;s.onerror=()=>{n(s.error)};const a=async()=>{if(o?.aborted)return void n(new Error("Request aborted"));if(i>=t.size){const t=await r.finalize();return await c.enqueue(async()=>l(t)),void e(t)}const a=t.slice(i,i+4096);s.readAsArrayBuffer(a)};s.onload=async t=>{if(!t.target)return void n("No event target");const e=t.target.result;e&&(await r.append(new Uint8Array(e)),i+=4096),a()},a()});await c.drain();const{filename:n,extension:r}=s.Strings.parseFilename(t.name);f.addFork(dr(t),e.hash(),{"Content-Type":lr(ur[r.toLowerCase()]||"application/octet-stream"),Filename:n}),"index.html"===t.name&&f.addFork("/",V,{"website-index-document":"index.html"})}if(o?.aborted)throw new Error("Request aborted");return f.saveRecursively(t,n,i,a)}(this.context.bee,e,a,n,r,this.context.getRequestOptionsForCall(i))}async streamFromDirectory(t,e,n,r,i){new p(t);return async function(){throw new Error("Streaming directories is not supported in browsers!")}(this.context.bee,0,0,0,0,this.context.getRequestOptionsForCall(i))}async hashDirectory(t){return async function(){throw new Error("Hashing directories is not supported in browsers!")}()}}const mr="peers";class br{constructor(t){this.context=t}async checkConnection(e){return async function(e){await t(e,{url:"",responseType:"text"})}(this.context.getRequestOptionsForCall(e))}async isConnected(t){try{await this.checkConnection(t)}catch{return!1}return!0}async isGateway(e){try{return await async function(e){const n=await t(e,{url:"/gateway"});return Y.parse(n.data).gateway}(this.context.getRequestOptionsForCall(e))}catch{return!1}}async getNodeAddresses(e){return async function(e){const n=await t(e,{url:"addresses",responseType:"json"});return _.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getBlocklist(e){return async function(e){const n=await t(e,{url:"blocklist",responseType:"json"});return Q.parse(n.data).peers}(this.context.getRequestOptionsForCall(e))}async getPeers(e){return async function(e){const n=await t(e,{url:mr,responseType:"json"});return X.parse(n.data).peers}(this.context.getRequestOptionsForCall(e))}async removePeer(e,n){const r=new B(e);return async function(e,n){return(await t(e,{url:`${mr}/${n}`,responseType:"json",method:"DELETE"})).data}(this.context.getRequestOptionsForCall(n),r)}async getTopology(e){return async function(e){const n=await t(e,{url:"topology",responseType:"json"});return tt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async ping(e,n){const r=new B(e);return async function(e,n){return(await t(e,{url:`pingpong/${n}`,responseType:"json",method:"POST"})).data}(this.context.getRequestOptionsForCall(n),r)}}const vr="bytes";async function Sr(e,n,r,i){const a=await t(e,{url:vr,method:"post",responseType:"json",data:n,headers:{"content-type":"application/octet-stream",...jn(r,i)}});return{reference:S.parse(a.data).reference,tagUid:a.headers["swarm-tag"]?k(a.headers["swarm-tag"]):void 0,historyAddress:a.headers["swarm-act-history-address"]?s.Optional.of(new m(a.headers["swarm-act-history-address"])):s.Optional.empty()}}async function kr(e,n,r){r&&(r=W.parse(r));const i=await t(e,{responseType:"arraybuffer",url:`${vr}/${n}`,headers:jn(null,r)});return new A(i.data)}const xr="stewardship";class Ir{constructor(t){this.raw=t}toString(){const t=nt().safeParse(this.raw);return t.success&&t.data.includes(".eth")?t.data:new m(this.raw).toHex()}}class Ar{constructor(t){this.context=t}async upload(t,e,n,r){const i=new p(t);return rt(e),n&&(n=it.parse(n)),Sr(this.context.getRequestOptionsForCall(r),e,i,n)}async download(t,e,n){return e&&(e=W.parse(e)),kr(this.context.getRequestOptionsForCall(n),new Ir(t),e)}async downloadReadable(e,n,r){return n&&(n=W.parse(n)),async function(e,n,r){return r&&(r=W.parse(r)),(await t(e,{responseType:"stream",url:`${vr}/${n}`,headers:jn(null,r)})).data}(this.context.getRequestOptionsForCall(r),new Ir(e),n)}async probe(e,n){const r=new m(e);return async function(e,n){const r=await t(e,{url:`${vr}/${n}`,method:"head",responseType:"json"});return{contentLength:parseInt(r.headers["content-length"])}}(this.context.getRequestOptionsForCall(n),r)}async isRetrievable(e,n){const r=new m(e);return async function(e,n){const r=await t(e,{method:"get",responseType:"json",url:`${xr}/${n}`});return et.parse(r.data).isRetrievable}(this.context.getRequestOptionsForCall(n),r)}}const Cr="feeds";function Ur(t){const e=t["swarm-feed-index"],n=t["swarm-feed-index-next"];if(!e)throw new v("Response did not contain expected swarm-feed-index!");if(!n)throw new v("Response did not contain expected swarm-feed-index-next!");return{feedIndex:new st(e),feedIndexNext:new st(n)}}async function Pr(e,n,r,i){const s=await t(e,{responseType:"arraybuffer",url:`${Cr}/${n}/${r}`,params:{...i}});return{payload:new A(s.data),...Ur(s.headers)}}function Er(t,e){return e="number"==typeof e?st.fromBigInt(BigInt(e)):e,new x(at(A.concat(t.toUint8Array(),e.toUint8Array())))}async function $r(t,e,n){try{const r=await Pr(t,e,n);if(!r.feedIndexNext)throw Error("Feed index next is not defined. This should happen when fetching an exact index.");return r.feedIndexNext}catch(t){if(t instanceof lt)return st.fromBigInt(0n);throw t}}async function Dr(t,e,n,r,i,s){const a=Er(n,s?.index??await $r(t,e.publicKey().address(),n));if(r.length>4096){const n=await Sr(t,r,i,s);return async function(t,e,n,r,i,s){return e=new I(e),r=new x(r),Vn(t,i.toSingleOwnerChunk(r,e),n,s)}(t,e,i,a,dt(await zn(t,n.reference)),s)}const o=nt().safeParse(r);return Jn(t,e,i,a,o.success?A.fromUtf8(o.data).toUint8Array():r,s)}function Br(t,e,n){const r=Er(e,n);return new m(at(A.concat(r.toUint8Array(),t.toUint8Array())))}async function Tr(t,e,n,r,i=!1){const a=Br(e,n,r="number"==typeof r?st.fromBigInt(BigInt(r)):r),o=Gn(await zn(t,a.toHex()),a);let c=s.Optional.empty();if(i){const t=A.fromSlice(o.payload.toUint8Array(),0,8);c=s.Optional.of(Number(ot(t.toUint8Array(),"BE")))}return{timestamp:c,payload:new A(o.payload.offset(i?8:0))}}async function Or(t,e,n,r){const i=Br(e,n,r="number"==typeof r?st.fromBigInt(BigInt(r)):r),s=Gn(await zn(t,i),i);return E(s.payload,s.span)}function Mr(e,n,r){const i=async t=>{if(void 0===t?.index)return Pr(e,r,n);const i=await Tr(e,r,n,t.index,t.hasTimestamp??!0),s="number"==typeof t.index?st.fromBigInt(BigInt(t.index)):t.index;return{payload:i.payload,feedIndex:s,feedIndexNext:s.next()}};return{download:i,downloadPayload:async t=>{if(void 0===t?.index)return Pr(e,r,n);const i=await Or(e,r,n,t.index),s=i.span.toBigInt()<=4096n?i.payload:await kr(e,new Ir(i.address)),a="number"==typeof t.index?st.fromBigInt(BigInt(t.index)):t.index;return{payload:s,feedIndex:a,feedIndexNext:a.next()}},downloadReference:async s=>{let a=s?.index;void 0===a&&(a=(await async function(e,n,r){return Ur((await t(e,{responseType:"arraybuffer",url:`${Cr}/${n}/${r}`,params:{"Swarm-Only-Root-Chunk":!0}})).headers)}(e,r,n)).feedIndex);const o=await i({...s,index:a});return{reference:new m(o.payload.toUint8Array()),feedIndex:o.feedIndex,feedIndexNext:o.feedIndexNext??o.feedIndex.next()}},owner:r,topic:n}}function Rr(t,e,n){const r=async(r,i,s)=>async function(t,e,n,r,i,s){r=new m(r);const a=Er(n,s?.index??await $r(t,e.publicKey().address(),n)),o=s?.at??Date.now()/1e3,c=ut(BigInt(Math.floor(o)),"BE");return Jn(t,e,i,a,A.concat(c,r.toUint8Array()),s)}(t,n,e,i,r,s);return{...Mr(t,e,n.publicKey().address()),upload:r,uploadReference:r,uploadPayload:async(r,i,s)=>Dr(t,n,e,i,r,s)}}async function Fr(t,e,n,r,i,a){const o=function(t,e,n){const r=n.toBigInt(),i=[];for(let n=0n;n<=r;n++)i.push(Br(t,e,st.fromBigInt(n)));return i}(e,n,r).map(async e=>async function(t,e,n,r){try{return await t.chunk.download(e,n,r),!0}catch(t){const e=s.Objects.getDeep(t,"status");if(404===e||500===e)return!1;throw t}}(t,e,i,a));return(await Promise.all(o)).every(t=>t)}class qr{constructor(t){this.context=t}makeReader(t,e,n){return Mr(this.context.getRequestOptionsForCall(n),new ht(t),new r(e))}makeWriter(t,e,n){const r=e?new I(e):this.context.signer;if(!r)throw Error("No signer provided");return Rr(this.context.getRequestOptionsForCall(n),new ht(t),r)}async createManifest(e,n,i,s,a){const o=new p(e),c=new ht(n),d=new r(i);return s&&(s=K.parse(s)),async function(e,n,r,i,s){const a=await t(e,{method:"post",responseType:"json",url:`${Cr}/${n}/${r}`,headers:jn(i,s)});return S.parse(a.data).reference}(this.context.getRequestOptionsForCall(a),d,c,o,s)}async fetchLatestUpdate(t,e,n){return Pr(this.context.getRequestOptionsForCall(n),new r(e),new ht(t))}async isRetrievable(t,e,n,i,a){const o=new r(t),c=new ht(e);if(i&&(i=W.parse(i)),!n)try{return await this.makeReader(c,o,a).download(),!0}catch(t){const e=s.Objects.getDeep(t,"status");if(404===e||500===e)return!1;throw t}return Fr(this.context.bee,o,c,n,i,this.context.getRequestOptionsForCall(a))}}class Lr{constructor(t){this.context=t}async upload(t,e,n,r,i){const s=new p(t);if(pt(e),r&&(r=ft.parse(r)),n&&"string"!=typeof n)throw new TypeError("name has to be string or undefined!");if(yt(e)){const t=await J(e),a=n??e.name,o=e.type,c={...r,contentType:o};return yr(this.context.getRequestOptionsForCall(i),t,s,a,c)}return yr(this.context.getRequestOptionsForCall(i),e,s,n,r)}async download(e,n="",r,i){return r&&(r=W.parse(r)),async function(e,n,r="",i){const s=await t(e,{method:"GET",responseType:"arraybuffer",url:`${fr}/${n}/${r}`,headers:jn(null,i)});return{...Hn(s.headers),data:new A(s.data)}}(this.context.getRequestOptionsForCall(i),new Ir(e),n,r)}async downloadReadable(e,n="",r,i){const s=new m(e);return r&&(r=W.parse(r)),async function(e,n,r="",i){n=new m(n);const s=await t(e,{method:"GET",responseType:"stream",url:`${fr}/${n}/${r}`,headers:jn(null,i)});return{...Hn(s.headers),data:s.data}}(this.context.getRequestOptionsForCall(i),s,n,r)}}const Kr="grantee";class Nr{constructor(t){this.context=t}async create(e,n,r){const i=new p(e),s=n.map(t=>new g(t));return async function(e,n,r){const i=await t(e,{method:"post",url:Kr,data:{grantees:r.map(t=>t.toCompressedHex())},headers:jn(n),responseType:"json"}),s=wt.parse(i.data);return{status:i.status,statusText:i.statusText,ref:s.ref,historyref:s.historyref}}(this.context.getRequestOptionsForCall(r),i,s)}async get(e,n){const r=new m(e);return async function(e,n){const r=await t(e,{method:"get",url:`${Kr}/${n}`,responseType:"json"});return{status:r.status,statusText:r.statusText,grantees:gt.parse(r.data)}}(this.context.getRequestOptionsForCall(n),r)}async patch(e,n,r,i,s){const a=new p(e),o=new m(n),c=new m(r),d={add:i.add?.map(t=>new g(t))??[],revoke:i.revoke?.map(t=>new g(t))??[]};return async function(e,n,r,i,s){const a=await t(e,{method:"patch",url:`${Kr}/${r}`,data:{add:s.add.map(t=>t.toCompressedHex()),revoke:s.revoke.map(t=>t.toCompressedHex())},headers:{...jn(n),"swarm-act-history-address":i.toHex()},responseType:"json"}),o=wt.parse(a.data);return{status:a.status,statusText:a.statusText,ref:o.ref,historyref:o.historyref}}(this.context.getRequestOptionsForCall(s),a,o,c,d)}}async function Hr(t){if("string"==typeof t)return(new TextEncoder).encode(t);if(t instanceof ArrayBuffer)return new Uint8Array(t);if(t instanceof Blob)return new Uint8Array(await new Response(t).arrayBuffer());throw new TypeError("unknown websocket data type")}class jr{constructor(t){this.context=t,this.cancelled=new WeakSet}async pssSend(e,n,r,i,s,a){const o=new p(e);rt(i);const c=s?new g(s):void 0;await async function(e,n,r,i,s,a){await t(e,{method:"post",url:`pss/send/${r}/${i}`,data:s,responseType:"json",params:{recipient:a},headers:jn(n)})}(this.context.getRequestOptionsForCall(a),o,n,r,i,c)}pssSubscribe(t,e){e=mt.parse(e);const n=this.openWebSocket(`pss/subscribe/${t.toHex()}`),r={topic:t,cancel:this.makeCancel(n)};return n.onmessage=async t=>{const n=await Hr(t.data);n.length&&e.onMessage(new A(n),r)},n.onerror=t=>{this.isCancelled(n)||e.onError(new v(t.message),r)},n.onclose=()=>{e.onClose(r)},r}async pssReceive(t,e=0){if("number"!=typeof e)throw new TypeError("timeoutMsc parameter has to be a number!");return new Promise((n,r)=>{let i;const s=this.pssSubscribe(t,{onError:t=>{clearTimeout(i),s.cancel(),r(t.message)},onMessage:t=>{clearTimeout(i),s.cancel(),n(t)},onClose:()=>{clearTimeout(i),s.cancel()}});e>0&&(i=setTimeout(()=>{s.cancel(),r(new v("pssReceive timeout"))},e))})}gsocMine(t,e,n=12){const r=new B(t),i=new x(e);for(let t=0n;t<0xffffn;t++){const e=new I(bt(2867n+t)),a=P(i,e.publicKey().address());if(256-s.Binary.proximity(a.toUint8Array(),r.toUint8Array())<=256-n)return e}throw Error("Could not mine a valid signer")}async gsocSend(t,e,n,r,i,s){const a=new p(t),o=new I(e),c=new x(n),d=E(r).toSingleOwnerChunk(c,o);return Vn(this.context.getRequestOptionsForCall(s),d,a,i)}gsocSubscribe(t,e,n){const i=new r(t),s=new x(e);n=vt.parse(n);const a=P(s,i),o=this.openWebSocket(`gsoc/subscribe/${a.toHex()}`),c={address:i,cancel:this.makeCancel(o)};return o.onmessage=async t=>{const e=await Hr(t.data);e.length&&n.onMessage(new A(e),c)},o.onerror=t=>{this.isCancelled(o)||n.onError(new v(t.message),c)},o.onclose=()=>{n.onClose(c)},c}openWebSocket(t){const e=this.context.url.replace(/^http/i,"ws");return"browser"===s.System.whereAmI()?new St(`${e}/${t}`):new St(`${e}/${t}`,{headers:this.context.getRequestOptionsForCall().headers})}makeCancel(t){return()=>{this.cancelled.has(t)||(this.cancelled.add(t),t.terminate?t.terminate():t.close())}}isCancelled(t){return this.cancelled.has(t)}}const Wr="pins";class zr{constructor(t){this.context=t}async add(e,n){const r=new m(e);await async function(e,n){await t(e,{method:"post",responseType:"json",url:`${Wr}/${n}`})}(this.context.getRequestOptionsForCall(n),r)}async remove(e,n){const r=new m(e);await async function(e,n){await t(e,{method:"delete",responseType:"json",url:`${Wr}/${n}`})}(this.context.getRequestOptionsForCall(n),r)}async getAll(e){return async function(e){const n=await t(e,{method:"get",responseType:"json",url:Wr}),{references:r}=kt.parse(n.data);return(r??[]).map(t=>new m(t))}(this.context.getRequestOptionsForCall(e))}async get(e,n){const r=new m(e);return async function(e,n){const r=await t(e,{method:"get",responseType:"json",url:`${Wr}/${n}`});return S.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async reuploadData(e,n,r){const i=new p(e),s=new m(n);await async function(e,n,r){await t(e,{method:"put",url:`${xr}/${r}`,headers:{"swarm-postage-batch-id":n.toHex()}})}(this.context.getRequestOptionsForCall(r),i,s)}}const Gr="settlements";class Vr{constructor(t){this.context=t}async get(e,n){const r=new B(e);return async function(e,n){const r=await t(e,{url:`${Gr}/${n}`,responseType:"json"});return xt.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getAll(e){return async function(e){const n=await t(e,{url:Gr,responseType:"json"});return It.parse(n.data)}(this.context.getRequestOptionsForCall(e))}}class Jr{constructor(t){this.context=t}makeReader(t,e){const n=new r(t);return{owner:n,download:Zn.bind(null,this.context.getRequestOptionsForCall(e),n)}}makeWriter(t,e){const n=t?new I(t):this.context.signer;if(!n)throw Error("No signer provided");return{...this.makeReader(n.publicKey().address(),e),upload:Jn.bind(null,this.context.getRequestOptionsForCall(e),n)}}}const Zr="stake";class Yr{constructor(t){this.context=t}async get(e){return async function(e){const n=await t(e,{method:"get",responseType:"json",url:Zr});return At.parse(n.data).stakedAmount}(this.context.getRequestOptionsForCall(e))}async getWithdrawable(e){return async function(e){const n=await t(e,{method:"get",responseType:"json",url:`${Zr}/withdrawable`});return Ct.parse(n.data).withdrawableAmount}(this.context.getRequestOptionsForCall(e))}async deposit(e,n,r){const i=e instanceof d?e.toPLURString():a(e,{min:1n,name:"amount"});return n&&(n=L.parse(n)),async function(e,n,r){const i=await t(e,{method:"post",responseType:"json",url:`${Zr}/${n}`,headers:jn(null,r)});return Ut.parse(i.data).txHash}(this.context.getRequestOptionsForCall(r),i,n)}async withdrawSurplus(e){return async function(e){const n=await t(e,{method:"delete",responseType:"json",url:`${Zr}/withdrawable`});return Ut.parse(n.data).txHash}(this.context.getRequestOptionsForCall(e))}async migrate(e){return async function(e){const n=await t(e,{method:"delete",responseType:"json",url:Zr});return Ut.parse(n.data).txHash}(this.context.getRequestOptionsForCall(e))}async getRedistributionState(e){return async function(e){const n=await t(e,{method:"get",responseType:"json",url:"redistributionstate"});return Pt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}}const _r="stamps";const Qr="batches";class Xr{constructor(t){this.context=t}async create(e,n,r,i){const s=a(e,{min:0n,name:"amount"});if(r&&(r=Mt.parse(r)),n<Rt||n>Ft)throw new H(`Depth has to be between ${Rt}..${Ft}`,n);const o=await this.context.bee.status.getChainState(),c=17280n*BigInt(o.currentPrice)+1n;if(BigInt(s)<c)throw new H(`Amount has to be at least ${c} (1 day at current price ${o.currentPrice})`,s);const d=await async function(e,n,r,i,s,a){const o={};s&&(o["gas-price"]=s),void 0!==a&&(o.immutable=String(a));const c=await t(e,{method:"post",url:`${_r}/${n}/${r}`,responseType:"json",params:{label:i},headers:o});return Et.parse(c.data).batchID}(this.context.getRequestOptionsForCall(i),s,n,r?.label,r?.gasPrice?.toString(),r?.immutableFlag);return!1!==r?.waitForUsable&&await this.waitForUsable(d,r?.waitForUsableTimeout),d}async updateLabel(e,n,r){const i=new p(e);await async function(e,n,r){await t(e,{method:"patch",url:`${_r}/${n}`,responseType:"json",data:{label:r}})}(this.context.getRequestOptionsForCall(r),i,n)}async calculateTopUpForBZZ(t,e,n){const r=await this.context.bee.status.getChainState(n),i="gnosis"===this.context.network?5:15,s=e.toPLURBigInt()/2n**BigInt(t),c=function(t,e,n){const r=BigInt(a(t));return o.fromSeconds(Number(r*BigInt(n)/BigInt(e)))}(s,r.currentPrice,i);return{amount:s,duration:c}}async topUp(e,n,r){const i=new p(e),s=a(n,{min:1n,name:"amount"});return async function(e,n,r){const i=await t(e,{method:"patch",url:`${_r}/topup/${n}/${r}`,responseType:"json"});return Et.parse(i.data).batchID}(this.context.getRequestOptionsForCall(r),i,s)}async dilute(e,n,r){const i=new p(e),s=qt().int().min(18).max(255).parse(n);return async function(e,n,r){const i=await t(e,{method:"patch",url:`${_r}/dilute/${n}/${r}`,responseType:"json"});return Et.parse(i.data).batchID}(this.context.getRequestOptionsForCall(r),i,s)}async get(e,n,r,i){const s=new p(e);return async function(e,n,r,i){const s=await t(e,{method:"get",url:`${_r}/${n}`,responseType:"json"});return Nn($t.parse(s.data),r,i)}(this.context.getRequestOptionsForCall(n),s,r,i)}async getGlobal(e,n){const r=new p(e);return async function(e,n){const r=await t(e,{method:"get",url:`${Qr}/${n}`,responseType:"json"});return Tt.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getBuckets(e,n){const r=new p(e);return async function(e,n){const r=await t(e,{method:"get",url:`${_r}/${n}/buckets`,responseType:"json"});return Dt.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async getAll(e){return async function(e){const n=await t(e,{method:"get",url:_r,responseType:"json"});return Bt.parse(n.data).stamps.map(t=>Nn(t))}(this.context.getRequestOptionsForCall(e))}async getAllGlobal(e){return async function(e){const n=await t(e,{method:"get",url:Qr,responseType:"json"});return Ot.parse(n.data).batches}(this.context.getRequestOptionsForCall(e))}async waitForUsable(t,e=24e4){for(let n=0;n<e;n+=3e3){try{if((await this.get(t)).usable)return}catch{}await s.System.sleepMillis(3e3)}throw new v("Timeout on waiting for postage stamp to become usable")}}class ti{constructor(t){this.context=t}async get(e){return async function(e){const n=await t(e,{method:"get",url:"status",responseType:"json"});return Lt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getHealth(e){return async function(e){const n=await t(e,{method:"get",url:"health",responseType:"json"});return Kt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getReadiness(e){return async function(e){const n=await t(e,{method:"get",url:"readiness"});return Nt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getNodeInfo(e){return async function(e){const n=await t(e,{method:"get",url:"node",responseType:"json"});return Ht.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async isSupportedExactVersion(t){const{version:e}=await this.getHealth(t);return e===zt}async isSupportedApiVersion(t){const{apiVersion:e}=await this.getHealth(t);return Gt(e)===Gt(Vt)}async getVersions(t){const{version:e,apiVersion:n}=await this.getHealth(t);return{supportedBeeVersion:zt,supportedBeeApiVersion:Vt,beeVersion:e,beeApiVersion:n}}async getReserveState(e){return async function(e){const n=await t(e,{method:"get",url:"reservestate",responseType:"json"});return jt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getChainState(e){return async function(e){const n=await t(e,{method:"get",url:"chainstate",responseType:"json"});return Wt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}}class ei{constructor(t){this.context=t}get blockTime(){return"gnosis"===this.context.network?5:15}async buy(t,e,n,r,i,s){const a=Ln(e,(await this.context.bee.status.getChainState(r)).currentPrice,this.blockTime),o=Kn(t,i,s);return n&&(n=Mt.parse(n)),this.context.bee.stamp.create(a,o,n,r)}async getCost(t,e,n,r,i){const s=Ln(e,(await this.context.bee.status.getChainState(n)).currentPrice,this.blockTime);return qn(Kn(t,r,i),s)}async extend(t,e,n,r,i,s){const a=await this.context.bee.stamp.get(t,r),o=Kn(e,i,s),c=await this.context.bee.status.getChainState(r),d=o-a.depth,u=d<=0?1n:2n**BigInt(d),l=Ln(n,c.currentPrice,this.blockTime),h=Ln(a.duration,c.currentPrice,this.blockTime),p=(n.isZero()?h*u:(h+l)*u)-h;let f;if(p>0n&&(f=await this.context.bee.stamp.topUp(a.batchID,p,r)),d>0)return this.context.bee.stamp.dilute(a.batchID,o,r);if(!f)throw new Error("Nothing to extend, both size and duration are already sufficient");return f}async extendSize(t,e,n,r,i){const s=await this.context.bee.status.getChainState(n),a=await this.context.bee.stamp.get(t,n),o=Kn(e,r,i),c=o-a.depth;if(c<=0)throw new H("New depth has to be greater than the original depth",o);const d=Ln(a.duration,s.currentPrice,this.blockTime);return await this.context.bee.stamp.topUp(a.batchID,d*(2n**BigInt(c)-1n)+1n,n),this.context.bee.stamp.dilute(a.batchID,o,n)}async extendDuration(t,e,n){const r=await this.context.bee.stamp.get(t,n),i=Ln(e,(await this.context.bee.status.getChainState(n)).currentPrice,this.blockTime);return this.context.bee.stamp.topUp(r.batchID,i,n)}async getExtensionCost(t,e,n,r,i,s){const a=await this.context.bee.stamp.get(t,r),o=await this.context.bee.status.getChainState(r),c=n.isZero()?0n:Ln(n,o.currentPrice,this.blockTime),d=Kn(e,i,s),u=Ln(a.duration,o.currentPrice,this.blockTime),l=qn(a.depth,u);return qn(Math.max(a.depth,d),u+c).minus(l)}async getSizeExtensionCost(t,e,n,r,i){const s=await this.context.bee.stamp.get(t,n),a=await this.context.bee.status.getChainState(n),o=Kn(e,r,i);if(o-s.depth<=0)throw new H("New depth has to be greater than the original depth",o);const c=Ln(s.duration,a.currentPrice,this.blockTime),d=qn(s.depth,c);return qn(o,c).minus(d)}async getDurationExtensionCost(t,e,n){const r=await this.context.bee.stamp.get(t,n),i=Ln(e,(await this.context.bee.status.getChainState(n)).currentPrice,this.blockTime);return qn(r.depth,i)}async rename(t,e,n){return this.context.bee.stamp.updateLabel(t,e,n)}}const ni="tags";class ri{constructor(t){this.context=t}async create(e){return async function(e){const n=await t(e,{method:"post",url:ni,responseType:"json"});return Jt.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async getAll(e,n){return e&&(e=Yt.parse(e)),async function(e,n){const r=await t(e,{url:ni,params:{offset:n?.offset,limit:n?.limit},responseType:"json"});return Zt.parse(r.data).tags}(this.context.getRequestOptionsForCall(n),e)}async get(e,n){const r=k(e);return async function(e,n){const r=await t(e,{url:`${ni}/${n}`,responseType:"json"});return Jt.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async delete(e,n){const r=k(e);await async function(e,n){await t(e,{method:"delete",url:`${ni}/${n}`})}(this.context.getRequestOptionsForCall(n),r)}async update(e,n,r){const i=new m(n),s=k(e);await async function(e,n,r){await t(e,{method:"patch",url:`${ni}/${n}`,data:{reference:r}})}(this.context.getRequestOptionsForCall(r),s,i)}}const ii="transactions";class si{constructor(t){this.context=t}async getAll(e){return async function(e){const n=await t(e,{url:ii,responseType:"json"});return _t.parse(n.data).pendingTransactions}(this.context.getRequestOptionsForCall(e))}async get(e,n){const r=new te(e);return async function(e,n){const r=await t(e,{url:`${ii}/${n}`,responseType:"json"});return Qt.parse(r.data)}(this.context.getRequestOptionsForCall(n),r)}async rebroadcast(e,n){const r=new te(e);return async function(e,n){const r=await t(e,{method:"post",url:`${ii}/${n}`,responseType:"json"});return Xt.parse(r.data).transactionHash}(this.context.getRequestOptionsForCall(n),r)}async cancel(e,n,r){const i=new te(e),s=n?a(n,{min:0n,name:"gasPrice"}):void 0;return async function(e,n,r){const i={};r&&(i["gas-price"]=r);const s=await t(e,{method:"delete",headers:i,url:`${ii}/${n}`,responseType:"json"});return Xt.parse(s.data).transactionHash}(this.context.getRequestOptionsForCall(r),i,s)}}const ai="wallet";class oi{constructor(t){this.context=t}async getBalance(e){return async function(e){const n=await t(e,{method:"get",url:ai,responseType:"json"});return ee.parse(n.data)}(this.context.getRequestOptionsForCall(e))}async withdrawBZZ(e,n,i){const s=e instanceof d?e:d.fromPLUR(e),a=new r(n);return async function(e,n,r){const i=await t(e,{method:"post",url:`${ai}/withdraw/bzz`,responseType:"json",params:{amount:n.toPLURString(),address:r.toHex()}});return ne.parse(i.data).transactionHash}(this.context.getRequestOptionsForCall(i),s,a)}async withdrawDAI(e,n,i){const s=e instanceof re?e:re.fromWei(e),a=new r(n);return async function(e,n,r){const i=await t(e,{method:"post",url:`${ai}/withdraw/nativetoken`,responseType:"json",params:{amount:n.toWeiString(),address:r.toHex()}});return ne.parse(i.data).transactionHash}(this.context.getRequestOptionsForCall(i),s,a)}}const ci=["1","7","9","11","13","15","17","19","20","21","22","23","25","37","42","43","53","69","77","79","87","95","101","102","103","104","109","110","111","113","115","117","119","123","135","137","139","143","161","179","389","427","465","512","513","514","515","526","530","531","532","540","548","554","556","563","587","601","636","989","990","993","995","1719","1720","1723","2049","3659","4045","4190","5060","5061","6000","6566","6665","6666","6667","6668","6669","6679","6697","10080"];function di(t){if(!function(t){try{if("string"!=typeof t)return!1;const e=new URL(t);return"http:"===e.protocol||"https:"===e.protocol}catch(t){return!1}}(t))throw new H("URL is not valid!",t);const e=new URL(t).port;if(e&&!function(t){if("string"!=typeof t)return!1;if(ci.includes(t))return!1;const e=parseInt(t,10);return e>0&&e<65536&&!isNaN(e)}(e))throw new H("Port in URL is considered bad port and cannot be used!",e)}class ui{constructor(t,e){di(t),this.url=function(t){return t.endsWith("/")?t.slice(0,-1):t}(t),e?.signer&&(this.signer=new I(e.signer)),this.network=e?.network??"gnosis",this.requestOptions={baseURL:this.url,timeout:e?.timeout??0,headers:e?.headers,onRequest:e?.onRequest,httpAgent:e?.httpAgent,httpsAgent:e?.httpsAgent};const n={getRequestOptionsForCall:t=>this.getRequestOptionsForCall(t),url:this.url,signer:this.signer,network:this.network,bee:this};this.balance=new Qn(n),this.settlement=new Vr(n),this.transaction=new si(n),this.stake=new Yr(n),this.connectivity=new br(n),this.status=new ti(n),this.wallet=new oi(n),this.stamp=new Xr(n),this.storage=new ei(n),this.chequebook=new er(n),this.cheque=new tr(n),this.tag=new ri(n),this.pin=new zr(n),this.grantee=new Nr(n),this.messaging=new jr(n),this.feed=new qr(n),this.soc=new Jr(n),this.data=new Ar(n),this.chunk=new nr(n),this.file=new Lr(n),this.collection=new gr(n)}makeContentAddressedChunk(t,e){return E(t,e)}unmarshalContentAddressedChunk(t){return dt(t)}makeSingleOwnerChunk(t,e,n,r,i){return function(t,e,n,r,i){r=new x(r),i=new I(i);const s={data:A.concat(e.toUint8Array(),n.toUint8Array()),span:e,payload:n,address:t};return C(s,r,i.toBigInt())}(t,e,n,r,i)}calculateSingleOwnerChunkAddress(t,e){return P(t,e)}unmarshalSingleOwnerChunk(t,e){return Gn(t,e)}async createEnvelope(i,s,a){return i=new p(i),s=new m(s),async function(i,s,a){const o=await t(i,{method:"post",responseType:"json",url:`envelope/${a}`,headers:{"swarm-postage-batch-id":s.toHex()}}),c=e.parse(o.data);return{issuer:new r(c.issuer),index:c.index,timestamp:c.timestamp,signature:new n(c.signature),batchId:s}}(this.getRequestOptionsForCall(a),i,s)}async rchash(e,n,r,s){return async function(e,n,r,s){const a=await t(e,{responseType:"json",url:`rchash/${n}/${r}/${s}`});return i.parse(a.data).durationSeconds}(this.getRequestOptionsForCall(s),e,n,r)}getRequestOptionsForCall(t){return t&&(t=ie.parse(t)),t?s.Objects.deepMerge2(this.requestOptions,t):this.requestOptions}}const li=4096;function hi(t){if(0===t.length)return[new Uint8Array(0)];const e=[];for(let n=0;n<t.length;n+=li)e.push(t.slice(n,Math.min(n+li,t.length)));return e}const pi=se.omit({appSecret:!0,connectedUntil:!0,chatBinding:!0}),fi=ae({type:ce("account-delta"),snapshot:oe.extend({connectedApps:de(pi)})}),yi=ue().min(1).max(100),wi=ue().regex(/^[0-9a-f]{8}$/),gi=he("type",[pe,fi,ae({type:ce("lease-request"),accountId:ue().length(40),batchId:ue().length(64),fromDeviceId:yi,requestId:wi}),ae({type:ce("lease-claim"),accountId:ue().length(40),batchId:ue().length(64),fromDeviceId:yi,requestId:wi}),ae({type:ce("lease-released"),accountId:ue().length(40),batchId:ue().length(64),partition:le().int().min(0),fromDeviceId:yi,requestId:wi.optional()}),ae({type:ce("presence"),accountId:ue().length(40),fromDeviceId:yi})]);class mi{constructor(t){this.local=!0,this.handlers=new Set,this.channelName=function(t){return`swarm-id-bus-v1:${t}`}(t),this.channel=new BroadcastChannel(this.channelName),this.channel.onmessage=t=>{for(const e of this.handlers)e(t.data)}}publish(t){this.channel.postMessage(t)}subscribe(t){return this.handlers.add(t),()=>this.handlers.delete(t)}close(){this.handlers.clear(),this.channel.close()}}class bi{constructor(t){this.handlers=new Set,this.peerLeftHandlers=new Set,this.closed=!1,this.transports=t,this.transportUnsubscribers=t.flatMap(t=>this.listenTo(t))}listenTo(t){const e=[t.subscribe((t,e)=>this.dispatch(t,e))],n=t.onPeerLeft?.(t=>{for(const e of this.peerLeftHandlers)try{e(t)}catch(t){console.error("[AccountBus] Peer-left handler error:",t)}});return n&&e.push(n),e}publish(t,e){if(!this.closed)for(const n of this.transports)e?.localOnly&&!n.local||n.publish(t)}addTransport(t){if(this.closed)return t.close(),()=>{};this.transports.push(t);const e=this.listenTo(t);return this.transportUnsubscribers.push(...e),()=>{for(const t of e)t();t.close(),this.transports=this.transports.filter(e=>e!==t),this.transportUnsubscribers=this.transportUnsubscribers.filter(t=>!e.includes(t))}}subscribe(t){return this.handlers.add(t),()=>this.handlers.delete(t)}onPeerLeft(t){return this.peerLeftHandlers.add(t),()=>this.peerLeftHandlers.delete(t)}close(){this.closed=!0;for(const t of this.transportUnsubscribers)t();this.transportUnsubscribers=[],this.handlers.clear(),this.peerLeftHandlers.clear();for(const t of this.transports)t.close();this.transports=[]}dispatch(t,e){const n=gi.safeParse(t);if(n.success)for(const t of this.handlers)try{t(n.data,e)}catch(t){console.error("[AccountBus] Handler error:",t)}}}const vi=ae({version:le().int().nonnegative(),data:fe()});class Si{getItem(t){if("undefined"!=typeof window&&window.localStorage)return window.localStorage.getItem(t)??void 0}setItem(t,e){"undefined"!=typeof window&&window.localStorage&&window.localStorage.setItem(t,e)}removeItem(t){"undefined"!=typeof window&&window.localStorage&&window.localStorage.removeItem(t)}}const ki="swarm-id-storage-write",xi=new Map;class Ii{constructor(t){this.listeners=new Set,this.options=t}subscribe(t){return this.listeners.add(t),this.boundStorageHandler||this.setupStorageEventListener(),()=>{this.listeners.delete(t),0===this.listeners.size&&this.cleanupStorageEventListener()}}setupStorageEventListener(){"undefined"!=typeof window&&(this.boundStorageHandler=t=>{t.key===this.options.key&&this.reloadAndNotify()},window.addEventListener("storage",this.boundStorageHandler),this.boundSameWindowHandler=t=>{const e=t.detail;e&&e.key===this.options.key&&e.source!==this&&this.reloadAndNotify(e.noRepublish?{noRepublish:!0}:void 0)},window.addEventListener(ki,this.boundSameWindowHandler))}cleanupStorageEventListener(){"undefined"!=typeof window&&(this.boundStorageHandler&&(window.removeEventListener("storage",this.boundStorageHandler),this.boundStorageHandler=void 0),this.boundSameWindowHandler&&(window.removeEventListener(ki,this.boundSameWindowHandler),this.boundSameWindowHandler=void 0))}notifySameWindow(t){"undefined"!=typeof window&&window.dispatchEvent(new CustomEvent(ki,{detail:{key:this.options.key,source:this,noRepublish:t}}))}reloadAndNotify(t){this.options.sealing?this.prime().then(()=>this.notifyListeners(this.load(),t)):this.notifyListeners(this.load(),t)}notifyListeners(t,e){for(const n of this.listeners)try{n(t,e)}catch(t){console.error(`[${this.options.loggerName??"Storage"}] Listener error:`,t)}}load(){const t=this.options.storage.getItem(this.options.key);if(!t)return[];try{const e=JSON.parse(t);return this.parse(e)}catch(t){return console.error(`[${this.options.loggerName??"Storage"}] Load failed:`,t),[]}}parse(t){const e=vi.safeParse(t),n=e.success?e.data.version:0,r=e.success?e.data.data:t,i=this.options.sealing?this.options.sealing.open(r):r,s=this.options.parsers[n];return s?s(i,n):(console.error(`[${this.options.loggerName??"Storage"}] No parser for version ${n}`),[])}async prime(){const t=this.options.sealing;if(t)try{const e=this.storedData();if(void 0===e)return;await t.prime(e)}catch(t){console.error(`[${this.options.loggerName??"Storage"}] Prime failed:`,t)}}storedData(){const t=this.options.storage.getItem(this.options.key);if(!t)return;const e=JSON.parse(t),n=vi.safeParse(e);return n.success?n.data.data:e}save(t,e){let n;try{n=this.serialize(t)}catch(t){return console.error(`[${this.options.loggerName??"Storage"}] Save failed:`,t),Promise.resolve()}if(!this.options.sealing){try{this.write(n,e)}catch(t){console.error(`[${this.options.loggerName??"Storage"}] Save failed:`,t)}return Promise.resolve()}return this.enqueue(async()=>{this.write(await this.seal(n),e)})}update(t,e){return this.enqueue(async()=>{await this.prime();const n=t(this.load());void 0!==n&&this.write(await this.seal(this.serialize(n)),e)})}clear(){const t=()=>{this.options.storage.removeItem(this.options.key),this.notifySameWindow()};return this.options.sealing?this.enqueue(async()=>t()):(t(),Promise.resolve())}serialize(t){return this.options.serializer?t.map(this.options.serializer):t}seal(t){return this.options.sealing?this.options.sealing.seal(t,this.storedData()):Promise.resolve(t)}write(t,e){const n={version:this.options.currentVersion,data:t};this.options.storage.setItem(this.options.key,JSON.stringify(n)),this.notifySameWindow(e?.noRepublish)}enqueue(t){const e=this.options.key,n=(xi.get(e)??Promise.resolve()).then(()=>async function(t,e){if("undefined"==typeof navigator||!navigator.locks)return e();let n=!1;try{await navigator.locks.request(`swarm-id-storage-write-${t}`,{mode:"exclusive"},()=>(n=!0,e()))}catch(t){if(n)throw t;await e()}}(e,t)),r=n.catch(t=>{console.error(`[${this.options.loggerName??"Storage"}] Save failed:`,t)});return xi.set(e,r),n}}const Ai="sealed:v1:",Ci="wrapping-keys",Ui="at-rest-v1";function Pi(){return new Promise((t,e)=>{let n=!1;const r=t=>{n||(n=!0,clearTimeout(i),e(t))},i=setTimeout(()=>r(new Error("IndexedDB open timed out")),1e4),s=indexedDB.open("swarm-id-keys",1);s.onupgradeneeded=()=>{s.result.objectStoreNames.contains(Ci)||s.result.createObjectStore(Ci)},s.onsuccess=()=>{n?s.result.close():(n=!0,clearTimeout(i),t(s.result))},s.onerror=()=>r(s.error),s.onblocked=()=>r(new Error("IndexedDB open was blocked"))})}function Ei(){return{async get(){const t=await Pi();try{const n=t.transaction(Ci,"readonly").objectStore(Ci);return await(e=n.get(Ui),new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error)}))}finally{t.close()}var e},async getOrAdd(t){const e=await Pi();try{return await new Promise((n,r)=>{const i=e.transaction(Ci,"readwrite"),s=i.objectStore(Ci);let a=t;const o=s.get(Ui);o.onsuccess=()=>{o.result?a=o.result:s.add(t,Ui)},i.oncomplete=()=>n(a),i.onerror=()=>r(i.error),i.onabort=()=>r(i.error)})}finally{e.close()}}}}function $i(){let t;return{get:async()=>t,getOrAdd:async e=>(t??(t=e),t)}}let Di,Bi;function Ti(){return Di??(Di=async function(){if("undefined"==typeof indexedDB)return{store:$i(),standsIn:!1};if(!indexedDB)return{store:$i(),standsIn:!0};try{return(await Pi()).close(),{store:Ei(),standsIn:!1}}catch{return{store:$i(),standsIn:!0}}}()),Di}function Oi(){return Bi??(Bi=(async()=>{const{store:t}=await Ti(),e=await t.get();if(e)return e;const n=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return t.getOrAdd(n)})()),Bi.catch(()=>{Bi=void 0}),Bi}const Mi=new Map,Ri=new Map,Fi=new Map;function qi(t){return"string"==typeof t&&t.startsWith(Ai)}async function Li(t){const e=Ri.get(t);if(e)return e;const n=await Oi(),r=crypto.getRandomValues(new Uint8Array(12)),i=new Uint8Array(await crypto.subtle.encrypt({name:"AES-GCM",iv:r},n,(new TextEncoder).encode(t))),s=`${Ai}${ye(r)}${ye(i)}`;return Ri.set(t,s),Mi.set(s,t),s}const Ki=new Set;async function Ni(t){let e;try{e=await Oi()}catch{return void Ki.add(t)}try{const n=we(t.slice(10)),r=(new TextDecoder).decode(await crypto.subtle.decrypt({name:"AES-GCM",iv:n.slice(0,12)},e,n.slice(12)));Mi.set(t,r),Ri.set(r,t)}catch{(await Ti()).standsIn&&Ki.add(t)}}function Hi(t){return Ki.has(t)}async function ji(t){const e=[];for(const n of t){if(!qi(n)||Mi.has(n))continue;let t=Fi.get(n);t||(t=Ni(n).finally(()=>Fi.delete(n)),Fi.set(n,t)),e.push(t)}await Promise.all(e)}function Wi(t){return Mi.get(t)}const zi={AppSliceFullError:"upload-unavailable",PartitionContendedError:"partition-contended",PartitionLeaseLostError:"lease-lost",ReservedSlotError:"invalid-request",TimeoutError:"timeout"},Gi={AppSliceFullError:"app-slice-full"};function Vi(t){try{return new URL(t).pathname}catch{return}}function Ji(t,e){if(t instanceof ge)return t.toWire();if(!(t instanceof Error))return{error:e,code:"internal"};const n={error:t.message,code:"internal"};if(t instanceof lt){n.code="bee-rejected",void 0!==t.status&&(n.status=t.status);const e=function(t){if("string"==typeof t)return t||void 0;if(t&&"object"==typeof t&&"message"in t){const{message:e}=t;if("string"==typeof e)return e}}(t.responseBody);void 0!==e&&(n.beeMessage=e);const r=Vi(t.url);void 0!==r&&(n.url=r)}else if("SocUploadError"===t.name){const{status:e,body:r}=t;n.code="bee-rejected",n.status=e,n.beeMessage=r}else if(t.name in zi){n.code=zi[t.name];const e=Gi[t.name];void 0!==e&&(n.reason=e)}else t instanceof me?n.code="invalid-request":t instanceof TypeError&&/fetch/i.test(t.message)&&(n.code="network");return n}class Zi{constructor(t,e){this.beeUrl=t,this.options=e,this.pendingAcks=[],this.closed=!1,this.concurrency=e?.concurrency??32}getConcurrency(){return this.concurrency}open(){return new Promise((t,e)=>{const n=this.buildWsUrl();this.ws=new WebSocket(n),this.ws.binaryType="arraybuffer",this.ws.onopen=()=>{t()},this.ws.onerror=()=>{const t="WebSocket connection error";this.errorMessage=t,this.rejectAllPending(new Error(t)),e(new Error(t))},this.ws.onmessage=()=>{const t=this.pendingAcks.shift();t&&(clearTimeout(t.timer),t.resolve())},this.ws.onclose=t=>{if(!this.closed){const e=`WebSocket closed unexpectedly: ${t.code} ${t.reason}`;this.errorMessage=e,this.rejectAllPending(new Error(e))}}})}async uploadChunk(t){if(!this.ws||this.ws.readyState!==WebSocket.OPEN)throw new Error(this.errorMessage??"WebSocket is not open");for(;this.pendingAcks.length>=this.concurrency;)await this.waitForAck();return new Promise((e,n)=>{const r=setTimeout(()=>{n(new Error("WebSocket chunk ack timeout"))},9e5);this.pendingAcks.push({resolve:e,reject:n,timer:r});try{this.ws.send(t)}catch(t){this.pendingAcks.pop(),clearTimeout(r),n(t instanceof Error?t:new Error("WebSocket send failed"))}})}async close(){for(;this.pendingAcks.length>0;)await this.waitForAck();this.closed=!0,this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.close()}buildWsUrl(){let t=this.beeUrl;t.startsWith("https://")?t="wss://"+t.slice(8):t.startsWith("http://")&&(t="ws://"+t.slice(7)),t.endsWith("/")&&(t=t.slice(0,-1));let e=t+"/chunks/stream";return this.options?.tag&&(e+=`?swarm-tag=${this.options.tag}`),e}waitForAck(){const t=this.pendingAcks[0];return t?new Promise((e,n)=>{const r=t.resolve;t.resolve=()=>{r(),e()};const i=t.reject;t.reject=t=>{i(t),n(t)}}):Promise.resolve()}rejectAllPending(t){for(const e of this.pendingAcks)clearTimeout(e.timer),e.reject(t);this.pendingAcks=[]}}const Yi=new WeakMap;async function _i(t){if(!Yi.get(t))try{return(await t.tag.create()).uid}catch(e){const n=function(t,e){return"object"==typeof t&&null!==t&&t.status===e}(e,404);return n&&Yi.set(t,!0),void console.warn("[tryCreateTag] Tag creation failed — proceeding without tag"+(n?" (node does not support tags; cached, will not retry on this node)":" (transient; will re-probe on the next upload)"))}}class Qi extends Error{constructor(t,e,n){super(`SOC upload failed: ${t} ${e} - ${n}`),this.name="SocUploadError",this.status=t,this.body=n}}function Xi(t){return"stamper"===t.mode}function ts(t){return"subsidised"===t.mode}function es(t,e){return e?t=>e.stampChunkData(t):e=>Promise.resolve(t.stamp(e))}async function ns(t,e,n,r,i,s){const a=await e(r);await t.chunk.upload(a,n,i,s)}function rs(t,e){const n=t.requestOptions;return{...n?.headers,...e?.headers}}async function is(t,e,n){const r=`${Se(t)}/chunks`,i={"content-type":"application/octet-stream"};void 0!==n?.deferred&&(i["swarm-deferred-upload"]=n.deferred.toString());const s=await fetch(r,{method:"POST",headers:i,body:e});if(!s.ok){const t=await s.text();throw new ge("bee-rejected",`Subsidised chunk upload failed: ${s.status} ${s.statusText} - ${t}`,{status:s.status,beeMessage:t,url:Vi(s.url)})}return{reference:(await s.json()).reference}}async function ss(t,e,n,r,i,s,a=xe){let o=0;await Promise.all(Array.from({length:Math.min(a,n.length)},()=>(async()=>{for(;o<n.length;){const a=n[o++];await ns(t,e,a.data,a.address,r,i),s(a.address)}})()))}async function as(t,e,n,r){const i=await t(r),a=s.Binary.concatBytes(y(i).toUint8Array(),n);await e.uploadChunk(a)}async function os(t,e,n,r){let i=0;const s=e.getConcurrency();await Promise.all(Array.from({length:s},()=>(async()=>{for(;i<n.length;){const s=n[i++];await as(t,e,s.data,s.address),r(s.address)}})()))}async function ds(t,e){if(1===t.length)return new m(t[0].address);const n=[];for(let r=0;r<t.length;r+=128){const i=t.slice(r,Math.min(r+128,t.length));if(1===i.length){n.push(i[0]);continue}const s=new Uint8Array(32*i.length);i.forEach((t,e)=>{s.set(t.address,32*e)});const a=i.reduce((t,e)=>t+(e.span??0n),0n),o=ve(s,a);n.push({address:o.address.toUint8Array(),span:a}),await e(o)}return n.length>1?ds(n,e):new m(n[0].address)}async function us(t,e){if(1===t.length){const e=new Uint8Array(64);return e.set(t[0].address,0),e.set(t[0].key,32),new m(e)}const n=[];for(let r=0;r<t.length;r+=64){const i=t.slice(r,Math.min(r+64,t.length));if(1===i.length){n.push(i[0]);continue}const a=i.reduce((t,e)=>t+e.span,0n),o=new Uint8Array(4096);i.forEach((t,e)=>{o.set(t.address,64*e),o.set(t.key,64*e+32)});const c=N.fromBigInt(a).toUint8Array(),d=s.Binary.concatBytes(c,o),u=Ie(),{key:l,encryptedSpan:h,encryptedData:p}=u.encryptChunk(d),f=s.Binary.concatBytes(h,p),y=await ke(f);await e(f),n.push({address:y.toUint8Array(),key:l,span:a})}if(n.length>1)return us(n,e);const r=new Uint8Array(64);return r.set(n[0].address,0),r.set(n[0].key,32),new m(r)}async function ls(t,e,n){return void 0!==n?.encryptionKey?async function(t,e,n){const r=!0===n?.encryptionKey?void 0:n?.encryptionKey,i=hi(e),{chunks:s,refs:a}=function(t,e){if(e&&t.length>1)throw new Error(`Explicit encryption key is only supported for single-chunk data (up to 4096 bytes), got ${t.length} chunks — pass encryptionKey: true to auto-generate per-chunk keys`);const n=[],r=[];for(const i of t){const t=be(i,e);n.push(t),r.push({address:t.address.toUint8Array(),key:t.encryptionKey,span:BigInt(i.length)})}return{chunks:n,refs:r}}(i,r),o=s.map(t=>({data:t.data,address:t.address.toUint8Array()}));let c=s.length,d=0;const u=[],l=t=>{u.push(t),d++,n?.onProgress?.({total:c,processed:d})};if(ts(t)){const e={deferred:n?.deferred};for(const n of o)await is(t.gatewayUrl,n.data,e),l(n.address);return{reference:(await us(a,async r=>{await is(t.gatewayUrl,r,e);const i=await ke(r);u.push(i.toUint8Array()),c++,d++,n?.onProgress?.({total:c,processed:d})})).toHex(),chunkAddresses:u}}{const{bee:e,stamper:r,workerPool:i}=t,s=n?.tag??await _i(e),h={...n,tag:s,deferred:n?.deferred??!1},p=es(r,i);let f;n?.webSocket&&(f=new Zi(e.url,{tag:s,concurrency:n.webSocket.concurrency}),await f.open());try{f?await os(p,f,o,l):await ss(e,p,o,h,n?.requestOptions,l,n?.httpConcurrency);return{reference:(await us(a,async t=>{const r=await ke(t);u.push(r.toUint8Array()),f?await as(p,f,t,r.toUint8Array()):await ns(e,p,t,r.toUint8Array(),h,n?.requestOptions),c++,d++,n?.onProgress?.({total:c,processed:d})})).toHex(),tagUid:s,chunkAddresses:u}}finally{f&&await f.close()}}}(t,e,n):async function(t,e,n){const r=hi(e),i=[],s=[];for(const t of r){const e=ve(t);i.push(e),s.push({address:e.address.toUint8Array(),span:BigInt(t.length)})}let a=i.length,o=0;const c=()=>n?.onProgress?.({total:a,processed:o});if(ts(t)){const e={deferred:n?.deferred};for(const n of i)await is(t.gatewayUrl,n.data,e),o++,c();let r;return r=1===s.length?new m(s[0].address):await ds(s,async n=>{await is(t.gatewayUrl,n.data,e),a++,o++,c()}),{reference:r.toHex()}}{const{bee:e,stamper:r,workerPool:d}=t,u=n?.tag??await _i(e),l={...n,tag:u,deferred:n?.deferred??!1},h=es(r,d);for(const t of i)await ns(e,h,t.data,t.address.toUint8Array(),l,n?.requestOptions),o++,c();let p;return p=1===s.length?new m(s[0].address):await ds(s,async t=>{await ns(e,h,t.data,t.address.toUint8Array(),l,n?.requestOptions),a++,o++,c()}),{reference:p.toHex(),tagUid:u}}}(t,e,n)}async function hs(t,e,n,r,i){if(r.length<1||r.length>4096)throw new ge("invalid-request",`Invalid data length: ${r.length} (expected 1-4096)`);let a,o,c;if(void 0!==i?.encryptionKey){const t=!0===i.encryptionKey?void 0:i.encryptionKey,e=be(r,t);a=e.address.toUint8Array(),o=e.data,c=e.encryptionKey}else{const t=ve(r);a=t.address.toUint8Array(),o=t.data}const d=e.publicKey().address(),u=s.Binary.concatBytes(n.toUint8Array(),a),l=e.sign(u),h=s.Binary.keccak256(s.Binary.concatBytes(n.toUint8Array(),d.toUint8Array()));if(ts(t)){const e=`${Se(t.gatewayUrl)}/soc/${d.toHex()}/${n.toHex()}?sig=${l.toHex()}`,r={"content-type":"application/octet-stream"};void 0!==i?.deferred&&(r["swarm-deferred-upload"]=i.deferred.toString());const s=await fetch(e,{method:"POST",headers:r,body:o});if(!s.ok){const t=await s.text();throw new Qi(s.status,`${s.statusText} (subsidised)`,t)}return{socAddress:h,encryptionKey:c}}{const{bee:e,stamper:r}=t,s=i?.tag??await _i(e),a=r.stamp(h),u=y(a).toHex(),p=`${e.url}/soc/${d.toHex()}/${n.toHex()}?sig=${l.toHex()}`,f={...rs(e,i?.requestOptions),"content-type":"application/octet-stream","swarm-postage-stamp":u};s&&(f["swarm-tag"]=s.toString()),void 0!==i?.deferred&&(f["swarm-deferred-upload"]=i.deferred.toString()),void 0!==i?.pin&&(f["swarm-pin"]=i.pin.toString());const w=await fetch(p,{method:"POST",headers:f,body:o,signal:i?.requestOptions?.signal});if(!w.ok){const t=await w.text();throw new Qi(w.status,w.statusText,t)}return{socAddress:h,encryptionKey:c,tagUid:s}}}async function ps(t,e,n){if(ts(t))return is(t.gatewayUrl,e,{deferred:n?.deferred});{const{bee:r,stamper:i}=t,s=await ke(e),a=es(i);return await ns(r,a,e,s.toUint8Array(),{deferred:n?.deferred??!1,pin:n?.pin,tag:n?.tag},n?.requestOptions),{reference:ye(s.toUint8Array())}}}function fs(t,e){const n=s.Binary.keccak256((new TextEncoder).encode(`swarm-id-partition-lock-v1:${t.toHex()}:${e}`));return new x(n)}function ys(t,e,n){const r=fs(t,e);return s.Binary.keccak256(s.Binary.concatBytes(r.toUint8Array(),n.toUint8Array()))}function ws(t,e,n){const r=ys(t,e,n);return r[0]<<8|r[1]}const gs=2500,ms=3e4,bs=ms;class vs extends Error{constructor(t="Partition lease was reclaimed by another device."){super(t),this.name="PartitionLeaseLostError"}}class Ss extends Error{constructor(t="This chunk address belongs to the account's own bookkeeping and cannot be stamped for an app."){super(t),this.name="ReservedSlotError"}}class ks extends Error{constructor(t="This bucket's share for app stamps is used up. The rest of it is kept for the account's own uploads."){super(t),this.name="AppSliceFullError"}}const xs=65536,Is=16,As=2,Cs=1e4,Us=4096;function Ps(t){const e=t<=31?2:4,n=Us/e;return{counterByteSize:e,bucketsPerChunk:n,numUtilizationChunks:xs/n}}function Es(t){if(t.length<2)throw new Error("Chunk address must be at least 2 bytes");return t[0]<<8|t[1]}function $s(t,e){if(t<0||t>=xs)throw new Error(`Invalid bucket index: ${t} (must be 0-65535)`);const{bucketsPerChunk:n}=Ps(e);return Math.floor(t/n)}function Ds(t,e,n){const{counterByteSize:r,bucketsPerChunk:i,numUtilizationChunks:s}=Ps(n);if(e<0||e>=s)throw new Error(`Invalid chunk index: ${e} (must be 0-${s-1})`);const a=e*i,o=a+i,c=t.slice(a,o);return 2===r?Ls(c):qs(c)}function Bs(t,e,n,r){const{counterByteSize:i,bucketsPerChunk:s,numUtilizationChunks:a}=Ps(r);if(e<0||e>=a)throw new Error(`Invalid chunk index: ${e} (must be 0-${a-1})`);if(n.length!==Us)throw new Error(`Invalid chunk data length: ${n.length} (expected 4096)`);const o=2===i?function(t){if(t.length%2!=0)throw new Error("Byte array length must be a multiple of 2");const e=new Uint32Array(t.length/2),n=new DataView(t.buffer,t.byteOffset,t.byteLength);for(let t=0;t<e.length;t++)e[t]=n.getUint16(2*t,!0);return e}(n):function(t){if(t.length%4!=0)throw new Error("Byte array length must be a multiple of 4");const e=new Uint32Array(t.length/4),n=new DataView(t.buffer,t.byteOffset,t.byteLength);for(let t=0;t<e.length;t++)e[t]=n.getUint32(4*t,!0);return e}(n);if(o.length!==s)throw new Error(`Invalid chunk counters length: ${o.length} (expected ${s})`);const c=e*s;t.set(o,c)}class Ts{constructor(t){this.dirtyChunks=new Set,this.batchDepth=t}markDirty(t){const e=$s(t,this.batchDepth);this.dirtyChunks.add(e)}markClean(t){this.dirtyChunks.delete(t)}getDirtyChunks(){return Array.from(this.dirtyChunks).sort((t,e)=>t-e)}hasDirtyChunks(){return this.dirtyChunks.size>0}clear(){this.dirtyChunks.clear()}get count(){return this.dirtyChunks.size}}async function Os(t,e,n,r){if(32!==t.length)throw new Error(`Invalid swarmEncryptionKey length: ${t.length} (expected 32)`);const i=(new TextEncoder).encode("swarm-id-util-chunk-v1"),a=e.toUint8Array(),o=new Uint8Array(4);new DataView(o.buffer).setUint32(0,n,!1);const c=new Uint8Array(4);new DataView(c.buffer).setUint32(0,r,!1);const d=s.Binary.concatBytes(i,a,o,c),u=await crypto.subtle.importKey("raw",t,{name:"HMAC",hash:"SHA-256"},!1,["sign"]),l=await crypto.subtle.sign("HMAC",u,d);return new Uint8Array(l)}async function Ms(t){const{swarmEncryptionKey:e,batchId:n,chunkIndex:r,plaintext:i,claimedBuckets:s}=t;let a=t.priorNonce;for(;;){const t=await Os(e,n,r,a),o=be(i,t).address.toUint8Array(),c=Es(o);if(!s.has(c))return s.add(c),{key:t,nonce:a,bucket:c,address:o};a++}}function Rs(t){const e=new Set;for(const n of t.chunks)!n.dirty&&n.contentHash&&e.add(Es(s.Binary.hexToUint8Array(n.contentHash)));return e}async function Fs(t,e,n,r){if(n.length<1||n.length>4096)throw new Error(`Invalid data length: ${n.length} (expected 1-4096)`);if(32!==r.length)throw new Error(`Invalid encryption key length: ${r.length} (expected 32)`);const i=be(n,r),s=i.address.toUint8Array(),a=await _i(t),o={mode:"stamper",bee:t,stamper:e};return await ps(o,i.data,{deferred:!1,tag:a}),s}function qs(t){const e=new ArrayBuffer(4*t.length),n=new DataView(e);for(let e=0;e<t.length;e++)n.setUint32(4*e,t[e],!0);return new Uint8Array(e)}function Ls(t){const e=new ArrayBuffer(2*t.length),n=new DataView(e);for(let e=0;e<t.length;e++){const r=t[e];if(r>65535)throw new Error(`Counter at index ${e} (${r}) exceeds uint16 range; use uint32 codec`);n.setUint16(2*e,r,!0)}return new Uint8Array(e)}function Ks(t){return Math.pow(2,t-16)}function Ns(t,e,n=2){return t<js(e,n)}function Hs(t,e,n){return n+t+n*e}function js(t,e){const n=Ks(t);return Math.floor(n/e)-1}const Ws=(()=>{let t=16;for(;js(t,2)<4;)t+=1;return t})();async function zs(t,e,n,r){const i=await async function(t,e,n){const{cache:r}=n,{counterByteSize:i,bucketsPerChunk:s,numUtilizationChunks:a}=Ps(e),o=await r.getAllChunks(t.toHex());if(o.length===a)try{const n=new Uint32Array(xs),r=[];for(const t of o)Bs(n,t.chunkIndex,t.data,e),r.push({index:t.chunkIndex,contentHash:t.contentHash,lastUpload:t.lastAccess,dirty:!1,nonce:t.nonce});return{batchId:t,batchDepth:e,dataCounters:n,chunks:r,lastSync:Date.now()}}catch(t){console.warn("[BatchUtil] Failed to reconstruct from cache:",t)}const c=new Uint32Array(xs),d=[],u=new Uint32Array(s),l=2===i?Ls(u):qs(u);for(let t=0;t<a;t++){const n=o.find(e=>e.chunkIndex===t);n?(Bs(c,t,n.data,e),d.push({index:t,contentHash:n.contentHash,lastUpload:n.lastAccess,dirty:!1,nonce:n.nonce})):(Bs(c,t,l,e),d.push({index:t,contentHash:"",lastUpload:0,dirty:!0,nonce:0}))}return{batchId:t,batchDepth:e,dataCounters:c,chunks:d,lastSync:Date.now()}}(t,n,r),s=new Ts(n);for(const t of e){const e=Es(t.address.toUint8Array()),r=i.dataCounters[e];if(!Ns(r,n))throw new Error(`Bucket ${e} is full (slot ${r})`);i.dataCounters[e]++,s.markDirty(e)}const a=s.getDirtyChunks();for(const t of a)i.chunks[t].dirty=!0;return{state:i,tracker:s}}class Gs{get buckets(){return this.utilizationState.dataCounters.map(t=>Hs(this.partition??0,t,this.partitionCountValue))}get currentPartition(){return this.partition}get partitionCount(){return this.partitionCountValue}getLocalCounter(){return void 0!==this.partition?this.utilizationState.dataCounters:void 0}getLockSocBuckets(){const t=new Set;for(const e of this.lockSocs??[])t.add(Es(e.address));return t}getProtectedBuckets(){const t=new Set(this.getLockSocBuckets()),e=this.protectedStateBuckets.get(this.partition??0);for(const n of e??[])t.add(n);return t}getCleanChunkBuckets(){return Rs(this.utilizationState)}async setProtectedStateBuckets(t,e){this.protectedStateBuckets.set(t,new Set(e));const n=this.batchId.toHex(),r=await this.cache.getMetadata(n);await this.cache.putMetadata({batchId:n,lastSync:r?.lastSync??Date.now(),chunkCount:r?.chunkCount??0,syncedReferences:r?.syncedReferences,stateChunkBuckets:{...r?.stateChunkBuckets??{},[t]:e}})}bindPartition(t){if(t.localCounter.length!==xs)throw new Error(`localCounter must have 65536 entries, got ${t.localCounter.length}`);this.partition=t.partition,this.partitionCountValue=t.partitionCount,this.utilizationState.dataCounters=t.localCounter,this.leaseStale=!1,this.leaseValidUntil=void 0}bindLockSocs(t){this.lockSocs=t}markReservedUtilizationChunk(t,e){this.reservedUtilizationChunks||(this.reservedUtilizationChunks=new Map),this.reservedUtilizationChunks.set(ye(t),e??this.partition??0)}clearReservedUtilizationChunks(){this.reservedUtilizationChunks=void 0}reserveIntentSocSlot(t,e){this.intentSoc={addressHex:ye(t),slot:e}}clearIntentSocSlot(){this.intentSoc=void 0}async withIntentSocSlot(t,e,n){const r=this.intentSocLock;let i;this.intentSocLock=new Promise(t=>i=t),await r;try{return this.reserveIntentSocSlot(t,e),await n()}finally{this.clearIntentSocSlot(),i()}}unbindPartition(){this.partition=void 0,this.partitionCountValue=1,this.leaseValidUntil=void 0}invalidateLease(){void 0!==this.partition&&(this.leaseStale=!0)}setLeaseValidUntil(t){this.leaseValidUntil=t}leaseLocallyLapsed(){return void 0!==this.leaseValidUntil&&this.now()>=this.leaseValidUntil-2e3}constructor(t,e,n,r,i,s,a){this.dirty=!1,this.dirtyBuckets=new Set,this.partition=void 0,this.partitionCountValue=1,this.lockSocs=void 0,this.reservedUtilizationChunks=void 0,this.intentSoc=void 0,this.intentSocLock=Promise.resolve(),this.leaseStale=!1,this.leaseValidUntil=void 0,this.protectedStateBuckets=new Map,this.signer=t,this.batchId=e,this.depth=n,this.maxSlot=Ks(n),this.cache=r,this.encryptionKey=i,this.utilizationState=s,this.now=a}static async create(t,e,n,r,i,s,a=()=>Date.now()){const o=function(t,e){const n=new Uint32Array(xs),{numUtilizationChunks:r}=Ps(e),i=[];for(let t=0;t<r;t++)i.push({index:t,contentHash:"",lastUpload:0,dirty:!0,nonce:0});return{batchId:t,batchDepth:e,dataCounters:n,chunks:i,lastSync:Date.now()}}(e,n);try{const t=await r.getAllChunks(e.toHex()),{numUtilizationChunks:i}=Ps(n);for(const e of t)e.chunkIndex>=i||Bs(o.dataCounters,e.chunkIndex,e.data,n)}catch(t){console.warn("[UtilizationAwareStamper] Failed to load state from cache, starting with fresh state:",t)}const c=new Gs(new I(t),e,n,r,s,o,a);try{const t=await(r.getMetadata?.(e.toHex()));for(const[e,n]of Object.entries(t?.stateChunkBuckets??{}))c.protectedStateBuckets.set(Number(e),new Set(n))}catch(t){console.warn("[UtilizationAwareStamper] Failed to restore protected state buckets:",t)}const d=ye(s),u=await Ae(d,Ue),l=new I(u).publicKey().address();return c.lockSocs=Array.from({length:2},(t,n)=>({partition:n,address:ys(e,n,l)})),c}reservedSlotFor(t){const e=this.lockSocs?.find(e=>s.Binary.equals(e.address,t));if(e)return e.partition;const n=ye(t),r=this.reservedUtilizationChunks?.get(n);return void 0!==r?r:this.intentSoc?.addressHex===n?this.intentSoc.slot:void 0}requireLiveLease(){if(this.leaseStale||void 0!==this.partition&&this.leaseLocallyLapsed())throw new vs}assignSlot(t){const e=this.reservedSlotFor(t);if(void 0!==e)return e;this.requireLiveLease();const n=Es(t),r=Hs(this.partition??0,this.utilizationState.dataCounters[n],this.partitionCountValue);if(r>=this.maxSlot)throw new Error("Bucket is full");return this.utilizationState.dataCounters[n]++,this.dirtyBuckets.add(n),this.dirty=!0,r}stamp(t,e){return Ce(this.signer,this.batchId,t,this.assignSlot(t),e)}stampDataChunk(t,e){if(void 0!==this.reservedSlotFor(t))throw new Ss;const n=Es(t);if(this.utilizationState.dataCounters[n]>=this.appSliceCapacity())throw new ks;return this.stamp(t,e)}isOwnDataSlot(t,e){if(void 0!==this.reservedSlotFor(t))return!1;const n=this.partitionCountValue,r=e-Hs(this.partition??0,0,n);if(r<0||r%n!==0)return!1;return r/n<this.utilizationState.dataCounters[Es(t)]}restampDataChunk(t,e,n){if(void 0!==this.reservedSlotFor(t))throw new Ss;if(this.requireLiveLease(),!this.isOwnDataSlot(t,e))throw new Error(`Slot ${e} is not a slot this device took in this chunk's bucket.`);return Ce(this.signer,this.batchId,t,e,n)}laneCapacity(){return js(this.depth,this.partitionCountValue)}appSliceCapacity(){return Math.floor(.5*this.laneCapacity())}getState(){return this.buckets}async flush(){if(!this.dirty)return;const t=new Set;for(const e of this.dirtyBuckets){const n=$s(e,this.depth);t.add(n),this.utilizationState.chunks[n].dirty=!0}try{const e=Rs(this.utilizationState);for(const t of this.lockSocs??[])e.add(Es(t.address));for(const t of this.protectedStateBuckets.get(this.partition??0)??[])e.add(t);const n=Array.from(t).sort((t,e)=>t-e);for(const t of n){const n=Ds(this.utilizationState.dataCounters,t,this.depth),r=await Ms({swarmEncryptionKey:this.encryptionKey,batchId:this.batchId,chunkIndex:t,plaintext:n,priorNonce:this.utilizationState.chunks[t].nonce,claimedBuckets:e}),i=s.Binary.uint8ArrayToHex(r.address);await this.cache.putChunk({batchId:this.batchId.toHex(),chunkIndex:t,data:n,contentHash:i,nonce:r.nonce,lastAccess:Date.now()}),this.utilizationState.chunks[t].contentHash=i,this.utilizationState.chunks[t].nonce=r.nonce,this.utilizationState.chunks[t].dirty=!1}this.utilizationState.lastSync=Date.now()}catch(t){throw console.error("[UtilizationAwareStamper] Failed to flush to cache:",t),t}this.dirtyBuckets.clear(),this.dirty=!1}getUtilizationState(){return this.utilizationState}applyUtilizationUpdate(t){for(const{index:e,value:n}of t)e>=0&&e<xs&&n>this.utilizationState.dataCounters[e]&&(this.utilizationState.dataCounters[e]=n)}buildLeaseLocalCounter(){return this.utilizationState.dataCounters.slice()}async getSyncedReference(t){const e=await this.cache.getMetadata(this.batchId.toHex());return e?.syncedReferences?.[t]}async setSyncedReference(t,e){const n=this.batchId.toHex(),r=await this.cache.getMetadata(n);await this.cache.putMetadata({batchId:n,lastSync:r?.lastSync??Date.now(),chunkCount:r?.chunkCount??0,syncedReferences:{...r?.syncedReferences??{},[t]:e},stateChunkBuckets:r?.stateChunkBuckets})}getBucketUpdatesForBroadcast(){return Array.from(this.dirtyBuckets).map(t=>({index:t,value:this.utilizationState.dataCounters[t]}))}}const Vs=t=>{const e=de(fe()).safeParse(t);if(!e.success)return console.error("Parse failed:",e.error.format()),[];const n=[];for(const t of e.data)try{const e=Be.safeParse(t);if(!e.success){console.error("Skipping invalid account record:",e.error.format());continue}n.push(e.data)}catch(t){console.error("Skipping invalid account record:",t)}return n.map(t=>!De(t)&&void 0===t.partitionCount&&t.devices.length>0?{...t,partitionCount:2}:t)};function Js(t){return{id:t.id.toString(),name:t.name,createdAt:t.createdAt,derivationKey:t.derivationKey,publicKey:t.publicKey,defaultPostageStampBatchID:t.defaultPostageStampBatchID?.toString(),devices:t.devices,connectedApps:t.connectedApps.map(t=>_s(Ys(t))),postageStamps:t.postageStamps.map(Qs),settings:t.settings,accountNameAt:t.accountNameAt,defaultStampAt:t.defaultStampAt,settingsAt:t.settingsAt,lastModified:t.lastModified,partitionCount:t.partitionCount}}function Zs(t){return De(t)?{id:t.id.toString(),name:t.name,createdAt:t.createdAt,access:t.access,encryptedSeed:t.encryptedSeed,encryptedState:t.encryptedState,storageWarning:t.storageWarning,soonestDriveExpiry:t.soonestDriveExpiry,signedOutAt:t.signedOutAt}:{...Js(t),connectedApps:t.connectedApps.map(Ys),access:t.access,encryptedSeed:t.encryptedSeed}}function Ys(t){return{appUrl:t.appUrl,appName:t.appName,lastConnectedAt:t.lastConnectedAt,appIcon:t.appIcon,appDescription:t.appDescription,connectedUntil:t.connectedUntil,appSecret:t.appSecret,postageStampBatchID:t.postageStampBatchID?.toString(),postageStampBatchIDAt:t.postageStampBatchIDAt,revokedAt:t.revokedAt,disconnectedAt:t.disconnectedAt,chatBinding:t.chatBinding}}function _s(t){const{appSecret:e,connectedUntil:n,...r}=t;return r}function Qs(t){return{batchID:t.batchID.toString(),signerKey:t.signerKey.toString(),name:t.name,nameUpdatedAt:t.nameUpdatedAt,utilization:t.utilization,usable:t.usable,depth:t.depth,amount:t.amount.toString(),bucketDepth:t.bucketDepth,blockNumber:t.blockNumber,immutableFlag:t.immutableFlag,exists:t.exists,batchTTL:t.batchTTL,createdAt:t.createdAt,updatedAt:t.updatedAt,deletedAt:t.deletedAt}}function Xs(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)}function ta(t){return Array.isArray(t)?t.filter(Xs):[]}function ea(t){return void 0===t.signedOutAt}function na(t){return ea(t)?[t.derivationKey,...ta(t.connectedApps).map(t=>t.appSecret),...ta(t.postageStamps).map(t=>t.signerKey)].filter(t=>void 0!==t):[]}function ra(t){if(!ea(t))return t;const e=t=>qi(t)?Wi(t):void 0;if(na(t).some(t=>void 0===e(t)))return function(t){return{id:t.id,name:t.name,createdAt:t.createdAt,access:t.access,encryptedSeed:t.encryptedSeed,signedOutAt:Date.now()}}(t);const n=t=>void 0===t?void 0:e(t);return{...t,derivationKey:n(t.derivationKey),connectedApps:ta(t.connectedApps).map(t=>void 0===t.appSecret?t:{...t,appSecret:n(t.appSecret)}),postageStamps:ta(t.postageStamps).map(t=>({...t,signerKey:n(t.signerKey)}))}}async function ia(t,e){const n=e.get(t.id),r=void 0!==n&&function(t){return na(t).some(t=>qi(t)&&Hi(t))}(n);if(!ea(t))return r?n:t;if(r&&await async function(){return(await Ti()).standsIn}())throw new Error("This page cannot keep keys for a later visit, and the stored keys may still open on one");return async function(t,e){const n=async t=>"string"==typeof t?e(t):t;return{...t,derivationKey:await n(t.derivationKey),connectedApps:await Promise.all(ta(t.connectedApps).map(async t=>void 0===t.appSecret?t:{...t,appSecret:await n(t.appSecret)})),postageStamps:await Promise.all(ta(t.postageStamps).map(async t=>({...t,signerKey:await n(t.signerKey)})))}}(t,Li)}const sa={seal:(t,e)=>{const n=new Map(ta(e).map(t=>[t.id,t]));return Promise.all(t.map(t=>ia(t,n)))},open:t=>Array.isArray(t)?t.map(t=>Xs(t)?ra(t):t):t,prime:t=>ji(ta(t).flatMap(na).filter(t=>qi(t)))};function aa(){return t={key:$e,currentVersion:1,parsers:{1:Vs},serializer:Zs,loggerName:"AccountsStorage",sealing:sa},new Ii({...t,storage:new Si});var t}function oa(){return{load(){if("undefined"==typeof localStorage)return;const t=localStorage.getItem(Pe);if(t)try{return function(t){const e=Ee.safeParse(t);if(e.success)return e.data;console.error("[NetworkSettingsStorage] Parse failed:",e.error.format())}(JSON.parse(t))}catch(t){return void console.error("[NetworkSettingsStorage] Failed to parse stored data:",t)}},save(t){if("undefined"==typeof localStorage)return void console.warn("[NetworkSettingsStorage] localStorage not available");const e=function(t){return{beeNodeUrl:t.beeNodeUrl,gnosisRpcUrl:t.gnosisRpcUrl}}(t);localStorage.setItem(Pe,JSON.stringify(e))},clear(){"undefined"!=typeof localStorage&&localStorage.removeItem(Pe)}}}function ca(t,e,n){return{version:1,timestamp:n,accountId:e,metadata:{accountName:t.name,defaultPostageStampBatchID:t.defaultPostageStampBatchID?.toHex(),publicKey:t.publicKey,settings:t.settings,accountNameAt:t.accountNameAt??t.createdAt,defaultStampAt:t.defaultStampAt??t.createdAt,settingsAt:t.settingsAt??t.createdAt,createdAt:t.createdAt,lastModified:n,devices:t.devices,partitionCount:t.partitionCount??1},connectedApps:t.connectedApps,postageStamps:t.postageStamps}}function da(t){return ua(ca(t,t.id.toHex(),Date.now()))}function ua(t){const e={version:1,timestamp:(n=t).timestamp,accountId:n.accountId,metadata:{accountName:n.metadata.accountName,defaultPostageStampBatchID:n.metadata.defaultPostageStampBatchID,publicKey:n.metadata.publicKey,settings:n.metadata.settings,accountNameAt:n.metadata.accountNameAt,defaultStampAt:n.metadata.defaultStampAt,settingsAt:n.metadata.settingsAt,createdAt:n.metadata.createdAt,lastModified:n.metadata.lastModified,devices:n.metadata.devices,partitionCount:n.metadata.partitionCount},connectedApps:n.connectedApps.map(Ys),postageStamps:n.postageStamps.map(Qs)};var n;return{...e,connectedApps:e.connectedApps.map(t=>{const{chatBinding:e,...n}=_s(t);return n})}}function la(t,e){const n=new Map(e.map(t=>[t.appUrl,t]));return t.map(t=>{if(t.revokedAt)return t;const e=n.get(t.appUrl);return e?void 0!==t.disconnectedAt&&t.disconnectedAt>e.lastConnectedAt?t:{...t,appSecret:e.appSecret??t.appSecret,connectedUntil:e.connectedUntil??t.connectedUntil}:t})}async function ha(t){return{topic:await Ae(t,"swarm-id/account-bus/topic/v1"),encryptionKey:await Te(t,"swarm-id/account-bus/encryption/v1")}}const pa=2e4;class fa{constructor(){this.seen=new Map}observe(t,e,n){const r=this.seen.get(t)??{at:e,peers:new Set};r.at=e,void 0!==n&&r.peers.add(n),this.seen.set(t,r)}forgetPeer(t){for(const[e,n]of this.seen)n.peers.delete(t)&&0===n.peers.size&&this.seen.delete(e)}liveDeviceIds(t){const e=t-18e4;return[...this.seen].filter(([,t])=>t.at>=e).map(([t])=>t)}clear(){this.seen.clear()}}he("type",[ae({type:ce("join"),topic:ue()}),ae({type:ce("relay"),to:ue(),payload:ue()}),ae({type:ce("signal"),to:ue(),payload:fe()})]);const ya=he("type",[ae({type:ce("welcome"),peerId:ue(),peers:de(ue())}),ae({type:ce("peer-joined"),peerId:ue()}),ae({type:ce("peer-left"),peerId:ue()}),ae({type:ce("relay"),from:ue(),payload:ue()}),ae({type:ce("signal"),from:ue(),payload:fe()})]);async function wa(t,e){const n=crypto.getRandomValues(new Uint8Array(12)),r=(new TextEncoder).encode(t),i=await crypto.subtle.encrypt({name:"AES-GCM",iv:n},e,r),s=new Uint8Array(n.length+i.byteLength);return s.set(n,0),s.set(new Uint8Array(i),n.length),function(t){let e="";for(const n of t)e+=String.fromCharCode(n);return btoa(e)}(s)}async function ga(t,e){const n=function(t){const e=atob(t),n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t);return n}(t),r=n.slice(0,12),i=n.slice(12),s=await crypto.subtle.decrypt({name:"AES-GCM",iv:r},e,i);return(new TextDecoder).decode(s)}const ma=he("kind",[ae({kind:ce("offer"),sdp:ue()}),ae({kind:ce("answer"),sdp:ue()}),ae({kind:ce("ice"),candidate:fe()})]);function ba(){return{remoteDescriptionSet:!1,pendingCandidates:[]}}class va{constructor(t){this.local=!1,this.peers=new Map,this.handlers=new Set,this.peerLeftHandlers=new Set,this.closed=!1,this.reconnectDelayMs=1e3,this.pendingDeliveries=new Set,this.options=t,this.connect()}get peerCount(){return this.peers.size}publish(t){const e=this.deliver(t).catch(t=>{console.error("[SignalingTransport] Publish failed:",t)});this.pendingDeliveries.add(e),e.finally(()=>this.pendingDeliveries.delete(e))}subscribe(t){return this.handlers.add(t),()=>this.handlers.delete(t)}onPeerLeft(t){return this.peerLeftHandlers.add(t),()=>this.peerLeftHandlers.delete(t)}close(){this.closed=!0,void 0!==this.reconnectTimer&&clearTimeout(this.reconnectTimer),0!==this.pendingDeliveries.size?Promise.allSettled([...this.pendingDeliveries]).then(()=>this.shutdown()):this.shutdown()}shutdown(){this.handlers.clear(),this.peerLeftHandlers.clear();for(const t of this.peers.values())t.connection?.close();this.peers.clear(),this.socket?.close()}connect(){const t=new WebSocket(this.options.url);this.socket=t,t.addEventListener("open",()=>{this.sendToServer({type:"join",topic:this.options.topic})}),t.addEventListener("message",t=>{this.reconnectDelayMs=1e3,this.handleServerMessage(String(t.data))}),t.addEventListener("close",t=>{if(1008===t.code)return console.error("[SignalingTransport] Signaling server rejected the topic; not reconnecting."),void(this.closed=!0);this.scheduleReconnect()}),t.addEventListener("error",()=>{})}scheduleReconnect(){if(this.closed)return;for(const t of this.peers.values())t.connection?.close();this.peers.clear();const t=this.reconnectDelayMs/2+Math.random()*(this.reconnectDelayMs/2);this.reconnectTimer=setTimeout(()=>this.connect(),t),this.reconnectDelayMs=Math.min(2*this.reconnectDelayMs,3e4)}async deliver(t){if(0===this.peers.size)return;const e=await wa(JSON.stringify(t),this.options.encryptionKey);for(const[t,n]of this.peers){if("open"===n.dataChannel?.readyState)try{n.dataChannel.send(e);continue}catch(t){console.warn("[SignalingTransport] DataChannel send failed; relaying:",t)}this.sendToServer({type:"relay",to:t,payload:e})}}sendToServer(t){this.socket?.readyState===WebSocket.OPEN&&this.socket.send(JSON.stringify(t))}async handleServerMessage(t){let e;try{e=JSON.parse(t)}catch{return}const n=ya.safeParse(e);if(!n.success)return;const r=n.data;switch(r.type){case"welcome":for(const t of r.peers)this.peers.set(t,ba()),this.initiatePeerConnection(t);return;case"peer-joined":return void this.peers.set(r.peerId,{remoteDescriptionSet:!1,pendingCandidates:[]});case"peer-left":{const t=this.peers.get(r.peerId);t?.connection?.close(),this.peers.delete(r.peerId);for(const t of this.peerLeftHandlers)t(r.peerId);return}case"relay":return void await this.receiveEnvelope(r.payload,r.from);case"signal":return void await this.handleSignal(r.from,r.payload)}}async receiveEnvelope(t,e){let n,r;try{n=await ga(t,this.options.encryptionKey)}catch{return}try{r=JSON.parse(n)}catch{return}for(const t of this.handlers)t(r,e)}async initiatePeerConnection(t){const e=this.options.createPeerConnection;if(e)try{const n=e(),r=this.peers.get(t);if(!r)return;this.adoptConnection(r,n),this.adoptDataChannel(n.createDataChannel("bus"),r,t),this.forwardIceCandidates(n,t);const i=await n.createOffer();await n.setLocalDescription(i),this.sendSignal(t,{kind:"offer",sdp:i.sdp??""})}catch(t){console.error("[SignalingTransport] WebRTC initiate failed:",t)}}async handleSignal(t,e){const n=this.options.createPeerConnection;if(!n)return;const r=ma.safeParse(e);if(!r.success)return;const i=r.data,s=this.peers.get(t);if(s)try{if("offer"===i.kind){const e=n();this.adoptConnection(s,e),e.ondatachannel=e=>{this.adoptDataChannel(e.channel,s,t)},this.forwardIceCandidates(e,t),await e.setRemoteDescription({type:"offer",sdp:i.sdp}),await this.flushPendingCandidates(s,e);const r=await e.createAnswer();return await e.setLocalDescription(r),void this.sendSignal(t,{kind:"answer",sdp:r.sdp??""})}if("answer"===i.kind){const t=s.connection;if(!t)return;return await t.setRemoteDescription({type:"answer",sdp:i.sdp}),void await this.flushPendingCandidates(s,t)}if(!s.remoteDescriptionSet)return void s.pendingCandidates.push(i.candidate);await(s.connection?.addIceCandidate(i.candidate))}catch(t){console.error("[SignalingTransport] WebRTC signal failed:",t)}}adoptConnection(t,e){t.connection?.close(),t.connection=e,t.remoteDescriptionSet=!1,t.pendingCandidates=[]}async flushPendingCandidates(t,e){if(t.connection!==e)return;t.remoteDescriptionSet=!0;const n=t.pendingCandidates;t.pendingCandidates=[];for(const t of n)try{await e.addIceCandidate(t)}catch(t){console.warn("[SignalingTransport] ICE candidate rejected:",t)}}adoptDataChannel(t,e,n){e.dataChannel=t,t.onmessage=t=>{this.receiveEnvelope(String(t.data),n)}}forwardIceCandidates(t,e){t.onicecandidate=t=>{t.candidate&&this.sendSignal(e,{kind:"ice",candidate:t.candidate.toJSON()})}}sendSignal(t,e){this.sendToServer({type:"signal",to:t,payload:e})}}class Sa{constructor(t=1e3){this.pendingUploads=new Map,this.defaultDelay=t}scheduleUpload(t,e,n,r){const i=r??this.defaultDelay,s=this.pendingUploads.get(t);s?.timerId&&(clearTimeout(s.timerId),s.promise.reject(new Error("Upload cancelled by new request")));const a=s?.tracker??e;if(s&&s.tracker!==e)for(const t of e.getDirtyChunks())a.markDirty(1024*t);return new Promise((e,r)=>{const s=setTimeout(async()=>{try{await n(),e()}catch(e){console.error(`[DebouncedUploader] Upload failed for batch ${t}:`,e),r(e instanceof Error?e:new Error(String(e)))}finally{this.pendingUploads.delete(t)}},i);this.pendingUploads.set(t,{tracker:a,timerId:s,uploadFn:n,promise:{resolve:e,reject:r}})})}async flush(t){const e=this.pendingUploads.get(t);if(e){e.timerId&&clearTimeout(e.timerId);try{await e.uploadFn()}finally{this.pendingUploads.delete(t)}}}async flushAll(){const t=Array.from(this.pendingUploads.keys());await Promise.all(t.map(t=>this.flush(t)))}cancel(t){const e=this.pendingUploads.get(t);e&&(e.timerId&&clearTimeout(e.timerId),this.pendingUploads.delete(t))}cancelAll(){for(const t of this.pendingUploads.values())t.timerId&&clearTimeout(t.timerId);this.pendingUploads.clear()}getPendingCount(){return this.pendingUploads.size}hasPending(t){return this.pendingUploads.has(t)}}const ka="AES-GCM",xa=6e5,Ia="swarm-id-seed-encryption-v1";function Aa(){const t=new Uint8Array(32);return crypto.getRandomValues(t),t}async function Ca(t,e){const n=new Uint8Array(12);crypto.getRandomValues(n);const r=await crypto.subtle.encrypt({name:ka,iv:n},e,t),i=new Uint8Array(12+r.byteLength);return i.set(n),i.set(new Uint8Array(r),12),ye(i)}async function Ua(t,e){const n=we(t),r=n.slice(0,12),i=n.slice(12),s=await crypto.subtle.decrypt({name:ka,iv:r},e,i);return new Uint8Array(s)}async function Pa(t,e,n){const r=await crypto.subtle.importKey("raw",t,"HKDF",!1,["deriveKey"]);return crypto.subtle.deriveKey({name:"HKDF",hash:"SHA-256",salt:e,info:(new TextEncoder).encode(n)},r,{name:ka,length:256},!1,["encrypt","decrypt"])}function Ea(t){return Pa(t,new Uint8Array,Ia)}function $a(t,e){return Pa(t,e,Ia)}async function Da(t,e,n=6e5){const r=await crypto.subtle.importKey("raw",(new TextEncoder).encode(t),"PBKDF2",!1,["deriveKey"]);return crypto.subtle.deriveKey({name:"PBKDF2",hash:"SHA-256",salt:e,iterations:n},r,{name:ka,length:256},!1,["encrypt","decrypt"])}const Ba=xa,Ta="chunks",Oa="metadata";class Ma{async open(){if(!this.db)return new Promise((t,e)=>{const n=indexedDB.open("swarm-utilization-store",4);n.onerror=()=>{e(new Error(`Failed to open IndexedDB: ${n.error}`))},n.onblocked=()=>{console.warn("[UtilizationStore] IndexedDB upgrade blocked by another open connection; waiting for it to close")},n.onsuccess=()=>{this.db=n.result,this.db.onversionchange=()=>{this.close()},t()},n.onupgradeneeded=t=>{const e=t.target.result;e.objectStoreNames.contains(Ta)&&e.deleteObjectStore(Ta),e.objectStoreNames.contains(Oa)&&e.deleteObjectStore(Oa);e.createObjectStore(Ta,{keyPath:["batchId","chunkIndex"]}).createIndex("batchId","batchId",{unique:!1}),e.createObjectStore(Oa,{keyPath:"batchId"})}})}async getChunk(t,e){return await this.open(),new Promise((n,r)=>{const i=this.db.transaction([Ta],"readonly").objectStore(Ta).get([t,e]);i.onsuccess=()=>{const r=i.result;r&&this.touchChunk(t,e).catch(t=>{console.warn("[UtilizationStore] Failed to update lastAccess:",t)}),n(r)},i.onerror=()=>{r(new Error(`Failed to get chunk: ${i.error}`))}})}async putChunk(t){return await this.open(),new Promise((e,n)=>{const r=this.db.transaction([Ta],"readwrite").objectStore(Ta),i={...t,lastAccess:Date.now()},s=r.put(i);s.onsuccess=()=>e(),s.onerror=()=>{n(new Error(`Failed to put chunk: ${s.error}`))}})}async getAllChunks(t){return await this.open(),new Promise((e,n)=>{const r=this.db.transaction([Ta],"readonly").objectStore(Ta).index("batchId").getAll(t);r.onsuccess=()=>{const t=r.result;t.sort((t,e)=>t.chunkIndex-e.chunkIndex),e(t)},r.onerror=()=>{n(new Error(`Failed to get all chunks: ${r.error}`))}})}async clearBatch(t){return await this.open(),new Promise((e,n)=>{const r=this.db.transaction([Ta,Oa],"readwrite"),i=r.objectStore(Ta),s=r.objectStore(Oa),a=i.index("batchId").openCursor(t);a.onsuccess=()=>{const t=a.result;t&&(t.delete(),t.continue())},s.delete(t),r.oncomplete=()=>e(),r.onerror=()=>{n(new Error(`Failed to clear batch: ${r.error}`))}})}async touchChunk(t,e){return await this.open(),new Promise((n,r)=>{const i=this.db.transaction([Ta],"readwrite"),s=i.objectStore(Ta),a=s.get([t,e]);a.onsuccess=()=>{const t=a.result;t&&(t.lastAccess=Date.now(),s.put(t))},i.oncomplete=()=>n(),i.onerror=()=>{r(new Error(`Failed to touch chunk: ${i.error}`))}})}async getMetadata(t){return await this.open(),new Promise((e,n)=>{const r=this.db.transaction([Oa],"readonly").objectStore(Oa).get(t);r.onsuccess=()=>e(r.result),r.onerror=()=>{n(new Error(`Failed to get metadata: ${r.error}`))}})}async putMetadata(t){return await this.open(),new Promise((e,n)=>{const r=this.db.transaction([Oa],"readwrite").objectStore(Oa).put(t);r.onsuccess=()=>e(),r.onerror=()=>{n(new Error(`Failed to put metadata: ${r.error}`))}})}close(){this.db&&(this.db.close(),this.db=void 0)}}function Ra(t){return t.publicKey().address().toHex().toLowerCase()}function Fa(t,e){!function(t){const e=qe+Le,n=qe+Ke;if(t.length<e||t.length>n)throw new ge("invalid-request",`Invalid chunk length: ${t.length} bytes (expected span plus payload, ${e} to ${n})`)}(t.data);const n=ke(t.data).toUint8Array();if("content"===t.kind)return{address:n};const r=new I("app"===t.signer?e.appSecret:t.signer.privateKey);if(e.internalOwners.has(Ra(r)))throw new ge("invalid-request","This single-owner chunk would be owned by one of the account's own keys, which never signs for an app.");const i=we(t.identifier),a=r.publicKey().address();return{address:s.Binary.keccak256(s.Binary.concatBytes(i,a.toUint8Array())),owner:a,signature:r.sign(s.Binary.concatBytes(i,n))}}function qa(t){return y(t).toHex()}const La=1/3,Ka=ae({count:le().int().nonnegative(),windowStart:le(),windowCount:le().int().nonnegative(),buckets:Ne(ue(),le().int().nonnegative())});function Na(t,e){return e>=t.windowStart&&e-t.windowStart<6e4}function Ha(t,e){return new ge("upload-unavailable",e,{reason:t})}function ja(t,e){return t.count>=1e4?Ha("app-stamp-count","This app has used its count limit of 10000 stamps on this stamp."):Na(t,e)&&t.windowCount>=60?Ha("app-stamp-rate","This app has reached its rate limit of 60 stamps per 60 seconds. Try again shortly."):void 0}function Wa(t,e){const n=ja(t,e.now);if(n)return n;const r=(i=e.laneCapacity,Math.floor(i*La));var i;return(t.buckets[e.bucket]??0)>=r?Ha("app-bucket-share",`This app has used its bucket share limit of ${r} stamps in this chunk's bucket.`):void 0}function za(t,e){const n=Na(t,e);return{...t,windowStart:n?t.windowStart:e,windowCount:n?t.windowCount+1:1}}function Ga(t,e,n){return{...za(t,n),count:t.count+1,buckets:{...t.buckets,[e]:(t.buckets[e]??0)+1}}}const Va=ae({slot:le().int().nonnegative(),timestampMs:le().int().nonnegative()}),Ja=ae({partition:le().int().nonnegative(),partitionCount:le().int().positive(),slots:Ne(ue(),Va)});function Za(t){return{partition:t.partition,partitionCount:t.partitionCount,slots:{}}}function Ya(t,e){if(null===t)return Za(e);try{const n=Ja.safeParse(JSON.parse(t));return n.success&&n.data.partition===e.partition&&n.data.partitionCount===e.partitionCount?n.data:Za(e)}catch{return Za(e)}}const _a="Stamp worker pool is terminated";class Qa{constructor(t,e,n){this.nextWorker=0,this.nextId=0,this.workers=t,this.size=t.length,this.issuer=e,this.stamper=n,this.batchId=n.batchId,this.assignSlot="assignSlot"in n?t=>n.assignSlot(t):t=>function(t,e){const n=e[0]<<8|e[1],r=t.buckets[n];if(r>=t.maxSlot)throw new Error("Bucket is full");return t.buckets[n]=r+1,r}(n,t)}static async create(t,e,n){const r=n??4,i=new Blob(['!function(){"use strict";var t,n={};var e=(t||(t=1,function(t){var n;async function e(t){return new Promise((n,e)=>t.then(e,n))}async function r(t){return new Promise(n=>setTimeout(()=>{n(!0)},t))}function i(t,n=Math.random){for(let e=t.length-1;e>0;e--){const r=Math.floor(n()*(e+1)),i=t[e];t[e]=t[r],t[r]=i}return t}function o(t,n,e=Math.random){return i(V(0,t.length-1),e).slice(0,n)}function s(t,n,e=Math.random){return Math.floor(e()*(n-t+1))+t}function u(t,n,e){return n>=t.x&&n<t.x+t.width&&e>=t.y&&e<t.y+t.height}function a(t,n=Math.random){return n()<t}function c(t,n=Math.random){return t[Math.floor(t.length*n())]}function l(t){if(!t.length)throw Error("Received empty array");return t[t.length-1]}function f(t,n,e){return e(n.reduce((t,n)=>n(t),t))}function h(t,n){if(null==t)return null;const e=n.split(".");let r=t;for(const t of e){if(null===r[t]||void 0===r[t])return null;r=r[t]}return r}function g(t,n,e){const r=n.split(/\\.|\\[/);let i=t;for(let t=0;t<r.length;t++){const n=r[t],o=t<r.length-1&&r[t+1].includes("]"),s=n.includes("]")?n.replace(/\\[|\\]/g,""):n;if(t===r.length-1)return i[s]=e,e;d(i[s])||(i[s]=o?[]:{}),i=i[s]}return e}function p(t,n){return Math.round(t/n)*n}function d(t,n=!0){return!(!t||n&&!w(t._readableState)||n&&t.constructor&&(t.constructor.isBuffer||"AbortController"==t.constructor.name||"AbortSignal"==t.constructor.name||"Uint8Array"==t.constructor.name||"ArrayBuffer"===t.constructor.name||"ReadableStream"===t.constructor.name))&&"object"==typeof t}function m(t){return d(t)&&!Array.isArray(t)}function y(t){return Array.isArray(t)&&0===t.length}function w(t){return void 0===t}function b(t){return"[object Function]"===Object.prototype.toString.call(t)||"[object AsyncFunction]"===Object.prototype.toString.call(t)}function x(t){return"[object String]"===Object.prototype.toString.call(t)}function $(t){return"number"==typeof t&&isFinite(t)}function v(t){return!0===t||!1===t}function E(t){return"[object Date]"===Object.prototype.toString.call(t)}function M(t){return!x(t)||0===t.trim().length}function A(t){return $(t)&&Number.isInteger(t)&&t>=1}function S(t){return x(t)&&null!==t.match(/^-?\\d+$/)}function k(t){return x(t)&&null!==t.match(/^(0x)?[0-9a-f]+$/i)}Object.defineProperty(t,"__esModule",{value:!0}),t.Vector=t.Cache=t.Assertions=t.Strings=t.Types=t.Objects=t.Dates=t.Promises=t.Numbers=t.System=t.Arrays=t.Random=t.Elliptic=t.Binary=t.Lock=t.Solver=t.RollingValueProvider=t.TrieRouter=t.AsyncQueue=t.PubSubChannel=t.FixedPointNumber=t.MerkleTree=t.Chunk=t.Uint8ArrayWriter=t.Uint8ArrayReader=t.AsyncLazy=t.Lazy=t.Optional=void 0;const O="!@#$%^&*()_+-=[]{}|;:<>?,./".split(""),T="abcdefghijklmnopqrstuvwxyz",B=T+"ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890",j=B+"!@#$%^&*()_+-=[]{}|;:<>?,./",C=["—","\\\\","東","京","都","𝖆","𝖇","𝖈","👾","🙇","💁","🙅","ᚠ","ᛇ","ᚻ","ᛦ"],D="0123456789abcdef";function I(t,n){if(M(t))throw new TypeError(`Expected string${n?.name?` for ${n.name}`:""}, got: `+t);if(n&&(void 0!==n.min&&t.length<n.min||void 0!==n.max&&t.length>n.max))throw RangeError(`Expected string${n?.name?` for ${n.name}`:""} length in range: ${n.min??"-inf"}..${n.max??"inf"}; got: ${t.length}`);return t}function U(t,n){if(void 0!==n.min&&t<n.min||void 0!==n.max&&t>n.max)throw RangeError(`Expected value${n?.name?` for ${n.name}`:""} in range: ${n.min??"-inf"}..${n.max??"inf"}; got: ${t}`)}function F(t,n){if($(t))return n&&U(t,n),t;if(!x(t)||!t.match(/^-?\\d+(\\.\\d+)?$/))throw new TypeError(`Expected number${n?.name?` for ${n.name}`:""}, got: `+t);const e=parseFloat(t);return n&&U(e,n),e}function N(t,n){return Math.trunc(F(t,n))}function P(t,n){if(!m(t))throw new TypeError(`Expected object${n?.name?` for ${n.name}`:""}, got: `+t);return t}function z(t){return x(t)&&null!==t.match(/^https?:\\/\\/.+/)}function L(t){return"bigint"==typeof t}function R(t,n){if(!L(t))throw new TypeError(`Expected bigint${n?.name?` for ${n.name}`:""}, got: `+t);if(void 0!==n?.min&&t<n?.min||void 0!==n?.max&&t>n?.max)throw RangeError(`Expected value${n?.name?` for ${n.name}`:""} in range: ${n.min??"-inf"}..${n.max??"inf"}; got: ${t}`);return t}function W(t,n){for(const[e,r]of Object.entries(n))if(!r(t[e]))throw TypeError(`${e} in value does not exist or match shape`);for(const e of Object.keys(t))if(!n[e])throw TypeError(`${e} exists in value but not in shape`);return!0}function q(t,n){if(m(t)&&m(n))for(const e in n)m(n[e])?(t[e]||(t[e]={}),q(t[e],n[e])):Array.isArray(n[e])?t[e]=[...n[e]]:(null!==n[e]&&void 0!==n[e]||null===t[e]||void 0===t[e])&&(t[e]=n[e]);return t}function H(t,n){const e={};for(const r of t)for(const t of Object.keys(r))e[t]?e[t]=n(e[t],r[t]):e[t]=r[t];return e}function K(t,n){Array.prototype.push.apply(t,n)}function V(t,n){const e=[];for(let r=t;r<=n;r++)e.push(r);return e}function J(t,n=()=>!1){return t.toLowerCase().normalize("NFD").replace(/[\\u0300-\\u036f]/g,"").split("").map(t=>/[a-z0-9]/.test(t)||n(t)?t:"-").join("").replace(/-+/g,"-").replace(/^-|-$/g,"")}function Z(t,n){if(0===n.length)return 0;const e=t.toLowerCase(),r=n.toLowerCase();return t===n?1e4:e.startsWith(r)?1e4-t.length:e.includes(r)?5e3-t.length:new RegExp(".*"+r.split("").join(".*")+".*").test(e)?1e3-t.length:0}const Q={"&":"&",""":\'"\',"'":"\'",">":">","<":"<"};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 Qa(o,d,e)}async stampChunkData(t,e=Date.now()){if(0===this.workers.length)throw new Error(_a);const i=t[0]<<8|t[1],a=this.assignSlot(t),o=new Uint8Array(8),c=new DataView(o.buffer);c.setUint32(0,i,!1),c.setUint32(4,a,!1);const d=new Uint8Array(8);new DataView(d.buffer).setBigUint64(0,1000000n*BigInt(e),!1);const u=s.Binary.concatBytes(t,this.batchId.toUint8Array(),o,d),l=await this.dispatchSign(u),h=s.Binary.hexToUint8Array(l);return{batchId:this.batchId,index:o,issuer:new r(this.issuer),signature:new n(h),timestamp:d}}dispatchSign(t){return new Promise((e,n)=>{const r=this.nextId++,i=this.workers[this.nextWorker++%this.workers.length];i.pending.set(r,{resolve:e,reject:n}),i.worker.postMessage({type:"sign",id:r,message:t})})}terminate(){for(const t of this.workers){t.worker.terminate();for(const[,e]of t.pending)e.reject(new Error(_a));t.pending.clear()}this.workers=[]}}function Xa(t){const e=!1!==t?.encrypt;return{content:e,manifest:e&&!1!==t?.encryptManifest}}function to(t,e,n){const r=[t.postageStampBatchID,e.defaultPostageStampBatchID].filter(t=>void 0!==t).map(t=>t.toHex());return n.filter(t=>r.includes(t.batchID.toHex()))}function eo(t,e=Date.now()){return function(t,e=Date.now()){const n=no(t,e);return void 0!==n&&n<=0}(t,e)?"stamp-expired":!1===t.usable||!1===t.exists?"stamp-not-usable":void 0}function no(t,e=Date.now()){if(void 0===t.batchTTL)return;const n=t.updatedAt??t.createdAt;return t.batchTTL-Math.max(0,Math.floor((e-n)/1e3))}function ro(t,e){const n=t=>Math.max(t.removedAt??0,t.lastSignedInAt??0),r=t=>t.nameUpdatedAt??0,i=new Map;for(const s of[...e,...t]){const t=i.get(s.deviceId);if(!t){i.set(s.deviceId,s);continue}const e=n(s)>=n(t)?s:t,a=e===s?t:s;i.set(s.deviceId,r(a)>r(e)?{...e,name:a.name,nameUpdatedAt:a.nameUpdatedAt}:e)}return Array.from(i.values())}function io(t,e,n){const r=t=>t.appUrl,i=t=>Math.max(t.revokedAt??0,t.disconnectedAt??0,t.lastConnectedAt??0),s=t=>t.postageStampBatchIDAt??0,a=new Map;for(const o of[...e,...t]){const t=a.get(r(o));if(!t){a.set(r(o),o);continue}const e=i(o)>=i(t)?o:t,c=e===o?t:o,d=s(c)>s(e)?{...e,postageStampBatchID:c.postageStampBatchID,postageStampBatchIDAt:c.postageStampBatchIDAt}:e,u=We(e.chatBinding,c.chatBinding,e.appUrl,n);a.set(r(o),u===e.chatBinding?d:{...d,chatBinding:u})}return Array.from(a.values())}function so(t,e){const n=t=>t.batchID.toHex(),r=t=>Math.max(t.deletedAt??0,t.updatedAt??0,t.createdAt),i=t=>t.nameUpdatedAt??0,s=new Map;for(const a of[...e,...t]){const t=s.get(n(a));if(!t){s.set(n(a),a);continue}const e=r(a)>=r(t)?a:t,o=e===a?t:a;s.set(n(a),i(o)>i(e)?{...e,name:o.name,nameUpdatedAt:o.nameUpdatedAt}:e)}return Array.from(s.values())}function ao(t,e){const n=`swarm-write-${t}`;return"undefined"!=typeof navigator&&navigator.locks?navigator.locks.request(n,{mode:"exclusive"},e):e()}const oo="";function co(t){const e=s.Binary.keccak256((new TextEncoder).encode(t));return s.Binary.uint8ArrayToHex(e.slice(0,8))}function uo(t,e){const n=s.Binary.keccak256((new TextEncoder).encode(t));return((n[0]<<24|n[1]<<16|n[2]<<8|n[3])>>>0)%e}function lo(t,e){return t.timestampMs!==e.timestampMs?t.timestampMs<e.timestampMs?-1:1:t.tiebreaker!==e.tiebreaker?t.tiebreaker<e.tiebreaker?-1:1:0}async function ho(t){const{bee:e,backupSigner:n,swarmEncryptionKey:r,batchId:i,partition:s}=t,a=fs(i,s),o=n.publicKey().address();try{const t=await ze(e,o,a,r),n=Ge.safeParse(JSON.parse((new TextDecoder).decode(t.payload)));return n.success?n.data:void console.debug(`[partition-lock] read p=${s}: SOC present but payload failed schema validation — treating as no lock`)}catch(t){const e=t instanceof Error?t.message:String(t);return void console.debug(`[partition-lock] read p=${s}: unreadable — ${e}`)}}async function po(t){const{bee:e,stamper:n,backupSigner:r,swarmEncryptionKey:i,batchId:s,partition:a,payload:o}=t,c=fs(s,a),d=(new TextEncoder).encode(JSON.stringify(o)),u={mode:"stamper",bee:e,stamper:n};await hs(u,r,c,d,{encryptionKey:i})}async function fo(t){const e=t.now??Date.now,n=t.wait??Ve,r=()=>Je(ho(t),t.readTimeoutMs??gs,"lock read timed out").catch(()=>{}),i=t.skipInitialRead?void 0:await r(),s=e();if(i&&i.holderDeviceId!==t.deviceId&&i.holderDeviceId!==oo&&i.leasedUntil>s)return{outcome:"blocked",payload:i};if(t.shouldAbort?.())return{outcome:"aborted",payload:i};const a=t.generation??{timestampMs:s,tiebreaker:co(t.deviceId)},o={holderDeviceId:t.deviceId,generation:a,acquiredAt:s,leasedUntil:s+t.ttlMs};await po({...t,payload:o}),await n(t.guardMs);const c=await r();return c?lo(c.generation,a)>0?{outcome:"lost-race",payload:c}:c.holderDeviceId!==t.deviceId?{outcome:"acquired",payload:o}:{outcome:"acquired",payload:c.leasedUntil>=o.leasedUntil?c:o}:{outcome:"acquired",payload:o}}const yo=gs,wo=bs;function go(t){return Math.floor(t/bs)}function mo(t,e,n,r){const i=s.Binary.keccak256((new TextEncoder).encode(`swarm-id-partition-intent-v1:${t.toHex()}:${e}:${n}:${r}`));return new x(i)}function bo(t,e,n,r,i){const a=mo(t,e,n,r);return s.Binary.keccak256(s.Binary.concatBytes(a.toUint8Array(),i.toUint8Array()))}function vo(t,e,n){const r=s.Binary.keccak256((new TextEncoder).encode(`swarm-id-partition-occupancy-v1:${t.toHex()}:${e}:${n}`));return new x(r)}function So(t,e,n,r){const i=vo(t,e,n);return s.Binary.keccak256(s.Binary.concatBytes(i.toUint8Array(),r.toUint8Array()))}async function ko(t){const e=mo(t.batchId,t.partition,t.deviceId,t.epochBucket),n=t.backupSigner.publicKey().address(),r=bo(t.batchId,t.partition,t.deviceId,t.epochBucket,n),i={deviceId:t.deviceId,generation:t.generation,...void 0!==t.leasedUntil?{leasedUntil:t.leasedUntil}:{}};await xo({bee:t.bee,stamper:t.stamper,backupSigner:t.backupSigner,swarmEncryptionKey:t.swarmEncryptionKey,partition:t.partition,identifier:e,address:r,payload:i})}async function xo(t){const e=(new TextEncoder).encode(JSON.stringify(t.payload)),n={mode:"stamper",bee:t.bee,stamper:t.stamper},r=t.stamper;r instanceof Gs?await r.withIntentSocSlot(t.address,t.partition,()=>hs(n,t.backupSigner,t.identifier,e,{encryptionKey:t.swarmEncryptionKey})):await hs(n,t.backupSigner,t.identifier,e,{encryptionKey:t.swarmEncryptionKey})}const Io=t=>t instanceof Error&&/status code 5\d\d/.test(t.message);async function Ao(t){const e=()=>Je(ze(t.bee,t.owner,t.identifier,t.swarmEncryptionKey),t.timeoutMs??yo,"intent read timed out");for(let n=0;n<2;n++)try{const n=await e(),r=Ze.safeParse(JSON.parse((new TextDecoder).decode(n.payload)));return r.success?(console.debug(`[partition-intent] ${t.logLabel}: FOUND (gen ts=${r.data.generation.timestampMs} leasedUntil=${r.data.leasedUntil??"none"})`),r.data):void console.debug(`[partition-intent] ${t.logLabel}: malformed`)}catch(e){if(Io(e)&&0===n&&!1!==t.retryOn5xx)continue;const r=e instanceof Ye;return void console.debug(`[partition-intent] ${t.logLabel}: ${r?`TIMEOUT (>${t.timeoutMs??yo}ms)`:`missing (${e instanceof Error?e.message:String(e)})`}${Io(e)?" after 5xx retry":""} — treated as no-intent`)}}async function Co(t){return Ao({bee:t.bee,owner:t.backupSigner.publicKey().address(),identifier:mo(t.batchId,t.partition,t.deviceId,t.epochBucket),swarmEncryptionKey:t.swarmEncryptionKey,timeoutMs:t.timeoutMs,retryOn5xx:t.retryOn5xx,logLabel:`read device=${t.deviceId} p=${t.partition} bucket=${t.epochBucket}`})}async function Uo(t){return Ao({bee:t.bee,owner:t.backupSigner.publicKey().address(),identifier:vo(t.batchId,t.partition,t.epochBucket),swarmEncryptionKey:t.swarmEncryptionKey,timeoutMs:t.timeoutMs,logLabel:`occupancy p=${t.partition} bucket=${t.epochBucket}`})}const Po=new Uint8Array(64),Eo=ae({counters:_e(Uint32Array).refine(t=>t.length===xs,{message:"counters must have 65536 entries"})});function $o(t,e){const n=new Uint8Array(4);new DataView(n.buffer).setUint32(0,e,!1);const r=s.Binary.keccak256(s.Binary.concatBytes((new TextEncoder).encode("swarm-id-partition-state-v1"),t.toUint8Array(),n));return new ht(r)}const Do=bs,Bo=Symbol("state-pointer-read-timed-out");function To(t){return Math.floor(t/Do)}const Oo=ae({referenceHex:ue()});function Mo(t,e){const n=new Uint8Array(8);return new DataView(n.buffer).setBigUint64(0,BigInt(e),!1),new x(s.Binary.keccak256(s.Binary.concatBytes(t.toUint8Array(),n)))}async function Ro(t){const e=Mo($o(t.batchId,t.partition),To(t.nowMs)),n=t.backupSigner.publicKey().address(),r=Fo(e,n),i=(new TextEncoder).encode(JSON.stringify({referenceHex:t.referenceHex})),s={mode:"stamper",bee:t.bee,stamper:t.stamper};t.stamper instanceof Gs?await t.stamper.withIntentSocSlot(r,t.partition,()=>hs(s,t.backupSigner,e,i,{encryptionKey:t.swarmEncryptionKey})):await hs(s,t.backupSigner,e,i,{encryptionKey:t.swarmEncryptionKey})}function Fo(t,e){return s.Binary.keccak256(s.Binary.concatBytes(t.toUint8Array(),e.toUint8Array()))}function qo(t,e,n,r){return Fo(Mo($o(t,e),To(r)),n)}async function Lo(t){const e=$o(t.batchId,t.partition),n=new Set,r=To(t.nowMs);if(n.add(r),n.add(r-1),void 0!==t.holderLeasedUntilMs){const e=To(t.holderLeasedUntilMs);for(let r=To(t.holderLeasedUntilMs-ms)-2;r<=e;r++)n.add(r)}const i=Array.from(n).sort((t,e)=>e-t),s=await Promise.all(i.map(async n=>{const r=Mo(e,n);try{const e=await Je(ze(t.bee,t.owner,r,t.swarmEncryptionKey),2500,"state-pointer read timed out"),n=Oo.safeParse(JSON.parse((new TextDecoder).decode(e.payload)));return n.success?n.data:void 0}catch(t){return t instanceof Ye?Bo:void 0}}));for(let t=0;t<s.length;t++){const e=s[t];if(void 0!==e&&e!==Bo){return{pointer:e,inconclusive:s.slice(0,t).some(t=>t===Bo)}}}return{pointer:void 0,inconclusive:s.some(t=>t===Bo)}}async function Ko(t,e,n){const r=await Qe(t,new m(e).toHex()),i=64*n;if(r.length!==i)throw new Error(`reference chunk has ${r.length} bytes, expected ${i} (${n} × 64)`);return Array.from({length:n},(t,e)=>r.slice(64*e,64*(e+1)))}function No(t){for(let e=0;e<t.length;e++)if(0!==t[e])return!1;return!0}function Ho(t,e){let n=be(t);for(;e.has(Es(n.address.toUint8Array()));)n=be(t);const r=n.address.toUint8Array();return e.add(Es(r)),{address:r,reference:n.reference.toUint8Array(),data:n.data}}function jo(t){for(let e=0;e<t.length;e++)if(0!==t[e])return!1;return!0}class Wo{constructor(t){this.opts=t,this.holders=new Map,this.releasedPartitions=new Map,this.lastSeenLeasedUntil=new Map,this.unreadableLocks=new Set,this.closed=!1,this.pendingBeaconPublish=Promise.resolve()}static async fromSwarmEncryptionKey(t){const e=ye(t.swarmEncryptionKey),n=await Ae(e,Ue),r=new I(n);return new Wo({...t,backupSigner:r,get bee(){return t.bee}})}async refreshFromSwarm(t){const e=this.now();this.holders.clear(),this.releasedPartitions.clear(),this.lastSeenLeasedUntil.clear(),this.unreadableLocks.clear();const n=await Promise.all(Array.from({length:t},(t,e)=>Je(ho({bee:this.opts.bee,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e}),2500,"lock read timed out").catch(()=>{this.unreadableLocks.add(e)})));for(let r=0;r<t;r++){const t=n[r];if(!t){console.debug(`[PartitionLease] refresh p=${r}: no readable lock`);continue}if(t.holderDeviceId===oo){console.debug(`[PartitionLease] refresh p=${r}: released sentinel`),this.releasedPartitions.set(r,t.generation),this.lastSeenLeasedUntil.set(r,t.leasedUntil);continue}const i=t.holderDeviceId===this.opts.deviceId?" (self)":"";t.leasedUntil<=e?(console.debug(`[PartitionLease] refresh p=${r}: EXPIRED holder ${t.holderDeviceId}${i} (until ${t.leasedUntil} <= now ${e})`),this.lastSeenLeasedUntil.set(r,t.leasedUntil)):(console.debug(`[PartitionLease] refresh p=${r}: held by ${t.holderDeviceId}${i} until ${t.leasedUntil}`),this.holders.set(r,{deviceId:t.holderDeviceId,generation:t.generation,acquiredAt:t.acquiredAt,leasedUntil:t.leasedUntil}))}const r=Array.from(this.holders.entries()).map(([t,e])=>`${t}->${e.deviceId}`).join(",");console.debug(`[PartitionLease] refresh: live holders={${r}} self=${this.opts.deviceId}`)}async refreshHoldersFromPresence(t){this.applyPresence(await this.readPresence(t))}async readPresence(t){const e=this.now(),n=(this.opts.knownDeviceIds?.()??[]).filter(t=>t!==this.opts.deviceId);if(0===n.length)return[];const r=go(e),i=[r,r-1];return Promise.all(Array.from({length:t}).flatMap((t,e)=>n.flatMap(t=>i.map(async n=>({partition:e,deviceId:t,bucket:n,intent:await Co({bee:this.opts.bee,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e,deviceId:t,epochBucket:n,timeoutMs:this.opts.intentReadTimeoutMs})})))))}applyPresence(t){const e=this.now();for(const{partition:n,deviceId:r,bucket:i,intent:s}of t){if(!s)continue;if(this.releasedPartitions.has(n))continue;if(void 0===s.leasedUntil||s.leasedUntil<=e-wo)continue;const t=s.leasedUntil,a=this.holders.get(n);a&&a.deviceId===this.opts.deviceId||(!a||t>a.leasedUntil)&&(this.holders.set(n,{deviceId:r,generation:s.generation,acquiredAt:a?.acquiredAt??0,leasedUntil:t}),console.debug(`[PartitionLease] presence p=${n}: live holder ${r} (bucket ${i}, leasedUntil ${t})`))}}async refreshHoldersFromOccupancy(t){this.applyOccupancy(await this.readOccupancy(t))}async readOccupancy(t){const e=go(this.now()),n=[e,e-1];return Promise.all(Array.from({length:t}).flatMap((t,e)=>n.map(async t=>({partition:e,occupancy:await Uo({bee:this.opts.bee,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e,epochBucket:t,timeoutMs:this.opts.intentReadTimeoutMs})}))))}applyOccupancy(t){const e=this.now();for(const{partition:n,occupancy:r}of t){if(!r||void 0===r.leasedUntil)continue;if(r.leasedUntil<=e)continue;if(r.deviceId===this.opts.deviceId)continue;if(this.releasedPartitions.has(n))continue;const t=this.holders.get(n);t&&t.deviceId===this.opts.deviceId||(!t||r.leasedUntil>t.leasedUntil)&&(this.holders.set(n,{deviceId:r.deviceId,generation:r.generation,acquiredAt:t?.acquiredAt??0,leasedUntil:r.leasedUntil}),console.debug(`[PartitionLease] occupancy p=${n}: live holder ${r.deviceId} (leasedUntil ${r.leasedUntil})`))}}isActive(t){for(const e of this.holders.values())if(e.deviceId===t)return!0;return!1}heldPartition(){for(const[t,e]of this.holders)if(e.deviceId===this.opts.deviceId)return t}getHolders(){return Array.from(this.holders.entries()).map(([t,e])=>({partition:t,deviceId:e.deviceId,leasedUntil:e.leasedUntil}))}pickFreeOrExpired(t){const e=uo(this.opts.deviceId,t);for(let n=0;n<t;n++){const r=(e+n)%t,i=this.holders.get(r);if(!i||i.deviceId===this.opts.deviceId)return r}}async acquire(t){const{partitionCount:e}=t;if(this.closed=!1,this.publishedReferences=void 0,this.publishedCounter=void 0,this.lastReferenceHex=void 0,this.lastFullPublishEpoch=void 0,e<=1)return{partition:void 0,partitionCount:1,localCounter:new Uint32Array(xs),isReadOnly:!1};const n=this.now(),r=uo(this.opts.deviceId,e),[,i,s,a]=await Promise.all([this.refreshFromSwarm(e),this.readPresence(e),this.readOccupancy(e),this.speculativeStatePointer(r,n)]);this.applyPresence(i),this.applyOccupancy(s);const o=this.heldPartition(),c=o??this.pickFreeOrExpired(e),d=!(this.opts.knownDeviceIds?.()??[]).some(t=>t!==this.opts.deviceId)&&Array.from(this.holders.values()).every(t=>t.deviceId===this.opts.deviceId)&&0===this.releasedPartitions.size&&0===this.lastSeenLeasedUntil.size&&0===this.unreadableLocks.size;return console.debug(`[PartitionLease] acquire: chosen=${c} via=${void 0!==o?"held(re-acquire)":"pickFreeOrExpired"} home=${uo(this.opts.deviceId,e)} liveHolders=${this.holders.size} partitionCount=${e}`),void 0===c?{partition:void 0,partitionCount:e,localCounter:new Uint32Array(xs),isReadOnly:!0}:this.claimPartition({partition:c,partitionCount:e,freshClaim:void 0===o,nowMs:n,speculativePointer:c===r?a:void 0,soloClean:d})}async speculativeStatePointer(t,e){const{batchId:n}=this.opts;try{return await Lo({bee:this.opts.bee,owner:this.opts.backupSigner.publicKey().address(),swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:n,partition:t,nowMs:e})}catch{return}}async claimPartition(t){const{partition:e,partitionCount:n,freshClaim:r}=t,{stamper:i,batchId:a,batchDepth:o}=this.requireWriteContext(),c=i instanceof Gs?await i.getSyncedReference(e):void 0,d=await async function(t,e){const{bee:n,owner:r,swarmEncryptionKey:i,batchId:a,partition:o,batchDepth:c,holderLeasedUntilMs:d,lockUnreadable:u,nowMs:l=Date.now()}=t,h=void 0===d?t.prefetchedPointer:void 0,{pointer:p,inconclusive:f}=h??await Lo({bee:n,owner:r,swarmEncryptionKey:i,batchId:a,partition:o,nowMs:l,holderLeasedUntilMs:d});if(!p)return u||f&&void 0!==d?(console.warn(`[partition-state] partition ${o}: no pointer found but the read was inconclusive (lockUnreadable=${!0===u} pointerTimedOut=${f}); degrading to read-only instead of resuming.`),{unchanged:!1,readFailed:!0}):void 0!==e?{referenceHex:e,unchanged:!0}:{localCounter:new Uint32Array(xs),unchanged:!1};if(f)return console.warn(`[partition-state] partition ${o}: found a pointer but a newer bucket read timed out (a fresher resume point may be hidden); degrading to read-only instead of resuming from a stale candidate.`),{unchanged:!1,readFailed:!0};const y=p.referenceHex,w=new m(y).toUint8Array();if(void 0!==e&&y===e){const{numUtilizationChunks:t}=Ps(c);return{referenceHex:y,unchanged:!0,references:await Ko(n,w,t).catch(()=>{})}}const g=new Uint32Array(xs),b=[Es(w.slice(0,32))];let v=[];try{const{numUtilizationChunks:t}=Ps(c);v=await Ko(n,w,t);const e=await Promise.all(v.map((t,e)=>No(t)?void 0:Qe(n,s.Binary.uint8ArrayToHex(t)).then(n=>({i:e,ref:t,data:n}))));for(const t of e)void 0!==t&&(Bs(g,t.i,t.data,c),b.push(Es(t.ref.slice(0,32))));Eo.parse({counters:g})}catch(t){return console.warn(`[partition-state] reading partition ${o} counter failed; degrading to read-only:`,t),{unchanged:!1,readFailed:!0}}return{localCounter:g,referenceHex:y,unchanged:!1,stateBuckets:b,references:v}}({bee:this.opts.bee,owner:this.opts.backupSigner.publicKey().address(),swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:a,partition:e,batchDepth:o,holderLeasedUntilMs:this.holders.get(e)?.leasedUntil??this.lastSeenLeasedUntil.get(e),lockUnreadable:this.unreadableLocks.has(e),nowMs:t.nowMs,prefetchedPointer:t.speculativePointer},c);if(d.readFailed)return console.debug(`[PartitionLease] Partition ${e} state read failed; falling back to read-only without claiming.`),{partition:void 0,partitionCount:n,localCounter:new Uint32Array(xs),isReadOnly:!0};const u=d.unchanged&&i instanceof Gs?i.buildLeaseLocalCounter():d.localCounter??new Uint32Array(xs),l={timestampMs:this.now(),tiebreaker:co(this.opts.deviceId)},h=this.opts.knownDeviceIds?.()??[],p=h.some(t=>t!==this.opts.deviceId);if(console.debug(`[PartitionLease] claim p=${e} self=${this.opts.deviceId} freshClaim=${r} knownDevices=${h.length} intentRound=${r&&p}`),r&&p){if("lose"===await async function(t){const e=t.knownDeviceIds.filter(e=>e!==t.deviceId);if(0===e.length)return"win";const n=go(t.now),r=n-1;await ko({bee:t.bee,stamper:t.stamper,backupSigner:t.backupSigner,swarmEncryptionKey:t.swarmEncryptionKey,batchId:t.batchId,partition:t.partition,deviceId:t.deviceId,epochBucket:n,generation:t.generation});const i=async()=>{const i=await Promise.all(e.flatMap(e=>[n,r].map(async n=>({rivalId:e,intent:await Co({bee:t.bee,backupSigner:t.backupSigner,swarmEncryptionKey:t.swarmEncryptionKey,batchId:t.batchId,partition:t.partition,deviceId:e,epochBucket:n,timeoutMs:t.timeoutMs,retryOn5xx:!1})}))));for(const e of i){const n=e.intent;if(n)if(void 0===n.leasedUntil){if(lo(n.generation,t.generation)<0)return{rivalId:e.rivalId,reason:"earlier-intent"}}else if(n.leasedUntil>t.now-wo){if(t.releasedGeneration&&lo(n.generation,t.releasedGeneration)<=0)continue;return{rivalId:e.rivalId,reason:"live-beacon"}}}},s=t.guardWindowMs??0,a=t.guardPollMs??2500,o=Date.now()+s;let c,d=0;do{if(d>0&&await Ve(a),d++,c=await i(),c)break}while(Date.now()<o);const u=c?"lose":"win";return console.debug(`[partition-intent] round p=${t.partition} self=${t.deviceId} rivals=${e.length} polls=${d} → ${u}`+(c?` (beaten by ${c.rivalId} via ${c.reason})`:"")),u}({bee:this.opts.bee,stamper:i,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e,deviceId:this.opts.deviceId,generation:l,knownDeviceIds:h,now:this.now(),timeoutMs:this.opts.intentReadTimeoutMs,guardWindowMs:this.opts.intentGuardWindowMs??12e3,guardPollMs:this.opts.intentGuardPollMs??2500,releasedGeneration:this.releasedPartitions.get(e)}))return console.debug(`[PartitionLease] Lost intent round for partition ${e}; falling back to read-only.`),{partition:void 0,partitionCount:n,localCounter:new Uint32Array(xs),isReadOnly:!0}}const f=await fo({bee:this.opts.bee,stamper:i,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e,deviceId:this.opts.deviceId,ttlMs:ms,guardMs:t.soloClean?0:this.opts.guardMs??2e3,wait:this.opts.wait,generation:l,now:()=>this.now(),skipInitialRead:!0});if("acquired"!==f.outcome||!f.payload)return console.debug(`[PartitionLease] Lock acquire for partition ${e} outcome=${f.outcome}; falling back to read-only.`),{partition:void 0,partitionCount:n,localCounter:new Uint32Array(xs),isReadOnly:!0};!d.unchanged&&d.referenceHex&&i instanceof Gs&&(await i.setSyncedReference(e,d.referenceHex),d.stateBuckets&&await i.setProtectedStateBuckets(e,d.stateBuckets)),this.publishedReferences=d.references,this.publishedCounter=u.slice(),this.lastFullPublishEpoch=go(this.now()),this.lastReferenceHex=d.referenceHex;const y=f.payload;return this.self={partition:e,generation:y.generation,acquiredAt:y.acquiredAt,leasedUntil:y.leasedUntil},this.holders.set(e,{deviceId:this.opts.deviceId,generation:y.generation,acquiredAt:y.acquiredAt,leasedUntil:y.leasedUntil}),this.pendingBeaconPublish=this.publishPresenceBeacon(e,y.generation,y.leasedUntil),{partition:e,partitionCount:n,localCounter:u,isReadOnly:!1,lockPayload:y}}get beaconPublishSettled(){return this.pendingBeaconPublish}async refresh(){if(!this.self)return"lost";if(await this.pendingBeaconPublish,!this.self)return"lost";const t=this.self.partition,{stamper:e}=this.requireWriteContext(),n=await fo({bee:this.opts.bee,stamper:e,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:t,deviceId:this.opts.deviceId,ttlMs:ms,guardMs:this.opts.guardMs??2e3,wait:this.opts.wait,generation:this.self.generation,now:()=>this.now(),shouldAbort:()=>this.closed});if(!this.self)return"lost";if("acquired"!==n.outcome||!n.payload)return console.debug(`[PartitionLease] Refresh on partition ${t} returned ${n.outcome}.`),"lost";const r=n.payload;return this.self={partition:t,generation:r.generation,acquiredAt:r.acquiredAt,leasedUntil:r.leasedUntil},await this.publishPresenceBeacon(t,r.generation,r.leasedUntil),await this.foreignBeaconBeatsUs(t,r.generation)||await this.occupancyBeaconBeatsUs(t,r.generation)?(console.debug(`[PartitionLease] Refresh on partition ${t}: an earlier-generation peer holds it; yielding.`),"displaced"):"held"}async foreignBeaconBeatsUs(t,e){const n=this.now(),r=(this.opts.knownDeviceIds?.()??[]).filter(t=>t!==this.opts.deviceId);if(0===r.length)return!1;const i=go(n);return(await Promise.all(r.flatMap(e=>[i,i-1].map(n=>Co({bee:this.opts.bee,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:t,deviceId:e,epochBucket:n,timeoutMs:this.opts.intentReadTimeoutMs}))))).some(r=>void 0!==r?.leasedUntil&&r.leasedUntil>n-wo&&lo(r.generation,e)<0&&this.beaconOutranksRelease(t,r.generation))}beaconOutranksRelease(t,e){const n=this.releasedPartitions.get(t);return void 0===n||lo(e,n)>0}async occupancyBeaconBeatsUs(t,e){const n=this.now(),r=go(n);return(await Promise.all([r,r-1].map(e=>Uo({bee:this.opts.bee,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:t,epochBucket:e,timeoutMs:this.opts.intentReadTimeoutMs})))).some(r=>void 0!==r&&r.deviceId!==this.opts.deviceId&&void 0!==r.leasedUntil&&r.leasedUntil>n-wo&&lo(r.generation,e)<0&&this.beaconOutranksRelease(t,r.generation))}async publishPresenceBeacon(t,e,n){const{stamper:r}=this.requireWriteContext(),i=go(this.now());try{await ko({bee:this.opts.bee,stamper:r,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:t,deviceId:this.opts.deviceId,epochBucket:i,generation:e,leasedUntil:n}),await async function(t){const e=vo(t.batchId,t.partition,t.epochBucket),n=t.backupSigner.publicKey().address(),r=So(t.batchId,t.partition,t.epochBucket,n),i={deviceId:t.deviceId,generation:t.generation,leasedUntil:t.leasedUntil};await xo({bee:t.bee,stamper:t.stamper,backupSigner:t.backupSigner,swarmEncryptionKey:t.swarmEncryptionKey,partition:t.partition,identifier:e,address:r,payload:i})}({bee:this.opts.bee,stamper:r,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:t,deviceId:this.opts.deviceId,epochBucket:i,generation:e,leasedUntil:n})}catch(e){console.debug(`[PartitionLease] presence beacon publish failed for p=${t} (self-heals next tick):`,e)}}async release(t){if(!this.self)return;const{partition:e,generation:n,acquiredAt:r}=this.self;this.closed=!0,await this.pendingBeaconPublish;const{stamper:i}=this.requireWriteContext();await this.flushState(e,t),await async function(t){const e=t.now??Date.now,n=await ho(t);if(n){const e=e=>(console.info(`[partition-lock] Skipping release sentinel for partition ${t.partition}: ${e}.`,n),{outcome:"skipped",observed:n});if(n.holderDeviceId===oo)return e("already released");if(n.holderDeviceId!==t.deviceId)return e("a peer holds the partition");if(lo(n.generation,t.releasedGeneration)>0)return e("a newer own claim exists (successor re-acquired)")}const r={holderDeviceId:oo,generation:t.releasedGeneration,acquiredAt:t.acquiredAt,leasedUntil:e()};return await po({...t,payload:r}),{outcome:"released",observed:n}}({bee:this.opts.bee,stamper:i,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:this.opts.batchId,partition:e,deviceId:this.opts.deviceId,releasedGeneration:n,acquiredAt:r,now:()=>this.now()}),this.self=void 0,this.holders.delete(e)}async publishState(t){this.self&&await this.flushState(this.self.partition,t)}async flushState(t,e,n){const{stamper:r,batchId:i,batchDepth:a}=this.requireWriteContext(),o=go(this.now()),c=!0===n?.forceFull||o!==this.lastFullPublishEpoch,d=await async function(t){const{bee:e,stamper:n,batchId:r,batchDepth:i,partition:a,localCounter:o,backupSigner:c,swarmEncryptionKey:d,previousReferences:u,previousCounter:l,deviceId:h,nowMs:p=Date.now()}=t;Eo.parse({counters:o});const{numUtilizationChunks:f}=Ps(i),y={mode:"stamper",bee:e,stamper:n},w=c.publicKey().address(),g=n instanceof Gs?n:void 0,m=o.slice(),b=void 0!==u&&u.length===f&&void 0!==l;if(void 0!==l)for(let t=0;t<xs;t++)if(o[t]<l[t])throw new Error(`[partition-state] publish p=${a}: counter regressed at bucket ${t} (${o[t]} < previous ${l[t]}) — monotonicity violation; refusing to publish a state a takeover could resume past an acked slot.`);const v=Array.from({length:f},(t,e)=>e),S=b?v.filter(t=>!function(t,e){if(t.length!==e.length)return!1;for(let n=0;n<t.length;n++)if(t[n]!==e[n])return!1;return!0}(Ds(o,t,i),Ds(l,t,i))):v.filter(t=>!No(Ds(o,t,i))),k=new Set(S),x=b?u.map(t=>t.slice()):v.map(()=>Po.slice()),I=new Set([ws(r,a,w),...g?.getCleanChunkBuckets()??[]]);if(b)for(let t=0;t<f;t++)k.has(t)||No(x[t])||I.add(Es(x[t].slice(0,32)));const A=p;for(const t of[A,A-Do])I.add(Es(qo(r,a,w,t)));const C=go(A);for(const t of[C,C-1])I.add(Es(So(r,a,t,w))),void 0!==h&&I.add(Es(bo(r,a,h,t,w)));const U=S.map(t=>{const e=Ho(Ds(o,t,i),I);return x[t]=e.reference,g?.markReservedUtilizationChunk(e.address,a),{data:e.data}}),P=Ho(s.Binary.concatBytes(...x),I);g?.markReservedUtilizationChunk(P.address,a);const E=s.Binary.uint8ArrayToHex(P.reference),$=[...S.map(t=>Es(x[t].slice(0,32))),Es(P.address)];if(new Set($).size!==$.length)throw new Error(`[partition-state] publish p=${a}: reserved-slot chunks collided on a bucket — parallel PUTs would race/evict. This is a bucket-selection regression (pickReservedChunkKey / claimedBuckets).`);const D=Date.now();await Promise.all([...U.map(t=>ps(y,t.data,{deferred:!1})),ps(y,P.data,{deferred:!1})]),await Ro({bee:e,stamper:n,backupSigner:c,swarmEncryptionKey:d,batchId:r,partition:a,referenceHex:E,nowMs:A}),console.debug(`[partition-state] publish p=${a} incremental=${b} counterChunks=${U.length}/${f} writes=${U.length+2} durationMs=${Date.now()-D}`),g?.clearReservedUtilizationChunks();const B=x.filter(t=>!No(t)).map(t=>Es(t.slice(0,32)));return B.push(Es(P.address)),{referenceHex:E,stateBuckets:B,references:x,publishedCounter:m}}({bee:this.opts.bee,stamper:r,batchId:i,batchDepth:a,partition:t,localCounter:e,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,previousReferences:c?void 0:this.publishedReferences,previousCounter:c?void 0:this.publishedCounter,deviceId:this.opts.deviceId,nowMs:this.now()});c&&(this.lastFullPublishEpoch=o),this.publishedReferences=d.references,this.publishedCounter=d.publishedCounter,this.lastReferenceHex=d.referenceHex,r instanceof Gs&&(await r.setSyncedReference(t,d.referenceHex),await r.setProtectedStateBuckets(t,d.stateBuckets))}seedReferenceHex(t){this.lastReferenceHex=t}async heartbeatStatePointer(t){if(!this.self||void 0===this.lastReferenceHex)return;const{stamper:e,batchId:n}=this.requireWriteContext();void 0!==t&&this.retainedChunksCollideThisEpoch(this.self.partition)?await this.flushState(this.self.partition,t,{forceFull:!0}):await Ro({bee:this.opts.bee,stamper:e,backupSigner:this.opts.backupSigner,swarmEncryptionKey:this.opts.swarmEncryptionKey,batchId:n,partition:this.self.partition,referenceHex:this.lastReferenceHex,nowMs:this.now()})}retainedChunksCollideThisEpoch(t){if(void 0===this.publishedReferences)return!1;const e=this.opts.backupSigner.publicKey().address(),{batchId:n}=this.requireWriteContext(),r=this.now(),i=go(r),s=new Set([ws(n,t,e),Es(qo(n,t,e,r)),Es(So(n,t,i,e)),Es(bo(n,t,this.opts.deviceId,i,e))]);for(const t of this.publishedReferences)if(!jo(t)&&s.has(Es(t.slice(0,32))))return!0;if(void 0!==this.lastReferenceHex){const t=new m(this.lastReferenceHex).toUint8Array().slice(0,32);if(s.has(Es(t)))return!0}return!1}get currentPartition(){return this.self?.partition}get leasedUntil(){return this.self?.leasedUntil}bumpLocalLease(t){this.self&&(this.self={...this.self,leasedUntil:this.now()+t})}adoptIfLive(){if(this.self&&!(this.self.leasedUntil<=this.now()))return this.self={...this.self,leasedUntil:this.now()+ms},this.holders.set(this.self.partition,{deviceId:this.opts.deviceId,generation:this.self.generation,acquiredAt:this.self.acquiredAt,leasedUntil:this.self.leasedUntil}),this.self.partition}serialize(){return{deviceId:this.opts.deviceId,batchId:this.opts.batchId.toHex(),self:this.self}}hydrate(t){t.deviceId===this.opts.deviceId&&t.batchId===this.opts.batchId.toHex()&&(this.self=t.self)}requireWriteContext(){if(!this.opts.stamper||void 0===this.opts.batchDepth)throw new Error("PartitionLease: write operation requires stamper + batchDepth (read-only instance)");return{stamper:this.opts.stamper,batchId:this.opts.batchId,batchDepth:this.opts.batchDepth}}now(){return this.opts.now?this.opts.now():Date.now()}}class zo extends Error{constructor(t="All partitions are held by other devices.",e){super(t),this.accountId=e,this.name="PartitionContendedError"}}function Go(t,e,n){return void 0!==t&&t.holderDeviceId!==n&&t.holderDeviceId!==oo&&t.leasedUntil>e}class Vo{constructor(t){this.readOnly=!1,this.pendingAcquire=!1,this.lastLeaseValidatedAt=0,this.lastLeaseActivityAt=0,this.activeUploadCount=0,this.pointerHeartbeatFailingSince=void 0,this.disposed=!1,this.leaseEpoch=0,this.deps=t}get currentPartition(){return this.partitionLease?.currentPartition}get isReadOnly(){return this.readOnly}get partitionCount(){return this.deps.partitionCount}get stamperRef(){return this.deps.stamper}get accountId(){return this.deps.accountId}get batchId(){return this.deps.batchId}async withWrite(t,e){const n=e?.wait??("persistent"===this.deps.mode?"block":"skip");return this.lockAndFlush(async()=>{await this.ensureLease(n),this.ensureHeldForUpload();const r=await this.buildStamperTarget(e);this.lastLeaseActivityAt=Date.now(),this.activeUploadCount++;try{const e=await t(r);await this.ensureLeaseStillValid();const n=this.deps.stamper.getLocalCounter();if(void 0!==n)await(this.partitionLease?.publishState(n)),this.pointerHeartbeatFailingSince=void 0;else if(void 0!==this.currentPartition)throw new Error(`[BatchWriteCoordinator] Held partition ${this.currentPartition} but the stamper exposed no local counter — cannot publish the slot reservation (ack-after-publish); failing the upload.`);return e}finally{this.activeUploadCount--,this.lastLeaseActivityAt=Date.now()}})}startLease(){this.disposed||"persistent"===this.deps.mode&&(this.deps.partitionCount<=1||(this.pendingAcquire=!0,this.lockAndFlush(()=>this.ensureLease("block")).catch(t=>console.warn("[BatchWriteCoordinator] Background lease warm-up failed:",t))))}teardown(){this.disposed=!0,this.leaseEpoch++,void 0!==this.partitionRefreshTimer&&(clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=void 0),this.slotWait?.wake?.();const t=this.partitionLease,e=t?.currentPartition,n=this.deps.stamper;if(t){const e=n.getLocalCounter();void 0!==e&&this.lock(()=>t.release(e)).catch(t=>console.warn("[BatchWriteCoordinator] Partition lease release failed:",t)),n.invalidateLease(),n.unbindPartition()}this.partitionLease=void 0,this.readOnly=!1,this.lastLeaseValidatedAt=0,this.deps.writeLeaseCache?.(void 0),this.emitLeaseChange(),void 0!==e&&this.deps.onLeaseReleased?.(e)}async ensureLease(t){try{if(this.deps.partitionCount<=1)return;if(this.disposed)throw new Error("BatchWriteCoordinator has been torn down.");if(this.pendingAcquire||this.partitionLease&&!this.readOnly||(this.pendingAcquire=!0),this.pendingAcquire){if(this.pendingAcquire=!1,"skip"===t){if(await this.acquire(),this.readOnly||void 0===this.currentPartition)throw new zo(void 0,this.deps.accountId);return}try{await Je(this.acquireWithSlotWait(),45e3,"Partition lease timed out after 45000ms")}catch(t){throw console.warn("[BatchWriteCoordinator] Partition lease acquisition failed, pausing background work:",t),this.pauseLeaseBackgroundWork(),t}return}await this.ensureLeaseStillValid()}finally{this.emitLeaseChange()}}async acquire(){const{stamper:t,partitionCount:e,swarmEncryptionKey:n}=this.deps;if(e<=1)return void(this.readOnly=!1);if(this.disposed)return;const r=this.leaseEpoch;if(this.deps.refreshKnownDeviceIds?.().catch(t=>console.warn("[BatchWriteCoordinator] Background device-registry refresh failed (using current registry):",t)),this.leaseEpoch===r&&!this.disposed)try{const i=this.deps,s=await Wo.fromSwarmEncryptionKey({get bee(){return i.bee},deviceId:this.deps.deviceId,batchId:new p(this.deps.batchId),batchDepth:t.depth,swarmEncryptionKey:n,stamper:t,knownDeviceIds:this.deps.knownDeviceIds,intentReadTimeoutMs:this.deps.intentReadTimeoutMs,intentGuardWindowMs:this.deps.intentGuardWindowMs,intentGuardPollMs:this.deps.intentGuardPollMs});if(this.leaseEpoch!==r)return;const a=this.deps.readLeaseCache?.();a&&s.hydrate(a);const o=s.adoptIfLive();if(void 0!==o){const n=await t.getSyncedReference(o).catch(()=>{});if(this.leaseEpoch!==r||this.disposed)return;return console.debug(`[BatchWriteCoordinator] Adopted cached lease p=${o} (no acquire/intent round) for device=${this.deps.deviceId}`),this.partitionLease=s,this.readOnly=!1,t.bindPartition({partition:o,partitionCount:e,localCounter:t.buildLeaseLocalCounter()}),this.syncStamperLeaseDeadline(),s.seedReferenceHex(n),this.deps.writeLeaseCache?.(s.serialize()),this.startRefreshTimer(s),this.lastLeaseValidatedAt=Date.now(),this.lastLeaseActivityAt=Date.now(),this.pointerHeartbeatFailingSince=void 0,void this.deps.onLeaseAcquired?.(o)}const c=await s.acquire({partitionCount:e});if(this.leaseEpoch!==r)return;if(this.partitionLease=s,this.readOnly=c.isReadOnly,void 0===c.partition)return c.isReadOnly&&console.warn("[BatchWriteCoordinator] All partitions held; entering read-only mode until a peer releases."),void this.deps.writeLeaseCache?.(s.serialize());t.bindPartition({partition:c.partition,partitionCount:c.partitionCount,localCounter:c.localCounter}),this.syncStamperLeaseDeadline(),this.deps.writeLeaseCache?.(s.serialize()),this.startRefreshTimer(s),this.lastLeaseValidatedAt=Date.now(),this.lastLeaseActivityAt=Date.now(),this.pointerHeartbeatFailingSince=void 0,this.deps.onLeaseAcquired?.(c.partition)}catch(e){if(console.error("[BatchWriteCoordinator] Failed to acquire partition lease:",e),this.leaseEpoch!==r)throw e;throw void 0!==this.partitionRefreshTimer&&(clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=void 0),t.invalidateLease(),t.unbindPartition(),this.partitionLease=void 0,this.readOnly=!1,this.deps.writeLeaseCache?.(void 0),e}}async acquireWithSlotWait(){const t=Date.now()+3e4,e=this.leaseEpoch,n={maybeFree:!1,rescansLeft:0,rescanWindowUsed:!1};this.slotWait=n;try{await this.pollForSlot(t,e,n)}finally{this.slotWait===n&&(this.slotWait=void 0)}}async pollForSlot(t,e,n){for(;;){if(await this.acquire(),this.disposed)return;if(!this.readOnly)return;const r=n.maybeFree;n.maybeFree=!1;const i=r?0:n.rescansLeft>0?1500:Cs;if(Date.now()+i>t)throw new zo("No partition available — all slots are held by other devices.",this.deps.accountId);if(r||(n.rescansLeft>0?(n.rescansLeft--,await this.sleepUntilWoken(n,1500)):(this.deps.onSlotWait?.(),await this.sleepUntilWoken(n,Cs))),this.leaseEpoch!==e)return}}sleepUntilWoken(t,e){return new Promise(n=>{const r=()=>{clearTimeout(i),t.wake=void 0,t.maybeFree=!1,n()},i=setTimeout(r,e);t.wake=r})}syncStamperLeaseDeadline(){this.deps.stamper.setLeaseValidUntil(this.partitionLease?.leasedUntil)}leaseNearExpiry(){const t=this.partitionLease?.leasedUntil;return void 0!==t&&Date.now()>=t-2e3}async ensureLeaseStillValid(){if(!this.partitionLease||this.readOnly)return;const t=this.partitionLease.currentPartition;if(void 0===t)return;if(!this.leaseNearExpiry()&&Date.now()-this.lastLeaseValidatedAt<Cs)return;let e;try{e=await ho({bee:this.deps.bee,backupSigner:this.deps.backupSigner,swarmEncryptionKey:this.deps.swarmEncryptionKey,batchId:new p(this.deps.batchId),partition:t})}catch(t){return void console.warn("[BatchWriteCoordinator] Lease freshness check read failed:",t)}if(Go(e,Date.now(),this.deps.deviceId))throw console.warn(`[BatchWriteCoordinator] Lease freshness check: partition ${t} taken by ${e.holderDeviceId}; demoting.`),this.signalLeaseLost(),this.finalizeDemote(),new Error("Partition lease was reclaimed by another device.");if(void 0!==e&&e.holderDeviceId===oo){let e;try{e=await this.partitionLease.refresh()}catch(t){return void console.warn("[BatchWriteCoordinator] Sentinel re-assert hit a transient error; keeping lease:",t)}if("held"!==e)throw console.warn(`[BatchWriteCoordinator] Sentinel re-assert: partition ${t} taken by a peer; demoting.`),this.signalLeaseLost(),this.finalizeDemote(),new Error("Partition lease was reclaimed by another device.");return this.syncStamperLeaseDeadline(),this.lastLeaseValidatedAt=Date.now(),void this.deps.writeLeaseCache?.(this.partitionLease.serialize())}this.partitionLease.bumpLocalLease(ms),this.syncStamperLeaseDeadline(),this.lastLeaseValidatedAt=Date.now(),this.deps.writeLeaseCache?.(this.partitionLease.serialize())}signalLeaseLost(){this.deps.stamper.invalidateLease()}finalizeDemote(){this.leaseEpoch++,this.deps.stamper.unbindPartition(),void 0!==this.partitionRefreshTimer&&(clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=void 0),this.partitionLease=void 0,this.readOnly=!0,this.lastLeaseValidatedAt=0,this.pointerHeartbeatFailingSince=void 0,this.deps.writeLeaseCache?.(void 0),this.pendingAcquire=!0,this.emitLeaseChange()}startRefreshTimer(t){this.disposed||"persistent"===this.deps.mode&&(void 0!==this.partitionRefreshTimer&&clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=setInterval(()=>{this.refreshTick(t)},Cs))}async refreshTick(t){if(this.disposed||this.partitionLease!==t)return;const e=t.currentPartition;if(void 0===e)return;if((this.deps.knownDeviceIds?.()??[]).some(t=>t!==this.deps.deviceId)&&0===this.activeUploadCount&&Date.now()-this.lastLeaseActivityAt>=3e4)return void await this.lock(async()=>{this.disposed||this.partitionLease===t&&(0!==this.activeUploadCount||Date.now()-this.lastLeaseActivityAt<3e4||await this.yieldIdleLease(t))});let n=!1,r=!1;try{const i=await t.refresh();if("held"===i&&(r=!0),"displaced"===i)n=!0;else if("lost"===i){const t=await ho({bee:this.deps.bee,backupSigner:this.deps.backupSigner,swarmEncryptionKey:this.deps.swarmEncryptionKey,batchId:new p(this.deps.batchId),partition:e});n=Go(t,Date.now(),this.deps.deviceId),!n&&void 0!==t&&t.holderDeviceId===this.deps.deviceId&&t.leasedUntil>Date.now()&&(r=!0)}}catch(t){console.warn("[BatchWriteCoordinator] Lease refresh hit a transient error; keeping lease:",t)}if(n){if(this.disposed||this.partitionLease!==t)return;return console.warn(`[BatchWriteCoordinator] Refresh: partition ${e} taken by a peer; demoting.`),this.signalLeaseLost(),void await this.lock(async()=>{this.disposed||this.partitionLease!==t||this.finalizeDemote()})}if(!this.disposed&&this.partitionLease===t)if(r){if(t.bumpLocalLease(ms),this.syncStamperLeaseDeadline(),this.lastLeaseValidatedAt=Date.now(),this.deps.writeLeaseCache?.(t.serialize()),0===this.activeUploadCount)try{await this.lock(async()=>{this.disposed||this.partitionLease!==t||0===this.activeUploadCount&&await t.heartbeatStatePointer(this.deps.stamper.getLocalCounter())}),this.pointerHeartbeatFailingSince=void 0}catch(n){console.warn("[BatchWriteCoordinator] State-pointer heartbeat failed:",n),this.pointerHeartbeatFailingSince??(this.pointerHeartbeatFailingSince=Date.now()),Date.now()-this.pointerHeartbeatFailingSince>Do&&(console.warn(`[BatchWriteCoordinator] Refresh: partition ${e} state-pointer heartbeat failing persistently; demoting before the resume pointer ages out of the takeover lookup.`),this.signalLeaseLost(),await this.lock(async()=>{this.disposed||this.partitionLease!==t||this.finalizeDemote()}))}}else this.leaseNearExpiry()&&(console.warn(`[BatchWriteCoordinator] Refresh: partition ${e} lease lapsed without a successful renewal; demoting.`),this.signalLeaseLost(),await this.lock(async()=>{this.disposed||this.partitionLease!==t||this.finalizeDemote()}))}async yieldIdleLease(t,e){this.leaseEpoch++;const n=t.currentPartition;void 0!==this.partitionRefreshTimer&&(clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=void 0);const r=this.deps.stamper.getLocalCounter();if(void 0!==r)try{await t.release(r)}catch(t){console.warn("[BatchWriteCoordinator] Idle partition-lease release failed:",t)}this.deps.stamper.unbindPartition(),this.partitionLease=void 0,this.readOnly=!1,this.lastLeaseValidatedAt=0,this.deps.writeLeaseCache?.(void 0),this.emitLeaseChange(),console.info(`[BatchWriteCoordinator] Released idle partition ${n??"?"}; will re-acquire on next write.`),void 0===n||this.disposed||this.deps.onLeaseReleased?.(n,e)}notifySlotMaybeFree(){const t=this.slotWait;t&&(t.rescanWindowUsed||(t.rescanWindowUsed=!0,t.maybeFree=!0,t.rescansLeft=3),t.wake?.())}get canYieldForPeer(){return!this.disposed&&(void 0!==this.partitionLease?.currentPartition&&(0===this.activeUploadCount&&Date.now()-this.lastLeaseActivityAt>=3e3))}async yieldForPeer(t){if(!this.canYieldForPeer)return;const e=this.partitionLease,n=e?.currentPartition;if(!e||void 0===n)return;let r;return await this.lock(async()=>{this.disposed||this.partitionLease!==e||0===this.activeUploadCount&&(Date.now()-this.lastLeaseActivityAt<3e3||(await this.yieldIdleLease(e,t),r=n))}),r}pauseLeaseBackgroundWork(){this.leaseEpoch++,void 0!==this.partitionRefreshTimer&&(clearInterval(this.partitionRefreshTimer),this.partitionRefreshTimer=void 0),this.partitionLease=void 0,this.readOnly=!1,this.deps.writeLeaseCache?.(void 0)}async buildStamperTarget(t){const e=t?.useWorkers?await(this.deps.getWorkerPool?.(t.workerCount)):void 0;return{mode:"stamper",bee:this.deps.bee,stamper:this.deps.stamper,workerPool:e}}async lockAndFlush(t){return ao(this.deps.batchId,async()=>{try{return await t()}finally{await(this.deps.flushStamperState?.())}})}lock(t){return ao(this.deps.batchId,t)}ensureHeldForUpload(){if(!(this.deps.partitionCount<=1)&&void 0===this.currentPartition)throw new Error("Uploads are unavailable: the postage batch is fully leased by other devices. Sign out of another device or wait for its lease to expire.")}emitLeaseChange(){this.deps.onLeaseChange?.({currentPartition:this.currentPartition,isReadOnly:this.readOnly})}}const Jo=32;class Zo{constructor(t,e){if(this.start=t,this.level=e,e<0||e>Jo)throw new Error(`Epoch level must be between 0 and 32, got ${e}`)}async marshalBinary(){const t=new Uint8Array(9);return new DataView(t.buffer).setBigUint64(0,this.start,!1),t[8]=this.level,s.Binary.keccak256(t)}next(t,e){return this.start+this.length()>e?this.childAt(e):function(t,e){if(0n===e)return new Zo(0n,Jo);const n=t-e;let r=1n,i=0;for(;i<Jo&&(r<n||t/r!==e/r);)r<<=1n,i++;return new Zo(e/r*r,i)}(e,t).childAt(e)}length(){return 1n<<BigInt(this.level)}parent(){const t=this.length()<<1n,e=this.start/t*t;return new Zo(e,this.level+1)}left(){return new Zo(this.start-this.length(),this.level)}childAt(t){const e=this.level-1,n=1n<<BigInt(e);let r=this.start;return(t&n)>0n&&(r|=n),new Zo(r,e)}isLeft(){return 0n===(this.start&this.length())}toString(){return`${this.start}/${this.level}`}}class Yo{constructor(t,e,n,r){this.bee=t,this.topic=e,this.owner=n,this.encryptionKey=r}async findAt(t,e=0n){const n=this.getEpochChunk(t,new Zo(t,0)).catch(()=>{}),[r,i]=await Promise.all([n,this.findAtEpoch(t,new Zo(0n,Jo),void 0)]);if(r)return r;if(i)return i;try{if(void 0===await this.getEpochChunk(t,new Zo(0n,Jo)))return this.findPreviousLeaf(t,e)}catch{}}async findAtEpoch(t,e,n){let r;try{r=await this.getEpochChunk(t,e)}catch{return e.isLeft()?n:this.findAtEpoch(e.start-1n,e.left(),n)}if(r)return 0===e.level?r:this.findAtEpoch(t,e.childAt(t),r);if(e.level>0){const r=await this.findAtEpoch(t,e.childAt(t),n);if(r)return r}return e.isLeft()?n:this.findAtEpoch(e.start-1n,e.left(),n)}async getEpochChunk(t,e){const n=await this.getEpochChunkWithMetadata(t,e);return n?.reference}async findAtWithMetadata(t){const e=new Zo(t,0);try{const n=await this.getEpochChunkWithMetadata(t,e);if(n)return{reference:n.reference,epoch:e,timestamp:n.timestamp}}catch{}return this.findAtEpochWithMetadata(t,new Zo(0n,Jo),void 0)}async findAtEpochWithMetadata(t,e,n){let r;try{r=await this.getEpochChunkWithMetadata(t,e)}catch{return e.isLeft()?n:this.findAtEpochWithMetadata(e.start-1n,e.left(),n)}if(r){const n={reference:r.reference,epoch:e,timestamp:r.timestamp};return 0===e.level?n:this.findAtEpochWithMetadata(t,e.childAt(t),n)}if(e.level>0){const r=await this.findAtEpochWithMetadata(t,e.childAt(t),n);if(r)return r}return e.isLeft()?n:this.findAtEpochWithMetadata(e.start-1n,e.left(),n)}async getEpochChunkWithMetadata(t,e){const n={timeout:2e3},r=await e.marshalBinary(),i=s.Binary.keccak256(s.Binary.concatBytes(this.topic.toUint8Array(),r));let a;if(this.encryptionKey){a=(await ze(this.bee,this.owner,i,this.encryptionKey,n)).payload}else{const t=new m(s.Binary.keccak256(s.Binary.concatBytes(i,this.owner.toUint8Array()))),e=await this.bee.chunk.download(t.toHex(),void 0,n),r=8,o=32+65,c=e.slice(o,o+r),d=new DataView(c.buffer,c.byteOffset,c.byteLength),u=Number(d.getBigUint64(0,!0)),l=o+r;a=e.slice(l,l+u)}if(![40,48,72,80].includes(a.length))return void console.warn(`Unexpected feed payload length: ${a.length}. Expected 40, 48, 72, or 80 bytes.`);const o=48===a.length||80===a.length?8:0,c=a.slice(o,o+8),d=new DataView(c.buffer,c.byteOffset,c.byteLength).getBigUint64(0,!1);return d>t?void 0:{reference:a.slice(o+8),timestamp:d}}findPreviousLeaf(t,e){return async function(t,e,n){if(0n===t)return;const r=e>0n?e:0n,i=t>128n&&t-128n>r?t-128n:r;let s=t-1n;for(;s>=i;){try{const e=await n(t,new Zo(s,0));if(e)return e}catch{}if(0n===s)break;s--}}(t,e,(t,e)=>this.getEpochChunk(t,e))}}class _o{constructor(t,e){this.topic=t,this.signer=e}async update(t,e,n,r,i){if(32!==e.length&&64!==e.length)throw new Error(`Reference must be 32 or 64 bytes, got ${e.length}`);const s=await this.calculateEpoch(t,i,r,n);return{socAddress:await this.uploadEpochChunk(s,t,e,n,r),epoch:{start:s.start,level:s.level},timestamp:t}}async calculateEpoch(t,e,n,r){if(e?.lastEpoch&&void 0!==e.lastTimestamp){return new Zo(e.lastEpoch.start,e.lastEpoch.level).next(e.lastTimestamp,t)}if(!r||!Xi(r))return new Zo(0n,Jo);const i=this.signer.publicKey().address(),s=new Yo(r.bee,this.topic,i,n),a=await s.findAtWithMetadata(t);return a?a.epoch.next(a.timestamp,t):new Zo(0n,Jo)}getOwner(){return this.signer.publicKey().address()}async uploadEpochChunk(t,e,n,r,i){const a=await async function(t,e){const n=await e.marshalBinary();return new x(s.Binary.keccak256(s.Binary.concatBytes(t.toUint8Array(),n)))}(this.topic,t),o=new Uint8Array(8);new DataView(o.buffer).setBigUint64(0,e,!1);const c=s.Binary.concatBytes(o,n);return(await hs(r,this.signer,a,c,{encryptionKey:i,deferred:!1})).socAddress}}function Qo(t){return new Yo(t.bee,t.topic,t.owner,t.encryptionKey)}class Xo{constructor(t,e,n){this.bee=t,this.topic=e,this.owner=n}async findAt(t,e=0n,n){for(let t=0n;;t++){if(!await this.indexExists(t,n))return{current:t>0n?t-1n:void 0,next:t}}}async indexExists(t,e){const n=function(t,e){const n=s.Binary.numberToUint64(e,"BE");return s.Binary.keccak256(s.Binary.concatBytes(t.toUint8Array(),n))}(this.topic,t),r=function(t,e){return new m(s.Binary.keccak256(s.Binary.concatBytes(t,e.toUint8Array())))}(n,this.owner);for(let t=0;t<2;t++)try{return await this.bee.chunk.download(s.Binary.uint8ArrayToHex(r.toUint8Array()),void 0,e),!0}catch{if(0===t)continue;return!1}return!1}}class tc{constructor(t,e,n){this.syncFinder=new Xo(t,e,n)}async findAt(t,e=0n,n){return this.syncFinder.findAt(t,e,n)}}class ec{constructor(t,e,n){this.bee=t,this.topic=e,this.signer=n,this.nextIndex=0n}async update(t,e,n){const r=this.makeIdentifier(this.nextIndex),i={mode:"stamper",bee:this.bee,stamper:e},s=await hs(i,this.signer,r,t,{encryptionKey:n,deferred:!1});return this.nextIndex+=1n,s.socAddress}getOwner(){return this.signer.publicKey().address()}getState(){return{nextIndex:this.nextIndex}}setState(t){this.nextIndex=t.nextIndex}reset(){this.nextIndex=0n}makeIdentifier(t){const e=s.Binary.numberToUint64(t,"BE"),n=s.Binary.keccak256(s.Binary.concatBytes(this.topic.toUint8Array(),e));return new x(n)}}function nc(t){if("object"==typeof t&&null!==t){const e=t.status;if(404===e)return!0;if("number"==typeof e)return!1}const e=t instanceof Error?t.message:String(t);return/404|not found/i.test(e)}const rc=256,ic=new Map,sc="swarm-id-roster-len";function ac(t,e){return`${t}:${e.toHex()}`}function oc(t){const e=ic.get(t);if(void 0!==e)return e;if("undefined"==typeof localStorage)return 0;let n;try{n=localStorage.getItem(`${sc}:${t}`)}catch{return 0}const r=null===n?0:Number.parseInt(n,10),i=Number.isInteger(r)&&r>0?Math.min(r,rc):0;return ic.set(t,i),i}function cc(t,e){const n=Math.min(e,rc);if(!(n<=oc(t))&&(ic.set(t,n),"undefined"!=typeof localStorage))try{localStorage.setItem(`${sc}:${t}`,`${n}`)}catch{}}const dc=gs,uc=Symbol("roster-read-inconclusive");class lc extends Error{constructor(){super("roster scan inconclusive: cannot confirm the roster is empty"),this.name="RosterScanInconclusiveError"}}function hc(t){return ht.fromString(`swarm-id-roster-v1:${t}`)}async function pc(t){const e=function(t,e){const n=s.Binary.numberToUint64(e,"BE");return new x(s.Binary.keccak256(s.Binary.concatBytes(t.toUint8Array(),n)))}(t.topic,t.index);let n,r;try{n=(await Je(t.bee.soc.makeReader(t.owner).download(e),dc,"roster read timed out")).payload.toUint8Array()}catch(r){if(nc(r))return;const i=await async function(t){const e=`${t.bee.url}/soc/${t.owner.toHex()}/${t.identifier.toHex()}`;try{const t=await Je(fetch(e),dc,"roster /soc probe timed out");return t.ok?new Uint8Array(await t.arrayBuffer()):404!==t.status?uc:404===(await t.json()).code?void 0:uc}catch{return uc}}({bee:t.bee,owner:t.owner,identifier:e});if(!(i instanceof Uint8Array))return i;n=i}try{r=await Je(Qe(t.bee,new m(n).toHex()),dc,"roster read timed out")}catch(t){return nc(t)?void 0:uc}try{return Xe.parse(JSON.parse((new TextDecoder).decode(r)))}catch{return}}async function fc(t){const e=hc(t.accountId),n=ac(t.accountId,t.owner),r=oc(n);let i=[],s=0;for(let n=0;n<rc;){const a=n<r?r-n:Math.min(r>0?2:16,rc-n),o=Array.from({length:a},(t,e)=>BigInt(n+e));let c=await Promise.all(o.map(n=>pc({bee:t.bee,topic:e,owner:t.owner,index:n})));if(!c.some(yc)&&c.some(t=>t===uc)&&(c=await Promise.all(o.map((n,r)=>c[r]===uc?pc({bee:t.bee,topic:e,owner:t.owner,index:n}):c[r]))),c.forEach((t,e)=>{yc(t)&&(i=ro(i,[t]),s=n+e+1)}),!c.some(yc)){if(0===i.length&&c.some(t=>t===uc))throw new lc;break}n+=a}return i.length>0&&cc(n,s),i}function yc(t){return void 0!==t&&t!==uc}async function wc(t){let e;try{e=await fc({bee:t.bee,accountId:t.accountId,owner:t.owner})}catch{return}const n=e.find(e=>e.deviceId===t.device.deviceId);void 0!==n&&Boolean(n.removedAt)===Boolean(t.device.removedAt)||await async function(t){const e=hc(t.accountId),{next:n}=await new Xo(t.bee,e,t.owner).findAt(0n);if(!Xi(t.target))return;const r=(new TextEncoder).encode(JSON.stringify(t.device)),i=await ls(t.target,r,{encryptionKey:we(t.encryptionKey)}),s=new m(i.reference).toUint8Array(),a=new ec(t.bee,e,t.accountKey);a.setState({nextIndex:n}),await a.update(s,t.target.stamper),cc(ac(t.accountId,t.owner),Number(n)+1)}(t)}const gc=ae({appSessionDuration:le().optional()}),mc=t=>ae({value:t,at:le()}),bc=ae({version:ce(1),accountId:ue().length(40),deviceId:ue(),timestamp:le(),connectedApps:de(se),postageStamps:de(tn),accountName:mc(ue()),defaultPostageStampBatchID:mc(ue().length(64).optional()),settings:mc(gc.optional()),accountPublicKey:ue(),accountCreatedAt:le(),partitionCount:le().int().min(1).default(1)});function vc(t){const e=t.metadata,n=e.createdAt;return{connectedApps:t.connectedApps,postageStamps:t.postageStamps,accountName:{value:e.accountName,at:e.accountNameAt??n},defaultPostageStampBatchID:{value:e.defaultPostageStampBatchID,at:e.defaultStampAt??n},settings:{value:e.settings,at:e.settingsAt??n},accountPublicKey:e.publicKey,accountCreatedAt:e.createdAt,partitionCount:e.partitionCount??1}}function Sc(t,e){return ht.fromString(`swarm-id-devstate-v1:${t}:${e}`)}async function kc(t){const e=Sc(t.accountId,t.deviceId),n=(r=t.accountId,i=t.deviceId,s=t.view,{version:1,accountId:r,deviceId:i,timestamp:Date.now(),connectedApps:s.connectedApps.map(Ys),postageStamps:s.postageStamps.map(Qs),accountName:s.accountName,defaultPostageStampBatchID:s.defaultPostageStampBatchID,settings:s.settings,accountPublicKey:s.accountPublicKey,accountCreatedAt:s.accountCreatedAt,partitionCount:s.partitionCount});var r,i,s;const a=(new TextEncoder).encode(JSON.stringify(n)),o=await ls(t.target,a,{encryptionKey:we(t.encryptionKey)}),c=o.chunkAddresses??[],d=new m(o.reference).toUint8Array(),u=new _o(e,t.accountKey),l=await u.update(BigInt(Math.floor(Date.now()/1e3)),d,t.target);return c.push(l.socAddress),{reference:o.reference,chunkAddresses:c}}async function xc(t){const e=await kc({accountId:t.accountId,deviceId:t.device.deviceId,accountKey:t.accountKey,encryptionKey:t.encryptionKey,view:t.view,target:t.target});return t.onChunksUploaded&&e.chunkAddresses.length>0&&await t.onChunksUploaded(e.chunkAddresses).catch(t=>{console.error("[publishDeviceState] utilisation hook failed:",t)}),await wc({bee:t.bee,accountKey:t.accountKey,owner:t.owner,encryptionKey:t.encryptionKey,accountId:t.accountId,device:t.device,target:t.target}),{status:"success",reference:e.reference,timestamp:BigInt(Math.floor(Date.now()/1e3)),chunkAddresses:e.chunkAddresses}}async function Ic(t){const e=Sc(t.accountId,t.deviceId),n=new Yo(t.bee,e,t.owner),r=await n.findAt(BigInt(Math.floor(Date.now()/1e3)));if(!r)return;return function(t){const e=JSON.parse((new TextDecoder).decode(t));return bc.parse(e)}(await Qe(t.bee,new m(r).toHex()))}function Ac(t,e){return e.at>=t.at?e:t}function Cc(t,e,n){if(0===t.length)throw new Error("foldAccount requires at least one device-state view");let r=[],i=[],s={value:"",at:0},a={at:0},o={at:0};for(const e of t)r=io(r,e.connectedApps,n),i=so(i,e.postageStamps),s=Ac(s,e.accountName),a=Ac(a,e.defaultPostageStampBatchID),o=Ac(o,e.settings);const c=t[0],d=c?.accountCreatedAt??e.reduce((t,e)=>Math.min(t,e.createdAt),Number.MAX_SAFE_INTEGER),u=t[0].accountPublicKey,l=t.find(t=>t.partitionCount>1)?.partitionCount??c?.partitionCount??1;return{devices:e,connectedApps:r,postageStamps:i,accountName:s.value,defaultPostageStampBatchID:a.value?new p(a.value):void 0,settings:o.value,accountNameAt:s.at,defaultStampAt:a.at,settingsAt:o.at,createdAt:Number.isFinite(d)?d:Date.now(),publicKey:u,partitionCount:l}}const Uc="swarm-id-device-id";function Pc(){const t=localStorage.getItem(Uc);if(t)return t;const e=crypto.randomUUID();return localStorage.setItem(Uc,e),e}function Ec(t,e,n){if(t.some(t=>t.deviceId===e))return t.map(t=>t.deviceId===e&&void 0!==n&&n!==t.name?{...t,name:n,nameUpdatedAt:Date.now()}:t);const r=Date.now();return[...t,{deviceId:e,createdAt:r,lastSignedInAt:r,name:n}]}function $c(){if("undefined"==typeof navigator)return"Unknown Device";const t=navigator.userAgent;let e;e=/iPhone/.test(t)?"iPhone":/iPad/.test(t)?"iPad":/Android/.test(t)?/Mobile/.test(t)?"Android Phone":"Android Tablet":/Macintosh|Mac OS X/.test(t)?"Mac":/Windows/.test(t)?"Windows PC":/Linux/.test(t)?"Linux Desktop":"Unknown Device";const n=function(){const t=navigator.userAgentData,e=t?.brands?.map(t=>t.brand);if(e&&0!==e.length)return e.includes("Brave")?"Brave":e.includes("Microsoft Edge")?"Edge":e.includes("Opera")?"Opera":e.includes("Google Chrome")?"Chrome":e.includes("Chromium")?"Chromium":void 0}();if(n)return`${n} on ${e}`;let r;return r=/Edg\//.test(t)?"Edge":/OPR\/|Opera/.test(t)?"Opera":/Firefox\//.test(t)?"Firefox":/Chrome\//.test(t)?"Chrome":/Safari\//.test(t)?"Safari":"Unknown Browser",`${r} on ${e}`}const Dc=Object.entries({deviceId:"all",createdAt:"all",name:"all",nameUpdatedAt:"all",removedAt:"all",lastSignedInAt:"all"}),Bc=18e5;function Tc(t,e,n){const r=e-n;return t.filter(t=>!t.removedAt&&(t.lastSignedInAt??0)>=r).map(t=>t.deviceId)}function Oc(t){const{bee:e,accountsStore:n,postageStampsStore:i,utilizationStore:a,utilizationUploader:o,liveDeviceIds:c}=t;async function d(t,c){const d=n.getAccount(new r(t));if(!d)return void console.warn("[SyncCoordinator] Account not found for utilization update");const u=d.defaultPostageStampBatchID;if(!u)return void console.warn("[SyncCoordinator] No default stamp, skipping utilization");const l=new p(u),h=i.getStamp(l);if(!h)return void console.warn("[SyncCoordinator] Stamp not found, skipping utilization");const f=c.map(t=>({address:{toUint8Array:()=>t,toHex:()=>Array.from(t).map(t=>t.toString(16).padStart(2,"0")).join("")},data:new Uint8Array(0)}));const y=await en(d.derivationKey),w=await Ae(y,Ue),g=new I(w).publicKey().address(),{state:m,tracker:b}=await zs(l,f,h.depth,{cache:a}),v=function(t,e,n=2){const r=js(e,n);let i=0;for(const e of t.dataCounters)e>i&&(i=e);return r<=0?1:Math.min(1,i/r)}(m,h.depth);if(i.updateStampUtilization(l,v),b.hasDirtyChunks()){const t=await i.getStamper(l,{owner:g,encryptionKey:we(y)});if(!t)return void console.warn("[SyncCoordinator] Cannot create stamper, skipping upload");const n=o.scheduleUpload(l.toHex(),b,async()=>{await async function(t,e){const{bee:n,stamper:r,encryptionKey:i,cache:a,tracker:o,reservedBuckets:c}=e,d=o.getDirtyChunks();if(0===d.length)return;const u=Rs(t);if(c)for(const t of c)u.add(t);const l=r instanceof Gs;for(const e of d){const c=t.chunks[e],d=Ds(t.dataCounters,e,t.batchDepth),h=await Ms({swarmEncryptionKey:i,batchId:t.batchId,chunkIndex:e,plaintext:d,priorNonce:c.nonce,claimedBuckets:u});l&&r.markReservedUtilizationChunk(h.address);try{const i=await Fs(n,r,d,h.key),u=s.Binary.uint8ArrayToHex(i);if(c.contentHash===u&&c.nonce===h.nonce){o.markClean(e);continue}c.contentHash=u,c.lastUpload=Date.now(),c.dirty=!1,c.nonce=h.nonce,await a.putChunk({batchId:t.batchId.toHex(),chunkIndex:e,data:d,contentHash:u,nonce:h.nonce,lastAccess:Date.now()}),o.markClean(e)}catch(t){throw console.error(`[BatchUtil] Failed to upload chunk ${e}:`,t),l&&r.clearReservedUtilizationChunks(),t}}l&&r.clearReservedUtilizationChunks(),t.lastSync=Date.now()}(m,{bee:e,stamper:t,encryptionKey:we(y),cache:a,tracker:b,reservedBuckets:t instanceof Gs?t.getProtectedBuckets():void 0}),t.flush&&await t.flush()});return Je(n,3e4,"Utilization upload timeout (30000ms)")}}return async function(t){const s=performance.now(),a=()=>(new Date).toISOString(),o=await async function(t){const e=n.getAccount(new r(t));if(!e)return void console.warn("[SyncCoordinator] Account not found",t);const s=e.defaultPostageStampBatchID;if(!s)return void console.warn("[SyncCoordinator] No default stamp for account",t);const a=i.getStamp(s);if(!a)return void console.warn("[SyncCoordinator] Default stamp not found");const o=await en(e.derivationKey);return{snapshot:ca(e,t,Date.now()),encryptionKey:o,defaultStamp:a}}(t);if(!o)return;const{snapshot:u,encryptionKey:l,defaultStamp:h}=o,p=u.metadata.partitionCount??1,f=await Ae(l,Ue),y=new I(f),w=y.publicKey().address(),g=await i.getStamper(h.batchID,{owner:w,encryptionKey:we(l)});if(!g){const t=`Cannot create stamper for batch ${h.batchID.toHex()}`;return console.error(`[SyncCoordinator ${a()}] ${t}`),{status:"error",error:t}}if(!(g instanceof Gs)){const t=`Stamper for batch ${h.batchID.toHex()} does not support coordinated writes (expected a UtilizationAwareStamper)`;return console.error(`[SyncCoordinator ${a()}] ${t}`),{status:"error",error:t}}const m=new Vo({bee:e,batchId:h.batchID.toHex(),stamper:g,deviceId:Pc(),accountId:t,knownDeviceIds:()=>[...new Set([...Tc(n.getAccount(new r(t))?.devices??[],Date.now(),Bc),...c?.()??[]])],backupSigner:y,swarmEncryptionKey:we(l),partitionCount:p,mode:"oneshot"});console.log(`[SyncCoordinator ${a()}] Starting sync for ${t} bee.url=${e.url}`);const b=Pc(),v=u.metadata.devices.find(t=>t.deviceId===b)??{deviceId:b,name:$c(),createdAt:Date.now(),lastSignedInAt:Date.now()},S=vc(u);try{const n=await Je(m.withWrite(n=>xc({bee:e,accountId:t,device:v,accountKey:y,owner:w,encryptionKey:l,view:S,target:n,onChunksUploaded:e=>d(t,e)}),{wait:"skip"}),6e4,"Sync timed out after 60000ms");return"error"===n.status&&console.error(`[SyncCoordinator ${a()}] Sync failed (+${(performance.now()-s).toFixed(2)}ms):`,n.error),n}catch(e){return e instanceof zo?void console.warn(`[SyncCoordinator] Skipping sync ${t}: all partitions are held by other devices.`):(console.error(`[SyncCoordinator ${a()}] Sync failed (+${(performance.now()-s).toFixed(2)}ms):`,e),{status:"error",error:e instanceof Error?e.message:String(e)})}}}function Mc(t){const{id:e,derivationKey:n,account:r}=t;return{id:e,name:r.accountName,publicKey:r.publicKey,createdAt:r.createdAt,derivationKey:n,defaultPostageStampBatchID:r.defaultPostageStampBatchID,settings:r.settings,accountNameAt:r.accountNameAt,defaultStampAt:r.defaultStampAt,settingsAt:r.settingsAt,lastModified:t.lastModified??Date.now(),devices:[...r.devices],connectedApps:[...r.connectedApps],postageStamps:[...r.postageStamps],partitionCount:r.partitionCount}}const Rc=new Map;async function Fc(t){const e=`${t.accountId}:${t.derivationKey}`,n=Rc.get(e);if(n)return n;const r=async function(t){const e=await en(t.derivationKey),n=await Ae(e,Ue),r=new I(n).publicKey().address(),i=await fc({bee:t.bee,accountId:t.accountId,owner:r});if(0===i.length)return;const s=(await Promise.all(i.filter(t=>!t.removedAt).map(e=>Ic({bee:t.bee,accountId:t.accountId,deviceId:e.deviceId,owner:r}).catch(()=>{})))).filter(t=>void 0!==t);if(0===s.length)return;const a=Cc(s,i,t.accountId);for(const t of[i,a.devices,a.connectedApps,a.postageStamps])Array.isArray(t)&&Object.freeze(t);return{account:a,devices:i}}(t).finally(()=>{Rc.delete(e)});return Rc.set(e,r),r}async function qc(t){try{const e=await Fc({bee:t.bee,derivationKey:t.derivationKey,accountId:t.accountId});if(!e)return await async function(t){const e=await en(t.derivationKey),n=new I(await Ae(e,Ue)).publicKey().address(),r=await fc({bee:t.bee,accountId:t.accountId,owner:n});return 0===r.length}(t)?"allowed":"unconfirmed";const n=e.account.connectedApps.find(e=>e.appUrl===t.appOrigin);return void 0===n||void 0!==n.revokedAt||void 0!==n.disconnectedAt&&n.disconnectedAt>(t.connectedAt??0)?"ended":"allowed"}catch{return"unconfirmed"}}const Lc="swarm-id-first-party";function Kc(){try{if("undefined"==typeof window||window.self!==window.top)return;localStorage.setItem(Lc,"1")}catch{}}function Nc(){try{return null!==localStorage.getItem(Lc)}catch{return!1}}const Hc="0x45a1502382541cd610cc9068e88727426b696293";function jc(t,e){return function(t){try{const{hostname:e}=new URL(t);return"localhost"===e||"127.0.0.1"===e||"0.0.0.0"===e}catch{return!1}}(t)&&e?e:Hc}const Wc=new RegExp("^[0-9a-f]{64}$");function zc(t){const e=t.startsWith("0x")?t.slice(2):t;if(0===e.length)throw new Error("Empty uint return");return BigInt(`0x${e}`)}async function Gc(t,e,n=Hc){try{const r=function(t){const e=(t.startsWith("0x")?t.slice(2):t).toLowerCase();if(!Wc.test(e))throw new Error(`Invalid batch ID: ${t}`);return e}(e),[i,s,a]=await async function(t,e){return(await rn(t,e.map(t=>({method:"eth_call",params:[{to:t.to,data:t.data},"latest"]})),{timeoutMs:sn})).map(t=>{if("string"!=typeof t)throw new Error("eth_call returned something other than a hex string");return t})}(t,[{to:n,data:`0xc81e25ab${r}`},{to:n,data:"0x51b17cd0"},{to:n,data:"0x053f14da"}]),o=function(t){const e=function(t){const e=t.startsWith("0x")?t.slice(2):t,n=[];for(let t=0;t<e.length;t+=64)n.push(e.slice(t,t+64));return n}(t);if(e.length<6)throw new Error(`Unexpected batches() return length: ${t}`);return{owner:`0x${e[0].slice(24)}`,depth:Number(BigInt(`0x${e[1]}`)),bucketDepth:Number(BigInt(`0x${e[2]}`)),immutableFlag:0n!==BigInt(`0x${e[3]}`),normalisedBalance:BigInt(`0x${e[4]}`),lastUpdatedBlockNumber:BigInt(`0x${e[5]}`)}}(i);return"0x0000000000000000000000000000000000000000"===o.owner?{status:"not-found"}:{status:"found",state:{batch:o,currentTotalOutPayment:zc(s),lastPrice:zc(a)}}}catch{return{status:"error"}}}function Vc(t){const e=t.batch.normalisedBalance-t.currentTotalOutPayment;if(e<=0n)return 0;if(t.lastPrice<=0n)return;const n=e/t.lastPrice;return Number(n*BigInt(nn))}async function Jc(t,e,n=Hc){const r=await async function(t,e,n=Hc){const r=await Gc(t,e,n);return"found"===r.status?r.state:void 0}(t,e,n);if(void 0!==r)return Vc(r)}const Zc=864e5,Yc=7*Zc;function _c(t){return t?.appSessionDuration??Yc}const Qc=32;function Xc(t){if(32!==t.length)throw new Error("Private key must be 32 bytes");const e=on.getPublicKey(t,!1);return{x:e.slice(1,33),y:e.slice(33)}}function td(t,e,n){const r=function(t,e,n){if(32!==t.length)throw new Error("Private key must be 32 bytes");if(e.length!==Qc||n.length!==Qc)throw new Error("Public key coordinates must be 32 bytes each");const r=new Uint8Array(65);return r[0]=4,r.set(e,1),r.set(n,33),on.getSharedSecret(t,r,!0).slice(1)}(t,e,n),i=new Uint8Array(r.length+1);i.set(r),i[r.length]=0;const a=s.Binary.keccak256(i),o=new Uint8Array(r.length+1);o.set(r),o[r.length]=1;return{lookupKey:a,accessKeyDecryptionKey:s.Binary.keccak256(o)}}function ed(t,e){if(32!==e.length)throw new Error("Key must be 32 bytes");const n=new Uint8Array(t.length),r=Math.ceil(t.length/32);for(let i=0;i<r;i++){const r=new Uint8Array(e.length+4);r.set(e),r[e.length]=255&i,r[e.length+1]=i>>8&255,r[e.length+2]=i>>16&255,r[e.length+3]=i>>24&255;const a=s.Binary.keccak256(r),o=s.Binary.keccak256(a),c=32*i,d=Math.min(c+32,t.length);for(let e=c;e<d;e++)n[e]=t[e]^o[e-c]}return n}const nd=ed;function rd(t){if(33!==t.length)throw new Error("Compressed public key must be 33 bytes");const e=t[0];if(2!==e&&3!==e)throw new Error("Invalid compressed public key prefix");const n=on.ProjectivePoint.fromHex(t).toRawBytes(!1);return{x:n.slice(1,33),y:n.slice(33)}}function id(t,e){if(t.length!==Qc||e.length!==Qc)throw new Error("Public key coordinates must be 32 bytes each");const n=1&e[e.length-1]?3:2,r=new Uint8Array(33);return r[0]=n,r.set(t,1),r}function sd(t){const e={entries:{}};for(const n of t){const t=ye(n.lookupKey);e.entries[t]={reference:ye(n.encryptedAccessKey),metadata:{}}}const n=JSON.stringify(e);return(new TextEncoder).encode(n)}function ad(t){const e=(new TextDecoder).decode(t),n=JSON.parse(e),r=[];for(const[t,e]of Object.entries(n.entries))r.push({lookupKey:we(t),encryptedAccessKey:we(e.reference)});return r}function od(t,e){return t.find(t=>{if(t.lookupKey.length!==e.length)return!1;for(let n=0;n<e.length;n++)if(t.lookupKey[n]!==e[n])return!1;return!0})}const cd=65,dd=(new TextEncoder).encode("act-grantee-list");function ud(t){const e=s.Binary.concatBytes(t,dd);return s.Binary.keccak256(e)}function ld(t,e){const n=function(t){const e=new Uint8Array(t.length*cd);for(let n=0;n<t.length;n++){const r=n*cd;e[r]=4,e.set(t[n].x,r+1),e.set(t[n].y,r+1+32)}return e}(t);return function(t,e){return ed(t,ud(e))}(n,e)}function hd(t,e){const n=function(t,e){const n=ud(e);return nd(t,n)}(t,e);return function(t){if(0===t.length)return[];if(t.length%cd!==0)throw new Error(`Invalid grantee list length: ${t.length} is not a multiple of 65`);const e=t.length/cd,n=[];for(let r=0;r<e;r++){const e=r*cd;if(4!==t[e])throw new Error(`Invalid public key prefix at index ${r}: expected 0x04, got 0x${t[e].toString(16)}`);const i=t.slice(e+1,e+1+32),s=t.slice(e+1+32,e+cd);n.push({x:i,y:s})}return n}(n)}const pd=BigInt("9223372036854775807"),fd=new TextEncoder,yd="encryptedglref";let wd=0;function gd(t){return(pd-BigInt(t)).toString()}function md(t){const e=BigInt(t);return Number(pd-e)}function bd(t,e,n,r){const i=gd(e),s=we(n),a=r?{[yd]:r}:void 0;t.addFork(fd.encode(i),s,a)}function vd(t){const e=t.collect();if(0===e.length)return;e.sort((t,e)=>t.fullPathString.localeCompare(e.fullPathString));const n=e[0];return{timestamp:md(n.fullPathString),metadata:{actReference:ye(n.targetAddress),encryptedGranteeListRef:n.metadata?.[yd]}}}async function Sd(t,e){const n=await async function t(n,r){for(const e of n.forks.values())await t(e.node,!1);const i=await n.marshal(),s=await e(i,r);return n.selfAddress=we(s.reference),s}(t,!0);return{rootReference:n.reference,tagUid:n.tagUid}}function kd(t,e){return z.unmarshalFromData(t,e)}async function xd(t,e){await async function t(n){for(const r of n.forks.values()){if(!r.node.selfAddress)throw new Error("Fork node selfAddress is not set");const n=ye(r.node.selfAddress),i=await e(n),s=z.unmarshalFromData(i,r.node.selfAddress);r.node.targetAddress=s.targetAddress,r.node.forks=s.forks,r.node.obfuscationKey=s.obfuscationKey;for(const t of r.node.forks.values())t.node.parent=r.node;await t(r.node)}}(t)}function Id(){const t=Math.floor(Date.now()/1e3);return t<=wd?(wd+=1,wd):(wd=t,t)}function Ad(t){return Array.isArray(t)?t:[t]}function Cd(t,e){for(const n of Ad(e)){const e=Xc(n),r=td(n,e.x,e.y),i=od(t,r.lookupKey);if(i)return{privateKey:n,derived:r,entry:i}}throw new Error("Cannot find publisher entry in ACT")}function Ud(t){let e=!0;for(let n=32;n<t.length;n++)if(0!==t[n]){e=!1;break}return ye(e?t.slice(0,32):t)}async function Pd(t,e,n,r,i,s,a){const o=cn(),c=ed(e,o),d=Xc(n),u=[],l=td(n,d.x,d.y);u.push({lookupKey:l.lookupKey,encryptedAccessKey:ed(o,l.accessKeyDecryptionKey)});for(const t of r){const e=td(n,t.x,t.y);u.push({lookupKey:e.lookupKey,encryptedAccessKey:ed(o,e.accessKeyDecryptionKey)})}const h=sd(u),p=!0===i?.beeCompatible,f=await ls(t,h,{encryptionKey:!p||void 0,pin:i?.pin,deferred:i?.deferred,tag:i?.tag,requestOptions:s}),y=ld(r,n),w=await ls(t,y,{encryptionKey:!0,pin:i?.pin,deferred:i?.deferred,requestOptions:s}),g=Id(),m=new z;bd(m,g,f.reference,w.reference);const b=await Sd(m,async(e,n)=>ls(t,e,{encryptionKey:!p||void 0,pin:i?.pin,deferred:i?.deferred,tag:i?.tag,onProgress:n?a:void 0,requestOptions:s})),v=b.rootReference,S=b.tagUid,k=id(d.x,d.y);return{encryptedReference:ye(c),historyReference:v,granteeListReference:w.reference,publisherPubKey:ye(k),actReference:f.reference,tagUid:S}}async function Ed(t,e,n,r,i,s,a){const o=rd(we(r)),c=kd(await Qe(t,n,void 0,void 0,a),we(n));await xd(c,async e=>Qe(t,e,void 0,void 0,a));const d=s?function(t,e){const n=gd(e),r=t.collect();if(0===r.length)return;r.sort((t,e)=>t.fullPathString.localeCompare(e.fullPathString));for(const t of r)if(t.fullPathString>=n)return{timestamp:md(t.fullPathString),metadata:{actReference:ye(t.targetAddress),encryptedGranteeListRef:t.metadata?.[yd]}};const i=r[r.length-1];return{timestamp:md(i.fullPathString),metadata:{actReference:ye(i.targetAddress),encryptedGranteeListRef:i.metadata?.[yd]}}}(c,s):vd(c);if(!d)throw new Error("No ACT entry found in history");const u=d.metadata.actReference,l=ad(await Qe(t,u,void 0,void 0,a));for(const t of Ad(i)){const n=Xc(t);for(const r of[o,n]){const n=td(t,r.x,r.y),i=od(l,n.lookupKey);if(!i)continue;const s=nd(i.encryptedAccessKey,n.accessKeyDecryptionKey);return Ud(nd(we(e),s))}}throw new Error("Access denied: no ACT entry found for this key")}function $d(t){return rd(we(t))}const Dd="index.bin";function Bd(t){return ca(t,t.id.toHex(),t.lastModified??t.createdAt)}function Td(t){return{version:1,accountId:t.accountId,deviceId:"",timestamp:t.timestamp,...vc(t)}}function Od(){return new ge("upload-unavailable","The account is in subsidised mode: the gateway pays for and stamps every upload, so there is no stamp of the account's to return.",{reason:"subsidised"})}const Md=new Map;function Rd(){return new ge("not-authenticated","This session was ended from the account. Connect again to write.")}class Fd{get stampRefusal(){return this.stampLifetime&&eo(this.stampLifetime)}get beeApiUrl(){return this.siteBeeApiUrl??this.ownBeeApiUrl}dropGatewayForOwnCustomNode(){void 0===this.siteBeeApiUrl&&this.ownBeeApiUrl!==dn&&(this.subsidisedGatewayUrl=void 0)}get bee(){return this.beeClientFor(this.isSubsidisedModeActive()?this.subsidisedGatewayUrl:this.beeApiUrl)}get nodeBee(){return this.beeClientFor(this.beeApiUrl)}get accountBee(){return this.beeClientFor(this.ownBeeApiUrl)}beeClientFor(t){let e=this.beeClients.get(t);return e||(this.beeClients.size>=4&&this.beeClients.clear(),e=new ui(t),this.beeClients.set(t,e)),e}constructor(t){this.parentIdentified=!1,this.parentIdentifyReceived=!1,this.authenticated=!1,this.authLoading=!0,this.storagePartitioned=!1,this.busJoinGeneration=0,this.pendingYields=new Map,this.answeredRequests=new Set,this.pendingLaneUpdates=new Map,this.lastRestampMs=new Map,this.popupMode="window",this.beeClients=new Map,this.unsubscribeStorageListeners=[],this.storageWorkQueue=Promise.resolve(),this.isConnecting=!1,this.presence=new fa,this.stamperInitGeneration=0,this.publishInFlight=!1,this.lastDeviceRegistryRefreshAt=0,this.siteAllowList=t.siteAllowList;const e=oa().load();this.ownBeeApiUrl=e?.beeNodeUrl||dn,this.gnosisRpcUrl=e?.gnosisRpcUrl||un,this.postageStampContractAddress=t.postageStampContractAddress||Hc,this.signalingUrl=t.signalingUrl,this.signalingUrl||console.info("[Proxy] No account-bus signaling URL configured — cross-partition and cross-device coordination is off (docs/Account-Bus.md)."),this.setupMessageListener(),this.setupStorageListeners(),this.bus=new bi([]),this.setupBusListeners(),this.announceReady()}setupStorageListeners(){if(this.unsubscribeStorageListeners.length>0)return;const t=aa();if(this.unsubscribeStorageListeners.push(t.subscribe((t,e)=>{this.enqueueReconcile("handleAccountStorageChange",()=>this.handleAccountStorageChange(e?.noRepublish?"bus":"storage"))})),"undefined"!=typeof window){const t=t=>{t.key===Pe&&(this.partitionAccount||(this.applyNetworkSettings(),this.emitConnectionInfoIfChanged()))};window.addEventListener("storage",t),this.unsubscribeStorageListeners.push(()=>window.removeEventListener("storage",t))}}enqueueReconcile(t,e){this.storageWorkQueue=this.storageWorkQueue.then(()=>e().catch(e=>{console.error(`[Proxy] ${t} failed:`,e)}))}applyNetworkSettings(){this.applyNetworkSettingsValues(oa().load())}applyNetworkSettingsValues(t){this.gnosisRpcUrl=t?.gnosisRpcUrl||un;const e=t?.beeNodeUrl||dn;e!==this.ownBeeApiUrl&&(this.ownBeeApiUrl=e,this.dropGatewayForOwnCustomNode())}async handleAccountStorageChange(t="storage"){await this.reevaluateConnection(t)}async reevaluateConnection(t){if(!this.parentOrigin)return;await aa().prime();const e=this.findConnectionForParent();if(e){const{app:n}=e;this.authenticated&&n.appSecret===this.appSecret?(this.storagePartitioned&&"bus"!==t||await this.refreshStampFromStorage(),this.emitConnectionInfoIfChanged()):await this.authenticateFromStorage(n),"storage"===t&&this.schedulePublish("change")}else!this.authenticated||this.storagePartitioned&&"bus"!==t||("storage"===t&&this.publishAccountDelta({ofEndedConnection:!0}),this.clearAuthData(),this.sendToParent({type:"disconnectResponse",requestId:"bus"===t?"account-delta":"storage-event",success:!0}))}async refreshStampFromStorage(){this.joinAccountBus();const t=this.lookupPostageStampForApp(),e=t?.batchID.toHex(),n=t?.signerKey.toHex(),r=t?await this.lookupAccountForApp():void 0,i=r?`${r.owner.toHex()}-${ye(r.encryptionKey)}`:void 0;var s,a;e===this.postageBatchId&&n===this.signerKey&&i===this.stamperAccountFingerprint&&(s=t,a=this.stampLifetime,void 0===s||void 0===a?s===a:s.batchTTL===a.batchTTL&&(s.updatedAt??s.createdAt)===(a.updatedAt??a.createdAt)&&s.usable===a.usable&&s.exists===a.exists)||(this.setResolvedStamp(t),t&&await this.initializeStamper(t.depth))}setResolvedStamp(t){this.teardownCoordinator(),this.stamper=void 0,this.stamperAccountFingerprint=void 0,this.postageBatchId=t?.batchID.toHex(),this.signerKey=t?.signerKey.toHex(),this.stampLifetime=t}async authenticateFromStorage(t){this.appSecret=t.appSecret,this.chatBinding=void 0,this.authenticated=!0,this.restoredSessionCheck=void 0,this.storagePartitioned=!1,this.partitionAccount=void 0,this.authLoading=!1,this.isConnecting=!1,this.deviceId=Pc(),this.joinAccountBus();const e=this.lookupPostageStampForApp();this.setResolvedStamp(e),e&&await this.initializeStamper(e.depth),this.showAuthButton(),this.sendToParent({type:"authSuccess",origin:this.parentOrigin}),this.emitConnectionInfoIfChanged()}async handlePopupMessage(t){if("setSecret"===t.type){if(!this.pendingChallenge||t.challenge!==this.pendingChallenge)return void console.warn("[Proxy] setSecret challenge mismatch — ignoring");if(t.appOrigin!==this.parentOrigin)return console.warn("[Proxy] setSecret appOrigin mismatch:",t.appOrigin,"!==",this.parentOrigin),void this.endRefusedConnect();this.pendingChallenge=void 0,localStorage.removeItem(ln),this.appSecret=t.data.secret,this.chatBinding=this.acceptHandedOverChatBinding(t.data),this.authenticated=!0,this.restoredSessionCheck=void 0,this.storagePartitioned=!0,this.authLoading=!1,this.isConnecting=!1,this.deviceId=Pc(),await this.hydratePartitionAccount(t.data.account,t.data.secret,t.data.networkSettings,Date.now()),this.reactivateThisDevice(),this.savePartitionSession(t.data),this.showAuthButton(),this.sendToParent({type:"authSuccess",origin:this.parentOrigin}),this.emitConnectionInfoIfChanged()}}endRefusedConnect(){this.isConnecting=!1,this.authLoading=!1,this.showAuthButton()}acceptHandedOverChatBinding(t){if(this.parentOrigin)return hn(t.chatBinding,{site:this.parentOrigin,chatAddress:pn(t.secret),signer:t.account.id.toHex()},{allowLocalHttp:!0})}savePartitionSession(t){if(!this.parentOrigin)return;const e=this.parentOrigin,n=this.partitionAccount?.connectedApps.find(t=>t.appUrl===e),r=n?.connectedUntil??Date.now()+_c(this.partitionAccount?.settings),i={...t,account:Js({...t.account,connectedApps:fn(t.account.connectedApps,e)})};this.writePartitionSession(e,async()=>({version:1,parentOrigin:e,connectedUntil:r,data:await Li(JSON.stringify(i))}))}refreshStoredPartitionAccount(){if(!this.partitionAccount||!this.parentOrigin)return;const t=this.parentOrigin,e=Js(this.partitionAccount);this.writePartitionSession(t,async()=>{const n=await this.openStoredPartitionSession(t);if(n&&"unavailable"!==n)return{...n.record,data:await Li(JSON.stringify({...n.wire,account:e}))}})}clearPartitionSession(){this.parentOrigin&&this.writePartitionSession(this.parentOrigin,async()=>null)}writePartitionSession(t,e){const n=yn(t),r=(Md.get(n)??Promise.resolve()).then(async()=>{const t=await e();void 0!==t&&(null===t?localStorage.removeItem(n):localStorage.setItem(n,JSON.stringify(t)))}).catch(t=>{console.warn("[Proxy] Could not persist the partitioned session:",t)});Md.set(n,r)}async openStoredPartitionSession(t){let e,n=null;try{n=localStorage.getItem(yn(t))}catch{return}if(!n)return;try{e=JSON.parse(n)}catch{return}const r=wn.safeParse(e);if(!r.success||!qi(r.data.data))return;await ji([r.data.data]);const i=Wi(r.data.data);if(void 0===i)return Hi(r.data.data)?"unavailable":void 0;try{return{record:r.data,wire:JSON.parse(i)}}catch{return}}async readPartitionSession(){if(!this.parentOrigin)return;const t=this.parentOrigin;await Md.get(yn(t));let e=null;try{e=localStorage.getItem(yn(t))}catch{return}if(!e)return;const n=await this.openStoredPartitionSession(t);if("unavailable"===n)return;const r=n&&gn.safeParse(n.wire);if(n&&r?.success){if(n.record.parentOrigin===t)if(n.record.connectedUntil<=Date.now())this.clearPartitionSession();else{if(void 0===r.data.chatBinding||this.acceptHandedOverChatBinding(r.data))return{parentOrigin:n.record.parentOrigin,connectedUntil:n.record.connectedUntil,data:r.data};this.clearPartitionSession()}}else this.clearPartitionSession()}async hydratePartitionAccount(t,e,n,r){const i=Date.now(),s={...t.connectedApps.find(t=>t.appUrl===this.parentOrigin)??{appUrl:this.parentOrigin,appName:this.appMetadata?.name??this.parentOrigin,lastConnectedAt:r},appSecret:e,lastConnectedAt:r,connectedUntil:i+_c(t.settings)};this.partitionAccount={...t,connectedApps:[s,...fn(t.connectedApps.filter(t=>t.appUrl!==this.parentOrigin),this.parentOrigin)],access:{type:"password",kdfSalt:"",kdfIterations:0},encryptedSeed:""},this.applyNetworkSettingsValues(n),await this.refreshStampFromStorage()}joinAccountBus(){const t=this.findConnectionForParent();if(!t)return;const{derivationKey:e}=t.account,n=t.account.id.toHex();e!==this.busJoinedKey&&this.ensureAccountBusTransports(e,n)}async ensureAccountBusTransports(t,e){const n=++this.busJoinGeneration;let r;try{r=await ha(t)}catch(t){return console.error("[Proxy] Failed to derive the account bus context:",t),void(n===this.busJoinGeneration&&this.detachBusTransports())}if(n!==this.busJoinGeneration)return;const i=this.busTopic!==r.topic;if(i){this.detachBusTransports();try{this.removeBusLocal=this.bus.addTransport(new mi(r.topic))}catch(t){return void console.error("[Proxy] Failed to attach the local bus transport:",t)}this.busTopic=r.topic,this.presenceTimer=setInterval(()=>this.publishPresence(),2e4)}if(this.busBoundAccountId=e,i&&this.publishPresence(),this.signalingUrl&&!this.removeBusSignaling)try{this.removeBusSignaling=this.bus.addTransport(new va({url:this.signalingUrl,topic:r.topic,encryptionKey:r.encryptionKey,createPeerConnection:"undefined"!=typeof RTCPeerConnection?()=>new RTCPeerConnection:void 0}))}catch(t){return void console.error("[Proxy] Failed to attach the bus signaling transport:",t)}this.busJoinedKey=t}publishPresence(){const t=this.busBoundAccountId,e=this.deviceId;t&&e&&this.bus.publish({type:"presence",accountId:t,fromDeviceId:e})}stopPresence(){void 0!==this.presenceTimer&&(clearInterval(this.presenceTimer),this.presenceTimer=void 0),this.presence.clear()}detachBusTransports(){this.stopPresence(),this.removeBusSignaling?.(),this.removeBusSignaling=void 0,this.removeBusLocal?.(),this.removeBusLocal=void 0,this.busTopic=void 0,this.busJoinedKey=void 0,this.busBoundAccountId=void 0}destroy(){for(const t of this.unsubscribeStorageListeners)t();this.unsubscribeStorageListeners=[],this.teardownCoordinator(),void 0!==this.publishTimer&&(clearTimeout(this.publishTimer),this.publishTimer=void 0),this.busJoinGeneration+=1,this.stopPresence(),this.removeBusLocal=void 0,this.removeBusSignaling=void 0,this.busTopic=void 0,this.busJoinedKey=void 0,this.busBoundAccountId=void 0,this.bus.close()}teardownCoordinator(){this.cancelPendingYields(),this.coordinator?.teardown(),this.coordinator=void 0,this.terminateStampWorkerPool()}terminateStampWorkerPool(){this.stampWorkerPool?.terminate(),this.stampWorkerPool=void 0}static laneKey(t,e,n){return`${t}:${e}/${n}`}bufferLaneUpdate(t){const e=Fd.laneKey(t.batchId,t.partition,t.partitionCount),n=this.pendingLaneUpdates.get(e)??new Map;for(const{index:e,value:r}of t.buckets){const t=n.get(e);(void 0===t||r>t)&&n.set(e,r)}this.pendingLaneUpdates.set(e,n)}applyPendingLaneUpdate(){const t=this.pendingLaneUpdates;this.pendingLaneUpdates=new Map;const e=this.stamper?.currentPartition;if(!this.stamper||!this.postageBatchId||void 0===e)return;const n=t.get(Fd.laneKey(this.postageBatchId,e,this.stamper.partitionCount));n&&this.stamper.applyUtilizationUpdate([...n].map(([t,e])=>({index:t,value:e})))}answerLeaseRequest(t,e,n){const r=this.coordinator;r&&(this.answeredRequests.has(n)||(this.markRequestAnswered(n),this.bus.publish({type:"lease-claim",accountId:t,batchId:e,fromDeviceId:this.requireDeviceId(),requestId:n}),r.yieldForPeer(n).catch(t=>{console.error("[Proxy] Peer lease yield failed:",t)})))}yieldRankDelayMs(t){const e=this.coordinator,n=e?.currentPartition,r=e?.partitionCount??1;if(void 0===n||r<=1)return 0;const i=Number.parseInt(t.slice(0,8),16);return Number.isFinite(i)?(i+n)%r*250:250*(r-1)}standDownFromRequest(t){if(void 0===t)return;this.markRequestAnswered(t);const e=this.pendingYields.get(t);void 0!==e&&(clearTimeout(e),this.pendingYields.delete(t))}markRequestAnswered(t){if(this.answeredRequests.add(t),this.answeredRequests.size<=32)return;const e=this.answeredRequests.values().next().value;void 0!==e&&this.answeredRequests.delete(e)}cancelPendingYields(){for(const t of this.pendingYields.values())clearTimeout(t);this.pendingYields.clear()}setupBusListeners(){this.bus.onPeerLeft(t=>this.presence.forgetPeer(t)),this.bus.subscribe((t,e)=>{switch(t.type){case"utilization-updated":{if(t.batchId!==this.postageBatchId||!this.stamper)return;const e=this.stamper.currentPartition;return void 0===e?void(0===t.partition&&1===t.partitionCount?this.stamper.applyUtilizationUpdate(t.buckets):this.bufferLaneUpdate(t)):void(t.partition===e&&t.partitionCount===this.stamper.partitionCount&&this.stamper.applyUtilizationUpdate(t.buckets))}case"lease-request":{const e=this.coordinator;if(!e||t.accountId!==e.accountId||t.batchId!==e.batchId||t.fromDeviceId===this.deviceId)return;const{requestId:n}=t;if(this.pendingYields.has(n))return;if(this.answeredRequests.has(n))return;if(!e.canYieldForPeer)return;const r=setTimeout(()=>{this.pendingYields.delete(n),this.answerLeaseRequest(t.accountId,t.batchId,n)},this.yieldRankDelayMs(n));return void this.pendingYields.set(n,r)}case"lease-claim":if(t.fromDeviceId===this.deviceId||t.accountId!==this.coordinator?.accountId||t.batchId!==this.coordinator?.batchId)return;return void this.standDownFromRequest(t.requestId);case"lease-released":if(t.fromDeviceId===this.deviceId||t.accountId!==this.coordinator?.accountId||t.batchId!==this.coordinator?.batchId)return;return this.standDownFromRequest(t.requestId),void this.coordinator?.notifySlotMaybeFree();case"account-delta":return void this.applyAccountDelta(t.snapshot);case"presence":if(t.accountId!==this.busBoundAccountId||t.fromDeviceId===this.deviceId)return;return void this.presence.observe(t.fromDeviceId,Date.now(),e)}})}applyAccountDelta(t){const e=this.findConnectionForParent({includeEnded:!0});if(!e||t.accountId!==e.account.id.toHex())return;const{account:n}=e;if(this.partitionAccount){const r=Cc([Td(Bd(n)),Td(t)],ro(n.devices,t.metadata.devices),n.id.toHex()),i=Mc({id:n.id,derivationKey:n.derivationKey,account:r,lastModified:Math.max(n.lastModified??n.createdAt,t.metadata.lastModified)}),s=fn(la(r.connectedApps,n.connectedApps),e.app.appUrl);this.partitionAccount={...this.partitionAccount,...i,connectedApps:s,postageStamps:to(s.find(t=>t.appUrl===e.app.appUrl)??e.app,i,i.postageStamps)},this.refreshStoredPartitionAccount()}this.enqueueReconcile("applyAccountDelta",()=>this.reevaluateConnection("bus"))}createProgressCallback(t,e,n){if(n)return n=>{this.postMessage(t,{type:"uploadProgress",requestId:e,total:n.total,processed:n.processed})}}announceReady(){window.parent&&window.parent!==window&&window.parent.postMessage({type:"proxyInitialized"},"*")}getPostageBatchId(){return this.postageBatchId}getSignerKey(){return this.signerKey}async initializeStamper(t){const{signerKey:e,postageBatchId:n}=this;if(!e||!n)return void console.warn("[Proxy] Cannot initialize stamper: missing signer key or batch ID");const r=++this.stamperInitGeneration,i=()=>this.postageBatchId!==n||this.signerKey!==e||this.stamperInitGeneration!==r,s=await this.lookupAccountForApp();if(i())return;if(!s)return void console.warn("[Proxy] Cannot initialize stamper: account not found");let a;this.utilizationStore||(this.utilizationStore=new Ma);try{a=await Gs.create(e,new p(n),t,this.utilizationStore,s.owner,s.encryptionKey)}catch(t){return void console.error("[Proxy] Failed to create stamper:",t)}if(i())return;this.stamper=a,this.stamperAccountFingerprint=`${s.owner.toHex()}-${ye(s.encryptionKey)}`;const o=function(){try{if("undefined"==typeof localStorage)return;const t=localStorage.getItem("swarm-id-partition-tuning");if(!t)return;const e=JSON.parse(t);if("object"!=typeof e||null===e)return;const n=t=>"number"==typeof t&&Number.isFinite(t)&&t>=0?t:void 0,r=e;return{guardWindowMs:n(r.guardWindowMs),guardPollMs:n(r.guardPollMs),readTimeoutMs:n(r.readTimeoutMs)}}catch{return}}(),c=()=>this.accountBee;this.coordinator=new Vo({get bee(){return c()},batchId:n,stamper:a,deviceId:this.requireDeviceId(),knownDeviceIds:()=>this.knownDeviceIdsForAccount(s.accountId),refreshKnownDeviceIds:()=>this.refreshDeviceRegistryFromSwarm(s.accountId,s.encryptionKey),intentReadTimeoutMs:o?.readTimeoutMs,intentGuardWindowMs:o?.guardWindowMs,intentGuardPollMs:o?.guardPollMs,accountId:s.accountId,backupSigner:new I(Oe(ye(s.encryptionKey),Ue)),swarmEncryptionKey:s.encryptionKey,partitionCount:s.partitionCount,mode:"persistent",readLeaseCache:()=>this.readLeaseCache(s.accountId,n),writeLeaseCache:t=>this.writeLeaseCache(s.accountId,n,t??null),flushStamperState:()=>this.saveStamperStateIfNeeded(),getWorkerPool:t=>this.getOrCreateWorkerPool(t),onLeaseChange:()=>this.emitConnectionInfoIfChanged(),onSlotWait:()=>this.bus.publish({type:"lease-request",accountId:s.accountId,batchId:n,fromDeviceId:this.requireDeviceId(),requestId:crypto.randomUUID().slice(0,8)}),onLeaseAcquired:()=>{this.applyPendingLaneUpdate(),this.schedulePublish("acquired")},onLeaseReleased:(t,e)=>{this.bus.publish({type:"lease-released",accountId:s.accountId,batchId:n,partition:t,fromDeviceId:this.requireDeviceId(),requestId:e})}}),this.startLeaseOnceAllowed(this.coordinator)}startLeaseOnceAllowed(t){const e=this.restoredSessionCheck;e?e.verdict.then(e=>{"allowed"===e&&this.coordinator===t&&t.startLease()}):t.startLease()}requireDeviceId(){return this.deviceId||(this.deviceId=Pc()),this.deviceId}readLeaseCache(t,e){try{const n=localStorage.getItem(mn(t,e));return n?JSON.parse(n):void 0}catch{return}}writeLeaseCache(t,e,n){const r=mn(t,e);null===n?localStorage.removeItem(r):localStorage.setItem(r,JSON.stringify(n))}async getOrCreateWorkerPool(t){const e=t??("undefined"!=typeof navigator&&navigator.hardwareConcurrency?Math.min(navigator.hardwareConcurrency,8):4);if(this.stampWorkerPool?.size===e&&this.stampWorkerPool.stamper===this.stamper)return this.stampWorkerPool;if(this.terminateStampWorkerPool(),this.signerKey&&this.stamper)try{return this.stampWorkerPool=await Qa.create(this.signerKey,this.stamper,e),this.stampWorkerPool}catch(t){return void console.warn("[Proxy] Failed to create StampWorkerPool:",t)}}async saveStamperState(){try{await this.persistStamperState()}catch(t){console.error("[Proxy] Failed to save stamper state:",t)}}async persistStamperState(){if(!this.stamper)return;const t=this.stamper.getBucketUpdatesForBroadcast(),e=this.stamper.currentPartition??0,n=this.stamper.partitionCount;await this.stamper.flush(),this.postageBatchId&&t.length>0&&this.bus.publish({type:"utilization-updated",batchId:this.postageBatchId,partition:e,partitionCount:n,buckets:t},{localOnly:!0})}async withModeAwareWriteLock(t,e){if(this.isSubsidisedModeActive())return e({mode:"subsidised",gatewayUrl:this.subsidisedGatewayUrl});if(!this.coordinator)throw new ge("not-authenticated","Stamper not initialized. Please login first.");return this.coordinator.withWrite(t=>e("stamper"===t.mode?{...t,bee:this.nodeBee}:t),t)}async saveStamperStateIfNeeded(){this.isSubsidisedModeActive()||await this.saveStamperState()}setupMessageListener(){window.addEventListener("message",async t=>{const{type:e}=t.data;if("parentIdentify"===e){if(t.source!==window.parent)return void console.warn("[Proxy] Rejected parentIdentify from non-parent window");const e=bn.safeParse(t.data);if(!e.success)return void console.warn("[Proxy] Invalid parentIdentify message:",e.error);try{await this.handleParentIdentify(e.data,t)}catch(e){console.error("[Proxy] Initialization failed:",e),this.postMessage(t,{type:"initError",error:e instanceof Error?e.message:"Initialization failed"})}return}if(!this.parentIdentified)return void console.warn("[Proxy] Ignoring message - parent not identified yet");if(t.origin===window.location.origin&&"setSecret"===e){const e=vn.safeParse(t.data);return e.success?void await this.handlePopupMessage(e.data):(console.warn("[Proxy] Invalid setSecret payload:",e.error),void this.endRefusedConnect())}if(t.origin!==this.parentOrigin)return void console.warn("[Proxy] Rejected message from unauthorized origin:",t.origin);let n;try{n=Sn.parse(t.data)}catch(t){return void console.warn("[Proxy] Invalid parent message:",t)}try{await this.handleParentMessage(n,t)}catch(e){console.error("[Proxy] Error handling parent message:",e),this.sendErrorToParent(t,n.requestId,e,"Unknown error")}})}async handleParentIdentify(t,e){if(this.parentIdentifyReceived)return void console.error("[Proxy] Parent already identified! Ignoring duplicate.");this.parentIdentifyReceived=!0;const n=await this.siteAllowList.check(e.origin);if(!n.allowed)throw console.warn("[Proxy] Refused parent:",n.message),new Error(n.message);const r=t.popupMode,i=t.metadata,s=t.buttonConfig;this.parentOrigin=e.origin,this.parentIdentified=!0,e.source&&(this.parentWindow=e.source),r&&(this.popupMode=r),i&&(this.appMetadata=i),s&&(this.buttonConfig=s),this.siteBeeApiUrl=t.beeApiUrl,this.siteSubsidisedGatewayUrl=t.subsidisedGatewayUrl,this.subsidisedGatewayUrl=t.subsidisedGatewayUrl,this.dropGatewayForOwnCustomNode(),await this.loadAuthData(),this.postMessage(e,{type:"proxyReady",authenticated:this.authenticated,parentOrigin:this.parentOrigin,storageShared:Nc()}),this.emitConnectionInfoIfChanged()}async handleParentMessage(t,e){switch(t.type){case"parentIdentify":break;case"checkAuth":this.handleCheckAuth(t,e);break;case"disconnect":this.handleDisconnect(t,e);break;case"uploadData":await this.handleUploadData(t,e);break;case"downloadData":await this.handleDownloadData(t,e);break;case"deriveAppSecret":await this.handleDeriveAppSecret(t,e);break;case"getChatKey":await this.handleGetChatKey(t,e);break;case"setBeeApiUrl":this.handleSetBeeApiUrl(t,e);break;case"stampChunk":await this.handleStampChunk(t,e);break;case"uploadFile":await this.handleUploadFile(t,e);break;case"downloadFile":await this.handleDownloadFile(t,e);break;case"uploadFiles":await this.handleUploadFiles(t,e);break;case"listFiles":await this.handleListFiles(t,e);break;case"uploadChunk":await this.handleUploadChunk(t,e);break;case"downloadChunk":await this.handleDownloadChunk(t,e);break;case"isConnected":await this.handleIsConnected(t,e);break;case"getNodeInfo":await this.handleGetNodeInfo(t,e);break;case"gsocMine":this.handleGsocMine(t,e);break;case"gsocSend":await this.handleGsocSend(t,e);break;case"socUpload":await this.handleSocUpload(t,e);break;case"socRawUpload":await this.handleSocRawUpload(t,e);break;case"socDownload":await this.handleSocDownload(t,e);break;case"socRawDownload":await this.handleSocRawDownload(t,e);break;case"socGetOwner":await this.handleSocGetOwner(t,e);break;case"epochFeedDownloadReference":await this.handleEpochFeedDownloadReference(t,e);break;case"epochFeedUploadReference":await this.handleEpochFeedUploadReference(t,e);break;case"feedGetOwner":await this.handleFeedGetOwner(t,e);break;case"seqFeedGetOwner":await this.handleSequentialFeedGetOwner(t,e);break;case"seqFeedDownloadPayload":await this.handleSequentialFeedDownloadPayload(t,e);break;case"seqFeedDownloadRawPayload":await this.handleSequentialFeedDownloadRawPayload(t,e);break;case"seqFeedDownloadReference":await this.handleSequentialFeedDownloadReference(t,e);break;case"seqFeedUploadPayload":await this.handleSequentialFeedUploadPayload(t,e);break;case"seqFeedUploadRawPayload":await this.handleSequentialFeedUploadRawPayload(t,e);break;case"seqFeedUploadReference":await this.handleSequentialFeedUploadReference(t,e);break;case"actUploadData":await this.handleActUploadData(t,e);break;case"actDownloadData":await this.handleActDownloadData(t,e);break;case"actAddGrantees":await this.handleActAddGrantees(t,e);break;case"actRevokeGrantees":await this.handleActRevokeGrantees(t,e);break;case"actGetGrantees":await this.handleActGetGrantees(t,e);break;case"getPostageBatch":await this.handleGetPostageBatch(t,e);break;case"createFeedManifest":await this.handleCreateFeedManifest(t,e);break;case"connect":this.handleConnect(t,e);break;default:const n=t;console.warn("[Proxy] Unhandled message type:",n)}}async loadAuthData(){if(!this.parentOrigin)return void(this.authLoading=!1);await aa().prime();const t=this.lookupAppSecretFromSharedStorage();if(t){const e=this.findConnectionForParent();e&&this.startRestoredSessionCheck({bee:this.accountBee,derivationKey:e.account.derivationKey,accountId:e.account.id.toHex(),appOrigin:this.parentOrigin,connectedAt:e.app.lastConnectedAt}),this.appSecret=t.secret,this.chatBinding=void 0,this.authenticated=!0,this.authLoading=!1,this.showAuthButton(),this.joinAccountBus();const n=this.lookupPostageStampForApp();return this.setResolvedStamp(n),void(n&&await this.initializeStamper(n.depth))}const e=await this.readPartitionSession();e?await this.restorePartitionSession(e):(this.authLoading=!1,this.showAuthButton())}async restorePartitionSession(t){const{data:e}=t,n=e.account.connectedApps.find(t=>t.appUrl===this.parentOrigin)?.lastConnectedAt;this.startRestoredSessionCheck({bee:this.accountBee,derivationKey:e.account.derivationKey,accountId:e.account.id.toHex(),appOrigin:this.parentOrigin,connectedAt:n}),this.appSecret=e.secret,this.chatBinding=this.acceptHandedOverChatBinding(e),this.authenticated=!0,this.storagePartitioned=!0,this.authLoading=!1,this.deviceId=Pc(),await this.hydratePartitionAccount(e.account,e.secret,e.networkSettings,n??Date.now()),this.showAuthButton(),this.emitConnectionInfoIfChanged()}startRestoredSessionCheck(t){const e={input:t,settled:void 0,verdict:qc(t)};this.restoredSessionCheck=e,e.verdict.then(t=>{e.settled=t,this.restoredSessionCheck===e&&("ended"===t?(console.info("[Proxy] The restored session was ended while this page was closed"),this.clearAuthData()):"unconfirmed"===t&&console.warn("[Proxy] Could not confirm the restored session, writes stay refused"),this.emitConnectionInfoIfChanged())})}async awaitRestoredSessionAllowed(){let t=this.restoredSessionCheck;if(!t)return;"unconfirmed"===t.settled&&(this.startRestoredSessionCheck({...t.input,bee:this.accountBee}),t=this.restoredSessionCheck);const e=await t.verdict;if("allowed"!==e){if("ended"===e)throw Rd();throw new ge("upload-unavailable","Could not confirm with Swarm that this session is still allowed to write, so writes are refused until it can be confirmed.",{reason:"session-unconfirmed"})}}async ensureCanWrite(){if("ended"===this.restoredSessionCheck?.settled)throw Rd();this.ensureCanUpload(),await this.awaitRestoredSessionAllowed(),this.ensureCanUpload()}lookupPostageStampForApp(){if(this.parentOrigin)try{const t=this.findConnectionForParent();if(!t)return;const{account:e,app:n}=t;return function(t,e,n){const r=[t.postageStampBatchID,e.defaultPostageStampBatchID];for(const t of r){if(!t)continue;const e=n.find(e=>!e.deletedAt&&e.batchID.equals(t));if(e)return e}}(n,e,e.postageStamps)}catch(t){return void console.error("[Proxy] Error looking up postage stamp:",t)}}async lookupAccountForApp(){if(this.parentOrigin)try{const t=this.findConnectionForParent();if(!t)return;const{account:e}=t,n=await en(e.derivationKey);return{owner:e.id,encryptionKey:we(n),accountId:e.id.toHex(),partitionCount:e.partitionCount??1}}catch(t){return void console.error("[Proxy] Error looking up account:",t)}}knownDeviceIdsForAccount(t){const e=Date.now(),n=this.busBoundAccountId===t?this.presence.liveDeviceIds(e):[];try{const r=this.partitionAccount?.id.toHex()===t?this.partitionAccount:aa().load().find(e=>e.id.toHex()===t);return!r||De(r)?n:[...new Set([...Tc(r.devices,e,Bc),...n])]}catch{return n}}async refreshDeviceRegistryFromSwarm(t,e){const n=Date.now();if(!(n-this.lastDeviceRegistryRefreshAt<8e3)){this.lastDeviceRegistryRefreshAt=n;try{const n=this.partitionAccount?.id.toHex()===t,r=n?void 0:aa();await(r?.prime());const i=r?.load()??[],s=n?this.partitionAccount:i.find(e=>e.id.toHex()===t);if(!s||De(s))return;const a=new I(await Ae(ye(e),Ue)).publicKey().address(),o=await fc({bee:this.accountBee,accountId:s.id.toHex(),owner:a});if(0===o.length)return;const c=Ec(ro(s.devices,o),this.requireDeviceId(),this.announcedDeviceName());(function(t,e,n){if(t.length!==e.length)return!0;const r=new Map(t.map(t=>[t.deviceId,t]));return e.some(t=>{const e=r.get(t.deviceId);if(!e)return!0;const i=t.deviceId===n;return Dc.some(([n,r])=>(!i||"peers-only"!==r)&&e[n]!==t[n])})})(s.devices,c,this.requireDeviceId())&&(n?this.partitionAccount={...s,devices:c}:r.update(e=>e.map(e=>e.id.toHex()===t?{...e,devices:c}:e)).catch(()=>{}))}catch(t){console.warn("[Proxy] Device-registry refresh failed (using current registry):",t)}}}buildAccountStateSnapshot(t){if(!this.parentOrigin)return;const e=this.findConnectionForParent({includeEnded:t.includeEndedConnection});if(!e)return;const{account:n}=e;return!t.requireDefaultStamp||n.defaultPostageStampBatchID?ca(n,n.id.toHex(),Date.now()):void 0}publishAccountDelta(t){const e=this.buildAccountStateSnapshot({requireDefaultStamp:!1,includeEndedConnection:!0===t?.ofEndedConnection});e&&(void 0===this.busBoundAccountId||e.accountId===this.busBoundAccountId?this.bus.publish({type:"account-delta",snapshot:ua(e)}):console.warn(`[Proxy] Account changed since the bus room was joined (snapshot ${e.accountId} vs bus room ${this.busBoundAccountId}); skipping delta.`))}async buildAccountStateSnapshotForPublish(){if(this.parentOrigin)try{const t=this.findConnectionForParent();if(!t)return;const e=this.buildAccountStateSnapshot({requireDefaultStamp:!0,includeEndedConnection:!1});if(!e)return;const n=await en(t.account.derivationKey),r=new I(await Ae(n,Ue)),i=r.publicKey().address();return{snapshot:e,encryptionKey:n,accountKey:r,owner:i}}catch(t){return void console.error("[Proxy] Failed to assemble account-state snapshot:",t)}}schedulePublish(t){"change"!==this.publishReason&&(this.publishReason=t),void 0!==this.publishTimer&&clearTimeout(this.publishTimer),this.publishTimer=setTimeout(()=>{this.publishTimer=void 0;const t=this.publishReason??"acquired";this.publishReason=void 0,this.runAccountStatePublish(t)},1500)}async runAccountStatePublish(t){if(this.publishInFlight)return void this.schedulePublish(t);"change"===t&&this.publishAccountDelta();const e=this.coordinator;if(e&&void 0!==e.currentPartition){this.publishInFlight=!0;try{const n=await this.buildAccountStateSnapshotForPublish();if(!n)return;if(this.coordinator!==e)return;const{snapshot:r,encryptionKey:i,accountKey:s,owner:a}=n;if(r.accountId!==e.accountId)return void console.warn(`[Proxy] Account changed during publish scheduling (snapshot ${r.accountId} vs coordinator ${e.accountId}); skipping publish.`);const o=this.requireDeviceId();if("acquired"===t){const t=(await fc({bee:this.accountBee,accountId:r.accountId,owner:a}).catch(()=>[])).find(t=>t.deviceId===o);if(t?.removedAt){const e=r.metadata.devices.find(t=>t.deviceId===o);if(!(!!e&&!e.removedAt&&(e.lastSignedInAt??0)>t.removedAt))return void console.info(`[Proxy] This device is tombstoned in the roster for ${r.accountId}; not re-announcing.`);console.info(`[Proxy] This device signed in since its removal from ${r.accountId}; announcing the reactivation.`)}else if(t)return void console.info(`[Proxy] Device already in roster for ${r.accountId}; skipping announce publish.`)}const c=r.metadata.devices.find(t=>t.deviceId===o)??{deviceId:o,name:this.announcedDeviceName(),createdAt:Date.now(),lastSignedInAt:Date.now()},d=vc(r);await e.withWrite(t=>xc({bee:this.accountBee,accountId:r.accountId,device:c,accountKey:s,owner:a,encryptionKey:i,view:d,target:t})),console.info(`[Proxy] Published device state for ${r.accountId} (partition ${e.currentPartition})`)}catch(t){console.warn("[Proxy] Account-state publish failed:",t)}finally{this.publishInFlight=!1}}}reactivateThisDevice(){const t=this.partitionAccount,e=this.deviceId;if(!t||!e)return;if(!t.devices.some(t=>t.deviceId===e&&t.removedAt))return;const n=Date.now();this.partitionAccount={...t,devices:t.devices.map(t=>t.deviceId===e?{...t,removedAt:void 0,lastSignedInAt:n}:t)}}announcedDeviceName(){return this.storagePartitioned&&this.parentOrigin?function(t){const e=$c();try{return`${e} · ${new URL(t).host}`}catch{return e}}(this.parentOrigin):$c()}isConnectionValid(t){return!!t.connectedUntil&&t.connectedUntil>Date.now()}findConnectionForParent(t){if(!this.parentOrigin)return;const e=e=>this.isConnectionValid(e)||!0===t?.includeEnded;if(this.partitionAccount){const t=this.partitionAccount.connectedApps.find(t=>t.appUrl===this.parentOrigin&&e(t));return t?{account:this.partitionAccount,app:t}:void 0}const n=aa().load(),r=[];for(const t of n)if(!De(t))for(const n of t.connectedApps)n.appUrl===this.parentOrigin&&e(n)&&r.push({account:t,app:n});return r.sort((t,e)=>Number(this.isConnectionValid(e.app))-Number(this.isConnectionValid(t.app))||e.app.lastConnectedAt-t.app.lastConnectedAt)[0]}lookupAppSecretFromSharedStorage(){if(this.parentOrigin)try{const t=this.findConnectionForParent();if(!t?.app.appSecret)return;return{secret:t.app.appSecret}}catch(t){return void console.error("[Proxy] Error looking up app secret from shared storage:",t)}}clearAuthData(){if(!this.parentOrigin)return;this.clearPartitionSession();const t=`swarm-stamper-${this.parentOrigin}-${this.postageBatchId}`;localStorage.removeItem(t);const e=this.parentOrigin;aa().update(t=>{let n=!1;const r=t.map(t=>{if(De(t))return t;const r=t.connectedApps.map(t=>t.appUrl===e?(n=!0,{...t,connectedUntil:void 0,appSecret:void 0,disconnectedAt:Date.now()}):t);return{...t,connectedApps:r}});return n?r:void 0}).catch(()=>{}),this.authenticated=!1,this.authLoading=!1,this.appSecret=void 0,this.chatBinding=void 0,this.setResolvedStamp(void 0),this.deviceId=void 0,void 0!==this.publishTimer&&(clearTimeout(this.publishTimer),this.publishTimer=void 0),this.pendingLaneUpdates.clear(),this.storagePartitioned=!1,this.partitionAccount=void 0,this.detachBusTransports(),this.busJoinGeneration+=1,this.pendingChallenge=void 0,this.emitConnectionInfoIfChanged(),this.showAuthButton()}sendErrorToParent(t,e,n,r){e&&this.postMessage(t,{type:"error",requestId:e,...Ji(n,r)})}ensureCanUpload(){if(!this.authenticated||!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");if(!this.isSubsidisedModeActive()){if("stamp-expired"===this.stampRefusal)throw new ge("upload-unavailable","The account's drive has expired. Renew it or add another in Swarm ID before uploading.",{reason:"stamp-expired"});if("stamp-not-usable"===this.stampRefusal)throw new ge("upload-unavailable","The account's drive is not usable: its record says the node does not have the batch, or cannot use it. Open the drive in Swarm ID to refresh it, or add another, before uploading.",{reason:"stamp-not-usable"})}}hasUsableUserStamp(){return!(!this.postageBatchId||!this.signerKey)&&(!this.stampRefusal&&!!this.stamper)}isSubsidisedModeActive(){return!!this.subsidisedGatewayUrl&&!this.hasUsableUserStamp()}sendToParent(t){this.parentOrigin&&this.parentWindow?this.parentWindow.postMessage(t,this.parentOrigin):console.warn("[Proxy] Cannot send message to parent - no parent window reference")}postMessage(t,e){t.source?t.source.postMessage(e,{targetOrigin:t.origin}):console.warn("[Proxy] Cannot send message - no event source")}handleCheckAuth(t,e){this.postMessage(e,{type:"authStatusResponse",requestId:t.requestId,authenticated:this.authenticated,origin:this.authenticated?this.parentOrigin:void 0,beeApiUrl:this.siteBeeApiUrl})}identityKeysFor(t){return this.identityKeys?.derivationKey!==t&&(this.identityKeys={derivationKey:t,sharingPublicKey:kn(t).publicKey,postageSignerAddress:new I(xn(t)).publicKey().address().toHex()}),this.identityKeys}buildConnectionInfo(){let t,e;if(this.authenticated&&this.parentOrigin)try{const e=this.findConnectionForParent();if(e){const{account:n}=e,{sharingPublicKey:r,postageSignerAddress:i}=this.identityKeysFor(n.derivationKey);t={id:n.id.toHex(),name:n.name,address:n.id.toHex(),publicKey:n.publicKey,sharingPublicKey:r,postageSignerAddress:i,avatar:In(n.id.toHex())}}}catch(t){console.error("[Proxy] Error looking up identity:",t)}if(this.authenticated&&this.appSecret){const t=we(this.appSecret),{x:n,y:r}=Xc(t),i=id(n,r);e={address:new I(this.appSecret).publicKey().address().toHex(),publicKey:ye(i)}}let n="unavailable";return this.authenticated&&this.appSecret&&"unconfirmed"!==this.restoredSessionCheck?.settled&&(this.hasUsableUserStamp()?n="user-stamp":this.subsidisedGatewayUrl&&(n="subsidised")),{canUpload:"unavailable"!==n,storagePartitioned:this.storagePartitioned||void 0,uploadMode:n,uploadUnavailableReason:"unavailable"===n?this.uploadUnavailableReason():void 0,identity:t,appKey:e,partition:this.coordinator?.currentPartition,chatBinding:this.authenticated?this.chatBinding:void 0,beeApiUrl:this.siteBeeApiUrl}}uploadUnavailableReason(){if(this.authenticated&&this.appSecret)return"unconfirmed"===this.restoredSessionCheck?.settled?"session-unconfirmed":this.postageBatchId&&this.signerKey?this.stampRefusal?this.stampRefusal:this.stamper?void 0:"stamper-failed":"no-stamp"}emitConnectionInfoIfChanged(){if(!this.parentOrigin)return;const t=this.buildConnectionInfo();var e,n;(e=this.lastConnectionInfo,n=t,e&&e.canUpload===n.canUpload&&!!e.storagePartitioned==!!n.storagePartitioned&&e.uploadMode===n.uploadMode&&e.uploadUnavailableReason===n.uploadUnavailableReason&&e.identity?.id===n.identity?.id&&e.identity?.name===n.identity?.name&&e.identity?.address===n.identity?.address&&e.identity?.publicKey===n.identity?.publicKey&&e.identity?.avatar.source===n.identity?.avatar.source&&e.identity?.avatar.url===n.identity?.avatar.url&&e.appKey?.address===n.appKey?.address&&e.appKey?.publicKey===n.appKey?.publicKey&&e.partition===n.partition&&e.chatBinding?.message===n.chatBinding?.message&&e.chatBinding?.signature===n.chatBinding?.signature&&e.beeApiUrl===n.beeApiUrl)||(this.lastConnectionInfo=t,this.sendToParent({type:"connectionInfoChanged",canUpload:t.canUpload,storagePartitioned:t.storagePartitioned,uploadMode:t.uploadMode,uploadUnavailableReason:t.uploadUnavailableReason,identity:t.identity,appKey:t.appKey,partition:t.partition,chatBinding:t.chatBinding,beeApiUrl:t.beeApiUrl}))}async handleIsConnected(t,e){const n=await this.bee.connectivity.isConnected();this.postMessage(e,{type:"isConnectedResponse",requestId:t.requestId,connected:n})}async handleGetNodeInfo(t,e){try{const n=await this.bee.status.getNodeInfo();this.postMessage(e,{type:"getNodeInfoResponse",requestId:t.requestId,beeMode:n.beeMode,chequebookEnabled:n.chequebookEnabled,swapEnabled:n.swapEnabled})}catch(n){this.sendErrorToParent(e,t.requestId,n,"Failed to get node info")}}handleDisconnect(t,e){this.clearAuthData(),this.postMessage(e,{type:"disconnectResponse",requestId:t.requestId,success:!0})}showAuthButton(){if(!this.authButtonContainer||this.isConnecting)return;this.authButtonContainer.innerHTML="";const t=document.createElement("button"),e=this.authenticated,n=this.authLoading,r=this.buttonConfig||{},i=r.loadingText||"⏳ Loading...",s=r.disconnectText||"🔓 Disconnect from Swarm ID",a=r.connectText||"🔐 Login with Swarm ID";n?(t.textContent=i,t.disabled=!0):t.textContent=e?s:a,t.style.width="100%",t.style.height="100%",t.style.display="flex",t.style.alignItems="center",t.style.justifyContent="center",n?(t.style.backgroundColor="#999",t.style.cursor="default"):e?(t.style.backgroundColor="#666",t.style.cursor="pointer"):(t.style.backgroundColor=r.backgroundColor||"#dd7200",t.style.cursor="pointer"),t.style.color=r.color||"white",t.style.border="none",t.style.borderRadius=r.borderRadius||"0",t.style.padding="0",t.style.fontSize=r.fontSize||"14px",t.style.fontWeight=r.fontWeight?.toString()??"600",r.fontFamily&&(t.style.fontFamily=r.fontFamily),t.addEventListener("click",()=>{e?this.handleDisconnectClick():this.handleLoginClick(t)}),this.authButtonContainer.appendChild(t)}handleConnect(t,e){const n=this.openAuthPopup({popupMode:t.popupMode});this.postMessage(e,{type:"connectResponse",requestId:t.requestId,success:n})}openAuthPopup(t){if(!this.parentOrigin)return console.error("[Proxy] Cannot open auth window - parent origin not set"),!1;const e=crypto.randomUUID();this.pendingChallenge=e,localStorage.setItem(ln,e);const n=window.location.pathname.replace(/\/proxy$/,""),r=An(window.location.origin+n,this.parentOrigin,this.appMetadata,{challenge:e}),i=t?.popupMode??this.popupMode;let s=null;if(s="popup"===i?window.open(r,"_blank","width=500,height=600"):window.open(r,"_blank"),!s)return console.warn("[Proxy] Popup was blocked or failed to open"),this.isConnecting=!1,this.showAuthButton(),!1;return setTimeout(()=>{const t=setInterval(()=>{s?.closed&&(clearInterval(t),this.isConnecting&&!this.authenticated&&(this.isConnecting=!1,this.showAuthButton()))},500);setTimeout(()=>{clearInterval(t)},3e5)},2e3),!0}handleLoginClick(t){if(this.isConnecting=!0,t.disabled=!0,t.innerHTML='<span style="display: inline-block; width: 16px; height: 16px; border: 2px solid rgba(255,255,255,.3); border-radius: 50%; border-top-color: white; animation: spin 1s linear infinite;"></span>',!document.getElementById("swarm-id-spinner-style")){const t=document.createElement("style");t.id="swarm-id-spinner-style",t.textContent="@keyframes spin { to { transform: rotate(360deg); } }",document.head.appendChild(t)}this.openAuthPopup()}handleDisconnectClick(){this.clearAuthData(),this.sendToParent({type:"authStatusResponse",requestId:"disconnect",authenticated:!1,origin:void 0})}setAuthButtonContainer(t){this.authButtonContainer=t,this.showAuthButton()}async handleUploadData(t,e){const{requestId:n,data:r,options:i,requestOptions:s,enableProgress:a,useWebSocket:o,useWorkers:c,workerCount:d,concurrency:u}=t;try{await this.ensureCanWrite();const t=this.createProgressCallback(e,n,a),l=await this.withModeAwareWriteLock({useWorkers:c,workerCount:d},async e=>await ls(e,r,{encryptionKey:!!i?.encrypt||void 0,pin:i?.pin,deferred:i?.deferred,tag:i?.tag,webSocket:o?{concurrency:u}:void 0,httpConcurrency:u,onProgress:t,requestOptions:s}));this.postMessage(e,{type:"uploadDataResponse",requestId:n,reference:l.reference,tagUid:l.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Upload failed")}}async handleDownloadData(t,e){const{requestId:n,reference:r,options:i,requestOptions:s}=t;try{const t=await Qe(this.bee,r,i,void 0,s);this.postMessage(e,{type:"downloadDataResponse",requestId:n,data:t})}catch(t){this.sendErrorToParent(e,n,t,"Download failed")}}async handleUploadFile(t,e){const{requestId:n,data:r,name:i,options:s,requestOptions:a,enableProgress:o,useWebSocket:c,useWorkers:d,workerCount:u,concurrency:l}=t,h=i||"index.bin";try{await this.ensureCanWrite();const t=this.createProgressCallback(e,n,o),i=s?.tag??await _i(this.bee),p=await this.withModeAwareWriteLock({useWorkers:d,workerCount:u},async e=>{const n=Xa(s),o=await ls(e,r,{encryptionKey:!!n.content||void 0,pin:s?.pin,deferred:s?.deferred,tag:i,webSocket:c?{concurrency:l}:void 0,httpConcurrency:l,onProgress:t,requestOptions:a}),d=new z,u=we(o.reference);d.addFork(h,u,{"Content-Type":"application/octet-stream",Filename:h}),d.addFork("/",V,{"website-index-document":h});return await He(d,async(t,n)=>(await ps(e,t,{pin:s?.pin,deferred:s?.deferred,tag:i,requestOptions:a}),{tagUid:n?i:void 0}),{encrypt:n.manifest})});this.postMessage(e,{type:"uploadFileResponse",requestId:n,reference:p.rootReference,tagUid:p.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Upload failed")}}async handleDownloadFile(t,e){const{requestId:n,reference:r,path:i,options:s,requestOptions:a}=t;try{const t=await je(this.bee,r,a);let o;if(i)o=i;else{const{indexDocument:e}=new sr(t).getDocsMetadata();if(!e)throw new Error("Manifest does not contain an index document reference");o=e}const c=t.find(o);if(!c)throw new Error(`Path not found in manifest: ${o}`);if(!c.targetAddress)throw new Error(`Path "${o}" does not have a target address`);const d=c.metadata?.Filename||o.split("/").pop()||"file",u=ye(c.targetAddress),l=await Qe(this.bee,u,s,void 0,a);this.postMessage(e,{type:"downloadFileResponse",requestId:n,name:d,data:l})}catch(t){this.sendErrorToParent(e,n,t,"Download failed")}}async handleUploadFiles(t,e){const{requestId:n,files:r,options:i,requestOptions:s,enableProgress:a,useWorkers:o,workerCount:c}=t;try{await this.ensureCanWrite();const t=this.createProgressCallback(e,n,a),d=i?.tag??await _i(this.bee),u=await this.withModeAwareWriteLock({useWorkers:o,workerCount:c},e=>async function(t,e,n){const{content:r,manifest:i}=Xa(n),s={pin:n?.pin,deferred:n?.deferred,tag:n?.tag,requestOptions:n?.requestOptions},a=new Set;for(const{path:t}of e){if(a.has(t))throw new Error(`Duplicate path in folder: ${t}`);a.add(t)}const o=new z;let c=0;for(const i of e){const{reference:a}=await ls(t,i.data,{...s,encryptionKey:!!r||void 0});o.addFork(i.path,we(a),{"Content-Type":i.contentType??"application/octet-stream",Filename:i.path.split("/").pop()??i.path}),c++,n?.onProgress?.({total:e.length,processed:c})}const d={};n?.indexDocument&&(d["website-index-document"]=n.indexDocument),n?.errorDocument&&(d["website-error-document"]=n.errorDocument),Object.keys(d).length>0&&o.addFork("/",V,d);const{rootReference:u,tagUid:l}=await He(o,async(e,r)=>(await ps(t,e,s),{tagUid:r?n?.tag:void 0}),{encrypt:i});return{reference:u,tagUid:l}}(e,r,{...i,tag:d,onProgress:t,requestOptions:s}));this.postMessage(e,{type:"uploadFilesResponse",requestId:n,reference:u.reference,tagUid:u.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Upload failed")}}async handleListFiles(t,e){const{requestId:n,reference:r,requestOptions:i}=t;try{const t=await async function(t,e,n){return(await je(t,e,n)).collect().filter(t=>"/"!==t.fullPathString).map(t=>({path:t.fullPathString,reference:ye(t.targetAddress),contentType:t.metadata?.["Content-Type"]}))}(this.bee,r,i);this.postMessage(e,{type:"listFilesResponse",requestId:n,entries:t})}catch(t){this.sendErrorToParent(e,n,t,"Listing failed")}}async handleUploadChunk(t,e){const{requestId:n,data:r,options:i,requestOptions:s}=t;try{if(await this.ensureCanWrite(),r.length<1||r.length>4096)throw new Error(`Invalid chunk size: ${r.length} bytes. Chunks must be between 1 and 4096 bytes.`);const t=ve(r);await this.withModeAwareWriteLock(void 0,async e=>{await ps(e,t.data,{pin:i?.pin,deferred:i?.deferred??!1,tag:i?.tag,requestOptions:s})}),this.postMessage(e,{type:"uploadChunkResponse",requestId:n,reference:t.address.toHex()})}catch(t){this.sendErrorToParent(e,n,t,"Upload failed")}}async handleDownloadChunk(t,e){const{requestId:n,reference:r,options:i,requestOptions:s}=t;try{const t=await this.bee.chunk.download(r,i,s);this.postMessage(e,{type:"downloadChunkResponse",requestId:n,data:t})}catch(t){this.sendErrorToParent(e,n,t,"Download failed")}}handleGsocMine(t,e){const{requestId:n,targetOverlay:r,identifier:i,proximity:s}=t;try{const t=this.bee.messaging.gsocMine(r,i,s);this.postMessage(e,{type:"gsocMineResponse",requestId:n,signer:t.toHex()})}catch(t){this.sendErrorToParent(e,n,t,"GSOC mine failed")}}async handleGsocSend(t,e){const{requestId:n,signer:r,identifier:i,data:s,options:a}=t;try{await this.ensureCanWrite();const t=new I(r),o=new x(i),c=await this.withModeAwareWriteLock(void 0,async e=>await hs(e,t,o,s,{pin:a?.pin,deferred:a?.deferred,tag:a?.tag}));this.postMessage(e,{type:"gsocSendResponse",requestId:n,reference:ye(c.socAddress),tagUid:c.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"GSOC send failed")}}async handleSocUpload(t,e){const{requestId:n,identifier:r,data:i,signer:s,options:a}=t;try{await this.ensureCanWrite();const t=s??this.appSecret,o=new I(t),c=new x(r),d=await this.withModeAwareWriteLock(void 0,async t=>await hs(t,o,c,i,{encryptionKey:!1!==a?.encrypt||void 0,pin:a?.pin,deferred:a?.deferred,tag:a?.tag}));this.postMessage(e,{type:"socUploadResponse",requestId:n,reference:ye(d.socAddress),tagUid:d.tagUid,encryptionKey:d.encryptionKey?ye(d.encryptionKey):void 0,owner:o.publicKey().address().toHex()})}catch(t){this.sendErrorToParent(e,n,t,"SOC upload failed")}}async handleSocRawUpload(t,e){const{requestId:n,identifier:r,data:i,signer:s,options:a}=t;try{await this.ensureCanWrite();const t=s??this.appSecret,o=new I(t),c=new x(r),d=await this.withModeAwareWriteLock(void 0,async t=>await hs(t,o,c,i,{pin:a?.pin,deferred:a?.deferred,tag:a?.tag}));this.postMessage(e,{type:"socRawUploadResponse",requestId:n,reference:ye(d.socAddress),tagUid:d.tagUid,encryptionKey:void 0,owner:o.publicKey().address().toHex()})}catch(t){this.sendErrorToParent(e,n,t,"SOC raw upload failed")}}async handleSocDownload(t,e){const{requestId:n,owner:r,identifier:i,encryptionKey:s,requestOptions:a}=t;try{let t=r;if(!t){if(!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");t=new I(this.appSecret).publicKey().address().toHex()}const o=await ze(this.bee,t,i,s,a);this.postMessage(e,{type:"socDownloadResponse",requestId:n,data:o.data,identifier:o.identifier,signature:o.signature,span:o.span,payload:o.payload,address:o.address,owner:o.owner})}catch(t){this.sendErrorToParent(e,n,t,"SOC download failed")}}async handleSocRawDownload(t,e){const{requestId:n,owner:r,identifier:i,encryptionKey:s,requestOptions:a}=t;try{let t=r;if(!t){if(!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");t=new I(this.appSecret).publicKey().address().toHex()}const o=s?await ze(this.bee,t,i,s,a):await Cn(this.bee,t,i,a);this.postMessage(e,{type:"socRawDownloadResponse",requestId:n,data:o.data,identifier:o.identifier,signature:o.signature,span:o.span,payload:o.payload,address:o.address,owner:o.owner})}catch(t){this.sendErrorToParent(e,n,t,"SOC raw download failed")}}async handleSocGetOwner(t,e){const{requestId:n}=t;try{if(!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");const t=new I(this.appSecret).publicKey().address().toHex();this.postMessage(e,{type:"socGetOwnerResponse",requestId:n,owner:t})}catch(t){this.sendErrorToParent(e,n,t,"SOC get owner failed")}}async handleDeriveAppSecret(t,e){const{requestId:n,label:r}=t;try{if(!this.authenticated||!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");const t=await Ae(this.appSecret,r);this.postMessage(e,{type:"deriveAppSecretResponse",requestId:n,secret:we(t)})}catch(t){this.sendErrorToParent(e,n,t,"deriveAppSecret failed")}}async handleGetChatKey(t,e){const{requestId:n}=t;try{if(!this.authenticated||!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");this.postMessage(e,{type:"getChatKeyResponse",requestId:n,chatKey:Un(this.appSecret)})}catch(t){this.sendErrorToParent(e,n,t,"getChatKey failed")}}handleSetBeeApiUrl(t,e){this.siteBeeApiUrl=t.beeApiUrl,this.subsidisedGatewayUrl=this.siteSubsidisedGatewayUrl,this.postMessage(e,{type:"setBeeApiUrlResponse",requestId:t.requestId,beeApiUrl:t.beeApiUrl}),this.emitConnectionInfoIfChanged()}async handleStampChunk(t,e){const{requestId:n,chunk:r}=t;try{if(await this.ensureCanWrite(),this.isSubsidisedModeActive())throw Od();const t=Fa(r,{appSecret:this.appSecret,internalOwners:this.accountInternalOwners()}),i=await this.withModeAwareWriteLock(void 0,async e=>{if(!Xi(e))throw Od();if(!(e.stamper instanceof Gs))throw new ge("internal","The write path has no utilization-aware stamper to stamp with.");const n=this.stampWithinAppLimits(e.stamper,t);return await this.persistStamperStateForStamp(),n});i.recordSlot?.(),this.postMessage(e,{type:"stampChunkResponse",requestId:n,address:ye(t.address),stamp:i.marshaled,owner:t.owner?.toHex(),signature:t.signature?.toHex()})}catch(t){this.sendErrorToParent(e,n,t,"stampChunk failed")}}async persistStamperStateForStamp(){try{await this.persistStamperState()}catch(t){throw console.error("[Proxy] Failed to save the stamp's counter:",t),new ge("internal","The stamp counter could not be saved, so no stamp was returned. Try again.")}}stampWithinAppLimits(t,e){if(!this.parentOrigin)throw new ge("not-authenticated","No app has identified itself to this frame.");const n=t.batchId.toHex(),r=Pn(this.parentOrigin,n),i=function(t){if(null===t)return{count:0,windowStart:0,windowCount:0,buckets:{}};try{const e=Ka.safeParse(JSON.parse(t));return e.success?e.data:{count:0,windowStart:0,windowCount:0,buckets:{}}}catch{return{count:0,windowStart:0,windowCount:0,buckets:{}}}}(localStorage.getItem(r)),s=Date.now();if(!e.owner){const n=this.stampNewSlot(t,e.address,i,s);return localStorage.setItem(r,JSON.stringify(n.usage)),{marshaled:n.marshaled}}const a=En(this.parentOrigin,n),o={partition:t.currentPartition??0,partitionCount:t.partitionCount},c=Ya(localStorage.getItem(a),o),d=ye(e.address),u=c.slots[d];let l,h,p,f;if(u&&t.isOwnDataSlot(e.address,u.slot)){const n=ja(i,s);if(n)throw n;l=u.slot;const r=`${a}:${d}`,o=Math.max(u.timestampMs,this.lastRestampMs.get(r)??0);h=function(t,e){return Math.max(e,t+1)}(o,s),p=qa(t.restampDataChunk(e.address,l,h)),this.lastRestampMs.set(r,h),f=za(i,s)}else{const n=this.stampNewSlot(t,e.address,i,s);l=n.slot,h=s,p=n.marshaled,f=n.usage}localStorage.setItem(r,JSON.stringify(f));return{marshaled:p,recordSlot:()=>{const t=Ya(localStorage.getItem(a),o);localStorage.setItem(a,JSON.stringify(function(t,e,n,r){return!(e in t.slots)&&Object.keys(t.slots).length>=256?t:{...t,slots:{...t.slots,[e]:{slot:n,timestampMs:r}}}}(t,d,l,h)))}}}stampNewSlot(t,e,n,r){const i=Es(e),s=Wa(n,{bucket:i,laneCapacity:t.laneCapacity(),now:r});if(s)throw s;const a=t.stampDataChunk(e,r);return{marshaled:qa(a),slot:(o=a.index,new DataView(o.buffer,o.byteOffset,o.byteLength).getUint32(4,!1)),usage:Ga(n,i,r)};var o}accountInternalOwners(){const t=this.findConnectionForParent();if(!t)throw new ge("not-authenticated","No connected account for this app. Please login first.");return function(t){const{derivationKey:e}=t,n=Oe(e,Me),i=[e,n,Oe(n,Ue),Oe(e,Re),Oe(e,Fe)];t.postageSignerKey&&i.push(t.postageSignerKey);const s=new Set(i.map(t=>Ra(new I(t))));return s.add(new r(t.accountAddress).toHex().toLowerCase()),s}({accountAddress:t.account.id.toHex(),derivationKey:t.account.derivationKey,postageSignerKey:this.signerKey})}parseFeedTimestamp(t){if("number"==typeof t)return BigInt(Math.floor(t));if(!/^-?\d+$/.test(t))throw new Error(`Invalid timestamp format: "${t}" (expected decimal integer)`);return BigInt(t)}parseFeedIndex(t){if("number"==typeof t)return BigInt(Math.floor(t));if(!/^-?\d+$/.test(t))throw new Error(`Invalid index format: "${t}" (expected decimal integer)`);return BigInt(t)}makeSequentialFeedIdentifier(t,e){const n=s.Binary.numberToUint64(e,"BE");return s.Binary.keccak256(s.Binary.concatBytes(t,n))}async findLatestSequentialIndex(t,e,n,r){const i={...n,timeout:r??2e3},s=(a={bee:this.bee,topic:new ht(t),owner:e},new tc(a.bee,a.topic,a.owner));var a;return(await s.findAt(0n,0n,i)).current}sequentialNextIndex(t){return t===(1n<<64n)-1n?0n:t+1n}async handleFeedGetOwner(t,e){const{requestId:n}=t;try{if(!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");const t=new I(this.appSecret).publicKey().address().toHex();this.postMessage(e,{type:"feedGetOwnerResponse",requestId:n,owner:t})}catch(t){this.sendErrorToParent(e,n,t,"Feed get owner failed")}}async handleEpochFeedDownloadReference(t,e){const{requestId:n,topic:i,owner:s,at:a,after:o,encryptionKey:c}=t;try{let t=s;if(!t){if(!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");t=new I(this.appSecret).publicKey().address().toHex()}const d=new ht(we(i)),u=new r(t),l=this.parseFeedTimestamp(a),h=void 0!==o?this.parseFeedTimestamp(o):0n,p=c?we(c):void 0;let f;if(p){const t=Qo({bee:this.bee,topic:d,owner:u,encryptionKey:p});f=await t.findAt(l,h)}else{const t=Qo({bee:this.bee,topic:d,owner:u});f=await t.findAt(l,h)}this.postMessage(e,{type:"epochFeedDownloadReferenceResponse",requestId:n,reference:f?ye(f):void 0})}catch(t){this.sendErrorToParent(e,n,t,"Epoch feed download reference failed")}}async handleEpochFeedUploadReference(t,e){const{requestId:n,topic:r,signer:i,at:s,reference:a,encryptionKey:o,hints:c}=t;try{await this.ensureCanWrite();const t=i??this.appSecret,u=new I(t),l=new ht(we(r)),h=u.publicKey().address(),p=this.parseFeedTimestamp(s),f=o?we(o):void 0,y=c?.lastEpoch?{lastEpoch:{start:BigInt(c.lastEpoch.start),level:c.lastEpoch.level},lastTimestamp:c.lastTimestamp?BigInt(c.lastTimestamp):void 0}:void 0,w=we(a);if(32!==w.length&&64!==w.length)throw new Error(`Reference must be 32 or 64 bytes, got ${w.length}`);const g=(d={bee:this.bee,topic:l,owner:h,signer:u},new _o(d.topic,d.signer)),m=await this.withModeAwareWriteLock(void 0,async t=>await g.update(p,w,t,f,y)),b=Qo({bee:this.bee,topic:l,owner:h,encryptionKey:f});await b.findAt(p,p),this.postMessage(e,{type:"epochFeedUploadReferenceResponse",requestId:n,socAddress:ye(m.socAddress),encryptionKey:o||void 0,epoch:{start:m.epoch.start.toString(),level:m.epoch.level},timestamp:m.timestamp.toString()})}catch(t){this.sendErrorToParent(e,n,t,"Epoch feed upload reference failed")}var d}async handleSequentialFeedGetOwner(t,e){const{requestId:n}=t;try{if(!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");const t=new I(this.appSecret).publicKey().address().toHex();this.postMessage(e,{type:"seqFeedGetOwnerResponse",requestId:n,owner:t})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed get owner failed")}}async resolveSequentialOwner(t){if(t)return t;if(!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");return new I(this.appSecret).publicKey().address().toHex()}parseSequentialPayload(t,e){if(!e)return{payload:t};if(t.length<8)return{payload:t,timestamp:void 0};const n=new DataView(t.buffer,t.byteOffset,t.byteLength),r=Number(n.getBigUint64(0,!1));return{payload:t.slice(8),timestamp:r}}async resolveSequentialIndex(t,e,n,r,i=!0,s,a,o=!1,c){if(!o&&!a)throw new ge("invalid-request","Encryption key is required for encrypted feed lookup");if(void 0!==n)return this.parseFeedIndex(n);const d=await this.findLatestSequentialIndex(t,e,s,c);if(void 0===d)throw new Error("Sequential feed has no updates");if(void 0===r)return d;if(!i)throw new Error("Cannot use 'at' without timestamps");const u=this.parseFeedTimestamp(r);for(let n=d;n>=0n;n--){const r=this.makeSequentialFeedIdentifier(t,n),i=new x(r),c=o?a?await ze(this.bee,e,i,a,s):await Cn(this.bee,e,i,s):await ze(this.bee,e,i,a??"",s),d=this.parseSequentialPayload(c.payload,!0);if(void 0!==d.timestamp&&BigInt(d.timestamp)<=u)return n;if(0n===n)break}return d}async handleSequentialFeedDownloadPayload(t,e){const{requestId:n,topic:i,owner:s,index:a,at:o,hasTimestamp:c,encryptionKey:d,lookupTimeoutMs:u,requestOptions:l}=t;try{if(!d)throw new ge("invalid-request","Encryption key is required for downloadPayload");const t=await this.resolveSequentialOwner(s),h=new r(t),p=we(i),f=!1!==c,y=await this.resolveSequentialIndex(p,h,a,o,f,l,d,!1,u),w=this.makeSequentialFeedIdentifier(p,y),g=new x(w),m=await ze(this.bee,h,g,d,l),b=this.parseSequentialPayload(m.payload,f),v=this.sequentialNextIndex(y);this.postMessage(e,{type:"seqFeedDownloadPayloadResponse",requestId:n,payload:b.payload,timestamp:b.timestamp,feedIndex:y.toString(),feedIndexNext:v.toString()})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed download payload failed")}}async handleSequentialFeedDownloadRawPayload(t,e){const{requestId:n,topic:i,owner:s,index:a,at:o,hasTimestamp:c,encryptionKey:d,lookupTimeoutMs:u,requestOptions:l}=t;try{const t=await this.resolveSequentialOwner(s),h=new r(t),p=we(i),f=!1!==c,y=await this.resolveSequentialIndex(p,h,a,o,f,l,d,!0,u),w=this.makeSequentialFeedIdentifier(p,y),g=new x(w),m=d?await ze(this.bee,h,g,d,l):await Cn(this.bee,h,g,l),b=this.parseSequentialPayload(m.payload,f),v=this.sequentialNextIndex(y);this.postMessage(e,{type:"seqFeedDownloadRawPayloadResponse",requestId:n,payload:b.payload,timestamp:b.timestamp,feedIndex:y.toString(),feedIndexNext:v.toString()})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed download raw payload failed")}}async handleSequentialFeedDownloadReference(t,e){const{requestId:n,topic:i,owner:s,index:a,at:o,hasTimestamp:c,encryptionKey:d,lookupTimeoutMs:u,requestOptions:l}=t;try{if(!d)throw new ge("invalid-request","Encryption key is required for downloadReference");const t=await this.resolveSequentialOwner(s),h=new r(t),p=we(i),f=!1!==c,y=await this.resolveSequentialIndex(p,h,a,o,f,l,d,!1,u),w=this.makeSequentialFeedIdentifier(p,y),g=new x(w),m=await ze(this.bee,h,g,d,l),b=this.parseSequentialPayload(m.payload,f);if(32!==b.payload.length&&64!==b.payload.length)throw new Error("Sequential feed update does not contain a reference; use downloadPayload");const v=ye(b.payload),S=this.sequentialNextIndex(y);this.postMessage(e,{type:"seqFeedDownloadReferenceResponse",requestId:n,reference:v,feedIndex:y.toString(),feedIndexNext:S.toString()})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed download reference failed")}}buildSequentialPayload(t,e,n){if(!e)return t;const r=new Uint8Array(8);return new DataView(r.buffer).setBigUint64(0,n,!1),s.Binary.concatBytes(r,t)}async handleSequentialFeedUploadPayload(t,e){const{requestId:n,topic:r,signer:i,data:s,index:a,at:o,hasTimestamp:c,lookupTimeoutMs:d,options:u,requestOptions:l}=t;try{await this.ensureCanWrite();const t=i??this.appSecret,h=new I(t),p=h.publicKey().address(),f=we(r),y=!1!==c,w=void 0!==o?this.parseFeedTimestamp(o):BigInt(Math.floor(Date.now()/1e3));let g;if(void 0!==a)g=this.parseFeedIndex(a);else{const t=await this.findLatestSequentialIndex(f,p,l,d);g=void 0===t?0n:this.sequentialNextIndex(t)}const m=this.buildSequentialPayload(s,y,w);if(m.length<1||m.length>4096)throw new Error(`Invalid payload length: ${m.length} (expected 1-4096)`);const b=this.makeSequentialFeedIdentifier(f,g),v=new x(b),S=await this.withModeAwareWriteLock(void 0,async t=>await hs(t,h,v,m,{encryptionKey:!1!==u?.encrypt||void 0,pin:u?.pin,deferred:u?.deferred,tag:u?.tag}));this.postMessage(e,{type:"seqFeedUploadPayloadResponse",requestId:n,reference:ye(S.socAddress),feedIndex:g.toString(),owner:p.toHex(),encryptionKey:S.encryptionKey?ye(S.encryptionKey):void 0,tagUid:S.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed upload payload failed")}}async handleSequentialFeedUploadRawPayload(t,e){const{requestId:n,topic:r,signer:i,data:s,index:a,at:o,hasTimestamp:c,encryptionKey:d,lookupTimeoutMs:u,options:l,requestOptions:h}=t;try{await this.ensureCanWrite();const t=i??this.appSecret,p=new I(t),f=p.publicKey().address(),y=we(r),w=!1!==c,g=void 0!==o?this.parseFeedTimestamp(o):BigInt(Math.floor(Date.now()/1e3));let m;if(void 0!==a)m=this.parseFeedIndex(a);else{const t=await this.findLatestSequentialIndex(y,f,h,u);m=void 0===t?0n:this.sequentialNextIndex(t)}const b=this.buildSequentialPayload(s,w,g);if(b.length<1||b.length>4096)throw new Error(`Invalid payload length: ${b.length} (expected 1-4096)`);const v=this.makeSequentialFeedIdentifier(y,m),S=new x(v),k=await this.withModeAwareWriteLock(void 0,async t=>await hs(t,p,S,b,{encryptionKey:d?we(d):void 0,pin:l?.pin,deferred:l?.deferred,tag:l?.tag}));this.postMessage(e,{type:"seqFeedUploadRawPayloadResponse",requestId:n,reference:ye(k.socAddress),feedIndex:m.toString(),owner:f.toHex(),encryptionKey:d||void 0,tagUid:k.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed upload raw payload failed")}}async handleSequentialFeedUploadReference(t,e){const{requestId:n,topic:r,signer:i,reference:s,index:a,at:o,hasTimestamp:c,lookupTimeoutMs:d,options:u,requestOptions:l}=t;try{await this.ensureCanWrite();const t=i??this.appSecret,h=new I(t),p=h.publicKey().address(),f=we(r),y=!1!==c,w=void 0!==o?this.parseFeedTimestamp(o):BigInt(Math.floor(Date.now()/1e3));let g;if(void 0!==a)g=this.parseFeedIndex(a);else{const t=await this.findLatestSequentialIndex(f,p,l,d);g=void 0===t?0n:this.sequentialNextIndex(t)}const m=we(s),b=this.buildSequentialPayload(m,y,w);if(b.length<1||b.length>4096)throw new Error(`Invalid payload length: ${b.length} (expected 1-4096)`);const v=this.makeSequentialFeedIdentifier(f,g),S=new x(v),k=await this.withModeAwareWriteLock(void 0,async t=>await hs(t,h,S,b,{encryptionKey:!0,pin:u?.pin,deferred:u?.deferred,tag:u?.tag}));this.postMessage(e,{type:"seqFeedUploadReferenceResponse",requestId:n,reference:ye(k.socAddress),feedIndex:g.toString(),owner:p.toHex(),encryptionKey:k.encryptionKey?ye(k.encryptionKey):void 0,tagUid:k.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"Sequential feed upload reference failed")}}sharingSecret(){const t=this.findConnectionForParent()?.account.derivationKey;return t?kn(t).secret:void 0}actKeys(){const t=we(this.appSecret),e=this.sharingSecret();return e?[t,e]:[t]}async handleActUploadData(t,e){const{requestId:n,data:r,grantees:i,options:s,requestOptions:a,enableProgress:o}=t;try{await this.ensureCanWrite();const t=i.map(t=>$d(t)),c=this.createProgressCallback(e,n,o),d="identity"===s?.publisher?this.sharingSecret():we(this.appSecret);if(!d)throw new Error("No sharing key: this session carries no account");const u=!0===s?.beeCompatible,{actResult:l,contentUpload:h}=await this.withModeAwareWriteLock({useWorkers:!0},async e=>{const n=await ls(e,r,{encryptionKey:!1!==s?.encrypt||void 0,pin:s?.pin,deferred:s?.deferred,tag:s?.tag,onProgress:c,requestOptions:a}),i=new z,o=we(n.reference);i.addFork(Dd,o,{"Content-Type":"application/octet-stream",Filename:Dd}),i.addFork("/",V,{"website-index-document":Dd});const l=await He(i,async t=>(await ps(e,t,{pin:s?.pin,deferred:s?.deferred,tag:s?.tag}),{}),{encrypt:!u}),h=we(l.rootReference);return{actResult:await Pd(e,h,d,t,s,a),contentUpload:n}});this.postMessage(e,{type:"actUploadDataResponse",requestId:n,encryptedReference:l.encryptedReference,historyReference:l.historyReference,granteeListReference:l.granteeListReference,publisherPubKey:l.publisherPubKey,actReference:l.actReference,tagUid:h.tagUid})}catch(t){this.sendErrorToParent(e,n,t,"ACT upload failed")}}async handleActDownloadData(t,e){const{requestId:n,encryptedReference:r,historyReference:i,publisherPubKey:s,timestamp:a,requestOptions:o}=t;try{if(!this.authenticated||!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");const t=await Ed(this.bee,r,i,s,this.actKeys(),a,o),c=await je(this.bee,t,o),{indexDocument:d}=new sr(c).getDocsMetadata();if(!d)throw new Error("Manifest does not contain an index document reference");const u=c.find(d);if(!u)throw new Error(`Content node "${d}" not found in manifest`);if(!u.targetAddress)throw new Error(`Content node "${d}" does not have a target address`);const l=ye(u.targetAddress),h=await Qe(this.bee,l,void 0,void 0,o);this.postMessage(e,{type:"actDownloadDataResponse",requestId:n,data:h})}catch(t){this.sendErrorToParent(e,n,t,"ACT download failed")}}async handleActAddGrantees(t,e){const{requestId:n,historyReference:r,grantees:i,requestOptions:s}=t;try{await this.ensureCanWrite();const t=this.actKeys(),a=i.map(t=>$d(t)),o=await this.withModeAwareWriteLock({useWorkers:!0},async e=>await async function(t,e,n,r,i,s,a,o){const c=64===n.length,d=kd(await Qe(e,n,void 0,void 0,a),we(n));await xd(d,async t=>Qe(e,t,void 0,void 0,a));const u=vd(d);if(!u)throw new Error("History manifest is empty");const l=ad(await Qe(e,u.metadata.actReference,void 0,void 0,a)),{privateKey:h,derived:p,entry:f}=Cd(l,r),y=nd(f.encryptedAccessKey,p.accessKeyDecryptionKey),w=[...l];for(const t of i){const e=td(h,t.x,t.y);w.push({lookupKey:e.lookupKey,encryptedAccessKey:ed(y,e.accessKeyDecryptionKey)})}let g=[];u.metadata.encryptedGranteeListRef&&(g=hd(await Qe(e,u.metadata.encryptedGranteeListRef,void 0,void 0,a),h));const m=[...g,...i],b=sd(w),v=await ls(t,b,{encryptionKey:!c||void 0,pin:s?.pin,deferred:s?.deferred,tag:s?.tag,requestOptions:a}),S=ld(m,h),k=await ls(t,S,{encryptionKey:!0,pin:s?.pin,deferred:s?.deferred,requestOptions:a});bd(d,Id(),v.reference,k.reference);const x=await Sd(d,async(e,n)=>ls(t,e,{encryptionKey:!c||void 0,pin:s?.pin,deferred:s?.deferred,tag:s?.tag,onProgress:n?o:void 0,requestOptions:a})),I=x.rootReference,A=x.tagUid;return{historyReference:I,granteeListReference:k.reference,actReference:v.reference,tagUid:A}}(e,this.bee,r,t,a,void 0,s));this.postMessage(e,{type:"actAddGranteesResponse",requestId:n,historyReference:o.historyReference,granteeListReference:o.granteeListReference,actReference:o.actReference})}catch(t){this.sendErrorToParent(e,n,t,"ACT add grantees failed")}}async handleActRevokeGrantees(t,e){const{requestId:n,historyReference:r,encryptedReference:i,revokeGrantees:s,requestOptions:a}=t;try{await this.ensureCanWrite();const t=this.actKeys(),o=s.map(t=>$d(t)),c=await this.withModeAwareWriteLock({useWorkers:!0},async e=>await async function(t,e,n,r,i,s,a,o,c){const d=64===n.length,u=kd(await Qe(e,n,void 0,void 0,o),we(n));await xd(u,async t=>Qe(e,t,void 0,void 0,o));const l=vd(u);if(!l)throw new Error("History manifest is empty");const h=ad(await Qe(e,l.metadata.actReference,void 0,void 0,o)),{privateKey:p,derived:f,entry:y}=Cd(h,i),w=nd(y.encryptedAccessKey,f.accessKeyDecryptionKey);let g=[];l.metadata.encryptedGranteeListRef&&(g=hd(await Qe(e,l.metadata.encryptedGranteeListRef,void 0,void 0,o),p));const m=g.filter(t=>!s.some(e=>function(t,e){if(t.x.length!==e.x.length||t.y.length!==e.y.length)return!1;for(let n=0;n<t.x.length;n++)if(t.x[n]!==e.x[n])return!1;for(let n=0;n<t.y.length;n++)if(t.y[n]!==e.y[n])return!1;return!0}(t,e))),b=[];b.push({lookupKey:f.lookupKey,encryptedAccessKey:ed(w,f.accessKeyDecryptionKey)});for(const t of m){const e=td(p,t.x,t.y);b.push({lookupKey:e.lookupKey,encryptedAccessKey:ed(w,e.accessKeyDecryptionKey)})}const v=sd(b),S=await ls(t,v,{encryptionKey:!d||void 0,pin:a?.pin,deferred:a?.deferred,tag:a?.tag,requestOptions:o}),k=ld(m,p),x=await ls(t,k,{encryptionKey:!0,pin:a?.pin,deferred:a?.deferred,requestOptions:o});bd(u,Id(),S.reference,x.reference);const I=await Sd(u,async(e,n)=>ls(t,e,{encryptionKey:!d||void 0,pin:a?.pin,deferred:a?.deferred,tag:a?.tag,onProgress:n?c:void 0,requestOptions:o})),A=I.rootReference,C=I.tagUid;return{encryptedReference:r,historyReference:A,granteeListReference:x.reference,actReference:S.reference,tagUid:C}}(e,this.bee,r,i,t,o,void 0,a));this.postMessage(e,{type:"actRevokeGranteesResponse",requestId:n,encryptedReference:c.encryptedReference,historyReference:c.historyReference,granteeListReference:c.granteeListReference,actReference:c.actReference})}catch(t){this.sendErrorToParent(e,n,t,"ACT revoke grantees failed")}}async handleActGetGrantees(t,e){const{requestId:n,historyReference:r,requestOptions:i}=t;try{if(!this.authenticated||!this.appSecret)throw new ge("not-authenticated","Not authenticated. Please login first.");const t=this.actKeys(),s=await async function(t,e,n,r){const i=kd(await Qe(t,e,void 0,void 0,r),we(e));await xd(i,async e=>Qe(t,e,void 0,void 0,r));const s=vd(i);if(!s||!s.metadata.encryptedGranteeListRef)return[];const a=await Qe(t,s.metadata.actReference,void 0,void 0,r),{privateKey:o}=Cd(ad(a),n);return hd(await Qe(t,s.metadata.encryptedGranteeListRef,void 0,void 0,r),o).map(t=>{const e=id(t.x,t.y);return ye(e)})}(this.bee,r,t,i);this.postMessage(e,{type:"actGetGranteesResponse",requestId:n,grantees:s})}catch(t){this.sendErrorToParent(e,n,t,"ACT get grantees failed")}}async handleGetPostageBatch(t,e){const n=this.lookupPostageStampForApp();if(!n)return void this.postMessage(e,{type:"getPostageBatchResponse",requestId:t.requestId,postageBatch:void 0});const r=await $n(this.beeApiUrl,n.batchID.toHex());let i=await async function(t,e,n,r){const i=jc(t,r);return await Jc(t,n,i)??await an(e,n)}(this.gnosisRpcUrl,this.beeApiUrl,n.batchID.toHex(),this.postageStampContractAddress);if(void 0===i)try{const t=await Dn();i=Bn(n.amount,t)}catch(t){console.warn("[Proxy] Failed to calculate TTL:",t)}const s={batchID:n.batchID.toHex(),utilization:n.utilization,usable:r?.usable??n.usable,label:"",depth:n.depth,amount:n.amount.toString(),bucketDepth:n.bucketDepth,blockNumber:n.blockNumber,immutableFlag:n.immutableFlag,exists:r?.exists??n.exists,batchTTL:i};this.postMessage(e,{type:"getPostageBatchResponse",requestId:t.requestId,postageBatch:s})}async handleCreateFeedManifest(t,e){const{topic:n,owner:r,feedType:i,uploadOptions:s}=t;let a=r;if(!a&&this.appSecret){const t=new I(this.appSecret);a=t.publicKey().address().toHex()}if(a)try{await this.ensureCanWrite();const r=await this.withModeAwareWriteLock(void 0,async t=>await async function(t,e,n,r,i){const s=n.startsWith("0x")?n.slice(2):n,a="stamper"===t.mode?i?.tag??await _i(t.bee):void 0,o={pin:i?.pin,deferred:i?.deferred,tag:a},c=new z;c.addFork("/",V,{"swarm-feed-owner":s,"swarm-feed-topic":e,"swarm-feed-type":r?.feedType??"Sequence"});const d=c.forks.get(47);if(!d)throw new Error("[FeedManifest] Failed to create '/' fork");const u=d.node,l=await u.marshal(),h=ve(l);await ps(t,h.data,o),u.selfAddress=h.address.toUint8Array();const p=await c.marshal();if(!1!==r?.encrypt){const e=be(p);await ps(t,e.data,o);const n=new Uint8Array(64);return n.set(e.address.toUint8Array(),0),n.set(e.encryptionKey,32),{reference:ye(n),tagUid:a}}{const e=ve(p);return await ps(t,e.data,o),{reference:e.address.toHex(),tagUid:a}}}(t,n,a,{encrypt:!1!==s?.encrypt,feedType:i},s));this.postMessage(e,{type:"createFeedManifestResponse",requestId:t.requestId,reference:r.reference})}catch(n){this.sendErrorToParent(e,t.requestId,n,"Create feed manifest failed")}else this.sendErrorToParent(e,t.requestId,new ge("invalid-request","No owner provided and no app signer available"),"No owner provided and no app signer available")}}function qd(t){return new Fd(t)}async function Ld(t){const e=async()=>{if((void 0===t.graceMs||!Kd(t.cooldownKey,t.graceMs))&&(t.force||!Kd(t.cooldownKey,t.cooldownMs)))try{await t.task()}finally{!function(t){if("undefined"==typeof window||!window.localStorage)return;window.localStorage.setItem(t,String(Date.now()))}(t.cooldownKey)}};"undefined"!=typeof navigator&&navigator.locks?await navigator.locks.request(t.lockName,{mode:"exclusive"},e):await e()}function Kd(t,e){if("undefined"==typeof window||!window.localStorage)return!1;const n=window.localStorage.getItem(t);if(!n)return!1;const r=Number(n);return Number.isFinite(r)&&Date.now()-r<e}const Nd="solarpunkid.eth",Hd="buzz.solarpunk.sites",jd="[SiteAllowList]",Wd=/[\s,]+/,zd=/^[a-z0-9-]+$/,Gd=32,Vd=Yd("resolver(bytes32)"),Jd=Yd("text(bytes32,string)"),Zd=ae({ensName:ue(),recordKey:ue(),origins:de(ue()),fetchedAt:le()});function Yd(t){return ye(Tn((new TextEncoder).encode(t)).slice(0,4))}function _d(t){return t.toString(16).padStart(64,"0")}function Qd(t,e){if("string"==typeof t&&t.length>262146)throw new Error(`${e} answered ${t.length} characters, longer than 131072 bytes of hex data.`);if("string"!=typeof t||!/^0x([0-9a-fA-F]{2})*$/.test(t))throw new Error(`${e} answered something that is not hex data.`);return we(t.slice(2))}function Xd(t,e){if(e+Gd>t.length)throw new Error("The answer ends inside a word.");return BigInt(`0x${ye(t.slice(e,e+Gd))}`)}async function tu(t,e,n){return Rn(t,"eth_call",[{to:e,data:n},"latest"],{timeoutMs:sn})}async function eu(t,e,n){const r=function(t){let e=new Uint8Array(Gd);const n=""===t?[]:t.split(".");for(const t of n.reverse()){const n=new Uint8Array(64);n.set(e),n.set(Tn((new TextEncoder).encode(t)),Gd),e=Tn(n)}return`0x${ye(e)}`}(e),i=function(t){const e=Qd(t,"The registry");if(e.length!==Gd)throw new Error("The registry answered a resolver that is not one word.");if(e.slice(0,12).some(t=>0!==t))throw new Error("The registry answered a resolver that is not an address.");const n=e.slice(12);return n.every(t=>0===t)?void 0:`0x${ye(n)}`}(await tu(t,"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",`0x${Vd}${r.slice(2)}`));if(!i)throw new Error(`${e} has no resolver.`);return function(t){const e=Qd(t,"The resolver"),n=Xd(e,0);if(n>BigInt(e.length))throw new Error("The resolver answered a string offset past its end.");const r=Number(n),i=Xd(e,r),s=BigInt(r+Gd)+i;if(s>BigInt(e.length))throw new Error("The resolver answered a string longer than its answer.");return new TextDecoder("utf-8",{fatal:!0}).decode(e.slice(r+Gd,Number(s)))}(await tu(t,i,function(t,e){const n=(new TextEncoder).encode(e),r=ye(n),i=Math.ceil(n.length/Gd)*Gd*2,s=_d(64);return`0x${Jd}${t.slice(2)}${s}${_d(n.length)}${r.padEnd(i,"0")}`}(r,n)))}function nu(t,e){return{allowed:!1,reason:t,message:{"not-clean":`${e} is not a plain https site address, and Swarm ID serves only the sites on its allow list.`,"not-listed":`${e} is not on Swarm ID's allow list of sites.`,"list-unavailable":`Swarm ID could not read its allow list of sites, so it refused ${e}. It serves no site until the list can be read.`}[t]}}function ru(t){const e=t.now??Date.now,n=function(t){const e=new Set;for(const n of t)On(n,{allowLocalHttp:!0})?e.add(n):console.warn(`${jd} Ignored a dev origin that is not a clean origin:`,n);return e}(t.devOrigins??[]);let r,i;const s=n=>{if(!n||n.ensName!==t.ensName||n.recordKey!==t.recordKey)return!1;const r=e()-n.fetchedAt;return r>=0&&r<6e5},a=async()=>{if(t.rpcUrl)if(function(t){const e=t.split(".");return e.length>=2&&e.every(t=>zd.test(t))}(t.ensName))try{const n=function(t){const e=[];for(const n of t.split(Wd))""!==n&&(On(n)?e.push(n):console.warn(`${jd} Ignored an entry that is not a clean https origin:`,n));return e}(await eu(t.rpcUrl,t.ensName,t.recordKey));return 0===n.length?void console.warn(`${jd} The record names no site, so no site is allowed.`):((e=>{r=e;try{t.storage?.setItem(Mn,JSON.stringify(e))}catch(t){console.warn(`${jd} Could not keep the list in storage:`,t)}})({ensName:t.ensName,recordKey:t.recordKey,origins:n,fetchedAt:e()}),n)}catch(t){return void console.warn(`${jd} Could not read the list, so no site is allowed:`,t)}else console.warn(`${jd} The ENS name is not a plain lower-case name:`,t.ensName);else console.warn(`${jd} No Ethereum endpoint is set, so no site is allowed.`)},o=async()=>{if(s(r))return r.origins;const e=(()=>{try{const e=t.storage?.getItem(Mn);if(!e)return;const n=Zd.safeParse(JSON.parse(e));return n.success?n.data:void 0}catch{return}})();return s(e)?(r=e,e.origins):(i??(i=a().finally(()=>{i=void 0})),i)};return{async check(t){if(n.has(t))return{allowed:!0};if(!On(t))return nu("not-clean",t);const e=await o();return e?e.includes(t)?{allowed:!0}:nu("not-listed",t):nu("list-unavailable",t)}}}export{bi as AccountBus,gn as AuthDataSchema,Is as BUCKET_DEPTH,Zc as DAY,un as DEFAULT_GNOSIS_RPC_URL,Nd as DEFAULT_SITE_ALLOW_LIST_ENS_NAME,Hd as DEFAULT_SITE_ALLOW_LIST_RECORD_KEY,Sa as DebouncedUtilizationUploader,nn as GNOSIS_BLOCK_TIME,Be as LocalAccountSchemaV1,Ws as MIN_USABLE_BATCH_DEPTH,Ee as NetworkSettingsSchemaV1,As as PARTITION_COUNT,Ba as PASSWORD_KDF_ITERATIONS,pa as PRESENCE_INTERVAL_MS,Wo as PartitionLease,tn as PostageStampSchemaV1,fa as PresenceTracker,ln as STORAGE_CHALLENGE_KEY,$e as STORAGE_KEY_ACCOUNTS,Pe as STORAGE_KEY_NETWORK_SETTINGS,va as SignalingTransport,Qi as SocUploadError,Gs as UtilizationAwareStamper,Ma as UtilizationStoreDB,da as accountDeltaSnapshot,_c as appSessionDuration,Vc as calculateContractTTLSeconds,aa as createAccountsStorageManager,oa as createNetworkSettingsStorageManager,ru as createSiteAllowList,Oc as createSyncAccount,Ua as decryptSeed,ha as deriveBusContext,Un as deriveChatKey,Da as deriveKeyFromPassword,Ea as deriveKeyFromPrf,Pa as deriveKeyFromSecret,$a as deriveKeyFromSignature,xn as derivePostageSignerKeySync,Ae as deriveSecret,Oe as deriveSecretSync,kn as deriveSharingKey,en as deriveSwarmEncryptionKey,$c as detectDeviceName,ze as downloadEncryptedSOC,Ca as encryptSeed,Gc as fetchOnChainBatchStateResult,Fc as foldAccountFromSwarm,Mc as foldedToSyncedAccount,Pc as getOrCreateDeviceId,qd as initProxy,De as isSignedOutAccount,mn as leaseCacheStorageKey,Kc as markFirstPartyStorage,io as mergeConnectedApps,Ec as mergeDevices,ro as mergeDevicesList,so as mergePostageStamps,fn as onlySiteChatBinding,Aa as randomSalt,no as remainingLifespanSeconds,la as restoreLocalSessionFields,Ld as runCoalescedAcrossTabs,Qs as serializePostageStamp,Js as serializeSyncedAccount,pn as siteChatAddress,Ve as sleep,to as stampsReachableByApp,hs as uploadSOC};
|
|
2
|
+
//# sourceMappingURL=internal.esm.js.map
|